From 823f9edcb3c0fbc9e03d07df0d94be1f0f371660 Mon Sep 17 00:00:00 2001 From: Daniel Baez Date: Thu, 12 Sep 2024 17:14:46 -0500 Subject: [PATCH 1/3] aave-loan-requester: wip --- .../src/bundled-resources/shinkai-viem.ts | 2 +- .../src/index.test.ts | 1 + .../src/index.ts | 16 +++++++++--- libs/shinkai-viem/src/index.ts | 26 ++++++++++--------- 4 files changed, 28 insertions(+), 17 deletions(-) diff --git a/apps/shinkai-tool-aave-loan-requester/src/bundled-resources/shinkai-viem.ts b/apps/shinkai-tool-aave-loan-requester/src/bundled-resources/shinkai-viem.ts index 88517ce..5e97214 100644 --- a/apps/shinkai-tool-aave-loan-requester/src/bundled-resources/shinkai-viem.ts +++ b/apps/shinkai-tool-aave-loan-requester/src/bundled-resources/shinkai-viem.ts @@ -1,2 +1,2 @@ // autogenerated -export const viemScriptContent = "InVzZSBzdHJpY3QiOwooKCkgPT4gewogIHZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7CiAgdmFyIF9fZXNtID0gKGZuLCByZXMpID0+IGZ1bmN0aW9uIF9faW5pdCgpIHsKICAgIHJldHVybiBmbiAmJiAocmVzID0gKDAsIGZuW19fZ2V0T3duUHJvcE5hbWVzKGZuKVswXV0pKGZuID0gMCkpLCByZXM7CiAgfTsKICB2YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHsKICAgIGZvciAodmFyIG5hbWUgaW4gYWxsKQogICAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pOwogIH07CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL3ZlcnNpb24uanMKICB2YXIgdmVyc2lvbjsKICB2YXIgaW5pdF92ZXJzaW9uID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL3ZlcnNpb24uanMiKCkgewogICAgICB2ZXJzaW9uID0gIjEuMC41IjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vZXJyb3JzLmpzCiAgdmFyIEJhc2VFcnJvcjsKICB2YXIgaW5pdF9lcnJvcnMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vZXJyb3JzLmpzIigpIHsKICAgICAgaW5pdF92ZXJzaW9uKCk7CiAgICAgIEJhc2VFcnJvciA9IGNsYXNzIF9CYXNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3Ioc2hvcnRNZXNzYWdlLCBhcmdzID0ge30pIHsKICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSBhcmdzLmNhdXNlIGluc3RhbmNlb2YgX0Jhc2VFcnJvciA/IGFyZ3MuY2F1c2UuZGV0YWlscyA6IGFyZ3MuY2F1c2U/Lm1lc3NhZ2UgPyBhcmdzLmNhdXNlLm1lc3NhZ2UgOiBhcmdzLmRldGFpbHM7CiAgICAgICAgICBjb25zdCBkb2NzUGF0aDkgPSBhcmdzLmNhdXNlIGluc3RhbmNlb2YgX0Jhc2VFcnJvciA/IGFyZ3MuY2F1c2UuZG9jc1BhdGggfHwgYXJncy5kb2NzUGF0aCA6IGFyZ3MuZG9jc1BhdGg7CiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gWwogICAgICAgICAgICBzaG9ydE1lc3NhZ2UgfHwgIkFuIGVycm9yIG9jY3VycmVkLiIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICAuLi5hcmdzLm1ldGFNZXNzYWdlcyA/IFsuLi5hcmdzLm1ldGFNZXNzYWdlcywgIiJdIDogW10sCiAgICAgICAgICAgIC4uLmRvY3NQYXRoOSA/IFtgRG9jczogaHR0cHM6Ly9hYml0eXBlLmRldiR7ZG9jc1BhdGg5fWBdIDogW10sCiAgICAgICAgICAgIC4uLmRldGFpbHMgPyBbYERldGFpbHM6ICR7ZGV0YWlsc31gXSA6IFtdLAogICAgICAgICAgICBgVmVyc2lvbjogYWJpdHlwZUAke3ZlcnNpb259YAogICAgICAgICAgXS5qb2luKCJcbiIpOwogICAgICAgICAgc3VwZXIobWVzc2FnZSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRldGFpbHMiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkb2NzUGF0aCIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm1ldGFNZXNzYWdlcyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNob3J0TWVzc2FnZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiQWJpVHlwZUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoYXJncy5jYXVzZSkKICAgICAgICAgICAgdGhpcy5jYXVzZSA9IGFyZ3MuY2F1c2U7CiAgICAgICAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzOwogICAgICAgICAgdGhpcy5kb2NzUGF0aCA9IGRvY3NQYXRoOTsKICAgICAgICAgIHRoaXMubWV0YU1lc3NhZ2VzID0gYXJncy5tZXRhTWVzc2FnZXM7CiAgICAgICAgICB0aGlzLnNob3J0TWVzc2FnZSA9IHNob3J0TWVzc2FnZTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL3JlZ2V4LmpzCiAgZnVuY3Rpb24gZXhlY1R5cGVkKHJlZ2V4LCBzdHJpbmcpIHsKICAgIGNvbnN0IG1hdGNoID0gcmVnZXguZXhlYyhzdHJpbmcpOwogICAgcmV0dXJuIG1hdGNoPy5ncm91cHM7CiAgfQogIHZhciBieXRlc1JlZ2V4LCBpbnRlZ2VyUmVnZXgsIGlzVHVwbGVSZWdleDsKICB2YXIgaW5pdF9yZWdleCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9yZWdleC5qcyIoKSB7CiAgICAgIGJ5dGVzUmVnZXggPSAvXmJ5dGVzKFsxLTldfDFbMC05XXwyWzAtOV18M1swLTJdKT8kLzsKICAgICAgaW50ZWdlclJlZ2V4ID0gL151P2ludCg4fDE2fDI0fDMyfDQwfDQ4fDU2fDY0fDcyfDgwfDg4fDk2fDEwNHwxMTJ8MTIwfDEyOHwxMzZ8MTQ0fDE1MnwxNjB8MTY4fDE3NnwxODR8MTkyfDIwMHwyMDh8MjE2fDIyNHwyMzJ8MjQwfDI0OHwyNTYpPyQvOwogICAgICBpc1R1cGxlUmVnZXggPSAvXlwoLis/XCkuKj8kLzsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZm9ybWF0QWJpUGFyYW1ldGVyLmpzCiAgZnVuY3Rpb24gZm9ybWF0QWJpUGFyYW1ldGVyKGFiaVBhcmFtZXRlcikgewogICAgbGV0IHR5cGUgPSBhYmlQYXJhbWV0ZXIudHlwZTsKICAgIGlmICh0dXBsZVJlZ2V4LnRlc3QoYWJpUGFyYW1ldGVyLnR5cGUpICYmICJjb21wb25lbnRzIiBpbiBhYmlQYXJhbWV0ZXIpIHsKICAgICAgdHlwZSA9ICIoIjsKICAgICAgY29uc3QgbGVuZ3RoID0gYWJpUGFyYW1ldGVyLmNvbXBvbmVudHMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gYWJpUGFyYW1ldGVyLmNvbXBvbmVudHNbaV07CiAgICAgICAgdHlwZSArPSBmb3JtYXRBYmlQYXJhbWV0ZXIoY29tcG9uZW50KTsKICAgICAgICBpZiAoaSA8IGxlbmd0aCAtIDEpCiAgICAgICAgICB0eXBlICs9ICIsICI7CiAgICAgIH0KICAgICAgY29uc3QgcmVzdWx0ID0gZXhlY1R5cGVkKHR1cGxlUmVnZXgsIGFiaVBhcmFtZXRlci50eXBlKTsKICAgICAgdHlwZSArPSBgKSR7cmVzdWx0Py5hcnJheSA/PyAiIn1gOwogICAgICByZXR1cm4gZm9ybWF0QWJpUGFyYW1ldGVyKHsKICAgICAgICAuLi5hYmlQYXJhbWV0ZXIsCiAgICAgICAgdHlwZQogICAgICB9KTsKICAgIH0KICAgIGlmICgiaW5kZXhlZCIgaW4gYWJpUGFyYW1ldGVyICYmIGFiaVBhcmFtZXRlci5pbmRleGVkKQogICAgICB0eXBlID0gYCR7dHlwZX0gaW5kZXhlZGA7CiAgICBpZiAoYWJpUGFyYW1ldGVyLm5hbWUpCiAgICAgIHJldHVybiBgJHt0eXBlfSAke2FiaVBhcmFtZXRlci5uYW1lfWA7CiAgICByZXR1cm4gdHlwZTsKICB9CiAgdmFyIHR1cGxlUmVnZXg7CiAgdmFyIGluaXRfZm9ybWF0QWJpUGFyYW1ldGVyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Zvcm1hdEFiaVBhcmFtZXRlci5qcyIoKSB7CiAgICAgIGluaXRfcmVnZXgoKTsKICAgICAgdHVwbGVSZWdleCA9IC9edHVwbGUoPzxhcnJheT4oXFsoXGQqKVxdKSopJC87CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Zvcm1hdEFiaVBhcmFtZXRlcnMuanMKICBmdW5jdGlvbiBmb3JtYXRBYmlQYXJhbWV0ZXJzKGFiaVBhcmFtZXRlcnMpIHsKICAgIGxldCBwYXJhbXMgPSAiIjsKICAgIGNvbnN0IGxlbmd0aCA9IGFiaVBhcmFtZXRlcnMubGVuZ3RoOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhYmlQYXJhbWV0ZXIgPSBhYmlQYXJhbWV0ZXJzW2ldOwogICAgICBwYXJhbXMgKz0gZm9ybWF0QWJpUGFyYW1ldGVyKGFiaVBhcmFtZXRlcik7CiAgICAgIGlmIChpICE9PSBsZW5ndGggLSAxKQogICAgICAgIHBhcmFtcyArPSAiLCAiOwogICAgfQogICAgcmV0dXJuIHBhcmFtczsKICB9CiAgdmFyIGluaXRfZm9ybWF0QWJpUGFyYW1ldGVycyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9mb3JtYXRBYmlQYXJhbWV0ZXJzLmpzIigpIHsKICAgICAgaW5pdF9mb3JtYXRBYmlQYXJhbWV0ZXIoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZm9ybWF0QWJpSXRlbS5qcwogIGZ1bmN0aW9uIGZvcm1hdEFiaUl0ZW0oYWJpSXRlbSkgewogICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImZ1bmN0aW9uIikKICAgICAgcmV0dXJuIGBmdW5jdGlvbiAke2FiaUl0ZW0ubmFtZX0oJHtmb3JtYXRBYmlQYXJhbWV0ZXJzKGFiaUl0ZW0uaW5wdXRzKX0pJHthYmlJdGVtLnN0YXRlTXV0YWJpbGl0eSAmJiBhYmlJdGVtLnN0YXRlTXV0YWJpbGl0eSAhPT0gIm5vbnBheWFibGUiID8gYCAke2FiaUl0ZW0uc3RhdGVNdXRhYmlsaXR5fWAgOiAiIn0ke2FiaUl0ZW0ub3V0cHV0cy5sZW5ndGggPyBgIHJldHVybnMgKCR7Zm9ybWF0QWJpUGFyYW1ldGVycyhhYmlJdGVtLm91dHB1dHMpfSlgIDogIiJ9YDsKICAgIGlmIChhYmlJdGVtLnR5cGUgPT09ICJldmVudCIpCiAgICAgIHJldHVybiBgZXZlbnQgJHthYmlJdGVtLm5hbWV9KCR7Zm9ybWF0QWJpUGFyYW1ldGVycyhhYmlJdGVtLmlucHV0cyl9KWA7CiAgICBpZiAoYWJpSXRlbS50eXBlID09PSAiZXJyb3IiKQogICAgICByZXR1cm4gYGVycm9yICR7YWJpSXRlbS5uYW1lfSgke2Zvcm1hdEFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMpfSlgOwogICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImNvbnN0cnVjdG9yIikKICAgICAgcmV0dXJuIGBjb25zdHJ1Y3Rvcigke2Zvcm1hdEFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMpfSkke2FiaUl0ZW0uc3RhdGVNdXRhYmlsaXR5ID09PSAicGF5YWJsZSIgPyAiIHBheWFibGUiIDogIiJ9YDsKICAgIGlmIChhYmlJdGVtLnR5cGUgPT09ICJmYWxsYmFjayIpCiAgICAgIHJldHVybiAiZmFsbGJhY2soKSI7CiAgICByZXR1cm4gInJlY2VpdmUoKSBleHRlcm5hbCBwYXlhYmxlIjsKICB9CiAgdmFyIGluaXRfZm9ybWF0QWJpSXRlbSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9mb3JtYXRBYmlJdGVtLmpzIigpIHsKICAgICAgaW5pdF9mb3JtYXRBYmlQYXJhbWV0ZXJzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvc2lnbmF0dXJlcy5qcwogIGZ1bmN0aW9uIGlzRXJyb3JTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gZXJyb3JTaWduYXR1cmVSZWdleC50ZXN0KHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGV4ZWNFcnJvclNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBleGVjVHlwZWQoZXJyb3JTaWduYXR1cmVSZWdleCwgc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gaXNFdmVudFNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBldmVudFNpZ25hdHVyZVJlZ2V4LnRlc3Qoc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gZXhlY0V2ZW50U2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIGV4ZWNUeXBlZChldmVudFNpZ25hdHVyZVJlZ2V4LCBzaWduYXR1cmUpOwogIH0KICBmdW5jdGlvbiBpc0Z1bmN0aW9uU2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uU2lnbmF0dXJlUmVnZXgudGVzdChzaWduYXR1cmUpOwogIH0KICBmdW5jdGlvbiBleGVjRnVuY3Rpb25TaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gZXhlY1R5cGVkKGZ1bmN0aW9uU2lnbmF0dXJlUmVnZXgsIHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGlzU3RydWN0U2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIHN0cnVjdFNpZ25hdHVyZVJlZ2V4LnRlc3Qoc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gZXhlY1N0cnVjdFNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBleGVjVHlwZWQoc3RydWN0U2lnbmF0dXJlUmVnZXgsIHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGlzQ29uc3RydWN0b3JTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gY29uc3RydWN0b3JTaWduYXR1cmVSZWdleC50ZXN0KHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGV4ZWNDb25zdHJ1Y3RvclNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBleGVjVHlwZWQoY29uc3RydWN0b3JTaWduYXR1cmVSZWdleCwgc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gaXNGYWxsYmFja1NpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBmYWxsYmFja1NpZ25hdHVyZVJlZ2V4LnRlc3Qoc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gaXNSZWNlaXZlU2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIHJlY2VpdmVTaWduYXR1cmVSZWdleC50ZXN0KHNpZ25hdHVyZSk7CiAgfQogIHZhciBlcnJvclNpZ25hdHVyZVJlZ2V4LCBldmVudFNpZ25hdHVyZVJlZ2V4LCBmdW5jdGlvblNpZ25hdHVyZVJlZ2V4LCBzdHJ1Y3RTaWduYXR1cmVSZWdleCwgY29uc3RydWN0b3JTaWduYXR1cmVSZWdleCwgZmFsbGJhY2tTaWduYXR1cmVSZWdleCwgcmVjZWl2ZVNpZ25hdHVyZVJlZ2V4LCBtb2RpZmllcnMsIGV2ZW50TW9kaWZpZXJzLCBmdW5jdGlvbk1vZGlmaWVyczsKICB2YXIgaW5pdF9zaWduYXR1cmVzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvc2lnbmF0dXJlcy5qcyIoKSB7CiAgICAgIGluaXRfcmVnZXgoKTsKICAgICAgZXJyb3JTaWduYXR1cmVSZWdleCA9IC9eZXJyb3IgKD88bmFtZT5bYS16QS1aJF9dW2EtekEtWjAtOSRfXSopXCgoPzxwYXJhbWV0ZXJzPi4qPylcKSQvOwogICAgICBldmVudFNpZ25hdHVyZVJlZ2V4ID0gL15ldmVudCAoPzxuYW1lPlthLXpBLVokX11bYS16QS1aMC05JF9dKilcKCg/PHBhcmFtZXRlcnM+Lio/KVwpJC87CiAgICAgIGZ1bmN0aW9uU2lnbmF0dXJlUmVnZXggPSAvXmZ1bmN0aW9uICg/PG5hbWU+W2EtekEtWiRfXVthLXpBLVowLTkkX10qKVwoKD88cGFyYW1ldGVycz4uKj8pXCkoPzogKD88c2NvcGU+ZXh0ZXJuYWx8cHVibGljezF9KSk/KD86ICg/PHN0YXRlTXV0YWJpbGl0eT5wdXJlfHZpZXd8bm9ucGF5YWJsZXxwYXlhYmxlezF9KSk/KD86IHJldHVybnNccz9cKCg/PHJldHVybnM+Lio/KVwpKT8kLzsKICAgICAgc3RydWN0U2lnbmF0dXJlUmVnZXggPSAvXnN0cnVjdCAoPzxuYW1lPlthLXpBLVokX11bYS16QS1aMC05JF9dKikgXHsoPzxwcm9wZXJ0aWVzPi4qPylcfSQvOwogICAgICBjb25zdHJ1Y3RvclNpZ25hdHVyZVJlZ2V4ID0gL15jb25zdHJ1Y3RvclwoKD88cGFyYW1ldGVycz4uKj8pXCkoPzpccyg/PHN0YXRlTXV0YWJpbGl0eT5wYXlhYmxlezF9KSk/JC87CiAgICAgIGZhbGxiYWNrU2lnbmF0dXJlUmVnZXggPSAvXmZhbGxiYWNrXChcKSBleHRlcm5hbCg/OlxzKD88c3RhdGVNdXRhYmlsaXR5PnBheWFibGV7MX0pKT8kLzsKICAgICAgcmVjZWl2ZVNpZ25hdHVyZVJlZ2V4ID0gL15yZWNlaXZlXChcKSBleHRlcm5hbCBwYXlhYmxlJC87CiAgICAgIG1vZGlmaWVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsKICAgICAgICAibWVtb3J5IiwKICAgICAgICAiaW5kZXhlZCIsCiAgICAgICAgInN0b3JhZ2UiLAogICAgICAgICJjYWxsZGF0YSIKICAgICAgXSk7CiAgICAgIGV2ZW50TW9kaWZpZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoWyJpbmRleGVkIl0pOwogICAgICBmdW5jdGlvbk1vZGlmaWVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsKICAgICAgICAiY2FsbGRhdGEiLAogICAgICAgICJtZW1vcnkiLAogICAgICAgICJzdG9yYWdlIgogICAgICBdKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL2FiaUl0ZW0uanMKICB2YXIgSW52YWxpZEFiaUl0ZW1FcnJvciwgVW5rbm93blR5cGVFcnJvciwgVW5rbm93blNvbGlkaXR5VHlwZUVycm9yOwogIHZhciBpbml0X2FiaUl0ZW0gPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL2FiaUl0ZW0uanMiKCkgewogICAgICBpbml0X2Vycm9ycygpOwogICAgICBJbnZhbGlkQWJpSXRlbUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgc2lnbmF0dXJlIH0pIHsKICAgICAgICAgIHN1cGVyKCJGYWlsZWQgdG8gcGFyc2UgQUJJIGl0ZW0uIiwgewogICAgICAgICAgICBkZXRhaWxzOiBgcGFyc2VBYmlJdGVtKCR7SlNPTi5zdHJpbmdpZnkoc2lnbmF0dXJlLCBudWxsLCAyKX0pYCwKICAgICAgICAgICAgZG9jc1BhdGg6ICIvYXBpL2h1bWFuI3BhcnNlYWJpaXRlbS0xIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZEFiaUl0ZW1FcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgVW5rbm93blR5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHR5cGUgfSkgewogICAgICAgICAgc3VwZXIoIlVua25vd24gdHlwZS4iLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBUeXBlICIke3R5cGV9IiBpcyBub3QgYSB2YWxpZCBBQkkgdHlwZS4gUGVyaGFwcyB5b3UgZm9yZ290IHRvIGluY2x1ZGUgYSBzdHJ1Y3Qgc2lnbmF0dXJlP2AKICAgICAgICAgICAgXQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiVW5rbm93blR5cGVFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgVW5rbm93blNvbGlkaXR5VHlwZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcigiVW5rbm93biB0eXBlLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIEFCSSB0eXBlLmBdCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJVbmtub3duU29saWRpdHlUeXBlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9hYmlQYXJhbWV0ZXIuanMKICB2YXIgSW52YWxpZEFiaVBhcmFtZXRlckVycm9yLCBJbnZhbGlkQWJpUGFyYW1ldGVyc0Vycm9yLCBJbnZhbGlkUGFyYW1ldGVyRXJyb3IsIFNvbGlkaXR5UHJvdGVjdGVkS2V5d29yZEVycm9yLCBJbnZhbGlkTW9kaWZpZXJFcnJvciwgSW52YWxpZEZ1bmN0aW9uTW9kaWZpZXJFcnJvciwgSW52YWxpZEFiaVR5cGVQYXJhbWV0ZXJFcnJvcjsKICB2YXIgaW5pdF9hYmlQYXJhbWV0ZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL2FiaVBhcmFtZXRlci5qcyIoKSB7CiAgICAgIGluaXRfZXJyb3JzKCk7CiAgICAgIEludmFsaWRBYmlQYXJhbWV0ZXJFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHBhcmFtIH0pIHsKICAgICAgICAgIHN1cGVyKCJGYWlsZWQgdG8gcGFyc2UgQUJJIHBhcmFtZXRlci4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IGBwYXJzZUFiaVBhcmFtZXRlcigke0pTT04uc3RyaW5naWZ5KHBhcmFtLCBudWxsLCAyKX0pYCwKICAgICAgICAgICAgZG9jc1BhdGg6ICIvYXBpL2h1bWFuI3BhcnNlYWJpcGFyYW1ldGVyLTEiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJJbnZhbGlkQWJpUGFyYW1ldGVyRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbXMgfSkgewogICAgICAgICAgc3VwZXIoIkZhaWxlZCB0byBwYXJzZSBBQkkgcGFyYW1ldGVycy4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IGBwYXJzZUFiaVBhcmFtZXRlcnMoJHtKU09OLnN0cmluZ2lmeShwYXJhbXMsIG51bGwsIDIpfSlgLAogICAgICAgICAgICBkb2NzUGF0aDogIi9hcGkvaHVtYW4jcGFyc2VhYmlwYXJhbWV0ZXJzLTEiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJJbnZhbGlkQWJpUGFyYW1ldGVyc0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkUGFyYW1ldGVyRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSB9KSB7CiAgICAgICAgICBzdXBlcigiSW52YWxpZCBBQkkgcGFyYW1ldGVyLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogcGFyYW0KICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJuYW1lIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogIkludmFsaWRQYXJhbWV0ZXJFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU29saWRpdHlQcm90ZWN0ZWRLZXl3b3JkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSwgbmFtZSB9KSB7CiAgICAgICAgICBzdXBlcigiSW52YWxpZCBBQkkgcGFyYW1ldGVyLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogcGFyYW0sCiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGAiJHtuYW1lfSIgaXMgYSBwcm90ZWN0ZWQgU29saWRpdHkga2V5d29yZC4gTW9yZSBpbmZvOiBodHRwczovL2RvY3Muc29saWRpdHlsYW5nLm9yZy9lbi9sYXRlc3QvY2hlYXRzaGVldC5odG1sYAogICAgICAgICAgICBdCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJTb2xpZGl0eVByb3RlY3RlZEtleXdvcmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgSW52YWxpZE1vZGlmaWVyRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSwgdHlwZSwgbW9kaWZpZXIgfSkgewogICAgICAgICAgc3VwZXIoIkludmFsaWQgQUJJIHBhcmFtZXRlci4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IHBhcmFtLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgTW9kaWZpZXIgIiR7bW9kaWZpZXJ9IiBub3QgYWxsb3dlZCR7dHlwZSA/IGAgaW4gIiR7dHlwZX0iIHR5cGVgIDogIiJ9LmAKICAgICAgICAgICAgXQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZE1vZGlmaWVyRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSwgdHlwZSwgbW9kaWZpZXIgfSkgewogICAgICAgICAgc3VwZXIoIkludmFsaWQgQUJJIHBhcmFtZXRlci4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IHBhcmFtLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgTW9kaWZpZXIgIiR7bW9kaWZpZXJ9IiBub3QgYWxsb3dlZCR7dHlwZSA/IGAgaW4gIiR7dHlwZX0iIHR5cGVgIDogIiJ9LmAsCiAgICAgICAgICAgICAgYERhdGEgbG9jYXRpb24gY2FuIG9ubHkgYmUgc3BlY2lmaWVkIGZvciBhcnJheSwgc3RydWN0LCBvciBtYXBwaW5nIHR5cGVzLCBidXQgIiR7bW9kaWZpZXJ9IiB3YXMgZ2l2ZW4uYAogICAgICAgICAgICBdCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJJbnZhbGlkRnVuY3Rpb25Nb2RpZmllckVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQWJpVHlwZVBhcmFtZXRlckVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYWJpUGFyYW1ldGVyIH0pIHsKICAgICAgICAgIHN1cGVyKCJJbnZhbGlkIEFCSSBwYXJhbWV0ZXIuIiwgewogICAgICAgICAgICBkZXRhaWxzOiBKU09OLnN0cmluZ2lmeShhYmlQYXJhbWV0ZXIsIG51bGwsIDIpLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsiQUJJIHBhcmFtZXRlciB0eXBlIGlzIGludmFsaWQuIl0KICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJuYW1lIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogIkludmFsaWRBYmlUeXBlUGFyYW1ldGVyRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zaWduYXR1cmUuanMKICB2YXIgSW52YWxpZFNpZ25hdHVyZUVycm9yLCBVbmtub3duU2lnbmF0dXJlRXJyb3IsIEludmFsaWRTdHJ1Y3RTaWduYXR1cmVFcnJvcjsKICB2YXIgaW5pdF9zaWduYXR1cmUgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL3NpZ25hdHVyZS5qcyIoKSB7CiAgICAgIGluaXRfZXJyb3JzKCk7CiAgICAgIEludmFsaWRTaWduYXR1cmVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHNpZ25hdHVyZSwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihgSW52YWxpZCAke3R5cGV9IHNpZ25hdHVyZS5gLCB7CiAgICAgICAgICAgIGRldGFpbHM6IHNpZ25hdHVyZQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZFNpZ25hdHVyZUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBVbmtub3duU2lnbmF0dXJlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBzaWduYXR1cmUgfSkgewogICAgICAgICAgc3VwZXIoIlVua25vd24gc2lnbmF0dXJlLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogc2lnbmF0dXJlCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJVbmtub3duU2lnbmF0dXJlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRTdHJ1Y3RTaWduYXR1cmVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHNpZ25hdHVyZSB9KSB7CiAgICAgICAgICBzdXBlcigiSW52YWxpZCBzdHJ1Y3Qgc2lnbmF0dXJlLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogc2lnbmF0dXJlLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsiTm8gcHJvcGVydGllcyBleGlzdC4iXQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZFN0cnVjdFNpZ25hdHVyZUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9lcnJvcnMvc3RydWN0LmpzCiAgdmFyIENpcmN1bGFyUmVmZXJlbmNlRXJyb3I7CiAgdmFyIGluaXRfc3RydWN0ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zdHJ1Y3QuanMiKCkgewogICAgICBpbml0X2Vycm9ycygpOwogICAgICBDaXJjdWxhclJlZmVyZW5jZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYFN0cnVjdCAiJHt0eXBlfSIgaXMgYSBjaXJjdWxhciByZWZlcmVuY2UuYF0KICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJuYW1lIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogIkNpcmN1bGFyUmVmZXJlbmNlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zcGxpdFBhcmFtZXRlcnMuanMKICB2YXIgSW52YWxpZFBhcmVudGhlc2lzRXJyb3I7CiAgdmFyIGluaXRfc3BsaXRQYXJhbWV0ZXJzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zcGxpdFBhcmFtZXRlcnMuanMiKCkgewogICAgICBpbml0X2Vycm9ycygpOwogICAgICBJbnZhbGlkUGFyZW50aGVzaXNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGN1cnJlbnQsIGRlcHRoIH0pIHsKICAgICAgICAgIHN1cGVyKCJVbmJhbGFuY2VkIHBhcmVudGhlc2VzLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgYCIke2N1cnJlbnQudHJpbSgpfSIgaGFzIHRvbyBtYW55ICR7ZGVwdGggPiAwID8gIm9wZW5pbmciIDogImNsb3NpbmcifSBwYXJlbnRoZXNlcy5gCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIGRldGFpbHM6IGBEZXB0aCAiJHtkZXB0aH0iYAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZFBhcmVudGhlc2lzRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvY2FjaGUuanMKICBmdW5jdGlvbiBnZXRQYXJhbWV0ZXJDYWNoZUtleShwYXJhbSwgdHlwZSkgewogICAgaWYgKHR5cGUpCiAgICAgIHJldHVybiBgJHt0eXBlfToke3BhcmFtfWA7CiAgICByZXR1cm4gcGFyYW07CiAgfQogIHZhciBwYXJhbWV0ZXJDYWNoZTsKICB2YXIgaW5pdF9jYWNoZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL2NhY2hlLmpzIigpIHsKICAgICAgcGFyYW1ldGVyQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbCiAgICAgICAgLy8gVW5uYW1lZAogICAgICAgIFsiYWRkcmVzcyIsIHsgdHlwZTogImFkZHJlc3MiIH1dLAogICAgICAgIFsiYm9vbCIsIHsgdHlwZTogImJvb2wiIH1dLAogICAgICAgIFsiYnl0ZXMiLCB7IHR5cGU6ICJieXRlcyIgfV0sCiAgICAgICAgWyJieXRlczMyIiwgeyB0eXBlOiAiYnl0ZXMzMiIgfV0sCiAgICAgICAgWyJpbnQiLCB7IHR5cGU6ICJpbnQyNTYiIH1dLAogICAgICAgIFsiaW50MjU2IiwgeyB0eXBlOiAiaW50MjU2IiB9XSwKICAgICAgICBbInN0cmluZyIsIHsgdHlwZTogInN0cmluZyIgfV0sCiAgICAgICAgWyJ1aW50IiwgeyB0eXBlOiAidWludDI1NiIgfV0sCiAgICAgICAgWyJ1aW50OCIsIHsgdHlwZTogInVpbnQ4IiB9XSwKICAgICAgICBbInVpbnQxNiIsIHsgdHlwZTogInVpbnQxNiIgfV0sCiAgICAgICAgWyJ1aW50MjQiLCB7IHR5cGU6ICJ1aW50MjQiIH1dLAogICAgICAgIFsidWludDMyIiwgeyB0eXBlOiAidWludDMyIiB9XSwKICAgICAgICBbInVpbnQ2NCIsIHsgdHlwZTogInVpbnQ2NCIgfV0sCiAgICAgICAgWyJ1aW50OTYiLCB7IHR5cGU6ICJ1aW50OTYiIH1dLAogICAgICAgIFsidWludDExMiIsIHsgdHlwZTogInVpbnQxMTIiIH1dLAogICAgICAgIFsidWludDE2MCIsIHsgdHlwZTogInVpbnQxNjAiIH1dLAogICAgICAgIFsidWludDE5MiIsIHsgdHlwZTogInVpbnQxOTIiIH1dLAogICAgICAgIFsidWludDI1NiIsIHsgdHlwZTogInVpbnQyNTYiIH1dLAogICAgICAgIC8vIE5hbWVkCiAgICAgICAgWyJhZGRyZXNzIG93bmVyIiwgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJvd25lciIgfV0sCiAgICAgICAgWyJhZGRyZXNzIHRvIiwgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJ0byIgfV0sCiAgICAgICAgWyJib29sIGFwcHJvdmVkIiwgeyB0eXBlOiAiYm9vbCIsIG5hbWU6ICJhcHByb3ZlZCIgfV0sCiAgICAgICAgWyJieXRlcyBfZGF0YSIsIHsgdHlwZTogImJ5dGVzIiwgbmFtZTogIl9kYXRhIiB9XSwKICAgICAgICBbImJ5dGVzIGRhdGEiLCB7IHR5cGU6ICJieXRlcyIsIG5hbWU6ICJkYXRhIiB9XSwKICAgICAgICBbImJ5dGVzIHNpZ25hdHVyZSIsIHsgdHlwZTogImJ5dGVzIiwgbmFtZTogInNpZ25hdHVyZSIgfV0sCiAgICAgICAgWyJieXRlczMyIGhhc2giLCB7IHR5cGU6ICJieXRlczMyIiwgbmFtZTogImhhc2giIH1dLAogICAgICAgIFsiYnl0ZXMzMiByIiwgeyB0eXBlOiAiYnl0ZXMzMiIsIG5hbWU6ICJyIiB9XSwKICAgICAgICBbImJ5dGVzMzIgcm9vdCIsIHsgdHlwZTogImJ5dGVzMzIiLCBuYW1lOiAicm9vdCIgfV0sCiAgICAgICAgWyJieXRlczMyIHMiLCB7IHR5cGU6ICJieXRlczMyIiwgbmFtZTogInMiIH1dLAogICAgICAgIFsic3RyaW5nIG5hbWUiLCB7IHR5cGU6ICJzdHJpbmciLCBuYW1lOiAibmFtZSIgfV0sCiAgICAgICAgWyJzdHJpbmcgc3ltYm9sIiwgeyB0eXBlOiAic3RyaW5nIiwgbmFtZTogInN5bWJvbCIgfV0sCiAgICAgICAgWyJzdHJpbmcgdG9rZW5VUkkiLCB7IHR5cGU6ICJzdHJpbmciLCBuYW1lOiAidG9rZW5VUkkiIH1dLAogICAgICAgIFsidWludCB0b2tlbklkIiwgeyB0eXBlOiAidWludDI1NiIsIG5hbWU6ICJ0b2tlbklkIiB9XSwKICAgICAgICBbInVpbnQ4IHYiLCB7IHR5cGU6ICJ1aW50OCIsIG5hbWU6ICJ2IiB9XSwKICAgICAgICBbInVpbnQyNTYgYmFsYW5jZSIsIHsgdHlwZTogInVpbnQyNTYiLCBuYW1lOiAiYmFsYW5jZSIgfV0sCiAgICAgICAgWyJ1aW50MjU2IHRva2VuSWQiLCB7IHR5cGU6ICJ1aW50MjU2IiwgbmFtZTogInRva2VuSWQiIH1dLAogICAgICAgIFsidWludDI1NiB2YWx1ZSIsIHsgdHlwZTogInVpbnQyNTYiLCBuYW1lOiAidmFsdWUiIH1dLAogICAgICAgIC8vIEluZGV4ZWQKICAgICAgICBbCiAgICAgICAgICAiZXZlbnQ6YWRkcmVzcyBpbmRleGVkIGZyb20iLAogICAgICAgICAgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJmcm9tIiwgaW5kZXhlZDogdHJ1ZSB9CiAgICAgICAgXSwKICAgICAgICBbImV2ZW50OmFkZHJlc3MgaW5kZXhlZCB0byIsIHsgdHlwZTogImFkZHJlc3MiLCBuYW1lOiAidG8iLCBpbmRleGVkOiB0cnVlIH1dLAogICAgICAgIFsKICAgICAgICAgICJldmVudDp1aW50IGluZGV4ZWQgdG9rZW5JZCIsCiAgICAgICAgICB7IHR5cGU6ICJ1aW50MjU2IiwgbmFtZTogInRva2VuSWQiLCBpbmRleGVkOiB0cnVlIH0KICAgICAgICBdLAogICAgICAgIFsKICAgICAgICAgICJldmVudDp1aW50MjU2IGluZGV4ZWQgdG9rZW5JZCIsCiAgICAgICAgICB7IHR5cGU6ICJ1aW50MjU2IiwgbmFtZTogInRva2VuSWQiLCBpbmRleGVkOiB0cnVlIH0KICAgICAgICBdCiAgICAgIF0pOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL3V0aWxzLmpzCiAgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmUoc2lnbmF0dXJlLCBzdHJ1Y3RzID0ge30pIHsKICAgIGlmIChpc0Z1bmN0aW9uU2lnbmF0dXJlKHNpZ25hdHVyZSkpIHsKICAgICAgY29uc3QgbWF0Y2ggPSBleGVjRnVuY3Rpb25TaWduYXR1cmUoc2lnbmF0dXJlKTsKICAgICAgaWYgKCFtYXRjaCkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFNpZ25hdHVyZUVycm9yKHsgc2lnbmF0dXJlLCB0eXBlOiAiZnVuY3Rpb24iIH0pOwogICAgICBjb25zdCBpbnB1dFBhcmFtcyA9IHNwbGl0UGFyYW1ldGVycyhtYXRjaC5wYXJhbWV0ZXJzKTsKICAgICAgY29uc3QgaW5wdXRzID0gW107CiAgICAgIGNvbnN0IGlucHV0TGVuZ3RoID0gaW5wdXRQYXJhbXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHsKICAgICAgICBpbnB1dHMucHVzaChwYXJzZUFiaVBhcmFtZXRlcihpbnB1dFBhcmFtc1tpXSwgewogICAgICAgICAgbW9kaWZpZXJzOiBmdW5jdGlvbk1vZGlmaWVycywKICAgICAgICAgIHN0cnVjdHMsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSkpOwogICAgICB9CiAgICAgIGNvbnN0IG91dHB1dHMgPSBbXTsKICAgICAgaWYgKG1hdGNoLnJldHVybnMpIHsKICAgICAgICBjb25zdCBvdXRwdXRQYXJhbXMgPSBzcGxpdFBhcmFtZXRlcnMobWF0Y2gucmV0dXJucyk7CiAgICAgICAgY29uc3Qgb3V0cHV0TGVuZ3RoID0gb3V0cHV0UGFyYW1zLmxlbmd0aDsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dExlbmd0aDsgaSsrKSB7CiAgICAgICAgICBvdXRwdXRzLnB1c2gocGFyc2VBYmlQYXJhbWV0ZXIob3V0cHV0UGFyYW1zW2ldLCB7CiAgICAgICAgICAgIG1vZGlmaWVyczogZnVuY3Rpb25Nb2RpZmllcnMsCiAgICAgICAgICAgIHN0cnVjdHMsCiAgICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsKICAgICAgICBuYW1lOiBtYXRjaC5uYW1lLAogICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiBtYXRjaC5zdGF0ZU11dGFiaWxpdHkgPz8gIm5vbnBheWFibGUiLAogICAgICAgIGlucHV0cywKICAgICAgICBvdXRwdXRzCiAgICAgIH07CiAgICB9CiAgICBpZiAoaXNFdmVudFNpZ25hdHVyZShzaWduYXR1cmUpKSB7CiAgICAgIGNvbnN0IG1hdGNoID0gZXhlY0V2ZW50U2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICAgIGlmICghbWF0Y2gpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSwgdHlwZTogImV2ZW50IiB9KTsKICAgICAgY29uc3QgcGFyYW1zID0gc3BsaXRQYXJhbWV0ZXJzKG1hdGNoLnBhcmFtZXRlcnMpOwogICAgICBjb25zdCBhYmlQYXJhbWV0ZXJzID0gW107CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBhYmlQYXJhbWV0ZXJzLnB1c2gocGFyc2VBYmlQYXJhbWV0ZXIocGFyYW1zW2ldLCB7CiAgICAgICAgICBtb2RpZmllcnM6IGV2ZW50TW9kaWZpZXJzLAogICAgICAgICAgc3RydWN0cywKICAgICAgICAgIHR5cGU6ICJldmVudCIKICAgICAgICB9KSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgbmFtZTogbWF0Y2gubmFtZSwgdHlwZTogImV2ZW50IiwgaW5wdXRzOiBhYmlQYXJhbWV0ZXJzIH07CiAgICB9CiAgICBpZiAoaXNFcnJvclNpZ25hdHVyZShzaWduYXR1cmUpKSB7CiAgICAgIGNvbnN0IG1hdGNoID0gZXhlY0Vycm9yU2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICAgIGlmICghbWF0Y2gpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSwgdHlwZTogImVycm9yIiB9KTsKICAgICAgY29uc3QgcGFyYW1zID0gc3BsaXRQYXJhbWV0ZXJzKG1hdGNoLnBhcmFtZXRlcnMpOwogICAgICBjb25zdCBhYmlQYXJhbWV0ZXJzID0gW107CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBhYmlQYXJhbWV0ZXJzLnB1c2gocGFyc2VBYmlQYXJhbWV0ZXIocGFyYW1zW2ldLCB7IHN0cnVjdHMsIHR5cGU6ICJlcnJvciIgfSkpOwogICAgICB9CiAgICAgIHJldHVybiB7IG5hbWU6IG1hdGNoLm5hbWUsIHR5cGU6ICJlcnJvciIsIGlucHV0czogYWJpUGFyYW1ldGVycyB9OwogICAgfQogICAgaWYgKGlzQ29uc3RydWN0b3JTaWduYXR1cmUoc2lnbmF0dXJlKSkgewogICAgICBjb25zdCBtYXRjaCA9IGV4ZWNDb25zdHJ1Y3RvclNpZ25hdHVyZShzaWduYXR1cmUpOwogICAgICBpZiAoIW1hdGNoKQogICAgICAgIHRocm93IG5ldyBJbnZhbGlkU2lnbmF0dXJlRXJyb3IoeyBzaWduYXR1cmUsIHR5cGU6ICJjb25zdHJ1Y3RvciIgfSk7CiAgICAgIGNvbnN0IHBhcmFtcyA9IHNwbGl0UGFyYW1ldGVycyhtYXRjaC5wYXJhbWV0ZXJzKTsKICAgICAgY29uc3QgYWJpUGFyYW1ldGVycyA9IFtdOwogICAgICBjb25zdCBsZW5ndGggPSBwYXJhbXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgYWJpUGFyYW1ldGVycy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtc1tpXSwgeyBzdHJ1Y3RzLCB0eXBlOiAiY29uc3RydWN0b3IiIH0pKTsKICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6ICJjb25zdHJ1Y3RvciIsCiAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiBtYXRjaC5zdGF0ZU11dGFiaWxpdHkgPz8gIm5vbnBheWFibGUiLAogICAgICAgIGlucHV0czogYWJpUGFyYW1ldGVycwogICAgICB9OwogICAgfQogICAgaWYgKGlzRmFsbGJhY2tTaWduYXR1cmUoc2lnbmF0dXJlKSkKICAgICAgcmV0dXJuIHsgdHlwZTogImZhbGxiYWNrIiB9OwogICAgaWYgKGlzUmVjZWl2ZVNpZ25hdHVyZShzaWduYXR1cmUpKQogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6ICJyZWNlaXZlIiwKICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJwYXlhYmxlIgogICAgICB9OwogICAgdGhyb3cgbmV3IFVua25vd25TaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSB9KTsKICB9CiAgZnVuY3Rpb24gcGFyc2VBYmlQYXJhbWV0ZXIocGFyYW0sIG9wdGlvbnMpIHsKICAgIGNvbnN0IHBhcmFtZXRlckNhY2hlS2V5ID0gZ2V0UGFyYW1ldGVyQ2FjaGVLZXkocGFyYW0sIG9wdGlvbnM/LnR5cGUpOwogICAgaWYgKHBhcmFtZXRlckNhY2hlLmhhcyhwYXJhbWV0ZXJDYWNoZUtleSkpCiAgICAgIHJldHVybiBwYXJhbWV0ZXJDYWNoZS5nZXQocGFyYW1ldGVyQ2FjaGVLZXkpOwogICAgY29uc3QgaXNUdXBsZSA9IGlzVHVwbGVSZWdleC50ZXN0KHBhcmFtKTsKICAgIGNvbnN0IG1hdGNoID0gZXhlY1R5cGVkKGlzVHVwbGUgPyBhYmlQYXJhbWV0ZXJXaXRoVHVwbGVSZWdleCA6IGFiaVBhcmFtZXRlcldpdGhvdXRUdXBsZVJlZ2V4LCBwYXJhbSk7CiAgICBpZiAoIW1hdGNoKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlckVycm9yKHsgcGFyYW0gfSk7CiAgICBpZiAobWF0Y2gubmFtZSAmJiBpc1NvbGlkaXR5S2V5d29yZChtYXRjaC5uYW1lKSkKICAgICAgdGhyb3cgbmV3IFNvbGlkaXR5UHJvdGVjdGVkS2V5d29yZEVycm9yKHsgcGFyYW0sIG5hbWU6IG1hdGNoLm5hbWUgfSk7CiAgICBjb25zdCBuYW1lID0gbWF0Y2gubmFtZSA/IHsgbmFtZTogbWF0Y2gubmFtZSB9IDoge307CiAgICBjb25zdCBpbmRleGVkID0gbWF0Y2gubW9kaWZpZXIgPT09ICJpbmRleGVkIiA/IHsgaW5kZXhlZDogdHJ1ZSB9IDoge307CiAgICBjb25zdCBzdHJ1Y3RzID0gb3B0aW9ucz8uc3RydWN0cyA/PyB7fTsKICAgIGxldCB0eXBlOwogICAgbGV0IGNvbXBvbmVudHMgPSB7fTsKICAgIGlmIChpc1R1cGxlKSB7CiAgICAgIHR5cGUgPSAidHVwbGUiOwogICAgICBjb25zdCBwYXJhbXMgPSBzcGxpdFBhcmFtZXRlcnMobWF0Y2gudHlwZSk7CiAgICAgIGNvbnN0IGNvbXBvbmVudHNfID0gW107CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBjb21wb25lbnRzXy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtc1tpXSwgeyBzdHJ1Y3RzIH0pKTsKICAgICAgfQogICAgICBjb21wb25lbnRzID0geyBjb21wb25lbnRzOiBjb21wb25lbnRzXyB9OwogICAgfSBlbHNlIGlmIChtYXRjaC50eXBlIGluIHN0cnVjdHMpIHsKICAgICAgdHlwZSA9ICJ0dXBsZSI7CiAgICAgIGNvbXBvbmVudHMgPSB7IGNvbXBvbmVudHM6IHN0cnVjdHNbbWF0Y2gudHlwZV0gfTsKICAgIH0gZWxzZSBpZiAoZHluYW1pY0ludGVnZXJSZWdleC50ZXN0KG1hdGNoLnR5cGUpKSB7CiAgICAgIHR5cGUgPSBgJHttYXRjaC50eXBlfTI1NmA7CiAgICB9IGVsc2UgewogICAgICB0eXBlID0gbWF0Y2gudHlwZTsKICAgICAgaWYgKCEob3B0aW9ucz8udHlwZSA9PT0gInN0cnVjdCIpICYmICFpc1NvbGlkaXR5VHlwZSh0eXBlKSkKICAgICAgICB0aHJvdyBuZXcgVW5rbm93blNvbGlkaXR5VHlwZUVycm9yKHsgdHlwZSB9KTsKICAgIH0KICAgIGlmIChtYXRjaC5tb2RpZmllcikgewogICAgICBpZiAoIW9wdGlvbnM/Lm1vZGlmaWVycz8uaGFzPy4obWF0Y2gubW9kaWZpZXIpKQogICAgICAgIHRocm93IG5ldyBJbnZhbGlkTW9kaWZpZXJFcnJvcih7CiAgICAgICAgICBwYXJhbSwKICAgICAgICAgIHR5cGU6IG9wdGlvbnM/LnR5cGUsCiAgICAgICAgICBtb2RpZmllcjogbWF0Y2gubW9kaWZpZXIKICAgICAgICB9KTsKICAgICAgaWYgKGZ1bmN0aW9uTW9kaWZpZXJzLmhhcyhtYXRjaC5tb2RpZmllcikgJiYgIWlzVmFsaWREYXRhTG9jYXRpb24odHlwZSwgISFtYXRjaC5hcnJheSkpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3IoewogICAgICAgICAgcGFyYW0sCiAgICAgICAgICB0eXBlOiBvcHRpb25zPy50eXBlLAogICAgICAgICAgbW9kaWZpZXI6IG1hdGNoLm1vZGlmaWVyCiAgICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBhYmlQYXJhbWV0ZXIgPSB7CiAgICAgIHR5cGU6IGAke3R5cGV9JHttYXRjaC5hcnJheSA/PyAiIn1gLAogICAgICAuLi5uYW1lLAogICAgICAuLi5pbmRleGVkLAogICAgICAuLi5jb21wb25lbnRzCiAgICB9OwogICAgcGFyYW1ldGVyQ2FjaGUuc2V0KHBhcmFtZXRlckNhY2hlS2V5LCBhYmlQYXJhbWV0ZXIpOwogICAgcmV0dXJuIGFiaVBhcmFtZXRlcjsKICB9CiAgZnVuY3Rpb24gc3BsaXRQYXJhbWV0ZXJzKHBhcmFtcywgcmVzdWx0ID0gW10sIGN1cnJlbnQgPSAiIiwgZGVwdGggPSAwKSB7CiAgICBjb25zdCBsZW5ndGggPSBwYXJhbXMudHJpbSgpLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgY2hhciA9IHBhcmFtc1tpXTsKICAgICAgY29uc3QgdGFpbCA9IHBhcmFtcy5zbGljZShpICsgMSk7CiAgICAgIHN3aXRjaCAoY2hhcikgewogICAgICAgIGNhc2UgIiwiOgogICAgICAgICAgcmV0dXJuIGRlcHRoID09PSAwID8gc3BsaXRQYXJhbWV0ZXJzKHRhaWwsIFsuLi5yZXN1bHQsIGN1cnJlbnQudHJpbSgpXSkgOiBzcGxpdFBhcmFtZXRlcnModGFpbCwgcmVzdWx0LCBgJHtjdXJyZW50fSR7Y2hhcn1gLCBkZXB0aCk7CiAgICAgICAgY2FzZSAiKCI6CiAgICAgICAgICByZXR1cm4gc3BsaXRQYXJhbWV0ZXJzKHRhaWwsIHJlc3VsdCwgYCR7Y3VycmVudH0ke2NoYXJ9YCwgZGVwdGggKyAxKTsKICAgICAgICBjYXNlICIpIjoKICAgICAgICAgIHJldHVybiBzcGxpdFBhcmFtZXRlcnModGFpbCwgcmVzdWx0LCBgJHtjdXJyZW50fSR7Y2hhcn1gLCBkZXB0aCAtIDEpOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gc3BsaXRQYXJhbWV0ZXJzKHRhaWwsIHJlc3VsdCwgYCR7Y3VycmVudH0ke2NoYXJ9YCwgZGVwdGgpOwogICAgICB9CiAgICB9CiAgICBpZiAoY3VycmVudCA9PT0gIiIpCiAgICAgIHJldHVybiByZXN1bHQ7CiAgICBpZiAoZGVwdGggIT09IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyZW50aGVzaXNFcnJvcih7IGN1cnJlbnQsIGRlcHRoIH0pOwogICAgcmVzdWx0LnB1c2goY3VycmVudC50cmltKCkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gaXNTb2xpZGl0eVR5cGUodHlwZSkgewogICAgcmV0dXJuIHR5cGUgPT09ICJhZGRyZXNzIiB8fCB0eXBlID09PSAiYm9vbCIgfHwgdHlwZSA9PT0gImZ1bmN0aW9uIiB8fCB0eXBlID09PSAic3RyaW5nIiB8fCBieXRlc1JlZ2V4LnRlc3QodHlwZSkgfHwgaW50ZWdlclJlZ2V4LnRlc3QodHlwZSk7CiAgfQogIGZ1bmN0aW9uIGlzU29saWRpdHlLZXl3b3JkKG5hbWUpIHsKICAgIHJldHVybiBuYW1lID09PSAiYWRkcmVzcyIgfHwgbmFtZSA9PT0gImJvb2wiIHx8IG5hbWUgPT09ICJmdW5jdGlvbiIgfHwgbmFtZSA9PT0gInN0cmluZyIgfHwgbmFtZSA9PT0gInR1cGxlIiB8fCBieXRlc1JlZ2V4LnRlc3QobmFtZSkgfHwgaW50ZWdlclJlZ2V4LnRlc3QobmFtZSkgfHwgcHJvdGVjdGVkS2V5d29yZHNSZWdleC50ZXN0KG5hbWUpOwogIH0KICBmdW5jdGlvbiBpc1ZhbGlkRGF0YUxvY2F0aW9uKHR5cGUsIGlzQXJyYXkpIHsKICAgIHJldHVybiBpc0FycmF5IHx8IHR5cGUgPT09ICJieXRlcyIgfHwgdHlwZSA9PT0gInN0cmluZyIgfHwgdHlwZSA9PT0gInR1cGxlIjsKICB9CiAgdmFyIGFiaVBhcmFtZXRlcldpdGhvdXRUdXBsZVJlZ2V4LCBhYmlQYXJhbWV0ZXJXaXRoVHVwbGVSZWdleCwgZHluYW1pY0ludGVnZXJSZWdleCwgcHJvdGVjdGVkS2V5d29yZHNSZWdleDsKICB2YXIgaW5pdF91dGlscyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL3V0aWxzLmpzIigpIHsKICAgICAgaW5pdF9yZWdleCgpOwogICAgICBpbml0X2FiaUl0ZW0oKTsKICAgICAgaW5pdF9hYmlQYXJhbWV0ZXIoKTsKICAgICAgaW5pdF9zaWduYXR1cmUoKTsKICAgICAgaW5pdF9zcGxpdFBhcmFtZXRlcnMoKTsKICAgICAgaW5pdF9jYWNoZSgpOwogICAgICBpbml0X3NpZ25hdHVyZXMoKTsKICAgICAgYWJpUGFyYW1ldGVyV2l0aG91dFR1cGxlUmVnZXggPSAvXig/PHR5cGU+W2EtekEtWiRfXVthLXpBLVowLTkkX10qKSg/PGFycmF5Pig/OlxbXGQqP1xdKSs/KT8oPzpccyg/PG1vZGlmaWVyPmNhbGxkYXRhfGluZGV4ZWR8bWVtb3J5fHN0b3JhZ2V7MX0pKT8oPzpccyg/PG5hbWU+W2EtekEtWiRfXVthLXpBLVowLTkkX10qKSk/JC87CiAgICAgIGFiaVBhcmFtZXRlcldpdGhUdXBsZVJlZ2V4ID0gL15cKCg/PHR5cGU+Lis/KVwpKD88YXJyYXk+KD86XFtcZCo/XF0pKz8pPyg/OlxzKD88bW9kaWZpZXI+Y2FsbGRhdGF8aW5kZXhlZHxtZW1vcnl8c3RvcmFnZXsxfSkpPyg/OlxzKD88bmFtZT5bYS16QS1aJF9dW2EtekEtWjAtOSRfXSopKT8kLzsKICAgICAgZHluYW1pY0ludGVnZXJSZWdleCA9IC9edT9pbnQkLzsKICAgICAgcHJvdGVjdGVkS2V5d29yZHNSZWdleCA9IC9eKD86YWZ0ZXJ8YWxpYXN8YW5vbnltb3VzfGFwcGx5fGF1dG98Ynl0ZXxjYWxsZGF0YXxjYXNlfGNhdGNofGNvbnN0YW50fGNvcHlvZnxkZWZhdWx0fGRlZmluZWR8ZXJyb3J8ZXZlbnR8ZXh0ZXJuYWx8ZmFsc2V8ZmluYWx8ZnVuY3Rpb258aW1tdXRhYmxlfGltcGxlbWVudHN8aW58aW5kZXhlZHxpbmxpbmV8aW50ZXJuYWx8bGV0fG1hcHBpbmd8bWF0Y2h8bWVtb3J5fG11dGFibGV8bnVsbHxvZnxvdmVycmlkZXxwYXJ0aWFsfHByaXZhdGV8cHJvbWlzZXxwdWJsaWN8cHVyZXxyZWZlcmVuY2V8cmVsb2NhdGFibGV8cmV0dXJufHJldHVybnN8c2l6ZW9mfHN0YXRpY3xzdG9yYWdlfHN0cnVjdHxzdXBlcnxzdXBwb3J0c3xzd2l0Y2h8dGhpc3x0cnVlfHRyeXx0eXBlZGVmfHR5cGVvZnx2YXJ8dmlld3x2aXJ0dWFsKSQvOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL3N0cnVjdHMuanMKICBmdW5jdGlvbiBwYXJzZVN0cnVjdHMoc2lnbmF0dXJlcykgewogICAgY29uc3Qgc2hhbGxvd1N0cnVjdHMgPSB7fTsKICAgIGNvbnN0IHNpZ25hdHVyZXNMZW5ndGggPSBzaWduYXR1cmVzLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2lnbmF0dXJlc0xlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25hdHVyZXNbaV07CiAgICAgIGlmICghaXNTdHJ1Y3RTaWduYXR1cmUoc2lnbmF0dXJlKSkKICAgICAgICBjb250aW51ZTsKICAgICAgY29uc3QgbWF0Y2ggPSBleGVjU3RydWN0U2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICAgIGlmICghbWF0Y2gpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSwgdHlwZTogInN0cnVjdCIgfSk7CiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBtYXRjaC5wcm9wZXJ0aWVzLnNwbGl0KCI7Iik7CiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBbXTsKICAgICAgY29uc3QgcHJvcGVydGllc0xlbmd0aCA9IHByb3BlcnRpZXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBrID0gMDsgayA8IHByb3BlcnRpZXNMZW5ndGg7IGsrKykgewogICAgICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1trXTsKICAgICAgICBjb25zdCB0cmltbWVkID0gcHJvcGVydHkudHJpbSgpOwogICAgICAgIGlmICghdHJpbW1lZCkKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGNvbnN0IGFiaVBhcmFtZXRlciA9IHBhcnNlQWJpUGFyYW1ldGVyKHRyaW1tZWQsIHsKICAgICAgICAgIHR5cGU6ICJzdHJ1Y3QiCiAgICAgICAgfSk7CiAgICAgICAgY29tcG9uZW50cy5wdXNoKGFiaVBhcmFtZXRlcik7CiAgICAgIH0KICAgICAgaWYgKCFjb21wb25lbnRzLmxlbmd0aCkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFN0cnVjdFNpZ25hdHVyZUVycm9yKHsgc2lnbmF0dXJlIH0pOwogICAgICBzaGFsbG93U3RydWN0c1ttYXRjaC5uYW1lXSA9IGNvbXBvbmVudHM7CiAgICB9CiAgICBjb25zdCByZXNvbHZlZFN0cnVjdHMgPSB7fTsKICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhzaGFsbG93U3RydWN0cyk7CiAgICBjb25zdCBlbnRyaWVzTGVuZ3RoID0gZW50cmllcy5sZW5ndGg7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXNMZW5ndGg7IGkrKykgewogICAgICBjb25zdCBbbmFtZSwgcGFyYW1ldGVyc10gPSBlbnRyaWVzW2ldOwogICAgICByZXNvbHZlZFN0cnVjdHNbbmFtZV0gPSByZXNvbHZlU3RydWN0cyhwYXJhbWV0ZXJzLCBzaGFsbG93U3RydWN0cyk7CiAgICB9CiAgICByZXR1cm4gcmVzb2x2ZWRTdHJ1Y3RzOwogIH0KICBmdW5jdGlvbiByZXNvbHZlU3RydWN0cyhhYmlQYXJhbWV0ZXJzLCBzdHJ1Y3RzLCBhbmNlc3RvcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSB7CiAgICBjb25zdCBjb21wb25lbnRzID0gW107CiAgICBjb25zdCBsZW5ndGggPSBhYmlQYXJhbWV0ZXJzLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgYWJpUGFyYW1ldGVyID0gYWJpUGFyYW1ldGVyc1tpXTsKICAgICAgY29uc3QgaXNUdXBsZSA9IGlzVHVwbGVSZWdleC50ZXN0KGFiaVBhcmFtZXRlci50eXBlKTsKICAgICAgaWYgKGlzVHVwbGUpCiAgICAgICAgY29tcG9uZW50cy5wdXNoKGFiaVBhcmFtZXRlcik7CiAgICAgIGVsc2UgewogICAgICAgIGNvbnN0IG1hdGNoID0gZXhlY1R5cGVkKHR5cGVXaXRob3V0VHVwbGVSZWdleCwgYWJpUGFyYW1ldGVyLnR5cGUpOwogICAgICAgIGlmICghbWF0Y2g/LnR5cGUpCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFiaVR5cGVQYXJhbWV0ZXJFcnJvcih7IGFiaVBhcmFtZXRlciB9KTsKICAgICAgICBjb25zdCB7IGFycmF5LCB0eXBlIH0gPSBtYXRjaDsKICAgICAgICBpZiAodHlwZSBpbiBzdHJ1Y3RzKSB7CiAgICAgICAgICBpZiAoYW5jZXN0b3JzLmhhcyh0eXBlKSkKICAgICAgICAgICAgdGhyb3cgbmV3IENpcmN1bGFyUmVmZXJlbmNlRXJyb3IoeyB0eXBlIH0pOwogICAgICAgICAgY29tcG9uZW50cy5wdXNoKHsKICAgICAgICAgICAgLi4uYWJpUGFyYW1ldGVyLAogICAgICAgICAgICB0eXBlOiBgdHVwbGUke2FycmF5ID8/ICIifWAsCiAgICAgICAgICAgIGNvbXBvbmVudHM6IHJlc29sdmVTdHJ1Y3RzKHN0cnVjdHNbdHlwZV0gPz8gW10sIHN0cnVjdHMsIC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsuLi5hbmNlc3RvcnMsIHR5cGVdKSkKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoaXNTb2xpZGl0eVR5cGUodHlwZSkpCiAgICAgICAgICAgIGNvbXBvbmVudHMucHVzaChhYmlQYXJhbWV0ZXIpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICB0aHJvdyBuZXcgVW5rbm93blR5cGVFcnJvcih7IHR5cGUgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gY29tcG9uZW50czsKICB9CiAgdmFyIHR5cGVXaXRob3V0VHVwbGVSZWdleDsKICB2YXIgaW5pdF9zdHJ1Y3RzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvc3RydWN0cy5qcyIoKSB7CiAgICAgIGluaXRfcmVnZXgoKTsKICAgICAgaW5pdF9hYmlJdGVtKCk7CiAgICAgIGluaXRfYWJpUGFyYW1ldGVyKCk7CiAgICAgIGluaXRfc2lnbmF0dXJlKCk7CiAgICAgIGluaXRfc3RydWN0KCk7CiAgICAgIGluaXRfc2lnbmF0dXJlcygpOwogICAgICBpbml0X3V0aWxzKCk7CiAgICAgIHR5cGVXaXRob3V0VHVwbGVSZWdleCA9IC9eKD88dHlwZT5bYS16QS1aJF9dW2EtekEtWjAtOSRfXSopKD88YXJyYXk+KD86XFtcZCo/XF0pKz8pPyQvOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9wYXJzZUFiaS5qcwogIGZ1bmN0aW9uIHBhcnNlQWJpKHNpZ25hdHVyZXMpIHsKICAgIGNvbnN0IHN0cnVjdHMgPSBwYXJzZVN0cnVjdHMoc2lnbmF0dXJlcyk7CiAgICBjb25zdCBhYmkyID0gW107CiAgICBjb25zdCBsZW5ndGggPSBzaWduYXR1cmVzLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmF0dXJlc1tpXTsKICAgICAgaWYgKGlzU3RydWN0U2lnbmF0dXJlKHNpZ25hdHVyZSkpCiAgICAgICAgY29udGludWU7CiAgICAgIGFiaTIucHVzaChwYXJzZVNpZ25hdHVyZShzaWduYXR1cmUsIHN0cnVjdHMpKTsKICAgIH0KICAgIHJldHVybiBhYmkyOwogIH0KICB2YXIgaW5pdF9wYXJzZUFiaSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9wYXJzZUFiaS5qcyIoKSB7CiAgICAgIGluaXRfc2lnbmF0dXJlcygpOwogICAgICBpbml0X3N0cnVjdHMoKTsKICAgICAgaW5pdF91dGlscygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9wYXJzZUFiaUl0ZW0uanMKICBmdW5jdGlvbiBwYXJzZUFiaUl0ZW0oc2lnbmF0dXJlKSB7CiAgICBsZXQgYWJpSXRlbTsKICAgIGlmICh0eXBlb2Ygc2lnbmF0dXJlID09PSAic3RyaW5nIikKICAgICAgYWJpSXRlbSA9IHBhcnNlU2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc3RydWN0cyA9IHBhcnNlU3RydWN0cyhzaWduYXR1cmUpOwogICAgICBjb25zdCBsZW5ndGggPSBzaWduYXR1cmUubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3Qgc2lnbmF0dXJlXyA9IHNpZ25hdHVyZVtpXTsKICAgICAgICBpZiAoaXNTdHJ1Y3RTaWduYXR1cmUoc2lnbmF0dXJlXykpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBhYmlJdGVtID0gcGFyc2VTaWduYXR1cmUoc2lnbmF0dXJlXywgc3RydWN0cyk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmICghYWJpSXRlbSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBYmlJdGVtRXJyb3IoeyBzaWduYXR1cmUgfSk7CiAgICByZXR1cm4gYWJpSXRlbTsKICB9CiAgdmFyIGluaXRfcGFyc2VBYmlJdGVtID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpSXRlbS5qcyIoKSB7CiAgICAgIGluaXRfYWJpSXRlbSgpOwogICAgICBpbml0X3NpZ25hdHVyZXMoKTsKICAgICAgaW5pdF9zdHJ1Y3RzKCk7CiAgICAgIGluaXRfdXRpbHMoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvcGFyc2VBYmlQYXJhbWV0ZXIuanMKICBmdW5jdGlvbiBwYXJzZUFiaVBhcmFtZXRlcjIocGFyYW0pIHsKICAgIGxldCBhYmlQYXJhbWV0ZXI7CiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAic3RyaW5nIikKICAgICAgYWJpUGFyYW1ldGVyID0gcGFyc2VBYmlQYXJhbWV0ZXIocGFyYW0sIHsKICAgICAgICBtb2RpZmllcnMKICAgICAgfSk7CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc3RydWN0cyA9IHBhcnNlU3RydWN0cyhwYXJhbSk7CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtLmxlbmd0aDsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHBhcmFtW2ldOwogICAgICAgIGlmIChpc1N0cnVjdFNpZ25hdHVyZShzaWduYXR1cmUpKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgYWJpUGFyYW1ldGVyID0gcGFyc2VBYmlQYXJhbWV0ZXIoc2lnbmF0dXJlLCB7IG1vZGlmaWVycywgc3RydWN0cyB9KTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKCFhYmlQYXJhbWV0ZXIpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWJpUGFyYW1ldGVyRXJyb3IoeyBwYXJhbSB9KTsKICAgIHJldHVybiBhYmlQYXJhbWV0ZXI7CiAgfQogIHZhciBpbml0X3BhcnNlQWJpUGFyYW1ldGVyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpUGFyYW1ldGVyLmpzIigpIHsKICAgICAgaW5pdF9hYmlQYXJhbWV0ZXIoKTsKICAgICAgaW5pdF9zaWduYXR1cmVzKCk7CiAgICAgIGluaXRfc3RydWN0cygpOwogICAgICBpbml0X3V0aWxzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpUGFyYW1ldGVycy5qcwogIGZ1bmN0aW9uIHBhcnNlQWJpUGFyYW1ldGVycyhwYXJhbXMpIHsKICAgIGNvbnN0IGFiaVBhcmFtZXRlcnMgPSBbXTsKICAgIGlmICh0eXBlb2YgcGFyYW1zID09PSAic3RyaW5nIikgewogICAgICBjb25zdCBwYXJhbWV0ZXJzID0gc3BsaXRQYXJhbWV0ZXJzKHBhcmFtcyk7CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtZXRlcnMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgYWJpUGFyYW1ldGVycy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtZXRlcnNbaV0sIHsgbW9kaWZpZXJzIH0pKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgc3RydWN0cyA9IHBhcnNlU3RydWN0cyhwYXJhbXMpOwogICAgICBjb25zdCBsZW5ndGggPSBwYXJhbXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gcGFyYW1zW2ldOwogICAgICAgIGlmIChpc1N0cnVjdFNpZ25hdHVyZShzaWduYXR1cmUpKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHNwbGl0UGFyYW1ldGVycyhzaWduYXR1cmUpOwogICAgICAgIGNvbnN0IGxlbmd0aDIgPSBwYXJhbWV0ZXJzLmxlbmd0aDsKICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxlbmd0aDI7IGsrKykgewogICAgICAgICAgYWJpUGFyYW1ldGVycy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtZXRlcnNba10sIHsgbW9kaWZpZXJzLCBzdHJ1Y3RzIH0pKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChhYmlQYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMCkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3IoeyBwYXJhbXMgfSk7CiAgICByZXR1cm4gYWJpUGFyYW1ldGVyczsKICB9CiAgdmFyIGluaXRfcGFyc2VBYmlQYXJhbWV0ZXJzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpUGFyYW1ldGVycy5qcyIoKSB7CiAgICAgIGluaXRfYWJpUGFyYW1ldGVyKCk7CiAgICAgIGluaXRfc2lnbmF0dXJlcygpOwogICAgICBpbml0X3N0cnVjdHMoKTsKICAgICAgaW5pdF91dGlscygpOwogICAgICBpbml0X3V0aWxzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2V4cG9ydHMvaW5kZXguanMKICB2YXIgaW5pdF9leHBvcnRzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2V4cG9ydHMvaW5kZXguanMiKCkgewogICAgICBpbml0X2Zvcm1hdEFiaUl0ZW0oKTsKICAgICAgaW5pdF9wYXJzZUFiaSgpOwogICAgICBpbml0X3BhcnNlQWJpSXRlbSgpOwogICAgICBpbml0X3BhcnNlQWJpUGFyYW1ldGVyKCk7CiAgICAgIGluaXRfcGFyc2VBYmlQYXJhbWV0ZXJzKCk7CiAgICAgIGluaXRfYWJpSXRlbSgpOwogICAgICBpbml0X2FiaVBhcmFtZXRlcigpOwogICAgICBpbml0X3NpZ25hdHVyZSgpOwogICAgICBpbml0X3NwbGl0UGFyYW1ldGVycygpOwogICAgICBpbml0X3N0cnVjdCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9mb3JtYXRBYmlJdGVtLmpzCiAgZnVuY3Rpb24gZm9ybWF0QWJpSXRlbTIoYWJpSXRlbSwgeyBpbmNsdWRlTmFtZSA9IGZhbHNlIH0gPSB7fSkgewogICAgaWYgKGFiaUl0ZW0udHlwZSAhPT0gImZ1bmN0aW9uIiAmJiBhYmlJdGVtLnR5cGUgIT09ICJldmVudCIgJiYgYWJpSXRlbS50eXBlICE9PSAiZXJyb3IiKQogICAgICB0aHJvdyBuZXcgSW52YWxpZERlZmluaXRpb25UeXBlRXJyb3IoYWJpSXRlbS50eXBlKTsKICAgIHJldHVybiBgJHthYmlJdGVtLm5hbWV9KCR7Zm9ybWF0QWJpUGFyYW1zKGFiaUl0ZW0uaW5wdXRzLCB7IGluY2x1ZGVOYW1lIH0pfSlgOwogIH0KICBmdW5jdGlvbiBmb3JtYXRBYmlQYXJhbXMocGFyYW1zLCB7IGluY2x1ZGVOYW1lID0gZmFsc2UgfSA9IHt9KSB7CiAgICBpZiAoIXBhcmFtcykKICAgICAgcmV0dXJuICIiOwogICAgcmV0dXJuIHBhcmFtcy5tYXAoKHBhcmFtKSA9PiBmb3JtYXRBYmlQYXJhbShwYXJhbSwgeyBpbmNsdWRlTmFtZSB9KSkuam9pbihpbmNsdWRlTmFtZSA/ICIsICIgOiAiLCIpOwogIH0KICBmdW5jdGlvbiBmb3JtYXRBYmlQYXJhbShwYXJhbSwgeyBpbmNsdWRlTmFtZSB9KSB7CiAgICBpZiAocGFyYW0udHlwZS5zdGFydHNXaXRoKCJ0dXBsZSIpKSB7CiAgICAgIHJldHVybiBgKCR7Zm9ybWF0QWJpUGFyYW1zKHBhcmFtLmNvbXBvbmVudHMsIHsgaW5jbHVkZU5hbWUgfSl9KSR7cGFyYW0udHlwZS5zbGljZSgidHVwbGUiLmxlbmd0aCl9YDsKICAgIH0KICAgIHJldHVybiBwYXJhbS50eXBlICsgKGluY2x1ZGVOYW1lICYmIHBhcmFtLm5hbWUgPyBgICR7cGFyYW0ubmFtZX1gIDogIiIpOwogIH0KICB2YXIgaW5pdF9mb3JtYXRBYmlJdGVtMiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9mb3JtYXRBYmlJdGVtLmpzIigpIHsKICAgICAgaW5pdF9hYmkoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL2lzSGV4LmpzCiAgZnVuY3Rpb24gaXNIZXgodmFsdWUsIHsgc3RyaWN0ID0gdHJ1ZSB9ID0ge30pIHsKICAgIGlmICghdmFsdWUpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJzdHJpbmciKQogICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc3RyaWN0ID8gL14weFswLTlhLWZBLUZdKiQvLnRlc3QodmFsdWUpIDogdmFsdWUuc3RhcnRzV2l0aCgiMHgiKTsKICB9CiAgdmFyIGluaXRfaXNIZXggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL2lzSGV4LmpzIigpIHsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL3NpemUuanMKICBmdW5jdGlvbiBzaXplKHZhbHVlKSB7CiAgICBpZiAoaXNIZXgodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgcmV0dXJuIE1hdGguY2VpbCgodmFsdWUubGVuZ3RoIC0gMikgLyAyKTsKICAgIHJldHVybiB2YWx1ZS5sZW5ndGg7CiAgfQogIHZhciBpbml0X3NpemUgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL3NpemUuanMiKCkgewogICAgICBpbml0X2lzSGV4KCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL3ZlcnNpb24uanMKICB2YXIgdmVyc2lvbjI7CiAgdmFyIGluaXRfdmVyc2lvbjIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvdmVyc2lvbi5qcyIoKSB7CiAgICAgIHZlcnNpb24yID0gIjIuMTkuOCI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2Jhc2UuanMKICBmdW5jdGlvbiBzZXRFcnJvckNvbmZpZyhjb25maWcpIHsKICAgIGVycm9yQ29uZmlnID0gY29uZmlnOwogIH0KICBmdW5jdGlvbiB3YWxrKGVyciwgZm4pIHsKICAgIGlmIChmbj8uKGVycikpCiAgICAgIHJldHVybiBlcnI7CiAgICBpZiAoZXJyICYmIHR5cGVvZiBlcnIgPT09ICJvYmplY3QiICYmICJjYXVzZSIgaW4gZXJyKQogICAgICByZXR1cm4gd2FsayhlcnIuY2F1c2UsIGZuKTsKICAgIHJldHVybiBmbiA/IG51bGwgOiBlcnI7CiAgfQogIHZhciBlcnJvckNvbmZpZywgQmFzZUVycm9yMjsKICB2YXIgaW5pdF9iYXNlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2Jhc2UuanMiKCkgewogICAgICBpbml0X3ZlcnNpb24yKCk7CiAgICAgIGVycm9yQ29uZmlnID0gewogICAgICAgIGdldERvY3NVcmw6ICh7IGRvY3NCYXNlVXJsLCBkb2NzUGF0aDogZG9jc1BhdGg5ID0gIiIsIGRvY3NTbHVnIH0pID0+IGRvY3NQYXRoOSA/IGAke2RvY3NCYXNlVXJsID8/ICJodHRwczovL3ZpZW0uc2gifSR7ZG9jc1BhdGg5fSR7ZG9jc1NsdWcgPyBgIyR7ZG9jc1NsdWd9YCA6ICIifWAgOiB2b2lkIDAsCiAgICAgICAgdmVyc2lvbjogdmVyc2lvbjIKICAgICAgfTsKICAgICAgQmFzZUVycm9yMiA9IGNsYXNzIF9CYXNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3Ioc2hvcnRNZXNzYWdlLCBhcmdzID0ge30pIHsKICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSAoKCkgPT4gewogICAgICAgICAgICBpZiAoYXJncy5jYXVzZSBpbnN0YW5jZW9mIF9CYXNlRXJyb3IpCiAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2F1c2UuZGV0YWlsczsKICAgICAgICAgICAgaWYgKGFyZ3MuY2F1c2U/Lm1lc3NhZ2UpCiAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2F1c2UubWVzc2FnZTsKICAgICAgICAgICAgcmV0dXJuIGFyZ3MuZGV0YWlsczsKICAgICAgICAgIH0pKCk7CiAgICAgICAgICBjb25zdCBkb2NzUGF0aDkgPSAoKCkgPT4gewogICAgICAgICAgICBpZiAoYXJncy5jYXVzZSBpbnN0YW5jZW9mIF9CYXNlRXJyb3IpCiAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2F1c2UuZG9jc1BhdGggfHwgYXJncy5kb2NzUGF0aDsKICAgICAgICAgICAgcmV0dXJuIGFyZ3MuZG9jc1BhdGg7CiAgICAgICAgICB9KSgpOwogICAgICAgICAgY29uc3QgZG9jc1VybCA9IGVycm9yQ29uZmlnLmdldERvY3NVcmw/Lih7IC4uLmFyZ3MsIGRvY3NQYXRoOiBkb2NzUGF0aDkgfSk7CiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gWwogICAgICAgICAgICBzaG9ydE1lc3NhZ2UgfHwgIkFuIGVycm9yIG9jY3VycmVkLiIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICAuLi5hcmdzLm1ldGFNZXNzYWdlcyA/IFsuLi5hcmdzLm1ldGFNZXNzYWdlcywgIiJdIDogW10sCiAgICAgICAgICAgIC4uLmRvY3NVcmwgPyBbYERvY3M6ICR7ZG9jc1VybH1gXSA6IFtdLAogICAgICAgICAgICAuLi5kZXRhaWxzID8gW2BEZXRhaWxzOiAke2RldGFpbHN9YF0gOiBbXSwKICAgICAgICAgICAgLi4uZXJyb3JDb25maWcudmVyc2lvbiA/IFtgVmVyc2lvbjogJHtlcnJvckNvbmZpZy52ZXJzaW9ufWBdIDogW10KICAgICAgICAgIF0uam9pbigiXG4iKTsKICAgICAgICAgIHN1cGVyKG1lc3NhZ2UsIGFyZ3MuY2F1c2UgPyB7IGNhdXNlOiBhcmdzLmNhdXNlIH0gOiB2b2lkIDApOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkZXRhaWxzIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiZG9jc1BhdGgiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJtZXRhTWVzc2FnZXMiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaG9ydE1lc3NhZ2UiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJ2ZXJzaW9uIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJCYXNlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7CiAgICAgICAgICB0aGlzLmRvY3NQYXRoID0gZG9jc1BhdGg5OwogICAgICAgICAgdGhpcy5tZXRhTWVzc2FnZXMgPSBhcmdzLm1ldGFNZXNzYWdlczsKICAgICAgICAgIHRoaXMubmFtZSA9IGFyZ3MubmFtZSA/PyB0aGlzLm5hbWU7CiAgICAgICAgICB0aGlzLnNob3J0TWVzc2FnZSA9IHNob3J0TWVzc2FnZTsKICAgICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb24yOwogICAgICAgIH0KICAgICAgICB3YWxrKGZuKSB7CiAgICAgICAgICByZXR1cm4gd2Fsayh0aGlzLCBmbik7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hYmkuanMKICB2YXIgQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yLCBBYmlDb25zdHJ1Y3RvclBhcmFtc05vdEZvdW5kRXJyb3IsIEFiaURlY29kaW5nRGF0YVNpemVJbnZhbGlkRXJyb3IsIEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yLCBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IsIEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yLCBBYmlFbmNvZGluZ0J5dGVzU2l6ZU1pc21hdGNoRXJyb3IsIEFiaUVuY29kaW5nTGVuZ3RoTWlzbWF0Y2hFcnJvciwgQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yLCBBYmlFcnJvck5vdEZvdW5kRXJyb3IsIEFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvciwgQWJpRXZlbnRTaWduYXR1cmVFbXB0eVRvcGljc0Vycm9yLCBBYmlFdmVudFNpZ25hdHVyZU5vdEZvdW5kRXJyb3IsIEFiaUV2ZW50Tm90Rm91bmRFcnJvciwgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yLCBBYmlGdW5jdGlvbk91dHB1dHNOb3RGb3VuZEVycm9yLCBBYmlGdW5jdGlvblNpZ25hdHVyZU5vdEZvdW5kRXJyb3IsIEFiaUl0ZW1BbWJpZ3VpdHlFcnJvciwgQnl0ZXNTaXplTWlzbWF0Y2hFcnJvciwgRGVjb2RlTG9nRGF0YU1pc21hdGNoLCBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCwgSW52YWxpZEFiaUVuY29kaW5nVHlwZUVycm9yLCBJbnZhbGlkQWJpRGVjb2RpbmdUeXBlRXJyb3IsIEludmFsaWRBcnJheUVycm9yLCBJbnZhbGlkRGVmaW5pdGlvblR5cGVFcnJvciwgVW5zdXBwb3J0ZWRQYWNrZWRBYmlUeXBlOwogIHZhciBpbml0X2FiaSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hYmkuanMiKCkgewogICAgICBpbml0X2Zvcm1hdEFiaUl0ZW0yKCk7CiAgICAgIGluaXRfc2l6ZSgpOwogICAgICBpbml0X2Jhc2UoKTsKICAgICAgQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDkgfSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICAiQSBjb25zdHJ1Y3RvciB3YXMgbm90IGZvdW5kIG9uIHRoZSBBQkkuIiwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgY29uc3RydWN0b3IgZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlDb25zdHJ1Y3RvclBhcmFtc05vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgICJDb25zdHJ1Y3RvciBhcmd1bWVudHMgd2VyZSBwcm92aWRlZCAoYGFyZ3NgKSwgYnV0IGEgY29uc3RydWN0b3IgcGFyYW1ldGVycyAoYGlucHV0c2ApIHdlcmUgbm90IGZvdW5kIG9uIHRoZSBBQkkuIiwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSwgYW5kIHRoYXQgdGhlIGBpbnB1dHNgIGF0dHJpYnV0ZSBvbiB0aGUgY29uc3RydWN0b3IgZXhpc3RzLiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlEZWNvZGluZ0RhdGFTaXplSW52YWxpZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGRhdGEsIHNpemU6IHNpemUzIH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYERhdGEgc2l6ZSBvZiAke3NpemUzfSBieXRlcyBpcyBpbnZhbGlkLmAsCiAgICAgICAgICAgICJTaXplIG11c3QgYmUgaW4gaW5jcmVtZW50cyBvZiAzMiBieXRlcyAoc2l6ZSAlIDMyID09PSAwKS4iCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYERhdGE6ICR7ZGF0YX0gKCR7c2l6ZTN9IGJ5dGVzKWBdLAogICAgICAgICAgICBuYW1lOiAiQWJpRGVjb2RpbmdEYXRhU2l6ZUludmFsaWRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRGVjb2RpbmdEYXRhU2l6ZVRvb1NtYWxsRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZGF0YSwgcGFyYW1zLCBzaXplOiBzaXplMyB9KSB7CiAgICAgICAgICBzdXBlcihbYERhdGEgc2l6ZSBvZiAke3NpemUzfSBieXRlcyBpcyB0b28gc21hbGwgZm9yIGdpdmVuIHBhcmFtZXRlcnMuYF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgUGFyYW1zOiAoJHtmb3JtYXRBYmlQYXJhbXMocGFyYW1zLCB7IGluY2x1ZGVOYW1lOiB0cnVlIH0pfSlgLAogICAgICAgICAgICAgIGBEYXRhOiAgICR7ZGF0YX0gKCR7c2l6ZTN9IGJ5dGVzKWAKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbmFtZTogIkFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRhdGEiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJwYXJhbXMiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaXplIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKICAgICAgICAgIHRoaXMuc2l6ZSA9IHNpemUzOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRGVjb2RpbmdaZXJvRGF0YUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCdDYW5ub3QgZGVjb2RlIHplcm8gZGF0YSAoIjB4Iikgd2l0aCBBQkkgcGFyYW1ldGVycy4nLCB7CiAgICAgICAgICAgIG5hbWU6ICJBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGV4cGVjdGVkTGVuZ3RoLCBnaXZlbkxlbmd0aCwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBBQkkgZW5jb2RpbmcgYXJyYXkgbGVuZ3RoIG1pc21hdGNoIGZvciB0eXBlICR7dHlwZX0uYCwKICAgICAgICAgICAgYEV4cGVjdGVkIGxlbmd0aDogJHtleHBlY3RlZExlbmd0aH1gLAogICAgICAgICAgICBgR2l2ZW4gbGVuZ3RoOiAke2dpdmVuTGVuZ3RofWAKICAgICAgICAgIF0uam9pbigiXG4iKSwgeyBuYW1lOiAiQWJpRW5jb2RpbmdBcnJheUxlbmd0aE1pc21hdGNoRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRW5jb2RpbmdCeXRlc1NpemVNaXNtYXRjaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGV4cGVjdGVkU2l6ZSwgdmFsdWUgfSkgewogICAgICAgICAgc3VwZXIoYFNpemUgb2YgYnl0ZXMgIiR7dmFsdWV9IiAoYnl0ZXMke3NpemUodmFsdWUpfSkgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgc2l6ZSAoYnl0ZXMke2V4cGVjdGVkU2l6ZX0pLmAsIHsgbmFtZTogIkFiaUVuY29kaW5nQnl0ZXNTaXplTWlzbWF0Y2hFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFbmNvZGluZ0xlbmd0aE1pc21hdGNoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZXhwZWN0ZWRMZW5ndGgsIGdpdmVuTGVuZ3RoIH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgIkFCSSBlbmNvZGluZyBwYXJhbXMvdmFsdWVzIGxlbmd0aCBtaXNtYXRjaC4iLAogICAgICAgICAgICBgRXhwZWN0ZWQgbGVuZ3RoIChwYXJhbXMpOiAke2V4cGVjdGVkTGVuZ3RofWAsCiAgICAgICAgICAgIGBHaXZlbiBsZW5ndGggKHZhbHVlcyk6ICR7Z2l2ZW5MZW5ndGh9YAogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IG5hbWU6ICJBYmlFbmNvZGluZ0xlbmd0aE1pc21hdGNoRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihlcnJvck5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBBcmd1bWVudHMgKFxgYXJnc1xgKSB3ZXJlIHByb3ZpZGVkIHRvICIke2Vycm9yTmFtZX0iLCBidXQgIiR7ZXJyb3JOYW1lfSIgb24gdGhlIEFCSSBkb2VzIG5vdCBjb250YWluIGFueSBwYXJhbWV0ZXJzIChcYGlucHV0c1xgKS5gLAogICAgICAgICAgICAiQ2Fubm90IGVuY29kZSBlcnJvciByZXN1bHQgd2l0aG91dCBrbm93aW5nIHdoYXQgdGhlIHBhcmFtZXRlciB0eXBlcyBhcmUuIiwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgaW5wdXRzIGV4aXN0IG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFcnJvck5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGVycm9yTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRXJyb3IgJHtlcnJvck5hbWUgPyBgIiR7ZXJyb3JOYW1lfSIgYCA6ICIifW5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXJyb3IgZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXJyb3JOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFcnJvclNpZ25hdHVyZU5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHNpZ25hdHVyZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYEVuY29kZWQgZXJyb3Igc2lnbmF0dXJlICIke3NpZ25hdHVyZX0iIG5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXJyb3IgZXhpc3RzIG9uIGl0LiIsCiAgICAgICAgICAgIGBZb3UgY2FuIGxvb2sgdXAgdGhlIGRlY29kZWQgc2lnbmF0dXJlIGhlcmU6IGh0dHBzOi8vb3BlbmNoYWluLnh5ei9zaWduYXR1cmVzP3F1ZXJ5PSR7c2lnbmF0dXJlfS5gCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaWduYXR1cmUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5zaWduYXR1cmUgPSBzaWduYXR1cmU7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFdmVudFNpZ25hdHVyZUVtcHR5VG9waWNzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcigiQ2Fubm90IGV4dHJhY3QgZXZlbnQgc2lnbmF0dXJlIGZyb20gZW1wdHkgdG9waWNzLiIsIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUV2ZW50U2lnbmF0dXJlRW1wdHlUb3BpY3NFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRXZlbnRTaWduYXR1cmVOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihzaWduYXR1cmUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBFbmNvZGVkIGV2ZW50IHNpZ25hdHVyZSAiJHtzaWduYXR1cmV9IiBub3QgZm91bmQgb24gQUJJLmAsCiAgICAgICAgICAgICJNYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBBQkkgYW5kIHRoYXQgdGhlIGV2ZW50IGV4aXN0cyBvbiBpdC4iLAogICAgICAgICAgICBgWW91IGNhbiBsb29rIHVwIHRoZSBzaWduYXR1cmUgaGVyZTogaHR0cHM6Ly9vcGVuY2hhaW4ueHl6L3NpZ25hdHVyZXM/cXVlcnk9JHtzaWduYXR1cmV9LmAKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXZlbnRTaWduYXR1cmVOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFdmVudE5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGV2ZW50TmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRXZlbnQgJHtldmVudE5hbWUgPyBgIiR7ZXZlbnROYW1lfSIgYCA6ICIifW5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXZlbnQgZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXZlbnROb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlGdW5jdGlvbk5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGZ1bmN0aW9uTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRnVuY3Rpb24gJHtmdW5jdGlvbk5hbWUgPyBgIiR7ZnVuY3Rpb25OYW1lfSIgYCA6ICIifW5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZnVuY3Rpb24gZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlGdW5jdGlvbk91dHB1dHNOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihmdW5jdGlvbk5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBGdW5jdGlvbiAiJHtmdW5jdGlvbk5hbWV9IiBkb2VzIG5vdCBjb250YWluIGFueSBcYG91dHB1dHNcYCBvbiBBQkkuYCwKICAgICAgICAgICAgIkNhbm5vdCBkZWNvZGUgZnVuY3Rpb24gcmVzdWx0IHdpdGhvdXQga25vd2luZyB3aGF0IHRoZSBwYXJhbWV0ZXIgdHlwZXMgYXJlLiIsCiAgICAgICAgICAgICJNYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBBQkkgYW5kIHRoYXQgdGhlIGZ1bmN0aW9uIGV4aXN0cyBvbiBpdC4iCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUZ1bmN0aW9uT3V0cHV0c05vdEZvdW5kRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3Ioc2lnbmF0dXJlLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDkgfSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRW5jb2RlZCBmdW5jdGlvbiBzaWduYXR1cmUgIiR7c2lnbmF0dXJlfSIgbm90IGZvdW5kIG9uIEFCSS5gLAogICAgICAgICAgICAiTWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgQUJJIGFuZCB0aGF0IHRoZSBmdW5jdGlvbiBleGlzdHMgb24gaXQuIiwKICAgICAgICAgICAgYFlvdSBjYW4gbG9vayB1cCB0aGUgc2lnbmF0dXJlIGhlcmU6IGh0dHBzOi8vb3BlbmNoYWluLnh5ei9zaWduYXR1cmVzP3F1ZXJ5PSR7c2lnbmF0dXJlfS5gCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpSXRlbUFtYmlndWl0eUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih4LCB5KSB7CiAgICAgICAgICBzdXBlcigiRm91bmQgYW1iaWd1b3VzIHR5cGVzIGluIG92ZXJsb2FkZWQgQUJJIGl0ZW1zLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgYFxgJHt4LnR5cGV9XGAgaW4gXGAke2Zvcm1hdEFiaUl0ZW0yKHguYWJpSXRlbSl9XGAsIGFuZGAsCiAgICAgICAgICAgICAgYFxgJHt5LnR5cGV9XGAgaW4gXGAke2Zvcm1hdEFiaUl0ZW0yKHkuYWJpSXRlbSl9XGBgLAogICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICJUaGVzZSB0eXBlcyBlbmNvZGUgZGlmZmVyZW50bHkgYW5kIGNhbm5vdCBiZSBkaXN0aW5ndWlzaGVkIGF0IHJ1bnRpbWUuIiwKICAgICAgICAgICAgICAiUmVtb3ZlIG9uZSBvZiB0aGUgYW1iaWd1b3VzIGl0ZW1zIGluIHRoZSBBQkkuIgogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQWJpSXRlbUFtYmlndWl0eUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBCeXRlc1NpemVNaXNtYXRjaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGV4cGVjdGVkU2l6ZSwgZ2l2ZW5TaXplIH0pIHsKICAgICAgICAgIHN1cGVyKGBFeHBlY3RlZCBieXRlcyR7ZXhwZWN0ZWRTaXplfSwgZ290IGJ5dGVzJHtnaXZlblNpemV9LmAsIHsKICAgICAgICAgICAgbmFtZTogIkJ5dGVzU2l6ZU1pc21hdGNoRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIERlY29kZUxvZ0RhdGFNaXNtYXRjaCA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBhYmlJdGVtLCBkYXRhLCBwYXJhbXMsIHNpemU6IHNpemUzIH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYERhdGEgc2l6ZSBvZiAke3NpemUzfSBieXRlcyBpcyB0b28gc21hbGwgZm9yIG5vbi1pbmRleGVkIGV2ZW50IHBhcmFtZXRlcnMuYAogICAgICAgICAgXS5qb2luKCJcbiIpLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBQYXJhbXM6ICgke2Zvcm1hdEFiaVBhcmFtcyhwYXJhbXMsIHsgaW5jbHVkZU5hbWU6IHRydWUgfSl9KWAsCiAgICAgICAgICAgICAgYERhdGE6ICAgJHtkYXRhfSAoJHtzaXplM30gYnl0ZXMpYAogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiRGVjb2RlTG9nRGF0YU1pc21hdGNoIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFiaUl0ZW0iLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkYXRhIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAicGFyYW1zIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2l6ZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmFiaUl0ZW0gPSBhYmlJdGVtOwogICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOwogICAgICAgICAgdGhpcy5zaXplID0gc2l6ZTM7CiAgICAgICAgfQogICAgICB9OwogICAgICBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBhYmlJdGVtLCBwYXJhbSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBFeHBlY3RlZCBhIHRvcGljIGZvciBpbmRleGVkIGV2ZW50IHBhcmFtZXRlciR7cGFyYW0ubmFtZSA/IGAgIiR7cGFyYW0ubmFtZX0iYCA6ICIifSBvbiBldmVudCAiJHtmb3JtYXRBYmlJdGVtMihhYmlJdGVtLCB7IGluY2x1ZGVOYW1lOiB0cnVlIH0pfSIuYAogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IG5hbWU6ICJEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCIgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFiaUl0ZW0iLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5hYmlJdGVtID0gYWJpSXRlbTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBYmlFbmNvZGluZ1R5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIGVuY29kaW5nIHR5cGUuYCwKICAgICAgICAgICAgIlBsZWFzZSBwcm92aWRlIGEgdmFsaWQgQUJJIHR5cGUuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIG5hbWU6ICJJbnZhbGlkQWJpRW5jb2RpbmdUeXBlIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBYmlEZWNvZGluZ1R5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIGRlY29kaW5nIHR5cGUuYCwKICAgICAgICAgICAgIlBsZWFzZSBwcm92aWRlIGEgdmFsaWQgQUJJIHR5cGUuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIG5hbWU6ICJJbnZhbGlkQWJpRGVjb2RpbmdUeXBlIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBcnJheUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkgewogICAgICAgICAgc3VwZXIoW2BWYWx1ZSAiJHt2YWx1ZX0iIGlzIG5vdCBhIHZhbGlkIGFycmF5LmBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgbmFtZTogIkludmFsaWRBcnJheUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkRGVmaW5pdGlvblR5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIGRlZmluaXRpb24gdHlwZS5gLAogICAgICAgICAgICAnVmFsaWQgdHlwZXM6ICJmdW5jdGlvbiIsICJldmVudCIsICJlcnJvciInCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsgbmFtZTogIkludmFsaWREZWZpbml0aW9uVHlwZUVycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFVuc3VwcG9ydGVkUGFja2VkQWJpVHlwZSA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSkgewogICAgICAgICAgc3VwZXIoYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHBhY2tlZCBlbmNvZGluZy5gLCB7CiAgICAgICAgICAgIG5hbWU6ICJVbnN1cHBvcnRlZFBhY2tlZEFiaVR5cGUiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2RhdGEuanMKICB2YXIgU2xpY2VPZmZzZXRPdXRPZkJvdW5kc0Vycm9yLCBTaXplRXhjZWVkc1BhZGRpbmdTaXplRXJyb3IsIEludmFsaWRCeXRlc0xlbmd0aEVycm9yOwogIHZhciBpbml0X2RhdGEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvZGF0YS5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgb2Zmc2V0LCBwb3NpdGlvbiwgc2l6ZTogc2l6ZTMgfSkgewogICAgICAgICAgc3VwZXIoYFNsaWNlICR7cG9zaXRpb24gPT09ICJzdGFydCIgPyAic3RhcnRpbmciIDogImVuZGluZyJ9IGF0IG9mZnNldCAiJHtvZmZzZXR9IiBpcyBvdXQtb2YtYm91bmRzIChzaXplOiAke3NpemUzfSkuYCwgeyBuYW1lOiAiU2xpY2VPZmZzZXRPdXRPZkJvdW5kc0Vycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFNpemVFeGNlZWRzUGFkZGluZ1NpemVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBzaXplOiBzaXplMywgdGFyZ2V0U2l6ZSwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihgJHt0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7dHlwZS5zbGljZSgxKS50b0xvd2VyQ2FzZSgpfSBzaXplICgke3NpemUzfSkgZXhjZWVkcyBwYWRkaW5nIHNpemUgKCR7dGFyZ2V0U2l6ZX0pLmAsIHsgbmFtZTogIlNpemVFeGNlZWRzUGFkZGluZ1NpemVFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQnl0ZXNMZW5ndGhFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBzaXplOiBzaXplMywgdGFyZ2V0U2l6ZSwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihgJHt0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7dHlwZS5zbGljZSgxKS50b0xvd2VyQ2FzZSgpfSBpcyBleHBlY3RlZCB0byBiZSAke3RhcmdldFNpemV9ICR7dHlwZX0gbG9uZywgYnV0IGlzICR7c2l6ZTN9ICR7dHlwZX0gbG9uZy5gLCB7IG5hbWU6ICJJbnZhbGlkQnl0ZXNMZW5ndGhFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvcGFkLmpzCiAgZnVuY3Rpb24gcGFkKGhleE9yQnl0ZXMsIHsgZGlyLCBzaXplOiBzaXplMyA9IDMyIH0gPSB7fSkgewogICAgaWYgKHR5cGVvZiBoZXhPckJ5dGVzID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIHBhZEhleChoZXhPckJ5dGVzLCB7IGRpciwgc2l6ZTogc2l6ZTMgfSk7CiAgICByZXR1cm4gcGFkQnl0ZXMoaGV4T3JCeXRlcywgeyBkaXIsIHNpemU6IHNpemUzIH0pOwogIH0KICBmdW5jdGlvbiBwYWRIZXgoaGV4XywgeyBkaXIsIHNpemU6IHNpemUzID0gMzIgfSA9IHt9KSB7CiAgICBpZiAoc2l6ZTMgPT09IG51bGwpCiAgICAgIHJldHVybiBoZXhfOwogICAgY29uc3QgaGV4ID0gaGV4Xy5yZXBsYWNlKCIweCIsICIiKTsKICAgIGlmIChoZXgubGVuZ3RoID4gc2l6ZTMgKiAyKQogICAgICB0aHJvdyBuZXcgU2l6ZUV4Y2VlZHNQYWRkaW5nU2l6ZUVycm9yKHsKICAgICAgICBzaXplOiBNYXRoLmNlaWwoaGV4Lmxlbmd0aCAvIDIpLAogICAgICAgIHRhcmdldFNpemU6IHNpemUzLAogICAgICAgIHR5cGU6ICJoZXgiCiAgICAgIH0pOwogICAgcmV0dXJuIGAweCR7aGV4W2RpciA9PT0gInJpZ2h0IiA/ICJwYWRFbmQiIDogInBhZFN0YXJ0Il0oc2l6ZTMgKiAyLCAiMCIpfWA7CiAgfQogIGZ1bmN0aW9uIHBhZEJ5dGVzKGJ5dGVzMiwgeyBkaXIsIHNpemU6IHNpemUzID0gMzIgfSA9IHt9KSB7CiAgICBpZiAoc2l6ZTMgPT09IG51bGwpCiAgICAgIHJldHVybiBieXRlczI7CiAgICBpZiAoYnl0ZXMyLmxlbmd0aCA+IHNpemUzKQogICAgICB0aHJvdyBuZXcgU2l6ZUV4Y2VlZHNQYWRkaW5nU2l6ZUVycm9yKHsKICAgICAgICBzaXplOiBieXRlczIubGVuZ3RoLAogICAgICAgIHRhcmdldFNpemU6IHNpemUzLAogICAgICAgIHR5cGU6ICJieXRlcyIKICAgICAgfSk7CiAgICBjb25zdCBwYWRkZWRCeXRlcyA9IG5ldyBVaW50OEFycmF5KHNpemUzKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTM7IGkrKykgewogICAgICBjb25zdCBwYWRFbmQgPSBkaXIgPT09ICJyaWdodCI7CiAgICAgIHBhZGRlZEJ5dGVzW3BhZEVuZCA/IGkgOiBzaXplMyAtIGkgLSAxXSA9IGJ5dGVzMltwYWRFbmQgPyBpIDogYnl0ZXMyLmxlbmd0aCAtIGkgLSAxXTsKICAgIH0KICAgIHJldHVybiBwYWRkZWRCeXRlczsKICB9CiAgdmFyIGluaXRfcGFkID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9wYWQuanMiKCkgewogICAgICBpbml0X2RhdGEoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvZW5jb2RpbmcuanMKICB2YXIgSW50ZWdlck91dE9mUmFuZ2VFcnJvciwgSW52YWxpZEJ5dGVzQm9vbGVhbkVycm9yLCBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yLCBJbnZhbGlkSGV4VmFsdWVFcnJvciwgU2l6ZU92ZXJmbG93RXJyb3I7CiAgdmFyIGluaXRfZW5jb2RpbmcgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvZW5jb2RpbmcuanMiKCkgewogICAgICBpbml0X2Jhc2UoKTsKICAgICAgSW50ZWdlck91dE9mUmFuZ2VFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBtYXgsIG1pbiwgc2lnbmVkLCBzaXplOiBzaXplMywgdmFsdWUgfSkgewogICAgICAgICAgc3VwZXIoYE51bWJlciAiJHt2YWx1ZX0iIGlzIG5vdCBpbiBzYWZlICR7c2l6ZTMgPyBgJHtzaXplMyAqIDh9LWJpdCAke3NpZ25lZCA/ICJzaWduZWQiIDogInVuc2lnbmVkIn0gYCA6ICIifWludGVnZXIgcmFuZ2UgJHttYXggPyBgKCR7bWlufSB0byAke21heH0pYCA6IGAoYWJvdmUgJHttaW59KWB9YCwgeyBuYW1lOiAiSW50ZWdlck91dE9mUmFuZ2VFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQnl0ZXNCb29sZWFuRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGJ5dGVzMikgewogICAgICAgICAgc3VwZXIoYEJ5dGVzIHZhbHVlICIke2J5dGVzMn0iIGlzIG5vdCBhIHZhbGlkIGJvb2xlYW4uIFRoZSBieXRlcyBhcnJheSBtdXN0IGNvbnRhaW4gYSBzaW5nbGUgYnl0ZSBvZiBlaXRoZXIgYSAwIG9yIDEgdmFsdWUuYCwgewogICAgICAgICAgICBuYW1lOiAiSW52YWxpZEJ5dGVzQm9vbGVhbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihoZXgpIHsKICAgICAgICAgIHN1cGVyKGBIZXggdmFsdWUgIiR7aGV4fSIgaXMgbm90IGEgdmFsaWQgYm9vbGVhbi4gVGhlIGhleCB2YWx1ZSBtdXN0IGJlICIweDAiIChmYWxzZSkgb3IgIjB4MSIgKHRydWUpLmAsIHsgbmFtZTogIkludmFsaWRIZXhCb29sZWFuRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgSW52YWxpZEhleFZhbHVlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7CiAgICAgICAgICBzdXBlcihgSGV4IHZhbHVlICIke3ZhbHVlfSIgaXMgYW4gb2RkIGxlbmd0aCAoJHt2YWx1ZS5sZW5ndGh9KS4gSXQgbXVzdCBiZSBhbiBldmVuIGxlbmd0aC5gLCB7IG5hbWU6ICJJbnZhbGlkSGV4VmFsdWVFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTaXplT3ZlcmZsb3dFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBnaXZlblNpemUsIG1heFNpemUgfSkgewogICAgICAgICAgc3VwZXIoYFNpemUgY2Fubm90IGV4Y2VlZCAke21heFNpemV9IGJ5dGVzLiBHaXZlbiBzaXplOiAke2dpdmVuU2l6ZX0gYnl0ZXMuYCwgeyBuYW1lOiAiU2l6ZU92ZXJmbG93RXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL3RyaW0uanMKICBmdW5jdGlvbiB0cmltKGhleE9yQnl0ZXMsIHsgZGlyID0gImxlZnQiIH0gPSB7fSkgewogICAgbGV0IGRhdGEgPSB0eXBlb2YgaGV4T3JCeXRlcyA9PT0gInN0cmluZyIgPyBoZXhPckJ5dGVzLnJlcGxhY2UoIjB4IiwgIiIpIDogaGV4T3JCeXRlczsKICAgIGxldCBzbGljZUxlbmd0aCA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoIC0gMTsgaSsrKSB7CiAgICAgIGlmIChkYXRhW2RpciA9PT0gImxlZnQiID8gaSA6IGRhdGEubGVuZ3RoIC0gaSAtIDFdLnRvU3RyaW5nKCkgPT09ICIwIikKICAgICAgICBzbGljZUxlbmd0aCsrOwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBkYXRhID0gZGlyID09PSAibGVmdCIgPyBkYXRhLnNsaWNlKHNsaWNlTGVuZ3RoKSA6IGRhdGEuc2xpY2UoMCwgZGF0YS5sZW5ndGggLSBzbGljZUxlbmd0aCk7CiAgICBpZiAodHlwZW9mIGhleE9yQnl0ZXMgPT09ICJzdHJpbmciKSB7CiAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMSAmJiBkaXIgPT09ICJyaWdodCIpCiAgICAgICAgZGF0YSA9IGAke2RhdGF9MGA7CiAgICAgIHJldHVybiBgMHgke2RhdGEubGVuZ3RoICUgMiA9PT0gMSA/IGAwJHtkYXRhfWAgOiBkYXRhfWA7CiAgICB9CiAgICByZXR1cm4gZGF0YTsKICB9CiAgdmFyIGluaXRfdHJpbSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvdHJpbS5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5jb2RpbmcvZnJvbUhleC5qcwogIGZ1bmN0aW9uIGFzc2VydFNpemUoaGV4T3JCeXRlcywgeyBzaXplOiBzaXplMyB9KSB7CiAgICBpZiAoc2l6ZShoZXhPckJ5dGVzKSA+IHNpemUzKQogICAgICB0aHJvdyBuZXcgU2l6ZU92ZXJmbG93RXJyb3IoewogICAgICAgIGdpdmVuU2l6ZTogc2l6ZShoZXhPckJ5dGVzKSwKICAgICAgICBtYXhTaXplOiBzaXplMwogICAgICB9KTsKICB9CiAgZnVuY3Rpb24gZnJvbUhleChoZXgsIHRvT3JPcHRzKSB7CiAgICBjb25zdCBvcHRzID0gdHlwZW9mIHRvT3JPcHRzID09PSAic3RyaW5nIiA/IHsgdG86IHRvT3JPcHRzIH0gOiB0b09yT3B0czsKICAgIGNvbnN0IHRvID0gb3B0cy50bzsKICAgIGlmICh0byA9PT0gIm51bWJlciIpCiAgICAgIHJldHVybiBoZXhUb051bWJlcihoZXgsIG9wdHMpOwogICAgaWYgKHRvID09PSAiYmlnaW50IikKICAgICAgcmV0dXJuIGhleFRvQmlnSW50KGhleCwgb3B0cyk7CiAgICBpZiAodG8gPT09ICJzdHJpbmciKQogICAgICByZXR1cm4gaGV4VG9TdHJpbmcoaGV4LCBvcHRzKTsKICAgIGlmICh0byA9PT0gImJvb2xlYW4iKQogICAgICByZXR1cm4gaGV4VG9Cb29sKGhleCwgb3B0cyk7CiAgICByZXR1cm4gaGV4VG9CeXRlcyhoZXgsIG9wdHMpOwogIH0KICBmdW5jdGlvbiBoZXhUb0JpZ0ludChoZXgsIG9wdHMgPSB7fSkgewogICAgY29uc3QgeyBzaWduZWQgfSA9IG9wdHM7CiAgICBpZiAob3B0cy5zaXplKQogICAgICBhc3NlcnRTaXplKGhleCwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICBjb25zdCB2YWx1ZSA9IEJpZ0ludChoZXgpOwogICAgaWYgKCFzaWduZWQpCiAgICAgIHJldHVybiB2YWx1ZTsKICAgIGNvbnN0IHNpemUzID0gKGhleC5sZW5ndGggLSAyKSAvIDI7CiAgICBjb25zdCBtYXggPSAoMW4gPDwgQmlnSW50KHNpemUzKSAqIDhuIC0gMW4pIC0gMW47CiAgICBpZiAodmFsdWUgPD0gbWF4KQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gdmFsdWUgLSBCaWdJbnQoYDB4JHsiZiIucGFkU3RhcnQoc2l6ZTMgKiAyLCAiZiIpfWApIC0gMW47CiAgfQogIGZ1bmN0aW9uIGhleFRvQm9vbChoZXhfLCBvcHRzID0ge30pIHsKICAgIGxldCBoZXggPSBoZXhfOwogICAgaWYgKG9wdHMuc2l6ZSkgewogICAgICBhc3NlcnRTaXplKGhleCwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICAgIGhleCA9IHRyaW0oaGV4KTsKICAgIH0KICAgIGlmICh0cmltKGhleCkgPT09ICIweDAwIikKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKHRyaW0oaGV4KSA9PT0gIjB4MDEiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIHRocm93IG5ldyBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yKGhleCk7CiAgfQogIGZ1bmN0aW9uIGhleFRvTnVtYmVyKGhleCwgb3B0cyA9IHt9KSB7CiAgICByZXR1cm4gTnVtYmVyKGhleFRvQmlnSW50KGhleCwgb3B0cykpOwogIH0KICBmdW5jdGlvbiBoZXhUb1N0cmluZyhoZXgsIG9wdHMgPSB7fSkgewogICAgbGV0IGJ5dGVzMiA9IGhleFRvQnl0ZXMoaGV4KTsKICAgIGlmIChvcHRzLnNpemUpIHsKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICBieXRlczIgPSB0cmltKGJ5dGVzMiwgeyBkaXI6ICJyaWdodCIgfSk7CiAgICB9CiAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGJ5dGVzMik7CiAgfQogIHZhciBpbml0X2Zyb21IZXggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbmNvZGluZy9mcm9tSGV4LmpzIigpIHsKICAgICAgaW5pdF9lbmNvZGluZygpOwogICAgICBpbml0X3NpemUoKTsKICAgICAgaW5pdF90cmltKCk7CiAgICAgIGluaXRfdG9CeXRlcygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL3RvSGV4LmpzCiAgZnVuY3Rpb24gdG9IZXgodmFsdWUsIG9wdHMgPSB7fSkgewogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIgfHwgdHlwZW9mIHZhbHVlID09PSAiYmlnaW50IikKICAgICAgcmV0dXJuIG51bWJlclRvSGV4KHZhbHVlLCBvcHRzKTsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB7CiAgICAgIHJldHVybiBzdHJpbmdUb0hleCh2YWx1ZSwgb3B0cyk7CiAgICB9CiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAiYm9vbGVhbiIpCiAgICAgIHJldHVybiBib29sVG9IZXgodmFsdWUsIG9wdHMpOwogICAgcmV0dXJuIGJ5dGVzVG9IZXgodmFsdWUsIG9wdHMpOwogIH0KICBmdW5jdGlvbiBib29sVG9IZXgodmFsdWUsIG9wdHMgPSB7fSkgewogICAgY29uc3QgaGV4ID0gYDB4JHtOdW1iZXIodmFsdWUpfWA7CiAgICBpZiAodHlwZW9mIG9wdHMuc2l6ZSA9PT0gIm51bWJlciIpIHsKICAgICAgYXNzZXJ0U2l6ZShoZXgsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICByZXR1cm4gcGFkKGhleCwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICB9CiAgICByZXR1cm4gaGV4OwogIH0KICBmdW5jdGlvbiBieXRlc1RvSGV4KHZhbHVlLCBvcHRzID0ge30pIHsKICAgIGxldCBzdHJpbmcgPSAiIjsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKICAgICAgc3RyaW5nICs9IGhleGVzW3ZhbHVlW2ldXTsKICAgIH0KICAgIGNvbnN0IGhleCA9IGAweCR7c3RyaW5nfWA7CiAgICBpZiAodHlwZW9mIG9wdHMuc2l6ZSA9PT0gIm51bWJlciIpIHsKICAgICAgYXNzZXJ0U2l6ZShoZXgsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICByZXR1cm4gcGFkKGhleCwgeyBkaXI6ICJyaWdodCIsIHNpemU6IG9wdHMuc2l6ZSB9KTsKICAgIH0KICAgIHJldHVybiBoZXg7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvSGV4KHZhbHVlXywgb3B0cyA9IHt9KSB7CiAgICBjb25zdCB7IHNpZ25lZCwgc2l6ZTogc2l6ZTMgfSA9IG9wdHM7CiAgICBjb25zdCB2YWx1ZSA9IEJpZ0ludCh2YWx1ZV8pOwogICAgbGV0IG1heFZhbHVlOwogICAgaWYgKHNpemUzKSB7CiAgICAgIGlmIChzaWduZWQpCiAgICAgICAgbWF4VmFsdWUgPSAoMW4gPDwgQmlnSW50KHNpemUzKSAqIDhuIC0gMW4pIC0gMW47CiAgICAgIGVsc2UKICAgICAgICBtYXhWYWx1ZSA9IDJuICoqIChCaWdJbnQoc2l6ZTMpICogOG4pIC0gMW47CiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZV8gPT09ICJudW1iZXIiKSB7CiAgICAgIG1heFZhbHVlID0gQmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTsKICAgIH0KICAgIGNvbnN0IG1pblZhbHVlID0gdHlwZW9mIG1heFZhbHVlID09PSAiYmlnaW50IiAmJiBzaWduZWQgPyAtbWF4VmFsdWUgLSAxbiA6IDA7CiAgICBpZiAobWF4VmFsdWUgJiYgdmFsdWUgPiBtYXhWYWx1ZSB8fCB2YWx1ZSA8IG1pblZhbHVlKSB7CiAgICAgIGNvbnN0IHN1ZmZpeCA9IHR5cGVvZiB2YWx1ZV8gPT09ICJiaWdpbnQiID8gIm4iIDogIiI7CiAgICAgIHRocm93IG5ldyBJbnRlZ2VyT3V0T2ZSYW5nZUVycm9yKHsKICAgICAgICBtYXg6IG1heFZhbHVlID8gYCR7bWF4VmFsdWV9JHtzdWZmaXh9YCA6IHZvaWQgMCwKICAgICAgICBtaW46IGAke21pblZhbHVlfSR7c3VmZml4fWAsCiAgICAgICAgc2lnbmVkLAogICAgICAgIHNpemU6IHNpemUzLAogICAgICAgIHZhbHVlOiBgJHt2YWx1ZV99JHtzdWZmaXh9YAogICAgICB9KTsKICAgIH0KICAgIGNvbnN0IGhleCA9IGAweCR7KHNpZ25lZCAmJiB2YWx1ZSA8IDAgPyAoMW4gPDwgQmlnSW50KHNpemUzICogOCkpICsgQmlnSW50KHZhbHVlKSA6IHZhbHVlKS50b1N0cmluZygxNil9YDsKICAgIGlmIChzaXplMykKICAgICAgcmV0dXJuIHBhZChoZXgsIHsgc2l6ZTogc2l6ZTMgfSk7CiAgICByZXR1cm4gaGV4OwogIH0KICBmdW5jdGlvbiBzdHJpbmdUb0hleCh2YWx1ZV8sIG9wdHMgPSB7fSkgewogICAgY29uc3QgdmFsdWUgPSBlbmNvZGVyLmVuY29kZSh2YWx1ZV8pOwogICAgcmV0dXJuIGJ5dGVzVG9IZXgodmFsdWUsIG9wdHMpOwogIH0KICB2YXIgaGV4ZXMsIGVuY29kZXI7CiAgdmFyIGluaXRfdG9IZXggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbmNvZGluZy90b0hleC5qcyIoKSB7CiAgICAgIGluaXRfZW5jb2RpbmcoKTsKICAgICAgaW5pdF9wYWQoKTsKICAgICAgaW5pdF9mcm9tSGV4KCk7CiAgICAgIGhleGVzID0gLyogQF9fUFVSRV9fICovIEFycmF5LmZyb20oeyBsZW5ndGg6IDI1NiB9LCAoX3YsIGkpID0+IGkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICIwIikpOwogICAgICBlbmNvZGVyID0gLyogQF9fUFVSRV9fICovIG5ldyBUZXh0RW5jb2RlcigpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL3RvQnl0ZXMuanMKICBmdW5jdGlvbiB0b0J5dGVzKHZhbHVlLCBvcHRzID0ge30pIHsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJudW1iZXIiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gImJpZ2ludCIpCiAgICAgIHJldHVybiBudW1iZXJUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJib29sZWFuIikKICAgICAgcmV0dXJuIGJvb2xUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICAgIGlmIChpc0hleCh2YWx1ZSkpCiAgICAgIHJldHVybiBoZXhUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICAgIHJldHVybiBzdHJpbmdUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICB9CiAgZnVuY3Rpb24gYm9vbFRvQnl0ZXModmFsdWUsIG9wdHMgPSB7fSkgewogICAgY29uc3QgYnl0ZXMyID0gbmV3IFVpbnQ4QXJyYXkoMSk7CiAgICBieXRlczJbMF0gPSBOdW1iZXIodmFsdWUpOwogICAgaWYgKHR5cGVvZiBvcHRzLnNpemUgPT09ICJudW1iZXIiKSB7CiAgICAgIGFzc2VydFNpemUoYnl0ZXMyLCB7IHNpemU6IG9wdHMuc2l6ZSB9KTsKICAgICAgcmV0dXJuIHBhZChieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgfQogICAgcmV0dXJuIGJ5dGVzMjsKICB9CiAgZnVuY3Rpb24gY2hhckNvZGVUb0Jhc2UxNihjaGFyKSB7CiAgICBpZiAoY2hhciA+PSBjaGFyQ29kZU1hcC56ZXJvICYmIGNoYXIgPD0gY2hhckNvZGVNYXAubmluZSkKICAgICAgcmV0dXJuIGNoYXIgLSBjaGFyQ29kZU1hcC56ZXJvOwogICAgaWYgKGNoYXIgPj0gY2hhckNvZGVNYXAuQSAmJiBjaGFyIDw9IGNoYXJDb2RlTWFwLkYpCiAgICAgIHJldHVybiBjaGFyIC0gKGNoYXJDb2RlTWFwLkEgLSAxMCk7CiAgICBpZiAoY2hhciA+PSBjaGFyQ29kZU1hcC5hICYmIGNoYXIgPD0gY2hhckNvZGVNYXAuZikKICAgICAgcmV0dXJuIGNoYXIgLSAoY2hhckNvZGVNYXAuYSAtIDEwKTsKICAgIHJldHVybiB2b2lkIDA7CiAgfQogIGZ1bmN0aW9uIGhleFRvQnl0ZXMoaGV4Xywgb3B0cyA9IHt9KSB7CiAgICBsZXQgaGV4ID0gaGV4XzsKICAgIGlmIChvcHRzLnNpemUpIHsKICAgICAgYXNzZXJ0U2l6ZShoZXgsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICBoZXggPSBwYWQoaGV4LCB7IGRpcjogInJpZ2h0Iiwgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgfQogICAgbGV0IGhleFN0cmluZyA9IGhleC5zbGljZSgyKTsKICAgIGlmIChoZXhTdHJpbmcubGVuZ3RoICUgMikKICAgICAgaGV4U3RyaW5nID0gYDAke2hleFN0cmluZ31gOwogICAgY29uc3QgbGVuZ3RoID0gaGV4U3RyaW5nLmxlbmd0aCAvIDI7CiAgICBjb25zdCBieXRlczIgPSBuZXcgVWludDhBcnJheShsZW5ndGgpOwogICAgZm9yIChsZXQgaW5kZXgyID0gMCwgaiA9IDA7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyKyspIHsKICAgICAgY29uc3QgbmliYmxlTGVmdCA9IGNoYXJDb2RlVG9CYXNlMTYoaGV4U3RyaW5nLmNoYXJDb2RlQXQoaisrKSk7CiAgICAgIGNvbnN0IG5pYmJsZVJpZ2h0ID0gY2hhckNvZGVUb0Jhc2UxNihoZXhTdHJpbmcuY2hhckNvZGVBdChqKyspKTsKICAgICAgaWYgKG5pYmJsZUxlZnQgPT09IHZvaWQgMCB8fCBuaWJibGVSaWdodCA9PT0gdm9pZCAwKSB7CiAgICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoYEludmFsaWQgYnl0ZSBzZXF1ZW5jZSAoIiR7aGV4U3RyaW5nW2ogLSAyXX0ke2hleFN0cmluZ1tqIC0gMV19IiBpbiAiJHtoZXhTdHJpbmd9IikuYCk7CiAgICAgIH0KICAgICAgYnl0ZXMyW2luZGV4Ml0gPSBuaWJibGVMZWZ0ICogMTYgKyBuaWJibGVSaWdodDsKICAgIH0KICAgIHJldHVybiBieXRlczI7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvQnl0ZXModmFsdWUsIG9wdHMpIHsKICAgIGNvbnN0IGhleCA9IG51bWJlclRvSGV4KHZhbHVlLCBvcHRzKTsKICAgIHJldHVybiBoZXhUb0J5dGVzKGhleCk7CiAgfQogIGZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXModmFsdWUsIG9wdHMgPSB7fSkgewogICAgY29uc3QgYnl0ZXMyID0gZW5jb2RlcjIuZW5jb2RlKHZhbHVlKTsKICAgIGlmICh0eXBlb2Ygb3B0cy5zaXplID09PSAibnVtYmVyIikgewogICAgICBhc3NlcnRTaXplKGJ5dGVzMiwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICAgIHJldHVybiBwYWQoYnl0ZXMyLCB7IGRpcjogInJpZ2h0Iiwgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgfQogICAgcmV0dXJuIGJ5dGVzMjsKICB9CiAgdmFyIGVuY29kZXIyLCBjaGFyQ29kZU1hcDsKICB2YXIgaW5pdF90b0J5dGVzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5jb2RpbmcvdG9CeXRlcy5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X2lzSGV4KCk7CiAgICAgIGluaXRfcGFkKCk7CiAgICAgIGluaXRfZnJvbUhleCgpOwogICAgICBpbml0X3RvSGV4KCk7CiAgICAgIGVuY29kZXIyID0gLyogQF9fUFVSRV9fICovIG5ldyBUZXh0RW5jb2RlcigpOwogICAgICBjaGFyQ29kZU1hcCA9IHsKICAgICAgICB6ZXJvOiA0OCwKICAgICAgICBuaW5lOiA1NywKICAgICAgICBBOiA2NSwKICAgICAgICBGOiA3MCwKICAgICAgICBhOiA5NywKICAgICAgICBmOiAxMDIKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL19hc3NlcnQuanMKICBmdW5jdGlvbiBudW1iZXIobikgewogICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihuKSB8fCBuIDwgMCkKICAgICAgdGhyb3cgbmV3IEVycm9yKGBwb3NpdGl2ZSBpbnRlZ2VyIGV4cGVjdGVkLCBub3QgJHtufWApOwogIH0KICBmdW5jdGlvbiBpc0J5dGVzKGEpIHsKICAgIHJldHVybiBhIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBhICE9IG51bGwgJiYgdHlwZW9mIGEgPT09ICJvYmplY3QiICYmIGEuY29uc3RydWN0b3IubmFtZSA9PT0gIlVpbnQ4QXJyYXkiOwogIH0KICBmdW5jdGlvbiBieXRlcyhiLCAuLi5sZW5ndGhzKSB7CiAgICBpZiAoIWlzQnl0ZXMoYikpCiAgICAgIHRocm93IG5ldyBFcnJvcigiVWludDhBcnJheSBleHBlY3RlZCIpOwogICAgaWYgKGxlbmd0aHMubGVuZ3RoID4gMCAmJiAhbGVuZ3Rocy5pbmNsdWRlcyhiLmxlbmd0aCkpCiAgICAgIHRocm93IG5ldyBFcnJvcihgVWludDhBcnJheSBleHBlY3RlZCBvZiBsZW5ndGggJHtsZW5ndGhzfSwgbm90IG9mIGxlbmd0aD0ke2IubGVuZ3RofWApOwogIH0KICBmdW5jdGlvbiBoYXNoKGgpIHsKICAgIGlmICh0eXBlb2YgaCAhPT0gImZ1bmN0aW9uIiB8fCB0eXBlb2YgaC5jcmVhdGUgIT09ICJmdW5jdGlvbiIpCiAgICAgIHRocm93IG5ldyBFcnJvcigiSGFzaCBzaG91bGQgYmUgd3JhcHBlZCBieSB1dGlscy53cmFwQ29uc3RydWN0b3IiKTsKICAgIG51bWJlcihoLm91dHB1dExlbik7CiAgICBudW1iZXIoaC5ibG9ja0xlbik7CiAgfQogIGZ1bmN0aW9uIGV4aXN0cyhpbnN0YW5jZSwgY2hlY2tGaW5pc2hlZCA9IHRydWUpIHsKICAgIGlmIChpbnN0YW5jZS5kZXN0cm95ZWQpCiAgICAgIHRocm93IG5ldyBFcnJvcigiSGFzaCBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWQiKTsKICAgIGlmIChjaGVja0ZpbmlzaGVkICYmIGluc3RhbmNlLmZpbmlzaGVkKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkhhc2gjZGlnZXN0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQiKTsKICB9CiAgZnVuY3Rpb24gb3V0cHV0KG91dCwgaW5zdGFuY2UpIHsKICAgIGJ5dGVzKG91dCk7CiAgICBjb25zdCBtaW4gPSBpbnN0YW5jZS5vdXRwdXRMZW47CiAgICBpZiAob3V0Lmxlbmd0aCA8IG1pbikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpZ2VzdEludG8oKSBleHBlY3RzIG91dHB1dCBidWZmZXIgb2YgbGVuZ3RoIGF0IGxlYXN0ICR7bWlufWApOwogICAgfQogIH0KICB2YXIgaW5pdF9hc3NlcnQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL19hc3NlcnQuanMiKCkgewogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vX3U2NC5qcwogIGZ1bmN0aW9uIGZyb21CaWcobiwgbGUgPSBmYWxzZSkgewogICAgaWYgKGxlKQogICAgICByZXR1cm4geyBoOiBOdW1iZXIobiAmIFUzMl9NQVNLNjQpLCBsOiBOdW1iZXIobiA+PiBfMzJuICYgVTMyX01BU0s2NCkgfTsKICAgIHJldHVybiB7IGg6IE51bWJlcihuID4+IF8zMm4gJiBVMzJfTUFTSzY0KSB8IDAsIGw6IE51bWJlcihuICYgVTMyX01BU0s2NCkgfCAwIH07CiAgfQogIGZ1bmN0aW9uIHNwbGl0KGxzdCwgbGUgPSBmYWxzZSkgewogICAgbGV0IEFoID0gbmV3IFVpbnQzMkFycmF5KGxzdC5sZW5ndGgpOwogICAgbGV0IEFsID0gbmV3IFVpbnQzMkFycmF5KGxzdC5sZW5ndGgpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsc3QubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgeyBoLCBsIH0gPSBmcm9tQmlnKGxzdFtpXSwgbGUpOwogICAgICBbQWhbaV0sIEFsW2ldXSA9IFtoLCBsXTsKICAgIH0KICAgIHJldHVybiBbQWgsIEFsXTsKICB9CiAgdmFyIFUzMl9NQVNLNjQsIF8zMm4sIHJvdGxTSCwgcm90bFNMLCByb3RsQkgsIHJvdGxCTDsKICB2YXIgaW5pdF91NjQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL191NjQuanMiKCkgewogICAgICBVMzJfTUFTSzY0ID0gLyogQF9fUFVSRV9fICovIEJpZ0ludCgyICoqIDMyIC0gMSk7CiAgICAgIF8zMm4gPSAvKiBAX19QVVJFX18gKi8gQmlnSW50KDMyKTsKICAgICAgcm90bFNIID0gKGgsIGwsIHMpID0+IGggPDwgcyB8IGwgPj4+IDMyIC0gczsKICAgICAgcm90bFNMID0gKGgsIGwsIHMpID0+IGwgPDwgcyB8IGggPj4+IDMyIC0gczsKICAgICAgcm90bEJIID0gKGgsIGwsIHMpID0+IGwgPDwgcyAtIDMyIHwgaCA+Pj4gNjQgLSBzOwogICAgICByb3RsQkwgPSAoaCwgbCwgcykgPT4gaCA8PCBzIC0gMzIgfCBsID4+PiA2NCAtIHM7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9jcnlwdG8uanMKICB2YXIgY3J5cHRvOwogIHZhciBpbml0X2NyeXB0byA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vY3J5cHRvLmpzIigpIHsKICAgICAgY3J5cHRvID0gdHlwZW9mIGdsb2JhbFRoaXMgPT09ICJvYmplY3QiICYmICJjcnlwdG8iIGluIGdsb2JhbFRoaXMgPyBnbG9iYWxUaGlzLmNyeXB0byA6IHZvaWQgMDsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL3V0aWxzLmpzCiAgZnVuY3Rpb24gYnl0ZVN3YXAzMihhcnIpIHsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7CiAgICAgIGFycltpXSA9IGJ5dGVTd2FwKGFycltpXSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHV0ZjhUb0J5dGVzKHN0cikgewogICAgaWYgKHR5cGVvZiBzdHIgIT09ICJzdHJpbmciKQogICAgICB0aHJvdyBuZXcgRXJyb3IoYHV0ZjhUb0J5dGVzIGV4cGVjdGVkIHN0cmluZywgZ290ICR7dHlwZW9mIHN0cn1gKTsKICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyKSk7CiAgfQogIGZ1bmN0aW9uIHRvQnl0ZXMyKGRhdGEpIHsKICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIpCiAgICAgIGRhdGEgPSB1dGY4VG9CeXRlcyhkYXRhKTsKICAgIGJ5dGVzKGRhdGEpOwogICAgcmV0dXJuIGRhdGE7CiAgfQogIGZ1bmN0aW9uIGNvbmNhdEJ5dGVzKC4uLmFycmF5cykgewogICAgbGV0IHN1bSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhID0gYXJyYXlzW2ldOwogICAgICBieXRlcyhhKTsKICAgICAgc3VtICs9IGEubGVuZ3RoOwogICAgfQogICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc3VtKTsKICAgIGZvciAobGV0IGkgPSAwLCBwYWQyID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhID0gYXJyYXlzW2ldOwogICAgICByZXMuc2V0KGEsIHBhZDIpOwogICAgICBwYWQyICs9IGEubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9CiAgZnVuY3Rpb24gd3JhcENvbnN0cnVjdG9yKGhhc2hDb25zKSB7CiAgICBjb25zdCBoYXNoQyA9IChtc2cpID0+IGhhc2hDb25zKCkudXBkYXRlKHRvQnl0ZXMyKG1zZykpLmRpZ2VzdCgpOwogICAgY29uc3QgdG1wID0gaGFzaENvbnMoKTsKICAgIGhhc2hDLm91dHB1dExlbiA9IHRtcC5vdXRwdXRMZW47CiAgICBoYXNoQy5ibG9ja0xlbiA9IHRtcC5ibG9ja0xlbjsKICAgIGhhc2hDLmNyZWF0ZSA9ICgpID0+IGhhc2hDb25zKCk7CiAgICByZXR1cm4gaGFzaEM7CiAgfQogIGZ1bmN0aW9uIHdyYXBYT0ZDb25zdHJ1Y3RvcldpdGhPcHRzKGhhc2hDb25zKSB7CiAgICBjb25zdCBoYXNoQyA9IChtc2csIG9wdHMpID0+IGhhc2hDb25zKG9wdHMpLnVwZGF0ZSh0b0J5dGVzMihtc2cpKS5kaWdlc3QoKTsKICAgIGNvbnN0IHRtcCA9IGhhc2hDb25zKHt9KTsKICAgIGhhc2hDLm91dHB1dExlbiA9IHRtcC5vdXRwdXRMZW47CiAgICBoYXNoQy5ibG9ja0xlbiA9IHRtcC5ibG9ja0xlbjsKICAgIGhhc2hDLmNyZWF0ZSA9IChvcHRzKSA9PiBoYXNoQ29ucyhvcHRzKTsKICAgIHJldHVybiBoYXNoQzsKICB9CiAgZnVuY3Rpb24gcmFuZG9tQnl0ZXMoYnl0ZXNMZW5ndGggPSAzMikgewogICAgaWYgKGNyeXB0byAmJiB0eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyA9PT0gImZ1bmN0aW9uIikgewogICAgICByZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShieXRlc0xlbmd0aCkpOwogICAgfQogICAgdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIG11c3QgYmUgZGVmaW5lZCIpOwogIH0KICB2YXIgdTMyLCBjcmVhdGVWaWV3LCByb3RyLCByb3RsLCBpc0xFLCBieXRlU3dhcCwgSGFzaCwgdG9TdHI7CiAgdmFyIGluaXRfdXRpbHMyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS91dGlscy5qcyIoKSB7CiAgICAgIGluaXRfY3J5cHRvKCk7CiAgICAgIGluaXRfYXNzZXJ0KCk7CiAgICAgIHUzMiA9IChhcnIpID0+IG5ldyBVaW50MzJBcnJheShhcnIuYnVmZmVyLCBhcnIuYnl0ZU9mZnNldCwgTWF0aC5mbG9vcihhcnIuYnl0ZUxlbmd0aCAvIDQpKTsKICAgICAgY3JlYXRlVmlldyA9IChhcnIpID0+IG5ldyBEYXRhVmlldyhhcnIuYnVmZmVyLCBhcnIuYnl0ZU9mZnNldCwgYXJyLmJ5dGVMZW5ndGgpOwogICAgICByb3RyID0gKHdvcmQsIHNoaWZ0KSA9PiB3b3JkIDw8IDMyIC0gc2hpZnQgfCB3b3JkID4+PiBzaGlmdDsKICAgICAgcm90bCA9ICh3b3JkLCBzaGlmdCkgPT4gd29yZCA8PCBzaGlmdCB8IHdvcmQgPj4+IDMyIC0gc2hpZnQgPj4+IDA7CiAgICAgIGlzTEUgPSBuZXcgVWludDhBcnJheShuZXcgVWludDMyQXJyYXkoWzI4NzQ1NDAyMF0pLmJ1ZmZlcilbMF0gPT09IDY4OwogICAgICBieXRlU3dhcCA9ICh3b3JkKSA9PiB3b3JkIDw8IDI0ICYgNDI3ODE5MDA4MCB8IHdvcmQgPDwgOCAmIDE2NzExNjgwIHwgd29yZCA+Pj4gOCAmIDY1MjgwIHwgd29yZCA+Pj4gMjQgJiAyNTU7CiAgICAgIEhhc2ggPSBjbGFzcyB7CiAgICAgICAgLy8gU2FmZSB2ZXJzaW9uIHRoYXQgY2xvbmVzIGludGVybmFsIHN0YXRlCiAgICAgICAgY2xvbmUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvbmVJbnRvKCk7CiAgICAgICAgfQogICAgICB9OwogICAgICB0b1N0ciA9IHt9LnRvU3RyaW5nOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vc2hhMy5qcwogIGZ1bmN0aW9uIGtlY2Nha1Aocywgcm91bmRzID0gMjQpIHsKICAgIGNvbnN0IEIgPSBuZXcgVWludDMyQXJyYXkoNSAqIDIpOwogICAgZm9yIChsZXQgcm91bmQgPSAyNCAtIHJvdW5kczsgcm91bmQgPCAyNDsgcm91bmQrKykgewogICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IDEwOyB4KyspCiAgICAgICAgQlt4XSA9IHNbeF0gXiBzW3ggKyAxMF0gXiBzW3ggKyAyMF0gXiBzW3ggKyAzMF0gXiBzW3ggKyA0MF07CiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgMTA7IHggKz0gMikgewogICAgICAgIGNvbnN0IGlkeDEgPSAoeCArIDgpICUgMTA7CiAgICAgICAgY29uc3QgaWR4MCA9ICh4ICsgMikgJSAxMDsKICAgICAgICBjb25zdCBCMCA9IEJbaWR4MF07CiAgICAgICAgY29uc3QgQjEgPSBCW2lkeDAgKyAxXTsKICAgICAgICBjb25zdCBUaCA9IHJvdGxIKEIwLCBCMSwgMSkgXiBCW2lkeDFdOwogICAgICAgIGNvbnN0IFRsID0gcm90bEwoQjAsIEIxLCAxKSBeIEJbaWR4MSArIDFdOwogICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgNTA7IHkgKz0gMTApIHsKICAgICAgICAgIHNbeCArIHldIF49IFRoOwogICAgICAgICAgc1t4ICsgeSArIDFdIF49IFRsOwogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgY3VySCA9IHNbMl07CiAgICAgIGxldCBjdXJMID0gc1szXTsKICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCAyNDsgdCsrKSB7CiAgICAgICAgY29uc3Qgc2hpZnQgPSBTSEEzX1JPVExbdF07CiAgICAgICAgY29uc3QgVGggPSByb3RsSChjdXJILCBjdXJMLCBzaGlmdCk7CiAgICAgICAgY29uc3QgVGwgPSByb3RsTChjdXJILCBjdXJMLCBzaGlmdCk7CiAgICAgICAgY29uc3QgUEkgPSBTSEEzX1BJW3RdOwogICAgICAgIGN1ckggPSBzW1BJXTsKICAgICAgICBjdXJMID0gc1tQSSArIDFdOwogICAgICAgIHNbUEldID0gVGg7CiAgICAgICAgc1tQSSArIDFdID0gVGw7CiAgICAgIH0KICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCA1MDsgeSArPSAxMCkgewogICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgMTA7IHgrKykKICAgICAgICAgIEJbeF0gPSBzW3kgKyB4XTsKICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IDEwOyB4KyspCiAgICAgICAgICBzW3kgKyB4XSBePSB+QlsoeCArIDIpICUgMTBdICYgQlsoeCArIDQpICUgMTBdOwogICAgICB9CiAgICAgIHNbMF0gXj0gU0hBM19JT1RBX0hbcm91bmRdOwogICAgICBzWzFdIF49IFNIQTNfSU9UQV9MW3JvdW5kXTsKICAgIH0KICAgIEIuZmlsbCgwKTsKICB9CiAgdmFyIFNIQTNfUEksIFNIQTNfUk9UTCwgX1NIQTNfSU9UQSwgXzBuLCBfMW4sIF8ybiwgXzduLCBfMjU2biwgXzB4NzFuLCBTSEEzX0lPVEFfSCwgU0hBM19JT1RBX0wsIHJvdGxILCByb3RsTCwgS2VjY2FrLCBnZW4sIHNoYTNfMjI0LCBzaGEzXzI1Niwgc2hhM18zODQsIHNoYTNfNTEyLCBrZWNjYWtfMjI0LCBrZWNjYWtfMjU2LCBrZWNjYWtfMzg0LCBrZWNjYWtfNTEyLCBnZW5TaGFrZSwgc2hha2UxMjgsIHNoYWtlMjU2OwogIHZhciBpbml0X3NoYTMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL3NoYTMuanMiKCkgewogICAgICBpbml0X2Fzc2VydCgpOwogICAgICBpbml0X3U2NCgpOwogICAgICBpbml0X3V0aWxzMigpOwogICAgICBTSEEzX1BJID0gW107CiAgICAgIFNIQTNfUk9UTCA9IFtdOwogICAgICBfU0hBM19JT1RBID0gW107CiAgICAgIF8wbiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMCk7CiAgICAgIF8xbiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMSk7CiAgICAgIF8ybiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMik7CiAgICAgIF83biA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoNyk7CiAgICAgIF8yNTZuID0gLyogQF9fUFVSRV9fICovIEJpZ0ludCgyNTYpOwogICAgICBfMHg3MW4gPSAvKiBAX19QVVJFX18gKi8gQmlnSW50KDExMyk7CiAgICAgIGZvciAobGV0IHJvdW5kID0gMCwgUiA9IF8xbiwgeCA9IDEsIHkgPSAwOyByb3VuZCA8IDI0OyByb3VuZCsrKSB7CiAgICAgICAgW3gsIHldID0gW3ksICgyICogeCArIDMgKiB5KSAlIDVdOwogICAgICAgIFNIQTNfUEkucHVzaCgyICogKDUgKiB5ICsgeCkpOwogICAgICAgIFNIQTNfUk9UTC5wdXNoKChyb3VuZCArIDEpICogKHJvdW5kICsgMikgLyAyICUgNjQpOwogICAgICAgIGxldCB0ID0gXzBuOwogICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgNzsgaisrKSB7CiAgICAgICAgICBSID0gKFIgPDwgXzFuIF4gKFIgPj4gXzduKSAqIF8weDcxbikgJSBfMjU2bjsKICAgICAgICAgIGlmIChSICYgXzJuKQogICAgICAgICAgICB0IF49IF8xbiA8PCAoXzFuIDw8IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoaikpIC0gXzFuOwogICAgICAgIH0KICAgICAgICBfU0hBM19JT1RBLnB1c2godCk7CiAgICAgIH0KICAgICAgW1NIQTNfSU9UQV9ILCBTSEEzX0lPVEFfTF0gPSAvKiBAX19QVVJFX18gKi8gc3BsaXQoX1NIQTNfSU9UQSwgdHJ1ZSk7CiAgICAgIHJvdGxIID0gKGgsIGwsIHMpID0+IHMgPiAzMiA/IHJvdGxCSChoLCBsLCBzKSA6IHJvdGxTSChoLCBsLCBzKTsKICAgICAgcm90bEwgPSAoaCwgbCwgcykgPT4gcyA+IDMyID8gcm90bEJMKGgsIGwsIHMpIDogcm90bFNMKGgsIGwsIHMpOwogICAgICBLZWNjYWsgPSBjbGFzcyBfS2VjY2FrIGV4dGVuZHMgSGFzaCB7CiAgICAgICAgLy8gTk9URTogd2UgYWNjZXB0IGFyZ3VtZW50cyBpbiBieXRlcyBpbnN0ZWFkIG9mIGJpdHMgaGVyZS4KICAgICAgICBjb25zdHJ1Y3RvcihibG9ja0xlbiwgc3VmZml4LCBvdXRwdXRMZW4sIGVuYWJsZVhPRiA9IGZhbHNlLCByb3VuZHMgPSAyNCkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIHRoaXMuYmxvY2tMZW4gPSBibG9ja0xlbjsKICAgICAgICAgIHRoaXMuc3VmZml4ID0gc3VmZml4OwogICAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0aGlzLmVuYWJsZVhPRiA9IGVuYWJsZVhPRjsKICAgICAgICAgIHRoaXMucm91bmRzID0gcm91bmRzOwogICAgICAgICAgdGhpcy5wb3MgPSAwOwogICAgICAgICAgdGhpcy5wb3NPdXQgPSAwOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTsKICAgICAgICAgIG51bWJlcihvdXRwdXRMZW4pOwogICAgICAgICAgaWYgKDAgPj0gdGhpcy5ibG9ja0xlbiB8fCB0aGlzLmJsb2NrTGVuID49IDIwMCkKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTaGEzIHN1cHBvcnRzIG9ubHkga2VjY2FrLWYxNjAwIGZ1bmN0aW9uIik7CiAgICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFVpbnQ4QXJyYXkoMjAwKTsKICAgICAgICAgIHRoaXMuc3RhdGUzMiA9IHUzMih0aGlzLnN0YXRlKTsKICAgICAgICB9CiAgICAgICAga2VjY2FrKCkgewogICAgICAgICAgaWYgKCFpc0xFKQogICAgICAgICAgICBieXRlU3dhcDMyKHRoaXMuc3RhdGUzMik7CiAgICAgICAgICBrZWNjYWtQKHRoaXMuc3RhdGUzMiwgdGhpcy5yb3VuZHMpOwogICAgICAgICAgaWYgKCFpc0xFKQogICAgICAgICAgICBieXRlU3dhcDMyKHRoaXMuc3RhdGUzMik7CiAgICAgICAgICB0aGlzLnBvc091dCA9IDA7CiAgICAgICAgICB0aGlzLnBvcyA9IDA7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZShkYXRhKSB7CiAgICAgICAgICBleGlzdHModGhpcyk7CiAgICAgICAgICBjb25zdCB7IGJsb2NrTGVuLCBzdGF0ZSB9ID0gdGhpczsKICAgICAgICAgIGRhdGEgPSB0b0J5dGVzMihkYXRhKTsKICAgICAgICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoOwogICAgICAgICAgZm9yIChsZXQgcG9zID0gMDsgcG9zIDwgbGVuOyApIHsKICAgICAgICAgICAgY29uc3QgdGFrZSA9IE1hdGgubWluKGJsb2NrTGVuIC0gdGhpcy5wb3MsIGxlbiAtIHBvcyk7CiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFrZTsgaSsrKQogICAgICAgICAgICAgIHN0YXRlW3RoaXMucG9zKytdIF49IGRhdGFbcG9zKytdOwogICAgICAgICAgICBpZiAodGhpcy5wb3MgPT09IGJsb2NrTGVuKQogICAgICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgZmluaXNoKCkgewogICAgICAgICAgaWYgKHRoaXMuZmluaXNoZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMuZmluaXNoZWQgPSB0cnVlOwogICAgICAgICAgY29uc3QgeyBzdGF0ZSwgc3VmZml4LCBwb3MsIGJsb2NrTGVuIH0gPSB0aGlzOwogICAgICAgICAgc3RhdGVbcG9zXSBePSBzdWZmaXg7CiAgICAgICAgICBpZiAoKHN1ZmZpeCAmIDEyOCkgIT09IDAgJiYgcG9zID09PSBibG9ja0xlbiAtIDEpCiAgICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgICBzdGF0ZVtibG9ja0xlbiAtIDFdIF49IDEyODsKICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgfQogICAgICAgIHdyaXRlSW50byhvdXQpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzLCBmYWxzZSk7CiAgICAgICAgICBieXRlcyhvdXQpOwogICAgICAgICAgdGhpcy5maW5pc2goKTsKICAgICAgICAgIGNvbnN0IGJ1ZmZlck91dCA9IHRoaXMuc3RhdGU7CiAgICAgICAgICBjb25zdCB7IGJsb2NrTGVuIH0gPSB0aGlzOwogICAgICAgICAgZm9yIChsZXQgcG9zID0gMCwgbGVuID0gb3V0Lmxlbmd0aDsgcG9zIDwgbGVuOyApIHsKICAgICAgICAgICAgaWYgKHRoaXMucG9zT3V0ID49IGJsb2NrTGVuKQogICAgICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihibG9ja0xlbiAtIHRoaXMucG9zT3V0LCBsZW4gLSBwb3MpOwogICAgICAgICAgICBvdXQuc2V0KGJ1ZmZlck91dC5zdWJhcnJheSh0aGlzLnBvc091dCwgdGhpcy5wb3NPdXQgKyB0YWtlKSwgcG9zKTsKICAgICAgICAgICAgdGhpcy5wb3NPdXQgKz0gdGFrZTsKICAgICAgICAgICAgcG9zICs9IHRha2U7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gb3V0OwogICAgICAgIH0KICAgICAgICB4b2ZJbnRvKG91dCkgewogICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZVhPRikKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJYT0YgaXMgbm90IHBvc3NpYmxlIGZvciB0aGlzIGluc3RhbmNlIik7CiAgICAgICAgICByZXR1cm4gdGhpcy53cml0ZUludG8ob3V0KTsKICAgICAgICB9CiAgICAgICAgeG9mKGJ5dGVzMikgewogICAgICAgICAgbnVtYmVyKGJ5dGVzMik7CiAgICAgICAgICByZXR1cm4gdGhpcy54b2ZJbnRvKG5ldyBVaW50OEFycmF5KGJ5dGVzMikpOwogICAgICAgIH0KICAgICAgICBkaWdlc3RJbnRvKG91dCkgewogICAgICAgICAgb3V0cHV0KG91dCwgdGhpcyk7CiAgICAgICAgICBpZiAodGhpcy5maW5pc2hlZCkKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJkaWdlc3QoKSB3YXMgYWxyZWFkeSBjYWxsZWQiKTsKICAgICAgICAgIHRoaXMud3JpdGVJbnRvKG91dCk7CiAgICAgICAgICB0aGlzLmRlc3Ryb3koKTsKICAgICAgICAgIHJldHVybiBvdXQ7CiAgICAgICAgfQogICAgICAgIGRpZ2VzdCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmRpZ2VzdEludG8obmV3IFVpbnQ4QXJyYXkodGhpcy5vdXRwdXRMZW4pKTsKICAgICAgICB9CiAgICAgICAgZGVzdHJveSgpIHsKICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuc3RhdGUuZmlsbCgwKTsKICAgICAgICB9CiAgICAgICAgX2Nsb25lSW50byh0bykgewogICAgICAgICAgY29uc3QgeyBibG9ja0xlbiwgc3VmZml4LCBvdXRwdXRMZW4sIHJvdW5kcywgZW5hYmxlWE9GIH0gPSB0aGlzOwogICAgICAgICAgdG8gfHwgKHRvID0gbmV3IF9LZWNjYWsoYmxvY2tMZW4sIHN1ZmZpeCwgb3V0cHV0TGVuLCBlbmFibGVYT0YsIHJvdW5kcykpOwogICAgICAgICAgdG8uc3RhdGUzMi5zZXQodGhpcy5zdGF0ZTMyKTsKICAgICAgICAgIHRvLnBvcyA9IHRoaXMucG9zOwogICAgICAgICAgdG8ucG9zT3V0ID0gdGhpcy5wb3NPdXQ7CiAgICAgICAgICB0by5maW5pc2hlZCA9IHRoaXMuZmluaXNoZWQ7CiAgICAgICAgICB0by5yb3VuZHMgPSByb3VuZHM7CiAgICAgICAgICB0by5zdWZmaXggPSBzdWZmaXg7CiAgICAgICAgICB0by5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0by5lbmFibGVYT0YgPSBlbmFibGVYT0Y7CiAgICAgICAgICB0by5kZXN0cm95ZWQgPSB0aGlzLmRlc3Ryb3llZDsKICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGdlbiA9IChzdWZmaXgsIGJsb2NrTGVuLCBvdXRwdXRMZW4pID0+IHdyYXBDb25zdHJ1Y3RvcigoKSA9PiBuZXcgS2VjY2FrKGJsb2NrTGVuLCBzdWZmaXgsIG91dHB1dExlbikpOwogICAgICBzaGEzXzIyNCA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oNiwgMTQ0LCAyMjQgLyA4KTsKICAgICAgc2hhM18yNTYgPSAvKiBAX19QVVJFX18gKi8gZ2VuKDYsIDEzNiwgMjU2IC8gOCk7CiAgICAgIHNoYTNfMzg0ID0gLyogQF9fUFVSRV9fICovIGdlbig2LCAxMDQsIDM4NCAvIDgpOwogICAgICBzaGEzXzUxMiA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oNiwgNzIsIDUxMiAvIDgpOwogICAgICBrZWNjYWtfMjI0ID0gLyogQF9fUFVSRV9fICovIGdlbigxLCAxNDQsIDIyNCAvIDgpOwogICAgICBrZWNjYWtfMjU2ID0gLyogQF9fUFVSRV9fICovIGdlbigxLCAxMzYsIDI1NiAvIDgpOwogICAgICBrZWNjYWtfMzg0ID0gLyogQF9fUFVSRV9fICovIGdlbigxLCAxMDQsIDM4NCAvIDgpOwogICAgICBrZWNjYWtfNTEyID0gLyogQF9fUFVSRV9fICovIGdlbigxLCA3MiwgNTEyIC8gOCk7CiAgICAgIGdlblNoYWtlID0gKHN1ZmZpeCwgYmxvY2tMZW4sIG91dHB1dExlbikgPT4gd3JhcFhPRkNvbnN0cnVjdG9yV2l0aE9wdHMoKG9wdHMgPSB7fSkgPT4gbmV3IEtlY2NhayhibG9ja0xlbiwgc3VmZml4LCBvcHRzLmRrTGVuID09PSB2b2lkIDAgPyBvdXRwdXRMZW4gOiBvcHRzLmRrTGVuLCB0cnVlKSk7CiAgICAgIHNoYWtlMTI4ID0gLyogQF9fUFVSRV9fICovIGdlblNoYWtlKDMxLCAxNjgsIDEyOCAvIDgpOwogICAgICBzaGFrZTI1NiA9IC8qIEBfX1BVUkVfXyAqLyBnZW5TaGFrZSgzMSwgMTM2LCAyNTYgLyA4KTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL2tlY2NhazI1Ni5qcwogIGZ1bmN0aW9uIGtlY2NhazI1Nih2YWx1ZSwgdG9fKSB7CiAgICBjb25zdCB0byA9IHRvXyB8fCAiaGV4IjsKICAgIGNvbnN0IGJ5dGVzMiA9IGtlY2Nha18yNTYoaXNIZXgodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KSA/IHRvQnl0ZXModmFsdWUpIDogdmFsdWUpOwogICAgaWYgKHRvID09PSAiYnl0ZXMiKQogICAgICByZXR1cm4gYnl0ZXMyOwogICAgcmV0dXJuIHRvSGV4KGJ5dGVzMik7CiAgfQogIHZhciBpbml0X2tlY2NhazI1NiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gva2VjY2FrMjU2LmpzIigpIHsKICAgICAgaW5pdF9zaGEzKCk7CiAgICAgIGluaXRfaXNIZXgoKTsKICAgICAgaW5pdF90b0J5dGVzKCk7CiAgICAgIGluaXRfdG9IZXgoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL2hhc2hTaWduYXR1cmUuanMKICBmdW5jdGlvbiBoYXNoU2lnbmF0dXJlKHNpZykgewogICAgcmV0dXJuIGhhc2gyKHNpZyk7CiAgfQogIHZhciBoYXNoMjsKICB2YXIgaW5pdF9oYXNoU2lnbmF0dXJlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9oYXNoU2lnbmF0dXJlLmpzIigpIHsKICAgICAgaW5pdF90b0J5dGVzKCk7CiAgICAgIGluaXRfa2VjY2FrMjU2KCk7CiAgICAgIGhhc2gyID0gKHZhbHVlKSA9PiBrZWNjYWsyNTYodG9CeXRlcyh2YWx1ZSkpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvbm9ybWFsaXplU2lnbmF0dXJlLmpzCiAgZnVuY3Rpb24gbm9ybWFsaXplU2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgbGV0IGFjdGl2ZSA9IHRydWU7CiAgICBsZXQgY3VycmVudCA9ICIiOwogICAgbGV0IGxldmVsID0gMDsKICAgIGxldCByZXN1bHQgPSAiIjsKICAgIGxldCB2YWxpZCA9IGZhbHNlOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaWduYXR1cmUubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgY2hhciA9IHNpZ25hdHVyZVtpXTsKICAgICAgaWYgKFsiKCIsICIpIiwgIiwiXS5pbmNsdWRlcyhjaGFyKSkKICAgICAgICBhY3RpdmUgPSB0cnVlOwogICAgICBpZiAoY2hhciA9PT0gIigiKQogICAgICAgIGxldmVsKys7CiAgICAgIGlmIChjaGFyID09PSAiKSIpCiAgICAgICAgbGV2ZWwtLTsKICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgY29udGludWU7CiAgICAgIGlmIChsZXZlbCA9PT0gMCkgewogICAgICAgIGlmIChjaGFyID09PSAiICIgJiYgWyJldmVudCIsICJmdW5jdGlvbiIsICIiXS5pbmNsdWRlcyhyZXN1bHQpKQogICAgICAgICAgcmVzdWx0ID0gIiI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICByZXN1bHQgKz0gY2hhcjsKICAgICAgICAgIGlmIChjaGFyID09PSAiKSIpIHsKICAgICAgICAgICAgdmFsaWQgPSB0cnVlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGNoYXIgPT09ICIgIikgewogICAgICAgIGlmIChzaWduYXR1cmVbaSAtIDFdICE9PSAiLCIgJiYgY3VycmVudCAhPT0gIiwiICYmIGN1cnJlbnQgIT09ICIsKCIpIHsKICAgICAgICAgIGN1cnJlbnQgPSAiIjsKICAgICAgICAgIGFjdGl2ZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICByZXN1bHQgKz0gY2hhcjsKICAgICAgY3VycmVudCArPSBjaGFyOwogICAgfQogICAgaWYgKCF2YWxpZCkKICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoIlVuYWJsZSB0byBub3JtYWxpemUgc2lnbmF0dXJlLiIpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdmFyIGluaXRfbm9ybWFsaXplU2lnbmF0dXJlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9ub3JtYWxpemVTaWduYXR1cmUuanMiKCkgewogICAgICBpbml0X2Jhc2UoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvU2lnbmF0dXJlLmpzCiAgdmFyIHRvU2lnbmF0dXJlOwogIHZhciBpbml0X3RvU2lnbmF0dXJlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b1NpZ25hdHVyZS5qcyIoKSB7CiAgICAgIGluaXRfZXhwb3J0cygpOwogICAgICBpbml0X25vcm1hbGl6ZVNpZ25hdHVyZSgpOwogICAgICB0b1NpZ25hdHVyZSA9IChkZWYpID0+IHsKICAgICAgICBjb25zdCBkZWZfID0gKCgpID0+IHsKICAgICAgICAgIGlmICh0eXBlb2YgZGVmID09PSAic3RyaW5nIikKICAgICAgICAgICAgcmV0dXJuIGRlZjsKICAgICAgICAgIHJldHVybiBmb3JtYXRBYmlJdGVtKGRlZik7CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gbm9ybWFsaXplU2lnbmF0dXJlKGRlZl8pOwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9TaWduYXR1cmVIYXNoLmpzCiAgZnVuY3Rpb24gdG9TaWduYXR1cmVIYXNoKGZuKSB7CiAgICByZXR1cm4gaGFzaFNpZ25hdHVyZSh0b1NpZ25hdHVyZShmbikpOwogIH0KICB2YXIgaW5pdF90b1NpZ25hdHVyZUhhc2ggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvU2lnbmF0dXJlSGFzaC5qcyIoKSB7CiAgICAgIGluaXRfaGFzaFNpZ25hdHVyZSgpOwogICAgICBpbml0X3RvU2lnbmF0dXJlKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b0V2ZW50U2VsZWN0b3IuanMKICB2YXIgdG9FdmVudFNlbGVjdG9yOwogIHZhciBpbml0X3RvRXZlbnRTZWxlY3RvciA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9FdmVudFNlbGVjdG9yLmpzIigpIHsKICAgICAgaW5pdF90b1NpZ25hdHVyZUhhc2goKTsKICAgICAgdG9FdmVudFNlbGVjdG9yID0gdG9TaWduYXR1cmVIYXNoOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hZGRyZXNzLmpzCiAgdmFyIEludmFsaWRBZGRyZXNzRXJyb3I7CiAgdmFyIGluaXRfYWRkcmVzcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hZGRyZXNzLmpzIigpIHsKICAgICAgaW5pdF9iYXNlKCk7CiAgICAgIEludmFsaWRBZGRyZXNzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYWRkcmVzcyB9KSB7CiAgICAgICAgICBzdXBlcihgQWRkcmVzcyAiJHthZGRyZXNzfSIgaXMgaW52YWxpZC5gLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgICItIEFkZHJlc3MgbXVzdCBiZSBhIGhleCB2YWx1ZSBvZiAyMCBieXRlcyAoNDAgaGV4IGNoYXJhY3RlcnMpLiIsCiAgICAgICAgICAgICAgIi0gQWRkcmVzcyBtdXN0IG1hdGNoIGl0cyBjaGVja3N1bSBjb3VudGVycGFydC4iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkQWRkcmVzc0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2xydS5qcwogIHZhciBMcnVNYXA7CiAgdmFyIGluaXRfbHJ1ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvbHJ1LmpzIigpIHsKICAgICAgTHJ1TWFwID0gY2xhc3MgZXh0ZW5kcyBNYXAgewogICAgICAgIGNvbnN0cnVjdG9yKHNpemUzKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJtYXhTaXplIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMubWF4U2l6ZSA9IHNpemUzOwogICAgICAgIH0KICAgICAgICBzZXQoa2V5LCB2YWx1ZSkgewogICAgICAgICAgc3VwZXIuc2V0KGtleSwgdmFsdWUpOwogICAgICAgICAgaWYgKHRoaXMubWF4U2l6ZSAmJiB0aGlzLnNpemUgPiB0aGlzLm1heFNpemUpCiAgICAgICAgICAgIHRoaXMuZGVsZXRlKHRoaXMua2V5cygpLm5leHQoKS52YWx1ZSk7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9nZXRBZGRyZXNzLmpzCiAgZnVuY3Rpb24gY2hlY2tzdW1BZGRyZXNzKGFkZHJlc3NfLCBjaGFpbklkKSB7CiAgICBpZiAoY2hlY2tzdW1BZGRyZXNzQ2FjaGUuaGFzKGAke2FkZHJlc3NffS4ke2NoYWluSWR9YCkpCiAgICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3NDYWNoZS5nZXQoYCR7YWRkcmVzc199LiR7Y2hhaW5JZH1gKTsKICAgIGNvbnN0IGhleEFkZHJlc3MgPSBjaGFpbklkID8gYCR7Y2hhaW5JZH0ke2FkZHJlc3NfLnRvTG93ZXJDYXNlKCl9YCA6IGFkZHJlc3NfLnN1YnN0cmluZygyKS50b0xvd2VyQ2FzZSgpOwogICAgY29uc3QgaGFzaDMgPSBrZWNjYWsyNTYoc3RyaW5nVG9CeXRlcyhoZXhBZGRyZXNzKSwgImJ5dGVzIik7CiAgICBjb25zdCBhZGRyZXNzID0gKGNoYWluSWQgPyBoZXhBZGRyZXNzLnN1YnN0cmluZyhgJHtjaGFpbklkfTB4YC5sZW5ndGgpIDogaGV4QWRkcmVzcykuc3BsaXQoIiIpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MDsgaSArPSAyKSB7CiAgICAgIGlmIChoYXNoM1tpID4+IDFdID4+IDQgPj0gOCAmJiBhZGRyZXNzW2ldKSB7CiAgICAgICAgYWRkcmVzc1tpXSA9IGFkZHJlc3NbaV0udG9VcHBlckNhc2UoKTsKICAgICAgfQogICAgICBpZiAoKGhhc2gzW2kgPj4gMV0gJiAxNSkgPj0gOCAmJiBhZGRyZXNzW2kgKyAxXSkgewogICAgICAgIGFkZHJlc3NbaSArIDFdID0gYWRkcmVzc1tpICsgMV0udG9VcHBlckNhc2UoKTsKICAgICAgfQogICAgfQogICAgY29uc3QgcmVzdWx0ID0gYDB4JHthZGRyZXNzLmpvaW4oIiIpfWA7CiAgICBjaGVja3N1bUFkZHJlc3NDYWNoZS5zZXQoYCR7YWRkcmVzc199LiR7Y2hhaW5JZH1gLCByZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gZ2V0QWRkcmVzcyhhZGRyZXNzLCBjaGFpbklkKSB7CiAgICBpZiAoIWlzQWRkcmVzcyhhZGRyZXNzLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzcyB9KTsKICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3MoYWRkcmVzcywgY2hhaW5JZCk7CiAgfQogIHZhciBjaGVja3N1bUFkZHJlc3NDYWNoZTsKICB2YXIgaW5pdF9nZXRBZGRyZXNzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9nZXRBZGRyZXNzLmpzIigpIHsKICAgICAgaW5pdF9hZGRyZXNzKCk7CiAgICAgIGluaXRfdG9CeXRlcygpOwogICAgICBpbml0X2tlY2NhazI1NigpOwogICAgICBpbml0X2xydSgpOwogICAgICBpbml0X2lzQWRkcmVzcygpOwogICAgICBjaGVja3N1bUFkZHJlc3NDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTHJ1TWFwKDgxOTIpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FkZHJlc3MvaXNBZGRyZXNzLmpzCiAgZnVuY3Rpb24gaXNBZGRyZXNzKGFkZHJlc3MsIG9wdGlvbnMpIHsKICAgIGNvbnN0IHsgc3RyaWN0ID0gdHJ1ZSB9ID0gb3B0aW9ucyA/PyB7fTsKICAgIGNvbnN0IGNhY2hlS2V5MiA9IGAke2FkZHJlc3N9LiR7c3RyaWN0fWA7CiAgICBpZiAoaXNBZGRyZXNzQ2FjaGUuaGFzKGNhY2hlS2V5MikpCiAgICAgIHJldHVybiBpc0FkZHJlc3NDYWNoZS5nZXQoY2FjaGVLZXkyKTsKICAgIGNvbnN0IHJlc3VsdCA9ICgoKSA9PiB7CiAgICAgIGlmICghYWRkcmVzc1JlZ2V4LnRlc3QoYWRkcmVzcykpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoYWRkcmVzcy50b0xvd2VyQ2FzZSgpID09PSBhZGRyZXNzKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoc3RyaWN0KQogICAgICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3MoYWRkcmVzcykgPT09IGFkZHJlc3M7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSkoKTsKICAgIGlzQWRkcmVzc0NhY2hlLnNldChjYWNoZUtleTIsIHJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2YXIgYWRkcmVzc1JlZ2V4LCBpc0FkZHJlc3NDYWNoZTsKICB2YXIgaW5pdF9pc0FkZHJlc3MgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hZGRyZXNzL2lzQWRkcmVzcy5qcyIoKSB7CiAgICAgIGluaXRfbHJ1KCk7CiAgICAgIGluaXRfZ2V0QWRkcmVzcygpOwogICAgICBhZGRyZXNzUmVnZXggPSAvXjB4W2EtZkEtRjAtOV17NDB9JC87CiAgICAgIGlzQWRkcmVzc0NhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBMcnVNYXAoODE5Mik7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9jb25jYXQuanMKICBmdW5jdGlvbiBjb25jYXQodmFsdWVzKSB7CiAgICBpZiAodHlwZW9mIHZhbHVlc1swXSA9PT0gInN0cmluZyIpCiAgICAgIHJldHVybiBjb25jYXRIZXgodmFsdWVzKTsKICAgIHJldHVybiBjb25jYXRCeXRlczIodmFsdWVzKTsKICB9CiAgZnVuY3Rpb24gY29uY2F0Qnl0ZXMyKHZhbHVlcykgewogICAgbGV0IGxlbmd0aCA9IDA7CiAgICBmb3IgKGNvbnN0IGFyciBvZiB2YWx1ZXMpIHsKICAgICAgbGVuZ3RoICs9IGFyci5sZW5ndGg7CiAgICB9CiAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpOwogICAgbGV0IG9mZnNldCA9IDA7CiAgICBmb3IgKGNvbnN0IGFyciBvZiB2YWx1ZXMpIHsKICAgICAgcmVzdWx0LnNldChhcnIsIG9mZnNldCk7CiAgICAgIG9mZnNldCArPSBhcnIubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gY29uY2F0SGV4KHZhbHVlcykgewogICAgcmV0dXJuIGAweCR7dmFsdWVzLnJlZHVjZSgoYWNjLCB4KSA9PiBhY2MgKyB4LnJlcGxhY2UoIjB4IiwgIiIpLCAiIil9YDsKICB9CiAgdmFyIGluaXRfY29uY2F0ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9jb25jYXQuanMiKCkgewogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvc2xpY2UuanMKICBmdW5jdGlvbiBzbGljZSh2YWx1ZSwgc3RhcnQsIGVuZCwgeyBzdHJpY3QgfSA9IHt9KSB7CiAgICBpZiAoaXNIZXgodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgcmV0dXJuIHNsaWNlSGV4KHZhbHVlLCBzdGFydCwgZW5kLCB7CiAgICAgICAgc3RyaWN0CiAgICAgIH0pOwogICAgcmV0dXJuIHNsaWNlQnl0ZXModmFsdWUsIHN0YXJ0LCBlbmQsIHsKICAgICAgc3RyaWN0CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gYXNzZXJ0U3RhcnRPZmZzZXQodmFsdWUsIHN0YXJ0KSB7CiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAibnVtYmVyIiAmJiBzdGFydCA+IDAgJiYgc3RhcnQgPiBzaXplKHZhbHVlKSAtIDEpCiAgICAgIHRocm93IG5ldyBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IoewogICAgICAgIG9mZnNldDogc3RhcnQsCiAgICAgICAgcG9zaXRpb246ICJzdGFydCIsCiAgICAgICAgc2l6ZTogc2l6ZSh2YWx1ZSkKICAgICAgfSk7CiAgfQogIGZ1bmN0aW9uIGFzc2VydEVuZE9mZnNldCh2YWx1ZSwgc3RhcnQsIGVuZCkgewogICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gIm51bWJlciIgJiYgdHlwZW9mIGVuZCA9PT0gIm51bWJlciIgJiYgc2l6ZSh2YWx1ZSkgIT09IGVuZCAtIHN0YXJ0KSB7CiAgICAgIHRocm93IG5ldyBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IoewogICAgICAgIG9mZnNldDogZW5kLAogICAgICAgIHBvc2l0aW9uOiAiZW5kIiwKICAgICAgICBzaXplOiBzaXplKHZhbHVlKQogICAgICB9KTsKICAgIH0KICB9CiAgZnVuY3Rpb24gc2xpY2VCeXRlcyh2YWx1ZV8sIHN0YXJ0LCBlbmQsIHsgc3RyaWN0IH0gPSB7fSkgewogICAgYXNzZXJ0U3RhcnRPZmZzZXQodmFsdWVfLCBzdGFydCk7CiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlXy5zbGljZShzdGFydCwgZW5kKTsKICAgIGlmIChzdHJpY3QpCiAgICAgIGFzc2VydEVuZE9mZnNldCh2YWx1ZSwgc3RhcnQsIGVuZCk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQogIGZ1bmN0aW9uIHNsaWNlSGV4KHZhbHVlXywgc3RhcnQsIGVuZCwgeyBzdHJpY3QgfSA9IHt9KSB7CiAgICBhc3NlcnRTdGFydE9mZnNldCh2YWx1ZV8sIHN0YXJ0KTsKICAgIGNvbnN0IHZhbHVlID0gYDB4JHt2YWx1ZV8ucmVwbGFjZSgiMHgiLCAiIikuc2xpY2UoKHN0YXJ0ID8/IDApICogMiwgKGVuZCA/PyB2YWx1ZV8ubGVuZ3RoKSAqIDIpfWA7CiAgICBpZiAoc3RyaWN0KQogICAgICBhc3NlcnRFbmRPZmZzZXQodmFsdWUsIHN0YXJ0LCBlbmQpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KICB2YXIgaW5pdF9zbGljZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvc2xpY2UuanMiKCkgewogICAgICBpbml0X2RhdGEoKTsKICAgICAgaW5pdF9pc0hleCgpOwogICAgICBpbml0X3NpemUoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlQWJpUGFyYW1ldGVycy5qcwogIGZ1bmN0aW9uIGVuY29kZUFiaVBhcmFtZXRlcnMocGFyYW1zLCB2YWx1ZXMpIHsKICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSB2YWx1ZXMubGVuZ3RoKQogICAgICB0aHJvdyBuZXcgQWJpRW5jb2RpbmdMZW5ndGhNaXNtYXRjaEVycm9yKHsKICAgICAgICBleHBlY3RlZExlbmd0aDogcGFyYW1zLmxlbmd0aCwKICAgICAgICBnaXZlbkxlbmd0aDogdmFsdWVzLmxlbmd0aAogICAgICB9KTsKICAgIGNvbnN0IHByZXBhcmVkUGFyYW1zID0gcHJlcGFyZVBhcmFtcyh7CiAgICAgIHBhcmFtcywKICAgICAgdmFsdWVzCiAgICB9KTsKICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVQYXJhbXMocHJlcGFyZWRQYXJhbXMpOwogICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gIjB4IjsKICAgIHJldHVybiBkYXRhOwogIH0KICBmdW5jdGlvbiBwcmVwYXJlUGFyYW1zKHsgcGFyYW1zLCB2YWx1ZXMgfSkgewogICAgY29uc3QgcHJlcGFyZWRQYXJhbXMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIHByZXBhcmVkUGFyYW1zLnB1c2gocHJlcGFyZVBhcmFtKHsgcGFyYW06IHBhcmFtc1tpXSwgdmFsdWU6IHZhbHVlc1tpXSB9KSk7CiAgICB9CiAgICByZXR1cm4gcHJlcGFyZWRQYXJhbXM7CiAgfQogIGZ1bmN0aW9uIHByZXBhcmVQYXJhbSh7IHBhcmFtLCB2YWx1ZSB9KSB7CiAgICBjb25zdCBhcnJheUNvbXBvbmVudHMgPSBnZXRBcnJheUNvbXBvbmVudHMocGFyYW0udHlwZSk7CiAgICBpZiAoYXJyYXlDb21wb25lbnRzKSB7CiAgICAgIGNvbnN0IFtsZW5ndGgsIHR5cGVdID0gYXJyYXlDb21wb25lbnRzOwogICAgICByZXR1cm4gZW5jb2RlQXJyYXkodmFsdWUsIHsgbGVuZ3RoLCBwYXJhbTogeyAuLi5wYXJhbSwgdHlwZSB9IH0pOwogICAgfQogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJ0dXBsZSIpIHsKICAgICAgcmV0dXJuIGVuY29kZVR1cGxlKHZhbHVlLCB7CiAgICAgICAgcGFyYW0KICAgICAgfSk7CiAgICB9CiAgICBpZiAocGFyYW0udHlwZSA9PT0gImFkZHJlc3MiKSB7CiAgICAgIHJldHVybiBlbmNvZGVBZGRyZXNzKHZhbHVlKTsKICAgIH0KICAgIGlmIChwYXJhbS50eXBlID09PSAiYm9vbCIpIHsKICAgICAgcmV0dXJuIGVuY29kZUJvb2wodmFsdWUpOwogICAgfQogICAgaWYgKHBhcmFtLnR5cGUuc3RhcnRzV2l0aCgidWludCIpIHx8IHBhcmFtLnR5cGUuc3RhcnRzV2l0aCgiaW50IikpIHsKICAgICAgY29uc3Qgc2lnbmVkID0gcGFyYW0udHlwZS5zdGFydHNXaXRoKCJpbnQiKTsKICAgICAgcmV0dXJuIGVuY29kZU51bWJlcih2YWx1ZSwgeyBzaWduZWQgfSk7CiAgICB9CiAgICBpZiAocGFyYW0udHlwZS5zdGFydHNXaXRoKCJieXRlcyIpKSB7CiAgICAgIHJldHVybiBlbmNvZGVCeXRlcyh2YWx1ZSwgeyBwYXJhbSB9KTsKICAgIH0KICAgIGlmIChwYXJhbS50eXBlID09PSAic3RyaW5nIikgewogICAgICByZXR1cm4gZW5jb2RlU3RyaW5nKHZhbHVlKTsKICAgIH0KICAgIHRocm93IG5ldyBJbnZhbGlkQWJpRW5jb2RpbmdUeXBlRXJyb3IocGFyYW0udHlwZSwgewogICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L2VuY29kZUFiaVBhcmFtZXRlcnMiCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlUGFyYW1zKHByZXBhcmVkUGFyYW1zKSB7CiAgICBsZXQgc3RhdGljU2l6ZSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXBhcmVkUGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IHsgZHluYW1pYywgZW5jb2RlZCB9ID0gcHJlcGFyZWRQYXJhbXNbaV07CiAgICAgIGlmIChkeW5hbWljKQogICAgICAgIHN0YXRpY1NpemUgKz0gMzI7CiAgICAgIGVsc2UKICAgICAgICBzdGF0aWNTaXplICs9IHNpemUoZW5jb2RlZCk7CiAgICB9CiAgICBjb25zdCBzdGF0aWNQYXJhbXMgPSBbXTsKICAgIGNvbnN0IGR5bmFtaWNQYXJhbXMgPSBbXTsKICAgIGxldCBkeW5hbWljU2l6ZSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXBhcmVkUGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IHsgZHluYW1pYywgZW5jb2RlZCB9ID0gcHJlcGFyZWRQYXJhbXNbaV07CiAgICAgIGlmIChkeW5hbWljKSB7CiAgICAgICAgc3RhdGljUGFyYW1zLnB1c2gobnVtYmVyVG9IZXgoc3RhdGljU2l6ZSArIGR5bmFtaWNTaXplLCB7IHNpemU6IDMyIH0pKTsKICAgICAgICBkeW5hbWljUGFyYW1zLnB1c2goZW5jb2RlZCk7CiAgICAgICAgZHluYW1pY1NpemUgKz0gc2l6ZShlbmNvZGVkKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGF0aWNQYXJhbXMucHVzaChlbmNvZGVkKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvbmNhdChbLi4uc3RhdGljUGFyYW1zLCAuLi5keW5hbWljUGFyYW1zXSk7CiAgfQogIGZ1bmN0aW9uIGVuY29kZUFkZHJlc3ModmFsdWUpIHsKICAgIGlmICghaXNBZGRyZXNzKHZhbHVlKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB2YWx1ZSB9KTsKICAgIHJldHVybiB7IGR5bmFtaWM6IGZhbHNlLCBlbmNvZGVkOiBwYWRIZXgodmFsdWUudG9Mb3dlckNhc2UoKSkgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlQXJyYXkodmFsdWUsIHsgbGVuZ3RoLCBwYXJhbSB9KSB7CiAgICBjb25zdCBkeW5hbWljID0gbGVuZ3RoID09PSBudWxsOwogICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBcnJheUVycm9yKHZhbHVlKTsKICAgIGlmICghZHluYW1pYyAmJiB2YWx1ZS5sZW5ndGggIT09IGxlbmd0aCkKICAgICAgdGhyb3cgbmV3IEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yKHsKICAgICAgICBleHBlY3RlZExlbmd0aDogbGVuZ3RoLAogICAgICAgIGdpdmVuTGVuZ3RoOiB2YWx1ZS5sZW5ndGgsCiAgICAgICAgdHlwZTogYCR7cGFyYW0udHlwZX1bJHtsZW5ndGh9XWAKICAgICAgfSk7CiAgICBsZXQgZHluYW1pY0NoaWxkID0gZmFsc2U7CiAgICBjb25zdCBwcmVwYXJlZFBhcmFtcyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBwcmVwYXJlZFBhcmFtID0gcHJlcGFyZVBhcmFtKHsgcGFyYW0sIHZhbHVlOiB2YWx1ZVtpXSB9KTsKICAgICAgaWYgKHByZXBhcmVkUGFyYW0uZHluYW1pYykKICAgICAgICBkeW5hbWljQ2hpbGQgPSB0cnVlOwogICAgICBwcmVwYXJlZFBhcmFtcy5wdXNoKHByZXBhcmVkUGFyYW0pOwogICAgfQogICAgaWYgKGR5bmFtaWMgfHwgZHluYW1pY0NoaWxkKSB7CiAgICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVQYXJhbXMocHJlcGFyZWRQYXJhbXMpOwogICAgICBpZiAoZHluYW1pYykgewogICAgICAgIGNvbnN0IGxlbmd0aDIgPSBudW1iZXJUb0hleChwcmVwYXJlZFBhcmFtcy5sZW5ndGgsIHsgc2l6ZTogMzIgfSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGR5bmFtaWM6IHRydWUsCiAgICAgICAgICBlbmNvZGVkOiBwcmVwYXJlZFBhcmFtcy5sZW5ndGggPiAwID8gY29uY2F0KFtsZW5ndGgyLCBkYXRhXSkgOiBsZW5ndGgyCiAgICAgICAgfTsKICAgICAgfQogICAgICBpZiAoZHluYW1pY0NoaWxkKQogICAgICAgIHJldHVybiB7IGR5bmFtaWM6IHRydWUsIGVuY29kZWQ6IGRhdGEgfTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIGR5bmFtaWM6IGZhbHNlLAogICAgICBlbmNvZGVkOiBjb25jYXQocHJlcGFyZWRQYXJhbXMubWFwKCh7IGVuY29kZWQgfSkgPT4gZW5jb2RlZCkpCiAgICB9OwogIH0KICBmdW5jdGlvbiBlbmNvZGVCeXRlcyh2YWx1ZSwgeyBwYXJhbSB9KSB7CiAgICBjb25zdCBbLCBwYXJhbVNpemVdID0gcGFyYW0udHlwZS5zcGxpdCgiYnl0ZXMiKTsKICAgIGNvbnN0IGJ5dGVzU2l6ZSA9IHNpemUodmFsdWUpOwogICAgaWYgKCFwYXJhbVNpemUpIHsKICAgICAgbGV0IHZhbHVlXyA9IHZhbHVlOwogICAgICBpZiAoYnl0ZXNTaXplICUgMzIgIT09IDApCiAgICAgICAgdmFsdWVfID0gcGFkSGV4KHZhbHVlXywgewogICAgICAgICAgZGlyOiAicmlnaHQiLAogICAgICAgICAgc2l6ZTogTWF0aC5jZWlsKCh2YWx1ZS5sZW5ndGggLSAyKSAvIDIgLyAzMikgKiAzMgogICAgICAgIH0pOwogICAgICByZXR1cm4gewogICAgICAgIGR5bmFtaWM6IHRydWUsCiAgICAgICAgZW5jb2RlZDogY29uY2F0KFtwYWRIZXgobnVtYmVyVG9IZXgoYnl0ZXNTaXplLCB7IHNpemU6IDMyIH0pKSwgdmFsdWVfXSkKICAgICAgfTsKICAgIH0KICAgIGlmIChieXRlc1NpemUgIT09IE51bWJlci5wYXJzZUludChwYXJhbVNpemUpKQogICAgICB0aHJvdyBuZXcgQWJpRW5jb2RpbmdCeXRlc1NpemVNaXNtYXRjaEVycm9yKHsKICAgICAgICBleHBlY3RlZFNpemU6IE51bWJlci5wYXJzZUludChwYXJhbVNpemUpLAogICAgICAgIHZhbHVlCiAgICAgIH0pOwogICAgcmV0dXJuIHsgZHluYW1pYzogZmFsc2UsIGVuY29kZWQ6IHBhZEhleCh2YWx1ZSwgeyBkaXI6ICJyaWdodCIgfSkgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlQm9vbCh2YWx1ZSkgewogICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gImJvb2xlYW4iKQogICAgICB0aHJvdyBuZXcgQmFzZUVycm9yMihgSW52YWxpZCBib29sZWFuIHZhbHVlOiAiJHt2YWx1ZX0iICh0eXBlOiAke3R5cGVvZiB2YWx1ZX0pLiBFeHBlY3RlZDogXGB0cnVlXGAgb3IgXGBmYWxzZVxgLmApOwogICAgcmV0dXJuIHsgZHluYW1pYzogZmFsc2UsIGVuY29kZWQ6IHBhZEhleChib29sVG9IZXgodmFsdWUpKSB9OwogIH0KICBmdW5jdGlvbiBlbmNvZGVOdW1iZXIodmFsdWUsIHsgc2lnbmVkIH0pIHsKICAgIHJldHVybiB7CiAgICAgIGR5bmFtaWM6IGZhbHNlLAogICAgICBlbmNvZGVkOiBudW1iZXJUb0hleCh2YWx1ZSwgewogICAgICAgIHNpemU6IDMyLAogICAgICAgIHNpZ25lZAogICAgICB9KQogICAgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlU3RyaW5nKHZhbHVlKSB7CiAgICBjb25zdCBoZXhWYWx1ZSA9IHN0cmluZ1RvSGV4KHZhbHVlKTsKICAgIGNvbnN0IHBhcnRzTGVuZ3RoID0gTWF0aC5jZWlsKHNpemUoaGV4VmFsdWUpIC8gMzIpOwogICAgY29uc3QgcGFydHMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHNMZW5ndGg7IGkrKykgewogICAgICBwYXJ0cy5wdXNoKHBhZEhleChzbGljZShoZXhWYWx1ZSwgaSAqIDMyLCAoaSArIDEpICogMzIpLCB7CiAgICAgICAgZGlyOiAicmlnaHQiCiAgICAgIH0pKTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIGR5bmFtaWM6IHRydWUsCiAgICAgIGVuY29kZWQ6IGNvbmNhdChbCiAgICAgICAgcGFkSGV4KG51bWJlclRvSGV4KHNpemUoaGV4VmFsdWUpLCB7IHNpemU6IDMyIH0pKSwKICAgICAgICAuLi5wYXJ0cwogICAgICBdKQogICAgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlVHVwbGUodmFsdWUsIHsgcGFyYW0gfSkgewogICAgbGV0IGR5bmFtaWMgPSBmYWxzZTsKICAgIGNvbnN0IHByZXBhcmVkUGFyYW1zID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtLmNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgcGFyYW1fID0gcGFyYW0uY29tcG9uZW50c1tpXTsKICAgICAgY29uc3QgaW5kZXgyID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBpIDogcGFyYW1fLm5hbWU7CiAgICAgIGNvbnN0IHByZXBhcmVkUGFyYW0gPSBwcmVwYXJlUGFyYW0oewogICAgICAgIHBhcmFtOiBwYXJhbV8sCiAgICAgICAgdmFsdWU6IHZhbHVlW2luZGV4Ml0KICAgICAgfSk7CiAgICAgIHByZXBhcmVkUGFyYW1zLnB1c2gocHJlcGFyZWRQYXJhbSk7CiAgICAgIGlmIChwcmVwYXJlZFBhcmFtLmR5bmFtaWMpCiAgICAgICAgZHluYW1pYyA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gewogICAgICBkeW5hbWljLAogICAgICBlbmNvZGVkOiBkeW5hbWljID8gZW5jb2RlUGFyYW1zKHByZXBhcmVkUGFyYW1zKSA6IGNvbmNhdChwcmVwYXJlZFBhcmFtcy5tYXAoKHsgZW5jb2RlZCB9KSA9PiBlbmNvZGVkKSkKICAgIH07CiAgfQogIGZ1bmN0aW9uIGdldEFycmF5Q29tcG9uZW50cyh0eXBlKSB7CiAgICBjb25zdCBtYXRjaGVzID0gdHlwZS5tYXRjaCgvXiguKilcWyhcZCspP1xdJC8pOwogICAgcmV0dXJuIG1hdGNoZXMgPyAoCiAgICAgIC8vIFJldHVybiBgbnVsbGAgaWYgdGhlIGFycmF5IGlzIGR5bmFtaWMuCiAgICAgIFttYXRjaGVzWzJdID8gTnVtYmVyKG1hdGNoZXNbMl0pIDogbnVsbCwgbWF0Y2hlc1sxXV0KICAgICkgOiB2b2lkIDA7CiAgfQogIHZhciBpbml0X2VuY29kZUFiaVBhcmFtZXRlcnMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlQWJpUGFyYW1ldGVycy5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfYWRkcmVzcygpOwogICAgICBpbml0X2Jhc2UoKTsKICAgICAgaW5pdF9pc0FkZHJlc3MoKTsKICAgICAgaW5pdF9jb25jYXQoKTsKICAgICAgaW5pdF9wYWQoKTsKICAgICAgaW5pdF9zaXplKCk7CiAgICAgIGluaXRfc2xpY2UoKTsKICAgICAgaW5pdF90b0hleCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9GdW5jdGlvblNlbGVjdG9yLmpzCiAgdmFyIHRvRnVuY3Rpb25TZWxlY3RvcjsKICB2YXIgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvRnVuY3Rpb25TZWxlY3Rvci5qcyIoKSB7CiAgICAgIGluaXRfc2xpY2UoKTsKICAgICAgaW5pdF90b1NpZ25hdHVyZUhhc2goKTsKICAgICAgdG9GdW5jdGlvblNlbGVjdG9yID0gKGZuKSA9PiBzbGljZSh0b1NpZ25hdHVyZUhhc2goZm4pLCAwLCA0KTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZ2V0QWJpSXRlbS5qcwogIGZ1bmN0aW9uIGdldEFiaUl0ZW0ocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFyZ3MgPSBbXSwgbmFtZSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGlzU2VsZWN0b3IgPSBpc0hleChuYW1lLCB7IHN0cmljdDogZmFsc2UgfSk7CiAgICBjb25zdCBhYmlJdGVtcyA9IGFiaTIuZmlsdGVyKChhYmlJdGVtKSA9PiB7CiAgICAgIGlmIChpc1NlbGVjdG9yKSB7CiAgICAgICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImZ1bmN0aW9uIikKICAgICAgICAgIHJldHVybiB0b0Z1bmN0aW9uU2VsZWN0b3IoYWJpSXRlbSkgPT09IG5hbWU7CiAgICAgICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImV2ZW50IikKICAgICAgICAgIHJldHVybiB0b0V2ZW50U2VsZWN0b3IoYWJpSXRlbSkgPT09IG5hbWU7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiAibmFtZSIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLm5hbWUgPT09IG5hbWU7CiAgICB9KTsKICAgIGlmIChhYmlJdGVtcy5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiB2b2lkIDA7CiAgICBpZiAoYWJpSXRlbXMubGVuZ3RoID09PSAxKQogICAgICByZXR1cm4gYWJpSXRlbXNbMF07CiAgICBsZXQgbWF0Y2hlZEFiaUl0ZW0gPSB2b2lkIDA7CiAgICBmb3IgKGNvbnN0IGFiaUl0ZW0gb2YgYWJpSXRlbXMpIHsKICAgICAgaWYgKCEoImlucHV0cyIgaW4gYWJpSXRlbSkpCiAgICAgICAgY29udGludWU7CiAgICAgIGlmICghYXJncyB8fCBhcmdzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIGlmICghYWJpSXRlbS5pbnB1dHMgfHwgYWJpSXRlbS5pbnB1dHMubGVuZ3RoID09PSAwKQogICAgICAgICAgcmV0dXJuIGFiaUl0ZW07CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKCFhYmlJdGVtLmlucHV0cykKICAgICAgICBjb250aW51ZTsKICAgICAgaWYgKGFiaUl0ZW0uaW5wdXRzLmxlbmd0aCA9PT0gMCkKICAgICAgICBjb250aW51ZTsKICAgICAgaWYgKGFiaUl0ZW0uaW5wdXRzLmxlbmd0aCAhPT0gYXJncy5sZW5ndGgpCiAgICAgICAgY29udGludWU7CiAgICAgIGNvbnN0IG1hdGNoZWQgPSBhcmdzLmV2ZXJ5KChhcmcsIGluZGV4MikgPT4gewogICAgICAgIGNvbnN0IGFiaVBhcmFtZXRlciA9ICJpbnB1dHMiIGluIGFiaUl0ZW0gJiYgYWJpSXRlbS5pbnB1dHNbaW5kZXgyXTsKICAgICAgICBpZiAoIWFiaVBhcmFtZXRlcikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gaXNBcmdPZlR5cGUoYXJnLCBhYmlQYXJhbWV0ZXIpOwogICAgICB9KTsKICAgICAgaWYgKG1hdGNoZWQpIHsKICAgICAgICBpZiAobWF0Y2hlZEFiaUl0ZW0gJiYgImlucHV0cyIgaW4gbWF0Y2hlZEFiaUl0ZW0gJiYgbWF0Y2hlZEFiaUl0ZW0uaW5wdXRzKSB7CiAgICAgICAgICBjb25zdCBhbWJpZ3VvdXNUeXBlcyA9IGdldEFtYmlndW91c1R5cGVzKGFiaUl0ZW0uaW5wdXRzLCBtYXRjaGVkQWJpSXRlbS5pbnB1dHMsIGFyZ3MpOwogICAgICAgICAgaWYgKGFtYmlndW91c1R5cGVzKQogICAgICAgICAgICB0aHJvdyBuZXcgQWJpSXRlbUFtYmlndWl0eUVycm9yKHsKICAgICAgICAgICAgICBhYmlJdGVtLAogICAgICAgICAgICAgIHR5cGU6IGFtYmlndW91c1R5cGVzWzBdCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICBhYmlJdGVtOiBtYXRjaGVkQWJpSXRlbSwKICAgICAgICAgICAgICB0eXBlOiBhbWJpZ3VvdXNUeXBlc1sxXQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgbWF0Y2hlZEFiaUl0ZW0gPSBhYmlJdGVtOwogICAgICB9CiAgICB9CiAgICBpZiAobWF0Y2hlZEFiaUl0ZW0pCiAgICAgIHJldHVybiBtYXRjaGVkQWJpSXRlbTsKICAgIHJldHVybiBhYmlJdGVtc1swXTsKICB9CiAgZnVuY3Rpb24gaXNBcmdPZlR5cGUoYXJnLCBhYmlQYXJhbWV0ZXIpIHsKICAgIGNvbnN0IGFyZ1R5cGUgPSB0eXBlb2YgYXJnOwogICAgY29uc3QgYWJpUGFyYW1ldGVyVHlwZSA9IGFiaVBhcmFtZXRlci50eXBlOwogICAgc3dpdGNoIChhYmlQYXJhbWV0ZXJUeXBlKSB7CiAgICAgIGNhc2UgImFkZHJlc3MiOgogICAgICAgIHJldHVybiBpc0FkZHJlc3MoYXJnLCB7IHN0cmljdDogZmFsc2UgfSk7CiAgICAgIGNhc2UgImJvb2wiOgogICAgICAgIHJldHVybiBhcmdUeXBlID09PSAiYm9vbGVhbiI7CiAgICAgIGNhc2UgImZ1bmN0aW9uIjoKICAgICAgICByZXR1cm4gYXJnVHlwZSA9PT0gInN0cmluZyI7CiAgICAgIGNhc2UgInN0cmluZyI6CiAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT09ICJzdHJpbmciOwogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaWYgKGFiaVBhcmFtZXRlclR5cGUgPT09ICJ0dXBsZSIgJiYgImNvbXBvbmVudHMiIGluIGFiaVBhcmFtZXRlcikKICAgICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGFiaVBhcmFtZXRlci5jb21wb25lbnRzKS5ldmVyeSgoY29tcG9uZW50LCBpbmRleDIpID0+IHsKICAgICAgICAgICAgcmV0dXJuIGlzQXJnT2ZUeXBlKE9iamVjdC52YWx1ZXMoYXJnKVtpbmRleDJdLCBjb21wb25lbnQpOwogICAgICAgICAgfSk7CiAgICAgICAgaWYgKC9edT9pbnQoOHwxNnwyNHwzMnw0MHw0OHw1Nnw2NHw3Mnw4MHw4OHw5NnwxMDR8MTEyfDEyMHwxMjh8MTM2fDE0NHwxNTJ8MTYwfDE2OHwxNzZ8MTg0fDE5MnwyMDB8MjA4fDIxNnwyMjR8MjMyfDI0MHwyNDh8MjU2KT8kLy50ZXN0KGFiaVBhcmFtZXRlclR5cGUpKQogICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT09ICJudW1iZXIiIHx8IGFyZ1R5cGUgPT09ICJiaWdpbnQiOwogICAgICAgIGlmICgvXmJ5dGVzKFsxLTldfDFbMC05XXwyWzAtOV18M1swLTJdKT8kLy50ZXN0KGFiaVBhcmFtZXRlclR5cGUpKQogICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT09ICJzdHJpbmciIHx8IGFyZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk7CiAgICAgICAgaWYgKC9bYS16XStbMS05XXswLDN9KFxbWzAtOV17MCx9XF0pKyQvLnRlc3QoYWJpUGFyYW1ldGVyVHlwZSkpIHsKICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFyZykgJiYgYXJnLmV2ZXJ5KCh4KSA9PiBpc0FyZ09mVHlwZSh4LCB7CiAgICAgICAgICAgIC4uLmFiaVBhcmFtZXRlciwKICAgICAgICAgICAgLy8gUG9wIG9mZiBgW11gIG9yIGBbTV1gIGZyb20gZW5kIG9mIHR5cGUKICAgICAgICAgICAgdHlwZTogYWJpUGFyYW1ldGVyVHlwZS5yZXBsYWNlKC8oXFtbMC05XXswLH1cXSkkLywgIiIpCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiBnZXRBbWJpZ3VvdXNUeXBlcyhzb3VyY2VQYXJhbWV0ZXJzLCB0YXJnZXRQYXJhbWV0ZXJzLCBhcmdzKSB7CiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlckluZGV4IGluIHNvdXJjZVBhcmFtZXRlcnMpIHsKICAgICAgY29uc3Qgc291cmNlUGFyYW1ldGVyID0gc291cmNlUGFyYW1ldGVyc1twYXJhbWV0ZXJJbmRleF07CiAgICAgIGNvbnN0IHRhcmdldFBhcmFtZXRlciA9IHRhcmdldFBhcmFtZXRlcnNbcGFyYW1ldGVySW5kZXhdOwogICAgICBpZiAoc291cmNlUGFyYW1ldGVyLnR5cGUgPT09ICJ0dXBsZSIgJiYgdGFyZ2V0UGFyYW1ldGVyLnR5cGUgPT09ICJ0dXBsZSIgJiYgImNvbXBvbmVudHMiIGluIHNvdXJjZVBhcmFtZXRlciAmJiAiY29tcG9uZW50cyIgaW4gdGFyZ2V0UGFyYW1ldGVyKQogICAgICAgIHJldHVybiBnZXRBbWJpZ3VvdXNUeXBlcyhzb3VyY2VQYXJhbWV0ZXIuY29tcG9uZW50cywgdGFyZ2V0UGFyYW1ldGVyLmNvbXBvbmVudHMsIGFyZ3NbcGFyYW1ldGVySW5kZXhdKTsKICAgICAgY29uc3QgdHlwZXMgPSBbc291cmNlUGFyYW1ldGVyLnR5cGUsIHRhcmdldFBhcmFtZXRlci50eXBlXTsKICAgICAgY29uc3QgYW1iaWd1b3VzID0gKCgpID0+IHsKICAgICAgICBpZiAodHlwZXMuaW5jbHVkZXMoImFkZHJlc3MiKSAmJiB0eXBlcy5pbmNsdWRlcygiYnl0ZXMyMCIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKHR5cGVzLmluY2x1ZGVzKCJhZGRyZXNzIikgJiYgdHlwZXMuaW5jbHVkZXMoInN0cmluZyIpKQogICAgICAgICAgcmV0dXJuIGlzQWRkcmVzcyhhcmdzW3BhcmFtZXRlckluZGV4XSwgeyBzdHJpY3Q6IGZhbHNlIH0pOwogICAgICAgIGlmICh0eXBlcy5pbmNsdWRlcygiYWRkcmVzcyIpICYmIHR5cGVzLmluY2x1ZGVzKCJieXRlcyIpKQogICAgICAgICAgcmV0dXJuIGlzQWRkcmVzcyhhcmdzW3BhcmFtZXRlckluZGV4XSwgeyBzdHJpY3Q6IGZhbHNlIH0pOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSkoKTsKICAgICAgaWYgKGFtYmlndW91cykKICAgICAgICByZXR1cm4gdHlwZXM7CiAgICB9CiAgICByZXR1cm47CiAgfQogIHZhciBpbml0X2dldEFiaUl0ZW0gPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZ2V0QWJpSXRlbS5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfaXNIZXgoKTsKICAgICAgaW5pdF9pc0FkZHJlc3MoKTsKICAgICAgaW5pdF90b0V2ZW50U2VsZWN0b3IoKTsKICAgICAgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9wYXJzZUFjY291bnQuanMKICBmdW5jdGlvbiBwYXJzZUFjY291bnQoYWNjb3VudCkgewogICAgaWYgKHR5cGVvZiBhY2NvdW50ID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIHsgYWRkcmVzczogYWNjb3VudCwgdHlwZTogImpzb24tcnBjIiB9OwogICAgcmV0dXJuIGFjY291bnQ7CiAgfQogIHZhciBpbml0X3BhcnNlQWNjb3VudCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjY291bnRzL3V0aWxzL3BhcnNlQWNjb3VudC5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL3ByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEuanMKICBmdW5jdGlvbiBwcmVwYXJlRW5jb2RlRnVuY3Rpb25EYXRhKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhcmdzLCBmdW5jdGlvbk5hbWUgfSA9IHBhcmFtZXRlcnM7CiAgICBsZXQgYWJpSXRlbSA9IGFiaTJbMF07CiAgICBpZiAoZnVuY3Rpb25OYW1lKSB7CiAgICAgIGNvbnN0IGl0ZW0gPSBnZXRBYmlJdGVtKHsKICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgYXJncywKICAgICAgICBuYW1lOiBmdW5jdGlvbk5hbWUKICAgICAgfSk7CiAgICAgIGlmICghaXRlbSkKICAgICAgICB0aHJvdyBuZXcgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yKGZ1bmN0aW9uTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGgyIH0pOwogICAgICBhYmlJdGVtID0gaXRlbTsKICAgIH0KICAgIGlmIChhYmlJdGVtLnR5cGUgIT09ICJmdW5jdGlvbiIpCiAgICAgIHRocm93IG5ldyBBYmlGdW5jdGlvbk5vdEZvdW5kRXJyb3Iodm9pZCAwLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDIgfSk7CiAgICByZXR1cm4gewogICAgICBhYmk6IFthYmlJdGVtXSwKICAgICAgZnVuY3Rpb25OYW1lOiB0b0Z1bmN0aW9uU2VsZWN0b3IoZm9ybWF0QWJpSXRlbTIoYWJpSXRlbSkpCiAgICB9OwogIH0KICB2YXIgZG9jc1BhdGgyOwogIHZhciBpbml0X3ByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvcHJlcGFyZUVuY29kZUZ1bmN0aW9uRGF0YS5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfdG9GdW5jdGlvblNlbGVjdG9yKCk7CiAgICAgIGluaXRfZm9ybWF0QWJpSXRlbTIoKTsKICAgICAgaW5pdF9nZXRBYmlJdGVtKCk7CiAgICAgIGRvY3NQYXRoMiA9ICIvZG9jcy9jb250cmFjdC9lbmNvZGVGdW5jdGlvbkRhdGEiOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVGdW5jdGlvbkRhdGEuanMKICBmdW5jdGlvbiBlbmNvZGVGdW5jdGlvbkRhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhcmdzIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgeyBhYmk6IGFiaTIsIGZ1bmN0aW9uTmFtZSB9ID0gKCgpID0+IHsKICAgICAgaWYgKHBhcmFtZXRlcnMuYWJpLmxlbmd0aCA9PT0gMSAmJiBwYXJhbWV0ZXJzLmZ1bmN0aW9uTmFtZT8uc3RhcnRzV2l0aCgiMHgiKSkKICAgICAgICByZXR1cm4gcGFyYW1ldGVyczsKICAgICAgcmV0dXJuIHByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEocGFyYW1ldGVycyk7CiAgICB9KSgpOwogICAgY29uc3QgYWJpSXRlbSA9IGFiaTJbMF07CiAgICBjb25zdCBzaWduYXR1cmUgPSBmdW5jdGlvbk5hbWU7CiAgICBjb25zdCBkYXRhID0gImlucHV0cyIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLmlucHV0cyA/IGVuY29kZUFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMsIGFyZ3MgPz8gW10pIDogdm9pZCAwOwogICAgcmV0dXJuIGNvbmNhdEhleChbc2lnbmF0dXJlLCBkYXRhID8/ICIweCJdKTsKICB9CiAgdmFyIGluaXRfZW5jb2RlRnVuY3Rpb25EYXRhID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2VuY29kZUZ1bmN0aW9uRGF0YS5qcyIoKSB7CiAgICAgIGluaXRfY29uY2F0KCk7CiAgICAgIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogICAgICBpbml0X3ByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMvc29saWRpdHkuanMKICB2YXIgcGFuaWNSZWFzb25zLCBzb2xpZGl0eUVycm9yLCBzb2xpZGl0eVBhbmljOwogIHZhciBpbml0X3NvbGlkaXR5ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL3NvbGlkaXR5LmpzIigpIHsKICAgICAgcGFuaWNSZWFzb25zID0gewogICAgICAgIDE6ICJBbiBgYXNzZXJ0YCBjb25kaXRpb24gZmFpbGVkLiIsCiAgICAgICAgMTc6ICJBcml0aG1ldGljIG9wZXJhdGlvbiByZXN1bHRlZCBpbiB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cuIiwKICAgICAgICAxODogIkRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvIChlLmcuIGA1IC8gMGAgb3IgYDIzICUgMGApLiIsCiAgICAgICAgMzM6ICJBdHRlbXB0ZWQgdG8gY29udmVydCB0byBhbiBpbnZhbGlkIHR5cGUuIiwKICAgICAgICAzNDogIkF0dGVtcHRlZCB0byBhY2Nlc3MgYSBzdG9yYWdlIGJ5dGUgYXJyYXkgdGhhdCBpcyBpbmNvcnJlY3RseSBlbmNvZGVkLiIsCiAgICAgICAgNDk6ICJQZXJmb3JtZWQgYC5wb3AoKWAgb24gYW4gZW1wdHkgYXJyYXkiLAogICAgICAgIDUwOiAiQXJyYXkgaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4iLAogICAgICAgIDY1OiAiQWxsb2NhdGVkIHRvbyBtdWNoIG1lbW9yeSBvciBjcmVhdGVkIGFuIGFycmF5IHdoaWNoIGlzIHRvbyBsYXJnZS4iLAogICAgICAgIDgxOiAiQXR0ZW1wdGVkIHRvIGNhbGwgYSB6ZXJvLWluaXRpYWxpemVkIHZhcmlhYmxlIG9mIGludGVybmFsIGZ1bmN0aW9uIHR5cGUuIgogICAgICB9OwogICAgICBzb2xpZGl0eUVycm9yID0gewogICAgICAgIGlucHV0czogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAibWVzc2FnZSIsCiAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICBuYW1lOiAiRXJyb3IiLAogICAgICAgIHR5cGU6ICJlcnJvciIKICAgICAgfTsKICAgICAgc29saWRpdHlQYW5pYyA9IHsKICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogInJlYXNvbiIsCiAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgbmFtZTogIlBhbmljIiwKICAgICAgICB0eXBlOiAiZXJyb3IiCiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2N1cnNvci5qcwogIHZhciBOZWdhdGl2ZU9mZnNldEVycm9yLCBQb3NpdGlvbk91dE9mQm91bmRzRXJyb3IsIFJlY3Vyc2l2ZVJlYWRMaW1pdEV4Y2VlZGVkRXJyb3I7CiAgdmFyIGluaXRfY3Vyc29yID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2N1cnNvci5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBOZWdhdGl2ZU9mZnNldEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IG9mZnNldCB9KSB7CiAgICAgICAgICBzdXBlcihgT2Zmc2V0IFxgJHtvZmZzZXR9XGAgY2Fubm90IGJlIG5lZ2F0aXZlLmAsIHsKICAgICAgICAgICAgbmFtZTogIk5lZ2F0aXZlT2Zmc2V0RXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFBvc2l0aW9uT3V0T2ZCb3VuZHNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBsZW5ndGgsIHBvc2l0aW9uIH0pIHsKICAgICAgICAgIHN1cGVyKGBQb3NpdGlvbiBcYCR7cG9zaXRpb259XGAgaXMgb3V0IG9mIGJvdW5kcyAoXGAwIDwgcG9zaXRpb24gPCAke2xlbmd0aH1cYCkuYCwgeyBuYW1lOiAiUG9zaXRpb25PdXRPZkJvdW5kc0Vycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFJlY3Vyc2l2ZVJlYWRMaW1pdEV4Y2VlZGVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY291bnQsIGxpbWl0IH0pIHsKICAgICAgICAgIHN1cGVyKGBSZWN1cnNpdmUgcmVhZCBsaW1pdCBvZiBcYCR7bGltaXR9XGAgZXhjZWVkZWQgKHJlY3Vyc2l2ZSByZWFkIGNvdW50OiBcYCR7Y291bnR9XGApLmAsIHsgbmFtZTogIlJlY3Vyc2l2ZVJlYWRMaW1pdEV4Y2VlZGVkRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9jdXJzb3IuanMKICBmdW5jdGlvbiBjcmVhdGVDdXJzb3IoYnl0ZXMyLCB7IHJlY3Vyc2l2ZVJlYWRMaW1pdCA9IDgxOTIgfSA9IHt9KSB7CiAgICBjb25zdCBjdXJzb3IgPSBPYmplY3QuY3JlYXRlKHN0YXRpY0N1cnNvcik7CiAgICBjdXJzb3IuYnl0ZXMgPSBieXRlczI7CiAgICBjdXJzb3IuZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYnl0ZXMyLmJ1ZmZlciwgYnl0ZXMyLmJ5dGVPZmZzZXQsIGJ5dGVzMi5ieXRlTGVuZ3RoKTsKICAgIGN1cnNvci5wb3NpdGlvblJlYWRDb3VudCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBjdXJzb3IucmVjdXJzaXZlUmVhZExpbWl0ID0gcmVjdXJzaXZlUmVhZExpbWl0OwogICAgcmV0dXJuIGN1cnNvcjsKICB9CiAgdmFyIHN0YXRpY0N1cnNvcjsKICB2YXIgaW5pdF9jdXJzb3IyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY3Vyc29yLmpzIigpIHsKICAgICAgaW5pdF9jdXJzb3IoKTsKICAgICAgc3RhdGljQ3Vyc29yID0gewogICAgICAgIGJ5dGVzOiBuZXcgVWludDhBcnJheSgpLAogICAgICAgIGRhdGFWaWV3OiBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDApKSwKICAgICAgICBwb3NpdGlvbjogMCwKICAgICAgICBwb3NpdGlvblJlYWRDb3VudDogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwKICAgICAgICByZWN1cnNpdmVSZWFkQ291bnQ6IDAsCiAgICAgICAgcmVjdXJzaXZlUmVhZExpbWl0OiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksCiAgICAgICAgYXNzZXJ0UmVhZExpbWl0KCkgewogICAgICAgICAgaWYgKHRoaXMucmVjdXJzaXZlUmVhZENvdW50ID49IHRoaXMucmVjdXJzaXZlUmVhZExpbWl0KQogICAgICAgICAgICB0aHJvdyBuZXcgUmVjdXJzaXZlUmVhZExpbWl0RXhjZWVkZWRFcnJvcih7CiAgICAgICAgICAgICAgY291bnQ6IHRoaXMucmVjdXJzaXZlUmVhZENvdW50ICsgMSwKICAgICAgICAgICAgICBsaW1pdDogdGhpcy5yZWN1cnNpdmVSZWFkTGltaXQKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBhc3NlcnRQb3NpdGlvbihwb3NpdGlvbikgewogICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+IHRoaXMuYnl0ZXMubGVuZ3RoIC0gMSkKICAgICAgICAgICAgdGhyb3cgbmV3IFBvc2l0aW9uT3V0T2ZCb3VuZHNFcnJvcih7CiAgICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmJ5dGVzLmxlbmd0aCwKICAgICAgICAgICAgICBwb3NpdGlvbgogICAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGRlY3JlbWVudFBvc2l0aW9uKG9mZnNldCkgewogICAgICAgICAgaWYgKG9mZnNldCA8IDApCiAgICAgICAgICAgIHRocm93IG5ldyBOZWdhdGl2ZU9mZnNldEVycm9yKHsgb2Zmc2V0IH0pOwogICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uIC0gb2Zmc2V0OwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbik7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgICAgfSwKICAgICAgICBnZXRSZWFkQ291bnQocG9zaXRpb24pIHsKICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uUmVhZENvdW50LmdldChwb3NpdGlvbiB8fCB0aGlzLnBvc2l0aW9uKSB8fCAwOwogICAgICAgIH0sCiAgICAgICAgaW5jcmVtZW50UG9zaXRpb24ob2Zmc2V0KSB7CiAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkKICAgICAgICAgICAgdGhyb3cgbmV3IE5lZ2F0aXZlT2Zmc2V0RXJyb3IoeyBvZmZzZXQgfSk7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb24gKyBvZmZzZXQ7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RCeXRlKHBvc2l0aW9uXykgewogICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbl8gPz8gdGhpcy5wb3NpdGlvbjsKICAgICAgICAgIHRoaXMuYXNzZXJ0UG9zaXRpb24ocG9zaXRpb24pOwogICAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZXNbcG9zaXRpb25dOwogICAgICAgIH0sCiAgICAgICAgaW5zcGVjdEJ5dGVzKGxlbmd0aCwgcG9zaXRpb25fKSB7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uXyA/PyB0aGlzLnBvc2l0aW9uOwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbiArIGxlbmd0aCAtIDEpOwogICAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZXMuc3ViYXJyYXkocG9zaXRpb24sIHBvc2l0aW9uICsgbGVuZ3RoKTsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RVaW50OChwb3NpdGlvbl8pIHsKICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gcG9zaXRpb25fID8/IHRoaXMucG9zaXRpb247CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICAgICAgIHJldHVybiB0aGlzLmJ5dGVzW3Bvc2l0aW9uXTsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RVaW50MTYocG9zaXRpb25fKSB7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uXyA/PyB0aGlzLnBvc2l0aW9uOwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbiArIDEpOwogICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0VWludDE2KHBvc2l0aW9uKTsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RVaW50MjQocG9zaXRpb25fKSB7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uXyA/PyB0aGlzLnBvc2l0aW9uOwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbiArIDIpOwogICAgICAgICAgcmV0dXJuICh0aGlzLmRhdGFWaWV3LmdldFVpbnQxNihwb3NpdGlvbikgPDwgOCkgKyB0aGlzLmRhdGFWaWV3LmdldFVpbnQ4KHBvc2l0aW9uICsgMik7CiAgICAgICAgfSwKICAgICAgICBpbnNwZWN0VWludDMyKHBvc2l0aW9uXykgewogICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbl8gPz8gdGhpcy5wb3NpdGlvbjsKICAgICAgICAgIHRoaXMuYXNzZXJ0UG9zaXRpb24ocG9zaXRpb24gKyAzKTsKICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldFVpbnQzMihwb3NpdGlvbik7CiAgICAgICAgfSwKICAgICAgICBwdXNoQnl0ZShieXRlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24pOwogICAgICAgICAgdGhpcy5ieXRlc1t0aGlzLnBvc2l0aW9uXSA9IGJ5dGU7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uKys7CiAgICAgICAgfSwKICAgICAgICBwdXNoQnl0ZXMoYnl0ZXMyKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24gKyBieXRlczIubGVuZ3RoIC0gMSk7CiAgICAgICAgICB0aGlzLmJ5dGVzLnNldChieXRlczIsIHRoaXMucG9zaXRpb24pOwogICAgICAgICAgdGhpcy5wb3NpdGlvbiArPSBieXRlczIubGVuZ3RoOwogICAgICAgIH0sCiAgICAgICAgcHVzaFVpbnQ4KHZhbHVlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24pOwogICAgICAgICAgdGhpcy5ieXRlc1t0aGlzLnBvc2l0aW9uXSA9IHZhbHVlOwogICAgICAgICAgdGhpcy5wb3NpdGlvbisrOwogICAgICAgIH0sCiAgICAgICAgcHVzaFVpbnQxNih2YWx1ZSkgewogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbih0aGlzLnBvc2l0aW9uICsgMSk7CiAgICAgICAgICB0aGlzLmRhdGFWaWV3LnNldFVpbnQxNih0aGlzLnBvc2l0aW9uLCB2YWx1ZSk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDI7CiAgICAgICAgfSwKICAgICAgICBwdXNoVWludDI0KHZhbHVlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24gKyAyKTsKICAgICAgICAgIHRoaXMuZGF0YVZpZXcuc2V0VWludDE2KHRoaXMucG9zaXRpb24sIHZhbHVlID4+IDgpOwogICAgICAgICAgdGhpcy5kYXRhVmlldy5zZXRVaW50OCh0aGlzLnBvc2l0aW9uICsgMiwgdmFsdWUgJiB+NDI5NDk2NzA0MCk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDM7CiAgICAgICAgfSwKICAgICAgICBwdXNoVWludDMyKHZhbHVlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24gKyAzKTsKICAgICAgICAgIHRoaXMuZGF0YVZpZXcuc2V0VWludDMyKHRoaXMucG9zaXRpb24sIHZhbHVlKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gKz0gNDsKICAgICAgICB9LAogICAgICAgIHJlYWRCeXRlKCkgewogICAgICAgICAgdGhpcy5hc3NlcnRSZWFkTGltaXQoKTsKICAgICAgICAgIHRoaXMuX3RvdWNoKCk7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zcGVjdEJ5dGUoKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24rKzsKICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9LAogICAgICAgIHJlYWRCeXRlcyhsZW5ndGgsIHNpemUzKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFJlYWRMaW1pdCgpOwogICAgICAgICAgdGhpcy5fdG91Y2goKTsKICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnNwZWN0Qnl0ZXMobGVuZ3RoKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gKz0gc2l6ZTMgPz8gbGVuZ3RoOwogICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0sCiAgICAgICAgcmVhZFVpbnQ4KCkgewogICAgICAgICAgdGhpcy5hc3NlcnRSZWFkTGltaXQoKTsKICAgICAgICAgIHRoaXMuX3RvdWNoKCk7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zcGVjdFVpbnQ4KCk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDE7CiAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfSwKICAgICAgICByZWFkVWludDE2KCkgewogICAgICAgICAgdGhpcy5hc3NlcnRSZWFkTGltaXQoKTsKICAgICAgICAgIHRoaXMuX3RvdWNoKCk7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zcGVjdFVpbnQxNigpOwogICAgICAgICAgdGhpcy5wb3NpdGlvbiArPSAyOwogICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0sCiAgICAgICAgcmVhZFVpbnQyNCgpIHsKICAgICAgICAgIHRoaXMuYXNzZXJ0UmVhZExpbWl0KCk7CiAgICAgICAgICB0aGlzLl90b3VjaCgpOwogICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmluc3BlY3RVaW50MjQoKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gKz0gMzsKICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9LAogICAgICAgIHJlYWRVaW50MzIoKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFJlYWRMaW1pdCgpOwogICAgICAgICAgdGhpcy5fdG91Y2goKTsKICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnNwZWN0VWludDMyKCk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDQ7CiAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfSwKICAgICAgICBnZXQgcmVtYWluaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZXMubGVuZ3RoIC0gdGhpcy5wb3NpdGlvbjsKICAgICAgICB9LAogICAgICAgIHNldFBvc2l0aW9uKHBvc2l0aW9uKSB7CiAgICAgICAgICBjb25zdCBvbGRQb3NpdGlvbiA9IHRoaXMucG9zaXRpb247CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICAgICAgIHJldHVybiAoKSA9PiB0aGlzLnBvc2l0aW9uID0gb2xkUG9zaXRpb247CiAgICAgICAgfSwKICAgICAgICBfdG91Y2goKSB7CiAgICAgICAgICBpZiAodGhpcy5yZWN1cnNpdmVSZWFkTGltaXQgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLmdldFJlYWRDb3VudCgpOwogICAgICAgICAgdGhpcy5wb3NpdGlvblJlYWRDb3VudC5zZXQodGhpcy5wb3NpdGlvbiwgY291bnQgKyAxKTsKICAgICAgICAgIGlmIChjb3VudCA+IDApCiAgICAgICAgICAgIHRoaXMucmVjdXJzaXZlUmVhZENvdW50Kys7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL2Zyb21CeXRlcy5qcwogIGZ1bmN0aW9uIGZyb21CeXRlcyhieXRlczIsIHRvT3JPcHRzKSB7CiAgICBjb25zdCBvcHRzID0gdHlwZW9mIHRvT3JPcHRzID09PSAic3RyaW5nIiA/IHsgdG86IHRvT3JPcHRzIH0gOiB0b09yT3B0czsKICAgIGNvbnN0IHRvID0gb3B0cy50bzsKICAgIGlmICh0byA9PT0gIm51bWJlciIpCiAgICAgIHJldHVybiBieXRlc1RvTnVtYmVyKGJ5dGVzMiwgb3B0cyk7CiAgICBpZiAodG8gPT09ICJiaWdpbnQiKQogICAgICByZXR1cm4gYnl0ZXNUb0JpZ0ludChieXRlczIsIG9wdHMpOwogICAgaWYgKHRvID09PSAiYm9vbGVhbiIpCiAgICAgIHJldHVybiBieXRlc1RvQm9vbChieXRlczIsIG9wdHMpOwogICAgaWYgKHRvID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIGJ5dGVzVG9TdHJpbmcoYnl0ZXMyLCBvcHRzKTsKICAgIHJldHVybiBieXRlc1RvSGV4KGJ5dGVzMiwgb3B0cyk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9CaWdJbnQoYnl0ZXMyLCBvcHRzID0ge30pIHsKICAgIGlmICh0eXBlb2Ygb3B0cy5zaXplICE9PSAidW5kZWZpbmVkIikKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgY29uc3QgaGV4ID0gYnl0ZXNUb0hleChieXRlczIsIG9wdHMpOwogICAgcmV0dXJuIGhleFRvQmlnSW50KGhleCwgb3B0cyk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9Cb29sKGJ5dGVzXywgb3B0cyA9IHt9KSB7CiAgICBsZXQgYnl0ZXMyID0gYnl0ZXNfOwogICAgaWYgKHR5cGVvZiBvcHRzLnNpemUgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGFzc2VydFNpemUoYnl0ZXMyLCB7IHNpemU6IG9wdHMuc2l6ZSB9KTsKICAgICAgYnl0ZXMyID0gdHJpbShieXRlczIpOwogICAgfQogICAgaWYgKGJ5dGVzMi5sZW5ndGggPiAxIHx8IGJ5dGVzMlswXSA+IDEpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQnl0ZXNCb29sZWFuRXJyb3IoYnl0ZXMyKTsKICAgIHJldHVybiBCb29sZWFuKGJ5dGVzMlswXSk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9OdW1iZXIoYnl0ZXMyLCBvcHRzID0ge30pIHsKICAgIGlmICh0eXBlb2Ygb3B0cy5zaXplICE9PSAidW5kZWZpbmVkIikKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgY29uc3QgaGV4ID0gYnl0ZXNUb0hleChieXRlczIsIG9wdHMpOwogICAgcmV0dXJuIGhleFRvTnVtYmVyKGhleCwgb3B0cyk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9TdHJpbmcoYnl0ZXNfLCBvcHRzID0ge30pIHsKICAgIGxldCBieXRlczIgPSBieXRlc187CiAgICBpZiAodHlwZW9mIG9wdHMuc2l6ZSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICBieXRlczIgPSB0cmltKGJ5dGVzMiwgeyBkaXI6ICJyaWdodCIgfSk7CiAgICB9CiAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGJ5dGVzMik7CiAgfQogIHZhciBpbml0X2Zyb21CeXRlcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL2Zyb21CeXRlcy5qcyIoKSB7CiAgICAgIGluaXRfZW5jb2RpbmcoKTsKICAgICAgaW5pdF90cmltKCk7CiAgICAgIGluaXRfZnJvbUhleCgpOwogICAgICBpbml0X3RvSGV4KCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZUFiaVBhcmFtZXRlcnMuanMKICBmdW5jdGlvbiBkZWNvZGVBYmlQYXJhbWV0ZXJzKHBhcmFtcywgZGF0YSkgewogICAgY29uc3QgYnl0ZXMyID0gdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciID8gaGV4VG9CeXRlcyhkYXRhKSA6IGRhdGE7CiAgICBjb25zdCBjdXJzb3IgPSBjcmVhdGVDdXJzb3IoYnl0ZXMyKTsKICAgIGlmIChzaXplKGJ5dGVzMikgPT09IDAgJiYgcGFyYW1zLmxlbmd0aCA+IDApCiAgICAgIHRocm93IG5ldyBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IoKTsKICAgIGlmIChzaXplKGRhdGEpICYmIHNpemUoZGF0YSkgPCAzMikKICAgICAgdGhyb3cgbmV3IEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yKHsKICAgICAgICBkYXRhOiB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgPyBkYXRhIDogYnl0ZXNUb0hleChkYXRhKSwKICAgICAgICBwYXJhbXMsCiAgICAgICAgc2l6ZTogc2l6ZShkYXRhKQogICAgICB9KTsKICAgIGxldCBjb25zdW1lZCA9IDA7CiAgICBjb25zdCB2YWx1ZXMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgKytpKSB7CiAgICAgIGNvbnN0IHBhcmFtID0gcGFyYW1zW2ldOwogICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oY29uc3VtZWQpOwogICAgICBjb25zdCBbZGF0YTIsIGNvbnN1bWVkX10gPSBkZWNvZGVQYXJhbWV0ZXIoY3Vyc29yLCBwYXJhbSwgewogICAgICAgIHN0YXRpY1Bvc2l0aW9uOiAwCiAgICAgIH0pOwogICAgICBjb25zdW1lZCArPSBjb25zdW1lZF87CiAgICAgIHZhbHVlcy5wdXNoKGRhdGEyKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZXM7CiAgfQogIGZ1bmN0aW9uIGRlY29kZVBhcmFtZXRlcihjdXJzb3IsIHBhcmFtLCB7IHN0YXRpY1Bvc2l0aW9uIH0pIHsKICAgIGNvbnN0IGFycmF5Q29tcG9uZW50cyA9IGdldEFycmF5Q29tcG9uZW50cyhwYXJhbS50eXBlKTsKICAgIGlmIChhcnJheUNvbXBvbmVudHMpIHsKICAgICAgY29uc3QgW2xlbmd0aCwgdHlwZV0gPSBhcnJheUNvbXBvbmVudHM7CiAgICAgIHJldHVybiBkZWNvZGVBcnJheShjdXJzb3IsIHsgLi4ucGFyYW0sIHR5cGUgfSwgeyBsZW5ndGgsIHN0YXRpY1Bvc2l0aW9uIH0pOwogICAgfQogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJ0dXBsZSIpCiAgICAgIHJldHVybiBkZWNvZGVUdXBsZShjdXJzb3IsIHBhcmFtLCB7IHN0YXRpY1Bvc2l0aW9uIH0pOwogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJhZGRyZXNzIikKICAgICAgcmV0dXJuIGRlY29kZUFkZHJlc3MoY3Vyc29yKTsKICAgIGlmIChwYXJhbS50eXBlID09PSAiYm9vbCIpCiAgICAgIHJldHVybiBkZWNvZGVCb29sKGN1cnNvcik7CiAgICBpZiAocGFyYW0udHlwZS5zdGFydHNXaXRoKCJieXRlcyIpKQogICAgICByZXR1cm4gZGVjb2RlQnl0ZXMoY3Vyc29yLCBwYXJhbSwgeyBzdGF0aWNQb3NpdGlvbiB9KTsKICAgIGlmIChwYXJhbS50eXBlLnN0YXJ0c1dpdGgoInVpbnQiKSB8fCBwYXJhbS50eXBlLnN0YXJ0c1dpdGgoImludCIpKQogICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKGN1cnNvciwgcGFyYW0pOwogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJzdHJpbmciKQogICAgICByZXR1cm4gZGVjb2RlU3RyaW5nKGN1cnNvciwgeyBzdGF0aWNQb3NpdGlvbiB9KTsKICAgIHRocm93IG5ldyBJbnZhbGlkQWJpRGVjb2RpbmdUeXBlRXJyb3IocGFyYW0udHlwZSwgewogICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L2RlY29kZUFiaVBhcmFtZXRlcnMiCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlQWRkcmVzcyhjdXJzb3IpIHsKICAgIGNvbnN0IHZhbHVlID0gY3Vyc29yLnJlYWRCeXRlcygzMik7CiAgICByZXR1cm4gW2NoZWNrc3VtQWRkcmVzcyhieXRlc1RvSGV4KHNsaWNlQnl0ZXModmFsdWUsIC0yMCkpKSwgMzJdOwogIH0KICBmdW5jdGlvbiBkZWNvZGVBcnJheShjdXJzb3IsIHBhcmFtLCB7IGxlbmd0aCwgc3RhdGljUG9zaXRpb24gfSkgewogICAgaWYgKCFsZW5ndGgpIHsKICAgICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKHNpemVPZk9mZnNldCkpOwogICAgICBjb25zdCBzdGFydCA9IHN0YXRpY1Bvc2l0aW9uICsgb2Zmc2V0OwogICAgICBjb25zdCBzdGFydE9mRGF0YSA9IHN0YXJ0ICsgc2l6ZU9mTGVuZ3RoOwogICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oc3RhcnQpOwogICAgICBjb25zdCBsZW5ndGgyID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKHNpemVPZkxlbmd0aCkpOwogICAgICBjb25zdCBkeW5hbWljQ2hpbGQgPSBoYXNEeW5hbWljQ2hpbGQocGFyYW0pOwogICAgICBsZXQgY29uc3VtZWQyID0gMDsKICAgICAgY29uc3QgdmFsdWUyID0gW107CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoMjsgKytpKSB7CiAgICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXJ0T2ZEYXRhICsgKGR5bmFtaWNDaGlsZCA/IGkgKiAzMiA6IGNvbnN1bWVkMikpOwogICAgICAgIGNvbnN0IFtkYXRhLCBjb25zdW1lZF9dID0gZGVjb2RlUGFyYW1ldGVyKGN1cnNvciwgcGFyYW0sIHsKICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uOiBzdGFydE9mRGF0YQogICAgICAgIH0pOwogICAgICAgIGNvbnN1bWVkMiArPSBjb25zdW1lZF87CiAgICAgICAgdmFsdWUyLnB1c2goZGF0YSk7CiAgICAgIH0KICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgICByZXR1cm4gW3ZhbHVlMiwgMzJdOwogICAgfQogICAgaWYgKGhhc0R5bmFtaWNDaGlsZChwYXJhbSkpIHsKICAgICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKHNpemVPZk9mZnNldCkpOwogICAgICBjb25zdCBzdGFydCA9IHN0YXRpY1Bvc2l0aW9uICsgb2Zmc2V0OwogICAgICBjb25zdCB2YWx1ZTIgPSBbXTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGFydCArIGkgKiAzMik7CiAgICAgICAgY29uc3QgW2RhdGFdID0gZGVjb2RlUGFyYW1ldGVyKGN1cnNvciwgcGFyYW0sIHsKICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uOiBzdGFydAogICAgICAgIH0pOwogICAgICAgIHZhbHVlMi5wdXNoKGRhdGEpOwogICAgICB9CiAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGF0aWNQb3NpdGlvbiArIDMyKTsKICAgICAgcmV0dXJuIFt2YWx1ZTIsIDMyXTsKICAgIH0KICAgIGxldCBjb25zdW1lZCA9IDA7CiAgICBjb25zdCB2YWx1ZSA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICBjb25zdCBbZGF0YSwgY29uc3VtZWRfXSA9IGRlY29kZVBhcmFtZXRlcihjdXJzb3IsIHBhcmFtLCB7CiAgICAgICAgc3RhdGljUG9zaXRpb246IHN0YXRpY1Bvc2l0aW9uICsgY29uc3VtZWQKICAgICAgfSk7CiAgICAgIGNvbnN1bWVkICs9IGNvbnN1bWVkXzsKICAgICAgdmFsdWUucHVzaChkYXRhKTsKICAgIH0KICAgIHJldHVybiBbdmFsdWUsIGNvbnN1bWVkXTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlQm9vbChjdXJzb3IpIHsKICAgIHJldHVybiBbYnl0ZXNUb0Jvb2woY3Vyc29yLnJlYWRCeXRlcygzMiksIHsgc2l6ZTogMzIgfSksIDMyXTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlQnl0ZXMoY3Vyc29yLCBwYXJhbSwgeyBzdGF0aWNQb3NpdGlvbiB9KSB7CiAgICBjb25zdCBbXywgc2l6ZTNdID0gcGFyYW0udHlwZS5zcGxpdCgiYnl0ZXMiKTsKICAgIGlmICghc2l6ZTMpIHsKICAgICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKDMyKSk7CiAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGF0aWNQb3NpdGlvbiArIG9mZnNldCk7CiAgICAgIGNvbnN0IGxlbmd0aCA9IGJ5dGVzVG9OdW1iZXIoY3Vyc29yLnJlYWRCeXRlcygzMikpOwogICAgICBpZiAobGVuZ3RoID09PSAwKSB7CiAgICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgICAgIHJldHVybiBbIjB4IiwgMzJdOwogICAgICB9CiAgICAgIGNvbnN0IGRhdGEgPSBjdXJzb3IucmVhZEJ5dGVzKGxlbmd0aCk7CiAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGF0aWNQb3NpdGlvbiArIDMyKTsKICAgICAgcmV0dXJuIFtieXRlc1RvSGV4KGRhdGEpLCAzMl07CiAgICB9CiAgICBjb25zdCB2YWx1ZSA9IGJ5dGVzVG9IZXgoY3Vyc29yLnJlYWRCeXRlcyhOdW1iZXIucGFyc2VJbnQoc2l6ZTMpLCAzMikpOwogICAgcmV0dXJuIFt2YWx1ZSwgMzJdOwogIH0KICBmdW5jdGlvbiBkZWNvZGVOdW1iZXIoY3Vyc29yLCBwYXJhbSkgewogICAgY29uc3Qgc2lnbmVkID0gcGFyYW0udHlwZS5zdGFydHNXaXRoKCJpbnQiKTsKICAgIGNvbnN0IHNpemUzID0gTnVtYmVyLnBhcnNlSW50KHBhcmFtLnR5cGUuc3BsaXQoImludCIpWzFdIHx8ICIyNTYiKTsKICAgIGNvbnN0IHZhbHVlID0gY3Vyc29yLnJlYWRCeXRlcygzMik7CiAgICByZXR1cm4gWwogICAgICBzaXplMyA+IDQ4ID8gYnl0ZXNUb0JpZ0ludCh2YWx1ZSwgeyBzaWduZWQgfSkgOiBieXRlc1RvTnVtYmVyKHZhbHVlLCB7IHNpZ25lZCB9KSwKICAgICAgMzIKICAgIF07CiAgfQogIGZ1bmN0aW9uIGRlY29kZVR1cGxlKGN1cnNvciwgcGFyYW0sIHsgc3RhdGljUG9zaXRpb24gfSkgewogICAgY29uc3QgaGFzVW5uYW1lZENoaWxkID0gcGFyYW0uY29tcG9uZW50cy5sZW5ndGggPT09IDAgfHwgcGFyYW0uY29tcG9uZW50cy5zb21lKCh7IG5hbWUgfSkgPT4gIW5hbWUpOwogICAgY29uc3QgdmFsdWUgPSBoYXNVbm5hbWVkQ2hpbGQgPyBbXSA6IHt9OwogICAgbGV0IGNvbnN1bWVkID0gMDsKICAgIGlmIChoYXNEeW5hbWljQ2hpbGQocGFyYW0pKSB7CiAgICAgIGNvbnN0IG9mZnNldCA9IGJ5dGVzVG9OdW1iZXIoY3Vyc29yLnJlYWRCeXRlcyhzaXplT2ZPZmZzZXQpKTsKICAgICAgY29uc3Qgc3RhcnQgPSBzdGF0aWNQb3NpdGlvbiArIG9mZnNldDsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbS5jb21wb25lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gcGFyYW0uY29tcG9uZW50c1tpXTsKICAgICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oc3RhcnQgKyBjb25zdW1lZCk7CiAgICAgICAgY29uc3QgW2RhdGEsIGNvbnN1bWVkX10gPSBkZWNvZGVQYXJhbWV0ZXIoY3Vyc29yLCBjb21wb25lbnQsIHsKICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uOiBzdGFydAogICAgICAgIH0pOwogICAgICAgIGNvbnN1bWVkICs9IGNvbnN1bWVkXzsKICAgICAgICB2YWx1ZVtoYXNVbm5hbWVkQ2hpbGQgPyBpIDogY29tcG9uZW50Py5uYW1lXSA9IGRhdGE7CiAgICAgIH0KICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgICByZXR1cm4gW3ZhbHVlLCAzMl07CiAgICB9CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtLmNvbXBvbmVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgY29uc3QgY29tcG9uZW50ID0gcGFyYW0uY29tcG9uZW50c1tpXTsKICAgICAgY29uc3QgW2RhdGEsIGNvbnN1bWVkX10gPSBkZWNvZGVQYXJhbWV0ZXIoY3Vyc29yLCBjb21wb25lbnQsIHsKICAgICAgICBzdGF0aWNQb3NpdGlvbgogICAgICB9KTsKICAgICAgdmFsdWVbaGFzVW5uYW1lZENoaWxkID8gaSA6IGNvbXBvbmVudD8ubmFtZV0gPSBkYXRhOwogICAgICBjb25zdW1lZCArPSBjb25zdW1lZF87CiAgICB9CiAgICByZXR1cm4gW3ZhbHVlLCBjb25zdW1lZF07CiAgfQogIGZ1bmN0aW9uIGRlY29kZVN0cmluZyhjdXJzb3IsIHsgc3RhdGljUG9zaXRpb24gfSkgewogICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKDMyKSk7CiAgICBjb25zdCBzdGFydCA9IHN0YXRpY1Bvc2l0aW9uICsgb2Zmc2V0OwogICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXJ0KTsKICAgIGNvbnN0IGxlbmd0aCA9IGJ5dGVzVG9OdW1iZXIoY3Vyc29yLnJlYWRCeXRlcygzMikpOwogICAgaWYgKGxlbmd0aCA9PT0gMCkgewogICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oc3RhdGljUG9zaXRpb24gKyAzMik7CiAgICAgIHJldHVybiBbIiIsIDMyXTsKICAgIH0KICAgIGNvbnN0IGRhdGEgPSBjdXJzb3IucmVhZEJ5dGVzKGxlbmd0aCwgMzIpOwogICAgY29uc3QgdmFsdWUgPSBieXRlc1RvU3RyaW5nKHRyaW0oZGF0YSkpOwogICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgcmV0dXJuIFt2YWx1ZSwgMzJdOwogIH0KICBmdW5jdGlvbiBoYXNEeW5hbWljQ2hpbGQocGFyYW0pIHsKICAgIGNvbnN0IHsgdHlwZSB9ID0gcGFyYW07CiAgICBpZiAodHlwZSA9PT0gInN0cmluZyIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUgPT09ICJieXRlcyIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUuZW5kc1dpdGgoIltdIikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUgPT09ICJ0dXBsZSIpCiAgICAgIHJldHVybiBwYXJhbS5jb21wb25lbnRzPy5zb21lKGhhc0R5bmFtaWNDaGlsZCk7CiAgICBjb25zdCBhcnJheUNvbXBvbmVudHMgPSBnZXRBcnJheUNvbXBvbmVudHMocGFyYW0udHlwZSk7CiAgICBpZiAoYXJyYXlDb21wb25lbnRzICYmIGhhc0R5bmFtaWNDaGlsZCh7IC4uLnBhcmFtLCB0eXBlOiBhcnJheUNvbXBvbmVudHNbMV0gfSkpCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KICB2YXIgc2l6ZU9mTGVuZ3RoLCBzaXplT2ZPZmZzZXQ7CiAgdmFyIGluaXRfZGVjb2RlQWJpUGFyYW1ldGVycyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9kZWNvZGVBYmlQYXJhbWV0ZXJzLmpzIigpIHsKICAgICAgaW5pdF9hYmkoKTsKICAgICAgaW5pdF9nZXRBZGRyZXNzKCk7CiAgICAgIGluaXRfY3Vyc29yMigpOwogICAgICBpbml0X3NpemUoKTsKICAgICAgaW5pdF9zbGljZSgpOwogICAgICBpbml0X3RyaW0oKTsKICAgICAgaW5pdF9mcm9tQnl0ZXMoKTsKICAgICAgaW5pdF90b0J5dGVzKCk7CiAgICAgIGluaXRfdG9IZXgoKTsKICAgICAgaW5pdF9lbmNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgICAgIHNpemVPZkxlbmd0aCA9IDMyOwogICAgICBzaXplT2ZPZmZzZXQgPSAzMjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZGVjb2RlRXJyb3JSZXN1bHQuanMKICBmdW5jdGlvbiBkZWNvZGVFcnJvclJlc3VsdChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgZGF0YSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNsaWNlKGRhdGEsIDAsIDQpOwogICAgaWYgKHNpZ25hdHVyZSA9PT0gIjB4IikKICAgICAgdGhyb3cgbmV3IEFiaURlY29kaW5nWmVyb0RhdGFFcnJvcigpOwogICAgY29uc3QgYWJpXyA9IFsuLi5hYmkyIHx8IFtdLCBzb2xpZGl0eUVycm9yLCBzb2xpZGl0eVBhbmljXTsKICAgIGNvbnN0IGFiaUl0ZW0gPSBhYmlfLmZpbmQoKHgpID0+IHgudHlwZSA9PT0gImVycm9yIiAmJiBzaWduYXR1cmUgPT09IHRvRnVuY3Rpb25TZWxlY3Rvcihmb3JtYXRBYmlJdGVtMih4KSkpOwogICAgaWYgKCFhYmlJdGVtKQogICAgICB0aHJvdyBuZXcgQWJpRXJyb3JTaWduYXR1cmVOb3RGb3VuZEVycm9yKHNpZ25hdHVyZSwgewogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3QvZGVjb2RlRXJyb3JSZXN1bHQiCiAgICAgIH0pOwogICAgcmV0dXJuIHsKICAgICAgYWJpSXRlbSwKICAgICAgYXJnczogImlucHV0cyIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLmlucHV0cyAmJiBhYmlJdGVtLmlucHV0cy5sZW5ndGggPiAwID8gZGVjb2RlQWJpUGFyYW1ldGVycyhhYmlJdGVtLmlucHV0cywgc2xpY2UoZGF0YSwgNCkpIDogdm9pZCAwLAogICAgICBlcnJvck5hbWU6IGFiaUl0ZW0ubmFtZQogICAgfTsKICB9CiAgdmFyIGluaXRfZGVjb2RlRXJyb3JSZXN1bHQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZGVjb2RlRXJyb3JSZXN1bHQuanMiKCkgewogICAgICBpbml0X3NvbGlkaXR5KCk7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfc2xpY2UoKTsKICAgICAgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IoKTsKICAgICAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgICAgIGluaXRfZm9ybWF0QWJpSXRlbTIoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zdHJpbmdpZnkuanMKICB2YXIgc3RyaW5naWZ5OwogIHZhciBpbml0X3N0cmluZ2lmeSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3N0cmluZ2lmeS5qcyIoKSB7CiAgICAgIHN0cmluZ2lmeSA9ICh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKSA9PiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgKGtleSwgdmFsdWVfKSA9PiB7CiAgICAgICAgY29uc3QgdmFsdWUyID0gdHlwZW9mIHZhbHVlXyA9PT0gImJpZ2ludCIgPyB2YWx1ZV8udG9TdHJpbmcoKSA6IHZhbHVlXzsKICAgICAgICByZXR1cm4gdHlwZW9mIHJlcGxhY2VyID09PSAiZnVuY3Rpb24iID8gcmVwbGFjZXIoa2V5LCB2YWx1ZTIpIDogdmFsdWUyOwogICAgICB9LCBzcGFjZSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2Zvcm1hdEFiaUl0ZW1XaXRoQXJncy5qcwogIGZ1bmN0aW9uIGZvcm1hdEFiaUl0ZW1XaXRoQXJncyh7IGFiaUl0ZW0sIGFyZ3MsIGluY2x1ZGVGdW5jdGlvbk5hbWUgPSB0cnVlLCBpbmNsdWRlTmFtZSA9IGZhbHNlIH0pIHsKICAgIGlmICghKCJuYW1lIiBpbiBhYmlJdGVtKSkKICAgICAgcmV0dXJuOwogICAgaWYgKCEoImlucHV0cyIgaW4gYWJpSXRlbSkpCiAgICAgIHJldHVybjsKICAgIGlmICghYWJpSXRlbS5pbnB1dHMpCiAgICAgIHJldHVybjsKICAgIHJldHVybiBgJHtpbmNsdWRlRnVuY3Rpb25OYW1lID8gYWJpSXRlbS5uYW1lIDogIiJ9KCR7YWJpSXRlbS5pbnB1dHMubWFwKChpbnB1dCwgaSkgPT4gYCR7aW5jbHVkZU5hbWUgJiYgaW5wdXQubmFtZSA/IGAke2lucHV0Lm5hbWV9OiBgIDogIiJ9JHt0eXBlb2YgYXJnc1tpXSA9PT0gIm9iamVjdCIgPyBzdHJpbmdpZnkoYXJnc1tpXSkgOiBhcmdzW2ldfWApLmpvaW4oIiwgIil9KWA7CiAgfQogIHZhciBpbml0X2Zvcm1hdEFiaUl0ZW1XaXRoQXJncyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9mb3JtYXRBYmlJdGVtV2l0aEFyZ3MuanMiKCkgewogICAgICBpbml0X3N0cmluZ2lmeSgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy91bml0LmpzCiAgdmFyIGV0aGVyVW5pdHMsIGd3ZWlVbml0cywgd2VpVW5pdHM7CiAgdmFyIGluaXRfdW5pdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy91bml0LmpzIigpIHsKICAgICAgZXRoZXJVbml0cyA9IHsKICAgICAgICBnd2VpOiA5LAogICAgICAgIHdlaTogMTgKICAgICAgfTsKICAgICAgZ3dlaVVuaXRzID0gewogICAgICAgIGV0aGVyOiAtOSwKICAgICAgICB3ZWk6IDkKICAgICAgfTsKICAgICAgd2VpVW5pdHMgPSB7CiAgICAgICAgZXRoZXI6IC0xOCwKICAgICAgICBnd2VpOiAtOQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3VuaXQvZm9ybWF0VW5pdHMuanMKICBmdW5jdGlvbiBmb3JtYXRVbml0cyh2YWx1ZSwgZGVjaW1hbHMpIHsKICAgIGxldCBkaXNwbGF5ID0gdmFsdWUudG9TdHJpbmcoKTsKICAgIGNvbnN0IG5lZ2F0aXZlID0gZGlzcGxheS5zdGFydHNXaXRoKCItIik7CiAgICBpZiAobmVnYXRpdmUpCiAgICAgIGRpc3BsYXkgPSBkaXNwbGF5LnNsaWNlKDEpOwogICAgZGlzcGxheSA9IGRpc3BsYXkucGFkU3RhcnQoZGVjaW1hbHMsICIwIik7CiAgICBsZXQgW2ludGVnZXIsIGZyYWN0aW9uXSA9IFsKICAgICAgZGlzcGxheS5zbGljZSgwLCBkaXNwbGF5Lmxlbmd0aCAtIGRlY2ltYWxzKSwKICAgICAgZGlzcGxheS5zbGljZShkaXNwbGF5Lmxlbmd0aCAtIGRlY2ltYWxzKQogICAgXTsKICAgIGZyYWN0aW9uID0gZnJhY3Rpb24ucmVwbGFjZSgvKDArKSQvLCAiIik7CiAgICByZXR1cm4gYCR7bmVnYXRpdmUgPyAiLSIgOiAiIn0ke2ludGVnZXIgfHwgIjAifSR7ZnJhY3Rpb24gPyBgLiR7ZnJhY3Rpb259YCA6ICIifWA7CiAgfQogIHZhciBpbml0X2Zvcm1hdFVuaXRzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9mb3JtYXRVbml0cy5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9mb3JtYXRFdGhlci5qcwogIGZ1bmN0aW9uIGZvcm1hdEV0aGVyKHdlaSwgdW5pdCA9ICJ3ZWkiKSB7CiAgICByZXR1cm4gZm9ybWF0VW5pdHMod2VpLCBldGhlclVuaXRzW3VuaXRdKTsKICB9CiAgdmFyIGluaXRfZm9ybWF0RXRoZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L2Zvcm1hdEV0aGVyLmpzIigpIHsKICAgICAgaW5pdF91bml0KCk7CiAgICAgIGluaXRfZm9ybWF0VW5pdHMoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L2Zvcm1hdEd3ZWkuanMKICBmdW5jdGlvbiBmb3JtYXRHd2VpKHdlaSwgdW5pdCA9ICJ3ZWkiKSB7CiAgICByZXR1cm4gZm9ybWF0VW5pdHMod2VpLCBnd2VpVW5pdHNbdW5pdF0pOwogIH0KICB2YXIgaW5pdF9mb3JtYXRHd2VpID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9mb3JtYXRHd2VpLmpzIigpIHsKICAgICAgaW5pdF91bml0KCk7CiAgICAgIGluaXRfZm9ybWF0VW5pdHMoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvc3RhdGVPdmVycmlkZS5qcwogIGZ1bmN0aW9uIHByZXR0eVN0YXRlTWFwcGluZyhzdGF0ZU1hcHBpbmcpIHsKICAgIHJldHVybiBzdGF0ZU1hcHBpbmcucmVkdWNlKChwcmV0dHksIHsgc2xvdCwgdmFsdWUgfSkgPT4gewogICAgICByZXR1cm4gYCR7cHJldHR5fSAgICAgICAgJHtzbG90fTogJHt2YWx1ZX0KYDsKICAgIH0sICIiKTsKICB9CiAgZnVuY3Rpb24gcHJldHR5U3RhdGVPdmVycmlkZShzdGF0ZU92ZXJyaWRlKSB7CiAgICByZXR1cm4gc3RhdGVPdmVycmlkZS5yZWR1Y2UoKHByZXR0eSwgeyBhZGRyZXNzLCAuLi5zdGF0ZSB9KSA9PiB7CiAgICAgIGxldCB2YWwgPSBgJHtwcmV0dHl9ICAgICR7YWRkcmVzc306CmA7CiAgICAgIGlmIChzdGF0ZS5ub25jZSkKICAgICAgICB2YWwgKz0gYCAgICAgIG5vbmNlOiAke3N0YXRlLm5vbmNlfQpgOwogICAgICBpZiAoc3RhdGUuYmFsYW5jZSkKICAgICAgICB2YWwgKz0gYCAgICAgIGJhbGFuY2U6ICR7c3RhdGUuYmFsYW5jZX0KYDsKICAgICAgaWYgKHN0YXRlLmNvZGUpCiAgICAgICAgdmFsICs9IGAgICAgICBjb2RlOiAke3N0YXRlLmNvZGV9CmA7CiAgICAgIGlmIChzdGF0ZS5zdGF0ZSkgewogICAgICAgIHZhbCArPSAiICAgICAgc3RhdGU6XG4iOwogICAgICAgIHZhbCArPSBwcmV0dHlTdGF0ZU1hcHBpbmcoc3RhdGUuc3RhdGUpOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS5zdGF0ZURpZmYpIHsKICAgICAgICB2YWwgKz0gIiAgICAgIHN0YXRlRGlmZjpcbiI7CiAgICAgICAgdmFsICs9IHByZXR0eVN0YXRlTWFwcGluZyhzdGF0ZS5zdGF0ZURpZmYpOwogICAgICB9CiAgICAgIHJldHVybiB2YWw7CiAgICB9LCAiICBTdGF0ZSBPdmVycmlkZTpcbiIpLnNsaWNlKDAsIC0xKTsKICB9CiAgdmFyIEFjY291bnRTdGF0ZUNvbmZsaWN0RXJyb3IsIFN0YXRlQXNzaWdubWVudENvbmZsaWN0RXJyb3I7CiAgdmFyIGluaXRfc3RhdGVPdmVycmlkZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9zdGF0ZU92ZXJyaWRlLmpzIigpIHsKICAgICAgaW5pdF9iYXNlKCk7CiAgICAgIEFjY291bnRTdGF0ZUNvbmZsaWN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYWRkcmVzcyB9KSB7CiAgICAgICAgICBzdXBlcihgU3RhdGUgZm9yIGFjY291bnQgIiR7YWRkcmVzc30iIGlzIHNldCBtdWx0aXBsZSB0aW1lcy5gLCB7CiAgICAgICAgICAgIG5hbWU6ICJBY2NvdW50U3RhdGVDb25mbGljdEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCJzdGF0ZSBhbmQgc3RhdGVEaWZmIGFyZSBzZXQgb24gdGhlIHNhbWUgYWNjb3VudC4iLCB7CiAgICAgICAgICAgIG5hbWU6ICJTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy90cmFuc2FjdGlvbi5qcwogIGZ1bmN0aW9uIHByZXR0eVByaW50KGFyZ3MpIHsKICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhhcmdzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gewogICAgICBpZiAodmFsdWUgPT09IHZvaWQgMCB8fCB2YWx1ZSA9PT0gZmFsc2UpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBba2V5LCB2YWx1ZV07CiAgICB9KS5maWx0ZXIoQm9vbGVhbik7CiAgICBjb25zdCBtYXhMZW5ndGggPSBlbnRyaWVzLnJlZHVjZSgoYWNjLCBba2V5XSkgPT4gTWF0aC5tYXgoYWNjLCBrZXkubGVuZ3RoKSwgMCk7CiAgICByZXR1cm4gZW50cmllcy5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCAgJHtgJHtrZXl9OmAucGFkRW5kKG1heExlbmd0aCArIDEpfSAgJHt2YWx1ZX1gKS5qb2luKCJcbiIpOwogIH0KICB2YXIgRmVlQ29uZmxpY3RFcnJvciwgSW52YWxpZExlZ2FjeVZFcnJvciwgSW52YWxpZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uRXJyb3IsIEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlRXJyb3IsIEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25FcnJvciwgSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IsIFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IsIFRyYW5zYWN0aW9uTm90Rm91bmRFcnJvciwgVHJhbnNhY3Rpb25SZWNlaXB0Tm90Rm91bmRFcnJvciwgV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvcjsKICB2YXIgaW5pdF90cmFuc2FjdGlvbiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy90cmFuc2FjdGlvbi5qcyIoKSB7CiAgICAgIGluaXRfZm9ybWF0RXRoZXIoKTsKICAgICAgaW5pdF9mb3JtYXRHd2VpKCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBGZWVDb25mbGljdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgIkNhbm5vdCBzcGVjaWZ5IGJvdGggYSBgZ2FzUHJpY2VgIGFuZCBhIGBtYXhGZWVQZXJHYXNgL2BtYXhQcmlvcml0eUZlZVBlckdhc2AuIiwKICAgICAgICAgICAgIlVzZSBgbWF4RmVlUGVyR2FzYC9gbWF4UHJpb3JpdHlGZWVQZXJHYXNgIGZvciBFSVAtMTU1OSBjb21wYXRpYmxlIG5ldHdvcmtzLCBhbmQgYGdhc1ByaWNlYCBmb3Igb3RoZXJzLiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgeyBuYW1lOiAiRmVlQ29uZmxpY3RFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkTGVnYWN5VkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHYgfSkgewogICAgICAgICAgc3VwZXIoYEludmFsaWQgXGB2XGAgdmFsdWUgIiR7dn0iLiBFeHBlY3RlZCAyNyBvciAyOC5gLCB7CiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkTGVnYWN5VkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkU2VyaWFsaXphYmxlVHJhbnNhY3Rpb25FcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyB0cmFuc2FjdGlvbiB9KSB7CiAgICAgICAgICBzdXBlcigiQ2Fubm90IGluZmVyIGEgdHJhbnNhY3Rpb24gdHlwZSBmcm9tIHByb3ZpZGVkIHRyYW5zYWN0aW9uLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgIlByb3ZpZGVkIFRyYW5zYWN0aW9uOiIsCiAgICAgICAgICAgICAgInsiLAogICAgICAgICAgICAgIHByZXR0eVByaW50KHRyYW5zYWN0aW9uKSwKICAgICAgICAgICAgICAifSIsCiAgICAgICAgICAgICAgIiIsCiAgICAgICAgICAgICAgIlRvIGluZmVyIHRoZSB0eXBlLCBlaXRoZXIgcHJvdmlkZToiLAogICAgICAgICAgICAgICItIGEgYHR5cGVgIHRvIHRoZSBUcmFuc2FjdGlvbiwgb3IiLAogICAgICAgICAgICAgICItIGFuIEVJUC0xNTU5IFRyYW5zYWN0aW9uIHdpdGggYG1heEZlZVBlckdhc2AsIG9yIiwKICAgICAgICAgICAgICAiLSBhbiBFSVAtMjkzMCBUcmFuc2FjdGlvbiB3aXRoIGBnYXNQcmljZWAgJiBgYWNjZXNzTGlzdGAsIG9yIiwKICAgICAgICAgICAgICAiLSBhbiBFSVAtNDg0NCBUcmFuc2FjdGlvbiB3aXRoIGBibG9ic2AsIGBibG9iVmVyc2lvbmVkSGFzaGVzYCwgYHNpZGVjYXJzYCwgb3IiLAogICAgICAgICAgICAgICItIGFuIEVJUC03NzAyIFRyYW5zYWN0aW9uIHdpdGggYGF1dGhvcml6YXRpb25MaXN0YCwgb3IiLAogICAgICAgICAgICAgICItIGEgTGVnYWN5IFRyYW5zYWN0aW9uIHdpdGggYGdhc1ByaWNlYCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbmFtZTogIkludmFsaWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uVHlwZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHNlcmlhbGl6ZWRUeXBlIH0pIHsKICAgICAgICAgIHN1cGVyKGBTZXJpYWxpemVkIHRyYW5zYWN0aW9uIHR5cGUgIiR7c2VyaWFsaXplZFR5cGV9IiBpcyBpbnZhbGlkLmAsIHsKICAgICAgICAgICAgbmFtZTogIkludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNlcmlhbGl6ZWRUeXBlIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuc2VyaWFsaXplZFR5cGUgPSBzZXJpYWxpemVkVHlwZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25FcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBhdHRyaWJ1dGVzLCBzZXJpYWxpemVkVHJhbnNhY3Rpb24sIHR5cGUgfSkgewogICAgICAgICAgY29uc3QgbWlzc2luZyA9IE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB0eXBlb2YgdmFsdWUgPT09ICJ1bmRlZmluZWQiID8ga2V5IDogdm9pZCAwKS5maWx0ZXIoQm9vbGVhbik7CiAgICAgICAgICBzdXBlcihgSW52YWxpZCBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIG9mIHR5cGUgIiR7dHlwZX0iIHdhcyBwcm92aWRlZC5gLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBTZXJpYWxpemVkIFRyYW5zYWN0aW9uOiAiJHtzZXJpYWxpemVkVHJhbnNhY3Rpb259ImAsCiAgICAgICAgICAgICAgbWlzc2luZy5sZW5ndGggPiAwID8gYE1pc3NpbmcgQXR0cmlidXRlczogJHttaXNzaW5nLmpvaW4oIiwgIil9YCA6ICIiCiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNlcmlhbGl6ZWRUcmFuc2FjdGlvbiIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInR5cGUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5zZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBzZXJpYWxpemVkVHJhbnNhY3Rpb247CiAgICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgc3RvcmFnZUtleSB9KSB7CiAgICAgICAgICBzdXBlcihgU2l6ZSBmb3Igc3RvcmFnZSBrZXkgIiR7c3RvcmFnZUtleX0iIGlzIGludmFsaWQuIEV4cGVjdGVkIDMyIGJ5dGVzLiBHb3QgJHtNYXRoLmZsb29yKChzdG9yYWdlS2V5Lmxlbmd0aCAtIDIpIC8gMil9IGJ5dGVzLmAsIHsgbmFtZTogIkludmFsaWRTdG9yYWdlS2V5U2l6ZUVycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlLCB7IGFjY291bnQsIGRvY3NQYXRoOiBkb2NzUGF0aDksIGNoYWluLCBkYXRhLCBnYXMsIGdhc1ByaWNlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBub25jZSwgdG8sIHZhbHVlIH0pIHsKICAgICAgICAgIGNvbnN0IHByZXR0eUFyZ3MgPSBwcmV0dHlQcmludCh7CiAgICAgICAgICAgIGNoYWluOiBjaGFpbiAmJiBgJHtjaGFpbj8ubmFtZX0gKGlkOiAke2NoYWluPy5pZH0pYCwKICAgICAgICAgICAgZnJvbTogYWNjb3VudD8uYWRkcmVzcywKICAgICAgICAgICAgdG8sCiAgICAgICAgICAgIHZhbHVlOiB0eXBlb2YgdmFsdWUgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEV0aGVyKHZhbHVlKX0gJHtjaGFpbj8ubmF0aXZlQ3VycmVuY3k/LnN5bWJvbCB8fCAiRVRIIn1gLAogICAgICAgICAgICBkYXRhLAogICAgICAgICAgICBnYXMsCiAgICAgICAgICAgIGdhc1ByaWNlOiB0eXBlb2YgZ2FzUHJpY2UgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkoZ2FzUHJpY2UpfSBnd2VpYCwKICAgICAgICAgICAgbWF4RmVlUGVyR2FzOiB0eXBlb2YgbWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9IGd3ZWlgLAogICAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogdHlwZW9mIG1heFByaW9yaXR5RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKG1heFByaW9yaXR5RmVlUGVyR2FzKX0gZ3dlaWAsCiAgICAgICAgICAgIG5vbmNlCiAgICAgICAgICB9KTsKICAgICAgICAgIHN1cGVyKGNhdXNlLnNob3J0TWVzc2FnZSwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgLi4uY2F1c2UubWV0YU1lc3NhZ2VzID8gWy4uLmNhdXNlLm1ldGFNZXNzYWdlcywgIiAiXSA6IFtdLAogICAgICAgICAgICAgICJSZXF1ZXN0IEFyZ3VtZW50czoiLAogICAgICAgICAgICAgIHByZXR0eUFyZ3MKICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgICAgIG5hbWU6ICJUcmFuc2FjdGlvbkV4ZWN1dGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNhdXNlIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuY2F1c2UgPSBjYXVzZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFRyYW5zYWN0aW9uTm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyLCBibG9ja1RhZywgaGFzaDogaGFzaDMsIGluZGV4OiBpbmRleDIgfSkgewogICAgICAgICAgbGV0IGlkZW50aWZpZXIgPSAiVHJhbnNhY3Rpb24iOwogICAgICAgICAgaWYgKGJsb2NrVGFnICYmIGluZGV4MiAhPT0gdm9pZCAwKQogICAgICAgICAgICBpZGVudGlmaWVyID0gYFRyYW5zYWN0aW9uIGF0IGJsb2NrIHRpbWUgIiR7YmxvY2tUYWd9IiBhdCBpbmRleCAiJHtpbmRleDJ9ImA7CiAgICAgICAgICBpZiAoYmxvY2tIYXNoICYmIGluZGV4MiAhPT0gdm9pZCAwKQogICAgICAgICAgICBpZGVudGlmaWVyID0gYFRyYW5zYWN0aW9uIGF0IGJsb2NrIGhhc2ggIiR7YmxvY2tIYXNofSIgYXQgaW5kZXggIiR7aW5kZXgyfSJgOwogICAgICAgICAgaWYgKGJsb2NrTnVtYmVyICYmIGluZGV4MiAhPT0gdm9pZCAwKQogICAgICAgICAgICBpZGVudGlmaWVyID0gYFRyYW5zYWN0aW9uIGF0IGJsb2NrIG51bWJlciAiJHtibG9ja051bWJlcn0iIGF0IGluZGV4ICIke2luZGV4Mn0iYDsKICAgICAgICAgIGlmIChoYXNoMykKICAgICAgICAgICAgaWRlbnRpZmllciA9IGBUcmFuc2FjdGlvbiB3aXRoIGhhc2ggIiR7aGFzaDN9ImA7CiAgICAgICAgICBzdXBlcihgJHtpZGVudGlmaWVyfSBjb3VsZCBub3QgYmUgZm91bmQuYCwgewogICAgICAgICAgICBuYW1lOiAiVHJhbnNhY3Rpb25Ob3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBUcmFuc2FjdGlvblJlY2VpcHROb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGhhc2g6IGhhc2gzIH0pIHsKICAgICAgICAgIHN1cGVyKGBUcmFuc2FjdGlvbiByZWNlaXB0IHdpdGggaGFzaCAiJHtoYXNoM30iIGNvdWxkIG5vdCBiZSBmb3VuZC4gVGhlIFRyYW5zYWN0aW9uIG1heSBub3QgYmUgcHJvY2Vzc2VkIG9uIGEgYmxvY2sgeWV0LmAsIHsKICAgICAgICAgICAgbmFtZTogIlRyYW5zYWN0aW9uUmVjZWlwdE5vdEZvdW5kRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFdhaXRGb3JUcmFuc2FjdGlvblJlY2VpcHRUaW1lb3V0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgaGFzaDogaGFzaDMgfSkgewogICAgICAgICAgc3VwZXIoYFRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciB0cmFuc2FjdGlvbiB3aXRoIGhhc2ggIiR7aGFzaDN9IiB0byBiZSBjb25maXJtZWQuYCwgeyBuYW1lOiAiV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy91dGlscy5qcwogIHZhciBnZXRDb250cmFjdEFkZHJlc3MsIGdldFVybDsKICB2YXIgaW5pdF91dGlsczMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvdXRpbHMuanMiKCkgewogICAgICBnZXRDb250cmFjdEFkZHJlc3MgPSAoYWRkcmVzcykgPT4gYWRkcmVzczsKICAgICAgZ2V0VXJsID0gKHVybCkgPT4gdXJsOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9jb250cmFjdC5qcwogIHZhciBDYWxsRXhlY3V0aW9uRXJyb3IsIENvbnRyYWN0RnVuY3Rpb25FeGVjdXRpb25FcnJvciwgQ29udHJhY3RGdW5jdGlvblJldmVydGVkRXJyb3IsIENvbnRyYWN0RnVuY3Rpb25aZXJvRGF0YUVycm9yLCBDb3VudGVyZmFjdHVhbERlcGxveW1lbnRGYWlsZWRFcnJvciwgUmF3Q29udHJhY3RFcnJvcjsKICB2YXIgaW5pdF9jb250cmFjdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9jb250cmFjdC5qcyIoKSB7CiAgICAgIGluaXRfcGFyc2VBY2NvdW50KCk7CiAgICAgIGluaXRfc29saWRpdHkoKTsKICAgICAgaW5pdF9kZWNvZGVFcnJvclJlc3VsdCgpOwogICAgICBpbml0X2Zvcm1hdEFiaUl0ZW0yKCk7CiAgICAgIGluaXRfZm9ybWF0QWJpSXRlbVdpdGhBcmdzKCk7CiAgICAgIGluaXRfZ2V0QWJpSXRlbSgpOwogICAgICBpbml0X2Zvcm1hdEV0aGVyKCk7CiAgICAgIGluaXRfZm9ybWF0R3dlaSgpOwogICAgICBpbml0X2FiaSgpOwogICAgICBpbml0X2Jhc2UoKTsKICAgICAgaW5pdF9zdGF0ZU92ZXJyaWRlKCk7CiAgICAgIGluaXRfdHJhbnNhY3Rpb24oKTsKICAgICAgaW5pdF91dGlsczMoKTsKICAgICAgQ2FsbEV4ZWN1dGlvbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBhY2NvdW50OiBhY2NvdW50XywgZG9jc1BhdGg6IGRvY3NQYXRoOSwgY2hhaW4sIGRhdGEsIGdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIG5vbmNlLCB0bywgdmFsdWUsIHN0YXRlT3ZlcnJpZGUgfSkgewogICAgICAgICAgY29uc3QgYWNjb3VudCA9IGFjY291bnRfID8gcGFyc2VBY2NvdW50KGFjY291bnRfKSA6IHZvaWQgMDsKICAgICAgICAgIGxldCBwcmV0dHlBcmdzID0gcHJldHR5UHJpbnQoewogICAgICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgICAgICB0bywKICAgICAgICAgICAgdmFsdWU6IHR5cGVvZiB2YWx1ZSAhPT0gInVuZGVmaW5lZCIgJiYgYCR7Zm9ybWF0RXRoZXIodmFsdWUpfSAke2NoYWluPy5uYXRpdmVDdXJyZW5jeT8uc3ltYm9sIHx8ICJFVEgifWAsCiAgICAgICAgICAgIGRhdGEsCiAgICAgICAgICAgIGdhcywKICAgICAgICAgICAgZ2FzUHJpY2U6IHR5cGVvZiBnYXNQcmljZSAhPT0gInVuZGVmaW5lZCIgJiYgYCR7Zm9ybWF0R3dlaShnYXNQcmljZSl9IGd3ZWlgLAogICAgICAgICAgICBtYXhGZWVQZXJHYXM6IHR5cGVvZiBtYXhGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkobWF4RmVlUGVyR2FzKX0gZ3dlaWAsCiAgICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiB0eXBlb2YgbWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkobWF4UHJpb3JpdHlGZWVQZXJHYXMpfSBnd2VpYCwKICAgICAgICAgICAgbm9uY2UKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHsKICAgICAgICAgICAgcHJldHR5QXJncyArPSBgCiR7cHJldHR5U3RhdGVPdmVycmlkZShzdGF0ZU92ZXJyaWRlKX1gOwogICAgICAgICAgfQogICAgICAgICAgc3VwZXIoY2F1c2Uuc2hvcnRNZXNzYWdlLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAuLi5jYXVzZS5tZXRhTWVzc2FnZXMgPyBbLi4uY2F1c2UubWV0YU1lc3NhZ2VzLCAiICJdIDogW10sCiAgICAgICAgICAgICAgIlJhdyBDYWxsIEFyZ3VtZW50czoiLAogICAgICAgICAgICAgIHByZXR0eUFyZ3MKICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgICAgIG5hbWU6ICJDYWxsRXhlY3V0aW9uRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY2F1c2UiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5jYXVzZSA9IGNhdXNlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29udHJhY3RGdW5jdGlvbkV4ZWN1dGlvbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBhYmk6IGFiaTIsIGFyZ3MsIGNvbnRyYWN0QWRkcmVzcywgZG9jc1BhdGg6IGRvY3NQYXRoOSwgZnVuY3Rpb25OYW1lLCBzZW5kZXIgfSkgewogICAgICAgICAgY29uc3QgYWJpSXRlbSA9IGdldEFiaUl0ZW0oeyBhYmk6IGFiaTIsIGFyZ3MsIG5hbWU6IGZ1bmN0aW9uTmFtZSB9KTsKICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEFyZ3MgPSBhYmlJdGVtID8gZm9ybWF0QWJpSXRlbVdpdGhBcmdzKHsKICAgICAgICAgICAgYWJpSXRlbSwKICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgaW5jbHVkZUZ1bmN0aW9uTmFtZTogZmFsc2UsCiAgICAgICAgICAgIGluY2x1ZGVOYW1lOiBmYWxzZQogICAgICAgICAgfSkgOiB2b2lkIDA7CiAgICAgICAgICBjb25zdCBmdW5jdGlvbldpdGhQYXJhbXMgPSBhYmlJdGVtID8gZm9ybWF0QWJpSXRlbTIoYWJpSXRlbSwgeyBpbmNsdWRlTmFtZTogdHJ1ZSB9KSA6IHZvaWQgMDsKICAgICAgICAgIGNvbnN0IHByZXR0eUFyZ3MgPSBwcmV0dHlQcmludCh7CiAgICAgICAgICAgIGFkZHJlc3M6IGNvbnRyYWN0QWRkcmVzcyAmJiBnZXRDb250cmFjdEFkZHJlc3MoY29udHJhY3RBZGRyZXNzKSwKICAgICAgICAgICAgZnVuY3Rpb246IGZ1bmN0aW9uV2l0aFBhcmFtcywKICAgICAgICAgICAgYXJnczogZm9ybWF0dGVkQXJncyAmJiBmb3JtYXR0ZWRBcmdzICE9PSAiKCkiICYmIGAke1suLi5BcnJheShmdW5jdGlvbk5hbWU/Lmxlbmd0aCA/PyAwKS5rZXlzKCldLm1hcCgoKSA9PiAiICIpLmpvaW4oIiIpfSR7Zm9ybWF0dGVkQXJnc31gLAogICAgICAgICAgICBzZW5kZXIKICAgICAgICAgIH0pOwogICAgICAgICAgc3VwZXIoY2F1c2Uuc2hvcnRNZXNzYWdlIHx8IGBBbiB1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyB0aGUgY29udHJhY3QgZnVuY3Rpb24gIiR7ZnVuY3Rpb25OYW1lfSIuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgLi4uY2F1c2UubWV0YU1lc3NhZ2VzID8gWy4uLmNhdXNlLm1ldGFNZXNzYWdlcywgIiAiXSA6IFtdLAogICAgICAgICAgICAgIHByZXR0eUFyZ3MgJiYgIkNvbnRyYWN0IENhbGw6IiwKICAgICAgICAgICAgICBwcmV0dHlBcmdzCiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiQ29udHJhY3RGdW5jdGlvbkV4ZWN1dGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFiaSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFyZ3MiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJjYXVzZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNvbnRyYWN0QWRkcmVzcyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImZvcm1hdHRlZEFyZ3MiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJmdW5jdGlvbk5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kZXIiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5hYmkgPSBhYmkyOwogICAgICAgICAgdGhpcy5hcmdzID0gYXJnczsKICAgICAgICAgIHRoaXMuY2F1c2UgPSBjYXVzZTsKICAgICAgICAgIHRoaXMuY29udHJhY3RBZGRyZXNzID0gY29udHJhY3RBZGRyZXNzOwogICAgICAgICAgdGhpcy5mdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7CiAgICAgICAgICB0aGlzLnNlbmRlciA9IHNlbmRlcjsKICAgICAgICB9CiAgICAgIH07CiAgICAgIENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGFiaTogYWJpMiwgZGF0YSwgZnVuY3Rpb25OYW1lLCBtZXNzYWdlIH0pIHsKICAgICAgICAgIGxldCBjYXVzZTsKICAgICAgICAgIGxldCBkZWNvZGVkRGF0YSA9IHZvaWQgMDsKICAgICAgICAgIGxldCBtZXRhTWVzc2FnZXM7CiAgICAgICAgICBsZXQgcmVhc29uOwogICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YSAhPT0gIjB4IikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGRlY29kZWREYXRhID0gZGVjb2RlRXJyb3JSZXN1bHQoeyBhYmk6IGFiaTIsIGRhdGEgfSk7CiAgICAgICAgICAgICAgY29uc3QgeyBhYmlJdGVtLCBlcnJvck5hbWUsIGFyZ3M6IGVycm9yQXJncyB9ID0gZGVjb2RlZERhdGE7CiAgICAgICAgICAgICAgaWYgKGVycm9yTmFtZSA9PT0gIkVycm9yIikgewogICAgICAgICAgICAgICAgcmVhc29uID0gZXJyb3JBcmdzWzBdOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3JOYW1lID09PSAiUGFuaWMiKSB7CiAgICAgICAgICAgICAgICBjb25zdCBbZmlyc3RBcmddID0gZXJyb3JBcmdzOwogICAgICAgICAgICAgICAgcmVhc29uID0gcGFuaWNSZWFzb25zW2ZpcnN0QXJnXTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29uc3QgZXJyb3JXaXRoUGFyYW1zID0gYWJpSXRlbSA/IGZvcm1hdEFiaUl0ZW0yKGFiaUl0ZW0sIHsgaW5jbHVkZU5hbWU6IHRydWUgfSkgOiB2b2lkIDA7CiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRBcmdzID0gYWJpSXRlbSAmJiBlcnJvckFyZ3MgPyBmb3JtYXRBYmlJdGVtV2l0aEFyZ3MoewogICAgICAgICAgICAgICAgICBhYmlJdGVtLAogICAgICAgICAgICAgICAgICBhcmdzOiBlcnJvckFyZ3MsCiAgICAgICAgICAgICAgICAgIGluY2x1ZGVGdW5jdGlvbk5hbWU6IGZhbHNlLAogICAgICAgICAgICAgICAgICBpbmNsdWRlTmFtZTogZmFsc2UKICAgICAgICAgICAgICAgIH0pIDogdm9pZCAwOwogICAgICAgICAgICAgICAgbWV0YU1lc3NhZ2VzID0gWwogICAgICAgICAgICAgICAgICBlcnJvcldpdGhQYXJhbXMgPyBgRXJyb3I6ICR7ZXJyb3JXaXRoUGFyYW1zfWAgOiAiIiwKICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkQXJncyAmJiBmb3JtYXR0ZWRBcmdzICE9PSAiKCkiID8gYCAgICAgICAke1suLi5BcnJheShlcnJvck5hbWU/Lmxlbmd0aCA/PyAwKS5rZXlzKCldLm1hcCgoKSA9PiAiICIpLmpvaW4oIiIpfSR7Zm9ybWF0dGVkQXJnc31gIDogIiIKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICBjYXVzZSA9IGVycjsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlKQogICAgICAgICAgICByZWFzb24gPSBtZXNzYWdlOwogICAgICAgICAgbGV0IHNpZ25hdHVyZTsKICAgICAgICAgIGlmIChjYXVzZSBpbnN0YW5jZW9mIEFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvcikgewogICAgICAgICAgICBzaWduYXR1cmUgPSBjYXVzZS5zaWduYXR1cmU7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlcyA9IFsKICAgICAgICAgICAgICBgVW5hYmxlIHRvIGRlY29kZSBzaWduYXR1cmUgIiR7c2lnbmF0dXJlfSIgYXMgaXQgd2FzIG5vdCBmb3VuZCBvbiB0aGUgcHJvdmlkZWQgQUJJLmAsCiAgICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXJyb3IgZXhpc3RzIG9uIGl0LiIsCiAgICAgICAgICAgICAgYFlvdSBjYW4gbG9vayB1cCB0aGUgZGVjb2RlZCBzaWduYXR1cmUgaGVyZTogaHR0cHM6Ly9vcGVuY2hhaW4ueHl6L3NpZ25hdHVyZXM/cXVlcnk9JHtzaWduYXR1cmV9LmAKICAgICAgICAgICAgXTsKICAgICAgICAgIH0KICAgICAgICAgIHN1cGVyKHJlYXNvbiAmJiByZWFzb24gIT09ICJleGVjdXRpb24gcmV2ZXJ0ZWQiIHx8IHNpZ25hdHVyZSA/IFsKICAgICAgICAgICAgYFRoZSBjb250cmFjdCBmdW5jdGlvbiAiJHtmdW5jdGlvbk5hbWV9IiByZXZlcnRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgJHtzaWduYXR1cmUgPyAic2lnbmF0dXJlIiA6ICJyZWFzb24ifTpgLAogICAgICAgICAgICByZWFzb24gfHwgc2lnbmF0dXJlCiAgICAgICAgICBdLmpvaW4oIlxuIikgOiBgVGhlIGNvbnRyYWN0IGZ1bmN0aW9uICIke2Z1bmN0aW9uTmFtZX0iIHJldmVydGVkLmAsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIG1ldGFNZXNzYWdlcywKICAgICAgICAgICAgbmFtZTogIkNvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRhdGEiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJyZWFzb24iLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaWduYXR1cmUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5kYXRhID0gZGVjb2RlZERhdGE7CiAgICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvbjsKICAgICAgICAgIHRoaXMuc2lnbmF0dXJlID0gc2lnbmF0dXJlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29udHJhY3RGdW5jdGlvblplcm9EYXRhRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZnVuY3Rpb25OYW1lIH0pIHsKICAgICAgICAgIHN1cGVyKGBUaGUgY29udHJhY3QgZnVuY3Rpb24gIiR7ZnVuY3Rpb25OYW1lfSIgcmV0dXJuZWQgbm8gZGF0YSAoIjB4IikuYCwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAiVGhpcyBjb3VsZCBiZSBkdWUgdG8gYW55IG9mIHRoZSBmb2xsb3dpbmc6IiwKICAgICAgICAgICAgICBgICAtIFRoZSBjb250cmFjdCBkb2VzIG5vdCBoYXZlIHRoZSBmdW5jdGlvbiAiJHtmdW5jdGlvbk5hbWV9IixgLAogICAgICAgICAgICAgICIgIC0gVGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBjb250cmFjdCBmdW5jdGlvbiBtYXkgYmUgaW52YWxpZCwgb3IiLAogICAgICAgICAgICAgICIgIC0gVGhlIGFkZHJlc3MgaXMgbm90IGEgY29udHJhY3QuIgogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQ29udHJhY3RGdW5jdGlvblplcm9EYXRhRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIENvdW50ZXJmYWN0dWFsRGVwbG95bWVudEZhaWxlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGZhY3RvcnkgfSkgewogICAgICAgICAgc3VwZXIoYERlcGxveW1lbnQgZm9yIGNvdW50ZXJmYWN0dWFsIGNvbnRyYWN0IGNhbGwgZmFpbGVkJHtmYWN0b3J5ID8gYCBmb3IgZmFjdG9yeSAiJHtmYWN0b3J5fSIuYCA6ICIifWAsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgIlBsZWFzZSBlbnN1cmU6IiwKICAgICAgICAgICAgICAiLSBUaGUgYGZhY3RvcnlgIGlzIGEgdmFsaWQgY29udHJhY3QgZGVwbG95bWVudCBmYWN0b3J5IChpZS4gQ3JlYXRlMiBGYWN0b3J5LCBFUkMtNDMzNyBGYWN0b3J5LCBldGMpLiIsCiAgICAgICAgICAgICAgIi0gVGhlIGBmYWN0b3J5RGF0YWAgaXMgYSB2YWxpZCBlbmNvZGVkIGZ1bmN0aW9uIGNhbGwgZm9yIGNvbnRyYWN0IGRlcGxveW1lbnQgZnVuY3Rpb24gb24gdGhlIGZhY3RvcnkuIgogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQ291bnRlcmZhY3R1YWxEZXBsb3ltZW50RmFpbGVkRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFJhd0NvbnRyYWN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZGF0YSwgbWVzc2FnZSB9KSB7CiAgICAgICAgICBzdXBlcihtZXNzYWdlIHx8ICIiLCB7IG5hbWU6ICJSYXdDb250cmFjdEVycm9yIiB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29kZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IDMKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkYXRhIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9yZXF1ZXN0LmpzCiAgdmFyIEh0dHBSZXF1ZXN0RXJyb3IsIFdlYlNvY2tldFJlcXVlc3RFcnJvciwgUnBjUmVxdWVzdEVycm9yLCBTb2NrZXRDbG9zZWRFcnJvciwgVGltZW91dEVycm9yOwogIHZhciBpbml0X3JlcXVlc3QgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvcmVxdWVzdC5qcyIoKSB7CiAgICAgIGluaXRfc3RyaW5naWZ5KCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X3V0aWxzMygpOwogICAgICBIdHRwUmVxdWVzdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGJvZHksIGNhdXNlLCBkZXRhaWxzLCBoZWFkZXJzLCBzdGF0dXMsIHVybCB9KSB7CiAgICAgICAgICBzdXBlcigiSFRUUCByZXF1ZXN0IGZhaWxlZC4iLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBkZXRhaWxzLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBzdGF0dXMgJiYgYFN0YXR1czogJHtzdGF0dXN9YCwKICAgICAgICAgICAgICBgVVJMOiAke2dldFVybCh1cmwpfWAsCiAgICAgICAgICAgICAgYm9keSAmJiBgUmVxdWVzdCBib2R5OiAke3N0cmluZ2lmeShib2R5KX1gCiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiSHR0cFJlcXVlc3RFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJib2R5IiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiaGVhZGVycyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInN0YXR1cyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInVybCIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwogICAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyczsKICAgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOwogICAgICAgICAgdGhpcy51cmwgPSB1cmw7CiAgICAgICAgfQogICAgICB9OwogICAgICBXZWJTb2NrZXRSZXF1ZXN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYm9keSwgY2F1c2UsIGRldGFpbHMsIHVybCB9KSB7CiAgICAgICAgICBzdXBlcigiV2ViU29ja2V0IHJlcXVlc3QgZmFpbGVkLiIsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIGRldGFpbHMsCiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBVUkw6ICR7Z2V0VXJsKHVybCl9YCwKICAgICAgICAgICAgICBib2R5ICYmIGBSZXF1ZXN0IGJvZHk6ICR7c3RyaW5naWZ5KGJvZHkpfWAKICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgICAgIG5hbWU6ICJXZWJTb2NrZXRSZXF1ZXN0RXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFJwY1JlcXVlc3RFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBib2R5LCBlcnJvciwgdXJsIH0pIHsKICAgICAgICAgIHN1cGVyKCJSUEMgUmVxdWVzdCBmYWlsZWQuIiwgewogICAgICAgICAgICBjYXVzZTogZXJyb3IsCiAgICAgICAgICAgIGRldGFpbHM6IGVycm9yLm1lc3NhZ2UsCiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogW2BVUkw6ICR7Z2V0VXJsKHVybCl9YCwgYFJlcXVlc3QgYm9keTogJHtzdHJpbmdpZnkoYm9keSl9YF0sCiAgICAgICAgICAgIG5hbWU6ICJScGNSZXF1ZXN0RXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29kZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmNvZGUgPSBlcnJvci5jb2RlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU29ja2V0Q2xvc2VkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgdXJsIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoIlRoZSBzb2NrZXQgaGFzIGJlZW4gY2xvc2VkLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbdXJsICYmIGBVUkw6ICR7Z2V0VXJsKHVybCl9YF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiU29ja2V0Q2xvc2VkRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFRpbWVvdXRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBib2R5LCB1cmwgfSkgewogICAgICAgICAgc3VwZXIoIlRoZSByZXF1ZXN0IHRvb2sgdG9vIGxvbmcgdG8gcmVzcG9uZC4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6ICJUaGUgcmVxdWVzdCB0aW1lZCBvdXQuIiwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYFVSTDogJHtnZXRVcmwodXJsKX1gLCBgUmVxdWVzdCBib2R5OiAke3N0cmluZ2lmeShib2R5KX1gXSwKICAgICAgICAgICAgbmFtZTogIlRpbWVvdXRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvcnBjLmpzCiAgdmFyIHVua25vd25FcnJvckNvZGUsIFJwY0Vycm9yLCBQcm92aWRlclJwY0Vycm9yLCBQYXJzZVJwY0Vycm9yLCBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yLCBNZXRob2ROb3RGb3VuZFJwY0Vycm9yLCBJbnZhbGlkUGFyYW1zUnBjRXJyb3IsIEludGVybmFsUnBjRXJyb3IsIEludmFsaWRJbnB1dFJwY0Vycm9yLCBSZXNvdXJjZU5vdEZvdW5kUnBjRXJyb3IsIFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciwgVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yLCBNZXRob2ROb3RTdXBwb3J0ZWRScGNFcnJvciwgTGltaXRFeGNlZWRlZFJwY0Vycm9yLCBKc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IsIFVzZXJSZWplY3RlZFJlcXVlc3RFcnJvciwgVW5hdXRob3JpemVkUHJvdmlkZXJFcnJvciwgVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLCBQcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yLCBDaGFpbkRpc2Nvbm5lY3RlZEVycm9yLCBTd2l0Y2hDaGFpbkVycm9yLCBVbmtub3duUnBjRXJyb3I7CiAgdmFyIGluaXRfcnBjID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL3JwYy5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X3JlcXVlc3QoKTsKICAgICAgdW5rbm93bkVycm9yQ29kZSA9IC0xOwogICAgICBScGNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UsIHsgY29kZSwgZG9jc1BhdGg6IGRvY3NQYXRoOSwgbWV0YU1lc3NhZ2VzLCBuYW1lLCBzaG9ydE1lc3NhZ2UgfSkgewogICAgICAgICAgc3VwZXIoc2hvcnRNZXNzYWdlLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IG1ldGFNZXNzYWdlcyB8fCBjYXVzZT8ubWV0YU1lc3NhZ2VzLAogICAgICAgICAgICBuYW1lOiBuYW1lIHx8ICJScGNFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJjb2RlIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWUgfHwgY2F1c2UubmFtZTsKICAgICAgICAgIHRoaXMuY29kZSA9IGNhdXNlIGluc3RhbmNlb2YgUnBjUmVxdWVzdEVycm9yID8gY2F1c2UuY29kZSA6IGNvZGUgPz8gdW5rbm93bkVycm9yQ29kZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFByb3ZpZGVyUnBjRXJyb3IgPSBjbGFzcyBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgb3B0aW9ucykgewogICAgICAgICAgc3VwZXIoY2F1c2UsIG9wdGlvbnMpOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkYXRhIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGF0YSA9IG9wdGlvbnMuZGF0YTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFBhcnNlUnBjRXJyb3IgPSBjbGFzcyBfUGFyc2VScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1BhcnNlUnBjRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlBhcnNlUnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJJbnZhbGlkIEpTT04gd2FzIHJlY2VpdmVkIGJ5IHRoZSBzZXJ2ZXIuIEFuIGVycm9yIG9jY3VycmVkIG9uIHRoZSBzZXJ2ZXIgd2hpbGUgcGFyc2luZyB0aGUgSlNPTiB0ZXh0LiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhcnNlUnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzI3MDAKICAgICAgfSk7CiAgICAgIEludmFsaWRSZXF1ZXN0UnBjRXJyb3IgPSBjbGFzcyBfSW52YWxpZFJlcXVlc3RScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX0ludmFsaWRSZXF1ZXN0UnBjRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIkludmFsaWRSZXF1ZXN0UnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJKU09OIGlzIG5vdCBhIHZhbGlkIHJlcXVlc3Qgb2JqZWN0LiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEludmFsaWRSZXF1ZXN0UnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzI2MDAKICAgICAgfSk7CiAgICAgIE1ldGhvZE5vdEZvdW5kUnBjRXJyb3IgPSBjbGFzcyBfTWV0aG9kTm90Rm91bmRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBtZXRob2QgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfTWV0aG9kTm90Rm91bmRScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiTWV0aG9kTm90Rm91bmRScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogYFRoZSBtZXRob2Qke21ldGhvZCA/IGAgIiR7bWV0aG9kfSJgIDogIiJ9IGRvZXMgbm90IGV4aXN0IC8gaXMgbm90IGF2YWlsYWJsZS5gCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXRob2ROb3RGb3VuZFJwY0Vycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogLTMyNjAxCiAgICAgIH0pOwogICAgICBJbnZhbGlkUGFyYW1zUnBjRXJyb3IgPSBjbGFzcyBfSW52YWxpZFBhcmFtc1JwY0Vycm9yIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfSW52YWxpZFBhcmFtc1JwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkUGFyYW1zUnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6IFsKICAgICAgICAgICAgICAiSW52YWxpZCBwYXJhbWV0ZXJzIHdlcmUgcHJvdmlkZWQgdG8gdGhlIFJQQyBtZXRob2QuIiwKICAgICAgICAgICAgICAiRG91YmxlIGNoZWNrIHlvdSBoYXZlIHByb3ZpZGVkIHRoZSBjb3JyZWN0IHBhcmFtZXRlcnMuIgogICAgICAgICAgICBdLmpvaW4oIlxuIikKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEludmFsaWRQYXJhbXNScGNFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC0zMjYwMgogICAgICB9KTsKICAgICAgSW50ZXJuYWxScGNFcnJvciA9IGNsYXNzIF9JbnRlcm5hbFJwY0Vycm9yIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfSW50ZXJuYWxScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiSW50ZXJuYWxScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIkFuIGludGVybmFsIGVycm9yIHdhcyByZWNlaXZlZC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRlcm5hbFJwY0Vycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogLTMyNjAzCiAgICAgIH0pOwogICAgICBJbnZhbGlkSW5wdXRScGNFcnJvciA9IGNsYXNzIF9JbnZhbGlkSW5wdXRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX0ludmFsaWRJbnB1dFJwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkSW5wdXRScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogWwogICAgICAgICAgICAgICJNaXNzaW5nIG9yIGludmFsaWQgcGFyYW1ldGVycy4iLAogICAgICAgICAgICAgICJEb3VibGUgY2hlY2sgeW91IGhhdmUgcHJvdmlkZWQgdGhlIGNvcnJlY3QgcGFyYW1ldGVycy4iCiAgICAgICAgICAgIF0uam9pbigiXG4iKQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW52YWxpZElucHV0UnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzJlMwogICAgICB9KTsKICAgICAgUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yID0gY2xhc3MgX1Jlc291cmNlTm90Rm91bmRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1Jlc291cmNlTm90Rm91bmRScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiUmVxdWVzdGVkIHJlc291cmNlIG5vdCBmb3VuZC4iCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJSZXNvdXJjZU5vdEZvdW5kUnBjRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZXNvdXJjZU5vdEZvdW5kUnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzIwMDEKICAgICAgfSk7CiAgICAgIFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciA9IGNsYXNzIF9SZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IgZXh0ZW5kcyBScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UpIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9SZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIlJlcXVlc3RlZCByZXNvdXJjZSBub3QgYXZhaWxhYmxlLiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC0zMjAwMgogICAgICB9KTsKICAgICAgVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yID0gY2xhc3MgX1RyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1RyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiVHJhbnNhY3Rpb24gY3JlYXRpb24gZmFpbGVkLiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC0zMjAwMwogICAgICB9KTsKICAgICAgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IgPSBjbGFzcyBfTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IgZXh0ZW5kcyBScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UsIHsgbWV0aG9kIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX01ldGhvZE5vdFN1cHBvcnRlZFJwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJNZXRob2ROb3RTdXBwb3J0ZWRScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogYE1ldGhvZCR7bWV0aG9kID8gYCAiJHttZXRob2R9ImAgOiAiIn0gaXMgbm90IGltcGxlbWVudGVkLmAKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1ldGhvZE5vdFN1cHBvcnRlZFJwY0Vycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogLTMyMDA0CiAgICAgIH0pOwogICAgICBMaW1pdEV4Y2VlZGVkUnBjRXJyb3IgPSBjbGFzcyBfTGltaXRFeGNlZWRlZFJwY0Vycm9yIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfTGltaXRFeGNlZWRlZFJwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJMaW1pdEV4Y2VlZGVkUnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJSZXF1ZXN0IGV4Y2VlZHMgZGVmaW5lZCBsaW1pdC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaW1pdEV4Y2VlZGVkUnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzIwMDUKICAgICAgfSk7CiAgICAgIEpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvciA9IGNsYXNzIF9Kc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UpIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9Kc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIkpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIlZlcnNpb24gb2YgSlNPTi1SUEMgcHJvdG9jb2wgaXMgbm90IHN1cHBvcnRlZC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzIwMDYKICAgICAgfSk7CiAgICAgIFVzZXJSZWplY3RlZFJlcXVlc3RFcnJvciA9IGNsYXNzIF9Vc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBQcm92aWRlclJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1VzZXJSZWplY3RlZFJlcXVlc3RFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiVXNlclJlamVjdGVkUmVxdWVzdEVycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiVXNlciByZWplY3RlZCB0aGUgcmVxdWVzdC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiA0MDAxCiAgICAgIH0pOwogICAgICBVbmF1dGhvcml6ZWRQcm92aWRlckVycm9yID0gY2xhc3MgX1VuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IgZXh0ZW5kcyBQcm92aWRlclJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1VuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlVuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJUaGUgcmVxdWVzdGVkIG1ldGhvZCBhbmQvb3IgYWNjb3VudCBoYXMgbm90IGJlZW4gYXV0aG9yaXplZCBieSB0aGUgdXNlci4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVbmF1dGhvcml6ZWRQcm92aWRlckVycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogNDEwMAogICAgICB9KTsKICAgICAgVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yID0gY2xhc3MgX1Vuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvciBleHRlbmRzIFByb3ZpZGVyUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlLCB7IG1ldGhvZCB9ID0ge30pIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9VbnN1cHBvcnRlZFByb3ZpZGVyTWV0aG9kRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlVuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogYFRoZSBQcm92aWRlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQgbWV0aG9kJHttZXRob2QgPyBgICIgJHttZXRob2R9ImAgOiAiIn0uYAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogNDIwMAogICAgICB9KTsKICAgICAgUHJvdmlkZXJEaXNjb25uZWN0ZWRFcnJvciA9IGNsYXNzIF9Qcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yIGV4dGVuZHMgUHJvdmlkZXJScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UpIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9Qcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJQcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiVGhlIFByb3ZpZGVyIGlzIGRpc2Nvbm5lY3RlZCBmcm9tIGFsbCBjaGFpbnMuIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUHJvdmlkZXJEaXNjb25uZWN0ZWRFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IDQ5MDAKICAgICAgfSk7CiAgICAgIENoYWluRGlzY29ubmVjdGVkRXJyb3IgPSBjbGFzcyBfQ2hhaW5EaXNjb25uZWN0ZWRFcnJvciBleHRlbmRzIFByb3ZpZGVyUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfQ2hhaW5EaXNjb25uZWN0ZWRFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiQ2hhaW5EaXNjb25uZWN0ZWRFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIlRoZSBQcm92aWRlciBpcyBub3QgY29ubmVjdGVkIHRvIHRoZSByZXF1ZXN0ZWQgY2hhaW4uIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2hhaW5EaXNjb25uZWN0ZWRFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IDQ5MDEKICAgICAgfSk7CiAgICAgIFN3aXRjaENoYWluRXJyb3IgPSBjbGFzcyBfU3dpdGNoQ2hhaW5FcnJvciBleHRlbmRzIFByb3ZpZGVyUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfU3dpdGNoQ2hhaW5FcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiU3dpdGNoQ2hhaW5FcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIkFuIGVycm9yIG9jY3VycmVkIHdoZW4gYXR0ZW1wdGluZyB0byBzd2l0Y2ggY2hhaW4uIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3dpdGNoQ2hhaW5FcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IDQ5MDIKICAgICAgfSk7CiAgICAgIFVua25vd25ScGNFcnJvciA9IGNsYXNzIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBuYW1lOiAiVW5rbm93blJwY0Vycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiQW4gdW5rbm93biBSUEMgZXJyb3Igb2NjdXJyZWQuIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vX21kLmpzCiAgZnVuY3Rpb24gc2V0QmlnVWludDY0KHZpZXcsIGJ5dGVPZmZzZXQsIHZhbHVlLCBpc0xFMikgewogICAgaWYgKHR5cGVvZiB2aWV3LnNldEJpZ1VpbnQ2NCA9PT0gImZ1bmN0aW9uIikKICAgICAgcmV0dXJuIHZpZXcuc2V0QmlnVWludDY0KGJ5dGVPZmZzZXQsIHZhbHVlLCBpc0xFMik7CiAgICBjb25zdCBfMzJuMiA9IEJpZ0ludCgzMik7CiAgICBjb25zdCBfdTMyX21heCA9IEJpZ0ludCg0Mjk0OTY3Mjk1KTsKICAgIGNvbnN0IHdoID0gTnVtYmVyKHZhbHVlID4+IF8zMm4yICYgX3UzMl9tYXgpOwogICAgY29uc3Qgd2wgPSBOdW1iZXIodmFsdWUgJiBfdTMyX21heCk7CiAgICBjb25zdCBoID0gaXNMRTIgPyA0IDogMDsKICAgIGNvbnN0IGwgPSBpc0xFMiA/IDAgOiA0OwogICAgdmlldy5zZXRVaW50MzIoYnl0ZU9mZnNldCArIGgsIHdoLCBpc0xFMik7CiAgICB2aWV3LnNldFVpbnQzMihieXRlT2Zmc2V0ICsgbCwgd2wsIGlzTEUyKTsKICB9CiAgdmFyIENoaSwgTWFqLCBIYXNoTUQ7CiAgdmFyIGluaXRfbWQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL19tZC5qcyIoKSB7CiAgICAgIGluaXRfYXNzZXJ0KCk7CiAgICAgIGluaXRfdXRpbHMyKCk7CiAgICAgIENoaSA9IChhLCBiLCBjKSA9PiBhICYgYiBeIH5hICYgYzsKICAgICAgTWFqID0gKGEsIGIsIGMpID0+IGEgJiBiIF4gYSAmIGMgXiBiICYgYzsKICAgICAgSGFzaE1EID0gY2xhc3MgZXh0ZW5kcyBIYXNoIHsKICAgICAgICBjb25zdHJ1Y3RvcihibG9ja0xlbiwgb3V0cHV0TGVuLCBwYWRPZmZzZXQsIGlzTEUyKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgdGhpcy5ibG9ja0xlbiA9IGJsb2NrTGVuOwogICAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0aGlzLnBhZE9mZnNldCA9IHBhZE9mZnNldDsKICAgICAgICAgIHRoaXMuaXNMRSA9IGlzTEUyOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy5sZW5ndGggPSAwOwogICAgICAgICAgdGhpcy5wb3MgPSAwOwogICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tMZW4pOwogICAgICAgICAgdGhpcy52aWV3ID0gY3JlYXRlVmlldyh0aGlzLmJ1ZmZlcik7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZShkYXRhKSB7CiAgICAgICAgICBleGlzdHModGhpcyk7CiAgICAgICAgICBjb25zdCB7IHZpZXcsIGJ1ZmZlcjogYnVmZmVyMiwgYmxvY2tMZW4gfSA9IHRoaXM7CiAgICAgICAgICBkYXRhID0gdG9CeXRlczIoZGF0YSk7CiAgICAgICAgICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aDsKICAgICAgICAgIGZvciAobGV0IHBvcyA9IDA7IHBvcyA8IGxlbjsgKSB7CiAgICAgICAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihibG9ja0xlbiAtIHRoaXMucG9zLCBsZW4gLSBwb3MpOwogICAgICAgICAgICBpZiAodGFrZSA9PT0gYmxvY2tMZW4pIHsKICAgICAgICAgICAgICBjb25zdCBkYXRhVmlldyA9IGNyZWF0ZVZpZXcoZGF0YSk7CiAgICAgICAgICAgICAgZm9yICg7IGJsb2NrTGVuIDw9IGxlbiAtIHBvczsgcG9zICs9IGJsb2NrTGVuKQogICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzKGRhdGFWaWV3LCBwb3MpOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJ1ZmZlcjIuc2V0KGRhdGEuc3ViYXJyYXkocG9zLCBwb3MgKyB0YWtlKSwgdGhpcy5wb3MpOwogICAgICAgICAgICB0aGlzLnBvcyArPSB0YWtlOwogICAgICAgICAgICBwb3MgKz0gdGFrZTsKICAgICAgICAgICAgaWYgKHRoaXMucG9zID09PSBibG9ja0xlbikgewogICAgICAgICAgICAgIHRoaXMucHJvY2Vzcyh2aWV3LCAwKTsKICAgICAgICAgICAgICB0aGlzLnBvcyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHRoaXMubGVuZ3RoICs9IGRhdGEubGVuZ3RoOwogICAgICAgICAgdGhpcy5yb3VuZENsZWFuKCk7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgZGlnZXN0SW50byhvdXQpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzKTsKICAgICAgICAgIG91dHB1dChvdXQsIHRoaXMpOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IHRydWU7CiAgICAgICAgICBjb25zdCB7IGJ1ZmZlcjogYnVmZmVyMiwgdmlldywgYmxvY2tMZW4sIGlzTEU6IGlzTEUyIH0gPSB0aGlzOwogICAgICAgICAgbGV0IHsgcG9zIH0gPSB0aGlzOwogICAgICAgICAgYnVmZmVyMltwb3MrK10gPSAxMjg7CiAgICAgICAgICB0aGlzLmJ1ZmZlci5zdWJhcnJheShwb3MpLmZpbGwoMCk7CiAgICAgICAgICBpZiAodGhpcy5wYWRPZmZzZXQgPiBibG9ja0xlbiAtIHBvcykgewogICAgICAgICAgICB0aGlzLnByb2Nlc3ModmlldywgMCk7CiAgICAgICAgICAgIHBvcyA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKGxldCBpID0gcG9zOyBpIDwgYmxvY2tMZW47IGkrKykKICAgICAgICAgICAgYnVmZmVyMltpXSA9IDA7CiAgICAgICAgICBzZXRCaWdVaW50NjQodmlldywgYmxvY2tMZW4gLSA4LCBCaWdJbnQodGhpcy5sZW5ndGggKiA4KSwgaXNMRTIpOwogICAgICAgICAgdGhpcy5wcm9jZXNzKHZpZXcsIDApOwogICAgICAgICAgY29uc3Qgb3ZpZXcgPSBjcmVhdGVWaWV3KG91dCk7CiAgICAgICAgICBjb25zdCBsZW4gPSB0aGlzLm91dHB1dExlbjsKICAgICAgICAgIGlmIChsZW4gJSA0KQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIl9zaGEyOiBvdXRwdXRMZW4gc2hvdWxkIGJlIGFsaWduZWQgdG8gMzJiaXQiKTsKICAgICAgICAgIGNvbnN0IG91dExlbiA9IGxlbiAvIDQ7CiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0KCk7CiAgICAgICAgICBpZiAob3V0TGVuID4gc3RhdGUubGVuZ3RoKQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIl9zaGEyOiBvdXRwdXRMZW4gYmlnZ2VyIHRoYW4gc3RhdGUiKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0TGVuOyBpKyspCiAgICAgICAgICAgIG92aWV3LnNldFVpbnQzMig0ICogaSwgc3RhdGVbaV0sIGlzTEUyKTsKICAgICAgICB9CiAgICAgICAgZGlnZXN0KCkgewogICAgICAgICAgY29uc3QgeyBidWZmZXI6IGJ1ZmZlcjIsIG91dHB1dExlbiB9ID0gdGhpczsKICAgICAgICAgIHRoaXMuZGlnZXN0SW50byhidWZmZXIyKTsKICAgICAgICAgIGNvbnN0IHJlcyA9IGJ1ZmZlcjIuc2xpY2UoMCwgb3V0cHV0TGVuKTsKICAgICAgICAgIHRoaXMuZGVzdHJveSgpOwogICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICB9CiAgICAgICAgX2Nsb25lSW50byh0bykgewogICAgICAgICAgdG8gfHwgKHRvID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKSk7CiAgICAgICAgICB0by5zZXQoLi4udGhpcy5nZXQoKSk7CiAgICAgICAgICBjb25zdCB7IGJsb2NrTGVuLCBidWZmZXI6IGJ1ZmZlcjIsIGxlbmd0aCwgZmluaXNoZWQsIGRlc3Ryb3llZCwgcG9zIH0gPSB0aGlzOwogICAgICAgICAgdG8ubGVuZ3RoID0gbGVuZ3RoOwogICAgICAgICAgdG8ucG9zID0gcG9zOwogICAgICAgICAgdG8uZmluaXNoZWQgPSBmaW5pc2hlZDsKICAgICAgICAgIHRvLmRlc3Ryb3llZCA9IGRlc3Ryb3llZDsKICAgICAgICAgIGlmIChsZW5ndGggJSBibG9ja0xlbikKICAgICAgICAgICAgdG8uYnVmZmVyLnNldChidWZmZXIyKTsKICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9zaGEyNTYuanMKICB2YXIgU0hBMjU2X0ssIFNIQTI1Nl9JViwgU0hBMjU2X1csIFNIQTI1Niwgc2hhMjU2OwogIHZhciBpbml0X3NoYTI1NiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vc2hhMjU2LmpzIigpIHsKICAgICAgaW5pdF9tZCgpOwogICAgICBpbml0X3V0aWxzMigpOwogICAgICBTSEEyNTZfSyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgVWludDMyQXJyYXkoWwogICAgICAgIDExMTYzNTI0MDgsCiAgICAgICAgMTg5OTQ0NzQ0MSwKICAgICAgICAzMDQ5MzIzNDcxLAogICAgICAgIDM5MjEwMDk1NzMsCiAgICAgICAgOTYxOTg3MTYzLAogICAgICAgIDE1MDg5NzA5OTMsCiAgICAgICAgMjQ1MzYzNTc0OCwKICAgICAgICAyODcwNzYzMjIxLAogICAgICAgIDM2MjQzODEwODAsCiAgICAgICAgMzEwNTk4NDAxLAogICAgICAgIDYwNzIyNTI3OCwKICAgICAgICAxNDI2ODgxOTg3LAogICAgICAgIDE5MjUwNzgzODgsCiAgICAgICAgMjE2MjA3ODIwNiwKICAgICAgICAyNjE0ODg4MTAzLAogICAgICAgIDMyNDgyMjI1ODAsCiAgICAgICAgMzgzNTM5MDQwMSwKICAgICAgICA0MDIyMjI0Nzc0LAogICAgICAgIDI2NDM0NzA3OCwKICAgICAgICA2MDQ4MDc2MjgsCiAgICAgICAgNzcwMjU1OTgzLAogICAgICAgIDEyNDkxNTAxMjIsCiAgICAgICAgMTU1NTA4MTY5MiwKICAgICAgICAxOTk2MDY0OTg2LAogICAgICAgIDI1NTQyMjA4ODIsCiAgICAgICAgMjgyMTgzNDM0OSwKICAgICAgICAyOTUyOTk2ODA4LAogICAgICAgIDMyMTAzMTM2NzEsCiAgICAgICAgMzMzNjU3MTg5MSwKICAgICAgICAzNTg0NTI4NzExLAogICAgICAgIDExMzkyNjk5MywKICAgICAgICAzMzgyNDE4OTUsCiAgICAgICAgNjY2MzA3MjA1LAogICAgICAgIDc3MzUyOTkxMiwKICAgICAgICAxMjk0NzU3MzcyLAogICAgICAgIDEzOTYxODIyOTEsCiAgICAgICAgMTY5NTE4MzcwMCwKICAgICAgICAxOTg2NjYxMDUxLAogICAgICAgIDIxNzcwMjYzNTAsCiAgICAgICAgMjQ1Njk1NjAzNywKICAgICAgICAyNzMwNDg1OTIxLAogICAgICAgIDI4MjAzMDI0MTEsCiAgICAgICAgMzI1OTczMDgwMCwKICAgICAgICAzMzQ1NzY0NzcxLAogICAgICAgIDM1MTYwNjU4MTcsCiAgICAgICAgMzYwMDM1MjgwNCwKICAgICAgICA0MDk0NTcxOTA5LAogICAgICAgIDI3NTQyMzM0NCwKICAgICAgICA0MzAyMjc3MzQsCiAgICAgICAgNTA2OTQ4NjE2LAogICAgICAgIDY1OTA2MDU1NiwKICAgICAgICA4ODM5OTc4NzcsCiAgICAgICAgOTU4MTM5NTcxLAogICAgICAgIDEzMjI4MjIyMTgsCiAgICAgICAgMTUzNzAwMjA2MywKICAgICAgICAxNzQ3ODczNzc5LAogICAgICAgIDE5NTU1NjIyMjIsCiAgICAgICAgMjAyNDEwNDgxNSwKICAgICAgICAyMjI3NzMwNDUyLAogICAgICAgIDIzNjE4NTI0MjQsCiAgICAgICAgMjQyODQzNjQ3NCwKICAgICAgICAyNzU2NzM0MTg3LAogICAgICAgIDMyMDQwMzE0NzksCiAgICAgICAgMzMyOTMyNTI5OAogICAgICBdKTsKICAgICAgU0hBMjU2X0lWID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheShbCiAgICAgICAgMTc3OTAzMzcwMywKICAgICAgICAzMTQ0MTM0Mjc3LAogICAgICAgIDEwMTM5MDQyNDIsCiAgICAgICAgMjc3MzQ4MDc2MiwKICAgICAgICAxMzU5ODkzMTE5LAogICAgICAgIDI2MDA4MjI5MjQsCiAgICAgICAgNTI4NzM0NjM1LAogICAgICAgIDE1NDE0NTkyMjUKICAgICAgXSk7CiAgICAgIFNIQTI1Nl9XID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheSg2NCk7CiAgICAgIFNIQTI1NiA9IGNsYXNzIGV4dGVuZHMgSGFzaE1EIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKDY0LCAzMiwgOCwgZmFsc2UpOwogICAgICAgICAgdGhpcy5BID0gU0hBMjU2X0lWWzBdIHwgMDsKICAgICAgICAgIHRoaXMuQiA9IFNIQTI1Nl9JVlsxXSB8IDA7CiAgICAgICAgICB0aGlzLkMgPSBTSEEyNTZfSVZbMl0gfCAwOwogICAgICAgICAgdGhpcy5EID0gU0hBMjU2X0lWWzNdIHwgMDsKICAgICAgICAgIHRoaXMuRSA9IFNIQTI1Nl9JVls0XSB8IDA7CiAgICAgICAgICB0aGlzLkYgPSBTSEEyNTZfSVZbNV0gfCAwOwogICAgICAgICAgdGhpcy5HID0gU0hBMjU2X0lWWzZdIHwgMDsKICAgICAgICAgIHRoaXMuSCA9IFNIQTI1Nl9JVls3XSB8IDA7CiAgICAgICAgfQogICAgICAgIGdldCgpIHsKICAgICAgICAgIGNvbnN0IHsgQSwgQiwgQywgRCwgRSwgRiwgRywgSCB9ID0gdGhpczsKICAgICAgICAgIHJldHVybiBbQSwgQiwgQywgRCwgRSwgRiwgRywgSF07CiAgICAgICAgfQogICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZQogICAgICAgIHNldChBLCBCLCBDLCBELCBFLCBGLCBHLCBIKSB7CiAgICAgICAgICB0aGlzLkEgPSBBIHwgMDsKICAgICAgICAgIHRoaXMuQiA9IEIgfCAwOwogICAgICAgICAgdGhpcy5DID0gQyB8IDA7CiAgICAgICAgICB0aGlzLkQgPSBEIHwgMDsKICAgICAgICAgIHRoaXMuRSA9IEUgfCAwOwogICAgICAgICAgdGhpcy5GID0gRiB8IDA7CiAgICAgICAgICB0aGlzLkcgPSBHIHwgMDsKICAgICAgICAgIHRoaXMuSCA9IEggfCAwOwogICAgICAgIH0KICAgICAgICBwcm9jZXNzKHZpZXcsIG9mZnNldCkgewogICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrLCBvZmZzZXQgKz0gNCkKICAgICAgICAgICAgU0hBMjU2X1dbaV0gPSB2aWV3LmdldFVpbnQzMihvZmZzZXQsIGZhbHNlKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAxNjsgaSA8IDY0OyBpKyspIHsKICAgICAgICAgICAgY29uc3QgVzE1ID0gU0hBMjU2X1dbaSAtIDE1XTsKICAgICAgICAgICAgY29uc3QgVzIgPSBTSEEyNTZfV1tpIC0gMl07CiAgICAgICAgICAgIGNvbnN0IHMwID0gcm90cihXMTUsIDcpIF4gcm90cihXMTUsIDE4KSBeIFcxNSA+Pj4gMzsKICAgICAgICAgICAgY29uc3QgczEgPSByb3RyKFcyLCAxNykgXiByb3RyKFcyLCAxOSkgXiBXMiA+Pj4gMTA7CiAgICAgICAgICAgIFNIQTI1Nl9XW2ldID0gczEgKyBTSEEyNTZfV1tpIC0gN10gKyBzMCArIFNIQTI1Nl9XW2kgLSAxNl0gfCAwOwogICAgICAgICAgfQogICAgICAgICAgbGV0IHsgQSwgQiwgQywgRCwgRSwgRiwgRywgSCB9ID0gdGhpczsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjQ7IGkrKykgewogICAgICAgICAgICBjb25zdCBzaWdtYTEgPSByb3RyKEUsIDYpIF4gcm90cihFLCAxMSkgXiByb3RyKEUsIDI1KTsKICAgICAgICAgICAgY29uc3QgVDEgPSBIICsgc2lnbWExICsgQ2hpKEUsIEYsIEcpICsgU0hBMjU2X0tbaV0gKyBTSEEyNTZfV1tpXSB8IDA7CiAgICAgICAgICAgIGNvbnN0IHNpZ21hMCA9IHJvdHIoQSwgMikgXiByb3RyKEEsIDEzKSBeIHJvdHIoQSwgMjIpOwogICAgICAgICAgICBjb25zdCBUMiA9IHNpZ21hMCArIE1haihBLCBCLCBDKSB8IDA7CiAgICAgICAgICAgIEggPSBHOwogICAgICAgICAgICBHID0gRjsKICAgICAgICAgICAgRiA9IEU7CiAgICAgICAgICAgIEUgPSBEICsgVDEgfCAwOwogICAgICAgICAgICBEID0gQzsKICAgICAgICAgICAgQyA9IEI7CiAgICAgICAgICAgIEIgPSBBOwogICAgICAgICAgICBBID0gVDEgKyBUMiB8IDA7CiAgICAgICAgICB9CiAgICAgICAgICBBID0gQSArIHRoaXMuQSB8IDA7CiAgICAgICAgICBCID0gQiArIHRoaXMuQiB8IDA7CiAgICAgICAgICBDID0gQyArIHRoaXMuQyB8IDA7CiAgICAgICAgICBEID0gRCArIHRoaXMuRCB8IDA7CiAgICAgICAgICBFID0gRSArIHRoaXMuRSB8IDA7CiAgICAgICAgICBGID0gRiArIHRoaXMuRiB8IDA7CiAgICAgICAgICBHID0gRyArIHRoaXMuRyB8IDA7CiAgICAgICAgICBIID0gSCArIHRoaXMuSCB8IDA7CiAgICAgICAgICB0aGlzLnNldChBLCBCLCBDLCBELCBFLCBGLCBHLCBIKTsKICAgICAgICB9CiAgICAgICAgcm91bmRDbGVhbigpIHsKICAgICAgICAgIFNIQTI1Nl9XLmZpbGwoMCk7CiAgICAgICAgfQogICAgICAgIGRlc3Ryb3koKSB7CiAgICAgICAgICB0aGlzLnNldCgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKICAgICAgICAgIHRoaXMuYnVmZmVyLmZpbGwoMCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBzaGEyNTYgPSAvKiBAX19QVVJFX18gKi8gd3JhcENvbnN0cnVjdG9yKCgpID0+IG5ldyBTSEEyNTYoKSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC91dGlscy5qcwogIHZhciB1dGlsc19leHBvcnRzID0ge307CiAgX19leHBvcnQodXRpbHNfZXhwb3J0cywgewogICAgYWJ5dGVzOiAoKSA9PiBhYnl0ZXMsCiAgICBiaXRHZXQ6ICgpID0+IGJpdEdldCwKICAgIGJpdExlbjogKCkgPT4gYml0TGVuLAogICAgYml0TWFzazogKCkgPT4gYml0TWFzaywKICAgIGJpdFNldDogKCkgPT4gYml0U2V0LAogICAgYnl0ZXNUb0hleDogKCkgPT4gYnl0ZXNUb0hleDIsCiAgICBieXRlc1RvTnVtYmVyQkU6ICgpID0+IGJ5dGVzVG9OdW1iZXJCRSwKICAgIGJ5dGVzVG9OdW1iZXJMRTogKCkgPT4gYnl0ZXNUb051bWJlckxFLAogICAgY29uY2F0Qnl0ZXM6ICgpID0+IGNvbmNhdEJ5dGVzMywKICAgIGNyZWF0ZUhtYWNEcmJnOiAoKSA9PiBjcmVhdGVIbWFjRHJiZywKICAgIGVuc3VyZUJ5dGVzOiAoKSA9PiBlbnN1cmVCeXRlcywKICAgIGVxdWFsQnl0ZXM6ICgpID0+IGVxdWFsQnl0ZXMsCiAgICBoZXhUb0J5dGVzOiAoKSA9PiBoZXhUb0J5dGVzMiwKICAgIGhleFRvTnVtYmVyOiAoKSA9PiBoZXhUb051bWJlcjIsCiAgICBpc0J5dGVzOiAoKSA9PiBpc0J5dGVzMiwKICAgIG51bWJlclRvQnl0ZXNCRTogKCkgPT4gbnVtYmVyVG9CeXRlc0JFLAogICAgbnVtYmVyVG9CeXRlc0xFOiAoKSA9PiBudW1iZXJUb0J5dGVzTEUsCiAgICBudW1iZXJUb0hleFVucGFkZGVkOiAoKSA9PiBudW1iZXJUb0hleFVucGFkZGVkLAogICAgbnVtYmVyVG9WYXJCeXRlc0JFOiAoKSA9PiBudW1iZXJUb1ZhckJ5dGVzQkUsCiAgICB1dGY4VG9CeXRlczogKCkgPT4gdXRmOFRvQnl0ZXMyLAogICAgdmFsaWRhdGVPYmplY3Q6ICgpID0+IHZhbGlkYXRlT2JqZWN0CiAgfSk7CiAgZnVuY3Rpb24gaXNCeXRlczIoYSkgewogICAgcmV0dXJuIGEgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IGEgIT0gbnVsbCAmJiB0eXBlb2YgYSA9PT0gIm9iamVjdCIgJiYgYS5jb25zdHJ1Y3Rvci5uYW1lID09PSAiVWludDhBcnJheSI7CiAgfQogIGZ1bmN0aW9uIGFieXRlcyhpdGVtKSB7CiAgICBpZiAoIWlzQnl0ZXMyKGl0ZW0pKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVpbnQ4QXJyYXkgZXhwZWN0ZWQiKTsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb0hleDIoYnl0ZXMyKSB7CiAgICBhYnl0ZXMoYnl0ZXMyKTsKICAgIGxldCBoZXggPSAiIjsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMyLmxlbmd0aDsgaSsrKSB7CiAgICAgIGhleCArPSBoZXhlczJbYnl0ZXMyW2ldXTsKICAgIH0KICAgIHJldHVybiBoZXg7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvSGV4VW5wYWRkZWQobnVtKSB7CiAgICBjb25zdCBoZXggPSBudW0udG9TdHJpbmcoMTYpOwogICAgcmV0dXJuIGhleC5sZW5ndGggJiAxID8gYDAke2hleH1gIDogaGV4OwogIH0KICBmdW5jdGlvbiBoZXhUb051bWJlcjIoaGV4KSB7CiAgICBpZiAodHlwZW9mIGhleCAhPT0gInN0cmluZyIpCiAgICAgIHRocm93IG5ldyBFcnJvcigiaGV4IHN0cmluZyBleHBlY3RlZCwgZ290ICIgKyB0eXBlb2YgaGV4KTsKICAgIHJldHVybiBCaWdJbnQoaGV4ID09PSAiIiA/ICIwIiA6IGAweCR7aGV4fWApOwogIH0KICBmdW5jdGlvbiBhc2NpaVRvQmFzZTE2KGNoYXIpIHsKICAgIGlmIChjaGFyID49IGFzY2lpcy5fMCAmJiBjaGFyIDw9IGFzY2lpcy5fOSkKICAgICAgcmV0dXJuIGNoYXIgLSBhc2NpaXMuXzA7CiAgICBpZiAoY2hhciA+PSBhc2NpaXMuX0EgJiYgY2hhciA8PSBhc2NpaXMuX0YpCiAgICAgIHJldHVybiBjaGFyIC0gKGFzY2lpcy5fQSAtIDEwKTsKICAgIGlmIChjaGFyID49IGFzY2lpcy5fYSAmJiBjaGFyIDw9IGFzY2lpcy5fZikKICAgICAgcmV0dXJuIGNoYXIgLSAoYXNjaWlzLl9hIC0gMTApOwogICAgcmV0dXJuOwogIH0KICBmdW5jdGlvbiBoZXhUb0J5dGVzMihoZXgpIHsKICAgIGlmICh0eXBlb2YgaGV4ICE9PSAic3RyaW5nIikKICAgICAgdGhyb3cgbmV3IEVycm9yKCJoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgIiArIHR5cGVvZiBoZXgpOwogICAgY29uc3QgaGwgPSBoZXgubGVuZ3RoOwogICAgY29uc3QgYWwgPSBobCAvIDI7CiAgICBpZiAoaGwgJSAyKQogICAgICB0aHJvdyBuZXcgRXJyb3IoInBhZGRlZCBoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgdW5wYWRkZWQgaGV4IG9mIGxlbmd0aCAiICsgaGwpOwogICAgY29uc3QgYXJyYXkgPSBuZXcgVWludDhBcnJheShhbCk7CiAgICBmb3IgKGxldCBhaSA9IDAsIGhpID0gMDsgYWkgPCBhbDsgYWkrKywgaGkgKz0gMikgewogICAgICBjb25zdCBuMSA9IGFzY2lpVG9CYXNlMTYoaGV4LmNoYXJDb2RlQXQoaGkpKTsKICAgICAgY29uc3QgbjIgPSBhc2NpaVRvQmFzZTE2KGhleC5jaGFyQ29kZUF0KGhpICsgMSkpOwogICAgICBpZiAobjEgPT09IHZvaWQgMCB8fCBuMiA9PT0gdm9pZCAwKSB7CiAgICAgICAgY29uc3QgY2hhciA9IGhleFtoaV0gKyBoZXhbaGkgKyAxXTsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCBub24taGV4IGNoYXJhY3RlciAiJyArIGNoYXIgKyAnIiBhdCBpbmRleCAnICsgaGkpOwogICAgICB9CiAgICAgIGFycmF5W2FpXSA9IG4xICogMTYgKyBuMjsKICAgIH0KICAgIHJldHVybiBhcnJheTsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb051bWJlckJFKGJ5dGVzMikgewogICAgcmV0dXJuIGhleFRvTnVtYmVyMihieXRlc1RvSGV4MihieXRlczIpKTsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb051bWJlckxFKGJ5dGVzMikgewogICAgYWJ5dGVzKGJ5dGVzMik7CiAgICByZXR1cm4gaGV4VG9OdW1iZXIyKGJ5dGVzVG9IZXgyKFVpbnQ4QXJyYXkuZnJvbShieXRlczIpLnJldmVyc2UoKSkpOwogIH0KICBmdW5jdGlvbiBudW1iZXJUb0J5dGVzQkUobiwgbGVuKSB7CiAgICByZXR1cm4gaGV4VG9CeXRlczIobi50b1N0cmluZygxNikucGFkU3RhcnQobGVuICogMiwgIjAiKSk7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvQnl0ZXNMRShuLCBsZW4pIHsKICAgIHJldHVybiBudW1iZXJUb0J5dGVzQkUobiwgbGVuKS5yZXZlcnNlKCk7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvVmFyQnl0ZXNCRShuKSB7CiAgICByZXR1cm4gaGV4VG9CeXRlczIobnVtYmVyVG9IZXhVbnBhZGRlZChuKSk7CiAgfQogIGZ1bmN0aW9uIGVuc3VyZUJ5dGVzKHRpdGxlLCBoZXgsIGV4cGVjdGVkTGVuZ3RoKSB7CiAgICBsZXQgcmVzOwogICAgaWYgKHR5cGVvZiBoZXggPT09ICJzdHJpbmciKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmVzID0gaGV4VG9CeXRlczIoaGV4KTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aXRsZX0gbXVzdCBiZSB2YWxpZCBoZXggc3RyaW5nLCBnb3QgIiR7aGV4fSIuIENhdXNlOiAke2V9YCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXNCeXRlczIoaGV4KSkgewogICAgICByZXMgPSBVaW50OEFycmF5LmZyb20oaGV4KTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aXRsZX0gbXVzdCBiZSBoZXggc3RyaW5nIG9yIFVpbnQ4QXJyYXlgKTsKICAgIH0KICAgIGNvbnN0IGxlbiA9IHJlcy5sZW5ndGg7CiAgICBpZiAodHlwZW9mIGV4cGVjdGVkTGVuZ3RoID09PSAibnVtYmVyIiAmJiBsZW4gIT09IGV4cGVjdGVkTGVuZ3RoKQogICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGl0bGV9IGV4cGVjdGVkICR7ZXhwZWN0ZWRMZW5ndGh9IGJ5dGVzLCBnb3QgJHtsZW59YCk7CiAgICByZXR1cm4gcmVzOwogIH0KICBmdW5jdGlvbiBjb25jYXRCeXRlczMoLi4uYXJyYXlzKSB7CiAgICBsZXQgc3VtID0gMDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IGEgPSBhcnJheXNbaV07CiAgICAgIGFieXRlcyhhKTsKICAgICAgc3VtICs9IGEubGVuZ3RoOwogICAgfQogICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc3VtKTsKICAgIGZvciAobGV0IGkgPSAwLCBwYWQyID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhID0gYXJyYXlzW2ldOwogICAgICByZXMuc2V0KGEsIHBhZDIpOwogICAgICBwYWQyICs9IGEubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9CiAgZnVuY3Rpb24gZXF1YWxCeXRlcyhhLCBiKSB7CiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgZGlmZiA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspCiAgICAgIGRpZmYgfD0gYVtpXSBeIGJbaV07CiAgICByZXR1cm4gZGlmZiA9PT0gMDsKICB9CiAgZnVuY3Rpb24gdXRmOFRvQnl0ZXMyKHN0cikgewogICAgaWYgKHR5cGVvZiBzdHIgIT09ICJzdHJpbmciKQogICAgICB0aHJvdyBuZXcgRXJyb3IoYHV0ZjhUb0J5dGVzIGV4cGVjdGVkIHN0cmluZywgZ290ICR7dHlwZW9mIHN0cn1gKTsKICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyKSk7CiAgfQogIGZ1bmN0aW9uIGJpdExlbihuKSB7CiAgICBsZXQgbGVuOwogICAgZm9yIChsZW4gPSAwOyBuID4gXzBuMjsgbiA+Pj0gXzFuMiwgbGVuICs9IDEpCiAgICAgIDsKICAgIHJldHVybiBsZW47CiAgfQogIGZ1bmN0aW9uIGJpdEdldChuLCBwb3MpIHsKICAgIHJldHVybiBuID4+IEJpZ0ludChwb3MpICYgXzFuMjsKICB9CiAgZnVuY3Rpb24gYml0U2V0KG4sIHBvcywgdmFsdWUpIHsKICAgIHJldHVybiBuIHwgKHZhbHVlID8gXzFuMiA6IF8wbjIpIDw8IEJpZ0ludChwb3MpOwogIH0KICBmdW5jdGlvbiBjcmVhdGVIbWFjRHJiZyhoYXNoTGVuLCBxQnl0ZUxlbiwgaG1hY0ZuKSB7CiAgICBpZiAodHlwZW9mIGhhc2hMZW4gIT09ICJudW1iZXIiIHx8IGhhc2hMZW4gPCAyKQogICAgICB0aHJvdyBuZXcgRXJyb3IoImhhc2hMZW4gbXVzdCBiZSBhIG51bWJlciIpOwogICAgaWYgKHR5cGVvZiBxQnl0ZUxlbiAhPT0gIm51bWJlciIgfHwgcUJ5dGVMZW4gPCAyKQogICAgICB0aHJvdyBuZXcgRXJyb3IoInFCeXRlTGVuIG11c3QgYmUgYSBudW1iZXIiKTsKICAgIGlmICh0eXBlb2YgaG1hY0ZuICE9PSAiZnVuY3Rpb24iKQogICAgICB0aHJvdyBuZXcgRXJyb3IoImhtYWNGbiBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKICAgIGxldCB2ID0gdThuKGhhc2hMZW4pOwogICAgbGV0IGsgPSB1OG4oaGFzaExlbik7CiAgICBsZXQgaSA9IDA7CiAgICBjb25zdCByZXNldDIgPSAoKSA9PiB7CiAgICAgIHYuZmlsbCgxKTsKICAgICAgay5maWxsKDApOwogICAgICBpID0gMDsKICAgIH07CiAgICBjb25zdCBoID0gKC4uLmIpID0+IGhtYWNGbihrLCB2LCAuLi5iKTsKICAgIGNvbnN0IHJlc2VlZCA9IChzZWVkID0gdThuKCkpID0+IHsKICAgICAgayA9IGgodThmcihbMF0pLCBzZWVkKTsKICAgICAgdiA9IGgoKTsKICAgICAgaWYgKHNlZWQubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgayA9IGgodThmcihbMV0pLCBzZWVkKTsKICAgICAgdiA9IGgoKTsKICAgIH07CiAgICBjb25zdCBnZW4yID0gKCkgPT4gewogICAgICBpZiAoaSsrID49IDFlMykKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImRyYmc6IHRyaWVkIDEwMDAgdmFsdWVzIik7CiAgICAgIGxldCBsZW4gPSAwOwogICAgICBjb25zdCBvdXQgPSBbXTsKICAgICAgd2hpbGUgKGxlbiA8IHFCeXRlTGVuKSB7CiAgICAgICAgdiA9IGgoKTsKICAgICAgICBjb25zdCBzbCA9IHYuc2xpY2UoKTsKICAgICAgICBvdXQucHVzaChzbCk7CiAgICAgICAgbGVuICs9IHYubGVuZ3RoOwogICAgICB9CiAgICAgIHJldHVybiBjb25jYXRCeXRlczMoLi4ub3V0KTsKICAgIH07CiAgICBjb25zdCBnZW5VbnRpbCA9IChzZWVkLCBwcmVkKSA9PiB7CiAgICAgIHJlc2V0MigpOwogICAgICByZXNlZWQoc2VlZCk7CiAgICAgIGxldCByZXMgPSB2b2lkIDA7CiAgICAgIHdoaWxlICghKHJlcyA9IHByZWQoZ2VuMigpKSkpCiAgICAgICAgcmVzZWVkKCk7CiAgICAgIHJlc2V0MigpOwogICAgICByZXR1cm4gcmVzOwogICAgfTsKICAgIHJldHVybiBnZW5VbnRpbDsKICB9CiAgZnVuY3Rpb24gdmFsaWRhdGVPYmplY3Qob2JqZWN0LCB2YWxpZGF0b3JzLCBvcHRWYWxpZGF0b3JzID0ge30pIHsKICAgIGNvbnN0IGNoZWNrRmllbGQgPSAoZmllbGROYW1lLCB0eXBlLCBpc09wdGlvbmFsKSA9PiB7CiAgICAgIGNvbnN0IGNoZWNrVmFsID0gdmFsaWRhdG9yRm5zW3R5cGVdOwogICAgICBpZiAodHlwZW9mIGNoZWNrVmFsICE9PSAiZnVuY3Rpb24iKQogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWxpZGF0b3IgIiR7dHlwZX0iLCBleHBlY3RlZCBmdW5jdGlvbmApOwogICAgICBjb25zdCB2YWwgPSBvYmplY3RbZmllbGROYW1lXTsKICAgICAgaWYgKGlzT3B0aW9uYWwgJiYgdmFsID09PSB2b2lkIDApCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoIWNoZWNrVmFsKHZhbCwgb2JqZWN0KSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbSAke1N0cmluZyhmaWVsZE5hbWUpfT0ke3ZhbH0gKCR7dHlwZW9mIHZhbH0pLCBleHBlY3RlZCAke3R5cGV9YCk7CiAgICAgIH0KICAgIH07CiAgICBmb3IgKGNvbnN0IFtmaWVsZE5hbWUsIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbGlkYXRvcnMpKQogICAgICBjaGVja0ZpZWxkKGZpZWxkTmFtZSwgdHlwZSwgZmFsc2UpOwogICAgZm9yIChjb25zdCBbZmllbGROYW1lLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhvcHRWYWxpZGF0b3JzKSkKICAgICAgY2hlY2tGaWVsZChmaWVsZE5hbWUsIHR5cGUsIHRydWUpOwogICAgcmV0dXJuIG9iamVjdDsKICB9CiAgdmFyIF8wbjIsIF8xbjIsIF8ybjIsIGhleGVzMiwgYXNjaWlzLCBiaXRNYXNrLCB1OG4sIHU4ZnIsIHZhbGlkYXRvckZuczsKICB2YXIgaW5pdF91dGlsczQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L3V0aWxzLmpzIigpIHsKICAgICAgXzBuMiA9IEJpZ0ludCgwKTsKICAgICAgXzFuMiA9IEJpZ0ludCgxKTsKICAgICAgXzJuMiA9IEJpZ0ludCgyKTsKICAgICAgaGV4ZXMyID0gLyogQF9fUFVSRV9fICovIEFycmF5LmZyb20oeyBsZW5ndGg6IDI1NiB9LCAoXywgaSkgPT4gaS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgIjAiKSk7CiAgICAgIGFzY2lpcyA9IHsgXzA6IDQ4LCBfOTogNTcsIF9BOiA2NSwgX0Y6IDcwLCBfYTogOTcsIF9mOiAxMDIgfTsKICAgICAgYml0TWFzayA9IChuKSA9PiAoXzJuMiA8PCBCaWdJbnQobiAtIDEpKSAtIF8xbjI7CiAgICAgIHU4biA9IChkYXRhKSA9PiBuZXcgVWludDhBcnJheShkYXRhKTsKICAgICAgdThmciA9IChhcnIpID0+IFVpbnQ4QXJyYXkuZnJvbShhcnIpOwogICAgICB2YWxpZGF0b3JGbnMgPSB7CiAgICAgICAgYmlnaW50OiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAiYmlnaW50IiwKICAgICAgICBmdW5jdGlvbjogKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gImZ1bmN0aW9uIiwKICAgICAgICBib29sZWFuOiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAiYm9vbGVhbiIsCiAgICAgICAgc3RyaW5nOiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAic3RyaW5nIiwKICAgICAgICBzdHJpbmdPclVpbnQ4QXJyYXk6ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICJzdHJpbmciIHx8IGlzQnl0ZXMyKHZhbCksCiAgICAgICAgaXNTYWZlSW50ZWdlcjogKHZhbCkgPT4gTnVtYmVyLmlzU2FmZUludGVnZXIodmFsKSwKICAgICAgICBhcnJheTogKHZhbCkgPT4gQXJyYXkuaXNBcnJheSh2YWwpLAogICAgICAgIGZpZWxkOiAodmFsLCBvYmplY3QpID0+IG9iamVjdC5GcC5pc1ZhbGlkKHZhbCksCiAgICAgICAgaGFzaDogKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gImZ1bmN0aW9uIiAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWwub3V0cHV0TGVuKQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvbW9kdWxhci5qcwogIGZ1bmN0aW9uIG1vZChhLCBiKSB7CiAgICBjb25zdCByZXN1bHQgPSBhICUgYjsKICAgIHJldHVybiByZXN1bHQgPj0gXzBuMyA/IHJlc3VsdCA6IGIgKyByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIHBvdyhudW0sIHBvd2VyLCBtb2R1bG8pIHsKICAgIGlmIChtb2R1bG8gPD0gXzBuMyB8fCBwb3dlciA8IF8wbjMpCiAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcG93ZXIvbW9kdWxvID4gMCIpOwogICAgaWYgKG1vZHVsbyA9PT0gXzFuMykKICAgICAgcmV0dXJuIF8wbjM7CiAgICBsZXQgcmVzID0gXzFuMzsKICAgIHdoaWxlIChwb3dlciA+IF8wbjMpIHsKICAgICAgaWYgKHBvd2VyICYgXzFuMykKICAgICAgICByZXMgPSByZXMgKiBudW0gJSBtb2R1bG87CiAgICAgIG51bSA9IG51bSAqIG51bSAlIG1vZHVsbzsKICAgICAgcG93ZXIgPj49IF8xbjM7CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KICBmdW5jdGlvbiBwb3cyKHgsIHBvd2VyLCBtb2R1bG8pIHsKICAgIGxldCByZXMgPSB4OwogICAgd2hpbGUgKHBvd2VyLS0gPiBfMG4zKSB7CiAgICAgIHJlcyAqPSByZXM7CiAgICAgIHJlcyAlPSBtb2R1bG87CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KICBmdW5jdGlvbiBpbnZlcnQobnVtYmVyMiwgbW9kdWxvKSB7CiAgICBpZiAobnVtYmVyMiA9PT0gXzBuMyB8fCBtb2R1bG8gPD0gXzBuMykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmVydDogZXhwZWN0ZWQgcG9zaXRpdmUgaW50ZWdlcnMsIGdvdCBuPSR7bnVtYmVyMn0gbW9kPSR7bW9kdWxvfWApOwogICAgfQogICAgbGV0IGEgPSBtb2QobnVtYmVyMiwgbW9kdWxvKTsKICAgIGxldCBiID0gbW9kdWxvOwogICAgbGV0IHggPSBfMG4zLCB5ID0gXzFuMywgdSA9IF8xbjMsIHYgPSBfMG4zOwogICAgd2hpbGUgKGEgIT09IF8wbjMpIHsKICAgICAgY29uc3QgcSA9IGIgLyBhOwogICAgICBjb25zdCByID0gYiAlIGE7CiAgICAgIGNvbnN0IG0gPSB4IC0gdSAqIHE7CiAgICAgIGNvbnN0IG4gPSB5IC0gdiAqIHE7CiAgICAgIGIgPSBhLCBhID0gciwgeCA9IHUsIHkgPSB2LCB1ID0gbSwgdiA9IG47CiAgICB9CiAgICBjb25zdCBnY2QgPSBiOwogICAgaWYgKGdjZCAhPT0gXzFuMykKICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZlcnQ6IGRvZXMgbm90IGV4aXN0Iik7CiAgICByZXR1cm4gbW9kKHgsIG1vZHVsbyk7CiAgfQogIGZ1bmN0aW9uIHRvbmVsbGlTaGFua3MoUCkgewogICAgY29uc3QgbGVnZW5kcmVDID0gKFAgLSBfMW4zKSAvIF8ybjM7CiAgICBsZXQgUSwgUywgWjsKICAgIGZvciAoUSA9IFAgLSBfMW4zLCBTID0gMDsgUSAlIF8ybjMgPT09IF8wbjM7IFEgLz0gXzJuMywgUysrKQogICAgICA7CiAgICBmb3IgKFogPSBfMm4zOyBaIDwgUCAmJiBwb3coWiwgbGVnZW5kcmVDLCBQKSAhPT0gUCAtIF8xbjM7IForKykKICAgICAgOwogICAgaWYgKFMgPT09IDEpIHsKICAgICAgY29uc3QgcDFkaXY0ID0gKFAgKyBfMW4zKSAvIF80bjsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRvbmVsbGlGYXN0KEZwMiwgbikgewogICAgICAgIGNvbnN0IHJvb3QyID0gRnAyLnBvdyhuLCBwMWRpdjQpOwogICAgICAgIGlmICghRnAyLmVxbChGcDIuc3FyKHJvb3QyKSwgbikpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNxdWFyZSByb290Iik7CiAgICAgICAgcmV0dXJuIHJvb3QyOwogICAgICB9OwogICAgfQogICAgY29uc3QgUTFkaXYyID0gKFEgKyBfMW4zKSAvIF8ybjM7CiAgICByZXR1cm4gZnVuY3Rpb24gdG9uZWxsaVNsb3coRnAyLCBuKSB7CiAgICAgIGlmIChGcDIucG93KG4sIGxlZ2VuZHJlQykgPT09IEZwMi5uZWcoRnAyLk9ORSkpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpOwogICAgICBsZXQgciA9IFM7CiAgICAgIGxldCBnID0gRnAyLnBvdyhGcDIubXVsKEZwMi5PTkUsIFopLCBRKTsKICAgICAgbGV0IHggPSBGcDIucG93KG4sIFExZGl2Mik7CiAgICAgIGxldCBiID0gRnAyLnBvdyhuLCBRKTsKICAgICAgd2hpbGUgKCFGcDIuZXFsKGIsIEZwMi5PTkUpKSB7CiAgICAgICAgaWYgKEZwMi5lcWwoYiwgRnAyLlpFUk8pKQogICAgICAgICAgcmV0dXJuIEZwMi5aRVJPOwogICAgICAgIGxldCBtID0gMTsKICAgICAgICBmb3IgKGxldCB0MiA9IEZwMi5zcXIoYik7IG0gPCByOyBtKyspIHsKICAgICAgICAgIGlmIChGcDIuZXFsKHQyLCBGcDIuT05FKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB0MiA9IEZwMi5zcXIodDIpOwogICAgICAgIH0KICAgICAgICBjb25zdCBnZTIgPSBGcDIucG93KGcsIF8xbjMgPDwgQmlnSW50KHIgLSBtIC0gMSkpOwogICAgICAgIGcgPSBGcDIuc3FyKGdlMik7CiAgICAgICAgeCA9IEZwMi5tdWwoeCwgZ2UyKTsKICAgICAgICBiID0gRnAyLm11bChiLCBnKTsKICAgICAgICByID0gbTsKICAgICAgfQogICAgICByZXR1cm4geDsKICAgIH07CiAgfQogIGZ1bmN0aW9uIEZwU3FydChQKSB7CiAgICBpZiAoUCAlIF80biA9PT0gXzNuKSB7CiAgICAgIGNvbnN0IHAxZGl2NCA9IChQICsgXzFuMykgLyBfNG47CiAgICAgIHJldHVybiBmdW5jdGlvbiBzcXJ0M21vZDQoRnAyLCBuKSB7CiAgICAgICAgY29uc3Qgcm9vdDIgPSBGcDIucG93KG4sIHAxZGl2NCk7CiAgICAgICAgaWYgKCFGcDIuZXFsKEZwMi5zcXIocm9vdDIpLCBuKSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QiKTsKICAgICAgICByZXR1cm4gcm9vdDI7CiAgICAgIH07CiAgICB9CiAgICBpZiAoUCAlIF84biA9PT0gXzVuKSB7CiAgICAgIGNvbnN0IGMxID0gKFAgLSBfNW4pIC8gXzhuOwogICAgICByZXR1cm4gZnVuY3Rpb24gc3FydDVtb2Q4KEZwMiwgbikgewogICAgICAgIGNvbnN0IG4yID0gRnAyLm11bChuLCBfMm4zKTsKICAgICAgICBjb25zdCB2ID0gRnAyLnBvdyhuMiwgYzEpOwogICAgICAgIGNvbnN0IG52ID0gRnAyLm11bChuLCB2KTsKICAgICAgICBjb25zdCBpID0gRnAyLm11bChGcDIubXVsKG52LCBfMm4zKSwgdik7CiAgICAgICAgY29uc3Qgcm9vdDIgPSBGcDIubXVsKG52LCBGcDIuc3ViKGksIEZwMi5PTkUpKTsKICAgICAgICBpZiAoIUZwMi5lcWwoRnAyLnNxcihyb290MiksIG4pKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpOwogICAgICAgIHJldHVybiByb290MjsKICAgICAgfTsKICAgIH0KICAgIGlmIChQICUgXzE2biA9PT0gXzluKSB7CiAgICB9CiAgICByZXR1cm4gdG9uZWxsaVNoYW5rcyhQKTsKICB9CiAgZnVuY3Rpb24gdmFsaWRhdGVGaWVsZChmaWVsZCkgewogICAgY29uc3QgaW5pdGlhbCA9IHsKICAgICAgT1JERVI6ICJiaWdpbnQiLAogICAgICBNQVNLOiAiYmlnaW50IiwKICAgICAgQllURVM6ICJpc1NhZmVJbnRlZ2VyIiwKICAgICAgQklUUzogImlzU2FmZUludGVnZXIiCiAgICB9OwogICAgY29uc3Qgb3B0cyA9IEZJRUxEX0ZJRUxEUy5yZWR1Y2UoKG1hcCwgdmFsKSA9PiB7CiAgICAgIG1hcFt2YWxdID0gImZ1bmN0aW9uIjsKICAgICAgcmV0dXJuIG1hcDsKICAgIH0sIGluaXRpYWwpOwogICAgcmV0dXJuIHZhbGlkYXRlT2JqZWN0KGZpZWxkLCBvcHRzKTsKICB9CiAgZnVuY3Rpb24gRnBQb3coZjIsIG51bSwgcG93ZXIpIHsKICAgIGlmIChwb3dlciA8IF8wbjMpCiAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcG93ZXIgPiAwIik7CiAgICBpZiAocG93ZXIgPT09IF8wbjMpCiAgICAgIHJldHVybiBmMi5PTkU7CiAgICBpZiAocG93ZXIgPT09IF8xbjMpCiAgICAgIHJldHVybiBudW07CiAgICBsZXQgcCA9IGYyLk9ORTsKICAgIGxldCBkID0gbnVtOwogICAgd2hpbGUgKHBvd2VyID4gXzBuMykgewogICAgICBpZiAocG93ZXIgJiBfMW4zKQogICAgICAgIHAgPSBmMi5tdWwocCwgZCk7CiAgICAgIGQgPSBmMi5zcXIoZCk7CiAgICAgIHBvd2VyID4+PSBfMW4zOwogICAgfQogICAgcmV0dXJuIHA7CiAgfQogIGZ1bmN0aW9uIEZwSW52ZXJ0QmF0Y2goZjIsIG51bXMpIHsKICAgIGNvbnN0IHRtcCA9IG5ldyBBcnJheShudW1zLmxlbmd0aCk7CiAgICBjb25zdCBsYXN0TXVsdGlwbGllZCA9IG51bXMucmVkdWNlKChhY2MsIG51bSwgaSkgPT4gewogICAgICBpZiAoZjIuaXMwKG51bSkpCiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgdG1wW2ldID0gYWNjOwogICAgICByZXR1cm4gZjIubXVsKGFjYywgbnVtKTsKICAgIH0sIGYyLk9ORSk7CiAgICBjb25zdCBpbnZlcnRlZCA9IGYyLmludihsYXN0TXVsdGlwbGllZCk7CiAgICBudW1zLnJlZHVjZVJpZ2h0KChhY2MsIG51bSwgaSkgPT4gewogICAgICBpZiAoZjIuaXMwKG51bSkpCiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgdG1wW2ldID0gZjIubXVsKGFjYywgdG1wW2ldKTsKICAgICAgcmV0dXJuIGYyLm11bChhY2MsIG51bSk7CiAgICB9LCBpbnZlcnRlZCk7CiAgICByZXR1cm4gdG1wOwogIH0KICBmdW5jdGlvbiBuTGVuZ3RoKG4sIG5CaXRMZW5ndGgpIHsKICAgIGNvbnN0IF9uQml0TGVuZ3RoID0gbkJpdExlbmd0aCAhPT0gdm9pZCAwID8gbkJpdExlbmd0aCA6IG4udG9TdHJpbmcoMikubGVuZ3RoOwogICAgY29uc3QgbkJ5dGVMZW5ndGggPSBNYXRoLmNlaWwoX25CaXRMZW5ndGggLyA4KTsKICAgIHJldHVybiB7IG5CaXRMZW5ndGg6IF9uQml0TGVuZ3RoLCBuQnl0ZUxlbmd0aCB9OwogIH0KICBmdW5jdGlvbiBGaWVsZChPUkRFUiwgYml0TGVuMiwgaXNMRTIgPSBmYWxzZSwgcmVkZWYgPSB7fSkgewogICAgaWYgKE9SREVSIDw9IF8wbjMpCiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgRmllbGQgT1JERVIgPiAwLCBnb3QgJHtPUkRFUn1gKTsKICAgIGNvbnN0IHsgbkJpdExlbmd0aDogQklUUywgbkJ5dGVMZW5ndGg6IEJZVEVTIH0gPSBuTGVuZ3RoKE9SREVSLCBiaXRMZW4yKTsKICAgIGlmIChCWVRFUyA+IDIwNDgpCiAgICAgIHRocm93IG5ldyBFcnJvcigiRmllbGQgbGVuZ3RocyBvdmVyIDIwNDggYnl0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQiKTsKICAgIGNvbnN0IHNxcnRQID0gRnBTcXJ0KE9SREVSKTsKICAgIGNvbnN0IGYyID0gT2JqZWN0LmZyZWV6ZSh7CiAgICAgIE9SREVSLAogICAgICBCSVRTLAogICAgICBCWVRFUywKICAgICAgTUFTSzogYml0TWFzayhCSVRTKSwKICAgICAgWkVSTzogXzBuMywKICAgICAgT05FOiBfMW4zLAogICAgICBjcmVhdGU6IChudW0pID0+IG1vZChudW0sIE9SREVSKSwKICAgICAgaXNWYWxpZDogKG51bSkgPT4gewogICAgICAgIGlmICh0eXBlb2YgbnVtICE9PSAiYmlnaW50IikKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmaWVsZCBlbGVtZW50OiBleHBlY3RlZCBiaWdpbnQsIGdvdCAke3R5cGVvZiBudW19YCk7CiAgICAgICAgcmV0dXJuIF8wbjMgPD0gbnVtICYmIG51bSA8IE9SREVSOwogICAgICB9LAogICAgICBpczA6IChudW0pID0+IG51bSA9PT0gXzBuMywKICAgICAgaXNPZGQ6IChudW0pID0+IChudW0gJiBfMW4zKSA9PT0gXzFuMywKICAgICAgbmVnOiAobnVtKSA9PiBtb2QoLW51bSwgT1JERVIpLAogICAgICBlcWw6IChsaHMsIHJocykgPT4gbGhzID09PSByaHMsCiAgICAgIHNxcjogKG51bSkgPT4gbW9kKG51bSAqIG51bSwgT1JERVIpLAogICAgICBhZGQ6IChsaHMsIHJocykgPT4gbW9kKGxocyArIHJocywgT1JERVIpLAogICAgICBzdWI6IChsaHMsIHJocykgPT4gbW9kKGxocyAtIHJocywgT1JERVIpLAogICAgICBtdWw6IChsaHMsIHJocykgPT4gbW9kKGxocyAqIHJocywgT1JERVIpLAogICAgICBwb3c6IChudW0sIHBvd2VyKSA9PiBGcFBvdyhmMiwgbnVtLCBwb3dlciksCiAgICAgIGRpdjogKGxocywgcmhzKSA9PiBtb2QobGhzICogaW52ZXJ0KHJocywgT1JERVIpLCBPUkRFUiksCiAgICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBkb2Vzbid0IG5vcm1hbGl6ZQogICAgICBzcXJOOiAobnVtKSA9PiBudW0gKiBudW0sCiAgICAgIGFkZE46IChsaHMsIHJocykgPT4gbGhzICsgcmhzLAogICAgICBzdWJOOiAobGhzLCByaHMpID0+IGxocyAtIHJocywKICAgICAgbXVsTjogKGxocywgcmhzKSA9PiBsaHMgKiByaHMsCiAgICAgIGludjogKG51bSkgPT4gaW52ZXJ0KG51bSwgT1JERVIpLAogICAgICBzcXJ0OiByZWRlZi5zcXJ0IHx8ICgobikgPT4gc3FydFAoZjIsIG4pKSwKICAgICAgaW52ZXJ0QmF0Y2g6IChsc3QpID0+IEZwSW52ZXJ0QmF0Y2goZjIsIGxzdCksCiAgICAgIC8vIFRPRE86IGRvIHdlIHJlYWxseSBuZWVkIGNvbnN0YW50IGNtb3Y/CiAgICAgIC8vIFdlIGRvbid0IGhhdmUgY29uc3QtdGltZSBiaWdpbnRzIGFueXdheSwgc28gcHJvYmFibHkgd2lsbCBiZSBub3QgdmVyeSB1c2VmdWwKICAgICAgY21vdjogKGEsIGIsIGMpID0+IGMgPyBiIDogYSwKICAgICAgdG9CeXRlczogKG51bSkgPT4gaXNMRTIgPyBudW1iZXJUb0J5dGVzTEUobnVtLCBCWVRFUykgOiBudW1iZXJUb0J5dGVzQkUobnVtLCBCWVRFUyksCiAgICAgIGZyb21CeXRlczogKGJ5dGVzMikgPT4gewogICAgICAgIGlmIChieXRlczIubGVuZ3RoICE9PSBCWVRFUykKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRnAuZnJvbUJ5dGVzOiBleHBlY3RlZCAke0JZVEVTfSwgZ290ICR7Ynl0ZXMyLmxlbmd0aH1gKTsKICAgICAgICByZXR1cm4gaXNMRTIgPyBieXRlc1RvTnVtYmVyTEUoYnl0ZXMyKSA6IGJ5dGVzVG9OdW1iZXJCRShieXRlczIpOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBPYmplY3QuZnJlZXplKGYyKTsKICB9CiAgZnVuY3Rpb24gZ2V0RmllbGRCeXRlc0xlbmd0aChmaWVsZE9yZGVyKSB7CiAgICBpZiAodHlwZW9mIGZpZWxkT3JkZXIgIT09ICJiaWdpbnQiKQogICAgICB0aHJvdyBuZXcgRXJyb3IoImZpZWxkIG9yZGVyIG11c3QgYmUgYmlnaW50Iik7CiAgICBjb25zdCBiaXRMZW5ndGggPSBmaWVsZE9yZGVyLnRvU3RyaW5nKDIpLmxlbmd0aDsKICAgIHJldHVybiBNYXRoLmNlaWwoYml0TGVuZ3RoIC8gOCk7CiAgfQogIGZ1bmN0aW9uIGdldE1pbkhhc2hMZW5ndGgoZmllbGRPcmRlcikgewogICAgY29uc3QgbGVuZ3RoID0gZ2V0RmllbGRCeXRlc0xlbmd0aChmaWVsZE9yZGVyKTsKICAgIHJldHVybiBsZW5ndGggKyBNYXRoLmNlaWwobGVuZ3RoIC8gMik7CiAgfQogIGZ1bmN0aW9uIG1hcEhhc2hUb0ZpZWxkKGtleSwgZmllbGRPcmRlciwgaXNMRTIgPSBmYWxzZSkgewogICAgY29uc3QgbGVuID0ga2V5Lmxlbmd0aDsKICAgIGNvbnN0IGZpZWxkTGVuID0gZ2V0RmllbGRCeXRlc0xlbmd0aChmaWVsZE9yZGVyKTsKICAgIGNvbnN0IG1pbkxlbiA9IGdldE1pbkhhc2hMZW5ndGgoZmllbGRPcmRlcik7CiAgICBpZiAobGVuIDwgMTYgfHwgbGVuIDwgbWluTGVuIHx8IGxlbiA+IDEwMjQpCiAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHttaW5MZW59LTEwMjQgYnl0ZXMgb2YgaW5wdXQsIGdvdCAke2xlbn1gKTsKICAgIGNvbnN0IG51bSA9IGlzTEUyID8gYnl0ZXNUb051bWJlckJFKGtleSkgOiBieXRlc1RvTnVtYmVyTEUoa2V5KTsKICAgIGNvbnN0IHJlZHVjZWQgPSBtb2QobnVtLCBmaWVsZE9yZGVyIC0gXzFuMykgKyBfMW4zOwogICAgcmV0dXJuIGlzTEUyID8gbnVtYmVyVG9CeXRlc0xFKHJlZHVjZWQsIGZpZWxkTGVuKSA6IG51bWJlclRvQnl0ZXNCRShyZWR1Y2VkLCBmaWVsZExlbik7CiAgfQogIHZhciBfMG4zLCBfMW4zLCBfMm4zLCBfM24sIF80biwgXzVuLCBfOG4sIF85biwgXzE2biwgRklFTERfRklFTERTOwogIHZhciBpbml0X21vZHVsYXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L21vZHVsYXIuanMiKCkgewogICAgICBpbml0X3V0aWxzNCgpOwogICAgICBfMG4zID0gQmlnSW50KDApOwogICAgICBfMW4zID0gQmlnSW50KDEpOwogICAgICBfMm4zID0gQmlnSW50KDIpOwogICAgICBfM24gPSBCaWdJbnQoMyk7CiAgICAgIF80biA9IEJpZ0ludCg0KTsKICAgICAgXzVuID0gQmlnSW50KDUpOwogICAgICBfOG4gPSBCaWdJbnQoOCk7CiAgICAgIF85biA9IEJpZ0ludCg5KTsKICAgICAgXzE2biA9IEJpZ0ludCgxNik7CiAgICAgIEZJRUxEX0ZJRUxEUyA9IFsKICAgICAgICAiY3JlYXRlIiwKICAgICAgICAiaXNWYWxpZCIsCiAgICAgICAgImlzMCIsCiAgICAgICAgIm5lZyIsCiAgICAgICAgImludiIsCiAgICAgICAgInNxcnQiLAogICAgICAgICJzcXIiLAogICAgICAgICJlcWwiLAogICAgICAgICJhZGQiLAogICAgICAgICJzdWIiLAogICAgICAgICJtdWwiLAogICAgICAgICJwb3ciLAogICAgICAgICJkaXYiLAogICAgICAgICJhZGROIiwKICAgICAgICAic3ViTiIsCiAgICAgICAgIm11bE4iLAogICAgICAgICJzcXJOIgogICAgICBdOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvY3VydmUuanMKICBmdW5jdGlvbiB3TkFGKGMsIGJpdHMpIHsKICAgIGNvbnN0IGNvbnN0VGltZU5lZ2F0ZSA9IChjb25kaXRpb24sIGl0ZW0pID0+IHsKICAgICAgY29uc3QgbmVnID0gaXRlbS5uZWdhdGUoKTsKICAgICAgcmV0dXJuIGNvbmRpdGlvbiA/IG5lZyA6IGl0ZW07CiAgICB9OwogICAgY29uc3Qgb3B0cyA9IChXKSA9PiB7CiAgICAgIGNvbnN0IHdpbmRvd3MgPSBNYXRoLmNlaWwoYml0cyAvIFcpICsgMTsKICAgICAgY29uc3Qgd2luZG93U2l6ZSA9IDIgKiogKFcgLSAxKTsKICAgICAgcmV0dXJuIHsgd2luZG93cywgd2luZG93U2l6ZSB9OwogICAgfTsKICAgIHJldHVybiB7CiAgICAgIGNvbnN0VGltZU5lZ2F0ZSwKICAgICAgLy8gbm9uLWNvbnN0IHRpbWUgbXVsdGlwbGljYXRpb24gbGFkZGVyCiAgICAgIHVuc2FmZUxhZGRlcihlbG0sIG4pIHsKICAgICAgICBsZXQgcCA9IGMuWkVSTzsKICAgICAgICBsZXQgZCA9IGVsbTsKICAgICAgICB3aGlsZSAobiA+IF8wbjQpIHsKICAgICAgICAgIGlmIChuICYgXzFuNCkKICAgICAgICAgICAgcCA9IHAuYWRkKGQpOwogICAgICAgICAgZCA9IGQuZG91YmxlKCk7CiAgICAgICAgICBuID4+PSBfMW40OwogICAgICAgIH0KICAgICAgICByZXR1cm4gcDsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgYSB3TkFGIHByZWNvbXB1dGF0aW9uIHdpbmRvdy4gVXNlZCBmb3IgY2FjaGluZy4KICAgICAgICogRGVmYXVsdCB3aW5kb3cgc2l6ZSBpcyBzZXQgYnkgYHV0aWxzLnByZWNvbXB1dGUoKWAgYW5kIGlzIGVxdWFsIHRvIDguCiAgICAgICAqIE51bWJlciBvZiBwcmVjb21wdXRlZCBwb2ludHMgZGVwZW5kcyBvbiB0aGUgY3VydmUgc2l6ZToKICAgICAgICogMl4o8J2RiuKIkjEpICogKE1hdGguY2VpbCjwnZGbIC8g8J2RiikgKyAxKSwgd2hlcmU6CiAgICAgICAqIC0g8J2RiiBpcyB0aGUgd2luZG93IHNpemUKICAgICAgICogLSDwnZGbIGlzIHRoZSBiaXRsZW5ndGggb2YgdGhlIGN1cnZlIG9yZGVyLgogICAgICAgKiBGb3IgYSAyNTYtYml0IGN1cnZlIGFuZCB3aW5kb3cgc2l6ZSA4LCB0aGUgbnVtYmVyIG9mIHByZWNvbXB1dGVkIHBvaW50cyBpcyAxMjggKiAzMyA9IDQyMjQuCiAgICAgICAqIEByZXR1cm5zIHByZWNvbXB1dGVkIHBvaW50IHRhYmxlcyBmbGF0dGVuZWQgdG8gYSBzaW5nbGUgYXJyYXkKICAgICAgICovCiAgICAgIHByZWNvbXB1dGVXaW5kb3coZWxtLCBXKSB7CiAgICAgICAgY29uc3QgeyB3aW5kb3dzLCB3aW5kb3dTaXplIH0gPSBvcHRzKFcpOwogICAgICAgIGNvbnN0IHBvaW50cyA9IFtdOwogICAgICAgIGxldCBwID0gZWxtOwogICAgICAgIGxldCBiYXNlMiA9IHA7CiAgICAgICAgZm9yIChsZXQgd2luZG93MiA9IDA7IHdpbmRvdzIgPCB3aW5kb3dzOyB3aW5kb3cyKyspIHsKICAgICAgICAgIGJhc2UyID0gcDsKICAgICAgICAgIHBvaW50cy5wdXNoKGJhc2UyKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgd2luZG93U2l6ZTsgaSsrKSB7CiAgICAgICAgICAgIGJhc2UyID0gYmFzZTIuYWRkKHApOwogICAgICAgICAgICBwb2ludHMucHVzaChiYXNlMik7CiAgICAgICAgICB9CiAgICAgICAgICBwID0gYmFzZTIuZG91YmxlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb2ludHM7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBJbXBsZW1lbnRzIGVjIG11bHRpcGxpY2F0aW9uIHVzaW5nIHByZWNvbXB1dGVkIHRhYmxlcyBhbmQgdy1hcnkgbm9uLWFkamFjZW50IGZvcm0uCiAgICAgICAqIEBwYXJhbSBXIHdpbmRvdyBzaXplCiAgICAgICAqIEBwYXJhbSBwcmVjb21wdXRlcyBwcmVjb21wdXRlZCB0YWJsZXMKICAgICAgICogQHBhcmFtIG4gc2NhbGFyICh3ZSBkb24ndCBjaGVjayBoZXJlLCBidXQgc2hvdWxkIGJlIGxlc3MgdGhhbiBjdXJ2ZSBvcmRlcikKICAgICAgICogQHJldHVybnMgcmVhbCBhbmQgZmFrZSAoZm9yIGNvbnN0LXRpbWUpIHBvaW50cwogICAgICAgKi8KICAgICAgd05BRihXLCBwcmVjb21wdXRlcywgbikgewogICAgICAgIGNvbnN0IHsgd2luZG93cywgd2luZG93U2l6ZSB9ID0gb3B0cyhXKTsKICAgICAgICBsZXQgcCA9IGMuWkVSTzsKICAgICAgICBsZXQgZjIgPSBjLkJBU0U7CiAgICAgICAgY29uc3QgbWFzayA9IEJpZ0ludCgyICoqIFcgLSAxKTsKICAgICAgICBjb25zdCBtYXhOdW1iZXIgPSAyICoqIFc7CiAgICAgICAgY29uc3Qgc2hpZnRCeSA9IEJpZ0ludChXKTsKICAgICAgICBmb3IgKGxldCB3aW5kb3cyID0gMDsgd2luZG93MiA8IHdpbmRvd3M7IHdpbmRvdzIrKykgewogICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gd2luZG93MiAqIHdpbmRvd1NpemU7CiAgICAgICAgICBsZXQgd2JpdHMgPSBOdW1iZXIobiAmIG1hc2spOwogICAgICAgICAgbiA+Pj0gc2hpZnRCeTsKICAgICAgICAgIGlmICh3Yml0cyA+IHdpbmRvd1NpemUpIHsKICAgICAgICAgICAgd2JpdHMgLT0gbWF4TnVtYmVyOwogICAgICAgICAgICBuICs9IF8xbjQ7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBvZmZzZXQxID0gb2Zmc2V0OwogICAgICAgICAgY29uc3Qgb2Zmc2V0MiA9IG9mZnNldCArIE1hdGguYWJzKHdiaXRzKSAtIDE7CiAgICAgICAgICBjb25zdCBjb25kMSA9IHdpbmRvdzIgJSAyICE9PSAwOwogICAgICAgICAgY29uc3QgY29uZDIgPSB3Yml0cyA8IDA7CiAgICAgICAgICBpZiAod2JpdHMgPT09IDApIHsKICAgICAgICAgICAgZjIgPSBmMi5hZGQoY29uc3RUaW1lTmVnYXRlKGNvbmQxLCBwcmVjb21wdXRlc1tvZmZzZXQxXSkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcCA9IHAuYWRkKGNvbnN0VGltZU5lZ2F0ZShjb25kMiwgcHJlY29tcHV0ZXNbb2Zmc2V0Ml0pKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgcCwgZjogZjIgfTsKICAgICAgfSwKICAgICAgd05BRkNhY2hlZChQLCBwcmVjb21wdXRlc01hcCwgbiwgdHJhbnNmb3JtKSB7CiAgICAgICAgY29uc3QgVyA9IFAuX1dJTkRPV19TSVpFIHx8IDE7CiAgICAgICAgbGV0IGNvbXAgPSBwcmVjb21wdXRlc01hcC5nZXQoUCk7CiAgICAgICAgaWYgKCFjb21wKSB7CiAgICAgICAgICBjb21wID0gdGhpcy5wcmVjb21wdXRlV2luZG93KFAsIFcpOwogICAgICAgICAgaWYgKFcgIT09IDEpIHsKICAgICAgICAgICAgcHJlY29tcHV0ZXNNYXAuc2V0KFAsIHRyYW5zZm9ybShjb21wKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLndOQUYoVywgY29tcCwgbik7CiAgICAgIH0KICAgIH07CiAgfQogIGZ1bmN0aW9uIHZhbGlkYXRlQmFzaWMoY3VydmUpIHsKICAgIHZhbGlkYXRlRmllbGQoY3VydmUuRnApOwogICAgdmFsaWRhdGVPYmplY3QoY3VydmUsIHsKICAgICAgbjogImJpZ2ludCIsCiAgICAgIGg6ICJiaWdpbnQiLAogICAgICBHeDogImZpZWxkIiwKICAgICAgR3k6ICJmaWVsZCIKICAgIH0sIHsKICAgICAgbkJpdExlbmd0aDogImlzU2FmZUludGVnZXIiLAogICAgICBuQnl0ZUxlbmd0aDogImlzU2FmZUludGVnZXIiCiAgICB9KTsKICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsKICAgICAgLi4ubkxlbmd0aChjdXJ2ZS5uLCBjdXJ2ZS5uQml0TGVuZ3RoKSwKICAgICAgLi4uY3VydmUsCiAgICAgIC4uLnsgcDogY3VydmUuRnAuT1JERVIgfQogICAgfSk7CiAgfQogIHZhciBfMG40LCBfMW40OwogIHZhciBpbml0X2N1cnZlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC9jdXJ2ZS5qcyIoKSB7CiAgICAgIGluaXRfbW9kdWxhcigpOwogICAgICBpbml0X3V0aWxzNCgpOwogICAgICBfMG40ID0gQmlnSW50KDApOwogICAgICBfMW40ID0gQmlnSW50KDEpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3Qvd2VpZXJzdHJhc3MuanMKICBmdW5jdGlvbiB2YWxpZGF0ZVBvaW50T3B0cyhjdXJ2ZSkgewogICAgY29uc3Qgb3B0cyA9IHZhbGlkYXRlQmFzaWMoY3VydmUpOwogICAgdmFsaWRhdGVPYmplY3Qob3B0cywgewogICAgICBhOiAiZmllbGQiLAogICAgICBiOiAiZmllbGQiCiAgICB9LCB7CiAgICAgIGFsbG93ZWRQcml2YXRlS2V5TGVuZ3RoczogImFycmF5IiwKICAgICAgd3JhcFByaXZhdGVLZXk6ICJib29sZWFuIiwKICAgICAgaXNUb3JzaW9uRnJlZTogImZ1bmN0aW9uIiwKICAgICAgY2xlYXJDb2ZhY3RvcjogImZ1bmN0aW9uIiwKICAgICAgYWxsb3dJbmZpbml0eVBvaW50OiAiYm9vbGVhbiIsCiAgICAgIGZyb21CeXRlczogImZ1bmN0aW9uIiwKICAgICAgdG9CeXRlczogImZ1bmN0aW9uIgogICAgfSk7CiAgICBjb25zdCB7IGVuZG8sIEZwOiBGcDIsIGEgfSA9IG9wdHM7CiAgICBpZiAoZW5kbykgewogICAgICBpZiAoIUZwMi5lcWwoYSwgRnAyLlpFUk8pKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFbmRvbW9ycGhpc20gY2FuIG9ubHkgYmUgZGVmaW5lZCBmb3IgS29ibGl0eiBjdXJ2ZXMgdGhhdCBoYXZlIGE9MCIpOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgZW5kbyAhPT0gIm9iamVjdCIgfHwgdHlwZW9mIGVuZG8uYmV0YSAhPT0gImJpZ2ludCIgfHwgdHlwZW9mIGVuZG8uc3BsaXRTY2FsYXIgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGVuZG9tb3JwaGlzbSB3aXRoIGJldGE6IGJpZ2ludCBhbmQgc3BsaXRTY2FsYXI6IGZ1bmN0aW9uIik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsgLi4ub3B0cyB9KTsKICB9CiAgZnVuY3Rpb24gd2VpZXJzdHJhc3NQb2ludHMob3B0cykgewogICAgY29uc3QgQ1VSVkUgPSB2YWxpZGF0ZVBvaW50T3B0cyhvcHRzKTsKICAgIGNvbnN0IHsgRnA6IEZwMiB9ID0gQ1VSVkU7CiAgICBjb25zdCB0b0J5dGVzMyA9IENVUlZFLnRvQnl0ZXMgfHwgKChfYywgcG9pbnQsIF9pc0NvbXByZXNzZWQpID0+IHsKICAgICAgY29uc3QgYSA9IHBvaW50LnRvQWZmaW5lKCk7CiAgICAgIHJldHVybiBjb25jYXRCeXRlczMoVWludDhBcnJheS5mcm9tKFs0XSksIEZwMi50b0J5dGVzKGEueCksIEZwMi50b0J5dGVzKGEueSkpOwogICAgfSk7CiAgICBjb25zdCBmcm9tQnl0ZXMyID0gQ1VSVkUuZnJvbUJ5dGVzIHx8ICgoYnl0ZXMyKSA9PiB7CiAgICAgIGNvbnN0IHRhaWwgPSBieXRlczIuc3ViYXJyYXkoMSk7CiAgICAgIGNvbnN0IHggPSBGcDIuZnJvbUJ5dGVzKHRhaWwuc3ViYXJyYXkoMCwgRnAyLkJZVEVTKSk7CiAgICAgIGNvbnN0IHkgPSBGcDIuZnJvbUJ5dGVzKHRhaWwuc3ViYXJyYXkoRnAyLkJZVEVTLCAyICogRnAyLkJZVEVTKSk7CiAgICAgIHJldHVybiB7IHgsIHkgfTsKICAgIH0pOwogICAgZnVuY3Rpb24gd2VpZXJzdHJhc3NFcXVhdGlvbih4KSB7CiAgICAgIGNvbnN0IHsgYSwgYiB9ID0gQ1VSVkU7CiAgICAgIGNvbnN0IHgyID0gRnAyLnNxcih4KTsKICAgICAgY29uc3QgeDMgPSBGcDIubXVsKHgyLCB4KTsKICAgICAgcmV0dXJuIEZwMi5hZGQoRnAyLmFkZCh4MywgRnAyLm11bCh4LCBhKSksIGIpOwogICAgfQogICAgaWYgKCFGcDIuZXFsKEZwMi5zcXIoQ1VSVkUuR3kpLCB3ZWllcnN0cmFzc0VxdWF0aW9uKENVUlZFLkd4KSkpCiAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIGdlbmVyYXRvciBwb2ludDogZXF1YXRpb24gbGVmdCAhPSByaWdodCIpOwogICAgZnVuY3Rpb24gaXNXaXRoaW5DdXJ2ZU9yZGVyKG51bSkgewogICAgICByZXR1cm4gdHlwZW9mIG51bSA9PT0gImJpZ2ludCIgJiYgXzBuNSA8IG51bSAmJiBudW0gPCBDVVJWRS5uOwogICAgfQogICAgZnVuY3Rpb24gYXNzZXJ0R0UobnVtKSB7CiAgICAgIGlmICghaXNXaXRoaW5DdXJ2ZU9yZGVyKG51bSkpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB2YWxpZCBiaWdpbnQ6IDAgPCBiaWdpbnQgPCBjdXJ2ZS5uIik7CiAgICB9CiAgICBmdW5jdGlvbiBub3JtUHJpdmF0ZUtleVRvU2NhbGFyKGtleSkgewogICAgICBjb25zdCB7IGFsbG93ZWRQcml2YXRlS2V5TGVuZ3RoczogbGVuZ3RocywgbkJ5dGVMZW5ndGgsIHdyYXBQcml2YXRlS2V5LCBuIH0gPSBDVVJWRTsKICAgICAgaWYgKGxlbmd0aHMgJiYgdHlwZW9mIGtleSAhPT0gImJpZ2ludCIpIHsKICAgICAgICBpZiAoaXNCeXRlczIoa2V5KSkKICAgICAgICAgIGtleSA9IGJ5dGVzVG9IZXgyKGtleSk7CiAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICJzdHJpbmciIHx8ICFsZW5ndGhzLmluY2x1ZGVzKGtleS5sZW5ndGgpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGtleSIpOwogICAgICAgIGtleSA9IGtleS5wYWRTdGFydChuQnl0ZUxlbmd0aCAqIDIsICIwIik7CiAgICAgIH0KICAgICAgbGV0IG51bTsKICAgICAgdHJ5IHsKICAgICAgICBudW0gPSB0eXBlb2Yga2V5ID09PSAiYmlnaW50IiA/IGtleSA6IGJ5dGVzVG9OdW1iZXJCRShlbnN1cmVCeXRlcygicHJpdmF0ZSBrZXkiLCBrZXksIG5CeXRlTGVuZ3RoKSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcml2YXRlIGtleSBtdXN0IGJlICR7bkJ5dGVMZW5ndGh9IGJ5dGVzLCBoZXggb3IgYmlnaW50LCBub3QgJHt0eXBlb2Yga2V5fWApOwogICAgICB9CiAgICAgIGlmICh3cmFwUHJpdmF0ZUtleSkKICAgICAgICBudW0gPSBtb2QobnVtLCBuKTsKICAgICAgYXNzZXJ0R0UobnVtKTsKICAgICAgcmV0dXJuIG51bTsKICAgIH0KICAgIGNvbnN0IHBvaW50UHJlY29tcHV0ZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgZnVuY3Rpb24gYXNzZXJ0UHJqUG9pbnQob3RoZXIpIHsKICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBQb2ludDIpKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiUHJvamVjdGl2ZVBvaW50IGV4cGVjdGVkIik7CiAgICB9CiAgICBjbGFzcyBQb2ludDIgewogICAgICBjb25zdHJ1Y3RvcihweCwgcHksIHB6KSB7CiAgICAgICAgdGhpcy5weCA9IHB4OwogICAgICAgIHRoaXMucHkgPSBweTsKICAgICAgICB0aGlzLnB6ID0gcHo7CiAgICAgICAgaWYgKHB4ID09IG51bGwgfHwgIUZwMi5pc1ZhbGlkKHB4KSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigieCByZXF1aXJlZCIpOwogICAgICAgIGlmIChweSA9PSBudWxsIHx8ICFGcDIuaXNWYWxpZChweSkpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInkgcmVxdWlyZWQiKTsKICAgICAgICBpZiAocHogPT0gbnVsbCB8fCAhRnAyLmlzVmFsaWQocHopKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ6IHJlcXVpcmVkIik7CiAgICAgIH0KICAgICAgLy8gRG9lcyBub3QgdmFsaWRhdGUgaWYgdGhlIHBvaW50IGlzIG9uLWN1cnZlLgogICAgICAvLyBVc2UgZnJvbUhleCBpbnN0ZWFkLCBvciBjYWxsIGFzc2VydFZhbGlkaXR5KCkgbGF0ZXIuCiAgICAgIHN0YXRpYyBmcm9tQWZmaW5lKHApIHsKICAgICAgICBjb25zdCB7IHgsIHkgfSA9IHAgfHwge307CiAgICAgICAgaWYgKCFwIHx8ICFGcDIuaXNWYWxpZCh4KSB8fCAhRnAyLmlzVmFsaWQoeSkpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYWZmaW5lIHBvaW50Iik7CiAgICAgICAgaWYgKHAgaW5zdGFuY2VvZiBQb2ludDIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInByb2plY3RpdmUgcG9pbnQgbm90IGFsbG93ZWQiKTsKICAgICAgICBjb25zdCBpczAgPSAoaSkgPT4gRnAyLmVxbChpLCBGcDIuWkVSTyk7CiAgICAgICAgaWYgKGlzMCh4KSAmJiBpczAoeSkpCiAgICAgICAgICByZXR1cm4gUG9pbnQyLlpFUk87CiAgICAgICAgcmV0dXJuIG5ldyBQb2ludDIoeCwgeSwgRnAyLk9ORSk7CiAgICAgIH0KICAgICAgZ2V0IHgoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudG9BZmZpbmUoKS54OwogICAgICB9CiAgICAgIGdldCB5KCkgewogICAgICAgIHJldHVybiB0aGlzLnRvQWZmaW5lKCkueTsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGFrZXMgYSBidW5jaCBvZiBQcm9qZWN0aXZlIFBvaW50cyBidXQgZXhlY3V0ZXMgb25seSBvbmUKICAgICAgICogaW52ZXJzaW9uIG9uIGFsbCBvZiB0aGVtLiBJbnZlcnNpb24gaXMgdmVyeSBzbG93IG9wZXJhdGlvbiwKICAgICAgICogc28gdGhpcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBtYXNzaXZlbHkuCiAgICAgICAqIE9wdGltaXphdGlvbjogY29udmVydHMgYSBsaXN0IG9mIHByb2plY3RpdmUgcG9pbnRzIHRvIGEgbGlzdCBvZiBpZGVudGljYWwgcG9pbnRzIHdpdGggWj0xLgogICAgICAgKi8KICAgICAgc3RhdGljIG5vcm1hbGl6ZVoocG9pbnRzKSB7CiAgICAgICAgY29uc3QgdG9JbnYgPSBGcDIuaW52ZXJ0QmF0Y2gocG9pbnRzLm1hcCgocCkgPT4gcC5weikpOwogICAgICAgIHJldHVybiBwb2ludHMubWFwKChwLCBpKSA9PiBwLnRvQWZmaW5lKHRvSW52W2ldKSkubWFwKFBvaW50Mi5mcm9tQWZmaW5lKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ29udmVydHMgaGFzaCBzdHJpbmcgb3IgVWludDhBcnJheSB0byBQb2ludC4KICAgICAgICogQHBhcmFtIGhleCBzaG9ydC9sb25nIEVDRFNBIGhleAogICAgICAgKi8KICAgICAgc3RhdGljIGZyb21IZXgoaGV4KSB7CiAgICAgICAgY29uc3QgUCA9IFBvaW50Mi5mcm9tQWZmaW5lKGZyb21CeXRlczIoZW5zdXJlQnl0ZXMoInBvaW50SGV4IiwgaGV4KSkpOwogICAgICAgIFAuYXNzZXJ0VmFsaWRpdHkoKTsKICAgICAgICByZXR1cm4gUDsKICAgICAgfQogICAgICAvLyBNdWx0aXBsaWVzIGdlbmVyYXRvciBwb2ludCBieSBwcml2YXRlS2V5LgogICAgICBzdGF0aWMgZnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleSkgewogICAgICAgIHJldHVybiBQb2ludDIuQkFTRS5tdWx0aXBseShub3JtUHJpdmF0ZUtleVRvU2NhbGFyKHByaXZhdGVLZXkpKTsKICAgICAgfQogICAgICAvLyAiUHJpdmF0ZSBtZXRob2QiLCBkb24ndCB1c2UgaXQgZGlyZWN0bHkKICAgICAgX3NldFdpbmRvd1NpemUod2luZG93U2l6ZSkgewogICAgICAgIHRoaXMuX1dJTkRPV19TSVpFID0gd2luZG93U2l6ZTsKICAgICAgICBwb2ludFByZWNvbXB1dGVzLmRlbGV0ZSh0aGlzKTsKICAgICAgfQogICAgICAvLyBBIHBvaW50IG9uIGN1cnZlIGlzIHZhbGlkIGlmIGl0IGNvbmZvcm1zIHRvIGVxdWF0aW9uLgogICAgICBhc3NlcnRWYWxpZGl0eSgpIHsKICAgICAgICBpZiAodGhpcy5pczAoKSkgewogICAgICAgICAgaWYgKENVUlZFLmFsbG93SW5maW5pdHlQb2ludCAmJiAhRnAyLmlzMCh0aGlzLnB5KSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IFpFUk8iKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLnRvQWZmaW5lKCk7CiAgICAgICAgaWYgKCFGcDIuaXNWYWxpZCh4KSB8fCAhRnAyLmlzVmFsaWQoeSkpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBwb2ludDogeCBvciB5IG5vdCBGRSIpOwogICAgICAgIGNvbnN0IGxlZnQgPSBGcDIuc3FyKHkpOwogICAgICAgIGNvbnN0IHJpZ2h0ID0gd2VpZXJzdHJhc3NFcXVhdGlvbih4KTsKICAgICAgICBpZiAoIUZwMi5lcWwobGVmdCwgcmlnaHQpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IGVxdWF0aW9uIGxlZnQgIT0gcmlnaHQiKTsKICAgICAgICBpZiAoIXRoaXMuaXNUb3JzaW9uRnJlZSgpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IG5vdCBpbiBwcmltZS1vcmRlciBzdWJncm91cCIpOwogICAgICB9CiAgICAgIGhhc0V2ZW5ZKCkgewogICAgICAgIGNvbnN0IHsgeSB9ID0gdGhpcy50b0FmZmluZSgpOwogICAgICAgIGlmIChGcDIuaXNPZGQpCiAgICAgICAgICByZXR1cm4gIUZwMi5pc09kZCh5KTsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkZpZWxkIGRvZXNuJ3Qgc3VwcG9ydCBpc09kZCIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDb21wYXJlIG9uZSBwb2ludCB0byBhbm90aGVyLgogICAgICAgKi8KICAgICAgZXF1YWxzKG90aGVyKSB7CiAgICAgICAgYXNzZXJ0UHJqUG9pbnQob3RoZXIpOwogICAgICAgIGNvbnN0IHsgcHg6IFgxLCBweTogWTEsIHB6OiBaMSB9ID0gdGhpczsKICAgICAgICBjb25zdCB7IHB4OiBYMiwgcHk6IFkyLCBwejogWjIgfSA9IG90aGVyOwogICAgICAgIGNvbnN0IFUxID0gRnAyLmVxbChGcDIubXVsKFgxLCBaMiksIEZwMi5tdWwoWDIsIFoxKSk7CiAgICAgICAgY29uc3QgVTIgPSBGcDIuZXFsKEZwMi5tdWwoWTEsIFoyKSwgRnAyLm11bChZMiwgWjEpKTsKICAgICAgICByZXR1cm4gVTEgJiYgVTI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZsaXBzIHBvaW50IHRvIG9uZSBjb3JyZXNwb25kaW5nIHRvICh4LCAteSkgaW4gQWZmaW5lIGNvb3JkaW5hdGVzLgogICAgICAgKi8KICAgICAgbmVnYXRlKCkgewogICAgICAgIHJldHVybiBuZXcgUG9pbnQyKHRoaXMucHgsIEZwMi5uZWcodGhpcy5weSksIHRoaXMucHopOwogICAgICB9CiAgICAgIC8vIFJlbmVzLUNvc3RlbGxvLUJhdGluYSBleGNlcHRpb24tZnJlZSBkb3VibGluZyBmb3JtdWxhLgogICAgICAvLyBUaGVyZSBpcyAzMCUgZmFzdGVyIEphY29iaWFuIGZvcm11bGEsIGJ1dCBpdCBpcyBub3QgY29tcGxldGUuCiAgICAgIC8vIGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMTUvMTA2MCwgYWxnb3JpdGhtIDMKICAgICAgLy8gQ29zdDogOE0gKyAzUyArIDMqYSArIDIqYjMgKyAxNWFkZC4KICAgICAgZG91YmxlKCkgewogICAgICAgIGNvbnN0IHsgYSwgYiB9ID0gQ1VSVkU7CiAgICAgICAgY29uc3QgYjMyID0gRnAyLm11bChiLCBfM24yKTsKICAgICAgICBjb25zdCB7IHB4OiBYMSwgcHk6IFkxLCBwejogWjEgfSA9IHRoaXM7CiAgICAgICAgbGV0IFgzID0gRnAyLlpFUk8sIFkzID0gRnAyLlpFUk8sIFozID0gRnAyLlpFUk87CiAgICAgICAgbGV0IHQwID0gRnAyLm11bChYMSwgWDEpOwogICAgICAgIGxldCB0MSA9IEZwMi5tdWwoWTEsIFkxKTsKICAgICAgICBsZXQgdDIgPSBGcDIubXVsKFoxLCBaMSk7CiAgICAgICAgbGV0IHQzID0gRnAyLm11bChYMSwgWTEpOwogICAgICAgIHQzID0gRnAyLmFkZCh0MywgdDMpOwogICAgICAgIFozID0gRnAyLm11bChYMSwgWjEpOwogICAgICAgIFozID0gRnAyLmFkZChaMywgWjMpOwogICAgICAgIFgzID0gRnAyLm11bChhLCBaMyk7CiAgICAgICAgWTMgPSBGcDIubXVsKGIzMiwgdDIpOwogICAgICAgIFkzID0gRnAyLmFkZChYMywgWTMpOwogICAgICAgIFgzID0gRnAyLnN1Yih0MSwgWTMpOwogICAgICAgIFkzID0gRnAyLmFkZCh0MSwgWTMpOwogICAgICAgIFkzID0gRnAyLm11bChYMywgWTMpOwogICAgICAgIFgzID0gRnAyLm11bCh0MywgWDMpOwogICAgICAgIFozID0gRnAyLm11bChiMzIsIFozKTsKICAgICAgICB0MiA9IEZwMi5tdWwoYSwgdDIpOwogICAgICAgIHQzID0gRnAyLnN1Yih0MCwgdDIpOwogICAgICAgIHQzID0gRnAyLm11bChhLCB0Myk7CiAgICAgICAgdDMgPSBGcDIuYWRkKHQzLCBaMyk7CiAgICAgICAgWjMgPSBGcDIuYWRkKHQwLCB0MCk7CiAgICAgICAgdDAgPSBGcDIuYWRkKFozLCB0MCk7CiAgICAgICAgdDAgPSBGcDIuYWRkKHQwLCB0Mik7CiAgICAgICAgdDAgPSBGcDIubXVsKHQwLCB0Myk7CiAgICAgICAgWTMgPSBGcDIuYWRkKFkzLCB0MCk7CiAgICAgICAgdDIgPSBGcDIubXVsKFkxLCBaMSk7CiAgICAgICAgdDIgPSBGcDIuYWRkKHQyLCB0Mik7CiAgICAgICAgdDAgPSBGcDIubXVsKHQyLCB0Myk7CiAgICAgICAgWDMgPSBGcDIuc3ViKFgzLCB0MCk7CiAgICAgICAgWjMgPSBGcDIubXVsKHQyLCB0MSk7CiAgICAgICAgWjMgPSBGcDIuYWRkKFozLCBaMyk7CiAgICAgICAgWjMgPSBGcDIuYWRkKFozLCBaMyk7CiAgICAgICAgcmV0dXJuIG5ldyBQb2ludDIoWDMsIFkzLCBaMyk7CiAgICAgIH0KICAgICAgLy8gUmVuZXMtQ29zdGVsbG8tQmF0aW5hIGV4Y2VwdGlvbi1mcmVlIGFkZGl0aW9uIGZvcm11bGEuCiAgICAgIC8vIFRoZXJlIGlzIDMwJSBmYXN0ZXIgSmFjb2JpYW4gZm9ybXVsYSwgYnV0IGl0IGlzIG5vdCBjb21wbGV0ZS4KICAgICAgLy8gaHR0cHM6Ly9lcHJpbnQuaWFjci5vcmcvMjAxNS8xMDYwLCBhbGdvcml0aG0gMQogICAgICAvLyBDb3N0OiAxMk0gKyAwUyArIDMqYSArIDMqYjMgKyAyM2FkZC4KICAgICAgYWRkKG90aGVyKSB7CiAgICAgICAgYXNzZXJ0UHJqUG9pbnQob3RoZXIpOwogICAgICAgIGNvbnN0IHsgcHg6IFgxLCBweTogWTEsIHB6OiBaMSB9ID0gdGhpczsKICAgICAgICBjb25zdCB7IHB4OiBYMiwgcHk6IFkyLCBwejogWjIgfSA9IG90aGVyOwogICAgICAgIGxldCBYMyA9IEZwMi5aRVJPLCBZMyA9IEZwMi5aRVJPLCBaMyA9IEZwMi5aRVJPOwogICAgICAgIGNvbnN0IGEgPSBDVVJWRS5hOwogICAgICAgIGNvbnN0IGIzMiA9IEZwMi5tdWwoQ1VSVkUuYiwgXzNuMik7CiAgICAgICAgbGV0IHQwID0gRnAyLm11bChYMSwgWDIpOwogICAgICAgIGxldCB0MSA9IEZwMi5tdWwoWTEsIFkyKTsKICAgICAgICBsZXQgdDIgPSBGcDIubXVsKFoxLCBaMik7CiAgICAgICAgbGV0IHQzID0gRnAyLmFkZChYMSwgWTEpOwogICAgICAgIGxldCB0NCA9IEZwMi5hZGQoWDIsIFkyKTsKICAgICAgICB0MyA9IEZwMi5tdWwodDMsIHQ0KTsKICAgICAgICB0NCA9IEZwMi5hZGQodDAsIHQxKTsKICAgICAgICB0MyA9IEZwMi5zdWIodDMsIHQ0KTsKICAgICAgICB0NCA9IEZwMi5hZGQoWDEsIFoxKTsKICAgICAgICBsZXQgdDUgPSBGcDIuYWRkKFgyLCBaMik7CiAgICAgICAgdDQgPSBGcDIubXVsKHQ0LCB0NSk7CiAgICAgICAgdDUgPSBGcDIuYWRkKHQwLCB0Mik7CiAgICAgICAgdDQgPSBGcDIuc3ViKHQ0LCB0NSk7CiAgICAgICAgdDUgPSBGcDIuYWRkKFkxLCBaMSk7CiAgICAgICAgWDMgPSBGcDIuYWRkKFkyLCBaMik7CiAgICAgICAgdDUgPSBGcDIubXVsKHQ1LCBYMyk7CiAgICAgICAgWDMgPSBGcDIuYWRkKHQxLCB0Mik7CiAgICAgICAgdDUgPSBGcDIuc3ViKHQ1LCBYMyk7CiAgICAgICAgWjMgPSBGcDIubXVsKGEsIHQ0KTsKICAgICAgICBYMyA9IEZwMi5tdWwoYjMyLCB0Mik7CiAgICAgICAgWjMgPSBGcDIuYWRkKFgzLCBaMyk7CiAgICAgICAgWDMgPSBGcDIuc3ViKHQxLCBaMyk7CiAgICAgICAgWjMgPSBGcDIuYWRkKHQxLCBaMyk7CiAgICAgICAgWTMgPSBGcDIubXVsKFgzLCBaMyk7CiAgICAgICAgdDEgPSBGcDIuYWRkKHQwLCB0MCk7CiAgICAgICAgdDEgPSBGcDIuYWRkKHQxLCB0MCk7CiAgICAgICAgdDIgPSBGcDIubXVsKGEsIHQyKTsKICAgICAgICB0NCA9IEZwMi5tdWwoYjMyLCB0NCk7CiAgICAgICAgdDEgPSBGcDIuYWRkKHQxLCB0Mik7CiAgICAgICAgdDIgPSBGcDIuc3ViKHQwLCB0Mik7CiAgICAgICAgdDIgPSBGcDIubXVsKGEsIHQyKTsKICAgICAgICB0NCA9IEZwMi5hZGQodDQsIHQyKTsKICAgICAgICB0MCA9IEZwMi5tdWwodDEsIHQ0KTsKICAgICAgICBZMyA9IEZwMi5hZGQoWTMsIHQwKTsKICAgICAgICB0MCA9IEZwMi5tdWwodDUsIHQ0KTsKICAgICAgICBYMyA9IEZwMi5tdWwodDMsIFgzKTsKICAgICAgICBYMyA9IEZwMi5zdWIoWDMsIHQwKTsKICAgICAgICB0MCA9IEZwMi5tdWwodDMsIHQxKTsKICAgICAgICBaMyA9IEZwMi5tdWwodDUsIFozKTsKICAgICAgICBaMyA9IEZwMi5hZGQoWjMsIHQwKTsKICAgICAgICByZXR1cm4gbmV3IFBvaW50MihYMywgWTMsIFozKTsKICAgICAgfQogICAgICBzdWJ0cmFjdChvdGhlcikgewogICAgICAgIHJldHVybiB0aGlzLmFkZChvdGhlci5uZWdhdGUoKSk7CiAgICAgIH0KICAgICAgaXMwKCkgewogICAgICAgIHJldHVybiB0aGlzLmVxdWFscyhQb2ludDIuWkVSTyk7CiAgICAgIH0KICAgICAgd05BRihuKSB7CiAgICAgICAgcmV0dXJuIHduYWYud05BRkNhY2hlZCh0aGlzLCBwb2ludFByZWNvbXB1dGVzLCBuLCAoY29tcCkgPT4gewogICAgICAgICAgY29uc3QgdG9JbnYgPSBGcDIuaW52ZXJ0QmF0Y2goY29tcC5tYXAoKHApID0+IHAucHopKTsKICAgICAgICAgIHJldHVybiBjb21wLm1hcCgocCwgaSkgPT4gcC50b0FmZmluZSh0b0ludltpXSkpLm1hcChQb2ludDIuZnJvbUFmZmluZSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIE5vbi1jb25zdGFudC10aW1lIG11bHRpcGxpY2F0aW9uLiBVc2VzIGRvdWJsZS1hbmQtYWRkIGFsZ29yaXRobS4KICAgICAgICogSXQncyBmYXN0ZXIsIGJ1dCBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4geW91IGRvbid0IGNhcmUgYWJvdXQKICAgICAgICogYW4gZXhwb3NlZCBwcml2YXRlIGtleSBlLmcuIHNpZyB2ZXJpZmljYXRpb24sIHdoaWNoIHdvcmtzIG92ZXIgKnB1YmxpYyoga2V5cy4KICAgICAgICovCiAgICAgIG11bHRpcGx5VW5zYWZlKG4pIHsKICAgICAgICBjb25zdCBJID0gUG9pbnQyLlpFUk87CiAgICAgICAgaWYgKG4gPT09IF8wbjUpCiAgICAgICAgICByZXR1cm4gSTsKICAgICAgICBhc3NlcnRHRShuKTsKICAgICAgICBpZiAobiA9PT0gXzFuNSkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIGNvbnN0IHsgZW5kbyB9ID0gQ1VSVkU7CiAgICAgICAgaWYgKCFlbmRvKQogICAgICAgICAgcmV0dXJuIHduYWYudW5zYWZlTGFkZGVyKHRoaXMsIG4pOwogICAgICAgIGxldCB7IGsxbmVnLCBrMSwgazJuZWcsIGsyIH0gPSBlbmRvLnNwbGl0U2NhbGFyKG4pOwogICAgICAgIGxldCBrMXAgPSBJOwogICAgICAgIGxldCBrMnAgPSBJOwogICAgICAgIGxldCBkID0gdGhpczsKICAgICAgICB3aGlsZSAoazEgPiBfMG41IHx8IGsyID4gXzBuNSkgewogICAgICAgICAgaWYgKGsxICYgXzFuNSkKICAgICAgICAgICAgazFwID0gazFwLmFkZChkKTsKICAgICAgICAgIGlmIChrMiAmIF8xbjUpCiAgICAgICAgICAgIGsycCA9IGsycC5hZGQoZCk7CiAgICAgICAgICBkID0gZC5kb3VibGUoKTsKICAgICAgICAgIGsxID4+PSBfMW41OwogICAgICAgICAgazIgPj49IF8xbjU7CiAgICAgICAgfQogICAgICAgIGlmIChrMW5lZykKICAgICAgICAgIGsxcCA9IGsxcC5uZWdhdGUoKTsKICAgICAgICBpZiAoazJuZWcpCiAgICAgICAgICBrMnAgPSBrMnAubmVnYXRlKCk7CiAgICAgICAgazJwID0gbmV3IFBvaW50MihGcDIubXVsKGsycC5weCwgZW5kby5iZXRhKSwgazJwLnB5LCBrMnAucHopOwogICAgICAgIHJldHVybiBrMXAuYWRkKGsycCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENvbnN0YW50IHRpbWUgbXVsdGlwbGljYXRpb24uCiAgICAgICAqIFVzZXMgd05BRiBtZXRob2QuIFdpbmRvd2VkIG1ldGhvZCBtYXkgYmUgMTAlIGZhc3RlciwKICAgICAgICogYnV0IHRha2VzIDJ4IGxvbmdlciB0byBnZW5lcmF0ZSBhbmQgY29uc3VtZXMgMnggbWVtb3J5LgogICAgICAgKiBVc2VzIHByZWNvbXB1dGVzIHdoZW4gYXZhaWxhYmxlLgogICAgICAgKiBVc2VzIGVuZG9tb3JwaGlzbSBmb3IgS29ibGl0eiBjdXJ2ZXMuCiAgICAgICAqIEBwYXJhbSBzY2FsYXIgYnkgd2hpY2ggdGhlIHBvaW50IHdvdWxkIGJlIG11bHRpcGxpZWQKICAgICAgICogQHJldHVybnMgTmV3IHBvaW50CiAgICAgICAqLwogICAgICBtdWx0aXBseShzY2FsYXIpIHsKICAgICAgICBhc3NlcnRHRShzY2FsYXIpOwogICAgICAgIGxldCBuID0gc2NhbGFyOwogICAgICAgIGxldCBwb2ludCwgZmFrZTsKICAgICAgICBjb25zdCB7IGVuZG8gfSA9IENVUlZFOwogICAgICAgIGlmIChlbmRvKSB7CiAgICAgICAgICBjb25zdCB7IGsxbmVnLCBrMSwgazJuZWcsIGsyIH0gPSBlbmRvLnNwbGl0U2NhbGFyKG4pOwogICAgICAgICAgbGV0IHsgcDogazFwLCBmOiBmMXAgfSA9IHRoaXMud05BRihrMSk7CiAgICAgICAgICBsZXQgeyBwOiBrMnAsIGY6IGYycCB9ID0gdGhpcy53TkFGKGsyKTsKICAgICAgICAgIGsxcCA9IHduYWYuY29uc3RUaW1lTmVnYXRlKGsxbmVnLCBrMXApOwogICAgICAgICAgazJwID0gd25hZi5jb25zdFRpbWVOZWdhdGUoazJuZWcsIGsycCk7CiAgICAgICAgICBrMnAgPSBuZXcgUG9pbnQyKEZwMi5tdWwoazJwLnB4LCBlbmRvLmJldGEpLCBrMnAucHksIGsycC5weik7CiAgICAgICAgICBwb2ludCA9IGsxcC5hZGQoazJwKTsKICAgICAgICAgIGZha2UgPSBmMXAuYWRkKGYycCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHsgcCwgZjogZjIgfSA9IHRoaXMud05BRihuKTsKICAgICAgICAgIHBvaW50ID0gcDsKICAgICAgICAgIGZha2UgPSBmMjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBvaW50Mi5ub3JtYWxpemVaKFtwb2ludCwgZmFrZV0pWzBdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBFZmZpY2llbnRseSBjYWxjdWxhdGUgYGFQICsgYlFgLiBVbnNhZmUsIGNhbiBleHBvc2UgcHJpdmF0ZSBrZXksIGlmIHVzZWQgaW5jb3JyZWN0bHkuCiAgICAgICAqIE5vdCB1c2luZyBTdHJhdXNzLVNoYW1pciB0cmljazogcHJlY29tcHV0YXRpb24gdGFibGVzIGFyZSBmYXN0ZXIuCiAgICAgICAqIFRoZSB0cmljayBjb3VsZCBiZSB1c2VmdWwgaWYgYm90aCBQIGFuZCBRIGFyZSBub3QgRyAobm90IGluIG91ciBjYXNlKS4KICAgICAgICogQHJldHVybnMgbm9uLXplcm8gYWZmaW5lIHBvaW50CiAgICAgICAqLwogICAgICBtdWx0aXBseUFuZEFkZFVuc2FmZShRLCBhLCBiKSB7CiAgICAgICAgY29uc3QgRyA9IFBvaW50Mi5CQVNFOwogICAgICAgIGNvbnN0IG11bCA9IChQLCBhMikgPT4gYTIgPT09IF8wbjUgfHwgYTIgPT09IF8xbjUgfHwgIVAuZXF1YWxzKEcpID8gUC5tdWx0aXBseVVuc2FmZShhMikgOiBQLm11bHRpcGx5KGEyKTsKICAgICAgICBjb25zdCBzdW0gPSBtdWwodGhpcywgYSkuYWRkKG11bChRLCBiKSk7CiAgICAgICAgcmV0dXJuIHN1bS5pczAoKSA/IHZvaWQgMCA6IHN1bTsKICAgICAgfQogICAgICAvLyBDb252ZXJ0cyBQcm9qZWN0aXZlIHBvaW50IHRvIGFmZmluZSAoeCwgeSkgY29vcmRpbmF0ZXMuCiAgICAgIC8vIENhbiBhY2NlcHQgcHJlY29tcHV0ZWQgWl4tMSAtIGZvciBleGFtcGxlLCBmcm9tIGludmVydEJhdGNoLgogICAgICAvLyAoeCwgeSwgeikg4oiLICh4PXgveiwgeT15L3opCiAgICAgIHRvQWZmaW5lKGl6KSB7CiAgICAgICAgY29uc3QgeyBweDogeCwgcHk6IHksIHB6OiB6IH0gPSB0aGlzOwogICAgICAgIGNvbnN0IGlzMCA9IHRoaXMuaXMwKCk7CiAgICAgICAgaWYgKGl6ID09IG51bGwpCiAgICAgICAgICBpeiA9IGlzMCA/IEZwMi5PTkUgOiBGcDIuaW52KHopOwogICAgICAgIGNvbnN0IGF4ID0gRnAyLm11bCh4LCBpeik7CiAgICAgICAgY29uc3QgYXkgPSBGcDIubXVsKHksIGl6KTsKICAgICAgICBjb25zdCB6eiA9IEZwMi5tdWwoeiwgaXopOwogICAgICAgIGlmIChpczApCiAgICAgICAgICByZXR1cm4geyB4OiBGcDIuWkVSTywgeTogRnAyLlpFUk8gfTsKICAgICAgICBpZiAoIUZwMi5lcWwoenosIEZwMi5PTkUpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZaIHdhcyBpbnZhbGlkIik7CiAgICAgICAgcmV0dXJuIHsgeDogYXgsIHk6IGF5IH07CiAgICAgIH0KICAgICAgaXNUb3JzaW9uRnJlZSgpIHsKICAgICAgICBjb25zdCB7IGg6IGNvZmFjdG9yLCBpc1RvcnNpb25GcmVlIH0gPSBDVVJWRTsKICAgICAgICBpZiAoY29mYWN0b3IgPT09IF8xbjUpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoaXNUb3JzaW9uRnJlZSkKICAgICAgICAgIHJldHVybiBpc1RvcnNpb25GcmVlKFBvaW50MiwgdGhpcyk7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpc1RvcnNpb25GcmVlKCkgaGFzIG5vdCBiZWVuIGRlY2xhcmVkIGZvciB0aGUgZWxsaXB0aWMgY3VydmUiKTsKICAgICAgfQogICAgICBjbGVhckNvZmFjdG9yKCkgewogICAgICAgIGNvbnN0IHsgaDogY29mYWN0b3IsIGNsZWFyQ29mYWN0b3IgfSA9IENVUlZFOwogICAgICAgIGlmIChjb2ZhY3RvciA9PT0gXzFuNSkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIGlmIChjbGVhckNvZmFjdG9yKQogICAgICAgICAgcmV0dXJuIGNsZWFyQ29mYWN0b3IoUG9pbnQyLCB0aGlzKTsKICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBseVVuc2FmZShDVVJWRS5oKTsKICAgICAgfQogICAgICB0b1Jhd0J5dGVzKGlzQ29tcHJlc3NlZCA9IHRydWUpIHsKICAgICAgICB0aGlzLmFzc2VydFZhbGlkaXR5KCk7CiAgICAgICAgcmV0dXJuIHRvQnl0ZXMzKFBvaW50MiwgdGhpcywgaXNDb21wcmVzc2VkKTsKICAgICAgfQogICAgICB0b0hleChpc0NvbXByZXNzZWQgPSB0cnVlKSB7CiAgICAgICAgcmV0dXJuIGJ5dGVzVG9IZXgyKHRoaXMudG9SYXdCeXRlcyhpc0NvbXByZXNzZWQpKTsKICAgICAgfQogICAgfQogICAgUG9pbnQyLkJBU0UgPSBuZXcgUG9pbnQyKENVUlZFLkd4LCBDVVJWRS5HeSwgRnAyLk9ORSk7CiAgICBQb2ludDIuWkVSTyA9IG5ldyBQb2ludDIoRnAyLlpFUk8sIEZwMi5PTkUsIEZwMi5aRVJPKTsKICAgIGNvbnN0IF9iaXRzID0gQ1VSVkUubkJpdExlbmd0aDsKICAgIGNvbnN0IHduYWYgPSB3TkFGKFBvaW50MiwgQ1VSVkUuZW5kbyA/IE1hdGguY2VpbChfYml0cyAvIDIpIDogX2JpdHMpOwogICAgcmV0dXJuIHsKICAgICAgQ1VSVkUsCiAgICAgIFByb2plY3RpdmVQb2ludDogUG9pbnQyLAogICAgICBub3JtUHJpdmF0ZUtleVRvU2NhbGFyLAogICAgICB3ZWllcnN0cmFzc0VxdWF0aW9uLAogICAgICBpc1dpdGhpbkN1cnZlT3JkZXIKICAgIH07CiAgfQogIGZ1bmN0aW9uIHZhbGlkYXRlT3B0cyhjdXJ2ZSkgewogICAgY29uc3Qgb3B0cyA9IHZhbGlkYXRlQmFzaWMoY3VydmUpOwogICAgdmFsaWRhdGVPYmplY3Qob3B0cywgewogICAgICBoYXNoOiAiaGFzaCIsCiAgICAgIGhtYWM6ICJmdW5jdGlvbiIsCiAgICAgIHJhbmRvbUJ5dGVzOiAiZnVuY3Rpb24iCiAgICB9LCB7CiAgICAgIGJpdHMyaW50OiAiZnVuY3Rpb24iLAogICAgICBiaXRzMmludF9tb2ROOiAiZnVuY3Rpb24iLAogICAgICBsb3dTOiAiYm9vbGVhbiIKICAgIH0pOwogICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyBsb3dTOiB0cnVlLCAuLi5vcHRzIH0pOwogIH0KICBmdW5jdGlvbiB3ZWllcnN0cmFzcyhjdXJ2ZURlZikgewogICAgY29uc3QgQ1VSVkUgPSB2YWxpZGF0ZU9wdHMoY3VydmVEZWYpOwogICAgY29uc3QgeyBGcDogRnAyLCBuOiBDVVJWRV9PUkRFUiB9ID0gQ1VSVkU7CiAgICBjb25zdCBjb21wcmVzc2VkTGVuID0gRnAyLkJZVEVTICsgMTsKICAgIGNvbnN0IHVuY29tcHJlc3NlZExlbiA9IDIgKiBGcDIuQllURVMgKyAxOwogICAgZnVuY3Rpb24gaXNWYWxpZEZpZWxkRWxlbWVudChudW0pIHsKICAgICAgcmV0dXJuIF8wbjUgPCBudW0gJiYgbnVtIDwgRnAyLk9SREVSOwogICAgfQogICAgZnVuY3Rpb24gbW9kTjIoYSkgewogICAgICByZXR1cm4gbW9kKGEsIENVUlZFX09SREVSKTsKICAgIH0KICAgIGZ1bmN0aW9uIGludk4oYSkgewogICAgICByZXR1cm4gaW52ZXJ0KGEsIENVUlZFX09SREVSKTsKICAgIH0KICAgIGNvbnN0IHsgUHJvamVjdGl2ZVBvaW50OiBQb2ludDIsIG5vcm1Qcml2YXRlS2V5VG9TY2FsYXIsIHdlaWVyc3RyYXNzRXF1YXRpb24sIGlzV2l0aGluQ3VydmVPcmRlciB9ID0gd2VpZXJzdHJhc3NQb2ludHMoewogICAgICAuLi5DVVJWRSwKICAgICAgdG9CeXRlcyhfYywgcG9pbnQsIGlzQ29tcHJlc3NlZCkgewogICAgICAgIGNvbnN0IGEgPSBwb2ludC50b0FmZmluZSgpOwogICAgICAgIGNvbnN0IHggPSBGcDIudG9CeXRlcyhhLngpOwogICAgICAgIGNvbnN0IGNhdCA9IGNvbmNhdEJ5dGVzMzsKICAgICAgICBpZiAoaXNDb21wcmVzc2VkKSB7CiAgICAgICAgICByZXR1cm4gY2F0KFVpbnQ4QXJyYXkuZnJvbShbcG9pbnQuaGFzRXZlblkoKSA/IDIgOiAzXSksIHgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gY2F0KFVpbnQ4QXJyYXkuZnJvbShbNF0pLCB4LCBGcDIudG9CeXRlcyhhLnkpKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGZyb21CeXRlcyhieXRlczIpIHsKICAgICAgICBjb25zdCBsZW4gPSBieXRlczIubGVuZ3RoOwogICAgICAgIGNvbnN0IGhlYWQgPSBieXRlczJbMF07CiAgICAgICAgY29uc3QgdGFpbCA9IGJ5dGVzMi5zdWJhcnJheSgxKTsKICAgICAgICBpZiAobGVuID09PSBjb21wcmVzc2VkTGVuICYmIChoZWFkID09PSAyIHx8IGhlYWQgPT09IDMpKSB7CiAgICAgICAgICBjb25zdCB4ID0gYnl0ZXNUb051bWJlckJFKHRhaWwpOwogICAgICAgICAgaWYgKCFpc1ZhbGlkRmllbGRFbGVtZW50KHgpKQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlBvaW50IGlzIG5vdCBvbiBjdXJ2ZSIpOwogICAgICAgICAgY29uc3QgeTIgPSB3ZWllcnN0cmFzc0VxdWF0aW9uKHgpOwogICAgICAgICAgbGV0IHk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB5ID0gRnAyLnNxcnQoeTIpOwogICAgICAgICAgfSBjYXRjaCAoc3FydEVycm9yKSB7CiAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IHNxcnRFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gIjogIiArIHNxcnRFcnJvci5tZXNzYWdlIDogIiI7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiUG9pbnQgaXMgbm90IG9uIGN1cnZlIiArIHN1ZmZpeCk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBpc1lPZGQgPSAoeSAmIF8xbjUpID09PSBfMW41OwogICAgICAgICAgY29uc3QgaXNIZWFkT2RkID0gKGhlYWQgJiAxKSA9PT0gMTsKICAgICAgICAgIGlmIChpc0hlYWRPZGQgIT09IGlzWU9kZCkKICAgICAgICAgICAgeSA9IEZwMi5uZWcoeSk7CiAgICAgICAgICByZXR1cm4geyB4LCB5IH07CiAgICAgICAgfSBlbHNlIGlmIChsZW4gPT09IHVuY29tcHJlc3NlZExlbiAmJiBoZWFkID09PSA0KSB7CiAgICAgICAgICBjb25zdCB4ID0gRnAyLmZyb21CeXRlcyh0YWlsLnN1YmFycmF5KDAsIEZwMi5CWVRFUykpOwogICAgICAgICAgY29uc3QgeSA9IEZwMi5mcm9tQnl0ZXModGFpbC5zdWJhcnJheShGcDIuQllURVMsIDIgKiBGcDIuQllURVMpKTsKICAgICAgICAgIHJldHVybiB7IHgsIHkgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb2ludCBvZiBsZW5ndGggJHtsZW59IHdhcyBpbnZhbGlkLiBFeHBlY3RlZCAke2NvbXByZXNzZWRMZW59IGNvbXByZXNzZWQgYnl0ZXMgb3IgJHt1bmNvbXByZXNzZWRMZW59IHVuY29tcHJlc3NlZCBieXRlc2ApOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBjb25zdCBudW1Ub05CeXRlU3RyID0gKG51bSkgPT4gYnl0ZXNUb0hleDIobnVtYmVyVG9CeXRlc0JFKG51bSwgQ1VSVkUubkJ5dGVMZW5ndGgpKTsKICAgIGZ1bmN0aW9uIGlzQmlnZ2VyVGhhbkhhbGZPcmRlcihudW1iZXIyKSB7CiAgICAgIGNvbnN0IEhBTEYgPSBDVVJWRV9PUkRFUiA+PiBfMW41OwogICAgICByZXR1cm4gbnVtYmVyMiA+IEhBTEY7CiAgICB9CiAgICBmdW5jdGlvbiBub3JtYWxpemVTKHMpIHsKICAgICAgcmV0dXJuIGlzQmlnZ2VyVGhhbkhhbGZPcmRlcihzKSA/IG1vZE4yKC1zKSA6IHM7CiAgICB9CiAgICBjb25zdCBzbGNOdW0gPSAoYiwgZnJvbSwgdG8pID0+IGJ5dGVzVG9OdW1iZXJCRShiLnNsaWNlKGZyb20sIHRvKSk7CiAgICBjbGFzcyBTaWduYXR1cmUgewogICAgICBjb25zdHJ1Y3RvcihyLCBzLCByZWNvdmVyeSkgewogICAgICAgIHRoaXMuciA9IHI7CiAgICAgICAgdGhpcy5zID0gczsKICAgICAgICB0aGlzLnJlY292ZXJ5ID0gcmVjb3Zlcnk7CiAgICAgICAgdGhpcy5hc3NlcnRWYWxpZGl0eSgpOwogICAgICB9CiAgICAgIC8vIHBhaXIgKGJ5dGVzIG9mIHIsIGJ5dGVzIG9mIHMpCiAgICAgIHN0YXRpYyBmcm9tQ29tcGFjdChoZXgpIHsKICAgICAgICBjb25zdCBsID0gQ1VSVkUubkJ5dGVMZW5ndGg7CiAgICAgICAgaGV4ID0gZW5zdXJlQnl0ZXMoImNvbXBhY3RTaWduYXR1cmUiLCBoZXgsIGwgKiAyKTsKICAgICAgICByZXR1cm4gbmV3IFNpZ25hdHVyZShzbGNOdW0oaGV4LCAwLCBsKSwgc2xjTnVtKGhleCwgbCwgMiAqIGwpKTsKICAgICAgfQogICAgICAvLyBERVIgZW5jb2RlZCBFQ0RTQSBzaWduYXR1cmUKICAgICAgLy8gaHR0cHM6Ly9iaXRjb2luLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy81NzY0NC93aGF0LWFyZS10aGUtcGFydHMtb2YtYS1iaXRjb2luLXRyYW5zYWN0aW9uLWlucHV0LXNjcmlwdAogICAgICBzdGF0aWMgZnJvbURFUihoZXgpIHsKICAgICAgICBjb25zdCB7IHIsIHMgfSA9IERFUi50b1NpZyhlbnN1cmVCeXRlcygiREVSIiwgaGV4KSk7CiAgICAgICAgcmV0dXJuIG5ldyBTaWduYXR1cmUociwgcyk7CiAgICAgIH0KICAgICAgYXNzZXJ0VmFsaWRpdHkoKSB7CiAgICAgICAgaWYgKCFpc1dpdGhpbkN1cnZlT3JkZXIodGhpcy5yKSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiciBtdXN0IGJlIDAgPCByIDwgQ1VSVkUubiIpOwogICAgICAgIGlmICghaXNXaXRoaW5DdXJ2ZU9yZGVyKHRoaXMucykpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInMgbXVzdCBiZSAwIDwgcyA8IENVUlZFLm4iKTsKICAgICAgfQogICAgICBhZGRSZWNvdmVyeUJpdChyZWNvdmVyeSkgewogICAgICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKHRoaXMuciwgdGhpcy5zLCByZWNvdmVyeSk7CiAgICAgIH0KICAgICAgcmVjb3ZlclB1YmxpY0tleShtc2dIYXNoKSB7CiAgICAgICAgY29uc3QgeyByLCBzLCByZWNvdmVyeTogcmVjIH0gPSB0aGlzOwogICAgICAgIGNvbnN0IGggPSBiaXRzMmludF9tb2ROKGVuc3VyZUJ5dGVzKCJtc2dIYXNoIiwgbXNnSGFzaCkpOwogICAgICAgIGlmIChyZWMgPT0gbnVsbCB8fCAhWzAsIDEsIDIsIDNdLmluY2x1ZGVzKHJlYykpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInJlY292ZXJ5IGlkIGludmFsaWQiKTsKICAgICAgICBjb25zdCByYWRqID0gcmVjID09PSAyIHx8IHJlYyA9PT0gMyA/IHIgKyBDVVJWRS5uIDogcjsKICAgICAgICBpZiAocmFkaiA+PSBGcDIuT1JERVIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInJlY292ZXJ5IGlkIDIgb3IgMyBpbnZhbGlkIik7CiAgICAgICAgY29uc3QgcHJlZml4ID0gKHJlYyAmIDEpID09PSAwID8gIjAyIiA6ICIwMyI7CiAgICAgICAgY29uc3QgUiA9IFBvaW50Mi5mcm9tSGV4KHByZWZpeCArIG51bVRvTkJ5dGVTdHIocmFkaikpOwogICAgICAgIGNvbnN0IGlyID0gaW52TihyYWRqKTsKICAgICAgICBjb25zdCB1MSA9IG1vZE4yKC1oICogaXIpOwogICAgICAgIGNvbnN0IHUyID0gbW9kTjIocyAqIGlyKTsKICAgICAgICBjb25zdCBRID0gUG9pbnQyLkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoUiwgdTEsIHUyKTsKICAgICAgICBpZiAoIVEpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInBvaW50IGF0IGluZmluaWZ5Iik7CiAgICAgICAgUS5hc3NlcnRWYWxpZGl0eSgpOwogICAgICAgIHJldHVybiBROwogICAgICB9CiAgICAgIC8vIFNpZ25hdHVyZXMgc2hvdWxkIGJlIGxvdy1zLCB0byBwcmV2ZW50IG1hbGxlYWJpbGl0eS4KICAgICAgaGFzSGlnaFMoKSB7CiAgICAgICAgcmV0dXJuIGlzQmlnZ2VyVGhhbkhhbGZPcmRlcih0aGlzLnMpOwogICAgICB9CiAgICAgIG5vcm1hbGl6ZVMoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaGFzSGlnaFMoKSA/IG5ldyBTaWduYXR1cmUodGhpcy5yLCBtb2ROMigtdGhpcy5zKSwgdGhpcy5yZWNvdmVyeSkgOiB0aGlzOwogICAgICB9CiAgICAgIC8vIERFUi1lbmNvZGVkCiAgICAgIHRvREVSUmF3Qnl0ZXMoKSB7CiAgICAgICAgcmV0dXJuIGhleFRvQnl0ZXMyKHRoaXMudG9ERVJIZXgoKSk7CiAgICAgIH0KICAgICAgdG9ERVJIZXgoKSB7CiAgICAgICAgcmV0dXJuIERFUi5oZXhGcm9tU2lnKHsgcjogdGhpcy5yLCBzOiB0aGlzLnMgfSk7CiAgICAgIH0KICAgICAgLy8gcGFkZGVkIGJ5dGVzIG9mIHIsIHRoZW4gcGFkZGVkIGJ5dGVzIG9mIHMKICAgICAgdG9Db21wYWN0UmF3Qnl0ZXMoKSB7CiAgICAgICAgcmV0dXJuIGhleFRvQnl0ZXMyKHRoaXMudG9Db21wYWN0SGV4KCkpOwogICAgICB9CiAgICAgIHRvQ29tcGFjdEhleCgpIHsKICAgICAgICByZXR1cm4gbnVtVG9OQnl0ZVN0cih0aGlzLnIpICsgbnVtVG9OQnl0ZVN0cih0aGlzLnMpOwogICAgICB9CiAgICB9CiAgICBjb25zdCB1dGlscyA9IHsKICAgICAgaXNWYWxpZFByaXZhdGVLZXkocHJpdmF0ZUtleSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBub3JtUHJpdmF0ZUtleVRvU2NhbGFyKHByaXZhdGVLZXkpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG5vcm1Qcml2YXRlS2V5VG9TY2FsYXIsCiAgICAgIC8qKgogICAgICAgKiBQcm9kdWNlcyBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgcHJpdmF0ZSBrZXkgZnJvbSByYW5kb20gb2Ygc2l6ZQogICAgICAgKiAoZ3JvdXBMZW4gKyBjZWlsKGdyb3VwTGVuIC8gMikpIHdpdGggbW9kdWxvIGJpYXMgYmVpbmcgbmVnbGlnaWJsZS4KICAgICAgICovCiAgICAgIHJhbmRvbVByaXZhdGVLZXk6ICgpID0+IHsKICAgICAgICBjb25zdCBsZW5ndGggPSBnZXRNaW5IYXNoTGVuZ3RoKENVUlZFLm4pOwogICAgICAgIHJldHVybiBtYXBIYXNoVG9GaWVsZChDVVJWRS5yYW5kb21CeXRlcyhsZW5ndGgpLCBDVVJWRS5uKTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgcHJlY29tcHV0ZSB0YWJsZSBmb3IgYW4gYXJiaXRyYXJ5IEVDIHBvaW50LiBNYWtlcyBwb2ludCAiY2FjaGVkIi4KICAgICAgICogQWxsb3dzIHRvIG1hc3NpdmVseSBzcGVlZC11cCBgcG9pbnQubXVsdGlwbHkoc2NhbGFyKWAuCiAgICAgICAqIEByZXR1cm5zIGNhY2hlZCBwb2ludAogICAgICAgKiBAZXhhbXBsZQogICAgICAgKiBjb25zdCBmYXN0ID0gdXRpbHMucHJlY29tcHV0ZSg4LCBQcm9qZWN0aXZlUG9pbnQuZnJvbUhleChzb21lb25lc1B1YktleSkpOwogICAgICAgKiBmYXN0Lm11bHRpcGx5KHByaXZLZXkpOyAvLyBtdWNoIGZhc3RlciBFQ0RIIG5vdwogICAgICAgKi8KICAgICAgcHJlY29tcHV0ZSh3aW5kb3dTaXplID0gOCwgcG9pbnQgPSBQb2ludDIuQkFTRSkgewogICAgICAgIHBvaW50Ll9zZXRXaW5kb3dTaXplKHdpbmRvd1NpemUpOwogICAgICAgIHBvaW50Lm11bHRpcGx5KEJpZ0ludCgzKSk7CiAgICAgICAgcmV0dXJuIHBvaW50OwogICAgICB9CiAgICB9OwogICAgZnVuY3Rpb24gZ2V0UHVibGljS2V5KHByaXZhdGVLZXksIGlzQ29tcHJlc3NlZCA9IHRydWUpIHsKICAgICAgcmV0dXJuIFBvaW50Mi5mcm9tUHJpdmF0ZUtleShwcml2YXRlS2V5KS50b1Jhd0J5dGVzKGlzQ29tcHJlc3NlZCk7CiAgICB9CiAgICBmdW5jdGlvbiBpc1Byb2JQdWIoaXRlbSkgewogICAgICBjb25zdCBhcnIgPSBpc0J5dGVzMihpdGVtKTsKICAgICAgY29uc3Qgc3RyID0gdHlwZW9mIGl0ZW0gPT09ICJzdHJpbmciOwogICAgICBjb25zdCBsZW4gPSAoYXJyIHx8IHN0cikgJiYgaXRlbS5sZW5ndGg7CiAgICAgIGlmIChhcnIpCiAgICAgICAgcmV0dXJuIGxlbiA9PT0gY29tcHJlc3NlZExlbiB8fCBsZW4gPT09IHVuY29tcHJlc3NlZExlbjsKICAgICAgaWYgKHN0cikKICAgICAgICByZXR1cm4gbGVuID09PSAyICogY29tcHJlc3NlZExlbiB8fCBsZW4gPT09IDIgKiB1bmNvbXByZXNzZWRMZW47CiAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUG9pbnQyKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRTaGFyZWRTZWNyZXQocHJpdmF0ZUEsIHB1YmxpY0IsIGlzQ29tcHJlc3NlZCA9IHRydWUpIHsKICAgICAgaWYgKGlzUHJvYlB1Yihwcml2YXRlQSkpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJmaXJzdCBhcmcgbXVzdCBiZSBwcml2YXRlIGtleSIpOwogICAgICBpZiAoIWlzUHJvYlB1YihwdWJsaWNCKSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInNlY29uZCBhcmcgbXVzdCBiZSBwdWJsaWMga2V5Iik7CiAgICAgIGNvbnN0IGIgPSBQb2ludDIuZnJvbUhleChwdWJsaWNCKTsKICAgICAgcmV0dXJuIGIubXVsdGlwbHkobm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2YXRlQSkpLnRvUmF3Qnl0ZXMoaXNDb21wcmVzc2VkKTsKICAgIH0KICAgIGNvbnN0IGJpdHMyaW50ID0gQ1VSVkUuYml0czJpbnQgfHwgZnVuY3Rpb24oYnl0ZXMyKSB7CiAgICAgIGNvbnN0IG51bSA9IGJ5dGVzVG9OdW1iZXJCRShieXRlczIpOwogICAgICBjb25zdCBkZWx0YSA9IGJ5dGVzMi5sZW5ndGggKiA4IC0gQ1VSVkUubkJpdExlbmd0aDsKICAgICAgcmV0dXJuIGRlbHRhID4gMCA/IG51bSA+PiBCaWdJbnQoZGVsdGEpIDogbnVtOwogICAgfTsKICAgIGNvbnN0IGJpdHMyaW50X21vZE4gPSBDVVJWRS5iaXRzMmludF9tb2ROIHx8IGZ1bmN0aW9uKGJ5dGVzMikgewogICAgICByZXR1cm4gbW9kTjIoYml0czJpbnQoYnl0ZXMyKSk7CiAgICB9OwogICAgY29uc3QgT1JERVJfTUFTSyA9IGJpdE1hc2soQ1VSVkUubkJpdExlbmd0aCk7CiAgICBmdW5jdGlvbiBpbnQyb2N0ZXRzKG51bSkgewogICAgICBpZiAodHlwZW9mIG51bSAhPT0gImJpZ2ludCIpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiaWdpbnQgZXhwZWN0ZWQiKTsKICAgICAgaWYgKCEoXzBuNSA8PSBudW0gJiYgbnVtIDwgT1JERVJfTUFTSykpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiaWdpbnQgZXhwZWN0ZWQgPCAyXiR7Q1VSVkUubkJpdExlbmd0aH1gKTsKICAgICAgcmV0dXJuIG51bWJlclRvQnl0ZXNCRShudW0sIENVUlZFLm5CeXRlTGVuZ3RoKTsKICAgIH0KICAgIGZ1bmN0aW9uIHByZXBTaWcobXNnSGFzaCwgcHJpdmF0ZUtleSwgb3B0cyA9IGRlZmF1bHRTaWdPcHRzKSB7CiAgICAgIGlmIChbInJlY292ZXJlZCIsICJjYW5vbmljYWwiXS5zb21lKChrKSA9PiBrIGluIG9wdHMpKQogICAgICAgIHRocm93IG5ldyBFcnJvcigic2lnbigpIGxlZ2FjeSBvcHRpb25zIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgY29uc3QgeyBoYXNoOiBoYXNoMywgcmFuZG9tQnl0ZXM6IHJhbmRvbUJ5dGVzMiB9ID0gQ1VSVkU7CiAgICAgIGxldCB7IGxvd1MsIHByZWhhc2gsIGV4dHJhRW50cm9weTogZW50IH0gPSBvcHRzOwogICAgICBpZiAobG93UyA9PSBudWxsKQogICAgICAgIGxvd1MgPSB0cnVlOwogICAgICBtc2dIYXNoID0gZW5zdXJlQnl0ZXMoIm1zZ0hhc2giLCBtc2dIYXNoKTsKICAgICAgaWYgKHByZWhhc2gpCiAgICAgICAgbXNnSGFzaCA9IGVuc3VyZUJ5dGVzKCJwcmVoYXNoZWQgbXNnSGFzaCIsIGhhc2gzKG1zZ0hhc2gpKTsKICAgICAgY29uc3QgaDFpbnQgPSBiaXRzMmludF9tb2ROKG1zZ0hhc2gpOwogICAgICBjb25zdCBkID0gbm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2YXRlS2V5KTsKICAgICAgY29uc3Qgc2VlZEFyZ3MgPSBbaW50Mm9jdGV0cyhkKSwgaW50Mm9jdGV0cyhoMWludCldOwogICAgICBpZiAoZW50ICE9IG51bGwgJiYgZW50ICE9PSBmYWxzZSkgewogICAgICAgIGNvbnN0IGUgPSBlbnQgPT09IHRydWUgPyByYW5kb21CeXRlczIoRnAyLkJZVEVTKSA6IGVudDsKICAgICAgICBzZWVkQXJncy5wdXNoKGVuc3VyZUJ5dGVzKCJleHRyYUVudHJvcHkiLCBlKSk7CiAgICAgIH0KICAgICAgY29uc3Qgc2VlZCA9IGNvbmNhdEJ5dGVzMyguLi5zZWVkQXJncyk7CiAgICAgIGNvbnN0IG0gPSBoMWludDsKICAgICAgZnVuY3Rpb24gazJzaWcoa0J5dGVzKSB7CiAgICAgICAgY29uc3QgayA9IGJpdHMyaW50KGtCeXRlcyk7CiAgICAgICAgaWYgKCFpc1dpdGhpbkN1cnZlT3JkZXIoaykpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgaWsgPSBpbnZOKGspOwogICAgICAgIGNvbnN0IHEgPSBQb2ludDIuQkFTRS5tdWx0aXBseShrKS50b0FmZmluZSgpOwogICAgICAgIGNvbnN0IHIgPSBtb2ROMihxLngpOwogICAgICAgIGlmIChyID09PSBfMG41KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IHMgPSBtb2ROMihpayAqIG1vZE4yKG0gKyByICogZCkpOwogICAgICAgIGlmIChzID09PSBfMG41KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGxldCByZWNvdmVyeSA9IChxLnggPT09IHIgPyAwIDogMikgfCBOdW1iZXIocS55ICYgXzFuNSk7CiAgICAgICAgbGV0IG5vcm1TID0gczsKICAgICAgICBpZiAobG93UyAmJiBpc0JpZ2dlclRoYW5IYWxmT3JkZXIocykpIHsKICAgICAgICAgIG5vcm1TID0gbm9ybWFsaXplUyhzKTsKICAgICAgICAgIHJlY292ZXJ5IF49IDE7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKHIsIG5vcm1TLCByZWNvdmVyeSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgc2VlZCwgazJzaWcgfTsKICAgIH0KICAgIGNvbnN0IGRlZmF1bHRTaWdPcHRzID0geyBsb3dTOiBDVVJWRS5sb3dTLCBwcmVoYXNoOiBmYWxzZSB9OwogICAgY29uc3QgZGVmYXVsdFZlck9wdHMgPSB7IGxvd1M6IENVUlZFLmxvd1MsIHByZWhhc2g6IGZhbHNlIH07CiAgICBmdW5jdGlvbiBzaWduMihtc2dIYXNoLCBwcml2S2V5LCBvcHRzID0gZGVmYXVsdFNpZ09wdHMpIHsKICAgICAgY29uc3QgeyBzZWVkLCBrMnNpZyB9ID0gcHJlcFNpZyhtc2dIYXNoLCBwcml2S2V5LCBvcHRzKTsKICAgICAgY29uc3QgQyA9IENVUlZFOwogICAgICBjb25zdCBkcmJnID0gY3JlYXRlSG1hY0RyYmcoQy5oYXNoLm91dHB1dExlbiwgQy5uQnl0ZUxlbmd0aCwgQy5obWFjKTsKICAgICAgcmV0dXJuIGRyYmcoc2VlZCwgazJzaWcpOwogICAgfQogICAgUG9pbnQyLkJBU0UuX3NldFdpbmRvd1NpemUoOCk7CiAgICBmdW5jdGlvbiB2ZXJpZnkoc2lnbmF0dXJlLCBtc2dIYXNoLCBwdWJsaWNLZXksIG9wdHMgPSBkZWZhdWx0VmVyT3B0cykgewogICAgICBjb25zdCBzZyA9IHNpZ25hdHVyZTsKICAgICAgbXNnSGFzaCA9IGVuc3VyZUJ5dGVzKCJtc2dIYXNoIiwgbXNnSGFzaCk7CiAgICAgIHB1YmxpY0tleSA9IGVuc3VyZUJ5dGVzKCJwdWJsaWNLZXkiLCBwdWJsaWNLZXkpOwogICAgICBpZiAoInN0cmljdCIgaW4gb3B0cykKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm9wdGlvbnMuc3RyaWN0IHdhcyByZW5hbWVkIHRvIGxvd1MiKTsKICAgICAgY29uc3QgeyBsb3dTLCBwcmVoYXNoIH0gPSBvcHRzOwogICAgICBsZXQgX3NpZyA9IHZvaWQgMDsKICAgICAgbGV0IFA7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKHR5cGVvZiBzZyA9PT0gInN0cmluZyIgfHwgaXNCeXRlczIoc2cpKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBfc2lnID0gU2lnbmF0dXJlLmZyb21ERVIoc2cpOwogICAgICAgICAgfSBjYXRjaCAoZGVyRXJyb3IpIHsKICAgICAgICAgICAgaWYgKCEoZGVyRXJyb3IgaW5zdGFuY2VvZiBERVIuRXJyKSkKICAgICAgICAgICAgICB0aHJvdyBkZXJFcnJvcjsKICAgICAgICAgICAgX3NpZyA9IFNpZ25hdHVyZS5mcm9tQ29tcGFjdChzZyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2cgPT09ICJvYmplY3QiICYmIHR5cGVvZiBzZy5yID09PSAiYmlnaW50IiAmJiB0eXBlb2Ygc2cucyA9PT0gImJpZ2ludCIpIHsKICAgICAgICAgIGNvbnN0IHsgcjogcjIsIHM6IHMyIH0gPSBzZzsKICAgICAgICAgIF9zaWcgPSBuZXcgU2lnbmF0dXJlKHIyLCBzMik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiUEFSU0UiKTsKICAgICAgICB9CiAgICAgICAgUCA9IFBvaW50Mi5mcm9tSGV4KHB1YmxpY0tleSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgPT09ICJQQVJTRSIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNpZ25hdHVyZSBtdXN0IGJlIFNpZ25hdHVyZSBpbnN0YW5jZSwgVWludDhBcnJheSBvciBoZXggc3RyaW5nYCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChsb3dTICYmIF9zaWcuaGFzSGlnaFMoKSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChwcmVoYXNoKQogICAgICAgIG1zZ0hhc2ggPSBDVVJWRS5oYXNoKG1zZ0hhc2gpOwogICAgICBjb25zdCB7IHIsIHMgfSA9IF9zaWc7CiAgICAgIGNvbnN0IGggPSBiaXRzMmludF9tb2ROKG1zZ0hhc2gpOwogICAgICBjb25zdCBpcyA9IGludk4ocyk7CiAgICAgIGNvbnN0IHUxID0gbW9kTjIoaCAqIGlzKTsKICAgICAgY29uc3QgdTIgPSBtb2ROMihyICogaXMpOwogICAgICBjb25zdCBSID0gUG9pbnQyLkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoUCwgdTEsIHUyKT8udG9BZmZpbmUoKTsKICAgICAgaWYgKCFSKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgY29uc3QgdiA9IG1vZE4yKFIueCk7CiAgICAgIHJldHVybiB2ID09PSByOwogICAgfQogICAgcmV0dXJuIHsKICAgICAgQ1VSVkUsCiAgICAgIGdldFB1YmxpY0tleSwKICAgICAgZ2V0U2hhcmVkU2VjcmV0LAogICAgICBzaWduOiBzaWduMiwKICAgICAgdmVyaWZ5LAogICAgICBQcm9qZWN0aXZlUG9pbnQ6IFBvaW50MiwKICAgICAgU2lnbmF0dXJlLAogICAgICB1dGlscwogICAgfTsKICB9CiAgZnVuY3Rpb24gU1dVRnBTcXJ0UmF0aW8oRnAyLCBaKSB7CiAgICBjb25zdCBxID0gRnAyLk9SREVSOwogICAgbGV0IGwgPSBfMG41OwogICAgZm9yIChsZXQgbyA9IHEgLSBfMW41OyBvICUgXzJuNCA9PT0gXzBuNTsgbyAvPSBfMm40KQogICAgICBsICs9IF8xbjU7CiAgICBjb25zdCBjMSA9IGw7CiAgICBjb25zdCBfMm5fcG93X2MxXzEgPSBfMm40IDw8IGMxIC0gXzFuNSAtIF8xbjU7CiAgICBjb25zdCBfMm5fcG93X2MxID0gXzJuX3Bvd19jMV8xICogXzJuNDsKICAgIGNvbnN0IGMyID0gKHEgLSBfMW41KSAvIF8ybl9wb3dfYzE7CiAgICBjb25zdCBjMyA9IChjMiAtIF8xbjUpIC8gXzJuNDsKICAgIGNvbnN0IGM0ID0gXzJuX3Bvd19jMSAtIF8xbjU7CiAgICBjb25zdCBjNSA9IF8ybl9wb3dfYzFfMTsKICAgIGNvbnN0IGM2ID0gRnAyLnBvdyhaLCBjMik7CiAgICBjb25zdCBjNyA9IEZwMi5wb3coWiwgKGMyICsgXzFuNSkgLyBfMm40KTsKICAgIGxldCBzcXJ0UmF0aW8gPSAodSwgdikgPT4gewogICAgICBsZXQgdHYxID0gYzY7CiAgICAgIGxldCB0djIgPSBGcDIucG93KHYsIGM0KTsKICAgICAgbGV0IHR2MyA9IEZwMi5zcXIodHYyKTsKICAgICAgdHYzID0gRnAyLm11bCh0djMsIHYpOwogICAgICBsZXQgdHY1ID0gRnAyLm11bCh1LCB0djMpOwogICAgICB0djUgPSBGcDIucG93KHR2NSwgYzMpOwogICAgICB0djUgPSBGcDIubXVsKHR2NSwgdHYyKTsKICAgICAgdHYyID0gRnAyLm11bCh0djUsIHYpOwogICAgICB0djMgPSBGcDIubXVsKHR2NSwgdSk7CiAgICAgIGxldCB0djQgPSBGcDIubXVsKHR2MywgdHYyKTsKICAgICAgdHY1ID0gRnAyLnBvdyh0djQsIGM1KTsKICAgICAgbGV0IGlzUVIgPSBGcDIuZXFsKHR2NSwgRnAyLk9ORSk7CiAgICAgIHR2MiA9IEZwMi5tdWwodHYzLCBjNyk7CiAgICAgIHR2NSA9IEZwMi5tdWwodHY0LCB0djEpOwogICAgICB0djMgPSBGcDIuY21vdih0djIsIHR2MywgaXNRUik7CiAgICAgIHR2NCA9IEZwMi5jbW92KHR2NSwgdHY0LCBpc1FSKTsKICAgICAgZm9yIChsZXQgaSA9IGMxOyBpID4gXzFuNTsgaS0tKSB7CiAgICAgICAgbGV0IHR2NTIgPSBpIC0gXzJuNDsKICAgICAgICB0djUyID0gXzJuNCA8PCB0djUyIC0gXzFuNTsKICAgICAgICBsZXQgdHZ2NSA9IEZwMi5wb3codHY0LCB0djUyKTsKICAgICAgICBjb25zdCBlMSA9IEZwMi5lcWwodHZ2NSwgRnAyLk9ORSk7CiAgICAgICAgdHYyID0gRnAyLm11bCh0djMsIHR2MSk7CiAgICAgICAgdHYxID0gRnAyLm11bCh0djEsIHR2MSk7CiAgICAgICAgdHZ2NSA9IEZwMi5tdWwodHY0LCB0djEpOwogICAgICAgIHR2MyA9IEZwMi5jbW92KHR2MiwgdHYzLCBlMSk7CiAgICAgICAgdHY0ID0gRnAyLmNtb3YodHZ2NSwgdHY0LCBlMSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgaXNWYWxpZDogaXNRUiwgdmFsdWU6IHR2MyB9OwogICAgfTsKICAgIGlmIChGcDIuT1JERVIgJSBfNG4yID09PSBfM24yKSB7CiAgICAgIGNvbnN0IGMxMiA9IChGcDIuT1JERVIgLSBfM24yKSAvIF80bjI7CiAgICAgIGNvbnN0IGMyMiA9IEZwMi5zcXJ0KEZwMi5uZWcoWikpOwogICAgICBzcXJ0UmF0aW8gPSAodSwgdikgPT4gewogICAgICAgIGxldCB0djEgPSBGcDIuc3FyKHYpOwogICAgICAgIGNvbnN0IHR2MiA9IEZwMi5tdWwodSwgdik7CiAgICAgICAgdHYxID0gRnAyLm11bCh0djEsIHR2Mik7CiAgICAgICAgbGV0IHkxID0gRnAyLnBvdyh0djEsIGMxMik7CiAgICAgICAgeTEgPSBGcDIubXVsKHkxLCB0djIpOwogICAgICAgIGNvbnN0IHkyID0gRnAyLm11bCh5MSwgYzIyKTsKICAgICAgICBjb25zdCB0djMgPSBGcDIubXVsKEZwMi5zcXIoeTEpLCB2KTsKICAgICAgICBjb25zdCBpc1FSID0gRnAyLmVxbCh0djMsIHUpOwogICAgICAgIGxldCB5ID0gRnAyLmNtb3YoeTIsIHkxLCBpc1FSKTsKICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBpc1FSLCB2YWx1ZTogeSB9OwogICAgICB9OwogICAgfQogICAgcmV0dXJuIHNxcnRSYXRpbzsKICB9CiAgZnVuY3Rpb24gbWFwVG9DdXJ2ZVNpbXBsZVNXVShGcDIsIG9wdHMpIHsKICAgIHZhbGlkYXRlRmllbGQoRnAyKTsKICAgIGlmICghRnAyLmlzVmFsaWQob3B0cy5BKSB8fCAhRnAyLmlzVmFsaWQob3B0cy5CKSB8fCAhRnAyLmlzVmFsaWQob3B0cy5aKSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJtYXBUb0N1cnZlU2ltcGxlU1dVOiBpbnZhbGlkIG9wdHMiKTsKICAgIGNvbnN0IHNxcnRSYXRpbyA9IFNXVUZwU3FydFJhdGlvKEZwMiwgb3B0cy5aKTsKICAgIGlmICghRnAyLmlzT2RkKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkZwLmlzT2RkIGlzIG5vdCBpbXBsZW1lbnRlZCEiKTsKICAgIHJldHVybiAodSkgPT4gewogICAgICBsZXQgdHYxLCB0djIsIHR2MywgdHY0LCB0djUsIHR2NiwgeCwgeTsKICAgICAgdHYxID0gRnAyLnNxcih1KTsKICAgICAgdHYxID0gRnAyLm11bCh0djEsIG9wdHMuWik7CiAgICAgIHR2MiA9IEZwMi5zcXIodHYxKTsKICAgICAgdHYyID0gRnAyLmFkZCh0djIsIHR2MSk7CiAgICAgIHR2MyA9IEZwMi5hZGQodHYyLCBGcDIuT05FKTsKICAgICAgdHYzID0gRnAyLm11bCh0djMsIG9wdHMuQik7CiAgICAgIHR2NCA9IEZwMi5jbW92KG9wdHMuWiwgRnAyLm5lZyh0djIpLCAhRnAyLmVxbCh0djIsIEZwMi5aRVJPKSk7CiAgICAgIHR2NCA9IEZwMi5tdWwodHY0LCBvcHRzLkEpOwogICAgICB0djIgPSBGcDIuc3FyKHR2Myk7CiAgICAgIHR2NiA9IEZwMi5zcXIodHY0KTsKICAgICAgdHY1ID0gRnAyLm11bCh0djYsIG9wdHMuQSk7CiAgICAgIHR2MiA9IEZwMi5hZGQodHYyLCB0djUpOwogICAgICB0djIgPSBGcDIubXVsKHR2MiwgdHYzKTsKICAgICAgdHY2ID0gRnAyLm11bCh0djYsIHR2NCk7CiAgICAgIHR2NSA9IEZwMi5tdWwodHY2LCBvcHRzLkIpOwogICAgICB0djIgPSBGcDIuYWRkKHR2MiwgdHY1KTsKICAgICAgeCA9IEZwMi5tdWwodHYxLCB0djMpOwogICAgICBjb25zdCB7IGlzVmFsaWQsIHZhbHVlIH0gPSBzcXJ0UmF0aW8odHYyLCB0djYpOwogICAgICB5ID0gRnAyLm11bCh0djEsIHUpOwogICAgICB5ID0gRnAyLm11bCh5LCB2YWx1ZSk7CiAgICAgIHggPSBGcDIuY21vdih4LCB0djMsIGlzVmFsaWQpOwogICAgICB5ID0gRnAyLmNtb3YoeSwgdmFsdWUsIGlzVmFsaWQpOwogICAgICBjb25zdCBlMSA9IEZwMi5pc09kZCh1KSA9PT0gRnAyLmlzT2RkKHkpOwogICAgICB5ID0gRnAyLmNtb3YoRnAyLm5lZyh5KSwgeSwgZTEpOwogICAgICB4ID0gRnAyLmRpdih4LCB0djQpOwogICAgICByZXR1cm4geyB4LCB5IH07CiAgICB9OwogIH0KICB2YXIgYjJuLCBoMmIsIERFUiwgXzBuNSwgXzFuNSwgXzJuNCwgXzNuMiwgXzRuMjsKICB2YXIgaW5pdF93ZWllcnN0cmFzcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3Qvd2VpZXJzdHJhc3MuanMiKCkgewogICAgICBpbml0X21vZHVsYXIoKTsKICAgICAgaW5pdF91dGlsczQoKTsKICAgICAgaW5pdF91dGlsczQoKTsKICAgICAgaW5pdF9jdXJ2ZSgpOwogICAgICAoeyBieXRlc1RvTnVtYmVyQkU6IGIybiwgaGV4VG9CeXRlczogaDJiIH0gPSB1dGlsc19leHBvcnRzKTsKICAgICAgREVSID0gewogICAgICAgIC8vIGFzbi4xIERFUiBlbmNvZGluZyB1dGlscwogICAgICAgIEVycjogY2xhc3MgREVSRXJyIGV4dGVuZHMgRXJyb3IgewogICAgICAgICAgY29uc3RydWN0b3IobSA9ICIiKSB7CiAgICAgICAgICAgIHN1cGVyKG0pOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgX3BhcnNlSW50KGRhdGEpIHsKICAgICAgICAgIGNvbnN0IHsgRXJyOiBFIH0gPSBERVI7CiAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPCAyIHx8IGRhdGFbMF0gIT09IDIpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyIHRhZyIpOwogICAgICAgICAgY29uc3QgbGVuID0gZGF0YVsxXTsKICAgICAgICAgIGNvbnN0IHJlcyA9IGRhdGEuc3ViYXJyYXkoMiwgbGVuICsgMik7CiAgICAgICAgICBpZiAoIWxlbiB8fCByZXMubGVuZ3RoICE9PSBsZW4pCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiB3cm9uZyBsZW5ndGgiKTsKICAgICAgICAgIGlmIChyZXNbMF0gJiAxMjgpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiBuZWdhdGl2ZSIpOwogICAgICAgICAgaWYgKHJlc1swXSA9PT0gMCAmJiAhKHJlc1sxXSAmIDEyOCkpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiB1bm5lY2Vzc2FyeSBsZWFkaW5nIHplcm8iKTsKICAgICAgICAgIHJldHVybiB7IGQ6IGIybihyZXMpLCBsOiBkYXRhLnN1YmFycmF5KGxlbiArIDIpIH07CiAgICAgICAgfSwKICAgICAgICB0b1NpZyhoZXgpIHsKICAgICAgICAgIGNvbnN0IHsgRXJyOiBFIH0gPSBERVI7CiAgICAgICAgICBjb25zdCBkYXRhID0gdHlwZW9mIGhleCA9PT0gInN0cmluZyIgPyBoMmIoaGV4KSA6IGhleDsKICAgICAgICAgIGFieXRlcyhkYXRhKTsKICAgICAgICAgIGxldCBsID0gZGF0YS5sZW5ndGg7CiAgICAgICAgICBpZiAobCA8IDIgfHwgZGF0YVswXSAhPSA0OCkKICAgICAgICAgICAgdGhyb3cgbmV3IEUoIkludmFsaWQgc2lnbmF0dXJlIHRhZyIpOwogICAgICAgICAgaWYgKGRhdGFbMV0gIT09IGwgLSAyKQogICAgICAgICAgICB0aHJvdyBuZXcgRSgiSW52YWxpZCBzaWduYXR1cmU6IGluY29ycmVjdCBsZW5ndGgiKTsKICAgICAgICAgIGNvbnN0IHsgZDogciwgbDogc0J5dGVzIH0gPSBERVIuX3BhcnNlSW50KGRhdGEuc3ViYXJyYXkoMikpOwogICAgICAgICAgY29uc3QgeyBkOiBzLCBsOiByQnl0ZXNMZWZ0IH0gPSBERVIuX3BhcnNlSW50KHNCeXRlcyk7CiAgICAgICAgICBpZiAockJ5dGVzTGVmdC5sZW5ndGgpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZTogbGVmdCBieXRlcyBhZnRlciBwYXJzaW5nIik7CiAgICAgICAgICByZXR1cm4geyByLCBzIH07CiAgICAgICAgfSwKICAgICAgICBoZXhGcm9tU2lnKHNpZykgewogICAgICAgICAgY29uc3Qgc2xpY2UyID0gKHMyKSA9PiBOdW1iZXIucGFyc2VJbnQoczJbMF0sIDE2KSAmIDggPyAiMDAiICsgczIgOiBzMjsKICAgICAgICAgIGNvbnN0IGggPSAobnVtKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGhleCA9IG51bS50b1N0cmluZygxNik7CiAgICAgICAgICAgIHJldHVybiBoZXgubGVuZ3RoICYgMSA/IGAwJHtoZXh9YCA6IGhleDsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCBzID0gc2xpY2UyKGgoc2lnLnMpKTsKICAgICAgICAgIGNvbnN0IHIgPSBzbGljZTIoaChzaWcucikpOwogICAgICAgICAgY29uc3Qgc2hsID0gcy5sZW5ndGggLyAyOwogICAgICAgICAgY29uc3QgcmhsID0gci5sZW5ndGggLyAyOwogICAgICAgICAgY29uc3Qgc2wgPSBoKHNobCk7CiAgICAgICAgICBjb25zdCBybCA9IGgocmhsKTsKICAgICAgICAgIHJldHVybiBgMzAke2gocmhsICsgc2hsICsgNCl9MDIke3JsfSR7cn0wMiR7c2x9JHtzfWA7CiAgICAgICAgfQogICAgICB9OwogICAgICBfMG41ID0gQmlnSW50KDApOwogICAgICBfMW41ID0gQmlnSW50KDEpOwogICAgICBfMm40ID0gQmlnSW50KDIpOwogICAgICBfM24yID0gQmlnSW50KDMpOwogICAgICBfNG4yID0gQmlnSW50KDQpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvaGFzaC10by1jdXJ2ZS5qcwogIGZ1bmN0aW9uIGkyb3NwKHZhbHVlLCBsZW5ndGgpIHsKICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPj0gMSA8PCA4ICogbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIEkyT1NQIGNhbGw6IHZhbHVlPSR7dmFsdWV9IGxlbmd0aD0ke2xlbmd0aH1gKTsKICAgIH0KICAgIGNvbnN0IHJlcyA9IEFycmF5LmZyb20oeyBsZW5ndGggfSkuZmlsbCgwKTsKICAgIGZvciAobGV0IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICByZXNbaV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgdmFsdWUgPj4+PSA4OwogICAgfQogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlcyk7CiAgfQogIGZ1bmN0aW9uIHN0cnhvcihhLCBiKSB7CiAgICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheShhLmxlbmd0aCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKICAgICAgYXJyW2ldID0gYVtpXSBeIGJbaV07CiAgICB9CiAgICByZXR1cm4gYXJyOwogIH0KICBmdW5jdGlvbiBhbnVtKGl0ZW0pIHsKICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoaXRlbSkpCiAgICAgIHRocm93IG5ldyBFcnJvcigibnVtYmVyIGV4cGVjdGVkIik7CiAgfQogIGZ1bmN0aW9uIGV4cGFuZF9tZXNzYWdlX3htZChtc2csIERTVCwgbGVuSW5CeXRlcywgSCkgewogICAgYWJ5dGVzKG1zZyk7CiAgICBhYnl0ZXMoRFNUKTsKICAgIGFudW0obGVuSW5CeXRlcyk7CiAgICBpZiAoRFNULmxlbmd0aCA+IDI1NSkKICAgICAgRFNUID0gSChjb25jYXRCeXRlczModXRmOFRvQnl0ZXMyKCJIMkMtT1ZFUlNJWkUtRFNULSIpLCBEU1QpKTsKICAgIGNvbnN0IHsgb3V0cHV0TGVuOiBiX2luX2J5dGVzLCBibG9ja0xlbjogcl9pbl9ieXRlcyB9ID0gSDsKICAgIGNvbnN0IGVsbCA9IE1hdGguY2VpbChsZW5JbkJ5dGVzIC8gYl9pbl9ieXRlcyk7CiAgICBpZiAoZWxsID4gMjU1KQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeG1kIGxlbmd0aCIpOwogICAgY29uc3QgRFNUX3ByaW1lID0gY29uY2F0Qnl0ZXMzKERTVCwgaTJvc3AoRFNULmxlbmd0aCwgMSkpOwogICAgY29uc3QgWl9wYWQgPSBpMm9zcCgwLCByX2luX2J5dGVzKTsKICAgIGNvbnN0IGxfaV9iX3N0ciA9IGkyb3NwKGxlbkluQnl0ZXMsIDIpOwogICAgY29uc3QgYiA9IG5ldyBBcnJheShlbGwpOwogICAgY29uc3QgYl8wID0gSChjb25jYXRCeXRlczMoWl9wYWQsIG1zZywgbF9pX2Jfc3RyLCBpMm9zcCgwLCAxKSwgRFNUX3ByaW1lKSk7CiAgICBiWzBdID0gSChjb25jYXRCeXRlczMoYl8wLCBpMm9zcCgxLCAxKSwgRFNUX3ByaW1lKSk7CiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBlbGw7IGkrKykgewogICAgICBjb25zdCBhcmdzID0gW3N0cnhvcihiXzAsIGJbaSAtIDFdKSwgaTJvc3AoaSArIDEsIDEpLCBEU1RfcHJpbWVdOwogICAgICBiW2ldID0gSChjb25jYXRCeXRlczMoLi4uYXJncykpOwogICAgfQogICAgY29uc3QgcHNldWRvX3JhbmRvbV9ieXRlcyA9IGNvbmNhdEJ5dGVzMyguLi5iKTsKICAgIHJldHVybiBwc2V1ZG9fcmFuZG9tX2J5dGVzLnNsaWNlKDAsIGxlbkluQnl0ZXMpOwogIH0KICBmdW5jdGlvbiBleHBhbmRfbWVzc2FnZV94b2YobXNnLCBEU1QsIGxlbkluQnl0ZXMsIGssIEgpIHsKICAgIGFieXRlcyhtc2cpOwogICAgYWJ5dGVzKERTVCk7CiAgICBhbnVtKGxlbkluQnl0ZXMpOwogICAgaWYgKERTVC5sZW5ndGggPiAyNTUpIHsKICAgICAgY29uc3QgZGtMZW4gPSBNYXRoLmNlaWwoMiAqIGsgLyA4KTsKICAgICAgRFNUID0gSC5jcmVhdGUoeyBka0xlbiB9KS51cGRhdGUodXRmOFRvQnl0ZXMyKCJIMkMtT1ZFUlNJWkUtRFNULSIpKS51cGRhdGUoRFNUKS5kaWdlc3QoKTsKICAgIH0KICAgIGlmIChsZW5JbkJ5dGVzID4gNjU1MzUgfHwgRFNULmxlbmd0aCA+IDI1NSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJleHBhbmRfbWVzc2FnZV94b2Y6IGludmFsaWQgbGVuSW5CeXRlcyIpOwogICAgcmV0dXJuIEguY3JlYXRlKHsgZGtMZW46IGxlbkluQnl0ZXMgfSkudXBkYXRlKG1zZykudXBkYXRlKGkyb3NwKGxlbkluQnl0ZXMsIDIpKS51cGRhdGUoRFNUKS51cGRhdGUoaTJvc3AoRFNULmxlbmd0aCwgMSkpLmRpZ2VzdCgpOwogIH0KICBmdW5jdGlvbiBoYXNoX3RvX2ZpZWxkKG1zZywgY291bnQsIG9wdGlvbnMpIHsKICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsIHsKICAgICAgRFNUOiAic3RyaW5nT3JVaW50OEFycmF5IiwKICAgICAgcDogImJpZ2ludCIsCiAgICAgIG06ICJpc1NhZmVJbnRlZ2VyIiwKICAgICAgazogImlzU2FmZUludGVnZXIiLAogICAgICBoYXNoOiAiaGFzaCIKICAgIH0pOwogICAgY29uc3QgeyBwLCBrLCBtLCBoYXNoOiBoYXNoMywgZXhwYW5kLCBEU1Q6IF9EU1QgfSA9IG9wdGlvbnM7CiAgICBhYnl0ZXMobXNnKTsKICAgIGFudW0oY291bnQpOwogICAgY29uc3QgRFNUID0gdHlwZW9mIF9EU1QgPT09ICJzdHJpbmciID8gdXRmOFRvQnl0ZXMyKF9EU1QpIDogX0RTVDsKICAgIGNvbnN0IGxvZzJwID0gcC50b1N0cmluZygyKS5sZW5ndGg7CiAgICBjb25zdCBMID0gTWF0aC5jZWlsKChsb2cycCArIGspIC8gOCk7CiAgICBjb25zdCBsZW5faW5fYnl0ZXMgPSBjb3VudCAqIG0gKiBMOwogICAgbGV0IHByYjsKICAgIGlmIChleHBhbmQgPT09ICJ4bWQiKSB7CiAgICAgIHByYiA9IGV4cGFuZF9tZXNzYWdlX3htZChtc2csIERTVCwgbGVuX2luX2J5dGVzLCBoYXNoMyk7CiAgICB9IGVsc2UgaWYgKGV4cGFuZCA9PT0gInhvZiIpIHsKICAgICAgcHJiID0gZXhwYW5kX21lc3NhZ2VfeG9mKG1zZywgRFNULCBsZW5faW5fYnl0ZXMsIGssIGhhc2gzKTsKICAgIH0gZWxzZSBpZiAoZXhwYW5kID09PSAiX2ludGVybmFsX3Bhc3MiKSB7CiAgICAgIHByYiA9IG1zZzsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwYW5kIG11c3QgYmUgInhtZCIgb3IgInhvZiInKTsKICAgIH0KICAgIGNvbnN0IHUgPSBuZXcgQXJyYXkoY291bnQpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGNvbnN0IGUgPSBuZXcgQXJyYXkobSk7CiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbTsgaisrKSB7CiAgICAgICAgY29uc3QgZWxtX29mZnNldCA9IEwgKiAoaiArIGkgKiBtKTsKICAgICAgICBjb25zdCB0diA9IHByYi5zdWJhcnJheShlbG1fb2Zmc2V0LCBlbG1fb2Zmc2V0ICsgTCk7CiAgICAgICAgZVtqXSA9IG1vZChvczJpcCh0diksIHApOwogICAgICB9CiAgICAgIHVbaV0gPSBlOwogICAgfQogICAgcmV0dXJuIHU7CiAgfQogIGZ1bmN0aW9uIGlzb2dlbnlNYXAoZmllbGQsIG1hcCkgewogICAgY29uc3QgQ09FRkYgPSBtYXAubWFwKChpKSA9PiBBcnJheS5mcm9tKGkpLnJldmVyc2UoKSk7CiAgICByZXR1cm4gKHgsIHkpID0+IHsKICAgICAgY29uc3QgW3hOdW0sIHhEZW4sIHlOdW0sIHlEZW5dID0gQ09FRkYubWFwKCh2YWwpID0+IHZhbC5yZWR1Y2UoKGFjYywgaSkgPT4gZmllbGQuYWRkKGZpZWxkLm11bChhY2MsIHgpLCBpKSkpOwogICAgICB4ID0gZmllbGQuZGl2KHhOdW0sIHhEZW4pOwogICAgICB5ID0gZmllbGQubXVsKHksIGZpZWxkLmRpdih5TnVtLCB5RGVuKSk7CiAgICAgIHJldHVybiB7IHgsIHkgfTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIGNyZWF0ZUhhc2hlcihQb2ludDIsIG1hcFRvQ3VydmUsIGRlZikgewogICAgaWYgKHR5cGVvZiBtYXBUb0N1cnZlICE9PSAiZnVuY3Rpb24iKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIm1hcFRvQ3VydmUoKSBtdXN0IGJlIGRlZmluZWQiKTsKICAgIHJldHVybiB7CiAgICAgIC8vIEVuY29kZXMgYnl0ZSBzdHJpbmcgdG8gZWxsaXB0aWMgY3VydmUuCiAgICAgIC8vIGhhc2hfdG9fY3VydmUgZnJvbSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTMKICAgICAgaGFzaFRvQ3VydmUobXNnLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgdSA9IGhhc2hfdG9fZmllbGQobXNnLCAyLCB7IC4uLmRlZiwgRFNUOiBkZWYuRFNULCAuLi5vcHRpb25zIH0pOwogICAgICAgIGNvbnN0IHUwID0gUG9pbnQyLmZyb21BZmZpbmUobWFwVG9DdXJ2ZSh1WzBdKSk7CiAgICAgICAgY29uc3QgdTEgPSBQb2ludDIuZnJvbUFmZmluZShtYXBUb0N1cnZlKHVbMV0pKTsKICAgICAgICBjb25zdCBQID0gdTAuYWRkKHUxKS5jbGVhckNvZmFjdG9yKCk7CiAgICAgICAgUC5hc3NlcnRWYWxpZGl0eSgpOwogICAgICAgIHJldHVybiBQOwogICAgICB9LAogICAgICAvLyBFbmNvZGVzIGJ5dGUgc3RyaW5nIHRvIGVsbGlwdGljIGN1cnZlLgogICAgICAvLyBlbmNvZGVfdG9fY3VydmUgZnJvbSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTMKICAgICAgZW5jb2RlVG9DdXJ2ZShtc2csIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCB1ID0gaGFzaF90b19maWVsZChtc2csIDEsIHsgLi4uZGVmLCBEU1Q6IGRlZi5lbmNvZGVEU1QsIC4uLm9wdGlvbnMgfSk7CiAgICAgICAgY29uc3QgUCA9IFBvaW50Mi5mcm9tQWZmaW5lKG1hcFRvQ3VydmUodVswXSkpLmNsZWFyQ29mYWN0b3IoKTsKICAgICAgICBQLmFzc2VydFZhbGlkaXR5KCk7CiAgICAgICAgcmV0dXJuIFA7CiAgICAgIH0KICAgIH07CiAgfQogIHZhciBvczJpcDsKICB2YXIgaW5pdF9oYXNoX3RvX2N1cnZlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC9oYXNoLXRvLWN1cnZlLmpzIigpIHsKICAgICAgaW5pdF9tb2R1bGFyKCk7CiAgICAgIGluaXRfdXRpbHM0KCk7CiAgICAgIG9zMmlwID0gYnl0ZXNUb051bWJlckJFOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vaG1hYy5qcwogIHZhciBITUFDLCBobWFjOwogIHZhciBpbml0X2htYWMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL2htYWMuanMiKCkgewogICAgICBpbml0X2Fzc2VydCgpOwogICAgICBpbml0X3V0aWxzMigpOwogICAgICBITUFDID0gY2xhc3MgZXh0ZW5kcyBIYXNoIHsKICAgICAgICBjb25zdHJ1Y3RvcihoYXNoMywgX2tleSkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIHRoaXMuZmluaXNoZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7CiAgICAgICAgICBoYXNoKGhhc2gzKTsKICAgICAgICAgIGNvbnN0IGtleSA9IHRvQnl0ZXMyKF9rZXkpOwogICAgICAgICAgdGhpcy5pSGFzaCA9IGhhc2gzLmNyZWF0ZSgpOwogICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlIYXNoLnVwZGF0ZSAhPT0gImZ1bmN0aW9uIikKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBpbnN0YW5jZSBvZiBjbGFzcyB3aGljaCBleHRlbmRzIHV0aWxzLkhhc2giKTsKICAgICAgICAgIHRoaXMuYmxvY2tMZW4gPSB0aGlzLmlIYXNoLmJsb2NrTGVuOwogICAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSB0aGlzLmlIYXNoLm91dHB1dExlbjsKICAgICAgICAgIGNvbnN0IGJsb2NrTGVuID0gdGhpcy5ibG9ja0xlbjsKICAgICAgICAgIGNvbnN0IHBhZDIgPSBuZXcgVWludDhBcnJheShibG9ja0xlbik7CiAgICAgICAgICBwYWQyLnNldChrZXkubGVuZ3RoID4gYmxvY2tMZW4gPyBoYXNoMy5jcmVhdGUoKS51cGRhdGUoa2V5KS5kaWdlc3QoKSA6IGtleSk7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZDIubGVuZ3RoOyBpKyspCiAgICAgICAgICAgIHBhZDJbaV0gXj0gNTQ7CiAgICAgICAgICB0aGlzLmlIYXNoLnVwZGF0ZShwYWQyKTsKICAgICAgICAgIHRoaXMub0hhc2ggPSBoYXNoMy5jcmVhdGUoKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFkMi5sZW5ndGg7IGkrKykKICAgICAgICAgICAgcGFkMltpXSBePSA1NCBeIDkyOwogICAgICAgICAgdGhpcy5vSGFzaC51cGRhdGUocGFkMik7CiAgICAgICAgICBwYWQyLmZpbGwoMCk7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZShidWYpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzKTsKICAgICAgICAgIHRoaXMuaUhhc2gudXBkYXRlKGJ1Zik7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgZGlnZXN0SW50byhvdXQpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzKTsKICAgICAgICAgIGJ5dGVzKG91dCwgdGhpcy5vdXRwdXRMZW4pOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IHRydWU7CiAgICAgICAgICB0aGlzLmlIYXNoLmRpZ2VzdEludG8ob3V0KTsKICAgICAgICAgIHRoaXMub0hhc2gudXBkYXRlKG91dCk7CiAgICAgICAgICB0aGlzLm9IYXNoLmRpZ2VzdEludG8ob3V0KTsKICAgICAgICAgIHRoaXMuZGVzdHJveSgpOwogICAgICAgIH0KICAgICAgICBkaWdlc3QoKSB7CiAgICAgICAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheSh0aGlzLm9IYXNoLm91dHB1dExlbik7CiAgICAgICAgICB0aGlzLmRpZ2VzdEludG8ob3V0KTsKICAgICAgICAgIHJldHVybiBvdXQ7CiAgICAgICAgfQogICAgICAgIF9jbG9uZUludG8odG8pIHsKICAgICAgICAgIHRvIHx8ICh0byA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLCB7fSkpOwogICAgICAgICAgY29uc3QgeyBvSGFzaCwgaUhhc2gsIGZpbmlzaGVkLCBkZXN0cm95ZWQsIGJsb2NrTGVuLCBvdXRwdXRMZW4gfSA9IHRoaXM7CiAgICAgICAgICB0byA9IHRvOwogICAgICAgICAgdG8uZmluaXNoZWQgPSBmaW5pc2hlZDsKICAgICAgICAgIHRvLmRlc3Ryb3llZCA9IGRlc3Ryb3llZDsKICAgICAgICAgIHRvLmJsb2NrTGVuID0gYmxvY2tMZW47CiAgICAgICAgICB0by5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0by5vSGFzaCA9IG9IYXNoLl9jbG9uZUludG8odG8ub0hhc2gpOwogICAgICAgICAgdG8uaUhhc2ggPSBpSGFzaC5fY2xvbmVJbnRvKHRvLmlIYXNoKTsKICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICB9CiAgICAgICAgZGVzdHJveSgpIHsKICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMub0hhc2guZGVzdHJveSgpOwogICAgICAgICAgdGhpcy5pSGFzaC5kZXN0cm95KCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBobWFjID0gKGhhc2gzLCBrZXksIG1lc3NhZ2UpID0+IG5ldyBITUFDKGhhc2gzLCBrZXkpLnVwZGF0ZShtZXNzYWdlKS5kaWdlc3QoKTsKICAgICAgaG1hYy5jcmVhdGUgPSAoaGFzaDMsIGtleSkgPT4gbmV3IEhNQUMoaGFzaDMsIGtleSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9fc2hvcnR3X3V0aWxzLmpzCiAgZnVuY3Rpb24gZ2V0SGFzaChoYXNoMykgewogICAgcmV0dXJuIHsKICAgICAgaGFzaDogaGFzaDMsCiAgICAgIGhtYWM6IChrZXksIC4uLm1zZ3MpID0+IGhtYWMoaGFzaDMsIGtleSwgY29uY2F0Qnl0ZXMoLi4ubXNncykpLAogICAgICByYW5kb21CeXRlcwogICAgfTsKICB9CiAgZnVuY3Rpb24gY3JlYXRlQ3VydmUoY3VydmVEZWYsIGRlZkhhc2gpIHsKICAgIGNvbnN0IGNyZWF0ZSA9IChoYXNoMykgPT4gd2VpZXJzdHJhc3MoeyAuLi5jdXJ2ZURlZiwgLi4uZ2V0SGFzaChoYXNoMykgfSk7CiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLmNyZWF0ZShkZWZIYXNoKSwgY3JlYXRlIH0pOwogIH0KICB2YXIgaW5pdF9zaG9ydHdfdXRpbHMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL19zaG9ydHdfdXRpbHMuanMiKCkgewogICAgICBpbml0X2htYWMoKTsKICAgICAgaW5pdF91dGlsczIoKTsKICAgICAgaW5pdF93ZWllcnN0cmFzcygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vc2VjcDI1NmsxLmpzCiAgdmFyIHNlY3AyNTZrMV9leHBvcnRzID0ge307CiAgX19leHBvcnQoc2VjcDI1NmsxX2V4cG9ydHMsIHsKICAgIGVuY29kZVRvQ3VydmU6ICgpID0+IGVuY29kZVRvQ3VydmUsCiAgICBoYXNoVG9DdXJ2ZTogKCkgPT4gaGFzaFRvQ3VydmUsCiAgICBzY2hub3JyOiAoKSA9PiBzY2hub3JyLAogICAgc2VjcDI1NmsxOiAoKSA9PiBzZWNwMjU2azEKICB9KTsKICBmdW5jdGlvbiBzcXJ0TW9kKHkpIHsKICAgIGNvbnN0IFAgPSBzZWNwMjU2azFQOwogICAgY29uc3QgXzNuMyA9IEJpZ0ludCgzKSwgXzZuID0gQmlnSW50KDYpLCBfMTFuID0gQmlnSW50KDExKSwgXzIybiA9IEJpZ0ludCgyMik7CiAgICBjb25zdCBfMjNuID0gQmlnSW50KDIzKSwgXzQ0biA9IEJpZ0ludCg0NCksIF84OG4gPSBCaWdJbnQoODgpOwogICAgY29uc3QgYjIgPSB5ICogeSAqIHkgJSBQOwogICAgY29uc3QgYjMyID0gYjIgKiBiMiAqIHkgJSBQOwogICAgY29uc3QgYjYgPSBwb3cyKGIzMiwgXzNuMywgUCkgKiBiMzIgJSBQOwogICAgY29uc3QgYjkgPSBwb3cyKGI2LCBfM24zLCBQKSAqIGIzMiAlIFA7CiAgICBjb25zdCBiMTEgPSBwb3cyKGI5LCBfMm41LCBQKSAqIGIyICUgUDsKICAgIGNvbnN0IGIyMiA9IHBvdzIoYjExLCBfMTFuLCBQKSAqIGIxMSAlIFA7CiAgICBjb25zdCBiNDQgPSBwb3cyKGIyMiwgXzIybiwgUCkgKiBiMjIgJSBQOwogICAgY29uc3QgYjg4ID0gcG93MihiNDQsIF80NG4sIFApICogYjQ0ICUgUDsKICAgIGNvbnN0IGIxNzYgPSBwb3cyKGI4OCwgXzg4biwgUCkgKiBiODggJSBQOwogICAgY29uc3QgYjIyMCA9IHBvdzIoYjE3NiwgXzQ0biwgUCkgKiBiNDQgJSBQOwogICAgY29uc3QgYjIyMyA9IHBvdzIoYjIyMCwgXzNuMywgUCkgKiBiMzIgJSBQOwogICAgY29uc3QgdDEgPSBwb3cyKGIyMjMsIF8yM24sIFApICogYjIyICUgUDsKICAgIGNvbnN0IHQyID0gcG93Mih0MSwgXzZuLCBQKSAqIGIyICUgUDsKICAgIGNvbnN0IHJvb3QyID0gcG93Mih0MiwgXzJuNSwgUCk7CiAgICBpZiAoIUZwLmVxbChGcC5zcXIocm9vdDIpLCB5KSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpOwogICAgcmV0dXJuIHJvb3QyOwogIH0KICBmdW5jdGlvbiB0YWdnZWRIYXNoKHRhZywgLi4ubWVzc2FnZXMpIHsKICAgIGxldCB0YWdQID0gVEFHR0VEX0hBU0hfUFJFRklYRVNbdGFnXTsKICAgIGlmICh0YWdQID09PSB2b2lkIDApIHsKICAgICAgY29uc3QgdGFnSCA9IHNoYTI1NihVaW50OEFycmF5LmZyb20odGFnLCAoYykgPT4gYy5jaGFyQ29kZUF0KDApKSk7CiAgICAgIHRhZ1AgPSBjb25jYXRCeXRlczModGFnSCwgdGFnSCk7CiAgICAgIFRBR0dFRF9IQVNIX1BSRUZJWEVTW3RhZ10gPSB0YWdQOwogICAgfQogICAgcmV0dXJuIHNoYTI1Nihjb25jYXRCeXRlczModGFnUCwgLi4ubWVzc2FnZXMpKTsKICB9CiAgZnVuY3Rpb24gc2Nobm9yckdldEV4dFB1YktleShwcml2KSB7CiAgICBsZXQgZF8gPSBzZWNwMjU2azEudXRpbHMubm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2KTsKICAgIGxldCBwID0gUG9pbnQuZnJvbVByaXZhdGVLZXkoZF8pOwogICAgY29uc3Qgc2NhbGFyID0gcC5oYXNFdmVuWSgpID8gZF8gOiBtb2ROKC1kXyk7CiAgICByZXR1cm4geyBzY2FsYXIsIGJ5dGVzOiBwb2ludFRvQnl0ZXMocCkgfTsKICB9CiAgZnVuY3Rpb24gbGlmdF94KHgpIHsKICAgIGlmICghZmUoeCkpCiAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHg6IG5lZWQgMCA8IHggPCBwIik7CiAgICBjb25zdCB4eCA9IG1vZFAoeCAqIHgpOwogICAgY29uc3QgYyA9IG1vZFAoeHggKiB4ICsgQmlnSW50KDcpKTsKICAgIGxldCB5ID0gc3FydE1vZChjKTsKICAgIGlmICh5ICUgXzJuNSAhPT0gXzBuNikKICAgICAgeSA9IG1vZFAoLXkpOwogICAgY29uc3QgcCA9IG5ldyBQb2ludCh4LCB5LCBfMW42KTsKICAgIHAuYXNzZXJ0VmFsaWRpdHkoKTsKICAgIHJldHVybiBwOwogIH0KICBmdW5jdGlvbiBjaGFsbGVuZ2UoLi4uYXJncykgewogICAgcmV0dXJuIG1vZE4oYnl0ZXNUb051bWJlckJFKHRhZ2dlZEhhc2goIkJJUDAzNDAvY2hhbGxlbmdlIiwgLi4uYXJncykpKTsKICB9CiAgZnVuY3Rpb24gc2Nobm9yckdldFB1YmxpY0tleShwcml2YXRlS2V5KSB7CiAgICByZXR1cm4gc2Nobm9yckdldEV4dFB1YktleShwcml2YXRlS2V5KS5ieXRlczsKICB9CiAgZnVuY3Rpb24gc2Nobm9yclNpZ24obWVzc2FnZSwgcHJpdmF0ZUtleSwgYXV4UmFuZCA9IHJhbmRvbUJ5dGVzKDMyKSkgewogICAgY29uc3QgbSA9IGVuc3VyZUJ5dGVzKCJtZXNzYWdlIiwgbWVzc2FnZSk7CiAgICBjb25zdCB7IGJ5dGVzOiBweCwgc2NhbGFyOiBkIH0gPSBzY2hub3JyR2V0RXh0UHViS2V5KHByaXZhdGVLZXkpOwogICAgY29uc3QgYSA9IGVuc3VyZUJ5dGVzKCJhdXhSYW5kIiwgYXV4UmFuZCwgMzIpOwogICAgY29uc3QgdCA9IG51bVRvMzJiKGQgXiBieXRlc1RvTnVtYmVyQkUodGFnZ2VkSGFzaCgiQklQMDM0MC9hdXgiLCBhKSkpOwogICAgY29uc3QgcmFuZCA9IHRhZ2dlZEhhc2goIkJJUDAzNDAvbm9uY2UiLCB0LCBweCwgbSk7CiAgICBjb25zdCBrXyA9IG1vZE4oYnl0ZXNUb051bWJlckJFKHJhbmQpKTsKICAgIGlmIChrXyA9PT0gXzBuNikKICAgICAgdGhyb3cgbmV3IEVycm9yKCJzaWduIGZhaWxlZDogayBpcyB6ZXJvIik7CiAgICBjb25zdCB7IGJ5dGVzOiByeCwgc2NhbGFyOiBrIH0gPSBzY2hub3JyR2V0RXh0UHViS2V5KGtfKTsKICAgIGNvbnN0IGUgPSBjaGFsbGVuZ2UocngsIHB4LCBtKTsKICAgIGNvbnN0IHNpZyA9IG5ldyBVaW50OEFycmF5KDY0KTsKICAgIHNpZy5zZXQocngsIDApOwogICAgc2lnLnNldChudW1UbzMyYihtb2ROKGsgKyBlICogZCkpLCAzMik7CiAgICBpZiAoIXNjaG5vcnJWZXJpZnkoc2lnLCBtLCBweCkpCiAgICAgIHRocm93IG5ldyBFcnJvcigic2lnbjogSW52YWxpZCBzaWduYXR1cmUgcHJvZHVjZWQiKTsKICAgIHJldHVybiBzaWc7CiAgfQogIGZ1bmN0aW9uIHNjaG5vcnJWZXJpZnkoc2lnbmF0dXJlLCBtZXNzYWdlLCBwdWJsaWNLZXkpIHsKICAgIGNvbnN0IHNpZyA9IGVuc3VyZUJ5dGVzKCJzaWduYXR1cmUiLCBzaWduYXR1cmUsIDY0KTsKICAgIGNvbnN0IG0gPSBlbnN1cmVCeXRlcygibWVzc2FnZSIsIG1lc3NhZ2UpOwogICAgY29uc3QgcHViID0gZW5zdXJlQnl0ZXMoInB1YmxpY0tleSIsIHB1YmxpY0tleSwgMzIpOwogICAgdHJ5IHsKICAgICAgY29uc3QgUCA9IGxpZnRfeChieXRlc1RvTnVtYmVyQkUocHViKSk7CiAgICAgIGNvbnN0IHIgPSBieXRlc1RvTnVtYmVyQkUoc2lnLnN1YmFycmF5KDAsIDMyKSk7CiAgICAgIGlmICghZmUocikpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBjb25zdCBzID0gYnl0ZXNUb051bWJlckJFKHNpZy5zdWJhcnJheSgzMiwgNjQpKTsKICAgICAgaWYgKCFnZShzKSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGNvbnN0IGUgPSBjaGFsbGVuZ2UobnVtVG8zMmIociksIHBvaW50VG9CeXRlcyhQKSwgbSk7CiAgICAgIGNvbnN0IFIgPSBHbXVsQWRkKFAsIHMsIG1vZE4oLWUpKTsKICAgICAgaWYgKCFSIHx8ICFSLmhhc0V2ZW5ZKCkgfHwgUi50b0FmZmluZSgpLnggIT09IHIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgdmFyIHNlY3AyNTZrMVAsIHNlY3AyNTZrMU4sIF8xbjYsIF8ybjUsIGRpdk5lYXJlc3QsIEZwLCBzZWNwMjU2azEsIF8wbjYsIGZlLCBnZSwgVEFHR0VEX0hBU0hfUFJFRklYRVMsIHBvaW50VG9CeXRlcywgbnVtVG8zMmIsIG1vZFAsIG1vZE4sIFBvaW50LCBHbXVsQWRkLCBzY2hub3JyLCBpc29NYXAsIG1hcFNXVSwgaHRmLCBoYXNoVG9DdXJ2ZSwgZW5jb2RlVG9DdXJ2ZTsKICB2YXIgaW5pdF9zZWNwMjU2azEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL3NlY3AyNTZrMS5qcyIoKSB7CiAgICAgIGluaXRfc2hhMjU2KCk7CiAgICAgIGluaXRfdXRpbHMyKCk7CiAgICAgIGluaXRfbW9kdWxhcigpOwogICAgICBpbml0X3dlaWVyc3RyYXNzKCk7CiAgICAgIGluaXRfdXRpbHM0KCk7CiAgICAgIGluaXRfaGFzaF90b19jdXJ2ZSgpOwogICAgICBpbml0X3Nob3J0d191dGlscygpOwogICAgICBzZWNwMjU2azFQID0gQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlZmZmZmZjMmYiKTsKICAgICAgc2VjcDI1NmsxTiA9IEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWJhYWVkY2U2YWY0OGEwM2JiZmQyNWU4Y2QwMzY0MTQxIik7CiAgICAgIF8xbjYgPSBCaWdJbnQoMSk7CiAgICAgIF8ybjUgPSBCaWdJbnQoMik7CiAgICAgIGRpdk5lYXJlc3QgPSAoYSwgYikgPT4gKGEgKyBiIC8gXzJuNSkgLyBiOwogICAgICBGcCA9IEZpZWxkKHNlY3AyNTZrMVAsIHZvaWQgMCwgdm9pZCAwLCB7IHNxcnQ6IHNxcnRNb2QgfSk7CiAgICAgIHNlY3AyNTZrMSA9IGNyZWF0ZUN1cnZlKHsKICAgICAgICBhOiBCaWdJbnQoMCksCiAgICAgICAgLy8gZXF1YXRpb24gcGFyYW1zOiBhLCBiCiAgICAgICAgYjogQmlnSW50KDcpLAogICAgICAgIC8vIFNlZW0gdG8gYmUgcmlnaWQ6IGJpdGNvaW50YWxrLm9yZy9pbmRleC5waHA/dG9waWM9Mjg5Nzk1Lm1zZzMxODM5NzUjbXNnMzE4Mzk3NQogICAgICAgIEZwLAogICAgICAgIC8vIEZpZWxkJ3MgcHJpbWU6IDJuKioyNTZuIC0gMm4qKjMybiAtIDJuKio5biAtIDJuKio4biAtIDJuKio3biAtIDJuKio2biAtIDJuKio0biAtIDFuCiAgICAgICAgbjogc2VjcDI1NmsxTiwKICAgICAgICAvLyBDdXJ2ZSBvcmRlciwgdG90YWwgY291bnQgb2YgdmFsaWQgcG9pbnRzIGluIHRoZSBmaWVsZAogICAgICAgIC8vIEJhc2UgcG9pbnQgKHgsIHkpIGFrYSBnZW5lcmF0b3IgcG9pbnQKICAgICAgICBHeDogQmlnSW50KCI1NTA2NjI2MzAyMjI3NzM0MzY2OTU3ODcxODg5NTE2ODUzNDMyNjI1MDYwMzQ1Mzc3NzU5NDE3NTUwMDE4NzM2MDM4OTExNjcyOTI0MCIpLAogICAgICAgIEd5OiBCaWdJbnQoIjMyNjcwNTEwMDIwNzU4ODE2OTc4MDgzMDg1MTMwNTA3MDQzMTg0NDcxMjczMzgwNjU5MjQzMjc1OTM4OTA0MzM1NzU3MzM3NDgyNDI0IiksCiAgICAgICAgaDogQmlnSW50KDEpLAogICAgICAgIC8vIENvZmFjdG9yCiAgICAgICAgbG93UzogdHJ1ZSwKICAgICAgICAvLyBBbGxvdyBvbmx5IGxvdy1TIHNpZ25hdHVyZXMgYnkgZGVmYXVsdCBpbiBzaWduKCkgYW5kIHZlcmlmeSgpCiAgICAgICAgLyoqCiAgICAgICAgICogc2VjcDI1NmsxIGJlbG9uZ3MgdG8gS29ibGl0eiBjdXJ2ZXM6IGl0IGhhcyBlZmZpY2llbnRseSBjb21wdXRhYmxlIGVuZG9tb3JwaGlzbS4KICAgICAgICAgKiBFbmRvbW9ycGhpc20gdXNlcyAyeCBsZXNzIFJBTSwgc3BlZWRzIHVwIHByZWNvbXB1dGF0aW9uIGJ5IDJ4IGFuZCBFQ0RIIC8ga2V5IHJlY292ZXJ5IGJ5IDIwJS4KICAgICAgICAgKiBGb3IgcHJlY29tcHV0ZWQgd05BRiBpdCB0cmFkZXMgb2ZmIDEvMiBpbml0IHRpbWUgJiAxLzMgcmFtIGZvciAyMCUgcGVyZiBoaXQuCiAgICAgICAgICogRXhwbGFuYXRpb246IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3BhdWxtaWxsci9lYjY3MDgwNjc5M2U4NGRmNjI4YTdjNDM0YTg3MzA2NgogICAgICAgICAqLwogICAgICAgIGVuZG86IHsKICAgICAgICAgIGJldGE6IEJpZ0ludCgiMHg3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIiksCiAgICAgICAgICBzcGxpdFNjYWxhcjogKGspID0+IHsKICAgICAgICAgICAgY29uc3QgbiA9IHNlY3AyNTZrMU47CiAgICAgICAgICAgIGNvbnN0IGExID0gQmlnSW50KCIweDMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1Iik7CiAgICAgICAgICAgIGNvbnN0IGIxID0gLV8xbjYgKiBCaWdJbnQoIjB4ZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMiKTsKICAgICAgICAgICAgY29uc3QgYTIgPSBCaWdJbnQoIjB4MTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4Iik7CiAgICAgICAgICAgIGNvbnN0IGIyID0gYTE7CiAgICAgICAgICAgIGNvbnN0IFBPV18yXzEyOCA9IEJpZ0ludCgiMHgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKTsKICAgICAgICAgICAgY29uc3QgYzEgPSBkaXZOZWFyZXN0KGIyICogaywgbik7CiAgICAgICAgICAgIGNvbnN0IGMyID0gZGl2TmVhcmVzdCgtYjEgKiBrLCBuKTsKICAgICAgICAgICAgbGV0IGsxID0gbW9kKGsgLSBjMSAqIGExIC0gYzIgKiBhMiwgbik7CiAgICAgICAgICAgIGxldCBrMiA9IG1vZCgtYzEgKiBiMSAtIGMyICogYjIsIG4pOwogICAgICAgICAgICBjb25zdCBrMW5lZyA9IGsxID4gUE9XXzJfMTI4OwogICAgICAgICAgICBjb25zdCBrMm5lZyA9IGsyID4gUE9XXzJfMTI4OwogICAgICAgICAgICBpZiAoazFuZWcpCiAgICAgICAgICAgICAgazEgPSBuIC0gazE7CiAgICAgICAgICAgIGlmIChrMm5lZykKICAgICAgICAgICAgICBrMiA9IG4gLSBrMjsKICAgICAgICAgICAgaWYgKGsxID4gUE9XXzJfMTI4IHx8IGsyID4gUE9XXzJfMTI4KSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJzcGxpdFNjYWxhcjogRW5kb21vcnBoaXNtIGZhaWxlZCwgaz0iICsgayk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHsgazFuZWcsIGsxLCBrMm5lZywgazIgfTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sIHNoYTI1Nik7CiAgICAgIF8wbjYgPSBCaWdJbnQoMCk7CiAgICAgIGZlID0gKHgpID0+IHR5cGVvZiB4ID09PSAiYmlnaW50IiAmJiBfMG42IDwgeCAmJiB4IDwgc2VjcDI1NmsxUDsKICAgICAgZ2UgPSAoeCkgPT4gdHlwZW9mIHggPT09ICJiaWdpbnQiICYmIF8wbjYgPCB4ICYmIHggPCBzZWNwMjU2azFOOwogICAgICBUQUdHRURfSEFTSF9QUkVGSVhFUyA9IHt9OwogICAgICBwb2ludFRvQnl0ZXMgPSAocG9pbnQpID0+IHBvaW50LnRvUmF3Qnl0ZXModHJ1ZSkuc2xpY2UoMSk7CiAgICAgIG51bVRvMzJiID0gKG4pID0+IG51bWJlclRvQnl0ZXNCRShuLCAzMik7CiAgICAgIG1vZFAgPSAoeCkgPT4gbW9kKHgsIHNlY3AyNTZrMVApOwogICAgICBtb2ROID0gKHgpID0+IG1vZCh4LCBzZWNwMjU2azFOKTsKICAgICAgUG9pbnQgPSBzZWNwMjU2azEuUHJvamVjdGl2ZVBvaW50OwogICAgICBHbXVsQWRkID0gKFEsIGEsIGIpID0+IFBvaW50LkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoUSwgYSwgYik7CiAgICAgIHNjaG5vcnIgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+ICh7CiAgICAgICAgZ2V0UHVibGljS2V5OiBzY2hub3JyR2V0UHVibGljS2V5LAogICAgICAgIHNpZ246IHNjaG5vcnJTaWduLAogICAgICAgIHZlcmlmeTogc2Nobm9yclZlcmlmeSwKICAgICAgICB1dGlsczogewogICAgICAgICAgcmFuZG9tUHJpdmF0ZUtleTogc2VjcDI1NmsxLnV0aWxzLnJhbmRvbVByaXZhdGVLZXksCiAgICAgICAgICBsaWZ0X3gsCiAgICAgICAgICBwb2ludFRvQnl0ZXMsCiAgICAgICAgICBudW1iZXJUb0J5dGVzQkUsCiAgICAgICAgICBieXRlc1RvTnVtYmVyQkUsCiAgICAgICAgICB0YWdnZWRIYXNoLAogICAgICAgICAgbW9kCiAgICAgICAgfQogICAgICB9KSkoKTsKICAgICAgaXNvTWFwID0gLyogQF9fUFVSRV9fICovICgoKSA9PiBpc29nZW55TWFwKEZwLCBbCiAgICAgICAgLy8geE51bQogICAgICAgIFsKICAgICAgICAgICIweDhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhkYWFhYWE4YzciLAogICAgICAgICAgIjB4N2QzZDRjODBiYzMyMWQ1YjlmMzE1Y2VhN2ZkNDRjNWQ1OTVkMmZjMGJmNjNiOTJkZmZmMTA0NGYxN2M2NTgxIiwKICAgICAgICAgICIweDUzNGMzMjhkMjNmMjM0ZTZlMmE0MTNkZWNhMjVjYWVjZTQ1MDYxNDQwMzdjNDAzMTRlY2JkMGI1M2Q5ZGQyNjIiLAogICAgICAgICAgIjB4OGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGRhYWFhYTg4YyIKICAgICAgICBdLAogICAgICAgIC8vIHhEZW4KICAgICAgICBbCiAgICAgICAgICAiMHhkMzU3NzExOTNkOTQ5MThhOWNhMzRjY2JiN2I2NDBkZDg2Y2Q0MDk1NDJmODQ4N2Q5ZmU2Yjc0NTc4MWViNDliIiwKICAgICAgICAgICIweGVkYWRjNmY2NDM4M2RjMWRmN2M0YjJkNTFiNTQyMjU0MDZkMzZiNjQxZjVlNDFiYmM1MmE1NjYxMmE4YzZkMTQiLAogICAgICAgICAgIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIKICAgICAgICAgIC8vIExBU1QgMQogICAgICAgIF0sCiAgICAgICAgLy8geU51bQogICAgICAgIFsKICAgICAgICAgICIweDRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiOGUzOGUyM2MiLAogICAgICAgICAgIjB4Yzc1ZTBjMzJkNWNiN2MwZmE5ZDBhNTRiMTJhMGE2ZDU2NDdhYjA0NmQ2ODZkYTZmZGZmYzkwZmMyMDFkNzFhMyIsCiAgICAgICAgICAiMHgyOWE2MTk0NjkxZjkxYTczNzE1MjA5ZWY2NTEyZTU3NjcyMjgzMGEyMDFiZTIwMThhNzY1ZTg1YTllY2VlOTMxIiwKICAgICAgICAgICIweDJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmMzhlMzhkODQiCiAgICAgICAgXSwKICAgICAgICAvLyB5RGVuCiAgICAgICAgWwogICAgICAgICAgIjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZjkzYiIsCiAgICAgICAgICAiMHg3YTA2NTM0YmI4YmRiNDlmZDVlOWU2NjMyNzIyYzI5ODk0NjdjMWJmYzhlOGQ5NzhkZmI0MjVkMjY4NWMyNTczIiwKICAgICAgICAgICIweDY0ODRhYTcxNjU0NWNhMmNmM2E3MGMzZmE4ZmUzMzdlMGEzZDIxMTYyZjBkNjI5OWE3YmY4MTkyYmZkMmE3NmYiLAogICAgICAgICAgIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIKICAgICAgICAgIC8vIExBU1QgMQogICAgICAgIF0KICAgICAgXS5tYXAoKGkpID0+IGkubWFwKChqKSA9PiBCaWdJbnQoaikpKSkpKCk7CiAgICAgIG1hcFNXVSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gbWFwVG9DdXJ2ZVNpbXBsZVNXVShGcCwgewogICAgICAgIEE6IEJpZ0ludCgiMHgzZjg3MzFhYmRkNjYxYWRjYTA4YTU1NThmMGY1ZDI3MmU5NTNkMzYzY2I2ZjBlNWQ0MDU0NDdjMDFhNDQ0NTMzIiksCiAgICAgICAgQjogQmlnSW50KCIxNzcxIiksCiAgICAgICAgWjogRnAuY3JlYXRlKEJpZ0ludCgiLTExIikpCiAgICAgIH0pKSgpOwogICAgICBodGYgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IGNyZWF0ZUhhc2hlcihzZWNwMjU2azEuUHJvamVjdGl2ZVBvaW50LCAoc2NhbGFycykgPT4gewogICAgICAgIGNvbnN0IHsgeCwgeSB9ID0gbWFwU1dVKEZwLmNyZWF0ZShzY2FsYXJzWzBdKSk7CiAgICAgICAgcmV0dXJuIGlzb01hcCh4LCB5KTsKICAgICAgfSwgewogICAgICAgIERTVDogInNlY3AyNTZrMV9YTUQ6U0hBLTI1Nl9TU1dVX1JPXyIsCiAgICAgICAgZW5jb2RlRFNUOiAic2VjcDI1NmsxX1hNRDpTSEEtMjU2X1NTV1VfTlVfIiwKICAgICAgICBwOiBGcC5PUkRFUiwKICAgICAgICBtOiAxLAogICAgICAgIGs6IDEyOCwKICAgICAgICBleHBhbmQ6ICJ4bWQiLAogICAgICAgIGhhc2g6IHNoYTI1NgogICAgICB9KSkoKTsKICAgICAgaGFzaFRvQ3VydmUgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IGh0Zi5oYXNoVG9DdXJ2ZSkoKTsKICAgICAgZW5jb2RlVG9DdXJ2ZSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gaHRmLmVuY29kZVRvQ3VydmUpKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL25vZGUuanMKICB2YXIgRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvciwgRmVlQ2FwVG9vSGlnaEVycm9yLCBGZWVDYXBUb29Mb3dFcnJvciwgTm9uY2VUb29IaWdoRXJyb3IsIE5vbmNlVG9vTG93RXJyb3IsIE5vbmNlTWF4VmFsdWVFcnJvciwgSW5zdWZmaWNpZW50RnVuZHNFcnJvciwgSW50cmluc2ljR2FzVG9vSGlnaEVycm9yLCBJbnRyaW5zaWNHYXNUb29Mb3dFcnJvciwgVHJhbnNhY3Rpb25UeXBlTm90U3VwcG9ydGVkRXJyb3IsIFRpcEFib3ZlRmVlQ2FwRXJyb3IsIFVua25vd25Ob2RlRXJyb3I7CiAgdmFyIGluaXRfbm9kZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9ub2RlLmpzIigpIHsKICAgICAgaW5pdF9mb3JtYXRHd2VpKCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBFeGVjdXRpb25SZXZlcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhdXNlLCBtZXNzYWdlIH0gPSB7fSkgewogICAgICAgICAgY29uc3QgcmVhc29uID0gbWVzc2FnZT8ucmVwbGFjZSgiZXhlY3V0aW9uIHJldmVydGVkOiAiLCAiIik/LnJlcGxhY2UoImV4ZWN1dGlvbiByZXZlcnRlZCIsICIiKTsKICAgICAgICAgIHN1cGVyKGBFeGVjdXRpb24gcmV2ZXJ0ZWQgJHtyZWFzb24gPyBgd2l0aCByZWFzb246ICR7cmVhc29ufWAgOiAiZm9yIGFuIHVua25vd24gcmVhc29uIn0uYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkV4ZWN1dGlvblJldmVydGVkRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeGVjdXRpb25SZXZlcnRlZEVycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogMwogICAgICB9KTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4ZWN1dGlvblJldmVydGVkRXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL2V4ZWN1dGlvbiByZXZlcnRlZC8KICAgICAgfSk7CiAgICAgIEZlZUNhcFRvb0hpZ2hFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgbWF4RmVlUGVyR2FzIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYFRoZSBmZWUgY2FwIChcYG1heEZlZVBlckdhc1xgJHttYXhGZWVQZXJHYXMgPyBgID0gJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9IGd3ZWlgIDogIiJ9KSBjYW5ub3QgYmUgaGlnaGVyIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZSAoMl4yNTYtMSkuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkZlZUNhcFRvb0hpZ2hFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZlZUNhcFRvb0hpZ2hFcnJvciwgIm5vZGVNZXNzYWdlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAvbWF4IGZlZSBwZXIgZ2FzIGhpZ2hlciB0aGFuIDJcXjI1Ni0xfGZlZSBjYXAgaGlnaGVyIHRoYW4gMlxeMjU2LTEvCiAgICAgIH0pOwogICAgICBGZWVDYXBUb29Mb3dFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgbWF4RmVlUGVyR2FzIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYFRoZSBmZWUgY2FwIChcYG1heEZlZVBlckdhc1xgJHttYXhGZWVQZXJHYXMgPyBgID0gJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9YCA6ICIifSBnd2VpKSBjYW5ub3QgYmUgbG93ZXIgdGhhbiB0aGUgYmxvY2sgYmFzZSBmZWUuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkZlZUNhcFRvb0xvd0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmVlQ2FwVG9vTG93RXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL21heCBmZWUgcGVyIGdhcyBsZXNzIHRoYW4gYmxvY2sgYmFzZSBmZWV8ZmVlIGNhcCBsZXNzIHRoYW4gYmxvY2sgYmFzZSBmZWV8dHJhbnNhY3Rpb24gaXMgb3V0ZGF0ZWQvCiAgICAgIH0pOwogICAgICBOb25jZVRvb0hpZ2hFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgbm9uY2UgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihgTm9uY2UgcHJvdmlkZWQgZm9yIHRoZSB0cmFuc2FjdGlvbiAke25vbmNlID8gYCgke25vbmNlfSkgYCA6ICIifWlzIGhpZ2hlciB0aGFuIHRoZSBuZXh0IG9uZSBleHBlY3RlZC5gLCB7IGNhdXNlLCBuYW1lOiAiTm9uY2VUb29IaWdoRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vbmNlVG9vSGlnaEVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC9ub25jZSB0b28gaGlnaC8KICAgICAgfSk7CiAgICAgIE5vbmNlVG9vTG93RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2F1c2UsIG5vbmNlIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgTm9uY2UgcHJvdmlkZWQgZm9yIHRoZSB0cmFuc2FjdGlvbiAke25vbmNlID8gYCgke25vbmNlfSkgYCA6ICIifWlzIGxvd2VyIHRoYW4gdGhlIGN1cnJlbnQgbm9uY2Ugb2YgdGhlIGFjY291bnQuYCwKICAgICAgICAgICAgIlRyeSBpbmNyZWFzaW5nIHRoZSBub25jZSBvciBmaW5kIHRoZSBsYXRlc3Qgbm9uY2Ugd2l0aCBgZ2V0VHJhbnNhY3Rpb25Db3VudGAuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IGNhdXNlLCBuYW1lOiAiTm9uY2VUb29Mb3dFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9uY2VUb29Mb3dFcnJvciwgIm5vZGVNZXNzYWdlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAvbm9uY2UgdG9vIGxvd3x0cmFuc2FjdGlvbiBhbHJlYWR5IGltcG9ydGVkfGFscmVhZHkga25vd24vCiAgICAgIH0pOwogICAgICBOb25jZU1heFZhbHVlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2F1c2UsIG5vbmNlIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYE5vbmNlIHByb3ZpZGVkIGZvciB0aGUgdHJhbnNhY3Rpb24gJHtub25jZSA/IGAoJHtub25jZX0pIGAgOiAiIn1leGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbm9uY2UuYCwgeyBjYXVzZSwgbmFtZTogIk5vbmNlTWF4VmFsdWVFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9uY2VNYXhWYWx1ZUVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC9ub25jZSBoYXMgbWF4IHZhbHVlLwogICAgICB9KTsKICAgICAgSW5zdWZmaWNpZW50RnVuZHNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSB9ID0ge30pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgIlRoZSB0b3RhbCBjb3N0IChnYXMgKiBnYXMgZmVlICsgdmFsdWUpIG9mIGV4ZWN1dGluZyB0aGlzIHRyYW5zYWN0aW9uIGV4Y2VlZHMgdGhlIGJhbGFuY2Ugb2YgdGhlIGFjY291bnQuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAiVGhpcyBlcnJvciBjb3VsZCBhcmlzZSB3aGVuIHRoZSBhY2NvdW50IGRvZXMgbm90IGhhdmUgZW5vdWdoIGZ1bmRzIHRvOiIsCiAgICAgICAgICAgICAgIiAtIHBheSBmb3IgdGhlIHRvdGFsIGdhcyBmZWUsIiwKICAgICAgICAgICAgICAiIC0gcGF5IGZvciB0aGUgdmFsdWUgdG8gc2VuZC4iLAogICAgICAgICAgICAgICIgIiwKICAgICAgICAgICAgICAiVGhlIGNvc3Qgb2YgdGhlIHRyYW5zYWN0aW9uIGlzIGNhbGN1bGF0ZWQgYXMgYGdhcyAqIGdhcyBmZWUgKyB2YWx1ZWAsIHdoZXJlOiIsCiAgICAgICAgICAgICAgIiAtIGBnYXNgIGlzIHRoZSBhbW91bnQgb2YgZ2FzIG5lZWRlZCBmb3IgdHJhbnNhY3Rpb24gdG8gZXhlY3V0ZSwiLAogICAgICAgICAgICAgICIgLSBgZ2FzIGZlZWAgaXMgdGhlIGdhcyBmZWUsIiwKICAgICAgICAgICAgICAiIC0gYHZhbHVlYCBpcyB0aGUgYW1vdW50IG9mIGV0aGVyIHRvIHNlbmQgdG8gdGhlIHJlY2lwaWVudC4iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG5hbWU6ICJJbnN1ZmZpY2llbnRGdW5kc0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5zdWZmaWNpZW50RnVuZHNFcnJvciwgIm5vZGVNZXNzYWdlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAvaW5zdWZmaWNpZW50IGZ1bmRzLwogICAgICB9KTsKICAgICAgSW50cmluc2ljR2FzVG9vSGlnaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhdXNlLCBnYXMgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihgVGhlIGFtb3VudCBvZiBnYXMgJHtnYXMgPyBgKCR7Z2FzfSkgYCA6ICIifXByb3ZpZGVkIGZvciB0aGUgdHJhbnNhY3Rpb24gZXhjZWVkcyB0aGUgbGltaXQgYWxsb3dlZCBmb3IgdGhlIGJsb2NrLmAsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIG5hbWU6ICJJbnRyaW5zaWNHYXNUb29IaWdoRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRyaW5zaWNHYXNUb29IaWdoRXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL2ludHJpbnNpYyBnYXMgdG9vIGhpZ2h8Z2FzIGxpbWl0IHJlYWNoZWQvCiAgICAgIH0pOwogICAgICBJbnRyaW5zaWNHYXNUb29Mb3dFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgZ2FzIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYFRoZSBhbW91bnQgb2YgZ2FzICR7Z2FzID8gYCgke2dhc30pIGAgOiAiIn1wcm92aWRlZCBmb3IgdGhlIHRyYW5zYWN0aW9uIGlzIHRvbyBsb3cuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkludHJpbnNpY0dhc1Rvb0xvd0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW50cmluc2ljR2FzVG9vTG93RXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL2ludHJpbnNpYyBnYXMgdG9vIGxvdy8KICAgICAgfSk7CiAgICAgIFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhdXNlIH0pIHsKICAgICAgICAgIHN1cGVyKCJUaGUgdHJhbnNhY3Rpb24gdHlwZSBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGNoYWluLiIsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIG5hbWU6ICJUcmFuc2FjdGlvblR5cGVOb3RTdXBwb3J0ZWRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC90cmFuc2FjdGlvbiB0eXBlIG5vdCB2YWxpZC8KICAgICAgfSk7CiAgICAgIFRpcEFib3ZlRmVlQ2FwRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2F1c2UsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBtYXhGZWVQZXJHYXMgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBUaGUgcHJvdmlkZWQgdGlwIChcYG1heFByaW9yaXR5RmVlUGVyR2FzXGAke21heFByaW9yaXR5RmVlUGVyR2FzID8gYCA9ICR7Zm9ybWF0R3dlaShtYXhQcmlvcml0eUZlZVBlckdhcyl9IGd3ZWlgIDogIiJ9KSBjYW5ub3QgYmUgaGlnaGVyIHRoYW4gdGhlIGZlZSBjYXAgKFxgbWF4RmVlUGVyR2FzXGAke21heEZlZVBlckdhcyA/IGAgPSAke2Zvcm1hdEd3ZWkobWF4RmVlUGVyR2FzKX0gZ3dlaWAgOiAiIn0pLmAKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIlRpcEFib3ZlRmVlQ2FwRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUaXBBYm92ZUZlZUNhcEVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC9tYXggcHJpb3JpdHkgZmVlIHBlciBnYXMgaGlnaGVyIHRoYW4gbWF4IGZlZSBwZXIgZ2FzfHRpcCBoaWdoZXIgdGhhbiBmZWUgY2FwLwogICAgICB9KTsKICAgICAgVW5rbm93bk5vZGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSB9KSB7CiAgICAgICAgICBzdXBlcihgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZXhlY3V0aW5nOiAke2NhdXNlPy5zaG9ydE1lc3NhZ2V9YCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIlVua25vd25Ob2RlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZXJyb3JzL2dldE5vZGVFcnJvci5qcwogIGZ1bmN0aW9uIGdldE5vZGVFcnJvcihlcnIsIGFyZ3MpIHsKICAgIGNvbnN0IG1lc3NhZ2UgPSAoZXJyLmRldGFpbHMgfHwgIiIpLnRvTG93ZXJDYXNlKCk7CiAgICBjb25zdCBleGVjdXRpb25SZXZlcnRlZEVycm9yID0gZXJyIGluc3RhbmNlb2YgQmFzZUVycm9yMiA/IGVyci53YWxrKChlKSA9PiBlLmNvZGUgPT09IEV4ZWN1dGlvblJldmVydGVkRXJyb3IuY29kZSkgOiBlcnI7CiAgICBpZiAoZXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvciBpbnN0YW5jZW9mIEJhc2VFcnJvcjIpCiAgICAgIHJldHVybiBuZXcgRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvcih7CiAgICAgICAgY2F1c2U6IGVyciwKICAgICAgICBtZXNzYWdlOiBleGVjdXRpb25SZXZlcnRlZEVycm9yLmRldGFpbHMKICAgICAgfSk7CiAgICBpZiAoRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IEV4ZWN1dGlvblJldmVydGVkRXJyb3IoewogICAgICAgIGNhdXNlOiBlcnIsCiAgICAgICAgbWVzc2FnZTogZXJyLmRldGFpbHMKICAgICAgfSk7CiAgICBpZiAoRmVlQ2FwVG9vSGlnaEVycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgRmVlQ2FwVG9vSGlnaEVycm9yKHsKICAgICAgICBjYXVzZTogZXJyLAogICAgICAgIG1heEZlZVBlckdhczogYXJncz8ubWF4RmVlUGVyR2FzCiAgICAgIH0pOwogICAgaWYgKEZlZUNhcFRvb0xvd0Vycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgRmVlQ2FwVG9vTG93RXJyb3IoewogICAgICAgIGNhdXNlOiBlcnIsCiAgICAgICAgbWF4RmVlUGVyR2FzOiBhcmdzPy5tYXhGZWVQZXJHYXMKICAgICAgfSk7CiAgICBpZiAoTm9uY2VUb29IaWdoRXJyb3Iubm9kZU1lc3NhZ2UudGVzdChtZXNzYWdlKSkKICAgICAgcmV0dXJuIG5ldyBOb25jZVRvb0hpZ2hFcnJvcih7IGNhdXNlOiBlcnIsIG5vbmNlOiBhcmdzPy5ub25jZSB9KTsKICAgIGlmIChOb25jZVRvb0xvd0Vycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgTm9uY2VUb29Mb3dFcnJvcih7IGNhdXNlOiBlcnIsIG5vbmNlOiBhcmdzPy5ub25jZSB9KTsKICAgIGlmIChOb25jZU1heFZhbHVlRXJyb3Iubm9kZU1lc3NhZ2UudGVzdChtZXNzYWdlKSkKICAgICAgcmV0dXJuIG5ldyBOb25jZU1heFZhbHVlRXJyb3IoeyBjYXVzZTogZXJyLCBub25jZTogYXJncz8ubm9uY2UgfSk7CiAgICBpZiAoSW5zdWZmaWNpZW50RnVuZHNFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IEluc3VmZmljaWVudEZ1bmRzRXJyb3IoeyBjYXVzZTogZXJyIH0pOwogICAgaWYgKEludHJpbnNpY0dhc1Rvb0hpZ2hFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IEludHJpbnNpY0dhc1Rvb0hpZ2hFcnJvcih7IGNhdXNlOiBlcnIsIGdhczogYXJncz8uZ2FzIH0pOwogICAgaWYgKEludHJpbnNpY0dhc1Rvb0xvd0Vycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgSW50cmluc2ljR2FzVG9vTG93RXJyb3IoeyBjYXVzZTogZXJyLCBnYXM6IGFyZ3M/LmdhcyB9KTsKICAgIGlmIChUcmFuc2FjdGlvblR5cGVOb3RTdXBwb3J0ZWRFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yKHsgY2F1c2U6IGVyciB9KTsKICAgIGlmIChUaXBBYm92ZUZlZUNhcEVycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgVGlwQWJvdmVGZWVDYXBFcnJvcih7CiAgICAgICAgY2F1c2U6IGVyciwKICAgICAgICBtYXhGZWVQZXJHYXM6IGFyZ3M/Lm1heEZlZVBlckdhcywKICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogYXJncz8ubWF4UHJpb3JpdHlGZWVQZXJHYXMKICAgICAgfSk7CiAgICByZXR1cm4gbmV3IFVua25vd25Ob2RlRXJyb3IoewogICAgICBjYXVzZTogZXJyCiAgICB9KTsKICB9CiAgdmFyIGluaXRfZ2V0Tm9kZUVycm9yID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZXJyb3JzL2dldE5vZGVFcnJvci5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X25vZGUoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2V4dHJhY3QuanMKICBmdW5jdGlvbiBleHRyYWN0KHZhbHVlXywgeyBmb3JtYXQgfSkgewogICAgaWYgKCFmb3JtYXQpCiAgICAgIHJldHVybiB7fTsKICAgIGNvbnN0IHZhbHVlID0ge307CiAgICBmdW5jdGlvbiBleHRyYWN0Xyhmb3JtYXR0ZWQyKSB7CiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmb3JtYXR0ZWQyKTsKICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykgewogICAgICAgIGlmIChrZXkgaW4gdmFsdWVfKQogICAgICAgICAgdmFsdWVba2V5XSA9IHZhbHVlX1trZXldOwogICAgICAgIGlmIChmb3JtYXR0ZWQyW2tleV0gJiYgdHlwZW9mIGZvcm1hdHRlZDJba2V5XSA9PT0gIm9iamVjdCIgJiYgIUFycmF5LmlzQXJyYXkoZm9ybWF0dGVkMltrZXldKSkKICAgICAgICAgIGV4dHJhY3RfKGZvcm1hdHRlZDJba2V5XSk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdCh2YWx1ZV8gfHwge30pOwogICAgZXh0cmFjdF8oZm9ybWF0dGVkKTsKICAgIHJldHVybiB2YWx1ZTsKICB9CiAgdmFyIGluaXRfZXh0cmFjdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Zvcm1hdHRlcnMvZXh0cmFjdC5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZm9ybWF0dGVycy9mb3JtYXR0ZXIuanMKICBmdW5jdGlvbiBkZWZpbmVGb3JtYXR0ZXIodHlwZSwgZm9ybWF0KSB7CiAgICByZXR1cm4gKHsgZXhjbHVkZSwgZm9ybWF0OiBvdmVycmlkZXMgfSkgPT4gewogICAgICByZXR1cm4gewogICAgICAgIGV4Y2x1ZGUsCiAgICAgICAgZm9ybWF0OiAoYXJncykgPT4gewogICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0KGFyZ3MpOwogICAgICAgICAgaWYgKGV4Y2x1ZGUpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZXhjbHVkZSkgewogICAgICAgICAgICAgIGRlbGV0ZSBmb3JtYXR0ZWRba2V5XTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgLi4uZm9ybWF0dGVkLAogICAgICAgICAgICAuLi5vdmVycmlkZXMoYXJncykKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICB0eXBlCiAgICAgIH07CiAgICB9OwogIH0KICB2YXIgaW5pdF9mb3JtYXR0ZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2Zvcm1hdHRlci5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZm9ybWF0dGVycy90cmFuc2FjdGlvblJlcXVlc3QuanMKICBmdW5jdGlvbiBmb3JtYXRUcmFuc2FjdGlvblJlcXVlc3QocmVxdWVzdCkgewogICAgY29uc3QgcnBjUmVxdWVzdCA9IHt9OwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LmF1dGhvcml6YXRpb25MaXN0ICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5hdXRob3JpemF0aW9uTGlzdCA9IGZvcm1hdEF1dGhvcml6YXRpb25MaXN0KHJlcXVlc3QuYXV0aG9yaXphdGlvbkxpc3QpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LmFjY2Vzc0xpc3QgIT09ICJ1bmRlZmluZWQiKQogICAgICBycGNSZXF1ZXN0LmFjY2Vzc0xpc3QgPSByZXF1ZXN0LmFjY2Vzc0xpc3Q7CiAgICBpZiAodHlwZW9mIHJlcXVlc3QuYmxvYlZlcnNpb25lZEhhc2hlcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QuYmxvYlZlcnNpb25lZEhhc2hlcyA9IHJlcXVlc3QuYmxvYlZlcnNpb25lZEhhc2hlczsKICAgIGlmICh0eXBlb2YgcmVxdWVzdC5ibG9icyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0LmJsb2JzWzBdICE9PSAic3RyaW5nIikKICAgICAgICBycGNSZXF1ZXN0LmJsb2JzID0gcmVxdWVzdC5ibG9icy5tYXAoKHgpID0+IGJ5dGVzVG9IZXgoeCkpOwogICAgICBlbHNlCiAgICAgICAgcnBjUmVxdWVzdC5ibG9icyA9IHJlcXVlc3QuYmxvYnM7CiAgICB9CiAgICBpZiAodHlwZW9mIHJlcXVlc3QuZGF0YSAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QuZGF0YSA9IHJlcXVlc3QuZGF0YTsKICAgIGlmICh0eXBlb2YgcmVxdWVzdC5mcm9tICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5mcm9tID0gcmVxdWVzdC5mcm9tOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LmdhcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QuZ2FzID0gbnVtYmVyVG9IZXgocmVxdWVzdC5nYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lmdhc1ByaWNlICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5nYXNQcmljZSA9IG51bWJlclRvSGV4KHJlcXVlc3QuZ2FzUHJpY2UpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm1heEZlZVBlckJsb2JHYXMgIT09ICJ1bmRlZmluZWQiKQogICAgICBycGNSZXF1ZXN0Lm1heEZlZVBlckJsb2JHYXMgPSBudW1iZXJUb0hleChyZXF1ZXN0Lm1heEZlZVBlckJsb2JHYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm1heEZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QubWF4RmVlUGVyR2FzID0gbnVtYmVyVG9IZXgocmVxdWVzdC5tYXhGZWVQZXJHYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm1heFByaW9yaXR5RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5tYXhQcmlvcml0eUZlZVBlckdhcyA9IG51bWJlclRvSGV4KHJlcXVlc3QubWF4UHJpb3JpdHlGZWVQZXJHYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm5vbmNlICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5ub25jZSA9IG51bWJlclRvSGV4KHJlcXVlc3Qubm9uY2UpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LnRvICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC50byA9IHJlcXVlc3QudG87CiAgICBpZiAodHlwZW9mIHJlcXVlc3QudHlwZSAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QudHlwZSA9IHJwY1RyYW5zYWN0aW9uVHlwZVtyZXF1ZXN0LnR5cGVdOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LnZhbHVlICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC52YWx1ZSA9IG51bWJlclRvSGV4KHJlcXVlc3QudmFsdWUpOwogICAgcmV0dXJuIHJwY1JlcXVlc3Q7CiAgfQogIGZ1bmN0aW9uIGZvcm1hdEF1dGhvcml6YXRpb25MaXN0KGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICByZXR1cm4gYXV0aG9yaXphdGlvbkxpc3QubWFwKChhdXRob3JpemF0aW9uKSA9PiAoewogICAgICBhZGRyZXNzOiBhdXRob3JpemF0aW9uLmNvbnRyYWN0QWRkcmVzcywKICAgICAgcjogYXV0aG9yaXphdGlvbi5yLAogICAgICBzOiBhdXRob3JpemF0aW9uLnMsCiAgICAgIGNoYWluSWQ6IG51bWJlclRvSGV4KGF1dGhvcml6YXRpb24uY2hhaW5JZCksCiAgICAgIG5vbmNlOiBudW1iZXJUb0hleChhdXRob3JpemF0aW9uLm5vbmNlKSwKICAgICAgLi4udHlwZW9mIGF1dGhvcml6YXRpb24ueVBhcml0eSAhPT0gInVuZGVmaW5lZCIgPyB7IHlQYXJpdHk6IG51bWJlclRvSGV4KGF1dGhvcml6YXRpb24ueVBhcml0eSkgfSA6IHt9LAogICAgICAuLi50eXBlb2YgYXV0aG9yaXphdGlvbi52ICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgYXV0aG9yaXphdGlvbi55UGFyaXR5ID09PSAidW5kZWZpbmVkIiA/IHsgdjogbnVtYmVyVG9IZXgoYXV0aG9yaXphdGlvbi52KSB9IDoge30KICAgIH0pKTsKICB9CiAgdmFyIHJwY1RyYW5zYWN0aW9uVHlwZSwgZGVmaW5lVHJhbnNhY3Rpb25SZXF1ZXN0OwogIHZhciBpbml0X3RyYW5zYWN0aW9uUmVxdWVzdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Zvcm1hdHRlcnMvdHJhbnNhY3Rpb25SZXF1ZXN0LmpzIigpIHsKICAgICAgaW5pdF90b0hleCgpOwogICAgICBpbml0X2Zvcm1hdHRlcigpOwogICAgICBycGNUcmFuc2FjdGlvblR5cGUgPSB7CiAgICAgICAgbGVnYWN5OiAiMHgwIiwKICAgICAgICBlaXAyOTMwOiAiMHgxIiwKICAgICAgICBlaXAxNTU5OiAiMHgyIiwKICAgICAgICBlaXA0ODQ0OiAiMHgzIiwKICAgICAgICBlaXA3NzAyOiAiMHg0IgogICAgICB9OwogICAgICBkZWZpbmVUcmFuc2FjdGlvblJlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lRm9ybWF0dGVyKCJ0cmFuc2FjdGlvblJlcXVlc3QiLCBmb3JtYXRUcmFuc2FjdGlvblJlcXVlc3QpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3N0YXRlT3ZlcnJpZGUuanMKICBmdW5jdGlvbiBzZXJpYWxpemVTdGF0ZU1hcHBpbmcoc3RhdGVNYXBwaW5nKSB7CiAgICBpZiAoIXN0YXRlTWFwcGluZyB8fCBzdGF0ZU1hcHBpbmcubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gdm9pZCAwOwogICAgcmV0dXJuIHN0YXRlTWFwcGluZy5yZWR1Y2UoKGFjYywgeyBzbG90LCB2YWx1ZSB9KSA9PiB7CiAgICAgIGlmIChzbG90Lmxlbmd0aCAhPT0gNjYpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRCeXRlc0xlbmd0aEVycm9yKHsKICAgICAgICAgIHNpemU6IHNsb3QubGVuZ3RoLAogICAgICAgICAgdGFyZ2V0U2l6ZTogNjYsCiAgICAgICAgICB0eXBlOiAiaGV4IgogICAgICAgIH0pOwogICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSA2NikKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEJ5dGVzTGVuZ3RoRXJyb3IoewogICAgICAgICAgc2l6ZTogdmFsdWUubGVuZ3RoLAogICAgICAgICAgdGFyZ2V0U2l6ZTogNjYsCiAgICAgICAgICB0eXBlOiAiaGV4IgogICAgICAgIH0pOwogICAgICBhY2Nbc2xvdF0gPSB2YWx1ZTsKICAgICAgcmV0dXJuIGFjYzsKICAgIH0sIHt9KTsKICB9CiAgZnVuY3Rpb24gc2VyaWFsaXplQWNjb3VudFN0YXRlT3ZlcnJpZGUocGFyYW1ldGVycykgewogICAgY29uc3QgeyBiYWxhbmNlLCBub25jZSwgc3RhdGUsIHN0YXRlRGlmZiwgY29kZSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlID0ge307CiAgICBpZiAoY29kZSAhPT0gdm9pZCAwKQogICAgICBycGNBY2NvdW50U3RhdGVPdmVycmlkZS5jb2RlID0gY29kZTsKICAgIGlmIChiYWxhbmNlICE9PSB2b2lkIDApCiAgICAgIHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlLmJhbGFuY2UgPSBudW1iZXJUb0hleChiYWxhbmNlKTsKICAgIGlmIChub25jZSAhPT0gdm9pZCAwKQogICAgICBycGNBY2NvdW50U3RhdGVPdmVycmlkZS5ub25jZSA9IG51bWJlclRvSGV4KG5vbmNlKTsKICAgIGlmIChzdGF0ZSAhPT0gdm9pZCAwKQogICAgICBycGNBY2NvdW50U3RhdGVPdmVycmlkZS5zdGF0ZSA9IHNlcmlhbGl6ZVN0YXRlTWFwcGluZyhzdGF0ZSk7CiAgICBpZiAoc3RhdGVEaWZmICE9PSB2b2lkIDApIHsKICAgICAgaWYgKHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlLnN0YXRlKQogICAgICAgIHRocm93IG5ldyBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yKCk7CiAgICAgIHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlLnN0YXRlRGlmZiA9IHNlcmlhbGl6ZVN0YXRlTWFwcGluZyhzdGF0ZURpZmYpOwogICAgfQogICAgcmV0dXJuIHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlOwogIH0KICBmdW5jdGlvbiBzZXJpYWxpemVTdGF0ZU92ZXJyaWRlKHBhcmFtZXRlcnMpIHsKICAgIGlmICghcGFyYW1ldGVycykKICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIGNvbnN0IHJwY1N0YXRlT3ZlcnJpZGUgPSB7fTsKICAgIGZvciAoY29uc3QgeyBhZGRyZXNzLCAuLi5hY2NvdW50U3RhdGUgfSBvZiBwYXJhbWV0ZXJzKSB7CiAgICAgIGlmICghaXNBZGRyZXNzKGFkZHJlc3MsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3MgfSk7CiAgICAgIGlmIChycGNTdGF0ZU92ZXJyaWRlW2FkZHJlc3NdKQogICAgICAgIHRocm93IG5ldyBBY2NvdW50U3RhdGVDb25mbGljdEVycm9yKHsgYWRkcmVzcyB9KTsKICAgICAgcnBjU3RhdGVPdmVycmlkZVthZGRyZXNzXSA9IHNlcmlhbGl6ZUFjY291bnRTdGF0ZU92ZXJyaWRlKGFjY291bnRTdGF0ZSk7CiAgICB9CiAgICByZXR1cm4gcnBjU3RhdGVPdmVycmlkZTsKICB9CiAgdmFyIGluaXRfc3RhdGVPdmVycmlkZTIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zdGF0ZU92ZXJyaWRlLmpzIigpIHsKICAgICAgaW5pdF9hZGRyZXNzKCk7CiAgICAgIGluaXRfZGF0YSgpOwogICAgICBpbml0X3N0YXRlT3ZlcnJpZGUoKTsKICAgICAgaW5pdF9pc0FkZHJlc3MoKTsKICAgICAgaW5pdF90b0hleCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL2Fzc2VydFJlcXVlc3QuanMKICBmdW5jdGlvbiBhc3NlcnRSZXF1ZXN0KGFyZ3MpIHsKICAgIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudF8sIGdhc1ByaWNlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCB0byB9ID0gYXJnczsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICBpZiAoYWNjb3VudCAmJiAhaXNBZGRyZXNzKGFjY291bnQuYWRkcmVzcykpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogYWNjb3VudC5hZGRyZXNzIH0pOwogICAgaWYgKHRvICYmICFpc0FkZHJlc3ModG8pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IHRvIH0pOwogICAgaWYgKHR5cGVvZiBnYXNQcmljZSAhPT0gInVuZGVmaW5lZCIgJiYgKHR5cGVvZiBtYXhGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiBtYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpKQogICAgICB0aHJvdyBuZXcgRmVlQ29uZmxpY3RFcnJvcigpOwogICAgaWYgKG1heEZlZVBlckdhcyAmJiBtYXhGZWVQZXJHYXMgPiAybiAqKiAyNTZuIC0gMW4pCiAgICAgIHRocm93IG5ldyBGZWVDYXBUb29IaWdoRXJyb3IoeyBtYXhGZWVQZXJHYXMgfSk7CiAgICBpZiAobWF4UHJpb3JpdHlGZWVQZXJHYXMgJiYgbWF4RmVlUGVyR2FzICYmIG1heFByaW9yaXR5RmVlUGVyR2FzID4gbWF4RmVlUGVyR2FzKQogICAgICB0aHJvdyBuZXcgVGlwQWJvdmVGZWVDYXBFcnJvcih7IG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMgfSk7CiAgfQogIHZhciBpbml0X2Fzc2VydFJlcXVlc3QgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9hc3NlcnRSZXF1ZXN0LmpzIigpIHsKICAgICAgaW5pdF9wYXJzZUFjY291bnQoKTsKICAgICAgaW5pdF9hZGRyZXNzKCk7CiAgICAgIGluaXRfbm9kZSgpOwogICAgICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgICAgIGluaXRfaXNBZGRyZXNzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9pc0FkZHJlc3NFcXVhbC5qcwogIGZ1bmN0aW9uIGlzQWRkcmVzc0VxdWFsKGEsIGIpIHsKICAgIGlmICghaXNBZGRyZXNzKGEsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiBhIH0pOwogICAgaWYgKCFpc0FkZHJlc3MoYiwgeyBzdHJpY3Q6IGZhbHNlIH0pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IGIgfSk7CiAgICByZXR1cm4gYS50b0xvd2VyQ2FzZSgpID09PSBiLnRvTG93ZXJDYXNlKCk7CiAgfQogIHZhciBpbml0X2lzQWRkcmVzc0VxdWFsID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9pc0FkZHJlc3NFcXVhbC5qcyIoKSB7CiAgICAgIGluaXRfYWRkcmVzcygpOwogICAgICBpbml0X2lzQWRkcmVzcygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9kZWNvZGVGdW5jdGlvblJlc3VsdC5qcwogIGZ1bmN0aW9uIGRlY29kZUZ1bmN0aW9uUmVzdWx0KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhcmdzLCBmdW5jdGlvbk5hbWUsIGRhdGEgfSA9IHBhcmFtZXRlcnM7CiAgICBsZXQgYWJpSXRlbSA9IGFiaTJbMF07CiAgICBpZiAoZnVuY3Rpb25OYW1lKSB7CiAgICAgIGNvbnN0IGl0ZW0gPSBnZXRBYmlJdGVtKHsgYWJpOiBhYmkyLCBhcmdzLCBuYW1lOiBmdW5jdGlvbk5hbWUgfSk7CiAgICAgIGlmICghaXRlbSkKICAgICAgICB0aHJvdyBuZXcgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yKGZ1bmN0aW9uTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg0IH0pOwogICAgICBhYmlJdGVtID0gaXRlbTsKICAgIH0KICAgIGlmIChhYmlJdGVtLnR5cGUgIT09ICJmdW5jdGlvbiIpCiAgICAgIHRocm93IG5ldyBBYmlGdW5jdGlvbk5vdEZvdW5kRXJyb3Iodm9pZCAwLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDQgfSk7CiAgICBpZiAoIWFiaUl0ZW0ub3V0cHV0cykKICAgICAgdGhyb3cgbmV3IEFiaUZ1bmN0aW9uT3V0cHV0c05vdEZvdW5kRXJyb3IoYWJpSXRlbS5uYW1lLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDQgfSk7CiAgICBjb25zdCB2YWx1ZXMgPSBkZWNvZGVBYmlQYXJhbWV0ZXJzKGFiaUl0ZW0ub3V0cHV0cywgZGF0YSk7CiAgICBpZiAodmFsdWVzICYmIHZhbHVlcy5sZW5ndGggPiAxKQogICAgICByZXR1cm4gdmFsdWVzOwogICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID09PSAxKQogICAgICByZXR1cm4gdmFsdWVzWzBdOwogICAgcmV0dXJuIHZvaWQgMDsKICB9CiAgdmFyIGRvY3NQYXRoNDsKICB2YXIgaW5pdF9kZWNvZGVGdW5jdGlvblJlc3VsdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9kZWNvZGVGdW5jdGlvblJlc3VsdC5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfZGVjb2RlQWJpUGFyYW1ldGVycygpOwogICAgICBpbml0X2dldEFiaUl0ZW0oKTsKICAgICAgZG9jc1BhdGg0ID0gIi9kb2NzL2NvbnRyYWN0L2RlY29kZUZ1bmN0aW9uUmVzdWx0IjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMvYWJpcy5qcwogIHZhciBtdWx0aWNhbGwzQWJpLCB1bml2ZXJzYWxSZXNvbHZlckVycm9ycywgdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpLCB1bml2ZXJzYWxSZXNvbHZlclJldmVyc2VBYmksIHRleHRSZXNvbHZlckFiaSwgYWRkcmVzc1Jlc29sdmVyQWJpLCB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JBYmksIGVyYzIwQWJpLCBlcmMyMEFiaV9ieXRlczMyLCBlcmM3MjFBYmksIGVyYzQ2MjZBYmk7CiAgdmFyIGluaXRfYWJpcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9hYmlzLmpzIigpIHsKICAgICAgbXVsdGljYWxsM0FiaSA9IFsKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbXBvbmVudHM6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogInRhcmdldCIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogImFsbG93RmFpbHVyZSIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogImNhbGxEYXRhIiwKICAgICAgICAgICAgICAgICAgdHlwZTogImJ5dGVzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgbmFtZTogImNhbGxzIiwKICAgICAgICAgICAgICB0eXBlOiAidHVwbGVbXSIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJhZ2dyZWdhdGUzIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbXBvbmVudHM6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogInN1Y2Nlc3MiLAogICAgICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIG5hbWU6ICJyZXR1cm5EYXRhIiwKICAgICAgICAgICAgICAgICAgdHlwZTogImJ5dGVzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgbmFtZTogInJldHVybkRhdGEiLAogICAgICAgICAgICAgIHR5cGU6ICJ0dXBsZVtdIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfQogICAgICBdOwogICAgICB1bml2ZXJzYWxSZXNvbHZlckVycm9ycyA9IFsKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogIlJlc29sdmVyTm90Rm91bmQiLAogICAgICAgICAgdHlwZTogImVycm9yIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG5hbWU6ICJSZXNvbHZlcldpbGRjYXJkTm90U3VwcG9ydGVkIiwKICAgICAgICAgIHR5cGU6ICJlcnJvciIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBuYW1lOiAiUmVzb2x2ZXJOb3RDb250cmFjdCIsCiAgICAgICAgICB0eXBlOiAiZXJyb3IiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJyZXR1cm5EYXRhIiwKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiUmVzb2x2ZXJFcnJvciIsCiAgICAgICAgICB0eXBlOiAiZXJyb3IiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbXBvbmVudHM6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogInN0YXR1cyIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJ1aW50MTYiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBuYW1lOiAibWVzc2FnZSIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICBuYW1lOiAiZXJyb3JzIiwKICAgICAgICAgICAgICB0eXBlOiAidHVwbGVbXSIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJIdHRwRXJyb3IiLAogICAgICAgICAgdHlwZTogImVycm9yIgogICAgICAgIH0KICAgICAgXTsKICAgICAgdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpID0gWwogICAgICAgIC4uLnVuaXZlcnNhbFJlc29sdmVyRXJyb3JzLAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJyZXNvbHZlIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICJuYW1lIiwgdHlwZTogImJ5dGVzIiB9LAogICAgICAgICAgICB7IG5hbWU6ICJkYXRhIiwgdHlwZTogImJ5dGVzIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICIiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImFkZHJlc3MiLCB0eXBlOiAiYWRkcmVzcyIgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogInJlc29sdmUiLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsgbmFtZTogIm5hbWUiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImRhdGEiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImdhdGV3YXlzIiwgdHlwZTogInN0cmluZ1tdIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICIiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImFkZHJlc3MiLCB0eXBlOiAiYWRkcmVzcyIgfQogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXTsKICAgICAgdW5pdmVyc2FsUmVzb2x2ZXJSZXZlcnNlQWJpID0gWwogICAgICAgIC4uLnVuaXZlcnNhbFJlc29sdmVyRXJyb3JzLAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJyZXZlcnNlIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW3sgdHlwZTogImJ5dGVzIiwgbmFtZTogInJldmVyc2VOYW1lIiB9XSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgeyB0eXBlOiAic3RyaW5nIiwgbmFtZTogInJlc29sdmVkTmFtZSIgfSwKICAgICAgICAgICAgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJyZXNvbHZlZEFkZHJlc3MiIH0sCiAgICAgICAgICAgIHsgdHlwZTogImFkZHJlc3MiLCBuYW1lOiAicmV2ZXJzZVJlc29sdmVyIiB9LAogICAgICAgICAgICB7IHR5cGU6ICJhZGRyZXNzIiwgbmFtZTogInJlc29sdmVyIiB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAicmV2ZXJzZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgeyB0eXBlOiAiYnl0ZXMiLCBuYW1lOiAicmV2ZXJzZU5hbWUiIH0sCiAgICAgICAgICAgIHsgdHlwZTogInN0cmluZ1tdIiwgbmFtZTogImdhdGV3YXlzIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7IHR5cGU6ICJzdHJpbmciLCBuYW1lOiAicmVzb2x2ZWROYW1lIiB9LAogICAgICAgICAgICB7IHR5cGU6ICJhZGRyZXNzIiwgbmFtZTogInJlc29sdmVkQWRkcmVzcyIgfSwKICAgICAgICAgICAgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJyZXZlcnNlUmVzb2x2ZXIiIH0sCiAgICAgICAgICAgIHsgdHlwZTogImFkZHJlc3MiLCBuYW1lOiAicmVzb2x2ZXIiIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF07CiAgICAgIHRleHRSZXNvbHZlckFiaSA9IFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAidGV4dCIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgeyBuYW1lOiAibmFtZSIsIHR5cGU6ICJieXRlczMyIiB9LAogICAgICAgICAgICB7IG5hbWU6ICJrZXkiLCB0eXBlOiAic3RyaW5nIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogW3sgbmFtZTogIiIsIHR5cGU6ICJzdHJpbmciIH1dCiAgICAgICAgfQogICAgICBdOwogICAgICBhZGRyZXNzUmVzb2x2ZXJBYmkgPSBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogImFkZHIiLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbeyBuYW1lOiAibmFtZSIsIHR5cGU6ICJieXRlczMyIiB9XSwKICAgICAgICAgIG91dHB1dHM6IFt7IG5hbWU6ICIiLCB0eXBlOiAiYWRkcmVzcyIgfV0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJhZGRyIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICJuYW1lIiwgdHlwZTogImJ5dGVzMzIiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImNvaW5UeXBlIiwgdHlwZTogInVpbnQyNTYiIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbeyBuYW1lOiAiIiwgdHlwZTogImJ5dGVzIiB9XQogICAgICAgIH0KICAgICAgXTsKICAgICAgdW5pdmVyc2FsU2lnbmF0dXJlVmFsaWRhdG9yQWJpID0gWwogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIl9zaWduZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIl9oYXNoIiwKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMzMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJfc2lnbmF0dXJlIiwKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIHR5cGU6ICJjb25zdHJ1Y3RvciIKICAgICAgICB9CiAgICAgIF07CiAgICAgIGVyYzIwQWJpID0gWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiQXBwcm92YWwiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYWxsb3dhbmNlIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYXBwcm92ZSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJiYWxhbmNlT2YiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhY2NvdW50IiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImRlY2ltYWxzIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50OCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJuYW1lIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAic3ltYm9sIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidG90YWxTdXBwbHkiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidHJhbnNmZXIiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJyZWNpcGllbnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJ0cmFuc2ZlckZyb20iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2lwaWVudCIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfQogICAgICBdOwogICAgICBlcmMyMEFiaV9ieXRlczMyID0gWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiQXBwcm92YWwiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYWxsb3dhbmNlIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYXBwcm92ZSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJiYWxhbmNlT2YiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhY2NvdW50IiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImRlY2ltYWxzIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50OCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJuYW1lIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJieXRlczMyIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInN5bWJvbCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMzMiIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJ0b3RhbFN1cHBseSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJ0cmFuc2ZlciIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2lwaWVudCIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInRyYW5zZmVyRnJvbSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNlbmRlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAicmVjaXBpZW50IiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhbW91bnQiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogImJvb2wiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF07CiAgICAgIGVyYzcyMUFiaSA9IFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZXZlbnQiLAogICAgICAgICAgbmFtZTogIkFwcHJvdmFsIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAic3BlbmRlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImV2ZW50IiwKICAgICAgICAgIG5hbWU6ICJBcHByb3ZhbEZvckFsbCIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogIm93bmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogIm9wZXJhdG9yIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJhcHByb3ZlZCIsCiAgICAgICAgICAgICAgdHlwZTogImJvb2wiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRva2VuSWQiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImFwcHJvdmUiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAicGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImJhbGFuY2VPZiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFjY291bnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiZ2V0QXBwcm92ZWQiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImlzQXBwcm92ZWRGb3JBbGwiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3BlcmF0b3IiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogImJvb2wiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAibmFtZSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogIm93bmVyT2YiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAic2FmZVRyYW5zZmVyRnJvbSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJwYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImZyb20iLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInNhZmVUcmFuc2ZlckZyb20iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0byIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiaWQiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImRhdGEiLAogICAgICAgICAgICAgIHR5cGU6ICJieXRlcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInNldEFwcHJvdmFsRm9yQWxsIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogIm5vbnBheWFibGUiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3BlcmF0b3IiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFwcHJvdmVkIiwKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInN5bWJvbCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInRva2VuQnlJbmRleCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImluZGV4IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInRva2VuQnlJbmRleCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIm93bmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJpbmRleCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAidG9rZW5JZCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidG9rZW5VUkkiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidG90YWxTdXBwbHkiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidHJhbnNmZXJGcm9tIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInBheWFibGUiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJyZWNpcGllbnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInRva2VJZCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbXQogICAgICAgIH0KICAgICAgXTsKICAgICAgZXJjNDYyNkFiaSA9IFsKICAgICAgICB7CiAgICAgICAgICBhbm9ueW1vdXM6IGZhbHNlLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiQXBwcm92YWwiLAogICAgICAgICAgdHlwZTogImV2ZW50IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgYW5vbnltb3VzOiBmYWxzZSwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogZmFsc2UsCiAgICAgICAgICAgICAgbmFtZTogInNoYXJlcyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiRGVwb3NpdCIsCiAgICAgICAgICB0eXBlOiAiZXZlbnQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBhbm9ueW1vdXM6IGZhbHNlLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgdHlwZTogImV2ZW50IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgYW5vbnltb3VzOiBmYWxzZSwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogIm93bmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogZmFsc2UsCiAgICAgICAgICAgICAgbmFtZTogInNoYXJlcyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiV2l0aGRyYXciLAogICAgICAgICAgdHlwZTogImV2ZW50IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogImFsbG93YW5jZSIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAic3BlbmRlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJhcHByb3ZlIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogImFzc2V0IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldFRva2VuQWRkcmVzcyIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFjY291bnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogImJhbGFuY2VPZiIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAic2hhcmVzIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJjb252ZXJ0VG9Bc3NldHMiLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiY29udmVydFRvU2hhcmVzIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJkZXBvc2l0IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJjYWxsZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogIm1heERlcG9zaXQiLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIm1heEFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImNhbGxlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAibWF4TWludCIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAibWF4U2hhcmVzIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogIm1heFJlZGVlbSIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAibWF4U2hhcmVzIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogIm1heFdpdGhkcmF3IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJtYXhBc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJtaW50IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogInByZXZpZXdEZXBvc2l0IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogInByZXZpZXdNaW50IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogInByZXZpZXdSZWRlZW0iLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAicHJldmlld1dpdGhkcmF3IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAicmVkZWVtIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogInRvdGFsQXNzZXRzIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b3RhbE1hbmFnZWRBc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogInRvdGFsU3VwcGx5IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0byIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJ0cmFuc2ZlciIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogIm5vbnBheWFibGUiLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiZnJvbSIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAidG8iLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAidHJhbnNmZXJGcm9tIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAid2l0aGRyYXciLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNoYXJlcyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9CiAgICAgIF07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2NvbnRyYWN0LmpzCiAgdmFyIGFnZ3JlZ2F0ZTNTaWduYXR1cmU7CiAgdmFyIGluaXRfY29udHJhY3QyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2NvbnRyYWN0LmpzIigpIHsKICAgICAgYWdncmVnYXRlM1NpZ25hdHVyZSA9ICIweDgyYWQ1NmNiIjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMvY29udHJhY3RzLmpzCiAgdmFyIGRlcGxveWxlc3NDYWxsVmlhQnl0ZWNvZGVCeXRlY29kZSwgZGVwbG95bGVzc0NhbGxWaWFGYWN0b3J5Qnl0ZWNvZGUsIHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckJ5dGVDb2RlOwogIHZhciBpbml0X2NvbnRyYWN0cyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9jb250cmFjdHMuanMiKCkgewogICAgICBkZXBsb3lsZXNzQ2FsbFZpYUJ5dGVjb2RlQnl0ZWNvZGUgPSAiMHg2MDgwNjA0MDUyMzQ4MDE1NjEwMDEwNTc2MDAwODBmZDViNTA2MDQwNTE2MTAxOGUzODAzODA2MTAxOGU4MzM5ODEwMTYwNDA4MTkwNTI2MTAwMmY5MTYxMDEyNDU2NWI2MDAwODA4MzUxNjAyMDg1MDE2MDAwZjU5MDUwODAzYjYxMDA0ODU3NjAwMDgwZmQ1YjYwMDA4MDgzNTE2MDIwODUwMTYwMDA4NTVhZjE2MDQwNTEzZDYwMDA4MjNlODE2MTAwNjc1NzNkODFmZDViM2Q4MWYzNWI2MzRlNDg3YjcxNjBlMDFiNjAwMDUyNjA0MTYwMDQ1MjYwMjQ2MDAwZmQ1YjYwMDA4MjYwMWY4MzAxMTI2MTAwOTI1NzYwMDA4MGZkNWI4MTUxNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDBhYjU3NjEwMGFiNjEwMDZiNTY1YjYwNDA1MTYwMWY4MjAxNjAxZjE5OTA4MTE2NjAzZjAxMTY4MTAxNjAwMTYwMDE2MDQwMWIwMzgxMTE4MjgyMTAxNzE1NjEwMGQ5NTc2MTAwZDk2MTAwNmI1NjViNjA0MDUyODE4MTUyODM4MjAxNjAyMDAxODUxMDE1NjEwMGYxNTc2MDAwODBmZDViNjAwMDViODI4MTEwMTU2MTAxMTA1NzYwMjA4MTg2MDE4MTAxNTE4MzgzMDE4MjAxNTIwMTYxMDBmNDU2NWI1MDYwMDA5MTgxMDE2MDIwMDE5MTkwOTE1MjkzOTI1MDUwNTA1NjViNjAwMDgwNjA0MDgzODUwMzEyMTU2MTAxMzc1NzYwMDA4MGZkNWI4MjUxNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDE0ZDU3NjAwMDgwZmQ1YjYxMDE1OTg1ODI4NjAxNjEwMDgxNTY1YjYwMjA4NTAxNTE5MDkzNTA5MDUwNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDE3NzU3NjAwMDgwZmQ1YjYxMDE4Mzg1ODI4NjAxNjEwMDgxNTY1YjkxNTA1MDkyNTA5MjkwNTA1NmZlIjsKICAgICAgZGVwbG95bGVzc0NhbGxWaWFGYWN0b3J5Qnl0ZWNvZGUgPSAiMHg2MDgwNjA0MDUyMzQ4MDE1NjEwMDEwNTc2MDAwODBmZDViNTA2MDQwNTE2MTAyYzAzODAzODA2MTAyYzA4MzM5ODEwMTYwNDA4MTkwNTI2MTAwMmY5MTYxMDFlNjU2NWI4MzYwMDE2MDAxNjBhMDFiMDMxNjNiNjAwMDAzNjEwMGU0NTc2MDAwODA4MzYwMDE2MDAxNjBhMDFiMDMxNjgzNjA0MDUxNjEwMDVjOTE5MDYxMDI3MDU2NWI2MDAwNjA0MDUxODA4MzAzODE2MDAwODY1YWYxOTE1MDUwM2Q4MDYwMDA4MTE0NjEwMDk5NTc2MDQwNTE5MTUwNjAxZjE5NjAzZjNkMDExNjgyMDE2MDQwNTIzZDgyNTIzZDYwMDA2MDIwODQwMTNlNjEwMDllNTY1YjYwNjA5MTUwNWI1MDkxNTA5MTUwODExNTgwNjEwMGI4NTc1MDYwMDE2MDAxNjBhMDFiMDM4NjE2M2IxNTViMTU2MTAwZTE1NzgwNjA0MDUxNjMxMDFiYjk4ZDYwZTAxYjgxNTI2MDA0MDE2MTAwZDg5MTkwNjEwMjhjNTY1YjYwNDA1MTgwOTEwMzkwZmQ1YjUwNTA1YjYwMDA4MDg0NTE2MDIwODYwMTYwMDA4ODVhZjE2MDQwNTEzZDYwMDA4MjNlODE2MTAxMDM1NzNkODFmZDViM2Q4MWYzNWI4MDUxNjAwMTYwMDE2MGEwMWIwMzgxMTY4MTE0NjEwMTFlNTc2MDAwODBmZDViOTE5MDUwNTY1YjYzNGU0ODdiNzE2MGUwMWI2MDAwNTI2MDQxNjAwNDUyNjAyNDYwMDBmZDViNjAwMDViODM4MTEwMTU2MTAxNTQ1NzgxODEwMTUxODM4MjAxNTI2MDIwMDE2MTAxM2M1NjViNTA1MDYwMDA5MTAxNTI1NjViNjAwMDgyNjAxZjgzMDExMjYxMDE2ZTU3NjAwMDgwZmQ1YjgxNTE2MDAxNjAwMTYwNDAxYjAzODExMTE1NjEwMTg3NTc2MTAxODc2MTAxMjM1NjViNjA0MDUxNjAxZjgyMDE2MDFmMTk5MDgxMTY2MDNmMDExNjgxMDE2MDAxNjAwMTYwNDAxYjAzODExMTgyODIxMDE3MTU2MTAxYjU1NzYxMDFiNTYxMDEyMzU2NWI2MDQwNTI4MTgxNTI4MzgyMDE2MDIwMDE4NTEwMTU2MTAxY2Q1NzYwMDA4MGZkNWI2MTAxZGU4MjYwMjA4MzAxNjAyMDg3MDE2MTAxMzk1NjViOTQ5MzUwNTA1MDUwNTY1YjYwMDA4MDYwMDA4MDYwODA4NTg3MDMxMjE1NjEwMWZjNTc2MDAwODBmZDViNjEwMjA1ODU2MTAxMDc1NjViNjAyMDg2MDE1MTkwOTQ1MDYwMDE2MDAxNjA0MDFiMDM4MTExMTU2MTAyMjE1NzYwMDA4MGZkNWI2MTAyMmQ4NzgyODgwMTYxMDE1ZDU2NWI5MzUwNTA2MTAyM2M2MDQwODYwMTYxMDEwNzU2NWI2MDYwODYwMTUxOTA5MjUwNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDI1ODU3NjAwMDgwZmQ1YjYxMDI2NDg3ODI4ODAxNjEwMTVkNTY1YjkxNTA1MDkyOTU5MTk0NTA5MjUwNTY1YjYwMDA4MjUxNjEwMjgyODE4NDYwMjA4NzAxNjEwMTM5NTY1YjkxOTA5MTAxOTI5MTUwNTA1NjViNjAyMDgxNTI2MDAwODI1MTgwNjAyMDg0MDE1MjYxMDJhYjgxNjA0MDg1MDE2MDIwODcwMTYxMDEzOTU2NWI2MDFmMDE2MDFmMTkxNjkxOTA5MTAxNjA0MDAxOTI5MTUwNTA1NmZlIjsKICAgICAgdW5pdmVyc2FsU2lnbmF0dXJlVmFsaWRhdG9yQnl0ZUNvZGUgPSAiMHg2MDgwNjA0MDUyMzQ4MDE1NjEwMDEwNTc2MDAwODBmZDViNTA2MDQwNTE2MTA2OTQzODAzODA2MTA2OTQ4MzM5ODEwMTYwNDA4MTkwNTI2MTAwMmY5MTYxMDUxZTU2NWI2MDAwNjEwMDNjODQ4NDg0NjEwMDQ4NTY1YjkwNTA4MDYwMDA1MjYwMDE2MDFmZjM1YjYwMDA3ZjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2MTAwNzQ4MzYxMDQwYzU2NWIwMzYxMDFlNzU3NjAwMDYwNjA4MDg0ODA2MDIwMDE5MDUxODEwMTkwNjEwMDkyOTE5MDYxMDU3NzU2NWI2MDQwNTE5Mjk1NTA5MDkzNTA5MTUwNjAwMDkwNjAwMTYwMDE2MGEwMWIwMzg1MTY5MDYxMDBiNjkwODU5MDYxMDVkZDU2NWI2MDAwNjA0MDUxODA4MzAzODE2MDAwODY1YWYxOTE1MDUwM2Q4MDYwMDA4MTE0NjEwMGYzNTc2MDQwNTE5MTUwNjAxZjE5NjAzZjNkMDExNjgyMDE2MDQwNTIzZDgyNTIzZDYwMDA2MDIwODQwMTNlNjEwMGY4NTY1YjYwNjA5MTUwNWI1MDUwOTA1MDg3NjAwMTYwMDE2MGEwMWIwMzE2M2I2MDAwMDM2MTAxNjA1NzgwNjEwMTYwNTc2MDQwNTE2MjQ2MWJjZDYwZTUxYjgxNTI2MDIwNjAwNDgyMDE1MjYwMWU2MDI0ODIwMTUyN2Y1MzY5Njc2ZTYxNzQ3NTcyNjU1NjYxNmM2OTY0NjE3NDZmNzIzYTIwNjQ2NTcwNmM2Zjc5NmQ2NTZlNzQwMDAwNjA0NDgyMDE1MjYwNjQwMTViNjA0MDUxODA5MTAzOTBmZDViNjA0MDUxNjMwYjEzNWQzZjYwZTExYjgwODI1MjkwNjAwMTYwMDE2MGEwMWIwMzhhMTY5MDYzMTYyNmJhN2U5MDYxMDE5MDkwOGI5MDg3OTA2MDA0MDE2MTA1Zjk1NjViNjAyMDYwNDA1MTgwODMwMzgxODY1YWZhMTU4MDE1NjEwMWFkNTczZDYwMDA4MDNlM2Q2MDAwZmQ1YjUwNTA1MDUwNjA0MDUxM2Q2MDFmMTk2MDFmODIwMTE2ODIwMTgwNjA0MDUyNTA4MTAxOTA2MTAxZDE5MTkwNjEwNjMzNTY1YjYwMDE2MDAxNjBlMDFiMDMxOTE2MTQ5NDUwNTA1MDUwNTA2MTA0MDU1NjViNjAwMTYwMDE2MGEwMWIwMzg0MTYzYjE1NjEwMjdhNTc2MDQwNTE2MzBiMTM1ZDNmNjBlMTFiODA4MjUyOTA2MDAxNjAwMTYwYTAxYjAzODYxNjkwNjMxNjI2YmE3ZTkwNjEwMjI3OTA4NzkwODc5MDYwMDQwMTYxMDVmOTU2NWI2MDIwNjA0MDUxODA4MzAzODE4NjVhZmExNTgwMTU2MTAyNDQ1NzNkNjAwMDgwM2UzZDYwMDBmZDViNTA1MDUwNTA2MDQwNTEzZDYwMWYxOTYwMWY4MjAxMTY4MjAxODA2MDQwNTI1MDgxMDE5MDYxMDI2ODkxOTA2MTA2MzM1NjViNjAwMTYwMDE2MGUwMWIwMzE5MTYxNDkwNTA2MTA0MDU1NjViODE1MTYwNDExNDYxMDJkZjU3NjA0MDUxNjI0NjFiY2Q2MGU1MWI4MTUyNjAyMDYwMDQ4MjAxNTI2MDNhNjAyNDgyMDE1MjYwMDA4MDUxNjAyMDYxMDY3NDgzMzk4MTUxOTE1MjYwNDQ4MjAxNTI3ZjNhMjA2OTZlNzY2MTZjNjk2NDIwNzM2OTY3NmU2MTc0NzU3MjY1MjA2YzY1NmU2Nzc0NjgwMDAwMDAwMDAwMDA2MDY0ODIwMTUyNjA4NDAxNjEwMTU3NTY1YjYxMDJlNzYxMDQyNTU2NWI1MDYwMjA4MjAxNTE2MDQwODA4NDAxNTE4NDUxODU5MzkyNjAwMDkxODU5MTkwODExMDYxMDMwYzU3NjEwMzBjNjEwNjVkNTY1YjAxNjAyMDAxNTE2MGY4MWM5MDUwNjAxYjgxMTQ4MDE1OTA2MTAzMmI1NzUwODA2MGZmMTY2MDFjMTQxNTViMTU2MTAzOGM1NzYwNDA1MTYyNDYxYmNkNjBlNTFiODE1MjYwMjA2MDA0ODIwMTUyNjAzYjYwMjQ4MjAxNTI2MDAwODA1MTYwMjA2MTA2NzQ4MzM5ODE1MTkxNTI2MDQ0ODIwMTUyN2YzYTIwNjk2ZTc2NjE2YzY5NjQyMDczNjk2NzZlNjE3NDc1NzI2NTIwNzYyMDc2NjE2Yzc1NjUwMDAwMDAwMDAwNjA2NDgyMDE1MjYwODQwMTYxMDE1NzU2NWI2MDQwODA1MTYwMDA4MTUyNjAyMDgxMDE4MDgzNTI4OTkwNTI2MGZmODMxNjkxODEwMTkxOTA5MTUyNjA2MDgxMDE4NDkwNTI2MDgwODEwMTgzOTA1MjYwMDE2MDAxNjBhMDFiMDM4OTE2OTA2MDAxOTA2MGEwMDE2MDIwNjA0MDUxNjAyMDgxMDM5MDgwODQwMzkwODU1YWZhMTU4MDE1NjEwM2VhNTczZDYwMDA4MDNlM2Q2MDAwZmQ1YjUwNTA1MDYwMjA2MDQwNTEwMzUxNjAwMTYwMDE2MGEwMWIwMzE2MTQ5NDUwNTA1MDUwNTA1YjkzOTI1MDUwNTA1NjViNjAwMDYwMjA4MjUxMTAxNTYxMDQxZDU3NjAwMDgwZmQ1YjUwODA1MTAxNTE5MDU2NWI2MDQwNTE4MDYwNjAwMTYwNDA1MjgwNjAwMzkwNjAyMDgyMDI4MDM2ODMzNzUwOTE5MjkxNTA1MDU2NWI2MDAxNjAwMTYwYTAxYjAzODExNjgxMTQ2MTA0NTg1NzYwMDA4MGZkNWI1MDU2NWI2MzRlNDg3YjcxNjBlMDFiNjAwMDUyNjA0MTYwMDQ1MjYwMjQ2MDAwZmQ1YjYwMDA1YjgzODExMDE1NjEwNDhjNTc4MTgxMDE1MTgzODIwMTUyNjAyMDAxNjEwNDc0NTY1YjUwNTA2MDAwOTEwMTUyNTY1YjYwMDA4MjYwMWY4MzAxMTI2MTA0YTY1NzYwMDA4MGZkNWI4MTUxNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDRiZjU3NjEwNGJmNjEwNDViNTY1YjYwNDA1MTYwMWY4MjAxNjAxZjE5OTA4MTE2NjAzZjAxMTY4MTAxNjAwMTYwMDE2MDQwMWIwMzgxMTE4MjgyMTAxNzE1NjEwNGVkNTc2MTA0ZWQ2MTA0NWI1NjViNjA0MDUyODE4MTUyODM4MjAxNjAyMDAxODUxMDE1NjEwNTA1NTc2MDAwODBmZDViNjEwNTE2ODI2MDIwODMwMTYwMjA4NzAxNjEwNDcxNTY1Yjk0OTM1MDUwNTA1MDU2NWI2MDAwODA2MDAwNjA2MDg0ODYwMzEyMTU2MTA1MzM1NzYwMDA4MGZkNWI4MzUxNjEwNTNlODE2MTA0NDM1NjViNjAyMDg1MDE1MTYwNDA4NjAxNTE5MTk0NTA5MjUwNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDU2MTU3NjAwMDgwZmQ1YjYxMDU2ZDg2ODI4NzAxNjEwNDk1NTY1YjkxNTA1MDkyNTA5MjUwOTI1NjViNjAwMDgwNjAwMDYwNjA4NDg2MDMxMjE1NjEwNThjNTc2MDAwODBmZDViODM1MTYxMDU5NzgxNjEwNDQzNTY1YjYwMjA4NTAxNTE5MDkzNTA2MDAxNjAwMTYwNDAxYjAzODExMTE1NjEwNWIzNTc2MDAwODBmZDViNjEwNWJmODY4Mjg3MDE2MTA0OTU1NjViNjA0MDg2MDE1MTkwOTM1MDkwNTA2MDAxNjAwMTYwNDAxYjAzODExMTE1NjEwNTYxNTc2MDAwODBmZDViNjAwMDgyNTE2MTA1ZWY4MTg0NjAyMDg3MDE2MTA0NzE1NjViOTE5MDkxMDE5MjkxNTA1MDU2NWI4MjgxNTI2MDQwNjAyMDgyMDE1MjYwMDA4MjUxODA2MDQwODQwMTUyNjEwNjFlODE2MDYwODUwMTYwMjA4NzAxNjEwNDcxNTY1YjYwMWYwMTYwMWYxOTE2OTE5MDkxMDE2MDYwMDE5MzkyNTA1MDUwNTY1YjYwMDA2MDIwODI4NDAzMTIxNTYxMDY0NTU3NjAwMDgwZmQ1YjgxNTE2MDAxNjAwMTYwZTAxYjAzMTk4MTE2ODExNDYxMDQwNTU3NjAwMDgwZmQ1YjYzNGU0ODdiNzE2MGUwMWI2MDAwNTI2MDMyNjAwNDUyNjAyNDYwMDBmZGZlNTM2OTY3NmU2MTc0NzU3MjY1NTY2MTZjNjk2NDYxNzQ2ZjcyMjM3MjY1NjM2Zjc2NjU3MjUzNjk2NzZlNjU3MiI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2NoYWluLmpzCiAgdmFyIENoYWluRG9lc05vdFN1cHBvcnRDb250cmFjdCwgQ2hhaW5NaXNtYXRjaEVycm9yLCBDaGFpbk5vdEZvdW5kRXJyb3IsIENsaWVudENoYWluTm90Q29uZmlndXJlZEVycm9yLCBJbnZhbGlkQ2hhaW5JZEVycm9yOwogIHZhciBpbml0X2NoYWluID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2NoYWluLmpzIigpIHsKICAgICAgaW5pdF9iYXNlKCk7CiAgICAgIENoYWluRG9lc05vdFN1cHBvcnRDb250cmFjdCA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBibG9ja051bWJlciwgY2hhaW4sIGNvbnRyYWN0IH0pIHsKICAgICAgICAgIHN1cGVyKGBDaGFpbiAiJHtjaGFpbi5uYW1lfSIgZG9lcyBub3Qgc3VwcG9ydCBjb250cmFjdCAiJHtjb250cmFjdC5uYW1lfSIuYCwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAiVGhpcyBjb3VsZCBiZSBkdWUgdG8gYW55IG9mIHRoZSBmb2xsb3dpbmc6IiwKICAgICAgICAgICAgICAuLi5ibG9ja051bWJlciAmJiBjb250cmFjdC5ibG9ja0NyZWF0ZWQgJiYgY29udHJhY3QuYmxvY2tDcmVhdGVkID4gYmxvY2tOdW1iZXIgPyBbCiAgICAgICAgICAgICAgICBgLSBUaGUgY29udHJhY3QgIiR7Y29udHJhY3QubmFtZX0iIHdhcyBub3QgZGVwbG95ZWQgdW50aWwgYmxvY2sgJHtjb250cmFjdC5ibG9ja0NyZWF0ZWR9IChjdXJyZW50IGJsb2NrICR7YmxvY2tOdW1iZXJ9KS5gCiAgICAgICAgICAgICAgXSA6IFsKICAgICAgICAgICAgICAgIGAtIFRoZSBjaGFpbiBkb2VzIG5vdCBoYXZlIHRoZSBjb250cmFjdCAiJHtjb250cmFjdC5uYW1lfSIgY29uZmlndXJlZC5gCiAgICAgICAgICAgICAgXQogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0IgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBDaGFpbk1pc21hdGNoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2hhaW4sIGN1cnJlbnRDaGFpbklkIH0pIHsKICAgICAgICAgIHN1cGVyKGBUaGUgY3VycmVudCBjaGFpbiBvZiB0aGUgd2FsbGV0IChpZDogJHtjdXJyZW50Q2hhaW5JZH0pIGRvZXMgbm90IG1hdGNoIHRoZSB0YXJnZXQgY2hhaW4gZm9yIHRoZSB0cmFuc2FjdGlvbiAoaWQ6ICR7Y2hhaW4uaWR9IFx1MjAxMyAke2NoYWluLm5hbWV9KS5gLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBDdXJyZW50IENoYWluIElEOiAgJHtjdXJyZW50Q2hhaW5JZH1gLAogICAgICAgICAgICAgIGBFeHBlY3RlZCBDaGFpbiBJRDogJHtjaGFpbi5pZH0gXHUyMDEzICR7Y2hhaW4ubmFtZX1gCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG5hbWU6ICJDaGFpbk1pc21hdGNoRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIENoYWluTm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgICJObyBjaGFpbiB3YXMgcHJvdmlkZWQgdG8gdGhlIHJlcXVlc3QuIiwKICAgICAgICAgICAgIlBsZWFzZSBwcm92aWRlIGEgY2hhaW4gd2l0aCB0aGUgYGNoYWluYCBhcmd1bWVudCBvbiB0aGUgQWN0aW9uLCBvciBieSBzdXBwbHlpbmcgYSBgY2hhaW5gIHRvIFdhbGxldENsaWVudC4iCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgbmFtZTogIkNoYWluTm90Rm91bmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ2xpZW50Q2hhaW5Ob3RDb25maWd1cmVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoIk5vIGNoYWluIHdhcyBwcm92aWRlZCB0byB0aGUgQ2xpZW50LiIsIHsKICAgICAgICAgICAgbmFtZTogIkNsaWVudENoYWluTm90Q29uZmlndXJlZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQ2hhaW5JZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNoYWluSWQgfSkgewogICAgICAgICAgc3VwZXIodHlwZW9mIGNoYWluSWQgPT09ICJudW1iZXIiID8gYENoYWluIElEICIke2NoYWluSWR9IiBpcyBpbnZhbGlkLmAgOiAiQ2hhaW4gSUQgaXMgaW52YWxpZC4iLCB7IG5hbWU6ICJJbnZhbGlkQ2hhaW5JZEVycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2VuY29kZURlcGxveURhdGEuanMKICBmdW5jdGlvbiBlbmNvZGVEZXBsb3lEYXRhKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhcmdzLCBieXRlY29kZSB9ID0gcGFyYW1ldGVyczsKICAgIGlmICghYXJncyB8fCBhcmdzLmxlbmd0aCA9PT0gMCkKICAgICAgcmV0dXJuIGJ5dGVjb2RlOwogICAgY29uc3QgZGVzY3JpcHRpb24gPSBhYmkyLmZpbmQoKHgpID0+ICJ0eXBlIiBpbiB4ICYmIHgudHlwZSA9PT0gImNvbnN0cnVjdG9yIik7CiAgICBpZiAoIWRlc2NyaXB0aW9uKQogICAgICB0aHJvdyBuZXcgQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoNSB9KTsKICAgIGlmICghKCJpbnB1dHMiIGluIGRlc2NyaXB0aW9uKSkKICAgICAgdGhyb3cgbmV3IEFiaUNvbnN0cnVjdG9yUGFyYW1zTm90Rm91bmRFcnJvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDUgfSk7CiAgICBpZiAoIWRlc2NyaXB0aW9uLmlucHV0cyB8fCBkZXNjcmlwdGlvbi5pbnB1dHMubGVuZ3RoID09PSAwKQogICAgICB0aHJvdyBuZXcgQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoNSB9KTsKICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVBYmlQYXJhbWV0ZXJzKGRlc2NyaXB0aW9uLmlucHV0cywgYXJncyk7CiAgICByZXR1cm4gY29uY2F0SGV4KFtieXRlY29kZSwgZGF0YV0pOwogIH0KICB2YXIgZG9jc1BhdGg1OwogIHZhciBpbml0X2VuY29kZURlcGxveURhdGEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlRGVwbG95RGF0YS5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfY29uY2F0KCk7CiAgICAgIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogICAgICBkb2NzUGF0aDUgPSAiL2RvY3MvY29udHJhY3QvZW5jb2RlRGVwbG95RGF0YSI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY2hhaW4vZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MuanMKICBmdW5jdGlvbiBnZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyh7IGJsb2NrTnVtYmVyLCBjaGFpbiwgY29udHJhY3Q6IG5hbWUgfSkgewogICAgY29uc3QgY29udHJhY3QgPSBjaGFpbj8uY29udHJhY3RzPy5bbmFtZV07CiAgICBpZiAoIWNvbnRyYWN0KQogICAgICB0aHJvdyBuZXcgQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0KHsKICAgICAgICBjaGFpbiwKICAgICAgICBjb250cmFjdDogeyBuYW1lIH0KICAgICAgfSk7CiAgICBpZiAoYmxvY2tOdW1iZXIgJiYgY29udHJhY3QuYmxvY2tDcmVhdGVkICYmIGNvbnRyYWN0LmJsb2NrQ3JlYXRlZCA+IGJsb2NrTnVtYmVyKQogICAgICB0aHJvdyBuZXcgQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0KHsKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBjaGFpbiwKICAgICAgICBjb250cmFjdDogewogICAgICAgICAgbmFtZSwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogY29udHJhY3QuYmxvY2tDcmVhdGVkCiAgICAgICAgfQogICAgICB9KTsKICAgIHJldHVybiBjb250cmFjdC5hZGRyZXNzOwogIH0KICB2YXIgaW5pdF9nZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2NoYWluL2dldENoYWluQ29udHJhY3RBZGRyZXNzLmpzIigpIHsKICAgICAgaW5pdF9jaGFpbigpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vycm9ycy9nZXRDYWxsRXJyb3IuanMKICBmdW5jdGlvbiBnZXRDYWxsRXJyb3IoZXJyLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIC4uLmFyZ3MgfSkgewogICAgY29uc3QgY2F1c2UgPSAoKCkgPT4gewogICAgICBjb25zdCBjYXVzZTIgPSBnZXROb2RlRXJyb3IoZXJyLCBhcmdzKTsKICAgICAgaWYgKGNhdXNlMiBpbnN0YW5jZW9mIFVua25vd25Ob2RlRXJyb3IpCiAgICAgICAgcmV0dXJuIGVycjsKICAgICAgcmV0dXJuIGNhdXNlMjsKICAgIH0pKCk7CiAgICByZXR1cm4gbmV3IENhbGxFeGVjdXRpb25FcnJvcihjYXVzZSwgewogICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAuLi5hcmdzCiAgICB9KTsKICB9CiAgdmFyIGluaXRfZ2V0Q2FsbEVycm9yID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZXJyb3JzL2dldENhbGxFcnJvci5qcyIoKSB7CiAgICAgIGluaXRfY29udHJhY3QoKTsKICAgICAgaW5pdF9ub2RlKCk7CiAgICAgIGluaXRfZ2V0Tm9kZUVycm9yKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcHJvbWlzZS9jcmVhdGVCYXRjaFNjaGVkdWxlci5qcwogIGZ1bmN0aW9uIGNyZWF0ZUJhdGNoU2NoZWR1bGVyKHsgZm4sIGlkLCBzaG91bGRTcGxpdEJhdGNoLCB3YWl0OiB3YWl0MiA9IDAsIHNvcnQgfSkgewogICAgY29uc3QgZXhlYyA9IGFzeW5jICgpID0+IHsKICAgICAgY29uc3Qgc2NoZWR1bGVyID0gZ2V0U2NoZWR1bGVyKCk7CiAgICAgIGZsdXNoKCk7CiAgICAgIGNvbnN0IGFyZ3MgPSBzY2hlZHVsZXIubWFwKCh7IGFyZ3M6IGFyZ3MyIH0pID0+IGFyZ3MyKTsKICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgZm4oYXJncykudGhlbigoZGF0YSkgPT4gewogICAgICAgIGlmIChzb3J0ICYmIEFycmF5LmlzQXJyYXkoZGF0YSkpCiAgICAgICAgICBkYXRhLnNvcnQoc29ydCk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY2hlZHVsZXIubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGNvbnN0IHsgcGVuZGluZ1Byb21pc2UgfSA9IHNjaGVkdWxlcltpXTsKICAgICAgICAgIHBlbmRpbmdQcm9taXNlLnJlc29sdmU/LihbZGF0YVtpXSwgZGF0YV0pOwogICAgICAgIH0KICAgICAgfSkuY2F0Y2goKGVycikgPT4gewogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2NoZWR1bGVyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBjb25zdCB7IHBlbmRpbmdQcm9taXNlIH0gPSBzY2hlZHVsZXJbaV07CiAgICAgICAgICBwZW5kaW5nUHJvbWlzZS5yZWplY3Q/LihlcnIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9OwogICAgY29uc3QgZmx1c2ggPSAoKSA9PiBzY2hlZHVsZXJDYWNoZS5kZWxldGUoaWQpOwogICAgY29uc3QgZ2V0QmF0Y2hlZEFyZ3MgPSAoKSA9PiBnZXRTY2hlZHVsZXIoKS5tYXAoKHsgYXJncyB9KSA9PiBhcmdzKTsKICAgIGNvbnN0IGdldFNjaGVkdWxlciA9ICgpID0+IHNjaGVkdWxlckNhY2hlLmdldChpZCkgfHwgW107CiAgICBjb25zdCBzZXRTY2hlZHVsZXIgPSAoaXRlbSkgPT4gc2NoZWR1bGVyQ2FjaGUuc2V0KGlkLCBbLi4uZ2V0U2NoZWR1bGVyKCksIGl0ZW1dKTsKICAgIHJldHVybiB7CiAgICAgIGZsdXNoLAogICAgICBhc3luYyBzY2hlZHVsZShhcmdzKSB7CiAgICAgICAgY29uc3QgcGVuZGluZ1Byb21pc2UgPSB7fTsKICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgICAgcGVuZGluZ1Byb21pc2UucmVzb2x2ZSA9IHJlc29sdmU7CiAgICAgICAgICBwZW5kaW5nUHJvbWlzZS5yZWplY3QgPSByZWplY3Q7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3Qgc3BsaXQyID0gc2hvdWxkU3BsaXRCYXRjaD8uKFsuLi5nZXRCYXRjaGVkQXJncygpLCBhcmdzXSk7CiAgICAgICAgaWYgKHNwbGl0MikKICAgICAgICAgIGV4ZWMoKTsKICAgICAgICBjb25zdCBoYXNBY3RpdmVTY2hlZHVsZXIgPSBnZXRTY2hlZHVsZXIoKS5sZW5ndGggPiAwOwogICAgICAgIGlmIChoYXNBY3RpdmVTY2hlZHVsZXIpIHsKICAgICAgICAgIHNldFNjaGVkdWxlcih7IGFyZ3MsIHBlbmRpbmdQcm9taXNlIH0pOwogICAgICAgICAgcmV0dXJuIHByb21pc2U7CiAgICAgICAgfQogICAgICAgIHNldFNjaGVkdWxlcih7IGFyZ3MsIHBlbmRpbmdQcm9taXNlIH0pOwogICAgICAgIHNldFRpbWVvdXQoZXhlYywgd2FpdDIpOwogICAgICAgIHJldHVybiBwcm9taXNlOwogICAgICB9CiAgICB9OwogIH0KICB2YXIgc2NoZWR1bGVyQ2FjaGU7CiAgdmFyIGluaXRfY3JlYXRlQmF0Y2hTY2hlZHVsZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9wcm9taXNlL2NyZWF0ZUJhdGNoU2NoZWR1bGVyLmpzIigpIHsKICAgICAgc2NoZWR1bGVyQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9jY2lwLmpzCiAgdmFyIE9mZmNoYWluTG9va3VwRXJyb3IsIE9mZmNoYWluTG9va3VwUmVzcG9uc2VNYWxmb3JtZWRFcnJvciwgT2ZmY2hhaW5Mb29rdXBTZW5kZXJNaXNtYXRjaEVycm9yOwogIHZhciBpbml0X2NjaXAgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvY2NpcC5qcyIoKSB7CiAgICAgIGluaXRfc3RyaW5naWZ5KCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X3V0aWxzMygpOwogICAgICBPZmZjaGFpbkxvb2t1cEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhbGxiYWNrU2VsZWN0b3IsIGNhdXNlLCBkYXRhLCBleHRyYURhdGEsIHNlbmRlciwgdXJscyB9KSB7CiAgICAgICAgICBzdXBlcihjYXVzZS5zaG9ydE1lc3NhZ2UgfHwgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGZldGNoaW5nIGZvciBhbiBvZmZjaGFpbiByZXN1bHQuIiwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgLi4uY2F1c2UubWV0YU1lc3NhZ2VzIHx8IFtdLAogICAgICAgICAgICAgIGNhdXNlLm1ldGFNZXNzYWdlcz8ubGVuZ3RoID8gIiIgOiBbXSwKICAgICAgICAgICAgICAiT2ZmY2hhaW4gR2F0ZXdheSBDYWxsOiIsCiAgICAgICAgICAgICAgdXJscyAmJiBbCiAgICAgICAgICAgICAgICAiICBHYXRld2F5IFVSTChzKToiLAogICAgICAgICAgICAgICAgLi4udXJscy5tYXAoKHVybCkgPT4gYCAgICAke2dldFVybCh1cmwpfWApCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICBgICBTZW5kZXI6ICR7c2VuZGVyfWAsCiAgICAgICAgICAgICAgYCAgRGF0YTogJHtkYXRhfWAsCiAgICAgICAgICAgICAgYCAgQ2FsbGJhY2sgc2VsZWN0b3I6ICR7Y2FsbGJhY2tTZWxlY3Rvcn1gLAogICAgICAgICAgICAgIGAgIEV4dHJhIGRhdGE6ICR7ZXh0cmFEYXRhfWAKICAgICAgICAgICAgXS5mbGF0KCksCiAgICAgICAgICAgIG5hbWU6ICJPZmZjaGFpbkxvb2t1cEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPZmZjaGFpbkxvb2t1cFJlc3BvbnNlTWFsZm9ybWVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgcmVzdWx0LCB1cmwgfSkgewogICAgICAgICAgc3VwZXIoIk9mZmNoYWluIGdhdGV3YXkgcmVzcG9uc2UgaXMgbWFsZm9ybWVkLiBSZXNwb25zZSBkYXRhIG11c3QgYmUgYSBoZXggdmFsdWUuIiwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgR2F0ZXdheSBVUkw6ICR7Z2V0VXJsKHVybCl9YCwKICAgICAgICAgICAgICBgUmVzcG9uc2U6ICR7c3RyaW5naWZ5KHJlc3VsdCl9YAogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiT2ZmY2hhaW5Mb29rdXBSZXNwb25zZU1hbGZvcm1lZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPZmZjaGFpbkxvb2t1cFNlbmRlck1pc21hdGNoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgc2VuZGVyLCB0byB9KSB7CiAgICAgICAgICBzdXBlcigiUmV2ZXJ0ZWQgc2VuZGVyIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggdGFyZ2V0IGNvbnRyYWN0IGFkZHJlc3MgKGB0b2ApLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgYENvbnRyYWN0IGFkZHJlc3M6ICR7dG99YCwKICAgICAgICAgICAgICBgT2ZmY2hhaW5Mb29rdXAgc2VuZGVyIGFkZHJlc3M6ICR7c2VuZGVyfWAKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbmFtZTogIk9mZmNoYWluTG9va3VwU2VuZGVyTWlzbWF0Y2hFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9jY2lwLmpzCiAgdmFyIGNjaXBfZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KGNjaXBfZXhwb3J0cywgewogICAgY2NpcFJlcXVlc3Q6ICgpID0+IGNjaXBSZXF1ZXN0LAogICAgb2ZmY2hhaW5Mb29rdXA6ICgpID0+IG9mZmNoYWluTG9va3VwLAogICAgb2ZmY2hhaW5Mb29rdXBBYmlJdGVtOiAoKSA9PiBvZmZjaGFpbkxvb2t1cEFiaUl0ZW0sCiAgICBvZmZjaGFpbkxvb2t1cFNpZ25hdHVyZTogKCkgPT4gb2ZmY2hhaW5Mb29rdXBTaWduYXR1cmUKICB9KTsKICBhc3luYyBmdW5jdGlvbiBvZmZjaGFpbkxvb2t1cChjbGllbnQsIHsgYmxvY2tOdW1iZXIsIGJsb2NrVGFnLCBkYXRhLCB0byB9KSB7CiAgICBjb25zdCB7IGFyZ3MgfSA9IGRlY29kZUVycm9yUmVzdWx0KHsKICAgICAgZGF0YSwKICAgICAgYWJpOiBbb2ZmY2hhaW5Mb29rdXBBYmlJdGVtXQogICAgfSk7CiAgICBjb25zdCBbc2VuZGVyLCB1cmxzLCBjYWxsRGF0YSwgY2FsbGJhY2tTZWxlY3RvciwgZXh0cmFEYXRhXSA9IGFyZ3M7CiAgICBjb25zdCB7IGNjaXBSZWFkIH0gPSBjbGllbnQ7CiAgICBjb25zdCBjY2lwUmVxdWVzdF8gPSBjY2lwUmVhZCAmJiB0eXBlb2YgY2NpcFJlYWQ/LnJlcXVlc3QgPT09ICJmdW5jdGlvbiIgPyBjY2lwUmVhZC5yZXF1ZXN0IDogY2NpcFJlcXVlc3Q7CiAgICB0cnkgewogICAgICBpZiAoIWlzQWRkcmVzc0VxdWFsKHRvLCBzZW5kZXIpKQogICAgICAgIHRocm93IG5ldyBPZmZjaGFpbkxvb2t1cFNlbmRlck1pc21hdGNoRXJyb3IoeyBzZW5kZXIsIHRvIH0pOwogICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjY2lwUmVxdWVzdF8oeyBkYXRhOiBjYWxsRGF0YSwgc2VuZGVyLCB1cmxzIH0pOwogICAgICBjb25zdCB7IGRhdGE6IGRhdGFfIH0gPSBhd2FpdCBjYWxsKGNsaWVudCwgewogICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgIGJsb2NrVGFnLAogICAgICAgIGRhdGE6IGNvbmNhdChbCiAgICAgICAgICBjYWxsYmFja1NlbGVjdG9yLAogICAgICAgICAgZW5jb2RlQWJpUGFyYW1ldGVycyhbeyB0eXBlOiAiYnl0ZXMiIH0sIHsgdHlwZTogImJ5dGVzIiB9XSwgW3Jlc3VsdCwgZXh0cmFEYXRhXSkKICAgICAgICBdKSwKICAgICAgICB0bwogICAgICB9KTsKICAgICAgcmV0dXJuIGRhdGFfOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIHRocm93IG5ldyBPZmZjaGFpbkxvb2t1cEVycm9yKHsKICAgICAgICBjYWxsYmFja1NlbGVjdG9yLAogICAgICAgIGNhdXNlOiBlcnIsCiAgICAgICAgZGF0YSwKICAgICAgICBleHRyYURhdGEsCiAgICAgICAgc2VuZGVyLAogICAgICAgIHVybHMKICAgICAgfSk7CiAgICB9CiAgfQogIGFzeW5jIGZ1bmN0aW9uIGNjaXBSZXF1ZXN0KHsgZGF0YSwgc2VuZGVyLCB1cmxzIH0pIHsKICAgIGxldCBlcnJvciA9IG5ldyBFcnJvcigiQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZC4iKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCB1cmwgPSB1cmxzW2ldOwogICAgICBjb25zdCBtZXRob2QgPSB1cmwuaW5jbHVkZXMoIntkYXRhfSIpID8gIkdFVCIgOiAiUE9TVCI7CiAgICAgIGNvbnN0IGJvZHkgPSBtZXRob2QgPT09ICJQT1NUIiA/IHsgZGF0YSwgc2VuZGVyIH0gOiB2b2lkIDA7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwucmVwbGFjZSgie3NlbmRlcn0iLCBzZW5kZXIpLnJlcGxhY2UoIntkYXRhfSIsIGRhdGEpLCB7CiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSwKICAgICAgICAgIG1ldGhvZAogICAgICAgIH0pOwogICAgICAgIGxldCByZXN1bHQ7CiAgICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCJDb250ZW50LVR5cGUiKT8uc3RhcnRzV2l0aCgiYXBwbGljYXRpb24vanNvbiIpKSB7CiAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKS5kYXRhOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7CiAgICAgICAgfQogICAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICAgIGVycm9yID0gbmV3IEh0dHBSZXF1ZXN0RXJyb3IoewogICAgICAgICAgICBib2R5LAogICAgICAgICAgICBkZXRhaWxzOiByZXN1bHQ/LmVycm9yID8gc3RyaW5naWZ5KHJlc3VsdC5lcnJvcikgOiByZXNwb25zZS5zdGF0dXNUZXh0LAogICAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLAogICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywKICAgICAgICAgICAgdXJsCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzSGV4KHJlc3VsdCkpIHsKICAgICAgICAgIGVycm9yID0gbmV3IE9mZmNoYWluTG9va3VwUmVzcG9uc2VNYWxmb3JtZWRFcnJvcih7CiAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgdXJsCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBlcnJvciA9IG5ldyBIdHRwUmVxdWVzdEVycm9yKHsKICAgICAgICAgIGJvZHksCiAgICAgICAgICBkZXRhaWxzOiBlcnIubWVzc2FnZSwKICAgICAgICAgIHVybAogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICB0aHJvdyBlcnJvcjsKICB9CiAgdmFyIG9mZmNoYWluTG9va3VwU2lnbmF0dXJlLCBvZmZjaGFpbkxvb2t1cEFiaUl0ZW07CiAgdmFyIGluaXRfY2NpcDIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9jY2lwLmpzIigpIHsKICAgICAgaW5pdF9jYWxsKCk7CiAgICAgIGluaXRfY2NpcCgpOwogICAgICBpbml0X3JlcXVlc3QoKTsKICAgICAgaW5pdF9kZWNvZGVFcnJvclJlc3VsdCgpOwogICAgICBpbml0X2VuY29kZUFiaVBhcmFtZXRlcnMoKTsKICAgICAgaW5pdF9pc0FkZHJlc3NFcXVhbCgpOwogICAgICBpbml0X2NvbmNhdCgpOwogICAgICBpbml0X2lzSGV4KCk7CiAgICAgIGluaXRfc3RyaW5naWZ5KCk7CiAgICAgIG9mZmNoYWluTG9va3VwU2lnbmF0dXJlID0gIjB4NTU2ZjE4MzAiOwogICAgICBvZmZjaGFpbkxvb2t1cEFiaUl0ZW0gPSB7CiAgICAgICAgbmFtZTogIk9mZmNoYWluTG9va3VwIiwKICAgICAgICB0eXBlOiAiZXJyb3IiLAogICAgICAgIGlucHV0czogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAidXJscyIsCiAgICAgICAgICAgIHR5cGU6ICJzdHJpbmdbXSIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJjYWxsRGF0YSIsCiAgICAgICAgICAgIHR5cGU6ICJieXRlcyIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJjYWxsYmFja0Z1bmN0aW9uIiwKICAgICAgICAgICAgdHlwZTogImJ5dGVzNCIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJleHRyYURhdGEiLAogICAgICAgICAgICB0eXBlOiAiYnl0ZXMiCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2NhbGwuanMKICBhc3luYyBmdW5jdGlvbiBjYWxsKGNsaWVudCwgYXJncykgewogICAgY29uc3QgeyBhY2NvdW50OiBhY2NvdW50XyA9IGNsaWVudC5hY2NvdW50LCBiYXRjaCA9IEJvb2xlYW4oY2xpZW50LmJhdGNoPy5tdWx0aWNhbGwpLCBibG9ja051bWJlciwgYmxvY2tUYWcgPSAibGF0ZXN0IiwgYWNjZXNzTGlzdCwgYmxvYnMsIGNvZGUsIGRhdGE6IGRhdGFfLCBmYWN0b3J5LCBmYWN0b3J5RGF0YSwgZ2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyQmxvYkdhcywgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbm9uY2UsIHRvLCB2YWx1ZSwgc3RhdGVPdmVycmlkZSwgLi4ucmVzdCB9ID0gYXJnczsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICBpZiAoY29kZSAmJiAoZmFjdG9yeSB8fCBmYWN0b3J5RGF0YSkpCiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJDYW5ub3QgcHJvdmlkZSBib3RoIGBjb2RlYCAmIGBmYWN0b3J5YC9gZmFjdG9yeURhdGFgIGFzIHBhcmFtZXRlcnMuIik7CiAgICBpZiAoY29kZSAmJiB0bykKICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoIkNhbm5vdCBwcm92aWRlIGJvdGggYGNvZGVgICYgYHRvYCBhcyBwYXJhbWV0ZXJzLiIpOwogICAgY29uc3QgZGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZSA9IGNvZGUgJiYgZGF0YV87CiAgICBjb25zdCBkZXBsb3lsZXNzQ2FsbFZpYUZhY3RvcnkgPSBmYWN0b3J5ICYmIGZhY3RvcnlEYXRhICYmIHRvICYmIGRhdGFfOwogICAgY29uc3QgZGVwbG95bGVzc0NhbGwgPSBkZXBsb3lsZXNzQ2FsbFZpYUJ5dGVjb2RlIHx8IGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeTsKICAgIGNvbnN0IGRhdGEgPSAoKCkgPT4gewogICAgICBpZiAoZGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZSkKICAgICAgICByZXR1cm4gdG9EZXBsb3lsZXNzQ2FsbFZpYUJ5dGVjb2RlRGF0YSh7CiAgICAgICAgICBjb2RlLAogICAgICAgICAgZGF0YTogZGF0YV8KICAgICAgICB9KTsKICAgICAgaWYgKGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeSkKICAgICAgICByZXR1cm4gdG9EZXBsb3lsZXNzQ2FsbFZpYUZhY3RvcnlEYXRhKHsKICAgICAgICAgIGRhdGE6IGRhdGFfLAogICAgICAgICAgZmFjdG9yeSwKICAgICAgICAgIGZhY3RvcnlEYXRhLAogICAgICAgICAgdG8KICAgICAgICB9KTsKICAgICAgcmV0dXJuIGRhdGFfOwogICAgfSkoKTsKICAgIHRyeSB7CiAgICAgIGFzc2VydFJlcXVlc3QoYXJncyk7CiAgICAgIGNvbnN0IGJsb2NrTnVtYmVySGV4ID0gYmxvY2tOdW1iZXIgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWc7CiAgICAgIGNvbnN0IHJwY1N0YXRlT3ZlcnJpZGUgPSBzZXJpYWxpemVTdGF0ZU92ZXJyaWRlKHN0YXRlT3ZlcnJpZGUpOwogICAgICBjb25zdCBjaGFpbkZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb25SZXF1ZXN0Py5mb3JtYXQ7CiAgICAgIGNvbnN0IGZvcm1hdCA9IGNoYWluRm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgICAgY29uc3QgcmVxdWVzdCA9IGZvcm1hdCh7CiAgICAgICAgLy8gUGljayBvdXQgZXh0cmEgZGF0YSB0aGF0IG1pZ2h0IGV4aXN0IG9uIHRoZSBjaGFpbidzIHRyYW5zYWN0aW9uIHJlcXVlc3QgdHlwZS4KICAgICAgICAuLi5leHRyYWN0KHJlc3QsIHsgZm9ybWF0OiBjaGFpbkZvcm1hdCB9KSwKICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgIGFjY2Vzc0xpc3QsCiAgICAgICAgYmxvYnMsCiAgICAgICAgZGF0YSwKICAgICAgICBnYXMsCiAgICAgICAgZ2FzUHJpY2UsCiAgICAgICAgbWF4RmVlUGVyQmxvYkdhcywKICAgICAgICBtYXhGZWVQZXJHYXMsCiAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXMsCiAgICAgICAgbm9uY2UsCiAgICAgICAgdG86IGRlcGxveWxlc3NDYWxsID8gdm9pZCAwIDogdG8sCiAgICAgICAgdmFsdWUKICAgICAgfSk7CiAgICAgIGlmIChiYXRjaCAmJiBzaG91bGRQZXJmb3JtTXVsdGljYWxsKHsgcmVxdWVzdCB9KSAmJiAhcnBjU3RhdGVPdmVycmlkZSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gYXdhaXQgc2NoZWR1bGVNdWx0aWNhbGwoY2xpZW50LCB7CiAgICAgICAgICAgIC4uLnJlcXVlc3QsCiAgICAgICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgICAgICBibG9ja1RhZwogICAgICAgICAgfSk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBDbGllbnRDaGFpbk5vdENvbmZpZ3VyZWRFcnJvcikgJiYgIShlcnIgaW5zdGFuY2VvZiBDaGFpbkRvZXNOb3RTdXBwb3J0Q29udHJhY3QpKQogICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICAgIG1ldGhvZDogImV0aF9jYWxsIiwKICAgICAgICBwYXJhbXM6IHJwY1N0YXRlT3ZlcnJpZGUgPyBbCiAgICAgICAgICByZXF1ZXN0LAogICAgICAgICAgYmxvY2ssCiAgICAgICAgICBycGNTdGF0ZU92ZXJyaWRlCiAgICAgICAgXSA6IFtyZXF1ZXN0LCBibG9ja10KICAgICAgfSk7CiAgICAgIGlmIChyZXNwb25zZSA9PT0gIjB4IikKICAgICAgICByZXR1cm4geyBkYXRhOiB2b2lkIDAgfTsKICAgICAgcmV0dXJuIHsgZGF0YTogcmVzcG9uc2UgfTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zdCBkYXRhMiA9IGdldFJldmVydEVycm9yRGF0YShlcnIpOwogICAgICBjb25zdCB7IG9mZmNoYWluTG9va3VwOiBvZmZjaGFpbkxvb2t1cDIsIG9mZmNoYWluTG9va3VwU2lnbmF0dXJlOiBvZmZjaGFpbkxvb2t1cFNpZ25hdHVyZTIgfSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gKGluaXRfY2NpcDIoKSwgY2NpcF9leHBvcnRzKSk7CiAgICAgIGlmIChjbGllbnQuY2NpcFJlYWQgIT09IGZhbHNlICYmIGRhdGEyPy5zbGljZSgwLCAxMCkgPT09IG9mZmNoYWluTG9va3VwU2lnbmF0dXJlMiAmJiB0bykKICAgICAgICByZXR1cm4geyBkYXRhOiBhd2FpdCBvZmZjaGFpbkxvb2t1cDIoY2xpZW50LCB7IGRhdGE6IGRhdGEyLCB0byB9KSB9OwogICAgICBpZiAoZGVwbG95bGVzc0NhbGwgJiYgZGF0YTI/LnNsaWNlKDAsIDEwKSA9PT0gIjB4MTAxYmI5OGQiKQogICAgICAgIHRocm93IG5ldyBDb3VudGVyZmFjdHVhbERlcGxveW1lbnRGYWlsZWRFcnJvcih7IGZhY3RvcnkgfSk7CiAgICAgIHRocm93IGdldENhbGxFcnJvcihlcnIsIHsKICAgICAgICAuLi5hcmdzLAogICAgICAgIGFjY291bnQsCiAgICAgICAgY2hhaW46IGNsaWVudC5jaGFpbgogICAgICB9KTsKICAgIH0KICB9CiAgZnVuY3Rpb24gc2hvdWxkUGVyZm9ybU11bHRpY2FsbCh7IHJlcXVlc3QgfSkgewogICAgY29uc3QgeyBkYXRhLCB0bywgLi4ucmVxdWVzdF8gfSA9IHJlcXVlc3Q7CiAgICBpZiAoIWRhdGEpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChkYXRhLnN0YXJ0c1dpdGgoYWdncmVnYXRlM1NpZ25hdHVyZSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICghdG8pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChPYmplY3QudmFsdWVzKHJlcXVlc3RfKS5maWx0ZXIoKHgpID0+IHR5cGVvZiB4ICE9PSAidW5kZWZpbmVkIikubGVuZ3RoID4gMCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgfQogIGFzeW5jIGZ1bmN0aW9uIHNjaGVkdWxlTXVsdGljYWxsKGNsaWVudCwgYXJncykgewogICAgY29uc3QgeyBiYXRjaFNpemUgPSAxMDI0LCB3YWl0OiB3YWl0MiA9IDAgfSA9IHR5cGVvZiBjbGllbnQuYmF0Y2g/Lm11bHRpY2FsbCA9PT0gIm9iamVjdCIgPyBjbGllbnQuYmF0Y2gubXVsdGljYWxsIDoge307CiAgICBjb25zdCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZyA9ICJsYXRlc3QiLCBkYXRhLCBtdWx0aWNhbGxBZGRyZXNzOiBtdWx0aWNhbGxBZGRyZXNzXywgdG8gfSA9IGFyZ3M7CiAgICBsZXQgbXVsdGljYWxsQWRkcmVzcyA9IG11bHRpY2FsbEFkZHJlc3NfOwogICAgaWYgKCFtdWx0aWNhbGxBZGRyZXNzKSB7CiAgICAgIGlmICghY2xpZW50LmNoYWluKQogICAgICAgIHRocm93IG5ldyBDbGllbnRDaGFpbk5vdENvbmZpZ3VyZWRFcnJvcigpOwogICAgICBtdWx0aWNhbGxBZGRyZXNzID0gZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoewogICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgIGNoYWluOiBjbGllbnQuY2hhaW4sCiAgICAgICAgY29udHJhY3Q6ICJtdWx0aWNhbGwzIgogICAgICB9KTsKICAgIH0KICAgIGNvbnN0IGJsb2NrTnVtYmVySGV4ID0gYmxvY2tOdW1iZXIgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICBjb25zdCBibG9jayA9IGJsb2NrTnVtYmVySGV4IHx8IGJsb2NrVGFnOwogICAgY29uc3QgeyBzY2hlZHVsZSB9ID0gY3JlYXRlQmF0Y2hTY2hlZHVsZXIoewogICAgICBpZDogYCR7Y2xpZW50LnVpZH0uJHtibG9ja31gLAogICAgICB3YWl0OiB3YWl0MiwKICAgICAgc2hvdWxkU3BsaXRCYXRjaChhcmdzMikgewogICAgICAgIGNvbnN0IHNpemUzID0gYXJnczIucmVkdWNlKChzaXplNCwgeyBkYXRhOiBkYXRhMiB9KSA9PiBzaXplNCArIChkYXRhMi5sZW5ndGggLSAyKSwgMCk7CiAgICAgICAgcmV0dXJuIHNpemUzID4gYmF0Y2hTaXplICogMjsKICAgICAgfSwKICAgICAgZm46IGFzeW5jIChyZXF1ZXN0cykgPT4gewogICAgICAgIGNvbnN0IGNhbGxzID0gcmVxdWVzdHMubWFwKChyZXF1ZXN0KSA9PiAoewogICAgICAgICAgYWxsb3dGYWlsdXJlOiB0cnVlLAogICAgICAgICAgY2FsbERhdGE6IHJlcXVlc3QuZGF0YSwKICAgICAgICAgIHRhcmdldDogcmVxdWVzdC50bwogICAgICAgIH0pKTsKICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7CiAgICAgICAgICBhYmk6IG11bHRpY2FsbDNBYmksCiAgICAgICAgICBhcmdzOiBbY2FsbHNdLAogICAgICAgICAgZnVuY3Rpb25OYW1lOiAiYWdncmVnYXRlMyIKICAgICAgICB9KTsKICAgICAgICBjb25zdCBkYXRhMiA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICAgIG1ldGhvZDogImV0aF9jYWxsIiwKICAgICAgICAgIHBhcmFtczogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZGF0YTogY2FsbGRhdGEsCiAgICAgICAgICAgICAgdG86IG11bHRpY2FsbEFkZHJlc3MKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYmxvY2sKICAgICAgICAgIF0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZGVjb2RlRnVuY3Rpb25SZXN1bHQoewogICAgICAgICAgYWJpOiBtdWx0aWNhbGwzQWJpLAogICAgICAgICAgYXJnczogW2NhbGxzXSwKICAgICAgICAgIGZ1bmN0aW9uTmFtZTogImFnZ3JlZ2F0ZTMiLAogICAgICAgICAgZGF0YTogZGF0YTIgfHwgIjB4IgogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IFt7IHJldHVybkRhdGEsIHN1Y2Nlc3MgfV0gPSBhd2FpdCBzY2hlZHVsZSh7IGRhdGEsIHRvIH0pOwogICAgaWYgKCFzdWNjZXNzKQogICAgICB0aHJvdyBuZXcgUmF3Q29udHJhY3RFcnJvcih7IGRhdGE6IHJldHVybkRhdGEgfSk7CiAgICBpZiAocmV0dXJuRGF0YSA9PT0gIjB4IikKICAgICAgcmV0dXJuIHsgZGF0YTogdm9pZCAwIH07CiAgICByZXR1cm4geyBkYXRhOiByZXR1cm5EYXRhIH07CiAgfQogIGZ1bmN0aW9uIHRvRGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZURhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBjb2RlLCBkYXRhIH0gPSBwYXJhbWV0ZXJzOwogICAgcmV0dXJuIGVuY29kZURlcGxveURhdGEoewogICAgICBhYmk6IHBhcnNlQWJpKFsiY29uc3RydWN0b3IoYnl0ZXMsIGJ5dGVzKSJdKSwKICAgICAgYnl0ZWNvZGU6IGRlcGxveWxlc3NDYWxsVmlhQnl0ZWNvZGVCeXRlY29kZSwKICAgICAgYXJnczogW2NvZGUsIGRhdGFdCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gdG9EZXBsb3lsZXNzQ2FsbFZpYUZhY3RvcnlEYXRhKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgZGF0YSwgZmFjdG9yeSwgZmFjdG9yeURhdGEsIHRvIH0gPSBwYXJhbWV0ZXJzOwogICAgcmV0dXJuIGVuY29kZURlcGxveURhdGEoewogICAgICBhYmk6IHBhcnNlQWJpKFsiY29uc3RydWN0b3IoYWRkcmVzcywgYnl0ZXMsIGFkZHJlc3MsIGJ5dGVzKSJdKSwKICAgICAgYnl0ZWNvZGU6IGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeUJ5dGVjb2RlLAogICAgICBhcmdzOiBbdG8sIGRhdGEsIGZhY3RvcnksIGZhY3RvcnlEYXRhXQogICAgfSk7CiAgfQogIGZ1bmN0aW9uIGdldFJldmVydEVycm9yRGF0YShlcnIpIHsKICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEJhc2VFcnJvcjIpKQogICAgICByZXR1cm4gdm9pZCAwOwogICAgY29uc3QgZXJyb3IgPSBlcnIud2FsaygpOwogICAgcmV0dXJuIHR5cGVvZiBlcnJvcj8uZGF0YSA9PT0gIm9iamVjdCIgPyBlcnJvci5kYXRhPy5kYXRhIDogZXJyb3IuZGF0YTsKICB9CiAgdmFyIGluaXRfY2FsbCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2NhbGwuanMiKCkgewogICAgICBpbml0X2V4cG9ydHMoKTsKICAgICAgaW5pdF9wYXJzZUFjY291bnQoKTsKICAgICAgaW5pdF9hYmlzKCk7CiAgICAgIGluaXRfY29udHJhY3QyKCk7CiAgICAgIGluaXRfY29udHJhY3RzKCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X2NoYWluKCk7CiAgICAgIGluaXRfY29udHJhY3QoKTsKICAgICAgaW5pdF9kZWNvZGVGdW5jdGlvblJlc3VsdCgpOwogICAgICBpbml0X2VuY29kZURlcGxveURhdGEoKTsKICAgICAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICAgICAgaW5pdF9nZXRDaGFpbkNvbnRyYWN0QWRkcmVzcygpOwogICAgICBpbml0X3RvSGV4KCk7CiAgICAgIGluaXRfZ2V0Q2FsbEVycm9yKCk7CiAgICAgIGluaXRfZXh0cmFjdCgpOwogICAgICBpbml0X3RyYW5zYWN0aW9uUmVxdWVzdCgpOwogICAgICBpbml0X2NyZWF0ZUJhdGNoU2NoZWR1bGVyKCk7CiAgICAgIGluaXRfc3RhdGVPdmVycmlkZTIoKTsKICAgICAgaW5pdF9hc3NlcnRSZXF1ZXN0KCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9pc293cy9fZXNtL3V0aWxzLmpzCiAgZnVuY3Rpb24gZ2V0TmF0aXZlV2ViU29ja2V0KCkgewogICAgaWYgKHR5cGVvZiBXZWJTb2NrZXQgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gV2ViU29ja2V0OwogICAgaWYgKHR5cGVvZiBnbG9iYWwuV2ViU29ja2V0ICE9PSAidW5kZWZpbmVkIikKICAgICAgcmV0dXJuIGdsb2JhbC5XZWJTb2NrZXQ7CiAgICBpZiAodHlwZW9mIHdpbmRvdy5XZWJTb2NrZXQgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gd2luZG93LldlYlNvY2tldDsKICAgIGlmICh0eXBlb2Ygc2VsZi5XZWJTb2NrZXQgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gc2VsZi5XZWJTb2NrZXQ7CiAgICB0aHJvdyBuZXcgRXJyb3IoImBXZWJTb2NrZXRgIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudCIpOwogIH0KICB2YXIgaW5pdF91dGlsczUgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2lzb3dzL19lc20vdXRpbHMuanMiKCkgewogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvaXNvd3MvX2VzbS9uYXRpdmUuanMKICB2YXIgbmF0aXZlX2V4cG9ydHMgPSB7fTsKICBfX2V4cG9ydChuYXRpdmVfZXhwb3J0cywgewogICAgV2ViU29ja2V0OiAoKSA9PiBXZWJTb2NrZXQyCiAgfSk7CiAgdmFyIFdlYlNvY2tldDI7CiAgdmFyIGluaXRfbmF0aXZlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9pc293cy9fZXNtL25hdGl2ZS5qcyIoKSB7CiAgICAgIGluaXRfdXRpbHM1KCk7CiAgICAgIFdlYlNvY2tldDIgPSBnZXROYXRpdmVXZWJTb2NrZXQoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9pbmRleC5qcwogIHZhciBlc21fZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KGVzbV9leHBvcnRzLCB7CiAgICBBYmlDb25zdHJ1Y3Rvck5vdEZvdW5kRXJyb3I6ICgpID0+IEFiaUNvbnN0cnVjdG9yTm90Rm91bmRFcnJvciwKICAgIEFiaUNvbnN0cnVjdG9yUGFyYW1zTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yLAogICAgQWJpRGVjb2RpbmdEYXRhU2l6ZUludmFsaWRFcnJvcjogKCkgPT4gQWJpRGVjb2RpbmdEYXRhU2l6ZUludmFsaWRFcnJvciwKICAgIEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yOiAoKSA9PiBBYmlEZWNvZGluZ0RhdGFTaXplVG9vU21hbGxFcnJvciwKICAgIEFiaURlY29kaW5nWmVyb0RhdGFFcnJvcjogKCkgPT4gQWJpRGVjb2RpbmdaZXJvRGF0YUVycm9yLAogICAgQWJpRW5jb2RpbmdBcnJheUxlbmd0aE1pc21hdGNoRXJyb3I6ICgpID0+IEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yLAogICAgQWJpRW5jb2RpbmdCeXRlc1NpemVNaXNtYXRjaEVycm9yOiAoKSA9PiBBYmlFbmNvZGluZ0J5dGVzU2l6ZU1pc21hdGNoRXJyb3IsCiAgICBBYmlFbmNvZGluZ0xlbmd0aE1pc21hdGNoRXJyb3I6ICgpID0+IEFiaUVuY29kaW5nTGVuZ3RoTWlzbWF0Y2hFcnJvciwKICAgIEFiaUVycm9ySW5wdXRzTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yLAogICAgQWJpRXJyb3JOb3RGb3VuZEVycm9yOiAoKSA9PiBBYmlFcnJvck5vdEZvdW5kRXJyb3IsCiAgICBBYmlFcnJvclNpZ25hdHVyZU5vdEZvdW5kRXJyb3I6ICgpID0+IEFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvciwKICAgIEFiaUV2ZW50Tm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRXZlbnROb3RGb3VuZEVycm9yLAogICAgQWJpRXZlbnRTaWduYXR1cmVFbXB0eVRvcGljc0Vycm9yOiAoKSA9PiBBYmlFdmVudFNpZ25hdHVyZUVtcHR5VG9waWNzRXJyb3IsCiAgICBBYmlFdmVudFNpZ25hdHVyZU5vdEZvdW5kRXJyb3I6ICgpID0+IEFiaUV2ZW50U2lnbmF0dXJlTm90Rm91bmRFcnJvciwKICAgIEFiaUZ1bmN0aW9uTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yLAogICAgQWJpRnVuY3Rpb25PdXRwdXRzTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRnVuY3Rpb25PdXRwdXRzTm90Rm91bmRFcnJvciwKICAgIEFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRnVuY3Rpb25TaWduYXR1cmVOb3RGb3VuZEVycm9yLAogICAgQWNjb3VudFN0YXRlQ29uZmxpY3RFcnJvcjogKCkgPT4gQWNjb3VudFN0YXRlQ29uZmxpY3RFcnJvciwKICAgIEJhc2VFcnJvcjogKCkgPT4gQmFzZUVycm9yMiwKICAgIEJhc2VGZWVTY2FsYXJFcnJvcjogKCkgPT4gQmFzZUZlZVNjYWxhckVycm9yLAogICAgQmxvY2tOb3RGb3VuZEVycm9yOiAoKSA9PiBCbG9ja05vdEZvdW5kRXJyb3IsCiAgICBCeXRlc1NpemVNaXNtYXRjaEVycm9yOiAoKSA9PiBCeXRlc1NpemVNaXNtYXRjaEVycm9yLAogICAgQ2FsbEV4ZWN1dGlvbkVycm9yOiAoKSA9PiBDYWxsRXhlY3V0aW9uRXJyb3IsCiAgICBDaGFpbkRpc2Nvbm5lY3RlZEVycm9yOiAoKSA9PiBDaGFpbkRpc2Nvbm5lY3RlZEVycm9yLAogICAgQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0OiAoKSA9PiBDaGFpbkRvZXNOb3RTdXBwb3J0Q29udHJhY3QsCiAgICBDaGFpbk1pc21hdGNoRXJyb3I6ICgpID0+IENoYWluTWlzbWF0Y2hFcnJvciwKICAgIENoYWluTm90Rm91bmRFcnJvcjogKCkgPT4gQ2hhaW5Ob3RGb3VuZEVycm9yLAogICAgQ2lyY3VsYXJSZWZlcmVuY2VFcnJvcjogKCkgPT4gQ2lyY3VsYXJSZWZlcmVuY2VFcnJvciwKICAgIENsaWVudENoYWluTm90Q29uZmlndXJlZEVycm9yOiAoKSA9PiBDbGllbnRDaGFpbk5vdENvbmZpZ3VyZWRFcnJvciwKICAgIENvbnRyYWN0RnVuY3Rpb25FeGVjdXRpb25FcnJvcjogKCkgPT4gQ29udHJhY3RGdW5jdGlvbkV4ZWN1dGlvbkVycm9yLAogICAgQ29udHJhY3RGdW5jdGlvblJldmVydGVkRXJyb3I6ICgpID0+IENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yLAogICAgQ29udHJhY3RGdW5jdGlvblplcm9EYXRhRXJyb3I6ICgpID0+IENvbnRyYWN0RnVuY3Rpb25aZXJvRGF0YUVycm9yLAogICAgQ291bnRlcmZhY3R1YWxEZXBsb3ltZW50RmFpbGVkRXJyb3I6ICgpID0+IENvdW50ZXJmYWN0dWFsRGVwbG95bWVudEZhaWxlZEVycm9yLAogICAgRGVjb2RlTG9nRGF0YU1pc21hdGNoOiAoKSA9PiBEZWNvZGVMb2dEYXRhTWlzbWF0Y2gsCiAgICBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaDogKCkgPT4gRGVjb2RlTG9nVG9waWNzTWlzbWF0Y2gsCiAgICBFSVAxMTkzUHJvdmlkZXJScGNFcnJvcjogKCkgPT4gUHJvdmlkZXJScGNFcnJvcjIsCiAgICBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yOiAoKSA9PiBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yLAogICAgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yOiAoKSA9PiBFbnNBdmF0YXJJbnZhbGlkTmZ0VXJpRXJyb3IsCiAgICBFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yOiAoKSA9PiBFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yLAogICAgRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yOiAoKSA9PiBFbnNBdmF0YXJVcmlSZXNvbHV0aW9uRXJyb3IsCiAgICBFc3RpbWF0ZUdhc0V4ZWN1dGlvbkVycm9yOiAoKSA9PiBFc3RpbWF0ZUdhc0V4ZWN1dGlvbkVycm9yLAogICAgRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvcjogKCkgPT4gRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvciwKICAgIEZlZUNhcFRvb0hpZ2hFcnJvcjogKCkgPT4gRmVlQ2FwVG9vSGlnaEVycm9yLAogICAgRmVlQ2FwVG9vTG93RXJyb3I6ICgpID0+IEZlZUNhcFRvb0xvd0Vycm9yLAogICAgRmVlQ29uZmxpY3RFcnJvcjogKCkgPT4gRmVlQ29uZmxpY3RFcnJvciwKICAgIEZpbHRlclR5cGVOb3RTdXBwb3J0ZWRFcnJvcjogKCkgPT4gRmlsdGVyVHlwZU5vdFN1cHBvcnRlZEVycm9yLAogICAgSHR0cFJlcXVlc3RFcnJvcjogKCkgPT4gSHR0cFJlcXVlc3RFcnJvciwKICAgIEluc3VmZmljaWVudEZ1bmRzRXJyb3I6ICgpID0+IEluc3VmZmljaWVudEZ1bmRzRXJyb3IsCiAgICBJbnRlZ2VyT3V0T2ZSYW5nZUVycm9yOiAoKSA9PiBJbnRlZ2VyT3V0T2ZSYW5nZUVycm9yLAogICAgSW50ZXJuYWxScGNFcnJvcjogKCkgPT4gSW50ZXJuYWxScGNFcnJvciwKICAgIEludHJpbnNpY0dhc1Rvb0hpZ2hFcnJvcjogKCkgPT4gSW50cmluc2ljR2FzVG9vSGlnaEVycm9yLAogICAgSW50cmluc2ljR2FzVG9vTG93RXJyb3I6ICgpID0+IEludHJpbnNpY0dhc1Rvb0xvd0Vycm9yLAogICAgSW52YWxpZEFiaURlY29kaW5nVHlwZUVycm9yOiAoKSA9PiBJbnZhbGlkQWJpRGVjb2RpbmdUeXBlRXJyb3IsCiAgICBJbnZhbGlkQWJpRW5jb2RpbmdUeXBlRXJyb3I6ICgpID0+IEludmFsaWRBYmlFbmNvZGluZ1R5cGVFcnJvciwKICAgIEludmFsaWRBYmlJdGVtRXJyb3I6ICgpID0+IEludmFsaWRBYmlJdGVtRXJyb3IsCiAgICBJbnZhbGlkQWJpUGFyYW1ldGVyRXJyb3I6ICgpID0+IEludmFsaWRBYmlQYXJhbWV0ZXJFcnJvciwKICAgIEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3I6ICgpID0+IEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3IsCiAgICBJbnZhbGlkQWJpVHlwZVBhcmFtZXRlckVycm9yOiAoKSA9PiBJbnZhbGlkQWJpVHlwZVBhcmFtZXRlckVycm9yLAogICAgSW52YWxpZEFkZHJlc3NFcnJvcjogKCkgPT4gSW52YWxpZEFkZHJlc3NFcnJvciwKICAgIEludmFsaWRBcnJheUVycm9yOiAoKSA9PiBJbnZhbGlkQXJyYXlFcnJvciwKICAgIEludmFsaWRCeXRlc0Jvb2xlYW5FcnJvcjogKCkgPT4gSW52YWxpZEJ5dGVzQm9vbGVhbkVycm9yLAogICAgSW52YWxpZENoYWluSWRFcnJvcjogKCkgPT4gSW52YWxpZENoYWluSWRFcnJvciwKICAgIEludmFsaWREZWZpbml0aW9uVHlwZUVycm9yOiAoKSA9PiBJbnZhbGlkRGVmaW5pdGlvblR5cGVFcnJvciwKICAgIEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3I6ICgpID0+IEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3IsCiAgICBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yOiAoKSA9PiBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yLAogICAgSW52YWxpZEhleFZhbHVlRXJyb3I6ICgpID0+IEludmFsaWRIZXhWYWx1ZUVycm9yLAogICAgSW52YWxpZElucHV0UnBjRXJyb3I6ICgpID0+IEludmFsaWRJbnB1dFJwY0Vycm9yLAogICAgSW52YWxpZExlZ2FjeVZFcnJvcjogKCkgPT4gSW52YWxpZExlZ2FjeVZFcnJvciwKICAgIEludmFsaWRNb2RpZmllckVycm9yOiAoKSA9PiBJbnZhbGlkTW9kaWZpZXJFcnJvciwKICAgIEludmFsaWRQYXJhbWV0ZXJFcnJvcjogKCkgPT4gSW52YWxpZFBhcmFtZXRlckVycm9yLAogICAgSW52YWxpZFBhcmFtc1JwY0Vycm9yOiAoKSA9PiBJbnZhbGlkUGFyYW1zUnBjRXJyb3IsCiAgICBJbnZhbGlkUGFyZW50aGVzaXNFcnJvcjogKCkgPT4gSW52YWxpZFBhcmVudGhlc2lzRXJyb3IsCiAgICBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yOiAoKSA9PiBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yLAogICAgSW52YWxpZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uRXJyb3I6ICgpID0+IEludmFsaWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbkVycm9yLAogICAgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yOiAoKSA9PiBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uRXJyb3IsCiAgICBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uVHlwZUVycm9yOiAoKSA9PiBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uVHlwZUVycm9yLAogICAgSW52YWxpZFNpZ25hdHVyZUVycm9yOiAoKSA9PiBJbnZhbGlkU2lnbmF0dXJlRXJyb3IsCiAgICBJbnZhbGlkU3RvcmFnZUtleVNpemVFcnJvcjogKCkgPT4gSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IsCiAgICBJbnZhbGlkU3RydWN0U2lnbmF0dXJlRXJyb3I6ICgpID0+IEludmFsaWRTdHJ1Y3RTaWduYXR1cmVFcnJvciwKICAgIEpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvcjogKCkgPT4gSnNvblJwY1ZlcnNpb25VbnN1cHBvcnRlZEVycm9yLAogICAgTGltaXRFeGNlZWRlZFJwY0Vycm9yOiAoKSA9PiBMaW1pdEV4Y2VlZGVkUnBjRXJyb3IsCiAgICBNYXhGZWVQZXJHYXNUb29Mb3dFcnJvcjogKCkgPT4gTWF4RmVlUGVyR2FzVG9vTG93RXJyb3IsCiAgICBNZXRob2ROb3RGb3VuZFJwY0Vycm9yOiAoKSA9PiBNZXRob2ROb3RGb3VuZFJwY0Vycm9yLAogICAgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3I6ICgpID0+IE1ldGhvZE5vdFN1cHBvcnRlZFJwY0Vycm9yLAogICAgTm9uY2VNYXhWYWx1ZUVycm9yOiAoKSA9PiBOb25jZU1heFZhbHVlRXJyb3IsCiAgICBOb25jZVRvb0hpZ2hFcnJvcjogKCkgPT4gTm9uY2VUb29IaWdoRXJyb3IsCiAgICBOb25jZVRvb0xvd0Vycm9yOiAoKSA9PiBOb25jZVRvb0xvd0Vycm9yLAogICAgUGFyc2VScGNFcnJvcjogKCkgPT4gUGFyc2VScGNFcnJvciwKICAgIFByb3ZpZGVyRGlzY29ubmVjdGVkRXJyb3I6ICgpID0+IFByb3ZpZGVyRGlzY29ubmVjdGVkRXJyb3IsCiAgICBQcm92aWRlclJwY0Vycm9yOiAoKSA9PiBQcm92aWRlclJwY0Vycm9yLAogICAgUmF3Q29udHJhY3RFcnJvcjogKCkgPT4gUmF3Q29udHJhY3RFcnJvciwKICAgIFJlc291cmNlTm90Rm91bmRScGNFcnJvcjogKCkgPT4gUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yLAogICAgUmVzb3VyY2VVbmF2YWlsYWJsZVJwY0Vycm9yOiAoKSA9PiBSZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IsCiAgICBScGNFcnJvcjogKCkgPT4gUnBjRXJyb3IsCiAgICBScGNSZXF1ZXN0RXJyb3I6ICgpID0+IFJwY1JlcXVlc3RFcnJvciwKICAgIFNpemVFeGNlZWRzUGFkZGluZ1NpemVFcnJvcjogKCkgPT4gU2l6ZUV4Y2VlZHNQYWRkaW5nU2l6ZUVycm9yLAogICAgU2l6ZU92ZXJmbG93RXJyb3I6ICgpID0+IFNpemVPdmVyZmxvd0Vycm9yLAogICAgU2xpY2VPZmZzZXRPdXRPZkJvdW5kc0Vycm9yOiAoKSA9PiBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IsCiAgICBTb2NrZXRDbG9zZWRFcnJvcjogKCkgPT4gU29ja2V0Q2xvc2VkRXJyb3IsCiAgICBTb2xpZGl0eVByb3RlY3RlZEtleXdvcmRFcnJvcjogKCkgPT4gU29saWRpdHlQcm90ZWN0ZWRLZXl3b3JkRXJyb3IsCiAgICBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yOiAoKSA9PiBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yLAogICAgU3dpdGNoQ2hhaW5FcnJvcjogKCkgPT4gU3dpdGNoQ2hhaW5FcnJvciwKICAgIFRpbWVvdXRFcnJvcjogKCkgPT4gVGltZW91dEVycm9yLAogICAgVGlwQWJvdmVGZWVDYXBFcnJvcjogKCkgPT4gVGlwQWJvdmVGZWVDYXBFcnJvciwKICAgIFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IsCiAgICBUcmFuc2FjdGlvbk5vdEZvdW5kRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uTm90Rm91bmRFcnJvciwKICAgIFRyYW5zYWN0aW9uUmVjZWlwdE5vdEZvdW5kRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uUmVjZWlwdE5vdEZvdW5kRXJyb3IsCiAgICBUcmFuc2FjdGlvblJlamVjdGVkUnBjRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvciwKICAgIFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yOiAoKSA9PiBUcmFuc2FjdGlvblR5cGVOb3RTdXBwb3J0ZWRFcnJvciwKICAgIFVuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3I6ICgpID0+IFVuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IsCiAgICBVbmtub3duTm9kZUVycm9yOiAoKSA9PiBVbmtub3duTm9kZUVycm9yLAogICAgVW5rbm93blJwY0Vycm9yOiAoKSA9PiBVbmtub3duUnBjRXJyb3IsCiAgICBVbmtub3duU2lnbmF0dXJlRXJyb3I6ICgpID0+IFVua25vd25TaWduYXR1cmVFcnJvciwKICAgIFVua25vd25UeXBlRXJyb3I6ICgpID0+IFVua25vd25UeXBlRXJyb3IsCiAgICBVbnN1cHBvcnRlZFBhY2tlZEFiaVR5cGU6ICgpID0+IFVuc3VwcG9ydGVkUGFja2VkQWJpVHlwZSwKICAgIFVuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvcjogKCkgPT4gVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLAogICAgVXJsUmVxdWlyZWRFcnJvcjogKCkgPT4gVXJsUmVxdWlyZWRFcnJvciwKICAgIFVzZXJSZWplY3RlZFJlcXVlc3RFcnJvcjogKCkgPT4gVXNlclJlamVjdGVkUmVxdWVzdEVycm9yLAogICAgV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvcjogKCkgPT4gV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvciwKICAgIFdlYlNvY2tldFJlcXVlc3RFcnJvcjogKCkgPT4gV2ViU29ja2V0UmVxdWVzdEVycm9yLAogICAgYXNzZXJ0Q3VycmVudENoYWluOiAoKSA9PiBhc3NlcnRDdXJyZW50Q2hhaW4sCiAgICBhc3NlcnRSZXF1ZXN0OiAoKSA9PiBhc3NlcnRSZXF1ZXN0LAogICAgYXNzZXJ0VHJhbnNhY3Rpb25FSVAxNTU5OiAoKSA9PiBhc3NlcnRUcmFuc2FjdGlvbkVJUDE1NTksCiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDI5MzA6ICgpID0+IGFzc2VydFRyYW5zYWN0aW9uRUlQMjkzMCwKICAgIGFzc2VydFRyYW5zYWN0aW9uTGVnYWN5OiAoKSA9PiBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSwKICAgIGJsb2JzVG9Db21taXRtZW50czogKCkgPT4gYmxvYnNUb0NvbW1pdG1lbnRzLAogICAgYmxvYnNUb1Byb29mczogKCkgPT4gYmxvYnNUb1Byb29mcywKICAgIGJvb2xUb0J5dGVzOiAoKSA9PiBib29sVG9CeXRlcywKICAgIGJvb2xUb0hleDogKCkgPT4gYm9vbFRvSGV4LAogICAgYnl0ZXNUb0JpZ0ludDogKCkgPT4gYnl0ZXNUb0JpZ0ludCwKICAgIGJ5dGVzVG9Cb29sOiAoKSA9PiBieXRlc1RvQm9vbCwKICAgIGJ5dGVzVG9IZXg6ICgpID0+IGJ5dGVzVG9IZXgsCiAgICBieXRlc1RvTnVtYmVyOiAoKSA9PiBieXRlc1RvTnVtYmVyLAogICAgYnl0ZXNUb1JscDogKCkgPT4gYnl0ZXNUb1JscCwKICAgIGJ5dGVzVG9TdHJpbmc6ICgpID0+IGJ5dGVzVG9TdHJpbmcsCiAgICBjY2lwRmV0Y2g6ICgpID0+IGNjaXBSZXF1ZXN0LAogICAgY2NpcFJlcXVlc3Q6ICgpID0+IGNjaXBSZXF1ZXN0LAogICAgY2hlY2tzdW1BZGRyZXNzOiAoKSA9PiBjaGVja3N1bUFkZHJlc3MsCiAgICBjb21taXRtZW50VG9WZXJzaW9uZWRIYXNoOiAoKSA9PiBjb21taXRtZW50VG9WZXJzaW9uZWRIYXNoLAogICAgY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlczogKCkgPT4gY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlcywKICAgIGNvbXBhY3RTaWduYXR1cmVUb0hleDogKCkgPT4gc2VyaWFsaXplQ29tcGFjdFNpZ25hdHVyZSwKICAgIGNvbXBhY3RTaWduYXR1cmVUb1NpZ25hdHVyZTogKCkgPT4gY29tcGFjdFNpZ25hdHVyZVRvU2lnbmF0dXJlLAogICAgY29uY2F0OiAoKSA9PiBjb25jYXQsCiAgICBjb25jYXRCeXRlczogKCkgPT4gY29uY2F0Qnl0ZXMyLAogICAgY29uY2F0SGV4OiAoKSA9PiBjb25jYXRIZXgsCiAgICBjcmVhdGVDbGllbnQ6ICgpID0+IGNyZWF0ZUNsaWVudCwKICAgIGNyZWF0ZU5vbmNlTWFuYWdlcjogKCkgPT4gY3JlYXRlTm9uY2VNYW5hZ2VyLAogICAgY3JlYXRlUHVibGljQ2xpZW50OiAoKSA9PiBjcmVhdGVQdWJsaWNDbGllbnQsCiAgICBjcmVhdGVUZXN0Q2xpZW50OiAoKSA9PiBjcmVhdGVUZXN0Q2xpZW50LAogICAgY3JlYXRlVHJhbnNwb3J0OiAoKSA9PiBjcmVhdGVUcmFuc3BvcnQsCiAgICBjcmVhdGVXYWxsZXRDbGllbnQ6ICgpID0+IGNyZWF0ZVdhbGxldENsaWVudCwKICAgIGN1c3RvbTogKCkgPT4gY3VzdG9tLAogICAgZGVjb2RlQWJpUGFyYW1ldGVyczogKCkgPT4gZGVjb2RlQWJpUGFyYW1ldGVycywKICAgIGRlY29kZURlcGxveURhdGE6ICgpID0+IGRlY29kZURlcGxveURhdGEsCiAgICBkZWNvZGVFcnJvclJlc3VsdDogKCkgPT4gZGVjb2RlRXJyb3JSZXN1bHQsCiAgICBkZWNvZGVFdmVudExvZzogKCkgPT4gZGVjb2RlRXZlbnRMb2csCiAgICBkZWNvZGVGdW5jdGlvbkRhdGE6ICgpID0+IGRlY29kZUZ1bmN0aW9uRGF0YSwKICAgIGRlY29kZUZ1bmN0aW9uUmVzdWx0OiAoKSA9PiBkZWNvZGVGdW5jdGlvblJlc3VsdCwKICAgIGRlZmluZUJsb2NrOiAoKSA9PiBkZWZpbmVCbG9jaywKICAgIGRlZmluZUNoYWluOiAoKSA9PiBkZWZpbmVDaGFpbiwKICAgIGRlZmluZUt6ZzogKCkgPT4gZGVmaW5lS3pnLAogICAgZGVmaW5lVHJhbnNhY3Rpb246ICgpID0+IGRlZmluZVRyYW5zYWN0aW9uLAogICAgZGVmaW5lVHJhbnNhY3Rpb25SZWNlaXB0OiAoKSA9PiBkZWZpbmVUcmFuc2FjdGlvblJlY2VpcHQsCiAgICBkZWZpbmVUcmFuc2FjdGlvblJlcXVlc3Q6ICgpID0+IGRlZmluZVRyYW5zYWN0aW9uUmVxdWVzdCwKICAgIGRlcGxveWxlc3NDYWxsVmlhQnl0ZWNvZGVCeXRlY29kZTogKCkgPT4gZGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZUJ5dGVjb2RlLAogICAgZGVwbG95bGVzc0NhbGxWaWFGYWN0b3J5Qnl0ZWNvZGU6ICgpID0+IGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeUJ5dGVjb2RlLAogICAgZG9tYWluU2VwYXJhdG9yOiAoKSA9PiBkb21haW5TZXBhcmF0b3IsCiAgICBlbmNvZGVBYmlQYXJhbWV0ZXJzOiAoKSA9PiBlbmNvZGVBYmlQYXJhbWV0ZXJzLAogICAgZW5jb2RlRGVwbG95RGF0YTogKCkgPT4gZW5jb2RlRGVwbG95RGF0YSwKICAgIGVuY29kZUVycm9yUmVzdWx0OiAoKSA9PiBlbmNvZGVFcnJvclJlc3VsdCwKICAgIGVuY29kZUV2ZW50VG9waWNzOiAoKSA9PiBlbmNvZGVFdmVudFRvcGljcywKICAgIGVuY29kZUZ1bmN0aW9uRGF0YTogKCkgPT4gZW5jb2RlRnVuY3Rpb25EYXRhLAogICAgZW5jb2RlRnVuY3Rpb25SZXN1bHQ6ICgpID0+IGVuY29kZUZ1bmN0aW9uUmVzdWx0LAogICAgZW5jb2RlUGFja2VkOiAoKSA9PiBlbmNvZGVQYWNrZWQsCiAgICBlcmMyMEFiaTogKCkgPT4gZXJjMjBBYmksCiAgICBlcmMyMEFiaV9ieXRlczMyOiAoKSA9PiBlcmMyMEFiaV9ieXRlczMyLAogICAgZXJjNDYyNkFiaTogKCkgPT4gZXJjNDYyNkFiaSwKICAgIGVyYzcyMUFiaTogKCkgPT4gZXJjNzIxQWJpLAogICAgZXRoZXJVbml0czogKCkgPT4gZXRoZXJVbml0cywKICAgIGV4dHJhY3RDaGFpbjogKCkgPT4gZXh0cmFjdENoYWluLAogICAgZmFsbGJhY2s6ICgpID0+IGZhbGxiYWNrLAogICAgZm9ybWF0QmxvY2s6ICgpID0+IGZvcm1hdEJsb2NrLAogICAgZm9ybWF0RXRoZXI6ICgpID0+IGZvcm1hdEV0aGVyLAogICAgZm9ybWF0R3dlaTogKCkgPT4gZm9ybWF0R3dlaSwKICAgIGZvcm1hdExvZzogKCkgPT4gZm9ybWF0TG9nLAogICAgZm9ybWF0VHJhbnNhY3Rpb246ICgpID0+IGZvcm1hdFRyYW5zYWN0aW9uLAogICAgZm9ybWF0VHJhbnNhY3Rpb25SZWNlaXB0OiAoKSA9PiBmb3JtYXRUcmFuc2FjdGlvblJlY2VpcHQsCiAgICBmb3JtYXRUcmFuc2FjdGlvblJlcXVlc3Q6ICgpID0+IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdCwKICAgIGZvcm1hdFVuaXRzOiAoKSA9PiBmb3JtYXRVbml0cywKICAgIGZyb21CbG9iczogKCkgPT4gZnJvbUJsb2JzLAogICAgZnJvbUJ5dGVzOiAoKSA9PiBmcm9tQnl0ZXMsCiAgICBmcm9tSGV4OiAoKSA9PiBmcm9tSGV4LAogICAgZnJvbVJscDogKCkgPT4gZnJvbVJscCwKICAgIGdldEFiaUl0ZW06ICgpID0+IGdldEFiaUl0ZW0sCiAgICBnZXRBZGRyZXNzOiAoKSA9PiBnZXRBZGRyZXNzLAogICAgZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3M6ICgpID0+IGdldENoYWluQ29udHJhY3RBZGRyZXNzLAogICAgZ2V0Q29udHJhY3Q6ICgpID0+IGdldENvbnRyYWN0LAogICAgZ2V0Q29udHJhY3RBZGRyZXNzOiAoKSA9PiBnZXRDb250cmFjdEFkZHJlc3MyLAogICAgZ2V0Q29udHJhY3RFcnJvcjogKCkgPT4gZ2V0Q29udHJhY3RFcnJvciwKICAgIGdldENyZWF0ZTJBZGRyZXNzOiAoKSA9PiBnZXRDcmVhdGUyQWRkcmVzcywKICAgIGdldENyZWF0ZUFkZHJlc3M6ICgpID0+IGdldENyZWF0ZUFkZHJlc3MsCiAgICBnZXRFdmVudFNlbGVjdG9yOiAoKSA9PiB0b0V2ZW50U2VsZWN0b3IsCiAgICBnZXRFdmVudFNpZ25hdHVyZTogKCkgPT4gdG9TaWduYXR1cmUsCiAgICBnZXRGdW5jdGlvblNlbGVjdG9yOiAoKSA9PiB0b0Z1bmN0aW9uU2VsZWN0b3IsCiAgICBnZXRGdW5jdGlvblNpZ25hdHVyZTogKCkgPT4gdG9TaWduYXR1cmUsCiAgICBnZXRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlOiAoKSA9PiBnZXRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlLAogICAgZ2V0VHJhbnNhY3Rpb25UeXBlOiAoKSA9PiBnZXRUcmFuc2FjdGlvblR5cGUsCiAgICBnZXRUeXBlc0ZvckVJUDcxMkRvbWFpbjogKCkgPT4gZ2V0VHlwZXNGb3JFSVA3MTJEb21haW4sCiAgICBnd2VpVW5pdHM6ICgpID0+IGd3ZWlVbml0cywKICAgIGhhc2hEb21haW46ICgpID0+IGhhc2hEb21haW4sCiAgICBoYXNoTWVzc2FnZTogKCkgPT4gaGFzaE1lc3NhZ2UsCiAgICBoYXNoVHlwZWREYXRhOiAoKSA9PiBoYXNoVHlwZWREYXRhLAogICAgaGV4VG9CaWdJbnQ6ICgpID0+IGhleFRvQmlnSW50LAogICAgaGV4VG9Cb29sOiAoKSA9PiBoZXhUb0Jvb2wsCiAgICBoZXhUb0J5dGVzOiAoKSA9PiBoZXhUb0J5dGVzLAogICAgaGV4VG9Db21wYWN0U2lnbmF0dXJlOiAoKSA9PiBwYXJzZUNvbXBhY3RTaWduYXR1cmUsCiAgICBoZXhUb051bWJlcjogKCkgPT4gaGV4VG9OdW1iZXIsCiAgICBoZXhUb1JscDogKCkgPT4gaGV4VG9SbHAsCiAgICBoZXhUb1NpZ25hdHVyZTogKCkgPT4gcGFyc2VTaWduYXR1cmUyLAogICAgaGV4VG9TdHJpbmc6ICgpID0+IGhleFRvU3RyaW5nLAogICAgaHR0cDogKCkgPT4gaHR0cCwKICAgIGlzQWRkcmVzczogKCkgPT4gaXNBZGRyZXNzLAogICAgaXNBZGRyZXNzRXF1YWw6ICgpID0+IGlzQWRkcmVzc0VxdWFsLAogICAgaXNCeXRlczogKCkgPT4gaXNCeXRlczMsCiAgICBpc0VyYzY0OTJTaWduYXR1cmU6ICgpID0+IGlzRXJjNjQ5MlNpZ25hdHVyZSwKICAgIGlzSGFzaDogKCkgPT4gaXNIYXNoLAogICAgaXNIZXg6ICgpID0+IGlzSGV4LAogICAga2VjY2FrMjU2OiAoKSA9PiBrZWNjYWsyNTYsCiAgICBsYWJlbGhhc2g6ICgpID0+IGxhYmVsaGFzaCwKICAgIG1heEludDEwNDogKCkgPT4gbWF4SW50MTA0LAogICAgbWF4SW50MTEyOiAoKSA9PiBtYXhJbnQxMTIsCiAgICBtYXhJbnQxMjA6ICgpID0+IG1heEludDEyMCwKICAgIG1heEludDEyODogKCkgPT4gbWF4SW50MTI4LAogICAgbWF4SW50MTM2OiAoKSA9PiBtYXhJbnQxMzYsCiAgICBtYXhJbnQxNDQ6ICgpID0+IG1heEludDE0NCwKICAgIG1heEludDE1MjogKCkgPT4gbWF4SW50MTUyLAogICAgbWF4SW50MTY6ICgpID0+IG1heEludDE2LAogICAgbWF4SW50MTYwOiAoKSA9PiBtYXhJbnQxNjAsCiAgICBtYXhJbnQxNjg6ICgpID0+IG1heEludDE2OCwKICAgIG1heEludDE3NjogKCkgPT4gbWF4SW50MTc2LAogICAgbWF4SW50MTg0OiAoKSA9PiBtYXhJbnQxODQsCiAgICBtYXhJbnQxOTI6ICgpID0+IG1heEludDE5MiwKICAgIG1heEludDIwMDogKCkgPT4gbWF4SW50MjAwLAogICAgbWF4SW50MjA4OiAoKSA9PiBtYXhJbnQyMDgsCiAgICBtYXhJbnQyMTY6ICgpID0+IG1heEludDIxNiwKICAgIG1heEludDIyNDogKCkgPT4gbWF4SW50MjI0LAogICAgbWF4SW50MjMyOiAoKSA9PiBtYXhJbnQyMzIsCiAgICBtYXhJbnQyNDogKCkgPT4gbWF4SW50MjQsCiAgICBtYXhJbnQyNDA6ICgpID0+IG1heEludDI0MCwKICAgIG1heEludDI0ODogKCkgPT4gbWF4SW50MjQ4LAogICAgbWF4SW50MjU2OiAoKSA9PiBtYXhJbnQyNTYsCiAgICBtYXhJbnQzMjogKCkgPT4gbWF4SW50MzIsCiAgICBtYXhJbnQ0MDogKCkgPT4gbWF4SW50NDAsCiAgICBtYXhJbnQ0ODogKCkgPT4gbWF4SW50NDgsCiAgICBtYXhJbnQ1NjogKCkgPT4gbWF4SW50NTYsCiAgICBtYXhJbnQ2NDogKCkgPT4gbWF4SW50NjQsCiAgICBtYXhJbnQ3MjogKCkgPT4gbWF4SW50NzIsCiAgICBtYXhJbnQ4OiAoKSA9PiBtYXhJbnQ4LAogICAgbWF4SW50ODA6ICgpID0+IG1heEludDgwLAogICAgbWF4SW50ODg6ICgpID0+IG1heEludDg4LAogICAgbWF4SW50OTY6ICgpID0+IG1heEludDk2LAogICAgbWF4VWludDEwNDogKCkgPT4gbWF4VWludDEwNCwKICAgIG1heFVpbnQxMTI6ICgpID0+IG1heFVpbnQxMTIsCiAgICBtYXhVaW50MTIwOiAoKSA9PiBtYXhVaW50MTIwLAogICAgbWF4VWludDEyODogKCkgPT4gbWF4VWludDEyOCwKICAgIG1heFVpbnQxMzY6ICgpID0+IG1heFVpbnQxMzYsCiAgICBtYXhVaW50MTQ0OiAoKSA9PiBtYXhVaW50MTQ0LAogICAgbWF4VWludDE1MjogKCkgPT4gbWF4VWludDE1MiwKICAgIG1heFVpbnQxNjogKCkgPT4gbWF4VWludDE2LAogICAgbWF4VWludDE2MDogKCkgPT4gbWF4VWludDE2MCwKICAgIG1heFVpbnQxNjg6ICgpID0+IG1heFVpbnQxNjgsCiAgICBtYXhVaW50MTc2OiAoKSA9PiBtYXhVaW50MTc2LAogICAgbWF4VWludDE4NDogKCkgPT4gbWF4VWludDE4NCwKICAgIG1heFVpbnQxOTI6ICgpID0+IG1heFVpbnQxOTIsCiAgICBtYXhVaW50MjAwOiAoKSA9PiBtYXhVaW50MjAwLAogICAgbWF4VWludDIwODogKCkgPT4gbWF4VWludDIwOCwKICAgIG1heFVpbnQyMTY6ICgpID0+IG1heFVpbnQyMTYsCiAgICBtYXhVaW50MjI0OiAoKSA9PiBtYXhVaW50MjI0LAogICAgbWF4VWludDIzMjogKCkgPT4gbWF4VWludDIzMiwKICAgIG1heFVpbnQyNDogKCkgPT4gbWF4VWludDI0LAogICAgbWF4VWludDI0MDogKCkgPT4gbWF4VWludDI0MCwKICAgIG1heFVpbnQyNDg6ICgpID0+IG1heFVpbnQyNDgsCiAgICBtYXhVaW50MjU2OiAoKSA9PiBtYXhVaW50MjU2LAogICAgbWF4VWludDMyOiAoKSA9PiBtYXhVaW50MzIsCiAgICBtYXhVaW50NDA6ICgpID0+IG1heFVpbnQ0MCwKICAgIG1heFVpbnQ0ODogKCkgPT4gbWF4VWludDQ4LAogICAgbWF4VWludDU2OiAoKSA9PiBtYXhVaW50NTYsCiAgICBtYXhVaW50NjQ6ICgpID0+IG1heFVpbnQ2NCwKICAgIG1heFVpbnQ3MjogKCkgPT4gbWF4VWludDcyLAogICAgbWF4VWludDg6ICgpID0+IG1heFVpbnQ4LAogICAgbWF4VWludDgwOiAoKSA9PiBtYXhVaW50ODAsCiAgICBtYXhVaW50ODg6ICgpID0+IG1heFVpbnQ4OCwKICAgIG1heFVpbnQ5NjogKCkgPT4gbWF4VWludDk2LAogICAgbWluSW50MTA0OiAoKSA9PiBtaW5JbnQxMDQsCiAgICBtaW5JbnQxMTI6ICgpID0+IG1pbkludDExMiwKICAgIG1pbkludDEyMDogKCkgPT4gbWluSW50MTIwLAogICAgbWluSW50MTI4OiAoKSA9PiBtaW5JbnQxMjgsCiAgICBtaW5JbnQxMzY6ICgpID0+IG1pbkludDEzNiwKICAgIG1pbkludDE0NDogKCkgPT4gbWluSW50MTQ0LAogICAgbWluSW50MTUyOiAoKSA9PiBtaW5JbnQxNTIsCiAgICBtaW5JbnQxNjogKCkgPT4gbWluSW50MTYsCiAgICBtaW5JbnQxNjA6ICgpID0+IG1pbkludDE2MCwKICAgIG1pbkludDE2ODogKCkgPT4gbWluSW50MTY4LAogICAgbWluSW50MTc2OiAoKSA9PiBtaW5JbnQxNzYsCiAgICBtaW5JbnQxODQ6ICgpID0+IG1pbkludDE4NCwKICAgIG1pbkludDE5MjogKCkgPT4gbWluSW50MTkyLAogICAgbWluSW50MjAwOiAoKSA9PiBtaW5JbnQyMDAsCiAgICBtaW5JbnQyMDg6ICgpID0+IG1pbkludDIwOCwKICAgIG1pbkludDIxNjogKCkgPT4gbWluSW50MjE2LAogICAgbWluSW50MjI0OiAoKSA9PiBtaW5JbnQyMjQsCiAgICBtaW5JbnQyMzI6ICgpID0+IG1pbkludDIzMiwKICAgIG1pbkludDI0OiAoKSA9PiBtaW5JbnQyNCwKICAgIG1pbkludDI0MDogKCkgPT4gbWluSW50MjQwLAogICAgbWluSW50MjQ4OiAoKSA9PiBtaW5JbnQyNDgsCiAgICBtaW5JbnQyNTY6ICgpID0+IG1pbkludDI1NiwKICAgIG1pbkludDMyOiAoKSA9PiBtaW5JbnQzMiwKICAgIG1pbkludDQwOiAoKSA9PiBtaW5JbnQ0MCwKICAgIG1pbkludDQ4OiAoKSA9PiBtaW5JbnQ0OCwKICAgIG1pbkludDU2OiAoKSA9PiBtaW5JbnQ1NiwKICAgIG1pbkludDY0OiAoKSA9PiBtaW5JbnQ2NCwKICAgIG1pbkludDcyOiAoKSA9PiBtaW5JbnQ3MiwKICAgIG1pbkludDg6ICgpID0+IG1pbkludDgsCiAgICBtaW5JbnQ4MDogKCkgPT4gbWluSW50ODAsCiAgICBtaW5JbnQ4ODogKCkgPT4gbWluSW50ODgsCiAgICBtaW5JbnQ5NjogKCkgPT4gbWluSW50OTYsCiAgICBtdWx0aWNhbGwzQWJpOiAoKSA9PiBtdWx0aWNhbGwzQWJpLAogICAgbmFtZWhhc2g6ICgpID0+IG5hbWVoYXNoLAogICAgbm9uY2VNYW5hZ2VyOiAoKSA9PiBub25jZU1hbmFnZXIsCiAgICBudW1iZXJUb0J5dGVzOiAoKSA9PiBudW1iZXJUb0J5dGVzLAogICAgbnVtYmVyVG9IZXg6ICgpID0+IG51bWJlclRvSGV4LAogICAgb2ZmY2hhaW5Mb29rdXA6ICgpID0+IG9mZmNoYWluTG9va3VwLAogICAgb2ZmY2hhaW5Mb29rdXBBYmlJdGVtOiAoKSA9PiBvZmZjaGFpbkxvb2t1cEFiaUl0ZW0sCiAgICBvZmZjaGFpbkxvb2t1cFNpZ25hdHVyZTogKCkgPT4gb2ZmY2hhaW5Mb29rdXBTaWduYXR1cmUsCiAgICBwYWQ6ICgpID0+IHBhZCwKICAgIHBhZEJ5dGVzOiAoKSA9PiBwYWRCeXRlcywKICAgIHBhZEhleDogKCkgPT4gcGFkSGV4LAogICAgcGFyc2VBYmk6ICgpID0+IHBhcnNlQWJpLAogICAgcGFyc2VBYmlJdGVtOiAoKSA9PiBwYXJzZUFiaUl0ZW0sCiAgICBwYXJzZUFiaVBhcmFtZXRlcjogKCkgPT4gcGFyc2VBYmlQYXJhbWV0ZXIyLAogICAgcGFyc2VBYmlQYXJhbWV0ZXJzOiAoKSA9PiBwYXJzZUFiaVBhcmFtZXRlcnMsCiAgICBwYXJzZUNvbXBhY3RTaWduYXR1cmU6ICgpID0+IHBhcnNlQ29tcGFjdFNpZ25hdHVyZSwKICAgIHBhcnNlRXJjNjQ5MlNpZ25hdHVyZTogKCkgPT4gcGFyc2VFcmM2NDkyU2lnbmF0dXJlLAogICAgcGFyc2VFdGhlcjogKCkgPT4gcGFyc2VFdGhlciwKICAgIHBhcnNlRXZlbnRMb2dzOiAoKSA9PiBwYXJzZUV2ZW50TG9ncywKICAgIHBhcnNlR3dlaTogKCkgPT4gcGFyc2VHd2VpLAogICAgcGFyc2VTaWduYXR1cmU6ICgpID0+IHBhcnNlU2lnbmF0dXJlMiwKICAgIHBhcnNlVHJhbnNhY3Rpb246ICgpID0+IHBhcnNlVHJhbnNhY3Rpb24sCiAgICBwYXJzZVVuaXRzOiAoKSA9PiBwYXJzZVVuaXRzLAogICAgcHJlcGFyZUVuY29kZUZ1bmN0aW9uRGF0YTogKCkgPT4gcHJlcGFyZUVuY29kZUZ1bmN0aW9uRGF0YSwKICAgIHByZXNpZ25NZXNzYWdlUHJlZml4OiAoKSA9PiBwcmVzaWduTWVzc2FnZVByZWZpeCwKICAgIHB1YmxpY0FjdGlvbnM6ICgpID0+IHB1YmxpY0FjdGlvbnMsCiAgICByZWNvdmVyQWRkcmVzczogKCkgPT4gcmVjb3ZlckFkZHJlc3MsCiAgICByZWNvdmVyTWVzc2FnZUFkZHJlc3M6ICgpID0+IHJlY292ZXJNZXNzYWdlQWRkcmVzcywKICAgIHJlY292ZXJQdWJsaWNLZXk6ICgpID0+IHJlY292ZXJQdWJsaWNLZXksCiAgICByZWNvdmVyVHJhbnNhY3Rpb25BZGRyZXNzOiAoKSA9PiByZWNvdmVyVHJhbnNhY3Rpb25BZGRyZXNzLAogICAgcmVjb3ZlclR5cGVkRGF0YUFkZHJlc3M6ICgpID0+IHJlY292ZXJUeXBlZERhdGFBZGRyZXNzLAogICAgcmlwZW1kMTYwOiAoKSA9PiByaXBlbWQxNjAyLAogICAgcnBjU2NoZW1hOiAoKSA9PiBycGNTY2hlbWEsCiAgICBycGNUcmFuc2FjdGlvblR5cGU6ICgpID0+IHJwY1RyYW5zYWN0aW9uVHlwZSwKICAgIHNlcmlhbGl6ZUFjY2Vzc0xpc3Q6ICgpID0+IHNlcmlhbGl6ZUFjY2Vzc0xpc3QsCiAgICBzZXJpYWxpemVDb21wYWN0U2lnbmF0dXJlOiAoKSA9PiBzZXJpYWxpemVDb21wYWN0U2lnbmF0dXJlLAogICAgc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZTogKCkgPT4gc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZSwKICAgIHNlcmlhbGl6ZVNpZ25hdHVyZTogKCkgPT4gc2VyaWFsaXplU2lnbmF0dXJlLAogICAgc2VyaWFsaXplVHJhbnNhY3Rpb246ICgpID0+IHNlcmlhbGl6ZVRyYW5zYWN0aW9uLAogICAgc2VyaWFsaXplVHlwZWREYXRhOiAoKSA9PiBzZXJpYWxpemVUeXBlZERhdGEsCiAgICBzZXRFcnJvckNvbmZpZzogKCkgPT4gc2V0RXJyb3JDb25maWcsCiAgICBzZXR1cEt6ZzogKCkgPT4gc2V0dXBLemcsCiAgICBzaGEyNTY6ICgpID0+IHNoYTI1NjIsCiAgICBzaWRlY2Fyc1RvVmVyc2lvbmVkSGFzaGVzOiAoKSA9PiBzaWRlY2Fyc1RvVmVyc2lvbmVkSGFzaGVzLAogICAgc2lnbmF0dXJlVG9Db21wYWN0U2lnbmF0dXJlOiAoKSA9PiBzaWduYXR1cmVUb0NvbXBhY3RTaWduYXR1cmUsCiAgICBzaWduYXR1cmVUb0hleDogKCkgPT4gc2VyaWFsaXplU2lnbmF0dXJlLAogICAgc2l6ZTogKCkgPT4gc2l6ZSwKICAgIHNsaWNlOiAoKSA9PiBzbGljZSwKICAgIHNsaWNlQnl0ZXM6ICgpID0+IHNsaWNlQnl0ZXMsCiAgICBzbGljZUhleDogKCkgPT4gc2xpY2VIZXgsCiAgICBzdHJpbmdUb0J5dGVzOiAoKSA9PiBzdHJpbmdUb0J5dGVzLAogICAgc3RyaW5nVG9IZXg6ICgpID0+IHN0cmluZ1RvSGV4LAogICAgc3RyaW5naWZ5OiAoKSA9PiBzdHJpbmdpZnksCiAgICB0ZXN0QWN0aW9uczogKCkgPT4gdGVzdEFjdGlvbnMsCiAgICB0b0Jsb2JTaWRlY2FyczogKCkgPT4gdG9CbG9iU2lkZWNhcnMsCiAgICB0b0Jsb2JzOiAoKSA9PiB0b0Jsb2JzLAogICAgdG9CeXRlczogKCkgPT4gdG9CeXRlcywKICAgIHRvRXZlbnRIYXNoOiAoKSA9PiB0b1NpZ25hdHVyZUhhc2gsCiAgICB0b0V2ZW50U2VsZWN0b3I6ICgpID0+IHRvRXZlbnRTZWxlY3RvciwKICAgIHRvRXZlbnRTaWduYXR1cmU6ICgpID0+IHRvU2lnbmF0dXJlLAogICAgdG9GdW5jdGlvbkhhc2g6ICgpID0+IHRvU2lnbmF0dXJlSGFzaCwKICAgIHRvRnVuY3Rpb25TZWxlY3RvcjogKCkgPT4gdG9GdW5jdGlvblNlbGVjdG9yLAogICAgdG9GdW5jdGlvblNpZ25hdHVyZTogKCkgPT4gdG9TaWduYXR1cmUsCiAgICB0b0hleDogKCkgPT4gdG9IZXgsCiAgICB0b1ByZWZpeGVkTWVzc2FnZTogKCkgPT4gdG9QcmVmaXhlZE1lc3NhZ2UsCiAgICB0b1JscDogKCkgPT4gdG9SbHAsCiAgICB0cmFuc2FjdGlvblR5cGU6ICgpID0+IHRyYW5zYWN0aW9uVHlwZSwKICAgIHRyaW06ICgpID0+IHRyaW0sCiAgICB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JBYmk6ICgpID0+IHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckFiaSwKICAgIHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckJ5dGVDb2RlOiAoKSA9PiB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JCeXRlQ29kZSwKICAgIHZhbGlkYXRlVHlwZWREYXRhOiAoKSA9PiB2YWxpZGF0ZVR5cGVkRGF0YSwKICAgIHZlcmlmeUhhc2g6ICgpID0+IHZlcmlmeUhhc2gsCiAgICB2ZXJpZnlNZXNzYWdlOiAoKSA9PiB2ZXJpZnlNZXNzYWdlLAogICAgdmVyaWZ5VHlwZWREYXRhOiAoKSA9PiB2ZXJpZnlUeXBlZERhdGEsCiAgICB3YWxsZXRBY3Rpb25zOiAoKSA9PiB3YWxsZXRBY3Rpb25zLAogICAgd2ViU29ja2V0OiAoKSA9PiB3ZWJTb2NrZXQsCiAgICB3ZWlVbml0czogKCkgPT4gd2VpVW5pdHMsCiAgICB3aXRoUmV0cnk6ICgpID0+IHdpdGhSZXRyeSwKICAgIHdpdGhUaW1lb3V0OiAoKSA9PiB3aXRoVGltZW91dCwKICAgIHplcm9BZGRyZXNzOiAoKSA9PiB6ZXJvQWRkcmVzcywKICAgIHplcm9IYXNoOiAoKSA9PiB6ZXJvSGFzaAogIH0pOwogIGluaXRfZXhwb3J0cygpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2dldEFjdGlvbi5qcwogIGZ1bmN0aW9uIGdldEFjdGlvbihjbGllbnQsIGFjdGlvbkZuLCBuYW1lKSB7CiAgICBjb25zdCBhY3Rpb25faW1wbGljaXQgPSBjbGllbnRbYWN0aW9uRm4ubmFtZV07CiAgICBpZiAodHlwZW9mIGFjdGlvbl9pbXBsaWNpdCA9PT0gImZ1bmN0aW9uIikKICAgICAgcmV0dXJuIGFjdGlvbl9pbXBsaWNpdDsKICAgIGNvbnN0IGFjdGlvbl9leHBsaWNpdCA9IGNsaWVudFtuYW1lXTsKICAgIGlmICh0eXBlb2YgYWN0aW9uX2V4cGxpY2l0ID09PSAiZnVuY3Rpb24iKQogICAgICByZXR1cm4gYWN0aW9uX2V4cGxpY2l0OwogICAgcmV0dXJuIChwYXJhbXMpID0+IGFjdGlvbkZuKGNsaWVudCwgcGFyYW1zKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2VuY29kZUV2ZW50VG9waWNzLmpzCiAgaW5pdF9hYmkoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvbG9nLmpzCiAgaW5pdF9iYXNlKCk7CiAgdmFyIEZpbHRlclR5cGVOb3RTdXBwb3J0ZWRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih0eXBlKSB7CiAgICAgIHN1cGVyKGBGaWx0ZXIgdHlwZSAiJHt0eXBlfSIgaXMgbm90IHN1cHBvcnRlZC5gLCB7CiAgICAgICAgbmFtZTogIkZpbHRlclR5cGVOb3RTdXBwb3J0ZWRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlRXZlbnRUb3BpY3MuanMKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X2tlY2NhazI1NigpOwogIGluaXRfdG9FdmVudFNlbGVjdG9yKCk7CiAgaW5pdF9lbmNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9mb3JtYXRBYmlJdGVtMigpOwogIGluaXRfZ2V0QWJpSXRlbSgpOwogIHZhciBkb2NzUGF0aCA9ICIvZG9jcy9jb250cmFjdC9lbmNvZGVFdmVudFRvcGljcyI7CiAgZnVuY3Rpb24gZW5jb2RlRXZlbnRUb3BpY3MocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGV2ZW50TmFtZSwgYXJncyB9ID0gcGFyYW1ldGVyczsKICAgIGxldCBhYmlJdGVtID0gYWJpMlswXTsKICAgIGlmIChldmVudE5hbWUpIHsKICAgICAgY29uc3QgaXRlbSA9IGdldEFiaUl0ZW0oeyBhYmk6IGFiaTIsIG5hbWU6IGV2ZW50TmFtZSB9KTsKICAgICAgaWYgKCFpdGVtKQogICAgICAgIHRocm93IG5ldyBBYmlFdmVudE5vdEZvdW5kRXJyb3IoZXZlbnROYW1lLCB7IGRvY3NQYXRoIH0pOwogICAgICBhYmlJdGVtID0gaXRlbTsKICAgIH0KICAgIGlmIChhYmlJdGVtLnR5cGUgIT09ICJldmVudCIpCiAgICAgIHRocm93IG5ldyBBYmlFdmVudE5vdEZvdW5kRXJyb3Iodm9pZCAwLCB7IGRvY3NQYXRoIH0pOwogICAgY29uc3QgZGVmaW5pdGlvbiA9IGZvcm1hdEFiaUl0ZW0yKGFiaUl0ZW0pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdG9FdmVudFNlbGVjdG9yKGRlZmluaXRpb24pOwogICAgbGV0IHRvcGljcyA9IFtdOwogICAgaWYgKGFyZ3MgJiYgImlucHV0cyIgaW4gYWJpSXRlbSkgewogICAgICBjb25zdCBpbmRleGVkSW5wdXRzID0gYWJpSXRlbS5pbnB1dHM/LmZpbHRlcigocGFyYW0pID0+ICJpbmRleGVkIiBpbiBwYXJhbSAmJiBwYXJhbS5pbmRleGVkKTsKICAgICAgY29uc3QgYXJnc18gPSBBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IE9iamVjdC52YWx1ZXMoYXJncykubGVuZ3RoID4gMCA/IGluZGV4ZWRJbnB1dHM/Lm1hcCgoeCkgPT4gYXJnc1t4Lm5hbWVdKSA/PyBbXSA6IFtdOwogICAgICBpZiAoYXJnc18ubGVuZ3RoID4gMCkgewogICAgICAgIHRvcGljcyA9IGluZGV4ZWRJbnB1dHM/Lm1hcCgocGFyYW0sIGkpID0+IHsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3NfW2ldKSkKICAgICAgICAgICAgcmV0dXJuIGFyZ3NfW2ldLm1hcCgoXywgaikgPT4gZW5jb2RlQXJnKHsgcGFyYW0sIHZhbHVlOiBhcmdzX1tpXVtqXSB9KSk7CiAgICAgICAgICByZXR1cm4gYXJnc19baV0gPyBlbmNvZGVBcmcoeyBwYXJhbSwgdmFsdWU6IGFyZ3NfW2ldIH0pIDogbnVsbDsKICAgICAgICB9KSA/PyBbXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIFtzaWduYXR1cmUsIC4uLnRvcGljc107CiAgfQogIGZ1bmN0aW9uIGVuY29kZUFyZyh7IHBhcmFtLCB2YWx1ZSB9KSB7CiAgICBpZiAocGFyYW0udHlwZSA9PT0gInN0cmluZyIgfHwgcGFyYW0udHlwZSA9PT0gImJ5dGVzIikKICAgICAgcmV0dXJuIGtlY2NhazI1Nih0b0J5dGVzKHZhbHVlKSk7CiAgICBpZiAocGFyYW0udHlwZSA9PT0gInR1cGxlIiB8fCBwYXJhbS50eXBlLm1hdGNoKC9eKC4qKVxbKFxkKyk/XF0kLykpCiAgICAgIHRocm93IG5ldyBGaWx0ZXJUeXBlTm90U3VwcG9ydGVkRXJyb3IocGFyYW0udHlwZSk7CiAgICByZXR1cm4gZW5jb2RlQWJpUGFyYW1ldGVycyhbcGFyYW1dLCBbdmFsdWVdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvY3JlYXRlQ29udHJhY3RFdmVudEZpbHRlci5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9maWx0ZXJzL2NyZWF0ZUZpbHRlclJlcXVlc3RTY29wZS5qcwogIGZ1bmN0aW9uIGNyZWF0ZUZpbHRlclJlcXVlc3RTY29wZShjbGllbnQsIHsgbWV0aG9kIH0pIHsKICAgIGNvbnN0IHJlcXVlc3RNYXAgPSB7fTsKICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIpCiAgICAgIGNsaWVudC50cmFuc3BvcnQub25SZXNwb25zZT8uKCh7IG1ldGhvZDogbWV0aG9kXywgcmVzcG9uc2U6IGlkLCBzdGF0dXMsIHRyYW5zcG9ydCB9KSA9PiB7CiAgICAgICAgaWYgKHN0YXR1cyA9PT0gInN1Y2Nlc3MiICYmIG1ldGhvZCA9PT0gbWV0aG9kXykKICAgICAgICAgIHJlcXVlc3RNYXBbaWRdID0gdHJhbnNwb3J0LnJlcXVlc3Q7CiAgICAgIH0pOwogICAgcmV0dXJuIChpZCkgPT4gcmVxdWVzdE1hcFtpZF0gfHwgY2xpZW50LnJlcXVlc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2NyZWF0ZUNvbnRyYWN0RXZlbnRGaWx0ZXIuanMKICBhc3luYyBmdW5jdGlvbiBjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhZGRyZXNzLCBhYmk6IGFiaTIsIGFyZ3MsIGV2ZW50TmFtZSwgZnJvbUJsb2NrLCBzdHJpY3QsIHRvQmxvY2sgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBnZXRSZXF1ZXN0ID0gY3JlYXRlRmlsdGVyUmVxdWVzdFNjb3BlKGNsaWVudCwgewogICAgICBtZXRob2Q6ICJldGhfbmV3RmlsdGVyIgogICAgfSk7CiAgICBjb25zdCB0b3BpY3MgPSBldmVudE5hbWUgPyBlbmNvZGVFdmVudFRvcGljcyh7CiAgICAgIGFiaTogYWJpMiwKICAgICAgYXJncywKICAgICAgZXZlbnROYW1lCiAgICB9KSA6IHZvaWQgMDsKICAgIGNvbnN0IGlkID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfbmV3RmlsdGVyIiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgewogICAgICAgICAgYWRkcmVzcywKICAgICAgICAgIGZyb21CbG9jazogdHlwZW9mIGZyb21CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleChmcm9tQmxvY2spIDogZnJvbUJsb2NrLAogICAgICAgICAgdG9CbG9jazogdHlwZW9mIHRvQmxvY2sgPT09ICJiaWdpbnQiID8gbnVtYmVyVG9IZXgodG9CbG9jaykgOiB0b0Jsb2NrLAogICAgICAgICAgdG9waWNzCiAgICAgICAgfQogICAgICBdCiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIGFiaTogYWJpMiwKICAgICAgYXJncywKICAgICAgZXZlbnROYW1lLAogICAgICBpZCwKICAgICAgcmVxdWVzdDogZ2V0UmVxdWVzdChpZCksCiAgICAgIHN0cmljdDogQm9vbGVhbihzdHJpY3QpLAogICAgICB0eXBlOiAiZXZlbnQiCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9lc3RpbWF0ZUNvbnRyYWN0R2FzLmpzCiAgaW5pdF9wYXJzZUFjY291bnQoKTsKICBpbml0X2VuY29kZUZ1bmN0aW9uRGF0YSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vycm9ycy9nZXRDb250cmFjdEVycm9yLmpzCiAgaW5pdF9hYmkoKTsKICBpbml0X2Jhc2UoKTsKICBpbml0X2NvbnRyYWN0KCk7CiAgaW5pdF9ycGMoKTsKICB2YXIgRVhFQ1VUSU9OX1JFVkVSVEVEX0VSUk9SX0NPREUgPSAzOwogIGZ1bmN0aW9uIGdldENvbnRyYWN0RXJyb3IoZXJyLCB7IGFiaTogYWJpMiwgYWRkcmVzcywgYXJncywgZG9jc1BhdGg6IGRvY3NQYXRoOSwgZnVuY3Rpb25OYW1lLCBzZW5kZXIgfSkgewogICAgY29uc3QgeyBjb2RlLCBkYXRhLCBtZXNzYWdlLCBzaG9ydE1lc3NhZ2UgfSA9IGVyciBpbnN0YW5jZW9mIFJhd0NvbnRyYWN0RXJyb3IgPyBlcnIgOiBlcnIgaW5zdGFuY2VvZiBCYXNlRXJyb3IyID8gZXJyLndhbGsoKGVycjIpID0+ICJkYXRhIiBpbiBlcnIyKSB8fCBlcnIud2FsaygpIDoge307CiAgICBjb25zdCBjYXVzZSA9ICgoKSA9PiB7CiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IpCiAgICAgICAgcmV0dXJuIG5ldyBDb250cmFjdEZ1bmN0aW9uWmVyb0RhdGFFcnJvcih7IGZ1bmN0aW9uTmFtZSB9KTsKICAgICAgaWYgKFtFWEVDVVRJT05fUkVWRVJURURfRVJST1JfQ09ERSwgSW50ZXJuYWxScGNFcnJvci5jb2RlXS5pbmNsdWRlcyhjb2RlKSAmJiAoZGF0YSB8fCBtZXNzYWdlIHx8IHNob3J0TWVzc2FnZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yKHsKICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgIGRhdGE6IHR5cGVvZiBkYXRhID09PSAib2JqZWN0IiA/IGRhdGEuZGF0YSA6IGRhdGEsCiAgICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgICBtZXNzYWdlOiBzaG9ydE1lc3NhZ2UgPz8gbWVzc2FnZQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBlcnI7CiAgICB9KSgpOwogICAgcmV0dXJuIG5ldyBDb250cmFjdEZ1bmN0aW9uRXhlY3V0aW9uRXJyb3IoY2F1c2UsIHsKICAgICAgYWJpOiBhYmkyLAogICAgICBhcmdzLAogICAgICBjb250cmFjdEFkZHJlc3M6IGFkZHJlc3MsCiAgICAgIGRvY3NQYXRoOiBkb2NzUGF0aDksCiAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgc2VuZGVyCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVHYXMuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGluaXRfYmFzZSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjY291bnRzL3V0aWxzL3B1YmxpY0tleVRvQWRkcmVzcy5qcwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfa2VjY2FrMjU2KCk7CiAgZnVuY3Rpb24gcHVibGljS2V5VG9BZGRyZXNzKHB1YmxpY0tleSkgewogICAgY29uc3QgYWRkcmVzcyA9IGtlY2NhazI1NihgMHgke3B1YmxpY0tleS5zdWJzdHJpbmcoNCl9YCkuc3Vic3RyaW5nKDI2KTsKICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3MoYDB4JHthZGRyZXNzfWApOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcmVjb3ZlclB1YmxpY0tleS5qcwogIGluaXRfaXNIZXgoKTsKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gcmVjb3ZlclB1YmxpY0tleSh7IGhhc2g6IGhhc2gzLCBzaWduYXR1cmUgfSkgewogICAgY29uc3QgaGFzaEhleCA9IGlzSGV4KGhhc2gzKSA/IGhhc2gzIDogdG9IZXgoaGFzaDMpOwogICAgY29uc3QgeyBzZWNwMjU2azE6IHNlY3AyNTZrMTIgfSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gKGluaXRfc2VjcDI1NmsxKCksIHNlY3AyNTZrMV9leHBvcnRzKSk7CiAgICBjb25zdCBzaWduYXR1cmVfID0gKCgpID0+IHsKICAgICAgaWYgKHR5cGVvZiBzaWduYXR1cmUgPT09ICJvYmplY3QiICYmICJyIiBpbiBzaWduYXR1cmUgJiYgInMiIGluIHNpZ25hdHVyZSkgewogICAgICAgIGNvbnN0IHsgciwgcywgdiwgeVBhcml0eSB9ID0gc2lnbmF0dXJlOwogICAgICAgIGNvbnN0IHlQYXJpdHlPclYyID0gTnVtYmVyKHlQYXJpdHkgPz8gdik7CiAgICAgICAgY29uc3QgcmVjb3ZlcnlCaXQyID0gdG9SZWNvdmVyeUJpdCh5UGFyaXR5T3JWMik7CiAgICAgICAgcmV0dXJuIG5ldyBzZWNwMjU2azEyLlNpZ25hdHVyZShoZXhUb0JpZ0ludChyKSwgaGV4VG9CaWdJbnQocykpLmFkZFJlY292ZXJ5Qml0KHJlY292ZXJ5Qml0Mik7CiAgICAgIH0KICAgICAgY29uc3Qgc2lnbmF0dXJlSGV4ID0gaXNIZXgoc2lnbmF0dXJlKSA/IHNpZ25hdHVyZSA6IHRvSGV4KHNpZ25hdHVyZSk7CiAgICAgIGNvbnN0IHlQYXJpdHlPclYgPSBoZXhUb051bWJlcihgMHgke3NpZ25hdHVyZUhleC5zbGljZSgxMzApfWApOwogICAgICBjb25zdCByZWNvdmVyeUJpdCA9IHRvUmVjb3ZlcnlCaXQoeVBhcml0eU9yVik7CiAgICAgIHJldHVybiBzZWNwMjU2azEyLlNpZ25hdHVyZS5mcm9tQ29tcGFjdChzaWduYXR1cmVIZXguc3Vic3RyaW5nKDIsIDEzMCkpLmFkZFJlY292ZXJ5Qml0KHJlY292ZXJ5Qml0KTsKICAgIH0pKCk7CiAgICBjb25zdCBwdWJsaWNLZXkgPSBzaWduYXR1cmVfLnJlY292ZXJQdWJsaWNLZXkoaGFzaEhleC5zdWJzdHJpbmcoMikpLnRvSGV4KGZhbHNlKTsKICAgIHJldHVybiBgMHgke3B1YmxpY0tleX1gOwogIH0KICBmdW5jdGlvbiB0b1JlY292ZXJ5Qml0KHlQYXJpdHlPclYpIHsKICAgIGlmICh5UGFyaXR5T3JWID09PSAwIHx8IHlQYXJpdHlPclYgPT09IDEpCiAgICAgIHJldHVybiB5UGFyaXR5T3JWOwogICAgaWYgKHlQYXJpdHlPclYgPT09IDI3KQogICAgICByZXR1cm4gMDsKICAgIGlmICh5UGFyaXR5T3JWID09PSAyOCkKICAgICAgcmV0dXJuIDE7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeVBhcml0eU9yViB2YWx1ZSIpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcmVjb3ZlckFkZHJlc3MuanMKICBhc3luYyBmdW5jdGlvbiByZWNvdmVyQWRkcmVzcyh7IGhhc2g6IGhhc2gzLCBzaWduYXR1cmUgfSkgewogICAgcmV0dXJuIHB1YmxpY0tleVRvQWRkcmVzcyhhd2FpdCByZWNvdmVyUHVibGljS2V5KHsgaGFzaDogaGFzaDMsIHNpZ25hdHVyZSB9KSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2V4cGVyaW1lbnRhbC9laXA3NzAyL3V0aWxzL2hhc2hBdXRob3JpemF0aW9uLmpzCiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5jb2RpbmcvdG9SbHAuanMKICBpbml0X2Jhc2UoKTsKICBpbml0X2N1cnNvcjIoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gdG9SbHAoYnl0ZXMyLCB0byA9ICJoZXgiKSB7CiAgICBjb25zdCBlbmNvZGFibGUgPSBnZXRFbmNvZGFibGUoYnl0ZXMyKTsKICAgIGNvbnN0IGN1cnNvciA9IGNyZWF0ZUN1cnNvcihuZXcgVWludDhBcnJheShlbmNvZGFibGUubGVuZ3RoKSk7CiAgICBlbmNvZGFibGUuZW5jb2RlKGN1cnNvcik7CiAgICBpZiAodG8gPT09ICJoZXgiKQogICAgICByZXR1cm4gYnl0ZXNUb0hleChjdXJzb3IuYnl0ZXMpOwogICAgcmV0dXJuIGN1cnNvci5ieXRlczsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb1JscChieXRlczIsIHRvID0gImJ5dGVzIikgewogICAgcmV0dXJuIHRvUmxwKGJ5dGVzMiwgdG8pOwogIH0KICBmdW5jdGlvbiBoZXhUb1JscChoZXgsIHRvID0gImhleCIpIHsKICAgIHJldHVybiB0b1JscChoZXgsIHRvKTsKICB9CiAgZnVuY3Rpb24gZ2V0RW5jb2RhYmxlKGJ5dGVzMikgewogICAgaWYgKEFycmF5LmlzQXJyYXkoYnl0ZXMyKSkKICAgICAgcmV0dXJuIGdldEVuY29kYWJsZUxpc3QoYnl0ZXMyLm1hcCgoeCkgPT4gZ2V0RW5jb2RhYmxlKHgpKSk7CiAgICByZXR1cm4gZ2V0RW5jb2RhYmxlQnl0ZXMoYnl0ZXMyKTsKICB9CiAgZnVuY3Rpb24gZ2V0RW5jb2RhYmxlTGlzdChsaXN0KSB7CiAgICBjb25zdCBib2R5TGVuZ3RoID0gbGlzdC5yZWR1Y2UoKGFjYywgeCkgPT4gYWNjICsgeC5sZW5ndGgsIDApOwogICAgY29uc3Qgc2l6ZU9mQm9keUxlbmd0aCA9IGdldFNpemVPZkxlbmd0aChib2R5TGVuZ3RoKTsKICAgIGNvbnN0IGxlbmd0aCA9ICgoKSA9PiB7CiAgICAgIGlmIChib2R5TGVuZ3RoIDw9IDU1KQogICAgICAgIHJldHVybiAxICsgYm9keUxlbmd0aDsKICAgICAgcmV0dXJuIDEgKyBzaXplT2ZCb2R5TGVuZ3RoICsgYm9keUxlbmd0aDsKICAgIH0pKCk7CiAgICByZXR1cm4gewogICAgICBsZW5ndGgsCiAgICAgIGVuY29kZShjdXJzb3IpIHsKICAgICAgICBpZiAoYm9keUxlbmd0aCA8PSA1NSkgewogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlKDE5MiArIGJvZHlMZW5ndGgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJzb3IucHVzaEJ5dGUoMTkyICsgNTUgKyBzaXplT2ZCb2R5TGVuZ3RoKTsKICAgICAgICAgIGlmIChzaXplT2ZCb2R5TGVuZ3RoID09PSAxKQogICAgICAgICAgICBjdXJzb3IucHVzaFVpbnQ4KGJvZHlMZW5ndGgpOwogICAgICAgICAgZWxzZSBpZiAoc2l6ZU9mQm9keUxlbmd0aCA9PT0gMikKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MTYoYm9keUxlbmd0aCk7CiAgICAgICAgICBlbHNlIGlmIChzaXplT2ZCb2R5TGVuZ3RoID09PSAzKQogICAgICAgICAgICBjdXJzb3IucHVzaFVpbnQyNChib2R5TGVuZ3RoKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MzIoYm9keUxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGZvciAoY29uc3QgeyBlbmNvZGU6IGVuY29kZTIgfSBvZiBsaXN0KSB7CiAgICAgICAgICBlbmNvZGUyKGN1cnNvcik7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KICBmdW5jdGlvbiBnZXRFbmNvZGFibGVCeXRlcyhieXRlc09ySGV4KSB7CiAgICBjb25zdCBieXRlczIgPSB0eXBlb2YgYnl0ZXNPckhleCA9PT0gInN0cmluZyIgPyBoZXhUb0J5dGVzKGJ5dGVzT3JIZXgpIDogYnl0ZXNPckhleDsKICAgIGNvbnN0IHNpemVPZkJ5dGVzTGVuZ3RoID0gZ2V0U2l6ZU9mTGVuZ3RoKGJ5dGVzMi5sZW5ndGgpOwogICAgY29uc3QgbGVuZ3RoID0gKCgpID0+IHsKICAgICAgaWYgKGJ5dGVzMi5sZW5ndGggPT09IDEgJiYgYnl0ZXMyWzBdIDwgMTI4KQogICAgICAgIHJldHVybiAxOwogICAgICBpZiAoYnl0ZXMyLmxlbmd0aCA8PSA1NSkKICAgICAgICByZXR1cm4gMSArIGJ5dGVzMi5sZW5ndGg7CiAgICAgIHJldHVybiAxICsgc2l6ZU9mQnl0ZXNMZW5ndGggKyBieXRlczIubGVuZ3RoOwogICAgfSkoKTsKICAgIHJldHVybiB7CiAgICAgIGxlbmd0aCwKICAgICAgZW5jb2RlKGN1cnNvcikgewogICAgICAgIGlmIChieXRlczIubGVuZ3RoID09PSAxICYmIGJ5dGVzMlswXSA8IDEyOCkgewogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIH0gZWxzZSBpZiAoYnl0ZXMyLmxlbmd0aCA8PSA1NSkgewogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlKDEyOCArIGJ5dGVzMi5sZW5ndGgpOwogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJzb3IucHVzaEJ5dGUoMTI4ICsgNTUgKyBzaXplT2ZCeXRlc0xlbmd0aCk7CiAgICAgICAgICBpZiAoc2l6ZU9mQnl0ZXNMZW5ndGggPT09IDEpCiAgICAgICAgICAgIGN1cnNvci5wdXNoVWludDgoYnl0ZXMyLmxlbmd0aCk7CiAgICAgICAgICBlbHNlIGlmIChzaXplT2ZCeXRlc0xlbmd0aCA9PT0gMikKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MTYoYnl0ZXMyLmxlbmd0aCk7CiAgICAgICAgICBlbHNlIGlmIChzaXplT2ZCeXRlc0xlbmd0aCA9PT0gMykKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MjQoYnl0ZXMyLmxlbmd0aCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGN1cnNvci5wdXNoVWludDMyKGJ5dGVzMi5sZW5ndGgpOwogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9CiAgZnVuY3Rpb24gZ2V0U2l6ZU9mTGVuZ3RoKGxlbmd0aCkgewogICAgaWYgKGxlbmd0aCA8IDIgKiogOCkKICAgICAgcmV0dXJuIDE7CiAgICBpZiAobGVuZ3RoIDwgMiAqKiAxNikKICAgICAgcmV0dXJuIDI7CiAgICBpZiAobGVuZ3RoIDwgMiAqKiAyNCkKICAgICAgcmV0dXJuIDM7CiAgICBpZiAobGVuZ3RoIDwgMiAqKiAzMikKICAgICAgcmV0dXJuIDQ7CiAgICB0aHJvdyBuZXcgQmFzZUVycm9yMigiTGVuZ3RoIGlzIHRvbyBsYXJnZS4iKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXhwZXJpbWVudGFsL2VpcDc3MDIvdXRpbHMvaGFzaEF1dGhvcml6YXRpb24uanMKICBpbml0X2tlY2NhazI1NigpOwogIGZ1bmN0aW9uIGhhc2hBdXRob3JpemF0aW9uKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgY2hhaW5JZCwgY29udHJhY3RBZGRyZXNzLCBub25jZSwgdG8gfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBoYXNoMyA9IGtlY2NhazI1Nihjb25jYXRIZXgoWwogICAgICAiMHgwNSIsCiAgICAgIHRvUmxwKFtudW1iZXJUb0hleChjaGFpbklkKSwgY29udHJhY3RBZGRyZXNzLCBudW1iZXJUb0hleChub25jZSldKQogICAgXSkpOwogICAgaWYgKHRvID09PSAiYnl0ZXMiKQogICAgICByZXR1cm4gaGV4VG9CeXRlcyhoYXNoMyk7CiAgICByZXR1cm4gaGFzaDM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2V4cGVyaW1lbnRhbC9laXA3NzAyL3V0aWxzL3JlY292ZXJBdXRob3JpemF0aW9uQWRkcmVzcy5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJBdXRob3JpemF0aW9uQWRkcmVzcyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGF1dGhvcml6YXRpb24sIHNpZ25hdHVyZSB9ID0gcGFyYW1ldGVyczsKICAgIHJldHVybiByZWNvdmVyQWRkcmVzcyh7CiAgICAgIGhhc2g6IGhhc2hBdXRob3JpemF0aW9uKGF1dGhvcml6YXRpb24pLAogICAgICBzaWduYXR1cmU6IHNpZ25hdHVyZSA/PyBhdXRob3JpemF0aW9uCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVHYXMuanMKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2VzdGltYXRlR2FzLmpzCiAgaW5pdF9mb3JtYXRFdGhlcigpOwogIGluaXRfZm9ybWF0R3dlaSgpOwogIGluaXRfYmFzZSgpOwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICB2YXIgRXN0aW1hdGVHYXNFeGVjdXRpb25FcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBhY2NvdW50LCBkb2NzUGF0aDogZG9jc1BhdGg5LCBjaGFpbiwgZGF0YSwgZ2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbm9uY2UsIHRvLCB2YWx1ZSB9KSB7CiAgICAgIGNvbnN0IHByZXR0eUFyZ3MgPSBwcmV0dHlQcmludCh7CiAgICAgICAgZnJvbTogYWNjb3VudD8uYWRkcmVzcywKICAgICAgICB0bywKICAgICAgICB2YWx1ZTogdHlwZW9mIHZhbHVlICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRFdGhlcih2YWx1ZSl9ICR7Y2hhaW4/Lm5hdGl2ZUN1cnJlbmN5Py5zeW1ib2wgfHwgIkVUSCJ9YCwKICAgICAgICBkYXRhLAogICAgICAgIGdhcywKICAgICAgICBnYXNQcmljZTogdHlwZW9mIGdhc1ByaWNlICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKGdhc1ByaWNlKX0gZ3dlaWAsCiAgICAgICAgbWF4RmVlUGVyR2FzOiB0eXBlb2YgbWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9IGd3ZWlgLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiB0eXBlb2YgbWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkobWF4UHJpb3JpdHlGZWVQZXJHYXMpfSBnd2VpYCwKICAgICAgICBub25jZQogICAgICB9KTsKICAgICAgc3VwZXIoY2F1c2Uuc2hvcnRNZXNzYWdlLCB7CiAgICAgICAgY2F1c2UsCiAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgIC4uLmNhdXNlLm1ldGFNZXNzYWdlcyA/IFsuLi5jYXVzZS5tZXRhTWVzc2FnZXMsICIgIl0gOiBbXSwKICAgICAgICAgICJFc3RpbWF0ZSBHYXMgQXJndW1lbnRzOiIsCiAgICAgICAgICBwcmV0dHlBcmdzCiAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgbmFtZTogIkVzdGltYXRlR2FzRXhlY3V0aW9uRXJyb3IiCiAgICAgIH0pOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNhdXNlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgfSk7CiAgICAgIHRoaXMuY2F1c2UgPSBjYXVzZTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vycm9ycy9nZXRFc3RpbWF0ZUdhc0Vycm9yLmpzCiAgaW5pdF9ub2RlKCk7CiAgaW5pdF9nZXROb2RlRXJyb3IoKTsKICBmdW5jdGlvbiBnZXRFc3RpbWF0ZUdhc0Vycm9yKGVyciwgeyBkb2NzUGF0aDogZG9jc1BhdGg5LCAuLi5hcmdzIH0pIHsKICAgIGNvbnN0IGNhdXNlID0gKCgpID0+IHsKICAgICAgY29uc3QgY2F1c2UyID0gZ2V0Tm9kZUVycm9yKGVyciwgYXJncyk7CiAgICAgIGlmIChjYXVzZTIgaW5zdGFuY2VvZiBVbmtub3duTm9kZUVycm9yKQogICAgICAgIHJldHVybiBlcnI7CiAgICAgIHJldHVybiBjYXVzZTI7CiAgICB9KSgpOwogICAgcmV0dXJuIG5ldyBFc3RpbWF0ZUdhc0V4ZWN1dGlvbkVycm9yKGNhdXNlLCB7CiAgICAgIGRvY3NQYXRoOiBkb2NzUGF0aDksCiAgICAgIC4uLmFyZ3MKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9lc3RpbWF0ZUdhcy5qcwogIGluaXRfZXh0cmFjdCgpOwogIGluaXRfdHJhbnNhY3Rpb25SZXF1ZXN0KCk7CiAgaW5pdF9zdGF0ZU92ZXJyaWRlMigpOwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3ByZXBhcmVUcmFuc2FjdGlvblJlcXVlc3QuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9mZWUuanMKICBpbml0X2Zvcm1hdEd3ZWkoKTsKICBpbml0X2Jhc2UoKTsKICB2YXIgQmFzZUZlZVNjYWxhckVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiYGJhc2VGZWVNdWx0aXBsaWVyYCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxLiIsIHsKICAgICAgICBuYW1lOiAiQmFzZUZlZVNjYWxhckVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwogIHZhciBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiQ2hhaW4gZG9lcyBub3Qgc3VwcG9ydCBFSVAtMTU1OSBmZWVzLiIsIHsKICAgICAgICBuYW1lOiAiRWlwMTU1OUZlZXNOb3RTdXBwb3J0ZWRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKICB2YXIgTWF4RmVlUGVyR2FzVG9vTG93RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyBtYXhQcmlvcml0eUZlZVBlckdhcyB9KSB7CiAgICAgIHN1cGVyKGBcYG1heEZlZVBlckdhc1xgIGNhbm5vdCBiZSBsZXNzIHRoYW4gdGhlIFxgbWF4UHJpb3JpdHlGZWVQZXJHYXNcYCAoJHtmb3JtYXRHd2VpKG1heFByaW9yaXR5RmVlUGVyR2FzKX0gZ3dlaSkuYCwgeyBuYW1lOiAiTWF4RmVlUGVyR2FzVG9vTG93RXJyb3IiIH0pOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcy5qcwogIGluaXRfZnJvbUhleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9ibG9jay5qcwogIGluaXRfYmFzZSgpOwogIHZhciBCbG9ja05vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyIH0pIHsKICAgICAgbGV0IGlkZW50aWZpZXIgPSAiQmxvY2siOwogICAgICBpZiAoYmxvY2tIYXNoKQogICAgICAgIGlkZW50aWZpZXIgPSBgQmxvY2sgYXQgaGFzaCAiJHtibG9ja0hhc2h9ImA7CiAgICAgIGlmIChibG9ja051bWJlcikKICAgICAgICBpZGVudGlmaWVyID0gYEJsb2NrIGF0IG51bWJlciAiJHtibG9ja051bWJlcn0iYDsKICAgICAgc3VwZXIoYCR7aWRlbnRpZmllcn0gY291bGQgbm90IGJlIGZvdW5kLmAsIHsgbmFtZTogIkJsb2NrTm90Rm91bmRFcnJvciIgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRCbG9jay5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2Jsb2NrLmpzCiAgaW5pdF9mb3JtYXR0ZXIoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL3RyYW5zYWN0aW9uLmpzCiAgaW5pdF9mcm9tSGV4KCk7CiAgaW5pdF9mb3JtYXR0ZXIoKTsKICB2YXIgdHJhbnNhY3Rpb25UeXBlID0gewogICAgIjB4MCI6ICJsZWdhY3kiLAogICAgIjB4MSI6ICJlaXAyOTMwIiwKICAgICIweDIiOiAiZWlwMTU1OSIsCiAgICAiMHgzIjogImVpcDQ4NDQiLAogICAgIjB4NCI6ICJlaXA3NzAyIgogIH07CiAgZnVuY3Rpb24gZm9ybWF0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHRyYW5zYWN0aW9uXyA9IHsKICAgICAgLi4udHJhbnNhY3Rpb24sCiAgICAgIGJsb2NrSGFzaDogdHJhbnNhY3Rpb24uYmxvY2tIYXNoID8gdHJhbnNhY3Rpb24uYmxvY2tIYXNoIDogbnVsbCwKICAgICAgYmxvY2tOdW1iZXI6IHRyYW5zYWN0aW9uLmJsb2NrTnVtYmVyID8gQmlnSW50KHRyYW5zYWN0aW9uLmJsb2NrTnVtYmVyKSA6IG51bGwsCiAgICAgIGNoYWluSWQ6IHRyYW5zYWN0aW9uLmNoYWluSWQgPyBoZXhUb051bWJlcih0cmFuc2FjdGlvbi5jaGFpbklkKSA6IHZvaWQgMCwKICAgICAgZ2FzOiB0cmFuc2FjdGlvbi5nYXMgPyBCaWdJbnQodHJhbnNhY3Rpb24uZ2FzKSA6IHZvaWQgMCwKICAgICAgZ2FzUHJpY2U6IHRyYW5zYWN0aW9uLmdhc1ByaWNlID8gQmlnSW50KHRyYW5zYWN0aW9uLmdhc1ByaWNlKSA6IHZvaWQgMCwKICAgICAgbWF4RmVlUGVyQmxvYkdhczogdHJhbnNhY3Rpb24ubWF4RmVlUGVyQmxvYkdhcyA/IEJpZ0ludCh0cmFuc2FjdGlvbi5tYXhGZWVQZXJCbG9iR2FzKSA6IHZvaWQgMCwKICAgICAgbWF4RmVlUGVyR2FzOiB0cmFuc2FjdGlvbi5tYXhGZWVQZXJHYXMgPyBCaWdJbnQodHJhbnNhY3Rpb24ubWF4RmVlUGVyR2FzKSA6IHZvaWQgMCwKICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IHRyYW5zYWN0aW9uLm1heFByaW9yaXR5RmVlUGVyR2FzID8gQmlnSW50KHRyYW5zYWN0aW9uLm1heFByaW9yaXR5RmVlUGVyR2FzKSA6IHZvaWQgMCwKICAgICAgbm9uY2U6IHRyYW5zYWN0aW9uLm5vbmNlID8gaGV4VG9OdW1iZXIodHJhbnNhY3Rpb24ubm9uY2UpIDogdm9pZCAwLAogICAgICB0bzogdHJhbnNhY3Rpb24udG8gPyB0cmFuc2FjdGlvbi50byA6IG51bGwsCiAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5kZXggPyBOdW1iZXIodHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmRleCkgOiBudWxsLAogICAgICB0eXBlOiB0cmFuc2FjdGlvbi50eXBlID8gdHJhbnNhY3Rpb25UeXBlW3RyYW5zYWN0aW9uLnR5cGVdIDogdm9pZCAwLAogICAgICB0eXBlSGV4OiB0cmFuc2FjdGlvbi50eXBlID8gdHJhbnNhY3Rpb24udHlwZSA6IHZvaWQgMCwKICAgICAgdmFsdWU6IHRyYW5zYWN0aW9uLnZhbHVlID8gQmlnSW50KHRyYW5zYWN0aW9uLnZhbHVlKSA6IHZvaWQgMCwKICAgICAgdjogdHJhbnNhY3Rpb24udiA/IEJpZ0ludCh0cmFuc2FjdGlvbi52KSA6IHZvaWQgMAogICAgfTsKICAgIGlmICh0cmFuc2FjdGlvbi5hdXRob3JpemF0aW9uTGlzdCkKICAgICAgdHJhbnNhY3Rpb25fLmF1dGhvcml6YXRpb25MaXN0ID0gZm9ybWF0QXV0aG9yaXphdGlvbkxpc3QyKHRyYW5zYWN0aW9uLmF1dGhvcml6YXRpb25MaXN0KTsKICAgIHRyYW5zYWN0aW9uXy55UGFyaXR5ID0gKCgpID0+IHsKICAgICAgaWYgKHRyYW5zYWN0aW9uLnlQYXJpdHkpCiAgICAgICAgcmV0dXJuIE51bWJlcih0cmFuc2FjdGlvbi55UGFyaXR5KTsKICAgICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbl8udiA9PT0gImJpZ2ludCIpIHsKICAgICAgICBpZiAodHJhbnNhY3Rpb25fLnYgPT09IDBuIHx8IHRyYW5zYWN0aW9uXy52ID09PSAyN24pCiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBpZiAodHJhbnNhY3Rpb25fLnYgPT09IDFuIHx8IHRyYW5zYWN0aW9uXy52ID09PSAyOG4pCiAgICAgICAgICByZXR1cm4gMTsKICAgICAgICBpZiAodHJhbnNhY3Rpb25fLnYgPj0gMzVuKQogICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uXy52ICUgMm4gPT09IDBuID8gMSA6IDA7CiAgICAgIH0KICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIH0pKCk7CiAgICBpZiAodHJhbnNhY3Rpb25fLnR5cGUgPT09ICJsZWdhY3kiKSB7CiAgICAgIGRlbGV0ZSB0cmFuc2FjdGlvbl8uYWNjZXNzTGlzdDsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhGZWVQZXJCbG9iR2FzOwogICAgICBkZWxldGUgdHJhbnNhY3Rpb25fLm1heEZlZVBlckdhczsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhQcmlvcml0eUZlZVBlckdhczsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy55UGFyaXR5OwogICAgfQogICAgaWYgKHRyYW5zYWN0aW9uXy50eXBlID09PSAiZWlwMjkzMCIpIHsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhGZWVQZXJCbG9iR2FzOwogICAgICBkZWxldGUgdHJhbnNhY3Rpb25fLm1heEZlZVBlckdhczsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhQcmlvcml0eUZlZVBlckdhczsKICAgIH0KICAgIGlmICh0cmFuc2FjdGlvbl8udHlwZSA9PT0gImVpcDE1NTkiKSB7CiAgICAgIGRlbGV0ZSB0cmFuc2FjdGlvbl8ubWF4RmVlUGVyQmxvYkdhczsKICAgIH0KICAgIHJldHVybiB0cmFuc2FjdGlvbl87CiAgfQogIHZhciBkZWZpbmVUcmFuc2FjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVGb3JtYXR0ZXIoInRyYW5zYWN0aW9uIiwgZm9ybWF0VHJhbnNhY3Rpb24pOwogIGZ1bmN0aW9uIGZvcm1hdEF1dGhvcml6YXRpb25MaXN0MihhdXRob3JpemF0aW9uTGlzdCkgewogICAgcmV0dXJuIGF1dGhvcml6YXRpb25MaXN0Lm1hcCgoYXV0aG9yaXphdGlvbikgPT4gKHsKICAgICAgY29udHJhY3RBZGRyZXNzOiBhdXRob3JpemF0aW9uLmFkZHJlc3MsCiAgICAgIHI6IGF1dGhvcml6YXRpb24uciwKICAgICAgczogYXV0aG9yaXphdGlvbi5zLAogICAgICBjaGFpbklkOiBOdW1iZXIoYXV0aG9yaXphdGlvbi5jaGFpbklkKSwKICAgICAgbm9uY2U6IE51bWJlcihhdXRob3JpemF0aW9uLm5vbmNlKSwKICAgICAgLi4udHlwZW9mIGF1dGhvcml6YXRpb24ueVBhcml0eSAhPT0gInVuZGVmaW5lZCIgPyB7IHlQYXJpdHk6IE51bWJlcihhdXRob3JpemF0aW9uLnlQYXJpdHkpIH0gOiB7fSwKICAgICAgLi4udHlwZW9mIGF1dGhvcml6YXRpb24udiAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIGF1dGhvcml6YXRpb24ueVBhcml0eSA9PT0gInVuZGVmaW5lZCIgPyB7IHY6IE51bWJlcihhdXRob3JpemF0aW9uLnYpIH0gOiB7fQogICAgfSkpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2Jsb2NrLmpzCiAgZnVuY3Rpb24gZm9ybWF0QmxvY2soYmxvY2spIHsKICAgIGNvbnN0IHRyYW5zYWN0aW9ucyA9IGJsb2NrLnRyYW5zYWN0aW9ucz8ubWFwKCh0cmFuc2FjdGlvbikgPT4gewogICAgICBpZiAodHlwZW9mIHRyYW5zYWN0aW9uID09PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICAgIHJldHVybiBmb3JtYXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7CiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIC4uLmJsb2NrLAogICAgICBiYXNlRmVlUGVyR2FzOiBibG9jay5iYXNlRmVlUGVyR2FzID8gQmlnSW50KGJsb2NrLmJhc2VGZWVQZXJHYXMpIDogbnVsbCwKICAgICAgYmxvYkdhc1VzZWQ6IGJsb2NrLmJsb2JHYXNVc2VkID8gQmlnSW50KGJsb2NrLmJsb2JHYXNVc2VkKSA6IHZvaWQgMCwKICAgICAgZGlmZmljdWx0eTogYmxvY2suZGlmZmljdWx0eSA/IEJpZ0ludChibG9jay5kaWZmaWN1bHR5KSA6IHZvaWQgMCwKICAgICAgZXhjZXNzQmxvYkdhczogYmxvY2suZXhjZXNzQmxvYkdhcyA/IEJpZ0ludChibG9jay5leGNlc3NCbG9iR2FzKSA6IHZvaWQgMCwKICAgICAgZ2FzTGltaXQ6IGJsb2NrLmdhc0xpbWl0ID8gQmlnSW50KGJsb2NrLmdhc0xpbWl0KSA6IHZvaWQgMCwKICAgICAgZ2FzVXNlZDogYmxvY2suZ2FzVXNlZCA/IEJpZ0ludChibG9jay5nYXNVc2VkKSA6IHZvaWQgMCwKICAgICAgaGFzaDogYmxvY2suaGFzaCA/IGJsb2NrLmhhc2ggOiBudWxsLAogICAgICBsb2dzQmxvb206IGJsb2NrLmxvZ3NCbG9vbSA/IGJsb2NrLmxvZ3NCbG9vbSA6IG51bGwsCiAgICAgIG5vbmNlOiBibG9jay5ub25jZSA/IGJsb2NrLm5vbmNlIDogbnVsbCwKICAgICAgbnVtYmVyOiBibG9jay5udW1iZXIgPyBCaWdJbnQoYmxvY2subnVtYmVyKSA6IG51bGwsCiAgICAgIHNpemU6IGJsb2NrLnNpemUgPyBCaWdJbnQoYmxvY2suc2l6ZSkgOiB2b2lkIDAsCiAgICAgIHRpbWVzdGFtcDogYmxvY2sudGltZXN0YW1wID8gQmlnSW50KGJsb2NrLnRpbWVzdGFtcCkgOiB2b2lkIDAsCiAgICAgIHRyYW5zYWN0aW9ucywKICAgICAgdG90YWxEaWZmaWN1bHR5OiBibG9jay50b3RhbERpZmZpY3VsdHkgPyBCaWdJbnQoYmxvY2sudG90YWxEaWZmaWN1bHR5KSA6IG51bGwKICAgIH07CiAgfQogIHZhciBkZWZpbmVCbG9jayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVGb3JtYXR0ZXIoImJsb2NrIiwgZm9ybWF0QmxvY2spOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEJsb2NrLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvY2soY2xpZW50LCB7IGJsb2NrSGFzaCwgYmxvY2tOdW1iZXIsIGJsb2NrVGFnOiBibG9ja1RhZ18sIGluY2x1ZGVUcmFuc2FjdGlvbnM6IGluY2x1ZGVUcmFuc2FjdGlvbnNfIH0gPSB7fSkgewogICAgY29uc3QgYmxvY2tUYWcgPSBibG9ja1RhZ18gPz8gImxhdGVzdCI7CiAgICBjb25zdCBpbmNsdWRlVHJhbnNhY3Rpb25zID0gaW5jbHVkZVRyYW5zYWN0aW9uc18gPz8gZmFsc2U7CiAgICBjb25zdCBibG9ja051bWJlckhleCA9IGJsb2NrTnVtYmVyICE9PSB2b2lkIDAgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICBsZXQgYmxvY2sgPSBudWxsOwogICAgaWYgKGJsb2NrSGFzaCkgewogICAgICBibG9jayA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0QmxvY2tCeUhhc2giLAogICAgICAgIHBhcmFtczogW2Jsb2NrSGFzaCwgaW5jbHVkZVRyYW5zYWN0aW9uc10KICAgICAgfSwgeyBkZWR1cGU6IHRydWUgfSk7CiAgICB9IGVsc2UgewogICAgICBibG9jayA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0QmxvY2tCeU51bWJlciIsCiAgICAgICAgcGFyYW1zOiBbYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWcsIGluY2x1ZGVUcmFuc2FjdGlvbnNdCiAgICAgIH0sIHsgZGVkdXBlOiBCb29sZWFuKGJsb2NrTnVtYmVySGV4KSB9KTsKICAgIH0KICAgIGlmICghYmxvY2spCiAgICAgIHRocm93IG5ldyBCbG9ja05vdEZvdW5kRXJyb3IoeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyIH0pOwogICAgY29uc3QgZm9ybWF0ID0gY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzPy5ibG9jaz8uZm9ybWF0IHx8IGZvcm1hdEJsb2NrOwogICAgcmV0dXJuIGZvcm1hdChibG9jayk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEdhc1ByaWNlLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0R2FzUHJpY2UoY2xpZW50KSB7CiAgICBjb25zdCBnYXNQcmljZSA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2dhc1ByaWNlIgogICAgfSk7CiAgICByZXR1cm4gQmlnSW50KGdhc1ByaWNlKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcy5qcwogIGFzeW5jIGZ1bmN0aW9uIGVzdGltYXRlTWF4UHJpb3JpdHlGZWVQZXJHYXMoY2xpZW50LCBhcmdzKSB7CiAgICByZXR1cm4gaW50ZXJuYWxfZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcyhjbGllbnQsIGFyZ3MpOwogIH0KICBhc3luYyBmdW5jdGlvbiBpbnRlcm5hbF9lc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzKGNsaWVudCwgYXJncykgewogICAgY29uc3QgeyBibG9jazogYmxvY2tfLCBjaGFpbiA9IGNsaWVudC5jaGFpbiwgcmVxdWVzdCB9ID0gYXJncyB8fCB7fTsKICAgIGlmICh0eXBlb2YgY2hhaW4/LmZlZXM/LmRlZmF1bHRQcmlvcml0eUZlZSA9PT0gImZ1bmN0aW9uIikgewogICAgICBjb25zdCBibG9jayA9IGJsb2NrXyB8fCBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRCbG9jaywgImdldEJsb2NrIikoe30pOwogICAgICByZXR1cm4gY2hhaW4uZmVlcy5kZWZhdWx0UHJpb3JpdHlGZWUoewogICAgICAgIGJsb2NrLAogICAgICAgIGNsaWVudCwKICAgICAgICByZXF1ZXN0CiAgICAgIH0pOwogICAgfQogICAgaWYgKHR5cGVvZiBjaGFpbj8uZmVlcz8uZGVmYXVsdFByaW9yaXR5RmVlICE9PSAidW5kZWZpbmVkIikKICAgICAgcmV0dXJuIGNoYWluPy5mZWVzPy5kZWZhdWx0UHJpb3JpdHlGZWU7CiAgICB0cnkgewogICAgICBjb25zdCBtYXhQcmlvcml0eUZlZVBlckdhc0hleCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfbWF4UHJpb3JpdHlGZWVQZXJHYXMiCiAgICAgIH0pOwogICAgICByZXR1cm4gaGV4VG9CaWdJbnQobWF4UHJpb3JpdHlGZWVQZXJHYXNIZXgpOwogICAgfSBjYXRjaCB7CiAgICAgIGNvbnN0IFtibG9jaywgZ2FzUHJpY2VdID0gYXdhaXQgUHJvbWlzZS5hbGwoWwogICAgICAgIGJsb2NrXyA/IFByb21pc2UucmVzb2x2ZShibG9ja18pIDogZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2ssICJnZXRCbG9jayIpKHt9KSwKICAgICAgICBnZXRBY3Rpb24oY2xpZW50LCBnZXRHYXNQcmljZSwgImdldEdhc1ByaWNlIikoe30pCiAgICAgIF0pOwogICAgICBpZiAodHlwZW9mIGJsb2NrLmJhc2VGZWVQZXJHYXMgIT09ICJiaWdpbnQiKQogICAgICAgIHRocm93IG5ldyBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yKCk7CiAgICAgIGNvbnN0IG1heFByaW9yaXR5RmVlUGVyR2FzID0gZ2FzUHJpY2UgLSBibG9jay5iYXNlRmVlUGVyR2FzOwogICAgICBpZiAobWF4UHJpb3JpdHlGZWVQZXJHYXMgPCAwbikKICAgICAgICByZXR1cm4gMG47CiAgICAgIHJldHVybiBtYXhQcmlvcml0eUZlZVBlckdhczsKICAgIH0KICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVGZWVzUGVyR2FzLmpzCiAgYXN5bmMgZnVuY3Rpb24gZXN0aW1hdGVGZWVzUGVyR2FzKGNsaWVudCwgYXJncykgewogICAgcmV0dXJuIGludGVybmFsX2VzdGltYXRlRmVlc1BlckdhcyhjbGllbnQsIGFyZ3MpOwogIH0KICBhc3luYyBmdW5jdGlvbiBpbnRlcm5hbF9lc3RpbWF0ZUZlZXNQZXJHYXMoY2xpZW50LCBhcmdzKSB7CiAgICBjb25zdCB7IGJsb2NrOiBibG9ja18sIGNoYWluID0gY2xpZW50LmNoYWluLCByZXF1ZXN0LCB0eXBlID0gImVpcDE1NTkiIH0gPSBhcmdzIHx8IHt9OwogICAgY29uc3QgYmFzZUZlZU11bHRpcGxpZXIgPSBhd2FpdCAoYXN5bmMgKCkgPT4gewogICAgICBpZiAodHlwZW9mIGNoYWluPy5mZWVzPy5iYXNlRmVlTXVsdGlwbGllciA9PT0gImZ1bmN0aW9uIikKICAgICAgICByZXR1cm4gY2hhaW4uZmVlcy5iYXNlRmVlTXVsdGlwbGllcih7CiAgICAgICAgICBibG9jazogYmxvY2tfLAogICAgICAgICAgY2xpZW50LAogICAgICAgICAgcmVxdWVzdAogICAgICAgIH0pOwogICAgICByZXR1cm4gY2hhaW4/LmZlZXM/LmJhc2VGZWVNdWx0aXBsaWVyID8/IDEuMjsKICAgIH0pKCk7CiAgICBpZiAoYmFzZUZlZU11bHRpcGxpZXIgPCAxKQogICAgICB0aHJvdyBuZXcgQmFzZUZlZVNjYWxhckVycm9yKCk7CiAgICBjb25zdCBkZWNpbWFscyA9IGJhc2VGZWVNdWx0aXBsaWVyLnRvU3RyaW5nKCkuc3BsaXQoIi4iKVsxXT8ubGVuZ3RoID8/IDA7CiAgICBjb25zdCBkZW5vbWluYXRvciA9IDEwICoqIGRlY2ltYWxzOwogICAgY29uc3QgbXVsdGlwbHkgPSAoYmFzZTIpID0+IGJhc2UyICogQmlnSW50KE1hdGguY2VpbChiYXNlRmVlTXVsdGlwbGllciAqIGRlbm9taW5hdG9yKSkgLyBCaWdJbnQoZGVub21pbmF0b3IpOwogICAgY29uc3QgYmxvY2sgPSBibG9ja18gPyBibG9ja18gOiBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRCbG9jaywgImdldEJsb2NrIikoe30pOwogICAgaWYgKHR5cGVvZiBjaGFpbj8uZmVlcz8uZXN0aW1hdGVGZWVzUGVyR2FzID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGNvbnN0IGZlZXMyID0gYXdhaXQgY2hhaW4uZmVlcy5lc3RpbWF0ZUZlZXNQZXJHYXMoewogICAgICAgIGJsb2NrOiBibG9ja18sCiAgICAgICAgY2xpZW50LAogICAgICAgIG11bHRpcGx5LAogICAgICAgIHJlcXVlc3QsCiAgICAgICAgdHlwZQogICAgICB9KTsKICAgICAgaWYgKGZlZXMyICE9PSBudWxsKQogICAgICAgIHJldHVybiBmZWVzMjsKICAgIH0KICAgIGlmICh0eXBlID09PSAiZWlwMTU1OSIpIHsKICAgICAgaWYgKHR5cGVvZiBibG9jay5iYXNlRmVlUGVyR2FzICE9PSAiYmlnaW50IikKICAgICAgICB0aHJvdyBuZXcgRWlwMTU1OUZlZXNOb3RTdXBwb3J0ZWRFcnJvcigpOwogICAgICBjb25zdCBtYXhQcmlvcml0eUZlZVBlckdhcyA9IHR5cGVvZiByZXF1ZXN0Py5tYXhQcmlvcml0eUZlZVBlckdhcyA9PT0gImJpZ2ludCIgPyByZXF1ZXN0Lm1heFByaW9yaXR5RmVlUGVyR2FzIDogYXdhaXQgaW50ZXJuYWxfZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcyhjbGllbnQsIHsKICAgICAgICBibG9jaywKICAgICAgICBjaGFpbiwKICAgICAgICByZXF1ZXN0CiAgICAgIH0pOwogICAgICBjb25zdCBiYXNlRmVlUGVyR2FzID0gbXVsdGlwbHkoYmxvY2suYmFzZUZlZVBlckdhcyk7CiAgICAgIGNvbnN0IG1heEZlZVBlckdhcyA9IHJlcXVlc3Q/Lm1heEZlZVBlckdhcyA/PyBiYXNlRmVlUGVyR2FzICsgbWF4UHJpb3JpdHlGZWVQZXJHYXM7CiAgICAgIHJldHVybiB7CiAgICAgICAgbWF4RmVlUGVyR2FzLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzCiAgICAgIH07CiAgICB9CiAgICBjb25zdCBnYXNQcmljZSA9IHJlcXVlc3Q/Lmdhc1ByaWNlID8/IG11bHRpcGx5KGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEdhc1ByaWNlLCAiZ2V0R2FzUHJpY2UiKSh7fSkpOwogICAgcmV0dXJuIHsKICAgICAgZ2FzUHJpY2UKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldFRyYW5zYWN0aW9uQ291bnQuanMKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25Db3VudChjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tUYWcgPSAibGF0ZXN0IiwgYmxvY2tOdW1iZXIgfSkgewogICAgY29uc3QgY291bnQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRUcmFuc2FjdGlvbkNvdW50IiwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYmxvY2tOdW1iZXIgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiBibG9ja1RhZ10KICAgIH0sIHsgZGVkdXBlOiBCb29sZWFuKGJsb2NrTnVtYmVyKSB9KTsKICAgIHJldHVybiBoZXhUb051bWJlcihjb3VudCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Jsb2IvYmxvYnNUb0NvbW1pdG1lbnRzLmpzCiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIGJsb2JzVG9Db21taXRtZW50cyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGt6ZyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IGJsb2JzID0gdHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gcGFyYW1ldGVycy5ibG9icy5tYXAoKHgpID0+IGhleFRvQnl0ZXMoeCkpIDogcGFyYW1ldGVycy5ibG9iczsKICAgIGNvbnN0IGNvbW1pdG1lbnRzID0gW107CiAgICBmb3IgKGNvbnN0IGJsb2Igb2YgYmxvYnMpCiAgICAgIGNvbW1pdG1lbnRzLnB1c2goVWludDhBcnJheS5mcm9tKGt6Zy5ibG9iVG9LemdDb21taXRtZW50KGJsb2IpKSk7CiAgICByZXR1cm4gdG8gPT09ICJieXRlcyIgPyBjb21taXRtZW50cyA6IGNvbW1pdG1lbnRzLm1hcCgoeCkgPT4gYnl0ZXNUb0hleCh4KSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Jsb2IvYmxvYnNUb1Byb29mcy5qcwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBibG9ic1RvUHJvb2ZzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsga3pnIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgdG8gPSBwYXJhbWV0ZXJzLnRvID8/ICh0eXBlb2YgcGFyYW1ldGVycy5ibG9ic1swXSA9PT0gInN0cmluZyIgPyAiaGV4IiA6ICJieXRlcyIpOwogICAgY29uc3QgYmxvYnMgPSB0eXBlb2YgcGFyYW1ldGVycy5ibG9ic1swXSA9PT0gInN0cmluZyIgPyBwYXJhbWV0ZXJzLmJsb2JzLm1hcCgoeCkgPT4gaGV4VG9CeXRlcyh4KSkgOiBwYXJhbWV0ZXJzLmJsb2JzOwogICAgY29uc3QgY29tbWl0bWVudHMgPSB0eXBlb2YgcGFyYW1ldGVycy5jb21taXRtZW50c1swXSA9PT0gInN0cmluZyIgPyBwYXJhbWV0ZXJzLmNvbW1pdG1lbnRzLm1hcCgoeCkgPT4gaGV4VG9CeXRlcyh4KSkgOiBwYXJhbWV0ZXJzLmNvbW1pdG1lbnRzOwogICAgY29uc3QgcHJvb2ZzID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2JzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IGJsb2IgPSBibG9ic1tpXTsKICAgICAgY29uc3QgY29tbWl0bWVudCA9IGNvbW1pdG1lbnRzW2ldOwogICAgICBwcm9vZnMucHVzaChVaW50OEFycmF5LmZyb20oa3pnLmNvbXB1dGVCbG9iS3pnUHJvb2YoYmxvYiwgY29tbWl0bWVudCkpKTsKICAgIH0KICAgIHJldHVybiB0byA9PT0gImJ5dGVzIiA/IHByb29mcyA6IHByb29mcy5tYXAoKHgpID0+IGJ5dGVzVG9IZXgoeCkpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL2NvbW1pdG1lbnRUb1ZlcnNpb25lZEhhc2guanMKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9zaGEyNTYuanMKICBpbml0X3NoYTI1NigpOwogIGluaXRfaXNIZXgoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gc2hhMjU2Mih2YWx1ZSwgdG9fKSB7CiAgICBjb25zdCB0byA9IHRvXyB8fCAiaGV4IjsKICAgIGNvbnN0IGJ5dGVzMiA9IHNoYTI1Nihpc0hleCh2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pID8gdG9CeXRlcyh2YWx1ZSkgOiB2YWx1ZSk7CiAgICBpZiAodG8gPT09ICJieXRlcyIpCiAgICAgIHJldHVybiBieXRlczI7CiAgICByZXR1cm4gdG9IZXgoYnl0ZXMyKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYmxvYi9jb21taXRtZW50VG9WZXJzaW9uZWRIYXNoLmpzCiAgZnVuY3Rpb24gY29tbWl0bWVudFRvVmVyc2lvbmVkSGFzaChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGNvbW1pdG1lbnQsIHZlcnNpb246IHZlcnNpb24zID0gMSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIGNvbW1pdG1lbnQgPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IHZlcnNpb25lZEhhc2ggPSBzaGEyNTYyKGNvbW1pdG1lbnQsICJieXRlcyIpOwogICAgdmVyc2lvbmVkSGFzaC5zZXQoW3ZlcnNpb24zXSwgMCk7CiAgICByZXR1cm4gdG8gPT09ICJieXRlcyIgPyB2ZXJzaW9uZWRIYXNoIDogYnl0ZXNUb0hleCh2ZXJzaW9uZWRIYXNoKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYmxvYi9jb21taXRtZW50c1RvVmVyc2lvbmVkSGFzaGVzLmpzCiAgZnVuY3Rpb24gY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlcyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGNvbW1pdG1lbnRzLCB2ZXJzaW9uOiB2ZXJzaW9uMyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIGNvbW1pdG1lbnRzWzBdID09PSAic3RyaW5nIiA/ICJoZXgiIDogImJ5dGVzIik7CiAgICBjb25zdCBoYXNoZXMgPSBbXTsKICAgIGZvciAoY29uc3QgY29tbWl0bWVudCBvZiBjb21taXRtZW50cykgewogICAgICBoYXNoZXMucHVzaChjb21taXRtZW50VG9WZXJzaW9uZWRIYXNoKHsKICAgICAgICBjb21taXRtZW50LAogICAgICAgIHRvLAogICAgICAgIHZlcnNpb246IHZlcnNpb24zCiAgICAgIH0pKTsKICAgIH0KICAgIHJldHVybiBoYXNoZXM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9ibG9iLmpzCiAgdmFyIGJsb2JzUGVyVHJhbnNhY3Rpb24gPSA2OwogIHZhciBieXRlc1BlckZpZWxkRWxlbWVudCA9IDMyOwogIHZhciBmaWVsZEVsZW1lbnRzUGVyQmxvYiA9IDQwOTY7CiAgdmFyIGJ5dGVzUGVyQmxvYiA9IGJ5dGVzUGVyRmllbGRFbGVtZW50ICogZmllbGRFbGVtZW50c1BlckJsb2I7CiAgdmFyIG1heEJ5dGVzUGVyVHJhbnNhY3Rpb24gPSBieXRlc1BlckJsb2IgKiBibG9ic1BlclRyYW5zYWN0aW9uIC0gLy8gdGVybWluYXRvciBieXRlICgweDgwKS4KICAxIC0gLy8gemVybyBieXRlICgweDAwKSBhcHBlbmRlZCB0byBlYWNoIGZpZWxkIGVsZW1lbnQuCiAgMSAqIGZpZWxkRWxlbWVudHNQZXJCbG9iICogYmxvYnNQZXJUcmFuc2FjdGlvbjsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMva3pnLmpzCiAgdmFyIHZlcnNpb25lZEhhc2hWZXJzaW9uS3pnID0gMTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvYmxvYi5qcwogIGluaXRfYmFzZSgpOwogIHZhciBCbG9iU2l6ZVRvb0xhcmdlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyBtYXhTaXplLCBzaXplOiBzaXplMyB9KSB7CiAgICAgIHN1cGVyKCJCbG9iIHNpemUgaXMgdG9vIGxhcmdlLiIsIHsKICAgICAgICBtZXRhTWVzc2FnZXM6IFtgTWF4OiAke21heFNpemV9IGJ5dGVzYCwgYEdpdmVuOiAke3NpemUzfSBieXRlc2BdLAogICAgICAgIG5hbWU6ICJCbG9iU2l6ZVRvb0xhcmdlRXJyb3IiCiAgICAgIH0pOwogICAgfQogIH07CiAgdmFyIEVtcHR5QmxvYkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiQmxvYiBkYXRhIG11c3Qgbm90IGJlIGVtcHR5LiIsIHsgbmFtZTogIkVtcHR5QmxvYkVycm9yIiB9KTsKICAgIH0KICB9OwogIHZhciBJbnZhbGlkVmVyc2lvbmVkSGFzaFNpemVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGhhc2g6IGhhc2gzLCBzaXplOiBzaXplMyB9KSB7CiAgICAgIHN1cGVyKGBWZXJzaW9uZWQgaGFzaCAiJHtoYXNoM30iIHNpemUgaXMgaW52YWxpZC5gLCB7CiAgICAgICAgbWV0YU1lc3NhZ2VzOiBbIkV4cGVjdGVkOiAzMiIsIGBSZWNlaXZlZDogJHtzaXplM31gXSwKICAgICAgICBuYW1lOiAiSW52YWxpZFZlcnNpb25lZEhhc2hTaXplRXJyb3IiCiAgICAgIH0pOwogICAgfQogIH07CiAgdmFyIEludmFsaWRWZXJzaW9uZWRIYXNoVmVyc2lvbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgaGFzaDogaGFzaDMsIHZlcnNpb246IHZlcnNpb24zIH0pIHsKICAgICAgc3VwZXIoYFZlcnNpb25lZCBoYXNoICIke2hhc2gzfSIgdmVyc2lvbiBpcyBpbnZhbGlkLmAsIHsKICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgIGBFeHBlY3RlZDogJHt2ZXJzaW9uZWRIYXNoVmVyc2lvbkt6Z31gLAogICAgICAgICAgYFJlY2VpdmVkOiAke3ZlcnNpb24zfWAKICAgICAgICBdLAogICAgICAgIG5hbWU6ICJJbnZhbGlkVmVyc2lvbmVkSGFzaFZlcnNpb25FcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL3RvQmxvYnMuanMKICBpbml0X2N1cnNvcjIoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gdG9CbG9icyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB0byA9IHBhcmFtZXRlcnMudG8gPz8gKHR5cGVvZiBwYXJhbWV0ZXJzLmRhdGEgPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgcGFyYW1ldGVycy5kYXRhID09PSAic3RyaW5nIiA/IGhleFRvQnl0ZXMocGFyYW1ldGVycy5kYXRhKSA6IHBhcmFtZXRlcnMuZGF0YTsKICAgIGNvbnN0IHNpemVfID0gc2l6ZShkYXRhKTsKICAgIGlmICghc2l6ZV8pCiAgICAgIHRocm93IG5ldyBFbXB0eUJsb2JFcnJvcigpOwogICAgaWYgKHNpemVfID4gbWF4Qnl0ZXNQZXJUcmFuc2FjdGlvbikKICAgICAgdGhyb3cgbmV3IEJsb2JTaXplVG9vTGFyZ2VFcnJvcih7CiAgICAgICAgbWF4U2l6ZTogbWF4Qnl0ZXNQZXJUcmFuc2FjdGlvbiwKICAgICAgICBzaXplOiBzaXplXwogICAgICB9KTsKICAgIGNvbnN0IGJsb2JzID0gW107CiAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgIGxldCBwb3NpdGlvbiA9IDA7CiAgICB3aGlsZSAoYWN0aXZlKSB7CiAgICAgIGNvbnN0IGJsb2IgPSBjcmVhdGVDdXJzb3IobmV3IFVpbnQ4QXJyYXkoYnl0ZXNQZXJCbG9iKSk7CiAgICAgIGxldCBzaXplMyA9IDA7CiAgICAgIHdoaWxlIChzaXplMyA8IGZpZWxkRWxlbWVudHNQZXJCbG9iKSB7CiAgICAgICAgY29uc3QgYnl0ZXMyID0gZGF0YS5zbGljZShwb3NpdGlvbiwgcG9zaXRpb24gKyAoYnl0ZXNQZXJGaWVsZEVsZW1lbnQgLSAxKSk7CiAgICAgICAgYmxvYi5wdXNoQnl0ZSgwKTsKICAgICAgICBibG9iLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIGlmIChieXRlczIubGVuZ3RoIDwgMzEpIHsKICAgICAgICAgIGJsb2IucHVzaEJ5dGUoMTI4KTsKICAgICAgICAgIGFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNpemUzKys7CiAgICAgICAgcG9zaXRpb24gKz0gMzE7CiAgICAgIH0KICAgICAgYmxvYnMucHVzaChibG9iKTsKICAgIH0KICAgIHJldHVybiB0byA9PT0gImJ5dGVzIiA/IGJsb2JzLm1hcCgoeCkgPT4geC5ieXRlcykgOiBibG9icy5tYXAoKHgpID0+IGJ5dGVzVG9IZXgoeC5ieXRlcykpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL3RvQmxvYlNpZGVjYXJzLmpzCiAgZnVuY3Rpb24gdG9CbG9iU2lkZWNhcnMocGFyYW1ldGVycykgewogICAgY29uc3QgeyBkYXRhLCBremcsIHRvIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgYmxvYnMgPSBwYXJhbWV0ZXJzLmJsb2JzID8/IHRvQmxvYnMoeyBkYXRhLCB0byB9KTsKICAgIGNvbnN0IGNvbW1pdG1lbnRzID0gcGFyYW1ldGVycy5jb21taXRtZW50cyA/PyBibG9ic1RvQ29tbWl0bWVudHMoeyBibG9icywga3pnLCB0byB9KTsKICAgIGNvbnN0IHByb29mcyA9IHBhcmFtZXRlcnMucHJvb2ZzID8/IGJsb2JzVG9Qcm9vZnMoeyBibG9icywgY29tbWl0bWVudHMsIGt6ZywgdG8gfSk7CiAgICBjb25zdCBzaWRlY2FycyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBibG9icy5sZW5ndGg7IGkrKykKICAgICAgc2lkZWNhcnMucHVzaCh7CiAgICAgICAgYmxvYjogYmxvYnNbaV0sCiAgICAgICAgY29tbWl0bWVudDogY29tbWl0bWVudHNbaV0sCiAgICAgICAgcHJvb2Y6IHByb29mc1tpXQogICAgICB9KTsKICAgIHJldHVybiBzaWRlY2FyczsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdC5qcwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL2dldFRyYW5zYWN0aW9uVHlwZS5qcwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb24pIHsKICAgIGlmICh0cmFuc2FjdGlvbi50eXBlKQogICAgICByZXR1cm4gdHJhbnNhY3Rpb24udHlwZTsKICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24uYXV0aG9yaXphdGlvbkxpc3QgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gImVpcDc3MDIiOwogICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbi5ibG9icyAhPT0gInVuZGVmaW5lZCIgfHwgdHlwZW9mIHRyYW5zYWN0aW9uLmJsb2JWZXJzaW9uZWRIYXNoZXMgIT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiB0cmFuc2FjdGlvbi5tYXhGZWVQZXJCbG9iR2FzICE9PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgdHJhbnNhY3Rpb24uc2lkZWNhcnMgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gImVpcDQ4NDQiOwogICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbi5tYXhGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiB0cmFuc2FjdGlvbi5tYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgcmV0dXJuICJlaXAxNTU5IjsKICAgIH0KICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24uZ2FzUHJpY2UgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24uYWNjZXNzTGlzdCAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgcmV0dXJuICJlaXAyOTMwIjsKICAgICAgcmV0dXJuICJsZWdhY3kiOwogICAgfQogICAgdGhyb3cgbmV3IEludmFsaWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbkVycm9yKHsgdHJhbnNhY3Rpb24gfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldENoYWluSWQuanMKICBpbml0X2Zyb21IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRDaGFpbklkKGNsaWVudCkgewogICAgY29uc3QgY2hhaW5JZEhleCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2NoYWluSWQiCiAgICB9LCB7IGRlZHVwZTogdHJ1ZSB9KTsKICAgIHJldHVybiBoZXhUb051bWJlcihjaGFpbklkSGV4KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdC5qcwogIHZhciBkZWZhdWx0UGFyYW1ldGVycyA9IFsKICAgICJibG9iVmVyc2lvbmVkSGFzaGVzIiwKICAgICJjaGFpbklkIiwKICAgICJmZWVzIiwKICAgICJnYXMiLAogICAgIm5vbmNlIiwKICAgICJ0eXBlIgogIF07CiAgYXN5bmMgZnVuY3Rpb24gcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdChjbGllbnQsIGFyZ3MpIHsKICAgIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudF8gPSBjbGllbnQuYWNjb3VudCwgYmxvYnMsIGNoYWluLCBnYXMsIGt6Zywgbm9uY2UsIHBhcmFtZXRlcnMgPSBkZWZhdWx0UGFyYW1ldGVycywgdHlwZSB9ID0gYXJnczsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICBjb25zdCByZXF1ZXN0ID0geyAuLi5hcmdzLCAuLi5hY2NvdW50ID8geyBmcm9tOiBhY2NvdW50Py5hZGRyZXNzIH0gOiB7fSB9OwogICAgbGV0IGJsb2NrOwogICAgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvY2syKCkgewogICAgICBpZiAoYmxvY2spCiAgICAgICAgcmV0dXJuIGJsb2NrOwogICAgICBibG9jayA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrLCAiZ2V0QmxvY2siKSh7IGJsb2NrVGFnOiAibGF0ZXN0IiB9KTsKICAgICAgcmV0dXJuIGJsb2NrOwogICAgfQogICAgbGV0IGNoYWluSWQ7CiAgICBhc3luYyBmdW5jdGlvbiBnZXRDaGFpbklkMigpIHsKICAgICAgaWYgKGNoYWluSWQpCiAgICAgICAgcmV0dXJuIGNoYWluSWQ7CiAgICAgIGlmIChjaGFpbikKICAgICAgICByZXR1cm4gY2hhaW4uaWQ7CiAgICAgIGlmICh0eXBlb2YgYXJncy5jaGFpbklkICE9PSAidW5kZWZpbmVkIikKICAgICAgICByZXR1cm4gYXJncy5jaGFpbklkOwogICAgICBjb25zdCBjaGFpbklkXyA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldENoYWluSWQsICJnZXRDaGFpbklkIikoe30pOwogICAgICBjaGFpbklkID0gY2hhaW5JZF87CiAgICAgIHJldHVybiBjaGFpbklkOwogICAgfQogICAgaWYgKChwYXJhbWV0ZXJzLmluY2x1ZGVzKCJibG9iVmVyc2lvbmVkSGFzaGVzIikgfHwgcGFyYW1ldGVycy5pbmNsdWRlcygic2lkZWNhcnMiKSkgJiYgYmxvYnMgJiYga3pnKSB7CiAgICAgIGNvbnN0IGNvbW1pdG1lbnRzID0gYmxvYnNUb0NvbW1pdG1lbnRzKHsgYmxvYnMsIGt6ZyB9KTsKICAgICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoImJsb2JWZXJzaW9uZWRIYXNoZXMiKSkgewogICAgICAgIGNvbnN0IHZlcnNpb25lZEhhc2hlcyA9IGNvbW1pdG1lbnRzVG9WZXJzaW9uZWRIYXNoZXMoewogICAgICAgICAgY29tbWl0bWVudHMsCiAgICAgICAgICB0bzogImhleCIKICAgICAgICB9KTsKICAgICAgICByZXF1ZXN0LmJsb2JWZXJzaW9uZWRIYXNoZXMgPSB2ZXJzaW9uZWRIYXNoZXM7CiAgICAgIH0KICAgICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoInNpZGVjYXJzIikpIHsKICAgICAgICBjb25zdCBwcm9vZnMgPSBibG9ic1RvUHJvb2ZzKHsgYmxvYnMsIGNvbW1pdG1lbnRzLCBremcgfSk7CiAgICAgICAgY29uc3Qgc2lkZWNhcnMgPSB0b0Jsb2JTaWRlY2Fycyh7CiAgICAgICAgICBibG9icywKICAgICAgICAgIGNvbW1pdG1lbnRzLAogICAgICAgICAgcHJvb2ZzLAogICAgICAgICAgdG86ICJoZXgiCiAgICAgICAgfSk7CiAgICAgICAgcmVxdWVzdC5zaWRlY2FycyA9IHNpZGVjYXJzOwogICAgICB9CiAgICB9CiAgICBpZiAocGFyYW1ldGVycy5pbmNsdWRlcygiY2hhaW5JZCIpKQogICAgICByZXF1ZXN0LmNoYWluSWQgPSBhd2FpdCBnZXRDaGFpbklkMigpOwogICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoIm5vbmNlIikgJiYgdHlwZW9mIG5vbmNlID09PSAidW5kZWZpbmVkIiAmJiBhY2NvdW50KSB7CiAgICAgIGlmIChhY2NvdW50Lm5vbmNlTWFuYWdlcikgewogICAgICAgIGNvbnN0IGNoYWluSWQyID0gYXdhaXQgZ2V0Q2hhaW5JZDIoKTsKICAgICAgICByZXF1ZXN0Lm5vbmNlID0gYXdhaXQgYWNjb3VudC5ub25jZU1hbmFnZXIuY29uc3VtZSh7CiAgICAgICAgICBhZGRyZXNzOiBhY2NvdW50LmFkZHJlc3MsCiAgICAgICAgICBjaGFpbklkOiBjaGFpbklkMiwKICAgICAgICAgIGNsaWVudAogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHJlcXVlc3Qubm9uY2UgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRUcmFuc2FjdGlvbkNvdW50LCAiZ2V0VHJhbnNhY3Rpb25Db3VudCIpKHsKICAgICAgICAgIGFkZHJlc3M6IGFjY291bnQuYWRkcmVzcywKICAgICAgICAgIGJsb2NrVGFnOiAicGVuZGluZyIKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgaWYgKChwYXJhbWV0ZXJzLmluY2x1ZGVzKCJmZWVzIikgfHwgcGFyYW1ldGVycy5pbmNsdWRlcygidHlwZSIpKSAmJiB0eXBlb2YgdHlwZSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXF1ZXN0LnR5cGUgPSBnZXRUcmFuc2FjdGlvblR5cGUocmVxdWVzdCk7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIGNvbnN0IGJsb2NrMiA9IGF3YWl0IGdldEJsb2NrMigpOwogICAgICAgIHJlcXVlc3QudHlwZSA9IHR5cGVvZiBibG9jazI/LmJhc2VGZWVQZXJHYXMgPT09ICJiaWdpbnQiID8gImVpcDE1NTkiIDogImxlZ2FjeSI7CiAgICAgIH0KICAgIH0KICAgIGlmIChwYXJhbWV0ZXJzLmluY2x1ZGVzKCJmZWVzIikpIHsKICAgICAgaWYgKHJlcXVlc3QudHlwZSAhPT0gImxlZ2FjeSIgJiYgcmVxdWVzdC50eXBlICE9PSAiZWlwMjkzMCIpIHsKICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3QubWF4RmVlUGVyR2FzID09PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgcmVxdWVzdC5tYXhQcmlvcml0eUZlZVBlckdhcyA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIGNvbnN0IGJsb2NrMiA9IGF3YWl0IGdldEJsb2NrMigpOwogICAgICAgICAgY29uc3QgeyBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzIH0gPSBhd2FpdCBpbnRlcm5hbF9lc3RpbWF0ZUZlZXNQZXJHYXMoY2xpZW50LCB7CiAgICAgICAgICAgIGJsb2NrOiBibG9jazIsCiAgICAgICAgICAgIGNoYWluLAogICAgICAgICAgICByZXF1ZXN0CiAgICAgICAgICB9KTsKICAgICAgICAgIGlmICh0eXBlb2YgYXJncy5tYXhQcmlvcml0eUZlZVBlckdhcyA9PT0gInVuZGVmaW5lZCIgJiYgYXJncy5tYXhGZWVQZXJHYXMgJiYgYXJncy5tYXhGZWVQZXJHYXMgPCBtYXhQcmlvcml0eUZlZVBlckdhcykKICAgICAgICAgICAgdGhyb3cgbmV3IE1heEZlZVBlckdhc1Rvb0xvd0Vycm9yKHsKICAgICAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhcwogICAgICAgICAgICB9KTsKICAgICAgICAgIHJlcXVlc3QubWF4UHJpb3JpdHlGZWVQZXJHYXMgPSBtYXhQcmlvcml0eUZlZVBlckdhczsKICAgICAgICAgIHJlcXVlc3QubWF4RmVlUGVyR2FzID0gbWF4RmVlUGVyR2FzOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAodHlwZW9mIGFyZ3MubWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgYXJncy5tYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgICB0aHJvdyBuZXcgRWlwMTU1OUZlZXNOb3RTdXBwb3J0ZWRFcnJvcigpOwogICAgICAgIGNvbnN0IGJsb2NrMiA9IGF3YWl0IGdldEJsb2NrMigpOwogICAgICAgIGNvbnN0IHsgZ2FzUHJpY2U6IGdhc1ByaWNlXyB9ID0gYXdhaXQgaW50ZXJuYWxfZXN0aW1hdGVGZWVzUGVyR2FzKGNsaWVudCwgewogICAgICAgICAgYmxvY2s6IGJsb2NrMiwKICAgICAgICAgIGNoYWluLAogICAgICAgICAgcmVxdWVzdCwKICAgICAgICAgIHR5cGU6ICJsZWdhY3kiCiAgICAgICAgfSk7CiAgICAgICAgcmVxdWVzdC5nYXNQcmljZSA9IGdhc1ByaWNlXzsKICAgICAgfQogICAgfQogICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoImdhcyIpICYmIHR5cGVvZiBnYXMgPT09ICJ1bmRlZmluZWQiKQogICAgICByZXF1ZXN0LmdhcyA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGVzdGltYXRlR2FzLCAiZXN0aW1hdGVHYXMiKSh7CiAgICAgICAgLi4ucmVxdWVzdCwKICAgICAgICBhY2NvdW50OiBhY2NvdW50ID8geyBhZGRyZXNzOiBhY2NvdW50LmFkZHJlc3MsIHR5cGU6ICJqc29uLXJwYyIgfSA6IHZvaWQgMAogICAgICB9KTsKICAgIGFzc2VydFJlcXVlc3QocmVxdWVzdCk7CiAgICBkZWxldGUgcmVxdWVzdC5wYXJhbWV0ZXJzOwogICAgcmV0dXJuIHJlcXVlc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEJhbGFuY2UuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0QmFsYW5jZShjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tOdW1iZXIsIGJsb2NrVGFnID0gImxhdGVzdCIgfSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgIGNvbnN0IGJhbGFuY2UgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRCYWxhbmNlIiwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWddCiAgICB9KTsKICAgIHJldHVybiBCaWdJbnQoYmFsYW5jZSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2VzdGltYXRlR2FzLmpzCiAgYXN5bmMgZnVuY3Rpb24gZXN0aW1hdGVHYXMoY2xpZW50LCBhcmdzKSB7CiAgICBjb25zdCBhY2NvdW50XyA9IGFyZ3MuYWNjb3VudCA/PyBjbGllbnQuYWNjb3VudDsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICB0cnkgewogICAgICBsZXQgZXN0aW1hdGVHYXNfcnBjID0gZnVuY3Rpb24ocGFyYW1ldGVycykgewogICAgICAgIGNvbnN0IHsgYmxvY2s6IGJsb2NrMiwgcmVxdWVzdDogcmVxdWVzdDIsIHJwY1N0YXRlT3ZlcnJpZGU6IHJwY1N0YXRlT3ZlcnJpZGUyIH0gPSBwYXJhbWV0ZXJzOwogICAgICAgIHJldHVybiBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgICBtZXRob2Q6ICJldGhfZXN0aW1hdGVHYXMiLAogICAgICAgICAgcGFyYW1zOiBycGNTdGF0ZU92ZXJyaWRlMiA/IFtyZXF1ZXN0MiwgYmxvY2syID8/ICJsYXRlc3QiLCBycGNTdGF0ZU92ZXJyaWRlMl0gOiBibG9jazIgPyBbcmVxdWVzdDIsIGJsb2NrMl0gOiBbcmVxdWVzdDJdCiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIGNvbnN0IHsgYWNjZXNzTGlzdCwgYXV0aG9yaXphdGlvbkxpc3QsIGJsb2JzLCBibG9iVmVyc2lvbmVkSGFzaGVzLCBibG9ja051bWJlciwgYmxvY2tUYWcsIGRhdGEsIGdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckJsb2JHYXMsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIG5vbmNlLCB2YWx1ZSwgc3RhdGVPdmVycmlkZSwgLi4ucmVzdCB9ID0gYXdhaXQgcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdChjbGllbnQsIHsKICAgICAgICAuLi5hcmdzLAogICAgICAgIHBhcmFtZXRlcnM6ICgKICAgICAgICAgIC8vIFNvbWUgUlBDIFByb3ZpZGVycyBkbyBub3QgY29tcHV0ZSB2ZXJzaW9uZWQgaGFzaGVzIGZyb20gYmxvYnMuIFdlIHdpbGwgbmVlZAogICAgICAgICAgLy8gdG8gY29tcHV0ZSB0aGVtLgogICAgICAgICAgYWNjb3VudD8udHlwZSA9PT0gImxvY2FsIiA/IHZvaWQgMCA6IFsiYmxvYlZlcnNpb25lZEhhc2hlcyJdCiAgICAgICAgKQogICAgICB9KTsKICAgICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgICAgY29uc3QgYmxvY2sgPSBibG9ja051bWJlckhleCB8fCBibG9ja1RhZzsKICAgICAgY29uc3QgcnBjU3RhdGVPdmVycmlkZSA9IHNlcmlhbGl6ZVN0YXRlT3ZlcnJpZGUoc3RhdGVPdmVycmlkZSk7CiAgICAgIGNvbnN0IHRvID0gYXdhaXQgKGFzeW5jICgpID0+IHsKICAgICAgICBpZiAocmVzdC50bykKICAgICAgICAgIHJldHVybiByZXN0LnRvOwogICAgICAgIGlmIChhdXRob3JpemF0aW9uTGlzdCAmJiBhdXRob3JpemF0aW9uTGlzdC5sZW5ndGggPiAwKQogICAgICAgICAgcmV0dXJuIGF3YWl0IHJlY292ZXJBdXRob3JpemF0aW9uQWRkcmVzcyh7CiAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGF1dGhvcml6YXRpb25MaXN0WzBdCiAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgdG9gIGlzIHJlcXVpcmVkLiBDb3VsZCBub3QgaW5mZXIgZnJvbSBgYXV0aG9yaXphdGlvbkxpc3RgIik7CiAgICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9KSgpOwogICAgICBhc3NlcnRSZXF1ZXN0KGFyZ3MpOwogICAgICBjb25zdCBjaGFpbkZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb25SZXF1ZXN0Py5mb3JtYXQ7CiAgICAgIGNvbnN0IGZvcm1hdCA9IGNoYWluRm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgICAgY29uc3QgcmVxdWVzdCA9IGZvcm1hdCh7CiAgICAgICAgLy8gUGljayBvdXQgZXh0cmEgZGF0YSB0aGF0IG1pZ2h0IGV4aXN0IG9uIHRoZSBjaGFpbidzIHRyYW5zYWN0aW9uIHJlcXVlc3QgdHlwZS4KICAgICAgICAuLi5leHRyYWN0KHJlc3QsIHsgZm9ybWF0OiBjaGFpbkZvcm1hdCB9KSwKICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgIGFjY2Vzc0xpc3QsCiAgICAgICAgYXV0aG9yaXphdGlvbkxpc3QsCiAgICAgICAgYmxvYnMsCiAgICAgICAgYmxvYlZlcnNpb25lZEhhc2hlcywKICAgICAgICBkYXRhLAogICAgICAgIGdhcywKICAgICAgICBnYXNQcmljZSwKICAgICAgICBtYXhGZWVQZXJCbG9iR2FzLAogICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhcywKICAgICAgICBub25jZSwKICAgICAgICB0bywKICAgICAgICB2YWx1ZQogICAgICB9KTsKICAgICAgbGV0IGVzdGltYXRlID0gQmlnSW50KGF3YWl0IGVzdGltYXRlR2FzX3JwYyh7IGJsb2NrLCByZXF1ZXN0LCBycGNTdGF0ZU92ZXJyaWRlIH0pKTsKICAgICAgaWYgKGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICAgICAgY29uc3QgdmFsdWUyID0gYXdhaXQgZ2V0QmFsYW5jZShjbGllbnQsIHsgYWRkcmVzczogcmVxdWVzdC5mcm9tIH0pOwogICAgICAgIGNvbnN0IGVzdGltYXRlcyA9IGF3YWl0IFByb21pc2UuYWxsKGF1dGhvcml6YXRpb25MaXN0Lm1hcChhc3luYyAoYXV0aG9yaXphdGlvbikgPT4gewogICAgICAgICAgY29uc3QgeyBjb250cmFjdEFkZHJlc3MgfSA9IGF1dGhvcml6YXRpb247CiAgICAgICAgICBjb25zdCBlc3RpbWF0ZTIgPSBhd2FpdCBlc3RpbWF0ZUdhc19ycGMoewogICAgICAgICAgICBibG9jaywKICAgICAgICAgICAgcmVxdWVzdDogewogICAgICAgICAgICAgIGF1dGhvcml6YXRpb25MaXN0OiB2b2lkIDAsCiAgICAgICAgICAgICAgZGF0YSwKICAgICAgICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgICAgICAgIHRvOiBjb250cmFjdEFkZHJlc3MsCiAgICAgICAgICAgICAgdmFsdWU6IG51bWJlclRvSGV4KHZhbHVlMikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcnBjU3RhdGVPdmVycmlkZQogICAgICAgICAgfSkuY2F0Y2goKCkgPT4gMTAwMDAwbik7CiAgICAgICAgICByZXR1cm4gMm4gKiBCaWdJbnQoZXN0aW1hdGUyKTsKICAgICAgICB9KSk7CiAgICAgICAgZXN0aW1hdGUgKz0gZXN0aW1hdGVzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLCAwbik7CiAgICAgIH0KICAgICAgcmV0dXJuIGVzdGltYXRlOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIHRocm93IGdldEVzdGltYXRlR2FzRXJyb3IoZXJyLCB7CiAgICAgICAgLi4uYXJncywKICAgICAgICBhY2NvdW50LAogICAgICAgIGNoYWluOiBjbGllbnQuY2hhaW4KICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2VzdGltYXRlQ29udHJhY3RHYXMuanMKICBhc3luYyBmdW5jdGlvbiBlc3RpbWF0ZUNvbnRyYWN0R2FzKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGZ1bmN0aW9uTmFtZSwgLi4ucmVxdWVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVGdW5jdGlvbkRhdGEoewogICAgICBhYmk6IGFiaTIsCiAgICAgIGFyZ3MsCiAgICAgIGZ1bmN0aW9uTmFtZQogICAgfSk7CiAgICB0cnkgewogICAgICBjb25zdCBnYXMgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBlc3RpbWF0ZUdhcywgImVzdGltYXRlR2FzIikoewogICAgICAgIGRhdGEsCiAgICAgICAgdG86IGFkZHJlc3MsCiAgICAgICAgLi4ucmVxdWVzdAogICAgICB9KTsKICAgICAgcmV0dXJuIGdhczsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnN0IGFjY291bnQgPSByZXF1ZXN0LmFjY291bnQgPyBwYXJzZUFjY291bnQocmVxdWVzdC5hY2NvdW50KSA6IHZvaWQgMDsKICAgICAgdGhyb3cgZ2V0Q29udHJhY3RFcnJvcihlcnJvciwgewogICAgICAgIGFiaTogYWJpMiwKICAgICAgICBhZGRyZXNzLAogICAgICAgIGFyZ3MsCiAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9jb250cmFjdC9lc3RpbWF0ZUNvbnRyYWN0R2FzIiwKICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgc2VuZGVyOiBhY2NvdW50Py5hZGRyZXNzCiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRDb250cmFjdEV2ZW50cy5qcwogIGluaXRfZ2V0QWJpSXRlbSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9wYXJzZUV2ZW50TG9ncy5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9pc0FkZHJlc3NFcXVhbCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfa2VjY2FrMjU2KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZUV2ZW50TG9nLmpzCiAgaW5pdF9hYmkoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvRXZlbnRTZWxlY3RvcigpOwogIGluaXRfY3Vyc29yKCk7CiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9mb3JtYXRBYmlJdGVtMigpOwogIHZhciBkb2NzUGF0aDMgPSAiL2RvY3MvY29udHJhY3QvZGVjb2RlRXZlbnRMb2ciOwogIGZ1bmN0aW9uIGRlY29kZUV2ZW50TG9nKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBkYXRhLCBzdHJpY3Q6IHN0cmljdF8sIHRvcGljcyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHN0cmljdCA9IHN0cmljdF8gPz8gdHJ1ZTsKICAgIGNvbnN0IFtzaWduYXR1cmUsIC4uLmFyZ1RvcGljc10gPSB0b3BpY3M7CiAgICBpZiAoIXNpZ25hdHVyZSkKICAgICAgdGhyb3cgbmV3IEFiaUV2ZW50U2lnbmF0dXJlRW1wdHlUb3BpY3NFcnJvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDMgfSk7CiAgICBjb25zdCBhYmlJdGVtID0gYWJpMi5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICJldmVudCIgJiYgc2lnbmF0dXJlID09PSB0b0V2ZW50U2VsZWN0b3IoZm9ybWF0QWJpSXRlbTIoeCkpKTsKICAgIGlmICghKGFiaUl0ZW0gJiYgIm5hbWUiIGluIGFiaUl0ZW0pIHx8IGFiaUl0ZW0udHlwZSAhPT0gImV2ZW50IikKICAgICAgdGhyb3cgbmV3IEFiaUV2ZW50U2lnbmF0dXJlTm90Rm91bmRFcnJvcihzaWduYXR1cmUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoMyB9KTsKICAgIGNvbnN0IHsgbmFtZSwgaW5wdXRzIH0gPSBhYmlJdGVtOwogICAgY29uc3QgaXNVbm5hbWVkID0gaW5wdXRzPy5zb21lKCh4KSA9PiAhKCJuYW1lIiBpbiB4ICYmIHgubmFtZSkpOwogICAgbGV0IGFyZ3MgPSBpc1VubmFtZWQgPyBbXSA6IHt9OwogICAgY29uc3QgaW5kZXhlZElucHV0cyA9IGlucHV0cy5maWx0ZXIoKHgpID0+ICJpbmRleGVkIiBpbiB4ICYmIHguaW5kZXhlZCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4ZWRJbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgcGFyYW0gPSBpbmRleGVkSW5wdXRzW2ldOwogICAgICBjb25zdCB0b3BpYyA9IGFyZ1RvcGljc1tpXTsKICAgICAgaWYgKCF0b3BpYykKICAgICAgICB0aHJvdyBuZXcgRGVjb2RlTG9nVG9waWNzTWlzbWF0Y2goewogICAgICAgICAgYWJpSXRlbSwKICAgICAgICAgIHBhcmFtCiAgICAgICAgfSk7CiAgICAgIGFyZ3NbaXNVbm5hbWVkID8gaSA6IHBhcmFtLm5hbWUgfHwgaV0gPSBkZWNvZGVUb3BpYyh7IHBhcmFtLCB2YWx1ZTogdG9waWMgfSk7CiAgICB9CiAgICBjb25zdCBub25JbmRleGVkSW5wdXRzID0gaW5wdXRzLmZpbHRlcigoeCkgPT4gISgiaW5kZXhlZCIgaW4geCAmJiB4LmluZGV4ZWQpKTsKICAgIGlmIChub25JbmRleGVkSW5wdXRzLmxlbmd0aCA+IDApIHsKICAgICAgaWYgKGRhdGEgJiYgZGF0YSAhPT0gIjB4IikgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IGRlY29kZUFiaVBhcmFtZXRlcnMobm9uSW5kZXhlZElucHV0cywgZGF0YSk7CiAgICAgICAgICBpZiAoZGVjb2RlZERhdGEpIHsKICAgICAgICAgICAgaWYgKGlzVW5uYW1lZCkKICAgICAgICAgICAgICBhcmdzID0gWy4uLmFyZ3MsIC4uLmRlY29kZWREYXRhXTsKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub25JbmRleGVkSW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBhcmdzW25vbkluZGV4ZWRJbnB1dHNbaV0ubmFtZV0gPSBkZWNvZGVkRGF0YVtpXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGlmIChzdHJpY3QpIHsKICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yIHx8IGVyciBpbnN0YW5jZW9mIFBvc2l0aW9uT3V0T2ZCb3VuZHNFcnJvcikKICAgICAgICAgICAgICB0aHJvdyBuZXcgRGVjb2RlTG9nRGF0YU1pc21hdGNoKHsKICAgICAgICAgICAgICAgIGFiaUl0ZW0sCiAgICAgICAgICAgICAgICBkYXRhLAogICAgICAgICAgICAgICAgcGFyYW1zOiBub25JbmRleGVkSW5wdXRzLAogICAgICAgICAgICAgICAgc2l6ZTogc2l6ZShkYXRhKQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHN0cmljdCkgewogICAgICAgIHRocm93IG5ldyBEZWNvZGVMb2dEYXRhTWlzbWF0Y2goewogICAgICAgICAgYWJpSXRlbSwKICAgICAgICAgIGRhdGE6ICIweCIsCiAgICAgICAgICBwYXJhbXM6IG5vbkluZGV4ZWRJbnB1dHMsCiAgICAgICAgICBzaXplOiAwCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB7CiAgICAgIGV2ZW50TmFtZTogbmFtZSwKICAgICAgYXJnczogT2JqZWN0LnZhbHVlcyhhcmdzKS5sZW5ndGggPiAwID8gYXJncyA6IHZvaWQgMAogICAgfTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlVG9waWMoeyBwYXJhbSwgdmFsdWUgfSkgewogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJzdHJpbmciIHx8IHBhcmFtLnR5cGUgPT09ICJieXRlcyIgfHwgcGFyYW0udHlwZSA9PT0gInR1cGxlIiB8fCBwYXJhbS50eXBlLm1hdGNoKC9eKC4qKVxbKFxkKyk/XF0kLykpCiAgICAgIHJldHVybiB2YWx1ZTsKICAgIGNvbnN0IGRlY29kZWRBcmcgPSBkZWNvZGVBYmlQYXJhbWV0ZXJzKFtwYXJhbV0sIHZhbHVlKSB8fCBbXTsKICAgIHJldHVybiBkZWNvZGVkQXJnWzBdOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvcGFyc2VFdmVudExvZ3MuanMKICBpbml0X2dldEFiaUl0ZW0oKTsKICBmdW5jdGlvbiBwYXJzZUV2ZW50TG9ncyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYXJncywgbG9ncywgc3RyaWN0ID0gdHJ1ZSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGV2ZW50TmFtZSA9ICgoKSA9PiB7CiAgICAgIGlmICghcGFyYW1ldGVycy5ldmVudE5hbWUpCiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1ldGVycy5ldmVudE5hbWUpKQogICAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmV2ZW50TmFtZTsKICAgICAgcmV0dXJuIFtwYXJhbWV0ZXJzLmV2ZW50TmFtZV07CiAgICB9KSgpOwogICAgcmV0dXJuIGxvZ3MubWFwKChsb2cpID0+IHsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBhYmlJdGVtID0gZ2V0QWJpSXRlbSh7CiAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICBuYW1lOiBsb2cudG9waWNzWzBdCiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFhYmlJdGVtKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgY29uc3QgZXZlbnQgPSBkZWNvZGVFdmVudExvZyh7CiAgICAgICAgICAuLi5sb2csCiAgICAgICAgICBhYmk6IFthYmlJdGVtXSwKICAgICAgICAgIHN0cmljdAogICAgICAgIH0pOwogICAgICAgIGlmIChldmVudE5hbWUgJiYgIWV2ZW50TmFtZS5pbmNsdWRlcyhldmVudC5ldmVudE5hbWUpKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKCFpbmNsdWRlc0FyZ3MoewogICAgICAgICAgYXJnczogZXZlbnQuYXJncywKICAgICAgICAgIGlucHV0czogYWJpSXRlbS5pbnB1dHMsCiAgICAgICAgICBtYXRjaEFyZ3M6IGFyZ3MKICAgICAgICB9KSkKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIHJldHVybiB7IC4uLmV2ZW50LCAuLi5sb2cgfTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgbGV0IGV2ZW50TmFtZTI7CiAgICAgICAgbGV0IGlzVW5uYW1lZDsKICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgQWJpRXZlbnRTaWduYXR1cmVOb3RGb3VuZEVycm9yKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIERlY29kZUxvZ0RhdGFNaXNtYXRjaCB8fCBlcnIgaW5zdGFuY2VvZiBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCkgewogICAgICAgICAgaWYgKHN0cmljdCkKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICBldmVudE5hbWUyID0gZXJyLmFiaUl0ZW0ubmFtZTsKICAgICAgICAgIGlzVW5uYW1lZCA9IGVyci5hYmlJdGVtLmlucHV0cz8uc29tZSgoeCkgPT4gISgibmFtZSIgaW4geCAmJiB4Lm5hbWUpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgLi4ubG9nLCBhcmdzOiBpc1VubmFtZWQgPyBbXSA6IHt9LCBldmVudE5hbWU6IGV2ZW50TmFtZTIgfTsKICAgICAgfQogICAgfSkuZmlsdGVyKEJvb2xlYW4pOwogIH0KICBmdW5jdGlvbiBpbmNsdWRlc0FyZ3MocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhcmdzLCBpbnB1dHMsIG1hdGNoQXJncyB9ID0gcGFyYW1ldGVyczsKICAgIGlmICghbWF0Y2hBcmdzKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICghYXJncykKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZnVuY3Rpb24gaXNFcXVhbChpbnB1dCwgdmFsdWUsIGFyZykgewogICAgICB0cnkgewogICAgICAgIGlmIChpbnB1dC50eXBlID09PSAiYWRkcmVzcyIpCiAgICAgICAgICByZXR1cm4gaXNBZGRyZXNzRXF1YWwodmFsdWUsIGFyZyk7CiAgICAgICAgaWYgKGlucHV0LnR5cGUgPT09ICJzdHJpbmciIHx8IGlucHV0LnR5cGUgPT09ICJieXRlcyIpCiAgICAgICAgICByZXR1cm4ga2VjY2FrMjU2KHRvQnl0ZXModmFsdWUpKSA9PT0gYXJnOwogICAgICAgIHJldHVybiB2YWx1ZSA9PT0gYXJnOwogICAgICB9IGNhdGNoIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3MpICYmIEFycmF5LmlzQXJyYXkobWF0Y2hBcmdzKSkgewogICAgICByZXR1cm4gbWF0Y2hBcmdzLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgyKSA9PiB7CiAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRzW2luZGV4Ml07CiAgICAgICAgaWYgKCFpbnB1dCkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBjb25zdCB2YWx1ZV8gPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTsKICAgICAgICByZXR1cm4gdmFsdWVfLnNvbWUoKHZhbHVlMikgPT4gaXNFcXVhbChpbnB1dCwgdmFsdWUyLCBhcmdzW2luZGV4Ml0pKTsKICAgICAgfSk7CiAgICB9CiAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICJvYmplY3QiICYmICFBcnJheS5pc0FycmF5KGFyZ3MpICYmIHR5cGVvZiBtYXRjaEFyZ3MgPT09ICJvYmplY3QiICYmICFBcnJheS5pc0FycmF5KG1hdGNoQXJncykpCiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhtYXRjaEFyZ3MpLmV2ZXJ5KChba2V5LCB2YWx1ZV0pID0+IHsKICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dHMuZmluZCgoaW5wdXQyKSA9PiBpbnB1dDIubmFtZSA9PT0ga2V5KTsKICAgICAgICBpZiAoIWlucHV0KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGNvbnN0IHZhbHVlXyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdOwogICAgICAgIHJldHVybiB2YWx1ZV8uc29tZSgodmFsdWUyKSA9PiBpc0VxdWFsKGlucHV0LCB2YWx1ZTIsIGFyZ3Nba2V5XSkpOwogICAgICB9KTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0TG9ncy5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2xvZy5qcwogIGZ1bmN0aW9uIGZvcm1hdExvZyhsb2csIHsgYXJncywgZXZlbnROYW1lIH0gPSB7fSkgewogICAgcmV0dXJuIHsKICAgICAgLi4ubG9nLAogICAgICBibG9ja0hhc2g6IGxvZy5ibG9ja0hhc2ggPyBsb2cuYmxvY2tIYXNoIDogbnVsbCwKICAgICAgYmxvY2tOdW1iZXI6IGxvZy5ibG9ja051bWJlciA/IEJpZ0ludChsb2cuYmxvY2tOdW1iZXIpIDogbnVsbCwKICAgICAgbG9nSW5kZXg6IGxvZy5sb2dJbmRleCA/IE51bWJlcihsb2cubG9nSW5kZXgpIDogbnVsbCwKICAgICAgdHJhbnNhY3Rpb25IYXNoOiBsb2cudHJhbnNhY3Rpb25IYXNoID8gbG9nLnRyYW5zYWN0aW9uSGFzaCA6IG51bGwsCiAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IGxvZy50cmFuc2FjdGlvbkluZGV4ID8gTnVtYmVyKGxvZy50cmFuc2FjdGlvbkluZGV4KSA6IG51bGwsCiAgICAgIC4uLmV2ZW50TmFtZSA/IHsgYXJncywgZXZlbnROYW1lIH0gOiB7fQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0TG9ncy5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldExvZ3MoY2xpZW50LCB7IGFkZHJlc3MsIGJsb2NrSGFzaCwgZnJvbUJsb2NrLCB0b0Jsb2NrLCBldmVudCwgZXZlbnRzOiBldmVudHNfLCBhcmdzLCBzdHJpY3Q6IHN0cmljdF8gfSA9IHt9KSB7CiAgICBjb25zdCBzdHJpY3QgPSBzdHJpY3RfID8/IGZhbHNlOwogICAgY29uc3QgZXZlbnRzID0gZXZlbnRzXyA/PyAoZXZlbnQgPyBbZXZlbnRdIDogdm9pZCAwKTsKICAgIGxldCB0b3BpY3MgPSBbXTsKICAgIGlmIChldmVudHMpIHsKICAgICAgY29uc3QgZW5jb2RlZCA9IGV2ZW50cy5mbGF0TWFwKChldmVudDIpID0+IGVuY29kZUV2ZW50VG9waWNzKHsKICAgICAgICBhYmk6IFtldmVudDJdLAogICAgICAgIGV2ZW50TmFtZTogZXZlbnQyLm5hbWUsCiAgICAgICAgYXJnczogZXZlbnRzXyA/IHZvaWQgMCA6IGFyZ3MKICAgICAgfSkpOwogICAgICB0b3BpY3MgPSBbZW5jb2RlZF07CiAgICAgIGlmIChldmVudCkKICAgICAgICB0b3BpY3MgPSB0b3BpY3NbMF07CiAgICB9CiAgICBsZXQgbG9nczsKICAgIGlmIChibG9ja0hhc2gpIHsKICAgICAgbG9ncyA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0TG9ncyIsCiAgICAgICAgcGFyYW1zOiBbeyBhZGRyZXNzLCB0b3BpY3MsIGJsb2NrSGFzaCB9XQogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGxvZ3MgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXRoX2dldExvZ3MiLAogICAgICAgIHBhcmFtczogWwogICAgICAgICAgewogICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICB0b3BpY3MsCiAgICAgICAgICAgIGZyb21CbG9jazogdHlwZW9mIGZyb21CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleChmcm9tQmxvY2spIDogZnJvbUJsb2NrLAogICAgICAgICAgICB0b0Jsb2NrOiB0eXBlb2YgdG9CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleCh0b0Jsb2NrKSA6IHRvQmxvY2sKICAgICAgICAgIH0KICAgICAgICBdCiAgICAgIH0pOwogICAgfQogICAgY29uc3QgZm9ybWF0dGVkTG9ncyA9IGxvZ3MubWFwKChsb2cpID0+IGZvcm1hdExvZyhsb2cpKTsKICAgIGlmICghZXZlbnRzKQogICAgICByZXR1cm4gZm9ybWF0dGVkTG9nczsKICAgIHJldHVybiBwYXJzZUV2ZW50TG9ncyh7CiAgICAgIGFiaTogZXZlbnRzLAogICAgICBhcmdzLAogICAgICBsb2dzOiBmb3JtYXR0ZWRMb2dzLAogICAgICBzdHJpY3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRDb250cmFjdEV2ZW50cy5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldENvbnRyYWN0RXZlbnRzKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGJsb2NrSGFzaCwgZXZlbnROYW1lLCBmcm9tQmxvY2ssIHRvQmxvY2ssIHN0cmljdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGV2ZW50ID0gZXZlbnROYW1lID8gZ2V0QWJpSXRlbSh7IGFiaTogYWJpMiwgbmFtZTogZXZlbnROYW1lIH0pIDogdm9pZCAwOwogICAgY29uc3QgZXZlbnRzID0gIWV2ZW50ID8gYWJpMi5maWx0ZXIoKHgpID0+IHgudHlwZSA9PT0gImV2ZW50IikgOiB2b2lkIDA7CiAgICByZXR1cm4gZ2V0QWN0aW9uKGNsaWVudCwgZ2V0TG9ncywgImdldExvZ3MiKSh7CiAgICAgIGFkZHJlc3MsCiAgICAgIGFyZ3MsCiAgICAgIGJsb2NrSGFzaCwKICAgICAgZXZlbnQsCiAgICAgIGV2ZW50cywKICAgICAgZnJvbUJsb2NrLAogICAgICB0b0Jsb2NrLAogICAgICBzdHJpY3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9yZWFkQ29udHJhY3QuanMKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2NhbGwoKTsKICBhc3luYyBmdW5jdGlvbiByZWFkQ29udHJhY3QoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYWRkcmVzcywgYXJncywgZnVuY3Rpb25OYW1lLCAuLi5yZXN0IH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgY2FsbGRhdGEgPSBlbmNvZGVGdW5jdGlvbkRhdGEoewogICAgICBhYmk6IGFiaTIsCiAgICAgIGFyZ3MsCiAgICAgIGZ1bmN0aW9uTmFtZQogICAgfSk7CiAgICB0cnkgewogICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGNhbGwsICJjYWxsIikoewogICAgICAgIC4uLnJlc3QsCiAgICAgICAgZGF0YTogY2FsbGRhdGEsCiAgICAgICAgdG86IGFkZHJlc3MKICAgICAgfSk7CiAgICAgIHJldHVybiBkZWNvZGVGdW5jdGlvblJlc3VsdCh7CiAgICAgICAgYWJpOiBhYmkyLAogICAgICAgIGFyZ3MsCiAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgIGRhdGE6IGRhdGEgfHwgIjB4IgogICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHRocm93IGdldENvbnRyYWN0RXJyb3IoZXJyb3IsIHsKICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3QvcmVhZENvbnRyYWN0IiwKICAgICAgICBmdW5jdGlvbk5hbWUKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3NpbXVsYXRlQ29udHJhY3QuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGluaXRfZGVjb2RlRnVuY3Rpb25SZXN1bHQoKTsKICBpbml0X2VuY29kZUZ1bmN0aW9uRGF0YSgpOwogIGluaXRfY2FsbCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNpbXVsYXRlQ29udHJhY3QoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYWRkcmVzcywgYXJncywgZGF0YVN1ZmZpeCwgZnVuY3Rpb25OYW1lLCAuLi5jYWxsUmVxdWVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGFjY291bnQgPSBjYWxsUmVxdWVzdC5hY2NvdW50ID8gcGFyc2VBY2NvdW50KGNhbGxSZXF1ZXN0LmFjY291bnQpIDogY2xpZW50LmFjY291bnQ7CiAgICBjb25zdCBjYWxsZGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7IGFiaTogYWJpMiwgYXJncywgZnVuY3Rpb25OYW1lIH0pOwogICAgdHJ5IHsKICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBjYWxsLCAiY2FsbCIpKHsKICAgICAgICBiYXRjaDogZmFsc2UsCiAgICAgICAgZGF0YTogYCR7Y2FsbGRhdGF9JHtkYXRhU3VmZml4ID8gZGF0YVN1ZmZpeC5yZXBsYWNlKCIweCIsICIiKSA6ICIifWAsCiAgICAgICAgdG86IGFkZHJlc3MsCiAgICAgICAgLi4uY2FsbFJlcXVlc3QsCiAgICAgICAgYWNjb3VudAogICAgICB9KTsKICAgICAgY29uc3QgcmVzdWx0ID0gZGVjb2RlRnVuY3Rpb25SZXN1bHQoewogICAgICAgIGFiaTogYWJpMiwKICAgICAgICBhcmdzLAogICAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgICBkYXRhOiBkYXRhIHx8ICIweCIKICAgICAgfSk7CiAgICAgIGNvbnN0IG1pbmltaXplZEFiaSA9IGFiaTIuZmlsdGVyKChhYmlJdGVtKSA9PiAibmFtZSIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLm5hbWUgPT09IHBhcmFtZXRlcnMuZnVuY3Rpb25OYW1lKTsKICAgICAgcmV0dXJuIHsKICAgICAgICByZXN1bHQsCiAgICAgICAgcmVxdWVzdDogewogICAgICAgICAgYWJpOiBtaW5pbWl6ZWRBYmksCiAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgYXJncywKICAgICAgICAgIGRhdGFTdWZmaXgsCiAgICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgICAuLi5jYWxsUmVxdWVzdCwKICAgICAgICAgIGFjY291bnQKICAgICAgICB9CiAgICAgIH07CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICB0aHJvdyBnZXRDb250cmFjdEVycm9yKGVycm9yLCB7CiAgICAgICAgYWJpOiBhYmkyLAogICAgICAgIGFkZHJlc3MsCiAgICAgICAgYXJncywKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L3NpbXVsYXRlQ29udHJhY3QiLAogICAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgICBzZW5kZXI6IGFjY291bnQ/LmFkZHJlc3MKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3dhdGNoQ29udHJhY3RFdmVudC5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9ycGMoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9vYnNlcnZlLmpzCiAgdmFyIGxpc3RlbmVyc0NhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICB2YXIgY2xlYW51cENhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICB2YXIgY2FsbGJhY2tDb3VudCA9IDA7CiAgZnVuY3Rpb24gb2JzZXJ2ZShvYnNlcnZlcklkLCBjYWxsYmFja3MsIGZuKSB7CiAgICBjb25zdCBjYWxsYmFja0lkID0gKytjYWxsYmFja0NvdW50OwogICAgY29uc3QgZ2V0TGlzdGVuZXJzID0gKCkgPT4gbGlzdGVuZXJzQ2FjaGUuZ2V0KG9ic2VydmVySWQpIHx8IFtdOwogICAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGxpc3RlbmVyczIgPSBnZXRMaXN0ZW5lcnMoKTsKICAgICAgbGlzdGVuZXJzQ2FjaGUuc2V0KG9ic2VydmVySWQsIGxpc3RlbmVyczIuZmlsdGVyKChjYikgPT4gY2IuaWQgIT09IGNhbGxiYWNrSWQpKTsKICAgIH07CiAgICBjb25zdCB1bndhdGNoID0gKCkgPT4gewogICAgICBjb25zdCBjbGVhbnVwMiA9IGNsZWFudXBDYWNoZS5nZXQob2JzZXJ2ZXJJZCk7CiAgICAgIGlmIChnZXRMaXN0ZW5lcnMoKS5sZW5ndGggPT09IDEgJiYgY2xlYW51cDIpCiAgICAgICAgY2xlYW51cDIoKTsKICAgICAgdW5zdWJzY3JpYmUoKTsKICAgIH07CiAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnMoKTsKICAgIGxpc3RlbmVyc0NhY2hlLnNldChvYnNlcnZlcklkLCBbCiAgICAgIC4uLmxpc3RlbmVycywKICAgICAgeyBpZDogY2FsbGJhY2tJZCwgZm5zOiBjYWxsYmFja3MgfQogICAgXSk7CiAgICBpZiAobGlzdGVuZXJzICYmIGxpc3RlbmVycy5sZW5ndGggPiAwKQogICAgICByZXR1cm4gdW53YXRjaDsKICAgIGNvbnN0IGVtaXQgPSB7fTsKICAgIGZvciAoY29uc3Qga2V5IGluIGNhbGxiYWNrcykgewogICAgICBlbWl0W2tleV0gPSAoLi4uYXJncykgPT4gewogICAgICAgIGNvbnN0IGxpc3RlbmVyczIgPSBnZXRMaXN0ZW5lcnMoKTsKICAgICAgICBpZiAobGlzdGVuZXJzMi5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMyKQogICAgICAgICAgbGlzdGVuZXIuZm5zW2tleV0/LiguLi5hcmdzKTsKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IGNsZWFudXAgPSBmbihlbWl0KTsKICAgIGlmICh0eXBlb2YgY2xlYW51cCA9PT0gImZ1bmN0aW9uIikKICAgICAgY2xlYW51cENhY2hlLnNldChvYnNlcnZlcklkLCBjbGVhbnVwKTsKICAgIHJldHVybiB1bndhdGNoOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy93YWl0LmpzCiAgYXN5bmMgZnVuY3Rpb24gd2FpdCh0aW1lKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcykgPT4gc2V0VGltZW91dChyZXMsIHRpbWUpKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcG9sbC5qcwogIGZ1bmN0aW9uIHBvbGwoZm4sIHsgZW1pdE9uQmVnaW4sIGluaXRpYWxXYWl0VGltZSwgaW50ZXJ2YWwgfSkgewogICAgbGV0IGFjdGl2ZSA9IHRydWU7CiAgICBjb25zdCB1bndhdGNoID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICBjb25zdCB3YXRjaCA9IGFzeW5jICgpID0+IHsKICAgICAgbGV0IGRhdGEgPSB2b2lkIDA7CiAgICAgIGlmIChlbWl0T25CZWdpbikKICAgICAgICBkYXRhID0gYXdhaXQgZm4oeyB1bnBvbGw6IHVud2F0Y2ggfSk7CiAgICAgIGNvbnN0IGluaXRpYWxXYWl0ID0gYXdhaXQgaW5pdGlhbFdhaXRUaW1lPy4oZGF0YSkgPz8gaW50ZXJ2YWw7CiAgICAgIGF3YWl0IHdhaXQoaW5pdGlhbFdhaXQpOwogICAgICBjb25zdCBwb2xsMiA9IGFzeW5jICgpID0+IHsKICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBhd2FpdCBmbih7IHVucG9sbDogdW53YXRjaCB9KTsKICAgICAgICBhd2FpdCB3YWl0KGludGVydmFsKTsKICAgICAgICBwb2xsMigpOwogICAgICB9OwogICAgICBwb2xsMigpOwogICAgfTsKICAgIHdhdGNoKCk7CiAgICByZXR1cm4gdW53YXRjaDsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvd2F0Y2hDb250cmFjdEV2ZW50LmpzCiAgaW5pdF9zdHJpbmdpZnkoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9wcm9taXNlL3dpdGhDYWNoZS5qcwogIHZhciBwcm9taXNlQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIHZhciByZXNwb25zZUNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBmdW5jdGlvbiBnZXRDYWNoZShjYWNoZUtleTIpIHsKICAgIGNvbnN0IGJ1aWxkQ2FjaGUgPSAoY2FjaGVLZXkzLCBjYWNoZSkgPT4gKHsKICAgICAgY2xlYXI6ICgpID0+IGNhY2hlLmRlbGV0ZShjYWNoZUtleTMpLAogICAgICBnZXQ6ICgpID0+IGNhY2hlLmdldChjYWNoZUtleTMpLAogICAgICBzZXQ6IChkYXRhKSA9PiBjYWNoZS5zZXQoY2FjaGVLZXkzLCBkYXRhKQogICAgfSk7CiAgICBjb25zdCBwcm9taXNlID0gYnVpbGRDYWNoZShjYWNoZUtleTIsIHByb21pc2VDYWNoZSk7CiAgICBjb25zdCByZXNwb25zZSA9IGJ1aWxkQ2FjaGUoY2FjaGVLZXkyLCByZXNwb25zZUNhY2hlKTsKICAgIHJldHVybiB7CiAgICAgIGNsZWFyOiAoKSA9PiB7CiAgICAgICAgcHJvbWlzZS5jbGVhcigpOwogICAgICAgIHJlc3BvbnNlLmNsZWFyKCk7CiAgICAgIH0sCiAgICAgIHByb21pc2UsCiAgICAgIHJlc3BvbnNlCiAgICB9OwogIH0KICBhc3luYyBmdW5jdGlvbiB3aXRoQ2FjaGUoZm4sIHsgY2FjaGVLZXk6IGNhY2hlS2V5MiwgY2FjaGVUaW1lID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIH0pIHsKICAgIGNvbnN0IGNhY2hlID0gZ2V0Q2FjaGUoY2FjaGVLZXkyKTsKICAgIGNvbnN0IHJlc3BvbnNlID0gY2FjaGUucmVzcG9uc2UuZ2V0KCk7CiAgICBpZiAocmVzcG9uc2UgJiYgY2FjaGVUaW1lID4gMCkgewogICAgICBjb25zdCBhZ2UgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIHJlc3BvbnNlLmNyZWF0ZWQuZ2V0VGltZSgpOwogICAgICBpZiAoYWdlIDwgY2FjaGVUaW1lKQogICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhOwogICAgfQogICAgbGV0IHByb21pc2UgPSBjYWNoZS5wcm9taXNlLmdldCgpOwogICAgaWYgKCFwcm9taXNlKSB7CiAgICAgIHByb21pc2UgPSBmbigpOwogICAgICBjYWNoZS5wcm9taXNlLnNldChwcm9taXNlKTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwcm9taXNlOwogICAgICBjYWNoZS5yZXNwb25zZS5zZXQoeyBjcmVhdGVkOiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgZGF0YSB9KTsKICAgICAgcmV0dXJuIGRhdGE7CiAgICB9IGZpbmFsbHkgewogICAgICBjYWNoZS5wcm9taXNlLmNsZWFyKCk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEJsb2NrTnVtYmVyLmpzCiAgdmFyIGNhY2hlS2V5ID0gKGlkKSA9PiBgYmxvY2tOdW1iZXIuJHtpZH1gOwogIGFzeW5jIGZ1bmN0aW9uIGdldEJsb2NrTnVtYmVyKGNsaWVudCwgeyBjYWNoZVRpbWUgPSBjbGllbnQuY2FjaGVUaW1lIH0gPSB7fSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBhd2FpdCB3aXRoQ2FjaGUoKCkgPT4gY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfYmxvY2tOdW1iZXIiCiAgICB9KSwgeyBjYWNoZUtleTogY2FjaGVLZXkoY2xpZW50LnVpZCksIGNhY2hlVGltZSB9KTsKICAgIHJldHVybiBCaWdJbnQoYmxvY2tOdW1iZXJIZXgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRGaWx0ZXJDaGFuZ2VzLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0RmlsdGVyQ2hhbmdlcyhfY2xpZW50LCB7IGZpbHRlciB9KSB7CiAgICBjb25zdCBzdHJpY3QgPSAic3RyaWN0IiBpbiBmaWx0ZXIgJiYgZmlsdGVyLnN0cmljdDsKICAgIGNvbnN0IGxvZ3MgPSBhd2FpdCBmaWx0ZXIucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRGaWx0ZXJDaGFuZ2VzIiwKICAgICAgcGFyYW1zOiBbZmlsdGVyLmlkXQogICAgfSk7CiAgICBpZiAodHlwZW9mIGxvZ3NbMF0gPT09ICJzdHJpbmciKQogICAgICByZXR1cm4gbG9nczsKICAgIGNvbnN0IGZvcm1hdHRlZExvZ3MgPSBsb2dzLm1hcCgobG9nKSA9PiBmb3JtYXRMb2cobG9nKSk7CiAgICBpZiAoISgiYWJpIiBpbiBmaWx0ZXIpIHx8ICFmaWx0ZXIuYWJpKQogICAgICByZXR1cm4gZm9ybWF0dGVkTG9nczsKICAgIHJldHVybiBwYXJzZUV2ZW50TG9ncyh7CiAgICAgIGFiaTogZmlsdGVyLmFiaSwKICAgICAgbG9nczogZm9ybWF0dGVkTG9ncywKICAgICAgc3RyaWN0CiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvdW5pbnN0YWxsRmlsdGVyLmpzCiAgYXN5bmMgZnVuY3Rpb24gdW5pbnN0YWxsRmlsdGVyKF9jbGllbnQsIHsgZmlsdGVyIH0pIHsKICAgIHJldHVybiBmaWx0ZXIucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF91bmluc3RhbGxGaWx0ZXIiLAogICAgICBwYXJhbXM6IFtmaWx0ZXIuaWRdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvd2F0Y2hDb250cmFjdEV2ZW50LmpzCiAgZnVuY3Rpb24gd2F0Y2hDb250cmFjdEV2ZW50KGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGJhdGNoID0gdHJ1ZSwgZXZlbnROYW1lLCBmcm9tQmxvY2ssIG9uRXJyb3IsIG9uTG9ncywgcG9sbDogcG9sbF8sIHBvbGxpbmdJbnRlcnZhbCA9IGNsaWVudC5wb2xsaW5nSW50ZXJ2YWwsIHN0cmljdDogc3RyaWN0XyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGVuYWJsZVBvbGxpbmcgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIHBvbGxfICE9PSAidW5kZWZpbmVkIikKICAgICAgICByZXR1cm4gcG9sbF87CiAgICAgIGlmICh0eXBlb2YgZnJvbUJsb2NrID09PSAiYmlnaW50IikKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAiZmFsbGJhY2siICYmIGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0c1swXS5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pKCk7CiAgICBjb25zdCBwb2xsQ29udHJhY3RFdmVudCA9ICgpID0+IHsKICAgICAgY29uc3Qgc3RyaWN0ID0gc3RyaWN0XyA/PyBmYWxzZTsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoQ29udHJhY3RFdmVudCIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGJhdGNoLAogICAgICAgIGNsaWVudC51aWQsCiAgICAgICAgZXZlbnROYW1lLAogICAgICAgIHBvbGxpbmdJbnRlcnZhbCwKICAgICAgICBzdHJpY3QsCiAgICAgICAgZnJvbUJsb2NrCiAgICAgIF0pOwogICAgICByZXR1cm4gb2JzZXJ2ZShvYnNlcnZlcklkLCB7IG9uTG9ncywgb25FcnJvciB9LCAoZW1pdCkgPT4gewogICAgICAgIGxldCBwcmV2aW91c0Jsb2NrTnVtYmVyOwogICAgICAgIGlmIChmcm9tQmxvY2sgIT09IHZvaWQgMCkKICAgICAgICAgIHByZXZpb3VzQmxvY2tOdW1iZXIgPSBmcm9tQmxvY2sgLSAxbjsKICAgICAgICBsZXQgZmlsdGVyOwogICAgICAgIGxldCBpbml0aWFsaXplZCA9IGZhbHNlOwogICAgICAgIGNvbnN0IHVud2F0Y2ggPSBwb2xsKGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBmaWx0ZXIgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyLCAiY3JlYXRlQ29udHJhY3RFdmVudEZpbHRlciIpKHsKICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgZXZlbnROYW1lLAogICAgICAgICAgICAgICAgc3RyaWN0LAogICAgICAgICAgICAgICAgZnJvbUJsb2NrCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICB9CiAgICAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbGV0IGxvZ3M7CiAgICAgICAgICAgIGlmIChmaWx0ZXIpIHsKICAgICAgICAgICAgICBsb2dzID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0RmlsdGVyQ2hhbmdlcywgImdldEZpbHRlckNoYW5nZXMiKSh7IGZpbHRlciB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjb25zdCBibG9ja051bWJlciA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrTnVtYmVyLCAiZ2V0QmxvY2tOdW1iZXIiKSh7fSk7CiAgICAgICAgICAgICAgaWYgKHByZXZpb3VzQmxvY2tOdW1iZXIgJiYgcHJldmlvdXNCbG9ja051bWJlciA8IGJsb2NrTnVtYmVyKSB7CiAgICAgICAgICAgICAgICBsb2dzID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0Q29udHJhY3RFdmVudHMsICJnZXRDb250cmFjdEV2ZW50cyIpKHsKICAgICAgICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgICBldmVudE5hbWUsCiAgICAgICAgICAgICAgICAgIGZyb21CbG9jazogcHJldmlvdXNCbG9ja051bWJlciArIDFuLAogICAgICAgICAgICAgICAgICB0b0Jsb2NrOiBibG9ja051bWJlciwKICAgICAgICAgICAgICAgICAgc3RyaWN0CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbG9ncyA9IFtdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBwcmV2aW91c0Jsb2NrTnVtYmVyID0gYmxvY2tOdW1iZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGxvZ3MubGVuZ3RoID09PSAwKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGJhdGNoKQogICAgICAgICAgICAgIGVtaXQub25Mb2dzKGxvZ3MpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgZm9yIChjb25zdCBsb2cgb2YgbG9ncykKICAgICAgICAgICAgICAgIGVtaXQub25Mb2dzKFtsb2ddKTsKICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICBpZiAoZmlsdGVyICYmIGVyciBpbnN0YW5jZW9mIEludmFsaWRJbnB1dFJwY0Vycm9yKQogICAgICAgICAgICAgIGluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgICAgICAgIGVtaXQub25FcnJvcj8uKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgZW1pdE9uQmVnaW46IHRydWUsCiAgICAgICAgICBpbnRlcnZhbDogcG9sbGluZ0ludGVydmFsCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChmaWx0ZXIpCiAgICAgICAgICAgIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHVuaW5zdGFsbEZpbHRlciwgInVuaW5zdGFsbEZpbHRlciIpKHsgZmlsdGVyIH0pOwogICAgICAgICAgdW53YXRjaCgpOwogICAgICAgIH07CiAgICAgIH0pOwogICAgfTsKICAgIGNvbnN0IHN1YnNjcmliZUNvbnRyYWN0RXZlbnQgPSAoKSA9PiB7CiAgICAgIGNvbnN0IHN0cmljdCA9IHN0cmljdF8gPz8gZmFsc2U7CiAgICAgIGNvbnN0IG9ic2VydmVySWQgPSBzdHJpbmdpZnkoWwogICAgICAgICJ3YXRjaENvbnRyYWN0RXZlbnQiLAogICAgICAgIGFkZHJlc3MsCiAgICAgICAgYXJncywKICAgICAgICBiYXRjaCwKICAgICAgICBjbGllbnQudWlkLAogICAgICAgIGV2ZW50TmFtZSwKICAgICAgICBwb2xsaW5nSW50ZXJ2YWwsCiAgICAgICAgc3RyaWN0CiAgICAgIF0pOwogICAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgICAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICAgIHJldHVybiBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25Mb2dzLCBvbkVycm9yIH0sIChlbWl0KSA9PiB7CiAgICAgICAgOwogICAgICAgIChhc3luYyAoKSA9PiB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCB0cmFuc3BvcnQgPSAoKCkgPT4gewogICAgICAgICAgICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIpIHsKICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydDIgPSBjbGllbnQudHJhbnNwb3J0LnRyYW5zcG9ydHMuZmluZCgodHJhbnNwb3J0MykgPT4gdHJhbnNwb3J0My5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpOwogICAgICAgICAgICAgICAgaWYgKCF0cmFuc3BvcnQyKQogICAgICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc3BvcnQyLnZhbHVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAgY29uc3QgdG9waWNzID0gZXZlbnROYW1lID8gZW5jb2RlRXZlbnRUb3BpY3MoewogICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICBldmVudE5hbWUsCiAgICAgICAgICAgICAgYXJncwogICAgICAgICAgICB9KSA6IFtdOwogICAgICAgICAgICBjb25zdCB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZV8gfSA9IGF3YWl0IHRyYW5zcG9ydC5zdWJzY3JpYmUoewogICAgICAgICAgICAgIHBhcmFtczogWyJsb2dzIiwgeyBhZGRyZXNzLCB0b3BpY3MgfV0sCiAgICAgICAgICAgICAgb25EYXRhKGRhdGEpIHsKICAgICAgICAgICAgICAgIGlmICghYWN0aXZlKQogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBjb25zdCBsb2cgPSBkYXRhLnJlc3VsdDsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZXZlbnROYW1lOiBldmVudE5hbWUyLCBhcmdzOiBhcmdzMiB9ID0gZGVjb2RlRXZlbnRMb2coewogICAgICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgICAgICBkYXRhOiBsb2cuZGF0YSwKICAgICAgICAgICAgICAgICAgICB0b3BpY3M6IGxvZy50b3BpY3MsCiAgICAgICAgICAgICAgICAgICAgc3RyaWN0OiBzdHJpY3RfCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2cobG9nLCB7CiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJnczIsCiAgICAgICAgICAgICAgICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUyCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBlbWl0Lm9uTG9ncyhbZm9ybWF0dGVkXSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICAgICAgbGV0IGV2ZW50TmFtZTI7CiAgICAgICAgICAgICAgICAgIGxldCBpc1VubmFtZWQ7CiAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBEZWNvZGVMb2dEYXRhTWlzbWF0Y2ggfHwgZXJyIGluc3RhbmNlb2YgRGVjb2RlTG9nVG9waWNzTWlzbWF0Y2gpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaWN0XykKICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBldmVudE5hbWUyID0gZXJyLmFiaUl0ZW0ubmFtZTsKICAgICAgICAgICAgICAgICAgICBpc1VubmFtZWQgPSBlcnIuYWJpSXRlbS5pbnB1dHM/LnNvbWUoKHgpID0+ICEoIm5hbWUiIGluIHggJiYgeC5uYW1lKSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TG9nKGxvZywgewogICAgICAgICAgICAgICAgICAgIGFyZ3M6IGlzVW5uYW1lZCA/IFtdIDoge30sCiAgICAgICAgICAgICAgICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUyCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBlbWl0Lm9uTG9ncyhbZm9ybWF0dGVkXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBvbkVycm9yKGVycm9yKSB7CiAgICAgICAgICAgICAgICBlbWl0Lm9uRXJyb3I/LihlcnJvcik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZV87CiAgICAgICAgICAgIGlmICghYWN0aXZlKQogICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgb25FcnJvcj8uKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gKCkgPT4gdW5zdWJzY3JpYmUoKTsKICAgICAgfSk7CiAgICB9OwogICAgcmV0dXJuIGVuYWJsZVBvbGxpbmcgPyBwb2xsQ29udHJhY3RFdmVudCgpIDogc3Vic2NyaWJlQ29udHJhY3RFdmVudCgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC93cml0ZUNvbnRyYWN0LmpzCiAgaW5pdF9wYXJzZUFjY291bnQoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvYWNjb3VudC5qcwogIGluaXRfYmFzZSgpOwogIHZhciBBY2NvdW50Tm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDkgfSA9IHt9KSB7CiAgICAgIHN1cGVyKFsKICAgICAgICAiQ291bGQgbm90IGZpbmQgYW4gQWNjb3VudCB0byBleGVjdXRlIHdpdGggdGhpcyBBY3Rpb24uIiwKICAgICAgICAiUGxlYXNlIHByb3ZpZGUgYW4gQWNjb3VudCB3aXRoIHRoZSBgYWNjb3VudGAgYXJndW1lbnQgb24gdGhlIEFjdGlvbiwgb3IgYnkgc3VwcGx5aW5nIGFuIGBhY2NvdW50YCB0byB0aGUgQ2xpZW50LiIKICAgICAgXS5qb2luKCJcbiIpLCB7CiAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICBkb2NzU2x1ZzogImFjY291bnQiLAogICAgICAgIG5hbWU6ICJBY2NvdW50Tm90Rm91bmRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKICB2YXIgQWNjb3VudFR5cGVOb3RTdXBwb3J0ZWRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDksIG1ldGFNZXNzYWdlcywgdHlwZSB9KSB7CiAgICAgIHN1cGVyKGBBY2NvdW50IHR5cGUgIiR7dHlwZX0iIGlzIG5vdCBzdXBwb3J0ZWQuYCwgewogICAgICAgIGRvY3NQYXRoOiBkb2NzUGF0aDksCiAgICAgICAgbWV0YU1lc3NhZ2VzLAogICAgICAgIG5hbWU6ICJBY2NvdW50VHlwZU5vdFN1cHBvcnRlZEVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3dyaXRlQ29udHJhY3QuanMKICBpbml0X2VuY29kZUZ1bmN0aW9uRGF0YSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NlbmRUcmFuc2FjdGlvbi5qcwogIGluaXRfcGFyc2VBY2NvdW50KCk7CiAgaW5pdF9iYXNlKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY2hhaW4vYXNzZXJ0Q3VycmVudENoYWluLmpzCiAgaW5pdF9jaGFpbigpOwogIGZ1bmN0aW9uIGFzc2VydEN1cnJlbnRDaGFpbih7IGNoYWluLCBjdXJyZW50Q2hhaW5JZCB9KSB7CiAgICBpZiAoIWNoYWluKQogICAgICB0aHJvdyBuZXcgQ2hhaW5Ob3RGb3VuZEVycm9yKCk7CiAgICBpZiAoY3VycmVudENoYWluSWQgIT09IGNoYWluLmlkKQogICAgICB0aHJvdyBuZXcgQ2hhaW5NaXNtYXRjaEVycm9yKHsgY2hhaW4sIGN1cnJlbnRDaGFpbklkIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lcnJvcnMvZ2V0VHJhbnNhY3Rpb25FcnJvci5qcwogIGluaXRfbm9kZSgpOwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBpbml0X2dldE5vZGVFcnJvcigpOwogIGZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uRXJyb3IoZXJyLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIC4uLmFyZ3MgfSkgewogICAgY29uc3QgY2F1c2UgPSAoKCkgPT4gewogICAgICBjb25zdCBjYXVzZTIgPSBnZXROb2RlRXJyb3IoZXJyLCBhcmdzKTsKICAgICAgaWYgKGNhdXNlMiBpbnN0YW5jZW9mIFVua25vd25Ob2RlRXJyb3IpCiAgICAgICAgcmV0dXJuIGVycjsKICAgICAgcmV0dXJuIGNhdXNlMjsKICAgIH0pKCk7CiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IoY2F1c2UsIHsKICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgLi4uYXJncwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NlbmRUcmFuc2FjdGlvbi5qcwogIGluaXRfZXh0cmFjdCgpOwogIGluaXRfdHJhbnNhY3Rpb25SZXF1ZXN0KCk7CiAgaW5pdF9hc3NlcnRSZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvc2VuZFJhd1RyYW5zYWN0aW9uLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2VuZFJhd1RyYW5zYWN0aW9uKGNsaWVudCwgeyBzZXJpYWxpemVkVHJhbnNhY3Rpb24gfSkgewogICAgcmV0dXJuIGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX3NlbmRSYXdUcmFuc2FjdGlvbiIsCiAgICAgIHBhcmFtczogW3NlcmlhbGl6ZWRUcmFuc2FjdGlvbl0KICAgIH0sIHsgcmV0cnlDb3VudDogMCB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvc2VuZFRyYW5zYWN0aW9uLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2VuZFRyYW5zYWN0aW9uKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhY2NvdW50OiBhY2NvdW50XyA9IGNsaWVudC5hY2NvdW50LCBjaGFpbiA9IGNsaWVudC5jaGFpbiwgYWNjZXNzTGlzdCwgYXV0aG9yaXphdGlvbkxpc3QsIGJsb2JzLCBkYXRhLCBnYXMsIGdhc1ByaWNlLCBtYXhGZWVQZXJCbG9iR2FzLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBub25jZSwgdmFsdWUsIC4uLnJlc3QgfSA9IHBhcmFtZXRlcnM7CiAgICBpZiAoIWFjY291bnRfKQogICAgICB0aHJvdyBuZXcgQWNjb3VudE5vdEZvdW5kRXJyb3IoewogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvYWN0aW9ucy93YWxsZXQvc2VuZFRyYW5zYWN0aW9uIgogICAgICB9KTsKICAgIGNvbnN0IGFjY291bnQgPSBwYXJzZUFjY291bnQoYWNjb3VudF8pOwogICAgdHJ5IHsKICAgICAgYXNzZXJ0UmVxdWVzdChwYXJhbWV0ZXJzKTsKICAgICAgY29uc3QgdG8gPSBhd2FpdCAoYXN5bmMgKCkgPT4gewogICAgICAgIGlmIChwYXJhbWV0ZXJzLnRvKQogICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMudG87CiAgICAgICAgaWYgKGF1dGhvcml6YXRpb25MaXN0ICYmIGF1dGhvcml6YXRpb25MaXN0Lmxlbmd0aCA+IDApCiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVjb3ZlckF1dGhvcml6YXRpb25BZGRyZXNzKHsKICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvbkxpc3RbMF0KICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoImB0b2AgaXMgcmVxdWlyZWQuIENvdWxkIG5vdCBpbmZlciBmcm9tIGBhdXRob3JpemF0aW9uTGlzdGAuIik7CiAgICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9KSgpOwogICAgICBpZiAoYWNjb3VudC50eXBlID09PSAianNvbi1ycGMiKSB7CiAgICAgICAgbGV0IGNoYWluSWQ7CiAgICAgICAgaWYgKGNoYWluICE9PSBudWxsKSB7CiAgICAgICAgICBjaGFpbklkID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0Q2hhaW5JZCwgImdldENoYWluSWQiKSh7fSk7CiAgICAgICAgICBhc3NlcnRDdXJyZW50Q2hhaW4oewogICAgICAgICAgICBjdXJyZW50Q2hhaW5JZDogY2hhaW5JZCwKICAgICAgICAgICAgY2hhaW4KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb25zdCBjaGFpbkZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb25SZXF1ZXN0Py5mb3JtYXQ7CiAgICAgICAgY29uc3QgZm9ybWF0ID0gY2hhaW5Gb3JtYXQgfHwgZm9ybWF0VHJhbnNhY3Rpb25SZXF1ZXN0OwogICAgICAgIGNvbnN0IHJlcXVlc3QgPSBmb3JtYXQoewogICAgICAgICAgLy8gUGljayBvdXQgZXh0cmEgZGF0YSB0aGF0IG1pZ2h0IGV4aXN0IG9uIHRoZSBjaGFpbidzIHRyYW5zYWN0aW9uIHJlcXVlc3QgdHlwZS4KICAgICAgICAgIC4uLmV4dHJhY3QocmVzdCwgeyBmb3JtYXQ6IGNoYWluRm9ybWF0IH0pLAogICAgICAgICAgYWNjZXNzTGlzdCwKICAgICAgICAgIGF1dGhvcml6YXRpb25MaXN0LAogICAgICAgICAgYmxvYnMsCiAgICAgICAgICBjaGFpbklkLAogICAgICAgICAgZGF0YSwKICAgICAgICAgIGZyb206IGFjY291bnQuYWRkcmVzcywKICAgICAgICAgIGdhcywKICAgICAgICAgIGdhc1ByaWNlLAogICAgICAgICAgbWF4RmVlUGVyQmxvYkdhcywKICAgICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICB0bywKICAgICAgICAgIHZhbHVlCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICAgIG1ldGhvZDogImV0aF9zZW5kVHJhbnNhY3Rpb24iLAogICAgICAgICAgcGFyYW1zOiBbcmVxdWVzdF0KICAgICAgICB9LCB7IHJldHJ5Q291bnQ6IDAgfSk7CiAgICAgIH0KICAgICAgaWYgKGFjY291bnQudHlwZSA9PT0gImxvY2FsIikgewogICAgICAgIGNvbnN0IHJlcXVlc3QgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBwcmVwYXJlVHJhbnNhY3Rpb25SZXF1ZXN0LCAicHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdCIpKHsKICAgICAgICAgIGFjY291bnQsCiAgICAgICAgICBhY2Nlc3NMaXN0LAogICAgICAgICAgYXV0aG9yaXphdGlvbkxpc3QsCiAgICAgICAgICBibG9icywKICAgICAgICAgIGNoYWluLAogICAgICAgICAgZGF0YSwKICAgICAgICAgIGdhcywKICAgICAgICAgIGdhc1ByaWNlLAogICAgICAgICAgbWF4RmVlUGVyQmxvYkdhcywKICAgICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICBwYXJhbWV0ZXJzOiBbLi4uZGVmYXVsdFBhcmFtZXRlcnMsICJzaWRlY2FycyJdLAogICAgICAgICAgdmFsdWUsCiAgICAgICAgICAuLi5yZXN0LAogICAgICAgICAgdG8KICAgICAgICB9KTsKICAgICAgICBjb25zdCBzZXJpYWxpemVyID0gY2hhaW4/LnNlcmlhbGl6ZXJzPy50cmFuc2FjdGlvbjsKICAgICAgICBjb25zdCBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBhd2FpdCBhY2NvdW50LnNpZ25UcmFuc2FjdGlvbihyZXF1ZXN0LCB7CiAgICAgICAgICBzZXJpYWxpemVyCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHNlbmRSYXdUcmFuc2FjdGlvbiwgInNlbmRSYXdUcmFuc2FjdGlvbiIpKHsKICAgICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbgogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChhY2NvdW50LnR5cGUgPT09ICJzbWFydCIpCiAgICAgICAgdGhyb3cgbmV3IEFjY291bnRUeXBlTm90U3VwcG9ydGVkRXJyb3IoewogICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICJDb25zaWRlciB1c2luZyB0aGUgYHNlbmRVc2VyT3BlcmF0aW9uYCBBY3Rpb24gaW5zdGVhZC4iCiAgICAgICAgICBdLAogICAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9hY3Rpb25zL2J1bmRsZXIvc2VuZFVzZXJPcGVyYXRpb24iLAogICAgICAgICAgdHlwZTogInNtYXJ0IgogICAgICAgIH0pOwogICAgICB0aHJvdyBuZXcgQWNjb3VudFR5cGVOb3RTdXBwb3J0ZWRFcnJvcih7CiAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9hY3Rpb25zL3dhbGxldC9zZW5kVHJhbnNhY3Rpb24iLAogICAgICAgIHR5cGU6IGFjY291bnQudHlwZQogICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBpZiAoZXJyIGluc3RhbmNlb2YgQWNjb3VudFR5cGVOb3RTdXBwb3J0ZWRFcnJvcikKICAgICAgICB0aHJvdyBlcnI7CiAgICAgIHRocm93IGdldFRyYW5zYWN0aW9uRXJyb3IoZXJyLCB7CiAgICAgICAgLi4ucGFyYW1ldGVycywKICAgICAgICBhY2NvdW50LAogICAgICAgIGNoYWluOiBwYXJhbWV0ZXJzLmNoYWluIHx8IHZvaWQgMAogICAgICB9KTsKICAgIH0KICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvd3JpdGVDb250cmFjdC5qcwogIGFzeW5jIGZ1bmN0aW9uIHdyaXRlQ29udHJhY3QoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYWNjb3VudDogYWNjb3VudF8gPSBjbGllbnQuYWNjb3VudCwgYWRkcmVzcywgYXJncywgZGF0YVN1ZmZpeCwgZnVuY3Rpb25OYW1lLCAuLi5yZXF1ZXN0IH0gPSBwYXJhbWV0ZXJzOwogICAgaWYgKCFhY2NvdW50XykKICAgICAgdGhyb3cgbmV3IEFjY291bnROb3RGb3VuZEVycm9yKHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L3dyaXRlQ29udHJhY3QiCiAgICAgIH0pOwogICAgY29uc3QgYWNjb3VudCA9IHBhcnNlQWNjb3VudChhY2NvdW50Xyk7CiAgICBjb25zdCBkYXRhID0gZW5jb2RlRnVuY3Rpb25EYXRhKHsKICAgICAgYWJpOiBhYmkyLAogICAgICBhcmdzLAogICAgICBmdW5jdGlvbk5hbWUKICAgIH0pOwogICAgdHJ5IHsKICAgICAgcmV0dXJuIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHNlbmRUcmFuc2FjdGlvbiwgInNlbmRUcmFuc2FjdGlvbiIpKHsKICAgICAgICBkYXRhOiBgJHtkYXRhfSR7ZGF0YVN1ZmZpeCA/IGRhdGFTdWZmaXgucmVwbGFjZSgiMHgiLCAiIikgOiAiIn1gLAogICAgICAgIHRvOiBhZGRyZXNzLAogICAgICAgIGFjY291bnQsCiAgICAgICAgLi4ucmVxdWVzdAogICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHRocm93IGdldENvbnRyYWN0RXJyb3IoZXJyb3IsIHsKICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3Qvd3JpdGVDb250cmFjdCIsCiAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgIHNlbmRlcjogYWNjb3VudC5hZGRyZXNzCiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2dldENvbnRyYWN0LmpzCiAgZnVuY3Rpb24gZ2V0Q29udHJhY3QoeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGNsaWVudDogY2xpZW50XyB9KSB7CiAgICBjb25zdCBjbGllbnQgPSBjbGllbnRfOwogICAgY29uc3QgW3B1YmxpY0NsaWVudCwgd2FsbGV0Q2xpZW50XSA9ICgoKSA9PiB7CiAgICAgIGlmICghY2xpZW50KQogICAgICAgIHJldHVybiBbdm9pZCAwLCB2b2lkIDBdOwogICAgICBpZiAoInB1YmxpYyIgaW4gY2xpZW50ICYmICJ3YWxsZXQiIGluIGNsaWVudCkKICAgICAgICByZXR1cm4gW2NsaWVudC5wdWJsaWMsIGNsaWVudC53YWxsZXRdOwogICAgICBpZiAoInB1YmxpYyIgaW4gY2xpZW50KQogICAgICAgIHJldHVybiBbY2xpZW50LnB1YmxpYywgdm9pZCAwXTsKICAgICAgaWYgKCJ3YWxsZXQiIGluIGNsaWVudCkKICAgICAgICByZXR1cm4gW3ZvaWQgMCwgY2xpZW50LndhbGxldF07CiAgICAgIHJldHVybiBbY2xpZW50LCBjbGllbnRdOwogICAgfSkoKTsKICAgIGNvbnN0IGhhc1B1YmxpY0NsaWVudCA9IHB1YmxpY0NsaWVudCAhPT0gdm9pZCAwICYmIHB1YmxpY0NsaWVudCAhPT0gbnVsbDsKICAgIGNvbnN0IGhhc1dhbGxldENsaWVudCA9IHdhbGxldENsaWVudCAhPT0gdm9pZCAwICYmIHdhbGxldENsaWVudCAhPT0gbnVsbDsKICAgIGNvbnN0IGNvbnRyYWN0ID0ge307CiAgICBsZXQgaGFzUmVhZEZ1bmN0aW9uID0gZmFsc2U7CiAgICBsZXQgaGFzV3JpdGVGdW5jdGlvbiA9IGZhbHNlOwogICAgbGV0IGhhc0V2ZW50ID0gZmFsc2U7CiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYWJpMikgewogICAgICBpZiAoaXRlbS50eXBlID09PSAiZnVuY3Rpb24iKQogICAgICAgIGlmIChpdGVtLnN0YXRlTXV0YWJpbGl0eSA9PT0gInZpZXciIHx8IGl0ZW0uc3RhdGVNdXRhYmlsaXR5ID09PSAicHVyZSIpCiAgICAgICAgICBoYXNSZWFkRnVuY3Rpb24gPSB0cnVlOwogICAgICAgIGVsc2UKICAgICAgICAgIGhhc1dyaXRlRnVuY3Rpb24gPSB0cnVlOwogICAgICBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICJldmVudCIpCiAgICAgICAgaGFzRXZlbnQgPSB0cnVlOwogICAgICBpZiAoaGFzUmVhZEZ1bmN0aW9uICYmIGhhc1dyaXRlRnVuY3Rpb24gJiYgaGFzRXZlbnQpCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoaGFzUHVibGljQ2xpZW50KSB7CiAgICAgIGlmIChoYXNSZWFkRnVuY3Rpb24pCiAgICAgICAgY29udHJhY3QucmVhZCA9IG5ldyBQcm94eSh7fSwgewogICAgICAgICAgZ2V0KF8sIGZ1bmN0aW9uTmFtZSkgewogICAgICAgICAgICByZXR1cm4gKC4uLnBhcmFtZXRlcnMpID0+IHsKICAgICAgICAgICAgICBjb25zdCB7IGFyZ3MsIG9wdGlvbnMgfSA9IGdldEZ1bmN0aW9uUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKICAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0aW9uKHB1YmxpY0NsaWVudCwgcmVhZENvbnRyYWN0LCAicmVhZENvbnRyYWN0IikoewogICAgICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICAgICAgYWRkcmVzcywKICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgICAgICAgICAgIGFyZ3MsCiAgICAgICAgICAgICAgICAuLi5vcHRpb25zCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIGlmIChoYXNXcml0ZUZ1bmN0aW9uKQogICAgICAgIGNvbnRyYWN0LnNpbXVsYXRlID0gbmV3IFByb3h5KHt9LCB7CiAgICAgICAgICBnZXQoXywgZnVuY3Rpb25OYW1lKSB7CiAgICAgICAgICAgIHJldHVybiAoLi4ucGFyYW1ldGVycykgPT4gewogICAgICAgICAgICAgIGNvbnN0IHsgYXJncywgb3B0aW9ucyB9ID0gZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwogICAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb24ocHVibGljQ2xpZW50LCBzaW11bGF0ZUNvbnRyYWN0LCAic2ltdWxhdGVDb250cmFjdCIpKHsKICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgLi4ub3B0aW9ucwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICBpZiAoaGFzRXZlbnQpIHsKICAgICAgICBjb250cmFjdC5jcmVhdGVFdmVudEZpbHRlciA9IG5ldyBQcm94eSh7fSwgewogICAgICAgICAgZ2V0KF8sIGV2ZW50TmFtZSkgewogICAgICAgICAgICByZXR1cm4gKC4uLnBhcmFtZXRlcnMpID0+IHsKICAgICAgICAgICAgICBjb25zdCBhYmlFdmVudCA9IGFiaTIuZmluZCgoeCkgPT4geC50eXBlID09PSAiZXZlbnQiICYmIHgubmFtZSA9PT0gZXZlbnROYW1lKTsKICAgICAgICAgICAgICBjb25zdCB7IGFyZ3MsIG9wdGlvbnMgfSA9IGdldEV2ZW50UGFyYW1ldGVycyhwYXJhbWV0ZXJzLCBhYmlFdmVudCk7CiAgICAgICAgICAgICAgcmV0dXJuIGdldEFjdGlvbihwdWJsaWNDbGllbnQsIGNyZWF0ZUNvbnRyYWN0RXZlbnRGaWx0ZXIsICJjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyIikoewogICAgICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICAgICAgYWRkcmVzcywKICAgICAgICAgICAgICAgIGV2ZW50TmFtZSwKICAgICAgICAgICAgICAgIGFyZ3MsCiAgICAgICAgICAgICAgICAuLi5vcHRpb25zCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgY29udHJhY3QuZ2V0RXZlbnRzID0gbmV3IFByb3h5KHt9LCB7CiAgICAgICAgICBnZXQoXywgZXZlbnROYW1lKSB7CiAgICAgICAgICAgIHJldHVybiAoLi4ucGFyYW1ldGVycykgPT4gewogICAgICAgICAgICAgIGNvbnN0IGFiaUV2ZW50ID0gYWJpMi5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICJldmVudCIgJiYgeC5uYW1lID09PSBldmVudE5hbWUpOwogICAgICAgICAgICAgIGNvbnN0IHsgYXJncywgb3B0aW9ucyB9ID0gZ2V0RXZlbnRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMsIGFiaUV2ZW50KTsKICAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0aW9uKHB1YmxpY0NsaWVudCwgZ2V0Q29udHJhY3RFdmVudHMsICJnZXRDb250cmFjdEV2ZW50cyIpKHsKICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBldmVudE5hbWUsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgLi4ub3B0aW9ucwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGNvbnRyYWN0LndhdGNoRXZlbnQgPSBuZXcgUHJveHkoe30sIHsKICAgICAgICAgIGdldChfLCBldmVudE5hbWUpIHsKICAgICAgICAgICAgcmV0dXJuICguLi5wYXJhbWV0ZXJzKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgYWJpRXZlbnQgPSBhYmkyLmZpbmQoKHgpID0+IHgudHlwZSA9PT0gImV2ZW50IiAmJiB4Lm5hbWUgPT09IGV2ZW50TmFtZSk7CiAgICAgICAgICAgICAgY29uc3QgeyBhcmdzLCBvcHRpb25zIH0gPSBnZXRFdmVudFBhcmFtZXRlcnMocGFyYW1ldGVycywgYWJpRXZlbnQpOwogICAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb24ocHVibGljQ2xpZW50LCB3YXRjaENvbnRyYWN0RXZlbnQsICJ3YXRjaENvbnRyYWN0RXZlbnQiKSh7CiAgICAgICAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgZXZlbnROYW1lLAogICAgICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgaWYgKGhhc1dhbGxldENsaWVudCkgewogICAgICBpZiAoaGFzV3JpdGVGdW5jdGlvbikKICAgICAgICBjb250cmFjdC53cml0ZSA9IG5ldyBQcm94eSh7fSwgewogICAgICAgICAgZ2V0KF8sIGZ1bmN0aW9uTmFtZSkgewogICAgICAgICAgICByZXR1cm4gKC4uLnBhcmFtZXRlcnMpID0+IHsKICAgICAgICAgICAgICBjb25zdCB7IGFyZ3MsIG9wdGlvbnMgfSA9IGdldEZ1bmN0aW9uUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKICAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0aW9uKHdhbGxldENsaWVudCwgd3JpdGVDb250cmFjdCwgIndyaXRlQ29udHJhY3QiKSh7CiAgICAgICAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KICAgIGlmIChoYXNQdWJsaWNDbGllbnQgfHwgaGFzV2FsbGV0Q2xpZW50KSB7CiAgICAgIGlmIChoYXNXcml0ZUZ1bmN0aW9uKQogICAgICAgIGNvbnRyYWN0LmVzdGltYXRlR2FzID0gbmV3IFByb3h5KHt9LCB7CiAgICAgICAgICBnZXQoXywgZnVuY3Rpb25OYW1lKSB7CiAgICAgICAgICAgIHJldHVybiAoLi4ucGFyYW1ldGVycykgPT4gewogICAgICAgICAgICAgIGNvbnN0IHsgYXJncywgb3B0aW9ucyB9ID0gZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwogICAgICAgICAgICAgIGNvbnN0IGNsaWVudDIgPSBwdWJsaWNDbGllbnQgPz8gd2FsbGV0Q2xpZW50OwogICAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb24oY2xpZW50MiwgZXN0aW1hdGVDb250cmFjdEdhcywgImVzdGltYXRlQ29udHJhY3RHYXMiKSh7CiAgICAgICAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsCiAgICAgICAgICAgICAgICBhY2NvdW50OiBvcHRpb25zLmFjY291bnQgPz8gd2FsbGV0Q2xpZW50LmFjY291bnQKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KICAgIGNvbnRyYWN0LmFkZHJlc3MgPSBhZGRyZXNzOwogICAgY29udHJhY3QuYWJpID0gYWJpMjsKICAgIHJldHVybiBjb250cmFjdDsKICB9CiAgZnVuY3Rpb24gZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzKHZhbHVlcykgewogICAgY29uc3QgaGFzQXJncyA9IHZhbHVlcy5sZW5ndGggJiYgQXJyYXkuaXNBcnJheSh2YWx1ZXNbMF0pOwogICAgY29uc3QgYXJncyA9IGhhc0FyZ3MgPyB2YWx1ZXNbMF0gOiBbXTsKICAgIGNvbnN0IG9wdGlvbnMgPSAoaGFzQXJncyA/IHZhbHVlc1sxXSA6IHZhbHVlc1swXSkgPz8ge307CiAgICByZXR1cm4geyBhcmdzLCBvcHRpb25zIH07CiAgfQogIGZ1bmN0aW9uIGdldEV2ZW50UGFyYW1ldGVycyh2YWx1ZXMsIGFiaUV2ZW50KSB7CiAgICBsZXQgaGFzQXJncyA9IGZhbHNlOwogICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzWzBdKSkKICAgICAgaGFzQXJncyA9IHRydWU7CiAgICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxKSB7CiAgICAgIGhhc0FyZ3MgPSBhYmlFdmVudC5pbnB1dHMuc29tZSgoeCkgPT4geC5pbmRleGVkKTsKICAgIH0gZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMikgewogICAgICBoYXNBcmdzID0gdHJ1ZTsKICAgIH0KICAgIGNvbnN0IGFyZ3MgPSBoYXNBcmdzID8gdmFsdWVzWzBdIDogdm9pZCAwOwogICAgY29uc3Qgb3B0aW9ucyA9IChoYXNBcmdzID8gdmFsdWVzWzFdIDogdmFsdWVzWzBdKSA/PyB7fTsKICAgIHJldHVybiB7IGFyZ3MsIG9wdGlvbnMgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2VpcDcxMi5qcwogIGluaXRfYmFzZSgpOwogIHZhciBFaXA3MTJEb21haW5Ob3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgYWRkcmVzcyB9KSB7CiAgICAgIHN1cGVyKGBObyBFSVAtNzEyIGRvbWFpbiBmb3VuZCBvbiBjb250cmFjdCAiJHthZGRyZXNzfSIuYCwgewogICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgIkVuc3VyZSB0aGF0OiIsCiAgICAgICAgICBgLSBUaGUgY29udHJhY3QgaXMgZGVwbG95ZWQgYXQgdGhlIGFkZHJlc3MgIiR7YWRkcmVzc30iLmAsCiAgICAgICAgICAiLSBgZWlwNzEyRG9tYWluKClgIGZ1bmN0aW9uIGV4aXN0cyBvbiB0aGUgY29udHJhY3QuIiwKICAgICAgICAgICItIGBlaXA3MTJEb21haW4oKWAgZnVuY3Rpb24gbWF0Y2hlcyBzaWduYXR1cmUgdG8gRVJDLTUyNjcgc3BlY2lmaWNhdGlvbi4iCiAgICAgICAgXSwKICAgICAgICBuYW1lOiAiRWlwNzEyRG9tYWluTm90Rm91bmRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRFaXA3MTJEb21haW4uanMKICBhc3luYyBmdW5jdGlvbiBnZXRFaXA3MTJEb21haW4oY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGZhY3RvcnksIGZhY3RvcnlEYXRhIH0gPSBwYXJhbWV0ZXJzOwogICAgdHJ5IHsKICAgICAgY29uc3QgW2ZpZWxkcywgbmFtZSwgdmVyc2lvbjMsIGNoYWluSWQsIHZlcmlmeWluZ0NvbnRyYWN0LCBzYWx0LCBleHRlbnNpb25zXSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHJlYWRDb250cmFjdCwgInJlYWRDb250cmFjdCIpKHsKICAgICAgICBhYmksCiAgICAgICAgYWRkcmVzcywKICAgICAgICBmdW5jdGlvbk5hbWU6ICJlaXA3MTJEb21haW4iLAogICAgICAgIGZhY3RvcnksCiAgICAgICAgZmFjdG9yeURhdGEKICAgICAgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgZG9tYWluOiB7CiAgICAgICAgICBuYW1lLAogICAgICAgICAgdmVyc2lvbjogdmVyc2lvbjMsCiAgICAgICAgICBjaGFpbklkOiBOdW1iZXIoY2hhaW5JZCksCiAgICAgICAgICB2ZXJpZnlpbmdDb250cmFjdCwKICAgICAgICAgIHNhbHQKICAgICAgICB9LAogICAgICAgIGV4dGVuc2lvbnMsCiAgICAgICAgZmllbGRzCiAgICAgIH07CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIGNvbnN0IGVycm9yID0gZTsKICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICJDb250cmFjdEZ1bmN0aW9uRXhlY3V0aW9uRXJyb3IiICYmIGVycm9yLmNhdXNlLm5hbWUgPT09ICJDb250cmFjdEZ1bmN0aW9uWmVyb0RhdGFFcnJvciIpIHsKICAgICAgICB0aHJvdyBuZXcgRWlwNzEyRG9tYWluTm90Rm91bmRFcnJvcih7IGFkZHJlc3MgfSk7CiAgICAgIH0KICAgICAgdGhyb3cgZXJyb3I7CiAgICB9CiAgfQogIHZhciBhYmkgPSBbCiAgICB7CiAgICAgIGlucHV0czogW10sCiAgICAgIG5hbWU6ICJlaXA3MTJEb21haW4iLAogICAgICBvdXRwdXRzOiBbCiAgICAgICAgeyBuYW1lOiAiZmllbGRzIiwgdHlwZTogImJ5dGVzMSIgfSwKICAgICAgICB7IG5hbWU6ICJuYW1lIiwgdHlwZTogInN0cmluZyIgfSwKICAgICAgICB7IG5hbWU6ICJ2ZXJzaW9uIiwgdHlwZTogInN0cmluZyIgfSwKICAgICAgICB7IG5hbWU6ICJjaGFpbklkIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgeyBuYW1lOiAidmVyaWZ5aW5nQ29udHJhY3QiLCB0eXBlOiAiYWRkcmVzcyIgfSwKICAgICAgICB7IG5hbWU6ICJzYWx0IiwgdHlwZTogImJ5dGVzMzIiIH0sCiAgICAgICAgeyBuYW1lOiAiZXh0ZW5zaW9ucyIsIHR5cGU6ICJ1aW50MjU2W10iIH0KICAgICAgXSwKICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgIH0KICBdOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L2FkZENoYWluLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGFkZENoYWluKGNsaWVudCwgeyBjaGFpbiB9KSB7CiAgICBjb25zdCB7IGlkLCBuYW1lLCBuYXRpdmVDdXJyZW5jeSwgcnBjVXJscywgYmxvY2tFeHBsb3JlcnMgfSA9IGNoYWluOwogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ3YWxsZXRfYWRkRXRoZXJldW1DaGFpbiIsCiAgICAgIHBhcmFtczogWwogICAgICAgIHsKICAgICAgICAgIGNoYWluSWQ6IG51bWJlclRvSGV4KGlkKSwKICAgICAgICAgIGNoYWluTmFtZTogbmFtZSwKICAgICAgICAgIG5hdGl2ZUN1cnJlbmN5LAogICAgICAgICAgcnBjVXJsczogcnBjVXJscy5kZWZhdWx0Lmh0dHAsCiAgICAgICAgICBibG9ja0V4cGxvcmVyVXJsczogYmxvY2tFeHBsb3JlcnMgPyBPYmplY3QudmFsdWVzKGJsb2NrRXhwbG9yZXJzKS5tYXAoKHsgdXJsIH0pID0+IHVybCkgOiB2b2lkIDAKICAgICAgICB9CiAgICAgIF0KICAgIH0sIHsgZGVkdXBlOiB0cnVlLCByZXRyeUNvdW50OiAwIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2NyZWF0ZUNsaWVudC5qcwogIGluaXRfcGFyc2VBY2NvdW50KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdWlkLmpzCiAgdmFyIHNpemUyID0gMjU2OwogIHZhciBpbmRleCA9IHNpemUyOwogIHZhciBidWZmZXI7CiAgZnVuY3Rpb24gdWlkKGxlbmd0aCA9IDExKSB7CiAgICBpZiAoIWJ1ZmZlciB8fCBpbmRleCArIGxlbmd0aCA+IHNpemUyICogMikgewogICAgICBidWZmZXIgPSAiIjsKICAgICAgaW5kZXggPSAwOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemUyOyBpKyspIHsKICAgICAgICBidWZmZXIgKz0gKDI1NiArIE1hdGgucmFuZG9tKCkgKiAyNTYgfCAwKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnN1YnN0cmluZyhpbmRleCwgaW5kZXgrKyArIGxlbmd0aCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvY3JlYXRlQ2xpZW50LmpzCiAgZnVuY3Rpb24gY3JlYXRlQ2xpZW50KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYmF0Y2gsIGNhY2hlVGltZSA9IHBhcmFtZXRlcnMucG9sbGluZ0ludGVydmFsID8/IDRlMywgY2NpcFJlYWQsIGtleSA9ICJiYXNlIiwgbmFtZSA9ICJCYXNlIENsaWVudCIsIHBvbGxpbmdJbnRlcnZhbCA9IDRlMywgdHlwZSA9ICJiYXNlIiB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGNoYWluID0gcGFyYW1ldGVycy5jaGFpbjsKICAgIGNvbnN0IGFjY291bnQgPSBwYXJhbWV0ZXJzLmFjY291bnQgPyBwYXJzZUFjY291bnQocGFyYW1ldGVycy5hY2NvdW50KSA6IHZvaWQgMDsKICAgIGNvbnN0IHsgY29uZmlnLCByZXF1ZXN0LCB2YWx1ZSB9ID0gcGFyYW1ldGVycy50cmFuc3BvcnQoewogICAgICBjaGFpbiwKICAgICAgcG9sbGluZ0ludGVydmFsCiAgICB9KTsKICAgIGNvbnN0IHRyYW5zcG9ydCA9IHsgLi4uY29uZmlnLCAuLi52YWx1ZSB9OwogICAgY29uc3QgY2xpZW50ID0gewogICAgICBhY2NvdW50LAogICAgICBiYXRjaCwKICAgICAgY2FjaGVUaW1lLAogICAgICBjY2lwUmVhZCwKICAgICAgY2hhaW4sCiAgICAgIGtleSwKICAgICAgbmFtZSwKICAgICAgcG9sbGluZ0ludGVydmFsLAogICAgICByZXF1ZXN0LAogICAgICB0cmFuc3BvcnQsCiAgICAgIHR5cGUsCiAgICAgIHVpZDogdWlkKCkKICAgIH07CiAgICBmdW5jdGlvbiBleHRlbmQoYmFzZTIpIHsKICAgICAgcmV0dXJuIChleHRlbmRGbikgPT4gewogICAgICAgIGNvbnN0IGV4dGVuZGVkID0gZXh0ZW5kRm4oYmFzZTIpOwogICAgICAgIGZvciAoY29uc3Qga2V5MiBpbiBjbGllbnQpCiAgICAgICAgICBkZWxldGUgZXh0ZW5kZWRba2V5Ml07CiAgICAgICAgY29uc3QgY29tYmluZWQgPSB7IC4uLmJhc2UyLCAuLi5leHRlbmRlZCB9OwogICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGNvbWJpbmVkLCB7IGV4dGVuZDogZXh0ZW5kKGNvbWJpbmVkKSB9KTsKICAgICAgfTsKICAgIH0KICAgIHJldHVybiBPYmplY3QuYXNzaWduKGNsaWVudCwgeyBleHRlbmQ6IGV4dGVuZChjbGllbnQpIH0pOwogIH0KICBmdW5jdGlvbiBycGNTY2hlbWEoKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYnVpbGRSZXF1ZXN0LmpzCiAgaW5pdF9iYXNlKCk7CiAgaW5pdF9yZXF1ZXN0KCk7CiAgaW5pdF9ycGMoKTsKICBpbml0X3RvSGV4KCk7CiAgaW5pdF9rZWNjYWsyNTYoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9wcm9taXNlL3dpdGhEZWR1cGUuanMKICBpbml0X2xydSgpOwogIHZhciBwcm9taXNlQ2FjaGUyID0gLyogQF9fUFVSRV9fICovIG5ldyBMcnVNYXAoODE5Mik7CiAgZnVuY3Rpb24gd2l0aERlZHVwZShmbiwgeyBlbmFibGVkID0gdHJ1ZSwgaWQgfSkgewogICAgaWYgKCFlbmFibGVkIHx8ICFpZCkKICAgICAgcmV0dXJuIGZuKCk7CiAgICBpZiAocHJvbWlzZUNhY2hlMi5nZXQoaWQpKQogICAgICByZXR1cm4gcHJvbWlzZUNhY2hlMi5nZXQoaWQpOwogICAgY29uc3QgcHJvbWlzZSA9IGZuKCkuZmluYWxseSgoKSA9PiBwcm9taXNlQ2FjaGUyLmRlbGV0ZShpZCkpOwogICAgcHJvbWlzZUNhY2hlMi5zZXQoaWQsIHByb21pc2UpOwogICAgcmV0dXJuIHByb21pc2U7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3Byb21pc2Uvd2l0aFJldHJ5LmpzCiAgZnVuY3Rpb24gd2l0aFJldHJ5KGZuLCB7IGRlbGF5OiBkZWxheV8gPSAxMDAsIHJldHJ5Q291bnQgPSAyLCBzaG91bGRSZXRyeTogc2hvdWxkUmV0cnkyID0gKCkgPT4gdHJ1ZSB9ID0ge30pIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIGNvbnN0IGF0dGVtcHRSZXRyeSA9IGFzeW5jICh7IGNvdW50ID0gMCB9ID0ge30pID0+IHsKICAgICAgICBjb25zdCByZXRyeSA9IGFzeW5jICh7IGVycm9yIH0pID0+IHsKICAgICAgICAgIGNvbnN0IGRlbGF5ID0gdHlwZW9mIGRlbGF5XyA9PT0gImZ1bmN0aW9uIiA/IGRlbGF5Xyh7IGNvdW50LCBlcnJvciB9KSA6IGRlbGF5XzsKICAgICAgICAgIGlmIChkZWxheSkKICAgICAgICAgICAgYXdhaXQgd2FpdChkZWxheSk7CiAgICAgICAgICBhdHRlbXB0UmV0cnkoeyBjb3VudDogY291bnQgKyAxIH0pOwogICAgICAgIH07CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmbigpOwogICAgICAgICAgcmVzb2x2ZShkYXRhKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGlmIChjb3VudCA8IHJldHJ5Q291bnQgJiYgYXdhaXQgc2hvdWxkUmV0cnkyKHsgY291bnQsIGVycm9yOiBlcnIgfSkpCiAgICAgICAgICAgIHJldHVybiByZXRyeSh7IGVycm9yOiBlcnIgfSk7CiAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGF0dGVtcHRSZXRyeSgpOwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2J1aWxkUmVxdWVzdC5qcwogIGluaXRfc3RyaW5naWZ5KCk7CiAgZnVuY3Rpb24gYnVpbGRSZXF1ZXN0KHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkgewogICAgcmV0dXJuIGFzeW5jIChhcmdzLCBvdmVycmlkZU9wdGlvbnMgPSB7fSkgPT4gewogICAgICBjb25zdCB7IGRlZHVwZSA9IGZhbHNlLCByZXRyeURlbGF5ID0gMTUwLCByZXRyeUNvdW50ID0gMywgdWlkOiB1aWQyIH0gPSB7CiAgICAgICAgLi4ub3B0aW9ucywKICAgICAgICAuLi5vdmVycmlkZU9wdGlvbnMKICAgICAgfTsKICAgICAgY29uc3QgcmVxdWVzdElkID0gZGVkdXBlID8ga2VjY2FrMjU2KHN0cmluZ1RvSGV4KGAke3VpZDJ9LiR7c3RyaW5naWZ5KGFyZ3MpfWApKSA6IHZvaWQgMDsKICAgICAgcmV0dXJuIHdpdGhEZWR1cGUoKCkgPT4gd2l0aFJldHJ5KGFzeW5jICgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIGF3YWl0IHJlcXVlc3QoYXJncyk7CiAgICAgICAgfSBjYXRjaCAoZXJyXykgewogICAgICAgICAgY29uc3QgZXJyID0gZXJyXzsKICAgICAgICAgIHN3aXRjaCAoZXJyLmNvZGUpIHsKICAgICAgICAgICAgY2FzZSBQYXJzZVJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlUnBjRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRSZXF1ZXN0UnBjRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBNZXRob2ROb3RGb3VuZFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IE1ldGhvZE5vdEZvdW5kUnBjRXJyb3IoZXJyLCB7IG1ldGhvZDogYXJncy5tZXRob2QgfSk7CiAgICAgICAgICAgIGNhc2UgSW52YWxpZFBhcmFtc1JwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbXNScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIEludGVybmFsUnBjRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIEludmFsaWRJbnB1dFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRJbnB1dFJwY0Vycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlTm90Rm91bmRScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvci5jb2RlOgogICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBUcmFuc2FjdGlvblJlamVjdGVkUnBjRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IoZXJyLCB7CiAgICAgICAgICAgICAgICBtZXRob2Q6IGFyZ3MubWV0aG9kCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNhc2UgTGltaXRFeGNlZWRlZFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IExpbWl0RXhjZWVkZWRScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIEpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvci5jb2RlOgogICAgICAgICAgICAgIHRocm93IG5ldyBKc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBVc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgVXNlclJlamVjdGVkUmVxdWVzdEVycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgVW5hdXRob3JpemVkUHJvdmlkZXJFcnJvci5jb2RlOgogICAgICAgICAgICAgIHRocm93IG5ldyBVbmF1dGhvcml6ZWRQcm92aWRlckVycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIFByb3ZpZGVyRGlzY29ubmVjdGVkRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgUHJvdmlkZXJEaXNjb25uZWN0ZWRFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIENoYWluRGlzY29ubmVjdGVkRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgQ2hhaW5EaXNjb25uZWN0ZWRFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIFN3aXRjaENoYWluRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgU3dpdGNoQ2hhaW5FcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIDVlMzoKICAgICAgICAgICAgICB0aHJvdyBuZXcgVXNlclJlamVjdGVkUmVxdWVzdEVycm9yKGVycik7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgaWYgKGVycl8gaW5zdGFuY2VvZiBCYXNlRXJyb3IyKQogICAgICAgICAgICAgICAgdGhyb3cgZXJyXzsKICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5rbm93blJwY0Vycm9yKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAgZGVsYXk6ICh7IGNvdW50LCBlcnJvciB9KSA9PiB7CiAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IgaW5zdGFuY2VvZiBIdHRwUmVxdWVzdEVycm9yKSB7CiAgICAgICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBlcnJvcj8uaGVhZGVycz8uZ2V0KCJSZXRyeS1BZnRlciIpOwogICAgICAgICAgICBpZiAocmV0cnlBZnRlcj8ubWF0Y2goL1xkLykpCiAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5wYXJzZUludChyZXRyeUFmdGVyKSAqIDFlMzsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB+figxIDw8IGNvdW50KSAqIHJldHJ5RGVsYXk7CiAgICAgICAgfSwKICAgICAgICByZXRyeUNvdW50LAogICAgICAgIHNob3VsZFJldHJ5OiAoeyBlcnJvciB9KSA9PiBzaG91bGRSZXRyeShlcnJvcikKICAgICAgfSksIHsgZW5hYmxlZDogZGVkdXBlLCBpZDogcmVxdWVzdElkIH0pOwogICAgfTsKICB9CiAgZnVuY3Rpb24gc2hvdWxkUmV0cnkoZXJyb3IpIHsKICAgIGlmICgiY29kZSIgaW4gZXJyb3IgJiYgdHlwZW9mIGVycm9yLmNvZGUgPT09ICJudW1iZXIiKSB7CiAgICAgIGlmIChlcnJvci5jb2RlID09PSAtMSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGVycm9yLmNvZGUgPT09IExpbWl0RXhjZWVkZWRScGNFcnJvci5jb2RlKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoZXJyb3IuY29kZSA9PT0gSW50ZXJuYWxScGNFcnJvci5jb2RlKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwUmVxdWVzdEVycm9yICYmIGVycm9yLnN0YXR1cykgewogICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDMpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwOCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDEzKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MjkpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDUwMCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAyKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA1MDMpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDUwNCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvdHJhbnNwb3J0cy9jcmVhdGVUcmFuc3BvcnQuanMKICBmdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnQoeyBrZXksIG5hbWUsIHJlcXVlc3QsIHJldHJ5Q291bnQgPSAzLCByZXRyeURlbGF5ID0gMTUwLCB0aW1lb3V0LCB0eXBlIH0sIHZhbHVlKSB7CiAgICBjb25zdCB1aWQyID0gdWlkKCk7CiAgICByZXR1cm4gewogICAgICBjb25maWc6IHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICByZXF1ZXN0LAogICAgICAgIHJldHJ5Q291bnQsCiAgICAgICAgcmV0cnlEZWxheSwKICAgICAgICB0aW1lb3V0LAogICAgICAgIHR5cGUKICAgICAgfSwKICAgICAgcmVxdWVzdDogYnVpbGRSZXF1ZXN0KHJlcXVlc3QsIHsgcmV0cnlDb3VudCwgcmV0cnlEZWxheSwgdWlkOiB1aWQyIH0pLAogICAgICB2YWx1ZQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2xpZW50cy90cmFuc3BvcnRzL2N1c3RvbS5qcwogIGZ1bmN0aW9uIGN1c3RvbShwcm92aWRlciwgY29uZmlnID0ge30pIHsKICAgIGNvbnN0IHsga2V5ID0gImN1c3RvbSIsIG5hbWUgPSAiQ3VzdG9tIFByb3ZpZGVyIiwgcmV0cnlEZWxheSB9ID0gY29uZmlnOwogICAgcmV0dXJuICh7IHJldHJ5Q291bnQ6IGRlZmF1bHRSZXRyeUNvdW50IH0pID0+IGNyZWF0ZVRyYW5zcG9ydCh7CiAgICAgIGtleSwKICAgICAgbmFtZSwKICAgICAgcmVxdWVzdDogcHJvdmlkZXIucmVxdWVzdC5iaW5kKHByb3ZpZGVyKSwKICAgICAgcmV0cnlDb3VudDogY29uZmlnLnJldHJ5Q291bnQgPz8gZGVmYXVsdFJldHJ5Q291bnQsCiAgICAgIHJldHJ5RGVsYXksCiAgICAgIHR5cGU6ICJjdXN0b20iCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2xpZW50cy90cmFuc3BvcnRzL2ZhbGxiYWNrLmpzCiAgaW5pdF9ycGMoKTsKICBmdW5jdGlvbiBmYWxsYmFjayh0cmFuc3BvcnRzXywgY29uZmlnID0ge30pIHsKICAgIGNvbnN0IHsga2V5ID0gImZhbGxiYWNrIiwgbmFtZSA9ICJGYWxsYmFjayIsIHJhbmsgPSBmYWxzZSwgcmV0cnlDb3VudCwgcmV0cnlEZWxheSB9ID0gY29uZmlnOwogICAgcmV0dXJuICh7IGNoYWluLCBwb2xsaW5nSW50ZXJ2YWwgPSA0ZTMsIHRpbWVvdXQsIC4uLnJlc3QgfSkgPT4gewogICAgICBsZXQgdHJhbnNwb3J0cyA9IHRyYW5zcG9ydHNfOwogICAgICBsZXQgb25SZXNwb25zZSA9ICgpID0+IHsKICAgICAgfTsKICAgICAgY29uc3QgdHJhbnNwb3J0ID0gY3JlYXRlVHJhbnNwb3J0KHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICAgICAgY29uc3QgZmV0Y2gyID0gYXN5bmMgKGkgPSAwKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydDIgPSB0cmFuc3BvcnRzW2ldKHsKICAgICAgICAgICAgICAuLi5yZXN0LAogICAgICAgICAgICAgIGNoYWluLAogICAgICAgICAgICAgIHJldHJ5Q291bnQ6IDAsCiAgICAgICAgICAgICAgdGltZW91dAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRyYW5zcG9ydDIucmVxdWVzdCh7CiAgICAgICAgICAgICAgICBtZXRob2QsCiAgICAgICAgICAgICAgICBwYXJhbXMKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBvblJlc3BvbnNlKHsKICAgICAgICAgICAgICAgIG1ldGhvZCwKICAgICAgICAgICAgICAgIHBhcmFtcywKICAgICAgICAgICAgICAgIHJlc3BvbnNlLAogICAgICAgICAgICAgICAgdHJhbnNwb3J0OiB0cmFuc3BvcnQyLAogICAgICAgICAgICAgICAgc3RhdHVzOiAic3VjY2VzcyIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgIG9uUmVzcG9uc2UoewogICAgICAgICAgICAgICAgZXJyb3I6IGVyciwKICAgICAgICAgICAgICAgIG1ldGhvZCwKICAgICAgICAgICAgICAgIHBhcmFtcywKICAgICAgICAgICAgICAgIHRyYW5zcG9ydDogdHJhbnNwb3J0MiwKICAgICAgICAgICAgICAgIHN0YXR1czogImVycm9yIgogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyhlcnIpKQogICAgICAgICAgICAgICAgdGhyb3cgZXJyOwogICAgICAgICAgICAgIGlmIChpID09PSB0cmFuc3BvcnRzLmxlbmd0aCAtIDEpCiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgICAgICAgcmV0dXJuIGZldGNoMihpICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gZmV0Y2gyKCk7CiAgICAgICAgfSwKICAgICAgICByZXRyeUNvdW50LAogICAgICAgIHJldHJ5RGVsYXksCiAgICAgICAgdHlwZTogImZhbGxiYWNrIgogICAgICB9LCB7CiAgICAgICAgb25SZXNwb25zZTogKGZuKSA9PiBvblJlc3BvbnNlID0gZm4sCiAgICAgICAgdHJhbnNwb3J0czogdHJhbnNwb3J0cy5tYXAoKGZuKSA9PiBmbih7IGNoYWluLCByZXRyeUNvdW50OiAwIH0pKQogICAgICB9KTsKICAgICAgaWYgKHJhbmspIHsKICAgICAgICBjb25zdCByYW5rT3B0aW9ucyA9IHR5cGVvZiByYW5rID09PSAib2JqZWN0IiA/IHJhbmsgOiB7fTsKICAgICAgICByYW5rVHJhbnNwb3J0cyh7CiAgICAgICAgICBjaGFpbiwKICAgICAgICAgIGludGVydmFsOiByYW5rT3B0aW9ucy5pbnRlcnZhbCA/PyBwb2xsaW5nSW50ZXJ2YWwsCiAgICAgICAgICBvblRyYW5zcG9ydHM6ICh0cmFuc3BvcnRzXzIpID0+IHRyYW5zcG9ydHMgPSB0cmFuc3BvcnRzXzIsCiAgICAgICAgICBzYW1wbGVDb3VudDogcmFua09wdGlvbnMuc2FtcGxlQ291bnQsCiAgICAgICAgICB0aW1lb3V0OiByYW5rT3B0aW9ucy50aW1lb3V0LAogICAgICAgICAgdHJhbnNwb3J0cywKICAgICAgICAgIHdlaWdodHM6IHJhbmtPcHRpb25zLndlaWdodHMKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gdHJhbnNwb3J0OwogICAgfTsKICB9CiAgZnVuY3Rpb24gc2hvdWxkVGhyb3coZXJyb3IpIHsKICAgIGlmICgiY29kZSIgaW4gZXJyb3IgJiYgdHlwZW9mIGVycm9yLmNvZGUgPT09ICJudW1iZXIiKSB7CiAgICAgIGlmIChlcnJvci5jb2RlID09PSBUcmFuc2FjdGlvblJlamVjdGVkUnBjRXJyb3IuY29kZSB8fCBlcnJvci5jb2RlID09PSBVc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IuY29kZSB8fCBlcnJvci5jb2RlID09PSA1ZTMpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIHJhbmtUcmFuc3BvcnRzKHsgY2hhaW4sIGludGVydmFsID0gNGUzLCBvblRyYW5zcG9ydHMsIHNhbXBsZUNvdW50ID0gMTAsIHRpbWVvdXQgPSAxZTMsIHRyYW5zcG9ydHMsIHdlaWdodHMgPSB7fSB9KSB7CiAgICBjb25zdCB7IHN0YWJpbGl0eTogc3RhYmlsaXR5V2VpZ2h0ID0gMC43LCBsYXRlbmN5OiBsYXRlbmN5V2VpZ2h0ID0gMC4zIH0gPSB3ZWlnaHRzOwogICAgY29uc3Qgc2FtcGxlcyA9IFtdOwogICAgY29uc3QgcmFua1RyYW5zcG9ydHNfID0gYXN5bmMgKCkgPT4gewogICAgICBjb25zdCBzYW1wbGUgPSBhd2FpdCBQcm9taXNlLmFsbCh0cmFuc3BvcnRzLm1hcChhc3luYyAodHJhbnNwb3J0KSA9PiB7CiAgICAgICAgY29uc3QgdHJhbnNwb3J0XyA9IHRyYW5zcG9ydCh7IGNoYWluLCByZXRyeUNvdW50OiAwLCB0aW1lb3V0IH0pOwogICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTsKICAgICAgICBsZXQgZW5kOwogICAgICAgIGxldCBzdWNjZXNzOwogICAgICAgIHRyeSB7CiAgICAgICAgICBhd2FpdCB0cmFuc3BvcnRfLnJlcXVlc3QoeyBtZXRob2Q6ICJuZXRfbGlzdGVuaW5nIiB9KTsKICAgICAgICAgIHN1Y2Nlc3MgPSAxOwogICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgc3VjY2VzcyA9IDA7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIGVuZCA9IERhdGUubm93KCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxhdGVuY3kgPSBlbmQgLSBzdGFydDsKICAgICAgICByZXR1cm4geyBsYXRlbmN5LCBzdWNjZXNzIH07CiAgICAgIH0pKTsKICAgICAgc2FtcGxlcy5wdXNoKHNhbXBsZSk7CiAgICAgIGlmIChzYW1wbGVzLmxlbmd0aCA+IHNhbXBsZUNvdW50KQogICAgICAgIHNhbXBsZXMuc2hpZnQoKTsKICAgICAgY29uc3QgbWF4TGF0ZW5jeSA9IE1hdGgubWF4KC4uLnNhbXBsZXMubWFwKChzYW1wbGUyKSA9PiBNYXRoLm1heCguLi5zYW1wbGUyLm1hcCgoeyBsYXRlbmN5IH0pID0+IGxhdGVuY3kpKSkpOwogICAgICBjb25zdCBzY29yZXMgPSB0cmFuc3BvcnRzLm1hcCgoXywgaSkgPT4gewogICAgICAgIGNvbnN0IGxhdGVuY2llcyA9IHNhbXBsZXMubWFwKChzYW1wbGUyKSA9PiBzYW1wbGUyW2ldLmxhdGVuY3kpOwogICAgICAgIGNvbnN0IG1lYW5MYXRlbmN5ID0gbGF0ZW5jaWVzLnJlZHVjZSgoYWNjLCBsYXRlbmN5KSA9PiBhY2MgKyBsYXRlbmN5LCAwKSAvIGxhdGVuY2llcy5sZW5ndGg7CiAgICAgICAgY29uc3QgbGF0ZW5jeVNjb3JlID0gMSAtIG1lYW5MYXRlbmN5IC8gbWF4TGF0ZW5jeTsKICAgICAgICBjb25zdCBzdWNjZXNzZXMgPSBzYW1wbGVzLm1hcCgoc2FtcGxlMikgPT4gc2FtcGxlMltpXS5zdWNjZXNzKTsKICAgICAgICBjb25zdCBzdGFiaWxpdHlTY29yZSA9IHN1Y2Nlc3Nlcy5yZWR1Y2UoKGFjYywgc3VjY2VzcykgPT4gYWNjICsgc3VjY2VzcywgMCkgLyBzdWNjZXNzZXMubGVuZ3RoOwogICAgICAgIGlmIChzdGFiaWxpdHlTY29yZSA9PT0gMCkKICAgICAgICAgIHJldHVybiBbMCwgaV07CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgIGxhdGVuY3lXZWlnaHQgKiBsYXRlbmN5U2NvcmUgKyBzdGFiaWxpdHlXZWlnaHQgKiBzdGFiaWxpdHlTY29yZSwKICAgICAgICAgIGkKICAgICAgICBdOwogICAgICB9KS5zb3J0KChhLCBiKSA9PiBiWzBdIC0gYVswXSk7CiAgICAgIG9uVHJhbnNwb3J0cyhzY29yZXMubWFwKChbLCBpXSkgPT4gdHJhbnNwb3J0c1tpXSkpOwogICAgICBhd2FpdCB3YWl0KGludGVydmFsKTsKICAgICAgcmFua1RyYW5zcG9ydHNfKCk7CiAgICB9OwogICAgcmFua1RyYW5zcG9ydHNfKCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvdHJhbnNwb3J0cy9odHRwLmpzCiAgaW5pdF9yZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL3RyYW5zcG9ydC5qcwogIGluaXRfYmFzZSgpOwogIHZhciBVcmxSZXF1aXJlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiTm8gVVJMIHdhcyBwcm92aWRlZCB0byB0aGUgVHJhbnNwb3J0LiBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIFJQQyBVUkwgdG8gdGhlIFRyYW5zcG9ydC4iLCB7CiAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9jbGllbnRzL2ludHJvIiwKICAgICAgICBuYW1lOiAiVXJsUmVxdWlyZWRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL3RyYW5zcG9ydHMvaHR0cC5qcwogIGluaXRfY3JlYXRlQmF0Y2hTY2hlZHVsZXIoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ycGMvaHR0cC5qcwogIGluaXRfcmVxdWVzdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3Byb21pc2Uvd2l0aFRpbWVvdXQuanMKICBmdW5jdGlvbiB3aXRoVGltZW91dChmbiwgeyBlcnJvckluc3RhbmNlID0gbmV3IEVycm9yKCJ0aW1lZCBvdXQiKSwgdGltZW91dCwgc2lnbmFsIH0pIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIDsKICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICBsZXQgdGltZW91dElkOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgICAgaWYgKHRpbWVvdXQgPiAwKSB7CiAgICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIGlmIChzaWduYWwpIHsKICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVqZWN0KGVycm9ySW5zdGFuY2UpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgdGltZW91dCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXNvbHZlKGF3YWl0IGZuKHsgc2lnbmFsOiBjb250cm9sbGVyPy5zaWduYWwgfHwgbnVsbCB9KSk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBpZiAoZXJyPy5uYW1lID09PSAiQWJvcnRFcnJvciIpCiAgICAgICAgICAgIHJlamVjdChlcnJvckluc3RhbmNlKTsKICAgICAgICAgIHJlamVjdChlcnIpOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTsKICAgICAgICB9CiAgICAgIH0pKCk7CiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcnBjL2h0dHAuanMKICBpbml0X3N0cmluZ2lmeSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3JwYy9pZC5qcwogIGZ1bmN0aW9uIGNyZWF0ZUlkU3RvcmUoKSB7CiAgICByZXR1cm4gewogICAgICBjdXJyZW50OiAwLAogICAgICB0YWtlKCkgewogICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQrKzsKICAgICAgfSwKICAgICAgcmVzZXQoKSB7CiAgICAgICAgdGhpcy5jdXJyZW50ID0gMDsKICAgICAgfQogICAgfTsKICB9CiAgdmFyIGlkQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gY3JlYXRlSWRTdG9yZSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3JwYy9odHRwLmpzCiAgZnVuY3Rpb24gZ2V0SHR0cFJwY0NsaWVudCh1cmwsIG9wdGlvbnMgPSB7fSkgewogICAgcmV0dXJuIHsKICAgICAgYXN5bmMgcmVxdWVzdChwYXJhbXMpIHsKICAgICAgICBjb25zdCB7IGJvZHksIG9uUmVxdWVzdCA9IG9wdGlvbnMub25SZXF1ZXN0LCBvblJlc3BvbnNlID0gb3B0aW9ucy5vblJlc3BvbnNlLCB0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID8/IDFlNCB9ID0gcGFyYW1zOwogICAgICAgIGNvbnN0IGZldGNoT3B0aW9ucyA9IHsKICAgICAgICAgIC4uLm9wdGlvbnMuZmV0Y2hPcHRpb25zID8/IHt9LAogICAgICAgICAgLi4ucGFyYW1zLmZldGNoT3B0aW9ucyA/PyB7fQogICAgICAgIH07CiAgICAgICAgY29uc3QgeyBoZWFkZXJzLCBtZXRob2QsIHNpZ25hbDogc2lnbmFsXyB9ID0gZmV0Y2hPcHRpb25zOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHdpdGhUaW1lb3V0KGFzeW5jICh7IHNpZ25hbCB9KSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGluaXQgPSB7CiAgICAgICAgICAgICAgLi4uZmV0Y2hPcHRpb25zLAogICAgICAgICAgICAgIGJvZHk6IEFycmF5LmlzQXJyYXkoYm9keSkgPyBzdHJpbmdpZnkoYm9keS5tYXAoKGJvZHkyKSA9PiAoewogICAgICAgICAgICAgICAganNvbnJwYzogIjIuMCIsCiAgICAgICAgICAgICAgICBpZDogYm9keTIuaWQgPz8gaWRDYWNoZS50YWtlKCksCiAgICAgICAgICAgICAgICAuLi5ib2R5MgogICAgICAgICAgICAgIH0pKSkgOiBzdHJpbmdpZnkoewogICAgICAgICAgICAgICAganNvbnJwYzogIjIuMCIsCiAgICAgICAgICAgICAgICBpZDogYm9keS5pZCA/PyBpZENhY2hlLnRha2UoKSwKICAgICAgICAgICAgICAgIC4uLmJvZHkKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICAgICAgICAgLi4uaGVhZGVycwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QgfHwgIlBPU1QiLAogICAgICAgICAgICAgIHNpZ25hbDogc2lnbmFsXyB8fCAodGltZW91dCA+IDAgPyBzaWduYWwgOiBudWxsKQogICAgICAgICAgICB9OwogICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCBpbml0KTsKICAgICAgICAgICAgaWYgKG9uUmVxdWVzdCkKICAgICAgICAgICAgICBhd2FpdCBvblJlcXVlc3QocmVxdWVzdCk7CiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlMiA9IGF3YWl0IGZldGNoKHVybCwgaW5pdCk7CiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTI7CiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIGVycm9ySW5zdGFuY2U6IG5ldyBUaW1lb3V0RXJyb3IoeyBib2R5LCB1cmwgfSksCiAgICAgICAgICAgIHRpbWVvdXQsCiAgICAgICAgICAgIHNpZ25hbDogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAob25SZXNwb25zZSkKICAgICAgICAgICAgYXdhaXQgb25SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgICBsZXQgZGF0YTsKICAgICAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIik/LnN0YXJ0c1dpdGgoImFwcGxpY2F0aW9uL2pzb24iKSkKICAgICAgICAgICAgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBkYXRhID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhIHx8ICJ7fSIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykgewogICAgICAgICAgICB0aHJvdyBuZXcgSHR0cFJlcXVlc3RFcnJvcih7CiAgICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgICBkZXRhaWxzOiBzdHJpbmdpZnkoZGF0YS5lcnJvcikgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dCwKICAgICAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLAogICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLAogICAgICAgICAgICAgIHVybAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEh0dHBSZXF1ZXN0RXJyb3IpCiAgICAgICAgICAgIHRocm93IGVycjsKICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IpCiAgICAgICAgICAgIHRocm93IGVycjsKICAgICAgICAgIHRocm93IG5ldyBIdHRwUmVxdWVzdEVycm9yKHsKICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgY2F1c2U6IGVyciwKICAgICAgICAgICAgdXJsCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvdHJhbnNwb3J0cy9odHRwLmpzCiAgZnVuY3Rpb24gaHR0cCh1cmwsIGNvbmZpZyA9IHt9KSB7CiAgICBjb25zdCB7IGJhdGNoLCBmZXRjaE9wdGlvbnMsIGtleSA9ICJodHRwIiwgbmFtZSA9ICJIVFRQIEpTT04tUlBDIiwgb25GZXRjaFJlcXVlc3QsIG9uRmV0Y2hSZXNwb25zZSwgcmV0cnlEZWxheSB9ID0gY29uZmlnOwogICAgcmV0dXJuICh7IGNoYWluLCByZXRyeUNvdW50OiByZXRyeUNvdW50XywgdGltZW91dDogdGltZW91dF8gfSkgPT4gewogICAgICBjb25zdCB7IGJhdGNoU2l6ZSA9IDFlMywgd2FpdDogd2FpdDIgPSAwIH0gPSB0eXBlb2YgYmF0Y2ggPT09ICJvYmplY3QiID8gYmF0Y2ggOiB7fTsKICAgICAgY29uc3QgcmV0cnlDb3VudCA9IGNvbmZpZy5yZXRyeUNvdW50ID8/IHJldHJ5Q291bnRfOwogICAgICBjb25zdCB0aW1lb3V0ID0gdGltZW91dF8gPz8gY29uZmlnLnRpbWVvdXQgPz8gMWU0OwogICAgICBjb25zdCB1cmxfID0gdXJsIHx8IGNoYWluPy5ycGNVcmxzLmRlZmF1bHQuaHR0cFswXTsKICAgICAgaWYgKCF1cmxfKQogICAgICAgIHRocm93IG5ldyBVcmxSZXF1aXJlZEVycm9yKCk7CiAgICAgIGNvbnN0IHJwY0NsaWVudCA9IGdldEh0dHBScGNDbGllbnQodXJsXywgewogICAgICAgIGZldGNoT3B0aW9ucywKICAgICAgICBvblJlcXVlc3Q6IG9uRmV0Y2hSZXF1ZXN0LAogICAgICAgIG9uUmVzcG9uc2U6IG9uRmV0Y2hSZXNwb25zZSwKICAgICAgICB0aW1lb3V0CiAgICAgIH0pOwogICAgICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICAgICAgY29uc3QgYm9keSA9IHsgbWV0aG9kLCBwYXJhbXMgfTsKICAgICAgICAgIGNvbnN0IHsgc2NoZWR1bGUgfSA9IGNyZWF0ZUJhdGNoU2NoZWR1bGVyKHsKICAgICAgICAgICAgaWQ6IHVybF8sCiAgICAgICAgICAgIHdhaXQ6IHdhaXQyLAogICAgICAgICAgICBzaG91bGRTcGxpdEJhdGNoKHJlcXVlc3RzKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RzLmxlbmd0aCA+IGJhdGNoU2l6ZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZm46IChib2R5MikgPT4gcnBjQ2xpZW50LnJlcXVlc3QoewogICAgICAgICAgICAgIGJvZHk6IGJvZHkyCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBzb3J0OiAoYSwgYikgPT4gYS5pZCAtIGIuaWQKICAgICAgICAgIH0pOwogICAgICAgICAgY29uc3QgZm4gPSBhc3luYyAoYm9keTIpID0+IGJhdGNoID8gc2NoZWR1bGUoYm9keTIpIDogWwogICAgICAgICAgICBhd2FpdCBycGNDbGllbnQucmVxdWVzdCh7CiAgICAgICAgICAgICAgYm9keTogYm9keTIKICAgICAgICAgICAgfSkKICAgICAgICAgIF07CiAgICAgICAgICBjb25zdCBbeyBlcnJvciwgcmVzdWx0IH1dID0gYXdhaXQgZm4oYm9keSk7CiAgICAgICAgICBpZiAoZXJyb3IpCiAgICAgICAgICAgIHRocm93IG5ldyBScGNSZXF1ZXN0RXJyb3IoewogICAgICAgICAgICAgIGJvZHksCiAgICAgICAgICAgICAgZXJyb3IsCiAgICAgICAgICAgICAgdXJsOiB1cmxfCiAgICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9LAogICAgICAgIHJldHJ5Q291bnQsCiAgICAgICAgcmV0cnlEZWxheSwKICAgICAgICB0aW1lb3V0LAogICAgICAgIHR5cGU6ICJodHRwIgogICAgICB9LCB7CiAgICAgICAgZmV0Y2hPcHRpb25zLAogICAgICAgIHVybDogdXJsXwogICAgICB9KTsKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvZW5zL2dldEVuc0FkZHJlc3MuanMKICBpbml0X2FiaXMoKTsKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2dldENoYWluQ29udHJhY3RBZGRyZXNzKCk7CiAgaW5pdF90cmltKCk7CiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9lcnJvcnMuanMKICBpbml0X3NvbGlkaXR5KCk7CiAgaW5pdF9iYXNlKCk7CiAgaW5pdF9jb250cmFjdCgpOwogIGZ1bmN0aW9uIGlzTnVsbFVuaXZlcnNhbFJlc29sdmVyRXJyb3IoZXJyLCBjYWxsVHlwZSkgewogICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgQmFzZUVycm9yMikpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IGNhdXNlID0gZXJyLndhbGsoKGUpID0+IGUgaW5zdGFuY2VvZiBDb250cmFjdEZ1bmN0aW9uUmV2ZXJ0ZWRFcnJvcik7CiAgICBpZiAoIShjYXVzZSBpbnN0YW5jZW9mIENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKGNhdXNlLmRhdGE/LmVycm9yTmFtZSA9PT0gIlJlc29sdmVyTm90Rm91bmQiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChjYXVzZS5kYXRhPy5lcnJvck5hbWUgPT09ICJSZXNvbHZlcldpbGRjYXJkTm90U3VwcG9ydGVkIikKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoY2F1c2UuZGF0YT8uZXJyb3JOYW1lID09PSAiUmVzb2x2ZXJOb3RDb250cmFjdCIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKGNhdXNlLmRhdGE/LmVycm9yTmFtZSA9PT0gIlJlc29sdmVyRXJyb3IiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChjYXVzZS5kYXRhPy5lcnJvck5hbWUgPT09ICJIdHRwRXJyb3IiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChjYXVzZS5yZWFzb24/LmluY2x1ZGVzKCJXaWxkY2FyZCBvbiBub24tZXh0ZW5kZWQgcmVzb2x2ZXJzIGlzIG5vdCBzdXBwb3J0ZWQiKSkKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoY2FsbFR5cGUgPT09ICJyZXZlcnNlIiAmJiBjYXVzZS5yZWFzb24gPT09IHBhbmljUmVhc29uc1s1MF0pCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbnMvbmFtZWhhc2guanMKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X2tlY2NhazI1NigpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9lbmNvZGVkTGFiZWxUb0xhYmVsaGFzaC5qcwogIGluaXRfaXNIZXgoKTsKICBmdW5jdGlvbiBlbmNvZGVkTGFiZWxUb0xhYmVsaGFzaChsYWJlbCkgewogICAgaWYgKGxhYmVsLmxlbmd0aCAhPT0gNjYpCiAgICAgIHJldHVybiBudWxsOwogICAgaWYgKGxhYmVsLmluZGV4T2YoIlsiKSAhPT0gMCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBpZiAobGFiZWwuaW5kZXhPZigiXSIpICE9PSA2NSkKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCBoYXNoMyA9IGAweCR7bGFiZWwuc2xpY2UoMSwgNjUpfWA7CiAgICBpZiAoIWlzSGV4KGhhc2gzKSkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gaGFzaDM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9uYW1laGFzaC5qcwogIGZ1bmN0aW9uIG5hbWVoYXNoKG5hbWUpIHsKICAgIGxldCByZXN1bHQgPSBuZXcgVWludDhBcnJheSgzMikuZmlsbCgwKTsKICAgIGlmICghbmFtZSkKICAgICAgcmV0dXJuIGJ5dGVzVG9IZXgocmVzdWx0KTsKICAgIGNvbnN0IGxhYmVscyA9IG5hbWUuc3BsaXQoIi4iKTsKICAgIGZvciAobGV0IGkgPSBsYWJlbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHsKICAgICAgY29uc3QgaGFzaEZyb21FbmNvZGVkTGFiZWwgPSBlbmNvZGVkTGFiZWxUb0xhYmVsaGFzaChsYWJlbHNbaV0pOwogICAgICBjb25zdCBoYXNoZWQgPSBoYXNoRnJvbUVuY29kZWRMYWJlbCA/IHRvQnl0ZXMoaGFzaEZyb21FbmNvZGVkTGFiZWwpIDoga2VjY2FrMjU2KHN0cmluZ1RvQnl0ZXMobGFiZWxzW2ldKSwgImJ5dGVzIik7CiAgICAgIHJlc3VsdCA9IGtlY2NhazI1Nihjb25jYXQoW3Jlc3VsdCwgaGFzaGVkXSksICJieXRlcyIpOwogICAgfQogICAgcmV0dXJuIGJ5dGVzVG9IZXgocmVzdWx0KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5zL3BhY2tldFRvQnl0ZXMuanMKICBpbml0X3RvQnl0ZXMoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbnMvZW5jb2RlTGFiZWxoYXNoLmpzCiAgZnVuY3Rpb24gZW5jb2RlTGFiZWxoYXNoKGhhc2gzKSB7CiAgICByZXR1cm4gYFske2hhc2gzLnNsaWNlKDIpfV1gOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbnMvbGFiZWxoYXNoLmpzCiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGluaXRfa2VjY2FrMjU2KCk7CiAgZnVuY3Rpb24gbGFiZWxoYXNoKGxhYmVsKSB7CiAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheSgzMikuZmlsbCgwKTsKICAgIGlmICghbGFiZWwpCiAgICAgIHJldHVybiBieXRlc1RvSGV4KHJlc3VsdCk7CiAgICByZXR1cm4gZW5jb2RlZExhYmVsVG9MYWJlbGhhc2gobGFiZWwpIHx8IGtlY2NhazI1NihzdHJpbmdUb0J5dGVzKGxhYmVsKSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9wYWNrZXRUb0J5dGVzLmpzCiAgZnVuY3Rpb24gcGFja2V0VG9CeXRlcyhwYWNrZXQpIHsKICAgIGNvbnN0IHZhbHVlID0gcGFja2V0LnJlcGxhY2UoL15cLnxcLiQvZ20sICIiKTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgxKTsKICAgIGNvbnN0IGJ5dGVzMiA9IG5ldyBVaW50OEFycmF5KHN0cmluZ1RvQnl0ZXModmFsdWUpLmJ5dGVMZW5ndGggKyAyKTsKICAgIGxldCBvZmZzZXQgPSAwOwogICAgY29uc3QgbGlzdCA9IHZhbHVlLnNwbGl0KCIuIik7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgbGV0IGVuY29kZWQgPSBzdHJpbmdUb0J5dGVzKGxpc3RbaV0pOwogICAgICBpZiAoZW5jb2RlZC5ieXRlTGVuZ3RoID4gMjU1KQogICAgICAgIGVuY29kZWQgPSBzdHJpbmdUb0J5dGVzKGVuY29kZUxhYmVsaGFzaChsYWJlbGhhc2gobGlzdFtpXSkpKTsKICAgICAgYnl0ZXMyW29mZnNldF0gPSBlbmNvZGVkLmxlbmd0aDsKICAgICAgYnl0ZXMyLnNldChlbmNvZGVkLCBvZmZzZXQgKyAxKTsKICAgICAgb2Zmc2V0ICs9IGVuY29kZWQubGVuZ3RoICsgMTsKICAgIH0KICAgIGlmIChieXRlczIuYnl0ZUxlbmd0aCAhPT0gb2Zmc2V0ICsgMSkKICAgICAgcmV0dXJuIGJ5dGVzMi5zbGljZSgwLCBvZmZzZXQgKyAxKTsKICAgIHJldHVybiBieXRlczI7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvZW5zL2dldEVuc0FkZHJlc3MuanMKICBhc3luYyBmdW5jdGlvbiBnZXRFbnNBZGRyZXNzKGNsaWVudCwgeyBibG9ja051bWJlciwgYmxvY2tUYWcsIGNvaW5UeXBlLCBuYW1lLCBnYXRld2F5VXJscywgc3RyaWN0LCB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3M6IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc18gfSkgewogICAgbGV0IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyA9IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc187CiAgICBpZiAoIXVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcykgewogICAgICBpZiAoIWNsaWVudC5jaGFpbikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNsaWVudCBjaGFpbiBub3QgY29uZmlndXJlZC4gdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzIGlzIHJlcXVpcmVkLiIpOwogICAgICB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgPSBnZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyh7CiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgY2hhaW46IGNsaWVudC5jaGFpbiwKICAgICAgICBjb250cmFjdDogImVuc1VuaXZlcnNhbFJlc29sdmVyIgogICAgICB9KTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IGZ1bmN0aW9uRGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7CiAgICAgICAgYWJpOiBhZGRyZXNzUmVzb2x2ZXJBYmksCiAgICAgICAgZnVuY3Rpb25OYW1lOiAiYWRkciIsCiAgICAgICAgLi4uY29pblR5cGUgIT0gbnVsbCA/IHsgYXJnczogW25hbWVoYXNoKG5hbWUpLCBCaWdJbnQoY29pblR5cGUpXSB9IDogeyBhcmdzOiBbbmFtZWhhc2gobmFtZSldIH0KICAgICAgfSk7CiAgICAgIGNvbnN0IHJlYWRDb250cmFjdFBhcmFtZXRlcnMgPSB7CiAgICAgICAgYWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzLAogICAgICAgIGFiaTogdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpLAogICAgICAgIGZ1bmN0aW9uTmFtZTogInJlc29sdmUiLAogICAgICAgIGFyZ3M6IFt0b0hleChwYWNrZXRUb0J5dGVzKG5hbWUpKSwgZnVuY3Rpb25EYXRhXSwKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBibG9ja1RhZwogICAgICB9OwogICAgICBjb25zdCByZWFkQ29udHJhY3RBY3Rpb24gPSBnZXRBY3Rpb24oY2xpZW50LCByZWFkQ29udHJhY3QsICJyZWFkQ29udHJhY3QiKTsKICAgICAgY29uc3QgcmVzID0gZ2F0ZXdheVVybHMgPyBhd2FpdCByZWFkQ29udHJhY3RBY3Rpb24oewogICAgICAgIC4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMsCiAgICAgICAgYXJnczogWy4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMuYXJncywgZ2F0ZXdheVVybHNdCiAgICAgIH0pIDogYXdhaXQgcmVhZENvbnRyYWN0QWN0aW9uKHJlYWRDb250cmFjdFBhcmFtZXRlcnMpOwogICAgICBpZiAocmVzWzBdID09PSAiMHgiKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCBhZGRyZXNzID0gZGVjb2RlRnVuY3Rpb25SZXN1bHQoewogICAgICAgIGFiaTogYWRkcmVzc1Jlc29sdmVyQWJpLAogICAgICAgIGFyZ3M6IGNvaW5UeXBlICE9IG51bGwgPyBbbmFtZWhhc2gobmFtZSksIEJpZ0ludChjb2luVHlwZSldIDogdm9pZCAwLAogICAgICAgIGZ1bmN0aW9uTmFtZTogImFkZHIiLAogICAgICAgIGRhdGE6IHJlc1swXQogICAgICB9KTsKICAgICAgaWYgKGFkZHJlc3MgPT09ICIweCIpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGlmICh0cmltKGFkZHJlc3MpID09PSAiMHgwMCIpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBhZGRyZXNzOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGlmIChzdHJpY3QpCiAgICAgICAgdGhyb3cgZXJyOwogICAgICBpZiAoaXNOdWxsVW5pdmVyc2FsUmVzb2x2ZXJFcnJvcihlcnIsICJyZXNvbHZlIikpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHRocm93IGVycjsKICAgIH0KICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2Vucy5qcwogIGluaXRfYmFzZSgpOwogIHZhciBFbnNBdmF0YXJJbnZhbGlkTWV0YWRhdGFFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGRhdGEgfSkgewogICAgICBzdXBlcigiVW5hYmxlIHRvIGV4dHJhY3QgaW1hZ2UgZnJvbSBtZXRhZGF0YS4gVGhlIG1ldGFkYXRhIG1heSBiZSBtYWxmb3JtZWQgb3IgaW52YWxpZC4iLCB7CiAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAiLSBNZXRhZGF0YSBtdXN0IGJlIGEgSlNPTiBvYmplY3Qgd2l0aCBhdCBsZWFzdCBhbiBgaW1hZ2VgLCBgaW1hZ2VfdXJsYCBvciBgaW1hZ2VfZGF0YWAgcHJvcGVydHkuIiwKICAgICAgICAgICIiLAogICAgICAgICAgYFByb3ZpZGVkIGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YAogICAgICAgIF0sCiAgICAgICAgbmFtZTogIkVuc0F2YXRhckludmFsaWRNZXRhZGF0YUVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwogIHZhciBFbnNBdmF0YXJJbnZhbGlkTmZ0VXJpRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyByZWFzb24gfSkgewogICAgICBzdXBlcihgRU5TIE5GVCBhdmF0YXIgVVJJIGlzIGludmFsaWQuICR7cmVhc29ufWAsIHsKICAgICAgICBuYW1lOiAiRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwogIHZhciBFbnNBdmF0YXJVcmlSZXNvbHV0aW9uRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyB1cmkgfSkgewogICAgICBzdXBlcihgVW5hYmxlIHRvIHJlc29sdmUgRU5TIGF2YXRhciBVUkkgIiR7dXJpfSIuIFRoZSBVUkkgbWF5IGJlIG1hbGZvcm1lZCwgaW52YWxpZCwgb3IgZG9lcyBub3QgcmVzcG9uZCB3aXRoIGEgdmFsaWQgaW1hZ2UuYCwgeyBuYW1lOiAiRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yIiB9KTsKICAgIH0KICB9OwogIHZhciBFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgbmFtZXNwYWNlIH0pIHsKICAgICAgc3VwZXIoYEVOUyBORlQgYXZhdGFyIG5hbWVzcGFjZSAiJHtuYW1lc3BhY2V9IiBpcyBub3Qgc3VwcG9ydGVkLiBNdXN0IGJlICJlcmM3MjEiIG9yICJlcmMxMTU1Ii5gLCB7IG5hbWU6ICJFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yIiB9KTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9hdmF0YXIvdXRpbHMuanMKICB2YXIgbmV0d29ya1JlZ2V4ID0gLyg/PHByb3RvY29sPmh0dHBzPzpcL1wvW15cL10qfGlwZnM6XC98aXBuczpcL3xhcjpcLyk/KD88cm9vdD5cLyk/KD88c3VicGF0aD5pcGZzXC98aXBuc1wvKT8oPzx0YXJnZXQ+W1x3XC0uXSspKD88c3VidGFyZ2V0PlwvLiopPy87CiAgdmFyIGlwZnNIYXNoUmVnZXggPSAvXihRbVsxLTlBLUhKLU5QLVphLWttLXpdezQ0LH18YltBLVphLXoyLTddezU4LH18QltBLVoyLTddezU4LH18elsxLTlBLUhKLU5QLVphLWttLXpdezQ4LH18RlswLTlBLUZdezUwLH0pKFwvKD88dGFyZ2V0Pltcd1wtLl0rKSk/KD88c3VidGFyZ2V0PlwvLiopPyQvOwogIHZhciBiYXNlNjRSZWdleCA9IC9eZGF0YTooW2EtekEtWlwtLytdKik7YmFzZTY0LChbXiJdLiopLzsKICB2YXIgZGF0YVVSSVJlZ2V4ID0gL15kYXRhOihbYS16QS1aXC0vK10qKT8oO1thLXpBLVowLTldLio/KT8oLCkvOwogIGFzeW5jIGZ1bmN0aW9uIGlzSW1hZ2VVcmkodXJpKSB7CiAgICB0cnkgewogICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmksIHsgbWV0aG9kOiAiSEVBRCIgfSk7CiAgICAgIGlmIChyZXMuc3RhdHVzID09PSAyMDApIHsKICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIik7CiAgICAgICAgcmV0dXJuIGNvbnRlbnRUeXBlPy5zdGFydHNXaXRoKCJpbWFnZS8iKTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBpZiAodHlwZW9mIGVycm9yID09PSAib2JqZWN0IiAmJiB0eXBlb2YgZXJyb3IucmVzcG9uc2UgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmICghZ2xvYmFsVGhpcy5oYXNPd25Qcm9wZXJ0eSgiSW1hZ2UiKSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpOwogICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7CiAgICAgICAgICByZXNvbHZlKHRydWUpOwogICAgICAgIH07CiAgICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiB7CiAgICAgICAgICByZXNvbHZlKGZhbHNlKTsKICAgICAgICB9OwogICAgICAgIGltZy5zcmMgPSB1cmk7CiAgICAgIH0pOwogICAgfQogIH0KICBmdW5jdGlvbiBnZXRHYXRld2F5KGN1c3RvbTIsIGRlZmF1bHRHYXRld2F5KSB7CiAgICBpZiAoIWN1c3RvbTIpCiAgICAgIHJldHVybiBkZWZhdWx0R2F0ZXdheTsKICAgIGlmIChjdXN0b20yLmVuZHNXaXRoKCIvIikpCiAgICAgIHJldHVybiBjdXN0b20yLnNsaWNlKDAsIC0xKTsKICAgIHJldHVybiBjdXN0b20yOwogIH0KICBmdW5jdGlvbiByZXNvbHZlQXZhdGFyVXJpKHsgdXJpLCBnYXRld2F5VXJscyB9KSB7CiAgICBjb25zdCBpc0VuY29kZWQgPSBiYXNlNjRSZWdleC50ZXN0KHVyaSk7CiAgICBpZiAoaXNFbmNvZGVkKQogICAgICByZXR1cm4geyB1cmksIGlzT25DaGFpbjogdHJ1ZSwgaXNFbmNvZGVkIH07CiAgICBjb25zdCBpcGZzR2F0ZXdheSA9IGdldEdhdGV3YXkoZ2F0ZXdheVVybHM/LmlwZnMsICJodHRwczovL2lwZnMuaW8iKTsKICAgIGNvbnN0IGFyd2VhdmVHYXRld2F5ID0gZ2V0R2F0ZXdheShnYXRld2F5VXJscz8uYXJ3ZWF2ZSwgImh0dHBzOi8vYXJ3ZWF2ZS5uZXQiKTsKICAgIGNvbnN0IG5ldHdvcmtSZWdleE1hdGNoID0gdXJpLm1hdGNoKG5ldHdvcmtSZWdleCk7CiAgICBjb25zdCB7IHByb3RvY29sLCBzdWJwYXRoLCB0YXJnZXQsIHN1YnRhcmdldCA9ICIiIH0gPSBuZXR3b3JrUmVnZXhNYXRjaD8uZ3JvdXBzIHx8IHt9OwogICAgY29uc3QgaXNJUE5TID0gcHJvdG9jb2wgPT09ICJpcG5zOi8iIHx8IHN1YnBhdGggPT09ICJpcG5zLyI7CiAgICBjb25zdCBpc0lQRlMgPSBwcm90b2NvbCA9PT0gImlwZnM6LyIgfHwgc3VicGF0aCA9PT0gImlwZnMvIiB8fCBpcGZzSGFzaFJlZ2V4LnRlc3QodXJpKTsKICAgIGlmICh1cmkuc3RhcnRzV2l0aCgiaHR0cCIpICYmICFpc0lQTlMgJiYgIWlzSVBGUykgewogICAgICBsZXQgcmVwbGFjZWRVcmkgPSB1cmk7CiAgICAgIGlmIChnYXRld2F5VXJscz8uYXJ3ZWF2ZSkKICAgICAgICByZXBsYWNlZFVyaSA9IHVyaS5yZXBsYWNlKC9odHRwczpcL1wvYXJ3ZWF2ZS5uZXQvZywgZ2F0ZXdheVVybHM/LmFyd2VhdmUpOwogICAgICByZXR1cm4geyB1cmk6IHJlcGxhY2VkVXJpLCBpc09uQ2hhaW46IGZhbHNlLCBpc0VuY29kZWQ6IGZhbHNlIH07CiAgICB9CiAgICBpZiAoKGlzSVBOUyB8fCBpc0lQRlMpICYmIHRhcmdldCkgewogICAgICByZXR1cm4gewogICAgICAgIHVyaTogYCR7aXBmc0dhdGV3YXl9LyR7aXNJUE5TID8gImlwbnMiIDogImlwZnMifS8ke3RhcmdldH0ke3N1YnRhcmdldH1gLAogICAgICAgIGlzT25DaGFpbjogZmFsc2UsCiAgICAgICAgaXNFbmNvZGVkOiBmYWxzZQogICAgICB9OwogICAgfQogICAgaWYgKHByb3RvY29sID09PSAiYXI6LyIgJiYgdGFyZ2V0KSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdXJpOiBgJHthcndlYXZlR2F0ZXdheX0vJHt0YXJnZXR9JHtzdWJ0YXJnZXQgfHwgIiJ9YCwKICAgICAgICBpc09uQ2hhaW46IGZhbHNlLAogICAgICAgIGlzRW5jb2RlZDogZmFsc2UKICAgICAgfTsKICAgIH0KICAgIGxldCBwYXJzZWRVcmkgPSB1cmkucmVwbGFjZShkYXRhVVJJUmVnZXgsICIiKTsKICAgIGlmIChwYXJzZWRVcmkuc3RhcnRzV2l0aCgiPHN2ZyIpKSB7CiAgICAgIHBhcnNlZFVyaSA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7YnRvYShwYXJzZWRVcmkpfWA7CiAgICB9CiAgICBpZiAocGFyc2VkVXJpLnN0YXJ0c1dpdGgoImRhdGE6IikgfHwgcGFyc2VkVXJpLnN0YXJ0c1dpdGgoInsiKSkgewogICAgICByZXR1cm4gewogICAgICAgIHVyaTogcGFyc2VkVXJpLAogICAgICAgIGlzT25DaGFpbjogdHJ1ZSwKICAgICAgICBpc0VuY29kZWQ6IGZhbHNlCiAgICAgIH07CiAgICB9CiAgICB0aHJvdyBuZXcgRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yKHsgdXJpIH0pOwogIH0KICBmdW5jdGlvbiBnZXRKc29uSW1hZ2UoZGF0YSkgewogICAgaWYgKHR5cGVvZiBkYXRhICE9PSAib2JqZWN0IiB8fCAhKCJpbWFnZSIgaW4gZGF0YSkgJiYgISgiaW1hZ2VfdXJsIiBpbiBkYXRhKSAmJiAhKCJpbWFnZV9kYXRhIiBpbiBkYXRhKSkgewogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE1ldGFkYXRhRXJyb3IoeyBkYXRhIH0pOwogICAgfQogICAgcmV0dXJuIGRhdGEuaW1hZ2UgfHwgZGF0YS5pbWFnZV91cmwgfHwgZGF0YS5pbWFnZV9kYXRhOwogIH0KICBhc3luYyBmdW5jdGlvbiBnZXRNZXRhZGF0YUF2YXRhclVyaSh7IGdhdGV3YXlVcmxzLCB1cmkgfSkgewogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJpKS50aGVuKChyZXMyKSA9PiByZXMyLmpzb24oKSk7CiAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgcGFyc2VBdmF0YXJVcmkoewogICAgICAgIGdhdGV3YXlVcmxzLAogICAgICAgIHVyaTogZ2V0SnNvbkltYWdlKHJlcykKICAgICAgfSk7CiAgICAgIHJldHVybiBpbWFnZTsKICAgIH0gY2F0Y2ggewogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yKHsgdXJpIH0pOwogICAgfQogIH0KICBhc3luYyBmdW5jdGlvbiBwYXJzZUF2YXRhclVyaSh7IGdhdGV3YXlVcmxzLCB1cmkgfSkgewogICAgY29uc3QgeyB1cmk6IHJlc29sdmVkVVJJLCBpc09uQ2hhaW4gfSA9IHJlc29sdmVBdmF0YXJVcmkoeyB1cmksIGdhdGV3YXlVcmxzIH0pOwogICAgaWYgKGlzT25DaGFpbikKICAgICAgcmV0dXJuIHJlc29sdmVkVVJJOwogICAgY29uc3QgaXNJbWFnZSA9IGF3YWl0IGlzSW1hZ2VVcmkocmVzb2x2ZWRVUkkpOwogICAgaWYgKGlzSW1hZ2UpCiAgICAgIHJldHVybiByZXNvbHZlZFVSSTsKICAgIHRocm93IG5ldyBFbnNBdmF0YXJVcmlSZXNvbHV0aW9uRXJyb3IoeyB1cmkgfSk7CiAgfQogIGZ1bmN0aW9uIHBhcnNlTmZ0VXJpKHVyaV8pIHsKICAgIGxldCB1cmkgPSB1cmlfOwogICAgaWYgKHVyaS5zdGFydHNXaXRoKCJkaWQ6bmZ0OiIpKSB7CiAgICAgIHVyaSA9IHVyaS5yZXBsYWNlKCJkaWQ6bmZ0OiIsICIiKS5yZXBsYWNlKC9fL2csICIvIik7CiAgICB9CiAgICBjb25zdCBbcmVmZXJlbmNlLCBhc3NldF9uYW1lc3BhY2UsIHRva2VuSURdID0gdXJpLnNwbGl0KCIvIik7CiAgICBjb25zdCBbZWlwX25hbWVzcGFjZSwgY2hhaW5JRF0gPSByZWZlcmVuY2Uuc3BsaXQoIjoiKTsKICAgIGNvbnN0IFtlcmNfbmFtZXNwYWNlLCBjb250cmFjdEFkZHJlc3NdID0gYXNzZXRfbmFtZXNwYWNlLnNwbGl0KCI6Iik7CiAgICBpZiAoIWVpcF9uYW1lc3BhY2UgfHwgZWlwX25hbWVzcGFjZS50b0xvd2VyQ2FzZSgpICE9PSAiZWlwMTU1IikKICAgICAgdGhyb3cgbmV3IEVuc0F2YXRhckludmFsaWROZnRVcmlFcnJvcih7IHJlYXNvbjogIk9ubHkgRUlQLTE1NSBzdXBwb3J0ZWQiIH0pOwogICAgaWYgKCFjaGFpbklEKQogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yKHsgcmVhc29uOiAiQ2hhaW4gSUQgbm90IGZvdW5kIiB9KTsKICAgIGlmICghY29udHJhY3RBZGRyZXNzKQogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yKHsKICAgICAgICByZWFzb246ICJDb250cmFjdCBhZGRyZXNzIG5vdCBmb3VuZCIKICAgICAgfSk7CiAgICBpZiAoIXRva2VuSUQpCiAgICAgIHRocm93IG5ldyBFbnNBdmF0YXJJbnZhbGlkTmZ0VXJpRXJyb3IoeyByZWFzb246ICJUb2tlbiBJRCBub3QgZm91bmQiIH0pOwogICAgaWYgKCFlcmNfbmFtZXNwYWNlKQogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yKHsgcmVhc29uOiAiRVJDIG5hbWVzcGFjZSBub3QgZm91bmQiIH0pOwogICAgcmV0dXJuIHsKICAgICAgY2hhaW5JRDogTnVtYmVyLnBhcnNlSW50KGNoYWluSUQpLAogICAgICBuYW1lc3BhY2U6IGVyY19uYW1lc3BhY2UudG9Mb3dlckNhc2UoKSwKICAgICAgY29udHJhY3RBZGRyZXNzLAogICAgICB0b2tlbklECiAgICB9OwogIH0KICBhc3luYyBmdW5jdGlvbiBnZXROZnRUb2tlblVyaShjbGllbnQsIHsgbmZ0IH0pIHsKICAgIGlmIChuZnQubmFtZXNwYWNlID09PSAiZXJjNzIxIikgewogICAgICByZXR1cm4gcmVhZENvbnRyYWN0KGNsaWVudCwgewogICAgICAgIGFkZHJlc3M6IG5mdC5jb250cmFjdEFkZHJlc3MsCiAgICAgICAgYWJpOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJ0b2tlblVSSSIsCiAgICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgICBpbnB1dHM6IFt7IG5hbWU6ICJ0b2tlbklkIiwgdHlwZTogInVpbnQyNTYiIH1dLAogICAgICAgICAgICBvdXRwdXRzOiBbeyBuYW1lOiAiIiwgdHlwZTogInN0cmluZyIgfV0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIGZ1bmN0aW9uTmFtZTogInRva2VuVVJJIiwKICAgICAgICBhcmdzOiBbQmlnSW50KG5mdC50b2tlbklEKV0KICAgICAgfSk7CiAgICB9CiAgICBpZiAobmZ0Lm5hbWVzcGFjZSA9PT0gImVyYzExNTUiKSB7CiAgICAgIHJldHVybiByZWFkQ29udHJhY3QoY2xpZW50LCB7CiAgICAgICAgYWRkcmVzczogbmZ0LmNvbnRyYWN0QWRkcmVzcywKICAgICAgICBhYmk6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogInVyaSIsCiAgICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgICBpbnB1dHM6IFt7IG5hbWU6ICJfaWQiLCB0eXBlOiAidWludDI1NiIgfV0sCiAgICAgICAgICAgIG91dHB1dHM6IFt7IG5hbWU6ICIiLCB0eXBlOiAic3RyaW5nIiB9XQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgZnVuY3Rpb25OYW1lOiAidXJpIiwKICAgICAgICBhcmdzOiBbQmlnSW50KG5mdC50b2tlbklEKV0KICAgICAgfSk7CiAgICB9CiAgICB0aHJvdyBuZXcgRW5zQXZhdGFyVW5zdXBwb3J0ZWROYW1lc3BhY2VFcnJvcih7IG5hbWVzcGFjZTogbmZ0Lm5hbWVzcGFjZSB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5zL2F2YXRhci9wYXJzZUF2YXRhclJlY29yZC5qcwogIGFzeW5jIGZ1bmN0aW9uIHBhcnNlQXZhdGFyUmVjb3JkKGNsaWVudCwgeyBnYXRld2F5VXJscywgcmVjb3JkIH0pIHsKICAgIGlmICgvZWlwMTU1Oi9pLnRlc3QocmVjb3JkKSkKICAgICAgcmV0dXJuIHBhcnNlTmZ0QXZhdGFyVXJpKGNsaWVudCwgeyBnYXRld2F5VXJscywgcmVjb3JkIH0pOwogICAgcmV0dXJuIHBhcnNlQXZhdGFyVXJpKHsgdXJpOiByZWNvcmQsIGdhdGV3YXlVcmxzIH0pOwogIH0KICBhc3luYyBmdW5jdGlvbiBwYXJzZU5mdEF2YXRhclVyaShjbGllbnQsIHsgZ2F0ZXdheVVybHMsIHJlY29yZCB9KSB7CiAgICBjb25zdCBuZnQgPSBwYXJzZU5mdFVyaShyZWNvcmQpOwogICAgY29uc3QgbmZ0VXJpID0gYXdhaXQgZ2V0TmZ0VG9rZW5VcmkoY2xpZW50LCB7IG5mdCB9KTsKICAgIGNvbnN0IHsgdXJpOiByZXNvbHZlZE5mdFVyaSwgaXNPbkNoYWluLCBpc0VuY29kZWQgfSA9IHJlc29sdmVBdmF0YXJVcmkoeyB1cmk6IG5mdFVyaSwgZ2F0ZXdheVVybHMgfSk7CiAgICBpZiAoaXNPbkNoYWluICYmIChyZXNvbHZlZE5mdFVyaS5pbmNsdWRlcygiZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwiKSB8fCByZXNvbHZlZE5mdFVyaS5zdGFydHNXaXRoKCJ7IikpKSB7CiAgICAgIGNvbnN0IGVuY29kZWRKc29uID0gaXNFbmNvZGVkID8gKAogICAgICAgIC8vIGlmIGl0IGlzIGVuY29kZWQsIGRlY29kZSBpdAogICAgICAgIGF0b2IocmVzb2x2ZWROZnRVcmkucmVwbGFjZSgiZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwiLCAiIikpCiAgICAgICkgOiAoCiAgICAgICAgLy8gaWYgaXQgaXNuJ3QgZW5jb2RlZCBhc3N1bWUgaXQgaXMgYSBKU09OIHN0cmluZywgYnV0IGl0IGNvdWxkIGJlIGFueXRoaW5nIChpdCB3aWxsIGVycm9yIGlmIGl0IGlzKQogICAgICAgIHJlc29sdmVkTmZ0VXJpCiAgICAgICk7CiAgICAgIGNvbnN0IGRlY29kZWQgPSBKU09OLnBhcnNlKGVuY29kZWRKc29uKTsKICAgICAgcmV0dXJuIHBhcnNlQXZhdGFyVXJpKHsgdXJpOiBnZXRKc29uSW1hZ2UoZGVjb2RlZCksIGdhdGV3YXlVcmxzIH0pOwogICAgfQogICAgbGV0IHVyaVRva2VuSWQgPSBuZnQudG9rZW5JRDsKICAgIGlmIChuZnQubmFtZXNwYWNlID09PSAiZXJjMTE1NSIpCiAgICAgIHVyaVRva2VuSWQgPSB1cmlUb2tlbklkLnJlcGxhY2UoIjB4IiwgIiIpLnBhZFN0YXJ0KDY0LCAiMCIpOwogICAgcmV0dXJuIGdldE1ldGFkYXRhQXZhdGFyVXJpKHsKICAgICAgZ2F0ZXdheVVybHMsCiAgICAgIHVyaTogcmVzb2x2ZWROZnRVcmkucmVwbGFjZSgvKD86MHgpP3tpZH0vLCB1cmlUb2tlbklkKQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvZW5zL2dldEVuc1RleHQuanMKICBpbml0X2FiaXMoKTsKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2dldENoYWluQ29udHJhY3RBZGRyZXNzKCk7CiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldEVuc1RleHQoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZywgbmFtZSwga2V5LCBnYXRld2F5VXJscywgc3RyaWN0LCB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3M6IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc18gfSkgewogICAgbGV0IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyA9IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc187CiAgICBpZiAoIXVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcykgewogICAgICBpZiAoIWNsaWVudC5jaGFpbikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNsaWVudCBjaGFpbiBub3QgY29uZmlndXJlZC4gdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzIGlzIHJlcXVpcmVkLiIpOwogICAgICB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgPSBnZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyh7CiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgY2hhaW46IGNsaWVudC5jaGFpbiwKICAgICAgICBjb250cmFjdDogImVuc1VuaXZlcnNhbFJlc29sdmVyIgogICAgICB9KTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlYWRDb250cmFjdFBhcmFtZXRlcnMgPSB7CiAgICAgICAgYWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzLAogICAgICAgIGFiaTogdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpLAogICAgICAgIGZ1bmN0aW9uTmFtZTogInJlc29sdmUiLAogICAgICAgIGFyZ3M6IFsKICAgICAgICAgIHRvSGV4KHBhY2tldFRvQnl0ZXMobmFtZSkpLAogICAgICAgICAgZW5jb2RlRnVuY3Rpb25EYXRhKHsKICAgICAgICAgICAgYWJpOiB0ZXh0UmVzb2x2ZXJBYmksCiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogInRleHQiLAogICAgICAgICAgICBhcmdzOiBbbmFtZWhhc2gobmFtZSksIGtleV0KICAgICAgICAgIH0pCiAgICAgICAgXSwKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBibG9ja1RhZwogICAgICB9OwogICAgICBjb25zdCByZWFkQ29udHJhY3RBY3Rpb24gPSBnZXRBY3Rpb24oY2xpZW50LCByZWFkQ29udHJhY3QsICJyZWFkQ29udHJhY3QiKTsKICAgICAgY29uc3QgcmVzID0gZ2F0ZXdheVVybHMgPyBhd2FpdCByZWFkQ29udHJhY3RBY3Rpb24oewogICAgICAgIC4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMsCiAgICAgICAgYXJnczogWy4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMuYXJncywgZ2F0ZXdheVVybHNdCiAgICAgIH0pIDogYXdhaXQgcmVhZENvbnRyYWN0QWN0aW9uKHJlYWRDb250cmFjdFBhcmFtZXRlcnMpOwogICAgICBpZiAocmVzWzBdID09PSAiMHgiKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCByZWNvcmQgPSBkZWNvZGVGdW5jdGlvblJlc3VsdCh7CiAgICAgICAgYWJpOiB0ZXh0UmVzb2x2ZXJBYmksCiAgICAgICAgZnVuY3Rpb25OYW1lOiAidGV4dCIsCiAgICAgICAgZGF0YTogcmVzWzBdCiAgICAgIH0pOwogICAgICByZXR1cm4gcmVjb3JkID09PSAiIiA/IG51bGwgOiByZWNvcmQ7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgaWYgKHN0cmljdCkKICAgICAgICB0aHJvdyBlcnI7CiAgICAgIGlmIChpc051bGxVbml2ZXJzYWxSZXNvbHZlckVycm9yKGVyciwgInJlc29sdmUiKSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgdGhyb3cgZXJyOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2Vucy9nZXRFbnNBdmF0YXIuanMKICBhc3luYyBmdW5jdGlvbiBnZXRFbnNBdmF0YXIoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZywgYXNzZXRHYXRld2F5VXJscywgbmFtZSwgZ2F0ZXdheVVybHMsIHN0cmljdCwgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzIH0pIHsKICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEVuc1RleHQsICJnZXRFbnNUZXh0IikoewogICAgICBibG9ja051bWJlciwKICAgICAgYmxvY2tUYWcsCiAgICAgIGtleTogImF2YXRhciIsCiAgICAgIG5hbWUsCiAgICAgIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcywKICAgICAgZ2F0ZXdheVVybHMsCiAgICAgIHN0cmljdAogICAgfSk7CiAgICBpZiAoIXJlY29yZCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB0cnkgewogICAgICByZXR1cm4gYXdhaXQgcGFyc2VBdmF0YXJSZWNvcmQoY2xpZW50LCB7CiAgICAgICAgcmVjb3JkLAogICAgICAgIGdhdGV3YXlVcmxzOiBhc3NldEdhdGV3YXlVcmxzCiAgICAgIH0pOwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2Vucy9nZXRFbnNOYW1lLmpzCiAgaW5pdF9hYmlzKCk7CiAgaW5pdF9nZXRDaGFpbkNvbnRyYWN0QWRkcmVzcygpOwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRFbnNOYW1lKGNsaWVudCwgeyBhZGRyZXNzLCBibG9ja051bWJlciwgYmxvY2tUYWcsIGdhdGV3YXlVcmxzLCBzdHJpY3QsIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzXyB9KSB7CiAgICBsZXQgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzID0gdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzXzsKICAgIGlmICghdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzKSB7CiAgICAgIGlmICghY2xpZW50LmNoYWluKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiY2xpZW50IGNoYWluIG5vdCBjb25maWd1cmVkLiB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgaXMgcmVxdWlyZWQuIik7CiAgICAgIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyA9IGdldENoYWluQ29udHJhY3RBZGRyZXNzKHsKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBjaGFpbjogY2xpZW50LmNoYWluLAogICAgICAgIGNvbnRyYWN0OiAiZW5zVW5pdmVyc2FsUmVzb2x2ZXIiCiAgICAgIH0pOwogICAgfQogICAgY29uc3QgcmV2ZXJzZU5vZGUgPSBgJHthZGRyZXNzLnRvTG93ZXJDYXNlKCkuc3Vic3RyaW5nKDIpfS5hZGRyLnJldmVyc2VgOwogICAgdHJ5IHsKICAgICAgY29uc3QgcmVhZENvbnRyYWN0UGFyYW1ldGVycyA9IHsKICAgICAgICBhZGRyZXNzOiB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MsCiAgICAgICAgYWJpOiB1bml2ZXJzYWxSZXNvbHZlclJldmVyc2VBYmksCiAgICAgICAgZnVuY3Rpb25OYW1lOiAicmV2ZXJzZSIsCiAgICAgICAgYXJnczogW3RvSGV4KHBhY2tldFRvQnl0ZXMocmV2ZXJzZU5vZGUpKV0sCiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgYmxvY2tUYWcKICAgICAgfTsKICAgICAgY29uc3QgcmVhZENvbnRyYWN0QWN0aW9uID0gZ2V0QWN0aW9uKGNsaWVudCwgcmVhZENvbnRyYWN0LCAicmVhZENvbnRyYWN0Iik7CiAgICAgIGNvbnN0IFtuYW1lLCByZXNvbHZlZEFkZHJlc3NdID0gZ2F0ZXdheVVybHMgPyBhd2FpdCByZWFkQ29udHJhY3RBY3Rpb24oewogICAgICAgIC4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMsCiAgICAgICAgYXJnczogWy4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMuYXJncywgZ2F0ZXdheVVybHNdCiAgICAgIH0pIDogYXdhaXQgcmVhZENvbnRyYWN0QWN0aW9uKHJlYWRDb250cmFjdFBhcmFtZXRlcnMpOwogICAgICBpZiAoYWRkcmVzcy50b0xvd2VyQ2FzZSgpICE9PSByZXNvbHZlZEFkZHJlc3MudG9Mb3dlckNhc2UoKSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIG5hbWU7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgaWYgKHN0cmljdCkKICAgICAgICB0aHJvdyBlcnI7CiAgICAgIGlmIChpc051bGxVbml2ZXJzYWxSZXNvbHZlckVycm9yKGVyciwgInJldmVyc2UiKSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgdGhyb3cgZXJyOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2Vucy9nZXRFbnNSZXNvbHZlci5qcwogIGluaXRfZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0RW5zUmVzb2x2ZXIoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZywgbmFtZSwgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzOiB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3NfIH0pIHsKICAgIGxldCB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgPSB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3NfOwogICAgaWYgKCF1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MpIHsKICAgICAgaWYgKCFjbGllbnQuY2hhaW4pCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJjbGllbnQgY2hhaW4gbm90IGNvbmZpZ3VyZWQuIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyBpcyByZXF1aXJlZC4iKTsKICAgICAgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzID0gZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoewogICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgIGNoYWluOiBjbGllbnQuY2hhaW4sCiAgICAgICAgY29udHJhY3Q6ICJlbnNVbml2ZXJzYWxSZXNvbHZlciIKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBbcmVzb2x2ZXJBZGRyZXNzXSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHJlYWRDb250cmFjdCwgInJlYWRDb250cmFjdCIpKHsKICAgICAgYWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzLAogICAgICBhYmk6IFsKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFt7IHR5cGU6ICJieXRlcyIgfV0sCiAgICAgICAgICBuYW1lOiAiZmluZFJlc29sdmVyIiwKICAgICAgICAgIG91dHB1dHM6IFt7IHR5cGU6ICJhZGRyZXNzIiB9LCB7IHR5cGU6ICJieXRlczMyIiB9XSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0KICAgICAgXSwKICAgICAgZnVuY3Rpb25OYW1lOiAiZmluZFJlc29sdmVyIiwKICAgICAgYXJnczogW3RvSGV4KHBhY2tldFRvQnl0ZXMobmFtZSkpXSwKICAgICAgYmxvY2tOdW1iZXIsCiAgICAgIGJsb2NrVGFnCiAgICB9KTsKICAgIHJldHVybiByZXNvbHZlckFkZHJlc3M7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvZGVjb3JhdG9ycy9wdWJsaWMuanMKICBpbml0X2NhbGwoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9jcmVhdGVCbG9ja0ZpbHRlci5qcwogIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJsb2NrRmlsdGVyKGNsaWVudCkgewogICAgY29uc3QgZ2V0UmVxdWVzdCA9IGNyZWF0ZUZpbHRlclJlcXVlc3RTY29wZShjbGllbnQsIHsKICAgICAgbWV0aG9kOiAiZXRoX25ld0Jsb2NrRmlsdGVyIgogICAgfSk7CiAgICBjb25zdCBpZCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX25ld0Jsb2NrRmlsdGVyIgogICAgfSk7CiAgICByZXR1cm4geyBpZCwgcmVxdWVzdDogZ2V0UmVxdWVzdChpZCksIHR5cGU6ICJibG9jayIgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvY3JlYXRlRXZlbnRGaWx0ZXIuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRXZlbnRGaWx0ZXIoY2xpZW50LCB7IGFkZHJlc3MsIGFyZ3MsIGV2ZW50LCBldmVudHM6IGV2ZW50c18sIGZyb21CbG9jaywgc3RyaWN0LCB0b0Jsb2NrIH0gPSB7fSkgewogICAgY29uc3QgZXZlbnRzID0gZXZlbnRzXyA/PyAoZXZlbnQgPyBbZXZlbnRdIDogdm9pZCAwKTsKICAgIGNvbnN0IGdldFJlcXVlc3QgPSBjcmVhdGVGaWx0ZXJSZXF1ZXN0U2NvcGUoY2xpZW50LCB7CiAgICAgIG1ldGhvZDogImV0aF9uZXdGaWx0ZXIiCiAgICB9KTsKICAgIGxldCB0b3BpY3MgPSBbXTsKICAgIGlmIChldmVudHMpIHsKICAgICAgY29uc3QgZW5jb2RlZCA9IGV2ZW50cy5mbGF0TWFwKChldmVudDIpID0+IGVuY29kZUV2ZW50VG9waWNzKHsKICAgICAgICBhYmk6IFtldmVudDJdLAogICAgICAgIGV2ZW50TmFtZTogZXZlbnQyLm5hbWUsCiAgICAgICAgYXJncwogICAgICB9KSk7CiAgICAgIHRvcGljcyA9IFtlbmNvZGVkXTsKICAgICAgaWYgKGV2ZW50KQogICAgICAgIHRvcGljcyA9IHRvcGljc1swXTsKICAgIH0KICAgIGNvbnN0IGlkID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfbmV3RmlsdGVyIiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgewogICAgICAgICAgYWRkcmVzcywKICAgICAgICAgIGZyb21CbG9jazogdHlwZW9mIGZyb21CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleChmcm9tQmxvY2spIDogZnJvbUJsb2NrLAogICAgICAgICAgdG9CbG9jazogdHlwZW9mIHRvQmxvY2sgPT09ICJiaWdpbnQiID8gbnVtYmVyVG9IZXgodG9CbG9jaykgOiB0b0Jsb2NrLAogICAgICAgICAgLi4udG9waWNzLmxlbmd0aCA/IHsgdG9waWNzIH0gOiB7fQogICAgICAgIH0KICAgICAgXQogICAgfSk7CiAgICByZXR1cm4gewogICAgICBhYmk6IGV2ZW50cywKICAgICAgYXJncywKICAgICAgZXZlbnROYW1lOiBldmVudCA/IGV2ZW50Lm5hbWUgOiB2b2lkIDAsCiAgICAgIGZyb21CbG9jaywKICAgICAgaWQsCiAgICAgIHJlcXVlc3Q6IGdldFJlcXVlc3QoaWQpLAogICAgICBzdHJpY3Q6IEJvb2xlYW4oc3RyaWN0KSwKICAgICAgdG9CbG9jaywKICAgICAgdHlwZTogImV2ZW50IgogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvY3JlYXRlUGVuZGluZ1RyYW5zYWN0aW9uRmlsdGVyLmpzCiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlUGVuZGluZ1RyYW5zYWN0aW9uRmlsdGVyKGNsaWVudCkgewogICAgY29uc3QgZ2V0UmVxdWVzdCA9IGNyZWF0ZUZpbHRlclJlcXVlc3RTY29wZShjbGllbnQsIHsKICAgICAgbWV0aG9kOiAiZXRoX25ld1BlbmRpbmdUcmFuc2FjdGlvbkZpbHRlciIKICAgIH0pOwogICAgY29uc3QgaWQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9uZXdQZW5kaW5nVHJhbnNhY3Rpb25GaWx0ZXIiCiAgICB9KTsKICAgIHJldHVybiB7IGlkLCByZXF1ZXN0OiBnZXRSZXF1ZXN0KGlkKSwgdHlwZTogInRyYW5zYWN0aW9uIiB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRCbG9iQmFzZUZlZS5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldEJsb2JCYXNlRmVlKGNsaWVudCkgewogICAgY29uc3QgYmFzZUZlZSA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2Jsb2JCYXNlRmVlIgogICAgfSk7CiAgICByZXR1cm4gQmlnSW50KGJhc2VGZWUpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRCbG9ja1RyYW5zYWN0aW9uQ291bnQuanMKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50KGNsaWVudCwgeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyLCBibG9ja1RhZyA9ICJsYXRlc3QiIH0gPSB7fSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciAhPT0gdm9pZCAwID8gbnVtYmVyVG9IZXgoYmxvY2tOdW1iZXIpIDogdm9pZCAwOwogICAgbGV0IGNvdW50OwogICAgaWYgKGJsb2NrSGFzaCkgewogICAgICBjb3VudCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50QnlIYXNoIiwKICAgICAgICBwYXJhbXM6IFtibG9ja0hhc2hdCiAgICAgIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgfSBlbHNlIHsKICAgICAgY291bnQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXRoX2dldEJsb2NrVHJhbnNhY3Rpb25Db3VudEJ5TnVtYmVyIiwKICAgICAgICBwYXJhbXM6IFtibG9ja051bWJlckhleCB8fCBibG9ja1RhZ10KICAgICAgfSwgeyBkZWR1cGU6IEJvb2xlYW4oYmxvY2tOdW1iZXJIZXgpIH0pOwogICAgfQogICAgcmV0dXJuIGhleFRvTnVtYmVyKGNvdW50KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0Q29kZS5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRDb2RlKGNsaWVudCwgeyBhZGRyZXNzLCBibG9ja051bWJlciwgYmxvY2tUYWcgPSAibGF0ZXN0IiB9KSB7CiAgICBjb25zdCBibG9ja051bWJlckhleCA9IGJsb2NrTnVtYmVyICE9PSB2b2lkIDAgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICBjb25zdCBoZXggPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRDb2RlIiwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWddCiAgICB9LCB7IGRlZHVwZTogQm9vbGVhbihibG9ja051bWJlckhleCkgfSk7CiAgICBpZiAoaGV4ID09PSAiMHgiKQogICAgICByZXR1cm4gdm9pZCAwOwogICAgcmV0dXJuIGhleDsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0RmVlSGlzdG9yeS5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2ZlZUhpc3RvcnkuanMKICBmdW5jdGlvbiBmb3JtYXRGZWVIaXN0b3J5KGZlZUhpc3RvcnkpIHsKICAgIHJldHVybiB7CiAgICAgIGJhc2VGZWVQZXJHYXM6IGZlZUhpc3RvcnkuYmFzZUZlZVBlckdhcy5tYXAoKHZhbHVlKSA9PiBCaWdJbnQodmFsdWUpKSwKICAgICAgZ2FzVXNlZFJhdGlvOiBmZWVIaXN0b3J5Lmdhc1VzZWRSYXRpbywKICAgICAgb2xkZXN0QmxvY2s6IEJpZ0ludChmZWVIaXN0b3J5Lm9sZGVzdEJsb2NrKSwKICAgICAgcmV3YXJkOiBmZWVIaXN0b3J5LnJld2FyZD8ubWFwKChyZXdhcmQpID0+IHJld2FyZC5tYXAoKHZhbHVlKSA9PiBCaWdJbnQodmFsdWUpKSkKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEZlZUhpc3RvcnkuanMKICBhc3luYyBmdW5jdGlvbiBnZXRGZWVIaXN0b3J5KGNsaWVudCwgeyBibG9ja0NvdW50LCBibG9ja051bWJlciwgYmxvY2tUYWcgPSAibGF0ZXN0IiwgcmV3YXJkUGVyY2VudGlsZXMgfSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgIGNvbnN0IGZlZUhpc3RvcnkgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9mZWVIaXN0b3J5IiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgbnVtYmVyVG9IZXgoYmxvY2tDb3VudCksCiAgICAgICAgYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWcsCiAgICAgICAgcmV3YXJkUGVyY2VudGlsZXMKICAgICAgXQogICAgfSwgeyBkZWR1cGU6IEJvb2xlYW4oYmxvY2tOdW1iZXJIZXgpIH0pOwogICAgcmV0dXJuIGZvcm1hdEZlZUhpc3RvcnkoZmVlSGlzdG9yeSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEZpbHRlckxvZ3MuanMKICBhc3luYyBmdW5jdGlvbiBnZXRGaWx0ZXJMb2dzKF9jbGllbnQsIHsgZmlsdGVyIH0pIHsKICAgIGNvbnN0IHN0cmljdCA9IGZpbHRlci5zdHJpY3QgPz8gZmFsc2U7CiAgICBjb25zdCBsb2dzID0gYXdhaXQgZmlsdGVyLnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfZ2V0RmlsdGVyTG9ncyIsCiAgICAgIHBhcmFtczogW2ZpbHRlci5pZF0KICAgIH0pOwogICAgY29uc3QgZm9ybWF0dGVkTG9ncyA9IGxvZ3MubWFwKChsb2cpID0+IGZvcm1hdExvZyhsb2cpKTsKICAgIGlmICghZmlsdGVyLmFiaSkKICAgICAgcmV0dXJuIGZvcm1hdHRlZExvZ3M7CiAgICByZXR1cm4gcGFyc2VFdmVudExvZ3MoewogICAgICBhYmk6IGZpbHRlci5hYmksCiAgICAgIGxvZ3M6IGZvcm1hdHRlZExvZ3MsCiAgICAgIHN0cmljdAogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldFByb29mLmpzCiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2NoYWluL2RlZmluZUNoYWluLmpzCiAgZnVuY3Rpb24gZGVmaW5lQ2hhaW4oY2hhaW4pIHsKICAgIHJldHVybiB7CiAgICAgIGZvcm1hdHRlcnM6IHZvaWQgMCwKICAgICAgZmVlczogdm9pZCAwLAogICAgICBzZXJpYWxpemVyczogdm9pZCAwLAogICAgICAuLi5jaGFpbgogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY2hhaW4vZXh0cmFjdENoYWluLmpzCiAgZnVuY3Rpb24gZXh0cmFjdENoYWluKHsgY2hhaW5zLCBpZCB9KSB7CiAgICByZXR1cm4gY2hhaW5zLmZpbmQoKGNoYWluKSA9PiBjaGFpbi5pZCA9PT0gaWQpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9yZWdleC5qcwogIHZhciBhcnJheVJlZ2V4ID0gL14oLiopXFsoWzAtOV0qKVxdJC87CiAgdmFyIGJ5dGVzUmVnZXgyID0gL15ieXRlcyhbMS05XXwxWzAtOV18MlswLTldfDNbMC0yXSk/JC87CiAgdmFyIGludGVnZXJSZWdleDIgPSAvXih1P2ludCkoOHwxNnwyNHwzMnw0MHw0OHw1Nnw2NHw3Mnw4MHw4OHw5NnwxMDR8MTEyfDEyMHwxMjh8MTM2fDE0NHwxNTJ8MTYwfDE2OHwxNzZ8MTg0fDE5MnwyMDB8MjA4fDIxNnwyMjR8MjMyfDI0MHwyNDh8MjU2KT8kLzsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ycGMvd2ViU29ja2V0LmpzCiAgaW5pdF9yZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcnBjL3NvY2tldC5qcwogIGluaXRfcmVxdWVzdCgpOwogIGluaXRfY3JlYXRlQmF0Y2hTY2hlZHVsZXIoKTsKICB2YXIgc29ja2V0Q2xpZW50Q2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldFNvY2tldFJwY0NsaWVudChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGdldFNvY2tldDogZ2V0U29ja2V0Miwga2VlcEFsaXZlID0gdHJ1ZSwga2V5ID0gInNvY2tldCIsIHJlY29ubmVjdCA9IHRydWUsIHVybCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHsgaW50ZXJ2YWw6IGtlZXBBbGl2ZUludGVydmFsID0gM2U0IH0gPSB0eXBlb2Yga2VlcEFsaXZlID09PSAib2JqZWN0IiA/IGtlZXBBbGl2ZSA6IHt9OwogICAgY29uc3QgeyBhdHRlbXB0cyA9IDUsIGRlbGF5ID0gMmUzIH0gPSB0eXBlb2YgcmVjb25uZWN0ID09PSAib2JqZWN0IiA/IHJlY29ubmVjdCA6IHt9OwogICAgbGV0IHNvY2tldENsaWVudCA9IHNvY2tldENsaWVudENhY2hlLmdldChgJHtrZXl9OiR7dXJsfWApOwogICAgaWYgKHNvY2tldENsaWVudCkKICAgICAgcmV0dXJuIHNvY2tldENsaWVudDsKICAgIGxldCByZWNvbm5lY3RDb3VudCA9IDA7CiAgICBjb25zdCB7IHNjaGVkdWxlIH0gPSBjcmVhdGVCYXRjaFNjaGVkdWxlcih7CiAgICAgIGlkOiBgJHtrZXl9OiR7dXJsfWAsCiAgICAgIGZuOiBhc3luYyAoKSA9PiB7CiAgICAgICAgY29uc3QgcmVxdWVzdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIGxldCBlcnJvcjsKICAgICAgICBsZXQgc29ja2V0OwogICAgICAgIGxldCBrZWVwQWxpdmVUaW1lcjsKICAgICAgICBhc3luYyBmdW5jdGlvbiBzZXR1cCgpIHsKICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFNvY2tldDIoewogICAgICAgICAgICBvbkNsb3NlKCkgewogICAgICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cy52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIHJlcXVlc3Qub25FcnJvcj8uKG5ldyBTb2NrZXRDbG9zZWRFcnJvcih7IHVybCB9KSk7CiAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5vbkVycm9yPy4obmV3IFNvY2tldENsb3NlZEVycm9yKHsgdXJsIH0pKTsKICAgICAgICAgICAgICByZXF1ZXN0cy5jbGVhcigpOwogICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMuY2xlYXIoKTsKICAgICAgICAgICAgICBpZiAocmVjb25uZWN0ICYmIHJlY29ubmVjdENvdW50IDwgYXR0ZW1wdHMpCiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgICAgcmVjb25uZWN0Q291bnQrKzsKICAgICAgICAgICAgICAgICAgYXdhaXQgc2V0dXAoKS5jYXRjaChjb25zb2xlLmVycm9yKTsKICAgICAgICAgICAgICAgIH0sIGRlbGF5KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25FcnJvcihlcnJvcl8pIHsKICAgICAgICAgICAgICBlcnJvciA9IGVycm9yXzsKICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMudmFsdWVzKCkpCiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9uRXJyb3I/LihlcnJvcik7CiAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5vbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICAgIHJlcXVlc3RzLmNsZWFyKCk7CiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5jbGVhcigpOwogICAgICAgICAgICAgIGlmIChyZWNvbm5lY3QgJiYgcmVjb25uZWN0Q291bnQgPCBhdHRlbXB0cykKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgICByZWNvbm5lY3RDb3VudCsrOwogICAgICAgICAgICAgICAgICBhd2FpdCBzZXR1cCgpLmNhdGNoKGNvbnNvbGUuZXJyb3IpOwogICAgICAgICAgICAgICAgfSwgZGVsYXkpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbk9wZW4oKSB7CiAgICAgICAgICAgICAgZXJyb3IgPSB2b2lkIDA7CiAgICAgICAgICAgICAgcmVjb25uZWN0Q291bnQgPSAwOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvblJlc3BvbnNlKGRhdGEpIHsKICAgICAgICAgICAgICBjb25zdCBpc1N1YnNjcmlwdGlvbiA9IGRhdGEubWV0aG9kID09PSAiZXRoX3N1YnNjcmlwdGlvbiI7CiAgICAgICAgICAgICAgY29uc3QgaWQgPSBpc1N1YnNjcmlwdGlvbiA/IGRhdGEucGFyYW1zLnN1YnNjcmlwdGlvbiA6IGRhdGEuaWQ7CiAgICAgICAgICAgICAgY29uc3QgY2FjaGUgPSBpc1N1YnNjcmlwdGlvbiA/IHN1YnNjcmlwdGlvbnMgOiByZXF1ZXN0czsKICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGNhY2hlLmdldChpZCk7CiAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKQogICAgICAgICAgICAgICAgY2FsbGJhY2sub25SZXNwb25zZShkYXRhKTsKICAgICAgICAgICAgICBpZiAoIWlzU3Vic2NyaXB0aW9uKQogICAgICAgICAgICAgICAgY2FjaGUuZGVsZXRlKGlkKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBzb2NrZXQgPSByZXN1bHQ7CiAgICAgICAgICBpZiAoa2VlcEFsaXZlKSB7CiAgICAgICAgICAgIGlmIChrZWVwQWxpdmVUaW1lcikKICAgICAgICAgICAgICBjbGVhckludGVydmFsKGtlZXBBbGl2ZVRpbWVyKTsKICAgICAgICAgICAga2VlcEFsaXZlVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiBzb2NrZXQucGluZz8uKCksIGtlZXBBbGl2ZUludGVydmFsKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHNldHVwKCk7CiAgICAgICAgZXJyb3IgPSB2b2lkIDA7CiAgICAgICAgc29ja2V0Q2xpZW50ID0gewogICAgICAgICAgY2xvc2UoKSB7CiAgICAgICAgICAgIGtlZXBBbGl2ZVRpbWVyICYmIGNsZWFySW50ZXJ2YWwoa2VlcEFsaXZlVGltZXIpOwogICAgICAgICAgICBzb2NrZXQuY2xvc2UoKTsKICAgICAgICAgICAgc29ja2V0Q2xpZW50Q2FjaGUuZGVsZXRlKGAke2tleX06JHt1cmx9YCk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0IHNvY2tldCgpIHsKICAgICAgICAgICAgcmV0dXJuIHNvY2tldDsKICAgICAgICAgIH0sCiAgICAgICAgICByZXF1ZXN0KHsgYm9keSwgb25FcnJvciwgb25SZXNwb25zZSB9KSB7CiAgICAgICAgICAgIGlmIChlcnJvciAmJiBvbkVycm9yKQogICAgICAgICAgICAgIG9uRXJyb3IoZXJyb3IpOwogICAgICAgICAgICBjb25zdCBpZCA9IGJvZHkuaWQgPz8gaWRDYWNoZS50YWtlKCk7CiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gKHJlc3BvbnNlKSA9PiB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZS5pZCA9PT0gIm51bWJlciIgJiYgaWQgIT09IHJlc3BvbnNlLmlkKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIGlmIChib2R5Lm1ldGhvZCA9PT0gImV0aF9zdWJzY3JpYmUiICYmIHR5cGVvZiByZXNwb25zZS5yZXN1bHQgPT09ICJzdHJpbmciKQogICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5zZXQocmVzcG9uc2UucmVzdWx0LCB7CiAgICAgICAgICAgICAgICAgIG9uUmVzcG9uc2U6IGNhbGxiYWNrLAogICAgICAgICAgICAgICAgICBvbkVycm9yCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBpZiAoYm9keS5tZXRob2QgPT09ICJldGhfdW5zdWJzY3JpYmUiKQogICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5kZWxldGUoYm9keS5wYXJhbXM/LlswXSk7CiAgICAgICAgICAgICAgb25SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHJlcXVlc3RzLnNldChpZCwgeyBvblJlc3BvbnNlOiBjYWxsYmFjaywgb25FcnJvciB9KTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBzb2NrZXQucmVxdWVzdCh7CiAgICAgICAgICAgICAgICBib2R5OiB7CiAgICAgICAgICAgICAgICAgIGpzb25ycGM6ICIyLjAiLAogICAgICAgICAgICAgICAgICBpZCwKICAgICAgICAgICAgICAgICAgLi4uYm9keQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGNhdGNoIChlcnJvcjIpIHsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHJlcXVlc3RBc3luYyh7IGJvZHksIHRpbWVvdXQgPSAxZTQgfSkgewogICAgICAgICAgICByZXR1cm4gd2l0aFRpbWVvdXQoKCkgPT4gbmV3IFByb21pc2UoKG9uUmVzcG9uc2UsIG9uRXJyb3IpID0+IHRoaXMucmVxdWVzdCh7CiAgICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgICBvbkVycm9yLAogICAgICAgICAgICAgIG9uUmVzcG9uc2UKICAgICAgICAgICAgfSkpLCB7CiAgICAgICAgICAgICAgZXJyb3JJbnN0YW5jZTogbmV3IFRpbWVvdXRFcnJvcih7IGJvZHksIHVybCB9KSwKICAgICAgICAgICAgICB0aW1lb3V0CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHJlcXVlc3RzLAogICAgICAgICAgc3Vic2NyaXB0aW9ucywKICAgICAgICAgIHVybAogICAgICAgIH07CiAgICAgICAgc29ja2V0Q2xpZW50Q2FjaGUuc2V0KGAke2tleX06JHt1cmx9YCwgc29ja2V0Q2xpZW50KTsKICAgICAgICByZXR1cm4gW3NvY2tldENsaWVudF07CiAgICAgIH0KICAgIH0pOwogICAgY29uc3QgW18sIFtzb2NrZXRDbGllbnRfXV0gPSBhd2FpdCBzY2hlZHVsZSgpOwogICAgcmV0dXJuIHNvY2tldENsaWVudF87CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3JwYy93ZWJTb2NrZXQuanMKICBhc3luYyBmdW5jdGlvbiBnZXRXZWJTb2NrZXRScGNDbGllbnQodXJsLCBvcHRpb25zID0ge30pIHsKICAgIGNvbnN0IHsga2VlcEFsaXZlLCByZWNvbm5lY3QgfSA9IG9wdGlvbnM7CiAgICByZXR1cm4gZ2V0U29ja2V0UnBjQ2xpZW50KHsKICAgICAgYXN5bmMgZ2V0U29ja2V0KHsgb25DbG9zZSwgb25FcnJvciwgb25PcGVuLCBvblJlc3BvbnNlIH0pIHsKICAgICAgICBjb25zdCBXZWJTb2NrZXQzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiAoaW5pdF9uYXRpdmUoKSwgbmF0aXZlX2V4cG9ydHMpKS50aGVuKChtb2R1bGUpID0+IG1vZHVsZS5XZWJTb2NrZXQpOwogICAgICAgIGNvbnN0IHNvY2tldCA9IG5ldyBXZWJTb2NrZXQzKHVybCk7CiAgICAgICAgZnVuY3Rpb24gb25DbG9zZV8oKSB7CiAgICAgICAgICBvbkNsb3NlKCk7CiAgICAgICAgICBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCBvbkNsb3NlXyk7CiAgICAgICAgICBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG9uTWVzc2FnZSk7CiAgICAgICAgICBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBvbkVycm9yKTsKICAgICAgICAgIHNvY2tldC5yZW1vdmVFdmVudExpc3RlbmVyKCJvcGVuIiwgb25PcGVuKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gb25NZXNzYWdlKHsgZGF0YSB9KSB7CiAgICAgICAgICBvblJlc3BvbnNlKEpTT04ucGFyc2UoZGF0YSkpOwogICAgICAgIH0KICAgICAgICBzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCBvbkNsb3NlXyk7CiAgICAgICAgc29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBvbk1lc3NhZ2UpOwogICAgICAgIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsIG9uRXJyb3IpOwogICAgICAgIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKCJvcGVuIiwgb25PcGVuKTsKICAgICAgICBpZiAoc29ja2V0LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldDMuQ09OTkVDVElORykgewogICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgICAgICBpZiAoIXNvY2tldCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHNvY2tldC5vbm9wZW4gPSByZXNvbHZlOwogICAgICAgICAgICBzb2NrZXQub25lcnJvciA9IHJlamVjdDsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb25zdCB7IGNsb3NlOiBjbG9zZV8gfSA9IHNvY2tldDsKICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzb2NrZXQsIHsKICAgICAgICAgIGNsb3NlKCkgewogICAgICAgICAgICBjbG9zZV8uYmluZChzb2NrZXQpKCk7CiAgICAgICAgICAgIG9uQ2xvc2UoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBwaW5nKCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGlmIChzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NFRCB8fCBzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NJTkcpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0UmVxdWVzdEVycm9yKHsKICAgICAgICAgICAgICAgICAgdXJsOiBzb2NrZXQudXJsLAogICAgICAgICAgICAgICAgICBjYXVzZTogbmV3IFNvY2tldENsb3NlZEVycm9yKHsgdXJsOiBzb2NrZXQudXJsIH0pCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBjb25zdCBib2R5ID0gewogICAgICAgICAgICAgICAganNvbnJwYzogIjIuMCIsCiAgICAgICAgICAgICAgICBtZXRob2Q6ICJuZXRfdmVyc2lvbiIsCiAgICAgICAgICAgICAgICBwYXJhbXM6IFtdCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBzb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeShib2R5KSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgb25FcnJvcihlcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICByZXF1ZXN0KHsgYm9keSB9KSB7CiAgICAgICAgICAgIGlmIChzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NFRCB8fCBzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NJTkcpCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldFJlcXVlc3RFcnJvcih7CiAgICAgICAgICAgICAgICBib2R5LAogICAgICAgICAgICAgICAgdXJsOiBzb2NrZXQudXJsLAogICAgICAgICAgICAgICAgY2F1c2U6IG5ldyBTb2NrZXRDbG9zZWRFcnJvcih7IHVybDogc29ja2V0LnVybCB9KQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoYm9keSkpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9LAogICAgICBrZWVwQWxpdmUsCiAgICAgIHJlY29ubmVjdCwKICAgICAgdXJsCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcnBjL2NvbXBhdC5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldFNvY2tldCh1cmwpIHsKICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldFdlYlNvY2tldFJwY0NsaWVudCh1cmwpOwogICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oY2xpZW50LnNvY2tldCwgewogICAgICByZXF1ZXN0czogY2xpZW50LnJlcXVlc3RzLAogICAgICBzdWJzY3JpcHRpb25zOiBjbGllbnQuc3Vic2NyaXB0aW9ucwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3R5cGVkRGF0YS5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL2hhc2hUeXBlZERhdGEuanMKICBpbml0X2VuY29kZUFiaVBhcmFtZXRlcnMoKTsKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X2tlY2NhazI1NigpOwogIGZ1bmN0aW9uIGhhc2hUeXBlZERhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBkb21haW4gPSB7fSwgbWVzc2FnZSwgcHJpbWFyeVR5cGUgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCB0eXBlcyA9IHsKICAgICAgRUlQNzEyRG9tYWluOiBnZXRUeXBlc0ZvckVJUDcxMkRvbWFpbih7IGRvbWFpbiB9KSwKICAgICAgLi4ucGFyYW1ldGVycy50eXBlcwogICAgfTsKICAgIHZhbGlkYXRlVHlwZWREYXRhKHsKICAgICAgZG9tYWluLAogICAgICBtZXNzYWdlLAogICAgICBwcmltYXJ5VHlwZSwKICAgICAgdHlwZXMKICAgIH0pOwogICAgY29uc3QgcGFydHMgPSBbIjB4MTkwMSJdOwogICAgaWYgKGRvbWFpbikKICAgICAgcGFydHMucHVzaChoYXNoRG9tYWluKHsKICAgICAgICBkb21haW4sCiAgICAgICAgdHlwZXMKICAgICAgfSkpOwogICAgaWYgKHByaW1hcnlUeXBlICE9PSAiRUlQNzEyRG9tYWluIikKICAgICAgcGFydHMucHVzaChoYXNoU3RydWN0KHsKICAgICAgICBkYXRhOiBtZXNzYWdlLAogICAgICAgIHByaW1hcnlUeXBlLAogICAgICAgIHR5cGVzCiAgICAgIH0pKTsKICAgIHJldHVybiBrZWNjYWsyNTYoY29uY2F0KHBhcnRzKSk7CiAgfQogIGZ1bmN0aW9uIGhhc2hEb21haW4oeyBkb21haW4sIHR5cGVzIH0pIHsKICAgIHJldHVybiBoYXNoU3RydWN0KHsKICAgICAgZGF0YTogZG9tYWluLAogICAgICBwcmltYXJ5VHlwZTogIkVJUDcxMkRvbWFpbiIsCiAgICAgIHR5cGVzCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gaGFzaFN0cnVjdCh7IGRhdGEsIHByaW1hcnlUeXBlLCB0eXBlcyB9KSB7CiAgICBjb25zdCBlbmNvZGVkID0gZW5jb2RlRGF0YSh7CiAgICAgIGRhdGEsCiAgICAgIHByaW1hcnlUeXBlLAogICAgICB0eXBlcwogICAgfSk7CiAgICByZXR1cm4ga2VjY2FrMjU2KGVuY29kZWQpOwogIH0KICBmdW5jdGlvbiBlbmNvZGVEYXRhKHsgZGF0YSwgcHJpbWFyeVR5cGUsIHR5cGVzIH0pIHsKICAgIGNvbnN0IGVuY29kZWRUeXBlcyA9IFt7IHR5cGU6ICJieXRlczMyIiB9XTsKICAgIGNvbnN0IGVuY29kZWRWYWx1ZXMgPSBbaGFzaFR5cGUoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSldOwogICAgZm9yIChjb25zdCBmaWVsZCBvZiB0eXBlc1twcmltYXJ5VHlwZV0pIHsKICAgICAgY29uc3QgW3R5cGUsIHZhbHVlXSA9IGVuY29kZUZpZWxkKHsKICAgICAgICB0eXBlcywKICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLAogICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsCiAgICAgICAgdmFsdWU6IGRhdGFbZmllbGQubmFtZV0KICAgICAgfSk7CiAgICAgIGVuY29kZWRUeXBlcy5wdXNoKHR5cGUpOwogICAgICBlbmNvZGVkVmFsdWVzLnB1c2godmFsdWUpOwogICAgfQogICAgcmV0dXJuIGVuY29kZUFiaVBhcmFtZXRlcnMoZW5jb2RlZFR5cGVzLCBlbmNvZGVkVmFsdWVzKTsKICB9CiAgZnVuY3Rpb24gaGFzaFR5cGUoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSkgewogICAgY29uc3QgZW5jb2RlZEhhc2hUeXBlID0gdG9IZXgoZW5jb2RlVHlwZSh7IHByaW1hcnlUeXBlLCB0eXBlcyB9KSk7CiAgICByZXR1cm4ga2VjY2FrMjU2KGVuY29kZWRIYXNoVHlwZSk7CiAgfQogIGZ1bmN0aW9uIGVuY29kZVR5cGUoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSkgewogICAgbGV0IHJlc3VsdCA9ICIiOwogICAgY29uc3QgdW5zb3J0ZWREZXBzID0gZmluZFR5cGVEZXBlbmRlbmNpZXMoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSk7CiAgICB1bnNvcnRlZERlcHMuZGVsZXRlKHByaW1hcnlUeXBlKTsKICAgIGNvbnN0IGRlcHMgPSBbcHJpbWFyeVR5cGUsIC4uLkFycmF5LmZyb20odW5zb3J0ZWREZXBzKS5zb3J0KCldOwogICAgZm9yIChjb25zdCB0eXBlIG9mIGRlcHMpIHsKICAgICAgcmVzdWx0ICs9IGAke3R5cGV9KCR7dHlwZXNbdHlwZV0ubWFwKCh7IG5hbWUsIHR5cGU6IHQgfSkgPT4gYCR7dH0gJHtuYW1lfWApLmpvaW4oIiwiKX0pYDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIGZpbmRUeXBlRGVwZW5kZW5jaWVzKHsgcHJpbWFyeVR5cGU6IHByaW1hcnlUeXBlXywgdHlwZXMgfSwgcmVzdWx0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpIHsKICAgIGNvbnN0IG1hdGNoID0gcHJpbWFyeVR5cGVfLm1hdGNoKC9eXHcqL3UpOwogICAgY29uc3QgcHJpbWFyeVR5cGUgPSBtYXRjaD8uWzBdOwogICAgaWYgKHJlc3VsdHMuaGFzKHByaW1hcnlUeXBlKSB8fCB0eXBlc1twcmltYXJ5VHlwZV0gPT09IHZvaWQgMCkgewogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KICAgIHJlc3VsdHMuYWRkKHByaW1hcnlUeXBlKTsKICAgIGZvciAoY29uc3QgZmllbGQgb2YgdHlwZXNbcHJpbWFyeVR5cGVdKSB7CiAgICAgIGZpbmRUeXBlRGVwZW5kZW5jaWVzKHsgcHJpbWFyeVR5cGU6IGZpZWxkLnR5cGUsIHR5cGVzIH0sIHJlc3VsdHMpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQogIGZ1bmN0aW9uIGVuY29kZUZpZWxkKHsgdHlwZXMsIG5hbWUsIHR5cGUsIHZhbHVlIH0pIHsKICAgIGlmICh0eXBlc1t0eXBlXSAhPT0gdm9pZCAwKSB7CiAgICAgIHJldHVybiBbCiAgICAgICAgeyB0eXBlOiAiYnl0ZXMzMiIgfSwKICAgICAgICBrZWNjYWsyNTYoZW5jb2RlRGF0YSh7IGRhdGE6IHZhbHVlLCBwcmltYXJ5VHlwZTogdHlwZSwgdHlwZXMgfSkpCiAgICAgIF07CiAgICB9CiAgICBpZiAodHlwZSA9PT0gImJ5dGVzIikgewogICAgICBjb25zdCBwcmVwZW5kID0gdmFsdWUubGVuZ3RoICUgMiA/ICIwIiA6ICIiOwogICAgICB2YWx1ZSA9IGAweCR7cHJlcGVuZCArIHZhbHVlLnNsaWNlKDIpfWA7CiAgICAgIHJldHVybiBbeyB0eXBlOiAiYnl0ZXMzMiIgfSwga2VjY2FrMjU2KHZhbHVlKV07CiAgICB9CiAgICBpZiAodHlwZSA9PT0gInN0cmluZyIpCiAgICAgIHJldHVybiBbeyB0eXBlOiAiYnl0ZXMzMiIgfSwga2VjY2FrMjU2KHRvSGV4KHZhbHVlKSldOwogICAgaWYgKHR5cGUubGFzdEluZGV4T2YoIl0iKSA9PT0gdHlwZS5sZW5ndGggLSAxKSB7CiAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0eXBlLnNsaWNlKDAsIHR5cGUubGFzdEluZGV4T2YoIlsiKSk7CiAgICAgIGNvbnN0IHR5cGVWYWx1ZVBhaXJzID0gdmFsdWUubWFwKChpdGVtKSA9PiBlbmNvZGVGaWVsZCh7CiAgICAgICAgbmFtZSwKICAgICAgICB0eXBlOiBwYXJzZWRUeXBlLAogICAgICAgIHR5cGVzLAogICAgICAgIHZhbHVlOiBpdGVtCiAgICAgIH0pKTsKICAgICAgcmV0dXJuIFsKICAgICAgICB7IHR5cGU6ICJieXRlczMyIiB9LAogICAgICAgIGtlY2NhazI1NihlbmNvZGVBYmlQYXJhbWV0ZXJzKHR5cGVWYWx1ZVBhaXJzLm1hcCgoW3RdKSA9PiB0KSwgdHlwZVZhbHVlUGFpcnMubWFwKChbLCB2XSkgPT4gdikpKQogICAgICBdOwogICAgfQogICAgcmV0dXJuIFt7IHR5cGUgfSwgdmFsdWVdOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90eXBlZERhdGEuanMKICBpbml0X3N0cmluZ2lmeSgpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZVR5cGVkRGF0YShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGRvbWFpbjogZG9tYWluXywgbWVzc2FnZTogbWVzc2FnZV8sIHByaW1hcnlUeXBlLCB0eXBlcyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IG5vcm1hbGl6ZURhdGEgPSAoc3RydWN0LCBkYXRhXykgPT4gewogICAgICBjb25zdCBkYXRhID0geyAuLi5kYXRhXyB9OwogICAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHN0cnVjdCkgewogICAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSB9ID0gcGFyYW07CiAgICAgICAgaWYgKHR5cGUgPT09ICJhZGRyZXNzIikKICAgICAgICAgIGRhdGFbbmFtZV0gPSBkYXRhW25hbWVdLnRvTG93ZXJDYXNlKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGRhdGE7CiAgICB9OwogICAgY29uc3QgZG9tYWluID0gKCgpID0+IHsKICAgICAgaWYgKCF0eXBlcy5FSVA3MTJEb21haW4pCiAgICAgICAgcmV0dXJuIHt9OwogICAgICBpZiAoIWRvbWFpbl8pCiAgICAgICAgcmV0dXJuIHt9OwogICAgICByZXR1cm4gbm9ybWFsaXplRGF0YSh0eXBlcy5FSVA3MTJEb21haW4sIGRvbWFpbl8pOwogICAgfSkoKTsKICAgIGNvbnN0IG1lc3NhZ2UgPSAoKCkgPT4gewogICAgICBpZiAocHJpbWFyeVR5cGUgPT09ICJFSVA3MTJEb21haW4iKQogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhKHR5cGVzW3ByaW1hcnlUeXBlXSwgbWVzc2FnZV8pOwogICAgfSkoKTsKICAgIHJldHVybiBzdHJpbmdpZnkoeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9KTsKICB9CiAgZnVuY3Rpb24gdmFsaWRhdGVUeXBlZERhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHZhbGlkYXRlRGF0YSA9IChzdHJ1Y3QsIGRhdGEpID0+IHsKICAgICAgZm9yIChjb25zdCBwYXJhbSBvZiBzdHJ1Y3QpIHsKICAgICAgICBjb25zdCB7IG5hbWUsIHR5cGUgfSA9IHBhcmFtOwogICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtuYW1lXTsKICAgICAgICBjb25zdCBpbnRlZ2VyTWF0Y2ggPSB0eXBlLm1hdGNoKGludGVnZXJSZWdleDIpOwogICAgICAgIGlmIChpbnRlZ2VyTWF0Y2ggJiYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIgfHwgdHlwZW9mIHZhbHVlID09PSAiYmlnaW50IikpIHsKICAgICAgICAgIGNvbnN0IFtfdHlwZSwgYmFzZTIsIHNpemVfXSA9IGludGVnZXJNYXRjaDsKICAgICAgICAgIG51bWJlclRvSGV4KHZhbHVlLCB7CiAgICAgICAgICAgIHNpZ25lZDogYmFzZTIgPT09ICJpbnQiLAogICAgICAgICAgICBzaXplOiBOdW1iZXIucGFyc2VJbnQoc2l6ZV8pIC8gOAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlID09PSAiYWRkcmVzcyIgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiAhaXNBZGRyZXNzKHZhbHVlKSkKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogdmFsdWUgfSk7CiAgICAgICAgY29uc3QgYnl0ZXNNYXRjaCA9IHR5cGUubWF0Y2goYnl0ZXNSZWdleDIpOwogICAgICAgIGlmIChieXRlc01hdGNoKSB7CiAgICAgICAgICBjb25zdCBbX3R5cGUsIHNpemVfXSA9IGJ5dGVzTWF0Y2g7CiAgICAgICAgICBpZiAoc2l6ZV8gJiYgc2l6ZSh2YWx1ZSkgIT09IE51bWJlci5wYXJzZUludChzaXplXykpCiAgICAgICAgICAgIHRocm93IG5ldyBCeXRlc1NpemVNaXNtYXRjaEVycm9yKHsKICAgICAgICAgICAgICBleHBlY3RlZFNpemU6IE51bWJlci5wYXJzZUludChzaXplXyksCiAgICAgICAgICAgICAgZ2l2ZW5TaXplOiBzaXplKHZhbHVlKQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY29uc3Qgc3RydWN0MiA9IHR5cGVzW3R5cGVdOwogICAgICAgIGlmIChzdHJ1Y3QyKQogICAgICAgICAgdmFsaWRhdGVEYXRhKHN0cnVjdDIsIHZhbHVlKTsKICAgICAgfQogICAgfTsKICAgIGlmICh0eXBlcy5FSVA3MTJEb21haW4gJiYgZG9tYWluKQogICAgICB2YWxpZGF0ZURhdGEodHlwZXMuRUlQNzEyRG9tYWluLCBkb21haW4pOwogICAgaWYgKHByaW1hcnlUeXBlICE9PSAiRUlQNzEyRG9tYWluIikKICAgICAgdmFsaWRhdGVEYXRhKHR5cGVzW3ByaW1hcnlUeXBlXSwgbWVzc2FnZSk7CiAgfQogIGZ1bmN0aW9uIGdldFR5cGVzRm9yRUlQNzEyRG9tYWluKHsgZG9tYWluIH0pIHsKICAgIHJldHVybiBbCiAgICAgIHR5cGVvZiBkb21haW4/Lm5hbWUgPT09ICJzdHJpbmciICYmIHsgbmFtZTogIm5hbWUiLCB0eXBlOiAic3RyaW5nIiB9LAogICAgICBkb21haW4/LnZlcnNpb24gJiYgeyBuYW1lOiAidmVyc2lvbiIsIHR5cGU6ICJzdHJpbmciIH0sCiAgICAgIHR5cGVvZiBkb21haW4/LmNoYWluSWQgPT09ICJudW1iZXIiICYmIHsKICAgICAgICBuYW1lOiAiY2hhaW5JZCIsCiAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgIH0sCiAgICAgIGRvbWFpbj8udmVyaWZ5aW5nQ29udHJhY3QgJiYgewogICAgICAgIG5hbWU6ICJ2ZXJpZnlpbmdDb250cmFjdCIsCiAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgIH0sCiAgICAgIGRvbWFpbj8uc2FsdCAmJiB7IG5hbWU6ICJzYWx0IiwgdHlwZTogImJ5dGVzMzIiIH0KICAgIF0uZmlsdGVyKEJvb2xlYW4pOwogIH0KICBmdW5jdGlvbiBkb21haW5TZXBhcmF0b3IoeyBkb21haW4gfSkgewogICAgcmV0dXJuIGhhc2hEb21haW4oewogICAgICBkb21haW4sCiAgICAgIHR5cGVzOiB7CiAgICAgICAgRUlQNzEyRG9tYWluOiBnZXRUeXBlc0ZvckVJUDcxMkRvbWFpbih7IGRvbWFpbiB9KQogICAgICB9CiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZUZ1bmN0aW9uRGF0YS5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9zbGljZSgpOwogIGluaXRfdG9GdW5jdGlvblNlbGVjdG9yKCk7CiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9mb3JtYXRBYmlJdGVtMigpOwogIGZ1bmN0aW9uIGRlY29kZUZ1bmN0aW9uRGF0YShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgZGF0YSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNsaWNlKGRhdGEsIDAsIDQpOwogICAgY29uc3QgZGVzY3JpcHRpb24gPSBhYmkyLmZpbmQoKHgpID0+IHgudHlwZSA9PT0gImZ1bmN0aW9uIiAmJiBzaWduYXR1cmUgPT09IHRvRnVuY3Rpb25TZWxlY3Rvcihmb3JtYXRBYmlJdGVtMih4KSkpOwogICAgaWYgKCFkZXNjcmlwdGlvbikKICAgICAgdGhyb3cgbmV3IEFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvcihzaWduYXR1cmUsIHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L2RlY29kZUZ1bmN0aW9uRGF0YSIKICAgICAgfSk7CiAgICByZXR1cm4gewogICAgICBmdW5jdGlvbk5hbWU6IGRlc2NyaXB0aW9uLm5hbWUsCiAgICAgIGFyZ3M6ICJpbnB1dHMiIGluIGRlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uLmlucHV0cyAmJiBkZXNjcmlwdGlvbi5pbnB1dHMubGVuZ3RoID4gMCA/IGRlY29kZUFiaVBhcmFtZXRlcnMoZGVzY3JpcHRpb24uaW5wdXRzLCBzbGljZShkYXRhLCA0KSkgOiB2b2lkIDAKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVFcnJvclJlc3VsdC5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3RvRnVuY3Rpb25TZWxlY3RvcigpOwogIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogIGluaXRfZm9ybWF0QWJpSXRlbTIoKTsKICBpbml0X2dldEFiaUl0ZW0oKTsKICB2YXIgZG9jc1BhdGg2ID0gIi9kb2NzL2NvbnRyYWN0L2VuY29kZUVycm9yUmVzdWx0IjsKICBmdW5jdGlvbiBlbmNvZGVFcnJvclJlc3VsdChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgZXJyb3JOYW1lLCBhcmdzIH0gPSBwYXJhbWV0ZXJzOwogICAgbGV0IGFiaUl0ZW0gPSBhYmkyWzBdOwogICAgaWYgKGVycm9yTmFtZSkgewogICAgICBjb25zdCBpdGVtID0gZ2V0QWJpSXRlbSh7IGFiaTogYWJpMiwgYXJncywgbmFtZTogZXJyb3JOYW1lIH0pOwogICAgICBpZiAoIWl0ZW0pCiAgICAgICAgdGhyb3cgbmV3IEFiaUVycm9yTm90Rm91bmRFcnJvcihlcnJvck5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoNiB9KTsKICAgICAgYWJpSXRlbSA9IGl0ZW07CiAgICB9CiAgICBpZiAoYWJpSXRlbS50eXBlICE9PSAiZXJyb3IiKQogICAgICB0aHJvdyBuZXcgQWJpRXJyb3JOb3RGb3VuZEVycm9yKHZvaWQgMCwgeyBkb2NzUGF0aDogZG9jc1BhdGg2IH0pOwogICAgY29uc3QgZGVmaW5pdGlvbiA9IGZvcm1hdEFiaUl0ZW0yKGFiaUl0ZW0pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdG9GdW5jdGlvblNlbGVjdG9yKGRlZmluaXRpb24pOwogICAgbGV0IGRhdGEgPSAiMHgiOwogICAgaWYgKGFyZ3MgJiYgYXJncy5sZW5ndGggPiAwKSB7CiAgICAgIGlmICghYWJpSXRlbS5pbnB1dHMpCiAgICAgICAgdGhyb3cgbmV3IEFiaUVycm9ySW5wdXRzTm90Rm91bmRFcnJvcihhYmlJdGVtLm5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoNiB9KTsKICAgICAgZGF0YSA9IGVuY29kZUFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMsIGFyZ3MpOwogICAgfQogICAgcmV0dXJuIGNvbmNhdEhleChbc2lnbmF0dXJlLCBkYXRhXSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVGdW5jdGlvblJlc3VsdC5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9lbmNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9nZXRBYmlJdGVtKCk7CiAgdmFyIGRvY3NQYXRoNyA9ICIvZG9jcy9jb250cmFjdC9lbmNvZGVGdW5jdGlvblJlc3VsdCI7CiAgZnVuY3Rpb24gZW5jb2RlRnVuY3Rpb25SZXN1bHQocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGZ1bmN0aW9uTmFtZSwgcmVzdWx0IH0gPSBwYXJhbWV0ZXJzOwogICAgbGV0IGFiaUl0ZW0gPSBhYmkyWzBdOwogICAgaWYgKGZ1bmN0aW9uTmFtZSkgewogICAgICBjb25zdCBpdGVtID0gZ2V0QWJpSXRlbSh7IGFiaTogYWJpMiwgbmFtZTogZnVuY3Rpb25OYW1lIH0pOwogICAgICBpZiAoIWl0ZW0pCiAgICAgICAgdGhyb3cgbmV3IEFiaUZ1bmN0aW9uTm90Rm91bmRFcnJvcihmdW5jdGlvbk5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoNyB9KTsKICAgICAgYWJpSXRlbSA9IGl0ZW07CiAgICB9CiAgICBpZiAoYWJpSXRlbS50eXBlICE9PSAiZnVuY3Rpb24iKQogICAgICB0aHJvdyBuZXcgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yKHZvaWQgMCwgeyBkb2NzUGF0aDogZG9jc1BhdGg3IH0pOwogICAgaWYgKCFhYmlJdGVtLm91dHB1dHMpCiAgICAgIHRocm93IG5ldyBBYmlGdW5jdGlvbk91dHB1dHNOb3RGb3VuZEVycm9yKGFiaUl0ZW0ubmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg3IH0pOwogICAgbGV0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IFtyZXN1bHRdOwogICAgaWYgKGFiaUl0ZW0ub3V0cHV0cy5sZW5ndGggPT09IDAgJiYgIXZhbHVlc1swXSkKICAgICAgdmFsdWVzID0gW107CiAgICByZXR1cm4gZW5jb2RlQWJpUGFyYW1ldGVycyhhYmlJdGVtLm91dHB1dHMsIHZhbHVlcyk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVQYWNrZWQuanMKICBpbml0X2FiaSgpOwogIGluaXRfYWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzKCk7CiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3BhZCgpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBlbmNvZGVQYWNrZWQodHlwZXMsIHZhbHVlcykgewogICAgaWYgKHR5cGVzLmxlbmd0aCAhPT0gdmFsdWVzLmxlbmd0aCkKICAgICAgdGhyb3cgbmV3IEFiaUVuY29kaW5nTGVuZ3RoTWlzbWF0Y2hFcnJvcih7CiAgICAgICAgZXhwZWN0ZWRMZW5ndGg6IHR5cGVzLmxlbmd0aCwKICAgICAgICBnaXZlbkxlbmd0aDogdmFsdWVzLmxlbmd0aAogICAgICB9KTsKICAgIGNvbnN0IGRhdGEgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgdHlwZSA9IHR5cGVzW2ldOwogICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTsKICAgICAgZGF0YS5wdXNoKGVuY29kZSh0eXBlLCB2YWx1ZSkpOwogICAgfQogICAgcmV0dXJuIGNvbmNhdEhleChkYXRhKTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlKHR5cGUsIHZhbHVlLCBpc0FycmF5ID0gZmFsc2UpIHsKICAgIGlmICh0eXBlID09PSAiYWRkcmVzcyIpIHsKICAgICAgY29uc3QgYWRkcmVzcyA9IHZhbHVlOwogICAgICBpZiAoIWlzQWRkcmVzcyhhZGRyZXNzKSkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3MgfSk7CiAgICAgIHJldHVybiBwYWQoYWRkcmVzcy50b0xvd2VyQ2FzZSgpLCB7CiAgICAgICAgc2l6ZTogaXNBcnJheSA/IDMyIDogbnVsbAogICAgICB9KTsKICAgIH0KICAgIGlmICh0eXBlID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIHN0cmluZ1RvSGV4KHZhbHVlKTsKICAgIGlmICh0eXBlID09PSAiYnl0ZXMiKQogICAgICByZXR1cm4gdmFsdWU7CiAgICBpZiAodHlwZSA9PT0gImJvb2wiKQogICAgICByZXR1cm4gcGFkKGJvb2xUb0hleCh2YWx1ZSksIHsgc2l6ZTogaXNBcnJheSA/IDMyIDogMSB9KTsKICAgIGNvbnN0IGludE1hdGNoID0gdHlwZS5tYXRjaChpbnRlZ2VyUmVnZXgyKTsKICAgIGlmIChpbnRNYXRjaCkgewogICAgICBjb25zdCBbX3R5cGUsIGJhc2VUeXBlLCBiaXRzID0gIjI1NiJdID0gaW50TWF0Y2g7CiAgICAgIGNvbnN0IHNpemUzID0gTnVtYmVyLnBhcnNlSW50KGJpdHMpIC8gODsKICAgICAgcmV0dXJuIG51bWJlclRvSGV4KHZhbHVlLCB7CiAgICAgICAgc2l6ZTogaXNBcnJheSA/IDMyIDogc2l6ZTMsCiAgICAgICAgc2lnbmVkOiBiYXNlVHlwZSA9PT0gImludCIKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBieXRlc01hdGNoID0gdHlwZS5tYXRjaChieXRlc1JlZ2V4Mik7CiAgICBpZiAoYnl0ZXNNYXRjaCkgewogICAgICBjb25zdCBbX3R5cGUsIHNpemUzXSA9IGJ5dGVzTWF0Y2g7CiAgICAgIGlmIChOdW1iZXIucGFyc2VJbnQoc2l6ZTMpICE9PSAodmFsdWUubGVuZ3RoIC0gMikgLyAyKQogICAgICAgIHRocm93IG5ldyBCeXRlc1NpemVNaXNtYXRjaEVycm9yKHsKICAgICAgICAgIGV4cGVjdGVkU2l6ZTogTnVtYmVyLnBhcnNlSW50KHNpemUzKSwKICAgICAgICAgIGdpdmVuU2l6ZTogKHZhbHVlLmxlbmd0aCAtIDIpIC8gMgogICAgICAgIH0pOwogICAgICByZXR1cm4gcGFkKHZhbHVlLCB7IGRpcjogInJpZ2h0Iiwgc2l6ZTogaXNBcnJheSA/IDMyIDogbnVsbCB9KTsKICAgIH0KICAgIGNvbnN0IGFycmF5TWF0Y2ggPSB0eXBlLm1hdGNoKGFycmF5UmVnZXgpOwogICAgaWYgKGFycmF5TWF0Y2ggJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgY29uc3QgW190eXBlLCBjaGlsZFR5cGVdID0gYXJyYXlNYXRjaDsKICAgICAgY29uc3QgZGF0YSA9IFtdOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgZGF0YS5wdXNoKGVuY29kZShjaGlsZFR5cGUsIHZhbHVlW2ldLCB0cnVlKSk7CiAgICAgIH0KICAgICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybiAiMHgiOwogICAgICByZXR1cm4gY29uY2F0SGV4KGRhdGEpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkUGFja2VkQWJpVHlwZSh0eXBlKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9nZXRDb250cmFjdEFkZHJlc3MuanMKICBpbml0X2NvbmNhdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvaXNCeXRlcy5qcwogIGZ1bmN0aW9uIGlzQnl0ZXMzKHZhbHVlKSB7CiAgICBpZiAoIXZhbHVlKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAib2JqZWN0IikKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKCEoIkJZVEVTX1BFUl9FTEVNRU5UIiBpbiB2YWx1ZSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB2YWx1ZS5CWVRFU19QRVJfRUxFTUVOVCA9PT0gMSAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lID09PSAiVWludDhBcnJheSI7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FkZHJlc3MvZ2V0Q29udHJhY3RBZGRyZXNzLmpzCiAgaW5pdF9wYWQoKTsKICBpbml0X3NsaWNlKCk7CiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF9rZWNjYWsyNTYoKTsKICBpbml0X2dldEFkZHJlc3MoKTsKICBmdW5jdGlvbiBnZXRDb250cmFjdEFkZHJlc3MyKG9wdHMpIHsKICAgIGlmIChvcHRzLm9wY29kZSA9PT0gIkNSRUFURTIiKQogICAgICByZXR1cm4gZ2V0Q3JlYXRlMkFkZHJlc3Mob3B0cyk7CiAgICByZXR1cm4gZ2V0Q3JlYXRlQWRkcmVzcyhvcHRzKTsKICB9CiAgZnVuY3Rpb24gZ2V0Q3JlYXRlQWRkcmVzcyhvcHRzKSB7CiAgICBjb25zdCBmcm9tID0gdG9CeXRlcyhnZXRBZGRyZXNzKG9wdHMuZnJvbSkpOwogICAgbGV0IG5vbmNlID0gdG9CeXRlcyhvcHRzLm5vbmNlKTsKICAgIGlmIChub25jZVswXSA9PT0gMCkKICAgICAgbm9uY2UgPSBuZXcgVWludDhBcnJheShbXSk7CiAgICByZXR1cm4gZ2V0QWRkcmVzcyhgMHgke2tlY2NhazI1Nih0b1JscChbZnJvbSwgbm9uY2VdLCAiYnl0ZXMiKSkuc2xpY2UoMjYpfWApOwogIH0KICBmdW5jdGlvbiBnZXRDcmVhdGUyQWRkcmVzcyhvcHRzKSB7CiAgICBjb25zdCBmcm9tID0gdG9CeXRlcyhnZXRBZGRyZXNzKG9wdHMuZnJvbSkpOwogICAgY29uc3Qgc2FsdCA9IHBhZChpc0J5dGVzMyhvcHRzLnNhbHQpID8gb3B0cy5zYWx0IDogdG9CeXRlcyhvcHRzLnNhbHQpLCB7CiAgICAgIHNpemU6IDMyCiAgICB9KTsKICAgIGNvbnN0IGJ5dGVjb2RlSGFzaCA9ICgoKSA9PiB7CiAgICAgIGlmICgiYnl0ZWNvZGVIYXNoIiBpbiBvcHRzKSB7CiAgICAgICAgaWYgKGlzQnl0ZXMzKG9wdHMuYnl0ZWNvZGVIYXNoKSkKICAgICAgICAgIHJldHVybiBvcHRzLmJ5dGVjb2RlSGFzaDsKICAgICAgICByZXR1cm4gdG9CeXRlcyhvcHRzLmJ5dGVjb2RlSGFzaCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGtlY2NhazI1NihvcHRzLmJ5dGVjb2RlLCAiYnl0ZXMiKTsKICAgIH0pKCk7CiAgICByZXR1cm4gZ2V0QWRkcmVzcyhzbGljZShrZWNjYWsyNTYoY29uY2F0KFt0b0J5dGVzKCIweGZmIiksIGZyb20sIHNhbHQsIGJ5dGVjb2RlSGFzaF0pKSwgMTIpKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZm9ybWF0dGVycy90cmFuc2FjdGlvblJlY2VpcHQuanMKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X2Zvcm1hdHRlcigpOwogIHZhciByZWNlaXB0U3RhdHVzZXMgPSB7CiAgICAiMHgwIjogInJldmVydGVkIiwKICAgICIweDEiOiAic3VjY2VzcyIKICB9OwogIGZ1bmN0aW9uIGZvcm1hdFRyYW5zYWN0aW9uUmVjZWlwdCh0cmFuc2FjdGlvblJlY2VpcHQpIHsKICAgIGNvbnN0IHJlY2VpcHQgPSB7CiAgICAgIC4uLnRyYW5zYWN0aW9uUmVjZWlwdCwKICAgICAgYmxvY2tOdW1iZXI6IHRyYW5zYWN0aW9uUmVjZWlwdC5ibG9ja051bWJlciA/IEJpZ0ludCh0cmFuc2FjdGlvblJlY2VpcHQuYmxvY2tOdW1iZXIpIDogbnVsbCwKICAgICAgY29udHJhY3RBZGRyZXNzOiB0cmFuc2FjdGlvblJlY2VpcHQuY29udHJhY3RBZGRyZXNzID8gdHJhbnNhY3Rpb25SZWNlaXB0LmNvbnRyYWN0QWRkcmVzcyA6IG51bGwsCiAgICAgIGN1bXVsYXRpdmVHYXNVc2VkOiB0cmFuc2FjdGlvblJlY2VpcHQuY3VtdWxhdGl2ZUdhc1VzZWQgPyBCaWdJbnQodHJhbnNhY3Rpb25SZWNlaXB0LmN1bXVsYXRpdmVHYXNVc2VkKSA6IG51bGwsCiAgICAgIGVmZmVjdGl2ZUdhc1ByaWNlOiB0cmFuc2FjdGlvblJlY2VpcHQuZWZmZWN0aXZlR2FzUHJpY2UgPyBCaWdJbnQodHJhbnNhY3Rpb25SZWNlaXB0LmVmZmVjdGl2ZUdhc1ByaWNlKSA6IG51bGwsCiAgICAgIGdhc1VzZWQ6IHRyYW5zYWN0aW9uUmVjZWlwdC5nYXNVc2VkID8gQmlnSW50KHRyYW5zYWN0aW9uUmVjZWlwdC5nYXNVc2VkKSA6IG51bGwsCiAgICAgIGxvZ3M6IHRyYW5zYWN0aW9uUmVjZWlwdC5sb2dzID8gdHJhbnNhY3Rpb25SZWNlaXB0LmxvZ3MubWFwKChsb2cpID0+IGZvcm1hdExvZyhsb2cpKSA6IG51bGwsCiAgICAgIHRvOiB0cmFuc2FjdGlvblJlY2VpcHQudG8gPyB0cmFuc2FjdGlvblJlY2VpcHQudG8gOiBudWxsLAogICAgICB0cmFuc2FjdGlvbkluZGV4OiB0cmFuc2FjdGlvblJlY2VpcHQudHJhbnNhY3Rpb25JbmRleCA/IGhleFRvTnVtYmVyKHRyYW5zYWN0aW9uUmVjZWlwdC50cmFuc2FjdGlvbkluZGV4KSA6IG51bGwsCiAgICAgIHN0YXR1czogdHJhbnNhY3Rpb25SZWNlaXB0LnN0YXR1cyA/IHJlY2VpcHRTdGF0dXNlc1t0cmFuc2FjdGlvblJlY2VpcHQuc3RhdHVzXSA6IG51bGwsCiAgICAgIHR5cGU6IHRyYW5zYWN0aW9uUmVjZWlwdC50eXBlID8gdHJhbnNhY3Rpb25UeXBlW3RyYW5zYWN0aW9uUmVjZWlwdC50eXBlXSB8fCB0cmFuc2FjdGlvblJlY2VpcHQudHlwZSA6IG51bGwKICAgIH07CiAgICBpZiAodHJhbnNhY3Rpb25SZWNlaXB0LmJsb2JHYXNQcmljZSkKICAgICAgcmVjZWlwdC5ibG9iR2FzUHJpY2UgPSBCaWdJbnQodHJhbnNhY3Rpb25SZWNlaXB0LmJsb2JHYXNQcmljZSk7CiAgICBpZiAodHJhbnNhY3Rpb25SZWNlaXB0LmJsb2JHYXNVc2VkKQogICAgICByZWNlaXB0LmJsb2JHYXNVc2VkID0gQmlnSW50KHRyYW5zYWN0aW9uUmVjZWlwdC5ibG9iR2FzVXNlZCk7CiAgICByZXR1cm4gcmVjZWlwdDsKICB9CiAgdmFyIGRlZmluZVRyYW5zYWN0aW9uUmVjZWlwdCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVGb3JtYXR0ZXIoInRyYW5zYWN0aW9uUmVjZWlwdCIsIGZvcm1hdFRyYW5zYWN0aW9uUmVjZWlwdCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaW5kZXguanMKICBpbml0X2Zyb21IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbmNvZGluZy9mcm9tUmxwLmpzCiAgaW5pdF9iYXNlKCk7CiAgaW5pdF9lbmNvZGluZygpOwogIGluaXRfY3Vyc29yMigpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBmcm9tUmxwKHZhbHVlLCB0byA9ICJoZXgiKSB7CiAgICBjb25zdCBieXRlczIgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgewogICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAzICYmIHZhbHVlLmxlbmd0aCAlIDIgIT09IDApCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEhleFZhbHVlRXJyb3IodmFsdWUpOwogICAgICAgIHJldHVybiBoZXhUb0J5dGVzKHZhbHVlKTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWU7CiAgICB9KSgpOwogICAgY29uc3QgY3Vyc29yID0gY3JlYXRlQ3Vyc29yKGJ5dGVzMiwgewogICAgICByZWN1cnNpdmVSZWFkTGltaXQ6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWQogICAgfSk7CiAgICBjb25zdCByZXN1bHQgPSBmcm9tUmxwQ3Vyc29yKGN1cnNvciwgdG8pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gZnJvbVJscEN1cnNvcihjdXJzb3IsIHRvID0gImhleCIpIHsKICAgIGlmIChjdXJzb3IuYnl0ZXMubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gdG8gPT09ICJoZXgiID8gYnl0ZXNUb0hleChjdXJzb3IuYnl0ZXMpIDogY3Vyc29yLmJ5dGVzOwogICAgY29uc3QgcHJlZml4ID0gY3Vyc29yLnJlYWRCeXRlKCk7CiAgICBpZiAocHJlZml4IDwgMTI4KQogICAgICBjdXJzb3IuZGVjcmVtZW50UG9zaXRpb24oMSk7CiAgICBpZiAocHJlZml4IDwgMTkyKSB7CiAgICAgIGNvbnN0IGxlbmd0aDIgPSByZWFkTGVuZ3RoKGN1cnNvciwgcHJlZml4LCAxMjgpOwogICAgICBjb25zdCBieXRlczIgPSBjdXJzb3IucmVhZEJ5dGVzKGxlbmd0aDIpOwogICAgICByZXR1cm4gdG8gPT09ICJoZXgiID8gYnl0ZXNUb0hleChieXRlczIpIDogYnl0ZXMyOwogICAgfQogICAgY29uc3QgbGVuZ3RoID0gcmVhZExlbmd0aChjdXJzb3IsIHByZWZpeCwgMTkyKTsKICAgIHJldHVybiByZWFkTGlzdChjdXJzb3IsIGxlbmd0aCwgdG8pOwogIH0KICBmdW5jdGlvbiByZWFkTGVuZ3RoKGN1cnNvciwgcHJlZml4LCBvZmZzZXQpIHsKICAgIGlmIChvZmZzZXQgPT09IDEyOCAmJiBwcmVmaXggPCAxMjgpCiAgICAgIHJldHVybiAxOwogICAgaWYgKHByZWZpeCA8PSBvZmZzZXQgKyA1NSkKICAgICAgcmV0dXJuIHByZWZpeCAtIG9mZnNldDsKICAgIGlmIChwcmVmaXggPT09IG9mZnNldCArIDU1ICsgMSkKICAgICAgcmV0dXJuIGN1cnNvci5yZWFkVWludDgoKTsKICAgIGlmIChwcmVmaXggPT09IG9mZnNldCArIDU1ICsgMikKICAgICAgcmV0dXJuIGN1cnNvci5yZWFkVWludDE2KCk7CiAgICBpZiAocHJlZml4ID09PSBvZmZzZXQgKyA1NSArIDMpCiAgICAgIHJldHVybiBjdXJzb3IucmVhZFVpbnQyNCgpOwogICAgaWYgKHByZWZpeCA9PT0gb2Zmc2V0ICsgNTUgKyA0KQogICAgICByZXR1cm4gY3Vyc29yLnJlYWRVaW50MzIoKTsKICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJJbnZhbGlkIFJMUCBwcmVmaXgiKTsKICB9CiAgZnVuY3Rpb24gcmVhZExpc3QoY3Vyc29yLCBsZW5ndGgsIHRvKSB7CiAgICBjb25zdCBwb3NpdGlvbiA9IGN1cnNvci5wb3NpdGlvbjsKICAgIGNvbnN0IHZhbHVlID0gW107CiAgICB3aGlsZSAoY3Vyc29yLnBvc2l0aW9uIC0gcG9zaXRpb24gPCBsZW5ndGgpCiAgICAgIHZhbHVlLnB1c2goZnJvbVJscEN1cnNvcihjdXJzb3IsIHRvKSk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9FdmVudFNpZ25hdHVyZS5qcwogIGluaXRfdG9TaWduYXR1cmUoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvRnVuY3Rpb25TaWduYXR1cmUuanMKICBpbml0X3RvU2lnbmF0dXJlKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b0V2ZW50SGFzaC5qcwogIGluaXRfdG9TaWduYXR1cmVIYXNoKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b0Z1bmN0aW9uSGFzaC5qcwogIGluaXRfdG9TaWduYXR1cmVIYXNoKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9pc0hhc2guanMKICBpbml0X2lzSGV4KCk7CiAgaW5pdF9zaXplKCk7CiAgZnVuY3Rpb24gaXNIYXNoKGhhc2gzKSB7CiAgICByZXR1cm4gaXNIZXgoaGFzaDMpICYmIHNpemUoaGFzaDMpID09PSAzMjsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9yaXBlbWQxNjAuanMKICBpbml0X21kKCk7CiAgaW5pdF91dGlsczIoKTsKICB2YXIgUmhvID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50OEFycmF5KFs3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4XSk7CiAgdmFyIElkID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50OEFycmF5KG5ldyBBcnJheSgxNikuZmlsbCgwKS5tYXAoKF8sIGkpID0+IGkpKTsKICB2YXIgUGkgPSAvKiBAX19QVVJFX18gKi8gSWQubWFwKChpKSA9PiAoOSAqIGkgKyA1KSAlIDE2KTsKICB2YXIgaWR4TCA9IFtJZF07CiAgdmFyIGlkeFIgPSBbUGldOwogIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKQogICAgZm9yIChsZXQgaiBvZiBbaWR4TCwgaWR4Ul0pCiAgICAgIGoucHVzaChqW2ldLm1hcCgoaykgPT4gUmhvW2tdKSk7CiAgdmFyIHNoaWZ0cyA9IC8qIEBfX1BVUkVfXyAqLyBbCiAgICBbMTEsIDE0LCAxNSwgMTIsIDUsIDgsIDcsIDksIDExLCAxMywgMTQsIDE1LCA2LCA3LCA5LCA4XSwKICAgIFsxMiwgMTMsIDExLCAxNSwgNiwgOSwgOSwgNywgMTIsIDE1LCAxMSwgMTMsIDcsIDgsIDcsIDddLAogICAgWzEzLCAxNSwgMTQsIDExLCA3LCA3LCA2LCA4LCAxMywgMTQsIDEzLCAxMiwgNSwgNSwgNiwgOV0sCiAgICBbMTQsIDExLCAxMiwgMTQsIDgsIDYsIDUsIDUsIDE1LCAxMiwgMTUsIDE0LCA5LCA5LCA4LCA2XSwKICAgIFsxNSwgMTIsIDEzLCAxMywgOSwgNSwgOCwgNiwgMTQsIDExLCAxMiwgMTEsIDgsIDYsIDUsIDVdCiAgXS5tYXAoKGkpID0+IG5ldyBVaW50OEFycmF5KGkpKTsKICB2YXIgc2hpZnRzTCA9IC8qIEBfX1BVUkVfXyAqLyBpZHhMLm1hcCgoaWR4LCBpKSA9PiBpZHgubWFwKChqKSA9PiBzaGlmdHNbaV1bal0pKTsKICB2YXIgc2hpZnRzUiA9IC8qIEBfX1BVUkVfXyAqLyBpZHhSLm1hcCgoaWR4LCBpKSA9PiBpZHgubWFwKChqKSA9PiBzaGlmdHNbaV1bal0pKTsKICB2YXIgS2wgPSAvKiBAX19QVVJFX18gKi8gbmV3IFVpbnQzMkFycmF5KFsKICAgIDAsCiAgICAxNTE4NTAwMjQ5LAogICAgMTg1OTc3NTM5MywKICAgIDI0MDA5NTk3MDgsCiAgICAyODQwODUzODM4CiAgXSk7CiAgdmFyIEtyID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheShbCiAgICAxMzUyODI5OTI2LAogICAgMTU0ODYwMzY4NCwKICAgIDE4MzYwNzI2OTEsCiAgICAyMDUzOTk0MjE3LAogICAgMAogIF0pOwogIGZ1bmN0aW9uIGYoZ3JvdXAsIHgsIHksIHopIHsKICAgIGlmIChncm91cCA9PT0gMCkKICAgICAgcmV0dXJuIHggXiB5IF4gejsKICAgIGVsc2UgaWYgKGdyb3VwID09PSAxKQogICAgICByZXR1cm4geCAmIHkgfCB+eCAmIHo7CiAgICBlbHNlIGlmIChncm91cCA9PT0gMikKICAgICAgcmV0dXJuICh4IHwgfnkpIF4gejsKICAgIGVsc2UgaWYgKGdyb3VwID09PSAzKQogICAgICByZXR1cm4geCAmIHogfCB5ICYgfno7CiAgICBlbHNlCiAgICAgIHJldHVybiB4IF4gKHkgfCB+eik7CiAgfQogIHZhciBSX0JVRiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgVWludDMyQXJyYXkoMTYpOwogIHZhciBSSVBFTUQxNjAgPSBjbGFzcyBleHRlbmRzIEhhc2hNRCB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoNjQsIDIwLCA4LCB0cnVlKTsKICAgICAgdGhpcy5oMCA9IDE3MzI1ODQxOTMgfCAwOwogICAgICB0aGlzLmgxID0gNDAyMzIzMzQxNyB8IDA7CiAgICAgIHRoaXMuaDIgPSAyNTYyMzgzMTAyIHwgMDsKICAgICAgdGhpcy5oMyA9IDI3MTczMzg3OCB8IDA7CiAgICAgIHRoaXMuaDQgPSAzMjg1Mzc3NTIwIHwgMDsKICAgIH0KICAgIGdldCgpIHsKICAgICAgY29uc3QgeyBoMCwgaDEsIGgyLCBoMywgaDQgfSA9IHRoaXM7CiAgICAgIHJldHVybiBbaDAsIGgxLCBoMiwgaDMsIGg0XTsKICAgIH0KICAgIHNldChoMCwgaDEsIGgyLCBoMywgaDQpIHsKICAgICAgdGhpcy5oMCA9IGgwIHwgMDsKICAgICAgdGhpcy5oMSA9IGgxIHwgMDsKICAgICAgdGhpcy5oMiA9IGgyIHwgMDsKICAgICAgdGhpcy5oMyA9IGgzIHwgMDsKICAgICAgdGhpcy5oNCA9IGg0IHwgMDsKICAgIH0KICAgIHByb2Nlc3Modmlldywgb2Zmc2V0KSB7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKywgb2Zmc2V0ICs9IDQpCiAgICAgICAgUl9CVUZbaV0gPSB2aWV3LmdldFVpbnQzMihvZmZzZXQsIHRydWUpOwogICAgICBsZXQgYWwgPSB0aGlzLmgwIHwgMCwgYXIgPSBhbCwgYmwgPSB0aGlzLmgxIHwgMCwgYnIgPSBibCwgY2wgPSB0aGlzLmgyIHwgMCwgY3IgPSBjbCwgZGwgPSB0aGlzLmgzIHwgMCwgZHIgPSBkbCwgZWwgPSB0aGlzLmg0IHwgMCwgZXIgPSBlbDsKICAgICAgZm9yIChsZXQgZ3JvdXAgPSAwOyBncm91cCA8IDU7IGdyb3VwKyspIHsKICAgICAgICBjb25zdCByR3JvdXAgPSA0IC0gZ3JvdXA7CiAgICAgICAgY29uc3QgaGJsID0gS2xbZ3JvdXBdLCBoYnIgPSBLcltncm91cF07CiAgICAgICAgY29uc3QgcmwgPSBpZHhMW2dyb3VwXSwgcnIgPSBpZHhSW2dyb3VwXTsKICAgICAgICBjb25zdCBzbCA9IHNoaWZ0c0xbZ3JvdXBdLCBzciA9IHNoaWZ0c1JbZ3JvdXBdOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgewogICAgICAgICAgY29uc3QgdGwgPSByb3RsKGFsICsgZihncm91cCwgYmwsIGNsLCBkbCkgKyBSX0JVRltybFtpXV0gKyBoYmwsIHNsW2ldKSArIGVsIHwgMDsKICAgICAgICAgIGFsID0gZWwsIGVsID0gZGwsIGRsID0gcm90bChjbCwgMTApIHwgMCwgY2wgPSBibCwgYmwgPSB0bDsKICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAgICAgICAgICBjb25zdCB0ciA9IHJvdGwoYXIgKyBmKHJHcm91cCwgYnIsIGNyLCBkcikgKyBSX0JVRltycltpXV0gKyBoYnIsIHNyW2ldKSArIGVyIHwgMDsKICAgICAgICAgIGFyID0gZXIsIGVyID0gZHIsIGRyID0gcm90bChjciwgMTApIHwgMCwgY3IgPSBiciwgYnIgPSB0cjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5zZXQodGhpcy5oMSArIGNsICsgZHIgfCAwLCB0aGlzLmgyICsgZGwgKyBlciB8IDAsIHRoaXMuaDMgKyBlbCArIGFyIHwgMCwgdGhpcy5oNCArIGFsICsgYnIgfCAwLCB0aGlzLmgwICsgYmwgKyBjciB8IDApOwogICAgfQogICAgcm91bmRDbGVhbigpIHsKICAgICAgUl9CVUYuZmlsbCgwKTsKICAgIH0KICAgIGRlc3Ryb3koKSB7CiAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgICAgdGhpcy5idWZmZXIuZmlsbCgwKTsKICAgICAgdGhpcy5zZXQoMCwgMCwgMCwgMCwgMCk7CiAgICB9CiAgfTsKICB2YXIgcmlwZW1kMTYwID0gLyogQF9fUFVSRV9fICovIHdyYXBDb25zdHJ1Y3RvcigoKSA9PiBuZXcgUklQRU1EMTYwKCkpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvcmlwZW1kMTYwLmpzCiAgaW5pdF9pc0hleCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiByaXBlbWQxNjAyKHZhbHVlLCB0b18pIHsKICAgIGNvbnN0IHRvID0gdG9fIHx8ICJoZXgiOwogICAgY29uc3QgYnl0ZXMyID0gcmlwZW1kMTYwKGlzSGV4KHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSkgPyB0b0J5dGVzKHZhbHVlKSA6IHZhbHVlKTsKICAgIGlmICh0byA9PT0gImJ5dGVzIikKICAgICAgcmV0dXJuIGJ5dGVzMjsKICAgIHJldHVybiB0b0hleChieXRlczIpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvaGFzaE1lc3NhZ2UuanMKICBpbml0X2tlY2NhazI1NigpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9zdHJpbmdzLmpzCiAgdmFyIHByZXNpZ25NZXNzYWdlUHJlZml4ID0gIhlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcbiI7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3RvUHJlZml4ZWRNZXNzYWdlLmpzCiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gdG9QcmVmaXhlZE1lc3NhZ2UobWVzc2FnZV8pIHsKICAgIGNvbnN0IG1lc3NhZ2UgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIG1lc3NhZ2VfID09PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gc3RyaW5nVG9IZXgobWVzc2FnZV8pOwogICAgICBpZiAodHlwZW9mIG1lc3NhZ2VfLnJhdyA9PT0gInN0cmluZyIpCiAgICAgICAgcmV0dXJuIG1lc3NhZ2VfLnJhdzsKICAgICAgcmV0dXJuIGJ5dGVzVG9IZXgobWVzc2FnZV8ucmF3KTsKICAgIH0pKCk7CiAgICBjb25zdCBwcmVmaXggPSBzdHJpbmdUb0hleChgJHtwcmVzaWduTWVzc2FnZVByZWZpeH0ke3NpemUobWVzc2FnZSl9YCk7CiAgICByZXR1cm4gY29uY2F0KFtwcmVmaXgsIG1lc3NhZ2VdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL2hhc2hNZXNzYWdlLmpzCiAgZnVuY3Rpb24gaGFzaE1lc3NhZ2UobWVzc2FnZSwgdG9fKSB7CiAgICByZXR1cm4ga2VjY2FrMjU2KHRvUHJlZml4ZWRNZXNzYWdlKG1lc3NhZ2UpLCB0b18pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcmVjb3Zlck1lc3NhZ2VBZGRyZXNzLmpzCiAgYXN5bmMgZnVuY3Rpb24gcmVjb3Zlck1lc3NhZ2VBZGRyZXNzKHsgbWVzc2FnZSwgc2lnbmF0dXJlIH0pIHsKICAgIHJldHVybiByZWNvdmVyQWRkcmVzcyh7IGhhc2g6IGhhc2hNZXNzYWdlKG1lc3NhZ2UpLCBzaWduYXR1cmUgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3NpZ25hdHVyZS9yZWNvdmVyVHlwZWREYXRhQWRkcmVzcy5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJUeXBlZERhdGFBZGRyZXNzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgZG9tYWluLCBtZXNzYWdlLCBwcmltYXJ5VHlwZSwgc2lnbmF0dXJlLCB0eXBlcyB9ID0gcGFyYW1ldGVyczsKICAgIHJldHVybiByZWNvdmVyQWRkcmVzcyh7CiAgICAgIGhhc2g6IGhhc2hUeXBlZERhdGEoewogICAgICAgIGRvbWFpbiwKICAgICAgICBtZXNzYWdlLAogICAgICAgIHByaW1hcnlUeXBlLAogICAgICAgIHR5cGVzCiAgICAgIH0pLAogICAgICBzaWduYXR1cmUKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvdmVyaWZ5SGFzaC5qcwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzRXF1YWwoKTsKICBhc3luYyBmdW5jdGlvbiB2ZXJpZnlIYXNoKHsgYWRkcmVzcywgaGFzaDogaGFzaDMsIHNpZ25hdHVyZSB9KSB7CiAgICByZXR1cm4gaXNBZGRyZXNzRXF1YWwoZ2V0QWRkcmVzcyhhZGRyZXNzKSwgYXdhaXQgcmVjb3ZlckFkZHJlc3MoeyBoYXNoOiBoYXNoMywgc2lnbmF0dXJlIH0pKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3ZlcmlmeU1lc3NhZ2UuanMKICBpbml0X2dldEFkZHJlc3MoKTsKICBpbml0X2lzQWRkcmVzc0VxdWFsKCk7CiAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5TWVzc2FnZSh7IGFkZHJlc3MsIG1lc3NhZ2UsIHNpZ25hdHVyZSB9KSB7CiAgICByZXR1cm4gaXNBZGRyZXNzRXF1YWwoZ2V0QWRkcmVzcyhhZGRyZXNzKSwgYXdhaXQgcmVjb3Zlck1lc3NhZ2VBZGRyZXNzKHsgbWVzc2FnZSwgc2lnbmF0dXJlIH0pKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3ZlcmlmeVR5cGVkRGF0YS5qcwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzRXF1YWwoKTsKICBhc3luYyBmdW5jdGlvbiB2ZXJpZnlUeXBlZERhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhZGRyZXNzLCBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCBzaWduYXR1cmUsIHR5cGVzIH0gPSBwYXJhbWV0ZXJzOwogICAgcmV0dXJuIGlzQWRkcmVzc0VxdWFsKGdldEFkZHJlc3MoYWRkcmVzcyksIGF3YWl0IHJlY292ZXJUeXBlZERhdGFBZGRyZXNzKHsKICAgICAgZG9tYWluLAogICAgICBtZXNzYWdlLAogICAgICBwcmltYXJ5VHlwZSwKICAgICAgc2lnbmF0dXJlLAogICAgICB0eXBlcwogICAgfSkpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcGFyc2VFcmM2NDkyU2lnbmF0dXJlLmpzCiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2J5dGVzLmpzCiAgdmFyIGVyYzY0OTJNYWdpY0J5dGVzID0gIjB4NjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MiI7CiAgdmFyIHplcm9IYXNoID0gIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL2lzRXJjNjQ5MlNpZ25hdHVyZS5qcwogIGluaXRfc2xpY2UoKTsKICBmdW5jdGlvbiBpc0VyYzY0OTJTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gc2xpY2VIZXgoc2lnbmF0dXJlLCAtMzIpID09PSBlcmM2NDkyTWFnaWNCeXRlczsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3BhcnNlRXJjNjQ5MlNpZ25hdHVyZS5qcwogIGZ1bmN0aW9uIHBhcnNlRXJjNjQ5MlNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIGlmICghaXNFcmM2NDkyU2lnbmF0dXJlKHNpZ25hdHVyZSkpCiAgICAgIHJldHVybiB7IHNpZ25hdHVyZSB9OwogICAgY29uc3QgW2FkZHJlc3MsIGRhdGEsIHNpZ25hdHVyZV9dID0gZGVjb2RlQWJpUGFyYW1ldGVycyhbeyB0eXBlOiAiYWRkcmVzcyIgfSwgeyB0eXBlOiAiYnl0ZXMiIH0sIHsgdHlwZTogImJ5dGVzIiB9XSwgc2lnbmF0dXJlKTsKICAgIHJldHVybiB7IGFkZHJlc3MsIGRhdGEsIHNpZ25hdHVyZTogc2lnbmF0dXJlXyB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZS5qcwogIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogIGluaXRfY29uY2F0KCk7CiAgaW5pdF90b0J5dGVzKCk7CiAgZnVuY3Rpb24gc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGRhdGEsIHNpZ25hdHVyZSwgdG8gPSAiaGV4IiB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZV8gPSBjb25jYXRIZXgoWwogICAgICBlbmNvZGVBYmlQYXJhbWV0ZXJzKFt7IHR5cGU6ICJhZGRyZXNzIiB9LCB7IHR5cGU6ICJieXRlcyIgfSwgeyB0eXBlOiAiYnl0ZXMiIH1dLCBbYWRkcmVzcywgZGF0YSwgc2lnbmF0dXJlXSksCiAgICAgIGVyYzY0OTJNYWdpY0J5dGVzCiAgICBdKTsKICAgIGlmICh0byA9PT0gImhleCIpCiAgICAgIHJldHVybiBzaWduYXR1cmVfOwogICAgcmV0dXJuIGhleFRvQnl0ZXMoc2lnbmF0dXJlXyk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL2dldFNlcmlhbGl6ZWRUcmFuc2FjdGlvblR5cGUuanMKICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgaW5pdF9zbGljZSgpOwogIGluaXRfZnJvbUhleCgpOwogIGZ1bmN0aW9uIGdldFNlcmlhbGl6ZWRUcmFuc2FjdGlvblR5cGUoc2VyaWFsaXplZFRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCBzZXJpYWxpemVkVHlwZSA9IHNsaWNlSGV4KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwgMCwgMSk7CiAgICBpZiAoc2VyaWFsaXplZFR5cGUgPT09ICIweDA0IikKICAgICAgcmV0dXJuICJlaXA3NzAyIjsKICAgIGlmIChzZXJpYWxpemVkVHlwZSA9PT0gIjB4MDMiKQogICAgICByZXR1cm4gImVpcDQ4NDQiOwogICAgaWYgKHNlcmlhbGl6ZWRUeXBlID09PSAiMHgwMiIpCiAgICAgIHJldHVybiAiZWlwMTU1OSI7CiAgICBpZiAoc2VyaWFsaXplZFR5cGUgPT09ICIweDAxIikKICAgICAgcmV0dXJuICJlaXAyOTMwIjsKICAgIGlmIChzZXJpYWxpemVkVHlwZSAhPT0gIjB4IiAmJiBoZXhUb051bWJlcihzZXJpYWxpemVkVHlwZSkgPj0gMTkyKQogICAgICByZXR1cm4gImxlZ2FjeSI7CiAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvblR5cGVFcnJvcih7IHNlcmlhbGl6ZWRUeXBlIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9hc3NlcnRUcmFuc2FjdGlvbi5qcwogIGluaXRfYWRkcmVzcygpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY2hhaW4oKTsKICBpbml0X25vZGUoKTsKICBpbml0X2lzQWRkcmVzcygpOwogIGluaXRfc2l6ZSgpOwogIGluaXRfc2xpY2UoKTsKICBpbml0X2Zyb21IZXgoKTsKICBmdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkVJUDc3MDIodHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHsgYXV0aG9yaXphdGlvbkxpc3QgfSA9IHRyYW5zYWN0aW9uOwogICAgaWYgKGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICAgIGZvciAoY29uc3QgYXV0aG9yaXphdGlvbiBvZiBhdXRob3JpemF0aW9uTGlzdCkgewogICAgICAgIGNvbnN0IHsgY29udHJhY3RBZGRyZXNzLCBjaGFpbklkIH0gPSBhdXRob3JpemF0aW9uOwogICAgICAgIGlmICghaXNBZGRyZXNzKGNvbnRyYWN0QWRkcmVzcykpCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IGNvbnRyYWN0QWRkcmVzcyB9KTsKICAgICAgICBpZiAoY2hhaW5JZCA8PSAwKQogICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRDaGFpbklkRXJyb3IoeyBjaGFpbklkIH0pOwogICAgICB9CiAgICB9CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDE1NTkodHJhbnNhY3Rpb24pOwogIH0KICBmdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkVJUDQ4NDQodHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHsgYmxvYlZlcnNpb25lZEhhc2hlcyB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoYmxvYlZlcnNpb25lZEhhc2hlcykgewogICAgICBpZiAoYmxvYlZlcnNpb25lZEhhc2hlcy5sZW5ndGggPT09IDApCiAgICAgICAgdGhyb3cgbmV3IEVtcHR5QmxvYkVycm9yKCk7CiAgICAgIGZvciAoY29uc3QgaGFzaDMgb2YgYmxvYlZlcnNpb25lZEhhc2hlcykgewogICAgICAgIGNvbnN0IHNpemVfID0gc2l6ZShoYXNoMyk7CiAgICAgICAgY29uc3QgdmVyc2lvbjMgPSBoZXhUb051bWJlcihzbGljZShoYXNoMywgMCwgMSkpOwogICAgICAgIGlmIChzaXplXyAhPT0gMzIpCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFZlcnNpb25lZEhhc2hTaXplRXJyb3IoeyBoYXNoOiBoYXNoMywgc2l6ZTogc2l6ZV8gfSk7CiAgICAgICAgaWYgKHZlcnNpb24zICE9PSB2ZXJzaW9uZWRIYXNoVmVyc2lvbkt6ZykKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkVmVyc2lvbmVkSGFzaFZlcnNpb25FcnJvcih7CiAgICAgICAgICAgIGhhc2g6IGhhc2gzLAogICAgICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uMwogICAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQMTU1OSh0cmFuc2FjdGlvbik7CiAgfQogIGZ1bmN0aW9uIGFzc2VydFRyYW5zYWN0aW9uRUlQMTU1OSh0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbWF4RmVlUGVyR2FzLCB0byB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoY2hhaW5JZCA8PSAwKQogICAgICB0aHJvdyBuZXcgSW52YWxpZENoYWluSWRFcnJvcih7IGNoYWluSWQgfSk7CiAgICBpZiAodG8gJiYgIWlzQWRkcmVzcyh0bykpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogdG8gfSk7CiAgICBpZiAobWF4RmVlUGVyR2FzICYmIG1heEZlZVBlckdhcyA+IDJuICoqIDI1Nm4gLSAxbikKICAgICAgdGhyb3cgbmV3IEZlZUNhcFRvb0hpZ2hFcnJvcih7IG1heEZlZVBlckdhcyB9KTsKICAgIGlmIChtYXhQcmlvcml0eUZlZVBlckdhcyAmJiBtYXhGZWVQZXJHYXMgJiYgbWF4UHJpb3JpdHlGZWVQZXJHYXMgPiBtYXhGZWVQZXJHYXMpCiAgICAgIHRocm93IG5ldyBUaXBBYm92ZUZlZUNhcEVycm9yKHsgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcyB9KTsKICB9CiAgZnVuY3Rpb24gYXNzZXJ0VHJhbnNhY3Rpb25FSVAyOTMwKHRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCB7IGNoYWluSWQsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyR2FzLCB0byB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoY2hhaW5JZCA8PSAwKQogICAgICB0aHJvdyBuZXcgSW52YWxpZENoYWluSWRFcnJvcih7IGNoYWluSWQgfSk7CiAgICBpZiAodG8gJiYgIWlzQWRkcmVzcyh0bykpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogdG8gfSk7CiAgICBpZiAobWF4UHJpb3JpdHlGZWVQZXJHYXMgfHwgbWF4RmVlUGVyR2FzKQogICAgICB0aHJvdyBuZXcgQmFzZUVycm9yMigiYG1heEZlZVBlckdhc2AvYG1heFByaW9yaXR5RmVlUGVyR2FzYCBpcyBub3QgYSB2YWxpZCBFSVAtMjkzMCBUcmFuc2FjdGlvbiBhdHRyaWJ1dGUuIik7CiAgICBpZiAoZ2FzUHJpY2UgJiYgZ2FzUHJpY2UgPiAybiAqKiAyNTZuIC0gMW4pCiAgICAgIHRocm93IG5ldyBGZWVDYXBUb29IaWdoRXJyb3IoeyBtYXhGZWVQZXJHYXM6IGdhc1ByaWNlIH0pOwogIH0KICBmdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSh0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBtYXhQcmlvcml0eUZlZVBlckdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckdhcywgdG8gfSA9IHRyYW5zYWN0aW9uOwogICAgaWYgKHRvICYmICFpc0FkZHJlc3ModG8pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IHRvIH0pOwogICAgaWYgKHR5cGVvZiBjaGFpbklkICE9PSAidW5kZWZpbmVkIiAmJiBjaGFpbklkIDw9IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhaW5JZEVycm9yKHsgY2hhaW5JZCB9KTsKICAgIGlmIChtYXhQcmlvcml0eUZlZVBlckdhcyB8fCBtYXhGZWVQZXJHYXMpCiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgbWF4RmVlUGVyR2FzYC9gbWF4UHJpb3JpdHlGZWVQZXJHYXNgIGlzIG5vdCBhIHZhbGlkIExlZ2FjeSBUcmFuc2FjdGlvbiBhdHRyaWJ1dGUuIik7CiAgICBpZiAoZ2FzUHJpY2UgJiYgZ2FzUHJpY2UgPiAybiAqKiAyNTZuIC0gMW4pCiAgICAgIHRocm93IG5ldyBGZWVDYXBUb29IaWdoRXJyb3IoeyBtYXhGZWVQZXJHYXM6IGdhc1ByaWNlIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9wYXJzZVRyYW5zYWN0aW9uLmpzCiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF90cmFuc2FjdGlvbigpOwogIGluaXRfaXNBZGRyZXNzKCk7CiAgaW5pdF9pc0hleCgpOwogIGluaXRfcGFkKCk7CiAgaW5pdF90cmltKCk7CiAgaW5pdF9mcm9tSGV4KCk7CiAgZnVuY3Rpb24gcGFyc2VUcmFuc2FjdGlvbihzZXJpYWxpemVkVHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHR5cGUgPSBnZXRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgICBpZiAodHlwZSA9PT0gImVpcDE1NTkiKQogICAgICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbkVJUDE1NTkoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgIGlmICh0eXBlID09PSAiZWlwMjkzMCIpCiAgICAgIHJldHVybiBwYXJzZVRyYW5zYWN0aW9uRUlQMjkzMChzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgaWYgKHR5cGUgPT09ICJlaXA0ODQ0IikKICAgICAgcmV0dXJuIHBhcnNlVHJhbnNhY3Rpb25FSVA0ODQ0KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgICBpZiAodHlwZSA9PT0gImVpcDc3MDIiKQogICAgICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbkVJUDc3MDIoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgIHJldHVybiBwYXJzZVRyYW5zYWN0aW9uTGVnYWN5KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25FSVA3NzAyKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgY29uc3QgdHJhbnNhY3Rpb25BcnJheSA9IHRvVHJhbnNhY3Rpb25BcnJheShzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3QgW2NoYWluSWQsIG5vbmNlLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbWF4RmVlUGVyR2FzLCBnYXMsIHRvLCB2YWx1ZSwgZGF0YSwgYWNjZXNzTGlzdCwgYXV0aG9yaXphdGlvbkxpc3QsIHYsIHIsIHNdID0gdHJhbnNhY3Rpb25BcnJheTsKICAgIGlmICh0cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCAhPT0gMTAgJiYgdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggIT09IDEzKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yKHsKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBjaGFpbklkLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhcywKICAgICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICAgIGdhcywKICAgICAgICAgIHRvLAogICAgICAgICAgdmFsdWUsCiAgICAgICAgICBkYXRhLAogICAgICAgICAgYWNjZXNzTGlzdCwKICAgICAgICAgIGF1dGhvcml6YXRpb25MaXN0LAogICAgICAgICAgLi4udHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPiA5ID8gewogICAgICAgICAgICB2LAogICAgICAgICAgICByLAogICAgICAgICAgICBzCiAgICAgICAgICB9IDoge30KICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0eXBlOiAiZWlwNzcwMiIKICAgICAgfSk7CiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHsKICAgICAgY2hhaW5JZDogaGV4VG9OdW1iZXIoY2hhaW5JZCksCiAgICAgIHR5cGU6ICJlaXA3NzAyIgogICAgfTsKICAgIGlmIChpc0hleCh0bykgJiYgdG8gIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnRvID0gdG87CiAgICBpZiAoaXNIZXgoZ2FzKSAmJiBnYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhcyA9IGhleFRvQmlnSW50KGdhcyk7CiAgICBpZiAoaXNIZXgoZGF0YSkgJiYgZGF0YSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZGF0YSA9IGRhdGE7CiAgICBpZiAoaXNIZXgobm9uY2UpICYmIG5vbmNlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5ub25jZSA9IGhleFRvTnVtYmVyKG5vbmNlKTsKICAgIGlmIChpc0hleCh2YWx1ZSkgJiYgdmFsdWUgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnZhbHVlID0gaGV4VG9CaWdJbnQodmFsdWUpOwogICAgaWYgKGlzSGV4KG1heEZlZVBlckdhcykgJiYgbWF4RmVlUGVyR2FzICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5tYXhGZWVQZXJHYXMgPSBoZXhUb0JpZ0ludChtYXhGZWVQZXJHYXMpOwogICAgaWYgKGlzSGV4KG1heFByaW9yaXR5RmVlUGVyR2FzKSAmJiBtYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMgPSBoZXhUb0JpZ0ludChtYXhQcmlvcml0eUZlZVBlckdhcyk7CiAgICBpZiAoYWNjZXNzTGlzdC5sZW5ndGggIT09IDAgJiYgYWNjZXNzTGlzdCAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uYWNjZXNzTGlzdCA9IHBhcnNlQWNjZXNzTGlzdChhY2Nlc3NMaXN0KTsKICAgIGlmIChhdXRob3JpemF0aW9uTGlzdC5sZW5ndGggIT09IDAgJiYgYXV0aG9yaXphdGlvbkxpc3QgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmF1dGhvcml6YXRpb25MaXN0ID0gcGFyc2VBdXRob3JpemF0aW9uTGlzdChhdXRob3JpemF0aW9uTGlzdCk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDc3MDIodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDEzID8gcGFyc2VFSVAxNTVTaWduYXR1cmUodHJhbnNhY3Rpb25BcnJheSkgOiB2b2lkIDA7CiAgICByZXR1cm4geyAuLi5zaWduYXR1cmUsIC4uLnRyYW5zYWN0aW9uIH07CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25FSVA0ODQ0KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgY29uc3QgdHJhbnNhY3Rpb25PcldyYXBwZXJBcnJheSA9IHRvVHJhbnNhY3Rpb25BcnJheShzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3QgaGFzTmV0d29ya1dyYXBwZXIgPSB0cmFuc2FjdGlvbk9yV3JhcHBlckFycmF5Lmxlbmd0aCA9PT0gNDsKICAgIGNvbnN0IHRyYW5zYWN0aW9uQXJyYXkgPSBoYXNOZXR3b3JrV3JhcHBlciA/IHRyYW5zYWN0aW9uT3JXcmFwcGVyQXJyYXlbMF0gOiB0cmFuc2FjdGlvbk9yV3JhcHBlckFycmF5OwogICAgY29uc3Qgd3JhcHBlckFycmF5ID0gaGFzTmV0d29ya1dyYXBwZXIgPyB0cmFuc2FjdGlvbk9yV3JhcHBlckFycmF5LnNsaWNlKDEpIDogW107CiAgICBjb25zdCBbY2hhaW5JZCwgbm9uY2UsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBtYXhGZWVQZXJHYXMsIGdhcywgdG8sIHZhbHVlLCBkYXRhLCBhY2Nlc3NMaXN0LCBtYXhGZWVQZXJCbG9iR2FzLCBibG9iVmVyc2lvbmVkSGFzaGVzLCB2LCByLCBzXSA9IHRyYW5zYWN0aW9uQXJyYXk7CiAgICBjb25zdCBbYmxvYnMsIGNvbW1pdG1lbnRzLCBwcm9vZnNdID0gd3JhcHBlckFycmF5OwogICAgaWYgKCEodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDExIHx8IHRyYW5zYWN0aW9uQXJyYXkubGVuZ3RoID09PSAxNCkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uRXJyb3IoewogICAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICAgIGNoYWluSWQsCiAgICAgICAgICBub25jZSwKICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzLAogICAgICAgICAgbWF4RmVlUGVyR2FzLAogICAgICAgICAgZ2FzLAogICAgICAgICAgdG8sCiAgICAgICAgICB2YWx1ZSwKICAgICAgICAgIGRhdGEsCiAgICAgICAgICBhY2Nlc3NMaXN0LAogICAgICAgICAgLi4udHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPiA5ID8gewogICAgICAgICAgICB2LAogICAgICAgICAgICByLAogICAgICAgICAgICBzCiAgICAgICAgICB9IDoge30KICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0eXBlOiAiZWlwNDg0NCIKICAgICAgfSk7CiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHsKICAgICAgYmxvYlZlcnNpb25lZEhhc2hlcywKICAgICAgY2hhaW5JZDogaGV4VG9OdW1iZXIoY2hhaW5JZCksCiAgICAgIHR5cGU6ICJlaXA0ODQ0IgogICAgfTsKICAgIGlmIChpc0hleCh0bykgJiYgdG8gIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnRvID0gdG87CiAgICBpZiAoaXNIZXgoZ2FzKSAmJiBnYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhcyA9IGhleFRvQmlnSW50KGdhcyk7CiAgICBpZiAoaXNIZXgoZGF0YSkgJiYgZGF0YSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZGF0YSA9IGRhdGE7CiAgICBpZiAoaXNIZXgobm9uY2UpICYmIG5vbmNlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5ub25jZSA9IGhleFRvTnVtYmVyKG5vbmNlKTsKICAgIGlmIChpc0hleCh2YWx1ZSkgJiYgdmFsdWUgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnZhbHVlID0gaGV4VG9CaWdJbnQodmFsdWUpOwogICAgaWYgKGlzSGV4KG1heEZlZVBlckJsb2JHYXMpICYmIG1heEZlZVBlckJsb2JHYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm1heEZlZVBlckJsb2JHYXMgPSBoZXhUb0JpZ0ludChtYXhGZWVQZXJCbG9iR2FzKTsKICAgIGlmIChpc0hleChtYXhGZWVQZXJHYXMpICYmIG1heEZlZVBlckdhcyAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24ubWF4RmVlUGVyR2FzID0gaGV4VG9CaWdJbnQobWF4RmVlUGVyR2FzKTsKICAgIGlmIChpc0hleChtYXhQcmlvcml0eUZlZVBlckdhcykgJiYgbWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm1heFByaW9yaXR5RmVlUGVyR2FzID0gaGV4VG9CaWdJbnQobWF4UHJpb3JpdHlGZWVQZXJHYXMpOwogICAgaWYgKGFjY2Vzc0xpc3QubGVuZ3RoICE9PSAwICYmIGFjY2Vzc0xpc3QgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmFjY2Vzc0xpc3QgPSBwYXJzZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBpZiAoYmxvYnMgJiYgY29tbWl0bWVudHMgJiYgcHJvb2ZzKQogICAgICB0cmFuc2FjdGlvbi5zaWRlY2FycyA9IHRvQmxvYlNpZGVjYXJzKHsKICAgICAgICBibG9icywKICAgICAgICBjb21taXRtZW50cywKICAgICAgICBwcm9vZnMKICAgICAgfSk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDQ4NDQodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDE0ID8gcGFyc2VFSVAxNTVTaWduYXR1cmUodHJhbnNhY3Rpb25BcnJheSkgOiB2b2lkIDA7CiAgICByZXR1cm4geyAuLi5zaWduYXR1cmUsIC4uLnRyYW5zYWN0aW9uIH07CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25FSVAxNTU5KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgY29uc3QgdHJhbnNhY3Rpb25BcnJheSA9IHRvVHJhbnNhY3Rpb25BcnJheShzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3QgW2NoYWluSWQsIG5vbmNlLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbWF4RmVlUGVyR2FzLCBnYXMsIHRvLCB2YWx1ZSwgZGF0YSwgYWNjZXNzTGlzdCwgdiwgciwgc10gPSB0cmFuc2FjdGlvbkFycmF5OwogICAgaWYgKCEodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDkgfHwgdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDEyKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25FcnJvcih7CiAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgY2hhaW5JZCwKICAgICAgICAgIG5vbmNlLAogICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXMsCiAgICAgICAgICBtYXhGZWVQZXJHYXMsCiAgICAgICAgICBnYXMsCiAgICAgICAgICB0bywKICAgICAgICAgIHZhbHVlLAogICAgICAgICAgZGF0YSwKICAgICAgICAgIGFjY2Vzc0xpc3QsCiAgICAgICAgICAuLi50cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA+IDkgPyB7CiAgICAgICAgICAgIHYsCiAgICAgICAgICAgIHIsCiAgICAgICAgICAgIHMKICAgICAgICAgIH0gOiB7fQogICAgICAgIH0sCiAgICAgICAgc2VyaWFsaXplZFRyYW5zYWN0aW9uLAogICAgICAgIHR5cGU6ICJlaXAxNTU5IgogICAgICB9KTsKICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gewogICAgICBjaGFpbklkOiBoZXhUb051bWJlcihjaGFpbklkKSwKICAgICAgdHlwZTogImVpcDE1NTkiCiAgICB9OwogICAgaWYgKGlzSGV4KHRvKSAmJiB0byAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24udG8gPSB0bzsKICAgIGlmIChpc0hleChnYXMpICYmIGdhcyAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZ2FzID0gaGV4VG9CaWdJbnQoZ2FzKTsKICAgIGlmIChpc0hleChkYXRhKSAmJiBkYXRhICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5kYXRhID0gZGF0YTsKICAgIGlmIChpc0hleChub25jZSkgJiYgbm9uY2UgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm5vbmNlID0gaGV4VG9OdW1iZXIobm9uY2UpOwogICAgaWYgKGlzSGV4KHZhbHVlKSAmJiB2YWx1ZSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24udmFsdWUgPSBoZXhUb0JpZ0ludCh2YWx1ZSk7CiAgICBpZiAoaXNIZXgobWF4RmVlUGVyR2FzKSAmJiBtYXhGZWVQZXJHYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm1heEZlZVBlckdhcyA9IGhleFRvQmlnSW50KG1heEZlZVBlckdhcyk7CiAgICBpZiAoaXNIZXgobWF4UHJpb3JpdHlGZWVQZXJHYXMpICYmIG1heFByaW9yaXR5RmVlUGVyR2FzICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5tYXhQcmlvcml0eUZlZVBlckdhcyA9IGhleFRvQmlnSW50KG1heFByaW9yaXR5RmVlUGVyR2FzKTsKICAgIGlmIChhY2Nlc3NMaXN0Lmxlbmd0aCAhPT0gMCAmJiBhY2Nlc3NMaXN0ICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5hY2Nlc3NMaXN0ID0gcGFyc2VBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpOwogICAgYXNzZXJ0VHJhbnNhY3Rpb25FSVAxNTU5KHRyYW5zYWN0aW9uKTsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRyYW5zYWN0aW9uQXJyYXkubGVuZ3RoID09PSAxMiA/IHBhcnNlRUlQMTU1U2lnbmF0dXJlKHRyYW5zYWN0aW9uQXJyYXkpIDogdm9pZCAwOwogICAgcmV0dXJuIHsgLi4uc2lnbmF0dXJlLCAuLi50cmFuc2FjdGlvbiB9OwogIH0KICBmdW5jdGlvbiBwYXJzZVRyYW5zYWN0aW9uRUlQMjkzMChzZXJpYWxpemVkVHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHRyYW5zYWN0aW9uQXJyYXkgPSB0b1RyYW5zYWN0aW9uQXJyYXkoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgIGNvbnN0IFtjaGFpbklkLCBub25jZSwgZ2FzUHJpY2UsIGdhcywgdG8sIHZhbHVlLCBkYXRhLCBhY2Nlc3NMaXN0LCB2LCByLCBzXSA9IHRyYW5zYWN0aW9uQXJyYXk7CiAgICBpZiAoISh0cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA9PT0gOCB8fCB0cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA9PT0gMTEpKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yKHsKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBjaGFpbklkLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICBnYXNQcmljZSwKICAgICAgICAgIGdhcywKICAgICAgICAgIHRvLAogICAgICAgICAgdmFsdWUsCiAgICAgICAgICBkYXRhLAogICAgICAgICAgYWNjZXNzTGlzdCwKICAgICAgICAgIC4uLnRyYW5zYWN0aW9uQXJyYXkubGVuZ3RoID4gOCA/IHsKICAgICAgICAgICAgdiwKICAgICAgICAgICAgciwKICAgICAgICAgICAgcwogICAgICAgICAgfSA6IHt9CiAgICAgICAgfSwKICAgICAgICBzZXJpYWxpemVkVHJhbnNhY3Rpb24sCiAgICAgICAgdHlwZTogImVpcDI5MzAiCiAgICAgIH0pOwogICAgY29uc3QgdHJhbnNhY3Rpb24gPSB7CiAgICAgIGNoYWluSWQ6IGhleFRvTnVtYmVyKGNoYWluSWQpLAogICAgICB0eXBlOiAiZWlwMjkzMCIKICAgIH07CiAgICBpZiAoaXNIZXgodG8pICYmIHRvICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi50byA9IHRvOwogICAgaWYgKGlzSGV4KGdhcykgJiYgZ2FzICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5nYXMgPSBoZXhUb0JpZ0ludChnYXMpOwogICAgaWYgKGlzSGV4KGRhdGEpICYmIGRhdGEgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmRhdGEgPSBkYXRhOwogICAgaWYgKGlzSGV4KG5vbmNlKSAmJiBub25jZSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24ubm9uY2UgPSBoZXhUb051bWJlcihub25jZSk7CiAgICBpZiAoaXNIZXgodmFsdWUpICYmIHZhbHVlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi52YWx1ZSA9IGhleFRvQmlnSW50KHZhbHVlKTsKICAgIGlmIChpc0hleChnYXNQcmljZSkgJiYgZ2FzUHJpY2UgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhc1ByaWNlID0gaGV4VG9CaWdJbnQoZ2FzUHJpY2UpOwogICAgaWYgKGFjY2Vzc0xpc3QubGVuZ3RoICE9PSAwICYmIGFjY2Vzc0xpc3QgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmFjY2Vzc0xpc3QgPSBwYXJzZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDI5MzAodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDExID8gcGFyc2VFSVAxNTVTaWduYXR1cmUodHJhbnNhY3Rpb25BcnJheSkgOiB2b2lkIDA7CiAgICByZXR1cm4geyAuLi5zaWduYXR1cmUsIC4uLnRyYW5zYWN0aW9uIH07CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25MZWdhY3koc2VyaWFsaXplZFRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCB0cmFuc2FjdGlvbkFycmF5ID0gZnJvbVJscChzZXJpYWxpemVkVHJhbnNhY3Rpb24sICJoZXgiKTsKICAgIGNvbnN0IFtub25jZSwgZ2FzUHJpY2UsIGdhcywgdG8sIHZhbHVlLCBkYXRhLCBjaGFpbklkT3JWXywgciwgc10gPSB0cmFuc2FjdGlvbkFycmF5OwogICAgaWYgKCEodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDYgfHwgdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDkpKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yKHsKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBub25jZSwKICAgICAgICAgIGdhc1ByaWNlLAogICAgICAgICAgZ2FzLAogICAgICAgICAgdG8sCiAgICAgICAgICB2YWx1ZSwKICAgICAgICAgIGRhdGEsCiAgICAgICAgICAuLi50cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA+IDYgPyB7CiAgICAgICAgICAgIHY6IGNoYWluSWRPclZfLAogICAgICAgICAgICByLAogICAgICAgICAgICBzCiAgICAgICAgICB9IDoge30KICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0eXBlOiAibGVnYWN5IgogICAgICB9KTsKICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gewogICAgICB0eXBlOiAibGVnYWN5IgogICAgfTsKICAgIGlmIChpc0hleCh0bykgJiYgdG8gIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnRvID0gdG87CiAgICBpZiAoaXNIZXgoZ2FzKSAmJiBnYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhcyA9IGhleFRvQmlnSW50KGdhcyk7CiAgICBpZiAoaXNIZXgoZGF0YSkgJiYgZGF0YSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZGF0YSA9IGRhdGE7CiAgICBpZiAoaXNIZXgobm9uY2UpICYmIG5vbmNlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5ub25jZSA9IGhleFRvTnVtYmVyKG5vbmNlKTsKICAgIGlmIChpc0hleCh2YWx1ZSkgJiYgdmFsdWUgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnZhbHVlID0gaGV4VG9CaWdJbnQodmFsdWUpOwogICAgaWYgKGlzSGV4KGdhc1ByaWNlKSAmJiBnYXNQcmljZSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZ2FzUHJpY2UgPSBoZXhUb0JpZ0ludChnYXNQcmljZSk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSh0cmFuc2FjdGlvbik7CiAgICBpZiAodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDYpCiAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgIGNvbnN0IGNoYWluSWRPclYgPSBpc0hleChjaGFpbklkT3JWXykgJiYgY2hhaW5JZE9yVl8gIT09ICIweCIgPyBoZXhUb0JpZ0ludChjaGFpbklkT3JWXykgOiAwbjsKICAgIGlmIChzID09PSAiMHgiICYmIHIgPT09ICIweCIpIHsKICAgICAgaWYgKGNoYWluSWRPclYgPiAwKQogICAgICAgIHRyYW5zYWN0aW9uLmNoYWluSWQgPSBOdW1iZXIoY2hhaW5JZE9yVik7CiAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgIH0KICAgIGNvbnN0IHYgPSBjaGFpbklkT3JWOwogICAgY29uc3QgY2hhaW5JZCA9IE51bWJlcigodiAtIDM1bikgLyAybik7CiAgICBpZiAoY2hhaW5JZCA+IDApCiAgICAgIHRyYW5zYWN0aW9uLmNoYWluSWQgPSBjaGFpbklkOwogICAgZWxzZSBpZiAodiAhPT0gMjduICYmIHYgIT09IDI4bikKICAgICAgdGhyb3cgbmV3IEludmFsaWRMZWdhY3lWRXJyb3IoeyB2IH0pOwogICAgdHJhbnNhY3Rpb24udiA9IHY7CiAgICB0cmFuc2FjdGlvbi5zID0gczsKICAgIHRyYW5zYWN0aW9uLnIgPSByOwogICAgdHJhbnNhY3Rpb24ueVBhcml0eSA9IHYgJSAybiA9PT0gMG4gPyAxIDogMDsKICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICB9CiAgZnVuY3Rpb24gdG9UcmFuc2FjdGlvbkFycmF5KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgcmV0dXJuIGZyb21SbHAoYDB4JHtzZXJpYWxpemVkVHJhbnNhY3Rpb24uc2xpY2UoNCl9YCwgImhleCIpOwogIH0KICBmdW5jdGlvbiBwYXJzZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdF8pIHsKICAgIGNvbnN0IGFjY2Vzc0xpc3QgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWNjZXNzTGlzdF8ubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgW2FkZHJlc3MsIHN0b3JhZ2VLZXlzXSA9IGFjY2Vzc0xpc3RfW2ldOwogICAgICBpZiAoIWlzQWRkcmVzcyhhZGRyZXNzLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzIH0pOwogICAgICBhY2Nlc3NMaXN0LnB1c2goewogICAgICAgIGFkZHJlc3MsCiAgICAgICAgc3RvcmFnZUtleXM6IHN0b3JhZ2VLZXlzLm1hcCgoa2V5KSA9PiBpc0hhc2goa2V5KSA/IGtleSA6IHRyaW0oa2V5KSkKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gYWNjZXNzTGlzdDsKICB9CiAgZnVuY3Rpb24gcGFyc2VBdXRob3JpemF0aW9uTGlzdChzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3QpIHsKICAgIGNvbnN0IGF1dGhvcml6YXRpb25MaXN0ID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcmlhbGl6ZWRBdXRob3JpemF0aW9uTGlzdC5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBbY2hhaW5JZCwgY29udHJhY3RBZGRyZXNzLCBub25jZSwgeVBhcml0eSwgciwgc10gPSBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3RbaV07CiAgICAgIGF1dGhvcml6YXRpb25MaXN0LnB1c2goewogICAgICAgIGNoYWluSWQ6IGhleFRvTnVtYmVyKGNoYWluSWQpLAogICAgICAgIGNvbnRyYWN0QWRkcmVzcywKICAgICAgICBub25jZTogaGV4VG9OdW1iZXIobm9uY2UpLAogICAgICAgIC4uLnBhcnNlRUlQMTU1U2lnbmF0dXJlKFt5UGFyaXR5LCByLCBzXSkKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gYXV0aG9yaXphdGlvbkxpc3Q7CiAgfQogIGZ1bmN0aW9uIHBhcnNlRUlQMTU1U2lnbmF0dXJlKHRyYW5zYWN0aW9uQXJyYXkpIHsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRyYW5zYWN0aW9uQXJyYXkuc2xpY2UoLTMpOwogICAgY29uc3QgdiA9IHNpZ25hdHVyZVswXSA9PT0gIjB4IiB8fCBoZXhUb0JpZ0ludChzaWduYXR1cmVbMF0pID09PSAwbiA/IDI3biA6IDI4bjsKICAgIHJldHVybiB7CiAgICAgIHI6IHBhZEhleChzaWduYXR1cmVbMV0sIHsgc2l6ZTogMzIgfSksCiAgICAgIHM6IHBhZEhleChzaWduYXR1cmVbMl0sIHsgc2l6ZTogMzIgfSksCiAgICAgIHYsCiAgICAgIHlQYXJpdHk6IHYgPT09IDI3biA/IDAgOiAxCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9zZXJpYWxpemVUcmFuc2FjdGlvbi5qcwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdHJpbSgpOwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9leHBlcmltZW50YWwvZWlwNzcwMi91dGlscy9zZXJpYWxpemVBdXRob3JpemF0aW9uTGlzdC5qcwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBzZXJpYWxpemVBdXRob3JpemF0aW9uTGlzdChhdXRob3JpemF0aW9uTGlzdCkgewogICAgaWYgKCFhdXRob3JpemF0aW9uTGlzdCB8fCBhdXRob3JpemF0aW9uTGlzdC5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiBbXTsKICAgIGNvbnN0IHNlcmlhbGl6ZWRBdXRob3JpemF0aW9uTGlzdCA9IFtdOwogICAgZm9yIChjb25zdCBhdXRob3JpemF0aW9uIG9mIGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICAgIGNvbnN0IHsgY29udHJhY3RBZGRyZXNzLCBjaGFpbklkLCBub25jZSwgLi4uc2lnbmF0dXJlIH0gPSBhdXRob3JpemF0aW9uOwogICAgICBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3QucHVzaChbCiAgICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgICAgY29udHJhY3RBZGRyZXNzLAogICAgICAgIHRvSGV4KG5vbmNlKSwKICAgICAgICAuLi50b1lQYXJpdHlTaWduYXR1cmVBcnJheSh7fSwgc2lnbmF0dXJlKQogICAgICBdKTsKICAgIH0KICAgIHJldHVybiBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL3NlcmlhbGl6ZUFjY2Vzc0xpc3QuanMKICBpbml0X2FkZHJlc3MoKTsKICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBmdW5jdGlvbiBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpIHsKICAgIGlmICghYWNjZXNzTGlzdCB8fCBhY2Nlc3NMaXN0Lmxlbmd0aCA9PT0gMCkKICAgICAgcmV0dXJuIFtdOwogICAgY29uc3Qgc2VyaWFsaXplZEFjY2Vzc0xpc3QgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWNjZXNzTGlzdC5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCB7IGFkZHJlc3MsIHN0b3JhZ2VLZXlzIH0gPSBhY2Nlc3NMaXN0W2ldOwogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHN0b3JhZ2VLZXlzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgaWYgKHN0b3JhZ2VLZXlzW2pdLmxlbmd0aCAtIDIgIT09IDY0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IoeyBzdG9yYWdlS2V5OiBzdG9yYWdlS2V5c1tqXSB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFpc0FkZHJlc3MoYWRkcmVzcywgeyBzdHJpY3Q6IGZhbHNlIH0pKSB7CiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzIH0pOwogICAgICB9CiAgICAgIHNlcmlhbGl6ZWRBY2Nlc3NMaXN0LnB1c2goW2FkZHJlc3MsIHN0b3JhZ2VLZXlzXSk7CiAgICB9CiAgICByZXR1cm4gc2VyaWFsaXplZEFjY2Vzc0xpc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL3NlcmlhbGl6ZVRyYW5zYWN0aW9uLmpzCiAgZnVuY3Rpb24gc2VyaWFsaXplVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgdHlwZSA9IGdldFRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvbik7CiAgICBpZiAodHlwZSA9PT0gImVpcDE1NTkiKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVAxNTU5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogICAgaWYgKHR5cGUgPT09ICJlaXAyOTMwIikKICAgICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uRUlQMjkzMCh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKTsKICAgIGlmICh0eXBlID09PSAiZWlwNDg0NCIpCiAgICAgIHJldHVybiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDQ4NDQodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSk7CiAgICBpZiAodHlwZSA9PT0gImVpcDc3MDIiKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVA3NzAyKHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uTGVnYWN5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogIH0KICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDc3MDIodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgeyBhdXRob3JpemF0aW9uTGlzdCwgY2hhaW5JZCwgZ2FzLCBub25jZSwgdG8sIHZhbHVlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBhY2Nlc3NMaXN0LCBkYXRhIH0gPSB0cmFuc2FjdGlvbjsKICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQNzcwMih0cmFuc2FjdGlvbik7CiAgICBjb25zdCBzZXJpYWxpemVkQWNjZXNzTGlzdCA9IHNlcmlhbGl6ZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBjb25zdCBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3QgPSBzZXJpYWxpemVBdXRob3JpemF0aW9uTGlzdChhdXRob3JpemF0aW9uTGlzdCk7CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4MDQiLAogICAgICB0b1JscChbCiAgICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgICAgbm9uY2UgPyB0b0hleChub25jZSkgOiAiMHgiLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzID8gdG9IZXgobWF4UHJpb3JpdHlGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgICBtYXhGZWVQZXJHYXMgPyB0b0hleChtYXhGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgICB0byA/PyAiMHgiLAogICAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgICBkYXRhID8/ICIweCIsCiAgICAgICAgc2VyaWFsaXplZEFjY2Vzc0xpc3QsCiAgICAgICAgc2VyaWFsaXplZEF1dGhvcml6YXRpb25MaXN0LAogICAgICAgIC4uLnRvWVBhcml0eVNpZ25hdHVyZUFycmF5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpCiAgICAgIF0pCiAgICBdKTsKICB9CiAgZnVuY3Rpb24gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVA0ODQ0KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpIHsKICAgIGNvbnN0IHsgY2hhaW5JZCwgZ2FzLCBub25jZSwgdG8sIHZhbHVlLCBtYXhGZWVQZXJCbG9iR2FzLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBhY2Nlc3NMaXN0LCBkYXRhIH0gPSB0cmFuc2FjdGlvbjsKICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQNDg0NCh0cmFuc2FjdGlvbik7CiAgICBsZXQgYmxvYlZlcnNpb25lZEhhc2hlcyA9IHRyYW5zYWN0aW9uLmJsb2JWZXJzaW9uZWRIYXNoZXM7CiAgICBsZXQgc2lkZWNhcnMgPSB0cmFuc2FjdGlvbi5zaWRlY2FyczsKICAgIGlmICh0cmFuc2FjdGlvbi5ibG9icyAmJiAodHlwZW9mIGJsb2JWZXJzaW9uZWRIYXNoZXMgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiBzaWRlY2FycyA9PT0gInVuZGVmaW5lZCIpKSB7CiAgICAgIGNvbnN0IGJsb2JzMiA9IHR5cGVvZiB0cmFuc2FjdGlvbi5ibG9ic1swXSA9PT0gInN0cmluZyIgPyB0cmFuc2FjdGlvbi5ibG9icyA6IHRyYW5zYWN0aW9uLmJsb2JzLm1hcCgoeCkgPT4gYnl0ZXNUb0hleCh4KSk7CiAgICAgIGNvbnN0IGt6ZyA9IHRyYW5zYWN0aW9uLmt6ZzsKICAgICAgY29uc3QgY29tbWl0bWVudHMyID0gYmxvYnNUb0NvbW1pdG1lbnRzKHsKICAgICAgICBibG9iczogYmxvYnMyLAogICAgICAgIGt6ZwogICAgICB9KTsKICAgICAgaWYgKHR5cGVvZiBibG9iVmVyc2lvbmVkSGFzaGVzID09PSAidW5kZWZpbmVkIikKICAgICAgICBibG9iVmVyc2lvbmVkSGFzaGVzID0gY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlcyh7CiAgICAgICAgICBjb21taXRtZW50czogY29tbWl0bWVudHMyCiAgICAgICAgfSk7CiAgICAgIGlmICh0eXBlb2Ygc2lkZWNhcnMgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgY29uc3QgcHJvb2ZzMiA9IGJsb2JzVG9Qcm9vZnMoeyBibG9iczogYmxvYnMyLCBjb21taXRtZW50czogY29tbWl0bWVudHMyLCBremcgfSk7CiAgICAgICAgc2lkZWNhcnMgPSB0b0Jsb2JTaWRlY2Fycyh7IGJsb2JzOiBibG9iczIsIGNvbW1pdG1lbnRzOiBjb21taXRtZW50czIsIHByb29mczogcHJvb2ZzMiB9KTsKICAgICAgfQogICAgfQogICAgY29uc3Qgc2VyaWFsaXplZEFjY2Vzc0xpc3QgPSBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpOwogICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICB0b0hleChjaGFpbklkKSwKICAgICAgbm9uY2UgPyB0b0hleChub25jZSkgOiAiMHgiLAogICAgICBtYXhQcmlvcml0eUZlZVBlckdhcyA/IHRvSGV4KG1heFByaW9yaXR5RmVlUGVyR2FzKSA6ICIweCIsCiAgICAgIG1heEZlZVBlckdhcyA/IHRvSGV4KG1heEZlZVBlckdhcykgOiAiMHgiLAogICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgdG8gPz8gIjB4IiwKICAgICAgdmFsdWUgPyB0b0hleCh2YWx1ZSkgOiAiMHgiLAogICAgICBkYXRhID8/ICIweCIsCiAgICAgIHNlcmlhbGl6ZWRBY2Nlc3NMaXN0LAogICAgICBtYXhGZWVQZXJCbG9iR2FzID8gdG9IZXgobWF4RmVlUGVyQmxvYkdhcykgOiAiMHgiLAogICAgICBibG9iVmVyc2lvbmVkSGFzaGVzID8/IFtdLAogICAgICAuLi50b1lQYXJpdHlTaWduYXR1cmVBcnJheSh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKQogICAgXTsKICAgIGNvbnN0IGJsb2JzID0gW107CiAgICBjb25zdCBjb21taXRtZW50cyA9IFtdOwogICAgY29uc3QgcHJvb2ZzID0gW107CiAgICBpZiAoc2lkZWNhcnMpCiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2lkZWNhcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBjb25zdCB7IGJsb2IsIGNvbW1pdG1lbnQsIHByb29mIH0gPSBzaWRlY2Fyc1tpXTsKICAgICAgICBibG9icy5wdXNoKGJsb2IpOwogICAgICAgIGNvbW1pdG1lbnRzLnB1c2goY29tbWl0bWVudCk7CiAgICAgICAgcHJvb2ZzLnB1c2gocHJvb2YpOwogICAgICB9CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4MDMiLAogICAgICBzaWRlY2FycyA/ICgKICAgICAgICAvLyBJZiBzaWRlY2FycyBhcmUgZW5hYmxlZCwgZW52ZWxvcGUgdHVybnMgaW50byBhICJ3cmFwcGVyIjoKICAgICAgICB0b1JscChbc2VyaWFsaXplZFRyYW5zYWN0aW9uLCBibG9icywgY29tbWl0bWVudHMsIHByb29mc10pCiAgICAgICkgOiAoCiAgICAgICAgLy8gSWYgc2lkZWNhcnMgYXJlIGRpc2FibGVkLCBzdGFuZGFyZCBlbnZlbG9wZSBpcyB1c2VkOgogICAgICAgIHRvUmxwKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikKICAgICAgKQogICAgXSk7CiAgfQogIGZ1bmN0aW9uIHNlcmlhbGl6ZVRyYW5zYWN0aW9uRUlQMTU1OSh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKSB7CiAgICBjb25zdCB7IGNoYWluSWQsIGdhcywgbm9uY2UsIHRvLCB2YWx1ZSwgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgYWNjZXNzTGlzdCwgZGF0YSB9ID0gdHJhbnNhY3Rpb247CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDE1NTkodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2VyaWFsaXplZEFjY2Vzc0xpc3QgPSBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpOwogICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICB0b0hleChjaGFpbklkKSwKICAgICAgbm9uY2UgPyB0b0hleChub25jZSkgOiAiMHgiLAogICAgICBtYXhQcmlvcml0eUZlZVBlckdhcyA/IHRvSGV4KG1heFByaW9yaXR5RmVlUGVyR2FzKSA6ICIweCIsCiAgICAgIG1heEZlZVBlckdhcyA/IHRvSGV4KG1heEZlZVBlckdhcykgOiAiMHgiLAogICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgdG8gPz8gIjB4IiwKICAgICAgdmFsdWUgPyB0b0hleCh2YWx1ZSkgOiAiMHgiLAogICAgICBkYXRhID8/ICIweCIsCiAgICAgIHNlcmlhbGl6ZWRBY2Nlc3NMaXN0LAogICAgICAuLi50b1lQYXJpdHlTaWduYXR1cmVBcnJheSh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKQogICAgXTsKICAgIHJldHVybiBjb25jYXRIZXgoWwogICAgICAiMHgwMiIsCiAgICAgIHRvUmxwKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikKICAgIF0pOwogIH0KICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDI5MzAodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgeyBjaGFpbklkLCBnYXMsIGRhdGEsIG5vbmNlLCB0bywgdmFsdWUsIGFjY2Vzc0xpc3QsIGdhc1ByaWNlIH0gPSB0cmFuc2FjdGlvbjsKICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQMjkzMCh0cmFuc2FjdGlvbik7CiAgICBjb25zdCBzZXJpYWxpemVkQWNjZXNzTGlzdCA9IHNlcmlhbGl6ZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBjb25zdCBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBbCiAgICAgIHRvSGV4KGNoYWluSWQpLAogICAgICBub25jZSA/IHRvSGV4KG5vbmNlKSA6ICIweCIsCiAgICAgIGdhc1ByaWNlID8gdG9IZXgoZ2FzUHJpY2UpIDogIjB4IiwKICAgICAgZ2FzID8gdG9IZXgoZ2FzKSA6ICIweCIsCiAgICAgIHRvID8/ICIweCIsCiAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiLAogICAgICBzZXJpYWxpemVkQWNjZXNzTGlzdCwKICAgICAgLi4udG9ZUGFyaXR5U2lnbmF0dXJlQXJyYXkodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkKICAgIF07CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4MDEiLAogICAgICB0b1JscChzZXJpYWxpemVkVHJhbnNhY3Rpb24pCiAgICBdKTsKICB9CiAgZnVuY3Rpb24gc2VyaWFsaXplVHJhbnNhY3Rpb25MZWdhY3kodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgeyBjaGFpbklkID0gMCwgZ2FzLCBkYXRhLCBub25jZSwgdG8sIHZhbHVlLCBnYXNQcmljZSB9ID0gdHJhbnNhY3Rpb247CiAgICBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSh0cmFuc2FjdGlvbik7CiAgICBsZXQgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICBub25jZSA/IHRvSGV4KG5vbmNlKSA6ICIweCIsCiAgICAgIGdhc1ByaWNlID8gdG9IZXgoZ2FzUHJpY2UpIDogIjB4IiwKICAgICAgZ2FzID8gdG9IZXgoZ2FzKSA6ICIweCIsCiAgICAgIHRvID8/ICIweCIsCiAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiCiAgICBdOwogICAgaWYgKHNpZ25hdHVyZSkgewogICAgICBjb25zdCB2ID0gKCgpID0+IHsKICAgICAgICBpZiAoc2lnbmF0dXJlLnYgPj0gMzVuKSB7CiAgICAgICAgICBjb25zdCBpbmZlcnJlZENoYWluSWQgPSAoc2lnbmF0dXJlLnYgLSAzNW4pIC8gMm47CiAgICAgICAgICBpZiAoaW5mZXJyZWRDaGFpbklkID4gMCkKICAgICAgICAgICAgcmV0dXJuIHNpZ25hdHVyZS52OwogICAgICAgICAgcmV0dXJuIDI3biArIChzaWduYXR1cmUudiA9PT0gMzVuID8gMG4gOiAxbik7CiAgICAgICAgfQogICAgICAgIGlmIChjaGFpbklkID4gMCkKICAgICAgICAgIHJldHVybiBCaWdJbnQoY2hhaW5JZCAqIDIpICsgQmlnSW50KDM1biArIHNpZ25hdHVyZS52IC0gMjduKTsKICAgICAgICBjb25zdCB2MiA9IDI3biArIChzaWduYXR1cmUudiA9PT0gMjduID8gMG4gOiAxbik7CiAgICAgICAgaWYgKHNpZ25hdHVyZS52ICE9PSB2MikKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkTGVnYWN5VkVycm9yKHsgdjogc2lnbmF0dXJlLnYgfSk7CiAgICAgICAgcmV0dXJuIHYyOwogICAgICB9KSgpOwogICAgICBjb25zdCByID0gdHJpbShzaWduYXR1cmUucik7CiAgICAgIGNvbnN0IHMgPSB0cmltKHNpZ25hdHVyZS5zKTsKICAgICAgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICAgIC4uLnNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0b0hleCh2KSwKICAgICAgICByID09PSAiMHgwMCIgPyAiMHgiIDogciwKICAgICAgICBzID09PSAiMHgwMCIgPyAiMHgiIDogcwogICAgICBdOwogICAgfSBlbHNlIGlmIChjaGFpbklkID4gMCkgewogICAgICBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBbCiAgICAgICAgLi4uc2VyaWFsaXplZFRyYW5zYWN0aW9uLAogICAgICAgIHRvSGV4KGNoYWluSWQpLAogICAgICAgICIweCIsCiAgICAgICAgIjB4IgogICAgICBdOwogICAgfQogICAgcmV0dXJuIHRvUmxwKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgfQogIGZ1bmN0aW9uIHRvWVBhcml0eVNpZ25hdHVyZUFycmF5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmVfKSB7CiAgICBjb25zdCBzaWduYXR1cmUgPSBzaWduYXR1cmVfID8/IHRyYW5zYWN0aW9uOwogICAgY29uc3QgeyB2LCB5UGFyaXR5IH0gPSBzaWduYXR1cmU7CiAgICBpZiAodHlwZW9mIHNpZ25hdHVyZS5yID09PSAidW5kZWZpbmVkIikKICAgICAgcmV0dXJuIFtdOwogICAgaWYgKHR5cGVvZiBzaWduYXR1cmUucyA9PT0gInVuZGVmaW5lZCIpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICh0eXBlb2YgdiA9PT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIHlQYXJpdHkgPT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gW107CiAgICBjb25zdCByID0gdHJpbShzaWduYXR1cmUucik7CiAgICBjb25zdCBzID0gdHJpbShzaWduYXR1cmUucyk7CiAgICBjb25zdCB5UGFyaXR5XyA9ICgoKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgeVBhcml0eSA9PT0gIm51bWJlciIpCiAgICAgICAgcmV0dXJuIHlQYXJpdHkgPyB0b0hleCgxKSA6ICIweCI7CiAgICAgIGlmICh2ID09PSAwbikKICAgICAgICByZXR1cm4gIjB4IjsKICAgICAgaWYgKHYgPT09IDFuKQogICAgICAgIHJldHVybiB0b0hleCgxKTsKICAgICAgcmV0dXJuIHYgPT09IDI3biA/ICIweCIgOiB0b0hleCgxKTsKICAgIH0pKCk7CiAgICByZXR1cm4gW3lQYXJpdHlfLCByID09PSAiMHgwMCIgPyAiMHgiIDogciwgcyA9PT0gIjB4MDAiID8gIjB4IiA6IHNdOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L3BhcnNlVW5pdHMuanMKICBmdW5jdGlvbiBwYXJzZVVuaXRzKHZhbHVlLCBkZWNpbWFscykgewogICAgbGV0IFtpbnRlZ2VyLCBmcmFjdGlvbiA9ICIwIl0gPSB2YWx1ZS5zcGxpdCgiLiIpOwogICAgY29uc3QgbmVnYXRpdmUgPSBpbnRlZ2VyLnN0YXJ0c1dpdGgoIi0iKTsKICAgIGlmIChuZWdhdGl2ZSkKICAgICAgaW50ZWdlciA9IGludGVnZXIuc2xpY2UoMSk7CiAgICBmcmFjdGlvbiA9IGZyYWN0aW9uLnJlcGxhY2UoLygwKykkLywgIiIpOwogICAgaWYgKGRlY2ltYWxzID09PSAwKSB7CiAgICAgIGlmIChNYXRoLnJvdW5kKE51bWJlcihgLiR7ZnJhY3Rpb259YCkpID09PSAxKQogICAgICAgIGludGVnZXIgPSBgJHtCaWdJbnQoaW50ZWdlcikgKyAxbn1gOwogICAgICBmcmFjdGlvbiA9ICIiOwogICAgfSBlbHNlIGlmIChmcmFjdGlvbi5sZW5ndGggPiBkZWNpbWFscykgewogICAgICBjb25zdCBbbGVmdCwgdW5pdCwgcmlnaHRdID0gWwogICAgICAgIGZyYWN0aW9uLnNsaWNlKDAsIGRlY2ltYWxzIC0gMSksCiAgICAgICAgZnJhY3Rpb24uc2xpY2UoZGVjaW1hbHMgLSAxLCBkZWNpbWFscyksCiAgICAgICAgZnJhY3Rpb24uc2xpY2UoZGVjaW1hbHMpCiAgICAgIF07CiAgICAgIGNvbnN0IHJvdW5kZWQgPSBNYXRoLnJvdW5kKE51bWJlcihgJHt1bml0fS4ke3JpZ2h0fWApKTsKICAgICAgaWYgKHJvdW5kZWQgPiA5KQogICAgICAgIGZyYWN0aW9uID0gYCR7QmlnSW50KGxlZnQpICsgQmlnSW50KDEpfTBgLnBhZFN0YXJ0KGxlZnQubGVuZ3RoICsgMSwgIjAiKTsKICAgICAgZWxzZQogICAgICAgIGZyYWN0aW9uID0gYCR7bGVmdH0ke3JvdW5kZWR9YDsKICAgICAgaWYgKGZyYWN0aW9uLmxlbmd0aCA+IGRlY2ltYWxzKSB7CiAgICAgICAgZnJhY3Rpb24gPSBmcmFjdGlvbi5zbGljZSgxKTsKICAgICAgICBpbnRlZ2VyID0gYCR7QmlnSW50KGludGVnZXIpICsgMW59YDsKICAgICAgfQogICAgICBmcmFjdGlvbiA9IGZyYWN0aW9uLnNsaWNlKDAsIGRlY2ltYWxzKTsKICAgIH0gZWxzZSB7CiAgICAgIGZyYWN0aW9uID0gZnJhY3Rpb24ucGFkRW5kKGRlY2ltYWxzLCAiMCIpOwogICAgfQogICAgcmV0dXJuIEJpZ0ludChgJHtuZWdhdGl2ZSA/ICItIiA6ICIifSR7aW50ZWdlcn0ke2ZyYWN0aW9ufWApOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L3BhcnNlRXRoZXIuanMKICBpbml0X3VuaXQoKTsKICBmdW5jdGlvbiBwYXJzZUV0aGVyKGV0aGVyLCB1bml0ID0gIndlaSIpIHsKICAgIHJldHVybiBwYXJzZVVuaXRzKGV0aGVyLCBldGhlclVuaXRzW3VuaXRdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9wYXJzZUd3ZWkuanMKICBpbml0X3VuaXQoKTsKICBmdW5jdGlvbiBwYXJzZUd3ZWkoZXRoZXIsIHVuaXQgPSAid2VpIikgewogICAgcmV0dXJuIHBhcnNlVW5pdHMoZXRoZXIsIGd3ZWlVbml0c1t1bml0XSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL25vbmNlTWFuYWdlci5qcwogIGluaXRfbHJ1KCk7CiAgZnVuY3Rpb24gY3JlYXRlTm9uY2VNYW5hZ2VyKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgc291cmNlIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgZGVsdGFNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgY29uc3Qgbm9uY2VNYXAgPSBuZXcgTHJ1TWFwKDgxOTIpOwogICAgY29uc3QgcHJvbWlzZU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBjb25zdCBnZXRLZXkgPSAoeyBhZGRyZXNzLCBjaGFpbklkIH0pID0+IGAke2FkZHJlc3N9LiR7Y2hhaW5JZH1gOwogICAgcmV0dXJuIHsKICAgICAgYXN5bmMgY29uc3VtZSh7IGFkZHJlc3MsIGNoYWluSWQsIGNsaWVudCB9KSB7CiAgICAgICAgY29uc3Qga2V5ID0gZ2V0S2V5KHsgYWRkcmVzcywgY2hhaW5JZCB9KTsKICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5nZXQoeyBhZGRyZXNzLCBjaGFpbklkLCBjbGllbnQgfSk7CiAgICAgICAgdGhpcy5pbmNyZW1lbnQoeyBhZGRyZXNzLCBjaGFpbklkIH0pOwogICAgICAgIGNvbnN0IG5vbmNlID0gYXdhaXQgcHJvbWlzZTsKICAgICAgICBhd2FpdCBzb3VyY2Uuc2V0KHsgYWRkcmVzcywgY2hhaW5JZCB9LCBub25jZSk7CiAgICAgICAgbm9uY2VNYXAuc2V0KGtleSwgbm9uY2UpOwogICAgICAgIHJldHVybiBub25jZTsKICAgICAgfSwKICAgICAgYXN5bmMgaW5jcmVtZW50KHsgYWRkcmVzcywgY2hhaW5JZCB9KSB7CiAgICAgICAgY29uc3Qga2V5ID0gZ2V0S2V5KHsgYWRkcmVzcywgY2hhaW5JZCB9KTsKICAgICAgICBjb25zdCBkZWx0YSA9IGRlbHRhTWFwLmdldChrZXkpID8/IDA7CiAgICAgICAgZGVsdGFNYXAuc2V0KGtleSwgZGVsdGEgKyAxKTsKICAgICAgfSwKICAgICAgYXN5bmMgZ2V0KHsgYWRkcmVzcywgY2hhaW5JZCwgY2xpZW50IH0pIHsKICAgICAgICBjb25zdCBrZXkgPSBnZXRLZXkoeyBhZGRyZXNzLCBjaGFpbklkIH0pOwogICAgICAgIGxldCBwcm9taXNlID0gcHJvbWlzZU1hcC5nZXQoa2V5KTsKICAgICAgICBpZiAoIXByb21pc2UpIHsKICAgICAgICAgIHByb21pc2UgPSAoYXN5bmMgKCkgPT4gewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGNvbnN0IG5vbmNlID0gYXdhaXQgc291cmNlLmdldCh7IGFkZHJlc3MsIGNoYWluSWQsIGNsaWVudCB9KTsKICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c05vbmNlID0gbm9uY2VNYXAuZ2V0KGtleSkgPz8gMDsKICAgICAgICAgICAgICBpZiAocHJldmlvdXNOb25jZSA+IDAgJiYgbm9uY2UgPD0gcHJldmlvdXNOb25jZSkKICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c05vbmNlICsgMTsKICAgICAgICAgICAgICBub25jZU1hcC5kZWxldGUoa2V5KTsKICAgICAgICAgICAgICByZXR1cm4gbm9uY2U7CiAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgdGhpcy5yZXNldCh7IGFkZHJlc3MsIGNoYWluSWQgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pKCk7CiAgICAgICAgICBwcm9taXNlTWFwLnNldChrZXksIHByb21pc2UpOwogICAgICAgIH0KICAgICAgICBjb25zdCBkZWx0YSA9IGRlbHRhTWFwLmdldChrZXkpID8/IDA7CiAgICAgICAgcmV0dXJuIGRlbHRhICsgYXdhaXQgcHJvbWlzZTsKICAgICAgfSwKICAgICAgcmVzZXQoeyBhZGRyZXNzLCBjaGFpbklkIH0pIHsKICAgICAgICBjb25zdCBrZXkgPSBnZXRLZXkoeyBhZGRyZXNzLCBjaGFpbklkIH0pOwogICAgICAgIGRlbHRhTWFwLmRlbGV0ZShrZXkpOwogICAgICAgIHByb21pc2VNYXAuZGVsZXRlKGtleSk7CiAgICAgIH0KICAgIH07CiAgfQogIGZ1bmN0aW9uIGpzb25ScGMoKSB7CiAgICByZXR1cm4gewogICAgICBhc3luYyBnZXQocGFyYW1ldGVycykgewogICAgICAgIGNvbnN0IHsgYWRkcmVzcywgY2xpZW50IH0gPSBwYXJhbWV0ZXJzOwogICAgICAgIHJldHVybiBnZXRUcmFuc2FjdGlvbkNvdW50KGNsaWVudCwgewogICAgICAgICAgYWRkcmVzcywKICAgICAgICAgIGJsb2NrVGFnOiAicGVuZGluZyIKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgc2V0KCkgewogICAgICB9CiAgICB9OwogIH0KICB2YXIgbm9uY2VNYW5hZ2VyID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZU5vbmNlTWFuYWdlcih7CiAgICBzb3VyY2U6IGpzb25ScGMoKQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Zvcm1hdHRlcnMvcHJvb2YuanMKICBmdW5jdGlvbiBmb3JtYXRTdG9yYWdlUHJvb2Yoc3RvcmFnZVByb29mKSB7CiAgICByZXR1cm4gc3RvcmFnZVByb29mLm1hcCgocHJvb2YpID0+ICh7CiAgICAgIC4uLnByb29mLAogICAgICB2YWx1ZTogQmlnSW50KHByb29mLnZhbHVlKQogICAgfSkpOwogIH0KICBmdW5jdGlvbiBmb3JtYXRQcm9vZihwcm9vZikgewogICAgcmV0dXJuIHsKICAgICAgLi4ucHJvb2YsCiAgICAgIGJhbGFuY2U6IHByb29mLmJhbGFuY2UgPyBCaWdJbnQocHJvb2YuYmFsYW5jZSkgOiB2b2lkIDAsCiAgICAgIG5vbmNlOiBwcm9vZi5ub25jZSA/IGhleFRvTnVtYmVyKHByb29mLm5vbmNlKSA6IHZvaWQgMCwKICAgICAgc3RvcmFnZVByb29mOiBwcm9vZi5zdG9yYWdlUHJvb2YgPyBmb3JtYXRTdG9yYWdlUHJvb2YocHJvb2Yuc3RvcmFnZVByb29mKSA6IHZvaWQgMAogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0UHJvb2YuanMKICBhc3luYyBmdW5jdGlvbiBnZXRQcm9vZihjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tOdW1iZXIsIGJsb2NrVGFnOiBibG9ja1RhZ18sIHN0b3JhZ2VLZXlzIH0pIHsKICAgIGNvbnN0IGJsb2NrVGFnID0gYmxvY2tUYWdfID8/ICJsYXRlc3QiOwogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciAhPT0gdm9pZCAwID8gbnVtYmVyVG9IZXgoYmxvY2tOdW1iZXIpIDogdm9pZCAwOwogICAgY29uc3QgcHJvb2YgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRQcm9vZiIsCiAgICAgIHBhcmFtczogW2FkZHJlc3MsIHN0b3JhZ2VLZXlzLCBibG9ja051bWJlckhleCB8fCBibG9ja1RhZ10KICAgIH0pOwogICAgcmV0dXJuIGZvcm1hdFByb29mKHByb29mKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0U3RvcmFnZUF0LmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldFN0b3JhZ2VBdChjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tOdW1iZXIsIGJsb2NrVGFnID0gImxhdGVzdCIsIHNsb3QgfSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciAhPT0gdm9pZCAwID8gbnVtYmVyVG9IZXgoYmxvY2tOdW1iZXIpIDogdm9pZCAwOwogICAgY29uc3QgZGF0YSA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2dldFN0b3JhZ2VBdCIsCiAgICAgIHBhcmFtczogW2FkZHJlc3MsIHNsb3QsIGJsb2NrTnVtYmVySGV4IHx8IGJsb2NrVGFnXQogICAgfSk7CiAgICByZXR1cm4gZGF0YTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0VHJhbnNhY3Rpb24uanMKICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uKGNsaWVudCwgeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyLCBibG9ja1RhZzogYmxvY2tUYWdfLCBoYXNoOiBoYXNoMywgaW5kZXg6IGluZGV4MiB9KSB7CiAgICBjb25zdCBibG9ja1RhZyA9IGJsb2NrVGFnXyB8fCAibGF0ZXN0IjsKICAgIGNvbnN0IGJsb2NrTnVtYmVySGV4ID0gYmxvY2tOdW1iZXIgIT09IHZvaWQgMCA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgIGxldCB0cmFuc2FjdGlvbiA9IG51bGw7CiAgICBpZiAoaGFzaDMpIHsKICAgICAgdHJhbnNhY3Rpb24gPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXRoX2dldFRyYW5zYWN0aW9uQnlIYXNoIiwKICAgICAgICBwYXJhbXM6IFtoYXNoM10KICAgICAgfSwgeyBkZWR1cGU6IHRydWUgfSk7CiAgICB9IGVsc2UgaWYgKGJsb2NrSGFzaCkgewogICAgICB0cmFuc2FjdGlvbiA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0VHJhbnNhY3Rpb25CeUJsb2NrSGFzaEFuZEluZGV4IiwKICAgICAgICBwYXJhbXM6IFtibG9ja0hhc2gsIG51bWJlclRvSGV4KGluZGV4MildCiAgICAgIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgfSBlbHNlIGlmIChibG9ja051bWJlckhleCB8fCBibG9ja1RhZykgewogICAgICB0cmFuc2FjdGlvbiA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0VHJhbnNhY3Rpb25CeUJsb2NrTnVtYmVyQW5kSW5kZXgiLAogICAgICAgIHBhcmFtczogW2Jsb2NrTnVtYmVySGV4IHx8IGJsb2NrVGFnLCBudW1iZXJUb0hleChpbmRleDIpXQogICAgICB9LCB7IGRlZHVwZTogQm9vbGVhbihibG9ja051bWJlckhleCkgfSk7CiAgICB9CiAgICBpZiAoIXRyYW5zYWN0aW9uKQogICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25Ob3RGb3VuZEVycm9yKHsKICAgICAgICBibG9ja0hhc2gsCiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgYmxvY2tUYWcsCiAgICAgICAgaGFzaDogaGFzaDMsCiAgICAgICAgaW5kZXg6IGluZGV4MgogICAgICB9KTsKICAgIGNvbnN0IGZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb24/LmZvcm1hdCB8fCBmb3JtYXRUcmFuc2FjdGlvbjsKICAgIHJldHVybiBmb3JtYXQodHJhbnNhY3Rpb24pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRUcmFuc2FjdGlvbkNvbmZpcm1hdGlvbnMuanMKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvbkNvbmZpcm1hdGlvbnMoY2xpZW50LCB7IGhhc2g6IGhhc2gzLCB0cmFuc2FjdGlvblJlY2VpcHQgfSkgewogICAgY29uc3QgW2Jsb2NrTnVtYmVyLCB0cmFuc2FjdGlvbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgIGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrTnVtYmVyLCAiZ2V0QmxvY2tOdW1iZXIiKSh7fSksCiAgICAgIGhhc2gzID8gZ2V0QWN0aW9uKGNsaWVudCwgZ2V0VHJhbnNhY3Rpb24sICJnZXRUcmFuc2FjdGlvbiIpKHsgaGFzaDogaGFzaDMgfSkgOiB2b2lkIDAKICAgIF0pOwogICAgY29uc3QgdHJhbnNhY3Rpb25CbG9ja051bWJlciA9IHRyYW5zYWN0aW9uUmVjZWlwdD8uYmxvY2tOdW1iZXIgfHwgdHJhbnNhY3Rpb24/LmJsb2NrTnVtYmVyOwogICAgaWYgKCF0cmFuc2FjdGlvbkJsb2NrTnVtYmVyKQogICAgICByZXR1cm4gMG47CiAgICByZXR1cm4gYmxvY2tOdW1iZXIgLSB0cmFuc2FjdGlvbkJsb2NrTnVtYmVyICsgMW47CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldFRyYW5zYWN0aW9uUmVjZWlwdC5qcwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvblJlY2VpcHQoY2xpZW50LCB7IGhhc2g6IGhhc2gzIH0pIHsKICAgIGNvbnN0IHJlY2VpcHQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRUcmFuc2FjdGlvblJlY2VpcHQiLAogICAgICBwYXJhbXM6IFtoYXNoM10KICAgIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgaWYgKCFyZWNlaXB0KQogICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25SZWNlaXB0Tm90Rm91bmRFcnJvcih7IGhhc2g6IGhhc2gzIH0pOwogICAgY29uc3QgZm9ybWF0ID0gY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzPy50cmFuc2FjdGlvblJlY2VpcHQ/LmZvcm1hdCB8fCBmb3JtYXRUcmFuc2FjdGlvblJlY2VpcHQ7CiAgICByZXR1cm4gZm9ybWF0KHJlY2VpcHQpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9tdWx0aWNhbGwuanMKICBpbml0X2FiaXMoKTsKICBpbml0X2FiaSgpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY29udHJhY3QoKTsKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2dldENoYWluQ29udHJhY3RBZGRyZXNzKCk7CiAgYXN5bmMgZnVuY3Rpb24gbXVsdGljYWxsKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhbGxvd0ZhaWx1cmUgPSB0cnVlLCBiYXRjaFNpemU6IGJhdGNoU2l6ZV8sIGJsb2NrTnVtYmVyLCBibG9ja1RhZywgbXVsdGljYWxsQWRkcmVzczogbXVsdGljYWxsQWRkcmVzc18sIHN0YXRlT3ZlcnJpZGUgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjb250cmFjdHMyID0gcGFyYW1ldGVycy5jb250cmFjdHM7CiAgICBjb25zdCBiYXRjaFNpemUgPSBiYXRjaFNpemVfID8/ICh0eXBlb2YgY2xpZW50LmJhdGNoPy5tdWx0aWNhbGwgPT09ICJvYmplY3QiICYmIGNsaWVudC5iYXRjaC5tdWx0aWNhbGwuYmF0Y2hTaXplIHx8IDEwMjQpOwogICAgbGV0IG11bHRpY2FsbEFkZHJlc3MgPSBtdWx0aWNhbGxBZGRyZXNzXzsKICAgIGlmICghbXVsdGljYWxsQWRkcmVzcykgewogICAgICBpZiAoIWNsaWVudC5jaGFpbikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNsaWVudCBjaGFpbiBub3QgY29uZmlndXJlZC4gbXVsdGljYWxsQWRkcmVzcyBpcyByZXF1aXJlZC4iKTsKICAgICAgbXVsdGljYWxsQWRkcmVzcyA9IGdldENoYWluQ29udHJhY3RBZGRyZXNzKHsKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBjaGFpbjogY2xpZW50LmNoYWluLAogICAgICAgIGNvbnRyYWN0OiAibXVsdGljYWxsMyIKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBjaHVua2VkQ2FsbHMgPSBbW11dOwogICAgbGV0IGN1cnJlbnRDaHVuayA9IDA7CiAgICBsZXQgY3VycmVudENodW5rU2l6ZSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyYWN0czIubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGZ1bmN0aW9uTmFtZSB9ID0gY29udHJhY3RzMltpXTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBjYWxsRGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7IGFiaTogYWJpMiwgYXJncywgZnVuY3Rpb25OYW1lIH0pOwogICAgICAgIGN1cnJlbnRDaHVua1NpemUgKz0gKGNhbGxEYXRhLmxlbmd0aCAtIDIpIC8gMjsKICAgICAgICBpZiAoCiAgICAgICAgICAvLyBDaGVjayBpZiBiYXRjaGluZyBpcyBlbmFibGVkLgogICAgICAgICAgYmF0Y2hTaXplID4gMCAmJiAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBzaXplIG9mIHRoZSBiYXRjaCBleGNlZWRzIHRoZSBzaXplIGxpbWl0LgogICAgICAgICAgY3VycmVudENodW5rU2l6ZSA+IGJhdGNoU2l6ZSAmJiAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBjaHVuayBpcyBub3QgYWxyZWFkeSBlbXB0eS4KICAgICAgICAgIGNodW5rZWRDYWxsc1tjdXJyZW50Q2h1bmtdLmxlbmd0aCA+IDAKICAgICAgICApIHsKICAgICAgICAgIGN1cnJlbnRDaHVuaysrOwogICAgICAgICAgY3VycmVudENodW5rU2l6ZSA9IChjYWxsRGF0YS5sZW5ndGggLSAyKSAvIDI7CiAgICAgICAgICBjaHVua2VkQ2FsbHNbY3VycmVudENodW5rXSA9IFtdOwogICAgICAgIH0KICAgICAgICBjaHVua2VkQ2FsbHNbY3VycmVudENodW5rXSA9IFsKICAgICAgICAgIC4uLmNodW5rZWRDYWxsc1tjdXJyZW50Q2h1bmtdLAogICAgICAgICAgewogICAgICAgICAgICBhbGxvd0ZhaWx1cmU6IHRydWUsCiAgICAgICAgICAgIGNhbGxEYXRhLAogICAgICAgICAgICB0YXJnZXQ6IGFkZHJlc3MKICAgICAgICAgIH0KICAgICAgICBdOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zdCBlcnJvciA9IGdldENvbnRyYWN0RXJyb3IoZXJyLCB7CiAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgYXJncywKICAgICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3QvbXVsdGljYWxsIiwKICAgICAgICAgIGZ1bmN0aW9uTmFtZQogICAgICAgIH0pOwogICAgICAgIGlmICghYWxsb3dGYWlsdXJlKQogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgY2h1bmtlZENhbGxzW2N1cnJlbnRDaHVua10gPSBbCiAgICAgICAgICAuLi5jaHVua2VkQ2FsbHNbY3VycmVudENodW5rXSwKICAgICAgICAgIHsKICAgICAgICAgICAgYWxsb3dGYWlsdXJlOiB0cnVlLAogICAgICAgICAgICBjYWxsRGF0YTogIjB4IiwKICAgICAgICAgICAgdGFyZ2V0OiBhZGRyZXNzCiAgICAgICAgICB9CiAgICAgICAgXTsKICAgICAgfQogICAgfQogICAgY29uc3QgYWdncmVnYXRlM1Jlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoY2h1bmtlZENhbGxzLm1hcCgoY2FsbHMpID0+IGdldEFjdGlvbihjbGllbnQsIHJlYWRDb250cmFjdCwgInJlYWRDb250cmFjdCIpKHsKICAgICAgYWJpOiBtdWx0aWNhbGwzQWJpLAogICAgICBhZGRyZXNzOiBtdWx0aWNhbGxBZGRyZXNzLAogICAgICBhcmdzOiBbY2FsbHNdLAogICAgICBibG9ja051bWJlciwKICAgICAgYmxvY2tUYWcsCiAgICAgIGZ1bmN0aW9uTmFtZTogImFnZ3JlZ2F0ZTMiLAogICAgICBzdGF0ZU92ZXJyaWRlCiAgICB9KSkpOwogICAgY29uc3QgcmVzdWx0cyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZ2dyZWdhdGUzUmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCByZXN1bHQgPSBhZ2dyZWdhdGUzUmVzdWx0c1tpXTsKICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICJyZWplY3RlZCIpIHsKICAgICAgICBpZiAoIWFsbG93RmFpbHVyZSkKICAgICAgICAgIHRocm93IHJlc3VsdC5yZWFzb247CiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaHVua2VkQ2FsbHNbaV0ubGVuZ3RoOyBqKyspIHsKICAgICAgICAgIHJlc3VsdHMucHVzaCh7CiAgICAgICAgICAgIHN0YXR1czogImZhaWx1cmUiLAogICAgICAgICAgICBlcnJvcjogcmVzdWx0LnJlYXNvbiwKICAgICAgICAgICAgcmVzdWx0OiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBhZ2dyZWdhdGUzUmVzdWx0ID0gcmVzdWx0LnZhbHVlOwogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFnZ3JlZ2F0ZTNSZXN1bHQubGVuZ3RoOyBqKyspIHsKICAgICAgICBjb25zdCB7IHJldHVybkRhdGEsIHN1Y2Nlc3MgfSA9IGFnZ3JlZ2F0ZTNSZXN1bHRbal07CiAgICAgICAgY29uc3QgeyBjYWxsRGF0YSB9ID0gY2h1bmtlZENhbGxzW2ldW2pdOwogICAgICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhZGRyZXNzLCBmdW5jdGlvbk5hbWUsIGFyZ3MgfSA9IGNvbnRyYWN0czJbcmVzdWx0cy5sZW5ndGhdOwogICAgICAgIHRyeSB7CiAgICAgICAgICBpZiAoY2FsbERhdGEgPT09ICIweCIpCiAgICAgICAgICAgIHRocm93IG5ldyBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IoKTsKICAgICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgdGhyb3cgbmV3IFJhd0NvbnRyYWN0RXJyb3IoeyBkYXRhOiByZXR1cm5EYXRhIH0pOwogICAgICAgICAgY29uc3QgcmVzdWx0MiA9IGRlY29kZUZ1bmN0aW9uUmVzdWx0KHsKICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICBhcmdzLAogICAgICAgICAgICBkYXRhOiByZXR1cm5EYXRhLAogICAgICAgICAgICBmdW5jdGlvbk5hbWUKICAgICAgICAgIH0pOwogICAgICAgICAgcmVzdWx0cy5wdXNoKGFsbG93RmFpbHVyZSA/IHsgcmVzdWx0OiByZXN1bHQyLCBzdGF0dXM6ICJzdWNjZXNzIiB9IDogcmVzdWx0Mik7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBjb25zdCBlcnJvciA9IGdldENvbnRyYWN0RXJyb3IoZXJyLCB7CiAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgYWRkcmVzcywKICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9jb250cmFjdC9tdWx0aWNhbGwiLAogICAgICAgICAgICBmdW5jdGlvbk5hbWUKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFhbGxvd0ZhaWx1cmUpCiAgICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgICAgcmVzdWx0cy5wdXNoKHsgZXJyb3IsIHJlc3VsdDogdm9pZCAwLCBzdGF0dXM6ICJmYWlsdXJlIiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChyZXN1bHRzLmxlbmd0aCAhPT0gY29udHJhY3RzMi5sZW5ndGgpCiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJtdWx0aWNhbGwgcmVzdWx0cyBtaXNtYXRjaCIpOwogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3ZlcmlmeUhhc2guanMKICBpbml0X2FiaXMoKTsKICBpbml0X2NvbnRyYWN0cygpOwogIGluaXRfY29udHJhY3QoKTsKICBpbml0X2VuY29kZURlcGxveURhdGEoKTsKICBpbml0X2dldEFkZHJlc3MoKTsKICBpbml0X2lzQWRkcmVzc0VxdWFsKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9pc0J5dGVzRXF1YWwuanMKICBpbml0X3V0aWxzNCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfaXNIZXgoKTsKICBmdW5jdGlvbiBpc0J5dGVzRXF1YWwoYV8sIGJfKSB7CiAgICBjb25zdCBhID0gaXNIZXgoYV8pID8gdG9CeXRlcyhhXykgOiBhXzsKICAgIGNvbnN0IGIgPSBpc0hleChiXykgPyB0b0J5dGVzKGJfKSA6IGJfOwogICAgcmV0dXJuIGVxdWFsQnl0ZXMoYSwgYik7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3ZlcmlmeUhhc2guanMKICBpbml0X2lzSGV4KCk7CiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3NpZ25hdHVyZS9zZXJpYWxpemVTaWduYXR1cmUuanMKICBpbml0X3NlY3AyNTZrMSgpOwogIGluaXRfZnJvbUhleCgpOwogIGluaXRfdG9CeXRlcygpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZVNpZ25hdHVyZSh7IHIsIHMsIHRvID0gImhleCIsIHYsIHlQYXJpdHkgfSkgewogICAgY29uc3QgeVBhcml0eV8gPSAoKCkgPT4gewogICAgICBpZiAoeVBhcml0eSA9PT0gMCB8fCB5UGFyaXR5ID09PSAxKQogICAgICAgIHJldHVybiB5UGFyaXR5OwogICAgICBpZiAodiAmJiAodiA9PT0gMjduIHx8IHYgPT09IDI4biB8fCB2ID49IDM1bikpCiAgICAgICAgcmV0dXJuIHYgJSAybiA9PT0gMG4gPyAxIDogMDsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGB2YCBvciBgeVBhcml0eWAgdmFsdWUiKTsKICAgIH0pKCk7CiAgICBjb25zdCBzaWduYXR1cmUgPSBgMHgke25ldyBzZWNwMjU2azEuU2lnbmF0dXJlKGhleFRvQmlnSW50KHIpLCBoZXhUb0JpZ0ludChzKSkudG9Db21wYWN0SGV4KCl9JHt5UGFyaXR5XyA9PT0gMCA/ICIxYiIgOiAiMWMifWA7CiAgICBpZiAodG8gPT09ICJoZXgiKQogICAgICByZXR1cm4gc2lnbmF0dXJlOwogICAgcmV0dXJuIGhleFRvQnl0ZXMoc2lnbmF0dXJlKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvdmVyaWZ5SGFzaC5qcwogIGluaXRfY2FsbCgpOwogIGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUhhc2gyKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhZGRyZXNzLCBmYWN0b3J5LCBmYWN0b3J5RGF0YSwgaGFzaDogaGFzaDMsIHNpZ25hdHVyZSwgLi4ucmVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZUhleCA9ICgoKSA9PiB7CiAgICAgIGlmIChpc0hleChzaWduYXR1cmUpKQogICAgICAgIHJldHVybiBzaWduYXR1cmU7CiAgICAgIGlmICh0eXBlb2Ygc2lnbmF0dXJlID09PSAib2JqZWN0IiAmJiAiciIgaW4gc2lnbmF0dXJlICYmICJzIiBpbiBzaWduYXR1cmUpCiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVNpZ25hdHVyZShzaWduYXR1cmUpOwogICAgICByZXR1cm4gYnl0ZXNUb0hleChzaWduYXR1cmUpOwogICAgfSkoKTsKICAgIGNvbnN0IHdyYXBwZWRTaWduYXR1cmUgPSBhd2FpdCAoYXN5bmMgKCkgPT4gewogICAgICBpZiAoIWZhY3RvcnkgJiYgIWZhY3RvcnlEYXRhKQogICAgICAgIHJldHVybiBzaWduYXR1cmVIZXg7CiAgICAgIGlmIChpc0VyYzY0OTJTaWduYXR1cmUoc2lnbmF0dXJlSGV4KSkKICAgICAgICByZXR1cm4gc2lnbmF0dXJlSGV4OwogICAgICByZXR1cm4gc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZSh7CiAgICAgICAgYWRkcmVzczogZmFjdG9yeSwKICAgICAgICBkYXRhOiBmYWN0b3J5RGF0YSwKICAgICAgICBzaWduYXR1cmU6IHNpZ25hdHVyZUhleAogICAgICB9KTsKICAgIH0pKCk7CiAgICB0cnkgewogICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGNhbGwsICJjYWxsIikoewogICAgICAgIGRhdGE6IGVuY29kZURlcGxveURhdGEoewogICAgICAgICAgYWJpOiB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JBYmksCiAgICAgICAgICBhcmdzOiBbYWRkcmVzcywgaGFzaDMsIHdyYXBwZWRTaWduYXR1cmVdLAogICAgICAgICAgYnl0ZWNvZGU6IHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckJ5dGVDb2RlCiAgICAgICAgfSksCiAgICAgICAgLi4ucmVzdAogICAgICB9KTsKICAgICAgcmV0dXJuIGlzQnl0ZXNFcXVhbChkYXRhID8/ICIweDAiLCAiMHgxIik7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICB0cnkgewogICAgICAgIGNvbnN0IHZlcmlmaWVkID0gaXNBZGRyZXNzRXF1YWwoZ2V0QWRkcmVzcyhhZGRyZXNzKSwgYXdhaXQgcmVjb3ZlckFkZHJlc3MoeyBoYXNoOiBoYXNoMywgc2lnbmF0dXJlIH0pKTsKICAgICAgICBpZiAodmVyaWZpZWQpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSBjYXRjaCB7CiAgICAgIH0KICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ2FsbEV4ZWN1dGlvbkVycm9yKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHRocm93IGVycm9yOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy92ZXJpZnlNZXNzYWdlLmpzCiAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5TWVzc2FnZTIoY2xpZW50LCB7IGFkZHJlc3MsIG1lc3NhZ2UsIGZhY3RvcnksIGZhY3RvcnlEYXRhLCBzaWduYXR1cmUsIC4uLmNhbGxSZXF1ZXN0IH0pIHsKICAgIGNvbnN0IGhhc2gzID0gaGFzaE1lc3NhZ2UobWVzc2FnZSk7CiAgICByZXR1cm4gdmVyaWZ5SGFzaDIoY2xpZW50LCB7CiAgICAgIGFkZHJlc3MsCiAgICAgIGZhY3RvcnksCiAgICAgIGZhY3RvcnlEYXRhLAogICAgICBoYXNoOiBoYXNoMywKICAgICAgc2lnbmF0dXJlLAogICAgICAuLi5jYWxsUmVxdWVzdAogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3ZlcmlmeVR5cGVkRGF0YS5qcwogIGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVR5cGVkRGF0YTIoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGZhY3RvcnksIGZhY3RvcnlEYXRhLCBzaWduYXR1cmUsIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcywgZG9tYWluLCAuLi5jYWxsUmVxdWVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGhhc2gzID0gaGFzaFR5cGVkRGF0YSh7IG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcywgZG9tYWluIH0pOwogICAgcmV0dXJuIHZlcmlmeUhhc2gyKGNsaWVudCwgewogICAgICBhZGRyZXNzLAogICAgICBmYWN0b3J5LAogICAgICBmYWN0b3J5RGF0YSwKICAgICAgaGFzaDogaGFzaDMsCiAgICAgIHNpZ25hdHVyZSwKICAgICAgLi4uY2FsbFJlcXVlc3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy93YWl0Rm9yVHJhbnNhY3Rpb25SZWNlaXB0LmpzCiAgaW5pdF90cmFuc2FjdGlvbigpOwogIGluaXRfc3RyaW5naWZ5KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvd2F0Y2hCbG9ja051bWJlci5qcwogIGluaXRfZnJvbUhleCgpOwogIGluaXRfc3RyaW5naWZ5KCk7CiAgZnVuY3Rpb24gd2F0Y2hCbG9ja051bWJlcihjbGllbnQsIHsgZW1pdE9uQmVnaW4gPSBmYWxzZSwgZW1pdE1pc3NlZCA9IGZhbHNlLCBvbkJsb2NrTnVtYmVyLCBvbkVycm9yLCBwb2xsOiBwb2xsXywgcG9sbGluZ0ludGVydmFsID0gY2xpZW50LnBvbGxpbmdJbnRlcnZhbCB9KSB7CiAgICBjb25zdCBlbmFibGVQb2xsaW5nID0gKCgpID0+IHsKICAgICAgaWYgKHR5cGVvZiBwb2xsXyAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgcmV0dXJuIHBvbGxfOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAid2ViU29ja2V0IikKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIgJiYgY2xpZW50LnRyYW5zcG9ydC50cmFuc3BvcnRzWzBdLmNvbmZpZy50eXBlID09PSAid2ViU29ja2V0IikKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSkoKTsKICAgIGxldCBwcmV2QmxvY2tOdW1iZXI7CiAgICBjb25zdCBwb2xsQmxvY2tOdW1iZXIgPSAoKSA9PiB7CiAgICAgIGNvbnN0IG9ic2VydmVySWQgPSBzdHJpbmdpZnkoWwogICAgICAgICJ3YXRjaEJsb2NrTnVtYmVyIiwKICAgICAgICBjbGllbnQudWlkLAogICAgICAgIGVtaXRPbkJlZ2luLAogICAgICAgIGVtaXRNaXNzZWQsCiAgICAgICAgcG9sbGluZ0ludGVydmFsCiAgICAgIF0pOwogICAgICByZXR1cm4gb2JzZXJ2ZShvYnNlcnZlcklkLCB7IG9uQmxvY2tOdW1iZXIsIG9uRXJyb3IgfSwgKGVtaXQpID0+IHBvbGwoYXN5bmMgKCkgPT4gewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBibG9ja051bWJlciA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrTnVtYmVyLCAiZ2V0QmxvY2tOdW1iZXIiKSh7IGNhY2hlVGltZTogMCB9KTsKICAgICAgICAgIGlmIChwcmV2QmxvY2tOdW1iZXIpIHsKICAgICAgICAgICAgaWYgKGJsb2NrTnVtYmVyID09PSBwcmV2QmxvY2tOdW1iZXIpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoYmxvY2tOdW1iZXIgLSBwcmV2QmxvY2tOdW1iZXIgPiAxICYmIGVtaXRNaXNzZWQpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBpID0gcHJldkJsb2NrTnVtYmVyICsgMW47IGkgPCBibG9ja051bWJlcjsgaSsrKSB7CiAgICAgICAgICAgICAgICBlbWl0Lm9uQmxvY2tOdW1iZXIoaSwgcHJldkJsb2NrTnVtYmVyKTsKICAgICAgICAgICAgICAgIHByZXZCbG9ja051bWJlciA9IGk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXByZXZCbG9ja051bWJlciB8fCBibG9ja051bWJlciA+IHByZXZCbG9ja051bWJlcikgewogICAgICAgICAgICBlbWl0Lm9uQmxvY2tOdW1iZXIoYmxvY2tOdW1iZXIsIHByZXZCbG9ja051bWJlcik7CiAgICAgICAgICAgIHByZXZCbG9ja051bWJlciA9IGJsb2NrTnVtYmVyOwogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgZW1pdC5vbkVycm9yPy4oZXJyKTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBlbWl0T25CZWdpbiwKICAgICAgICBpbnRlcnZhbDogcG9sbGluZ0ludGVydmFsCiAgICAgIH0pKTsKICAgIH07CiAgICBjb25zdCBzdWJzY3JpYmVCbG9ja051bWJlciA9ICgpID0+IHsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoQmxvY2tOdW1iZXIiLAogICAgICAgIGNsaWVudC51aWQsCiAgICAgICAgZW1pdE9uQmVnaW4sCiAgICAgICAgZW1pdE1pc3NlZAogICAgICBdKTsKICAgICAgcmV0dXJuIG9ic2VydmUob2JzZXJ2ZXJJZCwgeyBvbkJsb2NrTnVtYmVyLCBvbkVycm9yIH0sIChlbWl0KSA9PiB7CiAgICAgICAgbGV0IGFjdGl2ZSA9IHRydWU7CiAgICAgICAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydCA9ICgoKSA9PiB7CiAgICAgICAgICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gImZhbGxiYWNrIikgewogICAgICAgICAgICAgICAgY29uc3QgdHJhbnNwb3J0MiA9IGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0cy5maW5kKCh0cmFuc3BvcnQzKSA9PiB0cmFuc3BvcnQzLmNvbmZpZy50eXBlID09PSAid2ViU29ja2V0Iik7CiAgICAgICAgICAgICAgICBpZiAoIXRyYW5zcG9ydDIpCiAgICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zcG9ydDIudmFsdWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgICB9KSgpOwogICAgICAgICAgICBjb25zdCB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZV8gfSA9IGF3YWl0IHRyYW5zcG9ydC5zdWJzY3JpYmUoewogICAgICAgICAgICAgIHBhcmFtczogWyJuZXdIZWFkcyJdLAogICAgICAgICAgICAgIG9uRGF0YShkYXRhKSB7CiAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgY29uc3QgYmxvY2tOdW1iZXIgPSBoZXhUb0JpZ0ludChkYXRhLnJlc3VsdD8ubnVtYmVyKTsKICAgICAgICAgICAgICAgIGVtaXQub25CbG9ja051bWJlcihibG9ja051bWJlciwgcHJldkJsb2NrTnVtYmVyKTsKICAgICAgICAgICAgICAgIHByZXZCbG9ja051bWJlciA9IGJsb2NrTnVtYmVyOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgb25FcnJvcihlcnJvcikgewogICAgICAgICAgICAgICAgZW1pdC5vbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgICB1bnN1YnNjcmliZSgpOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIG9uRXJyb3I/LihlcnIpOwogICAgICAgICAgfQogICAgICAgIH0pKCk7CiAgICAgICAgcmV0dXJuICgpID0+IHVuc3Vic2NyaWJlKCk7CiAgICAgIH0pOwogICAgfTsKICAgIHJldHVybiBlbmFibGVQb2xsaW5nID8gcG9sbEJsb2NrTnVtYmVyKCkgOiBzdWJzY3JpYmVCbG9ja051bWJlcigpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy93YWl0Rm9yVHJhbnNhY3Rpb25SZWNlaXB0LmpzCiAgYXN5bmMgZnVuY3Rpb24gd2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdChjbGllbnQsIHsKICAgIGNvbmZpcm1hdGlvbnMgPSAxLAogICAgaGFzaDogaGFzaDMsCiAgICBvblJlcGxhY2VkLAogICAgcG9sbGluZ0ludGVydmFsID0gY2xpZW50LnBvbGxpbmdJbnRlcnZhbCwKICAgIHJldHJ5Q291bnQgPSA2LAogICAgcmV0cnlEZWxheSA9ICh7IGNvdW50IH0pID0+IH5+KDEgPDwgY291bnQpICogMjAwLAogICAgLy8gZXhwb25lbnRpYWwgYmFja29mZgogICAgdGltZW91dAogIH0pIHsKICAgIGNvbnN0IG9ic2VydmVySWQgPSBzdHJpbmdpZnkoWyJ3YWl0Rm9yVHJhbnNhY3Rpb25SZWNlaXB0IiwgY2xpZW50LnVpZCwgaGFzaDNdKTsKICAgIGxldCBjb3VudCA9IDA7CiAgICBsZXQgdHJhbnNhY3Rpb247CiAgICBsZXQgcmVwbGFjZWRUcmFuc2FjdGlvbjsKICAgIGxldCByZWNlaXB0OwogICAgbGV0IHJldHJ5aW5nID0gZmFsc2U7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICBpZiAodGltZW91dCkKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvcih7IGhhc2g6IGhhc2gzIH0pKSwgdGltZW91dCk7CiAgICAgIGNvbnN0IF91bm9ic2VydmUgPSBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25SZXBsYWNlZCwgcmVzb2x2ZSwgcmVqZWN0IH0sIChlbWl0KSA9PiB7CiAgICAgICAgY29uc3QgX3Vud2F0Y2ggPSBnZXRBY3Rpb24oY2xpZW50LCB3YXRjaEJsb2NrTnVtYmVyLCAid2F0Y2hCbG9ja051bWJlciIpKHsKICAgICAgICAgIGVtaXRNaXNzZWQ6IHRydWUsCiAgICAgICAgICBlbWl0T25CZWdpbjogdHJ1ZSwKICAgICAgICAgIHBvbGw6IHRydWUsCiAgICAgICAgICBwb2xsaW5nSW50ZXJ2YWwsCiAgICAgICAgICBhc3luYyBvbkJsb2NrTnVtYmVyKGJsb2NrTnVtYmVyXykgewogICAgICAgICAgICBjb25zdCBkb25lID0gKGZuKSA9PiB7CiAgICAgICAgICAgICAgX3Vud2F0Y2goKTsKICAgICAgICAgICAgICBmbigpOwogICAgICAgICAgICAgIF91bm9ic2VydmUoKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgbGV0IGJsb2NrTnVtYmVyID0gYmxvY2tOdW1iZXJfOwogICAgICAgICAgICBpZiAocmV0cnlpbmcpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoY291bnQgPiByZXRyeUNvdW50KQogICAgICAgICAgICAgIGRvbmUoKCkgPT4gZW1pdC5yZWplY3QobmV3IFdhaXRGb3JUcmFuc2FjdGlvblJlY2VpcHRUaW1lb3V0RXJyb3IoeyBoYXNoOiBoYXNoMyB9KSkpOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGlmIChyZWNlaXB0KSB7CiAgICAgICAgICAgICAgICBpZiAoY29uZmlybWF0aW9ucyA+IDEgJiYgKCFyZWNlaXB0LmJsb2NrTnVtYmVyIHx8IGJsb2NrTnVtYmVyIC0gcmVjZWlwdC5ibG9ja051bWJlciArIDFuIDwgY29uZmlybWF0aW9ucykpCiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGRvbmUoKCkgPT4gZW1pdC5yZXNvbHZlKHJlY2VpcHQpKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbikgewogICAgICAgICAgICAgICAgcmV0cnlpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgYXdhaXQgd2l0aFJldHJ5KGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24gPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRUcmFuc2FjdGlvbiwgImdldFRyYW5zYWN0aW9uIikoeyBoYXNoOiBoYXNoMyB9KTsKICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zYWN0aW9uLmJsb2NrTnVtYmVyKQogICAgICAgICAgICAgICAgICAgIGJsb2NrTnVtYmVyID0gdHJhbnNhY3Rpb24uYmxvY2tOdW1iZXI7CiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgIGRlbGF5OiByZXRyeURlbGF5LAogICAgICAgICAgICAgICAgICByZXRyeUNvdW50CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHJ5aW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJlY2VpcHQgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRUcmFuc2FjdGlvblJlY2VpcHQsICJnZXRUcmFuc2FjdGlvblJlY2VpcHQiKSh7IGhhc2g6IGhhc2gzIH0pOwogICAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25zID4gMSAmJiAoIXJlY2VpcHQuYmxvY2tOdW1iZXIgfHwgYmxvY2tOdW1iZXIgLSByZWNlaXB0LmJsb2NrTnVtYmVyICsgMW4gPCBjb25maXJtYXRpb25zKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICBkb25lKCgpID0+IGVtaXQucmVzb2x2ZShyZWNlaXB0KSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUcmFuc2FjdGlvbk5vdEZvdW5kRXJyb3IgfHwgZXJyIGluc3RhbmNlb2YgVHJhbnNhY3Rpb25SZWNlaXB0Tm90Rm91bmRFcnJvcikgewogICAgICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbikgewogICAgICAgICAgICAgICAgICByZXRyeWluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICByZXBsYWNlZFRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247CiAgICAgICAgICAgICAgICAgIHJldHJ5aW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBhd2FpdCB3aXRoUmV0cnkoKCkgPT4gZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2ssICJnZXRCbG9jayIpKHsKICAgICAgICAgICAgICAgICAgICBibG9ja051bWJlciwKICAgICAgICAgICAgICAgICAgICBpbmNsdWRlVHJhbnNhY3Rpb25zOiB0cnVlCiAgICAgICAgICAgICAgICAgIH0pLCB7CiAgICAgICAgICAgICAgICAgICAgZGVsYXk6IHJldHJ5RGVsYXksCiAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudCwKICAgICAgICAgICAgICAgICAgICBzaG91bGRSZXRyeTogKHsgZXJyb3IgfSkgPT4gZXJyb3IgaW5zdGFuY2VvZiBCbG9ja05vdEZvdW5kRXJyb3IKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIHJldHJ5aW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50VHJhbnNhY3Rpb24gPSBibG9jay50cmFuc2FjdGlvbnMuZmluZCgoeyBmcm9tLCBub25jZSB9KSA9PiBmcm9tID09PSByZXBsYWNlZFRyYW5zYWN0aW9uLmZyb20gJiYgbm9uY2UgPT09IHJlcGxhY2VkVHJhbnNhY3Rpb24ubm9uY2UpOwogICAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2VtZW50VHJhbnNhY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICByZWNlaXB0ID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0VHJhbnNhY3Rpb25SZWNlaXB0LCAiZ2V0VHJhbnNhY3Rpb25SZWNlaXB0IikoewogICAgICAgICAgICAgICAgICAgIGhhc2g6IHJlcGxhY2VtZW50VHJhbnNhY3Rpb24uaGFzaAogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbnMgPiAxICYmICghcmVjZWlwdC5ibG9ja051bWJlciB8fCBibG9ja051bWJlciAtIHJlY2VpcHQuYmxvY2tOdW1iZXIgKyAxbiA8IGNvbmZpcm1hdGlvbnMpKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgbGV0IHJlYXNvbiA9ICJyZXBsYWNlZCI7CiAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudFRyYW5zYWN0aW9uLnRvID09PSByZXBsYWNlZFRyYW5zYWN0aW9uLnRvICYmIHJlcGxhY2VtZW50VHJhbnNhY3Rpb24udmFsdWUgPT09IHJlcGxhY2VkVHJhbnNhY3Rpb24udmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICByZWFzb24gPSAicmVwcmljZWQiOwogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcGxhY2VtZW50VHJhbnNhY3Rpb24uZnJvbSA9PT0gcmVwbGFjZW1lbnRUcmFuc2FjdGlvbi50byAmJiByZXBsYWNlbWVudFRyYW5zYWN0aW9uLnZhbHVlID09PSAwbikgewogICAgICAgICAgICAgICAgICAgIHJlYXNvbiA9ICJjYW5jZWxsZWQiOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGRvbmUoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGVtaXQub25SZXBsYWNlZD8uKHsKICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbiwKICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VkVHJhbnNhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbjogcmVwbGFjZW1lbnRUcmFuc2FjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUmVjZWlwdDogcmVjZWlwdAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGVtaXQucmVzb2x2ZShyZWNlaXB0KTsKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJfKSB7CiAgICAgICAgICAgICAgICAgIGRvbmUoKCkgPT4gZW1pdC5yZWplY3QoZXJyXykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkb25lKCgpID0+IGVtaXQucmVqZWN0KGVycikpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3dhdGNoQmxvY2tzLmpzCiAgaW5pdF9zdHJpbmdpZnkoKTsKICBmdW5jdGlvbiB3YXRjaEJsb2NrcyhjbGllbnQsIHsgYmxvY2tUYWcgPSAibGF0ZXN0IiwgZW1pdE1pc3NlZCA9IGZhbHNlLCBlbWl0T25CZWdpbiA9IGZhbHNlLCBvbkJsb2NrLCBvbkVycm9yLCBpbmNsdWRlVHJhbnNhY3Rpb25zOiBpbmNsdWRlVHJhbnNhY3Rpb25zXywgcG9sbDogcG9sbF8sIHBvbGxpbmdJbnRlcnZhbCA9IGNsaWVudC5wb2xsaW5nSW50ZXJ2YWwgfSkgewogICAgY29uc3QgZW5hYmxlUG9sbGluZyA9ICgoKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgcG9sbF8gIT09ICJ1bmRlZmluZWQiKQogICAgICAgIHJldHVybiBwb2xsXzsKICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAiZmFsbGJhY2siICYmIGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0c1swXS5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pKCk7CiAgICBjb25zdCBpbmNsdWRlVHJhbnNhY3Rpb25zID0gaW5jbHVkZVRyYW5zYWN0aW9uc18gPz8gZmFsc2U7CiAgICBsZXQgcHJldkJsb2NrOwogICAgY29uc3QgcG9sbEJsb2NrcyA9ICgpID0+IHsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoQmxvY2tzIiwKICAgICAgICBjbGllbnQudWlkLAogICAgICAgIGJsb2NrVGFnLAogICAgICAgIGVtaXRNaXNzZWQsCiAgICAgICAgZW1pdE9uQmVnaW4sCiAgICAgICAgaW5jbHVkZVRyYW5zYWN0aW9ucywKICAgICAgICBwb2xsaW5nSW50ZXJ2YWwKICAgICAgXSk7CiAgICAgIHJldHVybiBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25CbG9jaywgb25FcnJvciB9LCAoZW1pdCkgPT4gcG9sbChhc3luYyAoKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGJsb2NrID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2ssICJnZXRCbG9jayIpKHsKICAgICAgICAgICAgYmxvY2tUYWcsCiAgICAgICAgICAgIGluY2x1ZGVUcmFuc2FjdGlvbnMKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGJsb2NrLm51bWJlciAmJiBwcmV2QmxvY2s/Lm51bWJlcikgewogICAgICAgICAgICBpZiAoYmxvY2subnVtYmVyID09PSBwcmV2QmxvY2subnVtYmVyKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGJsb2NrLm51bWJlciAtIHByZXZCbG9jay5udW1iZXIgPiAxICYmIGVtaXRNaXNzZWQpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBpID0gcHJldkJsb2NrPy5udW1iZXIgKyAxbjsgaSA8IGJsb2NrLm51bWJlcjsgaSsrKSB7CiAgICAgICAgICAgICAgICBjb25zdCBibG9jazIgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRCbG9jaywgImdldEJsb2NrIikoewogICAgICAgICAgICAgICAgICBibG9ja051bWJlcjogaSwKICAgICAgICAgICAgICAgICAgaW5jbHVkZVRyYW5zYWN0aW9ucwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBlbWl0Lm9uQmxvY2soYmxvY2syLCBwcmV2QmxvY2spOwogICAgICAgICAgICAgICAgcHJldkJsb2NrID0gYmxvY2syOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKAogICAgICAgICAgICAvLyBJZiBubyBwcmV2aW91cyBibG9jayBleGlzdHMsIGVtaXQuCiAgICAgICAgICAgICFwcmV2QmxvY2s/Lm51bWJlciB8fCAvLyBJZiB0aGUgYmxvY2sgdGFnIGlzICJwZW5kaW5nIiB3aXRoIG5vIGJsb2NrIG51bWJlciwgZW1pdC4KICAgICAgICAgICAgYmxvY2tUYWcgPT09ICJwZW5kaW5nIiAmJiAhYmxvY2s/Lm51bWJlciB8fCAvLyBJZiB0aGUgbmV4dCBibG9jayBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSBwcmV2aW91cyBibG9jayBudW1iZXIsIGVtaXQuCiAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZW1pdCBibG9ja3MgaW4gdGhlIHBhc3QuCiAgICAgICAgICAgIGJsb2NrLm51bWJlciAmJiBibG9jay5udW1iZXIgPiBwcmV2QmxvY2subnVtYmVyCiAgICAgICAgICApIHsKICAgICAgICAgICAgZW1pdC5vbkJsb2NrKGJsb2NrLCBwcmV2QmxvY2spOwogICAgICAgICAgICBwcmV2QmxvY2sgPSBibG9jazsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGVtaXQub25FcnJvcj8uKGVycik7CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAgZW1pdE9uQmVnaW4sCiAgICAgICAgaW50ZXJ2YWw6IHBvbGxpbmdJbnRlcnZhbAogICAgICB9KSk7CiAgICB9OwogICAgY29uc3Qgc3Vic2NyaWJlQmxvY2tzID0gKCkgPT4gewogICAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgICAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICAgIChhc3luYyAoKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydCA9ICgoKSA9PiB7CiAgICAgICAgICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIpIHsKICAgICAgICAgICAgICBjb25zdCB0cmFuc3BvcnQyID0gY2xpZW50LnRyYW5zcG9ydC50cmFuc3BvcnRzLmZpbmQoKHRyYW5zcG9ydDMpID0+IHRyYW5zcG9ydDMuY29uZmlnLnR5cGUgPT09ICJ3ZWJTb2NrZXQiKTsKICAgICAgICAgICAgICBpZiAoIXRyYW5zcG9ydDIpCiAgICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgICAgICByZXR1cm4gdHJhbnNwb3J0Mi52YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgIH0pKCk7CiAgICAgICAgICBjb25zdCB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZV8gfSA9IGF3YWl0IHRyYW5zcG9ydC5zdWJzY3JpYmUoewogICAgICAgICAgICBwYXJhbXM6IFsibmV3SGVhZHMiXSwKICAgICAgICAgICAgb25EYXRhKGRhdGEpIHsKICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBjbGllbnQuY2hhaW4/LmZvcm1hdHRlcnM/LmJsb2NrPy5mb3JtYXQgfHwgZm9ybWF0QmxvY2s7CiAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBmb3JtYXQoZGF0YS5yZXN1bHQpOwogICAgICAgICAgICAgIG9uQmxvY2soYmxvY2ssIHByZXZCbG9jayk7CiAgICAgICAgICAgICAgcHJldkJsb2NrID0gYmxvY2s7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uRXJyb3IoZXJyb3IpIHsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBvbkVycm9yPy4oZXJyKTsKICAgICAgICB9CiAgICAgIH0pKCk7CiAgICAgIHJldHVybiAoKSA9PiB1bnN1YnNjcmliZSgpOwogICAgfTsKICAgIHJldHVybiBlbmFibGVQb2xsaW5nID8gcG9sbEJsb2NrcygpIDogc3Vic2NyaWJlQmxvY2tzKCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3dhdGNoRXZlbnQuanMKICBpbml0X3N0cmluZ2lmeSgpOwogIGluaXRfYWJpKCk7CiAgaW5pdF9ycGMoKTsKICBmdW5jdGlvbiB3YXRjaEV2ZW50KGNsaWVudCwgeyBhZGRyZXNzLCBhcmdzLCBiYXRjaCA9IHRydWUsIGV2ZW50LCBldmVudHMsIGZyb21CbG9jaywgb25FcnJvciwgb25Mb2dzLCBwb2xsOiBwb2xsXywgcG9sbGluZ0ludGVydmFsID0gY2xpZW50LnBvbGxpbmdJbnRlcnZhbCwgc3RyaWN0OiBzdHJpY3RfIH0pIHsKICAgIGNvbnN0IGVuYWJsZVBvbGxpbmcgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIHBvbGxfICE9PSAidW5kZWZpbmVkIikKICAgICAgICByZXR1cm4gcG9sbF87CiAgICAgIGlmICh0eXBlb2YgZnJvbUJsb2NrID09PSAiYmlnaW50IikKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAiZmFsbGJhY2siICYmIGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0c1swXS5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pKCk7CiAgICBjb25zdCBzdHJpY3QgPSBzdHJpY3RfID8/IGZhbHNlOwogICAgY29uc3QgcG9sbEV2ZW50ID0gKCkgPT4gewogICAgICBjb25zdCBvYnNlcnZlcklkID0gc3RyaW5naWZ5KFsKICAgICAgICAid2F0Y2hFdmVudCIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGJhdGNoLAogICAgICAgIGNsaWVudC51aWQsCiAgICAgICAgZXZlbnQsCiAgICAgICAgcG9sbGluZ0ludGVydmFsLAogICAgICAgIGZyb21CbG9jawogICAgICBdKTsKICAgICAgcmV0dXJuIG9ic2VydmUob2JzZXJ2ZXJJZCwgeyBvbkxvZ3MsIG9uRXJyb3IgfSwgKGVtaXQpID0+IHsKICAgICAgICBsZXQgcHJldmlvdXNCbG9ja051bWJlcjsKICAgICAgICBpZiAoZnJvbUJsb2NrICE9PSB2b2lkIDApCiAgICAgICAgICBwcmV2aW91c0Jsb2NrTnVtYmVyID0gZnJvbUJsb2NrIC0gMW47CiAgICAgICAgbGV0IGZpbHRlcjsKICAgICAgICBsZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICAgICBjb25zdCB1bndhdGNoID0gcG9sbChhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAoIWluaXRpYWxpemVkKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgZmlsdGVyID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgY3JlYXRlRXZlbnRGaWx0ZXIsICJjcmVhdGVFdmVudEZpbHRlciIpKHsKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgZXZlbnQsCiAgICAgICAgICAgICAgICBldmVudHMsCiAgICAgICAgICAgICAgICBzdHJpY3QsCiAgICAgICAgICAgICAgICBmcm9tQmxvY2sKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBsZXQgbG9nczsKICAgICAgICAgICAgaWYgKGZpbHRlcikgewogICAgICAgICAgICAgIGxvZ3MgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRGaWx0ZXJDaGFuZ2VzLCAiZ2V0RmlsdGVyQ2hhbmdlcyIpKHsgZmlsdGVyIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnN0IGJsb2NrTnVtYmVyID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2tOdW1iZXIsICJnZXRCbG9ja051bWJlciIpKHt9KTsKICAgICAgICAgICAgICBpZiAocHJldmlvdXNCbG9ja051bWJlciAmJiBwcmV2aW91c0Jsb2NrTnVtYmVyICE9PSBibG9ja051bWJlcikgewogICAgICAgICAgICAgICAgbG9ncyA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldExvZ3MsICJnZXRMb2dzIikoewogICAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgICBldmVudCwKICAgICAgICAgICAgICAgICAgZXZlbnRzLAogICAgICAgICAgICAgICAgICBmcm9tQmxvY2s6IHByZXZpb3VzQmxvY2tOdW1iZXIgKyAxbiwKICAgICAgICAgICAgICAgICAgdG9CbG9jazogYmxvY2tOdW1iZXIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBsb2dzID0gW107CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHByZXZpb3VzQmxvY2tOdW1iZXIgPSBibG9ja051bWJlcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobG9ncy5sZW5ndGggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoYmF0Y2gpCiAgICAgICAgICAgICAgZW1pdC5vbkxvZ3MobG9ncyk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxvZyBvZiBsb2dzKQogICAgICAgICAgICAgICAgZW1pdC5vbkxvZ3MoW2xvZ10pOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGlmIChmaWx0ZXIgJiYgZXJyIGluc3RhbmNlb2YgSW52YWxpZElucHV0UnBjRXJyb3IpCiAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICAgICAgICAgZW1pdC5vbkVycm9yPy4oZXJyKTsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBlbWl0T25CZWdpbjogdHJ1ZSwKICAgICAgICAgIGludGVydmFsOiBwb2xsaW5nSW50ZXJ2YWwKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4gewogICAgICAgICAgaWYgKGZpbHRlcikKICAgICAgICAgICAgYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgdW5pbnN0YWxsRmlsdGVyLCAidW5pbnN0YWxsRmlsdGVyIikoeyBmaWx0ZXIgfSk7CiAgICAgICAgICB1bndhdGNoKCk7CiAgICAgICAgfTsKICAgICAgfSk7CiAgICB9OwogICAgY29uc3Qgc3Vic2NyaWJlRXZlbnQgPSAoKSA9PiB7CiAgICAgIGxldCBhY3RpdmUgPSB0cnVlOwogICAgICBsZXQgdW5zdWJzY3JpYmUgPSAoKSA9PiBhY3RpdmUgPSBmYWxzZTsKICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgdHJhbnNwb3J0ID0gKCgpID0+IHsKICAgICAgICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gImZhbGxiYWNrIikgewogICAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydDIgPSBjbGllbnQudHJhbnNwb3J0LnRyYW5zcG9ydHMuZmluZCgodHJhbnNwb3J0MykgPT4gdHJhbnNwb3J0My5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpOwogICAgICAgICAgICAgIGlmICghdHJhbnNwb3J0MikKICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgICAgIHJldHVybiB0cmFuc3BvcnQyLnZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgfSkoKTsKICAgICAgICAgIGNvbnN0IGV2ZW50c18gPSBldmVudHMgPz8gKGV2ZW50ID8gW2V2ZW50XSA6IHZvaWQgMCk7CiAgICAgICAgICBsZXQgdG9waWNzID0gW107CiAgICAgICAgICBpZiAoZXZlbnRzXykgewogICAgICAgICAgICBjb25zdCBlbmNvZGVkID0gZXZlbnRzXy5mbGF0TWFwKChldmVudDIpID0+IGVuY29kZUV2ZW50VG9waWNzKHsKICAgICAgICAgICAgICBhYmk6IFtldmVudDJdLAogICAgICAgICAgICAgIGV2ZW50TmFtZTogZXZlbnQyLm5hbWUsCiAgICAgICAgICAgICAgYXJncwogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIHRvcGljcyA9IFtlbmNvZGVkXTsKICAgICAgICAgICAgaWYgKGV2ZW50KQogICAgICAgICAgICAgIHRvcGljcyA9IHRvcGljc1swXTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHsgdW5zdWJzY3JpYmU6IHVuc3Vic2NyaWJlXyB9ID0gYXdhaXQgdHJhbnNwb3J0LnN1YnNjcmliZSh7CiAgICAgICAgICAgIHBhcmFtczogWyJsb2dzIiwgeyBhZGRyZXNzLCB0b3BpY3MgfV0sCiAgICAgICAgICAgIG9uRGF0YShkYXRhKSB7CiAgICAgICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgY29uc3QgbG9nID0gZGF0YS5yZXN1bHQ7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGNvbnN0IHsgZXZlbnROYW1lLCBhcmdzOiBhcmdzMiB9ID0gZGVjb2RlRXZlbnRMb2coewogICAgICAgICAgICAgICAgICBhYmk6IGV2ZW50c18gPz8gW10sCiAgICAgICAgICAgICAgICAgIGRhdGE6IGxvZy5kYXRhLAogICAgICAgICAgICAgICAgICB0b3BpY3M6IGxvZy50b3BpY3MsCiAgICAgICAgICAgICAgICAgIHN0cmljdAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2cobG9nLCB7IGFyZ3M6IGFyZ3MyLCBldmVudE5hbWUgfSk7CiAgICAgICAgICAgICAgICBvbkxvZ3MoW2Zvcm1hdHRlZF0pOwogICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgbGV0IGV2ZW50TmFtZTsKICAgICAgICAgICAgICAgIGxldCBpc1VubmFtZWQ7CiAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRGVjb2RlTG9nRGF0YU1pc21hdGNoIHx8IGVyciBpbnN0YW5jZW9mIERlY29kZUxvZ1RvcGljc01pc21hdGNoKSB7CiAgICAgICAgICAgICAgICAgIGlmIChzdHJpY3RfKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgZXZlbnROYW1lID0gZXJyLmFiaUl0ZW0ubmFtZTsKICAgICAgICAgICAgICAgICAgaXNVbm5hbWVkID0gZXJyLmFiaUl0ZW0uaW5wdXRzPy5zb21lKCh4KSA9PiAhKCJuYW1lIiBpbiB4ICYmIHgubmFtZSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TG9nKGxvZywgewogICAgICAgICAgICAgICAgICBhcmdzOiBpc1VubmFtZWQgPyBbXSA6IHt9LAogICAgICAgICAgICAgICAgICBldmVudE5hbWUKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgb25Mb2dzKFtmb3JtYXR0ZWRdKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uRXJyb3IoZXJyb3IpIHsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBvbkVycm9yPy4oZXJyKTsKICAgICAgICB9CiAgICAgIH0pKCk7CiAgICAgIHJldHVybiAoKSA9PiB1bnN1YnNjcmliZSgpOwogICAgfTsKICAgIHJldHVybiBlbmFibGVQb2xsaW5nID8gcG9sbEV2ZW50KCkgOiBzdWJzY3JpYmVFdmVudCgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy93YXRjaFBlbmRpbmdUcmFuc2FjdGlvbnMuanMKICBpbml0X3N0cmluZ2lmeSgpOwogIGZ1bmN0aW9uIHdhdGNoUGVuZGluZ1RyYW5zYWN0aW9ucyhjbGllbnQsIHsgYmF0Y2ggPSB0cnVlLCBvbkVycm9yLCBvblRyYW5zYWN0aW9ucywgcG9sbDogcG9sbF8sIHBvbGxpbmdJbnRlcnZhbCA9IGNsaWVudC5wb2xsaW5nSW50ZXJ2YWwgfSkgewogICAgY29uc3QgZW5hYmxlUG9sbGluZyA9IHR5cGVvZiBwb2xsXyAhPT0gInVuZGVmaW5lZCIgPyBwb2xsXyA6IGNsaWVudC50cmFuc3BvcnQudHlwZSAhPT0gIndlYlNvY2tldCI7CiAgICBjb25zdCBwb2xsUGVuZGluZ1RyYW5zYWN0aW9ucyA9ICgpID0+IHsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoUGVuZGluZ1RyYW5zYWN0aW9ucyIsCiAgICAgICAgY2xpZW50LnVpZCwKICAgICAgICBiYXRjaCwKICAgICAgICBwb2xsaW5nSW50ZXJ2YWwKICAgICAgXSk7CiAgICAgIHJldHVybiBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25UcmFuc2FjdGlvbnMsIG9uRXJyb3IgfSwgKGVtaXQpID0+IHsKICAgICAgICBsZXQgZmlsdGVyOwogICAgICAgIGNvbnN0IHVud2F0Y2ggPSBwb2xsKGFzeW5jICgpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICghZmlsdGVyKSB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGZpbHRlciA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGNyZWF0ZVBlbmRpbmdUcmFuc2FjdGlvbkZpbHRlciwgImNyZWF0ZVBlbmRpbmdUcmFuc2FjdGlvbkZpbHRlciIpKHt9KTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICAgIHVud2F0Y2goKTsKICAgICAgICAgICAgICAgIHRocm93IGVycjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgaGFzaGVzID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0RmlsdGVyQ2hhbmdlcywgImdldEZpbHRlckNoYW5nZXMiKSh7IGZpbHRlciB9KTsKICAgICAgICAgICAgaWYgKGhhc2hlcy5sZW5ndGggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoYmF0Y2gpCiAgICAgICAgICAgICAgZW1pdC5vblRyYW5zYWN0aW9ucyhoYXNoZXMpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgZm9yIChjb25zdCBoYXNoMyBvZiBoYXNoZXMpCiAgICAgICAgICAgICAgICBlbWl0Lm9uVHJhbnNhY3Rpb25zKFtoYXNoM10pOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGVtaXQub25FcnJvcj8uKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgZW1pdE9uQmVnaW46IHRydWUsCiAgICAgICAgICBpbnRlcnZhbDogcG9sbGluZ0ludGVydmFsCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChmaWx0ZXIpCiAgICAgICAgICAgIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHVuaW5zdGFsbEZpbHRlciwgInVuaW5zdGFsbEZpbHRlciIpKHsgZmlsdGVyIH0pOwogICAgICAgICAgdW53YXRjaCgpOwogICAgICAgIH07CiAgICAgIH0pOwogICAgfTsKICAgIGNvbnN0IHN1YnNjcmliZVBlbmRpbmdUcmFuc2FjdGlvbnMgPSAoKSA9PiB7CiAgICAgIGxldCBhY3RpdmUgPSB0cnVlOwogICAgICBsZXQgdW5zdWJzY3JpYmUgPSAoKSA9PiBhY3RpdmUgPSBmYWxzZTsKICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgeyB1bnN1YnNjcmliZTogdW5zdWJzY3JpYmVfIH0gPSBhd2FpdCBjbGllbnQudHJhbnNwb3J0LnN1YnNjcmliZSh7CiAgICAgICAgICAgIHBhcmFtczogWyJuZXdQZW5kaW5nVHJhbnNhY3Rpb25zIl0sCiAgICAgICAgICAgIG9uRGF0YShkYXRhKSB7CiAgICAgICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYXRhLnJlc3VsdDsKICAgICAgICAgICAgICBvblRyYW5zYWN0aW9ucyhbdHJhbnNhY3Rpb25dKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25FcnJvcihlcnJvcikgewogICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZV87CiAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgdW5zdWJzY3JpYmUoKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIG9uRXJyb3I/LihlcnIpOwogICAgICAgIH0KICAgICAgfSkoKTsKICAgICAgcmV0dXJuICgpID0+IHVuc3Vic2NyaWJlKCk7CiAgICB9OwogICAgcmV0dXJuIGVuYWJsZVBvbGxpbmcgPyBwb2xsUGVuZGluZ1RyYW5zYWN0aW9ucygpIDogc3Vic2NyaWJlUGVuZGluZ1RyYW5zYWN0aW9ucygpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaXdlL3BhcnNlU2l3ZU1lc3NhZ2UuanMKICBmdW5jdGlvbiBwYXJzZVNpd2VNZXNzYWdlKG1lc3NhZ2UpIHsKICAgIGNvbnN0IHsgc2NoZW1lLCBzdGF0ZW1lbnQsIC4uLnByZWZpeCB9ID0gbWVzc2FnZS5tYXRjaChwcmVmaXhSZWdleCk/Lmdyb3VwcyA/PyB7fTsKICAgIGNvbnN0IHsgY2hhaW5JZCwgZXhwaXJhdGlvblRpbWUsIGlzc3VlZEF0LCBub3RCZWZvcmUsIHJlcXVlc3RJZCwgLi4uc3VmZml4IH0gPSBtZXNzYWdlLm1hdGNoKHN1ZmZpeFJlZ2V4KT8uZ3JvdXBzID8/IHt9OwogICAgY29uc3QgcmVzb3VyY2VzID0gbWVzc2FnZS5zcGxpdCgiUmVzb3VyY2VzOiIpWzFdPy5zcGxpdCgiXG4tICIpLnNsaWNlKDEpOwogICAgcmV0dXJuIHsKICAgICAgLi4ucHJlZml4LAogICAgICAuLi5zdWZmaXgsCiAgICAgIC4uLmNoYWluSWQgPyB7IGNoYWluSWQ6IE51bWJlcihjaGFpbklkKSB9IDoge30sCiAgICAgIC4uLmV4cGlyYXRpb25UaW1lID8geyBleHBpcmF0aW9uVGltZTogbmV3IERhdGUoZXhwaXJhdGlvblRpbWUpIH0gOiB7fSwKICAgICAgLi4uaXNzdWVkQXQgPyB7IGlzc3VlZEF0OiBuZXcgRGF0ZShpc3N1ZWRBdCkgfSA6IHt9LAogICAgICAuLi5ub3RCZWZvcmUgPyB7IG5vdEJlZm9yZTogbmV3IERhdGUobm90QmVmb3JlKSB9IDoge30sCiAgICAgIC4uLnJlcXVlc3RJZCA/IHsgcmVxdWVzdElkIH0gOiB7fSwKICAgICAgLi4ucmVzb3VyY2VzID8geyByZXNvdXJjZXMgfSA6IHt9LAogICAgICAuLi5zY2hlbWUgPyB7IHNjaGVtZSB9IDoge30sCiAgICAgIC4uLnN0YXRlbWVudCA/IHsgc3RhdGVtZW50IH0gOiB7fQogICAgfTsKICB9CiAgdmFyIHByZWZpeFJlZ2V4ID0gL14oPzooPzxzY2hlbWU+W2EtekEtWl1bYS16QS1aMC05Ky0uXSopOlwvXC8pPyg/PGRvbWFpbj5bYS16QS1aMC05Ky0uXSooPzo6WzAtOV17MSw1fSk/KSAoPzp3YW50cyB5b3UgdG8gc2lnbiBpbiB3aXRoIHlvdXIgRXRoZXJldW0gYWNjb3VudDpcbikoPzxhZGRyZXNzPjB4W2EtZkEtRjAtOV17NDB9KVxuXG4oPzooPzxzdGF0ZW1lbnQ+LiopXG5cbik/LzsKICB2YXIgc3VmZml4UmVnZXggPSAvKD86VVJJOiAoPzx1cmk+LispKVxuKD86VmVyc2lvbjogKD88dmVyc2lvbj4uKykpXG4oPzpDaGFpbiBJRDogKD88Y2hhaW5JZD5cZCspKVxuKD86Tm9uY2U6ICg/PG5vbmNlPlthLXpBLVowLTldKykpXG4oPzpJc3N1ZWQgQXQ6ICg/PGlzc3VlZEF0Pi4rKSkoPzpcbkV4cGlyYXRpb24gVGltZTogKD88ZXhwaXJhdGlvblRpbWU+LispKT8oPzpcbk5vdCBCZWZvcmU6ICg/PG5vdEJlZm9yZT4uKykpPyg/OlxuUmVxdWVzdCBJRDogKD88cmVxdWVzdElkPi4rKSk/LzsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaXdlL3ZhbGlkYXRlU2l3ZU1lc3NhZ2UuanMKICBpbml0X2lzQWRkcmVzc0VxdWFsKCk7CiAgZnVuY3Rpb24gdmFsaWRhdGVTaXdlTWVzc2FnZShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGRvbWFpbiwgbWVzc2FnZSwgbm9uY2UsIHNjaGVtZSwgdGltZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpIH0gPSBwYXJhbWV0ZXJzOwogICAgaWYgKGRvbWFpbiAmJiBtZXNzYWdlLmRvbWFpbiAhPT0gZG9tYWluKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAobm9uY2UgJiYgbWVzc2FnZS5ub25jZSAhPT0gbm9uY2UpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChzY2hlbWUgJiYgbWVzc2FnZS5zY2hlbWUgIT09IHNjaGVtZSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKG1lc3NhZ2UuZXhwaXJhdGlvblRpbWUgJiYgdGltZSA+PSBtZXNzYWdlLmV4cGlyYXRpb25UaW1lKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAobWVzc2FnZS5ub3RCZWZvcmUgJiYgdGltZSA8IG1lc3NhZ2Uubm90QmVmb3JlKQogICAgICByZXR1cm4gZmFsc2U7CiAgICB0cnkgewogICAgICBpZiAoIW1lc3NhZ2UuYWRkcmVzcykKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChhZGRyZXNzICYmICFpc0FkZHJlc3NFcXVhbChtZXNzYWdlLmFkZHJlc3MsIGFkZHJlc3MpKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gY2F0Y2ggewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9zaXdlL3ZlcmlmeVNpd2VNZXNzYWdlLmpzCiAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5U2l3ZU1lc3NhZ2UoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGRvbWFpbiwgbWVzc2FnZSwgbm9uY2UsIHNjaGVtZSwgc2lnbmF0dXJlLCB0aW1lID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCksIC4uLmNhbGxSZXF1ZXN0IH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgcGFyc2VkID0gcGFyc2VTaXdlTWVzc2FnZShtZXNzYWdlKTsKICAgIGlmICghcGFyc2VkLmFkZHJlc3MpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZVNpd2VNZXNzYWdlKHsKICAgICAgYWRkcmVzcywKICAgICAgZG9tYWluLAogICAgICBtZXNzYWdlOiBwYXJzZWQsCiAgICAgIG5vbmNlLAogICAgICBzY2hlbWUsCiAgICAgIHRpbWUKICAgIH0pOwogICAgaWYgKCFpc1ZhbGlkKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBjb25zdCBoYXNoMyA9IGhhc2hNZXNzYWdlKG1lc3NhZ2UpOwogICAgcmV0dXJuIHZlcmlmeUhhc2gyKGNsaWVudCwgewogICAgICBhZGRyZXNzOiBwYXJzZWQuYWRkcmVzcywKICAgICAgaGFzaDogaGFzaDMsCiAgICAgIHNpZ25hdHVyZSwKICAgICAgLi4uY2FsbFJlcXVlc3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2RlY29yYXRvcnMvcHVibGljLmpzCiAgZnVuY3Rpb24gcHVibGljQWN0aW9ucyhjbGllbnQpIHsKICAgIHJldHVybiB7CiAgICAgIGNhbGw6IChhcmdzKSA9PiBjYWxsKGNsaWVudCwgYXJncyksCiAgICAgIGNyZWF0ZUJsb2NrRmlsdGVyOiAoKSA9PiBjcmVhdGVCbG9ja0ZpbHRlcihjbGllbnQpLAogICAgICBjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyOiAoYXJncykgPT4gY3JlYXRlQ29udHJhY3RFdmVudEZpbHRlcihjbGllbnQsIGFyZ3MpLAogICAgICBjcmVhdGVFdmVudEZpbHRlcjogKGFyZ3MpID0+IGNyZWF0ZUV2ZW50RmlsdGVyKGNsaWVudCwgYXJncyksCiAgICAgIGNyZWF0ZVBlbmRpbmdUcmFuc2FjdGlvbkZpbHRlcjogKCkgPT4gY3JlYXRlUGVuZGluZ1RyYW5zYWN0aW9uRmlsdGVyKGNsaWVudCksCiAgICAgIGVzdGltYXRlQ29udHJhY3RHYXM6IChhcmdzKSA9PiBlc3RpbWF0ZUNvbnRyYWN0R2FzKGNsaWVudCwgYXJncyksCiAgICAgIGVzdGltYXRlR2FzOiAoYXJncykgPT4gZXN0aW1hdGVHYXMoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0QmFsYW5jZTogKGFyZ3MpID0+IGdldEJhbGFuY2UoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0QmxvYkJhc2VGZWU6ICgpID0+IGdldEJsb2JCYXNlRmVlKGNsaWVudCksCiAgICAgIGdldEJsb2NrOiAoYXJncykgPT4gZ2V0QmxvY2soY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0QmxvY2tOdW1iZXI6IChhcmdzKSA9PiBnZXRCbG9ja051bWJlcihjbGllbnQsIGFyZ3MpLAogICAgICBnZXRCbG9ja1RyYW5zYWN0aW9uQ291bnQ6IChhcmdzKSA9PiBnZXRCbG9ja1RyYW5zYWN0aW9uQ291bnQoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0Qnl0ZWNvZGU6IChhcmdzKSA9PiBnZXRDb2RlKGNsaWVudCwgYXJncyksCiAgICAgIGdldENoYWluSWQ6ICgpID0+IGdldENoYWluSWQoY2xpZW50KSwKICAgICAgZ2V0Q29kZTogKGFyZ3MpID0+IGdldENvZGUoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0Q29udHJhY3RFdmVudHM6IChhcmdzKSA9PiBnZXRDb250cmFjdEV2ZW50cyhjbGllbnQsIGFyZ3MpLAogICAgICBnZXRFaXA3MTJEb21haW46IChhcmdzKSA9PiBnZXRFaXA3MTJEb21haW4oY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RW5zQWRkcmVzczogKGFyZ3MpID0+IGdldEVuc0FkZHJlc3MoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RW5zQXZhdGFyOiAoYXJncykgPT4gZ2V0RW5zQXZhdGFyKGNsaWVudCwgYXJncyksCiAgICAgIGdldEVuc05hbWU6IChhcmdzKSA9PiBnZXRFbnNOYW1lKGNsaWVudCwgYXJncyksCiAgICAgIGdldEVuc1Jlc29sdmVyOiAoYXJncykgPT4gZ2V0RW5zUmVzb2x2ZXIoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RW5zVGV4dDogKGFyZ3MpID0+IGdldEVuc1RleHQoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RmVlSGlzdG9yeTogKGFyZ3MpID0+IGdldEZlZUhpc3RvcnkoY2xpZW50LCBhcmdzKSwKICAgICAgZXN0aW1hdGVGZWVzUGVyR2FzOiAoYXJncykgPT4gZXN0aW1hdGVGZWVzUGVyR2FzKGNsaWVudCwgYXJncyksCiAgICAgIGdldEZpbHRlckNoYW5nZXM6IChhcmdzKSA9PiBnZXRGaWx0ZXJDaGFuZ2VzKGNsaWVudCwgYXJncyksCiAgICAgIGdldEZpbHRlckxvZ3M6IChhcmdzKSA9PiBnZXRGaWx0ZXJMb2dzKGNsaWVudCwgYXJncyksCiAgICAgIGdldEdhc1ByaWNlOiAoKSA9PiBnZXRHYXNQcmljZShjbGllbnQpLAogICAgICBnZXRMb2dzOiAoYXJncykgPT4gZ2V0TG9ncyhjbGllbnQsIGFyZ3MpLAogICAgICBnZXRQcm9vZjogKGFyZ3MpID0+IGdldFByb29mKGNsaWVudCwgYXJncyksCiAgICAgIGVzdGltYXRlTWF4UHJpb3JpdHlGZWVQZXJHYXM6IChhcmdzKSA9PiBlc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzKGNsaWVudCwgYXJncyksCiAgICAgIGdldFN0b3JhZ2VBdDogKGFyZ3MpID0+IGdldFN0b3JhZ2VBdChjbGllbnQsIGFyZ3MpLAogICAgICBnZXRUcmFuc2FjdGlvbjogKGFyZ3MpID0+IGdldFRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgIGdldFRyYW5zYWN0aW9uQ29uZmlybWF0aW9uczogKGFyZ3MpID0+IGdldFRyYW5zYWN0aW9uQ29uZmlybWF0aW9ucyhjbGllbnQsIGFyZ3MpLAogICAgICBnZXRUcmFuc2FjdGlvbkNvdW50OiAoYXJncykgPT4gZ2V0VHJhbnNhY3Rpb25Db3VudChjbGllbnQsIGFyZ3MpLAogICAgICBnZXRUcmFuc2FjdGlvblJlY2VpcHQ6IChhcmdzKSA9PiBnZXRUcmFuc2FjdGlvblJlY2VpcHQoY2xpZW50LCBhcmdzKSwKICAgICAgbXVsdGljYWxsOiAoYXJncykgPT4gbXVsdGljYWxsKGNsaWVudCwgYXJncyksCiAgICAgIHByZXBhcmVUcmFuc2FjdGlvblJlcXVlc3Q6IChhcmdzKSA9PiBwcmVwYXJlVHJhbnNhY3Rpb25SZXF1ZXN0KGNsaWVudCwgYXJncyksCiAgICAgIHJlYWRDb250cmFjdDogKGFyZ3MpID0+IHJlYWRDb250cmFjdChjbGllbnQsIGFyZ3MpLAogICAgICBzZW5kUmF3VHJhbnNhY3Rpb246IChhcmdzKSA9PiBzZW5kUmF3VHJhbnNhY3Rpb24oY2xpZW50LCBhcmdzKSwKICAgICAgc2ltdWxhdGVDb250cmFjdDogKGFyZ3MpID0+IHNpbXVsYXRlQ29udHJhY3QoY2xpZW50LCBhcmdzKSwKICAgICAgdmVyaWZ5TWVzc2FnZTogKGFyZ3MpID0+IHZlcmlmeU1lc3NhZ2UyKGNsaWVudCwgYXJncyksCiAgICAgIHZlcmlmeVNpd2VNZXNzYWdlOiAoYXJncykgPT4gdmVyaWZ5U2l3ZU1lc3NhZ2UoY2xpZW50LCBhcmdzKSwKICAgICAgdmVyaWZ5VHlwZWREYXRhOiAoYXJncykgPT4gdmVyaWZ5VHlwZWREYXRhMihjbGllbnQsIGFyZ3MpLAogICAgICB1bmluc3RhbGxGaWx0ZXI6IChhcmdzKSA9PiB1bmluc3RhbGxGaWx0ZXIoY2xpZW50LCBhcmdzKSwKICAgICAgd2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdDogKGFyZ3MpID0+IHdhaXRGb3JUcmFuc2FjdGlvblJlY2VpcHQoY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hCbG9ja3M6IChhcmdzKSA9PiB3YXRjaEJsb2NrcyhjbGllbnQsIGFyZ3MpLAogICAgICB3YXRjaEJsb2NrTnVtYmVyOiAoYXJncykgPT4gd2F0Y2hCbG9ja051bWJlcihjbGllbnQsIGFyZ3MpLAogICAgICB3YXRjaENvbnRyYWN0RXZlbnQ6IChhcmdzKSA9PiB3YXRjaENvbnRyYWN0RXZlbnQoY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hFdmVudDogKGFyZ3MpID0+IHdhdGNoRXZlbnQoY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hQZW5kaW5nVHJhbnNhY3Rpb25zOiAoYXJncykgPT4gd2F0Y2hQZW5kaW5nVHJhbnNhY3Rpb25zKGNsaWVudCwgYXJncykKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvY3JlYXRlUHVibGljQ2xpZW50LmpzCiAgZnVuY3Rpb24gY3JlYXRlUHVibGljQ2xpZW50KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsga2V5ID0gInB1YmxpYyIsIG5hbWUgPSAiUHVibGljIENsaWVudCIgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQoewogICAgICAuLi5wYXJhbWV0ZXJzLAogICAgICBrZXksCiAgICAgIG5hbWUsCiAgICAgIHR5cGU6ICJwdWJsaWNDbGllbnQiCiAgICB9KTsKICAgIHJldHVybiBjbGllbnQuZXh0ZW5kKHB1YmxpY0FjdGlvbnMpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvZHJvcFRyYW5zYWN0aW9uLmpzCiAgYXN5bmMgZnVuY3Rpb24gZHJvcFRyYW5zYWN0aW9uKGNsaWVudCwgeyBoYXNoOiBoYXNoMyB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X2Ryb3BUcmFuc2FjdGlvbmAsCiAgICAgIHBhcmFtczogW2hhc2gzXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9kdW1wU3RhdGUuanMKICBhc3luYyBmdW5jdGlvbiBkdW1wU3RhdGUoY2xpZW50KSB7CiAgICByZXR1cm4gY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9kdW1wU3RhdGVgCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L2dldEF1dG9taW5lLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0QXV0b21pbmUoY2xpZW50KSB7CiAgICBpZiAoY2xpZW50Lm1vZGUgPT09ICJnYW5hY2hlIikKICAgICAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfbWluaW5nIgogICAgICB9KTsKICAgIHJldHVybiBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X2dldEF1dG9taW5lYAogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9nZXRUeHBvb2xDb250ZW50LmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0VHhwb29sQ29udGVudChjbGllbnQpIHsKICAgIHJldHVybiBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogInR4cG9vbF9jb250ZW50IgogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9nZXRUeHBvb2xTdGF0dXMuanMKICBpbml0X2Zyb21IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUeHBvb2xTdGF0dXMoY2xpZW50KSB7CiAgICBjb25zdCB7IHBlbmRpbmcsIHF1ZXVlZCB9ID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ0eHBvb2xfc3RhdHVzIgogICAgfSk7CiAgICByZXR1cm4gewogICAgICBwZW5kaW5nOiBoZXhUb051bWJlcihwZW5kaW5nKSwKICAgICAgcXVldWVkOiBoZXhUb051bWJlcihxdWV1ZWQpCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvaW1wZXJzb25hdGVBY2NvdW50LmpzCiAgYXN5bmMgZnVuY3Rpb24gaW1wZXJzb25hdGVBY2NvdW50KGNsaWVudCwgeyBhZGRyZXNzIH0pIHsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiBgJHtjbGllbnQubW9kZX1faW1wZXJzb25hdGVBY2NvdW50YCwKICAgICAgcGFyYW1zOiBbYWRkcmVzc10KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvaW5jcmVhc2VUaW1lLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGluY3JlYXNlVGltZShjbGllbnQsIHsgc2Vjb25kcyB9KSB7CiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldm1faW5jcmVhc2VUaW1lIiwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoc2Vjb25kcyldCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L2luc3BlY3RUeHBvb2wuanMKICBhc3luYyBmdW5jdGlvbiBpbnNwZWN0VHhwb29sKGNsaWVudCkgewogICAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAidHhwb29sX2luc3BlY3QiCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L2xvYWRTdGF0ZS5qcwogIGFzeW5jIGZ1bmN0aW9uIGxvYWRTdGF0ZShjbGllbnQsIHsgc3RhdGUgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9sb2FkU3RhdGVgLAogICAgICBwYXJhbXM6IFtzdGF0ZV0KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvbWluZS5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBtaW5lKGNsaWVudCwgeyBibG9ja3MsIGludGVydmFsIH0pIHsKICAgIGlmIChjbGllbnQubW9kZSA9PT0gImdhbmFjaGUiKQogICAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXZtX21pbmUiLAogICAgICAgIHBhcmFtczogW3sgYmxvY2tzOiBudW1iZXJUb0hleChibG9ja3MpIH1dCiAgICAgIH0pOwogICAgZWxzZQogICAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiBgJHtjbGllbnQubW9kZX1fbWluZWAsCiAgICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoYmxvY2tzKSwgbnVtYmVyVG9IZXgoaW50ZXJ2YWwgfHwgMCldCiAgICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvcmVtb3ZlQmxvY2tUaW1lc3RhbXBJbnRlcnZhbC5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUJsb2NrVGltZXN0YW1wSW50ZXJ2YWwoY2xpZW50KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X3JlbW92ZUJsb2NrVGltZXN0YW1wSW50ZXJ2YWxgCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3Jlc2V0LmpzCiAgYXN5bmMgZnVuY3Rpb24gcmVzZXQoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBqc29uUnBjVXJsIH0gPSB7fSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9yZXNldGAsCiAgICAgIHBhcmFtczogW3sgZm9ya2luZzogeyBibG9ja051bWJlcjogTnVtYmVyKGJsb2NrTnVtYmVyKSwganNvblJwY1VybCB9IH1dCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3JldmVydC5qcwogIGFzeW5jIGZ1bmN0aW9uIHJldmVydChjbGllbnQsIHsgaWQgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldm1fcmV2ZXJ0IiwKICAgICAgcGFyYW1zOiBbaWRdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NlbmRVbnNpZ25lZFRyYW5zYWN0aW9uLmpzCiAgaW5pdF9leHRyYWN0KCk7CiAgaW5pdF90cmFuc2FjdGlvblJlcXVlc3QoKTsKICBhc3luYyBmdW5jdGlvbiBzZW5kVW5zaWduZWRUcmFuc2FjdGlvbihjbGllbnQsIGFyZ3MpIHsKICAgIGNvbnN0IHsgYWNjZXNzTGlzdCwgZGF0YSwgZnJvbSwgZ2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbm9uY2UsIHRvLCB2YWx1ZSwgLi4ucmVzdCB9ID0gYXJnczsKICAgIGNvbnN0IGNoYWluRm9ybWF0ID0gY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzPy50cmFuc2FjdGlvblJlcXVlc3Q/LmZvcm1hdDsKICAgIGNvbnN0IGZvcm1hdCA9IGNoYWluRm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgIGNvbnN0IHJlcXVlc3QgPSBmb3JtYXQoewogICAgICAvLyBQaWNrIG91dCBleHRyYSBkYXRhIHRoYXQgbWlnaHQgZXhpc3Qgb24gdGhlIGNoYWluJ3MgdHJhbnNhY3Rpb24gcmVxdWVzdCB0eXBlLgogICAgICAuLi5leHRyYWN0KHJlc3QsIHsgZm9ybWF0OiBjaGFpbkZvcm1hdCB9KSwKICAgICAgYWNjZXNzTGlzdCwKICAgICAgZGF0YSwKICAgICAgZnJvbSwKICAgICAgZ2FzLAogICAgICBnYXNQcmljZSwKICAgICAgbWF4RmVlUGVyR2FzLAogICAgICBtYXhQcmlvcml0eUZlZVBlckdhcywKICAgICAgbm9uY2UsCiAgICAgIHRvLAogICAgICB2YWx1ZQogICAgfSk7CiAgICBjb25zdCBoYXNoMyA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX3NlbmRVbnNpZ25lZFRyYW5zYWN0aW9uIiwKICAgICAgcGFyYW1zOiBbcmVxdWVzdF0KICAgIH0pOwogICAgcmV0dXJuIGhhc2gzOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc2V0QXV0b21pbmUuanMKICBhc3luYyBmdW5jdGlvbiBzZXRBdXRvbWluZShjbGllbnQsIGVuYWJsZWQpIHsKICAgIGlmIChjbGllbnQubW9kZSA9PT0gImdhbmFjaGUiKSB7CiAgICAgIGlmIChlbmFibGVkKQogICAgICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsgbWV0aG9kOiAibWluZXJfc3RhcnQiIH0pOwogICAgICBlbHNlCiAgICAgICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoeyBtZXRob2Q6ICJtaW5lcl9zdG9wIiB9KTsKICAgIH0gZWxzZQogICAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXZtX3NldEF1dG9taW5lIiwKICAgICAgICBwYXJhbXM6IFtlbmFibGVkXQogICAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldEJhbGFuY2UuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2V0QmFsYW5jZShjbGllbnQsIHsgYWRkcmVzcywgdmFsdWUgfSkgewogICAgaWYgKGNsaWVudC5tb2RlID09PSAiZ2FuYWNoZSIpCiAgICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldm1fc2V0QWNjb3VudEJhbGFuY2UiLAogICAgICAgIHBhcmFtczogW2FkZHJlc3MsIG51bWJlclRvSGV4KHZhbHVlKV0KICAgICAgfSk7CiAgICBlbHNlCiAgICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRCYWxhbmNlYCwKICAgICAgICBwYXJhbXM6IFthZGRyZXNzLCBudW1iZXJUb0hleCh2YWx1ZSldCiAgICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc2V0QmxvY2tHYXNMaW1pdC5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBzZXRCbG9ja0dhc0xpbWl0KGNsaWVudCwgeyBnYXNMaW1pdCB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV2bV9zZXRCbG9ja0dhc0xpbWl0IiwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoZ2FzTGltaXQpXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRCbG9ja1RpbWVzdGFtcEludGVydmFsLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0QmxvY2tUaW1lc3RhbXBJbnRlcnZhbChjbGllbnQsIHsgaW50ZXJ2YWwgfSkgewogICAgY29uc3QgaW50ZXJ2YWxfID0gKCgpID0+IHsKICAgICAgaWYgKGNsaWVudC5tb2RlID09PSAiaGFyZGhhdCIpCiAgICAgICAgcmV0dXJuIGludGVydmFsICogMWUzOwogICAgICByZXR1cm4gaW50ZXJ2YWw7CiAgICB9KSgpOwogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRCbG9ja1RpbWVzdGFtcEludGVydmFsYCwKICAgICAgcGFyYW1zOiBbaW50ZXJ2YWxfXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRDb2RlLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0Q29kZShjbGllbnQsIHsgYWRkcmVzcywgYnl0ZWNvZGUgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRDb2RlYCwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYnl0ZWNvZGVdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldENvaW5iYXNlLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0Q29pbmJhc2UoY2xpZW50LCB7IGFkZHJlc3MgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRDb2luYmFzZWAsCiAgICAgIHBhcmFtczogW2FkZHJlc3NdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldEludGVydmFsTWluaW5nLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0SW50ZXJ2YWxNaW5pbmcoY2xpZW50LCB7IGludGVydmFsIH0pIHsKICAgIGNvbnN0IGludGVydmFsXyA9ICgoKSA9PiB7CiAgICAgIGlmIChjbGllbnQubW9kZSA9PT0gImhhcmRoYXQiKQogICAgICAgIHJldHVybiBpbnRlcnZhbCAqIDFlMzsKICAgICAgcmV0dXJuIGludGVydmFsOwogICAgfSkoKTsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXZtX3NldEludGVydmFsTWluaW5nIiwKICAgICAgcGFyYW1zOiBbaW50ZXJ2YWxfXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRMb2dnaW5nRW5hYmxlZC5qcwogIGFzeW5jIGZ1bmN0aW9uIHNldExvZ2dpbmdFbmFibGVkKGNsaWVudCwgZW5hYmxlZCkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRMb2dnaW5nRW5hYmxlZGAsCiAgICAgIHBhcmFtczogW2VuYWJsZWRdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldE1pbkdhc1ByaWNlLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNldE1pbkdhc1ByaWNlKGNsaWVudCwgeyBnYXNQcmljZSB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X3NldE1pbkdhc1ByaWNlYCwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoZ2FzUHJpY2UpXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXROZXh0QmxvY2tCYXNlRmVlUGVyR2FzLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNldE5leHRCbG9ja0Jhc2VGZWVQZXJHYXMoY2xpZW50LCB7IGJhc2VGZWVQZXJHYXMgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXROZXh0QmxvY2tCYXNlRmVlUGVyR2FzYCwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoYmFzZUZlZVBlckdhcyldCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldE5leHRCbG9ja1RpbWVzdGFtcC5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBzZXROZXh0QmxvY2tUaW1lc3RhbXAoY2xpZW50LCB7IHRpbWVzdGFtcCB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV2bV9zZXROZXh0QmxvY2tUaW1lc3RhbXAiLAogICAgICBwYXJhbXM6IFtudW1iZXJUb0hleCh0aW1lc3RhbXApXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXROb25jZS5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBzZXROb25jZShjbGllbnQsIHsgYWRkcmVzcywgbm9uY2UgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXROb25jZWAsCiAgICAgIHBhcmFtczogW2FkZHJlc3MsIG51bWJlclRvSGV4KG5vbmNlKV0KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc2V0UnBjVXJsLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0UnBjVXJsKGNsaWVudCwganNvblJwY1VybCkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRScGNVcmxgLAogICAgICBwYXJhbXM6IFtqc29uUnBjVXJsXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRTdG9yYWdlQXQuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2V0U3RvcmFnZUF0KGNsaWVudCwgeyBhZGRyZXNzLCBpbmRleDogaW5kZXgyLCB2YWx1ZSB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X3NldFN0b3JhZ2VBdGAsCiAgICAgIHBhcmFtczogWwogICAgICAgIGFkZHJlc3MsCiAgICAgICAgdHlwZW9mIGluZGV4MiA9PT0gIm51bWJlciIgPyBudW1iZXJUb0hleChpbmRleDIpIDogaW5kZXgyLAogICAgICAgIHZhbHVlCiAgICAgIF0KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc25hcHNob3QuanMKICBhc3luYyBmdW5jdGlvbiBzbmFwc2hvdChjbGllbnQpIHsKICAgIHJldHVybiBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV2bV9zbmFwc2hvdCIKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc3RvcEltcGVyc29uYXRpbmdBY2NvdW50LmpzCiAgYXN5bmMgZnVuY3Rpb24gc3RvcEltcGVyc29uYXRpbmdBY2NvdW50KGNsaWVudCwgeyBhZGRyZXNzIH0pIHsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiBgJHtjbGllbnQubW9kZX1fc3RvcEltcGVyc29uYXRpbmdBY2NvdW50YCwKICAgICAgcGFyYW1zOiBbYWRkcmVzc10KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2RlY29yYXRvcnMvdGVzdC5qcwogIGZ1bmN0aW9uIHRlc3RBY3Rpb25zKHsgbW9kZTogbW9kZTIgfSkgewogICAgcmV0dXJuIChjbGllbnRfKSA9PiB7CiAgICAgIGNvbnN0IGNsaWVudCA9IGNsaWVudF8uZXh0ZW5kKCgpID0+ICh7CiAgICAgICAgbW9kZTogbW9kZTIKICAgICAgfSkpOwogICAgICByZXR1cm4gewogICAgICAgIGRyb3BUcmFuc2FjdGlvbjogKGFyZ3MpID0+IGRyb3BUcmFuc2FjdGlvbihjbGllbnQsIGFyZ3MpLAogICAgICAgIGR1bXBTdGF0ZTogKCkgPT4gZHVtcFN0YXRlKGNsaWVudCksCiAgICAgICAgZ2V0QXV0b21pbmU6ICgpID0+IGdldEF1dG9taW5lKGNsaWVudCksCiAgICAgICAgZ2V0VHhwb29sQ29udGVudDogKCkgPT4gZ2V0VHhwb29sQ29udGVudChjbGllbnQpLAogICAgICAgIGdldFR4cG9vbFN0YXR1czogKCkgPT4gZ2V0VHhwb29sU3RhdHVzKGNsaWVudCksCiAgICAgICAgaW1wZXJzb25hdGVBY2NvdW50OiAoYXJncykgPT4gaW1wZXJzb25hdGVBY2NvdW50KGNsaWVudCwgYXJncyksCiAgICAgICAgaW5jcmVhc2VUaW1lOiAoYXJncykgPT4gaW5jcmVhc2VUaW1lKGNsaWVudCwgYXJncyksCiAgICAgICAgaW5zcGVjdFR4cG9vbDogKCkgPT4gaW5zcGVjdFR4cG9vbChjbGllbnQpLAogICAgICAgIGxvYWRTdGF0ZTogKGFyZ3MpID0+IGxvYWRTdGF0ZShjbGllbnQsIGFyZ3MpLAogICAgICAgIG1pbmU6IChhcmdzKSA9PiBtaW5lKGNsaWVudCwgYXJncyksCiAgICAgICAgcmVtb3ZlQmxvY2tUaW1lc3RhbXBJbnRlcnZhbDogKCkgPT4gcmVtb3ZlQmxvY2tUaW1lc3RhbXBJbnRlcnZhbChjbGllbnQpLAogICAgICAgIHJlc2V0OiAoYXJncykgPT4gcmVzZXQoY2xpZW50LCBhcmdzKSwKICAgICAgICByZXZlcnQ6IChhcmdzKSA9PiByZXZlcnQoY2xpZW50LCBhcmdzKSwKICAgICAgICBzZW5kVW5zaWduZWRUcmFuc2FjdGlvbjogKGFyZ3MpID0+IHNlbmRVbnNpZ25lZFRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0QXV0b21pbmU6IChhcmdzKSA9PiBzZXRBdXRvbWluZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldEJhbGFuY2U6IChhcmdzKSA9PiBzZXRCYWxhbmNlKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0QmxvY2tHYXNMaW1pdDogKGFyZ3MpID0+IHNldEJsb2NrR2FzTGltaXQoY2xpZW50LCBhcmdzKSwKICAgICAgICBzZXRCbG9ja1RpbWVzdGFtcEludGVydmFsOiAoYXJncykgPT4gc2V0QmxvY2tUaW1lc3RhbXBJbnRlcnZhbChjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldENvZGU6IChhcmdzKSA9PiBzZXRDb2RlKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0Q29pbmJhc2U6IChhcmdzKSA9PiBzZXRDb2luYmFzZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldEludGVydmFsTWluaW5nOiAoYXJncykgPT4gc2V0SW50ZXJ2YWxNaW5pbmcoY2xpZW50LCBhcmdzKSwKICAgICAgICBzZXRMb2dnaW5nRW5hYmxlZDogKGFyZ3MpID0+IHNldExvZ2dpbmdFbmFibGVkKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0TWluR2FzUHJpY2U6IChhcmdzKSA9PiBzZXRNaW5HYXNQcmljZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldE5leHRCbG9ja0Jhc2VGZWVQZXJHYXM6IChhcmdzKSA9PiBzZXROZXh0QmxvY2tCYXNlRmVlUGVyR2FzKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0TmV4dEJsb2NrVGltZXN0YW1wOiAoYXJncykgPT4gc2V0TmV4dEJsb2NrVGltZXN0YW1wKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0Tm9uY2U6IChhcmdzKSA9PiBzZXROb25jZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldFJwY1VybDogKGFyZ3MpID0+IHNldFJwY1VybChjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldFN0b3JhZ2VBdDogKGFyZ3MpID0+IHNldFN0b3JhZ2VBdChjbGllbnQsIGFyZ3MpLAogICAgICAgIHNuYXBzaG90OiAoKSA9PiBzbmFwc2hvdChjbGllbnQpLAogICAgICAgIHN0b3BJbXBlcnNvbmF0aW5nQWNjb3VudDogKGFyZ3MpID0+IHN0b3BJbXBlcnNvbmF0aW5nQWNjb3VudChjbGllbnQsIGFyZ3MpCiAgICAgIH07CiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2NyZWF0ZVRlc3RDbGllbnQuanMKICBmdW5jdGlvbiBjcmVhdGVUZXN0Q2xpZW50KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsga2V5ID0gInRlc3QiLCBuYW1lID0gIlRlc3QgQ2xpZW50IiwgbW9kZTogbW9kZTIgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQoewogICAgICAuLi5wYXJhbWV0ZXJzLAogICAgICBrZXksCiAgICAgIG5hbWUsCiAgICAgIHR5cGU6ICJ0ZXN0Q2xpZW50IgogICAgfSk7CiAgICByZXR1cm4gY2xpZW50LmV4dGVuZCgoY29uZmlnKSA9PiAoewogICAgICBtb2RlOiBtb2RlMiwKICAgICAgLi4udGVzdEFjdGlvbnMoeyBtb2RlOiBtb2RlMiB9KShjb25maWcpCiAgICB9KSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L2RlcGxveUNvbnRyYWN0LmpzCiAgaW5pdF9lbmNvZGVEZXBsb3lEYXRhKCk7CiAgZnVuY3Rpb24gZGVwbG95Q29udHJhY3Qod2FsbGV0Q2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYXJncywgYnl0ZWNvZGUsIC4uLnJlcXVlc3QgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjYWxsZGF0YSA9IGVuY29kZURlcGxveURhdGEoeyBhYmk6IGFiaTIsIGFyZ3MsIGJ5dGVjb2RlIH0pOwogICAgcmV0dXJuIHNlbmRUcmFuc2FjdGlvbih3YWxsZXRDbGllbnQsIHsKICAgICAgLi4ucmVxdWVzdCwKICAgICAgZGF0YTogY2FsbGRhdGEKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC9nZXRBZGRyZXNzZXMuanMKICBpbml0X2dldEFkZHJlc3MoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRBZGRyZXNzZXMoY2xpZW50KSB7CiAgICBpZiAoY2xpZW50LmFjY291bnQ/LnR5cGUgPT09ICJsb2NhbCIpCiAgICAgIHJldHVybiBbY2xpZW50LmFjY291bnQuYWRkcmVzc107CiAgICBjb25zdCBhZGRyZXNzZXMgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7IG1ldGhvZDogImV0aF9hY2NvdW50cyIgfSwgeyBkZWR1cGU6IHRydWUgfSk7CiAgICByZXR1cm4gYWRkcmVzc2VzLm1hcCgoYWRkcmVzcykgPT4gY2hlY2tzdW1BZGRyZXNzKGFkZHJlc3MpKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvZ2V0UGVybWlzc2lvbnMuanMKICBhc3luYyBmdW5jdGlvbiBnZXRQZXJtaXNzaW9ucyhjbGllbnQpIHsKICAgIGNvbnN0IHBlcm1pc3Npb25zID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoeyBtZXRob2Q6ICJ3YWxsZXRfZ2V0UGVybWlzc2lvbnMiIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgcmV0dXJuIHBlcm1pc3Npb25zOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC9yZXF1ZXN0QWRkcmVzc2VzLmpzCiAgaW5pdF9nZXRBZGRyZXNzKCk7CiAgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdEFkZHJlc3NlcyhjbGllbnQpIHsKICAgIGNvbnN0IGFkZHJlc3NlcyA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsgbWV0aG9kOiAiZXRoX3JlcXVlc3RBY2NvdW50cyIgfSwgeyBkZWR1cGU6IHRydWUsIHJldHJ5Q291bnQ6IDAgfSk7CiAgICByZXR1cm4gYWRkcmVzc2VzLm1hcCgoYWRkcmVzcykgPT4gZ2V0QWRkcmVzcyhhZGRyZXNzKSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3JlcXVlc3RQZXJtaXNzaW9ucy5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RQZXJtaXNzaW9ucyhjbGllbnQsIHBlcm1pc3Npb25zKSB7CiAgICByZXR1cm4gY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ3YWxsZXRfcmVxdWVzdFBlcm1pc3Npb25zIiwKICAgICAgcGFyYW1zOiBbcGVybWlzc2lvbnNdCiAgICB9LCB7IHJldHJ5Q291bnQ6IDAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NpZ25NZXNzYWdlLmpzCiAgaW5pdF9wYXJzZUFjY291bnQoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2lnbk1lc3NhZ2UoY2xpZW50LCB7IGFjY291bnQ6IGFjY291bnRfID0gY2xpZW50LmFjY291bnQsIG1lc3NhZ2UgfSkgewogICAgaWYgKCFhY2NvdW50XykKICAgICAgdGhyb3cgbmV3IEFjY291bnROb3RGb3VuZEVycm9yKHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2FjdGlvbnMvd2FsbGV0L3NpZ25NZXNzYWdlIgogICAgICB9KTsKICAgIGNvbnN0IGFjY291bnQgPSBwYXJzZUFjY291bnQoYWNjb3VudF8pOwogICAgaWYgKGFjY291bnQuc2lnbk1lc3NhZ2UpCiAgICAgIHJldHVybiBhY2NvdW50LnNpZ25NZXNzYWdlKHsgbWVzc2FnZSB9KTsKICAgIGNvbnN0IG1lc3NhZ2VfID0gKCgpID0+IHsKICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gc3RyaW5nVG9IZXgobWVzc2FnZSk7CiAgICAgIGlmIChtZXNzYWdlLnJhdyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpCiAgICAgICAgcmV0dXJuIHRvSGV4KG1lc3NhZ2UucmF3KTsKICAgICAgcmV0dXJuIG1lc3NhZ2UucmF3OwogICAgfSkoKTsKICAgIHJldHVybiBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogInBlcnNvbmFsX3NpZ24iLAogICAgICBwYXJhbXM6IFttZXNzYWdlXywgYWNjb3VudC5hZGRyZXNzXQogICAgfSwgeyByZXRyeUNvdW50OiAwIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC9zaWduVHJhbnNhY3Rpb24uanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X3RyYW5zYWN0aW9uUmVxdWVzdCgpOwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNpZ25UcmFuc2FjdGlvbihjbGllbnQsIHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudF8gPSBjbGllbnQuYWNjb3VudCwgY2hhaW4gPSBjbGllbnQuY2hhaW4sIC4uLnRyYW5zYWN0aW9uIH0gPSBwYXJhbWV0ZXJzOwogICAgaWYgKCFhY2NvdW50XykKICAgICAgdGhyb3cgbmV3IEFjY291bnROb3RGb3VuZEVycm9yKHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2FjdGlvbnMvd2FsbGV0L3NpZ25UcmFuc2FjdGlvbiIKICAgICAgfSk7CiAgICBjb25zdCBhY2NvdW50ID0gcGFyc2VBY2NvdW50KGFjY291bnRfKTsKICAgIGFzc2VydFJlcXVlc3QoewogICAgICBhY2NvdW50LAogICAgICAuLi5wYXJhbWV0ZXJzCiAgICB9KTsKICAgIGNvbnN0IGNoYWluSWQgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRDaGFpbklkLCAiZ2V0Q2hhaW5JZCIpKHt9KTsKICAgIGlmIChjaGFpbiAhPT0gbnVsbCkKICAgICAgYXNzZXJ0Q3VycmVudENoYWluKHsKICAgICAgICBjdXJyZW50Q2hhaW5JZDogY2hhaW5JZCwKICAgICAgICBjaGFpbgogICAgICB9KTsKICAgIGNvbnN0IGZvcm1hdHRlcnM0ID0gY2hhaW4/LmZvcm1hdHRlcnMgfHwgY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzOwogICAgY29uc3QgZm9ybWF0ID0gZm9ybWF0dGVyczQ/LnRyYW5zYWN0aW9uUmVxdWVzdD8uZm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgIGlmIChhY2NvdW50LnNpZ25UcmFuc2FjdGlvbikKICAgICAgcmV0dXJuIGFjY291bnQuc2lnblRyYW5zYWN0aW9uKHsKICAgICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgICBjaGFpbklkCiAgICAgIH0sIHsgc2VyaWFsaXplcjogY2xpZW50LmNoYWluPy5zZXJpYWxpemVycz8udHJhbnNhY3Rpb24gfSk7CiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfc2lnblRyYW5zYWN0aW9uIiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgewogICAgICAgICAgLi4uZm9ybWF0KHRyYW5zYWN0aW9uKSwKICAgICAgICAgIGNoYWluSWQ6IG51bWJlclRvSGV4KGNoYWluSWQpLAogICAgICAgICAgZnJvbTogYWNjb3VudC5hZGRyZXNzCiAgICAgICAgfQogICAgICBdCiAgICB9LCB7IHJldHJ5Q291bnQ6IDAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NpZ25UeXBlZERhdGEuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNpZ25UeXBlZERhdGEoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFjY291bnQ6IGFjY291bnRfID0gY2xpZW50LmFjY291bnQsIGRvbWFpbiwgbWVzc2FnZSwgcHJpbWFyeVR5cGUgfSA9IHBhcmFtZXRlcnM7CiAgICBpZiAoIWFjY291bnRfKQogICAgICB0aHJvdyBuZXcgQWNjb3VudE5vdEZvdW5kRXJyb3IoewogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvYWN0aW9ucy93YWxsZXQvc2lnblR5cGVkRGF0YSIKICAgICAgfSk7CiAgICBjb25zdCBhY2NvdW50ID0gcGFyc2VBY2NvdW50KGFjY291bnRfKTsKICAgIGNvbnN0IHR5cGVzID0gewogICAgICBFSVA3MTJEb21haW46IGdldFR5cGVzRm9yRUlQNzEyRG9tYWluKHsgZG9tYWluIH0pLAogICAgICAuLi5wYXJhbWV0ZXJzLnR5cGVzCiAgICB9OwogICAgdmFsaWRhdGVUeXBlZERhdGEoeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9KTsKICAgIGlmIChhY2NvdW50LnNpZ25UeXBlZERhdGEpCiAgICAgIHJldHVybiBhY2NvdW50LnNpZ25UeXBlZERhdGEoeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9KTsKICAgIGNvbnN0IHR5cGVkRGF0YSA9IHNlcmlhbGl6ZVR5cGVkRGF0YSh7IGRvbWFpbiwgbWVzc2FnZSwgcHJpbWFyeVR5cGUsIHR5cGVzIH0pOwogICAgcmV0dXJuIGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX3NpZ25UeXBlZERhdGFfdjQiLAogICAgICBwYXJhbXM6IFthY2NvdW50LmFkZHJlc3MsIHR5cGVkRGF0YV0KICAgIH0sIHsgcmV0cnlDb3VudDogMCB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvc3dpdGNoQ2hhaW4uanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc3dpdGNoQ2hhaW4oY2xpZW50LCB7IGlkIH0pIHsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAid2FsbGV0X3N3aXRjaEV0aGVyZXVtQ2hhaW4iLAogICAgICBwYXJhbXM6IFsKICAgICAgICB7CiAgICAgICAgICBjaGFpbklkOiBudW1iZXJUb0hleChpZCkKICAgICAgICB9CiAgICAgIF0KICAgIH0sIHsgcmV0cnlDb3VudDogMCB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvd2F0Y2hBc3NldC5qcwogIGFzeW5jIGZ1bmN0aW9uIHdhdGNoQXNzZXQoY2xpZW50LCBwYXJhbXMpIHsKICAgIGNvbnN0IGFkZGVkID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ3YWxsZXRfd2F0Y2hBc3NldCIsCiAgICAgIHBhcmFtcwogICAgfSwgeyByZXRyeUNvdW50OiAwIH0pOwogICAgcmV0dXJuIGFkZGVkOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2RlY29yYXRvcnMvd2FsbGV0LmpzCiAgZnVuY3Rpb24gd2FsbGV0QWN0aW9ucyhjbGllbnQpIHsKICAgIHJldHVybiB7CiAgICAgIGFkZENoYWluOiAoYXJncykgPT4gYWRkQ2hhaW4oY2xpZW50LCBhcmdzKSwKICAgICAgZGVwbG95Q29udHJhY3Q6IChhcmdzKSA9PiBkZXBsb3lDb250cmFjdChjbGllbnQsIGFyZ3MpLAogICAgICBnZXRBZGRyZXNzZXM6ICgpID0+IGdldEFkZHJlc3NlcyhjbGllbnQpLAogICAgICBnZXRDaGFpbklkOiAoKSA9PiBnZXRDaGFpbklkKGNsaWVudCksCiAgICAgIGdldFBlcm1pc3Npb25zOiAoKSA9PiBnZXRQZXJtaXNzaW9ucyhjbGllbnQpLAogICAgICBwcmVwYXJlVHJhbnNhY3Rpb25SZXF1ZXN0OiAoYXJncykgPT4gcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdChjbGllbnQsIGFyZ3MpLAogICAgICByZXF1ZXN0QWRkcmVzc2VzOiAoKSA9PiByZXF1ZXN0QWRkcmVzc2VzKGNsaWVudCksCiAgICAgIHJlcXVlc3RQZXJtaXNzaW9uczogKGFyZ3MpID0+IHJlcXVlc3RQZXJtaXNzaW9ucyhjbGllbnQsIGFyZ3MpLAogICAgICBzZW5kUmF3VHJhbnNhY3Rpb246IChhcmdzKSA9PiBzZW5kUmF3VHJhbnNhY3Rpb24oY2xpZW50LCBhcmdzKSwKICAgICAgc2VuZFRyYW5zYWN0aW9uOiAoYXJncykgPT4gc2VuZFRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgIHNpZ25NZXNzYWdlOiAoYXJncykgPT4gc2lnbk1lc3NhZ2UoY2xpZW50LCBhcmdzKSwKICAgICAgc2lnblRyYW5zYWN0aW9uOiAoYXJncykgPT4gc2lnblRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgIHNpZ25UeXBlZERhdGE6IChhcmdzKSA9PiBzaWduVHlwZWREYXRhKGNsaWVudCwgYXJncyksCiAgICAgIHN3aXRjaENoYWluOiAoYXJncykgPT4gc3dpdGNoQ2hhaW4oY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hBc3NldDogKGFyZ3MpID0+IHdhdGNoQXNzZXQoY2xpZW50LCBhcmdzKSwKICAgICAgd3JpdGVDb250cmFjdDogKGFyZ3MpID0+IHdyaXRlQ29udHJhY3QoY2xpZW50LCBhcmdzKQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2xpZW50cy9jcmVhdGVXYWxsZXRDbGllbnQuanMKICBmdW5jdGlvbiBjcmVhdGVXYWxsZXRDbGllbnQocGFyYW1ldGVycykgewogICAgY29uc3QgeyBrZXkgPSAid2FsbGV0IiwgbmFtZSA9ICJXYWxsZXQgQ2xpZW50IiwgdHJhbnNwb3J0IH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQ2xpZW50KHsKICAgICAgLi4ucGFyYW1ldGVycywKICAgICAga2V5LAogICAgICBuYW1lLAogICAgICB0cmFuc3BvcnQsCiAgICAgIHR5cGU6ICJ3YWxsZXRDbGllbnQiCiAgICB9KTsKICAgIHJldHVybiBjbGllbnQuZXh0ZW5kKHdhbGxldEFjdGlvbnMpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL3RyYW5zcG9ydHMvd2ViU29ja2V0LmpzCiAgaW5pdF9yZXF1ZXN0KCk7CiAgZnVuY3Rpb24gd2ViU29ja2V0KHVybCwgY29uZmlnID0ge30pIHsKICAgIGNvbnN0IHsga2VlcEFsaXZlLCBrZXkgPSAid2ViU29ja2V0IiwgbmFtZSA9ICJXZWJTb2NrZXQgSlNPTi1SUEMiLCByZWNvbm5lY3QsIHJldHJ5RGVsYXkgfSA9IGNvbmZpZzsKICAgIHJldHVybiAoeyBjaGFpbiwgcmV0cnlDb3VudDogcmV0cnlDb3VudF8sIHRpbWVvdXQ6IHRpbWVvdXRfIH0pID0+IHsKICAgICAgY29uc3QgcmV0cnlDb3VudCA9IGNvbmZpZy5yZXRyeUNvdW50ID8/IHJldHJ5Q291bnRfOwogICAgICBjb25zdCB0aW1lb3V0ID0gdGltZW91dF8gPz8gY29uZmlnLnRpbWVvdXQgPz8gMWU0OwogICAgICBjb25zdCB1cmxfID0gdXJsIHx8IGNoYWluPy5ycGNVcmxzLmRlZmF1bHQud2ViU29ja2V0Py5bMF07CiAgICAgIGlmICghdXJsXykKICAgICAgICB0aHJvdyBuZXcgVXJsUmVxdWlyZWRFcnJvcigpOwogICAgICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICAgICAgY29uc3QgYm9keSA9IHsgbWV0aG9kLCBwYXJhbXMgfTsKICAgICAgICAgIGNvbnN0IHJwY0NsaWVudCA9IGF3YWl0IGdldFdlYlNvY2tldFJwY0NsaWVudCh1cmxfLCB7CiAgICAgICAgICAgIGtlZXBBbGl2ZSwKICAgICAgICAgICAgcmVjb25uZWN0CiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IHsgZXJyb3IsIHJlc3VsdCB9ID0gYXdhaXQgcnBjQ2xpZW50LnJlcXVlc3RBc3luYyh7CiAgICAgICAgICAgIGJvZHksCiAgICAgICAgICAgIHRpbWVvdXQKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGVycm9yKQogICAgICAgICAgICB0aHJvdyBuZXcgUnBjUmVxdWVzdEVycm9yKHsKICAgICAgICAgICAgICBib2R5LAogICAgICAgICAgICAgIGVycm9yLAogICAgICAgICAgICAgIHVybDogdXJsXwogICAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfSwKICAgICAgICByZXRyeUNvdW50LAogICAgICAgIHJldHJ5RGVsYXksCiAgICAgICAgdGltZW91dCwKICAgICAgICB0eXBlOiAid2ViU29ja2V0IgogICAgICB9LCB7CiAgICAgICAgZ2V0U29ja2V0KCkgewogICAgICAgICAgcmV0dXJuIGdldFNvY2tldCh1cmxfKTsKICAgICAgICB9LAogICAgICAgIGdldFJwY0NsaWVudCgpIHsKICAgICAgICAgIHJldHVybiBnZXRXZWJTb2NrZXRScGNDbGllbnQodXJsXyk7CiAgICAgICAgfSwKICAgICAgICBhc3luYyBzdWJzY3JpYmUoeyBwYXJhbXMsIG9uRGF0YSwgb25FcnJvciB9KSB7CiAgICAgICAgICBjb25zdCBycGNDbGllbnQgPSBhd2FpdCBnZXRXZWJTb2NrZXRScGNDbGllbnQodXJsXyk7CiAgICAgICAgICBjb25zdCB7IHJlc3VsdDogc3Vic2NyaXB0aW9uSWQgfSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHJwY0NsaWVudC5yZXF1ZXN0KHsKICAgICAgICAgICAgYm9keTogewogICAgICAgICAgICAgIG1ldGhvZDogImV0aF9zdWJzY3JpYmUiLAogICAgICAgICAgICAgIHBhcmFtcwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbkVycm9yKGVycm9yKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25SZXNwb25zZShyZXNwb25zZSkgewogICAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikgewogICAgICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlLmVycm9yKTsKICAgICAgICAgICAgICAgIG9uRXJyb3I/LihyZXNwb25zZS5lcnJvcik7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UuaWQgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLm1ldGhvZCAhPT0gImV0aF9zdWJzY3JpcHRpb24iKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIG9uRGF0YShyZXNwb25zZS5wYXJhbXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KSk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBzdWJzY3JpcHRpb25JZCwKICAgICAgICAgICAgYXN5bmMgdW5zdWJzY3JpYmUoKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBycGNDbGllbnQucmVxdWVzdCh7CiAgICAgICAgICAgICAgICBib2R5OiB7CiAgICAgICAgICAgICAgICAgIG1ldGhvZDogImV0aF91bnN1YnNjcmliZSIsCiAgICAgICAgICAgICAgICAgIHBhcmFtczogW3N1YnNjcmlwdGlvbklkXQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIG9uUmVzcG9uc2U6IHJlc29sdmUKICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9KTsKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2luZGV4LmpzCiAgaW5pdF9hYmlzKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2FkZHJlc3MuanMKICB2YXIgemVyb0FkZHJlc3MgPSAiMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9pbmRleC5qcwogIGluaXRfY29udHJhY3RzKCk7CiAgaW5pdF91bml0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL251bWJlci5qcwogIHZhciBtYXhJbnQ4ID0gMm4gKiogKDhuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDE2ID0gMm4gKiogKDE2biAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQyNCA9IDJuICoqICgyNG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MzIgPSAybiAqKiAoMzJuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDQwID0gMm4gKiogKDQwbiAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQ0OCA9IDJuICoqICg0OG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50NTYgPSAybiAqKiAoNTZuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDY0ID0gMm4gKiogKDY0biAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQ3MiA9IDJuICoqICg3Mm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50ODAgPSAybiAqKiAoODBuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDg4ID0gMm4gKiogKDg4biAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQ5NiA9IDJuICoqICg5Nm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTA0ID0gMm4gKiogKDEwNG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTEyID0gMm4gKiogKDExMm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTIwID0gMm4gKiogKDEyMG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTI4ID0gMm4gKiogKDEyOG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTM2ID0gMm4gKiogKDEzNm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTQ0ID0gMm4gKiogKDE0NG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTUyID0gMm4gKiogKDE1Mm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTYwID0gMm4gKiogKDE2MG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTY4ID0gMm4gKiogKDE2OG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTc2ID0gMm4gKiogKDE3Nm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTg0ID0gMm4gKiogKDE4NG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTkyID0gMm4gKiogKDE5Mm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjAwID0gMm4gKiogKDIwMG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjA4ID0gMm4gKiogKDIwOG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjE2ID0gMm4gKiogKDIxNm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjI0ID0gMm4gKiogKDIyNG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjMyID0gMm4gKiogKDIzMm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjQwID0gMm4gKiogKDI0MG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjQ4ID0gMm4gKiogKDI0OG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjU2ID0gMm4gKiogKDI1Nm4gLSAxbikgLSAxbjsKICB2YXIgbWluSW50OCA9IC0oMm4gKiogKDhuIC0gMW4pKTsKICB2YXIgbWluSW50MTYgPSAtKDJuICoqICgxNm4gLSAxbikpOwogIHZhciBtaW5JbnQyNCA9IC0oMm4gKiogKDI0biAtIDFuKSk7CiAgdmFyIG1pbkludDMyID0gLSgybiAqKiAoMzJuIC0gMW4pKTsKICB2YXIgbWluSW50NDAgPSAtKDJuICoqICg0MG4gLSAxbikpOwogIHZhciBtaW5JbnQ0OCA9IC0oMm4gKiogKDQ4biAtIDFuKSk7CiAgdmFyIG1pbkludDU2ID0gLSgybiAqKiAoNTZuIC0gMW4pKTsKICB2YXIgbWluSW50NjQgPSAtKDJuICoqICg2NG4gLSAxbikpOwogIHZhciBtaW5JbnQ3MiA9IC0oMm4gKiogKDcybiAtIDFuKSk7CiAgdmFyIG1pbkludDgwID0gLSgybiAqKiAoODBuIC0gMW4pKTsKICB2YXIgbWluSW50ODggPSAtKDJuICoqICg4OG4gLSAxbikpOwogIHZhciBtaW5JbnQ5NiA9IC0oMm4gKiogKDk2biAtIDFuKSk7CiAgdmFyIG1pbkludDEwNCA9IC0oMm4gKiogKDEwNG4gLSAxbikpOwogIHZhciBtaW5JbnQxMTIgPSAtKDJuICoqICgxMTJuIC0gMW4pKTsKICB2YXIgbWluSW50MTIwID0gLSgybiAqKiAoMTIwbiAtIDFuKSk7CiAgdmFyIG1pbkludDEyOCA9IC0oMm4gKiogKDEyOG4gLSAxbikpOwogIHZhciBtaW5JbnQxMzYgPSAtKDJuICoqICgxMzZuIC0gMW4pKTsKICB2YXIgbWluSW50MTQ0ID0gLSgybiAqKiAoMTQ0biAtIDFuKSk7CiAgdmFyIG1pbkludDE1MiA9IC0oMm4gKiogKDE1Mm4gLSAxbikpOwogIHZhciBtaW5JbnQxNjAgPSAtKDJuICoqICgxNjBuIC0gMW4pKTsKICB2YXIgbWluSW50MTY4ID0gLSgybiAqKiAoMTY4biAtIDFuKSk7CiAgdmFyIG1pbkludDE3NiA9IC0oMm4gKiogKDE3Nm4gLSAxbikpOwogIHZhciBtaW5JbnQxODQgPSAtKDJuICoqICgxODRuIC0gMW4pKTsKICB2YXIgbWluSW50MTkyID0gLSgybiAqKiAoMTkybiAtIDFuKSk7CiAgdmFyIG1pbkludDIwMCA9IC0oMm4gKiogKDIwMG4gLSAxbikpOwogIHZhciBtaW5JbnQyMDggPSAtKDJuICoqICgyMDhuIC0gMW4pKTsKICB2YXIgbWluSW50MjE2ID0gLSgybiAqKiAoMjE2biAtIDFuKSk7CiAgdmFyIG1pbkludDIyNCA9IC0oMm4gKiogKDIyNG4gLSAxbikpOwogIHZhciBtaW5JbnQyMzIgPSAtKDJuICoqICgyMzJuIC0gMW4pKTsKICB2YXIgbWluSW50MjQwID0gLSgybiAqKiAoMjQwbiAtIDFuKSk7CiAgdmFyIG1pbkludDI0OCA9IC0oMm4gKiogKDI0OG4gLSAxbikpOwogIHZhciBtaW5JbnQyNTYgPSAtKDJuICoqICgyNTZuIC0gMW4pKTsKICB2YXIgbWF4VWludDggPSAybiAqKiA4biAtIDFuOwogIHZhciBtYXhVaW50MTYgPSAybiAqKiAxNm4gLSAxbjsKICB2YXIgbWF4VWludDI0ID0gMm4gKiogMjRuIC0gMW47CiAgdmFyIG1heFVpbnQzMiA9IDJuICoqIDMybiAtIDFuOwogIHZhciBtYXhVaW50NDAgPSAybiAqKiA0MG4gLSAxbjsKICB2YXIgbWF4VWludDQ4ID0gMm4gKiogNDhuIC0gMW47CiAgdmFyIG1heFVpbnQ1NiA9IDJuICoqIDU2biAtIDFuOwogIHZhciBtYXhVaW50NjQgPSAybiAqKiA2NG4gLSAxbjsKICB2YXIgbWF4VWludDcyID0gMm4gKiogNzJuIC0gMW47CiAgdmFyIG1heFVpbnQ4MCA9IDJuICoqIDgwbiAtIDFuOwogIHZhciBtYXhVaW50ODggPSAybiAqKiA4OG4gLSAxbjsKICB2YXIgbWF4VWludDk2ID0gMm4gKiogOTZuIC0gMW47CiAgdmFyIG1heFVpbnQxMDQgPSAybiAqKiAxMDRuIC0gMW47CiAgdmFyIG1heFVpbnQxMTIgPSAybiAqKiAxMTJuIC0gMW47CiAgdmFyIG1heFVpbnQxMjAgPSAybiAqKiAxMjBuIC0gMW47CiAgdmFyIG1heFVpbnQxMjggPSAybiAqKiAxMjhuIC0gMW47CiAgdmFyIG1heFVpbnQxMzYgPSAybiAqKiAxMzZuIC0gMW47CiAgdmFyIG1heFVpbnQxNDQgPSAybiAqKiAxNDRuIC0gMW47CiAgdmFyIG1heFVpbnQxNTIgPSAybiAqKiAxNTJuIC0gMW47CiAgdmFyIG1heFVpbnQxNjAgPSAybiAqKiAxNjBuIC0gMW47CiAgdmFyIG1heFVpbnQxNjggPSAybiAqKiAxNjhuIC0gMW47CiAgdmFyIG1heFVpbnQxNzYgPSAybiAqKiAxNzZuIC0gMW47CiAgdmFyIG1heFVpbnQxODQgPSAybiAqKiAxODRuIC0gMW47CiAgdmFyIG1heFVpbnQxOTIgPSAybiAqKiAxOTJuIC0gMW47CiAgdmFyIG1heFVpbnQyMDAgPSAybiAqKiAyMDBuIC0gMW47CiAgdmFyIG1heFVpbnQyMDggPSAybiAqKiAyMDhuIC0gMW47CiAgdmFyIG1heFVpbnQyMTYgPSAybiAqKiAyMTZuIC0gMW47CiAgdmFyIG1heFVpbnQyMjQgPSAybiAqKiAyMjRuIC0gMW47CiAgdmFyIG1heFVpbnQyMzIgPSAybiAqKiAyMzJuIC0gMW47CiAgdmFyIG1heFVpbnQyNDAgPSAybiAqKiAyNDBuIC0gMW47CiAgdmFyIG1heFVpbnQyNDggPSAybiAqKiAyNDhuIC0gMW47CiAgdmFyIG1heFVpbnQyNTYgPSAybiAqKiAyNTZuIC0gMW47CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vaW5kZXguanMKICBpbml0X2FiaSgpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY29udHJhY3QoKTsKICBpbml0X3JwYygpOwogIGluaXRfY2hhaW4oKTsKICBpbml0X2VuY29kaW5nKCk7CiAgaW5pdF9ub2RlKCk7CiAgaW5pdF9yZXF1ZXN0KCk7CiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF90cmFuc2FjdGlvbigpOwogIGluaXRfZGF0YSgpOwogIGluaXRfc3RhdGVPdmVycmlkZSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3R5cGVzL2VpcDExOTMuanMKICB2YXIgUHJvdmlkZXJScGNFcnJvcjIgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICAgIGNvbnN0cnVjdG9yKGNvZGUsIG1lc3NhZ2UpIHsKICAgICAgc3VwZXIobWVzc2FnZSk7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgIH0pOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRldGFpbHMiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICB9KTsKICAgICAgdGhpcy5jb2RlID0gY29kZTsKICAgICAgdGhpcy5kZXRhaWxzID0gbWVzc2FnZTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2luZGV4LmpzCiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZURlcGxveURhdGEuanMKICBpbml0X2FiaSgpOwogIGluaXRfZGVjb2RlQWJpUGFyYW1ldGVycygpOwogIHZhciBkb2NzUGF0aDggPSAiL2RvY3MvY29udHJhY3QvZGVjb2RlRGVwbG95RGF0YSI7CiAgZnVuY3Rpb24gZGVjb2RlRGVwbG95RGF0YShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYnl0ZWNvZGUsIGRhdGEgfSA9IHBhcmFtZXRlcnM7CiAgICBpZiAoZGF0YSA9PT0gYnl0ZWNvZGUpCiAgICAgIHJldHVybiB7IGJ5dGVjb2RlIH07CiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGFiaTIuZmluZCgoeCkgPT4gInR5cGUiIGluIHggJiYgeC50eXBlID09PSAiY29uc3RydWN0b3IiKTsKICAgIGlmICghZGVzY3JpcHRpb24pCiAgICAgIHRocm93IG5ldyBBYmlDb25zdHJ1Y3Rvck5vdEZvdW5kRXJyb3IoeyBkb2NzUGF0aDogZG9jc1BhdGg4IH0pOwogICAgaWYgKCEoImlucHV0cyIgaW4gZGVzY3JpcHRpb24pKQogICAgICB0aHJvdyBuZXcgQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoOCB9KTsKICAgIGlmICghZGVzY3JpcHRpb24uaW5wdXRzIHx8IGRlc2NyaXB0aW9uLmlucHV0cy5sZW5ndGggPT09IDApCiAgICAgIHRocm93IG5ldyBBYmlDb25zdHJ1Y3RvclBhcmFtc05vdEZvdW5kRXJyb3IoeyBkb2NzUGF0aDogZG9jc1BhdGg4IH0pOwogICAgY29uc3QgYXJncyA9IGRlY29kZUFiaVBhcmFtZXRlcnMoZGVzY3JpcHRpb24uaW5wdXRzLCBgMHgke2RhdGEucmVwbGFjZShieXRlY29kZSwgIiIpfWApOwogICAgcmV0dXJuIHsgYXJncywgYnl0ZWNvZGUgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vaW5kZXguanMKICBpbml0X2RlY29kZUVycm9yUmVzdWx0KCk7CiAgaW5pdF9kZWNvZGVGdW5jdGlvblJlc3VsdCgpOwogIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogIGluaXRfZW5jb2RlRGVwbG95RGF0YSgpOwogIGluaXRfZW5jb2RlRnVuY3Rpb25EYXRhKCk7CiAgaW5pdF9wcmVwYXJlRW5jb2RlRnVuY3Rpb25EYXRhKCk7CiAgaW5pdF90cmFuc2FjdGlvblJlcXVlc3QoKTsKICBpbml0X2dldEFiaUl0ZW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvY29tcGFjdFNpZ25hdHVyZVRvU2lnbmF0dXJlLmpzCiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIGNvbXBhY3RTaWduYXR1cmVUb1NpZ25hdHVyZSh7IHIsIHlQYXJpdHlBbmRTIH0pIHsKICAgIGNvbnN0IHlQYXJpdHlBbmRTX2J5dGVzID0gaGV4VG9CeXRlcyh5UGFyaXR5QW5kUyk7CiAgICBjb25zdCB5UGFyaXR5ID0geVBhcml0eUFuZFNfYnl0ZXNbMF0gJiAxMjggPyAxIDogMDsKICAgIGNvbnN0IHMgPSB5UGFyaXR5QW5kU19ieXRlczsKICAgIGlmICh5UGFyaXR5ID09PSAxKQogICAgICBzWzBdICY9IDEyNzsKICAgIHJldHVybiB7IHIsIHM6IGJ5dGVzVG9IZXgocyksIHlQYXJpdHkgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3BhcnNlQ29tcGFjdFNpZ25hdHVyZS5qcwogIGluaXRfc2VjcDI1NmsxKCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIHBhcnNlQ29tcGFjdFNpZ25hdHVyZShzaWduYXR1cmVIZXgpIHsKICAgIGNvbnN0IHsgciwgcyB9ID0gc2VjcDI1NmsxLlNpZ25hdHVyZS5mcm9tQ29tcGFjdChzaWduYXR1cmVIZXguc2xpY2UoMiwgMTMwKSk7CiAgICByZXR1cm4gewogICAgICByOiBudW1iZXJUb0hleChyLCB7IHNpemU6IDMyIH0pLAogICAgICB5UGFyaXR5QW5kUzogbnVtYmVyVG9IZXgocywgeyBzaXplOiAzMiB9KQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3BhcnNlU2lnbmF0dXJlLmpzCiAgaW5pdF9zZWNwMjU2azEoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmUyKHNpZ25hdHVyZUhleCkgewogICAgY29uc3QgeyByLCBzIH0gPSBzZWNwMjU2azEuU2lnbmF0dXJlLmZyb21Db21wYWN0KHNpZ25hdHVyZUhleC5zbGljZSgyLCAxMzApKTsKICAgIGNvbnN0IHlQYXJpdHlPclYgPSBOdW1iZXIoYDB4JHtzaWduYXR1cmVIZXguc2xpY2UoMTMwKX1gKTsKICAgIGNvbnN0IFt2LCB5UGFyaXR5XSA9ICgoKSA9PiB7CiAgICAgIGlmICh5UGFyaXR5T3JWID09PSAwIHx8IHlQYXJpdHlPclYgPT09IDEpCiAgICAgICAgcmV0dXJuIFt2b2lkIDAsIHlQYXJpdHlPclZdOwogICAgICBpZiAoeVBhcml0eU9yViA9PT0gMjcpCiAgICAgICAgcmV0dXJuIFtCaWdJbnQoeVBhcml0eU9yViksIDBdOwogICAgICBpZiAoeVBhcml0eU9yViA9PT0gMjgpCiAgICAgICAgcmV0dXJuIFtCaWdJbnQoeVBhcml0eU9yViksIDFdOwogICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeVBhcml0eU9yViB2YWx1ZSIpOwogICAgfSkoKTsKICAgIGlmICh0eXBlb2YgdiAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJldHVybiB7CiAgICAgICAgcjogbnVtYmVyVG9IZXgociwgeyBzaXplOiAzMiB9KSwKICAgICAgICBzOiBudW1iZXJUb0hleChzLCB7IHNpemU6IDMyIH0pLAogICAgICAgIHYsCiAgICAgICAgeVBhcml0eQogICAgICB9OwogICAgcmV0dXJuIHsKICAgICAgcjogbnVtYmVyVG9IZXgociwgeyBzaXplOiAzMiB9KSwKICAgICAgczogbnVtYmVyVG9IZXgocywgeyBzaXplOiAzMiB9KSwKICAgICAgeVBhcml0eQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3JlY292ZXJUcmFuc2FjdGlvbkFkZHJlc3MuanMKICBpbml0X2tlY2NhazI1NigpOwogIGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJUcmFuc2FjdGlvbkFkZHJlc3MocGFyYW1ldGVycykgewogICAgY29uc3QgeyBzZXJpYWxpemVkVHJhbnNhY3Rpb24sIHNpZ25hdHVyZTogc2lnbmF0dXJlXyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gcGFyc2VUcmFuc2FjdGlvbihzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmF0dXJlXyA/PyB7CiAgICAgIHI6IHRyYW5zYWN0aW9uLnIsCiAgICAgIHM6IHRyYW5zYWN0aW9uLnMsCiAgICAgIHY6IHRyYW5zYWN0aW9uLnYsCiAgICAgIHlQYXJpdHk6IHRyYW5zYWN0aW9uLnlQYXJpdHkKICAgIH07CiAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplVHJhbnNhY3Rpb24oewogICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgcjogdm9pZCAwLAogICAgICBzOiB2b2lkIDAsCiAgICAgIHY6IHZvaWQgMCwKICAgICAgeVBhcml0eTogdm9pZCAwLAogICAgICBzaWRlY2Fyczogdm9pZCAwCiAgICB9KTsKICAgIHJldHVybiBhd2FpdCByZWNvdmVyQWRkcmVzcyh7CiAgICAgIGhhc2g6IGtlY2NhazI1NihzZXJpYWxpemVkKSwKICAgICAgc2lnbmF0dXJlCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3NpZ25hdHVyZVRvQ29tcGFjdFNpZ25hdHVyZS5qcwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBzaWduYXR1cmVUb0NvbXBhY3RTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICBjb25zdCB7IHIsIHMsIHYsIHlQYXJpdHkgfSA9IHNpZ25hdHVyZTsKICAgIGNvbnN0IHlQYXJpdHlfID0gTnVtYmVyKHlQYXJpdHkgPz8gdiAtIDI3bik7CiAgICBsZXQgeVBhcml0eUFuZFMgPSBzOwogICAgaWYgKHlQYXJpdHlfID09PSAxKSB7CiAgICAgIGNvbnN0IGJ5dGVzMiA9IGhleFRvQnl0ZXMocyk7CiAgICAgIGJ5dGVzMlswXSB8PSAxMjg7CiAgICAgIHlQYXJpdHlBbmRTID0gYnl0ZXNUb0hleChieXRlczIpOwogICAgfQogICAgcmV0dXJuIHsgciwgeVBhcml0eUFuZFMgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3NlcmlhbGl6ZUNvbXBhY3RTaWduYXR1cmUuanMKICBpbml0X3NlY3AyNTZrMSgpOwogIGluaXRfZnJvbUhleCgpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZUNvbXBhY3RTaWduYXR1cmUoeyByLCB5UGFyaXR5QW5kUyB9KSB7CiAgICByZXR1cm4gYDB4JHtuZXcgc2VjcDI1NmsxLlNpZ25hdHVyZShoZXhUb0JpZ0ludChyKSwgaGV4VG9CaWdJbnQoeVBhcml0eUFuZFMpKS50b0NvbXBhY3RIZXgoKX1gOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9pbmRleC5qcwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X2Zyb21CeXRlcygpOwogIGluaXRfY2NpcDIoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL3NpZGVjYXJzVG9WZXJzaW9uZWRIYXNoZXMuanMKICBmdW5jdGlvbiBzaWRlY2Fyc1RvVmVyc2lvbmVkSGFzaGVzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgc2lkZWNhcnMsIHZlcnNpb246IHZlcnNpb24zIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgdG8gPSBwYXJhbWV0ZXJzLnRvID8/ICh0eXBlb2Ygc2lkZWNhcnNbMF0uYmxvYiA9PT0gInN0cmluZyIgPyAiaGV4IiA6ICJieXRlcyIpOwogICAgY29uc3QgaGFzaGVzID0gW107CiAgICBmb3IgKGNvbnN0IHsgY29tbWl0bWVudCB9IG9mIHNpZGVjYXJzKSB7CiAgICAgIGhhc2hlcy5wdXNoKGNvbW1pdG1lbnRUb1ZlcnNpb25lZEhhc2goewogICAgICAgIGNvbW1pdG1lbnQsCiAgICAgICAgdG8sCiAgICAgICAgdmVyc2lvbjogdmVyc2lvbjMKICAgICAgfSkpOwogICAgfQogICAgcmV0dXJuIGhhc2hlczsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYmxvYi9mcm9tQmxvYnMuanMKICBpbml0X2N1cnNvcjIoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gZnJvbUJsb2JzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IGJsb2JzID0gdHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gcGFyYW1ldGVycy5ibG9icy5tYXAoKHgpID0+IGhleFRvQnl0ZXMoeCkpIDogcGFyYW1ldGVycy5ibG9iczsKICAgIGNvbnN0IGxlbmd0aCA9IGJsb2JzLnJlZHVjZSgobGVuZ3RoMiwgYmxvYikgPT4gbGVuZ3RoMiArIGJsb2IubGVuZ3RoLCAwKTsKICAgIGNvbnN0IGRhdGEgPSBjcmVhdGVDdXJzb3IobmV3IFVpbnQ4QXJyYXkobGVuZ3RoKSk7CiAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgIGZvciAoY29uc3QgYmxvYiBvZiBibG9icykgewogICAgICBjb25zdCBjdXJzb3IgPSBjcmVhdGVDdXJzb3IoYmxvYik7CiAgICAgIHdoaWxlIChhY3RpdmUgJiYgY3Vyc29yLnBvc2l0aW9uIDwgYmxvYi5sZW5ndGgpIHsKICAgICAgICBjdXJzb3IuaW5jcmVtZW50UG9zaXRpb24oMSk7CiAgICAgICAgbGV0IGNvbnN1bWUgPSAzMTsKICAgICAgICBpZiAoYmxvYi5sZW5ndGggLSBjdXJzb3IucG9zaXRpb24gPCAzMSkKICAgICAgICAgIGNvbnN1bWUgPSBibG9iLmxlbmd0aCAtIGN1cnNvci5wb3NpdGlvbjsKICAgICAgICBmb3IgKGNvbnN0IF8gaW4gQXJyYXkuZnJvbSh7IGxlbmd0aDogY29uc3VtZSB9KSkgewogICAgICAgICAgY29uc3QgYnl0ZSA9IGN1cnNvci5yZWFkQnl0ZSgpOwogICAgICAgICAgY29uc3QgaXNUZXJtaW5hdG9yID0gYnl0ZSA9PT0gMTI4ICYmICFjdXJzb3IuaW5zcGVjdEJ5dGVzKGN1cnNvci5yZW1haW5pbmcpLmluY2x1ZGVzKDEyOCk7CiAgICAgICAgICBpZiAoaXNUZXJtaW5hdG9yKSB7CiAgICAgICAgICAgIGFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGRhdGEucHVzaEJ5dGUoYnl0ZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBjb25zdCB0cmltbWVkRGF0YSA9IGRhdGEuYnl0ZXMuc2xpY2UoMCwgZGF0YS5wb3NpdGlvbik7CiAgICByZXR1cm4gdG8gPT09ICJoZXgiID8gYnl0ZXNUb0hleCh0cmltbWVkRGF0YSkgOiB0cmltbWVkRGF0YTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMva3pnL2RlZmluZUt6Zy5qcwogIGZ1bmN0aW9uIGRlZmluZUt6Zyh7IGJsb2JUb0t6Z0NvbW1pdG1lbnQsIGNvbXB1dGVCbG9iS3pnUHJvb2YgfSkgewogICAgcmV0dXJuIHsKICAgICAgYmxvYlRvS3pnQ29tbWl0bWVudCwKICAgICAgY29tcHV0ZUJsb2JLemdQcm9vZgogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMva3pnL3NldHVwS3pnLmpzCiAgZnVuY3Rpb24gc2V0dXBLemcocGFyYW1ldGVycywgcGF0aCkgewogICAgdHJ5IHsKICAgICAgcGFyYW1ldGVycy5sb2FkVHJ1c3RlZFNldHVwKHBhdGgpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBjb25zdCBlcnJvciA9IGU7CiAgICAgIGlmICghZXJyb3IubWVzc2FnZS5pbmNsdWRlcygidHJ1c3RlZCBzZXR1cCBpcyBhbHJlYWR5IGxvYWRlZCIpKQogICAgICAgIHRocm93IGVycm9yOwogICAgfQogICAgcmV0dXJuIGRlZmluZUt6ZyhwYXJhbWV0ZXJzKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vaW5kZXguanMKICBpbml0X2NvbmNhdCgpOwogIGluaXRfZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoKTsKICBpbml0X2Zvcm1hdEV0aGVyKCk7CiAgaW5pdF9mb3JtYXRHd2VpKCk7CiAgaW5pdF9mb3JtYXRVbml0cygpOwogIGluaXRfZnJvbUhleCgpOwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfdG9FdmVudFNlbGVjdG9yKCk7CiAgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IoKTsKICBpbml0X2lzQWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzRXF1YWwoKTsKICBpbml0X2lzSGV4KCk7CiAgaW5pdF9rZWNjYWsyNTYoKTsKICBpbml0X3BhZCgpOwogIGluaXRfc2l6ZSgpOwogIGluaXRfc2xpY2UoKTsKICBpbml0X3N0cmluZ2lmeSgpOwogIGluaXRfdHJpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9pbmRleC5qcwogIHZhciBjaGFpbnNfZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KGNoYWluc19leHBvcnRzLCB7CiAgICBhYnN0cmFjdFRlc3RuZXQ6ICgpID0+IGFic3RyYWN0VGVzdG5ldCwKICAgIGFjYWxhOiAoKSA9PiBhY2FsYSwKICAgIGFuY2llbnQ4OiAoKSA9PiBhbmNpZW50OCwKICAgIGFuY2llbnQ4U2Vwb2xpYTogKCkgPT4gYW5jaWVudDhTZXBvbGlhLAogICAgYW52aWw6ICgpID0+IGFudmlsLAogICAgYXBleFRlc3RuZXQ6ICgpID0+IGFwZXhUZXN0bmV0LAogICAgYXJiaXRydW06ICgpID0+IGFyYml0cnVtLAogICAgYXJiaXRydW1Hb2VybGk6ICgpID0+IGFyYml0cnVtR29lcmxpLAogICAgYXJiaXRydW1Ob3ZhOiAoKSA9PiBhcmJpdHJ1bU5vdmEsCiAgICBhcmJpdHJ1bVNlcG9saWE6ICgpID0+IGFyYml0cnVtU2Vwb2xpYSwKICAgIGFyZW9uTmV0d29yazogKCkgPT4gYXJlb25OZXR3b3JrLAogICAgYXJlb25OZXR3b3JrVGVzdG5ldDogKCkgPT4gYXJlb25OZXR3b3JrVGVzdG5ldCwKICAgIGFydGVsYVRlc3RuZXQ6ICgpID0+IGFydGVsYVRlc3RuZXQsCiAgICBhc3NldENoYWluVGVzdG5ldDogKCkgPT4gYXNzZXRDaGFpblRlc3RuZXQsCiAgICBhc3RhcjogKCkgPT4gYXN0YXIsCiAgICBhc3RhclprRVZNOiAoKSA9PiBhc3RhclprRVZNLAogICAgYXN0YXJaa3lvdG86ICgpID0+IGFzdGFyWmt5b3RvLAogICAgYXRsZXRhT2x5bXBpYTogKCkgPT4gYXRsZXRhT2x5bXBpYSwKICAgIGF1cm9yYTogKCkgPT4gYXVyb3JhLAogICAgYXVyb3JhVGVzdG5ldDogKCkgPT4gYXVyb3JhVGVzdG5ldCwKICAgIGF1cm9yaWE6ICgpID0+IGF1cm9yaWEsCiAgICBhdmFsYW5jaGU6ICgpID0+IGF2YWxhbmNoZSwKICAgIGF2YWxhbmNoZUZ1amk6ICgpID0+IGF2YWxhbmNoZUZ1amksCiAgICBiMzogKCkgPT4gYjMsCiAgICBiM1NlcG9saWE6ICgpID0+IGIzU2Vwb2xpYSwKICAgIGJhaGFtdXQ6ICgpID0+IGJhaGFtdXQsCiAgICBiYXNlOiAoKSA9PiBiYXNlLAogICAgYmFzZUdvZXJsaTogKCkgPT4gYmFzZUdvZXJsaSwKICAgIGJhc2VTZXBvbGlhOiAoKSA9PiBiYXNlU2Vwb2xpYSwKICAgIGJlYW06ICgpID0+IGJlYW0sCiAgICBiZWFtVGVzdG5ldDogKCkgPT4gYmVhbVRlc3RuZXQsCiAgICBiZWFyTmV0d29ya0NoYWluTWFpbm5ldDogKCkgPT4gYmVhck5ldHdvcmtDaGFpbk1haW5uZXQsCiAgICBiZWFyTmV0d29ya0NoYWluVGVzdG5ldDogKCkgPT4gYmVhck5ldHdvcmtDaGFpblRlc3RuZXQsCiAgICBiZXJhY2hhaW5UZXN0bmV0OiAoKSA9PiBiZXJhY2hhaW5UZXN0bmV0LAogICAgYmVyYWNoYWluVGVzdG5ldGJBcnRpbzogKCkgPT4gYmVyYWNoYWluVGVzdG5ldGJBcnRpbywKICAgIGJldm1NYWlubmV0OiAoKSA9PiBiZXZtTWFpbm5ldCwKICAgIGJpdFRvcnJlbnQ6ICgpID0+IGJpdFRvcnJlbnQsCiAgICBiaXRUb3JyZW50VGVzdG5ldDogKCkgPT4gYml0VG9ycmVudFRlc3RuZXQsCiAgICBiaXRrdWI6ICgpID0+IGJpdGt1YiwKICAgIGJpdGt1YlRlc3RuZXQ6ICgpID0+IGJpdGt1YlRlc3RuZXQsCiAgICBibGFzdDogKCkgPT4gYmxhc3QsCiAgICBibGFzdFNlcG9saWE6ICgpID0+IGJsYXN0U2Vwb2xpYSwKICAgIGJvYjogKCkgPT4gYm9iLAogICAgYm9iU2Vwb2xpYTogKCkgPT4gYm9iU2Vwb2xpYSwKICAgIGJvYmE6ICgpID0+IGJvYmEsCiAgICBib2JhU2Vwb2xpYTogKCkgPT4gYm9iYVNlcG9saWEsCiAgICBicm9ub3M6ICgpID0+IGJyb25vcywKICAgIGJyb25vc1Rlc3RuZXQ6ICgpID0+IGJyb25vc1Rlc3RuZXQsCiAgICBic2M6ICgpID0+IGJzYywKICAgIGJzY0dyZWVuZmllbGQ6ICgpID0+IGJzY0dyZWVuZmllbGQsCiAgICBic2NUZXN0bmV0OiAoKSA9PiBic2NUZXN0bmV0LAogICAgYnRyOiAoKSA9PiBidHIsCiAgICBidHJUZXN0bmV0OiAoKSA9PiBidHJUZXN0bmV0LAogICAgYnhuOiAoKSA9PiBieG4sCiAgICBieG5UZXN0bmV0OiAoKSA9PiBieG5UZXN0bmV0LAogICAgY2FudG86ICgpID0+IGNhbnRvLAogICAgY2VsbzogKCkgPT4gY2VsbywKICAgIGNlbG9BbGZham9yZXM6ICgpID0+IGNlbG9BbGZham9yZXMsCiAgICBjaGlsaXo6ICgpID0+IGNoaWxpeiwKICAgIGNoaXBzOiAoKSA9PiBjaGlwcywKICAgIGNsYXNzaWM6ICgpID0+IGNsYXNzaWMsCiAgICBjb25mbHV4RVNwYWNlOiAoKSA9PiBjb25mbHV4RVNwYWNlLAogICAgY29uZmx1eEVTcGFjZVRlc3RuZXQ6ICgpID0+IGNvbmZsdXhFU3BhY2VUZXN0bmV0LAogICAgY29yZURhbzogKCkgPT4gY29yZURhbywKICAgIGNyYWI6ICgpID0+IGNyYWIsCiAgICBjcm9ub3M6ICgpID0+IGNyb25vcywKICAgIGNyb25vc1Rlc3RuZXQ6ICgpID0+IGNyb25vc1Rlc3RuZXQsCiAgICBjcm9ub3N6a0VWTTogKCkgPT4gY3Jvbm9zemtFVk0sCiAgICBjcm9ub3N6a0VWTVRlc3RuZXQ6ICgpID0+IGNyb25vc3prRVZNVGVzdG5ldCwKICAgIGNyb3NzYmVsbDogKCkgPT4gY3Jvc3NiZWxsLAogICAgY3VydGlzOiAoKSA9PiBjdXJ0aXMsCiAgICBjeWJlcjogKCkgPT4gY3liZXIsCiAgICBjeWJlclRlc3RuZXQ6ICgpID0+IGN5YmVyVGVzdG5ldCwKICAgIGRhcndpbmlhOiAoKSA9PiBkYXJ3aW5pYSwKICAgIGRjaGFpbjogKCkgPT4gZGNoYWluLAogICAgZGNoYWluVGVzdG5ldDogKCkgPT4gZGNoYWluVGVzdG5ldCwKICAgIGRlZmljaGFpbkV2bTogKCkgPT4gZGVmaWNoYWluRXZtLAogICAgZGVmaWNoYWluRXZtVGVzdG5ldDogKCkgPT4gZGVmaWNoYWluRXZtVGVzdG5ldCwKICAgIGRlZ2VuOiAoKSA9PiBkZWdlbiwKICAgIGRmazogKCkgPT4gZGZrLAogICAgZG9kb2NoYWluVGVzdG5ldDogKCkgPT4gZG9kb2NoYWluVGVzdG5ldCwKICAgIGRvZ2VjaGFpbjogKCkgPT4gZG9nZWNoYWluLAogICAgZHJleWVyeE1haW5uZXQ6ICgpID0+IGRyZXllcnhNYWlubmV0LAogICAgZHJleWVyeFRlc3RuZXQ6ICgpID0+IGRyZXllcnhUZXN0bmV0LAogICAgZWRnZWxlc3M6ICgpID0+IGVkZ2VsZXNzLAogICAgZWRnZWxlc3NUZXN0bmV0OiAoKSA9PiBlZGdlbGVzc1Rlc3RuZXQsCiAgICBlZGdld2FyZTogKCkgPT4gZWRnZXdhcmUsCiAgICBlZGdld2FyZVRlc3RuZXQ6ICgpID0+IGVkZ2V3YXJlVGVzdG5ldCwKICAgIGVrdGE6ICgpID0+IGVrdGEsCiAgICBla3RhVGVzdG5ldDogKCkgPT4gZWt0YVRlc3RuZXQsCiAgICBlb246ICgpID0+IGVvbiwKICAgIGVvczogKCkgPT4gZW9zLAogICAgZW9zVGVzdG5ldDogKCkgPT4gZW9zVGVzdG5ldCwKICAgIGV0aGVybGluazogKCkgPT4gZXRoZXJsaW5rLAogICAgZXRoZXJsaW5rVGVzdG5ldDogKCkgPT4gZXRoZXJsaW5rVGVzdG5ldCwKICAgIGV2bW9zOiAoKSA9PiBldm1vcywKICAgIGV2bW9zVGVzdG5ldDogKCkgPT4gZXZtb3NUZXN0bmV0LAogICAgZmFudG9tOiAoKSA9PiBmYW50b20sCiAgICBmYW50b21Tb25pY1Rlc3RuZXQ6ICgpID0+IGZhbnRvbVNvbmljVGVzdG5ldCwKICAgIGZhbnRvbVRlc3RuZXQ6ICgpID0+IGZhbnRvbVRlc3RuZXQsCiAgICBmaWJvOiAoKSA9PiBmaWJvLAogICAgZmlsZWNvaW46ICgpID0+IGZpbGVjb2luLAogICAgZmlsZWNvaW5DYWxpYnJhdGlvbjogKCkgPT4gZmlsZWNvaW5DYWxpYnJhdGlvbiwKICAgIGZpbGVjb2luSHlwZXJzcGFjZTogKCkgPT4gZmlsZWNvaW5IeXBlcnNwYWNlLAogICAgZmxhcmU6ICgpID0+IGZsYXJlLAogICAgZmxhcmVUZXN0bmV0OiAoKSA9PiBmbGFyZVRlc3RuZXQsCiAgICBmbG93TWFpbm5ldDogKCkgPT4gZmxvd01haW5uZXQsCiAgICBmbG93UHJldmlld25ldDogKCkgPT4gZmxvd1ByZXZpZXduZXQsCiAgICBmbG93VGVzdG5ldDogKCkgPT4gZmxvd1Rlc3RuZXQsCiAgICBmb3JtYTogKCkgPT4gZm9ybWEsCiAgICBmb3VuZHJ5OiAoKSA9PiBmb3VuZHJ5LAogICAgZnJheHRhbDogKCkgPT4gZnJheHRhbCwKICAgIGZyYXh0YWxUZXN0bmV0OiAoKSA9PiBmcmF4dGFsVGVzdG5ldCwKICAgIGZ1bmtpTWFpbm5ldDogKCkgPT4gZnVua2lNYWlubmV0LAogICAgZnVua2lTZXBvbGlhOiAoKSA9PiBmdW5raVNlcG9saWEsCiAgICBmdXNlOiAoKSA9PiBmdXNlLAogICAgZnVzZVNwYXJrbmV0OiAoKSA9PiBmdXNlU3BhcmtuZXQsCiAgICBnbm9zaXM6ICgpID0+IGdub3NpcywKICAgIGdub3Npc0NoaWFkbzogKCkgPT4gZ25vc2lzQ2hpYWRvLAogICAgZ29iaTogKCkgPT4gZ29iaSwKICAgIGdvZXJsaTogKCkgPT4gZ29lcmxpLAogICAgZ3Jhdml0eTogKCkgPT4gZ3Jhdml0eSwKICAgIGhhbTogKCkgPT4gaGFtLAogICAgaGFxcU1haW5uZXQ6ICgpID0+IGhhcXFNYWlubmV0LAogICAgaGFxcVRlc3RlZGdlMjogKCkgPT4gaGFxcVRlc3RlZGdlMiwKICAgIGhhcmRoYXQ6ICgpID0+IGhhcmRoYXQsCiAgICBoYXJtb255T25lOiAoKSA9PiBoYXJtb255T25lLAogICAgaGVkZXJhOiAoKSA9PiBoZWRlcmEsCiAgICBoZWRlcmFQcmV2aWV3bmV0OiAoKSA9PiBoZWRlcmFQcmV2aWV3bmV0LAogICAgaGVkZXJhVGVzdG5ldDogKCkgPT4gaGVkZXJhVGVzdG5ldCwKICAgIGhvbGVza3k6ICgpID0+IGhvbGVza3ksCiAgICBpbW11dGFibGVaa0V2bTogKCkgPT4gaW1tdXRhYmxlWmtFdm0sCiAgICBpbW11dGFibGVaa0V2bVRlc3RuZXQ6ICgpID0+IGltbXV0YWJsZVprRXZtVGVzdG5ldCwKICAgIGluRVZNOiAoKSA9PiBpbkVWTSwKICAgIGlvdGE6ICgpID0+IGlvdGEsCiAgICBpb3RhVGVzdG5ldDogKCkgPT4gaW90YVRlc3RuZXQsCiAgICBpb3RleDogKCkgPT4gaW90ZXgsCiAgICBpb3RleFRlc3RuZXQ6ICgpID0+IGlvdGV4VGVzdG5ldCwKICAgIGpiYzogKCkgPT4gamJjLAogICAgamJjVGVzdG5ldDogKCkgPT4gamJjVGVzdG5ldCwKICAgIGtha2Fyb3RTZXBvbGlhOiAoKSA9PiBrYWthcm90U2Vwb2xpYSwKICAgIGthcnVyYTogKCkgPT4ga2FydXJhLAogICAga2F2YTogKCkgPT4ga2F2YSwKICAgIGthdmFUZXN0bmV0OiAoKSA9PiBrYXZhVGVzdG5ldCwKICAgIGtjYzogKCkgPT4ga2NjLAogICAga2xheXRuOiAoKSA9PiBrbGF5dG4sCiAgICBrbGF5dG5CYW9iYWI6ICgpID0+IGtsYXl0bkJhb2JhYiwKICAgIGtvaTogKCkgPT4ga29pLAogICAga3JvbWE6ICgpID0+IGtyb21hLAogICAga3JvbWFTZXBvbGlhOiAoKSA9PiBrcm9tYVNlcG9saWEsCiAgICBsM3g6ICgpID0+IGwzeCwKICAgIGwzeFRlc3RuZXQ6ICgpID0+IGwzeFRlc3RuZXQsCiAgICBsaWdodGxpbmtQZWdhc3VzOiAoKSA9PiBsaWdodGxpbmtQZWdhc3VzLAogICAgbGlnaHRsaW5rUGhvZW5peDogKCkgPT4gbGlnaHRsaW5rUGhvZW5peCwKICAgIGxpbmVhOiAoKSA9PiBsaW5lYSwKICAgIGxpbmVhR29lcmxpOiAoKSA9PiBsaW5lYUdvZXJsaSwKICAgIGxpbmVhU2Vwb2xpYTogKCkgPT4gbGluZWFTZXBvbGlhLAogICAgbGluZWFUZXN0bmV0OiAoKSA9PiBsaW5lYVRlc3RuZXQsCiAgICBsaXNrOiAoKSA9PiBsaXNrLAogICAgbGlza1NlcG9saWE6ICgpID0+IGxpc2tTZXBvbGlhLAogICAgbG9jYWxob3N0OiAoKSA9PiBsb2NhbGhvc3QsCiAgICBsdWtzbzogKCkgPT4gbHVrc28sCiAgICBsdWtzb1Rlc3RuZXQ6ICgpID0+IGx1a3NvVGVzdG5ldCwKICAgIGx5Y2FuOiAoKSA9PiBseWNhbiwKICAgIGx5cmE6ICgpID0+IGx5cmEsCiAgICBtYWlubmV0OiAoKSA9PiBtYWlubmV0LAogICAgbWFuZGFsYTogKCkgPT4gbWFuZGFsYSwKICAgIG1hbnRhOiAoKSA9PiBtYW50YSwKICAgIG1hbnRhU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IG1hbnRhU2Vwb2xpYVRlc3RuZXQsCiAgICBtYW50YVRlc3RuZXQ6ICgpID0+IG1hbnRhVGVzdG5ldCwKICAgIG1hbnRsZTogKCkgPT4gbWFudGxlLAogICAgbWFudGxlU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IG1hbnRsZVNlcG9saWFUZXN0bmV0LAogICAgbWFudGxlVGVzdG5ldDogKCkgPT4gbWFudGxlVGVzdG5ldCwKICAgIG1lcmxpbjogKCkgPT4gbWVybGluLAogICAgbWV0YWNoYWluOiAoKSA9PiBtZXRhY2hhaW4sCiAgICBtZXRhY2hhaW5Jc3RhbmJ1bDogKCkgPT4gbWV0YWNoYWluSXN0YW5idWwsCiAgICBtZXRhbEwyOiAoKSA9PiBtZXRhbEwyLAogICAgbWV0ZXI6ICgpID0+IG1ldGVyLAogICAgbWV0ZXJUZXN0bmV0OiAoKSA9PiBtZXRlclRlc3RuZXQsCiAgICBtZXRpczogKCkgPT4gbWV0aXMsCiAgICBtZXRpc0dvZXJsaTogKCkgPT4gbWV0aXNHb2VybGksCiAgICBtZXY6ICgpID0+IG1ldiwKICAgIG1ldlRlc3RuZXQ6ICgpID0+IG1ldlRlc3RuZXQsCiAgICBtaW50U2Vwb2xpYVRlc3RuZXQ6ICgpID0+IG1pbnRTZXBvbGlhVGVzdG5ldCwKICAgIG1vZGU6ICgpID0+IG1vZGUsCiAgICBtb2RlVGVzdG5ldDogKCkgPT4gbW9kZVRlc3RuZXQsCiAgICBtb29uYmFzZUFscGhhOiAoKSA9PiBtb29uYmFzZUFscGhhLAogICAgbW9vbmJlYW06ICgpID0+IG1vb25iZWFtLAogICAgbW9vbmJlYW1EZXY6ICgpID0+IG1vb25iZWFtRGV2LAogICAgbW9vbnJpdmVyOiAoKSA9PiBtb29ucml2ZXIsCiAgICBtb3JwaEhvbGVza3k6ICgpID0+IG1vcnBoSG9sZXNreSwKICAgIG1vcnBoU2Vwb2xpYTogKCkgPT4gbW9ycGhTZXBvbGlhLAogICAgbmF1dGlsdXM6ICgpID0+IG5hdXRpbHVzLAogICAgbmVvbkRldm5ldDogKCkgPT4gbmVvbkRldm5ldCwKICAgIG5lb25NYWlubmV0OiAoKSA9PiBuZW9uTWFpbm5ldCwKICAgIG5leGk6ICgpID0+IG5leGksCiAgICBuZXhpbGl4OiAoKSA9PiBuZXhpbGl4LAogICAgb2FzaXNUZXN0bmV0OiAoKSA9PiBvYXNpc1Rlc3RuZXQsCiAgICBvYXN5czogKCkgPT4gb2FzeXMsCiAgICBva2M6ICgpID0+IG9rYywKICAgIG9vcnRNYWlubmV0RGV2OiAoKSA9PiBvb3J0TWFpbm5ldERldiwKICAgIG9wQk5COiAoKSA9PiBvcEJOQiwKICAgIG9wQk5CVGVzdG5ldDogKCkgPT4gb3BCTkJUZXN0bmV0LAogICAgb3B0aW1pc206ICgpID0+IG9wdGltaXNtLAogICAgb3B0aW1pc21Hb2VybGk6ICgpID0+IG9wdGltaXNtR29lcmxpLAogICAgb3B0aW1pc21TZXBvbGlhOiAoKSA9PiBvcHRpbWlzbVNlcG9saWEsCiAgICBvdGltRGV2bmV0OiAoKSA9PiBvdGltRGV2bmV0LAogICAgcGFsbTogKCkgPT4gcGFsbSwKICAgIHBhbG1UZXN0bmV0OiAoKSA9PiBwYWxtVGVzdG5ldCwKICAgIHBnbjogKCkgPT4gcGduLAogICAgcGduVGVzdG5ldDogKCkgPT4gcGduVGVzdG5ldCwKICAgIHBob2VuaXg6ICgpID0+IHBob2VuaXgsCiAgICBwbGF5ZmlBbGJpcmVvOiAoKSA9PiBwbGF5ZmlBbGJpcmVvLAogICAgcGxpbmdhOiAoKSA9PiBwbGluZ2EsCiAgICBwbHVtZVRlc3RuZXQ6ICgpID0+IHBsdW1lVGVzdG5ldCwKICAgIHBvbHlnb246ICgpID0+IHBvbHlnb24sCiAgICBwb2x5Z29uQW1veTogKCkgPT4gcG9seWdvbkFtb3ksCiAgICBwb2x5Z29uTXVtYmFpOiAoKSA9PiBwb2x5Z29uTXVtYmFpLAogICAgcG9seWdvblprRXZtOiAoKSA9PiBwb2x5Z29uWmtFdm0sCiAgICBwb2x5Z29uWmtFdm1DYXJkb25hOiAoKSA9PiBwb2x5Z29uWmtFdm1DYXJkb25hLAogICAgcG9seWdvblprRXZtVGVzdG5ldDogKCkgPT4gcG9seWdvblprRXZtVGVzdG5ldCwKICAgIHB1bHNlY2hhaW46ICgpID0+IHB1bHNlY2hhaW4sCiAgICBwdWxzZWNoYWluVjQ6ICgpID0+IHB1bHNlY2hhaW5WNCwKICAgIHFNYWlubmV0OiAoKSA9PiBxTWFpbm5ldCwKICAgIHFUZXN0bmV0OiAoKSA9PiBxVGVzdG5ldCwKICAgIHJlYWw6ICgpID0+IHJlYWwsCiAgICByZWRiZWxseVRlc3RuZXQ6ICgpID0+IHJlZGJlbGx5VGVzdG5ldCwKICAgIHJlZHN0b25lOiAoKSA9PiByZWRzdG9uZSwKICAgIHJleWFOZXR3b3JrOiAoKSA9PiByZXlhTmV0d29yaywKICAgIHJvbGx1eDogKCkgPT4gcm9sbHV4LAogICAgcm9sbHV4VGVzdG5ldDogKCkgPT4gcm9sbHV4VGVzdG5ldCwKICAgIHJvbmluOiAoKSA9PiByb25pbiwKICAgIHJvb3Q6ICgpID0+IHJvb3QsCiAgICByb290UG9yY2luaTogKCkgPT4gcm9vdFBvcmNpbmksCiAgICByb290c3RvY2s6ICgpID0+IHJvb3RzdG9jaywKICAgIHJvb3RzdG9ja1Rlc3RuZXQ6ICgpID0+IHJvb3RzdG9ja1Rlc3RuZXQsCiAgICByc3MzOiAoKSA9PiByc3MzLAogICAgcnNzM1NlcG9saWE6ICgpID0+IHJzczNTZXBvbGlhLAogICAgc2FpZ29uOiAoKSA9PiBzYWlnb24sCiAgICBzYXBwaGlyZTogKCkgPT4gc2FwcGhpcmUsCiAgICBzYXBwaGlyZVRlc3RuZXQ6ICgpID0+IHNhcHBoaXJlVGVzdG5ldCwKICAgIHNhdG9zaGlWTTogKCkgPT4gc2F0b3NoaVZNLAogICAgc2F0b3NoaVZNVGVzdG5ldDogKCkgPT4gc2F0b3NoaVZNVGVzdG5ldCwKICAgIHNjcm9sbDogKCkgPT4gc2Nyb2xsLAogICAgc2Nyb2xsU2Vwb2xpYTogKCkgPT4gc2Nyb2xsU2Vwb2xpYSwKICAgIHNlaTogKCkgPT4gc2VpLAogICAgc2VpRGV2bmV0OiAoKSA9PiBzZWlEZXZuZXQsCiAgICBzZWlUZXN0bmV0OiAoKSA9PiBzZWlUZXN0bmV0LAogICAgc2Vwb2xpYTogKCkgPT4gc2Vwb2xpYSwKICAgIHNoYXBlU2Vwb2xpYTogKCkgPT4gc2hhcGVTZXBvbGlhLAogICAgc2hhcmRldW1TcGhpbng6ICgpID0+IHNoYXJkZXVtU3BoaW54LAogICAgc2hpYmFyaXVtOiAoKSA9PiBzaGliYXJpdW0sCiAgICBzaGliYXJpdW1UZXN0bmV0OiAoKSA9PiBzaGliYXJpdW1UZXN0bmV0LAogICAgc2hpbW1lcjogKCkgPT4gc2hpbW1lciwKICAgIHNoaW1tZXJUZXN0bmV0OiAoKSA9PiBzaGltbWVyVGVzdG5ldCwKICAgIHNrYWxlQmxvY2tCcmF3bGVyczogKCkgPT4gc2thbGVCbG9ja0JyYXdsZXJzLAogICAgc2thbGVDYWx5cHNvOiAoKSA9PiBza2FsZUNhbHlwc28sCiAgICBza2FsZUNhbHlwc29UZXN0bmV0OiAoKSA9PiBza2FsZUNhbHlwc29UZXN0bmV0LAogICAgc2thbGVDcnlwdG9CbGFkZXM6ICgpID0+IHNrYWxlQ3J5cHRvQmxhZGVzLAogICAgc2thbGVDcnlwdG9Db2xvc3NldW06ICgpID0+IHNrYWxlQ3J5cHRvQ29sb3NzZXVtLAogICAgc2thbGVFdXJvcGE6ICgpID0+IHNrYWxlRXVyb3BhLAogICAgc2thbGVFdXJvcGFUZXN0bmV0OiAoKSA9PiBza2FsZUV1cm9wYVRlc3RuZXQsCiAgICBza2FsZUV4b3JkZTogKCkgPT4gc2thbGVFeG9yZGUsCiAgICBza2FsZUh1bWFuUHJvdG9jb2w6ICgpID0+IHNrYWxlSHVtYW5Qcm90b2NvbCwKICAgIHNrYWxlTmVidWxhOiAoKSA9PiBza2FsZU5lYnVsYSwKICAgIHNrYWxlTmVidWxhVGVzdG5ldDogKCkgPT4gc2thbGVOZWJ1bGFUZXN0bmV0LAogICAgc2thbGVSYXpvcjogKCkgPT4gc2thbGVSYXpvciwKICAgIHNrYWxlVGl0YW46ICgpID0+IHNrYWxlVGl0YW4sCiAgICBza2FsZVRpdGFuVGVzdG5ldDogKCkgPT4gc2thbGVUaXRhblRlc3RuZXQsCiAgICBza2V0Y2hwYWQ6ICgpID0+IHNrZXRjaHBhZCwKICAgIHNvbmdiaXJkOiAoKSA9PiBzb25nYmlyZCwKICAgIHNvbmdiaXJkVGVzdG5ldDogKCkgPT4gc29uZ2JpcmRUZXN0bmV0LAogICAgc3BpY3k6ICgpID0+IHNwaWN5LAogICAgc3RyYXRpczogKCkgPT4gc3RyYXRpcywKICAgIHN5c2NvaW46ICgpID0+IHN5c2NvaW4sCiAgICBzeXNjb2luVGVzdG5ldDogKCkgPT4gc3lzY29pblRlc3RuZXQsCiAgICB0YWlrbzogKCkgPT4gdGFpa28sCiAgICB0YWlrb0hla2xhOiAoKSA9PiB0YWlrb0hla2xhLAogICAgdGFpa29Kb2xuaXI6ICgpID0+IHRhaWtvSm9sbmlyLAogICAgdGFpa29LYXRsYTogKCkgPT4gdGFpa29LYXRsYSwKICAgIHRhaWtvVGVzdG5ldFNlcG9saWE6ICgpID0+IHRhaWtvVGVzdG5ldFNlcG9saWEsCiAgICB0YXJheGE6ICgpID0+IHRhcmF4YSwKICAgIHRhcmF4YVRlc3RuZXQ6ICgpID0+IHRhcmF4YVRlc3RuZXQsCiAgICB0ZWxjb2luVGVzdG5ldDogKCkgPT4gdGVsY29pblRlc3RuZXQsCiAgICB0ZWxvczogKCkgPT4gdGVsb3MsCiAgICB0ZWxvc1Rlc3RuZXQ6ICgpID0+IHRlbG9zVGVzdG5ldCwKICAgIHRlbmV0OiAoKSA9PiB0ZW5ldCwKICAgIHRoYWlDaGFpbjogKCkgPT4gdGhhaUNoYWluLAogICAgdGh1bmRlclRlc3RuZXQ6ICgpID0+IHRodW5kZXJUZXN0bmV0LAogICAgdW5yZWFsOiAoKSA9PiB1bnJlYWwsCiAgICB2ZWNoYWluOiAoKSA9PiB2ZWNoYWluLAogICAgd2FuY2hhaW46ICgpID0+IHdhbmNoYWluLAogICAgd2FuY2hhaW5UZXN0bmV0OiAoKSA9PiB3YW5jaGFpblRlc3RuZXQsCiAgICB3ZW1peDogKCkgPT4gd2VtaXgsCiAgICB3ZW1peFRlc3RuZXQ6ICgpID0+IHdlbWl4VGVzdG5ldCwKICAgIHgxVGVzdG5ldDogKCkgPT4geExheWVyVGVzdG5ldCwKICAgIHhMYXllcjogKCkgPT4geExheWVyLAogICAgeExheWVyVGVzdG5ldDogKCkgPT4geExheWVyVGVzdG5ldCwKICAgIHhhaTogKCkgPT4geGFpLAogICAgeGFpVGVzdG5ldDogKCkgPT4geGFpVGVzdG5ldCwKICAgIHhkYzogKCkgPT4geGRjLAogICAgeGRjVGVzdG5ldDogKCkgPT4geGRjVGVzdG5ldCwKICAgIHhyU2Vwb2xpYTogKCkgPT4geHJTZXBvbGlhLAogICAgeW9vbGRvVmVyc2U6ICgpID0+IHlvb2xkb1ZlcnNlLAogICAgeW9vbGRvVmVyc2VUZXN0bmV0OiAoKSA9PiB5b29sZG9WZXJzZVRlc3RuZXQsCiAgICB6ZXRhY2hhaW46ICgpID0+IHpldGFjaGFpbiwKICAgIHpldGFjaGFpbkF0aGVuc1Rlc3RuZXQ6ICgpID0+IHpldGFjaGFpbkF0aGVuc1Rlc3RuZXQsCiAgICB6aGVqaWFuZzogKCkgPT4gemhlamlhbmcsCiAgICB6aWxsaXFhOiAoKSA9PiB6aWxsaXFhLAogICAgemlsbGlxYVRlc3RuZXQ6ICgpID0+IHppbGxpcWFUZXN0bmV0LAogICAgemlyY3VpdFRlc3RuZXQ6ICgpID0+IHppcmN1aXRUZXN0bmV0LAogICAgemtGYWlyOiAoKSA9PiB6a0ZhaXIsCiAgICB6a0ZhaXJUZXN0bmV0OiAoKSA9PiB6a0ZhaXJUZXN0bmV0LAogICAgemtMaW5rTm92YTogKCkgPT4gemtMaW5rTm92YSwKICAgIHprTGlua05vdmFTZXBvbGlhVGVzdG5ldDogKCkgPT4gemtMaW5rTm92YVNlcG9saWFUZXN0bmV0LAogICAgemtTeW5jOiAoKSA9PiB6a3N5bmMsCiAgICB6a1N5bmNJbk1lbW9yeU5vZGU6ICgpID0+IHprc3luY0luTWVtb3J5Tm9kZSwKICAgIHprU3luY0xvY2FsTm9kZTogKCkgPT4gemtzeW5jTG9jYWxOb2RlLAogICAgemtTeW5jU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IHprc3luY1NlcG9saWFUZXN0bmV0LAogICAgemtzeW5jOiAoKSA9PiB6a3N5bmMsCiAgICB6a3N5bmNJbk1lbW9yeU5vZGU6ICgpID0+IHprc3luY0luTWVtb3J5Tm9kZSwKICAgIHprc3luY0xvY2FsTm9kZTogKCkgPT4gemtzeW5jTG9jYWxOb2RlLAogICAgemtzeW5jU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IHprc3luY1NlcG9saWFUZXN0bmV0LAogICAgem9yYTogKCkgPT4gem9yYSwKICAgIHpvcmFTZXBvbGlhOiAoKSA9PiB6b3JhU2Vwb2xpYSwKICAgIHpvcmFUZXN0bmV0OiAoKSA9PiB6b3JhVGVzdG5ldAogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9mb3JtYXR0ZXJzLmpzCiAgaW5pdF9mcm9tSGV4KCk7CiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGluaXRfdHJhbnNhY3Rpb25SZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL2NvbnN0YW50cy9udW1iZXIuanMKICB2YXIgZ2FzUGVyUHViZGF0YURlZmF1bHQgPSA1MDAwMG47CiAgdmFyIG1heEJ5dGVjb2RlU2l6ZSA9IG1heFVpbnQxNiAqIDMybjsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvZm9ybWF0dGVycy5qcwogIHZhciBmb3JtYXR0ZXJzID0gewogICAgYmxvY2s6IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVCbG9jayh7CiAgICAgIGZvcm1hdChhcmdzKSB7CiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25zID0gYXJncy50cmFuc2FjdGlvbnM/Lm1hcCgodHJhbnNhY3Rpb24pID0+IHsKICAgICAgICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24gPT09ICJzdHJpbmciKQogICAgICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXR0ZXJzLnRyYW5zYWN0aW9uPy5mb3JtYXQodHJhbnNhY3Rpb24pOwogICAgICAgICAgaWYgKGZvcm1hdHRlZC50eXBlSGV4ID09PSAiMHg3MSIpCiAgICAgICAgICAgIGZvcm1hdHRlZC50eXBlID0gImVpcDcxMiI7CiAgICAgICAgICBlbHNlIGlmIChmb3JtYXR0ZWQudHlwZUhleCA9PT0gIjB4ZmYiKQogICAgICAgICAgICBmb3JtYXR0ZWQudHlwZSA9ICJwcmlvcml0eSI7CiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBsMUJhdGNoTnVtYmVyOiBhcmdzLmwxQmF0Y2hOdW1iZXIgPyBoZXhUb0JpZ0ludChhcmdzLmwxQmF0Y2hOdW1iZXIpIDogbnVsbCwKICAgICAgICAgIGwxQmF0Y2hUaW1lc3RhbXA6IGFyZ3MubDFCYXRjaFRpbWVzdGFtcCA/IGhleFRvQmlnSW50KGFyZ3MubDFCYXRjaFRpbWVzdGFtcCkgOiBudWxsLAogICAgICAgICAgdHJhbnNhY3Rpb25zCiAgICAgICAgfTsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvbjogLyogQF9fUFVSRV9fICovIGRlZmluZVRyYW5zYWN0aW9uKHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHt9OwogICAgICAgIGlmIChhcmdzLnR5cGUgPT09ICIweDcxIikKICAgICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAiZWlwNzEyIjsKICAgICAgICBlbHNlIGlmIChhcmdzLnR5cGUgPT09ICIweGZmIikKICAgICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAicHJpb3JpdHkiOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgICAgIGwxQmF0Y2hOdW1iZXI6IGFyZ3MubDFCYXRjaE51bWJlciA/IGhleFRvQmlnSW50KGFyZ3MubDFCYXRjaE51bWJlcikgOiBudWxsLAogICAgICAgICAgbDFCYXRjaFR4SW5kZXg6IGFyZ3MubDFCYXRjaFR4SW5kZXggPyBoZXhUb0JpZ0ludChhcmdzLmwxQmF0Y2hUeEluZGV4KSA6IG51bGwKICAgICAgICB9OwogICAgICB9CiAgICB9KSwKICAgIHRyYW5zYWN0aW9uUmVjZWlwdDogLyogQF9fUFVSRV9fICovIGRlZmluZVRyYW5zYWN0aW9uUmVjZWlwdCh7CiAgICAgIGZvcm1hdChhcmdzKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGwxQmF0Y2hOdW1iZXI6IGFyZ3MubDFCYXRjaE51bWJlciA/IGhleFRvQmlnSW50KGFyZ3MubDFCYXRjaE51bWJlcikgOiBudWxsLAogICAgICAgICAgbDFCYXRjaFR4SW5kZXg6IGFyZ3MubDFCYXRjaFR4SW5kZXggPyBoZXhUb0JpZ0ludChhcmdzLmwxQmF0Y2hUeEluZGV4KSA6IG51bGwsCiAgICAgICAgICBsb2dzOiBhcmdzLmxvZ3MubWFwKChsb2cpID0+IHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAuLi5mb3JtYXRMb2cobG9nKSwKICAgICAgICAgICAgICBsMUJhdGNoTnVtYmVyOiBsb2cubDFCYXRjaE51bWJlciA/IGhleFRvQmlnSW50KGxvZy5sMUJhdGNoTnVtYmVyKSA6IG51bGwsCiAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Mb2dJbmRleDogaGV4VG9OdW1iZXIobG9nLnRyYW5zYWN0aW9uTG9nSW5kZXgpLAogICAgICAgICAgICAgIGxvZ1R5cGU6IGxvZy5sb2dUeXBlCiAgICAgICAgICAgIH07CiAgICAgICAgICB9KSwKICAgICAgICAgIGwyVG9MMUxvZ3M6IGFyZ3MubDJUb0wxTG9ncy5tYXAoKGwyVG9MMUxvZykgPT4gewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIGJsb2NrTnVtYmVyOiBoZXhUb0JpZ0ludChsMlRvTDFMb2cuYmxvY2tIYXNoKSwKICAgICAgICAgICAgICBibG9ja0hhc2g6IGwyVG9MMUxvZy5ibG9ja0hhc2gsCiAgICAgICAgICAgICAgbDFCYXRjaE51bWJlcjogaGV4VG9CaWdJbnQobDJUb0wxTG9nLmwxQmF0Y2hOdW1iZXIpLAogICAgICAgICAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IGhleFRvQmlnSW50KGwyVG9MMUxvZy50cmFuc2FjdGlvbkluZGV4KSwKICAgICAgICAgICAgICBzaGFyZElkOiBoZXhUb0JpZ0ludChsMlRvTDFMb2cuc2hhcmRJZCksCiAgICAgICAgICAgICAgaXNTZXJ2aWNlOiBsMlRvTDFMb2cuaXNTZXJ2aWNlLAogICAgICAgICAgICAgIHNlbmRlcjogbDJUb0wxTG9nLnNlbmRlciwKICAgICAgICAgICAgICBrZXk6IGwyVG9MMUxvZy5rZXksCiAgICAgICAgICAgICAgdmFsdWU6IGwyVG9MMUxvZy52YWx1ZSwKICAgICAgICAgICAgICB0cmFuc2FjdGlvbkhhc2g6IGwyVG9MMUxvZy50cmFuc2FjdGlvbkhhc2gsCiAgICAgICAgICAgICAgbG9nSW5kZXg6IGhleFRvQmlnSW50KGwyVG9MMUxvZy5sb2dJbmRleCkKICAgICAgICAgICAgfTsKICAgICAgICAgIH0pCiAgICAgICAgfTsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvblJlcXVlc3Q6IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVUcmFuc2FjdGlvblJlcXVlc3QoewogICAgICBleGNsdWRlOiBbCiAgICAgICAgImN1c3RvbVNpZ25hdHVyZSIsCiAgICAgICAgImZhY3RvcnlEZXBzIiwKICAgICAgICAiZ2FzUGVyUHViZGF0YSIsCiAgICAgICAgInBheW1hc3RlciIsCiAgICAgICAgInBheW1hc3RlcklucHV0IgogICAgICBdLAogICAgICBmb3JtYXQoYXJncykgewogICAgICAgIGlmIChhcmdzLmdhc1BlclB1YmRhdGEgfHwgYXJncy5wYXltYXN0ZXIgJiYgYXJncy5wYXltYXN0ZXJJbnB1dCB8fCBhcmdzLmZhY3RvcnlEZXBzIHx8IGFyZ3MuY3VzdG9tU2lnbmF0dXJlKQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgZWlwNzEyTWV0YTogewogICAgICAgICAgICAgIC4uLmFyZ3MuZ2FzUGVyUHViZGF0YSA/IHsgZ2FzUGVyUHViZGF0YTogdG9IZXgoYXJncy5nYXNQZXJQdWJkYXRhKSB9IDogeyBnYXNQZXJQdWJkYXRhOiB0b0hleChnYXNQZXJQdWJkYXRhRGVmYXVsdCkgfSwKICAgICAgICAgICAgICAuLi5hcmdzLnBheW1hc3RlciAmJiBhcmdzLnBheW1hc3RlcklucHV0ID8gewogICAgICAgICAgICAgICAgcGF5bWFzdGVyUGFyYW1zOiB7CiAgICAgICAgICAgICAgICAgIHBheW1hc3RlcjogYXJncy5wYXltYXN0ZXIsCiAgICAgICAgICAgICAgICAgIHBheW1hc3RlcklucHV0OiBBcnJheS5mcm9tKGhleFRvQnl0ZXMoYXJncy5wYXltYXN0ZXJJbnB1dCkpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSA6IHt9LAogICAgICAgICAgICAgIC4uLmFyZ3MuZmFjdG9yeURlcHMgPyB7CiAgICAgICAgICAgICAgICBmYWN0b3J5RGVwczogYXJncy5mYWN0b3J5RGVwcy5tYXAoKGRlcCkgPT4gQXJyYXkuZnJvbShoZXhUb0J5dGVzKGRlcCkpKQogICAgICAgICAgICAgIH0gOiB7fSwKICAgICAgICAgICAgICAuLi5hcmdzLmN1c3RvbVNpZ25hdHVyZSA/IHsKICAgICAgICAgICAgICAgIGN1c3RvbVNpZ25hdHVyZTogQXJyYXkuZnJvbShoZXhUb0J5dGVzKGFyZ3MuY3VzdG9tU2lnbmF0dXJlKSkKICAgICAgICAgICAgICB9IDoge30KICAgICAgICAgICAgfSwKICAgICAgICAgICAgdHlwZTogIjB4NzEiCiAgICAgICAgICB9OwogICAgICAgIHJldHVybiB7fTsKICAgICAgfQogICAgfSkKICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9zZXJpYWxpemVycy5qcwogIGluaXRfY29uY2F0KCk7CiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy91dGlscy9hc3NlcnRFaXA3MTJUcmFuc2FjdGlvbi5qcwogIGluaXRfYWRkcmVzcygpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY2hhaW4oKTsKICBpbml0X2lzQWRkcmVzcygpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9lcnJvcnMvdHJhbnNhY3Rpb24uanMKICBpbml0X2Jhc2UoKTsKICB2YXIgSW52YWxpZEVpcDcxMlRyYW5zYWN0aW9uRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKFsKICAgICAgICAiVHJhbnNhY3Rpb24gaXMgbm90IGFuIEVJUDcxMiB0cmFuc2FjdGlvbi4iLAogICAgICAgICIiLAogICAgICAgICJUcmFuc2FjdGlvbiBtdXN0OiIsCiAgICAgICAgJyAgLSBpbmNsdWRlIGB0eXBlOiAiZWlwNzEyImAnLAogICAgICAgICIgIC0gaW5jbHVkZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogYGN1c3RvbVNpZ25hdHVyZWAsIGBwYXltYXN0ZXJgLCBgcGF5bWFzdGVySW5wdXRgLCBgZ2FzUGVyUHViZGF0YWAsIGBmYWN0b3J5RGVwc2AiCiAgICAgIF0uam9pbigiXG4iKSwgeyBuYW1lOiAiSW52YWxpZEVpcDcxMlRyYW5zYWN0aW9uRXJyb3IiIH0pOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL3V0aWxzL2lzRWlwNzEyVHJhbnNhY3Rpb24uanMKICBmdW5jdGlvbiBpc0VJUDcxMlRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKSB7CiAgICBpZiAodHJhbnNhY3Rpb24udHlwZSA9PT0gImVpcDcxMiIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCJjdXN0b21TaWduYXR1cmUiIGluIHRyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uLmN1c3RvbVNpZ25hdHVyZSB8fCAicGF5bWFzdGVyIiBpbiB0cmFuc2FjdGlvbiAmJiB0cmFuc2FjdGlvbi5wYXltYXN0ZXIgfHwgInBheW1hc3RlcklucHV0IiBpbiB0cmFuc2FjdGlvbiAmJiB0cmFuc2FjdGlvbi5wYXltYXN0ZXJJbnB1dCB8fCAiZ2FzUGVyUHViZGF0YSIgaW4gdHJhbnNhY3Rpb24gJiYgdHlwZW9mIHRyYW5zYWN0aW9uLmdhc1BlclB1YmRhdGEgPT09ICJiaWdpbnQiIHx8ICJmYWN0b3J5RGVwcyIgaW4gdHJhbnNhY3Rpb24gJiYgdHJhbnNhY3Rpb24uZmFjdG9yeURlcHMpCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvdXRpbHMvYXNzZXJ0RWlwNzEyVHJhbnNhY3Rpb24uanMKICBmdW5jdGlvbiBhc3NlcnRFaXA3MTJUcmFuc2FjdGlvbih0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCB0bywgZnJvbSwgcGF5bWFzdGVyLCBwYXltYXN0ZXJJbnB1dCB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoIWlzRUlQNzEyVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEVpcDcxMlRyYW5zYWN0aW9uRXJyb3IoKTsKICAgIGlmICghY2hhaW5JZCB8fCBjaGFpbklkIDw9IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhaW5JZEVycm9yKHsgY2hhaW5JZCB9KTsKICAgIGlmICh0byAmJiAhaXNBZGRyZXNzKHRvKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB0byB9KTsKICAgIGlmIChmcm9tICYmICFpc0FkZHJlc3MoZnJvbSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogZnJvbSB9KTsKICAgIGlmIChwYXltYXN0ZXIgJiYgIWlzQWRkcmVzcyhwYXltYXN0ZXIpKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IHBheW1hc3RlciB9KTsKICAgIGlmIChwYXltYXN0ZXIgJiYgIXBheW1hc3RlcklucHV0KSB7CiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgcGF5bWFzdGVySW5wdXRgIG11c3QgYmUgcHJvdmlkZWQgd2hlbiBgcGF5bWFzdGVyYCBpcyBkZWZpbmVkIik7CiAgICB9CiAgICBpZiAoIXBheW1hc3RlciAmJiBwYXltYXN0ZXJJbnB1dCkgewogICAgICB0aHJvdyBuZXcgQmFzZUVycm9yMigiYHBheW1hc3RlcmAgbXVzdCBiZSBwcm92aWRlZCB3aGVuIGBwYXltYXN0ZXJJbnB1dGAgaXMgZGVmaW5lZCIpOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvc2VyaWFsaXplcnMuanMKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbjIodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgaWYgKGlzRUlQNzEyVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVA3MTIodHJhbnNhY3Rpb24pOwogICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogIH0KICB2YXIgc2VyaWFsaXplcnMgPSB7CiAgICB0cmFuc2FjdGlvbjogc2VyaWFsaXplVHJhbnNhY3Rpb24yCiAgfTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDcxMih0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBnYXMsIG5vbmNlLCB0bywgZnJvbSwgdmFsdWUsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIGN1c3RvbVNpZ25hdHVyZSwgZmFjdG9yeURlcHMsIHBheW1hc3RlciwgcGF5bWFzdGVySW5wdXQsIGdhc1BlclB1YmRhdGEsIGRhdGEgfSA9IHRyYW5zYWN0aW9uOwogICAgYXNzZXJ0RWlwNzEyVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICBub25jZSA/IHRvSGV4KG5vbmNlKSA6ICIweCIsCiAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzID8gdG9IZXgobWF4UHJpb3JpdHlGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgbWF4RmVlUGVyR2FzID8gdG9IZXgobWF4RmVlUGVyR2FzKSA6ICIweCIsCiAgICAgIGdhcyA/IHRvSGV4KGdhcykgOiAiMHgiLAogICAgICB0byA/PyAiMHgiLAogICAgICB2YWx1ZSA/IHRvSGV4KHZhbHVlKSA6ICIweCIsCiAgICAgIGRhdGEgPz8gIjB4MCIsCiAgICAgIHRvSGV4KGNoYWluSWQpLAogICAgICB0b0hleCgiIiksCiAgICAgIHRvSGV4KCIiKSwKICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgIGZyb20gPz8gIjB4IiwKICAgICAgZ2FzUGVyUHViZGF0YSA/IHRvSGV4KGdhc1BlclB1YmRhdGEpIDogdG9IZXgoZ2FzUGVyUHViZGF0YURlZmF1bHQpLAogICAgICBmYWN0b3J5RGVwcyA/PyBbXSwKICAgICAgY3VzdG9tU2lnbmF0dXJlID8/ICIweCIsCiAgICAgIC8vIEVJUDcxMiBzaWduYXR1cmUKICAgICAgcGF5bWFzdGVyICYmIHBheW1hc3RlcklucHV0ID8gW3BheW1hc3RlciwgcGF5bWFzdGVySW5wdXRdIDogW10KICAgIF07CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4NzEiLAogICAgICB0b1JscChzZXJpYWxpemVkVHJhbnNhY3Rpb24pCiAgICBdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL3V0aWxzL2dldEVpcDcxMkRvbWFpbi5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvdXRpbHMvaGFzaEJ5dGVjb2RlLmpzCiAgaW5pdF9wYWQoKTsKICBpbml0X3RvQnl0ZXMoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvZXJyb3JzL2J5dGVjb2RlLmpzCiAgaW5pdF9iYXNlKCk7CiAgdmFyIEJ5dGVjb2RlTGVuZ3RoRXhjZWVkc01heFNpemVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGdpdmVuTGVuZ3RoLCBtYXhCeXRlY29kZVNpemU6IG1heEJ5dGVjb2RlU2l6ZTIgfSkgewogICAgICBzdXBlcihgQnl0ZWNvZGUgY2Fubm90IGJlIGxvbmdlciB0aGFuICR7bWF4Qnl0ZWNvZGVTaXplMn0gYnl0ZXMuIEdpdmVuIGxlbmd0aDogJHtnaXZlbkxlbmd0aH1gLCB7IG5hbWU6ICJCeXRlY29kZUxlbmd0aEV4Y2VlZHNNYXhTaXplRXJyb3IiIH0pOwogICAgfQogIH07CiAgdmFyIEJ5dGVjb2RlTGVuZ3RoSW5Xb3Jkc011c3RCZU9kZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgZ2l2ZW5MZW5ndGhJbldvcmRzIH0pIHsKICAgICAgc3VwZXIoYEJ5dGVjb2RlIGxlbmd0aCBpbiAzMi1ieXRlIHdvcmRzIG11c3QgYmUgb2RkLiBHaXZlbiBsZW5ndGggaW4gd29yZHM6ICR7Z2l2ZW5MZW5ndGhJbldvcmRzfWAsIHsgbmFtZTogIkJ5dGVjb2RlTGVuZ3RoSW5Xb3Jkc011c3RCZU9kZEVycm9yIiB9KTsKICAgIH0KICB9OwogIHZhciBCeXRlY29kZUxlbmd0aE11c3RCZURpdmlzaWJsZUJ5MzJFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGdpdmVuTGVuZ3RoIH0pIHsKICAgICAgc3VwZXIoYFRoZSBieXRlY29kZSBsZW5ndGggaW4gYnl0ZXMgbXVzdCBiZSBkaXZpc2libGUgYnkgMzIuIEdpdmVuIGxlbmd0aDogJHtnaXZlbkxlbmd0aH1gLCB7IG5hbWU6ICJCeXRlY29kZUxlbmd0aE11c3RCZURpdmlzaWJsZUJ5MzJFcnJvciIgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvdXRpbHMvaGFzaEJ5dGVjb2RlLmpzCiAgZnVuY3Rpb24gaGFzaEJ5dGVjb2RlKGJ5dGVjb2RlKSB7CiAgICBjb25zdCBieXRlY29kZUJ5dGVzID0gdG9CeXRlcyhieXRlY29kZSk7CiAgICBpZiAoYnl0ZWNvZGVCeXRlcy5sZW5ndGggJSAzMiAhPT0gMCkKICAgICAgdGhyb3cgbmV3IEJ5dGVjb2RlTGVuZ3RoTXVzdEJlRGl2aXNpYmxlQnkzMkVycm9yKHsKICAgICAgICBnaXZlbkxlbmd0aDogYnl0ZWNvZGVCeXRlcy5sZW5ndGgKICAgICAgfSk7CiAgICBpZiAoYnl0ZWNvZGVCeXRlcy5sZW5ndGggPiBtYXhCeXRlY29kZVNpemUpCiAgICAgIHRocm93IG5ldyBCeXRlY29kZUxlbmd0aEV4Y2VlZHNNYXhTaXplRXJyb3IoewogICAgICAgIGdpdmVuTGVuZ3RoOiBieXRlY29kZUJ5dGVzLmxlbmd0aCwKICAgICAgICBtYXhCeXRlY29kZVNpemUKICAgICAgfSk7CiAgICBjb25zdCBoYXNoU3RyID0gc2hhMjU2MihieXRlY29kZUJ5dGVzKTsKICAgIGNvbnN0IGhhc2gzID0gdG9CeXRlcyhoYXNoU3RyKTsKICAgIGNvbnN0IGJ5dGVjb2RlTGVuZ3RoSW5Xb3JkcyA9IGJ5dGVjb2RlQnl0ZXMubGVuZ3RoIC8gMzI7CiAgICBpZiAoYnl0ZWNvZGVMZW5ndGhJbldvcmRzICUgMiA9PT0gMCkgewogICAgICB0aHJvdyBuZXcgQnl0ZWNvZGVMZW5ndGhJbldvcmRzTXVzdEJlT2RkRXJyb3IoewogICAgICAgIGdpdmVuTGVuZ3RoSW5Xb3JkczogYnl0ZWNvZGVMZW5ndGhJbldvcmRzCiAgICAgIH0pOwogICAgfQogICAgY29uc3QgYnl0ZWNvZGVMZW5ndGggPSB0b0J5dGVzKGJ5dGVjb2RlTGVuZ3RoSW5Xb3Jkcyk7CiAgICBjb25zdCBieXRlY29kZUxlbmd0aFBhZGRlZCA9IHBhZChieXRlY29kZUxlbmd0aCwgeyBzaXplOiAyIH0pOwogICAgY29uc3QgY29kZUhhc2hWZXJzaW9uID0gbmV3IFVpbnQ4QXJyYXkoWzEsIDBdKTsKICAgIGhhc2gzLnNldChjb2RlSGFzaFZlcnNpb24sIDApOwogICAgaGFzaDMuc2V0KGJ5dGVjb2RlTGVuZ3RoUGFkZGVkLCAyKTsKICAgIHJldHVybiBoYXNoMzsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL3V0aWxzL2dldEVpcDcxMkRvbWFpbi5qcwogIHZhciBnZXRFaXA3MTJEb21haW4yID0gKHRyYW5zYWN0aW9uKSA9PiB7CiAgICBhc3NlcnRFaXA3MTJUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7CiAgICBjb25zdCBtZXNzYWdlID0gdHJhbnNhY3Rpb25Ub01lc3NhZ2UodHJhbnNhY3Rpb24pOwogICAgcmV0dXJuIHsKICAgICAgZG9tYWluOiB7CiAgICAgICAgbmFtZTogInprU3luYyIsCiAgICAgICAgdmVyc2lvbjogIjIiLAogICAgICAgIGNoYWluSWQ6IHRyYW5zYWN0aW9uLmNoYWluSWQKICAgICAgfSwKICAgICAgdHlwZXM6IHsKICAgICAgICBUcmFuc2FjdGlvbjogWwogICAgICAgICAgeyBuYW1lOiAidHhUeXBlIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgICB7IG5hbWU6ICJmcm9tIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgICB7IG5hbWU6ICJ0byIsIHR5cGU6ICJ1aW50MjU2IiB9LAogICAgICAgICAgeyBuYW1lOiAiZ2FzTGltaXQiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogImdhc1BlclB1YmRhdGFCeXRlTGltaXQiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogIm1heEZlZVBlckdhcyIsIHR5cGU6ICJ1aW50MjU2IiB9LAogICAgICAgICAgeyBuYW1lOiAibWF4UHJpb3JpdHlGZWVQZXJHYXMiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogInBheW1hc3RlciIsIHR5cGU6ICJ1aW50MjU2IiB9LAogICAgICAgICAgeyBuYW1lOiAibm9uY2UiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogInZhbHVlIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgICB7IG5hbWU6ICJkYXRhIiwgdHlwZTogImJ5dGVzIiB9LAogICAgICAgICAgeyBuYW1lOiAiZmFjdG9yeURlcHMiLCB0eXBlOiAiYnl0ZXMzMltdIiB9LAogICAgICAgICAgeyBuYW1lOiAicGF5bWFzdGVySW5wdXQiLCB0eXBlOiAiYnl0ZXMiIH0KICAgICAgICBdCiAgICAgIH0sCiAgICAgIHByaW1hcnlUeXBlOiAiVHJhbnNhY3Rpb24iLAogICAgICBtZXNzYWdlCiAgICB9OwogIH07CiAgZnVuY3Rpb24gdHJhbnNhY3Rpb25Ub01lc3NhZ2UodHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHsgZ2FzLCBub25jZSwgdG8sIGZyb20sIHZhbHVlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBmYWN0b3J5RGVwcywgcGF5bWFzdGVyLCBwYXltYXN0ZXJJbnB1dCwgZ2FzUGVyUHViZGF0YSwgZGF0YSB9ID0gdHJhbnNhY3Rpb247CiAgICByZXR1cm4gewogICAgICB0eFR5cGU6IDExM24sCiAgICAgIGZyb206IEJpZ0ludChmcm9tKSwKICAgICAgdG86IHRvID8gQmlnSW50KHRvKSA6IDBuLAogICAgICBnYXNMaW1pdDogZ2FzID8/IDBuLAogICAgICBnYXNQZXJQdWJkYXRhQnl0ZUxpbWl0OiBnYXNQZXJQdWJkYXRhID8/IGdhc1BlclB1YmRhdGFEZWZhdWx0LAogICAgICBtYXhGZWVQZXJHYXM6IG1heEZlZVBlckdhcyA/PyAwbiwKICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IG1heFByaW9yaXR5RmVlUGVyR2FzID8/IDBuLAogICAgICBwYXltYXN0ZXI6IHBheW1hc3RlciA/IEJpZ0ludChwYXltYXN0ZXIpIDogMG4sCiAgICAgIG5vbmNlOiBub25jZSA/IEJpZ0ludChub25jZSkgOiAwbiwKICAgICAgdmFsdWU6IHZhbHVlID8/IDBuLAogICAgICBkYXRhOiBkYXRhID8gZGF0YSA6ICIweDAiLAogICAgICBmYWN0b3J5RGVwczogZmFjdG9yeURlcHM/Lm1hcCgoZGVwKSA9PiB0b0hleChoYXNoQnl0ZWNvZGUoZGVwKSkpID8/IFtdLAogICAgICBwYXltYXN0ZXJJbnB1dDogcGF5bWFzdGVySW5wdXQgPyBwYXltYXN0ZXJJbnB1dCA6ICIweCIKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9jaGFpbkNvbmZpZy5qcwogIHZhciBjaGFpbkNvbmZpZyA9IHsKICAgIGZvcm1hdHRlcnMsCiAgICBzZXJpYWxpemVycywKICAgIGN1c3RvbTogewogICAgICBnZXRFaXA3MTJEb21haW46IGdldEVpcDcxMkRvbWFpbjIKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hYnN0cmFjdFRlc3RuZXQuanMKICB2YXIgYWJzdHJhY3RUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnLAogICAgaWQ6IDExMTI0LAogICAgbmFtZTogIkFic3RyYWN0IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRVRIIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLnRlc3RuZXQuYWJzLnh5eiJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFic3RyYWN0IEJsb2NrIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQuYWJzLnh5eiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYWNhbGEuanMKICB2YXIgYWNhbGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDc4NywKICAgIG5hbWU6ICJBY2FsYSIsCiAgICBuZXR3b3JrOiAiYWNhbGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkFjYWxhIiwKICAgICAgc3ltYm9sOiAiQUNBIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZXRoLXJwYy1hY2FsYS5hY2EtYXBpLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXRoLXJwYy1hY2FsYS5hY2EtYXBpLm5ldHdvcmsiXQogICAgICB9LAogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC1ycGMtYWNhbGEuYWNhLWFwaS5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2V0aC1ycGMtYWNhbGEuYWNhLWFwaS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQWNhbGEgQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmFjYWxhLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5hY2FsYS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vb3Atc3RhY2svY29udHJhY3RzLmpzCiAgdmFyIGNvbnRyYWN0cyA9IHsKICAgIGdhc1ByaWNlT3JhY2xlOiB7IGFkZHJlc3M6ICIweDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYiIH0sCiAgICBsMUJsb2NrOiB7IGFkZHJlc3M6ICIweDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUiIH0sCiAgICBsMkNyb3NzRG9tYWluTWVzc2VuZ2VyOiB7CiAgICAgIGFkZHJlc3M6ICIweDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDciCiAgICB9LAogICAgbDJFcmM3MjFCcmlkZ2U6IHsgYWRkcmVzczogIjB4NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNCIgfSwKICAgIGwyU3RhbmRhcmRCcmlkZ2U6IHsgYWRkcmVzczogIjB4NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCIgfSwKICAgIGwyVG9MMU1lc3NhZ2VQYXNzZXI6IHsKICAgICAgYWRkcmVzczogIjB4NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNiIKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL29wLXN0YWNrL2Zvcm1hdHRlcnMuanMKICBpbml0X2Zyb21IZXgoKTsKICB2YXIgZm9ybWF0dGVyczIgPSB7CiAgICBibG9jazogLyogQF9fUFVSRV9fICovIGRlZmluZUJsb2NrKHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbnMgPSBhcmdzLnRyYW5zYWN0aW9ucz8ubWFwKCh0cmFuc2FjdGlvbikgPT4gewogICAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbiA9PT0gInN0cmluZyIpCiAgICAgICAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKTsKICAgICAgICAgIGlmIChmb3JtYXR0ZWQudHlwZUhleCA9PT0gIjB4N2UiKSB7CiAgICAgICAgICAgIGZvcm1hdHRlZC5pc1N5c3RlbVR4ID0gdHJhbnNhY3Rpb24uaXNTeXN0ZW1UeDsKICAgICAgICAgICAgZm9ybWF0dGVkLm1pbnQgPSB0cmFuc2FjdGlvbi5taW50ID8gaGV4VG9CaWdJbnQodHJhbnNhY3Rpb24ubWludCkgOiB2b2lkIDA7CiAgICAgICAgICAgIGZvcm1hdHRlZC5zb3VyY2VIYXNoID0gdHJhbnNhY3Rpb24uc291cmNlSGFzaDsKICAgICAgICAgICAgZm9ybWF0dGVkLnR5cGUgPSAiZGVwb3NpdCI7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0cmFuc2FjdGlvbnMsCiAgICAgICAgICBzdGF0ZVJvb3Q6IGFyZ3Muc3RhdGVSb290CiAgICAgICAgfTsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvbjogLyogQF9fUFVSRV9fICovIGRlZmluZVRyYW5zYWN0aW9uKHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHt9OwogICAgICAgIGlmIChhcmdzLnR5cGUgPT09ICIweDdlIikgewogICAgICAgICAgdHJhbnNhY3Rpb24uaXNTeXN0ZW1UeCA9IGFyZ3MuaXNTeXN0ZW1UeDsKICAgICAgICAgIHRyYW5zYWN0aW9uLm1pbnQgPSBhcmdzLm1pbnQgPyBoZXhUb0JpZ0ludChhcmdzLm1pbnQpIDogdm9pZCAwOwogICAgICAgICAgdHJhbnNhY3Rpb24uc291cmNlSGFzaCA9IGFyZ3Muc291cmNlSGFzaDsKICAgICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAiZGVwb3NpdCI7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvblJlY2VpcHQ6IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVUcmFuc2FjdGlvblJlY2VpcHQoewogICAgICBmb3JtYXQoYXJncykgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBsMUdhc1ByaWNlOiBhcmdzLmwxR2FzUHJpY2UgPyBoZXhUb0JpZ0ludChhcmdzLmwxR2FzUHJpY2UpIDogbnVsbCwKICAgICAgICAgIGwxR2FzVXNlZDogYXJncy5sMUdhc1VzZWQgPyBoZXhUb0JpZ0ludChhcmdzLmwxR2FzVXNlZCkgOiBudWxsLAogICAgICAgICAgbDFGZWU6IGFyZ3MubDFGZWUgPyBoZXhUb0JpZ0ludChhcmdzLmwxRmVlKSA6IG51bGwsCiAgICAgICAgICBsMUZlZVNjYWxhcjogYXJncy5sMUZlZVNjYWxhciA/IE51bWJlcihhcmdzLmwxRmVlU2NhbGFyKSA6IG51bGwKICAgICAgICB9OwogICAgICB9CiAgICB9KQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vb3Atc3RhY2svc2VyaWFsaXplcnMuanMKICBpbml0X2FkZHJlc3MoKTsKICBpbml0X2lzQWRkcmVzcygpOwogIGluaXRfY29uY2F0KCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZVRyYW5zYWN0aW9uMyh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKSB7CiAgICBpZiAoaXNEZXBvc2l0KHRyYW5zYWN0aW9uKSkKICAgICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uRGVwb3NpdCh0cmFuc2FjdGlvbik7CiAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIHNpZ25hdHVyZSk7CiAgfQogIHZhciBzZXJpYWxpemVyczIgPSB7CiAgICB0cmFuc2FjdGlvbjogc2VyaWFsaXplVHJhbnNhY3Rpb24zCiAgfTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkRlcG9zaXQodHJhbnNhY3Rpb24pIHsKICAgIGFzc2VydFRyYW5zYWN0aW9uRGVwb3NpdCh0cmFuc2FjdGlvbik7CiAgICBjb25zdCB7IHNvdXJjZUhhc2gsIGRhdGEsIGZyb20sIGdhcywgaXNTeXN0ZW1UeCwgbWludCwgdG8sIHZhbHVlIH0gPSB0cmFuc2FjdGlvbjsKICAgIGNvbnN0IHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9IFsKICAgICAgc291cmNlSGFzaCwKICAgICAgZnJvbSwKICAgICAgdG8gPz8gIjB4IiwKICAgICAgbWludCA/IHRvSGV4KG1pbnQpIDogIjB4IiwKICAgICAgdmFsdWUgPyB0b0hleCh2YWx1ZSkgOiAiMHgiLAogICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgaXNTeXN0ZW1UeCA/ICIweDEiIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiCiAgICBdOwogICAgcmV0dXJuIGNvbmNhdEhleChbCiAgICAgICIweDdlIiwKICAgICAgdG9SbHAoc2VyaWFsaXplZFRyYW5zYWN0aW9uKQogICAgXSk7CiAgfQogIGZ1bmN0aW9uIGlzRGVwb3NpdCh0cmFuc2FjdGlvbikgewogICAgaWYgKHRyYW5zYWN0aW9uLnR5cGUgPT09ICJkZXBvc2l0IikKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAodHlwZW9mIHRyYW5zYWN0aW9uLnNvdXJjZUhhc2ggIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgZnVuY3Rpb24gYXNzZXJ0VHJhbnNhY3Rpb25EZXBvc2l0KHRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCB7IGZyb20sIHRvIH0gPSB0cmFuc2FjdGlvbjsKICAgIGlmIChmcm9tICYmICFpc0FkZHJlc3MoZnJvbSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogZnJvbSB9KTsKICAgIGlmICh0byAmJiAhaXNBZGRyZXNzKHRvKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB0byB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vb3Atc3RhY2svY2hhaW5Db25maWcuanMKICB2YXIgY2hhaW5Db25maWcyID0gewogICAgY29udHJhY3RzLAogICAgZm9ybWF0dGVyczogZm9ybWF0dGVyczIsCiAgICBzZXJpYWxpemVyczogc2VyaWFsaXplcnMyCiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYW5jaWVudDguanMKICB2YXIgc291cmNlSWQgPSAxOwogIHZhciBhbmNpZW50OCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogODg4ODg4ODg4LAogICAgbmFtZTogIkFuY2llbnQ4IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5hbmNpZW50OC5nZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFuY2llbnQ4IGV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4uYW5jaWVudDguZ2ciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2Nhbi5hbmNpZW50OC5nZy9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWRdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhCMDlEQzA4NDI4QzhiNEVGQjRmZjlDMDgyNzM4NkNERjM0Mjc3OTk2IgogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkXTogewogICAgICAgICAgYWRkcmVzczogIjB4NjM5RjJBRUNFMzk4QWE3NmIwN2U1OWVGNmFiZTJjRmUzMmJhY2I2OCIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MDcwNTcxCiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkXTogewogICAgICAgICAgYWRkcmVzczogIjB4ZDVlM2VEZjViNjgxMzVENTU5RDU3MkUyNmJGODYzRkJDMTk1MDAzMyIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MDcwNTcxCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYW5jaWVudDhTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMiA9IDExMTU1MTExOwogIHZhciBhbmNpZW50OFNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI4MTIyMDI0LAogICAgbmFtZTogIkFuY2llbnQ4IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjdjItdGVzdG5ldC5hbmNpZW50OC5nZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFuY2llbnQ4IENlbGVzdGlhIFRlc3RuZXQgZXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc2NhbnYyLXRlc3RuZXQuYW5jaWVudDguZ2ciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2NhbnYyLXRlc3RuZXQuYW5jaWVudDguZ2cvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDk0MmZENTAxN2MwRjYwNTc1OTMwRDg1NzRFYWNhMTNCRWNENmUxYkIiCiAgICAgICAgfQogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQyXTogewogICAgICAgICAgYWRkcmVzczogIjB4ZmExZDlFMjZBNmFDRDdiMjIxMTVEMjc1NzJjMTIyMUI5ODAzYzk2MCIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NzI5MDgKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyXTogewogICAgICAgICAgYWRkcmVzczogIjB4RjZCYzAxNDZkM2M3NEQ0ODMwNmU3OUFlMTM0QTI2MEU0MThDOTMzNSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NzI5MDgKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQyCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FudmlsLmpzCiAgdmFyIGFudmlsID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMTMzNywKICAgIG5hbWU6ICJBbnZpbCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHA6Ly8xMjcuMC4wLjE6ODU0NSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3czovLzEyNy4wLjAuMTo4NTQ1Il0KICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hcGV4VGVzdG5ldC5qcwogIHZhciBhcGV4VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzk5MywKICAgIG5hbWU6ICJBUEVYIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQuYXBleGxheWVyLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwLXRlc3RuZXQuYXBleGxheWVyLnh5eiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHAtdGVzdG5ldC5hcGV4bGF5ZXIueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Zjc2NDJiZTMzYTZiMThEMTZhOTk1NjU3YWRiNWE2OENEMDQzOGFFMiIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyODM3NzUKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJiaXRydW0uanMKICB2YXIgYXJiaXRydW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyMTYxLAogICAgbmFtZTogIkFyYml0cnVtIE9uZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcmIxLmFyYml0cnVtLmlvL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFyYmlzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2FyYmlzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5hcmJpc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNzY1NDcwNwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FyYml0cnVtR29lcmxpLmpzCiAgdmFyIGFyYml0cnVtR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MjE2MTMsCiAgICBuYW1lOiAiQXJiaXRydW0gR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJBcmJpdHJ1bSBHb2VybGkgRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZ29lcmxpLXJvbGx1cC5hcmJpdHJ1bS5pby9ycGMiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBcmJpc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9nb2VybGkuYXJiaXNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogODgxMTQKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJiaXRydW1Ob3ZhLmpzCiAgdmFyIGFyYml0cnVtTm92YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDIxNzAsCiAgICBuYW1lOiAiQXJiaXRydW0gTm92YSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ub3ZhLmFyYml0cnVtLmlvL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFyYmlzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL25vdmEuYXJiaXNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLW5vdmEuYXJiaXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE3NDY5NjMKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hc3NldENoYWluVGVzdG5ldC5qcwogIHZhciBhc3NldENoYWluVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDI0MjEsCiAgICBuYW1lOiAiQXNzZXRDaGFpbiBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlJlYWwgV29ybGQgQXNzZXQiLAogICAgICBzeW1ib2w6ICJSV0EiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9lbnVndS1ycGMuYXNzZXRjaGFpbi5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBc3NldCBDaGFpbiBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4tdGVzdG5ldC5hc3NldGNoYWluLm9yZyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLXRlc3RuZXQuYXNzZXRjaGFpbi5vcmcvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4OTg5RjgzMkQzNTk4OGNiNWUzZUIwMDFGYTJGZTc4OTQ2OUVDMzFFYSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNzE3NwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FzdGFyLmpzCiAgdmFyIGFzdGFyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTIsCiAgICBuYW1lOiAiQXN0YXIiLAogICAgbmV0d29yazogImFzdGFyLW1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkFzdGFyIiwKICAgICAgc3ltYm9sOiAiQVNUUiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXN0YXIuYXBpLm9uZmluYWxpdHkuaW8vcHVibGljIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXN0YXIgU3Vic2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hc3Rhci5zdWJzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc2MTc5NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXN0YXJaa0VWTS5qcwogIHZhciBhc3RhclprRVZNID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNzc2LAogICAgbmFtZTogIkFzdGFyIHprRVZNIiwKICAgIG5ldHdvcms6ICJBc3RhclprRVZNIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zdGFydGFsZS5jb20vYXN0YXItemtldm0iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBc3RhciB6a0VWTSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hc3Rhci16a2V2bS5leHBsb3Jlci5zdGFydGFsZS5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogOTM1MjgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FzdGFyWmt5b3RvLmpzCiAgdmFyIGFzdGFyWmt5b3RvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2MDM4MzYxLAogICAgbmFtZTogIkFzdGFyIHprRVZNIFRlc3RuZXQgekt5b3RvIiwKICAgIG5ldHdvcms6ICJ6S3lvdG8iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnN0YXJ0YWxlLmNvbS96a3lvdG8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJ6S3lvdG8gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vemt5b3RvLmV4cGxvcmVyLnN0YXJ0YWxlLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxOTYxNTMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJiaXRydW1TZXBvbGlhLmpzCiAgdmFyIGFyYml0cnVtU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDIxNjE0LAogICAgbmFtZTogIkFyYml0cnVtIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkFyYml0cnVtIFNlcG9saWEgRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS1yb2xsdXAuYXJiaXRydW0uaW8vcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXJiaXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5hcmJpc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5hcmJpc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogODE5MzAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJlb25OZXR3b3JrLmpzCiAgdmFyIGFyZW9uTmV0d29yayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDYzLAogICAgbmFtZTogIkFyZW9uIE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgZGVjaW1hbHM6IDE4LCBuYW1lOiAiQVJFQSIsIHN5bWJvbDogIkFSRUEiIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC1ycGMuYXJlb24ubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9tYWlubmV0LXdzLmFyZW9uLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBcmVvbnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYXJlb25zY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FyZW9uTmV0d29ya1Rlc3RuZXQuanMKICB2YXIgYXJlb25OZXR3b3JrVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDYyLAogICAgbmFtZTogIkFyZW9uIE5ldHdvcmsgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJUQVJFQSIsIHN5bWJvbDogIlRBUkVBIiB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQtcnBjLmFyZW9uLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC13cy5hcmVvbi5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXJlb25zY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2FyZW9uc2Nhbi5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FydGVsYVRlc3RuZXQuanMKICB2YXIgYXJ0ZWxhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTE4MjIsCiAgICBuYW1lOiAiQXJ0ZWxhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkFSVCIsIHN5bWJvbDogIkFSVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2JldGFuZXQtcnBjMS5hcnRlbGEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFydGVsYSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9iZXRhbmV0LXNjYW4uYXJ0ZWxhLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmV0YW5ldC1zY2FuLmFydGVsYS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4ZDA3Yzg2MzVmNzZlODc0NUVlNzA5MmZiYjZlOGZiYzVGZUYwOURENyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3MDAxODcxCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F0bGV0YU9seW1waWEuanMKICB2YXIgYXRsZXRhT2x5bXBpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjM0MCwKICAgIG5hbWU6ICJBdGxldGEgT2x5bXBpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJBdGxhIiwgc3ltYm9sOiAiQVRMQSIgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL3Rlc3RuZXQtcnBjLmF0bGV0YS5uZXR3b3JrOjk5NDQiLAogICAgICAgICAgImh0dHBzOi8vdGVzdG5ldC1ycGMuYXRsZXRhLm5ldHdvcmsiCiAgICAgICAgXSwKICAgICAgICB3czogWyJ3c3M6Ly90ZXN0bmV0LXJwYy5hdGxldGEubmV0d29yazo5OTQ0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXRsZXRhIE9seW1waWEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5hdGxldGEubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmF0bGV0YS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MTQ3MmVjNjM5MjE4MGZiODRGMzQ1ZDI0NTViQ0M3NUIyNjU3NzExNSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDc2NDczCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F1cm9yYS5qcwogIHZhciBhdXJvcmEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMTMxNjE1NTQsCiAgICBuYW1lOiAiQXVyb3JhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5hdXJvcmEuZGV2Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXVyb3Jhc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hdXJvcmFzY2FuLmRldiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hdXJvcmFzY2FuLmRldi9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjI5MDc4MTYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hdXJvcmFUZXN0bmV0LmpzCiAgdmFyIGF1cm9yYVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMTMxNjE1NTUsCiAgICBuYW1lOiAiQXVyb3JhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LmF1cm9yYS5kZXYiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBdXJvcmFzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuYXVyb3Jhc2Nhbi5kZXYiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC5hdXJvcmFzY2FuLmRldi9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F1cm9yaWEuanMKICB2YXIgYXVyb3JpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjA1MjA1LAogICAgbmFtZTogIkF1cm9yaWEgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiYXVyb3JpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiQXVyb3JpYSBTdHJhdGlzIiwKICAgICAgc3ltYm9sOiAidFNUUkFYIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2F1cm9yaWEucnBjLnN0cmF0aXNldm0uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXVyb3JpYSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2F1cm9yaWEuZXhwbG9yZXIuc3RyYXRpc2V2bS5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F2YWxhbmNoZS5qcwogIHZhciBhdmFsYW5jaGUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQzMTE0LAogICAgbmFtZTogIkF2YWxhbmNoZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJBdmFsYW5jaGUiLAogICAgICBzeW1ib2w6ICJBVkFYIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLmF2YXgubmV0d29yay9leHQvYmMvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTbm93VHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vc25vd3RyYWNlLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5zbm93dHJhY2UuaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTE5MDc5MzQKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hdmFsYW5jaGVGdWppLmpzCiAgdmFyIGF2YWxhbmNoZUZ1amkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQzMTEzLAogICAgbmFtZTogIkF2YWxhbmNoZSBGdWppIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkF2YWxhbmNoZSBGdWppIiwKICAgICAgc3ltYm9sOiAiQVZBWCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FwaS5hdmF4LXRlc3QubmV0d29yay9leHQvYmMvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTbm93VHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5zbm93dHJhY2UuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLXRlc3RuZXQuc25vd3RyYWNlLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDcwOTY5NTkKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYjNTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMyA9IDE2ODU4Nzc3MzsKICB2YXIgYjNTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOTkzLAogICAgbmFtZTogIkIzIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEuYjMuZnVuL2h0dHAiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEuZXhwbG9yZXIuYjMuZnVuIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDMKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYjMuanMKICB2YXIgc291cmNlSWQ0ID0gODQ1MzsKICB2YXIgYjMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgzMzMsCiAgICBuYW1lOiAiQjMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQtcnBjLmIzLmZ1bi9odHRwIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5iMy5mdW4iCiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQ0CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JhaGFtdXQuanMKICB2YXIgYmFoYW11dCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTE2NSwKICAgIG5ldHdvcms6ICJiYWhhbXV0IiwKICAgIG5hbWU6ICJCYWhhbXV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJGYXN0dG9rZW4iLCBzeW1ib2w6ICJGVE4iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL3JwYzEuYmFoYW11dC5pbyIsCiAgICAgICAgICAiaHR0cHM6Ly9iYWhhbXV0LXJwYy5wdWJsaWNub2RlLmNvbSIsCiAgICAgICAgICAiaHR0cHM6Ly9ycGMyLmJhaGFtdXQuaW8iCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsKICAgICAgICAgICJ3c3M6Ly93czEuc2FoYXJhLmJhaGFtdXRjaGFpbi5jb20iLAogICAgICAgICAgIndzczovL2JhaGFtdXQtcnBjLnB1YmxpY25vZGUuY29tIiwKICAgICAgICAgICJ3c3M6Ly93czIuc2FoYXJhLmJhaGFtdXRjaGFpbi5jb20iCiAgICAgICAgXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbCiAgICAgICAgICAiaHR0cHM6Ly9ycGMxLmJhaGFtdXQuaW8iLAogICAgICAgICAgImh0dHBzOi8vYmFoYW11dC1ycGMucHVibGljbm9kZS5jb20iLAogICAgICAgICAgImh0dHBzOi8vcnBjMi5iYWhhbXV0LmlvIgogICAgICAgIF0sCiAgICAgICAgd2ViU29ja2V0OiBbCiAgICAgICAgICAid3NzOi8vd3MxLnNhaGFyYS5iYWhhbXV0Y2hhaW4uY29tIiwKICAgICAgICAgICJ3c3M6Ly9iYWhhbXV0LXJwYy5wdWJsaWNub2RlLmNvbSIsCiAgICAgICAgICAid3NzOi8vd3MyLnNhaGFyYS5iYWhhbXV0Y2hhaW4uY29tIgogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRnRuc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cuZnRuc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vd3d3LmZ0bnNjYW4uY29tL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iYXNlLmpzCiAgdmFyIHNvdXJjZUlkNSA9IDE7CiAgdmFyIGJhc2UgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDg0NTMsCiAgICBuYW1lOiAiQmFzZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmJhc2Uub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmFzZXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYmFzZXNjYW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5iYXNlc2Nhbi5vcmcvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkNV06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDU2MzE1YjkwYzQwNzMwOTI1ZWM1NDg1Y2YwMDRkODM1MDU4NTE4QTAiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA1MDIyCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDVdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg0OTA0ODA0NEQ1N2UxQzkyQTc3Zjc5OTg4ZDIxRmE4ZkFGNzRFOTdlIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMTc0ODIxNDMKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQ1XTogewogICAgICAgICAgYWRkcmVzczogIjB4MzE1NENmMTZjY2RiNEM2ZDkyMjYyOTY2NDE3NGI5MDRkODBGMkMzNSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE3NDgyMTQzCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkNQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iYXNlR29lcmxpLmpzCiAgdmFyIHNvdXJjZUlkNiA9IDU7CiAgdmFyIGJhc2VHb2VybGkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDg0NTMxLAogICAgbmFtZTogIkJhc2UgR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJHb2VybGkgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZ29lcmxpLmJhc2Uub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmFzZXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLmJhc2VzY2FuLm9yZyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGkuYmFzZXNjYW4ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICAuLi5jaGFpbkNvbmZpZzIuY29udHJhY3RzLAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDZdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgyQTM1ODkxZmYzMDMxM0NjRmE2Q0U4OGRjZjM4NThiYjA3NUEyMjk4IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTM3Njk4OAogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQ2XTogewogICAgICAgICAgYWRkcmVzczogIjB4ZTkzYzhjRDBENDA5MzQxMjA1QTU5MmY4YzRBYzFBNWZlNTU4NWNmQSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQ2XTogewogICAgICAgICAgYWRkcmVzczogIjB4ZkE2RDhFZTVCRTc3MEY4NEZDMDAxRDA5OEM0YkQ2MDRGZTAxMjg0YSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkNgogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iYXNlU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDcgPSAxMTE1NTExMTsKICB2YXIgYmFzZVNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDg0NTMyLAogICAgbmV0d29yazogImJhc2Utc2Vwb2xpYSIsCiAgICBuYW1lOiAiQmFzZSBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZXBvbGlhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5iYXNlLm9yZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJhc2VzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEuYmFzZXNjYW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1zZXBvbGlhLmJhc2VzY2FuLm9yZy9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgZGlzcHV0ZUdhbWVGYWN0b3J5OiB7CiAgICAgICAgW3NvdXJjZUlkN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweGQ2RTZkQmY0RjdFQTBhYzQxMmZEOGI2NUVEMjk3ZTY0QkI3YTA2RTEiCiAgICAgICAgfQogICAgICB9LAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDddOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg4NDQ1N2NhOUQwMTYzRmJDNGJiZmU0RGZiYjIwYmE0NmU0OERGMjU0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDQ5ZjUzZTQxNDUyYzc0NTg5ZTg1Y2ExNjc3NDI2YmE0MjY0NTllODUiLAogICAgICAgICAgYmxvY2tDcmVhdGVkOiA0NDQ2Njc3CiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweGZkMEJmNzFGNjA2NjBFMmY2MDhlZDU2ZTE2NTlDNDUwZUIxMTMxMjAiLAogICAgICAgICAgYmxvY2tDcmVhdGVkOiA0NDQ2Njc3CiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDU5NjQ3CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkNwogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iZWFtLmpzCiAgdmFyIGJlYW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQzMzcsCiAgICBuYW1lOiAiQmVhbSIsCiAgICBuZXR3b3JrOiAiYmVhbSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCZWFtIiwKICAgICAgc3ltYm9sOiAiQkVBTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIHB1YmxpYzogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9idWlsZC5vbmJlYW0uY29tL3JwYyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9idWlsZC5vbmJlYW0uY29tL3dzIl0KICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9idWlsZC5vbmJlYW0uY29tL3JwYyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9idWlsZC5vbmJlYW0uY29tL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmVhbSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zdWJuZXRzLmF2YXgubmV0d29yay9iZWFtIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg0OTU2ZjE1ZWZkYzNkYzE2NjQ1ZTkwY2MzNTZlYWZhNjVmZmM2NWVjIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iZWFtVGVzdG5ldC5qcwogIHZhciBiZWFtVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTMzMzcsCiAgICBuYW1lOiAiQmVhbSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJiZWFtIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkJlYW0iLAogICAgICBzeW1ib2w6ICJCRUFNIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgcHVibGljOiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2J1aWxkLm9uYmVhbS5jb20vcnBjL3Rlc3RuZXQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vYnVpbGQub25iZWFtLmNvbS93cy90ZXN0bmV0Il0KICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9idWlsZC5vbmJlYW0uY29tL3JwYy90ZXN0bmV0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2J1aWxkLm9uYmVhbS5jb20vd3MvdGVzdG5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJlYW0gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc3VibmV0cy10ZXN0LmF2YXgubmV0d29yay9iZWFtIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg5YmY0OWI3MDRlZTJhMDk1Yjk1YzFmMmQ0ZWI5MDEwNTEwYzQxYzllIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYmVhck5ldHdvcmtDaGFpbk1haW5uZXQuanMKICB2YXIgYmVhck5ldHdvcmtDaGFpbk1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDY0MTIzMCwKICAgIG5hbWU6ICJCZWFyIE5ldHdvcmsgQ2hhaW4gTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCZWFyTmV0d29ya0NoYWluIiwKICAgICAgc3ltYm9sOiAiQlJOS0MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9icm5rYy1tYWlubmV0LmJlYXJuZXR3b3JrLm5ldCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJybmtTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2JybmtzY2FuLmJlYXJuZXR3b3JrLm5ldCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9icm5rc2Nhbi5iZWFybmV0d29yay5uZXQvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JlYXJOZXR3b3JrQ2hhaW5UZXN0bmV0LmpzCiAgdmFyIGJlYXJOZXR3b3JrQ2hhaW5UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NTEyMzAsCiAgICBuYW1lOiAiQmVhciBOZXR3b3JrIENoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAidEJSTktDIiwKICAgICAgc3ltYm9sOiAidEJSTktDIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYnJua2MtdGVzdC5iZWFybmV0d29yay5uZXQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCcm5rVGVzdFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYnJua3Rlc3Qtc2Nhbi5iZWFybmV0d29yay5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYnJua3Rlc3Qtc2Nhbi5iZWFybmV0d29yay5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iZXJhY2hhaW5UZXN0bmV0LmpzCiAgdmFyIGJlcmFjaGFpblRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwMDg1LAogICAgbmFtZTogIkJlcmFjaGFpbiBBcnRpbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCRVJBIFRva2VuIiwKICAgICAgc3ltYm9sOiAiQkVSQSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FydGlvLnJwYy5iZXJhY2hhaW4uY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmVyYWNoYWluIiwKICAgICAgICB1cmw6ICJodHRwczovL2FydGlvLmJlcmF0cmFpbC5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYmVyYWNoYWluVGVzdG5ldGJBcnRpby5qcwogIHZhciBiZXJhY2hhaW5UZXN0bmV0YkFydGlvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4MDA4NCwKICAgIG5hbWU6ICJCZXJhY2hhaW4gYkFydGlvIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkJFUkEgVG9rZW4iLAogICAgICBzeW1ib2w6ICJCRVJBIgogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDkyNjkKICAgICAgfQogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYmFydGlvLnJwYy5iZXJhY2hhaW4uY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmVyYWNoYWluIGJBcnRpbyBCZXJhdHJhaWwiLAogICAgICAgIHVybDogImh0dHBzOi8vYmFydGlvLmJlcmF0cmFpbC5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYmV2bU1haW5uZXQuanMKICB2YXIgYmV2bU1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExNTAxLAogICAgbmFtZTogIkJFVk0gTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQml0Y29pbiIsIHN5bWJvbDogIkJUQyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMtbWFpbm5ldC0xLmJldm0uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCZXZtc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLW1haW5uZXQuYmV2bS5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLW1haW5uZXQtYXBpLmJldm0uaW8vYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JpdGt1Yi5qcwogIHZhciBiaXRrdWIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDk2LAogICAgbmFtZTogIkJpdGt1YiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQml0a3ViIiwgc3ltYm9sOiAiS1VCIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmJpdGt1YmNoYWluLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQml0a3ViIENoYWluIE1haW5uZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3LmJrY3NjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3d3dy5ia2NzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYml0a3ViVGVzdG5ldC5qcwogIHZhciBiaXRrdWJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNTkyNSwKICAgIG5hbWU6ICJCaXRrdWIgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiQml0a3ViIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkJpdGt1YiBUZXN0Iiwgc3ltYm9sOiAidEtVQiIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy10ZXN0bmV0LmJpdGt1YmNoYWluLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQml0a3ViIENoYWluIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5ia2NzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJrY3NjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYml0VG9ycmVudC5qcwogIHZhciBiaXRUb3JyZW50ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOTksCiAgICBuYW1lOiAiQml0VG9ycmVudCIsCiAgICBuZXR3b3JrOiAiYml0dG9ycmVudC1jaGFpbi1tYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJCaXRUb3JyZW50Iiwgc3ltYm9sOiAiQlRUIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5iaXR0b3JyZW50Y2hhaW4uaW8iXSB9LAogICAgICBwdWJsaWM6IHsgaHR0cDogWyJodHRwczovL3JwYy5iaXR0b3JyZW50Y2hhaW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCdHRjc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9idHRjc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmJ0dGNzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzEwNzg1NTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iaXRUb3JyZW50VGVzdG5ldC5qcwogIHZhciBiaXRUb3JyZW50VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAyOCwKICAgIG5hbWU6ICJCaXRUb3JyZW50IENoYWluIFRlc3RuZXQiLAogICAgbmV0d29yazogImJpdHRvcnJlbnQtY2hhaW4tdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQml0VG9ycmVudCIsIHN5bWJvbDogIkJUVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly90ZXN0cnBjLmJpdHRvcnJlbnRjaGFpbi5pbyJdIH0sCiAgICAgIHB1YmxpYzogeyBodHRwOiBbImh0dHBzOi8vdGVzdHJwYy5iaXR0b3JyZW50Y2hhaW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCdHRjc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJ0dGNzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJ0dGNzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JsYXN0LmpzCiAgdmFyIHNvdXJjZUlkOCA9IDE7CiAgdmFyIGJsYXN0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4MTQ1NywKICAgIG5hbWU6ICJCbGFzdCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5ibGFzdC5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsYXN0c2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibGFzdHNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmJsYXN0c2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjEyOTI5CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQ4CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JsYXN0U2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDkgPSAxMTE1NTExMTsKICB2YXIgYmxhc3RTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjg1ODc3NzMsCiAgICBuYW1lOiAiQmxhc3QgU2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5ibGFzdC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsYXN0c2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZXBvbGlhLmJsYXN0c2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5ibGFzdHNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc1NjY5MAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDkKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYm9iLmpzCiAgdmFyIHNvdXJjZUlkMTAgPSAxOwogIHZhciBib2IgPSBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogNjA4MDgsCiAgICBuYW1lOiAiQk9CIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUSCIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmdvYm9iLnh5eiJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuZ29ib2IueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQk9CIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmdvYm9iLnh5eiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICAuLi5jaGFpbkNvbmZpZzIuY29udHJhY3RzLAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMzEzMQogICAgICB9LAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDEwXTogewogICAgICAgICAgYWRkcmVzczogIjB4ZERhNTNFMjNmOGEzMjY0MGIwNEQ3MjU2ZTY1MUMxZGI5OGRCMTFDMSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ0NjI2MTUKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDEwXTogewogICAgICAgICAgYWRkcmVzczogIjB4OEFkZUUxMjQ0NDc0MzVmRTAzZTNDRDI0ZEYzZjRjQUUzMkU2NWEzRSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ0NjI2MTUKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQxMAogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ib2JTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMTEgPSAxMTE1NTExMTsKICB2YXIgYm9iU2Vwb2xpYSA9IGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiA4MDg4MTMsCiAgICBuYW1lOiAiQk9CIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRVRIIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ib2Itc2Vwb2xpYS5ycGMuZ29ib2IueHl6Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2JvYi1zZXBvbGlhLnJwYy5nb2JvYi54eXoiXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vYm9iLXNlcG9saWEucnBjLmdvYm9iLnh5eiJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ib2Itc2Vwb2xpYS5ycGMuZ29ib2IueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQk9CIFNlcG9saWEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYm9iLXNlcG9saWEuZXhwbG9yZXIuZ29ib2IueHl6IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDM1Njc3CiAgICAgIH0sCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMTFdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgxNEQwMDY5NDUyYjRBRTJiMjUwQjM5NWI4YWRBYjc3MUU0MjY3ZDJmIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogNDQ2MjYxNQogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTFdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg4NjdCMUFhODcyYjlDOGNCNUU5Rjc3NTVmZURDNDVCQjI0QWQwYWU0IiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogNDQ2MjYxNQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBzb3VyY2VJZDogc291cmNlSWQxMQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ib2JhLmpzCiAgdmFyIGJvYmEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI4OCwKICAgIG5hbWU6ICJCb2JhIE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmJvYmEubmV0d29yayJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJPQkFTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2JvYmFzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0NDY4NTkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ib2JhU2Vwb2xpYS5qcwogIHZhciBib2JhU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjg4ODIsCiAgICBuYW1lOiAiQm9iYSBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5ib2JhLm5ldHdvcmsiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCT0JBU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJvYmFzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYnJvbm9zLmpzCiAgdmFyIGJyb25vcyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAzOSwKICAgIG5hbWU6ICJCcm9ub3MiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQlJPIiwKICAgICAgc3ltYm9sOiAiQlJPIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZXZtLmJyb25vcy5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCcm9ub1NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYnJvc2Nhbi5icm9ub3Mub3JnIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Jyb25vc1Rlc3RuZXQuanMKICB2YXIgYnJvbm9zVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAzOCwKICAgIG5hbWU6ICJCcm9ub3MgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCcm9ub3MgQ29pbiIsCiAgICAgIHN5bWJvbDogInRCUk8iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldm0tdGVzdG5ldC5icm9ub3Mub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQnJvbm9TY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Ricm9zY2FuLmJyb25vcy5vcmciCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JzYy5qcwogIHZhciBic2MgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU2LAogICAgbmFtZTogIkJOQiBTbWFydCBDaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCTkIiLAogICAgICBzeW1ib2w6ICJCTkIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMuYW5rci5jb20vYnNjIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQnNjU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ic2NzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkuYnNjc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE1OTIxNDUyCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYnNjVGVzdG5ldC5qcwogIHZhciBic2NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5NywKICAgIG5hbWU6ICJCaW5hbmNlIFNtYXJ0IENoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQk5CIiwKICAgICAgc3ltYm9sOiAidEJOQiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2RhdGEtc2VlZC1wcmVic2MtMS1zMS5ibmJjaGFpbi5vcmc6ODU0NSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJzY1NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5ic2NzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJzY3NjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNzQyMjQ4MwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ic2NHcmVlbmZpZWxkLmpzCiAgdmFyIGJzY0dyZWVuZmllbGQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMTcsCiAgICBuYW1lOiAiQk5CIEdyZWVuZmllbGQgQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQk5CIiwKICAgICAgc3ltYm9sOiAiQk5CIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZ3JlZW5maWVsZC1jaGFpbi5ibmJjaGFpbi5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCTkIgR3JlZW5maWVsZCBNYWlubmV0IFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ3JlZW5maWVsZHNjYW4uY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYnRyLmpzCiAgdmFyIGJ0ciA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAwOTAxLAogICAgbmFtZTogIkJpdGxheWVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCaXRjb2luIiwKICAgICAgc3ltYm9sOiAiQlRDIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWwogICAgICAgICAgImh0dHBzOi8vcnBjLmJpdGxheWVyLm9yZyIsCiAgICAgICAgICAiaHR0cHM6Ly9ycGMuYml0bGF5ZXItcnBjLmNvbSIsCiAgICAgICAgICAiaHR0cHM6Ly9ycGMuYW5rci5jb20vYml0bGF5ZXIiCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3MuYml0bGF5ZXIub3JnIiwgIndzczovL3dzLmJpdGxheWVyLXJwYy5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCaXRsYXllcihCVFIpIFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3LmJ0cnNjYW4uY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2J0clRlc3RuZXQuanMKICB2YXIgYnRyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAwODEwLAogICAgbmFtZTogIkJpdGxheWVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkJpdGNvaW4iLAogICAgICBzeW1ib2w6ICJCVEMiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC1ycGMuYml0bGF5ZXIub3JnIl0sCiAgICAgICAgd2ViU29ja2V0OiBbCiAgICAgICAgICAid3NzOi8vdGVzdG5ldC13cy5iaXRsYXllci5vcmciLAogICAgICAgICAgIndzczovL3Rlc3RuZXQtd3MuYml0bGF5ZXItcnBjLmNvbSIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJpdGxheWVyKEJUUikgU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJ0cnNjYW4uY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ieG4uanMKICB2YXIgYnhuID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0OTk5LAogICAgbmFtZTogIkJsYWNrRm9ydCBFeGNoYW5nZSBOZXR3b3JrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJCbGFja0ZvcnQgVG9rZW4iLCBzeW1ib2w6ICJCWE4iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmJsYWNrZm9ydC5uZXR3b3JrL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuYmxhY2tmb3J0Lm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuYmxhY2tmb3J0Lm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2J4blRlc3RuZXQuanMKICB2YXIgYnhuVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDc3NywKICAgIG5hbWU6ICJCbGFja0ZvcnQgRXhjaGFuZ2UgTmV0d29yayBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCbGFja0ZvcnQgVGVzdG5ldCBUb2tlbiIsCiAgICAgIHN5bWJvbDogIlRCWE4iLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5ibGFja2ZvcnQubmV0d29yay9ycGMiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQtZXhwbG9yZXIuYmxhY2tmb3J0Lm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC1leHBsb3Jlci5ibGFja2ZvcnQubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NhbnRvLmpzCiAgdmFyIGNhbnRvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NzAwLAogICAgbmFtZTogIkNhbnRvIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkNhbnRvIiwKICAgICAgc3ltYm9sOiAiQ0FOVE8iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9jYW50by5ncmF2aXR5Y2hhaW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUdWJlci5CdWlsZCAoQmxvY2tzY291dCkiLAogICAgICAgIHVybDogImh0dHBzOi8vdHViZXIuYnVpbGQiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjkwNTc4OQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2Vsby9mZWVzLmpzCiAgdmFyIGZlZXMgPSB7CiAgICAvKgogICAgICAgKiBFc3RpbWF0ZXMgdGhlIGZlZXMgcGVyIGdhcyBmb3IgYSB0cmFuc2FjdGlvbi4KICAgIAogICAgICAgKiBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgdG8gYmUgcGFpZCBpbiBhIHRva2VuIChmZWVDdXJyZW5jeSBpcyBwcmVzZW50KSB0aGVuIHRoZSBmZWVzCiAgICAgICAqIGFyZSBlc3RpbWF0ZWQgaW4gdGhlIHZhbHVlIG9mIHRoZSB0b2tlbi4gT3RoZXJ3aXNlIGZhbGxzIGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICAgICogZXN0aW1hdGlvbiBieSByZXR1cm5pbmcgbnVsbC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHBhcmFtcyBmZWUgZXN0aW1hdGlvbiBmdW5jdGlvbiBwYXJhbWV0ZXJzCiAgICAgICAqLwogICAgZXN0aW1hdGVGZWVzUGVyR2FzOiBhc3luYyAocGFyYW1zKSA9PiB7CiAgICAgIGlmICghcGFyYW1zLnJlcXVlc3Q/LmZlZUN1cnJlbmN5KQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCBbbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhc10gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgZXN0aW1hdGVGZWVQZXJHYXNJbkZlZUN1cnJlbmN5KHBhcmFtcy5jbGllbnQsIHBhcmFtcy5yZXF1ZXN0LmZlZUN1cnJlbmN5KSwKICAgICAgICBlc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzSW5GZWVDdXJyZW5jeShwYXJhbXMuY2xpZW50LCBwYXJhbXMucmVxdWVzdC5mZWVDdXJyZW5jeSkKICAgICAgXSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgbWF4RmVlUGVyR2FzLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzCiAgICAgIH07CiAgICB9CiAgfTsKICBhc3luYyBmdW5jdGlvbiBlc3RpbWF0ZUZlZVBlckdhc0luRmVlQ3VycmVuY3koY2xpZW50LCBmZWVDdXJyZW5jeSkgewogICAgY29uc3QgZmVlID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfZ2FzUHJpY2UiLAogICAgICBwYXJhbXM6IFtmZWVDdXJyZW5jeV0KICAgIH0pOwogICAgcmV0dXJuIEJpZ0ludChmZWUpOwogIH0KICBhc3luYyBmdW5jdGlvbiBlc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzSW5GZWVDdXJyZW5jeShjbGllbnQsIGZlZUN1cnJlbmN5KSB7CiAgICBjb25zdCBmZWVzUGVyR2FzID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfbWF4UHJpb3JpdHlGZWVQZXJHYXMiLAogICAgICBwYXJhbXM6IFtmZWVDdXJyZW5jeV0KICAgIH0pOwogICAgcmV0dXJuIEJpZ0ludChmZWVzUGVyR2FzKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2Vsby9mb3JtYXR0ZXJzLmpzCiAgaW5pdF9mcm9tSGV4KCk7CiAgaW5pdF90cmFuc2FjdGlvblJlcXVlc3QoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jZWxvL3V0aWxzLmpzCiAgaW5pdF90cmltKCk7CiAgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSAwIHx8IHZhbHVlID09PSAwbiB8fCB2YWx1ZSA9PT0gdm9pZCAwIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAiMCIgfHwgdmFsdWUgPT09ICIiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgKHRyaW0odmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICIweCIgfHwgdHJpbSh2YWx1ZSkudG9Mb3dlckNhc2UoKSA9PT0gIjB4MDAiKTsKICB9CiAgZnVuY3Rpb24gaXNQcmVzZW50KHZhbHVlKSB7CiAgICByZXR1cm4gIWlzRW1wdHkodmFsdWUpOwogIH0KICBmdW5jdGlvbiBpc0VJUDE1NTkodHJhbnNhY3Rpb24pIHsKICAgIHJldHVybiB0eXBlb2YgdHJhbnNhY3Rpb24ubWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgdHJhbnNhY3Rpb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiOwogIH0KICBmdW5jdGlvbiBpc0NJUDY0KHRyYW5zYWN0aW9uKSB7CiAgICBpZiAodHJhbnNhY3Rpb24udHlwZSA9PT0gImNpcDY0IikgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBpc0VJUDE1NTkodHJhbnNhY3Rpb24pICYmIGlzUHJlc2VudCh0cmFuc2FjdGlvbi5mZWVDdXJyZW5jeSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NlbG8vZm9ybWF0dGVycy5qcwogIHZhciBmb3JtYXR0ZXJzMyA9IHsKICAgIGJsb2NrOiAvKiBAX19QVVJFX18gKi8gZGVmaW5lQmxvY2soewogICAgICBmb3JtYXQoYXJncykgewogICAgICAgIGNvbnN0IHRyYW5zYWN0aW9ucyA9IGFyZ3MudHJhbnNhY3Rpb25zPy5tYXAoKHRyYW5zYWN0aW9uKSA9PiB7CiAgICAgICAgICBpZiAodHlwZW9mIHRyYW5zYWN0aW9uID09PSAic3RyaW5nIikKICAgICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uOwogICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgLi4uZm9ybWF0dGVkLAogICAgICAgICAgICAuLi50cmFuc2FjdGlvbi5nYXRld2F5RmVlID8gewogICAgICAgICAgICAgIGdhdGV3YXlGZWU6IGhleFRvQmlnSW50KHRyYW5zYWN0aW9uLmdhdGV3YXlGZWUpLAogICAgICAgICAgICAgIGdhdGV3YXlGZWVSZWNpcGllbnQ6IHRyYW5zYWN0aW9uLmdhdGV3YXlGZWVSZWNpcGllbnQKICAgICAgICAgICAgfSA6IHt9LAogICAgICAgICAgICBmZWVDdXJyZW5jeTogdHJhbnNhY3Rpb24uZmVlQ3VycmVuY3kKICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHRyYW5zYWN0aW9ucywKICAgICAgICAgIC4uLmFyZ3MucmFuZG9tbmVzcyA/IHsgcmFuZG9tbmVzczogYXJncy5yYW5kb21uZXNzIH0gOiB7fQogICAgICAgIH07CiAgICAgIH0KICAgIH0pLAogICAgdHJhbnNhY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVUcmFuc2FjdGlvbih7CiAgICAgIGZvcm1hdChhcmdzKSB7CiAgICAgICAgaWYgKGFyZ3MudHlwZSA9PT0gIjB4N2UiKQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgaXNTeXN0ZW1UeDogYXJncy5pc1N5c3RlbVR4LAogICAgICAgICAgICBtaW50OiBhcmdzLm1pbnQgPyBoZXhUb0JpZ0ludChhcmdzLm1pbnQpIDogdm9pZCAwLAogICAgICAgICAgICBzb3VyY2VIYXNoOiBhcmdzLnNvdXJjZUhhc2gsCiAgICAgICAgICAgIHR5cGU6ICJkZXBvc2l0IgogICAgICAgICAgfTsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHsgZmVlQ3VycmVuY3k6IGFyZ3MuZmVlQ3VycmVuY3kgfTsKICAgICAgICBpZiAoYXJncy50eXBlID09PSAiMHg3YiIpCiAgICAgICAgICB0cmFuc2FjdGlvbi50eXBlID0gImNpcDY0IjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGlmIChhcmdzLnR5cGUgPT09ICIweDdjIikKICAgICAgICAgICAgdHJhbnNhY3Rpb24udHlwZSA9ICJjaXA0MiI7CiAgICAgICAgICB0cmFuc2FjdGlvbi5nYXRld2F5RmVlID0gYXJncy5nYXRld2F5RmVlID8gaGV4VG9CaWdJbnQoYXJncy5nYXRld2F5RmVlKSA6IG51bGw7CiAgICAgICAgICB0cmFuc2FjdGlvbi5nYXRld2F5RmVlUmVjaXBpZW50ID0gYXJncy5nYXRld2F5RmVlUmVjaXBpZW50OwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICAgIH0KICAgIH0pLAogICAgdHJhbnNhY3Rpb25SZXF1ZXN0OiAvKiBAX19QVVJFX18gKi8gZGVmaW5lVHJhbnNhY3Rpb25SZXF1ZXN0KHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCByZXF1ZXN0ID0ge307CiAgICAgICAgaWYgKGFyZ3MuZmVlQ3VycmVuY3kpCiAgICAgICAgICByZXF1ZXN0LmZlZUN1cnJlbmN5ID0gYXJncy5mZWVDdXJyZW5jeTsKICAgICAgICBpZiAoaXNDSVA2NChhcmdzKSkKICAgICAgICAgIHJlcXVlc3QudHlwZSA9ICIweDdiIjsKICAgICAgICByZXR1cm4gcmVxdWVzdDsKICAgICAgfQogICAgfSkKICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NlbG8vc2VyaWFsaXplcnMuanMKICBpbml0X2FkZHJlc3MoKTsKICBpbml0X2Jhc2UoKTsKICBpbml0X2NoYWluKCk7CiAgaW5pdF9ub2RlKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbjQodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgaWYgKGlzQ0lQNjQodHJhbnNhY3Rpb24pKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25DSVA2NCh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKTsKICAgIHJldHVybiBzZXJpYWxpemVUcmFuc2FjdGlvbjModHJhbnNhY3Rpb24sIHNpZ25hdHVyZSk7CiAgfQogIHZhciBzZXJpYWxpemVyczMgPSB7CiAgICB0cmFuc2FjdGlvbjogc2VyaWFsaXplVHJhbnNhY3Rpb240CiAgfTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkNJUDY0KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpIHsKICAgIGFzc2VydFRyYW5zYWN0aW9uQ0lQNjQodHJhbnNhY3Rpb24pOwogICAgY29uc3QgeyBjaGFpbklkLCBnYXMsIG5vbmNlLCB0bywgdmFsdWUsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIGFjY2Vzc0xpc3QsIGZlZUN1cnJlbmN5LCBkYXRhIH0gPSB0cmFuc2FjdGlvbjsKICAgIGNvbnN0IHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9IFsKICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgIG5vbmNlID8gdG9IZXgobm9uY2UpIDogIjB4IiwKICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXMgPyB0b0hleChtYXhQcmlvcml0eUZlZVBlckdhcykgOiAiMHgiLAogICAgICBtYXhGZWVQZXJHYXMgPyB0b0hleChtYXhGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgZ2FzID8gdG9IZXgoZ2FzKSA6ICIweCIsCiAgICAgIHRvID8/ICIweCIsCiAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiLAogICAgICBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpLAogICAgICBmZWVDdXJyZW5jeSwKICAgICAgLi4udG9ZUGFyaXR5U2lnbmF0dXJlQXJyYXkodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkKICAgIF07CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4N2IiLAogICAgICB0b1JscChzZXJpYWxpemVkVHJhbnNhY3Rpb24pCiAgICBdKTsKICB9CiAgdmFyIE1BWF9NQVhfRkVFX1BFUl9HQVMgPSAybiAqKiAyNTZuIC0gMW47CiAgZnVuY3Rpb24gYXNzZXJ0VHJhbnNhY3Rpb25DSVA2NCh0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBtYXhQcmlvcml0eUZlZVBlckdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckdhcywgdG8sIGZlZUN1cnJlbmN5IH0gPSB0cmFuc2FjdGlvbjsKICAgIGlmIChjaGFpbklkIDw9IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhaW5JZEVycm9yKHsgY2hhaW5JZCB9KTsKICAgIGlmICh0byAmJiAhaXNBZGRyZXNzKHRvKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB0byB9KTsKICAgIGlmIChnYXNQcmljZSkKICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoImBnYXNQcmljZWAgaXMgbm90IGEgdmFsaWQgQ0lQLTY0IFRyYW5zYWN0aW9uIGF0dHJpYnV0ZS4iKTsKICAgIGlmIChpc1ByZXNlbnQobWF4RmVlUGVyR2FzKSAmJiBtYXhGZWVQZXJHYXMgPiBNQVhfTUFYX0ZFRV9QRVJfR0FTKQogICAgICB0aHJvdyBuZXcgRmVlQ2FwVG9vSGlnaEVycm9yKHsgbWF4RmVlUGVyR2FzIH0pOwogICAgaWYgKGlzUHJlc2VudChtYXhQcmlvcml0eUZlZVBlckdhcykgJiYgaXNQcmVzZW50KG1heEZlZVBlckdhcykgJiYgbWF4UHJpb3JpdHlGZWVQZXJHYXMgPiBtYXhGZWVQZXJHYXMpCiAgICAgIHRocm93IG5ldyBUaXBBYm92ZUZlZUNhcEVycm9yKHsgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcyB9KTsKICAgIGlmIChpc1ByZXNlbnQoZmVlQ3VycmVuY3kpICYmICFpc0FkZHJlc3MoZmVlQ3VycmVuY3kpKSB7CiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgZmVlQ3VycmVuY3lgIE1VU1QgYmUgYSB0b2tlbiBhZGRyZXNzIGZvciBDSVAtNjQgdHJhbnNhY3Rpb25zLiIpOwogICAgfQogICAgaWYgKGlzRW1wdHkoZmVlQ3VycmVuY3kpKSB7CiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgZmVlQ3VycmVuY3lgIG11c3QgYmUgcHJvdmlkZWQgZm9yIENJUC02NCB0cmFuc2FjdGlvbnMuIik7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NlbG8vY2hhaW5Db25maWcuanMKICB2YXIgY2hhaW5Db25maWczID0gewogICAgZm9ybWF0dGVyczogZm9ybWF0dGVyczMsCiAgICBzZXJpYWxpemVyczogc2VyaWFsaXplcnMzLAogICAgZmVlcwogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NlbG8uanMKICB2YXIgY2VsbyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzMsCiAgICBpZDogNDIyMjAsCiAgICBuYW1lOiAiQ2VsbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDRUxPIiwKICAgICAgc3ltYm9sOiAiQ0VMTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2Zvcm5vLmNlbG8ub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ2VsbyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9jZWxvc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkuY2Vsb3NjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEzMTEyNTk5CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jZWxvQWxmYWpvcmVzLmpzCiAgdmFyIGNlbG9BbGZham9yZXMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWczLAogICAgaWQ6IDQ0Nzg3LAogICAgbmFtZTogIkFsZmFqb3JlcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDRUxPIiwKICAgICAgc3ltYm9sOiAiQS1DRUxPIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hbGZham9yZXMtZm9ybm8uY2Vsby10ZXN0bmV0Lm9yZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNlbG8gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuY2Vsby5vcmcvYWxmYWpvcmVzIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmNlbG8ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDU2OTAwMQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jaGlsaXouanMKICB2YXIgY2hpbGl6ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4ODg4OCwKICAgIG5hbWU6ICJDaGlsaXogQ2hhaW4iLAogICAgbmV0d29yazogImNoaWxpei1jaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDSFoiLAogICAgICBzeW1ib2w6ICJDSFoiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWwogICAgICAgICAgImh0dHBzOi8vcnBjLmFua3IuY29tL2NoaWxpeiIsCiAgICAgICAgICAiaHR0cHM6Ly9jaGlsaXotcnBjLnB1YmxpY25vZGUuY29tIgogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ2hpbGl6IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4uY2hpbGl6LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLmNoaWxpei5jb20vYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NoaXBzLmpzCiAgdmFyIGNoaXBzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyODgyLAogICAgbmFtZTogIkNoaXBzIE5ldHdvcmsiLAogICAgbmV0d29yazogIkNISVBTIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIklPVEEiLAogICAgICBzeW1ib2w6ICJJT1RBIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL25vZGUuY2hpcHMub29vL3dhc3AvYXBpL3YxL2NoYWlucy9pb3RhMXBwM2QzbW5hcDN1Zm1ncW5qc253MzQ0c3FtZjVzdmpoMjZ5Mmtobm1jODlzdjY3ODh5M3IyMDdhOGZuL2V2bSIKICAgICAgICBdCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY2xhc3NpYy5qcwogIHZhciBjbGFzc2ljID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2MSwKICAgIG5hbWU6ICJFdGhlcmV1bSBDbGFzc2ljIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUQyIsCiAgICAgIHN5bWJvbDogIkVUQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2V0Yy5yaXZldC5saW5rIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmNvbS9ldGMvbWFpbm5ldCIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jb25mbHV4RVNwYWNlLmpzCiAgdmFyIGNvbmZsdXhFU3BhY2UgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMzAsCiAgICBuYW1lOiAiQ29uZmx1eCBlU3BhY2UiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkNvbmZsdXgiLCBzeW1ib2w6ICJDRlgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldm0uY29uZmx1eHJwYy5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXZtLmNvbmZsdXhycGMuY29tL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ29uZmx1eFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZXZtLmNvbmZsdXhzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhFRmYwMDc4OTEwZjYzOGNkODE5OTZjYzExN2JjY0QzZURmMkIwNzJGIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDY4NjAyOTM1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY29uZmx1eEVTcGFjZVRlc3RuZXQuanMKICB2YXIgY29uZmx1eEVTcGFjZVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDcxLAogICAgbmFtZTogIkNvbmZsdXggZVNwYWNlIFRlc3RuZXQiLAogICAgbmV0d29yazogImNmeC1lc3BhY2UtdGVzdG5ldCIsCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkNvbmZsdXgiLCBzeW1ib2w6ICJDRlgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldm10ZXN0bmV0LmNvbmZsdXhycGMuY29tIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2V2bXRlc3RuZXQuY29uZmx1eHJwYy5jb20vd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJDb25mbHV4U2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ldm10ZXN0bmV0LmNvbmZsdXhzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhFRmYwMDc4OTEwZjYzOGNkODE5OTZjYzExN2JjY0QzZURmMkIwNzJGIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDExNzQ5OTA1MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NvcmVEYW8uanMKICB2YXIgY29yZURhbyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExNiwKICAgIG5hbWU6ICJDb3JlIERhbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDb3JlIiwKICAgICAgc3ltYm9sOiAiQ09SRSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5jb3JlZGFvLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNvcmVEYW8iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5jb3JlZGFvLm9yZyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTkwNzkzNAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3JhYi5qcwogIHZhciBjcmFiID0gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQ0LAogICAgbmFtZTogIkNyYWIgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDcmFiIE5ldHdvcmsgTmF0aXZlIFRva2VuIiwKICAgICAgc3ltYm9sOiAiQ1JBQiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vY3JhYi1ycGMuZGFyd2luaWEubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9jcmFiLXJwYy5kYXJ3aW5pYS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsgbmFtZTogIkJsb2Nrc2NvdXQiLCB1cmw6ICJodHRwczovL2NyYWItc2Nhbi5kYXJ3aW5pYS5uZXR3b3JrIiB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwMzI1OTMKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jcm9ub3MuanMKICB2YXIgY3Jvbm9zID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNSwKICAgIG5hbWU6ICJDcm9ub3MgTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDcm9ub3MiLAogICAgICBzeW1ib2w6ICJDUk8iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldm0uY3Jvbm9zLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNyb25vcyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5jcm9ub3Mub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLWFwaS5jcm9ub3Mub3JnL21haW5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5NjMxMTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jcm9ub3N6a0VWTS5qcwogIHZhciBjcm9ub3N6a0VWTSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzg4LAogICAgbmFtZTogIkNyb25vcyB6a0VWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkNyb25vcyB6a0VWTSBDUk8iLAogICAgICBzeW1ib2w6ICJ6a0NSTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL21haW5uZXQuemtldm0uY3Jvbm9zLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNyb25vcyB6a0VWTSAoTWFpbm5ldCkgQ2hhaW4gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuemtldm0uY3Jvbm9zLm9yZyIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jcm9ub3N6a0VWTVRlc3RuZXQuanMKICB2YXIgY3Jvbm9zemtFVk1UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyODIsCiAgICBuYW1lOiAiQ3Jvbm9zIHprRVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ3Jvbm9zIHprRVZNIFRlc3QgQ29pbiIsCiAgICAgIHN5bWJvbDogInprVENSTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuemtldm0uY3Jvbm9zLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNyb25vcyB6a0VWTSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnprZXZtLmNyb25vcy5vcmcvdGVzdG5ldCIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3Jvbm9zVGVzdG5ldC5qcwogIHZhciBjcm9ub3NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMzgsCiAgICBuYW1lOiAiQ3Jvbm9zIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ1JPIiwKICAgICAgc3ltYm9sOiAidENSTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2V2bS10My5jcm9ub3Mub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ3Jvbm9zIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2Nyb25vcy5vcmcvZXhwbG9yZXIvdGVzdG5ldDMiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTAxOTEyNTEKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3Jvc3NiZWxsLmpzCiAgdmFyIGNyb3NzYmVsbCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzczNywKICAgIG5hbWU6ICJDcm9zc2JlbGwiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ1NCIiwKICAgICAgc3ltYm9sOiAiQ1NCIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuY3Jvc3NiZWxsLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ3Jvc3NTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4uY3Jvc3NiZWxsLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NjYW4uY3Jvc3NiZWxsLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAzODI0NjAzMQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2N1cnRpcy5qcwogIHZhciBjdXJ0aXMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMzMTExLAogICAgbmFtZTogIkN1cnRpcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQXBlQ29pbiIsIHN5bWJvbDogIkFQRSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5jdXJ0aXMuYXBlY2hhaW4uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ3VydGlzIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmN1cnRpcy5hcGVjaGFpbi5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2N5YmVyLmpzCiAgdmFyIGN5YmVyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NTYwLAogICAgbmFtZTogIkN5YmVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2N5YmVyLmFsdC50ZWNobm9sb2d5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9jeWJlcnNjYW4uY28iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vY3liZXJzY2FuLmNvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3liZXJUZXN0bmV0LmpzCiAgdmFyIGN5YmVyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExNTU3NTYwLAogICAgbmFtZTogIkN5YmVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vY3liZXItdGVzdG5ldC5hbHQudGVjaG5vbG9neSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5jeWJlcnNjYW4uY28iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC5jeWJlcnNjYW4uY28vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhmZmMzOTFGMDAxODI2OWQ0NzU4QUVBMWExNDQ3NzJFOEZCOTk1NDVFIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwNDU0NQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kYXJ3aW5pYS5qcwogIHZhciBkYXJ3aW5pYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDYsCiAgICBuYW1lOiAiRGFyd2luaWEgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJSSU5HIiwKICAgICAgc3ltYm9sOiAiUklORyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmRhcndpbmlhLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLmRhcndpbmlhLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogeyBuYW1lOiAiRXhwbG9yZXIiLCB1cmw6ICJodHRwczovL2V4cGxvcmVyLmRhcndpbmlhLm5ldHdvcmsiIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjk0MjAKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kY2hhaW4uanMKICB2YXIgZGNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAyNzE2NDQ2NDI5ODM3ZTMsCiAgICBuYW1lOiAiRGNoYWluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2RjaGFpbi0yNzE2NDQ2NDI5ODM3MDAwLTEuanNvbnJwYy5zYWdhcnBjLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRGNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2RjaGFpbi0yNzE2NDQ2NDI5ODM3MDAwLTEuc2FnYWV4cGxvcmVyLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1kY2hhaW4tMjcxNjQ0NjQyOTgzNzAwMC0xLnNhZ2FleHBsb3Jlci5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kY2hhaW5UZXN0bmV0LmpzCiAgdmFyIGRjaGFpblRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI3MTMwMTc5OTc1NzhlMywKICAgIG5hbWU6ICJEY2hhaW4gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL2RjaGFpbnRlc3RuZXQtMjcxMzAxNzk5NzU3ODAwMC0xLmpzb25ycGMudGVzdG5ldC5zYWdhcnBjLmlvIgogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRGNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2RjaGFpbnRlc3RuZXQtMjcxMzAxNzk5NzU3ODAwMC0xLnRlc3RuZXQuc2FnYWV4cGxvcmVyLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1kY2hhaW50ZXN0bmV0LTI3MTMwMTc5OTc1NzgwMDAtMS50ZXN0bmV0LnNhZ2FleHBsb3Jlci5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kZWZpY2hhaW5Fdm0uanMKICB2YXIgZGVmaWNoYWluRXZtID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMTMwLAogICAgbmV0d29yazogImRlZmljaGFpbi1ldm0iLAogICAgbmFtZTogIkRlRmlDaGFpbiBFVk0gTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRGVGaUNoYWluIiwKICAgICAgc3ltYm9sOiAiREZJIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC5tYWlubmV0Lm9jZWFuLmplbGx5ZmlzaHNkay5jb20iXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZXRoLm1haW5uZXQub2NlYW4uamVsbHlmaXNoc2RrLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRlRmlTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL21ldGEuZGVmaXNjYW4ubGl2ZSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMzc4NTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kZWZpY2hhaW5Fdm1UZXN0bmV0LmpzCiAgdmFyIGRlZmljaGFpbkV2bVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMzEsCiAgICBuZXR3b3JrOiAiZGVmaWNoYWluLWV2bS10ZXN0bmV0IiwKICAgIG5hbWU6ICJEZUZpQ2hhaW4gRVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkRlRmlDaGFpbiIsCiAgICAgIHN5bWJvbDogIkRGSSIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldGgudGVzdG5ldC5vY2Vhbi5qZWxseWZpc2hzZGsuY29tIl0KICAgICAgfSwKICAgICAgcHVibGljOiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC50ZXN0bmV0Lm9jZWFuLmplbGx5ZmlzaHNkay5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJEZUZpU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9tZXRhLmRlZmlzY2FuLmxpdmUvP25ldHdvcms9VGVzdE5ldCIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNTY0NjIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZGVnZW4uanMKICB2YXIgZGVnZW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDY2NjY2NjY2NiwKICAgIG5hbWU6ICJEZWdlbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJEZWdlbiIsCiAgICAgIHN5bWJvbDogIkRFR0VOIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZGVnZW4udGlwcyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuZGVnZW4udGlwcyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRlZ2VuIENoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmRlZ2VuLnRpcHMiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZGVnZW4udGlwcy9hcGkvdjIiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZGZrLmpzCiAgdmFyIGRmayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTM5MzUsCiAgICBuYW1lOiAiREZLIENoYWluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkpld2VsIiwKICAgICAgc3ltYm9sOiAiSkVXRUwiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3N1Ym5ldHMuYXZheC5uZXR3b3JrL2RlZmkta2luZ2RvbXMvZGZrLWNoYWluL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRGS1N1Ym5ldFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc3VibmV0cy5hdmF4Lm5ldHdvcmsvZGVmaS1raW5nZG9tcyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDc5MDU1MQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2RvZG9jaGFpblRlc3RuZXQuanMKICB2YXIgZG9kb2NoYWluVGVzdG5ldCA9IGRlZmluZUNoYWluKHsKICAgIGlkOiA1MzQ1NywKICAgIG5hbWU6ICJET0RPY2hhaW4gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJET0RPIiwgc3ltYm9sOiAiRE9ETyIgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9kb2RvY2hhaW4tdGVzdG5ldC5hbHQudGVjaG5vbG9neSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9kb2RvY2hhaW4tdGVzdG5ldC5hbHQudGVjaG5vbG9neS93cyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRPRE9jaGFpbiBUZXN0bmV0IChTZXBvbGlhKSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LXNjYW4uZG9kb2NoYWluLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZG9nZWNoYWluLmpzCiAgdmFyIGRvZ2VjaGFpbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMmUzLAogICAgbmFtZTogIkRvZ2VjaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJXcmFwcGVkIERvZ2Vjb2luIiwKICAgICAgc3ltYm9sOiAiV0RPR0UiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMuZG9nZWNoYWluLmRvZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRvZ2VDaGFpbkV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmRvZ2VjaGFpbi5kb2ciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZG9nZWNoYWluLmRvZy9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweDY4YTg2MDlhNjBhMDA4RUZBNjMzZGZkZWM1OTJjMDNCMDMwY0M1MDgiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjUzODQwMzEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kcmV5ZXJ4TWFpbm5ldC5qcwogIHZhciBkcmV5ZXJ4TWFpbm5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjM0NTEsCiAgICBuYW1lOiAiRHJleWVyWCBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJEcmV5ZXJYIiwKICAgICAgc3ltYm9sOiAiRFJYIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5kcmV5ZXJ4LmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRyZXllclggU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLmRyZXllcnguY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2RyZXllcnhUZXN0bmV0LmpzCiAgdmFyIGRyZXllcnhUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMzQ1MiwKICAgIG5hbWU6ICJEcmV5ZXJYIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkRyZXllclgiLAogICAgICBzeW1ib2w6ICJEUlgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHA6Ly90ZXN0bmV0LXJwYy5kcmV5ZXJ4LmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRyZXllclggVGVzdG5ldCBTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQtc2Nhbi5kcmV5ZXJ4LmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZWRnZWxlc3MuanMKICB2YXIgZWRnZWxlc3MgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIwMjYsCiAgICBuYW1lOiAiRWRnZWxlc3MgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRWRnZWxlc3MgV3JhcHBlZCBFVEgiLAogICAgICBzeW1ib2w6ICJFd0VUSCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZWRnZWxlc3MubmV0d29yay9odHRwIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5lZGdlbGVzcy5uZXR3b3JrL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWRnZWxlc3MgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuZWRnZWxlc3MubmV0d29yayIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lZGdlbGVzc1Rlc3RuZXQuanMKICB2YXIgZWRnZWxlc3NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDIsCiAgICBuYW1lOiAiRWRnZWxlc3MgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRWRnZWxlc3MgV3JhcHBlZCBFVEgiLAogICAgICBzeW1ib2w6ICJFd0VUSCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9lZGdlbGVzcy10ZXN0bmV0LnJwYy5jYWxkZXJhLnh5ei9odHRwIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2VkZ2VsZXNzLXRlc3RuZXQucnBjLmNhbGRlcmEueHl6L3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWRnZWxlc3MgVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmV4cGxvcmVyLmVkZ2VsZXNzLm5ldHdvcmsiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZWRnZXdhcmUuanMKICB2YXIgZWRnZXdhcmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIwMjEsCiAgICBuYW1lOiAiRWRnZXdhcmUgRWRnZUVWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVkZ2V3YXJlIiwKICAgICAgc3ltYm9sOiAiRURHIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZWRnZXdhcmUtZXZtLmplbGxpZWRvd2wubmV0Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWRnc2NhbiBieSBCaGFyYXRoY29vcmciLAogICAgICAgIHVybDogImh0dHBzOi8vZWRnc2Nhbi5saXZlIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2VkZ3NjYW4ubGl2ZS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTgxMTc4NzIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lZGdld2FyZVRlc3RuZXQuanMKICB2YXIgZWRnZXdhcmVUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDIyLAogICAgbmFtZTogIkJlcmVzaGVldCBCZXJlRVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiVGVzdG5ldCBFREciLAogICAgICBzeW1ib2w6ICJ0RURHIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYmVyZXNoZWV0LWV2bS5qZWxsaWVkb3dsLm5ldCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkVkZ3NjYW4gYnkgQmhhcmF0aGNvb3JnIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuZWRnc2Nhbi5saXZlIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQuZWRnc2Nhbi5saXZlL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lb24uanMKICB2YXIgZW9uID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3MzMyLAogICAgbmFtZTogIkhvcml6ZW4gRU9OIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlpFTiIsCiAgICAgIHN5bWJvbDogIlpFTiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2Vvbi1ycGMuaG9yaXplbmxhYnMuaW8vZXRodjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFT04gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZW9uLWV4cGxvcmVyLmhvcml6ZW5sYWJzLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lb3MuanMKICB2YXIgZW9zID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNzc3NywKICAgIG5hbWU6ICJFT1MgRVZNIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVPUyIsCiAgICAgIHN5bWJvbDogIkVPUyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FwaS5ldm0uZW9zbmV0d29yay5jb20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFT1MgRVZNIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmV2bS5lb3NuZXR3b3JrLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0uZW9zbmV0d29yay5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc5NDM5MzMKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lb3NUZXN0bmV0LmpzCiAgdmFyIGVvc1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE1NTU3LAogICAgbmFtZTogIkVPUyBFVk0gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFT1MiLAogICAgICBzeW1ib2w6ICJFT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkudGVzdG5ldC5ldm0uZW9zbmV0d29yay5jb20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFT1MgRVZNIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5ldm0uZW9zbmV0d29yay5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5ldm0uZW9zbmV0d29yay5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDkwNjc5NDAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZXRoZXJsaW5rLmpzCiAgdmFyIGV0aGVybGluayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDI3OTMsCiAgICBuYW1lOiAiRXRoZXJsaW5rIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlRleiIsCiAgICAgIHN5bWJvbDogIlhUWiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL25vZGUubWFpbm5ldC5ldGhlcmxpbmsuY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJsaW5rIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmV0aGVybGluay5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzM4OTkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ldGhlcmxpbmtUZXN0bmV0LmpzCiAgdmFyIGV0aGVybGlua1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODEyMywKICAgIG5hbWU6ICJFdGhlcmxpbmsgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJUZXoiLAogICAgICBzeW1ib2w6ICJYVFoiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ub2RlLmdob3N0bmV0LmV0aGVybGluay5jb20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcmxpbmsgVGVzdG5ldCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLmV0aGVybGluay5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2V2bW9zLmpzCiAgdmFyIGV2bW9zID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5MDAxLAogICAgbmFtZTogIkV2bW9zIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV2bW9zIiwKICAgICAgc3ltYm9sOiAiRVZNT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldGguYmQuZXZtb3Mub3JnOjg1NDUiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdm1vcyBCbG9jayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9lc2Nhbi5saXZlIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2V2bW9zVGVzdG5ldC5qcwogIHZhciBldm1vc1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDllMywKICAgIG5hbWU6ICJFdm1vcyBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV2bW9zIiwKICAgICAgc3ltYm9sOiAiRVZNT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldGguYmQuZXZtb3MuZGV2Ojg1NDUiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdm1vcyBUZXN0bmV0IEJsb2NrIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V2bS5ldm1vcy5kZXYvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2VrdGEuanMKICB2YXIgZWt0YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTk5NCwKICAgIG5hbWU6ICJFa3RhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVLVEEiLAogICAgICBzeW1ib2w6ICJFS1RBIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbWFpbi5la3RhLmlvIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWt0YXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZWt0YXNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZWt0YXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2VrdGFUZXN0bmV0LmpzCiAgdmFyIGVrdGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDA0LAogICAgbmFtZTogIkVrdGEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFS1RBIiwKICAgICAgc3ltYm9sOiAiRUtUQSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3Rlc3QuZWt0YS5pbzo4NTQ1Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGVzdCBFa3Rhc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0LmVrdGFzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3QuZWt0YXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mYW50b20uanMKICB2YXIgZmFudG9tID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNTAsCiAgICBuYW1lOiAiRmFudG9tIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkZhbnRvbSIsCiAgICAgIHN5bWJvbDogIkZUTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5hbmtyLmNvbS9mYW50b20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGVE1TY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2Z0bXNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5mdG1zY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzMwMDE5ODcKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mYW50b21Tb25pY1Rlc3RuZXQuanMKICB2YXIgZmFudG9tU29uaWNUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2NDI0MCwKICAgIG5hbWU6ICJGYW50b20gU29uaWMgT3BlbiBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJmYW50b20tc29uaWMtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJGYW50b20iLAogICAgICBzeW1ib2w6ICJGVE0iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGNhcGkuc29uaWMuZmFudG9tLm5ldHdvcmsiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGYW50b20gU29uaWMgT3BlbiBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3B1YmxpYy1zb25pYy5mYW50b20ubmV0d29yayIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmFudG9tVGVzdG5ldC5qcwogIHZhciBmYW50b21UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MDAyLAogICAgbmFtZTogIkZhbnRvbSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkZhbnRvbSIsCiAgICAgIHN5bWJvbDogIkZUTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy50ZXN0bmV0LmZhbnRvbS5uZXR3b3JrIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRlRNU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmZ0bXNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQuZnRtc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDgzMjg2ODgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmliby5qcwogIHZhciBmaWJvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjMwNiwKICAgIG5hbWU6ICJGaWJvIENoYWluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogImZpYm8iLAogICAgICBzeW1ib2w6ICJGSUJPIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbmV0d29yay5oenJvYy5hcnQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWJvU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLmZpYm9jaGFpbi5vcmciCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmlsZWNvaW4uanMKICB2YXIgZmlsZWNvaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxNCwKICAgIG5hbWU6ICJGaWxlY29pbiBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogImZpbGVjb2luIiwKICAgICAgc3ltYm9sOiAiRklMIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLm5vZGUuZ2xpZi5pby9ycGMvdjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWxmb3giLAogICAgICAgIHVybDogImh0dHBzOi8vZmlsZm94LmluZm8vZW4iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzMyODU5NAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZpbGVjb2luQ2FsaWJyYXRpb24uanMKICB2YXIgZmlsZWNvaW5DYWxpYnJhdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzE0MTU5LAogICAgbmFtZTogIkZpbGVjb2luIENhbGlicmF0aW9uIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogInRlc3RuZXQgZmlsZWNvaW4iLAogICAgICBzeW1ib2w6ICJ0RklMIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLmNhbGlicmF0aW9uLm5vZGUuZ2xpZi5pby9ycGMvdjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWxzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2NhbGlicmF0aW9uLmZpbHNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZpbGVjb2luSHlwZXJzcGFjZS5qcwogIHZhciBmaWxlY29pbkh5cGVyc3BhY2UgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxNDEsCiAgICBuYW1lOiAiRmlsZWNvaW4gSHlwZXJzcGFjZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJ0ZXN0bmV0IGZpbGVjb2luIiwKICAgICAgc3ltYm9sOiAidEZJTCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FwaS5oeXBlcnNwYWNlLm5vZGUuZ2xpZi5pby9ycGMvdjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWxmb3giLAogICAgICAgIHVybDogImh0dHBzOi8vaHlwZXJzcGFjZS5maWxmb3guaW5mby9lbiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmxhcmUuanMKICB2YXIgZmxhcmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0LAogICAgbmFtZTogIkZsYXJlIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiZmxhcmUiLAogICAgICBzeW1ib2w6ICJGTFIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9mbGFyZS1hcGkuZmxhcmUubmV0d29yay9leHQvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGbGFyZSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9mbGFyZS1leHBsb3Jlci5mbGFyZS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2ZsYXJlLWV4cGxvcmVyLmZsYXJlLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZsYXJlVGVzdG5ldC5qcwogIHZhciBmbGFyZVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExNCwKICAgIG5hbWU6ICJDb3N0b24yIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogImNvc3RvbjJmbGFyZSIsCiAgICAgIHN5bWJvbDogIkMyRkxSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vY29zdG9uMi1hcGkuZmxhcmUubmV0d29yay9leHQvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJDb3N0b24yIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2Nvc3RvbjItZXhwbG9yZXIuZmxhcmUubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9jb3N0b24yLWV4cGxvcmVyLmZsYXJlLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mbG93UHJldmlld25ldC5qcwogIHZhciBmbG93UHJldmlld25ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNjQ2LAogICAgbmFtZTogIkZsb3dFVk0gUHJldmlld25ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJGbG93IiwKICAgICAgc3ltYm9sOiAiRkxPVyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcHJldmlld25ldC5ldm0ubm9kZXMub25mbG93Lm9yZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlByZXZpZXduZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcHJldmlld25ldC5mbG93ZGl2ZXIuaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjIwNQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Zsb3dNYWlubmV0LmpzCiAgdmFyIGZsb3dNYWlubmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NDcsCiAgICBuYW1lOiAiRmxvd0VWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkZsb3ciLAogICAgICBzeW1ib2w6ICJGTE9XIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmV2bS5ub2Rlcy5vbmZsb3cub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFpbm5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9mbG93ZGl2ZXIuaW8iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmxvd1Rlc3RuZXQuanMKICB2YXIgZmxvd1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU0NSwKICAgIG5hbWU6ICJGbG93RVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRmxvdyIsCiAgICAgIHN5bWJvbDogIkZMT1ciCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuZXZtLm5vZGVzLm9uZmxvdy5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGbG93IERpdmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuZmxvd2RpdmVyLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEzNzUxOAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Zvcm1hLmpzCiAgdmFyIGZvcm1hID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5ODQxMjIsCiAgICBuYW1lOiAiRm9ybWEiLAogICAgbmV0d29yazogImZvcm1hIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIHN5bWJvbDogIlRJQSIsCiAgICAgIG5hbWU6ICJUSUEiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmZvcm1hLmFydCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly93cy5mb3JtYS5hcnQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGb3JtYSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5mb3JtYS5hcnQiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGQ1M0M2RkZCMTIzRjczNDlBMzI5ODBGODdmYWVEOEZmRGM5ZWYwNzkiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjUyNzA1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZm91bmRyeS5qcwogIHZhciBmb3VuZHJ5ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMTMzNywKICAgIG5hbWU6ICJGb3VuZHJ5IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cDovLzEyNy4wLjAuMTo4NTQ1Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzOi8vMTI3LjAuMC4xOjg1NDUiXQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZyYXh0YWwuanMKICB2YXIgc291cmNlSWQxMiA9IDE7CiAgdmFyIGZyYXh0YWwgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI1MiwKICAgIG5hbWU6ICJGcmF4dGFsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJGcmF4IEV0aGVyIiwgc3ltYm9sOiAiZnJ4RVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmZyYXguY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiZnJheHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZnJheHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5mcmF4c2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMTJdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg2NkNDOTE2RWQ1QzZDMkZBOTcwMTRmN0QxY0QxNDE1MjhBZTE3MWU0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDEyXTogewogICAgICAgICAgYWRkcmVzczogIjB4MzZjYjY1YzE5NjdBMEZiMEVFRTExNTY5QzUxQzJmMmFBMUNhNmY2RCIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MTM1MzIzCiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkMTJdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgzNEMwYkQ1ODc3QTVFZTcwOTlEMGY1Njg4RDY1RjRiQjkxNThCREUyIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMTkxMzUzMjMKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQxMgogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mcmF4dGFsVGVzdG5ldC5qcwogIHZhciBzb3VyY2VJZDEzID0gMTdlMzsKICB2YXIgZnJheHRhbFRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI1MjIsCiAgICBuYW1lOiAiRnJheHRhbCBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJGcmF4IEV0aGVyIiwgc3ltYm9sOiAiZnJ4RVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQuZnJheC5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJmcmF4c2NhbiB0ZXN0bmV0IiwKICAgICAgICB1cmw6ICJodHRwczovL2hvbGVza3kuZnJheHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1ob2xlc2t5LmZyYXhzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQxM106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDcxNUVBNjREQTEzRjRkMDgzMWVjZTRBZDNFOGMxYWEwMTMxNjdGMzIiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTNdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhCOWM2NEJmQTQ5OGQ1YjlhODM5OEVkNmY0NmViNzZkOTBkRTU1MDVkIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzE4NDE2CiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkMTNdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgwQmFhZkMyMTcxNjJmNjQ5MzA5MDlhRDlmMkIyNzEyNTEyMWQ2MzMyIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzE4NDE2CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTMKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZnVua2lNYWlubmV0LmpzCiAgdmFyIHNvdXJjZUlkMTQgPSAxOwogIHZhciBmdW5raU1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDMzOTc5LAogICAgbmFtZTogIkZ1bmtpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1tYWlubmV0LmZ1bmtpY2hhaW4uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRnVua2kgTWFpbm5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9mdW5raXNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cwogICAgfSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDE0CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Z1bmtpU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDE1ID0gMTExNTUxMTE7CiAgdmFyIGZ1bmtpU2Vwb2xpYSA9IGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAzMzk3OTAxLAogICAgbmV0d29yazogImZ1bmtpU2Vwb2xpYSIsCiAgICBuYW1lOiAiRnVua2kgU2Vwb2xpYSBTYW5kYm94IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2Z1bmtpLXRlc3RuZXQuYWx0LnRlY2hub2xvZ3kiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGdW5raSBTZXBvbGlhIFNhbmRib3ggRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS1zYW5kYm94LmZ1bmtpY2hhaW4uY29tLyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTYyMDIwNAogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZnVzZS5qcwogIHZhciBmdXNlID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjIsCiAgICBuYW1lOiAiRnVzZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRnVzZSIsIHN5bWJvbDogIkZVU0UiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcnBjLmZ1c2UuaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGdXNlIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmZ1c2UuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZnVzZS5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTYxNDY2MjgKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mdXNlU3BhcmtuZXQuanMKICB2YXIgZnVzZVNwYXJrbmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjMsCiAgICBuYW1lOiAiRnVzZSBTcGFya25ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU3BhcmsiLCBzeW1ib2w6ICJTUEFSSyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMuZnVzZXNwYXJrLmlvIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU3BhcmtlbnQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuZnVzZXNwYXJrLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmZ1c2VzcGFyay5pby9hcGkiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvaW90ZXguanMKICB2YXIgaW90ZXggPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQ2ODksCiAgICBuYW1lOiAiSW9UZVgiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSW9UZVgiLAogICAgICBzeW1ib2w6ICJJT1RYIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9iYWJlbC1hcGkubWFpbm5ldC5pb3RleC5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9iYWJlbC1hcGkubWFpbm5ldC5pb3RleC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIklvVGVYU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9pb3RleHNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjIxNjM2NzAKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pb3RleFRlc3RuZXQuanMKICB2YXIgaW90ZXhUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0NjkwLAogICAgbmFtZTogIklvVGVYIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSW9UZVgiLAogICAgICBzeW1ib2w6ICJJT1RYIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9iYWJlbC1hcGkudGVzdG5ldC5pb3RleC5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9iYWJlbC1hcGkudGVzdG5ldC5pb3RleC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIklvVGVYU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmlvdGV4c2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YjVjZWNENjg5NGM2ZjQ3M0VjNzI2QTE3NmYxNTEyMzk5QTJlMzU1ZCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDM0NzU5MgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9qYmMuanMKICB2YXIgamJjID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4ODk5LAogICAgbmFtZTogIkpJQkNIQUlOIEwxIiwKICAgIG5ldHdvcms6ICJqYmMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkpCQyIsIHN5bWJvbDogIkpCQyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1sMS5qaWJjaGFpbi5uZXQiXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLWwxLmppYmNoYWluLm5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwLWwxLmppYmNoYWluLm5ldCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHAtbDEuamliY2hhaW4ubmV0L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YzBDOEM0ODZEMTQ2NkM1N0VmZTEzQzJiZjAwMGQ0YzU2RjQ3Q0JkQyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMjk5MDQ4CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9qYmNUZXN0bmV0LmpzCiAgdmFyIGpiY1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDg4OTkxLAogICAgbmFtZTogIkppYmNoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInRKQkMiLCBzeW1ib2w6ICJ0SkJDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQuamliY2hhaW4ubmV0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHAudGVzdG5ldC5qaWJjaGFpbi5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwLnRlc3RuZXQuamliY2hhaW4ubmV0L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YTFhODU4YWQ5MDQxQjQ3NDFlNjIwMzU1YTNGOTZCM2M3OGU3MGVjRSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAzMjg0OAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rYXJ1cmEuanMKICB2YXIga2FydXJhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2ODYsCiAgICBuYW1lOiAiS2FydXJhIiwKICAgIG5ldHdvcms6ICJrYXJ1cmEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkthcnVyYSIsCiAgICAgIHN5bWJvbDogIktBUiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgcHVibGljOiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC1ycGMta2FydXJhLmFjYS1hcGkubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ldGgtcnBjLWthcnVyYS5hY2EtYXBpLm5ldHdvcmsiXQogICAgICB9LAogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC1ycGMta2FydXJhLmFjYS1hcGkubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ldGgtcnBjLWthcnVyYS5hY2EtYXBpLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJLYXJ1cmEgQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmthcnVyYS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2Jsb2Nrc2NvdXQua2FydXJhLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ29iaS5qcwogIHZhciBnb2JpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjYzLAogICAgbmFtZTogIkhvcml6ZW4gR29iaSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlRlc3QgWkVOIiwKICAgICAgc3ltYm9sOiAidFpFTiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2dvYmktdGVzdG5ldC5ob3JpemVubGFicy5pby9ldGh2MSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkdvYmkgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZ29iaS1leHBsb3Jlci5ob3JpemVuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ29lcmxpLmpzCiAgdmFyIGdvZXJsaSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNSwKICAgIG5hbWU6ICJHb2VybGkiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkdvZXJsaSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5hbmtyLmNvbS9ldGhfZ29lcmxpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2dvZXJsaS5ldGhlcnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLWdvZXJsaS5ldGhlcnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIGVuc1JlZ2lzdHJ5OiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIKICAgICAgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhmYzRBQzc1QzQ2QzkxNGFGNTg5MmQ2ZDNlRkZjZWJENzkxNzI5M0YxIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEwMzM5MjA2CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDY1MDc2NzAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ25vc2lzLmpzCiAgdmFyIGdub3NpcyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAwLAogICAgbmFtZTogIkdub3NpcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJHbm9zaXMiLAogICAgICBzeW1ib2w6ICJ4REFJIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ25vc2lzY2hhaW4uY29tIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5nbm9zaXNjaGFpbi5jb20vd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiR25vc2lzc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9nbm9zaXNzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5nbm9zaXNzY2FuLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMTAyMjQ5MQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2dub3Npc0NoaWFkby5qcwogIHZhciBnbm9zaXNDaGlhZG8gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMjAwLAogICAgbmFtZTogIkdub3NpcyBDaGlhZG8iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiR25vc2lzIiwKICAgICAgc3ltYm9sOiAieERBSSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmNoaWFkb2NoYWluLm5ldCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuY2hpYWRvY2hhaW4ubmV0L3dzcyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5jaGlhZG9jaGFpbi5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5jaGlhZG9jaGFpbi5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NjczMTMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ3Jhdml0eS5qcwogIHZhciBncmF2aXR5ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjI1LAogICAgbmFtZTogIkdyYXZpdHkgQWxwaGEgTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRyIsIHN5bWJvbDogIkciLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ3Jhdml0eS54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJHcmF2aXR5IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmdyYXZpdHkueHl6IiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmdyYXZpdHkueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4ZjhhYzRCRUIyRjc1ZDJjRkZiNTg4YzYzMjUxMzQ3ZmRENjI5QjkyYyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNjg1MQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hhbS5qcwogIHZhciBoYW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDUxMTIsCiAgICBuYW1lOiAiSGFtIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkhhbSIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmhhbS5mdW4iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLmhhbS5mdW4iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIYW0gQ2hhaW4gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuaGFtLmZ1biIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5oYW0uZnVuL2FwaS92MiIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9oYXJkaGF0LmpzCiAgdmFyIGhhcmRoYXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxMzM3LAogICAgbmFtZTogIkhhcmRoYXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cDovLzEyNy4wLjAuMTo4NTQ1Il0gfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9oYXJtb255T25lLmpzCiAgdmFyIGhhcm1vbnlPbmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE2NjY2ZTUsCiAgICBuYW1lOiAiSGFybW9ueSBPbmUiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkhhcm1vbnkiLAogICAgICBzeW1ib2w6ICJPTkUiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5hbmtyLmNvbS9oYXJtb255Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiSGFybW9ueSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5oYXJtb255Lm9uZSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDE4NTc1MwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hhcXFNYWlubmV0LmpzCiAgdmFyIGhhcXFNYWlubmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMTIzNSwKICAgIG5hbWU6ICJIQVFRIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSXNsYW1pYyBDb2luIiwKICAgICAgc3ltYm9sOiAiSVNMTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmV0aC5oYXFxLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIQVFRIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmhhcXEubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5oYXFxLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hhcXFUZXN0ZWRnZTIuanMKICB2YXIgaGFxcVRlc3RlZGdlMiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTQyMTEsCiAgICBuYW1lOiAiSEFRUSBUZXN0ZWRnZSAyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIklzbGFtaWMgQ29pbiIsCiAgICAgIHN5bWJvbDogIklTTE1UIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZXRoLnRlc3RlZGdlMi5oYXFxLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIQVFRIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RlZGdlMi5oYXFxLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdGVkZ2UyLmhhcXEubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvaGVkZXJhLmpzCiAgdmFyIGhlZGVyYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjk1LAogICAgbmFtZTogIkhlZGVyYSBNYWlubmV0IiwKICAgIG5ldHdvcms6ICJoZWRlcmEtbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBzeW1ib2w6ICJIQkFSIiwKICAgICAgbmFtZTogIkhCQVIiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5oYXNoaW8uaW8vYXBpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiSGFzaHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vaGFzaHNjYW4uaW8vbWFpbm5ldCIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hlZGVyYVRlc3RuZXQuanMKICB2YXIgaGVkZXJhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjk2LAogICAgbmFtZTogIkhlZGVyYSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJoZWRlcmEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBzeW1ib2w6ICJIQkFSIiwKICAgICAgbmFtZTogIkhCQVIiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5oYXNoaW8uaW8vYXBpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiSGFzaHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vaGFzaHNjYW4uaW8vdGVzdG5ldCIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvaGVkZXJhUHJldmlld25ldC5qcwogIHZhciBoZWRlcmFQcmV2aWV3bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyOTcsCiAgICBuYW1lOiAiSGVkZXJhIFByZXZpZXduZXQiLAogICAgbmV0d29yazogImhlZGVyYS1wcmV2aWV3bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIHN5bWJvbDogIkhCQVIiLAogICAgICBuYW1lOiAiSEJBUiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9wcmV2aWV3bmV0Lmhhc2hpby5pby9hcGkiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIYXNoc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9oYXNoc2Nhbi5pby9wcmV2aWV3bmV0IgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ob2xlc2t5LmpzCiAgdmFyIGhvbGVza3kgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE3ZTMsCiAgICBuYW1lOiAiSG9sZXNreSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiSG9sZXNreSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aGVyZXVtLWhvbGVza3ktcnBjLnB1YmxpY25vZGUuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2hvbGVza3kuZXRoZXJzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc3CiAgICAgIH0sCiAgICAgIGVuc1JlZ2lzdHJ5OiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA4MDE2MTMKICAgICAgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhhNkFDOTM1RDQ5NzFFM0NEMTMzYjk1MGFFMDUzYkVDRDE2ZkU3ZjNiIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDk3MzQ4NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pbW11dGFibGVaa0V2bS5qcwogIHZhciBpbW11dGFibGVaa0V2bSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTMzNzEsCiAgICBuYW1lOiAiSW1tdXRhYmxlIHprRVZNIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkltbXV0YWJsZSBDb2luIiwKICAgICAgc3ltYm9sOiAiSU1YIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuaW1tdXRhYmxlLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkltbXV0YWJsZSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5pbW11dGFibGUuY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmltbXV0YWJsZS5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHgyMzZiZEE0NTg5ZTQ0ZTY4NTBmNWFDNmE3NEJmQ2EzOThhODZjNmMwIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQzMzU5NzIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pbW11dGFibGVaa0V2bVRlc3RuZXQuanMKICB2YXIgaW1tdXRhYmxlWmtFdm1UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMzQ3MywKICAgIG5hbWU6ICJJbW11dGFibGUgemtFVk0gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJJbW11dGFibGUgQ29pbiIsCiAgICAgIHN5bWJvbDogIklNWCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQuaW1tdXRhYmxlLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkltbXV0YWJsZSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQuaW1tdXRhYmxlLmNvbS8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweDJDQzc4N0VkMzY0NjAwQjAyMjIzNjFDNDE4ODMwOEZhOEU2OGJBNjAiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTk3NzM5MQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pbkVWTS5qcwogIHZhciBpbkVWTSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjUyNSwKICAgIG5hbWU6ICJpbkVWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkluamVjdGl2ZSIsCiAgICAgIHN5bWJvbDogIklOSiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL21haW5uZXQucnBjLmluZXZtLmNvbS9odHRwIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiaW5FVk0gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vaW5ldm0uY2FsZGVyYWV4cGxvcmVyLnh5eiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9pbmV2bS5jYWxkZXJhZXhwbG9yZXIueHl6L2FwaS92MiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTg2MDYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pb3RhLmpzCiAgdmFyIGlvdGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDg4MjIsCiAgICBuYW1lOiAiSU9UQSBFVk0iLAogICAgbmV0d29yazogImlvdGFldm0iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSU9UQSIsCiAgICAgIHN5bWJvbDogIklPVEEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2pzb24tcnBjLmV2bS5pb3RhbGVkZ2VyLm5ldCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly93cy5qc29uLXJwYy5ldm0uaW90YWxlZGdlci5uZXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0uaW90YS5vcmciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLmlvdGEub3JnL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pb3RhVGVzdG5ldC5qcwogIHZhciBpb3RhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTA3NSwKICAgIG5hbWU6ICJJT1RBIEVWTSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJpb3RhZXZtLXRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSU9UQSIsCiAgICAgIHN5bWJvbDogIklPVEEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2pzb24tcnBjLmV2bS50ZXN0bmV0LmlvdGFsZWRnZXIubmV0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLmpzb24tcnBjLmV2bS50ZXN0bmV0LmlvdGFsZWRnZXIubmV0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLnRlc3RuZXQuaW90YWxlZGdlci5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLnRlc3RuZXQuaW90YWxlZGdlci5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rYWthcm90U2Vwb2xpYS5qcwogIHZhciBrYWthcm90U2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTgwMjIwMzc2NCwKICAgIG5hbWU6ICJLYWthcm90IFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEtcnBjLmtha2Fyb3Qub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiS2FrYXJvdCBTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEua2FrYXJvdHNjYW4ub3JnIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rYXZhLmpzCiAgdmFyIGthdmEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIyMjIsCiAgICBuYW1lOiAiS2F2YSBFVk0iLAogICAgbmV0d29yazogImthdmEtbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiS2F2YSIsCiAgICAgIHN5bWJvbDogIktBVkEiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2V2bS5rYXZhLmlvIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiS2F2YSBFVk0gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8va2F2YXNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2thdmFzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzY2MTE2NQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva2F2YVRlc3RuZXQuanMKICB2YXIga2F2YVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIyMjEsCiAgICBuYW1lOiAiS2F2YSBFVk0gVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAia2F2YS10ZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJLYXZhIiwKICAgICAgc3ltYm9sOiAiS0FWQSIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZXZtLnRlc3RuZXQua2F2YS5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkthdmEgRVZNIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5rYXZhc2Nhbi5jb20vIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQua2F2YXNjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4RGYxRDcyNEE3MTY2MjYxZUVCMDE1NDE4ZmU4Yzc2NzlCQkVhN2ZkNiIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3MjQyMTc5CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2tjYy5qcwogIHZhciBrY2MgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMyMSwKICAgIG5hbWU6ICJLQ0MgTWFpbm5ldCIsCiAgICBuZXR3b3JrOiAiS0NDIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiS0NTIiwKICAgICAgc3ltYm9sOiAiS0NTIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9rY2MtcnBjLmNvbSJdCiAgICAgIH0sCiAgICAgIHB1YmxpYzogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9rY2MtcnBjLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7IG5hbWU6ICJLQ0MgRXhwbG9yZXIiLCB1cmw6ICJodHRwczovL2V4cGxvcmVyLmtjYy5pbyIgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTc2MDQzMAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva2xheXRuLmpzCiAgdmFyIGtsYXl0biA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogODIxNywKICAgIG5hbWU6ICJLbGF5dG4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiS2xheXRuIiwKICAgICAgc3ltYm9sOiAiS0xBWSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3B1YmxpYy1lbi1jeXByZXNzLmtsYXl0bi5uZXQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJLbGF5dG5TY29wZSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY29wZS5rbGF5dG4uY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDk2MDAyNDE1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva2xheXRuQmFvYmFiLmpzCiAgdmFyIGtsYXl0bkJhb2JhYiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAwMSwKICAgIG5hbWU6ICJLbGF5dG4gQmFvYmFiIFRlc3RuZXQiLAogICAgbmV0d29yazogImtsYXl0bi1iYW9iYWIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQmFvYmFiIEtsYXl0biIsCiAgICAgIHN5bWJvbDogIktMQVkiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9wdWJsaWMtZW4tYmFvYmFiLmtsYXl0bi5uZXQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJLbGF5dG5TY29wZSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9iYW9iYWIua2xheXRuc2NvcGUuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEyMzM5MDU5MwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rb2kuanMKICB2YXIga29pID0gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDcwMSwKICAgIG5hbWU6ICJLb2kgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJLb2kgTmV0d29yayBOYXRpdmUgVG9rZW4iLAogICAgICBzeW1ib2w6ICJLUklORyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8va29pLXJwYy5kYXJ3aW5pYS5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2tvaS1ycGMuZGFyd2luaWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7IG5hbWU6ICJCbG9ja3Njb3V0IiwgdXJsOiAiaHR0cHM6Ly9rb2ktc2Nhbi5kYXJ3aW5pYS5uZXR3b3JrIiB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE4MDAwMQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rcm9tYS5qcwogIHZhciBrcm9tYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjU1LAogICAgbmFtZTogIktyb21hIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFVEgiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcGkua3JvbWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIktyb21hIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2Jsb2Nrc2NvdXQua3JvbWEubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0Lmtyb21hLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva3JvbWFTZXBvbGlhLmpzCiAgdmFyIGtyb21hU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjM1OCwKICAgIG5hbWU6ICJLcm9tYSBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZXBvbGlhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vYXBpLnNlcG9saWEua3JvbWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIktyb21hIFNlcG9saWEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5zZXBvbGlhLmtyb21hLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5zZXBvbGlhLmtyb21hLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9sM3guanMKICB2YXIgbDN4ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjMyNCwKICAgIG5hbWU6ICJMM1ggUHJvdG9jb2wiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLW1haW5uZXQubDN4LmNvbSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMtbWFpbm5ldC5sM3guY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTDNYIE1haW5uZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIubDN4LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5sM3guY29tL2FwaS92MiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2wzeFRlc3RuZXQuanMKICB2YXIgbDN4VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTIzMjUsCiAgICBuYW1lOiAiTDNYIFByb3RvY29sIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQubDN4LmNvbSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMtdGVzdG5ldC5sM3guY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTDNYIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXItdGVzdG5ldC5sM3guY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLXRlc3RuZXQubDN4LmNvbS9hcGkvdjIiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2xpZ2h0bGlua1BlZ2FzdXMuanMKICB2YXIgbGlnaHRsaW5rUGVnYXN1cyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTg5MSwKICAgIG5hbWU6ICJMaWdodExpbmsgUGVnYXN1cyBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJsaWdodGxpbmstcGVnYXN1cyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcmVwbGljYXRvci5wZWdhc3VzLmxpZ2h0bGluay5pby9ycGMvdjEiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJMaWdodExpbmsgUGVnYXN1cyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wZWdhc3VzLmxpZ2h0bGluay5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGlnaHRsaW5rUGhvZW5peC5qcwogIHZhciBsaWdodGxpbmtQaG9lbml4ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxODkwLAogICAgbmFtZTogIkxpZ2h0TGluayBQaG9lbml4IE1haW5uZXQiLAogICAgbmV0d29yazogImxpZ2h0bGluay1waG9lbml4IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9yZXBsaWNhdG9yLnBob2VuaXgubGlnaHRsaW5rLmlvL3JwYy92MSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkxpZ2h0TGluayBQaG9lbml4IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Bob2VuaXgubGlnaHRsaW5rLmlvIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGluZWEuanMKICB2YXIgbGluZWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU5MTQ0LAogICAgbmFtZTogIkxpbmVhIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkxpbmVhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmxpbmVhLmJ1aWxkIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5saW5lYS5idWlsZCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV0aGVyc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9saW5lYXNjYW4uYnVpbGQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmxpbmVhc2Nhbi5idWlsZC9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2xpbmVhR29lcmxpLmpzCiAgdmFyIGxpbmVhR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTE0MCwKICAgIG5hbWU6ICJMaW5lYSBHb2VybGkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTGluZWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ29lcmxpLmxpbmVhLmJ1aWxkIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5nb2VybGkubGluZWEuYnVpbGQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLmxpbmVhc2Nhbi5idWlsZCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktZ29lcmxpLmxpbmVhc2Nhbi5idWlsZC9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDk4NjIzCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2xpbmVhU2Vwb2xpYS5qcwogIHZhciBsaW5lYVNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU5MTQxLAogICAgbmFtZTogIkxpbmVhIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTGluZWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc2Vwb2xpYS5saW5lYS5idWlsZCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuc2Vwb2xpYS5saW5lYS5idWlsZCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV0aGVyc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZXBvbGlhLmxpbmVhc2Nhbi5idWlsZCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5saW5lYXNjYW4uYnVpbGQvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDIyNzQyNwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9saW5lYVRlc3RuZXQuanMKICB2YXIgbGluZWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTE0MCwKICAgIG5hbWU6ICJMaW5lYSBHb2VybGkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTGluZWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ29lcmxpLmxpbmVhLmJ1aWxkIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5nb2VybGkubGluZWEuYnVpbGQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLmxpbmVhc2Nhbi5idWlsZCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGkubGluZWFzY2FuLmJ1aWxkL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0OTg2MjMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGlzay5qcwogIHZhciBsaXNrID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAxMTM1LAogICAgbmFtZTogIkxpc2siLAogICAgbmV0d29yazogImxpc2siLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5hcGkubGlzay5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL2Jsb2Nrc2NvdXQubGlzay5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5saXNrLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweEE5ZDcxRTFkZDdjYTI2RjI2ZTY1NkU2NmQ2QUE4MWVkN2Y3NDViZjAiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGlza1NlcG9saWEuanMKICB2YXIgc291cmNlSWQxNiA9IDExMTU1MTExOwogIHZhciBsaXNrU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogNDIwMiwKICAgIG5ldHdvcms6ICJsaXNrLXNlcG9saWEiLAogICAgbmFtZTogIkxpc2sgU2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2Vwb2xpYSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zZXBvbGlhLWFwaS5saXNrLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS1ibG9ja3Njb3V0Lmxpc2suY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NlcG9saWEtYmxvY2tzY291dC5saXNrLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQxNl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEEwRTM1RjU2QzMxOERFMWJENUQ5Y2E2QTk0RmU3ZTM3QzU2NjMzNDgiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTZdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhlM2Q5MEYyMTQ5MDY4NkVjN2VGMzdCRTc4OEUwMmRmQzEyNzg3MjY0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDE2XTogewogICAgICAgICAgYWRkcmVzczogIjB4MUZiMzBlNDQ2ZUE3OTFjZDFmMDExNjc1RTVGM2Y1MzExYjcwZmFGNSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTYKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbG9jYWxob3N0LmpzCiAgdmFyIGxvY2FsaG9zdCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTMzNywKICAgIG5hbWU6ICJMb2NhbGhvc3QiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cDovLzEyNy4wLjAuMTo4NTQ1Il0gfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9sdWtzby5qcwogIHZhciBsdWtzbyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDIsCiAgICBuZXR3b3JrOiAibHVrc28iLAogICAgbmFtZTogIkxVS1NPIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJMVUtTTyIsCiAgICAgIHN5bWJvbDogIkxZWCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMubWFpbm5ldC5sdWtzby5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLXJwYy5tYWlubmV0Lmx1a3NvLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJMVUtTTyBNYWlubmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmV4ZWN1dGlvbi5tYWlubmV0Lmx1a3NvLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmV4cGxvcmVyLmV4ZWN1dGlvbi5tYWlubmV0Lmx1a3NvLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ2ODE4MwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2x1a3NvVGVzdG5ldC5qcwogIHZhciBsdWtzb1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyMDEsCiAgICBuYW1lOiAiTFVLU08gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJMVUtTTyBUZXN0bmV0IiwKICAgICAgc3ltYm9sOiAiTFlYdCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQubHVrc28ubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly93cy1ycGMudGVzdG5ldC5sdWtzby5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTFVLU08gVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5leGVjdXRpb24udGVzdG5ldC5sdWtzby5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5leHBsb3Jlci5leGVjdXRpb24udGVzdG5ldC5sdWtzby5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA2MDUzNDgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbHljYW4uanMKICB2YXIgbHljYW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDcyMSwKICAgIG5hbWU6ICJMeWNhbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJMeWNhbiIsCiAgICAgIHN5bWJvbDogIkxZQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbCiAgICAgICAgICAiaHR0cHM6Ly9ycGMubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgImh0dHBzOi8vdXMtZWFzdC5seWNhbmNoYWluLmNvbSIsCiAgICAgICAgICAiaHR0cHM6Ly91cy13ZXN0Lmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJodHRwczovL2V1LW5vcnRoLmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJodHRwczovL2V1LXdlc3QubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgImh0dHBzOi8vYXNpYS1zb3V0aGVhc3QubHljYW5jaGFpbi5jb20iCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsKICAgICAgICAgICJ3c3M6Ly9ycGMubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgIndzczovL3VzLWVhc3QubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgIndzczovL3VzLXdlc3QubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgIndzczovL2V1LW5vcnRoLmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJ3c3M6Ly9ldS13ZXN0Lmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJ3c3M6Ly9hc2lhLXNvdXRoZWFzdC5seWNhbmNoYWluLmNvbSIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkx5Y2FuIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmx5Y2FuY2hhaW4uY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2x5cmEuanMKICB2YXIgbHlyYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogOTU3LAogICAgbmFtZTogIkx5cmEgQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmx5cmEuZmluYW5jZSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkx5cmEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIubHlyYS5maW5hbmNlIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmx5cmEuZmluYW5jZS9hcGkvdjIiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTkzNTE5OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21haW5uZXQuanMKICB2YXIgbWFpbm5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMSwKICAgIG5hbWU6ICJFdGhlcmV1bSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9jbG91ZGZsYXJlLWV0aC5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZXRoZXJzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5ldGhlcnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIGVuc1JlZ2lzdHJ5OiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIKICAgICAgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjZTAxZjhlZWU3RTQ3OUM5MjhGODkxOWFiRDUzRTU1M2EzNkNlRjY3IiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MjU4MjEzCiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE0MzUzNjAxCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWFuZGFsYS5qcwogIHZhciBtYW5kYWxhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTUsCiAgICBuYW1lOiAiTWFuZGFsYSBUQzkiLAogICAgbmV0d29yazogIm1hbmRhbGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIk1hbmRhbGEiLAogICAgICBzeW1ib2w6ICJtQUNBIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZXRoLXJwYy10YzkuYWNhLXN0YWdpbmcubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ldGgtcnBjLXRjOS5hY2Etc3RhZ2luZy5uZXR3b3JrIl0KICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldGgtcnBjLXRjOS5hY2Etc3RhZ2luZy5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2V0aC1ycGMtdGM5LmFjYS1zdGFnaW5nLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNYW5kYWxhIEJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5tYW5kYWxhLmFjYS1zdGFnaW5nLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5tYW5kYWxhLmFjYS1zdGFnaW5nLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tYW50YS5qcwogIHZhciBtYW50YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY5LAogICAgbmFtZTogIk1hbnRhIFBhY2lmaWMgTWFpbm5ldCIsCiAgICBuZXR3b3JrOiAibWFudGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRVRIIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcGFjaWZpYy1ycGMubWFudGEubmV0d29yay9odHRwIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFudGEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGFjaWZpYy1leHBsb3Jlci5tYW50YS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3BhY2lmaWMtZXhwbG9yZXIubWFudGEubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzMyODkwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWFudGFTZXBvbGlhVGVzdG5ldC5qcwogIHZhciBtYW50YVNlcG9saWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNDQxMDA2LAogICAgbmFtZTogIk1hbnRhIFBhY2lmaWMgU2Vwb2xpYSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJtYW50YS1zZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUSCIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcGFjaWZpYy1ycGMuc2Vwb2xpYS10ZXN0bmV0Lm1hbnRhLm5ldHdvcmsvaHR0cCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1hbnRhIFNlcG9saWEgVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wYWNpZmljLWV4cGxvcmVyLnNlcG9saWEtdGVzdG5ldC5tYW50YS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3BhY2lmaWMtZXhwbG9yZXIuc2Vwb2xpYS10ZXN0bmV0Lm1hbnRhLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTU0OTE4ZjdCNTI1QzhkZjg5NDY2ODg0NjUwNjc2NzQxMmI1M0UzIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ3OTU4NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tYW50YVRlc3RuZXQuanMKICB2YXIgbWFudGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNDQxMDA1LAogICAgbmFtZTogIk1hbnRhIFBhY2lmaWMgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAibWFudGEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFVEgiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9tYW50YS10ZXN0bmV0LmNhbGRlcmFjaGFpbi54eXovaHR0cCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1hbnRhIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGFjaWZpYy1leHBsb3Jlci50ZXN0bmV0Lm1hbnRhLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vcGFjaWZpYy1leHBsb3Jlci50ZXN0bmV0Lm1hbnRhLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHgyMTFCMTY0M2I5NUZlNzZmMTFlRDg4ODBFRTgxMEFCRDlBNGNmNTZDIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQxOTkxNQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tYW50bGUuanMKICB2YXIgbWFudGxlID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1ZTMsCiAgICBuYW1lOiAiTWFudGxlIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1OVCIsCiAgICAgIHN5bWJvbDogIk1OVCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5tYW50bGUueHl6Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFudGxlIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL21hbnRsZXNjYW4ueHl6LyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkubWFudGxlc2Nhbi54eXovYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwNDcxNwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21hbnRsZVNlcG9saWFUZXN0bmV0LmpzCiAgdmFyIG1hbnRsZVNlcG9saWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1MDAzLAogICAgbmFtZTogIk1hbnRsZSBTZXBvbGlhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTU5UIiwKICAgICAgc3ltYm9sOiAiTU5UIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcnBjLnNlcG9saWEubWFudGxlLnh5eiJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1hbnRsZSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnNlcG9saWEubWFudGxlLnh5ei8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuc2Vwb2xpYS5tYW50bGUueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0NTg0MDEyCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21hbnRsZVRlc3RuZXQuanMKICB2YXIgbWFudGxlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTAwMSwKICAgIG5hbWU6ICJNYW50bGUgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJNTlQiLAogICAgICBzeW1ib2w6ICJNTlQiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVzdG5ldC5tYW50bGUueHl6Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFudGxlIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5tYW50bGUueHl6IiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQubWFudGxlLnh5ei9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTYxMzMzCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21lcmxpbi5qcwogIHZhciBtZXJsaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyMDAsCiAgICBuYW1lOiAiTWVybGluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCVEMiLAogICAgICBzeW1ib2w6ICJCVEMiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5tZXJsaW5jaGFpbi5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5tZXJsaW5jaGFpbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLm1lcmxpbmNoYWluLmlvL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tZXRhY2hhaW4uanMKICB2YXIgbWV0YWNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1NzEsCiAgICBuYW1lOiAiTWV0YUNoYWluIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk1ldGF0aW1lIENvaW4iLCBzeW1ib2w6ICJNVEMiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMubWV0YXRpbWUuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWV0YUV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLm1ldGF0aW1lLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWV0YWNoYWluSXN0YW5idWwuanMKICB2YXIgbWV0YWNoYWluSXN0YW5idWwgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0NTMsCiAgICBuYW1lOiAiTWV0YUNoYWluIElzdGFuYnVsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJNZXRhdGltZSBDb2luIiwgc3ltYm9sOiAiTVRDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vaXN0YW5idWwtcnBjLm1ldGFjaGFpbi5kZXYiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNZXRhRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vaXN0YW5idWwtZXhwbG9yZXIubWV0YWNoYWluLmRldiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGFsTDIuanMKICB2YXIgc291cmNlSWQxNyA9IDE7CiAgdmFyIG1ldGFsTDIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDE3NTAsCiAgICBuYW1lOiAiTWV0YWwgTDIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5tZXRhbGwyLmNvbSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMubWV0YWxsMi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5tZXRhbGwyLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5tZXRhbGwyLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQxN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDNCMUY3YURhMEZjYzI2QjEzNTE1YWY3NTJEZDA3ZkIxQ0FjMTE0MjYiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDE3XTogewogICAgICAgICAgYWRkcmVzczogIjB4M0YzN2FCZEUyQzZiNUIyZWQ2RjgwNDU3ODdEZjFFRDFFMzc1Mzk1NiIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQxN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDZkMGY2NUQ1OWI1NUIwRkVDNWQyZDE1MzY1MTU0RGNBREMxNDBCRjMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTcKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWV0ZXIuanMKICB2YXIgbWV0ZXIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgyLAogICAgbmFtZTogIk1ldGVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1UUiIsCiAgICAgIHN5bWJvbDogIk1UUiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5tZXRlci5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1ldGVyU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLm1ldGVyLmlvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGVyVGVzdG5ldC5qcwogIHZhciBtZXRlclRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgzLAogICAgbmFtZTogIk1ldGVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTVRSIiwKICAgICAgc3ltYm9sOiAiTVRSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcnBjdGVzdC5tZXRlci5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1ldGVyVGVzdG5ldFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi13YXJyaW5nc3Rha2VzLm1ldGVyLmlvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGlzLmpzCiAgdmFyIG1ldGlzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDg4LAogICAgbmFtZTogIk1ldGlzIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1ldGlzIiwKICAgICAgc3ltYm9sOiAiTUVUSVMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hbmRyb21lZGEubWV0aXMuaW8vP293bmVyPTEwODgiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNZXRpcyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5tZXRpcy5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkucm91dGVzY2FuLmlvL3YyL25ldHdvcmsvbWFpbm5ldC9ldm0vNDMxMTQvZXRoZXJzY2FuL2FwaSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJBbmRyb21lZGEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYW5kcm9tZWRhLWV4cGxvcmVyLm1ldGlzLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FuZHJvbWVkYS1leHBsb3Jlci5tZXRpcy5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjMzODU1MgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGlzR29lcmxpLmpzCiAgdmFyIG1ldGlzR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTksCiAgICBuYW1lOiAiTWV0aXMgR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1ldGlzIEdvZXJsaSIsCiAgICAgIHN5bWJvbDogIk1FVElTIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZ29lcmxpLmdhdGV3YXkubWV0aXNkZXZvcHMubGluayJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1ldGlzIEdvZXJsaSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9nb2VybGkuZXhwbG9yZXIubWV0aXNkZXZvcHMubGluayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGkuZXhwbG9yZXIubWV0aXNkZXZvcHMubGluay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTAwNjIwNwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldi5qcwogIHZhciBtZXYgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDc1MTgsCiAgICBuYW1lOiAiTUVWZXJzZSBDaGFpbiBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1FVmVyc2UiLAogICAgICBzeW1ib2w6ICJNRVYiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5tZXZlcnNlbWFpbm5ldC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3d3dy5tZXZlcnNlc2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA4Njg4MTM0MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldlRlc3RuZXQuanMKICB2YXIgbWV2VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDc1OSwKICAgIG5hbWU6ICJNRVZlcnNlIENoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTUVWZXJzZSIsCiAgICAgIHN5bWJvbDogIk1FViIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLm1ldmVyc2V0ZXN0bmV0LmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5tZXZlcnNlc2Nhbi5pby8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjQzNzExMTUKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWludFNlcG9saWFUZXN0bmV0LmpzCiAgdmFyIG1pbnRTZXBvbGlhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY4NiwKICAgIG5hbWU6ICJNaW50IFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LXJwYy5taW50Y2hhaW4uaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNaW50Y2hhaW4gVGVzdG5ldCBleHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLm1pbnRjaGFpbi5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9kZS5qcwogIHZhciBzb3VyY2VJZDE4ID0gMTsKICB2YXIgbW9kZSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzQ0NDMsCiAgICBuYW1lOiAiTW9kZSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQubW9kZS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTW9kZXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vbW9kZXNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjQ2NTg4MgogICAgICB9LAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDE4XTogewogICAgICAgICAgYWRkcmVzczogIjB4NDMxN2JhMTQ2RDQ5MzNEODg5NTE4YTNlNUUxMUZlN2E1MzE5OWIwNCIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDE4XTogewogICAgICAgICAgYWRkcmVzczogIjB4OEIzNGIxNGM3YzcxMjM0NTlDZjMwNzZiOENiOTI5QkUwOTdkMEMwNyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQxOF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDczNWFEQmJFNzIyMjZCRDUyZTgxOEU3MTgxOTUzZjQyRTNiMEZGMjEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTgKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9kZVRlc3RuZXQuanMKICB2YXIgc291cmNlSWQxOSA9IDExMTU1MTExOwogIHZhciBtb2RlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogOTE5LAogICAgbmFtZTogIk1vZGUgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLm1vZGUubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5leHBsb3Jlci5tb2RlLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2Vwb2xpYS5leHBsb3Jlci5tb2RlLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMTldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgyNjM0QkQ2NWJhMjdBQjYzODExYzc0QTYzMTE4QUNiMzEyNzAxQmZhIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzc3ODM5MwogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgzMjBlMTU4MGVmZkYzN0UwMDhGMUM5MjcwMGQxZUJhNDdjMUIyM2ZEIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzc3ODM5NQogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDE5XTogewogICAgICAgICAgYWRkcmVzczogIjB4YkM1QzY3OTg3OUIyOTY1Mjk2NzU2Q0Q5NTlDM0M3Mzk3Njk5OTVFMiIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDM3NzgzOTIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhCQWJhODM3MzExM0ZiN2E2OGYxOTVkZUYxODczMmUwMWFGOGVEZkNGIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwMTkwMDcKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBzb3VyY2VJZDogc291cmNlSWQxOQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tb29uYmFzZUFscGhhLmpzCiAgdmFyIG1vb25iYXNlQWxwaGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODcsCiAgICBuYW1lOiAiTW9vbmJhc2UgQWxwaGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiREVWIiwKICAgICAgc3ltYm9sOiAiREVWIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuYXBpLm1vb25iYXNlLm1vb25iZWFtLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3NzLmFwaS5tb29uYmFzZS5tb29uYmVhbS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTW9vbnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vbW9vbmJhc2UubW9vbnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vbW9vbmJhc2UubW9vbnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE4NTA2ODYKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9vbmJlYW0uanMKICB2YXIgbW9vbmJlYW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODQsCiAgICBuYW1lOiAiTW9vbmJlYW0iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiR0xNUiIsCiAgICAgIHN5bWJvbDogIkdMTVIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21vb25iZWFtLnB1YmxpYy5ibGFzdGFwaS5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9tb29uYmVhbS5wdWJsaWMuYmxhc3RhcGkuaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNb29uc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9tb29uc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktbW9vbmJlYW0ubW9vbnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDYwOTAwMgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9vbmJlYW1EZXYuanMKICB2YXIgbW9vbmJlYW1EZXYgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODEsCiAgICBuYW1lOiAiTW9vbmJlYW0gRGV2ZWxvcG1lbnQgTm9kZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJERVYiLAogICAgICBzeW1ib2w6ICJERVYiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwOi8vMTI3LjAuMC4xOjk5NDQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vMTI3LjAuMC4xOjk5NDQiXQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21vb25yaXZlci5qcwogIHZhciBtb29ucml2ZXIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODUsCiAgICBuYW1lOiAiTW9vbnJpdmVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1PVlIiLAogICAgICBzeW1ib2w6ICJNT1ZSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tb29ucml2ZXIucHVibGljLmJsYXN0YXBpLmlvIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21vb25yaXZlci5wdWJsaWMuYmxhc3RhcGkuaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNb29uc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9tb29ucml2ZXIubW9vbnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLW1vb25yaXZlci5tb29uc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTU5NzkwNAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9ycGhIb2xlc2t5LmpzCiAgdmFyIG1vcnBoSG9sZXNreSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjgxMCwKICAgIG5hbWU6ICJNb3JwaCBIb2xlc2t5IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1xdWlja25vZGUtaG9sZXNreS5tb3JwaGwyLmlvIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy1xdWlja25vZGUtaG9sZXNreS5tb3JwaGwyLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTW9ycGggSG9sZXNreSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci1ob2xlc2t5Lm1vcnBobDIuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXItYXBpLWhvbGVza3kubW9ycGhsMi5pby9hcGk/IgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tb3JwaFNlcG9saWEuanMKICB2YXIgbW9ycGhTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNzEwLAogICAgbmFtZTogIk1vcnBoIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQubW9ycGhsMi5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1vcnBoIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXItdGVzdG5ldC5tb3JwaGwyLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLWFwaS10ZXN0bmV0Lm1vcnBobDIuaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9uYXV0aWx1cy5qcwogIHZhciBuYXV0aWx1cyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjIyMjIsCiAgICBuYW1lOiAiTmF1dGlsdXMgTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiWkJDIiwgc3ltYm9sOiAiWkJDIiwgZGVjaW1hbHM6IDkgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcGkubmF1dGlsdXMubmF1dGNoYWluLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk5hdXRTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL25hdXRzY2FuLmNvbSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9uZW9uRGV2bmV0LmpzCiAgdmFyIG5lb25EZXZuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI0NTAyMjkyNiwKICAgIG5hbWU6ICJOZW9uIEVWTSBEZXZOZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk5FT04iLCBzeW1ib2w6ICJORU9OIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZGV2bmV0Lm5lb25ldm0ub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTmVvbnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZGV2bmV0Lm5lb25zY2FuLm9yZyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMDUyMDYxMTIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbmVvbk1haW5uZXQuanMKICB2YXIgbmVvbk1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI0NTAyMjkzNCwKICAgIG5ldHdvcms6ICJuZW9uTWFpbm5ldCIsCiAgICBuYW1lOiAiTmVvbiBFVk0gTWFpbk5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTkVPTiIsIHN5bWJvbDogIk5FT04iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9uZW9uLXByb3h5LW1haW5uZXQuc29sYW5hLnAycC5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJOZW9uc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9uZW9uc2Nhbi5vcmciCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjA2NTQ1NTI0CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9uZXhpLmpzCiAgdmFyIG5leGkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyNDIsCiAgICBuYW1lOiAiTmV4aSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTmV4aSIsIHN5bWJvbDogIk5FWEkiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuY2hhaW4ubmV4aS50ZWNobm9sb2d5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTmV4aVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3Lm5leGlzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly93d3cubmV4aXNjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDI3N0E0NkNjNjlBNTdlRTNBNkM4YzE1OGJBODc0ODMyRjcxOEI4RSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNTc3MDE2MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL25leGlsaXguanMKICB2YXIgbmV4aWxpeCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjQwLAogICAgbmFtZTogIk5leGlsaXggU21hcnQgQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTmV4aWxpeCIsCiAgICAgIHN5bWJvbDogIk5FWElMSVgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGN1cmwucG9zLm5leGlsaXguY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTmV4aWxpeFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5uZXhpbGl4LmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4NTgzODFjOGUyQkY5ZDBDMkM0MjU5Y0ExNEJkQTlBZmUwMjgzMTI0NCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3NDQ0OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL29hc3lzLmpzCiAgdmFyIG9hc3lzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNDgsCiAgICBuYW1lOiAiT2FzeXMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk9hc3lzIiwgc3ltYm9sOiAiT0FTIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLm1haW5uZXQub2FzeXMuZ2FtZXMiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJPYXN5c1NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5vYXN5cy5nYW1lcyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLm9hc3lzLmdhbWVzL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9vYXNpc1Rlc3RuZXQuanMKICB2YXIgb2FzaXNUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MDkwLAogICAgbmV0d29yazogIm9hc2lzLXRlc3RuZXQiLAogICAgbmFtZTogIk9hc2lzIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkZhc3R0b2tlbiIsIHN5bWJvbDogIkZUTiIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMxLm9hc2lzLmJhaGFtdXRjaGFpbi5jb20iXSB9LAogICAgICBwdWJsaWM6IHsgaHR0cDogWyJodHRwczovL3JwYzEub2FzaXMuYmFoYW11dGNoYWluLmNvbSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkZ0bnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vb2FzaXMuZnRuc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vb2FzaXMuZnRuc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9va2MuanMKICB2YXIgb2tjID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2NiwKICAgIG5hbWU6ICJPS0MiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiT0tUIiwKICAgICAgc3ltYm9sOiAiT0tUIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZXhjaGFpbnJwYy5va2V4Lm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIm9rbGluayIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cub2tsaW5rLmNvbS9va2MiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTAzNjQ3OTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9vcHRpbWlzbS5qcwogIHZhciBzb3VyY2VJZDIwID0gMTsKICB2YXIgb3B0aW1pc20gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDEwLAogICAgbmFtZTogIk9QIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5vcHRpbWlzbS5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk9wdGltaXNtIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL29wdGltaXN0aWMuZXRoZXJzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1vcHRpbWlzdGljLmV0aGVyc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgZGlzcHV0ZUdhbWVGYWN0b3J5OiB7CiAgICAgICAgW3NvdXJjZUlkMjBdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhlNTk2NUFiNTk2MmVEYzc0NzdDODUyMDI0M0E5NTUxN0NEMjUyZkE5IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQyMF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweGRmZTk3ODY4MjMzZDFhYTIyZTgxNWEyNjY5ODJmMmNmMTc2ODVhMjciCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0Mjg2MjYzCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDIwXTogewogICAgICAgICAgYWRkcmVzczogIjB4YkViNUZjNTc5MTE1MDcxNzY0Yzc0MjNBNGYxMmVEZGU0MWYxMDZFZCIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyMF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDk5QzlmYzQ2ZjkyRThhMWMwZGVDMWIxNzQ3ZDAxMDkwM0U4ODRiRTEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMjAKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvb3B0aW1pc21Hb2VybGkuanMKICB2YXIgc291cmNlSWQyMSA9IDU7CiAgdmFyIG9wdGltaXNtR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiA0MjAsCiAgICBuYW1lOiAiT3B0aW1pc20gR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJHb2VybGkgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9nb2VybGkub3B0aW1pc20uaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLW9wdGltaXNtLmV0aGVyc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGktb3B0aW1pc20uZXRoZXJzY2FuLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICAuLi5jaGFpbkNvbmZpZzIuY29udHJhY3RzLAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDIxXTogewogICAgICAgICAgYWRkcmVzczogIjB4RTZEZmJhMDk1MzYxNkJhY2FiMGM5QThlY2IzYTlCQmE3N0ZDMTVjMCIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NDYxCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDIxXTogewogICAgICAgICAgYWRkcmVzczogIjB4NWI0N0UxQTA4RWE2ZDk4NUQ2NjQ5MzAwNTg0ZTY3MjJFYzRCMTM4MyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyMV06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDYzNkFmMTZiZjJmNjgyZEQzMTA5ZTYwMTAyYjhFMUEwODlGZWRBYTgiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDIxCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL29wdGltaXNtU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDIyID0gMTExNTUxMTE7CiAgdmFyIG9wdGltaXNtU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogMTExNTU0MjAsCiAgICBuYW1lOiAiT1AgU2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2Vwb2xpYSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEub3B0aW1pc20uaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL29wdGltaXNtLXNlcG9saWEuYmxvY2tzY291dC5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vb3B0aW1pc20tc2Vwb2xpYS5ibG9ja3Njb3V0LmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgZGlzcHV0ZUdhbWVGYWN0b3J5OiB7CiAgICAgICAgW3NvdXJjZUlkMjJdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgwNUY5NjEzYURCMzAwMjZGRmQ2MzRmMzhlNUM0ZEZkMzBhMTk3RmExIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQyMl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDkwRTljNGY4YTk5NGEyNTBGNmFFZmQ2MUNBRmI0RjJlODk1RDQ1OEYiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNjIwMjA0CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDIyXTogewogICAgICAgICAgYWRkcmVzczogIjB4MTZGYzUwNThGMjU2NDgxOTQ0NzE5MzlkZjc1Q0YyN0EyZmRDNDhCQyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyMl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEZCYjA2MjFFMEIyM2I1NDc4QjYzMEJENTVhNWYyMWY2NzczMEIwRjEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDIyCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL29wQk5CLmpzCiAgdmFyIG9wQk5CID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDQsCiAgICBuYW1lOiAib3BCTkIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkJOQiIsCiAgICAgIHN5bWJvbDogIkJOQiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vb3BibmItbWFpbm5ldC1ycGMuYm5iY2hhaW4ub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAib3BibmJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL21haW5uZXQub3BibmJzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA1MTI4ODEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9vcEJOQlRlc3RuZXQuanMKICB2YXIgb3BCTkJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1NjExLAogICAgbmFtZTogIm9wQk5CIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAidEJOQiIsCiAgICAgIHN5bWJvbDogInRCTkIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9vcGJuYi10ZXN0bmV0LXJwYy5ibmJjaGFpbi5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJvcGJuYnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5vcGJuYnNjYW4uY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDM3MDUxMDgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvb29ydG1haW5uZXREZXYuanMKICB2YXIgb29ydE1haW5uZXREZXYgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDk3MDAsCiAgICBuYW1lOiAiT09SVCBNYWlubmV0RGV2IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk9PUlQiLAogICAgICBzeW1ib2w6ICJPT1JUIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZGV2LXJwYy5vb3J0ZWNoLmNvbSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBvb3J0OiB7CiAgICAgICAgbmFtZTogIk9PUlQgTWFpbm5ldERldiBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9kZXYtc2Nhbi5vb3J0ZWNoLmNvbSIKICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJPT1JUIE1haW5uZXREZXYgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZGV2LXNjYW4ub29ydGVjaC5jb20iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvb3RpbURldm5ldC5qcwogIHZhciBvdGltRGV2bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MTE0NDExNCwKICAgIG5hbWU6ICJPdGltIERldm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFVEgiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwOi8vZGV2bmV0Lm90aW0ueHl6Il0KICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBiYXRjaEludm9rZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHg1RmJEQjIzMTU2NzhhZmVjYjM2N2YwMzJkOTNGNjQyZjY0MTgwYWEzIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BhbG0uanMKICB2YXIgcGFsbSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTEyOTcxMDgxMDksCiAgICBuYW1lOiAiUGFsbSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJQQUxNIiwKICAgICAgc3ltYm9sOiAiUEFMTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcGFsbS1tYWlubmV0LnB1YmxpYy5ibGFzdGFwaS5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9wYWxtLW1haW5uZXQucHVibGljLmJsYXN0YXBpLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ2hhaW5sZW5zIiwKICAgICAgICB1cmw6ICJodHRwczovL3BhbG0uY2hhaW5sZW5zLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNTQyOTI0OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BhbG1UZXN0bmV0LmpzCiAgdmFyIHBhbG1UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMTI5NzEwODA5OSwKICAgIG5hbWU6ICJQYWxtIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiUEFMTSIsCiAgICAgIHN5bWJvbDogIlBBTE0iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3BhbG0tbWFpbm5ldC5wdWJsaWMuYmxhc3RhcGkuaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcGFsbS1tYWlubmV0LnB1YmxpYy5ibGFzdGFwaS5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNoYWlubGVucyIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wYWxtLmNoYWlubGVucy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTU0MjkyNDgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcGxheWZpQWxiaXJlby5qcwogIHZhciBwbGF5ZmlBbGJpcmVvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnLAogICAgaWQ6IDE2MTIxMjcsCiAgICBuYW1lOiAiUGxheUZpIEFsYmlyZW8gVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiYWxiaXJlbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hbGJpcmVvLXJwYy5wbGF5ZmkuYWkiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vYWxiaXJlby1ycGMtd3MucGxheWZpLmFpL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUGxheUZpIEFsYmlyZW8gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYWxiaXJlby1leHBsb3Jlci5wbGF5ZmkuYWkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweEY5Y2RhNjI0RkJDN2UwNTkzNTVjZTk4YTMxNjkzZDI5OUZBQ2Q5NjMiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3Bnbi5qcwogIHZhciBzb3VyY2VJZDIzID0gMTsKICB2YXIgcGduID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MjQsCiAgICBuZXR3b3JrOiAicGduIiwKICAgIG5hbWU6ICJQR04iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnB1YmxpY2dvb2RzLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQR04gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucHVibGljZ29vZHMubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJQR04gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucHVibGljZ29vZHMubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDIzXTogewogICAgICAgICAgYWRkcmVzczogIjB4OUU2MjA0Rjc1MGNEODY2YjI5OTU5NGUyYUM5ZUE4MjRFMmU1Zjk1YyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMzODAyMDkKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMjNdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhiMjZGZDk4NWM1OTU5YkJCMzgyQkFGZEQwYjg3OUUxNDllNDgxMTZjIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDIzXTogewogICAgICAgICAgYWRkcmVzczogIjB4RDAyMDRCOTUyN0MxYkE3YkQ3NjVGYTVDQ0Q5MzU1ZDM4MzM4MjcyYiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBmb3JtYXR0ZXJzOiBmb3JtYXR0ZXJzMiwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDIzCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BnblRlc3RuZXQuanMKICB2YXIgc291cmNlSWQyNCA9IDExMTU1MTExOwogIHZhciBwZ25UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1ODAwOCwKICAgIG5ldHdvcms6ICJwZ24tdGVzdG5ldCIsCiAgICBuYW1lOiAiUEdOICIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLnB1YmxpY2dvb2RzLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQR04gVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5zZXBvbGlhLnB1YmxpY2dvb2RzLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuc2Vwb2xpYS5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJQR04gVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5zZXBvbGlhLnB1YmxpY2dvb2RzLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuc2Vwb2xpYS5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDI0XTogewogICAgICAgICAgYWRkcmVzczogIjB4RDViQWMzMTUyZmZDMjUzMThGODQ4QjNERDVkQTZDODUxNzFCYUVFZSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDI0XTogewogICAgICAgICAgYWRkcmVzczogIjB4RjA0QmRENTM1M0JiMEVGRjZDQTYwQ2ZjQzc4NTk0Mjc4ZUJmRTE3OSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyNF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEZhRTZhYkNBRjMwRDIzZTIzM0FDN2ZhRjc0N0YyZkMzYTVhNkJmYTMiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAzNzU0OTI1CiAgICAgIH0KICAgIH0sCiAgICBmb3JtYXR0ZXJzOiBmb3JtYXR0ZXJzMiwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDI0LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9waG9lbml4LmpzCiAgdmFyIHBob2VuaXggPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMzgxLAogICAgbmFtZTogIlBob2VuaXggQmxvY2tjaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiUGhvZW5peCIsIHN5bWJvbDogIlBIWCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5waG9lbml4cGxvcmVyLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlBob2VuaXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGhvZW5peHBsb3Jlci5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vcGhvZW5peHBsb3Jlci5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg0OThjRjc1N2E1NzVjRkYyYzJFZDlmNTMyZjU2RWZhNzk3Zjg2NDQyIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDU2MjAxOTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wbGluZ2EuanMKICB2YXIgcGxpbmdhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNDIsCiAgICBuYW1lOiAiUGxpbmdhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJQbGluZ2EiLCBzeW1ib2w6ICJQTElOR0EiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGN1cmwubWFpbm5ldC5wbGdjaGFpbi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQbGdzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3d3dy5wbGdzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDk4OTU3NjE2MGYyZTcwOTI5MDhCQjk0Nzk2MzFiOTAxMDYwYjZlNCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMDQ0ODkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wbHVtZVRlc3RuZXQuanMKICB2YXIgc291cmNlSWQyNSA9IDExMTU1MTExOwogIHZhciBwbHVtZVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE2MTIyMTEzNSwKICAgIG5hbWU6ICJQbHVtZSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJQbHVtZSBTZXBvbGlhIEV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQtcnBjLnBsdW1lbmV0d29yay54eXovaHR0cCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly90ZXN0bmV0LXJwYy5wbHVtZW5ldHdvcmsueHl6L3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLnBsdW1lbmV0d29yay54eXoiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC1leHBsb3Jlci5wbHVtZW5ldHdvcmsueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBzb3VyY2VJZDogc291cmNlSWQyNQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wb2x5Z29uLmpzCiAgdmFyIHBvbHlnb24gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzNywKICAgIG5hbWU6ICJQb2x5Z29uIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJNQVRJQyIsIHN5bWJvbDogIk1BVElDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcG9seWdvbi1ycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vcG9seWdvbnNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI1NzcwMTYwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcG9seWdvbkFtb3kuanMKICB2YXIgcG9seWdvbkFtb3kgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwMDAyLAogICAgbmFtZTogIlBvbHlnb24gQW1veSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTUFUSUMiLCBzeW1ib2w6ICJNQVRJQyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1hbW95LnBvbHlnb24udGVjaG5vbG9neSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlBvbHlnb25TY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2Ftb3kucG9seWdvbnNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1hbW95LnBvbHlnb25zY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzEyNzM4OAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wb2x5Z29uTXVtYmFpLmpzCiAgdmFyIHBvbHlnb25NdW1iYWkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwMDAxLAogICAgbmFtZTogIlBvbHlnb24gTXVtYmFpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJNQVRJQyIsIHN5bWJvbDogIk1BVElDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmFua3IuY29tL3BvbHlnb25fbXVtYmFpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vbXVtYmFpLnBvbHlnb25zY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktdGVzdG5ldC5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI1NzcwMTYwCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BvbHlnb25aa0V2bS5qcwogIHZhciBwb2x5Z29uWmtFdm0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMDEsCiAgICBuYW1lOiAiUG9seWdvbiB6a0VWTSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly96a2V2bS1ycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vemtldm0ucG9seWdvbnNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS16a2V2bS5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDU3NzQ2CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcG9seWdvblprRXZtQ2FyZG9uYS5qcwogIHZhciBwb2x5Z29uWmtFdm1DYXJkb25hID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNDQyLAogICAgbmFtZTogIlBvbHlnb24gemtFVk0gQ2FyZG9uYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuY2FyZG9uYS56a2V2bS1ycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vY2FyZG9uYS16a2V2bS5wb2x5Z29uc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vY2FyZG9uYS16a2V2bS5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTQwOTEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wb2x5Z29uWmtFdm1UZXN0bmV0LmpzCiAgdmFyIHBvbHlnb25aa0V2bVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0NDIsCiAgICBuYW1lOiAiUG9seWdvbiB6a0VWTSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5wdWJsaWMuemtldm0tdGVzdC5uZXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQb2x5Z29uU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LXprZXZtLnBvbHlnb25zY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LXprZXZtLnBvbHlnb25zY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDUyNTY4NgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3B1bHNlY2hhaW4uanMKICB2YXIgcHVsc2VjaGFpbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzY5LAogICAgbmFtZTogIlB1bHNlQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlB1bHNlIiwgc3ltYm9sOiAiUExTIiwgZGVjaW1hbHM6IDE4IH0sCiAgICB0ZXN0bmV0OiBmYWxzZSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMucHVsc2VjaGFpbi5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3MucHVsc2VjaGFpbi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQdWxzZVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5wdWxzZWNoYWluLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkuc2Nhbi5wdWxzZWNoYWluLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgZW5zUmVnaXN0cnk6IHsKICAgICAgICBhZGRyZXNzOiAiMHgwMDAwMDAwMDAwMEMyRTA3NGVDNjlBMGRGYjI5OTdCQTZDN2QyZTFlIgogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDM1MzYwMQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3B1bHNlY2hhaW5WNC5qcwogIHZhciBwdWxzZWNoYWluVjQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDk0MywKICAgIG5hbWU6ICJQdWxzZUNoYWluIFY0IiwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiVjQgUHVsc2UiLCBzeW1ib2w6ICJ2NFBMUyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy52NC50ZXN0bmV0LnB1bHNlY2hhaW4uY29tIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLnY0LnRlc3RuZXQucHVsc2VjaGFpbi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQdWxzZVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi52NC50ZXN0bmV0LnB1bHNlY2hhaW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NjYW4udjQudGVzdG5ldC5wdWxzZWNoYWluLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgZW5zUmVnaXN0cnk6IHsKICAgICAgICBhZGRyZXNzOiAiMHgwMDAwMDAwMDAwMEMyRTA3NGVDNjlBMGRGYjI5OTdCQTZDN2QyZTFlIgogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDM1MzYwMQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3FNYWlubmV0LmpzCiAgdmFyIHFNYWlubmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNTQ0MSwKICAgIG5hbWU6ICJRIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiUSIsCiAgICAgIHN5bWJvbDogIlEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMucS5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJRIE1haW5uZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucS5vcmciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIucS5vcmcvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3FUZXN0bmV0LmpzCiAgdmFyIHFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNTQ0MywKICAgIG5hbWU6ICJRIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiUSIsCiAgICAgIHN5bWJvbDogIlEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMucXRlc3RuZXQub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnF0ZXN0bmV0Lm9yZyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5xdGVzdG5ldC5vcmcvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yZWFsLmpzCiAgdmFyIHJlYWwgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMTE4OCwKICAgIG5hbWU6ICJyZS5hbCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAicmVFVEgiLAogICAgICBkZWNpbWFsczogMTgsCiAgICAgIHN5bWJvbDogInJlRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcmVhbC5kcnBjLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogInJlLmFsIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnJlLmFsIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLnJlLmFsL2FwaS92MiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA2OTUKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yZWRiZWxseVRlc3RuZXQuanMKICB2YXIgcmVkYmVsbHlUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNTMsCiAgICBuYW1lOiAiUmVkYmVsbHkgTmV0d29yayBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJSZWRiZWxseSBOYXRpdmUgQ29pbiIsCiAgICAgIHN5bWJvbDogIlJCTlQiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZ292ZXJub3JzLnRlc3RuZXQucmVkYmVsbHkubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV0aGVybmFsIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQucmVkYmVsbHkubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ldGhlcm5hbC5mbHkuZGV2L2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcmVkc3RvbmUuanMKICB2YXIgcmVkc3RvbmUgPSBkZWZpbmVDaGFpbih7CiAgICBpZDogNjkwLAogICAgbmFtZTogIlJlZHN0b25lIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMucmVkc3RvbmVjaGFpbi5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnJlZHN0b25lY2hhaW4uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsgbmFtZTogIkV4cGxvcmVyIiwgdXJsOiAiCWh0dHBzOi8vZXhwbG9yZXIucmVkc3RvbmUueHl6IiB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3JleWFOZXR3b3JrLmpzCiAgdmFyIHJleWFOZXR3b3JrID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNzI5LAogICAgbmFtZTogIlJleWEgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMucmV5YS5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLnJleWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlJleWEgTmV0d29yayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5yZXlhLm5ldHdvcmsiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yb2xsdXguanMKICB2YXIgcm9sbHV4ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1NzAsCiAgICBuYW1lOiAiUm9sbHV4IE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiU3lzY29pbiIsCiAgICAgIHN5bWJvbDogIlNZUyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnJvbGx1eC5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnJvbGx1eC5jb20vd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9sbHV4RXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucm9sbHV4LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5yb2xsdXguY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTkyMjIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yb2xsdXhUZXN0bmV0LmpzCiAgdmFyIHJvbGx1eFRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU3ZTMsCiAgICBuYW1lOiAiUm9sbHV4IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiU3lzY29pbiIsCiAgICAgIHN5bWJvbDogIlNZUyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRhbmVuYmF1bS5yb2xsdXguY29tLyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMtdGFuZW5iYXVtLnJvbGx1eC5jb20vd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9sbHV4VGVzdG5ldEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3JvbGx1eC50YW5lbmJhdW0uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vcm9sbHV4LnRhbmVuYmF1bS5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTgxMzY3NQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3JvbmluLmpzCiAgdmFyIHJvbmluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDIwLAogICAgbmFtZTogIlJvbmluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJST04iLCBzeW1ib2w6ICJST04iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcGkucm9uaW5jaGFpbi5jb20vcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9uaW4gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYXBwLnJvbmluY2hhaW4uY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI2MDIzNTM1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcm9vdC5qcwogIHZhciByb290ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NjY4LAogICAgbmFtZTogIlRoZSBSb290IE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWFJQIiwKICAgICAgc3ltYm9sOiAiWFJQIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9yb290LnJvb3RuZXQubGl2ZS9hcmNoaXZlIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3Jvb3Qucm9vdG5ldC5saXZlL2FyY2hpdmUvd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJSb290c2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9yb290c2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YzlDMkUyNDI5QWVDMzU0OTE2YzQ3NkIzMGQ3MjlkZURkQzk0OTg4ZCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA5MjE4MzM4CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcm9vdFBvcmNpbmkuanMKICB2YXIgcm9vdFBvcmNpbmkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDc2NzIsCiAgICBuYW1lOiAiVGhlIFJvb3QgTmV0d29yayAtIFBvcmNpbmkiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWFJQIiwKICAgICAgc3ltYm9sOiAiWFJQIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9wb3JjaW5pLnJvb3RuZXQuYXBwL2FyY2hpdmUiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcG9yY2luaS5yb290bmV0LmFwcC9hcmNoaXZlL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9vdHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vcG9yY2luaS5yb290c2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YzlDMkUyNDI5QWVDMzU0OTE2YzQ3NkIzMGQ3MjlkZURkQzk0OTg4ZCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDU1NTY5MgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yb290c3RvY2suanMKICB2YXIgcm9vdHN0b2NrID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMCwKICAgIG5hbWU6ICJSb290c3RvY2sgTWFpbm5ldCIsCiAgICBuZXR3b3JrOiAicm9vdHN0b2NrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlJvb3RzdG9jayBCaXRjb2luIiwKICAgICAgc3ltYm9sOiAiUkJUQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3B1YmxpYy1ub2RlLnJzay5jbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlJTSyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5yc2suY28iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDI0OTU0MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3Jvb3RzdG9ja1Rlc3RuZXQuanMKICB2YXIgcm9vdHN0b2NrVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzEsCiAgICBuYW1lOiAiUm9vdHN0b2NrIFRlc3RuZXQiLAogICAgbmV0d29yazogInJvb3RzdG9jayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJSb290c3RvY2sgQml0Y29pbiIsCiAgICAgIHN5bWJvbDogInRSQlRDIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcHVibGljLW5vZGUudGVzdG5ldC5yc2suY28iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJSU0sgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5yb290c3RvY2suaW8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3JzczMuanMKICB2YXIgc291cmNlSWQyNiA9IDE7CiAgdmFyIHJzczMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDEyNTUzLAogICAgbmFtZTogIlJTUzMgVlNMIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlJTUzMiLCBzeW1ib2w6ICJSU1MzIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnJzczMuaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJSU1MzIFZTTCBNYWlubmV0IFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5yc3MzLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NjYW4ucnNzMy5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQyNl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEU2ZjI0ZDJDMzJCMzEwOUIxOGVkMzNjRjA4ZUZiNDkwYjFlMDlDMTAiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDE5MwogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQyNl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDZBMTI0MzI0OTFiYmJFOGQzYmFiZjc1Rjc1OTc2Njc3NEM3NzhEYjQiLAogICAgICAgICAgYmxvY2tDcmVhdGVkOiAxOTM4NzA1NwogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDI2XTogewogICAgICAgICAgYWRkcmVzczogIjB4NGNiYWI2OTEwOEFhNzIxNTFFRGE1QTNjMTY0ZUE4Njg0NWYxODQzOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQyNgogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yc3MzU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDI3ID0gMTExNTUxMTE7CiAgdmFyIHJzczNTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAyMzMxLAogICAgbmFtZTogIlJTUzMgVlNMIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiUlNTMyIsIHN5bWJvbDogIlJTUzMiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVzdG5ldC5yc3MzLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUlNTMyBWU0wgU2Vwb2xpYSBUZXN0bmV0IFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi50ZXN0bmV0LnJzczMuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2Nhbi50ZXN0bmV0LnJzczMuaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMjddOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhEYjVjNDZDM0VhYTZFZDZhRThiMjM3OTc4NURGN2RkMDI5QzBkQzgxIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTU2OTcKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMjddOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhjQkQ3N0U4RTFFN0YwNkIyNWJhRGU2NzE0MmNkRTgyNjUyRGE3YjU3IiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogNTM0NTAzNQogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDI3XTogewogICAgICAgICAgYWRkcmVzczogIjB4ZEREMjliYjYzQjA4MzlGQjFjRTBlRTQzOUZmMDI3NzM4NTk1RDA3QiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkMjcKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2FpZ29uLmpzCiAgdmFyIHNhaWdvbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAyMSwKICAgIG5hbWU6ICJTYWlnb24gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiUk9OIiwgc3ltYm9sOiAiUk9OIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2FpZ29uLXRlc3RuZXQucm9uaW5jaGFpbi5jb20vcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU2FpZ29uIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NhaWdvbi1hcHAucm9uaW5jaGFpbi5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTg3MzY4NzEKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2FwcGhpcmUuanMKICB2YXIgc2FwcGhpcmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIzMjk0LAogICAgbmFtZTogIk9hc2lzIFNhcHBoaXJlIiwKICAgIG5ldHdvcms6ICJzYXBwaGlyZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2FwcGhpcmUgUm9zZSIsIHN5bWJvbDogIlJPU0UiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zYXBwaGlyZS5vYXNpcy5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9zYXBwaGlyZS5vYXNpcy5pby93cyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk9hc2lzIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLm9hc2lzLmlvL21haW5uZXQvc2FwcGhpcmUiCiAgICAgIH0sCiAgICAgIGJsb2Nrc2NvdXQ6IHsKICAgICAgICBuYW1lOiAiT2FzaXMgU2FwcGhpcmUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vb2xkLWV4cGxvcmVyLnNhcHBoaXJlLm9hc2lzLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL29sZC1leHBsb3Jlci5zYXBwaGlyZS5vYXNpcy5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNzM0NTMxCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2FwcGhpcmVUZXN0bmV0LmpzCiAgdmFyIHNhcHBoaXJlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjMyOTUsCiAgICBuYW1lOiAiT2FzaXMgU2FwcGhpcmUgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAic2FwcGhpcmUtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2FwcGhpcmUgVGVzdCBSb3NlIiwgc3ltYm9sOiAiVEVTVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuc2FwcGhpcmUub2FzaXMuZGV2Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3Rlc3RuZXQuc2FwcGhpcmUub2FzaXMuZGV2L3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiT2FzaXMgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIub2FzaXMuaW8vdGVzdG5ldC9zYXBwaGlyZSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJPYXNpcyBTYXBwaGlyZSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQub2xkLWV4cGxvcmVyLnNhcHBoaXJlLm9hc2lzLmRldiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0Lm9sZC1leHBsb3Jlci5zYXBwaGlyZS5vYXNpcy5kZXYvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zYXRvc2hpdm0uanMKICB2YXIgc2F0b3NoaVZNID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMTA5LAogICAgbmFtZTogIlNhdG9zaGlWTSBBbHBoYSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCVEMiLAogICAgICBzeW1ib2w6ICJCVEMiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FscGhhLXJwYy1ub2RlLWh0dHAuc3Ztc2Nhbi5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc3Ztc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zdm1zY2FuLmlvL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zYXRvc2hpdm1UZXN0bmV0LmpzCiAgdmFyIHNhdG9zaGlWTVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxMTAsCiAgICBuYW1lOiAiU2F0b3NoaVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkJUQyIsCiAgICAgIHN5bWJvbDogIkJUQyIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vdGVzdC1ycGMtbm9kZS1odHRwLnN2bXNjYW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJibG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuc3Ztc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LnN2bXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zY3JvbGwuanMKICB2YXIgc2Nyb2xsID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1MzQzNTIsCiAgICBuYW1lOiAiU2Nyb2xsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zY3JvbGwuaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3NzLXJwYy5zY3JvbGwuaW8vd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTY3JvbGxzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Njcm9sbHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5zY3JvbGxzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTQKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3Njcm9sbFNlcG9saWEuanMKICB2YXIgc2Nyb2xsU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTM0MzUxLAogICAgbmFtZTogIlNjcm9sbCBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEtcnBjLnNjcm9sbC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNjcm9sbHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5zY3JvbGxzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5zY3JvbGxzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogOTQ3MwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zZWkuanMKICB2YXIgc2VpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMzI5LAogICAgbmFtZTogIlNlaSBOZXR3b3JrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZWkiLCBzeW1ib2w6ICJTRUkiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldm0tcnBjLnNlaS1hcGlzLmNvbS8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXZtLXdzLnNlaS1hcGlzLmNvbS8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTZWl0cmFjZSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZWl0cmFjZS5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2VpdHJhY2UuY29tL3BhY2lmaWMtMS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2VpRGV2bmV0LmpzCiAgdmFyIHNlaURldm5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNzEzNzE1LAogICAgbmFtZTogIlNlaSBEZXZuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlNlaSIsIHN5bWJvbDogIlNFSSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V2bS1ycGMtYXJjdGljLTEuc2VpLWFwaXMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU2VpdHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vc2VpdHJhY2UuY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zZWlUZXN0bmV0LmpzCiAgdmFyIHNlaVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMjgsCiAgICBuYW1lOiAiU2VpIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlNlaSIsIHN5bWJvbDogIlNFSSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V2bS1ycGMtdGVzdG5ldC5zZWktYXBpcy5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXZtLXdzLXRlc3RuZXQuc2VpLWFwaXMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU2VpdHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vc2VpdHJhY2UuY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zZXBvbGlhLmpzCiAgdmFyIHNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMTU1MTExLAogICAgbmFtZTogIlNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlNlcG9saWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc2Vwb2xpYS5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5ldGhlcnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLXNlcG9saWEuZXRoZXJzY2FuLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3NTE1MzIKICAgICAgfSwKICAgICAgZW5zUmVnaXN0cnk6IHsgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjOEFmOTk5ZTM4MjczRDY1OEJFMWI5MjFiODhBOURkZjAwNTc2OWNDIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDUzMTcwODAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2hhcGVTZXBvbGlhLmpzCiAgdmFyIHNoYXBlU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTEwMTEsCiAgICBuYW1lOiAiU2hhcGUgU2Vwb2xpYSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZXBvbGlhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5zaGFwZS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiYmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zaGFwZS1zZXBvbGlhLWV4cGxvcmVyLmFsY2hlbXkuY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NoYXBlLXNlcG9saWEtZXhwbG9yZXIuYWxjaGVteS5jb20vYXBpL3YyIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NoaW1tZXIuanMKICB2YXIgc2hpbW1lciA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTQ4LAogICAgbmFtZTogIlNoaW1tZXIiLAogICAgbmV0d29yazogInNoaW1tZXIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiU2hpbW1lciIsCiAgICAgIHN5bWJvbDogIlNNUiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vanNvbi1ycGMuZXZtLnNoaW1tZXIubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNoaW1tZXIgTmV0d29yayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0uc2hpbW1lci5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmV2bS5zaGltbWVyLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NoaW1tZXJUZXN0bmV0LmpzCiAgdmFyIHNoaW1tZXJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDczLAogICAgbmFtZTogIlNoaW1tZXIgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAic2hpbW1lci10ZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlNoaW1tZXIiLAogICAgICBzeW1ib2w6ICJTTVIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2pzb24tcnBjLmV2bS50ZXN0bmV0LnNoaW1tZXIubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNoaW1tZXIgTmV0d29yayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0udGVzdG5ldC5zaGltbWVyLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLnRlc3RuZXQuc2hpbW1lci5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2thbGUvYnJhd2wuanMKICB2YXIgc2thbGVCbG9ja0JyYXdsZXJzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzOTE4NDU4OTQsCiAgICBuYW1lOiAiU0tBTEUgfCBCbG9jayBCcmF3bGVycyIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQlJBV0wiLCBzeW1ib2w6ICJCUkFXTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvZnJheWVkLWRlY2VudC1hbnRhcmVzIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvZnJheWVkLWRlY2VudC1hbnRhcmVzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU0tBTEUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZnJheWVkLWRlY2VudC1hbnRhcmVzLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHt9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL2NhbHlwc28uanMKICB2YXIgc2thbGVDYWx5cHNvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNTY0ODMwODE4LAogICAgbmFtZTogIlNLQUxFIHwgQ2FseXBzbyBORlQgSHViIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS9ob25vcmFibGUtc3RlZWwtcmFzYWxoYWd1ZSJdLAogICAgICAgIHdlYlNvY2tldDogWwogICAgICAgICAgIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvaG9ub3JhYmxlLXN0ZWVsLXJhc2FsaGFndWUiCiAgICAgICAgXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ob25vcmFibGUtc3RlZWwtcmFzYWxoYWd1ZS5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMxMDc2MjYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9jYWx5cHNvVGVzdG5ldC5qcwogIHZhciBza2FsZUNhbHlwc29UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5NzQzOTkxMzEsCiAgICBuYW1lOiAiU0tBTEUgQ2FseXBzbyBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5za2FsZW5vZGVzLmNvbS92MS9naWFudC1oYWxmLWR1YWwtdGVzdG5ldCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly90ZXN0bmV0LnNrYWxlbm9kZXMuY29tL3YxL3dzL2dpYW50LWhhbGYtZHVhbC10ZXN0bmV0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU0tBTEUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZ2lhbnQtaGFsZi1kdWFsLXRlc3RuZXQuZXhwbG9yZXIudGVzdG5ldC5za2FsZW5vZGVzLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDMyMjAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2thbGUvY3J5cHRvQmxhZGVzLmpzCiAgdmFyIHNrYWxlQ3J5cHRvQmxhZGVzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDI2MDYyMTU3LAogICAgbmFtZTogIlNLQUxFIHwgQ3J5cHRvQmxhZGVzIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS9hZmZlY3Rpb25hdGUtaW1tZWRpYXRlLXBvbGx1eCJdLAogICAgICAgIHdlYlNvY2tldDogWwogICAgICAgICAgIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvYWZmZWN0aW9uYXRlLWltbWVkaWF0ZS1wb2xsdXgiCiAgICAgICAgXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hZmZlY3Rpb25hdGUtaW1tZWRpYXRlLXBvbGx1eC5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9jcnlwdG9Db2xvc3NldW0uanMKICB2YXIgc2thbGVDcnlwdG9Db2xvc3NldW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMzI5NDIxNzIsCiAgICBuYW1lOiAiU0tBTEUgfCBDcnlwdG8gQ29sb3NzZXVtIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS9oYXVudGluZy1kZXZvdGVkLWRlbmViIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvaGF1bnRpbmctZGV2b3RlZC1kZW5lYiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2hhdW50aW5nLWRldm90ZWQtZGVuZWIuZXhwbG9yZXIubWFpbm5ldC5za2FsZW5vZGVzLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czoge30KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2thbGUvZXVyb3BhLmpzCiAgdmFyIHNrYWxlRXVyb3BhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDQ2Mzk5MTI2LAogICAgbmFtZTogIlNLQUxFIHwgRXVyb3BhIExpcXVpZGl0eSBIdWIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL2VsYXRlZC10YW4tc2thdCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL3dzL2VsYXRlZC10YW4tc2thdCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2VsYXRlZC10YW4tc2thdC5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMxMTM0OTUKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9ldXJvcGFUZXN0bmV0LmpzCiAgdmFyIHNrYWxlRXVyb3BhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTQ0NDY3MzQxOSwKICAgIG5hbWU6ICJTS0FMRSBFdXJvcGEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuc2thbGVub2Rlcy5jb20vdjEvanVpY3ktbG93LXNtYWxsLXRlc3RuZXQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9qdWljeS1sb3ctc21hbGwtdGVzdG5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2p1aWN5LWxvdy1zbWFsbC10ZXN0bmV0LmV4cGxvcmVyLnRlc3RuZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTEwODU4CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL2V4b3JkZS5qcwogIHZhciBza2FsZUV4b3JkZSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjEzOTkyNzU1MiwKICAgIG5hbWU6ICJTS0FMRSB8IEV4b3JkZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvbGlnaHQtdmFzdC1kaXBoZGEiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9saWdodC12YXN0LWRpcGhkYSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2xpZ2h0LXZhc3QtZGlwaGRhLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHt9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL2h1bWFuUHJvdG9jb2wuanMKICB2YXIgc2thbGVIdW1hblByb3RvY29sID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjczMjI3NDUzLAogICAgbmFtZTogIlNLQUxFIHwgSHVtYW4gUHJvdG9jb2wiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL3dhbi1yZWQtYWluIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3Mvd2FuLXJlZC1haW4iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93YW4tcmVkLWFpbi5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9uZWJ1bGEuanMKICB2YXIgc2thbGVOZWJ1bGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0ODI2MDE2NDksCiAgICBuYW1lOiAiU0tBTEUgfCBOZWJ1bGEgR2FtaW5nIEh1YiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvZ3JlZW4tZ2lkZHktZGVuZWJvbGEiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9ncmVlbi1naWRkeS1kZW5lYm9sYSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2dyZWVuLWdpZGR5LWRlbmVib2xhLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjM3Mjk4NgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL25lYnVsYVRlc3RuZXQuanMKICB2YXIgc2thbGVOZWJ1bGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNzA4NDYyNCwKICAgIG5hbWU6ICJTS0FMRSBOZWJ1bGEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuc2thbGVub2Rlcy5jb20vdjEvbGFua3ktaWxsLWZ1bm55LXRlc3RuZXQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9sYW5reS1pbGwtZnVubnktdGVzdG5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2xhbmt5LWlsbC1mdW5ueS10ZXN0bmV0LmV4cGxvcmVyLnRlc3RuZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTA1MTQxCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL3Jhem9yLmpzCiAgdmFyIHNrYWxlUmF6b3IgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI3ODYxMTM1MSwKICAgIG5hbWU6ICJTS0FMRSB8IFJhem9yIE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL3R1cmJ1bGVudC11bmlxdWUtc2NoZWF0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvdHVyYnVsZW50LXVuaXF1ZS1zY2hlYXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90dXJidWxlbnQtdW5pcXVlLXNjaGVhdC5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS90aXRhbi5qcwogIHZhciBza2FsZVRpdGFuID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMzUwMjE2MjM0LAogICAgbmFtZTogIlNLQUxFIHwgVGl0YW4gQ29tbXVuaXR5IEh1YiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvcGFyYWxsZWwtc3Rvcm15LXNwaWNhIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvcGFyYWxsZWwtc3Rvcm15LXNwaWNhIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU0tBTEUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGFyYWxsZWwtc3Rvcm15LXNwaWNhLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjA3NjQ1OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL3RpdGFuVGVzdG5ldC5qcwogIHZhciBza2FsZVRpdGFuVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAyMDM1MjIyMCwKICAgIG5hbWU6ICJTS0FMRSBUaXRhbiBIdWIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LnNrYWxlbm9kZXMuY29tL3YxL2F3YXJlLWZha2UtdHJpbS10ZXN0bmV0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3Rlc3RuZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvYXdhcmUtZmFrZS10cmltLXRlc3RuZXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hd2FyZS1mYWtlLXRyaW0tdGVzdG5ldC5leHBsb3Jlci50ZXN0bmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEwNDA3MgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2V0Y2hwYWQuanMKICB2YXIgc2tldGNocGFkID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5ODQxMjMsCiAgICBuYW1lOiAiRm9ybWEgU2tldGNocGFkIiwKICAgIG5ldHdvcms6ICJza2V0Y2hwYWQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgc3ltYm9sOiAiVElBIiwKICAgICAgbmFtZTogIlRJQSIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc2tldGNocGFkLTEuZm9ybWEuYXJ0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLnNrZXRjaHBhZC0xLmZvcm1hLmFydCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNrZXRjaHBhZCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5za2V0Y2hwYWQtMS5mb3JtYS5hcnQiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NvbmdiaXJkLmpzCiAgdmFyIHNvbmdiaXJkID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOSwKICAgIG5hbWU6ICJTb25nYmlyZCBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogInNvbmdiaXJkIiwKICAgICAgc3ltYm9sOiAiU0dCIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vc29uZ2JpcmQtYXBpLmZsYXJlLm5ldHdvcmsvZXh0L0MvcnBjIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU29uZ2JpcmQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc29uZ2JpcmQtZXhwbG9yZXIuZmxhcmUubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zb25nYmlyZC1leHBsb3Jlci5mbGFyZS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zb25nYmlyZFRlc3RuZXQuanMKICB2YXIgc29uZ2JpcmRUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNiwKICAgIG5hbWU6ICJDb3N0b24iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiY29zdG9uZmxhcmUiLAogICAgICBzeW1ib2w6ICJDRkxSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vY29zdG9uLWFwaS5mbGFyZS5uZXR3b3JrL2V4dC9DL3JwYyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNvc3RvbiBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9jb3N0b24tZXhwbG9yZXIuZmxhcmUubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9jb3N0b24tZXhwbG9yZXIuZmxhcmUubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NwaWN5LmpzCiAgdmFyIHNwaWN5ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4ODg4MiwKICAgIG5hbWU6ICJDaGlsaXogU3BpY3kgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiY2hpbGl6LXNwaWN5LVRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ0haIiwKICAgICAgc3ltYm9sOiAiQ0haIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL3NwaWN5LXJwYy5jaGlsaXouY29tIiwKICAgICAgICAgICJodHRwczovL2NoaWxpei1zcGljeS1ycGMucHVibGljbm9kZS5jb20iCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsKICAgICAgICAgICJ3c3M6Ly9zcGljeS1ycGMtd3MuY2hpbGl6LmNvbSIsCiAgICAgICAgICAid3NzOi8vY2hpbGl6LXNwaWN5LXJwYy5wdWJsaWNub2RlLmNvbSIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNoaWxpeiBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cDovL3NwaWN5LWV4cGxvcmVyLmNoaWxpei5jb20iLAogICAgICAgIGFwaVVybDogImh0dHA6Ly9zcGljeS1leHBsb3Jlci5jaGlsaXouY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2hhcmRldW1TcGhpbnguanMKICB2YXIgc2hhcmRldW1TcGhpbnggPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwODIsCiAgICBuYW1lOiAiU2hhcmRldW0gU3BoaW54IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTSEFSREVVTSIsIHN5bWJvbDogIlNITSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NwaGlueC5zaGFyZGV1bS5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTaGFyZGV1bSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci1zcGhpbnguc2hhcmRldW0ub3JnIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zaGliYXJpdW0uanMKICB2YXIgc2hpYmFyaXVtID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDksCiAgICBuYW1lOiAiU2hpYmFyaXVtIiwKICAgIG5ldHdvcms6ICJzaGliYXJpdW0iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkJvbmUiLCBzeW1ib2w6ICJCT05FIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnNoaWJycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zaGliYXJpdW1zY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg4NjRCZjY4MUFERDYwNTIzOTUxODhBODkxMDFBMUIzN2QzQjRDOTYxIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI2NTkwMAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NoaWJhcml1bVRlc3RuZXQuanMKICB2YXIgc2hpYmFyaXVtVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTU3LAogICAgbmFtZTogIlB1cHB5bmV0IFNoaWJhcml1bSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCb25lIiwKICAgICAgc3ltYm9sOiAiQk9ORSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3B1cHB5bmV0LnNoaWJycGMuY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wdXBweXNjYW4uc2hpYi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9wdXBweXNjYW4uc2hpYi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweEE0MDI5Yjc0RkJBMzY2YzkyNmVERkE3RGQxMEIyMUM2MjExNzBhNGMiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzAzNTc2OQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zdHJhdGlzLmpzCiAgdmFyIHN0cmF0aXMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwNTEwNSwKICAgIG5hbWU6ICJTdHJhdGlzIE1haW5uZXQiLAogICAgbmV0d29yazogInN0cmF0aXMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIlN0cmF0aXMiLAogICAgICBzeW1ib2w6ICJTVFJBWCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc3RyYXRpc2V2bS5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTdHJhdGlzIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnN0cmF0aXNldm0uY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3N5c2NvaW4uanMKICB2YXIgc3lzY29pbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTcsCiAgICBuYW1lOiAiU3lzY29pbiBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlN5c2NvaW4iLAogICAgICBzeW1ib2w6ICJTWVMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zeXNjb2luLm9yZyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuc3lzY29pbi5vcmcvd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU3lzY29pbkV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnN5c2NvaW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLnN5c2NvaW4ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyODcxMzkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zeXNjb2luVGVzdG5ldC5qcwogIHZhciBzeXNjb2luVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTcwMCwKICAgIG5hbWU6ICJTeXNjb2luIFRhbmVuYmF1bSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlN5c2NvaW4iLAogICAgICBzeW1ib2w6ICJTWVMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy50YW5lbmJhdW0uaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnRhbmVuYmF1bS5pby93c3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTeXNjb2luVGVzdG5ldEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3RhbmVuYmF1bS5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNzEyODgKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90YXJheGEuanMKICB2YXIgdGFyYXhhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4NDEsCiAgICBuYW1lOiAiVGFyYXhhIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlRhcmEiLCBzeW1ib2w6ICJUQVJBIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLm1haW5uZXQudGFyYXhhLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGFyYXhhIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLm1haW5uZXQudGFyYXhhLmlvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvLmpzCiAgdmFyIHRhaWtvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjdlMywKICAgIG5hbWU6ICJUYWlrbyBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMubWFpbm5ldC50YWlrby54eXoiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3MubWFpbm5ldC50YWlrby54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUYWlrb3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vdGFpa29zY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS50YWlrb3NjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYjI0MzY3NzRDM2UxOTFjODUwNTZkMjQ4RUY0MjYwY2U1ZjI3QTlEIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvSGVrbGEuanMKICB2YXIgdGFpa29IZWtsYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY3MDA5LAogICAgbmFtZTogIlRhaWtvIEhla2xhIEwyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5oZWtsYS50YWlrby54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUYWlrb3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vaGVrbGEudGFpa29zY2FuLm5ldHdvcmsiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvSm9sbmlyLmpzCiAgdmFyIHRhaWtvSm9sbmlyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjcwMDcsCiAgICBuYW1lOiAiVGFpa28gSm9sbmlyIChBbHBoYS01IFRlc3RuZXQpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5qb2xuaXIudGFpa28ueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiYmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5qb2xuaXIudGFpa28ueHl6IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDczMjcwNgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90YWlrb0thdGxhLmpzCiAgdmFyIHRhaWtvS2F0bGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE2NzAwOCwKICAgIG5hbWU6ICJUYWlrbyBLYXRsYSAoQWxwaGEtNiBUZXN0bmV0KSIsCiAgICBuZXR3b3JrOiAidGtvLWthdGxhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5rYXRsYS50YWlrby54eXoiXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmthdGxhLnRhaWtvLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIua2F0bGEudGFpa28ueHl6IgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvVGVzdG5ldFNlcG9saWEuanMKICB2YXIgdGFpa29UZXN0bmV0U2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY3MDA1LAogICAgbmFtZTogIlRhaWtvIChBbHBoYS0zIFRlc3RuZXQpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy50ZXN0LnRhaWtvLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdC50YWlrby54eXoiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvdGFyYXhhVGVzdG5ldC5qcwogIHZhciB0YXJheGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4NDIsCiAgICBuYW1lOiAiVGFyYXhhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlRhcmEiLCBzeW1ib2w6ICJUQVJBIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQudGFyYXhhLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGFyYXhhIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQudGFyYXhhLmlvIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90ZWxjb2luVGVzdG5ldC5qcwogIHZhciB0ZWxjb2luVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAxNywKICAgIG5hbWU6ICJUZWxjb2luIEFkaXJpIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlRlbGNvaW4iLCBzeW1ib2w6ICJURUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVsY29pbi5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAidGVsc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZWxzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90ZWxvcy5qcwogIHZhciB0ZWxvcyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDAsCiAgICBuYW1lOiAiVGVsb3MiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiVGVsb3MiLAogICAgICBzeW1ib2w6ICJUTE9TIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC50ZWxvcy5uZXQvZXZtIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGVsb3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3LnRlbG9zY2FuLmlvLyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDY1MzA3MDkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90ZWxvc1Rlc3RuZXQuanMKICB2YXIgdGVsb3NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MSwKICAgIG5hbWU6ICJUZWxvcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJUZWxvcyIsCiAgICAgIHN5bWJvbDogIlRMT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LnRlbG9zLm5ldC9ldm0iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUZWxvc2NhbiAodGVzdG5ldCkiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC50ZWxvc2Nhbi5pby8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RlbmV0LmpzCiAgdmFyIHRlbmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNTU5LAogICAgbmFtZTogIlRlbmV0IiwKICAgIG5ldHdvcms6ICJ0ZW5ldC1tYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJURU5FVCIsCiAgICAgIHN5bWJvbDogIlRFTkVUIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVuZXQub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGVuZXRTY2FuIE1haW5uZXQiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVuZXRzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3RlbmV0c2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90aGFpQ2hhaW4uanMKICB2YXIgdGhhaUNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3LAogICAgbmFtZTogIlRoYWlDaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiVENIIiwgc3ltYm9sOiAiVENIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRoYWljaGFpbi5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cC50aGFpY2hhaW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cC50aGFpY2hhaW4ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MERhRDYxMzBlODMyYzIxNzE5QzVDRTNiYWU5MzQ1NEUxNkE4NDgyNiIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0ODA2Mzg2CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90aHVuZGVyVGVzdG5ldC5qcwogIHZhciB0aHVuZGVyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogOTk3LAogICAgbmFtZTogIjVpcmVDaGFpbiBUaHVuZGVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIjVpcmUgVG9rZW4iLCBzeW1ib2w6ICI1SVJFIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQuNWlyZS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiNWlyZUNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLjVpcmUubmV0d29yayIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvdW5yZWFsLmpzCiAgdmFyIHVucmVhbCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTgyMzMsCiAgICBuYW1lOiAiVW5yZWFsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJyZUVUSCIsCiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgc3ltYm9sOiAicmVFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMudW5yZWFsLW9yYml0LmdlbGF0by5kaWdpdGFsIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVW5yZWFsIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3VucmVhbC5ibG9ja3Njb3V0LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly91bnJlYWwuYmxvY2tzY291dC5jb20vYXBpL3YyIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4OGI2QjBlNjBEOENEODQ4OThFYThiOTgxMDY1QTEyRjg3NmVBNTY3NyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNzQ1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvdmVjaGFpbi5qcwogIHZhciB2ZWNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDAwMDksCiAgICBuYW1lOiAiVmVjaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiVmVDaGFpbiIsIHN5bWJvbDogIlZFVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQudmVjaGFpbi5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJWZWNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmUudmVjaGFpbi5vcmciCiAgICAgIH0sCiAgICAgIHZlY2hhaW5TdGF0czogewogICAgICAgIG5hbWU6ICJWZWNoYWluIFN0YXRzIiwKICAgICAgICB1cmw6ICJodHRwczovL3ZlY2hhaW5zdGF0cy5jb20iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvd2FuY2hhaW4uanMKICB2YXIgd2FuY2hhaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDg4OCwKICAgIG5hbWU6ICJXYW5jaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiV0FOQ0hBSU4iLCBzeW1ib2w6ICJXQU4iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL2d3YW4tc3NsLndhbmRldnMub3JnOjU2ODkxIiwKICAgICAgICAgICJodHRwczovL2d3YW4yLXNzbC53YW5kZXZzLm9yZyIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIldhblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd2Fuc2Nhbi5vcmciCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNERjZBMTU2NmU3OEVCNDU5NGM4NkZlNzNGY2RjODI0MjllOTdmYkIiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjUzMTIzOTAKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy93YW5jaGFpblRlc3RuZXQuanMKICB2YXIgd2FuY2hhaW5UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5OTksCiAgICBuYW1lOiAiV2FuY2hhaW4gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiV0FOQ0hBSU4iLCBzeW1ib2w6ICJXQU50IiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZ3dhbi1zc2wud2FuZGV2cy5vcmc6NDY4OTEiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJXYW5TY2FuVGVzdCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93YW5zY2FuLm9yZyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MTFjODliRjQ0OTZjMzlGQjgwNTM1RmZiNGM5MjcxNTgzOUNDNTMyNCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDc0MzQ0OAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy93ZW1peC5qcwogIHZhciB3ZW1peCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExMSwKICAgIG5hbWU6ICJXRU1JWCIsCiAgICBuZXR3b3JrOiAid2VtaXgtbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiV0VNSVgiLCBzeW1ib2w6ICJXRU1JWCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkud2VtaXguY29tIl0gfSwKICAgICAgcHVibGljOiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkud2VtaXguY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAid2VtaXhFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci53ZW1peC5jb20iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvd2VtaXhUZXN0bmV0LmpzCiAgdmFyIHdlbWl4VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExMiwKICAgIG5hbWU6ICJXRU1JWCBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJ3ZW1peC10ZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJXRU1JWCIsIHN5bWJvbDogInRXRU1JWCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkudGVzdC53ZW1peC5jb20iXSB9LAogICAgICBwdWJsaWM6IHsgaHR0cDogWyJodHRwczovL2FwaS50ZXN0LndlbWl4LmNvbSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIndlbWl4RXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC53ZW1peHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQud2VtaXhzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3hMYXllclRlc3RuZXQuanMKICB2YXIgeExheWVyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTk1LAogICAgbmFtZTogIlgxIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiT0tCIiwKICAgICAgc3ltYm9sOiAiT0tCIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8veGxheWVydGVzdHJwYy5va3guY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiT0tMaW5rIiwKICAgICAgICB1cmw6ICJodHRwczovL3d3dy5va2xpbmsuY29tL3hsYXllci10ZXN0IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDYyNDM0NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94TGF5ZXIuanMKICB2YXIgeExheWVyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOTYsCiAgICBuYW1lOiAiWCBMYXllciBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk9LQiIsCiAgICAgIHN5bWJvbDogIk9LQiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy54bGF5ZXIudGVjaCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk9LTGluayIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cub2tsaW5rLmNvbS94bGF5ZXIiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDc0MTYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94YWkuanMKICB2YXIgeGFpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2NjAyNzksCiAgICBuYW1lOiAiWGFpIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlhhaSIsIHN5bWJvbDogIlhBSSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3hhaS1jaGFpbi5uZXQvcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci54YWktY2hhaW4ubmV0IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDIyMjU0OQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMveGFpVGVzdG5ldC5qcwogIHZhciB4YWlUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNzcxNDU1NTQyOSwKICAgIG5hbWU6ICJYYWkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic1hhaSIsIHN5bWJvbDogInNYQUkiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LXYyLnhhaS1jaGFpbi5uZXQvcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLXYyLnhhaS1jaGFpbi5uZXQiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3hkYy5qcwogIHZhciB4ZGMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDUwLAogICAgbmFtZTogIlhpbkZpbiBOZXR3b3JrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlhEQyIsCiAgICAgIHN5bWJvbDogIlhEQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy54aW5maW4ubmV0d29yayJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICB4aW5maW46IHsKICAgICAgICBuYW1lOiAiWGluRmluIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnhpbmZpbi5uZXR3b3JrIgogICAgICB9LAogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8veGRjLmJsb2Nrc3NjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNzE1NDI3ODgKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94ZGNUZXN0bmV0LmpzCiAgdmFyIHhkY1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDUxLAogICAgbmFtZTogIkFwb3RoZW0gTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJUWERDIiwKICAgICAgc3ltYm9sOiAiVFhEQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2VycGMuYXBvdGhlbS5uZXR3b3JrIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hcG90aGVtLmJsb2Nrc3NjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTk3NjUzODkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94clNlcG9saWEuanMKICB2YXIgeHJTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNzMwLAogICAgbmFtZTogIlhSIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAidFhSIiwKICAgICAgc3ltYm9sOiAidFhSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8veHItc2Vwb2xpYS10ZXN0bmV0LnJwYy5jYWxkZXJhLnh5ei9odHRwIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly94ci1zZXBvbGlhLXRlc3RuZXQuZXhwbG9yZXIuY2FsZGVyYS54eXoiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3lvb2xkb1ZlcnNlLmpzCiAgdmFyIHlvb2xkb1ZlcnNlID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1MDAwNSwKICAgIG5hbWU6ICJZb29sZG8gVmVyc2UiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk9BUyIsIHN5bWJvbDogIk9BUyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy55b29sZG8tdmVyc2UueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiWW9vbGRvIFZlcnNlIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnlvb2xkby12ZXJzZS54eXoiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMveW9vbGRvVmVyc2VUZXN0bmV0LmpzCiAgdmFyIHlvb2xkb1ZlcnNlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTAwMDYsCiAgICBuYW1lOiAiWW9vbGRvIFZlcnNlIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk9BUyIsIHN5bWJvbDogIk9BUyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy50ZXN0bmV0Lnlvb2xkby12ZXJzZS54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJZb29sZG8gVmVyc2UgVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci50ZXN0bmV0Lnlvb2xkby12ZXJzZS54eXoiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3pldGFjaGFpbi5qcwogIHZhciB6ZXRhY2hhaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDdlMywKICAgIG5hbWU6ICJaZXRhQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWmV0YSIsCiAgICAgIHN5bWJvbDogIlpFVEEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3pldGFjaGFpbi1ldm0uYmxvY2twaS5uZXR3b3JrL3YxL3JwYy9wdWJsaWMiXQogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE2MzI3ODEKICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiWmV0YVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuemV0YWNoYWluLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3pldGFjaGFpbkF0aGVuc1Rlc3RuZXQuanMKICB2YXIgemV0YWNoYWluQXRoZW5zVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNzAwMSwKICAgIG5hbWU6ICJaZXRhQ2hhaW4gQXRoZW5zIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWmV0YSIsCiAgICAgIHN5bWJvbDogImFaRVRBIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly96ZXRhY2hhaW4tYXRoZW5zLWV2bS5ibG9ja3BpLm5ldHdvcmsvdjEvcnBjL3B1YmxpYyJdCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjcxNTIxNwogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJaZXRhU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hdGhlbnMuZXhwbG9yZXIuemV0YWNoYWluLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemhlamlhbmcuanMKICB2YXIgemhlamlhbmcgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMzc4MDMsCiAgICBuYW1lOiAiWmhlamlhbmciLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlpoZWppYW5nIEV0aGVyIiwgc3ltYm9sOiAiWmhlakVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy56aGVqaWFuZy5ldGhwYW5kYW9wcy5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJlYWNvbmNoYWluIiwKICAgICAgICB1cmw6ICJodHRwczovL3poZWppYW5nLmJlYWNvbmNoYS5pbiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemlsbGlxYS5qcwogIHZhciB6aWxsaXFhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMjc2OSwKICAgIG5hbWU6ICJaaWxsaXFhIiwKICAgIG5ldHdvcms6ICJ6aWxsaXFhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJaaWxsaXFhIiwgc3ltYm9sOiAiWklMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vYXBpLnppbGxpcWEuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJuYWwiLAogICAgICAgIHVybDogImh0dHBzOi8vZXZteC56aWxsaXFhLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3ppbGxpcWFUZXN0bmV0LmpzCiAgdmFyIHppbGxpcWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMzEwMSwKICAgIG5hbWU6ICJaaWxsaXFhIFRlc3RuZXQiLAogICAgbmV0d29yazogInppbGxpcWEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiWmlsbGlxYSIsIHN5bWJvbDogIlpJTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2Rldi1hcGkuemlsbGlxYS5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcm5hbCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ldm14LnRlc3RuZXQuemlsbGlxYS5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prRmFpci5qcwogIHZhciB6a0ZhaXIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyNzY2LAogICAgbmFtZTogIlpLRmFpciBNYWlubmV0IiwKICAgIG5ldHdvcms6ICJ6a2ZhaXItbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJVU0QgQ29pbiIsCiAgICAgIHN5bWJvbDogIlVTREMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy56a2ZhaXIuaW8iXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnprZmFpci5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogInprRmFpciBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLnprZmFpci5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLnprZmFpci5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjA5MDk1OQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemtGYWlyVGVzdG5ldC5qcwogIHZhciB6a0ZhaXJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0Mzg1MSwKICAgIG5hbWU6ICJaS0ZhaXIgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiemtmYWlyLXRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiVVNEIENvaW4iLAogICAgICBzeW1ib2w6ICJVU0RDIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LXJwYy56a2ZhaXIuaW8iXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC1ycGMuemtmYWlyLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiemtGYWlyIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQtc2Nhbi56a2ZhaXIuaW8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prTGlua05vdmEuanMKICB2YXIgemtMaW5rTm92YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogODEwMTgwLAogICAgbmFtZTogInprTGluayBOb3ZhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUSCIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy56a2xpbmsuaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJ6a0xpbmsgTm92YSBCbG9jayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci56a2xpbmsuaW8iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemtMaW5rTm92YVNlcG9saWFUZXN0bmV0LmpzCiAgdmFyIHprTGlua05vdmFTZXBvbGlhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogODEwMTgxLAogICAgbmFtZTogInprTGluayBOb3ZhIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFVEgiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLnJwYy56a2xpbmsuaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJ6a0xpbmsgTm92YSBCbG9jayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZXBvbGlhLmV4cGxvcmVyLnprbGluay5pbyIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy96a3N5bmMuanMKICB2YXIgemtzeW5jID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnLAogICAgaWQ6IDMyNCwKICAgIG5hbWU6ICJaS3N5bmMgRXJhIiwKICAgIG5ldHdvcms6ICJ6a3N5bmMtZXJhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmVyYS56a3N5bmMuaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vbWFpbm5ldC5lcmEuemtzeW5jLmlvL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2VyYS56a3N5bmMubmV0d29yay8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLWVyYS56a3N5bmMubmV0d29yay9hcGkiCiAgICAgIH0sCiAgICAgIG5hdGl2ZTogewogICAgICAgIG5hbWU6ICJaS3N5bmMgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuemtzeW5jLmlvLyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ibG9jay1leHBsb3Jlci1hcGkubWFpbm5ldC56a3N5bmMuaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhGOWNkYTYyNEZCQzdlMDU5MzU1Y2U5OGEzMTY5M2QyOTlGQUNkOTYzIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prc3luY0luTWVtb3J5Tm9kZS5qcwogIHZhciB6a3N5bmNJbk1lbW9yeU5vZGUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcsCiAgICBpZDogMjYwLAogICAgbmFtZTogIlpLc3luYyBJbk1lbW9yeSBOb2RlIiwKICAgIG5ldHdvcms6ICJ6a3N5bmMtaW4tbWVtb3J5LW5vZGUiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHA6Ly9sb2NhbGhvc3Q6ODAxMSJdCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prc3luY0xvY2FsTm9kZS5qcwogIHZhciB6a3N5bmNMb2NhbE5vZGUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcsCiAgICBpZDogMjcwLAogICAgbmFtZTogIlpLc3luYyBDTEkgTG9jYWwgTm9kZSIsCiAgICBuZXR3b3JrOiAiemtzeW5jLWNsaS1sb2NhbC1ub2RlIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwOi8vbG9jYWxob3N0OjMwNTAiXQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy96a3N5bmNTZXBvbGlhVGVzdG5ldC5qcwogIHZhciB6a3N5bmNTZXBvbGlhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZywKICAgIGlkOiAzMDAsCiAgICBuYW1lOiAiWktzeW5jIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiemtzeW5jLXNlcG9saWEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLmVyYS56a3N5bmMuZGV2Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3NlcG9saWEuZXJhLnprc3luYy5kZXYvd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS1lcmEuemtzeW5jLm5ldHdvcmsvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1zZXBvbGlhLWVyYS56a3N5bmMubmV0d29yay9hcGkiCiAgICAgIH0sCiAgICAgIG5hdGl2ZTogewogICAgICAgIG5hbWU6ICJaS3N5bmMgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5leHBsb3Jlci56a3N5bmMuaW8vIiwKICAgICAgICBibG9ja0V4cGxvcmVyQXBpOiAiaHR0cHM6Ly9ibG9jay1leHBsb3Jlci1hcGkuc2Vwb2xpYS56a3N5bmMuZGV2L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4RjljZGE2MjRGQkM3ZTA1OTM1NWNlOThhMzE2OTNkMjk5RkFDZDk2MyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvem9yYS5qcwogIHZhciBzb3VyY2VJZDI4ID0gMTsKICB2YXIgem9yYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogNzc3Nzc3NywKICAgIG5hbWU6ICJab3JhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuem9yYS5lbmVyZ3kiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnpvcmEuZW5lcmd5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuem9yYS5lbmVyZ3kiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuem9yYS5lbmVyZ3kvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMjhdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg5RTYyMDRGNzUwY0Q4NjZiMjk5NTk0ZTJhQzllQTgyNEUyZTVmOTVjIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTg4MgogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQyOF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDFhMGFkMDExOTEzQTE1MGY2OWY2QTE5REY0NDdBMENmRDk1NTEwNTQiCiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkMjhdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgzZTJFYTlCOTJCN0U0OEE1MjI5NmZEMjYxZGMyNmZkOTk1Mjg0NjMxIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDI4CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3pvcmFTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMjkgPSAxMTE1NTExMTsKICB2YXIgem9yYVNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDk5OTk5OTk5OSwKICAgIG5hbWU6ICJab3JhIFNlcG9saWEiLAogICAgbmV0d29yazogInpvcmEtc2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJab3JhIFNlcG9saWEiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEucnBjLnpvcmEuZW5lcmd5Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3NlcG9saWEucnBjLnpvcmEuZW5lcmd5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiWm9yYSBTZXBvbGlhIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEuZXhwbG9yZXIuem9yYS5lbmVyZ3kvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NlcG9saWEuZXhwbG9yZXIuem9yYS5lbmVyZ3kvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMjldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgyNjE1QjQ4MUJkM0U1QTFDMEM3Q2EzRGExYmRjNjYzRTg2MTVBZGU5IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogODMxNjAKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMjldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhlZmZFMkM2Y0E5QWI3OTdENDE4ZjBEOTFlQTYwODA3NzEzZjM1MzZmIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDI5XTogewogICAgICAgICAgYWRkcmVzczogIjB4NTM3NmYxRDU0M2RjYkI1QkQ0MTZjNTZDMTg5ZTRjQjczOTlmQ2NDQiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQyOSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvem9yYVRlc3RuZXQuanMKICB2YXIgc291cmNlSWQzMCA9IDU7CiAgdmFyIHpvcmFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiA5OTksCiAgICBuYW1lOiAiWm9yYSBHb2VybGkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJab3JhIEdvZXJsaSIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5ycGMuem9yYS5lbmVyZ3kiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC5ycGMuem9yYS5lbmVyZ3kiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmV4cGxvcmVyLnpvcmEuZW5lcmd5IiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQuZXhwbG9yZXIuem9yYS5lbmVyZ3kvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE4OTEyMwogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQzMF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweERiOUY1MTc5MDM2NWU3ZGMxOTZlN0QwNzI3MjhkZjM5QmU5NThBQ2UiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMzAsCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3ppcmN1aXRUZXN0bmV0LmpzCiAgdmFyIHppcmN1aXRUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0ODg5OSwKICAgIG5hbWU6ICJaaXJjdWl0IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkVUSCIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3ppcmN1aXQxLnAycGlmeS5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJaaXJjdWl0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnppcmN1aXQuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDYwNDAyODcKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQHNjdXJlL2JpcDM5L2VzbS93b3JkbGlzdHMvY3plY2guanMKICB2YXIgd29yZGxpc3QgPSBgYWJkaWthY2UKYWJlY2VkYQphZHJlc2EKYWdyZXNlCmFrY2UKYWt0b3ZrYQphbGVqCmFsa29ob2wKYW1wdXRhY2UKYW5hbmFzCmFuZHVsa2EKYW5la2RvdGEKYW5rZXRhCmFudGlrYQphbnVsb3ZhdAphcmNoYQphcm9nYW5jZQphc2ZhbHQKYXNpc3RlbnQKYXNwaXJhY2UKYXN0bWEKYXN0cm9ub20KYXRsYXMKYXRsZXRpa2EKYXRvbAphdXRvYnVzCmF6eWwKYmFia2EKYmFjaG9yCmJhY2lsCmJhY3Vsa2EKYmFkYXRlbApiYWdldGEKYmFncgpiYWhubwpiYWt0ZXJpZQpiYWxhZGEKYmFsZXRrYQpiYWxrb24KYmFsb25lawpiYWx2YW4KYmFsemEKYmFtYnVzCmJhbmtvbWF0CmJhcmJhcgpiYXJldApiYXJtYW4KYmFyb2tvCmJhcnZhCmJhdGVya2EKYmF0b2gKYmF2bG5hCmJhemFsa2EKYmF6aWxpa2EKYmF6dWthCmJlZG5hCmJlcmFuCmJlc2VkYQpiZXN0aWUKYmV0b24KYmV6aW5rYQpiZXptb2MKYmV6dGFrCmJpY3lrbApiaWRsbwpiaWZ0ZWsKYmlraW55CmJpbGFuY2UKYmlvZ3JhZgpiaW9sb2cKYml0dmEKYml6b24KYmxhaG9ieXQKYmxhdG91Y2gKYmxlY2hhCmJsZWR1bGUKYmxlc2sKYmxpa2F0CmJsaXpuYQpibG9rb3ZhdApibG91ZGl0CmJsdWQKYm9iZWsKYm9icgpib2RsaW5hCmJvZG5vdXQKYm9oYXRvc3QKYm9qa290CmJvam92YXQKYm9rb3J5cwpib2xlc3QKYm9yZWMKYm9yb3ZpY2UKYm90YQpib3ViZWwKYm91Y2hhdApib3VkYQpib3VsZQpib3VyYXQKYm94ZXIKYnJhZGF2a2EKYnJhbWJvcmEKYnJhbmthCmJyYXRyCmJyZXB0YQpicmlrZXRhCmJya28KYnJsb2gKYnJvbnoKYnJvc2tldgpicnVuZXRrYQpicnVzaW5rYQpicnpkYQpicnp5CmJ1YmxpbmEKYnVibm92YXQKYnVjaHRhCmJ1ZGl0ZWwKYnVka2EKYnVkb3ZhCmJ1ZmV0CmJ1amFyb3N0CmJ1a3ZpY2UKYnVsZG9rCmJ1bHZhCmJ1bmRhCmJ1bmtyCmJ1cnphCmJ1dGlrCmJ1dm9sCmJ1em9sYQpieWRsZXQKYnlsaW5hCmJ5dG92a2EKYnp1a290CmNhcGFydApjYXJldm5hCmNlZHIKY2VkdWxlCmNlamNoCmNlam4KY2VsYQpjZWxlcgpjZWxrZW0KY2VsbmljZQpjZW5pbmEKY2Vubm9zdApjZW5vdmthCmNlbnRydW0KY2Vuem9yCmNlc3RvcGlzCmNldGthCmNoYWx1cGEKY2hhcGFkbG8KY2hhcml0YQpjaGF0YQpjaGVjaHRhdApjaGVtaWUKY2hpY2hvdApjaGlydXJnCmNobGFkCmNobGViYQpjaGx1Yml0CmNobWVsCmNobXVyYQpjaG9ib3QKY2hvY2hvbApjaG9kYmEKY2hvbGVyYQpjaG9tb3V0CmNob3BpdApjaG9yb2JhCmNob3YKY2hyYXBvdApjaHJsaXQKY2hydApjaHJ1cApjaHRpdm9zdApjaHVkaW5hCmNodXRuYXQKY2h2YXQKY2h2aWxrYQpjaHZvc3QKY2h5YmEKY2h5c3RhdApjaHl0aXQKY2lidWxlCmNpZ2FyZXRhCmNpaGVsbmEKY2lobGEKY2lua290CmNpcmt1cwpjaXN0ZXJuYQpjaXRhY2UKY2l0cnVzCmNpemluZWMKY2l6b3N0CmNsb25hCmNva29saXYKY291dmF0CmN0aXRlbApjdG5vc3QKY3Vkbm9zdApjdWtldGEKY3VrcgpjdXBvdApjdmFrbm91dApjdmFsCmN2aWsKY3Zya290CmN5a2xpc3RhCmRhbGVrbwpkYXJlYmEKZGF0ZWwKZGF0dW0KZGNlcmEKZGViYXRhCmRlY2hvdmthCmRlY2liZWwKZGVmaWNpdApkZWZsYWNlCmRla2wKZGVrcmV0CmRlbW9rcmF0CmRlcHJlc2UKZGVyYnkKZGVza2EKZGV0ZWt0aXYKZGlrb2JyYXoKZGlrdG92YXQKZGlvZGEKZGlwbG9tCmRpc2sKZGlzcGxlagpkaXZhZGxvCmRpdm9jaApkbGFoYQpkbG91aG8KZGx1aG9waXMKZG5lcwpkb2Jybwpkb2J5dGVrCmRvY2VudApkb2NodXRpdApkb2RuZXMKZG9obGVkCmRvaG9kYQpkb2hyYQpkb2plbQpkb2puaWNlCmRva2xhZApkb2tvbGEKZG9rdG9yCmRva3VtZW50CmRvbGFyCmRvbGV2YQpkb2xpbmEKZG9tYQpkb21pbmFudApkb21sdXZpdApkb21vdgpkb251dGl0CmRvcGFkCmRvcGlzCmRvcGxuaXQKZG9wb3N1ZApkb3Byb3ZvZApkb3B1c3RpdApkb3Jheml0CmRvcm9zdApkb3J0CmRvc2FoCmRvc2xvdgpkb3N0YXRlawpkb3N1ZApkb3N5dGEKZG90YXoKZG90ZWsKZG90a25vdXQKZG91ZmF0CmRvdXRuYXQKZG92b3pjZQpkb3phZHUKZG96bmF0CmRvem9yY2UKZHJhaG90YQpkcmFrCmRyYW1hdGlrCmRyYXZlYwpkcmF6ZQpkcmRvbApkcm9ibm9zdApkcm9nZXJpZQpkcm96ZApkcnNub3N0CmRydGl0CmRyem9zdApkdWJlbgpkdWNob3ZubwpkdWRlawpkdWhhCmR1aG92a2EKZHVzaXQKZHVzbm8KZHV0b3N0CmR2b2ppY2UKZHZvcmVjCmR5bmFtaXQKZWtvbG9nCmVrb25vbWllCmVsZWt0cm9uCmVsaXBzYQplbWFpbAplbWlzZQplbW9jZQplbXBhdGllCmVwaXpvZGEKZXBvY2hhCmVwb3BlagplcG9zCmVzZWoKZXNlbmNlCmVza29ydGEKZXNreW1vCmV0aWtldGEKZXVmb3JpZQpldm9sdWNlCmV4ZWt1Y2UKZXhrdXJ6ZQpleHBlZGljZQpleHBsb3plCmV4cG9ydApleHRyYWt0CmZhY2thCmZhamZrYQpmYWt1bHRhCmZhbmF0aWsKZmFudGF6aWUKZmFybWFjaWUKZmF2b3JpdApmYXpvbGUKZmVkZXJhY2UKZmVqZXRvbgpmZW5rYQpmaWFsa2EKZmlndXJhbnQKZmlsb3pvZgpmaWx0cgpmaW5hbmNlCmZpbnRhCmZpeGFjZQpmam9yZApmbGFuZWwKZmxpcnQKZmxvdGlsYQpmb25kCmZvc2Zvcgpmb3RiYWwKZm90a2EKZm90b24KZnJha2NlCmZyZXNrYQpmcm9udGEKZnVrYXIKZnVua2NlCmZ5emlrYQpnYWxlamUKZ2FyYW50CmdlbmV0aWthCmdlb2xvZwpnaWxvdGluYQpnbGF6dXJhCmdsZWp0CmdvbGVtCmdvbGZpc3RhCmdvdGlrYQpncmFmCmdyYW1vZm9uCmdyYW51bGUKZ3JlcApncmlsCmdyb2cKZ3JvdGVza2EKZ3VtYQpoYWRpY2UKaGFkcgpoYWxhCmhhbGVua2EKaGFuYmEKaGFub3BpcwpoYXJmYQpoYXJwdW5hCmhhdnJhbgpoZWJrb3N0CmhlamthbApoZWpubwpoZWp0bWFuCmhla3RhcgpoZWxtYQpoZW1hdG9tCmhlcmVjCmhlcm5hCmhlc2xvCmhlemt5Cmhpc3RvcmlrCmhsYWRvdmthCmhsYXNpdmt5CmhsYXZhCmhsZWRhdApobGVuCmhsb2RhdmVjCmhsb2gKaGxvdXBvc3QKaGx0YXQKaGx1YmluYQpobHVjaG90YQpobWF0Cmhtb3RhCmhteXoKaG5pcwpobm9qaXZvCmhub3V0CmhvYmxpbmEKaG9ib2oKaG9jaApob2RpbnkKaG9kbGF0CmhvZG5vdGEKaG9kb3ZhdApob2pub3N0Cmhva2VqCmhvbGlua2EKaG9sa2EKaG9sdWIKaG9tb2xlCmhvbml0YmEKaG9ub3JhY2UKaG9yYWwKaG9yZGEKaG9yaXpvbnQKaG9ya28KaG9ybGl2ZWMKaG9ybW9uCmhvcm5pbmEKaG9yb3Nrb3AKaG9yc3R2bwpob3Nwb2RhCmhvc3RpbmEKaG90b3Zvc3QKaG91YmEKaG91Zgpob3VwYXQKaG91c2thCmhvdm9yCmhyYWRiYQpocmFuaWNlCmhyYXZvc3QKaHJhemRhCmhyYm9sZWsKaHJkaW5hCmhyZGxvCmhyZG9zdApocm5lawpocm9ia2EKaHJvbWFkYQpocm90Cmhyb3VkYQpocm96ZW4KaHJzdGthCmhydWJvc3QKaHJ5emF0Cmh1YmVub3N0Cmh1Ym5vdXQKaHVkYmEKaHVrb3QKaHVtcgpodXNpdGEKaHVzdG90YQpodm96ZApoeWJub3N0Cmh5ZHJhbnQKaHlnaWVuYQpoeW1uYQpoeXN0ZXJpawppZHlsa2EKaWhuZWQKaWtvbmEKaWx1emUKaW11bml0YQppbmZla2NlCmluZmxhY2UKaW5rYXNvCmlub3ZhY2UKaW5zcGVrY2UKaW50ZXJuZXQKaW52YWxpZGEKaW52ZXN0b3IKaW56ZXJjZQppcm9uaWUKamFibGtvCmphY2h0YQpqYWhvZGEKamFrbWlsZQpqYWtvc3QKamFsb3ZlYwpqYW50YXIKamFybWFyawpqYXJvCmphc2FuCmphc25vCmphdGthCmphdm9yCmphenlrCmplZGluZWMKamVkbGUKamVkbmF0ZWwKamVobGFuCmpla290CmplbGVuCmplbGl0bwpqZW1ub3N0Cmplbm9tCmplcGljZQpqZXNldGVyCmpldml0CmplemRlYwpqZXplcm8KamluYWsKamluZHkKamlub2NoCmppc2tyYQpqaXN0b3RhCmppdHJuaWNlCmppenZhCmptZW5vdmF0CmpvZ3VydApqdXJ0YQprYWJhcmV0CmthYmVsCmthYmluZXQKa2FjaG5hCmthZGV0CmthZGlkbG8Ka2FoYW4Ka2FqYWsKa2FqdXRhCmtha2FvCmtha3R1cwprYWxhbWl0YQprYWxob3R5CmthbGlicgprYWxub3N0CmthbWVyYQprYW1rb2xpdgprYW1uYQprYW5pYmFsCmthbm9lCmthbnRvcgprYXBhbGluYQprYXBlbGEKa2FwaXRvbGEKa2Fwa2EKa2FwbGUKa2Fwb3RhCmthcHIKa2FwdXN0YQprYXB5YmFyYQprYXJhbWVsCmthcm90a2EKa2FydG9uCmthc2EKa2F0YWxvZwprYXRlZHJhCmthdWNlCmthdXphCmthdmFsZWMKa2F6YWprYQprYXpldGEKa2F6aXZvc3QKa2Rla29saXYKa2Rlc2kKa2VkbHViZW4Ka2VtcAprZXJhbWlrYQpraW5vCmtsYWNlawprbGFkaXZvCmtsYW0Ka2xhcG90CmtsYXNpa2EKa2xhdW4Ka2xlYwprbGVuYmEKa2xlcGF0CmtsZXNub3V0CmtsaWQKa2xpbWEKa2xpc25hCmtsb2JvdWsKa2xva2FuCmtsb3BhCmtsb3ViCmtsdWJvdm5hCmtsdXNhdAprbHV6a29zdAprbWVuCmttaXRhdAprbW90cgprbmloYQprbm90CmtvYWxpY2UKa29iZXJlYwprb2JrYQprb2JsaWhhCmtvYnlsYQprb2NvdXIKa29ob3V0CmtvamVuZWMKa29rb3MKa29rdGVqbAprb2xhcHMKa29sZWRhCmtvbGl6ZQprb2xvCmtvbWFuZG8Ka29tZXRhCmtvbWlrCmtvbW5hdGEKa29tb3JhCmtvbXBhcwprb211bml0YQprb25hdAprb25jZXB0CmtvbmRpY2UKa29uZWMKa29uZmVzZQprb25ncmVzCmtvbmluYQprb25rdXJzCmtvbnRha3QKa29uemVydmEKa29wYW5lYwprb3BpZQprb3Bub3V0CmtvcHJvdmthCmtvcmJlbAprb3Jla3Rvcgprb3JtaWRsbwprb3JvcHRldgprb3JwdXMKa29ydW5hCmtvcnl0bwprb3J6ZXQKa29zYXRlYwprb3N0a2EKa290ZWwKa290bGV0YQprb3RvdWwKa291a2F0CmtvdXBlbG5hCmtvdXNlawprb3V6bG8Ka292Ym9qCmtvemEKa296b3JvaAprcmFiaWNlCmtyYWNoCmtyYWppbmEKa3JhbG92YXQKa3Jhc29waXMKa3JhdmF0YQprcmVkaXQKa3JlamNhcgprcmVzYmEKa3JldmV0YQprcmlrZXQKa3JpdGlrCmtyaXplCmtya2F2ZWMKa3JtZWxlYwprcm1pdm8Ka3JvY2FuCmtyb2sKa3JvbmlrYQprcm9waXQKa3JvdXBhCmtyb3ZrYQprcnRlawprcnVoYWRsbwprcnVwaWNlCmtydXRvc3QKa3J2aW5rYQprcnljaGxlCmtyeXB0YQprcnlzdGFsCmtyeXQKa3VkbGFua2EKa3VmcgprdWpub3N0Cmt1a2xhCmt1bGFqZGEKa3VsaWNoCmt1bGthCmt1bG9tZXQKa3VsdHVyYQprdW5hCmt1cG9kaXZ1Cmt1cnQKa3Vyem9yCmt1dGlsCmt2YWxpdGEKa3Zhc2lua2EKa3Zlc3RvcgpreW5vbG9nCmt5c2VsaW5hCmt5dGFyYQpreXRpY2UKa3l0a2EKa3l0b3ZlYwpreXZhZGxvCmxhYnJhZG9yCmxhY2h0YW4KbGFkbm9zdApsYWlrCmxha29tZWMKbGFtZWxhCmxhbXBhCmxhbm92a2EKbGFzaWNlCmxhc28KbGFzdHVyYQpsYXRpbmthCmxhdmluYQpsZWJrYQpsZWNrZHkKbGVkZW4KbGVkbmljZQpsZWRvdmthCmxlZHZpbmEKbGVnZW5kYQpsZWdpZQpsZWdyYWNlCmxlaGNlCmxlaGtvc3QKbGVobm91dApsZWt0dmFyCmxlbm9jaG9kCmxlbnRpbGthCmxlcGVua2EKbGVwaWRsbwpsZXRhZGxvCmxldGVjCmxldG1vCmxldG9rcnVoCmxldmhhcnQKbGV2aXRhY2UKbGV2b2JvawpsaWJyYQpsaWNob3RrYQpsaWRvamVkCmxpZHNrb3N0CmxpaG92aW5hCmxpamF2ZWMKbGlsZWsKbGltZXRrYQpsaW5pZQpsaW5rYQpsaW5vbGV1bQpsaXN0b3BhZApsaXRpbmEKbGl0b3ZhdApsb2Jpc3RhCmxvZGl2b2QKbG9naWthCmxvZ29wZWQKbG9rYWxpdGEKbG9rZXQKbG9tY292YXQKbG9wYXRhCmxvcHVjaApsb3JkCmxvc29zCmxvdHIKbG91ZGFsCmxvdWgKbG91a2EKbG91c2thdApsb3ZlYwpsc3Rpdm9zdApsdWNlcm5hCmx1Y2lmZXIKbHVtcApsdXNrCmx1c3RyYWNlCmx2aWNlCmx5cmEKbHlyaWthCmx5c2luYQptYWRhbQptYWRsbwptYWdpc3RyCm1haGFnb24KbWFqZXRlawptYWppdGVsCm1ham9yaXRhCm1ha2FrCm1ha292aWNlCm1ha3JlbGEKbWFsYmEKbWFsaW5hCm1hbG92YXQKbWFsdmljZQptYW1pbmthCm1hbmRsZQptYW5rbwptYXJub3N0Cm1hc2FrcgptYXNrb3QKbWFzb3B1c3QKbWF0aWNlCm1hdHJpa2EKbWF0dXJpdGEKbWF6YW5lYwptYXppdm8KbWF6bGl0Cm1henVya2EKbWRsb2JhCm1lY2hhbmlrCm1lZGl0YWNlCm1lZG92aW5hCm1lbGFzYQptZWxvdW4KbWVudG9sa2EKbWV0bGEKbWV0b2RhCm1ldHIKbWV6ZXJhCm1pZ3JhY2UKbWlobm91dAptaWh1bGUKbWlraW5hCm1pa3JvZm9uCm1pbGVuZWMKbWlsaW1ldHIKbWlsb3N0Cm1pbWlrYQptaW5jb3ZuYQptaW5pYmFyCm1pbm9tZXQKbWludWxvc3QKbWlza2EKbWlzdHIKbWl4b3ZhdAptbGFkb3N0Cm1saGEKbWxob3ZpbmEKbWxvawptbHNhdAptbHV2aXQKbW5pY2gKbW5vaGVtCm1vYmlsCm1vY25vc3QKbW9kZWxrYQptb2RsaXRiYQptb2h5bGEKbW9rcm8KbW9sZWt1bGEKbW9tZW50a2EKbW9uYXJjaGEKbW9ub2tsCm1vbnN0cnVtCm1vbnRvdmF0Cm1vbnp1bgptb3Nhegptb3NreXQKbW9zdAptb3RpdmFjZQptb3RvcmthCm1vdHlrYQptb3VjaGEKbW91ZHJvc3QKbW96YWlrYQptb3plawptb3pvbAptcmFtb3IKbXJhdmVuZWMKbXJrZXYKbXJ0dm9sYQptcnpldAptcnp1dG9zdAptc3RpdGVsCm11ZHJjCm11ZmxvbgptdWxhdAptdW1pZQptdW5pY2UKbXVzZXQKbXV0YWNlCm11emV1bQptdXppa2FudApteXNsaXZlYwptemRhCm5hYm91cmF0Cm5hY2h5dGF0Cm5hZGFjZQpuYWRieXRlawpuYWRob3oKbmFkb2JybwpuYWRwaXMKbmFobGFzCm5haG5hdApuYWhvZGlsZQpuYWhyYWRpdApuYWl2aXRhCm5hamVkbm91Cm5hamlzdG8KbmFqbW91dApuYWtsb25pdApuYWtvbmVjCm5ha3JtaXQKbmFsZXZvCm5hbWF6YXQKbmFtbHV2aXQKbmFub21ldHIKbmFva28KbmFvcGFrCm5hb3N0cm8KbmFwYWRhdApuYXBldm5vCm5hcGxuaXQKbmFwbm91dApuYXBvc2xlZApuYXByb3N0bwpuYXJvZGl0Cm5hcnVieQpuYXJ5Y2hsbwpuYXNhZGl0Cm5hc2VrYXQKbmFzbGVwbwpuYXN0YXQKbmF0b2xpawpuYXZlbmVrCm5hdnJjaApuYXZ6ZG9yeQpuYXp2YXQKbmViZQpuZWNoYXQKbmVja3kKbmVkYWxla28KbmVkYmF0Cm5lZHVoCm5lZ2FjZQpuZWhldApuZWhvZGEKbmVqZW4KbmVqcHJ2ZQpuZWtsaWQKbmVsaWJvc3QKbmVtaWxvc3QKbmVtb2MKbmVvY2hvdGEKbmVvbmthCm5lcG9rb2oKbmVyb3N0Cm5lcnYKbmVzbXlzbApuZXNvdWxhZApuZXR2b3IKbmV1cm9uCm5ldmluYQpuZXp2eWtsZQpuaWNvdGEKbmlqYWsKbmlrYW0KbmlrZHkKbmlrbApuaWt0ZXJhawpuaXRybwpub2NsZWgKbm9oYXZpY2UKbm9taW5hY2UKbm9yYQpub3Jlawpub3NpdGVsCm5vc25vc3QKbm91emUKbm92aW55Cm5vdm90YQpub3pkcmEKbnVkYQpudWRsZQpudWdldApudXRpdApudXRub3N0Cm51dHJpZQpueW1mYQpvYmFsCm9iYXJ2aXQKb2JhdmEKb2JkaXYKb2JlYwpvYmVobmF0Cm9iZWptb3V0Cm9iZXppdGEKb2JoYWpvYmEKb2JpbG5pY2UKb2JqYXNuaXQKb2JqZWt0Cm9ia2xvcGl0Cm9ibGFzdApvYmxlawpvYmxpYmEKb2Jsb2hhCm9ibHVkYQpvYm5vcwpvYm9oYXRpdApvYm9qZWsKb2JvdXQKb2JyYXplYwpvYnJuYQpvYnJ1YmEKb2JyeXMKb2JzYWgKb2JzbHVoYQpvYnN0YXJhdApvYnV2Cm9idmF6Cm9idmluaXQKb2J2b2QKb2J2eWtsZQpvYnl2YXRlbApvYnpvcgpvY2FzCm9jZWwKb2Nlbml0Cm9jaGxhZGl0Cm9jaG90YQpvY2hyYW5hCm9jaXRub3V0Cm9kYm9qCm9kYnl0Cm9kY2hvZApvZGNpeml0Cm9kZWJyYXQKb2Rlc2xhdApvZGV2emRhdApvZGV6dmEKb2RoYWRjZQpvZGhvZGl0Cm9kamV0Cm9kamludWQKb2RrYXoKb2Rrb3VwaXQKb2RsaXYKb2RsdWthCm9kbWxrYQpvZG9sbm9zdApvZHBhZApvZHBpcwpvZHBsb3V0Cm9kcG9yCm9kcHVzdGl0Cm9kcHlrYXQKb2RyYXprYQpvZHNvdWRpdApvZHN0dXAKb2RzdW4Kb2R0b2sKb2R0dWQKb2R2YWhhCm9kdmV0YQpvZHZvbGF0Cm9kdnJhY2V0Cm9kem5hawpvZmluYQpvZnNhamQKb2hsYXMKb2huaXNrbwpvaHJhZGEKb2hyb3ppdApvaHJ5emVrCm9rYXAKb2tlbmljZQpva2xpa2EKb2tubwpva291emxpdApva292eQpva3Jhc2EKb2tyZXMKb2tyc2VrCm9rcnVoCm9rdXBhbnQKb2t1cmthCm9rdXNpdApvbGVqbmluYQpvbGl6b3ZhdApvbWFrCm9tZWxldGEKb21leml0Cm9tbGFkaW5hCm9tbG91dmF0Cm9tbHV2YQpvbXlsCm9uZWhkeQpvcGFrb3ZhdApvcGFzZWsKb3BlcmFjZQpvcGljZQpvcGlsb3N0Cm9waXNvdmF0Cm9wb3JhCm9wb3ppY2UKb3ByYXZkdQpvcHJvdGkKb3JiaXRhbApvcmNoZXN0cgpvcmdpZQpvcmxpY2UKb3Jsb2oKb3J0ZWwKb3NhZGEKb3NjaG5vdXQKb3Npa2EKb3Npdm8Kb3NsYXZhCm9zbGVwaXQKb3Nsbml0Cm9zbG92aXQKb3Nub3ZhCm9zb2JhCm9zb2xpdApvc3BhbGVjCm9zdGVuCm9zdHJhaGEKb3N0dWRhCm9zdHljaApvc3Zvaml0Cm90ZXBsaXQKb3Rpc2sKb3RvcApvdHJoYXQKb3RybG9zdApvdHJvawpvdHJ1YnkKb3R2b3IKb3Zhbm91dApvdmFyCm92ZXMKb3ZsaXZuaXQKb3ZvY2UKb3hpZApvemRvYmEKcGFjaGF0ZWwKcGFjaWVudApwYWRvdWNoCnBhaG9yZWsKcGFrdApwYWxhbmRhCnBhbGVjCnBhbGl2bwpwYWx1YmEKcGFtZmxldApwYW1sc2VrCnBhbmVua2EKcGFuaWthCnBhbm5hCnBhbm92YXQKcGFuc3R2bwpwYW50b2ZsZQpwYXByaWthCnBhcmtldGEKcGFyb2RpZQpwYXJ0YQpwYXJ1a2EKcGFyeWJhCnBhc2VrYQpwYXNpdml0YQpwYXN0ZWxrYQpwYXRlbnQKcGF0cm9uYQpwYXZvdWsKcGF6bmVodApwYXpvdXJlawpwZWNrYQpwZWRhZ29nCnBlanNlawpwZWtsbwpwZWxvdG9uCnBlbmFsdGEKcGVuZHJlawpwZW56ZQpwZXJpc2tvcApwZXJvCnBlc3Ryb3N0CnBldGFyZGEKcGV0aWNlCnBldHJvbGVqCnBldm5pbmEKcGV4ZXNvCnBpYW5pc3RhCnBpaGEKcGlqYXZpY2UKcGlrbGUKcGlrbmlrCnBpbGluYQpwaWxub3N0CnBpbHVsa2EKcGluemV0YQpwaXBldGEKcGlzYXRlbApwaXN0b2xlCnBpdGV2bmEKcGl2bmljZQpwaXZvdmFyCnBsYWNlbnRhCnBsYWthdApwbGFtZW4KcGxhbmV0YQpwbGFzdGlrYQpwbGF0aXQKcGxhdmlkbG8KcGxhegpwbGVjaApwbGVtZW5vCnBsZW50YQpwbGVzCnBsZXRpdm8KcGxldmVsCnBsaXZhdApwbG5pdApwbG5vCnBsb2NoYQpwbG9kaW5hCnBsb21iYQpwbG91dApwbHVrCnBseW4KcG9iYXZpdApwb2J5dApwb2Nob2QKcG9jaXQKcG9jdGl2ZWMKcG9kYXQKcG9kY2VuaXQKcG9kZXBzYXQKcG9kaGxlZApwb2Rpdml0CnBvZGtsYWQKcG9kbWFuaXQKcG9kbmlrCnBvZG9iYQpwb2Rwb3JhCnBvZHJhegpwb2RzdGF0YQpwb2R2b2QKcG9kemltCnBvZXppZQpwb2hhbmthCnBvaG51dGthCnBvaG92b3IKcG9ocm9tYQpwb2h5Ygpwb2ludGEKcG9qaXN0a2EKcG9qbW91dApwb2theml0CnBva2xlcwpwb2tvagpwb2tyb2sKcG9rdXRhCnBva3luCnBvbGVkbmUKcG9saWJlawpwb2xrbm91dApwb2xvaGEKcG9seW5vbQpwb21hbHUKcG9taW5vdXQKcG9tbGthCnBvbW9jCnBvbXN0YQpwb215c2xldApwb25lY2hhdApwb25vcmthCnBvbnVyb3N0CnBvcGFkYXQKcG9wZWwKcG9waXNlawpwb3BsYWNoCnBvcHJvc2l0CnBvcHNhdApwb3B1ZApwb3JhZGNlCnBvcmNlCnBvcm9kCnBvcnVjaGEKcG9yeXYKcG9zYWRpdApwb3NlZApwb3NpbGEKcG9za29rCnBvc2xhbmVjCnBvc291ZGl0CnBvc3BvbHUKcG9zdGF2YQpwb3N1ZGVrCnBvc3lwCnBvdGFoCnBvdGthbgpwb3RsZXNrCnBvdG9tZWsKcG90cmF2YQpwb3R1cGEKcG90dm9yYQpwb3VrYXoKcG91dG8KcG91emRybwpwb3ZhaGEKcG92aWRsYQpwb3ZsYWsKcG92b3oKcG92cmNoCnBvdnN0YXQKcG92eWsKcG92emRlY2gKcG96ZHJhdgpwb3plbWVrCnBvem5hdGVrCnBvem9yCnBvenZhdApwcmFjb3ZhdApwcmFob3J5CnByYWt0aWthCnByYWxlcwpwcmFvdGVjCnByYXBvcmVrCnByYXNlCnByYXZkYQpwcmluY2lwCnBya25vCnByb2J1ZGl0CnByb2NlbnRvCnByb2Rlagpwcm9mZXNlCnByb2hyYQpwcm9qZWt0CnByb2xvbWl0CnByb21pbGUKcHJvbmlrYXQKcHJvcGFkCnByb3Jvawpwcm9zYmEKcHJvdG9uCnByb3V0ZWsKcHJvdmF6CnByc2thdmthCnByc3RlbgpwcnVka29zdApwcnV0CnBydmVrCnBydm9ob3J5CnBzYW5lYwpwc292b2QKcHN0cnVoCnB0YWN0dm8KcHViZXJ0YQpwdWNoCnB1ZGwKcHVrYXZlYwpwdWtsaW5hCnB1a3JsZQpwdWx0CnB1bXBhCnB1bmMKcHVwZW4KcHVzYQpwdXNpbmthCnB1c3RpbmEKcHV0b3ZhdApwdXR5a2EKcHlyYW1pZGEKcHlzawpweXRlbApyYWNlawpyYWNob3QKcmFkaWFjZQpyYWRuaWNlCnJhZG9uCnJhZnQKcmFnYnkKcmFrZXRhCnJha292aW5hCnJhbWVubwpyYW1wb3VjaApyYW5kZQpyYXJhY2gKcmFyaXRhCnJhc292bmEKcmFzdHIKcmF0b2xlc3QKcmF6YW5jZQpyYXppZGxvCnJlYWdvdmF0CnJlYWtjZQpyZWNlcHQKcmVkYWt0b3IKcmVmZXJlbnQKcmVmbGV4CnJlam5vawpyZWtsYW1hCnJla29yZApyZWtydXQKcmVrdG9yCnJlcHV0YWNlCnJldml6ZQpyZXZtYQpyZXZvbHZlcgpyZXplcnZhCnJpc2tvdmF0CnJpemlrbwpyb2JvdGlrYQpyb2Rva21lbgpyb2hvdmthCnJva2xlCnJva29rbwpyb21hbmV0bwpyb3Bvdm9kCnJvcHVjaGEKcm9yZWpzCnJvc29sCnJvc3RsaW5hCnJvdG1pc3RyCnJvdG9wZWQKcm90dW5kYQpyb3ViZW5rYQpyb3VjaG8Kcm91cApyb3VyYQpyb3ZpbmEKcm92bmljZQpyb3pib3IKcm96Y2hvZApyb3pkYXQKcm96ZXpuYXQKcm96aG9kY2UKcm96aW5rYQpyb3pqZXpkCnJvemthegpyb3psb2hhCnJvem1hcgpyb3pwYWQKcm96cnVjaApyb3pzYWgKcm96dG9rCnJvenVtCnJvenZvZApydWJyaWthCnJ1Y2hhZGxvCnJ1a2F2aWNlCnJ1a29waXMKcnliYQpyeWJvbG92CnJ5Y2hsb3N0CnJ5ZGxvCnJ5cGFkbG8Kcnl0aW5hCnJ5em9zdApzYWRpc3RhCnNhaGF0CnNha28Kc2FtZWMKc2FtaXpkYXQKc2Ftb3RhCnNhbml0a2EKc2FyZGlua2EKc2FzYW5rYQpzYXRlbGl0CnNhemJhCnNhemVuaWNlCnNib3IKc2Nob3ZhdApzZWJyYW5rYQpzZWNlc2UKc2VkYWRsbwpzZWRpbWVudApzZWRsbwpzZWhuYXQKc2VqbW91dApzZWtlcmEKc2VrdGEKc2VrdW5kYQpzZWt2b2plCnNlbWVubwpzZW5vCnNlcnZpcwpzZXNhZGl0CnNlc2hvcmEKc2Vza29rCnNlc2xhdApzZXN0cmEKc2VzdXYKc2VzeXBhdApzZXRiYQpzZXRpbmEKc2V0a2F0CnNldG5vdXQKc2V0cnZhdApzZXZlcgpzZXpuYW0Kc2hvZGEKc2hybm91dApzaWZvbgpzaWxuaWNlCnNpcmthCnNpcm90ZWsKc2lydXAKc2l0dWFjZQpza2FmYW5kcgpza2FsaXNrbwpza2FuemVuCnNrYXV0CnNrZXB0aWsKc2tpY2EKc2tsYWRiYQpza2xlbmljZQpza2xvCnNrbHV6CnNrb2JhCnNrb2thbgpza29ybwpza3JpcHRhCnNrcnoKc2t1cGluYQpza3Zvc3QKc2t2cm5hCnNsYWJpa2EKc2xhZGlkbG8Kc2xhbmluYQpzbGFzdApzbGF2bm9zdApzbGVkb3ZhdApzbGVwZWMKc2xldmEKc2xlemluYQpzbGliCnNsaW5hCnNsaXpuaWNlCnNsb24Kc2xvdXBlawpzbG92bwpzbHVjaApzbHVoYQpzbHVuY2UKc2x1cGthCnNsemEKc21hcmFnZApzbWV0YW5hCnNtaWxzdHZvCnNtbG91dmEKc21vZwpzbXJhZApzbXJrCnNtcnRrYQpzbXV0ZWsKc215c2wKc25hZApzbmFoYQpzbm9iCnNvYm90YQpzb2NoYQpzb2RvdmthCnNva29sCnNvcGthCnNvdHZhCnNvdWJvagpzb3VjaXQKc291ZGNlCnNvdWhsYXMKc291bGFkCnNvdW1yYWsKc291cHJhdmEKc291c2VkCnNvdXRvawpzb3V2aXNldApzcGFsb3ZuYQpzcGFzaXRlbApzcGlzCnNwbGF2CnNwb2RlawpzcG9qZW5lYwpzcG9sdQpzcG9uem9yCnNwb3Jub3N0CnNwb3VzdGEKc3ByY2hhCnNwdXN0aXQKc3JhbmRhCnNyYXoKc3JkY2UKc3JuYQpzcm5lYwpzcm92bmF0CnNycGVuCnNyc3QKc3J1YgpzdGFuaWNlCnN0YXJvc3RhCnN0YXRpa2EKc3RhdmJhCnN0ZWhubwpzdGV6a2EKc3RvZG9sYQpzdG9sZWsKc3RvcGEKc3Rvcm5vCnN0b3VwYXQKc3RyYWNoCnN0cmVzCnN0cmhub3V0CnN0cm9tCnN0cnVuYQpzdHVkbmEKc3R1cG5pY2UKc3R2b2wKc3R5awpzdWJqZWt0CnN1YnRyb3B5CnN1Y2hhcgpzdWRvc3QKc3Vrbm8Kc3VuZGF0CnN1bm91dApzdXJpa2F0YQpzdXJvdmluYQpzdmFoCnN2YWxzdHZvCnN2ZXRyCnN2YXRiYQpzdmF6ZWsKc3Zpc2xlCnN2aXRlawpzdm9ib2RhCnN2b2RpZGxvCnN2b3JrYQpzdnJhYgpzeWthdmthCnN5a290CnN5bmVrCnN5bm92ZWMKc3lwYXQKc3lwa29zdApzeXJvdm9zdApzeXNlbApzeXRvc3QKdGFibGV0a2EKdGFidWxlCnRhaG91bgp0YWplbW5vCnRhamZ1bgp0YWpnYQp0YWppdAp0YWpub3N0CnRha3Rpa2EKdGFtaGxlCnRhbXBvbgp0YW5jb3ZhdAp0YW5lYwp0YW5rZXIKdGFwZXRhCnRhdmVuaW5hCnRhemF0ZWwKdGVjaG5pa2EKdGVoZHkKdGVrdXRpbmEKdGVsZWZvbgp0ZW1ub3RhCnRlbmRlbmNlCnRlbmlzdGEKdGVub3IKdGVwbG90YQp0ZXBuYQp0ZXBydmUKdGVyYXBpZQp0ZXJtb3NrYQp0ZXh0aWwKdGljaG8KdGlza29waXMKdGl0dWxlawp0a2FkbGVjCnRrYW5pbmEKdGxhcGthCnRsZXNrYXQKdGx1a290CnRsdXBhCnRtZWwKdG9hbGV0YQp0b3BpbmthCnRvcG9sCnRvcnpvCnRvdWhhCnRvdWxlYwp0cmFkaWNlCnRyYWt0b3IKdHJhbXAKdHJhc2EKdHJhdmVyemEKdHJlZml0CnRyZXN0CnRyZXpvcgp0cmhhdmluYQp0cmhsaW5hCnRyb2NodQp0cm9qaWNlCnRyb3NrYQp0cm91YmEKdHJwY2UKdHJwaXRlbAp0cnBrb3N0CnRydWJlYwp0cnVjaGxpdAp0cnVobGljZQp0cnVzCnRydmF0CnR1ZHkKdHVobm91dAp0dWhvc3QKdHVuZHJhCnR1cmlzdGEKdHVybmFqCnR1emVtc2tvCnR2YXJvaAp0dm9yYmEKdHZyZG9zdAp0dnJ6CnR5Z3IKdHlrZXYKdWJvaG9zdAp1Ym96ZQp1YnJhdAp1YnJvdXNlawp1YnJ1cwp1Ynl0b3ZuYQp1Y2hvCnVjdGl2b3N0CnVkaXZpdAp1aHJhZGl0CnVqZWRuYXQKdWppc3RpdAp1am1vdXQKdWthemF0ZWwKdWtsaWRuaXQKdWtsb25pdAp1a290dml0CnVrcm9qaXQKdWxpY2UKdWxpdGEKdWxvdml0CnVteXZhZGxvCnVuYXZpdAp1bmlmb3JtYQp1bmlrbm91dAp1cGFkbm91dAp1cGxhdG5pdAp1cGx5bm91dAp1cG91dGF0CnVwcmF2aXQKdXJhbgp1cmF6aXQKdXNlZG5vdXQKdXNpbG92YXQKdXNtcnRpdAp1c25hZG5pdAp1c25vdXQKdXNvdWRpdAp1c3RsYXQKdXN0cm5vdXQKdXRhaG92YXQKdXRrYXQKdXRsdW1pdAp1dG9ub3V0CnV0b3BlbmVjCnV0cm91c2l0CnV2YWxpdAp1dm9sbml0CnV2b3pvdmthCnV6ZHJhdml0CnV6ZWwKdXplbmluYQp1emxpbmEKdXpuYXQKdmFnb24KdmFsY2hhCnZhbG91bgp2YW5hCnZhbmRhbAp2YW5pbGthCnZhcmFuCnZhcmhhbnkKdmFyb3ZhdAp2Y2Vsa3UKdmNob2QKdmRvdmEKdmVkcm8KdmVnZXRhY2UKdmVqY2UKdmVsYmxvdWQKdmVsZXRyaAp2ZWxpdGVsCnZlbG1vYwp2ZWxyeWJhCnZlbmtvdgp2ZXJhbmRhCnZlcnplCnZlc2Vsa2EKdmVza3J6ZQp2ZXNuaWNlCnZlc3BvZHUKdmVzdGEKdmV0ZXJpbmEKdmV2ZXJrYQp2aWJyYWNlCnZpY2hyCnZpZGVvaHJhCnZpZGluYQp2aWRsZQp2aWxhCnZpbmljZQp2aXNldAp2aXRhbGl0YQp2aXplCnZpeml0a2EKdmplemQKdmtsYWQKdmt1cwp2bGFqa2EKdmxhawp2bGFzZWMKdmxldm8Kdmxoa29zdAp2bGl2CnZsbm92a2EKdmxvdXBhdAp2bnVjb3ZhdAp2bnVrCnZvZGEKdm9kaXZvc3QKdm9kb3puYWsKdm9kc3R2bwp2b2plbnNreQp2b2puYQp2b2pza28Kdm9sYW50CnZvbGJhCnZvbGl0CnZvbG5vCnZvc2tvdmthCnZvemlkbG8Kdm96b3ZuYQp2cHJhdm8KdnJhYmVjCnZyYWNldAp2cmFoCnZyYXRhCnZyYmEKdnJjaG9sZWsKdnJoYXQKdnJzdHZhCnZydHVsZQp2c2FkaXQKdnN0b3VwaXQKdnN0dXAKdnRpcAp2eWJhdml0CnZ5YnJhdAp2eWNob3ZhdAp2eWRhdAp2eWRyYQp2eWZvdGl0CnZ5aGxlZGF0CnZ5aG5vdXQKdnlob2RpdAp2eWhyYWRpdAp2eWh1Yml0CnZ5amFzbml0CnZ5amV0CnZ5am1vdXQKdnlrbG9waXQKdnlrb25hdAp2eWxla2F0CnZ5bWF6YXQKdnltZXppdAp2eW1pemV0CnZ5bXlzbGV0CnZ5bmVjaGF0CnZ5bmlrYXQKdnludXRpdAp2eXBhZGF0CnZ5cGxhdGl0CnZ5cHJhdml0CnZ5cHVzdGl0CnZ5cmF6aXQKdnlyb3ZuYXQKdnlydmF0CnZ5c2xvdml0CnZ5c29rbwp2eXN0YXZpdAp2eXN1bm91dAp2eXN5cGF0CnZ5dGFzaXQKdnl0ZXNhdAp2eXRyYXRpdAp2eXZpbm91dAp2eXZvbGF0CnZ5dnJoZWwKdnl6ZG9iaXQKdnl6bmF0CnZ6YWR1CnZ6YnVkaXQKdnpjaG9waXQKdnpkb3IKdnpkdWNoCnZ6ZHljaGF0CnZ6ZXN0dXAKdnpobGVkZW0KdnprYXoKdnpseWthdAp2em5pawp2em9yZWsKdnpwb3VyYQp2enRhaAp2enRlawp4eWxvZm9uCnphYnJhdAp6YWJ5ZGxldAp6YWNob3ZhdAp6YWRhcm1vCnphZHVzaXQKemFmb3VrYXQKemFobHRpdAp6YWhvZGl0CnphaHJhZGEKemFoeW5vdXQKemFqYXRlYwp6YWpldAp6YWppc3RpdAp6YWtsZXBhdAp6YWtvdXBpdAp6YWxlcGl0CnphbWV6aXQKemFtb3RhdAp6YW15c2xldAp6YW5lY2hhdAp6YW5pa2F0CnphcGxhdGl0CnphcG9qaXQKemFwc2F0CnphcmF6aXQKemFzdGF2aXQKemFzdW5vdXQKemF0YWppdAp6YXRlbW5pdAp6YXRrbm91dAp6YXVqbW91dAp6YXZhbGl0CnphdmVsZXQKemF2aW5pdAp6YXZvbGF0CnphdnJ0YXQKemF6dm9uaXQKemJhdml0CnpicnVzdQp6YnVkb3ZhdAp6Ynl0ZWsKemRhbGVrYQp6ZGFybWEKemRhdG5vc3QKemRpdm8KemRvYml0Cnpkcm9qCnpkdmloCnpkeW1hZGxvCnplbGVuaW5hCnplbWFuCnplbWluYQp6ZXB0YXQKemV6YWR1CnplemRvbGEKemhhdGl0CnpobHRub3V0CnpobHVib2thCnpob3Rvdml0CnpocnViYQp6aW1hCnppbW5pY2UKemplbW5pdAp6a2xhbWF0Cnprb3VtYXQKemtyYXRrYQp6a3VtYXZrYQp6bGF0bwp6bGVoa2EKemxvYmEKemxvbQp6bG9zdAp6bG96dnlrCnptYXBvdmF0CnptYXIKem1hdGVrCnptaWplCnptaXpldAp6bW9jbml0Cnptb2RyYXQKem1yemxpbmEKem11dG92YXQKem5hawp6bmFsb3N0CnpuYW1lbmF0Cnpub3Z1CnpvYnJheml0CnpvdGF2aXQKem91YmVrCnpvdWZhbGUKenBsb2RpdAp6cG9tYWxpdAp6cHJhdmEKenByb3N0aXQKenBydWRrYQp6cHJ2dQp6cmFkYQp6cmFuaXQKenJjYWRsbwp6cm5pdG9zdAp6cm5vCnpyb3ZuYQp6cnljaGxpdAp6cnphdm9zdAp6dGljaGEKenRyYXRpdAp6dWJvdmluYQp6dWJyCnp2ZWRub3V0Cnp2ZW5rdQp6dmVzZWxhCnp2b24KenZyYXQKenZ1a292b2QKenZ5a2Auc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy9lbmdsaXNoLmpzCiAgdmFyIHdvcmRsaXN0MiA9IGBhYmFuZG9uCmFiaWxpdHkKYWJsZQphYm91dAphYm92ZQphYnNlbnQKYWJzb3JiCmFic3RyYWN0CmFic3VyZAphYnVzZQphY2Nlc3MKYWNjaWRlbnQKYWNjb3VudAphY2N1c2UKYWNoaWV2ZQphY2lkCmFjb3VzdGljCmFjcXVpcmUKYWNyb3NzCmFjdAphY3Rpb24KYWN0b3IKYWN0cmVzcwphY3R1YWwKYWRhcHQKYWRkCmFkZGljdAphZGRyZXNzCmFkanVzdAphZG1pdAphZHVsdAphZHZhbmNlCmFkdmljZQphZXJvYmljCmFmZmFpcgphZmZvcmQKYWZyYWlkCmFnYWluCmFnZQphZ2VudAphZ3JlZQphaGVhZAphaW0KYWlyCmFpcnBvcnQKYWlzbGUKYWxhcm0KYWxidW0KYWxjb2hvbAphbGVydAphbGllbgphbGwKYWxsZXkKYWxsb3cKYWxtb3N0CmFsb25lCmFscGhhCmFscmVhZHkKYWxzbwphbHRlcgphbHdheXMKYW1hdGV1cgphbWF6aW5nCmFtb25nCmFtb3VudAphbXVzZWQKYW5hbHlzdAphbmNob3IKYW5jaWVudAphbmdlcgphbmdsZQphbmdyeQphbmltYWwKYW5rbGUKYW5ub3VuY2UKYW5udWFsCmFub3RoZXIKYW5zd2VyCmFudGVubmEKYW50aXF1ZQphbnhpZXR5CmFueQphcGFydAphcG9sb2d5CmFwcGVhcgphcHBsZQphcHByb3ZlCmFwcmlsCmFyY2gKYXJjdGljCmFyZWEKYXJlbmEKYXJndWUKYXJtCmFybWVkCmFybW9yCmFybXkKYXJvdW5kCmFycmFuZ2UKYXJyZXN0CmFycml2ZQphcnJvdwphcnQKYXJ0ZWZhY3QKYXJ0aXN0CmFydHdvcmsKYXNrCmFzcGVjdAphc3NhdWx0CmFzc2V0CmFzc2lzdAphc3N1bWUKYXN0aG1hCmF0aGxldGUKYXRvbQphdHRhY2sKYXR0ZW5kCmF0dGl0dWRlCmF0dHJhY3QKYXVjdGlvbgphdWRpdAphdWd1c3QKYXVudAphdXRob3IKYXV0bwphdXR1bW4KYXZlcmFnZQphdm9jYWRvCmF2b2lkCmF3YWtlCmF3YXJlCmF3YXkKYXdlc29tZQphd2Z1bAphd2t3YXJkCmF4aXMKYmFieQpiYWNoZWxvcgpiYWNvbgpiYWRnZQpiYWcKYmFsYW5jZQpiYWxjb255CmJhbGwKYmFtYm9vCmJhbmFuYQpiYW5uZXIKYmFyCmJhcmVseQpiYXJnYWluCmJhcnJlbApiYXNlCmJhc2ljCmJhc2tldApiYXR0bGUKYmVhY2gKYmVhbgpiZWF1dHkKYmVjYXVzZQpiZWNvbWUKYmVlZgpiZWZvcmUKYmVnaW4KYmVoYXZlCmJlaGluZApiZWxpZXZlCmJlbG93CmJlbHQKYmVuY2gKYmVuZWZpdApiZXN0CmJldHJheQpiZXR0ZXIKYmV0d2VlbgpiZXlvbmQKYmljeWNsZQpiaWQKYmlrZQpiaW5kCmJpb2xvZ3kKYmlyZApiaXJ0aApiaXR0ZXIKYmxhY2sKYmxhZGUKYmxhbWUKYmxhbmtldApibGFzdApibGVhawpibGVzcwpibGluZApibG9vZApibG9zc29tCmJsb3VzZQpibHVlCmJsdXIKYmx1c2gKYm9hcmQKYm9hdApib2R5CmJvaWwKYm9tYgpib25lCmJvbnVzCmJvb2sKYm9vc3QKYm9yZGVyCmJvcmluZwpib3Jyb3cKYm9zcwpib3R0b20KYm91bmNlCmJveApib3kKYnJhY2tldApicmFpbgpicmFuZApicmFzcwpicmF2ZQpicmVhZApicmVlemUKYnJpY2sKYnJpZGdlCmJyaWVmCmJyaWdodApicmluZwpicmlzawpicm9jY29saQpicm9rZW4KYnJvbnplCmJyb29tCmJyb3RoZXIKYnJvd24KYnJ1c2gKYnViYmxlCmJ1ZGR5CmJ1ZGdldApidWZmYWxvCmJ1aWxkCmJ1bGIKYnVsawpidWxsZXQKYnVuZGxlCmJ1bmtlcgpidXJkZW4KYnVyZ2VyCmJ1cnN0CmJ1cwpidXNpbmVzcwpidXN5CmJ1dHRlcgpidXllcgpidXp6CmNhYmJhZ2UKY2FiaW4KY2FibGUKY2FjdHVzCmNhZ2UKY2FrZQpjYWxsCmNhbG0KY2FtZXJhCmNhbXAKY2FuCmNhbmFsCmNhbmNlbApjYW5keQpjYW5ub24KY2Fub2UKY2FudmFzCmNhbnlvbgpjYXBhYmxlCmNhcGl0YWwKY2FwdGFpbgpjYXIKY2FyYm9uCmNhcmQKY2FyZ28KY2FycGV0CmNhcnJ5CmNhcnQKY2FzZQpjYXNoCmNhc2lubwpjYXN0bGUKY2FzdWFsCmNhdApjYXRhbG9nCmNhdGNoCmNhdGVnb3J5CmNhdHRsZQpjYXVnaHQKY2F1c2UKY2F1dGlvbgpjYXZlCmNlaWxpbmcKY2VsZXJ5CmNlbWVudApjZW5zdXMKY2VudHVyeQpjZXJlYWwKY2VydGFpbgpjaGFpcgpjaGFsawpjaGFtcGlvbgpjaGFuZ2UKY2hhb3MKY2hhcHRlcgpjaGFyZ2UKY2hhc2UKY2hhdApjaGVhcApjaGVjawpjaGVlc2UKY2hlZgpjaGVycnkKY2hlc3QKY2hpY2tlbgpjaGllZgpjaGlsZApjaGltbmV5CmNob2ljZQpjaG9vc2UKY2hyb25pYwpjaHVja2xlCmNodW5rCmNodXJuCmNpZ2FyCmNpbm5hbW9uCmNpcmNsZQpjaXRpemVuCmNpdHkKY2l2aWwKY2xhaW0KY2xhcApjbGFyaWZ5CmNsYXcKY2xheQpjbGVhbgpjbGVyawpjbGV2ZXIKY2xpY2sKY2xpZW50CmNsaWZmCmNsaW1iCmNsaW5pYwpjbGlwCmNsb2NrCmNsb2cKY2xvc2UKY2xvdGgKY2xvdWQKY2xvd24KY2x1YgpjbHVtcApjbHVzdGVyCmNsdXRjaApjb2FjaApjb2FzdApjb2NvbnV0CmNvZGUKY29mZmVlCmNvaWwKY29pbgpjb2xsZWN0CmNvbG9yCmNvbHVtbgpjb21iaW5lCmNvbWUKY29tZm9ydApjb21pYwpjb21tb24KY29tcGFueQpjb25jZXJ0CmNvbmR1Y3QKY29uZmlybQpjb25ncmVzcwpjb25uZWN0CmNvbnNpZGVyCmNvbnRyb2wKY29udmluY2UKY29vawpjb29sCmNvcHBlcgpjb3B5CmNvcmFsCmNvcmUKY29ybgpjb3JyZWN0CmNvc3QKY290dG9uCmNvdWNoCmNvdW50cnkKY291cGxlCmNvdXJzZQpjb3VzaW4KY292ZXIKY295b3RlCmNyYWNrCmNyYWRsZQpjcmFmdApjcmFtCmNyYW5lCmNyYXNoCmNyYXRlcgpjcmF3bApjcmF6eQpjcmVhbQpjcmVkaXQKY3JlZWsKY3Jldwpjcmlja2V0CmNyaW1lCmNyaXNwCmNyaXRpYwpjcm9wCmNyb3NzCmNyb3VjaApjcm93ZApjcnVjaWFsCmNydWVsCmNydWlzZQpjcnVtYmxlCmNydW5jaApjcnVzaApjcnkKY3J5c3RhbApjdWJlCmN1bHR1cmUKY3VwCmN1cGJvYXJkCmN1cmlvdXMKY3VycmVudApjdXJ0YWluCmN1cnZlCmN1c2hpb24KY3VzdG9tCmN1dGUKY3ljbGUKZGFkCmRhbWFnZQpkYW1wCmRhbmNlCmRhbmdlcgpkYXJpbmcKZGFzaApkYXVnaHRlcgpkYXduCmRheQpkZWFsCmRlYmF0ZQpkZWJyaXMKZGVjYWRlCmRlY2VtYmVyCmRlY2lkZQpkZWNsaW5lCmRlY29yYXRlCmRlY3JlYXNlCmRlZXIKZGVmZW5zZQpkZWZpbmUKZGVmeQpkZWdyZWUKZGVsYXkKZGVsaXZlcgpkZW1hbmQKZGVtaXNlCmRlbmlhbApkZW50aXN0CmRlbnkKZGVwYXJ0CmRlcGVuZApkZXBvc2l0CmRlcHRoCmRlcHV0eQpkZXJpdmUKZGVzY3JpYmUKZGVzZXJ0CmRlc2lnbgpkZXNrCmRlc3BhaXIKZGVzdHJveQpkZXRhaWwKZGV0ZWN0CmRldmVsb3AKZGV2aWNlCmRldm90ZQpkaWFncmFtCmRpYWwKZGlhbW9uZApkaWFyeQpkaWNlCmRpZXNlbApkaWV0CmRpZmZlcgpkaWdpdGFsCmRpZ25pdHkKZGlsZW1tYQpkaW5uZXIKZGlub3NhdXIKZGlyZWN0CmRpcnQKZGlzYWdyZWUKZGlzY292ZXIKZGlzZWFzZQpkaXNoCmRpc21pc3MKZGlzb3JkZXIKZGlzcGxheQpkaXN0YW5jZQpkaXZlcnQKZGl2aWRlCmRpdm9yY2UKZGl6enkKZG9jdG9yCmRvY3VtZW50CmRvZwpkb2xsCmRvbHBoaW4KZG9tYWluCmRvbmF0ZQpkb25rZXkKZG9ub3IKZG9vcgpkb3NlCmRvdWJsZQpkb3ZlCmRyYWZ0CmRyYWdvbgpkcmFtYQpkcmFzdGljCmRyYXcKZHJlYW0KZHJlc3MKZHJpZnQKZHJpbGwKZHJpbmsKZHJpcApkcml2ZQpkcm9wCmRydW0KZHJ5CmR1Y2sKZHVtYgpkdW5lCmR1cmluZwpkdXN0CmR1dGNoCmR1dHkKZHdhcmYKZHluYW1pYwplYWdlcgplYWdsZQplYXJseQplYXJuCmVhcnRoCmVhc2lseQplYXN0CmVhc3kKZWNobwplY29sb2d5CmVjb25vbXkKZWRnZQplZGl0CmVkdWNhdGUKZWZmb3J0CmVnZwplaWdodAplaXRoZXIKZWxib3cKZWxkZXIKZWxlY3RyaWMKZWxlZ2FudAplbGVtZW50CmVsZXBoYW50CmVsZXZhdG9yCmVsaXRlCmVsc2UKZW1iYXJrCmVtYm9keQplbWJyYWNlCmVtZXJnZQplbW90aW9uCmVtcGxveQplbXBvd2VyCmVtcHR5CmVuYWJsZQplbmFjdAplbmQKZW5kbGVzcwplbmRvcnNlCmVuZW15CmVuZXJneQplbmZvcmNlCmVuZ2FnZQplbmdpbmUKZW5oYW5jZQplbmpveQplbmxpc3QKZW5vdWdoCmVucmljaAplbnJvbGwKZW5zdXJlCmVudGVyCmVudGlyZQplbnRyeQplbnZlbG9wZQplcGlzb2RlCmVxdWFsCmVxdWlwCmVyYQplcmFzZQplcm9kZQplcm9zaW9uCmVycm9yCmVydXB0CmVzY2FwZQplc3NheQplc3NlbmNlCmVzdGF0ZQpldGVybmFsCmV0aGljcwpldmlkZW5jZQpldmlsCmV2b2tlCmV2b2x2ZQpleGFjdApleGFtcGxlCmV4Y2VzcwpleGNoYW5nZQpleGNpdGUKZXhjbHVkZQpleGN1c2UKZXhlY3V0ZQpleGVyY2lzZQpleGhhdXN0CmV4aGliaXQKZXhpbGUKZXhpc3QKZXhpdApleG90aWMKZXhwYW5kCmV4cGVjdApleHBpcmUKZXhwbGFpbgpleHBvc2UKZXhwcmVzcwpleHRlbmQKZXh0cmEKZXllCmV5ZWJyb3cKZmFicmljCmZhY2UKZmFjdWx0eQpmYWRlCmZhaW50CmZhaXRoCmZhbGwKZmFsc2UKZmFtZQpmYW1pbHkKZmFtb3VzCmZhbgpmYW5jeQpmYW50YXN5CmZhcm0KZmFzaGlvbgpmYXQKZmF0YWwKZmF0aGVyCmZhdGlndWUKZmF1bHQKZmF2b3JpdGUKZmVhdHVyZQpmZWJydWFyeQpmZWRlcmFsCmZlZQpmZWVkCmZlZWwKZmVtYWxlCmZlbmNlCmZlc3RpdmFsCmZldGNoCmZldmVyCmZldwpmaWJlcgpmaWN0aW9uCmZpZWxkCmZpZ3VyZQpmaWxlCmZpbG0KZmlsdGVyCmZpbmFsCmZpbmQKZmluZQpmaW5nZXIKZmluaXNoCmZpcmUKZmlybQpmaXJzdApmaXNjYWwKZmlzaApmaXQKZml0bmVzcwpmaXgKZmxhZwpmbGFtZQpmbGFzaApmbGF0CmZsYXZvcgpmbGVlCmZsaWdodApmbGlwCmZsb2F0CmZsb2NrCmZsb29yCmZsb3dlcgpmbHVpZApmbHVzaApmbHkKZm9hbQpmb2N1cwpmb2cKZm9pbApmb2xkCmZvbGxvdwpmb29kCmZvb3QKZm9yY2UKZm9yZXN0CmZvcmdldApmb3JrCmZvcnR1bmUKZm9ydW0KZm9yd2FyZApmb3NzaWwKZm9zdGVyCmZvdW5kCmZveApmcmFnaWxlCmZyYW1lCmZyZXF1ZW50CmZyZXNoCmZyaWVuZApmcmluZ2UKZnJvZwpmcm9udApmcm9zdApmcm93bgpmcm96ZW4KZnJ1aXQKZnVlbApmdW4KZnVubnkKZnVybmFjZQpmdXJ5CmZ1dHVyZQpnYWRnZXQKZ2FpbgpnYWxheHkKZ2FsbGVyeQpnYW1lCmdhcApnYXJhZ2UKZ2FyYmFnZQpnYXJkZW4KZ2FybGljCmdhcm1lbnQKZ2FzCmdhc3AKZ2F0ZQpnYXRoZXIKZ2F1Z2UKZ2F6ZQpnZW5lcmFsCmdlbml1cwpnZW5yZQpnZW50bGUKZ2VudWluZQpnZXN0dXJlCmdob3N0CmdpYW50CmdpZnQKZ2lnZ2xlCmdpbmdlcgpnaXJhZmZlCmdpcmwKZ2l2ZQpnbGFkCmdsYW5jZQpnbGFyZQpnbGFzcwpnbGlkZQpnbGltcHNlCmdsb2JlCmdsb29tCmdsb3J5Cmdsb3ZlCmdsb3cKZ2x1ZQpnb2F0CmdvZGRlc3MKZ29sZApnb29kCmdvb3NlCmdvcmlsbGEKZ29zcGVsCmdvc3NpcApnb3Zlcm4KZ293bgpncmFiCmdyYWNlCmdyYWluCmdyYW50CmdyYXBlCmdyYXNzCmdyYXZpdHkKZ3JlYXQKZ3JlZW4KZ3JpZApncmllZgpncml0Cmdyb2NlcnkKZ3JvdXAKZ3JvdwpncnVudApndWFyZApndWVzcwpndWlkZQpndWlsdApndWl0YXIKZ3VuCmd5bQpoYWJpdApoYWlyCmhhbGYKaGFtbWVyCmhhbXN0ZXIKaGFuZApoYXBweQpoYXJib3IKaGFyZApoYXJzaApoYXJ2ZXN0CmhhdApoYXZlCmhhd2sKaGF6YXJkCmhlYWQKaGVhbHRoCmhlYXJ0CmhlYXZ5CmhlZGdlaG9nCmhlaWdodApoZWxsbwpoZWxtZXQKaGVscApoZW4KaGVybwpoaWRkZW4KaGlnaApoaWxsCmhpbnQKaGlwCmhpcmUKaGlzdG9yeQpob2JieQpob2NrZXkKaG9sZApob2xlCmhvbGlkYXkKaG9sbG93CmhvbWUKaG9uZXkKaG9vZApob3BlCmhvcm4KaG9ycm9yCmhvcnNlCmhvc3BpdGFsCmhvc3QKaG90ZWwKaG91cgpob3ZlcgpodWIKaHVnZQpodW1hbgpodW1ibGUKaHVtb3IKaHVuZHJlZApodW5ncnkKaHVudApodXJkbGUKaHVycnkKaHVydApodXNiYW5kCmh5YnJpZAppY2UKaWNvbgppZGVhCmlkZW50aWZ5CmlkbGUKaWdub3JlCmlsbAppbGxlZ2FsCmlsbG5lc3MKaW1hZ2UKaW1pdGF0ZQppbW1lbnNlCmltbXVuZQppbXBhY3QKaW1wb3NlCmltcHJvdmUKaW1wdWxzZQppbmNoCmluY2x1ZGUKaW5jb21lCmluY3JlYXNlCmluZGV4CmluZGljYXRlCmluZG9vcgppbmR1c3RyeQppbmZhbnQKaW5mbGljdAppbmZvcm0KaW5oYWxlCmluaGVyaXQKaW5pdGlhbAppbmplY3QKaW5qdXJ5CmlubWF0ZQppbm5lcgppbm5vY2VudAppbnB1dAppbnF1aXJ5Cmluc2FuZQppbnNlY3QKaW5zaWRlCmluc3BpcmUKaW5zdGFsbAppbnRhY3QKaW50ZXJlc3QKaW50bwppbnZlc3QKaW52aXRlCmludm9sdmUKaXJvbgppc2xhbmQKaXNvbGF0ZQppc3N1ZQppdGVtCml2b3J5CmphY2tldApqYWd1YXIKamFyCmphenoKamVhbG91cwpqZWFucwpqZWxseQpqZXdlbApqb2IKam9pbgpqb2tlCmpvdXJuZXkKam95Cmp1ZGdlCmp1aWNlCmp1bXAKanVuZ2xlCmp1bmlvcgpqdW5rCmp1c3QKa2FuZ2Fyb28Ka2VlbgprZWVwCmtldGNodXAKa2V5CmtpY2sKa2lkCmtpZG5leQpraW5kCmtpbmdkb20Ka2lzcwpraXQKa2l0Y2hlbgpraXRlCmtpdHRlbgpraXdpCmtuZWUKa25pZmUKa25vY2sKa25vdwpsYWIKbGFiZWwKbGFib3IKbGFkZGVyCmxhZHkKbGFrZQpsYW1wCmxhbmd1YWdlCmxhcHRvcApsYXJnZQpsYXRlcgpsYXRpbgpsYXVnaApsYXVuZHJ5CmxhdmEKbGF3Cmxhd24KbGF3c3VpdApsYXllcgpsYXp5CmxlYWRlcgpsZWFmCmxlYXJuCmxlYXZlCmxlY3R1cmUKbGVmdApsZWcKbGVnYWwKbGVnZW5kCmxlaXN1cmUKbGVtb24KbGVuZApsZW5ndGgKbGVucwpsZW9wYXJkCmxlc3NvbgpsZXR0ZXIKbGV2ZWwKbGlhcgpsaWJlcnR5CmxpYnJhcnkKbGljZW5zZQpsaWZlCmxpZnQKbGlnaHQKbGlrZQpsaW1iCmxpbWl0CmxpbmsKbGlvbgpsaXF1aWQKbGlzdApsaXR0bGUKbGl2ZQpsaXphcmQKbG9hZApsb2FuCmxvYnN0ZXIKbG9jYWwKbG9jawpsb2dpYwpsb25lbHkKbG9uZwpsb29wCmxvdHRlcnkKbG91ZApsb3VuZ2UKbG92ZQpsb3lhbApsdWNreQpsdWdnYWdlCmx1bWJlcgpsdW5hcgpsdW5jaApsdXh1cnkKbHlyaWNzCm1hY2hpbmUKbWFkCm1hZ2ljCm1hZ25ldAptYWlkCm1haWwKbWFpbgptYWpvcgptYWtlCm1hbW1hbAptYW4KbWFuYWdlCm1hbmRhdGUKbWFuZ28KbWFuc2lvbgptYW51YWwKbWFwbGUKbWFyYmxlCm1hcmNoCm1hcmdpbgptYXJpbmUKbWFya2V0Cm1hcnJpYWdlCm1hc2sKbWFzcwptYXN0ZXIKbWF0Y2gKbWF0ZXJpYWwKbWF0aAptYXRyaXgKbWF0dGVyCm1heGltdW0KbWF6ZQptZWFkb3cKbWVhbgptZWFzdXJlCm1lYXQKbWVjaGFuaWMKbWVkYWwKbWVkaWEKbWVsb2R5Cm1lbHQKbWVtYmVyCm1lbW9yeQptZW50aW9uCm1lbnUKbWVyY3kKbWVyZ2UKbWVyaXQKbWVycnkKbWVzaAptZXNzYWdlCm1ldGFsCm1ldGhvZAptaWRkbGUKbWlkbmlnaHQKbWlsawptaWxsaW9uCm1pbWljCm1pbmQKbWluaW11bQptaW5vcgptaW51dGUKbWlyYWNsZQptaXJyb3IKbWlzZXJ5Cm1pc3MKbWlzdGFrZQptaXgKbWl4ZWQKbWl4dHVyZQptb2JpbGUKbW9kZWwKbW9kaWZ5Cm1vbQptb21lbnQKbW9uaXRvcgptb25rZXkKbW9uc3Rlcgptb250aAptb29uCm1vcmFsCm1vcmUKbW9ybmluZwptb3NxdWl0bwptb3RoZXIKbW90aW9uCm1vdG9yCm1vdW50YWluCm1vdXNlCm1vdmUKbW92aWUKbXVjaAptdWZmaW4KbXVsZQptdWx0aXBseQptdXNjbGUKbXVzZXVtCm11c2hyb29tCm11c2ljCm11c3QKbXV0dWFsCm15c2VsZgpteXN0ZXJ5Cm15dGgKbmFpdmUKbmFtZQpuYXBraW4KbmFycm93Cm5hc3R5Cm5hdGlvbgpuYXR1cmUKbmVhcgpuZWNrCm5lZWQKbmVnYXRpdmUKbmVnbGVjdApuZWl0aGVyCm5lcGhldwpuZXJ2ZQpuZXN0Cm5ldApuZXR3b3JrCm5ldXRyYWwKbmV2ZXIKbmV3cwpuZXh0Cm5pY2UKbmlnaHQKbm9ibGUKbm9pc2UKbm9taW5lZQpub29kbGUKbm9ybWFsCm5vcnRoCm5vc2UKbm90YWJsZQpub3RlCm5vdGhpbmcKbm90aWNlCm5vdmVsCm5vdwpudWNsZWFyCm51bWJlcgpudXJzZQpudXQKb2FrCm9iZXkKb2JqZWN0Cm9ibGlnZQpvYnNjdXJlCm9ic2VydmUKb2J0YWluCm9idmlvdXMKb2NjdXIKb2NlYW4Kb2N0b2JlcgpvZG9yCm9mZgpvZmZlcgpvZmZpY2UKb2Z0ZW4Kb2lsCm9rYXkKb2xkCm9saXZlCm9seW1waWMKb21pdApvbmNlCm9uZQpvbmlvbgpvbmxpbmUKb25seQpvcGVuCm9wZXJhCm9waW5pb24Kb3Bwb3NlCm9wdGlvbgpvcmFuZ2UKb3JiaXQKb3JjaGFyZApvcmRlcgpvcmRpbmFyeQpvcmdhbgpvcmllbnQKb3JpZ2luYWwKb3JwaGFuCm9zdHJpY2gKb3RoZXIKb3V0ZG9vcgpvdXRlcgpvdXRwdXQKb3V0c2lkZQpvdmFsCm92ZW4Kb3Zlcgpvd24Kb3duZXIKb3h5Z2VuCm95c3Rlcgpvem9uZQpwYWN0CnBhZGRsZQpwYWdlCnBhaXIKcGFsYWNlCnBhbG0KcGFuZGEKcGFuZWwKcGFuaWMKcGFudGhlcgpwYXBlcgpwYXJhZGUKcGFyZW50CnBhcmsKcGFycm90CnBhcnR5CnBhc3MKcGF0Y2gKcGF0aApwYXRpZW50CnBhdHJvbApwYXR0ZXJuCnBhdXNlCnBhdmUKcGF5bWVudApwZWFjZQpwZWFudXQKcGVhcgpwZWFzYW50CnBlbGljYW4KcGVuCnBlbmFsdHkKcGVuY2lsCnBlb3BsZQpwZXBwZXIKcGVyZmVjdApwZXJtaXQKcGVyc29uCnBldApwaG9uZQpwaG90bwpwaHJhc2UKcGh5c2ljYWwKcGlhbm8KcGljbmljCnBpY3R1cmUKcGllY2UKcGlnCnBpZ2VvbgpwaWxsCnBpbG90CnBpbmsKcGlvbmVlcgpwaXBlCnBpc3RvbApwaXRjaApwaXp6YQpwbGFjZQpwbGFuZXQKcGxhc3RpYwpwbGF0ZQpwbGF5CnBsZWFzZQpwbGVkZ2UKcGx1Y2sKcGx1ZwpwbHVuZ2UKcG9lbQpwb2V0CnBvaW50CnBvbGFyCnBvbGUKcG9saWNlCnBvbmQKcG9ueQpwb29sCnBvcHVsYXIKcG9ydGlvbgpwb3NpdGlvbgpwb3NzaWJsZQpwb3N0CnBvdGF0bwpwb3R0ZXJ5CnBvdmVydHkKcG93ZGVyCnBvd2VyCnByYWN0aWNlCnByYWlzZQpwcmVkaWN0CnByZWZlcgpwcmVwYXJlCnByZXNlbnQKcHJldHR5CnByZXZlbnQKcHJpY2UKcHJpZGUKcHJpbWFyeQpwcmludApwcmlvcml0eQpwcmlzb24KcHJpdmF0ZQpwcml6ZQpwcm9ibGVtCnByb2Nlc3MKcHJvZHVjZQpwcm9maXQKcHJvZ3JhbQpwcm9qZWN0CnByb21vdGUKcHJvb2YKcHJvcGVydHkKcHJvc3Blcgpwcm90ZWN0CnByb3VkCnByb3ZpZGUKcHVibGljCnB1ZGRpbmcKcHVsbApwdWxwCnB1bHNlCnB1bXBraW4KcHVuY2gKcHVwaWwKcHVwcHkKcHVyY2hhc2UKcHVyaXR5CnB1cnBvc2UKcHVyc2UKcHVzaApwdXQKcHV6emxlCnB5cmFtaWQKcXVhbGl0eQpxdWFudHVtCnF1YXJ0ZXIKcXVlc3Rpb24KcXVpY2sKcXVpdApxdWl6CnF1b3RlCnJhYmJpdApyYWNjb29uCnJhY2UKcmFjawpyYWRhcgpyYWRpbwpyYWlsCnJhaW4KcmFpc2UKcmFsbHkKcmFtcApyYW5jaApyYW5kb20KcmFuZ2UKcmFwaWQKcmFyZQpyYXRlCnJhdGhlcgpyYXZlbgpyYXcKcmF6b3IKcmVhZHkKcmVhbApyZWFzb24KcmViZWwKcmVidWlsZApyZWNhbGwKcmVjZWl2ZQpyZWNpcGUKcmVjb3JkCnJlY3ljbGUKcmVkdWNlCnJlZmxlY3QKcmVmb3JtCnJlZnVzZQpyZWdpb24KcmVncmV0CnJlZ3VsYXIKcmVqZWN0CnJlbGF4CnJlbGVhc2UKcmVsaWVmCnJlbHkKcmVtYWluCnJlbWVtYmVyCnJlbWluZApyZW1vdmUKcmVuZGVyCnJlbmV3CnJlbnQKcmVvcGVuCnJlcGFpcgpyZXBlYXQKcmVwbGFjZQpyZXBvcnQKcmVxdWlyZQpyZXNjdWUKcmVzZW1ibGUKcmVzaXN0CnJlc291cmNlCnJlc3BvbnNlCnJlc3VsdApyZXRpcmUKcmV0cmVhdApyZXR1cm4KcmV1bmlvbgpyZXZlYWwKcmV2aWV3CnJld2FyZApyaHl0aG0KcmliCnJpYmJvbgpyaWNlCnJpY2gKcmlkZQpyaWRnZQpyaWZsZQpyaWdodApyaWdpZApyaW5nCnJpb3QKcmlwcGxlCnJpc2sKcml0dWFsCnJpdmFsCnJpdmVyCnJvYWQKcm9hc3QKcm9ib3QKcm9idXN0CnJvY2tldApyb21hbmNlCnJvb2YKcm9va2llCnJvb20Kcm9zZQpyb3RhdGUKcm91Z2gKcm91bmQKcm91dGUKcm95YWwKcnViYmVyCnJ1ZGUKcnVnCnJ1bGUKcnVuCnJ1bndheQpydXJhbApzYWQKc2FkZGxlCnNhZG5lc3MKc2FmZQpzYWlsCnNhbGFkCnNhbG1vbgpzYWxvbgpzYWx0CnNhbHV0ZQpzYW1lCnNhbXBsZQpzYW5kCnNhdGlzZnkKc2F0b3NoaQpzYXVjZQpzYXVzYWdlCnNhdmUKc2F5CnNjYWxlCnNjYW4Kc2NhcmUKc2NhdHRlcgpzY2VuZQpzY2hlbWUKc2Nob29sCnNjaWVuY2UKc2Npc3NvcnMKc2NvcnBpb24Kc2NvdXQKc2NyYXAKc2NyZWVuCnNjcmlwdApzY3J1YgpzZWEKc2VhcmNoCnNlYXNvbgpzZWF0CnNlY29uZApzZWNyZXQKc2VjdGlvbgpzZWN1cml0eQpzZWVkCnNlZWsKc2VnbWVudApzZWxlY3QKc2VsbApzZW1pbmFyCnNlbmlvcgpzZW5zZQpzZW50ZW5jZQpzZXJpZXMKc2VydmljZQpzZXNzaW9uCnNldHRsZQpzZXR1cApzZXZlbgpzaGFkb3cKc2hhZnQKc2hhbGxvdwpzaGFyZQpzaGVkCnNoZWxsCnNoZXJpZmYKc2hpZWxkCnNoaWZ0CnNoaW5lCnNoaXAKc2hpdmVyCnNob2NrCnNob2UKc2hvb3QKc2hvcApzaG9ydApzaG91bGRlcgpzaG92ZQpzaHJpbXAKc2hydWcKc2h1ZmZsZQpzaHkKc2libGluZwpzaWNrCnNpZGUKc2llZ2UKc2lnaHQKc2lnbgpzaWxlbnQKc2lsawpzaWxseQpzaWx2ZXIKc2ltaWxhcgpzaW1wbGUKc2luY2UKc2luZwpzaXJlbgpzaXN0ZXIKc2l0dWF0ZQpzaXgKc2l6ZQpza2F0ZQpza2V0Y2gKc2tpCnNraWxsCnNraW4Kc2tpcnQKc2t1bGwKc2xhYgpzbGFtCnNsZWVwCnNsZW5kZXIKc2xpY2UKc2xpZGUKc2xpZ2h0CnNsaW0Kc2xvZ2FuCnNsb3QKc2xvdwpzbHVzaApzbWFsbApzbWFydApzbWlsZQpzbW9rZQpzbW9vdGgKc25hY2sKc25ha2UKc25hcApzbmlmZgpzbm93CnNvYXAKc29jY2VyCnNvY2lhbApzb2NrCnNvZGEKc29mdApzb2xhcgpzb2xkaWVyCnNvbGlkCnNvbHV0aW9uCnNvbHZlCnNvbWVvbmUKc29uZwpzb29uCnNvcnJ5CnNvcnQKc291bApzb3VuZApzb3VwCnNvdXJjZQpzb3V0aApzcGFjZQpzcGFyZQpzcGF0aWFsCnNwYXduCnNwZWFrCnNwZWNpYWwKc3BlZWQKc3BlbGwKc3BlbmQKc3BoZXJlCnNwaWNlCnNwaWRlcgpzcGlrZQpzcGluCnNwaXJpdApzcGxpdApzcG9pbApzcG9uc29yCnNwb29uCnNwb3J0CnNwb3QKc3ByYXkKc3ByZWFkCnNwcmluZwpzcHkKc3F1YXJlCnNxdWVlemUKc3F1aXJyZWwKc3RhYmxlCnN0YWRpdW0Kc3RhZmYKc3RhZ2UKc3RhaXJzCnN0YW1wCnN0YW5kCnN0YXJ0CnN0YXRlCnN0YXkKc3RlYWsKc3RlZWwKc3RlbQpzdGVwCnN0ZXJlbwpzdGljawpzdGlsbApzdGluZwpzdG9jawpzdG9tYWNoCnN0b25lCnN0b29sCnN0b3J5CnN0b3ZlCnN0cmF0ZWd5CnN0cmVldApzdHJpa2UKc3Ryb25nCnN0cnVnZ2xlCnN0dWRlbnQKc3R1ZmYKc3R1bWJsZQpzdHlsZQpzdWJqZWN0CnN1Ym1pdApzdWJ3YXkKc3VjY2VzcwpzdWNoCnN1ZGRlbgpzdWZmZXIKc3VnYXIKc3VnZ2VzdApzdWl0CnN1bW1lcgpzdW4Kc3VubnkKc3Vuc2V0CnN1cGVyCnN1cHBseQpzdXByZW1lCnN1cmUKc3VyZmFjZQpzdXJnZQpzdXJwcmlzZQpzdXJyb3VuZApzdXJ2ZXkKc3VzcGVjdApzdXN0YWluCnN3YWxsb3cKc3dhbXAKc3dhcApzd2FybQpzd2Vhcgpzd2VldApzd2lmdApzd2ltCnN3aW5nCnN3aXRjaApzd29yZApzeW1ib2wKc3ltcHRvbQpzeXJ1cApzeXN0ZW0KdGFibGUKdGFja2xlCnRhZwp0YWlsCnRhbGVudAp0YWxrCnRhbmsKdGFwZQp0YXJnZXQKdGFzawp0YXN0ZQp0YXR0b28KdGF4aQp0ZWFjaAp0ZWFtCnRlbGwKdGVuCnRlbmFudAp0ZW5uaXMKdGVudAp0ZXJtCnRlc3QKdGV4dAp0aGFuawp0aGF0CnRoZW1lCnRoZW4KdGhlb3J5CnRoZXJlCnRoZXkKdGhpbmcKdGhpcwp0aG91Z2h0CnRocmVlCnRocml2ZQp0aHJvdwp0aHVtYgp0aHVuZGVyCnRpY2tldAp0aWRlCnRpZ2VyCnRpbHQKdGltYmVyCnRpbWUKdGlueQp0aXAKdGlyZWQKdGlzc3VlCnRpdGxlCnRvYXN0CnRvYmFjY28KdG9kYXkKdG9kZGxlcgp0b2UKdG9nZXRoZXIKdG9pbGV0CnRva2VuCnRvbWF0bwp0b21vcnJvdwp0b25lCnRvbmd1ZQp0b25pZ2h0CnRvb2wKdG9vdGgKdG9wCnRvcGljCnRvcHBsZQp0b3JjaAp0b3JuYWRvCnRvcnRvaXNlCnRvc3MKdG90YWwKdG91cmlzdAp0b3dhcmQKdG93ZXIKdG93bgp0b3kKdHJhY2sKdHJhZGUKdHJhZmZpYwp0cmFnaWMKdHJhaW4KdHJhbnNmZXIKdHJhcAp0cmFzaAp0cmF2ZWwKdHJheQp0cmVhdAp0cmVlCnRyZW5kCnRyaWFsCnRyaWJlCnRyaWNrCnRyaWdnZXIKdHJpbQp0cmlwCnRyb3BoeQp0cm91YmxlCnRydWNrCnRydWUKdHJ1bHkKdHJ1bXBldAp0cnVzdAp0cnV0aAp0cnkKdHViZQp0dWl0aW9uCnR1bWJsZQp0dW5hCnR1bm5lbAp0dXJrZXkKdHVybgp0dXJ0bGUKdHdlbHZlCnR3ZW50eQp0d2ljZQp0d2luCnR3aXN0CnR3bwp0eXBlCnR5cGljYWwKdWdseQp1bWJyZWxsYQp1bmFibGUKdW5hd2FyZQp1bmNsZQp1bmNvdmVyCnVuZGVyCnVuZG8KdW5mYWlyCnVuZm9sZAp1bmhhcHB5CnVuaWZvcm0KdW5pcXVlCnVuaXQKdW5pdmVyc2UKdW5rbm93bgp1bmxvY2sKdW50aWwKdW51c3VhbAp1bnZlaWwKdXBkYXRlCnVwZ3JhZGUKdXBob2xkCnVwb24KdXBwZXIKdXBzZXQKdXJiYW4KdXJnZQp1c2FnZQp1c2UKdXNlZAp1c2VmdWwKdXNlbGVzcwp1c3VhbAp1dGlsaXR5CnZhY2FudAp2YWN1dW0KdmFndWUKdmFsaWQKdmFsbGV5CnZhbHZlCnZhbgp2YW5pc2gKdmFwb3IKdmFyaW91cwp2YXN0CnZhdWx0CnZlaGljbGUKdmVsdmV0CnZlbmRvcgp2ZW50dXJlCnZlbnVlCnZlcmIKdmVyaWZ5CnZlcnNpb24KdmVyeQp2ZXNzZWwKdmV0ZXJhbgp2aWFibGUKdmlicmFudAp2aWNpb3VzCnZpY3RvcnkKdmlkZW8Kdmlldwp2aWxsYWdlCnZpbnRhZ2UKdmlvbGluCnZpcnR1YWwKdmlydXMKdmlzYQp2aXNpdAp2aXN1YWwKdml0YWwKdml2aWQKdm9jYWwKdm9pY2UKdm9pZAp2b2xjYW5vCnZvbHVtZQp2b3RlCnZveWFnZQp3YWdlCndhZ29uCndhaXQKd2Fsawp3YWxsCndhbG51dAp3YW50CndhcmZhcmUKd2FybQp3YXJyaW9yCndhc2gKd2FzcAp3YXN0ZQp3YXRlcgp3YXZlCndheQp3ZWFsdGgKd2VhcG9uCndlYXIKd2Vhc2VsCndlYXRoZXIKd2ViCndlZGRpbmcKd2Vla2VuZAp3ZWlyZAp3ZWxjb21lCndlc3QKd2V0CndoYWxlCndoYXQKd2hlYXQKd2hlZWwKd2hlbgp3aGVyZQp3aGlwCndoaXNwZXIKd2lkZQp3aWR0aAp3aWZlCndpbGQKd2lsbAp3aW4Kd2luZG93CndpbmUKd2luZwp3aW5rCndpbm5lcgp3aW50ZXIKd2lyZQp3aXNkb20Kd2lzZQp3aXNoCndpdG5lc3MKd29sZgp3b21hbgp3b25kZXIKd29vZAp3b29sCndvcmQKd29yawp3b3JsZAp3b3JyeQp3b3J0aAp3cmFwCndyZWNrCndyZXN0bGUKd3Jpc3QKd3JpdGUKd3JvbmcKeWFyZAp5ZWFyCnllbGxvdwp5b3UKeW91bmcKeW91dGgKemVicmEKemVybwp6b25lCnpvb2Auc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy9mcmVuY2guanMKICB2YXIgd29yZGxpc3QzID0gYGFiYWlzc2VyCmFiYW5kb24KYWJkaXF1ZXIKYWJlaWxsZQphYm9saXIKYWJvcmRlcgphYm91dGlyCmFib3llcgphYnJhc2lmCmFicmV1dmVyCmFicml0ZXIKYWJyb2dlcgphYnJ1cHQKYWJzZW5jZQphYnNvbHUKYWJzdXJkZQphYnVzaWYKYWJ5c3NhbAphY2FkZVx1MDMwMW1pZQphY2Fqb3UKYWNhcmllbgphY2NhYmxlcgphY2NlcHRlcgphY2NsYW1lcgphY2NvbGFkZQphY2Nyb2NoZQphY2N1c2VyCmFjZXJiZQphY2hhdAphY2hldGVyCmFjaWR1bGVyCmFjaWVyCmFjb21wdGUKYWNxdWVcdTAzMDFyaXIKYWNyb255bWUKYWN0ZXVyCmFjdGlmCmFjdHVlbAphZGVwdGUKYWRlXHUwMzAxcXVhdAphZGhlXHUwMzAxc2lmCmFkamVjdGlmCmFkanVnZXIKYWRtZXR0cmUKYWRtaXJlcgphZG9wdGVyCmFkb3JlcgphZG91Y2lyCmFkcmVzc2UKYWRyb2l0CmFkdWx0ZQphZHZlcmJlCmFlXHUwMzAxcmVyCmFlXHUwMzAxcm9uZWYKYWZmYWlyZQphZmZlY3RlcgphZmZpY2hlCmFmZnJldXgKYWZmdWJsZXIKYWdhY2VyCmFnZW5jZXIKYWdpbGUKYWdpdGVyCmFncmFmZXIKYWdyZVx1MDMwMWFibGUKYWdydW1lCmFpZGVyCmFpZ3VpbGxlCmFpbGllcgphaW1hYmxlCmFpc2FuY2UKYWpvdXRlcgphanVzdGVyCmFsYXJtZXIKYWxjaGltaWUKYWxlcnRlCmFsZ2VcdTAzMDBicmUKYWxndWUKYWxpZVx1MDMwMW5lcgphbGltZW50CmFsbGVcdTAzMDFnZXIKYWxsaWFnZQphbGxvdWVyCmFsbHVtZXIKYWxvdXJkaXIKYWxwYWdhCmFsdGVzc2UKYWx2ZVx1MDMwMW9sZQphbWF0ZXVyCmFtYmlndQphbWJyZQphbWVcdTAzMDFuYWdlcgphbWVydHVtZQphbWlkb24KYW1pcmFsCmFtb3JjZXIKYW1vdXIKYW1vdmlibGUKYW1waGliaWUKYW1wbGV1cgphbXVzYW50CmFuYWx5c2UKYW5hcGhvcmUKYW5hcmNoaWUKYW5hdG9taWUKYW5jaWVuCmFuZVx1MDMwMWFudGlyCmFuZ2xlCmFuZ29pc3NlCmFuZ3VsZXV4CmFuaW1hbAphbm5leGVyCmFubm9uY2UKYW5udWVsCmFub2Rpbgphbm9tYWxpZQphbm9ueW1lCmFub3JtYWwKYW50ZW5uZQphbnRpZG90ZQphbnhpZXV4CmFwYWlzZXIKYXBlXHUwMzAxcml0aWYKYXBsYW5pcgphcG9sb2dpZQphcHBhcmVpbAphcHBlbGVyCmFwcG9ydGVyCmFwcHV5ZXIKYXF1YXJpdW0KYXF1ZWR1YwphcmJpdHJlCmFyYnVzdGUKYXJkZXVyCmFyZG9pc2UKYXJnZW50CmFybGVxdWluCmFybWF0dXJlCmFybWVtZW50CmFybW9pcmUKYXJtdXJlCmFycGVudGVyCmFycmFjaGVyCmFycml2ZXIKYXJyb3NlcgphcnNlbmljCmFydGVcdTAzMDFyaWVsCmFydGljbGUKYXNwZWN0CmFzcGhhbHRlCmFzcGlyZXIKYXNzYXV0CmFzc2VydmlyCmFzc2lldHRlCmFzc29jaWVyCmFzc3VyZXIKYXN0aWNvdAphc3RyZQphc3R1Y2UKYXRlbGllcgphdG9tZQphdHJpdW0KYXRyb2NlCmF0dGFxdWUKYXR0ZW50aWYKYXR0aXJlcgphdHRyYXBlcgphdWJhaW5lCmF1YmVyZ2UKYXVkYWNlCmF1ZGlibGUKYXVndXJlcgphdXJvcmUKYXV0b21uZQphdXRydWNoZQphdmFsZXIKYXZhbmNlcgphdmFyaWNlCmF2ZW5pcgphdmVyc2UKYXZldWdsZQphdmlhdGV1cgphdmlkZQphdmlvbgphdmlzZXIKYXZvaW5lCmF2b3VlcgphdnJpbApheGlhbApheGlvbWUKYmFkZ2UKYmFmb3VlcgpiYWdhZ2UKYmFndWV0dGUKYmFpZ25hZGUKYmFsYW5jZXIKYmFsY29uCmJhbGVpbmUKYmFsaXNhZ2UKYmFtYmluCmJhbmNhaXJlCmJhbmRhZ2UKYmFubGlldWUKYmFubmllXHUwMzAwcmUKYmFucXVpZXIKYmFyYmllcgpiYXJpbApiYXJvbgpiYXJxdWUKYmFycmFnZQpiYXNzaW4KYmFzdGlvbgpiYXRhaWxsZQpiYXRlYXUKYmF0dGVyaWUKYmF1ZHJpZXIKYmF2YXJkZXIKYmVsZXR0ZQpiZVx1MDMwMWxpZXIKYmVsb3RlCmJlXHUwMzAxbmVcdTAzMDFmaWNlCmJlcmNlYXUKYmVyZ2VyCmJlcmxpbmUKYmVybXVkYQpiZXNhY2UKYmVzb2duZQpiZVx1MDMwMXRhaWwKYmV1cnJlCmJpYmVyb24KYmljeWNsZQpiaWR1bGUKYmlqb3UKYmlsYW4KYmlsaW5ndWUKYmlsbGFyZApiaW5haXJlCmJpb2xvZ2llCmJpb3BzaWUKYmlvdHlwZQpiaXNjdWl0CmJpc29uCmJpc3RvdXJpCmJpdHVtZQpiaXphcnJlCmJsYWZhcmQKYmxhZ3VlCmJsYW5jaGlyCmJsZXNzYW50CmJsaW5kZXIKYmxvbmQKYmxvcXVlcgpibG91c29uCmJvYmFyZApib2JpbmUKYm9pcmUKYm9pc2VyCmJvbGlkZQpib25ib24KYm9uZGlyCmJvbmhldXIKYm9uaWZpZXIKYm9udXMKYm9yZHVyZQpib3JuZQpib3R0ZQpib3VjbGUKYm91ZXV4CmJvdWdpZQpib3Vsb24KYm91cXVpbgpib3Vyc2UKYm91c3NvbGUKYm91dGlxdWUKYm94ZXVyCmJyYW5jaGUKYnJhc2llcgpicmF2ZQpicmViaXMKYnJlXHUwMzAwY2hlCmJyZXV2YWdlCmJyaWNvbGVyCmJyaWdhZGUKYnJpbGxhbnQKYnJpb2NoZQpicmlxdWUKYnJvY2h1cmUKYnJvZGVyCmJyb256ZXIKYnJvdXNzZQpicm95ZXVyCmJydW1lCmJydXNxdWUKYnJ1dGFsCmJydXlhbnQKYnVmZmxlCmJ1aXNzb24KYnVsbGV0aW4KYnVyZWF1CmJ1cmluCmJ1c3RpZXIKYnV0aW5lcgpidXRvaXIKYnV2YWJsZQpidXZldHRlCmNhYmFub24KY2FiaW5lCmNhY2hldHRlCmNhZGVhdQpjYWRyZQpjYWZlXHUwMzAxaW5lCmNhaWxsb3UKY2Fpc3NvbgpjYWxjdWxlcgpjYWxlcGluCmNhbGlicmUKY2FsbWVyCmNhbG9tbmllCmNhbHZhaXJlCmNhbWFyYWRlCmNhbWVcdTAzMDFyYQpjYW1pb24KY2FtcGFnbmUKY2FuYWwKY2FuZXRvbgpjYW5vbgpjYW50aW5lCmNhbnVsYXIKY2FwYWJsZQpjYXBvcmFsCmNhcHJpY2UKY2Fwc3VsZQpjYXB0ZXIKY2FwdWNoZQpjYXJhYmluZQpjYXJib25lCmNhcmVzc2VyCmNhcmlib3UKY2FybmFnZQpjYXJvdHRlCmNhcnJlYXUKY2FydG9uCmNhc2NhZGUKY2FzaWVyCmNhc3F1ZQpjYXNzdXJlCmNhdXNlcgpjYXV0aW9uCmNhdmFsaWVyCmNhdmVybmUKY2F2aWFyCmNlXHUwMzAxZGlsbGUKY2VpbnR1cmUKY2VcdTAzMDFsZXN0ZQpjZWxsdWxlCmNlbmRyaWVyCmNlbnN1cmVyCmNlbnRyYWwKY2VyY2xlCmNlXHUwMzAxcmVcdTAzMDFicmFsCmNlcmlzZQpjZXJuZXIKY2VydmVhdQpjZXNzZXIKY2hhZ3JpbgpjaGFpc2UKY2hhbGV1cgpjaGFtYnJlCmNoYW5jZQpjaGFwaXRyZQpjaGFyYm9uCmNoYXNzZXVyCmNoYXRvbgpjaGF1c3NvbgpjaGF2aXJlcgpjaGVtaXNlCmNoZW5pbGxlCmNoZVx1MDMwMXF1aWVyCmNoZXJjaGVyCmNoZXZhbApjaGllbgpjaGlmZnJlCmNoaWdub24KY2hpbWVcdTAzMDByZQpjaGlvdApjaGxvcnVyZQpjaG9jb2xhdApjaG9pc2lyCmNob3NlCmNob3VldHRlCmNocm9tZQpjaHV0ZQpjaWdhcmUKY2lnb2duZQpjaW1lbnRlcgpjaW5lXHUwMzAxbWEKY2ludHJlcgpjaXJjdWxlcgpjaXJlcgpjaXJxdWUKY2l0ZXJuZQpjaXRveWVuCmNpdHJvbgpjaXZpbApjbGFpcm9uCmNsYW1ldXIKY2xhcXVlcgpjbGFzc2UKY2xhdmllcgpjbGllbnQKY2xpZ25lcgpjbGltYXQKY2xpdmFnZQpjbG9jaGUKY2xvbmFnZQpjbG9wb3J0ZQpjb2JhbHQKY29icmEKY29jYXNzZQpjb2NvdGllcgpjb2Rlcgpjb2RpZmllcgpjb2ZmcmUKY29nbmVyCmNvaGVcdTAzMDFzaW9uCmNvaWZmZXIKY29pbmNlcgpjb2xlXHUwMzAwcmUKY29saWJyaQpjb2xsaW5lCmNvbG1hdGVyCmNvbG9uZWwKY29tYmF0CmNvbWVcdTAzMDFkaWUKY29tbWFuZGUKY29tcGFjdApjb25jZXJ0CmNvbmR1aXJlCmNvbmZpZXIKY29uZ2VsZXIKY29ubm90ZXIKY29uc29ubmUKY29udGFjdApjb252ZXhlCmNvcGFpbgpjb3BpZQpjb3JhaWwKY29yYmVhdQpjb3JkYWdlCmNvcm5pY2hlCmNvcnB1cwpjb3JyZWN0CmNvcnRlXHUwMzAwZ2UKY29zbWlxdWUKY29zdHVtZQpjb3Rvbgpjb3VkZQpjb3VwdXJlCmNvdXJhZ2UKY291dGVhdQpjb3V2cmlyCmNveW90ZQpjcmFiZQpjcmFpbnRlCmNyYXZhdGUKY3JheW9uCmNyZVx1MDMwMWF0dXJlCmNyZVx1MDMwMWRpdGVyCmNyZVx1MDMwMW1ldXgKY3JldXNlcgpjcmV2ZXR0ZQpjcmlibGVyCmNyaWVyCmNyaXN0YWwKY3JpdGVcdTAzMDByZQpjcm9pcmUKY3JvcXVlcgpjcm90YWxlCmNydWNpYWwKY3J1ZWwKY3J5cHRlcgpjdWJpcXVlCmN1ZWlsbGlyCmN1aWxsZVx1MDMwMHJlCmN1aXNpbmUKY3VpdnJlCmN1bG1pbmVyCmN1bHRpdmVyCmN1bXVsZXIKY3VwaWRlCmN1cmF0aWYKY3Vyc2V1cgpjeWFudXJlCmN5Y2xlCmN5bGluZHJlCmN5bmlxdWUKZGFpZ25lcgpkYW1pZXIKZGFuZ2VyCmRhbnNldXIKZGF1cGhpbgpkZVx1MDMwMWJhdHRyZQpkZVx1MDMwMWJpdGVyCmRlXHUwMzAxYm9yZGVyCmRlXHUwMzAxYnJpZGVyCmRlXHUwMzAxYnV0YW50CmRlXHUwMzAxY2FsZXIKZGVcdTAzMDFjZW1icmUKZGVcdTAzMDFjaGlyZXIKZGVcdTAzMDFjaWRlcgpkZVx1MDMwMWNsYXJlcgpkZVx1MDMwMWNvcmVyCmRlXHUwMzAxY3JpcmUKZGVcdTAzMDFjdXBsZXIKZGVcdTAzMDFkYWxlCmRlXHUwMzAxZHVjdGlmCmRlXHUwMzAxZXNzZQpkZVx1MDMwMWZlbnNpZgpkZVx1MDMwMWZpbGVyCmRlXHUwMzAxZnJheWVyCmRlXHUwMzAxZ2FnZXIKZGVcdTAzMDFnaXZyZXIKZGVcdTAzMDFnbHV0aXIKZGVcdTAzMDFncmFmZXIKZGVcdTAzMDFqZXVuZXIKZGVcdTAzMDFsaWNlCmRlXHUwMzAxbG9nZXIKZGVtYW5kZXIKZGVtZXVyZXIKZGVcdTAzMDFtb2xpcgpkZVx1MDMwMW5pY2hlcgpkZVx1MDMwMW5vdWVyCmRlbnRlbGxlCmRlXHUwMzAxbnVkZXIKZGVcdTAzMDFwYXJ0CmRlXHUwMzAxcGVuc2VyCmRlXHUwMzAxcGhhc2VyCmRlXHUwMzAxcGxhY2VyCmRlXHUwMzAxcG9zZXIKZGVcdTAzMDFyYW5nZXIKZGVcdTAzMDFyb2JlcgpkZVx1MDMwMXNhc3RyZQpkZXNjZW50ZQpkZVx1MDMwMXNlcnQKZGVcdTAzMDFzaWduZXIKZGVcdTAzMDFzb2JlXHUwMzAxaXIKZGVzc2luZXIKZGVzdHJpZXIKZGVcdTAzMDF0YWNoZXIKZGVcdTAzMDF0ZXN0ZXIKZGVcdTAzMDF0b3VyZXIKZGVcdTAzMDF0cmVzc2UKZGV2YW5jZXIKZGV2ZW5pcgpkZXZpbmVyCmRldm9pcgpkaWFibGUKZGlhbG9ndWUKZGlhbWFudApkaWN0ZXIKZGlmZmVcdTAzMDFyZXIKZGlnZVx1MDMwMXJlcgpkaWdpdGFsCmRpZ25lCmRpbHVlcgpkaW1hbmNoZQpkaW1pbnVlcgpkaW94eWRlCmRpcmVjdGlmCmRpcmlnZXIKZGlzY3V0ZXIKZGlzcG9zZXIKZGlzc2lwZXIKZGlzdGFuY2UKZGl2ZXJ0aXIKZGl2aXNlcgpkb2NpbGUKZG9jdGV1cgpkb2dtZQpkb2lndApkb21haW5lCmRvbWljaWxlCmRvbXB0ZXIKZG9uYXRldXIKZG9uam9uCmRvbm5lcgpkb3BhbWluZQpkb3J0b2lyCmRvcnVyZQpkb3NhZ2UKZG9zZXVyCmRvc3NpZXIKZG90YXRpb24KZG91YW5pZXIKZG91YmxlCmRvdWNldXIKZG91dGVyCmRveWVuCmRyYWdvbgpkcmFwZXIKZHJlc3NlcgpkcmliYmxlcgpkcm9pdHVyZQpkdXBlcmllCmR1cGxleGUKZHVyYWJsZQpkdXJjaXIKZHluYXN0aWUKZVx1MDMwMWJsb3VpcgplXHUwMzAxY2FydGVyCmVcdTAzMDFjaGFycGUKZVx1MDMwMWNoZWxsZQplXHUwMzAxY2xhaXJlcgplXHUwMzAxY2xpcHNlCmVcdTAzMDFjbG9yZQplXHUwMzAxY2x1c2UKZVx1MDMwMWNvbGUKZVx1MDMwMWNvbm9taWUKZVx1MDMwMWNvcmNlCmVcdTAzMDFjb3V0ZXIKZVx1MDMwMWNyYXNlcgplXHUwMzAxY3JlXHUwMzAxbWVyCmVcdTAzMDFjcml2YWluCmVcdTAzMDFjcm91CmVcdTAzMDFjdW1lCmVcdTAzMDFjdXJldWlsCmVcdTAzMDFkaWZpZXIKZVx1MDMwMWR1cXVlcgplZmZhY2VyCmVmZmVjdGlmCmVmZmlnaWUKZWZmb3J0CmVmZnJheWVyCmVmZnVzaW9uCmVcdTAzMDFnYWxpc2VyCmVcdTAzMDFnYXJlcgplXHUwMzAxamVjdGVyCmVcdTAzMDFsYWJvcmVyCmVcdTAzMDFsYXJnaXIKZVx1MDMwMWxlY3Ryb24KZVx1MDMwMWxlXHUwMzAxZ2FudAplXHUwMzAxbGVcdTAzMDFwaGFudAplXHUwMzAxbGVcdTAzMDB2ZQplXHUwMzAxbGlnaWJsZQplXHUwMzAxbGl0aXNtZQplXHUwMzAxbG9nZQplXHUwMzAxbHVjaWRlcgplXHUwMzAxbHVkZXIKZW1iYWxsZXIKZW1iZWxsaXIKZW1icnlvbgplXHUwMzAxbWVyYXVkZQplXHUwMzAxbWlzc2lvbgplbW1lbmVyCmVcdTAzMDFtb3Rpb24KZVx1MDMwMW1vdXZvaXIKZW1wZXJldXIKZW1wbG95ZXIKZW1wb3J0ZXIKZW1wcmlzZQplXHUwMzAxbXVsc2lvbgplbmNhZHJlcgplbmNoZVx1MDMwMHJlCmVuY2xhdmUKZW5jb2NoZQplbmRpZ3VlcgplbmRvc3NlcgplbmRyb2l0CmVuZHVpcmUKZVx1MDMwMW5lcmdpZQplbmZhbmNlCmVuZmVybWVyCmVuZm91aXIKZW5nYWdlcgplbmdpbgplbmdsb2JlcgplXHUwMzAxbmlnbWUKZW5qYW1iZXIKZW5qZXUKZW5sZXZlcgplbm5lbWkKZW5udXlldXgKZW5yaWNoaXIKZW5yb2JhZ2UKZW5zZWlnbmUKZW50YXNzZXIKZW50ZW5kcmUKZW50aWVyCmVudG91cmVyCmVudHJhdmVyCmVcdTAzMDFudW1lXHUwMzAxcmVyCmVudmFoaXIKZW52aWFibGUKZW52b3llcgplbnp5bWUKZVx1MDMwMW9saWVuCmVcdTAzMDFwYWlzc2lyCmVcdTAzMDFwYXJnbmUKZVx1MDMwMXBhdGFudAplXHUwMzAxcGF1bGUKZVx1MDMwMXBpY2VyaWUKZVx1MDMwMXBpZGVcdTAzMDFtaWUKZVx1MDMwMXBpZXIKZVx1MDMwMXBpbG9ndWUKZVx1MDMwMXBpbmUKZVx1MDMwMXBpc29kZQplXHUwMzAxcGl0YXBoZQplXHUwMzAxcG9xdWUKZVx1MDMwMXByZXV2ZQplXHUwMzAxcHJvdXZlcgplXHUwMzAxcHVpc2FudAplXHUwMzAxcXVlcnJlCmVcdTAzMDFxdWlwZQplXHUwMzAxcmlnZXIKZVx1MDMwMXJvc2lvbgplcnJldXIKZVx1MDMwMXJ1cHRpb24KZXNjYWxpZXIKZXNwYWRvbgplc3BlXHUwMzAwY2UKZXNwaWVcdTAzMDBnbGUKZXNwb2lyCmVzcHJpdAplc3F1aXZlcgplc3NheWVyCmVzc2VuY2UKZXNzaWV1CmVzc29yZXIKZXN0aW1lCmVzdG9tYWMKZXN0cmFkZQplXHUwMzAxdGFnZVx1MDMwMHJlCmVcdTAzMDF0YWxlcgplXHUwMzAxdGFuY2hlCmVcdTAzMDF0YXRpcXVlCmVcdTAzMDF0ZWluZHJlCmVcdTAzMDF0ZW5kb2lyCmVcdTAzMDF0ZXJuZWwKZVx1MDMwMXRoYW5vbAplXHUwMzAxdGhpcXVlCmV0aG5pZQplXHUwMzAxdGlyZXIKZVx1MDMwMXRvZmZlcgplXHUwMzAxdG9pbGUKZVx1MDMwMXRvbm5hbnQKZVx1MDMwMXRvdXJkaXIKZVx1MDMwMXRyYW5nZQplXHUwMzAxdHJvaXQKZVx1MDMwMXR1ZGUKZXVwaG9yaWUKZVx1MDMwMXZhbHVlcgplXHUwMzAxdmFzaW9uCmVcdTAzMDF2ZW50YWlsCmVcdTAzMDF2aWRlbmNlCmVcdTAzMDF2aXRlcgplXHUwMzAxdm9sdXRpZgplXHUwMzAxdm9xdWVyCmV4YWN0CmV4YWdlXHUwMzAxcmVyCmV4YXVjZXIKZXhjZWxsZXIKZXhjaXRhbnQKZXhjbHVzaWYKZXhjdXNlCmV4ZVx1MDMwMWN1dGVyCmV4ZW1wbGUKZXhlcmNlcgpleGhhbGVyCmV4aG9ydGVyCmV4aWdlbmNlCmV4aWxlcgpleGlzdGVyCmV4b3RpcXVlCmV4cGVcdTAzMDFkaWVyCmV4cGxvcmVyCmV4cG9zZXIKZXhwcmltZXIKZXhxdWlzCmV4dGVuc2lmCmV4dHJhaXJlCmV4dWx0ZXIKZmFibGUKZmFidWxldXgKZmFjZXR0ZQpmYWNpbGUKZmFjdHVyZQpmYWlibGlyCmZhbGFpc2UKZmFtZXV4CmZhbWlsbGUKZmFyY2V1cgpmYXJmZWx1CmZhcmluZQpmYXJvdWNoZQpmYXNjaW5lcgpmYXRhbApmYXRpZ3VlCmZhdWNvbgpmYXV0aWYKZmF2ZXVyCmZhdm9yaQpmZVx1MDMwMWJyaWxlCmZlXHUwMzAxY29uZGVyCmZlXHUwMzAxZGVcdTAzMDFyZXIKZmVcdTAzMDFsaW4KZmVtbWUKZmVcdTAzMDFtdXIKZmVuZG9pcgpmZVx1MDMwMW9kYWwKZmVybWVyCmZlXHUwMzAxcm9jZQpmZXJ2ZXVyCmZlc3RpdmFsCmZldWlsbGUKZmV1dHJlCmZlXHUwMzAxdnJpZXIKZmlhc2NvCmZpY2VsZXIKZmljdGlmCmZpZGVcdTAzMDBsZQpmaWd1cmUKZmlsYXR1cmUKZmlsZXRhZ2UKZmlsaWVcdTAzMDByZQpmaWxsZXVsCmZpbG1lcgpmaWxvdQpmaWx0cmVyCmZpbmFuY2VyCmZpbmlyCmZpb2xlCmZpcm1lCmZpc3N1cmUKZml4ZXIKZmxhaXJlcgpmbGFtbWUKZmxhc3F1ZQpmbGF0dGV1cgpmbGVcdTAzMDFhdQpmbGVcdTAzMDBjaGUKZmxldXIKZmxleGlvbgpmbG9jb24KZmxvcmUKZmx1Y3R1ZXIKZmx1aWRlCmZsdXZpYWwKZm9saWUKZm9uZGVyaWUKZm9uZ2libGUKZm9udGFpbmUKZm9yY2VyCmZvcmdlcm9uCmZvcm11bGVyCmZvcnR1bmUKZm9zc2lsZQpmb3VkcmUKZm91Z2VcdTAzMDByZQpmb3VpbGxlcgpmb3VsdXJlCmZvdXJtaQpmcmFnaWxlCmZyYWlzZQpmcmFuY2hpcgpmcmFwcGVyCmZyYXlldXIKZnJlXHUwMzAxZ2F0ZQpmcmVpbmVyCmZyZWxvbgpmcmVcdTAzMDFtaXIKZnJlXHUwMzAxbmVcdTAzMDFzaWUKZnJlXHUwMzAwcmUKZnJpYWJsZQpmcmljdGlvbgpmcmlzc29uCmZyaXZvbGUKZnJvaWQKZnJvbWFnZQpmcm9udGFsCmZyb3R0ZXIKZnJ1aXQKZnVnaXRpZgpmdWl0ZQpmdXJldXIKZnVyaWV1eApmdXJ0aWYKZnVzaW9uCmZ1dHVyCmdhZ25lcgpnYWxheGllCmdhbGVyaWUKZ2FtYmFkZXIKZ2FyYW50aXIKZ2FyZGllbgpnYXJuaXIKZ2FycmlndWUKZ2F6ZWxsZQpnYXpvbgpnZVx1MDMwMWFudApnZVx1MDMwMWxhdGluZQpnZVx1MDMwMWx1bGUKZ2VuZGFybWUKZ2VcdTAzMDFuZVx1MDMwMXJhbApnZVx1MDMwMW5pZQpnZW5vdQpnZW50aWwKZ2VcdTAzMDFvbG9naWUKZ2VcdTAzMDFvbWVcdTAzMDB0cmUKZ2VcdTAzMDFyYW5pdW0KZ2VybWUKZ2VzdHVlbApnZXlzZXIKZ2liaWVyCmdpY2xlcgpnaXJhZmUKZ2l2cmUKZ2xhY2UKZ2xhaXZlCmdsaXNzZXIKZ2xvYmUKZ2xvaXJlCmdsb3JpZXV4CmdvbGZldXIKZ29tbWUKZ29uZmxlcgpnb3JnZQpnb3JpbGxlCmdvdWRyb24KZ291ZmZyZQpnb3Vsb3QKZ291cGlsbGUKZ291cm1hbmQKZ291dHRlCmdyYWR1ZWwKZ3JhZmZpdGkKZ3JhaW5lCmdyYW5kCmdyYXBwaW4KZ3JhdHVpdApncmF2aXIKZ3JlbmF0CmdyaWZmdXJlCmdyaWxsZXIKZ3JpbXBlcgpncm9nbmVyCmdyb25kZXIKZ3JvdHRlCmdyb3VwZQpncnVnZXIKZ3J1dGllcgpncnV5ZVx1MDMwMHJlCmd1ZVx1MDMwMXBhcmQKZ3VlcnJpZXIKZ3VpZGUKZ3VpbWF1dmUKZ3VpdGFyZQpndXN0YXRpZgpneW1uYXN0ZQpneXJvc3RhdApoYWJpdHVkZQpoYWNob2lyCmhhbHRlCmhhbWVhdQpoYW5nYXIKaGFubmV0b24KaGFyaWNvdApoYXJtb25pZQpoYXJwb24KaGFzYXJkCmhlXHUwMzAxbGl1bQpoZVx1MDMwMW1hdG9tZQpoZXJiZQpoZVx1MDMwMXJpc3NvbgpoZXJtaW5lCmhlXHUwMzAxcm9uCmhlXHUwMzAxc2l0ZXIKaGV1cmV1eApoaWJlcm5lcgpoaWJvdQpoaWxhcmFudApoaXN0b2lyZQpoaXZlcgpob21hcmQKaG9tbWFnZQpob21vZ2VcdTAzMDBuZQpob25uZXVyCmhvbm9yZXIKaG9udGV1eApob3JkZQpob3Jpem9uCmhvcmxvZ2UKaG9ybW9uZQpob3JyaWJsZQpob3VsZXV4CmhvdXNzZQpodWJsb3QKaHVpbGV1eApodW1haW4KaHVtYmxlCmh1bWlkZQpodW1vdXIKaHVybGVyCmh5ZHJvbWVsCmh5Z2llXHUwMzAwbmUKaHltbmUKaHlwbm9zZQppZHlsbGUKaWdub3JlcgppZ3VhbmUKaWxsaWNpdGUKaWxsdXNpb24KaW1hZ2UKaW1iaWJlcgppbWl0ZXIKaW1tZW5zZQppbW1vYmlsZQppbW11YWJsZQppbXBhY3QKaW1wZVx1MDMwMXJpYWwKaW1wbG9yZXIKaW1wb3NlcgppbXByaW1lcgppbXB1dGVyCmluY2FybmVyCmluY2VuZGllCmluY2lkZW50CmluY2xpbmVyCmluY29sb3JlCmluZGV4ZXIKaW5kaWNlCmluZHVjdGlmCmluZVx1MDMwMWRpdAppbmVwdGllCmluZXhhY3QKaW5maW5pCmluZmxpZ2VyCmluZm9ybWVyCmluZnVzaW9uCmluZ2VcdTAzMDFyZXIKaW5oYWxlcgppbmhpYmVyCmluamVjdGVyCmluanVyZQppbm5vY2VudAppbm9jdWxlcgppbm9uZGVyCmluc2NyaXJlCmluc2VjdGUKaW5zaWduZQppbnNvbGl0ZQppbnNwaXJlcgppbnN0aW5jdAppbnN1bHRlcgppbnRhY3QKaW50ZW5zZQppbnRpbWUKaW50cmlndWUKaW50dWl0aWYKaW51dGlsZQppbnZhc2lvbgppbnZlbnRlcgppbnZpdGVyCmludm9xdWVyCmlyb25pcXVlCmlycmFkaWVyCmlycmVcdTAzMDFlbAppcnJpdGVyCmlzb2xlcgppdm9pcmUKaXZyZXNzZQpqYWd1YXIKamFpbGxpcgpqYW1iZQpqYW52aWVyCmphcmRpbgpqYXVnZXIKamF1bmUKamF2ZWxvdApqZXRhYmxlCmpldG9uCmpldWRpCmpldW5lc3NlCmpvaW5kcmUKam9uY2hlcgpqb25nbGVyCmpvdWV1cgpqb3Vpc3NpZgpqb3VybmFsCmpvdmlhbApqb3lhdQpqb3lldXgKanViaWxlcgpqdWdlbWVudApqdW5pb3IKanVwb24KanVyaXN0ZQpqdXN0aWNlCmp1dGV1eApqdXZlXHUwMzAxbmlsZQprYXlhawpraW1vbm8Ka2lvc3F1ZQpsYWJlbApsYWJpYWwKbGFib3VyZXIKbGFjZVx1MDMwMXJlcgpsYWN0b3NlCmxhZ3VuZQpsYWluZQpsYWlzc2VyCmxhaXRpZXIKbGFtYmVhdQpsYW1lbGxlCmxhbXBlCmxhbmNldXIKbGFuZ2FnZQpsYW50ZXJuZQpsYXBpbgpsYXJnZXVyCmxhcm1lCmxhdXJpZXIKbGF2YWJvCmxhdm9pcgpsZWN0dXJlCmxlXHUwMzAxZ2FsCmxlXHUwMzAxZ2VyCmxlXHUwMzAxZ3VtZQpsZXNzaXZlCmxldHRyZQpsZXZpZXIKbGV4aXF1ZQpsZVx1MDMwMXphcmQKbGlhc3NlCmxpYmVcdTAzMDFyZXIKbGlicmUKbGljZW5jZQpsaWNvcm5lCmxpZVx1MDMwMGdlCmxpZVx1MDMwMHZyZQpsaWdhdHVyZQpsaWdvdGVyCmxpZ3VlCmxpbWVyCmxpbWl0ZQpsaW1vbmFkZQpsaW1waWRlCmxpbmVcdTAzMDFhaXJlCmxpbmdvdApsaW9uY2VhdQpsaXF1aWRlCmxpc2llXHUwMzAwcmUKbGlzdGVyCmxpdGhpdW0KbGl0aWdlCmxpdHRvcmFsCmxpdnJldXIKbG9naXF1ZQpsb2ludGFpbgpsb2lzaXIKbG9tYnJpYwpsb3RlcmllCmxvdWVyCmxvdXJkCmxvdXRyZQpsb3V2ZQpsb3lhbApsdWJpZQpsdWNpZGUKbHVjcmF0aWYKbHVldXIKbHVndWJyZQpsdWlzYW50Cmx1bWllXHUwMzAwcmUKbHVuYWlyZQpsdW5kaQpsdXJvbgpsdXR0ZXIKbHV4dWV1eAptYWNoaW5lCm1hZ2FzaW4KbWFnZW50YQptYWdpcXVlCm1haWdyZQptYWlsbG9uCm1haW50aWVuCm1haXJpZQptYWlzb24KbWFqb3JlcgptYWxheGVyCm1hbGVcdTAzMDFmaWNlCm1hbGhldXIKbWFsaWNlCm1hbGxldHRlCm1hbW1vdXRoCm1hbmRhdGVyCm1hbmlhYmxlCm1hbnF1YW50Cm1hbnRlYXUKbWFudWVsCm1hcmF0aG9uCm1hcmJyZQptYXJjaGFuZAptYXJkaQptYXJpdGltZQptYXJxdWV1cgptYXJyb24KbWFydGVsZXIKbWFzY290dGUKbWFzc2lmCm1hdGVcdTAzMDFyaWVsCm1hdGllXHUwMzAwcmUKbWF0cmFxdWUKbWF1ZGlyZQptYXVzc2FkZQptYXV2ZQptYXhpbWFsCm1lXHUwMzAxY2hhbnQKbWVcdTAzMDFjb25udQptZVx1MDMwMWRhaWxsZQptZVx1MDMwMWRlY2luCm1lXHUwMzAxZGl0ZXIKbWVcdTAzMDFkdXNlCm1laWxsZXVyCm1lXHUwMzAxbGFuZ2UKbWVcdTAzMDFsb2RpZQptZW1icmUKbWVcdTAzMDFtb2lyZQptZW5hY2VyCm1lbmVyCm1lbmhpcgptZW5zb25nZQptZW50b3IKbWVyY3JlZGkKbWVcdTAzMDFyaXRlCm1lcmxlCm1lc3NhZ2VyCm1lc3VyZQptZVx1MDMwMXRhbAptZVx1MDMwMXRlXHUwMzAxb3JlCm1lXHUwMzAxdGhvZGUKbWVcdTAzMDF0aWVyCm1ldWJsZQptaWF1bGVyCm1pY3JvYmUKbWlldHRlCm1pZ25vbgptaWdyZXIKbWlsaWV1Cm1pbGxpb24KbWltaXF1ZQptaW5jZQptaW5lXHUwMzAxcmFsCm1pbmltYWwKbWlub3JlcgptaW51dGUKbWlyYWNsZQptaXJvaXRlcgptaXNzaWxlCm1peHRlCm1vYmlsZQptb2Rlcm5lCm1vZWxsZXV4Cm1vbmRpYWwKbW9uaXRldXIKbW9ubmFpZQptb25vdG9uZQptb25zdHJlCm1vbnRhZ25lCm1vbnVtZW50Cm1vcXVldXIKbW9yY2VhdQptb3JzdXJlCm1vcnRpZXIKbW90ZXVyCm1vdGlmCm1vdWNoZQptb3VmbGUKbW91bGluCm1vdXNzb24KbW91dG9uCm1vdXZhbnQKbXVsdGlwbGUKbXVuaXRpb24KbXVyYWlsbGUKbXVyZVx1MDMwMG5lCm11cm11cmUKbXVzY2xlCm11c2VcdTAzMDF1bQptdXNpY2llbgptdXRhdGlvbgptdXRlcgptdXR1ZWwKbXlyaWFkZQpteXJ0aWxsZQpteXN0ZVx1MDMwMHJlCm15dGhpcXVlCm5hZ2V1cgpuYXBwZQpuYXJxdW9pcwpuYXJyZXIKbmF0YXRpb24KbmF0aW9uCm5hdHVyZQpuYXVmcmFnZQpuYXV0aXF1ZQpuYXZpcmUKbmVcdTAzMDFidWxldXgKbmVjdGFyCm5lXHUwMzAxZmFzdGUKbmVcdTAzMDFnYXRpb24KbmVcdTAzMDFnbGlnZXIKbmVcdTAzMDFnb2NpZXIKbmVpZ2UKbmVydmV1eApuZXR0b3llcgpuZXVyb25lCm5ldXRyb24KbmV2ZXUKbmljaGUKbmlja2VsCm5pdHJhdGUKbml2ZWF1Cm5vYmxlCm5vY2lmCm5vY3R1cm5lCm5vaXJjZXVyCm5vaXNldHRlCm5vbWFkZQpub21icmV1eApub21tZXIKbm9ybWF0aWYKbm90YWJsZQpub3RpZmllcgpub3RvaXJlCm5vdXJyaXIKbm91dmVhdQpub3ZhdGV1cgpub3ZlbWJyZQpub3ZpY2UKbnVhZ2UKbnVhbmNlcgpudWlyZQpudWlzaWJsZQpudW1lXHUwMzAxcm8KbnVwdGlhbApudXF1ZQpudXRyaXRpZgpvYmVcdTAzMDFpcgpvYmplY3RpZgpvYmxpZ2VyCm9ic2N1cgpvYnNlcnZlcgpvYnN0YWNsZQpvYnRlbmlyCm9idHVyZXIKb2NjYXNpb24Kb2NjdXBlcgpvY2VcdTAzMDFhbgpvY3RvYnJlCm9jdHJveWVyCm9jdHVwbGVyCm9jdWxhaXJlCm9kZXVyCm9kb3JhbnQKb2ZmZW5zZXIKb2ZmaWNpZXIKb2ZmcmlyCm9naXZlCm9pc2VhdQpvaXNpbGxvbgpvbGZhY3RpZgpvbGl2aWVyCm9tYnJhZ2UKb21ldHRyZQpvbmN0dWV1eApvbmR1bGVyCm9uZVx1MDMwMXJldXgKb25pcmlxdWUKb3BhbGUKb3BhcXVlCm9wZVx1MDMwMXJlcgpvcGluaW9uCm9wcG9ydHVuCm9wcHJpbWVyCm9wdGVyCm9wdGlxdWUKb3JhZ2V1eApvcmFuZ2UKb3JiaXRlCm9yZG9ubmVyCm9yZWlsbGUKb3JnYW5lCm9yZ3VlaWwKb3JpZmljZQpvcm5lbWVudApvcnF1ZQpvcnRpZQpvc2NpbGxlcgpvc21vc2UKb3NzYXR1cmUKb3RhcmllCm91cmFnYW4Kb3Vyc29uCm91dGlsCm91dHJhZ2VyCm91dnJhZ2UKb3ZhdGlvbgpveHlkZQpveHlnZVx1MDMwMG5lCm96b25lCnBhaXNpYmxlCnBhbGFjZQpwYWxtYXJlXHUwMzAwcwpwYWxvdXJkZQpwYWxwZXIKcGFuYWNoZQpwYW5kYQpwYW5nb2xpbgpwYW5pcXVlcgpwYW5uZWF1CnBhbm9yYW1hCnBhbnRhbG9uCnBhcGF5ZQpwYXBpZXIKcGFwb3RlcgpwYXB5cnVzCnBhcmFkb3hlCnBhcmNlbGxlCnBhcmVzc2UKcGFyZnVtZXIKcGFybGVyCnBhcm9sZQpwYXJyYWluCnBhcnNlbWVyCnBhcnRhZ2VyCnBhcnVyZQpwYXJ2ZW5pcgpwYXNzaW9uCnBhc3RlXHUwMzAwcXVlCnBhdGVybmVsCnBhdGllbmNlCnBhdHJvbgpwYXZpbGxvbgpwYXZvaXNlcgpwYXllcgpwYXlzYWdlCnBlaWduZQpwZWludHJlCnBlbGFnZQpwZVx1MDMwMWxpY2FuCnBlbGxlCnBlbG91c2UKcGVsdWNoZQpwZW5kdWxlCnBlXHUwMzAxbmVcdTAzMDF0cmVyCnBlXHUwMzAxbmlibGUKcGVuc2lmCnBlXHUwMzAxbnVyaWUKcGVcdTAzMDFwaXRlCnBlXHUwMzAxcGx1bQpwZXJkcml4CnBlcmZvcmVyCnBlXHUwMzAxcmlvZGUKcGVybXV0ZXIKcGVycGxleGUKcGVyc2lsCnBlcnRlCnBlc2VyCnBlXHUwMzAxdGFsZQpwZXRpdApwZVx1MDMwMXRyaXIKcGV1cGxlCnBoYXJhb24KcGhvYmllCnBob3F1ZQpwaG90b24KcGhyYXNlCnBoeXNpcXVlCnBpYW5vCnBpY3R1cmFsCnBpZVx1MDMwMGNlCnBpZXJyZQpwaWV1dnJlCnBpbG90ZQpwaW5jZWF1CnBpcGV0dGUKcGlxdWVyCnBpcm9ndWUKcGlzY2luZQpwaXN0b24KcGl2b3RlcgpwaXhlbApwaXp6YQpwbGFjYXJkCnBsYWZvbmQKcGxhaXNpcgpwbGFuZXIKcGxhcXVlCnBsYXN0cm9uCnBsYXRlYXUKcGxldXJlcgpwbGV4dXMKcGxpYWdlCnBsb21iCnBsb25nZXIKcGx1aWUKcGx1bWFnZQpwb2NoZXR0ZQpwb2VcdTAzMDFzaWUKcG9lXHUwMzAwdGUKcG9pbnRlCnBvaXJpZXIKcG9pc3Nvbgpwb2l2cmUKcG9sYWlyZQpwb2xpY2llcgpwb2xsZW4KcG9seWdvbmUKcG9tbWFkZQpwb21waWVyCnBvbmN0dWVsCnBvbmRlXHUwMzAxcmVyCnBvbmV5CnBvcnRpcXVlCnBvc2l0aW9uCnBvc3NlXHUwMzAxZGVyCnBvc3R1cmUKcG90YWdlcgpwb3RlYXUKcG90aW9uCnBvdWNlCnBvdWxhaW4KcG91bW9uCnBvdXJwcmUKcG91c3Npbgpwb3V2b2lyCnByYWlyaWUKcHJhdGlxdWUKcHJlXHUwMzAxY2lldXgKcHJlXHUwMzAxZGlyZQpwcmVcdTAzMDFmaXhlCnByZVx1MDMwMWx1ZGUKcHJlXHUwMzAxbm9tCnByZVx1MDMwMXNlbmNlCnByZVx1MDMwMXRleHRlCnByZVx1MDMwMXZvaXIKcHJpbWl0aWYKcHJpbmNlCnByaXNvbgpwcml2ZXIKcHJvYmxlXHUwMzAwbWUKcHJvY2VcdTAzMDFkZXIKcHJvZGlnZQpwcm9mb25kCnByb2dyZVx1MDMwMHMKcHJvaWUKcHJvamV0ZXIKcHJvbG9ndWUKcHJvbWVuZXIKcHJvcHJlCnByb3NwZVx1MDMwMHJlCnByb3RlXHUwMzAxZ2VyCnByb3Vlc3NlCnByb3ZlcmJlCnBydWRlbmNlCnBydW5lYXUKcHN5Y2hvc2UKcHVibGljCnB1Y2Vyb24KcHVpc2VyCnB1bHBlCnB1bHNhcgpwdW5haXNlCnB1bml0aWYKcHVwaXRyZQpwdXJpZmllcgpwdXp6bGUKcHlyYW1pZGUKcXVhc2FyCnF1ZXJlbGxlCnF1ZXN0aW9uCnF1aWVcdTAzMDF0dWRlCnF1aXR0ZXIKcXVvdGllbnQKcmFjaW5lCnJhY29udGVyCnJhZGlldXgKcmFnb25kaW4KcmFpZGV1cgpyYWlzaW4KcmFsZW50aXIKcmFsbG9uZ2UKcmFtYXNzZXIKcmFwaWRlCnJhc2FnZQpyYXRpc3NlcgpyYXZhZ2VyCnJhdmluCnJheW9ubmVyCnJlXHUwMzAxYWN0aWYKcmVcdTAzMDFhZ2lyCnJlXHUwMzAxYWxpc2VyCnJlXHUwMzAxYW5pbWVyCnJlY2V2b2lyCnJlXHUwMzAxY2l0ZXIKcmVcdTAzMDFjbGFtZXIKcmVcdTAzMDFjb2x0ZXIKcmVjcnV0ZXIKcmVjdWxlcgpyZWN5Y2xlcgpyZVx1MDMwMWRpZ2VyCnJlZG91dGVyCnJlZmFpcmUKcmVcdTAzMDFmbGV4ZQpyZVx1MDMwMWZvcm1lcgpyZWZyYWluCnJlZnVnZQpyZVx1MDMwMWdhbGllbgpyZVx1MDMwMWdpb24KcmVcdTAzMDFnbGFnZQpyZVx1MDMwMWd1bGllcgpyZVx1MDMwMWl0ZVx1MDMwMXJlcgpyZWpldGVyCnJlam91ZXIKcmVsYXRpZgpyZWxldmVyCnJlbGllZgpyZW1hcnF1ZQpyZW1lXHUwMzAwZGUKcmVtaXNlCnJlbW9udGVyCnJlbXBsaXIKcmVtdWVyCnJlbmFyZApyZW5mb3J0CnJlbmlmbGVyCnJlbm9uY2VyCnJlbnRyZXIKcmVudm9pCnJlcGxpZXIKcmVwb3J0ZXIKcmVwcmlzZQpyZXB0aWxlCnJlcXVpbgpyZVx1MDMwMXNlcnZlCnJlXHUwMzAxc2luZXV4CnJlXHUwMzAxc291ZHJlCnJlc3BlY3QKcmVzdGVyCnJlXHUwMzAxc3VsdGF0CnJlXHUwMzAxdGFibGlyCnJldGVuaXIKcmVcdTAzMDF0aWN1bGUKcmV0b21iZXIKcmV0cmFjZXIKcmVcdTAzMDF1bmlvbgpyZVx1MDMwMXVzc2lyCnJldmFuY2hlCnJldml2cmUKcmVcdTAzMDF2b2x0ZQpyZVx1MDMwMXZ1bHNpZgpyaWNoZXNzZQpyaWRlYXUKcmlldXIKcmlnaWRlCnJpZ29sZXIKcmluY2VyCnJpcG9zdGVyCnJpc2libGUKcmlzcXVlCnJpdHVlbApyaXZhbApyaXZpZVx1MDMwMHJlCnJvY2hldXgKcm9tYW5jZQpyb21wcmUKcm9uY2UKcm9uZGluCnJvc2VhdQpyb3NpZXIKcm90YXRpZgpyb3Rvcgpyb3R1bGUKcm91Z2UKcm91aWxsZQpyb3VsZWF1CnJvdXRpbmUKcm95YXVtZQpydWJhbgpydWJpcwpydWNoZQpydWVsbGUKcnVndWV1eApydWluZXIKcnVpc3NlYXUKcnVzZXIKcnVzdGlxdWUKcnl0aG1lCnNhYmxlcgpzYWJvdGVyCnNhYnJlCnNhY29jaGUKc2FmYXJpCnNhZ2Vzc2UKc2Fpc2lyCnNhbGFkZQpzYWxpdmUKc2Fsb24Kc2FsdWVyCnNhbWVkaQpzYW5jdGlvbgpzYW5nbGllcgpzYXJjYXNtZQpzYXJkaW5lCnNhdHVyZXIKc2F1Z3JlbnUKc2F1bW9uCnNhdXRlcgpzYXV2YWdlCnNhdmFudApzYXZvbm5lcgpzY2FscGVsCnNjYW5kYWxlCnNjZVx1MDMwMWxlXHUwMzAxcmF0CnNjZVx1MDMwMW5hcmlvCnNjZXB0cmUKc2NoZVx1MDMwMW1hCnNjaWVuY2UKc2NpbmRlcgpzY29yZQpzY3J1dGluCnNjdWxwdGVyCnNlXHUwMzAxYW5jZQpzZVx1MDMwMWNhYmxlCnNlXHUwMzAxY2hlcgpzZWNvdWVyCnNlXHUwMzAxY3JlXHUwMzAxdGVyCnNlXHUwMzAxZGF0aWYKc2VcdTAzMDFkdWlyZQpzZWlnbmV1cgpzZVx1MDMwMWpvdXIKc2VcdTAzMDFsZWN0aWYKc2VtYWluZQpzZW1ibGVyCnNlbWVuY2UKc2VcdTAzMDFtaW5hbApzZVx1MDMwMW5hdGV1cgpzZW5zaWJsZQpzZW50ZW5jZQpzZVx1MDMwMXBhcmVyCnNlXHUwMzAxcXVlbmNlCnNlcmVpbgpzZXJnZW50CnNlXHUwMzAxcmlldXgKc2VycnVyZQpzZVx1MDMwMXJ1bQpzZXJ2aWNlCnNlXHUwMzAxc2FtZQpzZVx1MDMwMXZpcgpzZXZyYWdlCnNleHR1cGxlCnNpZGVcdTAzMDFyYWwKc2llXHUwMzAwY2xlCnNpZVx1MDMwMWdlcgpzaWZmbGVyCnNpZ2xlCnNpZ25hbApzaWxlbmNlCnNpbGljaXVtCnNpbXBsZQpzaW5jZVx1MDMwMHJlCnNpbmlzdHJlCnNpcGhvbgpzaXJvcApzaXNtaXF1ZQpzaXR1ZXIKc2tpZXIKc29jaWFsCnNvY2xlCnNvZGl1bQpzb2lnbmV1eApzb2xkYXQKc29sZWlsCnNvbGl0dWRlCnNvbHVibGUKc29tYnJlCnNvbW1laWwKc29tbm9sZXIKc29uZGUKc29uZ2V1cgpzb25uZXR0ZQpzb25vcmUKc29yY2llcgpzb3J0aXIKc29zaWUKc290dGlzZQpzb3VjaWV1eApzb3VkdXJlCnNvdWZmbGUKc291bGV2ZXIKc291cGFwZQpzb3VyY2UKc291dGlyZXIKc291dmVuaXIKc3BhY2lldXgKc3BhdGlhbApzcGVcdTAzMDFjaWFsCnNwaGVcdTAzMDByZQpzcGlyYWwKc3RhYmxlCnN0YXRpb24Kc3Rlcm51bQpzdGltdWx1cwpzdGlwdWxlcgpzdHJpY3QKc3R1ZGlldXgKc3R1cGV1cgpzdHlsaXN0ZQpzdWJsaW1lCnN1YnN0cmF0CnN1YnRpbApzdWJ2ZW5pcgpzdWNjZVx1MDMwMHMKc3VjcmUKc3VmZml4ZQpzdWdnZVx1MDMwMXJlcgpzdWl2ZXVyCnN1bGZhdGUKc3VwZXJiZQpzdXBwbGllcgpzdXJmYWNlCnN1cmljYXRlCnN1cm1lbmVyCnN1cnByaXNlCnN1cnNhdXQKc3VydmllCnN1c3BlY3QKc3lsbGFiZQpzeW1ib2xlCnN5bWVcdTAzMDF0cmllCnN5bmFwc2UKc3ludGF4ZQpzeXN0ZVx1MDMwMG1lCnRhYmFjCnRhYmxpZXIKdGFjdGlsZQp0YWlsbGVyCnRhbGVudAp0YWxpc21hbgp0YWxvbm5lcgp0YW1ib3VyCnRhbWlzZXIKdGFuZ2libGUKdGFwaXMKdGFxdWluZXIKdGFyZGVyCnRhcmlmCnRhcnRpbmUKdGFzc2UKdGF0YW1pCnRhdG91YWdlCnRhdXBlCnRhdXJlYXUKdGF4ZXIKdGVcdTAzMDFtb2luCnRlbXBvcmVsCnRlbmFpbGxlCnRlbmRyZQp0ZW5ldXIKdGVuaXIKdGVuc2lvbgp0ZXJtaW5lcgp0ZXJuZQp0ZXJyaWJsZQp0ZVx1MDMwMXRpbmUKdGV4dGUKdGhlXHUwMzAwbWUKdGhlXHUwMzAxb3JpZQp0aGVcdTAzMDFyYXBpZQp0aG9yYXgKdGliaWEKdGllXHUwMzAwZGUKdGltaWRlCnRpcmVsaXJlCnRpcm9pcgp0aXNzdQp0aXRhbmUKdGl0cmUKdGl0dWJlcgp0b2JvZ2dhbgp0b2xlXHUwMzAxcmFudAp0b21hdGUKdG9uaXF1ZQp0b25uZWF1CnRvcG9ueW1lCnRvcmNoZQp0b3JkcmUKdG9ybmFkZQp0b3JwaWxsZQp0b3JyZW50CnRvcnNlCnRvcnR1ZQp0b3RlbQp0b3VjaGVyCnRvdXJuYWdlCnRvdXNzZXIKdG94aW5lCnRyYWN0aW9uCnRyYWZpYwp0cmFnaXF1ZQp0cmFoaXIKdHJhaW4KdHJhbmNoZXIKdHJhdmFpbAp0cmVcdTAzMDBmbGUKdHJlbXBlcgp0cmVcdTAzMDFzb3IKdHJldWlsCnRyaWFnZQp0cmlidW5hbAp0cmljb3Rlcgp0cmlsb2dpZQp0cmlvbXBoZQp0cmlwbGVyCnRyaXR1cmVyCnRyaXZpYWwKdHJvbWJvbmUKdHJvbmMKdHJvcGljYWwKdHJvdXBlYXUKdHVpbGUKdHVsaXBlCnR1bXVsdGUKdHVubmVsCnR1cmJpbmUKdHV0ZXVyCnR1dG95ZXIKdHV5YXUKdHltcGFuCnR5cGhvbgp0eXBpcXVlCnR5cmFuCnVidWVzcXVlCnVsdGltZQp1bHRyYXNvbgp1bmFuaW1lCnVuaWZpZXIKdW5pb24KdW5pcXVlCnVuaXRhaXJlCnVuaXZlcnMKdXJhbml1bQp1cmJhaW4KdXJ0aWNhbnQKdXNhZ2UKdXNpbmUKdXN1ZWwKdXN1cmUKdXRpbGUKdXRvcGllCnZhY2FybWUKdmFjY2luCnZhZ2Fib25kCnZhZ3VlCnZhaWxsYW50CnZhaW5jcmUKdmFpc3NlYXUKdmFsYWJsZQp2YWxpc2UKdmFsbG9uCnZhbHZlCnZhbXBpcmUKdmFuaWxsZQp2YXBldXIKdmFyaWVyCnZhc2V1eAp2YXNzYWwKdmFzdGUKdmVjdGV1cgp2ZWRldHRlCnZlXHUwMzAxZ2VcdTAzMDF0YWwKdmVcdTAzMDFoaWN1bGUKdmVpbmFyZAp2ZVx1MDMwMWxvY2UKdmVuZHJlZGkKdmVcdTAzMDFuZVx1MDMwMXJlcgp2ZW5nZXIKdmVuaW1ldXgKdmVudG91c2UKdmVyZHVyZQp2ZVx1MDMwMXJpbgp2ZXJuaXIKdmVycm91CnZlcnNlcgp2ZXJ0dQp2ZXN0b24KdmVcdTAzMDF0ZVx1MDMwMXJhbgp2ZVx1MDMwMXR1c3RlCnZleGFudAp2ZXhlcgp2aWFkdWMKdmlhbmRlCnZpY3RvaXJlCnZpZGFuZ2UKdmlkZVx1MDMwMW8KdmlnbmV0dGUKdmlndWV1cgp2aWxhaW4KdmlsbGFnZQp2aW5haWdyZQp2aW9sb24KdmlwZVx1MDMwMHJlCnZpcmVtZW50CnZpcnR1b3NlCnZpcnVzCnZpc2FnZQp2aXNldXIKdmlzaW9uCnZpc3F1ZXV4CnZpc3VlbAp2aXRhbAp2aXRlc3NlCnZpdGljb2xlCnZpdHJpbmUKdml2YWNlCnZpdmlwYXJlCnZvY2F0aW9uCnZvZ3Vlcgp2b2lsZQp2b2lzaW4Kdm9pdHVyZQp2b2xhaWxsZQp2b2xjYW4Kdm9sdGlnZXIKdm9sdW1lCnZvcmFjZQp2b3J0ZXgKdm90ZXIKdm91bG9pcgp2b3lhZ2UKdm95ZWxsZQp3YWdvbgp4ZVx1MDMwMW5vbgp5YWNodAp6ZVx1MDMwMGJyZQp6ZVx1MDMwMW5pdGgKemVzdGUKem9vbG9naWVgLnNwbGl0KCJcbiIpOwoKICAvLyBub2RlX21vZHVsZXMvQHNjdXJlL2JpcDM5L2VzbS93b3JkbGlzdHMvaXRhbGlhbi5qcwogIHZhciB3b3JkbGlzdDQgPSBgYWJhY28KYWJiYWdsaW8KYWJiaW5hdG8KYWJldGUKYWJpc3NvCmFib2xpcmUKYWJyYXNpdm8KYWJyb2dhdG8KYWNjYWRlcmUKYWNjZW5ubwphY2N1c2F0bwphY2V0b25lCmFjaGlsbGUKYWNpZG8KYWNxdWEKYWNyZQphY3JpbGljbwphY3JvYmF0YQphY3V0bwphZGFnaW8KYWRkZWJpdG8KYWRkb21lCmFkZWd1YXRvCmFkZXJpcmUKYWRpcGUKYWRvdHRhcmUKYWR1bGFyZQphZmZhYmlsZQphZmZldHRvCmFmZmlzc28KYWZmcmFudG8KYWZvcmlzbWEKYWZvc28KYWZyaWNhbm8KYWdhdmUKYWdlbnRlCmFnZXZvbGUKYWdnYW5jaW8KYWdpcmUKYWdpdGFyZQphZ29uaXNtbwphZ3JpY29sbwphZ3J1bWV0bwphZ3V6em8KYWxhYmFyZGEKYWxhdG8KYWxiYXRybwphbGJlcmF0bwphbGJvCmFsYnVtZQphbGNlCmFsY29saWNvCmFsZXR0b25lCmFsZmEKYWxnZWJyYQphbGlhbnRlCmFsaWJpCmFsaW1lbnRvCmFsbGFnYXRvCmFsbGVncm8KYWxsaWV2bwphbGxvZG9sYQphbGx1c2l2bwphbG1lbm8KYWxvZ2VubwphbHBhY2EKYWxwZXN0cmUKYWx0YWxlbmEKYWx0ZXJubwphbHRpY2NpbwphbHRyb3ZlCmFsdW5ubwphbHZlb2xvCmFsemFyZQphbWFsZ2FtYQphbWFuaXRhCmFtYXJlbmEKYW1iaXRvCmFtYnJhdG8KYW1lYmEKYW1lcmljYQphbWV0aXN0YQphbWljbwphbW1hc3NvCmFtbWVuZGEKYW1taXJhcmUKYW1tb25pdG8KYW1vcmUKYW1waW8KYW1wbGlhcmUKYW11bGV0bwphbmFjYXJkbwphbmFncmFmZQphbmFsaXN0YQphbmFyY2hpYQphbmF0cmEKYW5jYQphbmNlbGxhCmFuY29yYQphbmRhcmUKYW5kcmVhCmFuZWxsbwphbmdlbG8KYW5nb2xhcmUKYW5ndXN0bwphbmltYQphbm5lZ2FyZQphbm5pZGF0bwphbm5vCmFubnVuY2lvCmFub25pbW8KYW50aWNpcG8KYW56aQphcGF0aWNvCmFwZXJ0dXJhCmFwb2RlCmFwcGFyaXJlCmFwcGV0aXRvCmFwcG9nZ2lvCmFwcHJvZG8KYXBwdW50bwphcHJpbGUKYXJhYmljYQphcmFjaGlkZQphcmFnb3N0YQphcmFsZGljYQphcmFuY2lvCmFyYXR1cmEKYXJhenpvCmFyYml0cm8KYXJjaGl2aW8KYXJkaXRvCmFyZW5pbGUKYXJnZW50bwphcmdpbmUKYXJndXRvCmFyaWEKYXJtb25pYQphcm5lc2UKYXJyZWRhdG8KYXJyaW5nYQphcnJvc3RvCmFyc2VuaWNvCmFyc28KYXJ0ZWZpY2UKYXJ6aWxsbwphc2NpdXR0bwphc2NvbHRvCmFzZXBzaQphc2V0dGljbwphc2ZhbHRvCmFzaW5vCmFzb2xhCmFzcGlyYXRvCmFzcHJvCmFzc2FnZ2lvCmFzc2UKYXNzb2x1dG8KYXNzdXJkbwphc3RhCmFzdGVudXRvCmFzdGljZQphc3RyYXR0bwphdGF2aWNvCmF0ZWlzbW8KYXRvbWljbwphdG9ubwphdHRlc2EKYXR0aXZhcmUKYXR0b3JubwphdHRyaXRvCmF0dHVhbGUKYXVzaWxpbwphdXN0cmlhCmF1dGlzdGEKYXV0b25vbW8KYXV0dW5ubwphdmFuemF0bwphdmVyZQphdnZlbmlyZQphdnZpc28KYXZ2b2xnZXJlCmF6aW9uZQphem90bwphenppbW8KYXp6dXJybwpiYWJlbGUKYmFjY2FubwpiYWNpbm8KYmFjbwpiYWRlc3NhCmJhZGlsYXRhCmJhZ25hdG8KYmFpdGEKYmFsY29uZQpiYWxkbwpiYWxlbmEKYmFsbGF0YQpiYWx6YW5vCmJhbWJpbm8KYmFuZGlyZQpiYXJhb25kYQpiYXJiYXJvCmJhcmNhCmJhcml0b25vCmJhcmx1bWUKYmFyb2NjbwpiYXNpbGljbwpiYXNzbwpiYXRvc3RhCmJhdHR1dG8KYmF1bGUKYmF2YQpiYXZvc2EKYmVjY28KYmVmZmEKYmVsZ2lvCmJlbHZhCmJlbmRhCmJlbmV2b2xlCmJlbmlnbm8KYmVuemluYQpiZXJlCmJlcmxpbmEKYmV0YQpiaWJpdGEKYmljaQpiaWRvbmUKYmlmaWRvCmJpZ2EKYmlsYW5jaWEKYmltYm8KYmlub2NvbG8KYmlvbG9nbwpiaXBlZGUKYmlwb2xhcmUKYmlyYmFudGUKYmlycmEKYmlzY290dG8KYmlzZXN0bwpiaXNub25ubwpiaXNvbnRlCmJpc3R1cmkKYml6emFycm8KYmxhbmRvCmJsYXR0YQpib2xsaXRvCmJvbmlmaWNvCmJvcmRvCmJvc2NvCmJvdGFuaWNvCmJvdHRpbm8KYm96em9sbwpicmFjY2lvCmJyYWRpcG8KYnJhbWEKYnJhbmNhCmJyYXZ1cmEKYnJldGVsbGEKYnJldmV0dG8KYnJlenphCmJyaWdsaWEKYnJpbGxhbnRlCmJyaW5kYXJlCmJyb2Njb2xvCmJyb2RvCmJyb256aW5hCmJydWxsbwpicnVubwpidWJib25lCmJ1Y2EKYnVkaW5vCmJ1ZmZvbmUKYnVpbwpidWxibwpidW9ubwpidXJsb25lCmJ1cnJhc2NhCmJ1c3NvbGEKYnVzdGEKY2FkZXR0bwpjYWR1Y28KY2FsYW1hcm8KY2FsY29sbwpjYWxlc3NlCmNhbGlicm8KY2FsbW8KY2Fsb3JpYQpjYW1idXNhCmNhbWVyYXRhCmNhbWljaWEKY2FtbWlubwpjYW1vbGEKY2FtcGFsZQpjYW5hcGEKY2FuZGVsYQpjYW5lCmNhbmlubwpjYW5vdHRvCmNhbnRpbmEKY2FwYWNlCmNhcGVsbG8KY2FwaXRvbG8KY2Fwb2dpcm8KY2FwcGVybwpjYXByYQpjYXBzdWxhCmNhcmFwYWNlCmNhcmNhc3NhCmNhcmRvCmNhcmlzbWEKY2Fyb3ZhbmEKY2FycmV0dG8KY2FydG9saW5hCmNhc2FjY2lvCmNhc2NhdGEKY2FzZXJtYQpjYXNvCmNhc3NvbmUKY2FzdGVsbG8KY2FzdWFsZQpjYXRhc3RhCmNhdGVuYQpjYXRyYW1lCmNhdXRvCmNhdmlsbG8KY2VkaWJpbGUKY2VkcmF0YQpjZWZhbG8KY2VsZWJyZQpjZWxsdWxhcmUKY2VuYQpjZW5vbmUKY2VudGVzaW1vCmNlcmFtaWNhCmNlcmNhcmUKY2VydG8KY2VydW1lCmNlcnZlbGxvCmNlc29pYQpjZXNwbwpjZXRvCmNoZWxhCmNoaWFybwpjaGljY2EKY2hpZWRlcmUKY2hpbWVyYQpjaGluYQpjaGlydXJnbwpjaGl0YXJyYQpjaWFvCmNpY2xpc21vCmNpZnJhcmUKY2lnbm8KY2lsaW5kcm8KY2lvdHRvbG8KY2lyY2EKY2lycm9zaQpjaXRyaWNvCmNpdHRhZGlubwpjaXVmZm8KY2l2ZXR0YQpjaXZpbGUKY2xhc3NpY28KY2xpbmljYQpjbG9ybwpjb2Njbwpjb2RhcmRvCmNvZGljZQpjb2VyZW50ZQpjb2dub21lCmNvbGxhcmUKY29sbWF0bwpjb2xvcmUKY29scG9zbwpjb2x0aXZhdG8KY29semEKY29tYQpjb21ldGEKY29tbWFuZG8KY29tb2RvCmNvbXB1dGVyCmNvbXVuZQpjb25jaXNvCmNvbmR1cnJlCmNvbmZlcm1hCmNvbmdlbGFyZQpjb25pdWdlCmNvbm5lc3NvCmNvbm9zY2VyZQpjb25zdW1vCmNvbnRpbnVvCmNvbnZlZ25vCmNvcGVydG8KY29waW9uZQpjb3BwaWEKY29wcmljYXBvCmNvcmF6emEKY29yZGF0YQpjb3JpY2F0bwpjb3JuaWNlCmNvcm9sbGEKY29ycG8KY29ycmVkbwpjb3JzaWEKY29ydGVzZQpjb3NtaWNvCmNvc3RhbnRlCmNvdHR1cmEKY292YXRvCmNyYXRlcmUKY3JhdmF0dGEKY3JlYXRvCmNyZWRlcmUKY3JlbW9zbwpjcmVzY2l0YQpjcmV0YQpjcmljZXRvCmNyaW5hbGUKY3Jpc2kKY3JpdGljbwpjcm9jZQpjcm9uYWNhCmNyb3N0YXRhCmNydWNpYWxlCmNydXNjYQpjdWNpcmUKY3VjdWxvCmN1Z2lubwpjdWxsYXRvCmN1cG9sYQpjdXJhdG9yZQpjdXJzb3JlCmN1cnZvCmN1c2Npbm8KY3VzdG9kZQpkYWRvCmRhaW5vCmRhbG1hdGEKZGFtZXJpbm8KZGFuaWVsYQpkYW5ub3NvCmRhbnphcmUKZGF0YXRvCmRhdmFudGkKZGF2dmVybwpkZWJ1dHRvCmRlY2VubmlvCmRlY2lzbwpkZWNsaW5vCmRlY29sbG8KZGVjcmV0bwpkZWRpY2F0bwpkZWZpbml0bwpkZWZvcm1lCmRlZ25vCmRlbGVnYXJlCmRlbGZpbm8KZGVsaXJpbwpkZWx0YQpkZW1lbnphCmRlbm90YXRvCmRlbnRybwpkZXBvc2l0bwpkZXJhcGF0YQpkZXJpdmFyZQpkZXJvZ2EKZGVzY3JpdHRvCmRlc2VydG8KZGVzaWRlcmlvCmRlc3VtZXJlCmRldGVyc2l2bwpkZXZvdG8KZGlhbWV0cm8KZGljZW1icmUKZGllZHJvCmRpZmVzbwpkaWZmdXNvCmRpZ2VyaXJlCmRpZ2l0YWxlCmRpbHV2aW8KZGluYW1pY28KZGlubmFuemkKZGlwaW50bwpkaXBsb21hCmRpcG9sbwpkaXJhZGFyZQpkaXJlCmRpcm90dG8KZGlydXBvCmRpc2FnaW8KZGlzY3JldG8KZGlzZmFyZQpkaXNnZWxvCmRpc3Bvc3RvCmRpc3RhbnphCmRpc3VtYW5vCmRpdG8KZGl2YW5vCmRpdmVsdG8KZGl2aWRlcmUKZGl2b3JhdG8KZG9ibG9uZQpkb2NlbnRlCmRvZ2FuYWxlCmRvZ21hCmRvbGNlCmRvbWF0bwpkb21lbmljYQpkb21pbmFyZQpkb25kb2xvCmRvbm8KZG9ybWlyZQpkb3RlCmRvdHRvcmUKZG92dXRvCmRvenppbmEKZHJhZ28KZHJ1aWRvCmR1YmJpbwpkdWJpdGFyZQpkdWNhbGUKZHVuYQpkdW9tbwpkdXBsaWNlCmR1cmF0dXJvCmViYW5vCmVjY2Vzc28KZWNjbwplY2xpc3NpCmVjb25vbWlhCmVkZXJhCmVkaWNvbGEKZWRpbGUKZWRpdG9yaWEKZWR1Y2FyZQplZ2Vtb25pYQplZ2xpCmVnb2lzbW8KZWdyZWdpbwplbGFib3JhdG8KZWxhcmdpcmUKZWxlZ2FudGUKZWxlbmNhdG8KZWxldHRvCmVsZXZhcmUKZWxmaWNvCmVsaWNhCmVsbW8KZWxzYQplbHVzbwplbWFuYXRvCmVtYmxlbWEKZW1lc3NvCmVtaXJvCmVtb3Rpdm8KZW1vemlvbmUKZW1waXJpY28KZW11bG8KZW5kZW1pY28KZW5kdXJvCmVuZXJnaWEKZW5mYXNpCmVub3RlY2EKZW50cmFyZQplbnppbWEKZXBhdGl0ZQplcGlsb2dvCmVwaXNvZGlvCmVwb2NhbGUKZXBwdXJlCmVxdWF0b3JlCmVyYXJpbwplcmJhCmVyYm9zbwplcmVkZQplcmVtaXRhCmVyaWdlcmUKZXJtZXRpY28KZXJvZQplcm9zaXZvCmVycmFudGUKZXNhZ29ubwplc2FtZQplc2FuaW1lCmVzYXVkaXJlCmVzY2EKZXNlbXBpbwplc2VyY2l0bwplc2liaXRvCmVzaWdlbnRlCmVzaXN0ZXJlCmVzaXRvCmVzb2ZhZ28KZXNvcnRhdG8KZXNvc28KZXNwYW5zbwplc3ByZXNzbwplc3NlbnphCmVzc28KZXN0ZXNvCmVzdGltYXJlCmVzdG9uaWEKZXN0cm9zbwplc3VsdGFyZQpldGlsaWNvCmV0bmljbwpldHJ1c2NvCmV0dG8KZXVjbGlkZW8KZXVyb3BhCmV2YXNvCmV2aWRlbnphCmV2aXRhdG8KZXZvbHV0bwpldnZpdmEKZmFiYnJpY2EKZmFjY2VuZGEKZmFjaGlybwpmYWxjbwpmYW1pZ2xpYQpmYW5hbGUKZmFuZmFyYQpmYW5nbwpmYW50YXNtYQpmYXJlCmZhcmZhbGxhCmZhcmlub3NvCmZhcm1hY28KZmFzY2lhCmZhc3Rvc28KZmFzdWxsbwpmYXRpY2FyZQpmYXRvCmZhdm9sb3NvCmZlYmJyZQpmZWNvbGEKZmVkZQpmZWdhdG8KZmVscGEKZmVsdHJvCmZlbW1pbmEKZmVuZGVyZQpmZW5vbWVubwpmZXJtZW50bwpmZXJybwpmZXJ0aWxlCmZlc3N1cmEKZmVzdGl2bwpmZXR0YQpmZXVkbwpmaWFiYQpmaWR1Y2lhCmZpZmEKZmlndXJhdG8KZmlsbwpmaW5hbnphCmZpbmVzdHJhCmZpbmlyZQpmaW9yZQpmaXNjYWxlCmZpc2ljbwpmaXVtZQpmbGFjb25lCmZsYW1lbmNvCmZsZWJvCmZsZW1tYQpmbG9yaWRvCmZsdWVudGUKZmx1b3JvCmZvYmljbwpmb2NhY2NpYQpmb2Nvc28KZm9kZXJhdG8KZm9nbGlvCmZvbGF0YQpmb2xjbG9yZQpmb2xnb3JlCmZvbmRlbnRlCmZvbmV0aWNvCmZvbmlhCmZvbnRhbmEKZm9yYml0bwpmb3JjaGV0dGEKZm9yZXN0YQpmb3JtaWNhCmZvcm5haW8KZm9ybwpmb3J0ZXp6YQpmb3J6YXJlCmZvc2ZhdG8KZm9zc28KZnJhY2Fzc28KZnJhbmEKZnJhc3Npbm8KZnJhdGVsbG8KZnJlY2NldHRhCmZyZW5hdGEKZnJlc2NvCmZyaWdvCmZyb2xsaW5vCmZyb25kZQpmcnVnYWxlCmZydXR0YQpmdWNpbGF0YQpmdWNzaWEKZnVnZ2VudGUKZnVsbWluZQpmdWx2bwpmdW1hbnRlCmZ1bWV0dG8KZnVtb3NvCmZ1bmUKZnVuemlvbmUKZnVvY28KZnVyYm8KZnVyZ29uZQpmdXJvcmUKZnVzbwpmdXRpbGUKZ2FiYmlhbm8KZ2FmZmUKZ2FsYXRlbwpnYWxsaW5hCmdhbG9wcG8KZ2FtYmVybwpnYW1tYQpnYXJhbnppYQpnYXJibwpnYXJvZmFubwpnYXJ6b25lCmdhc2RvdHRvCmdhc29saW8KZ2FzdHJpY28KZ2F0dG8KZ2F1ZGlvCmdhemVibwpnYXp6ZWxsYQpnZWNvCmdlbGF0aW5hCmdlbHNvCmdlbWVsbG8KZ2VtbWF0bwpnZW5lCmdlbml0b3JlCmdlbm5haW8KZ2Vub3RpcG8KZ2VyZ28KZ2hlcGFyZG8KZ2hpYWNjaW8KZ2hpc2EKZ2lhbGxvCmdpbGRhCmdpbmVwcm8KZ2lvY2FyZQpnaW9pZWxsbwpnaW9ybm8KZ2lvdmUKZ2lyYXRvCmdpcm9uZQpnaXR0YXRhCmdpdWRpemlvCmdpdXJhdG8KZ2l1c3RvCmdsb2J1bG8KZ2x1dGluZQpnbm9tbwpnb2JiYQpnb2xmCmdvbWl0bwpnb21tb25lCmdvbmZpbwpnb25uYQpnb3Zlcm5vCmdyYWNpbGUKZ3JhZG8KZ3JhZmljbwpncmFtbW8KZ3JhbmRlCmdyYXR0YXJlCmdyYXZvc28KZ3JhemlhCmdyZWNhCmdyZWdnZQpncmlmb25lCmdyaWdpbwpncmluemEKZ3JvdHRhCmdydXBwbwpndWFkYWdubwpndWFpbwpndWFudG8KZ3VhcmRhcmUKZ3VmbwpndWlkYXJlCmliZXJuYXRvCmljb25hCmlkZW50aWNvCmlkaWxsaW8KaWRvbG8KaWRyYQppZHJpY28KaWRyb2dlbm8KaWdpZW5lCmlnbmFybwppZ25vcmF0bwppbGFyZQppbGxlc28KaWxsb2dpY28KaWxsdWRlcmUKaW1iYWxsbwppbWJldnV0bwppbWJvY2NvCmltYnV0bwppbW1hbmUKaW1tZXJzbwppbW1vbGF0bwppbXBhY2NvCmltcGV0bwppbXBpZWdvCmltcG9ydG8KaW1wcm9udGEKaW5hbGFyZQppbmFyY2FyZQppbmF0dGl2bwppbmNhbnRvCmluY2VuZGlvCmluY2hpbm8KaW5jaXNpdm8KaW5jbHVzbwppbmNvbnRybwppbmNyb2NpbwppbmN1Ym8KaW5kYWdpbmUKaW5kaWEKaW5kb2xlCmluZWRpdG8KaW5mYXR0aQppbmZpbGFyZQppbmZsaXR0bwppbmdhZ2dpbwppbmdlZ25vCmluZ2xlc2UKaW5nb3Jkbwppbmdyb3Nzbwppbm5lc2NvCmlub2RvcmUKaW5vbHRyYXJlCmlub25kYXRvCmluc2FubwppbnNldHRvCmluc2llbWUKaW5zb25uaWEKaW5zdWxpbmEKaW50YXNhdG8KaW50ZXJvCmludG9uYWNvCmludHVpdG8KaW51bWlkaXJlCmludmFsaWRvCmludmVjZQppbnZpdG8KaXBlcmJvbGUKaXBub3RpY28KaXBvdGVzaQppcHBpY2EKaXJpZGUKaXJsYW5kYQppcm9uaWNvCmlycmlnYXRvCmlycm9yYXJlCmlzb2xhdG8KaXNvdG9wbwppc3Rlcmljbwppc3RpdHV0bwppc3RyaWNlCml0YWxpYQppdGVyYXJlCmxhYmJybwpsYWJpcmludG8KbGFjY2EKbGFjZXJhdG8KbGFjcmltYQpsYWN1bmEKbGFkZG92ZQpsYWdvCmxhbXBvCmxhbmNldHRhCmxhbnRlcm5hCmxhcmRvc28KbGFyZ2EKbGFyaW5nZQpsYXN0cmEKbGF0ZW56YQpsYXRpbm8KbGF0dHVnYQpsYXZhZ25hCmxhdm9ybwpsZWdhbGUKbGVnZ2VybwpsZW1ibwpsZW50ZXp6YQpsZW56YQpsZW9uZQpsZXByZQpsZXNpdm8KbGVzc2F0bwpsZXN0bwpsZXR0ZXJhbGUKbGV2YQpsZXZpZ2F0bwpsaWJlcm8KbGlkbwpsaWV2aXRvCmxpbGxhCmxpbWF0dXJhCmxpbWl0YXJlCmxpbXBpZG8KbGluZWFyZQpsaW5ndWEKbGlxdWlkbwpsaXJhCmxpcmljYQpsaXNjYQpsaXRlCmxpdGlnaW8KbGl2cmVhCmxvY2FuZGEKbG9kZQpsb2dpY2EKbG9tYmFyZQpsb25kcmEKbG9uZ2V2bwpsb3F1YWNlCmxvcmVuem8KbG90bwpsb3R0ZXJpYQpsdWNlCmx1Y2lkYXRvCmx1bWFjYQpsdW1pbm9zbwpsdW5nbwpsdXBvCmx1cHBvbG8KbHVzaW5nYQpsdXNzbwpsdXR0bwptYWNhYnJvCm1hY2NoaW5hCm1hY2VybwptYWNpbmF0bwptYWRhbWEKbWFnaWNvCm1hZ2xpYQptYWduZXRlCm1hZ3JvCm1haW9saWNhCm1hbGFmZWRlCm1hbGdyYWRvCm1hbGludGVzbwptYWxzYW5vCm1hbHRvCm1hbHVtb3JlCm1hbmEKbWFuY2lhCm1hbmRvcmxhCm1hbmdpYXJlCm1hbmlmZXN0bwptYW5uYXJvCm1hbm92cmEKbWFuc2FyZGEKbWFudGlkZQptYW51YnJpbwptYXBwYQptYXJhdG9uYQptYXJjaXJlCm1hcmV0dGEKbWFybW8KbWFyc3VwaW8KbWFzY2hlcmEKbWFzc2FpYQptYXN0aW5vCm1hdGVyYXNzbwptYXRyaWNvbGEKbWF0dG9uZQptYXR1cm8KbWF6dXJjYQptZWFuZHJvCm1lY2NhbmljbwptZWNlbmF0ZQptZWRlc2ltbwptZWRpdGFyZQptZWdhCm1lbGFzc2EKbWVsaXMKbWVsb2RpYQptZW5pbmdlCm1lbm8KbWVuc29sYQptZXJjdXJpbwptZXJlbmRhCm1lcmxvCm1lc2NoaW5vCm1lc2UKbWVzc2VyZQptZXN0b2xvCm1ldGFsbG8KbWV0b2RvCm1ldHRlcmUKbWlhZ29sYXJlCm1pY2EKbWljZWxpbwptaWNoZWxlCm1pY3JvYm8KbWlkb2xsbwptaWVsZQptaWdsaW9yZQptaWxhbm8KbWlsaXRlCm1pbW9zYQptaW5lcmFsZQptaW5pCm1pbm9yZQptaXJpbm8KbWlydGlsbG8KbWlzY2VsYQptaXNzaXZhCm1pc3RvCm1pc3VyYXJlCm1pdGV6emEKbWl0aWdhcmUKbWl0cmEKbWl0dGVudGUKbW5lbW9uaWNvCm1vZGVsbG8KbW9kaWZpY2EKbW9kdWxvCm1vZ2Fubwptb2dpbwptb2xlCm1vbG9zc28KbW9uYXN0ZXJvCm1vbmNvCm1vbmRpbmEKbW9uZXRhcmlvCm1vbmlsZQptb25vdG9ubwptb25zb25lCm1vbnRhdG8KbW9udmlzbwptb3JhCm1vcmRlcmUKbW9yc2ljYXRvCm1vc3Rybwptb3RpdmF0bwptb3Rvc2VnYQptb3R0bwptb3ZlbnphCm1vdmltZW50bwptb3p6bwptdWNjYQptdWNvc2EKbXVmZmEKbXVnaGV0dG8KbXVnbmFpbwptdWxhdHRvCm11bGluZWxsbwptdWx0aXBsbwptdW1taWEKbXVudG8KbXVvdmVyZQptdXJhbGUKbXVzYQptdXNjb2xvCm11c2ljYQptdXRldm9sZQptdXRvCm5hYmFiYm8KbmFmdGEKbmFub21ldHJvCm5hcmNpc28KbmFyaWNlCm5hcnJhdG8KbmFzY2VyZQpuYXN0cmFyZQpuYXR1cmFsZQpuYXV0aWNhCm5hdmlnbGlvCm5lYnVsb3NhCm5lY3Jvc2kKbmVnYXRpdm8KbmVnb3ppbwpuZW1tZW5vCm5lb2ZpdGEKbmVyZXR0bwpuZXJ2bwpuZXNzdW5vCm5ldHR1bm8KbmV1dHJhbGUKbmV2ZQpuZXZyb3RpY28KbmljY2hpYQpuaW5mYQpuaXRpZG8Kbm9iaWxlCm5vY2l2bwpub2RvCm5vbWUKbm9taW5hCm5vcmRpY28Kbm9ybWFsZQpub3J2ZWdlc2UKbm9zdHJhbm8Kbm90YXJlCm5vdGl6aWEKbm90dHVybm8Kbm92ZWxsYQpudWNsZW8KbnVsbGEKbnVtZXJvCm51b3ZvCm51dHJpcmUKbnV2b2xhCm51emlhbGUKb2FzaQpvYmJlZGlyZQpvYmJsaWdvCm9iZWxpc2NvCm9ibGlvCm9ib2xvCm9ic29sZXRvCm9jY2FzaW9uZQpvY2NoaW8Kb2NjaWRlbnRlCm9jY29ycmVyZQpvY2N1bHRhcmUKb2NyYQpvY3VsYXRvCm9kaWVybm8Kb2RvcmFyZQpvZmZlcnRhCm9mZnJpcmUKb2ZmdXNjYXRvCm9nZ2V0dG8Kb2dnaQpvZ251bm8Kb2xhbmRlc2UKb2xmYXR0bwpvbGlhdG8Kb2xpdmEKb2xvZ3JhbW1hCm9sdHJlCm9tYWdnaW8Kb21iZWxpY28Kb21icmEKb21lZ2EKb21pc3Npb25lCm9uZG9zbwpvbmVyZQpvbmljZQpvbm5pdm9ybwpvbm9yZXZvbGUKb250YQpvcGVyYXRvCm9waW5pb25lCm9wcG9zdG8Kb3JhY29sbwpvcmFmbwpvcmRpbmUKb3JlY2NoaW5vCm9yZWZpY2UKb3JmYW5vCm9yZ2FuaWNvCm9yaWdpbmUKb3JpenpvbnRlCm9ybWEKb3JtZWdnaW8Kb3JuYXRpdm8Kb3JvbG9naW8Kb3JyZW5kbwpvcnJpYmlsZQpvcnRlbnNpYQpvcnRpY2EKb3J6YXRhCm9yem8Kb3NhcmUKb3NjdXJhcmUKb3Ntb3NpCm9zcGVkYWxlCm9zcGl0ZQpvc3NhCm9zc2lkYXJlCm9zdGFjb2xvCm9zdGUKb3RpdGUKb3RyZQpvdHRhZ29ubwpvdHRpbW8Kb3R0b2JyZQpvdmFsZQpvdmVzdApvdmlubwpvdmlwYXJvCm92b2NpdG8Kb3Z1bnF1ZQpvdnZpYXJlCm96aW8KcGFjY2hldHRvCnBhY2UKcGFjaWZpY28KcGFkZWxsYQpwYWRyb25lCnBhZXNlCnBhZ2EKcGFnaW5hCnBhbGF6emluYQpwYWxlc2FyZQpwYWxsaWRvCnBhbG8KcGFsdWRlCnBhbmRvcm8KcGFubmVsbG8KcGFvbG8KcGFvbmF6em8KcGFwcmljYQpwYXJhYm9sYQpwYXJjZWxsYQpwYXJlcmUKcGFyZ29sbwpwYXJpCnBhcmxhdG8KcGFyb2xhCnBhcnRpcmUKcGFydmVuemEKcGFyemlhbGUKcGFzc2l2bwpwYXN0aWNjYQpwYXRhY2NhCnBhdG9sb2dpYQpwYXR0dW1lCnBhdm9uZQpwZWNjYXRvCnBlZGFsYXJlCnBlZG9uYWxlCnBlZ2dpbwpwZWxvc28KcGVuYXJlCnBlbmRpY2UKcGVuaXNvbGEKcGVubnV0bwpwZW5vbWJyYQpwZW5zYXJlCnBlbnRvbGEKcGVwZQpwZXBpdGEKcGVyYmVuZQpwZXJjb3JzbwpwZXJkb25hdG8KcGVyZm9yYXJlCnBlcmdhbWVuYQpwZXJpb2RvCnBlcm1lc3NvCnBlcm5vCnBlcnBsZXNzbwpwZXJzdWFzbwpwZXJ0dWdpbwpwZXJ2YXNvCnBlc2F0b3JlCnBlc2lzdGEKcGVzbwpwZXN0aWZlcm8KcGV0YWxvCnBldHRpbmUKcGV0dWxhbnRlCnBlenpvCnBpYWNlcmUKcGlhbnRhCnBpYXR0aW5vCnBpY2Npbm8KcGljb3p6YQpwaWVnYQpwaWV0cmEKcGlmZmVybwpwaWdpYW1hCnBpZ29saW8KcGlncm8KcGlsYQpwaWxpZmVybwpwaWxsb2xhCnBpbG90YQpwaW1wYW50ZQpwaW5ldGEKcGlubmEKcGlub2xvCnBpb2dnaWEKcGlvbWJvCnBpcmFtaWRlCnBpcmV0aWNvCnBpcml0ZQpwaXJvbGlzaQpwaXRvbmUKcGl6emljbwpwbGFjZWJvCnBsYW5hcmUKcGxhc21hCnBsYXRhbm8KcGxlbmFyaW8KcG9jaGV6emEKcG9kZXJvc28KcG9kaXNtbwpwb2VzaWEKcG9nZ2lhcmUKcG9sZW50YQpwb2xpZ29ubwpwb2xsaWNlCnBvbG1vbml0ZQpwb2xwZXR0YQpwb2xzbwpwb2x0cm9uYQpwb2x2ZXJlCnBvbWljZQpwb21vZG9ybwpwb250ZQpwb3BvbG9zbwpwb3JmaWRvCnBvcm9zbwpwb3Jwb3JhCnBvcnJlCnBvcnRhdGEKcG9zYQpwb3NpdGl2bwpwb3NzZXNzbwpwb3N0dWxhdG8KcG90YXNzaW8KcG90ZXJlCnByYW56bwpwcmFzc2kKcHJhdGljYQpwcmVjbHVzbwpwcmVkaWNhCnByZWZpc3NvCnByZWdpYXRvCnByZWxpZXZvCnByZW1lcmUKcHJlbm90YXJlCnByZXBhcmF0bwpwcmVzZW56YQpwcmV0ZXN0bwpwcmV2YWxzbwpwcmltYQpwcmluY2lwZQpwcml2YXRvCnByb2JsZW1hCnByb2N1cmEKcHJvZHVycmUKcHJvZnVtbwpwcm9nZXR0bwpwcm9sdW5nYQpwcm9tZXNzYQpwcm9ub21lCnByb3Bvc3RhCnByb3JvZ2EKcHJvdGVzbwpwcm92YQpwcnVkZW50ZQpwcnVnbmEKcHJ1cml0bwpwc2ljaGUKcHViYmxpY28KcHVkaWNhCnB1Z2lsYXRvCnB1Z25vCnB1bGNlCnB1bGl0bwpwdWxzYW50ZQpwdW50YXJlCnB1cGF6em8KcHVwaWxsYQpwdXJvCnF1YWRybwpxdWFsY29zYQpxdWFzaQpxdWVyZWxhCnF1b3RhCnJhY2NvbHRvCnJhZGRvcHBpbwpyYWRpY2FsZQpyYWR1bmF0bwpyYWZmaWNhCnJhZ2F6em8KcmFnaW9uZQpyYWdubwpyYW1hcnJvCnJhbWluZ28KcmFtbwpyYW5kYWdpbwpyYW50b2xhcmUKcmFwYXRvCnJhcGluYQpyYXBwcmVzbwpyYXNhdHVyYQpyYXNjaGlhdG8KcmFzZW50ZQpyYXNzZWduYQpyYXN0cmVsbG8KcmF0YQpyYXZ2ZWR1dG8KcmVhbGUKcmVjZXBpcmUKcmVjaW50bwpyZWNsdXRhCnJlY29uZGl0bwpyZWN1cGVybwpyZWRkaXRvCnJlZGltZXJlCnJlZ2FsYXRvCnJlZ2lzdHJvCnJlZ29sYQpyZWdyZXNzbwpyZWxhemlvbmUKcmVtYXJlCnJlbW90bwpyZW5uYQpyZXBsaWNhCnJlcHJpbWVyZQpyZXB1dGFyZQpyZXNhCnJlc2lkZW50ZQpyZXNwb25zbwpyZXN0YXVybwpyZXRlCnJldGluYQpyZXRvcmljYQpyZXR0aWZpY2EKcmV2b2NhdG8Kcmlhc3N1bnRvCnJpYmFkaXJlCnJpYmVsbGUKcmlicmV6em8KcmljYXJpY2EKcmljY28KcmljZXZlcmUKcmljaWNsYXRvCnJpY29yZG8KcmljcmVkdXRvCnJpZGljb2xvCnJpZHVycmUKcmlmYXNhcmUKcmlmbGVzc28Kcmlmb3JtYQpyaWZ1Z2lvCnJpZ2FyZQpyaWdldHRhdG8KcmlnaGVsbG8KcmlsYXNzYXRvCnJpbGV2YXRvCnJpbWFuZXJlCnJpbWJhbHpvCnJpbWVkaW8Kcmltb3JjaGlvCnJpbmFzY2l0YQpyaW5jYXJvCnJpbmZvcnpvCnJpbm5vdm8Kcmlub21hdG8Kcmluc2F2aXRvCnJpbnRvY2NvCnJpbnVuY2lhCnJpbnZlbmlyZQpyaXBhcmF0bwpyaXBldHV0bwpyaXBpZW5vCnJpcG9ydGFyZQpyaXByZXNhCnJpcHVsaXJlCnJpc2F0YQpyaXNjaGlvCnJpc2VydmEKcmlzaWJpbGUKcmlzbwpyaXNwZXR0bwpyaXN0b3JvCnJpc3VsdGF0bwpyaXN2b2x0bwpyaXRhcmRvCnJpdGVnbm8Kcml0bWljbwpyaXRyb3ZvCnJpdW5pb25lCnJpdmEKcml2ZXJzbwpyaXZpbmNpdGEKcml2b2x0bwpyaXpvbWEKcm9iYQpyb2JvdGljbwpyb2J1c3RvCnJvY2NpYQpyb2NvCnJvZGFnZ2lvCnJvZGVyZQpyb2RpdG9yZQpyb2dpdG8Kcm9sbGlvCnJvbWFudGljbwpyb21wZXJlCnJvbnppbwpyb3NvbGFyZQpyb3Nwbwpyb3RhbnRlCnJvdG9uZG8Kcm90dWxhCnJvdmVzY2lvCnJ1Yml6em8KcnVicmljYQpydWdhCnJ1bGxpbm8KcnVtaW5lCnJ1bW9yb3NvCnJ1b2xvCnJ1cGUKcnVzc2FyZQpydXN0aWNvCnNhYmF0bwpzYWJiaWFyZQpzYWJvdGF0bwpzYWdvbWEKc2FsYXNzbwpzYWxkYXR1cmEKc2FsZ2VtbWEKc2FsaXZhcmUKc2FsbW9uZQpzYWxvbmUKc2FsdGFyZQpzYWx1dG8Kc2Fsdm8Kc2FwZXJlCnNhcGlkbwpzYXBvcml0bwpzYXJhY2VubwpzYXJjYXNtbwpzYXJ0bwpzYXNzb3NvCnNhdGVsbGl0ZQpzYXRpcmEKc2F0b2xsbwpzYXR1cm5vCnNhdmFuYQpzYXZpbwpzYXppYXRvCnNiYWRpZ2xpbwpzYmFsem8Kc2JhbmNhdG8Kc2JhcnJhCnNiYXR0ZXJlCnNiYXZhcmUKc2JlbmRhcmUKc2JpcmNpYXJlCnNibG9jY2F0bwpzYm9jY2lhdG8Kc2JyaW5hcmUKc2JydWZmb25lCnNidWZmYXJlCnNjYWJyb3NvCnNjYWRlbnphCnNjYWxhCnNjYW1iaWFyZQpzY2FuZGFsbwpzY2Fwb2xhCnNjYXJzbwpzY2F0ZW5hcmUKc2NhdmF0bwpzY2VsdG8Kc2NlbmljbwpzY2V0dHJvCnNjaGVkYQpzY2hpZW5hCnNjaWFycGEKc2NpZW56YQpzY2luZGVyZQpzY2lwcG8Kc2Npcm9wcG8Kc2Npdm9sbwpzY2xlcmFyZQpzY29kZWxsYQpzY29scGl0bwpzY29tcGFydG8Kc2NvbmZvcnRvCnNjb3ByaXJlCnNjb3J0YQpzY29zc29uZQpzY296emVzZQpzY3JpYmEKc2Nyb2xsYXJlCnNjcnV0aW5pbwpzY3VkZXJpYQpzY3VsdG9yZQpzY3VvbGEKc2N1cm8Kc2N1c2FyZQpzZGViaXRhcmUKc2RvZ2FuYXJlCnNlY2NhdHVyYQpzZWNvbmRvCnNlZGFubwpzZWdnaW9sYQpzZWduYWxhdG8Kc2VncmVnYXRvCnNlZ3VpdG8Kc2VsY2lhdG8Kc2VsZXR0aXZvCnNlbGxhCnNlbHZhZ2dpbwpzZW1hZm9ybwpzZW1icmFyZQpzZW1lCnNlbWluYXRvCnNlbXByZQpzZW5zbwpzZW50aXJlCnNlcG9sdG8Kc2VxdWVuemEKc2VyYXRhCnNlcmJhdG8Kc2VyZW5vCnNlcmlvCnNlcnBlbnRlCnNlcnJhZ2xpbwpzZXJ2aXJlCnNlc3RpbmEKc2V0b2xhCnNldHRpbWFuYQpzZmFjZWxvCnNmYWxkYXJlCnNmYW1hdG8Kc2Zhcnpvc28Kc2ZhdGljYXRvCnNmZXJhCnNmaWRhCnNmaWxhdG8Kc2ZpbmdlCnNmb2NhdG8Kc2ZvZGVyYXJlCnNmb2dvCnNmb2x0aXJlCnNmb3J6YXRvCnNmcmF0dG8Kc2ZydXR0YXRvCnNmdWdnaXRvCnNmdW1hcmUKc2Z1c28Kc2dhYmVsbG8Kc2dhcmJhdG8Kc2dvbmZpYXJlCnNnb3JiaW8Kc2dyYXNzYXRvCnNndWFyZG8Kc2liaWxvCnNpY2NvbWUKc2llcnJhCnNpZ2xhCnNpZ25vcmUKc2lsZW56aW8Kc2lsbGFiYQpzaW1ib2xvCnNpbXBhdGljbwpzaW11bGF0bwpzaW5mb25pYQpzaW5nb2xvCnNpbmlzdHJvCnNpbm8Kc2ludGVzaQpzaW51c29pZGUKc2lwYXJpbwpzaXNtYQpzaXN0b2xlCnNpdHVhdG8Kc2xpdHRhCnNsb2dhdHVyYQpzbG92ZW5vCnNtYXJyaXRvCnNtZW1vcmF0bwpzbWVudGl0bwpzbWVyYWxkbwpzbWlsem8Kc21vbnRhcmUKc21vdHRhdG8Kc211c3NhdG8Kc25lbGxpcmUKc25lcnZhdG8Kc25vZG8Kc29iYmFsem8Kc29icmlvCnNvY2NvcnNvCnNvY2lhbGUKc29kYWxlCnNvZmZpdHRvCnNvZ25vCnNvbGRhdG8Kc29sZW5uZQpzb2xpZG8Kc29sbGF6em8Kc29sbwpzb2x1YmlsZQpzb2x2ZW50ZQpzb21hdGljbwpzb21tYQpzb25kYQpzb25ldHRvCnNvbm5pZmVybwpzb3BpcmUKc29wcGVzbwpzb3ByYQpzb3JnZXJlCnNvcnBhc3NvCnNvcnJpc28Kc29yc28Kc29ydGVnZ2lvCnNvcnZvbGF0bwpzb3NwaXJvCnNvc3RhCnNvdHRpbGUKc3BhZGEKc3BhbGxhCnNwYXJnZXJlCnNwYXRvbGEKc3BhdmVudG8Kc3BhenpvbGEKc3BlY2llCnNwZWRpcmUKc3BlZ25lcmUKc3BlbGF0dXJhCnNwZXJhbnphCnNwZXNzb3JlCnNwZXR0cmFsZQpzcGV6emF0bwpzcGlhCnNwaWdvbG9zbwpzcGlsbGF0bwpzcGlub3NvCnNwaXJhbGUKc3BsZW5kaWRvCnNwb3J0aXZvCnNwb3NvCnNwcmFuZ2EKc3ByZWNhcmUKc3Byb25hdG8Kc3BydXp6bwpzcHVudGlubwpzcXVpbGxvCnNyYWRpY2FyZQpzcm90b2xhdG8Kc3RhYmlsZQpzdGFjY28Kc3RhZmZhCnN0YWduYXJlCnN0YW1wYXRvCnN0YW50aW8Kc3Rhcm51dG8Kc3Rhc2VyYQpzdGF0dXRvCnN0ZWxvCnN0ZXBwYQpzdGVyem8Kc3RpbGV0dG8Kc3RpbWEKc3RpcnBlCnN0aXZhbGUKc3Rpenpvc28Kc3RvbmF0bwpzdG9yaWNvCnN0cmFwcG8Kc3RyZWdhdG8Kc3RyaWR1bG8Kc3Ryb3p6YXJlCnN0cnV0dG8Kc3R1Y2NhcmUKc3R1Zm8Kc3R1cGVuZG8Kc3ViZW50cm8Kc3VjY29zbwpzdWRvcmUKc3VnZ2VyaXRvCnN1Z28Kc3VsdGFubwpzdW9uYXJlCnN1cGVyYm8Kc3VwcG9ydG8Kc3VyZ2VsYXRvCnN1cnJvZ2F0bwpzdXNzdXJybwpzdXR1cmEKc3ZhZ2FyZQpzdmVkZXNlCnN2ZWdsaW8Kc3ZlbGFyZQpzdmVudXRvCnN2ZXppYQpzdmlsdXBwbwpzdmlzdGEKc3ZpenplcmEKc3ZvbHRhCnN2dW90YXJlCnRhYmFjY28KdGFidWxhdG8KdGFjY2lhcmUKdGFjaXR1cm5vCnRhbGUKdGFsaXNtYW5vCnRhbXBvbmUKdGFubmlubwp0YXJhCnRhcmRpdm8KdGFyZ2F0bwp0YXJpZmZhCnRhcnBhcmUKdGFydGFydWdhCnRhc3RvCnRhdHRpY28KdGF2ZXJuYQp0YXZvbGF0YQp0YXp6YQp0ZWNhCnRlY25pY28KdGVsZWZvbm8KdGVtZXJhcmlvCnRlbXBvCnRlbXV0bwp0ZW5kb25lCnRlbmVybwp0ZW5zaW9uZQp0ZW50YWNvbG8KdGVvcmVtYQp0ZXJtZQp0ZXJyYXp6bwp0ZXJ6ZXR0bwp0ZXNpCnRlc3NlcmF0bwp0ZXN0YXRvCnRldHJvCnRldHRvaWEKdGlmYXJlCnRpZ2VsbGEKdGltYnJvCnRpbnRvCnRpcGljbwp0aXBvZ3JhZm8KdGlyYWdnaW8KdGlybwp0aXRhbmlvCnRpdG9sbwp0aXR1YmFudGUKdGl6aW8KdGl6em9uZQp0b2NjYXJlCnRvbGxlcmFyZQp0b2x0bwp0b21ib2xhCnRvbW8KdG9uZm8KdG9uc2lsbGEKdG9wYXppbwp0b3BvbG9naWEKdG9wcGEKdG9yYmEKdG9ybmFyZQp0b3Jyb25lCnRvcnRvcmEKdG9zY2Fubwp0b3NzaXJlCnRvc3RhdHVyYQp0b3Rhbm8KdHJhYm9jY28KdHJhY2hlYQp0cmFmaWxhCnRyYWdlZGlhCnRyYWxjaW8KdHJhbW9udG8KdHJhbnNpdG8KdHJhcGFubwp0cmFycmUKdHJhc2xvY28KdHJhdHRhdG8KdHJhdmUKdHJlY2NpYQp0cmVtb2xpbwp0cmVzcG9sbwp0cmlidXRvCnRyaWNoZWNvCnRyaWZvZ2xpbwp0cmlsbG8KdHJpbmNlYQp0cmlvCnRyaXN0ZXp6YQp0cml0dXJhdG8KdHJpdmVsbGEKdHJvbWJhCnRyb25vCnRyb3Bwbwp0cm90dG9sYQp0cm92YXJlCnRydWNjYXRvCnR1YmF0dXJhCnR1ZmZhdG8KdHVsaXBhbm8KdHVtdWx0bwp0dW5pc2lhCnR1cmJhcmUKdHVyY2hpbm8KdHV0YQp0dXRlbGEKdWJpY2F0bwp1Y2NlbGxvCnVjY2lzb3JlCnVkaXJlCnVkaXRpdm8KdWZmYQp1ZmZpY2lvCnVndWFsZQp1bGlzc2UKdWx0aW1hdG8KdW1hbm8KdW1pbGUKdW1vcmlzbW8KdW5jaW5ldHRvCnVuZ2VyZQp1bmdoZXJlc2UKdW5pY29ybm8KdW5pZmljYXRvCnVuaXNvbm8KdW5pdGFyaW8KdW50ZQp1b3ZvCnVwdXBhCnVyYWdhbm8KdXJnZW56YQp1cmxvCnVzYW56YQp1c2F0bwp1c2NpdG8KdXNpZ25vbG8KdXN1cmFpbwp1dGVuc2lsZQp1dGlsaXp6bwp1dG9waWEKdmFjYW50ZQp2YWNjaW5hdG8KdmFnYWJvbmRvCnZhZ2xpYXRvCnZhbGFuZ2EKdmFsZ28KdmFsaWNvCnZhbGxldHRhCnZhbG9yb3NvCnZhbHV0YXJlCnZhbHZvbGEKdmFtcGF0YQp2YW5nYXJlCnZhbml0b3NvCnZhbm8KdmFudGFnZ2lvCnZhbnZlcmEKdmFwb3JlCnZhcmFubwp2YXJjYXRvCnZhcmlhbnRlCnZhc2NhCnZlZGV0dGEKdmVkb3ZhCnZlZHV0bwp2ZWdldGFsZQp2ZWljb2xvCnZlbGNybwp2ZWxpbmEKdmVsbHV0bwp2ZWxvY2UKdmVuYXRvCnZlbmRlbW1pYQp2ZW50bwp2ZXJhY2UKdmVyYmFsZQp2ZXJnb2duYQp2ZXJpZmljYQp2ZXJvCnZlcnJ1Y2EKdmVydGljYWxlCnZlc2NpY2EKdmVzc2lsbG8KdmVzdGFsZQp2ZXRlcmFubwp2ZXRyaW5hCnZldHVzdG8KdmlhbmRhbnRlCnZpYnJhbnRlCnZpY2VuZGEKdmljaGluZ28KdmljaW5hbnphCnZpZGltYXJlCnZpZ2lsaWEKdmlnbmV0bwp2aWdvcmUKdmlsZQp2aWxsYW5vCnZpbWluaQp2aW5jaXRvcmUKdmlvbGEKdmlwZXJhCnZpcmdvbGEKdmlyb2xvZ28KdmlydWxlbnRvCnZpc2Nvc28KdmlzaW9uZQp2aXNwbwp2aXNzdXRvCnZpc3VyYQp2aXRhCnZpdGVsbG8Kdml0dGltYQp2aXZhbmRhCnZpdmlkbwp2aXppYXJlCnZvY2UKdm9nYQp2b2xhdGlsZQp2b2xlcmUKdm9scGUKdm9yYWdpbmUKdnVsY2Fubwp6YW1wb2duYQp6YW5uYQp6YXBwYXRvCnphdHRlcmEKemF2b3JyYQp6ZWZpcm8KemVsYW50ZQp6ZWxvCnplbnplcm8KemVyYmlubwp6aWJldHRvCnppbmNvCnppcmNvbmUKeml0dG8Kem9sbGEKem90aWNvCnp1Y2NoZXJvCnp1Zm9sbwp6dWx1Cnp1cHBhYC5zcGxpdCgiXG4iKTsKCiAgLy8gbm9kZV9tb2R1bGVzL0BzY3VyZS9iaXAzOS9lc20vd29yZGxpc3RzL2phcGFuZXNlLmpzCiAgdmFyIHdvcmRsaXN0NSA9IGBcdTMwNDJcdTMwNDRcdTMwNTNcdTMwNEZcdTMwNTdcdTMwOTMKXHUzMDQyXHUzMDQ0XHUzMDU1XHUzMDY0Clx1MzA0Mlx1MzA0NFx1MzA1Rlx1MzA5OQpcdTMwNDJcdTMwNEFcdTMwNURcdTMwOTlcdTMwODkKXHUzMDQyXHUzMDRCXHUzMDYxXHUzMDgzXHUzMDkzClx1MzA0Mlx1MzA0RFx1MzA4QgpcdTMwNDJcdTMwNTFcdTMwNEJcdTMwOTlcdTMwNUYKXHUzMDQyXHUzMDUxXHUzMDhCClx1MzA0Mlx1MzA1M1x1MzA0Qlx1MzA5OVx1MzA4Q1x1MzA4QgpcdTMwNDJcdTMwNTVcdTMwNDQKXHUzMDQyXHUzMDU1XHUzMDcyClx1MzA0Mlx1MzA1N1x1MzA0Mlx1MzA2OApcdTMwNDJcdTMwNTdcdTMwOTlcdTMwOEZcdTMwNDYKXHUzMDQyXHUzMDU5XHUzMDk5XHUzMDRCXHUzMDhCClx1MzA0Mlx1MzA1OVx1MzA5OVx1MzA0RApcdTMwNDJcdTMwNURcdTMwNzVcdTMwOTkKXHUzMDQyXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA0Mlx1MzA1Rlx1MzA1Rlx1MzA4MVx1MzA4QgpcdTMwNDJcdTMwNUZcdTMwOEFcdTMwN0VcdTMwNDgKXHUzMDQyXHUzMDVGXHUzMDhCClx1MzA0Mlx1MzA2NFx1MzA0NApcdTMwNDJcdTMwNjRcdTMwNEJcdTMwNDYKXHUzMDQyXHUzMDYzXHUzMDU3XHUzMDg1XHUzMDRGClx1MzA0Mlx1MzA2NFx1MzA3RVx1MzA4QQpcdTMwNDJcdTMwNjRcdTMwODFcdTMwOEIKXHUzMDQyXHUzMDY2XHUzMDZBClx1MzA0Mlx1MzA2Nlx1MzA2Rlx1MzA3RVx1MzA4QgpcdTMwNDJcdTMwNzJcdTMwOEIKXHUzMDQyXHUzMDc1XHUzMDk5XHUzMDg5Clx1MzA0Mlx1MzA3NVx1MzA5OVx1MzA4QgpcdTMwNDJcdTMwNzVcdTMwOENcdTMwOEIKXHUzMDQyXHUzMDdFXHUzMDQ0Clx1MzA0Mlx1MzA3RVx1MzA2OFx1MzA5OQpcdTMwNDJcdTMwN0VcdTMwODRcdTMwNEJcdTMwNTkKXHUzMDQyXHUzMDdFXHUzMDhBClx1MzA0Mlx1MzA3Rlx1MzA4Mlx1MzA2RQpcdTMwNDJcdTMwODFcdTMwOEFcdTMwNEIKXHUzMDQyXHUzMDg0XHUzMDdFXHUzMDhCClx1MzA0Mlx1MzA4Nlx1MzA4MApcdTMwNDJcdTMwODlcdTMwNDRcdTMwNEZcdTMwOTlcdTMwN0UKXHUzMDQyXHUzMDg5XHUzMDU3Clx1MzA0Mlx1MzA4OVx1MzA1OVx1MzA1N1x1MzA5OQpcdTMwNDJcdTMwODlcdTMwNUZcdTMwODFcdTMwOEIKXHUzMDQyXHUzMDg5XHUzMDg2XHUzMDhCClx1MzA0Mlx1MzA4OVx1MzA4Rlx1MzA1OQpcdTMwNDJcdTMwOEFcdTMwNEJcdTMwOTlcdTMwNjhcdTMwNDYKXHUzMDQyXHUzMDhGXHUzMDVCXHUzMDhCClx1MzA0Mlx1MzA4Rlx1MzA2Nlx1MzA4QgpcdTMwNDJcdTMwOTNcdTMwNDQKXHUzMDQyXHUzMDkzXHUzMDRCXHUzMDk5XHUzMDQ0Clx1MzA0Mlx1MzA5M1x1MzA1MwpcdTMwNDJcdTMwOTNcdTMwNUJcdTMwOTlcdTMwOTMKXHUzMDQyXHUzMDkzXHUzMDY2XHUzMDQ0Clx1MzA0Mlx1MzA5M1x1MzA2QVx1MzA0NApcdTMwNDJcdTMwOTNcdTMwN0VcdTMwOEEKXHUzMDQ0XHUzMDQ0XHUzMDVGXHUzMDk5XHUzMDU5Clx1MzA0NFx1MzA0QVx1MzA5MwpcdTMwNDRcdTMwNEJcdTMwOTlcdTMwNDQKXHUzMDQ0XHUzMDRCXHUzMDk5XHUzMDRGClx1MzA0NFx1MzA0RFx1MzA0QVx1MzA0NApcdTMwNDRcdTMwNERcdTMwNkFcdTMwOEEKXHUzMDQ0XHUzMDREXHUzMDgyXHUzMDZFClx1MzA0NFx1MzA0RFx1MzA4QgpcdTMwNDRcdTMwNEZcdTMwNTdcdTMwOTkKXHUzMDQ0XHUzMDRGXHUzMDc1XHUzMDk5XHUzMDkzClx1MzA0NFx1MzA1MVx1MzA2Rlx1MzA5OVx1MzA2QQpcdTMwNDRcdTMwNTFcdTMwOTMKXHUzMDQ0XHUzMDUzXHUzMDQ2Clx1MzA0NFx1MzA1M1x1MzA0RgpcdTMwNDRcdTMwNTNcdTMwNjQKXHUzMDQ0XHUzMDU1XHUzMDdFXHUzMDU3XHUzMDQ0Clx1MzA0NFx1MzA1NVx1MzA5MwpcdTMwNDRcdTMwNTdcdTMwNEQKXHUzMDQ0XHUzMDU3XHUzMDk5XHUzMDg1XHUzMDQ2Clx1MzA0NFx1MzA1N1x1MzA5OVx1MzA4N1x1MzA0NgpcdTMwNDRcdTMwNTdcdTMwOTlcdTMwOEZcdTMwOEIKXHUzMDQ0XHUzMDU5XHUzMDk5XHUzMDdGClx1MzA0NFx1MzA1OVx1MzA5OVx1MzA4QwpcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDQ0XHUzMDVCXHUzMDQ4XHUzMDcyXHUzMDk5Clx1MzA0NFx1MzA1Qlx1MzA0Qlx1MzA0NApcdTMwNDRcdTMwNUJcdTMwNEQKXHUzMDQ0XHUzMDVCXHUzMDk5XHUzMDkzClx1MzA0NFx1MzA1RFx1MzA0Nlx1MzA4RFx1MzA0NgpcdTMwNDRcdTMwNURcdTMwNEJcdTMwOTlcdTMwNTdcdTMwNDQKXHUzMDQ0XHUzMDVGXHUzMDk5XHUzMDQ0Clx1MzA0NFx1MzA1Rlx1MzA5OVx1MzA0RgpcdTMwNDRcdTMwNUZcdTMwNTlcdTMwOTlcdTMwODkKXHUzMDQ0XHUzMDVGXHUzMDdGClx1MzA0NFx1MzA1Rlx1MzA4QVx1MzA0MgpcdTMwNDRcdTMwNjFcdTMwNEFcdTMwNDYKXHUzMDQ0XHUzMDYxXHUzMDU3XHUzMDk5Clx1MzA0NFx1MzA2MVx1MzA2OFx1MzA5OQpcdTMwNDRcdTMwNjFcdTMwNkZcdTMwOTkKXHUzMDQ0XHUzMDYxXHUzMDc1XHUzMDk5Clx1MzA0NFx1MzA2MVx1MzA4QVx1MzA4NVx1MzA0NgpcdTMwNDRcdTMwNjRcdTMwNEIKXHUzMDQ0XHUzMDYzXHUzMDU3XHUzMDg1XHUzMDkzClx1MzA0NFx1MzA2M1x1MzA1Qlx1MzA0NApcdTMwNDRcdTMwNjNcdTMwNURcdTMwNDYKXHUzMDQ0XHUzMDYzXHUzMDVGXHUzMDkzClx1MzA0NFx1MzA2M1x1MzA2MQpcdTMwNDRcdTMwNjNcdTMwNjZcdTMwNDQKXHUzMDQ0XHUzMDYzXHUzMDdCXHUzMDlBXHUzMDQ2Clx1MzA0NFx1MzA2Nlx1MzA1NVx1MzA5OQpcdTMwNDRcdTMwNjZcdTMwOTMKXHUzMDQ0XHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA0NFx1MzA2OFx1MzA1MwpcdTMwNDRcdTMwNkFcdTMwNDQKXHUzMDQ0XHUzMDZBXHUzMDRCClx1MzA0NFx1MzA2RFx1MzA4MFx1MzA4QQpcdTMwNDRcdTMwNkVcdTMwNjEKXHUzMDQ0XHUzMDZFXHUzMDhCClx1MzA0NFx1MzA2Rlx1MzA2NApcdTMwNDRcdTMwNkZcdTMwOTlcdTMwOEIKXHUzMDQ0XHUzMDZGXHUzMDkzClx1MzA0NFx1MzA3Mlx1MzA5OVx1MzA0RApcdTMwNDRcdTMwNzJcdTMwOTMKXHUzMDQ0XHUzMDc1XHUzMDRGClx1MzA0NFx1MzA3OFx1MzA5MwpcdTMwNDRcdTMwN0JcdTMwNDYKXHUzMDQ0XHUzMDdGXHUzMDkzClx1MzA0NFx1MzA4Mlx1MzA0Nlx1MzA2OApcdTMwNDRcdTMwODJcdTMwNUZcdTMwOEMKXHUzMDQ0XHUzMDgyXHUzMDhBClx1MzA0NFx1MzA4NFx1MzA0Qlx1MzA5OVx1MzA4QgpcdTMwNDRcdTMwODRcdTMwNTkKXHUzMDQ0XHUzMDg4XHUzMDRCXHUzMDkzClx1MzA0NFx1MzA4OFx1MzA0RgpcdTMwNDRcdTMwODlcdTMwNDQKXHUzMDQ0XHUzMDg5XHUzMDU5XHUzMDY4Clx1MzA0NFx1MzA4QVx1MzA0Rlx1MzA5OVx1MzA2MQpcdTMwNDRcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDQ0XHUzMDhDXHUzMDQ0Clx1MzA0NFx1MzA4Q1x1MzA4Mlx1MzA2RQpcdTMwNDRcdTMwOENcdTMwOEIKXHUzMDQ0XHUzMDhEXHUzMDQ4XHUzMDkzXHUzMDcyXHUzMDlBXHUzMDY0Clx1MzA0NFx1MzA4Rlx1MzA0NApcdTMwNDRcdTMwOEZcdTMwNDYKXHUzMDQ0XHUzMDhGXHUzMDRCXHUzMDkzClx1MzA0NFx1MzA4Rlx1MzA2Rlx1MzA5OQpcdTMwNDRcdTMwOEZcdTMwODZcdTMwOEIKXHUzMDQ0XHUzMDkzXHUzMDUxXHUzMDk5XHUzMDkzXHUzMDdFXHUzMDgxClx1MzA0NFx1MzA5M1x1MzA1NVx1MzA2NApcdTMwNDRcdTMwOTNcdTMwNTdcdTMwODdcdTMwNDYKXHUzMDQ0XHUzMDkzXHUzMDg4XHUzMDQ2Clx1MzA0Nlx1MzA0OFx1MzA0RApcdTMwNDZcdTMwNDhcdTMwOEIKXHUzMDQ2XHUzMDRBXHUzMDU1XHUzMDk5Clx1MzA0Nlx1MzA0Qlx1MzA5OVx1MzA0NApcdTMwNDZcdTMwNEJcdTMwNzVcdTMwOTkKXHUzMDQ2XHUzMDRCXHUzMDc4XHUzMDk5XHUzMDhCClx1MzA0Nlx1MzA0RFx1MzA4RgpcdTMwNDZcdTMwNEZcdTMwODlcdTMwNDRcdTMwNkEKXHUzMDQ2XHUzMDRGXHUzMDhDXHUzMDhDClx1MzA0Nlx1MzA1MVx1MzA1Rlx1MzA3RVx1MzA4Rlx1MzA4QgpcdTMwNDZcdTMwNTFcdTMwNjRcdTMwNTEKXHUzMDQ2XHUzMDUxXHUzMDY4XHUzMDhCClx1MzA0Nlx1MzA1MVx1MzA4Mlx1MzA2NApcdTMwNDZcdTMwNTFcdTMwOEIKXHUzMDQ2XHUzMDUzXHUzMDk5XHUzMDRCXHUzMDU5Clx1MzA0Nlx1MzA1M1x1MzA5OVx1MzA0RgpcdTMwNDZcdTMwNTNcdTMwOTMKXHUzMDQ2XHUzMDU1XHUzMDREXHUzMDk5Clx1MzA0Nlx1MzA1N1x1MzA2QVx1MzA0NgpcdTMwNDZcdTMwNTdcdTMwOERcdTMwNEJcdTMwOTlcdTMwN0YKXHUzMDQ2XHUzMDU5XHUzMDQ0Clx1MzA0Nlx1MzA1OVx1MzA0RFx1MzA5OQpcdTMwNDZcdTMwNTlcdTMwNEZcdTMwOTlcdTMwODlcdTMwNDQKXHUzMDQ2XHUzMDU5XHUzMDgxXHUzMDhCClx1MzA0Nlx1MzA1Qlx1MzA2NApcdTMwNDZcdTMwNjFcdTMwNDJcdTMwOEZcdTMwNUIKXHUzMDQ2XHUzMDYxXHUzMDRCXHUzMDk5XHUzMDhGClx1MzA0Nlx1MzA2MVx1MzA0RApcdTMwNDZcdTMwNjFcdTMwODVcdTMwNDYKXHUzMDQ2XHUzMDYzXHUzMDRCXHUzMDhBClx1MzA0Nlx1MzA2NFx1MzA0Rlx1MzA1N1x1MzA0NApcdTMwNDZcdTMwNjNcdTMwNUZcdTMwNDhcdTMwOEIKXHUzMDQ2XHUzMDY0XHUzMDhCClx1MzA0Nlx1MzA2OFx1MzA5OVx1MzA5MwpcdTMwNDZcdTMwNkFcdTMwNERcdTMwOTkKXHUzMDQ2XHUzMDZBXHUzMDU3XHUzMDk5Clx1MzA0Nlx1MzA2QVx1MzA1OVx1MzA5OVx1MzA0RgpcdTMwNDZcdTMwNkFcdTMwOEIKXHUzMDQ2XHUzMDZEXHUzMDhCClx1MzA0Nlx1MzA2RVx1MzA0NgpcdTMwNDZcdTMwNzVcdTMwOTlcdTMwNTFcdTMwOTkKXHUzMDQ2XHUzMDc1XHUzMDk5XHUzMDUzXHUzMDk5XHUzMDQ4Clx1MzA0Nlx1MzA3RVx1MzA4Q1x1MzA4QgpcdTMwNDZcdTMwODFcdTMwOEIKXHUzMDQ2XHUzMDgyXHUzMDQ2Clx1MzA0Nlx1MzA4NFx1MzA3RVx1MzA0NgpcdTMwNDZcdTMwODhcdTMwNEYKXHUzMDQ2XHUzMDg5XHUzMDRCXHUzMDk5XHUzMDQ4XHUzMDU5Clx1MzA0Nlx1MzA4OVx1MzA0Rlx1MzA5OVx1MzA2MQpcdTMwNDZcdTMwODlcdTMwNkFcdTMwNDQKXHUzMDQ2XHUzMDhBXHUzMDQyXHUzMDUxXHUzMDk5Clx1MzA0Nlx1MzA4QVx1MzA0RFx1MzA4QwpcdTMwNDZcdTMwOEJcdTMwNTVcdTMwNDQKXHUzMDQ2XHUzMDhDXHUzMDU3XHUzMDQ0Clx1MzA0Nlx1MzA4Q1x1MzA4Nlx1MzA0RApcdTMwNDZcdTMwOENcdTMwOEIKXHUzMDQ2XHUzMDhEXHUzMDUzClx1MzA0Nlx1MzA4Rlx1MzA0RApcdTMwNDZcdTMwOEZcdTMwNTUKXHUzMDQ2XHUzMDkzXHUzMDUzXHUzMDQ2Clx1MzA0Nlx1MzA5M1x1MzA2MVx1MzA5MwpcdTMwNDZcdTMwOTNcdTMwNjZcdTMwOTMKXHUzMDQ2XHUzMDkzXHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA0OFx1MzA0NFx1MzA0OFx1MzA5MwpcdTMwNDhcdTMwNDRcdTMwNEJcdTMwOTkKXHUzMDQ4XHUzMDQ0XHUzMDREXHUzMDg3XHUzMDQ2Clx1MzA0OFx1MzA0NFx1MzA1M1x1MzA5OQpcdTMwNDhcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDQ4XHUzMDQ0XHUzMDc1XHUzMDk5XHUzMDkzClx1MzA0OFx1MzA0NFx1MzA4OFx1MzA0NgpcdTMwNDhcdTMwNDRcdTMwOEYKXHUzMDQ4XHUzMDRBXHUzMDhBClx1MzA0OFx1MzA0Qlx1MzA5OVx1MzA0QQpcdTMwNDhcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDQ4XHUzMDREXHUzMDVGXHUzMDQ0Clx1MzA0OFx1MzA0Rlx1MzA1Qlx1MzA4QgpcdTMwNDhcdTMwNTdcdTMwODNcdTMwNEYKXHUzMDQ4XHUzMDU5XHUzMDY2Clx1MzA0OFx1MzA2NFx1MzA4OVx1MzA5MwpcdTMwNDhcdTMwNkVcdTMwNEZcdTMwOTkKXHUzMDQ4XHUzMDdCXHUzMDQ2XHUzMDdFXHUzMDREClx1MzA0OFx1MzA3Qlx1MzA5MwpcdTMwNDhcdTMwN0VcdTMwNEQKXHUzMDQ4XHUzMDgyXHUzMDU3XHUzMDk5Clx1MzA0OFx1MzA4Mlx1MzA2RQpcdTMwNDhcdTMwODlcdTMwNDQKXHUzMDQ4XHUzMDg5XHUzMDc1XHUzMDk5Clx1MzA0OFx1MzA4QVx1MzA0MgpcdTMwNDhcdTMwOTNcdTMwNDhcdTMwOTMKXHUzMDQ4XHUzMDkzXHUzMDRCXHUzMDQ0Clx1MzA0OFx1MzA5M1x1MzA0RFx1MzA5OQpcdTMwNDhcdTMwOTNcdTMwNTFcdTMwOTlcdTMwNEQKXHUzMDQ4XHUzMDkzXHUzMDU3XHUzMDg1XHUzMDQ2Clx1MzA0OFx1MzA5M1x1MzA1Qlx1MzA5OVx1MzA2NApcdTMwNDhcdTMwOTNcdTMwNURcdTMwNEYKXHUzMDQ4XHUzMDkzXHUzMDYxXHUzMDg3XHUzMDQ2Clx1MzA0OFx1MzA5M1x1MzA2OFx1MzA2NApcdTMwNEFcdTMwNDRcdTMwNEJcdTMwNTFcdTMwOEIKXHUzMDRBXHUzMDQ0XHUzMDUzXHUzMDU5Clx1MzA0QVx1MzA0NFx1MzA1N1x1MzA0NApcdTMwNEFcdTMwNDRcdTMwNjRcdTMwNEYKXHUzMDRBXHUzMDQ2XHUzMDQ4XHUzMDkzClx1MzA0QVx1MzA0Nlx1MzA1NVx1MzA3RQpcdTMwNEFcdTMwNDZcdTMwNTdcdTMwOTkKXHUzMDRBXHUzMDQ2XHUzMDVCXHUzMDY0Clx1MzA0QVx1MzA0Nlx1MzA1Rlx1MzA0NApcdTMwNEFcdTMwNDZcdTMwNzVcdTMwNEYKXHUzMDRBXHUzMDQ2XHUzMDc4XHUzMDk5XHUzMDQ0Clx1MzA0QVx1MzA0Nlx1MzA4OFx1MzA0NgpcdTMwNEFcdTMwNDhcdTMwOEIKXHUzMDRBXHUzMDRBXHUzMDQ0Clx1MzA0QVx1MzA0QVx1MzA0NgpcdTMwNEFcdTMwNEFcdTMwNjhcdTMwOTlcdTMwNEFcdTMwOEEKXHUzMDRBXHUzMDRBXHUzMDg0Clx1MzA0QVx1MzA0QVx1MzA4OFx1MzA1RApcdTMwNEFcdTMwNEJcdTMwNDhcdTMwOEEKXHUzMDRBXHUzMDRCXHUzMDU5XHUzMDk5Clx1MzA0QVx1MzA0Qlx1MzA5OVx1MzA4MApcdTMwNEFcdTMwNEJcdTMwOEZcdTMwOEEKXHUzMDRBXHUzMDREXHUzMDk5XHUzMDZBXHUzMDQ2Clx1MzA0QVx1MzA0RFx1MzA4QgpcdTMwNEFcdTMwNEZcdTMwNTVcdTMwN0UKXHUzMDRBXHUzMDRGXHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA0QVx1MzA0Rlx1MzA4QVx1MzA0Qlx1MzA5OVx1MzA2QQpcdTMwNEFcdTMwNEZcdTMwOEIKXHUzMDRBXHUzMDRGXHUzMDhDXHUzMDhCClx1MzA0QVx1MzA1M1x1MzA1OQpcdTMwNEFcdTMwNTNcdTMwNkFcdTMwNDYKXHUzMDRBXHUzMDUzXHUzMDhCClx1MzA0QVx1MzA1NVx1MzA0OFx1MzA4QgpcdTMwNEFcdTMwNTVcdTMwNkFcdTMwNDQKXHUzMDRBXHUzMDU1XHUzMDgxXHUzMDhCClx1MzA0QVx1MzA1N1x1MzA0NFx1MzA4QwpcdTMwNEFcdTMwNTdcdTMwNDhcdTMwOEIKXHUzMDRBXHUzMDU3XHUzMDk5XHUzMDREXHUzMDk5Clx1MzA0QVx1MzA1N1x1MzA5OVx1MzA1NVx1MzA5MwpcdTMwNEFcdTMwNTdcdTMwODNcdTMwOEMKXHUzMDRBXHUzMDVEXHUzMDg5XHUzMDRGClx1MzA0QVx1MzA1RFx1MzA4Rlx1MzA4QgpcdTMwNEFcdTMwNUZcdTMwNEJcdTMwOTlcdTMwNDQKXHUzMDRBXHUzMDVGXHUzMDRGClx1MzA0QVx1MzA1Rlx1MzA5OVx1MzA4NFx1MzA0QgpcdTMwNEFcdTMwNjFcdTMwNjRcdTMwNEYKXHUzMDRBXHUzMDYzXHUzMDY4Clx1MzA0QVx1MzA2NFx1MzA4QQpcdTMwNEFcdTMwNjZcdTMwOTlcdTMwNEJcdTMwNTEKXHUzMDRBXHUzMDY4XHUzMDU3XHUzMDgyXHUzMDZFClx1MzA0QVx1MzA2OFx1MzA2QVx1MzA1N1x1MzA0NApcdTMwNEFcdTMwNjhcdTMwOTlcdTMwOEEKXHUzMDRBXHUzMDY4XHUzMDk5XHUzMDhEXHUzMDRCXHUzMDU5Clx1MzA0QVx1MzA2Rlx1MzA5OVx1MzA1NVx1MzA5MwpcdTMwNEFcdTMwN0VcdTMwNDRcdTMwOEEKXHUzMDRBXHUzMDgxXHUzMDY2XHUzMDk5XHUzMDY4XHUzMDQ2Clx1MzA0QVx1MzA4Mlx1MzA0NFx1MzA2Nlx1MzA5OQpcdTMwNEFcdTMwODJcdTMwNDYKXHUzMDRBXHUzMDgyXHUzMDVGXHUzMDQ0Clx1MzA0QVx1MzA4Mlx1MzA2MVx1MzA4MwpcdTMwNEFcdTMwODRcdTMwNjQKXHUzMDRBXHUzMDg0XHUzMDg2XHUzMDcyXHUzMDk5Clx1MzA0QVx1MzA4OFx1MzA3Qlx1MzA5OVx1MzA1OQpcdTMwNEFcdTMwODlcdTMwOTNcdTMwNUZcdTMwOTkKXHUzMDRBXHUzMDhEXHUzMDU5Clx1MzA0QVx1MzA5M1x1MzA0Qlx1MzA5OVx1MzA0RgpcdTMwNEFcdTMwOTNcdTMwNTFcdTMwNDQKXHUzMDRBXHUzMDkzXHUzMDU3XHUzMDgzClx1MzA0QVx1MzA5M1x1MzA1Qlx1MzA5MwpcdTMwNEFcdTMwOTNcdTMwNUZcdTMwOTlcdTMwOTMKXHUzMDRBXHUzMDkzXHUzMDYxXHUzMDg1XHUzMDQ2Clx1MzA0QVx1MzA5M1x1MzA2OFx1MzA5OVx1MzA1MVx1MzA0NApcdTMwNEJcdTMwNDJcdTMwNjQKXHUzMDRCXHUzMDQ0XHUzMDRCXHUzMDk5Clx1MzA0Qlx1MzA5OVx1MzA0NFx1MzA0RApcdTMwNEJcdTMwOTlcdTMwNDRcdTMwNTFcdTMwOTMKXHUzMDRCXHUzMDk5XHUzMDQ0XHUzMDUzXHUzMDQ2Clx1MzA0Qlx1MzA0NFx1MzA1NVx1MzA2NApcdTMwNEJcdTMwNDRcdTMwNTdcdTMwODMKXHUzMDRCXHUzMDQ0XHUzMDU5XHUzMDQ0XHUzMDg4XHUzMDRGClx1MzA0Qlx1MzA0NFx1MzA1Qlx1MzA5OVx1MzA5MwpcdTMwNEJcdTMwNDRcdTMwNURcdTMwOTlcdTMwNDZcdTMwNjhcdTMwOTkKXHUzMDRCXHUzMDQ0XHUzMDY0XHUzMDQ2Clx1MzA0Qlx1MzA0NFx1MzA2Nlx1MzA5MwpcdTMwNEJcdTMwNDRcdTMwNjhcdTMwNDYKXHUzMDRCXHUzMDQ0XHUzMDc1XHUzMDRGClx1MzA0Qlx1MzA5OVx1MzA0NFx1MzA3OFx1MzA0RApcdTMwNEJcdTMwNDRcdTMwN0JcdTMwNDYKXHUzMDRCXHUzMDQ0XHUzMDg4XHUzMDQ2Clx1MzA0Qlx1MzA5OVx1MzA0NFx1MzA4OVx1MzA0NApcdTMwNEJcdTMwNDRcdTMwOEYKXHUzMDRCXHUzMDQ4XHUzMDhCClx1MzA0Qlx1MzA0QVx1MzA4QQpcdTMwNEJcdTMwNEJcdTMwNDhcdTMwOEIKXHUzMDRCXHUzMDRCXHUzMDk5XHUzMDRGClx1MzA0Qlx1MzA0Qlx1MzA5OVx1MzA1NwpcdTMwNEJcdTMwNEJcdTMwOTlcdTMwN0YKXHUzMDRCXHUzMDRGXHUzMDUzXHUzMDk5Clx1MzA0Qlx1MzA0Rlx1MzA2OFx1MzA0RgpcdTMwNEJcdTMwNTVcdTMwOTlcdTMwOEIKXHUzMDRCXHUzMDk5XHUzMDVEXHUzMDk5XHUzMDQ2Clx1MzA0Qlx1MzA1Rlx1MzA0NApcdTMwNEJcdTMwNUZcdTMwNjEKXHUzMDRCXHUzMDk5XHUzMDYxXHUzMDg3XHUzMDQ2Clx1MzA0Qlx1MzA5OVx1MzA2M1x1MzA0RFx1MzA4NVx1MzA0NgpcdTMwNEJcdTMwOTlcdTMwNjNcdTMwNTNcdTMwNDYKXHUzMDRCXHUzMDk5XHUzMDYzXHUzMDU1XHUzMDkzClx1MzA0Qlx1MzA5OVx1MzA2M1x1MzA1N1x1MzA4N1x1MzA0NgpcdTMwNEJcdTMwNkFcdTMwNTVcdTMwOTlcdTMwOEZcdTMwNTcKXHUzMDRCXHUzMDZFXHUzMDQ2Clx1MzA0Qlx1MzA5OVx1MzA2Rlx1MzA0RgpcdTMwNEJcdTMwNzVcdTMwOTlcdTMwNEIKXHUzMDRCXHUzMDdCXHUzMDQ2Clx1MzA0Qlx1MzA3Qlx1MzA1M1x1MzA5OQpcdTMwNEJcdTMwN0VcdTMwNDYKXHUzMDRCXHUzMDdFXHUzMDdCXHUzMDk5XHUzMDUzClx1MzA0Qlx1MzA4MVx1MzA4Q1x1MzA0QVx1MzA5MwpcdTMwNEJcdTMwODZcdTMwNDQKXHUzMDRCXHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA0Qlx1MzA4OVx1MzA0NApcdTMwNEJcdTMwOEJcdTMwNDQKXHUzMDRCXHUzMDhEXHUzMDQ2Clx1MzA0Qlx1MzA4Rlx1MzA0RgpcdTMwNEJcdTMwOEZcdTMwODkKXHUzMDRCXHUzMDk5XHUzMDkzXHUzMDRCClx1MzA0Qlx1MzA5M1x1MzA1MVx1MzA0NApcdTMwNEJcdTMwOTNcdTMwNTNcdTMwNDYKXHUzMDRCXHUzMDkzXHUzMDU3XHUzMDgzClx1MzA0Qlx1MzA5M1x1MzA1RFx1MzA0NgpcdTMwNEJcdTMwOTNcdTMwNUZcdTMwOTMKXHUzMDRCXHUzMDkzXHUzMDYxClx1MzA0Qlx1MzA5OVx1MzA5M1x1MzA2Rlx1MzA5OVx1MzA4QgpcdTMwNERcdTMwNDJcdTMwNDQKXHUzMDREXHUzMDQyXHUzMDY0Clx1MzA0RFx1MzA0NFx1MzA4RApcdTMwNERcdTMwOTlcdTMwNDRcdTMwOTMKXHUzMDREXHUzMDQ2XHUzMDQ0Clx1MzA0RFx1MzA0Nlx1MzA5MwpcdTMwNERcdTMwNDhcdTMwOEIKXHUzMDREXHUzMDRBXHUzMDQ2Clx1MzA0RFx1MzA0QVx1MzA0RgpcdTMwNERcdTMwNEFcdTMwNjEKXHUzMDREXHUzMDRBXHUzMDkzClx1MzA0RFx1MzA0Qlx1MzA0NApcdTMwNERcdTMwNEJcdTMwNEYKXHUzMDREXHUzMDRCXHUzMDkzXHUzMDU3XHUzMDgzClx1MzA0RFx1MzA0RFx1MzA2NgpcdTMwNERcdTMwNEZcdTMwNkZcdTMwOTlcdTMwOEEKXHUzMDREXHUzMDRGXHUzMDg5XHUzMDUxXHUzMDk5Clx1MzA0RFx1MzA1MVx1MzA5M1x1MzA1Qlx1MzA0NApcdTMwNERcdTMwNTNcdTMwNDYKXHUzMDREXHUzMDUzXHUzMDQ4XHUzMDhCClx1MzA0RFx1MzA1M1x1MzA0RgpcdTMwNERcdTMwNTVcdTMwNDQKXHUzMDREXHUzMDU1XHUzMDRGClx1MzA0RFx1MzA1NVx1MzA3RQpcdTMwNERcdTMwNTVcdTMwODlcdTMwNERcdTMwOTkKXHUzMDREXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDRCXHUzMDRCXHUzMDk5XHUzMDRGClx1MzA0RFx1MzA5OVx1MzA1N1x1MzA0RApcdTMwNERcdTMwOTlcdTMwNTdcdTMwOTlcdTMwNUZcdTMwNDRcdTMwNTFcdTMwOTMKXHUzMDREXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDZCXHUzMDYzXHUzMDY2XHUzMDQ0Clx1MzA0RFx1MzA5OVx1MzA1N1x1MzA5OVx1MzA4NVx1MzA2NFx1MzA1N1x1MzA4MwpcdTMwNERcdTMwNTlcdTMwNDYKXHUzMDREXHUzMDVCXHUzMDQ0Clx1MzA0RFx1MzA1Qlx1MzA0RApcdTMwNERcdTMwNUJcdTMwNjQKXHUzMDREXHUzMDVEXHUzMDQ2Clx1MzA0RFx1MzA1RFx1MzA5OVx1MzA0RgpcdTMwNERcdTMwNURcdTMwOTlcdTMwOTMKXHUzMDREXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA0RFx1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNERcdTMwNjRcdTMwNDhcdTMwOTMKXHUzMDREXHUzMDk5XHUzMDYzXHUzMDYxXHUzMDhBClx1MzA0RFx1MzA2NFx1MzA2NFx1MzA0RApcdTMwNERcdTMwNjRcdTMwNkQKXHUzMDREXHUzMDY2XHUzMDQ0Clx1MzA0RFx1MzA2OFx1MzA5OVx1MzA0NgpcdTMwNERcdTMwNjhcdTMwOTlcdTMwNEYKXHUzMDREXHUzMDZBXHUzMDQ0Clx1MzA0RFx1MzA2QVx1MzA0Qlx1MzA5OQpcdTMwNERcdTMwNkFcdTMwNTMKXHUzMDREXHUzMDZDXHUzMDUzXHUzMDk5XHUzMDU3Clx1MzA0RFx1MzA2RFx1MzA5MwpcdTMwNERcdTMwNkVcdTMwNDYKXHUzMDREXHUzMDZFXHUzMDU3XHUzMDVGClx1MzA0RFx1MzA2Rlx1MzA0RgpcdTMwNERcdTMwNzJcdTMwOTlcdTMwNTdcdTMwNDQKXHUzMDREXHUzMDcyXHUzMDkzClx1MzA0RFx1MzA3NVx1MzA0RgpcdTMwNERcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDREXHUzMDdCXHUzMDk5XHUzMDQ2Clx1MzA0RFx1MzA3Qlx1MzA5MwpcdTMwNERcdTMwN0VcdTMwOEIKXHUzMDREXHUzMDdGXHUzMDY0Clx1MzA0RFx1MzA4MFx1MzA1OVx1MzA5OVx1MzA0Qlx1MzA1N1x1MzA0NApcdTMwNERcdTMwODFcdTMwOEIKXHUzMDREXHUzMDgyXHUzMDVGXHUzMDk5XHUzMDgxXHUzMDU3Clx1MzA0RFx1MzA4Mlx1MzA2MQpcdTMwNERcdTMwODJcdTMwNkUKXHUzMDREXHUzMDgzXHUzMDRGClx1MzA0RFx1MzA4NFx1MzA0RgpcdTMwNERcdTMwOTlcdTMwODVcdTMwNDZcdTMwNkJcdTMwNEYKXHUzMDREXHUzMDg4XHUzMDQ2Clx1MzA0RFx1MzA4N1x1MzA0Nlx1MzA4QVx1MzA4NVx1MzA0NgpcdTMwNERcdTMwODlcdTMwNDQKXHUzMDREXHUzMDg5XHUzMDRGClx1MzA0RFx1MzA4QVx1MzA5MwpcdTMwNERcdTMwOENcdTMwNDQKXHUzMDREXHUzMDhDXHUzMDY0Clx1MzA0RFx1MzA4RFx1MzA0RgpcdTMwNERcdTMwOTlcdTMwOERcdTMwOTMKXHUzMDREXHUzMDhGXHUzMDgxXHUzMDhCClx1MzA0RFx1MzA5OVx1MzA5M1x1MzA0NFx1MzA4RApcdTMwNERcdTMwOTNcdTMwNEJcdTMwNEZcdTMwNTdcdTMwOTkKXHUzMDREXHUzMDkzXHUzMDU3XHUzMDk5XHUzMDg3Clx1MzA0RFx1MzA5M1x1MzA4OFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNEZcdTMwOTlcdTMwNDJcdTMwNDQKXHUzMDRGXHUzMDQ0XHUzMDU5XHUzMDk5Clx1MzA0Rlx1MzA0Nlx1MzA0Qlx1MzA5MwpcdTMwNEZcdTMwNDZcdTMwNEQKXHUzMDRGXHUzMDQ2XHUzMDRGXHUzMDk5XHUzMDkzClx1MzA0Rlx1MzA0Nlx1MzA1M1x1MzA0NgpcdTMwNEZcdTMwOTlcdTMwNDZcdTMwNUJcdTMwNDQKXHUzMDRGXHUzMDQ2XHUzMDVEXHUzMDQ2Clx1MzA0Rlx1MzA5OVx1MzA0Nlx1MzA1Rlx1MzA4OQpcdTMwNEZcdTMwNDZcdTMwNzVcdTMwNEYKXHUzMDRGXHUzMDQ2XHUzMDdCXHUzMDk5Clx1MzA0Rlx1MzA0Qlx1MzA5MwpcdTMwNEZcdTMwNERcdTMwODdcdTMwNDYKXHUzMDRGXHUzMDUxXHUzMDk5XHUzMDkzClx1MzA0Rlx1MzA5OVx1MzA1M1x1MzA0NgpcdTMwNEZcdTMwNTVcdTMwNDQKXHUzMDRGXHUzMDU1XHUzMDREClx1MzA0Rlx1MzA1NVx1MzA2Rlx1MzA5OVx1MzA2QQpcdTMwNEZcdTMwNTVcdTMwOEIKXHUzMDRGXHUzMDU3XHUzMDgzXHUzMDdGClx1MzA0Rlx1MzA1N1x1MzA4N1x1MzA0NgpcdTMwNEZcdTMwNTlcdTMwNkVcdTMwNEQKXHUzMDRGXHUzMDU5XHUzMDhBXHUzMDg2XHUzMDcyXHUzMDk5Clx1MzA0Rlx1MzA1Qlx1MzA1MVx1MzA5OQpcdTMwNEZcdTMwNUJcdTMwOTMKXHUzMDRGXHUzMDk5XHUzMDVGXHUzMDQ0XHUzMDY2XHUzMDREClx1MzA0Rlx1MzA1Rlx1MzA5OVx1MzA1NVx1MzA4QgpcdTMwNEZcdTMwNUZcdTMwNzJcdTMwOTlcdTMwOENcdTMwOEIKXHUzMDRGXHUzMDYxXHUzMDUzXHUzMDdGClx1MzA0Rlx1MzA2MVx1MzA1NVx1MzA0RApcdTMwNEZcdTMwNjRcdTMwNTdcdTMwNUYKXHUzMDRGXHUzMDk5XHUzMDYzXHUzMDU5XHUzMDhBClx1MzA0Rlx1MzA2NFx1MzA4RFx1MzA0Rlx1MzA5OQpcdTMwNEZcdTMwNjhcdTMwNDZcdTMwNjZcdTMwOTMKXHUzMDRGXHUzMDY4XHUzMDk5XHUzMDRGClx1MzA0Rlx1MzA2QVx1MzA5MwpcdTMwNEZcdTMwNkRcdTMwNEZcdTMwNkQKXHUzMDRGXHUzMDZFXHUzMDQ2Clx1MzA0Rlx1MzA3NVx1MzA0NgpcdTMwNEZcdTMwN0ZcdTMwNDJcdTMwOEZcdTMwNUIKXHUzMDRGXHUzMDdGXHUzMDVGXHUzMDY2XHUzMDhCClx1MzA0Rlx1MzA4MVx1MzA4QgpcdTMwNEZcdTMwODRcdTMwNEZcdTMwNTdcdTMwODcKXHUzMDRGXHUzMDg5XHUzMDU5Clx1MzA0Rlx1MzA4OVx1MzA3OFx1MzA5OVx1MzA4QgpcdTMwNEZcdTMwOEJcdTMwN0UKXHUzMDRGXHUzMDhDXHUzMDhCClx1MzA0Rlx1MzA4RFx1MzA0NgpcdTMwNEZcdTMwOEZcdTMwNTdcdTMwNDQKXHUzMDRGXHUzMDk5XHUzMDkzXHUzMDRCXHUzMDkzClx1MzA0Rlx1MzA5OVx1MzA5M1x1MzA1N1x1MzA4N1x1MzA0RgpcdTMwNEZcdTMwOTlcdTMwOTNcdTMwNUZcdTMwNDQKXHUzMDRGXHUzMDk5XHUzMDkzXHUzMDY2Clx1MzA1MVx1MzA0Mlx1MzA2QQpcdTMwNTFcdTMwNDRcdTMwNEJcdTMwNEYKXHUzMDUxXHUzMDQ0XHUzMDUxXHUzMDkzClx1MzA1MVx1MzA0NFx1MzA1MwpcdTMwNTFcdTMwNDRcdTMwNTVcdTMwNjQKXHUzMDUxXHUzMDk5XHUzMDQ0XHUzMDU3XHUzMDk5XHUzMDg1XHUzMDY0Clx1MzA1MVx1MzA0NFx1MzA1Rlx1MzA0NApcdTMwNTFcdTMwOTlcdTMwNDRcdTMwNkVcdTMwNDZcdTMwNTdcdTMwOTlcdTMwOTMKXHUzMDUxXHUzMDQ0XHUzMDhDXHUzMDREClx1MzA1MVx1MzA0NFx1MzA4RApcdTMwNTFcdTMwNEFcdTMwNjhcdTMwNTkKXHUzMDUxXHUzMDRBXHUzMDhBXHUzMDgyXHUzMDZFClx1MzA1MVx1MzA5OVx1MzA0RFx1MzA0QgpcdTMwNTFcdTMwOTlcdTMwNERcdTMwNTFcdTMwOTlcdTMwOTMKXHUzMDUxXHUzMDk5XHUzMDREXHUzMDVGXHUzMDk5XHUzMDkzClx1MzA1MVx1MzA5OVx1MzA0RFx1MzA2MVx1MzA5MwpcdTMwNTFcdTMwOTlcdTMwNERcdTMwNjhcdTMwNjQKXHUzMDUxXHUzMDk5XHUzMDREXHUzMDZGClx1MzA1MVx1MzA5OVx1MzA0RFx1MzA4NFx1MzA0RgpcdTMwNTFcdTMwOTlcdTMwNTNcdTMwNDYKXHUzMDUxXHUzMDk5XHUzMDUzXHUzMDRGXHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA1MVx1MzA5OVx1MzA1NVx1MzA5OVx1MzA0NApcdTMwNTFcdTMwNTVcdTMwNEQKXHUzMDUxXHUzMDk5XHUzMDU1XHUzMDk5XHUzMDkzClx1MzA1MVx1MzA1N1x1MzA0RApcdTMwNTFcdTMwNTdcdTMwNTNcdTMwOTlcdTMwODAKXHUzMDUxXHUzMDU3XHUzMDg3XHUzMDQ2Clx1MzA1MVx1MzA5OVx1MzA1OVx1MzA2OApcdTMwNTFcdTMwNUZcdTMwNkZcdTMwOTkKXHUzMDUxXHUzMDYxXHUzMDgzXHUzMDYzXHUzMDc1XHUzMDlBClx1MzA1MVx1MzA2MVx1MzA4OVx1MzA1OQpcdTMwNTFcdTMwNjRcdTMwNDJcdTMwNjQKXHUzMDUxXHUzMDY0XHUzMDQ0Clx1MzA1MVx1MzA2NFx1MzA0OFx1MzA0RApcdTMwNTFcdTMwNjNcdTMwNTNcdTMwOTMKXHUzMDUxXHUzMDY0XHUzMDU3XHUzMDk5XHUzMDg3Clx1MzA1MVx1MzA2M1x1MzA1Qlx1MzA0RApcdTMwNTFcdTMwNjNcdTMwNjZcdTMwNDQKXHUzMDUxXHUzMDY0XHUzMDdFXHUzMDY0Clx1MzA1MVx1MzA5OVx1MzA2NFx1MzA4OFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNTFcdTMwOTlcdTMwNjRcdTMwOENcdTMwNDQKXHUzMDUxXHUzMDY0XHUzMDhEXHUzMDkzClx1MzA1MVx1MzA5OVx1MzA2OFx1MzA5OVx1MzA0RgpcdTMwNTFcdTMwNjhcdTMwNkZcdTMwOTlcdTMwNTkKXHUzMDUxXHUzMDY4XHUzMDhCClx1MzA1MVx1MzA2QVx1MzA1MVx1MzA5OQpcdTMwNTFcdTMwNkFcdTMwNTkKXHUzMDUxXHUzMDZBXHUzMDdGClx1MzA1MVx1MzA2Q1x1MzA0RApcdTMwNTFcdTMwOTlcdTMwNkRcdTMwNjQKXHUzMDUxXHUzMDZEXHUzMDkzClx1MzA1MVx1MzA2Rlx1MzA0NApcdTMwNTFcdTMwOTlcdTMwNzJcdTMwOTMKXHUzMDUxXHUzMDc1XHUzMDk5XHUzMDRCXHUzMDQ0Clx1MzA1MVx1MzA5OVx1MzA3Qlx1MzA5OVx1MzA0RgpcdTMwNTFcdTMwN0VcdTMwOEEKXHUzMDUxXHUzMDdGXHUzMDRCXHUzMDhCClx1MzA1MVx1MzA4MFx1MzA1NwpcdTMwNTFcdTMwODBcdTMwOEEKXHUzMDUxXHUzMDgyXHUzMDZFClx1MzA1MVx1MzA4OVx1MzA0NApcdTMwNTFcdTMwOERcdTMwNTFcdTMwOEQKXHUzMDUxXHUzMDhGXHUzMDU3XHUzMDQ0Clx1MzA1MVx1MzA5M1x1MzA0NApcdTMwNTFcdTMwOTNcdTMwNDhcdTMwNjQKXHUzMDUxXHUzMDkzXHUzMDRBClx1MzA1MVx1MzA5M1x1MzA0QgpcdTMwNTFcdTMwOTlcdTMwOTNcdTMwNEQKXHUzMDUxXHUzMDkzXHUzMDUxXHUzMDk5XHUzMDkzClx1MzA1MVx1MzA5M1x1MzA1M1x1MzA0NgpcdTMwNTFcdTMwOTNcdTMwNTVcdTMwNEYKXHUzMDUxXHUzMDkzXHUzMDU3XHUzMDg1XHUzMDQ2Clx1MzA1MVx1MzA5M1x1MzA1OVx1MzA0NgpcdTMwNTFcdTMwOTlcdTMwOTNcdTMwNURcdTMwNDYKXHUzMDUxXHUzMDkzXHUzMDYxXHUzMDRGClx1MzA1MVx1MzA5M1x1MzA2Nlx1MzA0NApcdTMwNTFcdTMwOTNcdTMwNjhcdTMwNDYKXHUzMDUxXHUzMDkzXHUzMDZBXHUzMDQ0Clx1MzA1MVx1MzA5M1x1MzA2Qlx1MzA5MwpcdTMwNTFcdTMwOTlcdTMwOTNcdTMwNzVcdTMwOTlcdTMwNjQKXHUzMDUxXHUzMDkzXHUzMDdFClx1MzA1MVx1MzA5M1x1MzA3Rlx1MzA5MwpcdTMwNTFcdTMwOTNcdTMwODFcdTMwNDQKXHUzMDUxXHUzMDkzXHUzMDg5XHUzMDkzClx1MzA1MVx1MzA5M1x1MzA4QQpcdTMwNTNcdTMwNDJcdTMwNEZcdTMwN0UKXHUzMDUzXHUzMDQ0XHUzMDZDClx1MzA1M1x1MzA0NFx1MzA3Mlx1MzA5OVx1MzA2OApcdTMwNTNcdTMwOTlcdTMwNDZcdTMwNDQKXHUzMDUzXHUzMDQ2XHUzMDQ4XHUzMDkzClx1MzA1M1x1MzA0Nlx1MzA0QVx1MzA5MwpcdTMwNTNcdTMwNDZcdTMwNEJcdTMwOTMKXHUzMDUzXHUzMDk5XHUzMDQ2XHUzMDREXHUzMDg1XHUzMDQ2Clx1MzA1M1x1MzA5OVx1MzA0Nlx1MzA1MVx1MzA0NApcdTMwNTNcdTMwNDZcdTMwNTNcdTMwNDYKXHUzMDUzXHUzMDQ2XHUzMDU1XHUzMDQ0Clx1MzA1M1x1MzA0Nlx1MzA1N1x1MzA5OQpcdTMwNTNcdTMwNDZcdTMwNTlcdTMwNDQKXHUzMDUzXHUzMDk5XHUzMDQ2XHUzMDVCXHUzMDQ0Clx1MzA1M1x1MzA0Nlx1MzA1RFx1MzA0RgpcdTMwNTNcdTMwNDZcdTMwNUZcdTMwNDQKXHUzMDUzXHUzMDQ2XHUzMDYxXHUzMDgzClx1MzA1M1x1MzA0Nlx1MzA2NFx1MzA0NgpcdTMwNTNcdTMwNDZcdTMwNjZcdTMwNDQKXHUzMDUzXHUzMDQ2XHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA1M1x1MzA0Nlx1MzA2QVx1MzA0NApcdTMwNTNcdTMwNDZcdTMwNkZcdTMwNDQKXHUzMDUzXHUzMDk5XHUzMDQ2XHUzMDdCXHUzMDQ2Clx1MzA1M1x1MzA5OVx1MzA0Nlx1MzA3RVx1MzA5MwpcdTMwNTNcdTMwNDZcdTMwODJcdTMwNEYKXHUzMDUzXHUzMDQ2XHUzMDhBXHUzMDY0Clx1MzA1M1x1MzA0OFx1MzA4QgpcdTMwNTNcdTMwNEFcdTMwOEEKXHUzMDUzXHUzMDk5XHUzMDRCXHUzMDQ0Clx1MzA1M1x1MzA5OVx1MzA0Qlx1MzA5OVx1MzA2NApcdTMwNTNcdTMwOTlcdTMwNEJcdTMwOTMKXHUzMDUzXHUzMDRGXHUzMDUzXHUzMDk5Clx1MzA1M1x1MzA0Rlx1MzA1NVx1MzA0NApcdTMwNTNcdTMwNEZcdTMwNjhcdTMwNDYKXHUzMDUzXHUzMDRGXHUzMDZBXHUzMDQ0Clx1MzA1M1x1MzA0Rlx1MzA2Rlx1MzA0RgpcdTMwNTNcdTMwNEZcdTMwOTlcdTMwN0UKXHUzMDUzXHUzMDUxXHUzMDQ0Clx1MzA1M1x1MzA1MVx1MzA4QgpcdTMwNTNcdTMwNTNcdTMwNkVcdTMwNEIKXHUzMDUzXHUzMDUzXHUzMDhEClx1MzA1M1x1MzA1NVx1MzA4MQpcdTMwNTNcdTMwNTdcdTMwNjQKXHUzMDUzXHUzMDU5XHUzMDQ2Clx1MzA1M1x1MzA1Qlx1MzA0NApcdTMwNTNcdTMwNUJcdTMwNEQKXHUzMDUzXHUzMDVCXHUzMDk5XHUzMDkzClx1MzA1M1x1MzA1RFx1MzA1Rlx1MzA5OVx1MzA2NgpcdTMwNTNcdTMwNUZcdTMwNDQKXHUzMDUzXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA1M1x1MzA1Rlx1MzA2NApcdTMwNTNcdTMwNjFcdTMwODdcdTMwNDYKXHUzMDUzXHUzMDYzXHUzMDRCClx1MzA1M1x1MzA2NFx1MzA1M1x1MzA2NApcdTMwNTNcdTMwNjRcdTMwNkZcdTMwOTlcdTMwOTMKXHUzMDUzXHUzMDY0XHUzMDc1XHUzMDk5Clx1MzA1M1x1MzA2Nlx1MzA0NApcdTMwNTNcdTMwNjZcdTMwOTMKXHUzMDUzXHUzMDY4XHUzMDRCXHUzMDk5XHUzMDg5Clx1MzA1M1x1MzA2OFx1MzA1NwpcdTMwNTNcdTMwNjhcdTMwNkZcdTMwOTkKXHUzMDUzXHUzMDY4XHUzMDhBClx1MzA1M1x1MzA2QVx1MzA1M1x1MzA5OVx1MzA2QQpcdTMwNTNcdTMwNkRcdTMwNTNcdTMwNkQKXHUzMDUzXHUzMDZFXHUzMDdFXHUzMDdFClx1MzA1M1x1MzA2RVx1MzA3RgpcdTMwNTNcdTMwNkVcdTMwODgKXHUzMDUzXHUzMDk5XHUzMDZGXHUzMDkzClx1MzA1M1x1MzA3Mlx1MzA2NFx1MzA1N1x1MzA5OQpcdTMwNTNcdTMwNzVcdTMwNDYKXHUzMDUzXHUzMDc1XHUzMDkzClx1MzA1M1x1MzA3Qlx1MzA5OVx1MzA4Q1x1MzA4QgpcdTMwNTNcdTMwOTlcdTMwN0VcdTMwNDJcdTMwNzVcdTMwOTlcdTMwODkKXHUzMDUzXHUzMDdFXHUzMDRCXHUzMDQ0Clx1MzA1M1x1MzA5OVx1MzA3RVx1MzA1OVx1MzA4QQpcdTMwNTNcdTMwN0VcdTMwNjRcdTMwNkEKXHUzMDUzXHUzMDdFXHUzMDhCClx1MzA1M1x1MzA4MFx1MzA0RFx1MzA5OVx1MzA1MwpcdTMwNTNcdTMwODJcdTMwNTdcdTMwOTkKXHUzMDUzXHUzMDgyXHUzMDYxClx1MzA1M1x1MzA4Mlx1MzA2RQpcdTMwNTNcdTMwODJcdTMwOTMKXHUzMDUzXHUzMDg0XHUzMDRGClx1MzA1M1x1MzA4NFx1MzA3RQpcdTMwNTNcdTMwODZcdTMwNDYKXHUzMDUzXHUzMDg2XHUzMDcyXHUzMDk5Clx1MzA1M1x1MzA4OFx1MzA0NApcdTMwNTNcdTMwODhcdTMwNDYKXHUzMDUzXHUzMDhBXHUzMDhCClx1MzA1M1x1MzA4Q1x1MzA0Rlx1MzA1N1x1MzA4N1x1MzA5MwpcdTMwNTNcdTMwOERcdTMwNjNcdTMwNTEKXHUzMDUzXHUzMDhGXHUzMDgyXHUzMDY2Clx1MzA1M1x1MzA4Rlx1MzA4Q1x1MzA4QgpcdTMwNTNcdTMwOTNcdTMwNDRcdTMwOTMKXHUzMDUzXHUzMDkzXHUzMDRCXHUzMDQ0Clx1MzA1M1x1MzA5M1x1MzA0RApcdTMwNTNcdTMwOTNcdTMwNTdcdTMwODVcdTMwNDYKXHUzMDUzXHUzMDkzXHUzMDU5XHUzMDQ0Clx1MzA1M1x1MzA5M1x1MzA1Rlx1MzA5OVx1MzA2NgpcdTMwNTNcdTMwOTNcdTMwNjhcdTMwOTMKXHUzMDUzXHUzMDkzXHUzMDZBXHUzMDkzClx1MzA1M1x1MzA5M1x1MzA3Mlx1MzA5OVx1MzA2QgpcdTMwNTNcdTMwOTNcdTMwN0JcdTMwOUFcdTMwOTMKXHUzMDUzXHUzMDkzXHUzMDdFXHUzMDUxClx1MzA1M1x1MzA5M1x1MzA4NApcdTMwNTNcdTMwOTNcdTMwOENcdTMwNDQKXHUzMDUzXHUzMDkzXHUzMDhGXHUzMDRGClx1MzA1NVx1MzA5OVx1MzA0NFx1MzA0OFx1MzA0RApcdTMwNTVcdTMwNDRcdTMwNEJcdTMwNDQKXHUzMDU1XHUzMDQ0XHUzMDREXHUzMDkzClx1MzA1NVx1MzA5OVx1MzA0NFx1MzA1MVx1MzA5OVx1MzA5MwpcdTMwNTVcdTMwOTlcdTMwNDRcdTMwNTMKXHUzMDU1XHUzMDQ0XHUzMDU3XHUzMDg3Clx1MzA1NVx1MzA0NFx1MzA1Qlx1MzA0NApcdTMwNTVcdTMwOTlcdTMwNDRcdTMwNUZcdTMwNEYKXHUzMDU1XHUzMDk5XHUzMDQ0XHUzMDYxXHUzMDg1XHUzMDQ2Clx1MzA1NVx1MzA0NFx1MzA2Nlx1MzA0RApcdTMwNTVcdTMwOTlcdTMwNDRcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDU1XHUzMDQ2XHUzMDZBClx1MzA1NVx1MzA0Qlx1MzA0NFx1MzA1NwpcdTMwNTVcdTMwNEJcdTMwOTlcdTMwNTkKXHUzMDU1XHUzMDRCXHUzMDZBClx1MzA1NVx1MzA0Qlx1MzA3Rlx1MzA2MQpcdTMwNTVcdTMwNEJcdTMwOTlcdTMwOEIKXHUzMDU1XHUzMDREXHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA1NVx1MzA0Rlx1MzA1NwpcdTMwNTVcdTMwNEZcdTMwNzJcdTMwOTMKXHUzMDU1XHUzMDRGXHUzMDg5Clx1MzA1NVx1MzA1M1x1MzA0RgpcdTMwNTVcdTMwNTNcdTMwNjQKXHUzMDU1XHUzMDU5XHUzMDk5XHUzMDRCXHUzMDhCClx1MzA1NVx1MzA5OVx1MzA1Qlx1MzA0RApcdTMwNTVcdTMwNUZcdTMwOTMKXHUzMDU1XHUzMDY0XHUzMDQ4XHUzMDQ0Clx1MzA1NVx1MzA5OVx1MzA2NFx1MzA0QVx1MzA5MwpcdTMwNTVcdTMwOTlcdTMwNjNcdTMwNEIKXHUzMDU1XHUzMDk5XHUzMDY0XHUzMDRCXHUzMDk5XHUzMDRGClx1MzA1NVx1MzA2M1x1MzA0RFx1MzA4N1x1MzA0RgpcdTMwNTVcdTMwOTlcdTMwNjNcdTMwNTcKXHUzMDU1XHUzMDY0XHUzMDU3XHUzMDk5XHUzMDkzClx1MzA1NVx1MzA5OVx1MzA2M1x1MzA1RFx1MzA0NgpcdTMwNTVcdTMwNjRcdTMwNUZcdTMwNkZcdTMwOTkKXHUzMDU1XHUzMDY0XHUzMDdFXHUzMDQ0XHUzMDgyClx1MzA1NVx1MzA2Nlx1MzA0NApcdTMwNTVcdTMwNjhcdTMwNDRcdTMwODIKXHUzMDU1XHUzMDY4XHUzMDQ2Clx1MzA1NVx1MzA2OFx1MzA0QVx1MzA4NApcdTMwNTVcdTMwNjhcdTMwNTcKXHUzMDU1XHUzMDY4XHUzMDhCClx1MzA1NVx1MzA2RVx1MzA0NgpcdTMwNTVcdTMwNkZcdTMwOTlcdTMwNEYKXHUzMDU1XHUzMDcyXHUzMDk5XHUzMDU3XHUzMDQ0Clx1MzA1NVx1MzA3OFx1MzA5OVx1MzA2NApcdTMwNTVcdTMwN0JcdTMwNDYKXHUzMDU1XHUzMDdCXHUzMDY4XHUzMDk5Clx1MzA1NVx1MzA3RVx1MzA1OQpcdTMwNTVcdTMwN0ZcdTMwNTdcdTMwNDQKXHUzMDU1XHUzMDdGXHUzMDVGXHUzMDk5XHUzMDhDClx1MzA1NVx1MzA4MFx1MzA1MQpcdTMwNTVcdTMwODFcdTMwOEIKXHUzMDU1XHUzMDg0XHUzMDQ4XHUzMDkzXHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA1NVx1MzA4Nlx1MzA0NgpcdTMwNTVcdTMwODhcdTMwNDYKXHUzMDU1XHUzMDg4XHUzMDRGClx1MzA1NVx1MzA4OVx1MzA1Rlx1MzA5OQpcdTMwNTVcdTMwOTlcdTMwOEJcdTMwNURcdTMwNkZcdTMwOTkKXHUzMDU1XHUzMDhGXHUzMDg0XHUzMDRCClx1MzA1NVx1MzA4Rlx1MzA4QgpcdTMwNTVcdTMwOTNcdTMwNDRcdTMwOTMKXHUzMDU1XHUzMDkzXHUzMDRCClx1MzA1NVx1MzA5M1x1MzA0RFx1MzA4M1x1MzA0RgpcdTMwNTVcdTMwOTNcdTMwNTNcdTMwNDYKXHUzMDU1XHUzMDkzXHUzMDU1XHUzMDQ0Clx1MzA1NVx1MzA5OVx1MzA5M1x1MzA1N1x1MzA4NwpcdTMwNTVcdTMwOTNcdTMwNTlcdTMwNDYKXHUzMDU1XHUzMDkzXHUzMDVCXHUzMDQ0Clx1MzA1NVx1MzA5M1x1MzA1RApcdTMwNTVcdTMwOTNcdTMwNjEKXHUzMDU1XHUzMDkzXHUzMDdFClx1MzA1NVx1MzA5M1x1MzA3RgpcdTMwNTVcdTMwOTNcdTMwODlcdTMwOTMKXHUzMDU3XHUzMDQyXHUzMDQ0Clx1MzA1N1x1MzA0Mlx1MzA1MVx1MzA5OQpcdTMwNTdcdTMwNDJcdTMwNTVcdTMwNjNcdTMwNjYKXHUzMDU3XHUzMDQyXHUzMDhGXHUzMDVCClx1MzA1N1x1MzA0NFx1MzA0RgpcdTMwNTdcdTMwNDRcdTMwOTMKXHUzMDU3XHUzMDQ2XHUzMDYxClx1MzA1N1x1MzA0OFx1MzA0NApcdTMwNTdcdTMwNEFcdTMwNTEKXHUzMDU3XHUzMDRCXHUzMDQ0Clx1MzA1N1x1MzA0Qlx1MzA0RgpcdTMwNTdcdTMwOTlcdTMwNEJcdTMwOTMKXHUzMDU3XHUzMDUzXHUzMDk5XHUzMDY4Clx1MzA1N1x1MzA1OVx1MzA0NgpcdTMwNTdcdTMwOTlcdTMwNUZcdTMwOTlcdTMwNDQKXHUzMDU3XHUzMDVGXHUzMDQ2XHUzMDUxClx1MzA1N1x1MzA1Rlx1MzA0RFx1MzA5OQpcdTMwNTdcdTMwNUZcdTMwNjYKXHUzMDU3XHUzMDVGXHUzMDdGClx1MzA1N1x1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNTdcdTMwNjFcdTMwOEFcdTMwOTMKXHUzMDU3XHUzMDYzXHUzMDRCXHUzMDhBClx1MzA1N1x1MzA2NFx1MzA1N1x1MzA5OQpcdTMwNTdcdTMwNjRcdTMwODJcdTMwOTMKXHUzMDU3XHUzMDY2XHUzMDQ0Clx1MzA1N1x1MzA2Nlx1MzA0RApcdTMwNTdcdTMwNjZcdTMwNjQKXHUzMDU3XHUzMDk5XHUzMDY2XHUzMDkzClx1MzA1N1x1MzA5OVx1MzA2OFx1MzA5OVx1MzA0NgpcdTMwNTdcdTMwNkFcdTMwNERcdTMwOTlcdTMwOEMKXHUzMDU3XHUzMDZBXHUzMDgyXHUzMDZFClx1MzA1N1x1MzA2QVx1MzA5MwpcdTMwNTdcdTMwNkRcdTMwN0UKXHUzMDU3XHUzMDZEXHUzMDkzClx1MzA1N1x1MzA2RVx1MzA0Rlx1MzA5OQpcdTMwNTdcdTMwNkVcdTMwNzVcdTMwOTkKXHUzMDU3XHUzMDZGXHUzMDQ0Clx1MzA1N1x1MzA2Rlx1MzA5OVx1MzA0Qlx1MzA4QQpcdTMwNTdcdTMwNkZcdTMwNjQKXHUzMDU3XHUzMDZGXHUzMDg5XHUzMDQ0Clx1MzA1N1x1MzA2Rlx1MzA5MwpcdTMwNTdcdTMwNzJcdTMwODdcdTMwNDYKXHUzMDU3XHUzMDc1XHUzMDRGClx1MzA1N1x1MzA5OVx1MzA3NVx1MzA5OVx1MzA5MwpcdTMwNTdcdTMwNzhcdTMwNDQKXHUzMDU3XHUzMDdCXHUzMDQ2Clx1MzA1N1x1MzA3Qlx1MzA5MwpcdTMwNTdcdTMwN0VcdTMwNDYKXHUzMDU3XHUzMDdFXHUzMDhCClx1MzA1N1x1MzA3Rlx1MzA5MwpcdTMwNTdcdTMwODBcdTMwNTFcdTMwOEIKXHUzMDU3XHUzMDk5XHUzMDgwXHUzMDU3XHUzMDg3Clx1MzA1N1x1MzA4MVx1MzA0NApcdTMwNTdcdTMwODFcdTMwOEIKXHUzMDU3XHUzMDgyXHUzMDkzClx1MzA1N1x1MzA4M1x1MzA0NFx1MzA5MwpcdTMwNTdcdTMwODNcdTMwNDZcdTMwOTMKXHUzMDU3XHUzMDgzXHUzMDRBXHUzMDkzClx1MzA1N1x1MzA5OVx1MzA4M1x1MzA0Qlx1MzA5OVx1MzA0NFx1MzA4MgpcdTMwNTdcdTMwODRcdTMwNEZcdTMwNTdcdTMwODcKXHUzMDU3XHUzMDgzXHUzMDRGXHUzMDdCXHUzMDQ2Clx1MzA1N1x1MzA4M1x1MzA1MVx1MzA5MwpcdTMwNTdcdTMwODNcdTMwNTMKXHUzMDU3XHUzMDgzXHUzMDU1XHUzMDk5XHUzMDQ0Clx1MzA1N1x1MzA4M1x1MzA1N1x1MzA5MwpcdTMwNTdcdTMwODNcdTMwNUJcdTMwOTMKXHUzMDU3XHUzMDgzXHUzMDVEXHUzMDQ2Clx1MzA1N1x1MzA4M1x1MzA1Rlx1MzA0NApcdTMwNTdcdTMwODNcdTMwNjFcdTMwODdcdTMwNDYKXHUzMDU3XHUzMDgzXHUzMDYzXHUzMDREXHUzMDkzClx1MzA1N1x1MzA5OVx1MzA4M1x1MzA3RQpcdTMwNTdcdTMwODNcdTMwOEFcdTMwOTMKXHUzMDU3XHUzMDgzXHUzMDhDXHUzMDQ0Clx1MzA1N1x1MzA5OVx1MzA4Nlx1MzA0NgpcdTMwNTdcdTMwOTlcdTMwODVcdTMwNDZcdTMwNTdcdTMwODcKXHUzMDU3XHUzMDg1XHUzMDRGXHUzMDZGXHUzMDRGClx1MzA1N1x1MzA5OVx1MzA4NVx1MzA1N1x1MzA5MwpcdTMwNTdcdTMwODVcdTMwNjNcdTMwNUJcdTMwNEQKXHUzMDU3XHUzMDg1XHUzMDdGClx1MzA1N1x1MzA4NVx1MzA4OVx1MzA2Rlx1MzA5OQpcdTMwNTdcdTMwOTlcdTMwODVcdTMwOTNcdTMwNkZcdTMwOTlcdTMwOTMKXHUzMDU3XHUzMDg3XHUzMDQ2XHUzMDRCXHUzMDQ0Clx1MzA1N1x1MzA4N1x1MzA0Rlx1MzA1Rlx1MzA0RgpcdTMwNTdcdTMwODdcdTMwNjNcdTMwNTFcdTMwOTMKXHUzMDU3XHUzMDg3XHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA1N1x1MzA4N1x1MzA4Mlx1MzA2NApcdTMwNTdcdTMwODlcdTMwNUJcdTMwOEIKXHUzMDU3XHUzMDg5XHUzMDc4XHUzMDk5XHUzMDhCClx1MzA1N1x1MzA5M1x1MzA0QgpcdTMwNTdcdTMwOTNcdTMwNTNcdTMwNDYKXHUzMDU3XHUzMDk5XHUzMDkzXHUzMDU3XHUzMDk5XHUzMDgzClx1MzA1N1x1MzA5M1x1MzA1Qlx1MzA0NFx1MzA1N1x1MzA5OQpcdTMwNTdcdTMwOTNcdTMwNjFcdTMwNEYKXHUzMDU3XHUzMDkzXHUzMDhBXHUzMDkzClx1MzA1OVx1MzA0Mlx1MzA1MVx1MzA5OQpcdTMwNTlcdTMwNDJcdTMwNTcKXHUzMDU5XHUzMDQyXHUzMDZBClx1MzA1OVx1MzA5OVx1MzA0Mlx1MzA5MwpcdTMwNTlcdTMwNDRcdTMwNDhcdTMwNDQKXHUzMDU5XHUzMDQ0XHUzMDRCClx1MzA1OVx1MzA0NFx1MzA2OFx1MzA0NgpcdTMwNTlcdTMwOTlcdTMwNDRcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDU5XHUzMDQ0XHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA1OVx1MzA0Nlx1MzA0Qlx1MzA5OVx1MzA0RgpcdTMwNTlcdTMwNDZcdTMwNTdcdTMwOTlcdTMwNjQKXHUzMDU5XHUzMDQ2XHUzMDVCXHUzMDkzClx1MzA1OVx1MzA0QVx1MzA2OFx1MzA5OVx1MzA4QQpcdTMwNTlcdTMwNERcdTMwN0UKXHUzMDU5XHUzMDRGXHUzMDQ2Clx1MzA1OVx1MzA0Rlx1MzA2QVx1MzA0NApcdTMwNTlcdTMwNTFcdTMwOEIKXHUzMDU5XHUzMDUzXHUzMDk5XHUzMDQ0Clx1MzA1OVx1MzA1M1x1MzA1NwpcdTMwNTlcdTMwOTlcdTMwNTVcdTMwOTMKXHUzMDU5XHUzMDU5XHUzMDk5XHUzMDU3XHUzMDQ0Clx1MzA1OVx1MzA1OVx1MzA4MApcdTMwNTlcdTMwNTlcdTMwODFcdTMwOEIKXHUzMDU5XHUzMDYzXHUzMDRCXHUzMDhBClx1MzA1OVx1MzA5OVx1MzA2M1x1MzA1N1x1MzA4QQpcdTMwNTlcdTMwOTlcdTMwNjNcdTMwNjgKXHUzMDU5XHUzMDY2XHUzMDREClx1MzA1OVx1MzA2Nlx1MzA4QgpcdTMwNTlcdTMwNkRcdTMwOEIKXHUzMDU5XHUzMDZFXHUzMDUzClx1MzA1OVx1MzA2Rlx1MzA1Rlx1MzA5OQpcdTMwNTlcdTMwNkZcdTMwOTlcdTMwODlcdTMwNTdcdTMwNDQKXHUzMDU5XHUzMDk5XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA1OVx1MzA5OVx1MzA3NVx1MzA5OVx1MzA2Q1x1MzA4QwpcdTMwNTlcdTMwNzVcdTMwOTlcdTMwOEEKXHUzMDU5XHUzMDc1XHUzMDhDClx1MzA1OVx1MzA3OFx1MzA5OVx1MzA2NgpcdTMwNTlcdTMwNzhcdTMwOTlcdTMwOEIKXHUzMDU5XHUzMDk5XHUzMDdCXHUzMDQ2Clx1MzA1OVx1MzA3Qlx1MzA5OVx1MzA5MwpcdTMwNTlcdTMwN0VcdTMwNDQKXHUzMDU5XHUzMDgxXHUzMDU3Clx1MzA1OVx1MzA4Mlx1MzA0NgpcdTMwNTlcdTMwODRcdTMwNEQKXHUzMDU5XHUzMDg5XHUzMDU5XHUzMDg5Clx1MzA1OVx1MzA4Qlx1MzA4MQpcdTMwNTlcdTMwOENcdTMwNjFcdTMwNEJcdTMwOTlcdTMwNDYKXHUzMDU5XHUzMDhEXHUzMDYzXHUzMDY4Clx1MzA1OVx1MzA4Rlx1MzA4QgpcdTMwNTlcdTMwOTNcdTMwNUJcdTMwOTlcdTMwOTMKXHUzMDU5XHUzMDkzXHUzMDdCXHUzMDlBXHUzMDQ2Clx1MzA1Qlx1MzA0Mlx1MzA3NVx1MzA5OVx1MzA4OQpcdTMwNUJcdTMwNDRcdTMwNEJcdTMwNjQKXHUzMDVCXHUzMDQ0XHUzMDUxXHUzMDk5XHUzMDkzClx1MzA1Qlx1MzA0NFx1MzA1N1x1MzA5OQpcdTMwNUJcdTMwNDRcdTMwODhcdTMwNDYKXHUzMDVCXHUzMDRBXHUzMDQ2Clx1MzA1Qlx1MzA0Qlx1MzA0NFx1MzA0Qlx1MzA5MwpcdTMwNUJcdTMwNERcdTMwNkJcdTMwOTMKXHUzMDVCXHUzMDREXHUzMDgwClx1MzA1Qlx1MzA0RFx1MzA4NgpcdTMwNUJcdTMwNERcdTMwODlcdTMwOTNcdTMwNDZcdTMwOTMKXHUzMDVCXHUzMDUxXHUzMDkzClx1MzA1Qlx1MzA1M1x1MzA0NgpcdTMwNUJcdTMwNTlcdTMwNTdcdTMwOTkKXHUzMDVCXHUzMDVGXHUzMDQ0Clx1MzA1Qlx1MzA1Rlx1MzA1MQpcdTMwNUJcdTMwNjNcdTMwNEJcdTMwNEYKXHUzMDVCXHUzMDYzXHUzMDREXHUzMDgzXHUzMDRGClx1MzA1Qlx1MzA5OVx1MzA2M1x1MzA0RgpcdTMwNUJcdTMwNjNcdTMwNTFcdTMwOTMKXHUzMDVCXHUzMDYzXHUzMDUzXHUzMDY0Clx1MzA1Qlx1MzA2M1x1MzA1NVx1MzA1Rlx1MzA0Rlx1MzA3RQpcdTMwNUJcdTMwNjRcdTMwNURcdTMwOTlcdTMwNEYKXHUzMDVCXHUzMDY0XHUzMDVGXHUzMDk5XHUzMDkzClx1MzA1Qlx1MzA2NFx1MzA2Nlx1MzA5OVx1MzA5MwpcdTMwNUJcdTMwNjNcdTMwNkZcdTMwOUFcdTMwOTMKXHUzMDVCXHUzMDY0XHUzMDcyXHUzMDk5Clx1MzA1Qlx1MzA2NFx1MzA3NVx1MzA5OVx1MzA5MwpcdTMwNUJcdTMwNjRcdTMwODFcdTMwNDQKXHUzMDVCXHUzMDY0XHUzMDhBXHUzMDY0Clx1MzA1Qlx1MzA2QVx1MzA0QgpcdTMwNUJcdTMwNkVcdTMwNzJcdTMwOTkKXHUzMDVCXHUzMDZGXHUzMDZGXHUzMDk5Clx1MzA1Qlx1MzA3Mlx1MzA5OVx1MzA4RApcdTMwNUJcdTMwN0JcdTMwOTlcdTMwNkQKXHUzMDVCXHUzMDdFXHUzMDQ0Clx1MzA1Qlx1MzA3RVx1MzA4QgpcdTMwNUJcdTMwODFcdTMwOEIKXHUzMDVCXHUzMDgyXHUzMDVGXHUzMDhDClx1MzA1Qlx1MzA4QVx1MzA3NQpcdTMwNUJcdTMwOTlcdTMwOTNcdTMwNDJcdTMwNEYKXHUzMDVCXHUzMDkzXHUzMDQ0Clx1MzA1Qlx1MzA5M1x1MzA0OFx1MzA0NApcdTMwNUJcdTMwOTNcdTMwNEIKXHUzMDVCXHUzMDkzXHUzMDREXHUzMDg3Clx1MzA1Qlx1MzA5M1x1MzA0RgpcdTMwNUJcdTMwOTNcdTMwNTFcdTMwOTlcdTMwOTMKXHUzMDVCXHUzMDk5XHUzMDkzXHUzMDUzXHUzMDk5Clx1MzA1Qlx1MzA5M1x1MzA1NVx1MzA0NApcdTMwNUJcdTMwOTNcdTMwNTdcdTMwODUKXHUzMDVCXHUzMDkzXHUzMDU5XHUzMDQ0Clx1MzA1Qlx1MzA5M1x1MzA1Qlx1MzA0NApcdTMwNUJcdTMwOTNcdTMwNURcdTMwOTkKXHUzMDVCXHUzMDkzXHUzMDVGXHUzMDRGClx1MzA1Qlx1MzA5M1x1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNUJcdTMwOTNcdTMwNjZcdTMwNDQKXHUzMDVCXHUzMDkzXHUzMDY4XHUzMDQ2Clx1MzA1Qlx1MzA5M1x1MzA2Q1x1MzA0RApcdTMwNUJcdTMwOTNcdTMwNkRcdTMwOTMKXHUzMDVCXHUzMDkzXHUzMDZGXHUzMDlBXHUzMDQ0Clx1MzA1Qlx1MzA5OVx1MzA5M1x1MzA3NVx1MzA5OQpcdTMwNUJcdTMwOTlcdTMwOTNcdTMwN0JcdTMwOUFcdTMwNDYKXHUzMDVCXHUzMDkzXHUzMDgwClx1MzA1Qlx1MzA5M1x1MzA4MVx1MzA5M1x1MzA1N1x1MzA5OVx1MzA4NwpcdTMwNUJcdTMwOTNcdTMwODJcdTMwOTMKXHUzMDVCXHUzMDkzXHUzMDg0XHUzMDRGClx1MzA1Qlx1MzA5M1x1MzA4Nlx1MzA0NgpcdTMwNUJcdTMwOTNcdTMwODhcdTMwNDYKXHUzMDVCXHUzMDk5XHUzMDkzXHUzMDg5Clx1MzA1Qlx1MzA5OVx1MzA5M1x1MzA4QVx1MzA4M1x1MzA0RgpcdTMwNUJcdTMwOTNcdTMwOENcdTMwNDQKXHUzMDVCXHUzMDkzXHUzMDhEClx1MzA1RFx1MzA0Mlx1MzA0RgpcdTMwNURcdTMwNDRcdTMwNjhcdTMwNTFcdTMwOTlcdTMwOEIKXHUzMDVEXHUzMDQ0XHUzMDZEClx1MzA1RFx1MzA0Nlx1MzA0Qlx1MzA5OVx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0NgpcdTMwNURcdTMwNDZcdTMwNEQKXHUzMDVEXHUzMDQ2XHUzMDUzXHUzMDk5Clx1MzA1RFx1MzA0Nlx1MzA1N1x1MzA5MwpcdTMwNURcdTMwNDZcdTMwNUZcdTMwOTlcdTMwOTMKXHUzMDVEXHUzMDQ2XHUzMDZBXHUzMDkzClx1MzA1RFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNURcdTMwNDZcdTMwODFcdTMwOTMKXHUzMDVEXHUzMDQ2XHUzMDhBClx1MzA1RFx1MzA0OFx1MzA4Mlx1MzA2RQpcdTMwNURcdTMwNDhcdTMwOTMKXHUzMDVEXHUzMDRCXHUzMDk5XHUzMDQ0Clx1MzA1RFx1MzA1MVx1MzA5OVx1MzA0RApcdTMwNURcdTMwNTNcdTMwNDYKXHUzMDVEXHUzMDUzXHUzMDVEXHUzMDUzClx1MzA1RFx1MzA1NVx1MzA5OVx1MzA0NApcdTMwNURcdTMwNTdcdTMwNkEKXHUzMDVEXHUzMDVCXHUzMDQ0Clx1MzA1RFx1MzA1Qlx1MzA5MwpcdTMwNURcdTMwNURcdTMwNEZcdTMwOTkKXHUzMDVEXHUzMDVGXHUzMDk5XHUzMDY2XHUzMDhCClx1MzA1RFx1MzA2NFx1MzA0NgpcdTMwNURcdTMwNjRcdTMwNDhcdTMwOTMKXHUzMDVEXHUzMDYzXHUzMDRCXHUzMDkzClx1MzA1RFx1MzA2NFx1MzA0RFx1MzA5OVx1MzA4N1x1MzA0NgpcdTMwNURcdTMwNjNcdTMwNTFcdTMwNjQKXHUzMDVEXHUzMDYzXHUzMDUzXHUzMDQ2Clx1MzA1RFx1MzA2M1x1MzA1Qlx1MzA5MwpcdTMwNURcdTMwNjNcdTMwNjgKXHUzMDVEXHUzMDY4XHUzMDRCXHUzMDk5XHUzMDhGClx1MzA1RFx1MzA2OFx1MzA2NFx1MzA5OVx1MzA4OQpcdTMwNURcdTMwNkFcdTMwNDhcdTMwOEIKXHUzMDVEXHUzMDZBXHUzMDVGClx1MzA1RFx1MzA3NVx1MzA3Qlx1MzA5OQpcdTMwNURcdTMwN0JcdTMwOTlcdTMwNEYKXHUzMDVEXHUzMDdCXHUzMDk5XHUzMDhEClx1MzA1RFx1MzA3RVx1MzA2NApcdTMwNURcdTMwN0VcdTMwOEIKXHUzMDVEXHUzMDgwXHUzMDRGClx1MzA1RFx1MzA4MFx1MzA4QVx1MzA0OApcdTMwNURcdTMwODFcdTMwOEIKXHUzMDVEXHUzMDgyXHUzMDVEXHUzMDgyClx1MzA1RFx1MzA4OFx1MzA0Qlx1MzA1Qlx1MzA5OQpcdTMwNURcdTMwODlcdTMwN0VcdTMwODEKXHUzMDVEXHUzMDhEXHUzMDQ2Clx1MzA1RFx1MzA5M1x1MzA0Qlx1MzA0NApcdTMwNURcdTMwOTNcdTMwNTFcdTMwNDQKXHUzMDVEXHUzMDkzXHUzMDU1XHUzMDk5XHUzMDQ0Clx1MzA1RFx1MzA5M1x1MzA1N1x1MzA2NApcdTMwNURcdTMwOTNcdTMwNURcdTMwOTlcdTMwNEYKXHUzMDVEXHUzMDkzXHUzMDYxXHUzMDg3XHUzMDQ2Clx1MzA1RFx1MzA5OVx1MzA5M1x1MzA3Mlx1MzA5OQpcdTMwNURcdTMwOTlcdTMwOTNcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDVEXHUzMDkzXHUzMDdGXHUzMDkzClx1MzA1Rlx1MzA0Mlx1MzA0NApcdTMwNUZcdTMwNDRcdTMwNDRcdTMwOTMKXHUzMDVGXHUzMDQ0XHUzMDQ2XHUzMDkzClx1MzA1Rlx1MzA0NFx1MzA0OFx1MzA0RApcdTMwNUZcdTMwNDRcdTMwNEFcdTMwNDYKXHUzMDVGXHUzMDk5XHUzMDQ0XHUzMDRCXHUzMDk5XHUzMDRGClx1MzA1Rlx1MzA0NFx1MzA0RApcdTMwNUZcdTMwNDRcdTMwNEZcdTMwOTlcdTMwNDYKXHUzMDVGXHUzMDQ0XHUzMDUxXHUzMDkzClx1MzA1Rlx1MzA0NFx1MzA1MwpcdTMwNUZcdTMwNDRcdTMwNTVcdTMwOTlcdTMwNDQKXHUzMDVGXHUzMDk5XHUzMDQ0XHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2XHUzMDc1XHUzMDk5Clx1MzA1Rlx1MzA5OVx1MzA0NFx1MzA1OVx1MzA0RApcdTMwNUZcdTMwNDRcdTMwNUJcdTMwNjQKXHUzMDVGXHUzMDQ0XHUzMDVEXHUzMDQ2Clx1MzA1Rlx1MzA5OVx1MzA0NFx1MzA1Rlx1MzA0NApcdTMwNUZcdTMwNDRcdTMwNjFcdTMwODdcdTMwNDYKXHUzMDVGXHUzMDQ0XHUzMDY2XHUzMDQ0Clx1MzA1Rlx1MzA5OVx1MzA0NFx1MzA2OFx1MzA5OVx1MzA1M1x1MzA4RApcdTMwNUZcdTMwNDRcdTMwNkFcdTMwNDQKXHUzMDVGXHUzMDQ0XHUzMDZEXHUzMDY0Clx1MzA1Rlx1MzA0NFx1MzA2RVx1MzA0NgpcdTMwNUZcdTMwNDRcdTMwNkZcdTMwOTMKXHUzMDVGXHUzMDk5XHUzMDQ0XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA1Rlx1MzA0NFx1MzA3NVx1MzA0NgpcdTMwNUZcdTMwNDRcdTMwNzhcdTMwOTMKXHUzMDVGXHUzMDQ0XHUzMDdCClx1MzA1Rlx1MzA0NFx1MzA3RVx1MzA2NFx1MzA2Rlx1MzA5OVx1MzA2QQpcdTMwNUZcdTMwNDRcdTMwN0ZcdTMwOTNcdTMwNEZcdTMwOTkKXHUzMDVGXHUzMDQ0XHUzMDgwClx1MzA1Rlx1MzA0NFx1MzA4MVx1MzA5MwpcdTMwNUZcdTMwNDRcdTMwODRcdTMwNEQKXHUzMDVGXHUzMDQ0XHUzMDg4XHUzMDQ2Clx1MzA1Rlx1MzA0NFx1MzA4OQpcdTMwNUZcdTMwNDRcdTMwOEFcdTMwODdcdTMwNEYKXHUzMDVGXHUzMDQ0XHUzMDhCClx1MzA1Rlx1MzA0NFx1MzA4Rlx1MzA5MwpcdTMwNUZcdTMwNDZcdTMwNDgKXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA1Rlx1MzA0QVx1MzA1OQpcdTMwNUZcdTMwNEFcdTMwOEIKXHUzMDVGXHUzMDRBXHUzMDhDXHUzMDhCClx1MzA1Rlx1MzA0Qlx1MzA0NApcdTMwNUZcdTMwNEJcdTMwNkQKXHUzMDVGXHUzMDREXHUzMDcyXHUzMDk5Clx1MzA1Rlx1MzA0Rlx1MzA1NVx1MzA5MwpcdTMwNUZcdTMwNTNcdTMwNEYKXHUzMDVGXHUzMDUzXHUzMDg0XHUzMDREClx1MzA1Rlx1MzA1NVx1MzA0NApcdTMwNUZcdTMwNTdcdTMwNTVcdTMwOTlcdTMwOTMKXHUzMDVGXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDgzXHUzMDhDClx1MzA1Rlx1MzA1OVx1MzA1MVx1MzA4QgpcdTMwNUZcdTMwNTlcdTMwOTlcdTMwNTVcdTMwOEZcdTMwOEIKXHUzMDVGXHUzMDVEXHUzMDRCXHUzMDk5XHUzMDhDClx1MzA1Rlx1MzA1Rlx1MzA0Qlx1MzA0NgpcdTMwNUZcdTMwNUZcdTMwNEYKXHUzMDVGXHUzMDVGXHUzMDk5XHUzMDU3XHUzMDQ0Clx1MzA1Rlx1MzA1Rlx1MzA3RgpcdTMwNUZcdTMwNjFcdTMwNkZcdTMwOTlcdTMwNkEKXHUzMDVGXHUzMDk5XHUzMDYzXHUzMDRCXHUzMDQ0Clx1MzA1Rlx1MzA5OVx1MzA2M1x1MzA0RFx1MzA4M1x1MzA0RgpcdTMwNUZcdTMwOTlcdTMwNjNcdTMwNTMKXHUzMDVGXHUzMDk5XHUzMDYzXHUzMDU3XHUzMDg1XHUzMDY0Clx1MzA1Rlx1MzA5OVx1MzA2M1x1MzA1Rlx1MzA0NApcdTMwNUZcdTMwNjZcdTMwOEIKXHUzMDVGXHUzMDY4XHUzMDQ4XHUzMDhCClx1MzA1Rlx1MzA2QVx1MzA2Rlx1MzA5OVx1MzA1RgpcdTMwNUZcdTMwNkJcdTMwOTMKXHUzMDVGXHUzMDZDXHUzMDREClx1MzA1Rlx1MzA2RVx1MzA1N1x1MzA3RgpcdTMwNUZcdTMwNkZcdTMwNjQKXHUzMDVGXHUzMDc1XHUzMDk5XHUzMDkzClx1MzA1Rlx1MzA3OFx1MzA5OVx1MzA4QgpcdTMwNUZcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDVGXHUzMDdFXHUzMDUzXHUzMDk5Clx1MzA1Rlx1MzA3RVx1MzA4QgpcdTMwNUZcdTMwOTlcdTMwODBcdTMwOEIKXHUzMDVGXHUzMDgxXHUzMDQ0XHUzMDREClx1MzA1Rlx1MzA4MVx1MzA1OQpcdTMwNUZcdTMwODFcdTMwOEIKXHUzMDVGXHUzMDgyXHUzMDY0Clx1MzA1Rlx1MzA4NFx1MzA1OVx1MzA0NApcdTMwNUZcdTMwODhcdTMwOEIKXHUzMDVGXHUzMDg5XHUzMDU5Clx1MzA1Rlx1MzA4QVx1MzA0RFx1MzA3Qlx1MzA5M1x1MzA0Qlx1MzA5OVx1MzA5MwpcdTMwNUZcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDVGXHUzMDhBXHUzMDhCClx1MzA1Rlx1MzA4Qlx1MzA2OApcdTMwNUZcdTMwOENcdTMwOEIKXHUzMDVGXHUzMDhDXHUzMDkzXHUzMDY4Clx1MzA1Rlx1MzA4RFx1MzA2M1x1MzA2OApcdTMwNUZcdTMwOEZcdTMwODBcdTMwOENcdTMwOEIKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDQyXHUzMDY0Clx1MzA1Rlx1MzA5M1x1MzA0NApcdTMwNUZcdTMwOTNcdTMwNEFcdTMwOTMKXHUzMDVGXHUzMDkzXHUzMDRCClx1MzA1Rlx1MzA5M1x1MzA0RApcdTMwNUZcdTMwOTNcdTMwNTFcdTMwOTMKXHUzMDVGXHUzMDkzXHUzMDUzXHUzMDk5Clx1MzA1Rlx1MzA5M1x1MzA1NVx1MzA5MwpcdTMwNUZcdTMwOTNcdTMwNTdcdTMwOTlcdTMwODdcdTMwNDZcdTMwNzJcdTMwOTkKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDVCXHUzMDQ0Clx1MzA1Rlx1MzA5M1x1MzA1RFx1MzA0RgpcdTMwNUZcdTMwOTNcdTMwNUZcdTMwNDQKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDYxClx1MzA1Rlx1MzA5M1x1MzA2Nlx1MzA0NApcdTMwNUZcdTMwOTNcdTMwNjhcdTMwNDYKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDZBClx1MzA1Rlx1MzA5M1x1MzA2Qlx1MzA5MwpcdTMwNUZcdTMwOTlcdTMwOTNcdTMwNkRcdTMwNjQKXHUzMDVGXHUzMDkzXHUzMDZFXHUzMDQ2Clx1MzA1Rlx1MzA5M1x1MzA3Mlx1MzA5QVx1MzA5MwpcdTMwNUZcdTMwOTlcdTMwOTNcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDVGXHUzMDkzXHUzMDdFXHUzMDY0Clx1MzA1Rlx1MzA5M1x1MzA4MVx1MzA0NApcdTMwNUZcdTMwOTlcdTMwOTNcdTMwOENcdTMwNjQKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDhEClx1MzA1Rlx1MzA5OVx1MzA5M1x1MzA4RgpcdTMwNjFcdTMwNDJcdTMwNDQKXHUzMDYxXHUzMDQyXHUzMDkzClx1MzA2MVx1MzA0NFx1MzA0RApcdTMwNjFcdTMwNDRcdTMwNTVcdTMwNDQKXHUzMDYxXHUzMDQ4XHUzMDkzClx1MzA2MVx1MzA0Qlx1MzA0NApcdTMwNjFcdTMwNEJcdTMwODkKXHUzMDYxXHUzMDREXHUzMDg1XHUzMDQ2Clx1MzA2MVx1MzA0RFx1MzA5MwpcdTMwNjFcdTMwNTFcdTMwNDRcdTMwNTlcdTMwOTkKXHUzMDYxXHUzMDUxXHUzMDkzClx1MzA2MVx1MzA1M1x1MzA0RgpcdTMwNjFcdTMwNTVcdTMwNDQKXHUzMDYxXHUzMDU3XHUzMDREClx1MzA2MVx1MzA1N1x1MzA4QVx1MzA4N1x1MzA0NgpcdTMwNjFcdTMwNUJcdTMwNDQKXHUzMDYxXHUzMDVEXHUzMDQ2Clx1MzA2MVx1MzA1Rlx1MzA0NApcdTMwNjFcdTMwNUZcdTMwOTMKXHUzMDYxXHUzMDYxXHUzMDRBXHUzMDg0Clx1MzA2MVx1MzA2NFx1MzA1N1x1MzA5OVx1MzA4NwpcdTMwNjFcdTMwNjZcdTMwNEQKXHUzMDYxXHUzMDY2XHUzMDkzClx1MzA2MVx1MzA2Q1x1MzA0RApcdTMwNjFcdTMwNkNcdTMwOEEKXHUzMDYxXHUzMDZFXHUzMDQ2Clx1MzA2MVx1MzA3Mlx1MzA4N1x1MzA0NgpcdTMwNjFcdTMwNzhcdTMwNDRcdTMwNUJcdTMwOTMKXHUzMDYxXHUzMDdCXHUzMDQ2Clx1MzA2MVx1MzA3RVx1MzA1RgpcdTMwNjFcdTMwN0ZcdTMwNjQKXHUzMDYxXHUzMDdGXHUzMDY4XHUzMDk5XHUzMDhEClx1MzA2MVx1MzA4MVx1MzA0NFx1MzA2OFx1MzA5OQpcdTMwNjFcdTMwODNcdTMwOTNcdTMwNTNcdTMwNkFcdTMwNzhcdTMwOTkKXHUzMDYxXHUzMDg1XHUzMDQ2XHUzMDQ0Clx1MzA2MVx1MzA4Nlx1MzA4QVx1MzA4N1x1MzA0RgpcdTMwNjFcdTMwODdcdTMwNDZcdTMwNTcKXHUzMDYxXHUzMDg3XHUzMDU1XHUzMDRGXHUzMDUxXHUzMDkzClx1MzA2MVx1MzA4OVx1MzA1NwpcdTMwNjFcdTMwODlcdTMwN0YKXHUzMDYxXHUzMDhBXHUzMDRCXHUzMDk5XHUzMDdGClx1MzA2MVx1MzA4QVx1MzA4N1x1MzA0NgpcdTMwNjFcdTMwOEJcdTMwNjhcdTMwOTkKXHUzMDYxXHUzMDhGXHUzMDhGClx1MzA2MVx1MzA5M1x1MzA1Rlx1MzA0NApcdTMwNjFcdTMwOTNcdTMwODJcdTMwNEYKXHUzMDY0XHUzMDQ0XHUzMDRCClx1MzA2NFx1MzA0NFx1MzA1Rlx1MzA2MQpcdTMwNjRcdTMwNDZcdTMwNEIKXHUzMDY0XHUzMDQ2XHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA2NFx1MzA0Nlx1MzA2Rlx1MzA5MwpcdTMwNjRcdTMwNDZcdTMwOEYKXHUzMDY0XHUzMDRCXHUzMDQ2Clx1MzA2NFx1MzA0Qlx1MzA4Q1x1MzA4QgpcdTMwNjRcdTMwNEZcdTMwNkQKXHUzMDY0XHUzMDRGXHUzMDhCClx1MzA2NFx1MzA1MVx1MzA2RApcdTMwNjRcdTMwNTFcdTMwOEIKXHUzMDY0XHUzMDUzXHUzMDk5XHUzMDQ2Clx1MzA2NFx1MzA1Rlx1MzA0OFx1MzA4QgpcdTMwNjRcdTMwNjRcdTMwOTlcdTMwNEYKXHUzMDY0XHUzMDY0XHUzMDU3XHUzMDk5Clx1MzA2NFx1MzA2NFx1MzA4MApcdTMwNjRcdTMwNjhcdTMwODFcdTMwOEIKXHUzMDY0XHUzMDZBXHUzMDRCXHUzMDk5XHUzMDhCClx1MzA2NFx1MzA2QVx1MzA3RgpcdTMwNjRcdTMwNkRcdTMwNjRcdTMwOTlcdTMwNkQKXHUzMDY0XHUzMDZFXHUzMDhCClx1MzA2NFx1MzA3NVx1MzA5OVx1MzA1OQpcdTMwNjRcdTMwN0VcdTMwODlcdTMwNkFcdTMwNDQKXHUzMDY0XHUzMDdFXHUzMDhCClx1MzA2NFx1MzA3Rlx1MzA0RApcdTMwNjRcdTMwODFcdTMwNUZcdTMwNDQKXHUzMDY0XHUzMDgyXHUzMDhBClx1MzA2NFx1MzA4Mlx1MzA4QgpcdTMwNjRcdTMwODhcdTMwNDQKXHUzMDY0XHUzMDhCXHUzMDdCXHUzMDk5Clx1MzA2NFx1MzA4Qlx1MzA3Rlx1MzA0RgpcdTMwNjRcdTMwOEZcdTMwODJcdTMwNkUKXHUzMDY0XHUzMDhGXHUzMDhBClx1MzA2Nlx1MzA0Mlx1MzA1NwpcdTMwNjZcdTMwNDJcdTMwNjYKXHUzMDY2XHUzMDQyXHUzMDdGClx1MzA2Nlx1MzA0NFx1MzA0QVx1MzA5MwpcdTMwNjZcdTMwNDRcdTMwNEIKXHUzMDY2XHUzMDQ0XHUzMDREClx1MzA2Nlx1MzA0NFx1MzA1MVx1MzA0NApcdTMwNjZcdTMwNDRcdTMwNTNcdTMwNEYKXHUzMDY2XHUzMDQ0XHUzMDU1XHUzMDY0Clx1MzA2Nlx1MzA0NFx1MzA1NwpcdTMwNjZcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDY2XHUzMDQ0XHUzMDVGXHUzMDQ0Clx1MzA2Nlx1MzA0NFx1MzA2OFx1MzA5OQpcdTMwNjZcdTMwNDRcdTMwNkRcdTMwNDQKXHUzMDY2XHUzMDQ0XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA2Nlx1MzA0NFx1MzA3OFx1MzA5MwpcdTMwNjZcdTMwNDRcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDY2XHUzMDQ2XHUzMDYxClx1MzA2Nlx1MzA0QVx1MzA0Rlx1MzA4QwpcdTMwNjZcdTMwNERcdTMwNjhcdTMwNDYKXHUzMDY2XHUzMDRGXHUzMDcyXHUzMDk5Clx1MzA2Nlx1MzA5OVx1MzA1M1x1MzA3Qlx1MzA5OVx1MzA1MwpcdTMwNjZcdTMwNTVcdTMwNERcdTMwOTlcdTMwODdcdTMwNDYKXHUzMDY2XHUzMDU1XHUzMDUxXHUzMDk5Clx1MzA2Nlx1MzA1OVx1MzA4QQpcdTMwNjZcdTMwNURcdTMwNDYKXHUzMDY2XHUzMDYxXHUzMDRCXHUzMDk5XHUzMDQ0Clx1MzA2Nlx1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNjZcdTMwNjRcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDY2XHUzMDY0XHUzMDY0XHUzMDk5XHUzMDREClx1MzA2Nlx1MzA5OVx1MzA2M1x1MzA2Rlx1MzA5QQpcdTMwNjZcdTMwNjRcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDY2XHUzMDY0XHUzMDg0Clx1MzA2Nlx1MzA5OVx1MzA2Q1x1MzA0Qlx1MzA0OApcdTMwNjZcdTMwNkNcdTMwNEQKXHUzMDY2XHUzMDZDXHUzMDRGXHUzMDk5XHUzMDQ0Clx1MzA2Nlx1MzA2RVx1MzA3Mlx1MzA4OQpcdTMwNjZcdTMwNkZcdTMwNDQKXHUzMDY2XHUzMDc1XHUzMDk5XHUzMDRGXHUzMDhEClx1MzA2Nlx1MzA3NVx1MzA1Rlx1MzA5OQpcdTMwNjZcdTMwN0JcdTMwNjhcdTMwOTlcdTMwNEQKXHUzMDY2XHUzMDdCXHUzMDkzClx1MzA2Nlx1MzA3RVx1MzA0OApcdTMwNjZcdTMwN0VcdTMwNERcdTMwNTlcdTMwOTlcdTMwNTcKXHUzMDY2XHUzMDdGXHUzMDU3XHUzMDk5XHUzMDRCClx1MzA2Nlx1MzA3Rlx1MzA4NFx1MzA1MVx1MzA5OQpcdTMwNjZcdTMwODlcdTMwNTkKXHUzMDY2XHUzMDhDXHUzMDcyXHUzMDk5Clx1MzA2Nlx1MzA4Rlx1MzA1MQpcdTMwNjZcdTMwOEZcdTMwNUZcdTMwNTcKXHUzMDY2XHUzMDk5XHUzMDkzXHUzMDQyXHUzMDY0Clx1MzA2Nlx1MzA5M1x1MzA0NFx1MzA5MwpcdTMwNjZcdTMwOTNcdTMwNEJcdTMwNDQKXHUzMDY2XHUzMDkzXHUzMDREClx1MzA2Nlx1MzA5M1x1MzA0Rlx1MzA5OQpcdTMwNjZcdTMwOTNcdTMwNTFcdTMwOTMKXHUzMDY2XHUzMDkzXHUzMDUzXHUzMDk5XHUzMDRGClx1MzA2Nlx1MzA5M1x1MzA1NVx1MzA0NApcdTMwNjZcdTMwOTNcdTMwNTcKXHUzMDY2XHUzMDkzXHUzMDU5XHUzMDQ2Clx1MzA2Nlx1MzA5OVx1MzA5M1x1MzA2MQpcdTMwNjZcdTMwOTNcdTMwNjZcdTMwNEQKXHUzMDY2XHUzMDkzXHUzMDY4XHUzMDQ2Clx1MzA2Nlx1MzA5M1x1MzA2QVx1MzA0NApcdTMwNjZcdTMwOTNcdTMwNzVcdTMwOUFcdTMwODkKXHUzMDY2XHUzMDkzXHUzMDdCXHUzMDk5XHUzMDQ2XHUzMDVGXHUzMDk5XHUzMDQ0Clx1MzA2Nlx1MzA5M1x1MzA4MVx1MzA2NApcdTMwNjZcdTMwOTNcdTMwODlcdTMwOTNcdTMwNEJcdTMwNDQKXHUzMDY2XHUzMDk5XHUzMDkzXHUzMDhBXHUzMDg3XHUzMDRGClx1MzA2Nlx1MzA5OVx1MzA5M1x1MzA4RgpcdTMwNjhcdTMwOTlcdTMwNDJcdTMwNDQKXHUzMDY4XHUzMDQ0XHUzMDhDClx1MzA2OFx1MzA5OVx1MzA0Nlx1MzA0Qlx1MzA5MwpcdTMwNjhcdTMwNDZcdTMwNERcdTMwODVcdTMwNDYKXHUzMDY4XHUzMDk5XHUzMDQ2XHUzMDRGXHUzMDk5Clx1MzA2OFx1MzA0Nlx1MzA1NwpcdTMwNjhcdTMwNDZcdTMwODBcdTMwNERcdTMwOTkKXHUzMDY4XHUzMDRBXHUzMDQ0Clx1MzA2OFx1MzA0QVx1MzA0QgpcdTMwNjhcdTMwNEFcdTMwNEYKXHUzMDY4XHUzMDRBXHUzMDU5Clx1MzA2OFx1MzA0QVx1MzA4QgpcdTMwNjhcdTMwNEJcdTMwNDQKXHUzMDY4XHUzMDRCXHUzMDU5Clx1MzA2OFx1MzA0RFx1MzA0QVx1MzA4QQpcdTMwNjhcdTMwNERcdTMwNjhcdTMwOTlcdTMwNEQKXHUzMDY4XHUzMDRGXHUzMDQ0Clx1MzA2OFx1MzA0Rlx1MzA1N1x1MzA4NVx1MzA0NgpcdTMwNjhcdTMwNEZcdTMwNjZcdTMwOTMKXHUzMDY4XHUzMDRGXHUzMDZCClx1MzA2OFx1MzA0Rlx1MzA3OFx1MzA5OVx1MzA2NApcdTMwNjhcdTMwNTFcdTMwNDQKXHUzMDY4XHUzMDUxXHUzMDhCClx1MzA2OFx1MzA1M1x1MzA4NApcdTMwNjhcdTMwNTVcdTMwNEIKXHUzMDY4XHUzMDU3XHUzMDg3XHUzMDRCXHUzMDkzClx1MzA2OFx1MzA1RFx1MzA0NgpcdTMwNjhcdTMwNUZcdTMwOTMKXHUzMDY4XHUzMDYxXHUzMDg1XHUzMDQ2Clx1MzA2OFx1MzA2M1x1MzA0RFx1MzA4NVx1MzA0NgpcdTMwNjhcdTMwNjNcdTMwNEZcdTMwOTMKXHUzMDY4XHUzMDY0XHUzMDVCXHUzMDk5XHUzMDkzClx1MzA2OFx1MzA2NFx1MzA2Qlx1MzA4NVx1MzA0NgpcdTMwNjhcdTMwNjhcdTMwOTlcdTMwNTFcdTMwOEIKXHUzMDY4XHUzMDY4XHUzMDZFXHUzMDQ4XHUzMDhCClx1MzA2OFx1MzA2QVx1MzA0NApcdTMwNjhcdTMwNkFcdTMwNDhcdTMwOEIKXHUzMDY4XHUzMDZBXHUzMDhBClx1MzA2OFx1MzA2RVx1MzA1NVx1MzA3RQpcdTMwNjhcdTMwNkZcdTMwOTlcdTMwNTkKXHUzMDY4XHUzMDk5XHUzMDc1XHUzMDk5XHUzMDRCXHUzMDk5XHUzMDhGClx1MzA2OFx1MzA3Qlx1MzA0NgpcdTMwNjhcdTMwN0VcdTMwOEIKXHUzMDY4XHUzMDgxXHUzMDhCClx1MzA2OFx1MzA4Mlx1MzA1Rlx1MzA5OVx1MzA2MQpcdTMwNjhcdTMwODJcdTMwOEIKXHUzMDY4XHUzMDk5XHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA2OFx1MzA4OVx1MzA0OFx1MzA4QgpcdTMwNjhcdTMwOTNcdTMwNEJcdTMwNjQKXHUzMDY4XHUzMDk5XHUzMDkzXHUzMDc1XHUzMDk5XHUzMDhBClx1MzA2QVx1MzA0NFx1MzA0Qlx1MzA0RgpcdTMwNkFcdTMwNDRcdTMwNTNcdTMwNDYKXHUzMDZBXHUzMDQ0XHUzMDU3XHUzMDg3Clx1MzA2QVx1MzA0NFx1MzA1OQpcdTMwNkFcdTMwNDRcdTMwNUJcdTMwOTMKXHUzMDZBXHUzMDQ0XHUzMDVEXHUzMDQ2Clx1MzA2QVx1MzA0QVx1MzA1OQpcdTMwNkFcdTMwNEJcdTMwOTlcdTMwNDQKXHUzMDZBXHUzMDRGXHUzMDU5Clx1MzA2QVx1MzA1MVx1MzA5OVx1MzA4QgpcdTMwNkFcdTMwNTNcdTMwNDZcdTMwNjhcdTMwOTkKXHUzMDZBXHUzMDU1XHUzMDUxClx1MzA2QVx1MzA1Rlx1MzA2Nlx1MzA5OVx1MzA1M1x1MzA1MwpcdTMwNkFcdTMwNjNcdTMwNjhcdTMwNDYKXHUzMDZBXHUzMDY0XHUzMDg0XHUzMDU5XHUzMDdGClx1MzA2QVx1MzA2QVx1MzA0QVx1MzA1NwpcdTMwNkFcdTMwNkJcdTMwNTNcdTMwOTlcdTMwNjgKXHUzMDZBXHUzMDZCXHUzMDgyXHUzMDZFClx1MzA2QVx1MzA2Qlx1MzA4RgpcdTMwNkFcdTMwNkVcdTMwNEIKXHUzMDZBXHUzMDc1XHUzMDVGXHUzMDk5Clx1MzA2QVx1MzA3RVx1MzA0NFx1MzA0RApcdTMwNkFcdTMwN0VcdTMwNDgKXHUzMDZBXHUzMDdFXHUzMDdGClx1MzA2QVx1MzA3Rlx1MzA1Rlx1MzA5OQpcdTMwNkFcdTMwODFcdTMwODlcdTMwNEIKXHUzMDZBXHUzMDgxXHUzMDhCClx1MzA2QVx1MzA4NFx1MzA4MApcdTMwNkFcdTMwODlcdTMwNDYKXHUzMDZBXHUzMDg5XHUzMDcyXHUzMDk5Clx1MzA2QVx1MzA4OVx1MzA3NVx1MzA5OQpcdTMwNkFcdTMwOENcdTMwOEIKXHUzMDZBXHUzMDhGXHUzMDY4XHUzMDcyXHUzMDk5Clx1MzA2QVx1MzA4Rlx1MzA2Rlx1MzA5OVx1MzA4QQpcdTMwNkJcdTMwNDJcdTMwNDYKXHUzMDZCXHUzMDQ0XHUzMDRCXHUzMDk5XHUzMDVGClx1MzA2Qlx1MzA0Nlx1MzA1MQpcdTMwNkJcdTMwNEFcdTMwNDQKXHUzMDZCXHUzMDRCXHUzMDQ0Clx1MzA2Qlx1MzA0Qlx1MzA5OVx1MzA2NgpcdTMwNkJcdTMwNERcdTMwNzJcdTMwOTkKXHUzMDZCXHUzMDRGXHUzMDU3XHUzMDdGClx1MzA2Qlx1MzA0Rlx1MzA3RVx1MzA5MwpcdTMwNkJcdTMwNTFcdTMwOTlcdTMwOEIKXHUzMDZCXHUzMDU1XHUzMDkzXHUzMDRCXHUzMDVGXHUzMDkzXHUzMDVEClx1MzA2Qlx1MzA1N1x1MzA0RApcdTMwNkJcdTMwNUJcdTMwODJcdTMwNkUKXHUzMDZCXHUzMDYxXHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA2Qlx1MzA2MVx1MzA4OFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNkJcdTMwNjNcdTMwNEIKXHUzMDZCXHUzMDYzXHUzMDREClx1MzA2Qlx1MzA2M1x1MzA1MVx1MzA0NApcdTMwNkJcdTMwNjNcdTMwNTNcdTMwNDYKXHUzMDZCXHUzMDYzXHUzMDU1XHUzMDkzClx1MzA2Qlx1MzA2M1x1MzA1N1x1MzA4N1x1MzA0RgpcdTMwNkJcdTMwNjNcdTMwNTlcdTMwNDYKXHUzMDZCXHUzMDYzXHUzMDVCXHUzMDREClx1MzA2Qlx1MzA2M1x1MzA2Nlx1MzA0NApcdTMwNkJcdTMwNkFcdTMwNDYKXHUzMDZCXHUzMDdCXHUzMDkzClx1MzA2Qlx1MzA3RVx1MzA4MQpcdTMwNkJcdTMwODJcdTMwNjQKXHUzMDZCXHUzMDg0XHUzMDhBClx1MzA2Qlx1MzA4NVx1MzA0Nlx1MzA0NFx1MzA5MwpcdTMwNkJcdTMwOEFcdTMwOTNcdTMwNTdcdTMwODMKXHUzMDZCXHUzMDhGXHUzMDY4XHUzMDhBClx1MzA2Qlx1MzA5M1x1MzA0NApcdTMwNkJcdTMwOTNcdTMwNEIKXHUzMDZCXHUzMDkzXHUzMDREClx1MzA2Qlx1MzA5M1x1MzA1MVx1MzA5OVx1MzA5MwpcdTMwNkJcdTMwOTNcdTMwNTdcdTMwNEQKXHUzMDZCXHUzMDkzXHUzMDU5XHUzMDk5XHUzMDQ2Clx1MzA2Qlx1MzA5M1x1MzA1RFx1MzA0NgpcdTMwNkJcdTMwOTNcdTMwNUZcdTMwNDQKXHUzMDZCXHUzMDkzXHUzMDYxClx1MzA2Qlx1MzA5M1x1MzA2Nlx1MzA0NApcdTMwNkJcdTMwOTNcdTMwNkJcdTMwNEYKXHUzMDZCXHUzMDkzXHUzMDc1XHUzMDlBClx1MzA2Qlx1MzA5M1x1MzA3RVx1MzA4QQpcdTMwNkJcdTMwOTNcdTMwODAKXHUzMDZCXHUzMDkzXHUzMDgxXHUzMDQ0Clx1MzA2Qlx1MzA5M1x1MzA4OFx1MzA0NgpcdTMwNkNcdTMwNDRcdTMwNEZcdTMwNERcdTMwOTkKXHUzMDZDXHUzMDRCXHUzMDU5Clx1MzA2Q1x1MzA0Rlx1MzA5OVx1MzA0NFx1MzA2OFx1MzA4QgpcdTMwNkNcdTMwNEZcdTMwOTlcdTMwNDYKXHUzMDZDXHUzMDRGXHUzMDgyXHUzMDhBClx1MzA2Q1x1MzA1OVx1MzA4MApcdTMwNkNcdTMwN0VcdTMwNDhcdTMwNzJcdTMwOTkKXHUzMDZDXHUzMDgxXHUzMDhBClx1MzA2Q1x1MzA4OVx1MzA1OQpcdTMwNkNcdTMwOTNcdTMwNjFcdTMwODNcdTMwNEYKXHUzMDZEXHUzMDQyXHUzMDUxXHUzMDk5Clx1MzA2RFx1MzA0NFx1MzA0RApcdTMwNkRcdTMwNDRcdTMwOEIKXHUzMDZEXHUzMDQ0XHUzMDhEClx1MzA2RFx1MzA0Rlx1MzA5OVx1MzA1QgpcdTMwNkRcdTMwNEZcdTMwNUZcdTMwNDQKXHUzMDZEXHUzMDRGXHUzMDg5Clx1MzA2RFx1MzA1M1x1MzA1Qlx1MzA5OQpcdTMwNkRcdTMwNTNcdTMwODAKXHUzMDZEXHUzMDU1XHUzMDUxXHUzMDk5Clx1MzA2RFx1MzA1OVx1MzA1M1x1MzA5OVx1MzA1OQpcdTMwNkRcdTMwNURcdTMwNzhcdTMwOTlcdTMwOEIKXHUzMDZEXHUzMDVGXHUzMDk5XHUzMDkzClx1MzA2RFx1MzA2NFx1MzA0NApcdTMwNkRcdTMwNjNcdTMwNTdcdTMwOTMKXHUzMDZEXHUzMDY0XHUzMDVEXHUzMDk5XHUzMDQ2Clx1MzA2RFx1MzA2M1x1MzA1Rlx1MzA0NFx1MzA0RFx1MzA5OVx1MzA4NwpcdTMwNkRcdTMwNzVcdTMwOTlcdTMwNURcdTMwNEYKXHUzMDZEXHUzMDc1XHUzMDVGXHUzMDk5Clx1MzA2RFx1MzA3Qlx1MzA5OVx1MzA0NgpcdTMwNkRcdTMwN0JcdTMwOEFcdTMwNkZcdTMwN0JcdTMwOEEKXHUzMDZEXHUzMDdFXHUzMDREClx1MzA2RFx1MzA3RVx1MzA4Rlx1MzA1NwpcdTMwNkRcdTMwN0ZcdTMwN0YKXHUzMDZEXHUzMDgwXHUzMDQ0Clx1MzA2RFx1MzA4MFx1MzA1Rlx1MzA0NApcdTMwNkRcdTMwODJcdTMwNjgKXHUzMDZEXHUzMDg5XHUzMDQ2Clx1MzA2RFx1MzA4Rlx1MzA1NVx1MzA5OQpcdTMwNkRcdTMwOTNcdTMwNDRcdTMwOEEKXHUzMDZEXHUzMDkzXHUzMDRBXHUzMDU3Clx1MzA2RFx1MzA5M1x1MzA0Qlx1MzA5MwpcdTMwNkRcdTMwOTNcdTMwNERcdTMwOTMKXHUzMDZEXHUzMDkzXHUzMDRGXHUzMDk5Clx1MzA2RFx1MzA5M1x1MzA1NVx1MzA5OQpcdTMwNkRcdTMwOTNcdTMwNTcKXHUzMDZEXHUzMDkzXHUzMDYxXHUzMDgzXHUzMDRGClx1MzA2RFx1MzA5M1x1MzA2OFx1MzA5OQpcdTMwNkRcdTMwOTNcdTMwNzJcdTMwOUEKXHUzMDZEXHUzMDkzXHUzMDc1XHUzMDk5XHUzMDY0Clx1MzA2RFx1MzA5M1x1MzA3RVx1MzA2NApcdTMwNkRcdTMwOTNcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDZEXHUzMDkzXHUzMDhDXHUzMDQ0Clx1MzA2RVx1MzA0NFx1MzA1OVx1MzA5OQpcdTMwNkVcdTMwNEFcdTMwNjRcdTMwOTlcdTMwN0UKXHUzMDZFXHUzMDRCXHUzMDk5XHUzMDU5Clx1MzA2RVx1MzA0RFx1MzA2QVx1MzA3RgpcdTMwNkVcdTMwNTNcdTMwNERcdTMwOTlcdTMwOEEKXHUzMDZFXHUzMDUzXHUzMDU5Clx1MzA2RVx1MzA1M1x1MzA4QgpcdTMwNkVcdTMwNUJcdTMwOEIKXHUzMDZFXHUzMDVEXHUzMDk5XHUzMDRGClx1MzA2RVx1MzA1RFx1MzA5OVx1MzA4MApcdTMwNkVcdTMwNUZcdTMwN0VcdTMwNDYKXHUzMDZFXHUzMDYxXHUzMDdCXHUzMDY4XHUzMDk5Clx1MzA2RVx1MzA2M1x1MzA0RgpcdTMwNkVcdTMwNkZcdTMwOTlcdTMwNTkKXHUzMDZFXHUzMDZGXHUzMDg5Clx1MzA2RVx1MzA3OFx1MzA5OVx1MzA4QgpcdTMwNkVcdTMwN0JcdTMwOTlcdTMwOEIKXHUzMDZFXHUzMDdGXHUzMDgyXHUzMDZFClx1MzA2RVx1MzA4NFx1MzA3RQpcdTMwNkVcdTMwODlcdTMwNDRcdTMwNkMKXHUzMDZFXHUzMDg5XHUzMDZEXHUzMDUzClx1MzA2RVx1MzA4QVx1MzA4Mlx1MzA2RQpcdTMwNkVcdTMwOEFcdTMwODZcdTMwNEQKXHUzMDZFXHUzMDhDXHUzMDkzClx1MzA2RVx1MzA5M1x1MzA0RApcdTMwNkZcdTMwOTlcdTMwNDJcdTMwNDQKXHUzMDZGXHUzMDQyXHUzMDRGClx1MzA2Rlx1MzA5OVx1MzA0Mlx1MzA1NVx1MzA5MwpcdTMwNkZcdTMwOTlcdTMwNDRcdTMwNEIKXHUzMDZGXHUzMDk5XHUzMDQ0XHUzMDRGClx1MzA2Rlx1MzA0NFx1MzA1MVx1MzA5MwpcdTMwNkZcdTMwNDRcdTMwNTNcdTMwOTkKXHUzMDZGXHUzMDQ0XHUzMDU3XHUzMDkzClx1MzA2Rlx1MzA0NFx1MzA1OVx1MzA0NApcdTMwNkZcdTMwNDRcdTMwNUJcdTMwOTMKXHUzMDZGXHUzMDQ0XHUzMDVEXHUzMDQ2Clx1MzA2Rlx1MzA0NFx1MzA2MQpcdTMwNkZcdTMwOTlcdTMwNDRcdTMwNkZcdTMwOTlcdTMwNDQKXHUzMDZGXHUzMDQ0XHUzMDhDXHUzMDY0Clx1MzA2Rlx1MzA0OFx1MzA4QgpcdTMwNkZcdTMwNEFcdTMwOEIKXHUzMDZGXHUzMDRCXHUzMDQ0Clx1MzA2Rlx1MzA5OVx1MzA0Qlx1MzA4QQpcdTMwNkZcdTMwNEJcdTMwOEIKXHUzMDZGXHUzMDRGXHUzMDU3XHUzMDg1Clx1MzA2Rlx1MzA1MVx1MzA5MwpcdTMwNkZcdTMwNTNcdTMwNzVcdTMwOTkKXHUzMDZGXHUzMDU1XHUzMDdGClx1MzA2Rlx1MzA1NVx1MzA5MwpcdTMwNkZcdTMwNTdcdTMwNTNcdTMwOTkKXHUzMDZGXHUzMDk5XHUzMDU3XHUzMDg3Clx1MzA2Rlx1MzA1N1x1MzA4QgpcdTMwNkZcdTMwNUJcdTMwOEIKXHUzMDZGXHUzMDlBXHUzMDVEXHUzMDUzXHUzMDkzClx1MzA2Rlx1MzA1RFx1MzA5MwpcdTMwNkZcdTMwNUZcdTMwOTMKXHUzMDZGXHUzMDYxXHUzMDdGXHUzMDY0Clx1MzA2Rlx1MzA2NFx1MzA0QVx1MzA5MwpcdTMwNkZcdTMwNjNcdTMwNEJcdTMwNEYKXHUzMDZGXHUzMDY0XHUzMDk5XHUzMDREClx1MzA2Rlx1MzA2M1x1MzA0RFx1MzA4QQpcdTMwNkZcdTMwNjNcdTMwNEZcdTMwNjQKXHUzMDZGXHUzMDYzXHUzMDUxXHUzMDkzClx1MzA2Rlx1MzA2M1x1MzA1M1x1MzA0NgpcdTMwNkZcdTMwNjNcdTMwNTVcdTMwOTMKXHUzMDZGXHUzMDYzXHUzMDU3XHUzMDkzClx1MzA2Rlx1MzA2M1x1MzA1Rlx1MzA2NApcdTMwNkZcdTMwNjNcdTMwNjFcdTMwODVcdTMwNDYKXHUzMDZGXHUzMDYzXHUzMDY2XHUzMDkzClx1MzA2Rlx1MzA2M1x1MzA3Mlx1MzA5QVx1MzA4N1x1MzA0NgpcdTMwNkZcdTMwNjNcdTMwN0JcdTMwOUFcdTMwNDYKXHUzMDZGXHUzMDZBXHUzMDU5Clx1MzA2Rlx1MzA2QVx1MzA3Mlx1MzA5OQpcdTMwNkZcdTMwNkJcdTMwNEJcdTMwODAKXHUzMDZGXHUzMDc1XHUzMDk5XHUzMDg5XHUzMDU3Clx1MzA2Rlx1MzA3Rlx1MzA0Qlx1MzA5OVx1MzA0RApcdTMwNkZcdTMwODBcdTMwNEJcdTMwNDYKXHUzMDZGXHUzMDgxXHUzMDY0Clx1MzA2Rlx1MzA4NFx1MzA0NApcdTMwNkZcdTMwODRcdTMwNTcKXHUzMDZGXHUzMDg5XHUzMDQ2Clx1MzA2Rlx1MzA4RFx1MzA0Nlx1MzA0M1x1MzA5MwpcdTMwNkZcdTMwOEZcdTMwNDQKXHUzMDZGXHUzMDkzXHUzMDQ0Clx1MzA2Rlx1MzA5M1x1MzA0OFx1MzA0NApcdTMwNkZcdTMwOTNcdTMwNEFcdTMwOTMKXHUzMDZGXHUzMDkzXHUzMDRCXHUzMDRGClx1MzA2Rlx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0NgpcdTMwNkZcdTMwOTlcdTMwOTNcdTMwNEZcdTMwOTlcdTMwN0YKXHUzMDZGXHUzMDkzXHUzMDUzClx1MzA2Rlx1MzA5M1x1MzA1N1x1MzA4MwpcdTMwNkZcdTMwOTNcdTMwNTlcdTMwNDYKXHUzMDZGXHUzMDkzXHUzMDVGXHUzMDk5XHUzMDkzClx1MzA2Rlx1MzA5QVx1MzA5M1x1MzA2MQpcdTMwNkZcdTMwOUFcdTMwOTNcdTMwNjQKXHUzMDZGXHUzMDkzXHUzMDY2XHUzMDQ0Clx1MzA2Rlx1MzA5M1x1MzA2OFx1MzA1NwpcdTMwNkZcdTMwOTNcdTMwNkVcdTMwNDYKXHUzMDZGXHUzMDkzXHUzMDZGXHUzMDlBClx1MzA2Rlx1MzA5M1x1MzA3NVx1MzA5OVx1MzA5MwpcdTMwNkZcdTMwOTNcdTMwNzhcdTMwOUFcdTMwOTMKXHUzMDZGXHUzMDkzXHUzMDdCXHUzMDk5XHUzMDQ2XHUzMDREClx1MzA2Rlx1MzA5M1x1MzA4MVx1MzA0NApcdTMwNkZcdTMwOTNcdTMwODlcdTMwOTMKXHUzMDZGXHUzMDkzXHUzMDhEXHUzMDkzClx1MzA3Mlx1MzA0NFx1MzA0RApcdTMwNzJcdTMwNDZcdTMwOTMKXHUzMDcyXHUzMDQ4XHUzMDhCClx1MzA3Mlx1MzA0Qlx1MzA0RgpcdTMwNzJcdTMwNEJcdTMwOEEKXHUzMDcyXHUzMDRCXHUzMDhCClx1MzA3Mlx1MzA0Qlx1MzA5MwpcdTMwNzJcdTMwNEZcdTMwNDQKXHUzMDcyXHUzMDUxXHUzMDY0Clx1MzA3Mlx1MzA1M1x1MzA0Nlx1MzA0RApcdTMwNzJcdTMwNTNcdTMwNEYKXHUzMDcyXHUzMDU1XHUzMDQ0Clx1MzA3Mlx1MzA1NVx1MzA1N1x1MzA3NVx1MzA5OVx1MzA4QQpcdTMwNzJcdTMwNTVcdTMwOTMKXHUzMDcyXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDg1XHUzMDY0XHUzMDRCXHUzMDkzClx1MzA3Mlx1MzA1N1x1MzA4NwpcdTMwNzJcdTMwNURcdTMwNEIKXHUzMDcyXHUzMDVEXHUzMDgwClx1MzA3Mlx1MzA1Rlx1MzA4MFx1MzA0RApcdTMwNzJcdTMwNUZcdTMwOTlcdTMwOEEKXHUzMDcyXHUzMDVGXHUzMDhCClx1MzA3Mlx1MzA2NFx1MzA0RFx1MzA5OQpcdTMwNzJcdTMwNjNcdTMwNTNcdTMwNTcKXHUzMDcyXHUzMDYzXHUzMDU3Clx1MzA3Mlx1MzA2NFx1MzA1N1x1MzA5OVx1MzA4NVx1MzA3Mlx1MzA5MwpcdTMwNzJcdTMwNjNcdTMwNTkKXHUzMDcyXHUzMDY0XHUzMDVCXHUzMDk5XHUzMDkzClx1MzA3Mlx1MzA5QVx1MzA2M1x1MzA1Rlx1MzA4QQpcdTMwNzJcdTMwOUFcdTMwNjNcdTMwNjFcdTMwOEEKXHUzMDcyXHUzMDY0XHUzMDg4XHUzMDQ2Clx1MzA3Mlx1MzA2Nlx1MzA0NApcdTMwNzJcdTMwNjhcdTMwNTNcdTMwOTlcdTMwN0YKXHUzMDcyXHUzMDZBXHUzMDdFXHUzMDY0XHUzMDhBClx1MzA3Mlx1MzA2QVx1MzA5MwpcdTMwNzJcdTMwNkRcdTMwOEIKXHUzMDcyXHUzMDZGXHUzMDkzClx1MzA3Mlx1MzA3Mlx1MzA5OVx1MzA0RgpcdTMwNzJcdTMwNzJcdTMwODdcdTMwNDYKXHUzMDcyXHUzMDdCXHUzMDQ2Clx1MzA3Mlx1MzA3RVx1MzA4Rlx1MzA4QQpcdTMwNzJcdTMwN0VcdTMwOTMKXHUzMDcyXHUzMDdGXHUzMDY0Clx1MzA3Mlx1MzA4MVx1MzA0NApcdTMwNzJcdTMwODFcdTMwNTdcdTMwOTlcdTMwNTcKXHUzMDcyXHUzMDg0XHUzMDUxClx1MzA3Mlx1MzA4NFx1MzA1OQpcdTMwNzJcdTMwODhcdTMwNDYKXHUzMDcyXHUzMDk5XHUzMDg3XHUzMDQ2XHUzMDREClx1MzA3Mlx1MzA4OVx1MzA0Qlx1MzA5OVx1MzA2QQpcdTMwNzJcdTMwODlcdTMwNEYKXHUzMDcyXHUzMDhBXHUzMDY0Clx1MzA3Mlx1MzA4QVx1MzA4N1x1MzA0NgpcdTMwNzJcdTMwOEJcdTMwN0UKXHUzMDcyXHUzMDhCXHUzMDg0XHUzMDU5XHUzMDdGClx1MzA3Mlx1MzA4Q1x1MzA0NApcdTMwNzJcdTMwOERcdTMwNDQKXHUzMDcyXHUzMDhEXHUzMDQ2Clx1MzA3Mlx1MzA4RFx1MzA0RApcdTMwNzJcdTMwOERcdTMwODZcdTMwNEQKXHUzMDcyXHUzMDkzXHUzMDRCXHUzMDRGClx1MzA3Mlx1MzA5M1x1MzA1MVx1MzA2NApcdTMwNzJcdTMwOTNcdTMwNTNcdTMwOTMKXHUzMDcyXHUzMDkzXHUzMDU3XHUzMDg1Clx1MzA3Mlx1MzA5M1x1MzA1RFx1MzA0NgpcdTMwNzJcdTMwOUFcdTMwOTNcdTMwNjEKXHUzMDcyXHUzMDkzXHUzMDZGXHUzMDlBXHUzMDkzClx1MzA3Mlx1MzA5OVx1MzA5M1x1MzA3Qlx1MzA5OVx1MzA0NgpcdTMwNzVcdTMwNDJcdTMwOTMKXHUzMDc1XHUzMDQ0XHUzMDQ2XHUzMDYxClx1MzA3NVx1MzA0Nlx1MzA1MVx1MzA0NApcdTMwNzVcdTMwNDZcdTMwNUJcdTMwOTMKXHUzMDc1XHUzMDlBXHUzMDQ2XHUzMDVGXHUzMDhEXHUzMDQ2Clx1MzA3NVx1MzA0Nlx1MzA2OFx1MzA0NgpcdTMwNzVcdTMwNDZcdTMwNzUKXHUzMDc1XHUzMDQ4XHUzMDhCClx1MzA3NVx1MzA0QVx1MzA5MwpcdTMwNzVcdTMwNEJcdTMwNDQKXHUzMDc1XHUzMDREXHUzMDkzClx1MzA3NVx1MzA0Rlx1MzA1NVx1MzA5OVx1MzA2NApcdTMwNzVcdTMwNEZcdTMwNzVcdTMwOTlcdTMwNEZcdTMwOEQKXHUzMDc1XHUzMDUzXHUzMDQ2Clx1MzA3NVx1MzA1NVx1MzA0NApcdTMwNzVcdTMwNTdcdTMwNERcdTMwOTkKXHUzMDc1XHUzMDU3XHUzMDk5XHUzMDdGClx1MzA3NVx1MzA1OVx1MzA3RQpcdTMwNzVcdTMwNUJcdTMwNDQKXHUzMDc1XHUzMDVCXHUzMDRGXHUzMDk5Clx1MzA3NVx1MzA1RFx1MzA0RgpcdTMwNzVcdTMwOTlcdTMwNUZcdTMwNkJcdTMwNEYKXHUzMDc1XHUzMDVGXHUzMDkzClx1MzA3NVx1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNzVcdTMwNjRcdTMwNDYKXHUzMDc1XHUzMDY0XHUzMDRCClx1MzA3NVx1MzA2M1x1MzA0Qlx1MzA2NApcdTMwNzVcdTMwNjNcdTMwNEQKXHUzMDc1XHUzMDYzXHUzMDUzXHUzMDRGClx1MzA3NVx1MzA5OVx1MzA2OFx1MzA5OVx1MzA0NgpcdTMwNzVcdTMwNjhcdTMwOEIKXHUzMDc1XHUzMDY4XHUzMDkzClx1MzA3NVx1MzA2RVx1MzA0NgpcdTMwNzVcdTMwNkZcdTMwNDQKXHUzMDc1XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA3NVx1MzA3OFx1MzA5MwpcdTMwNzVcdTMwN0VcdTMwOTMKXHUzMDc1XHUzMDdGXHUzMDkzClx1MzA3NVx1MzA4MVx1MzA2NApcdTMwNzVcdTMwODFcdTMwOTMKXHUzMDc1XHUzMDg4XHUzMDQ2Clx1MzA3NVx1MzA4QVx1MzA1MwpcdTMwNzVcdTMwOEFcdTMwOEIKXHUzMDc1XHUzMDhCXHUzMDQ0Clx1MzA3NVx1MzA5M1x1MzA0NFx1MzA0RApcdTMwNzVcdTMwOTlcdTMwOTNcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDc1XHUzMDk5XHUzMDkzXHUzMDRGXHUzMDk5Clx1MzA3NVx1MzA5M1x1MzA1N1x1MzA2NApcdTMwNzVcdTMwOTlcdTMwOTNcdTMwNUJcdTMwNEQKXHUzMDc1XHUzMDkzXHUzMDVEXHUzMDQ2Clx1MzA3NVx1MzA5OVx1MzA5M1x1MzA3Qlx1MzA5QVx1MzA0NgpcdTMwNzhcdTMwNDRcdTMwNDJcdTMwOTMKXHUzMDc4XHUzMDQ0XHUzMDRBXHUzMDkzClx1MzA3OFx1MzA0NFx1MzA0Qlx1MzA5OVx1MzA0NApcdTMwNzhcdTMwNDRcdTMwNEQKXHUzMDc4XHUzMDQ0XHUzMDUxXHUzMDk5XHUzMDkzClx1MzA3OFx1MzA0NFx1MzA1M1x1MzA0NgpcdTMwNzhcdTMwNDRcdTMwNTUKXHUzMDc4XHUzMDQ0XHUzMDU3XHUzMDgzClx1MzA3OFx1MzA0NFx1MzA1Qlx1MzA2NApcdTMwNzhcdTMwNDRcdTMwNUQKXHUzMDc4XHUzMDQ0XHUzMDVGXHUzMDRGClx1MzA3OFx1MzA0NFx1MzA2Nlx1MzA5MwpcdTMwNzhcdTMwNDRcdTMwNkRcdTMwNjQKXHUzMDc4XHUzMDQ0XHUzMDhGClx1MzA3OFx1MzA0RFx1MzA0Qlx1MzA5OQpcdTMwNzhcdTMwNTNcdTMwODAKXHUzMDc4XHUzMDk5XHUzMDZCXHUzMDQ0XHUzMDhEClx1MzA3OFx1MzA5OVx1MzA2Qlx1MzA1N1x1MzA4N1x1MzA0Nlx1MzA0Qlx1MzA5OQpcdTMwNzhcdTMwODlcdTMwNTkKXHUzMDc4XHUzMDkzXHUzMDRCXHUzMDkzClx1MzA3OFx1MzA5OVx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0NgpcdTMwNzhcdTMwOTlcdTMwOTNcdTMwNTNcdTMwOTlcdTMwNTcKXHUzMDc4XHUzMDkzXHUzMDU1XHUzMDQ0Clx1MzA3OFx1MzA5M1x1MzA1Rlx1MzA0NApcdTMwNzhcdTMwOTlcdTMwOTNcdTMwOEEKXHUzMDdCXHUzMDQyXHUzMDkzClx1MzA3Qlx1MzA0NFx1MzA0RgpcdTMwN0JcdTMwOTlcdTMwNDZcdTMwNERcdTMwOTlcdTMwODcKXHUzMDdCXHUzMDQ2XHUzMDUzXHUzMDRGClx1MzA3Qlx1MzA0Nlx1MzA1RFx1MzA0NgpcdTMwN0JcdTMwNDZcdTMwN0JcdTMwNDYKXHUzMDdCXHUzMDQ2XHUzMDgyXHUzMDkzClx1MzA3Qlx1MzA0Nlx1MzA4QVx1MzA2NApcdTMwN0JcdTMwNDhcdTMwOEIKXHUzMDdCXHUzMDRBXHUzMDkzClx1MzA3Qlx1MzA0Qlx1MzA5MwpcdTMwN0JcdTMwNERcdTMwODdcdTMwNDYKXHUzMDdCXHUzMDk5XHUzMDREXHUzMDkzClx1MzA3Qlx1MzA0Rlx1MzA4RApcdTMwN0JcdTMwNTFcdTMwNjQKXHUzMDdCXHUzMDUxXHUzMDkzClx1MzA3Qlx1MzA1M1x1MzA0NgpcdTMwN0JcdTMwNTNcdTMwOEIKXHUzMDdCXHUzMDU3XHUzMDQ0Clx1MzA3Qlx1MzA1N1x1MzA2NApcdTMwN0JcdTMwNTdcdTMwODUKXHUzMDdCXHUzMDU3XHUzMDg3XHUzMDQ2Clx1MzA3Qlx1MzA1Qlx1MzA0NApcdTMwN0JcdTMwNURcdTMwNDQKXHUzMDdCXHUzMDVEXHUzMDRGClx1MzA3Qlx1MzA1Rlx1MzA2NgpcdTMwN0JcdTMwNUZcdTMwOEIKXHUzMDdCXHUzMDlBXHUzMDYxXHUzMDc1XHUzMDk5XHUzMDRGXHUzMDhEClx1MzA3Qlx1MzA2M1x1MzA0RFx1MzA4N1x1MzA0RgpcdTMwN0JcdTMwNjNcdTMwNTUKXHUzMDdCXHUzMDYzXHUzMDVGXHUzMDkzClx1MzA3Qlx1MzA2OFx1MzA5M1x1MzA2OFx1MzA5OQpcdTMwN0JcdTMwODFcdTMwOEIKXHUzMDdCXHUzMDkzXHUzMDQ0Clx1MzA3Qlx1MzA5M1x1MzA0RApcdTMwN0JcdTMwOTNcdTMwNTEKXHUzMDdCXHUzMDkzXHUzMDU3XHUzMDY0Clx1MzA3Qlx1MzA5M1x1MzA4NFx1MzA0RgpcdTMwN0VcdTMwNDRcdTMwNkJcdTMwNjEKXHUzMDdFXHUzMDRCXHUzMDQ0Clx1MzA3RVx1MzA0Qlx1MzA1Qlx1MzA4QgpcdTMwN0VcdTMwNEJcdTMwOTlcdTMwOEIKXHUzMDdFXHUzMDUxXHUzMDhCClx1MzA3RVx1MzA1M1x1MzA2OApcdTMwN0VcdTMwNTVcdTMwNjQKXHUzMDdFXHUzMDU3XHUzMDk5XHUzMDgxClx1MzA3RVx1MzA1OVx1MzA0RgpcdTMwN0VcdTMwNUJcdTMwOTlcdTMwOEIKXHUzMDdFXHUzMDY0XHUzMDhBClx1MzA3RVx1MzA2OFx1MzA4MQpcdTMwN0VcdTMwNkFcdTMwNzVcdTMwOTkKXHUzMDdFXHUzMDZDXHUzMDUxClx1MzA3RVx1MzA2RFx1MzA0RgpcdTMwN0VcdTMwN0JcdTMwNDYKXHUzMDdFXHUzMDgyXHUzMDhCClx1MzA3RVx1MzA4Nlx1MzA1MVx1MzA5OQpcdTMwN0VcdTMwODhcdTMwNDYKXHUzMDdFXHUzMDhEXHUzMDg0XHUzMDRCClx1MzA3RVx1MzA4Rlx1MzA1OQpcdTMwN0VcdTMwOEZcdTMwOEEKXHUzMDdFXHUzMDhGXHUzMDhCClx1MzA3RVx1MzA5M1x1MzA0Qlx1MzA5OQpcdTMwN0VcdTMwOTNcdTMwNERcdTMwNjQKXHUzMDdFXHUzMDkzXHUzMDVEXHUzMDk5XHUzMDRGClx1MzA3RVx1MzA5M1x1MzA2QVx1MzA0QgpcdTMwN0ZcdTMwNDRcdTMwODkKXHUzMDdGXHUzMDQ2XHUzMDYxClx1MzA3Rlx1MzA0OFx1MzA4QgpcdTMwN0ZcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDdGXHUzMDRCXHUzMDVGClx1MzA3Rlx1MzA0Qlx1MzA5MwpcdTMwN0ZcdTMwNTFcdTMwOTMKXHUzMDdGXHUzMDUzXHUzMDkzClx1MzA3Rlx1MzA1N1x1MzA5OVx1MzA0Qlx1MzA0NApcdTMwN0ZcdTMwNTlcdTMwNDQKXHUzMDdGXHUzMDU5XHUzMDQ4XHUzMDhCClx1MzA3Rlx1MzA1Qlx1MzA4QgpcdTMwN0ZcdTMwNjNcdTMwNEIKXHUzMDdGXHUzMDY0XHUzMDRCXHUzMDhCClx1MzA3Rlx1MzA2NFx1MzA1MVx1MzA4QgpcdTMwN0ZcdTMwNjZcdTMwNDQKXHUzMDdGXHUzMDY4XHUzMDgxXHUzMDhCClx1MzA3Rlx1MzA2QVx1MzA2OApcdTMwN0ZcdTMwNkFcdTMwN0ZcdTMwNEJcdTMwNTVcdTMwNDQKXHUzMDdGXHUzMDZEXHUzMDg5XHUzMDhCClx1MzA3Rlx1MzA2RVx1MzA0NgpcdTMwN0ZcdTMwNkVcdTMwNEJcdTMwOTlcdTMwNTkKXHUzMDdGXHUzMDdCXHUzMDkzClx1MzA3Rlx1MzA4Mlx1MzA2OApcdTMwN0ZcdTMwODRcdTMwNTFcdTMwOTkKXHUzMDdGXHUzMDg5XHUzMDQ0Clx1MzA3Rlx1MzA4QVx1MzA4N1x1MzA0RgpcdTMwN0ZcdTMwOEZcdTMwNEYKXHUzMDdGXHUzMDkzXHUzMDRCClx1MzA3Rlx1MzA5M1x1MzA1RFx1MzA5OVx1MzA0RgpcdTMwODBcdTMwNDRcdTMwNEIKXHUzMDgwXHUzMDQ4XHUzMDREClx1MzA4MFx1MzA0OFx1MzA5MwpcdTMwODBcdTMwNEJcdTMwNDQKXHUzMDgwXHUzMDRCXHUzMDQ2Clx1MzA4MFx1MzA0Qlx1MzA0OApcdTMwODBcdTMwNEJcdTMwNTcKXHUzMDgwXHUzMDREXHUzMDk5XHUzMDYxXHUzMDgzClx1MzA4MFx1MzA1MVx1MzA4QgpcdTMwODBcdTMwNTFcdTMwOTlcdTMwOTMKXHUzMDgwXHUzMDU1XHUzMDdCXHUzMDk5XHUzMDhCClx1MzA4MFx1MzA1N1x1MzA0Mlx1MzA2NFx1MzA0NApcdTMwODBcdTMwNTdcdTMwNkZcdTMwOTkKXHUzMDgwXHUzMDU3XHUzMDk5XHUzMDg1XHUzMDkzClx1MzA4MFx1MzA1N1x1MzA4RApcdTMwODBcdTMwNTlcdTMwNDYKXHUzMDgwXHUzMDU5XHUzMDUzClx1MzA4MFx1MzA1OVx1MzA3NVx1MzA5OQpcdTMwODBcdTMwNTlcdTMwODEKXHUzMDgwXHUzMDVCXHUzMDhCClx1MzA4MFx1MzA1Qlx1MzA5MwpcdTMwODBcdTMwNjFcdTMwODVcdTMwNDYKXHUzMDgwXHUzMDZBXHUzMDU3XHUzMDQ0Clx1MzA4MFx1MzA2RVx1MzA0NgpcdTMwODBcdTMwODRcdTMwN0YKXHUzMDgwXHUzMDg4XHUzMDQ2Clx1MzA4MFx1MzA4OVx1MzA1NVx1MzA0RApcdTMwODBcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDgwXHUzMDhEXHUzMDkzClx1MzA4MVx1MzA0NFx1MzA0Mlx1MzA5MwpcdTMwODFcdTMwNDRcdTMwNDZcdTMwOTMKXHUzMDgxXHUzMDQ0XHUzMDQ4XHUzMDkzClx1MzA4MVx1MzA0NFx1MzA0Qlx1MzA0RgpcdTMwODFcdTMwNDRcdTMwNERcdTMwODdcdTMwNEYKXHUzMDgxXHUzMDQ0XHUzMDU1XHUzMDQ0Clx1MzA4MVx1MzA0NFx1MzA1NwpcdTMwODFcdTMwNDRcdTMwNURcdTMwNDYKXHUzMDgxXHUzMDQ0XHUzMDc1XHUzMDk5XHUzMDY0Clx1MzA4MVx1MzA0NFx1MzA4Q1x1MzA0NApcdTMwODFcdTMwNDRcdTMwOEZcdTMwNEYKXHUzMDgxXHUzMDRGXHUzMDk5XHUzMDdFXHUzMDhDXHUzMDhCClx1MzA4MVx1MzA1NVx1MzA5OVx1MzA1OQpcdTMwODFcdTMwNTdcdTMwNUYKXHUzMDgxXHUzMDU5XHUzMDk5XHUzMDg5XHUzMDU3XHUzMDQ0Clx1MzA4MVx1MzA1Rlx1MzA5OVx1MzA2NApcdTMwODFcdTMwN0VcdTMwNDQKXHUzMDgxXHUzMDg0XHUzMDU5Clx1MzA4MVx1MzA5M1x1MzA0RFx1MzA4NwpcdTMwODFcdTMwOTNcdTMwNUJcdTMwNEQKXHUzMDgxXHUzMDkzXHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA4Mlx1MzA0Nlx1MzA1N1x1MzA0Mlx1MzA1MVx1MzA5OVx1MzA4QgpcdTMwODJcdTMwNDZcdTMwNjhcdTMwOTlcdTMwNDZcdTMwNTFcdTMwOTMKXHUzMDgyXHUzMDQ4XHUzMDhCClx1MzA4Mlx1MzA0Rlx1MzA1NwpcdTMwODJcdTMwNEZcdTMwNjZcdTMwNEQKXHUzMDgyXHUzMDRGXHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA4Mlx1MzA2MVx1MzA4RFx1MzA5MwpcdTMwODJcdTMwNjhcdTMwOTlcdTMwOEIKXHUzMDgyXHUzMDg5XHUzMDQ2Clx1MzA4Mlx1MzA5M1x1MzA0RgpcdTMwODJcdTMwOTNcdTMwNUZcdTMwOTlcdTMwNDQKXHUzMDg0XHUzMDRBXHUzMDg0Clx1MzA4NFx1MzA1MVx1MzA4QgpcdTMwODRcdTMwNTVcdTMwNDQKXHUzMDg0XHUzMDU1XHUzMDU3XHUzMDQ0Clx1MzA4NFx1MzA1OVx1MzA0NApcdTMwODRcdTMwNTlcdTMwNUZcdTMwOERcdTMwNDYKXHUzMDg0XHUzMDU5XHUzMDdGClx1MzA4NFx1MzA1Qlx1MzA4QgpcdTMwODRcdTMwNURcdTMwNDYKXHUzMDg0XHUzMDVGXHUzMDQ0Clx1MzA4NFx1MzA2MVx1MzA5MwpcdTMwODRcdTMwNjNcdTMwNjgKXHUzMDg0XHUzMDYzXHUzMDZGXHUzMDlBXHUzMDhBClx1MzA4NFx1MzA3NVx1MzA5OVx1MzA4QgpcdTMwODRcdTMwODFcdTMwOEIKXHUzMDg0XHUzMDg0XHUzMDUzXHUzMDU3XHUzMDQ0Clx1MzA4NFx1MzA4OFx1MzA0NApcdTMwODRcdTMwOEZcdTMwODlcdTMwNEJcdTMwNDQKXHUzMDg2XHUzMDQ2XHUzMDREClx1MzA4Nlx1MzA0Nlx1MzA3Mlx1MzA5OVx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0RgpcdTMwODZcdTMwNDZcdTMwNzhcdTMwOTkKXHUzMDg2XHUzMDQ2XHUzMDgxXHUzMDQ0Clx1MzA4Nlx1MzA1MVx1MzA2NApcdTMwODZcdTMwNTdcdTMwODVcdTMwNjQKXHUzMDg2XHUzMDVCXHUzMDkzClx1MzA4Nlx1MzA1RFx1MzA0NgpcdTMwODZcdTMwNUZcdTMwNEIKXHUzMDg2XHUzMDYxXHUzMDgzXHUzMDRGClx1MzA4Nlx1MzA2Nlx1MzA5OVx1MzA4QgpcdTMwODZcdTMwNkJcdTMwODVcdTMwNDYKXHUzMDg2XHUzMDcyXHUzMDk5XHUzMDhGClx1MzA4Nlx1MzA4OVx1MzA0NApcdTMwODZcdTMwOENcdTMwOEIKXHUzMDg4XHUzMDQ2XHUzMDQ0Clx1MzA4OFx1MzA0Nlx1MzA0QgpcdTMwODhcdTMwNDZcdTMwNERcdTMwODVcdTMwNDYKXHUzMDg4XHUzMDQ2XHUzMDU3XHUzMDk5Clx1MzA4OFx1MzA0Nlx1MzA1OQpcdTMwODhcdTMwNDZcdTMwNjFcdTMwNDhcdTMwOTMKXHUzMDg4XHUzMDRCXHUzMDVCXHUzMDk5Clx1MzA4OFx1MzA0Qlx1MzA5MwpcdTMwODhcdTMwNERcdTMwOTMKXHUzMDg4XHUzMDRGXHUzMDVCXHUzMDQ0Clx1MzA4OFx1MzA0Rlx1MzA3Qlx1MzA5OVx1MzA0NgpcdTMwODhcdTMwNTFcdTMwNDQKXHUzMDg4XHUzMDUzXHUzMDk5XHUzMDhDXHUzMDhCClx1MzA4OFx1MzA1NVx1MzA5MwpcdTMwODhcdTMwNTdcdTMwODVcdTMwNDYKXHUzMDg4XHUzMDVEXHUzMDQ2Clx1MzA4OFx1MzA1RFx1MzA0RgpcdTMwODhcdTMwNjNcdTMwNEIKXHUzMDg4XHUzMDY2XHUzMDQ0Clx1MzA4OFx1MzA2OFx1MzA5OVx1MzA0Qlx1MzA5OVx1MzA4Rlx1MzA0RgpcdTMwODhcdTMwNkRcdTMwNjQKXHUzMDg4XHUzMDg0XHUzMDRGClx1MzA4OFx1MzA4Nlx1MzA0NgpcdTMwODhcdTMwOERcdTMwNTNcdTMwNzVcdTMwOTkKXHUzMDg4XHUzMDhEXHUzMDU3XHUzMDQ0Clx1MzA4OVx1MzA0NFx1MzA0NgpcdTMwODlcdTMwNEZcdTMwNEJcdTMwOTlcdTMwNEQKXHUzMDg5XHUzMDRGXHUzMDUzXHUzMDk5Clx1MzA4OVx1MzA0Rlx1MzA1NVx1MzA2NApcdTMwODlcdTMwNEZcdTMwNUZcdTMwOTkKXHUzMDg5XHUzMDU3XHUzMDkzXHUzMDZGXHUzMDk5XHUzMDkzClx1MzA4OVx1MzA1Qlx1MzA5MwpcdTMwODlcdTMwNURcdTMwOTlcdTMwNEYKXHUzMDg5XHUzMDVGXHUzMDQ0Clx1MzA4OVx1MzA2M1x1MzA0QgpcdTMwODlcdTMwOENcdTMwNjQKXHUzMDhBXHUzMDQ4XHUzMDREClx1MzA4QVx1MzA0Qlx1MzA0NApcdTMwOEFcdTMwNERcdTMwNTVcdTMwNEYKXHUzMDhBXHUzMDREXHUzMDVCXHUzMDY0Clx1MzA4QVx1MzA0Rlx1MzA0Rlx1MzA5OVx1MzA5MwpcdTMwOEFcdTMwNEZcdTMwNjQKXHUzMDhBXHUzMDUxXHUzMDkzClx1MzA4QVx1MzA1M1x1MzA0NgpcdTMwOEFcdTMwNUJcdTMwNDQKXHUzMDhBXHUzMDVEXHUzMDQ2Clx1MzA4QVx1MzA1RFx1MzA0RgpcdTMwOEFcdTMwNjZcdTMwOTMKXHUzMDhBXHUzMDZEXHUzMDkzClx1MzA4QVx1MzA4Nlx1MzA0NgpcdTMwOEFcdTMwODVcdTMwNDZcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDhBXHUzMDg4XHUzMDQ2Clx1MzA4QVx1MzA4N1x1MzA0Nlx1MzA4QQpcdTMwOEFcdTMwODdcdTMwNEJcdTMwOTMKXHUzMDhBXHUzMDg3XHUzMDRGXHUzMDYxXHUzMDgzClx1MzA4QVx1MzA4N1x1MzA1M1x1MzA0NgpcdTMwOEFcdTMwOEFcdTMwNEYKXHUzMDhBXHUzMDhDXHUzMDREClx1MzA4QVx1MzA4RFx1MzA5MwpcdTMwOEFcdTMwOTNcdTMwNTNcdTMwOTkKXHUzMDhCXHUzMDQ0XHUzMDUxXHUzMDQ0Clx1MzA4Qlx1MzA0NFx1MzA1NVx1MzA0NApcdTMwOEJcdTMwNDRcdTMwNTdcdTMwOTkKXHUzMDhCXHUzMDQ0XHUzMDVCXHUzMDREClx1MzA4Qlx1MzA1OVx1MzA2Rlx1MzA5OVx1MzA5MwpcdTMwOEJcdTMwOEFcdTMwNEJcdTMwOTlcdTMwOEZcdTMwODkKXHUzMDhDXHUzMDQ0XHUzMDRCXHUzMDkzClx1MzA4Q1x1MzA0NFx1MzA0RFx1MzA5OQpcdTMwOENcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDhDXHUzMDQ0XHUzMDVEXHUzMDk5XHUzMDQ2XHUzMDUzClx1MzA4Q1x1MzA0NFx1MzA2OFx1MzA0NgpcdTMwOENcdTMwNDRcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDhDXHUzMDREXHUzMDU3Clx1MzA4Q1x1MzA0RFx1MzA1Rlx1MzA5OVx1MzA0NApcdTMwOENcdTMwOTNcdTMwNDJcdTMwNDQKXHUzMDhDXHUzMDkzXHUzMDUxXHUzMDQ0Clx1MzA4Q1x1MzA5M1x1MzA1M1x1MzA5MwpcdTMwOENcdTMwOTNcdTMwNTVcdTMwNDQKXHUzMDhDXHUzMDkzXHUzMDU3XHUzMDg1XHUzMDQ2Clx1MzA4Q1x1MzA5M1x1MzA1RFx1MzA5OVx1MzA0RgpcdTMwOENcdTMwOTNcdTMwODlcdTMwNEYKXHUzMDhEXHUzMDQ2XHUzMDRCClx1MzA4RFx1MzA0Nlx1MzA1M1x1MzA5OQpcdTMwOERcdTMwNDZcdTMwNTdcdTMwOTlcdTMwOTMKXHUzMDhEXHUzMDQ2XHUzMDVEXHUzMDRGClx1MzA4RFx1MzA0Rlx1MzA0Qlx1MzA5OQpcdTMwOERcdTMwNTNcdTMwNjQKXHUzMDhEXHUzMDU3XHUzMDk5XHUzMDQ2XHUzMDg5Clx1MzA4RFx1MzA1N1x1MzA4NVx1MzA2NApcdTMwOERcdTMwNUJcdTMwOTMKXHUzMDhEXHUzMDY2XHUzMDkzClx1MzA4RFx1MzA4MVx1MzA5MwpcdTMwOERcdTMwOENcdTMwNjQKXHUzMDhEXHUzMDkzXHUzMDREXHUzMDk5Clx1MzA4RFx1MzA5M1x1MzA2Rlx1MzA5QQpcdTMwOERcdTMwOTNcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDhEXHUzMDkzXHUzMDhBClx1MzA4Rlx1MzA0Qlx1MzA1OQpcdTMwOEZcdTMwNEJcdTMwODEKXHUzMDhGXHUzMDRCXHUzMDg0XHUzMDdFClx1MzA4Rlx1MzA0Qlx1MzA4Q1x1MzA4QgpcdTMwOEZcdTMwNTdcdTMwNjQKXHUzMDhGXHUzMDU3XHUzMDk5XHUzMDdFXHUzMDU3Clx1MzA4Rlx1MzA1OVx1MzA4Q1x1MzA4Mlx1MzA2RQpcdTMwOEZcdTMwODlcdTMwNDYKXHUzMDhGXHUzMDhDXHUzMDhCYC5zcGxpdCgiXG4iKTsKCiAgLy8gbm9kZV9tb2R1bGVzL0BzY3VyZS9iaXAzOS9lc20vd29yZGxpc3RzL2tvcmVhbi5qcwogIHZhciB3b3JkbGlzdDYgPSBgXHUxMTAwXHUxMTYxXHUxMTAwXHUxMTY3XHUxMUE4Clx1MTEwMFx1MTE2MVx1MTEwMVx1MTE3M1x1MTFCNwpcdTExMDBcdTExNjFcdTExMDJcdTExNjFcdTExQUIKXHUxMTAwXHUxMTYxXHUxMTAyXHUxMTczXHUxMUJDClx1MTEwMFx1MTE2MVx1MTEwM1x1MTE3M1x1MTFBOApcdTExMDBcdTExNjFcdTExMDVcdTExNzNcdTExMEVcdTExNzVcdTExQjcKXHUxMTAwXHUxMTYxXHUxMTA2XHUxMTZFXHUxMUI3Clx1MTEwMFx1MTE2MVx1MTEwN1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNjFcdTExMDlcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMTA5XHUxMTczXHUxMUI3Clx1MTEwMFx1MTE2MVx1MTEwQlx1MTE2RVx1MTFBQlx1MTEwM1x1MTE2NgpcdTExMDBcdTExNjFcdTExMEJcdTExNzNcdTExQUYKXHUxMTAwXHUxMTYxXHUxMTBCXHUxMTc1XHUxMTAzXHUxMTczClx1MTEwMFx1MTE2MVx1MTEwQlx1MTE3NVx1MTFCOApcdTExMDBcdTExNjFcdTExMENcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwMFx1MTE2MVx1MTEwQ1x1MTE2OVx1MTFBOApcdTExMDBcdTExNjFcdTExMENcdTExNkVcdTExQTgKXHUxMTAwXHUxMTYxXHUxMUE4XHUxMTBCXHUxMTY5Clx1MTEwMFx1MTE2MVx1MTFBOFx1MTEwQ1x1MTE2MQpcdTExMDBcdTExNjFcdTExQUJcdTExMDBcdTExNjdcdTExQTgKXHUxMTAwXHUxMTYxXHUxMUFCXHUxMTA3XHUxMTZFClx1MTEwMFx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2NVx1MTFCOApcdTExMDBcdTExNjFcdTExQUJcdTExMENcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUI4Clx1MTEwMFx1MTE2MVx1MTFBQlx1MTExMVx1MTE2MVx1MTFBQgpcdTExMDBcdTExNjFcdTExQUZcdTExMDNcdTExNzNcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUFGXHUxMTA3XHUxMTc1Clx1MTEwMFx1MTE2MVx1MTFBRlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDBcdTExNjFcdTExQUZcdTExMENcdTExNzNcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUI3XHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwMFx1MTE2MVx1MTFCN1x1MTEwMFx1MTE3NQpcdTExMDBcdTExNjFcdTExQjdcdTExMDlcdTExNjkKXHUxMTAwXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTZFXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwMFx1MTE2MVx1MTFCN1x1MTEwQ1x1MTE2MQpcdTExMDBcdTExNjFcdTExQjdcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUI4XHUxMTBDXHUxMTYxXHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwMlx1MTE2MVx1MTFCNwpcdTExMDBcdTExNjFcdTExQkNcdTExMDNcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTAzXHUxMTY5Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwNVx1MTE2N1x1MTFBOFx1MTExMlx1MTE3NQpcdTExMDBcdTExNjFcdTExQkNcdTExMDdcdTExNjdcdTExQUIKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTA3XHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMDBcdTExNjFcdTExQkNcdTExMDlcdTExNkVcdTExMDVcdTExNjNcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTBCXHUxMTYxXHUxMTBDXHUxMTc1Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2Rlx1MTFBQlx1MTEwM1x1MTE2OQpcdTExMDBcdTExNjFcdTExQkNcdTExMEJcdTExNzQKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY2Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE2OQpcdTExMDBcdTExNjFcdTExQzBcdTExMEJcdTExNzUKXHUxMTAwXHUxMTYyXHUxMTAwXHUxMTZFXHUxMTA1XHUxMTc1Clx1MTEwMFx1MTE2Mlx1MTEwMlx1MTE2MVx1MTEwNVx1MTE3NQpcdTExMDBcdTExNjJcdTExMDdcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYyXHUxMTA3XHUxMTY3XHUxMUFGClx1MTEwMFx1MTE2Mlx1MTEwOVx1MTE2NVx1MTFBQgpcdTExMDBcdTExNjJcdTExMDlcdTExNjVcdTExQkMKXHUxMTAwXHUxMTYyXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwMFx1MTE2Mlx1MTFBOFx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDBcdTExNjVcdTExMDlcdTExNzVcdTExQUYKXHUxMTAwXHUxMTY1XHUxMTBCXHUxMTYyXHUxMUE4Clx1MTEwMFx1MTE2NVx1MTEwQlx1MTE2RVx1MTFBRgpcdTExMDBcdTExNjVcdTExMENcdTExNzVcdTExQkEKXHUxMTAwXHUxMTY1XHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwMFx1MTE2NVx1MTFBOFx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMDBcdTExNjVcdTExQUJcdTExMDBcdTExNjFcdTExQkMKXHUxMTAwXHUxMTY1XHUxMUFCXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwMFx1MTE2NVx1MTFBQlx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMDBcdTExNjVcdTExQUJcdTExMENcdTExNjkKXHUxMTAwXHUxMTY1XHUxMUFCXHUxMTBFXHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE2NVx1MTFBRlx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDBcdTExNjVcdTExQjdcdTExMDlcdTExNjEKXHUxMTAwXHUxMTY1XHUxMUI3XHUxMTEwXHUxMTY5Clx1MTEwMFx1MTE2Nlx1MTEwOVx1MTE3NVx1MTExMVx1MTE2MVx1MTFBQgpcdTExMDBcdTExNjZcdTExMEJcdTExNzVcdTExQjcKXHUxMTAwXHUxMTY3XHUxMTBCXHUxMTZFXHUxMUFGClx1MTEwMFx1MTE2N1x1MTFBQlx1MTExMlx1MTE2MgpcdTExMDBcdTExNjdcdTExQUZcdTExMDBcdTExNkEKXHUxMTAwXHUxMTY3XHUxMUFGXHUxMTAwXHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE2N1x1MTFBRlx1MTEwNVx1MTE2OVx1MTFBQgpcdTExMDBcdTExNjdcdTExQUZcdTExMDlcdTExNjVcdTExQTgKXHUxMTAwXHUxMTY3XHUxMUFGXHUxMTA5XHUxMTczXHUxMUJDClx1MTEwMFx1MTE2N1x1MTFBRlx1MTEwOVx1MTE3NVx1MTFCNwpcdTExMDBcdTExNjdcdTExQUZcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTY3XHUxMUFGXHUxMTEyXHUxMTY5XHUxMUFCClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwMFx1MTE2OApcdTExMDBcdTExNjdcdTExQkNcdTExMDBcdTExNjkKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwNVx1MTE2N1x1MTFBOApcdTExMDBcdTExNjdcdTExQkNcdTExMDdcdTExNjlcdTExQThcdTExMDBcdTExNkVcdTExQkMKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTA3XHUxMTc1Clx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwM1x1MTE2OQpcdTExMDBcdTExNjdcdTExQkNcdTExMEJcdTExNjdcdTExQkMKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTBCXHUxMTZFClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwQ1x1MTE2Mlx1MTFCQwpcdTExMDBcdTExNjdcdTExQkNcdTExMENcdTExNjYKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTBDXHUxMTZFClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwRVx1MTE2MVx1MTFBRgpcdTExMDBcdTExNjdcdTExQkNcdTExMEVcdTExNzUKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTYzXHUxMUJDClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTExMlx1MTE2NVx1MTFCNwpcdTExMDBcdTExNjhcdTExMDBcdTExNjlcdTExQTgKXHUxMTAwXHUxMTY4XHUxMTAzXHUxMTYxXHUxMUFCClx1MTEwMFx1MTE2OFx1MTEwNVx1MTE2MVx1MTFBQgpcdTExMDBcdTExNjhcdTExMDlcdTExNjFcdTExQUIKXHUxMTAwXHUxMTY4XHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwMFx1MTE2OFx1MTEwQlx1MTE2M1x1MTFBOApcdTExMDBcdTExNjhcdTExMENcdTExNjVcdTExQUYKXHUxMTAwXHUxMTY4XHUxMTBFXHUxMTczXHUxMUJDClx1MTEwMFx1MTE2OFx1MTExMlx1MTE2Q1x1MTFBOApcdTExMDBcdTExNjlcdTExMDBcdTExNjJcdTExQTgKXHUxMTAwXHUxMTY5XHUxMTAwXHUxMTZFXHUxMTA1XHUxMTY3Clx1MTEwMFx1MTE2OVx1MTEwMFx1MTE2RVx1MTFCQwpcdTExMDBcdTExNjlcdTExMDBcdTExNzNcdTExQjgKXHUxMTAwXHUxMTY5XHUxMTAzXHUxMTczXHUxMUJDXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwMFx1MTE2OVx1MTEwNlx1MTE2RVx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMDBcdTExNjlcdTExMDZcdTExNzVcdTExQUIKXHUxMTAwXHUxMTY5XHUxMTBCXHUxMTYzXHUxMUJDXHUxMTBCXHUxMTc1Clx1MTEwMFx1MTE2OVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNjlcdTExMENcdTExNjVcdTExQUIKXHUxMTAwXHUxMTY5XHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwMFx1MTE2OVx1MTEwRVx1MTE2RVx1MTFCQVx1MTEwMFx1MTE2MVx1MTEwNVx1MTE2RQpcdTExMDBcdTExNjlcdTExMTBcdTExNjlcdTExQkMKXHUxMTAwXHUxMTY5XHUxMTEyXHUxMTYzXHUxMUJDClx1MTEwMFx1MTE2OVx1MTFBOFx1MTEwOVx1MTE3NVx1MTFBOApcdTExMDBcdTExNjlcdTExQUZcdTExMDZcdTExNjlcdTExQTgKXHUxMTAwXHUxMTY5XHUxMUFGXHUxMTBEXHUxMTYxXHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2OVx1MTFBRlx1MTExMVx1MTE3MwpcdTExMDBcdTExNjlcdTExQkNcdTExMDBcdTExNjFcdTExQUIKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTAwXHUxMTYyClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwMFx1MTE2N1x1MTFBOApcdTExMDBcdTExNjlcdTExQkNcdTExMDBcdTExNkVcdTExQUIKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTAwXHUxMTczXHUxMUI4Clx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwMFx1MTE3NQpcdTExMDBcdTExNjlcdTExQkNcdTExMDNcdTExNjlcdTExQkMKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTA2XHUxMTZFXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwN1x1MTE2RQpcdTExMDBcdTExNjlcdTExQkNcdTExMDlcdTExNjEKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwQlx1MTE2NVx1MTFCOApcdTExMDBcdTExNjlcdTExQkNcdTExMEJcdTExNjdcdTExQUIKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNjlcdTExQkNcdTExMERcdTExNjEKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTBFXHUxMTYyXHUxMUE4Clx1MTEwMFx1MTE2OVx1MTFCQ1x1MTExMFx1MTE2OVx1MTFCQwpcdTExMDBcdTExNjlcdTExQkNcdTExMTFcdTExNjkKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTEyXHUxMTYxXHUxMUJDClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTExMlx1MTE3Mlx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMDBcdTExNkFcdTExMDZcdTExNjlcdTExQTgKXHUxMTAwXHUxMTZBXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwMFx1MTE2QVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNkFcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTZBXHUxMTEyXHUxMTYxXHUxMUE4Clx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwMFx1MTE2Mlx1MTFBOApcdTExMDBcdTExNkFcdTExQUJcdTExMDBcdTExNjgKXHUxMTAwXHUxMTZBXHUxMUFCXHUxMTAwXHUxMTZBXHUxMUJDClx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwMlx1MTE2N1x1MTFCNwpcdTExMDBcdTExNkFcdTExQUJcdTExMDVcdTExNjFcdTExQjcKXHUxMTAwXHUxMTZBXHUxMUFCXHUxMTA1XHUxMTY3XHUxMUFCClx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwNVx1MTE3NQpcdTExMDBcdTExNkFcdTExQUJcdTExMDlcdTExNzNcdTExQjgKXHUxMTAwXHUxMTZBXHUxMUFCXHUxMTA5XHUxMTc1XHUxMUI3Clx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDBcdTExNkFcdTExQUJcdTExMEVcdTExNjFcdTExQUYKXHUxMTAwXHUxMTZBXHUxMUJDXHUxMTAwXHUxMTY3XHUxMUJDClx1MTEwMFx1MTE2QVx1MTFCQ1x1MTEwMFx1MTE2OQpcdTExMDBcdTExNkFcdTExQkNcdTExMENcdTExNjFcdTExQkMKXHUxMTAwXHUxMTZBXHUxMUJDXHUxMTBDXHUxMTZFClx1MTEwMFx1MTE2Q1x1MTEwNVx1MTE2OVx1MTEwQlx1MTE2RVx1MTFCNwpcdTExMDBcdTExNkNcdTExQkNcdTExMENcdTExNjFcdTExQkNcdTExMTJcdTExNzUKXHUxMTAwXHUxMTZEXHUxMTAwXHUxMTZBXHUxMTA5XHUxMTY1Clx1MTEwMFx1MTE2RFx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMDBcdTExNkRcdTExMDdcdTExNjlcdTExQTgKXHUxMTAwXHUxMTZEXHUxMTA5XHUxMTc1XHUxMUFGClx1MTEwMFx1MTE2RFx1MTEwQlx1MTE2M1x1MTFCQwpcdTExMDBcdTExNkRcdTExMEJcdTExNzJcdTExQTgKXHUxMTAwXHUxMTZEXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwMFx1MTE2RFx1MTEwQ1x1MTE3NVx1MTFBOApcdTExMDBcdTExNkRcdTExMTBcdTExNjlcdTExQkMKXHUxMTAwXHUxMTZEXHUxMTEyXHUxMTZBXHUxMUFCClx1MTEwMFx1MTE2RFx1MTExMlx1MTE2RVx1MTFBQgpcdTExMDBcdTExNkVcdTExMDBcdTExNjdcdTExQkMKXHUxMTAwXHUxMTZFXHUxMTA1XHUxMTczXHUxMUI3Clx1MTEwMFx1MTE2RVx1MTEwNlx1MTE2NVx1MTFCQwpcdTExMDBcdTExNkVcdTExMDdcdTExNjdcdTExQUYKXHUxMTAwXHUxMTZFXHUxMTA3XHUxMTZFXHUxMUFCClx1MTEwMFx1MTE2RVx1MTEwOVx1MTE2NVx1MTFBOApcdTExMDBcdTExNkVcdTExMDlcdTExNjVcdTExQkMKXHUxMTAwXHUxMTZFXHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwMFx1MTE2RVx1MTEwQlx1MTE2N1x1MTFBOApcdTExMDBcdTExNkVcdTExMEJcdTExNzVcdTExQjgKXHUxMTAwXHUxMTZFXHUxMTBFXHUxMTY1XHUxMUJDClx1MTEwMFx1MTE2RVx1MTEwRVx1MTE2Nlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDBcdTExNkVcdTExQThcdTExMDBcdTExNjEKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2RVx1MTFBOFx1MTEwMlx1MTE2MgpcdTExMDBcdTExNkVcdTExQThcdTExMDVcdTExNzVcdTExQjgKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwMFx1MTE2RVx1MTFBOFx1MTEwNlx1MTE3NVx1MTFBQgpcdTExMDBcdTExNkVcdTExQThcdTExMDlcdTExNkUKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTBCXHUxMTY1Clx1MTEwMFx1MTE2RVx1MTFBOFx1MTEwQlx1MTE2QVx1MTFCQwpcdTExMDBcdTExNkVcdTExQThcdTExMENcdTExNjVcdTExQTgKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTBDXHUxMTY2Clx1MTEwMFx1MTE2RVx1MTFBOFx1MTExMlx1MTE2QwpcdTExMDBcdTExNkVcdTExQUJcdTExMDNcdTExNjIKXHUxMTAwXHUxMTZFXHUxMUFCXHUxMTA5XHUxMTYxClx1MTEwMFx1MTE2RVx1MTFBQlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDBcdTExNkVcdTExQkNcdTExMDBcdTExNzNcdTExQThcdTExMENcdTExNjVcdTExQTgKXHUxMTAwXHUxMTZGXHUxMUFCXHUxMTA1XHUxMTc1Clx1MTEwMFx1MTE2Rlx1MTFBQlx1MTEwQlx1MTE3MQpcdTExMDBcdTExNkZcdTExQUJcdTExMTBcdTExNkUKXHUxMTAwXHUxMTcxXHUxMTAwXHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE3MVx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMDBcdTExNzJcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTcyXHUxMTBFXHUxMTc1XHUxMUE4Clx1MTEwMFx1MTE3Mlx1MTFBQlx1MTExMlx1MTE2N1x1MTFCQwpcdTExMDBcdTExNzNcdTExMDJcdTExNjFcdTExQUYKXHUxMTAwXHUxMTczXHUxMTAyXHUxMTYzXHUxMUJDClx1MTEwMFx1MTE3M1x1MTEwMlx1MTE3M1x1MTFBRgpcdTExMDBcdTExNzNcdTExMDVcdTExNjVcdTExMDJcdTExNjEKXHUxMTAwXHUxMTczXHUxMTA1XHUxMTZFXHUxMUI4Clx1MTEwMFx1MTE3M1x1MTEwNVx1MTE3M1x1MTFCQQpcdTExMDBcdTExNzNcdTExMDVcdTExNzVcdTExQjcKXHUxMTAwXHUxMTczXHUxMTBDXHUxMTY2XHUxMTA5XHUxMTY1XHUxMTBCXHUxMTYzClx1MTEwMFx1MTE3M1x1MTExMFx1MTE2OVx1MTEwNVx1MTE2OVx1MTFBOApcdTExMDBcdTExNzNcdTExQThcdTExMDdcdTExNjlcdTExQTgKXHUxMTAwXHUxMTczXHUxMUE4XHUxMTEyXHUxMTc1Clx1MTEwMFx1MTE3M1x1MTFBQlx1MTEwMFx1MTE2NQpcdTExMDBcdTExNzNcdTExQUJcdTExMDBcdTExNkQKXHUxMTAwXHUxMTczXHUxMUFCXHUxMTA1XHUxMTYyClx1MTEwMFx1MTE3M1x1MTFBQlx1MTEwNVx1MTE2OQpcdTExMDBcdTExNzNcdTExQUJcdTExMDZcdTExNkUKXHUxMTAwXHUxMTczXHUxMUFCXHUxMTA3XHUxMTY5XHUxMUFCClx1MTEwMFx1MTE3M1x1MTFBQlx1MTEwQlx1MTE2Rlx1MTFBQgpcdTExMDBcdTExNzNcdTExQUJcdTExMEJcdTExNzJcdTExQTgKXHUxMTAwXHUxMTczXHUxMUFCXHUxMTBFXHUxMTY1Clx1MTEwMFx1MTE3M1x1MTFBRlx1MTEwQVx1MTE3NQpcdTExMDBcdTExNzNcdTExQUZcdTExMENcdTExNjEKXHUxMTAwXHUxMTczXHUxMUI3XHUxMTAwXHUxMTYxXHUxMUJDXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwMFx1MTE2OQpcdTExMDBcdTExNzNcdTExQjdcdTExMDJcdTExNjdcdTExQUIKXHUxMTAwXHUxMTczXHUxMUI3XHUxMTA2XHUxMTY2XHUxMTAzXHUxMTYxXHUxMUFGClx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwQlx1MTE2Mlx1MTFBOApcdTExMDBcdTExNzNcdTExQjdcdTExMEJcdTExNjdcdTExQUIKXHUxMTAwXHUxMTczXHUxMUI3XHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwQ1x1MTE3NQpcdTExMDBcdTExNzNcdTExQkNcdTExMENcdTExNjVcdTExQkNcdTExMENcdTExNjVcdTExQTgKXHUxMTAwXHUxMTc1XHUxMTAwXHUxMTYxXHUxMUFCClx1MTEwMFx1MTE3NVx1MTEwMFx1MTE2QVx1MTFBQgpcdTExMDBcdTExNzVcdTExMDJcdTExNjdcdTExQjcKXHUxMTAwXHUxMTc1XHUxMTAyXHUxMTczXHUxMUJDClx1MTEwMFx1MTE3NVx1MTEwM1x1MTE2OVx1MTFBOFx1MTEwMFx1MTE2RApcdTExMDBcdTExNzVcdTExMDNcdTExNkVcdTExQkMKXHUxMTAwXHUxMTc1XHUxMTA1XHUxMTY5XHUxMUE4Clx1MTEwMFx1MTE3NVx1MTEwNVx1MTE3M1x1MTFCNwpcdTExMDBcdTExNzVcdTExMDdcdTExNjVcdTExQjgKXHUxMTAwXHUxMTc1XHUxMTA3XHUxMTY5XHUxMUFCClx1MTEwMFx1MTE3NVx1MTEwN1x1MTE2RVx1MTFBQgpcdTExMDBcdTExNzVcdTExMDhcdTExNzNcdTExQjcKXHUxMTAwXHUxMTc1XHUxMTA5XHUxMTZFXHUxMUE4XHUxMTA5XHUxMTYxClx1MTEwMFx1MTE3NVx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMDBcdTExNzVcdTExMEJcdTExNjVcdTExQTgKXHUxMTAwXHUxMTc1XHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwMFx1MTE3NVx1MTEwQlx1MTE2OVx1MTFBQgpcdTExMDBcdTExNzVcdTExMEJcdTExNkVcdTExQUIKXHUxMTAwXHUxMTc1XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwMFx1MTE3NVx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDBcdTExNzVcdTExMENcdTExNkVcdTExQUIKXHUxMTAwXHUxMTc1XHUxMTBFXHUxMTc1XHUxMUI3Clx1MTEwMFx1MTE3NVx1MTExMlx1MTE2OVx1MTFBQgpcdTExMDBcdTExNzVcdTExMTJcdTExNkNcdTExQTgKXHUxMTAwXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTczXHUxMUI4Clx1MTEwMFx1MTE3NVx1MTFBQlx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNzVcdTExQUZcdTExMEJcdTExNzUKXHUxMTAwXHUxMTc1XHUxMUI3XHUxMTA3XHUxMTYxXHUxMUI4Clx1MTEwMFx1MTE3NVx1MTFCN1x1MTEwRVx1MTE3NQpcdTExMDBcdTExNzVcdTExQjdcdTExMTFcdTExNjlcdTExMDBcdTExNjlcdTExQkNcdTExMTJcdTExNjFcdTExQkMKXHUxMTAxXHUxMTYxXHUxMUE4XHUxMTAzXHUxMTZFXHUxMTAwXHUxMTc1Clx1MTEwMVx1MTE2MVx1MTFCN1x1MTEwOFx1MTE2MVx1MTFBOApcdTExMDFcdTExNjJcdTExMDNcdTExNjFcdTExQUZcdTExMEJcdTExNzNcdTExQjcKXHUxMTAxXHUxMTYyXHUxMTA5XHUxMTY5XHUxMTAwXHUxMTczXHUxMUI3Clx1MTEwMVx1MTE2NVx1MTFCOFx1MTEwQ1x1MTE3NVx1MTFBRgpcdTExMDFcdTExNjlcdTExQThcdTExMDNcdTExNjJcdTExMDBcdTExNzUKXHUxMTAxXHUxMTY5XHUxMUJFXHUxMTBCXHUxMTc1XHUxMUMxClx1MTEwMlx1MTE2MVx1MTEwM1x1MTE3M1x1MTFBRlx1MTEwQlx1MTE3NQpcdTExMDJcdTExNjFcdTExMDVcdTExNjFcdTExQUJcdTExMTJcdTExNzUKXHUxMTAyXHUxMTYxXHUxMTA2XHUxMTY1XHUxMTBDXHUxMTc1Clx1MTEwMlx1MTE2MVx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDJcdTExNjFcdTExMEVcdTExNzVcdTExQjdcdTExMDdcdTExNjFcdTExQUIKXHUxMTAyXHUxMTYxXHUxMTEyXHUxMTczXHUxMUFGClx1MTEwMlx1MTE2MVx1MTFBOFx1MTEwQlx1MTE2N1x1MTFCOApcdTExMDJcdTExNjFcdTExQUJcdTExMDdcdTExNjFcdTExQkMKXHUxMTAyXHUxMTYxXHUxMUFGXHUxMTAwXHUxMTYyClx1MTEwMlx1MTE2MVx1MTFBRlx1MTEwQVx1MTE3NQpcdTExMDJcdTExNjFcdTExQUZcdTExMERcdTExNjEKXHUxMTAyXHUxMTYxXHUxMUI3XHUxMTAyXHUxMTY3Clx1MTEwMlx1MTE2MVx1MTFCN1x1MTEwM1x1MTE2Mlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMDJcdTExNjFcdTExQjdcdTExMDZcdTExNjIKXHUxMTAyXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwMlx1MTE2MVx1MTFCN1x1MTEwQ1x1MTE2MQpcdTExMDJcdTExNjFcdTExQjdcdTExMTFcdTExNjdcdTExQUIKXHUxMTAyXHUxMTYxXHUxMUI3XHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwMlx1MTE2MVx1MTFCQ1x1MTEwN1x1MTE3NQpcdTExMDJcdTExNjFcdTExQzBcdTExMDZcdTExNjFcdTExQUYKXHUxMTAyXHUxMTYyXHUxMTAyXHUxMTY3XHUxMUFCClx1MTEwMlx1MTE2Mlx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDJcdTExNjJcdTExMEJcdTExNzVcdTExQUYKXHUxMTAyXHUxMTYyXHUxMUI3XHUxMTA3XHUxMTc1Clx1MTEwMlx1MTE2Mlx1MTFCN1x1MTEwOVx1MTE2MgpcdTExMDJcdTExNjJcdTExQkFcdTExMDZcdTExNkVcdTExQUYKXHUxMTAyXHUxMTYyXHUxMUJDXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwMlx1MTE2Mlx1MTFCQ1x1MTEwNlx1MTE2N1x1MTFBQgpcdTExMDJcdTExNjJcdTExQkNcdTExMDdcdTExNjFcdTExQkMKXHUxMTAyXHUxMTYyXHUxMUJDXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTY5Clx1MTEwMlx1MTE2Nlx1MTFBOFx1MTExMFx1MTE2MVx1MTEwQlx1MTE3NQpcdTExMDJcdTExNjZcdTExQkFcdTExMERcdTExNjIKXHUxMTAyXHUxMTY5XHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwMlx1MTE2OVx1MTEwNVx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDJcdTExNjlcdTExMDVcdTExNjdcdTExQTgKXHUxMTAyXHUxMTY5XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwMlx1MTE2OVx1MTFBOFx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDJcdTExNjlcdTExQThcdTExMEVcdTExNjEKXHUxMTAyXHUxMTY5XHUxMUE4XHUxMTEyXHUxMTZBClx1MTEwMlx1MTE2OVx1MTFBQlx1MTEwNVx1MTE3NQpcdTExMDJcdTExNjlcdTExQUJcdTExMDZcdTExNkVcdTExQUIKXHUxMTAyXHUxMTY5XHUxMUFCXHUxMTBDXHUxMTYyXHUxMUJDClx1MTEwMlx1MTE2OVx1MTFBRlx1MTEwQlx1MTE3NQpcdTExMDJcdTExNjlcdTExQkNcdTExMDBcdTExNkUKXHUxMTAyXHUxMTY5XHUxMUJDXHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwMlx1MTE2OVx1MTFCQ1x1MTEwNlx1MTE3NVx1MTFBQgpcdTExMDJcdTExNjlcdTExQkNcdTExMDdcdTExNkUKXHUxMTAyXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwMlx1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDJcdTExNjlcdTExQkNcdTExMEVcdTExNjlcdTExQUIKXHUxMTAyXHUxMTY5XHUxMUMxXHUxMTBCXHUxMTc1Clx1MTEwMlx1MTE2RVx1MTFBQlx1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MQpcdTExMDJcdTExNkVcdTExQUJcdTExMDZcdTExNkVcdTExQUYKXHUxMTAyXHUxMTZFXHUxMUFCXHUxMTBBXHUxMTY1XHUxMUI4Clx1MTEwMlx1MTE3Mlx1MTEwQlx1MTE2RFx1MTFBOApcdTExMDJcdTExNzNcdTExMDFcdTExNzVcdTExQjcKXHUxMTAyXHUxMTczXHUxMUE4XHUxMTAzXHUxMTYyClx1MTEwMlx1MTE3M1x1MTFCQ1x1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDJcdTExNzNcdTExQkNcdTExMDVcdTExNjdcdTExQTgKXHUxMTAzXHUxMTYxXHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwM1x1MTE2MVx1MTEwQlx1MTE2M1x1MTFCQ1x1MTEwOVx1MTE2NVx1MTFCQwpcdTExMDNcdTExNjFcdTExMEJcdTExNzNcdTExQjcKXHUxMTAzXHUxMTYxXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTY1XHUxMTEwXHUxMTczClx1MTEwM1x1MTE2MVx1MTExMlx1MTE2Mlx1MTFCQwpcdTExMDNcdTExNjFcdTExQUJcdTExMDBcdTExNjgKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTAwXHUxMTY5XHUxMUFGClx1MTEwM1x1MTE2MVx1MTFBQlx1MTEwM1x1MTE2OVx1MTFBOApcdTExMDNcdTExNjFcdTExQUJcdTExMDZcdTExNjFcdTExQkEKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTA5XHUxMTZFXHUxMUFCClx1MTEwM1x1MTE2MVx1MTFBQlx1MTEwQlx1MTE2NQpcdTExMDNcdTExNjFcdTExQUJcdTExMEJcdTExNzEKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwM1x1MTE2MVx1MTFBQlx1MTEwRVx1MTE2NgpcdTExMDNcdTExNjFcdTExQUJcdTExMEVcdTExNkUKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTExXHUxMTY3XHUxMUFCClx1MTEwM1x1MTE2MVx1MTFBQlx1MTExMVx1MTE2RVx1MTFCQwpcdTExMDNcdTExNjFcdTExQUZcdTExMDBcdTExNjNcdTExQUYKXHUxMTAzXHUxMTYxXHUxMUFGXHUxMTA1XHUxMTY1Clx1MTEwM1x1MTE2MVx1MTFBRlx1MTEwNVx1MTE2N1x1MTFBOApcdTExMDNcdTExNjFcdTExQUZcdTExMDVcdTExNzUKXHUxMTAzXHUxMTYxXHUxMUIwXHUxMTAwXHUxMTY5XHUxMTAwXHUxMTc1Clx1MTEwM1x1MTE2MVx1MTFCN1x1MTEwM1x1MTE2MVx1MTFCQwpcdTExMDNcdTExNjFcdTExQjdcdTExMDdcdTExNjIKXHUxMTAzXHUxMTYxXHUxMUI3XHUxMTBCXHUxMTZEClx1MTEwM1x1MTE2MVx1MTFCN1x1MTEwQlx1MTE3NVx1MTFCNwpcdTExMDNcdTExNjFcdTExQjhcdTExMDdcdTExNjdcdTExQUIKXHUxMTAzXHUxMTYxXHUxMUI4XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwM1x1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3M1x1MTFBQgpcdTExMDNcdTExNjFcdTExQkNcdTExMDdcdTExNkVcdTExQUJcdTExMDBcdTExNjFcdTExQUIKXHUxMTAzXHUxMTYxXHUxMUJDXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwM1x1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDNcdTExNjJcdTExMDBcdTExNzJcdTExMDZcdTExNjkKXHUxMTAzXHUxMTYyXHUxMTAyXHUxMTYxXHUxMUJEClx1MTEwM1x1MTE2Mlx1MTEwM1x1MTE2MVx1MTFBQlx1MTExMlx1MTE3NQpcdTExMDNcdTExNjJcdTExMDNcdTExNjFcdTExQjgKXHUxMTAzXHUxMTYyXHUxMTAzXHUxMTY5XHUxMTA5XHUxMTc1Clx1MTEwM1x1MTE2Mlx1MTEwNVx1MTE2M1x1MTFBOApcdTExMDNcdTExNjJcdTExMDVcdTExNjNcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTA1XHUxMTcyXHUxMUE4Clx1MTEwM1x1MTE2Mlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMDNcdTExNjJcdTExMDdcdTExNkVcdTExMDdcdTExNkVcdTExQUIKXHUxMTAzXHUxMTYyXHUxMTA5XHUxMTc1XHUxMUFCClx1MTEwM1x1MTE2Mlx1MTEwQlx1MTE3M1x1MTFCQwpcdTExMDNcdTExNjJcdTExMENcdTExNjFcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTBDXHUxMTY1XHUxMUFCClx1MTEwM1x1MTE2Mlx1MTEwQ1x1MTE2NVx1MTFCOApcdTExMDNcdTExNjJcdTExMENcdTExNkVcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTBFXHUxMTYyXHUxMUE4Clx1MTEwM1x1MTE2Mlx1MTEwRVx1MTE2RVx1MTFBRgpcdTExMDNcdTExNjJcdTExMEVcdTExNkVcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTA1XHUxMTY3XHUxMUJDClx1MTEwM1x1MTE2Mlx1MTExMlx1MTE2MVx1MTFBOApcdTExMDNcdTExNjJcdTExMTJcdTExNjFcdTExQUJcdTExMDZcdTExNzVcdTExQUJcdTExMDBcdTExNkVcdTExQTgKXHUxMTAzXHUxMTYyXHUxMTEyXHUxMTYxXHUxMUI4XHUxMTA5XHUxMTc1XHUxMUFGClx1MTEwM1x1MTE2Mlx1MTExMlx1MTE2N1x1MTFCQwpcdTExMDNcdTExNjVcdTExQkNcdTExMEJcdTExNjVcdTExMDVcdTExNzUKXHUxMTAzXHUxMTY2XHUxMTBCXHUxMTc1XHUxMTEwXHUxMTczClx1MTEwM1x1MTE2OVx1MTEwM1x1MTE2Mlx1MTEwRVx1MTE2NgpcdTExMDNcdTExNjlcdTExMDNcdTExNjVcdTExQTgKXHUxMTAzXHUxMTY5XHUxMTAzXHUxMTZFXHUxMUE4Clx1MTEwM1x1MTE2OVx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMDNcdTExNjlcdTExMDlcdTExNjVcdTExMDBcdTExNkFcdTExQUIKXHUxMTAzXHUxMTY5XHUxMTA5XHUxMTc1XHUxMUI3Clx1MTEwM1x1MTE2OVx1MTEwQlx1MTE2RVx1MTFCNwpcdTExMDNcdTExNjlcdTExMEJcdTExNzVcdTExQjgKXHUxMTAzXHUxMTY5XHUxMTBDXHUxMTYxXHUxMTAwXHUxMTc1Clx1MTEwM1x1MTE2OVx1MTEwQ1x1MTE2NVx1MTExMlx1MTE3NQpcdTExMDNcdTExNjlcdTExMENcdTExNjVcdTExQUIKXHUxMTAzXHUxMTY5XHUxMTBDXHUxMTZFXHUxMUJDClx1MTEwM1x1MTE2OVx1MTEwRVx1MTE2MVx1MTFBOApcdTExMDNcdTExNjlcdTExQThcdTExMDBcdTExNjFcdTExQjcKXHUxMTAzXHUxMTY5XHUxMUE4XHUxMTA1XHUxMTc1XHUxMUI4Clx1MTEwM1x1MTE2OVx1MTFBOFx1MTEwOVx1MTE2NQpcdTExMDNcdTExNjlcdTExQThcdTExMEJcdTExNzVcdTExQUYKXHUxMTAzXHUxMTY5XHUxMUE4XHUxMTBFXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwM1x1MTE2OVx1MTFCQ1x1MTExMlx1MTE2QVx1MTEwRVx1MTE2Mlx1MTFBOApcdTExMDNcdTExNzFcdTExQkFcdTExMDZcdTExNjlcdTExMDlcdTExNzNcdTExQjgKXHUxMTAzXHUxMTcxXHUxMUJBXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwNFx1MTE2MVx1MTFBRlx1MTEwQlx1MTE2MVx1MTEwQlx1MTE3NQpcdTExMDZcdTExNjFcdTExMDJcdTExNkVcdTExMDVcdTExNjEKXHUxMTA2XHUxMTYxXHUxMTAyXHUxMTczXHUxMUFGClx1MTEwNlx1MTE2MVx1MTEwM1x1MTE2MVx1MTFCQwpcdTExMDZcdTExNjFcdTExMDVcdTExNjFcdTExMTBcdTExNjlcdTExQUIKXHUxMTA2XHUxMTYxXHUxMTA1XHUxMTY3XHUxMUFCClx1MTEwNlx1MTE2MVx1MTEwNlx1MTE2RVx1MTEwNVx1MTE3NQpcdTExMDZcdTExNjFcdTExMDlcdTExNjFcdTExMENcdTExNzUKXHUxMTA2XHUxMTYxXHUxMTBCXHUxMTYzXHUxMUE4Clx1MTEwNlx1MTE2MVx1MTEwQlx1MTE2RFx1MTEwMlx1MTE2Nlx1MTEwQ1x1MTE3MwpcdTExMDZcdTExNjFcdTExMEJcdTExNzNcdTExQUYKXHUxMTA2XHUxMTYxXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwNlx1MTE2MVx1MTEwQlx1MTE3NVx1MTEwRlx1MTE3MwpcdTExMDZcdTExNjFcdTExMENcdTExNkVcdTExQkMKXHUxMTA2XHUxMTYxXHUxMTBDXHUxMTc1XHUxMTA2XHUxMTYxXHUxMUE4Clx1MTEwNlx1MTE2MVx1MTEwRVx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2MVx1MTEwQ1x1MTE3NQpcdTExMDZcdTExNjFcdTExMEVcdTExNjFcdTExQUYKXHUxMTA2XHUxMTYxXHUxMTEyXHUxMTczXHUxMUFCClx1MTEwNlx1MTE2MVx1MTFBOFx1MTEwMFx1MTE2NVx1MTFBRlx1MTEwNVx1MTE3NQpcdTExMDZcdTExNjFcdTExQThcdTExMDJcdTExNjIKXHUxMTA2XHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwNlx1MTE2MVx1MTFBQlx1MTEwMlx1MTE2MVx1MTFCNwpcdTExMDZcdTExNjFcdTExQUJcdTExMDNcdTExNkUKXHUxMTA2XHUxMTYxXHUxMUFCXHUxMTA5XHUxMTY2Clx1MTEwNlx1MTE2MVx1MTFBQlx1MTEwQlx1MTE2M1x1MTFBOApcdTExMDZcdTExNjFcdTExQUJcdTExMEJcdTExNzVcdTExQUYKXHUxMTA2XHUxMTYxXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwNlx1MTE2MVx1MTFBQlx1MTEwQ1x1MTE2OVx1MTFBOApcdTExMDZcdTExNjFcdTExQUJcdTExMTJcdTExNkEKXHUxMTA2XHUxMTYxXHUxMUFEXHUxMTBCXHUxMTc1Clx1MTEwNlx1MTE2MVx1MTFBRlx1MTEwMFx1MTE3NQpcdTExMDZcdTExNjFcdTExQUZcdTExMEFcdTExNzNcdTExQjcKXHUxMTA2XHUxMTYxXHUxMUFGXHUxMTEwXHUxMTZFClx1MTEwNlx1MTE2MVx1MTFCN1x1MTEwM1x1MTE2Mlx1MTEwNVx1MTE2OQpcdTExMDZcdTExNjFcdTExQkNcdTExMEJcdTExNkZcdTExQUJcdTExMDBcdTExNjdcdTExQkMKXHUxMTA2XHUxMTYyXHUxMTAyXHUxMTY3XHUxMUFCClx1MTEwNlx1MTE2Mlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMDZcdTExNjJcdTExMDVcdTExNjdcdTExQTgKXHUxMTA2XHUxMTYyXHUxMTA3XHUxMTY1XHUxMUFCClx1MTEwNlx1MTE2Mlx1MTEwOVx1MTE3M1x1MTEwRlx1MTE2NVx1MTFCNwpcdTExMDZcdTExNjJcdTExMEJcdTExNzVcdTExQUYKXHUxMTA2XHUxMTYyXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwNlx1MTE2Mlx1MTFBOFx1MTEwQ1x1MTE2RQpcdTExMDZcdTExNjVcdTExQThcdTExMEJcdTExNzUKXHUxMTA2XHUxMTY1XHUxMUFCXHUxMTBDXHUxMTY1Clx1MTEwNlx1MTE2NVx1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMDZcdTExNjVcdTExQUZcdTExMDVcdTExNzUKXHUxMTA2XHUxMTY2XHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwNlx1MTE2N1x1MTEwMlx1MTE3M1x1MTEwNVx1MTE3NQpcdTExMDZcdTExNjdcdTExMEVcdTExNzVcdTExQUYKXHUxMTA2XHUxMTY3XHUxMUFCXHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwNlx1MTE2N1x1MTFBRlx1MTEwRVx1MTE3NQpcdTExMDZcdTExNjdcdTExQkNcdTExMDNcdTExNjFcdTExQUIKXHUxMTA2XHUxMTY3XHUxMUJDXHUxMTA1XHUxMTY3XHUxMUJDClx1MTEwNlx1MTE2N1x1MTFCQ1x1MTEwQlx1MTE2OApcdTExMDZcdTExNjdcdTExQkNcdTExMEJcdTExNzQKXHUxMTA2XHUxMTY3XHUxMUJDXHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwNlx1MTE2N1x1MTFCQ1x1MTEwRVx1MTE3NVx1MTFCQwpcdTExMDZcdTExNjdcdTExQkNcdTExMTJcdTExNjFcdTExQjcKXHUxMTA2XHUxMTY5XHUxMTAwXHUxMTczXHUxMUI3Clx1MTEwNlx1MTE2OVx1MTEwMlx1MTE3NVx1MTExMFx1MTE2NQpcdTExMDZcdTExNjlcdTExMDNcdTExNjZcdTExQUYKXHUxMTA2XHUxMTY5XHUxMTAzXHUxMTczXHUxMUFCClx1MTEwNlx1MTE2OVx1MTEwN1x1MTE2NVx1MTFCNwpcdTExMDZcdTExNjlcdTExMDlcdTExNzNcdTExQjgKXHUxMTA2XHUxMTY5XHUxMTBCXHUxMTYzXHUxMUJDClx1MTEwNlx1MTE2OVx1MTEwQlx1MTE3NVx1MTFCNwpcdTExMDZcdTExNjlcdTExMENcdTExNjlcdTExMDVcdTExNzUKXHUxMTA2XHUxMTY5XHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwNlx1MTE2OVx1MTExMFx1MTE2RVx1MTFCQ1x1MTEwQlx1MTE3NQpcdTExMDZcdTExNjlcdTExQThcdTExMDBcdTExNjVcdTExQUZcdTExMEJcdTExNzUKXHUxMTA2XHUxMTY5XHUxMUE4XHUxMTA1XHUxMTY5XHUxMUE4Clx1MTEwNlx1MTE2OVx1MTFBOFx1MTEwOVx1MTE2MQpcdTExMDZcdTExNjlcdTExQThcdTExMDlcdTExNjlcdTExMDVcdTExNzUKXHUxMTA2XHUxMTY5XHUxMUE4XHUxMTA5XHUxMTZFXHUxMUI3Clx1MTEwNlx1MTE2OVx1MTFBOFx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDZcdTExNjlcdTExQThcdTExMTFcdTExNkQKXHUxMTA2XHUxMTY5XHUxMUFGXHUxMTA1XHUxMTYyClx1MTEwNlx1MTE2OVx1MTFCN1x1MTEwNlx1MTE2MgpcdTExMDZcdTExNjlcdTExQjdcdTExMDZcdTExNkVcdTExMDBcdTExNjYKXHUxMTA2XHUxMTY5XHUxMUI3XHUxMTA5XHUxMTYxXHUxMUFGClx1MTEwNlx1MTE2OVx1MTFCN1x1MTEwOVx1MTE2OVx1MTFBOApcdTExMDZcdTExNjlcdTExQjdcdTExMENcdTExNzVcdTExQkEKXHUxMTA2XHUxMTY5XHUxMUI3XHUxMTEwXHUxMTY5XHUxMUJDClx1MTEwNlx1MTE2OVx1MTFCOFx1MTEwOVx1MTE3NQpcdTExMDZcdTExNkVcdTExMDBcdTExNkFcdTExQUJcdTExMDlcdTExNzVcdTExQjcKXHUxMTA2XHUxMTZFXHUxMTAwXHUxMTZFXHUxMUJDXHUxMTEyXHUxMTZBClx1MTEwNlx1MTE2RVx1MTEwM1x1MTE2NVx1MTEwQlx1MTE3MQpcdTExMDZcdTExNkVcdTExMDNcdTExNjVcdTExQjcKXHUxMTA2XHUxMTZFXHUxMTA1XHUxMTczXHUxMUMxClx1MTEwNlx1MTE2RVx1MTEwOVx1MTE3M1x1MTFBQgpcdTExMDZcdTExNkVcdTExMEJcdTExNjVcdTExQkEKXHUxMTA2XHUxMTZFXHUxMTBCXHUxMTY3XHUxMUE4Clx1MTEwNlx1MTE2RVx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDZcdTExNkVcdTExMENcdTExNjlcdTExMDBcdTExNjVcdTExQUIKXHUxMTA2XHUxMTZFXHUxMTBDXHUxMTc1XHUxMTAwXHUxMTYyClx1MTEwNlx1MTE2RVx1MTEwRVx1MTE2NVx1MTFBOApcdTExMDZcdTExNkVcdTExQUJcdTExMDBcdTExNkUKXHUxMTA2XHUxMTZFXHUxMUFCXHUxMTAzXHUxMTczXHUxMUE4Clx1MTEwNlx1MTE2RVx1MTFBQlx1MTEwN1x1MTE2NVx1MTFCOApcdTExMDZcdTExNkVcdTExQUJcdTExMDlcdTExNjUKXHUxMTA2XHUxMTZFXHUxMUFCXHUxMTBDXHUxMTY2Clx1MTEwNlx1MTE2RVx1MTFBQlx1MTExMlx1MTE2MVx1MTFBOApcdTExMDZcdTExNkVcdTExQUJcdTExMTJcdTExNkEKXHUxMTA2XHUxMTZFXHUxMUFGXHUxMTAwXHUxMTYxClx1MTEwNlx1MTE2RVx1MTFBRlx1MTEwMFx1MTE2NVx1MTFBQgpcdTExMDZcdTExNkVcdTExQUZcdTExMDBcdTExNjdcdTExQUYKXHUxMTA2XHUxMTZFXHUxMUFGXHUxMTAwXHUxMTY5XHUxMTAwXHUxMTc1Clx1MTEwNlx1MTE2RVx1MTFBRlx1MTEwNVx1MTE2OVx1MTFBQgpcdTExMDZcdTExNkVcdTExQUZcdTExMDVcdTExNzVcdTExMTJcdTExNjFcdTExQTgKXHUxMTA2XHUxMTZFXHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwNlx1MTE2RVx1MTFBRlx1MTEwQ1x1MTE3NVx1MTFBRgpcdTExMDZcdTExNkVcdTExQUZcdTExMEVcdTExNjYKXHUxMTA2XHUxMTc1XHUxMTAwXHUxMTZFXHUxMUE4Clx1MTEwNlx1MTE3NVx1MTEwM1x1MTE3NVx1MTEwQlx1MTE2NQpcdTExMDZcdTExNzVcdTExMDlcdTExNjFcdTExMEJcdTExNzVcdTExQUYKXHUxMTA2XHUxMTc1XHUxMTA5XHUxMTZFXHUxMUFGClx1MTEwNlx1MTE3NVx1MTEwQlx1MTE2N1x1MTFBOApcdTExMDZcdTExNzVcdTExMEJcdTExNkRcdTExQkNcdTExMDlcdTExNzVcdTExQUYKXHUxMTA2XHUxMTc1XHUxMTBCXHUxMTZFXHUxMUI3Clx1MTEwNlx1MTE3NVx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDZcdTExNzVcdTExMTBcdTExNzVcdTExQkMKXHUxMTA2XHUxMTc1XHUxMTEyXHUxMTY5XHUxMUFCClx1MTEwNlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE2MVx1MTFBQgpcdTExMDZcdTExNzVcdTExQUJcdTExMENcdTExNjlcdTExQTgKXHUxMTA2XHUxMTc1XHUxMUFCXHUxMTBDXHUxMTZFClx1MTEwNlx1MTE3NVx1MTFBRVx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDZcdTExNzVcdTExQUZcdTExMDBcdTExNjFcdTExMDVcdTExNkUKXHUxMTA2XHUxMTc1XHUxMUFGXHUxMTA1XHUxMTc1XHUxMTA2XHUxMTc1XHUxMTEwXHUxMTY1Clx1MTEwNlx1MTE3NVx1MTFDMFx1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExMDBcdTExNjFcdTExMENcdTExNzUKXHUxMTA3XHUxMTYxXHUxMTAwXHUxMTZFXHUxMTAyXHUxMTc1Clx1MTEwN1x1MTE2MVx1MTEwMlx1MTE2MVx1MTEwMlx1MTE2MQpcdTExMDdcdTExNjFcdTExMDJcdTExNzNcdTExQUYKXHUxMTA3XHUxMTYxXHUxMTAzXHUxMTYxXHUxMUE4Clx1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFCQVx1MTEwMFx1MTE2MQpcdTExMDdcdTExNjFcdTExMDVcdTExNjFcdTExQjcKXHUxMTA3XHUxMTYxXHUxMTBCXHUxMTc1XHUxMTA1XHUxMTY1XHUxMTA5XHUxMTczClx1MTEwN1x1MTE2MVx1MTExMFx1MTE2MVx1MTFCQwpcdTExMDdcdTExNjFcdTExQThcdTExMDZcdTExNkVcdTExQUZcdTExMDBcdTExNkFcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYxClx1MTEwN1x1MTE2MVx1MTFBOFx1MTEwOVx1MTE2RQpcdTExMDdcdTExNjFcdTExQUJcdTExMDNcdTExNjIKXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTAzXHUxMTczXHUxMTA5XHUxMTc1Clx1MTEwN1x1MTE2MVx1MTFBQlx1MTEwNlx1MTE2MVx1MTFBRgpcdTExMDdcdTExNjFcdTExQUJcdTExMDdcdTExNjFcdTExQUYKXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwN1x1MTE2MVx1MTFBQlx1MTEwQlx1MTE3M1x1MTFCQwpcdTExMDdcdTExNjFcdTExQUJcdTExMENcdTExNjFcdTExQkMKXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTBDXHUxMTZFXHUxMUE4Clx1MTEwN1x1MTE2MVx1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMDdcdTExNjFcdTExQUJcdTExMEVcdTExNjFcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUFFXHUxMTBFXHUxMTc1XHUxMUI3Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwMFx1MTE2MVx1MTEwNVx1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExQUZcdTExMDBcdTExNjVcdTExQUZcdTExMEJcdTExNzNcdTExQjcKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTAwXHUxMTY3XHUxMUFCClx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMDdcdTExNjFcdTExQUZcdTExMDVcdTExNjYKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTA2XHUxMTY5XHUxMUE4Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExQUZcdTExMDlcdTExNjJcdTExQkMKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwQ1x1MTE2MVx1MTEwMFx1MTE2RVx1MTFBOApcdTExMDdcdTExNjFcdTExQUZcdTExMENcdTExNjVcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTEwXHUxMTY5XHUxMUI4Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTExMVx1MTE2RApcdTExMDdcdTExNjFcdTExQjdcdTExMTJcdTExNjFcdTExMDJcdTExNzNcdTExQUYKXHUxMTA3XHUxMTYxXHUxMUI4XHUxMTAwXHUxMTczXHUxMTA1XHUxMTczXHUxMUJBClx1MTEwN1x1MTE2MVx1MTFCOFx1MTEwNlx1MTE2MVx1MTFCQQpcdTExMDdcdTExNjFcdTExQjhcdTExMDlcdTExNjFcdTExQkMKXHUxMTA3XHUxMTYxXHUxMUI4XHUxMTA5XHUxMTY5XHUxMUMwClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDdcdTExNjFcdTExQkNcdTExMDZcdTExNjdcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExQkNcdTExMDdcdTExNjVcdTExQjgKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTA5XHUxMTY5XHUxMUJDClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwOVx1MTE3NVx1MTFBOApcdTExMDdcdTExNjFcdTExQkNcdTExMEJcdTExNjFcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTBCXHUxMTZFXHUxMUFGClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE3NQpcdTExMDdcdTExNjFcdTExQkNcdTExMTJcdTExNjFcdTExQTgKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTEyXHUxMTYyClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTExMlx1MTE2M1x1MTFCQwpcdTExMDdcdTExNjJcdTExMDBcdTExNjdcdTExQkMKXHUxMTA3XHUxMTYyXHUxMTAxXHUxMTY5XHUxMUI4Clx1MTEwN1x1MTE2Mlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMDdcdTExNjJcdTExMDNcdTExNzNcdTExMDZcdTExNzVcdTExQUJcdTExMTBcdTExNjVcdTExQUIKXHUxMTA3XHUxMTYyXHUxMUE4XHUxMTAzXHUxMTZFXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwN1x1MTE2Mlx1MTFBOFx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDdcdTExNjJcdTExQThcdTExMDlcdTExNjVcdTExQkMKXHUxMTA3XHUxMTYyXHUxMUE4XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwN1x1MTE2Mlx1MTFBOFx1MTEwQ1x1MTE2NgpcdTExMDdcdTExNjJcdTExQThcdTExMTJcdTExNkFcdTExMENcdTExNjVcdTExQjcKXHUxMTA3XHUxMTY1XHUxMTA1XHUxMTczXHUxMUJBClx1MTEwN1x1MTE2NVx1MTEwOVx1MTE2NVx1MTFCQQpcdTExMDdcdTExNjVcdTExMTBcdTExNzNcdTExQUIKXHUxMTA3XHUxMTY1XHUxMUFCXHUxMTAwXHUxMTYyClx1MTEwN1x1MTE2NVx1MTFBQlx1MTEwQlx1MTE2N1x1MTFBOApcdTExMDdcdTExNjVcdTExQUJcdTExMENcdTExNzUKXHUxMTA3XHUxMTY1XHUxMUFCXHUxMTEyXHUxMTY5Clx1MTEwN1x1MTE2NVx1MTFBRlx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDdcdTExNjVcdTExQUZcdTExMDVcdTExNjYKXHUxMTA3XHUxMTY1XHUxMUFGXHUxMTBBXHUxMTY1Clx1MTEwN1x1MTE2NVx1MTFCN1x1MTEwQlx1MTE3MQpcdTExMDdcdTExNjVcdTExQjdcdTExMEJcdTExNzVcdTExQUIKXHUxMTA3XHUxMTY1XHUxMUI3XHUxMTBDXHUxMTZDClx1MTEwN1x1MTE2NVx1MTFCOFx1MTEwNVx1MTE3Mlx1MTFBRgpcdTExMDdcdTExNjVcdTExQjhcdTExMEJcdTExNkZcdTExQUIKXHUxMTA3XHUxMTY1XHUxMUI4XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwN1x1MTE2NVx1MTFCOFx1MTEwRVx1MTE3NVx1MTFBOApcdTExMDdcdTExNjZcdTExMEJcdTExNzVcdTExMENcdTExNzVcdTExQkMKXHUxMTA3XHUxMTY2XHUxMUFGXHUxMTEwXHUxMTczClx1MTEwN1x1MTE2N1x1MTFBQlx1MTEwMFx1MTE2N1x1MTFCQwpcdTExMDdcdTExNjdcdTExQUJcdTExMDNcdTExNjlcdTExQkMKXHUxMTA3XHUxMTY3XHUxMUFCXHUxMTA2XHUxMTY3XHUxMUJDClx1MTEwN1x1MTE2N1x1MTFBQlx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMDdcdTExNjdcdTExQUJcdTExMTJcdTExNjlcdTExMDlcdTExNjEKXHUxMTA3XHUxMTY3XHUxMUFCXHUxMTEyXHUxMTZBClx1MTEwN1x1MTE2N1x1MTFBRlx1MTEwM1x1MTE2OQpcdTExMDdcdTExNjdcdTExQUZcdTExMDZcdTExNjdcdTExQkMKXHUxMTA3XHUxMTY3XHUxMUFGXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwN1x1MTE2N1x1MTFCQ1x1MTEwOVx1MTE3NVx1MTFBRgpcdTExMDdcdTExNjdcdTExQkNcdTExMEJcdTExNjFcdTExMDVcdTExNzUKXHUxMTA3XHUxMTY3XHUxMUJDXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwN1x1MTE2OVx1MTEwMFx1MTE2QVx1MTFBQgpcdTExMDdcdTExNjlcdTExMDJcdTExNjVcdTExMDlcdTExNzMKXHUxMTA3XHUxMTY5XHUxMTA1XHUxMTYxXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTEwN1x1MTE2OVx1MTEwNVx1MTE2MVx1MTFCNwpcdTExMDdcdTExNjlcdTExMDVcdTExNzNcdTExQjcKXHUxMTA3XHUxMTY5XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwN1x1MTE2OVx1MTEwQlx1MTE2MVx1MTFBQgpcdTExMDdcdTExNjlcdTExMENcdTExNjFcdTExMDBcdTExNzUKXHUxMTA3XHUxMTY5XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwN1x1MTE2OVx1MTEwQ1x1MTE2NVx1MTFBQgpcdTExMDdcdTExNjlcdTExMENcdTExNjlcdTExQUIKXHUxMTA3XHUxMTY5XHUxMTEwXHUxMTY5XHUxMUJDClx1MTEwN1x1MTE2OVx1MTExMVx1MTE2N1x1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDdcdTExNjlcdTExMTJcdTExNjVcdTExQjcKXHUxMTA3XHUxMTY5XHUxMUE4XHUxMTAzXHUxMTY5Clx1MTEwN1x1MTE2OVx1MTFBOFx1MTEwOVx1MTE2MQpcdTExMDdcdTExNjlcdTExQThcdTExMDlcdTExNkVcdTExQkNcdTExMEJcdTExNjEKXHUxMTA3XHUxMTY5XHUxMUE4XHUxMTA5XHUxMTczXHUxMUI4Clx1MTEwN1x1MTE2OVx1MTFBOVx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDdcdTExNjlcdTExQUJcdTExMDBcdTExNjdcdTExQThcdTExMENcdTExNjVcdTExQTgKXHUxMTA3XHUxMTY5XHUxMUFCXHUxMTA1XHUxMTYyClx1MTEwN1x1MTE2OVx1MTFBQlx1MTEwN1x1MTE2RQpcdTExMDdcdTExNjlcdTExQUJcdTExMDlcdTExNjEKXHUxMTA3XHUxMTY5XHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwN1x1MTE2OVx1MTFBQlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDdcdTExNjlcdTExQUJcdTExMENcdTExNzVcdTExQUYKXHUxMTA3XHUxMTY5XHUxMUFGXHUxMTExXHUxMTY2XHUxMUFCClx1MTEwN1x1MTE2OVx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMDdcdTExNjlcdTExQkNcdTExMENcdTExNzUKXHUxMTA3XHUxMTY5XHUxMUJDXHUxMTEwXHUxMTZFClx1MTEwN1x1MTE2RVx1MTEwMFx1MTE3M1x1MTFBQgpcdTExMDdcdTExNkVcdTExMDFcdTExNzNcdTExMDVcdTExNjVcdTExMEJcdTExNkVcdTExQjcKXHUxMTA3XHUxMTZFXHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwN1x1MTE2RVx1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwOVx1MTE2MVx1MTFBQgpcdTExMDdcdTExNkVcdTExMDZcdTExNkVcdTExQUIKXHUxMTA3XHUxMTZFXHUxMTA3XHUxMTZFXHUxMUFCClx1MTEwN1x1MTE2RVx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMDdcdTExNkVcdTExMDlcdTExNjFcdTExQkMKXHUxMTA3XHUxMTZFXHUxMTBCXHUxMTY1XHUxMUJGClx1MTEwN1x1MTE2RVx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDdcdTExNkVcdTExMENcdTExNjFcdTExQThcdTExMEJcdTExNkRcdTExQkMKXHUxMTA3XHUxMTZFXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwN1x1MTE2RVx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMDdcdTExNkVcdTExMENcdTExNjlcdTExQTgKXHUxMTA3XHUxMTZFXHUxMTBDXHUxMTc1XHUxMTA1XHUxMTY1XHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwN1x1MTE2RVx1MTEwRVx1MTE3NVx1MTFBQgpcdTExMDdcdTExNkVcdTExMTBcdTExNjFcdTExQTgKXHUxMTA3XHUxMTZFXHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwN1x1MTE2RVx1MTExMlx1MTE2Q1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDdcdTExNkVcdTExQThcdTExMDdcdTExNkUKXHUxMTA3XHUxMTZFXHUxMUE4XHUxMTEyXHUxMTYxXHUxMUFCClx1MTEwN1x1MTE2RVx1MTFBQlx1MTEwMlx1MTE2OQpcdTExMDdcdTExNkVcdTExQUJcdTExMDVcdTExNjNcdTExQkMKXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTA1XHUxMTc1Clx1MTEwN1x1MTE2RVx1MTFBQlx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDdcdTExNkVcdTExQUJcdTExMDlcdTExNjVcdTExQTgKXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTBCXHUxMTYzClx1MTEwN1x1MTE2RVx1MTFBQlx1MTEwQlx1MTE3MVx1MTEwMFx1MTE3NQpcdTExMDdcdTExNkVcdTExQUJcdTExMTFcdTExNzVcdTExQUYKXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTEyXHUxMTY5XHUxMUJDXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTEwN1x1MTE2RVx1MTFBRlx1MTEwMFx1MTE2OVx1MTEwMFx1MTE3NQpcdTExMDdcdTExNkVcdTExQUZcdTExMDBcdTExNkEKXHUxMTA3XHUxMTZFXHUxMUFGXHUxMTAwXHUxMTZEClx1MTEwN1x1MTE2RVx1MTFBRlx1MTEwMVx1MTE2OVx1MTFCRQpcdTExMDdcdTExNkVcdTExQUZcdTExMDZcdTExNjFcdTExQUIKXHUxMTA3XHUxMTZFXHUxMUFGXHUxMTA3XHUxMTY1XHUxMUI4Clx1MTEwN1x1MTE2RVx1MTFBRlx1MTEwN1x1MTE3NVx1MTFCRQpcdTExMDdcdTExNkVcdTExQUZcdTExMEJcdTExNjFcdTExQUIKXHUxMTA3XHUxMTZFXHUxMUFGXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTc1XHUxMUE4Clx1MTEwN1x1MTE2RVx1MTFBRlx1MTExMlx1MTE2Mlx1MTFCQwpcdTExMDdcdTExNzNcdTExMDVcdTExNjJcdTExQUJcdTExMDNcdTExNzMKXHUxMTA3XHUxMTc1XHUxMTAwXHUxMTczXHUxMUE4Clx1MTEwN1x1MTE3NVx1MTEwMlx1MTE2MVx1MTFBQgpcdTExMDdcdTExNzVcdTExMDJcdTExNzVcdTExQUYKXHUxMTA3XHUxMTc1XHUxMTAzXHUxMTZFXHUxMUFGXHUxMTAwXHUxMTc1Clx1MTEwN1x1MTE3NVx1MTEwM1x1MTE3NVx1MTEwQlx1MTE2OQpcdTExMDdcdTExNzVcdTExMDVcdTExNjlcdTExMDlcdTExNjkKXHUxMTA3XHUxMTc1XHUxMTA2XHUxMTYxXHUxMUFCClx1MTEwN1x1MTE3NVx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDdcdTExNzVcdTExMDZcdTExNzVcdTExQUYKXHUxMTA3XHUxMTc1XHUxMTA3XHUxMTYxXHUxMTA1XHUxMTYxXHUxMUI3Clx1MTEwN1x1MTE3NVx1MTEwN1x1MTE3NVx1MTFCN1x1MTEwN1x1MTE2MVx1MTFCOApcdTExMDdcdTExNzVcdTExMDlcdTExNjFcdTExQkMKXHUxMTA3XHUxMTc1XHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwN1x1MTE3NVx1MTEwQlx1MTE3Mlx1MTFBRgpcdTExMDdcdTExNzVcdTExMENcdTExNkVcdTExQkMKXHUxMTA3XHUxMTc1XHUxMTEwXHUxMTYxXHUxMTA2XHUxMTc1XHUxMUFCClx1MTEwN1x1MTE3NVx1MTExMVx1MTE2MVx1MTFBQgpcdTExMDdcdTExNzVcdTExQUZcdTExMDNcdTExNzVcdTExQkMKXHUxMTA3XHUxMTc1XHUxMUJBXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwN1x1MTE3NVx1MTFCQVx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2RVx1MTFBRgpcdTExMDdcdTExNzVcdTExQkFcdTExMENcdTExNkVcdTExQUZcdTExMDBcdTExNzUKXHUxMTA3XHUxMTc1XHUxMUJFXHUxMTAxXHUxMTYxXHUxMUFGClx1MTEwOFx1MTE2MVx1MTFBRlx1MTEwMFx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDhcdTExNjFcdTExQUZcdTExMDVcdTExNjIKXHUxMTA4XHUxMTYxXHUxMUFGXHUxMTA1XHUxMTc1Clx1MTEwOVx1MTE2MVx1MTEwMFx1MTE2NVx1MTFBQgpcdTExMDlcdTExNjFcdTExMDBcdTExNjhcdTExMENcdTExNjVcdTExQUYKXHUxMTA5XHUxMTYxXHUxMTAyXHUxMTYxXHUxMTBCXHUxMTc1Clx1MTEwOVx1MTE2MVx1MTEwMlx1MTE2M1x1MTFCQwpcdTExMDlcdTExNjFcdTExMDVcdTExNjFcdTExQjcKXHUxMTA5XHUxMTYxXHUxMTA1XHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2MVx1MTEwNVx1MTE3NVx1MTFCOApcdTExMDlcdTExNjFcdTExMDZcdTExNjlcdTExMDJcdTExNzVcdTExQjcKXHUxMTA5XHUxMTYxXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwN1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNjFcdTExMDlcdTExNjFcdTExQkMKXHUxMTA5XHUxMTYxXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTEyXHUxMTZBXHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMDlcdTExNjFcdTExMDlcdTExNzNcdTExQjcKXHUxMTA5XHUxMTYxXHUxMTA5XHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwQlx1MTE2NVx1MTFCOApcdTExMDlcdTExNjFcdTExMEJcdTExNkRcdTExQkMKXHUxMTA5XHUxMTYxXHUxMTBCXHUxMTZGXHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNjFcdTExMENcdTExNjVcdTExQUIKXHUxMTA5XHUxMTYxXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwOVx1MTE2MVx1MTEwRVx1MTE2OVx1MTFBQgpcdTExMDlcdTExNjFcdTExMEVcdTExNkVcdTExQUJcdTExMDBcdTExNzUKXHUxMTA5XHUxMTYxXHUxMTEwXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2MVx1MTExMFx1MTE2RVx1MTEwNVx1MTE3NQpcdTExMDlcdTExNjFcdTExMTJcdTExNzNcdTExQUYKXHUxMTA5XHUxMTYxXHUxMUFCXHUxMTAwXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2MVx1MTFBQlx1MTEwN1x1MTE2RVx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE2QQpcdTExMDlcdTExNjFcdTExQUJcdTExMEJcdTExNjVcdTExQjgKXHUxMTA5XHUxMTYxXHUxMUFCXHUxMTBFXHUxMTYyXHUxMUE4Clx1MTEwOVx1MTE2MVx1MTFBRlx1MTEwNVx1MTE3NVx1MTFCNwpcdTExMDlcdTExNjFcdTExQUZcdTExMEJcdTExNzVcdTExQUIKXHUxMTA5XHUxMTYxXHUxMUFGXHUxMTBEXHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE2MVx1MTFCN1x1MTEwMFx1MTE2OFx1MTExMFx1MTE2MVx1MTFCQwpcdTExMDlcdTExNjFcdTExQjdcdTExMDBcdTExNkVcdTExQTgKXHUxMTA5XHUxMTYxXHUxMUI3XHUxMTA5XHUxMTc1XHUxMUI4Clx1MTEwOVx1MTE2MVx1MTFCN1x1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMDlcdTExNjFcdTExQjdcdTExMEVcdTExNjlcdTExQUIKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTAwXHUxMTZBXHUxMUFCClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDlcdTExNjFcdTExQkNcdTExMDNcdTExNjIKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTA1XHUxMTcyClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTFBQlx1MTEwMFx1MTE3NQpcdTExMDlcdTExNjFcdTExQkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2NVx1MTFCOApcdTExMDlcdTExNjFcdTExQkNcdTExMEJcdTExNzVcdTExQUIKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTBDXHUxMTYxClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDlcdTExNjFcdTExQkNcdTExMEVcdTExNjUKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTBFXHUxMTZFClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTExMFx1MTE2MgpcdTExMDlcdTExNjFcdTExQkNcdTExMTFcdTExNkQKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwOVx1MTE2MVx1MTFCQ1x1MTExMlx1MTE2QVx1MTFCQwpcdTExMDlcdTExNjJcdTExMDdcdTExNjdcdTExQTgKXHUxMTA5XHUxMTYyXHUxMUE4XHUxMTAxXHUxMTYxXHUxMUFGClx1MTEwOVx1MTE2Mlx1MTFBOFx1MTEwQlx1MTE2N1x1MTFBQlx1MTExMVx1MTE3NVx1MTFBRgpcdTExMDlcdTExNjJcdTExQkNcdTExMDBcdTExNjFcdTExQTgKXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTA2XHUxMTY3XHUxMUJDClx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNjJcdTExQkNcdTExMDdcdTExNjFcdTExQkNcdTExMDlcdTExNjlcdTExQkMKXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTEwOVx1MTE2NVx1MTFBQgpcdTExMDlcdTExNjJcdTExQkNcdTExMDlcdTExNzVcdTExQUIKXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTExMlx1MTE2QVx1MTFBRgpcdTExMDlcdTExNjVcdTExMDVcdTExNjFcdTExQjgKXHUxMTA5XHUxMTY1XHUxMTA1XHUxMTczXHUxMUFCClx1MTEwOVx1MTE2NVx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDlcdTExNjVcdTExMDZcdTExNzVcdTExQUIKXHUxMTA5XHUxMTY1XHUxMTA3XHUxMTc1XHUxMTA5XHUxMTczClx1MTEwOVx1MTE2NVx1MTEwQlx1MTE2M1x1MTFCQwpcdTExMDlcdTExNjVcdTExMEJcdTExNkVcdTExQUYKXHUxMTA5XHUxMTY1XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwOVx1MTE2NVx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDlcdTExNjVcdTExMERcdTExNjlcdTExQTgKXHUxMTA5XHUxMTY1XHUxMTBGXHUxMTczXHUxMUFGClx1MTEwOVx1MTE2NVx1MTFBOFx1MTEwOVx1MTE2MQpcdTExMDlcdTExNjVcdTExQThcdTExMEJcdTExNzIKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTAwXHUxMTY1Clx1MTEwOVx1MTE2NVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNjVcdTExQUJcdTExMDdcdTExNjIKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFBQlx1MTEwOVx1MTE2RQpcdTExMDlcdTExNjVcdTExQUJcdTExMEJcdTExNkZcdTExQUIKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBQgpcdTExMDlcdTExNjVcdTExQUJcdTExMTBcdTExNjJcdTExQTgKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTExXHUxMTZFXHUxMUJDXHUxMTAwXHUxMTc1Clx1MTEwOVx1MTE2NVx1MTFBRlx1MTEwMFx1MTE2NVx1MTEwQ1x1MTE3NQpcdTExMDlcdTExNjVcdTExQUZcdTExMDJcdTExNjFcdTExQUYKXHUxMTA5XHUxMTY1XHUxMUFGXHUxMTA1XHUxMTY1XHUxMUJDXHUxMTEwXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFBRlx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDlcdTExNjVcdTExQUZcdTExMDZcdTExNkVcdTExQUIKXHUxMTA5XHUxMTY1XHUxMUFGXHUxMTA5XHUxMTYxClx1MTEwOVx1MTE2NVx1MTFBRlx1MTEwQlx1MTE2MVx1MTFBOFx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMDlcdTExNjVcdTExQUZcdTExMEVcdTExNzUKXHUxMTA5XHUxMTY1XHUxMUFGXHUxMTEwXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFCOFx1MTEwQVx1MTE3NQpcdTExMDlcdTExNjVcdTExQkNcdTExMDBcdTExNjlcdTExQkMKXHUxMTA5XHUxMTY1XHUxMUJDXHUxMTAzXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFCQ1x1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDlcdTExNjVcdTExQkNcdTExMDdcdTExNjdcdTExQUYKXHUxMTA5XHUxMTY1XHUxMUJDXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwOVx1MTE2NVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNjVcdTExQkNcdTExMENcdTExNjVcdTExQTgKXHUxMTA5XHUxMTY1XHUxMUJDXHUxMTBDXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2NVx1MTFCQ1x1MTExMlx1MTE2MVx1MTFCNwpcdTExMDlcdTExNjZcdTExMDBcdTExNzNcdTExQjcKXHUxMTA5XHUxMTY2XHUxMTA2XHUxMTc1XHUxMTAyXHUxMTYxClx1MTEwOVx1MTE2Nlx1MTEwOVx1MTE2MVx1MTFCQwpcdTExMDlcdTExNjZcdTExMEJcdTExNkZcdTExQUYKXHUxMTA5XHUxMTY2XHUxMTBDXHUxMTY5XHUxMUJDXHUxMTAzXHUxMTYyXHUxMTBCXHUxMTZBXHUxMUJDClx1MTEwOVx1MTE2Nlx1MTExMFx1MTE2MVx1MTFBOApcdTExMDlcdTExNjZcdTExQUJcdTExMTBcdTExNjUKXHUxMTA5XHUxMTY2XHUxMUFCXHUxMTEwXHUxMTc1XHUxMTA2XHUxMTc1XHUxMTEwXHUxMTY1Clx1MTEwOVx1MTE2Nlx1MTFCQVx1MTEwRFx1MTE2MgpcdTExMDlcdTExNjlcdTExMDBcdTExNzJcdTExMDZcdTExNjkKXHUxMTA5XHUxMTY5XHUxMTAwXHUxMTczXHUxMUE4XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwOVx1MTE2OVx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDlcdTExNjlcdTExMDJcdTExNjFcdTExMDBcdTExNzUKXHUxMTA5XHUxMTY5XHUxMTAyXHUxMTY3XHUxMUFCClx1MTEwOVx1MTE2OVx1MTEwM1x1MTE3M1x1MTFBOApcdTExMDlcdTExNjlcdTExMDZcdTExNjFcdTExQkMKXHUxMTA5XHUxMTY5XHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwOVx1MTE2OVx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMDlcdTExNjlcdTExMDlcdTExNjlcdTExQTgKXHUxMTA5XHUxMTY5XHUxMTBCXHUxMTYxXHUxMTAwXHUxMTZBClx1MTEwOVx1MTE2OVx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDlcdTExNjlcdTExMEJcdTExNkZcdTExQUIKXHUxMTA5XHUxMTY5XHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwOVx1MTE2OVx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTExMlx1MTE3NQpcdTExMDlcdTExNjlcdTExMENcdTExNzVcdTExMTFcdTExNkVcdTExQjcKXHUxMTA5XHUxMTY5XHUxMTBDXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2OVx1MTExMVx1MTE2RVx1MTFCQwpcdTExMDlcdTExNjlcdTExMTJcdTExNjdcdTExQkMKXHUxMTA5XHUxMTY5XHUxMUE4XHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwOVx1MTE2OVx1MTFBOFx1MTEwM1x1MTE2OQpcdTExMDlcdTExNjlcdTExQThcdTExMEJcdTExNjlcdTExQkEKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTAwXHUxMTYxXHUxMTA1XHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTEwMFx1MTE3NVx1MTFBRgpcdTExMDlcdTExNjlcdTExQUJcdTExMDJcdTExNjcKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTAyXHUxMTc1XHUxMUI3Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTEwM1x1MTE3M1x1MTFCQwpcdTExMDlcdTExNjlcdTExQUJcdTExMDZcdTExNjlcdTExQTgKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTA4XHUxMTY3XHUxMUE4Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTEwOVx1MTE3NVx1MTFBRgpcdTExMDlcdTExNjlcdTExQUJcdTExMENcdTExNzVcdTExQUYKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTEwXHUxMTY5XHUxMUI4Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTExMlx1MTE2MgpcdTExMDlcdTExNjlcdTExQUZcdTExMENcdTExNzVcdTExQThcdTExMTJcdTExNzUKXHUxMTA5XHUxMTY5XHUxMUI3XHUxMTBBXHUxMTc1Clx1MTEwOVx1MTE2OVx1MTFCQ1x1MTEwQlx1MTE2MVx1MTEwQ1x1MTE3NQpcdTExMDlcdTExNjlcdTExQkNcdTExMEJcdTExNzUKXHUxMTA5XHUxMTY5XHUxMUJDXHUxMTExXHUxMTY3XHUxMUFCClx1MTEwOVx1MTE2Q1x1MTEwMFx1MTE2OVx1MTEwMFx1MTE3NQpcdTExMDlcdTExNkRcdTExMTFcdTExNzVcdTExQkMKXHUxMTA5XHUxMTZFXHUxMTAwXHUxMTY1XHUxMUFCClx1MTEwOVx1MTE2RVx1MTEwMlx1MTE2N1x1MTFBQgpcdTExMDlcdTExNkVcdTExMDNcdTExNjFcdTExQUIKXHUxMTA5XHUxMTZFXHUxMTAzXHUxMTY5XHUxMUJBXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwOVx1MTE2RVx1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDlcdTExNkVcdTExMDZcdTExNjdcdTExQUIKXHUxMTA5XHUxMTZFXHUxMTA2XHUxMTY3XHUxMUJDClx1MTEwOVx1MTE2RVx1MTEwN1x1MTE2MVx1MTFBOApcdTExMDlcdTExNkVcdTExMDlcdTExNjFcdTExQkMKXHUxMTA5XHUxMTZFXHUxMTA5XHUxMTY1XHUxMUE4Clx1MTEwOVx1MTE2RVx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMDlcdTExNkVcdTExMDlcdTExNzVcdTExMDVcdTExNjkKXHUxMTA5XHUxMTZFXHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwOVx1MTE2RVx1MTEwQlx1MTE2N1x1MTFCNwpcdTExMDlcdTExNkVcdTExMEJcdTExNjdcdTExQkMKXHUxMTA5XHUxMTZFXHUxMTBCXHUxMTc1XHUxMUI4Clx1MTEwOVx1MTE2RVx1MTEwQ1x1MTE2RVx1MTFBQgpcdTExMDlcdTExNkVcdTExMENcdTExNzVcdTExQjgKXHUxMTA5XHUxMTZFXHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwOVx1MTE2RVx1MTEwRlx1MTE2NVx1MTFCQQpcdTExMDlcdTExNkVcdTExMTFcdTExNzVcdTExQUYKXHUxMTA5XHUxMTZFXHUxMTEyXHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE2RVx1MTExMlx1MTE2NVx1MTFCN1x1MTEwOVx1MTE2Mlx1MTFCQwpcdTExMDlcdTExNkVcdTExMTJcdTExNkFcdTExMDBcdTExNzUKXHUxMTA5XHUxMTZFXHUxMUE4XHUxMTAyXHUxMTY3Clx1MTEwOVx1MTE2RVx1MTFBOFx1MTEwOVx1MTE2OQpcdTExMDlcdTExNkVcdTExQThcdTExMENcdTExNjYKXHUxMTA5XHUxMTZFXHUxMUFCXHUxMTAwXHUxMTYxXHUxMUFCClx1MTEwOVx1MTE2RVx1MTFBQlx1MTEwOVx1MTE2NQpcdTExMDlcdTExNkVcdTExQUJcdTExMDlcdTExNkUKXHUxMTA5XHUxMTZFXHUxMUFCXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTAwXHUxMTYxXHUxMUFCClx1MTEwOVx1MTE2RVx1MTFBQlx1MTEwQlx1MTE3MQpcdTExMDlcdTExNkVcdTExQUVcdTExMDBcdTExNjFcdTExMDVcdTExNjFcdTExQTgKXHUxMTA5XHUxMTZFXHUxMUFGXHUxMTA3XHUxMTY3XHUxMUJDClx1MTEwOVx1MTE2RVx1MTFBRlx1MTEwQ1x1MTE3NVx1MTFCOApcdTExMDlcdTExNkVcdTExQkFcdTExMENcdTExNjEKXHUxMTA5XHUxMTczXHUxMTAyXHUxMTc1XHUxMUI3Clx1MTEwOVx1MTE3M1x1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNzNcdTExMDlcdTExNzNcdTExMDVcdTExNjkKXHUxMTA5XHUxMTczXHUxMTA5XHUxMTczXHUxMUJDClx1MTEwOVx1MTE3M1x1MTEwQlx1MTE3MFx1MTExMFx1MTE2NQpcdTExMDlcdTExNzNcdTExMEJcdTExNzFcdTExMEVcdTExNzUKXHUxMTA5XHUxMTczXHUxMTBGXHUxMTY2XHUxMTBCXHUxMTc1XHUxMTEwXHUxMTczClx1MTEwOVx1MTE3M1x1MTExMFx1MTE3Mlx1MTEwM1x1MTE3NVx1MTEwQlx1MTE2OQpcdTExMDlcdTExNzNcdTExMTBcdTExNzNcdTExMDVcdTExNjZcdTExMDlcdTExNzMKXHUxMTA5XHUxMTczXHUxMTExXHUxMTY5XHUxMTBFXHUxMTczClx1MTEwOVx1MTE3M1x1MTFBRlx1MTEwRFx1MTE2NVx1MTFBOApcdTExMDlcdTExNzNcdTExQUZcdTExMTFcdTExNzNcdTExQjcKXHUxMTA5XHUxMTczXHUxMUI4XHUxMTAwXHUxMTZBXHUxMUFCClx1MTEwOVx1MTE3M1x1MTFCOFx1MTEwMFx1MTE3NQpcdTExMDlcdTExNzNcdTExQkNcdTExMDBcdTExNjJcdTExQTgKXHUxMTA5XHUxMTczXHUxMUJDXHUxMTA1XHUxMTc1Clx1MTEwOVx1MTE3M1x1MTFCQ1x1MTEwN1x1MTE2RQpcdTExMDlcdTExNzNcdTExQkNcdTExMEJcdTExNkRcdTExQkNcdTExMEVcdTExNjEKXHUxMTA5XHUxMTczXHUxMUJDXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwOVx1MTE3NVx1MTEwMFx1MTE2MVx1MTFBOApcdTExMDlcdTExNzVcdTExMDBcdTExNjFcdTExQUIKXHUxMTA5XHUxMTc1XHUxMTAwXHUxMTY5XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwRVx1MTE3NQpcdTExMDlcdTExNzVcdTExMDJcdTExNjFcdTExMDVcdTExNzVcdTExMEJcdTExNjkKXHUxMTA5XHUxMTc1XHUxMTAzXHUxMTYyXHUxMUE4Clx1MTEwOVx1MTE3NVx1MTEwNVx1MTE3NVx1MTEwQ1x1MTE3MwpcdTExMDlcdTExNzVcdTExMDZcdTExNjZcdTExQUJcdTExMTBcdTExNzMKXHUxMTA5XHUxMTc1XHUxMTA2XHUxMTc1XHUxMUFCClx1MTEwOVx1MTE3NVx1MTEwN1x1MTE2RVx1MTEwNlx1MTE2OQpcdTExMDlcdTExNzVcdTExMDlcdTExNjVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMTA5XHUxMTY1XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwOVx1MTE3M1x1MTExMFx1MTE2Nlx1MTFCNwpcdTExMDlcdTExNzVcdTExMEJcdTExNjFcdTExMDdcdTExNjVcdTExMENcdTExNzUKXHUxMTA5XHUxMTc1XHUxMTBCXHUxMTY1XHUxMTA2XHUxMTY1XHUxMTAyXHUxMTc1Clx1MTEwOVx1MTE3NVx1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMDlcdTExNzVcdTExMEJcdTExNzVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwQ1x1MTE2MVx1MTFBOApcdTExMDlcdTExNzVcdTExMENcdTExNjFcdTExQkMKXHUxMTA5XHUxMTc1XHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDlcdTExNzVcdTExMENcdTExNkVcdTExQkMKXHUxMTA5XHUxMTc1XHUxMTBDXHUxMTczXHUxMUFCClx1MTEwOVx1MTE3NVx1MTEwQ1x1MTE3NVx1MTFCOApcdTExMDlcdTExNzVcdTExMEVcdTExNjVcdTExQkMKXHUxMTA5XHUxMTc1XHUxMTEyXHUxMTYxXHUxMUI4Clx1MTEwOVx1MTE3NVx1MTExMlx1MTE2NVx1MTFCNwpcdTExMDlcdTExNzVcdTExQThcdTExMDBcdTExNkUKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTAwXHUxMTc1Clx1MTEwOVx1MTE3NVx1MTFBOFx1MTEwM1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNzVcdTExQThcdTExMDVcdTExNjNcdTExQkMKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTA1XHUxMTZEXHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwOVx1MTE3NVx1MTFBOFx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNzVcdTExQThcdTExMDhcdTExNjFcdTExQkMKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTA5XHUxMTYxClx1MTEwOVx1MTE3NVx1MTFBOFx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTExMlx1MTE2QVx1MTFBRgpcdTExMDlcdTExNzVcdTExQThcdTExMEVcdTExNjkKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTEwXHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE3NVx1MTFBOFx1MTExMVx1MTE2RVx1MTFCNwpcdTExMDlcdTExNzVcdTExQUJcdTExMDBcdTExNjkKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTAwXHUxMTcyClx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwMlx1MTE2N1x1MTFCNwpcdTExMDlcdTExNzVcdTExQUJcdTExMDZcdTExNkVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTA3XHUxMTYxXHUxMUFGClx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwN1x1MTE3NQpcdTExMDlcdTExNzVcdTExQUJcdTExMDlcdTExNjEKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTA5XHUxMTY2Clx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDlcdTExNzVcdTExQUJcdTExMENcdTExNjZcdTExMTFcdTExNkVcdTExQjcKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTBFXHUxMTY1XHUxMUJDClx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwRVx1MTE2NgpcdTExMDlcdTExNzVcdTExQUJcdTExMTJcdTExNkEKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTAwXHUxMTYxXHUxMUI3Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwMlx1MTE2MgpcdTExMDlcdTExNzVcdTExQUZcdTExMDVcdTExNjdcdTExQTgKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTA1XHUxMTY4Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMDlcdTExNzVcdTExQUZcdTExMDlcdTExNkUKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTA5XHUxMTczXHUxMUI4Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwOVx1MTE3NQpcdTExMDlcdTExNzVcdTExQUZcdTExMENcdTExNjFcdTExQkMKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwQ1x1MTE3NVx1MTFBRlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDlcdTExNzVcdTExQUZcdTExMEVcdTExNjVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTBFXHUxMTY2Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwRlx1MTE2NVx1MTFCQQpcdTExMDlcdTExNzVcdTExQUZcdTExMTBcdTExNjIKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTExXHUxMTYyClx1MTEwOVx1MTE3NVx1MTFBRlx1MTExMlx1MTE2NVx1MTFCNwpcdTExMDlcdTExNzVcdTExQUZcdTExMTJcdTExNjdcdTExQUIKXHUxMTA5XHUxMTc1XHUxMUI3XHUxMTA1XHUxMTc1Clx1MTEwOVx1MTE3NVx1MTFCN1x1MTEwN1x1MTE2RVx1MTEwNVx1MTE3M1x1MTFCNwpcdTExMDlcdTExNzVcdTExQjdcdTExMDlcdTExNjEKXHUxMTA5XHUxMTc1XHUxMUI3XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE3NVx1MTFCN1x1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMDlcdTExNzVcdTExQjdcdTExMTFcdTExNjFcdTExQUIKXHUxMTBBXHUxMTYxXHUxMUJDXHUxMTAzXHUxMTZFXHUxMUJDXHUxMTBCXHUxMTc1Clx1MTEwQVx1MTE3NVx1MTEwNVx1MTE3M1x1MTFCNwpcdTExMEFcdTExNzVcdTExMEJcdTExNjFcdTExQkEKXHUxMTBCXHUxMTYxXHUxMTAwXHUxMTYxXHUxMTBBXHUxMTc1Clx1MTEwQlx1MTE2MVx1MTEwMlx1MTE2MVx1MTEwQlx1MTE2RVx1MTFBQlx1MTEwOVx1MTE2NQpcdTExMEJcdTExNjFcdTExMDNcdTExNzNcdTExMDJcdTExNzVcdTExQjcKXHUxMTBCXHUxMTYxXHUxMTAzXHUxMTczXHUxMUFGClx1MTEwQlx1MTE2MVx1MTEwOVx1MTE3MVx1MTEwQlx1MTE2RVx1MTFCNwpcdTExMEJcdTExNjFcdTExMDlcdTExNzNcdTExMTFcdTExNjFcdTExQUZcdTExMTBcdTExNzMKXHUxMTBCXHUxMTYxXHUxMTA5XHUxMTc1XHUxMTBCXHUxMTYxClx1MTEwQlx1MTE2MVx1MTEwQlx1MTE2RVx1MTFBRlx1MTEwNVx1MTE2NQpcdTExMEJcdTExNjFcdTExMENcdTExNjVcdTExMEFcdTExNzUKXHUxMTBCXHUxMTYxXHUxMTBDXHUxMTZFXHUxMUI3XHUxMTA2XHUxMTYxClx1MTEwQlx1MTE2MVx1MTEwQ1x1MTE3NVx1MTFBOApcdTExMEJcdTExNjFcdTExMEVcdTExNzVcdTExQjcKXHUxMTBCXHUxMTYxXHUxMTExXHUxMTYxXHUxMTEwXHUxMTczClx1MTEwQlx1MTE2MVx1MTExMVx1MTE3M1x1MTEwNVx1MTE3NVx1MTEwRlx1MTE2MQpcdTExMEJcdTExNjFcdTExMTFcdTExNzNcdTExQjcKXHUxMTBCXHUxMTYxXHUxMTEyXHUxMTY5XHUxMUI4Clx1MTEwQlx1MTE2MVx1MTExMlx1MTE3M1x1MTFBQgpcdTExMEJcdTExNjFcdTExQThcdTExMDBcdTExNzUKXHUxMTBCXHUxMTYxXHUxMUE4XHUxMTA2XHUxMTY5XHUxMUJDClx1MTEwQlx1MTE2MVx1MTFBOFx1MTEwOVx1MTE2RQpcdTExMEJcdTExNjFcdTExQUJcdTExMDBcdTExNjIKXHUxMTBCXHUxMTYxXHUxMUFCXHUxMTAwXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2QQpcdTExMEJcdTExNjFcdTExQUJcdTExMDJcdTExNjIKXHUxMTBCXHUxMTYxXHUxMUFCXHUxMTAyXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE2MVx1MTFBQlx1MTEwM1x1MTE2OVx1MTFCQwpcdTExMEJcdTExNjFcdTExQUJcdTExMDdcdTExNjFcdTExQkMKXHUxMTBCXHUxMTYxXHUxMUFCXHUxMTA3XHUxMTZFClx1MTEwQlx1MTE2MVx1MTFBQlx1MTEwQ1x1MTE2RQpcdTExMEJcdTExNjFcdTExQUZcdTExMDVcdTExNkVcdTExMDZcdTExNzVcdTExMDJcdTExNzJcdTExQjcKXHUxMTBCXHUxMTYxXHUxMUFGXHUxMTBGXHUxMTY5XHUxMTBCXHUxMTY5XHUxMUFGClx1MTEwQlx1MTE2MVx1MTFCN1x1MTEwOVx1MTE3NQpcdTExMEJcdTExNjFcdTExQjdcdTExMEZcdTExNjVcdTExQkEKXHUxMTBCXHUxMTYxXHUxMUI4XHUxMTA1XHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE2MVx1MTFDMVx1MTEwMlx1MTE2MVx1MTFBRgpcdTExMEJcdTExNjFcdTExQzFcdTExMDZcdTExNkVcdTExQUIKXHUxMTBCXHUxMTYyXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2Mlx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMEJcdTExNjJcdTExQThcdTExMDlcdTExNkUKXHUxMTBCXHUxMTYyXHUxMUFGXHUxMTA3XHUxMTY1XHUxMUI3Clx1MTEwQlx1MTE2M1x1MTEwMFx1MTE2MVx1MTFBQgpcdTExMEJcdTExNjNcdTExMDNcdTExNjFcdTExQUIKXHUxMTBCXHUxMTYzXHUxMTBCXHUxMTY5XHUxMUJDClx1MTEwQlx1MTE2M1x1MTFBOFx1MTEwMFx1MTE2MVx1MTFBQgpcdTExMEJcdTExNjNcdTExQThcdTExMDBcdTExNkVcdTExQTgKXHUxMTBCXHUxMTYzXHUxMUE4XHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwQlx1MTE2M1x1MTFBOFx1MTEwOVx1MTE2RQpcdTExMEJcdTExNjNcdTExQThcdTExMENcdTExNjVcdTExQjcKXHUxMTBCXHUxMTYzXHUxMUE4XHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwQlx1MTE2M1x1MTFBOFx1MTExMlx1MTE2OVx1MTFBQlx1MTEwMlx1MTE2NwpcdTExMEJcdTExNjNcdTExQkNcdTExMDJcdTExNjdcdTExQjcKXHUxMTBCXHUxMTYzXHUxMUJDXHUxMTA1XHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE2M1x1MTFCQ1x1MTEwNlx1MTE2MVx1MTFBRgpcdTExMEJcdTExNjNcdTExQkNcdTExMDdcdTExNjJcdTExMEVcdTExNkUKXHUxMTBCXHUxMTYzXHUxMUJDXHUxMTBDXHUxMTZFClx1MTEwQlx1MTE2M1x1MTFCQ1x1MTExMVx1MTE2MQpcdTExMEJcdTExNjVcdTExMDNcdTExNkVcdTExQjcKXHUxMTBCXHUxMTY1XHUxMTA1XHUxMTY3XHUxMTBCXHUxMTZFXHUxMUI3Clx1MTEwQlx1MTE2NVx1MTEwNVx1MTE3M1x1MTFBQgpcdTExMEJcdTExNjVcdTExMENcdTExNjZcdTExQkFcdTExMDdcdTExNjFcdTExQjcKXHUxMTBCXHUxMTY1XHUxMTBEXHUxMTYyXHUxMUJCXHUxMTAzXHUxMTczXHUxMUFCClx1MTEwQlx1MTE2NVx1MTEwRFx1MTE2NVx1MTEwM1x1MTE2MVx1MTEwMFx1MTE2MQpcdTExMEJcdTExNjVcdTExMERcdTExNjVcdTExQUJcdTExMENcdTExNzUKXHUxMTBCXHUxMTY1XHUxMUFCXHUxMTAyXHUxMTc1Clx1MTEwQlx1MTE2NVx1MTFBQlx1MTEwM1x1MTE2NVx1MTFBOApcdTExMEJcdTExNjVcdTExQUJcdTExMDVcdTExNjlcdTExQUIKXHUxMTBCXHUxMTY1XHUxMUFCXHUxMTBCXHUxMTY1Clx1MTEwQlx1MTE2NVx1MTFBRlx1MTEwMFx1MTE2RVx1MTFBRgpcdTExMEJcdTExNjVcdTExQUZcdTExMDVcdTExNzNcdTExQUIKXHUxMTBCXHUxMTY1XHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2NVx1MTFBRlx1MTExMVx1MTE3NVx1MTFCQQpcdTExMEJcdTExNjVcdTExQjdcdTExMDZcdTExNjEKXHUxMTBCXHUxMTY1XHUxMUI4XHUxMTA2XHUxMTZFClx1MTEwQlx1MTE2NVx1MTFCOFx1MTEwQ1x1MTE2OVx1MTFCQwpcdTExMEJcdTExNjVcdTExQjhcdTExMEVcdTExNjYKXHUxMTBCXHUxMTY1XHUxMUJDXHUxMTAzXHUxMTY1XHUxMUJDXHUxMTBCXHUxMTc1Clx1MTEwQlx1MTE2NVx1MTFCQ1x1MTEwNlx1MTE2MVx1MTFCQwpcdTExMEJcdTExNjVcdTExQkNcdTExMTBcdTExNjVcdTExMDVcdTExNzUKXHUxMTBCXHUxMTY1XHUxMUJEXHUxMTAwXHUxMTczXHUxMTBDXHUxMTY2Clx1MTEwQlx1MTE2Nlx1MTEwMlx1MTE2NVx1MTEwQ1x1MTE3NQpcdTExMEJcdTExNjZcdTExMEJcdTExNjVcdTExMEZcdTExNjVcdTExQUIKXHUxMTBCXHUxMTY2XHUxMUFCXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwMFx1MTE2NVx1MTFBQgpcdTExMEJcdTExNjdcdTExMDBcdTExNjlcdTExMDlcdTExNjJcdTExQkMKXHUxMTBCXHUxMTY3XHUxMTAwXHUxMTZBXHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwMFx1MTE2RVx1MTFBQgpcdTExMEJcdTExNjdcdTExMDBcdTExNkZcdTExQUIKXHUxMTBCXHUxMTY3XHUxMTAzXHUxMTYyXHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwQlx1MTE2N1x1MTEwM1x1MTE2NVx1MTFCMgpcdTExMEJcdTExNjdcdTExMDNcdTExNjlcdTExQkNcdTExMDlcdTExNjJcdTExQkMKXHUxMTBCXHUxMTY3XHUxMTAzXHUxMTczXHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwNVx1MTE2OVx1MTFBQgpcdTExMEJcdTExNjdcdTExMDVcdTExNzNcdTExQjcKXHUxMTBCXHUxMTY3XHUxMTA5XHUxMTY1XHUxMUJBClx1MTEwQlx1MTE2N1x1MTEwOVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNjdcdTExMEJcdTExNkFcdTExQkMKXHUxMTBCXHUxMTY3XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwQ1x1MTE2NVx1MTFBQlx1MTExMlx1MTE3NQpcdTExMEJcdTExNjdcdTExMENcdTExNzVcdTExQThcdTExMEJcdTExNkZcdTExQUIKXHUxMTBCXHUxMTY3XHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwQlx1MTE2N1x1MTExMlx1MTE2Mlx1MTFCQwpcdTExMEJcdTExNjdcdTExQThcdTExMDlcdTExNjEKXHUxMTBCXHUxMTY3XHUxMUE4XHUxMTA5XHUxMTc1Clx1MTEwQlx1MTE2N1x1MTFBOFx1MTExMlx1MTE2MVx1MTFBRgpcdTExMEJcdTExNjdcdTExQUJcdTExMDBcdTExNjdcdTExQUYKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTAwXHUxMTZFClx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwMFx1MTE3M1x1MTFBOApcdTExMEJcdTExNjdcdTExQUJcdTExMDBcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTA1XHUxMTYxXHUxMUE4Clx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMEJcdTExNjdcdTExQUJcdTExMDlcdTExNjYKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwOVx1MTE3M1x1MTFCOApcdTExMEJcdTExNjdcdTExQUJcdTExMEJcdTExNjIKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTBCXHUxMTY4XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMEJcdTExNjdcdTExQUJcdTExMENcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTBDXHUxMTZFClx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwRVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNjdcdTExQUJcdTExMTFcdTExNzVcdTExQUYKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTEyXHUxMTYxXHUxMUI4Clx1MTEwQlx1MTE2N1x1MTFBQlx1MTExMlx1MTE3MgpcdTExMEJcdTExNjdcdTExQUZcdTExMDBcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUFGXHUxMTA2XHUxMTYyClx1MTEwQlx1MTE2N1x1MTFBRlx1MTEwOVx1MTE2QwpcdTExMEJcdTExNjdcdTExQUZcdTExMDlcdTExNzVcdTExQjdcdTExMTJcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUFGXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwQlx1MTE2N1x1MTFBRlx1MTEwRVx1MTE2MQpcdTExMEJcdTExNjdcdTExQUZcdTExMTJcdTExNzNcdTExQUYKXHUxMTBCXHUxMTY3XHUxMUI3XHUxMTA1XHUxMTY3Clx1MTEwQlx1MTE2N1x1MTFCOFx1MTEwOVx1MTE2NQpcdTExMEJcdTExNjdcdTExQkNcdTExMDBcdTExNkVcdTExQTgKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTAyXHUxMTYxXHUxMUI3Clx1MTEwQlx1MTE2N1x1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQwpcdTExMEJcdTExNjdcdTExQkNcdTExMEJcdTExNjNcdTExQkMKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTBCXHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE2N1x1MTFCQ1x1MTEwQlx1MTE2RVx1MTFCQwpcdTExMEJcdTExNjdcdTExQkNcdTExMEJcdTExNkZcdTExQUJcdTExMTJcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTYxClx1MTEwQlx1MTE2N1x1MTFCQ1x1MTExMlx1MTE2M1x1MTFCQwpcdTExMEJcdTExNjdcdTExQkNcdTExMTJcdTExNjlcdTExQUIKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTZBClx1MTEwQlx1MTE2N1x1MTFDMVx1MTEwMFx1MTE2RVx1MTEwNVx1MTE3NQpcdTExMEJcdTExNjdcdTExQzFcdTExMDdcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY3XHUxMUMxXHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwQlx1MTE2OFx1MTEwMFx1MTE2MVx1MTFCNwpcdTExMEJcdTExNjhcdTExMDBcdTExNzNcdTExQjcKXHUxMTBCXHUxMTY4XHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwQlx1MTE2OFx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMEJcdTExNjhcdTExMDlcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY4XHUxMTA5XHUxMTY1XHUxMUFCClx1MTEwQlx1MTE2OFx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNjhcdTExMDlcdTExNzNcdTExQjgKXHUxMTBCXHUxMTY4XHUxMTA5XHUxMTc1XHUxMUE4XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwQlx1MTE2OFx1MTEwQlx1MTE2M1x1MTFBOApcdTExMEJcdTExNjhcdTExMENcdTExNjVcdTExQUIKXHUxMTBCXHUxMTY4XHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwQlx1MTE2OFx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMEJcdTExNjhcdTExMEZcdTExNjVcdTExQUJcdTExMDNcdTExNjIKXHUxMTBCXHUxMTY4XHUxMUJBXHUxMTAyXHUxMTYxXHUxMUFGClx1MTEwQlx1MTE2OVx1MTEwMlx1MTE3M1x1MTFBRgpcdTExMEJcdTExNjlcdTExMDVcdTExNjFcdTExQTgKXHUxMTBCXHUxMTY5XHUxMTA1XHUxMTYyXHUxMUJBXHUxMTAzXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTYxXHUxMUFCClx1MTEwQlx1MTE2OVx1MTEwNVx1MTE2Nlx1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMEJcdTExNjlcdTExMDVcdTExNjlcdTExMENcdTExNzUKXHUxMTBCXHUxMTY5XHUxMTA1XHUxMTczXHUxMUFCXHUxMTA3XHUxMTYxXHUxMUFGClx1MTEwQlx1MTE2OVx1MTEwN1x1MTE3M1x1MTFBQgpcdTExMEJcdTExNjlcdTExMDlcdTExNzVcdTExQjgKXHUxMTBCXHUxMTY5XHUxMTBCXHUxMTY3XHUxMUI3Clx1MTEwQlx1MTE2OVx1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMEJcdTExNjlcdTExMENcdTExNjVcdTExQUIKXHUxMTBCXHUxMTY5XHUxMTBDXHUxMTc1XHUxMUE4Clx1MTEwQlx1MTE2OVx1MTEwQ1x1MTE3NVx1MTFCQ1x1MTEwQlx1MTE2NQpcdTExMEJcdTExNjlcdTExMTFcdTExNjZcdTExMDVcdTExNjEKXHUxMTBCXHUxMTY5XHUxMTExXHUxMTc1XHUxMTA5XHUxMTczXHUxMTEwXHUxMTY2XHUxMUFGClx1MTEwQlx1MTE2OVx1MTExMlx1MTE3NVx1MTEwNVx1MTE2NwpcdTExMEJcdTExNjlcdTExQThcdTExMDlcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY5XHUxMUE4XHUxMTA5XHUxMTZFXHUxMTA5XHUxMTZFClx1MTEwQlx1MTE2OVx1MTFBQlx1MTEwMFx1MTE2MVx1MTFCRApcdTExMEJcdTExNjlcdTExQUJcdTExMDVcdTExNjFcdTExMEJcdTExNzVcdTExQUIKXHUxMTBCXHUxMTY5XHUxMUFCXHUxMTA2XHUxMTY5XHUxMUI3Clx1MTEwQlx1MTE2OVx1MTFBQlx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTEwQlx1MTE3NVx1MTFBRgpcdTExMEJcdTExNjlcdTExQUJcdTExMTBcdTExNjlcdTExQkMKXHUxMTBCXHUxMTY5XHUxMUFGXHUxMTAwXHUxMTYxXHUxMTBCXHUxMTczXHUxMUFGClx1MTEwQlx1MTE2OVx1MTFBRlx1MTEwNVx1MTE3NVx1MTFCN1x1MTExMVx1MTE3NVx1MTFBOApcdTExMEJcdTExNjlcdTExQUZcdTExMTJcdTExNjIKXHUxMTBCXHUxMTY5XHUxMUJBXHUxMTBFXHUxMTYxXHUxMTA1XHUxMTc1XHUxMUI3Clx1MTEwQlx1MTE2QVx1MTEwQlx1MTE3NVx1MTEwOVx1MTE2N1x1MTEwRVx1MTE3MwpcdTExMEJcdTExNkFcdTExMEJcdTExNzVcdTExQUIKXHUxMTBCXHUxMTZBXHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwQlx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBQgpcdTExMEJcdTExNkFcdTExQkNcdTExMDdcdTExNzUKXHUxMTBCXHUxMTZBXHUxMUJDXHUxMTBDXHUxMTYxClx1MTEwQlx1MTE2Qlx1MTEwMlx1MTE2M1x1MTExMlx1MTE2MVx1MTEwNlx1MTE2N1x1MTFBQgpcdTExMEJcdTExNkJcdTExQUJcdTExMENcdTExNzUKXHUxMTBCXHUxMTZDXHUxMTAwXHUxMTYxXHUxMUJBXHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwQlx1MTE2Q1x1MTEwMFx1MTE2RVx1MTFBOApcdTExMEJcdTExNkNcdTExMDVcdTExNjlcdTExMEJcdTExNkVcdTExQjcKXHUxMTBCXHUxMTZDXHUxMTA5XHUxMTYxXHUxMUI3XHUxMTBFXHUxMTY5XHUxMUFCClx1MTEwQlx1MTE2Q1x1MTEwRVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNkNcdTExMEVcdTExNzVcdTExQjcKXHUxMTBCXHUxMTZDXHUxMTEyXHUxMTYxXHUxMUFGXHUxMTA2XHUxMTY1XHUxMTAyXHUxMTc1Clx1MTEwQlx1MTE2Q1x1MTFBQlx1MTEwN1x1MTE2MVx1MTFBRgpcdTExMEJcdTExNkNcdTExQUJcdTExMDlcdTExNjlcdTExQUIKXHUxMTBCXHUxMTZDXHUxMUFCXHUxMTBEXHUxMTY5XHUxMUE4Clx1MTEwQlx1MTE2RFx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMEJcdTExNkRcdTExMEJcdTExNzVcdTExQUYKXHUxMTBCXHUxMTZEXHUxMTBDXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2RFx1MTEwRVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNkRcdTExQkNcdTExMDBcdTExNzUKXHUxMTBCXHUxMTZEXHUxMUJDXHUxMTA5XHUxMTY1Clx1MTEwQlx1MTE2RFx1MTFCQ1x1MTEwQlx1MTE2NQpcdTExMEJcdTExNkVcdTExMDlcdTExNjFcdTExQUIKXHUxMTBCXHUxMTZFXHUxMTA5XHUxMTY1XHUxMUFCClx1MTEwQlx1MTE2RVx1MTEwOVx1MTE3M1x1MTFCQwpcdTExMEJcdTExNkVcdTExMEJcdTExNjdcdTExQUJcdTExMTJcdTExNzUKXHUxMTBCXHUxMTZFXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwQlx1MTE2RVx1MTEwRVx1MTE2Nlx1MTEwMFx1MTE2RVx1MTFBOApcdTExMEJcdTExNkVcdTExMTFcdTExNjdcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUFCXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwQlx1MTE2RVx1MTFBQlx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMEJcdTExNkVcdTExQUJcdTExMDdcdTExNjFcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUFCClx1MTEwQlx1MTE2RVx1MTFBQlx1MTExMlx1MTE2Mlx1MTFCQwpcdTExMEJcdTExNkVcdTExQUZcdTExMDlcdTExNjFcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2RVx1MTFCN1x1MTEwQ1x1MTE3NVx1MTFBOFx1MTEwQlx1MTE3NVx1MTFCNwpcdTExMEJcdTExNkVcdTExQkFcdTExMEJcdTExNjVcdTExMDVcdTExNzNcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUJBXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2Rlx1MTEwMlx1MTE2MVx1MTFBOApcdTExMEJcdTExNkZcdTExQUJcdTExMDBcdTExNjkKXHUxMTBCXHUxMTZGXHUxMUFCXHUxMTA1XHUxMTYyClx1MTEwQlx1MTE2Rlx1MTFBQlx1MTEwOVx1MTE2NQpcdTExMEJcdTExNkZcdTExQUJcdTExMDlcdTExNkVcdTExQkNcdTExMEJcdTExNzUKXHUxMTBCXHUxMTZGXHUxMUFCXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2Rlx1MTFBQlx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMEJcdTExNkZcdTExQUJcdTExMTFcdTExNzVcdTExMDlcdTExNzMKXHUxMTBCXHUxMTZGXHUxMUFGXHUxMTAwXHUxMTczXHUxMUI4Clx1MTEwQlx1MTE2Rlx1MTFBRlx1MTEwM1x1MTE3M1x1MTEwRlx1MTE2NVx1MTFCOApcdTExMEJcdTExNkZcdTExQUZcdTExMDlcdTExNjYKXHUxMTBCXHUxMTZGXHUxMUFGXHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQlx1MTE3MFx1MTEwQlx1MTE3NVx1MTExMFx1MTE2NQpcdTExMEJcdTExNzFcdTExMDdcdTExNjFcdTExQUIKXHUxMTBCXHUxMTcxXHUxMTA3XHUxMTY1XHUxMUI4Clx1MTEwQlx1MTE3MVx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNzFcdTExMEJcdTExNkZcdTExQUIKXHUxMTBCXHUxMTcxXHUxMTEyXHUxMTY1XHUxMUI3Clx1MTEwQlx1MTE3MVx1MTExMlx1MTE2N1x1MTFCOApcdTExMEJcdTExNzFcdTExQkFcdTExMDlcdTExNjFcdTExMDVcdTExNjFcdTExQjcKXHUxMTBCXHUxMTcyXHUxMTAyXHUxMTYxXHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwQlx1MTE3Mlx1MTEwNVx1MTE2NVx1MTFCOApcdTExMEJcdTExNzJcdTExMDZcdTExNjdcdTExQkMKXHUxMTBCXHUxMTcyXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwQlx1MTE3Mlx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMEJcdTExNzJcdTExMENcdTExNjVcdTExQTgKXHUxMTBCXHUxMTcyXHUxMTBFXHUxMTc1XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQlx1MTE3Mlx1MTExMlx1MTE2MVx1MTFBOApcdTExMEJcdTExNzJcdTExMTJcdTExNjJcdTExQkMKXHUxMTBCXHUxMTcyXHUxMTEyXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE3Mlx1MTFBOFx1MTEwMFx1MTE2RVx1MTFBQgpcdTExMEJcdTExNzJcdTExQThcdTExMDlcdTExNjFcdTExQkMKXHUxMTBCXHUxMTcyXHUxMUE4XHUxMTA5XHUxMTc1XHUxMUI4Clx1MTEwQlx1MTE3Mlx1MTFBOFx1MTEwRVx1MTE2NgpcdTExMEJcdTExNzNcdTExQUJcdTExMTJcdTExNjJcdTExQkMKXHUxMTBCXHUxMTczXHUxMUI3XHUxMTA1XHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE3M1x1MTFCN1x1MTEwNVx1MTE2RApcdTExMEJcdTExNzNcdTExQjdcdTExMDdcdTExNjFcdTExQUIKXHUxMTBCXHUxMTczXHUxMUI3XHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwQlx1MTE3M1x1MTFCN1x1MTEwOVx1MTE3NVx1MTFBOApcdTExMEJcdTExNzNcdTExQjdcdTExMEJcdTExNjFcdTExQTgKXHUxMTBCXHUxMTczXHUxMUI3XHUxMTBDXHUxMTZFClx1MTEwQlx1MTE3NFx1MTEwMFx1MTE2N1x1MTFBQgpcdTExMEJcdTExNzRcdTExMDJcdTExNjlcdTExQUIKXHUxMTBCXHUxMTc0XHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQlx1MTE3NFx1MTEwN1x1MTE2OVx1MTFBOApcdTExMEJcdTExNzRcdTExMDlcdTExNzVcdTExQTgKXHUxMTBCXHUxMTc0XHUxMTA5XHUxMTc1XHUxMUI3Clx1MTEwQlx1MTE3NFx1MTEwQlx1MTE2Q1x1MTEwNVx1MTE2OQpcdTExMEJcdTExNzRcdTExMEJcdTExNkRcdTExQTgKXHUxMTBCXHUxMTc0XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQlx1MTE3NFx1MTExMlx1MTE2MVx1MTFBOApcdTExMEJcdTExNzVcdTExMDBcdTExNjVcdTExQkEKXHUxMTBCXHUxMTc1XHUxMTAwXHUxMTY5XHUxMUJBClx1MTEwQlx1MTE3NVx1MTEwMlx1MTE2N1x1MTFCNwpcdTExMEJcdTExNzVcdTExMDJcdTExNjlcdTExQjcKXHUxMTBCXHUxMTc1XHUxMTAzXHUxMTYxXHUxMUFGClx1MTEwQlx1MTE3NVx1MTEwM1x1MTE2Mlx1MTEwNVx1MTE2OQpcdTExMEJcdTExNzVcdTExMDNcdTExNjlcdTExQkMKXHUxMTBCXHUxMTc1XHUxMTA1XHUxMTY1XHUxMUMyXHUxMTAwXHUxMTY2Clx1MTEwQlx1MTE3NVx1MTEwNVx1MTE2N1x1MTFBOFx1MTEwOVx1MTE2NQpcdTExMEJcdTExNzVcdTExMDVcdTExNjlcdTExQUJcdTExMENcdTExNjVcdTExQTgKXHUxMTBCXHUxMTc1XHUxMTA1XHUxMTczXHUxMUI3Clx1MTEwQlx1MTE3NVx1MTEwNlx1MTE3NVx1MTFBQgpcdTExMEJcdTExNzVcdTExMDdcdTExNjFcdTExQUZcdTExMDlcdTExNjkKXHUxMTBCXHUxMTc1XHUxMTA3XHUxMTY3XHUxMUFGClx1MTEwQlx1MTE3NVx1MTEwN1x1MTE2RVx1MTFBRgpcdTExMEJcdTExNzVcdTExMDhcdTExNjFcdTExQUYKXHUxMTBCXHUxMTc1XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwQlx1MTE3NVx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNzVcdTExMDlcdTExNzNcdTExQUYKXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTYzXHUxMTAwXHUxMTc1Clx1MTEwQlx1MTE3NVx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMEJcdTExNzVcdTExMEJcdTExNkVcdTExQkEKXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTZGXHUxMUFGClx1MTEwQlx1MTE3NVx1MTEwQlx1MTE3M1x1MTFBOFx1MTEwMFx1MTE2OQpcdTExMEJcdTExNzVcdTExMEJcdTExNzVcdTExQTgKXHUxMTBCXHUxMTc1XHUxMTBDXHUxMTY1XHUxMUFCClx1MTEwQlx1MTE3NVx1MTEwQ1x1MTE2RVx1MTFCQwpcdTExMEJcdTExNzVcdTExMTBcdTExNzNcdTExQUVcdTExMDJcdTExNjFcdTExQUYKXHUxMTBCXHUxMTc1XHUxMTEwXHUxMTczXHUxMUFGClx1MTEwQlx1MTE3NVx1MTExMlx1MTE2OVx1MTFBQgpcdTExMEJcdTExNzVcdTExQUJcdTExMDBcdTExNjFcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE2OVx1MTFCQwpcdTExMEJcdTExNzVcdTExQUJcdTExMDBcdTExNkUKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTczXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE3NQpcdTExMEJcdTExNzVcdTExQUJcdTExMDNcdTExNjkKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTA1XHUxMTcyClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMEJcdTExNzVcdTExQUJcdTExMDlcdTExNjJcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTA5XHUxMTZCClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwQlx1MTE2N1x1MTFBQgpcdTExMEJcdTExNzVcdTExQUJcdTExMEJcdTExNkZcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTBDXHUxMTYyClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwQ1x1MTE2OVx1MTFCQwpcdTExMEJcdTExNzVcdTExQUJcdTExMEVcdTExNjVcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTBFXHUxMTY2Clx1MTEwQlx1MTE3NVx1MTFBQlx1MTExMFx1MTE2NVx1MTEwMlx1MTE2Nlx1MTFCQQpcdTExMEJcdTExNzVcdTExQUJcdTExMTJcdTExNjEKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTEyXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwMFx1MTE2OVx1MTFCOApcdTExMEJcdTExNzVcdTExQUZcdTExMDBcdTExNzUKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTAzXHUxMTYxXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwM1x1MTE2MgpcdTExMEJcdTExNzVcdTExQUZcdTExMDNcdTExNzNcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTA3XHUxMTYxXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwN1x1MTE2OVx1MTFBQgpcdTExMEJcdTExNzVcdTExQUZcdTExMDdcdTExNkUKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwOVx1MTE2Mlx1MTFCQwpcdTExMEJcdTExNzVcdTExQUZcdTExMDlcdTExNjlcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMEJcdTExNzVcdTExQUZcdTExMENcdTExNjVcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTBDXHUxMTY5XHUxMUJDClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwQ1x1MTE2RVx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMEJcdTExNzVcdTExQUZcdTExMERcdTExNzVcdTExQTgKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTBFXHUxMTY2Clx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwRVx1MTE3NQpcdTExMEJcdTExNzVcdTExQUZcdTExMTJcdTExNjJcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTEyXHUxMTZDXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQlx1MTE3NVx1MTFCN1x1MTEwMFx1MTE3M1x1MTFCNwpcdTExMEJcdTExNzVcdTExQjdcdTExMDZcdTExNkUKXHUxMTBCXHUxMTc1XHUxMUI4XHUxMTAzXHUxMTYyClx1MTEwQlx1MTE3NVx1MTFCOFx1MTEwNVx1MTE2N1x1MTFBOApcdTExMEJcdTExNzVcdTExQjhcdTExMDZcdTExNjFcdTExQkEKXHUxMTBCXHUxMTc1XHUxMUI4XHUxMTA5XHUxMTYxClx1MTEwQlx1MTE3NVx1MTFCOFx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNzVcdTExQjhcdTExMDlcdTExNzUKXHUxMTBCXHUxMTc1XHUxMUI4XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFCOFx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMEJcdTExNzVcdTExQjhcdTExMTJcdTExNjFcdTExQTgKXHUxMTBDXHUxMTYxXHUxMTAwXHUxMTYxXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQ1x1MTE2MVx1MTEwMFx1MTE2N1x1MTFBOApcdTExMENcdTExNjFcdTExMDBcdTExNzNcdTExQTgKXHUxMTBDXHUxMTYxXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2MVx1MTEwNVx1MTE2MVx1MTFCQwpcdTExMENcdTExNjFcdTExMDdcdTExNkVcdTExMDlcdTExNzVcdTExQjcKXHUxMTBDXHUxMTYxXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwQ1x1MTE2MVx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMENcdTExNjFcdTExMEJcdTExNjdcdTExQUIKXHUxMTBDXHUxMTYxXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQ1x1MTE2MVx1MTEwQlx1MTE3Mlx1MTFBRgpcdTExMENcdTExNjFcdTExMENcdTExNjVcdTExQUJcdTExMDBcdTExNjUKXHUxMTBDXHUxMTYxXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwQ1x1MTE2MVx1MTEwQ1x1MTE2OVx1MTFBQlx1MTEwOVx1MTE3NVx1MTFCNwpcdTExMENcdTExNjFcdTExMTFcdTExNjFcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUE4XHUxMTAwXHUxMTYxClx1MTEwQ1x1MTE2MVx1MTFBOFx1MTEwMlx1MTE2N1x1MTFBQgpcdTExMENcdTExNjFcdTExQThcdTExMDlcdTExNjVcdTExQkMKXHUxMTBDXHUxMTYxXHUxMUE4XHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwQ1x1MTE2MVx1MTFBOFx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMENcdTExNjFcdTExQThcdTExMEJcdTExNzNcdTExQUJcdTExMDRcdTExNjFcdTExQUYKXHUxMTBDXHUxMTYxXHUxMUE4XHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwQ1x1MTE2MVx1MTFBQlx1MTEwM1x1MTE3NQpcdTExMENcdTExNjFcdTExQUJcdTExMDRcdTExNzNcdTExQTgKXHUxMTBDXHUxMTYxXHUxMUFCXHUxMTBFXHUxMTc1Clx1MTEwQ1x1MTE2MVx1MTFBRlx1MTEwNlx1MTE2OVx1MTFCQQpcdTExMENcdTExNjFcdTExQjdcdTExMDFcdTExNjFcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTZFXHUxMTEyXHUxMTYxXHUxMUI3Clx1MTEwQ1x1MTE2MVx1MTFCN1x1MTEwOVx1MTE3NQpcdTExMENcdTExNjFcdTExQjdcdTExMEJcdTExNjlcdTExQkEKXHUxMTBDXHUxMTYxXHUxMUI3XHUxMTBDXHUxMTYxXHUxMTA1XHUxMTc1Clx1MTEwQ1x1MTE2MVx1MTFCOFx1MTEwQ1x1MTE3NQpcdTExMENcdTExNjFcdTExQkNcdTExMDBcdTExNkFcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3NVx1MTEwMFx1MTE2MVx1MTFBQgpcdTExMENcdTExNjFcdTExQkNcdTExMDVcdTExNjIKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA1XHUxMTY4Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwNVx1MTE3MwpcdTExMENcdTExNjFcdTExQkNcdTExMDZcdTExNjEKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA2XHUxMTY3XHUxMUFCClx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwNlx1MTE2OQpcdTExMENcdTExNjFcdTExQkNcdTExMDZcdTExNzUKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA3XHUxMTc1Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMENcdTExNjFcdTExQkNcdTExMDlcdTExNjkKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2Mlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMENcdTExNjFcdTExQkNcdTExMEJcdTExNzVcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwRVx1MTE2MQpcdTExMENcdTExNjFcdTExQkNcdTExMTJcdTExNjFcdTExQThcdTExMDBcdTExNzNcdTExQjcKXHUxMTBDXHUxMTYyXHUxMTAyXHUxMTczXHUxMUJDClx1MTEwQ1x1MTE2Mlx1MTEwOFx1MTE2MVx1MTFBRlx1MTEwNVx1MTE3NQpcdTExMENcdTExNjJcdTExMDlcdTExNjFcdTExQUIKXHUxMTBDXHUxMTYyXHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwQ1x1MTE2Mlx1MTEwQ1x1MTE2MVx1MTFBOFx1MTEwMlx1MTE2N1x1MTFBQgpcdTExMENcdTExNjJcdTExMENcdTExNjVcdTExQkMKXHUxMTBDXHUxMTYyXHUxMTBFXHUxMTYyXHUxMTAwXHUxMTc1Clx1MTEwQ1x1MTE2Mlx1MTExMVx1MTE2MVx1MTFBQgpcdTExMENcdTExNjJcdTExMTJcdTExNjFcdTExQTgKXHUxMTBDXHUxMTYyXHUxMTEyXHUxMTZBXHUxMUFGXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTEwMFx1MTE2NVx1MTFCQQpcdTExMENcdTExNjVcdTExMDBcdTExNjlcdTExMDVcdTExNzUKXHUxMTBDXHUxMTY1XHUxMTAwXHUxMTY5XHUxMUJBClx1MTEwQ1x1MTE2NVx1MTEwMlx1MTE2N1x1MTFBOApcdTExMENcdTExNjVcdTExMDVcdTExNjVcdTExQUIKXHUxMTBDXHUxMTY1XHUxMTA1XHUxMTY1XHUxMUMyXHUxMTAwXHUxMTY2Clx1MTEwQ1x1MTE2NVx1MTEwN1x1MTE2NVx1MTFBQgpcdTExMENcdTExNjVcdTExMEJcdTExNkVcdTExQUYKXHUxMTBDXHUxMTY1XHUxMTBDXHUxMTY1XHUxMUFGXHUxMTA1XHUxMTY5Clx1MTEwQ1x1MTE2NVx1MTEwRVx1MTE2RVx1MTFBOApcdTExMENcdTExNjVcdTExQThcdTExMDBcdTExNzNcdTExQTgKXHUxMTBDXHUxMTY1XHUxMUE4XHUxMTAzXHUxMTYxXHUxMUJDXHUxMTEyXHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFBOFx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMENcdTExNjVcdTExQThcdTExMEJcdTExNkRcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUE4XHUxMTBCXHUxMTczXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwMFx1MTE2MgpcdTExMENcdTExNjVcdTExQUJcdTExMDBcdTExNjlcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTAwXHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMENcdTExNjVcdTExQUJcdTExMDVcdTExNjFcdTExMDNcdTExNjkKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTA2XHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMENcdTExNjVcdTExQUJcdTExMDdcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTA3XHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwOVx1MTE2NgpcdTExMENcdTExNjVcdTExQUJcdTExMDlcdTExNzUKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwQ1x1MTE2MQpcdTExMENcdTExNjVcdTExQUJcdTExMENcdTExNjJcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTBDXHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwRVx1MTE2NVx1MTFBRgpcdTExMENcdTExNjVcdTExQUJcdTExMEVcdTExNjYKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTEwXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTExMlx1MTE2NwpcdTExMENcdTExNjVcdTExQUJcdTExMTJcdTExNkUKXHUxMTBDXHUxMTY1XHUxMUFGXHUxMTAzXHUxMTYyClx1MTEwQ1x1MTE2NVx1MTFBRlx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMENcdTExNjVcdTExQUZcdTExMDdcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUFGXHUxMTBCXHUxMTYzXHUxMUE4Clx1MTEwQ1x1MTE2NVx1MTFBRlx1MTEwRVx1MTE2MQpcdTExMENcdTExNjVcdTExQjdcdTExMDBcdTExNjVcdTExQjcKXHUxMTBDXHUxMTY1XHUxMUI3XHUxMTA5XHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFCN1x1MTEwOVx1MTE3NVx1MTFCNwpcdTExMENcdTExNjVcdTExQjdcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUI3XHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwQ1x1MTE2NVx1MTFCN1x1MTEwRVx1MTE2MQpcdTExMENcdTExNjVcdTExQjhcdTExMDBcdTExNzNcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUI4XHUxMTA5XHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFCOFx1MTEwRVx1MTE2OVx1MTFBOApcdTExMENcdTExNjVcdTExQkFcdTExMDBcdTExNjFcdTExMDVcdTExNjFcdTExQTgKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTAwXHUxMTY1XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwM1x1MTE2OQpcdTExMENcdTExNjVcdTExQkNcdTExMDVcdTExNzJcdTExMENcdTExNjFcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA1XHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwNlx1MTE2MVx1MTFBRgpcdTExMENcdTExNjVcdTExQkNcdTExMDZcdTExNjdcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTFBQlx1MTEwM1x1MTE2MgpcdTExMENcdTExNjVcdTExQkNcdTExMDdcdTExNjkKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA3XHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwN1x1MTE3NQpcdTExMENcdTExNjVcdTExQkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwQlx1MTE2OQpcdTExMENcdTExNjVcdTExQkNcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwQ1x1MTE3NQpcdTExMENcdTExNjVcdTExQkNcdTExMEVcdTExNzUKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTEyXHUxMTZBXHUxMUE4XHUxMTEyXHUxMTc1Clx1MTEwQ1x1MTE2Nlx1MTEwMFx1MTE2OVx1MTFCQwpcdTExMENcdTExNjZcdTExMDBcdTExNkFcdTExMENcdTExNjVcdTExQjcKXHUxMTBDXHUxMTY2XHUxMTAzXHUxMTYyXHUxMTA1XHUxMTY5Clx1MTEwQ1x1MTE2Nlx1MTEwNlx1MTE2OVx1MTFBOApcdTExMENcdTExNjZcdTExMDdcdTExNjFcdTExQUYKXHUxMTBDXHUxMTY2XHUxMTA3XHUxMTY1XHUxMUI4Clx1MTEwQ1x1MTE2Nlx1MTEwOVx1MTE2MVx1MTFCQVx1MTEwMlx1MTE2MVx1MTFBRgpcdTExMENcdTExNjZcdTExMEJcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY2XHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQ1x1MTE2Nlx1MTEwQ1x1MTE2MVx1MTFBOApcdTExMENcdTExNjZcdTExMENcdTExNkVcdTExMDNcdTExNjkKXHUxMTBDXHUxMTY2XHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwQ1x1MTE2Nlx1MTExMVx1MTE2RVx1MTFCNwpcdTExMENcdTExNjZcdTExMTJcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY5XHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwQ1x1MTE2OVx1MTEwMFx1MTE2NVx1MTFBQgpcdTExMENcdTExNjlcdTExMDBcdTExNzNcdTExQjcKXHUxMTBDXHUxMTY5XHUxMTAwXHUxMTc1XHUxMUJDClx1MTEwQ1x1MTE2OVx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMENcdTExNjlcdTExMDZcdTExNzVcdTExMDVcdTExNkQKXHUxMTBDXHUxMTY5XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2OVx1MTEwOVx1MTE2NVx1MTFBQgpcdTExMENcdTExNjlcdTExMEJcdTExNkRcdTExQkNcdTExMTJcdTExNzUKXHUxMTBDXHUxMTY5XHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwQ1x1MTE2OVx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMENcdTExNjlcdTExMENcdTExNzVcdTExQTgKXHUxMTBDXHUxMTY5XHUxMUFCXHUxMTAzXHUxMTYyXHUxMUJBXHUxMTA2XHUxMTYxXHUxMUFGClx1MTEwQ1x1MTE2OVx1MTFBQlx1MTEwQ1x1MTE2MgpcdTExMENcdTExNjlcdTExQUZcdTExMEJcdTExNjVcdTExQjgKXHUxMTBDXHUxMTY5XHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTEwMFx1MTE2RApcdTExMENcdTExNjlcdTExQkNcdTExMDVcdTExNjkKXHUxMTBDXHUxMTY5XHUxMUJDXHUxMTA1XHUxMTcyClx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTEwOVx1MTE2OVx1MTEwNVx1MTE3NQpcdTExMENcdTExNjlcdTExQkNcdTExMEJcdTExNjVcdTExQjhcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTY5XHUxMUJDXHUxMTBDXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTExMlx1MTE2MVx1MTFCOApcdTExMENcdTExNkFcdTExMDlcdTExNjVcdTExQTgKXHUxMTBDXHUxMTZDXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQ1x1MTE2RVx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMENcdTExNkVcdTExMDVcdTExNzNcdTExQjcKXHUxMTBDXHUxMTZFXHUxMTA2XHUxMTYxXHUxMUFGClx1MTEwQ1x1MTE2RVx1MTEwNlx1MTE2NVx1MTEwMlx1MTE3NQpcdTExMENcdTExNkVcdTExMDZcdTExNjVcdTExQTgKXHUxMTBDXHUxMTZFXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2RVx1MTEwNlx1MTE3NVx1MTFBQgpcdTExMENcdTExNkVcdTExMDdcdTExNjFcdTExQkMKXHUxMTBDXHUxMTZFXHUxMTA3XHUxMTY3XHUxMUFCClx1MTEwQ1x1MTE2RVx1MTEwOVx1MTE3NVx1MTFBOApcdTExMENcdTExNkVcdTExMEJcdTExNzVcdTExQUIKXHUxMTBDXHUxMTZFXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQ1x1MTE2RVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMENcdTExNkVcdTExMENcdTExNjVcdTExQUJcdTExMENcdTExNjEKXHUxMTBDXHUxMTZFXHUxMTEwXHUxMTYyXHUxMUE4Clx1MTEwQ1x1MTE2RVx1MTFBQlx1MTEwN1x1MTE3NQpcdTExMENcdTExNkVcdTExQUZcdTExMDBcdTExNjVcdTExMDVcdTExNzUKXHUxMTBDXHUxMTZFXHUxMUFGXHUxMTAwXHUxMTc1Clx1MTEwQ1x1MTE2RVx1MTFBRlx1MTEwNlx1MTE2RVx1MTEwMlx1MTE3NApcdTExMENcdTExNkVcdTExQkNcdTExMDBcdTExNjFcdTExQUIKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTAwXHUxMTY4XHUxMTA3XHUxMTYxXHUxMUJDXHUxMTA5XHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwMFx1MTE2RVx1MTFBOApcdTExMENcdTExNkVcdTExQkNcdTExMDJcdTExNjdcdTExQUIKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTAzXHUxMTYxXHUxMUFCClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwM1x1MTE2OVx1MTFBOApcdTExMENcdTExNkVcdTExQkNcdTExMDdcdTExNjFcdTExQUIKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTA3XHUxMTZFClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwOVx1MTE2NgpcdTExMENcdTExNkVcdTExQkNcdTExMDlcdTExNjlcdTExMDBcdTExNzVcdTExMEJcdTExNjVcdTExQjgKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTA5XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwQlx1MTE2MVx1MTFCQwpcdTExMENcdTExNkVcdTExQkNcdTExMEJcdTExNkQKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTAwXHUxMTZEClx1MTEwQ1x1MTE3M1x1MTFBOFx1MTEwOVx1MTE2NVx1MTFBOApcdTExMENcdTExNzNcdTExQThcdTExMDlcdTExNzUKXHUxMTBDXHUxMTczXHUxMUFGXHUxMTAwXHUxMTY1XHUxMTBCXHUxMTZFXHUxMUI3Clx1MTEwQ1x1MTE3M1x1MTFCQ1x1MTEwMFx1MTE2MQpcdTExMENcdTExNzNcdTExQkNcdTExMDBcdTExNjUKXHUxMTBDXHUxMTczXHUxMUJDXHUxMTAwXHUxMTZGXHUxMUFCClx1MTEwQ1x1MTE3M1x1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQwpcdTExMENcdTExNzNcdTExQkNcdTExMDlcdTExNjYKXHUxMTBDXHUxMTc1XHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTEwMFx1MTE2MVx1MTFCOApcdTExMENcdTExNzVcdTExMDBcdTExNjdcdTExQkMKXHUxMTBDXHUxMTc1XHUxMTAwXHUxMTczXHUxMUE4XHUxMTEyXHUxMTc1Clx1MTEwQ1x1MTE3NVx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMENcdTExNzVcdTExMDBcdTExNzNcdTExQjgKXHUxMTBDXHUxMTc1XHUxMTAyXHUxMTczXHUxMUJDClx1MTEwQ1x1MTE3NVx1MTEwNVx1MTE3M1x1MTFCN1x1MTEwMFx1MTE3NVx1MTFBRgpcdTExMENcdTExNzVcdTExMDVcdTExNzVcdTExMDlcdTExNjFcdTExQUIKXHUxMTBDXHUxMTc1XHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE3NVx1MTEwN1x1MTE2RVx1MTFCQwpcdTExMENcdTExNzVcdTExMDlcdTExNzVcdTExQTgKXHUxMTBDXHUxMTc1XHUxMTBCXHUxMTY3XHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTEwQlx1MTE2RVx1MTEwMFx1MTE2MgpcdTExMENcdTExNzVcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTc1XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMENcdTExNzVcdTExMENcdTExNzVcdTExQUIKXHUxMTBDXHUxMTc1XHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwQ1x1MTE3NVx1MTFBOFx1MTEwOVx1MTE2NVx1MTFBQgpcdTExMENcdTExNzVcdTExQThcdTExMEJcdTExNjVcdTExQjgKXHUxMTBDXHUxMTc1XHUxMUE4XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQ1x1MTE3NVx1MTFBOFx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMENcdTExNzVcdTExQUJcdTExMDBcdTExNzNcdTExQjgKXHUxMTBDXHUxMTc1XHUxMUFCXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE3NVx1MTFBQlx1MTEwNVx1MTE2OQpcdTExMENcdTExNzVcdTExQUJcdTExMDVcdTExNkQKXHUxMTBDXHUxMTc1XHUxMUFCXHUxMTA1XHUxMTc1Clx1MTEwQ1x1MTE3NVx1MTFBQlx1MTEwRFx1MTE2MQpcdTExMENcdTExNzVcdTExQUJcdTExMEVcdTExNjFcdTExQUYKXHUxMTBDXHUxMTc1XHUxMUFCXHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwQ1x1MTE3NVx1MTFBQlx1MTExMFx1MTE2OVx1MTFCQwpcdTExMENcdTExNzVcdTExQUJcdTExMTJcdTExNjJcdTExQkMKXHUxMTBDXHUxMTc1XHUxMUFGXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE3NVx1MTFBRlx1MTEwN1x1MTE2N1x1MTFCQwpcdTExMENcdTExNzVcdTExQUZcdTExMDlcdTExNjUKXHUxMTBDXHUxMTc1XHUxMUI3XHUxMTBDXHUxMTYxXHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTFCOFx1MTEwM1x1MTE2MVx1MTFBQgpcdTExMENcdTExNzVcdTExQjhcdTExMEJcdTExNjFcdTExQUIKXHUxMTBDXHUxMTc1XHUxMUI4XHUxMTBDXHUxMTZFXHUxMUJDClx1MTEwRFx1MTE2MVx1MTEwQ1x1MTE3M1x1MTFCQwpcdTExMERcdTExNzVcdTExMDFcdTExNjVcdTExMDBcdTExNzUKXHUxMTBFXHUxMTYxXHUxMTAyXHUxMTYxXHUxMUI3Clx1MTEwRVx1MTE2MVx1MTEwNVx1MTE2MVx1MTEwNVx1MTE3NQpcdTExMEVcdTExNjFcdTExMDVcdTExNjNcdTExQkMKXHUxMTBFXHUxMTYxXHUxMTA1XHUxMTc1XHUxMUI3Clx1MTEwRVx1MTE2MVx1MTEwN1x1MTE2N1x1MTFBRgpcdTExMEVcdTExNjFcdTExMDlcdTExNjVcdTExQUIKXHUxMTBFXHUxMTYxXHUxMTBFXHUxMTczXHUxMUI3Clx1MTEwRVx1MTE2MVx1MTFBOFx1MTEwMFx1MTE2MVx1MTFBOApcdTExMEVcdTExNjFcdTExQUJcdTExMDZcdTExNkVcdTExQUYKXHUxMTBFXHUxMTYxXHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwRVx1MTE2MVx1MTFCN1x1MTEwMFx1MTE2MQpcdTExMEVcdTExNjFcdTExQjdcdTExMDBcdTExNzVcdTExMDVcdTExNzNcdTExQjcKXHUxMTBFXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTYyClx1MTEwRVx1MTE2MVx1MTFCN1x1MTEwOVx1MTE2NVx1MTFBOApcdTExMEVcdTExNjFcdTExQjdcdTExMEJcdTExNjcKXHUxMTBFXHUxMTYxXHUxMUI3XHUxMTBCXHUxMTZDClx1MTEwRVx1MTE2MVx1MTFCN1x1MTEwQ1x1MTE2OQpcdTExMEVcdTExNjFcdTExQkFcdTExMENcdTExNjFcdTExQUIKXHUxMTBFXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTYxClx1MTEwRVx1MTE2MVx1MTFCQ1x1MTEwMFx1MTE2OQpcdTExMEVcdTExNjFcdTExQkNcdTExMDBcdTExNkUKXHUxMTBFXHUxMTYxXHUxMUJDXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwRVx1MTE2MVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTFBOQpcdTExMEVcdTExNjFcdTExQkNcdTExMENcdTExNjFcdTExQTgKXHUxMTBFXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY5Clx1MTEwRVx1MTE2Mlx1MTEwMlx1MTE2NVx1MTFBRgpcdTExMEVcdTExNjJcdTExMENcdTExNjVcdTExQjcKXHUxMTBFXHUxMTYyXHUxMUE4XHUxMTAwXHUxMTYxXHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwRVx1MTE2Mlx1MTFBOFx1MTEwN1x1MTE2MVx1MTFCQwpcdTExMEVcdTExNjJcdTExQThcdTExMDlcdTExNjFcdTExQkMKXHUxMTBFXHUxMTYyXHUxMUE4XHUxMTBCXHUxMTc1XHUxMUI3Clx1MTEwRVx1MTE2Mlx1MTFCN1x1MTExMVx1MTE3NVx1MTEwQlx1MTE2NVx1MTFBQgpcdTExMEVcdTExNjVcdTExMDdcdTExNjVcdTExQUYKXHUxMTBFXHUxMTY1XHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwRVx1MTE2NVx1MTFBQlx1MTEwMFx1MTE2RVx1MTFBOApcdTExMEVcdTExNjVcdTExQUJcdTExMDNcdTExNkVcdTExQkMKXHUxMTBFXHUxMTY1XHUxMUFCXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwRVx1MTE2NVx1MTFBQlx1MTEwQ1x1MTE2MgpcdTExMEVcdTExNjVcdTExQUJcdTExMEVcdTExNjVcdTExQUJcdTExMTJcdTExNzUKXHUxMTBFXHUxMTY1XHUxMUFGXHUxMTAzXHUxMTY5Clx1MTEwRVx1MTE2NVx1MTFBRlx1MTEwQ1x1MTE2NVx1MTExMlx1MTE3NQpcdTExMEVcdTExNjVcdTExQUZcdTExMTJcdTExNjFcdTExQTgKXHUxMTBFXHUxMTY1XHUxMUJBXHUxMTAyXHUxMTYxXHUxMUFGClx1MTEwRVx1MTE2NVx1MTFCQVx1MTEwRFx1MTE2MgpcdTExMEVcdTExNjVcdTExQkNcdTExMDJcdTExNjdcdTExQUIKXHUxMTBFXHUxMTY1XHUxMUJDXHUxMTA3XHUxMTYxXHUxMTBDXHUxMTc1Clx1MTEwRVx1MTE2NVx1MTFCQ1x1MTEwOVx1MTE2OQpcdTExMEVcdTExNjVcdTExQkNcdTExMEVcdTExNkVcdTExQUIKXHUxMTBFXHUxMTY2XHUxMTAwXHUxMTY4Clx1MTEwRVx1MTE2Nlx1MTEwNVx1MTE2N1x1MTFBOApcdTExMEVcdTExNjZcdTExMEJcdTExNjlcdTExQUIKXHUxMTBFXHUxMTY2XHUxMTBCXHUxMTcyXHUxMUE4Clx1MTEwRVx1MTE2Nlx1MTEwQ1x1MTE2RVx1MTFCQwpcdTExMEVcdTExNjZcdTExMTJcdTExNjVcdTExQjcKXHUxMTBFXHUxMTY5XHUxMTAzXHUxMTczXHUxMUJDXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwRVx1MTE2OVx1MTEwN1x1MTE2MVx1MTFBQgpcdTExMEVcdTExNjlcdTExMDdcdTExNjFcdTExQjgKXHUxMTBFXHUxMTY5XHUxMTA5XHUxMTYxXHUxMUJDXHUxMTEyXHUxMTZBClx1MTEwRVx1MTE2OVx1MTEwOVx1MTE2RVx1MTFBQgpcdTExMEVcdTExNjlcdTExMEJcdTExNjdcdTExMDVcdTExNzNcdTExQjcKXHUxMTBFXHUxMTY5XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwRVx1MTE2OVx1MTEwQ1x1MTE2NVx1MTEwMlx1MTE2N1x1MTFBOApcdTExMEVcdTExNjlcdTExMENcdTExNjVcdTExQjcKXHUxMTBFXHUxMTY5XHUxMTBFXHUxMTY1XHUxMUJDClx1MTEwRVx1MTE2OVx1MTEwRlx1MTE2OVx1MTFBRlx1MTEwNVx1MTE3NVx1MTFCQQpcdTExMEVcdTExNjlcdTExQkFcdTExMDdcdTExNkVcdTExQUYKXHUxMTBFXHUxMTY5XHUxMUJDXHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwRVx1MTE2OVx1MTFCQ1x1MTEwNVx1MTE3NQpcdTExMEVcdTExNjlcdTExQkNcdTExMENcdTExNjFcdTExQkMKXHUxMTBFXHUxMTZBXHUxMUFGXHUxMTBCXHUxMTY3XHUxMUJDClx1MTEwRVx1MTE2Q1x1MTEwMFx1MTE3M1x1MTFBQgpcdTExMEVcdTExNkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTBFXHUxMTZDXHUxMTA5XHUxMTY1XHUxMUFCClx1MTEwRVx1MTE2Q1x1MTEwOVx1MTE3NVx1MTFBQgpcdTExMEVcdTExNkNcdTExMEJcdTExNjFcdTExQTgKXHUxMTBFXHUxMTZDXHUxMTBDXHUxMTY5XHUxMUJDClx1MTEwRVx1MTE2RVx1MTEwOVx1MTE2NVx1MTFBOApcdTExMEVcdTExNkVcdTExMEJcdTExNjVcdTExQTgKXHUxMTBFXHUxMTZFXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwRVx1MTE2RVx1MTEwRVx1MTE2NVx1MTFBQgpcdTExMEVcdTExNkVcdTExMEVcdTExNzNcdTExQTgKXHUxMTBFXHUxMTZFXHUxMUE4XHUxMTAwXHUxMTZFClx1MTEwRVx1MTE2RVx1MTFBOFx1MTEwOVx1MTE2OQpcdTExMEVcdTExNkVcdTExQThcdTExMENcdTExNjYKXHUxMTBFXHUxMTZFXHUxMUE4XHUxMTEyXHUxMTYxClx1MTEwRVx1MTE2RVx1MTFBRlx1MTEwMFx1MTE3M1x1MTFBQgpcdTExMEVcdTExNkVcdTExQUZcdTExMDdcdTExNjFcdTExQUYKXHUxMTBFXHUxMTZFXHUxMUFGXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwRVx1MTE2RVx1MTFBRlx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMEVcdTExNkVcdTExQUZcdTExMEJcdTExNjdcdTExQUIKXHUxMTBFXHUxMTZFXHUxMUFGXHUxMTBCXHUxMTc1XHUxMUI4Clx1MTEwRVx1MTE2RVx1MTFBRlx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMEVcdTExNkVcdTExQUZcdTExMTFcdTExNjFcdTExQUIKXHUxMTBFXHUxMTZFXHUxMUJDXHUxMTAwXHUxMTY3XHUxMUE4Clx1MTEwRVx1MTE2RVx1MTFCQ1x1MTEwMFx1MTE2OQpcdTExMEVcdTExNkVcdTExQkNcdTExMDNcdTExNjlcdTExQUYKXHUxMTBFXHUxMTZFXHUxMUJDXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwRVx1MTE2RVx1MTFCQ1x1MTEwRVx1MTE2NVx1MTFCQ1x1MTEwM1x1MTE2OQpcdTExMEVcdTExNzFcdTExMEJcdTExNjVcdTExQjgKXHUxMTBFXHUxMTcxXHUxMTBDXHUxMTc1XHUxMUE4Clx1MTEwRVx1MTE3MVx1MTExMlx1MTE2M1x1MTFCQwpcdTExMEVcdTExNzVcdTExMEJcdTExNjNcdTExQTgKXHUxMTBFXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTZFClx1MTEwRVx1MTE3NVx1MTFBQlx1MTEwRVx1MTE2NVx1MTFBOApcdTExMEVcdTExNzVcdTExQUZcdTExMDlcdTExNzVcdTExQjgKXHUxMTBFXHUxMTc1XHUxMUFGXHUxMTBCXHUxMTZGXHUxMUFGClx1MTEwRVx1MTE3NVx1MTFBRlx1MTExMVx1MTE2MVx1MTFBQgpcdTExMEVcdTExNzVcdTExQjdcdTExMDNcdTExNjIKXHUxMTBFXHUxMTc1XHUxMUI3XHUxMTA2XHUxMTZFXHUxMUE4Clx1MTEwRVx1MTE3NVx1MTFCN1x1MTEwOVx1MTE3NVx1MTFBRgpcdTExMEVcdTExNzVcdTExQkFcdTExMDlcdTExNjlcdTExQUYKXHUxMTBFXHUxMTc1XHUxMUJDXHUxMTBFXHUxMTYxXHUxMUFCClx1MTEwRlx1MTE2MVx1MTEwNlx1MTE2Nlx1MTEwNVx1MTE2MQpcdTExMEZcdTExNjFcdTExMEJcdTExNkVcdTExQUJcdTExMTBcdTExNjUKXHUxMTBGXHUxMTYxXHUxMUFGXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTA5XHUxMTZFClx1MTEwRlx1MTE2Mlx1MTEwNVx1MTE3NVx1MTFBOFx1MTExMFx1MTE2NQpcdTExMEZcdTExNjJcdTExQjdcdTExMTFcdTExNjVcdTExMDlcdTExNzMKXHUxMTBGXHUxMTYyXHUxMUI3XHUxMTExXHUxMTY2XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwRlx1MTE2NVx1MTExMFx1MTE3M1x1MTFBQgpcdTExMEZcdTExNjVcdTExQUJcdTExMDNcdTExNzVcdTExMDlcdTExNjdcdTExQUIKXHUxMTBGXHUxMTY1XHUxMUFGXHUxMTA1XHUxMTY1Clx1MTEwRlx1MTE2NVx1MTFCN1x1MTExMVx1MTE3Mlx1MTExMFx1MTE2NQpcdTExMEZcdTExNjlcdTExMDFcdTExNzVcdTExMDVcdTExNzUKXHUxMTBGXHUxMTY5XHUxMTA2XHUxMTc1XHUxMTAzXHUxMTc1Clx1MTEwRlx1MTE2OVx1MTFBQlx1MTEwOVx1MTE2NVx1MTExMFx1MTE3MwpcdTExMEZcdTExNjlcdTExQUZcdTExMDVcdTExNjEKXHUxMTBGXHUxMTY5XHUxMUI3XHUxMTExXHUxMTczXHUxMUFGXHUxMTA1XHUxMTY2XHUxMUE4XHUxMTA5XHUxMTczClx1MTEwRlx1MTE2OVx1MTFCQ1x1MTEwMlx1MTE2MVx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMEZcdTExNkJcdTExMDBcdTExNjFcdTExQjcKXHUxMTBGXHUxMTZFXHUxMTAzXHUxMTY2XHUxMTEwXHUxMTYxClx1MTEwRlx1MTE3M1x1MTEwNVx1MTE3NVx1MTFCNwpcdTExMEZcdTExNzNcdTExQUJcdTExMDBcdTExNzVcdTExQUYKXHUxMTBGXHUxMTczXHUxMUFCXHUxMTA0XHUxMTYxXHUxMUFGClx1MTEwRlx1MTE3M1x1MTFBQlx1MTEwOVx1MTE2OVx1MTEwNVx1MTE3NQpcdTExMEZcdTExNzNcdTExQUJcdTExMEJcdTExNjFcdTExMDNcdTExNzNcdTExQUYKXHUxMTBGXHUxMTczXHUxMUFCXHUxMTBCXHUxMTY1XHUxMTA2XHUxMTY1XHUxMTAyXHUxMTc1Clx1MTEwRlx1MTE3M1x1MTFBQlx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMEZcdTExNzNcdTExQUJcdTExMENcdTExNjVcdTExQUYKXHUxMTBGXHUxMTczXHUxMUFGXHUxMTA1XHUxMTYyXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwRlx1MTE3M1x1MTFBRlx1MTEwNVx1MTE2NVx1MTFCOApcdTExMEZcdTExNzVcdTExQUZcdTExMDVcdTExNjkKXHUxMTEwXHUxMTYxXHUxMTBCXHUxMTc1XHUxMUI4Clx1MTExMFx1MTE2MVx1MTEwQ1x1MTE2MVx1MTEwMFx1MTE3NQpcdTExMTBcdTExNjFcdTExQThcdTExMDBcdTExNkUKXHUxMTEwXHUxMTYxXHUxMUE4XHUxMTBDXHUxMTYxClx1MTExMFx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFCQwpcdTExMTBcdTExNjJcdTExMDBcdTExNkZcdTExQUJcdTExMDNcdTExNjkKXHUxMTEwXHUxMTYyXHUxMTBCXHUxMTYzXHUxMUJDClx1MTExMFx1MTE2Mlx1MTExMVx1MTE2RVx1MTFCQwpcdTExMTBcdTExNjJcdTExQThcdTExMDlcdTExNzUKXHUxMTEwXHUxMTYyXHUxMUFGXHUxMTA1XHUxMTY1XHUxMUFCXHUxMTEwXHUxMTczClx1MTExMFx1MTE2NVx1MTEwMlx1MTE2NVx1MTFBRgpcdTExMTBcdTExNjVcdTExMDZcdTExNzVcdTExMDJcdTExNjVcdTExQUYKXHUxMTEwXHUxMTY2XHUxMTAyXHUxMTc1XHUxMTA5XHUxMTczClx1MTExMFx1MTE2Nlx1MTEwOVx1MTE3M1x1MTExMFx1MTE3MwpcdTExMTBcdTExNjZcdTExMEJcdTExNzVcdTExMDdcdTExNzNcdTExQUYKXHUxMTEwXHUxMTY2XHUxMUFGXHUxMTA1XHUxMTY2XHUxMTA3XHUxMTc1XHUxMTBDXHUxMTY1XHUxMUFCClx1MTExMFx1MTE2OVx1MTEwNVx1MTE2OVx1MTFBQgpcdTExMTBcdTExNjlcdTExMDZcdTExNjFcdTExMTBcdTExNjkKXHUxMTEwXHUxMTY5XHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTExMFx1MTE2OVx1MTFCQ1x1MTEwMFx1MTE2OApcdTExMTBcdTExNjlcdTExQkNcdTExMDBcdTExNkEKXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTA1XHUxMTY5Clx1MTExMFx1MTE2OVx1MTFCQ1x1MTEwOVx1MTE3NVx1MTFBQgpcdTExMTBcdTExNjlcdTExQkNcdTExMEJcdTExNjdcdTExQTgKXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTc1XHUxMUFGClx1MTExMFx1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMTBcdTExNjlcdTExQkNcdTExMENcdTExNjYKXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTBDXHUxMTczXHUxMUJDClx1MTExMFx1MTE2OVx1MTFCQ1x1MTExMlx1MTE2MVx1MTFCOApcdTExMTBcdTExNjlcdTExQkNcdTExMTJcdTExNkEKXHUxMTEwXHUxMTZDXHUxMTAwXHUxMTczXHUxMUFCClx1MTExMFx1MTE2Q1x1MTEwQlx1MTE2Rlx1MTFBQgpcdTExMTBcdTExNkNcdTExMENcdTExNzVcdTExQThcdTExMDBcdTExNzNcdTExQjcKXHUxMTEwXHUxMTcxXHUxMTAwXHUxMTc1XHUxMUI3Clx1MTExMFx1MTE3M1x1MTEwNVx1MTE2NVx1MTFBOApcdTExMTBcdTExNzNcdTExQThcdTExMDBcdTExNzNcdTExQjgKXHUxMTEwXHUxMTczXHUxMUE4XHUxMTA3XHUxMTY3XHUxMUFGClx1MTExMFx1MTE3M1x1MTFBOFx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMTBcdTExNzNcdTExQThcdTExMDlcdTExNkUKXHUxMTEwXHUxMTczXHUxMUE4XHUxMTBDXHUxMTc1XHUxMUJDClx1MTExMFx1MTE3M1x1MTFBOFx1MTExMlx1MTE3NQpcdTExMTBcdTExNzNcdTExQUJcdTExMTBcdTExNzNcdTExQUJcdTExMTJcdTExNzUKXHUxMTEwXHUxMTc1XHUxMTA5XHUxMTY3XHUxMTBFXHUxMTczClx1MTExMVx1MTE2MVx1MTEwNVx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMTFcdTExNjFcdTExMEJcdTExNzVcdTExQUYKXHUxMTExXHUxMTYxXHUxMTBFXHUxMTZFXHUxMUFGXHUxMTA5XHUxMTY5Clx1MTExMVx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2N1x1MTFBRgpcdTExMTFcdTExNjFcdTExQUJcdTExMDNcdTExNjFcdTExQUIKXHUxMTExXHUxMTYxXHUxMUFCXHUxMTA2XHUxMTYyClx1MTExMVx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2MQpcdTExMTFcdTExNjFcdTExQUZcdTExMDlcdTExNzVcdTExQjgKXHUxMTExXHUxMTYxXHUxMUFGXHUxMTBCXHUxMTZGXHUxMUFGClx1MTExMVx1MTE2MVx1MTFCOFx1MTEwOVx1MTE2OVx1MTFCQwpcdTExMTFcdTExNjJcdTExMDlcdTExNjdcdTExQUIKXHUxMTExXHUxMTYyXHUxMUE4XHUxMTA5XHUxMTczClx1MTExMVx1MTE2Mlx1MTFBOFx1MTEwOVx1MTE3NVx1MTEwNlx1MTE3NVx1MTFBRlx1MTEwNVx1MTE3NQpcdTExMTFcdTExNjJcdTExQUJcdTExMTBcdTExNzUKXHUxMTExXHUxMTY1XHUxMTA5XHUxMTY2XHUxMUFCXHUxMTEwXHUxMTczClx1MTExMVx1MTE2Nlx1MTEwQlx1MTE3NVx1MTFBQlx1MTExMFx1MTE3MwpcdTExMTFcdTExNjdcdTExQUJcdTExMDBcdTExNjdcdTExQUIKXHUxMTExXHUxMTY3XHUxMUFCXHUxMTBCXHUxMTc0Clx1MTExMVx1MTE2N1x1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMTFcdTExNjdcdTExQUJcdTExMTJcdTExNzUKXHUxMTExXHUxMTY3XHUxMUJDXHUxMTAwXHUxMTYxClx1MTExMVx1MTE2N1x1MTFCQ1x1MTEwMFx1MTE3Mlx1MTFBQgpcdTExMTFcdTExNjdcdTExQkNcdTExMDlcdTExNjJcdTExQkMKXHUxMTExXHUxMTY3XHUxMUJDXHUxMTA5XHUxMTY5Clx1MTExMVx1MTE2N1x1MTFCQ1x1MTEwQlx1MTE2M1x1MTFCQwpcdTExMTFcdTExNjdcdTExQkNcdTExMEJcdTExNzVcdTExQUYKXHUxMTExXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTZBClx1MTExMVx1MTE2OVx1MTEwOVx1MTE3M1x1MTExMFx1MTE2NQpcdTExMTFcdTExNjlcdTExMEJcdTExNzVcdTExQUJcdTExMTBcdTExNzMKXHUxMTExXHUxMTY5XHUxMTBDXHUxMTYxXHUxMUJDClx1MTExMVx1MTE2OVx1MTExMlx1MTE2MVx1MTFCNwpcdTExMTFcdTExNkRcdTExMDZcdTExNjdcdTExQUIKXHUxMTExXHUxMTZEXHUxMTBDXHUxMTY1XHUxMUJDClx1MTExMVx1MTE2RFx1MTEwQ1x1MTE2RVx1MTFBQgpcdTExMTFcdTExNkRcdTExMTJcdTExNjdcdTExQUIKXHUxMTExXHUxMTZFXHUxMUI3XHUxMTA2XHUxMTY5XHUxMUE4Clx1MTExMVx1MTE2RVx1MTFCN1x1MTEwQ1x1MTE3NVx1MTFBRgpcdTExMTFcdTExNkVcdTExQkNcdTExMDBcdTExNjdcdTExQkMKXHUxMTExXHUxMTZFXHUxMUJDXHUxMTA5XHUxMTY5XHUxMUE4Clx1MTExMVx1MTE2RVx1MTFCQ1x1MTEwOVx1MTE3M1x1MTFCOApcdTExMTFcdTExNzNcdTExMDVcdTExNjFcdTExQkNcdTExMDlcdTExNzMKXHUxMTExXHUxMTczXHUxMTA1XHUxMTc1XHUxMUFCXHUxMTEwXHUxMTY1Clx1MTExMVx1MTE3M1x1MTFBRlx1MTEwNVx1MTE2MVx1MTEwOVx1MTE3M1x1MTExMFx1MTE3NVx1MTFBOApcdTExMTFcdTExNzVcdTExMDBcdTExNjlcdTExQUIKXHUxMTExXHUxMTc1XHUxMTA2XHUxMTYxXHUxMUJDClx1MTExMVx1MTE3NVx1MTEwQlx1MTE2MVx1MTEwMlx1MTE2OQpcdTExMTFcdTExNzVcdTExQUZcdTExMDVcdTExNzNcdTExQjcKXHUxMTExXHUxMTc1XHUxMUFGXHUxMTA5XHUxMTZFClx1MTExMVx1MTE3NVx1MTFBRlx1MTEwQlx1MTE2RApcdTExMTFcdTExNzVcdTExQUZcdTExMENcdTExNjEKXHUxMTExXHUxMTc1XHUxMUFGXHUxMTEwXHUxMTY5XHUxMUJDClx1MTExMVx1MTE3NVx1MTFCQ1x1MTEwMFx1MTE2OApcdTExMTJcdTExNjFcdTExMDJcdTExNzNcdTExMDJcdTExNzVcdTExQjcKXHUxMTEyXHUxMTYxXHUxMTAyXHUxMTczXHUxMUFGClx1MTExMlx1MTE2MVx1MTEwM1x1MTE3M1x1MTEwQlx1MTE3MFx1MTEwQlx1MTE2NQpcdTExMTJcdTExNjFcdTExMDVcdTExNkVcdTExQkFcdTExMDdcdTExNjFcdTExQjcKXHUxMTEyXHUxMTYxXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTAwXHUxMTc1Clx1MTExMlx1MTE2MVx1MTEwOVx1MTE2RVx1MTFBOFx1MTEwQ1x1MTE3NVx1MTFCOApcdTExMTJcdTExNjFcdTExMDlcdTExNkVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMTBCXHUxMTY3XHUxMTEwXHUxMTczXHUxMUFCClx1MTExMlx1MTE2MVx1MTEwQ1x1MTE3NVx1MTEwNlx1MTE2MVx1MTFBQgpcdTExMTJcdTExNjFcdTExMEVcdTExNjVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMTExXHUxMTZFXHUxMUI3Clx1MTExMlx1MTE2MVx1MTExMVx1MTE3NVx1MTFBRgpcdTExMTJcdTExNjFcdTExQThcdTExMDBcdTExNkEKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTAwXHUxMTZEClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwMFx1MTE3M1x1MTFCOApcdTExMTJcdTExNjFcdTExQThcdTExMDBcdTExNzUKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTAyXHUxMTY3XHUxMUFCClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwNVx1MTE2N1x1MTFBOApcdTExMTJcdTExNjFcdTExQThcdTExMDdcdTExNjVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA3XHUxMTZFXHUxMTA2XHUxMTY5Clx1MTExMlx1MTE2MVx1MTFBOFx1MTEwN1x1MTE3NQpcdTExMTJcdTExNjFcdTExQThcdTExMDlcdTExNjJcdTExQkMKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTZFXHUxMUFGClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwOVx1MTE3M1x1MTFCOApcdTExMTJcdTExNjFcdTExQThcdTExMEJcdTExNkRcdTExQkNcdTExMTFcdTExNkVcdTExQjcKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTBCXHUxMTZGXHUxMUFCClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwQlx1MTE3MQpcdTExMTJcdTExNjFcdTExQThcdTExMENcdTExNjEKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTBDXHUxMTY1XHUxMUI3Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2OApcdTExMTJcdTExNjFcdTExQUJcdTExMDBcdTExNzNcdTExQUYKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTAxXHUxMTY1XHUxMTA3XHUxMTY1XHUxMUFCXHUxMTBCXHUxMTY2Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwMlx1MTE2MVx1MTFCRApcdTExMTJcdTExNjFcdTExQUJcdTExMDJcdTExNkVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTAzXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTYxXHUxMUFCClx1MTExMlx1MTE2MVx1MTFBQlx1MTEwNFx1MTE2MgpcdTExMTJcdTExNjFcdTExQUJcdTExMDVcdTExNjFcdTExMDlcdTExNjFcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTA2XHUxMTYxXHUxMTAzXHUxMTc1Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMTJcdTExNjFcdTExQUJcdTExMDdcdTExNjVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTA3XHUxMTY5XHUxMUE4Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwOVx1MTE3NVx1MTFBOApcdTExMTJcdTExNjFcdTExQUJcdTExMEJcdTExNjdcdTExMDVcdTExNzNcdTExQjcKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTBEXHUxMTY5XHUxMUE4Clx1MTExMlx1MTE2MVx1MTFBRlx1MTEwNlx1MTE2NVx1MTEwMlx1MTE3NQpcdTExMTJcdTExNjFcdTExQUZcdTExMEJcdTExNjFcdTExMDdcdTExNjVcdTExMENcdTExNzUKXHUxMTEyXHUxMTYxXHUxMUFGXHUxMTBCXHUxMTc1XHUxMUFCClx1MTExMlx1MTE2MVx1MTFCN1x1MTEwMVx1MTE2NgpcdTExMTJcdTExNjFcdTExQjdcdTExMDdcdTExNkVcdTExMDVcdTExNjkKXHUxMTEyXHUxMTYxXHUxMUI4XHUxMTAwXHUxMTY3XHUxMUE4Clx1MTExMlx1MTE2MVx1MTFCOFx1MTEwNVx1MTE3NVx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMTJcdTExNjFcdTExQkNcdTExMDBcdTExNjlcdTExQkMKXHUxMTEyXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTZFClx1MTExMlx1MTE2MVx1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQwpcdTExMTJcdTExNjFcdTExQkNcdTExMEJcdTExNzQKXHUxMTEyXHUxMTYyXHUxMTAwXHUxMTY3XHUxMUFGClx1MTExMlx1MTE2Mlx1MTEwMFx1MTE2RVx1MTFBQgpcdTExMTJcdTExNjJcdTExMDNcdTExNjFcdTExQjgKXHUxMTEyXHUxMTYyXHUxMTAzXHUxMTYxXHUxMUJDClx1MTExMlx1MTE2Mlx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMTJcdTExNjJcdTExMDlcdTExNjVcdTExQTgKXHUxMTEyXHUxMTYyXHUxMTA5XHUxMTY1XHUxMUFGClx1MTExMlx1MTE2Mlx1MTEwOVx1MTE2RVx1MTEwQlx1MTE2RFx1MTFBOFx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMTJcdTExNjJcdTExMEJcdTExNjFcdTExQUIKXHUxMTEyXHUxMTYyXHUxMUE4XHUxMTA5XHUxMTc1XHUxMUI3Clx1MTExMlx1MTE2Mlx1MTFBQlx1MTEwM1x1MTE3M1x1MTEwN1x1MTE2Mlx1MTFBOApcdTExMTJcdTExNjJcdTExQjdcdTExMDdcdTExNjVcdTExMDBcdTExNjUKXHUxMTEyXHUxMTYyXHUxMUJBXHUxMTA3XHUxMTY3XHUxMUMwClx1MTExMlx1MTE2Mlx1MTFCQVx1MTEwOVx1MTE2MVx1MTFBRgpcdTExMTJcdTExNjJcdTExQkNcdTExMDNcdTExNjlcdTExQkMKXHUxMTEyXHUxMTYyXHUxMUJDXHUxMTA3XHUxMTY5XHUxMUE4Clx1MTExMlx1MTE2Mlx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMTJcdTExNjJcdTExQkNcdTExMEJcdTExNkVcdTExQUIKXHUxMTEyXHUxMTYyXHUxMUJDXHUxMTBCXHUxMTcxClx1MTExMlx1MTE2M1x1MTFCQ1x1MTEwMFx1MTE3NQpcdTExMTJcdTExNjNcdTExQkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTEyXHUxMTYzXHUxMUJDXHUxMTA5XHUxMTZFClx1MTExMlx1MTE2NVx1MTEwNVx1MTE2MVx1MTFBOApcdTExMTJcdTExNjVcdTExMEJcdTExNkRcdTExQkMKXHUxMTEyXHUxMTY2XHUxMUFGXHUxMTAwXHUxMTc1Clx1MTExMlx1MTE2N1x1MTFBQlx1MTEwMFx1MTE2QVx1MTFBQgpcdTExMTJcdTExNjdcdTExQUJcdTExMDBcdTExNzNcdTExQjcKXHUxMTEyXHUxMTY3XHUxMUFCXHUxMTAzXHUxMTYyClx1MTExMlx1MTE2N1x1MTFBQlx1MTEwOVx1MTE2MVx1MTFCQwpcdTExMTJcdTExNjdcdTExQUJcdTExMDlcdTExNzVcdTExQUYKXHUxMTEyXHUxMTY3XHUxMUFCXHUxMTBDXHUxMTYxXHUxMUJDClx1MTExMlx1MTE2N1x1MTFBQlx1MTEwQ1x1MTE2MgpcdTExMTJcdTExNjdcdTExQUJcdTExMENcdTExNzUKXHUxMTEyXHUxMTY3XHUxMUFGXHUxMTBCXHUxMTYyXHUxMUE4Clx1MTExMlx1MTE2N1x1MTFCOFx1MTEwNVx1MTE2N1x1MTFBOApcdTExMTJcdTExNjdcdTExQkNcdTExMDdcdTExNkUKXHUxMTEyXHUxMTY3XHUxMUJDXHUxMTA5XHUxMTYxClx1MTExMlx1MTE2N1x1MTFCQ1x1MTEwOVx1MTE2RQpcdTExMTJcdTExNjdcdTExQkNcdTExMDlcdTExNzVcdTExQTgKXHUxMTEyXHUxMTY3XHUxMUJDXHUxMTBDXHUxMTY2Clx1MTExMlx1MTE2N1x1MTFCQ1x1MTExMFx1MTE2MgpcdTExMTJcdTExNjdcdTExQkNcdTExMTFcdTExNjdcdTExQUIKXHUxMTEyXHUxMTY4XHUxMTEwXHUxMTYyXHUxMUE4Clx1MTExMlx1MTE2OVx1MTEwMFx1MTE3NVx1MTEwOVx1MTE3NVx1MTFCNwpcdTExMTJcdTExNjlcdTExMDJcdTExNjFcdTExQjcKXHUxMTEyXHUxMTY5XHUxMTA1XHUxMTYxXHUxMUJDXHUxMTBCXHUxMTc1Clx1MTExMlx1MTE2OVx1MTEwN1x1MTE2MVx1MTFBOApcdTExMTJcdTExNjlcdTExMTBcdTExNjZcdTExQUYKXHUxMTEyXHUxMTY5XHUxMTEyXHUxMTczXHUxMUI4Clx1MTExMlx1MTE2OVx1MTFBOFx1MTEwOVx1MTE3NQpcdTExMTJcdTExNjlcdTExQUZcdTExMDVcdTExNjkKXHUxMTEyXHUxMTY5XHUxMUI3XHUxMTExXHUxMTY2XHUxMTBCXHUxMTc1XHUxMTBDXHUxMTc1Clx1MTExMlx1MTE2OVx1MTFCQ1x1MTEwN1x1MTE2OQpcdTExMTJcdTExNjlcdTExQkNcdTExMDlcdTExNkUKXHUxMTEyXHUxMTY5XHUxMUJDXHUxMTBFXHUxMTYxClx1MTExMlx1MTE2QVx1MTEwNlx1MTE2N1x1MTFBQgpcdTExMTJcdTExNkFcdTExMDdcdTExNkVcdTExQUIKXHUxMTEyXHUxMTZBXHUxMTA5XHUxMTYxXHUxMUFGClx1MTExMlx1MTE2QVx1MTEwQlx1MTE2RFx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMTJcdTExNkFcdTExMENcdTExNjFcdTExQkMKXHUxMTEyXHUxMTZBXHUxMTEyXHUxMTYxXHUxMUE4Clx1MTExMlx1MTE2QVx1MTFBOFx1MTEwN1x1MTE2OQpcdTExMTJcdTExNkFcdTExQThcdTExMEJcdTExNzVcdTExQUIKXHUxMTEyXHUxMTZBXHUxMUE4XHUxMTBDXHUxMTYxXHUxMUJDClx1MTExMlx1MTE2QVx1MTFBOFx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMTJcdTExNkFcdTExQUJcdTExMDBcdTExNjFcdTExQjgKXHUxMTEyXHUxMTZBXHUxMUFCXHUxMTAwXHUxMTY3XHUxMUJDClx1MTExMlx1MTE2QVx1MTFBQlx1MTEwQlx1MTE2N1x1MTFCQwpcdTExMTJcdTExNkFcdTExQUJcdTExMEJcdTExNzJcdTExQUYKXHUxMTEyXHUxMTZBXHUxMUFCXHUxMTBDXHUxMTYxClx1MTExMlx1MTE2QVx1MTFBRlx1MTEwMFx1MTE3NQpcdTExMTJcdTExNkFcdTExQUZcdTExMDNcdTExNjlcdTExQkMKXHUxMTEyXHUxMTZBXHUxMUFGXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTEyXHUxMTc1Clx1MTExMlx1MTE2QVx1MTFBRlx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMTJcdTExNkFcdTExQUZcdTExMERcdTExNjFcdTExQTgKXHUxMTEyXHUxMTZDXHUxMTAwXHUxMTY3XHUxMUFCClx1MTExMlx1MTE2Q1x1MTEwMFx1MTE2QVx1MTFBQgpcdTExMTJcdTExNkNcdTExMDdcdTExNjlcdTExQTgKXHUxMTEyXHUxMTZDXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTExMlx1MTE2Q1x1MTEwQlx1MTE2Rlx1MTFBQgpcdTExMTJcdTExNkNcdTExMENcdTExNjFcdTExQkMKXHUxMTEyXHUxMTZDXHUxMTBDXHUxMTY1XHUxMUFCClx1MTExMlx1MTE2Q1x1MTFCQVx1MTEwOVx1MTE2RQpcdTExMTJcdTExNkNcdTExQkNcdTExMDNcdTExNjFcdTExQUJcdTExMDdcdTExNjlcdTExMDNcdTExNjkKXHUxMTEyXHUxMTZEXHUxMTBCXHUxMTcyXHUxMUFGXHUxMTBDXHUxMTY1XHUxMUE4Clx1MTExMlx1MTE2RVx1MTEwN1x1MTE2MVx1MTFBQgpcdTExMTJcdTExNkVcdTExMEVcdTExNkVcdTExQkFcdTExMDBcdTExNjFcdTExMDVcdTExNkUKXHUxMTEyXHUxMTZFXHUxMUFCXHUxMTA1XHUxMTY3XHUxMUFCClx1MTExMlx1MTE2Rlx1MTFBRlx1MTEwQVx1MTE3NVx1MTFBQgpcdTExMTJcdTExNzJcdTExMDlcdTExNzVcdTExQTgKXHUxMTEyXHUxMTcyXHUxMTBCXHUxMTc1XHUxMUFGClx1MTExMlx1MTE3Mlx1MTFCQ1x1MTEwMlx1MTE2MgpcdTExMTJcdTExNzNcdTExMDVcdTExNzNcdTExQjcKXHUxMTEyXHUxMTczXHUxMUE4XHUxMTA3XHUxMTYyXHUxMUE4Clx1MTExMlx1MTE3M1x1MTFBOFx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMTJcdTExNzNcdTExQUJcdTExMENcdTExNjVcdTExQTgKXHUxMTEyXHUxMTczXHUxMUFCXHUxMTEyXHUxMTc1Clx1MTExMlx1MTE3M1x1MTFCQ1x1MTEwNlx1MTE3NQpcdTExMTJcdTExNzNcdTExQkNcdTExMDdcdTExNkVcdTExQUIKXHUxMTEyXHUxMTc0XHUxMTAwXHUxMTY5XHUxMUE4Clx1MTExMlx1MTE3NFx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMTJcdTExNzRcdTExMDlcdTExNjJcdTExQkMKXHUxMTEyXHUxMTc0XHUxMUFCXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTExMlx1MTE3NVx1MTFCN1x1MTEwMVx1MTE2NVx1MTFCQWAuc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy9zaW1wbGlmaWVkLWNoaW5lc2UuanMKICB2YXIgd29yZGxpc3Q3ID0gYFx1NzY4NApcdTRFMDAKXHU2NjJGClx1NTcyOApcdTRFMEQKXHU0RTg2Clx1NjcwOQpcdTU0OEMKXHU0RUJBClx1OEZEOQpcdTRFMkQKXHU1OTI3Clx1NEUzQQpcdTRFMEEKXHU0RTJBClx1NTZGRApcdTYyMTEKXHU0RUU1Clx1ODk4MQpcdTRFRDYKXHU2NUY2Clx1Njc2NQpcdTc1MjgKXHU0RUVDClx1NzUxRgpcdTUyMzAKXHU0RjVDClx1NTczMApcdTRFOEUKXHU1MUZBClx1NUMzMQpcdTUyMDYKXHU1QkY5Clx1NjIxMApcdTRGMUEKXHU1M0VGClx1NEUzQgpcdTUzRDEKXHU1RTc0Clx1NTJBOApcdTU0MEMKXHU1REU1Clx1NEU1RgpcdTgwRkQKXHU0RTBCClx1OEZDNwpcdTVCNTAKXHU4QkY0Clx1NEVBNwpcdTc5Q0QKXHU5NzYyClx1ODAwQwpcdTY1QjkKXHU1NDBFClx1NTkxQQpcdTVCOUEKXHU4ODRDClx1NUI2NgpcdTZDRDUKXHU2MjQwClx1NkMxMQpcdTVGOTcKXHU3RUNGClx1NTM0MQpcdTRFMDkKXHU0RTRCClx1OEZEQgpcdTc3NDAKXHU3QjQ5Clx1OTBFOApcdTVFQTYKXHU1QkI2Clx1NzUzNQpcdTUyOUIKXHU5MUNDClx1NTk4MgpcdTZDMzQKXHU1MzE2Clx1OUFEOApcdTgxRUEKXHU0RThDClx1NzQwNgpcdThENzcKXHU1QzBGClx1NzI2OQpcdTczQjAKXHU1QjlFClx1NTJBMApcdTkxQ0YKXHU5MEZEClx1NEUyNApcdTRGNTMKXHU1MjM2Clx1NjczQQpcdTVGNTMKXHU0RjdGClx1NzBCOQpcdTRFQ0UKXHU0RTFBClx1NjcyQwpcdTUzQkIKXHU2MjhBClx1NjAyNwpcdTU5N0QKXHU1RTk0Clx1NUYwMApcdTVCODMKXHU1NDA4Clx1OEZEOApcdTU2RTAKXHU3NTMxClx1NTE3NgpcdTRFOUIKXHU3MTM2Clx1NTI0RApcdTU5MTYKXHU1OTI5Clx1NjUzRgpcdTU2REIKXHU2NUU1Clx1OTBBMwpcdTc5M0UKXHU0RTQ5Clx1NEU4QgpcdTVFNzMKXHU1RjYyClx1NzZGOApcdTUxNjgKXHU4ODY4Clx1OTVGNApcdTY4MzcKXHU0RTBFClx1NTE3MwpcdTU0MDQKXHU5MUNEClx1NjVCMApcdTdFQkYKXHU1MTg1Clx1NjU3MApcdTZCNjMKXHU1RkMzClx1NTNDRApcdTRGNjAKXHU2NjBFClx1NzcwQgpcdTUzOUYKXHU1M0M4Clx1NEU0OApcdTUyMjkKXHU2QkQ0Clx1NjIxNgpcdTRGNDYKXHU4RDI4Clx1NkMxNApcdTdCMkMKXHU1NDExClx1OTA1MwpcdTU0N0QKXHU2QjY0Clx1NTNEOApcdTY3NjEKXHU1M0VBClx1NkNBMQpcdTdFRDMKXHU4OUUzClx1OTVFRQpcdTYxMEYKXHU1RUZBClx1NjcwOApcdTUxNkMKXHU2NUUwClx1N0NGQgpcdTUxOUIKXHU1Rjg4Clx1NjBDNQpcdTgwMDUKXHU2NzAwClx1N0FDQgpcdTRFRTMKXHU2MEYzClx1NURGMgpcdTkwMUEKXHU1RTc2Clx1NjNEMApcdTc2RjQKXHU5ODk4Clx1NTE1QQpcdTdBMEIKXHU1QzU1Clx1NEU5NApcdTY3OUMKXHU2NTk5Clx1OEM2MQpcdTU0NTgKXHU5NzY5Clx1NEY0RApcdTUxNjUKXHU1RTM4Clx1NjU4NwpcdTYwM0IKXHU2QjIxClx1NTRDMQpcdTVGMEYKXHU2RDNCClx1OEJCRQpcdTUzQ0EKXHU3QkExClx1NzI3OQpcdTRFRjYKXHU5NTdGClx1NkM0MgpcdTgwMDEKXHU1OTM0Clx1NTdGQQpcdThENDQKXHU4RkI5Clx1NkQ0MQpcdThERUYKXHU3RUE3Clx1NUMxMQpcdTU2RkUKXHU1QzcxClx1N0VERgpcdTYzQTUKXHU3N0U1Clx1OEY4MwpcdTVDMDYKXHU3RUM0Clx1ODlDMQpcdThCQTEKXHU1MjJCClx1NTk3OQpcdTYyNEIKXHU4OUQyClx1NjcxRgpcdTY4MzkKXHU4QkJBClx1OEZEMApcdTUxOUMKXHU2MzA3Clx1NTFFMApcdTRFNUQKXHU1MzNBClx1NUYzQQpcdTY1M0UKXHU1MUIzClx1ODk3RgpcdTg4QUIKXHU1RTcyClx1NTA1QQpcdTVGQzUKXHU2MjE4Clx1NTE0OApcdTU2REUKXHU1MjE5Clx1NEVGQgpcdTUzRDYKXHU2MzZFClx1NTkwNApcdTk2MUYKXHU1MzU3Clx1N0VEOQpcdTgyNzIKXHU1MTQ5Clx1OTVFOApcdTUzNzMKXHU0RkREClx1NkNCQgpcdTUzMTcKXHU5MDIwClx1NzY3RQpcdTg5QzQKXHU3MEVEClx1OTg4NgpcdTRFMDMKXHU2RDc3Clx1NTNFMwpcdTRFMUMKXHU1QkZDClx1NTY2OApcdTUzOEIKXHU1RkQ3Clx1NEUxNgpcdTkxRDEKXHU1ODlFClx1NEU4OQpcdTZENEUKXHU5NjM2Clx1NkNCOQpcdTYwMUQKXHU2NzJGClx1Njc4MQpcdTRFQTQKXHU1M0Q3Clx1ODA1NApcdTRFQzAKXHU4QkE0Clx1NTE2RApcdTUxNzEKXHU2NzQzClx1NjUzNgpcdThCQzEKXHU2NTM5Clx1NkUwNQpcdTdGOEUKXHU1MThEClx1OTFDNwpcdThGNkMKXHU2NkY0Clx1NTM1NQpcdTk4Q0UKXHU1MjA3Clx1NjI1MwpcdTc2N0QKXHU2NTU5Clx1OTAxRgpcdTgyQjEKXHU1RTI2Clx1NUI4OQpcdTU3M0EKXHU4RUFCClx1OEY2NgpcdTRGOEIKXHU3NzFGClx1NTJBMQpcdTUxNzcKXHU0RTA3Clx1NkJDRgpcdTc2RUUKXHU4MUYzClx1OEZCRQpcdThENzAKXHU3OUVGClx1NzkzQQpcdThCQUUKXHU1OEYwClx1NjJBNQpcdTY1OTcKXHU1QjhDClx1N0M3QgpcdTUxNkIKXHU3OUJCClx1NTM0RQpcdTU0MEQKXHU3ODZFClx1NjI0RApcdTc5RDEKXHU1RjIwClx1NEZFMQpcdTlBNkMKXHU4MjgyClx1OEJERApcdTdDNzMKXHU2NTc0Clx1N0E3QQpcdTUxNDMKXHU1MUI1Clx1NEVDQQpcdTk2QzYKXHU2RTI5Clx1NEYyMApcdTU3MUYKXHU4QkI4Clx1NkI2NQpcdTdGQTQKXHU1RTdGClx1NzdGMwpcdThCQjAKXHU5NzAwClx1NkJCNQpcdTc4MTQKXHU3NTRDClx1NjJDOQpcdTY3OTcKXHU1RjhCClx1NTNFQgpcdTRFMTQKXHU3QTc2Clx1ODlDMgpcdThEOEEKXHU3RUM3Clx1ODhDNQpcdTVGNzEKXHU3Qjk3Clx1NEY0RQpcdTYzMDEKXHU5N0YzClx1NEYxNwpcdTRFNjYKXHU1RTAzClx1NTkwRApcdTVCQjkKXHU1MTNGClx1OTg3QgpcdTk2NDUKXHU1NTQ2Clx1OTc1RQpcdTlBOEMKXHU4RkRFClx1NjVBRApcdTZERjEKXHU5NkJFClx1OEZEMQpcdTc3RkYKXHU1MzQzClx1NTQ2OApcdTU5RDQKXHU3RDIwClx1NjI4MApcdTU5MDcKXHU1MzRBClx1NTI5RQpcdTk3NTIKXHU3NzAxClx1NTIxNwpcdTRFNjAKXHU1NENEClx1N0VBNgpcdTY1MkYKXHU4MjJDClx1NTNGMgpcdTYxMUYKXHU1MkIzClx1NEZCRgpcdTU2RTIKXHU1RjgwClx1OTE3OApcdTUzODYKXHU1RTAyClx1NTE0QgpcdTRGNTUKXHU5NjY0Clx1NkQ4OApcdTY3ODQKXHU1RTlDClx1NzlGMApcdTU5MkEKXHU1MUM2Clx1N0NCRQpcdTUwM0MKXHU1M0Y3Clx1NzM4NwpcdTY1Q0YKXHU3RUY0Clx1NTIxMgpcdTkwMDkKXHU2ODA3Clx1NTE5OQpcdTVCNTgKXHU1MDE5Clx1NkJEQgpcdTRFQjIKXHU1RkVCClx1NjU0OApcdTY1QUYKXHU5NjYyClx1NjdFNQpcdTZDNUYKXHU1NzhCClx1NzczQwpcdTczOEIKXHU2MzA5Clx1NjgzQwpcdTUxN0IKXHU2NjEzClx1N0Y2RQpcdTZEM0UKXHU1QzQyClx1NzI0NwpcdTU5Q0IKXHU1Mzc0Clx1NEUxMwpcdTcyQjYKXHU4MEIyClx1NTM4MgpcdTRFQUMKXHU4QkM2Clx1OTAwMgpcdTVDNUUKXHU1NzA2Clx1NTMwNQpcdTcwNkIKXHU0RjRGClx1OEMwMwpcdTZFRTEKXHU1M0JGClx1NUM0MApcdTcxNjcKXHU1M0MyClx1N0VBMgpcdTdFQzYKXHU1RjE1Clx1NTQyQwpcdThCRTUKXHU5NEMxClx1NEVGNwpcdTRFMjUKXHU5OTk2Clx1NUU5NQpcdTZEQjIKXHU1Qjk4Clx1NUZCNwpcdTk2OEYKXHU3NUM1Clx1ODJDRgpcdTU5MzEKXHU1QzE0Clx1NkI3QgpcdThCQjIKXHU5MTREClx1NTk3MwpcdTlFQzQKXHU2M0E4Clx1NjYzRQpcdThDMDgKXHU3RjZBClx1Nzk1RQpcdTgyN0EKXHU1NDYyClx1NUUyRApcdTU0MkIKXHU0RjAxClx1NjcxQgpcdTVCQzYKXHU2Mjc5Clx1ODQyNQpcdTk4NzkKXHU5NjMyClx1NEUzRQpcdTc0MDMKXHU4MkYxClx1NkMyNwpcdTUyQkYKXHU1NDRBClx1Njc0RQpcdTUzRjAKXHU4NDNEClx1NjcyOApcdTVFMkUKXHU4RjZFClx1NzgzNApcdTRFOUEKXHU1RTA4Clx1NTZGNApcdTZDRTgKXHU4RkRDClx1NUI1NwpcdTY3NTAKXHU2MzkyClx1NEY5QgpcdTZDQjMKXHU2MDAxClx1NUMwMQpcdTUzRTYKXHU2NUJEClx1NTFDRgpcdTY4MTEKXHU2RUI2Clx1NjAwRQpcdTZCNjIKXHU2ODQ4Clx1OEEwMApcdTU4RUIKXHU1NzQ3Clx1NkI2NgpcdTU2RkEKXHU1M0Y2Clx1OUM3QwpcdTZDRTIKXHU4OUM2Clx1NEVDNQpcdThEMzkKXHU3RDI3Clx1NzIzMQpcdTVERTYKXHU3QUUwClx1NjVFOQpcdTY3MUQKXHU1QkIzClx1N0VFRApcdThGN0IKXHU2NzBEClx1OEJENQpcdTk4REYKXHU1MTQ1Clx1NTE3NQpcdTZFOTAKXHU1MjI0Clx1NjJBNApcdTUzRjgKXHU4REIzClx1NjdEMApcdTdFQzMKXHU1REVFClx1ODFGNApcdTY3N0YKXHU3NTMwClx1OTY0RApcdTlFRDEKXHU3MkFGClx1OEQxRgpcdTUxRkIKXHU4MzAzClx1N0VFNwpcdTUxNzQKXHU0RjNDClx1NEY1OQpcdTU3NUEKXHU2NkYyClx1OEY5MwpcdTRGRUUKXHU2NTQ1Clx1NTdDRQpcdTU5MkIKXHU1OTFGClx1OTAwMQpcdTdCMTQKXHU4MjM5Clx1NTM2MApcdTUzRjMKXHU4RDIyClx1NTQwMwpcdTVCQ0MKXHU2NjI1Clx1ODA0QwpcdTg5QzkKXHU2QzQ5Clx1NzUzQgpcdTUyOUYKXHU1REY0Clx1OERERgpcdTg2N0QKXHU2NzQyClx1OThERQpcdTY4QzAKXHU1NDM4Clx1NTJBOQpcdTUzNDcKXHU5NjMzClx1NEU5MgpcdTUyMUQKXHU1MjFCClx1NjI5NwpcdTgwMDMKXHU2Mjk1Clx1NTc0RgpcdTdCNTYKXHU1M0U0Clx1NUY4NApcdTYzNjIKXHU2NzJBClx1OEREMQpcdTc1NTkKXHU5NEEyClx1NjZGRQpcdTdBRUYKXHU4RDIzClx1N0FEOQpcdTdCODAKXHU4RkYwClx1OTRCMQpcdTUyNkYKXHU1QzNEClx1NUUxRApcdTVDMDQKXHU4MzQ5Clx1NTFCMgpcdTYyN0YKXHU3MkVDClx1NEVFNApcdTk2NTAKXHU5NjNGClx1NUJBMwpcdTczQUYKXHU1M0NDClx1OEJGNwpcdThEODUKXHU1RkFFClx1OEJBOQpcdTYzQTcKXHU1RERFClx1ODI2RgpcdThGNzQKXHU2MjdFClx1NTQyNgpcdTdFQUEKXHU3NkNBClx1NEY5RApcdTRGMTgKXHU5ODc2Clx1Nzg0MApcdThGN0QKXHU1MDEyClx1NjIzRgpcdTdBODEKXHU1NzUwClx1N0M4OQpcdTY1NEMKXHU3NTY1Clx1NUJBMgpcdTg4ODEKXHU1MUI3Clx1ODBEQwpcdTdFREQKXHU2NzkwClx1NTc1NwpcdTUyNDIKXHU2RDRCClx1NEUxRApcdTUzNEYKXHU4QkM5Clx1NUZGNQpcdTk2NDgKXHU0RUNEClx1N0Y1NwpcdTc2RDAKXHU1M0NCClx1NkQwQgpcdTk1MTkKXHU4MkU2Clx1NTkxQwpcdTUyMTEKXHU3OUZCClx1OTg5MQpcdTkwMTAKXHU5NzYwClx1NkRGNwpcdTZCQ0QKXHU3N0VEClx1NzZBRQpcdTdFQzgKXHU4MDVBClx1NkM3RApcdTY3NTEKXHU0RTkxClx1NTRFQQpcdTY1RTIKXHU4REREClx1NTM2QgpcdTUwNUMKXHU3MEM4Clx1NTkyRQpcdTVCREYKXHU3MEU3Clx1OEZDNQpcdTU4ODMKXHU4MkU1Clx1NTM3MApcdTZEMzIKXHU1MjNCClx1NjJFQwpcdTZGQzAKXHU1QjU0Clx1NjQxRQpcdTc1MUEKXHU1QkE0Clx1NUY4NQpcdTY4MzgKXHU2ODIxClx1NjU2MwpcdTRGQjUKXHU1NDI3Clx1NzUzMgpcdTZFMzgKXHU0RTQ1Clx1ODNEQwpcdTU0NzMKXHU2NUU3Clx1NkEyMQpcdTZFNTYKXHU4RDI3Clx1NjM1RgpcdTk4ODQKXHU5NjNCClx1NkJFQgpcdTY2NkUKXHU3QTMzClx1NEU1OQpcdTU5ODgKXHU2OTBEClx1NjA2RgpcdTYyNjkKXHU5NEY2Clx1OEJFRApcdTYzMjUKXHU5MTUyClx1NUI4OApcdTYyRkYKXHU1RThGClx1N0VCOApcdTUzM0IKXHU3RjNBClx1OTZFOApcdTU0MTcKXHU5NDg4Clx1NTIxOApcdTU1NEEKXHU2MDI1Clx1NTUzMQpcdThCRUYKXHU4QkFEClx1NjEzRgpcdTVCQTEKXHU5NjQ0Clx1ODNCNwpcdTgzMzYKXHU5QzlDClx1N0NBRQpcdTY1QTQKXHU1QjY5Clx1ODEzMQpcdTc4NkIKXHU4MEE1Clx1NTU4NApcdTlGOTkKXHU2RjE0Clx1NzIzNgpcdTZFMTAKXHU4ODQwClx1NkIyMgpcdTY4QjAKXHU2MzhDClx1NkI0QwpcdTZDOTkKXHU1MjFBClx1NjUzQgpcdThDMTMKXHU3NkZFClx1OEJBOApcdTY2NUEKXHU3QzkyClx1NEU3MQpcdTcxQzMKXHU3N0RCClx1NEU0RQpcdTY3NDAKXHU4MzZGClx1NUI4MQpcdTlDODEKXHU4RDM1Clx1OTQ5RgpcdTcxNjQKXHU4QkZCClx1NzNFRApcdTRGMkYKXHU5OTk5Clx1NEVDQgpcdThGRUIKXHU1M0U1Clx1NEUzMApcdTU3RjkKXHU2M0UxClx1NTE3MApcdTYyQzUKXHU1RjI2Clx1ODZDQgpcdTZDODkKXHU1MDQ3Clx1N0E3RgpcdTYyNjcKXHU3QjU0Clx1NEU1MApcdThDMDEKXHU5ODdBClx1NzBERgpcdTdGMjkKXHU1RjgxClx1ODEzOApcdTU1OUMKXHU2NzdFClx1ODExQQpcdTU2RjAKXHU1RjAyClx1NTE0RApcdTgwQ0MKXHU2NjFGClx1Nzk4RgpcdTRFNzAKXHU2N0QzClx1NEU5NQpcdTY5ODIKXHU2MTYyClx1NjAxNQpcdTc4QzEKXHU1MDBEClx1Nzk1NgpcdTc2ODcKXHU0RkMzClx1OTc1OQpcdTg4NjUKXHU4QkM0Clx1N0ZGQgpcdTgwODkKXHU4REY1Clx1NUMzQwpcdTg4NjMKXHU1QkJEClx1NjI2QwpcdTY4QzkKXHU1RTBDClx1NEYyNApcdTY0Q0QKXHU1NzgyClx1NzlDQgpcdTVCOUMKXHU2QzIyClx1NTk1NwpcdTc3NjMKXHU2MzJGClx1NjdCNgpcdTRFQUUKXHU2NzJCClx1NUJBQQpcdTVFODYKXHU3RjE2Clx1NzI1QgpcdTg5RTYKXHU2NjIwClx1OTZGNwpcdTk1MDAKXHU4QkQ3Clx1NUVBNwpcdTVDNDUKXHU2MjkzClx1ODhDMgpcdTgwREUKXHU1NDdDClx1NUExOApcdTY2NkYKXHU1QTAxClx1N0VGRgpcdTY2NzYKXHU1MzlBClx1NzZERgpcdTg4NjEKXHU5RTIxClx1NUI1OQpcdTVFRjYKXHU1MzcxClx1ODBGNgpcdTVDNEIKXHU0RTYxClx1NEUzNApcdTk2NDYKXHU5ODdFClx1NjM4OQpcdTU0NDAKXHU3MDZGClx1NUM4MQpcdTYzQUEKXHU2NzVGClx1ODAxMApcdTUyNjcKXHU3Mzg5Clx1OEQ3NQpcdThERjMKXHU1NEU1Clx1NUI2MwpcdThCRkUKXHU1MUVGClx1ODBFMQpcdTk4OUQKXHU2QjNFClx1N0VDRApcdTUzNzcKXHU5RjUwClx1NEYxRgpcdTg0QjgKXHU2Qjk2Clx1NkMzOApcdTVCOTcKXHU4MkQ3Clx1NURERApcdTcwODkKXHU1Q0E5Clx1NUYzMQpcdTk2RjYKXHU2NzY4Clx1NTk0RgpcdTZDQkYKXHU5NzMyClx1Njc0NgpcdTYzQTIKXHU2RUQxClx1OTU0NwpcdTk5NkQKXHU2RDUzClx1ODIyQQpcdTYwMDAKXHU4RDc2Clx1NUU5MwpcdTU5M0EKXHU0RjBBClx1NzA3NQpcdTdBMEUKXHU5MDE0Clx1NzA2RApcdThENUIKXHU1RjUyClx1NTNFQwpcdTlGMTMKXHU2NEFEClx1NzZEOApcdTg4QzEKXHU5NjY5Clx1NUVCNwpcdTU1MkYKXHU1RjU1Clx1ODNDQwpcdTdFQUYKXHU1MDFGClx1N0NENgpcdTc2RDYKXHU2QTJBClx1N0IyNgpcdTc5QzEKXHU1MkFBClx1NTgwMgpcdTU3REYKXHU2N0FBClx1NkRBNgpcdTVFNDUKXHU1NEM4Clx1N0FERgpcdTcxOUYKXHU4NjZCClx1NkNGRApcdTgxMTEKXHU1OEU0Clx1NzhCMwpcdTZCMjcKXHU5MDREClx1NEZBNwpcdTVCRTgKXHU2NTYyClx1NUY3QgpcdTg2NTEKXHU2NTlDClx1ODU4NApcdTVFQUQKXHU3RUIzClx1NUYzOQpcdTk5NzIKXHU0RjM4Clx1NjI5OApcdTlFQTYKXHU2RTdGClx1NjY5NwpcdTgzNzcKXHU3NEU2Clx1NTg1RQpcdTVFOEEKXHU3QjUxClx1NjA3NgpcdTYyMzcKXHU4QkJGClx1NTg1NApcdTU5NDcKXHU5MDBGClx1Njg4MQpcdTUyMDAKXHU2NUNCClx1OEZGOQpcdTUzNjEKXHU2QzJGClx1OTA0NwpcdTRFRkQKXHU2QkQyClx1NkNFNQpcdTkwMDAKXHU2RDE3Clx1NjQ0NgpcdTcwNzAKXHU1RjY5Clx1NTM1NgpcdTgwMTcKXHU1OTBGClx1NjJFOQpcdTVGRDkKXHU5NERDClx1NzMyRQpcdTc4NkMKXHU0RTg4Clx1N0U0MQpcdTU3MDgKXHU5NkVBClx1NTFGRApcdTRFQTYKXHU2MkJEClx1N0JDNwpcdTk2MzUKXHU5NjM0Clx1NEUwMQpcdTVDM0EKXHU4RkZEClx1NTgwNgpcdTk2QzQKXHU4RkNFClx1NkNEQgpcdTcyMzgKXHU2OTdDClx1OTA3RgpcdThDMEIKXHU1NDI4Clx1OTFDRQpcdTczMkEKXHU2NUQ3Clx1N0QyRgpcdTUwNEYKXHU1MTc4Clx1OTk4NgpcdTdEMjIKXHU3OUU2Clx1ODEwMgpcdTZGNkUKXHU3MjM3Clx1OEM0NgpcdTVGRkQKXHU2MjU4Clx1NjBDQQpcdTU4NTEKXHU5MDU3Clx1NjEwOApcdTY3MzEKXHU2NkZGClx1N0VBNApcdTdDOTcKXHU1MDNFClx1NUMxQQpcdTc1REIKXHU2OTVBClx1OEMyMgpcdTU5NEIKXHU4RDJEClx1NzhFOApcdTU0MUIKXHU2QzYwClx1NjVDMQpcdTc4OEUKXHU5QUE4Clx1NzZEMQpcdTYzNTUKXHU1RjFGClx1NjZCNApcdTUyNzIKXHU4RDJGClx1NkI4QQpcdTkxQ0EKXHU4QkNEClx1NEVBMQpcdTU4QzEKXHU5ODdGClx1NUI5RApcdTUzNDgKXHU1QzE4Clx1OTVGQgpcdTYzRUQKXHU3MEFFClx1NkI4QgpcdTUxQUMKXHU2ODY1Clx1NTk4NwpcdThCNjYKXHU3RUZDClx1NjJEQgpcdTU0MzQKXHU0RUQ4Clx1NkQ2RQpcdTkwNkQKXHU1RjkwClx1NjBBOApcdTY0NDcKXHU4QzM3Clx1OEQ1RQpcdTdCQjEKXHU5Njk0Clx1OEJBMgpcdTc1MzcKXHU1NDM5Clx1NTZFRApcdTdFQjcKXHU1NTEwClx1OEQyNQpcdTVCOEIKXHU3M0JCClx1NURFOApcdTgwMTUKXHU1NzY2Clx1ODM2MwpcdTk1RUQKXHU2RTdFClx1OTUyRQpcdTUxRTEKXHU5QTdCClx1OTUwNQpcdTY1NTEKXHU2MDY5Clx1NTI2NQpcdTUxREQKXHU3OEIxClx1OUY3RgpcdTYyMkEKXHU3MEJDClx1OUVCQgpcdTdFQkEKXHU3OTgxClx1NUU5RgpcdTc2REIKXHU3MjQ4Clx1N0YxMwpcdTUxQzAKXHU3NzVCClx1NjYwQwpcdTVBNUEKXHU2RDg5Clx1N0I1MgpcdTU2MzQKXHU2M0QyClx1NUNCOApcdTY3MTcKXHU1RTg0Clx1ODg1NwpcdTg1Q0YKXHU1OUQxClx1OEQzOApcdTgxNTAKXHU1OTc0Clx1NTU2NgpcdTYwRUYKXHU0RTU4Clx1NEYxOQpcdTYwNjIKXHU1MzAwClx1N0VCMQpcdTYyNEUKXHU4RkE5Clx1ODAzMwpcdTVGNkEKXHU4MUUzClx1NEVCRgpcdTc0ODMKXHU2MkI1Clx1ODEwOQpcdTc5QzAKXHU4NDI4Clx1NEZDNApcdTdGNTEKXHU4MjFFClx1NUU5NwpcdTU1QjcKXHU3RUI1Clx1NUJGOApcdTZDNTcKXHU2MzAyClx1NkQyQQpcdThEM0EKXHU5NUVBClx1NjdFQwpcdTcyMDYKXHU3MEVGClx1NkQyNQpcdTdBM0IKXHU1ODk5Clx1OEY2RgpcdTUyQzcKXHU1MENGClx1NkVEQQpcdTUzOTgKXHU4NDk5Clx1ODJCMwpcdTgwQUYKXHU1NzYxClx1NjdGMQpcdTgzNjEKXHU4MTdGClx1NEVFQQpcdTY1QzUKXHU1QzNFClx1OEY2NwpcdTUxQjAKXHU4RDIxClx1NzY3QgpcdTlFQ0UKXHU1MjRBClx1OTRCQgpcdTUyRDIKXHU5MDAzClx1OTY5QwpcdTZDMjgKXHU5MEVEClx1NUNGMApcdTVFMDEKXHU2RTJGClx1NEYwRgpcdThGNjgKXHU0RUE5Clx1NkJENQpcdTY0RTYKXHU4M0FCClx1NTIzQQpcdTZENkEKXHU3OUQ4Clx1NjNGNApcdTY4MkEKXHU1MDY1Clx1NTUyRQpcdTgwQTEKXHU1QzlCClx1NzUxOApcdTZDRTEKXHU3NzYxClx1N0FFNQpcdTk0RjgKXHU2QzY0Clx1OTYwMApcdTRGMTEKXHU2QzQ3Clx1ODIwRApcdTcyNjcKXHU3RUQ1Clx1NzBCOApcdTU0RjIKXHU3OEY3Clx1N0VFOQpcdTY3MEIKXHU2REUxClx1NUMxNgpcdTU0MkYKXHU5Njc3Clx1NjdGNApcdTU0NDgKXHU1RjkyClx1OTg5QwpcdTZDRUEKXHU3QTBEClx1NUZEOApcdTZDRjUKXHU4NEREClx1NjJENgpcdTZEMUUKXHU2Mzg4Clx1OTU1QwpcdThGOUIKXHU1OEVFClx1OTUwQgpcdThEMkIKXHU4NjVBClx1NUYyRgpcdTY0NjkKXHU2Q0YwClx1NUU3QwpcdTVFRjcKXHU1QzBBClx1N0E5NwpcdTdFQjIKXHU1RjA0Clx1OTZCNgpcdTc1OTEKXHU2QzBGClx1NUJBQgpcdTU5RDAKXHU5NzA3Clx1NzQ1RQpcdTYwMkEKXHU1QzI0Clx1NzQzNApcdTVGQUEKXHU2M0NGClx1ODE5QwpcdThGREQKXHU1OTM5Clx1ODE3MApcdTdGMTgKXHU3M0UwClx1N0E3NwpcdTY4RUUKXHU2NzlEClx1N0FGOQpcdTZDOUYKXHU1MEFDClx1N0VGMwpcdTVGQzYKXHU5MEE2Clx1NTI2OQpcdTVFNzgKXHU2RDQ2Clx1NjgwRgpcdTYyRTUKXHU3MjU5Clx1OEQyRQpcdTc5M0MKXHU2RUU0Clx1OTRBMApcdTdFQjkKXHU3RjYyClx1NjJDRApcdTU0QjEKXHU1NThBClx1ODg5NgpcdTU3QzMKXHU1MkU0Clx1N0Y1QQpcdTcxMjYKXHU2RjVDClx1NEYwRApcdTU4QTgKXHU2QjMyClx1N0YxRApcdTU5RDMKXHU1MjBBClx1OTk3MQpcdTRFRkYKXHU1OTU2Clx1OTRERApcdTlCM0MKXHU0RTNEClx1OERFOApcdTlFRDgKXHU2MzE2Clx1OTRGRQpcdTYyNkIKXHU1NTlEClx1ODg4QgpcdTcwQUQKXHU2QzYxClx1NUU1NQpcdThCRjgKXHU1RjI3Clx1NTJCMQpcdTY4ODUKXHU1OTc2Clx1NkQwMQpcdTcwN0UKXHU4MjFGClx1OTI3NApcdTgyRUYKXHU4QkJDClx1NjJCMQpcdTZCQzEKXHU2MUMyClx1NUJEMgpcdTY2N0EKXHU1N0Q0Clx1NUJDNApcdTVDNEEKXHU4REMzClx1NkUyMQpcdTYzMTEKXHU0RTM5Clx1ODI3MApcdThEMUQKXHU3OEIwClx1NjJENApcdTcyMzkKXHU2MjM0Clx1NzgwMQpcdTY4QTYKXHU4MkJEClx1NzE5NApcdThENjQKXHU2RTE0Clx1NTRFRApcdTY1NkMKXHU5ODk3Clx1NTk1NApcdTk0QzUKXHU0RUYyClx1ODY0RQpcdTdBMDAKXHU1OUI5Clx1NEU0RgpcdTczQ0QKXHU3NTMzClx1Njg0QwpcdTkwNzUKXHU1MTQxClx1OTY4NgpcdTg3QkEKXHU0RUQzClx1OUI0RgpcdTk1MTAKXHU2NjUzClx1NkMyRQpcdTUxN0MKXHU5NjkwClx1Nzg4RApcdThENkIKXHU2MkU4Clx1NUZFMApcdTgwODMKXHU3RjM4Clx1NzI3NQpcdTYyQTIKXHU1MzVBClx1NURFNwpcdTU4RjMKXHU1MTQ0Clx1Njc1QwpcdThCQUYKXHU4QkRBClx1NzhBNwpcdTc5NjUKXHU2N0VGClx1OTg3NQpcdTVERTEKXHU3N0U5Clx1NjBCMgpcdTcwNEMKXHU5Rjg0Clx1NEYyNgpcdTc5NjgKXHU1QkZCClx1Njg0MgpcdTk0RkEKXHU1NzIzClx1NjA1MApcdTYwNzAKXHU5MEQxClx1OERBMwpcdTYyQUMKXHU4MzUyClx1ODE3RQpcdThEMzQKXHU2N0Q0Clx1NkVGNApcdTczMUIKXHU5NjE0Clx1OEY4NgpcdTU5QkIKXHU1ODZCClx1NjRBNApcdTUwQTgKXHU3QjdFClx1OTVGOQpcdTYyNzAKXHU3RDJCClx1NzgwMgpcdTkwMTIKXHU2MjBGClx1NTQwQQpcdTk2NzYKXHU0RjEwClx1NTU4MgpcdTc1OTcKXHU3NEY2Clx1NUE0NgpcdTYyOUEKXHU4MUMyClx1NjQ3OApcdTVGQ0QKXHU4NjdFClx1ODcyMQpcdTkwQkIKXHU4MEY4Clx1NURFOQpcdTYzMjQKXHU1MDc2Clx1NUYwMwpcdTY5RkQKXHU1MkIyClx1NEU3MwpcdTkwOTMKXHU1NDA5Clx1NEVDMQpcdTcwQzIKXHU3ODE2Clx1NzlERgpcdTRFNEMKXHU4MjMwClx1NEYzNApcdTc0REMKXHU2RDQ1Clx1NEUxOQpcdTY2ODIKXHU3MUU1Clx1NkE2MQpcdTY3RjMKXHU4RkY3Clx1NjY5NgpcdTcyNEMKXHU3OUU3Clx1ODBDNgpcdThCRTYKXHU3QzI3Clx1OEUwRgpcdTc0RjcKXHU4QzMxClx1NTQ0NgpcdTVCQkUKXHU3Q0NBClx1NkQxQgpcdThGODkKXHU2MTI0Clx1N0FERQpcdTk2OTkKXHU2MDEyClx1N0M5OApcdTRFNDMKXHU3RUVBClx1ODBBOQpcdTdDNEQKXHU2NTRGClx1NkQ4MgpcdTcxOTkKXHU3Njg2Clx1NEZBNgpcdTYwQUMKXHU2Mzk4Clx1NEVBQgpcdTdFQTAKXHU5MTkyClx1NzJDMgpcdTk1MDEKXHU2REMwClx1NjA2OApcdTcyNzIKXHU5NzM4Clx1NzIyQwpcdThENEYKXHU5MDA2Clx1NzNBOQpcdTk2NzUKXHU3OTVEClx1NzlEMgpcdTZENTkKXHU4QzhDClx1NUY3OQpcdTVGN0MKXHU2MDg5Clx1OUUyRApcdThEOEIKXHU1MUU0Clx1NjY2OApcdTc1NUMKXHU4Rjg4Clx1NzlFOQpcdTUzNzUKXHU3RjcyClx1NjhBRgpcdTcwOEUKXHU2RUU5Clx1NjhDQgpcdTlBNzEKXHU3QjVCClx1NUNFMQpcdTUxOTIKXHU1NTY1Clx1NUJGRgpcdThCRDEKXHU2RDc4Clx1NkNDOQpcdTVFM0QKXHU4RkRGClx1Nzg0NQpcdTc1ODYKXHU4RDM3Clx1NkYwRgpcdTdBM0YKXHU1MUEwClx1NUFFOQpcdTgwQzEKXHU4MkFGClx1NzI2MgpcdTUzREIKXHU4NjgwClx1NTk2NQpcdTlFMjMKXHU1Q0FEClx1N0Y4QQpcdTUxRUQKXHU0RTMyClx1NTg1OApcdTdFRDgKXHU5MTc1Clx1ODc4RApcdTc2QzYKXHU5NTIxClx1NUU5OQpcdTdCNzkKXHU1MUJCClx1OEY4NQpcdTY0NDQKXHU4OEFEClx1N0I0QgpcdTYyRDIKXHU1MERBClx1NjVGMQpcdTk0QkUKXHU5RTFGClx1NkYwNgpcdTZDODgKXHU3NzA5Clx1NzU4RgpcdTZERkIKXHU2OEQyClx1N0E1NwpcdTc4NUQKXHU5N0U5Clx1OTAzQwpcdTYyNkQKXHU0RkE4Clx1NTFDOQpcdTYzM0EKXHU3ODk3Clx1NjgzRApcdTcwOTIKXHU2NzZGClx1NjBBMwpcdTk5OEYKXHU1MjlEClx1OEM2QQpcdThGQkQKXHU1MkMzClx1OUUzRgpcdTY1RTYKXHU1NDBGClx1NjJEQwpcdTcyRDcKXHU1N0NCClx1OEY4QQpcdTYzQTkKXHU5OTZFClx1NjQyQwpcdTlBODIKXHU4RjlFClx1NTJGRQpcdTYyNjMKXHU0RjMwClx1ODQ4QgpcdTdFRDIKXHU5NkZFClx1NEUwOApcdTY3MzUKXHU1OUM2Clx1NjJERgpcdTVCODcKXHU4RjkxClx1OTY1NQpcdTk2RDUKXHU1MDdGClx1ODRDNApcdTVEMDcKXHU1MjZBClx1NTAyMQpcdTUzODUKXHU1NEFDClx1OUE3NgpcdTg1QUYKXHU1MjM3Clx1NjVBNQpcdTc1NkEKXHU4RDRCClx1NTk0OQpcdTRGNUIKXHU2RDQ3Clx1NkYyQgpcdTY2RkMKXHU2MjQ3Clx1OTQ5OQpcdTY4NDMKXHU2Mjc2Clx1NEVENApcdThGRDQKXHU0RkQ3Clx1NEU4RgpcdTgxNTQKXHU5NzhCClx1NjhGMQpcdTg5ODYKXHU2ODQ2Clx1NjA4NApcdTUzRDQKXHU2NDlFClx1OUE5NwpcdTUyRDgKXHU2NUZBClx1NkNCOApcdTVCNjQKXHU1NDEwClx1NUI1RgpcdTZFMjAKXHU1QzQ4Clx1NzVCRQpcdTU5OTkKXHU2MERDClx1NEVGMApcdTcyRTAKXHU4MEMwClx1OEMxMApcdTYyOUIKXHU5NzA5Clx1Njg1MQpcdTVDOTcKXHU1NjFCClx1ODg3MApcdTc2RDcKXHU2RTE3Clx1ODEwRgpcdThENTYKXHU2RDhDClx1NzUxQwpcdTY2RjkKXHU5NjA1Clx1ODA4QwpcdTU0RTkKXHU1Mzg5Clx1NzBDMwpcdTdFQUMKXHU2QkM1Clx1NjYyOApcdTRGMkEKXHU3NUM3Clx1NzE2RQpcdTUzRjkKXHU5NDg5Clx1NjQyRApcdTgzMEUKXHU3QjNDClx1OTE3NwpcdTUwNzcKXHU1RjEzClx1OTUyNQpcdTYwNTIKXHU2NzcwClx1NTc1MQpcdTlGM0IKXHU3RkZDClx1N0VCNgpcdTUzRDkKXHU3MkYxClx1OTAyRQpcdTdGNTAKXHU3RURDClx1NjhEQQpcdTYyOTEKXHU4MUE4Clx1ODUyQwpcdTVCRkEKXHU5QUE0Clx1N0E0NgpcdTUxQjYKXHU2N0FGClx1NTE4QwpcdTVDMzgKXHU1MUY4Clx1N0VDNQpcdTU3NkYKXHU3MjdBClx1NzEzMApcdThGNzAKXHU2QjIzClx1NjY0QgpcdTc2MjYKXHU1RkExClx1OTUyRApcdTk1MjYKXHU0RTI3Clx1NjVFQwpcdTk1M0IKXHU1Nzg0Clx1NjQxQwpcdTYyNTEKXHU5MDgwClx1NEVBRApcdTkxNkYKXHU4RkM4Clx1ODIxMgpcdTgxMDYKXHU5MTc2Clx1OTVGMgpcdTVGRTcKXHU5MTVBClx1OTg3RApcdTdGQkQKXHU2REE4Clx1NTM3OApcdTRFRDcKXHU5NjZBClx1OEY5RgpcdTYwRTkKXHU2NzZEClx1NTlEQQpcdTgwOUEKXHU2MzQ5Clx1OThEOApcdTZGMDIKXHU2NjA2Clx1NkIzQQpcdTU0M0UKXHU5MENFClx1NzBGNwpcdTZDNDEKXHU1NDc1Clx1OTk3MApcdTg0MjcKXHU5NkM1Clx1OTBBRQpcdThGQzEKXHU3MUQ1Clx1NjQ5MgpcdTU5RkIKXHU4RDc0Clx1NUJCNApcdTcwRTYKXHU1MDNBClx1NUUxMApcdTY1OTEKXHU5NEMzClx1NjVFOApcdTkxODcKXHU4NDYzClx1OTk3QwpcdTk2Q0YKXHU1OUZGClx1NjJDQwpcdTUwODUKXHU4MTc5Clx1NTlBNQpcdTYzQzkKXHU4RDI0Clx1NjJDNgpcdTZCNkEKXHU4NDYxClx1ODBGQQpcdTRFMjIKXHU2RDY5Clx1NUZCRApcdTY2MDIKXHU1N0FCClx1NjMyMQpcdTg5QzgKXHU4RDJBClx1NjE3MApcdTdGMzQKXHU2QzZBClx1NjE0QwpcdTUxQUYKXHU4QkZBClx1NTlEQwpcdThDMEEKXHU1MUY2Clx1NTJBMwpcdThCRUMKXHU4MDAwClx1NjYwRgpcdThFQkEKXHU3NkM4Clx1OUE5MQpcdTRFNTQKXHU2RUFBClx1NEUxQgpcdTUzNjIKXHU2MkI5Clx1OTVGNwpcdTU0QTgKXHU1MjJFClx1OUE3RQpcdTdGMDYKXHU2MDlGClx1NjQ1OApcdTk0RDIKXHU2M0I3Clx1OTg4NwpcdTVFN0IKXHU2N0M0Clx1NjBFMApcdTYwRTgKXHU0RjczClx1NEVDNwpcdTgxNEEKXHU3QTlEClx1NkRBNApcdTUyNTEKXHU3N0E3Clx1NTgyMQpcdTZDRkMKXHU4NDcxClx1N0Y2OQpcdTk3MEQKXHU2MzVFClx1ODBDRQpcdTgyQ0QKXHU2RUU4Clx1NEZFOQpcdTYzNDUKXHU2RTU4Clx1NzgwRApcdTk3MUUKXHU5MEI1Clx1ODQwNApcdTc1QUYKXHU2REVFClx1OTA0MgpcdTcxOEEKXHU3Q0FBClx1NzBEOApcdTVCQkYKXHU2ODYzClx1NjIwOApcdTlBNzMKXHU1QUMyClx1ODhENQpcdTVGOTkKXHU3QkFEClx1NjM1MApcdTgwQTAKXHU2NDkxClx1NjY1MgpcdThGQTgKXHU2QkJGClx1ODNCMgpcdTY0NEEKXHU2NDA1Clx1OTE3MQpcdTVDNEYKXHU3NUFCClx1NTRDMApcdTg1MjEKXHU1ODM1Clx1NkNBQgpcdTc2QjEKXHU3NTQ1Clx1NTNFMApcdTk2MDEKXHU4M0IxClx1NjU3MgpcdThGOTYKXHU5NEE5Clx1NzVENQpcdTU3NUQKXHU1REY3Clx1OTk3RgpcdTc5NzgKXHU0RTE4Clx1NzM4NApcdTZFOUMKXHU2NkYwClx1OTAzQgpcdTVGNkQKXHU1QzFEClx1NTM3RgpcdTU5QTgKXHU4MjQ3Clx1NTQxRQpcdTk3RTYKXHU2MDI4Clx1NzdFRQpcdTZCNDdgLnNwbGl0KCJcbiIpOwoKICAvLyBub2RlX21vZHVsZXMvQHNjdXJlL2JpcDM5L2VzbS93b3JkbGlzdHMvc3BhbmlzaC5qcwogIHZhciB3b3JkbGlzdDggPSBgYVx1MDMwMWJhY28KYWJkb21lbgphYmVqYQphYmllcnRvCmFib2dhZG8KYWJvbm8KYWJvcnRvCmFicmF6bwphYnJpcgphYnVlbG8KYWJ1c28KYWNhYmFyCmFjYWRlbWlhCmFjY2VzbwphY2Npb1x1MDMwMW4KYWNlaXRlCmFjZWxnYQphY2VudG8KYWNlcHRhcgphXHUwMzAxY2lkbwphY2xhcmFyCmFjbmVcdTAzMDEKYWNvZ2VyCmFjb3NvCmFjdGl2bwphY3RvCmFjdHJpegphY3R1YXIKYWN1ZGlyCmFjdWVyZG8KYWN1c2FyCmFkaWN0bwphZG1pdGlyCmFkb3B0YXIKYWRvcm5vCmFkdWFuYQphZHVsdG8KYWVcdTAzMDFyZW8KYWZlY3RhcgphZmljaW9cdTAzMDFuCmFmaW5hcgphZmlybWFyCmFcdTAzMDFnaWwKYWdpdGFyCmFnb25pXHUwMzAxYQphZ29zdG8KYWdvdGFyCmFncmVnYXIKYWdyaW8KYWd1YQphZ3VkbwphXHUwMzAxZ3VpbGEKYWd1amEKYWhvZ28KYWhvcnJvCmFpcmUKYWlzbGFyCmFqZWRyZXoKYWplbm8KYWp1c3RlCmFsYWNyYVx1MDMwMW4KYWxhbWJyZQphbGFybWEKYWxiYQphXHUwMzAxbGJ1bQphbGNhbGRlCmFsZGVhCmFsZWdyZQphbGVqYXIKYWxlcnRhCmFsZXRhCmFsZmlsZXIKYWxnYQphbGdvZG9cdTAzMDFuCmFsaWFkbwphbGllbnRvCmFsaXZpbwphbG1hCmFsbWVqYQphbG1pXHUwMzAxYmFyCmFsdGFyCmFsdGV6YQphbHRpdm8KYWx0bwphbHR1cmEKYWx1bW5vCmFsemFyCmFtYWJsZQphbWFudGUKYW1hcG9sYQphbWFyZ28KYW1hc2FyCmFcdTAzMDFtYmFyCmFcdTAzMDFtYml0bwphbWVubwphbWlnbwphbWlzdGFkCmFtb3IKYW1wYXJvCmFtcGxpbwphbmNobwphbmNpYW5vCmFuY2xhCmFuZGFyCmFuZGVcdTAzMDFuCmFuZW1pYQphXHUwMzAxbmd1bG8KYW5pbGxvCmFcdTAzMDFuaW1vCmFuaVx1MDMwMXMKYW5vdGFyCmFudGVuYQphbnRpZ3VvCmFudG9qbwphbnVhbAphbnVsYXIKYW51bmNpbwphblx1MDMwM2FkaXIKYW5cdTAzMDNlam8KYW5cdTAzMDNvCmFwYWdhcgphcGFyYXRvCmFwZXRpdG8KYXBpbwphcGxpY2FyCmFwb2RvCmFwb3J0ZQphcG95bwphcHJlbmRlcgphcHJvYmFyCmFwdWVzdGEKYXB1cm8KYXJhZG8KYXJhblx1MDMwM2EKYXJhcgphXHUwMzAxcmJpdHJvCmFcdTAzMDFyYm9sCmFyYnVzdG8KYXJjaGl2bwphcmNvCmFyZGVyCmFyZGlsbGEKYXJkdW8KYVx1MDMwMXJlYQphXHUwMzAxcmlkbwphcmllcwphcm1vbmlcdTAzMDFhCmFybmVcdTAzMDFzCmFyb21hCmFycGEKYXJwb1x1MDMwMW4KYXJyZWdsbwphcnJvegphcnJ1Z2EKYXJ0ZQphcnRpc3RhCmFzYQphc2Fkbwphc2FsdG8KYXNjZW5zbwphc2VndXJhcgphc2VvCmFzZXNvcgphc2llbnRvCmFzaWxvCmFzaXN0aXIKYXNubwphc29tYnJvCmFcdTAzMDFzcGVybwphc3RpbGxhCmFzdHJvCmFzdHV0bwphc3VtaXIKYXN1bnRvCmF0YWpvCmF0YXF1ZQphdGFyCmF0ZW50bwphdGVvCmFcdTAzMDF0aWNvCmF0bGV0YQphXHUwMzAxdG9tbwphdHJhZXIKYXRyb3oKYXR1XHUwMzAxbgphdWRhegphdWRpbwphdWdlCmF1bGEKYXVtZW50bwphdXNlbnRlCmF1dG9yCmF2YWwKYXZhbmNlCmF2YXJvCmF2ZQphdmVsbGFuYQphdmVuYQphdmVzdHJ1egphdmlvXHUwMzAxbgphdmlzbwpheWVyCmF5dWRhCmF5dW5vCmF6YWZyYVx1MDMwMW4KYXphcgphem90ZQphenVcdTAzMDFjYXIKYXp1ZnJlCmF6dWwKYmFiYQpiYWJvcgpiYWNoZQpiYWhpXHUwMzAxYQpiYWlsZQpiYWphcgpiYWxhbnphCmJhbGNvXHUwMzAxbgpiYWxkZQpiYW1idVx1MDMwMQpiYW5jbwpiYW5kYQpiYW5cdTAzMDNvCmJhcmJhCmJhcmNvCmJhcm5pegpiYXJybwpiYVx1MDMwMXNjdWxhCmJhc3RvXHUwMzAxbgpiYXN1cmEKYmF0YWxsYQpiYXRlcmlcdTAzMDFhCmJhdGlyCmJhdHV0YQpiYXVcdTAzMDFsCmJhemFyCmJlYmVcdTAzMDEKYmViaWRhCmJlbGxvCmJlc2FyCmJlc28KYmVzdGlhCmJpY2hvCmJpZW4KYmluZ28KYmxhbmNvCmJsb3F1ZQpibHVzYQpib2EKYm9iaW5hCmJvYm8KYm9jYQpib2NpbmEKYm9kYQpib2RlZ2EKYm9pbmEKYm9sYQpib2xlcm8KYm9sc2EKYm9tYmEKYm9uZGFkCmJvbml0bwpib25vCmJvbnNhXHUwMzAxaQpib3JkZQpib3JyYXIKYm9zcXVlCmJvdGUKYm90aVx1MDMwMW4KYm9cdTAzMDF2ZWRhCmJvemFsCmJyYXZvCmJyYXpvCmJyZWNoYQpicmV2ZQpicmlsbG8KYnJpbmNvCmJyaXNhCmJyb2NhCmJyb21hCmJyb25jZQpicm90ZQpicnVqYQpicnVzY28KYnJ1dG8KYnVjZW8KYnVjbGUKYnVlbm8KYnVleQpidWZhbmRhCmJ1Zm9cdTAzMDFuCmJ1XHUwMzAxaG8KYnVpdHJlCmJ1bHRvCmJ1cmJ1amEKYnVybGEKYnVycm8KYnVzY2FyCmJ1dGFjYQpidXpvXHUwMzAxbgpjYWJhbGxvCmNhYmV6YQpjYWJpbmEKY2FicmEKY2FjYW8KY2FkYVx1MDMwMXZlcgpjYWRlbmEKY2FlcgpjYWZlXHUwMzAxCmNhaVx1MDMwMWRhCmNhaW1hXHUwMzAxbgpjYWphCmNham9cdTAzMDFuCmNhbApjYWxhbWFyCmNhbGNpbwpjYWxkbwpjYWxpZGFkCmNhbGxlCmNhbG1hCmNhbG9yCmNhbHZvCmNhbWEKY2FtYmlvCmNhbWVsbG8KY2FtaW5vCmNhbXBvCmNhXHUwMzAxbmNlcgpjYW5kaWwKY2FuZWxhCmNhbmd1cm8KY2FuaWNhCmNhbnRvCmNhblx1MDMwM2EKY2FuXHUwMzAzb1x1MDMwMW4KY2FvYmEKY2FvcwpjYXBhegpjYXBpdGFcdTAzMDFuCmNhcG90ZQpjYXB0YXIKY2FwdWNoYQpjYXJhCmNhcmJvXHUwMzAxbgpjYVx1MDMwMXJjZWwKY2FyZXRhCmNhcmdhCmNhcmluXHUwMzAzbwpjYXJuZQpjYXJwZXRhCmNhcnJvCmNhcnRhCmNhc2EKY2FzY28KY2FzZXJvCmNhc3BhCmNhc3RvcgpjYXRvcmNlCmNhdHJlCmNhdWRhbApjYXVzYQpjYXpvCmNlYm9sbGEKY2VkZXIKY2Vkcm8KY2VsZGEKY2VcdTAzMDFsZWJyZQpjZWxvc28KY2VcdTAzMDFsdWxhCmNlbWVudG8KY2VuaXphCmNlbnRybwpjZXJjYQpjZXJkbwpjZXJlemEKY2VybwpjZXJyYXIKY2VydGV6YQpjZVx1MDMwMXNwZWQKY2V0cm8KY2hhY2FsCmNoYWxlY28KY2hhbXB1XHUwMzAxCmNoYW5jbGEKY2hhcGEKY2hhcmxhCmNoaWNvCmNoaXN0ZQpjaGl2bwpjaG9xdWUKY2hvemEKY2h1bGV0YQpjaHVwYXIKY2ljbG9cdTAzMDFuCmNpZWdvCmNpZWxvCmNpZW4KY2llcnRvCmNpZnJhCmNpZ2Fycm8KY2ltYQpjaW5jbwpjaW5lCmNpbnRhCmNpcHJlXHUwMzAxcwpjaXJjbwpjaXJ1ZWxhCmNpc25lCmNpdGEKY2l1ZGFkCmNsYW1vcgpjbGFuCmNsYXJvCmNsYXNlCmNsYXZlCmNsaWVudGUKY2xpbWEKY2xpXHUwMzAxbmljYQpjb2JyZQpjb2NjaW9cdTAzMDFuCmNvY2hpbm8KY29jaW5hCmNvY28KY29cdTAzMDFkaWdvCmNvZG8KY29mcmUKY29nZXIKY29oZXRlCmNvamlcdTAzMDFuCmNvam8KY29sYQpjb2xjaGEKY29sZWdpbwpjb2xnYXIKY29saW5hCmNvbGxhcgpjb2xtbwpjb2x1bW5hCmNvbWJhdGUKY29tZXIKY29taWRhCmNvXHUwMzAxbW9kbwpjb21wcmEKY29uZGUKY29uZWpvCmNvbmdhCmNvbm9jZXIKY29uc2Vqbwpjb250YXIKY29wYQpjb3BpYQpjb3Jhem9cdTAzMDFuCmNvcmJhdGEKY29yY2hvCmNvcmRvXHUwMzAxbgpjb3JvbmEKY29ycmVyCmNvc2VyCmNvc21vcwpjb3N0YQpjcmFcdTAzMDFuZW8KY3JhXHUwMzAxdGVyCmNyZWFyCmNyZWNlcgpjcmVpXHUwMzAxZG8KY3JlbWEKY3JpXHUwMzAxYQpjcmltZW4KY3JpcHRhCmNyaXNpcwpjcm9tbwpjcm9cdTAzMDFuaWNhCmNyb3F1ZXRhCmNydWRvCmNydXoKY3VhZHJvCmN1YXJ0bwpjdWF0cm8KY3VibwpjdWJyaXIKY3VjaGFyYQpjdWVsbG8KY3VlbnRvCmN1ZXJkYQpjdWVzdGEKY3VldmEKY3VpZGFyCmN1bGVicmEKY3VscGEKY3VsdG8KY3VtYnJlCmN1bXBsaXIKY3VuYQpjdW5ldGEKY3VvdGEKY3Vwb1x1MDMwMW4KY3VcdTAzMDFwdWxhCmN1cmFyCmN1cmlvc28KY3Vyc28KY3VydmEKY3V0aXMKZGFtYQpkYW56YQpkYXIKZGFyZG8KZGFcdTAzMDF0aWwKZGViZXIKZGVcdTAzMDFiaWwKZGVcdTAzMDFjYWRhCmRlY2lyCmRlZG8KZGVmZW5zYQpkZWZpbmlyCmRlamFyCmRlbGZpXHUwMzAxbgpkZWxnYWRvCmRlbGl0bwpkZW1vcmEKZGVuc28KZGVudGFsCmRlcG9ydGUKZGVyZWNobwpkZXJyb3RhCmRlc2F5dW5vCmRlc2VvCmRlc2ZpbGUKZGVzbnVkbwpkZXN0aW5vCmRlc3ZpXHUwMzAxbwpkZXRhbGxlCmRldGVuZXIKZGV1ZGEKZGlcdTAzMDFhCmRpYWJsbwpkaWFkZW1hCmRpYW1hbnRlCmRpYW5hCmRpYXJpbwpkaWJ1am8KZGljdGFyCmRpZW50ZQpkaWV0YQpkaWV6CmRpZmlcdTAzMDFjaWwKZGlnbm8KZGlsZW1hCmRpbHVpcgpkaW5lcm8KZGlyZWN0bwpkaXJpZ2lyCmRpc2NvCmRpc2VuXHUwMzAzbwpkaXNmcmF6CmRpdmEKZGl2aW5vCmRvYmxlCmRvY2UKZG9sb3IKZG9taW5nbwpkb24KZG9uYXIKZG9yYWRvCmRvcm1pcgpkb3Jzbwpkb3MKZG9zaXMKZHJhZ29cdTAzMDFuCmRyb2dhCmR1Y2hhCmR1ZGEKZHVlbG8KZHVlblx1MDMwM28KZHVsY2UKZHVcdTAzMDFvCmR1cXVlCmR1cmFyCmR1cmV6YQpkdXJvCmVcdTAzMDFiYW5vCmVicmlvCmVjaGFyCmVjbwplY3VhZG9yCmVkYWQKZWRpY2lvXHUwMzAxbgplZGlmaWNpbwplZGl0b3IKZWR1Y2FyCmVmZWN0bwplZmljYXoKZWplCmVqZW1wbG8KZWxlZmFudGUKZWxlZ2lyCmVsZW1lbnRvCmVsZXZhcgplbGlwc2UKZVx1MDMwMWxpdGUKZWxpeGlyCmVsb2dpbwplbHVkaXIKZW1idWRvCmVtaXRpcgplbW9jaW9cdTAzMDFuCmVtcGF0ZQplbXBlblx1MDMwM28KZW1wbGVvCmVtcHJlc2EKZW5hbm8KZW5jYXJnbwplbmNodWZlCmVuY2lcdTAzMDFhCmVuZW1pZ28KZW5lcm8KZW5mYWRvCmVuZmVybW8KZW5nYW5cdTAzMDNvCmVuaWdtYQplbmxhY2UKZW5vcm1lCmVucmVkbwplbnNheW8KZW5zZW5cdTAzMDNhcgplbnRlcm8KZW50cmFyCmVudmFzZQplbnZpXHUwMzAxbwplXHUwMzAxcG9jYQplcXVpcG8KZXJpem8KZXNjYWxhCmVzY2VuYQplc2NvbGFyCmVzY3JpYmlyCmVzY3Vkbwplc2VuY2lhCmVzZmVyYQplc2Z1ZXJ6bwplc3BhZGEKZXNwZWpvCmVzcGlcdTAzMDFhCmVzcG9zYQplc3B1bWEKZXNxdWlcdTAzMDEKZXN0YXIKZXN0ZQplc3RpbG8KZXN0dWZhCmV0YXBhCmV0ZXJubwplXHUwMzAxdGljYQpldG5pYQpldmFkaXIKZXZhbHVhcgpldmVudG8KZXZpdGFyCmV4YWN0bwpleGFtZW4KZXhjZXNvCmV4Y3VzYQpleGVudG8KZXhpZ2lyCmV4aWxpbwpleGlzdGlyCmVcdTAzMDF4aXRvCmV4cGVydG8KZXhwbGljYXIKZXhwb25lcgpleHRyZW1vCmZhXHUwMzAxYnJpY2EKZmFcdTAzMDFidWxhCmZhY2hhZGEKZmFcdTAzMDFjaWwKZmFjdG9yCmZhZW5hCmZhamEKZmFsZGEKZmFsbG8KZmFsc28KZmFsdGFyCmZhbWEKZmFtaWxpYQpmYW1vc28KZmFyYW9cdTAzMDFuCmZhcm1hY2lhCmZhcm9sCmZhcnNhCmZhc2UKZmF0aWdhCmZhdW5hCmZhdm9yCmZheApmZWJyZXJvCmZlY2hhCmZlbGl6CmZlbwpmZXJpYQpmZXJvegpmZVx1MDMwMXJ0aWwKZmVydm9yCmZlc3RpXHUwMzAxbgpmaWFibGUKZmlhbnphCmZpYXIKZmlicmEKZmljY2lvXHUwMzAxbgpmaWNoYQpmaWRlbwpmaWVicmUKZmllbApmaWVyYQpmaWVzdGEKZmlndXJhCmZpamFyCmZpam8KZmlsYQpmaWxldGUKZmlsaWFsCmZpbHRybwpmaW4KZmluY2EKZmluZ2lyCmZpbml0bwpmaXJtYQpmbGFjbwpmbGF1dGEKZmxlY2hhCmZsb3IKZmxvdGEKZmx1aXIKZmx1am8KZmx1XHUwMzAxb3IKZm9iaWEKZm9jYQpmb2dhdGEKZm9nb1x1MDMwMW4KZm9saW8KZm9sbGV0bwpmb25kbwpmb3JtYQpmb3Jybwpmb3J0dW5hCmZvcnphcgpmb3NhCmZvdG8KZnJhY2FzbwpmcmFcdTAzMDFnaWwKZnJhbmphCmZyYXNlCmZyYXVkZQpmcmVpXHUwMzAxcgpmcmVubwpmcmVzYQpmcmlcdTAzMDFvCmZyaXRvCmZydXRhCmZ1ZWdvCmZ1ZW50ZQpmdWVyemEKZnVnYQpmdW1hcgpmdW5jaW9cdTAzMDFuCmZ1bmRhCmZ1cmdvXHUwMzAxbgpmdXJpYQpmdXNpbApmdVx1MDMwMXRib2wKZnV0dXJvCmdhY2VsYQpnYWZhcwpnYWl0YQpnYWpvCmdhbGEKZ2FsZXJpXHUwMzAxYQpnYWxsbwpnYW1iYQpnYW5hcgpnYW5jaG8KZ2FuZ2EKZ2Fuc28KZ2FyYWplCmdhcnphCmdhc29saW5hCmdhc3RhcgpnYXRvCmdhdmlsYVx1MDMwMW4KZ2VtZWxvCmdlbWlyCmdlbgpnZVx1MDMwMW5lcm8KZ2VuaW8KZ2VudGUKZ2VyYW5pbwpnZXJlbnRlCmdlcm1lbgpnZXN0bwpnaWdhbnRlCmdpbW5hc2lvCmdpcmFyCmdpcm8KZ2xhY2lhcgpnbG9ibwpnbG9yaWEKZ29sCmdvbGZvCmdvbG9zbwpnb2xwZQpnb21hCmdvcmRvCmdvcmlsYQpnb3JyYQpnb3RhCmdvdGVvCmdvemFyCmdyYWRhCmdyYVx1MDMwMWZpY28KZ3Jhbm8KZ3Jhc2EKZ3JhdGlzCmdyYXZlCmdyaWV0YQpncmlsbG8KZ3JpcGUKZ3Jpcwpncml0bwpncm9zb3IKZ3J1XHUwMzAxYQpncnVlc28KZ3J1bW8KZ3J1cG8KZ3VhbnRlCmd1YXBvCmd1YXJkaWEKZ3VlcnJhCmd1aVx1MDMwMWEKZ3Vpblx1MDMwM28KZ3Vpb24KZ3Vpc28KZ3VpdGFycmEKZ3VzYW5vCmd1c3RhcgpoYWJlcgpoYVx1MDMwMWJpbApoYWJsYXIKaGFjZXIKaGFjaGEKaGFkYQpoYWxsYXIKaGFtYWNhCmhhcmluYQpoYXoKaGF6YW5cdTAzMDNhCmhlYmlsbGEKaGVicmEKaGVjaG8KaGVsYWRvCmhlbGlvCmhlbWJyYQpoZXJpcgpoZXJtYW5vCmhlXHUwMzAxcm9lCmhlcnZpcgpoaWVsbwpoaWVycm8KaGlcdTAzMDFnYWRvCmhpZ2llbmUKaGlqbwpoaW1ubwpoaXN0b3JpYQpob2NpY28KaG9nYXIKaG9ndWVyYQpob2phCmhvbWJyZQpob25nbwpob25vcgpob25yYQpob3JhCmhvcm1pZ2EKaG9ybm8KaG9zdGlsCmhveW8KaHVlY28KaHVlbGdhCmh1ZXJ0YQpodWVzbwpodWV2bwpodWlkYQpodWlyCmh1bWFubwpodVx1MDMwMW1lZG8KaHVtaWxkZQpodW1vCmh1bmRpcgpodXJhY2FcdTAzMDFuCmh1cnRvCmljb25vCmlkZWFsCmlkaW9tYQppXHUwMzAxZG9sbwppZ2xlc2lhCmlnbHVcdTAzMDEKaWd1YWwKaWxlZ2FsCmlsdXNpb1x1MDMwMW4KaW1hZ2VuCmltYVx1MDMwMW4KaW1pdGFyCmltcGFyCmltcGVyaW8KaW1wb25lcgppbXB1bHNvCmluY2FwYXoKaVx1MDMwMW5kaWNlCmluZXJ0ZQppbmZpZWwKaW5mb3JtZQppbmdlbmlvCmluaWNpbwppbm1lbnNvCmlubXVuZQppbm5hdG8KaW5zZWN0bwppbnN0YW50ZQppbnRlcmVcdTAzMDFzCmlcdTAzMDFudGltbwppbnR1aXIKaW51XHUwMzAxdGlsCmludmllcm5vCmlyYQppcmlzCmlyb25pXHUwMzAxYQppc2xhCmlzbG90ZQpqYWJhbGlcdTAzMDEKamFib1x1MDMwMW4KamFtb1x1MDMwMW4KamFyYWJlCmphcmRpXHUwMzAxbgpqYXJyYQpqYXVsYQpqYXptaVx1MDMwMW4KamVmZQpqZXJpbmdhCmppbmV0ZQpqb3JuYWRhCmpvcm9iYQpqb3Zlbgpqb3lhCmp1ZXJnYQpqdWV2ZXMKanVlegpqdWdhZG9yCmp1Z28KanVndWV0ZQpqdWljaW8KanVuY28KanVuZ2xhCmp1bmlvCmp1bnRhcgpqdVx1MDMwMXBpdGVyCmp1cmFyCmp1c3RvCmp1dmVuaWwKanV6Z2FyCmtpbG8Ka29hbGEKbGFiaW8KbGFjaW8KbGFjcmEKbGFkbwpsYWRyb1x1MDMwMW4KbGFnYXJ0bwpsYVx1MDMwMWdyaW1hCmxhZ3VuYQpsYWljbwpsYW1lcgpsYVx1MDMwMW1pbmEKbGFcdTAzMDFtcGFyYQpsYW5hCmxhbmNoYQpsYW5nb3N0YQpsYW56YQpsYVx1MDMwMXBpegpsYXJnbwpsYXJ2YQpsYVx1MDMwMXN0aW1hCmxhdGEKbGFcdTAzMDF0ZXgKbGF0aXIKbGF1cmVsCmxhdmFyCmxhem8KbGVhbApsZWNjaW9cdTAzMDFuCmxlY2hlCmxlY3RvcgpsZWVyCmxlZ2lvXHUwMzAxbgpsZWd1bWJyZQpsZWphbm8KbGVuZ3VhCmxlbnRvCmxlblx1MDMwM2EKbGVvXHUwMzAxbgpsZW9wYXJkbwpsZXNpb1x1MDMwMW4KbGV0YWwKbGV0cmEKbGV2ZQpsZXllbmRhCmxpYmVydGFkCmxpYnJvCmxpY29yCmxpXHUwMzAxZGVyCmxpZGlhcgpsaWVuem8KbGlnYQpsaWdlcm8KbGltYQpsaVx1MDMwMW1pdGUKbGltb1x1MDMwMW4KbGltcGlvCmxpbmNlCmxpbmRvCmxpXHUwMzAxbmVhCmxpbmdvdGUKbGlubwpsaW50ZXJuYQpsaVx1MDMwMXF1aWRvCmxpc28KbGlzdGEKbGl0ZXJhCmxpdGlvCmxpdHJvCmxsYWdhCmxsYW1hCmxsYW50bwpsbGF2ZQpsbGVnYXIKbGxlbmFyCmxsZXZhcgpsbG9yYXIKbGxvdmVyCmxsdXZpYQpsb2JvCmxvY2lvXHUwMzAxbgpsb2NvCmxvY3VyYQpsb1x1MDMwMWdpY2EKbG9ncm8KbG9tYnJpegpsb21vCmxvbmphCmxvdGUKbHVjaGEKbHVjaXIKbHVnYXIKbHVqbwpsdW5hCmx1bmVzCmx1cGEKbHVzdHJvCmx1dG8KbHV6Cm1hY2V0YQptYWNobwptYWRlcmEKbWFkcmUKbWFkdXJvCm1hZXN0cm8KbWFmaWEKbWFnaWEKbWFnbwptYWlcdTAzMDF6Cm1hbGRhZAptYWxldGEKbWFsbGEKbWFsbwptYW1hXHUwMzAxCm1hbWJvCm1hbXV0Cm1hbmNvCm1hbmRvCm1hbmVqYXIKbWFuZ2EKbWFuaXF1aVx1MDMwMQptYW5qYXIKbWFubwptYW5zbwptYW50YQptYW5cdTAzMDNhbmEKbWFwYQptYVx1MDMwMXF1aW5hCm1hcgptYXJjbwptYXJlYQptYXJmaWwKbWFyZ2VuCm1hcmlkbwptYVx1MDMwMXJtb2wKbWFycm9cdTAzMDFuCm1hcnRlcwptYXJ6bwptYXNhCm1hXHUwMzAxc2NhcmEKbWFzaXZvCm1hdGFyCm1hdGVyaWEKbWF0aXoKbWF0cml6Cm1hXHUwMzAxeGltbwptYXlvcgptYXpvcmNhCm1lY2hhCm1lZGFsbGEKbWVkaW8KbWVcdTAzMDFkdWxhCm1lamlsbGEKbWVqb3IKbWVsZW5hCm1lbG9cdTAzMDFuCm1lbW9yaWEKbWVub3IKbWVuc2FqZQptZW50ZQptZW51XHUwMzAxCm1lcmNhZG8KbWVyZW5ndWUKbWVcdTAzMDFyaXRvCm1lcwptZXNvXHUwMzAxbgptZXRhCm1ldGVyCm1lXHUwMzAxdG9kbwptZXRybwptZXpjbGEKbWllZG8KbWllbAptaWVtYnJvCm1pZ2EKbWlsCm1pbGFncm8KbWlsaXRhcgptaWxsb1x1MDMwMW4KbWltbwptaW5hCm1pbmVybwptaVx1MDMwMW5pbW8KbWludXRvCm1pb3BlCm1pcmFyCm1pc2EKbWlzZXJpYQptaXNpbAptaXNtbwptaXRhZAptaXRvCm1vY2hpbGEKbW9jaW9cdTAzMDFuCm1vZGEKbW9kZWxvCm1vaG8KbW9qYXIKbW9sZGUKbW9sZXIKbW9saW5vCm1vbWVudG8KbW9taWEKbW9uYXJjYQptb25lZGEKbW9uamEKbW9udG8KbW9uXHUwMzAzbwptb3JhZGEKbW9yZGVyCm1vcmVubwptb3Jpcgptb3Jybwptb3JzYQptb3J0YWwKbW9zY2EKbW9zdHJhcgptb3Rpdm8KbW92ZXIKbW9cdTAzMDF2aWwKbW96bwptdWNobwptdWRhcgptdWVibGUKbXVlbGEKbXVlcnRlCm11ZXN0cmEKbXVncmUKbXVqZXIKbXVsYQptdWxldGEKbXVsdGEKbXVuZG8KbXVuXHUwMzAzZWNhCm11cmFsCm11cm8KbXVcdTAzMDFzY3VsbwptdXNlbwptdXNnbwptdVx1MDMwMXNpY2EKbXVzbG8KbmFcdTAzMDFjYXIKbmFjaW9cdTAzMDFuCm5hZGFyCm5haXBlCm5hcmFuamEKbmFyaXoKbmFycmFyCm5hc2FsCm5hdGFsCm5hdGl2bwpuYXR1cmFsCm5hXHUwMzAxdXNlYQpuYXZhbApuYXZlCm5hdmlkYWQKbmVjaW8KbmVcdTAzMDFjdGFyCm5lZ2FyCm5lZ29jaW8KbmVncm8KbmVvXHUwMzAxbgpuZXJ2aW8KbmV0bwpuZXV0cm8KbmV2YXIKbmV2ZXJhCm5pY2hvCm5pZG8KbmllYmxhCm5pZXRvCm5pblx1MDMwM2V6Cm5pblx1MDMwM28KbmlcdTAzMDF0aWRvCm5pdmVsCm5vYmxlemEKbm9jaGUKbm9cdTAzMDFtaW5hCm5vcmlhCm5vcm1hCm5vcnRlCm5vdGEKbm90aWNpYQpub3ZhdG8Kbm92ZWxhCm5vdmlvCm51YmUKbnVjYQpudVx1MDMwMWNsZW8KbnVkaWxsbwpudWRvCm51ZXJhCm51ZXZlCm51ZXoKbnVsbwpudVx1MDMwMW1lcm8KbnV0cmlhCm9hc2lzCm9iZXNvCm9iaXNwbwpvYmpldG8Kb2JyYQpvYnJlcm8Kb2JzZXJ2YXIKb2J0ZW5lcgpvYnZpbwpvY2EKb2Nhc28Kb2NlXHUwMzAxYW5vCm9jaGVudGEKb2NobwpvY2lvCm9jcmUKb2N0YXZvCm9jdHVicmUKb2N1bHRvCm9jdXBhcgpvY3VycmlyCm9kaWFyCm9kaW8Kb2Rpc2VhCm9lc3RlCm9mZW5zYQpvZmVydGEKb2ZpY2lvCm9mcmVjZXIKb2dybwpvaVx1MDMwMWRvCm9pXHUwMzAxcgpvam8Kb2xhCm9sZWFkYQpvbGZhdG8Kb2xpdm8Kb2xsYQpvbG1vCm9sb3IKb2x2aWRvCm9tYmxpZ28Kb25kYQpvbnphCm9wYWNvCm9wY2lvXHUwMzAxbgpvXHUwMzAxcGVyYQpvcGluYXIKb3BvbmVyCm9wdGFyCm9cdTAzMDFwdGljYQpvcHVlc3RvCm9yYWNpb1x1MDMwMW4Kb3JhZG9yCm9yYWwKb1x1MDMwMXJiaXRhCm9yY2EKb3JkZW4Kb3JlamEKb1x1MDMwMXJnYW5vCm9yZ2lcdTAzMDFhCm9yZ3VsbG8Kb3JpZW50ZQpvcmlnZW4Kb3JpbGxhCm9ybwpvcnF1ZXN0YQpvcnVnYQpvc2FkaVx1MDMwMWEKb3NjdXJvCm9zZXpubwpvc28Kb3N0cmEKb3Rvblx1MDMwM28Kb3RybwpvdmVqYQpvXHUwMzAxdnVsbwpvXHUwMzAxeGlkbwpveGlcdTAzMDFnZW5vCm95ZW50ZQpvem9ubwpwYWN0bwpwYWRyZQpwYWVsbGEKcGFcdTAzMDFnaW5hCnBhZ28KcGFpXHUwMzAxcwpwYVx1MDMwMWphcm8KcGFsYWJyYQpwYWxjbwpwYWxldGEKcGFcdTAzMDFsaWRvCnBhbG1hCnBhbG9tYQpwYWxwYXIKcGFuCnBhbmFsCnBhXHUwMzAxbmljbwpwYW50ZXJhCnBhblx1MDMwM3VlbG8KcGFwYVx1MDMwMQpwYXBlbApwYXBpbGxhCnBhcXVldGUKcGFyYXIKcGFyY2VsYQpwYXJlZApwYXJpcgpwYXJvCnBhXHUwMzAxcnBhZG8KcGFycXVlCnBhXHUwMzAxcnJhZm8KcGFydGUKcGFzYXIKcGFzZW8KcGFzaW9cdTAzMDFuCnBhc28KcGFzdGEKcGF0YQpwYXRpbwpwYXRyaWEKcGF1c2EKcGF1dGEKcGF2bwpwYXlhc28KcGVhdG9cdTAzMDFuCnBlY2FkbwpwZWNlcmEKcGVjaG8KcGVkYWwKcGVkaXIKcGVnYXIKcGVpbmUKcGVsYXIKcGVsZGFuXHUwMzAzbwpwZWxlYQpwZWxpZ3JvCnBlbGxlam8KcGVsbwpwZWx1Y2EKcGVuYQpwZW5zYXIKcGVuXHUwMzAzb1x1MDMwMW4KcGVvXHUwMzAxbgpwZW9yCnBlcGlubwpwZXF1ZW5cdTAzMDNvCnBlcmEKcGVyY2hhCnBlcmRlcgpwZXJlemEKcGVyZmlsCnBlcmljbwpwZXJsYQpwZXJtaXNvCnBlcnJvCnBlcnNvbmEKcGVzYQpwZXNjYQpwZVx1MDMwMXNpbW8KcGVzdGFuXHUwMzAzYQpwZVx1MDMwMXRhbG8KcGV0cm9cdTAzMDFsZW8KcGV6CnBlenVuXHUwMzAzYQpwaWNhcgpwaWNob1x1MDMwMW4KcGllCnBpZWRyYQpwaWVybmEKcGllemEKcGlqYW1hCnBpbGFyCnBpbG90bwpwaW1pZW50YQpwaW5vCnBpbnRvcgpwaW56YQpwaW5cdTAzMDNhCnBpb2pvCnBpcGEKcGlyYXRhCnBpc2FyCnBpc2NpbmEKcGlzbwpwaXN0YQpwaXRvXHUwMzAxbgpwaXpjYQpwbGFjYQpwbGFuCnBsYXRhCnBsYXlhCnBsYXphCnBsZWl0bwpwbGVubwpwbG9tbwpwbHVtYQpwbHVyYWwKcG9icmUKcG9jbwpwb2Rlcgpwb2Rpbwpwb2VtYQpwb2VzaVx1MDMwMWEKcG9ldGEKcG9sZW4KcG9saWNpXHUwMzAxYQpwb2xsbwpwb2x2bwpwb21hZGEKcG9tZWxvCnBvbW8KcG9tcGEKcG9uZXIKcG9yY2lvXHUwMzAxbgpwb3J0YWwKcG9zYWRhCnBvc2Vlcgpwb3NpYmxlCnBvc3RlCnBvdGVuY2lhCnBvdHJvCnBvem8KcHJhZG8KcHJlY296CnByZWd1bnRhCnByZW1pbwpwcmVuc2EKcHJlc28KcHJldmlvCnByaW1vCnByaVx1MDMwMW5jaXBlCnByaXNpb1x1MDMwMW4KcHJpdmFyCnByb2EKcHJvYmFyCnByb2Nlc28KcHJvZHVjdG8KcHJvZXphCnByb2Zlc29yCnByb2dyYW1hCnByb2xlCnByb21lc2EKcHJvbnRvCnByb3Bpbwpwcm9cdTAzMDF4aW1vCnBydWViYQpwdVx1MDMwMWJsaWNvCnB1Y2hlcm8KcHVkb3IKcHVlYmxvCnB1ZXJ0YQpwdWVzdG8KcHVsZ2EKcHVsaXIKcHVsbW9cdTAzMDFuCnB1bHBvCnB1bHNvCnB1bWEKcHVudG8KcHVuXHUwMzAzYWwKcHVuXHUwMzAzbwpwdXBhCnB1cGlsYQpwdXJlXHUwMzAxCnF1ZWRhcgpxdWVqYQpxdWVtYXIKcXVlcmVyCnF1ZXNvCnF1aWV0bwpxdWlcdTAzMDFtaWNhCnF1aW5jZQpxdWl0YXIKcmFcdTAzMDFiYW5vCnJhYmlhCnJhYm8KcmFjaW9cdTAzMDFuCnJhZGljYWwKcmFpXHUwMzAxegpyYW1hCnJhbXBhCnJhbmNobwpyYW5nbwpyYXBhegpyYVx1MDMwMXBpZG8KcmFwdG8KcmFzZ28KcmFzcGEKcmF0bwpyYXlvCnJhemEKcmF6b1x1MDMwMW4KcmVhY2Npb1x1MDMwMW4KcmVhbGlkYWQKcmViYW5cdTAzMDNvCnJlYm90ZQpyZWNhZXIKcmVjZXRhCnJlY2hhem8KcmVjb2dlcgpyZWNyZW8KcmVjdG8KcmVjdXJzbwpyZWQKcmVkb25kbwpyZWR1Y2lyCnJlZmxlam8KcmVmb3JtYQpyZWZyYVx1MDMwMW4KcmVmdWdpbwpyZWdhbG8KcmVnaXIKcmVnbGEKcmVncmVzbwpyZWhlXHUwMzAxbgpyZWlubwpyZWlcdTAzMDFyCnJlamEKcmVsYXRvCnJlbGV2bwpyZWxpZXZlCnJlbGxlbm8KcmVsb2oKcmVtYXIKcmVtZWRpbwpyZW1vCnJlbmNvcgpyZW5kaXIKcmVudGEKcmVwYXJ0bwpyZXBldGlyCnJlcG9zbwpyZXB0aWwKcmVzCnJlc2NhdGUKcmVzaW5hCnJlc3BldG8KcmVzdG8KcmVzdW1lbgpyZXRpcm8KcmV0b3JubwpyZXRyYXRvCnJldW5pcgpyZXZlXHUwMzAxcwpyZXZpc3RhCnJleQpyZXphcgpyaWNvCnJpZWdvCnJpZW5kYQpyaWVzZ28KcmlmYQpyaVx1MDMwMWdpZG8Kcmlnb3IKcmluY29cdTAzMDFuCnJpblx1MDMwM29cdTAzMDFuCnJpXHUwMzAxbwpyaXF1ZXphCnJpc2EKcml0bW8Kcml0bwpyaXpvCnJvYmxlCnJvY2UKcm9jaWFyCnJvZGFyCnJvZGVvCnJvZGlsbGEKcm9lcgpyb2ppem8Kcm9qbwpyb21lcm8Kcm9tcGVyCnJvbgpyb25jbwpyb25kYQpyb3BhCnJvcGVybwpyb3NhCnJvc2NhCnJvc3Rybwpyb3RhcgpydWJpXHUwMzAxCnJ1Ym9yCnJ1ZG8KcnVlZGEKcnVnaXIKcnVpZG8KcnVpbmEKcnVsZXRhCnJ1bG8KcnVtYm8KcnVtb3IKcnVwdHVyYQpydXRhCnJ1dGluYQpzYVx1MDMwMWJhZG8Kc2FiZXIKc2FiaW8Kc2FibGUKc2FjYXIKc2FnYXoKc2FncmFkbwpzYWxhCnNhbGRvCnNhbGVybwpzYWxpcgpzYWxtb1x1MDMwMW4Kc2Fsb1x1MDMwMW4Kc2Fsc2EKc2FsdG8Kc2FsdWQKc2FsdmFyCnNhbWJhCnNhbmNpb1x1MDMwMW4Kc2FuZGlcdTAzMDFhCnNhbmVhcgpzYW5ncmUKc2FuaWRhZApzYW5vCnNhbnRvCnNhcG8Kc2FxdWUKc2FyZGluYQpzYXJ0ZVx1MDMwMW4Kc2FzdHJlCnNhdGFcdTAzMDFuCnNhdW5hCnNheG9mb1x1MDMwMW4Kc2VjY2lvXHUwMzAxbgpzZWNvCnNlY3JldG8Kc2VjdGEKc2VkCnNlZ3VpcgpzZWlzCnNlbGxvCnNlbHZhCnNlbWFuYQpzZW1pbGxhCnNlbmRhCnNlbnNvcgpzZW5cdTAzMDNhbApzZW5cdTAzMDNvcgpzZXBhcmFyCnNlcGlhCnNlcXVpXHUwMzAxYQpzZXIKc2VyaWUKc2VybW9cdTAzMDFuCnNlcnZpcgpzZXNlbnRhCnNlc2lvXHUwMzAxbgpzZXRhCnNldGVudGEKc2V2ZXJvCnNleG8Kc2V4dG8Kc2lkcmEKc2llc3RhCnNpZXRlCnNpZ2xvCnNpZ25vCnNpXHUwMzAxbGFiYQpzaWxiYXIKc2lsZW5jaW8Kc2lsbGEKc2lcdTAzMDFtYm9sbwpzaW1pbwpzaXJlbmEKc2lzdGVtYQpzaXRpbwpzaXR1YXIKc29icmUKc29jaW8Kc29kaW8Kc29sCnNvbGFwYQpzb2xkYWRvCnNvbGVkYWQKc29cdTAzMDFsaWRvCnNvbHRhcgpzb2x1Y2lvXHUwMzAxbgpzb21icmEKc29uZGVvCnNvbmlkbwpzb25vcm8Kc29ucmlzYQpzb3BhCnNvcGxhcgpzb3BvcnRlCnNvcmRvCnNvcnByZXNhCnNvcnRlbwpzb3N0ZVx1MDMwMW4Kc29cdTAzMDF0YW5vCnN1YXZlCnN1YmlyCnN1Y2VzbwpzdWRvcgpzdWVncmEKc3VlbG8Kc3Vlblx1MDMwM28Kc3VlcnRlCnN1ZnJpcgpzdWpldG8Kc3VsdGFcdTAzMDFuCnN1bWFyCnN1cGVyYXIKc3VwbGlyCnN1cG9uZXIKc3VwcmVtbwpzdXIKc3VyY28Kc3VyZW5cdTAzMDNvCnN1cmdpcgpzdXN0bwpzdXRpbAp0YWJhY28KdGFiaXF1ZQp0YWJsYQp0YWJ1XHUwMzAxCnRhY28KdGFjdG8KdGFqbwp0YWxhcgp0YWxjbwp0YWxlbnRvCnRhbGxhCnRhbG9cdTAzMDFuCnRhbWFuXHUwMzAzbwp0YW1ib3IKdGFuZ28KdGFucXVlCnRhcGEKdGFwZXRlCnRhcGlhCnRhcG9cdTAzMDFuCnRhcXVpbGxhCnRhcmRlCnRhcmVhCnRhcmlmYQp0YXJqZXRhCnRhcm90CnRhcnJvCnRhcnRhCnRhdHVhamUKdGF1cm8KdGF6YQp0YXpvXHUwMzAxbgp0ZWF0cm8KdGVjaG8KdGVjbGEKdGVcdTAzMDFjbmljYQp0ZWphZG8KdGVqZXIKdGVqaWRvCnRlbGEKdGVsZVx1MDMwMWZvbm8KdGVtYQp0ZW1vcgp0ZW1wbG8KdGVuYXoKdGVuZGVyCnRlbmVyCnRlbmlzCnRlbnNvCnRlb3JpXHUwMzAxYQp0ZXJhcGlhCnRlcmNvCnRlXHUwMzAxcm1pbm8KdGVybnVyYQp0ZXJyb3IKdGVzaXMKdGVzb3JvCnRlc3RpZ28KdGV0ZXJhCnRleHRvCnRlegp0aWJpbwp0aWJ1cm9cdTAzMDFuCnRpZW1wbwp0aWVuZGEKdGllcnJhCnRpZXNvCnRpZ3JlCnRpamVyYQp0aWxkZQp0aW1icmUKdGlcdTAzMDFtaWRvCnRpbW8KdGludGEKdGlcdTAzMDFvCnRpXHUwMzAxcGljbwp0aXBvCnRpcmEKdGlyb1x1MDMwMW4KdGl0YVx1MDMwMW4KdGlcdTAzMDF0ZXJlCnRpXHUwMzAxdHVsbwp0aXphCnRvYWxsYQp0b2JpbGxvCnRvY2FyCnRvY2lubwp0b2RvCnRvZ2EKdG9sZG8KdG9tYXIKdG9ubwp0b250bwp0b3Bhcgp0b3BlCnRvcXVlCnRvXHUwMzAxcmF4CnRvcmVybwp0b3JtZW50YQp0b3JuZW8KdG9ybwp0b3JwZWRvCnRvcnJlCnRvcnNvCnRvcnR1Z2EKdG9zCnRvc2NvCnRvc2VyCnRvXHUwMzAxeGljbwp0cmFiYWpvCnRyYWN0b3IKdHJhZXIKdHJhXHUwMzAxZmljbwp0cmFnbwp0cmFqZQp0cmFtbwp0cmFuY2UKdHJhdG8KdHJhdW1hCnRyYXphcgp0cmVcdTAzMDFib2wKdHJlZ3VhCnRyZWludGEKdHJlbgp0cmVwYXIKdHJlcwp0cmlidQp0cmlnbwp0cmlwYQp0cmlzdGUKdHJpdW5mbwp0cm9mZW8KdHJvbXBhCnRyb25jbwp0cm9wYQp0cm90ZQp0cm96bwp0cnVjbwp0cnVlbm8KdHJ1ZmEKdHViZXJpXHUwMzAxYQp0dWJvCnR1ZXJ0bwp0dW1iYQp0dW1vcgp0dVx1MDMwMW5lbAp0dVx1MDMwMW5pY2EKdHVyYmluYQp0dXJpc21vCnR1cm5vCnR1dG9yCnViaWNhcgp1XHUwMzAxbGNlcmEKdW1icmFsCnVuaWRhZAp1bmlyCnVuaXZlcnNvCnVubwp1bnRhcgp1blx1MDMwM2EKdXJiYW5vCnVyYmUKdXJnZW50ZQp1cm5hCnVzYXIKdXN1YXJpbwp1XHUwMzAxdGlsCnV0b3BpXHUwMzAxYQp1dmEKdmFjYQp2YWNpXHUwMzAxbwp2YWN1bmEKdmFnYXIKdmFnbwp2YWluYQp2YWppbGxhCnZhbGUKdmFcdTAzMDFsaWRvCnZhbGxlCnZhbG9yCnZhXHUwMzAxbHZ1bGEKdmFtcGlybwp2YXJhCnZhcmlhcgp2YXJvXHUwMzAxbgp2YXNvCnZlY2lubwp2ZWN0b3IKdmVoaVx1MDMwMWN1bG8KdmVpbnRlCnZlamV6CnZlbGEKdmVsZXJvCnZlbG96CnZlbmEKdmVuY2VyCnZlbmRhCnZlbmVubwp2ZW5nYXIKdmVuaXIKdmVudGEKdmVudXMKdmVyCnZlcmFubwp2ZXJibwp2ZXJkZQp2ZXJlZGEKdmVyamEKdmVyc28KdmVydGVyCnZpXHUwMzAxYQp2aWFqZQp2aWJyYXIKdmljaW8KdmlcdTAzMDFjdGltYQp2aWRhCnZpXHUwMzAxZGVvCnZpZHJpbwp2aWVqbwp2aWVybmVzCnZpZ29yCnZpbAp2aWxsYQp2aW5hZ3JlCnZpbm8KdmluXHUwMzAzZWRvCnZpb2xpXHUwMzAxbgp2aXJhbAp2aXJnbwp2aXJ0dWQKdmlzb3IKdmlcdTAzMDFzcGVyYQp2aXN0YQp2aXRhbWluYQp2aXVkbwp2aXZhegp2aXZlcm8Kdml2aXIKdml2bwp2b2xjYVx1MDMwMW4Kdm9sdW1lbgp2b2x2ZXIKdm9yYXoKdm90YXIKdm90bwp2b3oKdnVlbG8KdnVsZ2FyCnlhY2VyCnlhdGUKeWVndWEKeWVtYQp5ZXJubwp5ZXNvCnlvZG8KeW9nYQp5b2d1cgp6YWZpcm8KemFuamEKemFwYXRvCnphcnphCnpvbmEKem9ycm8KenVtbwp6dXJkb2Auc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy90cmFkaXRpb25hbC1jaGluZXNlLmpzCiAgdmFyIHdvcmRsaXN0OSA9IGBcdTc2ODQKXHU0RTAwClx1NjYyRgpcdTU3MjgKXHU0RTBEClx1NEU4NgpcdTY3MDkKXHU1NDhDClx1NEVCQQpcdTkwMTkKXHU0RTJEClx1NTkyNwpcdTcwQkEKXHU0RTBBClx1NTAwQgpcdTU3MEIKXHU2MjExClx1NEVFNQpcdTg5ODEKXHU0RUQ2Clx1NjY0MgpcdTRGODYKXHU3NTI4Clx1NTAxMQpcdTc1MUYKXHU1MjMwClx1NEY1QwpcdTU3MzAKXHU2NUJDClx1NTFGQQpcdTVDMzEKXHU1MjA2Clx1NUMwRApcdTYyMTAKXHU2NzAzClx1NTNFRgpcdTRFM0IKXHU3NjdDClx1NUU3NApcdTUyRDUKXHU1NDBDClx1NURFNQpcdTRFNUYKXHU4MEZEClx1NEUwQgpcdTkwNEUKXHU1QjUwClx1OEFBQQpcdTc1MjIKXHU3QTJFClx1OTc2MgpcdTgwMEMKXHU2NUI5Clx1NUY4QwpcdTU5MUEKXHU1QjlBClx1ODg0QwpcdTVCNzgKXHU2Q0Q1Clx1NjI0MApcdTZDMTEKXHU1Rjk3Clx1N0Q5MwpcdTUzNDEKXHU0RTA5Clx1NEU0QgpcdTkwMzIKXHU4NDU3Clx1N0I0OQpcdTkwRTgKXHU1RUE2Clx1NUJCNgpcdTk2RkIKXHU1MjlCClx1ODhFMQpcdTU5ODIKXHU2QzM0Clx1NTMxNgpcdTlBRDgKXHU4MUVBClx1NEU4QwpcdTc0MDYKXHU4RDc3Clx1NUMwRgpcdTcyNjkKXHU3M0ZFClx1NUJFNgpcdTUyQTAKXHU5MUNGClx1OTBGRApcdTUxNjkKXHU5QUQ0Clx1NTIzNgpcdTZBNUYKXHU3NTc2Clx1NEY3RgpcdTlFREUKXHU1RjlFClx1Njk2RApcdTY3MkMKXHU1M0JCClx1NjI4QQpcdTYwMjcKXHU1OTdEClx1NjFDOQpcdTk1OEIKXHU1QjgzClx1NTQwOApcdTkwODQKXHU1NkUwClx1NzUzMQpcdTUxNzYKXHU0RTlCClx1NzEzNgpcdTUyNEQKXHU1OTE2Clx1NTkyOQpcdTY1M0YKXHU1NkRCClx1NjVFNQpcdTkwQTMKXHU3OTNFClx1N0ZBOQpcdTRFOEIKXHU1RTczClx1NUY2MgpcdTc2RjgKXHU1MTY4Clx1ODg2OApcdTk1OTMKXHU2QTIzClx1ODIwNwpcdTk1REMKXHU1NDA0Clx1OTFDRApcdTY1QjAKXHU3RERBClx1NTE2NwpcdTY1NzgKXHU2QjYzClx1NUZDMwpcdTUzQ0QKXHU0RjYwClx1NjYwRQpcdTc3MEIKXHU1MzlGClx1NTNDOApcdTlFQkMKXHU1MjI5Clx1NkJENApcdTYyMTYKXHU0RjQ2Clx1OENFQQpcdTZDMjMKXHU3QjJDClx1NTQxMQpcdTkwNTMKXHU1NDdEClx1NkI2NApcdThCOEEKXHU2ODlEClx1NTNFQQpcdTZDOTIKXHU3RDUwClx1ODlFMwpcdTU1NEYKXHU2MTBGClx1NUVGQQpcdTY3MDgKXHU1MTZDClx1NzEyMQpcdTdDRkIKXHU4RUNEClx1NUY4OApcdTYwQzUKXHU4MDA1Clx1NjcwMApcdTdBQ0IKXHU0RUUzClx1NjBGMwpcdTVERjIKXHU5MDFBClx1NEUyNgpcdTYzRDAKXHU3NkY0Clx1OTg0QwpcdTlFRTgKXHU3QTBCClx1NUM1NQpcdTRFOTQKXHU2NzlDClx1NjU5OQpcdThDNjEKXHU1NEUxClx1OTc2OQpcdTRGNEQKXHU1MTY1Clx1NUUzOApcdTY1ODcKXHU3RTNEClx1NkIyMQpcdTU0QzEKXHU1RjBGClx1NkQzQgpcdThBMkQKXHU1M0NBClx1N0JBMQpcdTcyNzkKXHU0RUY2Clx1OTU3NwpcdTZDNDIKXHU4MDAxClx1OTgyRApcdTU3RkEKXHU4Q0M3Clx1OTA4QQpcdTZENDEKXHU4REVGClx1N0QxQQpcdTVDMTEKXHU1NzE2Clx1NUM3MQpcdTdENzEKXHU2M0E1Clx1NzdFNQpcdThGMDMKXHU1QzA3Clx1N0Q0NApcdTg5OEIKXHU4QTA4Clx1NTIyNQpcdTU5NzkKXHU2MjRCClx1ODlEMgpcdTY3MUYKXHU2ODM5Clx1OEFENgpcdTkwNEIKXHU4RkIyClx1NjMwNwpcdTVFN0UKXHU0RTVEClx1NTM0MApcdTVGMzcKXHU2NTNFClx1NkM3QQpcdTg5N0YKXHU4OEFCClx1NUU3OQpcdTUwNUEKXHU1RkM1Clx1NjIzMApcdTUxNDgKXHU1NkRFClx1NTI0NwpcdTRFRkIKXHU1M0Q2Clx1NjREQQpcdTg2NTUKXHU5NjhBClx1NTM1NwpcdTdENjYKXHU4MjcyClx1NTE0OQpcdTk1ODAKXHU1MzczClx1NEZERApcdTZDQkIKXHU1MzE3Clx1OTAyMApcdTc2N0UKXHU4OThGClx1NzFCMQpcdTk4MTgKXHU0RTAzClx1NkQ3NwpcdTUzRTMKXHU2NzcxClx1NUMwRQpcdTU2NjgKXHU1OEQzClx1NUZENwpcdTRFMTYKXHU5MUQxClx1NTg5RQpcdTcyMkQKXHU2RkRGClx1OTY4RQpcdTZDQjkKXHU2MDFEClx1ODg1MwpcdTY5NzUKXHU0RUE0Clx1NTNENwpcdTgwNkYKXHU0RUMwClx1OEE4RApcdTUxNkQKXHU1MTcxClx1NkIwQQpcdTY1MzYKXHU4QjQ5Clx1NjUzOQpcdTZFMDUKXHU3RjhFClx1NTE4RApcdTYzQTEKXHU4RjQ5Clx1NjZGNApcdTU1QUUKXHU5OEE4Clx1NTIwNwpcdTYyNTMKXHU3NjdEClx1NjU1OQpcdTkwMUYKXHU4MkIxClx1NUUzNgpcdTVCODkKXHU1ODM0Clx1OEVBQgpcdThFQ0EKXHU0RjhCClx1NzcxRgpcdTUyRDkKXHU1MTc3Clx1ODQyQwpcdTZCQ0YKXHU3NkVFClx1ODFGMwpcdTkwNTQKXHU4RDcwClx1N0E0RApcdTc5M0EKXHU4QjcwClx1ODA3MgpcdTU4MzEKXHU5QjI1Clx1NUI4QwpcdTk4NUUKXHU1MTZCClx1OTZFMgpcdTgzRUYKXHU1NDBEClx1NzhCQQpcdTYyNEQKXHU3OUQxClx1NUYzNQpcdTRGRTEKXHU5OUFDClx1N0JDMApcdThBNzEKXHU3QzczClx1NjU3NApcdTdBN0EKXHU1MTQzClx1NkNDMQpcdTRFQ0EKXHU5NkM2Clx1NkVBQgpcdTUwQjMKXHU1NzFGClx1OEEzMQpcdTZCNjUKXHU3RkE0Clx1NUVFMwpcdTc3RjMKXHU4QTE4Clx1OTcwMApcdTZCQjUKXHU3ODE0Clx1NzU0QwpcdTYyQzkKXHU2Nzk3Clx1NUY4QgpcdTUzRUIKXHU0RTE0Clx1N0E3NgpcdTg5QzAKXHU4RDhBClx1N0U1NApcdTg4REQKXHU1RjcxClx1N0I5NwpcdTRGNEUKXHU2MzAxClx1OTdGMwpcdTc3M0UKXHU2NkY4Clx1NUUwMwpcdTU5MEQKXHU1QkI5Clx1NTE1MgpcdTk4MDgKXHU5NjlCClx1NTU0NgpcdTk3NUUKXHU5QTU3Clx1OTAyMwpcdTY1QjcKXHU2REYxClx1OTZFMwpcdThGRDEKXHU3OTI2Clx1NTM0MwpcdTkwMzEKXHU1OUQ0Clx1N0QyMApcdTYyODAKXHU1MDk5Clx1NTM0QQpcdThGQTYKXHU5NzUyClx1NzcwMQpcdTUyMTcKXHU3RkQyClx1OTdGRgpcdTdEMDQKXHU2NTJGClx1ODIyQwpcdTUzRjIKXHU2MTFGClx1NTJERQpcdTRGQkYKXHU1NzE4Clx1NUY4MApcdTkxNzgKXHU2Qjc3Clx1NUUwMgpcdTUxNEIKXHU0RjU1Clx1OTY2NApcdTZEODgKXHU2OUNCClx1NUU5QwpcdTdBMzEKXHU1OTJBClx1NkU5NgpcdTdDQkUKXHU1MDNDClx1ODY1RgpcdTczODcKXHU2NUNGClx1N0RBRApcdTUyODMKXHU5MDc4Clx1NkExOQpcdTVCRUIKXHU1QjU4Clx1NTAxOQpcdTZCREIKXHU4OUFBClx1NUZFQgpcdTY1NDgKXHU2NUFGClx1OTY2MgpcdTY3RTUKXHU2QzVGClx1NTc4QgpcdTc3M0MKXHU3MzhCClx1NjMwOQpcdTY4M0MKXHU5OTBBClx1NjYxMwpcdTdGNkUKXHU2RDNFClx1NUM2NApcdTcyNDcKXHU1OUNCClx1NTM3QgpcdTVDMDgKXHU3MkMwClx1ODBCMgpcdTVFRTAKXHU0RUFDClx1OEI1OApcdTkwNjkKXHU1QzZDClx1NTcxMwpcdTUzMDUKXHU3MDZCClx1NEY0RgpcdThBQkYKXHU2RUZGClx1N0UyMwpcdTVDNDAKXHU3MTY3Clx1NTNDMwpcdTdEMDUKXHU3RDMwClx1NUYxNQpcdTgwN0QKXHU4QTcyClx1OTQzNQpcdTUwRjkKXHU1NkI0Clx1OTk5NgpcdTVFOTUKXHU2REIyClx1NUI5OApcdTVGQjcKXHU5NkE4Clx1NzVDNQpcdTg2MDcKXHU1OTMxClx1NzIzRQpcdTZCN0IKXHU4QjFCClx1OTE0RApcdTU5NzMKXHU5RUMzClx1NjNBOApcdTk4NkYKXHU4QUM3Clx1N0Y2QQpcdTc5NUUKXHU4NUREClx1NTQ2MgpcdTVFMkQKXHU1NDJCClx1NEYwMQpcdTY3MUIKXHU1QkM2Clx1NjI3OQpcdTcxREYKXHU5ODA1Clx1OTYzMgpcdTgyMDkKXHU3NDAzClx1ODJGMQpcdTZDMjcKXHU1MkUyClx1NTQ0QQpcdTY3NEUKXHU1M0YwClx1ODQzRApcdTY3MjgKXHU1RTZCClx1OEYyQQpcdTc4MzQKXHU0RTlFClx1NUUyQgpcdTU3MEQKXHU2Q0U4Clx1OTA2MApcdTVCNTcKXHU2NzUwClx1NjM5MgpcdTRGOUIKXHU2Q0IzClx1NjE0QgpcdTVDMDEKXHU1M0U2Clx1NjVCRApcdTZFMUIKXHU2QTM5Clx1NkVCNgpcdTYwMEUKXHU2QjYyClx1Njg0OApcdThBMDAKXHU1OEVCClx1NTc0NwpcdTZCNjYKXHU1NkZBClx1ODQ0OQpcdTlCNUEKXHU2Q0UyClx1ODk5NgpcdTUwQzUKXHU4Q0JCClx1N0RDQQpcdTYxMUIKXHU1REU2Clx1N0FFMApcdTY1RTkKXHU2NzFEClx1NUJCMwpcdTdFOEMKXHU4RjE1Clx1NjcwRApcdThBNjYKXHU5OERGClx1NTE0NQpcdTUxNzUKXHU2RTkwClx1NTIyNApcdThCNzcKXHU1M0Y4Clx1OERCMwpcdTY3RDAKXHU3REY0Clx1NURFRQpcdTgxRjQKXHU2NzdGClx1NzUzMApcdTk2NEQKXHU5RUQxClx1NzJBRgpcdThDQTAKXHU2NENBClx1ODMwMwpcdTdFN0MKXHU4MjA4Clx1NEYzQwpcdTk5MTgKXHU1ODA1Clx1NjZGMgpcdThGMzgKXHU0RkVFClx1NjU0NQpcdTU3Q0UKXHU1OTJCClx1NTkyMApcdTkwMDEKXHU3QjQ2Clx1ODIzOQpcdTRGNTQKXHU1M0YzClx1OENBMQpcdTU0MDMKXHU1QkNDClx1NjYyNQpcdTgwNzcKXHU4OUJBClx1NkYyMgpcdTc1NkIKXHU1MjlGClx1NURGNApcdThEREYKXHU5NkQ2Clx1OTZEQwpcdTk4REIKXHU2QUEyClx1NTQzOApcdTUyQTkKXHU2NjA3Clx1OTY3RApcdTRFOTIKXHU1MjFEClx1NTI3NQpcdTYyOTcKXHU4MDAzClx1NjI5NQpcdTU4REUKXHU3QjU2Clx1NTNFNApcdTVGOTEKXHU2M0RCClx1NjcyQQpcdThERDEKXHU3NTU5Clx1OTJGQwpcdTY2RkUKXHU3QUVGClx1OENBQwpcdTdBRDkKXHU3QzIxClx1OEZGMApcdTkzMjIKXHU1MjZGClx1NzZFMQpcdTVFMUQKXHU1QzA0Clx1ODM0OQpcdTg4NUQKXHU2MjdGClx1NzM2OApcdTRFRTQKXHU5NjUwClx1OTYzRgpcdTVCQTMKXHU3NEIwClx1OTZEOQpcdThBQ0IKXHU4RDg1Clx1NUZBRQpcdThCOTMKXHU2M0E3Clx1NURERQpcdTgyNkYKXHU4RUY4Clx1NjI3RQpcdTU0MjYKXHU3RDAwClx1NzZDQQpcdTRGOUQKXHU1MTJBClx1OTgwMgpcdTc5MEUKXHU4RjA5Clx1NTAxMgpcdTYyM0YKXHU3QTgxClx1NTc1MApcdTdDODkKXHU2NTc1Clx1NzU2NQpcdTVCQTIKXHU4ODgxClx1NTFCNwpcdTUyREQKXHU3RDU1Clx1Njc5MApcdTU4NEEKXHU1MjkxClx1NkUyQwpcdTdENzIKXHU1MzU0Clx1OEEzNApcdTVGRjUKXHU5NjczClx1NEVDRApcdTdGODUKXHU5RTdEClx1NTNDQgpcdTZEMEIKXHU5MzJGClx1ODJFNgpcdTU5MUMKXHU1MjExClx1NzlGQgpcdTk4M0IKXHU5MDEwClx1OTc2MApcdTZERjcKXHU2QkNEClx1NzdFRApcdTc2QUUKXHU3RDQyClx1ODA1QQpcdTZDN0QKXHU2NzUxClx1OTZGMgpcdTU0RUEKXHU2NUUyClx1OERERApcdTg4NUIKXHU1MDVDClx1NzBDOApcdTU5MkUKXHU1QkRGClx1NzFEMgpcdThGQzUKXHU1ODgzClx1ODJFNQpcdTUzNzAKXHU2RDMyClx1NTIzQgpcdTYyRUMKXHU2RkMwClx1NUI1NApcdTY0MUUKXHU3NTFBClx1NUJBNApcdTVGODUKXHU2ODM4Clx1NjgyMQpcdTY1NjMKXHU0RkI1Clx1NTQyNwpcdTc1MzIKXHU5MDRBClx1NEU0NQpcdTgzREMKXHU1NDczClx1ODIwQQpcdTZBMjEKXHU2RTU2Clx1OENBOApcdTY0MEQKXHU5ODEwClx1OTYzQgpcdTZCRUIKXHU2NjZFClx1N0E2OQpcdTRFNTkKXHU1QUJEClx1NjkwRApcdTYwNkYKXHU2NEY0Clx1OTI4MApcdThBOUUKXHU2M0VFClx1OTE1MgpcdTVCODgKXHU2MkZGClx1NUU4RgpcdTdEMTkKXHU5MUFCClx1N0YzQQpcdTk2RTgKXHU1NUNFClx1OTFERApcdTUyODkKXHU1NTRBClx1NjAyNQpcdTU1MzEKXHU4QUE0Clx1OEExMwpcdTk4NTgKXHU1QkU5Clx1OTY0NApcdTczNzIKXHU4MzM2Clx1OUJBRQpcdTdDRTcKXHU2NUE0Clx1NUI2OQpcdTgxMkIKXHU3ODZCClx1ODBBNQpcdTU1ODQKXHU5RjhEClx1NkYxNApcdTcyMzYKXHU2RjM4Clx1ODg0MApcdTZCNjEKXHU2OEIwClx1NjM4QwpcdTZCNEMKXHU2Qzk5Clx1NTI1QgpcdTY1M0IKXHU4QjAyClx1NzZGRQpcdThBMEUKXHU2NjVBClx1N0M5MgpcdTRFODIKXHU3MUMzClx1NzdEQgpcdTRFNEUKXHU2QkJBClx1ODVFNQpcdTVCRTcKXHU5QjZGClx1OENCNApcdTk0MTgKXHU3MTY0Clx1OEI4MApcdTczRUQKXHU0RjJGClx1OTk5OQpcdTRFQ0IKXHU4RkVCClx1NTNFNQpcdThDNTAKXHU1N0Y5Clx1NjNFMQpcdTg2MkQKXHU2NEQ0Clx1NUYyNgpcdTg2Q0IKXHU2Qzg5Clx1NTA0NwpcdTdBN0YKXHU1N0Y3Clx1N0I1NApcdTZBMDIKXHU4QUIwClx1OTgwNgpcdTcxNTkKXHU3RTJFClx1NUZCNQpcdTgxQzkKXHU1NTlDClx1Njc3RQpcdTgxNzMKXHU1NkYwClx1NzU3MApcdTUxNEQKXHU4MENDClx1NjYxRgpcdTc5OEYKXHU4Q0I3Clx1NjdEMwpcdTRFOTUKXHU2OTgyClx1NjE2MgpcdTYwMTUKXHU3OEMxClx1NTAwRApcdTc5NTYKXHU3Njg3Clx1NEZDMwpcdTk3NUMKXHU4OERDClx1OEE1NQpcdTdGRkIKXHU4MDg5Clx1OEUxMApcdTVDM0MKXHU4ODYzClx1NUJFQwpcdTYzREEKXHU2OEM5Clx1NUUwQwpcdTUwQjcKXHU2NENEClx1NTc4MgpcdTc5Q0IKXHU1QjlDClx1NkMyQgpcdTU5NTcKXHU3NzYzClx1NjMyRgpcdTY3QjYKXHU0RUFFClx1NjcyQgpcdTYxQjIKXHU2MTc2Clx1N0RFOApcdTcyNUIKXHU4OUY4Clx1NjYyMApcdTk2RjcKXHU5MkI3Clx1OEE2OQpcdTVFQTcKXHU1QzQ1Clx1NjI5MwpcdTg4QzIKXHU4MERFClx1NTQ3QwpcdTVBMTgKXHU2NjZGClx1NUEwMQpcdTdEQTAKXHU2Njc2Clx1NTM5QQpcdTc2REYKXHU4ODYxClx1OTZERQpcdTVCNkIKXHU1RUY2Clx1NTM3MQpcdTgxQTAKXHU1QzRCClx1OTEwOQpcdTgxRTgKXHU5Njc4Clx1OTg2NwpcdTYzODkKXHU1NDQwClx1NzFDOApcdTZCNzIKXHU2M0FBClx1Njc1RgpcdTgwMTAKXHU1Mjg3Clx1NzM4OQpcdThEOTkKXHU4REYzClx1NTRFNQpcdTVCNjMKXHU4QUIyClx1NTFGMQpcdTgwRTEKXHU5ODREClx1NkIzRQpcdTdEMzkKXHU1Mzc3Clx1OUY0QQpcdTUwNDkKXHU4NEI4Clx1NkI5NgpcdTZDMzgKXHU1Qjk3Clx1ODJENwpcdTVEREQKXHU3MjEwClx1NUNBOQpcdTVGMzEKXHU5NkY2Clx1Njk0QQpcdTU5NEYKXHU2Q0JGClx1OTczMgpcdTY4N0YKXHU2M0EyClx1NkVEMQpcdTkzQUUKXHU5OEVGClx1NkZDMwpcdTgyMkEKXHU2MUY3Clx1OEQ5NQpcdTVFQUIKXHU1OTZBClx1NEYwQQpcdTk3NDgKXHU3QTA1Clx1OTAxNApcdTZFQzUKXHU4Q0ZEClx1NkI3OApcdTUzRUMKXHU5RjEzClx1NjRBRApcdTc2RTQKXHU4OEMxClx1OTZBQQpcdTVFQjcKXHU1NTJGClx1OTMwNApcdTgzQ0MKXHU3RDE0Clx1NTAxRgpcdTdDRDYKXHU4NENCClx1NkE2QgpcdTdCMjYKXHU3OUMxClx1NTJBQQpcdTU4MDIKXHU1N0RGClx1NjlDRApcdTZGNjQKXHU1RTQ1Clx1NTRDOApcdTdBREYKXHU3MTlGClx1ODdGMgpcdTZGQTQKXHU4MTY2Clx1NThFNApcdTc4QjMKXHU2QjUwClx1OTA0RApcdTUwNzQKXHU1QkU4Clx1NjU2MgpcdTVGQjkKXHU2MTZFClx1NjU5QwpcdTg1ODQKXHU1RUFEClx1N0QwRApcdTVGNDgKXHU5OEZDClx1NEYzOApcdTYyOTgKXHU5RUE1Clx1NkZENQpcdTY2OTcKXHU4Mzc3Clx1NzRFNgpcdTU4NUUKXHU1RThBClx1N0JDOQpcdTYwRTEKXHU2MjM2Clx1OEEyQQpcdTU4NTQKXHU1OTQ3Clx1OTAwRgpcdTY4ODEKXHU1MjAwClx1NjVDQgpcdThERTEKXHU1MzYxClx1NkMyRgpcdTkwNDcKXHU0RUZEClx1NkJEMgpcdTZDRTUKXHU5MDAwClx1NkQxNwpcdTY0RkEKXHU3MDcwClx1NUY2OQpcdThDRTMKXHU4MDE3Clx1NTkwRgpcdTY0QzcKXHU1RkQ5Clx1OTI4NQpcdTczN0IKXHU3ODZDClx1NEU4OApcdTdFNDEKXHU1NzA4Clx1OTZFQQpcdTUxRkQKXHU0RUE2Clx1NjJCRApcdTdCQzcKXHU5NjYzClx1OTY3MApcdTRFMDEKXHU1QzNBClx1OEZGRApcdTU4MDYKXHU5NkM0Clx1OEZDRQpcdTZDREIKXHU3MjM4Clx1NkExMwpcdTkwN0YKXHU4QjAwClx1NTY3OApcdTkxQ0UKXHU4QzZDClx1NjVENwpcdTdEMkYKXHU1MDRGClx1NTE3OApcdTk5MjgKXHU3RDIyClx1NzlFNgpcdTgxMDIKXHU2RjZFClx1NzIzQQpcdThDNDYKXHU1RkZEClx1NjI1OApcdTlBNUEKXHU1ODUxClx1OTA3QQpcdTYxMDgKXHU2NzMxClx1NjZGRgpcdTdFOTYKXHU3Qzk3Clx1NTBCRQpcdTVDMUEKXHU3NURCClx1Njk1QQpcdThCMUQKXHU1OTZFClx1OENGQwpcdTc4RTgKXHU1NDFCClx1NkM2MApcdTY1QzEKXHU3ODhFClx1OUFBOApcdTc2RTMKXHU2MzU1Clx1NUYxRgpcdTY2QjQKXHU1MjcyClx1OENBQgpcdTZCOEEKXHU5MUNCClx1OEE1RQpcdTRFQTEKXHU1OEMxClx1OTgxMwpcdTVCRjYKXHU1MzQ4Clx1NTg3NQpcdTgwNUUKXHU2M0VEClx1NzBBRQpcdTZCOTgKXHU1MUFDClx1NkE0QgpcdTVBNjYKXHU4QjY2Clx1N0Q5QwpcdTYyREIKXHU1NDMzClx1NEVEOApcdTZENkUKXHU5MDZEClx1NUY5MApcdTYwQTgKXHU2NDE2Clx1OEMzNwpcdThEMEEKXHU3QkIxClx1OTY5NApcdThBMDIKXHU3NTM3Clx1NTQzOQpcdTU3MTIKXHU3RDFCClx1NTUxMApcdTY1NTcKXHU1QjhCClx1NzNCQgpcdTVERTgKXHU4MDE1Clx1NTc2NgpcdTY5QUUKXHU5NTg5Clx1NzA2MwpcdTkzNzUKXHU1MUUxClx1OTlEMApcdTkzNEIKXHU2NTUxClx1NjA2OQpcdTUyNUQKXHU1MUREClx1OUU3QwpcdTlGNTIKXHU2MjJBClx1NzE0OQpcdTlFQkIKXHU3RDIxClx1Nzk4MQpcdTVFRTIKXHU3NkRCClx1NzI0OApcdTdERTkKXHU2REU4Clx1Nzc1QgpcdTY2MEMKXHU1QTVBClx1NkQ4OQpcdTdCNTIKXHU1NjM0Clx1NjNEMgpcdTVDQjgKXHU2NzE3Clx1ODM4QQpcdTg4NTcKXHU4NUNGClx1NTlEMQpcdThDQkYKXHU4MTUwClx1NTk3NApcdTU1NjYKXHU2MTYzClx1NEU1OApcdTU5MjUKXHU2MDYyClx1NTJGQgpcdTdEMTcKXHU2MjRFClx1OEZBRgpcdTgwMzMKXHU1RjZBClx1ODFFMwpcdTUxMDQKXHU3NDgzClx1NjJCNQpcdTgxMDgKXHU3OUMwClx1ODVBOQpcdTRGQzQKXHU3REIyClx1ODIxRQpcdTVFOTcKXHU1Njc0Clx1N0UzMQpcdTVCRjgKXHU2QzU3Clx1NjM5QgpcdTZEMkEKXHU4Q0MwClx1OTU4MwpcdTY3RUMKXHU3MjA2Clx1NzBFRgpcdTZEMjUKXHU3QTNCClx1NzI0NgpcdThFREYKXHU1MkM3Clx1NTBDRgpcdTZFRkUKXHU1Mzk4Clx1ODQ5OQpcdTgyQjMKXHU4MEFGClx1NTc2MQpcdTY3RjEKXHU3NkVBClx1ODE3RgpcdTUxMDAKXHU2NUM1Clx1NUMzRQpcdThFQ0IKXHU1MUIwClx1OENBMgpcdTc2N0IKXHU5RUNFClx1NTI0QQpcdTk0N0QKXHU1MkQyClx1OTAwMwpcdTk2OUMKXHU2QzI4Clx1OTBFRApcdTVDRjAKXHU1RTYzClx1NkUyRgpcdTRGMEYKXHU4RUNDClx1NzU1RApcdTc1NjIKXHU2NEU2Clx1ODNBQgpcdTUyM0EKXHU2RDZBClx1NzlEOApcdTYzRjQKXHU2ODJBClx1NTA2NQpcdTU1MkUKXHU4MEExClx1NUNGNgpcdTc1MTgKXHU2Q0UxClx1Nzc2MQpcdTdBRTUKXHU5NDQ0Clx1NkU2RgpcdTk1QTUKXHU0RjExClx1NTMyRgpcdTgyMEQKXHU3MjY3Clx1N0U1RQpcdTcwQjgKXHU1NEYyClx1NzhGNwpcdTdFM0UKXHU2NzBCClx1NkRFMQpcdTVDMTYKXHU1NTVGClx1OTY3NwpcdTY3RjQKXHU1NDQ4Clx1NUY5MgpcdTk4NEYKXHU2RERBClx1N0EwRApcdTVGRDgKXHU2Q0Y1Clx1ODVDRApcdTYyRDYKXHU2RDFFClx1NjM4OApcdTkzRTEKXHU4RjlCClx1NThFRgpcdTkyRDIKXHU4Q0E3Clx1ODY1QgpcdTVGNEUKXHU2NDY5Clx1NkNGMApcdTVFN0MKXHU1RUY3Clx1NUMwQQpcdTdBOTcKXHU3REIxClx1NUYwNApcdTk2QjgKXHU3NTkxClx1NkMwRgpcdTVCQUUKXHU1OUQwClx1OTcwNwpcdTc0NUUKXHU2MDJBClx1NUMyNApcdTc0MzQKXHU1RkFBClx1NjNDRgpcdTgxOUMKXHU5MDU1Clx1NTkzRQpcdTgxNzAKXHU3REUzClx1NzNFMApcdTdBQUUKXHU2OEVFClx1Njc5RApcdTdBRjkKXHU2RTlEClx1NTBBQwpcdTdFNjkKXHU2MUI2Clx1OTBBNgpcdTUyNjkKXHU1RTc4Clx1NkYzRgpcdTZCMDQKXHU2NEMxClx1NzI1OQpcdThDQUYKXHU3OUFFClx1NkZGRQpcdTkyMDkKXHU3RDBCClx1N0Y3NwpcdTYyQ0QKXHU1NEIxClx1NTU4QQpcdTg4OTYKXHU1N0MzClx1NTJFNApcdTdGNzAKXHU3MTI2Clx1NkY1QgpcdTRGMEQKXHU1OEE4Clx1NkIzMgpcdTdFMkIKXHU1OUQzClx1NTIwQQpcdTk4RkQKXHU0RUZGClx1NzM0RQpcdTkyQzEKXHU5QjNDClx1OUU5NwpcdThERTgKXHU5RUQ4Clx1NjMxNgpcdTkzQzgKXHU2MzgzClx1NTU5RApcdTg4OEIKXHU3MEFEClx1NkM2MQpcdTVFNTUKXHU4QUY4Clx1NUYyNwpcdTUyRjUKXHU2ODg1Clx1NTk3NgpcdTZGNTQKXHU3MDdEClx1ODIxRgpcdTk0NTEKXHU4MkVGClx1OEExRgpcdTYyQjEKXHU2QkMwClx1NjFDMgpcdTVCRDIKXHU2NjdBClx1NTdENApcdTVCQzQKXHU1QzQ2Clx1OEU4RApcdTZFMjEKXHU2MzExClx1NEUzOQpcdTgyNzEKXHU4QzlEClx1NzhCMApcdTYyRDQKXHU3MjM5Clx1NjIzNApcdTc4QkMKXHU1OTIyClx1ODJCRApcdTcxOTQKXHU4RDY0Clx1NkYwMQpcdTU0RUQKXHU2NTZDClx1OTg0NgpcdTU5NTQKXHU5MjVCClx1NEVGMgpcdTg2NEUKXHU3QTAwClx1NTlCOQpcdTRFNEYKXHU3M0NEClx1NzUzMwpcdTY4NEMKXHU5MDc1Clx1NTE0MQpcdTk2ODYKXHU4N0JBClx1NTAwOQpcdTlCNEYKXHU5MkIzClx1NjZDOQpcdTZDMkUKXHU1MTdDClx1OTZCMQpcdTc5MTkKXHU4RDZCClx1NjRBNQpcdTVGRTAKXHU4MDg1Clx1N0YzOApcdTcyN0QKXHU2NDM2Clx1NTM1QQpcdTVERTcKXHU2QkJDClx1NTE0NApcdTY3NUMKXHU4QTBBClx1OEFBMApcdTc4QTcKXHU3OTY1Clx1NjdFRgpcdTk4MDEKXHU1REUxClx1NzdFOQpcdTYwQjIKXHU3MDRDClx1OUY2MQpcdTUwMkIKXHU3OTY4Clx1NUMwQgpcdTY4NDIKXHU5MkVBClx1ODA1NgpcdTYwNTAKXHU2MDcwClx1OTEyRApcdThEQTMKXHU2MkFDClx1ODM1MgpcdTlBMzAKXHU4Q0JDClx1NjdENApcdTZFRjQKXHU3MzFCClx1OTVDQQpcdThGMUIKXHU1OUJCClx1NTg2QgpcdTY0QTQKXHU1MTMyClx1N0MzRApcdTlCMjcKXHU2NEZFClx1N0QyQgpcdTc4MDIKXHU5MDVFClx1NjIzMgpcdTU0MEEKXHU5Njc2Clx1NEYxMApcdTk5MzUKXHU3NjQyClx1NzRGNgpcdTVBNDYKXHU2NEFCClx1ODFDMgpcdTY0NzgKXHU1RkNEClx1ODc2NgpcdTg4MUYKXHU5MTMwClx1ODBGOApcdTk3OEYKXHU2NEUwClx1NTA3NgpcdTY4QzQKXHU2OUZEClx1NTJDMQpcdTRFNzMKXHU5MTI3Clx1NTQwOQpcdTRFQzEKXHU3MjFCClx1NzhEQQpcdTc5REYKXHU3MENGClx1ODI2NgpcdTRGMzQKXHU3NERDClx1NkRGQQpcdTRFMTkKXHU2NkFCClx1NzFFNQpcdTZBNjEKXHU2N0YzClx1OEZGNwpcdTY2OTYKXHU3MjRDClx1NzlFNwpcdTgxQkQKXHU4QTczClx1N0MyNwpcdThFMEYKXHU3NEY3Clx1OEI1QwpcdTU0NDYKXHU4Q0QzClx1N0NDQQpcdTZEMUIKXHU4RjFEClx1NjFBNApcdTdBRjYKXHU5Njk5Clx1NjAxMgpcdTdDOTgKXHU0RTQzClx1N0REMgpcdTgwQTkKXHU3QzREClx1NjU0RgpcdTU4NTcKXHU3MTk5Clx1NzY4NgpcdTUwNzUKXHU2MUY4Clx1NjM5OApcdTRFQUIKXHU3Q0ZFClx1OTE5MgpcdTcyQzIKXHU5Mzk2Clx1NkRDMApcdTYwNjgKXHU3MjcyClx1OTczOApcdTcyMkMKXHU4Q0RFClx1OTAwNgpcdTczQTkKXHU5Njc1Clx1Nzk1RApcdTc5RDIKXHU2RDU5Clx1OEM4QwpcdTVGNzkKXHU1RjdDClx1NjA4OQpcdTlEMjgKXHU4REE4Clx1OUNGMwpcdTY2NjgKXHU3NTVDClx1OEYyOQpcdTc5RTkKXHU1Mzc1Clx1N0Y3MgpcdTY4QUYKXHU3MDhFClx1NzA1OApcdTY4Q0IKXHU5QTQ1Clx1N0JFOQpcdTVDRkQKXHU1MTkyClx1NTU2NQpcdTU4RkQKXHU4QjZGClx1NkQ3OApcdTZDQzkKXHU1RTNEClx1OTA3MgpcdTc3RkQKXHU3NTg2Clx1OENCOApcdTZGMEYKXHU3QTNGClx1NTFBMApcdTVBRTkKXHU4MTA1Clx1ODJBRgpcdTcyNjIKXHU1M0RCClx1ODc1NQpcdTU5NjcKXHU5Q0Y0Clx1NURCQQpcdTdGOEEKXHU2MTkxClx1NEUzMgpcdTU4NTgKXHU3RTZBClx1OTE3NQpcdTg3OEQKXHU3NkM2Clx1OTMyQgpcdTVFREYKXHU3QzRDClx1NTFDRApcdThGMTQKXHU2NTFEClx1ODk3MgpcdTdCNEIKXHU2MkQyClx1NTBEQQpcdTY1RjEKXHU5MjQwClx1OUNFNQpcdTZGMDYKXHU2Qzg4Clx1NzcwOQpcdTc1OEYKXHU2REZCClx1NjhEMgpcdTdBNTcKXHU3ODVEClx1OTdEMwpcdTkwM0MKXHU2MjZEClx1NTBEMQpcdTZEQkMKXHU2MzNBClx1Nzg5NwpcdTY4M0QKXHU3MDkyClx1Njc2RgpcdTYwQTMKXHU5OTNFClx1NTJGOApcdThDNkEKXHU5MDdDClx1NTJDMwpcdTlEM0IKXHU2NUU2Clx1NTQwRgpcdTYyREMKXHU3MkQ3Clx1NTdDQgpcdThGMjUKXHU2M0E5Clx1OThGMgpcdTY0MkMKXHU3Rjc1Clx1OEZBRApcdTUyRkUKXHU2MjYzClx1NEYzMApcdTg1MjMKXHU3RDY4Clx1OTcyNwpcdTRFMDgKXHU2NzM1Clx1NTlDNgpcdTY0RUMKXHU1Qjg3Clx1OEYyRgpcdTk2NUQKXHU5NkQ1Clx1NTExRgpcdTg0QzQKXHU1RDA3Clx1NTI2QQpcdTUwMjEKXHU1RUYzClx1NTRBQwpcdTk5REIKXHU4NUFGClx1NTIzNwpcdTY1QTUKXHU3NTZBClx1OENFNgpcdTU5NDkKXHU0RjVCClx1NkY4NgpcdTZGMkIKXHU2NkZDClx1NjI0NwpcdTkyMjMKXHU2ODQzClx1NjI3NgpcdTRFRDQKXHU4RkQ0Clx1NEZENwpcdTg2NjcKXHU4MTU0Clx1OTc4QgpcdTY4RjEKXHU4OTg2Clx1Njg0NgpcdTYwODQKXHU1M0Q0Clx1NjQ5RQpcdTlBMTkKXHU1MkQ4Clx1NjVGQQpcdTZDQjgKXHU1QjY0Clx1NTQxMApcdTVCNUYKXHU2RTIwClx1NUM0OApcdTc1QkUKXHU1OTk5Clx1NjBEQwpcdTRFRjAKXHU3MkUwClx1ODEzOQpcdThBRTcKXHU2MkNCClx1OUVGNApcdTY4NTEKXHU1RDE3Clx1NTYxQgpcdTg4NzAKXHU3NkRDClx1NkVGMgpcdTgxREYKXHU4Q0Y0Clx1NkU2NwpcdTc1MUMKXHU2NkY5Clx1OTVCMQpcdTgwOEMKXHU1NEU5Clx1NTNCMgpcdTcwRjQKXHU3REVGClx1NkJDNQpcdTY2MjgKXHU1MDdEClx1NzVDNwpcdTcxNkUKXHU1NjA2Clx1OTFEOApcdTY0MkQKXHU4Mzk2Clx1N0M2MApcdTkxNzcKXHU1MDc3Clx1NUYxMwpcdTkzMTAKXHU2MDQ2Clx1NTA5MQpcdTU3NTEKXHU5RjNCClx1N0ZGQwpcdTdEQjgKXHU2NTU4Clx1NzM0NApcdTkwMkUKXHU3RjUwClx1N0Q2MQpcdTY4REEKXHU2MjkxClx1ODFBOApcdTg1MkMKXHU1QkZBClx1OUE1RgpcdTdBNDYKXHU1MUI2Clx1NjdBRgpcdTUxOEEKXHU1QzREClx1NTFGOApcdTdEMzMKXHU1NzZGClx1NzJBNwpcdTcxMzAKXHU4RjVGClx1NkIyMwpcdTY2NDkKXHU3NjI2Clx1NzlBNgpcdTkzMjAKXHU5MzI2Clx1NTVBQQpcdTY1RUMKXHU5MzVCClx1NThERgpcdTY0MUMKXHU2NEIyClx1OTA4MApcdTRFQUQKXHU5MTZGClx1OTA4MQpcdTgyMTIKXHU4MTA2Clx1OTE3NgpcdTk1OTIKXHU2MTgyClx1OTE1QQpcdTk4MTEKXHU3RkJEClx1NkYzMgpcdTUzNzgKXHU0RUQ3Clx1OTY2QQpcdTk1RTIKXHU2MUYyClx1Njc2RApcdTU5REEKXHU4MDlBClx1NjM0OQpcdTk4QzQKXHU2RjAyClx1NjYwNgpcdTZCM0EKXHU1NDNFClx1OTBDRQpcdTcwRjcKXHU2QzQxClx1NTQ3NQpcdTk4RkUKXHU4NTZEClx1OTZDNQpcdTkwRjUKXHU5MDc3Clx1NzFENQpcdTY0OTIKXHU1OUZCClx1OEQ3NApcdTVCQjQKXHU3MTY5Clx1NTBCNQpcdTVFMzMKXHU2NTkxClx1OTIzNApcdTY1RTgKXHU5MTg3Clx1ODQ2MwpcdTk5MDUKXHU5NkRCClx1NTlGRgpcdTYyQ0MKXHU1MDg1Clx1ODE3OQpcdTU5QTUKXHU2M0M5Clx1OENFMgpcdTYyQzYKXHU2QjZBClx1ODQ2MQpcdTgwRkEKXHU0RTFGClx1NkQ2OQpcdTVGQkQKXHU2NjAyClx1NTg4QQpcdTY0Q0IKXHU4OUJEClx1OENBQQpcdTYxNzAKXHU3RTczClx1NkM2QQpcdTYxNEMKXHU5OUFFClx1OEFGRQpcdTU5REMKXHU4QUJDClx1NTE0NwpcdTUyQTMKXHU4QUEzClx1ODAwMApcdTY2MEYKXHU4RUJBClx1NzZDOApcdTlBMEUKXHU1NUFDClx1NkVBQQpcdTUzRTIKXHU3NkU3Clx1NjJCOQpcdTYwQjYKXHU4QUVFClx1NTIyRQpcdTk5RDUKXHU3RTlDClx1NjA5RgpcdTY0NTgKXHU5MjdBClx1NjRGMgpcdTk4MTcKXHU1RTdCClx1NjdDNApcdTYwRTAKXHU2MTU4Clx1NEY3MwpcdTRFQzcKXHU4MUQ4Clx1N0FBOQpcdTZFQ0MKXHU1MjhEClx1NzdBNwpcdTU4MjEKXHU2RjUxClx1ODUyNQpcdTdGNjkKXHU5NzBEClx1NjQ4OApcdTgwQ0UKXHU4NEJDClx1NkZGMQpcdTUwMDYKXHU2MzQ1Clx1NkU1OApcdTc4MEQKXHU5NzFFClx1OTBCNQpcdTg0MDQKXHU3NjBCClx1NkRFRQpcdTkwNDIKXHU3MThBClx1N0NERQpcdTcwRDgKXHU1QkJGClx1NkE5NApcdTYyMDgKXHU5OUMxClx1NUFDMgpcdTg4RDUKXHU1Rjk5Clx1N0JBRApcdTYzNTAKXHU4MTc4Clx1NjQ5MApcdTY2RUMKXHU4RkE4Clx1NkJCRgpcdTg0RUUKXHU2NTI0Clx1NjUyQQpcdTkxQUMKXHU1QzRGClx1NzVBQgpcdTU0QzAKXHU4NTIxClx1NTgzNQpcdTZDQUIKXHU3NkJBClx1NjZBMgpcdTc1OEEKXHU5NUEzClx1ODQwQQpcdTY1NzIKXHU4RjQ0Clx1OTI2NApcdTc1RDUKXHU1OEU5Clx1NURGNwpcdTk5MTMKXHU3OThEClx1NEUxOApcdTczODQKXHU2RTlDClx1NjZGMApcdTkwOEYKXHU1RjZEClx1NTYxNwpcdTUzN0YKXHU1OUE4Clx1ODI0NwpcdTU0MUUKXHU5N0NCClx1NjAyOApcdTc3RUUKXHU2QjQ3YC5zcGxpdCgiXG4iKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy9wcml2YXRlS2V5VG9BY2NvdW50LmpzCiAgaW5pdF9zZWNwMjU2azEoKTsKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvdG9BY2NvdW50LmpzCiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBmdW5jdGlvbiB0b0FjY291bnQoc291cmNlKSB7CiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gInN0cmluZyIpIHsKICAgICAgaWYgKCFpc0FkZHJlc3Moc291cmNlLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiBzb3VyY2UgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgYWRkcmVzczogc291cmNlLAogICAgICAgIHR5cGU6ICJqc29uLXJwYyIKICAgICAgfTsKICAgIH0KICAgIGlmICghaXNBZGRyZXNzKHNvdXJjZS5hZGRyZXNzLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogc291cmNlLmFkZHJlc3MgfSk7CiAgICByZXR1cm4gewogICAgICBhZGRyZXNzOiBzb3VyY2UuYWRkcmVzcywKICAgICAgbm9uY2VNYW5hZ2VyOiBzb3VyY2Uubm9uY2VNYW5hZ2VyLAogICAgICBzaWduOiBzb3VyY2Uuc2lnbiwKICAgICAgZXhwZXJpbWVudGFsX3NpZ25BdXRob3JpemF0aW9uOiBzb3VyY2UuZXhwZXJpbWVudGFsX3NpZ25BdXRob3JpemF0aW9uLAogICAgICBzaWduTWVzc2FnZTogc291cmNlLnNpZ25NZXNzYWdlLAogICAgICBzaWduVHJhbnNhY3Rpb246IHNvdXJjZS5zaWduVHJhbnNhY3Rpb24sCiAgICAgIHNpZ25UeXBlZERhdGE6IHNvdXJjZS5zaWduVHlwZWREYXRhLAogICAgICBzb3VyY2U6ICJjdXN0b20iLAogICAgICB0eXBlOiAibG9jYWwiCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9zaWduLmpzCiAgaW5pdF9zZWNwMjU2azEoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2lnbih7IGhhc2g6IGhhc2gzLCBwcml2YXRlS2V5LCB0byA9ICJvYmplY3QiIH0pIHsKICAgIGNvbnN0IHsgciwgcywgcmVjb3ZlcnkgfSA9IHNlY3AyNTZrMS5zaWduKGhhc2gzLnNsaWNlKDIpLCBwcml2YXRlS2V5LnNsaWNlKDIpKTsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHsKICAgICAgcjogbnVtYmVyVG9IZXgociwgeyBzaXplOiAzMiB9KSwKICAgICAgczogbnVtYmVyVG9IZXgocywgeyBzaXplOiAzMiB9KSwKICAgICAgdjogcmVjb3ZlcnkgPyAyOG4gOiAyN24sCiAgICAgIHlQYXJpdHk6IHJlY292ZXJ5CiAgICB9OwogICAgcmV0dXJuICgoKSA9PiB7CiAgICAgIGlmICh0byA9PT0gImJ5dGVzIiB8fCB0byA9PT0gImhleCIpCiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVNpZ25hdHVyZSh7IC4uLnNpZ25hdHVyZSwgdG8gfSk7CiAgICAgIHJldHVybiBzaWduYXR1cmU7CiAgICB9KSgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9zaWduQXV0aG9yaXphdGlvbi5qcwogIGFzeW5jIGZ1bmN0aW9uIGV4cGVyaW1lbnRhbF9zaWduQXV0aG9yaXphdGlvbihwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGNvbnRyYWN0QWRkcmVzcywgY2hhaW5JZCwgbm9uY2UsIHByaXZhdGVLZXksIHRvID0gIm9iamVjdCIgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzaWduKHsKICAgICAgaGFzaDogaGFzaEF1dGhvcml6YXRpb24oeyBjb250cmFjdEFkZHJlc3MsIGNoYWluSWQsIG5vbmNlIH0pLAogICAgICBwcml2YXRlS2V5LAogICAgICB0bwogICAgfSk7CiAgICBpZiAodG8gPT09ICJvYmplY3QiKQogICAgICByZXR1cm4gewogICAgICAgIGNvbnRyYWN0QWRkcmVzcywKICAgICAgICBjaGFpbklkLAogICAgICAgIG5vbmNlLAogICAgICAgIC4uLnNpZ25hdHVyZQogICAgICB9OwogICAgcmV0dXJuIHNpZ25hdHVyZTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvdXRpbHMvc2lnbk1lc3NhZ2UuanMKICBhc3luYyBmdW5jdGlvbiBzaWduTWVzc2FnZTIoeyBtZXNzYWdlLCBwcml2YXRlS2V5IH0pIHsKICAgIHJldHVybiBhd2FpdCBzaWduKHsgaGFzaDogaGFzaE1lc3NhZ2UobWVzc2FnZSksIHByaXZhdGVLZXksIHRvOiAiaGV4IiB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvdXRpbHMvc2lnblRyYW5zYWN0aW9uLmpzCiAgaW5pdF9rZWNjYWsyNTYoKTsKICBhc3luYyBmdW5jdGlvbiBzaWduVHJhbnNhY3Rpb24yKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgcHJpdmF0ZUtleSwgdHJhbnNhY3Rpb24sIHNlcmlhbGl6ZXIgPSBzZXJpYWxpemVUcmFuc2FjdGlvbiB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hYmxlVHJhbnNhY3Rpb24gPSAoKCkgPT4gewogICAgICBpZiAodHJhbnNhY3Rpb24udHlwZSA9PT0gImVpcDQ4NDQiKQogICAgICAgIHJldHVybiB7CiAgICAgICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgICAgIHNpZGVjYXJzOiBmYWxzZQogICAgICAgIH07CiAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgIH0pKCk7CiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzaWduKHsKICAgICAgaGFzaDoga2VjY2FrMjU2KHNlcmlhbGl6ZXIoc2lnbmFibGVUcmFuc2FjdGlvbikpLAogICAgICBwcml2YXRlS2V5CiAgICB9KTsKICAgIHJldHVybiBzZXJpYWxpemVyKHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9zaWduVHlwZWREYXRhLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2lnblR5cGVkRGF0YTIocGFyYW1ldGVycykgewogICAgY29uc3QgeyBwcml2YXRlS2V5LCAuLi50eXBlZERhdGEgfSA9IHBhcmFtZXRlcnM7CiAgICByZXR1cm4gYXdhaXQgc2lnbih7CiAgICAgIGhhc2g6IGhhc2hUeXBlZERhdGEodHlwZWREYXRhKSwKICAgICAgcHJpdmF0ZUtleSwKICAgICAgdG86ICJoZXgiCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvcHJpdmF0ZUtleVRvQWNjb3VudC5qcwogIGZ1bmN0aW9uIHByaXZhdGVLZXlUb0FjY291bnQocHJpdmF0ZUtleSwgb3B0aW9ucyA9IHt9KSB7CiAgICBjb25zdCB7IG5vbmNlTWFuYWdlcjogbm9uY2VNYW5hZ2VyMiB9ID0gb3B0aW9uczsKICAgIGNvbnN0IHB1YmxpY0tleSA9IHRvSGV4KHNlY3AyNTZrMS5nZXRQdWJsaWNLZXkocHJpdmF0ZUtleS5zbGljZSgyKSwgZmFsc2UpKTsKICAgIGNvbnN0IGFkZHJlc3MgPSBwdWJsaWNLZXlUb0FkZHJlc3MocHVibGljS2V5KTsKICAgIGNvbnN0IGFjY291bnQgPSB0b0FjY291bnQoewogICAgICBhZGRyZXNzLAogICAgICBub25jZU1hbmFnZXI6IG5vbmNlTWFuYWdlcjIsCiAgICAgIGFzeW5jIHNpZ24oeyBoYXNoOiBoYXNoMyB9KSB7CiAgICAgICAgcmV0dXJuIHNpZ24oeyBoYXNoOiBoYXNoMywgcHJpdmF0ZUtleSwgdG86ICJoZXgiIH0pOwogICAgICB9LAogICAgICBhc3luYyBleHBlcmltZW50YWxfc2lnbkF1dGhvcml6YXRpb24oYXV0aG9yaXphdGlvbikgewogICAgICAgIHJldHVybiBleHBlcmltZW50YWxfc2lnbkF1dGhvcml6YXRpb24oeyAuLi5hdXRob3JpemF0aW9uLCBwcml2YXRlS2V5IH0pOwogICAgICB9LAogICAgICBhc3luYyBzaWduTWVzc2FnZSh7IG1lc3NhZ2UgfSkgewogICAgICAgIHJldHVybiBzaWduTWVzc2FnZTIoeyBtZXNzYWdlLCBwcml2YXRlS2V5IH0pOwogICAgICB9LAogICAgICBhc3luYyBzaWduVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIHsgc2VyaWFsaXplciB9ID0ge30pIHsKICAgICAgICByZXR1cm4gc2lnblRyYW5zYWN0aW9uMih7IHByaXZhdGVLZXksIHRyYW5zYWN0aW9uLCBzZXJpYWxpemVyIH0pOwogICAgICB9LAogICAgICBhc3luYyBzaWduVHlwZWREYXRhKHR5cGVkRGF0YSkgewogICAgICAgIHJldHVybiBzaWduVHlwZWREYXRhMih7IC4uLnR5cGVkRGF0YSwgcHJpdmF0ZUtleSB9KTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gewogICAgICAuLi5hY2NvdW50LAogICAgICBwdWJsaWNLZXksCiAgICAgIHNvdXJjZTogInByaXZhdGVLZXkiCiAgICB9OwogIH0KCiAgLy8gbGlicy9zaGlua2FpLXZpZW0vc3JjL2luZGV4LnRzCiAgd2luZG93LnZpZW0gPSBlc21fZXhwb3J0czsKICB3aW5kb3cuY2hhaW5zID0gY2hhaW5zX2V4cG9ydHM7CiAgdmFyIFZpZW1Qcm92aWRlciA9IGNsYXNzIHsKICAgIGNsaWVudDsKICAgIHNlbGVjdGVkQWRkcmVzczsKICAgIGNvbnN0cnVjdG9yKGNoYWluLCBzaykgewogICAgICBjb25zdCBwcml2YXRlS2V5ID0gc2sgfHwgIjB4ZjRjMWM2ZDkyMzFhNWYwOGFhOGQ5ODI0YTE0MmM0ZmM1YTY2M2NhMWE2ZWNkNjExMjZlNTRhMGQ3NTAxZGY4MiI7CiAgICAgIGNvbnN0IGFjY291bnQgPSBwcml2YXRlS2V5VG9BY2NvdW50KHByaXZhdGVLZXkpOwogICAgICB0aGlzLmNsaWVudCA9IGNyZWF0ZVdhbGxldENsaWVudCh7CiAgICAgICAgYWNjb3VudCwKICAgICAgICBjaGFpbjogY2hhaW4gfHwgYXJiaXRydW1TZXBvbGlhLAogICAgICAgIHRyYW5zcG9ydDogaHR0cCgKICAgICAgICAgICJodHRwczovL2FyYml0cnVtLXNlcG9saWEuYmxvY2twaS5uZXR3b3JrL3YxL3JwYy9wdWJsaWMiCiAgICAgICAgKQogICAgICB9KS5leHRlbmQocHVibGljQWN0aW9ucyk7CiAgICAgIHRoaXMuY2xpZW50LmdldEFkZHJlc3NlcygpLnRoZW4oKGFkZHJlc3NlcykgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJhZGRyZXNzZXMiLCBhZGRyZXNzZXMpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzc2VzWzBdOwogICAgICB9KTsKICAgIH0KICAgIGFzeW5jIGVuYWJsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdEFjY291bnRzKCk7CiAgICB9CiAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICBjb25zb2xlLmxvZygicmVxdWVzdCIsIG1ldGhvZCwgcGFyYW1zKTsKICAgICAgc3dpdGNoIChtZXRob2QpIHsKICAgICAgICBjYXNlICJldGhfcmVxdWVzdEFjY291bnRzIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RBY2NvdW50cygpOwogICAgICAgIGNhc2UgImV0aF9hY2NvdW50cyI6CiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBY2NvdW50cygpOwogICAgICAgIGNhc2UgImV0aF9zZW5kVHJhbnNhY3Rpb24iOgogICAgICAgICAgcmV0dXJuIHRoaXMuc2VuZFRyYW5zYWN0aW9uKHBhcmFtc1swXSk7CiAgICAgICAgY2FzZSAiZXRoX3NpZ24iOgogICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbihwYXJhbXNbMF0sIHBhcmFtc1sxXSk7CiAgICAgICAgY2FzZSAicGVyc29uYWxfc2lnbiI6CiAgICAgICAgICByZXR1cm4gdGhpcy5wZXJzb25hbFNpZ24ocGFyYW1zWzBdLCBwYXJhbXNbMV0pOwogICAgICAgIGNhc2UgImV0aF9zaWduVHlwZWREYXRhIjoKICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25UeXBlZERhdGEocGFyYW1zWzBdLCBwYXJhbXNbMV0pOwogICAgICAgIGNhc2UgImV0aF9jaGFpbklkIjoKICAgICAgICAgIHJldHVybiB0aGlzLmdldENoYWluSWQoKTsKICAgICAgICBjYXNlICJuZXRfdmVyc2lvbiI6CiAgICAgICAgICByZXR1cm4gdGhpcy5nZXROZXR3b3JrSWQoKTsKICAgICAgICBjYXNlICJldGhfYmxvY2tOdW1iZXIiOgogICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QmxvY2tOdW1iZXIoKTsKICAgICAgICBjYXNlICJldGhfZ2V0VHJhbnNhY3Rpb25Db3VudCI6CiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvbkNvdW50KHBhcmFtc1swXSk7CiAgICAgICAgY2FzZSAiZXRoX2dldFRyYW5zYWN0aW9uQnlIYXNoIjoKICAgICAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uKHBhcmFtc1swXSk7CiAgICAgICAgY2FzZSAiZXRoX2dldFRyYW5zYWN0aW9uUmVjZWlwdCI6CiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvblJlY2VpcHQocGFyYW1zWzBdKTsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBtZXRob2Q6ICR7bWV0aG9kfWApOwogICAgICB9CiAgICB9CiAgICBhc3luYyBnZXRUcmFuc2FjdGlvbihoYXNoMykgewogICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IHRoaXMuY2xpZW50LmdldFRyYW5zYWN0aW9uKHsgaGFzaDogaGFzaDMgfSk7CiAgICAgIGNvbnNvbGUubG9nKCJnZXRUcmFuc2FjdGlvbiIsIHRyYW5zYWN0aW9uKTsKICAgICAgaWYgKHRyYW5zYWN0aW9uLnR5cGUgPT09ICJlaXAxNTU5IikgewogICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAiMHgyIjsKICAgICAgfQogICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICB9CiAgICBhc3luYyBnZXRUcmFuc2FjdGlvblJlY2VpcHQoaGFzaDMpIHsKICAgICAgY29uc3QgcmVjZWlwdCA9IGF3YWl0IHRoaXMuY2xpZW50LmdldFRyYW5zYWN0aW9uUmVjZWlwdCh7IGhhc2g6IGhhc2gzIH0pOwogICAgICBjb25zb2xlLmxvZygiZ2V0VHJhbnNhY3Rpb25SZWNlaXB0IiwgcmVjZWlwdCk7CiAgICAgIGlmIChyZWNlaXB0LnR5cGUgPT09ICJlaXAxNTU5IikgewogICAgICAgIHJlY2VpcHQudHlwZSA9ICIweDIiOwogICAgICB9CiAgICAgIGlmIChyZWNlaXB0LnN0YXR1cyA9PT0gInN1Y2Nlc3MiKSB7CiAgICAgICAgcmVjZWlwdC5zdGF0dXMgPSAiMHgxIjsKICAgICAgfQogICAgICByZXR1cm4gcmVjZWlwdDsKICAgIH0KICAgIGFzeW5jIGdldFRyYW5zYWN0aW9uQ291bnQoYWRkcmVzcykgewogICAgICBjb25zdCB0cmFuc2FjdGlvbkNvdW50ID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0VHJhbnNhY3Rpb25Db3VudCh7IGFkZHJlc3MgfSk7CiAgICAgIGNvbnNvbGUubG9nKCJ0cmFuc2FjdGlvbkNvdW50IiwgdHJhbnNhY3Rpb25Db3VudCk7CiAgICAgIHJldHVybiB0cmFuc2FjdGlvbkNvdW50OwogICAgfQogICAgYXN5bmMgZ2V0QmxvY2tOdW1iZXIoKSB7CiAgICAgIGNvbnN0IGJsb2NrTnVtYmVyID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0QmxvY2tOdW1iZXIoKTsKICAgICAgY29uc29sZS5sb2coImJsb2NrTnVtYmVyIiwgYmxvY2tOdW1iZXIpOwogICAgICByZXR1cm4gYmxvY2tOdW1iZXI7CiAgICB9CiAgICBhc3luYyByZXF1ZXN0QWNjb3VudHMoKSB7CiAgICAgIGNvbnN0IFthZGRyZXNzXSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldEFkZHJlc3NlcygpOwogICAgICBjb25zb2xlLmxvZygicmVxdWVzdEFjY291bnRzIiwgYWRkcmVzcyk7CiAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzczsKICAgICAgcmV0dXJuIFthZGRyZXNzXTsKICAgIH0KICAgIGFzeW5jIGdldEFjY291bnRzKCkgewogICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEFkZHJlc3MgPyBbdGhpcy5zZWxlY3RlZEFkZHJlc3NdIDogW107CiAgICB9CiAgICBhc3luYyBzZW5kVHJhbnNhY3Rpb24odHgpIHsKICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQWRkcmVzcykgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gYWNjb3VudHMgYXZhaWxhYmxlIik7CiAgICAgIH0KICAgICAgaWYgKCF0eC50byB8fCAhdHgudmFsdWUgfHwgIXR4LmdhcykgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1aXJlZCB0cmFuc2FjdGlvbiBwYXJhbWV0ZXJzIik7CiAgICAgIH0KICAgICAgY29uc29sZS5sb2coInNlbmRUcmFuc2FjdGlvbiB0eDogIiwgdHgpOwogICAgICBjb25zb2xlLmxvZygiVHJhbnNhY3Rpb24gZ2FzUHJpY2U6ICIsIHR4Lmdhc1ByaWNlKTsKICAgICAgY29uc29sZS5sb2coIlRyYW5zYWN0aW9uIGdhczogIiwgdHguZ2FzKTsKICAgICAgY29uc3QgdmFsdWUgPSBCaWdJbnQodHgudmFsdWUpOwogICAgICBjb25zdCB2YWx1ZUluRXRoID0gTnVtYmVyKHZhbHVlKSAvIDEwICoqIDE4OwogICAgICBjb25zb2xlLmxvZyhgVHJhbnNhY3Rpb24gdmFsdWUgaW4gRVRIOiAke3ZhbHVlSW5FdGh9YCk7CiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uQ29udGVudCA9IHsKICAgICAgICB0bzogdHgudG8sCiAgICAgICAgdmFsdWUsCiAgICAgICAgZGF0YTogdHguZGF0YSwKICAgICAgICBjaGFpbjogdGhpcy5jbGllbnQuY2hhaW4KICAgICAgfTsKICAgICAgY29uc29sZS5sb2coInNlbmRUcmFuc2FjdGlvbiIsIHRyYW5zYWN0aW9uQ29udGVudCk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgcmVxdWVzdCA9IGF3YWl0IHRoaXMuY2xpZW50LnByZXBhcmVUcmFuc2FjdGlvblJlcXVlc3QodHJhbnNhY3Rpb25Db250ZW50KTsKICAgICAgICBjb25zb2xlLmxvZygiUHJlcGFyZWQgdHJhbnNhY3Rpb24gcmVxdWVzdDoiLCByZXF1ZXN0KTsKICAgICAgICBjb25zdCBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLmNsaWVudC5zaWduVHJhbnNhY3Rpb24ocmVxdWVzdCk7CiAgICAgICAgY29uc29sZS5sb2coIlNlcmlhbGl6ZWQgdHJhbnNhY3Rpb246Iiwgc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgICAgICBjb25zdCBoYXNoMyA9IGF3YWl0IHRoaXMuY2xpZW50LnNlbmRSYXdUcmFuc2FjdGlvbih7CiAgICAgICAgICBzZXJpYWxpemVkVHJhbnNhY3Rpb24KICAgICAgICB9KTsKICAgICAgICBjb25zb2xlLmxvZygic2VuZFRyYW5zYWN0aW9uIGhhc2giLCBoYXNoMyk7CiAgICAgICAgcmV0dXJuIGhhc2gzOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoInNlbmRUcmFuc2FjdGlvbiBlcnJvciIsIGVycm9yKTsKICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgfQogICAgfQogICAgYXN5bmMgc2lnbihhZGRyZXNzLCBtZXNzYWdlKSB7CiAgICAgIGlmIChhZGRyZXNzICE9PSB0aGlzLnNlbGVjdGVkQWRkcmVzcykgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiQWRkcmVzcyBtaXNtYXRjaCIpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zaWduTWVzc2FnZSh7IGFjY291bnQ6IGFkZHJlc3MsIG1lc3NhZ2UgfSk7CiAgICB9CiAgICBhc3luYyBwZXJzb25hbFNpZ24obWVzc2FnZSwgYWRkcmVzcykgewogICAgICBpZiAoYWRkcmVzcyAhPT0gdGhpcy5zZWxlY3RlZEFkZHJlc3MpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFkZHJlc3MgbWlzbWF0Y2giKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2lnbk1lc3NhZ2UoeyBhY2NvdW50OiBhZGRyZXNzLCBtZXNzYWdlIH0pOwogICAgfQogICAgYXN5bmMgc2lnblR5cGVkRGF0YShhZGRyZXNzLCB0eXBlZERhdGEpIHsKICAgICAgaWYgKGFkZHJlc3MgIT09IHRoaXMuc2VsZWN0ZWRBZGRyZXNzKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBZGRyZXNzIG1pc21hdGNoIik7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNpZ25UeXBlZERhdGEoewogICAgICAgIGFjY291bnQ6IGFkZHJlc3MsCiAgICAgICAgZG9tYWluOiB0eXBlZERhdGEuZG9tYWluLAogICAgICAgIHR5cGVzOiB0eXBlZERhdGEudHlwZXMsCiAgICAgICAgbWVzc2FnZTogdHlwZWREYXRhLm1lc3NhZ2UsCiAgICAgICAgcHJpbWFyeVR5cGU6IHR5cGVkRGF0YS5wcmltYXJ5VHlwZQogICAgICB9KTsKICAgIH0KICAgIGFzeW5jIGdldENoYWluSWQoKSB7CiAgICAgIGNvbnN0IGNoYWluSWQgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRDaGFpbklkKCk7CiAgICAgIGNvbnNvbGUubG9nKCJnZXRDaGFpbklkIiwgY2hhaW5JZCk7CiAgICAgIHJldHVybiBjaGFpbklkOwogICAgfQogICAgYXN5bmMgZ2V0TmV0d29ya0lkKCkgewogICAgICBjb25zdCBjaGFpbklkID0gYXdhaXQgdGhpcy5nZXRDaGFpbklkKCk7CiAgICAgIHJldHVybiBjaGFpbklkLnRvU3RyaW5nKCk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBhZGRFaXA2OTYzTGlzdGVuZXIoaW5mbywgcHJvdmlkZXIpIHsKICAgIGNvbnN0IGFubm91bmNlRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoCiAgICAgICJlaXA2OTYzOmFubm91bmNlUHJvdmlkZXIiLAogICAgICB7CiAgICAgICAgZGV0YWlsOiBPYmplY3QuZnJlZXplKHsgaW5mbywgcHJvdmlkZXIgfSkKICAgICAgfQogICAgKTsKICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGFubm91bmNlRXZlbnQpOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImVpcDY5NjM6cmVxdWVzdFByb3ZpZGVyIiwgKCkgPT4gewogICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChhbm5vdW5jZUV2ZW50KTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiBpbml0aWFsaXplVmllbVByb3ZpZGVyKGNoYWluLCBwcm92aWRlckluZm8pIHsKICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFZpZW1Qcm92aWRlcihjaGFpbiwgbnVsbCk7CiAgICB3aW5kb3cuZXRoZXJldW0gPSB7CiAgICAgIHJlcXVlc3Q6IHByb3ZpZGVyLnJlcXVlc3QuYmluZChwcm92aWRlciksCiAgICAgIGVuYWJsZTogcHJvdmlkZXIuZW5hYmxlLmJpbmQocHJvdmlkZXIpLAogICAgICBvbjogKGV2ZW50TmFtZSwgY2FsbGJhY2spID0+IHsKICAgICAgICBjb25zb2xlLmxvZyhgRXZlbnQgbGlzdGVuZXIgZm9yICR7ZXZlbnROYW1lfSBhZGRlZC5gKTsKICAgICAgfSwKICAgICAgcmVtb3ZlTGlzdGVuZXI6IChldmVudE5hbWUsIGNhbGxiYWNrKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coYEV2ZW50IGxpc3RlbmVyIGZvciAke2V2ZW50TmFtZX0gcmVtb3ZlZC5gKTsKICAgICAgfSwKICAgICAgaXNDb25uZWN0ZWQ6ICgpID0+IHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSwKICAgICAgc2VuZDogKG1ldGhvZCwgcGFyYW1zKSA9PiB7CiAgICAgICAgY29uc29sZS53YXJuKCJzZW5kIGlzIGRlcHJlY2F0ZWQuIFVzZSByZXF1ZXN0IGluc3RlYWQuIik7CiAgICAgICAgcmV0dXJuIHByb3ZpZGVyLnJlcXVlc3QoeyBtZXRob2QsIHBhcmFtcyB9KTsKICAgICAgfSwKICAgICAgc2VuZEFzeW5jOiAocGF5bG9hZCwgY2FsbGJhY2spID0+IHsKICAgICAgICBjb25zb2xlLndhcm4oInNlbmRBc3luYyBpcyBkZXByZWNhdGVkLiBVc2UgcmVxdWVzdCBpbnN0ZWFkLiIpOwogICAgICAgIHByb3ZpZGVyLnJlcXVlc3QoeyBtZXRob2Q6IHBheWxvYWQubWV0aG9kLCBwYXJhbXM6IHBheWxvYWQucGFyYW1zIH0pLnRoZW4oKHJlc3VsdCkgPT4gY2FsbGJhY2sobnVsbCwgeyByZXN1bHQgfSkpLmNhdGNoKChlcnJvcikgPT4gY2FsbGJhY2soZXJyb3IsIG51bGwpKTsKICAgICAgfSwKICAgICAgaXNNZXRhTWFzazogdHJ1ZSwKICAgICAgLy8gU2V0IHRvIHRydWUgaWYgbWltaWNraW5nIE1ldGFNYXNrCiAgICAgIHNlbGVjdGVkQWRkcmVzczogcHJvdmlkZXIuc2VsZWN0ZWRBZGRyZXNzLAogICAgICBjaGFpbklkOiBjaGFpbj8uaWQgfHwgIjB4MSIKICAgICAgLy8gRGVmYXVsdCB0byBtYWlubmV0IGlmIGNoYWluIGlzIG5vdCBwcm92aWRlZAogICAgfTsKICAgIGFkZEVpcDY5NjNMaXN0ZW5lcihwcm92aWRlckluZm8sIHByb3ZpZGVyKTsKICAgIGNvbnNvbGUubG9nKCJWaWVtIHByb3ZpZGVyIGluaXRpYWxpemVkIik7CiAgfQogIHZhciB2aWVtUHJvdmlkZXJJbmZvID0gewogICAgdXVpZDogImQ2OWJjNGM0LWU0M2EtNGQwYS04M2Q3LWI2ZTdiNzUwNGJlYiIsCiAgICBuYW1lOiAiU2hpbmthaSBWaWVtIFByb3ZpZGVyIiwKICAgIGljb246ICJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNelkzSWlCb1pXbG5hSFE5SWpNMk55SWdkbWxsZDBKdmVEMGlNQ0F3SURNMk55QXpOamNpSUdacGJHdzlJbTV2Ym1VaUlIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJK0NqeGphWEpqYkdVZ1kzZzlJakU0TXk0MUlpQmplVDBpTVRnekxqVWlJSEk5SWpFNE15NDFJaUJtYVd4c1BTSWpSa1UyTVRZeUlpOCtDanh3WVhSb0lHUTlJazB5TnpJdU1qazFJREkzTkM0Mk5qaERNamN3TGpjMU9DQXlOamd1T1RjMUlESTJOaTQyTVRrZ01qWTJMakl4TlNBeU5qQXVPRFEwSURJMk5pNDNOemxETWpRNUxqWTJOQ0F5TmpjdU9EWXpJREkwTlM0NU5USWdNalkwTGpJM09TQXlOREF1TmpRMklESTFOaTQwTURSRE1qVTBMall5T0NBeU5Ua3VNelkzSURJMk15NDJORFlnTWpVMUxqY3lOU0F5TmpZdU5EWXpJREkxTkM0eE1EZERNamN3TGpBNUlESTFNaTR3TVRJZ01qY3pMamMySURJME9TNHpNalFnTWpjeUxqTXdPU0F5TkRRdU5UZzFRekkzTUM0NE9EWWdNak01TGprME55QXlOall1TmpFNUlESXpPUzR3TWpJZ01qWXlMakl6T0NBeU16a3VPRFpETWpVMkxqQXlNaUF5TkRFdU1EUTFJREkxTUM0d05qSWdNalF4TGpjek9DQXlORFV1TWpJMklESXpOUzQyT0RSRE1qUTJMakkxSURJek5DNDNOVGtnTWpRM0xqSTNOQ0F5TXpNdU9EQTJJREkwT0M0ek1qY2dNak15TGpnNU5VTXlOVEF1T1RBeUlESXpNQzQyT0RVZ01qVXlMamc1TXlBeU1qZ3VNRGcwSURJMU1TNDFPRFFnTWpJMExqVTNNME15TlRBdU16TXpJREl5TVM0eU1pQXlORGN1TVRZeElESXhPUzR5T1RrZ01qUXpMamt6TWlBeU1Ua3VPRGt4UXpJME1TNHpJREl5TUM0ek9ESWdNak0yTGpBeU15QXlNakl1TURNZ01qTTBMalF4TmlBeU1Ua3VNelF5VERJek5DNDBPRGNnTWpFNUxqTXhNME15TXpNdU9EYzFJREl4T1M0eE5qa2dNak15TGprek55QXlNVFl1TmpVMElESXpNaTQzTXpjZ01qRTBMamd4T1VNeU16RXVOems1SURJd05TNDRORFlnTWpNMUxqWTRNaUF4T1RjdU1qTTFJREkwTUM0NU1UWWdNVGt3TGpBNE1rTXlORGN1TkRRMUlERTRNUzR4T1RZZ01qVXhMamt5TmlBeE56RXVNems1SURJMU15NDVNVGNnTVRZd0xqVXpNME15TlRjdU1ETXlJREUwTXk0ME9ETWdNalV6TGpjek1pQXhNamN1TmpFNElESTBOQzQxTVRVZ01URXpMakF6T1VNeU16TXVOVGMzSURrMUxqY3lPRE1nTWpFNExqRTFPQ0E0TkM0ek1qYzRJREU1Tnk0NE5pQTRNQzR4TXpjMVF6RTVNeTR3T1RVZ056a3VNVFUxSURFNE9DNDBORFFnTnpndU5qTTBPQ0F4T0RNdU9UTTFJRGM0TGpVME9ERkRNVGM1TGpReE1TQTNPQzQyTXpRNElERTNOQzQzTnpRZ056a3VNVFUxSURFM01DNHdNRGtnT0RBdU1UTTNOVU14TkRrdU56STJJRGcwTGpNeU56Z2dNVE0wTGpJNU15QTVOUzQzTWpneklERXlNeTR6TlRRZ01URXpMakF6T1VNeE1UUXVNVFV4SURFeU55NDJNVGdnTVRFd0xqZzFNU0F4TkRNdU5EZ3pJREV4TXk0NU5USWdNVFl3TGpVek0wTXhNVFV1T1RJNUlERTNNUzQwTVRRZ01USXdMalF5TkNBeE9ERXVNVGsySURFeU5pNDVOVE1nTVRrd0xqQTRNa014TXpJdU1qQXlJREU1Tnk0eU16VWdNVE0yTGpBNE5TQXlNRFV1T0RNeUlERXpOUzR4TXpJZ01qRTBMamd4T1VNeE16UXVPVE16SURJeE5pNDJOVFFnTVRNekxqazVOQ0F5TVRrdU1UWTVJREV6TXk0ek9ESWdNakU1TGpNeE0wd3hNek11TkRVeklESXhPUzR6TkRKRE1UTXhMamcwTmlBeU1qSXVNREUxSURFeU5pNDFPRE1nTWpJd0xqTTRNaUF4TWpNdU9UTTRJREl4T1M0NE9URkRNVEl3TGpjeU15QXlNVGt1TWprNUlERXhOeTQxTXpjZ01qSXhMakl5SURFeE5pNHlPRFVnTWpJMExqVTNNME14TVRRdU9UYzJJREl5T0M0d09EUWdNVEUyTGprMU5DQXlNekF1TmpnMUlERXhPUzQxTkRJZ01qTXlMamc1TlVNeE1qQXVOVGsxSURJek15NDRNRFlnTVRJeExqWXhPU0F5TXpRdU56VTVJREV5TWk0Mk5ETWdNak0xTGpZNE5FTXhNVGN1T0RBM0lESTBNUzQzTXpnZ01URXhMamd6TXlBeU5ERXVNRFExSURFd05TNDJNekVnTWpNNUxqZzJRekV3TVM0eU5TQXlNemt1TURJeUlEazJMams0TWprZ01qTTVMamswTnlBNU5TNDFOakExSURJME5DNDFPRFZET1RRdU1UQTVOeUF5TkRrdU16STBJRGszTGpjM09UVWdNalV5TGpBeE1pQXhNREV1TkRBM0lESTFOQzR4TURkRE1UQTBMakl3T1NBeU5UVXVOekkxSURFeE15NHlOREVnTWpVNUxqTTFNaUF4TWpjdU1qSXpJREkxTmk0ME1EUkRNVEl4TGpreE9DQXlOalF1TWpjNUlERXhPQzR5TURVZ01qWTNMamcyTXlBeE1EY3VNREkxSURJMk5pNDNOemxETVRBeExqSTFJREkyTmk0eU1UVWdPVGN1TURrMk55QXlOamd1T1RjMUlEazFMalUzTkRjZ01qYzBMalkyT0VNNU5DNHdPREV5SURJNE1DNHlNekVnT1RjdU1ESTFOaUF5T0RRdU1qRTVJREV3TVM0Mk9URWdNamcyTGpnM09FTXhNRFF1TnpRNUlESTRPQzQyTVRJZ01UQTRMakUyTXlBeU9Ea3VNamt4SURFeE1TNDNOellnTWpnNUxqTTBPVU14TXpFdU5UWXlJREk0T1M0Mk1qTWdNVFEzTGpnNU1TQXlPREV1TkRVNUlERTJNaTQxT1RrZ01qWTVMakUzT0VNeE56QXVOamt5SURJMk1pNDBNVFVnTVRjM0xqTTBPU0F5TlRndU9Ua3hJREU0TXk0NU5Ea2dNalU0TGprd05FTXhPVEF1TlRRNUlESTFPQzQ1T1RFZ01UazNMakU1TVNBeU5qSXVOREUxSURJd05TNHlPVGtnTWpZNUxqRTNPRU15TWpBdU1EQTNJREk0TVM0ME5Ua2dNak0yTGpNek5pQXlPRGt1TmpJeklESTFOaTR4TWpJZ01qZzVMak0wT1VNeU5Ua3VOek0xSURJNE9TNHpNRFVnTWpZekxqRTBPQ0F5T0RndU5qRXlJREkyTmk0eU1EY2dNamcyTGpnM09FTXlOekF1T0RnMklESTROQzR5TVRrZ01qY3pMamd4TnlBeU9EQXVNak14SURJM01pNHpNak1nTWpjMExqWTJPRWd5TnpJdU1qazFXazB4TlRZdU5qSTBJREl3Tnk0eU5qSkRNVFV3TGpVd09DQXlNRGN1TWpRNElERTBOUzQwTlRrZ01qQXlMakV6TXlBeE5EVXVORFEwSURFNU5TNDVOak5ETVRRMUxqUTBOQ0F4T0RrdU5qYzRJREUxTUM0MU5URWdNVGcwTGpVek5DQXhOVFl1T0RVeUlERTROQzQwTnpaRE1UWXlMamcwSURFNE5DNDBNVGdnTVRZNExqRTNOQ0F4T1RBdU1EazNJREUyT0M0eE1UY2dNVGsyTGpRMk9VTXhOamd1TURZeElESXdNaTQzT0RNZ01UWXpMakkxTXlBeU1EY3VNamt4SURFMU5pNDJNalFnTWpBM0xqSTJNbHBOTWpFeExqSXpNU0F5TURjdU1qWXlRekl3TkM0MU9EZ2dNakEzTGpJNU1TQXhPVGt1TnprMUlESXdNaTQzTmprZ01UazVMamN6T0NBeE9UWXVORFk1UXpFNU9TNDJPREVnTVRrd0xqQTVOeUF5TURVdU1ESTVJREU0TkM0ME1UZ2dNakV4TGpBd015QXhPRFF1TkRjMlF6SXhOeTR6TURRZ01UZzBMalUwT0NBeU1qSXVOREV4SURFNE9TNDJPVElnTWpJeUxqUXhNU0F4T1RVdU9UWXpRekl5TWk0ME1URWdNakF5TGpFek15QXlNVGN1TXpRM0lESXdOeTR5TkRnZ01qRXhMakl6TVNBeU1EY3VNall5V2lJZ1ptbHNiRDBpZDJocGRHVWlMejRLUEM5emRtYytDZz09IiwKICAgIC8vIEJhc2U2NCBlbmNvZGVkIGljb24KICAgIHJkbnM6ICJjb20uc2hpbmthaS5kZXNrdG9wIgogIH07CiAgaW5pdGlhbGl6ZVZpZW1Qcm92aWRlcihhcmJpdHJ1bVNlcG9saWEsIHZpZW1Qcm92aWRlckluZm8pOwp9KSgpOwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKQG5vYmxlL2hhc2hlcy9lc20vdXRpbHMuanM6CiAgKCohIG5vYmxlLWhhc2hlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqKQoKQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvdXRpbHMuanM6CiAgKCohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqKQoKQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvbW9kdWxhci5qczoKICAoKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICopCgpAbm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC9jdXJ2ZS5qczoKICAoKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICopCgpAbm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC93ZWllcnN0cmFzcy5qczoKICAoKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICopCgpAbm9ibGUvY3VydmVzL2VzbS9fc2hvcnR3X3V0aWxzLmpzOgogICgqISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKikKCkBub2JsZS9jdXJ2ZXMvZXNtL3NlY3AyNTZrMS5qczoKICAoKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICopCiovCg=="; +export const viemScriptContent = "InVzZSBzdHJpY3QiOwooKCkgPT4gewogIHZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7CiAgdmFyIF9fZXNtID0gKGZuLCByZXMpID0+IGZ1bmN0aW9uIF9faW5pdCgpIHsKICAgIHJldHVybiBmbiAmJiAocmVzID0gKDAsIGZuW19fZ2V0T3duUHJvcE5hbWVzKGZuKVswXV0pKGZuID0gMCkpLCByZXM7CiAgfTsKICB2YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHsKICAgIGZvciAodmFyIG5hbWUgaW4gYWxsKQogICAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pOwogIH07CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL3ZlcnNpb24uanMKICB2YXIgdmVyc2lvbjsKICB2YXIgaW5pdF92ZXJzaW9uID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL3ZlcnNpb24uanMiKCkgewogICAgICB2ZXJzaW9uID0gIjEuMC41IjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vZXJyb3JzLmpzCiAgdmFyIEJhc2VFcnJvcjsKICB2YXIgaW5pdF9lcnJvcnMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vZXJyb3JzLmpzIigpIHsKICAgICAgaW5pdF92ZXJzaW9uKCk7CiAgICAgIEJhc2VFcnJvciA9IGNsYXNzIF9CYXNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3Ioc2hvcnRNZXNzYWdlLCBhcmdzID0ge30pIHsKICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSBhcmdzLmNhdXNlIGluc3RhbmNlb2YgX0Jhc2VFcnJvciA/IGFyZ3MuY2F1c2UuZGV0YWlscyA6IGFyZ3MuY2F1c2U/Lm1lc3NhZ2UgPyBhcmdzLmNhdXNlLm1lc3NhZ2UgOiBhcmdzLmRldGFpbHM7CiAgICAgICAgICBjb25zdCBkb2NzUGF0aDkgPSBhcmdzLmNhdXNlIGluc3RhbmNlb2YgX0Jhc2VFcnJvciA/IGFyZ3MuY2F1c2UuZG9jc1BhdGggfHwgYXJncy5kb2NzUGF0aCA6IGFyZ3MuZG9jc1BhdGg7CiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gWwogICAgICAgICAgICBzaG9ydE1lc3NhZ2UgfHwgIkFuIGVycm9yIG9jY3VycmVkLiIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICAuLi5hcmdzLm1ldGFNZXNzYWdlcyA/IFsuLi5hcmdzLm1ldGFNZXNzYWdlcywgIiJdIDogW10sCiAgICAgICAgICAgIC4uLmRvY3NQYXRoOSA/IFtgRG9jczogaHR0cHM6Ly9hYml0eXBlLmRldiR7ZG9jc1BhdGg5fWBdIDogW10sCiAgICAgICAgICAgIC4uLmRldGFpbHMgPyBbYERldGFpbHM6ICR7ZGV0YWlsc31gXSA6IFtdLAogICAgICAgICAgICBgVmVyc2lvbjogYWJpdHlwZUAke3ZlcnNpb259YAogICAgICAgICAgXS5qb2luKCJcbiIpOwogICAgICAgICAgc3VwZXIobWVzc2FnZSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRldGFpbHMiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkb2NzUGF0aCIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm1ldGFNZXNzYWdlcyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNob3J0TWVzc2FnZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiQWJpVHlwZUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoYXJncy5jYXVzZSkKICAgICAgICAgICAgdGhpcy5jYXVzZSA9IGFyZ3MuY2F1c2U7CiAgICAgICAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzOwogICAgICAgICAgdGhpcy5kb2NzUGF0aCA9IGRvY3NQYXRoOTsKICAgICAgICAgIHRoaXMubWV0YU1lc3NhZ2VzID0gYXJncy5tZXRhTWVzc2FnZXM7CiAgICAgICAgICB0aGlzLnNob3J0TWVzc2FnZSA9IHNob3J0TWVzc2FnZTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL3JlZ2V4LmpzCiAgZnVuY3Rpb24gZXhlY1R5cGVkKHJlZ2V4LCBzdHJpbmcpIHsKICAgIGNvbnN0IG1hdGNoID0gcmVnZXguZXhlYyhzdHJpbmcpOwogICAgcmV0dXJuIG1hdGNoPy5ncm91cHM7CiAgfQogIHZhciBieXRlc1JlZ2V4LCBpbnRlZ2VyUmVnZXgsIGlzVHVwbGVSZWdleDsKICB2YXIgaW5pdF9yZWdleCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9yZWdleC5qcyIoKSB7CiAgICAgIGJ5dGVzUmVnZXggPSAvXmJ5dGVzKFsxLTldfDFbMC05XXwyWzAtOV18M1swLTJdKT8kLzsKICAgICAgaW50ZWdlclJlZ2V4ID0gL151P2ludCg4fDE2fDI0fDMyfDQwfDQ4fDU2fDY0fDcyfDgwfDg4fDk2fDEwNHwxMTJ8MTIwfDEyOHwxMzZ8MTQ0fDE1MnwxNjB8MTY4fDE3NnwxODR8MTkyfDIwMHwyMDh8MjE2fDIyNHwyMzJ8MjQwfDI0OHwyNTYpPyQvOwogICAgICBpc1R1cGxlUmVnZXggPSAvXlwoLis/XCkuKj8kLzsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZm9ybWF0QWJpUGFyYW1ldGVyLmpzCiAgZnVuY3Rpb24gZm9ybWF0QWJpUGFyYW1ldGVyKGFiaVBhcmFtZXRlcikgewogICAgbGV0IHR5cGUgPSBhYmlQYXJhbWV0ZXIudHlwZTsKICAgIGlmICh0dXBsZVJlZ2V4LnRlc3QoYWJpUGFyYW1ldGVyLnR5cGUpICYmICJjb21wb25lbnRzIiBpbiBhYmlQYXJhbWV0ZXIpIHsKICAgICAgdHlwZSA9ICIoIjsKICAgICAgY29uc3QgbGVuZ3RoID0gYWJpUGFyYW1ldGVyLmNvbXBvbmVudHMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gYWJpUGFyYW1ldGVyLmNvbXBvbmVudHNbaV07CiAgICAgICAgdHlwZSArPSBmb3JtYXRBYmlQYXJhbWV0ZXIoY29tcG9uZW50KTsKICAgICAgICBpZiAoaSA8IGxlbmd0aCAtIDEpCiAgICAgICAgICB0eXBlICs9ICIsICI7CiAgICAgIH0KICAgICAgY29uc3QgcmVzdWx0ID0gZXhlY1R5cGVkKHR1cGxlUmVnZXgsIGFiaVBhcmFtZXRlci50eXBlKTsKICAgICAgdHlwZSArPSBgKSR7cmVzdWx0Py5hcnJheSA/PyAiIn1gOwogICAgICByZXR1cm4gZm9ybWF0QWJpUGFyYW1ldGVyKHsKICAgICAgICAuLi5hYmlQYXJhbWV0ZXIsCiAgICAgICAgdHlwZQogICAgICB9KTsKICAgIH0KICAgIGlmICgiaW5kZXhlZCIgaW4gYWJpUGFyYW1ldGVyICYmIGFiaVBhcmFtZXRlci5pbmRleGVkKQogICAgICB0eXBlID0gYCR7dHlwZX0gaW5kZXhlZGA7CiAgICBpZiAoYWJpUGFyYW1ldGVyLm5hbWUpCiAgICAgIHJldHVybiBgJHt0eXBlfSAke2FiaVBhcmFtZXRlci5uYW1lfWA7CiAgICByZXR1cm4gdHlwZTsKICB9CiAgdmFyIHR1cGxlUmVnZXg7CiAgdmFyIGluaXRfZm9ybWF0QWJpUGFyYW1ldGVyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Zvcm1hdEFiaVBhcmFtZXRlci5qcyIoKSB7CiAgICAgIGluaXRfcmVnZXgoKTsKICAgICAgdHVwbGVSZWdleCA9IC9edHVwbGUoPzxhcnJheT4oXFsoXGQqKVxdKSopJC87CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Zvcm1hdEFiaVBhcmFtZXRlcnMuanMKICBmdW5jdGlvbiBmb3JtYXRBYmlQYXJhbWV0ZXJzKGFiaVBhcmFtZXRlcnMpIHsKICAgIGxldCBwYXJhbXMgPSAiIjsKICAgIGNvbnN0IGxlbmd0aCA9IGFiaVBhcmFtZXRlcnMubGVuZ3RoOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhYmlQYXJhbWV0ZXIgPSBhYmlQYXJhbWV0ZXJzW2ldOwogICAgICBwYXJhbXMgKz0gZm9ybWF0QWJpUGFyYW1ldGVyKGFiaVBhcmFtZXRlcik7CiAgICAgIGlmIChpICE9PSBsZW5ndGggLSAxKQogICAgICAgIHBhcmFtcyArPSAiLCAiOwogICAgfQogICAgcmV0dXJuIHBhcmFtczsKICB9CiAgdmFyIGluaXRfZm9ybWF0QWJpUGFyYW1ldGVycyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9mb3JtYXRBYmlQYXJhbWV0ZXJzLmpzIigpIHsKICAgICAgaW5pdF9mb3JtYXRBYmlQYXJhbWV0ZXIoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZm9ybWF0QWJpSXRlbS5qcwogIGZ1bmN0aW9uIGZvcm1hdEFiaUl0ZW0oYWJpSXRlbSkgewogICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImZ1bmN0aW9uIikKICAgICAgcmV0dXJuIGBmdW5jdGlvbiAke2FiaUl0ZW0ubmFtZX0oJHtmb3JtYXRBYmlQYXJhbWV0ZXJzKGFiaUl0ZW0uaW5wdXRzKX0pJHthYmlJdGVtLnN0YXRlTXV0YWJpbGl0eSAmJiBhYmlJdGVtLnN0YXRlTXV0YWJpbGl0eSAhPT0gIm5vbnBheWFibGUiID8gYCAke2FiaUl0ZW0uc3RhdGVNdXRhYmlsaXR5fWAgOiAiIn0ke2FiaUl0ZW0ub3V0cHV0cy5sZW5ndGggPyBgIHJldHVybnMgKCR7Zm9ybWF0QWJpUGFyYW1ldGVycyhhYmlJdGVtLm91dHB1dHMpfSlgIDogIiJ9YDsKICAgIGlmIChhYmlJdGVtLnR5cGUgPT09ICJldmVudCIpCiAgICAgIHJldHVybiBgZXZlbnQgJHthYmlJdGVtLm5hbWV9KCR7Zm9ybWF0QWJpUGFyYW1ldGVycyhhYmlJdGVtLmlucHV0cyl9KWA7CiAgICBpZiAoYWJpSXRlbS50eXBlID09PSAiZXJyb3IiKQogICAgICByZXR1cm4gYGVycm9yICR7YWJpSXRlbS5uYW1lfSgke2Zvcm1hdEFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMpfSlgOwogICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImNvbnN0cnVjdG9yIikKICAgICAgcmV0dXJuIGBjb25zdHJ1Y3Rvcigke2Zvcm1hdEFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMpfSkke2FiaUl0ZW0uc3RhdGVNdXRhYmlsaXR5ID09PSAicGF5YWJsZSIgPyAiIHBheWFibGUiIDogIiJ9YDsKICAgIGlmIChhYmlJdGVtLnR5cGUgPT09ICJmYWxsYmFjayIpCiAgICAgIHJldHVybiAiZmFsbGJhY2soKSI7CiAgICByZXR1cm4gInJlY2VpdmUoKSBleHRlcm5hbCBwYXlhYmxlIjsKICB9CiAgdmFyIGluaXRfZm9ybWF0QWJpSXRlbSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9mb3JtYXRBYmlJdGVtLmpzIigpIHsKICAgICAgaW5pdF9mb3JtYXRBYmlQYXJhbWV0ZXJzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvc2lnbmF0dXJlcy5qcwogIGZ1bmN0aW9uIGlzRXJyb3JTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gZXJyb3JTaWduYXR1cmVSZWdleC50ZXN0KHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGV4ZWNFcnJvclNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBleGVjVHlwZWQoZXJyb3JTaWduYXR1cmVSZWdleCwgc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gaXNFdmVudFNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBldmVudFNpZ25hdHVyZVJlZ2V4LnRlc3Qoc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gZXhlY0V2ZW50U2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIGV4ZWNUeXBlZChldmVudFNpZ25hdHVyZVJlZ2V4LCBzaWduYXR1cmUpOwogIH0KICBmdW5jdGlvbiBpc0Z1bmN0aW9uU2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uU2lnbmF0dXJlUmVnZXgudGVzdChzaWduYXR1cmUpOwogIH0KICBmdW5jdGlvbiBleGVjRnVuY3Rpb25TaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gZXhlY1R5cGVkKGZ1bmN0aW9uU2lnbmF0dXJlUmVnZXgsIHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGlzU3RydWN0U2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIHN0cnVjdFNpZ25hdHVyZVJlZ2V4LnRlc3Qoc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gZXhlY1N0cnVjdFNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBleGVjVHlwZWQoc3RydWN0U2lnbmF0dXJlUmVnZXgsIHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGlzQ29uc3RydWN0b3JTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gY29uc3RydWN0b3JTaWduYXR1cmVSZWdleC50ZXN0KHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGV4ZWNDb25zdHJ1Y3RvclNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBleGVjVHlwZWQoY29uc3RydWN0b3JTaWduYXR1cmVSZWdleCwgc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gaXNGYWxsYmFja1NpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBmYWxsYmFja1NpZ25hdHVyZVJlZ2V4LnRlc3Qoc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gaXNSZWNlaXZlU2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIHJlY2VpdmVTaWduYXR1cmVSZWdleC50ZXN0KHNpZ25hdHVyZSk7CiAgfQogIHZhciBlcnJvclNpZ25hdHVyZVJlZ2V4LCBldmVudFNpZ25hdHVyZVJlZ2V4LCBmdW5jdGlvblNpZ25hdHVyZVJlZ2V4LCBzdHJ1Y3RTaWduYXR1cmVSZWdleCwgY29uc3RydWN0b3JTaWduYXR1cmVSZWdleCwgZmFsbGJhY2tTaWduYXR1cmVSZWdleCwgcmVjZWl2ZVNpZ25hdHVyZVJlZ2V4LCBtb2RpZmllcnMsIGV2ZW50TW9kaWZpZXJzLCBmdW5jdGlvbk1vZGlmaWVyczsKICB2YXIgaW5pdF9zaWduYXR1cmVzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvc2lnbmF0dXJlcy5qcyIoKSB7CiAgICAgIGluaXRfcmVnZXgoKTsKICAgICAgZXJyb3JTaWduYXR1cmVSZWdleCA9IC9eZXJyb3IgKD88bmFtZT5bYS16QS1aJF9dW2EtekEtWjAtOSRfXSopXCgoPzxwYXJhbWV0ZXJzPi4qPylcKSQvOwogICAgICBldmVudFNpZ25hdHVyZVJlZ2V4ID0gL15ldmVudCAoPzxuYW1lPlthLXpBLVokX11bYS16QS1aMC05JF9dKilcKCg/PHBhcmFtZXRlcnM+Lio/KVwpJC87CiAgICAgIGZ1bmN0aW9uU2lnbmF0dXJlUmVnZXggPSAvXmZ1bmN0aW9uICg/PG5hbWU+W2EtekEtWiRfXVthLXpBLVowLTkkX10qKVwoKD88cGFyYW1ldGVycz4uKj8pXCkoPzogKD88c2NvcGU+ZXh0ZXJuYWx8cHVibGljezF9KSk/KD86ICg/PHN0YXRlTXV0YWJpbGl0eT5wdXJlfHZpZXd8bm9ucGF5YWJsZXxwYXlhYmxlezF9KSk/KD86IHJldHVybnNccz9cKCg/PHJldHVybnM+Lio/KVwpKT8kLzsKICAgICAgc3RydWN0U2lnbmF0dXJlUmVnZXggPSAvXnN0cnVjdCAoPzxuYW1lPlthLXpBLVokX11bYS16QS1aMC05JF9dKikgXHsoPzxwcm9wZXJ0aWVzPi4qPylcfSQvOwogICAgICBjb25zdHJ1Y3RvclNpZ25hdHVyZVJlZ2V4ID0gL15jb25zdHJ1Y3RvclwoKD88cGFyYW1ldGVycz4uKj8pXCkoPzpccyg/PHN0YXRlTXV0YWJpbGl0eT5wYXlhYmxlezF9KSk/JC87CiAgICAgIGZhbGxiYWNrU2lnbmF0dXJlUmVnZXggPSAvXmZhbGxiYWNrXChcKSBleHRlcm5hbCg/OlxzKD88c3RhdGVNdXRhYmlsaXR5PnBheWFibGV7MX0pKT8kLzsKICAgICAgcmVjZWl2ZVNpZ25hdHVyZVJlZ2V4ID0gL15yZWNlaXZlXChcKSBleHRlcm5hbCBwYXlhYmxlJC87CiAgICAgIG1vZGlmaWVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsKICAgICAgICAibWVtb3J5IiwKICAgICAgICAiaW5kZXhlZCIsCiAgICAgICAgInN0b3JhZ2UiLAogICAgICAgICJjYWxsZGF0YSIKICAgICAgXSk7CiAgICAgIGV2ZW50TW9kaWZpZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoWyJpbmRleGVkIl0pOwogICAgICBmdW5jdGlvbk1vZGlmaWVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsKICAgICAgICAiY2FsbGRhdGEiLAogICAgICAgICJtZW1vcnkiLAogICAgICAgICJzdG9yYWdlIgogICAgICBdKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL2FiaUl0ZW0uanMKICB2YXIgSW52YWxpZEFiaUl0ZW1FcnJvciwgVW5rbm93blR5cGVFcnJvciwgVW5rbm93blNvbGlkaXR5VHlwZUVycm9yOwogIHZhciBpbml0X2FiaUl0ZW0gPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL2FiaUl0ZW0uanMiKCkgewogICAgICBpbml0X2Vycm9ycygpOwogICAgICBJbnZhbGlkQWJpSXRlbUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgc2lnbmF0dXJlIH0pIHsKICAgICAgICAgIHN1cGVyKCJGYWlsZWQgdG8gcGFyc2UgQUJJIGl0ZW0uIiwgewogICAgICAgICAgICBkZXRhaWxzOiBgcGFyc2VBYmlJdGVtKCR7SlNPTi5zdHJpbmdpZnkoc2lnbmF0dXJlLCBudWxsLCAyKX0pYCwKICAgICAgICAgICAgZG9jc1BhdGg6ICIvYXBpL2h1bWFuI3BhcnNlYWJpaXRlbS0xIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZEFiaUl0ZW1FcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgVW5rbm93blR5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHR5cGUgfSkgewogICAgICAgICAgc3VwZXIoIlVua25vd24gdHlwZS4iLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBUeXBlICIke3R5cGV9IiBpcyBub3QgYSB2YWxpZCBBQkkgdHlwZS4gUGVyaGFwcyB5b3UgZm9yZ290IHRvIGluY2x1ZGUgYSBzdHJ1Y3Qgc2lnbmF0dXJlP2AKICAgICAgICAgICAgXQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiVW5rbm93blR5cGVFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgVW5rbm93blNvbGlkaXR5VHlwZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcigiVW5rbm93biB0eXBlLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIEFCSSB0eXBlLmBdCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJVbmtub3duU29saWRpdHlUeXBlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9hYmlQYXJhbWV0ZXIuanMKICB2YXIgSW52YWxpZEFiaVBhcmFtZXRlckVycm9yLCBJbnZhbGlkQWJpUGFyYW1ldGVyc0Vycm9yLCBJbnZhbGlkUGFyYW1ldGVyRXJyb3IsIFNvbGlkaXR5UHJvdGVjdGVkS2V5d29yZEVycm9yLCBJbnZhbGlkTW9kaWZpZXJFcnJvciwgSW52YWxpZEZ1bmN0aW9uTW9kaWZpZXJFcnJvciwgSW52YWxpZEFiaVR5cGVQYXJhbWV0ZXJFcnJvcjsKICB2YXIgaW5pdF9hYmlQYXJhbWV0ZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL2FiaVBhcmFtZXRlci5qcyIoKSB7CiAgICAgIGluaXRfZXJyb3JzKCk7CiAgICAgIEludmFsaWRBYmlQYXJhbWV0ZXJFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHBhcmFtIH0pIHsKICAgICAgICAgIHN1cGVyKCJGYWlsZWQgdG8gcGFyc2UgQUJJIHBhcmFtZXRlci4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IGBwYXJzZUFiaVBhcmFtZXRlcigke0pTT04uc3RyaW5naWZ5KHBhcmFtLCBudWxsLCAyKX0pYCwKICAgICAgICAgICAgZG9jc1BhdGg6ICIvYXBpL2h1bWFuI3BhcnNlYWJpcGFyYW1ldGVyLTEiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJJbnZhbGlkQWJpUGFyYW1ldGVyRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbXMgfSkgewogICAgICAgICAgc3VwZXIoIkZhaWxlZCB0byBwYXJzZSBBQkkgcGFyYW1ldGVycy4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IGBwYXJzZUFiaVBhcmFtZXRlcnMoJHtKU09OLnN0cmluZ2lmeShwYXJhbXMsIG51bGwsIDIpfSlgLAogICAgICAgICAgICBkb2NzUGF0aDogIi9hcGkvaHVtYW4jcGFyc2VhYmlwYXJhbWV0ZXJzLTEiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJJbnZhbGlkQWJpUGFyYW1ldGVyc0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkUGFyYW1ldGVyRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSB9KSB7CiAgICAgICAgICBzdXBlcigiSW52YWxpZCBBQkkgcGFyYW1ldGVyLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogcGFyYW0KICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJuYW1lIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogIkludmFsaWRQYXJhbWV0ZXJFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU29saWRpdHlQcm90ZWN0ZWRLZXl3b3JkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSwgbmFtZSB9KSB7CiAgICAgICAgICBzdXBlcigiSW52YWxpZCBBQkkgcGFyYW1ldGVyLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogcGFyYW0sCiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGAiJHtuYW1lfSIgaXMgYSBwcm90ZWN0ZWQgU29saWRpdHkga2V5d29yZC4gTW9yZSBpbmZvOiBodHRwczovL2RvY3Muc29saWRpdHlsYW5nLm9yZy9lbi9sYXRlc3QvY2hlYXRzaGVldC5odG1sYAogICAgICAgICAgICBdCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJTb2xpZGl0eVByb3RlY3RlZEtleXdvcmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgSW52YWxpZE1vZGlmaWVyRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSwgdHlwZSwgbW9kaWZpZXIgfSkgewogICAgICAgICAgc3VwZXIoIkludmFsaWQgQUJJIHBhcmFtZXRlci4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IHBhcmFtLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgTW9kaWZpZXIgIiR7bW9kaWZpZXJ9IiBub3QgYWxsb3dlZCR7dHlwZSA/IGAgaW4gIiR7dHlwZX0iIHR5cGVgIDogIiJ9LmAKICAgICAgICAgICAgXQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZE1vZGlmaWVyRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSwgdHlwZSwgbW9kaWZpZXIgfSkgewogICAgICAgICAgc3VwZXIoIkludmFsaWQgQUJJIHBhcmFtZXRlci4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IHBhcmFtLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgTW9kaWZpZXIgIiR7bW9kaWZpZXJ9IiBub3QgYWxsb3dlZCR7dHlwZSA/IGAgaW4gIiR7dHlwZX0iIHR5cGVgIDogIiJ9LmAsCiAgICAgICAgICAgICAgYERhdGEgbG9jYXRpb24gY2FuIG9ubHkgYmUgc3BlY2lmaWVkIGZvciBhcnJheSwgc3RydWN0LCBvciBtYXBwaW5nIHR5cGVzLCBidXQgIiR7bW9kaWZpZXJ9IiB3YXMgZ2l2ZW4uYAogICAgICAgICAgICBdCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJJbnZhbGlkRnVuY3Rpb25Nb2RpZmllckVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQWJpVHlwZVBhcmFtZXRlckVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYWJpUGFyYW1ldGVyIH0pIHsKICAgICAgICAgIHN1cGVyKCJJbnZhbGlkIEFCSSBwYXJhbWV0ZXIuIiwgewogICAgICAgICAgICBkZXRhaWxzOiBKU09OLnN0cmluZ2lmeShhYmlQYXJhbWV0ZXIsIG51bGwsIDIpLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsiQUJJIHBhcmFtZXRlciB0eXBlIGlzIGludmFsaWQuIl0KICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJuYW1lIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogIkludmFsaWRBYmlUeXBlUGFyYW1ldGVyRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zaWduYXR1cmUuanMKICB2YXIgSW52YWxpZFNpZ25hdHVyZUVycm9yLCBVbmtub3duU2lnbmF0dXJlRXJyb3IsIEludmFsaWRTdHJ1Y3RTaWduYXR1cmVFcnJvcjsKICB2YXIgaW5pdF9zaWduYXR1cmUgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL3NpZ25hdHVyZS5qcyIoKSB7CiAgICAgIGluaXRfZXJyb3JzKCk7CiAgICAgIEludmFsaWRTaWduYXR1cmVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHNpZ25hdHVyZSwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihgSW52YWxpZCAke3R5cGV9IHNpZ25hdHVyZS5gLCB7CiAgICAgICAgICAgIGRldGFpbHM6IHNpZ25hdHVyZQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZFNpZ25hdHVyZUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBVbmtub3duU2lnbmF0dXJlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBzaWduYXR1cmUgfSkgewogICAgICAgICAgc3VwZXIoIlVua25vd24gc2lnbmF0dXJlLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogc2lnbmF0dXJlCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJVbmtub3duU2lnbmF0dXJlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRTdHJ1Y3RTaWduYXR1cmVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHNpZ25hdHVyZSB9KSB7CiAgICAgICAgICBzdXBlcigiSW52YWxpZCBzdHJ1Y3Qgc2lnbmF0dXJlLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogc2lnbmF0dXJlLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsiTm8gcHJvcGVydGllcyBleGlzdC4iXQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZFN0cnVjdFNpZ25hdHVyZUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9lcnJvcnMvc3RydWN0LmpzCiAgdmFyIENpcmN1bGFyUmVmZXJlbmNlRXJyb3I7CiAgdmFyIGluaXRfc3RydWN0ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zdHJ1Y3QuanMiKCkgewogICAgICBpbml0X2Vycm9ycygpOwogICAgICBDaXJjdWxhclJlZmVyZW5jZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYFN0cnVjdCAiJHt0eXBlfSIgaXMgYSBjaXJjdWxhciByZWZlcmVuY2UuYF0KICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJuYW1lIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogIkNpcmN1bGFyUmVmZXJlbmNlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zcGxpdFBhcmFtZXRlcnMuanMKICB2YXIgSW52YWxpZFBhcmVudGhlc2lzRXJyb3I7CiAgdmFyIGluaXRfc3BsaXRQYXJhbWV0ZXJzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zcGxpdFBhcmFtZXRlcnMuanMiKCkgewogICAgICBpbml0X2Vycm9ycygpOwogICAgICBJbnZhbGlkUGFyZW50aGVzaXNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGN1cnJlbnQsIGRlcHRoIH0pIHsKICAgICAgICAgIHN1cGVyKCJVbmJhbGFuY2VkIHBhcmVudGhlc2VzLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgYCIke2N1cnJlbnQudHJpbSgpfSIgaGFzIHRvbyBtYW55ICR7ZGVwdGggPiAwID8gIm9wZW5pbmciIDogImNsb3NpbmcifSBwYXJlbnRoZXNlcy5gCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIGRldGFpbHM6IGBEZXB0aCAiJHtkZXB0aH0iYAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZFBhcmVudGhlc2lzRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvY2FjaGUuanMKICBmdW5jdGlvbiBnZXRQYXJhbWV0ZXJDYWNoZUtleShwYXJhbSwgdHlwZSkgewogICAgaWYgKHR5cGUpCiAgICAgIHJldHVybiBgJHt0eXBlfToke3BhcmFtfWA7CiAgICByZXR1cm4gcGFyYW07CiAgfQogIHZhciBwYXJhbWV0ZXJDYWNoZTsKICB2YXIgaW5pdF9jYWNoZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL2NhY2hlLmpzIigpIHsKICAgICAgcGFyYW1ldGVyQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbCiAgICAgICAgLy8gVW5uYW1lZAogICAgICAgIFsiYWRkcmVzcyIsIHsgdHlwZTogImFkZHJlc3MiIH1dLAogICAgICAgIFsiYm9vbCIsIHsgdHlwZTogImJvb2wiIH1dLAogICAgICAgIFsiYnl0ZXMiLCB7IHR5cGU6ICJieXRlcyIgfV0sCiAgICAgICAgWyJieXRlczMyIiwgeyB0eXBlOiAiYnl0ZXMzMiIgfV0sCiAgICAgICAgWyJpbnQiLCB7IHR5cGU6ICJpbnQyNTYiIH1dLAogICAgICAgIFsiaW50MjU2IiwgeyB0eXBlOiAiaW50MjU2IiB9XSwKICAgICAgICBbInN0cmluZyIsIHsgdHlwZTogInN0cmluZyIgfV0sCiAgICAgICAgWyJ1aW50IiwgeyB0eXBlOiAidWludDI1NiIgfV0sCiAgICAgICAgWyJ1aW50OCIsIHsgdHlwZTogInVpbnQ4IiB9XSwKICAgICAgICBbInVpbnQxNiIsIHsgdHlwZTogInVpbnQxNiIgfV0sCiAgICAgICAgWyJ1aW50MjQiLCB7IHR5cGU6ICJ1aW50MjQiIH1dLAogICAgICAgIFsidWludDMyIiwgeyB0eXBlOiAidWludDMyIiB9XSwKICAgICAgICBbInVpbnQ2NCIsIHsgdHlwZTogInVpbnQ2NCIgfV0sCiAgICAgICAgWyJ1aW50OTYiLCB7IHR5cGU6ICJ1aW50OTYiIH1dLAogICAgICAgIFsidWludDExMiIsIHsgdHlwZTogInVpbnQxMTIiIH1dLAogICAgICAgIFsidWludDE2MCIsIHsgdHlwZTogInVpbnQxNjAiIH1dLAogICAgICAgIFsidWludDE5MiIsIHsgdHlwZTogInVpbnQxOTIiIH1dLAogICAgICAgIFsidWludDI1NiIsIHsgdHlwZTogInVpbnQyNTYiIH1dLAogICAgICAgIC8vIE5hbWVkCiAgICAgICAgWyJhZGRyZXNzIG93bmVyIiwgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJvd25lciIgfV0sCiAgICAgICAgWyJhZGRyZXNzIHRvIiwgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJ0byIgfV0sCiAgICAgICAgWyJib29sIGFwcHJvdmVkIiwgeyB0eXBlOiAiYm9vbCIsIG5hbWU6ICJhcHByb3ZlZCIgfV0sCiAgICAgICAgWyJieXRlcyBfZGF0YSIsIHsgdHlwZTogImJ5dGVzIiwgbmFtZTogIl9kYXRhIiB9XSwKICAgICAgICBbImJ5dGVzIGRhdGEiLCB7IHR5cGU6ICJieXRlcyIsIG5hbWU6ICJkYXRhIiB9XSwKICAgICAgICBbImJ5dGVzIHNpZ25hdHVyZSIsIHsgdHlwZTogImJ5dGVzIiwgbmFtZTogInNpZ25hdHVyZSIgfV0sCiAgICAgICAgWyJieXRlczMyIGhhc2giLCB7IHR5cGU6ICJieXRlczMyIiwgbmFtZTogImhhc2giIH1dLAogICAgICAgIFsiYnl0ZXMzMiByIiwgeyB0eXBlOiAiYnl0ZXMzMiIsIG5hbWU6ICJyIiB9XSwKICAgICAgICBbImJ5dGVzMzIgcm9vdCIsIHsgdHlwZTogImJ5dGVzMzIiLCBuYW1lOiAicm9vdCIgfV0sCiAgICAgICAgWyJieXRlczMyIHMiLCB7IHR5cGU6ICJieXRlczMyIiwgbmFtZTogInMiIH1dLAogICAgICAgIFsic3RyaW5nIG5hbWUiLCB7IHR5cGU6ICJzdHJpbmciLCBuYW1lOiAibmFtZSIgfV0sCiAgICAgICAgWyJzdHJpbmcgc3ltYm9sIiwgeyB0eXBlOiAic3RyaW5nIiwgbmFtZTogInN5bWJvbCIgfV0sCiAgICAgICAgWyJzdHJpbmcgdG9rZW5VUkkiLCB7IHR5cGU6ICJzdHJpbmciLCBuYW1lOiAidG9rZW5VUkkiIH1dLAogICAgICAgIFsidWludCB0b2tlbklkIiwgeyB0eXBlOiAidWludDI1NiIsIG5hbWU6ICJ0b2tlbklkIiB9XSwKICAgICAgICBbInVpbnQ4IHYiLCB7IHR5cGU6ICJ1aW50OCIsIG5hbWU6ICJ2IiB9XSwKICAgICAgICBbInVpbnQyNTYgYmFsYW5jZSIsIHsgdHlwZTogInVpbnQyNTYiLCBuYW1lOiAiYmFsYW5jZSIgfV0sCiAgICAgICAgWyJ1aW50MjU2IHRva2VuSWQiLCB7IHR5cGU6ICJ1aW50MjU2IiwgbmFtZTogInRva2VuSWQiIH1dLAogICAgICAgIFsidWludDI1NiB2YWx1ZSIsIHsgdHlwZTogInVpbnQyNTYiLCBuYW1lOiAidmFsdWUiIH1dLAogICAgICAgIC8vIEluZGV4ZWQKICAgICAgICBbCiAgICAgICAgICAiZXZlbnQ6YWRkcmVzcyBpbmRleGVkIGZyb20iLAogICAgICAgICAgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJmcm9tIiwgaW5kZXhlZDogdHJ1ZSB9CiAgICAgICAgXSwKICAgICAgICBbImV2ZW50OmFkZHJlc3MgaW5kZXhlZCB0byIsIHsgdHlwZTogImFkZHJlc3MiLCBuYW1lOiAidG8iLCBpbmRleGVkOiB0cnVlIH1dLAogICAgICAgIFsKICAgICAgICAgICJldmVudDp1aW50IGluZGV4ZWQgdG9rZW5JZCIsCiAgICAgICAgICB7IHR5cGU6ICJ1aW50MjU2IiwgbmFtZTogInRva2VuSWQiLCBpbmRleGVkOiB0cnVlIH0KICAgICAgICBdLAogICAgICAgIFsKICAgICAgICAgICJldmVudDp1aW50MjU2IGluZGV4ZWQgdG9rZW5JZCIsCiAgICAgICAgICB7IHR5cGU6ICJ1aW50MjU2IiwgbmFtZTogInRva2VuSWQiLCBpbmRleGVkOiB0cnVlIH0KICAgICAgICBdCiAgICAgIF0pOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL3V0aWxzLmpzCiAgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmUoc2lnbmF0dXJlLCBzdHJ1Y3RzID0ge30pIHsKICAgIGlmIChpc0Z1bmN0aW9uU2lnbmF0dXJlKHNpZ25hdHVyZSkpIHsKICAgICAgY29uc3QgbWF0Y2ggPSBleGVjRnVuY3Rpb25TaWduYXR1cmUoc2lnbmF0dXJlKTsKICAgICAgaWYgKCFtYXRjaCkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFNpZ25hdHVyZUVycm9yKHsgc2lnbmF0dXJlLCB0eXBlOiAiZnVuY3Rpb24iIH0pOwogICAgICBjb25zdCBpbnB1dFBhcmFtcyA9IHNwbGl0UGFyYW1ldGVycyhtYXRjaC5wYXJhbWV0ZXJzKTsKICAgICAgY29uc3QgaW5wdXRzID0gW107CiAgICAgIGNvbnN0IGlucHV0TGVuZ3RoID0gaW5wdXRQYXJhbXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHsKICAgICAgICBpbnB1dHMucHVzaChwYXJzZUFiaVBhcmFtZXRlcihpbnB1dFBhcmFtc1tpXSwgewogICAgICAgICAgbW9kaWZpZXJzOiBmdW5jdGlvbk1vZGlmaWVycywKICAgICAgICAgIHN0cnVjdHMsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSkpOwogICAgICB9CiAgICAgIGNvbnN0IG91dHB1dHMgPSBbXTsKICAgICAgaWYgKG1hdGNoLnJldHVybnMpIHsKICAgICAgICBjb25zdCBvdXRwdXRQYXJhbXMgPSBzcGxpdFBhcmFtZXRlcnMobWF0Y2gucmV0dXJucyk7CiAgICAgICAgY29uc3Qgb3V0cHV0TGVuZ3RoID0gb3V0cHV0UGFyYW1zLmxlbmd0aDsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dExlbmd0aDsgaSsrKSB7CiAgICAgICAgICBvdXRwdXRzLnB1c2gocGFyc2VBYmlQYXJhbWV0ZXIob3V0cHV0UGFyYW1zW2ldLCB7CiAgICAgICAgICAgIG1vZGlmaWVyczogZnVuY3Rpb25Nb2RpZmllcnMsCiAgICAgICAgICAgIHN0cnVjdHMsCiAgICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsKICAgICAgICBuYW1lOiBtYXRjaC5uYW1lLAogICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiBtYXRjaC5zdGF0ZU11dGFiaWxpdHkgPz8gIm5vbnBheWFibGUiLAogICAgICAgIGlucHV0cywKICAgICAgICBvdXRwdXRzCiAgICAgIH07CiAgICB9CiAgICBpZiAoaXNFdmVudFNpZ25hdHVyZShzaWduYXR1cmUpKSB7CiAgICAgIGNvbnN0IG1hdGNoID0gZXhlY0V2ZW50U2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICAgIGlmICghbWF0Y2gpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSwgdHlwZTogImV2ZW50IiB9KTsKICAgICAgY29uc3QgcGFyYW1zID0gc3BsaXRQYXJhbWV0ZXJzKG1hdGNoLnBhcmFtZXRlcnMpOwogICAgICBjb25zdCBhYmlQYXJhbWV0ZXJzID0gW107CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBhYmlQYXJhbWV0ZXJzLnB1c2gocGFyc2VBYmlQYXJhbWV0ZXIocGFyYW1zW2ldLCB7CiAgICAgICAgICBtb2RpZmllcnM6IGV2ZW50TW9kaWZpZXJzLAogICAgICAgICAgc3RydWN0cywKICAgICAgICAgIHR5cGU6ICJldmVudCIKICAgICAgICB9KSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgbmFtZTogbWF0Y2gubmFtZSwgdHlwZTogImV2ZW50IiwgaW5wdXRzOiBhYmlQYXJhbWV0ZXJzIH07CiAgICB9CiAgICBpZiAoaXNFcnJvclNpZ25hdHVyZShzaWduYXR1cmUpKSB7CiAgICAgIGNvbnN0IG1hdGNoID0gZXhlY0Vycm9yU2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICAgIGlmICghbWF0Y2gpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSwgdHlwZTogImVycm9yIiB9KTsKICAgICAgY29uc3QgcGFyYW1zID0gc3BsaXRQYXJhbWV0ZXJzKG1hdGNoLnBhcmFtZXRlcnMpOwogICAgICBjb25zdCBhYmlQYXJhbWV0ZXJzID0gW107CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBhYmlQYXJhbWV0ZXJzLnB1c2gocGFyc2VBYmlQYXJhbWV0ZXIocGFyYW1zW2ldLCB7IHN0cnVjdHMsIHR5cGU6ICJlcnJvciIgfSkpOwogICAgICB9CiAgICAgIHJldHVybiB7IG5hbWU6IG1hdGNoLm5hbWUsIHR5cGU6ICJlcnJvciIsIGlucHV0czogYWJpUGFyYW1ldGVycyB9OwogICAgfQogICAgaWYgKGlzQ29uc3RydWN0b3JTaWduYXR1cmUoc2lnbmF0dXJlKSkgewogICAgICBjb25zdCBtYXRjaCA9IGV4ZWNDb25zdHJ1Y3RvclNpZ25hdHVyZShzaWduYXR1cmUpOwogICAgICBpZiAoIW1hdGNoKQogICAgICAgIHRocm93IG5ldyBJbnZhbGlkU2lnbmF0dXJlRXJyb3IoeyBzaWduYXR1cmUsIHR5cGU6ICJjb25zdHJ1Y3RvciIgfSk7CiAgICAgIGNvbnN0IHBhcmFtcyA9IHNwbGl0UGFyYW1ldGVycyhtYXRjaC5wYXJhbWV0ZXJzKTsKICAgICAgY29uc3QgYWJpUGFyYW1ldGVycyA9IFtdOwogICAgICBjb25zdCBsZW5ndGggPSBwYXJhbXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgYWJpUGFyYW1ldGVycy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtc1tpXSwgeyBzdHJ1Y3RzLCB0eXBlOiAiY29uc3RydWN0b3IiIH0pKTsKICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6ICJjb25zdHJ1Y3RvciIsCiAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiBtYXRjaC5zdGF0ZU11dGFiaWxpdHkgPz8gIm5vbnBheWFibGUiLAogICAgICAgIGlucHV0czogYWJpUGFyYW1ldGVycwogICAgICB9OwogICAgfQogICAgaWYgKGlzRmFsbGJhY2tTaWduYXR1cmUoc2lnbmF0dXJlKSkKICAgICAgcmV0dXJuIHsgdHlwZTogImZhbGxiYWNrIiB9OwogICAgaWYgKGlzUmVjZWl2ZVNpZ25hdHVyZShzaWduYXR1cmUpKQogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6ICJyZWNlaXZlIiwKICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJwYXlhYmxlIgogICAgICB9OwogICAgdGhyb3cgbmV3IFVua25vd25TaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSB9KTsKICB9CiAgZnVuY3Rpb24gcGFyc2VBYmlQYXJhbWV0ZXIocGFyYW0sIG9wdGlvbnMpIHsKICAgIGNvbnN0IHBhcmFtZXRlckNhY2hlS2V5ID0gZ2V0UGFyYW1ldGVyQ2FjaGVLZXkocGFyYW0sIG9wdGlvbnM/LnR5cGUpOwogICAgaWYgKHBhcmFtZXRlckNhY2hlLmhhcyhwYXJhbWV0ZXJDYWNoZUtleSkpCiAgICAgIHJldHVybiBwYXJhbWV0ZXJDYWNoZS5nZXQocGFyYW1ldGVyQ2FjaGVLZXkpOwogICAgY29uc3QgaXNUdXBsZSA9IGlzVHVwbGVSZWdleC50ZXN0KHBhcmFtKTsKICAgIGNvbnN0IG1hdGNoID0gZXhlY1R5cGVkKGlzVHVwbGUgPyBhYmlQYXJhbWV0ZXJXaXRoVHVwbGVSZWdleCA6IGFiaVBhcmFtZXRlcldpdGhvdXRUdXBsZVJlZ2V4LCBwYXJhbSk7CiAgICBpZiAoIW1hdGNoKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlckVycm9yKHsgcGFyYW0gfSk7CiAgICBpZiAobWF0Y2gubmFtZSAmJiBpc1NvbGlkaXR5S2V5d29yZChtYXRjaC5uYW1lKSkKICAgICAgdGhyb3cgbmV3IFNvbGlkaXR5UHJvdGVjdGVkS2V5d29yZEVycm9yKHsgcGFyYW0sIG5hbWU6IG1hdGNoLm5hbWUgfSk7CiAgICBjb25zdCBuYW1lID0gbWF0Y2gubmFtZSA/IHsgbmFtZTogbWF0Y2gubmFtZSB9IDoge307CiAgICBjb25zdCBpbmRleGVkID0gbWF0Y2gubW9kaWZpZXIgPT09ICJpbmRleGVkIiA/IHsgaW5kZXhlZDogdHJ1ZSB9IDoge307CiAgICBjb25zdCBzdHJ1Y3RzID0gb3B0aW9ucz8uc3RydWN0cyA/PyB7fTsKICAgIGxldCB0eXBlOwogICAgbGV0IGNvbXBvbmVudHMgPSB7fTsKICAgIGlmIChpc1R1cGxlKSB7CiAgICAgIHR5cGUgPSAidHVwbGUiOwogICAgICBjb25zdCBwYXJhbXMgPSBzcGxpdFBhcmFtZXRlcnMobWF0Y2gudHlwZSk7CiAgICAgIGNvbnN0IGNvbXBvbmVudHNfID0gW107CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBjb21wb25lbnRzXy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtc1tpXSwgeyBzdHJ1Y3RzIH0pKTsKICAgICAgfQogICAgICBjb21wb25lbnRzID0geyBjb21wb25lbnRzOiBjb21wb25lbnRzXyB9OwogICAgfSBlbHNlIGlmIChtYXRjaC50eXBlIGluIHN0cnVjdHMpIHsKICAgICAgdHlwZSA9ICJ0dXBsZSI7CiAgICAgIGNvbXBvbmVudHMgPSB7IGNvbXBvbmVudHM6IHN0cnVjdHNbbWF0Y2gudHlwZV0gfTsKICAgIH0gZWxzZSBpZiAoZHluYW1pY0ludGVnZXJSZWdleC50ZXN0KG1hdGNoLnR5cGUpKSB7CiAgICAgIHR5cGUgPSBgJHttYXRjaC50eXBlfTI1NmA7CiAgICB9IGVsc2UgewogICAgICB0eXBlID0gbWF0Y2gudHlwZTsKICAgICAgaWYgKCEob3B0aW9ucz8udHlwZSA9PT0gInN0cnVjdCIpICYmICFpc1NvbGlkaXR5VHlwZSh0eXBlKSkKICAgICAgICB0aHJvdyBuZXcgVW5rbm93blNvbGlkaXR5VHlwZUVycm9yKHsgdHlwZSB9KTsKICAgIH0KICAgIGlmIChtYXRjaC5tb2RpZmllcikgewogICAgICBpZiAoIW9wdGlvbnM/Lm1vZGlmaWVycz8uaGFzPy4obWF0Y2gubW9kaWZpZXIpKQogICAgICAgIHRocm93IG5ldyBJbnZhbGlkTW9kaWZpZXJFcnJvcih7CiAgICAgICAgICBwYXJhbSwKICAgICAgICAgIHR5cGU6IG9wdGlvbnM/LnR5cGUsCiAgICAgICAgICBtb2RpZmllcjogbWF0Y2gubW9kaWZpZXIKICAgICAgICB9KTsKICAgICAgaWYgKGZ1bmN0aW9uTW9kaWZpZXJzLmhhcyhtYXRjaC5tb2RpZmllcikgJiYgIWlzVmFsaWREYXRhTG9jYXRpb24odHlwZSwgISFtYXRjaC5hcnJheSkpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3IoewogICAgICAgICAgcGFyYW0sCiAgICAgICAgICB0eXBlOiBvcHRpb25zPy50eXBlLAogICAgICAgICAgbW9kaWZpZXI6IG1hdGNoLm1vZGlmaWVyCiAgICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBhYmlQYXJhbWV0ZXIgPSB7CiAgICAgIHR5cGU6IGAke3R5cGV9JHttYXRjaC5hcnJheSA/PyAiIn1gLAogICAgICAuLi5uYW1lLAogICAgICAuLi5pbmRleGVkLAogICAgICAuLi5jb21wb25lbnRzCiAgICB9OwogICAgcGFyYW1ldGVyQ2FjaGUuc2V0KHBhcmFtZXRlckNhY2hlS2V5LCBhYmlQYXJhbWV0ZXIpOwogICAgcmV0dXJuIGFiaVBhcmFtZXRlcjsKICB9CiAgZnVuY3Rpb24gc3BsaXRQYXJhbWV0ZXJzKHBhcmFtcywgcmVzdWx0ID0gW10sIGN1cnJlbnQgPSAiIiwgZGVwdGggPSAwKSB7CiAgICBjb25zdCBsZW5ndGggPSBwYXJhbXMudHJpbSgpLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgY2hhciA9IHBhcmFtc1tpXTsKICAgICAgY29uc3QgdGFpbCA9IHBhcmFtcy5zbGljZShpICsgMSk7CiAgICAgIHN3aXRjaCAoY2hhcikgewogICAgICAgIGNhc2UgIiwiOgogICAgICAgICAgcmV0dXJuIGRlcHRoID09PSAwID8gc3BsaXRQYXJhbWV0ZXJzKHRhaWwsIFsuLi5yZXN1bHQsIGN1cnJlbnQudHJpbSgpXSkgOiBzcGxpdFBhcmFtZXRlcnModGFpbCwgcmVzdWx0LCBgJHtjdXJyZW50fSR7Y2hhcn1gLCBkZXB0aCk7CiAgICAgICAgY2FzZSAiKCI6CiAgICAgICAgICByZXR1cm4gc3BsaXRQYXJhbWV0ZXJzKHRhaWwsIHJlc3VsdCwgYCR7Y3VycmVudH0ke2NoYXJ9YCwgZGVwdGggKyAxKTsKICAgICAgICBjYXNlICIpIjoKICAgICAgICAgIHJldHVybiBzcGxpdFBhcmFtZXRlcnModGFpbCwgcmVzdWx0LCBgJHtjdXJyZW50fSR7Y2hhcn1gLCBkZXB0aCAtIDEpOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gc3BsaXRQYXJhbWV0ZXJzKHRhaWwsIHJlc3VsdCwgYCR7Y3VycmVudH0ke2NoYXJ9YCwgZGVwdGgpOwogICAgICB9CiAgICB9CiAgICBpZiAoY3VycmVudCA9PT0gIiIpCiAgICAgIHJldHVybiByZXN1bHQ7CiAgICBpZiAoZGVwdGggIT09IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyZW50aGVzaXNFcnJvcih7IGN1cnJlbnQsIGRlcHRoIH0pOwogICAgcmVzdWx0LnB1c2goY3VycmVudC50cmltKCkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gaXNTb2xpZGl0eVR5cGUodHlwZSkgewogICAgcmV0dXJuIHR5cGUgPT09ICJhZGRyZXNzIiB8fCB0eXBlID09PSAiYm9vbCIgfHwgdHlwZSA9PT0gImZ1bmN0aW9uIiB8fCB0eXBlID09PSAic3RyaW5nIiB8fCBieXRlc1JlZ2V4LnRlc3QodHlwZSkgfHwgaW50ZWdlclJlZ2V4LnRlc3QodHlwZSk7CiAgfQogIGZ1bmN0aW9uIGlzU29saWRpdHlLZXl3b3JkKG5hbWUpIHsKICAgIHJldHVybiBuYW1lID09PSAiYWRkcmVzcyIgfHwgbmFtZSA9PT0gImJvb2wiIHx8IG5hbWUgPT09ICJmdW5jdGlvbiIgfHwgbmFtZSA9PT0gInN0cmluZyIgfHwgbmFtZSA9PT0gInR1cGxlIiB8fCBieXRlc1JlZ2V4LnRlc3QobmFtZSkgfHwgaW50ZWdlclJlZ2V4LnRlc3QobmFtZSkgfHwgcHJvdGVjdGVkS2V5d29yZHNSZWdleC50ZXN0KG5hbWUpOwogIH0KICBmdW5jdGlvbiBpc1ZhbGlkRGF0YUxvY2F0aW9uKHR5cGUsIGlzQXJyYXkpIHsKICAgIHJldHVybiBpc0FycmF5IHx8IHR5cGUgPT09ICJieXRlcyIgfHwgdHlwZSA9PT0gInN0cmluZyIgfHwgdHlwZSA9PT0gInR1cGxlIjsKICB9CiAgdmFyIGFiaVBhcmFtZXRlcldpdGhvdXRUdXBsZVJlZ2V4LCBhYmlQYXJhbWV0ZXJXaXRoVHVwbGVSZWdleCwgZHluYW1pY0ludGVnZXJSZWdleCwgcHJvdGVjdGVkS2V5d29yZHNSZWdleDsKICB2YXIgaW5pdF91dGlscyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL3V0aWxzLmpzIigpIHsKICAgICAgaW5pdF9yZWdleCgpOwogICAgICBpbml0X2FiaUl0ZW0oKTsKICAgICAgaW5pdF9hYmlQYXJhbWV0ZXIoKTsKICAgICAgaW5pdF9zaWduYXR1cmUoKTsKICAgICAgaW5pdF9zcGxpdFBhcmFtZXRlcnMoKTsKICAgICAgaW5pdF9jYWNoZSgpOwogICAgICBpbml0X3NpZ25hdHVyZXMoKTsKICAgICAgYWJpUGFyYW1ldGVyV2l0aG91dFR1cGxlUmVnZXggPSAvXig/PHR5cGU+W2EtekEtWiRfXVthLXpBLVowLTkkX10qKSg/PGFycmF5Pig/OlxbXGQqP1xdKSs/KT8oPzpccyg/PG1vZGlmaWVyPmNhbGxkYXRhfGluZGV4ZWR8bWVtb3J5fHN0b3JhZ2V7MX0pKT8oPzpccyg/PG5hbWU+W2EtekEtWiRfXVthLXpBLVowLTkkX10qKSk/JC87CiAgICAgIGFiaVBhcmFtZXRlcldpdGhUdXBsZVJlZ2V4ID0gL15cKCg/PHR5cGU+Lis/KVwpKD88YXJyYXk+KD86XFtcZCo/XF0pKz8pPyg/OlxzKD88bW9kaWZpZXI+Y2FsbGRhdGF8aW5kZXhlZHxtZW1vcnl8c3RvcmFnZXsxfSkpPyg/OlxzKD88bmFtZT5bYS16QS1aJF9dW2EtekEtWjAtOSRfXSopKT8kLzsKICAgICAgZHluYW1pY0ludGVnZXJSZWdleCA9IC9edT9pbnQkLzsKICAgICAgcHJvdGVjdGVkS2V5d29yZHNSZWdleCA9IC9eKD86YWZ0ZXJ8YWxpYXN8YW5vbnltb3VzfGFwcGx5fGF1dG98Ynl0ZXxjYWxsZGF0YXxjYXNlfGNhdGNofGNvbnN0YW50fGNvcHlvZnxkZWZhdWx0fGRlZmluZWR8ZXJyb3J8ZXZlbnR8ZXh0ZXJuYWx8ZmFsc2V8ZmluYWx8ZnVuY3Rpb258aW1tdXRhYmxlfGltcGxlbWVudHN8aW58aW5kZXhlZHxpbmxpbmV8aW50ZXJuYWx8bGV0fG1hcHBpbmd8bWF0Y2h8bWVtb3J5fG11dGFibGV8bnVsbHxvZnxvdmVycmlkZXxwYXJ0aWFsfHByaXZhdGV8cHJvbWlzZXxwdWJsaWN8cHVyZXxyZWZlcmVuY2V8cmVsb2NhdGFibGV8cmV0dXJufHJldHVybnN8c2l6ZW9mfHN0YXRpY3xzdG9yYWdlfHN0cnVjdHxzdXBlcnxzdXBwb3J0c3xzd2l0Y2h8dGhpc3x0cnVlfHRyeXx0eXBlZGVmfHR5cGVvZnx2YXJ8dmlld3x2aXJ0dWFsKSQvOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL3N0cnVjdHMuanMKICBmdW5jdGlvbiBwYXJzZVN0cnVjdHMoc2lnbmF0dXJlcykgewogICAgY29uc3Qgc2hhbGxvd1N0cnVjdHMgPSB7fTsKICAgIGNvbnN0IHNpZ25hdHVyZXNMZW5ndGggPSBzaWduYXR1cmVzLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2lnbmF0dXJlc0xlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25hdHVyZXNbaV07CiAgICAgIGlmICghaXNTdHJ1Y3RTaWduYXR1cmUoc2lnbmF0dXJlKSkKICAgICAgICBjb250aW51ZTsKICAgICAgY29uc3QgbWF0Y2ggPSBleGVjU3RydWN0U2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICAgIGlmICghbWF0Y2gpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSwgdHlwZTogInN0cnVjdCIgfSk7CiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBtYXRjaC5wcm9wZXJ0aWVzLnNwbGl0KCI7Iik7CiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBbXTsKICAgICAgY29uc3QgcHJvcGVydGllc0xlbmd0aCA9IHByb3BlcnRpZXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBrID0gMDsgayA8IHByb3BlcnRpZXNMZW5ndGg7IGsrKykgewogICAgICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1trXTsKICAgICAgICBjb25zdCB0cmltbWVkID0gcHJvcGVydHkudHJpbSgpOwogICAgICAgIGlmICghdHJpbW1lZCkKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGNvbnN0IGFiaVBhcmFtZXRlciA9IHBhcnNlQWJpUGFyYW1ldGVyKHRyaW1tZWQsIHsKICAgICAgICAgIHR5cGU6ICJzdHJ1Y3QiCiAgICAgICAgfSk7CiAgICAgICAgY29tcG9uZW50cy5wdXNoKGFiaVBhcmFtZXRlcik7CiAgICAgIH0KICAgICAgaWYgKCFjb21wb25lbnRzLmxlbmd0aCkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFN0cnVjdFNpZ25hdHVyZUVycm9yKHsgc2lnbmF0dXJlIH0pOwogICAgICBzaGFsbG93U3RydWN0c1ttYXRjaC5uYW1lXSA9IGNvbXBvbmVudHM7CiAgICB9CiAgICBjb25zdCByZXNvbHZlZFN0cnVjdHMgPSB7fTsKICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhzaGFsbG93U3RydWN0cyk7CiAgICBjb25zdCBlbnRyaWVzTGVuZ3RoID0gZW50cmllcy5sZW5ndGg7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXNMZW5ndGg7IGkrKykgewogICAgICBjb25zdCBbbmFtZSwgcGFyYW1ldGVyc10gPSBlbnRyaWVzW2ldOwogICAgICByZXNvbHZlZFN0cnVjdHNbbmFtZV0gPSByZXNvbHZlU3RydWN0cyhwYXJhbWV0ZXJzLCBzaGFsbG93U3RydWN0cyk7CiAgICB9CiAgICByZXR1cm4gcmVzb2x2ZWRTdHJ1Y3RzOwogIH0KICBmdW5jdGlvbiByZXNvbHZlU3RydWN0cyhhYmlQYXJhbWV0ZXJzLCBzdHJ1Y3RzLCBhbmNlc3RvcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSB7CiAgICBjb25zdCBjb21wb25lbnRzID0gW107CiAgICBjb25zdCBsZW5ndGggPSBhYmlQYXJhbWV0ZXJzLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgYWJpUGFyYW1ldGVyID0gYWJpUGFyYW1ldGVyc1tpXTsKICAgICAgY29uc3QgaXNUdXBsZSA9IGlzVHVwbGVSZWdleC50ZXN0KGFiaVBhcmFtZXRlci50eXBlKTsKICAgICAgaWYgKGlzVHVwbGUpCiAgICAgICAgY29tcG9uZW50cy5wdXNoKGFiaVBhcmFtZXRlcik7CiAgICAgIGVsc2UgewogICAgICAgIGNvbnN0IG1hdGNoID0gZXhlY1R5cGVkKHR5cGVXaXRob3V0VHVwbGVSZWdleCwgYWJpUGFyYW1ldGVyLnR5cGUpOwogICAgICAgIGlmICghbWF0Y2g/LnR5cGUpCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFiaVR5cGVQYXJhbWV0ZXJFcnJvcih7IGFiaVBhcmFtZXRlciB9KTsKICAgICAgICBjb25zdCB7IGFycmF5LCB0eXBlIH0gPSBtYXRjaDsKICAgICAgICBpZiAodHlwZSBpbiBzdHJ1Y3RzKSB7CiAgICAgICAgICBpZiAoYW5jZXN0b3JzLmhhcyh0eXBlKSkKICAgICAgICAgICAgdGhyb3cgbmV3IENpcmN1bGFyUmVmZXJlbmNlRXJyb3IoeyB0eXBlIH0pOwogICAgICAgICAgY29tcG9uZW50cy5wdXNoKHsKICAgICAgICAgICAgLi4uYWJpUGFyYW1ldGVyLAogICAgICAgICAgICB0eXBlOiBgdHVwbGUke2FycmF5ID8/ICIifWAsCiAgICAgICAgICAgIGNvbXBvbmVudHM6IHJlc29sdmVTdHJ1Y3RzKHN0cnVjdHNbdHlwZV0gPz8gW10sIHN0cnVjdHMsIC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsuLi5hbmNlc3RvcnMsIHR5cGVdKSkKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoaXNTb2xpZGl0eVR5cGUodHlwZSkpCiAgICAgICAgICAgIGNvbXBvbmVudHMucHVzaChhYmlQYXJhbWV0ZXIpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICB0aHJvdyBuZXcgVW5rbm93blR5cGVFcnJvcih7IHR5cGUgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gY29tcG9uZW50czsKICB9CiAgdmFyIHR5cGVXaXRob3V0VHVwbGVSZWdleDsKICB2YXIgaW5pdF9zdHJ1Y3RzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvc3RydWN0cy5qcyIoKSB7CiAgICAgIGluaXRfcmVnZXgoKTsKICAgICAgaW5pdF9hYmlJdGVtKCk7CiAgICAgIGluaXRfYWJpUGFyYW1ldGVyKCk7CiAgICAgIGluaXRfc2lnbmF0dXJlKCk7CiAgICAgIGluaXRfc3RydWN0KCk7CiAgICAgIGluaXRfc2lnbmF0dXJlcygpOwogICAgICBpbml0X3V0aWxzKCk7CiAgICAgIHR5cGVXaXRob3V0VHVwbGVSZWdleCA9IC9eKD88dHlwZT5bYS16QS1aJF9dW2EtekEtWjAtOSRfXSopKD88YXJyYXk+KD86XFtcZCo/XF0pKz8pPyQvOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9wYXJzZUFiaS5qcwogIGZ1bmN0aW9uIHBhcnNlQWJpKHNpZ25hdHVyZXMpIHsKICAgIGNvbnN0IHN0cnVjdHMgPSBwYXJzZVN0cnVjdHMoc2lnbmF0dXJlcyk7CiAgICBjb25zdCBhYmkyID0gW107CiAgICBjb25zdCBsZW5ndGggPSBzaWduYXR1cmVzLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmF0dXJlc1tpXTsKICAgICAgaWYgKGlzU3RydWN0U2lnbmF0dXJlKHNpZ25hdHVyZSkpCiAgICAgICAgY29udGludWU7CiAgICAgIGFiaTIucHVzaChwYXJzZVNpZ25hdHVyZShzaWduYXR1cmUsIHN0cnVjdHMpKTsKICAgIH0KICAgIHJldHVybiBhYmkyOwogIH0KICB2YXIgaW5pdF9wYXJzZUFiaSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9wYXJzZUFiaS5qcyIoKSB7CiAgICAgIGluaXRfc2lnbmF0dXJlcygpOwogICAgICBpbml0X3N0cnVjdHMoKTsKICAgICAgaW5pdF91dGlscygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9wYXJzZUFiaUl0ZW0uanMKICBmdW5jdGlvbiBwYXJzZUFiaUl0ZW0oc2lnbmF0dXJlKSB7CiAgICBsZXQgYWJpSXRlbTsKICAgIGlmICh0eXBlb2Ygc2lnbmF0dXJlID09PSAic3RyaW5nIikKICAgICAgYWJpSXRlbSA9IHBhcnNlU2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc3RydWN0cyA9IHBhcnNlU3RydWN0cyhzaWduYXR1cmUpOwogICAgICBjb25zdCBsZW5ndGggPSBzaWduYXR1cmUubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3Qgc2lnbmF0dXJlXyA9IHNpZ25hdHVyZVtpXTsKICAgICAgICBpZiAoaXNTdHJ1Y3RTaWduYXR1cmUoc2lnbmF0dXJlXykpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBhYmlJdGVtID0gcGFyc2VTaWduYXR1cmUoc2lnbmF0dXJlXywgc3RydWN0cyk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmICghYWJpSXRlbSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBYmlJdGVtRXJyb3IoeyBzaWduYXR1cmUgfSk7CiAgICByZXR1cm4gYWJpSXRlbTsKICB9CiAgdmFyIGluaXRfcGFyc2VBYmlJdGVtID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpSXRlbS5qcyIoKSB7CiAgICAgIGluaXRfYWJpSXRlbSgpOwogICAgICBpbml0X3NpZ25hdHVyZXMoKTsKICAgICAgaW5pdF9zdHJ1Y3RzKCk7CiAgICAgIGluaXRfdXRpbHMoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvcGFyc2VBYmlQYXJhbWV0ZXIuanMKICBmdW5jdGlvbiBwYXJzZUFiaVBhcmFtZXRlcjIocGFyYW0pIHsKICAgIGxldCBhYmlQYXJhbWV0ZXI7CiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAic3RyaW5nIikKICAgICAgYWJpUGFyYW1ldGVyID0gcGFyc2VBYmlQYXJhbWV0ZXIocGFyYW0sIHsKICAgICAgICBtb2RpZmllcnMKICAgICAgfSk7CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc3RydWN0cyA9IHBhcnNlU3RydWN0cyhwYXJhbSk7CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtLmxlbmd0aDsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHBhcmFtW2ldOwogICAgICAgIGlmIChpc1N0cnVjdFNpZ25hdHVyZShzaWduYXR1cmUpKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgYWJpUGFyYW1ldGVyID0gcGFyc2VBYmlQYXJhbWV0ZXIoc2lnbmF0dXJlLCB7IG1vZGlmaWVycywgc3RydWN0cyB9KTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKCFhYmlQYXJhbWV0ZXIpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWJpUGFyYW1ldGVyRXJyb3IoeyBwYXJhbSB9KTsKICAgIHJldHVybiBhYmlQYXJhbWV0ZXI7CiAgfQogIHZhciBpbml0X3BhcnNlQWJpUGFyYW1ldGVyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpUGFyYW1ldGVyLmpzIigpIHsKICAgICAgaW5pdF9hYmlQYXJhbWV0ZXIoKTsKICAgICAgaW5pdF9zaWduYXR1cmVzKCk7CiAgICAgIGluaXRfc3RydWN0cygpOwogICAgICBpbml0X3V0aWxzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpUGFyYW1ldGVycy5qcwogIGZ1bmN0aW9uIHBhcnNlQWJpUGFyYW1ldGVycyhwYXJhbXMpIHsKICAgIGNvbnN0IGFiaVBhcmFtZXRlcnMgPSBbXTsKICAgIGlmICh0eXBlb2YgcGFyYW1zID09PSAic3RyaW5nIikgewogICAgICBjb25zdCBwYXJhbWV0ZXJzID0gc3BsaXRQYXJhbWV0ZXJzKHBhcmFtcyk7CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtZXRlcnMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgYWJpUGFyYW1ldGVycy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtZXRlcnNbaV0sIHsgbW9kaWZpZXJzIH0pKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgc3RydWN0cyA9IHBhcnNlU3RydWN0cyhwYXJhbXMpOwogICAgICBjb25zdCBsZW5ndGggPSBwYXJhbXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gcGFyYW1zW2ldOwogICAgICAgIGlmIChpc1N0cnVjdFNpZ25hdHVyZShzaWduYXR1cmUpKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHNwbGl0UGFyYW1ldGVycyhzaWduYXR1cmUpOwogICAgICAgIGNvbnN0IGxlbmd0aDIgPSBwYXJhbWV0ZXJzLmxlbmd0aDsKICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxlbmd0aDI7IGsrKykgewogICAgICAgICAgYWJpUGFyYW1ldGVycy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtZXRlcnNba10sIHsgbW9kaWZpZXJzLCBzdHJ1Y3RzIH0pKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChhYmlQYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMCkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3IoeyBwYXJhbXMgfSk7CiAgICByZXR1cm4gYWJpUGFyYW1ldGVyczsKICB9CiAgdmFyIGluaXRfcGFyc2VBYmlQYXJhbWV0ZXJzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpUGFyYW1ldGVycy5qcyIoKSB7CiAgICAgIGluaXRfYWJpUGFyYW1ldGVyKCk7CiAgICAgIGluaXRfc2lnbmF0dXJlcygpOwogICAgICBpbml0X3N0cnVjdHMoKTsKICAgICAgaW5pdF91dGlscygpOwogICAgICBpbml0X3V0aWxzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2V4cG9ydHMvaW5kZXguanMKICB2YXIgaW5pdF9leHBvcnRzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2V4cG9ydHMvaW5kZXguanMiKCkgewogICAgICBpbml0X2Zvcm1hdEFiaUl0ZW0oKTsKICAgICAgaW5pdF9wYXJzZUFiaSgpOwogICAgICBpbml0X3BhcnNlQWJpSXRlbSgpOwogICAgICBpbml0X3BhcnNlQWJpUGFyYW1ldGVyKCk7CiAgICAgIGluaXRfcGFyc2VBYmlQYXJhbWV0ZXJzKCk7CiAgICAgIGluaXRfYWJpSXRlbSgpOwogICAgICBpbml0X2FiaVBhcmFtZXRlcigpOwogICAgICBpbml0X3NpZ25hdHVyZSgpOwogICAgICBpbml0X3NwbGl0UGFyYW1ldGVycygpOwogICAgICBpbml0X3N0cnVjdCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9mb3JtYXRBYmlJdGVtLmpzCiAgZnVuY3Rpb24gZm9ybWF0QWJpSXRlbTIoYWJpSXRlbSwgeyBpbmNsdWRlTmFtZSA9IGZhbHNlIH0gPSB7fSkgewogICAgaWYgKGFiaUl0ZW0udHlwZSAhPT0gImZ1bmN0aW9uIiAmJiBhYmlJdGVtLnR5cGUgIT09ICJldmVudCIgJiYgYWJpSXRlbS50eXBlICE9PSAiZXJyb3IiKQogICAgICB0aHJvdyBuZXcgSW52YWxpZERlZmluaXRpb25UeXBlRXJyb3IoYWJpSXRlbS50eXBlKTsKICAgIHJldHVybiBgJHthYmlJdGVtLm5hbWV9KCR7Zm9ybWF0QWJpUGFyYW1zKGFiaUl0ZW0uaW5wdXRzLCB7IGluY2x1ZGVOYW1lIH0pfSlgOwogIH0KICBmdW5jdGlvbiBmb3JtYXRBYmlQYXJhbXMocGFyYW1zLCB7IGluY2x1ZGVOYW1lID0gZmFsc2UgfSA9IHt9KSB7CiAgICBpZiAoIXBhcmFtcykKICAgICAgcmV0dXJuICIiOwogICAgcmV0dXJuIHBhcmFtcy5tYXAoKHBhcmFtKSA9PiBmb3JtYXRBYmlQYXJhbShwYXJhbSwgeyBpbmNsdWRlTmFtZSB9KSkuam9pbihpbmNsdWRlTmFtZSA/ICIsICIgOiAiLCIpOwogIH0KICBmdW5jdGlvbiBmb3JtYXRBYmlQYXJhbShwYXJhbSwgeyBpbmNsdWRlTmFtZSB9KSB7CiAgICBpZiAocGFyYW0udHlwZS5zdGFydHNXaXRoKCJ0dXBsZSIpKSB7CiAgICAgIHJldHVybiBgKCR7Zm9ybWF0QWJpUGFyYW1zKHBhcmFtLmNvbXBvbmVudHMsIHsgaW5jbHVkZU5hbWUgfSl9KSR7cGFyYW0udHlwZS5zbGljZSgidHVwbGUiLmxlbmd0aCl9YDsKICAgIH0KICAgIHJldHVybiBwYXJhbS50eXBlICsgKGluY2x1ZGVOYW1lICYmIHBhcmFtLm5hbWUgPyBgICR7cGFyYW0ubmFtZX1gIDogIiIpOwogIH0KICB2YXIgaW5pdF9mb3JtYXRBYmlJdGVtMiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9mb3JtYXRBYmlJdGVtLmpzIigpIHsKICAgICAgaW5pdF9hYmkoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL2lzSGV4LmpzCiAgZnVuY3Rpb24gaXNIZXgodmFsdWUsIHsgc3RyaWN0ID0gdHJ1ZSB9ID0ge30pIHsKICAgIGlmICghdmFsdWUpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJzdHJpbmciKQogICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc3RyaWN0ID8gL14weFswLTlhLWZBLUZdKiQvLnRlc3QodmFsdWUpIDogdmFsdWUuc3RhcnRzV2l0aCgiMHgiKTsKICB9CiAgdmFyIGluaXRfaXNIZXggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL2lzSGV4LmpzIigpIHsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL3NpemUuanMKICBmdW5jdGlvbiBzaXplKHZhbHVlKSB7CiAgICBpZiAoaXNIZXgodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgcmV0dXJuIE1hdGguY2VpbCgodmFsdWUubGVuZ3RoIC0gMikgLyAyKTsKICAgIHJldHVybiB2YWx1ZS5sZW5ndGg7CiAgfQogIHZhciBpbml0X3NpemUgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL3NpemUuanMiKCkgewogICAgICBpbml0X2lzSGV4KCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL3ZlcnNpb24uanMKICB2YXIgdmVyc2lvbjI7CiAgdmFyIGluaXRfdmVyc2lvbjIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvdmVyc2lvbi5qcyIoKSB7CiAgICAgIHZlcnNpb24yID0gIjIuMTkuOCI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2Jhc2UuanMKICBmdW5jdGlvbiBzZXRFcnJvckNvbmZpZyhjb25maWcpIHsKICAgIGVycm9yQ29uZmlnID0gY29uZmlnOwogIH0KICBmdW5jdGlvbiB3YWxrKGVyciwgZm4pIHsKICAgIGlmIChmbj8uKGVycikpCiAgICAgIHJldHVybiBlcnI7CiAgICBpZiAoZXJyICYmIHR5cGVvZiBlcnIgPT09ICJvYmplY3QiICYmICJjYXVzZSIgaW4gZXJyKQogICAgICByZXR1cm4gd2FsayhlcnIuY2F1c2UsIGZuKTsKICAgIHJldHVybiBmbiA/IG51bGwgOiBlcnI7CiAgfQogIHZhciBlcnJvckNvbmZpZywgQmFzZUVycm9yMjsKICB2YXIgaW5pdF9iYXNlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2Jhc2UuanMiKCkgewogICAgICBpbml0X3ZlcnNpb24yKCk7CiAgICAgIGVycm9yQ29uZmlnID0gewogICAgICAgIGdldERvY3NVcmw6ICh7IGRvY3NCYXNlVXJsLCBkb2NzUGF0aDogZG9jc1BhdGg5ID0gIiIsIGRvY3NTbHVnIH0pID0+IGRvY3NQYXRoOSA/IGAke2RvY3NCYXNlVXJsID8/ICJodHRwczovL3ZpZW0uc2gifSR7ZG9jc1BhdGg5fSR7ZG9jc1NsdWcgPyBgIyR7ZG9jc1NsdWd9YCA6ICIifWAgOiB2b2lkIDAsCiAgICAgICAgdmVyc2lvbjogdmVyc2lvbjIKICAgICAgfTsKICAgICAgQmFzZUVycm9yMiA9IGNsYXNzIF9CYXNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3Ioc2hvcnRNZXNzYWdlLCBhcmdzID0ge30pIHsKICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSAoKCkgPT4gewogICAgICAgICAgICBpZiAoYXJncy5jYXVzZSBpbnN0YW5jZW9mIF9CYXNlRXJyb3IpCiAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2F1c2UuZGV0YWlsczsKICAgICAgICAgICAgaWYgKGFyZ3MuY2F1c2U/Lm1lc3NhZ2UpCiAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2F1c2UubWVzc2FnZTsKICAgICAgICAgICAgcmV0dXJuIGFyZ3MuZGV0YWlsczsKICAgICAgICAgIH0pKCk7CiAgICAgICAgICBjb25zdCBkb2NzUGF0aDkgPSAoKCkgPT4gewogICAgICAgICAgICBpZiAoYXJncy5jYXVzZSBpbnN0YW5jZW9mIF9CYXNlRXJyb3IpCiAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2F1c2UuZG9jc1BhdGggfHwgYXJncy5kb2NzUGF0aDsKICAgICAgICAgICAgcmV0dXJuIGFyZ3MuZG9jc1BhdGg7CiAgICAgICAgICB9KSgpOwogICAgICAgICAgY29uc3QgZG9jc1VybCA9IGVycm9yQ29uZmlnLmdldERvY3NVcmw/Lih7IC4uLmFyZ3MsIGRvY3NQYXRoOiBkb2NzUGF0aDkgfSk7CiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gWwogICAgICAgICAgICBzaG9ydE1lc3NhZ2UgfHwgIkFuIGVycm9yIG9jY3VycmVkLiIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICAuLi5hcmdzLm1ldGFNZXNzYWdlcyA/IFsuLi5hcmdzLm1ldGFNZXNzYWdlcywgIiJdIDogW10sCiAgICAgICAgICAgIC4uLmRvY3NVcmwgPyBbYERvY3M6ICR7ZG9jc1VybH1gXSA6IFtdLAogICAgICAgICAgICAuLi5kZXRhaWxzID8gW2BEZXRhaWxzOiAke2RldGFpbHN9YF0gOiBbXSwKICAgICAgICAgICAgLi4uZXJyb3JDb25maWcudmVyc2lvbiA/IFtgVmVyc2lvbjogJHtlcnJvckNvbmZpZy52ZXJzaW9ufWBdIDogW10KICAgICAgICAgIF0uam9pbigiXG4iKTsKICAgICAgICAgIHN1cGVyKG1lc3NhZ2UsIGFyZ3MuY2F1c2UgPyB7IGNhdXNlOiBhcmdzLmNhdXNlIH0gOiB2b2lkIDApOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkZXRhaWxzIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiZG9jc1BhdGgiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJtZXRhTWVzc2FnZXMiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaG9ydE1lc3NhZ2UiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJ2ZXJzaW9uIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJCYXNlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7CiAgICAgICAgICB0aGlzLmRvY3NQYXRoID0gZG9jc1BhdGg5OwogICAgICAgICAgdGhpcy5tZXRhTWVzc2FnZXMgPSBhcmdzLm1ldGFNZXNzYWdlczsKICAgICAgICAgIHRoaXMubmFtZSA9IGFyZ3MubmFtZSA/PyB0aGlzLm5hbWU7CiAgICAgICAgICB0aGlzLnNob3J0TWVzc2FnZSA9IHNob3J0TWVzc2FnZTsKICAgICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb24yOwogICAgICAgIH0KICAgICAgICB3YWxrKGZuKSB7CiAgICAgICAgICByZXR1cm4gd2Fsayh0aGlzLCBmbik7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hYmkuanMKICB2YXIgQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yLCBBYmlDb25zdHJ1Y3RvclBhcmFtc05vdEZvdW5kRXJyb3IsIEFiaURlY29kaW5nRGF0YVNpemVJbnZhbGlkRXJyb3IsIEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yLCBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IsIEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yLCBBYmlFbmNvZGluZ0J5dGVzU2l6ZU1pc21hdGNoRXJyb3IsIEFiaUVuY29kaW5nTGVuZ3RoTWlzbWF0Y2hFcnJvciwgQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yLCBBYmlFcnJvck5vdEZvdW5kRXJyb3IsIEFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvciwgQWJpRXZlbnRTaWduYXR1cmVFbXB0eVRvcGljc0Vycm9yLCBBYmlFdmVudFNpZ25hdHVyZU5vdEZvdW5kRXJyb3IsIEFiaUV2ZW50Tm90Rm91bmRFcnJvciwgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yLCBBYmlGdW5jdGlvbk91dHB1dHNOb3RGb3VuZEVycm9yLCBBYmlGdW5jdGlvblNpZ25hdHVyZU5vdEZvdW5kRXJyb3IsIEFiaUl0ZW1BbWJpZ3VpdHlFcnJvciwgQnl0ZXNTaXplTWlzbWF0Y2hFcnJvciwgRGVjb2RlTG9nRGF0YU1pc21hdGNoLCBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCwgSW52YWxpZEFiaUVuY29kaW5nVHlwZUVycm9yLCBJbnZhbGlkQWJpRGVjb2RpbmdUeXBlRXJyb3IsIEludmFsaWRBcnJheUVycm9yLCBJbnZhbGlkRGVmaW5pdGlvblR5cGVFcnJvciwgVW5zdXBwb3J0ZWRQYWNrZWRBYmlUeXBlOwogIHZhciBpbml0X2FiaSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hYmkuanMiKCkgewogICAgICBpbml0X2Zvcm1hdEFiaUl0ZW0yKCk7CiAgICAgIGluaXRfc2l6ZSgpOwogICAgICBpbml0X2Jhc2UoKTsKICAgICAgQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDkgfSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICAiQSBjb25zdHJ1Y3RvciB3YXMgbm90IGZvdW5kIG9uIHRoZSBBQkkuIiwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgY29uc3RydWN0b3IgZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlDb25zdHJ1Y3RvclBhcmFtc05vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgICJDb25zdHJ1Y3RvciBhcmd1bWVudHMgd2VyZSBwcm92aWRlZCAoYGFyZ3NgKSwgYnV0IGEgY29uc3RydWN0b3IgcGFyYW1ldGVycyAoYGlucHV0c2ApIHdlcmUgbm90IGZvdW5kIG9uIHRoZSBBQkkuIiwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSwgYW5kIHRoYXQgdGhlIGBpbnB1dHNgIGF0dHJpYnV0ZSBvbiB0aGUgY29uc3RydWN0b3IgZXhpc3RzLiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlEZWNvZGluZ0RhdGFTaXplSW52YWxpZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGRhdGEsIHNpemU6IHNpemUzIH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYERhdGEgc2l6ZSBvZiAke3NpemUzfSBieXRlcyBpcyBpbnZhbGlkLmAsCiAgICAgICAgICAgICJTaXplIG11c3QgYmUgaW4gaW5jcmVtZW50cyBvZiAzMiBieXRlcyAoc2l6ZSAlIDMyID09PSAwKS4iCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYERhdGE6ICR7ZGF0YX0gKCR7c2l6ZTN9IGJ5dGVzKWBdLAogICAgICAgICAgICBuYW1lOiAiQWJpRGVjb2RpbmdEYXRhU2l6ZUludmFsaWRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRGVjb2RpbmdEYXRhU2l6ZVRvb1NtYWxsRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZGF0YSwgcGFyYW1zLCBzaXplOiBzaXplMyB9KSB7CiAgICAgICAgICBzdXBlcihbYERhdGEgc2l6ZSBvZiAke3NpemUzfSBieXRlcyBpcyB0b28gc21hbGwgZm9yIGdpdmVuIHBhcmFtZXRlcnMuYF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgUGFyYW1zOiAoJHtmb3JtYXRBYmlQYXJhbXMocGFyYW1zLCB7IGluY2x1ZGVOYW1lOiB0cnVlIH0pfSlgLAogICAgICAgICAgICAgIGBEYXRhOiAgICR7ZGF0YX0gKCR7c2l6ZTN9IGJ5dGVzKWAKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbmFtZTogIkFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRhdGEiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJwYXJhbXMiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaXplIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKICAgICAgICAgIHRoaXMuc2l6ZSA9IHNpemUzOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRGVjb2RpbmdaZXJvRGF0YUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCdDYW5ub3QgZGVjb2RlIHplcm8gZGF0YSAoIjB4Iikgd2l0aCBBQkkgcGFyYW1ldGVycy4nLCB7CiAgICAgICAgICAgIG5hbWU6ICJBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGV4cGVjdGVkTGVuZ3RoLCBnaXZlbkxlbmd0aCwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBBQkkgZW5jb2RpbmcgYXJyYXkgbGVuZ3RoIG1pc21hdGNoIGZvciB0eXBlICR7dHlwZX0uYCwKICAgICAgICAgICAgYEV4cGVjdGVkIGxlbmd0aDogJHtleHBlY3RlZExlbmd0aH1gLAogICAgICAgICAgICBgR2l2ZW4gbGVuZ3RoOiAke2dpdmVuTGVuZ3RofWAKICAgICAgICAgIF0uam9pbigiXG4iKSwgeyBuYW1lOiAiQWJpRW5jb2RpbmdBcnJheUxlbmd0aE1pc21hdGNoRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRW5jb2RpbmdCeXRlc1NpemVNaXNtYXRjaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGV4cGVjdGVkU2l6ZSwgdmFsdWUgfSkgewogICAgICAgICAgc3VwZXIoYFNpemUgb2YgYnl0ZXMgIiR7dmFsdWV9IiAoYnl0ZXMke3NpemUodmFsdWUpfSkgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgc2l6ZSAoYnl0ZXMke2V4cGVjdGVkU2l6ZX0pLmAsIHsgbmFtZTogIkFiaUVuY29kaW5nQnl0ZXNTaXplTWlzbWF0Y2hFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFbmNvZGluZ0xlbmd0aE1pc21hdGNoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZXhwZWN0ZWRMZW5ndGgsIGdpdmVuTGVuZ3RoIH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgIkFCSSBlbmNvZGluZyBwYXJhbXMvdmFsdWVzIGxlbmd0aCBtaXNtYXRjaC4iLAogICAgICAgICAgICBgRXhwZWN0ZWQgbGVuZ3RoIChwYXJhbXMpOiAke2V4cGVjdGVkTGVuZ3RofWAsCiAgICAgICAgICAgIGBHaXZlbiBsZW5ndGggKHZhbHVlcyk6ICR7Z2l2ZW5MZW5ndGh9YAogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IG5hbWU6ICJBYmlFbmNvZGluZ0xlbmd0aE1pc21hdGNoRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihlcnJvck5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBBcmd1bWVudHMgKFxgYXJnc1xgKSB3ZXJlIHByb3ZpZGVkIHRvICIke2Vycm9yTmFtZX0iLCBidXQgIiR7ZXJyb3JOYW1lfSIgb24gdGhlIEFCSSBkb2VzIG5vdCBjb250YWluIGFueSBwYXJhbWV0ZXJzIChcYGlucHV0c1xgKS5gLAogICAgICAgICAgICAiQ2Fubm90IGVuY29kZSBlcnJvciByZXN1bHQgd2l0aG91dCBrbm93aW5nIHdoYXQgdGhlIHBhcmFtZXRlciB0eXBlcyBhcmUuIiwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgaW5wdXRzIGV4aXN0IG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFcnJvck5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGVycm9yTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRXJyb3IgJHtlcnJvck5hbWUgPyBgIiR7ZXJyb3JOYW1lfSIgYCA6ICIifW5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXJyb3IgZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXJyb3JOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFcnJvclNpZ25hdHVyZU5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHNpZ25hdHVyZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYEVuY29kZWQgZXJyb3Igc2lnbmF0dXJlICIke3NpZ25hdHVyZX0iIG5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXJyb3IgZXhpc3RzIG9uIGl0LiIsCiAgICAgICAgICAgIGBZb3UgY2FuIGxvb2sgdXAgdGhlIGRlY29kZWQgc2lnbmF0dXJlIGhlcmU6IGh0dHBzOi8vb3BlbmNoYWluLnh5ei9zaWduYXR1cmVzP3F1ZXJ5PSR7c2lnbmF0dXJlfS5gCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaWduYXR1cmUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5zaWduYXR1cmUgPSBzaWduYXR1cmU7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFdmVudFNpZ25hdHVyZUVtcHR5VG9waWNzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcigiQ2Fubm90IGV4dHJhY3QgZXZlbnQgc2lnbmF0dXJlIGZyb20gZW1wdHkgdG9waWNzLiIsIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUV2ZW50U2lnbmF0dXJlRW1wdHlUb3BpY3NFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRXZlbnRTaWduYXR1cmVOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihzaWduYXR1cmUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBFbmNvZGVkIGV2ZW50IHNpZ25hdHVyZSAiJHtzaWduYXR1cmV9IiBub3QgZm91bmQgb24gQUJJLmAsCiAgICAgICAgICAgICJNYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBBQkkgYW5kIHRoYXQgdGhlIGV2ZW50IGV4aXN0cyBvbiBpdC4iLAogICAgICAgICAgICBgWW91IGNhbiBsb29rIHVwIHRoZSBzaWduYXR1cmUgaGVyZTogaHR0cHM6Ly9vcGVuY2hhaW4ueHl6L3NpZ25hdHVyZXM/cXVlcnk9JHtzaWduYXR1cmV9LmAKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXZlbnRTaWduYXR1cmVOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFdmVudE5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGV2ZW50TmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRXZlbnQgJHtldmVudE5hbWUgPyBgIiR7ZXZlbnROYW1lfSIgYCA6ICIifW5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXZlbnQgZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXZlbnROb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlGdW5jdGlvbk5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGZ1bmN0aW9uTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRnVuY3Rpb24gJHtmdW5jdGlvbk5hbWUgPyBgIiR7ZnVuY3Rpb25OYW1lfSIgYCA6ICIifW5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZnVuY3Rpb24gZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlGdW5jdGlvbk91dHB1dHNOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihmdW5jdGlvbk5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBGdW5jdGlvbiAiJHtmdW5jdGlvbk5hbWV9IiBkb2VzIG5vdCBjb250YWluIGFueSBcYG91dHB1dHNcYCBvbiBBQkkuYCwKICAgICAgICAgICAgIkNhbm5vdCBkZWNvZGUgZnVuY3Rpb24gcmVzdWx0IHdpdGhvdXQga25vd2luZyB3aGF0IHRoZSBwYXJhbWV0ZXIgdHlwZXMgYXJlLiIsCiAgICAgICAgICAgICJNYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBBQkkgYW5kIHRoYXQgdGhlIGZ1bmN0aW9uIGV4aXN0cyBvbiBpdC4iCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUZ1bmN0aW9uT3V0cHV0c05vdEZvdW5kRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3Ioc2lnbmF0dXJlLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDkgfSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRW5jb2RlZCBmdW5jdGlvbiBzaWduYXR1cmUgIiR7c2lnbmF0dXJlfSIgbm90IGZvdW5kIG9uIEFCSS5gLAogICAgICAgICAgICAiTWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgQUJJIGFuZCB0aGF0IHRoZSBmdW5jdGlvbiBleGlzdHMgb24gaXQuIiwKICAgICAgICAgICAgYFlvdSBjYW4gbG9vayB1cCB0aGUgc2lnbmF0dXJlIGhlcmU6IGh0dHBzOi8vb3BlbmNoYWluLnh5ei9zaWduYXR1cmVzP3F1ZXJ5PSR7c2lnbmF0dXJlfS5gCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpSXRlbUFtYmlndWl0eUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih4LCB5KSB7CiAgICAgICAgICBzdXBlcigiRm91bmQgYW1iaWd1b3VzIHR5cGVzIGluIG92ZXJsb2FkZWQgQUJJIGl0ZW1zLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgYFxgJHt4LnR5cGV9XGAgaW4gXGAke2Zvcm1hdEFiaUl0ZW0yKHguYWJpSXRlbSl9XGAsIGFuZGAsCiAgICAgICAgICAgICAgYFxgJHt5LnR5cGV9XGAgaW4gXGAke2Zvcm1hdEFiaUl0ZW0yKHkuYWJpSXRlbSl9XGBgLAogICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICJUaGVzZSB0eXBlcyBlbmNvZGUgZGlmZmVyZW50bHkgYW5kIGNhbm5vdCBiZSBkaXN0aW5ndWlzaGVkIGF0IHJ1bnRpbWUuIiwKICAgICAgICAgICAgICAiUmVtb3ZlIG9uZSBvZiB0aGUgYW1iaWd1b3VzIGl0ZW1zIGluIHRoZSBBQkkuIgogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQWJpSXRlbUFtYmlndWl0eUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBCeXRlc1NpemVNaXNtYXRjaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGV4cGVjdGVkU2l6ZSwgZ2l2ZW5TaXplIH0pIHsKICAgICAgICAgIHN1cGVyKGBFeHBlY3RlZCBieXRlcyR7ZXhwZWN0ZWRTaXplfSwgZ290IGJ5dGVzJHtnaXZlblNpemV9LmAsIHsKICAgICAgICAgICAgbmFtZTogIkJ5dGVzU2l6ZU1pc21hdGNoRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIERlY29kZUxvZ0RhdGFNaXNtYXRjaCA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBhYmlJdGVtLCBkYXRhLCBwYXJhbXMsIHNpemU6IHNpemUzIH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYERhdGEgc2l6ZSBvZiAke3NpemUzfSBieXRlcyBpcyB0b28gc21hbGwgZm9yIG5vbi1pbmRleGVkIGV2ZW50IHBhcmFtZXRlcnMuYAogICAgICAgICAgXS5qb2luKCJcbiIpLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBQYXJhbXM6ICgke2Zvcm1hdEFiaVBhcmFtcyhwYXJhbXMsIHsgaW5jbHVkZU5hbWU6IHRydWUgfSl9KWAsCiAgICAgICAgICAgICAgYERhdGE6ICAgJHtkYXRhfSAoJHtzaXplM30gYnl0ZXMpYAogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiRGVjb2RlTG9nRGF0YU1pc21hdGNoIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFiaUl0ZW0iLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkYXRhIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAicGFyYW1zIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2l6ZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmFiaUl0ZW0gPSBhYmlJdGVtOwogICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOwogICAgICAgICAgdGhpcy5zaXplID0gc2l6ZTM7CiAgICAgICAgfQogICAgICB9OwogICAgICBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBhYmlJdGVtLCBwYXJhbSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBFeHBlY3RlZCBhIHRvcGljIGZvciBpbmRleGVkIGV2ZW50IHBhcmFtZXRlciR7cGFyYW0ubmFtZSA/IGAgIiR7cGFyYW0ubmFtZX0iYCA6ICIifSBvbiBldmVudCAiJHtmb3JtYXRBYmlJdGVtMihhYmlJdGVtLCB7IGluY2x1ZGVOYW1lOiB0cnVlIH0pfSIuYAogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IG5hbWU6ICJEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCIgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFiaUl0ZW0iLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5hYmlJdGVtID0gYWJpSXRlbTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBYmlFbmNvZGluZ1R5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIGVuY29kaW5nIHR5cGUuYCwKICAgICAgICAgICAgIlBsZWFzZSBwcm92aWRlIGEgdmFsaWQgQUJJIHR5cGUuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIG5hbWU6ICJJbnZhbGlkQWJpRW5jb2RpbmdUeXBlIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBYmlEZWNvZGluZ1R5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIGRlY29kaW5nIHR5cGUuYCwKICAgICAgICAgICAgIlBsZWFzZSBwcm92aWRlIGEgdmFsaWQgQUJJIHR5cGUuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIG5hbWU6ICJJbnZhbGlkQWJpRGVjb2RpbmdUeXBlIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBcnJheUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkgewogICAgICAgICAgc3VwZXIoW2BWYWx1ZSAiJHt2YWx1ZX0iIGlzIG5vdCBhIHZhbGlkIGFycmF5LmBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgbmFtZTogIkludmFsaWRBcnJheUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkRGVmaW5pdGlvblR5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIGRlZmluaXRpb24gdHlwZS5gLAogICAgICAgICAgICAnVmFsaWQgdHlwZXM6ICJmdW5jdGlvbiIsICJldmVudCIsICJlcnJvciInCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsgbmFtZTogIkludmFsaWREZWZpbml0aW9uVHlwZUVycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFVuc3VwcG9ydGVkUGFja2VkQWJpVHlwZSA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSkgewogICAgICAgICAgc3VwZXIoYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHBhY2tlZCBlbmNvZGluZy5gLCB7CiAgICAgICAgICAgIG5hbWU6ICJVbnN1cHBvcnRlZFBhY2tlZEFiaVR5cGUiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2RhdGEuanMKICB2YXIgU2xpY2VPZmZzZXRPdXRPZkJvdW5kc0Vycm9yLCBTaXplRXhjZWVkc1BhZGRpbmdTaXplRXJyb3IsIEludmFsaWRCeXRlc0xlbmd0aEVycm9yOwogIHZhciBpbml0X2RhdGEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvZGF0YS5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgb2Zmc2V0LCBwb3NpdGlvbiwgc2l6ZTogc2l6ZTMgfSkgewogICAgICAgICAgc3VwZXIoYFNsaWNlICR7cG9zaXRpb24gPT09ICJzdGFydCIgPyAic3RhcnRpbmciIDogImVuZGluZyJ9IGF0IG9mZnNldCAiJHtvZmZzZXR9IiBpcyBvdXQtb2YtYm91bmRzIChzaXplOiAke3NpemUzfSkuYCwgeyBuYW1lOiAiU2xpY2VPZmZzZXRPdXRPZkJvdW5kc0Vycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFNpemVFeGNlZWRzUGFkZGluZ1NpemVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBzaXplOiBzaXplMywgdGFyZ2V0U2l6ZSwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihgJHt0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7dHlwZS5zbGljZSgxKS50b0xvd2VyQ2FzZSgpfSBzaXplICgke3NpemUzfSkgZXhjZWVkcyBwYWRkaW5nIHNpemUgKCR7dGFyZ2V0U2l6ZX0pLmAsIHsgbmFtZTogIlNpemVFeGNlZWRzUGFkZGluZ1NpemVFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQnl0ZXNMZW5ndGhFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBzaXplOiBzaXplMywgdGFyZ2V0U2l6ZSwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihgJHt0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7dHlwZS5zbGljZSgxKS50b0xvd2VyQ2FzZSgpfSBpcyBleHBlY3RlZCB0byBiZSAke3RhcmdldFNpemV9ICR7dHlwZX0gbG9uZywgYnV0IGlzICR7c2l6ZTN9ICR7dHlwZX0gbG9uZy5gLCB7IG5hbWU6ICJJbnZhbGlkQnl0ZXNMZW5ndGhFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvcGFkLmpzCiAgZnVuY3Rpb24gcGFkKGhleE9yQnl0ZXMsIHsgZGlyLCBzaXplOiBzaXplMyA9IDMyIH0gPSB7fSkgewogICAgaWYgKHR5cGVvZiBoZXhPckJ5dGVzID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIHBhZEhleChoZXhPckJ5dGVzLCB7IGRpciwgc2l6ZTogc2l6ZTMgfSk7CiAgICByZXR1cm4gcGFkQnl0ZXMoaGV4T3JCeXRlcywgeyBkaXIsIHNpemU6IHNpemUzIH0pOwogIH0KICBmdW5jdGlvbiBwYWRIZXgoaGV4XywgeyBkaXIsIHNpemU6IHNpemUzID0gMzIgfSA9IHt9KSB7CiAgICBpZiAoc2l6ZTMgPT09IG51bGwpCiAgICAgIHJldHVybiBoZXhfOwogICAgY29uc3QgaGV4ID0gaGV4Xy5yZXBsYWNlKCIweCIsICIiKTsKICAgIGlmIChoZXgubGVuZ3RoID4gc2l6ZTMgKiAyKQogICAgICB0aHJvdyBuZXcgU2l6ZUV4Y2VlZHNQYWRkaW5nU2l6ZUVycm9yKHsKICAgICAgICBzaXplOiBNYXRoLmNlaWwoaGV4Lmxlbmd0aCAvIDIpLAogICAgICAgIHRhcmdldFNpemU6IHNpemUzLAogICAgICAgIHR5cGU6ICJoZXgiCiAgICAgIH0pOwogICAgcmV0dXJuIGAweCR7aGV4W2RpciA9PT0gInJpZ2h0IiA/ICJwYWRFbmQiIDogInBhZFN0YXJ0Il0oc2l6ZTMgKiAyLCAiMCIpfWA7CiAgfQogIGZ1bmN0aW9uIHBhZEJ5dGVzKGJ5dGVzMiwgeyBkaXIsIHNpemU6IHNpemUzID0gMzIgfSA9IHt9KSB7CiAgICBpZiAoc2l6ZTMgPT09IG51bGwpCiAgICAgIHJldHVybiBieXRlczI7CiAgICBpZiAoYnl0ZXMyLmxlbmd0aCA+IHNpemUzKQogICAgICB0aHJvdyBuZXcgU2l6ZUV4Y2VlZHNQYWRkaW5nU2l6ZUVycm9yKHsKICAgICAgICBzaXplOiBieXRlczIubGVuZ3RoLAogICAgICAgIHRhcmdldFNpemU6IHNpemUzLAogICAgICAgIHR5cGU6ICJieXRlcyIKICAgICAgfSk7CiAgICBjb25zdCBwYWRkZWRCeXRlcyA9IG5ldyBVaW50OEFycmF5KHNpemUzKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTM7IGkrKykgewogICAgICBjb25zdCBwYWRFbmQgPSBkaXIgPT09ICJyaWdodCI7CiAgICAgIHBhZGRlZEJ5dGVzW3BhZEVuZCA/IGkgOiBzaXplMyAtIGkgLSAxXSA9IGJ5dGVzMltwYWRFbmQgPyBpIDogYnl0ZXMyLmxlbmd0aCAtIGkgLSAxXTsKICAgIH0KICAgIHJldHVybiBwYWRkZWRCeXRlczsKICB9CiAgdmFyIGluaXRfcGFkID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9wYWQuanMiKCkgewogICAgICBpbml0X2RhdGEoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvZW5jb2RpbmcuanMKICB2YXIgSW50ZWdlck91dE9mUmFuZ2VFcnJvciwgSW52YWxpZEJ5dGVzQm9vbGVhbkVycm9yLCBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yLCBJbnZhbGlkSGV4VmFsdWVFcnJvciwgU2l6ZU92ZXJmbG93RXJyb3I7CiAgdmFyIGluaXRfZW5jb2RpbmcgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvZW5jb2RpbmcuanMiKCkgewogICAgICBpbml0X2Jhc2UoKTsKICAgICAgSW50ZWdlck91dE9mUmFuZ2VFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBtYXgsIG1pbiwgc2lnbmVkLCBzaXplOiBzaXplMywgdmFsdWUgfSkgewogICAgICAgICAgc3VwZXIoYE51bWJlciAiJHt2YWx1ZX0iIGlzIG5vdCBpbiBzYWZlICR7c2l6ZTMgPyBgJHtzaXplMyAqIDh9LWJpdCAke3NpZ25lZCA/ICJzaWduZWQiIDogInVuc2lnbmVkIn0gYCA6ICIifWludGVnZXIgcmFuZ2UgJHttYXggPyBgKCR7bWlufSB0byAke21heH0pYCA6IGAoYWJvdmUgJHttaW59KWB9YCwgeyBuYW1lOiAiSW50ZWdlck91dE9mUmFuZ2VFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQnl0ZXNCb29sZWFuRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGJ5dGVzMikgewogICAgICAgICAgc3VwZXIoYEJ5dGVzIHZhbHVlICIke2J5dGVzMn0iIGlzIG5vdCBhIHZhbGlkIGJvb2xlYW4uIFRoZSBieXRlcyBhcnJheSBtdXN0IGNvbnRhaW4gYSBzaW5nbGUgYnl0ZSBvZiBlaXRoZXIgYSAwIG9yIDEgdmFsdWUuYCwgewogICAgICAgICAgICBuYW1lOiAiSW52YWxpZEJ5dGVzQm9vbGVhbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihoZXgpIHsKICAgICAgICAgIHN1cGVyKGBIZXggdmFsdWUgIiR7aGV4fSIgaXMgbm90IGEgdmFsaWQgYm9vbGVhbi4gVGhlIGhleCB2YWx1ZSBtdXN0IGJlICIweDAiIChmYWxzZSkgb3IgIjB4MSIgKHRydWUpLmAsIHsgbmFtZTogIkludmFsaWRIZXhCb29sZWFuRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgSW52YWxpZEhleFZhbHVlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7CiAgICAgICAgICBzdXBlcihgSGV4IHZhbHVlICIke3ZhbHVlfSIgaXMgYW4gb2RkIGxlbmd0aCAoJHt2YWx1ZS5sZW5ndGh9KS4gSXQgbXVzdCBiZSBhbiBldmVuIGxlbmd0aC5gLCB7IG5hbWU6ICJJbnZhbGlkSGV4VmFsdWVFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTaXplT3ZlcmZsb3dFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBnaXZlblNpemUsIG1heFNpemUgfSkgewogICAgICAgICAgc3VwZXIoYFNpemUgY2Fubm90IGV4Y2VlZCAke21heFNpemV9IGJ5dGVzLiBHaXZlbiBzaXplOiAke2dpdmVuU2l6ZX0gYnl0ZXMuYCwgeyBuYW1lOiAiU2l6ZU92ZXJmbG93RXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL3RyaW0uanMKICBmdW5jdGlvbiB0cmltKGhleE9yQnl0ZXMsIHsgZGlyID0gImxlZnQiIH0gPSB7fSkgewogICAgbGV0IGRhdGEgPSB0eXBlb2YgaGV4T3JCeXRlcyA9PT0gInN0cmluZyIgPyBoZXhPckJ5dGVzLnJlcGxhY2UoIjB4IiwgIiIpIDogaGV4T3JCeXRlczsKICAgIGxldCBzbGljZUxlbmd0aCA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoIC0gMTsgaSsrKSB7CiAgICAgIGlmIChkYXRhW2RpciA9PT0gImxlZnQiID8gaSA6IGRhdGEubGVuZ3RoIC0gaSAtIDFdLnRvU3RyaW5nKCkgPT09ICIwIikKICAgICAgICBzbGljZUxlbmd0aCsrOwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBkYXRhID0gZGlyID09PSAibGVmdCIgPyBkYXRhLnNsaWNlKHNsaWNlTGVuZ3RoKSA6IGRhdGEuc2xpY2UoMCwgZGF0YS5sZW5ndGggLSBzbGljZUxlbmd0aCk7CiAgICBpZiAodHlwZW9mIGhleE9yQnl0ZXMgPT09ICJzdHJpbmciKSB7CiAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMSAmJiBkaXIgPT09ICJyaWdodCIpCiAgICAgICAgZGF0YSA9IGAke2RhdGF9MGA7CiAgICAgIHJldHVybiBgMHgke2RhdGEubGVuZ3RoICUgMiA9PT0gMSA/IGAwJHtkYXRhfWAgOiBkYXRhfWA7CiAgICB9CiAgICByZXR1cm4gZGF0YTsKICB9CiAgdmFyIGluaXRfdHJpbSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvdHJpbS5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5jb2RpbmcvZnJvbUhleC5qcwogIGZ1bmN0aW9uIGFzc2VydFNpemUoaGV4T3JCeXRlcywgeyBzaXplOiBzaXplMyB9KSB7CiAgICBpZiAoc2l6ZShoZXhPckJ5dGVzKSA+IHNpemUzKQogICAgICB0aHJvdyBuZXcgU2l6ZU92ZXJmbG93RXJyb3IoewogICAgICAgIGdpdmVuU2l6ZTogc2l6ZShoZXhPckJ5dGVzKSwKICAgICAgICBtYXhTaXplOiBzaXplMwogICAgICB9KTsKICB9CiAgZnVuY3Rpb24gZnJvbUhleChoZXgsIHRvT3JPcHRzKSB7CiAgICBjb25zdCBvcHRzID0gdHlwZW9mIHRvT3JPcHRzID09PSAic3RyaW5nIiA/IHsgdG86IHRvT3JPcHRzIH0gOiB0b09yT3B0czsKICAgIGNvbnN0IHRvID0gb3B0cy50bzsKICAgIGlmICh0byA9PT0gIm51bWJlciIpCiAgICAgIHJldHVybiBoZXhUb051bWJlcihoZXgsIG9wdHMpOwogICAgaWYgKHRvID09PSAiYmlnaW50IikKICAgICAgcmV0dXJuIGhleFRvQmlnSW50KGhleCwgb3B0cyk7CiAgICBpZiAodG8gPT09ICJzdHJpbmciKQogICAgICByZXR1cm4gaGV4VG9TdHJpbmcoaGV4LCBvcHRzKTsKICAgIGlmICh0byA9PT0gImJvb2xlYW4iKQogICAgICByZXR1cm4gaGV4VG9Cb29sKGhleCwgb3B0cyk7CiAgICByZXR1cm4gaGV4VG9CeXRlcyhoZXgsIG9wdHMpOwogIH0KICBmdW5jdGlvbiBoZXhUb0JpZ0ludChoZXgsIG9wdHMgPSB7fSkgewogICAgY29uc3QgeyBzaWduZWQgfSA9IG9wdHM7CiAgICBpZiAob3B0cy5zaXplKQogICAgICBhc3NlcnRTaXplKGhleCwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICBjb25zdCB2YWx1ZSA9IEJpZ0ludChoZXgpOwogICAgaWYgKCFzaWduZWQpCiAgICAgIHJldHVybiB2YWx1ZTsKICAgIGNvbnN0IHNpemUzID0gKGhleC5sZW5ndGggLSAyKSAvIDI7CiAgICBjb25zdCBtYXggPSAoMW4gPDwgQmlnSW50KHNpemUzKSAqIDhuIC0gMW4pIC0gMW47CiAgICBpZiAodmFsdWUgPD0gbWF4KQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gdmFsdWUgLSBCaWdJbnQoYDB4JHsiZiIucGFkU3RhcnQoc2l6ZTMgKiAyLCAiZiIpfWApIC0gMW47CiAgfQogIGZ1bmN0aW9uIGhleFRvQm9vbChoZXhfLCBvcHRzID0ge30pIHsKICAgIGxldCBoZXggPSBoZXhfOwogICAgaWYgKG9wdHMuc2l6ZSkgewogICAgICBhc3NlcnRTaXplKGhleCwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICAgIGhleCA9IHRyaW0oaGV4KTsKICAgIH0KICAgIGlmICh0cmltKGhleCkgPT09ICIweDAwIikKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKHRyaW0oaGV4KSA9PT0gIjB4MDEiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIHRocm93IG5ldyBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yKGhleCk7CiAgfQogIGZ1bmN0aW9uIGhleFRvTnVtYmVyKGhleCwgb3B0cyA9IHt9KSB7CiAgICByZXR1cm4gTnVtYmVyKGhleFRvQmlnSW50KGhleCwgb3B0cykpOwogIH0KICBmdW5jdGlvbiBoZXhUb1N0cmluZyhoZXgsIG9wdHMgPSB7fSkgewogICAgbGV0IGJ5dGVzMiA9IGhleFRvQnl0ZXMoaGV4KTsKICAgIGlmIChvcHRzLnNpemUpIHsKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICBieXRlczIgPSB0cmltKGJ5dGVzMiwgeyBkaXI6ICJyaWdodCIgfSk7CiAgICB9CiAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGJ5dGVzMik7CiAgfQogIHZhciBpbml0X2Zyb21IZXggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbmNvZGluZy9mcm9tSGV4LmpzIigpIHsKICAgICAgaW5pdF9lbmNvZGluZygpOwogICAgICBpbml0X3NpemUoKTsKICAgICAgaW5pdF90cmltKCk7CiAgICAgIGluaXRfdG9CeXRlcygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL3RvSGV4LmpzCiAgZnVuY3Rpb24gdG9IZXgodmFsdWUsIG9wdHMgPSB7fSkgewogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIgfHwgdHlwZW9mIHZhbHVlID09PSAiYmlnaW50IikKICAgICAgcmV0dXJuIG51bWJlclRvSGV4KHZhbHVlLCBvcHRzKTsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB7CiAgICAgIHJldHVybiBzdHJpbmdUb0hleCh2YWx1ZSwgb3B0cyk7CiAgICB9CiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAiYm9vbGVhbiIpCiAgICAgIHJldHVybiBib29sVG9IZXgodmFsdWUsIG9wdHMpOwogICAgcmV0dXJuIGJ5dGVzVG9IZXgodmFsdWUsIG9wdHMpOwogIH0KICBmdW5jdGlvbiBib29sVG9IZXgodmFsdWUsIG9wdHMgPSB7fSkgewogICAgY29uc3QgaGV4ID0gYDB4JHtOdW1iZXIodmFsdWUpfWA7CiAgICBpZiAodHlwZW9mIG9wdHMuc2l6ZSA9PT0gIm51bWJlciIpIHsKICAgICAgYXNzZXJ0U2l6ZShoZXgsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICByZXR1cm4gcGFkKGhleCwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICB9CiAgICByZXR1cm4gaGV4OwogIH0KICBmdW5jdGlvbiBieXRlc1RvSGV4KHZhbHVlLCBvcHRzID0ge30pIHsKICAgIGxldCBzdHJpbmcgPSAiIjsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKICAgICAgc3RyaW5nICs9IGhleGVzW3ZhbHVlW2ldXTsKICAgIH0KICAgIGNvbnN0IGhleCA9IGAweCR7c3RyaW5nfWA7CiAgICBpZiAodHlwZW9mIG9wdHMuc2l6ZSA9PT0gIm51bWJlciIpIHsKICAgICAgYXNzZXJ0U2l6ZShoZXgsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICByZXR1cm4gcGFkKGhleCwgeyBkaXI6ICJyaWdodCIsIHNpemU6IG9wdHMuc2l6ZSB9KTsKICAgIH0KICAgIHJldHVybiBoZXg7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvSGV4KHZhbHVlXywgb3B0cyA9IHt9KSB7CiAgICBjb25zdCB7IHNpZ25lZCwgc2l6ZTogc2l6ZTMgfSA9IG9wdHM7CiAgICBjb25zdCB2YWx1ZSA9IEJpZ0ludCh2YWx1ZV8pOwogICAgbGV0IG1heFZhbHVlOwogICAgaWYgKHNpemUzKSB7CiAgICAgIGlmIChzaWduZWQpCiAgICAgICAgbWF4VmFsdWUgPSAoMW4gPDwgQmlnSW50KHNpemUzKSAqIDhuIC0gMW4pIC0gMW47CiAgICAgIGVsc2UKICAgICAgICBtYXhWYWx1ZSA9IDJuICoqIChCaWdJbnQoc2l6ZTMpICogOG4pIC0gMW47CiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZV8gPT09ICJudW1iZXIiKSB7CiAgICAgIG1heFZhbHVlID0gQmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTsKICAgIH0KICAgIGNvbnN0IG1pblZhbHVlID0gdHlwZW9mIG1heFZhbHVlID09PSAiYmlnaW50IiAmJiBzaWduZWQgPyAtbWF4VmFsdWUgLSAxbiA6IDA7CiAgICBpZiAobWF4VmFsdWUgJiYgdmFsdWUgPiBtYXhWYWx1ZSB8fCB2YWx1ZSA8IG1pblZhbHVlKSB7CiAgICAgIGNvbnN0IHN1ZmZpeCA9IHR5cGVvZiB2YWx1ZV8gPT09ICJiaWdpbnQiID8gIm4iIDogIiI7CiAgICAgIHRocm93IG5ldyBJbnRlZ2VyT3V0T2ZSYW5nZUVycm9yKHsKICAgICAgICBtYXg6IG1heFZhbHVlID8gYCR7bWF4VmFsdWV9JHtzdWZmaXh9YCA6IHZvaWQgMCwKICAgICAgICBtaW46IGAke21pblZhbHVlfSR7c3VmZml4fWAsCiAgICAgICAgc2lnbmVkLAogICAgICAgIHNpemU6IHNpemUzLAogICAgICAgIHZhbHVlOiBgJHt2YWx1ZV99JHtzdWZmaXh9YAogICAgICB9KTsKICAgIH0KICAgIGNvbnN0IGhleCA9IGAweCR7KHNpZ25lZCAmJiB2YWx1ZSA8IDAgPyAoMW4gPDwgQmlnSW50KHNpemUzICogOCkpICsgQmlnSW50KHZhbHVlKSA6IHZhbHVlKS50b1N0cmluZygxNil9YDsKICAgIGlmIChzaXplMykKICAgICAgcmV0dXJuIHBhZChoZXgsIHsgc2l6ZTogc2l6ZTMgfSk7CiAgICByZXR1cm4gaGV4OwogIH0KICBmdW5jdGlvbiBzdHJpbmdUb0hleCh2YWx1ZV8sIG9wdHMgPSB7fSkgewogICAgY29uc3QgdmFsdWUgPSBlbmNvZGVyLmVuY29kZSh2YWx1ZV8pOwogICAgcmV0dXJuIGJ5dGVzVG9IZXgodmFsdWUsIG9wdHMpOwogIH0KICB2YXIgaGV4ZXMsIGVuY29kZXI7CiAgdmFyIGluaXRfdG9IZXggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbmNvZGluZy90b0hleC5qcyIoKSB7CiAgICAgIGluaXRfZW5jb2RpbmcoKTsKICAgICAgaW5pdF9wYWQoKTsKICAgICAgaW5pdF9mcm9tSGV4KCk7CiAgICAgIGhleGVzID0gLyogQF9fUFVSRV9fICovIEFycmF5LmZyb20oeyBsZW5ndGg6IDI1NiB9LCAoX3YsIGkpID0+IGkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICIwIikpOwogICAgICBlbmNvZGVyID0gLyogQF9fUFVSRV9fICovIG5ldyBUZXh0RW5jb2RlcigpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL3RvQnl0ZXMuanMKICBmdW5jdGlvbiB0b0J5dGVzKHZhbHVlLCBvcHRzID0ge30pIHsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJudW1iZXIiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gImJpZ2ludCIpCiAgICAgIHJldHVybiBudW1iZXJUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJib29sZWFuIikKICAgICAgcmV0dXJuIGJvb2xUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICAgIGlmIChpc0hleCh2YWx1ZSkpCiAgICAgIHJldHVybiBoZXhUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICAgIHJldHVybiBzdHJpbmdUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICB9CiAgZnVuY3Rpb24gYm9vbFRvQnl0ZXModmFsdWUsIG9wdHMgPSB7fSkgewogICAgY29uc3QgYnl0ZXMyID0gbmV3IFVpbnQ4QXJyYXkoMSk7CiAgICBieXRlczJbMF0gPSBOdW1iZXIodmFsdWUpOwogICAgaWYgKHR5cGVvZiBvcHRzLnNpemUgPT09ICJudW1iZXIiKSB7CiAgICAgIGFzc2VydFNpemUoYnl0ZXMyLCB7IHNpemU6IG9wdHMuc2l6ZSB9KTsKICAgICAgcmV0dXJuIHBhZChieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgfQogICAgcmV0dXJuIGJ5dGVzMjsKICB9CiAgZnVuY3Rpb24gY2hhckNvZGVUb0Jhc2UxNihjaGFyKSB7CiAgICBpZiAoY2hhciA+PSBjaGFyQ29kZU1hcC56ZXJvICYmIGNoYXIgPD0gY2hhckNvZGVNYXAubmluZSkKICAgICAgcmV0dXJuIGNoYXIgLSBjaGFyQ29kZU1hcC56ZXJvOwogICAgaWYgKGNoYXIgPj0gY2hhckNvZGVNYXAuQSAmJiBjaGFyIDw9IGNoYXJDb2RlTWFwLkYpCiAgICAgIHJldHVybiBjaGFyIC0gKGNoYXJDb2RlTWFwLkEgLSAxMCk7CiAgICBpZiAoY2hhciA+PSBjaGFyQ29kZU1hcC5hICYmIGNoYXIgPD0gY2hhckNvZGVNYXAuZikKICAgICAgcmV0dXJuIGNoYXIgLSAoY2hhckNvZGVNYXAuYSAtIDEwKTsKICAgIHJldHVybiB2b2lkIDA7CiAgfQogIGZ1bmN0aW9uIGhleFRvQnl0ZXMoaGV4Xywgb3B0cyA9IHt9KSB7CiAgICBsZXQgaGV4ID0gaGV4XzsKICAgIGlmIChvcHRzLnNpemUpIHsKICAgICAgYXNzZXJ0U2l6ZShoZXgsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICBoZXggPSBwYWQoaGV4LCB7IGRpcjogInJpZ2h0Iiwgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgfQogICAgbGV0IGhleFN0cmluZyA9IGhleC5zbGljZSgyKTsKICAgIGlmIChoZXhTdHJpbmcubGVuZ3RoICUgMikKICAgICAgaGV4U3RyaW5nID0gYDAke2hleFN0cmluZ31gOwogICAgY29uc3QgbGVuZ3RoID0gaGV4U3RyaW5nLmxlbmd0aCAvIDI7CiAgICBjb25zdCBieXRlczIgPSBuZXcgVWludDhBcnJheShsZW5ndGgpOwogICAgZm9yIChsZXQgaW5kZXgyID0gMCwgaiA9IDA7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyKyspIHsKICAgICAgY29uc3QgbmliYmxlTGVmdCA9IGNoYXJDb2RlVG9CYXNlMTYoaGV4U3RyaW5nLmNoYXJDb2RlQXQoaisrKSk7CiAgICAgIGNvbnN0IG5pYmJsZVJpZ2h0ID0gY2hhckNvZGVUb0Jhc2UxNihoZXhTdHJpbmcuY2hhckNvZGVBdChqKyspKTsKICAgICAgaWYgKG5pYmJsZUxlZnQgPT09IHZvaWQgMCB8fCBuaWJibGVSaWdodCA9PT0gdm9pZCAwKSB7CiAgICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoYEludmFsaWQgYnl0ZSBzZXF1ZW5jZSAoIiR7aGV4U3RyaW5nW2ogLSAyXX0ke2hleFN0cmluZ1tqIC0gMV19IiBpbiAiJHtoZXhTdHJpbmd9IikuYCk7CiAgICAgIH0KICAgICAgYnl0ZXMyW2luZGV4Ml0gPSBuaWJibGVMZWZ0ICogMTYgKyBuaWJibGVSaWdodDsKICAgIH0KICAgIHJldHVybiBieXRlczI7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvQnl0ZXModmFsdWUsIG9wdHMpIHsKICAgIGNvbnN0IGhleCA9IG51bWJlclRvSGV4KHZhbHVlLCBvcHRzKTsKICAgIHJldHVybiBoZXhUb0J5dGVzKGhleCk7CiAgfQogIGZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXModmFsdWUsIG9wdHMgPSB7fSkgewogICAgY29uc3QgYnl0ZXMyID0gZW5jb2RlcjIuZW5jb2RlKHZhbHVlKTsKICAgIGlmICh0eXBlb2Ygb3B0cy5zaXplID09PSAibnVtYmVyIikgewogICAgICBhc3NlcnRTaXplKGJ5dGVzMiwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICAgIHJldHVybiBwYWQoYnl0ZXMyLCB7IGRpcjogInJpZ2h0Iiwgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgfQogICAgcmV0dXJuIGJ5dGVzMjsKICB9CiAgdmFyIGVuY29kZXIyLCBjaGFyQ29kZU1hcDsKICB2YXIgaW5pdF90b0J5dGVzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5jb2RpbmcvdG9CeXRlcy5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X2lzSGV4KCk7CiAgICAgIGluaXRfcGFkKCk7CiAgICAgIGluaXRfZnJvbUhleCgpOwogICAgICBpbml0X3RvSGV4KCk7CiAgICAgIGVuY29kZXIyID0gLyogQF9fUFVSRV9fICovIG5ldyBUZXh0RW5jb2RlcigpOwogICAgICBjaGFyQ29kZU1hcCA9IHsKICAgICAgICB6ZXJvOiA0OCwKICAgICAgICBuaW5lOiA1NywKICAgICAgICBBOiA2NSwKICAgICAgICBGOiA3MCwKICAgICAgICBhOiA5NywKICAgICAgICBmOiAxMDIKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL19hc3NlcnQuanMKICBmdW5jdGlvbiBudW1iZXIobikgewogICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihuKSB8fCBuIDwgMCkKICAgICAgdGhyb3cgbmV3IEVycm9yKGBwb3NpdGl2ZSBpbnRlZ2VyIGV4cGVjdGVkLCBub3QgJHtufWApOwogIH0KICBmdW5jdGlvbiBpc0J5dGVzKGEpIHsKICAgIHJldHVybiBhIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBhICE9IG51bGwgJiYgdHlwZW9mIGEgPT09ICJvYmplY3QiICYmIGEuY29uc3RydWN0b3IubmFtZSA9PT0gIlVpbnQ4QXJyYXkiOwogIH0KICBmdW5jdGlvbiBieXRlcyhiLCAuLi5sZW5ndGhzKSB7CiAgICBpZiAoIWlzQnl0ZXMoYikpCiAgICAgIHRocm93IG5ldyBFcnJvcigiVWludDhBcnJheSBleHBlY3RlZCIpOwogICAgaWYgKGxlbmd0aHMubGVuZ3RoID4gMCAmJiAhbGVuZ3Rocy5pbmNsdWRlcyhiLmxlbmd0aCkpCiAgICAgIHRocm93IG5ldyBFcnJvcihgVWludDhBcnJheSBleHBlY3RlZCBvZiBsZW5ndGggJHtsZW5ndGhzfSwgbm90IG9mIGxlbmd0aD0ke2IubGVuZ3RofWApOwogIH0KICBmdW5jdGlvbiBoYXNoKGgpIHsKICAgIGlmICh0eXBlb2YgaCAhPT0gImZ1bmN0aW9uIiB8fCB0eXBlb2YgaC5jcmVhdGUgIT09ICJmdW5jdGlvbiIpCiAgICAgIHRocm93IG5ldyBFcnJvcigiSGFzaCBzaG91bGQgYmUgd3JhcHBlZCBieSB1dGlscy53cmFwQ29uc3RydWN0b3IiKTsKICAgIG51bWJlcihoLm91dHB1dExlbik7CiAgICBudW1iZXIoaC5ibG9ja0xlbik7CiAgfQogIGZ1bmN0aW9uIGV4aXN0cyhpbnN0YW5jZSwgY2hlY2tGaW5pc2hlZCA9IHRydWUpIHsKICAgIGlmIChpbnN0YW5jZS5kZXN0cm95ZWQpCiAgICAgIHRocm93IG5ldyBFcnJvcigiSGFzaCBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWQiKTsKICAgIGlmIChjaGVja0ZpbmlzaGVkICYmIGluc3RhbmNlLmZpbmlzaGVkKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkhhc2gjZGlnZXN0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQiKTsKICB9CiAgZnVuY3Rpb24gb3V0cHV0KG91dCwgaW5zdGFuY2UpIHsKICAgIGJ5dGVzKG91dCk7CiAgICBjb25zdCBtaW4gPSBpbnN0YW5jZS5vdXRwdXRMZW47CiAgICBpZiAob3V0Lmxlbmd0aCA8IG1pbikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpZ2VzdEludG8oKSBleHBlY3RzIG91dHB1dCBidWZmZXIgb2YgbGVuZ3RoIGF0IGxlYXN0ICR7bWlufWApOwogICAgfQogIH0KICB2YXIgaW5pdF9hc3NlcnQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL19hc3NlcnQuanMiKCkgewogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vX3U2NC5qcwogIGZ1bmN0aW9uIGZyb21CaWcobiwgbGUgPSBmYWxzZSkgewogICAgaWYgKGxlKQogICAgICByZXR1cm4geyBoOiBOdW1iZXIobiAmIFUzMl9NQVNLNjQpLCBsOiBOdW1iZXIobiA+PiBfMzJuICYgVTMyX01BU0s2NCkgfTsKICAgIHJldHVybiB7IGg6IE51bWJlcihuID4+IF8zMm4gJiBVMzJfTUFTSzY0KSB8IDAsIGw6IE51bWJlcihuICYgVTMyX01BU0s2NCkgfCAwIH07CiAgfQogIGZ1bmN0aW9uIHNwbGl0KGxzdCwgbGUgPSBmYWxzZSkgewogICAgbGV0IEFoID0gbmV3IFVpbnQzMkFycmF5KGxzdC5sZW5ndGgpOwogICAgbGV0IEFsID0gbmV3IFVpbnQzMkFycmF5KGxzdC5sZW5ndGgpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsc3QubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgeyBoLCBsIH0gPSBmcm9tQmlnKGxzdFtpXSwgbGUpOwogICAgICBbQWhbaV0sIEFsW2ldXSA9IFtoLCBsXTsKICAgIH0KICAgIHJldHVybiBbQWgsIEFsXTsKICB9CiAgdmFyIFUzMl9NQVNLNjQsIF8zMm4sIHJvdGxTSCwgcm90bFNMLCByb3RsQkgsIHJvdGxCTDsKICB2YXIgaW5pdF91NjQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL191NjQuanMiKCkgewogICAgICBVMzJfTUFTSzY0ID0gLyogQF9fUFVSRV9fICovIEJpZ0ludCgyICoqIDMyIC0gMSk7CiAgICAgIF8zMm4gPSAvKiBAX19QVVJFX18gKi8gQmlnSW50KDMyKTsKICAgICAgcm90bFNIID0gKGgsIGwsIHMpID0+IGggPDwgcyB8IGwgPj4+IDMyIC0gczsKICAgICAgcm90bFNMID0gKGgsIGwsIHMpID0+IGwgPDwgcyB8IGggPj4+IDMyIC0gczsKICAgICAgcm90bEJIID0gKGgsIGwsIHMpID0+IGwgPDwgcyAtIDMyIHwgaCA+Pj4gNjQgLSBzOwogICAgICByb3RsQkwgPSAoaCwgbCwgcykgPT4gaCA8PCBzIC0gMzIgfCBsID4+PiA2NCAtIHM7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9jcnlwdG8uanMKICB2YXIgY3J5cHRvOwogIHZhciBpbml0X2NyeXB0byA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vY3J5cHRvLmpzIigpIHsKICAgICAgY3J5cHRvID0gdHlwZW9mIGdsb2JhbFRoaXMgPT09ICJvYmplY3QiICYmICJjcnlwdG8iIGluIGdsb2JhbFRoaXMgPyBnbG9iYWxUaGlzLmNyeXB0byA6IHZvaWQgMDsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL3V0aWxzLmpzCiAgZnVuY3Rpb24gYnl0ZVN3YXAzMihhcnIpIHsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7CiAgICAgIGFycltpXSA9IGJ5dGVTd2FwKGFycltpXSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHV0ZjhUb0J5dGVzKHN0cikgewogICAgaWYgKHR5cGVvZiBzdHIgIT09ICJzdHJpbmciKQogICAgICB0aHJvdyBuZXcgRXJyb3IoYHV0ZjhUb0J5dGVzIGV4cGVjdGVkIHN0cmluZywgZ290ICR7dHlwZW9mIHN0cn1gKTsKICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyKSk7CiAgfQogIGZ1bmN0aW9uIHRvQnl0ZXMyKGRhdGEpIHsKICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIpCiAgICAgIGRhdGEgPSB1dGY4VG9CeXRlcyhkYXRhKTsKICAgIGJ5dGVzKGRhdGEpOwogICAgcmV0dXJuIGRhdGE7CiAgfQogIGZ1bmN0aW9uIGNvbmNhdEJ5dGVzKC4uLmFycmF5cykgewogICAgbGV0IHN1bSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhID0gYXJyYXlzW2ldOwogICAgICBieXRlcyhhKTsKICAgICAgc3VtICs9IGEubGVuZ3RoOwogICAgfQogICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc3VtKTsKICAgIGZvciAobGV0IGkgPSAwLCBwYWQyID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhID0gYXJyYXlzW2ldOwogICAgICByZXMuc2V0KGEsIHBhZDIpOwogICAgICBwYWQyICs9IGEubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9CiAgZnVuY3Rpb24gd3JhcENvbnN0cnVjdG9yKGhhc2hDb25zKSB7CiAgICBjb25zdCBoYXNoQyA9IChtc2cpID0+IGhhc2hDb25zKCkudXBkYXRlKHRvQnl0ZXMyKG1zZykpLmRpZ2VzdCgpOwogICAgY29uc3QgdG1wID0gaGFzaENvbnMoKTsKICAgIGhhc2hDLm91dHB1dExlbiA9IHRtcC5vdXRwdXRMZW47CiAgICBoYXNoQy5ibG9ja0xlbiA9IHRtcC5ibG9ja0xlbjsKICAgIGhhc2hDLmNyZWF0ZSA9ICgpID0+IGhhc2hDb25zKCk7CiAgICByZXR1cm4gaGFzaEM7CiAgfQogIGZ1bmN0aW9uIHdyYXBYT0ZDb25zdHJ1Y3RvcldpdGhPcHRzKGhhc2hDb25zKSB7CiAgICBjb25zdCBoYXNoQyA9IChtc2csIG9wdHMpID0+IGhhc2hDb25zKG9wdHMpLnVwZGF0ZSh0b0J5dGVzMihtc2cpKS5kaWdlc3QoKTsKICAgIGNvbnN0IHRtcCA9IGhhc2hDb25zKHt9KTsKICAgIGhhc2hDLm91dHB1dExlbiA9IHRtcC5vdXRwdXRMZW47CiAgICBoYXNoQy5ibG9ja0xlbiA9IHRtcC5ibG9ja0xlbjsKICAgIGhhc2hDLmNyZWF0ZSA9IChvcHRzKSA9PiBoYXNoQ29ucyhvcHRzKTsKICAgIHJldHVybiBoYXNoQzsKICB9CiAgZnVuY3Rpb24gcmFuZG9tQnl0ZXMoYnl0ZXNMZW5ndGggPSAzMikgewogICAgaWYgKGNyeXB0byAmJiB0eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyA9PT0gImZ1bmN0aW9uIikgewogICAgICByZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShieXRlc0xlbmd0aCkpOwogICAgfQogICAgdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIG11c3QgYmUgZGVmaW5lZCIpOwogIH0KICB2YXIgdTMyLCBjcmVhdGVWaWV3LCByb3RyLCByb3RsLCBpc0xFLCBieXRlU3dhcCwgSGFzaCwgdG9TdHI7CiAgdmFyIGluaXRfdXRpbHMyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS91dGlscy5qcyIoKSB7CiAgICAgIGluaXRfY3J5cHRvKCk7CiAgICAgIGluaXRfYXNzZXJ0KCk7CiAgICAgIHUzMiA9IChhcnIpID0+IG5ldyBVaW50MzJBcnJheShhcnIuYnVmZmVyLCBhcnIuYnl0ZU9mZnNldCwgTWF0aC5mbG9vcihhcnIuYnl0ZUxlbmd0aCAvIDQpKTsKICAgICAgY3JlYXRlVmlldyA9IChhcnIpID0+IG5ldyBEYXRhVmlldyhhcnIuYnVmZmVyLCBhcnIuYnl0ZU9mZnNldCwgYXJyLmJ5dGVMZW5ndGgpOwogICAgICByb3RyID0gKHdvcmQsIHNoaWZ0KSA9PiB3b3JkIDw8IDMyIC0gc2hpZnQgfCB3b3JkID4+PiBzaGlmdDsKICAgICAgcm90bCA9ICh3b3JkLCBzaGlmdCkgPT4gd29yZCA8PCBzaGlmdCB8IHdvcmQgPj4+IDMyIC0gc2hpZnQgPj4+IDA7CiAgICAgIGlzTEUgPSBuZXcgVWludDhBcnJheShuZXcgVWludDMyQXJyYXkoWzI4NzQ1NDAyMF0pLmJ1ZmZlcilbMF0gPT09IDY4OwogICAgICBieXRlU3dhcCA9ICh3b3JkKSA9PiB3b3JkIDw8IDI0ICYgNDI3ODE5MDA4MCB8IHdvcmQgPDwgOCAmIDE2NzExNjgwIHwgd29yZCA+Pj4gOCAmIDY1MjgwIHwgd29yZCA+Pj4gMjQgJiAyNTU7CiAgICAgIEhhc2ggPSBjbGFzcyB7CiAgICAgICAgLy8gU2FmZSB2ZXJzaW9uIHRoYXQgY2xvbmVzIGludGVybmFsIHN0YXRlCiAgICAgICAgY2xvbmUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvbmVJbnRvKCk7CiAgICAgICAgfQogICAgICB9OwogICAgICB0b1N0ciA9IHt9LnRvU3RyaW5nOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vc2hhMy5qcwogIGZ1bmN0aW9uIGtlY2Nha1Aocywgcm91bmRzID0gMjQpIHsKICAgIGNvbnN0IEIgPSBuZXcgVWludDMyQXJyYXkoNSAqIDIpOwogICAgZm9yIChsZXQgcm91bmQgPSAyNCAtIHJvdW5kczsgcm91bmQgPCAyNDsgcm91bmQrKykgewogICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IDEwOyB4KyspCiAgICAgICAgQlt4XSA9IHNbeF0gXiBzW3ggKyAxMF0gXiBzW3ggKyAyMF0gXiBzW3ggKyAzMF0gXiBzW3ggKyA0MF07CiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgMTA7IHggKz0gMikgewogICAgICAgIGNvbnN0IGlkeDEgPSAoeCArIDgpICUgMTA7CiAgICAgICAgY29uc3QgaWR4MCA9ICh4ICsgMikgJSAxMDsKICAgICAgICBjb25zdCBCMCA9IEJbaWR4MF07CiAgICAgICAgY29uc3QgQjEgPSBCW2lkeDAgKyAxXTsKICAgICAgICBjb25zdCBUaCA9IHJvdGxIKEIwLCBCMSwgMSkgXiBCW2lkeDFdOwogICAgICAgIGNvbnN0IFRsID0gcm90bEwoQjAsIEIxLCAxKSBeIEJbaWR4MSArIDFdOwogICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgNTA7IHkgKz0gMTApIHsKICAgICAgICAgIHNbeCArIHldIF49IFRoOwogICAgICAgICAgc1t4ICsgeSArIDFdIF49IFRsOwogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgY3VySCA9IHNbMl07CiAgICAgIGxldCBjdXJMID0gc1szXTsKICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCAyNDsgdCsrKSB7CiAgICAgICAgY29uc3Qgc2hpZnQgPSBTSEEzX1JPVExbdF07CiAgICAgICAgY29uc3QgVGggPSByb3RsSChjdXJILCBjdXJMLCBzaGlmdCk7CiAgICAgICAgY29uc3QgVGwgPSByb3RsTChjdXJILCBjdXJMLCBzaGlmdCk7CiAgICAgICAgY29uc3QgUEkgPSBTSEEzX1BJW3RdOwogICAgICAgIGN1ckggPSBzW1BJXTsKICAgICAgICBjdXJMID0gc1tQSSArIDFdOwogICAgICAgIHNbUEldID0gVGg7CiAgICAgICAgc1tQSSArIDFdID0gVGw7CiAgICAgIH0KICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCA1MDsgeSArPSAxMCkgewogICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgMTA7IHgrKykKICAgICAgICAgIEJbeF0gPSBzW3kgKyB4XTsKICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IDEwOyB4KyspCiAgICAgICAgICBzW3kgKyB4XSBePSB+QlsoeCArIDIpICUgMTBdICYgQlsoeCArIDQpICUgMTBdOwogICAgICB9CiAgICAgIHNbMF0gXj0gU0hBM19JT1RBX0hbcm91bmRdOwogICAgICBzWzFdIF49IFNIQTNfSU9UQV9MW3JvdW5kXTsKICAgIH0KICAgIEIuZmlsbCgwKTsKICB9CiAgdmFyIFNIQTNfUEksIFNIQTNfUk9UTCwgX1NIQTNfSU9UQSwgXzBuLCBfMW4sIF8ybiwgXzduLCBfMjU2biwgXzB4NzFuLCBTSEEzX0lPVEFfSCwgU0hBM19JT1RBX0wsIHJvdGxILCByb3RsTCwgS2VjY2FrLCBnZW4sIHNoYTNfMjI0LCBzaGEzXzI1Niwgc2hhM18zODQsIHNoYTNfNTEyLCBrZWNjYWtfMjI0LCBrZWNjYWtfMjU2LCBrZWNjYWtfMzg0LCBrZWNjYWtfNTEyLCBnZW5TaGFrZSwgc2hha2UxMjgsIHNoYWtlMjU2OwogIHZhciBpbml0X3NoYTMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL3NoYTMuanMiKCkgewogICAgICBpbml0X2Fzc2VydCgpOwogICAgICBpbml0X3U2NCgpOwogICAgICBpbml0X3V0aWxzMigpOwogICAgICBTSEEzX1BJID0gW107CiAgICAgIFNIQTNfUk9UTCA9IFtdOwogICAgICBfU0hBM19JT1RBID0gW107CiAgICAgIF8wbiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMCk7CiAgICAgIF8xbiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMSk7CiAgICAgIF8ybiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMik7CiAgICAgIF83biA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoNyk7CiAgICAgIF8yNTZuID0gLyogQF9fUFVSRV9fICovIEJpZ0ludCgyNTYpOwogICAgICBfMHg3MW4gPSAvKiBAX19QVVJFX18gKi8gQmlnSW50KDExMyk7CiAgICAgIGZvciAobGV0IHJvdW5kID0gMCwgUiA9IF8xbiwgeCA9IDEsIHkgPSAwOyByb3VuZCA8IDI0OyByb3VuZCsrKSB7CiAgICAgICAgW3gsIHldID0gW3ksICgyICogeCArIDMgKiB5KSAlIDVdOwogICAgICAgIFNIQTNfUEkucHVzaCgyICogKDUgKiB5ICsgeCkpOwogICAgICAgIFNIQTNfUk9UTC5wdXNoKChyb3VuZCArIDEpICogKHJvdW5kICsgMikgLyAyICUgNjQpOwogICAgICAgIGxldCB0ID0gXzBuOwogICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgNzsgaisrKSB7CiAgICAgICAgICBSID0gKFIgPDwgXzFuIF4gKFIgPj4gXzduKSAqIF8weDcxbikgJSBfMjU2bjsKICAgICAgICAgIGlmIChSICYgXzJuKQogICAgICAgICAgICB0IF49IF8xbiA8PCAoXzFuIDw8IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoaikpIC0gXzFuOwogICAgICAgIH0KICAgICAgICBfU0hBM19JT1RBLnB1c2godCk7CiAgICAgIH0KICAgICAgW1NIQTNfSU9UQV9ILCBTSEEzX0lPVEFfTF0gPSAvKiBAX19QVVJFX18gKi8gc3BsaXQoX1NIQTNfSU9UQSwgdHJ1ZSk7CiAgICAgIHJvdGxIID0gKGgsIGwsIHMpID0+IHMgPiAzMiA/IHJvdGxCSChoLCBsLCBzKSA6IHJvdGxTSChoLCBsLCBzKTsKICAgICAgcm90bEwgPSAoaCwgbCwgcykgPT4gcyA+IDMyID8gcm90bEJMKGgsIGwsIHMpIDogcm90bFNMKGgsIGwsIHMpOwogICAgICBLZWNjYWsgPSBjbGFzcyBfS2VjY2FrIGV4dGVuZHMgSGFzaCB7CiAgICAgICAgLy8gTk9URTogd2UgYWNjZXB0IGFyZ3VtZW50cyBpbiBieXRlcyBpbnN0ZWFkIG9mIGJpdHMgaGVyZS4KICAgICAgICBjb25zdHJ1Y3RvcihibG9ja0xlbiwgc3VmZml4LCBvdXRwdXRMZW4sIGVuYWJsZVhPRiA9IGZhbHNlLCByb3VuZHMgPSAyNCkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIHRoaXMuYmxvY2tMZW4gPSBibG9ja0xlbjsKICAgICAgICAgIHRoaXMuc3VmZml4ID0gc3VmZml4OwogICAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0aGlzLmVuYWJsZVhPRiA9IGVuYWJsZVhPRjsKICAgICAgICAgIHRoaXMucm91bmRzID0gcm91bmRzOwogICAgICAgICAgdGhpcy5wb3MgPSAwOwogICAgICAgICAgdGhpcy5wb3NPdXQgPSAwOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTsKICAgICAgICAgIG51bWJlcihvdXRwdXRMZW4pOwogICAgICAgICAgaWYgKDAgPj0gdGhpcy5ibG9ja0xlbiB8fCB0aGlzLmJsb2NrTGVuID49IDIwMCkKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTaGEzIHN1cHBvcnRzIG9ubHkga2VjY2FrLWYxNjAwIGZ1bmN0aW9uIik7CiAgICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFVpbnQ4QXJyYXkoMjAwKTsKICAgICAgICAgIHRoaXMuc3RhdGUzMiA9IHUzMih0aGlzLnN0YXRlKTsKICAgICAgICB9CiAgICAgICAga2VjY2FrKCkgewogICAgICAgICAgaWYgKCFpc0xFKQogICAgICAgICAgICBieXRlU3dhcDMyKHRoaXMuc3RhdGUzMik7CiAgICAgICAgICBrZWNjYWtQKHRoaXMuc3RhdGUzMiwgdGhpcy5yb3VuZHMpOwogICAgICAgICAgaWYgKCFpc0xFKQogICAgICAgICAgICBieXRlU3dhcDMyKHRoaXMuc3RhdGUzMik7CiAgICAgICAgICB0aGlzLnBvc091dCA9IDA7CiAgICAgICAgICB0aGlzLnBvcyA9IDA7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZShkYXRhKSB7CiAgICAgICAgICBleGlzdHModGhpcyk7CiAgICAgICAgICBjb25zdCB7IGJsb2NrTGVuLCBzdGF0ZSB9ID0gdGhpczsKICAgICAgICAgIGRhdGEgPSB0b0J5dGVzMihkYXRhKTsKICAgICAgICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoOwogICAgICAgICAgZm9yIChsZXQgcG9zID0gMDsgcG9zIDwgbGVuOyApIHsKICAgICAgICAgICAgY29uc3QgdGFrZSA9IE1hdGgubWluKGJsb2NrTGVuIC0gdGhpcy5wb3MsIGxlbiAtIHBvcyk7CiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFrZTsgaSsrKQogICAgICAgICAgICAgIHN0YXRlW3RoaXMucG9zKytdIF49IGRhdGFbcG9zKytdOwogICAgICAgICAgICBpZiAodGhpcy5wb3MgPT09IGJsb2NrTGVuKQogICAgICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgZmluaXNoKCkgewogICAgICAgICAgaWYgKHRoaXMuZmluaXNoZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMuZmluaXNoZWQgPSB0cnVlOwogICAgICAgICAgY29uc3QgeyBzdGF0ZSwgc3VmZml4LCBwb3MsIGJsb2NrTGVuIH0gPSB0aGlzOwogICAgICAgICAgc3RhdGVbcG9zXSBePSBzdWZmaXg7CiAgICAgICAgICBpZiAoKHN1ZmZpeCAmIDEyOCkgIT09IDAgJiYgcG9zID09PSBibG9ja0xlbiAtIDEpCiAgICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgICBzdGF0ZVtibG9ja0xlbiAtIDFdIF49IDEyODsKICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgfQogICAgICAgIHdyaXRlSW50byhvdXQpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzLCBmYWxzZSk7CiAgICAgICAgICBieXRlcyhvdXQpOwogICAgICAgICAgdGhpcy5maW5pc2goKTsKICAgICAgICAgIGNvbnN0IGJ1ZmZlck91dCA9IHRoaXMuc3RhdGU7CiAgICAgICAgICBjb25zdCB7IGJsb2NrTGVuIH0gPSB0aGlzOwogICAgICAgICAgZm9yIChsZXQgcG9zID0gMCwgbGVuID0gb3V0Lmxlbmd0aDsgcG9zIDwgbGVuOyApIHsKICAgICAgICAgICAgaWYgKHRoaXMucG9zT3V0ID49IGJsb2NrTGVuKQogICAgICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihibG9ja0xlbiAtIHRoaXMucG9zT3V0LCBsZW4gLSBwb3MpOwogICAgICAgICAgICBvdXQuc2V0KGJ1ZmZlck91dC5zdWJhcnJheSh0aGlzLnBvc091dCwgdGhpcy5wb3NPdXQgKyB0YWtlKSwgcG9zKTsKICAgICAgICAgICAgdGhpcy5wb3NPdXQgKz0gdGFrZTsKICAgICAgICAgICAgcG9zICs9IHRha2U7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gb3V0OwogICAgICAgIH0KICAgICAgICB4b2ZJbnRvKG91dCkgewogICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZVhPRikKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJYT0YgaXMgbm90IHBvc3NpYmxlIGZvciB0aGlzIGluc3RhbmNlIik7CiAgICAgICAgICByZXR1cm4gdGhpcy53cml0ZUludG8ob3V0KTsKICAgICAgICB9CiAgICAgICAgeG9mKGJ5dGVzMikgewogICAgICAgICAgbnVtYmVyKGJ5dGVzMik7CiAgICAgICAgICByZXR1cm4gdGhpcy54b2ZJbnRvKG5ldyBVaW50OEFycmF5KGJ5dGVzMikpOwogICAgICAgIH0KICAgICAgICBkaWdlc3RJbnRvKG91dCkgewogICAgICAgICAgb3V0cHV0KG91dCwgdGhpcyk7CiAgICAgICAgICBpZiAodGhpcy5maW5pc2hlZCkKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJkaWdlc3QoKSB3YXMgYWxyZWFkeSBjYWxsZWQiKTsKICAgICAgICAgIHRoaXMud3JpdGVJbnRvKG91dCk7CiAgICAgICAgICB0aGlzLmRlc3Ryb3koKTsKICAgICAgICAgIHJldHVybiBvdXQ7CiAgICAgICAgfQogICAgICAgIGRpZ2VzdCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmRpZ2VzdEludG8obmV3IFVpbnQ4QXJyYXkodGhpcy5vdXRwdXRMZW4pKTsKICAgICAgICB9CiAgICAgICAgZGVzdHJveSgpIHsKICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuc3RhdGUuZmlsbCgwKTsKICAgICAgICB9CiAgICAgICAgX2Nsb25lSW50byh0bykgewogICAgICAgICAgY29uc3QgeyBibG9ja0xlbiwgc3VmZml4LCBvdXRwdXRMZW4sIHJvdW5kcywgZW5hYmxlWE9GIH0gPSB0aGlzOwogICAgICAgICAgdG8gfHwgKHRvID0gbmV3IF9LZWNjYWsoYmxvY2tMZW4sIHN1ZmZpeCwgb3V0cHV0TGVuLCBlbmFibGVYT0YsIHJvdW5kcykpOwogICAgICAgICAgdG8uc3RhdGUzMi5zZXQodGhpcy5zdGF0ZTMyKTsKICAgICAgICAgIHRvLnBvcyA9IHRoaXMucG9zOwogICAgICAgICAgdG8ucG9zT3V0ID0gdGhpcy5wb3NPdXQ7CiAgICAgICAgICB0by5maW5pc2hlZCA9IHRoaXMuZmluaXNoZWQ7CiAgICAgICAgICB0by5yb3VuZHMgPSByb3VuZHM7CiAgICAgICAgICB0by5zdWZmaXggPSBzdWZmaXg7CiAgICAgICAgICB0by5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0by5lbmFibGVYT0YgPSBlbmFibGVYT0Y7CiAgICAgICAgICB0by5kZXN0cm95ZWQgPSB0aGlzLmRlc3Ryb3llZDsKICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGdlbiA9IChzdWZmaXgsIGJsb2NrTGVuLCBvdXRwdXRMZW4pID0+IHdyYXBDb25zdHJ1Y3RvcigoKSA9PiBuZXcgS2VjY2FrKGJsb2NrTGVuLCBzdWZmaXgsIG91dHB1dExlbikpOwogICAgICBzaGEzXzIyNCA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oNiwgMTQ0LCAyMjQgLyA4KTsKICAgICAgc2hhM18yNTYgPSAvKiBAX19QVVJFX18gKi8gZ2VuKDYsIDEzNiwgMjU2IC8gOCk7CiAgICAgIHNoYTNfMzg0ID0gLyogQF9fUFVSRV9fICovIGdlbig2LCAxMDQsIDM4NCAvIDgpOwogICAgICBzaGEzXzUxMiA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oNiwgNzIsIDUxMiAvIDgpOwogICAgICBrZWNjYWtfMjI0ID0gLyogQF9fUFVSRV9fICovIGdlbigxLCAxNDQsIDIyNCAvIDgpOwogICAgICBrZWNjYWtfMjU2ID0gLyogQF9fUFVSRV9fICovIGdlbigxLCAxMzYsIDI1NiAvIDgpOwogICAgICBrZWNjYWtfMzg0ID0gLyogQF9fUFVSRV9fICovIGdlbigxLCAxMDQsIDM4NCAvIDgpOwogICAgICBrZWNjYWtfNTEyID0gLyogQF9fUFVSRV9fICovIGdlbigxLCA3MiwgNTEyIC8gOCk7CiAgICAgIGdlblNoYWtlID0gKHN1ZmZpeCwgYmxvY2tMZW4sIG91dHB1dExlbikgPT4gd3JhcFhPRkNvbnN0cnVjdG9yV2l0aE9wdHMoKG9wdHMgPSB7fSkgPT4gbmV3IEtlY2NhayhibG9ja0xlbiwgc3VmZml4LCBvcHRzLmRrTGVuID09PSB2b2lkIDAgPyBvdXRwdXRMZW4gOiBvcHRzLmRrTGVuLCB0cnVlKSk7CiAgICAgIHNoYWtlMTI4ID0gLyogQF9fUFVSRV9fICovIGdlblNoYWtlKDMxLCAxNjgsIDEyOCAvIDgpOwogICAgICBzaGFrZTI1NiA9IC8qIEBfX1BVUkVfXyAqLyBnZW5TaGFrZSgzMSwgMTM2LCAyNTYgLyA4KTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL2tlY2NhazI1Ni5qcwogIGZ1bmN0aW9uIGtlY2NhazI1Nih2YWx1ZSwgdG9fKSB7CiAgICBjb25zdCB0byA9IHRvXyB8fCAiaGV4IjsKICAgIGNvbnN0IGJ5dGVzMiA9IGtlY2Nha18yNTYoaXNIZXgodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KSA/IHRvQnl0ZXModmFsdWUpIDogdmFsdWUpOwogICAgaWYgKHRvID09PSAiYnl0ZXMiKQogICAgICByZXR1cm4gYnl0ZXMyOwogICAgcmV0dXJuIHRvSGV4KGJ5dGVzMik7CiAgfQogIHZhciBpbml0X2tlY2NhazI1NiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gva2VjY2FrMjU2LmpzIigpIHsKICAgICAgaW5pdF9zaGEzKCk7CiAgICAgIGluaXRfaXNIZXgoKTsKICAgICAgaW5pdF90b0J5dGVzKCk7CiAgICAgIGluaXRfdG9IZXgoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL2hhc2hTaWduYXR1cmUuanMKICBmdW5jdGlvbiBoYXNoU2lnbmF0dXJlKHNpZykgewogICAgcmV0dXJuIGhhc2gyKHNpZyk7CiAgfQogIHZhciBoYXNoMjsKICB2YXIgaW5pdF9oYXNoU2lnbmF0dXJlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9oYXNoU2lnbmF0dXJlLmpzIigpIHsKICAgICAgaW5pdF90b0J5dGVzKCk7CiAgICAgIGluaXRfa2VjY2FrMjU2KCk7CiAgICAgIGhhc2gyID0gKHZhbHVlKSA9PiBrZWNjYWsyNTYodG9CeXRlcyh2YWx1ZSkpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvbm9ybWFsaXplU2lnbmF0dXJlLmpzCiAgZnVuY3Rpb24gbm9ybWFsaXplU2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgbGV0IGFjdGl2ZSA9IHRydWU7CiAgICBsZXQgY3VycmVudCA9ICIiOwogICAgbGV0IGxldmVsID0gMDsKICAgIGxldCByZXN1bHQgPSAiIjsKICAgIGxldCB2YWxpZCA9IGZhbHNlOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaWduYXR1cmUubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgY2hhciA9IHNpZ25hdHVyZVtpXTsKICAgICAgaWYgKFsiKCIsICIpIiwgIiwiXS5pbmNsdWRlcyhjaGFyKSkKICAgICAgICBhY3RpdmUgPSB0cnVlOwogICAgICBpZiAoY2hhciA9PT0gIigiKQogICAgICAgIGxldmVsKys7CiAgICAgIGlmIChjaGFyID09PSAiKSIpCiAgICAgICAgbGV2ZWwtLTsKICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgY29udGludWU7CiAgICAgIGlmIChsZXZlbCA9PT0gMCkgewogICAgICAgIGlmIChjaGFyID09PSAiICIgJiYgWyJldmVudCIsICJmdW5jdGlvbiIsICIiXS5pbmNsdWRlcyhyZXN1bHQpKQogICAgICAgICAgcmVzdWx0ID0gIiI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICByZXN1bHQgKz0gY2hhcjsKICAgICAgICAgIGlmIChjaGFyID09PSAiKSIpIHsKICAgICAgICAgICAgdmFsaWQgPSB0cnVlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGNoYXIgPT09ICIgIikgewogICAgICAgIGlmIChzaWduYXR1cmVbaSAtIDFdICE9PSAiLCIgJiYgY3VycmVudCAhPT0gIiwiICYmIGN1cnJlbnQgIT09ICIsKCIpIHsKICAgICAgICAgIGN1cnJlbnQgPSAiIjsKICAgICAgICAgIGFjdGl2ZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICByZXN1bHQgKz0gY2hhcjsKICAgICAgY3VycmVudCArPSBjaGFyOwogICAgfQogICAgaWYgKCF2YWxpZCkKICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoIlVuYWJsZSB0byBub3JtYWxpemUgc2lnbmF0dXJlLiIpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdmFyIGluaXRfbm9ybWFsaXplU2lnbmF0dXJlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9ub3JtYWxpemVTaWduYXR1cmUuanMiKCkgewogICAgICBpbml0X2Jhc2UoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvU2lnbmF0dXJlLmpzCiAgdmFyIHRvU2lnbmF0dXJlOwogIHZhciBpbml0X3RvU2lnbmF0dXJlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b1NpZ25hdHVyZS5qcyIoKSB7CiAgICAgIGluaXRfZXhwb3J0cygpOwogICAgICBpbml0X25vcm1hbGl6ZVNpZ25hdHVyZSgpOwogICAgICB0b1NpZ25hdHVyZSA9IChkZWYpID0+IHsKICAgICAgICBjb25zdCBkZWZfID0gKCgpID0+IHsKICAgICAgICAgIGlmICh0eXBlb2YgZGVmID09PSAic3RyaW5nIikKICAgICAgICAgICAgcmV0dXJuIGRlZjsKICAgICAgICAgIHJldHVybiBmb3JtYXRBYmlJdGVtKGRlZik7CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gbm9ybWFsaXplU2lnbmF0dXJlKGRlZl8pOwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9TaWduYXR1cmVIYXNoLmpzCiAgZnVuY3Rpb24gdG9TaWduYXR1cmVIYXNoKGZuKSB7CiAgICByZXR1cm4gaGFzaFNpZ25hdHVyZSh0b1NpZ25hdHVyZShmbikpOwogIH0KICB2YXIgaW5pdF90b1NpZ25hdHVyZUhhc2ggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvU2lnbmF0dXJlSGFzaC5qcyIoKSB7CiAgICAgIGluaXRfaGFzaFNpZ25hdHVyZSgpOwogICAgICBpbml0X3RvU2lnbmF0dXJlKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b0V2ZW50U2VsZWN0b3IuanMKICB2YXIgdG9FdmVudFNlbGVjdG9yOwogIHZhciBpbml0X3RvRXZlbnRTZWxlY3RvciA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9FdmVudFNlbGVjdG9yLmpzIigpIHsKICAgICAgaW5pdF90b1NpZ25hdHVyZUhhc2goKTsKICAgICAgdG9FdmVudFNlbGVjdG9yID0gdG9TaWduYXR1cmVIYXNoOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hZGRyZXNzLmpzCiAgdmFyIEludmFsaWRBZGRyZXNzRXJyb3I7CiAgdmFyIGluaXRfYWRkcmVzcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hZGRyZXNzLmpzIigpIHsKICAgICAgaW5pdF9iYXNlKCk7CiAgICAgIEludmFsaWRBZGRyZXNzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYWRkcmVzcyB9KSB7CiAgICAgICAgICBzdXBlcihgQWRkcmVzcyAiJHthZGRyZXNzfSIgaXMgaW52YWxpZC5gLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgICItIEFkZHJlc3MgbXVzdCBiZSBhIGhleCB2YWx1ZSBvZiAyMCBieXRlcyAoNDAgaGV4IGNoYXJhY3RlcnMpLiIsCiAgICAgICAgICAgICAgIi0gQWRkcmVzcyBtdXN0IG1hdGNoIGl0cyBjaGVja3N1bSBjb3VudGVycGFydC4iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkQWRkcmVzc0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2xydS5qcwogIHZhciBMcnVNYXA7CiAgdmFyIGluaXRfbHJ1ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvbHJ1LmpzIigpIHsKICAgICAgTHJ1TWFwID0gY2xhc3MgZXh0ZW5kcyBNYXAgewogICAgICAgIGNvbnN0cnVjdG9yKHNpemUzKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJtYXhTaXplIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMubWF4U2l6ZSA9IHNpemUzOwogICAgICAgIH0KICAgICAgICBzZXQoa2V5LCB2YWx1ZSkgewogICAgICAgICAgc3VwZXIuc2V0KGtleSwgdmFsdWUpOwogICAgICAgICAgaWYgKHRoaXMubWF4U2l6ZSAmJiB0aGlzLnNpemUgPiB0aGlzLm1heFNpemUpCiAgICAgICAgICAgIHRoaXMuZGVsZXRlKHRoaXMua2V5cygpLm5leHQoKS52YWx1ZSk7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9nZXRBZGRyZXNzLmpzCiAgZnVuY3Rpb24gY2hlY2tzdW1BZGRyZXNzKGFkZHJlc3NfLCBjaGFpbklkKSB7CiAgICBpZiAoY2hlY2tzdW1BZGRyZXNzQ2FjaGUuaGFzKGAke2FkZHJlc3NffS4ke2NoYWluSWR9YCkpCiAgICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3NDYWNoZS5nZXQoYCR7YWRkcmVzc199LiR7Y2hhaW5JZH1gKTsKICAgIGNvbnN0IGhleEFkZHJlc3MgPSBjaGFpbklkID8gYCR7Y2hhaW5JZH0ke2FkZHJlc3NfLnRvTG93ZXJDYXNlKCl9YCA6IGFkZHJlc3NfLnN1YnN0cmluZygyKS50b0xvd2VyQ2FzZSgpOwogICAgY29uc3QgaGFzaDMgPSBrZWNjYWsyNTYoc3RyaW5nVG9CeXRlcyhoZXhBZGRyZXNzKSwgImJ5dGVzIik7CiAgICBjb25zdCBhZGRyZXNzID0gKGNoYWluSWQgPyBoZXhBZGRyZXNzLnN1YnN0cmluZyhgJHtjaGFpbklkfTB4YC5sZW5ndGgpIDogaGV4QWRkcmVzcykuc3BsaXQoIiIpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MDsgaSArPSAyKSB7CiAgICAgIGlmIChoYXNoM1tpID4+IDFdID4+IDQgPj0gOCAmJiBhZGRyZXNzW2ldKSB7CiAgICAgICAgYWRkcmVzc1tpXSA9IGFkZHJlc3NbaV0udG9VcHBlckNhc2UoKTsKICAgICAgfQogICAgICBpZiAoKGhhc2gzW2kgPj4gMV0gJiAxNSkgPj0gOCAmJiBhZGRyZXNzW2kgKyAxXSkgewogICAgICAgIGFkZHJlc3NbaSArIDFdID0gYWRkcmVzc1tpICsgMV0udG9VcHBlckNhc2UoKTsKICAgICAgfQogICAgfQogICAgY29uc3QgcmVzdWx0ID0gYDB4JHthZGRyZXNzLmpvaW4oIiIpfWA7CiAgICBjaGVja3N1bUFkZHJlc3NDYWNoZS5zZXQoYCR7YWRkcmVzc199LiR7Y2hhaW5JZH1gLCByZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gZ2V0QWRkcmVzcyhhZGRyZXNzLCBjaGFpbklkKSB7CiAgICBpZiAoIWlzQWRkcmVzcyhhZGRyZXNzLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzcyB9KTsKICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3MoYWRkcmVzcywgY2hhaW5JZCk7CiAgfQogIHZhciBjaGVja3N1bUFkZHJlc3NDYWNoZTsKICB2YXIgaW5pdF9nZXRBZGRyZXNzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9nZXRBZGRyZXNzLmpzIigpIHsKICAgICAgaW5pdF9hZGRyZXNzKCk7CiAgICAgIGluaXRfdG9CeXRlcygpOwogICAgICBpbml0X2tlY2NhazI1NigpOwogICAgICBpbml0X2xydSgpOwogICAgICBpbml0X2lzQWRkcmVzcygpOwogICAgICBjaGVja3N1bUFkZHJlc3NDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTHJ1TWFwKDgxOTIpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FkZHJlc3MvaXNBZGRyZXNzLmpzCiAgZnVuY3Rpb24gaXNBZGRyZXNzKGFkZHJlc3MsIG9wdGlvbnMpIHsKICAgIGNvbnN0IHsgc3RyaWN0ID0gdHJ1ZSB9ID0gb3B0aW9ucyA/PyB7fTsKICAgIGNvbnN0IGNhY2hlS2V5MiA9IGAke2FkZHJlc3N9LiR7c3RyaWN0fWA7CiAgICBpZiAoaXNBZGRyZXNzQ2FjaGUuaGFzKGNhY2hlS2V5MikpCiAgICAgIHJldHVybiBpc0FkZHJlc3NDYWNoZS5nZXQoY2FjaGVLZXkyKTsKICAgIGNvbnN0IHJlc3VsdCA9ICgoKSA9PiB7CiAgICAgIGlmICghYWRkcmVzc1JlZ2V4LnRlc3QoYWRkcmVzcykpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoYWRkcmVzcy50b0xvd2VyQ2FzZSgpID09PSBhZGRyZXNzKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoc3RyaWN0KQogICAgICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3MoYWRkcmVzcykgPT09IGFkZHJlc3M7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSkoKTsKICAgIGlzQWRkcmVzc0NhY2hlLnNldChjYWNoZUtleTIsIHJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2YXIgYWRkcmVzc1JlZ2V4LCBpc0FkZHJlc3NDYWNoZTsKICB2YXIgaW5pdF9pc0FkZHJlc3MgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hZGRyZXNzL2lzQWRkcmVzcy5qcyIoKSB7CiAgICAgIGluaXRfbHJ1KCk7CiAgICAgIGluaXRfZ2V0QWRkcmVzcygpOwogICAgICBhZGRyZXNzUmVnZXggPSAvXjB4W2EtZkEtRjAtOV17NDB9JC87CiAgICAgIGlzQWRkcmVzc0NhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBMcnVNYXAoODE5Mik7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9jb25jYXQuanMKICBmdW5jdGlvbiBjb25jYXQodmFsdWVzKSB7CiAgICBpZiAodHlwZW9mIHZhbHVlc1swXSA9PT0gInN0cmluZyIpCiAgICAgIHJldHVybiBjb25jYXRIZXgodmFsdWVzKTsKICAgIHJldHVybiBjb25jYXRCeXRlczIodmFsdWVzKTsKICB9CiAgZnVuY3Rpb24gY29uY2F0Qnl0ZXMyKHZhbHVlcykgewogICAgbGV0IGxlbmd0aCA9IDA7CiAgICBmb3IgKGNvbnN0IGFyciBvZiB2YWx1ZXMpIHsKICAgICAgbGVuZ3RoICs9IGFyci5sZW5ndGg7CiAgICB9CiAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpOwogICAgbGV0IG9mZnNldCA9IDA7CiAgICBmb3IgKGNvbnN0IGFyciBvZiB2YWx1ZXMpIHsKICAgICAgcmVzdWx0LnNldChhcnIsIG9mZnNldCk7CiAgICAgIG9mZnNldCArPSBhcnIubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gY29uY2F0SGV4KHZhbHVlcykgewogICAgcmV0dXJuIGAweCR7dmFsdWVzLnJlZHVjZSgoYWNjLCB4KSA9PiBhY2MgKyB4LnJlcGxhY2UoIjB4IiwgIiIpLCAiIil9YDsKICB9CiAgdmFyIGluaXRfY29uY2F0ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9jb25jYXQuanMiKCkgewogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvc2xpY2UuanMKICBmdW5jdGlvbiBzbGljZSh2YWx1ZSwgc3RhcnQsIGVuZCwgeyBzdHJpY3QgfSA9IHt9KSB7CiAgICBpZiAoaXNIZXgodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgcmV0dXJuIHNsaWNlSGV4KHZhbHVlLCBzdGFydCwgZW5kLCB7CiAgICAgICAgc3RyaWN0CiAgICAgIH0pOwogICAgcmV0dXJuIHNsaWNlQnl0ZXModmFsdWUsIHN0YXJ0LCBlbmQsIHsKICAgICAgc3RyaWN0CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gYXNzZXJ0U3RhcnRPZmZzZXQodmFsdWUsIHN0YXJ0KSB7CiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAibnVtYmVyIiAmJiBzdGFydCA+IDAgJiYgc3RhcnQgPiBzaXplKHZhbHVlKSAtIDEpCiAgICAgIHRocm93IG5ldyBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IoewogICAgICAgIG9mZnNldDogc3RhcnQsCiAgICAgICAgcG9zaXRpb246ICJzdGFydCIsCiAgICAgICAgc2l6ZTogc2l6ZSh2YWx1ZSkKICAgICAgfSk7CiAgfQogIGZ1bmN0aW9uIGFzc2VydEVuZE9mZnNldCh2YWx1ZSwgc3RhcnQsIGVuZCkgewogICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gIm51bWJlciIgJiYgdHlwZW9mIGVuZCA9PT0gIm51bWJlciIgJiYgc2l6ZSh2YWx1ZSkgIT09IGVuZCAtIHN0YXJ0KSB7CiAgICAgIHRocm93IG5ldyBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IoewogICAgICAgIG9mZnNldDogZW5kLAogICAgICAgIHBvc2l0aW9uOiAiZW5kIiwKICAgICAgICBzaXplOiBzaXplKHZhbHVlKQogICAgICB9KTsKICAgIH0KICB9CiAgZnVuY3Rpb24gc2xpY2VCeXRlcyh2YWx1ZV8sIHN0YXJ0LCBlbmQsIHsgc3RyaWN0IH0gPSB7fSkgewogICAgYXNzZXJ0U3RhcnRPZmZzZXQodmFsdWVfLCBzdGFydCk7CiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlXy5zbGljZShzdGFydCwgZW5kKTsKICAgIGlmIChzdHJpY3QpCiAgICAgIGFzc2VydEVuZE9mZnNldCh2YWx1ZSwgc3RhcnQsIGVuZCk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQogIGZ1bmN0aW9uIHNsaWNlSGV4KHZhbHVlXywgc3RhcnQsIGVuZCwgeyBzdHJpY3QgfSA9IHt9KSB7CiAgICBhc3NlcnRTdGFydE9mZnNldCh2YWx1ZV8sIHN0YXJ0KTsKICAgIGNvbnN0IHZhbHVlID0gYDB4JHt2YWx1ZV8ucmVwbGFjZSgiMHgiLCAiIikuc2xpY2UoKHN0YXJ0ID8/IDApICogMiwgKGVuZCA/PyB2YWx1ZV8ubGVuZ3RoKSAqIDIpfWA7CiAgICBpZiAoc3RyaWN0KQogICAgICBhc3NlcnRFbmRPZmZzZXQodmFsdWUsIHN0YXJ0LCBlbmQpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KICB2YXIgaW5pdF9zbGljZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvc2xpY2UuanMiKCkgewogICAgICBpbml0X2RhdGEoKTsKICAgICAgaW5pdF9pc0hleCgpOwogICAgICBpbml0X3NpemUoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlQWJpUGFyYW1ldGVycy5qcwogIGZ1bmN0aW9uIGVuY29kZUFiaVBhcmFtZXRlcnMocGFyYW1zLCB2YWx1ZXMpIHsKICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSB2YWx1ZXMubGVuZ3RoKQogICAgICB0aHJvdyBuZXcgQWJpRW5jb2RpbmdMZW5ndGhNaXNtYXRjaEVycm9yKHsKICAgICAgICBleHBlY3RlZExlbmd0aDogcGFyYW1zLmxlbmd0aCwKICAgICAgICBnaXZlbkxlbmd0aDogdmFsdWVzLmxlbmd0aAogICAgICB9KTsKICAgIGNvbnN0IHByZXBhcmVkUGFyYW1zID0gcHJlcGFyZVBhcmFtcyh7CiAgICAgIHBhcmFtcywKICAgICAgdmFsdWVzCiAgICB9KTsKICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVQYXJhbXMocHJlcGFyZWRQYXJhbXMpOwogICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gIjB4IjsKICAgIHJldHVybiBkYXRhOwogIH0KICBmdW5jdGlvbiBwcmVwYXJlUGFyYW1zKHsgcGFyYW1zLCB2YWx1ZXMgfSkgewogICAgY29uc3QgcHJlcGFyZWRQYXJhbXMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIHByZXBhcmVkUGFyYW1zLnB1c2gocHJlcGFyZVBhcmFtKHsgcGFyYW06IHBhcmFtc1tpXSwgdmFsdWU6IHZhbHVlc1tpXSB9KSk7CiAgICB9CiAgICByZXR1cm4gcHJlcGFyZWRQYXJhbXM7CiAgfQogIGZ1bmN0aW9uIHByZXBhcmVQYXJhbSh7IHBhcmFtLCB2YWx1ZSB9KSB7CiAgICBjb25zdCBhcnJheUNvbXBvbmVudHMgPSBnZXRBcnJheUNvbXBvbmVudHMocGFyYW0udHlwZSk7CiAgICBpZiAoYXJyYXlDb21wb25lbnRzKSB7CiAgICAgIGNvbnN0IFtsZW5ndGgsIHR5cGVdID0gYXJyYXlDb21wb25lbnRzOwogICAgICByZXR1cm4gZW5jb2RlQXJyYXkodmFsdWUsIHsgbGVuZ3RoLCBwYXJhbTogeyAuLi5wYXJhbSwgdHlwZSB9IH0pOwogICAgfQogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJ0dXBsZSIpIHsKICAgICAgcmV0dXJuIGVuY29kZVR1cGxlKHZhbHVlLCB7CiAgICAgICAgcGFyYW0KICAgICAgfSk7CiAgICB9CiAgICBpZiAocGFyYW0udHlwZSA9PT0gImFkZHJlc3MiKSB7CiAgICAgIHJldHVybiBlbmNvZGVBZGRyZXNzKHZhbHVlKTsKICAgIH0KICAgIGlmIChwYXJhbS50eXBlID09PSAiYm9vbCIpIHsKICAgICAgcmV0dXJuIGVuY29kZUJvb2wodmFsdWUpOwogICAgfQogICAgaWYgKHBhcmFtLnR5cGUuc3RhcnRzV2l0aCgidWludCIpIHx8IHBhcmFtLnR5cGUuc3RhcnRzV2l0aCgiaW50IikpIHsKICAgICAgY29uc3Qgc2lnbmVkID0gcGFyYW0udHlwZS5zdGFydHNXaXRoKCJpbnQiKTsKICAgICAgcmV0dXJuIGVuY29kZU51bWJlcih2YWx1ZSwgeyBzaWduZWQgfSk7CiAgICB9CiAgICBpZiAocGFyYW0udHlwZS5zdGFydHNXaXRoKCJieXRlcyIpKSB7CiAgICAgIHJldHVybiBlbmNvZGVCeXRlcyh2YWx1ZSwgeyBwYXJhbSB9KTsKICAgIH0KICAgIGlmIChwYXJhbS50eXBlID09PSAic3RyaW5nIikgewogICAgICByZXR1cm4gZW5jb2RlU3RyaW5nKHZhbHVlKTsKICAgIH0KICAgIHRocm93IG5ldyBJbnZhbGlkQWJpRW5jb2RpbmdUeXBlRXJyb3IocGFyYW0udHlwZSwgewogICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L2VuY29kZUFiaVBhcmFtZXRlcnMiCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlUGFyYW1zKHByZXBhcmVkUGFyYW1zKSB7CiAgICBsZXQgc3RhdGljU2l6ZSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXBhcmVkUGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IHsgZHluYW1pYywgZW5jb2RlZCB9ID0gcHJlcGFyZWRQYXJhbXNbaV07CiAgICAgIGlmIChkeW5hbWljKQogICAgICAgIHN0YXRpY1NpemUgKz0gMzI7CiAgICAgIGVsc2UKICAgICAgICBzdGF0aWNTaXplICs9IHNpemUoZW5jb2RlZCk7CiAgICB9CiAgICBjb25zdCBzdGF0aWNQYXJhbXMgPSBbXTsKICAgIGNvbnN0IGR5bmFtaWNQYXJhbXMgPSBbXTsKICAgIGxldCBkeW5hbWljU2l6ZSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXBhcmVkUGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IHsgZHluYW1pYywgZW5jb2RlZCB9ID0gcHJlcGFyZWRQYXJhbXNbaV07CiAgICAgIGlmIChkeW5hbWljKSB7CiAgICAgICAgc3RhdGljUGFyYW1zLnB1c2gobnVtYmVyVG9IZXgoc3RhdGljU2l6ZSArIGR5bmFtaWNTaXplLCB7IHNpemU6IDMyIH0pKTsKICAgICAgICBkeW5hbWljUGFyYW1zLnB1c2goZW5jb2RlZCk7CiAgICAgICAgZHluYW1pY1NpemUgKz0gc2l6ZShlbmNvZGVkKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGF0aWNQYXJhbXMucHVzaChlbmNvZGVkKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvbmNhdChbLi4uc3RhdGljUGFyYW1zLCAuLi5keW5hbWljUGFyYW1zXSk7CiAgfQogIGZ1bmN0aW9uIGVuY29kZUFkZHJlc3ModmFsdWUpIHsKICAgIGlmICghaXNBZGRyZXNzKHZhbHVlKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB2YWx1ZSB9KTsKICAgIHJldHVybiB7IGR5bmFtaWM6IGZhbHNlLCBlbmNvZGVkOiBwYWRIZXgodmFsdWUudG9Mb3dlckNhc2UoKSkgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlQXJyYXkodmFsdWUsIHsgbGVuZ3RoLCBwYXJhbSB9KSB7CiAgICBjb25zdCBkeW5hbWljID0gbGVuZ3RoID09PSBudWxsOwogICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBcnJheUVycm9yKHZhbHVlKTsKICAgIGlmICghZHluYW1pYyAmJiB2YWx1ZS5sZW5ndGggIT09IGxlbmd0aCkKICAgICAgdGhyb3cgbmV3IEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yKHsKICAgICAgICBleHBlY3RlZExlbmd0aDogbGVuZ3RoLAogICAgICAgIGdpdmVuTGVuZ3RoOiB2YWx1ZS5sZW5ndGgsCiAgICAgICAgdHlwZTogYCR7cGFyYW0udHlwZX1bJHtsZW5ndGh9XWAKICAgICAgfSk7CiAgICBsZXQgZHluYW1pY0NoaWxkID0gZmFsc2U7CiAgICBjb25zdCBwcmVwYXJlZFBhcmFtcyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBwcmVwYXJlZFBhcmFtID0gcHJlcGFyZVBhcmFtKHsgcGFyYW0sIHZhbHVlOiB2YWx1ZVtpXSB9KTsKICAgICAgaWYgKHByZXBhcmVkUGFyYW0uZHluYW1pYykKICAgICAgICBkeW5hbWljQ2hpbGQgPSB0cnVlOwogICAgICBwcmVwYXJlZFBhcmFtcy5wdXNoKHByZXBhcmVkUGFyYW0pOwogICAgfQogICAgaWYgKGR5bmFtaWMgfHwgZHluYW1pY0NoaWxkKSB7CiAgICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVQYXJhbXMocHJlcGFyZWRQYXJhbXMpOwogICAgICBpZiAoZHluYW1pYykgewogICAgICAgIGNvbnN0IGxlbmd0aDIgPSBudW1iZXJUb0hleChwcmVwYXJlZFBhcmFtcy5sZW5ndGgsIHsgc2l6ZTogMzIgfSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGR5bmFtaWM6IHRydWUsCiAgICAgICAgICBlbmNvZGVkOiBwcmVwYXJlZFBhcmFtcy5sZW5ndGggPiAwID8gY29uY2F0KFtsZW5ndGgyLCBkYXRhXSkgOiBsZW5ndGgyCiAgICAgICAgfTsKICAgICAgfQogICAgICBpZiAoZHluYW1pY0NoaWxkKQogICAgICAgIHJldHVybiB7IGR5bmFtaWM6IHRydWUsIGVuY29kZWQ6IGRhdGEgfTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIGR5bmFtaWM6IGZhbHNlLAogICAgICBlbmNvZGVkOiBjb25jYXQocHJlcGFyZWRQYXJhbXMubWFwKCh7IGVuY29kZWQgfSkgPT4gZW5jb2RlZCkpCiAgICB9OwogIH0KICBmdW5jdGlvbiBlbmNvZGVCeXRlcyh2YWx1ZSwgeyBwYXJhbSB9KSB7CiAgICBjb25zdCBbLCBwYXJhbVNpemVdID0gcGFyYW0udHlwZS5zcGxpdCgiYnl0ZXMiKTsKICAgIGNvbnN0IGJ5dGVzU2l6ZSA9IHNpemUodmFsdWUpOwogICAgaWYgKCFwYXJhbVNpemUpIHsKICAgICAgbGV0IHZhbHVlXyA9IHZhbHVlOwogICAgICBpZiAoYnl0ZXNTaXplICUgMzIgIT09IDApCiAgICAgICAgdmFsdWVfID0gcGFkSGV4KHZhbHVlXywgewogICAgICAgICAgZGlyOiAicmlnaHQiLAogICAgICAgICAgc2l6ZTogTWF0aC5jZWlsKCh2YWx1ZS5sZW5ndGggLSAyKSAvIDIgLyAzMikgKiAzMgogICAgICAgIH0pOwogICAgICByZXR1cm4gewogICAgICAgIGR5bmFtaWM6IHRydWUsCiAgICAgICAgZW5jb2RlZDogY29uY2F0KFtwYWRIZXgobnVtYmVyVG9IZXgoYnl0ZXNTaXplLCB7IHNpemU6IDMyIH0pKSwgdmFsdWVfXSkKICAgICAgfTsKICAgIH0KICAgIGlmIChieXRlc1NpemUgIT09IE51bWJlci5wYXJzZUludChwYXJhbVNpemUpKQogICAgICB0aHJvdyBuZXcgQWJpRW5jb2RpbmdCeXRlc1NpemVNaXNtYXRjaEVycm9yKHsKICAgICAgICBleHBlY3RlZFNpemU6IE51bWJlci5wYXJzZUludChwYXJhbVNpemUpLAogICAgICAgIHZhbHVlCiAgICAgIH0pOwogICAgcmV0dXJuIHsgZHluYW1pYzogZmFsc2UsIGVuY29kZWQ6IHBhZEhleCh2YWx1ZSwgeyBkaXI6ICJyaWdodCIgfSkgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlQm9vbCh2YWx1ZSkgewogICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gImJvb2xlYW4iKQogICAgICB0aHJvdyBuZXcgQmFzZUVycm9yMihgSW52YWxpZCBib29sZWFuIHZhbHVlOiAiJHt2YWx1ZX0iICh0eXBlOiAke3R5cGVvZiB2YWx1ZX0pLiBFeHBlY3RlZDogXGB0cnVlXGAgb3IgXGBmYWxzZVxgLmApOwogICAgcmV0dXJuIHsgZHluYW1pYzogZmFsc2UsIGVuY29kZWQ6IHBhZEhleChib29sVG9IZXgodmFsdWUpKSB9OwogIH0KICBmdW5jdGlvbiBlbmNvZGVOdW1iZXIodmFsdWUsIHsgc2lnbmVkIH0pIHsKICAgIHJldHVybiB7CiAgICAgIGR5bmFtaWM6IGZhbHNlLAogICAgICBlbmNvZGVkOiBudW1iZXJUb0hleCh2YWx1ZSwgewogICAgICAgIHNpemU6IDMyLAogICAgICAgIHNpZ25lZAogICAgICB9KQogICAgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlU3RyaW5nKHZhbHVlKSB7CiAgICBjb25zdCBoZXhWYWx1ZSA9IHN0cmluZ1RvSGV4KHZhbHVlKTsKICAgIGNvbnN0IHBhcnRzTGVuZ3RoID0gTWF0aC5jZWlsKHNpemUoaGV4VmFsdWUpIC8gMzIpOwogICAgY29uc3QgcGFydHMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHNMZW5ndGg7IGkrKykgewogICAgICBwYXJ0cy5wdXNoKHBhZEhleChzbGljZShoZXhWYWx1ZSwgaSAqIDMyLCAoaSArIDEpICogMzIpLCB7CiAgICAgICAgZGlyOiAicmlnaHQiCiAgICAgIH0pKTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIGR5bmFtaWM6IHRydWUsCiAgICAgIGVuY29kZWQ6IGNvbmNhdChbCiAgICAgICAgcGFkSGV4KG51bWJlclRvSGV4KHNpemUoaGV4VmFsdWUpLCB7IHNpemU6IDMyIH0pKSwKICAgICAgICAuLi5wYXJ0cwogICAgICBdKQogICAgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlVHVwbGUodmFsdWUsIHsgcGFyYW0gfSkgewogICAgbGV0IGR5bmFtaWMgPSBmYWxzZTsKICAgIGNvbnN0IHByZXBhcmVkUGFyYW1zID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtLmNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgcGFyYW1fID0gcGFyYW0uY29tcG9uZW50c1tpXTsKICAgICAgY29uc3QgaW5kZXgyID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBpIDogcGFyYW1fLm5hbWU7CiAgICAgIGNvbnN0IHByZXBhcmVkUGFyYW0gPSBwcmVwYXJlUGFyYW0oewogICAgICAgIHBhcmFtOiBwYXJhbV8sCiAgICAgICAgdmFsdWU6IHZhbHVlW2luZGV4Ml0KICAgICAgfSk7CiAgICAgIHByZXBhcmVkUGFyYW1zLnB1c2gocHJlcGFyZWRQYXJhbSk7CiAgICAgIGlmIChwcmVwYXJlZFBhcmFtLmR5bmFtaWMpCiAgICAgICAgZHluYW1pYyA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gewogICAgICBkeW5hbWljLAogICAgICBlbmNvZGVkOiBkeW5hbWljID8gZW5jb2RlUGFyYW1zKHByZXBhcmVkUGFyYW1zKSA6IGNvbmNhdChwcmVwYXJlZFBhcmFtcy5tYXAoKHsgZW5jb2RlZCB9KSA9PiBlbmNvZGVkKSkKICAgIH07CiAgfQogIGZ1bmN0aW9uIGdldEFycmF5Q29tcG9uZW50cyh0eXBlKSB7CiAgICBjb25zdCBtYXRjaGVzID0gdHlwZS5tYXRjaCgvXiguKilcWyhcZCspP1xdJC8pOwogICAgcmV0dXJuIG1hdGNoZXMgPyAoCiAgICAgIC8vIFJldHVybiBgbnVsbGAgaWYgdGhlIGFycmF5IGlzIGR5bmFtaWMuCiAgICAgIFttYXRjaGVzWzJdID8gTnVtYmVyKG1hdGNoZXNbMl0pIDogbnVsbCwgbWF0Y2hlc1sxXV0KICAgICkgOiB2b2lkIDA7CiAgfQogIHZhciBpbml0X2VuY29kZUFiaVBhcmFtZXRlcnMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlQWJpUGFyYW1ldGVycy5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfYWRkcmVzcygpOwogICAgICBpbml0X2Jhc2UoKTsKICAgICAgaW5pdF9pc0FkZHJlc3MoKTsKICAgICAgaW5pdF9jb25jYXQoKTsKICAgICAgaW5pdF9wYWQoKTsKICAgICAgaW5pdF9zaXplKCk7CiAgICAgIGluaXRfc2xpY2UoKTsKICAgICAgaW5pdF90b0hleCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9GdW5jdGlvblNlbGVjdG9yLmpzCiAgdmFyIHRvRnVuY3Rpb25TZWxlY3RvcjsKICB2YXIgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvRnVuY3Rpb25TZWxlY3Rvci5qcyIoKSB7CiAgICAgIGluaXRfc2xpY2UoKTsKICAgICAgaW5pdF90b1NpZ25hdHVyZUhhc2goKTsKICAgICAgdG9GdW5jdGlvblNlbGVjdG9yID0gKGZuKSA9PiBzbGljZSh0b1NpZ25hdHVyZUhhc2goZm4pLCAwLCA0KTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZ2V0QWJpSXRlbS5qcwogIGZ1bmN0aW9uIGdldEFiaUl0ZW0ocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFyZ3MgPSBbXSwgbmFtZSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGlzU2VsZWN0b3IgPSBpc0hleChuYW1lLCB7IHN0cmljdDogZmFsc2UgfSk7CiAgICBjb25zdCBhYmlJdGVtcyA9IGFiaTIuZmlsdGVyKChhYmlJdGVtKSA9PiB7CiAgICAgIGlmIChpc1NlbGVjdG9yKSB7CiAgICAgICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImZ1bmN0aW9uIikKICAgICAgICAgIHJldHVybiB0b0Z1bmN0aW9uU2VsZWN0b3IoYWJpSXRlbSkgPT09IG5hbWU7CiAgICAgICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImV2ZW50IikKICAgICAgICAgIHJldHVybiB0b0V2ZW50U2VsZWN0b3IoYWJpSXRlbSkgPT09IG5hbWU7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiAibmFtZSIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLm5hbWUgPT09IG5hbWU7CiAgICB9KTsKICAgIGlmIChhYmlJdGVtcy5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiB2b2lkIDA7CiAgICBpZiAoYWJpSXRlbXMubGVuZ3RoID09PSAxKQogICAgICByZXR1cm4gYWJpSXRlbXNbMF07CiAgICBsZXQgbWF0Y2hlZEFiaUl0ZW0gPSB2b2lkIDA7CiAgICBmb3IgKGNvbnN0IGFiaUl0ZW0gb2YgYWJpSXRlbXMpIHsKICAgICAgaWYgKCEoImlucHV0cyIgaW4gYWJpSXRlbSkpCiAgICAgICAgY29udGludWU7CiAgICAgIGlmICghYXJncyB8fCBhcmdzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIGlmICghYWJpSXRlbS5pbnB1dHMgfHwgYWJpSXRlbS5pbnB1dHMubGVuZ3RoID09PSAwKQogICAgICAgICAgcmV0dXJuIGFiaUl0ZW07CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKCFhYmlJdGVtLmlucHV0cykKICAgICAgICBjb250aW51ZTsKICAgICAgaWYgKGFiaUl0ZW0uaW5wdXRzLmxlbmd0aCA9PT0gMCkKICAgICAgICBjb250aW51ZTsKICAgICAgaWYgKGFiaUl0ZW0uaW5wdXRzLmxlbmd0aCAhPT0gYXJncy5sZW5ndGgpCiAgICAgICAgY29udGludWU7CiAgICAgIGNvbnN0IG1hdGNoZWQgPSBhcmdzLmV2ZXJ5KChhcmcsIGluZGV4MikgPT4gewogICAgICAgIGNvbnN0IGFiaVBhcmFtZXRlciA9ICJpbnB1dHMiIGluIGFiaUl0ZW0gJiYgYWJpSXRlbS5pbnB1dHNbaW5kZXgyXTsKICAgICAgICBpZiAoIWFiaVBhcmFtZXRlcikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gaXNBcmdPZlR5cGUoYXJnLCBhYmlQYXJhbWV0ZXIpOwogICAgICB9KTsKICAgICAgaWYgKG1hdGNoZWQpIHsKICAgICAgICBpZiAobWF0Y2hlZEFiaUl0ZW0gJiYgImlucHV0cyIgaW4gbWF0Y2hlZEFiaUl0ZW0gJiYgbWF0Y2hlZEFiaUl0ZW0uaW5wdXRzKSB7CiAgICAgICAgICBjb25zdCBhbWJpZ3VvdXNUeXBlcyA9IGdldEFtYmlndW91c1R5cGVzKGFiaUl0ZW0uaW5wdXRzLCBtYXRjaGVkQWJpSXRlbS5pbnB1dHMsIGFyZ3MpOwogICAgICAgICAgaWYgKGFtYmlndW91c1R5cGVzKQogICAgICAgICAgICB0aHJvdyBuZXcgQWJpSXRlbUFtYmlndWl0eUVycm9yKHsKICAgICAgICAgICAgICBhYmlJdGVtLAogICAgICAgICAgICAgIHR5cGU6IGFtYmlndW91c1R5cGVzWzBdCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICBhYmlJdGVtOiBtYXRjaGVkQWJpSXRlbSwKICAgICAgICAgICAgICB0eXBlOiBhbWJpZ3VvdXNUeXBlc1sxXQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgbWF0Y2hlZEFiaUl0ZW0gPSBhYmlJdGVtOwogICAgICB9CiAgICB9CiAgICBpZiAobWF0Y2hlZEFiaUl0ZW0pCiAgICAgIHJldHVybiBtYXRjaGVkQWJpSXRlbTsKICAgIHJldHVybiBhYmlJdGVtc1swXTsKICB9CiAgZnVuY3Rpb24gaXNBcmdPZlR5cGUoYXJnLCBhYmlQYXJhbWV0ZXIpIHsKICAgIGNvbnN0IGFyZ1R5cGUgPSB0eXBlb2YgYXJnOwogICAgY29uc3QgYWJpUGFyYW1ldGVyVHlwZSA9IGFiaVBhcmFtZXRlci50eXBlOwogICAgc3dpdGNoIChhYmlQYXJhbWV0ZXJUeXBlKSB7CiAgICAgIGNhc2UgImFkZHJlc3MiOgogICAgICAgIHJldHVybiBpc0FkZHJlc3MoYXJnLCB7IHN0cmljdDogZmFsc2UgfSk7CiAgICAgIGNhc2UgImJvb2wiOgogICAgICAgIHJldHVybiBhcmdUeXBlID09PSAiYm9vbGVhbiI7CiAgICAgIGNhc2UgImZ1bmN0aW9uIjoKICAgICAgICByZXR1cm4gYXJnVHlwZSA9PT0gInN0cmluZyI7CiAgICAgIGNhc2UgInN0cmluZyI6CiAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT09ICJzdHJpbmciOwogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaWYgKGFiaVBhcmFtZXRlclR5cGUgPT09ICJ0dXBsZSIgJiYgImNvbXBvbmVudHMiIGluIGFiaVBhcmFtZXRlcikKICAgICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGFiaVBhcmFtZXRlci5jb21wb25lbnRzKS5ldmVyeSgoY29tcG9uZW50LCBpbmRleDIpID0+IHsKICAgICAgICAgICAgcmV0dXJuIGlzQXJnT2ZUeXBlKE9iamVjdC52YWx1ZXMoYXJnKVtpbmRleDJdLCBjb21wb25lbnQpOwogICAgICAgICAgfSk7CiAgICAgICAgaWYgKC9edT9pbnQoOHwxNnwyNHwzMnw0MHw0OHw1Nnw2NHw3Mnw4MHw4OHw5NnwxMDR8MTEyfDEyMHwxMjh8MTM2fDE0NHwxNTJ8MTYwfDE2OHwxNzZ8MTg0fDE5MnwyMDB8MjA4fDIxNnwyMjR8MjMyfDI0MHwyNDh8MjU2KT8kLy50ZXN0KGFiaVBhcmFtZXRlclR5cGUpKQogICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT09ICJudW1iZXIiIHx8IGFyZ1R5cGUgPT09ICJiaWdpbnQiOwogICAgICAgIGlmICgvXmJ5dGVzKFsxLTldfDFbMC05XXwyWzAtOV18M1swLTJdKT8kLy50ZXN0KGFiaVBhcmFtZXRlclR5cGUpKQogICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT09ICJzdHJpbmciIHx8IGFyZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk7CiAgICAgICAgaWYgKC9bYS16XStbMS05XXswLDN9KFxbWzAtOV17MCx9XF0pKyQvLnRlc3QoYWJpUGFyYW1ldGVyVHlwZSkpIHsKICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFyZykgJiYgYXJnLmV2ZXJ5KCh4KSA9PiBpc0FyZ09mVHlwZSh4LCB7CiAgICAgICAgICAgIC4uLmFiaVBhcmFtZXRlciwKICAgICAgICAgICAgLy8gUG9wIG9mZiBgW11gIG9yIGBbTV1gIGZyb20gZW5kIG9mIHR5cGUKICAgICAgICAgICAgdHlwZTogYWJpUGFyYW1ldGVyVHlwZS5yZXBsYWNlKC8oXFtbMC05XXswLH1cXSkkLywgIiIpCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiBnZXRBbWJpZ3VvdXNUeXBlcyhzb3VyY2VQYXJhbWV0ZXJzLCB0YXJnZXRQYXJhbWV0ZXJzLCBhcmdzKSB7CiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlckluZGV4IGluIHNvdXJjZVBhcmFtZXRlcnMpIHsKICAgICAgY29uc3Qgc291cmNlUGFyYW1ldGVyID0gc291cmNlUGFyYW1ldGVyc1twYXJhbWV0ZXJJbmRleF07CiAgICAgIGNvbnN0IHRhcmdldFBhcmFtZXRlciA9IHRhcmdldFBhcmFtZXRlcnNbcGFyYW1ldGVySW5kZXhdOwogICAgICBpZiAoc291cmNlUGFyYW1ldGVyLnR5cGUgPT09ICJ0dXBsZSIgJiYgdGFyZ2V0UGFyYW1ldGVyLnR5cGUgPT09ICJ0dXBsZSIgJiYgImNvbXBvbmVudHMiIGluIHNvdXJjZVBhcmFtZXRlciAmJiAiY29tcG9uZW50cyIgaW4gdGFyZ2V0UGFyYW1ldGVyKQogICAgICAgIHJldHVybiBnZXRBbWJpZ3VvdXNUeXBlcyhzb3VyY2VQYXJhbWV0ZXIuY29tcG9uZW50cywgdGFyZ2V0UGFyYW1ldGVyLmNvbXBvbmVudHMsIGFyZ3NbcGFyYW1ldGVySW5kZXhdKTsKICAgICAgY29uc3QgdHlwZXMgPSBbc291cmNlUGFyYW1ldGVyLnR5cGUsIHRhcmdldFBhcmFtZXRlci50eXBlXTsKICAgICAgY29uc3QgYW1iaWd1b3VzID0gKCgpID0+IHsKICAgICAgICBpZiAodHlwZXMuaW5jbHVkZXMoImFkZHJlc3MiKSAmJiB0eXBlcy5pbmNsdWRlcygiYnl0ZXMyMCIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKHR5cGVzLmluY2x1ZGVzKCJhZGRyZXNzIikgJiYgdHlwZXMuaW5jbHVkZXMoInN0cmluZyIpKQogICAgICAgICAgcmV0dXJuIGlzQWRkcmVzcyhhcmdzW3BhcmFtZXRlckluZGV4XSwgeyBzdHJpY3Q6IGZhbHNlIH0pOwogICAgICAgIGlmICh0eXBlcy5pbmNsdWRlcygiYWRkcmVzcyIpICYmIHR5cGVzLmluY2x1ZGVzKCJieXRlcyIpKQogICAgICAgICAgcmV0dXJuIGlzQWRkcmVzcyhhcmdzW3BhcmFtZXRlckluZGV4XSwgeyBzdHJpY3Q6IGZhbHNlIH0pOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSkoKTsKICAgICAgaWYgKGFtYmlndW91cykKICAgICAgICByZXR1cm4gdHlwZXM7CiAgICB9CiAgICByZXR1cm47CiAgfQogIHZhciBpbml0X2dldEFiaUl0ZW0gPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZ2V0QWJpSXRlbS5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfaXNIZXgoKTsKICAgICAgaW5pdF9pc0FkZHJlc3MoKTsKICAgICAgaW5pdF90b0V2ZW50U2VsZWN0b3IoKTsKICAgICAgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9wYXJzZUFjY291bnQuanMKICBmdW5jdGlvbiBwYXJzZUFjY291bnQoYWNjb3VudCkgewogICAgaWYgKHR5cGVvZiBhY2NvdW50ID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIHsgYWRkcmVzczogYWNjb3VudCwgdHlwZTogImpzb24tcnBjIiB9OwogICAgcmV0dXJuIGFjY291bnQ7CiAgfQogIHZhciBpbml0X3BhcnNlQWNjb3VudCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjY291bnRzL3V0aWxzL3BhcnNlQWNjb3VudC5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL3ByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEuanMKICBmdW5jdGlvbiBwcmVwYXJlRW5jb2RlRnVuY3Rpb25EYXRhKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhcmdzLCBmdW5jdGlvbk5hbWUgfSA9IHBhcmFtZXRlcnM7CiAgICBsZXQgYWJpSXRlbSA9IGFiaTJbMF07CiAgICBpZiAoZnVuY3Rpb25OYW1lKSB7CiAgICAgIGNvbnN0IGl0ZW0gPSBnZXRBYmlJdGVtKHsKICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgYXJncywKICAgICAgICBuYW1lOiBmdW5jdGlvbk5hbWUKICAgICAgfSk7CiAgICAgIGlmICghaXRlbSkKICAgICAgICB0aHJvdyBuZXcgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yKGZ1bmN0aW9uTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGgyIH0pOwogICAgICBhYmlJdGVtID0gaXRlbTsKICAgIH0KICAgIGlmIChhYmlJdGVtLnR5cGUgIT09ICJmdW5jdGlvbiIpCiAgICAgIHRocm93IG5ldyBBYmlGdW5jdGlvbk5vdEZvdW5kRXJyb3Iodm9pZCAwLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDIgfSk7CiAgICByZXR1cm4gewogICAgICBhYmk6IFthYmlJdGVtXSwKICAgICAgZnVuY3Rpb25OYW1lOiB0b0Z1bmN0aW9uU2VsZWN0b3IoZm9ybWF0QWJpSXRlbTIoYWJpSXRlbSkpCiAgICB9OwogIH0KICB2YXIgZG9jc1BhdGgyOwogIHZhciBpbml0X3ByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvcHJlcGFyZUVuY29kZUZ1bmN0aW9uRGF0YS5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfdG9GdW5jdGlvblNlbGVjdG9yKCk7CiAgICAgIGluaXRfZm9ybWF0QWJpSXRlbTIoKTsKICAgICAgaW5pdF9nZXRBYmlJdGVtKCk7CiAgICAgIGRvY3NQYXRoMiA9ICIvZG9jcy9jb250cmFjdC9lbmNvZGVGdW5jdGlvbkRhdGEiOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVGdW5jdGlvbkRhdGEuanMKICBmdW5jdGlvbiBlbmNvZGVGdW5jdGlvbkRhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhcmdzIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgeyBhYmk6IGFiaTIsIGZ1bmN0aW9uTmFtZSB9ID0gKCgpID0+IHsKICAgICAgaWYgKHBhcmFtZXRlcnMuYWJpLmxlbmd0aCA9PT0gMSAmJiBwYXJhbWV0ZXJzLmZ1bmN0aW9uTmFtZT8uc3RhcnRzV2l0aCgiMHgiKSkKICAgICAgICByZXR1cm4gcGFyYW1ldGVyczsKICAgICAgcmV0dXJuIHByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEocGFyYW1ldGVycyk7CiAgICB9KSgpOwogICAgY29uc3QgYWJpSXRlbSA9IGFiaTJbMF07CiAgICBjb25zdCBzaWduYXR1cmUgPSBmdW5jdGlvbk5hbWU7CiAgICBjb25zdCBkYXRhID0gImlucHV0cyIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLmlucHV0cyA/IGVuY29kZUFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMsIGFyZ3MgPz8gW10pIDogdm9pZCAwOwogICAgcmV0dXJuIGNvbmNhdEhleChbc2lnbmF0dXJlLCBkYXRhID8/ICIweCJdKTsKICB9CiAgdmFyIGluaXRfZW5jb2RlRnVuY3Rpb25EYXRhID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2VuY29kZUZ1bmN0aW9uRGF0YS5qcyIoKSB7CiAgICAgIGluaXRfY29uY2F0KCk7CiAgICAgIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogICAgICBpbml0X3ByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMvc29saWRpdHkuanMKICB2YXIgcGFuaWNSZWFzb25zLCBzb2xpZGl0eUVycm9yLCBzb2xpZGl0eVBhbmljOwogIHZhciBpbml0X3NvbGlkaXR5ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL3NvbGlkaXR5LmpzIigpIHsKICAgICAgcGFuaWNSZWFzb25zID0gewogICAgICAgIDE6ICJBbiBgYXNzZXJ0YCBjb25kaXRpb24gZmFpbGVkLiIsCiAgICAgICAgMTc6ICJBcml0aG1ldGljIG9wZXJhdGlvbiByZXN1bHRlZCBpbiB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cuIiwKICAgICAgICAxODogIkRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvIChlLmcuIGA1IC8gMGAgb3IgYDIzICUgMGApLiIsCiAgICAgICAgMzM6ICJBdHRlbXB0ZWQgdG8gY29udmVydCB0byBhbiBpbnZhbGlkIHR5cGUuIiwKICAgICAgICAzNDogIkF0dGVtcHRlZCB0byBhY2Nlc3MgYSBzdG9yYWdlIGJ5dGUgYXJyYXkgdGhhdCBpcyBpbmNvcnJlY3RseSBlbmNvZGVkLiIsCiAgICAgICAgNDk6ICJQZXJmb3JtZWQgYC5wb3AoKWAgb24gYW4gZW1wdHkgYXJyYXkiLAogICAgICAgIDUwOiAiQXJyYXkgaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4iLAogICAgICAgIDY1OiAiQWxsb2NhdGVkIHRvbyBtdWNoIG1lbW9yeSBvciBjcmVhdGVkIGFuIGFycmF5IHdoaWNoIGlzIHRvbyBsYXJnZS4iLAogICAgICAgIDgxOiAiQXR0ZW1wdGVkIHRvIGNhbGwgYSB6ZXJvLWluaXRpYWxpemVkIHZhcmlhYmxlIG9mIGludGVybmFsIGZ1bmN0aW9uIHR5cGUuIgogICAgICB9OwogICAgICBzb2xpZGl0eUVycm9yID0gewogICAgICAgIGlucHV0czogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAibWVzc2FnZSIsCiAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICBuYW1lOiAiRXJyb3IiLAogICAgICAgIHR5cGU6ICJlcnJvciIKICAgICAgfTsKICAgICAgc29saWRpdHlQYW5pYyA9IHsKICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogInJlYXNvbiIsCiAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgbmFtZTogIlBhbmljIiwKICAgICAgICB0eXBlOiAiZXJyb3IiCiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2N1cnNvci5qcwogIHZhciBOZWdhdGl2ZU9mZnNldEVycm9yLCBQb3NpdGlvbk91dE9mQm91bmRzRXJyb3IsIFJlY3Vyc2l2ZVJlYWRMaW1pdEV4Y2VlZGVkRXJyb3I7CiAgdmFyIGluaXRfY3Vyc29yID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2N1cnNvci5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBOZWdhdGl2ZU9mZnNldEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IG9mZnNldCB9KSB7CiAgICAgICAgICBzdXBlcihgT2Zmc2V0IFxgJHtvZmZzZXR9XGAgY2Fubm90IGJlIG5lZ2F0aXZlLmAsIHsKICAgICAgICAgICAgbmFtZTogIk5lZ2F0aXZlT2Zmc2V0RXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFBvc2l0aW9uT3V0T2ZCb3VuZHNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBsZW5ndGgsIHBvc2l0aW9uIH0pIHsKICAgICAgICAgIHN1cGVyKGBQb3NpdGlvbiBcYCR7cG9zaXRpb259XGAgaXMgb3V0IG9mIGJvdW5kcyAoXGAwIDwgcG9zaXRpb24gPCAke2xlbmd0aH1cYCkuYCwgeyBuYW1lOiAiUG9zaXRpb25PdXRPZkJvdW5kc0Vycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFJlY3Vyc2l2ZVJlYWRMaW1pdEV4Y2VlZGVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY291bnQsIGxpbWl0IH0pIHsKICAgICAgICAgIHN1cGVyKGBSZWN1cnNpdmUgcmVhZCBsaW1pdCBvZiBcYCR7bGltaXR9XGAgZXhjZWVkZWQgKHJlY3Vyc2l2ZSByZWFkIGNvdW50OiBcYCR7Y291bnR9XGApLmAsIHsgbmFtZTogIlJlY3Vyc2l2ZVJlYWRMaW1pdEV4Y2VlZGVkRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9jdXJzb3IuanMKICBmdW5jdGlvbiBjcmVhdGVDdXJzb3IoYnl0ZXMyLCB7IHJlY3Vyc2l2ZVJlYWRMaW1pdCA9IDgxOTIgfSA9IHt9KSB7CiAgICBjb25zdCBjdXJzb3IgPSBPYmplY3QuY3JlYXRlKHN0YXRpY0N1cnNvcik7CiAgICBjdXJzb3IuYnl0ZXMgPSBieXRlczI7CiAgICBjdXJzb3IuZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYnl0ZXMyLmJ1ZmZlciwgYnl0ZXMyLmJ5dGVPZmZzZXQsIGJ5dGVzMi5ieXRlTGVuZ3RoKTsKICAgIGN1cnNvci5wb3NpdGlvblJlYWRDb3VudCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBjdXJzb3IucmVjdXJzaXZlUmVhZExpbWl0ID0gcmVjdXJzaXZlUmVhZExpbWl0OwogICAgcmV0dXJuIGN1cnNvcjsKICB9CiAgdmFyIHN0YXRpY0N1cnNvcjsKICB2YXIgaW5pdF9jdXJzb3IyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY3Vyc29yLmpzIigpIHsKICAgICAgaW5pdF9jdXJzb3IoKTsKICAgICAgc3RhdGljQ3Vyc29yID0gewogICAgICAgIGJ5dGVzOiBuZXcgVWludDhBcnJheSgpLAogICAgICAgIGRhdGFWaWV3OiBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDApKSwKICAgICAgICBwb3NpdGlvbjogMCwKICAgICAgICBwb3NpdGlvblJlYWRDb3VudDogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwKICAgICAgICByZWN1cnNpdmVSZWFkQ291bnQ6IDAsCiAgICAgICAgcmVjdXJzaXZlUmVhZExpbWl0OiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksCiAgICAgICAgYXNzZXJ0UmVhZExpbWl0KCkgewogICAgICAgICAgaWYgKHRoaXMucmVjdXJzaXZlUmVhZENvdW50ID49IHRoaXMucmVjdXJzaXZlUmVhZExpbWl0KQogICAgICAgICAgICB0aHJvdyBuZXcgUmVjdXJzaXZlUmVhZExpbWl0RXhjZWVkZWRFcnJvcih7CiAgICAgICAgICAgICAgY291bnQ6IHRoaXMucmVjdXJzaXZlUmVhZENvdW50ICsgMSwKICAgICAgICAgICAgICBsaW1pdDogdGhpcy5yZWN1cnNpdmVSZWFkTGltaXQKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBhc3NlcnRQb3NpdGlvbihwb3NpdGlvbikgewogICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+IHRoaXMuYnl0ZXMubGVuZ3RoIC0gMSkKICAgICAgICAgICAgdGhyb3cgbmV3IFBvc2l0aW9uT3V0T2ZCb3VuZHNFcnJvcih7CiAgICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmJ5dGVzLmxlbmd0aCwKICAgICAgICAgICAgICBwb3NpdGlvbgogICAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGRlY3JlbWVudFBvc2l0aW9uKG9mZnNldCkgewogICAgICAgICAgaWYgKG9mZnNldCA8IDApCiAgICAgICAgICAgIHRocm93IG5ldyBOZWdhdGl2ZU9mZnNldEVycm9yKHsgb2Zmc2V0IH0pOwogICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uIC0gb2Zmc2V0OwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbik7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgICAgfSwKICAgICAgICBnZXRSZWFkQ291bnQocG9zaXRpb24pIHsKICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uUmVhZENvdW50LmdldChwb3NpdGlvbiB8fCB0aGlzLnBvc2l0aW9uKSB8fCAwOwogICAgICAgIH0sCiAgICAgICAgaW5jcmVtZW50UG9zaXRpb24ob2Zmc2V0KSB7CiAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkKICAgICAgICAgICAgdGhyb3cgbmV3IE5lZ2F0aXZlT2Zmc2V0RXJyb3IoeyBvZmZzZXQgfSk7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb24gKyBvZmZzZXQ7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RCeXRlKHBvc2l0aW9uXykgewogICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbl8gPz8gdGhpcy5wb3NpdGlvbjsKICAgICAgICAgIHRoaXMuYXNzZXJ0UG9zaXRpb24ocG9zaXRpb24pOwogICAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZXNbcG9zaXRpb25dOwogICAgICAgIH0sCiAgICAgICAgaW5zcGVjdEJ5dGVzKGxlbmd0aCwgcG9zaXRpb25fKSB7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uXyA/PyB0aGlzLnBvc2l0aW9uOwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbiArIGxlbmd0aCAtIDEpOwogICAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZXMuc3ViYXJyYXkocG9zaXRpb24sIHBvc2l0aW9uICsgbGVuZ3RoKTsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RVaW50OChwb3NpdGlvbl8pIHsKICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gcG9zaXRpb25fID8/IHRoaXMucG9zaXRpb247CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICAgICAgIHJldHVybiB0aGlzLmJ5dGVzW3Bvc2l0aW9uXTsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RVaW50MTYocG9zaXRpb25fKSB7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uXyA/PyB0aGlzLnBvc2l0aW9uOwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbiArIDEpOwogICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0VWludDE2KHBvc2l0aW9uKTsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RVaW50MjQocG9zaXRpb25fKSB7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uXyA/PyB0aGlzLnBvc2l0aW9uOwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbiArIDIpOwogICAgICAgICAgcmV0dXJuICh0aGlzLmRhdGFWaWV3LmdldFVpbnQxNihwb3NpdGlvbikgPDwgOCkgKyB0aGlzLmRhdGFWaWV3LmdldFVpbnQ4KHBvc2l0aW9uICsgMik7CiAgICAgICAgfSwKICAgICAgICBpbnNwZWN0VWludDMyKHBvc2l0aW9uXykgewogICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbl8gPz8gdGhpcy5wb3NpdGlvbjsKICAgICAgICAgIHRoaXMuYXNzZXJ0UG9zaXRpb24ocG9zaXRpb24gKyAzKTsKICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldFVpbnQzMihwb3NpdGlvbik7CiAgICAgICAgfSwKICAgICAgICBwdXNoQnl0ZShieXRlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24pOwogICAgICAgICAgdGhpcy5ieXRlc1t0aGlzLnBvc2l0aW9uXSA9IGJ5dGU7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uKys7CiAgICAgICAgfSwKICAgICAgICBwdXNoQnl0ZXMoYnl0ZXMyKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24gKyBieXRlczIubGVuZ3RoIC0gMSk7CiAgICAgICAgICB0aGlzLmJ5dGVzLnNldChieXRlczIsIHRoaXMucG9zaXRpb24pOwogICAgICAgICAgdGhpcy5wb3NpdGlvbiArPSBieXRlczIubGVuZ3RoOwogICAgICAgIH0sCiAgICAgICAgcHVzaFVpbnQ4KHZhbHVlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24pOwogICAgICAgICAgdGhpcy5ieXRlc1t0aGlzLnBvc2l0aW9uXSA9IHZhbHVlOwogICAgICAgICAgdGhpcy5wb3NpdGlvbisrOwogICAgICAgIH0sCiAgICAgICAgcHVzaFVpbnQxNih2YWx1ZSkgewogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbih0aGlzLnBvc2l0aW9uICsgMSk7CiAgICAgICAgICB0aGlzLmRhdGFWaWV3LnNldFVpbnQxNih0aGlzLnBvc2l0aW9uLCB2YWx1ZSk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDI7CiAgICAgICAgfSwKICAgICAgICBwdXNoVWludDI0KHZhbHVlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24gKyAyKTsKICAgICAgICAgIHRoaXMuZGF0YVZpZXcuc2V0VWludDE2KHRoaXMucG9zaXRpb24sIHZhbHVlID4+IDgpOwogICAgICAgICAgdGhpcy5kYXRhVmlldy5zZXRVaW50OCh0aGlzLnBvc2l0aW9uICsgMiwgdmFsdWUgJiB+NDI5NDk2NzA0MCk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDM7CiAgICAgICAgfSwKICAgICAgICBwdXNoVWludDMyKHZhbHVlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24gKyAzKTsKICAgICAgICAgIHRoaXMuZGF0YVZpZXcuc2V0VWludDMyKHRoaXMucG9zaXRpb24sIHZhbHVlKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gKz0gNDsKICAgICAgICB9LAogICAgICAgIHJlYWRCeXRlKCkgewogICAgICAgICAgdGhpcy5hc3NlcnRSZWFkTGltaXQoKTsKICAgICAgICAgIHRoaXMuX3RvdWNoKCk7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zcGVjdEJ5dGUoKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24rKzsKICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9LAogICAgICAgIHJlYWRCeXRlcyhsZW5ndGgsIHNpemUzKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFJlYWRMaW1pdCgpOwogICAgICAgICAgdGhpcy5fdG91Y2goKTsKICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnNwZWN0Qnl0ZXMobGVuZ3RoKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gKz0gc2l6ZTMgPz8gbGVuZ3RoOwogICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0sCiAgICAgICAgcmVhZFVpbnQ4KCkgewogICAgICAgICAgdGhpcy5hc3NlcnRSZWFkTGltaXQoKTsKICAgICAgICAgIHRoaXMuX3RvdWNoKCk7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zcGVjdFVpbnQ4KCk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDE7CiAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfSwKICAgICAgICByZWFkVWludDE2KCkgewogICAgICAgICAgdGhpcy5hc3NlcnRSZWFkTGltaXQoKTsKICAgICAgICAgIHRoaXMuX3RvdWNoKCk7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zcGVjdFVpbnQxNigpOwogICAgICAgICAgdGhpcy5wb3NpdGlvbiArPSAyOwogICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0sCiAgICAgICAgcmVhZFVpbnQyNCgpIHsKICAgICAgICAgIHRoaXMuYXNzZXJ0UmVhZExpbWl0KCk7CiAgICAgICAgICB0aGlzLl90b3VjaCgpOwogICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmluc3BlY3RVaW50MjQoKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gKz0gMzsKICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9LAogICAgICAgIHJlYWRVaW50MzIoKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFJlYWRMaW1pdCgpOwogICAgICAgICAgdGhpcy5fdG91Y2goKTsKICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnNwZWN0VWludDMyKCk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDQ7CiAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfSwKICAgICAgICBnZXQgcmVtYWluaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZXMubGVuZ3RoIC0gdGhpcy5wb3NpdGlvbjsKICAgICAgICB9LAogICAgICAgIHNldFBvc2l0aW9uKHBvc2l0aW9uKSB7CiAgICAgICAgICBjb25zdCBvbGRQb3NpdGlvbiA9IHRoaXMucG9zaXRpb247CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICAgICAgIHJldHVybiAoKSA9PiB0aGlzLnBvc2l0aW9uID0gb2xkUG9zaXRpb247CiAgICAgICAgfSwKICAgICAgICBfdG91Y2goKSB7CiAgICAgICAgICBpZiAodGhpcy5yZWN1cnNpdmVSZWFkTGltaXQgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLmdldFJlYWRDb3VudCgpOwogICAgICAgICAgdGhpcy5wb3NpdGlvblJlYWRDb3VudC5zZXQodGhpcy5wb3NpdGlvbiwgY291bnQgKyAxKTsKICAgICAgICAgIGlmIChjb3VudCA+IDApCiAgICAgICAgICAgIHRoaXMucmVjdXJzaXZlUmVhZENvdW50Kys7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL2Zyb21CeXRlcy5qcwogIGZ1bmN0aW9uIGZyb21CeXRlcyhieXRlczIsIHRvT3JPcHRzKSB7CiAgICBjb25zdCBvcHRzID0gdHlwZW9mIHRvT3JPcHRzID09PSAic3RyaW5nIiA/IHsgdG86IHRvT3JPcHRzIH0gOiB0b09yT3B0czsKICAgIGNvbnN0IHRvID0gb3B0cy50bzsKICAgIGlmICh0byA9PT0gIm51bWJlciIpCiAgICAgIHJldHVybiBieXRlc1RvTnVtYmVyKGJ5dGVzMiwgb3B0cyk7CiAgICBpZiAodG8gPT09ICJiaWdpbnQiKQogICAgICByZXR1cm4gYnl0ZXNUb0JpZ0ludChieXRlczIsIG9wdHMpOwogICAgaWYgKHRvID09PSAiYm9vbGVhbiIpCiAgICAgIHJldHVybiBieXRlc1RvQm9vbChieXRlczIsIG9wdHMpOwogICAgaWYgKHRvID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIGJ5dGVzVG9TdHJpbmcoYnl0ZXMyLCBvcHRzKTsKICAgIHJldHVybiBieXRlc1RvSGV4KGJ5dGVzMiwgb3B0cyk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9CaWdJbnQoYnl0ZXMyLCBvcHRzID0ge30pIHsKICAgIGlmICh0eXBlb2Ygb3B0cy5zaXplICE9PSAidW5kZWZpbmVkIikKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgY29uc3QgaGV4ID0gYnl0ZXNUb0hleChieXRlczIsIG9wdHMpOwogICAgcmV0dXJuIGhleFRvQmlnSW50KGhleCwgb3B0cyk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9Cb29sKGJ5dGVzXywgb3B0cyA9IHt9KSB7CiAgICBsZXQgYnl0ZXMyID0gYnl0ZXNfOwogICAgaWYgKHR5cGVvZiBvcHRzLnNpemUgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGFzc2VydFNpemUoYnl0ZXMyLCB7IHNpemU6IG9wdHMuc2l6ZSB9KTsKICAgICAgYnl0ZXMyID0gdHJpbShieXRlczIpOwogICAgfQogICAgaWYgKGJ5dGVzMi5sZW5ndGggPiAxIHx8IGJ5dGVzMlswXSA+IDEpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQnl0ZXNCb29sZWFuRXJyb3IoYnl0ZXMyKTsKICAgIHJldHVybiBCb29sZWFuKGJ5dGVzMlswXSk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9OdW1iZXIoYnl0ZXMyLCBvcHRzID0ge30pIHsKICAgIGlmICh0eXBlb2Ygb3B0cy5zaXplICE9PSAidW5kZWZpbmVkIikKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgY29uc3QgaGV4ID0gYnl0ZXNUb0hleChieXRlczIsIG9wdHMpOwogICAgcmV0dXJuIGhleFRvTnVtYmVyKGhleCwgb3B0cyk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9TdHJpbmcoYnl0ZXNfLCBvcHRzID0ge30pIHsKICAgIGxldCBieXRlczIgPSBieXRlc187CiAgICBpZiAodHlwZW9mIG9wdHMuc2l6ZSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICBieXRlczIgPSB0cmltKGJ5dGVzMiwgeyBkaXI6ICJyaWdodCIgfSk7CiAgICB9CiAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGJ5dGVzMik7CiAgfQogIHZhciBpbml0X2Zyb21CeXRlcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL2Zyb21CeXRlcy5qcyIoKSB7CiAgICAgIGluaXRfZW5jb2RpbmcoKTsKICAgICAgaW5pdF90cmltKCk7CiAgICAgIGluaXRfZnJvbUhleCgpOwogICAgICBpbml0X3RvSGV4KCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZUFiaVBhcmFtZXRlcnMuanMKICBmdW5jdGlvbiBkZWNvZGVBYmlQYXJhbWV0ZXJzKHBhcmFtcywgZGF0YSkgewogICAgY29uc3QgYnl0ZXMyID0gdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciID8gaGV4VG9CeXRlcyhkYXRhKSA6IGRhdGE7CiAgICBjb25zdCBjdXJzb3IgPSBjcmVhdGVDdXJzb3IoYnl0ZXMyKTsKICAgIGlmIChzaXplKGJ5dGVzMikgPT09IDAgJiYgcGFyYW1zLmxlbmd0aCA+IDApCiAgICAgIHRocm93IG5ldyBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IoKTsKICAgIGlmIChzaXplKGRhdGEpICYmIHNpemUoZGF0YSkgPCAzMikKICAgICAgdGhyb3cgbmV3IEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yKHsKICAgICAgICBkYXRhOiB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgPyBkYXRhIDogYnl0ZXNUb0hleChkYXRhKSwKICAgICAgICBwYXJhbXMsCiAgICAgICAgc2l6ZTogc2l6ZShkYXRhKQogICAgICB9KTsKICAgIGxldCBjb25zdW1lZCA9IDA7CiAgICBjb25zdCB2YWx1ZXMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgKytpKSB7CiAgICAgIGNvbnN0IHBhcmFtID0gcGFyYW1zW2ldOwogICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oY29uc3VtZWQpOwogICAgICBjb25zdCBbZGF0YTIsIGNvbnN1bWVkX10gPSBkZWNvZGVQYXJhbWV0ZXIoY3Vyc29yLCBwYXJhbSwgewogICAgICAgIHN0YXRpY1Bvc2l0aW9uOiAwCiAgICAgIH0pOwogICAgICBjb25zdW1lZCArPSBjb25zdW1lZF87CiAgICAgIHZhbHVlcy5wdXNoKGRhdGEyKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZXM7CiAgfQogIGZ1bmN0aW9uIGRlY29kZVBhcmFtZXRlcihjdXJzb3IsIHBhcmFtLCB7IHN0YXRpY1Bvc2l0aW9uIH0pIHsKICAgIGNvbnN0IGFycmF5Q29tcG9uZW50cyA9IGdldEFycmF5Q29tcG9uZW50cyhwYXJhbS50eXBlKTsKICAgIGlmIChhcnJheUNvbXBvbmVudHMpIHsKICAgICAgY29uc3QgW2xlbmd0aCwgdHlwZV0gPSBhcnJheUNvbXBvbmVudHM7CiAgICAgIHJldHVybiBkZWNvZGVBcnJheShjdXJzb3IsIHsgLi4ucGFyYW0sIHR5cGUgfSwgeyBsZW5ndGgsIHN0YXRpY1Bvc2l0aW9uIH0pOwogICAgfQogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJ0dXBsZSIpCiAgICAgIHJldHVybiBkZWNvZGVUdXBsZShjdXJzb3IsIHBhcmFtLCB7IHN0YXRpY1Bvc2l0aW9uIH0pOwogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJhZGRyZXNzIikKICAgICAgcmV0dXJuIGRlY29kZUFkZHJlc3MoY3Vyc29yKTsKICAgIGlmIChwYXJhbS50eXBlID09PSAiYm9vbCIpCiAgICAgIHJldHVybiBkZWNvZGVCb29sKGN1cnNvcik7CiAgICBpZiAocGFyYW0udHlwZS5zdGFydHNXaXRoKCJieXRlcyIpKQogICAgICByZXR1cm4gZGVjb2RlQnl0ZXMoY3Vyc29yLCBwYXJhbSwgeyBzdGF0aWNQb3NpdGlvbiB9KTsKICAgIGlmIChwYXJhbS50eXBlLnN0YXJ0c1dpdGgoInVpbnQiKSB8fCBwYXJhbS50eXBlLnN0YXJ0c1dpdGgoImludCIpKQogICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKGN1cnNvciwgcGFyYW0pOwogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJzdHJpbmciKQogICAgICByZXR1cm4gZGVjb2RlU3RyaW5nKGN1cnNvciwgeyBzdGF0aWNQb3NpdGlvbiB9KTsKICAgIHRocm93IG5ldyBJbnZhbGlkQWJpRGVjb2RpbmdUeXBlRXJyb3IocGFyYW0udHlwZSwgewogICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L2RlY29kZUFiaVBhcmFtZXRlcnMiCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlQWRkcmVzcyhjdXJzb3IpIHsKICAgIGNvbnN0IHZhbHVlID0gY3Vyc29yLnJlYWRCeXRlcygzMik7CiAgICByZXR1cm4gW2NoZWNrc3VtQWRkcmVzcyhieXRlc1RvSGV4KHNsaWNlQnl0ZXModmFsdWUsIC0yMCkpKSwgMzJdOwogIH0KICBmdW5jdGlvbiBkZWNvZGVBcnJheShjdXJzb3IsIHBhcmFtLCB7IGxlbmd0aCwgc3RhdGljUG9zaXRpb24gfSkgewogICAgaWYgKCFsZW5ndGgpIHsKICAgICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKHNpemVPZk9mZnNldCkpOwogICAgICBjb25zdCBzdGFydCA9IHN0YXRpY1Bvc2l0aW9uICsgb2Zmc2V0OwogICAgICBjb25zdCBzdGFydE9mRGF0YSA9IHN0YXJ0ICsgc2l6ZU9mTGVuZ3RoOwogICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oc3RhcnQpOwogICAgICBjb25zdCBsZW5ndGgyID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKHNpemVPZkxlbmd0aCkpOwogICAgICBjb25zdCBkeW5hbWljQ2hpbGQgPSBoYXNEeW5hbWljQ2hpbGQocGFyYW0pOwogICAgICBsZXQgY29uc3VtZWQyID0gMDsKICAgICAgY29uc3QgdmFsdWUyID0gW107CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoMjsgKytpKSB7CiAgICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXJ0T2ZEYXRhICsgKGR5bmFtaWNDaGlsZCA/IGkgKiAzMiA6IGNvbnN1bWVkMikpOwogICAgICAgIGNvbnN0IFtkYXRhLCBjb25zdW1lZF9dID0gZGVjb2RlUGFyYW1ldGVyKGN1cnNvciwgcGFyYW0sIHsKICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uOiBzdGFydE9mRGF0YQogICAgICAgIH0pOwogICAgICAgIGNvbnN1bWVkMiArPSBjb25zdW1lZF87CiAgICAgICAgdmFsdWUyLnB1c2goZGF0YSk7CiAgICAgIH0KICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgICByZXR1cm4gW3ZhbHVlMiwgMzJdOwogICAgfQogICAgaWYgKGhhc0R5bmFtaWNDaGlsZChwYXJhbSkpIHsKICAgICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKHNpemVPZk9mZnNldCkpOwogICAgICBjb25zdCBzdGFydCA9IHN0YXRpY1Bvc2l0aW9uICsgb2Zmc2V0OwogICAgICBjb25zdCB2YWx1ZTIgPSBbXTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGFydCArIGkgKiAzMik7CiAgICAgICAgY29uc3QgW2RhdGFdID0gZGVjb2RlUGFyYW1ldGVyKGN1cnNvciwgcGFyYW0sIHsKICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uOiBzdGFydAogICAgICAgIH0pOwogICAgICAgIHZhbHVlMi5wdXNoKGRhdGEpOwogICAgICB9CiAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGF0aWNQb3NpdGlvbiArIDMyKTsKICAgICAgcmV0dXJuIFt2YWx1ZTIsIDMyXTsKICAgIH0KICAgIGxldCBjb25zdW1lZCA9IDA7CiAgICBjb25zdCB2YWx1ZSA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICBjb25zdCBbZGF0YSwgY29uc3VtZWRfXSA9IGRlY29kZVBhcmFtZXRlcihjdXJzb3IsIHBhcmFtLCB7CiAgICAgICAgc3RhdGljUG9zaXRpb246IHN0YXRpY1Bvc2l0aW9uICsgY29uc3VtZWQKICAgICAgfSk7CiAgICAgIGNvbnN1bWVkICs9IGNvbnN1bWVkXzsKICAgICAgdmFsdWUucHVzaChkYXRhKTsKICAgIH0KICAgIHJldHVybiBbdmFsdWUsIGNvbnN1bWVkXTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlQm9vbChjdXJzb3IpIHsKICAgIHJldHVybiBbYnl0ZXNUb0Jvb2woY3Vyc29yLnJlYWRCeXRlcygzMiksIHsgc2l6ZTogMzIgfSksIDMyXTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlQnl0ZXMoY3Vyc29yLCBwYXJhbSwgeyBzdGF0aWNQb3NpdGlvbiB9KSB7CiAgICBjb25zdCBbXywgc2l6ZTNdID0gcGFyYW0udHlwZS5zcGxpdCgiYnl0ZXMiKTsKICAgIGlmICghc2l6ZTMpIHsKICAgICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKDMyKSk7CiAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGF0aWNQb3NpdGlvbiArIG9mZnNldCk7CiAgICAgIGNvbnN0IGxlbmd0aCA9IGJ5dGVzVG9OdW1iZXIoY3Vyc29yLnJlYWRCeXRlcygzMikpOwogICAgICBpZiAobGVuZ3RoID09PSAwKSB7CiAgICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgICAgIHJldHVybiBbIjB4IiwgMzJdOwogICAgICB9CiAgICAgIGNvbnN0IGRhdGEgPSBjdXJzb3IucmVhZEJ5dGVzKGxlbmd0aCk7CiAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGF0aWNQb3NpdGlvbiArIDMyKTsKICAgICAgcmV0dXJuIFtieXRlc1RvSGV4KGRhdGEpLCAzMl07CiAgICB9CiAgICBjb25zdCB2YWx1ZSA9IGJ5dGVzVG9IZXgoY3Vyc29yLnJlYWRCeXRlcyhOdW1iZXIucGFyc2VJbnQoc2l6ZTMpLCAzMikpOwogICAgcmV0dXJuIFt2YWx1ZSwgMzJdOwogIH0KICBmdW5jdGlvbiBkZWNvZGVOdW1iZXIoY3Vyc29yLCBwYXJhbSkgewogICAgY29uc3Qgc2lnbmVkID0gcGFyYW0udHlwZS5zdGFydHNXaXRoKCJpbnQiKTsKICAgIGNvbnN0IHNpemUzID0gTnVtYmVyLnBhcnNlSW50KHBhcmFtLnR5cGUuc3BsaXQoImludCIpWzFdIHx8ICIyNTYiKTsKICAgIGNvbnN0IHZhbHVlID0gY3Vyc29yLnJlYWRCeXRlcygzMik7CiAgICByZXR1cm4gWwogICAgICBzaXplMyA+IDQ4ID8gYnl0ZXNUb0JpZ0ludCh2YWx1ZSwgeyBzaWduZWQgfSkgOiBieXRlc1RvTnVtYmVyKHZhbHVlLCB7IHNpZ25lZCB9KSwKICAgICAgMzIKICAgIF07CiAgfQogIGZ1bmN0aW9uIGRlY29kZVR1cGxlKGN1cnNvciwgcGFyYW0sIHsgc3RhdGljUG9zaXRpb24gfSkgewogICAgY29uc3QgaGFzVW5uYW1lZENoaWxkID0gcGFyYW0uY29tcG9uZW50cy5sZW5ndGggPT09IDAgfHwgcGFyYW0uY29tcG9uZW50cy5zb21lKCh7IG5hbWUgfSkgPT4gIW5hbWUpOwogICAgY29uc3QgdmFsdWUgPSBoYXNVbm5hbWVkQ2hpbGQgPyBbXSA6IHt9OwogICAgbGV0IGNvbnN1bWVkID0gMDsKICAgIGlmIChoYXNEeW5hbWljQ2hpbGQocGFyYW0pKSB7CiAgICAgIGNvbnN0IG9mZnNldCA9IGJ5dGVzVG9OdW1iZXIoY3Vyc29yLnJlYWRCeXRlcyhzaXplT2ZPZmZzZXQpKTsKICAgICAgY29uc3Qgc3RhcnQgPSBzdGF0aWNQb3NpdGlvbiArIG9mZnNldDsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbS5jb21wb25lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gcGFyYW0uY29tcG9uZW50c1tpXTsKICAgICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oc3RhcnQgKyBjb25zdW1lZCk7CiAgICAgICAgY29uc3QgW2RhdGEsIGNvbnN1bWVkX10gPSBkZWNvZGVQYXJhbWV0ZXIoY3Vyc29yLCBjb21wb25lbnQsIHsKICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uOiBzdGFydAogICAgICAgIH0pOwogICAgICAgIGNvbnN1bWVkICs9IGNvbnN1bWVkXzsKICAgICAgICB2YWx1ZVtoYXNVbm5hbWVkQ2hpbGQgPyBpIDogY29tcG9uZW50Py5uYW1lXSA9IGRhdGE7CiAgICAgIH0KICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgICByZXR1cm4gW3ZhbHVlLCAzMl07CiAgICB9CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtLmNvbXBvbmVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgY29uc3QgY29tcG9uZW50ID0gcGFyYW0uY29tcG9uZW50c1tpXTsKICAgICAgY29uc3QgW2RhdGEsIGNvbnN1bWVkX10gPSBkZWNvZGVQYXJhbWV0ZXIoY3Vyc29yLCBjb21wb25lbnQsIHsKICAgICAgICBzdGF0aWNQb3NpdGlvbgogICAgICB9KTsKICAgICAgdmFsdWVbaGFzVW5uYW1lZENoaWxkID8gaSA6IGNvbXBvbmVudD8ubmFtZV0gPSBkYXRhOwogICAgICBjb25zdW1lZCArPSBjb25zdW1lZF87CiAgICB9CiAgICByZXR1cm4gW3ZhbHVlLCBjb25zdW1lZF07CiAgfQogIGZ1bmN0aW9uIGRlY29kZVN0cmluZyhjdXJzb3IsIHsgc3RhdGljUG9zaXRpb24gfSkgewogICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKDMyKSk7CiAgICBjb25zdCBzdGFydCA9IHN0YXRpY1Bvc2l0aW9uICsgb2Zmc2V0OwogICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXJ0KTsKICAgIGNvbnN0IGxlbmd0aCA9IGJ5dGVzVG9OdW1iZXIoY3Vyc29yLnJlYWRCeXRlcygzMikpOwogICAgaWYgKGxlbmd0aCA9PT0gMCkgewogICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oc3RhdGljUG9zaXRpb24gKyAzMik7CiAgICAgIHJldHVybiBbIiIsIDMyXTsKICAgIH0KICAgIGNvbnN0IGRhdGEgPSBjdXJzb3IucmVhZEJ5dGVzKGxlbmd0aCwgMzIpOwogICAgY29uc3QgdmFsdWUgPSBieXRlc1RvU3RyaW5nKHRyaW0oZGF0YSkpOwogICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgcmV0dXJuIFt2YWx1ZSwgMzJdOwogIH0KICBmdW5jdGlvbiBoYXNEeW5hbWljQ2hpbGQocGFyYW0pIHsKICAgIGNvbnN0IHsgdHlwZSB9ID0gcGFyYW07CiAgICBpZiAodHlwZSA9PT0gInN0cmluZyIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUgPT09ICJieXRlcyIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUuZW5kc1dpdGgoIltdIikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUgPT09ICJ0dXBsZSIpCiAgICAgIHJldHVybiBwYXJhbS5jb21wb25lbnRzPy5zb21lKGhhc0R5bmFtaWNDaGlsZCk7CiAgICBjb25zdCBhcnJheUNvbXBvbmVudHMgPSBnZXRBcnJheUNvbXBvbmVudHMocGFyYW0udHlwZSk7CiAgICBpZiAoYXJyYXlDb21wb25lbnRzICYmIGhhc0R5bmFtaWNDaGlsZCh7IC4uLnBhcmFtLCB0eXBlOiBhcnJheUNvbXBvbmVudHNbMV0gfSkpCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KICB2YXIgc2l6ZU9mTGVuZ3RoLCBzaXplT2ZPZmZzZXQ7CiAgdmFyIGluaXRfZGVjb2RlQWJpUGFyYW1ldGVycyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9kZWNvZGVBYmlQYXJhbWV0ZXJzLmpzIigpIHsKICAgICAgaW5pdF9hYmkoKTsKICAgICAgaW5pdF9nZXRBZGRyZXNzKCk7CiAgICAgIGluaXRfY3Vyc29yMigpOwogICAgICBpbml0X3NpemUoKTsKICAgICAgaW5pdF9zbGljZSgpOwogICAgICBpbml0X3RyaW0oKTsKICAgICAgaW5pdF9mcm9tQnl0ZXMoKTsKICAgICAgaW5pdF90b0J5dGVzKCk7CiAgICAgIGluaXRfdG9IZXgoKTsKICAgICAgaW5pdF9lbmNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgICAgIHNpemVPZkxlbmd0aCA9IDMyOwogICAgICBzaXplT2ZPZmZzZXQgPSAzMjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZGVjb2RlRXJyb3JSZXN1bHQuanMKICBmdW5jdGlvbiBkZWNvZGVFcnJvclJlc3VsdChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgZGF0YSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNsaWNlKGRhdGEsIDAsIDQpOwogICAgaWYgKHNpZ25hdHVyZSA9PT0gIjB4IikKICAgICAgdGhyb3cgbmV3IEFiaURlY29kaW5nWmVyb0RhdGFFcnJvcigpOwogICAgY29uc3QgYWJpXyA9IFsuLi5hYmkyIHx8IFtdLCBzb2xpZGl0eUVycm9yLCBzb2xpZGl0eVBhbmljXTsKICAgIGNvbnN0IGFiaUl0ZW0gPSBhYmlfLmZpbmQoKHgpID0+IHgudHlwZSA9PT0gImVycm9yIiAmJiBzaWduYXR1cmUgPT09IHRvRnVuY3Rpb25TZWxlY3Rvcihmb3JtYXRBYmlJdGVtMih4KSkpOwogICAgaWYgKCFhYmlJdGVtKQogICAgICB0aHJvdyBuZXcgQWJpRXJyb3JTaWduYXR1cmVOb3RGb3VuZEVycm9yKHNpZ25hdHVyZSwgewogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3QvZGVjb2RlRXJyb3JSZXN1bHQiCiAgICAgIH0pOwogICAgcmV0dXJuIHsKICAgICAgYWJpSXRlbSwKICAgICAgYXJnczogImlucHV0cyIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLmlucHV0cyAmJiBhYmlJdGVtLmlucHV0cy5sZW5ndGggPiAwID8gZGVjb2RlQWJpUGFyYW1ldGVycyhhYmlJdGVtLmlucHV0cywgc2xpY2UoZGF0YSwgNCkpIDogdm9pZCAwLAogICAgICBlcnJvck5hbWU6IGFiaUl0ZW0ubmFtZQogICAgfTsKICB9CiAgdmFyIGluaXRfZGVjb2RlRXJyb3JSZXN1bHQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZGVjb2RlRXJyb3JSZXN1bHQuanMiKCkgewogICAgICBpbml0X3NvbGlkaXR5KCk7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfc2xpY2UoKTsKICAgICAgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IoKTsKICAgICAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgICAgIGluaXRfZm9ybWF0QWJpSXRlbTIoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zdHJpbmdpZnkuanMKICB2YXIgc3RyaW5naWZ5OwogIHZhciBpbml0X3N0cmluZ2lmeSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3N0cmluZ2lmeS5qcyIoKSB7CiAgICAgIHN0cmluZ2lmeSA9ICh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKSA9PiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgKGtleSwgdmFsdWVfKSA9PiB7CiAgICAgICAgY29uc3QgdmFsdWUyID0gdHlwZW9mIHZhbHVlXyA9PT0gImJpZ2ludCIgPyB2YWx1ZV8udG9TdHJpbmcoKSA6IHZhbHVlXzsKICAgICAgICByZXR1cm4gdHlwZW9mIHJlcGxhY2VyID09PSAiZnVuY3Rpb24iID8gcmVwbGFjZXIoa2V5LCB2YWx1ZTIpIDogdmFsdWUyOwogICAgICB9LCBzcGFjZSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2Zvcm1hdEFiaUl0ZW1XaXRoQXJncy5qcwogIGZ1bmN0aW9uIGZvcm1hdEFiaUl0ZW1XaXRoQXJncyh7IGFiaUl0ZW0sIGFyZ3MsIGluY2x1ZGVGdW5jdGlvbk5hbWUgPSB0cnVlLCBpbmNsdWRlTmFtZSA9IGZhbHNlIH0pIHsKICAgIGlmICghKCJuYW1lIiBpbiBhYmlJdGVtKSkKICAgICAgcmV0dXJuOwogICAgaWYgKCEoImlucHV0cyIgaW4gYWJpSXRlbSkpCiAgICAgIHJldHVybjsKICAgIGlmICghYWJpSXRlbS5pbnB1dHMpCiAgICAgIHJldHVybjsKICAgIHJldHVybiBgJHtpbmNsdWRlRnVuY3Rpb25OYW1lID8gYWJpSXRlbS5uYW1lIDogIiJ9KCR7YWJpSXRlbS5pbnB1dHMubWFwKChpbnB1dCwgaSkgPT4gYCR7aW5jbHVkZU5hbWUgJiYgaW5wdXQubmFtZSA/IGAke2lucHV0Lm5hbWV9OiBgIDogIiJ9JHt0eXBlb2YgYXJnc1tpXSA9PT0gIm9iamVjdCIgPyBzdHJpbmdpZnkoYXJnc1tpXSkgOiBhcmdzW2ldfWApLmpvaW4oIiwgIil9KWA7CiAgfQogIHZhciBpbml0X2Zvcm1hdEFiaUl0ZW1XaXRoQXJncyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9mb3JtYXRBYmlJdGVtV2l0aEFyZ3MuanMiKCkgewogICAgICBpbml0X3N0cmluZ2lmeSgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy91bml0LmpzCiAgdmFyIGV0aGVyVW5pdHMsIGd3ZWlVbml0cywgd2VpVW5pdHM7CiAgdmFyIGluaXRfdW5pdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy91bml0LmpzIigpIHsKICAgICAgZXRoZXJVbml0cyA9IHsKICAgICAgICBnd2VpOiA5LAogICAgICAgIHdlaTogMTgKICAgICAgfTsKICAgICAgZ3dlaVVuaXRzID0gewogICAgICAgIGV0aGVyOiAtOSwKICAgICAgICB3ZWk6IDkKICAgICAgfTsKICAgICAgd2VpVW5pdHMgPSB7CiAgICAgICAgZXRoZXI6IC0xOCwKICAgICAgICBnd2VpOiAtOQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3VuaXQvZm9ybWF0VW5pdHMuanMKICBmdW5jdGlvbiBmb3JtYXRVbml0cyh2YWx1ZSwgZGVjaW1hbHMpIHsKICAgIGxldCBkaXNwbGF5ID0gdmFsdWUudG9TdHJpbmcoKTsKICAgIGNvbnN0IG5lZ2F0aXZlID0gZGlzcGxheS5zdGFydHNXaXRoKCItIik7CiAgICBpZiAobmVnYXRpdmUpCiAgICAgIGRpc3BsYXkgPSBkaXNwbGF5LnNsaWNlKDEpOwogICAgZGlzcGxheSA9IGRpc3BsYXkucGFkU3RhcnQoZGVjaW1hbHMsICIwIik7CiAgICBsZXQgW2ludGVnZXIsIGZyYWN0aW9uXSA9IFsKICAgICAgZGlzcGxheS5zbGljZSgwLCBkaXNwbGF5Lmxlbmd0aCAtIGRlY2ltYWxzKSwKICAgICAgZGlzcGxheS5zbGljZShkaXNwbGF5Lmxlbmd0aCAtIGRlY2ltYWxzKQogICAgXTsKICAgIGZyYWN0aW9uID0gZnJhY3Rpb24ucmVwbGFjZSgvKDArKSQvLCAiIik7CiAgICByZXR1cm4gYCR7bmVnYXRpdmUgPyAiLSIgOiAiIn0ke2ludGVnZXIgfHwgIjAifSR7ZnJhY3Rpb24gPyBgLiR7ZnJhY3Rpb259YCA6ICIifWA7CiAgfQogIHZhciBpbml0X2Zvcm1hdFVuaXRzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9mb3JtYXRVbml0cy5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9mb3JtYXRFdGhlci5qcwogIGZ1bmN0aW9uIGZvcm1hdEV0aGVyKHdlaSwgdW5pdCA9ICJ3ZWkiKSB7CiAgICByZXR1cm4gZm9ybWF0VW5pdHMod2VpLCBldGhlclVuaXRzW3VuaXRdKTsKICB9CiAgdmFyIGluaXRfZm9ybWF0RXRoZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L2Zvcm1hdEV0aGVyLmpzIigpIHsKICAgICAgaW5pdF91bml0KCk7CiAgICAgIGluaXRfZm9ybWF0VW5pdHMoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L2Zvcm1hdEd3ZWkuanMKICBmdW5jdGlvbiBmb3JtYXRHd2VpKHdlaSwgdW5pdCA9ICJ3ZWkiKSB7CiAgICByZXR1cm4gZm9ybWF0VW5pdHMod2VpLCBnd2VpVW5pdHNbdW5pdF0pOwogIH0KICB2YXIgaW5pdF9mb3JtYXRHd2VpID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9mb3JtYXRHd2VpLmpzIigpIHsKICAgICAgaW5pdF91bml0KCk7CiAgICAgIGluaXRfZm9ybWF0VW5pdHMoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvc3RhdGVPdmVycmlkZS5qcwogIGZ1bmN0aW9uIHByZXR0eVN0YXRlTWFwcGluZyhzdGF0ZU1hcHBpbmcpIHsKICAgIHJldHVybiBzdGF0ZU1hcHBpbmcucmVkdWNlKChwcmV0dHksIHsgc2xvdCwgdmFsdWUgfSkgPT4gewogICAgICByZXR1cm4gYCR7cHJldHR5fSAgICAgICAgJHtzbG90fTogJHt2YWx1ZX0KYDsKICAgIH0sICIiKTsKICB9CiAgZnVuY3Rpb24gcHJldHR5U3RhdGVPdmVycmlkZShzdGF0ZU92ZXJyaWRlKSB7CiAgICByZXR1cm4gc3RhdGVPdmVycmlkZS5yZWR1Y2UoKHByZXR0eSwgeyBhZGRyZXNzLCAuLi5zdGF0ZSB9KSA9PiB7CiAgICAgIGxldCB2YWwgPSBgJHtwcmV0dHl9ICAgICR7YWRkcmVzc306CmA7CiAgICAgIGlmIChzdGF0ZS5ub25jZSkKICAgICAgICB2YWwgKz0gYCAgICAgIG5vbmNlOiAke3N0YXRlLm5vbmNlfQpgOwogICAgICBpZiAoc3RhdGUuYmFsYW5jZSkKICAgICAgICB2YWwgKz0gYCAgICAgIGJhbGFuY2U6ICR7c3RhdGUuYmFsYW5jZX0KYDsKICAgICAgaWYgKHN0YXRlLmNvZGUpCiAgICAgICAgdmFsICs9IGAgICAgICBjb2RlOiAke3N0YXRlLmNvZGV9CmA7CiAgICAgIGlmIChzdGF0ZS5zdGF0ZSkgewogICAgICAgIHZhbCArPSAiICAgICAgc3RhdGU6XG4iOwogICAgICAgIHZhbCArPSBwcmV0dHlTdGF0ZU1hcHBpbmcoc3RhdGUuc3RhdGUpOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS5zdGF0ZURpZmYpIHsKICAgICAgICB2YWwgKz0gIiAgICAgIHN0YXRlRGlmZjpcbiI7CiAgICAgICAgdmFsICs9IHByZXR0eVN0YXRlTWFwcGluZyhzdGF0ZS5zdGF0ZURpZmYpOwogICAgICB9CiAgICAgIHJldHVybiB2YWw7CiAgICB9LCAiICBTdGF0ZSBPdmVycmlkZTpcbiIpLnNsaWNlKDAsIC0xKTsKICB9CiAgdmFyIEFjY291bnRTdGF0ZUNvbmZsaWN0RXJyb3IsIFN0YXRlQXNzaWdubWVudENvbmZsaWN0RXJyb3I7CiAgdmFyIGluaXRfc3RhdGVPdmVycmlkZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9zdGF0ZU92ZXJyaWRlLmpzIigpIHsKICAgICAgaW5pdF9iYXNlKCk7CiAgICAgIEFjY291bnRTdGF0ZUNvbmZsaWN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYWRkcmVzcyB9KSB7CiAgICAgICAgICBzdXBlcihgU3RhdGUgZm9yIGFjY291bnQgIiR7YWRkcmVzc30iIGlzIHNldCBtdWx0aXBsZSB0aW1lcy5gLCB7CiAgICAgICAgICAgIG5hbWU6ICJBY2NvdW50U3RhdGVDb25mbGljdEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCJzdGF0ZSBhbmQgc3RhdGVEaWZmIGFyZSBzZXQgb24gdGhlIHNhbWUgYWNjb3VudC4iLCB7CiAgICAgICAgICAgIG5hbWU6ICJTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy90cmFuc2FjdGlvbi5qcwogIGZ1bmN0aW9uIHByZXR0eVByaW50KGFyZ3MpIHsKICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhhcmdzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gewogICAgICBpZiAodmFsdWUgPT09IHZvaWQgMCB8fCB2YWx1ZSA9PT0gZmFsc2UpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBba2V5LCB2YWx1ZV07CiAgICB9KS5maWx0ZXIoQm9vbGVhbik7CiAgICBjb25zdCBtYXhMZW5ndGggPSBlbnRyaWVzLnJlZHVjZSgoYWNjLCBba2V5XSkgPT4gTWF0aC5tYXgoYWNjLCBrZXkubGVuZ3RoKSwgMCk7CiAgICByZXR1cm4gZW50cmllcy5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCAgJHtgJHtrZXl9OmAucGFkRW5kKG1heExlbmd0aCArIDEpfSAgJHt2YWx1ZX1gKS5qb2luKCJcbiIpOwogIH0KICB2YXIgRmVlQ29uZmxpY3RFcnJvciwgSW52YWxpZExlZ2FjeVZFcnJvciwgSW52YWxpZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uRXJyb3IsIEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlRXJyb3IsIEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25FcnJvciwgSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IsIFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IsIFRyYW5zYWN0aW9uTm90Rm91bmRFcnJvciwgVHJhbnNhY3Rpb25SZWNlaXB0Tm90Rm91bmRFcnJvciwgV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvcjsKICB2YXIgaW5pdF90cmFuc2FjdGlvbiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy90cmFuc2FjdGlvbi5qcyIoKSB7CiAgICAgIGluaXRfZm9ybWF0RXRoZXIoKTsKICAgICAgaW5pdF9mb3JtYXRHd2VpKCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBGZWVDb25mbGljdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgIkNhbm5vdCBzcGVjaWZ5IGJvdGggYSBgZ2FzUHJpY2VgIGFuZCBhIGBtYXhGZWVQZXJHYXNgL2BtYXhQcmlvcml0eUZlZVBlckdhc2AuIiwKICAgICAgICAgICAgIlVzZSBgbWF4RmVlUGVyR2FzYC9gbWF4UHJpb3JpdHlGZWVQZXJHYXNgIGZvciBFSVAtMTU1OSBjb21wYXRpYmxlIG5ldHdvcmtzLCBhbmQgYGdhc1ByaWNlYCBmb3Igb3RoZXJzLiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgeyBuYW1lOiAiRmVlQ29uZmxpY3RFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkTGVnYWN5VkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHYgfSkgewogICAgICAgICAgc3VwZXIoYEludmFsaWQgXGB2XGAgdmFsdWUgIiR7dn0iLiBFeHBlY3RlZCAyNyBvciAyOC5gLCB7CiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkTGVnYWN5VkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkU2VyaWFsaXphYmxlVHJhbnNhY3Rpb25FcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyB0cmFuc2FjdGlvbiB9KSB7CiAgICAgICAgICBzdXBlcigiQ2Fubm90IGluZmVyIGEgdHJhbnNhY3Rpb24gdHlwZSBmcm9tIHByb3ZpZGVkIHRyYW5zYWN0aW9uLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgIlByb3ZpZGVkIFRyYW5zYWN0aW9uOiIsCiAgICAgICAgICAgICAgInsiLAogICAgICAgICAgICAgIHByZXR0eVByaW50KHRyYW5zYWN0aW9uKSwKICAgICAgICAgICAgICAifSIsCiAgICAgICAgICAgICAgIiIsCiAgICAgICAgICAgICAgIlRvIGluZmVyIHRoZSB0eXBlLCBlaXRoZXIgcHJvdmlkZToiLAogICAgICAgICAgICAgICItIGEgYHR5cGVgIHRvIHRoZSBUcmFuc2FjdGlvbiwgb3IiLAogICAgICAgICAgICAgICItIGFuIEVJUC0xNTU5IFRyYW5zYWN0aW9uIHdpdGggYG1heEZlZVBlckdhc2AsIG9yIiwKICAgICAgICAgICAgICAiLSBhbiBFSVAtMjkzMCBUcmFuc2FjdGlvbiB3aXRoIGBnYXNQcmljZWAgJiBgYWNjZXNzTGlzdGAsIG9yIiwKICAgICAgICAgICAgICAiLSBhbiBFSVAtNDg0NCBUcmFuc2FjdGlvbiB3aXRoIGBibG9ic2AsIGBibG9iVmVyc2lvbmVkSGFzaGVzYCwgYHNpZGVjYXJzYCwgb3IiLAogICAgICAgICAgICAgICItIGFuIEVJUC03NzAyIFRyYW5zYWN0aW9uIHdpdGggYGF1dGhvcml6YXRpb25MaXN0YCwgb3IiLAogICAgICAgICAgICAgICItIGEgTGVnYWN5IFRyYW5zYWN0aW9uIHdpdGggYGdhc1ByaWNlYCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbmFtZTogIkludmFsaWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uVHlwZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHNlcmlhbGl6ZWRUeXBlIH0pIHsKICAgICAgICAgIHN1cGVyKGBTZXJpYWxpemVkIHRyYW5zYWN0aW9uIHR5cGUgIiR7c2VyaWFsaXplZFR5cGV9IiBpcyBpbnZhbGlkLmAsIHsKICAgICAgICAgICAgbmFtZTogIkludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNlcmlhbGl6ZWRUeXBlIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuc2VyaWFsaXplZFR5cGUgPSBzZXJpYWxpemVkVHlwZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25FcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBhdHRyaWJ1dGVzLCBzZXJpYWxpemVkVHJhbnNhY3Rpb24sIHR5cGUgfSkgewogICAgICAgICAgY29uc3QgbWlzc2luZyA9IE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB0eXBlb2YgdmFsdWUgPT09ICJ1bmRlZmluZWQiID8ga2V5IDogdm9pZCAwKS5maWx0ZXIoQm9vbGVhbik7CiAgICAgICAgICBzdXBlcihgSW52YWxpZCBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIG9mIHR5cGUgIiR7dHlwZX0iIHdhcyBwcm92aWRlZC5gLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBTZXJpYWxpemVkIFRyYW5zYWN0aW9uOiAiJHtzZXJpYWxpemVkVHJhbnNhY3Rpb259ImAsCiAgICAgICAgICAgICAgbWlzc2luZy5sZW5ndGggPiAwID8gYE1pc3NpbmcgQXR0cmlidXRlczogJHttaXNzaW5nLmpvaW4oIiwgIil9YCA6ICIiCiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNlcmlhbGl6ZWRUcmFuc2FjdGlvbiIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInR5cGUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5zZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBzZXJpYWxpemVkVHJhbnNhY3Rpb247CiAgICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgc3RvcmFnZUtleSB9KSB7CiAgICAgICAgICBzdXBlcihgU2l6ZSBmb3Igc3RvcmFnZSBrZXkgIiR7c3RvcmFnZUtleX0iIGlzIGludmFsaWQuIEV4cGVjdGVkIDMyIGJ5dGVzLiBHb3QgJHtNYXRoLmZsb29yKChzdG9yYWdlS2V5Lmxlbmd0aCAtIDIpIC8gMil9IGJ5dGVzLmAsIHsgbmFtZTogIkludmFsaWRTdG9yYWdlS2V5U2l6ZUVycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlLCB7IGFjY291bnQsIGRvY3NQYXRoOiBkb2NzUGF0aDksIGNoYWluLCBkYXRhLCBnYXMsIGdhc1ByaWNlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBub25jZSwgdG8sIHZhbHVlIH0pIHsKICAgICAgICAgIGNvbnN0IHByZXR0eUFyZ3MgPSBwcmV0dHlQcmludCh7CiAgICAgICAgICAgIGNoYWluOiBjaGFpbiAmJiBgJHtjaGFpbj8ubmFtZX0gKGlkOiAke2NoYWluPy5pZH0pYCwKICAgICAgICAgICAgZnJvbTogYWNjb3VudD8uYWRkcmVzcywKICAgICAgICAgICAgdG8sCiAgICAgICAgICAgIHZhbHVlOiB0eXBlb2YgdmFsdWUgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEV0aGVyKHZhbHVlKX0gJHtjaGFpbj8ubmF0aXZlQ3VycmVuY3k/LnN5bWJvbCB8fCAiRVRIIn1gLAogICAgICAgICAgICBkYXRhLAogICAgICAgICAgICBnYXMsCiAgICAgICAgICAgIGdhc1ByaWNlOiB0eXBlb2YgZ2FzUHJpY2UgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkoZ2FzUHJpY2UpfSBnd2VpYCwKICAgICAgICAgICAgbWF4RmVlUGVyR2FzOiB0eXBlb2YgbWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9IGd3ZWlgLAogICAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogdHlwZW9mIG1heFByaW9yaXR5RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKG1heFByaW9yaXR5RmVlUGVyR2FzKX0gZ3dlaWAsCiAgICAgICAgICAgIG5vbmNlCiAgICAgICAgICB9KTsKICAgICAgICAgIHN1cGVyKGNhdXNlLnNob3J0TWVzc2FnZSwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgLi4uY2F1c2UubWV0YU1lc3NhZ2VzID8gWy4uLmNhdXNlLm1ldGFNZXNzYWdlcywgIiAiXSA6IFtdLAogICAgICAgICAgICAgICJSZXF1ZXN0IEFyZ3VtZW50czoiLAogICAgICAgICAgICAgIHByZXR0eUFyZ3MKICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgICAgIG5hbWU6ICJUcmFuc2FjdGlvbkV4ZWN1dGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNhdXNlIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuY2F1c2UgPSBjYXVzZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFRyYW5zYWN0aW9uTm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyLCBibG9ja1RhZywgaGFzaDogaGFzaDMsIGluZGV4OiBpbmRleDIgfSkgewogICAgICAgICAgbGV0IGlkZW50aWZpZXIgPSAiVHJhbnNhY3Rpb24iOwogICAgICAgICAgaWYgKGJsb2NrVGFnICYmIGluZGV4MiAhPT0gdm9pZCAwKQogICAgICAgICAgICBpZGVudGlmaWVyID0gYFRyYW5zYWN0aW9uIGF0IGJsb2NrIHRpbWUgIiR7YmxvY2tUYWd9IiBhdCBpbmRleCAiJHtpbmRleDJ9ImA7CiAgICAgICAgICBpZiAoYmxvY2tIYXNoICYmIGluZGV4MiAhPT0gdm9pZCAwKQogICAgICAgICAgICBpZGVudGlmaWVyID0gYFRyYW5zYWN0aW9uIGF0IGJsb2NrIGhhc2ggIiR7YmxvY2tIYXNofSIgYXQgaW5kZXggIiR7aW5kZXgyfSJgOwogICAgICAgICAgaWYgKGJsb2NrTnVtYmVyICYmIGluZGV4MiAhPT0gdm9pZCAwKQogICAgICAgICAgICBpZGVudGlmaWVyID0gYFRyYW5zYWN0aW9uIGF0IGJsb2NrIG51bWJlciAiJHtibG9ja051bWJlcn0iIGF0IGluZGV4ICIke2luZGV4Mn0iYDsKICAgICAgICAgIGlmIChoYXNoMykKICAgICAgICAgICAgaWRlbnRpZmllciA9IGBUcmFuc2FjdGlvbiB3aXRoIGhhc2ggIiR7aGFzaDN9ImA7CiAgICAgICAgICBzdXBlcihgJHtpZGVudGlmaWVyfSBjb3VsZCBub3QgYmUgZm91bmQuYCwgewogICAgICAgICAgICBuYW1lOiAiVHJhbnNhY3Rpb25Ob3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBUcmFuc2FjdGlvblJlY2VpcHROb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGhhc2g6IGhhc2gzIH0pIHsKICAgICAgICAgIHN1cGVyKGBUcmFuc2FjdGlvbiByZWNlaXB0IHdpdGggaGFzaCAiJHtoYXNoM30iIGNvdWxkIG5vdCBiZSBmb3VuZC4gVGhlIFRyYW5zYWN0aW9uIG1heSBub3QgYmUgcHJvY2Vzc2VkIG9uIGEgYmxvY2sgeWV0LmAsIHsKICAgICAgICAgICAgbmFtZTogIlRyYW5zYWN0aW9uUmVjZWlwdE5vdEZvdW5kRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFdhaXRGb3JUcmFuc2FjdGlvblJlY2VpcHRUaW1lb3V0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgaGFzaDogaGFzaDMgfSkgewogICAgICAgICAgc3VwZXIoYFRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciB0cmFuc2FjdGlvbiB3aXRoIGhhc2ggIiR7aGFzaDN9IiB0byBiZSBjb25maXJtZWQuYCwgeyBuYW1lOiAiV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy91dGlscy5qcwogIHZhciBnZXRDb250cmFjdEFkZHJlc3MsIGdldFVybDsKICB2YXIgaW5pdF91dGlsczMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvdXRpbHMuanMiKCkgewogICAgICBnZXRDb250cmFjdEFkZHJlc3MgPSAoYWRkcmVzcykgPT4gYWRkcmVzczsKICAgICAgZ2V0VXJsID0gKHVybCkgPT4gdXJsOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9jb250cmFjdC5qcwogIHZhciBDYWxsRXhlY3V0aW9uRXJyb3IsIENvbnRyYWN0RnVuY3Rpb25FeGVjdXRpb25FcnJvciwgQ29udHJhY3RGdW5jdGlvblJldmVydGVkRXJyb3IsIENvbnRyYWN0RnVuY3Rpb25aZXJvRGF0YUVycm9yLCBDb3VudGVyZmFjdHVhbERlcGxveW1lbnRGYWlsZWRFcnJvciwgUmF3Q29udHJhY3RFcnJvcjsKICB2YXIgaW5pdF9jb250cmFjdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9jb250cmFjdC5qcyIoKSB7CiAgICAgIGluaXRfcGFyc2VBY2NvdW50KCk7CiAgICAgIGluaXRfc29saWRpdHkoKTsKICAgICAgaW5pdF9kZWNvZGVFcnJvclJlc3VsdCgpOwogICAgICBpbml0X2Zvcm1hdEFiaUl0ZW0yKCk7CiAgICAgIGluaXRfZm9ybWF0QWJpSXRlbVdpdGhBcmdzKCk7CiAgICAgIGluaXRfZ2V0QWJpSXRlbSgpOwogICAgICBpbml0X2Zvcm1hdEV0aGVyKCk7CiAgICAgIGluaXRfZm9ybWF0R3dlaSgpOwogICAgICBpbml0X2FiaSgpOwogICAgICBpbml0X2Jhc2UoKTsKICAgICAgaW5pdF9zdGF0ZU92ZXJyaWRlKCk7CiAgICAgIGluaXRfdHJhbnNhY3Rpb24oKTsKICAgICAgaW5pdF91dGlsczMoKTsKICAgICAgQ2FsbEV4ZWN1dGlvbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBhY2NvdW50OiBhY2NvdW50XywgZG9jc1BhdGg6IGRvY3NQYXRoOSwgY2hhaW4sIGRhdGEsIGdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIG5vbmNlLCB0bywgdmFsdWUsIHN0YXRlT3ZlcnJpZGUgfSkgewogICAgICAgICAgY29uc3QgYWNjb3VudCA9IGFjY291bnRfID8gcGFyc2VBY2NvdW50KGFjY291bnRfKSA6IHZvaWQgMDsKICAgICAgICAgIGxldCBwcmV0dHlBcmdzID0gcHJldHR5UHJpbnQoewogICAgICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgICAgICB0bywKICAgICAgICAgICAgdmFsdWU6IHR5cGVvZiB2YWx1ZSAhPT0gInVuZGVmaW5lZCIgJiYgYCR7Zm9ybWF0RXRoZXIodmFsdWUpfSAke2NoYWluPy5uYXRpdmVDdXJyZW5jeT8uc3ltYm9sIHx8ICJFVEgifWAsCiAgICAgICAgICAgIGRhdGEsCiAgICAgICAgICAgIGdhcywKICAgICAgICAgICAgZ2FzUHJpY2U6IHR5cGVvZiBnYXNQcmljZSAhPT0gInVuZGVmaW5lZCIgJiYgYCR7Zm9ybWF0R3dlaShnYXNQcmljZSl9IGd3ZWlgLAogICAgICAgICAgICBtYXhGZWVQZXJHYXM6IHR5cGVvZiBtYXhGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkobWF4RmVlUGVyR2FzKX0gZ3dlaWAsCiAgICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiB0eXBlb2YgbWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkobWF4UHJpb3JpdHlGZWVQZXJHYXMpfSBnd2VpYCwKICAgICAgICAgICAgbm9uY2UKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHsKICAgICAgICAgICAgcHJldHR5QXJncyArPSBgCiR7cHJldHR5U3RhdGVPdmVycmlkZShzdGF0ZU92ZXJyaWRlKX1gOwogICAgICAgICAgfQogICAgICAgICAgc3VwZXIoY2F1c2Uuc2hvcnRNZXNzYWdlLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAuLi5jYXVzZS5tZXRhTWVzc2FnZXMgPyBbLi4uY2F1c2UubWV0YU1lc3NhZ2VzLCAiICJdIDogW10sCiAgICAgICAgICAgICAgIlJhdyBDYWxsIEFyZ3VtZW50czoiLAogICAgICAgICAgICAgIHByZXR0eUFyZ3MKICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgICAgIG5hbWU6ICJDYWxsRXhlY3V0aW9uRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY2F1c2UiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5jYXVzZSA9IGNhdXNlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29udHJhY3RGdW5jdGlvbkV4ZWN1dGlvbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBhYmk6IGFiaTIsIGFyZ3MsIGNvbnRyYWN0QWRkcmVzcywgZG9jc1BhdGg6IGRvY3NQYXRoOSwgZnVuY3Rpb25OYW1lLCBzZW5kZXIgfSkgewogICAgICAgICAgY29uc3QgYWJpSXRlbSA9IGdldEFiaUl0ZW0oeyBhYmk6IGFiaTIsIGFyZ3MsIG5hbWU6IGZ1bmN0aW9uTmFtZSB9KTsKICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEFyZ3MgPSBhYmlJdGVtID8gZm9ybWF0QWJpSXRlbVdpdGhBcmdzKHsKICAgICAgICAgICAgYWJpSXRlbSwKICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgaW5jbHVkZUZ1bmN0aW9uTmFtZTogZmFsc2UsCiAgICAgICAgICAgIGluY2x1ZGVOYW1lOiBmYWxzZQogICAgICAgICAgfSkgOiB2b2lkIDA7CiAgICAgICAgICBjb25zdCBmdW5jdGlvbldpdGhQYXJhbXMgPSBhYmlJdGVtID8gZm9ybWF0QWJpSXRlbTIoYWJpSXRlbSwgeyBpbmNsdWRlTmFtZTogdHJ1ZSB9KSA6IHZvaWQgMDsKICAgICAgICAgIGNvbnN0IHByZXR0eUFyZ3MgPSBwcmV0dHlQcmludCh7CiAgICAgICAgICAgIGFkZHJlc3M6IGNvbnRyYWN0QWRkcmVzcyAmJiBnZXRDb250cmFjdEFkZHJlc3MoY29udHJhY3RBZGRyZXNzKSwKICAgICAgICAgICAgZnVuY3Rpb246IGZ1bmN0aW9uV2l0aFBhcmFtcywKICAgICAgICAgICAgYXJnczogZm9ybWF0dGVkQXJncyAmJiBmb3JtYXR0ZWRBcmdzICE9PSAiKCkiICYmIGAke1suLi5BcnJheShmdW5jdGlvbk5hbWU/Lmxlbmd0aCA/PyAwKS5rZXlzKCldLm1hcCgoKSA9PiAiICIpLmpvaW4oIiIpfSR7Zm9ybWF0dGVkQXJnc31gLAogICAgICAgICAgICBzZW5kZXIKICAgICAgICAgIH0pOwogICAgICAgICAgc3VwZXIoY2F1c2Uuc2hvcnRNZXNzYWdlIHx8IGBBbiB1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyB0aGUgY29udHJhY3QgZnVuY3Rpb24gIiR7ZnVuY3Rpb25OYW1lfSIuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgLi4uY2F1c2UubWV0YU1lc3NhZ2VzID8gWy4uLmNhdXNlLm1ldGFNZXNzYWdlcywgIiAiXSA6IFtdLAogICAgICAgICAgICAgIHByZXR0eUFyZ3MgJiYgIkNvbnRyYWN0IENhbGw6IiwKICAgICAgICAgICAgICBwcmV0dHlBcmdzCiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiQ29udHJhY3RGdW5jdGlvbkV4ZWN1dGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFiaSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFyZ3MiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJjYXVzZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNvbnRyYWN0QWRkcmVzcyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImZvcm1hdHRlZEFyZ3MiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJmdW5jdGlvbk5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kZXIiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5hYmkgPSBhYmkyOwogICAgICAgICAgdGhpcy5hcmdzID0gYXJnczsKICAgICAgICAgIHRoaXMuY2F1c2UgPSBjYXVzZTsKICAgICAgICAgIHRoaXMuY29udHJhY3RBZGRyZXNzID0gY29udHJhY3RBZGRyZXNzOwogICAgICAgICAgdGhpcy5mdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7CiAgICAgICAgICB0aGlzLnNlbmRlciA9IHNlbmRlcjsKICAgICAgICB9CiAgICAgIH07CiAgICAgIENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGFiaTogYWJpMiwgZGF0YSwgZnVuY3Rpb25OYW1lLCBtZXNzYWdlIH0pIHsKICAgICAgICAgIGxldCBjYXVzZTsKICAgICAgICAgIGxldCBkZWNvZGVkRGF0YSA9IHZvaWQgMDsKICAgICAgICAgIGxldCBtZXRhTWVzc2FnZXM7CiAgICAgICAgICBsZXQgcmVhc29uOwogICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YSAhPT0gIjB4IikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGRlY29kZWREYXRhID0gZGVjb2RlRXJyb3JSZXN1bHQoeyBhYmk6IGFiaTIsIGRhdGEgfSk7CiAgICAgICAgICAgICAgY29uc3QgeyBhYmlJdGVtLCBlcnJvck5hbWUsIGFyZ3M6IGVycm9yQXJncyB9ID0gZGVjb2RlZERhdGE7CiAgICAgICAgICAgICAgaWYgKGVycm9yTmFtZSA9PT0gIkVycm9yIikgewogICAgICAgICAgICAgICAgcmVhc29uID0gZXJyb3JBcmdzWzBdOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3JOYW1lID09PSAiUGFuaWMiKSB7CiAgICAgICAgICAgICAgICBjb25zdCBbZmlyc3RBcmddID0gZXJyb3JBcmdzOwogICAgICAgICAgICAgICAgcmVhc29uID0gcGFuaWNSZWFzb25zW2ZpcnN0QXJnXTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29uc3QgZXJyb3JXaXRoUGFyYW1zID0gYWJpSXRlbSA/IGZvcm1hdEFiaUl0ZW0yKGFiaUl0ZW0sIHsgaW5jbHVkZU5hbWU6IHRydWUgfSkgOiB2b2lkIDA7CiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRBcmdzID0gYWJpSXRlbSAmJiBlcnJvckFyZ3MgPyBmb3JtYXRBYmlJdGVtV2l0aEFyZ3MoewogICAgICAgICAgICAgICAgICBhYmlJdGVtLAogICAgICAgICAgICAgICAgICBhcmdzOiBlcnJvckFyZ3MsCiAgICAgICAgICAgICAgICAgIGluY2x1ZGVGdW5jdGlvbk5hbWU6IGZhbHNlLAogICAgICAgICAgICAgICAgICBpbmNsdWRlTmFtZTogZmFsc2UKICAgICAgICAgICAgICAgIH0pIDogdm9pZCAwOwogICAgICAgICAgICAgICAgbWV0YU1lc3NhZ2VzID0gWwogICAgICAgICAgICAgICAgICBlcnJvcldpdGhQYXJhbXMgPyBgRXJyb3I6ICR7ZXJyb3JXaXRoUGFyYW1zfWAgOiAiIiwKICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkQXJncyAmJiBmb3JtYXR0ZWRBcmdzICE9PSAiKCkiID8gYCAgICAgICAke1suLi5BcnJheShlcnJvck5hbWU/Lmxlbmd0aCA/PyAwKS5rZXlzKCldLm1hcCgoKSA9PiAiICIpLmpvaW4oIiIpfSR7Zm9ybWF0dGVkQXJnc31gIDogIiIKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICBjYXVzZSA9IGVycjsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlKQogICAgICAgICAgICByZWFzb24gPSBtZXNzYWdlOwogICAgICAgICAgbGV0IHNpZ25hdHVyZTsKICAgICAgICAgIGlmIChjYXVzZSBpbnN0YW5jZW9mIEFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvcikgewogICAgICAgICAgICBzaWduYXR1cmUgPSBjYXVzZS5zaWduYXR1cmU7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlcyA9IFsKICAgICAgICAgICAgICBgVW5hYmxlIHRvIGRlY29kZSBzaWduYXR1cmUgIiR7c2lnbmF0dXJlfSIgYXMgaXQgd2FzIG5vdCBmb3VuZCBvbiB0aGUgcHJvdmlkZWQgQUJJLmAsCiAgICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXJyb3IgZXhpc3RzIG9uIGl0LiIsCiAgICAgICAgICAgICAgYFlvdSBjYW4gbG9vayB1cCB0aGUgZGVjb2RlZCBzaWduYXR1cmUgaGVyZTogaHR0cHM6Ly9vcGVuY2hhaW4ueHl6L3NpZ25hdHVyZXM/cXVlcnk9JHtzaWduYXR1cmV9LmAKICAgICAgICAgICAgXTsKICAgICAgICAgIH0KICAgICAgICAgIHN1cGVyKHJlYXNvbiAmJiByZWFzb24gIT09ICJleGVjdXRpb24gcmV2ZXJ0ZWQiIHx8IHNpZ25hdHVyZSA/IFsKICAgICAgICAgICAgYFRoZSBjb250cmFjdCBmdW5jdGlvbiAiJHtmdW5jdGlvbk5hbWV9IiByZXZlcnRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgJHtzaWduYXR1cmUgPyAic2lnbmF0dXJlIiA6ICJyZWFzb24ifTpgLAogICAgICAgICAgICByZWFzb24gfHwgc2lnbmF0dXJlCiAgICAgICAgICBdLmpvaW4oIlxuIikgOiBgVGhlIGNvbnRyYWN0IGZ1bmN0aW9uICIke2Z1bmN0aW9uTmFtZX0iIHJldmVydGVkLmAsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIG1ldGFNZXNzYWdlcywKICAgICAgICAgICAgbmFtZTogIkNvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRhdGEiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJyZWFzb24iLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaWduYXR1cmUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5kYXRhID0gZGVjb2RlZERhdGE7CiAgICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvbjsKICAgICAgICAgIHRoaXMuc2lnbmF0dXJlID0gc2lnbmF0dXJlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29udHJhY3RGdW5jdGlvblplcm9EYXRhRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZnVuY3Rpb25OYW1lIH0pIHsKICAgICAgICAgIHN1cGVyKGBUaGUgY29udHJhY3QgZnVuY3Rpb24gIiR7ZnVuY3Rpb25OYW1lfSIgcmV0dXJuZWQgbm8gZGF0YSAoIjB4IikuYCwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAiVGhpcyBjb3VsZCBiZSBkdWUgdG8gYW55IG9mIHRoZSBmb2xsb3dpbmc6IiwKICAgICAgICAgICAgICBgICAtIFRoZSBjb250cmFjdCBkb2VzIG5vdCBoYXZlIHRoZSBmdW5jdGlvbiAiJHtmdW5jdGlvbk5hbWV9IixgLAogICAgICAgICAgICAgICIgIC0gVGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBjb250cmFjdCBmdW5jdGlvbiBtYXkgYmUgaW52YWxpZCwgb3IiLAogICAgICAgICAgICAgICIgIC0gVGhlIGFkZHJlc3MgaXMgbm90IGEgY29udHJhY3QuIgogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQ29udHJhY3RGdW5jdGlvblplcm9EYXRhRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIENvdW50ZXJmYWN0dWFsRGVwbG95bWVudEZhaWxlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGZhY3RvcnkgfSkgewogICAgICAgICAgc3VwZXIoYERlcGxveW1lbnQgZm9yIGNvdW50ZXJmYWN0dWFsIGNvbnRyYWN0IGNhbGwgZmFpbGVkJHtmYWN0b3J5ID8gYCBmb3IgZmFjdG9yeSAiJHtmYWN0b3J5fSIuYCA6ICIifWAsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgIlBsZWFzZSBlbnN1cmU6IiwKICAgICAgICAgICAgICAiLSBUaGUgYGZhY3RvcnlgIGlzIGEgdmFsaWQgY29udHJhY3QgZGVwbG95bWVudCBmYWN0b3J5IChpZS4gQ3JlYXRlMiBGYWN0b3J5LCBFUkMtNDMzNyBGYWN0b3J5LCBldGMpLiIsCiAgICAgICAgICAgICAgIi0gVGhlIGBmYWN0b3J5RGF0YWAgaXMgYSB2YWxpZCBlbmNvZGVkIGZ1bmN0aW9uIGNhbGwgZm9yIGNvbnRyYWN0IGRlcGxveW1lbnQgZnVuY3Rpb24gb24gdGhlIGZhY3RvcnkuIgogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQ291bnRlcmZhY3R1YWxEZXBsb3ltZW50RmFpbGVkRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFJhd0NvbnRyYWN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZGF0YSwgbWVzc2FnZSB9KSB7CiAgICAgICAgICBzdXBlcihtZXNzYWdlIHx8ICIiLCB7IG5hbWU6ICJSYXdDb250cmFjdEVycm9yIiB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29kZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IDMKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkYXRhIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9yZXF1ZXN0LmpzCiAgdmFyIEh0dHBSZXF1ZXN0RXJyb3IsIFdlYlNvY2tldFJlcXVlc3RFcnJvciwgUnBjUmVxdWVzdEVycm9yLCBTb2NrZXRDbG9zZWRFcnJvciwgVGltZW91dEVycm9yOwogIHZhciBpbml0X3JlcXVlc3QgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvcmVxdWVzdC5qcyIoKSB7CiAgICAgIGluaXRfc3RyaW5naWZ5KCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X3V0aWxzMygpOwogICAgICBIdHRwUmVxdWVzdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGJvZHksIGNhdXNlLCBkZXRhaWxzLCBoZWFkZXJzLCBzdGF0dXMsIHVybCB9KSB7CiAgICAgICAgICBzdXBlcigiSFRUUCByZXF1ZXN0IGZhaWxlZC4iLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBkZXRhaWxzLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBzdGF0dXMgJiYgYFN0YXR1czogJHtzdGF0dXN9YCwKICAgICAgICAgICAgICBgVVJMOiAke2dldFVybCh1cmwpfWAsCiAgICAgICAgICAgICAgYm9keSAmJiBgUmVxdWVzdCBib2R5OiAke3N0cmluZ2lmeShib2R5KX1gCiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiSHR0cFJlcXVlc3RFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJib2R5IiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiaGVhZGVycyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInN0YXR1cyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInVybCIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwogICAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyczsKICAgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOwogICAgICAgICAgdGhpcy51cmwgPSB1cmw7CiAgICAgICAgfQogICAgICB9OwogICAgICBXZWJTb2NrZXRSZXF1ZXN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYm9keSwgY2F1c2UsIGRldGFpbHMsIHVybCB9KSB7CiAgICAgICAgICBzdXBlcigiV2ViU29ja2V0IHJlcXVlc3QgZmFpbGVkLiIsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIGRldGFpbHMsCiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBVUkw6ICR7Z2V0VXJsKHVybCl9YCwKICAgICAgICAgICAgICBib2R5ICYmIGBSZXF1ZXN0IGJvZHk6ICR7c3RyaW5naWZ5KGJvZHkpfWAKICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgICAgIG5hbWU6ICJXZWJTb2NrZXRSZXF1ZXN0RXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFJwY1JlcXVlc3RFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBib2R5LCBlcnJvciwgdXJsIH0pIHsKICAgICAgICAgIHN1cGVyKCJSUEMgUmVxdWVzdCBmYWlsZWQuIiwgewogICAgICAgICAgICBjYXVzZTogZXJyb3IsCiAgICAgICAgICAgIGRldGFpbHM6IGVycm9yLm1lc3NhZ2UsCiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogW2BVUkw6ICR7Z2V0VXJsKHVybCl9YCwgYFJlcXVlc3QgYm9keTogJHtzdHJpbmdpZnkoYm9keSl9YF0sCiAgICAgICAgICAgIG5hbWU6ICJScGNSZXF1ZXN0RXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29kZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmNvZGUgPSBlcnJvci5jb2RlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU29ja2V0Q2xvc2VkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgdXJsIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoIlRoZSBzb2NrZXQgaGFzIGJlZW4gY2xvc2VkLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbdXJsICYmIGBVUkw6ICR7Z2V0VXJsKHVybCl9YF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiU29ja2V0Q2xvc2VkRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFRpbWVvdXRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBib2R5LCB1cmwgfSkgewogICAgICAgICAgc3VwZXIoIlRoZSByZXF1ZXN0IHRvb2sgdG9vIGxvbmcgdG8gcmVzcG9uZC4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6ICJUaGUgcmVxdWVzdCB0aW1lZCBvdXQuIiwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYFVSTDogJHtnZXRVcmwodXJsKX1gLCBgUmVxdWVzdCBib2R5OiAke3N0cmluZ2lmeShib2R5KX1gXSwKICAgICAgICAgICAgbmFtZTogIlRpbWVvdXRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvcnBjLmpzCiAgdmFyIHVua25vd25FcnJvckNvZGUsIFJwY0Vycm9yLCBQcm92aWRlclJwY0Vycm9yLCBQYXJzZVJwY0Vycm9yLCBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yLCBNZXRob2ROb3RGb3VuZFJwY0Vycm9yLCBJbnZhbGlkUGFyYW1zUnBjRXJyb3IsIEludGVybmFsUnBjRXJyb3IsIEludmFsaWRJbnB1dFJwY0Vycm9yLCBSZXNvdXJjZU5vdEZvdW5kUnBjRXJyb3IsIFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciwgVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yLCBNZXRob2ROb3RTdXBwb3J0ZWRScGNFcnJvciwgTGltaXRFeGNlZWRlZFJwY0Vycm9yLCBKc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IsIFVzZXJSZWplY3RlZFJlcXVlc3RFcnJvciwgVW5hdXRob3JpemVkUHJvdmlkZXJFcnJvciwgVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLCBQcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yLCBDaGFpbkRpc2Nvbm5lY3RlZEVycm9yLCBTd2l0Y2hDaGFpbkVycm9yLCBVbmtub3duUnBjRXJyb3I7CiAgdmFyIGluaXRfcnBjID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL3JwYy5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X3JlcXVlc3QoKTsKICAgICAgdW5rbm93bkVycm9yQ29kZSA9IC0xOwogICAgICBScGNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UsIHsgY29kZSwgZG9jc1BhdGg6IGRvY3NQYXRoOSwgbWV0YU1lc3NhZ2VzLCBuYW1lLCBzaG9ydE1lc3NhZ2UgfSkgewogICAgICAgICAgc3VwZXIoc2hvcnRNZXNzYWdlLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IG1ldGFNZXNzYWdlcyB8fCBjYXVzZT8ubWV0YU1lc3NhZ2VzLAogICAgICAgICAgICBuYW1lOiBuYW1lIHx8ICJScGNFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJjb2RlIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWUgfHwgY2F1c2UubmFtZTsKICAgICAgICAgIHRoaXMuY29kZSA9IGNhdXNlIGluc3RhbmNlb2YgUnBjUmVxdWVzdEVycm9yID8gY2F1c2UuY29kZSA6IGNvZGUgPz8gdW5rbm93bkVycm9yQ29kZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFByb3ZpZGVyUnBjRXJyb3IgPSBjbGFzcyBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgb3B0aW9ucykgewogICAgICAgICAgc3VwZXIoY2F1c2UsIG9wdGlvbnMpOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkYXRhIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGF0YSA9IG9wdGlvbnMuZGF0YTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFBhcnNlUnBjRXJyb3IgPSBjbGFzcyBfUGFyc2VScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1BhcnNlUnBjRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlBhcnNlUnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJJbnZhbGlkIEpTT04gd2FzIHJlY2VpdmVkIGJ5IHRoZSBzZXJ2ZXIuIEFuIGVycm9yIG9jY3VycmVkIG9uIHRoZSBzZXJ2ZXIgd2hpbGUgcGFyc2luZyB0aGUgSlNPTiB0ZXh0LiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhcnNlUnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzI3MDAKICAgICAgfSk7CiAgICAgIEludmFsaWRSZXF1ZXN0UnBjRXJyb3IgPSBjbGFzcyBfSW52YWxpZFJlcXVlc3RScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX0ludmFsaWRSZXF1ZXN0UnBjRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIkludmFsaWRSZXF1ZXN0UnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJKU09OIGlzIG5vdCBhIHZhbGlkIHJlcXVlc3Qgb2JqZWN0LiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEludmFsaWRSZXF1ZXN0UnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzI2MDAKICAgICAgfSk7CiAgICAgIE1ldGhvZE5vdEZvdW5kUnBjRXJyb3IgPSBjbGFzcyBfTWV0aG9kTm90Rm91bmRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBtZXRob2QgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfTWV0aG9kTm90Rm91bmRScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiTWV0aG9kTm90Rm91bmRScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogYFRoZSBtZXRob2Qke21ldGhvZCA/IGAgIiR7bWV0aG9kfSJgIDogIiJ9IGRvZXMgbm90IGV4aXN0IC8gaXMgbm90IGF2YWlsYWJsZS5gCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXRob2ROb3RGb3VuZFJwY0Vycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogLTMyNjAxCiAgICAgIH0pOwogICAgICBJbnZhbGlkUGFyYW1zUnBjRXJyb3IgPSBjbGFzcyBfSW52YWxpZFBhcmFtc1JwY0Vycm9yIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfSW52YWxpZFBhcmFtc1JwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkUGFyYW1zUnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6IFsKICAgICAgICAgICAgICAiSW52YWxpZCBwYXJhbWV0ZXJzIHdlcmUgcHJvdmlkZWQgdG8gdGhlIFJQQyBtZXRob2QuIiwKICAgICAgICAgICAgICAiRG91YmxlIGNoZWNrIHlvdSBoYXZlIHByb3ZpZGVkIHRoZSBjb3JyZWN0IHBhcmFtZXRlcnMuIgogICAgICAgICAgICBdLmpvaW4oIlxuIikKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEludmFsaWRQYXJhbXNScGNFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC0zMjYwMgogICAgICB9KTsKICAgICAgSW50ZXJuYWxScGNFcnJvciA9IGNsYXNzIF9JbnRlcm5hbFJwY0Vycm9yIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfSW50ZXJuYWxScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiSW50ZXJuYWxScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIkFuIGludGVybmFsIGVycm9yIHdhcyByZWNlaXZlZC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRlcm5hbFJwY0Vycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogLTMyNjAzCiAgICAgIH0pOwogICAgICBJbnZhbGlkSW5wdXRScGNFcnJvciA9IGNsYXNzIF9JbnZhbGlkSW5wdXRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX0ludmFsaWRJbnB1dFJwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkSW5wdXRScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogWwogICAgICAgICAgICAgICJNaXNzaW5nIG9yIGludmFsaWQgcGFyYW1ldGVycy4iLAogICAgICAgICAgICAgICJEb3VibGUgY2hlY2sgeW91IGhhdmUgcHJvdmlkZWQgdGhlIGNvcnJlY3QgcGFyYW1ldGVycy4iCiAgICAgICAgICAgIF0uam9pbigiXG4iKQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW52YWxpZElucHV0UnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzJlMwogICAgICB9KTsKICAgICAgUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yID0gY2xhc3MgX1Jlc291cmNlTm90Rm91bmRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1Jlc291cmNlTm90Rm91bmRScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiUmVxdWVzdGVkIHJlc291cmNlIG5vdCBmb3VuZC4iCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJSZXNvdXJjZU5vdEZvdW5kUnBjRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZXNvdXJjZU5vdEZvdW5kUnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzIwMDEKICAgICAgfSk7CiAgICAgIFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciA9IGNsYXNzIF9SZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IgZXh0ZW5kcyBScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UpIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9SZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIlJlcXVlc3RlZCByZXNvdXJjZSBub3QgYXZhaWxhYmxlLiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC0zMjAwMgogICAgICB9KTsKICAgICAgVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yID0gY2xhc3MgX1RyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1RyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiVHJhbnNhY3Rpb24gY3JlYXRpb24gZmFpbGVkLiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC0zMjAwMwogICAgICB9KTsKICAgICAgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IgPSBjbGFzcyBfTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IgZXh0ZW5kcyBScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UsIHsgbWV0aG9kIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX01ldGhvZE5vdFN1cHBvcnRlZFJwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJNZXRob2ROb3RTdXBwb3J0ZWRScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogYE1ldGhvZCR7bWV0aG9kID8gYCAiJHttZXRob2R9ImAgOiAiIn0gaXMgbm90IGltcGxlbWVudGVkLmAKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1ldGhvZE5vdFN1cHBvcnRlZFJwY0Vycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogLTMyMDA0CiAgICAgIH0pOwogICAgICBMaW1pdEV4Y2VlZGVkUnBjRXJyb3IgPSBjbGFzcyBfTGltaXRFeGNlZWRlZFJwY0Vycm9yIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfTGltaXRFeGNlZWRlZFJwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJMaW1pdEV4Y2VlZGVkUnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJSZXF1ZXN0IGV4Y2VlZHMgZGVmaW5lZCBsaW1pdC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaW1pdEV4Y2VlZGVkUnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzIwMDUKICAgICAgfSk7CiAgICAgIEpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvciA9IGNsYXNzIF9Kc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UpIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9Kc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIkpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIlZlcnNpb24gb2YgSlNPTi1SUEMgcHJvdG9jb2wgaXMgbm90IHN1cHBvcnRlZC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzIwMDYKICAgICAgfSk7CiAgICAgIFVzZXJSZWplY3RlZFJlcXVlc3RFcnJvciA9IGNsYXNzIF9Vc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBQcm92aWRlclJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1VzZXJSZWplY3RlZFJlcXVlc3RFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiVXNlclJlamVjdGVkUmVxdWVzdEVycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiVXNlciByZWplY3RlZCB0aGUgcmVxdWVzdC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiA0MDAxCiAgICAgIH0pOwogICAgICBVbmF1dGhvcml6ZWRQcm92aWRlckVycm9yID0gY2xhc3MgX1VuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IgZXh0ZW5kcyBQcm92aWRlclJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1VuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlVuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJUaGUgcmVxdWVzdGVkIG1ldGhvZCBhbmQvb3IgYWNjb3VudCBoYXMgbm90IGJlZW4gYXV0aG9yaXplZCBieSB0aGUgdXNlci4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVbmF1dGhvcml6ZWRQcm92aWRlckVycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogNDEwMAogICAgICB9KTsKICAgICAgVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yID0gY2xhc3MgX1Vuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvciBleHRlbmRzIFByb3ZpZGVyUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlLCB7IG1ldGhvZCB9ID0ge30pIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9VbnN1cHBvcnRlZFByb3ZpZGVyTWV0aG9kRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlVuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogYFRoZSBQcm92aWRlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQgbWV0aG9kJHttZXRob2QgPyBgICIgJHttZXRob2R9ImAgOiAiIn0uYAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogNDIwMAogICAgICB9KTsKICAgICAgUHJvdmlkZXJEaXNjb25uZWN0ZWRFcnJvciA9IGNsYXNzIF9Qcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yIGV4dGVuZHMgUHJvdmlkZXJScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UpIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9Qcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJQcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiVGhlIFByb3ZpZGVyIGlzIGRpc2Nvbm5lY3RlZCBmcm9tIGFsbCBjaGFpbnMuIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUHJvdmlkZXJEaXNjb25uZWN0ZWRFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IDQ5MDAKICAgICAgfSk7CiAgICAgIENoYWluRGlzY29ubmVjdGVkRXJyb3IgPSBjbGFzcyBfQ2hhaW5EaXNjb25uZWN0ZWRFcnJvciBleHRlbmRzIFByb3ZpZGVyUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfQ2hhaW5EaXNjb25uZWN0ZWRFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiQ2hhaW5EaXNjb25uZWN0ZWRFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIlRoZSBQcm92aWRlciBpcyBub3QgY29ubmVjdGVkIHRvIHRoZSByZXF1ZXN0ZWQgY2hhaW4uIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2hhaW5EaXNjb25uZWN0ZWRFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IDQ5MDEKICAgICAgfSk7CiAgICAgIFN3aXRjaENoYWluRXJyb3IgPSBjbGFzcyBfU3dpdGNoQ2hhaW5FcnJvciBleHRlbmRzIFByb3ZpZGVyUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfU3dpdGNoQ2hhaW5FcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiU3dpdGNoQ2hhaW5FcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIkFuIGVycm9yIG9jY3VycmVkIHdoZW4gYXR0ZW1wdGluZyB0byBzd2l0Y2ggY2hhaW4uIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3dpdGNoQ2hhaW5FcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IDQ5MDIKICAgICAgfSk7CiAgICAgIFVua25vd25ScGNFcnJvciA9IGNsYXNzIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBuYW1lOiAiVW5rbm93blJwY0Vycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiQW4gdW5rbm93biBSUEMgZXJyb3Igb2NjdXJyZWQuIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vX21kLmpzCiAgZnVuY3Rpb24gc2V0QmlnVWludDY0KHZpZXcsIGJ5dGVPZmZzZXQsIHZhbHVlLCBpc0xFMikgewogICAgaWYgKHR5cGVvZiB2aWV3LnNldEJpZ1VpbnQ2NCA9PT0gImZ1bmN0aW9uIikKICAgICAgcmV0dXJuIHZpZXcuc2V0QmlnVWludDY0KGJ5dGVPZmZzZXQsIHZhbHVlLCBpc0xFMik7CiAgICBjb25zdCBfMzJuMiA9IEJpZ0ludCgzMik7CiAgICBjb25zdCBfdTMyX21heCA9IEJpZ0ludCg0Mjk0OTY3Mjk1KTsKICAgIGNvbnN0IHdoID0gTnVtYmVyKHZhbHVlID4+IF8zMm4yICYgX3UzMl9tYXgpOwogICAgY29uc3Qgd2wgPSBOdW1iZXIodmFsdWUgJiBfdTMyX21heCk7CiAgICBjb25zdCBoID0gaXNMRTIgPyA0IDogMDsKICAgIGNvbnN0IGwgPSBpc0xFMiA/IDAgOiA0OwogICAgdmlldy5zZXRVaW50MzIoYnl0ZU9mZnNldCArIGgsIHdoLCBpc0xFMik7CiAgICB2aWV3LnNldFVpbnQzMihieXRlT2Zmc2V0ICsgbCwgd2wsIGlzTEUyKTsKICB9CiAgdmFyIENoaSwgTWFqLCBIYXNoTUQ7CiAgdmFyIGluaXRfbWQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL19tZC5qcyIoKSB7CiAgICAgIGluaXRfYXNzZXJ0KCk7CiAgICAgIGluaXRfdXRpbHMyKCk7CiAgICAgIENoaSA9IChhLCBiLCBjKSA9PiBhICYgYiBeIH5hICYgYzsKICAgICAgTWFqID0gKGEsIGIsIGMpID0+IGEgJiBiIF4gYSAmIGMgXiBiICYgYzsKICAgICAgSGFzaE1EID0gY2xhc3MgZXh0ZW5kcyBIYXNoIHsKICAgICAgICBjb25zdHJ1Y3RvcihibG9ja0xlbiwgb3V0cHV0TGVuLCBwYWRPZmZzZXQsIGlzTEUyKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgdGhpcy5ibG9ja0xlbiA9IGJsb2NrTGVuOwogICAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0aGlzLnBhZE9mZnNldCA9IHBhZE9mZnNldDsKICAgICAgICAgIHRoaXMuaXNMRSA9IGlzTEUyOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy5sZW5ndGggPSAwOwogICAgICAgICAgdGhpcy5wb3MgPSAwOwogICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tMZW4pOwogICAgICAgICAgdGhpcy52aWV3ID0gY3JlYXRlVmlldyh0aGlzLmJ1ZmZlcik7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZShkYXRhKSB7CiAgICAgICAgICBleGlzdHModGhpcyk7CiAgICAgICAgICBjb25zdCB7IHZpZXcsIGJ1ZmZlcjogYnVmZmVyMiwgYmxvY2tMZW4gfSA9IHRoaXM7CiAgICAgICAgICBkYXRhID0gdG9CeXRlczIoZGF0YSk7CiAgICAgICAgICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aDsKICAgICAgICAgIGZvciAobGV0IHBvcyA9IDA7IHBvcyA8IGxlbjsgKSB7CiAgICAgICAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihibG9ja0xlbiAtIHRoaXMucG9zLCBsZW4gLSBwb3MpOwogICAgICAgICAgICBpZiAodGFrZSA9PT0gYmxvY2tMZW4pIHsKICAgICAgICAgICAgICBjb25zdCBkYXRhVmlldyA9IGNyZWF0ZVZpZXcoZGF0YSk7CiAgICAgICAgICAgICAgZm9yICg7IGJsb2NrTGVuIDw9IGxlbiAtIHBvczsgcG9zICs9IGJsb2NrTGVuKQogICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzKGRhdGFWaWV3LCBwb3MpOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJ1ZmZlcjIuc2V0KGRhdGEuc3ViYXJyYXkocG9zLCBwb3MgKyB0YWtlKSwgdGhpcy5wb3MpOwogICAgICAgICAgICB0aGlzLnBvcyArPSB0YWtlOwogICAgICAgICAgICBwb3MgKz0gdGFrZTsKICAgICAgICAgICAgaWYgKHRoaXMucG9zID09PSBibG9ja0xlbikgewogICAgICAgICAgICAgIHRoaXMucHJvY2Vzcyh2aWV3LCAwKTsKICAgICAgICAgICAgICB0aGlzLnBvcyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHRoaXMubGVuZ3RoICs9IGRhdGEubGVuZ3RoOwogICAgICAgICAgdGhpcy5yb3VuZENsZWFuKCk7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgZGlnZXN0SW50byhvdXQpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzKTsKICAgICAgICAgIG91dHB1dChvdXQsIHRoaXMpOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IHRydWU7CiAgICAgICAgICBjb25zdCB7IGJ1ZmZlcjogYnVmZmVyMiwgdmlldywgYmxvY2tMZW4sIGlzTEU6IGlzTEUyIH0gPSB0aGlzOwogICAgICAgICAgbGV0IHsgcG9zIH0gPSB0aGlzOwogICAgICAgICAgYnVmZmVyMltwb3MrK10gPSAxMjg7CiAgICAgICAgICB0aGlzLmJ1ZmZlci5zdWJhcnJheShwb3MpLmZpbGwoMCk7CiAgICAgICAgICBpZiAodGhpcy5wYWRPZmZzZXQgPiBibG9ja0xlbiAtIHBvcykgewogICAgICAgICAgICB0aGlzLnByb2Nlc3ModmlldywgMCk7CiAgICAgICAgICAgIHBvcyA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKGxldCBpID0gcG9zOyBpIDwgYmxvY2tMZW47IGkrKykKICAgICAgICAgICAgYnVmZmVyMltpXSA9IDA7CiAgICAgICAgICBzZXRCaWdVaW50NjQodmlldywgYmxvY2tMZW4gLSA4LCBCaWdJbnQodGhpcy5sZW5ndGggKiA4KSwgaXNMRTIpOwogICAgICAgICAgdGhpcy5wcm9jZXNzKHZpZXcsIDApOwogICAgICAgICAgY29uc3Qgb3ZpZXcgPSBjcmVhdGVWaWV3KG91dCk7CiAgICAgICAgICBjb25zdCBsZW4gPSB0aGlzLm91dHB1dExlbjsKICAgICAgICAgIGlmIChsZW4gJSA0KQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIl9zaGEyOiBvdXRwdXRMZW4gc2hvdWxkIGJlIGFsaWduZWQgdG8gMzJiaXQiKTsKICAgICAgICAgIGNvbnN0IG91dExlbiA9IGxlbiAvIDQ7CiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0KCk7CiAgICAgICAgICBpZiAob3V0TGVuID4gc3RhdGUubGVuZ3RoKQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIl9zaGEyOiBvdXRwdXRMZW4gYmlnZ2VyIHRoYW4gc3RhdGUiKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0TGVuOyBpKyspCiAgICAgICAgICAgIG92aWV3LnNldFVpbnQzMig0ICogaSwgc3RhdGVbaV0sIGlzTEUyKTsKICAgICAgICB9CiAgICAgICAgZGlnZXN0KCkgewogICAgICAgICAgY29uc3QgeyBidWZmZXI6IGJ1ZmZlcjIsIG91dHB1dExlbiB9ID0gdGhpczsKICAgICAgICAgIHRoaXMuZGlnZXN0SW50byhidWZmZXIyKTsKICAgICAgICAgIGNvbnN0IHJlcyA9IGJ1ZmZlcjIuc2xpY2UoMCwgb3V0cHV0TGVuKTsKICAgICAgICAgIHRoaXMuZGVzdHJveSgpOwogICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICB9CiAgICAgICAgX2Nsb25lSW50byh0bykgewogICAgICAgICAgdG8gfHwgKHRvID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKSk7CiAgICAgICAgICB0by5zZXQoLi4udGhpcy5nZXQoKSk7CiAgICAgICAgICBjb25zdCB7IGJsb2NrTGVuLCBidWZmZXI6IGJ1ZmZlcjIsIGxlbmd0aCwgZmluaXNoZWQsIGRlc3Ryb3llZCwgcG9zIH0gPSB0aGlzOwogICAgICAgICAgdG8ubGVuZ3RoID0gbGVuZ3RoOwogICAgICAgICAgdG8ucG9zID0gcG9zOwogICAgICAgICAgdG8uZmluaXNoZWQgPSBmaW5pc2hlZDsKICAgICAgICAgIHRvLmRlc3Ryb3llZCA9IGRlc3Ryb3llZDsKICAgICAgICAgIGlmIChsZW5ndGggJSBibG9ja0xlbikKICAgICAgICAgICAgdG8uYnVmZmVyLnNldChidWZmZXIyKTsKICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9zaGEyNTYuanMKICB2YXIgU0hBMjU2X0ssIFNIQTI1Nl9JViwgU0hBMjU2X1csIFNIQTI1Niwgc2hhMjU2OwogIHZhciBpbml0X3NoYTI1NiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vc2hhMjU2LmpzIigpIHsKICAgICAgaW5pdF9tZCgpOwogICAgICBpbml0X3V0aWxzMigpOwogICAgICBTSEEyNTZfSyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgVWludDMyQXJyYXkoWwogICAgICAgIDExMTYzNTI0MDgsCiAgICAgICAgMTg5OTQ0NzQ0MSwKICAgICAgICAzMDQ5MzIzNDcxLAogICAgICAgIDM5MjEwMDk1NzMsCiAgICAgICAgOTYxOTg3MTYzLAogICAgICAgIDE1MDg5NzA5OTMsCiAgICAgICAgMjQ1MzYzNTc0OCwKICAgICAgICAyODcwNzYzMjIxLAogICAgICAgIDM2MjQzODEwODAsCiAgICAgICAgMzEwNTk4NDAxLAogICAgICAgIDYwNzIyNTI3OCwKICAgICAgICAxNDI2ODgxOTg3LAogICAgICAgIDE5MjUwNzgzODgsCiAgICAgICAgMjE2MjA3ODIwNiwKICAgICAgICAyNjE0ODg4MTAzLAogICAgICAgIDMyNDgyMjI1ODAsCiAgICAgICAgMzgzNTM5MDQwMSwKICAgICAgICA0MDIyMjI0Nzc0LAogICAgICAgIDI2NDM0NzA3OCwKICAgICAgICA2MDQ4MDc2MjgsCiAgICAgICAgNzcwMjU1OTgzLAogICAgICAgIDEyNDkxNTAxMjIsCiAgICAgICAgMTU1NTA4MTY5MiwKICAgICAgICAxOTk2MDY0OTg2LAogICAgICAgIDI1NTQyMjA4ODIsCiAgICAgICAgMjgyMTgzNDM0OSwKICAgICAgICAyOTUyOTk2ODA4LAogICAgICAgIDMyMTAzMTM2NzEsCiAgICAgICAgMzMzNjU3MTg5MSwKICAgICAgICAzNTg0NTI4NzExLAogICAgICAgIDExMzkyNjk5MywKICAgICAgICAzMzgyNDE4OTUsCiAgICAgICAgNjY2MzA3MjA1LAogICAgICAgIDc3MzUyOTkxMiwKICAgICAgICAxMjk0NzU3MzcyLAogICAgICAgIDEzOTYxODIyOTEsCiAgICAgICAgMTY5NTE4MzcwMCwKICAgICAgICAxOTg2NjYxMDUxLAogICAgICAgIDIxNzcwMjYzNTAsCiAgICAgICAgMjQ1Njk1NjAzNywKICAgICAgICAyNzMwNDg1OTIxLAogICAgICAgIDI4MjAzMDI0MTEsCiAgICAgICAgMzI1OTczMDgwMCwKICAgICAgICAzMzQ1NzY0NzcxLAogICAgICAgIDM1MTYwNjU4MTcsCiAgICAgICAgMzYwMDM1MjgwNCwKICAgICAgICA0MDk0NTcxOTA5LAogICAgICAgIDI3NTQyMzM0NCwKICAgICAgICA0MzAyMjc3MzQsCiAgICAgICAgNTA2OTQ4NjE2LAogICAgICAgIDY1OTA2MDU1NiwKICAgICAgICA4ODM5OTc4NzcsCiAgICAgICAgOTU4MTM5NTcxLAogICAgICAgIDEzMjI4MjIyMTgsCiAgICAgICAgMTUzNzAwMjA2MywKICAgICAgICAxNzQ3ODczNzc5LAogICAgICAgIDE5NTU1NjIyMjIsCiAgICAgICAgMjAyNDEwNDgxNSwKICAgICAgICAyMjI3NzMwNDUyLAogICAgICAgIDIzNjE4NTI0MjQsCiAgICAgICAgMjQyODQzNjQ3NCwKICAgICAgICAyNzU2NzM0MTg3LAogICAgICAgIDMyMDQwMzE0NzksCiAgICAgICAgMzMyOTMyNTI5OAogICAgICBdKTsKICAgICAgU0hBMjU2X0lWID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheShbCiAgICAgICAgMTc3OTAzMzcwMywKICAgICAgICAzMTQ0MTM0Mjc3LAogICAgICAgIDEwMTM5MDQyNDIsCiAgICAgICAgMjc3MzQ4MDc2MiwKICAgICAgICAxMzU5ODkzMTE5LAogICAgICAgIDI2MDA4MjI5MjQsCiAgICAgICAgNTI4NzM0NjM1LAogICAgICAgIDE1NDE0NTkyMjUKICAgICAgXSk7CiAgICAgIFNIQTI1Nl9XID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheSg2NCk7CiAgICAgIFNIQTI1NiA9IGNsYXNzIGV4dGVuZHMgSGFzaE1EIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKDY0LCAzMiwgOCwgZmFsc2UpOwogICAgICAgICAgdGhpcy5BID0gU0hBMjU2X0lWWzBdIHwgMDsKICAgICAgICAgIHRoaXMuQiA9IFNIQTI1Nl9JVlsxXSB8IDA7CiAgICAgICAgICB0aGlzLkMgPSBTSEEyNTZfSVZbMl0gfCAwOwogICAgICAgICAgdGhpcy5EID0gU0hBMjU2X0lWWzNdIHwgMDsKICAgICAgICAgIHRoaXMuRSA9IFNIQTI1Nl9JVls0XSB8IDA7CiAgICAgICAgICB0aGlzLkYgPSBTSEEyNTZfSVZbNV0gfCAwOwogICAgICAgICAgdGhpcy5HID0gU0hBMjU2X0lWWzZdIHwgMDsKICAgICAgICAgIHRoaXMuSCA9IFNIQTI1Nl9JVls3XSB8IDA7CiAgICAgICAgfQogICAgICAgIGdldCgpIHsKICAgICAgICAgIGNvbnN0IHsgQSwgQiwgQywgRCwgRSwgRiwgRywgSCB9ID0gdGhpczsKICAgICAgICAgIHJldHVybiBbQSwgQiwgQywgRCwgRSwgRiwgRywgSF07CiAgICAgICAgfQogICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZQogICAgICAgIHNldChBLCBCLCBDLCBELCBFLCBGLCBHLCBIKSB7CiAgICAgICAgICB0aGlzLkEgPSBBIHwgMDsKICAgICAgICAgIHRoaXMuQiA9IEIgfCAwOwogICAgICAgICAgdGhpcy5DID0gQyB8IDA7CiAgICAgICAgICB0aGlzLkQgPSBEIHwgMDsKICAgICAgICAgIHRoaXMuRSA9IEUgfCAwOwogICAgICAgICAgdGhpcy5GID0gRiB8IDA7CiAgICAgICAgICB0aGlzLkcgPSBHIHwgMDsKICAgICAgICAgIHRoaXMuSCA9IEggfCAwOwogICAgICAgIH0KICAgICAgICBwcm9jZXNzKHZpZXcsIG9mZnNldCkgewogICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrLCBvZmZzZXQgKz0gNCkKICAgICAgICAgICAgU0hBMjU2X1dbaV0gPSB2aWV3LmdldFVpbnQzMihvZmZzZXQsIGZhbHNlKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAxNjsgaSA8IDY0OyBpKyspIHsKICAgICAgICAgICAgY29uc3QgVzE1ID0gU0hBMjU2X1dbaSAtIDE1XTsKICAgICAgICAgICAgY29uc3QgVzIgPSBTSEEyNTZfV1tpIC0gMl07CiAgICAgICAgICAgIGNvbnN0IHMwID0gcm90cihXMTUsIDcpIF4gcm90cihXMTUsIDE4KSBeIFcxNSA+Pj4gMzsKICAgICAgICAgICAgY29uc3QgczEgPSByb3RyKFcyLCAxNykgXiByb3RyKFcyLCAxOSkgXiBXMiA+Pj4gMTA7CiAgICAgICAgICAgIFNIQTI1Nl9XW2ldID0gczEgKyBTSEEyNTZfV1tpIC0gN10gKyBzMCArIFNIQTI1Nl9XW2kgLSAxNl0gfCAwOwogICAgICAgICAgfQogICAgICAgICAgbGV0IHsgQSwgQiwgQywgRCwgRSwgRiwgRywgSCB9ID0gdGhpczsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjQ7IGkrKykgewogICAgICAgICAgICBjb25zdCBzaWdtYTEgPSByb3RyKEUsIDYpIF4gcm90cihFLCAxMSkgXiByb3RyKEUsIDI1KTsKICAgICAgICAgICAgY29uc3QgVDEgPSBIICsgc2lnbWExICsgQ2hpKEUsIEYsIEcpICsgU0hBMjU2X0tbaV0gKyBTSEEyNTZfV1tpXSB8IDA7CiAgICAgICAgICAgIGNvbnN0IHNpZ21hMCA9IHJvdHIoQSwgMikgXiByb3RyKEEsIDEzKSBeIHJvdHIoQSwgMjIpOwogICAgICAgICAgICBjb25zdCBUMiA9IHNpZ21hMCArIE1haihBLCBCLCBDKSB8IDA7CiAgICAgICAgICAgIEggPSBHOwogICAgICAgICAgICBHID0gRjsKICAgICAgICAgICAgRiA9IEU7CiAgICAgICAgICAgIEUgPSBEICsgVDEgfCAwOwogICAgICAgICAgICBEID0gQzsKICAgICAgICAgICAgQyA9IEI7CiAgICAgICAgICAgIEIgPSBBOwogICAgICAgICAgICBBID0gVDEgKyBUMiB8IDA7CiAgICAgICAgICB9CiAgICAgICAgICBBID0gQSArIHRoaXMuQSB8IDA7CiAgICAgICAgICBCID0gQiArIHRoaXMuQiB8IDA7CiAgICAgICAgICBDID0gQyArIHRoaXMuQyB8IDA7CiAgICAgICAgICBEID0gRCArIHRoaXMuRCB8IDA7CiAgICAgICAgICBFID0gRSArIHRoaXMuRSB8IDA7CiAgICAgICAgICBGID0gRiArIHRoaXMuRiB8IDA7CiAgICAgICAgICBHID0gRyArIHRoaXMuRyB8IDA7CiAgICAgICAgICBIID0gSCArIHRoaXMuSCB8IDA7CiAgICAgICAgICB0aGlzLnNldChBLCBCLCBDLCBELCBFLCBGLCBHLCBIKTsKICAgICAgICB9CiAgICAgICAgcm91bmRDbGVhbigpIHsKICAgICAgICAgIFNIQTI1Nl9XLmZpbGwoMCk7CiAgICAgICAgfQogICAgICAgIGRlc3Ryb3koKSB7CiAgICAgICAgICB0aGlzLnNldCgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKICAgICAgICAgIHRoaXMuYnVmZmVyLmZpbGwoMCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBzaGEyNTYgPSAvKiBAX19QVVJFX18gKi8gd3JhcENvbnN0cnVjdG9yKCgpID0+IG5ldyBTSEEyNTYoKSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC91dGlscy5qcwogIHZhciB1dGlsc19leHBvcnRzID0ge307CiAgX19leHBvcnQodXRpbHNfZXhwb3J0cywgewogICAgYWJ5dGVzOiAoKSA9PiBhYnl0ZXMsCiAgICBiaXRHZXQ6ICgpID0+IGJpdEdldCwKICAgIGJpdExlbjogKCkgPT4gYml0TGVuLAogICAgYml0TWFzazogKCkgPT4gYml0TWFzaywKICAgIGJpdFNldDogKCkgPT4gYml0U2V0LAogICAgYnl0ZXNUb0hleDogKCkgPT4gYnl0ZXNUb0hleDIsCiAgICBieXRlc1RvTnVtYmVyQkU6ICgpID0+IGJ5dGVzVG9OdW1iZXJCRSwKICAgIGJ5dGVzVG9OdW1iZXJMRTogKCkgPT4gYnl0ZXNUb051bWJlckxFLAogICAgY29uY2F0Qnl0ZXM6ICgpID0+IGNvbmNhdEJ5dGVzMywKICAgIGNyZWF0ZUhtYWNEcmJnOiAoKSA9PiBjcmVhdGVIbWFjRHJiZywKICAgIGVuc3VyZUJ5dGVzOiAoKSA9PiBlbnN1cmVCeXRlcywKICAgIGVxdWFsQnl0ZXM6ICgpID0+IGVxdWFsQnl0ZXMsCiAgICBoZXhUb0J5dGVzOiAoKSA9PiBoZXhUb0J5dGVzMiwKICAgIGhleFRvTnVtYmVyOiAoKSA9PiBoZXhUb051bWJlcjIsCiAgICBpc0J5dGVzOiAoKSA9PiBpc0J5dGVzMiwKICAgIG51bWJlclRvQnl0ZXNCRTogKCkgPT4gbnVtYmVyVG9CeXRlc0JFLAogICAgbnVtYmVyVG9CeXRlc0xFOiAoKSA9PiBudW1iZXJUb0J5dGVzTEUsCiAgICBudW1iZXJUb0hleFVucGFkZGVkOiAoKSA9PiBudW1iZXJUb0hleFVucGFkZGVkLAogICAgbnVtYmVyVG9WYXJCeXRlc0JFOiAoKSA9PiBudW1iZXJUb1ZhckJ5dGVzQkUsCiAgICB1dGY4VG9CeXRlczogKCkgPT4gdXRmOFRvQnl0ZXMyLAogICAgdmFsaWRhdGVPYmplY3Q6ICgpID0+IHZhbGlkYXRlT2JqZWN0CiAgfSk7CiAgZnVuY3Rpb24gaXNCeXRlczIoYSkgewogICAgcmV0dXJuIGEgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IGEgIT0gbnVsbCAmJiB0eXBlb2YgYSA9PT0gIm9iamVjdCIgJiYgYS5jb25zdHJ1Y3Rvci5uYW1lID09PSAiVWludDhBcnJheSI7CiAgfQogIGZ1bmN0aW9uIGFieXRlcyhpdGVtKSB7CiAgICBpZiAoIWlzQnl0ZXMyKGl0ZW0pKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVpbnQ4QXJyYXkgZXhwZWN0ZWQiKTsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb0hleDIoYnl0ZXMyKSB7CiAgICBhYnl0ZXMoYnl0ZXMyKTsKICAgIGxldCBoZXggPSAiIjsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMyLmxlbmd0aDsgaSsrKSB7CiAgICAgIGhleCArPSBoZXhlczJbYnl0ZXMyW2ldXTsKICAgIH0KICAgIHJldHVybiBoZXg7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvSGV4VW5wYWRkZWQobnVtKSB7CiAgICBjb25zdCBoZXggPSBudW0udG9TdHJpbmcoMTYpOwogICAgcmV0dXJuIGhleC5sZW5ndGggJiAxID8gYDAke2hleH1gIDogaGV4OwogIH0KICBmdW5jdGlvbiBoZXhUb051bWJlcjIoaGV4KSB7CiAgICBpZiAodHlwZW9mIGhleCAhPT0gInN0cmluZyIpCiAgICAgIHRocm93IG5ldyBFcnJvcigiaGV4IHN0cmluZyBleHBlY3RlZCwgZ290ICIgKyB0eXBlb2YgaGV4KTsKICAgIHJldHVybiBCaWdJbnQoaGV4ID09PSAiIiA/ICIwIiA6IGAweCR7aGV4fWApOwogIH0KICBmdW5jdGlvbiBhc2NpaVRvQmFzZTE2KGNoYXIpIHsKICAgIGlmIChjaGFyID49IGFzY2lpcy5fMCAmJiBjaGFyIDw9IGFzY2lpcy5fOSkKICAgICAgcmV0dXJuIGNoYXIgLSBhc2NpaXMuXzA7CiAgICBpZiAoY2hhciA+PSBhc2NpaXMuX0EgJiYgY2hhciA8PSBhc2NpaXMuX0YpCiAgICAgIHJldHVybiBjaGFyIC0gKGFzY2lpcy5fQSAtIDEwKTsKICAgIGlmIChjaGFyID49IGFzY2lpcy5fYSAmJiBjaGFyIDw9IGFzY2lpcy5fZikKICAgICAgcmV0dXJuIGNoYXIgLSAoYXNjaWlzLl9hIC0gMTApOwogICAgcmV0dXJuOwogIH0KICBmdW5jdGlvbiBoZXhUb0J5dGVzMihoZXgpIHsKICAgIGlmICh0eXBlb2YgaGV4ICE9PSAic3RyaW5nIikKICAgICAgdGhyb3cgbmV3IEVycm9yKCJoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgIiArIHR5cGVvZiBoZXgpOwogICAgY29uc3QgaGwgPSBoZXgubGVuZ3RoOwogICAgY29uc3QgYWwgPSBobCAvIDI7CiAgICBpZiAoaGwgJSAyKQogICAgICB0aHJvdyBuZXcgRXJyb3IoInBhZGRlZCBoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgdW5wYWRkZWQgaGV4IG9mIGxlbmd0aCAiICsgaGwpOwogICAgY29uc3QgYXJyYXkgPSBuZXcgVWludDhBcnJheShhbCk7CiAgICBmb3IgKGxldCBhaSA9IDAsIGhpID0gMDsgYWkgPCBhbDsgYWkrKywgaGkgKz0gMikgewogICAgICBjb25zdCBuMSA9IGFzY2lpVG9CYXNlMTYoaGV4LmNoYXJDb2RlQXQoaGkpKTsKICAgICAgY29uc3QgbjIgPSBhc2NpaVRvQmFzZTE2KGhleC5jaGFyQ29kZUF0KGhpICsgMSkpOwogICAgICBpZiAobjEgPT09IHZvaWQgMCB8fCBuMiA9PT0gdm9pZCAwKSB7CiAgICAgICAgY29uc3QgY2hhciA9IGhleFtoaV0gKyBoZXhbaGkgKyAxXTsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCBub24taGV4IGNoYXJhY3RlciAiJyArIGNoYXIgKyAnIiBhdCBpbmRleCAnICsgaGkpOwogICAgICB9CiAgICAgIGFycmF5W2FpXSA9IG4xICogMTYgKyBuMjsKICAgIH0KICAgIHJldHVybiBhcnJheTsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb051bWJlckJFKGJ5dGVzMikgewogICAgcmV0dXJuIGhleFRvTnVtYmVyMihieXRlc1RvSGV4MihieXRlczIpKTsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb051bWJlckxFKGJ5dGVzMikgewogICAgYWJ5dGVzKGJ5dGVzMik7CiAgICByZXR1cm4gaGV4VG9OdW1iZXIyKGJ5dGVzVG9IZXgyKFVpbnQ4QXJyYXkuZnJvbShieXRlczIpLnJldmVyc2UoKSkpOwogIH0KICBmdW5jdGlvbiBudW1iZXJUb0J5dGVzQkUobiwgbGVuKSB7CiAgICByZXR1cm4gaGV4VG9CeXRlczIobi50b1N0cmluZygxNikucGFkU3RhcnQobGVuICogMiwgIjAiKSk7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvQnl0ZXNMRShuLCBsZW4pIHsKICAgIHJldHVybiBudW1iZXJUb0J5dGVzQkUobiwgbGVuKS5yZXZlcnNlKCk7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvVmFyQnl0ZXNCRShuKSB7CiAgICByZXR1cm4gaGV4VG9CeXRlczIobnVtYmVyVG9IZXhVbnBhZGRlZChuKSk7CiAgfQogIGZ1bmN0aW9uIGVuc3VyZUJ5dGVzKHRpdGxlLCBoZXgsIGV4cGVjdGVkTGVuZ3RoKSB7CiAgICBsZXQgcmVzOwogICAgaWYgKHR5cGVvZiBoZXggPT09ICJzdHJpbmciKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmVzID0gaGV4VG9CeXRlczIoaGV4KTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aXRsZX0gbXVzdCBiZSB2YWxpZCBoZXggc3RyaW5nLCBnb3QgIiR7aGV4fSIuIENhdXNlOiAke2V9YCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXNCeXRlczIoaGV4KSkgewogICAgICByZXMgPSBVaW50OEFycmF5LmZyb20oaGV4KTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aXRsZX0gbXVzdCBiZSBoZXggc3RyaW5nIG9yIFVpbnQ4QXJyYXlgKTsKICAgIH0KICAgIGNvbnN0IGxlbiA9IHJlcy5sZW5ndGg7CiAgICBpZiAodHlwZW9mIGV4cGVjdGVkTGVuZ3RoID09PSAibnVtYmVyIiAmJiBsZW4gIT09IGV4cGVjdGVkTGVuZ3RoKQogICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGl0bGV9IGV4cGVjdGVkICR7ZXhwZWN0ZWRMZW5ndGh9IGJ5dGVzLCBnb3QgJHtsZW59YCk7CiAgICByZXR1cm4gcmVzOwogIH0KICBmdW5jdGlvbiBjb25jYXRCeXRlczMoLi4uYXJyYXlzKSB7CiAgICBsZXQgc3VtID0gMDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IGEgPSBhcnJheXNbaV07CiAgICAgIGFieXRlcyhhKTsKICAgICAgc3VtICs9IGEubGVuZ3RoOwogICAgfQogICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc3VtKTsKICAgIGZvciAobGV0IGkgPSAwLCBwYWQyID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhID0gYXJyYXlzW2ldOwogICAgICByZXMuc2V0KGEsIHBhZDIpOwogICAgICBwYWQyICs9IGEubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9CiAgZnVuY3Rpb24gZXF1YWxCeXRlcyhhLCBiKSB7CiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgZGlmZiA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspCiAgICAgIGRpZmYgfD0gYVtpXSBeIGJbaV07CiAgICByZXR1cm4gZGlmZiA9PT0gMDsKICB9CiAgZnVuY3Rpb24gdXRmOFRvQnl0ZXMyKHN0cikgewogICAgaWYgKHR5cGVvZiBzdHIgIT09ICJzdHJpbmciKQogICAgICB0aHJvdyBuZXcgRXJyb3IoYHV0ZjhUb0J5dGVzIGV4cGVjdGVkIHN0cmluZywgZ290ICR7dHlwZW9mIHN0cn1gKTsKICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyKSk7CiAgfQogIGZ1bmN0aW9uIGJpdExlbihuKSB7CiAgICBsZXQgbGVuOwogICAgZm9yIChsZW4gPSAwOyBuID4gXzBuMjsgbiA+Pj0gXzFuMiwgbGVuICs9IDEpCiAgICAgIDsKICAgIHJldHVybiBsZW47CiAgfQogIGZ1bmN0aW9uIGJpdEdldChuLCBwb3MpIHsKICAgIHJldHVybiBuID4+IEJpZ0ludChwb3MpICYgXzFuMjsKICB9CiAgZnVuY3Rpb24gYml0U2V0KG4sIHBvcywgdmFsdWUpIHsKICAgIHJldHVybiBuIHwgKHZhbHVlID8gXzFuMiA6IF8wbjIpIDw8IEJpZ0ludChwb3MpOwogIH0KICBmdW5jdGlvbiBjcmVhdGVIbWFjRHJiZyhoYXNoTGVuLCBxQnl0ZUxlbiwgaG1hY0ZuKSB7CiAgICBpZiAodHlwZW9mIGhhc2hMZW4gIT09ICJudW1iZXIiIHx8IGhhc2hMZW4gPCAyKQogICAgICB0aHJvdyBuZXcgRXJyb3IoImhhc2hMZW4gbXVzdCBiZSBhIG51bWJlciIpOwogICAgaWYgKHR5cGVvZiBxQnl0ZUxlbiAhPT0gIm51bWJlciIgfHwgcUJ5dGVMZW4gPCAyKQogICAgICB0aHJvdyBuZXcgRXJyb3IoInFCeXRlTGVuIG11c3QgYmUgYSBudW1iZXIiKTsKICAgIGlmICh0eXBlb2YgaG1hY0ZuICE9PSAiZnVuY3Rpb24iKQogICAgICB0aHJvdyBuZXcgRXJyb3IoImhtYWNGbiBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKICAgIGxldCB2ID0gdThuKGhhc2hMZW4pOwogICAgbGV0IGsgPSB1OG4oaGFzaExlbik7CiAgICBsZXQgaSA9IDA7CiAgICBjb25zdCByZXNldDIgPSAoKSA9PiB7CiAgICAgIHYuZmlsbCgxKTsKICAgICAgay5maWxsKDApOwogICAgICBpID0gMDsKICAgIH07CiAgICBjb25zdCBoID0gKC4uLmIpID0+IGhtYWNGbihrLCB2LCAuLi5iKTsKICAgIGNvbnN0IHJlc2VlZCA9IChzZWVkID0gdThuKCkpID0+IHsKICAgICAgayA9IGgodThmcihbMF0pLCBzZWVkKTsKICAgICAgdiA9IGgoKTsKICAgICAgaWYgKHNlZWQubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgayA9IGgodThmcihbMV0pLCBzZWVkKTsKICAgICAgdiA9IGgoKTsKICAgIH07CiAgICBjb25zdCBnZW4yID0gKCkgPT4gewogICAgICBpZiAoaSsrID49IDFlMykKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImRyYmc6IHRyaWVkIDEwMDAgdmFsdWVzIik7CiAgICAgIGxldCBsZW4gPSAwOwogICAgICBjb25zdCBvdXQgPSBbXTsKICAgICAgd2hpbGUgKGxlbiA8IHFCeXRlTGVuKSB7CiAgICAgICAgdiA9IGgoKTsKICAgICAgICBjb25zdCBzbCA9IHYuc2xpY2UoKTsKICAgICAgICBvdXQucHVzaChzbCk7CiAgICAgICAgbGVuICs9IHYubGVuZ3RoOwogICAgICB9CiAgICAgIHJldHVybiBjb25jYXRCeXRlczMoLi4ub3V0KTsKICAgIH07CiAgICBjb25zdCBnZW5VbnRpbCA9IChzZWVkLCBwcmVkKSA9PiB7CiAgICAgIHJlc2V0MigpOwogICAgICByZXNlZWQoc2VlZCk7CiAgICAgIGxldCByZXMgPSB2b2lkIDA7CiAgICAgIHdoaWxlICghKHJlcyA9IHByZWQoZ2VuMigpKSkpCiAgICAgICAgcmVzZWVkKCk7CiAgICAgIHJlc2V0MigpOwogICAgICByZXR1cm4gcmVzOwogICAgfTsKICAgIHJldHVybiBnZW5VbnRpbDsKICB9CiAgZnVuY3Rpb24gdmFsaWRhdGVPYmplY3Qob2JqZWN0LCB2YWxpZGF0b3JzLCBvcHRWYWxpZGF0b3JzID0ge30pIHsKICAgIGNvbnN0IGNoZWNrRmllbGQgPSAoZmllbGROYW1lLCB0eXBlLCBpc09wdGlvbmFsKSA9PiB7CiAgICAgIGNvbnN0IGNoZWNrVmFsID0gdmFsaWRhdG9yRm5zW3R5cGVdOwogICAgICBpZiAodHlwZW9mIGNoZWNrVmFsICE9PSAiZnVuY3Rpb24iKQogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWxpZGF0b3IgIiR7dHlwZX0iLCBleHBlY3RlZCBmdW5jdGlvbmApOwogICAgICBjb25zdCB2YWwgPSBvYmplY3RbZmllbGROYW1lXTsKICAgICAgaWYgKGlzT3B0aW9uYWwgJiYgdmFsID09PSB2b2lkIDApCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoIWNoZWNrVmFsKHZhbCwgb2JqZWN0KSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbSAke1N0cmluZyhmaWVsZE5hbWUpfT0ke3ZhbH0gKCR7dHlwZW9mIHZhbH0pLCBleHBlY3RlZCAke3R5cGV9YCk7CiAgICAgIH0KICAgIH07CiAgICBmb3IgKGNvbnN0IFtmaWVsZE5hbWUsIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbGlkYXRvcnMpKQogICAgICBjaGVja0ZpZWxkKGZpZWxkTmFtZSwgdHlwZSwgZmFsc2UpOwogICAgZm9yIChjb25zdCBbZmllbGROYW1lLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhvcHRWYWxpZGF0b3JzKSkKICAgICAgY2hlY2tGaWVsZChmaWVsZE5hbWUsIHR5cGUsIHRydWUpOwogICAgcmV0dXJuIG9iamVjdDsKICB9CiAgdmFyIF8wbjIsIF8xbjIsIF8ybjIsIGhleGVzMiwgYXNjaWlzLCBiaXRNYXNrLCB1OG4sIHU4ZnIsIHZhbGlkYXRvckZuczsKICB2YXIgaW5pdF91dGlsczQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L3V0aWxzLmpzIigpIHsKICAgICAgXzBuMiA9IEJpZ0ludCgwKTsKICAgICAgXzFuMiA9IEJpZ0ludCgxKTsKICAgICAgXzJuMiA9IEJpZ0ludCgyKTsKICAgICAgaGV4ZXMyID0gLyogQF9fUFVSRV9fICovIEFycmF5LmZyb20oeyBsZW5ndGg6IDI1NiB9LCAoXywgaSkgPT4gaS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgIjAiKSk7CiAgICAgIGFzY2lpcyA9IHsgXzA6IDQ4LCBfOTogNTcsIF9BOiA2NSwgX0Y6IDcwLCBfYTogOTcsIF9mOiAxMDIgfTsKICAgICAgYml0TWFzayA9IChuKSA9PiAoXzJuMiA8PCBCaWdJbnQobiAtIDEpKSAtIF8xbjI7CiAgICAgIHU4biA9IChkYXRhKSA9PiBuZXcgVWludDhBcnJheShkYXRhKTsKICAgICAgdThmciA9IChhcnIpID0+IFVpbnQ4QXJyYXkuZnJvbShhcnIpOwogICAgICB2YWxpZGF0b3JGbnMgPSB7CiAgICAgICAgYmlnaW50OiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAiYmlnaW50IiwKICAgICAgICBmdW5jdGlvbjogKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gImZ1bmN0aW9uIiwKICAgICAgICBib29sZWFuOiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAiYm9vbGVhbiIsCiAgICAgICAgc3RyaW5nOiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAic3RyaW5nIiwKICAgICAgICBzdHJpbmdPclVpbnQ4QXJyYXk6ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICJzdHJpbmciIHx8IGlzQnl0ZXMyKHZhbCksCiAgICAgICAgaXNTYWZlSW50ZWdlcjogKHZhbCkgPT4gTnVtYmVyLmlzU2FmZUludGVnZXIodmFsKSwKICAgICAgICBhcnJheTogKHZhbCkgPT4gQXJyYXkuaXNBcnJheSh2YWwpLAogICAgICAgIGZpZWxkOiAodmFsLCBvYmplY3QpID0+IG9iamVjdC5GcC5pc1ZhbGlkKHZhbCksCiAgICAgICAgaGFzaDogKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gImZ1bmN0aW9uIiAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWwub3V0cHV0TGVuKQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvbW9kdWxhci5qcwogIGZ1bmN0aW9uIG1vZChhLCBiKSB7CiAgICBjb25zdCByZXN1bHQgPSBhICUgYjsKICAgIHJldHVybiByZXN1bHQgPj0gXzBuMyA/IHJlc3VsdCA6IGIgKyByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIHBvdyhudW0sIHBvd2VyLCBtb2R1bG8pIHsKICAgIGlmIChtb2R1bG8gPD0gXzBuMyB8fCBwb3dlciA8IF8wbjMpCiAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcG93ZXIvbW9kdWxvID4gMCIpOwogICAgaWYgKG1vZHVsbyA9PT0gXzFuMykKICAgICAgcmV0dXJuIF8wbjM7CiAgICBsZXQgcmVzID0gXzFuMzsKICAgIHdoaWxlIChwb3dlciA+IF8wbjMpIHsKICAgICAgaWYgKHBvd2VyICYgXzFuMykKICAgICAgICByZXMgPSByZXMgKiBudW0gJSBtb2R1bG87CiAgICAgIG51bSA9IG51bSAqIG51bSAlIG1vZHVsbzsKICAgICAgcG93ZXIgPj49IF8xbjM7CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KICBmdW5jdGlvbiBwb3cyKHgsIHBvd2VyLCBtb2R1bG8pIHsKICAgIGxldCByZXMgPSB4OwogICAgd2hpbGUgKHBvd2VyLS0gPiBfMG4zKSB7CiAgICAgIHJlcyAqPSByZXM7CiAgICAgIHJlcyAlPSBtb2R1bG87CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KICBmdW5jdGlvbiBpbnZlcnQobnVtYmVyMiwgbW9kdWxvKSB7CiAgICBpZiAobnVtYmVyMiA9PT0gXzBuMyB8fCBtb2R1bG8gPD0gXzBuMykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmVydDogZXhwZWN0ZWQgcG9zaXRpdmUgaW50ZWdlcnMsIGdvdCBuPSR7bnVtYmVyMn0gbW9kPSR7bW9kdWxvfWApOwogICAgfQogICAgbGV0IGEgPSBtb2QobnVtYmVyMiwgbW9kdWxvKTsKICAgIGxldCBiID0gbW9kdWxvOwogICAgbGV0IHggPSBfMG4zLCB5ID0gXzFuMywgdSA9IF8xbjMsIHYgPSBfMG4zOwogICAgd2hpbGUgKGEgIT09IF8wbjMpIHsKICAgICAgY29uc3QgcSA9IGIgLyBhOwogICAgICBjb25zdCByID0gYiAlIGE7CiAgICAgIGNvbnN0IG0gPSB4IC0gdSAqIHE7CiAgICAgIGNvbnN0IG4gPSB5IC0gdiAqIHE7CiAgICAgIGIgPSBhLCBhID0gciwgeCA9IHUsIHkgPSB2LCB1ID0gbSwgdiA9IG47CiAgICB9CiAgICBjb25zdCBnY2QgPSBiOwogICAgaWYgKGdjZCAhPT0gXzFuMykKICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZlcnQ6IGRvZXMgbm90IGV4aXN0Iik7CiAgICByZXR1cm4gbW9kKHgsIG1vZHVsbyk7CiAgfQogIGZ1bmN0aW9uIHRvbmVsbGlTaGFua3MoUCkgewogICAgY29uc3QgbGVnZW5kcmVDID0gKFAgLSBfMW4zKSAvIF8ybjM7CiAgICBsZXQgUSwgUywgWjsKICAgIGZvciAoUSA9IFAgLSBfMW4zLCBTID0gMDsgUSAlIF8ybjMgPT09IF8wbjM7IFEgLz0gXzJuMywgUysrKQogICAgICA7CiAgICBmb3IgKFogPSBfMm4zOyBaIDwgUCAmJiBwb3coWiwgbGVnZW5kcmVDLCBQKSAhPT0gUCAtIF8xbjM7IForKykKICAgICAgOwogICAgaWYgKFMgPT09IDEpIHsKICAgICAgY29uc3QgcDFkaXY0ID0gKFAgKyBfMW4zKSAvIF80bjsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRvbmVsbGlGYXN0KEZwMiwgbikgewogICAgICAgIGNvbnN0IHJvb3QyID0gRnAyLnBvdyhuLCBwMWRpdjQpOwogICAgICAgIGlmICghRnAyLmVxbChGcDIuc3FyKHJvb3QyKSwgbikpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNxdWFyZSByb290Iik7CiAgICAgICAgcmV0dXJuIHJvb3QyOwogICAgICB9OwogICAgfQogICAgY29uc3QgUTFkaXYyID0gKFEgKyBfMW4zKSAvIF8ybjM7CiAgICByZXR1cm4gZnVuY3Rpb24gdG9uZWxsaVNsb3coRnAyLCBuKSB7CiAgICAgIGlmIChGcDIucG93KG4sIGxlZ2VuZHJlQykgPT09IEZwMi5uZWcoRnAyLk9ORSkpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpOwogICAgICBsZXQgciA9IFM7CiAgICAgIGxldCBnID0gRnAyLnBvdyhGcDIubXVsKEZwMi5PTkUsIFopLCBRKTsKICAgICAgbGV0IHggPSBGcDIucG93KG4sIFExZGl2Mik7CiAgICAgIGxldCBiID0gRnAyLnBvdyhuLCBRKTsKICAgICAgd2hpbGUgKCFGcDIuZXFsKGIsIEZwMi5PTkUpKSB7CiAgICAgICAgaWYgKEZwMi5lcWwoYiwgRnAyLlpFUk8pKQogICAgICAgICAgcmV0dXJuIEZwMi5aRVJPOwogICAgICAgIGxldCBtID0gMTsKICAgICAgICBmb3IgKGxldCB0MiA9IEZwMi5zcXIoYik7IG0gPCByOyBtKyspIHsKICAgICAgICAgIGlmIChGcDIuZXFsKHQyLCBGcDIuT05FKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB0MiA9IEZwMi5zcXIodDIpOwogICAgICAgIH0KICAgICAgICBjb25zdCBnZTIgPSBGcDIucG93KGcsIF8xbjMgPDwgQmlnSW50KHIgLSBtIC0gMSkpOwogICAgICAgIGcgPSBGcDIuc3FyKGdlMik7CiAgICAgICAgeCA9IEZwMi5tdWwoeCwgZ2UyKTsKICAgICAgICBiID0gRnAyLm11bChiLCBnKTsKICAgICAgICByID0gbTsKICAgICAgfQogICAgICByZXR1cm4geDsKICAgIH07CiAgfQogIGZ1bmN0aW9uIEZwU3FydChQKSB7CiAgICBpZiAoUCAlIF80biA9PT0gXzNuKSB7CiAgICAgIGNvbnN0IHAxZGl2NCA9IChQICsgXzFuMykgLyBfNG47CiAgICAgIHJldHVybiBmdW5jdGlvbiBzcXJ0M21vZDQoRnAyLCBuKSB7CiAgICAgICAgY29uc3Qgcm9vdDIgPSBGcDIucG93KG4sIHAxZGl2NCk7CiAgICAgICAgaWYgKCFGcDIuZXFsKEZwMi5zcXIocm9vdDIpLCBuKSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QiKTsKICAgICAgICByZXR1cm4gcm9vdDI7CiAgICAgIH07CiAgICB9CiAgICBpZiAoUCAlIF84biA9PT0gXzVuKSB7CiAgICAgIGNvbnN0IGMxID0gKFAgLSBfNW4pIC8gXzhuOwogICAgICByZXR1cm4gZnVuY3Rpb24gc3FydDVtb2Q4KEZwMiwgbikgewogICAgICAgIGNvbnN0IG4yID0gRnAyLm11bChuLCBfMm4zKTsKICAgICAgICBjb25zdCB2ID0gRnAyLnBvdyhuMiwgYzEpOwogICAgICAgIGNvbnN0IG52ID0gRnAyLm11bChuLCB2KTsKICAgICAgICBjb25zdCBpID0gRnAyLm11bChGcDIubXVsKG52LCBfMm4zKSwgdik7CiAgICAgICAgY29uc3Qgcm9vdDIgPSBGcDIubXVsKG52LCBGcDIuc3ViKGksIEZwMi5PTkUpKTsKICAgICAgICBpZiAoIUZwMi5lcWwoRnAyLnNxcihyb290MiksIG4pKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpOwogICAgICAgIHJldHVybiByb290MjsKICAgICAgfTsKICAgIH0KICAgIGlmIChQICUgXzE2biA9PT0gXzluKSB7CiAgICB9CiAgICByZXR1cm4gdG9uZWxsaVNoYW5rcyhQKTsKICB9CiAgZnVuY3Rpb24gdmFsaWRhdGVGaWVsZChmaWVsZCkgewogICAgY29uc3QgaW5pdGlhbCA9IHsKICAgICAgT1JERVI6ICJiaWdpbnQiLAogICAgICBNQVNLOiAiYmlnaW50IiwKICAgICAgQllURVM6ICJpc1NhZmVJbnRlZ2VyIiwKICAgICAgQklUUzogImlzU2FmZUludGVnZXIiCiAgICB9OwogICAgY29uc3Qgb3B0cyA9IEZJRUxEX0ZJRUxEUy5yZWR1Y2UoKG1hcCwgdmFsKSA9PiB7CiAgICAgIG1hcFt2YWxdID0gImZ1bmN0aW9uIjsKICAgICAgcmV0dXJuIG1hcDsKICAgIH0sIGluaXRpYWwpOwogICAgcmV0dXJuIHZhbGlkYXRlT2JqZWN0KGZpZWxkLCBvcHRzKTsKICB9CiAgZnVuY3Rpb24gRnBQb3coZjIsIG51bSwgcG93ZXIpIHsKICAgIGlmIChwb3dlciA8IF8wbjMpCiAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcG93ZXIgPiAwIik7CiAgICBpZiAocG93ZXIgPT09IF8wbjMpCiAgICAgIHJldHVybiBmMi5PTkU7CiAgICBpZiAocG93ZXIgPT09IF8xbjMpCiAgICAgIHJldHVybiBudW07CiAgICBsZXQgcCA9IGYyLk9ORTsKICAgIGxldCBkID0gbnVtOwogICAgd2hpbGUgKHBvd2VyID4gXzBuMykgewogICAgICBpZiAocG93ZXIgJiBfMW4zKQogICAgICAgIHAgPSBmMi5tdWwocCwgZCk7CiAgICAgIGQgPSBmMi5zcXIoZCk7CiAgICAgIHBvd2VyID4+PSBfMW4zOwogICAgfQogICAgcmV0dXJuIHA7CiAgfQogIGZ1bmN0aW9uIEZwSW52ZXJ0QmF0Y2goZjIsIG51bXMpIHsKICAgIGNvbnN0IHRtcCA9IG5ldyBBcnJheShudW1zLmxlbmd0aCk7CiAgICBjb25zdCBsYXN0TXVsdGlwbGllZCA9IG51bXMucmVkdWNlKChhY2MsIG51bSwgaSkgPT4gewogICAgICBpZiAoZjIuaXMwKG51bSkpCiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgdG1wW2ldID0gYWNjOwogICAgICByZXR1cm4gZjIubXVsKGFjYywgbnVtKTsKICAgIH0sIGYyLk9ORSk7CiAgICBjb25zdCBpbnZlcnRlZCA9IGYyLmludihsYXN0TXVsdGlwbGllZCk7CiAgICBudW1zLnJlZHVjZVJpZ2h0KChhY2MsIG51bSwgaSkgPT4gewogICAgICBpZiAoZjIuaXMwKG51bSkpCiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgdG1wW2ldID0gZjIubXVsKGFjYywgdG1wW2ldKTsKICAgICAgcmV0dXJuIGYyLm11bChhY2MsIG51bSk7CiAgICB9LCBpbnZlcnRlZCk7CiAgICByZXR1cm4gdG1wOwogIH0KICBmdW5jdGlvbiBuTGVuZ3RoKG4sIG5CaXRMZW5ndGgpIHsKICAgIGNvbnN0IF9uQml0TGVuZ3RoID0gbkJpdExlbmd0aCAhPT0gdm9pZCAwID8gbkJpdExlbmd0aCA6IG4udG9TdHJpbmcoMikubGVuZ3RoOwogICAgY29uc3QgbkJ5dGVMZW5ndGggPSBNYXRoLmNlaWwoX25CaXRMZW5ndGggLyA4KTsKICAgIHJldHVybiB7IG5CaXRMZW5ndGg6IF9uQml0TGVuZ3RoLCBuQnl0ZUxlbmd0aCB9OwogIH0KICBmdW5jdGlvbiBGaWVsZChPUkRFUiwgYml0TGVuMiwgaXNMRTIgPSBmYWxzZSwgcmVkZWYgPSB7fSkgewogICAgaWYgKE9SREVSIDw9IF8wbjMpCiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgRmllbGQgT1JERVIgPiAwLCBnb3QgJHtPUkRFUn1gKTsKICAgIGNvbnN0IHsgbkJpdExlbmd0aDogQklUUywgbkJ5dGVMZW5ndGg6IEJZVEVTIH0gPSBuTGVuZ3RoKE9SREVSLCBiaXRMZW4yKTsKICAgIGlmIChCWVRFUyA+IDIwNDgpCiAgICAgIHRocm93IG5ldyBFcnJvcigiRmllbGQgbGVuZ3RocyBvdmVyIDIwNDggYnl0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQiKTsKICAgIGNvbnN0IHNxcnRQID0gRnBTcXJ0KE9SREVSKTsKICAgIGNvbnN0IGYyID0gT2JqZWN0LmZyZWV6ZSh7CiAgICAgIE9SREVSLAogICAgICBCSVRTLAogICAgICBCWVRFUywKICAgICAgTUFTSzogYml0TWFzayhCSVRTKSwKICAgICAgWkVSTzogXzBuMywKICAgICAgT05FOiBfMW4zLAogICAgICBjcmVhdGU6IChudW0pID0+IG1vZChudW0sIE9SREVSKSwKICAgICAgaXNWYWxpZDogKG51bSkgPT4gewogICAgICAgIGlmICh0eXBlb2YgbnVtICE9PSAiYmlnaW50IikKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmaWVsZCBlbGVtZW50OiBleHBlY3RlZCBiaWdpbnQsIGdvdCAke3R5cGVvZiBudW19YCk7CiAgICAgICAgcmV0dXJuIF8wbjMgPD0gbnVtICYmIG51bSA8IE9SREVSOwogICAgICB9LAogICAgICBpczA6IChudW0pID0+IG51bSA9PT0gXzBuMywKICAgICAgaXNPZGQ6IChudW0pID0+IChudW0gJiBfMW4zKSA9PT0gXzFuMywKICAgICAgbmVnOiAobnVtKSA9PiBtb2QoLW51bSwgT1JERVIpLAogICAgICBlcWw6IChsaHMsIHJocykgPT4gbGhzID09PSByaHMsCiAgICAgIHNxcjogKG51bSkgPT4gbW9kKG51bSAqIG51bSwgT1JERVIpLAogICAgICBhZGQ6IChsaHMsIHJocykgPT4gbW9kKGxocyArIHJocywgT1JERVIpLAogICAgICBzdWI6IChsaHMsIHJocykgPT4gbW9kKGxocyAtIHJocywgT1JERVIpLAogICAgICBtdWw6IChsaHMsIHJocykgPT4gbW9kKGxocyAqIHJocywgT1JERVIpLAogICAgICBwb3c6IChudW0sIHBvd2VyKSA9PiBGcFBvdyhmMiwgbnVtLCBwb3dlciksCiAgICAgIGRpdjogKGxocywgcmhzKSA9PiBtb2QobGhzICogaW52ZXJ0KHJocywgT1JERVIpLCBPUkRFUiksCiAgICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBkb2Vzbid0IG5vcm1hbGl6ZQogICAgICBzcXJOOiAobnVtKSA9PiBudW0gKiBudW0sCiAgICAgIGFkZE46IChsaHMsIHJocykgPT4gbGhzICsgcmhzLAogICAgICBzdWJOOiAobGhzLCByaHMpID0+IGxocyAtIHJocywKICAgICAgbXVsTjogKGxocywgcmhzKSA9PiBsaHMgKiByaHMsCiAgICAgIGludjogKG51bSkgPT4gaW52ZXJ0KG51bSwgT1JERVIpLAogICAgICBzcXJ0OiByZWRlZi5zcXJ0IHx8ICgobikgPT4gc3FydFAoZjIsIG4pKSwKICAgICAgaW52ZXJ0QmF0Y2g6IChsc3QpID0+IEZwSW52ZXJ0QmF0Y2goZjIsIGxzdCksCiAgICAgIC8vIFRPRE86IGRvIHdlIHJlYWxseSBuZWVkIGNvbnN0YW50IGNtb3Y/CiAgICAgIC8vIFdlIGRvbid0IGhhdmUgY29uc3QtdGltZSBiaWdpbnRzIGFueXdheSwgc28gcHJvYmFibHkgd2lsbCBiZSBub3QgdmVyeSB1c2VmdWwKICAgICAgY21vdjogKGEsIGIsIGMpID0+IGMgPyBiIDogYSwKICAgICAgdG9CeXRlczogKG51bSkgPT4gaXNMRTIgPyBudW1iZXJUb0J5dGVzTEUobnVtLCBCWVRFUykgOiBudW1iZXJUb0J5dGVzQkUobnVtLCBCWVRFUyksCiAgICAgIGZyb21CeXRlczogKGJ5dGVzMikgPT4gewogICAgICAgIGlmIChieXRlczIubGVuZ3RoICE9PSBCWVRFUykKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRnAuZnJvbUJ5dGVzOiBleHBlY3RlZCAke0JZVEVTfSwgZ290ICR7Ynl0ZXMyLmxlbmd0aH1gKTsKICAgICAgICByZXR1cm4gaXNMRTIgPyBieXRlc1RvTnVtYmVyTEUoYnl0ZXMyKSA6IGJ5dGVzVG9OdW1iZXJCRShieXRlczIpOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBPYmplY3QuZnJlZXplKGYyKTsKICB9CiAgZnVuY3Rpb24gZ2V0RmllbGRCeXRlc0xlbmd0aChmaWVsZE9yZGVyKSB7CiAgICBpZiAodHlwZW9mIGZpZWxkT3JkZXIgIT09ICJiaWdpbnQiKQogICAgICB0aHJvdyBuZXcgRXJyb3IoImZpZWxkIG9yZGVyIG11c3QgYmUgYmlnaW50Iik7CiAgICBjb25zdCBiaXRMZW5ndGggPSBmaWVsZE9yZGVyLnRvU3RyaW5nKDIpLmxlbmd0aDsKICAgIHJldHVybiBNYXRoLmNlaWwoYml0TGVuZ3RoIC8gOCk7CiAgfQogIGZ1bmN0aW9uIGdldE1pbkhhc2hMZW5ndGgoZmllbGRPcmRlcikgewogICAgY29uc3QgbGVuZ3RoID0gZ2V0RmllbGRCeXRlc0xlbmd0aChmaWVsZE9yZGVyKTsKICAgIHJldHVybiBsZW5ndGggKyBNYXRoLmNlaWwobGVuZ3RoIC8gMik7CiAgfQogIGZ1bmN0aW9uIG1hcEhhc2hUb0ZpZWxkKGtleSwgZmllbGRPcmRlciwgaXNMRTIgPSBmYWxzZSkgewogICAgY29uc3QgbGVuID0ga2V5Lmxlbmd0aDsKICAgIGNvbnN0IGZpZWxkTGVuID0gZ2V0RmllbGRCeXRlc0xlbmd0aChmaWVsZE9yZGVyKTsKICAgIGNvbnN0IG1pbkxlbiA9IGdldE1pbkhhc2hMZW5ndGgoZmllbGRPcmRlcik7CiAgICBpZiAobGVuIDwgMTYgfHwgbGVuIDwgbWluTGVuIHx8IGxlbiA+IDEwMjQpCiAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHttaW5MZW59LTEwMjQgYnl0ZXMgb2YgaW5wdXQsIGdvdCAke2xlbn1gKTsKICAgIGNvbnN0IG51bSA9IGlzTEUyID8gYnl0ZXNUb051bWJlckJFKGtleSkgOiBieXRlc1RvTnVtYmVyTEUoa2V5KTsKICAgIGNvbnN0IHJlZHVjZWQgPSBtb2QobnVtLCBmaWVsZE9yZGVyIC0gXzFuMykgKyBfMW4zOwogICAgcmV0dXJuIGlzTEUyID8gbnVtYmVyVG9CeXRlc0xFKHJlZHVjZWQsIGZpZWxkTGVuKSA6IG51bWJlclRvQnl0ZXNCRShyZWR1Y2VkLCBmaWVsZExlbik7CiAgfQogIHZhciBfMG4zLCBfMW4zLCBfMm4zLCBfM24sIF80biwgXzVuLCBfOG4sIF85biwgXzE2biwgRklFTERfRklFTERTOwogIHZhciBpbml0X21vZHVsYXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L21vZHVsYXIuanMiKCkgewogICAgICBpbml0X3V0aWxzNCgpOwogICAgICBfMG4zID0gQmlnSW50KDApOwogICAgICBfMW4zID0gQmlnSW50KDEpOwogICAgICBfMm4zID0gQmlnSW50KDIpOwogICAgICBfM24gPSBCaWdJbnQoMyk7CiAgICAgIF80biA9IEJpZ0ludCg0KTsKICAgICAgXzVuID0gQmlnSW50KDUpOwogICAgICBfOG4gPSBCaWdJbnQoOCk7CiAgICAgIF85biA9IEJpZ0ludCg5KTsKICAgICAgXzE2biA9IEJpZ0ludCgxNik7CiAgICAgIEZJRUxEX0ZJRUxEUyA9IFsKICAgICAgICAiY3JlYXRlIiwKICAgICAgICAiaXNWYWxpZCIsCiAgICAgICAgImlzMCIsCiAgICAgICAgIm5lZyIsCiAgICAgICAgImludiIsCiAgICAgICAgInNxcnQiLAogICAgICAgICJzcXIiLAogICAgICAgICJlcWwiLAogICAgICAgICJhZGQiLAogICAgICAgICJzdWIiLAogICAgICAgICJtdWwiLAogICAgICAgICJwb3ciLAogICAgICAgICJkaXYiLAogICAgICAgICJhZGROIiwKICAgICAgICAic3ViTiIsCiAgICAgICAgIm11bE4iLAogICAgICAgICJzcXJOIgogICAgICBdOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvY3VydmUuanMKICBmdW5jdGlvbiB3TkFGKGMsIGJpdHMpIHsKICAgIGNvbnN0IGNvbnN0VGltZU5lZ2F0ZSA9IChjb25kaXRpb24sIGl0ZW0pID0+IHsKICAgICAgY29uc3QgbmVnID0gaXRlbS5uZWdhdGUoKTsKICAgICAgcmV0dXJuIGNvbmRpdGlvbiA/IG5lZyA6IGl0ZW07CiAgICB9OwogICAgY29uc3Qgb3B0cyA9IChXKSA9PiB7CiAgICAgIGNvbnN0IHdpbmRvd3MgPSBNYXRoLmNlaWwoYml0cyAvIFcpICsgMTsKICAgICAgY29uc3Qgd2luZG93U2l6ZSA9IDIgKiogKFcgLSAxKTsKICAgICAgcmV0dXJuIHsgd2luZG93cywgd2luZG93U2l6ZSB9OwogICAgfTsKICAgIHJldHVybiB7CiAgICAgIGNvbnN0VGltZU5lZ2F0ZSwKICAgICAgLy8gbm9uLWNvbnN0IHRpbWUgbXVsdGlwbGljYXRpb24gbGFkZGVyCiAgICAgIHVuc2FmZUxhZGRlcihlbG0sIG4pIHsKICAgICAgICBsZXQgcCA9IGMuWkVSTzsKICAgICAgICBsZXQgZCA9IGVsbTsKICAgICAgICB3aGlsZSAobiA+IF8wbjQpIHsKICAgICAgICAgIGlmIChuICYgXzFuNCkKICAgICAgICAgICAgcCA9IHAuYWRkKGQpOwogICAgICAgICAgZCA9IGQuZG91YmxlKCk7CiAgICAgICAgICBuID4+PSBfMW40OwogICAgICAgIH0KICAgICAgICByZXR1cm4gcDsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgYSB3TkFGIHByZWNvbXB1dGF0aW9uIHdpbmRvdy4gVXNlZCBmb3IgY2FjaGluZy4KICAgICAgICogRGVmYXVsdCB3aW5kb3cgc2l6ZSBpcyBzZXQgYnkgYHV0aWxzLnByZWNvbXB1dGUoKWAgYW5kIGlzIGVxdWFsIHRvIDguCiAgICAgICAqIE51bWJlciBvZiBwcmVjb21wdXRlZCBwb2ludHMgZGVwZW5kcyBvbiB0aGUgY3VydmUgc2l6ZToKICAgICAgICogMl4o8J2RiuKIkjEpICogKE1hdGguY2VpbCjwnZGbIC8g8J2RiikgKyAxKSwgd2hlcmU6CiAgICAgICAqIC0g8J2RiiBpcyB0aGUgd2luZG93IHNpemUKICAgICAgICogLSDwnZGbIGlzIHRoZSBiaXRsZW5ndGggb2YgdGhlIGN1cnZlIG9yZGVyLgogICAgICAgKiBGb3IgYSAyNTYtYml0IGN1cnZlIGFuZCB3aW5kb3cgc2l6ZSA4LCB0aGUgbnVtYmVyIG9mIHByZWNvbXB1dGVkIHBvaW50cyBpcyAxMjggKiAzMyA9IDQyMjQuCiAgICAgICAqIEByZXR1cm5zIHByZWNvbXB1dGVkIHBvaW50IHRhYmxlcyBmbGF0dGVuZWQgdG8gYSBzaW5nbGUgYXJyYXkKICAgICAgICovCiAgICAgIHByZWNvbXB1dGVXaW5kb3coZWxtLCBXKSB7CiAgICAgICAgY29uc3QgeyB3aW5kb3dzLCB3aW5kb3dTaXplIH0gPSBvcHRzKFcpOwogICAgICAgIGNvbnN0IHBvaW50cyA9IFtdOwogICAgICAgIGxldCBwID0gZWxtOwogICAgICAgIGxldCBiYXNlMiA9IHA7CiAgICAgICAgZm9yIChsZXQgd2luZG93MiA9IDA7IHdpbmRvdzIgPCB3aW5kb3dzOyB3aW5kb3cyKyspIHsKICAgICAgICAgIGJhc2UyID0gcDsKICAgICAgICAgIHBvaW50cy5wdXNoKGJhc2UyKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgd2luZG93U2l6ZTsgaSsrKSB7CiAgICAgICAgICAgIGJhc2UyID0gYmFzZTIuYWRkKHApOwogICAgICAgICAgICBwb2ludHMucHVzaChiYXNlMik7CiAgICAgICAgICB9CiAgICAgICAgICBwID0gYmFzZTIuZG91YmxlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb2ludHM7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBJbXBsZW1lbnRzIGVjIG11bHRpcGxpY2F0aW9uIHVzaW5nIHByZWNvbXB1dGVkIHRhYmxlcyBhbmQgdy1hcnkgbm9uLWFkamFjZW50IGZvcm0uCiAgICAgICAqIEBwYXJhbSBXIHdpbmRvdyBzaXplCiAgICAgICAqIEBwYXJhbSBwcmVjb21wdXRlcyBwcmVjb21wdXRlZCB0YWJsZXMKICAgICAgICogQHBhcmFtIG4gc2NhbGFyICh3ZSBkb24ndCBjaGVjayBoZXJlLCBidXQgc2hvdWxkIGJlIGxlc3MgdGhhbiBjdXJ2ZSBvcmRlcikKICAgICAgICogQHJldHVybnMgcmVhbCBhbmQgZmFrZSAoZm9yIGNvbnN0LXRpbWUpIHBvaW50cwogICAgICAgKi8KICAgICAgd05BRihXLCBwcmVjb21wdXRlcywgbikgewogICAgICAgIGNvbnN0IHsgd2luZG93cywgd2luZG93U2l6ZSB9ID0gb3B0cyhXKTsKICAgICAgICBsZXQgcCA9IGMuWkVSTzsKICAgICAgICBsZXQgZjIgPSBjLkJBU0U7CiAgICAgICAgY29uc3QgbWFzayA9IEJpZ0ludCgyICoqIFcgLSAxKTsKICAgICAgICBjb25zdCBtYXhOdW1iZXIgPSAyICoqIFc7CiAgICAgICAgY29uc3Qgc2hpZnRCeSA9IEJpZ0ludChXKTsKICAgICAgICBmb3IgKGxldCB3aW5kb3cyID0gMDsgd2luZG93MiA8IHdpbmRvd3M7IHdpbmRvdzIrKykgewogICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gd2luZG93MiAqIHdpbmRvd1NpemU7CiAgICAgICAgICBsZXQgd2JpdHMgPSBOdW1iZXIobiAmIG1hc2spOwogICAgICAgICAgbiA+Pj0gc2hpZnRCeTsKICAgICAgICAgIGlmICh3Yml0cyA+IHdpbmRvd1NpemUpIHsKICAgICAgICAgICAgd2JpdHMgLT0gbWF4TnVtYmVyOwogICAgICAgICAgICBuICs9IF8xbjQ7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBvZmZzZXQxID0gb2Zmc2V0OwogICAgICAgICAgY29uc3Qgb2Zmc2V0MiA9IG9mZnNldCArIE1hdGguYWJzKHdiaXRzKSAtIDE7CiAgICAgICAgICBjb25zdCBjb25kMSA9IHdpbmRvdzIgJSAyICE9PSAwOwogICAgICAgICAgY29uc3QgY29uZDIgPSB3Yml0cyA8IDA7CiAgICAgICAgICBpZiAod2JpdHMgPT09IDApIHsKICAgICAgICAgICAgZjIgPSBmMi5hZGQoY29uc3RUaW1lTmVnYXRlKGNvbmQxLCBwcmVjb21wdXRlc1tvZmZzZXQxXSkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcCA9IHAuYWRkKGNvbnN0VGltZU5lZ2F0ZShjb25kMiwgcHJlY29tcHV0ZXNbb2Zmc2V0Ml0pKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgcCwgZjogZjIgfTsKICAgICAgfSwKICAgICAgd05BRkNhY2hlZChQLCBwcmVjb21wdXRlc01hcCwgbiwgdHJhbnNmb3JtKSB7CiAgICAgICAgY29uc3QgVyA9IFAuX1dJTkRPV19TSVpFIHx8IDE7CiAgICAgICAgbGV0IGNvbXAgPSBwcmVjb21wdXRlc01hcC5nZXQoUCk7CiAgICAgICAgaWYgKCFjb21wKSB7CiAgICAgICAgICBjb21wID0gdGhpcy5wcmVjb21wdXRlV2luZG93KFAsIFcpOwogICAgICAgICAgaWYgKFcgIT09IDEpIHsKICAgICAgICAgICAgcHJlY29tcHV0ZXNNYXAuc2V0KFAsIHRyYW5zZm9ybShjb21wKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLndOQUYoVywgY29tcCwgbik7CiAgICAgIH0KICAgIH07CiAgfQogIGZ1bmN0aW9uIHZhbGlkYXRlQmFzaWMoY3VydmUpIHsKICAgIHZhbGlkYXRlRmllbGQoY3VydmUuRnApOwogICAgdmFsaWRhdGVPYmplY3QoY3VydmUsIHsKICAgICAgbjogImJpZ2ludCIsCiAgICAgIGg6ICJiaWdpbnQiLAogICAgICBHeDogImZpZWxkIiwKICAgICAgR3k6ICJmaWVsZCIKICAgIH0sIHsKICAgICAgbkJpdExlbmd0aDogImlzU2FmZUludGVnZXIiLAogICAgICBuQnl0ZUxlbmd0aDogImlzU2FmZUludGVnZXIiCiAgICB9KTsKICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsKICAgICAgLi4ubkxlbmd0aChjdXJ2ZS5uLCBjdXJ2ZS5uQml0TGVuZ3RoKSwKICAgICAgLi4uY3VydmUsCiAgICAgIC4uLnsgcDogY3VydmUuRnAuT1JERVIgfQogICAgfSk7CiAgfQogIHZhciBfMG40LCBfMW40OwogIHZhciBpbml0X2N1cnZlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC9jdXJ2ZS5qcyIoKSB7CiAgICAgIGluaXRfbW9kdWxhcigpOwogICAgICBpbml0X3V0aWxzNCgpOwogICAgICBfMG40ID0gQmlnSW50KDApOwogICAgICBfMW40ID0gQmlnSW50KDEpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3Qvd2VpZXJzdHJhc3MuanMKICBmdW5jdGlvbiB2YWxpZGF0ZVBvaW50T3B0cyhjdXJ2ZSkgewogICAgY29uc3Qgb3B0cyA9IHZhbGlkYXRlQmFzaWMoY3VydmUpOwogICAgdmFsaWRhdGVPYmplY3Qob3B0cywgewogICAgICBhOiAiZmllbGQiLAogICAgICBiOiAiZmllbGQiCiAgICB9LCB7CiAgICAgIGFsbG93ZWRQcml2YXRlS2V5TGVuZ3RoczogImFycmF5IiwKICAgICAgd3JhcFByaXZhdGVLZXk6ICJib29sZWFuIiwKICAgICAgaXNUb3JzaW9uRnJlZTogImZ1bmN0aW9uIiwKICAgICAgY2xlYXJDb2ZhY3RvcjogImZ1bmN0aW9uIiwKICAgICAgYWxsb3dJbmZpbml0eVBvaW50OiAiYm9vbGVhbiIsCiAgICAgIGZyb21CeXRlczogImZ1bmN0aW9uIiwKICAgICAgdG9CeXRlczogImZ1bmN0aW9uIgogICAgfSk7CiAgICBjb25zdCB7IGVuZG8sIEZwOiBGcDIsIGEgfSA9IG9wdHM7CiAgICBpZiAoZW5kbykgewogICAgICBpZiAoIUZwMi5lcWwoYSwgRnAyLlpFUk8pKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFbmRvbW9ycGhpc20gY2FuIG9ubHkgYmUgZGVmaW5lZCBmb3IgS29ibGl0eiBjdXJ2ZXMgdGhhdCBoYXZlIGE9MCIpOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgZW5kbyAhPT0gIm9iamVjdCIgfHwgdHlwZW9mIGVuZG8uYmV0YSAhPT0gImJpZ2ludCIgfHwgdHlwZW9mIGVuZG8uc3BsaXRTY2FsYXIgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGVuZG9tb3JwaGlzbSB3aXRoIGJldGE6IGJpZ2ludCBhbmQgc3BsaXRTY2FsYXI6IGZ1bmN0aW9uIik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsgLi4ub3B0cyB9KTsKICB9CiAgZnVuY3Rpb24gd2VpZXJzdHJhc3NQb2ludHMob3B0cykgewogICAgY29uc3QgQ1VSVkUgPSB2YWxpZGF0ZVBvaW50T3B0cyhvcHRzKTsKICAgIGNvbnN0IHsgRnA6IEZwMiB9ID0gQ1VSVkU7CiAgICBjb25zdCB0b0J5dGVzMyA9IENVUlZFLnRvQnl0ZXMgfHwgKChfYywgcG9pbnQsIF9pc0NvbXByZXNzZWQpID0+IHsKICAgICAgY29uc3QgYSA9IHBvaW50LnRvQWZmaW5lKCk7CiAgICAgIHJldHVybiBjb25jYXRCeXRlczMoVWludDhBcnJheS5mcm9tKFs0XSksIEZwMi50b0J5dGVzKGEueCksIEZwMi50b0J5dGVzKGEueSkpOwogICAgfSk7CiAgICBjb25zdCBmcm9tQnl0ZXMyID0gQ1VSVkUuZnJvbUJ5dGVzIHx8ICgoYnl0ZXMyKSA9PiB7CiAgICAgIGNvbnN0IHRhaWwgPSBieXRlczIuc3ViYXJyYXkoMSk7CiAgICAgIGNvbnN0IHggPSBGcDIuZnJvbUJ5dGVzKHRhaWwuc3ViYXJyYXkoMCwgRnAyLkJZVEVTKSk7CiAgICAgIGNvbnN0IHkgPSBGcDIuZnJvbUJ5dGVzKHRhaWwuc3ViYXJyYXkoRnAyLkJZVEVTLCAyICogRnAyLkJZVEVTKSk7CiAgICAgIHJldHVybiB7IHgsIHkgfTsKICAgIH0pOwogICAgZnVuY3Rpb24gd2VpZXJzdHJhc3NFcXVhdGlvbih4KSB7CiAgICAgIGNvbnN0IHsgYSwgYiB9ID0gQ1VSVkU7CiAgICAgIGNvbnN0IHgyID0gRnAyLnNxcih4KTsKICAgICAgY29uc3QgeDMgPSBGcDIubXVsKHgyLCB4KTsKICAgICAgcmV0dXJuIEZwMi5hZGQoRnAyLmFkZCh4MywgRnAyLm11bCh4LCBhKSksIGIpOwogICAgfQogICAgaWYgKCFGcDIuZXFsKEZwMi5zcXIoQ1VSVkUuR3kpLCB3ZWllcnN0cmFzc0VxdWF0aW9uKENVUlZFLkd4KSkpCiAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIGdlbmVyYXRvciBwb2ludDogZXF1YXRpb24gbGVmdCAhPSByaWdodCIpOwogICAgZnVuY3Rpb24gaXNXaXRoaW5DdXJ2ZU9yZGVyKG51bSkgewogICAgICByZXR1cm4gdHlwZW9mIG51bSA9PT0gImJpZ2ludCIgJiYgXzBuNSA8IG51bSAmJiBudW0gPCBDVVJWRS5uOwogICAgfQogICAgZnVuY3Rpb24gYXNzZXJ0R0UobnVtKSB7CiAgICAgIGlmICghaXNXaXRoaW5DdXJ2ZU9yZGVyKG51bSkpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB2YWxpZCBiaWdpbnQ6IDAgPCBiaWdpbnQgPCBjdXJ2ZS5uIik7CiAgICB9CiAgICBmdW5jdGlvbiBub3JtUHJpdmF0ZUtleVRvU2NhbGFyKGtleSkgewogICAgICBjb25zdCB7IGFsbG93ZWRQcml2YXRlS2V5TGVuZ3RoczogbGVuZ3RocywgbkJ5dGVMZW5ndGgsIHdyYXBQcml2YXRlS2V5LCBuIH0gPSBDVVJWRTsKICAgICAgaWYgKGxlbmd0aHMgJiYgdHlwZW9mIGtleSAhPT0gImJpZ2ludCIpIHsKICAgICAgICBpZiAoaXNCeXRlczIoa2V5KSkKICAgICAgICAgIGtleSA9IGJ5dGVzVG9IZXgyKGtleSk7CiAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICJzdHJpbmciIHx8ICFsZW5ndGhzLmluY2x1ZGVzKGtleS5sZW5ndGgpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGtleSIpOwogICAgICAgIGtleSA9IGtleS5wYWRTdGFydChuQnl0ZUxlbmd0aCAqIDIsICIwIik7CiAgICAgIH0KICAgICAgbGV0IG51bTsKICAgICAgdHJ5IHsKICAgICAgICBudW0gPSB0eXBlb2Yga2V5ID09PSAiYmlnaW50IiA/IGtleSA6IGJ5dGVzVG9OdW1iZXJCRShlbnN1cmVCeXRlcygicHJpdmF0ZSBrZXkiLCBrZXksIG5CeXRlTGVuZ3RoKSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcml2YXRlIGtleSBtdXN0IGJlICR7bkJ5dGVMZW5ndGh9IGJ5dGVzLCBoZXggb3IgYmlnaW50LCBub3QgJHt0eXBlb2Yga2V5fWApOwogICAgICB9CiAgICAgIGlmICh3cmFwUHJpdmF0ZUtleSkKICAgICAgICBudW0gPSBtb2QobnVtLCBuKTsKICAgICAgYXNzZXJ0R0UobnVtKTsKICAgICAgcmV0dXJuIG51bTsKICAgIH0KICAgIGNvbnN0IHBvaW50UHJlY29tcHV0ZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgZnVuY3Rpb24gYXNzZXJ0UHJqUG9pbnQob3RoZXIpIHsKICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBQb2ludDIpKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiUHJvamVjdGl2ZVBvaW50IGV4cGVjdGVkIik7CiAgICB9CiAgICBjbGFzcyBQb2ludDIgewogICAgICBjb25zdHJ1Y3RvcihweCwgcHksIHB6KSB7CiAgICAgICAgdGhpcy5weCA9IHB4OwogICAgICAgIHRoaXMucHkgPSBweTsKICAgICAgICB0aGlzLnB6ID0gcHo7CiAgICAgICAgaWYgKHB4ID09IG51bGwgfHwgIUZwMi5pc1ZhbGlkKHB4KSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigieCByZXF1aXJlZCIpOwogICAgICAgIGlmIChweSA9PSBudWxsIHx8ICFGcDIuaXNWYWxpZChweSkpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInkgcmVxdWlyZWQiKTsKICAgICAgICBpZiAocHogPT0gbnVsbCB8fCAhRnAyLmlzVmFsaWQocHopKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ6IHJlcXVpcmVkIik7CiAgICAgIH0KICAgICAgLy8gRG9lcyBub3QgdmFsaWRhdGUgaWYgdGhlIHBvaW50IGlzIG9uLWN1cnZlLgogICAgICAvLyBVc2UgZnJvbUhleCBpbnN0ZWFkLCBvciBjYWxsIGFzc2VydFZhbGlkaXR5KCkgbGF0ZXIuCiAgICAgIHN0YXRpYyBmcm9tQWZmaW5lKHApIHsKICAgICAgICBjb25zdCB7IHgsIHkgfSA9IHAgfHwge307CiAgICAgICAgaWYgKCFwIHx8ICFGcDIuaXNWYWxpZCh4KSB8fCAhRnAyLmlzVmFsaWQoeSkpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYWZmaW5lIHBvaW50Iik7CiAgICAgICAgaWYgKHAgaW5zdGFuY2VvZiBQb2ludDIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInByb2plY3RpdmUgcG9pbnQgbm90IGFsbG93ZWQiKTsKICAgICAgICBjb25zdCBpczAgPSAoaSkgPT4gRnAyLmVxbChpLCBGcDIuWkVSTyk7CiAgICAgICAgaWYgKGlzMCh4KSAmJiBpczAoeSkpCiAgICAgICAgICByZXR1cm4gUG9pbnQyLlpFUk87CiAgICAgICAgcmV0dXJuIG5ldyBQb2ludDIoeCwgeSwgRnAyLk9ORSk7CiAgICAgIH0KICAgICAgZ2V0IHgoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudG9BZmZpbmUoKS54OwogICAgICB9CiAgICAgIGdldCB5KCkgewogICAgICAgIHJldHVybiB0aGlzLnRvQWZmaW5lKCkueTsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGFrZXMgYSBidW5jaCBvZiBQcm9qZWN0aXZlIFBvaW50cyBidXQgZXhlY3V0ZXMgb25seSBvbmUKICAgICAgICogaW52ZXJzaW9uIG9uIGFsbCBvZiB0aGVtLiBJbnZlcnNpb24gaXMgdmVyeSBzbG93IG9wZXJhdGlvbiwKICAgICAgICogc28gdGhpcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBtYXNzaXZlbHkuCiAgICAgICAqIE9wdGltaXphdGlvbjogY29udmVydHMgYSBsaXN0IG9mIHByb2plY3RpdmUgcG9pbnRzIHRvIGEgbGlzdCBvZiBpZGVudGljYWwgcG9pbnRzIHdpdGggWj0xLgogICAgICAgKi8KICAgICAgc3RhdGljIG5vcm1hbGl6ZVoocG9pbnRzKSB7CiAgICAgICAgY29uc3QgdG9JbnYgPSBGcDIuaW52ZXJ0QmF0Y2gocG9pbnRzLm1hcCgocCkgPT4gcC5weikpOwogICAgICAgIHJldHVybiBwb2ludHMubWFwKChwLCBpKSA9PiBwLnRvQWZmaW5lKHRvSW52W2ldKSkubWFwKFBvaW50Mi5mcm9tQWZmaW5lKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ29udmVydHMgaGFzaCBzdHJpbmcgb3IgVWludDhBcnJheSB0byBQb2ludC4KICAgICAgICogQHBhcmFtIGhleCBzaG9ydC9sb25nIEVDRFNBIGhleAogICAgICAgKi8KICAgICAgc3RhdGljIGZyb21IZXgoaGV4KSB7CiAgICAgICAgY29uc3QgUCA9IFBvaW50Mi5mcm9tQWZmaW5lKGZyb21CeXRlczIoZW5zdXJlQnl0ZXMoInBvaW50SGV4IiwgaGV4KSkpOwogICAgICAgIFAuYXNzZXJ0VmFsaWRpdHkoKTsKICAgICAgICByZXR1cm4gUDsKICAgICAgfQogICAgICAvLyBNdWx0aXBsaWVzIGdlbmVyYXRvciBwb2ludCBieSBwcml2YXRlS2V5LgogICAgICBzdGF0aWMgZnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleSkgewogICAgICAgIHJldHVybiBQb2ludDIuQkFTRS5tdWx0aXBseShub3JtUHJpdmF0ZUtleVRvU2NhbGFyKHByaXZhdGVLZXkpKTsKICAgICAgfQogICAgICAvLyAiUHJpdmF0ZSBtZXRob2QiLCBkb24ndCB1c2UgaXQgZGlyZWN0bHkKICAgICAgX3NldFdpbmRvd1NpemUod2luZG93U2l6ZSkgewogICAgICAgIHRoaXMuX1dJTkRPV19TSVpFID0gd2luZG93U2l6ZTsKICAgICAgICBwb2ludFByZWNvbXB1dGVzLmRlbGV0ZSh0aGlzKTsKICAgICAgfQogICAgICAvLyBBIHBvaW50IG9uIGN1cnZlIGlzIHZhbGlkIGlmIGl0IGNvbmZvcm1zIHRvIGVxdWF0aW9uLgogICAgICBhc3NlcnRWYWxpZGl0eSgpIHsKICAgICAgICBpZiAodGhpcy5pczAoKSkgewogICAgICAgICAgaWYgKENVUlZFLmFsbG93SW5maW5pdHlQb2ludCAmJiAhRnAyLmlzMCh0aGlzLnB5KSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IFpFUk8iKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLnRvQWZmaW5lKCk7CiAgICAgICAgaWYgKCFGcDIuaXNWYWxpZCh4KSB8fCAhRnAyLmlzVmFsaWQoeSkpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBwb2ludDogeCBvciB5IG5vdCBGRSIpOwogICAgICAgIGNvbnN0IGxlZnQgPSBGcDIuc3FyKHkpOwogICAgICAgIGNvbnN0IHJpZ2h0ID0gd2VpZXJzdHJhc3NFcXVhdGlvbih4KTsKICAgICAgICBpZiAoIUZwMi5lcWwobGVmdCwgcmlnaHQpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IGVxdWF0aW9uIGxlZnQgIT0gcmlnaHQiKTsKICAgICAgICBpZiAoIXRoaXMuaXNUb3JzaW9uRnJlZSgpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IG5vdCBpbiBwcmltZS1vcmRlciBzdWJncm91cCIpOwogICAgICB9CiAgICAgIGhhc0V2ZW5ZKCkgewogICAgICAgIGNvbnN0IHsgeSB9ID0gdGhpcy50b0FmZmluZSgpOwogICAgICAgIGlmIChGcDIuaXNPZGQpCiAgICAgICAgICByZXR1cm4gIUZwMi5pc09kZCh5KTsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkZpZWxkIGRvZXNuJ3Qgc3VwcG9ydCBpc09kZCIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDb21wYXJlIG9uZSBwb2ludCB0byBhbm90aGVyLgogICAgICAgKi8KICAgICAgZXF1YWxzKG90aGVyKSB7CiAgICAgICAgYXNzZXJ0UHJqUG9pbnQob3RoZXIpOwogICAgICAgIGNvbnN0IHsgcHg6IFgxLCBweTogWTEsIHB6OiBaMSB9ID0gdGhpczsKICAgICAgICBjb25zdCB7IHB4OiBYMiwgcHk6IFkyLCBwejogWjIgfSA9IG90aGVyOwogICAgICAgIGNvbnN0IFUxID0gRnAyLmVxbChGcDIubXVsKFgxLCBaMiksIEZwMi5tdWwoWDIsIFoxKSk7CiAgICAgICAgY29uc3QgVTIgPSBGcDIuZXFsKEZwMi5tdWwoWTEsIFoyKSwgRnAyLm11bChZMiwgWjEpKTsKICAgICAgICByZXR1cm4gVTEgJiYgVTI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZsaXBzIHBvaW50IHRvIG9uZSBjb3JyZXNwb25kaW5nIHRvICh4LCAteSkgaW4gQWZmaW5lIGNvb3JkaW5hdGVzLgogICAgICAgKi8KICAgICAgbmVnYXRlKCkgewogICAgICAgIHJldHVybiBuZXcgUG9pbnQyKHRoaXMucHgsIEZwMi5uZWcodGhpcy5weSksIHRoaXMucHopOwogICAgICB9CiAgICAgIC8vIFJlbmVzLUNvc3RlbGxvLUJhdGluYSBleGNlcHRpb24tZnJlZSBkb3VibGluZyBmb3JtdWxhLgogICAgICAvLyBUaGVyZSBpcyAzMCUgZmFzdGVyIEphY29iaWFuIGZvcm11bGEsIGJ1dCBpdCBpcyBub3QgY29tcGxldGUuCiAgICAgIC8vIGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMTUvMTA2MCwgYWxnb3JpdGhtIDMKICAgICAgLy8gQ29zdDogOE0gKyAzUyArIDMqYSArIDIqYjMgKyAxNWFkZC4KICAgICAgZG91YmxlKCkgewogICAgICAgIGNvbnN0IHsgYSwgYiB9ID0gQ1VSVkU7CiAgICAgICAgY29uc3QgYjMyID0gRnAyLm11bChiLCBfM24yKTsKICAgICAgICBjb25zdCB7IHB4OiBYMSwgcHk6IFkxLCBwejogWjEgfSA9IHRoaXM7CiAgICAgICAgbGV0IFgzID0gRnAyLlpFUk8sIFkzID0gRnAyLlpFUk8sIFozID0gRnAyLlpFUk87CiAgICAgICAgbGV0IHQwID0gRnAyLm11bChYMSwgWDEpOwogICAgICAgIGxldCB0MSA9IEZwMi5tdWwoWTEsIFkxKTsKICAgICAgICBsZXQgdDIgPSBGcDIubXVsKFoxLCBaMSk7CiAgICAgICAgbGV0IHQzID0gRnAyLm11bChYMSwgWTEpOwogICAgICAgIHQzID0gRnAyLmFkZCh0MywgdDMpOwogICAgICAgIFozID0gRnAyLm11bChYMSwgWjEpOwogICAgICAgIFozID0gRnAyLmFkZChaMywgWjMpOwogICAgICAgIFgzID0gRnAyLm11bChhLCBaMyk7CiAgICAgICAgWTMgPSBGcDIubXVsKGIzMiwgdDIpOwogICAgICAgIFkzID0gRnAyLmFkZChYMywgWTMpOwogICAgICAgIFgzID0gRnAyLnN1Yih0MSwgWTMpOwogICAgICAgIFkzID0gRnAyLmFkZCh0MSwgWTMpOwogICAgICAgIFkzID0gRnAyLm11bChYMywgWTMpOwogICAgICAgIFgzID0gRnAyLm11bCh0MywgWDMpOwogICAgICAgIFozID0gRnAyLm11bChiMzIsIFozKTsKICAgICAgICB0MiA9IEZwMi5tdWwoYSwgdDIpOwogICAgICAgIHQzID0gRnAyLnN1Yih0MCwgdDIpOwogICAgICAgIHQzID0gRnAyLm11bChhLCB0Myk7CiAgICAgICAgdDMgPSBGcDIuYWRkKHQzLCBaMyk7CiAgICAgICAgWjMgPSBGcDIuYWRkKHQwLCB0MCk7CiAgICAgICAgdDAgPSBGcDIuYWRkKFozLCB0MCk7CiAgICAgICAgdDAgPSBGcDIuYWRkKHQwLCB0Mik7CiAgICAgICAgdDAgPSBGcDIubXVsKHQwLCB0Myk7CiAgICAgICAgWTMgPSBGcDIuYWRkKFkzLCB0MCk7CiAgICAgICAgdDIgPSBGcDIubXVsKFkxLCBaMSk7CiAgICAgICAgdDIgPSBGcDIuYWRkKHQyLCB0Mik7CiAgICAgICAgdDAgPSBGcDIubXVsKHQyLCB0Myk7CiAgICAgICAgWDMgPSBGcDIuc3ViKFgzLCB0MCk7CiAgICAgICAgWjMgPSBGcDIubXVsKHQyLCB0MSk7CiAgICAgICAgWjMgPSBGcDIuYWRkKFozLCBaMyk7CiAgICAgICAgWjMgPSBGcDIuYWRkKFozLCBaMyk7CiAgICAgICAgcmV0dXJuIG5ldyBQb2ludDIoWDMsIFkzLCBaMyk7CiAgICAgIH0KICAgICAgLy8gUmVuZXMtQ29zdGVsbG8tQmF0aW5hIGV4Y2VwdGlvbi1mcmVlIGFkZGl0aW9uIGZvcm11bGEuCiAgICAgIC8vIFRoZXJlIGlzIDMwJSBmYXN0ZXIgSmFjb2JpYW4gZm9ybXVsYSwgYnV0IGl0IGlzIG5vdCBjb21wbGV0ZS4KICAgICAgLy8gaHR0cHM6Ly9lcHJpbnQuaWFjci5vcmcvMjAxNS8xMDYwLCBhbGdvcml0aG0gMQogICAgICAvLyBDb3N0OiAxMk0gKyAwUyArIDMqYSArIDMqYjMgKyAyM2FkZC4KICAgICAgYWRkKG90aGVyKSB7CiAgICAgICAgYXNzZXJ0UHJqUG9pbnQob3RoZXIpOwogICAgICAgIGNvbnN0IHsgcHg6IFgxLCBweTogWTEsIHB6OiBaMSB9ID0gdGhpczsKICAgICAgICBjb25zdCB7IHB4OiBYMiwgcHk6IFkyLCBwejogWjIgfSA9IG90aGVyOwogICAgICAgIGxldCBYMyA9IEZwMi5aRVJPLCBZMyA9IEZwMi5aRVJPLCBaMyA9IEZwMi5aRVJPOwogICAgICAgIGNvbnN0IGEgPSBDVVJWRS5hOwogICAgICAgIGNvbnN0IGIzMiA9IEZwMi5tdWwoQ1VSVkUuYiwgXzNuMik7CiAgICAgICAgbGV0IHQwID0gRnAyLm11bChYMSwgWDIpOwogICAgICAgIGxldCB0MSA9IEZwMi5tdWwoWTEsIFkyKTsKICAgICAgICBsZXQgdDIgPSBGcDIubXVsKFoxLCBaMik7CiAgICAgICAgbGV0IHQzID0gRnAyLmFkZChYMSwgWTEpOwogICAgICAgIGxldCB0NCA9IEZwMi5hZGQoWDIsIFkyKTsKICAgICAgICB0MyA9IEZwMi5tdWwodDMsIHQ0KTsKICAgICAgICB0NCA9IEZwMi5hZGQodDAsIHQxKTsKICAgICAgICB0MyA9IEZwMi5zdWIodDMsIHQ0KTsKICAgICAgICB0NCA9IEZwMi5hZGQoWDEsIFoxKTsKICAgICAgICBsZXQgdDUgPSBGcDIuYWRkKFgyLCBaMik7CiAgICAgICAgdDQgPSBGcDIubXVsKHQ0LCB0NSk7CiAgICAgICAgdDUgPSBGcDIuYWRkKHQwLCB0Mik7CiAgICAgICAgdDQgPSBGcDIuc3ViKHQ0LCB0NSk7CiAgICAgICAgdDUgPSBGcDIuYWRkKFkxLCBaMSk7CiAgICAgICAgWDMgPSBGcDIuYWRkKFkyLCBaMik7CiAgICAgICAgdDUgPSBGcDIubXVsKHQ1LCBYMyk7CiAgICAgICAgWDMgPSBGcDIuYWRkKHQxLCB0Mik7CiAgICAgICAgdDUgPSBGcDIuc3ViKHQ1LCBYMyk7CiAgICAgICAgWjMgPSBGcDIubXVsKGEsIHQ0KTsKICAgICAgICBYMyA9IEZwMi5tdWwoYjMyLCB0Mik7CiAgICAgICAgWjMgPSBGcDIuYWRkKFgzLCBaMyk7CiAgICAgICAgWDMgPSBGcDIuc3ViKHQxLCBaMyk7CiAgICAgICAgWjMgPSBGcDIuYWRkKHQxLCBaMyk7CiAgICAgICAgWTMgPSBGcDIubXVsKFgzLCBaMyk7CiAgICAgICAgdDEgPSBGcDIuYWRkKHQwLCB0MCk7CiAgICAgICAgdDEgPSBGcDIuYWRkKHQxLCB0MCk7CiAgICAgICAgdDIgPSBGcDIubXVsKGEsIHQyKTsKICAgICAgICB0NCA9IEZwMi5tdWwoYjMyLCB0NCk7CiAgICAgICAgdDEgPSBGcDIuYWRkKHQxLCB0Mik7CiAgICAgICAgdDIgPSBGcDIuc3ViKHQwLCB0Mik7CiAgICAgICAgdDIgPSBGcDIubXVsKGEsIHQyKTsKICAgICAgICB0NCA9IEZwMi5hZGQodDQsIHQyKTsKICAgICAgICB0MCA9IEZwMi5tdWwodDEsIHQ0KTsKICAgICAgICBZMyA9IEZwMi5hZGQoWTMsIHQwKTsKICAgICAgICB0MCA9IEZwMi5tdWwodDUsIHQ0KTsKICAgICAgICBYMyA9IEZwMi5tdWwodDMsIFgzKTsKICAgICAgICBYMyA9IEZwMi5zdWIoWDMsIHQwKTsKICAgICAgICB0MCA9IEZwMi5tdWwodDMsIHQxKTsKICAgICAgICBaMyA9IEZwMi5tdWwodDUsIFozKTsKICAgICAgICBaMyA9IEZwMi5hZGQoWjMsIHQwKTsKICAgICAgICByZXR1cm4gbmV3IFBvaW50MihYMywgWTMsIFozKTsKICAgICAgfQogICAgICBzdWJ0cmFjdChvdGhlcikgewogICAgICAgIHJldHVybiB0aGlzLmFkZChvdGhlci5uZWdhdGUoKSk7CiAgICAgIH0KICAgICAgaXMwKCkgewogICAgICAgIHJldHVybiB0aGlzLmVxdWFscyhQb2ludDIuWkVSTyk7CiAgICAgIH0KICAgICAgd05BRihuKSB7CiAgICAgICAgcmV0dXJuIHduYWYud05BRkNhY2hlZCh0aGlzLCBwb2ludFByZWNvbXB1dGVzLCBuLCAoY29tcCkgPT4gewogICAgICAgICAgY29uc3QgdG9JbnYgPSBGcDIuaW52ZXJ0QmF0Y2goY29tcC5tYXAoKHApID0+IHAucHopKTsKICAgICAgICAgIHJldHVybiBjb21wLm1hcCgocCwgaSkgPT4gcC50b0FmZmluZSh0b0ludltpXSkpLm1hcChQb2ludDIuZnJvbUFmZmluZSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIE5vbi1jb25zdGFudC10aW1lIG11bHRpcGxpY2F0aW9uLiBVc2VzIGRvdWJsZS1hbmQtYWRkIGFsZ29yaXRobS4KICAgICAgICogSXQncyBmYXN0ZXIsIGJ1dCBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4geW91IGRvbid0IGNhcmUgYWJvdXQKICAgICAgICogYW4gZXhwb3NlZCBwcml2YXRlIGtleSBlLmcuIHNpZyB2ZXJpZmljYXRpb24sIHdoaWNoIHdvcmtzIG92ZXIgKnB1YmxpYyoga2V5cy4KICAgICAgICovCiAgICAgIG11bHRpcGx5VW5zYWZlKG4pIHsKICAgICAgICBjb25zdCBJID0gUG9pbnQyLlpFUk87CiAgICAgICAgaWYgKG4gPT09IF8wbjUpCiAgICAgICAgICByZXR1cm4gSTsKICAgICAgICBhc3NlcnRHRShuKTsKICAgICAgICBpZiAobiA9PT0gXzFuNSkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIGNvbnN0IHsgZW5kbyB9ID0gQ1VSVkU7CiAgICAgICAgaWYgKCFlbmRvKQogICAgICAgICAgcmV0dXJuIHduYWYudW5zYWZlTGFkZGVyKHRoaXMsIG4pOwogICAgICAgIGxldCB7IGsxbmVnLCBrMSwgazJuZWcsIGsyIH0gPSBlbmRvLnNwbGl0U2NhbGFyKG4pOwogICAgICAgIGxldCBrMXAgPSBJOwogICAgICAgIGxldCBrMnAgPSBJOwogICAgICAgIGxldCBkID0gdGhpczsKICAgICAgICB3aGlsZSAoazEgPiBfMG41IHx8IGsyID4gXzBuNSkgewogICAgICAgICAgaWYgKGsxICYgXzFuNSkKICAgICAgICAgICAgazFwID0gazFwLmFkZChkKTsKICAgICAgICAgIGlmIChrMiAmIF8xbjUpCiAgICAgICAgICAgIGsycCA9IGsycC5hZGQoZCk7CiAgICAgICAgICBkID0gZC5kb3VibGUoKTsKICAgICAgICAgIGsxID4+PSBfMW41OwogICAgICAgICAgazIgPj49IF8xbjU7CiAgICAgICAgfQogICAgICAgIGlmIChrMW5lZykKICAgICAgICAgIGsxcCA9IGsxcC5uZWdhdGUoKTsKICAgICAgICBpZiAoazJuZWcpCiAgICAgICAgICBrMnAgPSBrMnAubmVnYXRlKCk7CiAgICAgICAgazJwID0gbmV3IFBvaW50MihGcDIubXVsKGsycC5weCwgZW5kby5iZXRhKSwgazJwLnB5LCBrMnAucHopOwogICAgICAgIHJldHVybiBrMXAuYWRkKGsycCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENvbnN0YW50IHRpbWUgbXVsdGlwbGljYXRpb24uCiAgICAgICAqIFVzZXMgd05BRiBtZXRob2QuIFdpbmRvd2VkIG1ldGhvZCBtYXkgYmUgMTAlIGZhc3RlciwKICAgICAgICogYnV0IHRha2VzIDJ4IGxvbmdlciB0byBnZW5lcmF0ZSBhbmQgY29uc3VtZXMgMnggbWVtb3J5LgogICAgICAgKiBVc2VzIHByZWNvbXB1dGVzIHdoZW4gYXZhaWxhYmxlLgogICAgICAgKiBVc2VzIGVuZG9tb3JwaGlzbSBmb3IgS29ibGl0eiBjdXJ2ZXMuCiAgICAgICAqIEBwYXJhbSBzY2FsYXIgYnkgd2hpY2ggdGhlIHBvaW50IHdvdWxkIGJlIG11bHRpcGxpZWQKICAgICAgICogQHJldHVybnMgTmV3IHBvaW50CiAgICAgICAqLwogICAgICBtdWx0aXBseShzY2FsYXIpIHsKICAgICAgICBhc3NlcnRHRShzY2FsYXIpOwogICAgICAgIGxldCBuID0gc2NhbGFyOwogICAgICAgIGxldCBwb2ludCwgZmFrZTsKICAgICAgICBjb25zdCB7IGVuZG8gfSA9IENVUlZFOwogICAgICAgIGlmIChlbmRvKSB7CiAgICAgICAgICBjb25zdCB7IGsxbmVnLCBrMSwgazJuZWcsIGsyIH0gPSBlbmRvLnNwbGl0U2NhbGFyKG4pOwogICAgICAgICAgbGV0IHsgcDogazFwLCBmOiBmMXAgfSA9IHRoaXMud05BRihrMSk7CiAgICAgICAgICBsZXQgeyBwOiBrMnAsIGY6IGYycCB9ID0gdGhpcy53TkFGKGsyKTsKICAgICAgICAgIGsxcCA9IHduYWYuY29uc3RUaW1lTmVnYXRlKGsxbmVnLCBrMXApOwogICAgICAgICAgazJwID0gd25hZi5jb25zdFRpbWVOZWdhdGUoazJuZWcsIGsycCk7CiAgICAgICAgICBrMnAgPSBuZXcgUG9pbnQyKEZwMi5tdWwoazJwLnB4LCBlbmRvLmJldGEpLCBrMnAucHksIGsycC5weik7CiAgICAgICAgICBwb2ludCA9IGsxcC5hZGQoazJwKTsKICAgICAgICAgIGZha2UgPSBmMXAuYWRkKGYycCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHsgcCwgZjogZjIgfSA9IHRoaXMud05BRihuKTsKICAgICAgICAgIHBvaW50ID0gcDsKICAgICAgICAgIGZha2UgPSBmMjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBvaW50Mi5ub3JtYWxpemVaKFtwb2ludCwgZmFrZV0pWzBdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBFZmZpY2llbnRseSBjYWxjdWxhdGUgYGFQICsgYlFgLiBVbnNhZmUsIGNhbiBleHBvc2UgcHJpdmF0ZSBrZXksIGlmIHVzZWQgaW5jb3JyZWN0bHkuCiAgICAgICAqIE5vdCB1c2luZyBTdHJhdXNzLVNoYW1pciB0cmljazogcHJlY29tcHV0YXRpb24gdGFibGVzIGFyZSBmYXN0ZXIuCiAgICAgICAqIFRoZSB0cmljayBjb3VsZCBiZSB1c2VmdWwgaWYgYm90aCBQIGFuZCBRIGFyZSBub3QgRyAobm90IGluIG91ciBjYXNlKS4KICAgICAgICogQHJldHVybnMgbm9uLXplcm8gYWZmaW5lIHBvaW50CiAgICAgICAqLwogICAgICBtdWx0aXBseUFuZEFkZFVuc2FmZShRLCBhLCBiKSB7CiAgICAgICAgY29uc3QgRyA9IFBvaW50Mi5CQVNFOwogICAgICAgIGNvbnN0IG11bCA9IChQLCBhMikgPT4gYTIgPT09IF8wbjUgfHwgYTIgPT09IF8xbjUgfHwgIVAuZXF1YWxzKEcpID8gUC5tdWx0aXBseVVuc2FmZShhMikgOiBQLm11bHRpcGx5KGEyKTsKICAgICAgICBjb25zdCBzdW0gPSBtdWwodGhpcywgYSkuYWRkKG11bChRLCBiKSk7CiAgICAgICAgcmV0dXJuIHN1bS5pczAoKSA/IHZvaWQgMCA6IHN1bTsKICAgICAgfQogICAgICAvLyBDb252ZXJ0cyBQcm9qZWN0aXZlIHBvaW50IHRvIGFmZmluZSAoeCwgeSkgY29vcmRpbmF0ZXMuCiAgICAgIC8vIENhbiBhY2NlcHQgcHJlY29tcHV0ZWQgWl4tMSAtIGZvciBleGFtcGxlLCBmcm9tIGludmVydEJhdGNoLgogICAgICAvLyAoeCwgeSwgeikg4oiLICh4PXgveiwgeT15L3opCiAgICAgIHRvQWZmaW5lKGl6KSB7CiAgICAgICAgY29uc3QgeyBweDogeCwgcHk6IHksIHB6OiB6IH0gPSB0aGlzOwogICAgICAgIGNvbnN0IGlzMCA9IHRoaXMuaXMwKCk7CiAgICAgICAgaWYgKGl6ID09IG51bGwpCiAgICAgICAgICBpeiA9IGlzMCA/IEZwMi5PTkUgOiBGcDIuaW52KHopOwogICAgICAgIGNvbnN0IGF4ID0gRnAyLm11bCh4LCBpeik7CiAgICAgICAgY29uc3QgYXkgPSBGcDIubXVsKHksIGl6KTsKICAgICAgICBjb25zdCB6eiA9IEZwMi5tdWwoeiwgaXopOwogICAgICAgIGlmIChpczApCiAgICAgICAgICByZXR1cm4geyB4OiBGcDIuWkVSTywgeTogRnAyLlpFUk8gfTsKICAgICAgICBpZiAoIUZwMi5lcWwoenosIEZwMi5PTkUpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZaIHdhcyBpbnZhbGlkIik7CiAgICAgICAgcmV0dXJuIHsgeDogYXgsIHk6IGF5IH07CiAgICAgIH0KICAgICAgaXNUb3JzaW9uRnJlZSgpIHsKICAgICAgICBjb25zdCB7IGg6IGNvZmFjdG9yLCBpc1RvcnNpb25GcmVlIH0gPSBDVVJWRTsKICAgICAgICBpZiAoY29mYWN0b3IgPT09IF8xbjUpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoaXNUb3JzaW9uRnJlZSkKICAgICAgICAgIHJldHVybiBpc1RvcnNpb25GcmVlKFBvaW50MiwgdGhpcyk7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpc1RvcnNpb25GcmVlKCkgaGFzIG5vdCBiZWVuIGRlY2xhcmVkIGZvciB0aGUgZWxsaXB0aWMgY3VydmUiKTsKICAgICAgfQogICAgICBjbGVhckNvZmFjdG9yKCkgewogICAgICAgIGNvbnN0IHsgaDogY29mYWN0b3IsIGNsZWFyQ29mYWN0b3IgfSA9IENVUlZFOwogICAgICAgIGlmIChjb2ZhY3RvciA9PT0gXzFuNSkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIGlmIChjbGVhckNvZmFjdG9yKQogICAgICAgICAgcmV0dXJuIGNsZWFyQ29mYWN0b3IoUG9pbnQyLCB0aGlzKTsKICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBseVVuc2FmZShDVVJWRS5oKTsKICAgICAgfQogICAgICB0b1Jhd0J5dGVzKGlzQ29tcHJlc3NlZCA9IHRydWUpIHsKICAgICAgICB0aGlzLmFzc2VydFZhbGlkaXR5KCk7CiAgICAgICAgcmV0dXJuIHRvQnl0ZXMzKFBvaW50MiwgdGhpcywgaXNDb21wcmVzc2VkKTsKICAgICAgfQogICAgICB0b0hleChpc0NvbXByZXNzZWQgPSB0cnVlKSB7CiAgICAgICAgcmV0dXJuIGJ5dGVzVG9IZXgyKHRoaXMudG9SYXdCeXRlcyhpc0NvbXByZXNzZWQpKTsKICAgICAgfQogICAgfQogICAgUG9pbnQyLkJBU0UgPSBuZXcgUG9pbnQyKENVUlZFLkd4LCBDVVJWRS5HeSwgRnAyLk9ORSk7CiAgICBQb2ludDIuWkVSTyA9IG5ldyBQb2ludDIoRnAyLlpFUk8sIEZwMi5PTkUsIEZwMi5aRVJPKTsKICAgIGNvbnN0IF9iaXRzID0gQ1VSVkUubkJpdExlbmd0aDsKICAgIGNvbnN0IHduYWYgPSB3TkFGKFBvaW50MiwgQ1VSVkUuZW5kbyA/IE1hdGguY2VpbChfYml0cyAvIDIpIDogX2JpdHMpOwogICAgcmV0dXJuIHsKICAgICAgQ1VSVkUsCiAgICAgIFByb2plY3RpdmVQb2ludDogUG9pbnQyLAogICAgICBub3JtUHJpdmF0ZUtleVRvU2NhbGFyLAogICAgICB3ZWllcnN0cmFzc0VxdWF0aW9uLAogICAgICBpc1dpdGhpbkN1cnZlT3JkZXIKICAgIH07CiAgfQogIGZ1bmN0aW9uIHZhbGlkYXRlT3B0cyhjdXJ2ZSkgewogICAgY29uc3Qgb3B0cyA9IHZhbGlkYXRlQmFzaWMoY3VydmUpOwogICAgdmFsaWRhdGVPYmplY3Qob3B0cywgewogICAgICBoYXNoOiAiaGFzaCIsCiAgICAgIGhtYWM6ICJmdW5jdGlvbiIsCiAgICAgIHJhbmRvbUJ5dGVzOiAiZnVuY3Rpb24iCiAgICB9LCB7CiAgICAgIGJpdHMyaW50OiAiZnVuY3Rpb24iLAogICAgICBiaXRzMmludF9tb2ROOiAiZnVuY3Rpb24iLAogICAgICBsb3dTOiAiYm9vbGVhbiIKICAgIH0pOwogICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyBsb3dTOiB0cnVlLCAuLi5vcHRzIH0pOwogIH0KICBmdW5jdGlvbiB3ZWllcnN0cmFzcyhjdXJ2ZURlZikgewogICAgY29uc3QgQ1VSVkUgPSB2YWxpZGF0ZU9wdHMoY3VydmVEZWYpOwogICAgY29uc3QgeyBGcDogRnAyLCBuOiBDVVJWRV9PUkRFUiB9ID0gQ1VSVkU7CiAgICBjb25zdCBjb21wcmVzc2VkTGVuID0gRnAyLkJZVEVTICsgMTsKICAgIGNvbnN0IHVuY29tcHJlc3NlZExlbiA9IDIgKiBGcDIuQllURVMgKyAxOwogICAgZnVuY3Rpb24gaXNWYWxpZEZpZWxkRWxlbWVudChudW0pIHsKICAgICAgcmV0dXJuIF8wbjUgPCBudW0gJiYgbnVtIDwgRnAyLk9SREVSOwogICAgfQogICAgZnVuY3Rpb24gbW9kTjIoYSkgewogICAgICByZXR1cm4gbW9kKGEsIENVUlZFX09SREVSKTsKICAgIH0KICAgIGZ1bmN0aW9uIGludk4oYSkgewogICAgICByZXR1cm4gaW52ZXJ0KGEsIENVUlZFX09SREVSKTsKICAgIH0KICAgIGNvbnN0IHsgUHJvamVjdGl2ZVBvaW50OiBQb2ludDIsIG5vcm1Qcml2YXRlS2V5VG9TY2FsYXIsIHdlaWVyc3RyYXNzRXF1YXRpb24sIGlzV2l0aGluQ3VydmVPcmRlciB9ID0gd2VpZXJzdHJhc3NQb2ludHMoewogICAgICAuLi5DVVJWRSwKICAgICAgdG9CeXRlcyhfYywgcG9pbnQsIGlzQ29tcHJlc3NlZCkgewogICAgICAgIGNvbnN0IGEgPSBwb2ludC50b0FmZmluZSgpOwogICAgICAgIGNvbnN0IHggPSBGcDIudG9CeXRlcyhhLngpOwogICAgICAgIGNvbnN0IGNhdCA9IGNvbmNhdEJ5dGVzMzsKICAgICAgICBpZiAoaXNDb21wcmVzc2VkKSB7CiAgICAgICAgICByZXR1cm4gY2F0KFVpbnQ4QXJyYXkuZnJvbShbcG9pbnQuaGFzRXZlblkoKSA/IDIgOiAzXSksIHgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gY2F0KFVpbnQ4QXJyYXkuZnJvbShbNF0pLCB4LCBGcDIudG9CeXRlcyhhLnkpKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGZyb21CeXRlcyhieXRlczIpIHsKICAgICAgICBjb25zdCBsZW4gPSBieXRlczIubGVuZ3RoOwogICAgICAgIGNvbnN0IGhlYWQgPSBieXRlczJbMF07CiAgICAgICAgY29uc3QgdGFpbCA9IGJ5dGVzMi5zdWJhcnJheSgxKTsKICAgICAgICBpZiAobGVuID09PSBjb21wcmVzc2VkTGVuICYmIChoZWFkID09PSAyIHx8IGhlYWQgPT09IDMpKSB7CiAgICAgICAgICBjb25zdCB4ID0gYnl0ZXNUb051bWJlckJFKHRhaWwpOwogICAgICAgICAgaWYgKCFpc1ZhbGlkRmllbGRFbGVtZW50KHgpKQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlBvaW50IGlzIG5vdCBvbiBjdXJ2ZSIpOwogICAgICAgICAgY29uc3QgeTIgPSB3ZWllcnN0cmFzc0VxdWF0aW9uKHgpOwogICAgICAgICAgbGV0IHk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB5ID0gRnAyLnNxcnQoeTIpOwogICAgICAgICAgfSBjYXRjaCAoc3FydEVycm9yKSB7CiAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IHNxcnRFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gIjogIiArIHNxcnRFcnJvci5tZXNzYWdlIDogIiI7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiUG9pbnQgaXMgbm90IG9uIGN1cnZlIiArIHN1ZmZpeCk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBpc1lPZGQgPSAoeSAmIF8xbjUpID09PSBfMW41OwogICAgICAgICAgY29uc3QgaXNIZWFkT2RkID0gKGhlYWQgJiAxKSA9PT0gMTsKICAgICAgICAgIGlmIChpc0hlYWRPZGQgIT09IGlzWU9kZCkKICAgICAgICAgICAgeSA9IEZwMi5uZWcoeSk7CiAgICAgICAgICByZXR1cm4geyB4LCB5IH07CiAgICAgICAgfSBlbHNlIGlmIChsZW4gPT09IHVuY29tcHJlc3NlZExlbiAmJiBoZWFkID09PSA0KSB7CiAgICAgICAgICBjb25zdCB4ID0gRnAyLmZyb21CeXRlcyh0YWlsLnN1YmFycmF5KDAsIEZwMi5CWVRFUykpOwogICAgICAgICAgY29uc3QgeSA9IEZwMi5mcm9tQnl0ZXModGFpbC5zdWJhcnJheShGcDIuQllURVMsIDIgKiBGcDIuQllURVMpKTsKICAgICAgICAgIHJldHVybiB7IHgsIHkgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb2ludCBvZiBsZW5ndGggJHtsZW59IHdhcyBpbnZhbGlkLiBFeHBlY3RlZCAke2NvbXByZXNzZWRMZW59IGNvbXByZXNzZWQgYnl0ZXMgb3IgJHt1bmNvbXByZXNzZWRMZW59IHVuY29tcHJlc3NlZCBieXRlc2ApOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBjb25zdCBudW1Ub05CeXRlU3RyID0gKG51bSkgPT4gYnl0ZXNUb0hleDIobnVtYmVyVG9CeXRlc0JFKG51bSwgQ1VSVkUubkJ5dGVMZW5ndGgpKTsKICAgIGZ1bmN0aW9uIGlzQmlnZ2VyVGhhbkhhbGZPcmRlcihudW1iZXIyKSB7CiAgICAgIGNvbnN0IEhBTEYgPSBDVVJWRV9PUkRFUiA+PiBfMW41OwogICAgICByZXR1cm4gbnVtYmVyMiA+IEhBTEY7CiAgICB9CiAgICBmdW5jdGlvbiBub3JtYWxpemVTKHMpIHsKICAgICAgcmV0dXJuIGlzQmlnZ2VyVGhhbkhhbGZPcmRlcihzKSA/IG1vZE4yKC1zKSA6IHM7CiAgICB9CiAgICBjb25zdCBzbGNOdW0gPSAoYiwgZnJvbSwgdG8pID0+IGJ5dGVzVG9OdW1iZXJCRShiLnNsaWNlKGZyb20sIHRvKSk7CiAgICBjbGFzcyBTaWduYXR1cmUgewogICAgICBjb25zdHJ1Y3RvcihyLCBzLCByZWNvdmVyeSkgewogICAgICAgIHRoaXMuciA9IHI7CiAgICAgICAgdGhpcy5zID0gczsKICAgICAgICB0aGlzLnJlY292ZXJ5ID0gcmVjb3Zlcnk7CiAgICAgICAgdGhpcy5hc3NlcnRWYWxpZGl0eSgpOwogICAgICB9CiAgICAgIC8vIHBhaXIgKGJ5dGVzIG9mIHIsIGJ5dGVzIG9mIHMpCiAgICAgIHN0YXRpYyBmcm9tQ29tcGFjdChoZXgpIHsKICAgICAgICBjb25zdCBsID0gQ1VSVkUubkJ5dGVMZW5ndGg7CiAgICAgICAgaGV4ID0gZW5zdXJlQnl0ZXMoImNvbXBhY3RTaWduYXR1cmUiLCBoZXgsIGwgKiAyKTsKICAgICAgICByZXR1cm4gbmV3IFNpZ25hdHVyZShzbGNOdW0oaGV4LCAwLCBsKSwgc2xjTnVtKGhleCwgbCwgMiAqIGwpKTsKICAgICAgfQogICAgICAvLyBERVIgZW5jb2RlZCBFQ0RTQSBzaWduYXR1cmUKICAgICAgLy8gaHR0cHM6Ly9iaXRjb2luLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy81NzY0NC93aGF0LWFyZS10aGUtcGFydHMtb2YtYS1iaXRjb2luLXRyYW5zYWN0aW9uLWlucHV0LXNjcmlwdAogICAgICBzdGF0aWMgZnJvbURFUihoZXgpIHsKICAgICAgICBjb25zdCB7IHIsIHMgfSA9IERFUi50b1NpZyhlbnN1cmVCeXRlcygiREVSIiwgaGV4KSk7CiAgICAgICAgcmV0dXJuIG5ldyBTaWduYXR1cmUociwgcyk7CiAgICAgIH0KICAgICAgYXNzZXJ0VmFsaWRpdHkoKSB7CiAgICAgICAgaWYgKCFpc1dpdGhpbkN1cnZlT3JkZXIodGhpcy5yKSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiciBtdXN0IGJlIDAgPCByIDwgQ1VSVkUubiIpOwogICAgICAgIGlmICghaXNXaXRoaW5DdXJ2ZU9yZGVyKHRoaXMucykpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInMgbXVzdCBiZSAwIDwgcyA8IENVUlZFLm4iKTsKICAgICAgfQogICAgICBhZGRSZWNvdmVyeUJpdChyZWNvdmVyeSkgewogICAgICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKHRoaXMuciwgdGhpcy5zLCByZWNvdmVyeSk7CiAgICAgIH0KICAgICAgcmVjb3ZlclB1YmxpY0tleShtc2dIYXNoKSB7CiAgICAgICAgY29uc3QgeyByLCBzLCByZWNvdmVyeTogcmVjIH0gPSB0aGlzOwogICAgICAgIGNvbnN0IGggPSBiaXRzMmludF9tb2ROKGVuc3VyZUJ5dGVzKCJtc2dIYXNoIiwgbXNnSGFzaCkpOwogICAgICAgIGlmIChyZWMgPT0gbnVsbCB8fCAhWzAsIDEsIDIsIDNdLmluY2x1ZGVzKHJlYykpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInJlY292ZXJ5IGlkIGludmFsaWQiKTsKICAgICAgICBjb25zdCByYWRqID0gcmVjID09PSAyIHx8IHJlYyA9PT0gMyA/IHIgKyBDVVJWRS5uIDogcjsKICAgICAgICBpZiAocmFkaiA+PSBGcDIuT1JERVIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInJlY292ZXJ5IGlkIDIgb3IgMyBpbnZhbGlkIik7CiAgICAgICAgY29uc3QgcHJlZml4ID0gKHJlYyAmIDEpID09PSAwID8gIjAyIiA6ICIwMyI7CiAgICAgICAgY29uc3QgUiA9IFBvaW50Mi5mcm9tSGV4KHByZWZpeCArIG51bVRvTkJ5dGVTdHIocmFkaikpOwogICAgICAgIGNvbnN0IGlyID0gaW52TihyYWRqKTsKICAgICAgICBjb25zdCB1MSA9IG1vZE4yKC1oICogaXIpOwogICAgICAgIGNvbnN0IHUyID0gbW9kTjIocyAqIGlyKTsKICAgICAgICBjb25zdCBRID0gUG9pbnQyLkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoUiwgdTEsIHUyKTsKICAgICAgICBpZiAoIVEpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInBvaW50IGF0IGluZmluaWZ5Iik7CiAgICAgICAgUS5hc3NlcnRWYWxpZGl0eSgpOwogICAgICAgIHJldHVybiBROwogICAgICB9CiAgICAgIC8vIFNpZ25hdHVyZXMgc2hvdWxkIGJlIGxvdy1zLCB0byBwcmV2ZW50IG1hbGxlYWJpbGl0eS4KICAgICAgaGFzSGlnaFMoKSB7CiAgICAgICAgcmV0dXJuIGlzQmlnZ2VyVGhhbkhhbGZPcmRlcih0aGlzLnMpOwogICAgICB9CiAgICAgIG5vcm1hbGl6ZVMoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaGFzSGlnaFMoKSA/IG5ldyBTaWduYXR1cmUodGhpcy5yLCBtb2ROMigtdGhpcy5zKSwgdGhpcy5yZWNvdmVyeSkgOiB0aGlzOwogICAgICB9CiAgICAgIC8vIERFUi1lbmNvZGVkCiAgICAgIHRvREVSUmF3Qnl0ZXMoKSB7CiAgICAgICAgcmV0dXJuIGhleFRvQnl0ZXMyKHRoaXMudG9ERVJIZXgoKSk7CiAgICAgIH0KICAgICAgdG9ERVJIZXgoKSB7CiAgICAgICAgcmV0dXJuIERFUi5oZXhGcm9tU2lnKHsgcjogdGhpcy5yLCBzOiB0aGlzLnMgfSk7CiAgICAgIH0KICAgICAgLy8gcGFkZGVkIGJ5dGVzIG9mIHIsIHRoZW4gcGFkZGVkIGJ5dGVzIG9mIHMKICAgICAgdG9Db21wYWN0UmF3Qnl0ZXMoKSB7CiAgICAgICAgcmV0dXJuIGhleFRvQnl0ZXMyKHRoaXMudG9Db21wYWN0SGV4KCkpOwogICAgICB9CiAgICAgIHRvQ29tcGFjdEhleCgpIHsKICAgICAgICByZXR1cm4gbnVtVG9OQnl0ZVN0cih0aGlzLnIpICsgbnVtVG9OQnl0ZVN0cih0aGlzLnMpOwogICAgICB9CiAgICB9CiAgICBjb25zdCB1dGlscyA9IHsKICAgICAgaXNWYWxpZFByaXZhdGVLZXkocHJpdmF0ZUtleSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBub3JtUHJpdmF0ZUtleVRvU2NhbGFyKHByaXZhdGVLZXkpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG5vcm1Qcml2YXRlS2V5VG9TY2FsYXIsCiAgICAgIC8qKgogICAgICAgKiBQcm9kdWNlcyBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgcHJpdmF0ZSBrZXkgZnJvbSByYW5kb20gb2Ygc2l6ZQogICAgICAgKiAoZ3JvdXBMZW4gKyBjZWlsKGdyb3VwTGVuIC8gMikpIHdpdGggbW9kdWxvIGJpYXMgYmVpbmcgbmVnbGlnaWJsZS4KICAgICAgICovCiAgICAgIHJhbmRvbVByaXZhdGVLZXk6ICgpID0+IHsKICAgICAgICBjb25zdCBsZW5ndGggPSBnZXRNaW5IYXNoTGVuZ3RoKENVUlZFLm4pOwogICAgICAgIHJldHVybiBtYXBIYXNoVG9GaWVsZChDVVJWRS5yYW5kb21CeXRlcyhsZW5ndGgpLCBDVVJWRS5uKTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgcHJlY29tcHV0ZSB0YWJsZSBmb3IgYW4gYXJiaXRyYXJ5IEVDIHBvaW50LiBNYWtlcyBwb2ludCAiY2FjaGVkIi4KICAgICAgICogQWxsb3dzIHRvIG1hc3NpdmVseSBzcGVlZC11cCBgcG9pbnQubXVsdGlwbHkoc2NhbGFyKWAuCiAgICAgICAqIEByZXR1cm5zIGNhY2hlZCBwb2ludAogICAgICAgKiBAZXhhbXBsZQogICAgICAgKiBjb25zdCBmYXN0ID0gdXRpbHMucHJlY29tcHV0ZSg4LCBQcm9qZWN0aXZlUG9pbnQuZnJvbUhleChzb21lb25lc1B1YktleSkpOwogICAgICAgKiBmYXN0Lm11bHRpcGx5KHByaXZLZXkpOyAvLyBtdWNoIGZhc3RlciBFQ0RIIG5vdwogICAgICAgKi8KICAgICAgcHJlY29tcHV0ZSh3aW5kb3dTaXplID0gOCwgcG9pbnQgPSBQb2ludDIuQkFTRSkgewogICAgICAgIHBvaW50Ll9zZXRXaW5kb3dTaXplKHdpbmRvd1NpemUpOwogICAgICAgIHBvaW50Lm11bHRpcGx5KEJpZ0ludCgzKSk7CiAgICAgICAgcmV0dXJuIHBvaW50OwogICAgICB9CiAgICB9OwogICAgZnVuY3Rpb24gZ2V0UHVibGljS2V5KHByaXZhdGVLZXksIGlzQ29tcHJlc3NlZCA9IHRydWUpIHsKICAgICAgcmV0dXJuIFBvaW50Mi5mcm9tUHJpdmF0ZUtleShwcml2YXRlS2V5KS50b1Jhd0J5dGVzKGlzQ29tcHJlc3NlZCk7CiAgICB9CiAgICBmdW5jdGlvbiBpc1Byb2JQdWIoaXRlbSkgewogICAgICBjb25zdCBhcnIgPSBpc0J5dGVzMihpdGVtKTsKICAgICAgY29uc3Qgc3RyID0gdHlwZW9mIGl0ZW0gPT09ICJzdHJpbmciOwogICAgICBjb25zdCBsZW4gPSAoYXJyIHx8IHN0cikgJiYgaXRlbS5sZW5ndGg7CiAgICAgIGlmIChhcnIpCiAgICAgICAgcmV0dXJuIGxlbiA9PT0gY29tcHJlc3NlZExlbiB8fCBsZW4gPT09IHVuY29tcHJlc3NlZExlbjsKICAgICAgaWYgKHN0cikKICAgICAgICByZXR1cm4gbGVuID09PSAyICogY29tcHJlc3NlZExlbiB8fCBsZW4gPT09IDIgKiB1bmNvbXByZXNzZWRMZW47CiAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUG9pbnQyKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRTaGFyZWRTZWNyZXQocHJpdmF0ZUEsIHB1YmxpY0IsIGlzQ29tcHJlc3NlZCA9IHRydWUpIHsKICAgICAgaWYgKGlzUHJvYlB1Yihwcml2YXRlQSkpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJmaXJzdCBhcmcgbXVzdCBiZSBwcml2YXRlIGtleSIpOwogICAgICBpZiAoIWlzUHJvYlB1YihwdWJsaWNCKSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInNlY29uZCBhcmcgbXVzdCBiZSBwdWJsaWMga2V5Iik7CiAgICAgIGNvbnN0IGIgPSBQb2ludDIuZnJvbUhleChwdWJsaWNCKTsKICAgICAgcmV0dXJuIGIubXVsdGlwbHkobm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2YXRlQSkpLnRvUmF3Qnl0ZXMoaXNDb21wcmVzc2VkKTsKICAgIH0KICAgIGNvbnN0IGJpdHMyaW50ID0gQ1VSVkUuYml0czJpbnQgfHwgZnVuY3Rpb24oYnl0ZXMyKSB7CiAgICAgIGNvbnN0IG51bSA9IGJ5dGVzVG9OdW1iZXJCRShieXRlczIpOwogICAgICBjb25zdCBkZWx0YSA9IGJ5dGVzMi5sZW5ndGggKiA4IC0gQ1VSVkUubkJpdExlbmd0aDsKICAgICAgcmV0dXJuIGRlbHRhID4gMCA/IG51bSA+PiBCaWdJbnQoZGVsdGEpIDogbnVtOwogICAgfTsKICAgIGNvbnN0IGJpdHMyaW50X21vZE4gPSBDVVJWRS5iaXRzMmludF9tb2ROIHx8IGZ1bmN0aW9uKGJ5dGVzMikgewogICAgICByZXR1cm4gbW9kTjIoYml0czJpbnQoYnl0ZXMyKSk7CiAgICB9OwogICAgY29uc3QgT1JERVJfTUFTSyA9IGJpdE1hc2soQ1VSVkUubkJpdExlbmd0aCk7CiAgICBmdW5jdGlvbiBpbnQyb2N0ZXRzKG51bSkgewogICAgICBpZiAodHlwZW9mIG51bSAhPT0gImJpZ2ludCIpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiaWdpbnQgZXhwZWN0ZWQiKTsKICAgICAgaWYgKCEoXzBuNSA8PSBudW0gJiYgbnVtIDwgT1JERVJfTUFTSykpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiaWdpbnQgZXhwZWN0ZWQgPCAyXiR7Q1VSVkUubkJpdExlbmd0aH1gKTsKICAgICAgcmV0dXJuIG51bWJlclRvQnl0ZXNCRShudW0sIENVUlZFLm5CeXRlTGVuZ3RoKTsKICAgIH0KICAgIGZ1bmN0aW9uIHByZXBTaWcobXNnSGFzaCwgcHJpdmF0ZUtleSwgb3B0cyA9IGRlZmF1bHRTaWdPcHRzKSB7CiAgICAgIGlmIChbInJlY292ZXJlZCIsICJjYW5vbmljYWwiXS5zb21lKChrKSA9PiBrIGluIG9wdHMpKQogICAgICAgIHRocm93IG5ldyBFcnJvcigic2lnbigpIGxlZ2FjeSBvcHRpb25zIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgY29uc3QgeyBoYXNoOiBoYXNoMywgcmFuZG9tQnl0ZXM6IHJhbmRvbUJ5dGVzMiB9ID0gQ1VSVkU7CiAgICAgIGxldCB7IGxvd1MsIHByZWhhc2gsIGV4dHJhRW50cm9weTogZW50IH0gPSBvcHRzOwogICAgICBpZiAobG93UyA9PSBudWxsKQogICAgICAgIGxvd1MgPSB0cnVlOwogICAgICBtc2dIYXNoID0gZW5zdXJlQnl0ZXMoIm1zZ0hhc2giLCBtc2dIYXNoKTsKICAgICAgaWYgKHByZWhhc2gpCiAgICAgICAgbXNnSGFzaCA9IGVuc3VyZUJ5dGVzKCJwcmVoYXNoZWQgbXNnSGFzaCIsIGhhc2gzKG1zZ0hhc2gpKTsKICAgICAgY29uc3QgaDFpbnQgPSBiaXRzMmludF9tb2ROKG1zZ0hhc2gpOwogICAgICBjb25zdCBkID0gbm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2YXRlS2V5KTsKICAgICAgY29uc3Qgc2VlZEFyZ3MgPSBbaW50Mm9jdGV0cyhkKSwgaW50Mm9jdGV0cyhoMWludCldOwogICAgICBpZiAoZW50ICE9IG51bGwgJiYgZW50ICE9PSBmYWxzZSkgewogICAgICAgIGNvbnN0IGUgPSBlbnQgPT09IHRydWUgPyByYW5kb21CeXRlczIoRnAyLkJZVEVTKSA6IGVudDsKICAgICAgICBzZWVkQXJncy5wdXNoKGVuc3VyZUJ5dGVzKCJleHRyYUVudHJvcHkiLCBlKSk7CiAgICAgIH0KICAgICAgY29uc3Qgc2VlZCA9IGNvbmNhdEJ5dGVzMyguLi5zZWVkQXJncyk7CiAgICAgIGNvbnN0IG0gPSBoMWludDsKICAgICAgZnVuY3Rpb24gazJzaWcoa0J5dGVzKSB7CiAgICAgICAgY29uc3QgayA9IGJpdHMyaW50KGtCeXRlcyk7CiAgICAgICAgaWYgKCFpc1dpdGhpbkN1cnZlT3JkZXIoaykpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgaWsgPSBpbnZOKGspOwogICAgICAgIGNvbnN0IHEgPSBQb2ludDIuQkFTRS5tdWx0aXBseShrKS50b0FmZmluZSgpOwogICAgICAgIGNvbnN0IHIgPSBtb2ROMihxLngpOwogICAgICAgIGlmIChyID09PSBfMG41KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IHMgPSBtb2ROMihpayAqIG1vZE4yKG0gKyByICogZCkpOwogICAgICAgIGlmIChzID09PSBfMG41KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGxldCByZWNvdmVyeSA9IChxLnggPT09IHIgPyAwIDogMikgfCBOdW1iZXIocS55ICYgXzFuNSk7CiAgICAgICAgbGV0IG5vcm1TID0gczsKICAgICAgICBpZiAobG93UyAmJiBpc0JpZ2dlclRoYW5IYWxmT3JkZXIocykpIHsKICAgICAgICAgIG5vcm1TID0gbm9ybWFsaXplUyhzKTsKICAgICAgICAgIHJlY292ZXJ5IF49IDE7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKHIsIG5vcm1TLCByZWNvdmVyeSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgc2VlZCwgazJzaWcgfTsKICAgIH0KICAgIGNvbnN0IGRlZmF1bHRTaWdPcHRzID0geyBsb3dTOiBDVVJWRS5sb3dTLCBwcmVoYXNoOiBmYWxzZSB9OwogICAgY29uc3QgZGVmYXVsdFZlck9wdHMgPSB7IGxvd1M6IENVUlZFLmxvd1MsIHByZWhhc2g6IGZhbHNlIH07CiAgICBmdW5jdGlvbiBzaWduMihtc2dIYXNoLCBwcml2S2V5LCBvcHRzID0gZGVmYXVsdFNpZ09wdHMpIHsKICAgICAgY29uc3QgeyBzZWVkLCBrMnNpZyB9ID0gcHJlcFNpZyhtc2dIYXNoLCBwcml2S2V5LCBvcHRzKTsKICAgICAgY29uc3QgQyA9IENVUlZFOwogICAgICBjb25zdCBkcmJnID0gY3JlYXRlSG1hY0RyYmcoQy5oYXNoLm91dHB1dExlbiwgQy5uQnl0ZUxlbmd0aCwgQy5obWFjKTsKICAgICAgcmV0dXJuIGRyYmcoc2VlZCwgazJzaWcpOwogICAgfQogICAgUG9pbnQyLkJBU0UuX3NldFdpbmRvd1NpemUoOCk7CiAgICBmdW5jdGlvbiB2ZXJpZnkoc2lnbmF0dXJlLCBtc2dIYXNoLCBwdWJsaWNLZXksIG9wdHMgPSBkZWZhdWx0VmVyT3B0cykgewogICAgICBjb25zdCBzZyA9IHNpZ25hdHVyZTsKICAgICAgbXNnSGFzaCA9IGVuc3VyZUJ5dGVzKCJtc2dIYXNoIiwgbXNnSGFzaCk7CiAgICAgIHB1YmxpY0tleSA9IGVuc3VyZUJ5dGVzKCJwdWJsaWNLZXkiLCBwdWJsaWNLZXkpOwogICAgICBpZiAoInN0cmljdCIgaW4gb3B0cykKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm9wdGlvbnMuc3RyaWN0IHdhcyByZW5hbWVkIHRvIGxvd1MiKTsKICAgICAgY29uc3QgeyBsb3dTLCBwcmVoYXNoIH0gPSBvcHRzOwogICAgICBsZXQgX3NpZyA9IHZvaWQgMDsKICAgICAgbGV0IFA7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKHR5cGVvZiBzZyA9PT0gInN0cmluZyIgfHwgaXNCeXRlczIoc2cpKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBfc2lnID0gU2lnbmF0dXJlLmZyb21ERVIoc2cpOwogICAgICAgICAgfSBjYXRjaCAoZGVyRXJyb3IpIHsKICAgICAgICAgICAgaWYgKCEoZGVyRXJyb3IgaW5zdGFuY2VvZiBERVIuRXJyKSkKICAgICAgICAgICAgICB0aHJvdyBkZXJFcnJvcjsKICAgICAgICAgICAgX3NpZyA9IFNpZ25hdHVyZS5mcm9tQ29tcGFjdChzZyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2cgPT09ICJvYmplY3QiICYmIHR5cGVvZiBzZy5yID09PSAiYmlnaW50IiAmJiB0eXBlb2Ygc2cucyA9PT0gImJpZ2ludCIpIHsKICAgICAgICAgIGNvbnN0IHsgcjogcjIsIHM6IHMyIH0gPSBzZzsKICAgICAgICAgIF9zaWcgPSBuZXcgU2lnbmF0dXJlKHIyLCBzMik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiUEFSU0UiKTsKICAgICAgICB9CiAgICAgICAgUCA9IFBvaW50Mi5mcm9tSGV4KHB1YmxpY0tleSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgPT09ICJQQVJTRSIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNpZ25hdHVyZSBtdXN0IGJlIFNpZ25hdHVyZSBpbnN0YW5jZSwgVWludDhBcnJheSBvciBoZXggc3RyaW5nYCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChsb3dTICYmIF9zaWcuaGFzSGlnaFMoKSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChwcmVoYXNoKQogICAgICAgIG1zZ0hhc2ggPSBDVVJWRS5oYXNoKG1zZ0hhc2gpOwogICAgICBjb25zdCB7IHIsIHMgfSA9IF9zaWc7CiAgICAgIGNvbnN0IGggPSBiaXRzMmludF9tb2ROKG1zZ0hhc2gpOwogICAgICBjb25zdCBpcyA9IGludk4ocyk7CiAgICAgIGNvbnN0IHUxID0gbW9kTjIoaCAqIGlzKTsKICAgICAgY29uc3QgdTIgPSBtb2ROMihyICogaXMpOwogICAgICBjb25zdCBSID0gUG9pbnQyLkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoUCwgdTEsIHUyKT8udG9BZmZpbmUoKTsKICAgICAgaWYgKCFSKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgY29uc3QgdiA9IG1vZE4yKFIueCk7CiAgICAgIHJldHVybiB2ID09PSByOwogICAgfQogICAgcmV0dXJuIHsKICAgICAgQ1VSVkUsCiAgICAgIGdldFB1YmxpY0tleSwKICAgICAgZ2V0U2hhcmVkU2VjcmV0LAogICAgICBzaWduOiBzaWduMiwKICAgICAgdmVyaWZ5LAogICAgICBQcm9qZWN0aXZlUG9pbnQ6IFBvaW50MiwKICAgICAgU2lnbmF0dXJlLAogICAgICB1dGlscwogICAgfTsKICB9CiAgZnVuY3Rpb24gU1dVRnBTcXJ0UmF0aW8oRnAyLCBaKSB7CiAgICBjb25zdCBxID0gRnAyLk9SREVSOwogICAgbGV0IGwgPSBfMG41OwogICAgZm9yIChsZXQgbyA9IHEgLSBfMW41OyBvICUgXzJuNCA9PT0gXzBuNTsgbyAvPSBfMm40KQogICAgICBsICs9IF8xbjU7CiAgICBjb25zdCBjMSA9IGw7CiAgICBjb25zdCBfMm5fcG93X2MxXzEgPSBfMm40IDw8IGMxIC0gXzFuNSAtIF8xbjU7CiAgICBjb25zdCBfMm5fcG93X2MxID0gXzJuX3Bvd19jMV8xICogXzJuNDsKICAgIGNvbnN0IGMyID0gKHEgLSBfMW41KSAvIF8ybl9wb3dfYzE7CiAgICBjb25zdCBjMyA9IChjMiAtIF8xbjUpIC8gXzJuNDsKICAgIGNvbnN0IGM0ID0gXzJuX3Bvd19jMSAtIF8xbjU7CiAgICBjb25zdCBjNSA9IF8ybl9wb3dfYzFfMTsKICAgIGNvbnN0IGM2ID0gRnAyLnBvdyhaLCBjMik7CiAgICBjb25zdCBjNyA9IEZwMi5wb3coWiwgKGMyICsgXzFuNSkgLyBfMm40KTsKICAgIGxldCBzcXJ0UmF0aW8gPSAodSwgdikgPT4gewogICAgICBsZXQgdHYxID0gYzY7CiAgICAgIGxldCB0djIgPSBGcDIucG93KHYsIGM0KTsKICAgICAgbGV0IHR2MyA9IEZwMi5zcXIodHYyKTsKICAgICAgdHYzID0gRnAyLm11bCh0djMsIHYpOwogICAgICBsZXQgdHY1ID0gRnAyLm11bCh1LCB0djMpOwogICAgICB0djUgPSBGcDIucG93KHR2NSwgYzMpOwogICAgICB0djUgPSBGcDIubXVsKHR2NSwgdHYyKTsKICAgICAgdHYyID0gRnAyLm11bCh0djUsIHYpOwogICAgICB0djMgPSBGcDIubXVsKHR2NSwgdSk7CiAgICAgIGxldCB0djQgPSBGcDIubXVsKHR2MywgdHYyKTsKICAgICAgdHY1ID0gRnAyLnBvdyh0djQsIGM1KTsKICAgICAgbGV0IGlzUVIgPSBGcDIuZXFsKHR2NSwgRnAyLk9ORSk7CiAgICAgIHR2MiA9IEZwMi5tdWwodHYzLCBjNyk7CiAgICAgIHR2NSA9IEZwMi5tdWwodHY0LCB0djEpOwogICAgICB0djMgPSBGcDIuY21vdih0djIsIHR2MywgaXNRUik7CiAgICAgIHR2NCA9IEZwMi5jbW92KHR2NSwgdHY0LCBpc1FSKTsKICAgICAgZm9yIChsZXQgaSA9IGMxOyBpID4gXzFuNTsgaS0tKSB7CiAgICAgICAgbGV0IHR2NTIgPSBpIC0gXzJuNDsKICAgICAgICB0djUyID0gXzJuNCA8PCB0djUyIC0gXzFuNTsKICAgICAgICBsZXQgdHZ2NSA9IEZwMi5wb3codHY0LCB0djUyKTsKICAgICAgICBjb25zdCBlMSA9IEZwMi5lcWwodHZ2NSwgRnAyLk9ORSk7CiAgICAgICAgdHYyID0gRnAyLm11bCh0djMsIHR2MSk7CiAgICAgICAgdHYxID0gRnAyLm11bCh0djEsIHR2MSk7CiAgICAgICAgdHZ2NSA9IEZwMi5tdWwodHY0LCB0djEpOwogICAgICAgIHR2MyA9IEZwMi5jbW92KHR2MiwgdHYzLCBlMSk7CiAgICAgICAgdHY0ID0gRnAyLmNtb3YodHZ2NSwgdHY0LCBlMSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgaXNWYWxpZDogaXNRUiwgdmFsdWU6IHR2MyB9OwogICAgfTsKICAgIGlmIChGcDIuT1JERVIgJSBfNG4yID09PSBfM24yKSB7CiAgICAgIGNvbnN0IGMxMiA9IChGcDIuT1JERVIgLSBfM24yKSAvIF80bjI7CiAgICAgIGNvbnN0IGMyMiA9IEZwMi5zcXJ0KEZwMi5uZWcoWikpOwogICAgICBzcXJ0UmF0aW8gPSAodSwgdikgPT4gewogICAgICAgIGxldCB0djEgPSBGcDIuc3FyKHYpOwogICAgICAgIGNvbnN0IHR2MiA9IEZwMi5tdWwodSwgdik7CiAgICAgICAgdHYxID0gRnAyLm11bCh0djEsIHR2Mik7CiAgICAgICAgbGV0IHkxID0gRnAyLnBvdyh0djEsIGMxMik7CiAgICAgICAgeTEgPSBGcDIubXVsKHkxLCB0djIpOwogICAgICAgIGNvbnN0IHkyID0gRnAyLm11bCh5MSwgYzIyKTsKICAgICAgICBjb25zdCB0djMgPSBGcDIubXVsKEZwMi5zcXIoeTEpLCB2KTsKICAgICAgICBjb25zdCBpc1FSID0gRnAyLmVxbCh0djMsIHUpOwogICAgICAgIGxldCB5ID0gRnAyLmNtb3YoeTIsIHkxLCBpc1FSKTsKICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBpc1FSLCB2YWx1ZTogeSB9OwogICAgICB9OwogICAgfQogICAgcmV0dXJuIHNxcnRSYXRpbzsKICB9CiAgZnVuY3Rpb24gbWFwVG9DdXJ2ZVNpbXBsZVNXVShGcDIsIG9wdHMpIHsKICAgIHZhbGlkYXRlRmllbGQoRnAyKTsKICAgIGlmICghRnAyLmlzVmFsaWQob3B0cy5BKSB8fCAhRnAyLmlzVmFsaWQob3B0cy5CKSB8fCAhRnAyLmlzVmFsaWQob3B0cy5aKSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJtYXBUb0N1cnZlU2ltcGxlU1dVOiBpbnZhbGlkIG9wdHMiKTsKICAgIGNvbnN0IHNxcnRSYXRpbyA9IFNXVUZwU3FydFJhdGlvKEZwMiwgb3B0cy5aKTsKICAgIGlmICghRnAyLmlzT2RkKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkZwLmlzT2RkIGlzIG5vdCBpbXBsZW1lbnRlZCEiKTsKICAgIHJldHVybiAodSkgPT4gewogICAgICBsZXQgdHYxLCB0djIsIHR2MywgdHY0LCB0djUsIHR2NiwgeCwgeTsKICAgICAgdHYxID0gRnAyLnNxcih1KTsKICAgICAgdHYxID0gRnAyLm11bCh0djEsIG9wdHMuWik7CiAgICAgIHR2MiA9IEZwMi5zcXIodHYxKTsKICAgICAgdHYyID0gRnAyLmFkZCh0djIsIHR2MSk7CiAgICAgIHR2MyA9IEZwMi5hZGQodHYyLCBGcDIuT05FKTsKICAgICAgdHYzID0gRnAyLm11bCh0djMsIG9wdHMuQik7CiAgICAgIHR2NCA9IEZwMi5jbW92KG9wdHMuWiwgRnAyLm5lZyh0djIpLCAhRnAyLmVxbCh0djIsIEZwMi5aRVJPKSk7CiAgICAgIHR2NCA9IEZwMi5tdWwodHY0LCBvcHRzLkEpOwogICAgICB0djIgPSBGcDIuc3FyKHR2Myk7CiAgICAgIHR2NiA9IEZwMi5zcXIodHY0KTsKICAgICAgdHY1ID0gRnAyLm11bCh0djYsIG9wdHMuQSk7CiAgICAgIHR2MiA9IEZwMi5hZGQodHYyLCB0djUpOwogICAgICB0djIgPSBGcDIubXVsKHR2MiwgdHYzKTsKICAgICAgdHY2ID0gRnAyLm11bCh0djYsIHR2NCk7CiAgICAgIHR2NSA9IEZwMi5tdWwodHY2LCBvcHRzLkIpOwogICAgICB0djIgPSBGcDIuYWRkKHR2MiwgdHY1KTsKICAgICAgeCA9IEZwMi5tdWwodHYxLCB0djMpOwogICAgICBjb25zdCB7IGlzVmFsaWQsIHZhbHVlIH0gPSBzcXJ0UmF0aW8odHYyLCB0djYpOwogICAgICB5ID0gRnAyLm11bCh0djEsIHUpOwogICAgICB5ID0gRnAyLm11bCh5LCB2YWx1ZSk7CiAgICAgIHggPSBGcDIuY21vdih4LCB0djMsIGlzVmFsaWQpOwogICAgICB5ID0gRnAyLmNtb3YoeSwgdmFsdWUsIGlzVmFsaWQpOwogICAgICBjb25zdCBlMSA9IEZwMi5pc09kZCh1KSA9PT0gRnAyLmlzT2RkKHkpOwogICAgICB5ID0gRnAyLmNtb3YoRnAyLm5lZyh5KSwgeSwgZTEpOwogICAgICB4ID0gRnAyLmRpdih4LCB0djQpOwogICAgICByZXR1cm4geyB4LCB5IH07CiAgICB9OwogIH0KICB2YXIgYjJuLCBoMmIsIERFUiwgXzBuNSwgXzFuNSwgXzJuNCwgXzNuMiwgXzRuMjsKICB2YXIgaW5pdF93ZWllcnN0cmFzcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3Qvd2VpZXJzdHJhc3MuanMiKCkgewogICAgICBpbml0X21vZHVsYXIoKTsKICAgICAgaW5pdF91dGlsczQoKTsKICAgICAgaW5pdF91dGlsczQoKTsKICAgICAgaW5pdF9jdXJ2ZSgpOwogICAgICAoeyBieXRlc1RvTnVtYmVyQkU6IGIybiwgaGV4VG9CeXRlczogaDJiIH0gPSB1dGlsc19leHBvcnRzKTsKICAgICAgREVSID0gewogICAgICAgIC8vIGFzbi4xIERFUiBlbmNvZGluZyB1dGlscwogICAgICAgIEVycjogY2xhc3MgREVSRXJyIGV4dGVuZHMgRXJyb3IgewogICAgICAgICAgY29uc3RydWN0b3IobSA9ICIiKSB7CiAgICAgICAgICAgIHN1cGVyKG0pOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgX3BhcnNlSW50KGRhdGEpIHsKICAgICAgICAgIGNvbnN0IHsgRXJyOiBFIH0gPSBERVI7CiAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPCAyIHx8IGRhdGFbMF0gIT09IDIpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyIHRhZyIpOwogICAgICAgICAgY29uc3QgbGVuID0gZGF0YVsxXTsKICAgICAgICAgIGNvbnN0IHJlcyA9IGRhdGEuc3ViYXJyYXkoMiwgbGVuICsgMik7CiAgICAgICAgICBpZiAoIWxlbiB8fCByZXMubGVuZ3RoICE9PSBsZW4pCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiB3cm9uZyBsZW5ndGgiKTsKICAgICAgICAgIGlmIChyZXNbMF0gJiAxMjgpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiBuZWdhdGl2ZSIpOwogICAgICAgICAgaWYgKHJlc1swXSA9PT0gMCAmJiAhKHJlc1sxXSAmIDEyOCkpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiB1bm5lY2Vzc2FyeSBsZWFkaW5nIHplcm8iKTsKICAgICAgICAgIHJldHVybiB7IGQ6IGIybihyZXMpLCBsOiBkYXRhLnN1YmFycmF5KGxlbiArIDIpIH07CiAgICAgICAgfSwKICAgICAgICB0b1NpZyhoZXgpIHsKICAgICAgICAgIGNvbnN0IHsgRXJyOiBFIH0gPSBERVI7CiAgICAgICAgICBjb25zdCBkYXRhID0gdHlwZW9mIGhleCA9PT0gInN0cmluZyIgPyBoMmIoaGV4KSA6IGhleDsKICAgICAgICAgIGFieXRlcyhkYXRhKTsKICAgICAgICAgIGxldCBsID0gZGF0YS5sZW5ndGg7CiAgICAgICAgICBpZiAobCA8IDIgfHwgZGF0YVswXSAhPSA0OCkKICAgICAgICAgICAgdGhyb3cgbmV3IEUoIkludmFsaWQgc2lnbmF0dXJlIHRhZyIpOwogICAgICAgICAgaWYgKGRhdGFbMV0gIT09IGwgLSAyKQogICAgICAgICAgICB0aHJvdyBuZXcgRSgiSW52YWxpZCBzaWduYXR1cmU6IGluY29ycmVjdCBsZW5ndGgiKTsKICAgICAgICAgIGNvbnN0IHsgZDogciwgbDogc0J5dGVzIH0gPSBERVIuX3BhcnNlSW50KGRhdGEuc3ViYXJyYXkoMikpOwogICAgICAgICAgY29uc3QgeyBkOiBzLCBsOiByQnl0ZXNMZWZ0IH0gPSBERVIuX3BhcnNlSW50KHNCeXRlcyk7CiAgICAgICAgICBpZiAockJ5dGVzTGVmdC5sZW5ndGgpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZTogbGVmdCBieXRlcyBhZnRlciBwYXJzaW5nIik7CiAgICAgICAgICByZXR1cm4geyByLCBzIH07CiAgICAgICAgfSwKICAgICAgICBoZXhGcm9tU2lnKHNpZykgewogICAgICAgICAgY29uc3Qgc2xpY2UyID0gKHMyKSA9PiBOdW1iZXIucGFyc2VJbnQoczJbMF0sIDE2KSAmIDggPyAiMDAiICsgczIgOiBzMjsKICAgICAgICAgIGNvbnN0IGggPSAobnVtKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGhleCA9IG51bS50b1N0cmluZygxNik7CiAgICAgICAgICAgIHJldHVybiBoZXgubGVuZ3RoICYgMSA/IGAwJHtoZXh9YCA6IGhleDsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCBzID0gc2xpY2UyKGgoc2lnLnMpKTsKICAgICAgICAgIGNvbnN0IHIgPSBzbGljZTIoaChzaWcucikpOwogICAgICAgICAgY29uc3Qgc2hsID0gcy5sZW5ndGggLyAyOwogICAgICAgICAgY29uc3QgcmhsID0gci5sZW5ndGggLyAyOwogICAgICAgICAgY29uc3Qgc2wgPSBoKHNobCk7CiAgICAgICAgICBjb25zdCBybCA9IGgocmhsKTsKICAgICAgICAgIHJldHVybiBgMzAke2gocmhsICsgc2hsICsgNCl9MDIke3JsfSR7cn0wMiR7c2x9JHtzfWA7CiAgICAgICAgfQogICAgICB9OwogICAgICBfMG41ID0gQmlnSW50KDApOwogICAgICBfMW41ID0gQmlnSW50KDEpOwogICAgICBfMm40ID0gQmlnSW50KDIpOwogICAgICBfM24yID0gQmlnSW50KDMpOwogICAgICBfNG4yID0gQmlnSW50KDQpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvaGFzaC10by1jdXJ2ZS5qcwogIGZ1bmN0aW9uIGkyb3NwKHZhbHVlLCBsZW5ndGgpIHsKICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPj0gMSA8PCA4ICogbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIEkyT1NQIGNhbGw6IHZhbHVlPSR7dmFsdWV9IGxlbmd0aD0ke2xlbmd0aH1gKTsKICAgIH0KICAgIGNvbnN0IHJlcyA9IEFycmF5LmZyb20oeyBsZW5ndGggfSkuZmlsbCgwKTsKICAgIGZvciAobGV0IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICByZXNbaV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgdmFsdWUgPj4+PSA4OwogICAgfQogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlcyk7CiAgfQogIGZ1bmN0aW9uIHN0cnhvcihhLCBiKSB7CiAgICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheShhLmxlbmd0aCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKICAgICAgYXJyW2ldID0gYVtpXSBeIGJbaV07CiAgICB9CiAgICByZXR1cm4gYXJyOwogIH0KICBmdW5jdGlvbiBhbnVtKGl0ZW0pIHsKICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoaXRlbSkpCiAgICAgIHRocm93IG5ldyBFcnJvcigibnVtYmVyIGV4cGVjdGVkIik7CiAgfQogIGZ1bmN0aW9uIGV4cGFuZF9tZXNzYWdlX3htZChtc2csIERTVCwgbGVuSW5CeXRlcywgSCkgewogICAgYWJ5dGVzKG1zZyk7CiAgICBhYnl0ZXMoRFNUKTsKICAgIGFudW0obGVuSW5CeXRlcyk7CiAgICBpZiAoRFNULmxlbmd0aCA+IDI1NSkKICAgICAgRFNUID0gSChjb25jYXRCeXRlczModXRmOFRvQnl0ZXMyKCJIMkMtT1ZFUlNJWkUtRFNULSIpLCBEU1QpKTsKICAgIGNvbnN0IHsgb3V0cHV0TGVuOiBiX2luX2J5dGVzLCBibG9ja0xlbjogcl9pbl9ieXRlcyB9ID0gSDsKICAgIGNvbnN0IGVsbCA9IE1hdGguY2VpbChsZW5JbkJ5dGVzIC8gYl9pbl9ieXRlcyk7CiAgICBpZiAoZWxsID4gMjU1KQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeG1kIGxlbmd0aCIpOwogICAgY29uc3QgRFNUX3ByaW1lID0gY29uY2F0Qnl0ZXMzKERTVCwgaTJvc3AoRFNULmxlbmd0aCwgMSkpOwogICAgY29uc3QgWl9wYWQgPSBpMm9zcCgwLCByX2luX2J5dGVzKTsKICAgIGNvbnN0IGxfaV9iX3N0ciA9IGkyb3NwKGxlbkluQnl0ZXMsIDIpOwogICAgY29uc3QgYiA9IG5ldyBBcnJheShlbGwpOwogICAgY29uc3QgYl8wID0gSChjb25jYXRCeXRlczMoWl9wYWQsIG1zZywgbF9pX2Jfc3RyLCBpMm9zcCgwLCAxKSwgRFNUX3ByaW1lKSk7CiAgICBiWzBdID0gSChjb25jYXRCeXRlczMoYl8wLCBpMm9zcCgxLCAxKSwgRFNUX3ByaW1lKSk7CiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBlbGw7IGkrKykgewogICAgICBjb25zdCBhcmdzID0gW3N0cnhvcihiXzAsIGJbaSAtIDFdKSwgaTJvc3AoaSArIDEsIDEpLCBEU1RfcHJpbWVdOwogICAgICBiW2ldID0gSChjb25jYXRCeXRlczMoLi4uYXJncykpOwogICAgfQogICAgY29uc3QgcHNldWRvX3JhbmRvbV9ieXRlcyA9IGNvbmNhdEJ5dGVzMyguLi5iKTsKICAgIHJldHVybiBwc2V1ZG9fcmFuZG9tX2J5dGVzLnNsaWNlKDAsIGxlbkluQnl0ZXMpOwogIH0KICBmdW5jdGlvbiBleHBhbmRfbWVzc2FnZV94b2YobXNnLCBEU1QsIGxlbkluQnl0ZXMsIGssIEgpIHsKICAgIGFieXRlcyhtc2cpOwogICAgYWJ5dGVzKERTVCk7CiAgICBhbnVtKGxlbkluQnl0ZXMpOwogICAgaWYgKERTVC5sZW5ndGggPiAyNTUpIHsKICAgICAgY29uc3QgZGtMZW4gPSBNYXRoLmNlaWwoMiAqIGsgLyA4KTsKICAgICAgRFNUID0gSC5jcmVhdGUoeyBka0xlbiB9KS51cGRhdGUodXRmOFRvQnl0ZXMyKCJIMkMtT1ZFUlNJWkUtRFNULSIpKS51cGRhdGUoRFNUKS5kaWdlc3QoKTsKICAgIH0KICAgIGlmIChsZW5JbkJ5dGVzID4gNjU1MzUgfHwgRFNULmxlbmd0aCA+IDI1NSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJleHBhbmRfbWVzc2FnZV94b2Y6IGludmFsaWQgbGVuSW5CeXRlcyIpOwogICAgcmV0dXJuIEguY3JlYXRlKHsgZGtMZW46IGxlbkluQnl0ZXMgfSkudXBkYXRlKG1zZykudXBkYXRlKGkyb3NwKGxlbkluQnl0ZXMsIDIpKS51cGRhdGUoRFNUKS51cGRhdGUoaTJvc3AoRFNULmxlbmd0aCwgMSkpLmRpZ2VzdCgpOwogIH0KICBmdW5jdGlvbiBoYXNoX3RvX2ZpZWxkKG1zZywgY291bnQsIG9wdGlvbnMpIHsKICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsIHsKICAgICAgRFNUOiAic3RyaW5nT3JVaW50OEFycmF5IiwKICAgICAgcDogImJpZ2ludCIsCiAgICAgIG06ICJpc1NhZmVJbnRlZ2VyIiwKICAgICAgazogImlzU2FmZUludGVnZXIiLAogICAgICBoYXNoOiAiaGFzaCIKICAgIH0pOwogICAgY29uc3QgeyBwLCBrLCBtLCBoYXNoOiBoYXNoMywgZXhwYW5kLCBEU1Q6IF9EU1QgfSA9IG9wdGlvbnM7CiAgICBhYnl0ZXMobXNnKTsKICAgIGFudW0oY291bnQpOwogICAgY29uc3QgRFNUID0gdHlwZW9mIF9EU1QgPT09ICJzdHJpbmciID8gdXRmOFRvQnl0ZXMyKF9EU1QpIDogX0RTVDsKICAgIGNvbnN0IGxvZzJwID0gcC50b1N0cmluZygyKS5sZW5ndGg7CiAgICBjb25zdCBMID0gTWF0aC5jZWlsKChsb2cycCArIGspIC8gOCk7CiAgICBjb25zdCBsZW5faW5fYnl0ZXMgPSBjb3VudCAqIG0gKiBMOwogICAgbGV0IHByYjsKICAgIGlmIChleHBhbmQgPT09ICJ4bWQiKSB7CiAgICAgIHByYiA9IGV4cGFuZF9tZXNzYWdlX3htZChtc2csIERTVCwgbGVuX2luX2J5dGVzLCBoYXNoMyk7CiAgICB9IGVsc2UgaWYgKGV4cGFuZCA9PT0gInhvZiIpIHsKICAgICAgcHJiID0gZXhwYW5kX21lc3NhZ2VfeG9mKG1zZywgRFNULCBsZW5faW5fYnl0ZXMsIGssIGhhc2gzKTsKICAgIH0gZWxzZSBpZiAoZXhwYW5kID09PSAiX2ludGVybmFsX3Bhc3MiKSB7CiAgICAgIHByYiA9IG1zZzsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwYW5kIG11c3QgYmUgInhtZCIgb3IgInhvZiInKTsKICAgIH0KICAgIGNvbnN0IHUgPSBuZXcgQXJyYXkoY291bnQpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGNvbnN0IGUgPSBuZXcgQXJyYXkobSk7CiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbTsgaisrKSB7CiAgICAgICAgY29uc3QgZWxtX29mZnNldCA9IEwgKiAoaiArIGkgKiBtKTsKICAgICAgICBjb25zdCB0diA9IHByYi5zdWJhcnJheShlbG1fb2Zmc2V0LCBlbG1fb2Zmc2V0ICsgTCk7CiAgICAgICAgZVtqXSA9IG1vZChvczJpcCh0diksIHApOwogICAgICB9CiAgICAgIHVbaV0gPSBlOwogICAgfQogICAgcmV0dXJuIHU7CiAgfQogIGZ1bmN0aW9uIGlzb2dlbnlNYXAoZmllbGQsIG1hcCkgewogICAgY29uc3QgQ09FRkYgPSBtYXAubWFwKChpKSA9PiBBcnJheS5mcm9tKGkpLnJldmVyc2UoKSk7CiAgICByZXR1cm4gKHgsIHkpID0+IHsKICAgICAgY29uc3QgW3hOdW0sIHhEZW4sIHlOdW0sIHlEZW5dID0gQ09FRkYubWFwKCh2YWwpID0+IHZhbC5yZWR1Y2UoKGFjYywgaSkgPT4gZmllbGQuYWRkKGZpZWxkLm11bChhY2MsIHgpLCBpKSkpOwogICAgICB4ID0gZmllbGQuZGl2KHhOdW0sIHhEZW4pOwogICAgICB5ID0gZmllbGQubXVsKHksIGZpZWxkLmRpdih5TnVtLCB5RGVuKSk7CiAgICAgIHJldHVybiB7IHgsIHkgfTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIGNyZWF0ZUhhc2hlcihQb2ludDIsIG1hcFRvQ3VydmUsIGRlZikgewogICAgaWYgKHR5cGVvZiBtYXBUb0N1cnZlICE9PSAiZnVuY3Rpb24iKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIm1hcFRvQ3VydmUoKSBtdXN0IGJlIGRlZmluZWQiKTsKICAgIHJldHVybiB7CiAgICAgIC8vIEVuY29kZXMgYnl0ZSBzdHJpbmcgdG8gZWxsaXB0aWMgY3VydmUuCiAgICAgIC8vIGhhc2hfdG9fY3VydmUgZnJvbSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTMKICAgICAgaGFzaFRvQ3VydmUobXNnLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgdSA9IGhhc2hfdG9fZmllbGQobXNnLCAyLCB7IC4uLmRlZiwgRFNUOiBkZWYuRFNULCAuLi5vcHRpb25zIH0pOwogICAgICAgIGNvbnN0IHUwID0gUG9pbnQyLmZyb21BZmZpbmUobWFwVG9DdXJ2ZSh1WzBdKSk7CiAgICAgICAgY29uc3QgdTEgPSBQb2ludDIuZnJvbUFmZmluZShtYXBUb0N1cnZlKHVbMV0pKTsKICAgICAgICBjb25zdCBQID0gdTAuYWRkKHUxKS5jbGVhckNvZmFjdG9yKCk7CiAgICAgICAgUC5hc3NlcnRWYWxpZGl0eSgpOwogICAgICAgIHJldHVybiBQOwogICAgICB9LAogICAgICAvLyBFbmNvZGVzIGJ5dGUgc3RyaW5nIHRvIGVsbGlwdGljIGN1cnZlLgogICAgICAvLyBlbmNvZGVfdG9fY3VydmUgZnJvbSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTMKICAgICAgZW5jb2RlVG9DdXJ2ZShtc2csIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCB1ID0gaGFzaF90b19maWVsZChtc2csIDEsIHsgLi4uZGVmLCBEU1Q6IGRlZi5lbmNvZGVEU1QsIC4uLm9wdGlvbnMgfSk7CiAgICAgICAgY29uc3QgUCA9IFBvaW50Mi5mcm9tQWZmaW5lKG1hcFRvQ3VydmUodVswXSkpLmNsZWFyQ29mYWN0b3IoKTsKICAgICAgICBQLmFzc2VydFZhbGlkaXR5KCk7CiAgICAgICAgcmV0dXJuIFA7CiAgICAgIH0KICAgIH07CiAgfQogIHZhciBvczJpcDsKICB2YXIgaW5pdF9oYXNoX3RvX2N1cnZlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC9oYXNoLXRvLWN1cnZlLmpzIigpIHsKICAgICAgaW5pdF9tb2R1bGFyKCk7CiAgICAgIGluaXRfdXRpbHM0KCk7CiAgICAgIG9zMmlwID0gYnl0ZXNUb051bWJlckJFOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vaG1hYy5qcwogIHZhciBITUFDLCBobWFjOwogIHZhciBpbml0X2htYWMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL2htYWMuanMiKCkgewogICAgICBpbml0X2Fzc2VydCgpOwogICAgICBpbml0X3V0aWxzMigpOwogICAgICBITUFDID0gY2xhc3MgZXh0ZW5kcyBIYXNoIHsKICAgICAgICBjb25zdHJ1Y3RvcihoYXNoMywgX2tleSkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIHRoaXMuZmluaXNoZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7CiAgICAgICAgICBoYXNoKGhhc2gzKTsKICAgICAgICAgIGNvbnN0IGtleSA9IHRvQnl0ZXMyKF9rZXkpOwogICAgICAgICAgdGhpcy5pSGFzaCA9IGhhc2gzLmNyZWF0ZSgpOwogICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlIYXNoLnVwZGF0ZSAhPT0gImZ1bmN0aW9uIikKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBpbnN0YW5jZSBvZiBjbGFzcyB3aGljaCBleHRlbmRzIHV0aWxzLkhhc2giKTsKICAgICAgICAgIHRoaXMuYmxvY2tMZW4gPSB0aGlzLmlIYXNoLmJsb2NrTGVuOwogICAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSB0aGlzLmlIYXNoLm91dHB1dExlbjsKICAgICAgICAgIGNvbnN0IGJsb2NrTGVuID0gdGhpcy5ibG9ja0xlbjsKICAgICAgICAgIGNvbnN0IHBhZDIgPSBuZXcgVWludDhBcnJheShibG9ja0xlbik7CiAgICAgICAgICBwYWQyLnNldChrZXkubGVuZ3RoID4gYmxvY2tMZW4gPyBoYXNoMy5jcmVhdGUoKS51cGRhdGUoa2V5KS5kaWdlc3QoKSA6IGtleSk7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZDIubGVuZ3RoOyBpKyspCiAgICAgICAgICAgIHBhZDJbaV0gXj0gNTQ7CiAgICAgICAgICB0aGlzLmlIYXNoLnVwZGF0ZShwYWQyKTsKICAgICAgICAgIHRoaXMub0hhc2ggPSBoYXNoMy5jcmVhdGUoKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFkMi5sZW5ndGg7IGkrKykKICAgICAgICAgICAgcGFkMltpXSBePSA1NCBeIDkyOwogICAgICAgICAgdGhpcy5vSGFzaC51cGRhdGUocGFkMik7CiAgICAgICAgICBwYWQyLmZpbGwoMCk7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZShidWYpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzKTsKICAgICAgICAgIHRoaXMuaUhhc2gudXBkYXRlKGJ1Zik7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgZGlnZXN0SW50byhvdXQpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzKTsKICAgICAgICAgIGJ5dGVzKG91dCwgdGhpcy5vdXRwdXRMZW4pOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IHRydWU7CiAgICAgICAgICB0aGlzLmlIYXNoLmRpZ2VzdEludG8ob3V0KTsKICAgICAgICAgIHRoaXMub0hhc2gudXBkYXRlKG91dCk7CiAgICAgICAgICB0aGlzLm9IYXNoLmRpZ2VzdEludG8ob3V0KTsKICAgICAgICAgIHRoaXMuZGVzdHJveSgpOwogICAgICAgIH0KICAgICAgICBkaWdlc3QoKSB7CiAgICAgICAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheSh0aGlzLm9IYXNoLm91dHB1dExlbik7CiAgICAgICAgICB0aGlzLmRpZ2VzdEludG8ob3V0KTsKICAgICAgICAgIHJldHVybiBvdXQ7CiAgICAgICAgfQogICAgICAgIF9jbG9uZUludG8odG8pIHsKICAgICAgICAgIHRvIHx8ICh0byA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLCB7fSkpOwogICAgICAgICAgY29uc3QgeyBvSGFzaCwgaUhhc2gsIGZpbmlzaGVkLCBkZXN0cm95ZWQsIGJsb2NrTGVuLCBvdXRwdXRMZW4gfSA9IHRoaXM7CiAgICAgICAgICB0byA9IHRvOwogICAgICAgICAgdG8uZmluaXNoZWQgPSBmaW5pc2hlZDsKICAgICAgICAgIHRvLmRlc3Ryb3llZCA9IGRlc3Ryb3llZDsKICAgICAgICAgIHRvLmJsb2NrTGVuID0gYmxvY2tMZW47CiAgICAgICAgICB0by5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0by5vSGFzaCA9IG9IYXNoLl9jbG9uZUludG8odG8ub0hhc2gpOwogICAgICAgICAgdG8uaUhhc2ggPSBpSGFzaC5fY2xvbmVJbnRvKHRvLmlIYXNoKTsKICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICB9CiAgICAgICAgZGVzdHJveSgpIHsKICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMub0hhc2guZGVzdHJveSgpOwogICAgICAgICAgdGhpcy5pSGFzaC5kZXN0cm95KCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBobWFjID0gKGhhc2gzLCBrZXksIG1lc3NhZ2UpID0+IG5ldyBITUFDKGhhc2gzLCBrZXkpLnVwZGF0ZShtZXNzYWdlKS5kaWdlc3QoKTsKICAgICAgaG1hYy5jcmVhdGUgPSAoaGFzaDMsIGtleSkgPT4gbmV3IEhNQUMoaGFzaDMsIGtleSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9fc2hvcnR3X3V0aWxzLmpzCiAgZnVuY3Rpb24gZ2V0SGFzaChoYXNoMykgewogICAgcmV0dXJuIHsKICAgICAgaGFzaDogaGFzaDMsCiAgICAgIGhtYWM6IChrZXksIC4uLm1zZ3MpID0+IGhtYWMoaGFzaDMsIGtleSwgY29uY2F0Qnl0ZXMoLi4ubXNncykpLAogICAgICByYW5kb21CeXRlcwogICAgfTsKICB9CiAgZnVuY3Rpb24gY3JlYXRlQ3VydmUoY3VydmVEZWYsIGRlZkhhc2gpIHsKICAgIGNvbnN0IGNyZWF0ZSA9IChoYXNoMykgPT4gd2VpZXJzdHJhc3MoeyAuLi5jdXJ2ZURlZiwgLi4uZ2V0SGFzaChoYXNoMykgfSk7CiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLmNyZWF0ZShkZWZIYXNoKSwgY3JlYXRlIH0pOwogIH0KICB2YXIgaW5pdF9zaG9ydHdfdXRpbHMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL19zaG9ydHdfdXRpbHMuanMiKCkgewogICAgICBpbml0X2htYWMoKTsKICAgICAgaW5pdF91dGlsczIoKTsKICAgICAgaW5pdF93ZWllcnN0cmFzcygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vc2VjcDI1NmsxLmpzCiAgdmFyIHNlY3AyNTZrMV9leHBvcnRzID0ge307CiAgX19leHBvcnQoc2VjcDI1NmsxX2V4cG9ydHMsIHsKICAgIGVuY29kZVRvQ3VydmU6ICgpID0+IGVuY29kZVRvQ3VydmUsCiAgICBoYXNoVG9DdXJ2ZTogKCkgPT4gaGFzaFRvQ3VydmUsCiAgICBzY2hub3JyOiAoKSA9PiBzY2hub3JyLAogICAgc2VjcDI1NmsxOiAoKSA9PiBzZWNwMjU2azEKICB9KTsKICBmdW5jdGlvbiBzcXJ0TW9kKHkpIHsKICAgIGNvbnN0IFAgPSBzZWNwMjU2azFQOwogICAgY29uc3QgXzNuMyA9IEJpZ0ludCgzKSwgXzZuID0gQmlnSW50KDYpLCBfMTFuID0gQmlnSW50KDExKSwgXzIybiA9IEJpZ0ludCgyMik7CiAgICBjb25zdCBfMjNuID0gQmlnSW50KDIzKSwgXzQ0biA9IEJpZ0ludCg0NCksIF84OG4gPSBCaWdJbnQoODgpOwogICAgY29uc3QgYjIgPSB5ICogeSAqIHkgJSBQOwogICAgY29uc3QgYjMyID0gYjIgKiBiMiAqIHkgJSBQOwogICAgY29uc3QgYjYgPSBwb3cyKGIzMiwgXzNuMywgUCkgKiBiMzIgJSBQOwogICAgY29uc3QgYjkgPSBwb3cyKGI2LCBfM24zLCBQKSAqIGIzMiAlIFA7CiAgICBjb25zdCBiMTEgPSBwb3cyKGI5LCBfMm41LCBQKSAqIGIyICUgUDsKICAgIGNvbnN0IGIyMiA9IHBvdzIoYjExLCBfMTFuLCBQKSAqIGIxMSAlIFA7CiAgICBjb25zdCBiNDQgPSBwb3cyKGIyMiwgXzIybiwgUCkgKiBiMjIgJSBQOwogICAgY29uc3QgYjg4ID0gcG93MihiNDQsIF80NG4sIFApICogYjQ0ICUgUDsKICAgIGNvbnN0IGIxNzYgPSBwb3cyKGI4OCwgXzg4biwgUCkgKiBiODggJSBQOwogICAgY29uc3QgYjIyMCA9IHBvdzIoYjE3NiwgXzQ0biwgUCkgKiBiNDQgJSBQOwogICAgY29uc3QgYjIyMyA9IHBvdzIoYjIyMCwgXzNuMywgUCkgKiBiMzIgJSBQOwogICAgY29uc3QgdDEgPSBwb3cyKGIyMjMsIF8yM24sIFApICogYjIyICUgUDsKICAgIGNvbnN0IHQyID0gcG93Mih0MSwgXzZuLCBQKSAqIGIyICUgUDsKICAgIGNvbnN0IHJvb3QyID0gcG93Mih0MiwgXzJuNSwgUCk7CiAgICBpZiAoIUZwLmVxbChGcC5zcXIocm9vdDIpLCB5KSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpOwogICAgcmV0dXJuIHJvb3QyOwogIH0KICBmdW5jdGlvbiB0YWdnZWRIYXNoKHRhZywgLi4ubWVzc2FnZXMpIHsKICAgIGxldCB0YWdQID0gVEFHR0VEX0hBU0hfUFJFRklYRVNbdGFnXTsKICAgIGlmICh0YWdQID09PSB2b2lkIDApIHsKICAgICAgY29uc3QgdGFnSCA9IHNoYTI1NihVaW50OEFycmF5LmZyb20odGFnLCAoYykgPT4gYy5jaGFyQ29kZUF0KDApKSk7CiAgICAgIHRhZ1AgPSBjb25jYXRCeXRlczModGFnSCwgdGFnSCk7CiAgICAgIFRBR0dFRF9IQVNIX1BSRUZJWEVTW3RhZ10gPSB0YWdQOwogICAgfQogICAgcmV0dXJuIHNoYTI1Nihjb25jYXRCeXRlczModGFnUCwgLi4ubWVzc2FnZXMpKTsKICB9CiAgZnVuY3Rpb24gc2Nobm9yckdldEV4dFB1YktleShwcml2KSB7CiAgICBsZXQgZF8gPSBzZWNwMjU2azEudXRpbHMubm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2KTsKICAgIGxldCBwID0gUG9pbnQuZnJvbVByaXZhdGVLZXkoZF8pOwogICAgY29uc3Qgc2NhbGFyID0gcC5oYXNFdmVuWSgpID8gZF8gOiBtb2ROKC1kXyk7CiAgICByZXR1cm4geyBzY2FsYXIsIGJ5dGVzOiBwb2ludFRvQnl0ZXMocCkgfTsKICB9CiAgZnVuY3Rpb24gbGlmdF94KHgpIHsKICAgIGlmICghZmUoeCkpCiAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHg6IG5lZWQgMCA8IHggPCBwIik7CiAgICBjb25zdCB4eCA9IG1vZFAoeCAqIHgpOwogICAgY29uc3QgYyA9IG1vZFAoeHggKiB4ICsgQmlnSW50KDcpKTsKICAgIGxldCB5ID0gc3FydE1vZChjKTsKICAgIGlmICh5ICUgXzJuNSAhPT0gXzBuNikKICAgICAgeSA9IG1vZFAoLXkpOwogICAgY29uc3QgcCA9IG5ldyBQb2ludCh4LCB5LCBfMW42KTsKICAgIHAuYXNzZXJ0VmFsaWRpdHkoKTsKICAgIHJldHVybiBwOwogIH0KICBmdW5jdGlvbiBjaGFsbGVuZ2UoLi4uYXJncykgewogICAgcmV0dXJuIG1vZE4oYnl0ZXNUb051bWJlckJFKHRhZ2dlZEhhc2goIkJJUDAzNDAvY2hhbGxlbmdlIiwgLi4uYXJncykpKTsKICB9CiAgZnVuY3Rpb24gc2Nobm9yckdldFB1YmxpY0tleShwcml2YXRlS2V5KSB7CiAgICByZXR1cm4gc2Nobm9yckdldEV4dFB1YktleShwcml2YXRlS2V5KS5ieXRlczsKICB9CiAgZnVuY3Rpb24gc2Nobm9yclNpZ24obWVzc2FnZSwgcHJpdmF0ZUtleSwgYXV4UmFuZCA9IHJhbmRvbUJ5dGVzKDMyKSkgewogICAgY29uc3QgbSA9IGVuc3VyZUJ5dGVzKCJtZXNzYWdlIiwgbWVzc2FnZSk7CiAgICBjb25zdCB7IGJ5dGVzOiBweCwgc2NhbGFyOiBkIH0gPSBzY2hub3JyR2V0RXh0UHViS2V5KHByaXZhdGVLZXkpOwogICAgY29uc3QgYSA9IGVuc3VyZUJ5dGVzKCJhdXhSYW5kIiwgYXV4UmFuZCwgMzIpOwogICAgY29uc3QgdCA9IG51bVRvMzJiKGQgXiBieXRlc1RvTnVtYmVyQkUodGFnZ2VkSGFzaCgiQklQMDM0MC9hdXgiLCBhKSkpOwogICAgY29uc3QgcmFuZCA9IHRhZ2dlZEhhc2goIkJJUDAzNDAvbm9uY2UiLCB0LCBweCwgbSk7CiAgICBjb25zdCBrXyA9IG1vZE4oYnl0ZXNUb051bWJlckJFKHJhbmQpKTsKICAgIGlmIChrXyA9PT0gXzBuNikKICAgICAgdGhyb3cgbmV3IEVycm9yKCJzaWduIGZhaWxlZDogayBpcyB6ZXJvIik7CiAgICBjb25zdCB7IGJ5dGVzOiByeCwgc2NhbGFyOiBrIH0gPSBzY2hub3JyR2V0RXh0UHViS2V5KGtfKTsKICAgIGNvbnN0IGUgPSBjaGFsbGVuZ2UocngsIHB4LCBtKTsKICAgIGNvbnN0IHNpZyA9IG5ldyBVaW50OEFycmF5KDY0KTsKICAgIHNpZy5zZXQocngsIDApOwogICAgc2lnLnNldChudW1UbzMyYihtb2ROKGsgKyBlICogZCkpLCAzMik7CiAgICBpZiAoIXNjaG5vcnJWZXJpZnkoc2lnLCBtLCBweCkpCiAgICAgIHRocm93IG5ldyBFcnJvcigic2lnbjogSW52YWxpZCBzaWduYXR1cmUgcHJvZHVjZWQiKTsKICAgIHJldHVybiBzaWc7CiAgfQogIGZ1bmN0aW9uIHNjaG5vcnJWZXJpZnkoc2lnbmF0dXJlLCBtZXNzYWdlLCBwdWJsaWNLZXkpIHsKICAgIGNvbnN0IHNpZyA9IGVuc3VyZUJ5dGVzKCJzaWduYXR1cmUiLCBzaWduYXR1cmUsIDY0KTsKICAgIGNvbnN0IG0gPSBlbnN1cmVCeXRlcygibWVzc2FnZSIsIG1lc3NhZ2UpOwogICAgY29uc3QgcHViID0gZW5zdXJlQnl0ZXMoInB1YmxpY0tleSIsIHB1YmxpY0tleSwgMzIpOwogICAgdHJ5IHsKICAgICAgY29uc3QgUCA9IGxpZnRfeChieXRlc1RvTnVtYmVyQkUocHViKSk7CiAgICAgIGNvbnN0IHIgPSBieXRlc1RvTnVtYmVyQkUoc2lnLnN1YmFycmF5KDAsIDMyKSk7CiAgICAgIGlmICghZmUocikpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBjb25zdCBzID0gYnl0ZXNUb051bWJlckJFKHNpZy5zdWJhcnJheSgzMiwgNjQpKTsKICAgICAgaWYgKCFnZShzKSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGNvbnN0IGUgPSBjaGFsbGVuZ2UobnVtVG8zMmIociksIHBvaW50VG9CeXRlcyhQKSwgbSk7CiAgICAgIGNvbnN0IFIgPSBHbXVsQWRkKFAsIHMsIG1vZE4oLWUpKTsKICAgICAgaWYgKCFSIHx8ICFSLmhhc0V2ZW5ZKCkgfHwgUi50b0FmZmluZSgpLnggIT09IHIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgdmFyIHNlY3AyNTZrMVAsIHNlY3AyNTZrMU4sIF8xbjYsIF8ybjUsIGRpdk5lYXJlc3QsIEZwLCBzZWNwMjU2azEsIF8wbjYsIGZlLCBnZSwgVEFHR0VEX0hBU0hfUFJFRklYRVMsIHBvaW50VG9CeXRlcywgbnVtVG8zMmIsIG1vZFAsIG1vZE4sIFBvaW50LCBHbXVsQWRkLCBzY2hub3JyLCBpc29NYXAsIG1hcFNXVSwgaHRmLCBoYXNoVG9DdXJ2ZSwgZW5jb2RlVG9DdXJ2ZTsKICB2YXIgaW5pdF9zZWNwMjU2azEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL3NlY3AyNTZrMS5qcyIoKSB7CiAgICAgIGluaXRfc2hhMjU2KCk7CiAgICAgIGluaXRfdXRpbHMyKCk7CiAgICAgIGluaXRfbW9kdWxhcigpOwogICAgICBpbml0X3dlaWVyc3RyYXNzKCk7CiAgICAgIGluaXRfdXRpbHM0KCk7CiAgICAgIGluaXRfaGFzaF90b19jdXJ2ZSgpOwogICAgICBpbml0X3Nob3J0d191dGlscygpOwogICAgICBzZWNwMjU2azFQID0gQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlZmZmZmZjMmYiKTsKICAgICAgc2VjcDI1NmsxTiA9IEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWJhYWVkY2U2YWY0OGEwM2JiZmQyNWU4Y2QwMzY0MTQxIik7CiAgICAgIF8xbjYgPSBCaWdJbnQoMSk7CiAgICAgIF8ybjUgPSBCaWdJbnQoMik7CiAgICAgIGRpdk5lYXJlc3QgPSAoYSwgYikgPT4gKGEgKyBiIC8gXzJuNSkgLyBiOwogICAgICBGcCA9IEZpZWxkKHNlY3AyNTZrMVAsIHZvaWQgMCwgdm9pZCAwLCB7IHNxcnQ6IHNxcnRNb2QgfSk7CiAgICAgIHNlY3AyNTZrMSA9IGNyZWF0ZUN1cnZlKHsKICAgICAgICBhOiBCaWdJbnQoMCksCiAgICAgICAgLy8gZXF1YXRpb24gcGFyYW1zOiBhLCBiCiAgICAgICAgYjogQmlnSW50KDcpLAogICAgICAgIC8vIFNlZW0gdG8gYmUgcmlnaWQ6IGJpdGNvaW50YWxrLm9yZy9pbmRleC5waHA/dG9waWM9Mjg5Nzk1Lm1zZzMxODM5NzUjbXNnMzE4Mzk3NQogICAgICAgIEZwLAogICAgICAgIC8vIEZpZWxkJ3MgcHJpbWU6IDJuKioyNTZuIC0gMm4qKjMybiAtIDJuKio5biAtIDJuKio4biAtIDJuKio3biAtIDJuKio2biAtIDJuKio0biAtIDFuCiAgICAgICAgbjogc2VjcDI1NmsxTiwKICAgICAgICAvLyBDdXJ2ZSBvcmRlciwgdG90YWwgY291bnQgb2YgdmFsaWQgcG9pbnRzIGluIHRoZSBmaWVsZAogICAgICAgIC8vIEJhc2UgcG9pbnQgKHgsIHkpIGFrYSBnZW5lcmF0b3IgcG9pbnQKICAgICAgICBHeDogQmlnSW50KCI1NTA2NjI2MzAyMjI3NzM0MzY2OTU3ODcxODg5NTE2ODUzNDMyNjI1MDYwMzQ1Mzc3NzU5NDE3NTUwMDE4NzM2MDM4OTExNjcyOTI0MCIpLAogICAgICAgIEd5OiBCaWdJbnQoIjMyNjcwNTEwMDIwNzU4ODE2OTc4MDgzMDg1MTMwNTA3MDQzMTg0NDcxMjczMzgwNjU5MjQzMjc1OTM4OTA0MzM1NzU3MzM3NDgyNDI0IiksCiAgICAgICAgaDogQmlnSW50KDEpLAogICAgICAgIC8vIENvZmFjdG9yCiAgICAgICAgbG93UzogdHJ1ZSwKICAgICAgICAvLyBBbGxvdyBvbmx5IGxvdy1TIHNpZ25hdHVyZXMgYnkgZGVmYXVsdCBpbiBzaWduKCkgYW5kIHZlcmlmeSgpCiAgICAgICAgLyoqCiAgICAgICAgICogc2VjcDI1NmsxIGJlbG9uZ3MgdG8gS29ibGl0eiBjdXJ2ZXM6IGl0IGhhcyBlZmZpY2llbnRseSBjb21wdXRhYmxlIGVuZG9tb3JwaGlzbS4KICAgICAgICAgKiBFbmRvbW9ycGhpc20gdXNlcyAyeCBsZXNzIFJBTSwgc3BlZWRzIHVwIHByZWNvbXB1dGF0aW9uIGJ5IDJ4IGFuZCBFQ0RIIC8ga2V5IHJlY292ZXJ5IGJ5IDIwJS4KICAgICAgICAgKiBGb3IgcHJlY29tcHV0ZWQgd05BRiBpdCB0cmFkZXMgb2ZmIDEvMiBpbml0IHRpbWUgJiAxLzMgcmFtIGZvciAyMCUgcGVyZiBoaXQuCiAgICAgICAgICogRXhwbGFuYXRpb246IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3BhdWxtaWxsci9lYjY3MDgwNjc5M2U4NGRmNjI4YTdjNDM0YTg3MzA2NgogICAgICAgICAqLwogICAgICAgIGVuZG86IHsKICAgICAgICAgIGJldGE6IEJpZ0ludCgiMHg3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIiksCiAgICAgICAgICBzcGxpdFNjYWxhcjogKGspID0+IHsKICAgICAgICAgICAgY29uc3QgbiA9IHNlY3AyNTZrMU47CiAgICAgICAgICAgIGNvbnN0IGExID0gQmlnSW50KCIweDMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1Iik7CiAgICAgICAgICAgIGNvbnN0IGIxID0gLV8xbjYgKiBCaWdJbnQoIjB4ZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMiKTsKICAgICAgICAgICAgY29uc3QgYTIgPSBCaWdJbnQoIjB4MTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4Iik7CiAgICAgICAgICAgIGNvbnN0IGIyID0gYTE7CiAgICAgICAgICAgIGNvbnN0IFBPV18yXzEyOCA9IEJpZ0ludCgiMHgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKTsKICAgICAgICAgICAgY29uc3QgYzEgPSBkaXZOZWFyZXN0KGIyICogaywgbik7CiAgICAgICAgICAgIGNvbnN0IGMyID0gZGl2TmVhcmVzdCgtYjEgKiBrLCBuKTsKICAgICAgICAgICAgbGV0IGsxID0gbW9kKGsgLSBjMSAqIGExIC0gYzIgKiBhMiwgbik7CiAgICAgICAgICAgIGxldCBrMiA9IG1vZCgtYzEgKiBiMSAtIGMyICogYjIsIG4pOwogICAgICAgICAgICBjb25zdCBrMW5lZyA9IGsxID4gUE9XXzJfMTI4OwogICAgICAgICAgICBjb25zdCBrMm5lZyA9IGsyID4gUE9XXzJfMTI4OwogICAgICAgICAgICBpZiAoazFuZWcpCiAgICAgICAgICAgICAgazEgPSBuIC0gazE7CiAgICAgICAgICAgIGlmIChrMm5lZykKICAgICAgICAgICAgICBrMiA9IG4gLSBrMjsKICAgICAgICAgICAgaWYgKGsxID4gUE9XXzJfMTI4IHx8IGsyID4gUE9XXzJfMTI4KSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJzcGxpdFNjYWxhcjogRW5kb21vcnBoaXNtIGZhaWxlZCwgaz0iICsgayk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHsgazFuZWcsIGsxLCBrMm5lZywgazIgfTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sIHNoYTI1Nik7CiAgICAgIF8wbjYgPSBCaWdJbnQoMCk7CiAgICAgIGZlID0gKHgpID0+IHR5cGVvZiB4ID09PSAiYmlnaW50IiAmJiBfMG42IDwgeCAmJiB4IDwgc2VjcDI1NmsxUDsKICAgICAgZ2UgPSAoeCkgPT4gdHlwZW9mIHggPT09ICJiaWdpbnQiICYmIF8wbjYgPCB4ICYmIHggPCBzZWNwMjU2azFOOwogICAgICBUQUdHRURfSEFTSF9QUkVGSVhFUyA9IHt9OwogICAgICBwb2ludFRvQnl0ZXMgPSAocG9pbnQpID0+IHBvaW50LnRvUmF3Qnl0ZXModHJ1ZSkuc2xpY2UoMSk7CiAgICAgIG51bVRvMzJiID0gKG4pID0+IG51bWJlclRvQnl0ZXNCRShuLCAzMik7CiAgICAgIG1vZFAgPSAoeCkgPT4gbW9kKHgsIHNlY3AyNTZrMVApOwogICAgICBtb2ROID0gKHgpID0+IG1vZCh4LCBzZWNwMjU2azFOKTsKICAgICAgUG9pbnQgPSBzZWNwMjU2azEuUHJvamVjdGl2ZVBvaW50OwogICAgICBHbXVsQWRkID0gKFEsIGEsIGIpID0+IFBvaW50LkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoUSwgYSwgYik7CiAgICAgIHNjaG5vcnIgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+ICh7CiAgICAgICAgZ2V0UHVibGljS2V5OiBzY2hub3JyR2V0UHVibGljS2V5LAogICAgICAgIHNpZ246IHNjaG5vcnJTaWduLAogICAgICAgIHZlcmlmeTogc2Nobm9yclZlcmlmeSwKICAgICAgICB1dGlsczogewogICAgICAgICAgcmFuZG9tUHJpdmF0ZUtleTogc2VjcDI1NmsxLnV0aWxzLnJhbmRvbVByaXZhdGVLZXksCiAgICAgICAgICBsaWZ0X3gsCiAgICAgICAgICBwb2ludFRvQnl0ZXMsCiAgICAgICAgICBudW1iZXJUb0J5dGVzQkUsCiAgICAgICAgICBieXRlc1RvTnVtYmVyQkUsCiAgICAgICAgICB0YWdnZWRIYXNoLAogICAgICAgICAgbW9kCiAgICAgICAgfQogICAgICB9KSkoKTsKICAgICAgaXNvTWFwID0gLyogQF9fUFVSRV9fICovICgoKSA9PiBpc29nZW55TWFwKEZwLCBbCiAgICAgICAgLy8geE51bQogICAgICAgIFsKICAgICAgICAgICIweDhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhkYWFhYWE4YzciLAogICAgICAgICAgIjB4N2QzZDRjODBiYzMyMWQ1YjlmMzE1Y2VhN2ZkNDRjNWQ1OTVkMmZjMGJmNjNiOTJkZmZmMTA0NGYxN2M2NTgxIiwKICAgICAgICAgICIweDUzNGMzMjhkMjNmMjM0ZTZlMmE0MTNkZWNhMjVjYWVjZTQ1MDYxNDQwMzdjNDAzMTRlY2JkMGI1M2Q5ZGQyNjIiLAogICAgICAgICAgIjB4OGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGRhYWFhYTg4YyIKICAgICAgICBdLAogICAgICAgIC8vIHhEZW4KICAgICAgICBbCiAgICAgICAgICAiMHhkMzU3NzExOTNkOTQ5MThhOWNhMzRjY2JiN2I2NDBkZDg2Y2Q0MDk1NDJmODQ4N2Q5ZmU2Yjc0NTc4MWViNDliIiwKICAgICAgICAgICIweGVkYWRjNmY2NDM4M2RjMWRmN2M0YjJkNTFiNTQyMjU0MDZkMzZiNjQxZjVlNDFiYmM1MmE1NjYxMmE4YzZkMTQiLAogICAgICAgICAgIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIKICAgICAgICAgIC8vIExBU1QgMQogICAgICAgIF0sCiAgICAgICAgLy8geU51bQogICAgICAgIFsKICAgICAgICAgICIweDRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiOGUzOGUyM2MiLAogICAgICAgICAgIjB4Yzc1ZTBjMzJkNWNiN2MwZmE5ZDBhNTRiMTJhMGE2ZDU2NDdhYjA0NmQ2ODZkYTZmZGZmYzkwZmMyMDFkNzFhMyIsCiAgICAgICAgICAiMHgyOWE2MTk0NjkxZjkxYTczNzE1MjA5ZWY2NTEyZTU3NjcyMjgzMGEyMDFiZTIwMThhNzY1ZTg1YTllY2VlOTMxIiwKICAgICAgICAgICIweDJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmMzhlMzhkODQiCiAgICAgICAgXSwKICAgICAgICAvLyB5RGVuCiAgICAgICAgWwogICAgICAgICAgIjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZjkzYiIsCiAgICAgICAgICAiMHg3YTA2NTM0YmI4YmRiNDlmZDVlOWU2NjMyNzIyYzI5ODk0NjdjMWJmYzhlOGQ5NzhkZmI0MjVkMjY4NWMyNTczIiwKICAgICAgICAgICIweDY0ODRhYTcxNjU0NWNhMmNmM2E3MGMzZmE4ZmUzMzdlMGEzZDIxMTYyZjBkNjI5OWE3YmY4MTkyYmZkMmE3NmYiLAogICAgICAgICAgIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIKICAgICAgICAgIC8vIExBU1QgMQogICAgICAgIF0KICAgICAgXS5tYXAoKGkpID0+IGkubWFwKChqKSA9PiBCaWdJbnQoaikpKSkpKCk7CiAgICAgIG1hcFNXVSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gbWFwVG9DdXJ2ZVNpbXBsZVNXVShGcCwgewogICAgICAgIEE6IEJpZ0ludCgiMHgzZjg3MzFhYmRkNjYxYWRjYTA4YTU1NThmMGY1ZDI3MmU5NTNkMzYzY2I2ZjBlNWQ0MDU0NDdjMDFhNDQ0NTMzIiksCiAgICAgICAgQjogQmlnSW50KCIxNzcxIiksCiAgICAgICAgWjogRnAuY3JlYXRlKEJpZ0ludCgiLTExIikpCiAgICAgIH0pKSgpOwogICAgICBodGYgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IGNyZWF0ZUhhc2hlcihzZWNwMjU2azEuUHJvamVjdGl2ZVBvaW50LCAoc2NhbGFycykgPT4gewogICAgICAgIGNvbnN0IHsgeCwgeSB9ID0gbWFwU1dVKEZwLmNyZWF0ZShzY2FsYXJzWzBdKSk7CiAgICAgICAgcmV0dXJuIGlzb01hcCh4LCB5KTsKICAgICAgfSwgewogICAgICAgIERTVDogInNlY3AyNTZrMV9YTUQ6U0hBLTI1Nl9TU1dVX1JPXyIsCiAgICAgICAgZW5jb2RlRFNUOiAic2VjcDI1NmsxX1hNRDpTSEEtMjU2X1NTV1VfTlVfIiwKICAgICAgICBwOiBGcC5PUkRFUiwKICAgICAgICBtOiAxLAogICAgICAgIGs6IDEyOCwKICAgICAgICBleHBhbmQ6ICJ4bWQiLAogICAgICAgIGhhc2g6IHNoYTI1NgogICAgICB9KSkoKTsKICAgICAgaGFzaFRvQ3VydmUgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IGh0Zi5oYXNoVG9DdXJ2ZSkoKTsKICAgICAgZW5jb2RlVG9DdXJ2ZSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gaHRmLmVuY29kZVRvQ3VydmUpKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL25vZGUuanMKICB2YXIgRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvciwgRmVlQ2FwVG9vSGlnaEVycm9yLCBGZWVDYXBUb29Mb3dFcnJvciwgTm9uY2VUb29IaWdoRXJyb3IsIE5vbmNlVG9vTG93RXJyb3IsIE5vbmNlTWF4VmFsdWVFcnJvciwgSW5zdWZmaWNpZW50RnVuZHNFcnJvciwgSW50cmluc2ljR2FzVG9vSGlnaEVycm9yLCBJbnRyaW5zaWNHYXNUb29Mb3dFcnJvciwgVHJhbnNhY3Rpb25UeXBlTm90U3VwcG9ydGVkRXJyb3IsIFRpcEFib3ZlRmVlQ2FwRXJyb3IsIFVua25vd25Ob2RlRXJyb3I7CiAgdmFyIGluaXRfbm9kZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9ub2RlLmpzIigpIHsKICAgICAgaW5pdF9mb3JtYXRHd2VpKCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBFeGVjdXRpb25SZXZlcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhdXNlLCBtZXNzYWdlIH0gPSB7fSkgewogICAgICAgICAgY29uc3QgcmVhc29uID0gbWVzc2FnZT8ucmVwbGFjZSgiZXhlY3V0aW9uIHJldmVydGVkOiAiLCAiIik/LnJlcGxhY2UoImV4ZWN1dGlvbiByZXZlcnRlZCIsICIiKTsKICAgICAgICAgIHN1cGVyKGBFeGVjdXRpb24gcmV2ZXJ0ZWQgJHtyZWFzb24gPyBgd2l0aCByZWFzb246ICR7cmVhc29ufWAgOiAiZm9yIGFuIHVua25vd24gcmVhc29uIn0uYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkV4ZWN1dGlvblJldmVydGVkRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeGVjdXRpb25SZXZlcnRlZEVycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogMwogICAgICB9KTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4ZWN1dGlvblJldmVydGVkRXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL2V4ZWN1dGlvbiByZXZlcnRlZC8KICAgICAgfSk7CiAgICAgIEZlZUNhcFRvb0hpZ2hFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgbWF4RmVlUGVyR2FzIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYFRoZSBmZWUgY2FwIChcYG1heEZlZVBlckdhc1xgJHttYXhGZWVQZXJHYXMgPyBgID0gJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9IGd3ZWlgIDogIiJ9KSBjYW5ub3QgYmUgaGlnaGVyIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZSAoMl4yNTYtMSkuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkZlZUNhcFRvb0hpZ2hFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZlZUNhcFRvb0hpZ2hFcnJvciwgIm5vZGVNZXNzYWdlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAvbWF4IGZlZSBwZXIgZ2FzIGhpZ2hlciB0aGFuIDJcXjI1Ni0xfGZlZSBjYXAgaGlnaGVyIHRoYW4gMlxeMjU2LTEvCiAgICAgIH0pOwogICAgICBGZWVDYXBUb29Mb3dFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgbWF4RmVlUGVyR2FzIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYFRoZSBmZWUgY2FwIChcYG1heEZlZVBlckdhc1xgJHttYXhGZWVQZXJHYXMgPyBgID0gJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9YCA6ICIifSBnd2VpKSBjYW5ub3QgYmUgbG93ZXIgdGhhbiB0aGUgYmxvY2sgYmFzZSBmZWUuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkZlZUNhcFRvb0xvd0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmVlQ2FwVG9vTG93RXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL21heCBmZWUgcGVyIGdhcyBsZXNzIHRoYW4gYmxvY2sgYmFzZSBmZWV8ZmVlIGNhcCBsZXNzIHRoYW4gYmxvY2sgYmFzZSBmZWV8dHJhbnNhY3Rpb24gaXMgb3V0ZGF0ZWQvCiAgICAgIH0pOwogICAgICBOb25jZVRvb0hpZ2hFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgbm9uY2UgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihgTm9uY2UgcHJvdmlkZWQgZm9yIHRoZSB0cmFuc2FjdGlvbiAke25vbmNlID8gYCgke25vbmNlfSkgYCA6ICIifWlzIGhpZ2hlciB0aGFuIHRoZSBuZXh0IG9uZSBleHBlY3RlZC5gLCB7IGNhdXNlLCBuYW1lOiAiTm9uY2VUb29IaWdoRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vbmNlVG9vSGlnaEVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC9ub25jZSB0b28gaGlnaC8KICAgICAgfSk7CiAgICAgIE5vbmNlVG9vTG93RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2F1c2UsIG5vbmNlIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgTm9uY2UgcHJvdmlkZWQgZm9yIHRoZSB0cmFuc2FjdGlvbiAke25vbmNlID8gYCgke25vbmNlfSkgYCA6ICIifWlzIGxvd2VyIHRoYW4gdGhlIGN1cnJlbnQgbm9uY2Ugb2YgdGhlIGFjY291bnQuYCwKICAgICAgICAgICAgIlRyeSBpbmNyZWFzaW5nIHRoZSBub25jZSBvciBmaW5kIHRoZSBsYXRlc3Qgbm9uY2Ugd2l0aCBgZ2V0VHJhbnNhY3Rpb25Db3VudGAuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IGNhdXNlLCBuYW1lOiAiTm9uY2VUb29Mb3dFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9uY2VUb29Mb3dFcnJvciwgIm5vZGVNZXNzYWdlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAvbm9uY2UgdG9vIGxvd3x0cmFuc2FjdGlvbiBhbHJlYWR5IGltcG9ydGVkfGFscmVhZHkga25vd24vCiAgICAgIH0pOwogICAgICBOb25jZU1heFZhbHVlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2F1c2UsIG5vbmNlIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYE5vbmNlIHByb3ZpZGVkIGZvciB0aGUgdHJhbnNhY3Rpb24gJHtub25jZSA/IGAoJHtub25jZX0pIGAgOiAiIn1leGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbm9uY2UuYCwgeyBjYXVzZSwgbmFtZTogIk5vbmNlTWF4VmFsdWVFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9uY2VNYXhWYWx1ZUVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC9ub25jZSBoYXMgbWF4IHZhbHVlLwogICAgICB9KTsKICAgICAgSW5zdWZmaWNpZW50RnVuZHNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSB9ID0ge30pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgIlRoZSB0b3RhbCBjb3N0IChnYXMgKiBnYXMgZmVlICsgdmFsdWUpIG9mIGV4ZWN1dGluZyB0aGlzIHRyYW5zYWN0aW9uIGV4Y2VlZHMgdGhlIGJhbGFuY2Ugb2YgdGhlIGFjY291bnQuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAiVGhpcyBlcnJvciBjb3VsZCBhcmlzZSB3aGVuIHRoZSBhY2NvdW50IGRvZXMgbm90IGhhdmUgZW5vdWdoIGZ1bmRzIHRvOiIsCiAgICAgICAgICAgICAgIiAtIHBheSBmb3IgdGhlIHRvdGFsIGdhcyBmZWUsIiwKICAgICAgICAgICAgICAiIC0gcGF5IGZvciB0aGUgdmFsdWUgdG8gc2VuZC4iLAogICAgICAgICAgICAgICIgIiwKICAgICAgICAgICAgICAiVGhlIGNvc3Qgb2YgdGhlIHRyYW5zYWN0aW9uIGlzIGNhbGN1bGF0ZWQgYXMgYGdhcyAqIGdhcyBmZWUgKyB2YWx1ZWAsIHdoZXJlOiIsCiAgICAgICAgICAgICAgIiAtIGBnYXNgIGlzIHRoZSBhbW91bnQgb2YgZ2FzIG5lZWRlZCBmb3IgdHJhbnNhY3Rpb24gdG8gZXhlY3V0ZSwiLAogICAgICAgICAgICAgICIgLSBgZ2FzIGZlZWAgaXMgdGhlIGdhcyBmZWUsIiwKICAgICAgICAgICAgICAiIC0gYHZhbHVlYCBpcyB0aGUgYW1vdW50IG9mIGV0aGVyIHRvIHNlbmQgdG8gdGhlIHJlY2lwaWVudC4iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG5hbWU6ICJJbnN1ZmZpY2llbnRGdW5kc0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5zdWZmaWNpZW50RnVuZHNFcnJvciwgIm5vZGVNZXNzYWdlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAvaW5zdWZmaWNpZW50IGZ1bmRzLwogICAgICB9KTsKICAgICAgSW50cmluc2ljR2FzVG9vSGlnaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhdXNlLCBnYXMgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihgVGhlIGFtb3VudCBvZiBnYXMgJHtnYXMgPyBgKCR7Z2FzfSkgYCA6ICIifXByb3ZpZGVkIGZvciB0aGUgdHJhbnNhY3Rpb24gZXhjZWVkcyB0aGUgbGltaXQgYWxsb3dlZCBmb3IgdGhlIGJsb2NrLmAsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIG5hbWU6ICJJbnRyaW5zaWNHYXNUb29IaWdoRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRyaW5zaWNHYXNUb29IaWdoRXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL2ludHJpbnNpYyBnYXMgdG9vIGhpZ2h8Z2FzIGxpbWl0IHJlYWNoZWQvCiAgICAgIH0pOwogICAgICBJbnRyaW5zaWNHYXNUb29Mb3dFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgZ2FzIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYFRoZSBhbW91bnQgb2YgZ2FzICR7Z2FzID8gYCgke2dhc30pIGAgOiAiIn1wcm92aWRlZCBmb3IgdGhlIHRyYW5zYWN0aW9uIGlzIHRvbyBsb3cuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkludHJpbnNpY0dhc1Rvb0xvd0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW50cmluc2ljR2FzVG9vTG93RXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL2ludHJpbnNpYyBnYXMgdG9vIGxvdy8KICAgICAgfSk7CiAgICAgIFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhdXNlIH0pIHsKICAgICAgICAgIHN1cGVyKCJUaGUgdHJhbnNhY3Rpb24gdHlwZSBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGNoYWluLiIsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIG5hbWU6ICJUcmFuc2FjdGlvblR5cGVOb3RTdXBwb3J0ZWRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC90cmFuc2FjdGlvbiB0eXBlIG5vdCB2YWxpZC8KICAgICAgfSk7CiAgICAgIFRpcEFib3ZlRmVlQ2FwRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2F1c2UsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBtYXhGZWVQZXJHYXMgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBUaGUgcHJvdmlkZWQgdGlwIChcYG1heFByaW9yaXR5RmVlUGVyR2FzXGAke21heFByaW9yaXR5RmVlUGVyR2FzID8gYCA9ICR7Zm9ybWF0R3dlaShtYXhQcmlvcml0eUZlZVBlckdhcyl9IGd3ZWlgIDogIiJ9KSBjYW5ub3QgYmUgaGlnaGVyIHRoYW4gdGhlIGZlZSBjYXAgKFxgbWF4RmVlUGVyR2FzXGAke21heEZlZVBlckdhcyA/IGAgPSAke2Zvcm1hdEd3ZWkobWF4RmVlUGVyR2FzKX0gZ3dlaWAgOiAiIn0pLmAKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIlRpcEFib3ZlRmVlQ2FwRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUaXBBYm92ZUZlZUNhcEVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC9tYXggcHJpb3JpdHkgZmVlIHBlciBnYXMgaGlnaGVyIHRoYW4gbWF4IGZlZSBwZXIgZ2FzfHRpcCBoaWdoZXIgdGhhbiBmZWUgY2FwLwogICAgICB9KTsKICAgICAgVW5rbm93bk5vZGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSB9KSB7CiAgICAgICAgICBzdXBlcihgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZXhlY3V0aW5nOiAke2NhdXNlPy5zaG9ydE1lc3NhZ2V9YCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIlVua25vd25Ob2RlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZXJyb3JzL2dldE5vZGVFcnJvci5qcwogIGZ1bmN0aW9uIGdldE5vZGVFcnJvcihlcnIsIGFyZ3MpIHsKICAgIGNvbnN0IG1lc3NhZ2UgPSAoZXJyLmRldGFpbHMgfHwgIiIpLnRvTG93ZXJDYXNlKCk7CiAgICBjb25zdCBleGVjdXRpb25SZXZlcnRlZEVycm9yID0gZXJyIGluc3RhbmNlb2YgQmFzZUVycm9yMiA/IGVyci53YWxrKChlKSA9PiBlLmNvZGUgPT09IEV4ZWN1dGlvblJldmVydGVkRXJyb3IuY29kZSkgOiBlcnI7CiAgICBpZiAoZXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvciBpbnN0YW5jZW9mIEJhc2VFcnJvcjIpCiAgICAgIHJldHVybiBuZXcgRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvcih7CiAgICAgICAgY2F1c2U6IGVyciwKICAgICAgICBtZXNzYWdlOiBleGVjdXRpb25SZXZlcnRlZEVycm9yLmRldGFpbHMKICAgICAgfSk7CiAgICBpZiAoRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IEV4ZWN1dGlvblJldmVydGVkRXJyb3IoewogICAgICAgIGNhdXNlOiBlcnIsCiAgICAgICAgbWVzc2FnZTogZXJyLmRldGFpbHMKICAgICAgfSk7CiAgICBpZiAoRmVlQ2FwVG9vSGlnaEVycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgRmVlQ2FwVG9vSGlnaEVycm9yKHsKICAgICAgICBjYXVzZTogZXJyLAogICAgICAgIG1heEZlZVBlckdhczogYXJncz8ubWF4RmVlUGVyR2FzCiAgICAgIH0pOwogICAgaWYgKEZlZUNhcFRvb0xvd0Vycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgRmVlQ2FwVG9vTG93RXJyb3IoewogICAgICAgIGNhdXNlOiBlcnIsCiAgICAgICAgbWF4RmVlUGVyR2FzOiBhcmdzPy5tYXhGZWVQZXJHYXMKICAgICAgfSk7CiAgICBpZiAoTm9uY2VUb29IaWdoRXJyb3Iubm9kZU1lc3NhZ2UudGVzdChtZXNzYWdlKSkKICAgICAgcmV0dXJuIG5ldyBOb25jZVRvb0hpZ2hFcnJvcih7IGNhdXNlOiBlcnIsIG5vbmNlOiBhcmdzPy5ub25jZSB9KTsKICAgIGlmIChOb25jZVRvb0xvd0Vycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgTm9uY2VUb29Mb3dFcnJvcih7IGNhdXNlOiBlcnIsIG5vbmNlOiBhcmdzPy5ub25jZSB9KTsKICAgIGlmIChOb25jZU1heFZhbHVlRXJyb3Iubm9kZU1lc3NhZ2UudGVzdChtZXNzYWdlKSkKICAgICAgcmV0dXJuIG5ldyBOb25jZU1heFZhbHVlRXJyb3IoeyBjYXVzZTogZXJyLCBub25jZTogYXJncz8ubm9uY2UgfSk7CiAgICBpZiAoSW5zdWZmaWNpZW50RnVuZHNFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IEluc3VmZmljaWVudEZ1bmRzRXJyb3IoeyBjYXVzZTogZXJyIH0pOwogICAgaWYgKEludHJpbnNpY0dhc1Rvb0hpZ2hFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IEludHJpbnNpY0dhc1Rvb0hpZ2hFcnJvcih7IGNhdXNlOiBlcnIsIGdhczogYXJncz8uZ2FzIH0pOwogICAgaWYgKEludHJpbnNpY0dhc1Rvb0xvd0Vycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgSW50cmluc2ljR2FzVG9vTG93RXJyb3IoeyBjYXVzZTogZXJyLCBnYXM6IGFyZ3M/LmdhcyB9KTsKICAgIGlmIChUcmFuc2FjdGlvblR5cGVOb3RTdXBwb3J0ZWRFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yKHsgY2F1c2U6IGVyciB9KTsKICAgIGlmIChUaXBBYm92ZUZlZUNhcEVycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgVGlwQWJvdmVGZWVDYXBFcnJvcih7CiAgICAgICAgY2F1c2U6IGVyciwKICAgICAgICBtYXhGZWVQZXJHYXM6IGFyZ3M/Lm1heEZlZVBlckdhcywKICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogYXJncz8ubWF4UHJpb3JpdHlGZWVQZXJHYXMKICAgICAgfSk7CiAgICByZXR1cm4gbmV3IFVua25vd25Ob2RlRXJyb3IoewogICAgICBjYXVzZTogZXJyCiAgICB9KTsKICB9CiAgdmFyIGluaXRfZ2V0Tm9kZUVycm9yID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZXJyb3JzL2dldE5vZGVFcnJvci5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X25vZGUoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2V4dHJhY3QuanMKICBmdW5jdGlvbiBleHRyYWN0KHZhbHVlXywgeyBmb3JtYXQgfSkgewogICAgaWYgKCFmb3JtYXQpCiAgICAgIHJldHVybiB7fTsKICAgIGNvbnN0IHZhbHVlID0ge307CiAgICBmdW5jdGlvbiBleHRyYWN0Xyhmb3JtYXR0ZWQyKSB7CiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmb3JtYXR0ZWQyKTsKICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykgewogICAgICAgIGlmIChrZXkgaW4gdmFsdWVfKQogICAgICAgICAgdmFsdWVba2V5XSA9IHZhbHVlX1trZXldOwogICAgICAgIGlmIChmb3JtYXR0ZWQyW2tleV0gJiYgdHlwZW9mIGZvcm1hdHRlZDJba2V5XSA9PT0gIm9iamVjdCIgJiYgIUFycmF5LmlzQXJyYXkoZm9ybWF0dGVkMltrZXldKSkKICAgICAgICAgIGV4dHJhY3RfKGZvcm1hdHRlZDJba2V5XSk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdCh2YWx1ZV8gfHwge30pOwogICAgZXh0cmFjdF8oZm9ybWF0dGVkKTsKICAgIHJldHVybiB2YWx1ZTsKICB9CiAgdmFyIGluaXRfZXh0cmFjdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Zvcm1hdHRlcnMvZXh0cmFjdC5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZm9ybWF0dGVycy9mb3JtYXR0ZXIuanMKICBmdW5jdGlvbiBkZWZpbmVGb3JtYXR0ZXIodHlwZSwgZm9ybWF0KSB7CiAgICByZXR1cm4gKHsgZXhjbHVkZSwgZm9ybWF0OiBvdmVycmlkZXMgfSkgPT4gewogICAgICByZXR1cm4gewogICAgICAgIGV4Y2x1ZGUsCiAgICAgICAgZm9ybWF0OiAoYXJncykgPT4gewogICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0KGFyZ3MpOwogICAgICAgICAgaWYgKGV4Y2x1ZGUpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZXhjbHVkZSkgewogICAgICAgICAgICAgIGRlbGV0ZSBmb3JtYXR0ZWRba2V5XTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgLi4uZm9ybWF0dGVkLAogICAgICAgICAgICAuLi5vdmVycmlkZXMoYXJncykKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICB0eXBlCiAgICAgIH07CiAgICB9OwogIH0KICB2YXIgaW5pdF9mb3JtYXR0ZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2Zvcm1hdHRlci5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZm9ybWF0dGVycy90cmFuc2FjdGlvblJlcXVlc3QuanMKICBmdW5jdGlvbiBmb3JtYXRUcmFuc2FjdGlvblJlcXVlc3QocmVxdWVzdCkgewogICAgY29uc3QgcnBjUmVxdWVzdCA9IHt9OwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LmF1dGhvcml6YXRpb25MaXN0ICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5hdXRob3JpemF0aW9uTGlzdCA9IGZvcm1hdEF1dGhvcml6YXRpb25MaXN0KHJlcXVlc3QuYXV0aG9yaXphdGlvbkxpc3QpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LmFjY2Vzc0xpc3QgIT09ICJ1bmRlZmluZWQiKQogICAgICBycGNSZXF1ZXN0LmFjY2Vzc0xpc3QgPSByZXF1ZXN0LmFjY2Vzc0xpc3Q7CiAgICBpZiAodHlwZW9mIHJlcXVlc3QuYmxvYlZlcnNpb25lZEhhc2hlcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QuYmxvYlZlcnNpb25lZEhhc2hlcyA9IHJlcXVlc3QuYmxvYlZlcnNpb25lZEhhc2hlczsKICAgIGlmICh0eXBlb2YgcmVxdWVzdC5ibG9icyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0LmJsb2JzWzBdICE9PSAic3RyaW5nIikKICAgICAgICBycGNSZXF1ZXN0LmJsb2JzID0gcmVxdWVzdC5ibG9icy5tYXAoKHgpID0+IGJ5dGVzVG9IZXgoeCkpOwogICAgICBlbHNlCiAgICAgICAgcnBjUmVxdWVzdC5ibG9icyA9IHJlcXVlc3QuYmxvYnM7CiAgICB9CiAgICBpZiAodHlwZW9mIHJlcXVlc3QuZGF0YSAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QuZGF0YSA9IHJlcXVlc3QuZGF0YTsKICAgIGlmICh0eXBlb2YgcmVxdWVzdC5mcm9tICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5mcm9tID0gcmVxdWVzdC5mcm9tOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LmdhcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QuZ2FzID0gbnVtYmVyVG9IZXgocmVxdWVzdC5nYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lmdhc1ByaWNlICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5nYXNQcmljZSA9IG51bWJlclRvSGV4KHJlcXVlc3QuZ2FzUHJpY2UpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm1heEZlZVBlckJsb2JHYXMgIT09ICJ1bmRlZmluZWQiKQogICAgICBycGNSZXF1ZXN0Lm1heEZlZVBlckJsb2JHYXMgPSBudW1iZXJUb0hleChyZXF1ZXN0Lm1heEZlZVBlckJsb2JHYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm1heEZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QubWF4RmVlUGVyR2FzID0gbnVtYmVyVG9IZXgocmVxdWVzdC5tYXhGZWVQZXJHYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm1heFByaW9yaXR5RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5tYXhQcmlvcml0eUZlZVBlckdhcyA9IG51bWJlclRvSGV4KHJlcXVlc3QubWF4UHJpb3JpdHlGZWVQZXJHYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm5vbmNlICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5ub25jZSA9IG51bWJlclRvSGV4KHJlcXVlc3Qubm9uY2UpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LnRvICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC50byA9IHJlcXVlc3QudG87CiAgICBpZiAodHlwZW9mIHJlcXVlc3QudHlwZSAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QudHlwZSA9IHJwY1RyYW5zYWN0aW9uVHlwZVtyZXF1ZXN0LnR5cGVdOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LnZhbHVlICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC52YWx1ZSA9IG51bWJlclRvSGV4KHJlcXVlc3QudmFsdWUpOwogICAgcmV0dXJuIHJwY1JlcXVlc3Q7CiAgfQogIGZ1bmN0aW9uIGZvcm1hdEF1dGhvcml6YXRpb25MaXN0KGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICByZXR1cm4gYXV0aG9yaXphdGlvbkxpc3QubWFwKChhdXRob3JpemF0aW9uKSA9PiAoewogICAgICBhZGRyZXNzOiBhdXRob3JpemF0aW9uLmNvbnRyYWN0QWRkcmVzcywKICAgICAgcjogYXV0aG9yaXphdGlvbi5yLAogICAgICBzOiBhdXRob3JpemF0aW9uLnMsCiAgICAgIGNoYWluSWQ6IG51bWJlclRvSGV4KGF1dGhvcml6YXRpb24uY2hhaW5JZCksCiAgICAgIG5vbmNlOiBudW1iZXJUb0hleChhdXRob3JpemF0aW9uLm5vbmNlKSwKICAgICAgLi4udHlwZW9mIGF1dGhvcml6YXRpb24ueVBhcml0eSAhPT0gInVuZGVmaW5lZCIgPyB7IHlQYXJpdHk6IG51bWJlclRvSGV4KGF1dGhvcml6YXRpb24ueVBhcml0eSkgfSA6IHt9LAogICAgICAuLi50eXBlb2YgYXV0aG9yaXphdGlvbi52ICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgYXV0aG9yaXphdGlvbi55UGFyaXR5ID09PSAidW5kZWZpbmVkIiA/IHsgdjogbnVtYmVyVG9IZXgoYXV0aG9yaXphdGlvbi52KSB9IDoge30KICAgIH0pKTsKICB9CiAgdmFyIHJwY1RyYW5zYWN0aW9uVHlwZSwgZGVmaW5lVHJhbnNhY3Rpb25SZXF1ZXN0OwogIHZhciBpbml0X3RyYW5zYWN0aW9uUmVxdWVzdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Zvcm1hdHRlcnMvdHJhbnNhY3Rpb25SZXF1ZXN0LmpzIigpIHsKICAgICAgaW5pdF90b0hleCgpOwogICAgICBpbml0X2Zvcm1hdHRlcigpOwogICAgICBycGNUcmFuc2FjdGlvblR5cGUgPSB7CiAgICAgICAgbGVnYWN5OiAiMHgwIiwKICAgICAgICBlaXAyOTMwOiAiMHgxIiwKICAgICAgICBlaXAxNTU5OiAiMHgyIiwKICAgICAgICBlaXA0ODQ0OiAiMHgzIiwKICAgICAgICBlaXA3NzAyOiAiMHg0IgogICAgICB9OwogICAgICBkZWZpbmVUcmFuc2FjdGlvblJlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lRm9ybWF0dGVyKCJ0cmFuc2FjdGlvblJlcXVlc3QiLCBmb3JtYXRUcmFuc2FjdGlvblJlcXVlc3QpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3N0YXRlT3ZlcnJpZGUuanMKICBmdW5jdGlvbiBzZXJpYWxpemVTdGF0ZU1hcHBpbmcoc3RhdGVNYXBwaW5nKSB7CiAgICBpZiAoIXN0YXRlTWFwcGluZyB8fCBzdGF0ZU1hcHBpbmcubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gdm9pZCAwOwogICAgcmV0dXJuIHN0YXRlTWFwcGluZy5yZWR1Y2UoKGFjYywgeyBzbG90LCB2YWx1ZSB9KSA9PiB7CiAgICAgIGlmIChzbG90Lmxlbmd0aCAhPT0gNjYpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRCeXRlc0xlbmd0aEVycm9yKHsKICAgICAgICAgIHNpemU6IHNsb3QubGVuZ3RoLAogICAgICAgICAgdGFyZ2V0U2l6ZTogNjYsCiAgICAgICAgICB0eXBlOiAiaGV4IgogICAgICAgIH0pOwogICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSA2NikKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEJ5dGVzTGVuZ3RoRXJyb3IoewogICAgICAgICAgc2l6ZTogdmFsdWUubGVuZ3RoLAogICAgICAgICAgdGFyZ2V0U2l6ZTogNjYsCiAgICAgICAgICB0eXBlOiAiaGV4IgogICAgICAgIH0pOwogICAgICBhY2Nbc2xvdF0gPSB2YWx1ZTsKICAgICAgcmV0dXJuIGFjYzsKICAgIH0sIHt9KTsKICB9CiAgZnVuY3Rpb24gc2VyaWFsaXplQWNjb3VudFN0YXRlT3ZlcnJpZGUocGFyYW1ldGVycykgewogICAgY29uc3QgeyBiYWxhbmNlLCBub25jZSwgc3RhdGUsIHN0YXRlRGlmZiwgY29kZSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlID0ge307CiAgICBpZiAoY29kZSAhPT0gdm9pZCAwKQogICAgICBycGNBY2NvdW50U3RhdGVPdmVycmlkZS5jb2RlID0gY29kZTsKICAgIGlmIChiYWxhbmNlICE9PSB2b2lkIDApCiAgICAgIHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlLmJhbGFuY2UgPSBudW1iZXJUb0hleChiYWxhbmNlKTsKICAgIGlmIChub25jZSAhPT0gdm9pZCAwKQogICAgICBycGNBY2NvdW50U3RhdGVPdmVycmlkZS5ub25jZSA9IG51bWJlclRvSGV4KG5vbmNlKTsKICAgIGlmIChzdGF0ZSAhPT0gdm9pZCAwKQogICAgICBycGNBY2NvdW50U3RhdGVPdmVycmlkZS5zdGF0ZSA9IHNlcmlhbGl6ZVN0YXRlTWFwcGluZyhzdGF0ZSk7CiAgICBpZiAoc3RhdGVEaWZmICE9PSB2b2lkIDApIHsKICAgICAgaWYgKHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlLnN0YXRlKQogICAgICAgIHRocm93IG5ldyBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yKCk7CiAgICAgIHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlLnN0YXRlRGlmZiA9IHNlcmlhbGl6ZVN0YXRlTWFwcGluZyhzdGF0ZURpZmYpOwogICAgfQogICAgcmV0dXJuIHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlOwogIH0KICBmdW5jdGlvbiBzZXJpYWxpemVTdGF0ZU92ZXJyaWRlKHBhcmFtZXRlcnMpIHsKICAgIGlmICghcGFyYW1ldGVycykKICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIGNvbnN0IHJwY1N0YXRlT3ZlcnJpZGUgPSB7fTsKICAgIGZvciAoY29uc3QgeyBhZGRyZXNzLCAuLi5hY2NvdW50U3RhdGUgfSBvZiBwYXJhbWV0ZXJzKSB7CiAgICAgIGlmICghaXNBZGRyZXNzKGFkZHJlc3MsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3MgfSk7CiAgICAgIGlmIChycGNTdGF0ZU92ZXJyaWRlW2FkZHJlc3NdKQogICAgICAgIHRocm93IG5ldyBBY2NvdW50U3RhdGVDb25mbGljdEVycm9yKHsgYWRkcmVzcyB9KTsKICAgICAgcnBjU3RhdGVPdmVycmlkZVthZGRyZXNzXSA9IHNlcmlhbGl6ZUFjY291bnRTdGF0ZU92ZXJyaWRlKGFjY291bnRTdGF0ZSk7CiAgICB9CiAgICByZXR1cm4gcnBjU3RhdGVPdmVycmlkZTsKICB9CiAgdmFyIGluaXRfc3RhdGVPdmVycmlkZTIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zdGF0ZU92ZXJyaWRlLmpzIigpIHsKICAgICAgaW5pdF9hZGRyZXNzKCk7CiAgICAgIGluaXRfZGF0YSgpOwogICAgICBpbml0X3N0YXRlT3ZlcnJpZGUoKTsKICAgICAgaW5pdF9pc0FkZHJlc3MoKTsKICAgICAgaW5pdF90b0hleCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL2Fzc2VydFJlcXVlc3QuanMKICBmdW5jdGlvbiBhc3NlcnRSZXF1ZXN0KGFyZ3MpIHsKICAgIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudF8sIGdhc1ByaWNlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCB0byB9ID0gYXJnczsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICBpZiAoYWNjb3VudCAmJiAhaXNBZGRyZXNzKGFjY291bnQuYWRkcmVzcykpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogYWNjb3VudC5hZGRyZXNzIH0pOwogICAgaWYgKHRvICYmICFpc0FkZHJlc3ModG8pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IHRvIH0pOwogICAgaWYgKHR5cGVvZiBnYXNQcmljZSAhPT0gInVuZGVmaW5lZCIgJiYgKHR5cGVvZiBtYXhGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiBtYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpKQogICAgICB0aHJvdyBuZXcgRmVlQ29uZmxpY3RFcnJvcigpOwogICAgaWYgKG1heEZlZVBlckdhcyAmJiBtYXhGZWVQZXJHYXMgPiAybiAqKiAyNTZuIC0gMW4pCiAgICAgIHRocm93IG5ldyBGZWVDYXBUb29IaWdoRXJyb3IoeyBtYXhGZWVQZXJHYXMgfSk7CiAgICBpZiAobWF4UHJpb3JpdHlGZWVQZXJHYXMgJiYgbWF4RmVlUGVyR2FzICYmIG1heFByaW9yaXR5RmVlUGVyR2FzID4gbWF4RmVlUGVyR2FzKQogICAgICB0aHJvdyBuZXcgVGlwQWJvdmVGZWVDYXBFcnJvcih7IG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMgfSk7CiAgfQogIHZhciBpbml0X2Fzc2VydFJlcXVlc3QgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9hc3NlcnRSZXF1ZXN0LmpzIigpIHsKICAgICAgaW5pdF9wYXJzZUFjY291bnQoKTsKICAgICAgaW5pdF9hZGRyZXNzKCk7CiAgICAgIGluaXRfbm9kZSgpOwogICAgICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgICAgIGluaXRfaXNBZGRyZXNzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9pc0FkZHJlc3NFcXVhbC5qcwogIGZ1bmN0aW9uIGlzQWRkcmVzc0VxdWFsKGEsIGIpIHsKICAgIGlmICghaXNBZGRyZXNzKGEsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiBhIH0pOwogICAgaWYgKCFpc0FkZHJlc3MoYiwgeyBzdHJpY3Q6IGZhbHNlIH0pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IGIgfSk7CiAgICByZXR1cm4gYS50b0xvd2VyQ2FzZSgpID09PSBiLnRvTG93ZXJDYXNlKCk7CiAgfQogIHZhciBpbml0X2lzQWRkcmVzc0VxdWFsID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9pc0FkZHJlc3NFcXVhbC5qcyIoKSB7CiAgICAgIGluaXRfYWRkcmVzcygpOwogICAgICBpbml0X2lzQWRkcmVzcygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9kZWNvZGVGdW5jdGlvblJlc3VsdC5qcwogIGZ1bmN0aW9uIGRlY29kZUZ1bmN0aW9uUmVzdWx0KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhcmdzLCBmdW5jdGlvbk5hbWUsIGRhdGEgfSA9IHBhcmFtZXRlcnM7CiAgICBsZXQgYWJpSXRlbSA9IGFiaTJbMF07CiAgICBpZiAoZnVuY3Rpb25OYW1lKSB7CiAgICAgIGNvbnN0IGl0ZW0gPSBnZXRBYmlJdGVtKHsgYWJpOiBhYmkyLCBhcmdzLCBuYW1lOiBmdW5jdGlvbk5hbWUgfSk7CiAgICAgIGlmICghaXRlbSkKICAgICAgICB0aHJvdyBuZXcgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yKGZ1bmN0aW9uTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg0IH0pOwogICAgICBhYmlJdGVtID0gaXRlbTsKICAgIH0KICAgIGlmIChhYmlJdGVtLnR5cGUgIT09ICJmdW5jdGlvbiIpCiAgICAgIHRocm93IG5ldyBBYmlGdW5jdGlvbk5vdEZvdW5kRXJyb3Iodm9pZCAwLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDQgfSk7CiAgICBpZiAoIWFiaUl0ZW0ub3V0cHV0cykKICAgICAgdGhyb3cgbmV3IEFiaUZ1bmN0aW9uT3V0cHV0c05vdEZvdW5kRXJyb3IoYWJpSXRlbS5uYW1lLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDQgfSk7CiAgICBjb25zdCB2YWx1ZXMgPSBkZWNvZGVBYmlQYXJhbWV0ZXJzKGFiaUl0ZW0ub3V0cHV0cywgZGF0YSk7CiAgICBpZiAodmFsdWVzICYmIHZhbHVlcy5sZW5ndGggPiAxKQogICAgICByZXR1cm4gdmFsdWVzOwogICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID09PSAxKQogICAgICByZXR1cm4gdmFsdWVzWzBdOwogICAgcmV0dXJuIHZvaWQgMDsKICB9CiAgdmFyIGRvY3NQYXRoNDsKICB2YXIgaW5pdF9kZWNvZGVGdW5jdGlvblJlc3VsdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9kZWNvZGVGdW5jdGlvblJlc3VsdC5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfZGVjb2RlQWJpUGFyYW1ldGVycygpOwogICAgICBpbml0X2dldEFiaUl0ZW0oKTsKICAgICAgZG9jc1BhdGg0ID0gIi9kb2NzL2NvbnRyYWN0L2RlY29kZUZ1bmN0aW9uUmVzdWx0IjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMvYWJpcy5qcwogIHZhciBtdWx0aWNhbGwzQWJpLCB1bml2ZXJzYWxSZXNvbHZlckVycm9ycywgdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpLCB1bml2ZXJzYWxSZXNvbHZlclJldmVyc2VBYmksIHRleHRSZXNvbHZlckFiaSwgYWRkcmVzc1Jlc29sdmVyQWJpLCB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JBYmksIGVyYzIwQWJpLCBlcmMyMEFiaV9ieXRlczMyLCBlcmM3MjFBYmksIGVyYzQ2MjZBYmk7CiAgdmFyIGluaXRfYWJpcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9hYmlzLmpzIigpIHsKICAgICAgbXVsdGljYWxsM0FiaSA9IFsKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbXBvbmVudHM6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogInRhcmdldCIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogImFsbG93RmFpbHVyZSIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogImNhbGxEYXRhIiwKICAgICAgICAgICAgICAgICAgdHlwZTogImJ5dGVzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgbmFtZTogImNhbGxzIiwKICAgICAgICAgICAgICB0eXBlOiAidHVwbGVbXSIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJhZ2dyZWdhdGUzIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbXBvbmVudHM6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogInN1Y2Nlc3MiLAogICAgICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIG5hbWU6ICJyZXR1cm5EYXRhIiwKICAgICAgICAgICAgICAgICAgdHlwZTogImJ5dGVzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgbmFtZTogInJldHVybkRhdGEiLAogICAgICAgICAgICAgIHR5cGU6ICJ0dXBsZVtdIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfQogICAgICBdOwogICAgICB1bml2ZXJzYWxSZXNvbHZlckVycm9ycyA9IFsKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogIlJlc29sdmVyTm90Rm91bmQiLAogICAgICAgICAgdHlwZTogImVycm9yIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG5hbWU6ICJSZXNvbHZlcldpbGRjYXJkTm90U3VwcG9ydGVkIiwKICAgICAgICAgIHR5cGU6ICJlcnJvciIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBuYW1lOiAiUmVzb2x2ZXJOb3RDb250cmFjdCIsCiAgICAgICAgICB0eXBlOiAiZXJyb3IiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJyZXR1cm5EYXRhIiwKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiUmVzb2x2ZXJFcnJvciIsCiAgICAgICAgICB0eXBlOiAiZXJyb3IiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbXBvbmVudHM6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogInN0YXR1cyIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJ1aW50MTYiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBuYW1lOiAibWVzc2FnZSIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICBuYW1lOiAiZXJyb3JzIiwKICAgICAgICAgICAgICB0eXBlOiAidHVwbGVbXSIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJIdHRwRXJyb3IiLAogICAgICAgICAgdHlwZTogImVycm9yIgogICAgICAgIH0KICAgICAgXTsKICAgICAgdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpID0gWwogICAgICAgIC4uLnVuaXZlcnNhbFJlc29sdmVyRXJyb3JzLAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJyZXNvbHZlIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICJuYW1lIiwgdHlwZTogImJ5dGVzIiB9LAogICAgICAgICAgICB7IG5hbWU6ICJkYXRhIiwgdHlwZTogImJ5dGVzIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICIiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImFkZHJlc3MiLCB0eXBlOiAiYWRkcmVzcyIgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogInJlc29sdmUiLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsgbmFtZTogIm5hbWUiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImRhdGEiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImdhdGV3YXlzIiwgdHlwZTogInN0cmluZ1tdIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICIiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImFkZHJlc3MiLCB0eXBlOiAiYWRkcmVzcyIgfQogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXTsKICAgICAgdW5pdmVyc2FsUmVzb2x2ZXJSZXZlcnNlQWJpID0gWwogICAgICAgIC4uLnVuaXZlcnNhbFJlc29sdmVyRXJyb3JzLAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJyZXZlcnNlIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW3sgdHlwZTogImJ5dGVzIiwgbmFtZTogInJldmVyc2VOYW1lIiB9XSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgeyB0eXBlOiAic3RyaW5nIiwgbmFtZTogInJlc29sdmVkTmFtZSIgfSwKICAgICAgICAgICAgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJyZXNvbHZlZEFkZHJlc3MiIH0sCiAgICAgICAgICAgIHsgdHlwZTogImFkZHJlc3MiLCBuYW1lOiAicmV2ZXJzZVJlc29sdmVyIiB9LAogICAgICAgICAgICB7IHR5cGU6ICJhZGRyZXNzIiwgbmFtZTogInJlc29sdmVyIiB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAicmV2ZXJzZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgeyB0eXBlOiAiYnl0ZXMiLCBuYW1lOiAicmV2ZXJzZU5hbWUiIH0sCiAgICAgICAgICAgIHsgdHlwZTogInN0cmluZ1tdIiwgbmFtZTogImdhdGV3YXlzIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7IHR5cGU6ICJzdHJpbmciLCBuYW1lOiAicmVzb2x2ZWROYW1lIiB9LAogICAgICAgICAgICB7IHR5cGU6ICJhZGRyZXNzIiwgbmFtZTogInJlc29sdmVkQWRkcmVzcyIgfSwKICAgICAgICAgICAgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJyZXZlcnNlUmVzb2x2ZXIiIH0sCiAgICAgICAgICAgIHsgdHlwZTogImFkZHJlc3MiLCBuYW1lOiAicmVzb2x2ZXIiIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF07CiAgICAgIHRleHRSZXNvbHZlckFiaSA9IFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAidGV4dCIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgeyBuYW1lOiAibmFtZSIsIHR5cGU6ICJieXRlczMyIiB9LAogICAgICAgICAgICB7IG5hbWU6ICJrZXkiLCB0eXBlOiAic3RyaW5nIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogW3sgbmFtZTogIiIsIHR5cGU6ICJzdHJpbmciIH1dCiAgICAgICAgfQogICAgICBdOwogICAgICBhZGRyZXNzUmVzb2x2ZXJBYmkgPSBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogImFkZHIiLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbeyBuYW1lOiAibmFtZSIsIHR5cGU6ICJieXRlczMyIiB9XSwKICAgICAgICAgIG91dHB1dHM6IFt7IG5hbWU6ICIiLCB0eXBlOiAiYWRkcmVzcyIgfV0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJhZGRyIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICJuYW1lIiwgdHlwZTogImJ5dGVzMzIiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImNvaW5UeXBlIiwgdHlwZTogInVpbnQyNTYiIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbeyBuYW1lOiAiIiwgdHlwZTogImJ5dGVzIiB9XQogICAgICAgIH0KICAgICAgXTsKICAgICAgdW5pdmVyc2FsU2lnbmF0dXJlVmFsaWRhdG9yQWJpID0gWwogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIl9zaWduZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIl9oYXNoIiwKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMzMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJfc2lnbmF0dXJlIiwKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIHR5cGU6ICJjb25zdHJ1Y3RvciIKICAgICAgICB9CiAgICAgIF07CiAgICAgIGVyYzIwQWJpID0gWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiQXBwcm92YWwiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYWxsb3dhbmNlIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYXBwcm92ZSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJiYWxhbmNlT2YiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhY2NvdW50IiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImRlY2ltYWxzIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50OCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJuYW1lIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAic3ltYm9sIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidG90YWxTdXBwbHkiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidHJhbnNmZXIiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJyZWNpcGllbnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJ0cmFuc2ZlckZyb20iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2lwaWVudCIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfQogICAgICBdOwogICAgICBlcmMyMEFiaV9ieXRlczMyID0gWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiQXBwcm92YWwiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYWxsb3dhbmNlIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYXBwcm92ZSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJiYWxhbmNlT2YiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhY2NvdW50IiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImRlY2ltYWxzIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50OCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJuYW1lIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJieXRlczMyIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInN5bWJvbCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMzMiIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJ0b3RhbFN1cHBseSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJ0cmFuc2ZlciIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2lwaWVudCIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInRyYW5zZmVyRnJvbSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNlbmRlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAicmVjaXBpZW50IiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhbW91bnQiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogImJvb2wiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF07CiAgICAgIGVyYzcyMUFiaSA9IFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZXZlbnQiLAogICAgICAgICAgbmFtZTogIkFwcHJvdmFsIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAic3BlbmRlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImV2ZW50IiwKICAgICAgICAgIG5hbWU6ICJBcHByb3ZhbEZvckFsbCIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogIm93bmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogIm9wZXJhdG9yIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJhcHByb3ZlZCIsCiAgICAgICAgICAgICAgdHlwZTogImJvb2wiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRva2VuSWQiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImFwcHJvdmUiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAicGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImJhbGFuY2VPZiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFjY291bnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiZ2V0QXBwcm92ZWQiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImlzQXBwcm92ZWRGb3JBbGwiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3BlcmF0b3IiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogImJvb2wiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAibmFtZSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogIm93bmVyT2YiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAic2FmZVRyYW5zZmVyRnJvbSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJwYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImZyb20iLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInNhZmVUcmFuc2ZlckZyb20iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0byIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiaWQiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImRhdGEiLAogICAgICAgICAgICAgIHR5cGU6ICJieXRlcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInNldEFwcHJvdmFsRm9yQWxsIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogIm5vbnBheWFibGUiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3BlcmF0b3IiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFwcHJvdmVkIiwKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInN5bWJvbCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInRva2VuQnlJbmRleCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImluZGV4IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInRva2VuQnlJbmRleCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIm93bmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJpbmRleCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAidG9rZW5JZCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidG9rZW5VUkkiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidG90YWxTdXBwbHkiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidHJhbnNmZXJGcm9tIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInBheWFibGUiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJyZWNpcGllbnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInRva2VJZCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbXQogICAgICAgIH0KICAgICAgXTsKICAgICAgZXJjNDYyNkFiaSA9IFsKICAgICAgICB7CiAgICAgICAgICBhbm9ueW1vdXM6IGZhbHNlLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiQXBwcm92YWwiLAogICAgICAgICAgdHlwZTogImV2ZW50IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgYW5vbnltb3VzOiBmYWxzZSwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogZmFsc2UsCiAgICAgICAgICAgICAgbmFtZTogInNoYXJlcyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiRGVwb3NpdCIsCiAgICAgICAgICB0eXBlOiAiZXZlbnQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBhbm9ueW1vdXM6IGZhbHNlLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgdHlwZTogImV2ZW50IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgYW5vbnltb3VzOiBmYWxzZSwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogIm93bmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogZmFsc2UsCiAgICAgICAgICAgICAgbmFtZTogInNoYXJlcyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiV2l0aGRyYXciLAogICAgICAgICAgdHlwZTogImV2ZW50IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogImFsbG93YW5jZSIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAic3BlbmRlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJhcHByb3ZlIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogImFzc2V0IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldFRva2VuQWRkcmVzcyIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFjY291bnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogImJhbGFuY2VPZiIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAic2hhcmVzIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJjb252ZXJ0VG9Bc3NldHMiLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiY29udmVydFRvU2hhcmVzIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJkZXBvc2l0IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJjYWxsZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogIm1heERlcG9zaXQiLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIm1heEFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImNhbGxlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAibWF4TWludCIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAibWF4U2hhcmVzIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogIm1heFJlZGVlbSIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAibWF4U2hhcmVzIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogIm1heFdpdGhkcmF3IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJtYXhBc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJtaW50IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogInByZXZpZXdEZXBvc2l0IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogInByZXZpZXdNaW50IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogInByZXZpZXdSZWRlZW0iLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAicHJldmlld1dpdGhkcmF3IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAicmVkZWVtIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogInRvdGFsQXNzZXRzIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b3RhbE1hbmFnZWRBc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogInRvdGFsU3VwcGx5IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0byIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJ0cmFuc2ZlciIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogIm5vbnBheWFibGUiLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiZnJvbSIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAidG8iLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAidHJhbnNmZXJGcm9tIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAid2l0aGRyYXciLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNoYXJlcyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9CiAgICAgIF07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2NvbnRyYWN0LmpzCiAgdmFyIGFnZ3JlZ2F0ZTNTaWduYXR1cmU7CiAgdmFyIGluaXRfY29udHJhY3QyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2NvbnRyYWN0LmpzIigpIHsKICAgICAgYWdncmVnYXRlM1NpZ25hdHVyZSA9ICIweDgyYWQ1NmNiIjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMvY29udHJhY3RzLmpzCiAgdmFyIGRlcGxveWxlc3NDYWxsVmlhQnl0ZWNvZGVCeXRlY29kZSwgZGVwbG95bGVzc0NhbGxWaWFGYWN0b3J5Qnl0ZWNvZGUsIHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckJ5dGVDb2RlOwogIHZhciBpbml0X2NvbnRyYWN0cyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9jb250cmFjdHMuanMiKCkgewogICAgICBkZXBsb3lsZXNzQ2FsbFZpYUJ5dGVjb2RlQnl0ZWNvZGUgPSAiMHg2MDgwNjA0MDUyMzQ4MDE1NjEwMDEwNTc2MDAwODBmZDViNTA2MDQwNTE2MTAxOGUzODAzODA2MTAxOGU4MzM5ODEwMTYwNDA4MTkwNTI2MTAwMmY5MTYxMDEyNDU2NWI2MDAwODA4MzUxNjAyMDg1MDE2MDAwZjU5MDUwODAzYjYxMDA0ODU3NjAwMDgwZmQ1YjYwMDA4MDgzNTE2MDIwODUwMTYwMDA4NTVhZjE2MDQwNTEzZDYwMDA4MjNlODE2MTAwNjc1NzNkODFmZDViM2Q4MWYzNWI2MzRlNDg3YjcxNjBlMDFiNjAwMDUyNjA0MTYwMDQ1MjYwMjQ2MDAwZmQ1YjYwMDA4MjYwMWY4MzAxMTI2MTAwOTI1NzYwMDA4MGZkNWI4MTUxNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDBhYjU3NjEwMGFiNjEwMDZiNTY1YjYwNDA1MTYwMWY4MjAxNjAxZjE5OTA4MTE2NjAzZjAxMTY4MTAxNjAwMTYwMDE2MDQwMWIwMzgxMTE4MjgyMTAxNzE1NjEwMGQ5NTc2MTAwZDk2MTAwNmI1NjViNjA0MDUyODE4MTUyODM4MjAxNjAyMDAxODUxMDE1NjEwMGYxNTc2MDAwODBmZDViNjAwMDViODI4MTEwMTU2MTAxMTA1NzYwMjA4MTg2MDE4MTAxNTE4MzgzMDE4MjAxNTIwMTYxMDBmNDU2NWI1MDYwMDA5MTgxMDE2MDIwMDE5MTkwOTE1MjkzOTI1MDUwNTA1NjViNjAwMDgwNjA0MDgzODUwMzEyMTU2MTAxMzc1NzYwMDA4MGZkNWI4MjUxNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDE0ZDU3NjAwMDgwZmQ1YjYxMDE1OTg1ODI4NjAxNjEwMDgxNTY1YjYwMjA4NTAxNTE5MDkzNTA5MDUwNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDE3NzU3NjAwMDgwZmQ1YjYxMDE4Mzg1ODI4NjAxNjEwMDgxNTY1YjkxNTA1MDkyNTA5MjkwNTA1NmZlIjsKICAgICAgZGVwbG95bGVzc0NhbGxWaWFGYWN0b3J5Qnl0ZWNvZGUgPSAiMHg2MDgwNjA0MDUyMzQ4MDE1NjEwMDEwNTc2MDAwODBmZDViNTA2MDQwNTE2MTAyYzAzODAzODA2MTAyYzA4MzM5ODEwMTYwNDA4MTkwNTI2MTAwMmY5MTYxMDFlNjU2NWI4MzYwMDE2MDAxNjBhMDFiMDMxNjNiNjAwMDAzNjEwMGU0NTc2MDAwODA4MzYwMDE2MDAxNjBhMDFiMDMxNjgzNjA0MDUxNjEwMDVjOTE5MDYxMDI3MDU2NWI2MDAwNjA0MDUxODA4MzAzODE2MDAwODY1YWYxOTE1MDUwM2Q4MDYwMDA4MTE0NjEwMDk5NTc2MDQwNTE5MTUwNjAxZjE5NjAzZjNkMDExNjgyMDE2MDQwNTIzZDgyNTIzZDYwMDA2MDIwODQwMTNlNjEwMDllNTY1YjYwNjA5MTUwNWI1MDkxNTA5MTUwODExNTgwNjEwMGI4NTc1MDYwMDE2MDAxNjBhMDFiMDM4NjE2M2IxNTViMTU2MTAwZTE1NzgwNjA0MDUxNjMxMDFiYjk4ZDYwZTAxYjgxNTI2MDA0MDE2MTAwZDg5MTkwNjEwMjhjNTY1YjYwNDA1MTgwOTEwMzkwZmQ1YjUwNTA1YjYwMDA4MDg0NTE2MDIwODYwMTYwMDA4ODVhZjE2MDQwNTEzZDYwMDA4MjNlODE2MTAxMDM1NzNkODFmZDViM2Q4MWYzNWI4MDUxNjAwMTYwMDE2MGEwMWIwMzgxMTY4MTE0NjEwMTFlNTc2MDAwODBmZDViOTE5MDUwNTY1YjYzNGU0ODdiNzE2MGUwMWI2MDAwNTI2MDQxNjAwNDUyNjAyNDYwMDBmZDViNjAwMDViODM4MTEwMTU2MTAxNTQ1NzgxODEwMTUxODM4MjAxNTI2MDIwMDE2MTAxM2M1NjViNTA1MDYwMDA5MTAxNTI1NjViNjAwMDgyNjAxZjgzMDExMjYxMDE2ZTU3NjAwMDgwZmQ1YjgxNTE2MDAxNjAwMTYwNDAxYjAzODExMTE1NjEwMTg3NTc2MTAxODc2MTAxMjM1NjViNjA0MDUxNjAxZjgyMDE2MDFmMTk5MDgxMTY2MDNmMDExNjgxMDE2MDAxNjAwMTYwNDAxYjAzODExMTgyODIxMDE3MTU2MTAxYjU1NzYxMDFiNTYxMDEyMzU2NWI2MDQwNTI4MTgxNTI4MzgyMDE2MDIwMDE4NTEwMTU2MTAxY2Q1NzYwMDA4MGZkNWI2MTAxZGU4MjYwMjA4MzAxNjAyMDg3MDE2MTAxMzk1NjViOTQ5MzUwNTA1MDUwNTY1YjYwMDA4MDYwMDA4MDYwODA4NTg3MDMxMjE1NjEwMWZjNTc2MDAwODBmZDViNjEwMjA1ODU2MTAxMDc1NjViNjAyMDg2MDE1MTkwOTQ1MDYwMDE2MDAxNjA0MDFiMDM4MTExMTU2MTAyMjE1NzYwMDA4MGZkNWI2MTAyMmQ4NzgyODgwMTYxMDE1ZDU2NWI5MzUwNTA2MTAyM2M2MDQwODYwMTYxMDEwNzU2NWI2MDYwODYwMTUxOTA5MjUwNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDI1ODU3NjAwMDgwZmQ1YjYxMDI2NDg3ODI4ODAxNjEwMTVkNTY1YjkxNTA1MDkyOTU5MTk0NTA5MjUwNTY1YjYwMDA4MjUxNjEwMjgyODE4NDYwMjA4NzAxNjEwMTM5NTY1YjkxOTA5MTAxOTI5MTUwNTA1NjViNjAyMDgxNTI2MDAwODI1MTgwNjAyMDg0MDE1MjYxMDJhYjgxNjA0MDg1MDE2MDIwODcwMTYxMDEzOTU2NWI2MDFmMDE2MDFmMTkxNjkxOTA5MTAxNjA0MDAxOTI5MTUwNTA1NmZlIjsKICAgICAgdW5pdmVyc2FsU2lnbmF0dXJlVmFsaWRhdG9yQnl0ZUNvZGUgPSAiMHg2MDgwNjA0MDUyMzQ4MDE1NjEwMDEwNTc2MDAwODBmZDViNTA2MDQwNTE2MTA2OTQzODAzODA2MTA2OTQ4MzM5ODEwMTYwNDA4MTkwNTI2MTAwMmY5MTYxMDUxZTU2NWI2MDAwNjEwMDNjODQ4NDg0NjEwMDQ4NTY1YjkwNTA4MDYwMDA1MjYwMDE2MDFmZjM1YjYwMDA3ZjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2MTAwNzQ4MzYxMDQwYzU2NWIwMzYxMDFlNzU3NjAwMDYwNjA4MDg0ODA2MDIwMDE5MDUxODEwMTkwNjEwMDkyOTE5MDYxMDU3NzU2NWI2MDQwNTE5Mjk1NTA5MDkzNTA5MTUwNjAwMDkwNjAwMTYwMDE2MGEwMWIwMzg1MTY5MDYxMDBiNjkwODU5MDYxMDVkZDU2NWI2MDAwNjA0MDUxODA4MzAzODE2MDAwODY1YWYxOTE1MDUwM2Q4MDYwMDA4MTE0NjEwMGYzNTc2MDQwNTE5MTUwNjAxZjE5NjAzZjNkMDExNjgyMDE2MDQwNTIzZDgyNTIzZDYwMDA2MDIwODQwMTNlNjEwMGY4NTY1YjYwNjA5MTUwNWI1MDUwOTA1MDg3NjAwMTYwMDE2MGEwMWIwMzE2M2I2MDAwMDM2MTAxNjA1NzgwNjEwMTYwNTc2MDQwNTE2MjQ2MWJjZDYwZTUxYjgxNTI2MDIwNjAwNDgyMDE1MjYwMWU2MDI0ODIwMTUyN2Y1MzY5Njc2ZTYxNzQ3NTcyNjU1NjYxNmM2OTY0NjE3NDZmNzIzYTIwNjQ2NTcwNmM2Zjc5NmQ2NTZlNzQwMDAwNjA0NDgyMDE1MjYwNjQwMTViNjA0MDUxODA5MTAzOTBmZDViNjA0MDUxNjMwYjEzNWQzZjYwZTExYjgwODI1MjkwNjAwMTYwMDE2MGEwMWIwMzhhMTY5MDYzMTYyNmJhN2U5MDYxMDE5MDkwOGI5MDg3OTA2MDA0MDE2MTA1Zjk1NjViNjAyMDYwNDA1MTgwODMwMzgxODY1YWZhMTU4MDE1NjEwMWFkNTczZDYwMDA4MDNlM2Q2MDAwZmQ1YjUwNTA1MDUwNjA0MDUxM2Q2MDFmMTk2MDFmODIwMTE2ODIwMTgwNjA0MDUyNTA4MTAxOTA2MTAxZDE5MTkwNjEwNjMzNTY1YjYwMDE2MDAxNjBlMDFiMDMxOTE2MTQ5NDUwNTA1MDUwNTA2MTA0MDU1NjViNjAwMTYwMDE2MGEwMWIwMzg0MTYzYjE1NjEwMjdhNTc2MDQwNTE2MzBiMTM1ZDNmNjBlMTFiODA4MjUyOTA2MDAxNjAwMTYwYTAxYjAzODYxNjkwNjMxNjI2YmE3ZTkwNjEwMjI3OTA4NzkwODc5MDYwMDQwMTYxMDVmOTU2NWI2MDIwNjA0MDUxODA4MzAzODE4NjVhZmExNTgwMTU2MTAyNDQ1NzNkNjAwMDgwM2UzZDYwMDBmZDViNTA1MDUwNTA2MDQwNTEzZDYwMWYxOTYwMWY4MjAxMTY4MjAxODA2MDQwNTI1MDgxMDE5MDYxMDI2ODkxOTA2MTA2MzM1NjViNjAwMTYwMDE2MGUwMWIwMzE5MTYxNDkwNTA2MTA0MDU1NjViODE1MTYwNDExNDYxMDJkZjU3NjA0MDUxNjI0NjFiY2Q2MGU1MWI4MTUyNjAyMDYwMDQ4MjAxNTI2MDNhNjAyNDgyMDE1MjYwMDA4MDUxNjAyMDYxMDY3NDgzMzk4MTUxOTE1MjYwNDQ4MjAxNTI3ZjNhMjA2OTZlNzY2MTZjNjk2NDIwNzM2OTY3NmU2MTc0NzU3MjY1MjA2YzY1NmU2Nzc0NjgwMDAwMDAwMDAwMDA2MDY0ODIwMTUyNjA4NDAxNjEwMTU3NTY1YjYxMDJlNzYxMDQyNTU2NWI1MDYwMjA4MjAxNTE2MDQwODA4NDAxNTE4NDUxODU5MzkyNjAwMDkxODU5MTkwODExMDYxMDMwYzU3NjEwMzBjNjEwNjVkNTY1YjAxNjAyMDAxNTE2MGY4MWM5MDUwNjAxYjgxMTQ4MDE1OTA2MTAzMmI1NzUwODA2MGZmMTY2MDFjMTQxNTViMTU2MTAzOGM1NzYwNDA1MTYyNDYxYmNkNjBlNTFiODE1MjYwMjA2MDA0ODIwMTUyNjAzYjYwMjQ4MjAxNTI2MDAwODA1MTYwMjA2MTA2NzQ4MzM5ODE1MTkxNTI2MDQ0ODIwMTUyN2YzYTIwNjk2ZTc2NjE2YzY5NjQyMDczNjk2NzZlNjE3NDc1NzI2NTIwNzYyMDc2NjE2Yzc1NjUwMDAwMDAwMDAwNjA2NDgyMDE1MjYwODQwMTYxMDE1NzU2NWI2MDQwODA1MTYwMDA4MTUyNjAyMDgxMDE4MDgzNTI4OTkwNTI2MGZmODMxNjkxODEwMTkxOTA5MTUyNjA2MDgxMDE4NDkwNTI2MDgwODEwMTgzOTA1MjYwMDE2MDAxNjBhMDFiMDM4OTE2OTA2MDAxOTA2MGEwMDE2MDIwNjA0MDUxNjAyMDgxMDM5MDgwODQwMzkwODU1YWZhMTU4MDE1NjEwM2VhNTczZDYwMDA4MDNlM2Q2MDAwZmQ1YjUwNTA1MDYwMjA2MDQwNTEwMzUxNjAwMTYwMDE2MGEwMWIwMzE2MTQ5NDUwNTA1MDUwNTA1YjkzOTI1MDUwNTA1NjViNjAwMDYwMjA4MjUxMTAxNTYxMDQxZDU3NjAwMDgwZmQ1YjUwODA1MTAxNTE5MDU2NWI2MDQwNTE4MDYwNjAwMTYwNDA1MjgwNjAwMzkwNjAyMDgyMDI4MDM2ODMzNzUwOTE5MjkxNTA1MDU2NWI2MDAxNjAwMTYwYTAxYjAzODExNjgxMTQ2MTA0NTg1NzYwMDA4MGZkNWI1MDU2NWI2MzRlNDg3YjcxNjBlMDFiNjAwMDUyNjA0MTYwMDQ1MjYwMjQ2MDAwZmQ1YjYwMDA1YjgzODExMDE1NjEwNDhjNTc4MTgxMDE1MTgzODIwMTUyNjAyMDAxNjEwNDc0NTY1YjUwNTA2MDAwOTEwMTUyNTY1YjYwMDA4MjYwMWY4MzAxMTI2MTA0YTY1NzYwMDA4MGZkNWI4MTUxNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDRiZjU3NjEwNGJmNjEwNDViNTY1YjYwNDA1MTYwMWY4MjAxNjAxZjE5OTA4MTE2NjAzZjAxMTY4MTAxNjAwMTYwMDE2MDQwMWIwMzgxMTE4MjgyMTAxNzE1NjEwNGVkNTc2MTA0ZWQ2MTA0NWI1NjViNjA0MDUyODE4MTUyODM4MjAxNjAyMDAxODUxMDE1NjEwNTA1NTc2MDAwODBmZDViNjEwNTE2ODI2MDIwODMwMTYwMjA4NzAxNjEwNDcxNTY1Yjk0OTM1MDUwNTA1MDU2NWI2MDAwODA2MDAwNjA2MDg0ODYwMzEyMTU2MTA1MzM1NzYwMDA4MGZkNWI4MzUxNjEwNTNlODE2MTA0NDM1NjViNjAyMDg1MDE1MTYwNDA4NjAxNTE5MTk0NTA5MjUwNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDU2MTU3NjAwMDgwZmQ1YjYxMDU2ZDg2ODI4NzAxNjEwNDk1NTY1YjkxNTA1MDkyNTA5MjUwOTI1NjViNjAwMDgwNjAwMDYwNjA4NDg2MDMxMjE1NjEwNThjNTc2MDAwODBmZDViODM1MTYxMDU5NzgxNjEwNDQzNTY1YjYwMjA4NTAxNTE5MDkzNTA2MDAxNjAwMTYwNDAxYjAzODExMTE1NjEwNWIzNTc2MDAwODBmZDViNjEwNWJmODY4Mjg3MDE2MTA0OTU1NjViNjA0MDg2MDE1MTkwOTM1MDkwNTA2MDAxNjAwMTYwNDAxYjAzODExMTE1NjEwNTYxNTc2MDAwODBmZDViNjAwMDgyNTE2MTA1ZWY4MTg0NjAyMDg3MDE2MTA0NzE1NjViOTE5MDkxMDE5MjkxNTA1MDU2NWI4MjgxNTI2MDQwNjAyMDgyMDE1MjYwMDA4MjUxODA2MDQwODQwMTUyNjEwNjFlODE2MDYwODUwMTYwMjA4NzAxNjEwNDcxNTY1YjYwMWYwMTYwMWYxOTE2OTE5MDkxMDE2MDYwMDE5MzkyNTA1MDUwNTY1YjYwMDA2MDIwODI4NDAzMTIxNTYxMDY0NTU3NjAwMDgwZmQ1YjgxNTE2MDAxNjAwMTYwZTAxYjAzMTk4MTE2ODExNDYxMDQwNTU3NjAwMDgwZmQ1YjYzNGU0ODdiNzE2MGUwMWI2MDAwNTI2MDMyNjAwNDUyNjAyNDYwMDBmZGZlNTM2OTY3NmU2MTc0NzU3MjY1NTY2MTZjNjk2NDYxNzQ2ZjcyMjM3MjY1NjM2Zjc2NjU3MjUzNjk2NzZlNjU3MiI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2NoYWluLmpzCiAgdmFyIENoYWluRG9lc05vdFN1cHBvcnRDb250cmFjdCwgQ2hhaW5NaXNtYXRjaEVycm9yLCBDaGFpbk5vdEZvdW5kRXJyb3IsIENsaWVudENoYWluTm90Q29uZmlndXJlZEVycm9yLCBJbnZhbGlkQ2hhaW5JZEVycm9yOwogIHZhciBpbml0X2NoYWluID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2NoYWluLmpzIigpIHsKICAgICAgaW5pdF9iYXNlKCk7CiAgICAgIENoYWluRG9lc05vdFN1cHBvcnRDb250cmFjdCA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBibG9ja051bWJlciwgY2hhaW4sIGNvbnRyYWN0IH0pIHsKICAgICAgICAgIHN1cGVyKGBDaGFpbiAiJHtjaGFpbi5uYW1lfSIgZG9lcyBub3Qgc3VwcG9ydCBjb250cmFjdCAiJHtjb250cmFjdC5uYW1lfSIuYCwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAiVGhpcyBjb3VsZCBiZSBkdWUgdG8gYW55IG9mIHRoZSBmb2xsb3dpbmc6IiwKICAgICAgICAgICAgICAuLi5ibG9ja051bWJlciAmJiBjb250cmFjdC5ibG9ja0NyZWF0ZWQgJiYgY29udHJhY3QuYmxvY2tDcmVhdGVkID4gYmxvY2tOdW1iZXIgPyBbCiAgICAgICAgICAgICAgICBgLSBUaGUgY29udHJhY3QgIiR7Y29udHJhY3QubmFtZX0iIHdhcyBub3QgZGVwbG95ZWQgdW50aWwgYmxvY2sgJHtjb250cmFjdC5ibG9ja0NyZWF0ZWR9IChjdXJyZW50IGJsb2NrICR7YmxvY2tOdW1iZXJ9KS5gCiAgICAgICAgICAgICAgXSA6IFsKICAgICAgICAgICAgICAgIGAtIFRoZSBjaGFpbiBkb2VzIG5vdCBoYXZlIHRoZSBjb250cmFjdCAiJHtjb250cmFjdC5uYW1lfSIgY29uZmlndXJlZC5gCiAgICAgICAgICAgICAgXQogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0IgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBDaGFpbk1pc21hdGNoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2hhaW4sIGN1cnJlbnRDaGFpbklkIH0pIHsKICAgICAgICAgIHN1cGVyKGBUaGUgY3VycmVudCBjaGFpbiBvZiB0aGUgd2FsbGV0IChpZDogJHtjdXJyZW50Q2hhaW5JZH0pIGRvZXMgbm90IG1hdGNoIHRoZSB0YXJnZXQgY2hhaW4gZm9yIHRoZSB0cmFuc2FjdGlvbiAoaWQ6ICR7Y2hhaW4uaWR9IFx1MjAxMyAke2NoYWluLm5hbWV9KS5gLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBDdXJyZW50IENoYWluIElEOiAgJHtjdXJyZW50Q2hhaW5JZH1gLAogICAgICAgICAgICAgIGBFeHBlY3RlZCBDaGFpbiBJRDogJHtjaGFpbi5pZH0gXHUyMDEzICR7Y2hhaW4ubmFtZX1gCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG5hbWU6ICJDaGFpbk1pc21hdGNoRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIENoYWluTm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgICJObyBjaGFpbiB3YXMgcHJvdmlkZWQgdG8gdGhlIHJlcXVlc3QuIiwKICAgICAgICAgICAgIlBsZWFzZSBwcm92aWRlIGEgY2hhaW4gd2l0aCB0aGUgYGNoYWluYCBhcmd1bWVudCBvbiB0aGUgQWN0aW9uLCBvciBieSBzdXBwbHlpbmcgYSBgY2hhaW5gIHRvIFdhbGxldENsaWVudC4iCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgbmFtZTogIkNoYWluTm90Rm91bmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ2xpZW50Q2hhaW5Ob3RDb25maWd1cmVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoIk5vIGNoYWluIHdhcyBwcm92aWRlZCB0byB0aGUgQ2xpZW50LiIsIHsKICAgICAgICAgICAgbmFtZTogIkNsaWVudENoYWluTm90Q29uZmlndXJlZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQ2hhaW5JZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNoYWluSWQgfSkgewogICAgICAgICAgc3VwZXIodHlwZW9mIGNoYWluSWQgPT09ICJudW1iZXIiID8gYENoYWluIElEICIke2NoYWluSWR9IiBpcyBpbnZhbGlkLmAgOiAiQ2hhaW4gSUQgaXMgaW52YWxpZC4iLCB7IG5hbWU6ICJJbnZhbGlkQ2hhaW5JZEVycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2VuY29kZURlcGxveURhdGEuanMKICBmdW5jdGlvbiBlbmNvZGVEZXBsb3lEYXRhKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhcmdzLCBieXRlY29kZSB9ID0gcGFyYW1ldGVyczsKICAgIGlmICghYXJncyB8fCBhcmdzLmxlbmd0aCA9PT0gMCkKICAgICAgcmV0dXJuIGJ5dGVjb2RlOwogICAgY29uc3QgZGVzY3JpcHRpb24gPSBhYmkyLmZpbmQoKHgpID0+ICJ0eXBlIiBpbiB4ICYmIHgudHlwZSA9PT0gImNvbnN0cnVjdG9yIik7CiAgICBpZiAoIWRlc2NyaXB0aW9uKQogICAgICB0aHJvdyBuZXcgQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoNSB9KTsKICAgIGlmICghKCJpbnB1dHMiIGluIGRlc2NyaXB0aW9uKSkKICAgICAgdGhyb3cgbmV3IEFiaUNvbnN0cnVjdG9yUGFyYW1zTm90Rm91bmRFcnJvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDUgfSk7CiAgICBpZiAoIWRlc2NyaXB0aW9uLmlucHV0cyB8fCBkZXNjcmlwdGlvbi5pbnB1dHMubGVuZ3RoID09PSAwKQogICAgICB0aHJvdyBuZXcgQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoNSB9KTsKICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVBYmlQYXJhbWV0ZXJzKGRlc2NyaXB0aW9uLmlucHV0cywgYXJncyk7CiAgICByZXR1cm4gY29uY2F0SGV4KFtieXRlY29kZSwgZGF0YV0pOwogIH0KICB2YXIgZG9jc1BhdGg1OwogIHZhciBpbml0X2VuY29kZURlcGxveURhdGEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlRGVwbG95RGF0YS5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfY29uY2F0KCk7CiAgICAgIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogICAgICBkb2NzUGF0aDUgPSAiL2RvY3MvY29udHJhY3QvZW5jb2RlRGVwbG95RGF0YSI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY2hhaW4vZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MuanMKICBmdW5jdGlvbiBnZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyh7IGJsb2NrTnVtYmVyLCBjaGFpbiwgY29udHJhY3Q6IG5hbWUgfSkgewogICAgY29uc3QgY29udHJhY3QgPSBjaGFpbj8uY29udHJhY3RzPy5bbmFtZV07CiAgICBpZiAoIWNvbnRyYWN0KQogICAgICB0aHJvdyBuZXcgQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0KHsKICAgICAgICBjaGFpbiwKICAgICAgICBjb250cmFjdDogeyBuYW1lIH0KICAgICAgfSk7CiAgICBpZiAoYmxvY2tOdW1iZXIgJiYgY29udHJhY3QuYmxvY2tDcmVhdGVkICYmIGNvbnRyYWN0LmJsb2NrQ3JlYXRlZCA+IGJsb2NrTnVtYmVyKQogICAgICB0aHJvdyBuZXcgQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0KHsKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBjaGFpbiwKICAgICAgICBjb250cmFjdDogewogICAgICAgICAgbmFtZSwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogY29udHJhY3QuYmxvY2tDcmVhdGVkCiAgICAgICAgfQogICAgICB9KTsKICAgIHJldHVybiBjb250cmFjdC5hZGRyZXNzOwogIH0KICB2YXIgaW5pdF9nZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2NoYWluL2dldENoYWluQ29udHJhY3RBZGRyZXNzLmpzIigpIHsKICAgICAgaW5pdF9jaGFpbigpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vycm9ycy9nZXRDYWxsRXJyb3IuanMKICBmdW5jdGlvbiBnZXRDYWxsRXJyb3IoZXJyLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIC4uLmFyZ3MgfSkgewogICAgY29uc3QgY2F1c2UgPSAoKCkgPT4gewogICAgICBjb25zdCBjYXVzZTIgPSBnZXROb2RlRXJyb3IoZXJyLCBhcmdzKTsKICAgICAgaWYgKGNhdXNlMiBpbnN0YW5jZW9mIFVua25vd25Ob2RlRXJyb3IpCiAgICAgICAgcmV0dXJuIGVycjsKICAgICAgcmV0dXJuIGNhdXNlMjsKICAgIH0pKCk7CiAgICByZXR1cm4gbmV3IENhbGxFeGVjdXRpb25FcnJvcihjYXVzZSwgewogICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAuLi5hcmdzCiAgICB9KTsKICB9CiAgdmFyIGluaXRfZ2V0Q2FsbEVycm9yID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZXJyb3JzL2dldENhbGxFcnJvci5qcyIoKSB7CiAgICAgIGluaXRfY29udHJhY3QoKTsKICAgICAgaW5pdF9ub2RlKCk7CiAgICAgIGluaXRfZ2V0Tm9kZUVycm9yKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcHJvbWlzZS9jcmVhdGVCYXRjaFNjaGVkdWxlci5qcwogIGZ1bmN0aW9uIGNyZWF0ZUJhdGNoU2NoZWR1bGVyKHsgZm4sIGlkLCBzaG91bGRTcGxpdEJhdGNoLCB3YWl0OiB3YWl0MiA9IDAsIHNvcnQgfSkgewogICAgY29uc3QgZXhlYyA9IGFzeW5jICgpID0+IHsKICAgICAgY29uc3Qgc2NoZWR1bGVyID0gZ2V0U2NoZWR1bGVyKCk7CiAgICAgIGZsdXNoKCk7CiAgICAgIGNvbnN0IGFyZ3MgPSBzY2hlZHVsZXIubWFwKCh7IGFyZ3M6IGFyZ3MyIH0pID0+IGFyZ3MyKTsKICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgZm4oYXJncykudGhlbigoZGF0YSkgPT4gewogICAgICAgIGlmIChzb3J0ICYmIEFycmF5LmlzQXJyYXkoZGF0YSkpCiAgICAgICAgICBkYXRhLnNvcnQoc29ydCk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY2hlZHVsZXIubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGNvbnN0IHsgcGVuZGluZ1Byb21pc2UgfSA9IHNjaGVkdWxlcltpXTsKICAgICAgICAgIHBlbmRpbmdQcm9taXNlLnJlc29sdmU/LihbZGF0YVtpXSwgZGF0YV0pOwogICAgICAgIH0KICAgICAgfSkuY2F0Y2goKGVycikgPT4gewogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2NoZWR1bGVyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBjb25zdCB7IHBlbmRpbmdQcm9taXNlIH0gPSBzY2hlZHVsZXJbaV07CiAgICAgICAgICBwZW5kaW5nUHJvbWlzZS5yZWplY3Q/LihlcnIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9OwogICAgY29uc3QgZmx1c2ggPSAoKSA9PiBzY2hlZHVsZXJDYWNoZS5kZWxldGUoaWQpOwogICAgY29uc3QgZ2V0QmF0Y2hlZEFyZ3MgPSAoKSA9PiBnZXRTY2hlZHVsZXIoKS5tYXAoKHsgYXJncyB9KSA9PiBhcmdzKTsKICAgIGNvbnN0IGdldFNjaGVkdWxlciA9ICgpID0+IHNjaGVkdWxlckNhY2hlLmdldChpZCkgfHwgW107CiAgICBjb25zdCBzZXRTY2hlZHVsZXIgPSAoaXRlbSkgPT4gc2NoZWR1bGVyQ2FjaGUuc2V0KGlkLCBbLi4uZ2V0U2NoZWR1bGVyKCksIGl0ZW1dKTsKICAgIHJldHVybiB7CiAgICAgIGZsdXNoLAogICAgICBhc3luYyBzY2hlZHVsZShhcmdzKSB7CiAgICAgICAgY29uc3QgcGVuZGluZ1Byb21pc2UgPSB7fTsKICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgICAgcGVuZGluZ1Byb21pc2UucmVzb2x2ZSA9IHJlc29sdmU7CiAgICAgICAgICBwZW5kaW5nUHJvbWlzZS5yZWplY3QgPSByZWplY3Q7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3Qgc3BsaXQyID0gc2hvdWxkU3BsaXRCYXRjaD8uKFsuLi5nZXRCYXRjaGVkQXJncygpLCBhcmdzXSk7CiAgICAgICAgaWYgKHNwbGl0MikKICAgICAgICAgIGV4ZWMoKTsKICAgICAgICBjb25zdCBoYXNBY3RpdmVTY2hlZHVsZXIgPSBnZXRTY2hlZHVsZXIoKS5sZW5ndGggPiAwOwogICAgICAgIGlmIChoYXNBY3RpdmVTY2hlZHVsZXIpIHsKICAgICAgICAgIHNldFNjaGVkdWxlcih7IGFyZ3MsIHBlbmRpbmdQcm9taXNlIH0pOwogICAgICAgICAgcmV0dXJuIHByb21pc2U7CiAgICAgICAgfQogICAgICAgIHNldFNjaGVkdWxlcih7IGFyZ3MsIHBlbmRpbmdQcm9taXNlIH0pOwogICAgICAgIHNldFRpbWVvdXQoZXhlYywgd2FpdDIpOwogICAgICAgIHJldHVybiBwcm9taXNlOwogICAgICB9CiAgICB9OwogIH0KICB2YXIgc2NoZWR1bGVyQ2FjaGU7CiAgdmFyIGluaXRfY3JlYXRlQmF0Y2hTY2hlZHVsZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9wcm9taXNlL2NyZWF0ZUJhdGNoU2NoZWR1bGVyLmpzIigpIHsKICAgICAgc2NoZWR1bGVyQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9jY2lwLmpzCiAgdmFyIE9mZmNoYWluTG9va3VwRXJyb3IsIE9mZmNoYWluTG9va3VwUmVzcG9uc2VNYWxmb3JtZWRFcnJvciwgT2ZmY2hhaW5Mb29rdXBTZW5kZXJNaXNtYXRjaEVycm9yOwogIHZhciBpbml0X2NjaXAgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvY2NpcC5qcyIoKSB7CiAgICAgIGluaXRfc3RyaW5naWZ5KCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X3V0aWxzMygpOwogICAgICBPZmZjaGFpbkxvb2t1cEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhbGxiYWNrU2VsZWN0b3IsIGNhdXNlLCBkYXRhLCBleHRyYURhdGEsIHNlbmRlciwgdXJscyB9KSB7CiAgICAgICAgICBzdXBlcihjYXVzZS5zaG9ydE1lc3NhZ2UgfHwgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGZldGNoaW5nIGZvciBhbiBvZmZjaGFpbiByZXN1bHQuIiwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgLi4uY2F1c2UubWV0YU1lc3NhZ2VzIHx8IFtdLAogICAgICAgICAgICAgIGNhdXNlLm1ldGFNZXNzYWdlcz8ubGVuZ3RoID8gIiIgOiBbXSwKICAgICAgICAgICAgICAiT2ZmY2hhaW4gR2F0ZXdheSBDYWxsOiIsCiAgICAgICAgICAgICAgdXJscyAmJiBbCiAgICAgICAgICAgICAgICAiICBHYXRld2F5IFVSTChzKToiLAogICAgICAgICAgICAgICAgLi4udXJscy5tYXAoKHVybCkgPT4gYCAgICAke2dldFVybCh1cmwpfWApCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICBgICBTZW5kZXI6ICR7c2VuZGVyfWAsCiAgICAgICAgICAgICAgYCAgRGF0YTogJHtkYXRhfWAsCiAgICAgICAgICAgICAgYCAgQ2FsbGJhY2sgc2VsZWN0b3I6ICR7Y2FsbGJhY2tTZWxlY3Rvcn1gLAogICAgICAgICAgICAgIGAgIEV4dHJhIGRhdGE6ICR7ZXh0cmFEYXRhfWAKICAgICAgICAgICAgXS5mbGF0KCksCiAgICAgICAgICAgIG5hbWU6ICJPZmZjaGFpbkxvb2t1cEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPZmZjaGFpbkxvb2t1cFJlc3BvbnNlTWFsZm9ybWVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgcmVzdWx0LCB1cmwgfSkgewogICAgICAgICAgc3VwZXIoIk9mZmNoYWluIGdhdGV3YXkgcmVzcG9uc2UgaXMgbWFsZm9ybWVkLiBSZXNwb25zZSBkYXRhIG11c3QgYmUgYSBoZXggdmFsdWUuIiwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgR2F0ZXdheSBVUkw6ICR7Z2V0VXJsKHVybCl9YCwKICAgICAgICAgICAgICBgUmVzcG9uc2U6ICR7c3RyaW5naWZ5KHJlc3VsdCl9YAogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiT2ZmY2hhaW5Mb29rdXBSZXNwb25zZU1hbGZvcm1lZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPZmZjaGFpbkxvb2t1cFNlbmRlck1pc21hdGNoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgc2VuZGVyLCB0byB9KSB7CiAgICAgICAgICBzdXBlcigiUmV2ZXJ0ZWQgc2VuZGVyIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggdGFyZ2V0IGNvbnRyYWN0IGFkZHJlc3MgKGB0b2ApLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgYENvbnRyYWN0IGFkZHJlc3M6ICR7dG99YCwKICAgICAgICAgICAgICBgT2ZmY2hhaW5Mb29rdXAgc2VuZGVyIGFkZHJlc3M6ICR7c2VuZGVyfWAKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbmFtZTogIk9mZmNoYWluTG9va3VwU2VuZGVyTWlzbWF0Y2hFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9jY2lwLmpzCiAgdmFyIGNjaXBfZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KGNjaXBfZXhwb3J0cywgewogICAgY2NpcFJlcXVlc3Q6ICgpID0+IGNjaXBSZXF1ZXN0LAogICAgb2ZmY2hhaW5Mb29rdXA6ICgpID0+IG9mZmNoYWluTG9va3VwLAogICAgb2ZmY2hhaW5Mb29rdXBBYmlJdGVtOiAoKSA9PiBvZmZjaGFpbkxvb2t1cEFiaUl0ZW0sCiAgICBvZmZjaGFpbkxvb2t1cFNpZ25hdHVyZTogKCkgPT4gb2ZmY2hhaW5Mb29rdXBTaWduYXR1cmUKICB9KTsKICBhc3luYyBmdW5jdGlvbiBvZmZjaGFpbkxvb2t1cChjbGllbnQsIHsgYmxvY2tOdW1iZXIsIGJsb2NrVGFnLCBkYXRhLCB0byB9KSB7CiAgICBjb25zdCB7IGFyZ3MgfSA9IGRlY29kZUVycm9yUmVzdWx0KHsKICAgICAgZGF0YSwKICAgICAgYWJpOiBbb2ZmY2hhaW5Mb29rdXBBYmlJdGVtXQogICAgfSk7CiAgICBjb25zdCBbc2VuZGVyLCB1cmxzLCBjYWxsRGF0YSwgY2FsbGJhY2tTZWxlY3RvciwgZXh0cmFEYXRhXSA9IGFyZ3M7CiAgICBjb25zdCB7IGNjaXBSZWFkIH0gPSBjbGllbnQ7CiAgICBjb25zdCBjY2lwUmVxdWVzdF8gPSBjY2lwUmVhZCAmJiB0eXBlb2YgY2NpcFJlYWQ/LnJlcXVlc3QgPT09ICJmdW5jdGlvbiIgPyBjY2lwUmVhZC5yZXF1ZXN0IDogY2NpcFJlcXVlc3Q7CiAgICB0cnkgewogICAgICBpZiAoIWlzQWRkcmVzc0VxdWFsKHRvLCBzZW5kZXIpKQogICAgICAgIHRocm93IG5ldyBPZmZjaGFpbkxvb2t1cFNlbmRlck1pc21hdGNoRXJyb3IoeyBzZW5kZXIsIHRvIH0pOwogICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjY2lwUmVxdWVzdF8oeyBkYXRhOiBjYWxsRGF0YSwgc2VuZGVyLCB1cmxzIH0pOwogICAgICBjb25zdCB7IGRhdGE6IGRhdGFfIH0gPSBhd2FpdCBjYWxsKGNsaWVudCwgewogICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgIGJsb2NrVGFnLAogICAgICAgIGRhdGE6IGNvbmNhdChbCiAgICAgICAgICBjYWxsYmFja1NlbGVjdG9yLAogICAgICAgICAgZW5jb2RlQWJpUGFyYW1ldGVycyhbeyB0eXBlOiAiYnl0ZXMiIH0sIHsgdHlwZTogImJ5dGVzIiB9XSwgW3Jlc3VsdCwgZXh0cmFEYXRhXSkKICAgICAgICBdKSwKICAgICAgICB0bwogICAgICB9KTsKICAgICAgcmV0dXJuIGRhdGFfOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIHRocm93IG5ldyBPZmZjaGFpbkxvb2t1cEVycm9yKHsKICAgICAgICBjYWxsYmFja1NlbGVjdG9yLAogICAgICAgIGNhdXNlOiBlcnIsCiAgICAgICAgZGF0YSwKICAgICAgICBleHRyYURhdGEsCiAgICAgICAgc2VuZGVyLAogICAgICAgIHVybHMKICAgICAgfSk7CiAgICB9CiAgfQogIGFzeW5jIGZ1bmN0aW9uIGNjaXBSZXF1ZXN0KHsgZGF0YSwgc2VuZGVyLCB1cmxzIH0pIHsKICAgIGxldCBlcnJvciA9IG5ldyBFcnJvcigiQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZC4iKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCB1cmwgPSB1cmxzW2ldOwogICAgICBjb25zdCBtZXRob2QgPSB1cmwuaW5jbHVkZXMoIntkYXRhfSIpID8gIkdFVCIgOiAiUE9TVCI7CiAgICAgIGNvbnN0IGJvZHkgPSBtZXRob2QgPT09ICJQT1NUIiA/IHsgZGF0YSwgc2VuZGVyIH0gOiB2b2lkIDA7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwucmVwbGFjZSgie3NlbmRlcn0iLCBzZW5kZXIpLnJlcGxhY2UoIntkYXRhfSIsIGRhdGEpLCB7CiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSwKICAgICAgICAgIG1ldGhvZAogICAgICAgIH0pOwogICAgICAgIGxldCByZXN1bHQ7CiAgICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCJDb250ZW50LVR5cGUiKT8uc3RhcnRzV2l0aCgiYXBwbGljYXRpb24vanNvbiIpKSB7CiAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKS5kYXRhOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7CiAgICAgICAgfQogICAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICAgIGVycm9yID0gbmV3IEh0dHBSZXF1ZXN0RXJyb3IoewogICAgICAgICAgICBib2R5LAogICAgICAgICAgICBkZXRhaWxzOiByZXN1bHQ/LmVycm9yID8gc3RyaW5naWZ5KHJlc3VsdC5lcnJvcikgOiByZXNwb25zZS5zdGF0dXNUZXh0LAogICAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLAogICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywKICAgICAgICAgICAgdXJsCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzSGV4KHJlc3VsdCkpIHsKICAgICAgICAgIGVycm9yID0gbmV3IE9mZmNoYWluTG9va3VwUmVzcG9uc2VNYWxmb3JtZWRFcnJvcih7CiAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgdXJsCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBlcnJvciA9IG5ldyBIdHRwUmVxdWVzdEVycm9yKHsKICAgICAgICAgIGJvZHksCiAgICAgICAgICBkZXRhaWxzOiBlcnIubWVzc2FnZSwKICAgICAgICAgIHVybAogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICB0aHJvdyBlcnJvcjsKICB9CiAgdmFyIG9mZmNoYWluTG9va3VwU2lnbmF0dXJlLCBvZmZjaGFpbkxvb2t1cEFiaUl0ZW07CiAgdmFyIGluaXRfY2NpcDIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9jY2lwLmpzIigpIHsKICAgICAgaW5pdF9jYWxsKCk7CiAgICAgIGluaXRfY2NpcCgpOwogICAgICBpbml0X3JlcXVlc3QoKTsKICAgICAgaW5pdF9kZWNvZGVFcnJvclJlc3VsdCgpOwogICAgICBpbml0X2VuY29kZUFiaVBhcmFtZXRlcnMoKTsKICAgICAgaW5pdF9pc0FkZHJlc3NFcXVhbCgpOwogICAgICBpbml0X2NvbmNhdCgpOwogICAgICBpbml0X2lzSGV4KCk7CiAgICAgIGluaXRfc3RyaW5naWZ5KCk7CiAgICAgIG9mZmNoYWluTG9va3VwU2lnbmF0dXJlID0gIjB4NTU2ZjE4MzAiOwogICAgICBvZmZjaGFpbkxvb2t1cEFiaUl0ZW0gPSB7CiAgICAgICAgbmFtZTogIk9mZmNoYWluTG9va3VwIiwKICAgICAgICB0eXBlOiAiZXJyb3IiLAogICAgICAgIGlucHV0czogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAidXJscyIsCiAgICAgICAgICAgIHR5cGU6ICJzdHJpbmdbXSIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJjYWxsRGF0YSIsCiAgICAgICAgICAgIHR5cGU6ICJieXRlcyIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJjYWxsYmFja0Z1bmN0aW9uIiwKICAgICAgICAgICAgdHlwZTogImJ5dGVzNCIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJleHRyYURhdGEiLAogICAgICAgICAgICB0eXBlOiAiYnl0ZXMiCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2NhbGwuanMKICBhc3luYyBmdW5jdGlvbiBjYWxsKGNsaWVudCwgYXJncykgewogICAgY29uc3QgeyBhY2NvdW50OiBhY2NvdW50XyA9IGNsaWVudC5hY2NvdW50LCBiYXRjaCA9IEJvb2xlYW4oY2xpZW50LmJhdGNoPy5tdWx0aWNhbGwpLCBibG9ja051bWJlciwgYmxvY2tUYWcgPSAibGF0ZXN0IiwgYWNjZXNzTGlzdCwgYmxvYnMsIGNvZGUsIGRhdGE6IGRhdGFfLCBmYWN0b3J5LCBmYWN0b3J5RGF0YSwgZ2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyQmxvYkdhcywgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbm9uY2UsIHRvLCB2YWx1ZSwgc3RhdGVPdmVycmlkZSwgLi4ucmVzdCB9ID0gYXJnczsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICBpZiAoY29kZSAmJiAoZmFjdG9yeSB8fCBmYWN0b3J5RGF0YSkpCiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJDYW5ub3QgcHJvdmlkZSBib3RoIGBjb2RlYCAmIGBmYWN0b3J5YC9gZmFjdG9yeURhdGFgIGFzIHBhcmFtZXRlcnMuIik7CiAgICBpZiAoY29kZSAmJiB0bykKICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoIkNhbm5vdCBwcm92aWRlIGJvdGggYGNvZGVgICYgYHRvYCBhcyBwYXJhbWV0ZXJzLiIpOwogICAgY29uc3QgZGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZSA9IGNvZGUgJiYgZGF0YV87CiAgICBjb25zdCBkZXBsb3lsZXNzQ2FsbFZpYUZhY3RvcnkgPSBmYWN0b3J5ICYmIGZhY3RvcnlEYXRhICYmIHRvICYmIGRhdGFfOwogICAgY29uc3QgZGVwbG95bGVzc0NhbGwgPSBkZXBsb3lsZXNzQ2FsbFZpYUJ5dGVjb2RlIHx8IGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeTsKICAgIGNvbnN0IGRhdGEgPSAoKCkgPT4gewogICAgICBpZiAoZGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZSkKICAgICAgICByZXR1cm4gdG9EZXBsb3lsZXNzQ2FsbFZpYUJ5dGVjb2RlRGF0YSh7CiAgICAgICAgICBjb2RlLAogICAgICAgICAgZGF0YTogZGF0YV8KICAgICAgICB9KTsKICAgICAgaWYgKGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeSkKICAgICAgICByZXR1cm4gdG9EZXBsb3lsZXNzQ2FsbFZpYUZhY3RvcnlEYXRhKHsKICAgICAgICAgIGRhdGE6IGRhdGFfLAogICAgICAgICAgZmFjdG9yeSwKICAgICAgICAgIGZhY3RvcnlEYXRhLAogICAgICAgICAgdG8KICAgICAgICB9KTsKICAgICAgcmV0dXJuIGRhdGFfOwogICAgfSkoKTsKICAgIHRyeSB7CiAgICAgIGFzc2VydFJlcXVlc3QoYXJncyk7CiAgICAgIGNvbnN0IGJsb2NrTnVtYmVySGV4ID0gYmxvY2tOdW1iZXIgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWc7CiAgICAgIGNvbnN0IHJwY1N0YXRlT3ZlcnJpZGUgPSBzZXJpYWxpemVTdGF0ZU92ZXJyaWRlKHN0YXRlT3ZlcnJpZGUpOwogICAgICBjb25zdCBjaGFpbkZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb25SZXF1ZXN0Py5mb3JtYXQ7CiAgICAgIGNvbnN0IGZvcm1hdCA9IGNoYWluRm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgICAgY29uc3QgcmVxdWVzdCA9IGZvcm1hdCh7CiAgICAgICAgLy8gUGljayBvdXQgZXh0cmEgZGF0YSB0aGF0IG1pZ2h0IGV4aXN0IG9uIHRoZSBjaGFpbidzIHRyYW5zYWN0aW9uIHJlcXVlc3QgdHlwZS4KICAgICAgICAuLi5leHRyYWN0KHJlc3QsIHsgZm9ybWF0OiBjaGFpbkZvcm1hdCB9KSwKICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgIGFjY2Vzc0xpc3QsCiAgICAgICAgYmxvYnMsCiAgICAgICAgZGF0YSwKICAgICAgICBnYXMsCiAgICAgICAgZ2FzUHJpY2UsCiAgICAgICAgbWF4RmVlUGVyQmxvYkdhcywKICAgICAgICBtYXhGZWVQZXJHYXMsCiAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXMsCiAgICAgICAgbm9uY2UsCiAgICAgICAgdG86IGRlcGxveWxlc3NDYWxsID8gdm9pZCAwIDogdG8sCiAgICAgICAgdmFsdWUKICAgICAgfSk7CiAgICAgIGlmIChiYXRjaCAmJiBzaG91bGRQZXJmb3JtTXVsdGljYWxsKHsgcmVxdWVzdCB9KSAmJiAhcnBjU3RhdGVPdmVycmlkZSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gYXdhaXQgc2NoZWR1bGVNdWx0aWNhbGwoY2xpZW50LCB7CiAgICAgICAgICAgIC4uLnJlcXVlc3QsCiAgICAgICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgICAgICBibG9ja1RhZwogICAgICAgICAgfSk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBDbGllbnRDaGFpbk5vdENvbmZpZ3VyZWRFcnJvcikgJiYgIShlcnIgaW5zdGFuY2VvZiBDaGFpbkRvZXNOb3RTdXBwb3J0Q29udHJhY3QpKQogICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICAgIG1ldGhvZDogImV0aF9jYWxsIiwKICAgICAgICBwYXJhbXM6IHJwY1N0YXRlT3ZlcnJpZGUgPyBbCiAgICAgICAgICByZXF1ZXN0LAogICAgICAgICAgYmxvY2ssCiAgICAgICAgICBycGNTdGF0ZU92ZXJyaWRlCiAgICAgICAgXSA6IFtyZXF1ZXN0LCBibG9ja10KICAgICAgfSk7CiAgICAgIGlmIChyZXNwb25zZSA9PT0gIjB4IikKICAgICAgICByZXR1cm4geyBkYXRhOiB2b2lkIDAgfTsKICAgICAgcmV0dXJuIHsgZGF0YTogcmVzcG9uc2UgfTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zdCBkYXRhMiA9IGdldFJldmVydEVycm9yRGF0YShlcnIpOwogICAgICBjb25zdCB7IG9mZmNoYWluTG9va3VwOiBvZmZjaGFpbkxvb2t1cDIsIG9mZmNoYWluTG9va3VwU2lnbmF0dXJlOiBvZmZjaGFpbkxvb2t1cFNpZ25hdHVyZTIgfSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gKGluaXRfY2NpcDIoKSwgY2NpcF9leHBvcnRzKSk7CiAgICAgIGlmIChjbGllbnQuY2NpcFJlYWQgIT09IGZhbHNlICYmIGRhdGEyPy5zbGljZSgwLCAxMCkgPT09IG9mZmNoYWluTG9va3VwU2lnbmF0dXJlMiAmJiB0bykKICAgICAgICByZXR1cm4geyBkYXRhOiBhd2FpdCBvZmZjaGFpbkxvb2t1cDIoY2xpZW50LCB7IGRhdGE6IGRhdGEyLCB0byB9KSB9OwogICAgICBpZiAoZGVwbG95bGVzc0NhbGwgJiYgZGF0YTI/LnNsaWNlKDAsIDEwKSA9PT0gIjB4MTAxYmI5OGQiKQogICAgICAgIHRocm93IG5ldyBDb3VudGVyZmFjdHVhbERlcGxveW1lbnRGYWlsZWRFcnJvcih7IGZhY3RvcnkgfSk7CiAgICAgIHRocm93IGdldENhbGxFcnJvcihlcnIsIHsKICAgICAgICAuLi5hcmdzLAogICAgICAgIGFjY291bnQsCiAgICAgICAgY2hhaW46IGNsaWVudC5jaGFpbgogICAgICB9KTsKICAgIH0KICB9CiAgZnVuY3Rpb24gc2hvdWxkUGVyZm9ybU11bHRpY2FsbCh7IHJlcXVlc3QgfSkgewogICAgY29uc3QgeyBkYXRhLCB0bywgLi4ucmVxdWVzdF8gfSA9IHJlcXVlc3Q7CiAgICBpZiAoIWRhdGEpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChkYXRhLnN0YXJ0c1dpdGgoYWdncmVnYXRlM1NpZ25hdHVyZSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICghdG8pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChPYmplY3QudmFsdWVzKHJlcXVlc3RfKS5maWx0ZXIoKHgpID0+IHR5cGVvZiB4ICE9PSAidW5kZWZpbmVkIikubGVuZ3RoID4gMCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgfQogIGFzeW5jIGZ1bmN0aW9uIHNjaGVkdWxlTXVsdGljYWxsKGNsaWVudCwgYXJncykgewogICAgY29uc3QgeyBiYXRjaFNpemUgPSAxMDI0LCB3YWl0OiB3YWl0MiA9IDAgfSA9IHR5cGVvZiBjbGllbnQuYmF0Y2g/Lm11bHRpY2FsbCA9PT0gIm9iamVjdCIgPyBjbGllbnQuYmF0Y2gubXVsdGljYWxsIDoge307CiAgICBjb25zdCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZyA9ICJsYXRlc3QiLCBkYXRhLCBtdWx0aWNhbGxBZGRyZXNzOiBtdWx0aWNhbGxBZGRyZXNzXywgdG8gfSA9IGFyZ3M7CiAgICBsZXQgbXVsdGljYWxsQWRkcmVzcyA9IG11bHRpY2FsbEFkZHJlc3NfOwogICAgaWYgKCFtdWx0aWNhbGxBZGRyZXNzKSB7CiAgICAgIGlmICghY2xpZW50LmNoYWluKQogICAgICAgIHRocm93IG5ldyBDbGllbnRDaGFpbk5vdENvbmZpZ3VyZWRFcnJvcigpOwogICAgICBtdWx0aWNhbGxBZGRyZXNzID0gZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoewogICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgIGNoYWluOiBjbGllbnQuY2hhaW4sCiAgICAgICAgY29udHJhY3Q6ICJtdWx0aWNhbGwzIgogICAgICB9KTsKICAgIH0KICAgIGNvbnN0IGJsb2NrTnVtYmVySGV4ID0gYmxvY2tOdW1iZXIgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICBjb25zdCBibG9jayA9IGJsb2NrTnVtYmVySGV4IHx8IGJsb2NrVGFnOwogICAgY29uc3QgeyBzY2hlZHVsZSB9ID0gY3JlYXRlQmF0Y2hTY2hlZHVsZXIoewogICAgICBpZDogYCR7Y2xpZW50LnVpZH0uJHtibG9ja31gLAogICAgICB3YWl0OiB3YWl0MiwKICAgICAgc2hvdWxkU3BsaXRCYXRjaChhcmdzMikgewogICAgICAgIGNvbnN0IHNpemUzID0gYXJnczIucmVkdWNlKChzaXplNCwgeyBkYXRhOiBkYXRhMiB9KSA9PiBzaXplNCArIChkYXRhMi5sZW5ndGggLSAyKSwgMCk7CiAgICAgICAgcmV0dXJuIHNpemUzID4gYmF0Y2hTaXplICogMjsKICAgICAgfSwKICAgICAgZm46IGFzeW5jIChyZXF1ZXN0cykgPT4gewogICAgICAgIGNvbnN0IGNhbGxzID0gcmVxdWVzdHMubWFwKChyZXF1ZXN0KSA9PiAoewogICAgICAgICAgYWxsb3dGYWlsdXJlOiB0cnVlLAogICAgICAgICAgY2FsbERhdGE6IHJlcXVlc3QuZGF0YSwKICAgICAgICAgIHRhcmdldDogcmVxdWVzdC50bwogICAgICAgIH0pKTsKICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7CiAgICAgICAgICBhYmk6IG11bHRpY2FsbDNBYmksCiAgICAgICAgICBhcmdzOiBbY2FsbHNdLAogICAgICAgICAgZnVuY3Rpb25OYW1lOiAiYWdncmVnYXRlMyIKICAgICAgICB9KTsKICAgICAgICBjb25zdCBkYXRhMiA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICAgIG1ldGhvZDogImV0aF9jYWxsIiwKICAgICAgICAgIHBhcmFtczogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZGF0YTogY2FsbGRhdGEsCiAgICAgICAgICAgICAgdG86IG11bHRpY2FsbEFkZHJlc3MKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYmxvY2sKICAgICAgICAgIF0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZGVjb2RlRnVuY3Rpb25SZXN1bHQoewogICAgICAgICAgYWJpOiBtdWx0aWNhbGwzQWJpLAogICAgICAgICAgYXJnczogW2NhbGxzXSwKICAgICAgICAgIGZ1bmN0aW9uTmFtZTogImFnZ3JlZ2F0ZTMiLAogICAgICAgICAgZGF0YTogZGF0YTIgfHwgIjB4IgogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IFt7IHJldHVybkRhdGEsIHN1Y2Nlc3MgfV0gPSBhd2FpdCBzY2hlZHVsZSh7IGRhdGEsIHRvIH0pOwogICAgaWYgKCFzdWNjZXNzKQogICAgICB0aHJvdyBuZXcgUmF3Q29udHJhY3RFcnJvcih7IGRhdGE6IHJldHVybkRhdGEgfSk7CiAgICBpZiAocmV0dXJuRGF0YSA9PT0gIjB4IikKICAgICAgcmV0dXJuIHsgZGF0YTogdm9pZCAwIH07CiAgICByZXR1cm4geyBkYXRhOiByZXR1cm5EYXRhIH07CiAgfQogIGZ1bmN0aW9uIHRvRGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZURhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBjb2RlLCBkYXRhIH0gPSBwYXJhbWV0ZXJzOwogICAgcmV0dXJuIGVuY29kZURlcGxveURhdGEoewogICAgICBhYmk6IHBhcnNlQWJpKFsiY29uc3RydWN0b3IoYnl0ZXMsIGJ5dGVzKSJdKSwKICAgICAgYnl0ZWNvZGU6IGRlcGxveWxlc3NDYWxsVmlhQnl0ZWNvZGVCeXRlY29kZSwKICAgICAgYXJnczogW2NvZGUsIGRhdGFdCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gdG9EZXBsb3lsZXNzQ2FsbFZpYUZhY3RvcnlEYXRhKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgZGF0YSwgZmFjdG9yeSwgZmFjdG9yeURhdGEsIHRvIH0gPSBwYXJhbWV0ZXJzOwogICAgcmV0dXJuIGVuY29kZURlcGxveURhdGEoewogICAgICBhYmk6IHBhcnNlQWJpKFsiY29uc3RydWN0b3IoYWRkcmVzcywgYnl0ZXMsIGFkZHJlc3MsIGJ5dGVzKSJdKSwKICAgICAgYnl0ZWNvZGU6IGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeUJ5dGVjb2RlLAogICAgICBhcmdzOiBbdG8sIGRhdGEsIGZhY3RvcnksIGZhY3RvcnlEYXRhXQogICAgfSk7CiAgfQogIGZ1bmN0aW9uIGdldFJldmVydEVycm9yRGF0YShlcnIpIHsKICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEJhc2VFcnJvcjIpKQogICAgICByZXR1cm4gdm9pZCAwOwogICAgY29uc3QgZXJyb3IgPSBlcnIud2FsaygpOwogICAgcmV0dXJuIHR5cGVvZiBlcnJvcj8uZGF0YSA9PT0gIm9iamVjdCIgPyBlcnJvci5kYXRhPy5kYXRhIDogZXJyb3IuZGF0YTsKICB9CiAgdmFyIGluaXRfY2FsbCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2NhbGwuanMiKCkgewogICAgICBpbml0X2V4cG9ydHMoKTsKICAgICAgaW5pdF9wYXJzZUFjY291bnQoKTsKICAgICAgaW5pdF9hYmlzKCk7CiAgICAgIGluaXRfY29udHJhY3QyKCk7CiAgICAgIGluaXRfY29udHJhY3RzKCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X2NoYWluKCk7CiAgICAgIGluaXRfY29udHJhY3QoKTsKICAgICAgaW5pdF9kZWNvZGVGdW5jdGlvblJlc3VsdCgpOwogICAgICBpbml0X2VuY29kZURlcGxveURhdGEoKTsKICAgICAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICAgICAgaW5pdF9nZXRDaGFpbkNvbnRyYWN0QWRkcmVzcygpOwogICAgICBpbml0X3RvSGV4KCk7CiAgICAgIGluaXRfZ2V0Q2FsbEVycm9yKCk7CiAgICAgIGluaXRfZXh0cmFjdCgpOwogICAgICBpbml0X3RyYW5zYWN0aW9uUmVxdWVzdCgpOwogICAgICBpbml0X2NyZWF0ZUJhdGNoU2NoZWR1bGVyKCk7CiAgICAgIGluaXRfc3RhdGVPdmVycmlkZTIoKTsKICAgICAgaW5pdF9hc3NlcnRSZXF1ZXN0KCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9pc293cy9fZXNtL3V0aWxzLmpzCiAgZnVuY3Rpb24gZ2V0TmF0aXZlV2ViU29ja2V0KCkgewogICAgaWYgKHR5cGVvZiBXZWJTb2NrZXQgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gV2ViU29ja2V0OwogICAgaWYgKHR5cGVvZiBnbG9iYWwuV2ViU29ja2V0ICE9PSAidW5kZWZpbmVkIikKICAgICAgcmV0dXJuIGdsb2JhbC5XZWJTb2NrZXQ7CiAgICBpZiAodHlwZW9mIHdpbmRvdy5XZWJTb2NrZXQgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gd2luZG93LldlYlNvY2tldDsKICAgIGlmICh0eXBlb2Ygc2VsZi5XZWJTb2NrZXQgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gc2VsZi5XZWJTb2NrZXQ7CiAgICB0aHJvdyBuZXcgRXJyb3IoImBXZWJTb2NrZXRgIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudCIpOwogIH0KICB2YXIgaW5pdF91dGlsczUgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2lzb3dzL19lc20vdXRpbHMuanMiKCkgewogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvaXNvd3MvX2VzbS9uYXRpdmUuanMKICB2YXIgbmF0aXZlX2V4cG9ydHMgPSB7fTsKICBfX2V4cG9ydChuYXRpdmVfZXhwb3J0cywgewogICAgV2ViU29ja2V0OiAoKSA9PiBXZWJTb2NrZXQyCiAgfSk7CiAgdmFyIFdlYlNvY2tldDI7CiAgdmFyIGluaXRfbmF0aXZlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9pc293cy9fZXNtL25hdGl2ZS5qcyIoKSB7CiAgICAgIGluaXRfdXRpbHM1KCk7CiAgICAgIFdlYlNvY2tldDIgPSBnZXROYXRpdmVXZWJTb2NrZXQoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9pbmRleC5qcwogIHZhciBlc21fZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KGVzbV9leHBvcnRzLCB7CiAgICBBYmlDb25zdHJ1Y3Rvck5vdEZvdW5kRXJyb3I6ICgpID0+IEFiaUNvbnN0cnVjdG9yTm90Rm91bmRFcnJvciwKICAgIEFiaUNvbnN0cnVjdG9yUGFyYW1zTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yLAogICAgQWJpRGVjb2RpbmdEYXRhU2l6ZUludmFsaWRFcnJvcjogKCkgPT4gQWJpRGVjb2RpbmdEYXRhU2l6ZUludmFsaWRFcnJvciwKICAgIEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yOiAoKSA9PiBBYmlEZWNvZGluZ0RhdGFTaXplVG9vU21hbGxFcnJvciwKICAgIEFiaURlY29kaW5nWmVyb0RhdGFFcnJvcjogKCkgPT4gQWJpRGVjb2RpbmdaZXJvRGF0YUVycm9yLAogICAgQWJpRW5jb2RpbmdBcnJheUxlbmd0aE1pc21hdGNoRXJyb3I6ICgpID0+IEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yLAogICAgQWJpRW5jb2RpbmdCeXRlc1NpemVNaXNtYXRjaEVycm9yOiAoKSA9PiBBYmlFbmNvZGluZ0J5dGVzU2l6ZU1pc21hdGNoRXJyb3IsCiAgICBBYmlFbmNvZGluZ0xlbmd0aE1pc21hdGNoRXJyb3I6ICgpID0+IEFiaUVuY29kaW5nTGVuZ3RoTWlzbWF0Y2hFcnJvciwKICAgIEFiaUVycm9ySW5wdXRzTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yLAogICAgQWJpRXJyb3JOb3RGb3VuZEVycm9yOiAoKSA9PiBBYmlFcnJvck5vdEZvdW5kRXJyb3IsCiAgICBBYmlFcnJvclNpZ25hdHVyZU5vdEZvdW5kRXJyb3I6ICgpID0+IEFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvciwKICAgIEFiaUV2ZW50Tm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRXZlbnROb3RGb3VuZEVycm9yLAogICAgQWJpRXZlbnRTaWduYXR1cmVFbXB0eVRvcGljc0Vycm9yOiAoKSA9PiBBYmlFdmVudFNpZ25hdHVyZUVtcHR5VG9waWNzRXJyb3IsCiAgICBBYmlFdmVudFNpZ25hdHVyZU5vdEZvdW5kRXJyb3I6ICgpID0+IEFiaUV2ZW50U2lnbmF0dXJlTm90Rm91bmRFcnJvciwKICAgIEFiaUZ1bmN0aW9uTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yLAogICAgQWJpRnVuY3Rpb25PdXRwdXRzTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRnVuY3Rpb25PdXRwdXRzTm90Rm91bmRFcnJvciwKICAgIEFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRnVuY3Rpb25TaWduYXR1cmVOb3RGb3VuZEVycm9yLAogICAgQWNjb3VudFN0YXRlQ29uZmxpY3RFcnJvcjogKCkgPT4gQWNjb3VudFN0YXRlQ29uZmxpY3RFcnJvciwKICAgIEJhc2VFcnJvcjogKCkgPT4gQmFzZUVycm9yMiwKICAgIEJhc2VGZWVTY2FsYXJFcnJvcjogKCkgPT4gQmFzZUZlZVNjYWxhckVycm9yLAogICAgQmxvY2tOb3RGb3VuZEVycm9yOiAoKSA9PiBCbG9ja05vdEZvdW5kRXJyb3IsCiAgICBCeXRlc1NpemVNaXNtYXRjaEVycm9yOiAoKSA9PiBCeXRlc1NpemVNaXNtYXRjaEVycm9yLAogICAgQ2FsbEV4ZWN1dGlvbkVycm9yOiAoKSA9PiBDYWxsRXhlY3V0aW9uRXJyb3IsCiAgICBDaGFpbkRpc2Nvbm5lY3RlZEVycm9yOiAoKSA9PiBDaGFpbkRpc2Nvbm5lY3RlZEVycm9yLAogICAgQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0OiAoKSA9PiBDaGFpbkRvZXNOb3RTdXBwb3J0Q29udHJhY3QsCiAgICBDaGFpbk1pc21hdGNoRXJyb3I6ICgpID0+IENoYWluTWlzbWF0Y2hFcnJvciwKICAgIENoYWluTm90Rm91bmRFcnJvcjogKCkgPT4gQ2hhaW5Ob3RGb3VuZEVycm9yLAogICAgQ2lyY3VsYXJSZWZlcmVuY2VFcnJvcjogKCkgPT4gQ2lyY3VsYXJSZWZlcmVuY2VFcnJvciwKICAgIENsaWVudENoYWluTm90Q29uZmlndXJlZEVycm9yOiAoKSA9PiBDbGllbnRDaGFpbk5vdENvbmZpZ3VyZWRFcnJvciwKICAgIENvbnRyYWN0RnVuY3Rpb25FeGVjdXRpb25FcnJvcjogKCkgPT4gQ29udHJhY3RGdW5jdGlvbkV4ZWN1dGlvbkVycm9yLAogICAgQ29udHJhY3RGdW5jdGlvblJldmVydGVkRXJyb3I6ICgpID0+IENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yLAogICAgQ29udHJhY3RGdW5jdGlvblplcm9EYXRhRXJyb3I6ICgpID0+IENvbnRyYWN0RnVuY3Rpb25aZXJvRGF0YUVycm9yLAogICAgQ291bnRlcmZhY3R1YWxEZXBsb3ltZW50RmFpbGVkRXJyb3I6ICgpID0+IENvdW50ZXJmYWN0dWFsRGVwbG95bWVudEZhaWxlZEVycm9yLAogICAgRGVjb2RlTG9nRGF0YU1pc21hdGNoOiAoKSA9PiBEZWNvZGVMb2dEYXRhTWlzbWF0Y2gsCiAgICBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaDogKCkgPT4gRGVjb2RlTG9nVG9waWNzTWlzbWF0Y2gsCiAgICBFSVAxMTkzUHJvdmlkZXJScGNFcnJvcjogKCkgPT4gUHJvdmlkZXJScGNFcnJvcjIsCiAgICBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yOiAoKSA9PiBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yLAogICAgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yOiAoKSA9PiBFbnNBdmF0YXJJbnZhbGlkTmZ0VXJpRXJyb3IsCiAgICBFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yOiAoKSA9PiBFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yLAogICAgRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yOiAoKSA9PiBFbnNBdmF0YXJVcmlSZXNvbHV0aW9uRXJyb3IsCiAgICBFc3RpbWF0ZUdhc0V4ZWN1dGlvbkVycm9yOiAoKSA9PiBFc3RpbWF0ZUdhc0V4ZWN1dGlvbkVycm9yLAogICAgRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvcjogKCkgPT4gRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvciwKICAgIEZlZUNhcFRvb0hpZ2hFcnJvcjogKCkgPT4gRmVlQ2FwVG9vSGlnaEVycm9yLAogICAgRmVlQ2FwVG9vTG93RXJyb3I6ICgpID0+IEZlZUNhcFRvb0xvd0Vycm9yLAogICAgRmVlQ29uZmxpY3RFcnJvcjogKCkgPT4gRmVlQ29uZmxpY3RFcnJvciwKICAgIEZpbHRlclR5cGVOb3RTdXBwb3J0ZWRFcnJvcjogKCkgPT4gRmlsdGVyVHlwZU5vdFN1cHBvcnRlZEVycm9yLAogICAgSHR0cFJlcXVlc3RFcnJvcjogKCkgPT4gSHR0cFJlcXVlc3RFcnJvciwKICAgIEluc3VmZmljaWVudEZ1bmRzRXJyb3I6ICgpID0+IEluc3VmZmljaWVudEZ1bmRzRXJyb3IsCiAgICBJbnRlZ2VyT3V0T2ZSYW5nZUVycm9yOiAoKSA9PiBJbnRlZ2VyT3V0T2ZSYW5nZUVycm9yLAogICAgSW50ZXJuYWxScGNFcnJvcjogKCkgPT4gSW50ZXJuYWxScGNFcnJvciwKICAgIEludHJpbnNpY0dhc1Rvb0hpZ2hFcnJvcjogKCkgPT4gSW50cmluc2ljR2FzVG9vSGlnaEVycm9yLAogICAgSW50cmluc2ljR2FzVG9vTG93RXJyb3I6ICgpID0+IEludHJpbnNpY0dhc1Rvb0xvd0Vycm9yLAogICAgSW52YWxpZEFiaURlY29kaW5nVHlwZUVycm9yOiAoKSA9PiBJbnZhbGlkQWJpRGVjb2RpbmdUeXBlRXJyb3IsCiAgICBJbnZhbGlkQWJpRW5jb2RpbmdUeXBlRXJyb3I6ICgpID0+IEludmFsaWRBYmlFbmNvZGluZ1R5cGVFcnJvciwKICAgIEludmFsaWRBYmlJdGVtRXJyb3I6ICgpID0+IEludmFsaWRBYmlJdGVtRXJyb3IsCiAgICBJbnZhbGlkQWJpUGFyYW1ldGVyRXJyb3I6ICgpID0+IEludmFsaWRBYmlQYXJhbWV0ZXJFcnJvciwKICAgIEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3I6ICgpID0+IEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3IsCiAgICBJbnZhbGlkQWJpVHlwZVBhcmFtZXRlckVycm9yOiAoKSA9PiBJbnZhbGlkQWJpVHlwZVBhcmFtZXRlckVycm9yLAogICAgSW52YWxpZEFkZHJlc3NFcnJvcjogKCkgPT4gSW52YWxpZEFkZHJlc3NFcnJvciwKICAgIEludmFsaWRBcnJheUVycm9yOiAoKSA9PiBJbnZhbGlkQXJyYXlFcnJvciwKICAgIEludmFsaWRCeXRlc0Jvb2xlYW5FcnJvcjogKCkgPT4gSW52YWxpZEJ5dGVzQm9vbGVhbkVycm9yLAogICAgSW52YWxpZENoYWluSWRFcnJvcjogKCkgPT4gSW52YWxpZENoYWluSWRFcnJvciwKICAgIEludmFsaWREZWZpbml0aW9uVHlwZUVycm9yOiAoKSA9PiBJbnZhbGlkRGVmaW5pdGlvblR5cGVFcnJvciwKICAgIEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3I6ICgpID0+IEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3IsCiAgICBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yOiAoKSA9PiBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yLAogICAgSW52YWxpZEhleFZhbHVlRXJyb3I6ICgpID0+IEludmFsaWRIZXhWYWx1ZUVycm9yLAogICAgSW52YWxpZElucHV0UnBjRXJyb3I6ICgpID0+IEludmFsaWRJbnB1dFJwY0Vycm9yLAogICAgSW52YWxpZExlZ2FjeVZFcnJvcjogKCkgPT4gSW52YWxpZExlZ2FjeVZFcnJvciwKICAgIEludmFsaWRNb2RpZmllckVycm9yOiAoKSA9PiBJbnZhbGlkTW9kaWZpZXJFcnJvciwKICAgIEludmFsaWRQYXJhbWV0ZXJFcnJvcjogKCkgPT4gSW52YWxpZFBhcmFtZXRlckVycm9yLAogICAgSW52YWxpZFBhcmFtc1JwY0Vycm9yOiAoKSA9PiBJbnZhbGlkUGFyYW1zUnBjRXJyb3IsCiAgICBJbnZhbGlkUGFyZW50aGVzaXNFcnJvcjogKCkgPT4gSW52YWxpZFBhcmVudGhlc2lzRXJyb3IsCiAgICBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yOiAoKSA9PiBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yLAogICAgSW52YWxpZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uRXJyb3I6ICgpID0+IEludmFsaWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbkVycm9yLAogICAgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yOiAoKSA9PiBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uRXJyb3IsCiAgICBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uVHlwZUVycm9yOiAoKSA9PiBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uVHlwZUVycm9yLAogICAgSW52YWxpZFNpZ25hdHVyZUVycm9yOiAoKSA9PiBJbnZhbGlkU2lnbmF0dXJlRXJyb3IsCiAgICBJbnZhbGlkU3RvcmFnZUtleVNpemVFcnJvcjogKCkgPT4gSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IsCiAgICBJbnZhbGlkU3RydWN0U2lnbmF0dXJlRXJyb3I6ICgpID0+IEludmFsaWRTdHJ1Y3RTaWduYXR1cmVFcnJvciwKICAgIEpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvcjogKCkgPT4gSnNvblJwY1ZlcnNpb25VbnN1cHBvcnRlZEVycm9yLAogICAgTGltaXRFeGNlZWRlZFJwY0Vycm9yOiAoKSA9PiBMaW1pdEV4Y2VlZGVkUnBjRXJyb3IsCiAgICBNYXhGZWVQZXJHYXNUb29Mb3dFcnJvcjogKCkgPT4gTWF4RmVlUGVyR2FzVG9vTG93RXJyb3IsCiAgICBNZXRob2ROb3RGb3VuZFJwY0Vycm9yOiAoKSA9PiBNZXRob2ROb3RGb3VuZFJwY0Vycm9yLAogICAgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3I6ICgpID0+IE1ldGhvZE5vdFN1cHBvcnRlZFJwY0Vycm9yLAogICAgTm9uY2VNYXhWYWx1ZUVycm9yOiAoKSA9PiBOb25jZU1heFZhbHVlRXJyb3IsCiAgICBOb25jZVRvb0hpZ2hFcnJvcjogKCkgPT4gTm9uY2VUb29IaWdoRXJyb3IsCiAgICBOb25jZVRvb0xvd0Vycm9yOiAoKSA9PiBOb25jZVRvb0xvd0Vycm9yLAogICAgUGFyc2VScGNFcnJvcjogKCkgPT4gUGFyc2VScGNFcnJvciwKICAgIFByb3ZpZGVyRGlzY29ubmVjdGVkRXJyb3I6ICgpID0+IFByb3ZpZGVyRGlzY29ubmVjdGVkRXJyb3IsCiAgICBQcm92aWRlclJwY0Vycm9yOiAoKSA9PiBQcm92aWRlclJwY0Vycm9yLAogICAgUmF3Q29udHJhY3RFcnJvcjogKCkgPT4gUmF3Q29udHJhY3RFcnJvciwKICAgIFJlc291cmNlTm90Rm91bmRScGNFcnJvcjogKCkgPT4gUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yLAogICAgUmVzb3VyY2VVbmF2YWlsYWJsZVJwY0Vycm9yOiAoKSA9PiBSZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IsCiAgICBScGNFcnJvcjogKCkgPT4gUnBjRXJyb3IsCiAgICBScGNSZXF1ZXN0RXJyb3I6ICgpID0+IFJwY1JlcXVlc3RFcnJvciwKICAgIFNpemVFeGNlZWRzUGFkZGluZ1NpemVFcnJvcjogKCkgPT4gU2l6ZUV4Y2VlZHNQYWRkaW5nU2l6ZUVycm9yLAogICAgU2l6ZU92ZXJmbG93RXJyb3I6ICgpID0+IFNpemVPdmVyZmxvd0Vycm9yLAogICAgU2xpY2VPZmZzZXRPdXRPZkJvdW5kc0Vycm9yOiAoKSA9PiBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IsCiAgICBTb2NrZXRDbG9zZWRFcnJvcjogKCkgPT4gU29ja2V0Q2xvc2VkRXJyb3IsCiAgICBTb2xpZGl0eVByb3RlY3RlZEtleXdvcmRFcnJvcjogKCkgPT4gU29saWRpdHlQcm90ZWN0ZWRLZXl3b3JkRXJyb3IsCiAgICBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yOiAoKSA9PiBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yLAogICAgU3dpdGNoQ2hhaW5FcnJvcjogKCkgPT4gU3dpdGNoQ2hhaW5FcnJvciwKICAgIFRpbWVvdXRFcnJvcjogKCkgPT4gVGltZW91dEVycm9yLAogICAgVGlwQWJvdmVGZWVDYXBFcnJvcjogKCkgPT4gVGlwQWJvdmVGZWVDYXBFcnJvciwKICAgIFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IsCiAgICBUcmFuc2FjdGlvbk5vdEZvdW5kRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uTm90Rm91bmRFcnJvciwKICAgIFRyYW5zYWN0aW9uUmVjZWlwdE5vdEZvdW5kRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uUmVjZWlwdE5vdEZvdW5kRXJyb3IsCiAgICBUcmFuc2FjdGlvblJlamVjdGVkUnBjRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvciwKICAgIFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yOiAoKSA9PiBUcmFuc2FjdGlvblR5cGVOb3RTdXBwb3J0ZWRFcnJvciwKICAgIFVuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3I6ICgpID0+IFVuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IsCiAgICBVbmtub3duTm9kZUVycm9yOiAoKSA9PiBVbmtub3duTm9kZUVycm9yLAogICAgVW5rbm93blJwY0Vycm9yOiAoKSA9PiBVbmtub3duUnBjRXJyb3IsCiAgICBVbmtub3duU2lnbmF0dXJlRXJyb3I6ICgpID0+IFVua25vd25TaWduYXR1cmVFcnJvciwKICAgIFVua25vd25UeXBlRXJyb3I6ICgpID0+IFVua25vd25UeXBlRXJyb3IsCiAgICBVbnN1cHBvcnRlZFBhY2tlZEFiaVR5cGU6ICgpID0+IFVuc3VwcG9ydGVkUGFja2VkQWJpVHlwZSwKICAgIFVuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvcjogKCkgPT4gVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLAogICAgVXJsUmVxdWlyZWRFcnJvcjogKCkgPT4gVXJsUmVxdWlyZWRFcnJvciwKICAgIFVzZXJSZWplY3RlZFJlcXVlc3RFcnJvcjogKCkgPT4gVXNlclJlamVjdGVkUmVxdWVzdEVycm9yLAogICAgV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvcjogKCkgPT4gV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvciwKICAgIFdlYlNvY2tldFJlcXVlc3RFcnJvcjogKCkgPT4gV2ViU29ja2V0UmVxdWVzdEVycm9yLAogICAgYXNzZXJ0Q3VycmVudENoYWluOiAoKSA9PiBhc3NlcnRDdXJyZW50Q2hhaW4sCiAgICBhc3NlcnRSZXF1ZXN0OiAoKSA9PiBhc3NlcnRSZXF1ZXN0LAogICAgYXNzZXJ0VHJhbnNhY3Rpb25FSVAxNTU5OiAoKSA9PiBhc3NlcnRUcmFuc2FjdGlvbkVJUDE1NTksCiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDI5MzA6ICgpID0+IGFzc2VydFRyYW5zYWN0aW9uRUlQMjkzMCwKICAgIGFzc2VydFRyYW5zYWN0aW9uTGVnYWN5OiAoKSA9PiBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSwKICAgIGJsb2JzVG9Db21taXRtZW50czogKCkgPT4gYmxvYnNUb0NvbW1pdG1lbnRzLAogICAgYmxvYnNUb1Byb29mczogKCkgPT4gYmxvYnNUb1Byb29mcywKICAgIGJvb2xUb0J5dGVzOiAoKSA9PiBib29sVG9CeXRlcywKICAgIGJvb2xUb0hleDogKCkgPT4gYm9vbFRvSGV4LAogICAgYnl0ZXNUb0JpZ0ludDogKCkgPT4gYnl0ZXNUb0JpZ0ludCwKICAgIGJ5dGVzVG9Cb29sOiAoKSA9PiBieXRlc1RvQm9vbCwKICAgIGJ5dGVzVG9IZXg6ICgpID0+IGJ5dGVzVG9IZXgsCiAgICBieXRlc1RvTnVtYmVyOiAoKSA9PiBieXRlc1RvTnVtYmVyLAogICAgYnl0ZXNUb1JscDogKCkgPT4gYnl0ZXNUb1JscCwKICAgIGJ5dGVzVG9TdHJpbmc6ICgpID0+IGJ5dGVzVG9TdHJpbmcsCiAgICBjY2lwRmV0Y2g6ICgpID0+IGNjaXBSZXF1ZXN0LAogICAgY2NpcFJlcXVlc3Q6ICgpID0+IGNjaXBSZXF1ZXN0LAogICAgY2hlY2tzdW1BZGRyZXNzOiAoKSA9PiBjaGVja3N1bUFkZHJlc3MsCiAgICBjb21taXRtZW50VG9WZXJzaW9uZWRIYXNoOiAoKSA9PiBjb21taXRtZW50VG9WZXJzaW9uZWRIYXNoLAogICAgY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlczogKCkgPT4gY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlcywKICAgIGNvbXBhY3RTaWduYXR1cmVUb0hleDogKCkgPT4gc2VyaWFsaXplQ29tcGFjdFNpZ25hdHVyZSwKICAgIGNvbXBhY3RTaWduYXR1cmVUb1NpZ25hdHVyZTogKCkgPT4gY29tcGFjdFNpZ25hdHVyZVRvU2lnbmF0dXJlLAogICAgY29uY2F0OiAoKSA9PiBjb25jYXQsCiAgICBjb25jYXRCeXRlczogKCkgPT4gY29uY2F0Qnl0ZXMyLAogICAgY29uY2F0SGV4OiAoKSA9PiBjb25jYXRIZXgsCiAgICBjcmVhdGVDbGllbnQ6ICgpID0+IGNyZWF0ZUNsaWVudCwKICAgIGNyZWF0ZU5vbmNlTWFuYWdlcjogKCkgPT4gY3JlYXRlTm9uY2VNYW5hZ2VyLAogICAgY3JlYXRlUHVibGljQ2xpZW50OiAoKSA9PiBjcmVhdGVQdWJsaWNDbGllbnQsCiAgICBjcmVhdGVUZXN0Q2xpZW50OiAoKSA9PiBjcmVhdGVUZXN0Q2xpZW50LAogICAgY3JlYXRlVHJhbnNwb3J0OiAoKSA9PiBjcmVhdGVUcmFuc3BvcnQsCiAgICBjcmVhdGVXYWxsZXRDbGllbnQ6ICgpID0+IGNyZWF0ZVdhbGxldENsaWVudCwKICAgIGN1c3RvbTogKCkgPT4gY3VzdG9tLAogICAgZGVjb2RlQWJpUGFyYW1ldGVyczogKCkgPT4gZGVjb2RlQWJpUGFyYW1ldGVycywKICAgIGRlY29kZURlcGxveURhdGE6ICgpID0+IGRlY29kZURlcGxveURhdGEsCiAgICBkZWNvZGVFcnJvclJlc3VsdDogKCkgPT4gZGVjb2RlRXJyb3JSZXN1bHQsCiAgICBkZWNvZGVFdmVudExvZzogKCkgPT4gZGVjb2RlRXZlbnRMb2csCiAgICBkZWNvZGVGdW5jdGlvbkRhdGE6ICgpID0+IGRlY29kZUZ1bmN0aW9uRGF0YSwKICAgIGRlY29kZUZ1bmN0aW9uUmVzdWx0OiAoKSA9PiBkZWNvZGVGdW5jdGlvblJlc3VsdCwKICAgIGRlZmluZUJsb2NrOiAoKSA9PiBkZWZpbmVCbG9jaywKICAgIGRlZmluZUNoYWluOiAoKSA9PiBkZWZpbmVDaGFpbiwKICAgIGRlZmluZUt6ZzogKCkgPT4gZGVmaW5lS3pnLAogICAgZGVmaW5lVHJhbnNhY3Rpb246ICgpID0+IGRlZmluZVRyYW5zYWN0aW9uLAogICAgZGVmaW5lVHJhbnNhY3Rpb25SZWNlaXB0OiAoKSA9PiBkZWZpbmVUcmFuc2FjdGlvblJlY2VpcHQsCiAgICBkZWZpbmVUcmFuc2FjdGlvblJlcXVlc3Q6ICgpID0+IGRlZmluZVRyYW5zYWN0aW9uUmVxdWVzdCwKICAgIGRlcGxveWxlc3NDYWxsVmlhQnl0ZWNvZGVCeXRlY29kZTogKCkgPT4gZGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZUJ5dGVjb2RlLAogICAgZGVwbG95bGVzc0NhbGxWaWFGYWN0b3J5Qnl0ZWNvZGU6ICgpID0+IGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeUJ5dGVjb2RlLAogICAgZG9tYWluU2VwYXJhdG9yOiAoKSA9PiBkb21haW5TZXBhcmF0b3IsCiAgICBlbmNvZGVBYmlQYXJhbWV0ZXJzOiAoKSA9PiBlbmNvZGVBYmlQYXJhbWV0ZXJzLAogICAgZW5jb2RlRGVwbG95RGF0YTogKCkgPT4gZW5jb2RlRGVwbG95RGF0YSwKICAgIGVuY29kZUVycm9yUmVzdWx0OiAoKSA9PiBlbmNvZGVFcnJvclJlc3VsdCwKICAgIGVuY29kZUV2ZW50VG9waWNzOiAoKSA9PiBlbmNvZGVFdmVudFRvcGljcywKICAgIGVuY29kZUZ1bmN0aW9uRGF0YTogKCkgPT4gZW5jb2RlRnVuY3Rpb25EYXRhLAogICAgZW5jb2RlRnVuY3Rpb25SZXN1bHQ6ICgpID0+IGVuY29kZUZ1bmN0aW9uUmVzdWx0LAogICAgZW5jb2RlUGFja2VkOiAoKSA9PiBlbmNvZGVQYWNrZWQsCiAgICBlcmMyMEFiaTogKCkgPT4gZXJjMjBBYmksCiAgICBlcmMyMEFiaV9ieXRlczMyOiAoKSA9PiBlcmMyMEFiaV9ieXRlczMyLAogICAgZXJjNDYyNkFiaTogKCkgPT4gZXJjNDYyNkFiaSwKICAgIGVyYzcyMUFiaTogKCkgPT4gZXJjNzIxQWJpLAogICAgZXRoZXJVbml0czogKCkgPT4gZXRoZXJVbml0cywKICAgIGV4dHJhY3RDaGFpbjogKCkgPT4gZXh0cmFjdENoYWluLAogICAgZmFsbGJhY2s6ICgpID0+IGZhbGxiYWNrLAogICAgZm9ybWF0QmxvY2s6ICgpID0+IGZvcm1hdEJsb2NrLAogICAgZm9ybWF0RXRoZXI6ICgpID0+IGZvcm1hdEV0aGVyLAogICAgZm9ybWF0R3dlaTogKCkgPT4gZm9ybWF0R3dlaSwKICAgIGZvcm1hdExvZzogKCkgPT4gZm9ybWF0TG9nLAogICAgZm9ybWF0VHJhbnNhY3Rpb246ICgpID0+IGZvcm1hdFRyYW5zYWN0aW9uLAogICAgZm9ybWF0VHJhbnNhY3Rpb25SZWNlaXB0OiAoKSA9PiBmb3JtYXRUcmFuc2FjdGlvblJlY2VpcHQsCiAgICBmb3JtYXRUcmFuc2FjdGlvblJlcXVlc3Q6ICgpID0+IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdCwKICAgIGZvcm1hdFVuaXRzOiAoKSA9PiBmb3JtYXRVbml0cywKICAgIGZyb21CbG9iczogKCkgPT4gZnJvbUJsb2JzLAogICAgZnJvbUJ5dGVzOiAoKSA9PiBmcm9tQnl0ZXMsCiAgICBmcm9tSGV4OiAoKSA9PiBmcm9tSGV4LAogICAgZnJvbVJscDogKCkgPT4gZnJvbVJscCwKICAgIGdldEFiaUl0ZW06ICgpID0+IGdldEFiaUl0ZW0sCiAgICBnZXRBZGRyZXNzOiAoKSA9PiBnZXRBZGRyZXNzLAogICAgZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3M6ICgpID0+IGdldENoYWluQ29udHJhY3RBZGRyZXNzLAogICAgZ2V0Q29udHJhY3Q6ICgpID0+IGdldENvbnRyYWN0LAogICAgZ2V0Q29udHJhY3RBZGRyZXNzOiAoKSA9PiBnZXRDb250cmFjdEFkZHJlc3MyLAogICAgZ2V0Q29udHJhY3RFcnJvcjogKCkgPT4gZ2V0Q29udHJhY3RFcnJvciwKICAgIGdldENyZWF0ZTJBZGRyZXNzOiAoKSA9PiBnZXRDcmVhdGUyQWRkcmVzcywKICAgIGdldENyZWF0ZUFkZHJlc3M6ICgpID0+IGdldENyZWF0ZUFkZHJlc3MsCiAgICBnZXRFdmVudFNlbGVjdG9yOiAoKSA9PiB0b0V2ZW50U2VsZWN0b3IsCiAgICBnZXRFdmVudFNpZ25hdHVyZTogKCkgPT4gdG9TaWduYXR1cmUsCiAgICBnZXRGdW5jdGlvblNlbGVjdG9yOiAoKSA9PiB0b0Z1bmN0aW9uU2VsZWN0b3IsCiAgICBnZXRGdW5jdGlvblNpZ25hdHVyZTogKCkgPT4gdG9TaWduYXR1cmUsCiAgICBnZXRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlOiAoKSA9PiBnZXRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlLAogICAgZ2V0VHJhbnNhY3Rpb25UeXBlOiAoKSA9PiBnZXRUcmFuc2FjdGlvblR5cGUsCiAgICBnZXRUeXBlc0ZvckVJUDcxMkRvbWFpbjogKCkgPT4gZ2V0VHlwZXNGb3JFSVA3MTJEb21haW4sCiAgICBnd2VpVW5pdHM6ICgpID0+IGd3ZWlVbml0cywKICAgIGhhc2hEb21haW46ICgpID0+IGhhc2hEb21haW4sCiAgICBoYXNoTWVzc2FnZTogKCkgPT4gaGFzaE1lc3NhZ2UsCiAgICBoYXNoVHlwZWREYXRhOiAoKSA9PiBoYXNoVHlwZWREYXRhLAogICAgaGV4VG9CaWdJbnQ6ICgpID0+IGhleFRvQmlnSW50LAogICAgaGV4VG9Cb29sOiAoKSA9PiBoZXhUb0Jvb2wsCiAgICBoZXhUb0J5dGVzOiAoKSA9PiBoZXhUb0J5dGVzLAogICAgaGV4VG9Db21wYWN0U2lnbmF0dXJlOiAoKSA9PiBwYXJzZUNvbXBhY3RTaWduYXR1cmUsCiAgICBoZXhUb051bWJlcjogKCkgPT4gaGV4VG9OdW1iZXIsCiAgICBoZXhUb1JscDogKCkgPT4gaGV4VG9SbHAsCiAgICBoZXhUb1NpZ25hdHVyZTogKCkgPT4gcGFyc2VTaWduYXR1cmUyLAogICAgaGV4VG9TdHJpbmc6ICgpID0+IGhleFRvU3RyaW5nLAogICAgaHR0cDogKCkgPT4gaHR0cCwKICAgIGlzQWRkcmVzczogKCkgPT4gaXNBZGRyZXNzLAogICAgaXNBZGRyZXNzRXF1YWw6ICgpID0+IGlzQWRkcmVzc0VxdWFsLAogICAgaXNCeXRlczogKCkgPT4gaXNCeXRlczMsCiAgICBpc0VyYzY0OTJTaWduYXR1cmU6ICgpID0+IGlzRXJjNjQ5MlNpZ25hdHVyZSwKICAgIGlzSGFzaDogKCkgPT4gaXNIYXNoLAogICAgaXNIZXg6ICgpID0+IGlzSGV4LAogICAga2VjY2FrMjU2OiAoKSA9PiBrZWNjYWsyNTYsCiAgICBsYWJlbGhhc2g6ICgpID0+IGxhYmVsaGFzaCwKICAgIG1heEludDEwNDogKCkgPT4gbWF4SW50MTA0LAogICAgbWF4SW50MTEyOiAoKSA9PiBtYXhJbnQxMTIsCiAgICBtYXhJbnQxMjA6ICgpID0+IG1heEludDEyMCwKICAgIG1heEludDEyODogKCkgPT4gbWF4SW50MTI4LAogICAgbWF4SW50MTM2OiAoKSA9PiBtYXhJbnQxMzYsCiAgICBtYXhJbnQxNDQ6ICgpID0+IG1heEludDE0NCwKICAgIG1heEludDE1MjogKCkgPT4gbWF4SW50MTUyLAogICAgbWF4SW50MTY6ICgpID0+IG1heEludDE2LAogICAgbWF4SW50MTYwOiAoKSA9PiBtYXhJbnQxNjAsCiAgICBtYXhJbnQxNjg6ICgpID0+IG1heEludDE2OCwKICAgIG1heEludDE3NjogKCkgPT4gbWF4SW50MTc2LAogICAgbWF4SW50MTg0OiAoKSA9PiBtYXhJbnQxODQsCiAgICBtYXhJbnQxOTI6ICgpID0+IG1heEludDE5MiwKICAgIG1heEludDIwMDogKCkgPT4gbWF4SW50MjAwLAogICAgbWF4SW50MjA4OiAoKSA9PiBtYXhJbnQyMDgsCiAgICBtYXhJbnQyMTY6ICgpID0+IG1heEludDIxNiwKICAgIG1heEludDIyNDogKCkgPT4gbWF4SW50MjI0LAogICAgbWF4SW50MjMyOiAoKSA9PiBtYXhJbnQyMzIsCiAgICBtYXhJbnQyNDogKCkgPT4gbWF4SW50MjQsCiAgICBtYXhJbnQyNDA6ICgpID0+IG1heEludDI0MCwKICAgIG1heEludDI0ODogKCkgPT4gbWF4SW50MjQ4LAogICAgbWF4SW50MjU2OiAoKSA9PiBtYXhJbnQyNTYsCiAgICBtYXhJbnQzMjogKCkgPT4gbWF4SW50MzIsCiAgICBtYXhJbnQ0MDogKCkgPT4gbWF4SW50NDAsCiAgICBtYXhJbnQ0ODogKCkgPT4gbWF4SW50NDgsCiAgICBtYXhJbnQ1NjogKCkgPT4gbWF4SW50NTYsCiAgICBtYXhJbnQ2NDogKCkgPT4gbWF4SW50NjQsCiAgICBtYXhJbnQ3MjogKCkgPT4gbWF4SW50NzIsCiAgICBtYXhJbnQ4OiAoKSA9PiBtYXhJbnQ4LAogICAgbWF4SW50ODA6ICgpID0+IG1heEludDgwLAogICAgbWF4SW50ODg6ICgpID0+IG1heEludDg4LAogICAgbWF4SW50OTY6ICgpID0+IG1heEludDk2LAogICAgbWF4VWludDEwNDogKCkgPT4gbWF4VWludDEwNCwKICAgIG1heFVpbnQxMTI6ICgpID0+IG1heFVpbnQxMTIsCiAgICBtYXhVaW50MTIwOiAoKSA9PiBtYXhVaW50MTIwLAogICAgbWF4VWludDEyODogKCkgPT4gbWF4VWludDEyOCwKICAgIG1heFVpbnQxMzY6ICgpID0+IG1heFVpbnQxMzYsCiAgICBtYXhVaW50MTQ0OiAoKSA9PiBtYXhVaW50MTQ0LAogICAgbWF4VWludDE1MjogKCkgPT4gbWF4VWludDE1MiwKICAgIG1heFVpbnQxNjogKCkgPT4gbWF4VWludDE2LAogICAgbWF4VWludDE2MDogKCkgPT4gbWF4VWludDE2MCwKICAgIG1heFVpbnQxNjg6ICgpID0+IG1heFVpbnQxNjgsCiAgICBtYXhVaW50MTc2OiAoKSA9PiBtYXhVaW50MTc2LAogICAgbWF4VWludDE4NDogKCkgPT4gbWF4VWludDE4NCwKICAgIG1heFVpbnQxOTI6ICgpID0+IG1heFVpbnQxOTIsCiAgICBtYXhVaW50MjAwOiAoKSA9PiBtYXhVaW50MjAwLAogICAgbWF4VWludDIwODogKCkgPT4gbWF4VWludDIwOCwKICAgIG1heFVpbnQyMTY6ICgpID0+IG1heFVpbnQyMTYsCiAgICBtYXhVaW50MjI0OiAoKSA9PiBtYXhVaW50MjI0LAogICAgbWF4VWludDIzMjogKCkgPT4gbWF4VWludDIzMiwKICAgIG1heFVpbnQyNDogKCkgPT4gbWF4VWludDI0LAogICAgbWF4VWludDI0MDogKCkgPT4gbWF4VWludDI0MCwKICAgIG1heFVpbnQyNDg6ICgpID0+IG1heFVpbnQyNDgsCiAgICBtYXhVaW50MjU2OiAoKSA9PiBtYXhVaW50MjU2LAogICAgbWF4VWludDMyOiAoKSA9PiBtYXhVaW50MzIsCiAgICBtYXhVaW50NDA6ICgpID0+IG1heFVpbnQ0MCwKICAgIG1heFVpbnQ0ODogKCkgPT4gbWF4VWludDQ4LAogICAgbWF4VWludDU2OiAoKSA9PiBtYXhVaW50NTYsCiAgICBtYXhVaW50NjQ6ICgpID0+IG1heFVpbnQ2NCwKICAgIG1heFVpbnQ3MjogKCkgPT4gbWF4VWludDcyLAogICAgbWF4VWludDg6ICgpID0+IG1heFVpbnQ4LAogICAgbWF4VWludDgwOiAoKSA9PiBtYXhVaW50ODAsCiAgICBtYXhVaW50ODg6ICgpID0+IG1heFVpbnQ4OCwKICAgIG1heFVpbnQ5NjogKCkgPT4gbWF4VWludDk2LAogICAgbWluSW50MTA0OiAoKSA9PiBtaW5JbnQxMDQsCiAgICBtaW5JbnQxMTI6ICgpID0+IG1pbkludDExMiwKICAgIG1pbkludDEyMDogKCkgPT4gbWluSW50MTIwLAogICAgbWluSW50MTI4OiAoKSA9PiBtaW5JbnQxMjgsCiAgICBtaW5JbnQxMzY6ICgpID0+IG1pbkludDEzNiwKICAgIG1pbkludDE0NDogKCkgPT4gbWluSW50MTQ0LAogICAgbWluSW50MTUyOiAoKSA9PiBtaW5JbnQxNTIsCiAgICBtaW5JbnQxNjogKCkgPT4gbWluSW50MTYsCiAgICBtaW5JbnQxNjA6ICgpID0+IG1pbkludDE2MCwKICAgIG1pbkludDE2ODogKCkgPT4gbWluSW50MTY4LAogICAgbWluSW50MTc2OiAoKSA9PiBtaW5JbnQxNzYsCiAgICBtaW5JbnQxODQ6ICgpID0+IG1pbkludDE4NCwKICAgIG1pbkludDE5MjogKCkgPT4gbWluSW50MTkyLAogICAgbWluSW50MjAwOiAoKSA9PiBtaW5JbnQyMDAsCiAgICBtaW5JbnQyMDg6ICgpID0+IG1pbkludDIwOCwKICAgIG1pbkludDIxNjogKCkgPT4gbWluSW50MjE2LAogICAgbWluSW50MjI0OiAoKSA9PiBtaW5JbnQyMjQsCiAgICBtaW5JbnQyMzI6ICgpID0+IG1pbkludDIzMiwKICAgIG1pbkludDI0OiAoKSA9PiBtaW5JbnQyNCwKICAgIG1pbkludDI0MDogKCkgPT4gbWluSW50MjQwLAogICAgbWluSW50MjQ4OiAoKSA9PiBtaW5JbnQyNDgsCiAgICBtaW5JbnQyNTY6ICgpID0+IG1pbkludDI1NiwKICAgIG1pbkludDMyOiAoKSA9PiBtaW5JbnQzMiwKICAgIG1pbkludDQwOiAoKSA9PiBtaW5JbnQ0MCwKICAgIG1pbkludDQ4OiAoKSA9PiBtaW5JbnQ0OCwKICAgIG1pbkludDU2OiAoKSA9PiBtaW5JbnQ1NiwKICAgIG1pbkludDY0OiAoKSA9PiBtaW5JbnQ2NCwKICAgIG1pbkludDcyOiAoKSA9PiBtaW5JbnQ3MiwKICAgIG1pbkludDg6ICgpID0+IG1pbkludDgsCiAgICBtaW5JbnQ4MDogKCkgPT4gbWluSW50ODAsCiAgICBtaW5JbnQ4ODogKCkgPT4gbWluSW50ODgsCiAgICBtaW5JbnQ5NjogKCkgPT4gbWluSW50OTYsCiAgICBtdWx0aWNhbGwzQWJpOiAoKSA9PiBtdWx0aWNhbGwzQWJpLAogICAgbmFtZWhhc2g6ICgpID0+IG5hbWVoYXNoLAogICAgbm9uY2VNYW5hZ2VyOiAoKSA9PiBub25jZU1hbmFnZXIsCiAgICBudW1iZXJUb0J5dGVzOiAoKSA9PiBudW1iZXJUb0J5dGVzLAogICAgbnVtYmVyVG9IZXg6ICgpID0+IG51bWJlclRvSGV4LAogICAgb2ZmY2hhaW5Mb29rdXA6ICgpID0+IG9mZmNoYWluTG9va3VwLAogICAgb2ZmY2hhaW5Mb29rdXBBYmlJdGVtOiAoKSA9PiBvZmZjaGFpbkxvb2t1cEFiaUl0ZW0sCiAgICBvZmZjaGFpbkxvb2t1cFNpZ25hdHVyZTogKCkgPT4gb2ZmY2hhaW5Mb29rdXBTaWduYXR1cmUsCiAgICBwYWQ6ICgpID0+IHBhZCwKICAgIHBhZEJ5dGVzOiAoKSA9PiBwYWRCeXRlcywKICAgIHBhZEhleDogKCkgPT4gcGFkSGV4LAogICAgcGFyc2VBYmk6ICgpID0+IHBhcnNlQWJpLAogICAgcGFyc2VBYmlJdGVtOiAoKSA9PiBwYXJzZUFiaUl0ZW0sCiAgICBwYXJzZUFiaVBhcmFtZXRlcjogKCkgPT4gcGFyc2VBYmlQYXJhbWV0ZXIyLAogICAgcGFyc2VBYmlQYXJhbWV0ZXJzOiAoKSA9PiBwYXJzZUFiaVBhcmFtZXRlcnMsCiAgICBwYXJzZUNvbXBhY3RTaWduYXR1cmU6ICgpID0+IHBhcnNlQ29tcGFjdFNpZ25hdHVyZSwKICAgIHBhcnNlRXJjNjQ5MlNpZ25hdHVyZTogKCkgPT4gcGFyc2VFcmM2NDkyU2lnbmF0dXJlLAogICAgcGFyc2VFdGhlcjogKCkgPT4gcGFyc2VFdGhlciwKICAgIHBhcnNlRXZlbnRMb2dzOiAoKSA9PiBwYXJzZUV2ZW50TG9ncywKICAgIHBhcnNlR3dlaTogKCkgPT4gcGFyc2VHd2VpLAogICAgcGFyc2VTaWduYXR1cmU6ICgpID0+IHBhcnNlU2lnbmF0dXJlMiwKICAgIHBhcnNlVHJhbnNhY3Rpb246ICgpID0+IHBhcnNlVHJhbnNhY3Rpb24sCiAgICBwYXJzZVVuaXRzOiAoKSA9PiBwYXJzZVVuaXRzLAogICAgcHJlcGFyZUVuY29kZUZ1bmN0aW9uRGF0YTogKCkgPT4gcHJlcGFyZUVuY29kZUZ1bmN0aW9uRGF0YSwKICAgIHByZXNpZ25NZXNzYWdlUHJlZml4OiAoKSA9PiBwcmVzaWduTWVzc2FnZVByZWZpeCwKICAgIHB1YmxpY0FjdGlvbnM6ICgpID0+IHB1YmxpY0FjdGlvbnMsCiAgICByZWNvdmVyQWRkcmVzczogKCkgPT4gcmVjb3ZlckFkZHJlc3MsCiAgICByZWNvdmVyTWVzc2FnZUFkZHJlc3M6ICgpID0+IHJlY292ZXJNZXNzYWdlQWRkcmVzcywKICAgIHJlY292ZXJQdWJsaWNLZXk6ICgpID0+IHJlY292ZXJQdWJsaWNLZXksCiAgICByZWNvdmVyVHJhbnNhY3Rpb25BZGRyZXNzOiAoKSA9PiByZWNvdmVyVHJhbnNhY3Rpb25BZGRyZXNzLAogICAgcmVjb3ZlclR5cGVkRGF0YUFkZHJlc3M6ICgpID0+IHJlY292ZXJUeXBlZERhdGFBZGRyZXNzLAogICAgcmlwZW1kMTYwOiAoKSA9PiByaXBlbWQxNjAyLAogICAgcnBjU2NoZW1hOiAoKSA9PiBycGNTY2hlbWEsCiAgICBycGNUcmFuc2FjdGlvblR5cGU6ICgpID0+IHJwY1RyYW5zYWN0aW9uVHlwZSwKICAgIHNlcmlhbGl6ZUFjY2Vzc0xpc3Q6ICgpID0+IHNlcmlhbGl6ZUFjY2Vzc0xpc3QsCiAgICBzZXJpYWxpemVDb21wYWN0U2lnbmF0dXJlOiAoKSA9PiBzZXJpYWxpemVDb21wYWN0U2lnbmF0dXJlLAogICAgc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZTogKCkgPT4gc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZSwKICAgIHNlcmlhbGl6ZVNpZ25hdHVyZTogKCkgPT4gc2VyaWFsaXplU2lnbmF0dXJlLAogICAgc2VyaWFsaXplVHJhbnNhY3Rpb246ICgpID0+IHNlcmlhbGl6ZVRyYW5zYWN0aW9uLAogICAgc2VyaWFsaXplVHlwZWREYXRhOiAoKSA9PiBzZXJpYWxpemVUeXBlZERhdGEsCiAgICBzZXRFcnJvckNvbmZpZzogKCkgPT4gc2V0RXJyb3JDb25maWcsCiAgICBzZXR1cEt6ZzogKCkgPT4gc2V0dXBLemcsCiAgICBzaGEyNTY6ICgpID0+IHNoYTI1NjIsCiAgICBzaWRlY2Fyc1RvVmVyc2lvbmVkSGFzaGVzOiAoKSA9PiBzaWRlY2Fyc1RvVmVyc2lvbmVkSGFzaGVzLAogICAgc2lnbmF0dXJlVG9Db21wYWN0U2lnbmF0dXJlOiAoKSA9PiBzaWduYXR1cmVUb0NvbXBhY3RTaWduYXR1cmUsCiAgICBzaWduYXR1cmVUb0hleDogKCkgPT4gc2VyaWFsaXplU2lnbmF0dXJlLAogICAgc2l6ZTogKCkgPT4gc2l6ZSwKICAgIHNsaWNlOiAoKSA9PiBzbGljZSwKICAgIHNsaWNlQnl0ZXM6ICgpID0+IHNsaWNlQnl0ZXMsCiAgICBzbGljZUhleDogKCkgPT4gc2xpY2VIZXgsCiAgICBzdHJpbmdUb0J5dGVzOiAoKSA9PiBzdHJpbmdUb0J5dGVzLAogICAgc3RyaW5nVG9IZXg6ICgpID0+IHN0cmluZ1RvSGV4LAogICAgc3RyaW5naWZ5OiAoKSA9PiBzdHJpbmdpZnksCiAgICB0ZXN0QWN0aW9uczogKCkgPT4gdGVzdEFjdGlvbnMsCiAgICB0b0Jsb2JTaWRlY2FyczogKCkgPT4gdG9CbG9iU2lkZWNhcnMsCiAgICB0b0Jsb2JzOiAoKSA9PiB0b0Jsb2JzLAogICAgdG9CeXRlczogKCkgPT4gdG9CeXRlcywKICAgIHRvRXZlbnRIYXNoOiAoKSA9PiB0b1NpZ25hdHVyZUhhc2gsCiAgICB0b0V2ZW50U2VsZWN0b3I6ICgpID0+IHRvRXZlbnRTZWxlY3RvciwKICAgIHRvRXZlbnRTaWduYXR1cmU6ICgpID0+IHRvU2lnbmF0dXJlLAogICAgdG9GdW5jdGlvbkhhc2g6ICgpID0+IHRvU2lnbmF0dXJlSGFzaCwKICAgIHRvRnVuY3Rpb25TZWxlY3RvcjogKCkgPT4gdG9GdW5jdGlvblNlbGVjdG9yLAogICAgdG9GdW5jdGlvblNpZ25hdHVyZTogKCkgPT4gdG9TaWduYXR1cmUsCiAgICB0b0hleDogKCkgPT4gdG9IZXgsCiAgICB0b1ByZWZpeGVkTWVzc2FnZTogKCkgPT4gdG9QcmVmaXhlZE1lc3NhZ2UsCiAgICB0b1JscDogKCkgPT4gdG9SbHAsCiAgICB0cmFuc2FjdGlvblR5cGU6ICgpID0+IHRyYW5zYWN0aW9uVHlwZSwKICAgIHRyaW06ICgpID0+IHRyaW0sCiAgICB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JBYmk6ICgpID0+IHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckFiaSwKICAgIHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckJ5dGVDb2RlOiAoKSA9PiB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JCeXRlQ29kZSwKICAgIHZhbGlkYXRlVHlwZWREYXRhOiAoKSA9PiB2YWxpZGF0ZVR5cGVkRGF0YSwKICAgIHZlcmlmeUhhc2g6ICgpID0+IHZlcmlmeUhhc2gsCiAgICB2ZXJpZnlNZXNzYWdlOiAoKSA9PiB2ZXJpZnlNZXNzYWdlLAogICAgdmVyaWZ5VHlwZWREYXRhOiAoKSA9PiB2ZXJpZnlUeXBlZERhdGEsCiAgICB3YWxsZXRBY3Rpb25zOiAoKSA9PiB3YWxsZXRBY3Rpb25zLAogICAgd2ViU29ja2V0OiAoKSA9PiB3ZWJTb2NrZXQsCiAgICB3ZWlVbml0czogKCkgPT4gd2VpVW5pdHMsCiAgICB3aXRoUmV0cnk6ICgpID0+IHdpdGhSZXRyeSwKICAgIHdpdGhUaW1lb3V0OiAoKSA9PiB3aXRoVGltZW91dCwKICAgIHplcm9BZGRyZXNzOiAoKSA9PiB6ZXJvQWRkcmVzcywKICAgIHplcm9IYXNoOiAoKSA9PiB6ZXJvSGFzaAogIH0pOwogIGluaXRfZXhwb3J0cygpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2dldEFjdGlvbi5qcwogIGZ1bmN0aW9uIGdldEFjdGlvbihjbGllbnQsIGFjdGlvbkZuLCBuYW1lKSB7CiAgICBjb25zdCBhY3Rpb25faW1wbGljaXQgPSBjbGllbnRbYWN0aW9uRm4ubmFtZV07CiAgICBpZiAodHlwZW9mIGFjdGlvbl9pbXBsaWNpdCA9PT0gImZ1bmN0aW9uIikKICAgICAgcmV0dXJuIGFjdGlvbl9pbXBsaWNpdDsKICAgIGNvbnN0IGFjdGlvbl9leHBsaWNpdCA9IGNsaWVudFtuYW1lXTsKICAgIGlmICh0eXBlb2YgYWN0aW9uX2V4cGxpY2l0ID09PSAiZnVuY3Rpb24iKQogICAgICByZXR1cm4gYWN0aW9uX2V4cGxpY2l0OwogICAgcmV0dXJuIChwYXJhbXMpID0+IGFjdGlvbkZuKGNsaWVudCwgcGFyYW1zKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2VuY29kZUV2ZW50VG9waWNzLmpzCiAgaW5pdF9hYmkoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvbG9nLmpzCiAgaW5pdF9iYXNlKCk7CiAgdmFyIEZpbHRlclR5cGVOb3RTdXBwb3J0ZWRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih0eXBlKSB7CiAgICAgIHN1cGVyKGBGaWx0ZXIgdHlwZSAiJHt0eXBlfSIgaXMgbm90IHN1cHBvcnRlZC5gLCB7CiAgICAgICAgbmFtZTogIkZpbHRlclR5cGVOb3RTdXBwb3J0ZWRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlRXZlbnRUb3BpY3MuanMKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X2tlY2NhazI1NigpOwogIGluaXRfdG9FdmVudFNlbGVjdG9yKCk7CiAgaW5pdF9lbmNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9mb3JtYXRBYmlJdGVtMigpOwogIGluaXRfZ2V0QWJpSXRlbSgpOwogIHZhciBkb2NzUGF0aCA9ICIvZG9jcy9jb250cmFjdC9lbmNvZGVFdmVudFRvcGljcyI7CiAgZnVuY3Rpb24gZW5jb2RlRXZlbnRUb3BpY3MocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGV2ZW50TmFtZSwgYXJncyB9ID0gcGFyYW1ldGVyczsKICAgIGxldCBhYmlJdGVtID0gYWJpMlswXTsKICAgIGlmIChldmVudE5hbWUpIHsKICAgICAgY29uc3QgaXRlbSA9IGdldEFiaUl0ZW0oeyBhYmk6IGFiaTIsIG5hbWU6IGV2ZW50TmFtZSB9KTsKICAgICAgaWYgKCFpdGVtKQogICAgICAgIHRocm93IG5ldyBBYmlFdmVudE5vdEZvdW5kRXJyb3IoZXZlbnROYW1lLCB7IGRvY3NQYXRoIH0pOwogICAgICBhYmlJdGVtID0gaXRlbTsKICAgIH0KICAgIGlmIChhYmlJdGVtLnR5cGUgIT09ICJldmVudCIpCiAgICAgIHRocm93IG5ldyBBYmlFdmVudE5vdEZvdW5kRXJyb3Iodm9pZCAwLCB7IGRvY3NQYXRoIH0pOwogICAgY29uc3QgZGVmaW5pdGlvbiA9IGZvcm1hdEFiaUl0ZW0yKGFiaUl0ZW0pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdG9FdmVudFNlbGVjdG9yKGRlZmluaXRpb24pOwogICAgbGV0IHRvcGljcyA9IFtdOwogICAgaWYgKGFyZ3MgJiYgImlucHV0cyIgaW4gYWJpSXRlbSkgewogICAgICBjb25zdCBpbmRleGVkSW5wdXRzID0gYWJpSXRlbS5pbnB1dHM/LmZpbHRlcigocGFyYW0pID0+ICJpbmRleGVkIiBpbiBwYXJhbSAmJiBwYXJhbS5pbmRleGVkKTsKICAgICAgY29uc3QgYXJnc18gPSBBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IE9iamVjdC52YWx1ZXMoYXJncykubGVuZ3RoID4gMCA/IGluZGV4ZWRJbnB1dHM/Lm1hcCgoeCkgPT4gYXJnc1t4Lm5hbWVdKSA/PyBbXSA6IFtdOwogICAgICBpZiAoYXJnc18ubGVuZ3RoID4gMCkgewogICAgICAgIHRvcGljcyA9IGluZGV4ZWRJbnB1dHM/Lm1hcCgocGFyYW0sIGkpID0+IHsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3NfW2ldKSkKICAgICAgICAgICAgcmV0dXJuIGFyZ3NfW2ldLm1hcCgoXywgaikgPT4gZW5jb2RlQXJnKHsgcGFyYW0sIHZhbHVlOiBhcmdzX1tpXVtqXSB9KSk7CiAgICAgICAgICByZXR1cm4gYXJnc19baV0gPyBlbmNvZGVBcmcoeyBwYXJhbSwgdmFsdWU6IGFyZ3NfW2ldIH0pIDogbnVsbDsKICAgICAgICB9KSA/PyBbXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIFtzaWduYXR1cmUsIC4uLnRvcGljc107CiAgfQogIGZ1bmN0aW9uIGVuY29kZUFyZyh7IHBhcmFtLCB2YWx1ZSB9KSB7CiAgICBpZiAocGFyYW0udHlwZSA9PT0gInN0cmluZyIgfHwgcGFyYW0udHlwZSA9PT0gImJ5dGVzIikKICAgICAgcmV0dXJuIGtlY2NhazI1Nih0b0J5dGVzKHZhbHVlKSk7CiAgICBpZiAocGFyYW0udHlwZSA9PT0gInR1cGxlIiB8fCBwYXJhbS50eXBlLm1hdGNoKC9eKC4qKVxbKFxkKyk/XF0kLykpCiAgICAgIHRocm93IG5ldyBGaWx0ZXJUeXBlTm90U3VwcG9ydGVkRXJyb3IocGFyYW0udHlwZSk7CiAgICByZXR1cm4gZW5jb2RlQWJpUGFyYW1ldGVycyhbcGFyYW1dLCBbdmFsdWVdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvY3JlYXRlQ29udHJhY3RFdmVudEZpbHRlci5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9maWx0ZXJzL2NyZWF0ZUZpbHRlclJlcXVlc3RTY29wZS5qcwogIGZ1bmN0aW9uIGNyZWF0ZUZpbHRlclJlcXVlc3RTY29wZShjbGllbnQsIHsgbWV0aG9kIH0pIHsKICAgIGNvbnN0IHJlcXVlc3RNYXAgPSB7fTsKICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIpCiAgICAgIGNsaWVudC50cmFuc3BvcnQub25SZXNwb25zZT8uKCh7IG1ldGhvZDogbWV0aG9kXywgcmVzcG9uc2U6IGlkLCBzdGF0dXMsIHRyYW5zcG9ydCB9KSA9PiB7CiAgICAgICAgaWYgKHN0YXR1cyA9PT0gInN1Y2Nlc3MiICYmIG1ldGhvZCA9PT0gbWV0aG9kXykKICAgICAgICAgIHJlcXVlc3RNYXBbaWRdID0gdHJhbnNwb3J0LnJlcXVlc3Q7CiAgICAgIH0pOwogICAgcmV0dXJuIChpZCkgPT4gcmVxdWVzdE1hcFtpZF0gfHwgY2xpZW50LnJlcXVlc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2NyZWF0ZUNvbnRyYWN0RXZlbnRGaWx0ZXIuanMKICBhc3luYyBmdW5jdGlvbiBjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhZGRyZXNzLCBhYmk6IGFiaTIsIGFyZ3MsIGV2ZW50TmFtZSwgZnJvbUJsb2NrLCBzdHJpY3QsIHRvQmxvY2sgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBnZXRSZXF1ZXN0ID0gY3JlYXRlRmlsdGVyUmVxdWVzdFNjb3BlKGNsaWVudCwgewogICAgICBtZXRob2Q6ICJldGhfbmV3RmlsdGVyIgogICAgfSk7CiAgICBjb25zdCB0b3BpY3MgPSBldmVudE5hbWUgPyBlbmNvZGVFdmVudFRvcGljcyh7CiAgICAgIGFiaTogYWJpMiwKICAgICAgYXJncywKICAgICAgZXZlbnROYW1lCiAgICB9KSA6IHZvaWQgMDsKICAgIGNvbnN0IGlkID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfbmV3RmlsdGVyIiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgewogICAgICAgICAgYWRkcmVzcywKICAgICAgICAgIGZyb21CbG9jazogdHlwZW9mIGZyb21CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleChmcm9tQmxvY2spIDogZnJvbUJsb2NrLAogICAgICAgICAgdG9CbG9jazogdHlwZW9mIHRvQmxvY2sgPT09ICJiaWdpbnQiID8gbnVtYmVyVG9IZXgodG9CbG9jaykgOiB0b0Jsb2NrLAogICAgICAgICAgdG9waWNzCiAgICAgICAgfQogICAgICBdCiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIGFiaTogYWJpMiwKICAgICAgYXJncywKICAgICAgZXZlbnROYW1lLAogICAgICBpZCwKICAgICAgcmVxdWVzdDogZ2V0UmVxdWVzdChpZCksCiAgICAgIHN0cmljdDogQm9vbGVhbihzdHJpY3QpLAogICAgICB0eXBlOiAiZXZlbnQiCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9lc3RpbWF0ZUNvbnRyYWN0R2FzLmpzCiAgaW5pdF9wYXJzZUFjY291bnQoKTsKICBpbml0X2VuY29kZUZ1bmN0aW9uRGF0YSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vycm9ycy9nZXRDb250cmFjdEVycm9yLmpzCiAgaW5pdF9hYmkoKTsKICBpbml0X2Jhc2UoKTsKICBpbml0X2NvbnRyYWN0KCk7CiAgaW5pdF9ycGMoKTsKICB2YXIgRVhFQ1VUSU9OX1JFVkVSVEVEX0VSUk9SX0NPREUgPSAzOwogIGZ1bmN0aW9uIGdldENvbnRyYWN0RXJyb3IoZXJyLCB7IGFiaTogYWJpMiwgYWRkcmVzcywgYXJncywgZG9jc1BhdGg6IGRvY3NQYXRoOSwgZnVuY3Rpb25OYW1lLCBzZW5kZXIgfSkgewogICAgY29uc3QgeyBjb2RlLCBkYXRhLCBtZXNzYWdlLCBzaG9ydE1lc3NhZ2UgfSA9IGVyciBpbnN0YW5jZW9mIFJhd0NvbnRyYWN0RXJyb3IgPyBlcnIgOiBlcnIgaW5zdGFuY2VvZiBCYXNlRXJyb3IyID8gZXJyLndhbGsoKGVycjIpID0+ICJkYXRhIiBpbiBlcnIyKSB8fCBlcnIud2FsaygpIDoge307CiAgICBjb25zdCBjYXVzZSA9ICgoKSA9PiB7CiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IpCiAgICAgICAgcmV0dXJuIG5ldyBDb250cmFjdEZ1bmN0aW9uWmVyb0RhdGFFcnJvcih7IGZ1bmN0aW9uTmFtZSB9KTsKICAgICAgaWYgKFtFWEVDVVRJT05fUkVWRVJURURfRVJST1JfQ09ERSwgSW50ZXJuYWxScGNFcnJvci5jb2RlXS5pbmNsdWRlcyhjb2RlKSAmJiAoZGF0YSB8fCBtZXNzYWdlIHx8IHNob3J0TWVzc2FnZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yKHsKICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgIGRhdGE6IHR5cGVvZiBkYXRhID09PSAib2JqZWN0IiA/IGRhdGEuZGF0YSA6IGRhdGEsCiAgICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgICBtZXNzYWdlOiBzaG9ydE1lc3NhZ2UgPz8gbWVzc2FnZQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBlcnI7CiAgICB9KSgpOwogICAgcmV0dXJuIG5ldyBDb250cmFjdEZ1bmN0aW9uRXhlY3V0aW9uRXJyb3IoY2F1c2UsIHsKICAgICAgYWJpOiBhYmkyLAogICAgICBhcmdzLAogICAgICBjb250cmFjdEFkZHJlc3M6IGFkZHJlc3MsCiAgICAgIGRvY3NQYXRoOiBkb2NzUGF0aDksCiAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgc2VuZGVyCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVHYXMuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGluaXRfYmFzZSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjY291bnRzL3V0aWxzL3B1YmxpY0tleVRvQWRkcmVzcy5qcwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfa2VjY2FrMjU2KCk7CiAgZnVuY3Rpb24gcHVibGljS2V5VG9BZGRyZXNzKHB1YmxpY0tleSkgewogICAgY29uc3QgYWRkcmVzcyA9IGtlY2NhazI1NihgMHgke3B1YmxpY0tleS5zdWJzdHJpbmcoNCl9YCkuc3Vic3RyaW5nKDI2KTsKICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3MoYDB4JHthZGRyZXNzfWApOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcmVjb3ZlclB1YmxpY0tleS5qcwogIGluaXRfaXNIZXgoKTsKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gcmVjb3ZlclB1YmxpY0tleSh7IGhhc2g6IGhhc2gzLCBzaWduYXR1cmUgfSkgewogICAgY29uc3QgaGFzaEhleCA9IGlzSGV4KGhhc2gzKSA/IGhhc2gzIDogdG9IZXgoaGFzaDMpOwogICAgY29uc3QgeyBzZWNwMjU2azE6IHNlY3AyNTZrMTIgfSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gKGluaXRfc2VjcDI1NmsxKCksIHNlY3AyNTZrMV9leHBvcnRzKSk7CiAgICBjb25zdCBzaWduYXR1cmVfID0gKCgpID0+IHsKICAgICAgaWYgKHR5cGVvZiBzaWduYXR1cmUgPT09ICJvYmplY3QiICYmICJyIiBpbiBzaWduYXR1cmUgJiYgInMiIGluIHNpZ25hdHVyZSkgewogICAgICAgIGNvbnN0IHsgciwgcywgdiwgeVBhcml0eSB9ID0gc2lnbmF0dXJlOwogICAgICAgIGNvbnN0IHlQYXJpdHlPclYyID0gTnVtYmVyKHlQYXJpdHkgPz8gdik7CiAgICAgICAgY29uc3QgcmVjb3ZlcnlCaXQyID0gdG9SZWNvdmVyeUJpdCh5UGFyaXR5T3JWMik7CiAgICAgICAgcmV0dXJuIG5ldyBzZWNwMjU2azEyLlNpZ25hdHVyZShoZXhUb0JpZ0ludChyKSwgaGV4VG9CaWdJbnQocykpLmFkZFJlY292ZXJ5Qml0KHJlY292ZXJ5Qml0Mik7CiAgICAgIH0KICAgICAgY29uc3Qgc2lnbmF0dXJlSGV4ID0gaXNIZXgoc2lnbmF0dXJlKSA/IHNpZ25hdHVyZSA6IHRvSGV4KHNpZ25hdHVyZSk7CiAgICAgIGNvbnN0IHlQYXJpdHlPclYgPSBoZXhUb051bWJlcihgMHgke3NpZ25hdHVyZUhleC5zbGljZSgxMzApfWApOwogICAgICBjb25zdCByZWNvdmVyeUJpdCA9IHRvUmVjb3ZlcnlCaXQoeVBhcml0eU9yVik7CiAgICAgIHJldHVybiBzZWNwMjU2azEyLlNpZ25hdHVyZS5mcm9tQ29tcGFjdChzaWduYXR1cmVIZXguc3Vic3RyaW5nKDIsIDEzMCkpLmFkZFJlY292ZXJ5Qml0KHJlY292ZXJ5Qml0KTsKICAgIH0pKCk7CiAgICBjb25zdCBwdWJsaWNLZXkgPSBzaWduYXR1cmVfLnJlY292ZXJQdWJsaWNLZXkoaGFzaEhleC5zdWJzdHJpbmcoMikpLnRvSGV4KGZhbHNlKTsKICAgIHJldHVybiBgMHgke3B1YmxpY0tleX1gOwogIH0KICBmdW5jdGlvbiB0b1JlY292ZXJ5Qml0KHlQYXJpdHlPclYpIHsKICAgIGlmICh5UGFyaXR5T3JWID09PSAwIHx8IHlQYXJpdHlPclYgPT09IDEpCiAgICAgIHJldHVybiB5UGFyaXR5T3JWOwogICAgaWYgKHlQYXJpdHlPclYgPT09IDI3KQogICAgICByZXR1cm4gMDsKICAgIGlmICh5UGFyaXR5T3JWID09PSAyOCkKICAgICAgcmV0dXJuIDE7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeVBhcml0eU9yViB2YWx1ZSIpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcmVjb3ZlckFkZHJlc3MuanMKICBhc3luYyBmdW5jdGlvbiByZWNvdmVyQWRkcmVzcyh7IGhhc2g6IGhhc2gzLCBzaWduYXR1cmUgfSkgewogICAgcmV0dXJuIHB1YmxpY0tleVRvQWRkcmVzcyhhd2FpdCByZWNvdmVyUHVibGljS2V5KHsgaGFzaDogaGFzaDMsIHNpZ25hdHVyZSB9KSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2V4cGVyaW1lbnRhbC9laXA3NzAyL3V0aWxzL2hhc2hBdXRob3JpemF0aW9uLmpzCiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5jb2RpbmcvdG9SbHAuanMKICBpbml0X2Jhc2UoKTsKICBpbml0X2N1cnNvcjIoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gdG9SbHAoYnl0ZXMyLCB0byA9ICJoZXgiKSB7CiAgICBjb25zdCBlbmNvZGFibGUgPSBnZXRFbmNvZGFibGUoYnl0ZXMyKTsKICAgIGNvbnN0IGN1cnNvciA9IGNyZWF0ZUN1cnNvcihuZXcgVWludDhBcnJheShlbmNvZGFibGUubGVuZ3RoKSk7CiAgICBlbmNvZGFibGUuZW5jb2RlKGN1cnNvcik7CiAgICBpZiAodG8gPT09ICJoZXgiKQogICAgICByZXR1cm4gYnl0ZXNUb0hleChjdXJzb3IuYnl0ZXMpOwogICAgcmV0dXJuIGN1cnNvci5ieXRlczsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb1JscChieXRlczIsIHRvID0gImJ5dGVzIikgewogICAgcmV0dXJuIHRvUmxwKGJ5dGVzMiwgdG8pOwogIH0KICBmdW5jdGlvbiBoZXhUb1JscChoZXgsIHRvID0gImhleCIpIHsKICAgIHJldHVybiB0b1JscChoZXgsIHRvKTsKICB9CiAgZnVuY3Rpb24gZ2V0RW5jb2RhYmxlKGJ5dGVzMikgewogICAgaWYgKEFycmF5LmlzQXJyYXkoYnl0ZXMyKSkKICAgICAgcmV0dXJuIGdldEVuY29kYWJsZUxpc3QoYnl0ZXMyLm1hcCgoeCkgPT4gZ2V0RW5jb2RhYmxlKHgpKSk7CiAgICByZXR1cm4gZ2V0RW5jb2RhYmxlQnl0ZXMoYnl0ZXMyKTsKICB9CiAgZnVuY3Rpb24gZ2V0RW5jb2RhYmxlTGlzdChsaXN0KSB7CiAgICBjb25zdCBib2R5TGVuZ3RoID0gbGlzdC5yZWR1Y2UoKGFjYywgeCkgPT4gYWNjICsgeC5sZW5ndGgsIDApOwogICAgY29uc3Qgc2l6ZU9mQm9keUxlbmd0aCA9IGdldFNpemVPZkxlbmd0aChib2R5TGVuZ3RoKTsKICAgIGNvbnN0IGxlbmd0aCA9ICgoKSA9PiB7CiAgICAgIGlmIChib2R5TGVuZ3RoIDw9IDU1KQogICAgICAgIHJldHVybiAxICsgYm9keUxlbmd0aDsKICAgICAgcmV0dXJuIDEgKyBzaXplT2ZCb2R5TGVuZ3RoICsgYm9keUxlbmd0aDsKICAgIH0pKCk7CiAgICByZXR1cm4gewogICAgICBsZW5ndGgsCiAgICAgIGVuY29kZShjdXJzb3IpIHsKICAgICAgICBpZiAoYm9keUxlbmd0aCA8PSA1NSkgewogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlKDE5MiArIGJvZHlMZW5ndGgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJzb3IucHVzaEJ5dGUoMTkyICsgNTUgKyBzaXplT2ZCb2R5TGVuZ3RoKTsKICAgICAgICAgIGlmIChzaXplT2ZCb2R5TGVuZ3RoID09PSAxKQogICAgICAgICAgICBjdXJzb3IucHVzaFVpbnQ4KGJvZHlMZW5ndGgpOwogICAgICAgICAgZWxzZSBpZiAoc2l6ZU9mQm9keUxlbmd0aCA9PT0gMikKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MTYoYm9keUxlbmd0aCk7CiAgICAgICAgICBlbHNlIGlmIChzaXplT2ZCb2R5TGVuZ3RoID09PSAzKQogICAgICAgICAgICBjdXJzb3IucHVzaFVpbnQyNChib2R5TGVuZ3RoKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MzIoYm9keUxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGZvciAoY29uc3QgeyBlbmNvZGU6IGVuY29kZTIgfSBvZiBsaXN0KSB7CiAgICAgICAgICBlbmNvZGUyKGN1cnNvcik7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KICBmdW5jdGlvbiBnZXRFbmNvZGFibGVCeXRlcyhieXRlc09ySGV4KSB7CiAgICBjb25zdCBieXRlczIgPSB0eXBlb2YgYnl0ZXNPckhleCA9PT0gInN0cmluZyIgPyBoZXhUb0J5dGVzKGJ5dGVzT3JIZXgpIDogYnl0ZXNPckhleDsKICAgIGNvbnN0IHNpemVPZkJ5dGVzTGVuZ3RoID0gZ2V0U2l6ZU9mTGVuZ3RoKGJ5dGVzMi5sZW5ndGgpOwogICAgY29uc3QgbGVuZ3RoID0gKCgpID0+IHsKICAgICAgaWYgKGJ5dGVzMi5sZW5ndGggPT09IDEgJiYgYnl0ZXMyWzBdIDwgMTI4KQogICAgICAgIHJldHVybiAxOwogICAgICBpZiAoYnl0ZXMyLmxlbmd0aCA8PSA1NSkKICAgICAgICByZXR1cm4gMSArIGJ5dGVzMi5sZW5ndGg7CiAgICAgIHJldHVybiAxICsgc2l6ZU9mQnl0ZXNMZW5ndGggKyBieXRlczIubGVuZ3RoOwogICAgfSkoKTsKICAgIHJldHVybiB7CiAgICAgIGxlbmd0aCwKICAgICAgZW5jb2RlKGN1cnNvcikgewogICAgICAgIGlmIChieXRlczIubGVuZ3RoID09PSAxICYmIGJ5dGVzMlswXSA8IDEyOCkgewogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIH0gZWxzZSBpZiAoYnl0ZXMyLmxlbmd0aCA8PSA1NSkgewogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlKDEyOCArIGJ5dGVzMi5sZW5ndGgpOwogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJzb3IucHVzaEJ5dGUoMTI4ICsgNTUgKyBzaXplT2ZCeXRlc0xlbmd0aCk7CiAgICAgICAgICBpZiAoc2l6ZU9mQnl0ZXNMZW5ndGggPT09IDEpCiAgICAgICAgICAgIGN1cnNvci5wdXNoVWludDgoYnl0ZXMyLmxlbmd0aCk7CiAgICAgICAgICBlbHNlIGlmIChzaXplT2ZCeXRlc0xlbmd0aCA9PT0gMikKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MTYoYnl0ZXMyLmxlbmd0aCk7CiAgICAgICAgICBlbHNlIGlmIChzaXplT2ZCeXRlc0xlbmd0aCA9PT0gMykKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MjQoYnl0ZXMyLmxlbmd0aCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGN1cnNvci5wdXNoVWludDMyKGJ5dGVzMi5sZW5ndGgpOwogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9CiAgZnVuY3Rpb24gZ2V0U2l6ZU9mTGVuZ3RoKGxlbmd0aCkgewogICAgaWYgKGxlbmd0aCA8IDIgKiogOCkKICAgICAgcmV0dXJuIDE7CiAgICBpZiAobGVuZ3RoIDwgMiAqKiAxNikKICAgICAgcmV0dXJuIDI7CiAgICBpZiAobGVuZ3RoIDwgMiAqKiAyNCkKICAgICAgcmV0dXJuIDM7CiAgICBpZiAobGVuZ3RoIDwgMiAqKiAzMikKICAgICAgcmV0dXJuIDQ7CiAgICB0aHJvdyBuZXcgQmFzZUVycm9yMigiTGVuZ3RoIGlzIHRvbyBsYXJnZS4iKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXhwZXJpbWVudGFsL2VpcDc3MDIvdXRpbHMvaGFzaEF1dGhvcml6YXRpb24uanMKICBpbml0X2tlY2NhazI1NigpOwogIGZ1bmN0aW9uIGhhc2hBdXRob3JpemF0aW9uKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgY2hhaW5JZCwgY29udHJhY3RBZGRyZXNzLCBub25jZSwgdG8gfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBoYXNoMyA9IGtlY2NhazI1Nihjb25jYXRIZXgoWwogICAgICAiMHgwNSIsCiAgICAgIHRvUmxwKFtudW1iZXJUb0hleChjaGFpbklkKSwgY29udHJhY3RBZGRyZXNzLCBudW1iZXJUb0hleChub25jZSldKQogICAgXSkpOwogICAgaWYgKHRvID09PSAiYnl0ZXMiKQogICAgICByZXR1cm4gaGV4VG9CeXRlcyhoYXNoMyk7CiAgICByZXR1cm4gaGFzaDM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2V4cGVyaW1lbnRhbC9laXA3NzAyL3V0aWxzL3JlY292ZXJBdXRob3JpemF0aW9uQWRkcmVzcy5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJBdXRob3JpemF0aW9uQWRkcmVzcyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGF1dGhvcml6YXRpb24sIHNpZ25hdHVyZSB9ID0gcGFyYW1ldGVyczsKICAgIHJldHVybiByZWNvdmVyQWRkcmVzcyh7CiAgICAgIGhhc2g6IGhhc2hBdXRob3JpemF0aW9uKGF1dGhvcml6YXRpb24pLAogICAgICBzaWduYXR1cmU6IHNpZ25hdHVyZSA/PyBhdXRob3JpemF0aW9uCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVHYXMuanMKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2VzdGltYXRlR2FzLmpzCiAgaW5pdF9mb3JtYXRFdGhlcigpOwogIGluaXRfZm9ybWF0R3dlaSgpOwogIGluaXRfYmFzZSgpOwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICB2YXIgRXN0aW1hdGVHYXNFeGVjdXRpb25FcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBhY2NvdW50LCBkb2NzUGF0aDogZG9jc1BhdGg5LCBjaGFpbiwgZGF0YSwgZ2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbm9uY2UsIHRvLCB2YWx1ZSB9KSB7CiAgICAgIGNvbnN0IHByZXR0eUFyZ3MgPSBwcmV0dHlQcmludCh7CiAgICAgICAgZnJvbTogYWNjb3VudD8uYWRkcmVzcywKICAgICAgICB0bywKICAgICAgICB2YWx1ZTogdHlwZW9mIHZhbHVlICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRFdGhlcih2YWx1ZSl9ICR7Y2hhaW4/Lm5hdGl2ZUN1cnJlbmN5Py5zeW1ib2wgfHwgIkVUSCJ9YCwKICAgICAgICBkYXRhLAogICAgICAgIGdhcywKICAgICAgICBnYXNQcmljZTogdHlwZW9mIGdhc1ByaWNlICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKGdhc1ByaWNlKX0gZ3dlaWAsCiAgICAgICAgbWF4RmVlUGVyR2FzOiB0eXBlb2YgbWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9IGd3ZWlgLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiB0eXBlb2YgbWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkobWF4UHJpb3JpdHlGZWVQZXJHYXMpfSBnd2VpYCwKICAgICAgICBub25jZQogICAgICB9KTsKICAgICAgc3VwZXIoY2F1c2Uuc2hvcnRNZXNzYWdlLCB7CiAgICAgICAgY2F1c2UsCiAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgIC4uLmNhdXNlLm1ldGFNZXNzYWdlcyA/IFsuLi5jYXVzZS5tZXRhTWVzc2FnZXMsICIgIl0gOiBbXSwKICAgICAgICAgICJFc3RpbWF0ZSBHYXMgQXJndW1lbnRzOiIsCiAgICAgICAgICBwcmV0dHlBcmdzCiAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgbmFtZTogIkVzdGltYXRlR2FzRXhlY3V0aW9uRXJyb3IiCiAgICAgIH0pOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNhdXNlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgfSk7CiAgICAgIHRoaXMuY2F1c2UgPSBjYXVzZTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vycm9ycy9nZXRFc3RpbWF0ZUdhc0Vycm9yLmpzCiAgaW5pdF9ub2RlKCk7CiAgaW5pdF9nZXROb2RlRXJyb3IoKTsKICBmdW5jdGlvbiBnZXRFc3RpbWF0ZUdhc0Vycm9yKGVyciwgeyBkb2NzUGF0aDogZG9jc1BhdGg5LCAuLi5hcmdzIH0pIHsKICAgIGNvbnN0IGNhdXNlID0gKCgpID0+IHsKICAgICAgY29uc3QgY2F1c2UyID0gZ2V0Tm9kZUVycm9yKGVyciwgYXJncyk7CiAgICAgIGlmIChjYXVzZTIgaW5zdGFuY2VvZiBVbmtub3duTm9kZUVycm9yKQogICAgICAgIHJldHVybiBlcnI7CiAgICAgIHJldHVybiBjYXVzZTI7CiAgICB9KSgpOwogICAgcmV0dXJuIG5ldyBFc3RpbWF0ZUdhc0V4ZWN1dGlvbkVycm9yKGNhdXNlLCB7CiAgICAgIGRvY3NQYXRoOiBkb2NzUGF0aDksCiAgICAgIC4uLmFyZ3MKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9lc3RpbWF0ZUdhcy5qcwogIGluaXRfZXh0cmFjdCgpOwogIGluaXRfdHJhbnNhY3Rpb25SZXF1ZXN0KCk7CiAgaW5pdF9zdGF0ZU92ZXJyaWRlMigpOwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3ByZXBhcmVUcmFuc2FjdGlvblJlcXVlc3QuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9mZWUuanMKICBpbml0X2Zvcm1hdEd3ZWkoKTsKICBpbml0X2Jhc2UoKTsKICB2YXIgQmFzZUZlZVNjYWxhckVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiYGJhc2VGZWVNdWx0aXBsaWVyYCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxLiIsIHsKICAgICAgICBuYW1lOiAiQmFzZUZlZVNjYWxhckVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwogIHZhciBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiQ2hhaW4gZG9lcyBub3Qgc3VwcG9ydCBFSVAtMTU1OSBmZWVzLiIsIHsKICAgICAgICBuYW1lOiAiRWlwMTU1OUZlZXNOb3RTdXBwb3J0ZWRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKICB2YXIgTWF4RmVlUGVyR2FzVG9vTG93RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyBtYXhQcmlvcml0eUZlZVBlckdhcyB9KSB7CiAgICAgIHN1cGVyKGBcYG1heEZlZVBlckdhc1xgIGNhbm5vdCBiZSBsZXNzIHRoYW4gdGhlIFxgbWF4UHJpb3JpdHlGZWVQZXJHYXNcYCAoJHtmb3JtYXRHd2VpKG1heFByaW9yaXR5RmVlUGVyR2FzKX0gZ3dlaSkuYCwgeyBuYW1lOiAiTWF4RmVlUGVyR2FzVG9vTG93RXJyb3IiIH0pOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcy5qcwogIGluaXRfZnJvbUhleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9ibG9jay5qcwogIGluaXRfYmFzZSgpOwogIHZhciBCbG9ja05vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyIH0pIHsKICAgICAgbGV0IGlkZW50aWZpZXIgPSAiQmxvY2siOwogICAgICBpZiAoYmxvY2tIYXNoKQogICAgICAgIGlkZW50aWZpZXIgPSBgQmxvY2sgYXQgaGFzaCAiJHtibG9ja0hhc2h9ImA7CiAgICAgIGlmIChibG9ja051bWJlcikKICAgICAgICBpZGVudGlmaWVyID0gYEJsb2NrIGF0IG51bWJlciAiJHtibG9ja051bWJlcn0iYDsKICAgICAgc3VwZXIoYCR7aWRlbnRpZmllcn0gY291bGQgbm90IGJlIGZvdW5kLmAsIHsgbmFtZTogIkJsb2NrTm90Rm91bmRFcnJvciIgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRCbG9jay5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2Jsb2NrLmpzCiAgaW5pdF9mb3JtYXR0ZXIoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL3RyYW5zYWN0aW9uLmpzCiAgaW5pdF9mcm9tSGV4KCk7CiAgaW5pdF9mb3JtYXR0ZXIoKTsKICB2YXIgdHJhbnNhY3Rpb25UeXBlID0gewogICAgIjB4MCI6ICJsZWdhY3kiLAogICAgIjB4MSI6ICJlaXAyOTMwIiwKICAgICIweDIiOiAiZWlwMTU1OSIsCiAgICAiMHgzIjogImVpcDQ4NDQiLAogICAgIjB4NCI6ICJlaXA3NzAyIgogIH07CiAgZnVuY3Rpb24gZm9ybWF0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHRyYW5zYWN0aW9uXyA9IHsKICAgICAgLi4udHJhbnNhY3Rpb24sCiAgICAgIGJsb2NrSGFzaDogdHJhbnNhY3Rpb24uYmxvY2tIYXNoID8gdHJhbnNhY3Rpb24uYmxvY2tIYXNoIDogbnVsbCwKICAgICAgYmxvY2tOdW1iZXI6IHRyYW5zYWN0aW9uLmJsb2NrTnVtYmVyID8gQmlnSW50KHRyYW5zYWN0aW9uLmJsb2NrTnVtYmVyKSA6IG51bGwsCiAgICAgIGNoYWluSWQ6IHRyYW5zYWN0aW9uLmNoYWluSWQgPyBoZXhUb051bWJlcih0cmFuc2FjdGlvbi5jaGFpbklkKSA6IHZvaWQgMCwKICAgICAgZ2FzOiB0cmFuc2FjdGlvbi5nYXMgPyBCaWdJbnQodHJhbnNhY3Rpb24uZ2FzKSA6IHZvaWQgMCwKICAgICAgZ2FzUHJpY2U6IHRyYW5zYWN0aW9uLmdhc1ByaWNlID8gQmlnSW50KHRyYW5zYWN0aW9uLmdhc1ByaWNlKSA6IHZvaWQgMCwKICAgICAgbWF4RmVlUGVyQmxvYkdhczogdHJhbnNhY3Rpb24ubWF4RmVlUGVyQmxvYkdhcyA/IEJpZ0ludCh0cmFuc2FjdGlvbi5tYXhGZWVQZXJCbG9iR2FzKSA6IHZvaWQgMCwKICAgICAgbWF4RmVlUGVyR2FzOiB0cmFuc2FjdGlvbi5tYXhGZWVQZXJHYXMgPyBCaWdJbnQodHJhbnNhY3Rpb24ubWF4RmVlUGVyR2FzKSA6IHZvaWQgMCwKICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IHRyYW5zYWN0aW9uLm1heFByaW9yaXR5RmVlUGVyR2FzID8gQmlnSW50KHRyYW5zYWN0aW9uLm1heFByaW9yaXR5RmVlUGVyR2FzKSA6IHZvaWQgMCwKICAgICAgbm9uY2U6IHRyYW5zYWN0aW9uLm5vbmNlID8gaGV4VG9OdW1iZXIodHJhbnNhY3Rpb24ubm9uY2UpIDogdm9pZCAwLAogICAgICB0bzogdHJhbnNhY3Rpb24udG8gPyB0cmFuc2FjdGlvbi50byA6IG51bGwsCiAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5kZXggPyBOdW1iZXIodHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmRleCkgOiBudWxsLAogICAgICB0eXBlOiB0cmFuc2FjdGlvbi50eXBlID8gdHJhbnNhY3Rpb25UeXBlW3RyYW5zYWN0aW9uLnR5cGVdIDogdm9pZCAwLAogICAgICB0eXBlSGV4OiB0cmFuc2FjdGlvbi50eXBlID8gdHJhbnNhY3Rpb24udHlwZSA6IHZvaWQgMCwKICAgICAgdmFsdWU6IHRyYW5zYWN0aW9uLnZhbHVlID8gQmlnSW50KHRyYW5zYWN0aW9uLnZhbHVlKSA6IHZvaWQgMCwKICAgICAgdjogdHJhbnNhY3Rpb24udiA/IEJpZ0ludCh0cmFuc2FjdGlvbi52KSA6IHZvaWQgMAogICAgfTsKICAgIGlmICh0cmFuc2FjdGlvbi5hdXRob3JpemF0aW9uTGlzdCkKICAgICAgdHJhbnNhY3Rpb25fLmF1dGhvcml6YXRpb25MaXN0ID0gZm9ybWF0QXV0aG9yaXphdGlvbkxpc3QyKHRyYW5zYWN0aW9uLmF1dGhvcml6YXRpb25MaXN0KTsKICAgIHRyYW5zYWN0aW9uXy55UGFyaXR5ID0gKCgpID0+IHsKICAgICAgaWYgKHRyYW5zYWN0aW9uLnlQYXJpdHkpCiAgICAgICAgcmV0dXJuIE51bWJlcih0cmFuc2FjdGlvbi55UGFyaXR5KTsKICAgICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbl8udiA9PT0gImJpZ2ludCIpIHsKICAgICAgICBpZiAodHJhbnNhY3Rpb25fLnYgPT09IDBuIHx8IHRyYW5zYWN0aW9uXy52ID09PSAyN24pCiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBpZiAodHJhbnNhY3Rpb25fLnYgPT09IDFuIHx8IHRyYW5zYWN0aW9uXy52ID09PSAyOG4pCiAgICAgICAgICByZXR1cm4gMTsKICAgICAgICBpZiAodHJhbnNhY3Rpb25fLnYgPj0gMzVuKQogICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uXy52ICUgMm4gPT09IDBuID8gMSA6IDA7CiAgICAgIH0KICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIH0pKCk7CiAgICBpZiAodHJhbnNhY3Rpb25fLnR5cGUgPT09ICJsZWdhY3kiKSB7CiAgICAgIGRlbGV0ZSB0cmFuc2FjdGlvbl8uYWNjZXNzTGlzdDsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhGZWVQZXJCbG9iR2FzOwogICAgICBkZWxldGUgdHJhbnNhY3Rpb25fLm1heEZlZVBlckdhczsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhQcmlvcml0eUZlZVBlckdhczsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy55UGFyaXR5OwogICAgfQogICAgaWYgKHRyYW5zYWN0aW9uXy50eXBlID09PSAiZWlwMjkzMCIpIHsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhGZWVQZXJCbG9iR2FzOwogICAgICBkZWxldGUgdHJhbnNhY3Rpb25fLm1heEZlZVBlckdhczsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhQcmlvcml0eUZlZVBlckdhczsKICAgIH0KICAgIGlmICh0cmFuc2FjdGlvbl8udHlwZSA9PT0gImVpcDE1NTkiKSB7CiAgICAgIGRlbGV0ZSB0cmFuc2FjdGlvbl8ubWF4RmVlUGVyQmxvYkdhczsKICAgIH0KICAgIHJldHVybiB0cmFuc2FjdGlvbl87CiAgfQogIHZhciBkZWZpbmVUcmFuc2FjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVGb3JtYXR0ZXIoInRyYW5zYWN0aW9uIiwgZm9ybWF0VHJhbnNhY3Rpb24pOwogIGZ1bmN0aW9uIGZvcm1hdEF1dGhvcml6YXRpb25MaXN0MihhdXRob3JpemF0aW9uTGlzdCkgewogICAgcmV0dXJuIGF1dGhvcml6YXRpb25MaXN0Lm1hcCgoYXV0aG9yaXphdGlvbikgPT4gKHsKICAgICAgY29udHJhY3RBZGRyZXNzOiBhdXRob3JpemF0aW9uLmFkZHJlc3MsCiAgICAgIHI6IGF1dGhvcml6YXRpb24uciwKICAgICAgczogYXV0aG9yaXphdGlvbi5zLAogICAgICBjaGFpbklkOiBOdW1iZXIoYXV0aG9yaXphdGlvbi5jaGFpbklkKSwKICAgICAgbm9uY2U6IE51bWJlcihhdXRob3JpemF0aW9uLm5vbmNlKSwKICAgICAgLi4udHlwZW9mIGF1dGhvcml6YXRpb24ueVBhcml0eSAhPT0gInVuZGVmaW5lZCIgPyB7IHlQYXJpdHk6IE51bWJlcihhdXRob3JpemF0aW9uLnlQYXJpdHkpIH0gOiB7fSwKICAgICAgLi4udHlwZW9mIGF1dGhvcml6YXRpb24udiAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIGF1dGhvcml6YXRpb24ueVBhcml0eSA9PT0gInVuZGVmaW5lZCIgPyB7IHY6IE51bWJlcihhdXRob3JpemF0aW9uLnYpIH0gOiB7fQogICAgfSkpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2Jsb2NrLmpzCiAgZnVuY3Rpb24gZm9ybWF0QmxvY2soYmxvY2spIHsKICAgIGNvbnN0IHRyYW5zYWN0aW9ucyA9IGJsb2NrLnRyYW5zYWN0aW9ucz8ubWFwKCh0cmFuc2FjdGlvbikgPT4gewogICAgICBpZiAodHlwZW9mIHRyYW5zYWN0aW9uID09PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICAgIHJldHVybiBmb3JtYXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7CiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIC4uLmJsb2NrLAogICAgICBiYXNlRmVlUGVyR2FzOiBibG9jay5iYXNlRmVlUGVyR2FzID8gQmlnSW50KGJsb2NrLmJhc2VGZWVQZXJHYXMpIDogbnVsbCwKICAgICAgYmxvYkdhc1VzZWQ6IGJsb2NrLmJsb2JHYXNVc2VkID8gQmlnSW50KGJsb2NrLmJsb2JHYXNVc2VkKSA6IHZvaWQgMCwKICAgICAgZGlmZmljdWx0eTogYmxvY2suZGlmZmljdWx0eSA/IEJpZ0ludChibG9jay5kaWZmaWN1bHR5KSA6IHZvaWQgMCwKICAgICAgZXhjZXNzQmxvYkdhczogYmxvY2suZXhjZXNzQmxvYkdhcyA/IEJpZ0ludChibG9jay5leGNlc3NCbG9iR2FzKSA6IHZvaWQgMCwKICAgICAgZ2FzTGltaXQ6IGJsb2NrLmdhc0xpbWl0ID8gQmlnSW50KGJsb2NrLmdhc0xpbWl0KSA6IHZvaWQgMCwKICAgICAgZ2FzVXNlZDogYmxvY2suZ2FzVXNlZCA/IEJpZ0ludChibG9jay5nYXNVc2VkKSA6IHZvaWQgMCwKICAgICAgaGFzaDogYmxvY2suaGFzaCA/IGJsb2NrLmhhc2ggOiBudWxsLAogICAgICBsb2dzQmxvb206IGJsb2NrLmxvZ3NCbG9vbSA/IGJsb2NrLmxvZ3NCbG9vbSA6IG51bGwsCiAgICAgIG5vbmNlOiBibG9jay5ub25jZSA/IGJsb2NrLm5vbmNlIDogbnVsbCwKICAgICAgbnVtYmVyOiBibG9jay5udW1iZXIgPyBCaWdJbnQoYmxvY2subnVtYmVyKSA6IG51bGwsCiAgICAgIHNpemU6IGJsb2NrLnNpemUgPyBCaWdJbnQoYmxvY2suc2l6ZSkgOiB2b2lkIDAsCiAgICAgIHRpbWVzdGFtcDogYmxvY2sudGltZXN0YW1wID8gQmlnSW50KGJsb2NrLnRpbWVzdGFtcCkgOiB2b2lkIDAsCiAgICAgIHRyYW5zYWN0aW9ucywKICAgICAgdG90YWxEaWZmaWN1bHR5OiBibG9jay50b3RhbERpZmZpY3VsdHkgPyBCaWdJbnQoYmxvY2sudG90YWxEaWZmaWN1bHR5KSA6IG51bGwKICAgIH07CiAgfQogIHZhciBkZWZpbmVCbG9jayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVGb3JtYXR0ZXIoImJsb2NrIiwgZm9ybWF0QmxvY2spOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEJsb2NrLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvY2soY2xpZW50LCB7IGJsb2NrSGFzaCwgYmxvY2tOdW1iZXIsIGJsb2NrVGFnOiBibG9ja1RhZ18sIGluY2x1ZGVUcmFuc2FjdGlvbnM6IGluY2x1ZGVUcmFuc2FjdGlvbnNfIH0gPSB7fSkgewogICAgY29uc3QgYmxvY2tUYWcgPSBibG9ja1RhZ18gPz8gImxhdGVzdCI7CiAgICBjb25zdCBpbmNsdWRlVHJhbnNhY3Rpb25zID0gaW5jbHVkZVRyYW5zYWN0aW9uc18gPz8gZmFsc2U7CiAgICBjb25zdCBibG9ja051bWJlckhleCA9IGJsb2NrTnVtYmVyICE9PSB2b2lkIDAgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICBsZXQgYmxvY2sgPSBudWxsOwogICAgaWYgKGJsb2NrSGFzaCkgewogICAgICBibG9jayA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0QmxvY2tCeUhhc2giLAogICAgICAgIHBhcmFtczogW2Jsb2NrSGFzaCwgaW5jbHVkZVRyYW5zYWN0aW9uc10KICAgICAgfSwgeyBkZWR1cGU6IHRydWUgfSk7CiAgICB9IGVsc2UgewogICAgICBibG9jayA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0QmxvY2tCeU51bWJlciIsCiAgICAgICAgcGFyYW1zOiBbYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWcsIGluY2x1ZGVUcmFuc2FjdGlvbnNdCiAgICAgIH0sIHsgZGVkdXBlOiBCb29sZWFuKGJsb2NrTnVtYmVySGV4KSB9KTsKICAgIH0KICAgIGlmICghYmxvY2spCiAgICAgIHRocm93IG5ldyBCbG9ja05vdEZvdW5kRXJyb3IoeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyIH0pOwogICAgY29uc3QgZm9ybWF0ID0gY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzPy5ibG9jaz8uZm9ybWF0IHx8IGZvcm1hdEJsb2NrOwogICAgcmV0dXJuIGZvcm1hdChibG9jayk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEdhc1ByaWNlLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0R2FzUHJpY2UoY2xpZW50KSB7CiAgICBjb25zdCBnYXNQcmljZSA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2dhc1ByaWNlIgogICAgfSk7CiAgICByZXR1cm4gQmlnSW50KGdhc1ByaWNlKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcy5qcwogIGFzeW5jIGZ1bmN0aW9uIGVzdGltYXRlTWF4UHJpb3JpdHlGZWVQZXJHYXMoY2xpZW50LCBhcmdzKSB7CiAgICByZXR1cm4gaW50ZXJuYWxfZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcyhjbGllbnQsIGFyZ3MpOwogIH0KICBhc3luYyBmdW5jdGlvbiBpbnRlcm5hbF9lc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzKGNsaWVudCwgYXJncykgewogICAgY29uc3QgeyBibG9jazogYmxvY2tfLCBjaGFpbiA9IGNsaWVudC5jaGFpbiwgcmVxdWVzdCB9ID0gYXJncyB8fCB7fTsKICAgIGlmICh0eXBlb2YgY2hhaW4/LmZlZXM/LmRlZmF1bHRQcmlvcml0eUZlZSA9PT0gImZ1bmN0aW9uIikgewogICAgICBjb25zdCBibG9jayA9IGJsb2NrXyB8fCBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRCbG9jaywgImdldEJsb2NrIikoe30pOwogICAgICByZXR1cm4gY2hhaW4uZmVlcy5kZWZhdWx0UHJpb3JpdHlGZWUoewogICAgICAgIGJsb2NrLAogICAgICAgIGNsaWVudCwKICAgICAgICByZXF1ZXN0CiAgICAgIH0pOwogICAgfQogICAgaWYgKHR5cGVvZiBjaGFpbj8uZmVlcz8uZGVmYXVsdFByaW9yaXR5RmVlICE9PSAidW5kZWZpbmVkIikKICAgICAgcmV0dXJuIGNoYWluPy5mZWVzPy5kZWZhdWx0UHJpb3JpdHlGZWU7CiAgICB0cnkgewogICAgICBjb25zdCBtYXhQcmlvcml0eUZlZVBlckdhc0hleCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfbWF4UHJpb3JpdHlGZWVQZXJHYXMiCiAgICAgIH0pOwogICAgICByZXR1cm4gaGV4VG9CaWdJbnQobWF4UHJpb3JpdHlGZWVQZXJHYXNIZXgpOwogICAgfSBjYXRjaCB7CiAgICAgIGNvbnN0IFtibG9jaywgZ2FzUHJpY2VdID0gYXdhaXQgUHJvbWlzZS5hbGwoWwogICAgICAgIGJsb2NrXyA/IFByb21pc2UucmVzb2x2ZShibG9ja18pIDogZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2ssICJnZXRCbG9jayIpKHt9KSwKICAgICAgICBnZXRBY3Rpb24oY2xpZW50LCBnZXRHYXNQcmljZSwgImdldEdhc1ByaWNlIikoe30pCiAgICAgIF0pOwogICAgICBpZiAodHlwZW9mIGJsb2NrLmJhc2VGZWVQZXJHYXMgIT09ICJiaWdpbnQiKQogICAgICAgIHRocm93IG5ldyBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yKCk7CiAgICAgIGNvbnN0IG1heFByaW9yaXR5RmVlUGVyR2FzID0gZ2FzUHJpY2UgLSBibG9jay5iYXNlRmVlUGVyR2FzOwogICAgICBpZiAobWF4UHJpb3JpdHlGZWVQZXJHYXMgPCAwbikKICAgICAgICByZXR1cm4gMG47CiAgICAgIHJldHVybiBtYXhQcmlvcml0eUZlZVBlckdhczsKICAgIH0KICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVGZWVzUGVyR2FzLmpzCiAgYXN5bmMgZnVuY3Rpb24gZXN0aW1hdGVGZWVzUGVyR2FzKGNsaWVudCwgYXJncykgewogICAgcmV0dXJuIGludGVybmFsX2VzdGltYXRlRmVlc1BlckdhcyhjbGllbnQsIGFyZ3MpOwogIH0KICBhc3luYyBmdW5jdGlvbiBpbnRlcm5hbF9lc3RpbWF0ZUZlZXNQZXJHYXMoY2xpZW50LCBhcmdzKSB7CiAgICBjb25zdCB7IGJsb2NrOiBibG9ja18sIGNoYWluID0gY2xpZW50LmNoYWluLCByZXF1ZXN0LCB0eXBlID0gImVpcDE1NTkiIH0gPSBhcmdzIHx8IHt9OwogICAgY29uc3QgYmFzZUZlZU11bHRpcGxpZXIgPSBhd2FpdCAoYXN5bmMgKCkgPT4gewogICAgICBpZiAodHlwZW9mIGNoYWluPy5mZWVzPy5iYXNlRmVlTXVsdGlwbGllciA9PT0gImZ1bmN0aW9uIikKICAgICAgICByZXR1cm4gY2hhaW4uZmVlcy5iYXNlRmVlTXVsdGlwbGllcih7CiAgICAgICAgICBibG9jazogYmxvY2tfLAogICAgICAgICAgY2xpZW50LAogICAgICAgICAgcmVxdWVzdAogICAgICAgIH0pOwogICAgICByZXR1cm4gY2hhaW4/LmZlZXM/LmJhc2VGZWVNdWx0aXBsaWVyID8/IDEuMjsKICAgIH0pKCk7CiAgICBpZiAoYmFzZUZlZU11bHRpcGxpZXIgPCAxKQogICAgICB0aHJvdyBuZXcgQmFzZUZlZVNjYWxhckVycm9yKCk7CiAgICBjb25zdCBkZWNpbWFscyA9IGJhc2VGZWVNdWx0aXBsaWVyLnRvU3RyaW5nKCkuc3BsaXQoIi4iKVsxXT8ubGVuZ3RoID8/IDA7CiAgICBjb25zdCBkZW5vbWluYXRvciA9IDEwICoqIGRlY2ltYWxzOwogICAgY29uc3QgbXVsdGlwbHkgPSAoYmFzZTIpID0+IGJhc2UyICogQmlnSW50KE1hdGguY2VpbChiYXNlRmVlTXVsdGlwbGllciAqIGRlbm9taW5hdG9yKSkgLyBCaWdJbnQoZGVub21pbmF0b3IpOwogICAgY29uc3QgYmxvY2sgPSBibG9ja18gPyBibG9ja18gOiBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRCbG9jaywgImdldEJsb2NrIikoe30pOwogICAgaWYgKHR5cGVvZiBjaGFpbj8uZmVlcz8uZXN0aW1hdGVGZWVzUGVyR2FzID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGNvbnN0IGZlZXMyID0gYXdhaXQgY2hhaW4uZmVlcy5lc3RpbWF0ZUZlZXNQZXJHYXMoewogICAgICAgIGJsb2NrOiBibG9ja18sCiAgICAgICAgY2xpZW50LAogICAgICAgIG11bHRpcGx5LAogICAgICAgIHJlcXVlc3QsCiAgICAgICAgdHlwZQogICAgICB9KTsKICAgICAgaWYgKGZlZXMyICE9PSBudWxsKQogICAgICAgIHJldHVybiBmZWVzMjsKICAgIH0KICAgIGlmICh0eXBlID09PSAiZWlwMTU1OSIpIHsKICAgICAgaWYgKHR5cGVvZiBibG9jay5iYXNlRmVlUGVyR2FzICE9PSAiYmlnaW50IikKICAgICAgICB0aHJvdyBuZXcgRWlwMTU1OUZlZXNOb3RTdXBwb3J0ZWRFcnJvcigpOwogICAgICBjb25zdCBtYXhQcmlvcml0eUZlZVBlckdhcyA9IHR5cGVvZiByZXF1ZXN0Py5tYXhQcmlvcml0eUZlZVBlckdhcyA9PT0gImJpZ2ludCIgPyByZXF1ZXN0Lm1heFByaW9yaXR5RmVlUGVyR2FzIDogYXdhaXQgaW50ZXJuYWxfZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcyhjbGllbnQsIHsKICAgICAgICBibG9jaywKICAgICAgICBjaGFpbiwKICAgICAgICByZXF1ZXN0CiAgICAgIH0pOwogICAgICBjb25zdCBiYXNlRmVlUGVyR2FzID0gbXVsdGlwbHkoYmxvY2suYmFzZUZlZVBlckdhcyk7CiAgICAgIGNvbnN0IG1heEZlZVBlckdhcyA9IHJlcXVlc3Q/Lm1heEZlZVBlckdhcyA/PyBiYXNlRmVlUGVyR2FzICsgbWF4UHJpb3JpdHlGZWVQZXJHYXM7CiAgICAgIHJldHVybiB7CiAgICAgICAgbWF4RmVlUGVyR2FzLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzCiAgICAgIH07CiAgICB9CiAgICBjb25zdCBnYXNQcmljZSA9IHJlcXVlc3Q/Lmdhc1ByaWNlID8/IG11bHRpcGx5KGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEdhc1ByaWNlLCAiZ2V0R2FzUHJpY2UiKSh7fSkpOwogICAgcmV0dXJuIHsKICAgICAgZ2FzUHJpY2UKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldFRyYW5zYWN0aW9uQ291bnQuanMKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25Db3VudChjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tUYWcgPSAibGF0ZXN0IiwgYmxvY2tOdW1iZXIgfSkgewogICAgY29uc3QgY291bnQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRUcmFuc2FjdGlvbkNvdW50IiwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYmxvY2tOdW1iZXIgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiBibG9ja1RhZ10KICAgIH0sIHsgZGVkdXBlOiBCb29sZWFuKGJsb2NrTnVtYmVyKSB9KTsKICAgIHJldHVybiBoZXhUb051bWJlcihjb3VudCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Jsb2IvYmxvYnNUb0NvbW1pdG1lbnRzLmpzCiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIGJsb2JzVG9Db21taXRtZW50cyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGt6ZyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IGJsb2JzID0gdHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gcGFyYW1ldGVycy5ibG9icy5tYXAoKHgpID0+IGhleFRvQnl0ZXMoeCkpIDogcGFyYW1ldGVycy5ibG9iczsKICAgIGNvbnN0IGNvbW1pdG1lbnRzID0gW107CiAgICBmb3IgKGNvbnN0IGJsb2Igb2YgYmxvYnMpCiAgICAgIGNvbW1pdG1lbnRzLnB1c2goVWludDhBcnJheS5mcm9tKGt6Zy5ibG9iVG9LemdDb21taXRtZW50KGJsb2IpKSk7CiAgICByZXR1cm4gdG8gPT09ICJieXRlcyIgPyBjb21taXRtZW50cyA6IGNvbW1pdG1lbnRzLm1hcCgoeCkgPT4gYnl0ZXNUb0hleCh4KSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Jsb2IvYmxvYnNUb1Byb29mcy5qcwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBibG9ic1RvUHJvb2ZzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsga3pnIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgdG8gPSBwYXJhbWV0ZXJzLnRvID8/ICh0eXBlb2YgcGFyYW1ldGVycy5ibG9ic1swXSA9PT0gInN0cmluZyIgPyAiaGV4IiA6ICJieXRlcyIpOwogICAgY29uc3QgYmxvYnMgPSB0eXBlb2YgcGFyYW1ldGVycy5ibG9ic1swXSA9PT0gInN0cmluZyIgPyBwYXJhbWV0ZXJzLmJsb2JzLm1hcCgoeCkgPT4gaGV4VG9CeXRlcyh4KSkgOiBwYXJhbWV0ZXJzLmJsb2JzOwogICAgY29uc3QgY29tbWl0bWVudHMgPSB0eXBlb2YgcGFyYW1ldGVycy5jb21taXRtZW50c1swXSA9PT0gInN0cmluZyIgPyBwYXJhbWV0ZXJzLmNvbW1pdG1lbnRzLm1hcCgoeCkgPT4gaGV4VG9CeXRlcyh4KSkgOiBwYXJhbWV0ZXJzLmNvbW1pdG1lbnRzOwogICAgY29uc3QgcHJvb2ZzID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2JzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IGJsb2IgPSBibG9ic1tpXTsKICAgICAgY29uc3QgY29tbWl0bWVudCA9IGNvbW1pdG1lbnRzW2ldOwogICAgICBwcm9vZnMucHVzaChVaW50OEFycmF5LmZyb20oa3pnLmNvbXB1dGVCbG9iS3pnUHJvb2YoYmxvYiwgY29tbWl0bWVudCkpKTsKICAgIH0KICAgIHJldHVybiB0byA9PT0gImJ5dGVzIiA/IHByb29mcyA6IHByb29mcy5tYXAoKHgpID0+IGJ5dGVzVG9IZXgoeCkpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL2NvbW1pdG1lbnRUb1ZlcnNpb25lZEhhc2guanMKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9zaGEyNTYuanMKICBpbml0X3NoYTI1NigpOwogIGluaXRfaXNIZXgoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gc2hhMjU2Mih2YWx1ZSwgdG9fKSB7CiAgICBjb25zdCB0byA9IHRvXyB8fCAiaGV4IjsKICAgIGNvbnN0IGJ5dGVzMiA9IHNoYTI1Nihpc0hleCh2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pID8gdG9CeXRlcyh2YWx1ZSkgOiB2YWx1ZSk7CiAgICBpZiAodG8gPT09ICJieXRlcyIpCiAgICAgIHJldHVybiBieXRlczI7CiAgICByZXR1cm4gdG9IZXgoYnl0ZXMyKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYmxvYi9jb21taXRtZW50VG9WZXJzaW9uZWRIYXNoLmpzCiAgZnVuY3Rpb24gY29tbWl0bWVudFRvVmVyc2lvbmVkSGFzaChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGNvbW1pdG1lbnQsIHZlcnNpb246IHZlcnNpb24zID0gMSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIGNvbW1pdG1lbnQgPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IHZlcnNpb25lZEhhc2ggPSBzaGEyNTYyKGNvbW1pdG1lbnQsICJieXRlcyIpOwogICAgdmVyc2lvbmVkSGFzaC5zZXQoW3ZlcnNpb24zXSwgMCk7CiAgICByZXR1cm4gdG8gPT09ICJieXRlcyIgPyB2ZXJzaW9uZWRIYXNoIDogYnl0ZXNUb0hleCh2ZXJzaW9uZWRIYXNoKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYmxvYi9jb21taXRtZW50c1RvVmVyc2lvbmVkSGFzaGVzLmpzCiAgZnVuY3Rpb24gY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlcyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGNvbW1pdG1lbnRzLCB2ZXJzaW9uOiB2ZXJzaW9uMyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIGNvbW1pdG1lbnRzWzBdID09PSAic3RyaW5nIiA/ICJoZXgiIDogImJ5dGVzIik7CiAgICBjb25zdCBoYXNoZXMgPSBbXTsKICAgIGZvciAoY29uc3QgY29tbWl0bWVudCBvZiBjb21taXRtZW50cykgewogICAgICBoYXNoZXMucHVzaChjb21taXRtZW50VG9WZXJzaW9uZWRIYXNoKHsKICAgICAgICBjb21taXRtZW50LAogICAgICAgIHRvLAogICAgICAgIHZlcnNpb246IHZlcnNpb24zCiAgICAgIH0pKTsKICAgIH0KICAgIHJldHVybiBoYXNoZXM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9ibG9iLmpzCiAgdmFyIGJsb2JzUGVyVHJhbnNhY3Rpb24gPSA2OwogIHZhciBieXRlc1BlckZpZWxkRWxlbWVudCA9IDMyOwogIHZhciBmaWVsZEVsZW1lbnRzUGVyQmxvYiA9IDQwOTY7CiAgdmFyIGJ5dGVzUGVyQmxvYiA9IGJ5dGVzUGVyRmllbGRFbGVtZW50ICogZmllbGRFbGVtZW50c1BlckJsb2I7CiAgdmFyIG1heEJ5dGVzUGVyVHJhbnNhY3Rpb24gPSBieXRlc1BlckJsb2IgKiBibG9ic1BlclRyYW5zYWN0aW9uIC0gLy8gdGVybWluYXRvciBieXRlICgweDgwKS4KICAxIC0gLy8gemVybyBieXRlICgweDAwKSBhcHBlbmRlZCB0byBlYWNoIGZpZWxkIGVsZW1lbnQuCiAgMSAqIGZpZWxkRWxlbWVudHNQZXJCbG9iICogYmxvYnNQZXJUcmFuc2FjdGlvbjsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMva3pnLmpzCiAgdmFyIHZlcnNpb25lZEhhc2hWZXJzaW9uS3pnID0gMTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvYmxvYi5qcwogIGluaXRfYmFzZSgpOwogIHZhciBCbG9iU2l6ZVRvb0xhcmdlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyBtYXhTaXplLCBzaXplOiBzaXplMyB9KSB7CiAgICAgIHN1cGVyKCJCbG9iIHNpemUgaXMgdG9vIGxhcmdlLiIsIHsKICAgICAgICBtZXRhTWVzc2FnZXM6IFtgTWF4OiAke21heFNpemV9IGJ5dGVzYCwgYEdpdmVuOiAke3NpemUzfSBieXRlc2BdLAogICAgICAgIG5hbWU6ICJCbG9iU2l6ZVRvb0xhcmdlRXJyb3IiCiAgICAgIH0pOwogICAgfQogIH07CiAgdmFyIEVtcHR5QmxvYkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiQmxvYiBkYXRhIG11c3Qgbm90IGJlIGVtcHR5LiIsIHsgbmFtZTogIkVtcHR5QmxvYkVycm9yIiB9KTsKICAgIH0KICB9OwogIHZhciBJbnZhbGlkVmVyc2lvbmVkSGFzaFNpemVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGhhc2g6IGhhc2gzLCBzaXplOiBzaXplMyB9KSB7CiAgICAgIHN1cGVyKGBWZXJzaW9uZWQgaGFzaCAiJHtoYXNoM30iIHNpemUgaXMgaW52YWxpZC5gLCB7CiAgICAgICAgbWV0YU1lc3NhZ2VzOiBbIkV4cGVjdGVkOiAzMiIsIGBSZWNlaXZlZDogJHtzaXplM31gXSwKICAgICAgICBuYW1lOiAiSW52YWxpZFZlcnNpb25lZEhhc2hTaXplRXJyb3IiCiAgICAgIH0pOwogICAgfQogIH07CiAgdmFyIEludmFsaWRWZXJzaW9uZWRIYXNoVmVyc2lvbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgaGFzaDogaGFzaDMsIHZlcnNpb246IHZlcnNpb24zIH0pIHsKICAgICAgc3VwZXIoYFZlcnNpb25lZCBoYXNoICIke2hhc2gzfSIgdmVyc2lvbiBpcyBpbnZhbGlkLmAsIHsKICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgIGBFeHBlY3RlZDogJHt2ZXJzaW9uZWRIYXNoVmVyc2lvbkt6Z31gLAogICAgICAgICAgYFJlY2VpdmVkOiAke3ZlcnNpb24zfWAKICAgICAgICBdLAogICAgICAgIG5hbWU6ICJJbnZhbGlkVmVyc2lvbmVkSGFzaFZlcnNpb25FcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL3RvQmxvYnMuanMKICBpbml0X2N1cnNvcjIoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gdG9CbG9icyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB0byA9IHBhcmFtZXRlcnMudG8gPz8gKHR5cGVvZiBwYXJhbWV0ZXJzLmRhdGEgPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgcGFyYW1ldGVycy5kYXRhID09PSAic3RyaW5nIiA/IGhleFRvQnl0ZXMocGFyYW1ldGVycy5kYXRhKSA6IHBhcmFtZXRlcnMuZGF0YTsKICAgIGNvbnN0IHNpemVfID0gc2l6ZShkYXRhKTsKICAgIGlmICghc2l6ZV8pCiAgICAgIHRocm93IG5ldyBFbXB0eUJsb2JFcnJvcigpOwogICAgaWYgKHNpemVfID4gbWF4Qnl0ZXNQZXJUcmFuc2FjdGlvbikKICAgICAgdGhyb3cgbmV3IEJsb2JTaXplVG9vTGFyZ2VFcnJvcih7CiAgICAgICAgbWF4U2l6ZTogbWF4Qnl0ZXNQZXJUcmFuc2FjdGlvbiwKICAgICAgICBzaXplOiBzaXplXwogICAgICB9KTsKICAgIGNvbnN0IGJsb2JzID0gW107CiAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgIGxldCBwb3NpdGlvbiA9IDA7CiAgICB3aGlsZSAoYWN0aXZlKSB7CiAgICAgIGNvbnN0IGJsb2IgPSBjcmVhdGVDdXJzb3IobmV3IFVpbnQ4QXJyYXkoYnl0ZXNQZXJCbG9iKSk7CiAgICAgIGxldCBzaXplMyA9IDA7CiAgICAgIHdoaWxlIChzaXplMyA8IGZpZWxkRWxlbWVudHNQZXJCbG9iKSB7CiAgICAgICAgY29uc3QgYnl0ZXMyID0gZGF0YS5zbGljZShwb3NpdGlvbiwgcG9zaXRpb24gKyAoYnl0ZXNQZXJGaWVsZEVsZW1lbnQgLSAxKSk7CiAgICAgICAgYmxvYi5wdXNoQnl0ZSgwKTsKICAgICAgICBibG9iLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIGlmIChieXRlczIubGVuZ3RoIDwgMzEpIHsKICAgICAgICAgIGJsb2IucHVzaEJ5dGUoMTI4KTsKICAgICAgICAgIGFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNpemUzKys7CiAgICAgICAgcG9zaXRpb24gKz0gMzE7CiAgICAgIH0KICAgICAgYmxvYnMucHVzaChibG9iKTsKICAgIH0KICAgIHJldHVybiB0byA9PT0gImJ5dGVzIiA/IGJsb2JzLm1hcCgoeCkgPT4geC5ieXRlcykgOiBibG9icy5tYXAoKHgpID0+IGJ5dGVzVG9IZXgoeC5ieXRlcykpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL3RvQmxvYlNpZGVjYXJzLmpzCiAgZnVuY3Rpb24gdG9CbG9iU2lkZWNhcnMocGFyYW1ldGVycykgewogICAgY29uc3QgeyBkYXRhLCBremcsIHRvIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgYmxvYnMgPSBwYXJhbWV0ZXJzLmJsb2JzID8/IHRvQmxvYnMoeyBkYXRhLCB0byB9KTsKICAgIGNvbnN0IGNvbW1pdG1lbnRzID0gcGFyYW1ldGVycy5jb21taXRtZW50cyA/PyBibG9ic1RvQ29tbWl0bWVudHMoeyBibG9icywga3pnLCB0byB9KTsKICAgIGNvbnN0IHByb29mcyA9IHBhcmFtZXRlcnMucHJvb2ZzID8/IGJsb2JzVG9Qcm9vZnMoeyBibG9icywgY29tbWl0bWVudHMsIGt6ZywgdG8gfSk7CiAgICBjb25zdCBzaWRlY2FycyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBibG9icy5sZW5ndGg7IGkrKykKICAgICAgc2lkZWNhcnMucHVzaCh7CiAgICAgICAgYmxvYjogYmxvYnNbaV0sCiAgICAgICAgY29tbWl0bWVudDogY29tbWl0bWVudHNbaV0sCiAgICAgICAgcHJvb2Y6IHByb29mc1tpXQogICAgICB9KTsKICAgIHJldHVybiBzaWRlY2FyczsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdC5qcwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL2dldFRyYW5zYWN0aW9uVHlwZS5qcwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb24pIHsKICAgIGlmICh0cmFuc2FjdGlvbi50eXBlKQogICAgICByZXR1cm4gdHJhbnNhY3Rpb24udHlwZTsKICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24uYXV0aG9yaXphdGlvbkxpc3QgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gImVpcDc3MDIiOwogICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbi5ibG9icyAhPT0gInVuZGVmaW5lZCIgfHwgdHlwZW9mIHRyYW5zYWN0aW9uLmJsb2JWZXJzaW9uZWRIYXNoZXMgIT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiB0cmFuc2FjdGlvbi5tYXhGZWVQZXJCbG9iR2FzICE9PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgdHJhbnNhY3Rpb24uc2lkZWNhcnMgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gImVpcDQ4NDQiOwogICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbi5tYXhGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiB0cmFuc2FjdGlvbi5tYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgcmV0dXJuICJlaXAxNTU5IjsKICAgIH0KICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24uZ2FzUHJpY2UgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24uYWNjZXNzTGlzdCAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgcmV0dXJuICJlaXAyOTMwIjsKICAgICAgcmV0dXJuICJsZWdhY3kiOwogICAgfQogICAgdGhyb3cgbmV3IEludmFsaWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbkVycm9yKHsgdHJhbnNhY3Rpb24gfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldENoYWluSWQuanMKICBpbml0X2Zyb21IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRDaGFpbklkKGNsaWVudCkgewogICAgY29uc3QgY2hhaW5JZEhleCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2NoYWluSWQiCiAgICB9LCB7IGRlZHVwZTogdHJ1ZSB9KTsKICAgIHJldHVybiBoZXhUb051bWJlcihjaGFpbklkSGV4KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdC5qcwogIHZhciBkZWZhdWx0UGFyYW1ldGVycyA9IFsKICAgICJibG9iVmVyc2lvbmVkSGFzaGVzIiwKICAgICJjaGFpbklkIiwKICAgICJmZWVzIiwKICAgICJnYXMiLAogICAgIm5vbmNlIiwKICAgICJ0eXBlIgogIF07CiAgYXN5bmMgZnVuY3Rpb24gcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdChjbGllbnQsIGFyZ3MpIHsKICAgIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudF8gPSBjbGllbnQuYWNjb3VudCwgYmxvYnMsIGNoYWluLCBnYXMsIGt6Zywgbm9uY2UsIHBhcmFtZXRlcnMgPSBkZWZhdWx0UGFyYW1ldGVycywgdHlwZSB9ID0gYXJnczsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICBjb25zdCByZXF1ZXN0ID0geyAuLi5hcmdzLCAuLi5hY2NvdW50ID8geyBmcm9tOiBhY2NvdW50Py5hZGRyZXNzIH0gOiB7fSB9OwogICAgbGV0IGJsb2NrOwogICAgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvY2syKCkgewogICAgICBpZiAoYmxvY2spCiAgICAgICAgcmV0dXJuIGJsb2NrOwogICAgICBibG9jayA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrLCAiZ2V0QmxvY2siKSh7IGJsb2NrVGFnOiAibGF0ZXN0IiB9KTsKICAgICAgcmV0dXJuIGJsb2NrOwogICAgfQogICAgbGV0IGNoYWluSWQ7CiAgICBhc3luYyBmdW5jdGlvbiBnZXRDaGFpbklkMigpIHsKICAgICAgaWYgKGNoYWluSWQpCiAgICAgICAgcmV0dXJuIGNoYWluSWQ7CiAgICAgIGlmIChjaGFpbikKICAgICAgICByZXR1cm4gY2hhaW4uaWQ7CiAgICAgIGlmICh0eXBlb2YgYXJncy5jaGFpbklkICE9PSAidW5kZWZpbmVkIikKICAgICAgICByZXR1cm4gYXJncy5jaGFpbklkOwogICAgICBjb25zdCBjaGFpbklkXyA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldENoYWluSWQsICJnZXRDaGFpbklkIikoe30pOwogICAgICBjaGFpbklkID0gY2hhaW5JZF87CiAgICAgIHJldHVybiBjaGFpbklkOwogICAgfQogICAgaWYgKChwYXJhbWV0ZXJzLmluY2x1ZGVzKCJibG9iVmVyc2lvbmVkSGFzaGVzIikgfHwgcGFyYW1ldGVycy5pbmNsdWRlcygic2lkZWNhcnMiKSkgJiYgYmxvYnMgJiYga3pnKSB7CiAgICAgIGNvbnN0IGNvbW1pdG1lbnRzID0gYmxvYnNUb0NvbW1pdG1lbnRzKHsgYmxvYnMsIGt6ZyB9KTsKICAgICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoImJsb2JWZXJzaW9uZWRIYXNoZXMiKSkgewogICAgICAgIGNvbnN0IHZlcnNpb25lZEhhc2hlcyA9IGNvbW1pdG1lbnRzVG9WZXJzaW9uZWRIYXNoZXMoewogICAgICAgICAgY29tbWl0bWVudHMsCiAgICAgICAgICB0bzogImhleCIKICAgICAgICB9KTsKICAgICAgICByZXF1ZXN0LmJsb2JWZXJzaW9uZWRIYXNoZXMgPSB2ZXJzaW9uZWRIYXNoZXM7CiAgICAgIH0KICAgICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoInNpZGVjYXJzIikpIHsKICAgICAgICBjb25zdCBwcm9vZnMgPSBibG9ic1RvUHJvb2ZzKHsgYmxvYnMsIGNvbW1pdG1lbnRzLCBremcgfSk7CiAgICAgICAgY29uc3Qgc2lkZWNhcnMgPSB0b0Jsb2JTaWRlY2Fycyh7CiAgICAgICAgICBibG9icywKICAgICAgICAgIGNvbW1pdG1lbnRzLAogICAgICAgICAgcHJvb2ZzLAogICAgICAgICAgdG86ICJoZXgiCiAgICAgICAgfSk7CiAgICAgICAgcmVxdWVzdC5zaWRlY2FycyA9IHNpZGVjYXJzOwogICAgICB9CiAgICB9CiAgICBpZiAocGFyYW1ldGVycy5pbmNsdWRlcygiY2hhaW5JZCIpKQogICAgICByZXF1ZXN0LmNoYWluSWQgPSBhd2FpdCBnZXRDaGFpbklkMigpOwogICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoIm5vbmNlIikgJiYgdHlwZW9mIG5vbmNlID09PSAidW5kZWZpbmVkIiAmJiBhY2NvdW50KSB7CiAgICAgIGlmIChhY2NvdW50Lm5vbmNlTWFuYWdlcikgewogICAgICAgIGNvbnN0IGNoYWluSWQyID0gYXdhaXQgZ2V0Q2hhaW5JZDIoKTsKICAgICAgICByZXF1ZXN0Lm5vbmNlID0gYXdhaXQgYWNjb3VudC5ub25jZU1hbmFnZXIuY29uc3VtZSh7CiAgICAgICAgICBhZGRyZXNzOiBhY2NvdW50LmFkZHJlc3MsCiAgICAgICAgICBjaGFpbklkOiBjaGFpbklkMiwKICAgICAgICAgIGNsaWVudAogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHJlcXVlc3Qubm9uY2UgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRUcmFuc2FjdGlvbkNvdW50LCAiZ2V0VHJhbnNhY3Rpb25Db3VudCIpKHsKICAgICAgICAgIGFkZHJlc3M6IGFjY291bnQuYWRkcmVzcywKICAgICAgICAgIGJsb2NrVGFnOiAicGVuZGluZyIKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgaWYgKChwYXJhbWV0ZXJzLmluY2x1ZGVzKCJmZWVzIikgfHwgcGFyYW1ldGVycy5pbmNsdWRlcygidHlwZSIpKSAmJiB0eXBlb2YgdHlwZSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXF1ZXN0LnR5cGUgPSBnZXRUcmFuc2FjdGlvblR5cGUocmVxdWVzdCk7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIGNvbnN0IGJsb2NrMiA9IGF3YWl0IGdldEJsb2NrMigpOwogICAgICAgIHJlcXVlc3QudHlwZSA9IHR5cGVvZiBibG9jazI/LmJhc2VGZWVQZXJHYXMgPT09ICJiaWdpbnQiID8gImVpcDE1NTkiIDogImxlZ2FjeSI7CiAgICAgIH0KICAgIH0KICAgIGlmIChwYXJhbWV0ZXJzLmluY2x1ZGVzKCJmZWVzIikpIHsKICAgICAgaWYgKHJlcXVlc3QudHlwZSAhPT0gImxlZ2FjeSIgJiYgcmVxdWVzdC50eXBlICE9PSAiZWlwMjkzMCIpIHsKICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3QubWF4RmVlUGVyR2FzID09PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgcmVxdWVzdC5tYXhQcmlvcml0eUZlZVBlckdhcyA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIGNvbnN0IGJsb2NrMiA9IGF3YWl0IGdldEJsb2NrMigpOwogICAgICAgICAgY29uc3QgeyBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzIH0gPSBhd2FpdCBpbnRlcm5hbF9lc3RpbWF0ZUZlZXNQZXJHYXMoY2xpZW50LCB7CiAgICAgICAgICAgIGJsb2NrOiBibG9jazIsCiAgICAgICAgICAgIGNoYWluLAogICAgICAgICAgICByZXF1ZXN0CiAgICAgICAgICB9KTsKICAgICAgICAgIGlmICh0eXBlb2YgYXJncy5tYXhQcmlvcml0eUZlZVBlckdhcyA9PT0gInVuZGVmaW5lZCIgJiYgYXJncy5tYXhGZWVQZXJHYXMgJiYgYXJncy5tYXhGZWVQZXJHYXMgPCBtYXhQcmlvcml0eUZlZVBlckdhcykKICAgICAgICAgICAgdGhyb3cgbmV3IE1heEZlZVBlckdhc1Rvb0xvd0Vycm9yKHsKICAgICAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhcwogICAgICAgICAgICB9KTsKICAgICAgICAgIHJlcXVlc3QubWF4UHJpb3JpdHlGZWVQZXJHYXMgPSBtYXhQcmlvcml0eUZlZVBlckdhczsKICAgICAgICAgIHJlcXVlc3QubWF4RmVlUGVyR2FzID0gbWF4RmVlUGVyR2FzOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAodHlwZW9mIGFyZ3MubWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgYXJncy5tYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgICB0aHJvdyBuZXcgRWlwMTU1OUZlZXNOb3RTdXBwb3J0ZWRFcnJvcigpOwogICAgICAgIGNvbnN0IGJsb2NrMiA9IGF3YWl0IGdldEJsb2NrMigpOwogICAgICAgIGNvbnN0IHsgZ2FzUHJpY2U6IGdhc1ByaWNlXyB9ID0gYXdhaXQgaW50ZXJuYWxfZXN0aW1hdGVGZWVzUGVyR2FzKGNsaWVudCwgewogICAgICAgICAgYmxvY2s6IGJsb2NrMiwKICAgICAgICAgIGNoYWluLAogICAgICAgICAgcmVxdWVzdCwKICAgICAgICAgIHR5cGU6ICJsZWdhY3kiCiAgICAgICAgfSk7CiAgICAgICAgcmVxdWVzdC5nYXNQcmljZSA9IGdhc1ByaWNlXzsKICAgICAgfQogICAgfQogICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoImdhcyIpICYmIHR5cGVvZiBnYXMgPT09ICJ1bmRlZmluZWQiKQogICAgICByZXF1ZXN0LmdhcyA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGVzdGltYXRlR2FzLCAiZXN0aW1hdGVHYXMiKSh7CiAgICAgICAgLi4ucmVxdWVzdCwKICAgICAgICBhY2NvdW50OiBhY2NvdW50ID8geyBhZGRyZXNzOiBhY2NvdW50LmFkZHJlc3MsIHR5cGU6ICJqc29uLXJwYyIgfSA6IHZvaWQgMAogICAgICB9KTsKICAgIGFzc2VydFJlcXVlc3QocmVxdWVzdCk7CiAgICBkZWxldGUgcmVxdWVzdC5wYXJhbWV0ZXJzOwogICAgcmV0dXJuIHJlcXVlc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEJhbGFuY2UuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0QmFsYW5jZShjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tOdW1iZXIsIGJsb2NrVGFnID0gImxhdGVzdCIgfSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgIGNvbnN0IGJhbGFuY2UgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRCYWxhbmNlIiwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWddCiAgICB9KTsKICAgIHJldHVybiBCaWdJbnQoYmFsYW5jZSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2VzdGltYXRlR2FzLmpzCiAgYXN5bmMgZnVuY3Rpb24gZXN0aW1hdGVHYXMoY2xpZW50LCBhcmdzKSB7CiAgICBjb25zdCBhY2NvdW50XyA9IGFyZ3MuYWNjb3VudCA/PyBjbGllbnQuYWNjb3VudDsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICB0cnkgewogICAgICBsZXQgZXN0aW1hdGVHYXNfcnBjID0gZnVuY3Rpb24ocGFyYW1ldGVycykgewogICAgICAgIGNvbnN0IHsgYmxvY2s6IGJsb2NrMiwgcmVxdWVzdDogcmVxdWVzdDIsIHJwY1N0YXRlT3ZlcnJpZGU6IHJwY1N0YXRlT3ZlcnJpZGUyIH0gPSBwYXJhbWV0ZXJzOwogICAgICAgIHJldHVybiBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgICBtZXRob2Q6ICJldGhfZXN0aW1hdGVHYXMiLAogICAgICAgICAgcGFyYW1zOiBycGNTdGF0ZU92ZXJyaWRlMiA/IFtyZXF1ZXN0MiwgYmxvY2syID8/ICJsYXRlc3QiLCBycGNTdGF0ZU92ZXJyaWRlMl0gOiBibG9jazIgPyBbcmVxdWVzdDIsIGJsb2NrMl0gOiBbcmVxdWVzdDJdCiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIGNvbnN0IHsgYWNjZXNzTGlzdCwgYXV0aG9yaXphdGlvbkxpc3QsIGJsb2JzLCBibG9iVmVyc2lvbmVkSGFzaGVzLCBibG9ja051bWJlciwgYmxvY2tUYWcsIGRhdGEsIGdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckJsb2JHYXMsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIG5vbmNlLCB2YWx1ZSwgc3RhdGVPdmVycmlkZSwgLi4ucmVzdCB9ID0gYXdhaXQgcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdChjbGllbnQsIHsKICAgICAgICAuLi5hcmdzLAogICAgICAgIHBhcmFtZXRlcnM6ICgKICAgICAgICAgIC8vIFNvbWUgUlBDIFByb3ZpZGVycyBkbyBub3QgY29tcHV0ZSB2ZXJzaW9uZWQgaGFzaGVzIGZyb20gYmxvYnMuIFdlIHdpbGwgbmVlZAogICAgICAgICAgLy8gdG8gY29tcHV0ZSB0aGVtLgogICAgICAgICAgYWNjb3VudD8udHlwZSA9PT0gImxvY2FsIiA/IHZvaWQgMCA6IFsiYmxvYlZlcnNpb25lZEhhc2hlcyJdCiAgICAgICAgKQogICAgICB9KTsKICAgICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgICAgY29uc3QgYmxvY2sgPSBibG9ja051bWJlckhleCB8fCBibG9ja1RhZzsKICAgICAgY29uc3QgcnBjU3RhdGVPdmVycmlkZSA9IHNlcmlhbGl6ZVN0YXRlT3ZlcnJpZGUoc3RhdGVPdmVycmlkZSk7CiAgICAgIGNvbnN0IHRvID0gYXdhaXQgKGFzeW5jICgpID0+IHsKICAgICAgICBpZiAocmVzdC50bykKICAgICAgICAgIHJldHVybiByZXN0LnRvOwogICAgICAgIGlmIChhdXRob3JpemF0aW9uTGlzdCAmJiBhdXRob3JpemF0aW9uTGlzdC5sZW5ndGggPiAwKQogICAgICAgICAgcmV0dXJuIGF3YWl0IHJlY292ZXJBdXRob3JpemF0aW9uQWRkcmVzcyh7CiAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGF1dGhvcml6YXRpb25MaXN0WzBdCiAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgdG9gIGlzIHJlcXVpcmVkLiBDb3VsZCBub3QgaW5mZXIgZnJvbSBgYXV0aG9yaXphdGlvbkxpc3RgIik7CiAgICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9KSgpOwogICAgICBhc3NlcnRSZXF1ZXN0KGFyZ3MpOwogICAgICBjb25zdCBjaGFpbkZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb25SZXF1ZXN0Py5mb3JtYXQ7CiAgICAgIGNvbnN0IGZvcm1hdCA9IGNoYWluRm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgICAgY29uc3QgcmVxdWVzdCA9IGZvcm1hdCh7CiAgICAgICAgLy8gUGljayBvdXQgZXh0cmEgZGF0YSB0aGF0IG1pZ2h0IGV4aXN0IG9uIHRoZSBjaGFpbidzIHRyYW5zYWN0aW9uIHJlcXVlc3QgdHlwZS4KICAgICAgICAuLi5leHRyYWN0KHJlc3QsIHsgZm9ybWF0OiBjaGFpbkZvcm1hdCB9KSwKICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgIGFjY2Vzc0xpc3QsCiAgICAgICAgYXV0aG9yaXphdGlvbkxpc3QsCiAgICAgICAgYmxvYnMsCiAgICAgICAgYmxvYlZlcnNpb25lZEhhc2hlcywKICAgICAgICBkYXRhLAogICAgICAgIGdhcywKICAgICAgICBnYXNQcmljZSwKICAgICAgICBtYXhGZWVQZXJCbG9iR2FzLAogICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhcywKICAgICAgICBub25jZSwKICAgICAgICB0bywKICAgICAgICB2YWx1ZQogICAgICB9KTsKICAgICAgbGV0IGVzdGltYXRlID0gQmlnSW50KGF3YWl0IGVzdGltYXRlR2FzX3JwYyh7IGJsb2NrLCByZXF1ZXN0LCBycGNTdGF0ZU92ZXJyaWRlIH0pKTsKICAgICAgaWYgKGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICAgICAgY29uc3QgdmFsdWUyID0gYXdhaXQgZ2V0QmFsYW5jZShjbGllbnQsIHsgYWRkcmVzczogcmVxdWVzdC5mcm9tIH0pOwogICAgICAgIGNvbnN0IGVzdGltYXRlcyA9IGF3YWl0IFByb21pc2UuYWxsKGF1dGhvcml6YXRpb25MaXN0Lm1hcChhc3luYyAoYXV0aG9yaXphdGlvbikgPT4gewogICAgICAgICAgY29uc3QgeyBjb250cmFjdEFkZHJlc3MgfSA9IGF1dGhvcml6YXRpb247CiAgICAgICAgICBjb25zdCBlc3RpbWF0ZTIgPSBhd2FpdCBlc3RpbWF0ZUdhc19ycGMoewogICAgICAgICAgICBibG9jaywKICAgICAgICAgICAgcmVxdWVzdDogewogICAgICAgICAgICAgIGF1dGhvcml6YXRpb25MaXN0OiB2b2lkIDAsCiAgICAgICAgICAgICAgZGF0YSwKICAgICAgICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgICAgICAgIHRvOiBjb250cmFjdEFkZHJlc3MsCiAgICAgICAgICAgICAgdmFsdWU6IG51bWJlclRvSGV4KHZhbHVlMikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcnBjU3RhdGVPdmVycmlkZQogICAgICAgICAgfSkuY2F0Y2goKCkgPT4gMTAwMDAwbik7CiAgICAgICAgICByZXR1cm4gMm4gKiBCaWdJbnQoZXN0aW1hdGUyKTsKICAgICAgICB9KSk7CiAgICAgICAgZXN0aW1hdGUgKz0gZXN0aW1hdGVzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLCAwbik7CiAgICAgIH0KICAgICAgcmV0dXJuIGVzdGltYXRlOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIHRocm93IGdldEVzdGltYXRlR2FzRXJyb3IoZXJyLCB7CiAgICAgICAgLi4uYXJncywKICAgICAgICBhY2NvdW50LAogICAgICAgIGNoYWluOiBjbGllbnQuY2hhaW4KICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2VzdGltYXRlQ29udHJhY3RHYXMuanMKICBhc3luYyBmdW5jdGlvbiBlc3RpbWF0ZUNvbnRyYWN0R2FzKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGZ1bmN0aW9uTmFtZSwgLi4ucmVxdWVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVGdW5jdGlvbkRhdGEoewogICAgICBhYmk6IGFiaTIsCiAgICAgIGFyZ3MsCiAgICAgIGZ1bmN0aW9uTmFtZQogICAgfSk7CiAgICB0cnkgewogICAgICBjb25zdCBnYXMgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBlc3RpbWF0ZUdhcywgImVzdGltYXRlR2FzIikoewogICAgICAgIGRhdGEsCiAgICAgICAgdG86IGFkZHJlc3MsCiAgICAgICAgLi4ucmVxdWVzdAogICAgICB9KTsKICAgICAgcmV0dXJuIGdhczsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnN0IGFjY291bnQgPSByZXF1ZXN0LmFjY291bnQgPyBwYXJzZUFjY291bnQocmVxdWVzdC5hY2NvdW50KSA6IHZvaWQgMDsKICAgICAgdGhyb3cgZ2V0Q29udHJhY3RFcnJvcihlcnJvciwgewogICAgICAgIGFiaTogYWJpMiwKICAgICAgICBhZGRyZXNzLAogICAgICAgIGFyZ3MsCiAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9jb250cmFjdC9lc3RpbWF0ZUNvbnRyYWN0R2FzIiwKICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgc2VuZGVyOiBhY2NvdW50Py5hZGRyZXNzCiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRDb250cmFjdEV2ZW50cy5qcwogIGluaXRfZ2V0QWJpSXRlbSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9wYXJzZUV2ZW50TG9ncy5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9pc0FkZHJlc3NFcXVhbCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfa2VjY2FrMjU2KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZUV2ZW50TG9nLmpzCiAgaW5pdF9hYmkoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvRXZlbnRTZWxlY3RvcigpOwogIGluaXRfY3Vyc29yKCk7CiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9mb3JtYXRBYmlJdGVtMigpOwogIHZhciBkb2NzUGF0aDMgPSAiL2RvY3MvY29udHJhY3QvZGVjb2RlRXZlbnRMb2ciOwogIGZ1bmN0aW9uIGRlY29kZUV2ZW50TG9nKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBkYXRhLCBzdHJpY3Q6IHN0cmljdF8sIHRvcGljcyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHN0cmljdCA9IHN0cmljdF8gPz8gdHJ1ZTsKICAgIGNvbnN0IFtzaWduYXR1cmUsIC4uLmFyZ1RvcGljc10gPSB0b3BpY3M7CiAgICBpZiAoIXNpZ25hdHVyZSkKICAgICAgdGhyb3cgbmV3IEFiaUV2ZW50U2lnbmF0dXJlRW1wdHlUb3BpY3NFcnJvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDMgfSk7CiAgICBjb25zdCBhYmlJdGVtID0gYWJpMi5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICJldmVudCIgJiYgc2lnbmF0dXJlID09PSB0b0V2ZW50U2VsZWN0b3IoZm9ybWF0QWJpSXRlbTIoeCkpKTsKICAgIGlmICghKGFiaUl0ZW0gJiYgIm5hbWUiIGluIGFiaUl0ZW0pIHx8IGFiaUl0ZW0udHlwZSAhPT0gImV2ZW50IikKICAgICAgdGhyb3cgbmV3IEFiaUV2ZW50U2lnbmF0dXJlTm90Rm91bmRFcnJvcihzaWduYXR1cmUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoMyB9KTsKICAgIGNvbnN0IHsgbmFtZSwgaW5wdXRzIH0gPSBhYmlJdGVtOwogICAgY29uc3QgaXNVbm5hbWVkID0gaW5wdXRzPy5zb21lKCh4KSA9PiAhKCJuYW1lIiBpbiB4ICYmIHgubmFtZSkpOwogICAgbGV0IGFyZ3MgPSBpc1VubmFtZWQgPyBbXSA6IHt9OwogICAgY29uc3QgaW5kZXhlZElucHV0cyA9IGlucHV0cy5maWx0ZXIoKHgpID0+ICJpbmRleGVkIiBpbiB4ICYmIHguaW5kZXhlZCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4ZWRJbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgcGFyYW0gPSBpbmRleGVkSW5wdXRzW2ldOwogICAgICBjb25zdCB0b3BpYyA9IGFyZ1RvcGljc1tpXTsKICAgICAgaWYgKCF0b3BpYykKICAgICAgICB0aHJvdyBuZXcgRGVjb2RlTG9nVG9waWNzTWlzbWF0Y2goewogICAgICAgICAgYWJpSXRlbSwKICAgICAgICAgIHBhcmFtCiAgICAgICAgfSk7CiAgICAgIGFyZ3NbaXNVbm5hbWVkID8gaSA6IHBhcmFtLm5hbWUgfHwgaV0gPSBkZWNvZGVUb3BpYyh7IHBhcmFtLCB2YWx1ZTogdG9waWMgfSk7CiAgICB9CiAgICBjb25zdCBub25JbmRleGVkSW5wdXRzID0gaW5wdXRzLmZpbHRlcigoeCkgPT4gISgiaW5kZXhlZCIgaW4geCAmJiB4LmluZGV4ZWQpKTsKICAgIGlmIChub25JbmRleGVkSW5wdXRzLmxlbmd0aCA+IDApIHsKICAgICAgaWYgKGRhdGEgJiYgZGF0YSAhPT0gIjB4IikgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IGRlY29kZUFiaVBhcmFtZXRlcnMobm9uSW5kZXhlZElucHV0cywgZGF0YSk7CiAgICAgICAgICBpZiAoZGVjb2RlZERhdGEpIHsKICAgICAgICAgICAgaWYgKGlzVW5uYW1lZCkKICAgICAgICAgICAgICBhcmdzID0gWy4uLmFyZ3MsIC4uLmRlY29kZWREYXRhXTsKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub25JbmRleGVkSW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBhcmdzW25vbkluZGV4ZWRJbnB1dHNbaV0ubmFtZV0gPSBkZWNvZGVkRGF0YVtpXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGlmIChzdHJpY3QpIHsKICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yIHx8IGVyciBpbnN0YW5jZW9mIFBvc2l0aW9uT3V0T2ZCb3VuZHNFcnJvcikKICAgICAgICAgICAgICB0aHJvdyBuZXcgRGVjb2RlTG9nRGF0YU1pc21hdGNoKHsKICAgICAgICAgICAgICAgIGFiaUl0ZW0sCiAgICAgICAgICAgICAgICBkYXRhLAogICAgICAgICAgICAgICAgcGFyYW1zOiBub25JbmRleGVkSW5wdXRzLAogICAgICAgICAgICAgICAgc2l6ZTogc2l6ZShkYXRhKQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHN0cmljdCkgewogICAgICAgIHRocm93IG5ldyBEZWNvZGVMb2dEYXRhTWlzbWF0Y2goewogICAgICAgICAgYWJpSXRlbSwKICAgICAgICAgIGRhdGE6ICIweCIsCiAgICAgICAgICBwYXJhbXM6IG5vbkluZGV4ZWRJbnB1dHMsCiAgICAgICAgICBzaXplOiAwCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB7CiAgICAgIGV2ZW50TmFtZTogbmFtZSwKICAgICAgYXJnczogT2JqZWN0LnZhbHVlcyhhcmdzKS5sZW5ndGggPiAwID8gYXJncyA6IHZvaWQgMAogICAgfTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlVG9waWMoeyBwYXJhbSwgdmFsdWUgfSkgewogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJzdHJpbmciIHx8IHBhcmFtLnR5cGUgPT09ICJieXRlcyIgfHwgcGFyYW0udHlwZSA9PT0gInR1cGxlIiB8fCBwYXJhbS50eXBlLm1hdGNoKC9eKC4qKVxbKFxkKyk/XF0kLykpCiAgICAgIHJldHVybiB2YWx1ZTsKICAgIGNvbnN0IGRlY29kZWRBcmcgPSBkZWNvZGVBYmlQYXJhbWV0ZXJzKFtwYXJhbV0sIHZhbHVlKSB8fCBbXTsKICAgIHJldHVybiBkZWNvZGVkQXJnWzBdOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvcGFyc2VFdmVudExvZ3MuanMKICBpbml0X2dldEFiaUl0ZW0oKTsKICBmdW5jdGlvbiBwYXJzZUV2ZW50TG9ncyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYXJncywgbG9ncywgc3RyaWN0ID0gdHJ1ZSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGV2ZW50TmFtZSA9ICgoKSA9PiB7CiAgICAgIGlmICghcGFyYW1ldGVycy5ldmVudE5hbWUpCiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1ldGVycy5ldmVudE5hbWUpKQogICAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmV2ZW50TmFtZTsKICAgICAgcmV0dXJuIFtwYXJhbWV0ZXJzLmV2ZW50TmFtZV07CiAgICB9KSgpOwogICAgcmV0dXJuIGxvZ3MubWFwKChsb2cpID0+IHsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBhYmlJdGVtID0gZ2V0QWJpSXRlbSh7CiAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICBuYW1lOiBsb2cudG9waWNzWzBdCiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFhYmlJdGVtKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgY29uc3QgZXZlbnQgPSBkZWNvZGVFdmVudExvZyh7CiAgICAgICAgICAuLi5sb2csCiAgICAgICAgICBhYmk6IFthYmlJdGVtXSwKICAgICAgICAgIHN0cmljdAogICAgICAgIH0pOwogICAgICAgIGlmIChldmVudE5hbWUgJiYgIWV2ZW50TmFtZS5pbmNsdWRlcyhldmVudC5ldmVudE5hbWUpKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKCFpbmNsdWRlc0FyZ3MoewogICAgICAgICAgYXJnczogZXZlbnQuYXJncywKICAgICAgICAgIGlucHV0czogYWJpSXRlbS5pbnB1dHMsCiAgICAgICAgICBtYXRjaEFyZ3M6IGFyZ3MKICAgICAgICB9KSkKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIHJldHVybiB7IC4uLmV2ZW50LCAuLi5sb2cgfTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgbGV0IGV2ZW50TmFtZTI7CiAgICAgICAgbGV0IGlzVW5uYW1lZDsKICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgQWJpRXZlbnRTaWduYXR1cmVOb3RGb3VuZEVycm9yKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIERlY29kZUxvZ0RhdGFNaXNtYXRjaCB8fCBlcnIgaW5zdGFuY2VvZiBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCkgewogICAgICAgICAgaWYgKHN0cmljdCkKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICBldmVudE5hbWUyID0gZXJyLmFiaUl0ZW0ubmFtZTsKICAgICAgICAgIGlzVW5uYW1lZCA9IGVyci5hYmlJdGVtLmlucHV0cz8uc29tZSgoeCkgPT4gISgibmFtZSIgaW4geCAmJiB4Lm5hbWUpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgLi4ubG9nLCBhcmdzOiBpc1VubmFtZWQgPyBbXSA6IHt9LCBldmVudE5hbWU6IGV2ZW50TmFtZTIgfTsKICAgICAgfQogICAgfSkuZmlsdGVyKEJvb2xlYW4pOwogIH0KICBmdW5jdGlvbiBpbmNsdWRlc0FyZ3MocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhcmdzLCBpbnB1dHMsIG1hdGNoQXJncyB9ID0gcGFyYW1ldGVyczsKICAgIGlmICghbWF0Y2hBcmdzKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICghYXJncykKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZnVuY3Rpb24gaXNFcXVhbChpbnB1dCwgdmFsdWUsIGFyZykgewogICAgICB0cnkgewogICAgICAgIGlmIChpbnB1dC50eXBlID09PSAiYWRkcmVzcyIpCiAgICAgICAgICByZXR1cm4gaXNBZGRyZXNzRXF1YWwodmFsdWUsIGFyZyk7CiAgICAgICAgaWYgKGlucHV0LnR5cGUgPT09ICJzdHJpbmciIHx8IGlucHV0LnR5cGUgPT09ICJieXRlcyIpCiAgICAgICAgICByZXR1cm4ga2VjY2FrMjU2KHRvQnl0ZXModmFsdWUpKSA9PT0gYXJnOwogICAgICAgIHJldHVybiB2YWx1ZSA9PT0gYXJnOwogICAgICB9IGNhdGNoIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3MpICYmIEFycmF5LmlzQXJyYXkobWF0Y2hBcmdzKSkgewogICAgICByZXR1cm4gbWF0Y2hBcmdzLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgyKSA9PiB7CiAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRzW2luZGV4Ml07CiAgICAgICAgaWYgKCFpbnB1dCkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBjb25zdCB2YWx1ZV8gPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTsKICAgICAgICByZXR1cm4gdmFsdWVfLnNvbWUoKHZhbHVlMikgPT4gaXNFcXVhbChpbnB1dCwgdmFsdWUyLCBhcmdzW2luZGV4Ml0pKTsKICAgICAgfSk7CiAgICB9CiAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICJvYmplY3QiICYmICFBcnJheS5pc0FycmF5KGFyZ3MpICYmIHR5cGVvZiBtYXRjaEFyZ3MgPT09ICJvYmplY3QiICYmICFBcnJheS5pc0FycmF5KG1hdGNoQXJncykpCiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhtYXRjaEFyZ3MpLmV2ZXJ5KChba2V5LCB2YWx1ZV0pID0+IHsKICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dHMuZmluZCgoaW5wdXQyKSA9PiBpbnB1dDIubmFtZSA9PT0ga2V5KTsKICAgICAgICBpZiAoIWlucHV0KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGNvbnN0IHZhbHVlXyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdOwogICAgICAgIHJldHVybiB2YWx1ZV8uc29tZSgodmFsdWUyKSA9PiBpc0VxdWFsKGlucHV0LCB2YWx1ZTIsIGFyZ3Nba2V5XSkpOwogICAgICB9KTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0TG9ncy5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2xvZy5qcwogIGZ1bmN0aW9uIGZvcm1hdExvZyhsb2csIHsgYXJncywgZXZlbnROYW1lIH0gPSB7fSkgewogICAgcmV0dXJuIHsKICAgICAgLi4ubG9nLAogICAgICBibG9ja0hhc2g6IGxvZy5ibG9ja0hhc2ggPyBsb2cuYmxvY2tIYXNoIDogbnVsbCwKICAgICAgYmxvY2tOdW1iZXI6IGxvZy5ibG9ja051bWJlciA/IEJpZ0ludChsb2cuYmxvY2tOdW1iZXIpIDogbnVsbCwKICAgICAgbG9nSW5kZXg6IGxvZy5sb2dJbmRleCA/IE51bWJlcihsb2cubG9nSW5kZXgpIDogbnVsbCwKICAgICAgdHJhbnNhY3Rpb25IYXNoOiBsb2cudHJhbnNhY3Rpb25IYXNoID8gbG9nLnRyYW5zYWN0aW9uSGFzaCA6IG51bGwsCiAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IGxvZy50cmFuc2FjdGlvbkluZGV4ID8gTnVtYmVyKGxvZy50cmFuc2FjdGlvbkluZGV4KSA6IG51bGwsCiAgICAgIC4uLmV2ZW50TmFtZSA/IHsgYXJncywgZXZlbnROYW1lIH0gOiB7fQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0TG9ncy5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldExvZ3MoY2xpZW50LCB7IGFkZHJlc3MsIGJsb2NrSGFzaCwgZnJvbUJsb2NrLCB0b0Jsb2NrLCBldmVudCwgZXZlbnRzOiBldmVudHNfLCBhcmdzLCBzdHJpY3Q6IHN0cmljdF8gfSA9IHt9KSB7CiAgICBjb25zdCBzdHJpY3QgPSBzdHJpY3RfID8/IGZhbHNlOwogICAgY29uc3QgZXZlbnRzID0gZXZlbnRzXyA/PyAoZXZlbnQgPyBbZXZlbnRdIDogdm9pZCAwKTsKICAgIGxldCB0b3BpY3MgPSBbXTsKICAgIGlmIChldmVudHMpIHsKICAgICAgY29uc3QgZW5jb2RlZCA9IGV2ZW50cy5mbGF0TWFwKChldmVudDIpID0+IGVuY29kZUV2ZW50VG9waWNzKHsKICAgICAgICBhYmk6IFtldmVudDJdLAogICAgICAgIGV2ZW50TmFtZTogZXZlbnQyLm5hbWUsCiAgICAgICAgYXJnczogZXZlbnRzXyA/IHZvaWQgMCA6IGFyZ3MKICAgICAgfSkpOwogICAgICB0b3BpY3MgPSBbZW5jb2RlZF07CiAgICAgIGlmIChldmVudCkKICAgICAgICB0b3BpY3MgPSB0b3BpY3NbMF07CiAgICB9CiAgICBsZXQgbG9nczsKICAgIGlmIChibG9ja0hhc2gpIHsKICAgICAgbG9ncyA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0TG9ncyIsCiAgICAgICAgcGFyYW1zOiBbeyBhZGRyZXNzLCB0b3BpY3MsIGJsb2NrSGFzaCB9XQogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGxvZ3MgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXRoX2dldExvZ3MiLAogICAgICAgIHBhcmFtczogWwogICAgICAgICAgewogICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICB0b3BpY3MsCiAgICAgICAgICAgIGZyb21CbG9jazogdHlwZW9mIGZyb21CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleChmcm9tQmxvY2spIDogZnJvbUJsb2NrLAogICAgICAgICAgICB0b0Jsb2NrOiB0eXBlb2YgdG9CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleCh0b0Jsb2NrKSA6IHRvQmxvY2sKICAgICAgICAgIH0KICAgICAgICBdCiAgICAgIH0pOwogICAgfQogICAgY29uc3QgZm9ybWF0dGVkTG9ncyA9IGxvZ3MubWFwKChsb2cpID0+IGZvcm1hdExvZyhsb2cpKTsKICAgIGlmICghZXZlbnRzKQogICAgICByZXR1cm4gZm9ybWF0dGVkTG9nczsKICAgIHJldHVybiBwYXJzZUV2ZW50TG9ncyh7CiAgICAgIGFiaTogZXZlbnRzLAogICAgICBhcmdzLAogICAgICBsb2dzOiBmb3JtYXR0ZWRMb2dzLAogICAgICBzdHJpY3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRDb250cmFjdEV2ZW50cy5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldENvbnRyYWN0RXZlbnRzKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGJsb2NrSGFzaCwgZXZlbnROYW1lLCBmcm9tQmxvY2ssIHRvQmxvY2ssIHN0cmljdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGV2ZW50ID0gZXZlbnROYW1lID8gZ2V0QWJpSXRlbSh7IGFiaTogYWJpMiwgbmFtZTogZXZlbnROYW1lIH0pIDogdm9pZCAwOwogICAgY29uc3QgZXZlbnRzID0gIWV2ZW50ID8gYWJpMi5maWx0ZXIoKHgpID0+IHgudHlwZSA9PT0gImV2ZW50IikgOiB2b2lkIDA7CiAgICByZXR1cm4gZ2V0QWN0aW9uKGNsaWVudCwgZ2V0TG9ncywgImdldExvZ3MiKSh7CiAgICAgIGFkZHJlc3MsCiAgICAgIGFyZ3MsCiAgICAgIGJsb2NrSGFzaCwKICAgICAgZXZlbnQsCiAgICAgIGV2ZW50cywKICAgICAgZnJvbUJsb2NrLAogICAgICB0b0Jsb2NrLAogICAgICBzdHJpY3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9yZWFkQ29udHJhY3QuanMKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2NhbGwoKTsKICBhc3luYyBmdW5jdGlvbiByZWFkQ29udHJhY3QoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYWRkcmVzcywgYXJncywgZnVuY3Rpb25OYW1lLCAuLi5yZXN0IH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgY2FsbGRhdGEgPSBlbmNvZGVGdW5jdGlvbkRhdGEoewogICAgICBhYmk6IGFiaTIsCiAgICAgIGFyZ3MsCiAgICAgIGZ1bmN0aW9uTmFtZQogICAgfSk7CiAgICB0cnkgewogICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGNhbGwsICJjYWxsIikoewogICAgICAgIC4uLnJlc3QsCiAgICAgICAgZGF0YTogY2FsbGRhdGEsCiAgICAgICAgdG86IGFkZHJlc3MKICAgICAgfSk7CiAgICAgIHJldHVybiBkZWNvZGVGdW5jdGlvblJlc3VsdCh7CiAgICAgICAgYWJpOiBhYmkyLAogICAgICAgIGFyZ3MsCiAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgIGRhdGE6IGRhdGEgfHwgIjB4IgogICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHRocm93IGdldENvbnRyYWN0RXJyb3IoZXJyb3IsIHsKICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3QvcmVhZENvbnRyYWN0IiwKICAgICAgICBmdW5jdGlvbk5hbWUKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3NpbXVsYXRlQ29udHJhY3QuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGluaXRfZGVjb2RlRnVuY3Rpb25SZXN1bHQoKTsKICBpbml0X2VuY29kZUZ1bmN0aW9uRGF0YSgpOwogIGluaXRfY2FsbCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNpbXVsYXRlQ29udHJhY3QoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYWRkcmVzcywgYXJncywgZGF0YVN1ZmZpeCwgZnVuY3Rpb25OYW1lLCAuLi5jYWxsUmVxdWVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGFjY291bnQgPSBjYWxsUmVxdWVzdC5hY2NvdW50ID8gcGFyc2VBY2NvdW50KGNhbGxSZXF1ZXN0LmFjY291bnQpIDogY2xpZW50LmFjY291bnQ7CiAgICBjb25zdCBjYWxsZGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7IGFiaTogYWJpMiwgYXJncywgZnVuY3Rpb25OYW1lIH0pOwogICAgdHJ5IHsKICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBjYWxsLCAiY2FsbCIpKHsKICAgICAgICBiYXRjaDogZmFsc2UsCiAgICAgICAgZGF0YTogYCR7Y2FsbGRhdGF9JHtkYXRhU3VmZml4ID8gZGF0YVN1ZmZpeC5yZXBsYWNlKCIweCIsICIiKSA6ICIifWAsCiAgICAgICAgdG86IGFkZHJlc3MsCiAgICAgICAgLi4uY2FsbFJlcXVlc3QsCiAgICAgICAgYWNjb3VudAogICAgICB9KTsKICAgICAgY29uc3QgcmVzdWx0ID0gZGVjb2RlRnVuY3Rpb25SZXN1bHQoewogICAgICAgIGFiaTogYWJpMiwKICAgICAgICBhcmdzLAogICAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgICBkYXRhOiBkYXRhIHx8ICIweCIKICAgICAgfSk7CiAgICAgIGNvbnN0IG1pbmltaXplZEFiaSA9IGFiaTIuZmlsdGVyKChhYmlJdGVtKSA9PiAibmFtZSIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLm5hbWUgPT09IHBhcmFtZXRlcnMuZnVuY3Rpb25OYW1lKTsKICAgICAgcmV0dXJuIHsKICAgICAgICByZXN1bHQsCiAgICAgICAgcmVxdWVzdDogewogICAgICAgICAgYWJpOiBtaW5pbWl6ZWRBYmksCiAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgYXJncywKICAgICAgICAgIGRhdGFTdWZmaXgsCiAgICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgICAuLi5jYWxsUmVxdWVzdCwKICAgICAgICAgIGFjY291bnQKICAgICAgICB9CiAgICAgIH07CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICB0aHJvdyBnZXRDb250cmFjdEVycm9yKGVycm9yLCB7CiAgICAgICAgYWJpOiBhYmkyLAogICAgICAgIGFkZHJlc3MsCiAgICAgICAgYXJncywKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L3NpbXVsYXRlQ29udHJhY3QiLAogICAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgICBzZW5kZXI6IGFjY291bnQ/LmFkZHJlc3MKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3dhdGNoQ29udHJhY3RFdmVudC5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9ycGMoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9vYnNlcnZlLmpzCiAgdmFyIGxpc3RlbmVyc0NhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICB2YXIgY2xlYW51cENhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICB2YXIgY2FsbGJhY2tDb3VudCA9IDA7CiAgZnVuY3Rpb24gb2JzZXJ2ZShvYnNlcnZlcklkLCBjYWxsYmFja3MsIGZuKSB7CiAgICBjb25zdCBjYWxsYmFja0lkID0gKytjYWxsYmFja0NvdW50OwogICAgY29uc3QgZ2V0TGlzdGVuZXJzID0gKCkgPT4gbGlzdGVuZXJzQ2FjaGUuZ2V0KG9ic2VydmVySWQpIHx8IFtdOwogICAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGxpc3RlbmVyczIgPSBnZXRMaXN0ZW5lcnMoKTsKICAgICAgbGlzdGVuZXJzQ2FjaGUuc2V0KG9ic2VydmVySWQsIGxpc3RlbmVyczIuZmlsdGVyKChjYikgPT4gY2IuaWQgIT09IGNhbGxiYWNrSWQpKTsKICAgIH07CiAgICBjb25zdCB1bndhdGNoID0gKCkgPT4gewogICAgICBjb25zdCBjbGVhbnVwMiA9IGNsZWFudXBDYWNoZS5nZXQob2JzZXJ2ZXJJZCk7CiAgICAgIGlmIChnZXRMaXN0ZW5lcnMoKS5sZW5ndGggPT09IDEgJiYgY2xlYW51cDIpCiAgICAgICAgY2xlYW51cDIoKTsKICAgICAgdW5zdWJzY3JpYmUoKTsKICAgIH07CiAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnMoKTsKICAgIGxpc3RlbmVyc0NhY2hlLnNldChvYnNlcnZlcklkLCBbCiAgICAgIC4uLmxpc3RlbmVycywKICAgICAgeyBpZDogY2FsbGJhY2tJZCwgZm5zOiBjYWxsYmFja3MgfQogICAgXSk7CiAgICBpZiAobGlzdGVuZXJzICYmIGxpc3RlbmVycy5sZW5ndGggPiAwKQogICAgICByZXR1cm4gdW53YXRjaDsKICAgIGNvbnN0IGVtaXQgPSB7fTsKICAgIGZvciAoY29uc3Qga2V5IGluIGNhbGxiYWNrcykgewogICAgICBlbWl0W2tleV0gPSAoLi4uYXJncykgPT4gewogICAgICAgIGNvbnN0IGxpc3RlbmVyczIgPSBnZXRMaXN0ZW5lcnMoKTsKICAgICAgICBpZiAobGlzdGVuZXJzMi5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMyKQogICAgICAgICAgbGlzdGVuZXIuZm5zW2tleV0/LiguLi5hcmdzKTsKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IGNsZWFudXAgPSBmbihlbWl0KTsKICAgIGlmICh0eXBlb2YgY2xlYW51cCA9PT0gImZ1bmN0aW9uIikKICAgICAgY2xlYW51cENhY2hlLnNldChvYnNlcnZlcklkLCBjbGVhbnVwKTsKICAgIHJldHVybiB1bndhdGNoOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy93YWl0LmpzCiAgYXN5bmMgZnVuY3Rpb24gd2FpdCh0aW1lKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcykgPT4gc2V0VGltZW91dChyZXMsIHRpbWUpKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcG9sbC5qcwogIGZ1bmN0aW9uIHBvbGwoZm4sIHsgZW1pdE9uQmVnaW4sIGluaXRpYWxXYWl0VGltZSwgaW50ZXJ2YWwgfSkgewogICAgbGV0IGFjdGl2ZSA9IHRydWU7CiAgICBjb25zdCB1bndhdGNoID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICBjb25zdCB3YXRjaCA9IGFzeW5jICgpID0+IHsKICAgICAgbGV0IGRhdGEgPSB2b2lkIDA7CiAgICAgIGlmIChlbWl0T25CZWdpbikKICAgICAgICBkYXRhID0gYXdhaXQgZm4oeyB1bnBvbGw6IHVud2F0Y2ggfSk7CiAgICAgIGNvbnN0IGluaXRpYWxXYWl0ID0gYXdhaXQgaW5pdGlhbFdhaXRUaW1lPy4oZGF0YSkgPz8gaW50ZXJ2YWw7CiAgICAgIGF3YWl0IHdhaXQoaW5pdGlhbFdhaXQpOwogICAgICBjb25zdCBwb2xsMiA9IGFzeW5jICgpID0+IHsKICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBhd2FpdCBmbih7IHVucG9sbDogdW53YXRjaCB9KTsKICAgICAgICBhd2FpdCB3YWl0KGludGVydmFsKTsKICAgICAgICBwb2xsMigpOwogICAgICB9OwogICAgICBwb2xsMigpOwogICAgfTsKICAgIHdhdGNoKCk7CiAgICByZXR1cm4gdW53YXRjaDsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvd2F0Y2hDb250cmFjdEV2ZW50LmpzCiAgaW5pdF9zdHJpbmdpZnkoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9wcm9taXNlL3dpdGhDYWNoZS5qcwogIHZhciBwcm9taXNlQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIHZhciByZXNwb25zZUNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBmdW5jdGlvbiBnZXRDYWNoZShjYWNoZUtleTIpIHsKICAgIGNvbnN0IGJ1aWxkQ2FjaGUgPSAoY2FjaGVLZXkzLCBjYWNoZSkgPT4gKHsKICAgICAgY2xlYXI6ICgpID0+IGNhY2hlLmRlbGV0ZShjYWNoZUtleTMpLAogICAgICBnZXQ6ICgpID0+IGNhY2hlLmdldChjYWNoZUtleTMpLAogICAgICBzZXQ6IChkYXRhKSA9PiBjYWNoZS5zZXQoY2FjaGVLZXkzLCBkYXRhKQogICAgfSk7CiAgICBjb25zdCBwcm9taXNlID0gYnVpbGRDYWNoZShjYWNoZUtleTIsIHByb21pc2VDYWNoZSk7CiAgICBjb25zdCByZXNwb25zZSA9IGJ1aWxkQ2FjaGUoY2FjaGVLZXkyLCByZXNwb25zZUNhY2hlKTsKICAgIHJldHVybiB7CiAgICAgIGNsZWFyOiAoKSA9PiB7CiAgICAgICAgcHJvbWlzZS5jbGVhcigpOwogICAgICAgIHJlc3BvbnNlLmNsZWFyKCk7CiAgICAgIH0sCiAgICAgIHByb21pc2UsCiAgICAgIHJlc3BvbnNlCiAgICB9OwogIH0KICBhc3luYyBmdW5jdGlvbiB3aXRoQ2FjaGUoZm4sIHsgY2FjaGVLZXk6IGNhY2hlS2V5MiwgY2FjaGVUaW1lID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIH0pIHsKICAgIGNvbnN0IGNhY2hlID0gZ2V0Q2FjaGUoY2FjaGVLZXkyKTsKICAgIGNvbnN0IHJlc3BvbnNlID0gY2FjaGUucmVzcG9uc2UuZ2V0KCk7CiAgICBpZiAocmVzcG9uc2UgJiYgY2FjaGVUaW1lID4gMCkgewogICAgICBjb25zdCBhZ2UgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIHJlc3BvbnNlLmNyZWF0ZWQuZ2V0VGltZSgpOwogICAgICBpZiAoYWdlIDwgY2FjaGVUaW1lKQogICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhOwogICAgfQogICAgbGV0IHByb21pc2UgPSBjYWNoZS5wcm9taXNlLmdldCgpOwogICAgaWYgKCFwcm9taXNlKSB7CiAgICAgIHByb21pc2UgPSBmbigpOwogICAgICBjYWNoZS5wcm9taXNlLnNldChwcm9taXNlKTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwcm9taXNlOwogICAgICBjYWNoZS5yZXNwb25zZS5zZXQoeyBjcmVhdGVkOiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgZGF0YSB9KTsKICAgICAgcmV0dXJuIGRhdGE7CiAgICB9IGZpbmFsbHkgewogICAgICBjYWNoZS5wcm9taXNlLmNsZWFyKCk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEJsb2NrTnVtYmVyLmpzCiAgdmFyIGNhY2hlS2V5ID0gKGlkKSA9PiBgYmxvY2tOdW1iZXIuJHtpZH1gOwogIGFzeW5jIGZ1bmN0aW9uIGdldEJsb2NrTnVtYmVyKGNsaWVudCwgeyBjYWNoZVRpbWUgPSBjbGllbnQuY2FjaGVUaW1lIH0gPSB7fSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBhd2FpdCB3aXRoQ2FjaGUoKCkgPT4gY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfYmxvY2tOdW1iZXIiCiAgICB9KSwgeyBjYWNoZUtleTogY2FjaGVLZXkoY2xpZW50LnVpZCksIGNhY2hlVGltZSB9KTsKICAgIHJldHVybiBCaWdJbnQoYmxvY2tOdW1iZXJIZXgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRGaWx0ZXJDaGFuZ2VzLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0RmlsdGVyQ2hhbmdlcyhfY2xpZW50LCB7IGZpbHRlciB9KSB7CiAgICBjb25zdCBzdHJpY3QgPSAic3RyaWN0IiBpbiBmaWx0ZXIgJiYgZmlsdGVyLnN0cmljdDsKICAgIGNvbnN0IGxvZ3MgPSBhd2FpdCBmaWx0ZXIucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRGaWx0ZXJDaGFuZ2VzIiwKICAgICAgcGFyYW1zOiBbZmlsdGVyLmlkXQogICAgfSk7CiAgICBpZiAodHlwZW9mIGxvZ3NbMF0gPT09ICJzdHJpbmciKQogICAgICByZXR1cm4gbG9nczsKICAgIGNvbnN0IGZvcm1hdHRlZExvZ3MgPSBsb2dzLm1hcCgobG9nKSA9PiBmb3JtYXRMb2cobG9nKSk7CiAgICBpZiAoISgiYWJpIiBpbiBmaWx0ZXIpIHx8ICFmaWx0ZXIuYWJpKQogICAgICByZXR1cm4gZm9ybWF0dGVkTG9nczsKICAgIHJldHVybiBwYXJzZUV2ZW50TG9ncyh7CiAgICAgIGFiaTogZmlsdGVyLmFiaSwKICAgICAgbG9nczogZm9ybWF0dGVkTG9ncywKICAgICAgc3RyaWN0CiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvdW5pbnN0YWxsRmlsdGVyLmpzCiAgYXN5bmMgZnVuY3Rpb24gdW5pbnN0YWxsRmlsdGVyKF9jbGllbnQsIHsgZmlsdGVyIH0pIHsKICAgIHJldHVybiBmaWx0ZXIucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF91bmluc3RhbGxGaWx0ZXIiLAogICAgICBwYXJhbXM6IFtmaWx0ZXIuaWRdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvd2F0Y2hDb250cmFjdEV2ZW50LmpzCiAgZnVuY3Rpb24gd2F0Y2hDb250cmFjdEV2ZW50KGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGJhdGNoID0gdHJ1ZSwgZXZlbnROYW1lLCBmcm9tQmxvY2ssIG9uRXJyb3IsIG9uTG9ncywgcG9sbDogcG9sbF8sIHBvbGxpbmdJbnRlcnZhbCA9IGNsaWVudC5wb2xsaW5nSW50ZXJ2YWwsIHN0cmljdDogc3RyaWN0XyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGVuYWJsZVBvbGxpbmcgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIHBvbGxfICE9PSAidW5kZWZpbmVkIikKICAgICAgICByZXR1cm4gcG9sbF87CiAgICAgIGlmICh0eXBlb2YgZnJvbUJsb2NrID09PSAiYmlnaW50IikKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAiZmFsbGJhY2siICYmIGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0c1swXS5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pKCk7CiAgICBjb25zdCBwb2xsQ29udHJhY3RFdmVudCA9ICgpID0+IHsKICAgICAgY29uc3Qgc3RyaWN0ID0gc3RyaWN0XyA/PyBmYWxzZTsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoQ29udHJhY3RFdmVudCIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGJhdGNoLAogICAgICAgIGNsaWVudC51aWQsCiAgICAgICAgZXZlbnROYW1lLAogICAgICAgIHBvbGxpbmdJbnRlcnZhbCwKICAgICAgICBzdHJpY3QsCiAgICAgICAgZnJvbUJsb2NrCiAgICAgIF0pOwogICAgICByZXR1cm4gb2JzZXJ2ZShvYnNlcnZlcklkLCB7IG9uTG9ncywgb25FcnJvciB9LCAoZW1pdCkgPT4gewogICAgICAgIGxldCBwcmV2aW91c0Jsb2NrTnVtYmVyOwogICAgICAgIGlmIChmcm9tQmxvY2sgIT09IHZvaWQgMCkKICAgICAgICAgIHByZXZpb3VzQmxvY2tOdW1iZXIgPSBmcm9tQmxvY2sgLSAxbjsKICAgICAgICBsZXQgZmlsdGVyOwogICAgICAgIGxldCBpbml0aWFsaXplZCA9IGZhbHNlOwogICAgICAgIGNvbnN0IHVud2F0Y2ggPSBwb2xsKGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBmaWx0ZXIgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyLCAiY3JlYXRlQ29udHJhY3RFdmVudEZpbHRlciIpKHsKICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgZXZlbnROYW1lLAogICAgICAgICAgICAgICAgc3RyaWN0LAogICAgICAgICAgICAgICAgZnJvbUJsb2NrCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICB9CiAgICAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbGV0IGxvZ3M7CiAgICAgICAgICAgIGlmIChmaWx0ZXIpIHsKICAgICAgICAgICAgICBsb2dzID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0RmlsdGVyQ2hhbmdlcywgImdldEZpbHRlckNoYW5nZXMiKSh7IGZpbHRlciB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjb25zdCBibG9ja051bWJlciA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrTnVtYmVyLCAiZ2V0QmxvY2tOdW1iZXIiKSh7fSk7CiAgICAgICAgICAgICAgaWYgKHByZXZpb3VzQmxvY2tOdW1iZXIgJiYgcHJldmlvdXNCbG9ja051bWJlciA8IGJsb2NrTnVtYmVyKSB7CiAgICAgICAgICAgICAgICBsb2dzID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0Q29udHJhY3RFdmVudHMsICJnZXRDb250cmFjdEV2ZW50cyIpKHsKICAgICAgICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgICBldmVudE5hbWUsCiAgICAgICAgICAgICAgICAgIGZyb21CbG9jazogcHJldmlvdXNCbG9ja051bWJlciArIDFuLAogICAgICAgICAgICAgICAgICB0b0Jsb2NrOiBibG9ja051bWJlciwKICAgICAgICAgICAgICAgICAgc3RyaWN0CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbG9ncyA9IFtdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBwcmV2aW91c0Jsb2NrTnVtYmVyID0gYmxvY2tOdW1iZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGxvZ3MubGVuZ3RoID09PSAwKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGJhdGNoKQogICAgICAgICAgICAgIGVtaXQub25Mb2dzKGxvZ3MpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgZm9yIChjb25zdCBsb2cgb2YgbG9ncykKICAgICAgICAgICAgICAgIGVtaXQub25Mb2dzKFtsb2ddKTsKICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICBpZiAoZmlsdGVyICYmIGVyciBpbnN0YW5jZW9mIEludmFsaWRJbnB1dFJwY0Vycm9yKQogICAgICAgICAgICAgIGluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgICAgICAgIGVtaXQub25FcnJvcj8uKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgZW1pdE9uQmVnaW46IHRydWUsCiAgICAgICAgICBpbnRlcnZhbDogcG9sbGluZ0ludGVydmFsCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChmaWx0ZXIpCiAgICAgICAgICAgIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHVuaW5zdGFsbEZpbHRlciwgInVuaW5zdGFsbEZpbHRlciIpKHsgZmlsdGVyIH0pOwogICAgICAgICAgdW53YXRjaCgpOwogICAgICAgIH07CiAgICAgIH0pOwogICAgfTsKICAgIGNvbnN0IHN1YnNjcmliZUNvbnRyYWN0RXZlbnQgPSAoKSA9PiB7CiAgICAgIGNvbnN0IHN0cmljdCA9IHN0cmljdF8gPz8gZmFsc2U7CiAgICAgIGNvbnN0IG9ic2VydmVySWQgPSBzdHJpbmdpZnkoWwogICAgICAgICJ3YXRjaENvbnRyYWN0RXZlbnQiLAogICAgICAgIGFkZHJlc3MsCiAgICAgICAgYXJncywKICAgICAgICBiYXRjaCwKICAgICAgICBjbGllbnQudWlkLAogICAgICAgIGV2ZW50TmFtZSwKICAgICAgICBwb2xsaW5nSW50ZXJ2YWwsCiAgICAgICAgc3RyaWN0CiAgICAgIF0pOwogICAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgICAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICAgIHJldHVybiBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25Mb2dzLCBvbkVycm9yIH0sIChlbWl0KSA9PiB7CiAgICAgICAgOwogICAgICAgIChhc3luYyAoKSA9PiB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCB0cmFuc3BvcnQgPSAoKCkgPT4gewogICAgICAgICAgICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIpIHsKICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydDIgPSBjbGllbnQudHJhbnNwb3J0LnRyYW5zcG9ydHMuZmluZCgodHJhbnNwb3J0MykgPT4gdHJhbnNwb3J0My5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpOwogICAgICAgICAgICAgICAgaWYgKCF0cmFuc3BvcnQyKQogICAgICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc3BvcnQyLnZhbHVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAgY29uc3QgdG9waWNzID0gZXZlbnROYW1lID8gZW5jb2RlRXZlbnRUb3BpY3MoewogICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICBldmVudE5hbWUsCiAgICAgICAgICAgICAgYXJncwogICAgICAgICAgICB9KSA6IFtdOwogICAgICAgICAgICBjb25zdCB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZV8gfSA9IGF3YWl0IHRyYW5zcG9ydC5zdWJzY3JpYmUoewogICAgICAgICAgICAgIHBhcmFtczogWyJsb2dzIiwgeyBhZGRyZXNzLCB0b3BpY3MgfV0sCiAgICAgICAgICAgICAgb25EYXRhKGRhdGEpIHsKICAgICAgICAgICAgICAgIGlmICghYWN0aXZlKQogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBjb25zdCBsb2cgPSBkYXRhLnJlc3VsdDsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZXZlbnROYW1lOiBldmVudE5hbWUyLCBhcmdzOiBhcmdzMiB9ID0gZGVjb2RlRXZlbnRMb2coewogICAgICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgICAgICBkYXRhOiBsb2cuZGF0YSwKICAgICAgICAgICAgICAgICAgICB0b3BpY3M6IGxvZy50b3BpY3MsCiAgICAgICAgICAgICAgICAgICAgc3RyaWN0OiBzdHJpY3RfCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2cobG9nLCB7CiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJnczIsCiAgICAgICAgICAgICAgICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUyCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBlbWl0Lm9uTG9ncyhbZm9ybWF0dGVkXSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICAgICAgbGV0IGV2ZW50TmFtZTI7CiAgICAgICAgICAgICAgICAgIGxldCBpc1VubmFtZWQ7CiAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBEZWNvZGVMb2dEYXRhTWlzbWF0Y2ggfHwgZXJyIGluc3RhbmNlb2YgRGVjb2RlTG9nVG9waWNzTWlzbWF0Y2gpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaWN0XykKICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBldmVudE5hbWUyID0gZXJyLmFiaUl0ZW0ubmFtZTsKICAgICAgICAgICAgICAgICAgICBpc1VubmFtZWQgPSBlcnIuYWJpSXRlbS5pbnB1dHM/LnNvbWUoKHgpID0+ICEoIm5hbWUiIGluIHggJiYgeC5uYW1lKSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TG9nKGxvZywgewogICAgICAgICAgICAgICAgICAgIGFyZ3M6IGlzVW5uYW1lZCA/IFtdIDoge30sCiAgICAgICAgICAgICAgICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUyCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBlbWl0Lm9uTG9ncyhbZm9ybWF0dGVkXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBvbkVycm9yKGVycm9yKSB7CiAgICAgICAgICAgICAgICBlbWl0Lm9uRXJyb3I/LihlcnJvcik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZV87CiAgICAgICAgICAgIGlmICghYWN0aXZlKQogICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgb25FcnJvcj8uKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gKCkgPT4gdW5zdWJzY3JpYmUoKTsKICAgICAgfSk7CiAgICB9OwogICAgcmV0dXJuIGVuYWJsZVBvbGxpbmcgPyBwb2xsQ29udHJhY3RFdmVudCgpIDogc3Vic2NyaWJlQ29udHJhY3RFdmVudCgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC93cml0ZUNvbnRyYWN0LmpzCiAgaW5pdF9wYXJzZUFjY291bnQoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvYWNjb3VudC5qcwogIGluaXRfYmFzZSgpOwogIHZhciBBY2NvdW50Tm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDkgfSA9IHt9KSB7CiAgICAgIHN1cGVyKFsKICAgICAgICAiQ291bGQgbm90IGZpbmQgYW4gQWNjb3VudCB0byBleGVjdXRlIHdpdGggdGhpcyBBY3Rpb24uIiwKICAgICAgICAiUGxlYXNlIHByb3ZpZGUgYW4gQWNjb3VudCB3aXRoIHRoZSBgYWNjb3VudGAgYXJndW1lbnQgb24gdGhlIEFjdGlvbiwgb3IgYnkgc3VwcGx5aW5nIGFuIGBhY2NvdW50YCB0byB0aGUgQ2xpZW50LiIKICAgICAgXS5qb2luKCJcbiIpLCB7CiAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICBkb2NzU2x1ZzogImFjY291bnQiLAogICAgICAgIG5hbWU6ICJBY2NvdW50Tm90Rm91bmRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKICB2YXIgQWNjb3VudFR5cGVOb3RTdXBwb3J0ZWRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDksIG1ldGFNZXNzYWdlcywgdHlwZSB9KSB7CiAgICAgIHN1cGVyKGBBY2NvdW50IHR5cGUgIiR7dHlwZX0iIGlzIG5vdCBzdXBwb3J0ZWQuYCwgewogICAgICAgIGRvY3NQYXRoOiBkb2NzUGF0aDksCiAgICAgICAgbWV0YU1lc3NhZ2VzLAogICAgICAgIG5hbWU6ICJBY2NvdW50VHlwZU5vdFN1cHBvcnRlZEVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3dyaXRlQ29udHJhY3QuanMKICBpbml0X2VuY29kZUZ1bmN0aW9uRGF0YSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NlbmRUcmFuc2FjdGlvbi5qcwogIGluaXRfcGFyc2VBY2NvdW50KCk7CiAgaW5pdF9iYXNlKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY2hhaW4vYXNzZXJ0Q3VycmVudENoYWluLmpzCiAgaW5pdF9jaGFpbigpOwogIGZ1bmN0aW9uIGFzc2VydEN1cnJlbnRDaGFpbih7IGNoYWluLCBjdXJyZW50Q2hhaW5JZCB9KSB7CiAgICBpZiAoIWNoYWluKQogICAgICB0aHJvdyBuZXcgQ2hhaW5Ob3RGb3VuZEVycm9yKCk7CiAgICBpZiAoY3VycmVudENoYWluSWQgIT09IGNoYWluLmlkKQogICAgICB0aHJvdyBuZXcgQ2hhaW5NaXNtYXRjaEVycm9yKHsgY2hhaW4sIGN1cnJlbnRDaGFpbklkIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lcnJvcnMvZ2V0VHJhbnNhY3Rpb25FcnJvci5qcwogIGluaXRfbm9kZSgpOwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBpbml0X2dldE5vZGVFcnJvcigpOwogIGZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uRXJyb3IoZXJyLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIC4uLmFyZ3MgfSkgewogICAgY29uc3QgY2F1c2UgPSAoKCkgPT4gewogICAgICBjb25zdCBjYXVzZTIgPSBnZXROb2RlRXJyb3IoZXJyLCBhcmdzKTsKICAgICAgaWYgKGNhdXNlMiBpbnN0YW5jZW9mIFVua25vd25Ob2RlRXJyb3IpCiAgICAgICAgcmV0dXJuIGVycjsKICAgICAgcmV0dXJuIGNhdXNlMjsKICAgIH0pKCk7CiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IoY2F1c2UsIHsKICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgLi4uYXJncwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NlbmRUcmFuc2FjdGlvbi5qcwogIGluaXRfZXh0cmFjdCgpOwogIGluaXRfdHJhbnNhY3Rpb25SZXF1ZXN0KCk7CiAgaW5pdF9hc3NlcnRSZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvc2VuZFJhd1RyYW5zYWN0aW9uLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2VuZFJhd1RyYW5zYWN0aW9uKGNsaWVudCwgeyBzZXJpYWxpemVkVHJhbnNhY3Rpb24gfSkgewogICAgcmV0dXJuIGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX3NlbmRSYXdUcmFuc2FjdGlvbiIsCiAgICAgIHBhcmFtczogW3NlcmlhbGl6ZWRUcmFuc2FjdGlvbl0KICAgIH0sIHsgcmV0cnlDb3VudDogMCB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvc2VuZFRyYW5zYWN0aW9uLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2VuZFRyYW5zYWN0aW9uKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhY2NvdW50OiBhY2NvdW50XyA9IGNsaWVudC5hY2NvdW50LCBjaGFpbiA9IGNsaWVudC5jaGFpbiwgYWNjZXNzTGlzdCwgYXV0aG9yaXphdGlvbkxpc3QsIGJsb2JzLCBkYXRhLCBnYXMsIGdhc1ByaWNlLCBtYXhGZWVQZXJCbG9iR2FzLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBub25jZSwgdmFsdWUsIC4uLnJlc3QgfSA9IHBhcmFtZXRlcnM7CiAgICBpZiAoIWFjY291bnRfKQogICAgICB0aHJvdyBuZXcgQWNjb3VudE5vdEZvdW5kRXJyb3IoewogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvYWN0aW9ucy93YWxsZXQvc2VuZFRyYW5zYWN0aW9uIgogICAgICB9KTsKICAgIGNvbnN0IGFjY291bnQgPSBwYXJzZUFjY291bnQoYWNjb3VudF8pOwogICAgdHJ5IHsKICAgICAgYXNzZXJ0UmVxdWVzdChwYXJhbWV0ZXJzKTsKICAgICAgY29uc3QgdG8gPSBhd2FpdCAoYXN5bmMgKCkgPT4gewogICAgICAgIGlmIChwYXJhbWV0ZXJzLnRvKQogICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMudG87CiAgICAgICAgaWYgKGF1dGhvcml6YXRpb25MaXN0ICYmIGF1dGhvcml6YXRpb25MaXN0Lmxlbmd0aCA+IDApCiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVjb3ZlckF1dGhvcml6YXRpb25BZGRyZXNzKHsKICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvbkxpc3RbMF0KICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoImB0b2AgaXMgcmVxdWlyZWQuIENvdWxkIG5vdCBpbmZlciBmcm9tIGBhdXRob3JpemF0aW9uTGlzdGAuIik7CiAgICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9KSgpOwogICAgICBpZiAoYWNjb3VudC50eXBlID09PSAianNvbi1ycGMiKSB7CiAgICAgICAgbGV0IGNoYWluSWQ7CiAgICAgICAgaWYgKGNoYWluICE9PSBudWxsKSB7CiAgICAgICAgICBjaGFpbklkID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0Q2hhaW5JZCwgImdldENoYWluSWQiKSh7fSk7CiAgICAgICAgICBhc3NlcnRDdXJyZW50Q2hhaW4oewogICAgICAgICAgICBjdXJyZW50Q2hhaW5JZDogY2hhaW5JZCwKICAgICAgICAgICAgY2hhaW4KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb25zdCBjaGFpbkZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb25SZXF1ZXN0Py5mb3JtYXQ7CiAgICAgICAgY29uc3QgZm9ybWF0ID0gY2hhaW5Gb3JtYXQgfHwgZm9ybWF0VHJhbnNhY3Rpb25SZXF1ZXN0OwogICAgICAgIGNvbnN0IHJlcXVlc3QgPSBmb3JtYXQoewogICAgICAgICAgLy8gUGljayBvdXQgZXh0cmEgZGF0YSB0aGF0IG1pZ2h0IGV4aXN0IG9uIHRoZSBjaGFpbidzIHRyYW5zYWN0aW9uIHJlcXVlc3QgdHlwZS4KICAgICAgICAgIC4uLmV4dHJhY3QocmVzdCwgeyBmb3JtYXQ6IGNoYWluRm9ybWF0IH0pLAogICAgICAgICAgYWNjZXNzTGlzdCwKICAgICAgICAgIGF1dGhvcml6YXRpb25MaXN0LAogICAgICAgICAgYmxvYnMsCiAgICAgICAgICBjaGFpbklkLAogICAgICAgICAgZGF0YSwKICAgICAgICAgIGZyb206IGFjY291bnQuYWRkcmVzcywKICAgICAgICAgIGdhcywKICAgICAgICAgIGdhc1ByaWNlLAogICAgICAgICAgbWF4RmVlUGVyQmxvYkdhcywKICAgICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICB0bywKICAgICAgICAgIHZhbHVlCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICAgIG1ldGhvZDogImV0aF9zZW5kVHJhbnNhY3Rpb24iLAogICAgICAgICAgcGFyYW1zOiBbcmVxdWVzdF0KICAgICAgICB9LCB7IHJldHJ5Q291bnQ6IDAgfSk7CiAgICAgIH0KICAgICAgaWYgKGFjY291bnQudHlwZSA9PT0gImxvY2FsIikgewogICAgICAgIGNvbnN0IHJlcXVlc3QgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBwcmVwYXJlVHJhbnNhY3Rpb25SZXF1ZXN0LCAicHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdCIpKHsKICAgICAgICAgIGFjY291bnQsCiAgICAgICAgICBhY2Nlc3NMaXN0LAogICAgICAgICAgYXV0aG9yaXphdGlvbkxpc3QsCiAgICAgICAgICBibG9icywKICAgICAgICAgIGNoYWluLAogICAgICAgICAgZGF0YSwKICAgICAgICAgIGdhcywKICAgICAgICAgIGdhc1ByaWNlLAogICAgICAgICAgbWF4RmVlUGVyQmxvYkdhcywKICAgICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICBwYXJhbWV0ZXJzOiBbLi4uZGVmYXVsdFBhcmFtZXRlcnMsICJzaWRlY2FycyJdLAogICAgICAgICAgdmFsdWUsCiAgICAgICAgICAuLi5yZXN0LAogICAgICAgICAgdG8KICAgICAgICB9KTsKICAgICAgICBjb25zdCBzZXJpYWxpemVyID0gY2hhaW4/LnNlcmlhbGl6ZXJzPy50cmFuc2FjdGlvbjsKICAgICAgICBjb25zdCBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBhd2FpdCBhY2NvdW50LnNpZ25UcmFuc2FjdGlvbihyZXF1ZXN0LCB7CiAgICAgICAgICBzZXJpYWxpemVyCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHNlbmRSYXdUcmFuc2FjdGlvbiwgInNlbmRSYXdUcmFuc2FjdGlvbiIpKHsKICAgICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbgogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChhY2NvdW50LnR5cGUgPT09ICJzbWFydCIpCiAgICAgICAgdGhyb3cgbmV3IEFjY291bnRUeXBlTm90U3VwcG9ydGVkRXJyb3IoewogICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICJDb25zaWRlciB1c2luZyB0aGUgYHNlbmRVc2VyT3BlcmF0aW9uYCBBY3Rpb24gaW5zdGVhZC4iCiAgICAgICAgICBdLAogICAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9hY3Rpb25zL2J1bmRsZXIvc2VuZFVzZXJPcGVyYXRpb24iLAogICAgICAgICAgdHlwZTogInNtYXJ0IgogICAgICAgIH0pOwogICAgICB0aHJvdyBuZXcgQWNjb3VudFR5cGVOb3RTdXBwb3J0ZWRFcnJvcih7CiAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9hY3Rpb25zL3dhbGxldC9zZW5kVHJhbnNhY3Rpb24iLAogICAgICAgIHR5cGU6IGFjY291bnQudHlwZQogICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBpZiAoZXJyIGluc3RhbmNlb2YgQWNjb3VudFR5cGVOb3RTdXBwb3J0ZWRFcnJvcikKICAgICAgICB0aHJvdyBlcnI7CiAgICAgIHRocm93IGdldFRyYW5zYWN0aW9uRXJyb3IoZXJyLCB7CiAgICAgICAgLi4ucGFyYW1ldGVycywKICAgICAgICBhY2NvdW50LAogICAgICAgIGNoYWluOiBwYXJhbWV0ZXJzLmNoYWluIHx8IHZvaWQgMAogICAgICB9KTsKICAgIH0KICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvd3JpdGVDb250cmFjdC5qcwogIGFzeW5jIGZ1bmN0aW9uIHdyaXRlQ29udHJhY3QoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYWNjb3VudDogYWNjb3VudF8gPSBjbGllbnQuYWNjb3VudCwgYWRkcmVzcywgYXJncywgZGF0YVN1ZmZpeCwgZnVuY3Rpb25OYW1lLCAuLi5yZXF1ZXN0IH0gPSBwYXJhbWV0ZXJzOwogICAgaWYgKCFhY2NvdW50XykKICAgICAgdGhyb3cgbmV3IEFjY291bnROb3RGb3VuZEVycm9yKHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L3dyaXRlQ29udHJhY3QiCiAgICAgIH0pOwogICAgY29uc3QgYWNjb3VudCA9IHBhcnNlQWNjb3VudChhY2NvdW50Xyk7CiAgICBjb25zdCBkYXRhID0gZW5jb2RlRnVuY3Rpb25EYXRhKHsKICAgICAgYWJpOiBhYmkyLAogICAgICBhcmdzLAogICAgICBmdW5jdGlvbk5hbWUKICAgIH0pOwogICAgdHJ5IHsKICAgICAgcmV0dXJuIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHNlbmRUcmFuc2FjdGlvbiwgInNlbmRUcmFuc2FjdGlvbiIpKHsKICAgICAgICBkYXRhOiBgJHtkYXRhfSR7ZGF0YVN1ZmZpeCA/IGRhdGFTdWZmaXgucmVwbGFjZSgiMHgiLCAiIikgOiAiIn1gLAogICAgICAgIHRvOiBhZGRyZXNzLAogICAgICAgIGFjY291bnQsCiAgICAgICAgLi4ucmVxdWVzdAogICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHRocm93IGdldENvbnRyYWN0RXJyb3IoZXJyb3IsIHsKICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3Qvd3JpdGVDb250cmFjdCIsCiAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgIHNlbmRlcjogYWNjb3VudC5hZGRyZXNzCiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2dldENvbnRyYWN0LmpzCiAgZnVuY3Rpb24gZ2V0Q29udHJhY3QoeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGNsaWVudDogY2xpZW50XyB9KSB7CiAgICBjb25zdCBjbGllbnQgPSBjbGllbnRfOwogICAgY29uc3QgW3B1YmxpY0NsaWVudCwgd2FsbGV0Q2xpZW50XSA9ICgoKSA9PiB7CiAgICAgIGlmICghY2xpZW50KQogICAgICAgIHJldHVybiBbdm9pZCAwLCB2b2lkIDBdOwogICAgICBpZiAoInB1YmxpYyIgaW4gY2xpZW50ICYmICJ3YWxsZXQiIGluIGNsaWVudCkKICAgICAgICByZXR1cm4gW2NsaWVudC5wdWJsaWMsIGNsaWVudC53YWxsZXRdOwogICAgICBpZiAoInB1YmxpYyIgaW4gY2xpZW50KQogICAgICAgIHJldHVybiBbY2xpZW50LnB1YmxpYywgdm9pZCAwXTsKICAgICAgaWYgKCJ3YWxsZXQiIGluIGNsaWVudCkKICAgICAgICByZXR1cm4gW3ZvaWQgMCwgY2xpZW50LndhbGxldF07CiAgICAgIHJldHVybiBbY2xpZW50LCBjbGllbnRdOwogICAgfSkoKTsKICAgIGNvbnN0IGhhc1B1YmxpY0NsaWVudCA9IHB1YmxpY0NsaWVudCAhPT0gdm9pZCAwICYmIHB1YmxpY0NsaWVudCAhPT0gbnVsbDsKICAgIGNvbnN0IGhhc1dhbGxldENsaWVudCA9IHdhbGxldENsaWVudCAhPT0gdm9pZCAwICYmIHdhbGxldENsaWVudCAhPT0gbnVsbDsKICAgIGNvbnN0IGNvbnRyYWN0ID0ge307CiAgICBsZXQgaGFzUmVhZEZ1bmN0aW9uID0gZmFsc2U7CiAgICBsZXQgaGFzV3JpdGVGdW5jdGlvbiA9IGZhbHNlOwogICAgbGV0IGhhc0V2ZW50ID0gZmFsc2U7CiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYWJpMikgewogICAgICBpZiAoaXRlbS50eXBlID09PSAiZnVuY3Rpb24iKQogICAgICAgIGlmIChpdGVtLnN0YXRlTXV0YWJpbGl0eSA9PT0gInZpZXciIHx8IGl0ZW0uc3RhdGVNdXRhYmlsaXR5ID09PSAicHVyZSIpCiAgICAgICAgICBoYXNSZWFkRnVuY3Rpb24gPSB0cnVlOwogICAgICAgIGVsc2UKICAgICAgICAgIGhhc1dyaXRlRnVuY3Rpb24gPSB0cnVlOwogICAgICBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICJldmVudCIpCiAgICAgICAgaGFzRXZlbnQgPSB0cnVlOwogICAgICBpZiAoaGFzUmVhZEZ1bmN0aW9uICYmIGhhc1dyaXRlRnVuY3Rpb24gJiYgaGFzRXZlbnQpCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoaGFzUHVibGljQ2xpZW50KSB7CiAgICAgIGlmIChoYXNSZWFkRnVuY3Rpb24pCiAgICAgICAgY29udHJhY3QucmVhZCA9IG5ldyBQcm94eSh7fSwgewogICAgICAgICAgZ2V0KF8sIGZ1bmN0aW9uTmFtZSkgewogICAgICAgICAgICByZXR1cm4gKC4uLnBhcmFtZXRlcnMpID0+IHsKICAgICAgICAgICAgICBjb25zdCB7IGFyZ3MsIG9wdGlvbnMgfSA9IGdldEZ1bmN0aW9uUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKICAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0aW9uKHB1YmxpY0NsaWVudCwgcmVhZENvbnRyYWN0LCAicmVhZENvbnRyYWN0IikoewogICAgICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICAgICAgYWRkcmVzcywKICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgICAgICAgICAgIGFyZ3MsCiAgICAgICAgICAgICAgICAuLi5vcHRpb25zCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIGlmIChoYXNXcml0ZUZ1bmN0aW9uKQogICAgICAgIGNvbnRyYWN0LnNpbXVsYXRlID0gbmV3IFByb3h5KHt9LCB7CiAgICAgICAgICBnZXQoXywgZnVuY3Rpb25OYW1lKSB7CiAgICAgICAgICAgIHJldHVybiAoLi4ucGFyYW1ldGVycykgPT4gewogICAgICAgICAgICAgIGNvbnN0IHsgYXJncywgb3B0aW9ucyB9ID0gZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwogICAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb24ocHVibGljQ2xpZW50LCBzaW11bGF0ZUNvbnRyYWN0LCAic2ltdWxhdGVDb250cmFjdCIpKHsKICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgLi4ub3B0aW9ucwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICBpZiAoaGFzRXZlbnQpIHsKICAgICAgICBjb250cmFjdC5jcmVhdGVFdmVudEZpbHRlciA9IG5ldyBQcm94eSh7fSwgewogICAgICAgICAgZ2V0KF8sIGV2ZW50TmFtZSkgewogICAgICAgICAgICByZXR1cm4gKC4uLnBhcmFtZXRlcnMpID0+IHsKICAgICAgICAgICAgICBjb25zdCBhYmlFdmVudCA9IGFiaTIuZmluZCgoeCkgPT4geC50eXBlID09PSAiZXZlbnQiICYmIHgubmFtZSA9PT0gZXZlbnROYW1lKTsKICAgICAgICAgICAgICBjb25zdCB7IGFyZ3MsIG9wdGlvbnMgfSA9IGdldEV2ZW50UGFyYW1ldGVycyhwYXJhbWV0ZXJzLCBhYmlFdmVudCk7CiAgICAgICAgICAgICAgcmV0dXJuIGdldEFjdGlvbihwdWJsaWNDbGllbnQsIGNyZWF0ZUNvbnRyYWN0RXZlbnRGaWx0ZXIsICJjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyIikoewogICAgICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICAgICAgYWRkcmVzcywKICAgICAgICAgICAgICAgIGV2ZW50TmFtZSwKICAgICAgICAgICAgICAgIGFyZ3MsCiAgICAgICAgICAgICAgICAuLi5vcHRpb25zCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgY29udHJhY3QuZ2V0RXZlbnRzID0gbmV3IFByb3h5KHt9LCB7CiAgICAgICAgICBnZXQoXywgZXZlbnROYW1lKSB7CiAgICAgICAgICAgIHJldHVybiAoLi4ucGFyYW1ldGVycykgPT4gewogICAgICAgICAgICAgIGNvbnN0IGFiaUV2ZW50ID0gYWJpMi5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICJldmVudCIgJiYgeC5uYW1lID09PSBldmVudE5hbWUpOwogICAgICAgICAgICAgIGNvbnN0IHsgYXJncywgb3B0aW9ucyB9ID0gZ2V0RXZlbnRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMsIGFiaUV2ZW50KTsKICAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0aW9uKHB1YmxpY0NsaWVudCwgZ2V0Q29udHJhY3RFdmVudHMsICJnZXRDb250cmFjdEV2ZW50cyIpKHsKICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBldmVudE5hbWUsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgLi4ub3B0aW9ucwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGNvbnRyYWN0LndhdGNoRXZlbnQgPSBuZXcgUHJveHkoe30sIHsKICAgICAgICAgIGdldChfLCBldmVudE5hbWUpIHsKICAgICAgICAgICAgcmV0dXJuICguLi5wYXJhbWV0ZXJzKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgYWJpRXZlbnQgPSBhYmkyLmZpbmQoKHgpID0+IHgudHlwZSA9PT0gImV2ZW50IiAmJiB4Lm5hbWUgPT09IGV2ZW50TmFtZSk7CiAgICAgICAgICAgICAgY29uc3QgeyBhcmdzLCBvcHRpb25zIH0gPSBnZXRFdmVudFBhcmFtZXRlcnMocGFyYW1ldGVycywgYWJpRXZlbnQpOwogICAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb24ocHVibGljQ2xpZW50LCB3YXRjaENvbnRyYWN0RXZlbnQsICJ3YXRjaENvbnRyYWN0RXZlbnQiKSh7CiAgICAgICAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgZXZlbnROYW1lLAogICAgICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgaWYgKGhhc1dhbGxldENsaWVudCkgewogICAgICBpZiAoaGFzV3JpdGVGdW5jdGlvbikKICAgICAgICBjb250cmFjdC53cml0ZSA9IG5ldyBQcm94eSh7fSwgewogICAgICAgICAgZ2V0KF8sIGZ1bmN0aW9uTmFtZSkgewogICAgICAgICAgICByZXR1cm4gKC4uLnBhcmFtZXRlcnMpID0+IHsKICAgICAgICAgICAgICBjb25zdCB7IGFyZ3MsIG9wdGlvbnMgfSA9IGdldEZ1bmN0aW9uUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKICAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0aW9uKHdhbGxldENsaWVudCwgd3JpdGVDb250cmFjdCwgIndyaXRlQ29udHJhY3QiKSh7CiAgICAgICAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KICAgIGlmIChoYXNQdWJsaWNDbGllbnQgfHwgaGFzV2FsbGV0Q2xpZW50KSB7CiAgICAgIGlmIChoYXNXcml0ZUZ1bmN0aW9uKQogICAgICAgIGNvbnRyYWN0LmVzdGltYXRlR2FzID0gbmV3IFByb3h5KHt9LCB7CiAgICAgICAgICBnZXQoXywgZnVuY3Rpb25OYW1lKSB7CiAgICAgICAgICAgIHJldHVybiAoLi4ucGFyYW1ldGVycykgPT4gewogICAgICAgICAgICAgIGNvbnN0IHsgYXJncywgb3B0aW9ucyB9ID0gZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwogICAgICAgICAgICAgIGNvbnN0IGNsaWVudDIgPSBwdWJsaWNDbGllbnQgPz8gd2FsbGV0Q2xpZW50OwogICAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb24oY2xpZW50MiwgZXN0aW1hdGVDb250cmFjdEdhcywgImVzdGltYXRlQ29udHJhY3RHYXMiKSh7CiAgICAgICAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsCiAgICAgICAgICAgICAgICBhY2NvdW50OiBvcHRpb25zLmFjY291bnQgPz8gd2FsbGV0Q2xpZW50LmFjY291bnQKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KICAgIGNvbnRyYWN0LmFkZHJlc3MgPSBhZGRyZXNzOwogICAgY29udHJhY3QuYWJpID0gYWJpMjsKICAgIHJldHVybiBjb250cmFjdDsKICB9CiAgZnVuY3Rpb24gZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzKHZhbHVlcykgewogICAgY29uc3QgaGFzQXJncyA9IHZhbHVlcy5sZW5ndGggJiYgQXJyYXkuaXNBcnJheSh2YWx1ZXNbMF0pOwogICAgY29uc3QgYXJncyA9IGhhc0FyZ3MgPyB2YWx1ZXNbMF0gOiBbXTsKICAgIGNvbnN0IG9wdGlvbnMgPSAoaGFzQXJncyA/IHZhbHVlc1sxXSA6IHZhbHVlc1swXSkgPz8ge307CiAgICByZXR1cm4geyBhcmdzLCBvcHRpb25zIH07CiAgfQogIGZ1bmN0aW9uIGdldEV2ZW50UGFyYW1ldGVycyh2YWx1ZXMsIGFiaUV2ZW50KSB7CiAgICBsZXQgaGFzQXJncyA9IGZhbHNlOwogICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzWzBdKSkKICAgICAgaGFzQXJncyA9IHRydWU7CiAgICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxKSB7CiAgICAgIGhhc0FyZ3MgPSBhYmlFdmVudC5pbnB1dHMuc29tZSgoeCkgPT4geC5pbmRleGVkKTsKICAgIH0gZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMikgewogICAgICBoYXNBcmdzID0gdHJ1ZTsKICAgIH0KICAgIGNvbnN0IGFyZ3MgPSBoYXNBcmdzID8gdmFsdWVzWzBdIDogdm9pZCAwOwogICAgY29uc3Qgb3B0aW9ucyA9IChoYXNBcmdzID8gdmFsdWVzWzFdIDogdmFsdWVzWzBdKSA/PyB7fTsKICAgIHJldHVybiB7IGFyZ3MsIG9wdGlvbnMgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2VpcDcxMi5qcwogIGluaXRfYmFzZSgpOwogIHZhciBFaXA3MTJEb21haW5Ob3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgYWRkcmVzcyB9KSB7CiAgICAgIHN1cGVyKGBObyBFSVAtNzEyIGRvbWFpbiBmb3VuZCBvbiBjb250cmFjdCAiJHthZGRyZXNzfSIuYCwgewogICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgIkVuc3VyZSB0aGF0OiIsCiAgICAgICAgICBgLSBUaGUgY29udHJhY3QgaXMgZGVwbG95ZWQgYXQgdGhlIGFkZHJlc3MgIiR7YWRkcmVzc30iLmAsCiAgICAgICAgICAiLSBgZWlwNzEyRG9tYWluKClgIGZ1bmN0aW9uIGV4aXN0cyBvbiB0aGUgY29udHJhY3QuIiwKICAgICAgICAgICItIGBlaXA3MTJEb21haW4oKWAgZnVuY3Rpb24gbWF0Y2hlcyBzaWduYXR1cmUgdG8gRVJDLTUyNjcgc3BlY2lmaWNhdGlvbi4iCiAgICAgICAgXSwKICAgICAgICBuYW1lOiAiRWlwNzEyRG9tYWluTm90Rm91bmRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRFaXA3MTJEb21haW4uanMKICBhc3luYyBmdW5jdGlvbiBnZXRFaXA3MTJEb21haW4oY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGZhY3RvcnksIGZhY3RvcnlEYXRhIH0gPSBwYXJhbWV0ZXJzOwogICAgdHJ5IHsKICAgICAgY29uc3QgW2ZpZWxkcywgbmFtZSwgdmVyc2lvbjMsIGNoYWluSWQsIHZlcmlmeWluZ0NvbnRyYWN0LCBzYWx0LCBleHRlbnNpb25zXSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHJlYWRDb250cmFjdCwgInJlYWRDb250cmFjdCIpKHsKICAgICAgICBhYmksCiAgICAgICAgYWRkcmVzcywKICAgICAgICBmdW5jdGlvbk5hbWU6ICJlaXA3MTJEb21haW4iLAogICAgICAgIGZhY3RvcnksCiAgICAgICAgZmFjdG9yeURhdGEKICAgICAgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgZG9tYWluOiB7CiAgICAgICAgICBuYW1lLAogICAgICAgICAgdmVyc2lvbjogdmVyc2lvbjMsCiAgICAgICAgICBjaGFpbklkOiBOdW1iZXIoY2hhaW5JZCksCiAgICAgICAgICB2ZXJpZnlpbmdDb250cmFjdCwKICAgICAgICAgIHNhbHQKICAgICAgICB9LAogICAgICAgIGV4dGVuc2lvbnMsCiAgICAgICAgZmllbGRzCiAgICAgIH07CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIGNvbnN0IGVycm9yID0gZTsKICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICJDb250cmFjdEZ1bmN0aW9uRXhlY3V0aW9uRXJyb3IiICYmIGVycm9yLmNhdXNlLm5hbWUgPT09ICJDb250cmFjdEZ1bmN0aW9uWmVyb0RhdGFFcnJvciIpIHsKICAgICAgICB0aHJvdyBuZXcgRWlwNzEyRG9tYWluTm90Rm91bmRFcnJvcih7IGFkZHJlc3MgfSk7CiAgICAgIH0KICAgICAgdGhyb3cgZXJyb3I7CiAgICB9CiAgfQogIHZhciBhYmkgPSBbCiAgICB7CiAgICAgIGlucHV0czogW10sCiAgICAgIG5hbWU6ICJlaXA3MTJEb21haW4iLAogICAgICBvdXRwdXRzOiBbCiAgICAgICAgeyBuYW1lOiAiZmllbGRzIiwgdHlwZTogImJ5dGVzMSIgfSwKICAgICAgICB7IG5hbWU6ICJuYW1lIiwgdHlwZTogInN0cmluZyIgfSwKICAgICAgICB7IG5hbWU6ICJ2ZXJzaW9uIiwgdHlwZTogInN0cmluZyIgfSwKICAgICAgICB7IG5hbWU6ICJjaGFpbklkIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgeyBuYW1lOiAidmVyaWZ5aW5nQ29udHJhY3QiLCB0eXBlOiAiYWRkcmVzcyIgfSwKICAgICAgICB7IG5hbWU6ICJzYWx0IiwgdHlwZTogImJ5dGVzMzIiIH0sCiAgICAgICAgeyBuYW1lOiAiZXh0ZW5zaW9ucyIsIHR5cGU6ICJ1aW50MjU2W10iIH0KICAgICAgXSwKICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgIH0KICBdOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L2FkZENoYWluLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGFkZENoYWluKGNsaWVudCwgeyBjaGFpbiB9KSB7CiAgICBjb25zdCB7IGlkLCBuYW1lLCBuYXRpdmVDdXJyZW5jeSwgcnBjVXJscywgYmxvY2tFeHBsb3JlcnMgfSA9IGNoYWluOwogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ3YWxsZXRfYWRkRXRoZXJldW1DaGFpbiIsCiAgICAgIHBhcmFtczogWwogICAgICAgIHsKICAgICAgICAgIGNoYWluSWQ6IG51bWJlclRvSGV4KGlkKSwKICAgICAgICAgIGNoYWluTmFtZTogbmFtZSwKICAgICAgICAgIG5hdGl2ZUN1cnJlbmN5LAogICAgICAgICAgcnBjVXJsczogcnBjVXJscy5kZWZhdWx0Lmh0dHAsCiAgICAgICAgICBibG9ja0V4cGxvcmVyVXJsczogYmxvY2tFeHBsb3JlcnMgPyBPYmplY3QudmFsdWVzKGJsb2NrRXhwbG9yZXJzKS5tYXAoKHsgdXJsIH0pID0+IHVybCkgOiB2b2lkIDAKICAgICAgICB9CiAgICAgIF0KICAgIH0sIHsgZGVkdXBlOiB0cnVlLCByZXRyeUNvdW50OiAwIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2NyZWF0ZUNsaWVudC5qcwogIGluaXRfcGFyc2VBY2NvdW50KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdWlkLmpzCiAgdmFyIHNpemUyID0gMjU2OwogIHZhciBpbmRleCA9IHNpemUyOwogIHZhciBidWZmZXI7CiAgZnVuY3Rpb24gdWlkKGxlbmd0aCA9IDExKSB7CiAgICBpZiAoIWJ1ZmZlciB8fCBpbmRleCArIGxlbmd0aCA+IHNpemUyICogMikgewogICAgICBidWZmZXIgPSAiIjsKICAgICAgaW5kZXggPSAwOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemUyOyBpKyspIHsKICAgICAgICBidWZmZXIgKz0gKDI1NiArIE1hdGgucmFuZG9tKCkgKiAyNTYgfCAwKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnN1YnN0cmluZyhpbmRleCwgaW5kZXgrKyArIGxlbmd0aCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvY3JlYXRlQ2xpZW50LmpzCiAgZnVuY3Rpb24gY3JlYXRlQ2xpZW50KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYmF0Y2gsIGNhY2hlVGltZSA9IHBhcmFtZXRlcnMucG9sbGluZ0ludGVydmFsID8/IDRlMywgY2NpcFJlYWQsIGtleSA9ICJiYXNlIiwgbmFtZSA9ICJCYXNlIENsaWVudCIsIHBvbGxpbmdJbnRlcnZhbCA9IDRlMywgdHlwZSA9ICJiYXNlIiB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGNoYWluID0gcGFyYW1ldGVycy5jaGFpbjsKICAgIGNvbnN0IGFjY291bnQgPSBwYXJhbWV0ZXJzLmFjY291bnQgPyBwYXJzZUFjY291bnQocGFyYW1ldGVycy5hY2NvdW50KSA6IHZvaWQgMDsKICAgIGNvbnN0IHsgY29uZmlnLCByZXF1ZXN0LCB2YWx1ZSB9ID0gcGFyYW1ldGVycy50cmFuc3BvcnQoewogICAgICBjaGFpbiwKICAgICAgcG9sbGluZ0ludGVydmFsCiAgICB9KTsKICAgIGNvbnN0IHRyYW5zcG9ydCA9IHsgLi4uY29uZmlnLCAuLi52YWx1ZSB9OwogICAgY29uc3QgY2xpZW50ID0gewogICAgICBhY2NvdW50LAogICAgICBiYXRjaCwKICAgICAgY2FjaGVUaW1lLAogICAgICBjY2lwUmVhZCwKICAgICAgY2hhaW4sCiAgICAgIGtleSwKICAgICAgbmFtZSwKICAgICAgcG9sbGluZ0ludGVydmFsLAogICAgICByZXF1ZXN0LAogICAgICB0cmFuc3BvcnQsCiAgICAgIHR5cGUsCiAgICAgIHVpZDogdWlkKCkKICAgIH07CiAgICBmdW5jdGlvbiBleHRlbmQoYmFzZTIpIHsKICAgICAgcmV0dXJuIChleHRlbmRGbikgPT4gewogICAgICAgIGNvbnN0IGV4dGVuZGVkID0gZXh0ZW5kRm4oYmFzZTIpOwogICAgICAgIGZvciAoY29uc3Qga2V5MiBpbiBjbGllbnQpCiAgICAgICAgICBkZWxldGUgZXh0ZW5kZWRba2V5Ml07CiAgICAgICAgY29uc3QgY29tYmluZWQgPSB7IC4uLmJhc2UyLCAuLi5leHRlbmRlZCB9OwogICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGNvbWJpbmVkLCB7IGV4dGVuZDogZXh0ZW5kKGNvbWJpbmVkKSB9KTsKICAgICAgfTsKICAgIH0KICAgIHJldHVybiBPYmplY3QuYXNzaWduKGNsaWVudCwgeyBleHRlbmQ6IGV4dGVuZChjbGllbnQpIH0pOwogIH0KICBmdW5jdGlvbiBycGNTY2hlbWEoKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYnVpbGRSZXF1ZXN0LmpzCiAgaW5pdF9iYXNlKCk7CiAgaW5pdF9yZXF1ZXN0KCk7CiAgaW5pdF9ycGMoKTsKICBpbml0X3RvSGV4KCk7CiAgaW5pdF9rZWNjYWsyNTYoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9wcm9taXNlL3dpdGhEZWR1cGUuanMKICBpbml0X2xydSgpOwogIHZhciBwcm9taXNlQ2FjaGUyID0gLyogQF9fUFVSRV9fICovIG5ldyBMcnVNYXAoODE5Mik7CiAgZnVuY3Rpb24gd2l0aERlZHVwZShmbiwgeyBlbmFibGVkID0gdHJ1ZSwgaWQgfSkgewogICAgaWYgKCFlbmFibGVkIHx8ICFpZCkKICAgICAgcmV0dXJuIGZuKCk7CiAgICBpZiAocHJvbWlzZUNhY2hlMi5nZXQoaWQpKQogICAgICByZXR1cm4gcHJvbWlzZUNhY2hlMi5nZXQoaWQpOwogICAgY29uc3QgcHJvbWlzZSA9IGZuKCkuZmluYWxseSgoKSA9PiBwcm9taXNlQ2FjaGUyLmRlbGV0ZShpZCkpOwogICAgcHJvbWlzZUNhY2hlMi5zZXQoaWQsIHByb21pc2UpOwogICAgcmV0dXJuIHByb21pc2U7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3Byb21pc2Uvd2l0aFJldHJ5LmpzCiAgZnVuY3Rpb24gd2l0aFJldHJ5KGZuLCB7IGRlbGF5OiBkZWxheV8gPSAxMDAsIHJldHJ5Q291bnQgPSAyLCBzaG91bGRSZXRyeTogc2hvdWxkUmV0cnkyID0gKCkgPT4gdHJ1ZSB9ID0ge30pIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIGNvbnN0IGF0dGVtcHRSZXRyeSA9IGFzeW5jICh7IGNvdW50ID0gMCB9ID0ge30pID0+IHsKICAgICAgICBjb25zdCByZXRyeSA9IGFzeW5jICh7IGVycm9yIH0pID0+IHsKICAgICAgICAgIGNvbnN0IGRlbGF5ID0gdHlwZW9mIGRlbGF5XyA9PT0gImZ1bmN0aW9uIiA/IGRlbGF5Xyh7IGNvdW50LCBlcnJvciB9KSA6IGRlbGF5XzsKICAgICAgICAgIGlmIChkZWxheSkKICAgICAgICAgICAgYXdhaXQgd2FpdChkZWxheSk7CiAgICAgICAgICBhdHRlbXB0UmV0cnkoeyBjb3VudDogY291bnQgKyAxIH0pOwogICAgICAgIH07CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmbigpOwogICAgICAgICAgcmVzb2x2ZShkYXRhKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGlmIChjb3VudCA8IHJldHJ5Q291bnQgJiYgYXdhaXQgc2hvdWxkUmV0cnkyKHsgY291bnQsIGVycm9yOiBlcnIgfSkpCiAgICAgICAgICAgIHJldHVybiByZXRyeSh7IGVycm9yOiBlcnIgfSk7CiAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGF0dGVtcHRSZXRyeSgpOwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2J1aWxkUmVxdWVzdC5qcwogIGluaXRfc3RyaW5naWZ5KCk7CiAgZnVuY3Rpb24gYnVpbGRSZXF1ZXN0KHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkgewogICAgcmV0dXJuIGFzeW5jIChhcmdzLCBvdmVycmlkZU9wdGlvbnMgPSB7fSkgPT4gewogICAgICBjb25zdCB7IGRlZHVwZSA9IGZhbHNlLCByZXRyeURlbGF5ID0gMTUwLCByZXRyeUNvdW50ID0gMywgdWlkOiB1aWQyIH0gPSB7CiAgICAgICAgLi4ub3B0aW9ucywKICAgICAgICAuLi5vdmVycmlkZU9wdGlvbnMKICAgICAgfTsKICAgICAgY29uc3QgcmVxdWVzdElkID0gZGVkdXBlID8ga2VjY2FrMjU2KHN0cmluZ1RvSGV4KGAke3VpZDJ9LiR7c3RyaW5naWZ5KGFyZ3MpfWApKSA6IHZvaWQgMDsKICAgICAgcmV0dXJuIHdpdGhEZWR1cGUoKCkgPT4gd2l0aFJldHJ5KGFzeW5jICgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIGF3YWl0IHJlcXVlc3QoYXJncyk7CiAgICAgICAgfSBjYXRjaCAoZXJyXykgewogICAgICAgICAgY29uc3QgZXJyID0gZXJyXzsKICAgICAgICAgIHN3aXRjaCAoZXJyLmNvZGUpIHsKICAgICAgICAgICAgY2FzZSBQYXJzZVJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlUnBjRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRSZXF1ZXN0UnBjRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBNZXRob2ROb3RGb3VuZFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IE1ldGhvZE5vdEZvdW5kUnBjRXJyb3IoZXJyLCB7IG1ldGhvZDogYXJncy5tZXRob2QgfSk7CiAgICAgICAgICAgIGNhc2UgSW52YWxpZFBhcmFtc1JwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbXNScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIEludGVybmFsUnBjRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIEludmFsaWRJbnB1dFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRJbnB1dFJwY0Vycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlTm90Rm91bmRScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvci5jb2RlOgogICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBUcmFuc2FjdGlvblJlamVjdGVkUnBjRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IoZXJyLCB7CiAgICAgICAgICAgICAgICBtZXRob2Q6IGFyZ3MubWV0aG9kCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNhc2UgTGltaXRFeGNlZWRlZFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IExpbWl0RXhjZWVkZWRScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIEpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvci5jb2RlOgogICAgICAgICAgICAgIHRocm93IG5ldyBKc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBVc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgVXNlclJlamVjdGVkUmVxdWVzdEVycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgVW5hdXRob3JpemVkUHJvdmlkZXJFcnJvci5jb2RlOgogICAgICAgICAgICAgIHRocm93IG5ldyBVbmF1dGhvcml6ZWRQcm92aWRlckVycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIFByb3ZpZGVyRGlzY29ubmVjdGVkRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgUHJvdmlkZXJEaXNjb25uZWN0ZWRFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIENoYWluRGlzY29ubmVjdGVkRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgQ2hhaW5EaXNjb25uZWN0ZWRFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIFN3aXRjaENoYWluRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgU3dpdGNoQ2hhaW5FcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIDVlMzoKICAgICAgICAgICAgICB0aHJvdyBuZXcgVXNlclJlamVjdGVkUmVxdWVzdEVycm9yKGVycik7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgaWYgKGVycl8gaW5zdGFuY2VvZiBCYXNlRXJyb3IyKQogICAgICAgICAgICAgICAgdGhyb3cgZXJyXzsKICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5rbm93blJwY0Vycm9yKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAgZGVsYXk6ICh7IGNvdW50LCBlcnJvciB9KSA9PiB7CiAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IgaW5zdGFuY2VvZiBIdHRwUmVxdWVzdEVycm9yKSB7CiAgICAgICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBlcnJvcj8uaGVhZGVycz8uZ2V0KCJSZXRyeS1BZnRlciIpOwogICAgICAgICAgICBpZiAocmV0cnlBZnRlcj8ubWF0Y2goL1xkLykpCiAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5wYXJzZUludChyZXRyeUFmdGVyKSAqIDFlMzsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB+figxIDw8IGNvdW50KSAqIHJldHJ5RGVsYXk7CiAgICAgICAgfSwKICAgICAgICByZXRyeUNvdW50LAogICAgICAgIHNob3VsZFJldHJ5OiAoeyBlcnJvciB9KSA9PiBzaG91bGRSZXRyeShlcnJvcikKICAgICAgfSksIHsgZW5hYmxlZDogZGVkdXBlLCBpZDogcmVxdWVzdElkIH0pOwogICAgfTsKICB9CiAgZnVuY3Rpb24gc2hvdWxkUmV0cnkoZXJyb3IpIHsKICAgIGlmICgiY29kZSIgaW4gZXJyb3IgJiYgdHlwZW9mIGVycm9yLmNvZGUgPT09ICJudW1iZXIiKSB7CiAgICAgIGlmIChlcnJvci5jb2RlID09PSAtMSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGVycm9yLmNvZGUgPT09IExpbWl0RXhjZWVkZWRScGNFcnJvci5jb2RlKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoZXJyb3IuY29kZSA9PT0gSW50ZXJuYWxScGNFcnJvci5jb2RlKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwUmVxdWVzdEVycm9yICYmIGVycm9yLnN0YXR1cykgewogICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDMpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwOCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDEzKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MjkpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDUwMCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAyKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA1MDMpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDUwNCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvdHJhbnNwb3J0cy9jcmVhdGVUcmFuc3BvcnQuanMKICBmdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnQoeyBrZXksIG5hbWUsIHJlcXVlc3QsIHJldHJ5Q291bnQgPSAzLCByZXRyeURlbGF5ID0gMTUwLCB0aW1lb3V0LCB0eXBlIH0sIHZhbHVlKSB7CiAgICBjb25zdCB1aWQyID0gdWlkKCk7CiAgICByZXR1cm4gewogICAgICBjb25maWc6IHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICByZXF1ZXN0LAogICAgICAgIHJldHJ5Q291bnQsCiAgICAgICAgcmV0cnlEZWxheSwKICAgICAgICB0aW1lb3V0LAogICAgICAgIHR5cGUKICAgICAgfSwKICAgICAgcmVxdWVzdDogYnVpbGRSZXF1ZXN0KHJlcXVlc3QsIHsgcmV0cnlDb3VudCwgcmV0cnlEZWxheSwgdWlkOiB1aWQyIH0pLAogICAgICB2YWx1ZQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2xpZW50cy90cmFuc3BvcnRzL2N1c3RvbS5qcwogIGZ1bmN0aW9uIGN1c3RvbShwcm92aWRlciwgY29uZmlnID0ge30pIHsKICAgIGNvbnN0IHsga2V5ID0gImN1c3RvbSIsIG5hbWUgPSAiQ3VzdG9tIFByb3ZpZGVyIiwgcmV0cnlEZWxheSB9ID0gY29uZmlnOwogICAgcmV0dXJuICh7IHJldHJ5Q291bnQ6IGRlZmF1bHRSZXRyeUNvdW50IH0pID0+IGNyZWF0ZVRyYW5zcG9ydCh7CiAgICAgIGtleSwKICAgICAgbmFtZSwKICAgICAgcmVxdWVzdDogcHJvdmlkZXIucmVxdWVzdC5iaW5kKHByb3ZpZGVyKSwKICAgICAgcmV0cnlDb3VudDogY29uZmlnLnJldHJ5Q291bnQgPz8gZGVmYXVsdFJldHJ5Q291bnQsCiAgICAgIHJldHJ5RGVsYXksCiAgICAgIHR5cGU6ICJjdXN0b20iCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2xpZW50cy90cmFuc3BvcnRzL2ZhbGxiYWNrLmpzCiAgaW5pdF9ycGMoKTsKICBmdW5jdGlvbiBmYWxsYmFjayh0cmFuc3BvcnRzXywgY29uZmlnID0ge30pIHsKICAgIGNvbnN0IHsga2V5ID0gImZhbGxiYWNrIiwgbmFtZSA9ICJGYWxsYmFjayIsIHJhbmsgPSBmYWxzZSwgcmV0cnlDb3VudCwgcmV0cnlEZWxheSB9ID0gY29uZmlnOwogICAgcmV0dXJuICh7IGNoYWluLCBwb2xsaW5nSW50ZXJ2YWwgPSA0ZTMsIHRpbWVvdXQsIC4uLnJlc3QgfSkgPT4gewogICAgICBsZXQgdHJhbnNwb3J0cyA9IHRyYW5zcG9ydHNfOwogICAgICBsZXQgb25SZXNwb25zZSA9ICgpID0+IHsKICAgICAgfTsKICAgICAgY29uc3QgdHJhbnNwb3J0ID0gY3JlYXRlVHJhbnNwb3J0KHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICAgICAgY29uc3QgZmV0Y2gyID0gYXN5bmMgKGkgPSAwKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydDIgPSB0cmFuc3BvcnRzW2ldKHsKICAgICAgICAgICAgICAuLi5yZXN0LAogICAgICAgICAgICAgIGNoYWluLAogICAgICAgICAgICAgIHJldHJ5Q291bnQ6IDAsCiAgICAgICAgICAgICAgdGltZW91dAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRyYW5zcG9ydDIucmVxdWVzdCh7CiAgICAgICAgICAgICAgICBtZXRob2QsCiAgICAgICAgICAgICAgICBwYXJhbXMKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBvblJlc3BvbnNlKHsKICAgICAgICAgICAgICAgIG1ldGhvZCwKICAgICAgICAgICAgICAgIHBhcmFtcywKICAgICAgICAgICAgICAgIHJlc3BvbnNlLAogICAgICAgICAgICAgICAgdHJhbnNwb3J0OiB0cmFuc3BvcnQyLAogICAgICAgICAgICAgICAgc3RhdHVzOiAic3VjY2VzcyIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgIG9uUmVzcG9uc2UoewogICAgICAgICAgICAgICAgZXJyb3I6IGVyciwKICAgICAgICAgICAgICAgIG1ldGhvZCwKICAgICAgICAgICAgICAgIHBhcmFtcywKICAgICAgICAgICAgICAgIHRyYW5zcG9ydDogdHJhbnNwb3J0MiwKICAgICAgICAgICAgICAgIHN0YXR1czogImVycm9yIgogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyhlcnIpKQogICAgICAgICAgICAgICAgdGhyb3cgZXJyOwogICAgICAgICAgICAgIGlmIChpID09PSB0cmFuc3BvcnRzLmxlbmd0aCAtIDEpCiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgICAgICAgcmV0dXJuIGZldGNoMihpICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gZmV0Y2gyKCk7CiAgICAgICAgfSwKICAgICAgICByZXRyeUNvdW50LAogICAgICAgIHJldHJ5RGVsYXksCiAgICAgICAgdHlwZTogImZhbGxiYWNrIgogICAgICB9LCB7CiAgICAgICAgb25SZXNwb25zZTogKGZuKSA9PiBvblJlc3BvbnNlID0gZm4sCiAgICAgICAgdHJhbnNwb3J0czogdHJhbnNwb3J0cy5tYXAoKGZuKSA9PiBmbih7IGNoYWluLCByZXRyeUNvdW50OiAwIH0pKQogICAgICB9KTsKICAgICAgaWYgKHJhbmspIHsKICAgICAgICBjb25zdCByYW5rT3B0aW9ucyA9IHR5cGVvZiByYW5rID09PSAib2JqZWN0IiA/IHJhbmsgOiB7fTsKICAgICAgICByYW5rVHJhbnNwb3J0cyh7CiAgICAgICAgICBjaGFpbiwKICAgICAgICAgIGludGVydmFsOiByYW5rT3B0aW9ucy5pbnRlcnZhbCA/PyBwb2xsaW5nSW50ZXJ2YWwsCiAgICAgICAgICBvblRyYW5zcG9ydHM6ICh0cmFuc3BvcnRzXzIpID0+IHRyYW5zcG9ydHMgPSB0cmFuc3BvcnRzXzIsCiAgICAgICAgICBzYW1wbGVDb3VudDogcmFua09wdGlvbnMuc2FtcGxlQ291bnQsCiAgICAgICAgICB0aW1lb3V0OiByYW5rT3B0aW9ucy50aW1lb3V0LAogICAgICAgICAgdHJhbnNwb3J0cywKICAgICAgICAgIHdlaWdodHM6IHJhbmtPcHRpb25zLndlaWdodHMKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gdHJhbnNwb3J0OwogICAgfTsKICB9CiAgZnVuY3Rpb24gc2hvdWxkVGhyb3coZXJyb3IpIHsKICAgIGlmICgiY29kZSIgaW4gZXJyb3IgJiYgdHlwZW9mIGVycm9yLmNvZGUgPT09ICJudW1iZXIiKSB7CiAgICAgIGlmIChlcnJvci5jb2RlID09PSBUcmFuc2FjdGlvblJlamVjdGVkUnBjRXJyb3IuY29kZSB8fCBlcnJvci5jb2RlID09PSBVc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IuY29kZSB8fCBlcnJvci5jb2RlID09PSA1ZTMpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIHJhbmtUcmFuc3BvcnRzKHsgY2hhaW4sIGludGVydmFsID0gNGUzLCBvblRyYW5zcG9ydHMsIHNhbXBsZUNvdW50ID0gMTAsIHRpbWVvdXQgPSAxZTMsIHRyYW5zcG9ydHMsIHdlaWdodHMgPSB7fSB9KSB7CiAgICBjb25zdCB7IHN0YWJpbGl0eTogc3RhYmlsaXR5V2VpZ2h0ID0gMC43LCBsYXRlbmN5OiBsYXRlbmN5V2VpZ2h0ID0gMC4zIH0gPSB3ZWlnaHRzOwogICAgY29uc3Qgc2FtcGxlcyA9IFtdOwogICAgY29uc3QgcmFua1RyYW5zcG9ydHNfID0gYXN5bmMgKCkgPT4gewogICAgICBjb25zdCBzYW1wbGUgPSBhd2FpdCBQcm9taXNlLmFsbCh0cmFuc3BvcnRzLm1hcChhc3luYyAodHJhbnNwb3J0KSA9PiB7CiAgICAgICAgY29uc3QgdHJhbnNwb3J0XyA9IHRyYW5zcG9ydCh7IGNoYWluLCByZXRyeUNvdW50OiAwLCB0aW1lb3V0IH0pOwogICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTsKICAgICAgICBsZXQgZW5kOwogICAgICAgIGxldCBzdWNjZXNzOwogICAgICAgIHRyeSB7CiAgICAgICAgICBhd2FpdCB0cmFuc3BvcnRfLnJlcXVlc3QoeyBtZXRob2Q6ICJuZXRfbGlzdGVuaW5nIiB9KTsKICAgICAgICAgIHN1Y2Nlc3MgPSAxOwogICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgc3VjY2VzcyA9IDA7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIGVuZCA9IERhdGUubm93KCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxhdGVuY3kgPSBlbmQgLSBzdGFydDsKICAgICAgICByZXR1cm4geyBsYXRlbmN5LCBzdWNjZXNzIH07CiAgICAgIH0pKTsKICAgICAgc2FtcGxlcy5wdXNoKHNhbXBsZSk7CiAgICAgIGlmIChzYW1wbGVzLmxlbmd0aCA+IHNhbXBsZUNvdW50KQogICAgICAgIHNhbXBsZXMuc2hpZnQoKTsKICAgICAgY29uc3QgbWF4TGF0ZW5jeSA9IE1hdGgubWF4KC4uLnNhbXBsZXMubWFwKChzYW1wbGUyKSA9PiBNYXRoLm1heCguLi5zYW1wbGUyLm1hcCgoeyBsYXRlbmN5IH0pID0+IGxhdGVuY3kpKSkpOwogICAgICBjb25zdCBzY29yZXMgPSB0cmFuc3BvcnRzLm1hcCgoXywgaSkgPT4gewogICAgICAgIGNvbnN0IGxhdGVuY2llcyA9IHNhbXBsZXMubWFwKChzYW1wbGUyKSA9PiBzYW1wbGUyW2ldLmxhdGVuY3kpOwogICAgICAgIGNvbnN0IG1lYW5MYXRlbmN5ID0gbGF0ZW5jaWVzLnJlZHVjZSgoYWNjLCBsYXRlbmN5KSA9PiBhY2MgKyBsYXRlbmN5LCAwKSAvIGxhdGVuY2llcy5sZW5ndGg7CiAgICAgICAgY29uc3QgbGF0ZW5jeVNjb3JlID0gMSAtIG1lYW5MYXRlbmN5IC8gbWF4TGF0ZW5jeTsKICAgICAgICBjb25zdCBzdWNjZXNzZXMgPSBzYW1wbGVzLm1hcCgoc2FtcGxlMikgPT4gc2FtcGxlMltpXS5zdWNjZXNzKTsKICAgICAgICBjb25zdCBzdGFiaWxpdHlTY29yZSA9IHN1Y2Nlc3Nlcy5yZWR1Y2UoKGFjYywgc3VjY2VzcykgPT4gYWNjICsgc3VjY2VzcywgMCkgLyBzdWNjZXNzZXMubGVuZ3RoOwogICAgICAgIGlmIChzdGFiaWxpdHlTY29yZSA9PT0gMCkKICAgICAgICAgIHJldHVybiBbMCwgaV07CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgIGxhdGVuY3lXZWlnaHQgKiBsYXRlbmN5U2NvcmUgKyBzdGFiaWxpdHlXZWlnaHQgKiBzdGFiaWxpdHlTY29yZSwKICAgICAgICAgIGkKICAgICAgICBdOwogICAgICB9KS5zb3J0KChhLCBiKSA9PiBiWzBdIC0gYVswXSk7CiAgICAgIG9uVHJhbnNwb3J0cyhzY29yZXMubWFwKChbLCBpXSkgPT4gdHJhbnNwb3J0c1tpXSkpOwogICAgICBhd2FpdCB3YWl0KGludGVydmFsKTsKICAgICAgcmFua1RyYW5zcG9ydHNfKCk7CiAgICB9OwogICAgcmFua1RyYW5zcG9ydHNfKCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvdHJhbnNwb3J0cy9odHRwLmpzCiAgaW5pdF9yZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL3RyYW5zcG9ydC5qcwogIGluaXRfYmFzZSgpOwogIHZhciBVcmxSZXF1aXJlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiTm8gVVJMIHdhcyBwcm92aWRlZCB0byB0aGUgVHJhbnNwb3J0LiBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIFJQQyBVUkwgdG8gdGhlIFRyYW5zcG9ydC4iLCB7CiAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9jbGllbnRzL2ludHJvIiwKICAgICAgICBuYW1lOiAiVXJsUmVxdWlyZWRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL3RyYW5zcG9ydHMvaHR0cC5qcwogIGluaXRfY3JlYXRlQmF0Y2hTY2hlZHVsZXIoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ycGMvaHR0cC5qcwogIGluaXRfcmVxdWVzdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3Byb21pc2Uvd2l0aFRpbWVvdXQuanMKICBmdW5jdGlvbiB3aXRoVGltZW91dChmbiwgeyBlcnJvckluc3RhbmNlID0gbmV3IEVycm9yKCJ0aW1lZCBvdXQiKSwgdGltZW91dCwgc2lnbmFsIH0pIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIDsKICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICBsZXQgdGltZW91dElkOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgICAgaWYgKHRpbWVvdXQgPiAwKSB7CiAgICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIGlmIChzaWduYWwpIHsKICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVqZWN0KGVycm9ySW5zdGFuY2UpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgdGltZW91dCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXNvbHZlKGF3YWl0IGZuKHsgc2lnbmFsOiBjb250cm9sbGVyPy5zaWduYWwgfHwgbnVsbCB9KSk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBpZiAoZXJyPy5uYW1lID09PSAiQWJvcnRFcnJvciIpCiAgICAgICAgICAgIHJlamVjdChlcnJvckluc3RhbmNlKTsKICAgICAgICAgIHJlamVjdChlcnIpOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTsKICAgICAgICB9CiAgICAgIH0pKCk7CiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcnBjL2h0dHAuanMKICBpbml0X3N0cmluZ2lmeSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3JwYy9pZC5qcwogIGZ1bmN0aW9uIGNyZWF0ZUlkU3RvcmUoKSB7CiAgICByZXR1cm4gewogICAgICBjdXJyZW50OiAwLAogICAgICB0YWtlKCkgewogICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQrKzsKICAgICAgfSwKICAgICAgcmVzZXQoKSB7CiAgICAgICAgdGhpcy5jdXJyZW50ID0gMDsKICAgICAgfQogICAgfTsKICB9CiAgdmFyIGlkQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gY3JlYXRlSWRTdG9yZSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3JwYy9odHRwLmpzCiAgZnVuY3Rpb24gZ2V0SHR0cFJwY0NsaWVudCh1cmwsIG9wdGlvbnMgPSB7fSkgewogICAgcmV0dXJuIHsKICAgICAgYXN5bmMgcmVxdWVzdChwYXJhbXMpIHsKICAgICAgICBjb25zdCB7IGJvZHksIG9uUmVxdWVzdCA9IG9wdGlvbnMub25SZXF1ZXN0LCBvblJlc3BvbnNlID0gb3B0aW9ucy5vblJlc3BvbnNlLCB0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID8/IDFlNCB9ID0gcGFyYW1zOwogICAgICAgIGNvbnN0IGZldGNoT3B0aW9ucyA9IHsKICAgICAgICAgIC4uLm9wdGlvbnMuZmV0Y2hPcHRpb25zID8/IHt9LAogICAgICAgICAgLi4ucGFyYW1zLmZldGNoT3B0aW9ucyA/PyB7fQogICAgICAgIH07CiAgICAgICAgY29uc3QgeyBoZWFkZXJzLCBtZXRob2QsIHNpZ25hbDogc2lnbmFsXyB9ID0gZmV0Y2hPcHRpb25zOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHdpdGhUaW1lb3V0KGFzeW5jICh7IHNpZ25hbCB9KSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGluaXQgPSB7CiAgICAgICAgICAgICAgLi4uZmV0Y2hPcHRpb25zLAogICAgICAgICAgICAgIGJvZHk6IEFycmF5LmlzQXJyYXkoYm9keSkgPyBzdHJpbmdpZnkoYm9keS5tYXAoKGJvZHkyKSA9PiAoewogICAgICAgICAgICAgICAganNvbnJwYzogIjIuMCIsCiAgICAgICAgICAgICAgICBpZDogYm9keTIuaWQgPz8gaWRDYWNoZS50YWtlKCksCiAgICAgICAgICAgICAgICAuLi5ib2R5MgogICAgICAgICAgICAgIH0pKSkgOiBzdHJpbmdpZnkoewogICAgICAgICAgICAgICAganNvbnJwYzogIjIuMCIsCiAgICAgICAgICAgICAgICBpZDogYm9keS5pZCA/PyBpZENhY2hlLnRha2UoKSwKICAgICAgICAgICAgICAgIC4uLmJvZHkKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICAgICAgICAgLi4uaGVhZGVycwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QgfHwgIlBPU1QiLAogICAgICAgICAgICAgIHNpZ25hbDogc2lnbmFsXyB8fCAodGltZW91dCA+IDAgPyBzaWduYWwgOiBudWxsKQogICAgICAgICAgICB9OwogICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCBpbml0KTsKICAgICAgICAgICAgaWYgKG9uUmVxdWVzdCkKICAgICAgICAgICAgICBhd2FpdCBvblJlcXVlc3QocmVxdWVzdCk7CiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlMiA9IGF3YWl0IGZldGNoKHVybCwgaW5pdCk7CiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTI7CiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIGVycm9ySW5zdGFuY2U6IG5ldyBUaW1lb3V0RXJyb3IoeyBib2R5LCB1cmwgfSksCiAgICAgICAgICAgIHRpbWVvdXQsCiAgICAgICAgICAgIHNpZ25hbDogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAob25SZXNwb25zZSkKICAgICAgICAgICAgYXdhaXQgb25SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgICBsZXQgZGF0YTsKICAgICAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIik/LnN0YXJ0c1dpdGgoImFwcGxpY2F0aW9uL2pzb24iKSkKICAgICAgICAgICAgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBkYXRhID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhIHx8ICJ7fSIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykgewogICAgICAgICAgICB0aHJvdyBuZXcgSHR0cFJlcXVlc3RFcnJvcih7CiAgICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgICBkZXRhaWxzOiBzdHJpbmdpZnkoZGF0YS5lcnJvcikgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dCwKICAgICAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLAogICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLAogICAgICAgICAgICAgIHVybAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEh0dHBSZXF1ZXN0RXJyb3IpCiAgICAgICAgICAgIHRocm93IGVycjsKICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IpCiAgICAgICAgICAgIHRocm93IGVycjsKICAgICAgICAgIHRocm93IG5ldyBIdHRwUmVxdWVzdEVycm9yKHsKICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgY2F1c2U6IGVyciwKICAgICAgICAgICAgdXJsCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvdHJhbnNwb3J0cy9odHRwLmpzCiAgZnVuY3Rpb24gaHR0cCh1cmwsIGNvbmZpZyA9IHt9KSB7CiAgICBjb25zdCB7IGJhdGNoLCBmZXRjaE9wdGlvbnMsIGtleSA9ICJodHRwIiwgbmFtZSA9ICJIVFRQIEpTT04tUlBDIiwgb25GZXRjaFJlcXVlc3QsIG9uRmV0Y2hSZXNwb25zZSwgcmV0cnlEZWxheSB9ID0gY29uZmlnOwogICAgcmV0dXJuICh7IGNoYWluLCByZXRyeUNvdW50OiByZXRyeUNvdW50XywgdGltZW91dDogdGltZW91dF8gfSkgPT4gewogICAgICBjb25zdCB7IGJhdGNoU2l6ZSA9IDFlMywgd2FpdDogd2FpdDIgPSAwIH0gPSB0eXBlb2YgYmF0Y2ggPT09ICJvYmplY3QiID8gYmF0Y2ggOiB7fTsKICAgICAgY29uc3QgcmV0cnlDb3VudCA9IGNvbmZpZy5yZXRyeUNvdW50ID8/IHJldHJ5Q291bnRfOwogICAgICBjb25zdCB0aW1lb3V0ID0gdGltZW91dF8gPz8gY29uZmlnLnRpbWVvdXQgPz8gMWU0OwogICAgICBjb25zdCB1cmxfID0gdXJsIHx8IGNoYWluPy5ycGNVcmxzLmRlZmF1bHQuaHR0cFswXTsKICAgICAgaWYgKCF1cmxfKQogICAgICAgIHRocm93IG5ldyBVcmxSZXF1aXJlZEVycm9yKCk7CiAgICAgIGNvbnN0IHJwY0NsaWVudCA9IGdldEh0dHBScGNDbGllbnQodXJsXywgewogICAgICAgIGZldGNoT3B0aW9ucywKICAgICAgICBvblJlcXVlc3Q6IG9uRmV0Y2hSZXF1ZXN0LAogICAgICAgIG9uUmVzcG9uc2U6IG9uRmV0Y2hSZXNwb25zZSwKICAgICAgICB0aW1lb3V0CiAgICAgIH0pOwogICAgICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICAgICAgY29uc3QgYm9keSA9IHsgbWV0aG9kLCBwYXJhbXMgfTsKICAgICAgICAgIGNvbnN0IHsgc2NoZWR1bGUgfSA9IGNyZWF0ZUJhdGNoU2NoZWR1bGVyKHsKICAgICAgICAgICAgaWQ6IHVybF8sCiAgICAgICAgICAgIHdhaXQ6IHdhaXQyLAogICAgICAgICAgICBzaG91bGRTcGxpdEJhdGNoKHJlcXVlc3RzKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RzLmxlbmd0aCA+IGJhdGNoU2l6ZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZm46IChib2R5MikgPT4gcnBjQ2xpZW50LnJlcXVlc3QoewogICAgICAgICAgICAgIGJvZHk6IGJvZHkyCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBzb3J0OiAoYSwgYikgPT4gYS5pZCAtIGIuaWQKICAgICAgICAgIH0pOwogICAgICAgICAgY29uc3QgZm4gPSBhc3luYyAoYm9keTIpID0+IGJhdGNoID8gc2NoZWR1bGUoYm9keTIpIDogWwogICAgICAgICAgICBhd2FpdCBycGNDbGllbnQucmVxdWVzdCh7CiAgICAgICAgICAgICAgYm9keTogYm9keTIKICAgICAgICAgICAgfSkKICAgICAgICAgIF07CiAgICAgICAgICBjb25zdCBbeyBlcnJvciwgcmVzdWx0IH1dID0gYXdhaXQgZm4oYm9keSk7CiAgICAgICAgICBpZiAoZXJyb3IpCiAgICAgICAgICAgIHRocm93IG5ldyBScGNSZXF1ZXN0RXJyb3IoewogICAgICAgICAgICAgIGJvZHksCiAgICAgICAgICAgICAgZXJyb3IsCiAgICAgICAgICAgICAgdXJsOiB1cmxfCiAgICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9LAogICAgICAgIHJldHJ5Q291bnQsCiAgICAgICAgcmV0cnlEZWxheSwKICAgICAgICB0aW1lb3V0LAogICAgICAgIHR5cGU6ICJodHRwIgogICAgICB9LCB7CiAgICAgICAgZmV0Y2hPcHRpb25zLAogICAgICAgIHVybDogdXJsXwogICAgICB9KTsKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvZW5zL2dldEVuc0FkZHJlc3MuanMKICBpbml0X2FiaXMoKTsKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2dldENoYWluQ29udHJhY3RBZGRyZXNzKCk7CiAgaW5pdF90cmltKCk7CiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9lcnJvcnMuanMKICBpbml0X3NvbGlkaXR5KCk7CiAgaW5pdF9iYXNlKCk7CiAgaW5pdF9jb250cmFjdCgpOwogIGZ1bmN0aW9uIGlzTnVsbFVuaXZlcnNhbFJlc29sdmVyRXJyb3IoZXJyLCBjYWxsVHlwZSkgewogICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgQmFzZUVycm9yMikpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IGNhdXNlID0gZXJyLndhbGsoKGUpID0+IGUgaW5zdGFuY2VvZiBDb250cmFjdEZ1bmN0aW9uUmV2ZXJ0ZWRFcnJvcik7CiAgICBpZiAoIShjYXVzZSBpbnN0YW5jZW9mIENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKGNhdXNlLmRhdGE/LmVycm9yTmFtZSA9PT0gIlJlc29sdmVyTm90Rm91bmQiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChjYXVzZS5kYXRhPy5lcnJvck5hbWUgPT09ICJSZXNvbHZlcldpbGRjYXJkTm90U3VwcG9ydGVkIikKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoY2F1c2UuZGF0YT8uZXJyb3JOYW1lID09PSAiUmVzb2x2ZXJOb3RDb250cmFjdCIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKGNhdXNlLmRhdGE/LmVycm9yTmFtZSA9PT0gIlJlc29sdmVyRXJyb3IiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChjYXVzZS5kYXRhPy5lcnJvck5hbWUgPT09ICJIdHRwRXJyb3IiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChjYXVzZS5yZWFzb24/LmluY2x1ZGVzKCJXaWxkY2FyZCBvbiBub24tZXh0ZW5kZWQgcmVzb2x2ZXJzIGlzIG5vdCBzdXBwb3J0ZWQiKSkKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoY2FsbFR5cGUgPT09ICJyZXZlcnNlIiAmJiBjYXVzZS5yZWFzb24gPT09IHBhbmljUmVhc29uc1s1MF0pCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbnMvbmFtZWhhc2guanMKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X2tlY2NhazI1NigpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9lbmNvZGVkTGFiZWxUb0xhYmVsaGFzaC5qcwogIGluaXRfaXNIZXgoKTsKICBmdW5jdGlvbiBlbmNvZGVkTGFiZWxUb0xhYmVsaGFzaChsYWJlbCkgewogICAgaWYgKGxhYmVsLmxlbmd0aCAhPT0gNjYpCiAgICAgIHJldHVybiBudWxsOwogICAgaWYgKGxhYmVsLmluZGV4T2YoIlsiKSAhPT0gMCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBpZiAobGFiZWwuaW5kZXhPZigiXSIpICE9PSA2NSkKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCBoYXNoMyA9IGAweCR7bGFiZWwuc2xpY2UoMSwgNjUpfWA7CiAgICBpZiAoIWlzSGV4KGhhc2gzKSkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gaGFzaDM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9uYW1laGFzaC5qcwogIGZ1bmN0aW9uIG5hbWVoYXNoKG5hbWUpIHsKICAgIGxldCByZXN1bHQgPSBuZXcgVWludDhBcnJheSgzMikuZmlsbCgwKTsKICAgIGlmICghbmFtZSkKICAgICAgcmV0dXJuIGJ5dGVzVG9IZXgocmVzdWx0KTsKICAgIGNvbnN0IGxhYmVscyA9IG5hbWUuc3BsaXQoIi4iKTsKICAgIGZvciAobGV0IGkgPSBsYWJlbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHsKICAgICAgY29uc3QgaGFzaEZyb21FbmNvZGVkTGFiZWwgPSBlbmNvZGVkTGFiZWxUb0xhYmVsaGFzaChsYWJlbHNbaV0pOwogICAgICBjb25zdCBoYXNoZWQgPSBoYXNoRnJvbUVuY29kZWRMYWJlbCA/IHRvQnl0ZXMoaGFzaEZyb21FbmNvZGVkTGFiZWwpIDoga2VjY2FrMjU2KHN0cmluZ1RvQnl0ZXMobGFiZWxzW2ldKSwgImJ5dGVzIik7CiAgICAgIHJlc3VsdCA9IGtlY2NhazI1Nihjb25jYXQoW3Jlc3VsdCwgaGFzaGVkXSksICJieXRlcyIpOwogICAgfQogICAgcmV0dXJuIGJ5dGVzVG9IZXgocmVzdWx0KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5zL3BhY2tldFRvQnl0ZXMuanMKICBpbml0X3RvQnl0ZXMoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbnMvZW5jb2RlTGFiZWxoYXNoLmpzCiAgZnVuY3Rpb24gZW5jb2RlTGFiZWxoYXNoKGhhc2gzKSB7CiAgICByZXR1cm4gYFske2hhc2gzLnNsaWNlKDIpfV1gOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbnMvbGFiZWxoYXNoLmpzCiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGluaXRfa2VjY2FrMjU2KCk7CiAgZnVuY3Rpb24gbGFiZWxoYXNoKGxhYmVsKSB7CiAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheSgzMikuZmlsbCgwKTsKICAgIGlmICghbGFiZWwpCiAgICAgIHJldHVybiBieXRlc1RvSGV4KHJlc3VsdCk7CiAgICByZXR1cm4gZW5jb2RlZExhYmVsVG9MYWJlbGhhc2gobGFiZWwpIHx8IGtlY2NhazI1NihzdHJpbmdUb0J5dGVzKGxhYmVsKSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9wYWNrZXRUb0J5dGVzLmpzCiAgZnVuY3Rpb24gcGFja2V0VG9CeXRlcyhwYWNrZXQpIHsKICAgIGNvbnN0IHZhbHVlID0gcGFja2V0LnJlcGxhY2UoL15cLnxcLiQvZ20sICIiKTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgxKTsKICAgIGNvbnN0IGJ5dGVzMiA9IG5ldyBVaW50OEFycmF5KHN0cmluZ1RvQnl0ZXModmFsdWUpLmJ5dGVMZW5ndGggKyAyKTsKICAgIGxldCBvZmZzZXQgPSAwOwogICAgY29uc3QgbGlzdCA9IHZhbHVlLnNwbGl0KCIuIik7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgbGV0IGVuY29kZWQgPSBzdHJpbmdUb0J5dGVzKGxpc3RbaV0pOwogICAgICBpZiAoZW5jb2RlZC5ieXRlTGVuZ3RoID4gMjU1KQogICAgICAgIGVuY29kZWQgPSBzdHJpbmdUb0J5dGVzKGVuY29kZUxhYmVsaGFzaChsYWJlbGhhc2gobGlzdFtpXSkpKTsKICAgICAgYnl0ZXMyW29mZnNldF0gPSBlbmNvZGVkLmxlbmd0aDsKICAgICAgYnl0ZXMyLnNldChlbmNvZGVkLCBvZmZzZXQgKyAxKTsKICAgICAgb2Zmc2V0ICs9IGVuY29kZWQubGVuZ3RoICsgMTsKICAgIH0KICAgIGlmIChieXRlczIuYnl0ZUxlbmd0aCAhPT0gb2Zmc2V0ICsgMSkKICAgICAgcmV0dXJuIGJ5dGVzMi5zbGljZSgwLCBvZmZzZXQgKyAxKTsKICAgIHJldHVybiBieXRlczI7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvZW5zL2dldEVuc0FkZHJlc3MuanMKICBhc3luYyBmdW5jdGlvbiBnZXRFbnNBZGRyZXNzKGNsaWVudCwgeyBibG9ja051bWJlciwgYmxvY2tUYWcsIGNvaW5UeXBlLCBuYW1lLCBnYXRld2F5VXJscywgc3RyaWN0LCB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3M6IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc18gfSkgewogICAgbGV0IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyA9IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc187CiAgICBpZiAoIXVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcykgewogICAgICBpZiAoIWNsaWVudC5jaGFpbikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNsaWVudCBjaGFpbiBub3QgY29uZmlndXJlZC4gdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzIGlzIHJlcXVpcmVkLiIpOwogICAgICB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgPSBnZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyh7CiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgY2hhaW46IGNsaWVudC5jaGFpbiwKICAgICAgICBjb250cmFjdDogImVuc1VuaXZlcnNhbFJlc29sdmVyIgogICAgICB9KTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IGZ1bmN0aW9uRGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7CiAgICAgICAgYWJpOiBhZGRyZXNzUmVzb2x2ZXJBYmksCiAgICAgICAgZnVuY3Rpb25OYW1lOiAiYWRkciIsCiAgICAgICAgLi4uY29pblR5cGUgIT0gbnVsbCA/IHsgYXJnczogW25hbWVoYXNoKG5hbWUpLCBCaWdJbnQoY29pblR5cGUpXSB9IDogeyBhcmdzOiBbbmFtZWhhc2gobmFtZSldIH0KICAgICAgfSk7CiAgICAgIGNvbnN0IHJlYWRDb250cmFjdFBhcmFtZXRlcnMgPSB7CiAgICAgICAgYWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzLAogICAgICAgIGFiaTogdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpLAogICAgICAgIGZ1bmN0aW9uTmFtZTogInJlc29sdmUiLAogICAgICAgIGFyZ3M6IFt0b0hleChwYWNrZXRUb0J5dGVzKG5hbWUpKSwgZnVuY3Rpb25EYXRhXSwKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBibG9ja1RhZwogICAgICB9OwogICAgICBjb25zdCByZWFkQ29udHJhY3RBY3Rpb24gPSBnZXRBY3Rpb24oY2xpZW50LCByZWFkQ29udHJhY3QsICJyZWFkQ29udHJhY3QiKTsKICAgICAgY29uc3QgcmVzID0gZ2F0ZXdheVVybHMgPyBhd2FpdCByZWFkQ29udHJhY3RBY3Rpb24oewogICAgICAgIC4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMsCiAgICAgICAgYXJnczogWy4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMuYXJncywgZ2F0ZXdheVVybHNdCiAgICAgIH0pIDogYXdhaXQgcmVhZENvbnRyYWN0QWN0aW9uKHJlYWRDb250cmFjdFBhcmFtZXRlcnMpOwogICAgICBpZiAocmVzWzBdID09PSAiMHgiKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCBhZGRyZXNzID0gZGVjb2RlRnVuY3Rpb25SZXN1bHQoewogICAgICAgIGFiaTogYWRkcmVzc1Jlc29sdmVyQWJpLAogICAgICAgIGFyZ3M6IGNvaW5UeXBlICE9IG51bGwgPyBbbmFtZWhhc2gobmFtZSksIEJpZ0ludChjb2luVHlwZSldIDogdm9pZCAwLAogICAgICAgIGZ1bmN0aW9uTmFtZTogImFkZHIiLAogICAgICAgIGRhdGE6IHJlc1swXQogICAgICB9KTsKICAgICAgaWYgKGFkZHJlc3MgPT09ICIweCIpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGlmICh0cmltKGFkZHJlc3MpID09PSAiMHgwMCIpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBhZGRyZXNzOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGlmIChzdHJpY3QpCiAgICAgICAgdGhyb3cgZXJyOwogICAgICBpZiAoaXNOdWxsVW5pdmVyc2FsUmVzb2x2ZXJFcnJvcihlcnIsICJyZXNvbHZlIikpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHRocm93IGVycjsKICAgIH0KICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2Vucy5qcwogIGluaXRfYmFzZSgpOwogIHZhciBFbnNBdmF0YXJJbnZhbGlkTWV0YWRhdGFFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGRhdGEgfSkgewogICAgICBzdXBlcigiVW5hYmxlIHRvIGV4dHJhY3QgaW1hZ2UgZnJvbSBtZXRhZGF0YS4gVGhlIG1ldGFkYXRhIG1heSBiZSBtYWxmb3JtZWQgb3IgaW52YWxpZC4iLCB7CiAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAiLSBNZXRhZGF0YSBtdXN0IGJlIGEgSlNPTiBvYmplY3Qgd2l0aCBhdCBsZWFzdCBhbiBgaW1hZ2VgLCBgaW1hZ2VfdXJsYCBvciBgaW1hZ2VfZGF0YWAgcHJvcGVydHkuIiwKICAgICAgICAgICIiLAogICAgICAgICAgYFByb3ZpZGVkIGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YAogICAgICAgIF0sCiAgICAgICAgbmFtZTogIkVuc0F2YXRhckludmFsaWRNZXRhZGF0YUVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwogIHZhciBFbnNBdmF0YXJJbnZhbGlkTmZ0VXJpRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyByZWFzb24gfSkgewogICAgICBzdXBlcihgRU5TIE5GVCBhdmF0YXIgVVJJIGlzIGludmFsaWQuICR7cmVhc29ufWAsIHsKICAgICAgICBuYW1lOiAiRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwogIHZhciBFbnNBdmF0YXJVcmlSZXNvbHV0aW9uRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyB1cmkgfSkgewogICAgICBzdXBlcihgVW5hYmxlIHRvIHJlc29sdmUgRU5TIGF2YXRhciBVUkkgIiR7dXJpfSIuIFRoZSBVUkkgbWF5IGJlIG1hbGZvcm1lZCwgaW52YWxpZCwgb3IgZG9lcyBub3QgcmVzcG9uZCB3aXRoIGEgdmFsaWQgaW1hZ2UuYCwgeyBuYW1lOiAiRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yIiB9KTsKICAgIH0KICB9OwogIHZhciBFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgbmFtZXNwYWNlIH0pIHsKICAgICAgc3VwZXIoYEVOUyBORlQgYXZhdGFyIG5hbWVzcGFjZSAiJHtuYW1lc3BhY2V9IiBpcyBub3Qgc3VwcG9ydGVkLiBNdXN0IGJlICJlcmM3MjEiIG9yICJlcmMxMTU1Ii5gLCB7IG5hbWU6ICJFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yIiB9KTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9hdmF0YXIvdXRpbHMuanMKICB2YXIgbmV0d29ya1JlZ2V4ID0gLyg/PHByb3RvY29sPmh0dHBzPzpcL1wvW15cL10qfGlwZnM6XC98aXBuczpcL3xhcjpcLyk/KD88cm9vdD5cLyk/KD88c3VicGF0aD5pcGZzXC98aXBuc1wvKT8oPzx0YXJnZXQ+W1x3XC0uXSspKD88c3VidGFyZ2V0PlwvLiopPy87CiAgdmFyIGlwZnNIYXNoUmVnZXggPSAvXihRbVsxLTlBLUhKLU5QLVphLWttLXpdezQ0LH18YltBLVphLXoyLTddezU4LH18QltBLVoyLTddezU4LH18elsxLTlBLUhKLU5QLVphLWttLXpdezQ4LH18RlswLTlBLUZdezUwLH0pKFwvKD88dGFyZ2V0Pltcd1wtLl0rKSk/KD88c3VidGFyZ2V0PlwvLiopPyQvOwogIHZhciBiYXNlNjRSZWdleCA9IC9eZGF0YTooW2EtekEtWlwtLytdKik7YmFzZTY0LChbXiJdLiopLzsKICB2YXIgZGF0YVVSSVJlZ2V4ID0gL15kYXRhOihbYS16QS1aXC0vK10qKT8oO1thLXpBLVowLTldLio/KT8oLCkvOwogIGFzeW5jIGZ1bmN0aW9uIGlzSW1hZ2VVcmkodXJpKSB7CiAgICB0cnkgewogICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmksIHsgbWV0aG9kOiAiSEVBRCIgfSk7CiAgICAgIGlmIChyZXMuc3RhdHVzID09PSAyMDApIHsKICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIik7CiAgICAgICAgcmV0dXJuIGNvbnRlbnRUeXBlPy5zdGFydHNXaXRoKCJpbWFnZS8iKTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBpZiAodHlwZW9mIGVycm9yID09PSAib2JqZWN0IiAmJiB0eXBlb2YgZXJyb3IucmVzcG9uc2UgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmICghZ2xvYmFsVGhpcy5oYXNPd25Qcm9wZXJ0eSgiSW1hZ2UiKSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpOwogICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7CiAgICAgICAgICByZXNvbHZlKHRydWUpOwogICAgICAgIH07CiAgICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiB7CiAgICAgICAgICByZXNvbHZlKGZhbHNlKTsKICAgICAgICB9OwogICAgICAgIGltZy5zcmMgPSB1cmk7CiAgICAgIH0pOwogICAgfQogIH0KICBmdW5jdGlvbiBnZXRHYXRld2F5KGN1c3RvbTIsIGRlZmF1bHRHYXRld2F5KSB7CiAgICBpZiAoIWN1c3RvbTIpCiAgICAgIHJldHVybiBkZWZhdWx0R2F0ZXdheTsKICAgIGlmIChjdXN0b20yLmVuZHNXaXRoKCIvIikpCiAgICAgIHJldHVybiBjdXN0b20yLnNsaWNlKDAsIC0xKTsKICAgIHJldHVybiBjdXN0b20yOwogIH0KICBmdW5jdGlvbiByZXNvbHZlQXZhdGFyVXJpKHsgdXJpLCBnYXRld2F5VXJscyB9KSB7CiAgICBjb25zdCBpc0VuY29kZWQgPSBiYXNlNjRSZWdleC50ZXN0KHVyaSk7CiAgICBpZiAoaXNFbmNvZGVkKQogICAgICByZXR1cm4geyB1cmksIGlzT25DaGFpbjogdHJ1ZSwgaXNFbmNvZGVkIH07CiAgICBjb25zdCBpcGZzR2F0ZXdheSA9IGdldEdhdGV3YXkoZ2F0ZXdheVVybHM/LmlwZnMsICJodHRwczovL2lwZnMuaW8iKTsKICAgIGNvbnN0IGFyd2VhdmVHYXRld2F5ID0gZ2V0R2F0ZXdheShnYXRld2F5VXJscz8uYXJ3ZWF2ZSwgImh0dHBzOi8vYXJ3ZWF2ZS5uZXQiKTsKICAgIGNvbnN0IG5ldHdvcmtSZWdleE1hdGNoID0gdXJpLm1hdGNoKG5ldHdvcmtSZWdleCk7CiAgICBjb25zdCB7IHByb3RvY29sLCBzdWJwYXRoLCB0YXJnZXQsIHN1YnRhcmdldCA9ICIiIH0gPSBuZXR3b3JrUmVnZXhNYXRjaD8uZ3JvdXBzIHx8IHt9OwogICAgY29uc3QgaXNJUE5TID0gcHJvdG9jb2wgPT09ICJpcG5zOi8iIHx8IHN1YnBhdGggPT09ICJpcG5zLyI7CiAgICBjb25zdCBpc0lQRlMgPSBwcm90b2NvbCA9PT0gImlwZnM6LyIgfHwgc3VicGF0aCA9PT0gImlwZnMvIiB8fCBpcGZzSGFzaFJlZ2V4LnRlc3QodXJpKTsKICAgIGlmICh1cmkuc3RhcnRzV2l0aCgiaHR0cCIpICYmICFpc0lQTlMgJiYgIWlzSVBGUykgewogICAgICBsZXQgcmVwbGFjZWRVcmkgPSB1cmk7CiAgICAgIGlmIChnYXRld2F5VXJscz8uYXJ3ZWF2ZSkKICAgICAgICByZXBsYWNlZFVyaSA9IHVyaS5yZXBsYWNlKC9odHRwczpcL1wvYXJ3ZWF2ZS5uZXQvZywgZ2F0ZXdheVVybHM/LmFyd2VhdmUpOwogICAgICByZXR1cm4geyB1cmk6IHJlcGxhY2VkVXJpLCBpc09uQ2hhaW46IGZhbHNlLCBpc0VuY29kZWQ6IGZhbHNlIH07CiAgICB9CiAgICBpZiAoKGlzSVBOUyB8fCBpc0lQRlMpICYmIHRhcmdldCkgewogICAgICByZXR1cm4gewogICAgICAgIHVyaTogYCR7aXBmc0dhdGV3YXl9LyR7aXNJUE5TID8gImlwbnMiIDogImlwZnMifS8ke3RhcmdldH0ke3N1YnRhcmdldH1gLAogICAgICAgIGlzT25DaGFpbjogZmFsc2UsCiAgICAgICAgaXNFbmNvZGVkOiBmYWxzZQogICAgICB9OwogICAgfQogICAgaWYgKHByb3RvY29sID09PSAiYXI6LyIgJiYgdGFyZ2V0KSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdXJpOiBgJHthcndlYXZlR2F0ZXdheX0vJHt0YXJnZXR9JHtzdWJ0YXJnZXQgfHwgIiJ9YCwKICAgICAgICBpc09uQ2hhaW46IGZhbHNlLAogICAgICAgIGlzRW5jb2RlZDogZmFsc2UKICAgICAgfTsKICAgIH0KICAgIGxldCBwYXJzZWRVcmkgPSB1cmkucmVwbGFjZShkYXRhVVJJUmVnZXgsICIiKTsKICAgIGlmIChwYXJzZWRVcmkuc3RhcnRzV2l0aCgiPHN2ZyIpKSB7CiAgICAgIHBhcnNlZFVyaSA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7YnRvYShwYXJzZWRVcmkpfWA7CiAgICB9CiAgICBpZiAocGFyc2VkVXJpLnN0YXJ0c1dpdGgoImRhdGE6IikgfHwgcGFyc2VkVXJpLnN0YXJ0c1dpdGgoInsiKSkgewogICAgICByZXR1cm4gewogICAgICAgIHVyaTogcGFyc2VkVXJpLAogICAgICAgIGlzT25DaGFpbjogdHJ1ZSwKICAgICAgICBpc0VuY29kZWQ6IGZhbHNlCiAgICAgIH07CiAgICB9CiAgICB0aHJvdyBuZXcgRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yKHsgdXJpIH0pOwogIH0KICBmdW5jdGlvbiBnZXRKc29uSW1hZ2UoZGF0YSkgewogICAgaWYgKHR5cGVvZiBkYXRhICE9PSAib2JqZWN0IiB8fCAhKCJpbWFnZSIgaW4gZGF0YSkgJiYgISgiaW1hZ2VfdXJsIiBpbiBkYXRhKSAmJiAhKCJpbWFnZV9kYXRhIiBpbiBkYXRhKSkgewogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE1ldGFkYXRhRXJyb3IoeyBkYXRhIH0pOwogICAgfQogICAgcmV0dXJuIGRhdGEuaW1hZ2UgfHwgZGF0YS5pbWFnZV91cmwgfHwgZGF0YS5pbWFnZV9kYXRhOwogIH0KICBhc3luYyBmdW5jdGlvbiBnZXRNZXRhZGF0YUF2YXRhclVyaSh7IGdhdGV3YXlVcmxzLCB1cmkgfSkgewogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJpKS50aGVuKChyZXMyKSA9PiByZXMyLmpzb24oKSk7CiAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgcGFyc2VBdmF0YXJVcmkoewogICAgICAgIGdhdGV3YXlVcmxzLAogICAgICAgIHVyaTogZ2V0SnNvbkltYWdlKHJlcykKICAgICAgfSk7CiAgICAgIHJldHVybiBpbWFnZTsKICAgIH0gY2F0Y2ggewogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yKHsgdXJpIH0pOwogICAgfQogIH0KICBhc3luYyBmdW5jdGlvbiBwYXJzZUF2YXRhclVyaSh7IGdhdGV3YXlVcmxzLCB1cmkgfSkgewogICAgY29uc3QgeyB1cmk6IHJlc29sdmVkVVJJLCBpc09uQ2hhaW4gfSA9IHJlc29sdmVBdmF0YXJVcmkoeyB1cmksIGdhdGV3YXlVcmxzIH0pOwogICAgaWYgKGlzT25DaGFpbikKICAgICAgcmV0dXJuIHJlc29sdmVkVVJJOwogICAgY29uc3QgaXNJbWFnZSA9IGF3YWl0IGlzSW1hZ2VVcmkocmVzb2x2ZWRVUkkpOwogICAgaWYgKGlzSW1hZ2UpCiAgICAgIHJldHVybiByZXNvbHZlZFVSSTsKICAgIHRocm93IG5ldyBFbnNBdmF0YXJVcmlSZXNvbHV0aW9uRXJyb3IoeyB1cmkgfSk7CiAgfQogIGZ1bmN0aW9uIHBhcnNlTmZ0VXJpKHVyaV8pIHsKICAgIGxldCB1cmkgPSB1cmlfOwogICAgaWYgKHVyaS5zdGFydHNXaXRoKCJkaWQ6bmZ0OiIpKSB7CiAgICAgIHVyaSA9IHVyaS5yZXBsYWNlKCJkaWQ6bmZ0OiIsICIiKS5yZXBsYWNlKC9fL2csICIvIik7CiAgICB9CiAgICBjb25zdCBbcmVmZXJlbmNlLCBhc3NldF9uYW1lc3BhY2UsIHRva2VuSURdID0gdXJpLnNwbGl0KCIvIik7CiAgICBjb25zdCBbZWlwX25hbWVzcGFjZSwgY2hhaW5JRF0gPSByZWZlcmVuY2Uuc3BsaXQoIjoiKTsKICAgIGNvbnN0IFtlcmNfbmFtZXNwYWNlLCBjb250cmFjdEFkZHJlc3NdID0gYXNzZXRfbmFtZXNwYWNlLnNwbGl0KCI6Iik7CiAgICBpZiAoIWVpcF9uYW1lc3BhY2UgfHwgZWlwX25hbWVzcGFjZS50b0xvd2VyQ2FzZSgpICE9PSAiZWlwMTU1IikKICAgICAgdGhyb3cgbmV3IEVuc0F2YXRhckludmFsaWROZnRVcmlFcnJvcih7IHJlYXNvbjogIk9ubHkgRUlQLTE1NSBzdXBwb3J0ZWQiIH0pOwogICAgaWYgKCFjaGFpbklEKQogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yKHsgcmVhc29uOiAiQ2hhaW4gSUQgbm90IGZvdW5kIiB9KTsKICAgIGlmICghY29udHJhY3RBZGRyZXNzKQogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yKHsKICAgICAgICByZWFzb246ICJDb250cmFjdCBhZGRyZXNzIG5vdCBmb3VuZCIKICAgICAgfSk7CiAgICBpZiAoIXRva2VuSUQpCiAgICAgIHRocm93IG5ldyBFbnNBdmF0YXJJbnZhbGlkTmZ0VXJpRXJyb3IoeyByZWFzb246ICJUb2tlbiBJRCBub3QgZm91bmQiIH0pOwogICAgaWYgKCFlcmNfbmFtZXNwYWNlKQogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yKHsgcmVhc29uOiAiRVJDIG5hbWVzcGFjZSBub3QgZm91bmQiIH0pOwogICAgcmV0dXJuIHsKICAgICAgY2hhaW5JRDogTnVtYmVyLnBhcnNlSW50KGNoYWluSUQpLAogICAgICBuYW1lc3BhY2U6IGVyY19uYW1lc3BhY2UudG9Mb3dlckNhc2UoKSwKICAgICAgY29udHJhY3RBZGRyZXNzLAogICAgICB0b2tlbklECiAgICB9OwogIH0KICBhc3luYyBmdW5jdGlvbiBnZXROZnRUb2tlblVyaShjbGllbnQsIHsgbmZ0IH0pIHsKICAgIGlmIChuZnQubmFtZXNwYWNlID09PSAiZXJjNzIxIikgewogICAgICByZXR1cm4gcmVhZENvbnRyYWN0KGNsaWVudCwgewogICAgICAgIGFkZHJlc3M6IG5mdC5jb250cmFjdEFkZHJlc3MsCiAgICAgICAgYWJpOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJ0b2tlblVSSSIsCiAgICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgICBpbnB1dHM6IFt7IG5hbWU6ICJ0b2tlbklkIiwgdHlwZTogInVpbnQyNTYiIH1dLAogICAgICAgICAgICBvdXRwdXRzOiBbeyBuYW1lOiAiIiwgdHlwZTogInN0cmluZyIgfV0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIGZ1bmN0aW9uTmFtZTogInRva2VuVVJJIiwKICAgICAgICBhcmdzOiBbQmlnSW50KG5mdC50b2tlbklEKV0KICAgICAgfSk7CiAgICB9CiAgICBpZiAobmZ0Lm5hbWVzcGFjZSA9PT0gImVyYzExNTUiKSB7CiAgICAgIHJldHVybiByZWFkQ29udHJhY3QoY2xpZW50LCB7CiAgICAgICAgYWRkcmVzczogbmZ0LmNvbnRyYWN0QWRkcmVzcywKICAgICAgICBhYmk6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogInVyaSIsCiAgICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgICBpbnB1dHM6IFt7IG5hbWU6ICJfaWQiLCB0eXBlOiAidWludDI1NiIgfV0sCiAgICAgICAgICAgIG91dHB1dHM6IFt7IG5hbWU6ICIiLCB0eXBlOiAic3RyaW5nIiB9XQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgZnVuY3Rpb25OYW1lOiAidXJpIiwKICAgICAgICBhcmdzOiBbQmlnSW50KG5mdC50b2tlbklEKV0KICAgICAgfSk7CiAgICB9CiAgICB0aHJvdyBuZXcgRW5zQXZhdGFyVW5zdXBwb3J0ZWROYW1lc3BhY2VFcnJvcih7IG5hbWVzcGFjZTogbmZ0Lm5hbWVzcGFjZSB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5zL2F2YXRhci9wYXJzZUF2YXRhclJlY29yZC5qcwogIGFzeW5jIGZ1bmN0aW9uIHBhcnNlQXZhdGFyUmVjb3JkKGNsaWVudCwgeyBnYXRld2F5VXJscywgcmVjb3JkIH0pIHsKICAgIGlmICgvZWlwMTU1Oi9pLnRlc3QocmVjb3JkKSkKICAgICAgcmV0dXJuIHBhcnNlTmZ0QXZhdGFyVXJpKGNsaWVudCwgeyBnYXRld2F5VXJscywgcmVjb3JkIH0pOwogICAgcmV0dXJuIHBhcnNlQXZhdGFyVXJpKHsgdXJpOiByZWNvcmQsIGdhdGV3YXlVcmxzIH0pOwogIH0KICBhc3luYyBmdW5jdGlvbiBwYXJzZU5mdEF2YXRhclVyaShjbGllbnQsIHsgZ2F0ZXdheVVybHMsIHJlY29yZCB9KSB7CiAgICBjb25zdCBuZnQgPSBwYXJzZU5mdFVyaShyZWNvcmQpOwogICAgY29uc3QgbmZ0VXJpID0gYXdhaXQgZ2V0TmZ0VG9rZW5VcmkoY2xpZW50LCB7IG5mdCB9KTsKICAgIGNvbnN0IHsgdXJpOiByZXNvbHZlZE5mdFVyaSwgaXNPbkNoYWluLCBpc0VuY29kZWQgfSA9IHJlc29sdmVBdmF0YXJVcmkoeyB1cmk6IG5mdFVyaSwgZ2F0ZXdheVVybHMgfSk7CiAgICBpZiAoaXNPbkNoYWluICYmIChyZXNvbHZlZE5mdFVyaS5pbmNsdWRlcygiZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwiKSB8fCByZXNvbHZlZE5mdFVyaS5zdGFydHNXaXRoKCJ7IikpKSB7CiAgICAgIGNvbnN0IGVuY29kZWRKc29uID0gaXNFbmNvZGVkID8gKAogICAgICAgIC8vIGlmIGl0IGlzIGVuY29kZWQsIGRlY29kZSBpdAogICAgICAgIGF0b2IocmVzb2x2ZWROZnRVcmkucmVwbGFjZSgiZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwiLCAiIikpCiAgICAgICkgOiAoCiAgICAgICAgLy8gaWYgaXQgaXNuJ3QgZW5jb2RlZCBhc3N1bWUgaXQgaXMgYSBKU09OIHN0cmluZywgYnV0IGl0IGNvdWxkIGJlIGFueXRoaW5nIChpdCB3aWxsIGVycm9yIGlmIGl0IGlzKQogICAgICAgIHJlc29sdmVkTmZ0VXJpCiAgICAgICk7CiAgICAgIGNvbnN0IGRlY29kZWQgPSBKU09OLnBhcnNlKGVuY29kZWRKc29uKTsKICAgICAgcmV0dXJuIHBhcnNlQXZhdGFyVXJpKHsgdXJpOiBnZXRKc29uSW1hZ2UoZGVjb2RlZCksIGdhdGV3YXlVcmxzIH0pOwogICAgfQogICAgbGV0IHVyaVRva2VuSWQgPSBuZnQudG9rZW5JRDsKICAgIGlmIChuZnQubmFtZXNwYWNlID09PSAiZXJjMTE1NSIpCiAgICAgIHVyaVRva2VuSWQgPSB1cmlUb2tlbklkLnJlcGxhY2UoIjB4IiwgIiIpLnBhZFN0YXJ0KDY0LCAiMCIpOwogICAgcmV0dXJuIGdldE1ldGFkYXRhQXZhdGFyVXJpKHsKICAgICAgZ2F0ZXdheVVybHMsCiAgICAgIHVyaTogcmVzb2x2ZWROZnRVcmkucmVwbGFjZSgvKD86MHgpP3tpZH0vLCB1cmlUb2tlbklkKQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvZW5zL2dldEVuc1RleHQuanMKICBpbml0X2FiaXMoKTsKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2dldENoYWluQ29udHJhY3RBZGRyZXNzKCk7CiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldEVuc1RleHQoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZywgbmFtZSwga2V5LCBnYXRld2F5VXJscywgc3RyaWN0LCB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3M6IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc18gfSkgewogICAgbGV0IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyA9IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc187CiAgICBpZiAoIXVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcykgewogICAgICBpZiAoIWNsaWVudC5jaGFpbikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNsaWVudCBjaGFpbiBub3QgY29uZmlndXJlZC4gdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzIGlzIHJlcXVpcmVkLiIpOwogICAgICB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgPSBnZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyh7CiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgY2hhaW46IGNsaWVudC5jaGFpbiwKICAgICAgICBjb250cmFjdDogImVuc1VuaXZlcnNhbFJlc29sdmVyIgogICAgICB9KTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlYWRDb250cmFjdFBhcmFtZXRlcnMgPSB7CiAgICAgICAgYWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzLAogICAgICAgIGFiaTogdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpLAogICAgICAgIGZ1bmN0aW9uTmFtZTogInJlc29sdmUiLAogICAgICAgIGFyZ3M6IFsKICAgICAgICAgIHRvSGV4KHBhY2tldFRvQnl0ZXMobmFtZSkpLAogICAgICAgICAgZW5jb2RlRnVuY3Rpb25EYXRhKHsKICAgICAgICAgICAgYWJpOiB0ZXh0UmVzb2x2ZXJBYmksCiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogInRleHQiLAogICAgICAgICAgICBhcmdzOiBbbmFtZWhhc2gobmFtZSksIGtleV0KICAgICAgICAgIH0pCiAgICAgICAgXSwKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBibG9ja1RhZwogICAgICB9OwogICAgICBjb25zdCByZWFkQ29udHJhY3RBY3Rpb24gPSBnZXRBY3Rpb24oY2xpZW50LCByZWFkQ29udHJhY3QsICJyZWFkQ29udHJhY3QiKTsKICAgICAgY29uc3QgcmVzID0gZ2F0ZXdheVVybHMgPyBhd2FpdCByZWFkQ29udHJhY3RBY3Rpb24oewogICAgICAgIC4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMsCiAgICAgICAgYXJnczogWy4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMuYXJncywgZ2F0ZXdheVVybHNdCiAgICAgIH0pIDogYXdhaXQgcmVhZENvbnRyYWN0QWN0aW9uKHJlYWRDb250cmFjdFBhcmFtZXRlcnMpOwogICAgICBpZiAocmVzWzBdID09PSAiMHgiKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCByZWNvcmQgPSBkZWNvZGVGdW5jdGlvblJlc3VsdCh7CiAgICAgICAgYWJpOiB0ZXh0UmVzb2x2ZXJBYmksCiAgICAgICAgZnVuY3Rpb25OYW1lOiAidGV4dCIsCiAgICAgICAgZGF0YTogcmVzWzBdCiAgICAgIH0pOwogICAgICByZXR1cm4gcmVjb3JkID09PSAiIiA/IG51bGwgOiByZWNvcmQ7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgaWYgKHN0cmljdCkKICAgICAgICB0aHJvdyBlcnI7CiAgICAgIGlmIChpc051bGxVbml2ZXJzYWxSZXNvbHZlckVycm9yKGVyciwgInJlc29sdmUiKSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgdGhyb3cgZXJyOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2Vucy9nZXRFbnNBdmF0YXIuanMKICBhc3luYyBmdW5jdGlvbiBnZXRFbnNBdmF0YXIoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZywgYXNzZXRHYXRld2F5VXJscywgbmFtZSwgZ2F0ZXdheVVybHMsIHN0cmljdCwgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzIH0pIHsKICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEVuc1RleHQsICJnZXRFbnNUZXh0IikoewogICAgICBibG9ja051bWJlciwKICAgICAgYmxvY2tUYWcsCiAgICAgIGtleTogImF2YXRhciIsCiAgICAgIG5hbWUsCiAgICAgIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcywKICAgICAgZ2F0ZXdheVVybHMsCiAgICAgIHN0cmljdAogICAgfSk7CiAgICBpZiAoIXJlY29yZCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB0cnkgewogICAgICByZXR1cm4gYXdhaXQgcGFyc2VBdmF0YXJSZWNvcmQoY2xpZW50LCB7CiAgICAgICAgcmVjb3JkLAogICAgICAgIGdhdGV3YXlVcmxzOiBhc3NldEdhdGV3YXlVcmxzCiAgICAgIH0pOwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2Vucy9nZXRFbnNOYW1lLmpzCiAgaW5pdF9hYmlzKCk7CiAgaW5pdF9nZXRDaGFpbkNvbnRyYWN0QWRkcmVzcygpOwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRFbnNOYW1lKGNsaWVudCwgeyBhZGRyZXNzLCBibG9ja051bWJlciwgYmxvY2tUYWcsIGdhdGV3YXlVcmxzLCBzdHJpY3QsIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzXyB9KSB7CiAgICBsZXQgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzID0gdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzXzsKICAgIGlmICghdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzKSB7CiAgICAgIGlmICghY2xpZW50LmNoYWluKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiY2xpZW50IGNoYWluIG5vdCBjb25maWd1cmVkLiB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgaXMgcmVxdWlyZWQuIik7CiAgICAgIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyA9IGdldENoYWluQ29udHJhY3RBZGRyZXNzKHsKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBjaGFpbjogY2xpZW50LmNoYWluLAogICAgICAgIGNvbnRyYWN0OiAiZW5zVW5pdmVyc2FsUmVzb2x2ZXIiCiAgICAgIH0pOwogICAgfQogICAgY29uc3QgcmV2ZXJzZU5vZGUgPSBgJHthZGRyZXNzLnRvTG93ZXJDYXNlKCkuc3Vic3RyaW5nKDIpfS5hZGRyLnJldmVyc2VgOwogICAgdHJ5IHsKICAgICAgY29uc3QgcmVhZENvbnRyYWN0UGFyYW1ldGVycyA9IHsKICAgICAgICBhZGRyZXNzOiB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MsCiAgICAgICAgYWJpOiB1bml2ZXJzYWxSZXNvbHZlclJldmVyc2VBYmksCiAgICAgICAgZnVuY3Rpb25OYW1lOiAicmV2ZXJzZSIsCiAgICAgICAgYXJnczogW3RvSGV4KHBhY2tldFRvQnl0ZXMocmV2ZXJzZU5vZGUpKV0sCiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgYmxvY2tUYWcKICAgICAgfTsKICAgICAgY29uc3QgcmVhZENvbnRyYWN0QWN0aW9uID0gZ2V0QWN0aW9uKGNsaWVudCwgcmVhZENvbnRyYWN0LCAicmVhZENvbnRyYWN0Iik7CiAgICAgIGNvbnN0IFtuYW1lLCByZXNvbHZlZEFkZHJlc3NdID0gZ2F0ZXdheVVybHMgPyBhd2FpdCByZWFkQ29udHJhY3RBY3Rpb24oewogICAgICAgIC4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMsCiAgICAgICAgYXJnczogWy4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMuYXJncywgZ2F0ZXdheVVybHNdCiAgICAgIH0pIDogYXdhaXQgcmVhZENvbnRyYWN0QWN0aW9uKHJlYWRDb250cmFjdFBhcmFtZXRlcnMpOwogICAgICBpZiAoYWRkcmVzcy50b0xvd2VyQ2FzZSgpICE9PSByZXNvbHZlZEFkZHJlc3MudG9Mb3dlckNhc2UoKSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIG5hbWU7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgaWYgKHN0cmljdCkKICAgICAgICB0aHJvdyBlcnI7CiAgICAgIGlmIChpc051bGxVbml2ZXJzYWxSZXNvbHZlckVycm9yKGVyciwgInJldmVyc2UiKSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgdGhyb3cgZXJyOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2Vucy9nZXRFbnNSZXNvbHZlci5qcwogIGluaXRfZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0RW5zUmVzb2x2ZXIoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZywgbmFtZSwgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzOiB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3NfIH0pIHsKICAgIGxldCB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgPSB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3NfOwogICAgaWYgKCF1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MpIHsKICAgICAgaWYgKCFjbGllbnQuY2hhaW4pCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJjbGllbnQgY2hhaW4gbm90IGNvbmZpZ3VyZWQuIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyBpcyByZXF1aXJlZC4iKTsKICAgICAgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzID0gZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoewogICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgIGNoYWluOiBjbGllbnQuY2hhaW4sCiAgICAgICAgY29udHJhY3Q6ICJlbnNVbml2ZXJzYWxSZXNvbHZlciIKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBbcmVzb2x2ZXJBZGRyZXNzXSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHJlYWRDb250cmFjdCwgInJlYWRDb250cmFjdCIpKHsKICAgICAgYWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzLAogICAgICBhYmk6IFsKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFt7IHR5cGU6ICJieXRlcyIgfV0sCiAgICAgICAgICBuYW1lOiAiZmluZFJlc29sdmVyIiwKICAgICAgICAgIG91dHB1dHM6IFt7IHR5cGU6ICJhZGRyZXNzIiB9LCB7IHR5cGU6ICJieXRlczMyIiB9XSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0KICAgICAgXSwKICAgICAgZnVuY3Rpb25OYW1lOiAiZmluZFJlc29sdmVyIiwKICAgICAgYXJnczogW3RvSGV4KHBhY2tldFRvQnl0ZXMobmFtZSkpXSwKICAgICAgYmxvY2tOdW1iZXIsCiAgICAgIGJsb2NrVGFnCiAgICB9KTsKICAgIHJldHVybiByZXNvbHZlckFkZHJlc3M7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvZGVjb3JhdG9ycy9wdWJsaWMuanMKICBpbml0X2NhbGwoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9jcmVhdGVCbG9ja0ZpbHRlci5qcwogIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJsb2NrRmlsdGVyKGNsaWVudCkgewogICAgY29uc3QgZ2V0UmVxdWVzdCA9IGNyZWF0ZUZpbHRlclJlcXVlc3RTY29wZShjbGllbnQsIHsKICAgICAgbWV0aG9kOiAiZXRoX25ld0Jsb2NrRmlsdGVyIgogICAgfSk7CiAgICBjb25zdCBpZCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX25ld0Jsb2NrRmlsdGVyIgogICAgfSk7CiAgICByZXR1cm4geyBpZCwgcmVxdWVzdDogZ2V0UmVxdWVzdChpZCksIHR5cGU6ICJibG9jayIgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvY3JlYXRlRXZlbnRGaWx0ZXIuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRXZlbnRGaWx0ZXIoY2xpZW50LCB7IGFkZHJlc3MsIGFyZ3MsIGV2ZW50LCBldmVudHM6IGV2ZW50c18sIGZyb21CbG9jaywgc3RyaWN0LCB0b0Jsb2NrIH0gPSB7fSkgewogICAgY29uc3QgZXZlbnRzID0gZXZlbnRzXyA/PyAoZXZlbnQgPyBbZXZlbnRdIDogdm9pZCAwKTsKICAgIGNvbnN0IGdldFJlcXVlc3QgPSBjcmVhdGVGaWx0ZXJSZXF1ZXN0U2NvcGUoY2xpZW50LCB7CiAgICAgIG1ldGhvZDogImV0aF9uZXdGaWx0ZXIiCiAgICB9KTsKICAgIGxldCB0b3BpY3MgPSBbXTsKICAgIGlmIChldmVudHMpIHsKICAgICAgY29uc3QgZW5jb2RlZCA9IGV2ZW50cy5mbGF0TWFwKChldmVudDIpID0+IGVuY29kZUV2ZW50VG9waWNzKHsKICAgICAgICBhYmk6IFtldmVudDJdLAogICAgICAgIGV2ZW50TmFtZTogZXZlbnQyLm5hbWUsCiAgICAgICAgYXJncwogICAgICB9KSk7CiAgICAgIHRvcGljcyA9IFtlbmNvZGVkXTsKICAgICAgaWYgKGV2ZW50KQogICAgICAgIHRvcGljcyA9IHRvcGljc1swXTsKICAgIH0KICAgIGNvbnN0IGlkID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfbmV3RmlsdGVyIiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgewogICAgICAgICAgYWRkcmVzcywKICAgICAgICAgIGZyb21CbG9jazogdHlwZW9mIGZyb21CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleChmcm9tQmxvY2spIDogZnJvbUJsb2NrLAogICAgICAgICAgdG9CbG9jazogdHlwZW9mIHRvQmxvY2sgPT09ICJiaWdpbnQiID8gbnVtYmVyVG9IZXgodG9CbG9jaykgOiB0b0Jsb2NrLAogICAgICAgICAgLi4udG9waWNzLmxlbmd0aCA/IHsgdG9waWNzIH0gOiB7fQogICAgICAgIH0KICAgICAgXQogICAgfSk7CiAgICByZXR1cm4gewogICAgICBhYmk6IGV2ZW50cywKICAgICAgYXJncywKICAgICAgZXZlbnROYW1lOiBldmVudCA/IGV2ZW50Lm5hbWUgOiB2b2lkIDAsCiAgICAgIGZyb21CbG9jaywKICAgICAgaWQsCiAgICAgIHJlcXVlc3Q6IGdldFJlcXVlc3QoaWQpLAogICAgICBzdHJpY3Q6IEJvb2xlYW4oc3RyaWN0KSwKICAgICAgdG9CbG9jaywKICAgICAgdHlwZTogImV2ZW50IgogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvY3JlYXRlUGVuZGluZ1RyYW5zYWN0aW9uRmlsdGVyLmpzCiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlUGVuZGluZ1RyYW5zYWN0aW9uRmlsdGVyKGNsaWVudCkgewogICAgY29uc3QgZ2V0UmVxdWVzdCA9IGNyZWF0ZUZpbHRlclJlcXVlc3RTY29wZShjbGllbnQsIHsKICAgICAgbWV0aG9kOiAiZXRoX25ld1BlbmRpbmdUcmFuc2FjdGlvbkZpbHRlciIKICAgIH0pOwogICAgY29uc3QgaWQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9uZXdQZW5kaW5nVHJhbnNhY3Rpb25GaWx0ZXIiCiAgICB9KTsKICAgIHJldHVybiB7IGlkLCByZXF1ZXN0OiBnZXRSZXF1ZXN0KGlkKSwgdHlwZTogInRyYW5zYWN0aW9uIiB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRCbG9iQmFzZUZlZS5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldEJsb2JCYXNlRmVlKGNsaWVudCkgewogICAgY29uc3QgYmFzZUZlZSA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2Jsb2JCYXNlRmVlIgogICAgfSk7CiAgICByZXR1cm4gQmlnSW50KGJhc2VGZWUpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRCbG9ja1RyYW5zYWN0aW9uQ291bnQuanMKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50KGNsaWVudCwgeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyLCBibG9ja1RhZyA9ICJsYXRlc3QiIH0gPSB7fSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciAhPT0gdm9pZCAwID8gbnVtYmVyVG9IZXgoYmxvY2tOdW1iZXIpIDogdm9pZCAwOwogICAgbGV0IGNvdW50OwogICAgaWYgKGJsb2NrSGFzaCkgewogICAgICBjb3VudCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50QnlIYXNoIiwKICAgICAgICBwYXJhbXM6IFtibG9ja0hhc2hdCiAgICAgIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgfSBlbHNlIHsKICAgICAgY291bnQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXRoX2dldEJsb2NrVHJhbnNhY3Rpb25Db3VudEJ5TnVtYmVyIiwKICAgICAgICBwYXJhbXM6IFtibG9ja051bWJlckhleCB8fCBibG9ja1RhZ10KICAgICAgfSwgeyBkZWR1cGU6IEJvb2xlYW4oYmxvY2tOdW1iZXJIZXgpIH0pOwogICAgfQogICAgcmV0dXJuIGhleFRvTnVtYmVyKGNvdW50KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0Q29kZS5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRDb2RlKGNsaWVudCwgeyBhZGRyZXNzLCBibG9ja051bWJlciwgYmxvY2tUYWcgPSAibGF0ZXN0IiB9KSB7CiAgICBjb25zdCBibG9ja051bWJlckhleCA9IGJsb2NrTnVtYmVyICE9PSB2b2lkIDAgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICBjb25zdCBoZXggPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRDb2RlIiwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWddCiAgICB9LCB7IGRlZHVwZTogQm9vbGVhbihibG9ja051bWJlckhleCkgfSk7CiAgICBpZiAoaGV4ID09PSAiMHgiKQogICAgICByZXR1cm4gdm9pZCAwOwogICAgcmV0dXJuIGhleDsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0RmVlSGlzdG9yeS5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2ZlZUhpc3RvcnkuanMKICBmdW5jdGlvbiBmb3JtYXRGZWVIaXN0b3J5KGZlZUhpc3RvcnkpIHsKICAgIHJldHVybiB7CiAgICAgIGJhc2VGZWVQZXJHYXM6IGZlZUhpc3RvcnkuYmFzZUZlZVBlckdhcy5tYXAoKHZhbHVlKSA9PiBCaWdJbnQodmFsdWUpKSwKICAgICAgZ2FzVXNlZFJhdGlvOiBmZWVIaXN0b3J5Lmdhc1VzZWRSYXRpbywKICAgICAgb2xkZXN0QmxvY2s6IEJpZ0ludChmZWVIaXN0b3J5Lm9sZGVzdEJsb2NrKSwKICAgICAgcmV3YXJkOiBmZWVIaXN0b3J5LnJld2FyZD8ubWFwKChyZXdhcmQpID0+IHJld2FyZC5tYXAoKHZhbHVlKSA9PiBCaWdJbnQodmFsdWUpKSkKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEZlZUhpc3RvcnkuanMKICBhc3luYyBmdW5jdGlvbiBnZXRGZWVIaXN0b3J5KGNsaWVudCwgeyBibG9ja0NvdW50LCBibG9ja051bWJlciwgYmxvY2tUYWcgPSAibGF0ZXN0IiwgcmV3YXJkUGVyY2VudGlsZXMgfSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgIGNvbnN0IGZlZUhpc3RvcnkgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9mZWVIaXN0b3J5IiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgbnVtYmVyVG9IZXgoYmxvY2tDb3VudCksCiAgICAgICAgYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWcsCiAgICAgICAgcmV3YXJkUGVyY2VudGlsZXMKICAgICAgXQogICAgfSwgeyBkZWR1cGU6IEJvb2xlYW4oYmxvY2tOdW1iZXJIZXgpIH0pOwogICAgcmV0dXJuIGZvcm1hdEZlZUhpc3RvcnkoZmVlSGlzdG9yeSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEZpbHRlckxvZ3MuanMKICBhc3luYyBmdW5jdGlvbiBnZXRGaWx0ZXJMb2dzKF9jbGllbnQsIHsgZmlsdGVyIH0pIHsKICAgIGNvbnN0IHN0cmljdCA9IGZpbHRlci5zdHJpY3QgPz8gZmFsc2U7CiAgICBjb25zdCBsb2dzID0gYXdhaXQgZmlsdGVyLnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfZ2V0RmlsdGVyTG9ncyIsCiAgICAgIHBhcmFtczogW2ZpbHRlci5pZF0KICAgIH0pOwogICAgY29uc3QgZm9ybWF0dGVkTG9ncyA9IGxvZ3MubWFwKChsb2cpID0+IGZvcm1hdExvZyhsb2cpKTsKICAgIGlmICghZmlsdGVyLmFiaSkKICAgICAgcmV0dXJuIGZvcm1hdHRlZExvZ3M7CiAgICByZXR1cm4gcGFyc2VFdmVudExvZ3MoewogICAgICBhYmk6IGZpbHRlci5hYmksCiAgICAgIGxvZ3M6IGZvcm1hdHRlZExvZ3MsCiAgICAgIHN0cmljdAogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldFByb29mLmpzCiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2NoYWluL2RlZmluZUNoYWluLmpzCiAgZnVuY3Rpb24gZGVmaW5lQ2hhaW4oY2hhaW4pIHsKICAgIHJldHVybiB7CiAgICAgIGZvcm1hdHRlcnM6IHZvaWQgMCwKICAgICAgZmVlczogdm9pZCAwLAogICAgICBzZXJpYWxpemVyczogdm9pZCAwLAogICAgICAuLi5jaGFpbgogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY2hhaW4vZXh0cmFjdENoYWluLmpzCiAgZnVuY3Rpb24gZXh0cmFjdENoYWluKHsgY2hhaW5zLCBpZCB9KSB7CiAgICByZXR1cm4gY2hhaW5zLmZpbmQoKGNoYWluKSA9PiBjaGFpbi5pZCA9PT0gaWQpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9yZWdleC5qcwogIHZhciBhcnJheVJlZ2V4ID0gL14oLiopXFsoWzAtOV0qKVxdJC87CiAgdmFyIGJ5dGVzUmVnZXgyID0gL15ieXRlcyhbMS05XXwxWzAtOV18MlswLTldfDNbMC0yXSk/JC87CiAgdmFyIGludGVnZXJSZWdleDIgPSAvXih1P2ludCkoOHwxNnwyNHwzMnw0MHw0OHw1Nnw2NHw3Mnw4MHw4OHw5NnwxMDR8MTEyfDEyMHwxMjh8MTM2fDE0NHwxNTJ8MTYwfDE2OHwxNzZ8MTg0fDE5MnwyMDB8MjA4fDIxNnwyMjR8MjMyfDI0MHwyNDh8MjU2KT8kLzsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ycGMvd2ViU29ja2V0LmpzCiAgaW5pdF9yZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcnBjL3NvY2tldC5qcwogIGluaXRfcmVxdWVzdCgpOwogIGluaXRfY3JlYXRlQmF0Y2hTY2hlZHVsZXIoKTsKICB2YXIgc29ja2V0Q2xpZW50Q2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldFNvY2tldFJwY0NsaWVudChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGdldFNvY2tldDogZ2V0U29ja2V0Miwga2VlcEFsaXZlID0gdHJ1ZSwga2V5ID0gInNvY2tldCIsIHJlY29ubmVjdCA9IHRydWUsIHVybCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHsgaW50ZXJ2YWw6IGtlZXBBbGl2ZUludGVydmFsID0gM2U0IH0gPSB0eXBlb2Yga2VlcEFsaXZlID09PSAib2JqZWN0IiA/IGtlZXBBbGl2ZSA6IHt9OwogICAgY29uc3QgeyBhdHRlbXB0cyA9IDUsIGRlbGF5ID0gMmUzIH0gPSB0eXBlb2YgcmVjb25uZWN0ID09PSAib2JqZWN0IiA/IHJlY29ubmVjdCA6IHt9OwogICAgbGV0IHNvY2tldENsaWVudCA9IHNvY2tldENsaWVudENhY2hlLmdldChgJHtrZXl9OiR7dXJsfWApOwogICAgaWYgKHNvY2tldENsaWVudCkKICAgICAgcmV0dXJuIHNvY2tldENsaWVudDsKICAgIGxldCByZWNvbm5lY3RDb3VudCA9IDA7CiAgICBjb25zdCB7IHNjaGVkdWxlIH0gPSBjcmVhdGVCYXRjaFNjaGVkdWxlcih7CiAgICAgIGlkOiBgJHtrZXl9OiR7dXJsfWAsCiAgICAgIGZuOiBhc3luYyAoKSA9PiB7CiAgICAgICAgY29uc3QgcmVxdWVzdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIGxldCBlcnJvcjsKICAgICAgICBsZXQgc29ja2V0OwogICAgICAgIGxldCBrZWVwQWxpdmVUaW1lcjsKICAgICAgICBhc3luYyBmdW5jdGlvbiBzZXR1cCgpIHsKICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFNvY2tldDIoewogICAgICAgICAgICBvbkNsb3NlKCkgewogICAgICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cy52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIHJlcXVlc3Qub25FcnJvcj8uKG5ldyBTb2NrZXRDbG9zZWRFcnJvcih7IHVybCB9KSk7CiAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5vbkVycm9yPy4obmV3IFNvY2tldENsb3NlZEVycm9yKHsgdXJsIH0pKTsKICAgICAgICAgICAgICByZXF1ZXN0cy5jbGVhcigpOwogICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMuY2xlYXIoKTsKICAgICAgICAgICAgICBpZiAocmVjb25uZWN0ICYmIHJlY29ubmVjdENvdW50IDwgYXR0ZW1wdHMpCiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgICAgcmVjb25uZWN0Q291bnQrKzsKICAgICAgICAgICAgICAgICAgYXdhaXQgc2V0dXAoKS5jYXRjaChjb25zb2xlLmVycm9yKTsKICAgICAgICAgICAgICAgIH0sIGRlbGF5KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25FcnJvcihlcnJvcl8pIHsKICAgICAgICAgICAgICBlcnJvciA9IGVycm9yXzsKICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMudmFsdWVzKCkpCiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9uRXJyb3I/LihlcnJvcik7CiAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5vbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICAgIHJlcXVlc3RzLmNsZWFyKCk7CiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5jbGVhcigpOwogICAgICAgICAgICAgIGlmIChyZWNvbm5lY3QgJiYgcmVjb25uZWN0Q291bnQgPCBhdHRlbXB0cykKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgICByZWNvbm5lY3RDb3VudCsrOwogICAgICAgICAgICAgICAgICBhd2FpdCBzZXR1cCgpLmNhdGNoKGNvbnNvbGUuZXJyb3IpOwogICAgICAgICAgICAgICAgfSwgZGVsYXkpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbk9wZW4oKSB7CiAgICAgICAgICAgICAgZXJyb3IgPSB2b2lkIDA7CiAgICAgICAgICAgICAgcmVjb25uZWN0Q291bnQgPSAwOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvblJlc3BvbnNlKGRhdGEpIHsKICAgICAgICAgICAgICBjb25zdCBpc1N1YnNjcmlwdGlvbiA9IGRhdGEubWV0aG9kID09PSAiZXRoX3N1YnNjcmlwdGlvbiI7CiAgICAgICAgICAgICAgY29uc3QgaWQgPSBpc1N1YnNjcmlwdGlvbiA/IGRhdGEucGFyYW1zLnN1YnNjcmlwdGlvbiA6IGRhdGEuaWQ7CiAgICAgICAgICAgICAgY29uc3QgY2FjaGUgPSBpc1N1YnNjcmlwdGlvbiA/IHN1YnNjcmlwdGlvbnMgOiByZXF1ZXN0czsKICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGNhY2hlLmdldChpZCk7CiAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKQogICAgICAgICAgICAgICAgY2FsbGJhY2sub25SZXNwb25zZShkYXRhKTsKICAgICAgICAgICAgICBpZiAoIWlzU3Vic2NyaXB0aW9uKQogICAgICAgICAgICAgICAgY2FjaGUuZGVsZXRlKGlkKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBzb2NrZXQgPSByZXN1bHQ7CiAgICAgICAgICBpZiAoa2VlcEFsaXZlKSB7CiAgICAgICAgICAgIGlmIChrZWVwQWxpdmVUaW1lcikKICAgICAgICAgICAgICBjbGVhckludGVydmFsKGtlZXBBbGl2ZVRpbWVyKTsKICAgICAgICAgICAga2VlcEFsaXZlVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiBzb2NrZXQucGluZz8uKCksIGtlZXBBbGl2ZUludGVydmFsKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHNldHVwKCk7CiAgICAgICAgZXJyb3IgPSB2b2lkIDA7CiAgICAgICAgc29ja2V0Q2xpZW50ID0gewogICAgICAgICAgY2xvc2UoKSB7CiAgICAgICAgICAgIGtlZXBBbGl2ZVRpbWVyICYmIGNsZWFySW50ZXJ2YWwoa2VlcEFsaXZlVGltZXIpOwogICAgICAgICAgICBzb2NrZXQuY2xvc2UoKTsKICAgICAgICAgICAgc29ja2V0Q2xpZW50Q2FjaGUuZGVsZXRlKGAke2tleX06JHt1cmx9YCk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0IHNvY2tldCgpIHsKICAgICAgICAgICAgcmV0dXJuIHNvY2tldDsKICAgICAgICAgIH0sCiAgICAgICAgICByZXF1ZXN0KHsgYm9keSwgb25FcnJvciwgb25SZXNwb25zZSB9KSB7CiAgICAgICAgICAgIGlmIChlcnJvciAmJiBvbkVycm9yKQogICAgICAgICAgICAgIG9uRXJyb3IoZXJyb3IpOwogICAgICAgICAgICBjb25zdCBpZCA9IGJvZHkuaWQgPz8gaWRDYWNoZS50YWtlKCk7CiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gKHJlc3BvbnNlKSA9PiB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZS5pZCA9PT0gIm51bWJlciIgJiYgaWQgIT09IHJlc3BvbnNlLmlkKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIGlmIChib2R5Lm1ldGhvZCA9PT0gImV0aF9zdWJzY3JpYmUiICYmIHR5cGVvZiByZXNwb25zZS5yZXN1bHQgPT09ICJzdHJpbmciKQogICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5zZXQocmVzcG9uc2UucmVzdWx0LCB7CiAgICAgICAgICAgICAgICAgIG9uUmVzcG9uc2U6IGNhbGxiYWNrLAogICAgICAgICAgICAgICAgICBvbkVycm9yCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBpZiAoYm9keS5tZXRob2QgPT09ICJldGhfdW5zdWJzY3JpYmUiKQogICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5kZWxldGUoYm9keS5wYXJhbXM/LlswXSk7CiAgICAgICAgICAgICAgb25SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHJlcXVlc3RzLnNldChpZCwgeyBvblJlc3BvbnNlOiBjYWxsYmFjaywgb25FcnJvciB9KTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBzb2NrZXQucmVxdWVzdCh7CiAgICAgICAgICAgICAgICBib2R5OiB7CiAgICAgICAgICAgICAgICAgIGpzb25ycGM6ICIyLjAiLAogICAgICAgICAgICAgICAgICBpZCwKICAgICAgICAgICAgICAgICAgLi4uYm9keQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGNhdGNoIChlcnJvcjIpIHsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHJlcXVlc3RBc3luYyh7IGJvZHksIHRpbWVvdXQgPSAxZTQgfSkgewogICAgICAgICAgICByZXR1cm4gd2l0aFRpbWVvdXQoKCkgPT4gbmV3IFByb21pc2UoKG9uUmVzcG9uc2UsIG9uRXJyb3IpID0+IHRoaXMucmVxdWVzdCh7CiAgICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgICBvbkVycm9yLAogICAgICAgICAgICAgIG9uUmVzcG9uc2UKICAgICAgICAgICAgfSkpLCB7CiAgICAgICAgICAgICAgZXJyb3JJbnN0YW5jZTogbmV3IFRpbWVvdXRFcnJvcih7IGJvZHksIHVybCB9KSwKICAgICAgICAgICAgICB0aW1lb3V0CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHJlcXVlc3RzLAogICAgICAgICAgc3Vic2NyaXB0aW9ucywKICAgICAgICAgIHVybAogICAgICAgIH07CiAgICAgICAgc29ja2V0Q2xpZW50Q2FjaGUuc2V0KGAke2tleX06JHt1cmx9YCwgc29ja2V0Q2xpZW50KTsKICAgICAgICByZXR1cm4gW3NvY2tldENsaWVudF07CiAgICAgIH0KICAgIH0pOwogICAgY29uc3QgW18sIFtzb2NrZXRDbGllbnRfXV0gPSBhd2FpdCBzY2hlZHVsZSgpOwogICAgcmV0dXJuIHNvY2tldENsaWVudF87CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3JwYy93ZWJTb2NrZXQuanMKICBhc3luYyBmdW5jdGlvbiBnZXRXZWJTb2NrZXRScGNDbGllbnQodXJsLCBvcHRpb25zID0ge30pIHsKICAgIGNvbnN0IHsga2VlcEFsaXZlLCByZWNvbm5lY3QgfSA9IG9wdGlvbnM7CiAgICByZXR1cm4gZ2V0U29ja2V0UnBjQ2xpZW50KHsKICAgICAgYXN5bmMgZ2V0U29ja2V0KHsgb25DbG9zZSwgb25FcnJvciwgb25PcGVuLCBvblJlc3BvbnNlIH0pIHsKICAgICAgICBjb25zdCBXZWJTb2NrZXQzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiAoaW5pdF9uYXRpdmUoKSwgbmF0aXZlX2V4cG9ydHMpKS50aGVuKChtb2R1bGUpID0+IG1vZHVsZS5XZWJTb2NrZXQpOwogICAgICAgIGNvbnN0IHNvY2tldCA9IG5ldyBXZWJTb2NrZXQzKHVybCk7CiAgICAgICAgZnVuY3Rpb24gb25DbG9zZV8oKSB7CiAgICAgICAgICBvbkNsb3NlKCk7CiAgICAgICAgICBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCBvbkNsb3NlXyk7CiAgICAgICAgICBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG9uTWVzc2FnZSk7CiAgICAgICAgICBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBvbkVycm9yKTsKICAgICAgICAgIHNvY2tldC5yZW1vdmVFdmVudExpc3RlbmVyKCJvcGVuIiwgb25PcGVuKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gb25NZXNzYWdlKHsgZGF0YSB9KSB7CiAgICAgICAgICBvblJlc3BvbnNlKEpTT04ucGFyc2UoZGF0YSkpOwogICAgICAgIH0KICAgICAgICBzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCBvbkNsb3NlXyk7CiAgICAgICAgc29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBvbk1lc3NhZ2UpOwogICAgICAgIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsIG9uRXJyb3IpOwogICAgICAgIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKCJvcGVuIiwgb25PcGVuKTsKICAgICAgICBpZiAoc29ja2V0LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldDMuQ09OTkVDVElORykgewogICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgICAgICBpZiAoIXNvY2tldCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHNvY2tldC5vbm9wZW4gPSByZXNvbHZlOwogICAgICAgICAgICBzb2NrZXQub25lcnJvciA9IHJlamVjdDsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb25zdCB7IGNsb3NlOiBjbG9zZV8gfSA9IHNvY2tldDsKICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzb2NrZXQsIHsKICAgICAgICAgIGNsb3NlKCkgewogICAgICAgICAgICBjbG9zZV8uYmluZChzb2NrZXQpKCk7CiAgICAgICAgICAgIG9uQ2xvc2UoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBwaW5nKCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGlmIChzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NFRCB8fCBzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NJTkcpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0UmVxdWVzdEVycm9yKHsKICAgICAgICAgICAgICAgICAgdXJsOiBzb2NrZXQudXJsLAogICAgICAgICAgICAgICAgICBjYXVzZTogbmV3IFNvY2tldENsb3NlZEVycm9yKHsgdXJsOiBzb2NrZXQudXJsIH0pCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBjb25zdCBib2R5ID0gewogICAgICAgICAgICAgICAganNvbnJwYzogIjIuMCIsCiAgICAgICAgICAgICAgICBtZXRob2Q6ICJuZXRfdmVyc2lvbiIsCiAgICAgICAgICAgICAgICBwYXJhbXM6IFtdCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBzb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeShib2R5KSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgb25FcnJvcihlcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICByZXF1ZXN0KHsgYm9keSB9KSB7CiAgICAgICAgICAgIGlmIChzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NFRCB8fCBzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NJTkcpCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldFJlcXVlc3RFcnJvcih7CiAgICAgICAgICAgICAgICBib2R5LAogICAgICAgICAgICAgICAgdXJsOiBzb2NrZXQudXJsLAogICAgICAgICAgICAgICAgY2F1c2U6IG5ldyBTb2NrZXRDbG9zZWRFcnJvcih7IHVybDogc29ja2V0LnVybCB9KQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoYm9keSkpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9LAogICAgICBrZWVwQWxpdmUsCiAgICAgIHJlY29ubmVjdCwKICAgICAgdXJsCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcnBjL2NvbXBhdC5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldFNvY2tldCh1cmwpIHsKICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldFdlYlNvY2tldFJwY0NsaWVudCh1cmwpOwogICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oY2xpZW50LnNvY2tldCwgewogICAgICByZXF1ZXN0czogY2xpZW50LnJlcXVlc3RzLAogICAgICBzdWJzY3JpcHRpb25zOiBjbGllbnQuc3Vic2NyaXB0aW9ucwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3R5cGVkRGF0YS5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL2hhc2hUeXBlZERhdGEuanMKICBpbml0X2VuY29kZUFiaVBhcmFtZXRlcnMoKTsKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X2tlY2NhazI1NigpOwogIGZ1bmN0aW9uIGhhc2hUeXBlZERhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBkb21haW4gPSB7fSwgbWVzc2FnZSwgcHJpbWFyeVR5cGUgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCB0eXBlcyA9IHsKICAgICAgRUlQNzEyRG9tYWluOiBnZXRUeXBlc0ZvckVJUDcxMkRvbWFpbih7IGRvbWFpbiB9KSwKICAgICAgLi4ucGFyYW1ldGVycy50eXBlcwogICAgfTsKICAgIHZhbGlkYXRlVHlwZWREYXRhKHsKICAgICAgZG9tYWluLAogICAgICBtZXNzYWdlLAogICAgICBwcmltYXJ5VHlwZSwKICAgICAgdHlwZXMKICAgIH0pOwogICAgY29uc3QgcGFydHMgPSBbIjB4MTkwMSJdOwogICAgaWYgKGRvbWFpbikKICAgICAgcGFydHMucHVzaChoYXNoRG9tYWluKHsKICAgICAgICBkb21haW4sCiAgICAgICAgdHlwZXMKICAgICAgfSkpOwogICAgaWYgKHByaW1hcnlUeXBlICE9PSAiRUlQNzEyRG9tYWluIikKICAgICAgcGFydHMucHVzaChoYXNoU3RydWN0KHsKICAgICAgICBkYXRhOiBtZXNzYWdlLAogICAgICAgIHByaW1hcnlUeXBlLAogICAgICAgIHR5cGVzCiAgICAgIH0pKTsKICAgIHJldHVybiBrZWNjYWsyNTYoY29uY2F0KHBhcnRzKSk7CiAgfQogIGZ1bmN0aW9uIGhhc2hEb21haW4oeyBkb21haW4sIHR5cGVzIH0pIHsKICAgIHJldHVybiBoYXNoU3RydWN0KHsKICAgICAgZGF0YTogZG9tYWluLAogICAgICBwcmltYXJ5VHlwZTogIkVJUDcxMkRvbWFpbiIsCiAgICAgIHR5cGVzCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gaGFzaFN0cnVjdCh7IGRhdGEsIHByaW1hcnlUeXBlLCB0eXBlcyB9KSB7CiAgICBjb25zdCBlbmNvZGVkID0gZW5jb2RlRGF0YSh7CiAgICAgIGRhdGEsCiAgICAgIHByaW1hcnlUeXBlLAogICAgICB0eXBlcwogICAgfSk7CiAgICByZXR1cm4ga2VjY2FrMjU2KGVuY29kZWQpOwogIH0KICBmdW5jdGlvbiBlbmNvZGVEYXRhKHsgZGF0YSwgcHJpbWFyeVR5cGUsIHR5cGVzIH0pIHsKICAgIGNvbnN0IGVuY29kZWRUeXBlcyA9IFt7IHR5cGU6ICJieXRlczMyIiB9XTsKICAgIGNvbnN0IGVuY29kZWRWYWx1ZXMgPSBbaGFzaFR5cGUoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSldOwogICAgZm9yIChjb25zdCBmaWVsZCBvZiB0eXBlc1twcmltYXJ5VHlwZV0pIHsKICAgICAgY29uc3QgW3R5cGUsIHZhbHVlXSA9IGVuY29kZUZpZWxkKHsKICAgICAgICB0eXBlcywKICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLAogICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsCiAgICAgICAgdmFsdWU6IGRhdGFbZmllbGQubmFtZV0KICAgICAgfSk7CiAgICAgIGVuY29kZWRUeXBlcy5wdXNoKHR5cGUpOwogICAgICBlbmNvZGVkVmFsdWVzLnB1c2godmFsdWUpOwogICAgfQogICAgcmV0dXJuIGVuY29kZUFiaVBhcmFtZXRlcnMoZW5jb2RlZFR5cGVzLCBlbmNvZGVkVmFsdWVzKTsKICB9CiAgZnVuY3Rpb24gaGFzaFR5cGUoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSkgewogICAgY29uc3QgZW5jb2RlZEhhc2hUeXBlID0gdG9IZXgoZW5jb2RlVHlwZSh7IHByaW1hcnlUeXBlLCB0eXBlcyB9KSk7CiAgICByZXR1cm4ga2VjY2FrMjU2KGVuY29kZWRIYXNoVHlwZSk7CiAgfQogIGZ1bmN0aW9uIGVuY29kZVR5cGUoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSkgewogICAgbGV0IHJlc3VsdCA9ICIiOwogICAgY29uc3QgdW5zb3J0ZWREZXBzID0gZmluZFR5cGVEZXBlbmRlbmNpZXMoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSk7CiAgICB1bnNvcnRlZERlcHMuZGVsZXRlKHByaW1hcnlUeXBlKTsKICAgIGNvbnN0IGRlcHMgPSBbcHJpbWFyeVR5cGUsIC4uLkFycmF5LmZyb20odW5zb3J0ZWREZXBzKS5zb3J0KCldOwogICAgZm9yIChjb25zdCB0eXBlIG9mIGRlcHMpIHsKICAgICAgcmVzdWx0ICs9IGAke3R5cGV9KCR7dHlwZXNbdHlwZV0ubWFwKCh7IG5hbWUsIHR5cGU6IHQgfSkgPT4gYCR7dH0gJHtuYW1lfWApLmpvaW4oIiwiKX0pYDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIGZpbmRUeXBlRGVwZW5kZW5jaWVzKHsgcHJpbWFyeVR5cGU6IHByaW1hcnlUeXBlXywgdHlwZXMgfSwgcmVzdWx0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpIHsKICAgIGNvbnN0IG1hdGNoID0gcHJpbWFyeVR5cGVfLm1hdGNoKC9eXHcqL3UpOwogICAgY29uc3QgcHJpbWFyeVR5cGUgPSBtYXRjaD8uWzBdOwogICAgaWYgKHJlc3VsdHMuaGFzKHByaW1hcnlUeXBlKSB8fCB0eXBlc1twcmltYXJ5VHlwZV0gPT09IHZvaWQgMCkgewogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KICAgIHJlc3VsdHMuYWRkKHByaW1hcnlUeXBlKTsKICAgIGZvciAoY29uc3QgZmllbGQgb2YgdHlwZXNbcHJpbWFyeVR5cGVdKSB7CiAgICAgIGZpbmRUeXBlRGVwZW5kZW5jaWVzKHsgcHJpbWFyeVR5cGU6IGZpZWxkLnR5cGUsIHR5cGVzIH0sIHJlc3VsdHMpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQogIGZ1bmN0aW9uIGVuY29kZUZpZWxkKHsgdHlwZXMsIG5hbWUsIHR5cGUsIHZhbHVlIH0pIHsKICAgIGlmICh0eXBlc1t0eXBlXSAhPT0gdm9pZCAwKSB7CiAgICAgIHJldHVybiBbCiAgICAgICAgeyB0eXBlOiAiYnl0ZXMzMiIgfSwKICAgICAgICBrZWNjYWsyNTYoZW5jb2RlRGF0YSh7IGRhdGE6IHZhbHVlLCBwcmltYXJ5VHlwZTogdHlwZSwgdHlwZXMgfSkpCiAgICAgIF07CiAgICB9CiAgICBpZiAodHlwZSA9PT0gImJ5dGVzIikgewogICAgICBjb25zdCBwcmVwZW5kID0gdmFsdWUubGVuZ3RoICUgMiA/ICIwIiA6ICIiOwogICAgICB2YWx1ZSA9IGAweCR7cHJlcGVuZCArIHZhbHVlLnNsaWNlKDIpfWA7CiAgICAgIHJldHVybiBbeyB0eXBlOiAiYnl0ZXMzMiIgfSwga2VjY2FrMjU2KHZhbHVlKV07CiAgICB9CiAgICBpZiAodHlwZSA9PT0gInN0cmluZyIpCiAgICAgIHJldHVybiBbeyB0eXBlOiAiYnl0ZXMzMiIgfSwga2VjY2FrMjU2KHRvSGV4KHZhbHVlKSldOwogICAgaWYgKHR5cGUubGFzdEluZGV4T2YoIl0iKSA9PT0gdHlwZS5sZW5ndGggLSAxKSB7CiAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0eXBlLnNsaWNlKDAsIHR5cGUubGFzdEluZGV4T2YoIlsiKSk7CiAgICAgIGNvbnN0IHR5cGVWYWx1ZVBhaXJzID0gdmFsdWUubWFwKChpdGVtKSA9PiBlbmNvZGVGaWVsZCh7CiAgICAgICAgbmFtZSwKICAgICAgICB0eXBlOiBwYXJzZWRUeXBlLAogICAgICAgIHR5cGVzLAogICAgICAgIHZhbHVlOiBpdGVtCiAgICAgIH0pKTsKICAgICAgcmV0dXJuIFsKICAgICAgICB7IHR5cGU6ICJieXRlczMyIiB9LAogICAgICAgIGtlY2NhazI1NihlbmNvZGVBYmlQYXJhbWV0ZXJzKHR5cGVWYWx1ZVBhaXJzLm1hcCgoW3RdKSA9PiB0KSwgdHlwZVZhbHVlUGFpcnMubWFwKChbLCB2XSkgPT4gdikpKQogICAgICBdOwogICAgfQogICAgcmV0dXJuIFt7IHR5cGUgfSwgdmFsdWVdOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90eXBlZERhdGEuanMKICBpbml0X3N0cmluZ2lmeSgpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZVR5cGVkRGF0YShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGRvbWFpbjogZG9tYWluXywgbWVzc2FnZTogbWVzc2FnZV8sIHByaW1hcnlUeXBlLCB0eXBlcyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IG5vcm1hbGl6ZURhdGEgPSAoc3RydWN0LCBkYXRhXykgPT4gewogICAgICBjb25zdCBkYXRhID0geyAuLi5kYXRhXyB9OwogICAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHN0cnVjdCkgewogICAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSB9ID0gcGFyYW07CiAgICAgICAgaWYgKHR5cGUgPT09ICJhZGRyZXNzIikKICAgICAgICAgIGRhdGFbbmFtZV0gPSBkYXRhW25hbWVdLnRvTG93ZXJDYXNlKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGRhdGE7CiAgICB9OwogICAgY29uc3QgZG9tYWluID0gKCgpID0+IHsKICAgICAgaWYgKCF0eXBlcy5FSVA3MTJEb21haW4pCiAgICAgICAgcmV0dXJuIHt9OwogICAgICBpZiAoIWRvbWFpbl8pCiAgICAgICAgcmV0dXJuIHt9OwogICAgICByZXR1cm4gbm9ybWFsaXplRGF0YSh0eXBlcy5FSVA3MTJEb21haW4sIGRvbWFpbl8pOwogICAgfSkoKTsKICAgIGNvbnN0IG1lc3NhZ2UgPSAoKCkgPT4gewogICAgICBpZiAocHJpbWFyeVR5cGUgPT09ICJFSVA3MTJEb21haW4iKQogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhKHR5cGVzW3ByaW1hcnlUeXBlXSwgbWVzc2FnZV8pOwogICAgfSkoKTsKICAgIHJldHVybiBzdHJpbmdpZnkoeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9KTsKICB9CiAgZnVuY3Rpb24gdmFsaWRhdGVUeXBlZERhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHZhbGlkYXRlRGF0YSA9IChzdHJ1Y3QsIGRhdGEpID0+IHsKICAgICAgZm9yIChjb25zdCBwYXJhbSBvZiBzdHJ1Y3QpIHsKICAgICAgICBjb25zdCB7IG5hbWUsIHR5cGUgfSA9IHBhcmFtOwogICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtuYW1lXTsKICAgICAgICBjb25zdCBpbnRlZ2VyTWF0Y2ggPSB0eXBlLm1hdGNoKGludGVnZXJSZWdleDIpOwogICAgICAgIGlmIChpbnRlZ2VyTWF0Y2ggJiYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIgfHwgdHlwZW9mIHZhbHVlID09PSAiYmlnaW50IikpIHsKICAgICAgICAgIGNvbnN0IFtfdHlwZSwgYmFzZTIsIHNpemVfXSA9IGludGVnZXJNYXRjaDsKICAgICAgICAgIG51bWJlclRvSGV4KHZhbHVlLCB7CiAgICAgICAgICAgIHNpZ25lZDogYmFzZTIgPT09ICJpbnQiLAogICAgICAgICAgICBzaXplOiBOdW1iZXIucGFyc2VJbnQoc2l6ZV8pIC8gOAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlID09PSAiYWRkcmVzcyIgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiAhaXNBZGRyZXNzKHZhbHVlKSkKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogdmFsdWUgfSk7CiAgICAgICAgY29uc3QgYnl0ZXNNYXRjaCA9IHR5cGUubWF0Y2goYnl0ZXNSZWdleDIpOwogICAgICAgIGlmIChieXRlc01hdGNoKSB7CiAgICAgICAgICBjb25zdCBbX3R5cGUsIHNpemVfXSA9IGJ5dGVzTWF0Y2g7CiAgICAgICAgICBpZiAoc2l6ZV8gJiYgc2l6ZSh2YWx1ZSkgIT09IE51bWJlci5wYXJzZUludChzaXplXykpCiAgICAgICAgICAgIHRocm93IG5ldyBCeXRlc1NpemVNaXNtYXRjaEVycm9yKHsKICAgICAgICAgICAgICBleHBlY3RlZFNpemU6IE51bWJlci5wYXJzZUludChzaXplXyksCiAgICAgICAgICAgICAgZ2l2ZW5TaXplOiBzaXplKHZhbHVlKQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY29uc3Qgc3RydWN0MiA9IHR5cGVzW3R5cGVdOwogICAgICAgIGlmIChzdHJ1Y3QyKQogICAgICAgICAgdmFsaWRhdGVEYXRhKHN0cnVjdDIsIHZhbHVlKTsKICAgICAgfQogICAgfTsKICAgIGlmICh0eXBlcy5FSVA3MTJEb21haW4gJiYgZG9tYWluKQogICAgICB2YWxpZGF0ZURhdGEodHlwZXMuRUlQNzEyRG9tYWluLCBkb21haW4pOwogICAgaWYgKHByaW1hcnlUeXBlICE9PSAiRUlQNzEyRG9tYWluIikKICAgICAgdmFsaWRhdGVEYXRhKHR5cGVzW3ByaW1hcnlUeXBlXSwgbWVzc2FnZSk7CiAgfQogIGZ1bmN0aW9uIGdldFR5cGVzRm9yRUlQNzEyRG9tYWluKHsgZG9tYWluIH0pIHsKICAgIHJldHVybiBbCiAgICAgIHR5cGVvZiBkb21haW4/Lm5hbWUgPT09ICJzdHJpbmciICYmIHsgbmFtZTogIm5hbWUiLCB0eXBlOiAic3RyaW5nIiB9LAogICAgICBkb21haW4/LnZlcnNpb24gJiYgeyBuYW1lOiAidmVyc2lvbiIsIHR5cGU6ICJzdHJpbmciIH0sCiAgICAgIHR5cGVvZiBkb21haW4/LmNoYWluSWQgPT09ICJudW1iZXIiICYmIHsKICAgICAgICBuYW1lOiAiY2hhaW5JZCIsCiAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgIH0sCiAgICAgIGRvbWFpbj8udmVyaWZ5aW5nQ29udHJhY3QgJiYgewogICAgICAgIG5hbWU6ICJ2ZXJpZnlpbmdDb250cmFjdCIsCiAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgIH0sCiAgICAgIGRvbWFpbj8uc2FsdCAmJiB7IG5hbWU6ICJzYWx0IiwgdHlwZTogImJ5dGVzMzIiIH0KICAgIF0uZmlsdGVyKEJvb2xlYW4pOwogIH0KICBmdW5jdGlvbiBkb21haW5TZXBhcmF0b3IoeyBkb21haW4gfSkgewogICAgcmV0dXJuIGhhc2hEb21haW4oewogICAgICBkb21haW4sCiAgICAgIHR5cGVzOiB7CiAgICAgICAgRUlQNzEyRG9tYWluOiBnZXRUeXBlc0ZvckVJUDcxMkRvbWFpbih7IGRvbWFpbiB9KQogICAgICB9CiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZUZ1bmN0aW9uRGF0YS5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9zbGljZSgpOwogIGluaXRfdG9GdW5jdGlvblNlbGVjdG9yKCk7CiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9mb3JtYXRBYmlJdGVtMigpOwogIGZ1bmN0aW9uIGRlY29kZUZ1bmN0aW9uRGF0YShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgZGF0YSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNsaWNlKGRhdGEsIDAsIDQpOwogICAgY29uc3QgZGVzY3JpcHRpb24gPSBhYmkyLmZpbmQoKHgpID0+IHgudHlwZSA9PT0gImZ1bmN0aW9uIiAmJiBzaWduYXR1cmUgPT09IHRvRnVuY3Rpb25TZWxlY3Rvcihmb3JtYXRBYmlJdGVtMih4KSkpOwogICAgaWYgKCFkZXNjcmlwdGlvbikKICAgICAgdGhyb3cgbmV3IEFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvcihzaWduYXR1cmUsIHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L2RlY29kZUZ1bmN0aW9uRGF0YSIKICAgICAgfSk7CiAgICByZXR1cm4gewogICAgICBmdW5jdGlvbk5hbWU6IGRlc2NyaXB0aW9uLm5hbWUsCiAgICAgIGFyZ3M6ICJpbnB1dHMiIGluIGRlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uLmlucHV0cyAmJiBkZXNjcmlwdGlvbi5pbnB1dHMubGVuZ3RoID4gMCA/IGRlY29kZUFiaVBhcmFtZXRlcnMoZGVzY3JpcHRpb24uaW5wdXRzLCBzbGljZShkYXRhLCA0KSkgOiB2b2lkIDAKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVFcnJvclJlc3VsdC5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3RvRnVuY3Rpb25TZWxlY3RvcigpOwogIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogIGluaXRfZm9ybWF0QWJpSXRlbTIoKTsKICBpbml0X2dldEFiaUl0ZW0oKTsKICB2YXIgZG9jc1BhdGg2ID0gIi9kb2NzL2NvbnRyYWN0L2VuY29kZUVycm9yUmVzdWx0IjsKICBmdW5jdGlvbiBlbmNvZGVFcnJvclJlc3VsdChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgZXJyb3JOYW1lLCBhcmdzIH0gPSBwYXJhbWV0ZXJzOwogICAgbGV0IGFiaUl0ZW0gPSBhYmkyWzBdOwogICAgaWYgKGVycm9yTmFtZSkgewogICAgICBjb25zdCBpdGVtID0gZ2V0QWJpSXRlbSh7IGFiaTogYWJpMiwgYXJncywgbmFtZTogZXJyb3JOYW1lIH0pOwogICAgICBpZiAoIWl0ZW0pCiAgICAgICAgdGhyb3cgbmV3IEFiaUVycm9yTm90Rm91bmRFcnJvcihlcnJvck5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoNiB9KTsKICAgICAgYWJpSXRlbSA9IGl0ZW07CiAgICB9CiAgICBpZiAoYWJpSXRlbS50eXBlICE9PSAiZXJyb3IiKQogICAgICB0aHJvdyBuZXcgQWJpRXJyb3JOb3RGb3VuZEVycm9yKHZvaWQgMCwgeyBkb2NzUGF0aDogZG9jc1BhdGg2IH0pOwogICAgY29uc3QgZGVmaW5pdGlvbiA9IGZvcm1hdEFiaUl0ZW0yKGFiaUl0ZW0pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdG9GdW5jdGlvblNlbGVjdG9yKGRlZmluaXRpb24pOwogICAgbGV0IGRhdGEgPSAiMHgiOwogICAgaWYgKGFyZ3MgJiYgYXJncy5sZW5ndGggPiAwKSB7CiAgICAgIGlmICghYWJpSXRlbS5pbnB1dHMpCiAgICAgICAgdGhyb3cgbmV3IEFiaUVycm9ySW5wdXRzTm90Rm91bmRFcnJvcihhYmlJdGVtLm5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoNiB9KTsKICAgICAgZGF0YSA9IGVuY29kZUFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMsIGFyZ3MpOwogICAgfQogICAgcmV0dXJuIGNvbmNhdEhleChbc2lnbmF0dXJlLCBkYXRhXSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVGdW5jdGlvblJlc3VsdC5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9lbmNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9nZXRBYmlJdGVtKCk7CiAgdmFyIGRvY3NQYXRoNyA9ICIvZG9jcy9jb250cmFjdC9lbmNvZGVGdW5jdGlvblJlc3VsdCI7CiAgZnVuY3Rpb24gZW5jb2RlRnVuY3Rpb25SZXN1bHQocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGZ1bmN0aW9uTmFtZSwgcmVzdWx0IH0gPSBwYXJhbWV0ZXJzOwogICAgbGV0IGFiaUl0ZW0gPSBhYmkyWzBdOwogICAgaWYgKGZ1bmN0aW9uTmFtZSkgewogICAgICBjb25zdCBpdGVtID0gZ2V0QWJpSXRlbSh7IGFiaTogYWJpMiwgbmFtZTogZnVuY3Rpb25OYW1lIH0pOwogICAgICBpZiAoIWl0ZW0pCiAgICAgICAgdGhyb3cgbmV3IEFiaUZ1bmN0aW9uTm90Rm91bmRFcnJvcihmdW5jdGlvbk5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoNyB9KTsKICAgICAgYWJpSXRlbSA9IGl0ZW07CiAgICB9CiAgICBpZiAoYWJpSXRlbS50eXBlICE9PSAiZnVuY3Rpb24iKQogICAgICB0aHJvdyBuZXcgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yKHZvaWQgMCwgeyBkb2NzUGF0aDogZG9jc1BhdGg3IH0pOwogICAgaWYgKCFhYmlJdGVtLm91dHB1dHMpCiAgICAgIHRocm93IG5ldyBBYmlGdW5jdGlvbk91dHB1dHNOb3RGb3VuZEVycm9yKGFiaUl0ZW0ubmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg3IH0pOwogICAgbGV0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IFtyZXN1bHRdOwogICAgaWYgKGFiaUl0ZW0ub3V0cHV0cy5sZW5ndGggPT09IDAgJiYgIXZhbHVlc1swXSkKICAgICAgdmFsdWVzID0gW107CiAgICByZXR1cm4gZW5jb2RlQWJpUGFyYW1ldGVycyhhYmlJdGVtLm91dHB1dHMsIHZhbHVlcyk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVQYWNrZWQuanMKICBpbml0X2FiaSgpOwogIGluaXRfYWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzKCk7CiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3BhZCgpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBlbmNvZGVQYWNrZWQodHlwZXMsIHZhbHVlcykgewogICAgaWYgKHR5cGVzLmxlbmd0aCAhPT0gdmFsdWVzLmxlbmd0aCkKICAgICAgdGhyb3cgbmV3IEFiaUVuY29kaW5nTGVuZ3RoTWlzbWF0Y2hFcnJvcih7CiAgICAgICAgZXhwZWN0ZWRMZW5ndGg6IHR5cGVzLmxlbmd0aCwKICAgICAgICBnaXZlbkxlbmd0aDogdmFsdWVzLmxlbmd0aAogICAgICB9KTsKICAgIGNvbnN0IGRhdGEgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgdHlwZSA9IHR5cGVzW2ldOwogICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTsKICAgICAgZGF0YS5wdXNoKGVuY29kZSh0eXBlLCB2YWx1ZSkpOwogICAgfQogICAgcmV0dXJuIGNvbmNhdEhleChkYXRhKTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlKHR5cGUsIHZhbHVlLCBpc0FycmF5ID0gZmFsc2UpIHsKICAgIGlmICh0eXBlID09PSAiYWRkcmVzcyIpIHsKICAgICAgY29uc3QgYWRkcmVzcyA9IHZhbHVlOwogICAgICBpZiAoIWlzQWRkcmVzcyhhZGRyZXNzKSkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3MgfSk7CiAgICAgIHJldHVybiBwYWQoYWRkcmVzcy50b0xvd2VyQ2FzZSgpLCB7CiAgICAgICAgc2l6ZTogaXNBcnJheSA/IDMyIDogbnVsbAogICAgICB9KTsKICAgIH0KICAgIGlmICh0eXBlID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIHN0cmluZ1RvSGV4KHZhbHVlKTsKICAgIGlmICh0eXBlID09PSAiYnl0ZXMiKQogICAgICByZXR1cm4gdmFsdWU7CiAgICBpZiAodHlwZSA9PT0gImJvb2wiKQogICAgICByZXR1cm4gcGFkKGJvb2xUb0hleCh2YWx1ZSksIHsgc2l6ZTogaXNBcnJheSA/IDMyIDogMSB9KTsKICAgIGNvbnN0IGludE1hdGNoID0gdHlwZS5tYXRjaChpbnRlZ2VyUmVnZXgyKTsKICAgIGlmIChpbnRNYXRjaCkgewogICAgICBjb25zdCBbX3R5cGUsIGJhc2VUeXBlLCBiaXRzID0gIjI1NiJdID0gaW50TWF0Y2g7CiAgICAgIGNvbnN0IHNpemUzID0gTnVtYmVyLnBhcnNlSW50KGJpdHMpIC8gODsKICAgICAgcmV0dXJuIG51bWJlclRvSGV4KHZhbHVlLCB7CiAgICAgICAgc2l6ZTogaXNBcnJheSA/IDMyIDogc2l6ZTMsCiAgICAgICAgc2lnbmVkOiBiYXNlVHlwZSA9PT0gImludCIKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBieXRlc01hdGNoID0gdHlwZS5tYXRjaChieXRlc1JlZ2V4Mik7CiAgICBpZiAoYnl0ZXNNYXRjaCkgewogICAgICBjb25zdCBbX3R5cGUsIHNpemUzXSA9IGJ5dGVzTWF0Y2g7CiAgICAgIGlmIChOdW1iZXIucGFyc2VJbnQoc2l6ZTMpICE9PSAodmFsdWUubGVuZ3RoIC0gMikgLyAyKQogICAgICAgIHRocm93IG5ldyBCeXRlc1NpemVNaXNtYXRjaEVycm9yKHsKICAgICAgICAgIGV4cGVjdGVkU2l6ZTogTnVtYmVyLnBhcnNlSW50KHNpemUzKSwKICAgICAgICAgIGdpdmVuU2l6ZTogKHZhbHVlLmxlbmd0aCAtIDIpIC8gMgogICAgICAgIH0pOwogICAgICByZXR1cm4gcGFkKHZhbHVlLCB7IGRpcjogInJpZ2h0Iiwgc2l6ZTogaXNBcnJheSA/IDMyIDogbnVsbCB9KTsKICAgIH0KICAgIGNvbnN0IGFycmF5TWF0Y2ggPSB0eXBlLm1hdGNoKGFycmF5UmVnZXgpOwogICAgaWYgKGFycmF5TWF0Y2ggJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgY29uc3QgW190eXBlLCBjaGlsZFR5cGVdID0gYXJyYXlNYXRjaDsKICAgICAgY29uc3QgZGF0YSA9IFtdOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgZGF0YS5wdXNoKGVuY29kZShjaGlsZFR5cGUsIHZhbHVlW2ldLCB0cnVlKSk7CiAgICAgIH0KICAgICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybiAiMHgiOwogICAgICByZXR1cm4gY29uY2F0SGV4KGRhdGEpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkUGFja2VkQWJpVHlwZSh0eXBlKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9nZXRDb250cmFjdEFkZHJlc3MuanMKICBpbml0X2NvbmNhdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvaXNCeXRlcy5qcwogIGZ1bmN0aW9uIGlzQnl0ZXMzKHZhbHVlKSB7CiAgICBpZiAoIXZhbHVlKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAib2JqZWN0IikKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKCEoIkJZVEVTX1BFUl9FTEVNRU5UIiBpbiB2YWx1ZSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB2YWx1ZS5CWVRFU19QRVJfRUxFTUVOVCA9PT0gMSAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lID09PSAiVWludDhBcnJheSI7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FkZHJlc3MvZ2V0Q29udHJhY3RBZGRyZXNzLmpzCiAgaW5pdF9wYWQoKTsKICBpbml0X3NsaWNlKCk7CiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF9rZWNjYWsyNTYoKTsKICBpbml0X2dldEFkZHJlc3MoKTsKICBmdW5jdGlvbiBnZXRDb250cmFjdEFkZHJlc3MyKG9wdHMpIHsKICAgIGlmIChvcHRzLm9wY29kZSA9PT0gIkNSRUFURTIiKQogICAgICByZXR1cm4gZ2V0Q3JlYXRlMkFkZHJlc3Mob3B0cyk7CiAgICByZXR1cm4gZ2V0Q3JlYXRlQWRkcmVzcyhvcHRzKTsKICB9CiAgZnVuY3Rpb24gZ2V0Q3JlYXRlQWRkcmVzcyhvcHRzKSB7CiAgICBjb25zdCBmcm9tID0gdG9CeXRlcyhnZXRBZGRyZXNzKG9wdHMuZnJvbSkpOwogICAgbGV0IG5vbmNlID0gdG9CeXRlcyhvcHRzLm5vbmNlKTsKICAgIGlmIChub25jZVswXSA9PT0gMCkKICAgICAgbm9uY2UgPSBuZXcgVWludDhBcnJheShbXSk7CiAgICByZXR1cm4gZ2V0QWRkcmVzcyhgMHgke2tlY2NhazI1Nih0b1JscChbZnJvbSwgbm9uY2VdLCAiYnl0ZXMiKSkuc2xpY2UoMjYpfWApOwogIH0KICBmdW5jdGlvbiBnZXRDcmVhdGUyQWRkcmVzcyhvcHRzKSB7CiAgICBjb25zdCBmcm9tID0gdG9CeXRlcyhnZXRBZGRyZXNzKG9wdHMuZnJvbSkpOwogICAgY29uc3Qgc2FsdCA9IHBhZChpc0J5dGVzMyhvcHRzLnNhbHQpID8gb3B0cy5zYWx0IDogdG9CeXRlcyhvcHRzLnNhbHQpLCB7CiAgICAgIHNpemU6IDMyCiAgICB9KTsKICAgIGNvbnN0IGJ5dGVjb2RlSGFzaCA9ICgoKSA9PiB7CiAgICAgIGlmICgiYnl0ZWNvZGVIYXNoIiBpbiBvcHRzKSB7CiAgICAgICAgaWYgKGlzQnl0ZXMzKG9wdHMuYnl0ZWNvZGVIYXNoKSkKICAgICAgICAgIHJldHVybiBvcHRzLmJ5dGVjb2RlSGFzaDsKICAgICAgICByZXR1cm4gdG9CeXRlcyhvcHRzLmJ5dGVjb2RlSGFzaCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGtlY2NhazI1NihvcHRzLmJ5dGVjb2RlLCAiYnl0ZXMiKTsKICAgIH0pKCk7CiAgICByZXR1cm4gZ2V0QWRkcmVzcyhzbGljZShrZWNjYWsyNTYoY29uY2F0KFt0b0J5dGVzKCIweGZmIiksIGZyb20sIHNhbHQsIGJ5dGVjb2RlSGFzaF0pKSwgMTIpKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZm9ybWF0dGVycy90cmFuc2FjdGlvblJlY2VpcHQuanMKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X2Zvcm1hdHRlcigpOwogIHZhciByZWNlaXB0U3RhdHVzZXMgPSB7CiAgICAiMHgwIjogInJldmVydGVkIiwKICAgICIweDEiOiAic3VjY2VzcyIKICB9OwogIGZ1bmN0aW9uIGZvcm1hdFRyYW5zYWN0aW9uUmVjZWlwdCh0cmFuc2FjdGlvblJlY2VpcHQpIHsKICAgIGNvbnN0IHJlY2VpcHQgPSB7CiAgICAgIC4uLnRyYW5zYWN0aW9uUmVjZWlwdCwKICAgICAgYmxvY2tOdW1iZXI6IHRyYW5zYWN0aW9uUmVjZWlwdC5ibG9ja051bWJlciA/IEJpZ0ludCh0cmFuc2FjdGlvblJlY2VpcHQuYmxvY2tOdW1iZXIpIDogbnVsbCwKICAgICAgY29udHJhY3RBZGRyZXNzOiB0cmFuc2FjdGlvblJlY2VpcHQuY29udHJhY3RBZGRyZXNzID8gdHJhbnNhY3Rpb25SZWNlaXB0LmNvbnRyYWN0QWRkcmVzcyA6IG51bGwsCiAgICAgIGN1bXVsYXRpdmVHYXNVc2VkOiB0cmFuc2FjdGlvblJlY2VpcHQuY3VtdWxhdGl2ZUdhc1VzZWQgPyBCaWdJbnQodHJhbnNhY3Rpb25SZWNlaXB0LmN1bXVsYXRpdmVHYXNVc2VkKSA6IG51bGwsCiAgICAgIGVmZmVjdGl2ZUdhc1ByaWNlOiB0cmFuc2FjdGlvblJlY2VpcHQuZWZmZWN0aXZlR2FzUHJpY2UgPyBCaWdJbnQodHJhbnNhY3Rpb25SZWNlaXB0LmVmZmVjdGl2ZUdhc1ByaWNlKSA6IG51bGwsCiAgICAgIGdhc1VzZWQ6IHRyYW5zYWN0aW9uUmVjZWlwdC5nYXNVc2VkID8gQmlnSW50KHRyYW5zYWN0aW9uUmVjZWlwdC5nYXNVc2VkKSA6IG51bGwsCiAgICAgIGxvZ3M6IHRyYW5zYWN0aW9uUmVjZWlwdC5sb2dzID8gdHJhbnNhY3Rpb25SZWNlaXB0LmxvZ3MubWFwKChsb2cpID0+IGZvcm1hdExvZyhsb2cpKSA6IG51bGwsCiAgICAgIHRvOiB0cmFuc2FjdGlvblJlY2VpcHQudG8gPyB0cmFuc2FjdGlvblJlY2VpcHQudG8gOiBudWxsLAogICAgICB0cmFuc2FjdGlvbkluZGV4OiB0cmFuc2FjdGlvblJlY2VpcHQudHJhbnNhY3Rpb25JbmRleCA/IGhleFRvTnVtYmVyKHRyYW5zYWN0aW9uUmVjZWlwdC50cmFuc2FjdGlvbkluZGV4KSA6IG51bGwsCiAgICAgIHN0YXR1czogdHJhbnNhY3Rpb25SZWNlaXB0LnN0YXR1cyA/IHJlY2VpcHRTdGF0dXNlc1t0cmFuc2FjdGlvblJlY2VpcHQuc3RhdHVzXSA6IG51bGwsCiAgICAgIHR5cGU6IHRyYW5zYWN0aW9uUmVjZWlwdC50eXBlID8gdHJhbnNhY3Rpb25UeXBlW3RyYW5zYWN0aW9uUmVjZWlwdC50eXBlXSB8fCB0cmFuc2FjdGlvblJlY2VpcHQudHlwZSA6IG51bGwKICAgIH07CiAgICBpZiAodHJhbnNhY3Rpb25SZWNlaXB0LmJsb2JHYXNQcmljZSkKICAgICAgcmVjZWlwdC5ibG9iR2FzUHJpY2UgPSBCaWdJbnQodHJhbnNhY3Rpb25SZWNlaXB0LmJsb2JHYXNQcmljZSk7CiAgICBpZiAodHJhbnNhY3Rpb25SZWNlaXB0LmJsb2JHYXNVc2VkKQogICAgICByZWNlaXB0LmJsb2JHYXNVc2VkID0gQmlnSW50KHRyYW5zYWN0aW9uUmVjZWlwdC5ibG9iR2FzVXNlZCk7CiAgICByZXR1cm4gcmVjZWlwdDsKICB9CiAgdmFyIGRlZmluZVRyYW5zYWN0aW9uUmVjZWlwdCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVGb3JtYXR0ZXIoInRyYW5zYWN0aW9uUmVjZWlwdCIsIGZvcm1hdFRyYW5zYWN0aW9uUmVjZWlwdCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaW5kZXguanMKICBpbml0X2Zyb21IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbmNvZGluZy9mcm9tUmxwLmpzCiAgaW5pdF9iYXNlKCk7CiAgaW5pdF9lbmNvZGluZygpOwogIGluaXRfY3Vyc29yMigpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBmcm9tUmxwKHZhbHVlLCB0byA9ICJoZXgiKSB7CiAgICBjb25zdCBieXRlczIgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgewogICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAzICYmIHZhbHVlLmxlbmd0aCAlIDIgIT09IDApCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEhleFZhbHVlRXJyb3IodmFsdWUpOwogICAgICAgIHJldHVybiBoZXhUb0J5dGVzKHZhbHVlKTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWU7CiAgICB9KSgpOwogICAgY29uc3QgY3Vyc29yID0gY3JlYXRlQ3Vyc29yKGJ5dGVzMiwgewogICAgICByZWN1cnNpdmVSZWFkTGltaXQ6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWQogICAgfSk7CiAgICBjb25zdCByZXN1bHQgPSBmcm9tUmxwQ3Vyc29yKGN1cnNvciwgdG8pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gZnJvbVJscEN1cnNvcihjdXJzb3IsIHRvID0gImhleCIpIHsKICAgIGlmIChjdXJzb3IuYnl0ZXMubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gdG8gPT09ICJoZXgiID8gYnl0ZXNUb0hleChjdXJzb3IuYnl0ZXMpIDogY3Vyc29yLmJ5dGVzOwogICAgY29uc3QgcHJlZml4ID0gY3Vyc29yLnJlYWRCeXRlKCk7CiAgICBpZiAocHJlZml4IDwgMTI4KQogICAgICBjdXJzb3IuZGVjcmVtZW50UG9zaXRpb24oMSk7CiAgICBpZiAocHJlZml4IDwgMTkyKSB7CiAgICAgIGNvbnN0IGxlbmd0aDIgPSByZWFkTGVuZ3RoKGN1cnNvciwgcHJlZml4LCAxMjgpOwogICAgICBjb25zdCBieXRlczIgPSBjdXJzb3IucmVhZEJ5dGVzKGxlbmd0aDIpOwogICAgICByZXR1cm4gdG8gPT09ICJoZXgiID8gYnl0ZXNUb0hleChieXRlczIpIDogYnl0ZXMyOwogICAgfQogICAgY29uc3QgbGVuZ3RoID0gcmVhZExlbmd0aChjdXJzb3IsIHByZWZpeCwgMTkyKTsKICAgIHJldHVybiByZWFkTGlzdChjdXJzb3IsIGxlbmd0aCwgdG8pOwogIH0KICBmdW5jdGlvbiByZWFkTGVuZ3RoKGN1cnNvciwgcHJlZml4LCBvZmZzZXQpIHsKICAgIGlmIChvZmZzZXQgPT09IDEyOCAmJiBwcmVmaXggPCAxMjgpCiAgICAgIHJldHVybiAxOwogICAgaWYgKHByZWZpeCA8PSBvZmZzZXQgKyA1NSkKICAgICAgcmV0dXJuIHByZWZpeCAtIG9mZnNldDsKICAgIGlmIChwcmVmaXggPT09IG9mZnNldCArIDU1ICsgMSkKICAgICAgcmV0dXJuIGN1cnNvci5yZWFkVWludDgoKTsKICAgIGlmIChwcmVmaXggPT09IG9mZnNldCArIDU1ICsgMikKICAgICAgcmV0dXJuIGN1cnNvci5yZWFkVWludDE2KCk7CiAgICBpZiAocHJlZml4ID09PSBvZmZzZXQgKyA1NSArIDMpCiAgICAgIHJldHVybiBjdXJzb3IucmVhZFVpbnQyNCgpOwogICAgaWYgKHByZWZpeCA9PT0gb2Zmc2V0ICsgNTUgKyA0KQogICAgICByZXR1cm4gY3Vyc29yLnJlYWRVaW50MzIoKTsKICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJJbnZhbGlkIFJMUCBwcmVmaXgiKTsKICB9CiAgZnVuY3Rpb24gcmVhZExpc3QoY3Vyc29yLCBsZW5ndGgsIHRvKSB7CiAgICBjb25zdCBwb3NpdGlvbiA9IGN1cnNvci5wb3NpdGlvbjsKICAgIGNvbnN0IHZhbHVlID0gW107CiAgICB3aGlsZSAoY3Vyc29yLnBvc2l0aW9uIC0gcG9zaXRpb24gPCBsZW5ndGgpCiAgICAgIHZhbHVlLnB1c2goZnJvbVJscEN1cnNvcihjdXJzb3IsIHRvKSk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9FdmVudFNpZ25hdHVyZS5qcwogIGluaXRfdG9TaWduYXR1cmUoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvRnVuY3Rpb25TaWduYXR1cmUuanMKICBpbml0X3RvU2lnbmF0dXJlKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b0V2ZW50SGFzaC5qcwogIGluaXRfdG9TaWduYXR1cmVIYXNoKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b0Z1bmN0aW9uSGFzaC5qcwogIGluaXRfdG9TaWduYXR1cmVIYXNoKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9pc0hhc2guanMKICBpbml0X2lzSGV4KCk7CiAgaW5pdF9zaXplKCk7CiAgZnVuY3Rpb24gaXNIYXNoKGhhc2gzKSB7CiAgICByZXR1cm4gaXNIZXgoaGFzaDMpICYmIHNpemUoaGFzaDMpID09PSAzMjsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9yaXBlbWQxNjAuanMKICBpbml0X21kKCk7CiAgaW5pdF91dGlsczIoKTsKICB2YXIgUmhvID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50OEFycmF5KFs3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4XSk7CiAgdmFyIElkID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50OEFycmF5KG5ldyBBcnJheSgxNikuZmlsbCgwKS5tYXAoKF8sIGkpID0+IGkpKTsKICB2YXIgUGkgPSAvKiBAX19QVVJFX18gKi8gSWQubWFwKChpKSA9PiAoOSAqIGkgKyA1KSAlIDE2KTsKICB2YXIgaWR4TCA9IFtJZF07CiAgdmFyIGlkeFIgPSBbUGldOwogIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKQogICAgZm9yIChsZXQgaiBvZiBbaWR4TCwgaWR4Ul0pCiAgICAgIGoucHVzaChqW2ldLm1hcCgoaykgPT4gUmhvW2tdKSk7CiAgdmFyIHNoaWZ0cyA9IC8qIEBfX1BVUkVfXyAqLyBbCiAgICBbMTEsIDE0LCAxNSwgMTIsIDUsIDgsIDcsIDksIDExLCAxMywgMTQsIDE1LCA2LCA3LCA5LCA4XSwKICAgIFsxMiwgMTMsIDExLCAxNSwgNiwgOSwgOSwgNywgMTIsIDE1LCAxMSwgMTMsIDcsIDgsIDcsIDddLAogICAgWzEzLCAxNSwgMTQsIDExLCA3LCA3LCA2LCA4LCAxMywgMTQsIDEzLCAxMiwgNSwgNSwgNiwgOV0sCiAgICBbMTQsIDExLCAxMiwgMTQsIDgsIDYsIDUsIDUsIDE1LCAxMiwgMTUsIDE0LCA5LCA5LCA4LCA2XSwKICAgIFsxNSwgMTIsIDEzLCAxMywgOSwgNSwgOCwgNiwgMTQsIDExLCAxMiwgMTEsIDgsIDYsIDUsIDVdCiAgXS5tYXAoKGkpID0+IG5ldyBVaW50OEFycmF5KGkpKTsKICB2YXIgc2hpZnRzTCA9IC8qIEBfX1BVUkVfXyAqLyBpZHhMLm1hcCgoaWR4LCBpKSA9PiBpZHgubWFwKChqKSA9PiBzaGlmdHNbaV1bal0pKTsKICB2YXIgc2hpZnRzUiA9IC8qIEBfX1BVUkVfXyAqLyBpZHhSLm1hcCgoaWR4LCBpKSA9PiBpZHgubWFwKChqKSA9PiBzaGlmdHNbaV1bal0pKTsKICB2YXIgS2wgPSAvKiBAX19QVVJFX18gKi8gbmV3IFVpbnQzMkFycmF5KFsKICAgIDAsCiAgICAxNTE4NTAwMjQ5LAogICAgMTg1OTc3NTM5MywKICAgIDI0MDA5NTk3MDgsCiAgICAyODQwODUzODM4CiAgXSk7CiAgdmFyIEtyID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheShbCiAgICAxMzUyODI5OTI2LAogICAgMTU0ODYwMzY4NCwKICAgIDE4MzYwNzI2OTEsCiAgICAyMDUzOTk0MjE3LAogICAgMAogIF0pOwogIGZ1bmN0aW9uIGYoZ3JvdXAsIHgsIHksIHopIHsKICAgIGlmIChncm91cCA9PT0gMCkKICAgICAgcmV0dXJuIHggXiB5IF4gejsKICAgIGVsc2UgaWYgKGdyb3VwID09PSAxKQogICAgICByZXR1cm4geCAmIHkgfCB+eCAmIHo7CiAgICBlbHNlIGlmIChncm91cCA9PT0gMikKICAgICAgcmV0dXJuICh4IHwgfnkpIF4gejsKICAgIGVsc2UgaWYgKGdyb3VwID09PSAzKQogICAgICByZXR1cm4geCAmIHogfCB5ICYgfno7CiAgICBlbHNlCiAgICAgIHJldHVybiB4IF4gKHkgfCB+eik7CiAgfQogIHZhciBSX0JVRiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgVWludDMyQXJyYXkoMTYpOwogIHZhciBSSVBFTUQxNjAgPSBjbGFzcyBleHRlbmRzIEhhc2hNRCB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoNjQsIDIwLCA4LCB0cnVlKTsKICAgICAgdGhpcy5oMCA9IDE3MzI1ODQxOTMgfCAwOwogICAgICB0aGlzLmgxID0gNDAyMzIzMzQxNyB8IDA7CiAgICAgIHRoaXMuaDIgPSAyNTYyMzgzMTAyIHwgMDsKICAgICAgdGhpcy5oMyA9IDI3MTczMzg3OCB8IDA7CiAgICAgIHRoaXMuaDQgPSAzMjg1Mzc3NTIwIHwgMDsKICAgIH0KICAgIGdldCgpIHsKICAgICAgY29uc3QgeyBoMCwgaDEsIGgyLCBoMywgaDQgfSA9IHRoaXM7CiAgICAgIHJldHVybiBbaDAsIGgxLCBoMiwgaDMsIGg0XTsKICAgIH0KICAgIHNldChoMCwgaDEsIGgyLCBoMywgaDQpIHsKICAgICAgdGhpcy5oMCA9IGgwIHwgMDsKICAgICAgdGhpcy5oMSA9IGgxIHwgMDsKICAgICAgdGhpcy5oMiA9IGgyIHwgMDsKICAgICAgdGhpcy5oMyA9IGgzIHwgMDsKICAgICAgdGhpcy5oNCA9IGg0IHwgMDsKICAgIH0KICAgIHByb2Nlc3Modmlldywgb2Zmc2V0KSB7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKywgb2Zmc2V0ICs9IDQpCiAgICAgICAgUl9CVUZbaV0gPSB2aWV3LmdldFVpbnQzMihvZmZzZXQsIHRydWUpOwogICAgICBsZXQgYWwgPSB0aGlzLmgwIHwgMCwgYXIgPSBhbCwgYmwgPSB0aGlzLmgxIHwgMCwgYnIgPSBibCwgY2wgPSB0aGlzLmgyIHwgMCwgY3IgPSBjbCwgZGwgPSB0aGlzLmgzIHwgMCwgZHIgPSBkbCwgZWwgPSB0aGlzLmg0IHwgMCwgZXIgPSBlbDsKICAgICAgZm9yIChsZXQgZ3JvdXAgPSAwOyBncm91cCA8IDU7IGdyb3VwKyspIHsKICAgICAgICBjb25zdCByR3JvdXAgPSA0IC0gZ3JvdXA7CiAgICAgICAgY29uc3QgaGJsID0gS2xbZ3JvdXBdLCBoYnIgPSBLcltncm91cF07CiAgICAgICAgY29uc3QgcmwgPSBpZHhMW2dyb3VwXSwgcnIgPSBpZHhSW2dyb3VwXTsKICAgICAgICBjb25zdCBzbCA9IHNoaWZ0c0xbZ3JvdXBdLCBzciA9IHNoaWZ0c1JbZ3JvdXBdOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgewogICAgICAgICAgY29uc3QgdGwgPSByb3RsKGFsICsgZihncm91cCwgYmwsIGNsLCBkbCkgKyBSX0JVRltybFtpXV0gKyBoYmwsIHNsW2ldKSArIGVsIHwgMDsKICAgICAgICAgIGFsID0gZWwsIGVsID0gZGwsIGRsID0gcm90bChjbCwgMTApIHwgMCwgY2wgPSBibCwgYmwgPSB0bDsKICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAgICAgICAgICBjb25zdCB0ciA9IHJvdGwoYXIgKyBmKHJHcm91cCwgYnIsIGNyLCBkcikgKyBSX0JVRltycltpXV0gKyBoYnIsIHNyW2ldKSArIGVyIHwgMDsKICAgICAgICAgIGFyID0gZXIsIGVyID0gZHIsIGRyID0gcm90bChjciwgMTApIHwgMCwgY3IgPSBiciwgYnIgPSB0cjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5zZXQodGhpcy5oMSArIGNsICsgZHIgfCAwLCB0aGlzLmgyICsgZGwgKyBlciB8IDAsIHRoaXMuaDMgKyBlbCArIGFyIHwgMCwgdGhpcy5oNCArIGFsICsgYnIgfCAwLCB0aGlzLmgwICsgYmwgKyBjciB8IDApOwogICAgfQogICAgcm91bmRDbGVhbigpIHsKICAgICAgUl9CVUYuZmlsbCgwKTsKICAgIH0KICAgIGRlc3Ryb3koKSB7CiAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgICAgdGhpcy5idWZmZXIuZmlsbCgwKTsKICAgICAgdGhpcy5zZXQoMCwgMCwgMCwgMCwgMCk7CiAgICB9CiAgfTsKICB2YXIgcmlwZW1kMTYwID0gLyogQF9fUFVSRV9fICovIHdyYXBDb25zdHJ1Y3RvcigoKSA9PiBuZXcgUklQRU1EMTYwKCkpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvcmlwZW1kMTYwLmpzCiAgaW5pdF9pc0hleCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiByaXBlbWQxNjAyKHZhbHVlLCB0b18pIHsKICAgIGNvbnN0IHRvID0gdG9fIHx8ICJoZXgiOwogICAgY29uc3QgYnl0ZXMyID0gcmlwZW1kMTYwKGlzSGV4KHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSkgPyB0b0J5dGVzKHZhbHVlKSA6IHZhbHVlKTsKICAgIGlmICh0byA9PT0gImJ5dGVzIikKICAgICAgcmV0dXJuIGJ5dGVzMjsKICAgIHJldHVybiB0b0hleChieXRlczIpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvaGFzaE1lc3NhZ2UuanMKICBpbml0X2tlY2NhazI1NigpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9zdHJpbmdzLmpzCiAgdmFyIHByZXNpZ25NZXNzYWdlUHJlZml4ID0gIhlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcbiI7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3RvUHJlZml4ZWRNZXNzYWdlLmpzCiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gdG9QcmVmaXhlZE1lc3NhZ2UobWVzc2FnZV8pIHsKICAgIGNvbnN0IG1lc3NhZ2UgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIG1lc3NhZ2VfID09PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gc3RyaW5nVG9IZXgobWVzc2FnZV8pOwogICAgICBpZiAodHlwZW9mIG1lc3NhZ2VfLnJhdyA9PT0gInN0cmluZyIpCiAgICAgICAgcmV0dXJuIG1lc3NhZ2VfLnJhdzsKICAgICAgcmV0dXJuIGJ5dGVzVG9IZXgobWVzc2FnZV8ucmF3KTsKICAgIH0pKCk7CiAgICBjb25zdCBwcmVmaXggPSBzdHJpbmdUb0hleChgJHtwcmVzaWduTWVzc2FnZVByZWZpeH0ke3NpemUobWVzc2FnZSl9YCk7CiAgICByZXR1cm4gY29uY2F0KFtwcmVmaXgsIG1lc3NhZ2VdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL2hhc2hNZXNzYWdlLmpzCiAgZnVuY3Rpb24gaGFzaE1lc3NhZ2UobWVzc2FnZSwgdG9fKSB7CiAgICByZXR1cm4ga2VjY2FrMjU2KHRvUHJlZml4ZWRNZXNzYWdlKG1lc3NhZ2UpLCB0b18pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcmVjb3Zlck1lc3NhZ2VBZGRyZXNzLmpzCiAgYXN5bmMgZnVuY3Rpb24gcmVjb3Zlck1lc3NhZ2VBZGRyZXNzKHsgbWVzc2FnZSwgc2lnbmF0dXJlIH0pIHsKICAgIHJldHVybiByZWNvdmVyQWRkcmVzcyh7IGhhc2g6IGhhc2hNZXNzYWdlKG1lc3NhZ2UpLCBzaWduYXR1cmUgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3NpZ25hdHVyZS9yZWNvdmVyVHlwZWREYXRhQWRkcmVzcy5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJUeXBlZERhdGFBZGRyZXNzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgZG9tYWluLCBtZXNzYWdlLCBwcmltYXJ5VHlwZSwgc2lnbmF0dXJlLCB0eXBlcyB9ID0gcGFyYW1ldGVyczsKICAgIHJldHVybiByZWNvdmVyQWRkcmVzcyh7CiAgICAgIGhhc2g6IGhhc2hUeXBlZERhdGEoewogICAgICAgIGRvbWFpbiwKICAgICAgICBtZXNzYWdlLAogICAgICAgIHByaW1hcnlUeXBlLAogICAgICAgIHR5cGVzCiAgICAgIH0pLAogICAgICBzaWduYXR1cmUKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvdmVyaWZ5SGFzaC5qcwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzRXF1YWwoKTsKICBhc3luYyBmdW5jdGlvbiB2ZXJpZnlIYXNoKHsgYWRkcmVzcywgaGFzaDogaGFzaDMsIHNpZ25hdHVyZSB9KSB7CiAgICByZXR1cm4gaXNBZGRyZXNzRXF1YWwoZ2V0QWRkcmVzcyhhZGRyZXNzKSwgYXdhaXQgcmVjb3ZlckFkZHJlc3MoeyBoYXNoOiBoYXNoMywgc2lnbmF0dXJlIH0pKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3ZlcmlmeU1lc3NhZ2UuanMKICBpbml0X2dldEFkZHJlc3MoKTsKICBpbml0X2lzQWRkcmVzc0VxdWFsKCk7CiAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5TWVzc2FnZSh7IGFkZHJlc3MsIG1lc3NhZ2UsIHNpZ25hdHVyZSB9KSB7CiAgICByZXR1cm4gaXNBZGRyZXNzRXF1YWwoZ2V0QWRkcmVzcyhhZGRyZXNzKSwgYXdhaXQgcmVjb3Zlck1lc3NhZ2VBZGRyZXNzKHsgbWVzc2FnZSwgc2lnbmF0dXJlIH0pKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3ZlcmlmeVR5cGVkRGF0YS5qcwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzRXF1YWwoKTsKICBhc3luYyBmdW5jdGlvbiB2ZXJpZnlUeXBlZERhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhZGRyZXNzLCBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCBzaWduYXR1cmUsIHR5cGVzIH0gPSBwYXJhbWV0ZXJzOwogICAgcmV0dXJuIGlzQWRkcmVzc0VxdWFsKGdldEFkZHJlc3MoYWRkcmVzcyksIGF3YWl0IHJlY292ZXJUeXBlZERhdGFBZGRyZXNzKHsKICAgICAgZG9tYWluLAogICAgICBtZXNzYWdlLAogICAgICBwcmltYXJ5VHlwZSwKICAgICAgc2lnbmF0dXJlLAogICAgICB0eXBlcwogICAgfSkpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcGFyc2VFcmM2NDkyU2lnbmF0dXJlLmpzCiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2J5dGVzLmpzCiAgdmFyIGVyYzY0OTJNYWdpY0J5dGVzID0gIjB4NjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MiI7CiAgdmFyIHplcm9IYXNoID0gIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL2lzRXJjNjQ5MlNpZ25hdHVyZS5qcwogIGluaXRfc2xpY2UoKTsKICBmdW5jdGlvbiBpc0VyYzY0OTJTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gc2xpY2VIZXgoc2lnbmF0dXJlLCAtMzIpID09PSBlcmM2NDkyTWFnaWNCeXRlczsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3BhcnNlRXJjNjQ5MlNpZ25hdHVyZS5qcwogIGZ1bmN0aW9uIHBhcnNlRXJjNjQ5MlNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIGlmICghaXNFcmM2NDkyU2lnbmF0dXJlKHNpZ25hdHVyZSkpCiAgICAgIHJldHVybiB7IHNpZ25hdHVyZSB9OwogICAgY29uc3QgW2FkZHJlc3MsIGRhdGEsIHNpZ25hdHVyZV9dID0gZGVjb2RlQWJpUGFyYW1ldGVycyhbeyB0eXBlOiAiYWRkcmVzcyIgfSwgeyB0eXBlOiAiYnl0ZXMiIH0sIHsgdHlwZTogImJ5dGVzIiB9XSwgc2lnbmF0dXJlKTsKICAgIHJldHVybiB7IGFkZHJlc3MsIGRhdGEsIHNpZ25hdHVyZTogc2lnbmF0dXJlXyB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZS5qcwogIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogIGluaXRfY29uY2F0KCk7CiAgaW5pdF90b0J5dGVzKCk7CiAgZnVuY3Rpb24gc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGRhdGEsIHNpZ25hdHVyZSwgdG8gPSAiaGV4IiB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZV8gPSBjb25jYXRIZXgoWwogICAgICBlbmNvZGVBYmlQYXJhbWV0ZXJzKFt7IHR5cGU6ICJhZGRyZXNzIiB9LCB7IHR5cGU6ICJieXRlcyIgfSwgeyB0eXBlOiAiYnl0ZXMiIH1dLCBbYWRkcmVzcywgZGF0YSwgc2lnbmF0dXJlXSksCiAgICAgIGVyYzY0OTJNYWdpY0J5dGVzCiAgICBdKTsKICAgIGlmICh0byA9PT0gImhleCIpCiAgICAgIHJldHVybiBzaWduYXR1cmVfOwogICAgcmV0dXJuIGhleFRvQnl0ZXMoc2lnbmF0dXJlXyk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL2dldFNlcmlhbGl6ZWRUcmFuc2FjdGlvblR5cGUuanMKICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgaW5pdF9zbGljZSgpOwogIGluaXRfZnJvbUhleCgpOwogIGZ1bmN0aW9uIGdldFNlcmlhbGl6ZWRUcmFuc2FjdGlvblR5cGUoc2VyaWFsaXplZFRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCBzZXJpYWxpemVkVHlwZSA9IHNsaWNlSGV4KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwgMCwgMSk7CiAgICBpZiAoc2VyaWFsaXplZFR5cGUgPT09ICIweDA0IikKICAgICAgcmV0dXJuICJlaXA3NzAyIjsKICAgIGlmIChzZXJpYWxpemVkVHlwZSA9PT0gIjB4MDMiKQogICAgICByZXR1cm4gImVpcDQ4NDQiOwogICAgaWYgKHNlcmlhbGl6ZWRUeXBlID09PSAiMHgwMiIpCiAgICAgIHJldHVybiAiZWlwMTU1OSI7CiAgICBpZiAoc2VyaWFsaXplZFR5cGUgPT09ICIweDAxIikKICAgICAgcmV0dXJuICJlaXAyOTMwIjsKICAgIGlmIChzZXJpYWxpemVkVHlwZSAhPT0gIjB4IiAmJiBoZXhUb051bWJlcihzZXJpYWxpemVkVHlwZSkgPj0gMTkyKQogICAgICByZXR1cm4gImxlZ2FjeSI7CiAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvblR5cGVFcnJvcih7IHNlcmlhbGl6ZWRUeXBlIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9hc3NlcnRUcmFuc2FjdGlvbi5qcwogIGluaXRfYWRkcmVzcygpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY2hhaW4oKTsKICBpbml0X25vZGUoKTsKICBpbml0X2lzQWRkcmVzcygpOwogIGluaXRfc2l6ZSgpOwogIGluaXRfc2xpY2UoKTsKICBpbml0X2Zyb21IZXgoKTsKICBmdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkVJUDc3MDIodHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHsgYXV0aG9yaXphdGlvbkxpc3QgfSA9IHRyYW5zYWN0aW9uOwogICAgaWYgKGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICAgIGZvciAoY29uc3QgYXV0aG9yaXphdGlvbiBvZiBhdXRob3JpemF0aW9uTGlzdCkgewogICAgICAgIGNvbnN0IHsgY29udHJhY3RBZGRyZXNzLCBjaGFpbklkIH0gPSBhdXRob3JpemF0aW9uOwogICAgICAgIGlmICghaXNBZGRyZXNzKGNvbnRyYWN0QWRkcmVzcykpCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IGNvbnRyYWN0QWRkcmVzcyB9KTsKICAgICAgICBpZiAoY2hhaW5JZCA8PSAwKQogICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRDaGFpbklkRXJyb3IoeyBjaGFpbklkIH0pOwogICAgICB9CiAgICB9CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDE1NTkodHJhbnNhY3Rpb24pOwogIH0KICBmdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkVJUDQ4NDQodHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHsgYmxvYlZlcnNpb25lZEhhc2hlcyB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoYmxvYlZlcnNpb25lZEhhc2hlcykgewogICAgICBpZiAoYmxvYlZlcnNpb25lZEhhc2hlcy5sZW5ndGggPT09IDApCiAgICAgICAgdGhyb3cgbmV3IEVtcHR5QmxvYkVycm9yKCk7CiAgICAgIGZvciAoY29uc3QgaGFzaDMgb2YgYmxvYlZlcnNpb25lZEhhc2hlcykgewogICAgICAgIGNvbnN0IHNpemVfID0gc2l6ZShoYXNoMyk7CiAgICAgICAgY29uc3QgdmVyc2lvbjMgPSBoZXhUb051bWJlcihzbGljZShoYXNoMywgMCwgMSkpOwogICAgICAgIGlmIChzaXplXyAhPT0gMzIpCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFZlcnNpb25lZEhhc2hTaXplRXJyb3IoeyBoYXNoOiBoYXNoMywgc2l6ZTogc2l6ZV8gfSk7CiAgICAgICAgaWYgKHZlcnNpb24zICE9PSB2ZXJzaW9uZWRIYXNoVmVyc2lvbkt6ZykKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkVmVyc2lvbmVkSGFzaFZlcnNpb25FcnJvcih7CiAgICAgICAgICAgIGhhc2g6IGhhc2gzLAogICAgICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uMwogICAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQMTU1OSh0cmFuc2FjdGlvbik7CiAgfQogIGZ1bmN0aW9uIGFzc2VydFRyYW5zYWN0aW9uRUlQMTU1OSh0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbWF4RmVlUGVyR2FzLCB0byB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoY2hhaW5JZCA8PSAwKQogICAgICB0aHJvdyBuZXcgSW52YWxpZENoYWluSWRFcnJvcih7IGNoYWluSWQgfSk7CiAgICBpZiAodG8gJiYgIWlzQWRkcmVzcyh0bykpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogdG8gfSk7CiAgICBpZiAobWF4RmVlUGVyR2FzICYmIG1heEZlZVBlckdhcyA+IDJuICoqIDI1Nm4gLSAxbikKICAgICAgdGhyb3cgbmV3IEZlZUNhcFRvb0hpZ2hFcnJvcih7IG1heEZlZVBlckdhcyB9KTsKICAgIGlmIChtYXhQcmlvcml0eUZlZVBlckdhcyAmJiBtYXhGZWVQZXJHYXMgJiYgbWF4UHJpb3JpdHlGZWVQZXJHYXMgPiBtYXhGZWVQZXJHYXMpCiAgICAgIHRocm93IG5ldyBUaXBBYm92ZUZlZUNhcEVycm9yKHsgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcyB9KTsKICB9CiAgZnVuY3Rpb24gYXNzZXJ0VHJhbnNhY3Rpb25FSVAyOTMwKHRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCB7IGNoYWluSWQsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyR2FzLCB0byB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoY2hhaW5JZCA8PSAwKQogICAgICB0aHJvdyBuZXcgSW52YWxpZENoYWluSWRFcnJvcih7IGNoYWluSWQgfSk7CiAgICBpZiAodG8gJiYgIWlzQWRkcmVzcyh0bykpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogdG8gfSk7CiAgICBpZiAobWF4UHJpb3JpdHlGZWVQZXJHYXMgfHwgbWF4RmVlUGVyR2FzKQogICAgICB0aHJvdyBuZXcgQmFzZUVycm9yMigiYG1heEZlZVBlckdhc2AvYG1heFByaW9yaXR5RmVlUGVyR2FzYCBpcyBub3QgYSB2YWxpZCBFSVAtMjkzMCBUcmFuc2FjdGlvbiBhdHRyaWJ1dGUuIik7CiAgICBpZiAoZ2FzUHJpY2UgJiYgZ2FzUHJpY2UgPiAybiAqKiAyNTZuIC0gMW4pCiAgICAgIHRocm93IG5ldyBGZWVDYXBUb29IaWdoRXJyb3IoeyBtYXhGZWVQZXJHYXM6IGdhc1ByaWNlIH0pOwogIH0KICBmdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSh0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBtYXhQcmlvcml0eUZlZVBlckdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckdhcywgdG8gfSA9IHRyYW5zYWN0aW9uOwogICAgaWYgKHRvICYmICFpc0FkZHJlc3ModG8pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IHRvIH0pOwogICAgaWYgKHR5cGVvZiBjaGFpbklkICE9PSAidW5kZWZpbmVkIiAmJiBjaGFpbklkIDw9IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhaW5JZEVycm9yKHsgY2hhaW5JZCB9KTsKICAgIGlmIChtYXhQcmlvcml0eUZlZVBlckdhcyB8fCBtYXhGZWVQZXJHYXMpCiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgbWF4RmVlUGVyR2FzYC9gbWF4UHJpb3JpdHlGZWVQZXJHYXNgIGlzIG5vdCBhIHZhbGlkIExlZ2FjeSBUcmFuc2FjdGlvbiBhdHRyaWJ1dGUuIik7CiAgICBpZiAoZ2FzUHJpY2UgJiYgZ2FzUHJpY2UgPiAybiAqKiAyNTZuIC0gMW4pCiAgICAgIHRocm93IG5ldyBGZWVDYXBUb29IaWdoRXJyb3IoeyBtYXhGZWVQZXJHYXM6IGdhc1ByaWNlIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9wYXJzZVRyYW5zYWN0aW9uLmpzCiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF90cmFuc2FjdGlvbigpOwogIGluaXRfaXNBZGRyZXNzKCk7CiAgaW5pdF9pc0hleCgpOwogIGluaXRfcGFkKCk7CiAgaW5pdF90cmltKCk7CiAgaW5pdF9mcm9tSGV4KCk7CiAgZnVuY3Rpb24gcGFyc2VUcmFuc2FjdGlvbihzZXJpYWxpemVkVHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHR5cGUgPSBnZXRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgICBpZiAodHlwZSA9PT0gImVpcDE1NTkiKQogICAgICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbkVJUDE1NTkoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgIGlmICh0eXBlID09PSAiZWlwMjkzMCIpCiAgICAgIHJldHVybiBwYXJzZVRyYW5zYWN0aW9uRUlQMjkzMChzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgaWYgKHR5cGUgPT09ICJlaXA0ODQ0IikKICAgICAgcmV0dXJuIHBhcnNlVHJhbnNhY3Rpb25FSVA0ODQ0KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgICBpZiAodHlwZSA9PT0gImVpcDc3MDIiKQogICAgICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbkVJUDc3MDIoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgIHJldHVybiBwYXJzZVRyYW5zYWN0aW9uTGVnYWN5KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25FSVA3NzAyKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgY29uc3QgdHJhbnNhY3Rpb25BcnJheSA9IHRvVHJhbnNhY3Rpb25BcnJheShzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3QgW2NoYWluSWQsIG5vbmNlLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbWF4RmVlUGVyR2FzLCBnYXMsIHRvLCB2YWx1ZSwgZGF0YSwgYWNjZXNzTGlzdCwgYXV0aG9yaXphdGlvbkxpc3QsIHYsIHIsIHNdID0gdHJhbnNhY3Rpb25BcnJheTsKICAgIGlmICh0cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCAhPT0gMTAgJiYgdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggIT09IDEzKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yKHsKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBjaGFpbklkLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhcywKICAgICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICAgIGdhcywKICAgICAgICAgIHRvLAogICAgICAgICAgdmFsdWUsCiAgICAgICAgICBkYXRhLAogICAgICAgICAgYWNjZXNzTGlzdCwKICAgICAgICAgIGF1dGhvcml6YXRpb25MaXN0LAogICAgICAgICAgLi4udHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPiA5ID8gewogICAgICAgICAgICB2LAogICAgICAgICAgICByLAogICAgICAgICAgICBzCiAgICAgICAgICB9IDoge30KICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0eXBlOiAiZWlwNzcwMiIKICAgICAgfSk7CiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHsKICAgICAgY2hhaW5JZDogaGV4VG9OdW1iZXIoY2hhaW5JZCksCiAgICAgIHR5cGU6ICJlaXA3NzAyIgogICAgfTsKICAgIGlmIChpc0hleCh0bykgJiYgdG8gIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnRvID0gdG87CiAgICBpZiAoaXNIZXgoZ2FzKSAmJiBnYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhcyA9IGhleFRvQmlnSW50KGdhcyk7CiAgICBpZiAoaXNIZXgoZGF0YSkgJiYgZGF0YSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZGF0YSA9IGRhdGE7CiAgICBpZiAoaXNIZXgobm9uY2UpICYmIG5vbmNlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5ub25jZSA9IGhleFRvTnVtYmVyKG5vbmNlKTsKICAgIGlmIChpc0hleCh2YWx1ZSkgJiYgdmFsdWUgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnZhbHVlID0gaGV4VG9CaWdJbnQodmFsdWUpOwogICAgaWYgKGlzSGV4KG1heEZlZVBlckdhcykgJiYgbWF4RmVlUGVyR2FzICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5tYXhGZWVQZXJHYXMgPSBoZXhUb0JpZ0ludChtYXhGZWVQZXJHYXMpOwogICAgaWYgKGlzSGV4KG1heFByaW9yaXR5RmVlUGVyR2FzKSAmJiBtYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMgPSBoZXhUb0JpZ0ludChtYXhQcmlvcml0eUZlZVBlckdhcyk7CiAgICBpZiAoYWNjZXNzTGlzdC5sZW5ndGggIT09IDAgJiYgYWNjZXNzTGlzdCAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uYWNjZXNzTGlzdCA9IHBhcnNlQWNjZXNzTGlzdChhY2Nlc3NMaXN0KTsKICAgIGlmIChhdXRob3JpemF0aW9uTGlzdC5sZW5ndGggIT09IDAgJiYgYXV0aG9yaXphdGlvbkxpc3QgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmF1dGhvcml6YXRpb25MaXN0ID0gcGFyc2VBdXRob3JpemF0aW9uTGlzdChhdXRob3JpemF0aW9uTGlzdCk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDc3MDIodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDEzID8gcGFyc2VFSVAxNTVTaWduYXR1cmUodHJhbnNhY3Rpb25BcnJheSkgOiB2b2lkIDA7CiAgICByZXR1cm4geyAuLi5zaWduYXR1cmUsIC4uLnRyYW5zYWN0aW9uIH07CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25FSVA0ODQ0KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgY29uc3QgdHJhbnNhY3Rpb25PcldyYXBwZXJBcnJheSA9IHRvVHJhbnNhY3Rpb25BcnJheShzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3QgaGFzTmV0d29ya1dyYXBwZXIgPSB0cmFuc2FjdGlvbk9yV3JhcHBlckFycmF5Lmxlbmd0aCA9PT0gNDsKICAgIGNvbnN0IHRyYW5zYWN0aW9uQXJyYXkgPSBoYXNOZXR3b3JrV3JhcHBlciA/IHRyYW5zYWN0aW9uT3JXcmFwcGVyQXJyYXlbMF0gOiB0cmFuc2FjdGlvbk9yV3JhcHBlckFycmF5OwogICAgY29uc3Qgd3JhcHBlckFycmF5ID0gaGFzTmV0d29ya1dyYXBwZXIgPyB0cmFuc2FjdGlvbk9yV3JhcHBlckFycmF5LnNsaWNlKDEpIDogW107CiAgICBjb25zdCBbY2hhaW5JZCwgbm9uY2UsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBtYXhGZWVQZXJHYXMsIGdhcywgdG8sIHZhbHVlLCBkYXRhLCBhY2Nlc3NMaXN0LCBtYXhGZWVQZXJCbG9iR2FzLCBibG9iVmVyc2lvbmVkSGFzaGVzLCB2LCByLCBzXSA9IHRyYW5zYWN0aW9uQXJyYXk7CiAgICBjb25zdCBbYmxvYnMsIGNvbW1pdG1lbnRzLCBwcm9vZnNdID0gd3JhcHBlckFycmF5OwogICAgaWYgKCEodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDExIHx8IHRyYW5zYWN0aW9uQXJyYXkubGVuZ3RoID09PSAxNCkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uRXJyb3IoewogICAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICAgIGNoYWluSWQsCiAgICAgICAgICBub25jZSwKICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzLAogICAgICAgICAgbWF4RmVlUGVyR2FzLAogICAgICAgICAgZ2FzLAogICAgICAgICAgdG8sCiAgICAgICAgICB2YWx1ZSwKICAgICAgICAgIGRhdGEsCiAgICAgICAgICBhY2Nlc3NMaXN0LAogICAgICAgICAgLi4udHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPiA5ID8gewogICAgICAgICAgICB2LAogICAgICAgICAgICByLAogICAgICAgICAgICBzCiAgICAgICAgICB9IDoge30KICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0eXBlOiAiZWlwNDg0NCIKICAgICAgfSk7CiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHsKICAgICAgYmxvYlZlcnNpb25lZEhhc2hlcywKICAgICAgY2hhaW5JZDogaGV4VG9OdW1iZXIoY2hhaW5JZCksCiAgICAgIHR5cGU6ICJlaXA0ODQ0IgogICAgfTsKICAgIGlmIChpc0hleCh0bykgJiYgdG8gIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnRvID0gdG87CiAgICBpZiAoaXNIZXgoZ2FzKSAmJiBnYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhcyA9IGhleFRvQmlnSW50KGdhcyk7CiAgICBpZiAoaXNIZXgoZGF0YSkgJiYgZGF0YSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZGF0YSA9IGRhdGE7CiAgICBpZiAoaXNIZXgobm9uY2UpICYmIG5vbmNlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5ub25jZSA9IGhleFRvTnVtYmVyKG5vbmNlKTsKICAgIGlmIChpc0hleCh2YWx1ZSkgJiYgdmFsdWUgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnZhbHVlID0gaGV4VG9CaWdJbnQodmFsdWUpOwogICAgaWYgKGlzSGV4KG1heEZlZVBlckJsb2JHYXMpICYmIG1heEZlZVBlckJsb2JHYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm1heEZlZVBlckJsb2JHYXMgPSBoZXhUb0JpZ0ludChtYXhGZWVQZXJCbG9iR2FzKTsKICAgIGlmIChpc0hleChtYXhGZWVQZXJHYXMpICYmIG1heEZlZVBlckdhcyAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24ubWF4RmVlUGVyR2FzID0gaGV4VG9CaWdJbnQobWF4RmVlUGVyR2FzKTsKICAgIGlmIChpc0hleChtYXhQcmlvcml0eUZlZVBlckdhcykgJiYgbWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm1heFByaW9yaXR5RmVlUGVyR2FzID0gaGV4VG9CaWdJbnQobWF4UHJpb3JpdHlGZWVQZXJHYXMpOwogICAgaWYgKGFjY2Vzc0xpc3QubGVuZ3RoICE9PSAwICYmIGFjY2Vzc0xpc3QgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmFjY2Vzc0xpc3QgPSBwYXJzZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBpZiAoYmxvYnMgJiYgY29tbWl0bWVudHMgJiYgcHJvb2ZzKQogICAgICB0cmFuc2FjdGlvbi5zaWRlY2FycyA9IHRvQmxvYlNpZGVjYXJzKHsKICAgICAgICBibG9icywKICAgICAgICBjb21taXRtZW50cywKICAgICAgICBwcm9vZnMKICAgICAgfSk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDQ4NDQodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDE0ID8gcGFyc2VFSVAxNTVTaWduYXR1cmUodHJhbnNhY3Rpb25BcnJheSkgOiB2b2lkIDA7CiAgICByZXR1cm4geyAuLi5zaWduYXR1cmUsIC4uLnRyYW5zYWN0aW9uIH07CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25FSVAxNTU5KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgY29uc3QgdHJhbnNhY3Rpb25BcnJheSA9IHRvVHJhbnNhY3Rpb25BcnJheShzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3QgW2NoYWluSWQsIG5vbmNlLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbWF4RmVlUGVyR2FzLCBnYXMsIHRvLCB2YWx1ZSwgZGF0YSwgYWNjZXNzTGlzdCwgdiwgciwgc10gPSB0cmFuc2FjdGlvbkFycmF5OwogICAgaWYgKCEodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDkgfHwgdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDEyKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25FcnJvcih7CiAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgY2hhaW5JZCwKICAgICAgICAgIG5vbmNlLAogICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXMsCiAgICAgICAgICBtYXhGZWVQZXJHYXMsCiAgICAgICAgICBnYXMsCiAgICAgICAgICB0bywKICAgICAgICAgIHZhbHVlLAogICAgICAgICAgZGF0YSwKICAgICAgICAgIGFjY2Vzc0xpc3QsCiAgICAgICAgICAuLi50cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA+IDkgPyB7CiAgICAgICAgICAgIHYsCiAgICAgICAgICAgIHIsCiAgICAgICAgICAgIHMKICAgICAgICAgIH0gOiB7fQogICAgICAgIH0sCiAgICAgICAgc2VyaWFsaXplZFRyYW5zYWN0aW9uLAogICAgICAgIHR5cGU6ICJlaXAxNTU5IgogICAgICB9KTsKICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gewogICAgICBjaGFpbklkOiBoZXhUb051bWJlcihjaGFpbklkKSwKICAgICAgdHlwZTogImVpcDE1NTkiCiAgICB9OwogICAgaWYgKGlzSGV4KHRvKSAmJiB0byAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24udG8gPSB0bzsKICAgIGlmIChpc0hleChnYXMpICYmIGdhcyAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZ2FzID0gaGV4VG9CaWdJbnQoZ2FzKTsKICAgIGlmIChpc0hleChkYXRhKSAmJiBkYXRhICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5kYXRhID0gZGF0YTsKICAgIGlmIChpc0hleChub25jZSkgJiYgbm9uY2UgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm5vbmNlID0gaGV4VG9OdW1iZXIobm9uY2UpOwogICAgaWYgKGlzSGV4KHZhbHVlKSAmJiB2YWx1ZSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24udmFsdWUgPSBoZXhUb0JpZ0ludCh2YWx1ZSk7CiAgICBpZiAoaXNIZXgobWF4RmVlUGVyR2FzKSAmJiBtYXhGZWVQZXJHYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm1heEZlZVBlckdhcyA9IGhleFRvQmlnSW50KG1heEZlZVBlckdhcyk7CiAgICBpZiAoaXNIZXgobWF4UHJpb3JpdHlGZWVQZXJHYXMpICYmIG1heFByaW9yaXR5RmVlUGVyR2FzICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5tYXhQcmlvcml0eUZlZVBlckdhcyA9IGhleFRvQmlnSW50KG1heFByaW9yaXR5RmVlUGVyR2FzKTsKICAgIGlmIChhY2Nlc3NMaXN0Lmxlbmd0aCAhPT0gMCAmJiBhY2Nlc3NMaXN0ICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5hY2Nlc3NMaXN0ID0gcGFyc2VBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpOwogICAgYXNzZXJ0VHJhbnNhY3Rpb25FSVAxNTU5KHRyYW5zYWN0aW9uKTsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRyYW5zYWN0aW9uQXJyYXkubGVuZ3RoID09PSAxMiA/IHBhcnNlRUlQMTU1U2lnbmF0dXJlKHRyYW5zYWN0aW9uQXJyYXkpIDogdm9pZCAwOwogICAgcmV0dXJuIHsgLi4uc2lnbmF0dXJlLCAuLi50cmFuc2FjdGlvbiB9OwogIH0KICBmdW5jdGlvbiBwYXJzZVRyYW5zYWN0aW9uRUlQMjkzMChzZXJpYWxpemVkVHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHRyYW5zYWN0aW9uQXJyYXkgPSB0b1RyYW5zYWN0aW9uQXJyYXkoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgIGNvbnN0IFtjaGFpbklkLCBub25jZSwgZ2FzUHJpY2UsIGdhcywgdG8sIHZhbHVlLCBkYXRhLCBhY2Nlc3NMaXN0LCB2LCByLCBzXSA9IHRyYW5zYWN0aW9uQXJyYXk7CiAgICBpZiAoISh0cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA9PT0gOCB8fCB0cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA9PT0gMTEpKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yKHsKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBjaGFpbklkLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICBnYXNQcmljZSwKICAgICAgICAgIGdhcywKICAgICAgICAgIHRvLAogICAgICAgICAgdmFsdWUsCiAgICAgICAgICBkYXRhLAogICAgICAgICAgYWNjZXNzTGlzdCwKICAgICAgICAgIC4uLnRyYW5zYWN0aW9uQXJyYXkubGVuZ3RoID4gOCA/IHsKICAgICAgICAgICAgdiwKICAgICAgICAgICAgciwKICAgICAgICAgICAgcwogICAgICAgICAgfSA6IHt9CiAgICAgICAgfSwKICAgICAgICBzZXJpYWxpemVkVHJhbnNhY3Rpb24sCiAgICAgICAgdHlwZTogImVpcDI5MzAiCiAgICAgIH0pOwogICAgY29uc3QgdHJhbnNhY3Rpb24gPSB7CiAgICAgIGNoYWluSWQ6IGhleFRvTnVtYmVyKGNoYWluSWQpLAogICAgICB0eXBlOiAiZWlwMjkzMCIKICAgIH07CiAgICBpZiAoaXNIZXgodG8pICYmIHRvICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi50byA9IHRvOwogICAgaWYgKGlzSGV4KGdhcykgJiYgZ2FzICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5nYXMgPSBoZXhUb0JpZ0ludChnYXMpOwogICAgaWYgKGlzSGV4KGRhdGEpICYmIGRhdGEgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmRhdGEgPSBkYXRhOwogICAgaWYgKGlzSGV4KG5vbmNlKSAmJiBub25jZSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24ubm9uY2UgPSBoZXhUb051bWJlcihub25jZSk7CiAgICBpZiAoaXNIZXgodmFsdWUpICYmIHZhbHVlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi52YWx1ZSA9IGhleFRvQmlnSW50KHZhbHVlKTsKICAgIGlmIChpc0hleChnYXNQcmljZSkgJiYgZ2FzUHJpY2UgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhc1ByaWNlID0gaGV4VG9CaWdJbnQoZ2FzUHJpY2UpOwogICAgaWYgKGFjY2Vzc0xpc3QubGVuZ3RoICE9PSAwICYmIGFjY2Vzc0xpc3QgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmFjY2Vzc0xpc3QgPSBwYXJzZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDI5MzAodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDExID8gcGFyc2VFSVAxNTVTaWduYXR1cmUodHJhbnNhY3Rpb25BcnJheSkgOiB2b2lkIDA7CiAgICByZXR1cm4geyAuLi5zaWduYXR1cmUsIC4uLnRyYW5zYWN0aW9uIH07CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25MZWdhY3koc2VyaWFsaXplZFRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCB0cmFuc2FjdGlvbkFycmF5ID0gZnJvbVJscChzZXJpYWxpemVkVHJhbnNhY3Rpb24sICJoZXgiKTsKICAgIGNvbnN0IFtub25jZSwgZ2FzUHJpY2UsIGdhcywgdG8sIHZhbHVlLCBkYXRhLCBjaGFpbklkT3JWXywgciwgc10gPSB0cmFuc2FjdGlvbkFycmF5OwogICAgaWYgKCEodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDYgfHwgdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDkpKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yKHsKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBub25jZSwKICAgICAgICAgIGdhc1ByaWNlLAogICAgICAgICAgZ2FzLAogICAgICAgICAgdG8sCiAgICAgICAgICB2YWx1ZSwKICAgICAgICAgIGRhdGEsCiAgICAgICAgICAuLi50cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA+IDYgPyB7CiAgICAgICAgICAgIHY6IGNoYWluSWRPclZfLAogICAgICAgICAgICByLAogICAgICAgICAgICBzCiAgICAgICAgICB9IDoge30KICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0eXBlOiAibGVnYWN5IgogICAgICB9KTsKICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gewogICAgICB0eXBlOiAibGVnYWN5IgogICAgfTsKICAgIGlmIChpc0hleCh0bykgJiYgdG8gIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnRvID0gdG87CiAgICBpZiAoaXNIZXgoZ2FzKSAmJiBnYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhcyA9IGhleFRvQmlnSW50KGdhcyk7CiAgICBpZiAoaXNIZXgoZGF0YSkgJiYgZGF0YSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZGF0YSA9IGRhdGE7CiAgICBpZiAoaXNIZXgobm9uY2UpICYmIG5vbmNlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5ub25jZSA9IGhleFRvTnVtYmVyKG5vbmNlKTsKICAgIGlmIChpc0hleCh2YWx1ZSkgJiYgdmFsdWUgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnZhbHVlID0gaGV4VG9CaWdJbnQodmFsdWUpOwogICAgaWYgKGlzSGV4KGdhc1ByaWNlKSAmJiBnYXNQcmljZSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZ2FzUHJpY2UgPSBoZXhUb0JpZ0ludChnYXNQcmljZSk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSh0cmFuc2FjdGlvbik7CiAgICBpZiAodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDYpCiAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgIGNvbnN0IGNoYWluSWRPclYgPSBpc0hleChjaGFpbklkT3JWXykgJiYgY2hhaW5JZE9yVl8gIT09ICIweCIgPyBoZXhUb0JpZ0ludChjaGFpbklkT3JWXykgOiAwbjsKICAgIGlmIChzID09PSAiMHgiICYmIHIgPT09ICIweCIpIHsKICAgICAgaWYgKGNoYWluSWRPclYgPiAwKQogICAgICAgIHRyYW5zYWN0aW9uLmNoYWluSWQgPSBOdW1iZXIoY2hhaW5JZE9yVik7CiAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgIH0KICAgIGNvbnN0IHYgPSBjaGFpbklkT3JWOwogICAgY29uc3QgY2hhaW5JZCA9IE51bWJlcigodiAtIDM1bikgLyAybik7CiAgICBpZiAoY2hhaW5JZCA+IDApCiAgICAgIHRyYW5zYWN0aW9uLmNoYWluSWQgPSBjaGFpbklkOwogICAgZWxzZSBpZiAodiAhPT0gMjduICYmIHYgIT09IDI4bikKICAgICAgdGhyb3cgbmV3IEludmFsaWRMZWdhY3lWRXJyb3IoeyB2IH0pOwogICAgdHJhbnNhY3Rpb24udiA9IHY7CiAgICB0cmFuc2FjdGlvbi5zID0gczsKICAgIHRyYW5zYWN0aW9uLnIgPSByOwogICAgdHJhbnNhY3Rpb24ueVBhcml0eSA9IHYgJSAybiA9PT0gMG4gPyAxIDogMDsKICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICB9CiAgZnVuY3Rpb24gdG9UcmFuc2FjdGlvbkFycmF5KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgcmV0dXJuIGZyb21SbHAoYDB4JHtzZXJpYWxpemVkVHJhbnNhY3Rpb24uc2xpY2UoNCl9YCwgImhleCIpOwogIH0KICBmdW5jdGlvbiBwYXJzZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdF8pIHsKICAgIGNvbnN0IGFjY2Vzc0xpc3QgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWNjZXNzTGlzdF8ubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgW2FkZHJlc3MsIHN0b3JhZ2VLZXlzXSA9IGFjY2Vzc0xpc3RfW2ldOwogICAgICBpZiAoIWlzQWRkcmVzcyhhZGRyZXNzLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzIH0pOwogICAgICBhY2Nlc3NMaXN0LnB1c2goewogICAgICAgIGFkZHJlc3MsCiAgICAgICAgc3RvcmFnZUtleXM6IHN0b3JhZ2VLZXlzLm1hcCgoa2V5KSA9PiBpc0hhc2goa2V5KSA/IGtleSA6IHRyaW0oa2V5KSkKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gYWNjZXNzTGlzdDsKICB9CiAgZnVuY3Rpb24gcGFyc2VBdXRob3JpemF0aW9uTGlzdChzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3QpIHsKICAgIGNvbnN0IGF1dGhvcml6YXRpb25MaXN0ID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcmlhbGl6ZWRBdXRob3JpemF0aW9uTGlzdC5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBbY2hhaW5JZCwgY29udHJhY3RBZGRyZXNzLCBub25jZSwgeVBhcml0eSwgciwgc10gPSBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3RbaV07CiAgICAgIGF1dGhvcml6YXRpb25MaXN0LnB1c2goewogICAgICAgIGNoYWluSWQ6IGhleFRvTnVtYmVyKGNoYWluSWQpLAogICAgICAgIGNvbnRyYWN0QWRkcmVzcywKICAgICAgICBub25jZTogaGV4VG9OdW1iZXIobm9uY2UpLAogICAgICAgIC4uLnBhcnNlRUlQMTU1U2lnbmF0dXJlKFt5UGFyaXR5LCByLCBzXSkKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gYXV0aG9yaXphdGlvbkxpc3Q7CiAgfQogIGZ1bmN0aW9uIHBhcnNlRUlQMTU1U2lnbmF0dXJlKHRyYW5zYWN0aW9uQXJyYXkpIHsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRyYW5zYWN0aW9uQXJyYXkuc2xpY2UoLTMpOwogICAgY29uc3QgdiA9IHNpZ25hdHVyZVswXSA9PT0gIjB4IiB8fCBoZXhUb0JpZ0ludChzaWduYXR1cmVbMF0pID09PSAwbiA/IDI3biA6IDI4bjsKICAgIHJldHVybiB7CiAgICAgIHI6IHBhZEhleChzaWduYXR1cmVbMV0sIHsgc2l6ZTogMzIgfSksCiAgICAgIHM6IHBhZEhleChzaWduYXR1cmVbMl0sIHsgc2l6ZTogMzIgfSksCiAgICAgIHYsCiAgICAgIHlQYXJpdHk6IHYgPT09IDI3biA/IDAgOiAxCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9zZXJpYWxpemVUcmFuc2FjdGlvbi5qcwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdHJpbSgpOwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9leHBlcmltZW50YWwvZWlwNzcwMi91dGlscy9zZXJpYWxpemVBdXRob3JpemF0aW9uTGlzdC5qcwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBzZXJpYWxpemVBdXRob3JpemF0aW9uTGlzdChhdXRob3JpemF0aW9uTGlzdCkgewogICAgaWYgKCFhdXRob3JpemF0aW9uTGlzdCB8fCBhdXRob3JpemF0aW9uTGlzdC5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiBbXTsKICAgIGNvbnN0IHNlcmlhbGl6ZWRBdXRob3JpemF0aW9uTGlzdCA9IFtdOwogICAgZm9yIChjb25zdCBhdXRob3JpemF0aW9uIG9mIGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICAgIGNvbnN0IHsgY29udHJhY3RBZGRyZXNzLCBjaGFpbklkLCBub25jZSwgLi4uc2lnbmF0dXJlIH0gPSBhdXRob3JpemF0aW9uOwogICAgICBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3QucHVzaChbCiAgICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgICAgY29udHJhY3RBZGRyZXNzLAogICAgICAgIHRvSGV4KG5vbmNlKSwKICAgICAgICAuLi50b1lQYXJpdHlTaWduYXR1cmVBcnJheSh7fSwgc2lnbmF0dXJlKQogICAgICBdKTsKICAgIH0KICAgIHJldHVybiBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL3NlcmlhbGl6ZUFjY2Vzc0xpc3QuanMKICBpbml0X2FkZHJlc3MoKTsKICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBmdW5jdGlvbiBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpIHsKICAgIGlmICghYWNjZXNzTGlzdCB8fCBhY2Nlc3NMaXN0Lmxlbmd0aCA9PT0gMCkKICAgICAgcmV0dXJuIFtdOwogICAgY29uc3Qgc2VyaWFsaXplZEFjY2Vzc0xpc3QgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWNjZXNzTGlzdC5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCB7IGFkZHJlc3MsIHN0b3JhZ2VLZXlzIH0gPSBhY2Nlc3NMaXN0W2ldOwogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHN0b3JhZ2VLZXlzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgaWYgKHN0b3JhZ2VLZXlzW2pdLmxlbmd0aCAtIDIgIT09IDY0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IoeyBzdG9yYWdlS2V5OiBzdG9yYWdlS2V5c1tqXSB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFpc0FkZHJlc3MoYWRkcmVzcywgeyBzdHJpY3Q6IGZhbHNlIH0pKSB7CiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzIH0pOwogICAgICB9CiAgICAgIHNlcmlhbGl6ZWRBY2Nlc3NMaXN0LnB1c2goW2FkZHJlc3MsIHN0b3JhZ2VLZXlzXSk7CiAgICB9CiAgICByZXR1cm4gc2VyaWFsaXplZEFjY2Vzc0xpc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL3NlcmlhbGl6ZVRyYW5zYWN0aW9uLmpzCiAgZnVuY3Rpb24gc2VyaWFsaXplVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgdHlwZSA9IGdldFRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvbik7CiAgICBpZiAodHlwZSA9PT0gImVpcDE1NTkiKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVAxNTU5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogICAgaWYgKHR5cGUgPT09ICJlaXAyOTMwIikKICAgICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uRUlQMjkzMCh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKTsKICAgIGlmICh0eXBlID09PSAiZWlwNDg0NCIpCiAgICAgIHJldHVybiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDQ4NDQodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSk7CiAgICBpZiAodHlwZSA9PT0gImVpcDc3MDIiKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVA3NzAyKHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uTGVnYWN5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogIH0KICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDc3MDIodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgeyBhdXRob3JpemF0aW9uTGlzdCwgY2hhaW5JZCwgZ2FzLCBub25jZSwgdG8sIHZhbHVlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBhY2Nlc3NMaXN0LCBkYXRhIH0gPSB0cmFuc2FjdGlvbjsKICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQNzcwMih0cmFuc2FjdGlvbik7CiAgICBjb25zdCBzZXJpYWxpemVkQWNjZXNzTGlzdCA9IHNlcmlhbGl6ZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBjb25zdCBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3QgPSBzZXJpYWxpemVBdXRob3JpemF0aW9uTGlzdChhdXRob3JpemF0aW9uTGlzdCk7CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4MDQiLAogICAgICB0b1JscChbCiAgICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgICAgbm9uY2UgPyB0b0hleChub25jZSkgOiAiMHgiLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzID8gdG9IZXgobWF4UHJpb3JpdHlGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgICBtYXhGZWVQZXJHYXMgPyB0b0hleChtYXhGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgICB0byA/PyAiMHgiLAogICAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgICBkYXRhID8/ICIweCIsCiAgICAgICAgc2VyaWFsaXplZEFjY2Vzc0xpc3QsCiAgICAgICAgc2VyaWFsaXplZEF1dGhvcml6YXRpb25MaXN0LAogICAgICAgIC4uLnRvWVBhcml0eVNpZ25hdHVyZUFycmF5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpCiAgICAgIF0pCiAgICBdKTsKICB9CiAgZnVuY3Rpb24gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVA0ODQ0KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpIHsKICAgIGNvbnN0IHsgY2hhaW5JZCwgZ2FzLCBub25jZSwgdG8sIHZhbHVlLCBtYXhGZWVQZXJCbG9iR2FzLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBhY2Nlc3NMaXN0LCBkYXRhIH0gPSB0cmFuc2FjdGlvbjsKICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQNDg0NCh0cmFuc2FjdGlvbik7CiAgICBsZXQgYmxvYlZlcnNpb25lZEhhc2hlcyA9IHRyYW5zYWN0aW9uLmJsb2JWZXJzaW9uZWRIYXNoZXM7CiAgICBsZXQgc2lkZWNhcnMgPSB0cmFuc2FjdGlvbi5zaWRlY2FyczsKICAgIGlmICh0cmFuc2FjdGlvbi5ibG9icyAmJiAodHlwZW9mIGJsb2JWZXJzaW9uZWRIYXNoZXMgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiBzaWRlY2FycyA9PT0gInVuZGVmaW5lZCIpKSB7CiAgICAgIGNvbnN0IGJsb2JzMiA9IHR5cGVvZiB0cmFuc2FjdGlvbi5ibG9ic1swXSA9PT0gInN0cmluZyIgPyB0cmFuc2FjdGlvbi5ibG9icyA6IHRyYW5zYWN0aW9uLmJsb2JzLm1hcCgoeCkgPT4gYnl0ZXNUb0hleCh4KSk7CiAgICAgIGNvbnN0IGt6ZyA9IHRyYW5zYWN0aW9uLmt6ZzsKICAgICAgY29uc3QgY29tbWl0bWVudHMyID0gYmxvYnNUb0NvbW1pdG1lbnRzKHsKICAgICAgICBibG9iczogYmxvYnMyLAogICAgICAgIGt6ZwogICAgICB9KTsKICAgICAgaWYgKHR5cGVvZiBibG9iVmVyc2lvbmVkSGFzaGVzID09PSAidW5kZWZpbmVkIikKICAgICAgICBibG9iVmVyc2lvbmVkSGFzaGVzID0gY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlcyh7CiAgICAgICAgICBjb21taXRtZW50czogY29tbWl0bWVudHMyCiAgICAgICAgfSk7CiAgICAgIGlmICh0eXBlb2Ygc2lkZWNhcnMgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgY29uc3QgcHJvb2ZzMiA9IGJsb2JzVG9Qcm9vZnMoeyBibG9iczogYmxvYnMyLCBjb21taXRtZW50czogY29tbWl0bWVudHMyLCBremcgfSk7CiAgICAgICAgc2lkZWNhcnMgPSB0b0Jsb2JTaWRlY2Fycyh7IGJsb2JzOiBibG9iczIsIGNvbW1pdG1lbnRzOiBjb21taXRtZW50czIsIHByb29mczogcHJvb2ZzMiB9KTsKICAgICAgfQogICAgfQogICAgY29uc3Qgc2VyaWFsaXplZEFjY2Vzc0xpc3QgPSBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpOwogICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICB0b0hleChjaGFpbklkKSwKICAgICAgbm9uY2UgPyB0b0hleChub25jZSkgOiAiMHgiLAogICAgICBtYXhQcmlvcml0eUZlZVBlckdhcyA/IHRvSGV4KG1heFByaW9yaXR5RmVlUGVyR2FzKSA6ICIweCIsCiAgICAgIG1heEZlZVBlckdhcyA/IHRvSGV4KG1heEZlZVBlckdhcykgOiAiMHgiLAogICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgdG8gPz8gIjB4IiwKICAgICAgdmFsdWUgPyB0b0hleCh2YWx1ZSkgOiAiMHgiLAogICAgICBkYXRhID8/ICIweCIsCiAgICAgIHNlcmlhbGl6ZWRBY2Nlc3NMaXN0LAogICAgICBtYXhGZWVQZXJCbG9iR2FzID8gdG9IZXgobWF4RmVlUGVyQmxvYkdhcykgOiAiMHgiLAogICAgICBibG9iVmVyc2lvbmVkSGFzaGVzID8/IFtdLAogICAgICAuLi50b1lQYXJpdHlTaWduYXR1cmVBcnJheSh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKQogICAgXTsKICAgIGNvbnN0IGJsb2JzID0gW107CiAgICBjb25zdCBjb21taXRtZW50cyA9IFtdOwogICAgY29uc3QgcHJvb2ZzID0gW107CiAgICBpZiAoc2lkZWNhcnMpCiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2lkZWNhcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBjb25zdCB7IGJsb2IsIGNvbW1pdG1lbnQsIHByb29mIH0gPSBzaWRlY2Fyc1tpXTsKICAgICAgICBibG9icy5wdXNoKGJsb2IpOwogICAgICAgIGNvbW1pdG1lbnRzLnB1c2goY29tbWl0bWVudCk7CiAgICAgICAgcHJvb2ZzLnB1c2gocHJvb2YpOwogICAgICB9CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4MDMiLAogICAgICBzaWRlY2FycyA/ICgKICAgICAgICAvLyBJZiBzaWRlY2FycyBhcmUgZW5hYmxlZCwgZW52ZWxvcGUgdHVybnMgaW50byBhICJ3cmFwcGVyIjoKICAgICAgICB0b1JscChbc2VyaWFsaXplZFRyYW5zYWN0aW9uLCBibG9icywgY29tbWl0bWVudHMsIHByb29mc10pCiAgICAgICkgOiAoCiAgICAgICAgLy8gSWYgc2lkZWNhcnMgYXJlIGRpc2FibGVkLCBzdGFuZGFyZCBlbnZlbG9wZSBpcyB1c2VkOgogICAgICAgIHRvUmxwKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikKICAgICAgKQogICAgXSk7CiAgfQogIGZ1bmN0aW9uIHNlcmlhbGl6ZVRyYW5zYWN0aW9uRUlQMTU1OSh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKSB7CiAgICBjb25zdCB7IGNoYWluSWQsIGdhcywgbm9uY2UsIHRvLCB2YWx1ZSwgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgYWNjZXNzTGlzdCwgZGF0YSB9ID0gdHJhbnNhY3Rpb247CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDE1NTkodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2VyaWFsaXplZEFjY2Vzc0xpc3QgPSBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpOwogICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICB0b0hleChjaGFpbklkKSwKICAgICAgbm9uY2UgPyB0b0hleChub25jZSkgOiAiMHgiLAogICAgICBtYXhQcmlvcml0eUZlZVBlckdhcyA/IHRvSGV4KG1heFByaW9yaXR5RmVlUGVyR2FzKSA6ICIweCIsCiAgICAgIG1heEZlZVBlckdhcyA/IHRvSGV4KG1heEZlZVBlckdhcykgOiAiMHgiLAogICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgdG8gPz8gIjB4IiwKICAgICAgdmFsdWUgPyB0b0hleCh2YWx1ZSkgOiAiMHgiLAogICAgICBkYXRhID8/ICIweCIsCiAgICAgIHNlcmlhbGl6ZWRBY2Nlc3NMaXN0LAogICAgICAuLi50b1lQYXJpdHlTaWduYXR1cmVBcnJheSh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKQogICAgXTsKICAgIHJldHVybiBjb25jYXRIZXgoWwogICAgICAiMHgwMiIsCiAgICAgIHRvUmxwKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikKICAgIF0pOwogIH0KICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDI5MzAodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgeyBjaGFpbklkLCBnYXMsIGRhdGEsIG5vbmNlLCB0bywgdmFsdWUsIGFjY2Vzc0xpc3QsIGdhc1ByaWNlIH0gPSB0cmFuc2FjdGlvbjsKICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQMjkzMCh0cmFuc2FjdGlvbik7CiAgICBjb25zdCBzZXJpYWxpemVkQWNjZXNzTGlzdCA9IHNlcmlhbGl6ZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBjb25zdCBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBbCiAgICAgIHRvSGV4KGNoYWluSWQpLAogICAgICBub25jZSA/IHRvSGV4KG5vbmNlKSA6ICIweCIsCiAgICAgIGdhc1ByaWNlID8gdG9IZXgoZ2FzUHJpY2UpIDogIjB4IiwKICAgICAgZ2FzID8gdG9IZXgoZ2FzKSA6ICIweCIsCiAgICAgIHRvID8/ICIweCIsCiAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiLAogICAgICBzZXJpYWxpemVkQWNjZXNzTGlzdCwKICAgICAgLi4udG9ZUGFyaXR5U2lnbmF0dXJlQXJyYXkodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkKICAgIF07CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4MDEiLAogICAgICB0b1JscChzZXJpYWxpemVkVHJhbnNhY3Rpb24pCiAgICBdKTsKICB9CiAgZnVuY3Rpb24gc2VyaWFsaXplVHJhbnNhY3Rpb25MZWdhY3kodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgeyBjaGFpbklkID0gMCwgZ2FzLCBkYXRhLCBub25jZSwgdG8sIHZhbHVlLCBnYXNQcmljZSB9ID0gdHJhbnNhY3Rpb247CiAgICBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSh0cmFuc2FjdGlvbik7CiAgICBsZXQgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICBub25jZSA/IHRvSGV4KG5vbmNlKSA6ICIweCIsCiAgICAgIGdhc1ByaWNlID8gdG9IZXgoZ2FzUHJpY2UpIDogIjB4IiwKICAgICAgZ2FzID8gdG9IZXgoZ2FzKSA6ICIweCIsCiAgICAgIHRvID8/ICIweCIsCiAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiCiAgICBdOwogICAgaWYgKHNpZ25hdHVyZSkgewogICAgICBjb25zdCB2ID0gKCgpID0+IHsKICAgICAgICBpZiAoc2lnbmF0dXJlLnYgPj0gMzVuKSB7CiAgICAgICAgICBjb25zdCBpbmZlcnJlZENoYWluSWQgPSAoc2lnbmF0dXJlLnYgLSAzNW4pIC8gMm47CiAgICAgICAgICBpZiAoaW5mZXJyZWRDaGFpbklkID4gMCkKICAgICAgICAgICAgcmV0dXJuIHNpZ25hdHVyZS52OwogICAgICAgICAgcmV0dXJuIDI3biArIChzaWduYXR1cmUudiA9PT0gMzVuID8gMG4gOiAxbik7CiAgICAgICAgfQogICAgICAgIGlmIChjaGFpbklkID4gMCkKICAgICAgICAgIHJldHVybiBCaWdJbnQoY2hhaW5JZCAqIDIpICsgQmlnSW50KDM1biArIHNpZ25hdHVyZS52IC0gMjduKTsKICAgICAgICBjb25zdCB2MiA9IDI3biArIChzaWduYXR1cmUudiA9PT0gMjduID8gMG4gOiAxbik7CiAgICAgICAgaWYgKHNpZ25hdHVyZS52ICE9PSB2MikKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkTGVnYWN5VkVycm9yKHsgdjogc2lnbmF0dXJlLnYgfSk7CiAgICAgICAgcmV0dXJuIHYyOwogICAgICB9KSgpOwogICAgICBjb25zdCByID0gdHJpbShzaWduYXR1cmUucik7CiAgICAgIGNvbnN0IHMgPSB0cmltKHNpZ25hdHVyZS5zKTsKICAgICAgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICAgIC4uLnNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0b0hleCh2KSwKICAgICAgICByID09PSAiMHgwMCIgPyAiMHgiIDogciwKICAgICAgICBzID09PSAiMHgwMCIgPyAiMHgiIDogcwogICAgICBdOwogICAgfSBlbHNlIGlmIChjaGFpbklkID4gMCkgewogICAgICBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBbCiAgICAgICAgLi4uc2VyaWFsaXplZFRyYW5zYWN0aW9uLAogICAgICAgIHRvSGV4KGNoYWluSWQpLAogICAgICAgICIweCIsCiAgICAgICAgIjB4IgogICAgICBdOwogICAgfQogICAgcmV0dXJuIHRvUmxwKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgfQogIGZ1bmN0aW9uIHRvWVBhcml0eVNpZ25hdHVyZUFycmF5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmVfKSB7CiAgICBjb25zdCBzaWduYXR1cmUgPSBzaWduYXR1cmVfID8/IHRyYW5zYWN0aW9uOwogICAgY29uc3QgeyB2LCB5UGFyaXR5IH0gPSBzaWduYXR1cmU7CiAgICBpZiAodHlwZW9mIHNpZ25hdHVyZS5yID09PSAidW5kZWZpbmVkIikKICAgICAgcmV0dXJuIFtdOwogICAgaWYgKHR5cGVvZiBzaWduYXR1cmUucyA9PT0gInVuZGVmaW5lZCIpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICh0eXBlb2YgdiA9PT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIHlQYXJpdHkgPT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gW107CiAgICBjb25zdCByID0gdHJpbShzaWduYXR1cmUucik7CiAgICBjb25zdCBzID0gdHJpbShzaWduYXR1cmUucyk7CiAgICBjb25zdCB5UGFyaXR5XyA9ICgoKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgeVBhcml0eSA9PT0gIm51bWJlciIpCiAgICAgICAgcmV0dXJuIHlQYXJpdHkgPyB0b0hleCgxKSA6ICIweCI7CiAgICAgIGlmICh2ID09PSAwbikKICAgICAgICByZXR1cm4gIjB4IjsKICAgICAgaWYgKHYgPT09IDFuKQogICAgICAgIHJldHVybiB0b0hleCgxKTsKICAgICAgcmV0dXJuIHYgPT09IDI3biA/ICIweCIgOiB0b0hleCgxKTsKICAgIH0pKCk7CiAgICByZXR1cm4gW3lQYXJpdHlfLCByID09PSAiMHgwMCIgPyAiMHgiIDogciwgcyA9PT0gIjB4MDAiID8gIjB4IiA6IHNdOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L3BhcnNlVW5pdHMuanMKICBmdW5jdGlvbiBwYXJzZVVuaXRzKHZhbHVlLCBkZWNpbWFscykgewogICAgbGV0IFtpbnRlZ2VyLCBmcmFjdGlvbiA9ICIwIl0gPSB2YWx1ZS5zcGxpdCgiLiIpOwogICAgY29uc3QgbmVnYXRpdmUgPSBpbnRlZ2VyLnN0YXJ0c1dpdGgoIi0iKTsKICAgIGlmIChuZWdhdGl2ZSkKICAgICAgaW50ZWdlciA9IGludGVnZXIuc2xpY2UoMSk7CiAgICBmcmFjdGlvbiA9IGZyYWN0aW9uLnJlcGxhY2UoLygwKykkLywgIiIpOwogICAgaWYgKGRlY2ltYWxzID09PSAwKSB7CiAgICAgIGlmIChNYXRoLnJvdW5kKE51bWJlcihgLiR7ZnJhY3Rpb259YCkpID09PSAxKQogICAgICAgIGludGVnZXIgPSBgJHtCaWdJbnQoaW50ZWdlcikgKyAxbn1gOwogICAgICBmcmFjdGlvbiA9ICIiOwogICAgfSBlbHNlIGlmIChmcmFjdGlvbi5sZW5ndGggPiBkZWNpbWFscykgewogICAgICBjb25zdCBbbGVmdCwgdW5pdCwgcmlnaHRdID0gWwogICAgICAgIGZyYWN0aW9uLnNsaWNlKDAsIGRlY2ltYWxzIC0gMSksCiAgICAgICAgZnJhY3Rpb24uc2xpY2UoZGVjaW1hbHMgLSAxLCBkZWNpbWFscyksCiAgICAgICAgZnJhY3Rpb24uc2xpY2UoZGVjaW1hbHMpCiAgICAgIF07CiAgICAgIGNvbnN0IHJvdW5kZWQgPSBNYXRoLnJvdW5kKE51bWJlcihgJHt1bml0fS4ke3JpZ2h0fWApKTsKICAgICAgaWYgKHJvdW5kZWQgPiA5KQogICAgICAgIGZyYWN0aW9uID0gYCR7QmlnSW50KGxlZnQpICsgQmlnSW50KDEpfTBgLnBhZFN0YXJ0KGxlZnQubGVuZ3RoICsgMSwgIjAiKTsKICAgICAgZWxzZQogICAgICAgIGZyYWN0aW9uID0gYCR7bGVmdH0ke3JvdW5kZWR9YDsKICAgICAgaWYgKGZyYWN0aW9uLmxlbmd0aCA+IGRlY2ltYWxzKSB7CiAgICAgICAgZnJhY3Rpb24gPSBmcmFjdGlvbi5zbGljZSgxKTsKICAgICAgICBpbnRlZ2VyID0gYCR7QmlnSW50KGludGVnZXIpICsgMW59YDsKICAgICAgfQogICAgICBmcmFjdGlvbiA9IGZyYWN0aW9uLnNsaWNlKDAsIGRlY2ltYWxzKTsKICAgIH0gZWxzZSB7CiAgICAgIGZyYWN0aW9uID0gZnJhY3Rpb24ucGFkRW5kKGRlY2ltYWxzLCAiMCIpOwogICAgfQogICAgcmV0dXJuIEJpZ0ludChgJHtuZWdhdGl2ZSA/ICItIiA6ICIifSR7aW50ZWdlcn0ke2ZyYWN0aW9ufWApOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L3BhcnNlRXRoZXIuanMKICBpbml0X3VuaXQoKTsKICBmdW5jdGlvbiBwYXJzZUV0aGVyKGV0aGVyLCB1bml0ID0gIndlaSIpIHsKICAgIHJldHVybiBwYXJzZVVuaXRzKGV0aGVyLCBldGhlclVuaXRzW3VuaXRdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9wYXJzZUd3ZWkuanMKICBpbml0X3VuaXQoKTsKICBmdW5jdGlvbiBwYXJzZUd3ZWkoZXRoZXIsIHVuaXQgPSAid2VpIikgewogICAgcmV0dXJuIHBhcnNlVW5pdHMoZXRoZXIsIGd3ZWlVbml0c1t1bml0XSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL25vbmNlTWFuYWdlci5qcwogIGluaXRfbHJ1KCk7CiAgZnVuY3Rpb24gY3JlYXRlTm9uY2VNYW5hZ2VyKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgc291cmNlIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgZGVsdGFNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgY29uc3Qgbm9uY2VNYXAgPSBuZXcgTHJ1TWFwKDgxOTIpOwogICAgY29uc3QgcHJvbWlzZU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBjb25zdCBnZXRLZXkgPSAoeyBhZGRyZXNzLCBjaGFpbklkIH0pID0+IGAke2FkZHJlc3N9LiR7Y2hhaW5JZH1gOwogICAgcmV0dXJuIHsKICAgICAgYXN5bmMgY29uc3VtZSh7IGFkZHJlc3MsIGNoYWluSWQsIGNsaWVudCB9KSB7CiAgICAgICAgY29uc3Qga2V5ID0gZ2V0S2V5KHsgYWRkcmVzcywgY2hhaW5JZCB9KTsKICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5nZXQoeyBhZGRyZXNzLCBjaGFpbklkLCBjbGllbnQgfSk7CiAgICAgICAgdGhpcy5pbmNyZW1lbnQoeyBhZGRyZXNzLCBjaGFpbklkIH0pOwogICAgICAgIGNvbnN0IG5vbmNlID0gYXdhaXQgcHJvbWlzZTsKICAgICAgICBhd2FpdCBzb3VyY2Uuc2V0KHsgYWRkcmVzcywgY2hhaW5JZCB9LCBub25jZSk7CiAgICAgICAgbm9uY2VNYXAuc2V0KGtleSwgbm9uY2UpOwogICAgICAgIHJldHVybiBub25jZTsKICAgICAgfSwKICAgICAgYXN5bmMgaW5jcmVtZW50KHsgYWRkcmVzcywgY2hhaW5JZCB9KSB7CiAgICAgICAgY29uc3Qga2V5ID0gZ2V0S2V5KHsgYWRkcmVzcywgY2hhaW5JZCB9KTsKICAgICAgICBjb25zdCBkZWx0YSA9IGRlbHRhTWFwLmdldChrZXkpID8/IDA7CiAgICAgICAgZGVsdGFNYXAuc2V0KGtleSwgZGVsdGEgKyAxKTsKICAgICAgfSwKICAgICAgYXN5bmMgZ2V0KHsgYWRkcmVzcywgY2hhaW5JZCwgY2xpZW50IH0pIHsKICAgICAgICBjb25zdCBrZXkgPSBnZXRLZXkoeyBhZGRyZXNzLCBjaGFpbklkIH0pOwogICAgICAgIGxldCBwcm9taXNlID0gcHJvbWlzZU1hcC5nZXQoa2V5KTsKICAgICAgICBpZiAoIXByb21pc2UpIHsKICAgICAgICAgIHByb21pc2UgPSAoYXN5bmMgKCkgPT4gewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGNvbnN0IG5vbmNlID0gYXdhaXQgc291cmNlLmdldCh7IGFkZHJlc3MsIGNoYWluSWQsIGNsaWVudCB9KTsKICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c05vbmNlID0gbm9uY2VNYXAuZ2V0KGtleSkgPz8gMDsKICAgICAgICAgICAgICBpZiAocHJldmlvdXNOb25jZSA+IDAgJiYgbm9uY2UgPD0gcHJldmlvdXNOb25jZSkKICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c05vbmNlICsgMTsKICAgICAgICAgICAgICBub25jZU1hcC5kZWxldGUoa2V5KTsKICAgICAgICAgICAgICByZXR1cm4gbm9uY2U7CiAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgdGhpcy5yZXNldCh7IGFkZHJlc3MsIGNoYWluSWQgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pKCk7CiAgICAgICAgICBwcm9taXNlTWFwLnNldChrZXksIHByb21pc2UpOwogICAgICAgIH0KICAgICAgICBjb25zdCBkZWx0YSA9IGRlbHRhTWFwLmdldChrZXkpID8/IDA7CiAgICAgICAgcmV0dXJuIGRlbHRhICsgYXdhaXQgcHJvbWlzZTsKICAgICAgfSwKICAgICAgcmVzZXQoeyBhZGRyZXNzLCBjaGFpbklkIH0pIHsKICAgICAgICBjb25zdCBrZXkgPSBnZXRLZXkoeyBhZGRyZXNzLCBjaGFpbklkIH0pOwogICAgICAgIGRlbHRhTWFwLmRlbGV0ZShrZXkpOwogICAgICAgIHByb21pc2VNYXAuZGVsZXRlKGtleSk7CiAgICAgIH0KICAgIH07CiAgfQogIGZ1bmN0aW9uIGpzb25ScGMoKSB7CiAgICByZXR1cm4gewogICAgICBhc3luYyBnZXQocGFyYW1ldGVycykgewogICAgICAgIGNvbnN0IHsgYWRkcmVzcywgY2xpZW50IH0gPSBwYXJhbWV0ZXJzOwogICAgICAgIHJldHVybiBnZXRUcmFuc2FjdGlvbkNvdW50KGNsaWVudCwgewogICAgICAgICAgYWRkcmVzcywKICAgICAgICAgIGJsb2NrVGFnOiAicGVuZGluZyIKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgc2V0KCkgewogICAgICB9CiAgICB9OwogIH0KICB2YXIgbm9uY2VNYW5hZ2VyID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZU5vbmNlTWFuYWdlcih7CiAgICBzb3VyY2U6IGpzb25ScGMoKQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Zvcm1hdHRlcnMvcHJvb2YuanMKICBmdW5jdGlvbiBmb3JtYXRTdG9yYWdlUHJvb2Yoc3RvcmFnZVByb29mKSB7CiAgICByZXR1cm4gc3RvcmFnZVByb29mLm1hcCgocHJvb2YpID0+ICh7CiAgICAgIC4uLnByb29mLAogICAgICB2YWx1ZTogQmlnSW50KHByb29mLnZhbHVlKQogICAgfSkpOwogIH0KICBmdW5jdGlvbiBmb3JtYXRQcm9vZihwcm9vZikgewogICAgcmV0dXJuIHsKICAgICAgLi4ucHJvb2YsCiAgICAgIGJhbGFuY2U6IHByb29mLmJhbGFuY2UgPyBCaWdJbnQocHJvb2YuYmFsYW5jZSkgOiB2b2lkIDAsCiAgICAgIG5vbmNlOiBwcm9vZi5ub25jZSA/IGhleFRvTnVtYmVyKHByb29mLm5vbmNlKSA6IHZvaWQgMCwKICAgICAgc3RvcmFnZVByb29mOiBwcm9vZi5zdG9yYWdlUHJvb2YgPyBmb3JtYXRTdG9yYWdlUHJvb2YocHJvb2Yuc3RvcmFnZVByb29mKSA6IHZvaWQgMAogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0UHJvb2YuanMKICBhc3luYyBmdW5jdGlvbiBnZXRQcm9vZihjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tOdW1iZXIsIGJsb2NrVGFnOiBibG9ja1RhZ18sIHN0b3JhZ2VLZXlzIH0pIHsKICAgIGNvbnN0IGJsb2NrVGFnID0gYmxvY2tUYWdfID8/ICJsYXRlc3QiOwogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciAhPT0gdm9pZCAwID8gbnVtYmVyVG9IZXgoYmxvY2tOdW1iZXIpIDogdm9pZCAwOwogICAgY29uc3QgcHJvb2YgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRQcm9vZiIsCiAgICAgIHBhcmFtczogW2FkZHJlc3MsIHN0b3JhZ2VLZXlzLCBibG9ja051bWJlckhleCB8fCBibG9ja1RhZ10KICAgIH0pOwogICAgcmV0dXJuIGZvcm1hdFByb29mKHByb29mKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0U3RvcmFnZUF0LmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldFN0b3JhZ2VBdChjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tOdW1iZXIsIGJsb2NrVGFnID0gImxhdGVzdCIsIHNsb3QgfSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciAhPT0gdm9pZCAwID8gbnVtYmVyVG9IZXgoYmxvY2tOdW1iZXIpIDogdm9pZCAwOwogICAgY29uc3QgZGF0YSA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2dldFN0b3JhZ2VBdCIsCiAgICAgIHBhcmFtczogW2FkZHJlc3MsIHNsb3QsIGJsb2NrTnVtYmVySGV4IHx8IGJsb2NrVGFnXQogICAgfSk7CiAgICByZXR1cm4gZGF0YTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0VHJhbnNhY3Rpb24uanMKICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uKGNsaWVudCwgeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyLCBibG9ja1RhZzogYmxvY2tUYWdfLCBoYXNoOiBoYXNoMywgaW5kZXg6IGluZGV4MiB9KSB7CiAgICBjb25zdCBibG9ja1RhZyA9IGJsb2NrVGFnXyB8fCAibGF0ZXN0IjsKICAgIGNvbnN0IGJsb2NrTnVtYmVySGV4ID0gYmxvY2tOdW1iZXIgIT09IHZvaWQgMCA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgIGxldCB0cmFuc2FjdGlvbiA9IG51bGw7CiAgICBpZiAoaGFzaDMpIHsKICAgICAgdHJhbnNhY3Rpb24gPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXRoX2dldFRyYW5zYWN0aW9uQnlIYXNoIiwKICAgICAgICBwYXJhbXM6IFtoYXNoM10KICAgICAgfSwgeyBkZWR1cGU6IHRydWUgfSk7CiAgICB9IGVsc2UgaWYgKGJsb2NrSGFzaCkgewogICAgICB0cmFuc2FjdGlvbiA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0VHJhbnNhY3Rpb25CeUJsb2NrSGFzaEFuZEluZGV4IiwKICAgICAgICBwYXJhbXM6IFtibG9ja0hhc2gsIG51bWJlclRvSGV4KGluZGV4MildCiAgICAgIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgfSBlbHNlIGlmIChibG9ja051bWJlckhleCB8fCBibG9ja1RhZykgewogICAgICB0cmFuc2FjdGlvbiA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0VHJhbnNhY3Rpb25CeUJsb2NrTnVtYmVyQW5kSW5kZXgiLAogICAgICAgIHBhcmFtczogW2Jsb2NrTnVtYmVySGV4IHx8IGJsb2NrVGFnLCBudW1iZXJUb0hleChpbmRleDIpXQogICAgICB9LCB7IGRlZHVwZTogQm9vbGVhbihibG9ja051bWJlckhleCkgfSk7CiAgICB9CiAgICBpZiAoIXRyYW5zYWN0aW9uKQogICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25Ob3RGb3VuZEVycm9yKHsKICAgICAgICBibG9ja0hhc2gsCiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgYmxvY2tUYWcsCiAgICAgICAgaGFzaDogaGFzaDMsCiAgICAgICAgaW5kZXg6IGluZGV4MgogICAgICB9KTsKICAgIGNvbnN0IGZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb24/LmZvcm1hdCB8fCBmb3JtYXRUcmFuc2FjdGlvbjsKICAgIHJldHVybiBmb3JtYXQodHJhbnNhY3Rpb24pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRUcmFuc2FjdGlvbkNvbmZpcm1hdGlvbnMuanMKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvbkNvbmZpcm1hdGlvbnMoY2xpZW50LCB7IGhhc2g6IGhhc2gzLCB0cmFuc2FjdGlvblJlY2VpcHQgfSkgewogICAgY29uc3QgW2Jsb2NrTnVtYmVyLCB0cmFuc2FjdGlvbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgIGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrTnVtYmVyLCAiZ2V0QmxvY2tOdW1iZXIiKSh7fSksCiAgICAgIGhhc2gzID8gZ2V0QWN0aW9uKGNsaWVudCwgZ2V0VHJhbnNhY3Rpb24sICJnZXRUcmFuc2FjdGlvbiIpKHsgaGFzaDogaGFzaDMgfSkgOiB2b2lkIDAKICAgIF0pOwogICAgY29uc3QgdHJhbnNhY3Rpb25CbG9ja051bWJlciA9IHRyYW5zYWN0aW9uUmVjZWlwdD8uYmxvY2tOdW1iZXIgfHwgdHJhbnNhY3Rpb24/LmJsb2NrTnVtYmVyOwogICAgaWYgKCF0cmFuc2FjdGlvbkJsb2NrTnVtYmVyKQogICAgICByZXR1cm4gMG47CiAgICByZXR1cm4gYmxvY2tOdW1iZXIgLSB0cmFuc2FjdGlvbkJsb2NrTnVtYmVyICsgMW47CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldFRyYW5zYWN0aW9uUmVjZWlwdC5qcwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvblJlY2VpcHQoY2xpZW50LCB7IGhhc2g6IGhhc2gzIH0pIHsKICAgIGNvbnN0IHJlY2VpcHQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRUcmFuc2FjdGlvblJlY2VpcHQiLAogICAgICBwYXJhbXM6IFtoYXNoM10KICAgIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgaWYgKCFyZWNlaXB0KQogICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25SZWNlaXB0Tm90Rm91bmRFcnJvcih7IGhhc2g6IGhhc2gzIH0pOwogICAgY29uc3QgZm9ybWF0ID0gY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzPy50cmFuc2FjdGlvblJlY2VpcHQ/LmZvcm1hdCB8fCBmb3JtYXRUcmFuc2FjdGlvblJlY2VpcHQ7CiAgICByZXR1cm4gZm9ybWF0KHJlY2VpcHQpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9tdWx0aWNhbGwuanMKICBpbml0X2FiaXMoKTsKICBpbml0X2FiaSgpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY29udHJhY3QoKTsKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2dldENoYWluQ29udHJhY3RBZGRyZXNzKCk7CiAgYXN5bmMgZnVuY3Rpb24gbXVsdGljYWxsKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhbGxvd0ZhaWx1cmUgPSB0cnVlLCBiYXRjaFNpemU6IGJhdGNoU2l6ZV8sIGJsb2NrTnVtYmVyLCBibG9ja1RhZywgbXVsdGljYWxsQWRkcmVzczogbXVsdGljYWxsQWRkcmVzc18sIHN0YXRlT3ZlcnJpZGUgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjb250cmFjdHMyID0gcGFyYW1ldGVycy5jb250cmFjdHM7CiAgICBjb25zdCBiYXRjaFNpemUgPSBiYXRjaFNpemVfID8/ICh0eXBlb2YgY2xpZW50LmJhdGNoPy5tdWx0aWNhbGwgPT09ICJvYmplY3QiICYmIGNsaWVudC5iYXRjaC5tdWx0aWNhbGwuYmF0Y2hTaXplIHx8IDEwMjQpOwogICAgbGV0IG11bHRpY2FsbEFkZHJlc3MgPSBtdWx0aWNhbGxBZGRyZXNzXzsKICAgIGlmICghbXVsdGljYWxsQWRkcmVzcykgewogICAgICBpZiAoIWNsaWVudC5jaGFpbikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNsaWVudCBjaGFpbiBub3QgY29uZmlndXJlZC4gbXVsdGljYWxsQWRkcmVzcyBpcyByZXF1aXJlZC4iKTsKICAgICAgbXVsdGljYWxsQWRkcmVzcyA9IGdldENoYWluQ29udHJhY3RBZGRyZXNzKHsKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBjaGFpbjogY2xpZW50LmNoYWluLAogICAgICAgIGNvbnRyYWN0OiAibXVsdGljYWxsMyIKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBjaHVua2VkQ2FsbHMgPSBbW11dOwogICAgbGV0IGN1cnJlbnRDaHVuayA9IDA7CiAgICBsZXQgY3VycmVudENodW5rU2l6ZSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyYWN0czIubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGZ1bmN0aW9uTmFtZSB9ID0gY29udHJhY3RzMltpXTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBjYWxsRGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7IGFiaTogYWJpMiwgYXJncywgZnVuY3Rpb25OYW1lIH0pOwogICAgICAgIGN1cnJlbnRDaHVua1NpemUgKz0gKGNhbGxEYXRhLmxlbmd0aCAtIDIpIC8gMjsKICAgICAgICBpZiAoCiAgICAgICAgICAvLyBDaGVjayBpZiBiYXRjaGluZyBpcyBlbmFibGVkLgogICAgICAgICAgYmF0Y2hTaXplID4gMCAmJiAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBzaXplIG9mIHRoZSBiYXRjaCBleGNlZWRzIHRoZSBzaXplIGxpbWl0LgogICAgICAgICAgY3VycmVudENodW5rU2l6ZSA+IGJhdGNoU2l6ZSAmJiAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBjaHVuayBpcyBub3QgYWxyZWFkeSBlbXB0eS4KICAgICAgICAgIGNodW5rZWRDYWxsc1tjdXJyZW50Q2h1bmtdLmxlbmd0aCA+IDAKICAgICAgICApIHsKICAgICAgICAgIGN1cnJlbnRDaHVuaysrOwogICAgICAgICAgY3VycmVudENodW5rU2l6ZSA9IChjYWxsRGF0YS5sZW5ndGggLSAyKSAvIDI7CiAgICAgICAgICBjaHVua2VkQ2FsbHNbY3VycmVudENodW5rXSA9IFtdOwogICAgICAgIH0KICAgICAgICBjaHVua2VkQ2FsbHNbY3VycmVudENodW5rXSA9IFsKICAgICAgICAgIC4uLmNodW5rZWRDYWxsc1tjdXJyZW50Q2h1bmtdLAogICAgICAgICAgewogICAgICAgICAgICBhbGxvd0ZhaWx1cmU6IHRydWUsCiAgICAgICAgICAgIGNhbGxEYXRhLAogICAgICAgICAgICB0YXJnZXQ6IGFkZHJlc3MKICAgICAgICAgIH0KICAgICAgICBdOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zdCBlcnJvciA9IGdldENvbnRyYWN0RXJyb3IoZXJyLCB7CiAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgYXJncywKICAgICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3QvbXVsdGljYWxsIiwKICAgICAgICAgIGZ1bmN0aW9uTmFtZQogICAgICAgIH0pOwogICAgICAgIGlmICghYWxsb3dGYWlsdXJlKQogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgY2h1bmtlZENhbGxzW2N1cnJlbnRDaHVua10gPSBbCiAgICAgICAgICAuLi5jaHVua2VkQ2FsbHNbY3VycmVudENodW5rXSwKICAgICAgICAgIHsKICAgICAgICAgICAgYWxsb3dGYWlsdXJlOiB0cnVlLAogICAgICAgICAgICBjYWxsRGF0YTogIjB4IiwKICAgICAgICAgICAgdGFyZ2V0OiBhZGRyZXNzCiAgICAgICAgICB9CiAgICAgICAgXTsKICAgICAgfQogICAgfQogICAgY29uc3QgYWdncmVnYXRlM1Jlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoY2h1bmtlZENhbGxzLm1hcCgoY2FsbHMpID0+IGdldEFjdGlvbihjbGllbnQsIHJlYWRDb250cmFjdCwgInJlYWRDb250cmFjdCIpKHsKICAgICAgYWJpOiBtdWx0aWNhbGwzQWJpLAogICAgICBhZGRyZXNzOiBtdWx0aWNhbGxBZGRyZXNzLAogICAgICBhcmdzOiBbY2FsbHNdLAogICAgICBibG9ja051bWJlciwKICAgICAgYmxvY2tUYWcsCiAgICAgIGZ1bmN0aW9uTmFtZTogImFnZ3JlZ2F0ZTMiLAogICAgICBzdGF0ZU92ZXJyaWRlCiAgICB9KSkpOwogICAgY29uc3QgcmVzdWx0cyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZ2dyZWdhdGUzUmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCByZXN1bHQgPSBhZ2dyZWdhdGUzUmVzdWx0c1tpXTsKICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICJyZWplY3RlZCIpIHsKICAgICAgICBpZiAoIWFsbG93RmFpbHVyZSkKICAgICAgICAgIHRocm93IHJlc3VsdC5yZWFzb247CiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaHVua2VkQ2FsbHNbaV0ubGVuZ3RoOyBqKyspIHsKICAgICAgICAgIHJlc3VsdHMucHVzaCh7CiAgICAgICAgICAgIHN0YXR1czogImZhaWx1cmUiLAogICAgICAgICAgICBlcnJvcjogcmVzdWx0LnJlYXNvbiwKICAgICAgICAgICAgcmVzdWx0OiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBhZ2dyZWdhdGUzUmVzdWx0ID0gcmVzdWx0LnZhbHVlOwogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFnZ3JlZ2F0ZTNSZXN1bHQubGVuZ3RoOyBqKyspIHsKICAgICAgICBjb25zdCB7IHJldHVybkRhdGEsIHN1Y2Nlc3MgfSA9IGFnZ3JlZ2F0ZTNSZXN1bHRbal07CiAgICAgICAgY29uc3QgeyBjYWxsRGF0YSB9ID0gY2h1bmtlZENhbGxzW2ldW2pdOwogICAgICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhZGRyZXNzLCBmdW5jdGlvbk5hbWUsIGFyZ3MgfSA9IGNvbnRyYWN0czJbcmVzdWx0cy5sZW5ndGhdOwogICAgICAgIHRyeSB7CiAgICAgICAgICBpZiAoY2FsbERhdGEgPT09ICIweCIpCiAgICAgICAgICAgIHRocm93IG5ldyBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IoKTsKICAgICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgdGhyb3cgbmV3IFJhd0NvbnRyYWN0RXJyb3IoeyBkYXRhOiByZXR1cm5EYXRhIH0pOwogICAgICAgICAgY29uc3QgcmVzdWx0MiA9IGRlY29kZUZ1bmN0aW9uUmVzdWx0KHsKICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICBhcmdzLAogICAgICAgICAgICBkYXRhOiByZXR1cm5EYXRhLAogICAgICAgICAgICBmdW5jdGlvbk5hbWUKICAgICAgICAgIH0pOwogICAgICAgICAgcmVzdWx0cy5wdXNoKGFsbG93RmFpbHVyZSA/IHsgcmVzdWx0OiByZXN1bHQyLCBzdGF0dXM6ICJzdWNjZXNzIiB9IDogcmVzdWx0Mik7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBjb25zdCBlcnJvciA9IGdldENvbnRyYWN0RXJyb3IoZXJyLCB7CiAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgYWRkcmVzcywKICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9jb250cmFjdC9tdWx0aWNhbGwiLAogICAgICAgICAgICBmdW5jdGlvbk5hbWUKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFhbGxvd0ZhaWx1cmUpCiAgICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgICAgcmVzdWx0cy5wdXNoKHsgZXJyb3IsIHJlc3VsdDogdm9pZCAwLCBzdGF0dXM6ICJmYWlsdXJlIiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChyZXN1bHRzLmxlbmd0aCAhPT0gY29udHJhY3RzMi5sZW5ndGgpCiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJtdWx0aWNhbGwgcmVzdWx0cyBtaXNtYXRjaCIpOwogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3ZlcmlmeUhhc2guanMKICBpbml0X2FiaXMoKTsKICBpbml0X2NvbnRyYWN0cygpOwogIGluaXRfY29udHJhY3QoKTsKICBpbml0X2VuY29kZURlcGxveURhdGEoKTsKICBpbml0X2dldEFkZHJlc3MoKTsKICBpbml0X2lzQWRkcmVzc0VxdWFsKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9pc0J5dGVzRXF1YWwuanMKICBpbml0X3V0aWxzNCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfaXNIZXgoKTsKICBmdW5jdGlvbiBpc0J5dGVzRXF1YWwoYV8sIGJfKSB7CiAgICBjb25zdCBhID0gaXNIZXgoYV8pID8gdG9CeXRlcyhhXykgOiBhXzsKICAgIGNvbnN0IGIgPSBpc0hleChiXykgPyB0b0J5dGVzKGJfKSA6IGJfOwogICAgcmV0dXJuIGVxdWFsQnl0ZXMoYSwgYik7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3ZlcmlmeUhhc2guanMKICBpbml0X2lzSGV4KCk7CiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3NpZ25hdHVyZS9zZXJpYWxpemVTaWduYXR1cmUuanMKICBpbml0X3NlY3AyNTZrMSgpOwogIGluaXRfZnJvbUhleCgpOwogIGluaXRfdG9CeXRlcygpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZVNpZ25hdHVyZSh7IHIsIHMsIHRvID0gImhleCIsIHYsIHlQYXJpdHkgfSkgewogICAgY29uc3QgeVBhcml0eV8gPSAoKCkgPT4gewogICAgICBpZiAoeVBhcml0eSA9PT0gMCB8fCB5UGFyaXR5ID09PSAxKQogICAgICAgIHJldHVybiB5UGFyaXR5OwogICAgICBpZiAodiAmJiAodiA9PT0gMjduIHx8IHYgPT09IDI4biB8fCB2ID49IDM1bikpCiAgICAgICAgcmV0dXJuIHYgJSAybiA9PT0gMG4gPyAxIDogMDsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGB2YCBvciBgeVBhcml0eWAgdmFsdWUiKTsKICAgIH0pKCk7CiAgICBjb25zdCBzaWduYXR1cmUgPSBgMHgke25ldyBzZWNwMjU2azEuU2lnbmF0dXJlKGhleFRvQmlnSW50KHIpLCBoZXhUb0JpZ0ludChzKSkudG9Db21wYWN0SGV4KCl9JHt5UGFyaXR5XyA9PT0gMCA/ICIxYiIgOiAiMWMifWA7CiAgICBpZiAodG8gPT09ICJoZXgiKQogICAgICByZXR1cm4gc2lnbmF0dXJlOwogICAgcmV0dXJuIGhleFRvQnl0ZXMoc2lnbmF0dXJlKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvdmVyaWZ5SGFzaC5qcwogIGluaXRfY2FsbCgpOwogIGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUhhc2gyKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhZGRyZXNzLCBmYWN0b3J5LCBmYWN0b3J5RGF0YSwgaGFzaDogaGFzaDMsIHNpZ25hdHVyZSwgLi4ucmVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZUhleCA9ICgoKSA9PiB7CiAgICAgIGlmIChpc0hleChzaWduYXR1cmUpKQogICAgICAgIHJldHVybiBzaWduYXR1cmU7CiAgICAgIGlmICh0eXBlb2Ygc2lnbmF0dXJlID09PSAib2JqZWN0IiAmJiAiciIgaW4gc2lnbmF0dXJlICYmICJzIiBpbiBzaWduYXR1cmUpCiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVNpZ25hdHVyZShzaWduYXR1cmUpOwogICAgICByZXR1cm4gYnl0ZXNUb0hleChzaWduYXR1cmUpOwogICAgfSkoKTsKICAgIGNvbnN0IHdyYXBwZWRTaWduYXR1cmUgPSBhd2FpdCAoYXN5bmMgKCkgPT4gewogICAgICBpZiAoIWZhY3RvcnkgJiYgIWZhY3RvcnlEYXRhKQogICAgICAgIHJldHVybiBzaWduYXR1cmVIZXg7CiAgICAgIGlmIChpc0VyYzY0OTJTaWduYXR1cmUoc2lnbmF0dXJlSGV4KSkKICAgICAgICByZXR1cm4gc2lnbmF0dXJlSGV4OwogICAgICByZXR1cm4gc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZSh7CiAgICAgICAgYWRkcmVzczogZmFjdG9yeSwKICAgICAgICBkYXRhOiBmYWN0b3J5RGF0YSwKICAgICAgICBzaWduYXR1cmU6IHNpZ25hdHVyZUhleAogICAgICB9KTsKICAgIH0pKCk7CiAgICB0cnkgewogICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGNhbGwsICJjYWxsIikoewogICAgICAgIGRhdGE6IGVuY29kZURlcGxveURhdGEoewogICAgICAgICAgYWJpOiB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JBYmksCiAgICAgICAgICBhcmdzOiBbYWRkcmVzcywgaGFzaDMsIHdyYXBwZWRTaWduYXR1cmVdLAogICAgICAgICAgYnl0ZWNvZGU6IHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckJ5dGVDb2RlCiAgICAgICAgfSksCiAgICAgICAgLi4ucmVzdAogICAgICB9KTsKICAgICAgcmV0dXJuIGlzQnl0ZXNFcXVhbChkYXRhID8/ICIweDAiLCAiMHgxIik7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICB0cnkgewogICAgICAgIGNvbnN0IHZlcmlmaWVkID0gaXNBZGRyZXNzRXF1YWwoZ2V0QWRkcmVzcyhhZGRyZXNzKSwgYXdhaXQgcmVjb3ZlckFkZHJlc3MoeyBoYXNoOiBoYXNoMywgc2lnbmF0dXJlIH0pKTsKICAgICAgICBpZiAodmVyaWZpZWQpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSBjYXRjaCB7CiAgICAgIH0KICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ2FsbEV4ZWN1dGlvbkVycm9yKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHRocm93IGVycm9yOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy92ZXJpZnlNZXNzYWdlLmpzCiAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5TWVzc2FnZTIoY2xpZW50LCB7IGFkZHJlc3MsIG1lc3NhZ2UsIGZhY3RvcnksIGZhY3RvcnlEYXRhLCBzaWduYXR1cmUsIC4uLmNhbGxSZXF1ZXN0IH0pIHsKICAgIGNvbnN0IGhhc2gzID0gaGFzaE1lc3NhZ2UobWVzc2FnZSk7CiAgICByZXR1cm4gdmVyaWZ5SGFzaDIoY2xpZW50LCB7CiAgICAgIGFkZHJlc3MsCiAgICAgIGZhY3RvcnksCiAgICAgIGZhY3RvcnlEYXRhLAogICAgICBoYXNoOiBoYXNoMywKICAgICAgc2lnbmF0dXJlLAogICAgICAuLi5jYWxsUmVxdWVzdAogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3ZlcmlmeVR5cGVkRGF0YS5qcwogIGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVR5cGVkRGF0YTIoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGZhY3RvcnksIGZhY3RvcnlEYXRhLCBzaWduYXR1cmUsIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcywgZG9tYWluLCAuLi5jYWxsUmVxdWVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGhhc2gzID0gaGFzaFR5cGVkRGF0YSh7IG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcywgZG9tYWluIH0pOwogICAgcmV0dXJuIHZlcmlmeUhhc2gyKGNsaWVudCwgewogICAgICBhZGRyZXNzLAogICAgICBmYWN0b3J5LAogICAgICBmYWN0b3J5RGF0YSwKICAgICAgaGFzaDogaGFzaDMsCiAgICAgIHNpZ25hdHVyZSwKICAgICAgLi4uY2FsbFJlcXVlc3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy93YWl0Rm9yVHJhbnNhY3Rpb25SZWNlaXB0LmpzCiAgaW5pdF90cmFuc2FjdGlvbigpOwogIGluaXRfc3RyaW5naWZ5KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvd2F0Y2hCbG9ja051bWJlci5qcwogIGluaXRfZnJvbUhleCgpOwogIGluaXRfc3RyaW5naWZ5KCk7CiAgZnVuY3Rpb24gd2F0Y2hCbG9ja051bWJlcihjbGllbnQsIHsgZW1pdE9uQmVnaW4gPSBmYWxzZSwgZW1pdE1pc3NlZCA9IGZhbHNlLCBvbkJsb2NrTnVtYmVyLCBvbkVycm9yLCBwb2xsOiBwb2xsXywgcG9sbGluZ0ludGVydmFsID0gY2xpZW50LnBvbGxpbmdJbnRlcnZhbCB9KSB7CiAgICBjb25zdCBlbmFibGVQb2xsaW5nID0gKCgpID0+IHsKICAgICAgaWYgKHR5cGVvZiBwb2xsXyAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgcmV0dXJuIHBvbGxfOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAid2ViU29ja2V0IikKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIgJiYgY2xpZW50LnRyYW5zcG9ydC50cmFuc3BvcnRzWzBdLmNvbmZpZy50eXBlID09PSAid2ViU29ja2V0IikKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSkoKTsKICAgIGxldCBwcmV2QmxvY2tOdW1iZXI7CiAgICBjb25zdCBwb2xsQmxvY2tOdW1iZXIgPSAoKSA9PiB7CiAgICAgIGNvbnN0IG9ic2VydmVySWQgPSBzdHJpbmdpZnkoWwogICAgICAgICJ3YXRjaEJsb2NrTnVtYmVyIiwKICAgICAgICBjbGllbnQudWlkLAogICAgICAgIGVtaXRPbkJlZ2luLAogICAgICAgIGVtaXRNaXNzZWQsCiAgICAgICAgcG9sbGluZ0ludGVydmFsCiAgICAgIF0pOwogICAgICByZXR1cm4gb2JzZXJ2ZShvYnNlcnZlcklkLCB7IG9uQmxvY2tOdW1iZXIsIG9uRXJyb3IgfSwgKGVtaXQpID0+IHBvbGwoYXN5bmMgKCkgPT4gewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBibG9ja051bWJlciA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrTnVtYmVyLCAiZ2V0QmxvY2tOdW1iZXIiKSh7IGNhY2hlVGltZTogMCB9KTsKICAgICAgICAgIGlmIChwcmV2QmxvY2tOdW1iZXIpIHsKICAgICAgICAgICAgaWYgKGJsb2NrTnVtYmVyID09PSBwcmV2QmxvY2tOdW1iZXIpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoYmxvY2tOdW1iZXIgLSBwcmV2QmxvY2tOdW1iZXIgPiAxICYmIGVtaXRNaXNzZWQpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBpID0gcHJldkJsb2NrTnVtYmVyICsgMW47IGkgPCBibG9ja051bWJlcjsgaSsrKSB7CiAgICAgICAgICAgICAgICBlbWl0Lm9uQmxvY2tOdW1iZXIoaSwgcHJldkJsb2NrTnVtYmVyKTsKICAgICAgICAgICAgICAgIHByZXZCbG9ja051bWJlciA9IGk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXByZXZCbG9ja051bWJlciB8fCBibG9ja051bWJlciA+IHByZXZCbG9ja051bWJlcikgewogICAgICAgICAgICBlbWl0Lm9uQmxvY2tOdW1iZXIoYmxvY2tOdW1iZXIsIHByZXZCbG9ja051bWJlcik7CiAgICAgICAgICAgIHByZXZCbG9ja051bWJlciA9IGJsb2NrTnVtYmVyOwogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgZW1pdC5vbkVycm9yPy4oZXJyKTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBlbWl0T25CZWdpbiwKICAgICAgICBpbnRlcnZhbDogcG9sbGluZ0ludGVydmFsCiAgICAgIH0pKTsKICAgIH07CiAgICBjb25zdCBzdWJzY3JpYmVCbG9ja051bWJlciA9ICgpID0+IHsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoQmxvY2tOdW1iZXIiLAogICAgICAgIGNsaWVudC51aWQsCiAgICAgICAgZW1pdE9uQmVnaW4sCiAgICAgICAgZW1pdE1pc3NlZAogICAgICBdKTsKICAgICAgcmV0dXJuIG9ic2VydmUob2JzZXJ2ZXJJZCwgeyBvbkJsb2NrTnVtYmVyLCBvbkVycm9yIH0sIChlbWl0KSA9PiB7CiAgICAgICAgbGV0IGFjdGl2ZSA9IHRydWU7CiAgICAgICAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydCA9ICgoKSA9PiB7CiAgICAgICAgICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gImZhbGxiYWNrIikgewogICAgICAgICAgICAgICAgY29uc3QgdHJhbnNwb3J0MiA9IGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0cy5maW5kKCh0cmFuc3BvcnQzKSA9PiB0cmFuc3BvcnQzLmNvbmZpZy50eXBlID09PSAid2ViU29ja2V0Iik7CiAgICAgICAgICAgICAgICBpZiAoIXRyYW5zcG9ydDIpCiAgICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zcG9ydDIudmFsdWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgICB9KSgpOwogICAgICAgICAgICBjb25zdCB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZV8gfSA9IGF3YWl0IHRyYW5zcG9ydC5zdWJzY3JpYmUoewogICAgICAgICAgICAgIHBhcmFtczogWyJuZXdIZWFkcyJdLAogICAgICAgICAgICAgIG9uRGF0YShkYXRhKSB7CiAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgY29uc3QgYmxvY2tOdW1iZXIgPSBoZXhUb0JpZ0ludChkYXRhLnJlc3VsdD8ubnVtYmVyKTsKICAgICAgICAgICAgICAgIGVtaXQub25CbG9ja051bWJlcihibG9ja051bWJlciwgcHJldkJsb2NrTnVtYmVyKTsKICAgICAgICAgICAgICAgIHByZXZCbG9ja051bWJlciA9IGJsb2NrTnVtYmVyOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgb25FcnJvcihlcnJvcikgewogICAgICAgICAgICAgICAgZW1pdC5vbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgICB1bnN1YnNjcmliZSgpOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIG9uRXJyb3I/LihlcnIpOwogICAgICAgICAgfQogICAgICAgIH0pKCk7CiAgICAgICAgcmV0dXJuICgpID0+IHVuc3Vic2NyaWJlKCk7CiAgICAgIH0pOwogICAgfTsKICAgIHJldHVybiBlbmFibGVQb2xsaW5nID8gcG9sbEJsb2NrTnVtYmVyKCkgOiBzdWJzY3JpYmVCbG9ja051bWJlcigpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy93YWl0Rm9yVHJhbnNhY3Rpb25SZWNlaXB0LmpzCiAgYXN5bmMgZnVuY3Rpb24gd2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdChjbGllbnQsIHsKICAgIGNvbmZpcm1hdGlvbnMgPSAxLAogICAgaGFzaDogaGFzaDMsCiAgICBvblJlcGxhY2VkLAogICAgcG9sbGluZ0ludGVydmFsID0gY2xpZW50LnBvbGxpbmdJbnRlcnZhbCwKICAgIHJldHJ5Q291bnQgPSA2LAogICAgcmV0cnlEZWxheSA9ICh7IGNvdW50IH0pID0+IH5+KDEgPDwgY291bnQpICogMjAwLAogICAgLy8gZXhwb25lbnRpYWwgYmFja29mZgogICAgdGltZW91dAogIH0pIHsKICAgIGNvbnN0IG9ic2VydmVySWQgPSBzdHJpbmdpZnkoWyJ3YWl0Rm9yVHJhbnNhY3Rpb25SZWNlaXB0IiwgY2xpZW50LnVpZCwgaGFzaDNdKTsKICAgIGxldCBjb3VudCA9IDA7CiAgICBsZXQgdHJhbnNhY3Rpb247CiAgICBsZXQgcmVwbGFjZWRUcmFuc2FjdGlvbjsKICAgIGxldCByZWNlaXB0OwogICAgbGV0IHJldHJ5aW5nID0gZmFsc2U7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICBpZiAodGltZW91dCkKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvcih7IGhhc2g6IGhhc2gzIH0pKSwgdGltZW91dCk7CiAgICAgIGNvbnN0IF91bm9ic2VydmUgPSBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25SZXBsYWNlZCwgcmVzb2x2ZSwgcmVqZWN0IH0sIChlbWl0KSA9PiB7CiAgICAgICAgY29uc3QgX3Vud2F0Y2ggPSBnZXRBY3Rpb24oY2xpZW50LCB3YXRjaEJsb2NrTnVtYmVyLCAid2F0Y2hCbG9ja051bWJlciIpKHsKICAgICAgICAgIGVtaXRNaXNzZWQ6IHRydWUsCiAgICAgICAgICBlbWl0T25CZWdpbjogdHJ1ZSwKICAgICAgICAgIHBvbGw6IHRydWUsCiAgICAgICAgICBwb2xsaW5nSW50ZXJ2YWwsCiAgICAgICAgICBhc3luYyBvbkJsb2NrTnVtYmVyKGJsb2NrTnVtYmVyXykgewogICAgICAgICAgICBjb25zdCBkb25lID0gKGZuKSA9PiB7CiAgICAgICAgICAgICAgX3Vud2F0Y2goKTsKICAgICAgICAgICAgICBmbigpOwogICAgICAgICAgICAgIF91bm9ic2VydmUoKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgbGV0IGJsb2NrTnVtYmVyID0gYmxvY2tOdW1iZXJfOwogICAgICAgICAgICBpZiAocmV0cnlpbmcpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoY291bnQgPiByZXRyeUNvdW50KQogICAgICAgICAgICAgIGRvbmUoKCkgPT4gZW1pdC5yZWplY3QobmV3IFdhaXRGb3JUcmFuc2FjdGlvblJlY2VpcHRUaW1lb3V0RXJyb3IoeyBoYXNoOiBoYXNoMyB9KSkpOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGlmIChyZWNlaXB0KSB7CiAgICAgICAgICAgICAgICBpZiAoY29uZmlybWF0aW9ucyA+IDEgJiYgKCFyZWNlaXB0LmJsb2NrTnVtYmVyIHx8IGJsb2NrTnVtYmVyIC0gcmVjZWlwdC5ibG9ja051bWJlciArIDFuIDwgY29uZmlybWF0aW9ucykpCiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGRvbmUoKCkgPT4gZW1pdC5yZXNvbHZlKHJlY2VpcHQpKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbikgewogICAgICAgICAgICAgICAgcmV0cnlpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgYXdhaXQgd2l0aFJldHJ5KGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24gPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRUcmFuc2FjdGlvbiwgImdldFRyYW5zYWN0aW9uIikoeyBoYXNoOiBoYXNoMyB9KTsKICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zYWN0aW9uLmJsb2NrTnVtYmVyKQogICAgICAgICAgICAgICAgICAgIGJsb2NrTnVtYmVyID0gdHJhbnNhY3Rpb24uYmxvY2tOdW1iZXI7CiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgIGRlbGF5OiByZXRyeURlbGF5LAogICAgICAgICAgICAgICAgICByZXRyeUNvdW50CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHJ5aW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJlY2VpcHQgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRUcmFuc2FjdGlvblJlY2VpcHQsICJnZXRUcmFuc2FjdGlvblJlY2VpcHQiKSh7IGhhc2g6IGhhc2gzIH0pOwogICAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25zID4gMSAmJiAoIXJlY2VpcHQuYmxvY2tOdW1iZXIgfHwgYmxvY2tOdW1iZXIgLSByZWNlaXB0LmJsb2NrTnVtYmVyICsgMW4gPCBjb25maXJtYXRpb25zKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICBkb25lKCgpID0+IGVtaXQucmVzb2x2ZShyZWNlaXB0KSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUcmFuc2FjdGlvbk5vdEZvdW5kRXJyb3IgfHwgZXJyIGluc3RhbmNlb2YgVHJhbnNhY3Rpb25SZWNlaXB0Tm90Rm91bmRFcnJvcikgewogICAgICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbikgewogICAgICAgICAgICAgICAgICByZXRyeWluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICByZXBsYWNlZFRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247CiAgICAgICAgICAgICAgICAgIHJldHJ5aW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBhd2FpdCB3aXRoUmV0cnkoKCkgPT4gZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2ssICJnZXRCbG9jayIpKHsKICAgICAgICAgICAgICAgICAgICBibG9ja051bWJlciwKICAgICAgICAgICAgICAgICAgICBpbmNsdWRlVHJhbnNhY3Rpb25zOiB0cnVlCiAgICAgICAgICAgICAgICAgIH0pLCB7CiAgICAgICAgICAgICAgICAgICAgZGVsYXk6IHJldHJ5RGVsYXksCiAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudCwKICAgICAgICAgICAgICAgICAgICBzaG91bGRSZXRyeTogKHsgZXJyb3IgfSkgPT4gZXJyb3IgaW5zdGFuY2VvZiBCbG9ja05vdEZvdW5kRXJyb3IKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIHJldHJ5aW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50VHJhbnNhY3Rpb24gPSBibG9jay50cmFuc2FjdGlvbnMuZmluZCgoeyBmcm9tLCBub25jZSB9KSA9PiBmcm9tID09PSByZXBsYWNlZFRyYW5zYWN0aW9uLmZyb20gJiYgbm9uY2UgPT09IHJlcGxhY2VkVHJhbnNhY3Rpb24ubm9uY2UpOwogICAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2VtZW50VHJhbnNhY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICByZWNlaXB0ID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0VHJhbnNhY3Rpb25SZWNlaXB0LCAiZ2V0VHJhbnNhY3Rpb25SZWNlaXB0IikoewogICAgICAgICAgICAgICAgICAgIGhhc2g6IHJlcGxhY2VtZW50VHJhbnNhY3Rpb24uaGFzaAogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbnMgPiAxICYmICghcmVjZWlwdC5ibG9ja051bWJlciB8fCBibG9ja051bWJlciAtIHJlY2VpcHQuYmxvY2tOdW1iZXIgKyAxbiA8IGNvbmZpcm1hdGlvbnMpKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgbGV0IHJlYXNvbiA9ICJyZXBsYWNlZCI7CiAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudFRyYW5zYWN0aW9uLnRvID09PSByZXBsYWNlZFRyYW5zYWN0aW9uLnRvICYmIHJlcGxhY2VtZW50VHJhbnNhY3Rpb24udmFsdWUgPT09IHJlcGxhY2VkVHJhbnNhY3Rpb24udmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICByZWFzb24gPSAicmVwcmljZWQiOwogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcGxhY2VtZW50VHJhbnNhY3Rpb24uZnJvbSA9PT0gcmVwbGFjZW1lbnRUcmFuc2FjdGlvbi50byAmJiByZXBsYWNlbWVudFRyYW5zYWN0aW9uLnZhbHVlID09PSAwbikgewogICAgICAgICAgICAgICAgICAgIHJlYXNvbiA9ICJjYW5jZWxsZWQiOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGRvbmUoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGVtaXQub25SZXBsYWNlZD8uKHsKICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbiwKICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VkVHJhbnNhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbjogcmVwbGFjZW1lbnRUcmFuc2FjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUmVjZWlwdDogcmVjZWlwdAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGVtaXQucmVzb2x2ZShyZWNlaXB0KTsKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJfKSB7CiAgICAgICAgICAgICAgICAgIGRvbmUoKCkgPT4gZW1pdC5yZWplY3QoZXJyXykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkb25lKCgpID0+IGVtaXQucmVqZWN0KGVycikpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3dhdGNoQmxvY2tzLmpzCiAgaW5pdF9zdHJpbmdpZnkoKTsKICBmdW5jdGlvbiB3YXRjaEJsb2NrcyhjbGllbnQsIHsgYmxvY2tUYWcgPSAibGF0ZXN0IiwgZW1pdE1pc3NlZCA9IGZhbHNlLCBlbWl0T25CZWdpbiA9IGZhbHNlLCBvbkJsb2NrLCBvbkVycm9yLCBpbmNsdWRlVHJhbnNhY3Rpb25zOiBpbmNsdWRlVHJhbnNhY3Rpb25zXywgcG9sbDogcG9sbF8sIHBvbGxpbmdJbnRlcnZhbCA9IGNsaWVudC5wb2xsaW5nSW50ZXJ2YWwgfSkgewogICAgY29uc3QgZW5hYmxlUG9sbGluZyA9ICgoKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgcG9sbF8gIT09ICJ1bmRlZmluZWQiKQogICAgICAgIHJldHVybiBwb2xsXzsKICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAiZmFsbGJhY2siICYmIGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0c1swXS5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pKCk7CiAgICBjb25zdCBpbmNsdWRlVHJhbnNhY3Rpb25zID0gaW5jbHVkZVRyYW5zYWN0aW9uc18gPz8gZmFsc2U7CiAgICBsZXQgcHJldkJsb2NrOwogICAgY29uc3QgcG9sbEJsb2NrcyA9ICgpID0+IHsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoQmxvY2tzIiwKICAgICAgICBjbGllbnQudWlkLAogICAgICAgIGJsb2NrVGFnLAogICAgICAgIGVtaXRNaXNzZWQsCiAgICAgICAgZW1pdE9uQmVnaW4sCiAgICAgICAgaW5jbHVkZVRyYW5zYWN0aW9ucywKICAgICAgICBwb2xsaW5nSW50ZXJ2YWwKICAgICAgXSk7CiAgICAgIHJldHVybiBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25CbG9jaywgb25FcnJvciB9LCAoZW1pdCkgPT4gcG9sbChhc3luYyAoKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGJsb2NrID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2ssICJnZXRCbG9jayIpKHsKICAgICAgICAgICAgYmxvY2tUYWcsCiAgICAgICAgICAgIGluY2x1ZGVUcmFuc2FjdGlvbnMKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGJsb2NrLm51bWJlciAmJiBwcmV2QmxvY2s/Lm51bWJlcikgewogICAgICAgICAgICBpZiAoYmxvY2subnVtYmVyID09PSBwcmV2QmxvY2subnVtYmVyKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGJsb2NrLm51bWJlciAtIHByZXZCbG9jay5udW1iZXIgPiAxICYmIGVtaXRNaXNzZWQpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBpID0gcHJldkJsb2NrPy5udW1iZXIgKyAxbjsgaSA8IGJsb2NrLm51bWJlcjsgaSsrKSB7CiAgICAgICAgICAgICAgICBjb25zdCBibG9jazIgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRCbG9jaywgImdldEJsb2NrIikoewogICAgICAgICAgICAgICAgICBibG9ja051bWJlcjogaSwKICAgICAgICAgICAgICAgICAgaW5jbHVkZVRyYW5zYWN0aW9ucwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBlbWl0Lm9uQmxvY2soYmxvY2syLCBwcmV2QmxvY2spOwogICAgICAgICAgICAgICAgcHJldkJsb2NrID0gYmxvY2syOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKAogICAgICAgICAgICAvLyBJZiBubyBwcmV2aW91cyBibG9jayBleGlzdHMsIGVtaXQuCiAgICAgICAgICAgICFwcmV2QmxvY2s/Lm51bWJlciB8fCAvLyBJZiB0aGUgYmxvY2sgdGFnIGlzICJwZW5kaW5nIiB3aXRoIG5vIGJsb2NrIG51bWJlciwgZW1pdC4KICAgICAgICAgICAgYmxvY2tUYWcgPT09ICJwZW5kaW5nIiAmJiAhYmxvY2s/Lm51bWJlciB8fCAvLyBJZiB0aGUgbmV4dCBibG9jayBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSBwcmV2aW91cyBibG9jayBudW1iZXIsIGVtaXQuCiAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZW1pdCBibG9ja3MgaW4gdGhlIHBhc3QuCiAgICAgICAgICAgIGJsb2NrLm51bWJlciAmJiBibG9jay5udW1iZXIgPiBwcmV2QmxvY2subnVtYmVyCiAgICAgICAgICApIHsKICAgICAgICAgICAgZW1pdC5vbkJsb2NrKGJsb2NrLCBwcmV2QmxvY2spOwogICAgICAgICAgICBwcmV2QmxvY2sgPSBibG9jazsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGVtaXQub25FcnJvcj8uKGVycik7CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAgZW1pdE9uQmVnaW4sCiAgICAgICAgaW50ZXJ2YWw6IHBvbGxpbmdJbnRlcnZhbAogICAgICB9KSk7CiAgICB9OwogICAgY29uc3Qgc3Vic2NyaWJlQmxvY2tzID0gKCkgPT4gewogICAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgICAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICAgIChhc3luYyAoKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydCA9ICgoKSA9PiB7CiAgICAgICAgICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIpIHsKICAgICAgICAgICAgICBjb25zdCB0cmFuc3BvcnQyID0gY2xpZW50LnRyYW5zcG9ydC50cmFuc3BvcnRzLmZpbmQoKHRyYW5zcG9ydDMpID0+IHRyYW5zcG9ydDMuY29uZmlnLnR5cGUgPT09ICJ3ZWJTb2NrZXQiKTsKICAgICAgICAgICAgICBpZiAoIXRyYW5zcG9ydDIpCiAgICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgICAgICByZXR1cm4gdHJhbnNwb3J0Mi52YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgIH0pKCk7CiAgICAgICAgICBjb25zdCB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZV8gfSA9IGF3YWl0IHRyYW5zcG9ydC5zdWJzY3JpYmUoewogICAgICAgICAgICBwYXJhbXM6IFsibmV3SGVhZHMiXSwKICAgICAgICAgICAgb25EYXRhKGRhdGEpIHsKICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBjbGllbnQuY2hhaW4/LmZvcm1hdHRlcnM/LmJsb2NrPy5mb3JtYXQgfHwgZm9ybWF0QmxvY2s7CiAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBmb3JtYXQoZGF0YS5yZXN1bHQpOwogICAgICAgICAgICAgIG9uQmxvY2soYmxvY2ssIHByZXZCbG9jayk7CiAgICAgICAgICAgICAgcHJldkJsb2NrID0gYmxvY2s7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uRXJyb3IoZXJyb3IpIHsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBvbkVycm9yPy4oZXJyKTsKICAgICAgICB9CiAgICAgIH0pKCk7CiAgICAgIHJldHVybiAoKSA9PiB1bnN1YnNjcmliZSgpOwogICAgfTsKICAgIHJldHVybiBlbmFibGVQb2xsaW5nID8gcG9sbEJsb2NrcygpIDogc3Vic2NyaWJlQmxvY2tzKCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3dhdGNoRXZlbnQuanMKICBpbml0X3N0cmluZ2lmeSgpOwogIGluaXRfYWJpKCk7CiAgaW5pdF9ycGMoKTsKICBmdW5jdGlvbiB3YXRjaEV2ZW50KGNsaWVudCwgeyBhZGRyZXNzLCBhcmdzLCBiYXRjaCA9IHRydWUsIGV2ZW50LCBldmVudHMsIGZyb21CbG9jaywgb25FcnJvciwgb25Mb2dzLCBwb2xsOiBwb2xsXywgcG9sbGluZ0ludGVydmFsID0gY2xpZW50LnBvbGxpbmdJbnRlcnZhbCwgc3RyaWN0OiBzdHJpY3RfIH0pIHsKICAgIGNvbnN0IGVuYWJsZVBvbGxpbmcgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIHBvbGxfICE9PSAidW5kZWZpbmVkIikKICAgICAgICByZXR1cm4gcG9sbF87CiAgICAgIGlmICh0eXBlb2YgZnJvbUJsb2NrID09PSAiYmlnaW50IikKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAiZmFsbGJhY2siICYmIGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0c1swXS5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pKCk7CiAgICBjb25zdCBzdHJpY3QgPSBzdHJpY3RfID8/IGZhbHNlOwogICAgY29uc3QgcG9sbEV2ZW50ID0gKCkgPT4gewogICAgICBjb25zdCBvYnNlcnZlcklkID0gc3RyaW5naWZ5KFsKICAgICAgICAid2F0Y2hFdmVudCIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGJhdGNoLAogICAgICAgIGNsaWVudC51aWQsCiAgICAgICAgZXZlbnQsCiAgICAgICAgcG9sbGluZ0ludGVydmFsLAogICAgICAgIGZyb21CbG9jawogICAgICBdKTsKICAgICAgcmV0dXJuIG9ic2VydmUob2JzZXJ2ZXJJZCwgeyBvbkxvZ3MsIG9uRXJyb3IgfSwgKGVtaXQpID0+IHsKICAgICAgICBsZXQgcHJldmlvdXNCbG9ja051bWJlcjsKICAgICAgICBpZiAoZnJvbUJsb2NrICE9PSB2b2lkIDApCiAgICAgICAgICBwcmV2aW91c0Jsb2NrTnVtYmVyID0gZnJvbUJsb2NrIC0gMW47CiAgICAgICAgbGV0IGZpbHRlcjsKICAgICAgICBsZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICAgICBjb25zdCB1bndhdGNoID0gcG9sbChhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAoIWluaXRpYWxpemVkKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgZmlsdGVyID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgY3JlYXRlRXZlbnRGaWx0ZXIsICJjcmVhdGVFdmVudEZpbHRlciIpKHsKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgZXZlbnQsCiAgICAgICAgICAgICAgICBldmVudHMsCiAgICAgICAgICAgICAgICBzdHJpY3QsCiAgICAgICAgICAgICAgICBmcm9tQmxvY2sKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBsZXQgbG9nczsKICAgICAgICAgICAgaWYgKGZpbHRlcikgewogICAgICAgICAgICAgIGxvZ3MgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRGaWx0ZXJDaGFuZ2VzLCAiZ2V0RmlsdGVyQ2hhbmdlcyIpKHsgZmlsdGVyIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnN0IGJsb2NrTnVtYmVyID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2tOdW1iZXIsICJnZXRCbG9ja051bWJlciIpKHt9KTsKICAgICAgICAgICAgICBpZiAocHJldmlvdXNCbG9ja051bWJlciAmJiBwcmV2aW91c0Jsb2NrTnVtYmVyICE9PSBibG9ja051bWJlcikgewogICAgICAgICAgICAgICAgbG9ncyA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldExvZ3MsICJnZXRMb2dzIikoewogICAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgICBldmVudCwKICAgICAgICAgICAgICAgICAgZXZlbnRzLAogICAgICAgICAgICAgICAgICBmcm9tQmxvY2s6IHByZXZpb3VzQmxvY2tOdW1iZXIgKyAxbiwKICAgICAgICAgICAgICAgICAgdG9CbG9jazogYmxvY2tOdW1iZXIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBsb2dzID0gW107CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHByZXZpb3VzQmxvY2tOdW1iZXIgPSBibG9ja051bWJlcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobG9ncy5sZW5ndGggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoYmF0Y2gpCiAgICAgICAgICAgICAgZW1pdC5vbkxvZ3MobG9ncyk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxvZyBvZiBsb2dzKQogICAgICAgICAgICAgICAgZW1pdC5vbkxvZ3MoW2xvZ10pOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGlmIChmaWx0ZXIgJiYgZXJyIGluc3RhbmNlb2YgSW52YWxpZElucHV0UnBjRXJyb3IpCiAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICAgICAgICAgZW1pdC5vbkVycm9yPy4oZXJyKTsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBlbWl0T25CZWdpbjogdHJ1ZSwKICAgICAgICAgIGludGVydmFsOiBwb2xsaW5nSW50ZXJ2YWwKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4gewogICAgICAgICAgaWYgKGZpbHRlcikKICAgICAgICAgICAgYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgdW5pbnN0YWxsRmlsdGVyLCAidW5pbnN0YWxsRmlsdGVyIikoeyBmaWx0ZXIgfSk7CiAgICAgICAgICB1bndhdGNoKCk7CiAgICAgICAgfTsKICAgICAgfSk7CiAgICB9OwogICAgY29uc3Qgc3Vic2NyaWJlRXZlbnQgPSAoKSA9PiB7CiAgICAgIGxldCBhY3RpdmUgPSB0cnVlOwogICAgICBsZXQgdW5zdWJzY3JpYmUgPSAoKSA9PiBhY3RpdmUgPSBmYWxzZTsKICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgdHJhbnNwb3J0ID0gKCgpID0+IHsKICAgICAgICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gImZhbGxiYWNrIikgewogICAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydDIgPSBjbGllbnQudHJhbnNwb3J0LnRyYW5zcG9ydHMuZmluZCgodHJhbnNwb3J0MykgPT4gdHJhbnNwb3J0My5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpOwogICAgICAgICAgICAgIGlmICghdHJhbnNwb3J0MikKICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgICAgIHJldHVybiB0cmFuc3BvcnQyLnZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgfSkoKTsKICAgICAgICAgIGNvbnN0IGV2ZW50c18gPSBldmVudHMgPz8gKGV2ZW50ID8gW2V2ZW50XSA6IHZvaWQgMCk7CiAgICAgICAgICBsZXQgdG9waWNzID0gW107CiAgICAgICAgICBpZiAoZXZlbnRzXykgewogICAgICAgICAgICBjb25zdCBlbmNvZGVkID0gZXZlbnRzXy5mbGF0TWFwKChldmVudDIpID0+IGVuY29kZUV2ZW50VG9waWNzKHsKICAgICAgICAgICAgICBhYmk6IFtldmVudDJdLAogICAgICAgICAgICAgIGV2ZW50TmFtZTogZXZlbnQyLm5hbWUsCiAgICAgICAgICAgICAgYXJncwogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIHRvcGljcyA9IFtlbmNvZGVkXTsKICAgICAgICAgICAgaWYgKGV2ZW50KQogICAgICAgICAgICAgIHRvcGljcyA9IHRvcGljc1swXTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHsgdW5zdWJzY3JpYmU6IHVuc3Vic2NyaWJlXyB9ID0gYXdhaXQgdHJhbnNwb3J0LnN1YnNjcmliZSh7CiAgICAgICAgICAgIHBhcmFtczogWyJsb2dzIiwgeyBhZGRyZXNzLCB0b3BpY3MgfV0sCiAgICAgICAgICAgIG9uRGF0YShkYXRhKSB7CiAgICAgICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgY29uc3QgbG9nID0gZGF0YS5yZXN1bHQ7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGNvbnN0IHsgZXZlbnROYW1lLCBhcmdzOiBhcmdzMiB9ID0gZGVjb2RlRXZlbnRMb2coewogICAgICAgICAgICAgICAgICBhYmk6IGV2ZW50c18gPz8gW10sCiAgICAgICAgICAgICAgICAgIGRhdGE6IGxvZy5kYXRhLAogICAgICAgICAgICAgICAgICB0b3BpY3M6IGxvZy50b3BpY3MsCiAgICAgICAgICAgICAgICAgIHN0cmljdAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2cobG9nLCB7IGFyZ3M6IGFyZ3MyLCBldmVudE5hbWUgfSk7CiAgICAgICAgICAgICAgICBvbkxvZ3MoW2Zvcm1hdHRlZF0pOwogICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgbGV0IGV2ZW50TmFtZTsKICAgICAgICAgICAgICAgIGxldCBpc1VubmFtZWQ7CiAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRGVjb2RlTG9nRGF0YU1pc21hdGNoIHx8IGVyciBpbnN0YW5jZW9mIERlY29kZUxvZ1RvcGljc01pc21hdGNoKSB7CiAgICAgICAgICAgICAgICAgIGlmIChzdHJpY3RfKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgZXZlbnROYW1lID0gZXJyLmFiaUl0ZW0ubmFtZTsKICAgICAgICAgICAgICAgICAgaXNVbm5hbWVkID0gZXJyLmFiaUl0ZW0uaW5wdXRzPy5zb21lKCh4KSA9PiAhKCJuYW1lIiBpbiB4ICYmIHgubmFtZSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TG9nKGxvZywgewogICAgICAgICAgICAgICAgICBhcmdzOiBpc1VubmFtZWQgPyBbXSA6IHt9LAogICAgICAgICAgICAgICAgICBldmVudE5hbWUKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgb25Mb2dzKFtmb3JtYXR0ZWRdKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uRXJyb3IoZXJyb3IpIHsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBvbkVycm9yPy4oZXJyKTsKICAgICAgICB9CiAgICAgIH0pKCk7CiAgICAgIHJldHVybiAoKSA9PiB1bnN1YnNjcmliZSgpOwogICAgfTsKICAgIHJldHVybiBlbmFibGVQb2xsaW5nID8gcG9sbEV2ZW50KCkgOiBzdWJzY3JpYmVFdmVudCgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy93YXRjaFBlbmRpbmdUcmFuc2FjdGlvbnMuanMKICBpbml0X3N0cmluZ2lmeSgpOwogIGZ1bmN0aW9uIHdhdGNoUGVuZGluZ1RyYW5zYWN0aW9ucyhjbGllbnQsIHsgYmF0Y2ggPSB0cnVlLCBvbkVycm9yLCBvblRyYW5zYWN0aW9ucywgcG9sbDogcG9sbF8sIHBvbGxpbmdJbnRlcnZhbCA9IGNsaWVudC5wb2xsaW5nSW50ZXJ2YWwgfSkgewogICAgY29uc3QgZW5hYmxlUG9sbGluZyA9IHR5cGVvZiBwb2xsXyAhPT0gInVuZGVmaW5lZCIgPyBwb2xsXyA6IGNsaWVudC50cmFuc3BvcnQudHlwZSAhPT0gIndlYlNvY2tldCI7CiAgICBjb25zdCBwb2xsUGVuZGluZ1RyYW5zYWN0aW9ucyA9ICgpID0+IHsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoUGVuZGluZ1RyYW5zYWN0aW9ucyIsCiAgICAgICAgY2xpZW50LnVpZCwKICAgICAgICBiYXRjaCwKICAgICAgICBwb2xsaW5nSW50ZXJ2YWwKICAgICAgXSk7CiAgICAgIHJldHVybiBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25UcmFuc2FjdGlvbnMsIG9uRXJyb3IgfSwgKGVtaXQpID0+IHsKICAgICAgICBsZXQgZmlsdGVyOwogICAgICAgIGNvbnN0IHVud2F0Y2ggPSBwb2xsKGFzeW5jICgpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICghZmlsdGVyKSB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGZpbHRlciA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGNyZWF0ZVBlbmRpbmdUcmFuc2FjdGlvbkZpbHRlciwgImNyZWF0ZVBlbmRpbmdUcmFuc2FjdGlvbkZpbHRlciIpKHt9KTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICAgIHVud2F0Y2goKTsKICAgICAgICAgICAgICAgIHRocm93IGVycjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgaGFzaGVzID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0RmlsdGVyQ2hhbmdlcywgImdldEZpbHRlckNoYW5nZXMiKSh7IGZpbHRlciB9KTsKICAgICAgICAgICAgaWYgKGhhc2hlcy5sZW5ndGggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoYmF0Y2gpCiAgICAgICAgICAgICAgZW1pdC5vblRyYW5zYWN0aW9ucyhoYXNoZXMpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgZm9yIChjb25zdCBoYXNoMyBvZiBoYXNoZXMpCiAgICAgICAgICAgICAgICBlbWl0Lm9uVHJhbnNhY3Rpb25zKFtoYXNoM10pOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGVtaXQub25FcnJvcj8uKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgZW1pdE9uQmVnaW46IHRydWUsCiAgICAgICAgICBpbnRlcnZhbDogcG9sbGluZ0ludGVydmFsCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChmaWx0ZXIpCiAgICAgICAgICAgIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHVuaW5zdGFsbEZpbHRlciwgInVuaW5zdGFsbEZpbHRlciIpKHsgZmlsdGVyIH0pOwogICAgICAgICAgdW53YXRjaCgpOwogICAgICAgIH07CiAgICAgIH0pOwogICAgfTsKICAgIGNvbnN0IHN1YnNjcmliZVBlbmRpbmdUcmFuc2FjdGlvbnMgPSAoKSA9PiB7CiAgICAgIGxldCBhY3RpdmUgPSB0cnVlOwogICAgICBsZXQgdW5zdWJzY3JpYmUgPSAoKSA9PiBhY3RpdmUgPSBmYWxzZTsKICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgeyB1bnN1YnNjcmliZTogdW5zdWJzY3JpYmVfIH0gPSBhd2FpdCBjbGllbnQudHJhbnNwb3J0LnN1YnNjcmliZSh7CiAgICAgICAgICAgIHBhcmFtczogWyJuZXdQZW5kaW5nVHJhbnNhY3Rpb25zIl0sCiAgICAgICAgICAgIG9uRGF0YShkYXRhKSB7CiAgICAgICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYXRhLnJlc3VsdDsKICAgICAgICAgICAgICBvblRyYW5zYWN0aW9ucyhbdHJhbnNhY3Rpb25dKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25FcnJvcihlcnJvcikgewogICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZV87CiAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgdW5zdWJzY3JpYmUoKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIG9uRXJyb3I/LihlcnIpOwogICAgICAgIH0KICAgICAgfSkoKTsKICAgICAgcmV0dXJuICgpID0+IHVuc3Vic2NyaWJlKCk7CiAgICB9OwogICAgcmV0dXJuIGVuYWJsZVBvbGxpbmcgPyBwb2xsUGVuZGluZ1RyYW5zYWN0aW9ucygpIDogc3Vic2NyaWJlUGVuZGluZ1RyYW5zYWN0aW9ucygpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaXdlL3BhcnNlU2l3ZU1lc3NhZ2UuanMKICBmdW5jdGlvbiBwYXJzZVNpd2VNZXNzYWdlKG1lc3NhZ2UpIHsKICAgIGNvbnN0IHsgc2NoZW1lLCBzdGF0ZW1lbnQsIC4uLnByZWZpeCB9ID0gbWVzc2FnZS5tYXRjaChwcmVmaXhSZWdleCk/Lmdyb3VwcyA/PyB7fTsKICAgIGNvbnN0IHsgY2hhaW5JZCwgZXhwaXJhdGlvblRpbWUsIGlzc3VlZEF0LCBub3RCZWZvcmUsIHJlcXVlc3RJZCwgLi4uc3VmZml4IH0gPSBtZXNzYWdlLm1hdGNoKHN1ZmZpeFJlZ2V4KT8uZ3JvdXBzID8/IHt9OwogICAgY29uc3QgcmVzb3VyY2VzID0gbWVzc2FnZS5zcGxpdCgiUmVzb3VyY2VzOiIpWzFdPy5zcGxpdCgiXG4tICIpLnNsaWNlKDEpOwogICAgcmV0dXJuIHsKICAgICAgLi4ucHJlZml4LAogICAgICAuLi5zdWZmaXgsCiAgICAgIC4uLmNoYWluSWQgPyB7IGNoYWluSWQ6IE51bWJlcihjaGFpbklkKSB9IDoge30sCiAgICAgIC4uLmV4cGlyYXRpb25UaW1lID8geyBleHBpcmF0aW9uVGltZTogbmV3IERhdGUoZXhwaXJhdGlvblRpbWUpIH0gOiB7fSwKICAgICAgLi4uaXNzdWVkQXQgPyB7IGlzc3VlZEF0OiBuZXcgRGF0ZShpc3N1ZWRBdCkgfSA6IHt9LAogICAgICAuLi5ub3RCZWZvcmUgPyB7IG5vdEJlZm9yZTogbmV3IERhdGUobm90QmVmb3JlKSB9IDoge30sCiAgICAgIC4uLnJlcXVlc3RJZCA/IHsgcmVxdWVzdElkIH0gOiB7fSwKICAgICAgLi4ucmVzb3VyY2VzID8geyByZXNvdXJjZXMgfSA6IHt9LAogICAgICAuLi5zY2hlbWUgPyB7IHNjaGVtZSB9IDoge30sCiAgICAgIC4uLnN0YXRlbWVudCA/IHsgc3RhdGVtZW50IH0gOiB7fQogICAgfTsKICB9CiAgdmFyIHByZWZpeFJlZ2V4ID0gL14oPzooPzxzY2hlbWU+W2EtekEtWl1bYS16QS1aMC05Ky0uXSopOlwvXC8pPyg/PGRvbWFpbj5bYS16QS1aMC05Ky0uXSooPzo6WzAtOV17MSw1fSk/KSAoPzp3YW50cyB5b3UgdG8gc2lnbiBpbiB3aXRoIHlvdXIgRXRoZXJldW0gYWNjb3VudDpcbikoPzxhZGRyZXNzPjB4W2EtZkEtRjAtOV17NDB9KVxuXG4oPzooPzxzdGF0ZW1lbnQ+LiopXG5cbik/LzsKICB2YXIgc3VmZml4UmVnZXggPSAvKD86VVJJOiAoPzx1cmk+LispKVxuKD86VmVyc2lvbjogKD88dmVyc2lvbj4uKykpXG4oPzpDaGFpbiBJRDogKD88Y2hhaW5JZD5cZCspKVxuKD86Tm9uY2U6ICg/PG5vbmNlPlthLXpBLVowLTldKykpXG4oPzpJc3N1ZWQgQXQ6ICg/PGlzc3VlZEF0Pi4rKSkoPzpcbkV4cGlyYXRpb24gVGltZTogKD88ZXhwaXJhdGlvblRpbWU+LispKT8oPzpcbk5vdCBCZWZvcmU6ICg/PG5vdEJlZm9yZT4uKykpPyg/OlxuUmVxdWVzdCBJRDogKD88cmVxdWVzdElkPi4rKSk/LzsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaXdlL3ZhbGlkYXRlU2l3ZU1lc3NhZ2UuanMKICBpbml0X2lzQWRkcmVzc0VxdWFsKCk7CiAgZnVuY3Rpb24gdmFsaWRhdGVTaXdlTWVzc2FnZShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGRvbWFpbiwgbWVzc2FnZSwgbm9uY2UsIHNjaGVtZSwgdGltZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpIH0gPSBwYXJhbWV0ZXJzOwogICAgaWYgKGRvbWFpbiAmJiBtZXNzYWdlLmRvbWFpbiAhPT0gZG9tYWluKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAobm9uY2UgJiYgbWVzc2FnZS5ub25jZSAhPT0gbm9uY2UpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChzY2hlbWUgJiYgbWVzc2FnZS5zY2hlbWUgIT09IHNjaGVtZSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKG1lc3NhZ2UuZXhwaXJhdGlvblRpbWUgJiYgdGltZSA+PSBtZXNzYWdlLmV4cGlyYXRpb25UaW1lKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAobWVzc2FnZS5ub3RCZWZvcmUgJiYgdGltZSA8IG1lc3NhZ2Uubm90QmVmb3JlKQogICAgICByZXR1cm4gZmFsc2U7CiAgICB0cnkgewogICAgICBpZiAoIW1lc3NhZ2UuYWRkcmVzcykKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChhZGRyZXNzICYmICFpc0FkZHJlc3NFcXVhbChtZXNzYWdlLmFkZHJlc3MsIGFkZHJlc3MpKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gY2F0Y2ggewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9zaXdlL3ZlcmlmeVNpd2VNZXNzYWdlLmpzCiAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5U2l3ZU1lc3NhZ2UoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGRvbWFpbiwgbWVzc2FnZSwgbm9uY2UsIHNjaGVtZSwgc2lnbmF0dXJlLCB0aW1lID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCksIC4uLmNhbGxSZXF1ZXN0IH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgcGFyc2VkID0gcGFyc2VTaXdlTWVzc2FnZShtZXNzYWdlKTsKICAgIGlmICghcGFyc2VkLmFkZHJlc3MpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZVNpd2VNZXNzYWdlKHsKICAgICAgYWRkcmVzcywKICAgICAgZG9tYWluLAogICAgICBtZXNzYWdlOiBwYXJzZWQsCiAgICAgIG5vbmNlLAogICAgICBzY2hlbWUsCiAgICAgIHRpbWUKICAgIH0pOwogICAgaWYgKCFpc1ZhbGlkKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBjb25zdCBoYXNoMyA9IGhhc2hNZXNzYWdlKG1lc3NhZ2UpOwogICAgcmV0dXJuIHZlcmlmeUhhc2gyKGNsaWVudCwgewogICAgICBhZGRyZXNzOiBwYXJzZWQuYWRkcmVzcywKICAgICAgaGFzaDogaGFzaDMsCiAgICAgIHNpZ25hdHVyZSwKICAgICAgLi4uY2FsbFJlcXVlc3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2RlY29yYXRvcnMvcHVibGljLmpzCiAgZnVuY3Rpb24gcHVibGljQWN0aW9ucyhjbGllbnQpIHsKICAgIHJldHVybiB7CiAgICAgIGNhbGw6IChhcmdzKSA9PiBjYWxsKGNsaWVudCwgYXJncyksCiAgICAgIGNyZWF0ZUJsb2NrRmlsdGVyOiAoKSA9PiBjcmVhdGVCbG9ja0ZpbHRlcihjbGllbnQpLAogICAgICBjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyOiAoYXJncykgPT4gY3JlYXRlQ29udHJhY3RFdmVudEZpbHRlcihjbGllbnQsIGFyZ3MpLAogICAgICBjcmVhdGVFdmVudEZpbHRlcjogKGFyZ3MpID0+IGNyZWF0ZUV2ZW50RmlsdGVyKGNsaWVudCwgYXJncyksCiAgICAgIGNyZWF0ZVBlbmRpbmdUcmFuc2FjdGlvbkZpbHRlcjogKCkgPT4gY3JlYXRlUGVuZGluZ1RyYW5zYWN0aW9uRmlsdGVyKGNsaWVudCksCiAgICAgIGVzdGltYXRlQ29udHJhY3RHYXM6IChhcmdzKSA9PiBlc3RpbWF0ZUNvbnRyYWN0R2FzKGNsaWVudCwgYXJncyksCiAgICAgIGVzdGltYXRlR2FzOiAoYXJncykgPT4gZXN0aW1hdGVHYXMoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0QmFsYW5jZTogKGFyZ3MpID0+IGdldEJhbGFuY2UoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0QmxvYkJhc2VGZWU6ICgpID0+IGdldEJsb2JCYXNlRmVlKGNsaWVudCksCiAgICAgIGdldEJsb2NrOiAoYXJncykgPT4gZ2V0QmxvY2soY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0QmxvY2tOdW1iZXI6IChhcmdzKSA9PiBnZXRCbG9ja051bWJlcihjbGllbnQsIGFyZ3MpLAogICAgICBnZXRCbG9ja1RyYW5zYWN0aW9uQ291bnQ6IChhcmdzKSA9PiBnZXRCbG9ja1RyYW5zYWN0aW9uQ291bnQoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0Qnl0ZWNvZGU6IChhcmdzKSA9PiBnZXRDb2RlKGNsaWVudCwgYXJncyksCiAgICAgIGdldENoYWluSWQ6ICgpID0+IGdldENoYWluSWQoY2xpZW50KSwKICAgICAgZ2V0Q29kZTogKGFyZ3MpID0+IGdldENvZGUoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0Q29udHJhY3RFdmVudHM6IChhcmdzKSA9PiBnZXRDb250cmFjdEV2ZW50cyhjbGllbnQsIGFyZ3MpLAogICAgICBnZXRFaXA3MTJEb21haW46IChhcmdzKSA9PiBnZXRFaXA3MTJEb21haW4oY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RW5zQWRkcmVzczogKGFyZ3MpID0+IGdldEVuc0FkZHJlc3MoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RW5zQXZhdGFyOiAoYXJncykgPT4gZ2V0RW5zQXZhdGFyKGNsaWVudCwgYXJncyksCiAgICAgIGdldEVuc05hbWU6IChhcmdzKSA9PiBnZXRFbnNOYW1lKGNsaWVudCwgYXJncyksCiAgICAgIGdldEVuc1Jlc29sdmVyOiAoYXJncykgPT4gZ2V0RW5zUmVzb2x2ZXIoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RW5zVGV4dDogKGFyZ3MpID0+IGdldEVuc1RleHQoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RmVlSGlzdG9yeTogKGFyZ3MpID0+IGdldEZlZUhpc3RvcnkoY2xpZW50LCBhcmdzKSwKICAgICAgZXN0aW1hdGVGZWVzUGVyR2FzOiAoYXJncykgPT4gZXN0aW1hdGVGZWVzUGVyR2FzKGNsaWVudCwgYXJncyksCiAgICAgIGdldEZpbHRlckNoYW5nZXM6IChhcmdzKSA9PiBnZXRGaWx0ZXJDaGFuZ2VzKGNsaWVudCwgYXJncyksCiAgICAgIGdldEZpbHRlckxvZ3M6IChhcmdzKSA9PiBnZXRGaWx0ZXJMb2dzKGNsaWVudCwgYXJncyksCiAgICAgIGdldEdhc1ByaWNlOiAoKSA9PiBnZXRHYXNQcmljZShjbGllbnQpLAogICAgICBnZXRMb2dzOiAoYXJncykgPT4gZ2V0TG9ncyhjbGllbnQsIGFyZ3MpLAogICAgICBnZXRQcm9vZjogKGFyZ3MpID0+IGdldFByb29mKGNsaWVudCwgYXJncyksCiAgICAgIGVzdGltYXRlTWF4UHJpb3JpdHlGZWVQZXJHYXM6IChhcmdzKSA9PiBlc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzKGNsaWVudCwgYXJncyksCiAgICAgIGdldFN0b3JhZ2VBdDogKGFyZ3MpID0+IGdldFN0b3JhZ2VBdChjbGllbnQsIGFyZ3MpLAogICAgICBnZXRUcmFuc2FjdGlvbjogKGFyZ3MpID0+IGdldFRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgIGdldFRyYW5zYWN0aW9uQ29uZmlybWF0aW9uczogKGFyZ3MpID0+IGdldFRyYW5zYWN0aW9uQ29uZmlybWF0aW9ucyhjbGllbnQsIGFyZ3MpLAogICAgICBnZXRUcmFuc2FjdGlvbkNvdW50OiAoYXJncykgPT4gZ2V0VHJhbnNhY3Rpb25Db3VudChjbGllbnQsIGFyZ3MpLAogICAgICBnZXRUcmFuc2FjdGlvblJlY2VpcHQ6IChhcmdzKSA9PiBnZXRUcmFuc2FjdGlvblJlY2VpcHQoY2xpZW50LCBhcmdzKSwKICAgICAgbXVsdGljYWxsOiAoYXJncykgPT4gbXVsdGljYWxsKGNsaWVudCwgYXJncyksCiAgICAgIHByZXBhcmVUcmFuc2FjdGlvblJlcXVlc3Q6IChhcmdzKSA9PiBwcmVwYXJlVHJhbnNhY3Rpb25SZXF1ZXN0KGNsaWVudCwgYXJncyksCiAgICAgIHJlYWRDb250cmFjdDogKGFyZ3MpID0+IHJlYWRDb250cmFjdChjbGllbnQsIGFyZ3MpLAogICAgICBzZW5kUmF3VHJhbnNhY3Rpb246IChhcmdzKSA9PiBzZW5kUmF3VHJhbnNhY3Rpb24oY2xpZW50LCBhcmdzKSwKICAgICAgc2ltdWxhdGVDb250cmFjdDogKGFyZ3MpID0+IHNpbXVsYXRlQ29udHJhY3QoY2xpZW50LCBhcmdzKSwKICAgICAgdmVyaWZ5TWVzc2FnZTogKGFyZ3MpID0+IHZlcmlmeU1lc3NhZ2UyKGNsaWVudCwgYXJncyksCiAgICAgIHZlcmlmeVNpd2VNZXNzYWdlOiAoYXJncykgPT4gdmVyaWZ5U2l3ZU1lc3NhZ2UoY2xpZW50LCBhcmdzKSwKICAgICAgdmVyaWZ5VHlwZWREYXRhOiAoYXJncykgPT4gdmVyaWZ5VHlwZWREYXRhMihjbGllbnQsIGFyZ3MpLAogICAgICB1bmluc3RhbGxGaWx0ZXI6IChhcmdzKSA9PiB1bmluc3RhbGxGaWx0ZXIoY2xpZW50LCBhcmdzKSwKICAgICAgd2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdDogKGFyZ3MpID0+IHdhaXRGb3JUcmFuc2FjdGlvblJlY2VpcHQoY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hCbG9ja3M6IChhcmdzKSA9PiB3YXRjaEJsb2NrcyhjbGllbnQsIGFyZ3MpLAogICAgICB3YXRjaEJsb2NrTnVtYmVyOiAoYXJncykgPT4gd2F0Y2hCbG9ja051bWJlcihjbGllbnQsIGFyZ3MpLAogICAgICB3YXRjaENvbnRyYWN0RXZlbnQ6IChhcmdzKSA9PiB3YXRjaENvbnRyYWN0RXZlbnQoY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hFdmVudDogKGFyZ3MpID0+IHdhdGNoRXZlbnQoY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hQZW5kaW5nVHJhbnNhY3Rpb25zOiAoYXJncykgPT4gd2F0Y2hQZW5kaW5nVHJhbnNhY3Rpb25zKGNsaWVudCwgYXJncykKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvY3JlYXRlUHVibGljQ2xpZW50LmpzCiAgZnVuY3Rpb24gY3JlYXRlUHVibGljQ2xpZW50KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsga2V5ID0gInB1YmxpYyIsIG5hbWUgPSAiUHVibGljIENsaWVudCIgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQoewogICAgICAuLi5wYXJhbWV0ZXJzLAogICAgICBrZXksCiAgICAgIG5hbWUsCiAgICAgIHR5cGU6ICJwdWJsaWNDbGllbnQiCiAgICB9KTsKICAgIHJldHVybiBjbGllbnQuZXh0ZW5kKHB1YmxpY0FjdGlvbnMpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvZHJvcFRyYW5zYWN0aW9uLmpzCiAgYXN5bmMgZnVuY3Rpb24gZHJvcFRyYW5zYWN0aW9uKGNsaWVudCwgeyBoYXNoOiBoYXNoMyB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X2Ryb3BUcmFuc2FjdGlvbmAsCiAgICAgIHBhcmFtczogW2hhc2gzXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9kdW1wU3RhdGUuanMKICBhc3luYyBmdW5jdGlvbiBkdW1wU3RhdGUoY2xpZW50KSB7CiAgICByZXR1cm4gY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9kdW1wU3RhdGVgCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L2dldEF1dG9taW5lLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0QXV0b21pbmUoY2xpZW50KSB7CiAgICBpZiAoY2xpZW50Lm1vZGUgPT09ICJnYW5hY2hlIikKICAgICAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfbWluaW5nIgogICAgICB9KTsKICAgIHJldHVybiBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X2dldEF1dG9taW5lYAogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9nZXRUeHBvb2xDb250ZW50LmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0VHhwb29sQ29udGVudChjbGllbnQpIHsKICAgIHJldHVybiBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogInR4cG9vbF9jb250ZW50IgogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9nZXRUeHBvb2xTdGF0dXMuanMKICBpbml0X2Zyb21IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUeHBvb2xTdGF0dXMoY2xpZW50KSB7CiAgICBjb25zdCB7IHBlbmRpbmcsIHF1ZXVlZCB9ID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ0eHBvb2xfc3RhdHVzIgogICAgfSk7CiAgICByZXR1cm4gewogICAgICBwZW5kaW5nOiBoZXhUb051bWJlcihwZW5kaW5nKSwKICAgICAgcXVldWVkOiBoZXhUb051bWJlcihxdWV1ZWQpCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvaW1wZXJzb25hdGVBY2NvdW50LmpzCiAgYXN5bmMgZnVuY3Rpb24gaW1wZXJzb25hdGVBY2NvdW50KGNsaWVudCwgeyBhZGRyZXNzIH0pIHsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiBgJHtjbGllbnQubW9kZX1faW1wZXJzb25hdGVBY2NvdW50YCwKICAgICAgcGFyYW1zOiBbYWRkcmVzc10KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvaW5jcmVhc2VUaW1lLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGluY3JlYXNlVGltZShjbGllbnQsIHsgc2Vjb25kcyB9KSB7CiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldm1faW5jcmVhc2VUaW1lIiwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoc2Vjb25kcyldCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L2luc3BlY3RUeHBvb2wuanMKICBhc3luYyBmdW5jdGlvbiBpbnNwZWN0VHhwb29sKGNsaWVudCkgewogICAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAidHhwb29sX2luc3BlY3QiCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L2xvYWRTdGF0ZS5qcwogIGFzeW5jIGZ1bmN0aW9uIGxvYWRTdGF0ZShjbGllbnQsIHsgc3RhdGUgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9sb2FkU3RhdGVgLAogICAgICBwYXJhbXM6IFtzdGF0ZV0KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvbWluZS5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBtaW5lKGNsaWVudCwgeyBibG9ja3MsIGludGVydmFsIH0pIHsKICAgIGlmIChjbGllbnQubW9kZSA9PT0gImdhbmFjaGUiKQogICAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXZtX21pbmUiLAogICAgICAgIHBhcmFtczogW3sgYmxvY2tzOiBudW1iZXJUb0hleChibG9ja3MpIH1dCiAgICAgIH0pOwogICAgZWxzZQogICAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiBgJHtjbGllbnQubW9kZX1fbWluZWAsCiAgICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoYmxvY2tzKSwgbnVtYmVyVG9IZXgoaW50ZXJ2YWwgfHwgMCldCiAgICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvcmVtb3ZlQmxvY2tUaW1lc3RhbXBJbnRlcnZhbC5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUJsb2NrVGltZXN0YW1wSW50ZXJ2YWwoY2xpZW50KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X3JlbW92ZUJsb2NrVGltZXN0YW1wSW50ZXJ2YWxgCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3Jlc2V0LmpzCiAgYXN5bmMgZnVuY3Rpb24gcmVzZXQoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBqc29uUnBjVXJsIH0gPSB7fSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9yZXNldGAsCiAgICAgIHBhcmFtczogW3sgZm9ya2luZzogeyBibG9ja051bWJlcjogTnVtYmVyKGJsb2NrTnVtYmVyKSwganNvblJwY1VybCB9IH1dCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3JldmVydC5qcwogIGFzeW5jIGZ1bmN0aW9uIHJldmVydChjbGllbnQsIHsgaWQgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldm1fcmV2ZXJ0IiwKICAgICAgcGFyYW1zOiBbaWRdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NlbmRVbnNpZ25lZFRyYW5zYWN0aW9uLmpzCiAgaW5pdF9leHRyYWN0KCk7CiAgaW5pdF90cmFuc2FjdGlvblJlcXVlc3QoKTsKICBhc3luYyBmdW5jdGlvbiBzZW5kVW5zaWduZWRUcmFuc2FjdGlvbihjbGllbnQsIGFyZ3MpIHsKICAgIGNvbnN0IHsgYWNjZXNzTGlzdCwgZGF0YSwgZnJvbSwgZ2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbm9uY2UsIHRvLCB2YWx1ZSwgLi4ucmVzdCB9ID0gYXJnczsKICAgIGNvbnN0IGNoYWluRm9ybWF0ID0gY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzPy50cmFuc2FjdGlvblJlcXVlc3Q/LmZvcm1hdDsKICAgIGNvbnN0IGZvcm1hdCA9IGNoYWluRm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgIGNvbnN0IHJlcXVlc3QgPSBmb3JtYXQoewogICAgICAvLyBQaWNrIG91dCBleHRyYSBkYXRhIHRoYXQgbWlnaHQgZXhpc3Qgb24gdGhlIGNoYWluJ3MgdHJhbnNhY3Rpb24gcmVxdWVzdCB0eXBlLgogICAgICAuLi5leHRyYWN0KHJlc3QsIHsgZm9ybWF0OiBjaGFpbkZvcm1hdCB9KSwKICAgICAgYWNjZXNzTGlzdCwKICAgICAgZGF0YSwKICAgICAgZnJvbSwKICAgICAgZ2FzLAogICAgICBnYXNQcmljZSwKICAgICAgbWF4RmVlUGVyR2FzLAogICAgICBtYXhQcmlvcml0eUZlZVBlckdhcywKICAgICAgbm9uY2UsCiAgICAgIHRvLAogICAgICB2YWx1ZQogICAgfSk7CiAgICBjb25zdCBoYXNoMyA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX3NlbmRVbnNpZ25lZFRyYW5zYWN0aW9uIiwKICAgICAgcGFyYW1zOiBbcmVxdWVzdF0KICAgIH0pOwogICAgcmV0dXJuIGhhc2gzOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc2V0QXV0b21pbmUuanMKICBhc3luYyBmdW5jdGlvbiBzZXRBdXRvbWluZShjbGllbnQsIGVuYWJsZWQpIHsKICAgIGlmIChjbGllbnQubW9kZSA9PT0gImdhbmFjaGUiKSB7CiAgICAgIGlmIChlbmFibGVkKQogICAgICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsgbWV0aG9kOiAibWluZXJfc3RhcnQiIH0pOwogICAgICBlbHNlCiAgICAgICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoeyBtZXRob2Q6ICJtaW5lcl9zdG9wIiB9KTsKICAgIH0gZWxzZQogICAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXZtX3NldEF1dG9taW5lIiwKICAgICAgICBwYXJhbXM6IFtlbmFibGVkXQogICAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldEJhbGFuY2UuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2V0QmFsYW5jZShjbGllbnQsIHsgYWRkcmVzcywgdmFsdWUgfSkgewogICAgaWYgKGNsaWVudC5tb2RlID09PSAiZ2FuYWNoZSIpCiAgICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldm1fc2V0QWNjb3VudEJhbGFuY2UiLAogICAgICAgIHBhcmFtczogW2FkZHJlc3MsIG51bWJlclRvSGV4KHZhbHVlKV0KICAgICAgfSk7CiAgICBlbHNlCiAgICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRCYWxhbmNlYCwKICAgICAgICBwYXJhbXM6IFthZGRyZXNzLCBudW1iZXJUb0hleCh2YWx1ZSldCiAgICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc2V0QmxvY2tHYXNMaW1pdC5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBzZXRCbG9ja0dhc0xpbWl0KGNsaWVudCwgeyBnYXNMaW1pdCB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV2bV9zZXRCbG9ja0dhc0xpbWl0IiwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoZ2FzTGltaXQpXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRCbG9ja1RpbWVzdGFtcEludGVydmFsLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0QmxvY2tUaW1lc3RhbXBJbnRlcnZhbChjbGllbnQsIHsgaW50ZXJ2YWwgfSkgewogICAgY29uc3QgaW50ZXJ2YWxfID0gKCgpID0+IHsKICAgICAgaWYgKGNsaWVudC5tb2RlID09PSAiaGFyZGhhdCIpCiAgICAgICAgcmV0dXJuIGludGVydmFsICogMWUzOwogICAgICByZXR1cm4gaW50ZXJ2YWw7CiAgICB9KSgpOwogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRCbG9ja1RpbWVzdGFtcEludGVydmFsYCwKICAgICAgcGFyYW1zOiBbaW50ZXJ2YWxfXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRDb2RlLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0Q29kZShjbGllbnQsIHsgYWRkcmVzcywgYnl0ZWNvZGUgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRDb2RlYCwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYnl0ZWNvZGVdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldENvaW5iYXNlLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0Q29pbmJhc2UoY2xpZW50LCB7IGFkZHJlc3MgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRDb2luYmFzZWAsCiAgICAgIHBhcmFtczogW2FkZHJlc3NdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldEludGVydmFsTWluaW5nLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0SW50ZXJ2YWxNaW5pbmcoY2xpZW50LCB7IGludGVydmFsIH0pIHsKICAgIGNvbnN0IGludGVydmFsXyA9ICgoKSA9PiB7CiAgICAgIGlmIChjbGllbnQubW9kZSA9PT0gImhhcmRoYXQiKQogICAgICAgIHJldHVybiBpbnRlcnZhbCAqIDFlMzsKICAgICAgcmV0dXJuIGludGVydmFsOwogICAgfSkoKTsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXZtX3NldEludGVydmFsTWluaW5nIiwKICAgICAgcGFyYW1zOiBbaW50ZXJ2YWxfXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRMb2dnaW5nRW5hYmxlZC5qcwogIGFzeW5jIGZ1bmN0aW9uIHNldExvZ2dpbmdFbmFibGVkKGNsaWVudCwgZW5hYmxlZCkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRMb2dnaW5nRW5hYmxlZGAsCiAgICAgIHBhcmFtczogW2VuYWJsZWRdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldE1pbkdhc1ByaWNlLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNldE1pbkdhc1ByaWNlKGNsaWVudCwgeyBnYXNQcmljZSB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X3NldE1pbkdhc1ByaWNlYCwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoZ2FzUHJpY2UpXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXROZXh0QmxvY2tCYXNlRmVlUGVyR2FzLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNldE5leHRCbG9ja0Jhc2VGZWVQZXJHYXMoY2xpZW50LCB7IGJhc2VGZWVQZXJHYXMgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXROZXh0QmxvY2tCYXNlRmVlUGVyR2FzYCwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoYmFzZUZlZVBlckdhcyldCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldE5leHRCbG9ja1RpbWVzdGFtcC5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBzZXROZXh0QmxvY2tUaW1lc3RhbXAoY2xpZW50LCB7IHRpbWVzdGFtcCB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV2bV9zZXROZXh0QmxvY2tUaW1lc3RhbXAiLAogICAgICBwYXJhbXM6IFtudW1iZXJUb0hleCh0aW1lc3RhbXApXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXROb25jZS5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBzZXROb25jZShjbGllbnQsIHsgYWRkcmVzcywgbm9uY2UgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXROb25jZWAsCiAgICAgIHBhcmFtczogW2FkZHJlc3MsIG51bWJlclRvSGV4KG5vbmNlKV0KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc2V0UnBjVXJsLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0UnBjVXJsKGNsaWVudCwganNvblJwY1VybCkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRScGNVcmxgLAogICAgICBwYXJhbXM6IFtqc29uUnBjVXJsXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRTdG9yYWdlQXQuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2V0U3RvcmFnZUF0KGNsaWVudCwgeyBhZGRyZXNzLCBpbmRleDogaW5kZXgyLCB2YWx1ZSB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X3NldFN0b3JhZ2VBdGAsCiAgICAgIHBhcmFtczogWwogICAgICAgIGFkZHJlc3MsCiAgICAgICAgdHlwZW9mIGluZGV4MiA9PT0gIm51bWJlciIgPyBudW1iZXJUb0hleChpbmRleDIpIDogaW5kZXgyLAogICAgICAgIHZhbHVlCiAgICAgIF0KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc25hcHNob3QuanMKICBhc3luYyBmdW5jdGlvbiBzbmFwc2hvdChjbGllbnQpIHsKICAgIHJldHVybiBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV2bV9zbmFwc2hvdCIKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc3RvcEltcGVyc29uYXRpbmdBY2NvdW50LmpzCiAgYXN5bmMgZnVuY3Rpb24gc3RvcEltcGVyc29uYXRpbmdBY2NvdW50KGNsaWVudCwgeyBhZGRyZXNzIH0pIHsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiBgJHtjbGllbnQubW9kZX1fc3RvcEltcGVyc29uYXRpbmdBY2NvdW50YCwKICAgICAgcGFyYW1zOiBbYWRkcmVzc10KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2RlY29yYXRvcnMvdGVzdC5qcwogIGZ1bmN0aW9uIHRlc3RBY3Rpb25zKHsgbW9kZTogbW9kZTIgfSkgewogICAgcmV0dXJuIChjbGllbnRfKSA9PiB7CiAgICAgIGNvbnN0IGNsaWVudCA9IGNsaWVudF8uZXh0ZW5kKCgpID0+ICh7CiAgICAgICAgbW9kZTogbW9kZTIKICAgICAgfSkpOwogICAgICByZXR1cm4gewogICAgICAgIGRyb3BUcmFuc2FjdGlvbjogKGFyZ3MpID0+IGRyb3BUcmFuc2FjdGlvbihjbGllbnQsIGFyZ3MpLAogICAgICAgIGR1bXBTdGF0ZTogKCkgPT4gZHVtcFN0YXRlKGNsaWVudCksCiAgICAgICAgZ2V0QXV0b21pbmU6ICgpID0+IGdldEF1dG9taW5lKGNsaWVudCksCiAgICAgICAgZ2V0VHhwb29sQ29udGVudDogKCkgPT4gZ2V0VHhwb29sQ29udGVudChjbGllbnQpLAogICAgICAgIGdldFR4cG9vbFN0YXR1czogKCkgPT4gZ2V0VHhwb29sU3RhdHVzKGNsaWVudCksCiAgICAgICAgaW1wZXJzb25hdGVBY2NvdW50OiAoYXJncykgPT4gaW1wZXJzb25hdGVBY2NvdW50KGNsaWVudCwgYXJncyksCiAgICAgICAgaW5jcmVhc2VUaW1lOiAoYXJncykgPT4gaW5jcmVhc2VUaW1lKGNsaWVudCwgYXJncyksCiAgICAgICAgaW5zcGVjdFR4cG9vbDogKCkgPT4gaW5zcGVjdFR4cG9vbChjbGllbnQpLAogICAgICAgIGxvYWRTdGF0ZTogKGFyZ3MpID0+IGxvYWRTdGF0ZShjbGllbnQsIGFyZ3MpLAogICAgICAgIG1pbmU6IChhcmdzKSA9PiBtaW5lKGNsaWVudCwgYXJncyksCiAgICAgICAgcmVtb3ZlQmxvY2tUaW1lc3RhbXBJbnRlcnZhbDogKCkgPT4gcmVtb3ZlQmxvY2tUaW1lc3RhbXBJbnRlcnZhbChjbGllbnQpLAogICAgICAgIHJlc2V0OiAoYXJncykgPT4gcmVzZXQoY2xpZW50LCBhcmdzKSwKICAgICAgICByZXZlcnQ6IChhcmdzKSA9PiByZXZlcnQoY2xpZW50LCBhcmdzKSwKICAgICAgICBzZW5kVW5zaWduZWRUcmFuc2FjdGlvbjogKGFyZ3MpID0+IHNlbmRVbnNpZ25lZFRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0QXV0b21pbmU6IChhcmdzKSA9PiBzZXRBdXRvbWluZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldEJhbGFuY2U6IChhcmdzKSA9PiBzZXRCYWxhbmNlKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0QmxvY2tHYXNMaW1pdDogKGFyZ3MpID0+IHNldEJsb2NrR2FzTGltaXQoY2xpZW50LCBhcmdzKSwKICAgICAgICBzZXRCbG9ja1RpbWVzdGFtcEludGVydmFsOiAoYXJncykgPT4gc2V0QmxvY2tUaW1lc3RhbXBJbnRlcnZhbChjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldENvZGU6IChhcmdzKSA9PiBzZXRDb2RlKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0Q29pbmJhc2U6IChhcmdzKSA9PiBzZXRDb2luYmFzZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldEludGVydmFsTWluaW5nOiAoYXJncykgPT4gc2V0SW50ZXJ2YWxNaW5pbmcoY2xpZW50LCBhcmdzKSwKICAgICAgICBzZXRMb2dnaW5nRW5hYmxlZDogKGFyZ3MpID0+IHNldExvZ2dpbmdFbmFibGVkKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0TWluR2FzUHJpY2U6IChhcmdzKSA9PiBzZXRNaW5HYXNQcmljZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldE5leHRCbG9ja0Jhc2VGZWVQZXJHYXM6IChhcmdzKSA9PiBzZXROZXh0QmxvY2tCYXNlRmVlUGVyR2FzKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0TmV4dEJsb2NrVGltZXN0YW1wOiAoYXJncykgPT4gc2V0TmV4dEJsb2NrVGltZXN0YW1wKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0Tm9uY2U6IChhcmdzKSA9PiBzZXROb25jZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldFJwY1VybDogKGFyZ3MpID0+IHNldFJwY1VybChjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldFN0b3JhZ2VBdDogKGFyZ3MpID0+IHNldFN0b3JhZ2VBdChjbGllbnQsIGFyZ3MpLAogICAgICAgIHNuYXBzaG90OiAoKSA9PiBzbmFwc2hvdChjbGllbnQpLAogICAgICAgIHN0b3BJbXBlcnNvbmF0aW5nQWNjb3VudDogKGFyZ3MpID0+IHN0b3BJbXBlcnNvbmF0aW5nQWNjb3VudChjbGllbnQsIGFyZ3MpCiAgICAgIH07CiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2NyZWF0ZVRlc3RDbGllbnQuanMKICBmdW5jdGlvbiBjcmVhdGVUZXN0Q2xpZW50KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsga2V5ID0gInRlc3QiLCBuYW1lID0gIlRlc3QgQ2xpZW50IiwgbW9kZTogbW9kZTIgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQoewogICAgICAuLi5wYXJhbWV0ZXJzLAogICAgICBrZXksCiAgICAgIG5hbWUsCiAgICAgIHR5cGU6ICJ0ZXN0Q2xpZW50IgogICAgfSk7CiAgICByZXR1cm4gY2xpZW50LmV4dGVuZCgoY29uZmlnKSA9PiAoewogICAgICBtb2RlOiBtb2RlMiwKICAgICAgLi4udGVzdEFjdGlvbnMoeyBtb2RlOiBtb2RlMiB9KShjb25maWcpCiAgICB9KSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L2RlcGxveUNvbnRyYWN0LmpzCiAgaW5pdF9lbmNvZGVEZXBsb3lEYXRhKCk7CiAgZnVuY3Rpb24gZGVwbG95Q29udHJhY3Qod2FsbGV0Q2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYXJncywgYnl0ZWNvZGUsIC4uLnJlcXVlc3QgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjYWxsZGF0YSA9IGVuY29kZURlcGxveURhdGEoeyBhYmk6IGFiaTIsIGFyZ3MsIGJ5dGVjb2RlIH0pOwogICAgcmV0dXJuIHNlbmRUcmFuc2FjdGlvbih3YWxsZXRDbGllbnQsIHsKICAgICAgLi4ucmVxdWVzdCwKICAgICAgZGF0YTogY2FsbGRhdGEKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC9nZXRBZGRyZXNzZXMuanMKICBpbml0X2dldEFkZHJlc3MoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRBZGRyZXNzZXMoY2xpZW50KSB7CiAgICBpZiAoY2xpZW50LmFjY291bnQ/LnR5cGUgPT09ICJsb2NhbCIpCiAgICAgIHJldHVybiBbY2xpZW50LmFjY291bnQuYWRkcmVzc107CiAgICBjb25zdCBhZGRyZXNzZXMgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7IG1ldGhvZDogImV0aF9hY2NvdW50cyIgfSwgeyBkZWR1cGU6IHRydWUgfSk7CiAgICByZXR1cm4gYWRkcmVzc2VzLm1hcCgoYWRkcmVzcykgPT4gY2hlY2tzdW1BZGRyZXNzKGFkZHJlc3MpKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvZ2V0UGVybWlzc2lvbnMuanMKICBhc3luYyBmdW5jdGlvbiBnZXRQZXJtaXNzaW9ucyhjbGllbnQpIHsKICAgIGNvbnN0IHBlcm1pc3Npb25zID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoeyBtZXRob2Q6ICJ3YWxsZXRfZ2V0UGVybWlzc2lvbnMiIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgcmV0dXJuIHBlcm1pc3Npb25zOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC9yZXF1ZXN0QWRkcmVzc2VzLmpzCiAgaW5pdF9nZXRBZGRyZXNzKCk7CiAgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdEFkZHJlc3NlcyhjbGllbnQpIHsKICAgIGNvbnN0IGFkZHJlc3NlcyA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsgbWV0aG9kOiAiZXRoX3JlcXVlc3RBY2NvdW50cyIgfSwgeyBkZWR1cGU6IHRydWUsIHJldHJ5Q291bnQ6IDAgfSk7CiAgICByZXR1cm4gYWRkcmVzc2VzLm1hcCgoYWRkcmVzcykgPT4gZ2V0QWRkcmVzcyhhZGRyZXNzKSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3JlcXVlc3RQZXJtaXNzaW9ucy5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RQZXJtaXNzaW9ucyhjbGllbnQsIHBlcm1pc3Npb25zKSB7CiAgICByZXR1cm4gY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ3YWxsZXRfcmVxdWVzdFBlcm1pc3Npb25zIiwKICAgICAgcGFyYW1zOiBbcGVybWlzc2lvbnNdCiAgICB9LCB7IHJldHJ5Q291bnQ6IDAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NpZ25NZXNzYWdlLmpzCiAgaW5pdF9wYXJzZUFjY291bnQoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2lnbk1lc3NhZ2UoY2xpZW50LCB7IGFjY291bnQ6IGFjY291bnRfID0gY2xpZW50LmFjY291bnQsIG1lc3NhZ2UgfSkgewogICAgaWYgKCFhY2NvdW50XykKICAgICAgdGhyb3cgbmV3IEFjY291bnROb3RGb3VuZEVycm9yKHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2FjdGlvbnMvd2FsbGV0L3NpZ25NZXNzYWdlIgogICAgICB9KTsKICAgIGNvbnN0IGFjY291bnQgPSBwYXJzZUFjY291bnQoYWNjb3VudF8pOwogICAgaWYgKGFjY291bnQuc2lnbk1lc3NhZ2UpCiAgICAgIHJldHVybiBhY2NvdW50LnNpZ25NZXNzYWdlKHsgbWVzc2FnZSB9KTsKICAgIGNvbnN0IG1lc3NhZ2VfID0gKCgpID0+IHsKICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gc3RyaW5nVG9IZXgobWVzc2FnZSk7CiAgICAgIGlmIChtZXNzYWdlLnJhdyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpCiAgICAgICAgcmV0dXJuIHRvSGV4KG1lc3NhZ2UucmF3KTsKICAgICAgcmV0dXJuIG1lc3NhZ2UucmF3OwogICAgfSkoKTsKICAgIHJldHVybiBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogInBlcnNvbmFsX3NpZ24iLAogICAgICBwYXJhbXM6IFttZXNzYWdlXywgYWNjb3VudC5hZGRyZXNzXQogICAgfSwgeyByZXRyeUNvdW50OiAwIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC9zaWduVHJhbnNhY3Rpb24uanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X3RyYW5zYWN0aW9uUmVxdWVzdCgpOwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNpZ25UcmFuc2FjdGlvbihjbGllbnQsIHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudF8gPSBjbGllbnQuYWNjb3VudCwgY2hhaW4gPSBjbGllbnQuY2hhaW4sIC4uLnRyYW5zYWN0aW9uIH0gPSBwYXJhbWV0ZXJzOwogICAgaWYgKCFhY2NvdW50XykKICAgICAgdGhyb3cgbmV3IEFjY291bnROb3RGb3VuZEVycm9yKHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2FjdGlvbnMvd2FsbGV0L3NpZ25UcmFuc2FjdGlvbiIKICAgICAgfSk7CiAgICBjb25zdCBhY2NvdW50ID0gcGFyc2VBY2NvdW50KGFjY291bnRfKTsKICAgIGFzc2VydFJlcXVlc3QoewogICAgICBhY2NvdW50LAogICAgICAuLi5wYXJhbWV0ZXJzCiAgICB9KTsKICAgIGNvbnN0IGNoYWluSWQgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRDaGFpbklkLCAiZ2V0Q2hhaW5JZCIpKHt9KTsKICAgIGlmIChjaGFpbiAhPT0gbnVsbCkKICAgICAgYXNzZXJ0Q3VycmVudENoYWluKHsKICAgICAgICBjdXJyZW50Q2hhaW5JZDogY2hhaW5JZCwKICAgICAgICBjaGFpbgogICAgICB9KTsKICAgIGNvbnN0IGZvcm1hdHRlcnM0ID0gY2hhaW4/LmZvcm1hdHRlcnMgfHwgY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzOwogICAgY29uc3QgZm9ybWF0ID0gZm9ybWF0dGVyczQ/LnRyYW5zYWN0aW9uUmVxdWVzdD8uZm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgIGlmIChhY2NvdW50LnNpZ25UcmFuc2FjdGlvbikKICAgICAgcmV0dXJuIGFjY291bnQuc2lnblRyYW5zYWN0aW9uKHsKICAgICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgICBjaGFpbklkCiAgICAgIH0sIHsgc2VyaWFsaXplcjogY2xpZW50LmNoYWluPy5zZXJpYWxpemVycz8udHJhbnNhY3Rpb24gfSk7CiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfc2lnblRyYW5zYWN0aW9uIiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgewogICAgICAgICAgLi4uZm9ybWF0KHRyYW5zYWN0aW9uKSwKICAgICAgICAgIGNoYWluSWQ6IG51bWJlclRvSGV4KGNoYWluSWQpLAogICAgICAgICAgZnJvbTogYWNjb3VudC5hZGRyZXNzCiAgICAgICAgfQogICAgICBdCiAgICB9LCB7IHJldHJ5Q291bnQ6IDAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NpZ25UeXBlZERhdGEuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNpZ25UeXBlZERhdGEoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFjY291bnQ6IGFjY291bnRfID0gY2xpZW50LmFjY291bnQsIGRvbWFpbiwgbWVzc2FnZSwgcHJpbWFyeVR5cGUgfSA9IHBhcmFtZXRlcnM7CiAgICBpZiAoIWFjY291bnRfKQogICAgICB0aHJvdyBuZXcgQWNjb3VudE5vdEZvdW5kRXJyb3IoewogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvYWN0aW9ucy93YWxsZXQvc2lnblR5cGVkRGF0YSIKICAgICAgfSk7CiAgICBjb25zdCBhY2NvdW50ID0gcGFyc2VBY2NvdW50KGFjY291bnRfKTsKICAgIGNvbnN0IHR5cGVzID0gewogICAgICBFSVA3MTJEb21haW46IGdldFR5cGVzRm9yRUlQNzEyRG9tYWluKHsgZG9tYWluIH0pLAogICAgICAuLi5wYXJhbWV0ZXJzLnR5cGVzCiAgICB9OwogICAgdmFsaWRhdGVUeXBlZERhdGEoeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9KTsKICAgIGlmIChhY2NvdW50LnNpZ25UeXBlZERhdGEpCiAgICAgIHJldHVybiBhY2NvdW50LnNpZ25UeXBlZERhdGEoeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9KTsKICAgIGNvbnN0IHR5cGVkRGF0YSA9IHNlcmlhbGl6ZVR5cGVkRGF0YSh7IGRvbWFpbiwgbWVzc2FnZSwgcHJpbWFyeVR5cGUsIHR5cGVzIH0pOwogICAgcmV0dXJuIGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX3NpZ25UeXBlZERhdGFfdjQiLAogICAgICBwYXJhbXM6IFthY2NvdW50LmFkZHJlc3MsIHR5cGVkRGF0YV0KICAgIH0sIHsgcmV0cnlDb3VudDogMCB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvc3dpdGNoQ2hhaW4uanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc3dpdGNoQ2hhaW4oY2xpZW50LCB7IGlkIH0pIHsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAid2FsbGV0X3N3aXRjaEV0aGVyZXVtQ2hhaW4iLAogICAgICBwYXJhbXM6IFsKICAgICAgICB7CiAgICAgICAgICBjaGFpbklkOiBudW1iZXJUb0hleChpZCkKICAgICAgICB9CiAgICAgIF0KICAgIH0sIHsgcmV0cnlDb3VudDogMCB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvd2F0Y2hBc3NldC5qcwogIGFzeW5jIGZ1bmN0aW9uIHdhdGNoQXNzZXQoY2xpZW50LCBwYXJhbXMpIHsKICAgIGNvbnN0IGFkZGVkID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ3YWxsZXRfd2F0Y2hBc3NldCIsCiAgICAgIHBhcmFtcwogICAgfSwgeyByZXRyeUNvdW50OiAwIH0pOwogICAgcmV0dXJuIGFkZGVkOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2RlY29yYXRvcnMvd2FsbGV0LmpzCiAgZnVuY3Rpb24gd2FsbGV0QWN0aW9ucyhjbGllbnQpIHsKICAgIHJldHVybiB7CiAgICAgIGFkZENoYWluOiAoYXJncykgPT4gYWRkQ2hhaW4oY2xpZW50LCBhcmdzKSwKICAgICAgZGVwbG95Q29udHJhY3Q6IChhcmdzKSA9PiBkZXBsb3lDb250cmFjdChjbGllbnQsIGFyZ3MpLAogICAgICBnZXRBZGRyZXNzZXM6ICgpID0+IGdldEFkZHJlc3NlcyhjbGllbnQpLAogICAgICBnZXRDaGFpbklkOiAoKSA9PiBnZXRDaGFpbklkKGNsaWVudCksCiAgICAgIGdldFBlcm1pc3Npb25zOiAoKSA9PiBnZXRQZXJtaXNzaW9ucyhjbGllbnQpLAogICAgICBwcmVwYXJlVHJhbnNhY3Rpb25SZXF1ZXN0OiAoYXJncykgPT4gcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdChjbGllbnQsIGFyZ3MpLAogICAgICByZXF1ZXN0QWRkcmVzc2VzOiAoKSA9PiByZXF1ZXN0QWRkcmVzc2VzKGNsaWVudCksCiAgICAgIHJlcXVlc3RQZXJtaXNzaW9uczogKGFyZ3MpID0+IHJlcXVlc3RQZXJtaXNzaW9ucyhjbGllbnQsIGFyZ3MpLAogICAgICBzZW5kUmF3VHJhbnNhY3Rpb246IChhcmdzKSA9PiBzZW5kUmF3VHJhbnNhY3Rpb24oY2xpZW50LCBhcmdzKSwKICAgICAgc2VuZFRyYW5zYWN0aW9uOiAoYXJncykgPT4gc2VuZFRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgIHNpZ25NZXNzYWdlOiAoYXJncykgPT4gc2lnbk1lc3NhZ2UoY2xpZW50LCBhcmdzKSwKICAgICAgc2lnblRyYW5zYWN0aW9uOiAoYXJncykgPT4gc2lnblRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgIHNpZ25UeXBlZERhdGE6IChhcmdzKSA9PiBzaWduVHlwZWREYXRhKGNsaWVudCwgYXJncyksCiAgICAgIHN3aXRjaENoYWluOiAoYXJncykgPT4gc3dpdGNoQ2hhaW4oY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hBc3NldDogKGFyZ3MpID0+IHdhdGNoQXNzZXQoY2xpZW50LCBhcmdzKSwKICAgICAgd3JpdGVDb250cmFjdDogKGFyZ3MpID0+IHdyaXRlQ29udHJhY3QoY2xpZW50LCBhcmdzKQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2xpZW50cy9jcmVhdGVXYWxsZXRDbGllbnQuanMKICBmdW5jdGlvbiBjcmVhdGVXYWxsZXRDbGllbnQocGFyYW1ldGVycykgewogICAgY29uc3QgeyBrZXkgPSAid2FsbGV0IiwgbmFtZSA9ICJXYWxsZXQgQ2xpZW50IiwgdHJhbnNwb3J0IH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQ2xpZW50KHsKICAgICAgLi4ucGFyYW1ldGVycywKICAgICAga2V5LAogICAgICBuYW1lLAogICAgICB0cmFuc3BvcnQsCiAgICAgIHR5cGU6ICJ3YWxsZXRDbGllbnQiCiAgICB9KTsKICAgIHJldHVybiBjbGllbnQuZXh0ZW5kKHdhbGxldEFjdGlvbnMpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL3RyYW5zcG9ydHMvd2ViU29ja2V0LmpzCiAgaW5pdF9yZXF1ZXN0KCk7CiAgZnVuY3Rpb24gd2ViU29ja2V0KHVybCwgY29uZmlnID0ge30pIHsKICAgIGNvbnN0IHsga2VlcEFsaXZlLCBrZXkgPSAid2ViU29ja2V0IiwgbmFtZSA9ICJXZWJTb2NrZXQgSlNPTi1SUEMiLCByZWNvbm5lY3QsIHJldHJ5RGVsYXkgfSA9IGNvbmZpZzsKICAgIHJldHVybiAoeyBjaGFpbiwgcmV0cnlDb3VudDogcmV0cnlDb3VudF8sIHRpbWVvdXQ6IHRpbWVvdXRfIH0pID0+IHsKICAgICAgY29uc3QgcmV0cnlDb3VudCA9IGNvbmZpZy5yZXRyeUNvdW50ID8/IHJldHJ5Q291bnRfOwogICAgICBjb25zdCB0aW1lb3V0ID0gdGltZW91dF8gPz8gY29uZmlnLnRpbWVvdXQgPz8gMWU0OwogICAgICBjb25zdCB1cmxfID0gdXJsIHx8IGNoYWluPy5ycGNVcmxzLmRlZmF1bHQud2ViU29ja2V0Py5bMF07CiAgICAgIGlmICghdXJsXykKICAgICAgICB0aHJvdyBuZXcgVXJsUmVxdWlyZWRFcnJvcigpOwogICAgICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICAgICAgY29uc3QgYm9keSA9IHsgbWV0aG9kLCBwYXJhbXMgfTsKICAgICAgICAgIGNvbnN0IHJwY0NsaWVudCA9IGF3YWl0IGdldFdlYlNvY2tldFJwY0NsaWVudCh1cmxfLCB7CiAgICAgICAgICAgIGtlZXBBbGl2ZSwKICAgICAgICAgICAgcmVjb25uZWN0CiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IHsgZXJyb3IsIHJlc3VsdCB9ID0gYXdhaXQgcnBjQ2xpZW50LnJlcXVlc3RBc3luYyh7CiAgICAgICAgICAgIGJvZHksCiAgICAgICAgICAgIHRpbWVvdXQKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGVycm9yKQogICAgICAgICAgICB0aHJvdyBuZXcgUnBjUmVxdWVzdEVycm9yKHsKICAgICAgICAgICAgICBib2R5LAogICAgICAgICAgICAgIGVycm9yLAogICAgICAgICAgICAgIHVybDogdXJsXwogICAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfSwKICAgICAgICByZXRyeUNvdW50LAogICAgICAgIHJldHJ5RGVsYXksCiAgICAgICAgdGltZW91dCwKICAgICAgICB0eXBlOiAid2ViU29ja2V0IgogICAgICB9LCB7CiAgICAgICAgZ2V0U29ja2V0KCkgewogICAgICAgICAgcmV0dXJuIGdldFNvY2tldCh1cmxfKTsKICAgICAgICB9LAogICAgICAgIGdldFJwY0NsaWVudCgpIHsKICAgICAgICAgIHJldHVybiBnZXRXZWJTb2NrZXRScGNDbGllbnQodXJsXyk7CiAgICAgICAgfSwKICAgICAgICBhc3luYyBzdWJzY3JpYmUoeyBwYXJhbXMsIG9uRGF0YSwgb25FcnJvciB9KSB7CiAgICAgICAgICBjb25zdCBycGNDbGllbnQgPSBhd2FpdCBnZXRXZWJTb2NrZXRScGNDbGllbnQodXJsXyk7CiAgICAgICAgICBjb25zdCB7IHJlc3VsdDogc3Vic2NyaXB0aW9uSWQgfSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHJwY0NsaWVudC5yZXF1ZXN0KHsKICAgICAgICAgICAgYm9keTogewogICAgICAgICAgICAgIG1ldGhvZDogImV0aF9zdWJzY3JpYmUiLAogICAgICAgICAgICAgIHBhcmFtcwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbkVycm9yKGVycm9yKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25SZXNwb25zZShyZXNwb25zZSkgewogICAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikgewogICAgICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlLmVycm9yKTsKICAgICAgICAgICAgICAgIG9uRXJyb3I/LihyZXNwb25zZS5lcnJvcik7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UuaWQgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLm1ldGhvZCAhPT0gImV0aF9zdWJzY3JpcHRpb24iKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIG9uRGF0YShyZXNwb25zZS5wYXJhbXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KSk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBzdWJzY3JpcHRpb25JZCwKICAgICAgICAgICAgYXN5bmMgdW5zdWJzY3JpYmUoKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBycGNDbGllbnQucmVxdWVzdCh7CiAgICAgICAgICAgICAgICBib2R5OiB7CiAgICAgICAgICAgICAgICAgIG1ldGhvZDogImV0aF91bnN1YnNjcmliZSIsCiAgICAgICAgICAgICAgICAgIHBhcmFtczogW3N1YnNjcmlwdGlvbklkXQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIG9uUmVzcG9uc2U6IHJlc29sdmUKICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9KTsKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2luZGV4LmpzCiAgaW5pdF9hYmlzKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2FkZHJlc3MuanMKICB2YXIgemVyb0FkZHJlc3MgPSAiMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9pbmRleC5qcwogIGluaXRfY29udHJhY3RzKCk7CiAgaW5pdF91bml0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL251bWJlci5qcwogIHZhciBtYXhJbnQ4ID0gMm4gKiogKDhuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDE2ID0gMm4gKiogKDE2biAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQyNCA9IDJuICoqICgyNG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MzIgPSAybiAqKiAoMzJuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDQwID0gMm4gKiogKDQwbiAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQ0OCA9IDJuICoqICg0OG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50NTYgPSAybiAqKiAoNTZuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDY0ID0gMm4gKiogKDY0biAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQ3MiA9IDJuICoqICg3Mm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50ODAgPSAybiAqKiAoODBuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDg4ID0gMm4gKiogKDg4biAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQ5NiA9IDJuICoqICg5Nm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTA0ID0gMm4gKiogKDEwNG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTEyID0gMm4gKiogKDExMm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTIwID0gMm4gKiogKDEyMG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTI4ID0gMm4gKiogKDEyOG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTM2ID0gMm4gKiogKDEzNm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTQ0ID0gMm4gKiogKDE0NG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTUyID0gMm4gKiogKDE1Mm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTYwID0gMm4gKiogKDE2MG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTY4ID0gMm4gKiogKDE2OG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTc2ID0gMm4gKiogKDE3Nm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTg0ID0gMm4gKiogKDE4NG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTkyID0gMm4gKiogKDE5Mm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjAwID0gMm4gKiogKDIwMG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjA4ID0gMm4gKiogKDIwOG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjE2ID0gMm4gKiogKDIxNm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjI0ID0gMm4gKiogKDIyNG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjMyID0gMm4gKiogKDIzMm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjQwID0gMm4gKiogKDI0MG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjQ4ID0gMm4gKiogKDI0OG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjU2ID0gMm4gKiogKDI1Nm4gLSAxbikgLSAxbjsKICB2YXIgbWluSW50OCA9IC0oMm4gKiogKDhuIC0gMW4pKTsKICB2YXIgbWluSW50MTYgPSAtKDJuICoqICgxNm4gLSAxbikpOwogIHZhciBtaW5JbnQyNCA9IC0oMm4gKiogKDI0biAtIDFuKSk7CiAgdmFyIG1pbkludDMyID0gLSgybiAqKiAoMzJuIC0gMW4pKTsKICB2YXIgbWluSW50NDAgPSAtKDJuICoqICg0MG4gLSAxbikpOwogIHZhciBtaW5JbnQ0OCA9IC0oMm4gKiogKDQ4biAtIDFuKSk7CiAgdmFyIG1pbkludDU2ID0gLSgybiAqKiAoNTZuIC0gMW4pKTsKICB2YXIgbWluSW50NjQgPSAtKDJuICoqICg2NG4gLSAxbikpOwogIHZhciBtaW5JbnQ3MiA9IC0oMm4gKiogKDcybiAtIDFuKSk7CiAgdmFyIG1pbkludDgwID0gLSgybiAqKiAoODBuIC0gMW4pKTsKICB2YXIgbWluSW50ODggPSAtKDJuICoqICg4OG4gLSAxbikpOwogIHZhciBtaW5JbnQ5NiA9IC0oMm4gKiogKDk2biAtIDFuKSk7CiAgdmFyIG1pbkludDEwNCA9IC0oMm4gKiogKDEwNG4gLSAxbikpOwogIHZhciBtaW5JbnQxMTIgPSAtKDJuICoqICgxMTJuIC0gMW4pKTsKICB2YXIgbWluSW50MTIwID0gLSgybiAqKiAoMTIwbiAtIDFuKSk7CiAgdmFyIG1pbkludDEyOCA9IC0oMm4gKiogKDEyOG4gLSAxbikpOwogIHZhciBtaW5JbnQxMzYgPSAtKDJuICoqICgxMzZuIC0gMW4pKTsKICB2YXIgbWluSW50MTQ0ID0gLSgybiAqKiAoMTQ0biAtIDFuKSk7CiAgdmFyIG1pbkludDE1MiA9IC0oMm4gKiogKDE1Mm4gLSAxbikpOwogIHZhciBtaW5JbnQxNjAgPSAtKDJuICoqICgxNjBuIC0gMW4pKTsKICB2YXIgbWluSW50MTY4ID0gLSgybiAqKiAoMTY4biAtIDFuKSk7CiAgdmFyIG1pbkludDE3NiA9IC0oMm4gKiogKDE3Nm4gLSAxbikpOwogIHZhciBtaW5JbnQxODQgPSAtKDJuICoqICgxODRuIC0gMW4pKTsKICB2YXIgbWluSW50MTkyID0gLSgybiAqKiAoMTkybiAtIDFuKSk7CiAgdmFyIG1pbkludDIwMCA9IC0oMm4gKiogKDIwMG4gLSAxbikpOwogIHZhciBtaW5JbnQyMDggPSAtKDJuICoqICgyMDhuIC0gMW4pKTsKICB2YXIgbWluSW50MjE2ID0gLSgybiAqKiAoMjE2biAtIDFuKSk7CiAgdmFyIG1pbkludDIyNCA9IC0oMm4gKiogKDIyNG4gLSAxbikpOwogIHZhciBtaW5JbnQyMzIgPSAtKDJuICoqICgyMzJuIC0gMW4pKTsKICB2YXIgbWluSW50MjQwID0gLSgybiAqKiAoMjQwbiAtIDFuKSk7CiAgdmFyIG1pbkludDI0OCA9IC0oMm4gKiogKDI0OG4gLSAxbikpOwogIHZhciBtaW5JbnQyNTYgPSAtKDJuICoqICgyNTZuIC0gMW4pKTsKICB2YXIgbWF4VWludDggPSAybiAqKiA4biAtIDFuOwogIHZhciBtYXhVaW50MTYgPSAybiAqKiAxNm4gLSAxbjsKICB2YXIgbWF4VWludDI0ID0gMm4gKiogMjRuIC0gMW47CiAgdmFyIG1heFVpbnQzMiA9IDJuICoqIDMybiAtIDFuOwogIHZhciBtYXhVaW50NDAgPSAybiAqKiA0MG4gLSAxbjsKICB2YXIgbWF4VWludDQ4ID0gMm4gKiogNDhuIC0gMW47CiAgdmFyIG1heFVpbnQ1NiA9IDJuICoqIDU2biAtIDFuOwogIHZhciBtYXhVaW50NjQgPSAybiAqKiA2NG4gLSAxbjsKICB2YXIgbWF4VWludDcyID0gMm4gKiogNzJuIC0gMW47CiAgdmFyIG1heFVpbnQ4MCA9IDJuICoqIDgwbiAtIDFuOwogIHZhciBtYXhVaW50ODggPSAybiAqKiA4OG4gLSAxbjsKICB2YXIgbWF4VWludDk2ID0gMm4gKiogOTZuIC0gMW47CiAgdmFyIG1heFVpbnQxMDQgPSAybiAqKiAxMDRuIC0gMW47CiAgdmFyIG1heFVpbnQxMTIgPSAybiAqKiAxMTJuIC0gMW47CiAgdmFyIG1heFVpbnQxMjAgPSAybiAqKiAxMjBuIC0gMW47CiAgdmFyIG1heFVpbnQxMjggPSAybiAqKiAxMjhuIC0gMW47CiAgdmFyIG1heFVpbnQxMzYgPSAybiAqKiAxMzZuIC0gMW47CiAgdmFyIG1heFVpbnQxNDQgPSAybiAqKiAxNDRuIC0gMW47CiAgdmFyIG1heFVpbnQxNTIgPSAybiAqKiAxNTJuIC0gMW47CiAgdmFyIG1heFVpbnQxNjAgPSAybiAqKiAxNjBuIC0gMW47CiAgdmFyIG1heFVpbnQxNjggPSAybiAqKiAxNjhuIC0gMW47CiAgdmFyIG1heFVpbnQxNzYgPSAybiAqKiAxNzZuIC0gMW47CiAgdmFyIG1heFVpbnQxODQgPSAybiAqKiAxODRuIC0gMW47CiAgdmFyIG1heFVpbnQxOTIgPSAybiAqKiAxOTJuIC0gMW47CiAgdmFyIG1heFVpbnQyMDAgPSAybiAqKiAyMDBuIC0gMW47CiAgdmFyIG1heFVpbnQyMDggPSAybiAqKiAyMDhuIC0gMW47CiAgdmFyIG1heFVpbnQyMTYgPSAybiAqKiAyMTZuIC0gMW47CiAgdmFyIG1heFVpbnQyMjQgPSAybiAqKiAyMjRuIC0gMW47CiAgdmFyIG1heFVpbnQyMzIgPSAybiAqKiAyMzJuIC0gMW47CiAgdmFyIG1heFVpbnQyNDAgPSAybiAqKiAyNDBuIC0gMW47CiAgdmFyIG1heFVpbnQyNDggPSAybiAqKiAyNDhuIC0gMW47CiAgdmFyIG1heFVpbnQyNTYgPSAybiAqKiAyNTZuIC0gMW47CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vaW5kZXguanMKICBpbml0X2FiaSgpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY29udHJhY3QoKTsKICBpbml0X3JwYygpOwogIGluaXRfY2hhaW4oKTsKICBpbml0X2VuY29kaW5nKCk7CiAgaW5pdF9ub2RlKCk7CiAgaW5pdF9yZXF1ZXN0KCk7CiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF90cmFuc2FjdGlvbigpOwogIGluaXRfZGF0YSgpOwogIGluaXRfc3RhdGVPdmVycmlkZSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3R5cGVzL2VpcDExOTMuanMKICB2YXIgUHJvdmlkZXJScGNFcnJvcjIgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICAgIGNvbnN0cnVjdG9yKGNvZGUsIG1lc3NhZ2UpIHsKICAgICAgc3VwZXIobWVzc2FnZSk7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgIH0pOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRldGFpbHMiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICB9KTsKICAgICAgdGhpcy5jb2RlID0gY29kZTsKICAgICAgdGhpcy5kZXRhaWxzID0gbWVzc2FnZTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2luZGV4LmpzCiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZURlcGxveURhdGEuanMKICBpbml0X2FiaSgpOwogIGluaXRfZGVjb2RlQWJpUGFyYW1ldGVycygpOwogIHZhciBkb2NzUGF0aDggPSAiL2RvY3MvY29udHJhY3QvZGVjb2RlRGVwbG95RGF0YSI7CiAgZnVuY3Rpb24gZGVjb2RlRGVwbG95RGF0YShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYnl0ZWNvZGUsIGRhdGEgfSA9IHBhcmFtZXRlcnM7CiAgICBpZiAoZGF0YSA9PT0gYnl0ZWNvZGUpCiAgICAgIHJldHVybiB7IGJ5dGVjb2RlIH07CiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGFiaTIuZmluZCgoeCkgPT4gInR5cGUiIGluIHggJiYgeC50eXBlID09PSAiY29uc3RydWN0b3IiKTsKICAgIGlmICghZGVzY3JpcHRpb24pCiAgICAgIHRocm93IG5ldyBBYmlDb25zdHJ1Y3Rvck5vdEZvdW5kRXJyb3IoeyBkb2NzUGF0aDogZG9jc1BhdGg4IH0pOwogICAgaWYgKCEoImlucHV0cyIgaW4gZGVzY3JpcHRpb24pKQogICAgICB0aHJvdyBuZXcgQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoOCB9KTsKICAgIGlmICghZGVzY3JpcHRpb24uaW5wdXRzIHx8IGRlc2NyaXB0aW9uLmlucHV0cy5sZW5ndGggPT09IDApCiAgICAgIHRocm93IG5ldyBBYmlDb25zdHJ1Y3RvclBhcmFtc05vdEZvdW5kRXJyb3IoeyBkb2NzUGF0aDogZG9jc1BhdGg4IH0pOwogICAgY29uc3QgYXJncyA9IGRlY29kZUFiaVBhcmFtZXRlcnMoZGVzY3JpcHRpb24uaW5wdXRzLCBgMHgke2RhdGEucmVwbGFjZShieXRlY29kZSwgIiIpfWApOwogICAgcmV0dXJuIHsgYXJncywgYnl0ZWNvZGUgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vaW5kZXguanMKICBpbml0X2RlY29kZUVycm9yUmVzdWx0KCk7CiAgaW5pdF9kZWNvZGVGdW5jdGlvblJlc3VsdCgpOwogIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogIGluaXRfZW5jb2RlRGVwbG95RGF0YSgpOwogIGluaXRfZW5jb2RlRnVuY3Rpb25EYXRhKCk7CiAgaW5pdF9wcmVwYXJlRW5jb2RlRnVuY3Rpb25EYXRhKCk7CiAgaW5pdF90cmFuc2FjdGlvblJlcXVlc3QoKTsKICBpbml0X2dldEFiaUl0ZW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvY29tcGFjdFNpZ25hdHVyZVRvU2lnbmF0dXJlLmpzCiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIGNvbXBhY3RTaWduYXR1cmVUb1NpZ25hdHVyZSh7IHIsIHlQYXJpdHlBbmRTIH0pIHsKICAgIGNvbnN0IHlQYXJpdHlBbmRTX2J5dGVzID0gaGV4VG9CeXRlcyh5UGFyaXR5QW5kUyk7CiAgICBjb25zdCB5UGFyaXR5ID0geVBhcml0eUFuZFNfYnl0ZXNbMF0gJiAxMjggPyAxIDogMDsKICAgIGNvbnN0IHMgPSB5UGFyaXR5QW5kU19ieXRlczsKICAgIGlmICh5UGFyaXR5ID09PSAxKQogICAgICBzWzBdICY9IDEyNzsKICAgIHJldHVybiB7IHIsIHM6IGJ5dGVzVG9IZXgocyksIHlQYXJpdHkgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3BhcnNlQ29tcGFjdFNpZ25hdHVyZS5qcwogIGluaXRfc2VjcDI1NmsxKCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIHBhcnNlQ29tcGFjdFNpZ25hdHVyZShzaWduYXR1cmVIZXgpIHsKICAgIGNvbnN0IHsgciwgcyB9ID0gc2VjcDI1NmsxLlNpZ25hdHVyZS5mcm9tQ29tcGFjdChzaWduYXR1cmVIZXguc2xpY2UoMiwgMTMwKSk7CiAgICByZXR1cm4gewogICAgICByOiBudW1iZXJUb0hleChyLCB7IHNpemU6IDMyIH0pLAogICAgICB5UGFyaXR5QW5kUzogbnVtYmVyVG9IZXgocywgeyBzaXplOiAzMiB9KQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3BhcnNlU2lnbmF0dXJlLmpzCiAgaW5pdF9zZWNwMjU2azEoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmUyKHNpZ25hdHVyZUhleCkgewogICAgY29uc3QgeyByLCBzIH0gPSBzZWNwMjU2azEuU2lnbmF0dXJlLmZyb21Db21wYWN0KHNpZ25hdHVyZUhleC5zbGljZSgyLCAxMzApKTsKICAgIGNvbnN0IHlQYXJpdHlPclYgPSBOdW1iZXIoYDB4JHtzaWduYXR1cmVIZXguc2xpY2UoMTMwKX1gKTsKICAgIGNvbnN0IFt2LCB5UGFyaXR5XSA9ICgoKSA9PiB7CiAgICAgIGlmICh5UGFyaXR5T3JWID09PSAwIHx8IHlQYXJpdHlPclYgPT09IDEpCiAgICAgICAgcmV0dXJuIFt2b2lkIDAsIHlQYXJpdHlPclZdOwogICAgICBpZiAoeVBhcml0eU9yViA9PT0gMjcpCiAgICAgICAgcmV0dXJuIFtCaWdJbnQoeVBhcml0eU9yViksIDBdOwogICAgICBpZiAoeVBhcml0eU9yViA9PT0gMjgpCiAgICAgICAgcmV0dXJuIFtCaWdJbnQoeVBhcml0eU9yViksIDFdOwogICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeVBhcml0eU9yViB2YWx1ZSIpOwogICAgfSkoKTsKICAgIGlmICh0eXBlb2YgdiAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJldHVybiB7CiAgICAgICAgcjogbnVtYmVyVG9IZXgociwgeyBzaXplOiAzMiB9KSwKICAgICAgICBzOiBudW1iZXJUb0hleChzLCB7IHNpemU6IDMyIH0pLAogICAgICAgIHYsCiAgICAgICAgeVBhcml0eQogICAgICB9OwogICAgcmV0dXJuIHsKICAgICAgcjogbnVtYmVyVG9IZXgociwgeyBzaXplOiAzMiB9KSwKICAgICAgczogbnVtYmVyVG9IZXgocywgeyBzaXplOiAzMiB9KSwKICAgICAgeVBhcml0eQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3JlY292ZXJUcmFuc2FjdGlvbkFkZHJlc3MuanMKICBpbml0X2tlY2NhazI1NigpOwogIGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJUcmFuc2FjdGlvbkFkZHJlc3MocGFyYW1ldGVycykgewogICAgY29uc3QgeyBzZXJpYWxpemVkVHJhbnNhY3Rpb24sIHNpZ25hdHVyZTogc2lnbmF0dXJlXyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gcGFyc2VUcmFuc2FjdGlvbihzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmF0dXJlXyA/PyB7CiAgICAgIHI6IHRyYW5zYWN0aW9uLnIsCiAgICAgIHM6IHRyYW5zYWN0aW9uLnMsCiAgICAgIHY6IHRyYW5zYWN0aW9uLnYsCiAgICAgIHlQYXJpdHk6IHRyYW5zYWN0aW9uLnlQYXJpdHkKICAgIH07CiAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplVHJhbnNhY3Rpb24oewogICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgcjogdm9pZCAwLAogICAgICBzOiB2b2lkIDAsCiAgICAgIHY6IHZvaWQgMCwKICAgICAgeVBhcml0eTogdm9pZCAwLAogICAgICBzaWRlY2Fyczogdm9pZCAwCiAgICB9KTsKICAgIHJldHVybiBhd2FpdCByZWNvdmVyQWRkcmVzcyh7CiAgICAgIGhhc2g6IGtlY2NhazI1NihzZXJpYWxpemVkKSwKICAgICAgc2lnbmF0dXJlCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3NpZ25hdHVyZVRvQ29tcGFjdFNpZ25hdHVyZS5qcwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBzaWduYXR1cmVUb0NvbXBhY3RTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICBjb25zdCB7IHIsIHMsIHYsIHlQYXJpdHkgfSA9IHNpZ25hdHVyZTsKICAgIGNvbnN0IHlQYXJpdHlfID0gTnVtYmVyKHlQYXJpdHkgPz8gdiAtIDI3bik7CiAgICBsZXQgeVBhcml0eUFuZFMgPSBzOwogICAgaWYgKHlQYXJpdHlfID09PSAxKSB7CiAgICAgIGNvbnN0IGJ5dGVzMiA9IGhleFRvQnl0ZXMocyk7CiAgICAgIGJ5dGVzMlswXSB8PSAxMjg7CiAgICAgIHlQYXJpdHlBbmRTID0gYnl0ZXNUb0hleChieXRlczIpOwogICAgfQogICAgcmV0dXJuIHsgciwgeVBhcml0eUFuZFMgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3NlcmlhbGl6ZUNvbXBhY3RTaWduYXR1cmUuanMKICBpbml0X3NlY3AyNTZrMSgpOwogIGluaXRfZnJvbUhleCgpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZUNvbXBhY3RTaWduYXR1cmUoeyByLCB5UGFyaXR5QW5kUyB9KSB7CiAgICByZXR1cm4gYDB4JHtuZXcgc2VjcDI1NmsxLlNpZ25hdHVyZShoZXhUb0JpZ0ludChyKSwgaGV4VG9CaWdJbnQoeVBhcml0eUFuZFMpKS50b0NvbXBhY3RIZXgoKX1gOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9pbmRleC5qcwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X2Zyb21CeXRlcygpOwogIGluaXRfY2NpcDIoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL3NpZGVjYXJzVG9WZXJzaW9uZWRIYXNoZXMuanMKICBmdW5jdGlvbiBzaWRlY2Fyc1RvVmVyc2lvbmVkSGFzaGVzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgc2lkZWNhcnMsIHZlcnNpb246IHZlcnNpb24zIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgdG8gPSBwYXJhbWV0ZXJzLnRvID8/ICh0eXBlb2Ygc2lkZWNhcnNbMF0uYmxvYiA9PT0gInN0cmluZyIgPyAiaGV4IiA6ICJieXRlcyIpOwogICAgY29uc3QgaGFzaGVzID0gW107CiAgICBmb3IgKGNvbnN0IHsgY29tbWl0bWVudCB9IG9mIHNpZGVjYXJzKSB7CiAgICAgIGhhc2hlcy5wdXNoKGNvbW1pdG1lbnRUb1ZlcnNpb25lZEhhc2goewogICAgICAgIGNvbW1pdG1lbnQsCiAgICAgICAgdG8sCiAgICAgICAgdmVyc2lvbjogdmVyc2lvbjMKICAgICAgfSkpOwogICAgfQogICAgcmV0dXJuIGhhc2hlczsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYmxvYi9mcm9tQmxvYnMuanMKICBpbml0X2N1cnNvcjIoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gZnJvbUJsb2JzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IGJsb2JzID0gdHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gcGFyYW1ldGVycy5ibG9icy5tYXAoKHgpID0+IGhleFRvQnl0ZXMoeCkpIDogcGFyYW1ldGVycy5ibG9iczsKICAgIGNvbnN0IGxlbmd0aCA9IGJsb2JzLnJlZHVjZSgobGVuZ3RoMiwgYmxvYikgPT4gbGVuZ3RoMiArIGJsb2IubGVuZ3RoLCAwKTsKICAgIGNvbnN0IGRhdGEgPSBjcmVhdGVDdXJzb3IobmV3IFVpbnQ4QXJyYXkobGVuZ3RoKSk7CiAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgIGZvciAoY29uc3QgYmxvYiBvZiBibG9icykgewogICAgICBjb25zdCBjdXJzb3IgPSBjcmVhdGVDdXJzb3IoYmxvYik7CiAgICAgIHdoaWxlIChhY3RpdmUgJiYgY3Vyc29yLnBvc2l0aW9uIDwgYmxvYi5sZW5ndGgpIHsKICAgICAgICBjdXJzb3IuaW5jcmVtZW50UG9zaXRpb24oMSk7CiAgICAgICAgbGV0IGNvbnN1bWUgPSAzMTsKICAgICAgICBpZiAoYmxvYi5sZW5ndGggLSBjdXJzb3IucG9zaXRpb24gPCAzMSkKICAgICAgICAgIGNvbnN1bWUgPSBibG9iLmxlbmd0aCAtIGN1cnNvci5wb3NpdGlvbjsKICAgICAgICBmb3IgKGNvbnN0IF8gaW4gQXJyYXkuZnJvbSh7IGxlbmd0aDogY29uc3VtZSB9KSkgewogICAgICAgICAgY29uc3QgYnl0ZSA9IGN1cnNvci5yZWFkQnl0ZSgpOwogICAgICAgICAgY29uc3QgaXNUZXJtaW5hdG9yID0gYnl0ZSA9PT0gMTI4ICYmICFjdXJzb3IuaW5zcGVjdEJ5dGVzKGN1cnNvci5yZW1haW5pbmcpLmluY2x1ZGVzKDEyOCk7CiAgICAgICAgICBpZiAoaXNUZXJtaW5hdG9yKSB7CiAgICAgICAgICAgIGFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGRhdGEucHVzaEJ5dGUoYnl0ZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBjb25zdCB0cmltbWVkRGF0YSA9IGRhdGEuYnl0ZXMuc2xpY2UoMCwgZGF0YS5wb3NpdGlvbik7CiAgICByZXR1cm4gdG8gPT09ICJoZXgiID8gYnl0ZXNUb0hleCh0cmltbWVkRGF0YSkgOiB0cmltbWVkRGF0YTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMva3pnL2RlZmluZUt6Zy5qcwogIGZ1bmN0aW9uIGRlZmluZUt6Zyh7IGJsb2JUb0t6Z0NvbW1pdG1lbnQsIGNvbXB1dGVCbG9iS3pnUHJvb2YgfSkgewogICAgcmV0dXJuIHsKICAgICAgYmxvYlRvS3pnQ29tbWl0bWVudCwKICAgICAgY29tcHV0ZUJsb2JLemdQcm9vZgogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMva3pnL3NldHVwS3pnLmpzCiAgZnVuY3Rpb24gc2V0dXBLemcocGFyYW1ldGVycywgcGF0aCkgewogICAgdHJ5IHsKICAgICAgcGFyYW1ldGVycy5sb2FkVHJ1c3RlZFNldHVwKHBhdGgpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBjb25zdCBlcnJvciA9IGU7CiAgICAgIGlmICghZXJyb3IubWVzc2FnZS5pbmNsdWRlcygidHJ1c3RlZCBzZXR1cCBpcyBhbHJlYWR5IGxvYWRlZCIpKQogICAgICAgIHRocm93IGVycm9yOwogICAgfQogICAgcmV0dXJuIGRlZmluZUt6ZyhwYXJhbWV0ZXJzKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vaW5kZXguanMKICBpbml0X2NvbmNhdCgpOwogIGluaXRfZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoKTsKICBpbml0X2Zvcm1hdEV0aGVyKCk7CiAgaW5pdF9mb3JtYXRHd2VpKCk7CiAgaW5pdF9mb3JtYXRVbml0cygpOwogIGluaXRfZnJvbUhleCgpOwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfdG9FdmVudFNlbGVjdG9yKCk7CiAgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IoKTsKICBpbml0X2lzQWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzRXF1YWwoKTsKICBpbml0X2lzSGV4KCk7CiAgaW5pdF9rZWNjYWsyNTYoKTsKICBpbml0X3BhZCgpOwogIGluaXRfc2l6ZSgpOwogIGluaXRfc2xpY2UoKTsKICBpbml0X3N0cmluZ2lmeSgpOwogIGluaXRfdHJpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9pbmRleC5qcwogIHZhciBjaGFpbnNfZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KGNoYWluc19leHBvcnRzLCB7CiAgICBhYnN0cmFjdFRlc3RuZXQ6ICgpID0+IGFic3RyYWN0VGVzdG5ldCwKICAgIGFjYWxhOiAoKSA9PiBhY2FsYSwKICAgIGFuY2llbnQ4OiAoKSA9PiBhbmNpZW50OCwKICAgIGFuY2llbnQ4U2Vwb2xpYTogKCkgPT4gYW5jaWVudDhTZXBvbGlhLAogICAgYW52aWw6ICgpID0+IGFudmlsLAogICAgYXBleFRlc3RuZXQ6ICgpID0+IGFwZXhUZXN0bmV0LAogICAgYXJiaXRydW06ICgpID0+IGFyYml0cnVtLAogICAgYXJiaXRydW1Hb2VybGk6ICgpID0+IGFyYml0cnVtR29lcmxpLAogICAgYXJiaXRydW1Ob3ZhOiAoKSA9PiBhcmJpdHJ1bU5vdmEsCiAgICBhcmJpdHJ1bVNlcG9saWE6ICgpID0+IGFyYml0cnVtU2Vwb2xpYSwKICAgIGFyZW9uTmV0d29yazogKCkgPT4gYXJlb25OZXR3b3JrLAogICAgYXJlb25OZXR3b3JrVGVzdG5ldDogKCkgPT4gYXJlb25OZXR3b3JrVGVzdG5ldCwKICAgIGFydGVsYVRlc3RuZXQ6ICgpID0+IGFydGVsYVRlc3RuZXQsCiAgICBhc3NldENoYWluVGVzdG5ldDogKCkgPT4gYXNzZXRDaGFpblRlc3RuZXQsCiAgICBhc3RhcjogKCkgPT4gYXN0YXIsCiAgICBhc3RhclprRVZNOiAoKSA9PiBhc3RhclprRVZNLAogICAgYXN0YXJaa3lvdG86ICgpID0+IGFzdGFyWmt5b3RvLAogICAgYXRsZXRhT2x5bXBpYTogKCkgPT4gYXRsZXRhT2x5bXBpYSwKICAgIGF1cm9yYTogKCkgPT4gYXVyb3JhLAogICAgYXVyb3JhVGVzdG5ldDogKCkgPT4gYXVyb3JhVGVzdG5ldCwKICAgIGF1cm9yaWE6ICgpID0+IGF1cm9yaWEsCiAgICBhdmFsYW5jaGU6ICgpID0+IGF2YWxhbmNoZSwKICAgIGF2YWxhbmNoZUZ1amk6ICgpID0+IGF2YWxhbmNoZUZ1amksCiAgICBiMzogKCkgPT4gYjMsCiAgICBiM1NlcG9saWE6ICgpID0+IGIzU2Vwb2xpYSwKICAgIGJhaGFtdXQ6ICgpID0+IGJhaGFtdXQsCiAgICBiYXNlOiAoKSA9PiBiYXNlLAogICAgYmFzZUdvZXJsaTogKCkgPT4gYmFzZUdvZXJsaSwKICAgIGJhc2VTZXBvbGlhOiAoKSA9PiBiYXNlU2Vwb2xpYSwKICAgIGJlYW06ICgpID0+IGJlYW0sCiAgICBiZWFtVGVzdG5ldDogKCkgPT4gYmVhbVRlc3RuZXQsCiAgICBiZWFyTmV0d29ya0NoYWluTWFpbm5ldDogKCkgPT4gYmVhck5ldHdvcmtDaGFpbk1haW5uZXQsCiAgICBiZWFyTmV0d29ya0NoYWluVGVzdG5ldDogKCkgPT4gYmVhck5ldHdvcmtDaGFpblRlc3RuZXQsCiAgICBiZXJhY2hhaW5UZXN0bmV0OiAoKSA9PiBiZXJhY2hhaW5UZXN0bmV0LAogICAgYmVyYWNoYWluVGVzdG5ldGJBcnRpbzogKCkgPT4gYmVyYWNoYWluVGVzdG5ldGJBcnRpbywKICAgIGJldm1NYWlubmV0OiAoKSA9PiBiZXZtTWFpbm5ldCwKICAgIGJpdFRvcnJlbnQ6ICgpID0+IGJpdFRvcnJlbnQsCiAgICBiaXRUb3JyZW50VGVzdG5ldDogKCkgPT4gYml0VG9ycmVudFRlc3RuZXQsCiAgICBiaXRrdWI6ICgpID0+IGJpdGt1YiwKICAgIGJpdGt1YlRlc3RuZXQ6ICgpID0+IGJpdGt1YlRlc3RuZXQsCiAgICBibGFzdDogKCkgPT4gYmxhc3QsCiAgICBibGFzdFNlcG9saWE6ICgpID0+IGJsYXN0U2Vwb2xpYSwKICAgIGJvYjogKCkgPT4gYm9iLAogICAgYm9iU2Vwb2xpYTogKCkgPT4gYm9iU2Vwb2xpYSwKICAgIGJvYmE6ICgpID0+IGJvYmEsCiAgICBib2JhU2Vwb2xpYTogKCkgPT4gYm9iYVNlcG9saWEsCiAgICBicm9ub3M6ICgpID0+IGJyb25vcywKICAgIGJyb25vc1Rlc3RuZXQ6ICgpID0+IGJyb25vc1Rlc3RuZXQsCiAgICBic2M6ICgpID0+IGJzYywKICAgIGJzY0dyZWVuZmllbGQ6ICgpID0+IGJzY0dyZWVuZmllbGQsCiAgICBic2NUZXN0bmV0OiAoKSA9PiBic2NUZXN0bmV0LAogICAgYnRyOiAoKSA9PiBidHIsCiAgICBidHJUZXN0bmV0OiAoKSA9PiBidHJUZXN0bmV0LAogICAgYnhuOiAoKSA9PiBieG4sCiAgICBieG5UZXN0bmV0OiAoKSA9PiBieG5UZXN0bmV0LAogICAgY2FudG86ICgpID0+IGNhbnRvLAogICAgY2VsbzogKCkgPT4gY2VsbywKICAgIGNlbG9BbGZham9yZXM6ICgpID0+IGNlbG9BbGZham9yZXMsCiAgICBjaGlsaXo6ICgpID0+IGNoaWxpeiwKICAgIGNoaXBzOiAoKSA9PiBjaGlwcywKICAgIGNsYXNzaWM6ICgpID0+IGNsYXNzaWMsCiAgICBjb25mbHV4RVNwYWNlOiAoKSA9PiBjb25mbHV4RVNwYWNlLAogICAgY29uZmx1eEVTcGFjZVRlc3RuZXQ6ICgpID0+IGNvbmZsdXhFU3BhY2VUZXN0bmV0LAogICAgY29yZURhbzogKCkgPT4gY29yZURhbywKICAgIGNyYWI6ICgpID0+IGNyYWIsCiAgICBjcm9ub3M6ICgpID0+IGNyb25vcywKICAgIGNyb25vc1Rlc3RuZXQ6ICgpID0+IGNyb25vc1Rlc3RuZXQsCiAgICBjcm9ub3N6a0VWTTogKCkgPT4gY3Jvbm9zemtFVk0sCiAgICBjcm9ub3N6a0VWTVRlc3RuZXQ6ICgpID0+IGNyb25vc3prRVZNVGVzdG5ldCwKICAgIGNyb3NzYmVsbDogKCkgPT4gY3Jvc3NiZWxsLAogICAgY3VydGlzOiAoKSA9PiBjdXJ0aXMsCiAgICBjeWJlcjogKCkgPT4gY3liZXIsCiAgICBjeWJlclRlc3RuZXQ6ICgpID0+IGN5YmVyVGVzdG5ldCwKICAgIGRhcndpbmlhOiAoKSA9PiBkYXJ3aW5pYSwKICAgIGRjaGFpbjogKCkgPT4gZGNoYWluLAogICAgZGNoYWluVGVzdG5ldDogKCkgPT4gZGNoYWluVGVzdG5ldCwKICAgIGRlZmljaGFpbkV2bTogKCkgPT4gZGVmaWNoYWluRXZtLAogICAgZGVmaWNoYWluRXZtVGVzdG5ldDogKCkgPT4gZGVmaWNoYWluRXZtVGVzdG5ldCwKICAgIGRlZ2VuOiAoKSA9PiBkZWdlbiwKICAgIGRmazogKCkgPT4gZGZrLAogICAgZG9kb2NoYWluVGVzdG5ldDogKCkgPT4gZG9kb2NoYWluVGVzdG5ldCwKICAgIGRvZ2VjaGFpbjogKCkgPT4gZG9nZWNoYWluLAogICAgZHJleWVyeE1haW5uZXQ6ICgpID0+IGRyZXllcnhNYWlubmV0LAogICAgZHJleWVyeFRlc3RuZXQ6ICgpID0+IGRyZXllcnhUZXN0bmV0LAogICAgZWRnZWxlc3M6ICgpID0+IGVkZ2VsZXNzLAogICAgZWRnZWxlc3NUZXN0bmV0OiAoKSA9PiBlZGdlbGVzc1Rlc3RuZXQsCiAgICBlZGdld2FyZTogKCkgPT4gZWRnZXdhcmUsCiAgICBlZGdld2FyZVRlc3RuZXQ6ICgpID0+IGVkZ2V3YXJlVGVzdG5ldCwKICAgIGVrdGE6ICgpID0+IGVrdGEsCiAgICBla3RhVGVzdG5ldDogKCkgPT4gZWt0YVRlc3RuZXQsCiAgICBlb246ICgpID0+IGVvbiwKICAgIGVvczogKCkgPT4gZW9zLAogICAgZW9zVGVzdG5ldDogKCkgPT4gZW9zVGVzdG5ldCwKICAgIGV0aGVybGluazogKCkgPT4gZXRoZXJsaW5rLAogICAgZXRoZXJsaW5rVGVzdG5ldDogKCkgPT4gZXRoZXJsaW5rVGVzdG5ldCwKICAgIGV2bW9zOiAoKSA9PiBldm1vcywKICAgIGV2bW9zVGVzdG5ldDogKCkgPT4gZXZtb3NUZXN0bmV0LAogICAgZmFudG9tOiAoKSA9PiBmYW50b20sCiAgICBmYW50b21Tb25pY1Rlc3RuZXQ6ICgpID0+IGZhbnRvbVNvbmljVGVzdG5ldCwKICAgIGZhbnRvbVRlc3RuZXQ6ICgpID0+IGZhbnRvbVRlc3RuZXQsCiAgICBmaWJvOiAoKSA9PiBmaWJvLAogICAgZmlsZWNvaW46ICgpID0+IGZpbGVjb2luLAogICAgZmlsZWNvaW5DYWxpYnJhdGlvbjogKCkgPT4gZmlsZWNvaW5DYWxpYnJhdGlvbiwKICAgIGZpbGVjb2luSHlwZXJzcGFjZTogKCkgPT4gZmlsZWNvaW5IeXBlcnNwYWNlLAogICAgZmxhcmU6ICgpID0+IGZsYXJlLAogICAgZmxhcmVUZXN0bmV0OiAoKSA9PiBmbGFyZVRlc3RuZXQsCiAgICBmbG93TWFpbm5ldDogKCkgPT4gZmxvd01haW5uZXQsCiAgICBmbG93UHJldmlld25ldDogKCkgPT4gZmxvd1ByZXZpZXduZXQsCiAgICBmbG93VGVzdG5ldDogKCkgPT4gZmxvd1Rlc3RuZXQsCiAgICBmb3JtYTogKCkgPT4gZm9ybWEsCiAgICBmb3VuZHJ5OiAoKSA9PiBmb3VuZHJ5LAogICAgZnJheHRhbDogKCkgPT4gZnJheHRhbCwKICAgIGZyYXh0YWxUZXN0bmV0OiAoKSA9PiBmcmF4dGFsVGVzdG5ldCwKICAgIGZ1bmtpTWFpbm5ldDogKCkgPT4gZnVua2lNYWlubmV0LAogICAgZnVua2lTZXBvbGlhOiAoKSA9PiBmdW5raVNlcG9saWEsCiAgICBmdXNlOiAoKSA9PiBmdXNlLAogICAgZnVzZVNwYXJrbmV0OiAoKSA9PiBmdXNlU3BhcmtuZXQsCiAgICBnbm9zaXM6ICgpID0+IGdub3NpcywKICAgIGdub3Npc0NoaWFkbzogKCkgPT4gZ25vc2lzQ2hpYWRvLAogICAgZ29iaTogKCkgPT4gZ29iaSwKICAgIGdvZXJsaTogKCkgPT4gZ29lcmxpLAogICAgZ3Jhdml0eTogKCkgPT4gZ3Jhdml0eSwKICAgIGhhbTogKCkgPT4gaGFtLAogICAgaGFxcU1haW5uZXQ6ICgpID0+IGhhcXFNYWlubmV0LAogICAgaGFxcVRlc3RlZGdlMjogKCkgPT4gaGFxcVRlc3RlZGdlMiwKICAgIGhhcmRoYXQ6ICgpID0+IGhhcmRoYXQsCiAgICBoYXJtb255T25lOiAoKSA9PiBoYXJtb255T25lLAogICAgaGVkZXJhOiAoKSA9PiBoZWRlcmEsCiAgICBoZWRlcmFQcmV2aWV3bmV0OiAoKSA9PiBoZWRlcmFQcmV2aWV3bmV0LAogICAgaGVkZXJhVGVzdG5ldDogKCkgPT4gaGVkZXJhVGVzdG5ldCwKICAgIGhvbGVza3k6ICgpID0+IGhvbGVza3ksCiAgICBpbW11dGFibGVaa0V2bTogKCkgPT4gaW1tdXRhYmxlWmtFdm0sCiAgICBpbW11dGFibGVaa0V2bVRlc3RuZXQ6ICgpID0+IGltbXV0YWJsZVprRXZtVGVzdG5ldCwKICAgIGluRVZNOiAoKSA9PiBpbkVWTSwKICAgIGlvdGE6ICgpID0+IGlvdGEsCiAgICBpb3RhVGVzdG5ldDogKCkgPT4gaW90YVRlc3RuZXQsCiAgICBpb3RleDogKCkgPT4gaW90ZXgsCiAgICBpb3RleFRlc3RuZXQ6ICgpID0+IGlvdGV4VGVzdG5ldCwKICAgIGpiYzogKCkgPT4gamJjLAogICAgamJjVGVzdG5ldDogKCkgPT4gamJjVGVzdG5ldCwKICAgIGtha2Fyb3RTZXBvbGlhOiAoKSA9PiBrYWthcm90U2Vwb2xpYSwKICAgIGthcnVyYTogKCkgPT4ga2FydXJhLAogICAga2F2YTogKCkgPT4ga2F2YSwKICAgIGthdmFUZXN0bmV0OiAoKSA9PiBrYXZhVGVzdG5ldCwKICAgIGtjYzogKCkgPT4ga2NjLAogICAga2xheXRuOiAoKSA9PiBrbGF5dG4sCiAgICBrbGF5dG5CYW9iYWI6ICgpID0+IGtsYXl0bkJhb2JhYiwKICAgIGtvaTogKCkgPT4ga29pLAogICAga3JvbWE6ICgpID0+IGtyb21hLAogICAga3JvbWFTZXBvbGlhOiAoKSA9PiBrcm9tYVNlcG9saWEsCiAgICBsM3g6ICgpID0+IGwzeCwKICAgIGwzeFRlc3RuZXQ6ICgpID0+IGwzeFRlc3RuZXQsCiAgICBsaWdodGxpbmtQZWdhc3VzOiAoKSA9PiBsaWdodGxpbmtQZWdhc3VzLAogICAgbGlnaHRsaW5rUGhvZW5peDogKCkgPT4gbGlnaHRsaW5rUGhvZW5peCwKICAgIGxpbmVhOiAoKSA9PiBsaW5lYSwKICAgIGxpbmVhR29lcmxpOiAoKSA9PiBsaW5lYUdvZXJsaSwKICAgIGxpbmVhU2Vwb2xpYTogKCkgPT4gbGluZWFTZXBvbGlhLAogICAgbGluZWFUZXN0bmV0OiAoKSA9PiBsaW5lYVRlc3RuZXQsCiAgICBsaXNrOiAoKSA9PiBsaXNrLAogICAgbGlza1NlcG9saWE6ICgpID0+IGxpc2tTZXBvbGlhLAogICAgbG9jYWxob3N0OiAoKSA9PiBsb2NhbGhvc3QsCiAgICBsdWtzbzogKCkgPT4gbHVrc28sCiAgICBsdWtzb1Rlc3RuZXQ6ICgpID0+IGx1a3NvVGVzdG5ldCwKICAgIGx5Y2FuOiAoKSA9PiBseWNhbiwKICAgIGx5cmE6ICgpID0+IGx5cmEsCiAgICBtYWlubmV0OiAoKSA9PiBtYWlubmV0LAogICAgbWFuZGFsYTogKCkgPT4gbWFuZGFsYSwKICAgIG1hbnRhOiAoKSA9PiBtYW50YSwKICAgIG1hbnRhU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IG1hbnRhU2Vwb2xpYVRlc3RuZXQsCiAgICBtYW50YVRlc3RuZXQ6ICgpID0+IG1hbnRhVGVzdG5ldCwKICAgIG1hbnRsZTogKCkgPT4gbWFudGxlLAogICAgbWFudGxlU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IG1hbnRsZVNlcG9saWFUZXN0bmV0LAogICAgbWFudGxlVGVzdG5ldDogKCkgPT4gbWFudGxlVGVzdG5ldCwKICAgIG1lcmxpbjogKCkgPT4gbWVybGluLAogICAgbWV0YWNoYWluOiAoKSA9PiBtZXRhY2hhaW4sCiAgICBtZXRhY2hhaW5Jc3RhbmJ1bDogKCkgPT4gbWV0YWNoYWluSXN0YW5idWwsCiAgICBtZXRhbEwyOiAoKSA9PiBtZXRhbEwyLAogICAgbWV0ZXI6ICgpID0+IG1ldGVyLAogICAgbWV0ZXJUZXN0bmV0OiAoKSA9PiBtZXRlclRlc3RuZXQsCiAgICBtZXRpczogKCkgPT4gbWV0aXMsCiAgICBtZXRpc0dvZXJsaTogKCkgPT4gbWV0aXNHb2VybGksCiAgICBtZXY6ICgpID0+IG1ldiwKICAgIG1ldlRlc3RuZXQ6ICgpID0+IG1ldlRlc3RuZXQsCiAgICBtaW50U2Vwb2xpYVRlc3RuZXQ6ICgpID0+IG1pbnRTZXBvbGlhVGVzdG5ldCwKICAgIG1vZGU6ICgpID0+IG1vZGUsCiAgICBtb2RlVGVzdG5ldDogKCkgPT4gbW9kZVRlc3RuZXQsCiAgICBtb29uYmFzZUFscGhhOiAoKSA9PiBtb29uYmFzZUFscGhhLAogICAgbW9vbmJlYW06ICgpID0+IG1vb25iZWFtLAogICAgbW9vbmJlYW1EZXY6ICgpID0+IG1vb25iZWFtRGV2LAogICAgbW9vbnJpdmVyOiAoKSA9PiBtb29ucml2ZXIsCiAgICBtb3JwaEhvbGVza3k6ICgpID0+IG1vcnBoSG9sZXNreSwKICAgIG1vcnBoU2Vwb2xpYTogKCkgPT4gbW9ycGhTZXBvbGlhLAogICAgbmF1dGlsdXM6ICgpID0+IG5hdXRpbHVzLAogICAgbmVvbkRldm5ldDogKCkgPT4gbmVvbkRldm5ldCwKICAgIG5lb25NYWlubmV0OiAoKSA9PiBuZW9uTWFpbm5ldCwKICAgIG5leGk6ICgpID0+IG5leGksCiAgICBuZXhpbGl4OiAoKSA9PiBuZXhpbGl4LAogICAgb2FzaXNUZXN0bmV0OiAoKSA9PiBvYXNpc1Rlc3RuZXQsCiAgICBvYXN5czogKCkgPT4gb2FzeXMsCiAgICBva2M6ICgpID0+IG9rYywKICAgIG9vcnRNYWlubmV0RGV2OiAoKSA9PiBvb3J0TWFpbm5ldERldiwKICAgIG9wQk5COiAoKSA9PiBvcEJOQiwKICAgIG9wQk5CVGVzdG5ldDogKCkgPT4gb3BCTkJUZXN0bmV0LAogICAgb3B0aW1pc206ICgpID0+IG9wdGltaXNtLAogICAgb3B0aW1pc21Hb2VybGk6ICgpID0+IG9wdGltaXNtR29lcmxpLAogICAgb3B0aW1pc21TZXBvbGlhOiAoKSA9PiBvcHRpbWlzbVNlcG9saWEsCiAgICBvdGltRGV2bmV0OiAoKSA9PiBvdGltRGV2bmV0LAogICAgcGFsbTogKCkgPT4gcGFsbSwKICAgIHBhbG1UZXN0bmV0OiAoKSA9PiBwYWxtVGVzdG5ldCwKICAgIHBnbjogKCkgPT4gcGduLAogICAgcGduVGVzdG5ldDogKCkgPT4gcGduVGVzdG5ldCwKICAgIHBob2VuaXg6ICgpID0+IHBob2VuaXgsCiAgICBwbGF5ZmlBbGJpcmVvOiAoKSA9PiBwbGF5ZmlBbGJpcmVvLAogICAgcGxpbmdhOiAoKSA9PiBwbGluZ2EsCiAgICBwbHVtZVRlc3RuZXQ6ICgpID0+IHBsdW1lVGVzdG5ldCwKICAgIHBvbHlnb246ICgpID0+IHBvbHlnb24sCiAgICBwb2x5Z29uQW1veTogKCkgPT4gcG9seWdvbkFtb3ksCiAgICBwb2x5Z29uTXVtYmFpOiAoKSA9PiBwb2x5Z29uTXVtYmFpLAogICAgcG9seWdvblprRXZtOiAoKSA9PiBwb2x5Z29uWmtFdm0sCiAgICBwb2x5Z29uWmtFdm1DYXJkb25hOiAoKSA9PiBwb2x5Z29uWmtFdm1DYXJkb25hLAogICAgcG9seWdvblprRXZtVGVzdG5ldDogKCkgPT4gcG9seWdvblprRXZtVGVzdG5ldCwKICAgIHB1bHNlY2hhaW46ICgpID0+IHB1bHNlY2hhaW4sCiAgICBwdWxzZWNoYWluVjQ6ICgpID0+IHB1bHNlY2hhaW5WNCwKICAgIHFNYWlubmV0OiAoKSA9PiBxTWFpbm5ldCwKICAgIHFUZXN0bmV0OiAoKSA9PiBxVGVzdG5ldCwKICAgIHJlYWw6ICgpID0+IHJlYWwsCiAgICByZWRiZWxseVRlc3RuZXQ6ICgpID0+IHJlZGJlbGx5VGVzdG5ldCwKICAgIHJlZHN0b25lOiAoKSA9PiByZWRzdG9uZSwKICAgIHJleWFOZXR3b3JrOiAoKSA9PiByZXlhTmV0d29yaywKICAgIHJvbGx1eDogKCkgPT4gcm9sbHV4LAogICAgcm9sbHV4VGVzdG5ldDogKCkgPT4gcm9sbHV4VGVzdG5ldCwKICAgIHJvbmluOiAoKSA9PiByb25pbiwKICAgIHJvb3Q6ICgpID0+IHJvb3QsCiAgICByb290UG9yY2luaTogKCkgPT4gcm9vdFBvcmNpbmksCiAgICByb290c3RvY2s6ICgpID0+IHJvb3RzdG9jaywKICAgIHJvb3RzdG9ja1Rlc3RuZXQ6ICgpID0+IHJvb3RzdG9ja1Rlc3RuZXQsCiAgICByc3MzOiAoKSA9PiByc3MzLAogICAgcnNzM1NlcG9saWE6ICgpID0+IHJzczNTZXBvbGlhLAogICAgc2FpZ29uOiAoKSA9PiBzYWlnb24sCiAgICBzYXBwaGlyZTogKCkgPT4gc2FwcGhpcmUsCiAgICBzYXBwaGlyZVRlc3RuZXQ6ICgpID0+IHNhcHBoaXJlVGVzdG5ldCwKICAgIHNhdG9zaGlWTTogKCkgPT4gc2F0b3NoaVZNLAogICAgc2F0b3NoaVZNVGVzdG5ldDogKCkgPT4gc2F0b3NoaVZNVGVzdG5ldCwKICAgIHNjcm9sbDogKCkgPT4gc2Nyb2xsLAogICAgc2Nyb2xsU2Vwb2xpYTogKCkgPT4gc2Nyb2xsU2Vwb2xpYSwKICAgIHNlaTogKCkgPT4gc2VpLAogICAgc2VpRGV2bmV0OiAoKSA9PiBzZWlEZXZuZXQsCiAgICBzZWlUZXN0bmV0OiAoKSA9PiBzZWlUZXN0bmV0LAogICAgc2Vwb2xpYTogKCkgPT4gc2Vwb2xpYSwKICAgIHNoYXBlU2Vwb2xpYTogKCkgPT4gc2hhcGVTZXBvbGlhLAogICAgc2hhcmRldW1TcGhpbng6ICgpID0+IHNoYXJkZXVtU3BoaW54LAogICAgc2hpYmFyaXVtOiAoKSA9PiBzaGliYXJpdW0sCiAgICBzaGliYXJpdW1UZXN0bmV0OiAoKSA9PiBzaGliYXJpdW1UZXN0bmV0LAogICAgc2hpbW1lcjogKCkgPT4gc2hpbW1lciwKICAgIHNoaW1tZXJUZXN0bmV0OiAoKSA9PiBzaGltbWVyVGVzdG5ldCwKICAgIHNrYWxlQmxvY2tCcmF3bGVyczogKCkgPT4gc2thbGVCbG9ja0JyYXdsZXJzLAogICAgc2thbGVDYWx5cHNvOiAoKSA9PiBza2FsZUNhbHlwc28sCiAgICBza2FsZUNhbHlwc29UZXN0bmV0OiAoKSA9PiBza2FsZUNhbHlwc29UZXN0bmV0LAogICAgc2thbGVDcnlwdG9CbGFkZXM6ICgpID0+IHNrYWxlQ3J5cHRvQmxhZGVzLAogICAgc2thbGVDcnlwdG9Db2xvc3NldW06ICgpID0+IHNrYWxlQ3J5cHRvQ29sb3NzZXVtLAogICAgc2thbGVFdXJvcGE6ICgpID0+IHNrYWxlRXVyb3BhLAogICAgc2thbGVFdXJvcGFUZXN0bmV0OiAoKSA9PiBza2FsZUV1cm9wYVRlc3RuZXQsCiAgICBza2FsZUV4b3JkZTogKCkgPT4gc2thbGVFeG9yZGUsCiAgICBza2FsZUh1bWFuUHJvdG9jb2w6ICgpID0+IHNrYWxlSHVtYW5Qcm90b2NvbCwKICAgIHNrYWxlTmVidWxhOiAoKSA9PiBza2FsZU5lYnVsYSwKICAgIHNrYWxlTmVidWxhVGVzdG5ldDogKCkgPT4gc2thbGVOZWJ1bGFUZXN0bmV0LAogICAgc2thbGVSYXpvcjogKCkgPT4gc2thbGVSYXpvciwKICAgIHNrYWxlVGl0YW46ICgpID0+IHNrYWxlVGl0YW4sCiAgICBza2FsZVRpdGFuVGVzdG5ldDogKCkgPT4gc2thbGVUaXRhblRlc3RuZXQsCiAgICBza2V0Y2hwYWQ6ICgpID0+IHNrZXRjaHBhZCwKICAgIHNvbmdiaXJkOiAoKSA9PiBzb25nYmlyZCwKICAgIHNvbmdiaXJkVGVzdG5ldDogKCkgPT4gc29uZ2JpcmRUZXN0bmV0LAogICAgc3BpY3k6ICgpID0+IHNwaWN5LAogICAgc3RyYXRpczogKCkgPT4gc3RyYXRpcywKICAgIHN5c2NvaW46ICgpID0+IHN5c2NvaW4sCiAgICBzeXNjb2luVGVzdG5ldDogKCkgPT4gc3lzY29pblRlc3RuZXQsCiAgICB0YWlrbzogKCkgPT4gdGFpa28sCiAgICB0YWlrb0hla2xhOiAoKSA9PiB0YWlrb0hla2xhLAogICAgdGFpa29Kb2xuaXI6ICgpID0+IHRhaWtvSm9sbmlyLAogICAgdGFpa29LYXRsYTogKCkgPT4gdGFpa29LYXRsYSwKICAgIHRhaWtvVGVzdG5ldFNlcG9saWE6ICgpID0+IHRhaWtvVGVzdG5ldFNlcG9saWEsCiAgICB0YXJheGE6ICgpID0+IHRhcmF4YSwKICAgIHRhcmF4YVRlc3RuZXQ6ICgpID0+IHRhcmF4YVRlc3RuZXQsCiAgICB0ZWxjb2luVGVzdG5ldDogKCkgPT4gdGVsY29pblRlc3RuZXQsCiAgICB0ZWxvczogKCkgPT4gdGVsb3MsCiAgICB0ZWxvc1Rlc3RuZXQ6ICgpID0+IHRlbG9zVGVzdG5ldCwKICAgIHRlbmV0OiAoKSA9PiB0ZW5ldCwKICAgIHRoYWlDaGFpbjogKCkgPT4gdGhhaUNoYWluLAogICAgdGh1bmRlclRlc3RuZXQ6ICgpID0+IHRodW5kZXJUZXN0bmV0LAogICAgdW5yZWFsOiAoKSA9PiB1bnJlYWwsCiAgICB2ZWNoYWluOiAoKSA9PiB2ZWNoYWluLAogICAgd2FuY2hhaW46ICgpID0+IHdhbmNoYWluLAogICAgd2FuY2hhaW5UZXN0bmV0OiAoKSA9PiB3YW5jaGFpblRlc3RuZXQsCiAgICB3ZW1peDogKCkgPT4gd2VtaXgsCiAgICB3ZW1peFRlc3RuZXQ6ICgpID0+IHdlbWl4VGVzdG5ldCwKICAgIHgxVGVzdG5ldDogKCkgPT4geExheWVyVGVzdG5ldCwKICAgIHhMYXllcjogKCkgPT4geExheWVyLAogICAgeExheWVyVGVzdG5ldDogKCkgPT4geExheWVyVGVzdG5ldCwKICAgIHhhaTogKCkgPT4geGFpLAogICAgeGFpVGVzdG5ldDogKCkgPT4geGFpVGVzdG5ldCwKICAgIHhkYzogKCkgPT4geGRjLAogICAgeGRjVGVzdG5ldDogKCkgPT4geGRjVGVzdG5ldCwKICAgIHhyU2Vwb2xpYTogKCkgPT4geHJTZXBvbGlhLAogICAgeW9vbGRvVmVyc2U6ICgpID0+IHlvb2xkb1ZlcnNlLAogICAgeW9vbGRvVmVyc2VUZXN0bmV0OiAoKSA9PiB5b29sZG9WZXJzZVRlc3RuZXQsCiAgICB6ZXRhY2hhaW46ICgpID0+IHpldGFjaGFpbiwKICAgIHpldGFjaGFpbkF0aGVuc1Rlc3RuZXQ6ICgpID0+IHpldGFjaGFpbkF0aGVuc1Rlc3RuZXQsCiAgICB6aGVqaWFuZzogKCkgPT4gemhlamlhbmcsCiAgICB6aWxsaXFhOiAoKSA9PiB6aWxsaXFhLAogICAgemlsbGlxYVRlc3RuZXQ6ICgpID0+IHppbGxpcWFUZXN0bmV0LAogICAgemlyY3VpdFRlc3RuZXQ6ICgpID0+IHppcmN1aXRUZXN0bmV0LAogICAgemtGYWlyOiAoKSA9PiB6a0ZhaXIsCiAgICB6a0ZhaXJUZXN0bmV0OiAoKSA9PiB6a0ZhaXJUZXN0bmV0LAogICAgemtMaW5rTm92YTogKCkgPT4gemtMaW5rTm92YSwKICAgIHprTGlua05vdmFTZXBvbGlhVGVzdG5ldDogKCkgPT4gemtMaW5rTm92YVNlcG9saWFUZXN0bmV0LAogICAgemtTeW5jOiAoKSA9PiB6a3N5bmMsCiAgICB6a1N5bmNJbk1lbW9yeU5vZGU6ICgpID0+IHprc3luY0luTWVtb3J5Tm9kZSwKICAgIHprU3luY0xvY2FsTm9kZTogKCkgPT4gemtzeW5jTG9jYWxOb2RlLAogICAgemtTeW5jU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IHprc3luY1NlcG9saWFUZXN0bmV0LAogICAgemtzeW5jOiAoKSA9PiB6a3N5bmMsCiAgICB6a3N5bmNJbk1lbW9yeU5vZGU6ICgpID0+IHprc3luY0luTWVtb3J5Tm9kZSwKICAgIHprc3luY0xvY2FsTm9kZTogKCkgPT4gemtzeW5jTG9jYWxOb2RlLAogICAgemtzeW5jU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IHprc3luY1NlcG9saWFUZXN0bmV0LAogICAgem9yYTogKCkgPT4gem9yYSwKICAgIHpvcmFTZXBvbGlhOiAoKSA9PiB6b3JhU2Vwb2xpYSwKICAgIHpvcmFUZXN0bmV0OiAoKSA9PiB6b3JhVGVzdG5ldAogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9mb3JtYXR0ZXJzLmpzCiAgaW5pdF9mcm9tSGV4KCk7CiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGluaXRfdHJhbnNhY3Rpb25SZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL2NvbnN0YW50cy9udW1iZXIuanMKICB2YXIgZ2FzUGVyUHViZGF0YURlZmF1bHQgPSA1MDAwMG47CiAgdmFyIG1heEJ5dGVjb2RlU2l6ZSA9IG1heFVpbnQxNiAqIDMybjsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvZm9ybWF0dGVycy5qcwogIHZhciBmb3JtYXR0ZXJzID0gewogICAgYmxvY2s6IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVCbG9jayh7CiAgICAgIGZvcm1hdChhcmdzKSB7CiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25zID0gYXJncy50cmFuc2FjdGlvbnM/Lm1hcCgodHJhbnNhY3Rpb24pID0+IHsKICAgICAgICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24gPT09ICJzdHJpbmciKQogICAgICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXR0ZXJzLnRyYW5zYWN0aW9uPy5mb3JtYXQodHJhbnNhY3Rpb24pOwogICAgICAgICAgaWYgKGZvcm1hdHRlZC50eXBlSGV4ID09PSAiMHg3MSIpCiAgICAgICAgICAgIGZvcm1hdHRlZC50eXBlID0gImVpcDcxMiI7CiAgICAgICAgICBlbHNlIGlmIChmb3JtYXR0ZWQudHlwZUhleCA9PT0gIjB4ZmYiKQogICAgICAgICAgICBmb3JtYXR0ZWQudHlwZSA9ICJwcmlvcml0eSI7CiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBsMUJhdGNoTnVtYmVyOiBhcmdzLmwxQmF0Y2hOdW1iZXIgPyBoZXhUb0JpZ0ludChhcmdzLmwxQmF0Y2hOdW1iZXIpIDogbnVsbCwKICAgICAgICAgIGwxQmF0Y2hUaW1lc3RhbXA6IGFyZ3MubDFCYXRjaFRpbWVzdGFtcCA/IGhleFRvQmlnSW50KGFyZ3MubDFCYXRjaFRpbWVzdGFtcCkgOiBudWxsLAogICAgICAgICAgdHJhbnNhY3Rpb25zCiAgICAgICAgfTsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvbjogLyogQF9fUFVSRV9fICovIGRlZmluZVRyYW5zYWN0aW9uKHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHt9OwogICAgICAgIGlmIChhcmdzLnR5cGUgPT09ICIweDcxIikKICAgICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAiZWlwNzEyIjsKICAgICAgICBlbHNlIGlmIChhcmdzLnR5cGUgPT09ICIweGZmIikKICAgICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAicHJpb3JpdHkiOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgICAgIGwxQmF0Y2hOdW1iZXI6IGFyZ3MubDFCYXRjaE51bWJlciA/IGhleFRvQmlnSW50KGFyZ3MubDFCYXRjaE51bWJlcikgOiBudWxsLAogICAgICAgICAgbDFCYXRjaFR4SW5kZXg6IGFyZ3MubDFCYXRjaFR4SW5kZXggPyBoZXhUb0JpZ0ludChhcmdzLmwxQmF0Y2hUeEluZGV4KSA6IG51bGwKICAgICAgICB9OwogICAgICB9CiAgICB9KSwKICAgIHRyYW5zYWN0aW9uUmVjZWlwdDogLyogQF9fUFVSRV9fICovIGRlZmluZVRyYW5zYWN0aW9uUmVjZWlwdCh7CiAgICAgIGZvcm1hdChhcmdzKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGwxQmF0Y2hOdW1iZXI6IGFyZ3MubDFCYXRjaE51bWJlciA/IGhleFRvQmlnSW50KGFyZ3MubDFCYXRjaE51bWJlcikgOiBudWxsLAogICAgICAgICAgbDFCYXRjaFR4SW5kZXg6IGFyZ3MubDFCYXRjaFR4SW5kZXggPyBoZXhUb0JpZ0ludChhcmdzLmwxQmF0Y2hUeEluZGV4KSA6IG51bGwsCiAgICAgICAgICBsb2dzOiBhcmdzLmxvZ3MubWFwKChsb2cpID0+IHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAuLi5mb3JtYXRMb2cobG9nKSwKICAgICAgICAgICAgICBsMUJhdGNoTnVtYmVyOiBsb2cubDFCYXRjaE51bWJlciA/IGhleFRvQmlnSW50KGxvZy5sMUJhdGNoTnVtYmVyKSA6IG51bGwsCiAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Mb2dJbmRleDogaGV4VG9OdW1iZXIobG9nLnRyYW5zYWN0aW9uTG9nSW5kZXgpLAogICAgICAgICAgICAgIGxvZ1R5cGU6IGxvZy5sb2dUeXBlCiAgICAgICAgICAgIH07CiAgICAgICAgICB9KSwKICAgICAgICAgIGwyVG9MMUxvZ3M6IGFyZ3MubDJUb0wxTG9ncy5tYXAoKGwyVG9MMUxvZykgPT4gewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIGJsb2NrTnVtYmVyOiBoZXhUb0JpZ0ludChsMlRvTDFMb2cuYmxvY2tIYXNoKSwKICAgICAgICAgICAgICBibG9ja0hhc2g6IGwyVG9MMUxvZy5ibG9ja0hhc2gsCiAgICAgICAgICAgICAgbDFCYXRjaE51bWJlcjogaGV4VG9CaWdJbnQobDJUb0wxTG9nLmwxQmF0Y2hOdW1iZXIpLAogICAgICAgICAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IGhleFRvQmlnSW50KGwyVG9MMUxvZy50cmFuc2FjdGlvbkluZGV4KSwKICAgICAgICAgICAgICBzaGFyZElkOiBoZXhUb0JpZ0ludChsMlRvTDFMb2cuc2hhcmRJZCksCiAgICAgICAgICAgICAgaXNTZXJ2aWNlOiBsMlRvTDFMb2cuaXNTZXJ2aWNlLAogICAgICAgICAgICAgIHNlbmRlcjogbDJUb0wxTG9nLnNlbmRlciwKICAgICAgICAgICAgICBrZXk6IGwyVG9MMUxvZy5rZXksCiAgICAgICAgICAgICAgdmFsdWU6IGwyVG9MMUxvZy52YWx1ZSwKICAgICAgICAgICAgICB0cmFuc2FjdGlvbkhhc2g6IGwyVG9MMUxvZy50cmFuc2FjdGlvbkhhc2gsCiAgICAgICAgICAgICAgbG9nSW5kZXg6IGhleFRvQmlnSW50KGwyVG9MMUxvZy5sb2dJbmRleCkKICAgICAgICAgICAgfTsKICAgICAgICAgIH0pCiAgICAgICAgfTsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvblJlcXVlc3Q6IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVUcmFuc2FjdGlvblJlcXVlc3QoewogICAgICBleGNsdWRlOiBbCiAgICAgICAgImN1c3RvbVNpZ25hdHVyZSIsCiAgICAgICAgImZhY3RvcnlEZXBzIiwKICAgICAgICAiZ2FzUGVyUHViZGF0YSIsCiAgICAgICAgInBheW1hc3RlciIsCiAgICAgICAgInBheW1hc3RlcklucHV0IgogICAgICBdLAogICAgICBmb3JtYXQoYXJncykgewogICAgICAgIGlmIChhcmdzLmdhc1BlclB1YmRhdGEgfHwgYXJncy5wYXltYXN0ZXIgJiYgYXJncy5wYXltYXN0ZXJJbnB1dCB8fCBhcmdzLmZhY3RvcnlEZXBzIHx8IGFyZ3MuY3VzdG9tU2lnbmF0dXJlKQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgZWlwNzEyTWV0YTogewogICAgICAgICAgICAgIC4uLmFyZ3MuZ2FzUGVyUHViZGF0YSA/IHsgZ2FzUGVyUHViZGF0YTogdG9IZXgoYXJncy5nYXNQZXJQdWJkYXRhKSB9IDogeyBnYXNQZXJQdWJkYXRhOiB0b0hleChnYXNQZXJQdWJkYXRhRGVmYXVsdCkgfSwKICAgICAgICAgICAgICAuLi5hcmdzLnBheW1hc3RlciAmJiBhcmdzLnBheW1hc3RlcklucHV0ID8gewogICAgICAgICAgICAgICAgcGF5bWFzdGVyUGFyYW1zOiB7CiAgICAgICAgICAgICAgICAgIHBheW1hc3RlcjogYXJncy5wYXltYXN0ZXIsCiAgICAgICAgICAgICAgICAgIHBheW1hc3RlcklucHV0OiBBcnJheS5mcm9tKGhleFRvQnl0ZXMoYXJncy5wYXltYXN0ZXJJbnB1dCkpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSA6IHt9LAogICAgICAgICAgICAgIC4uLmFyZ3MuZmFjdG9yeURlcHMgPyB7CiAgICAgICAgICAgICAgICBmYWN0b3J5RGVwczogYXJncy5mYWN0b3J5RGVwcy5tYXAoKGRlcCkgPT4gQXJyYXkuZnJvbShoZXhUb0J5dGVzKGRlcCkpKQogICAgICAgICAgICAgIH0gOiB7fSwKICAgICAgICAgICAgICAuLi5hcmdzLmN1c3RvbVNpZ25hdHVyZSA/IHsKICAgICAgICAgICAgICAgIGN1c3RvbVNpZ25hdHVyZTogQXJyYXkuZnJvbShoZXhUb0J5dGVzKGFyZ3MuY3VzdG9tU2lnbmF0dXJlKSkKICAgICAgICAgICAgICB9IDoge30KICAgICAgICAgICAgfSwKICAgICAgICAgICAgdHlwZTogIjB4NzEiCiAgICAgICAgICB9OwogICAgICAgIHJldHVybiB7fTsKICAgICAgfQogICAgfSkKICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9zZXJpYWxpemVycy5qcwogIGluaXRfY29uY2F0KCk7CiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy91dGlscy9hc3NlcnRFaXA3MTJUcmFuc2FjdGlvbi5qcwogIGluaXRfYWRkcmVzcygpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY2hhaW4oKTsKICBpbml0X2lzQWRkcmVzcygpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9lcnJvcnMvdHJhbnNhY3Rpb24uanMKICBpbml0X2Jhc2UoKTsKICB2YXIgSW52YWxpZEVpcDcxMlRyYW5zYWN0aW9uRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKFsKICAgICAgICAiVHJhbnNhY3Rpb24gaXMgbm90IGFuIEVJUDcxMiB0cmFuc2FjdGlvbi4iLAogICAgICAgICIiLAogICAgICAgICJUcmFuc2FjdGlvbiBtdXN0OiIsCiAgICAgICAgJyAgLSBpbmNsdWRlIGB0eXBlOiAiZWlwNzEyImAnLAogICAgICAgICIgIC0gaW5jbHVkZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogYGN1c3RvbVNpZ25hdHVyZWAsIGBwYXltYXN0ZXJgLCBgcGF5bWFzdGVySW5wdXRgLCBgZ2FzUGVyUHViZGF0YWAsIGBmYWN0b3J5RGVwc2AiCiAgICAgIF0uam9pbigiXG4iKSwgeyBuYW1lOiAiSW52YWxpZEVpcDcxMlRyYW5zYWN0aW9uRXJyb3IiIH0pOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL3V0aWxzL2lzRWlwNzEyVHJhbnNhY3Rpb24uanMKICBmdW5jdGlvbiBpc0VJUDcxMlRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKSB7CiAgICBpZiAodHJhbnNhY3Rpb24udHlwZSA9PT0gImVpcDcxMiIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCJjdXN0b21TaWduYXR1cmUiIGluIHRyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uLmN1c3RvbVNpZ25hdHVyZSB8fCAicGF5bWFzdGVyIiBpbiB0cmFuc2FjdGlvbiAmJiB0cmFuc2FjdGlvbi5wYXltYXN0ZXIgfHwgInBheW1hc3RlcklucHV0IiBpbiB0cmFuc2FjdGlvbiAmJiB0cmFuc2FjdGlvbi5wYXltYXN0ZXJJbnB1dCB8fCAiZ2FzUGVyUHViZGF0YSIgaW4gdHJhbnNhY3Rpb24gJiYgdHlwZW9mIHRyYW5zYWN0aW9uLmdhc1BlclB1YmRhdGEgPT09ICJiaWdpbnQiIHx8ICJmYWN0b3J5RGVwcyIgaW4gdHJhbnNhY3Rpb24gJiYgdHJhbnNhY3Rpb24uZmFjdG9yeURlcHMpCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvdXRpbHMvYXNzZXJ0RWlwNzEyVHJhbnNhY3Rpb24uanMKICBmdW5jdGlvbiBhc3NlcnRFaXA3MTJUcmFuc2FjdGlvbih0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCB0bywgZnJvbSwgcGF5bWFzdGVyLCBwYXltYXN0ZXJJbnB1dCB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoIWlzRUlQNzEyVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEVpcDcxMlRyYW5zYWN0aW9uRXJyb3IoKTsKICAgIGlmICghY2hhaW5JZCB8fCBjaGFpbklkIDw9IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhaW5JZEVycm9yKHsgY2hhaW5JZCB9KTsKICAgIGlmICh0byAmJiAhaXNBZGRyZXNzKHRvKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB0byB9KTsKICAgIGlmIChmcm9tICYmICFpc0FkZHJlc3MoZnJvbSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogZnJvbSB9KTsKICAgIGlmIChwYXltYXN0ZXIgJiYgIWlzQWRkcmVzcyhwYXltYXN0ZXIpKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IHBheW1hc3RlciB9KTsKICAgIGlmIChwYXltYXN0ZXIgJiYgIXBheW1hc3RlcklucHV0KSB7CiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgcGF5bWFzdGVySW5wdXRgIG11c3QgYmUgcHJvdmlkZWQgd2hlbiBgcGF5bWFzdGVyYCBpcyBkZWZpbmVkIik7CiAgICB9CiAgICBpZiAoIXBheW1hc3RlciAmJiBwYXltYXN0ZXJJbnB1dCkgewogICAgICB0aHJvdyBuZXcgQmFzZUVycm9yMigiYHBheW1hc3RlcmAgbXVzdCBiZSBwcm92aWRlZCB3aGVuIGBwYXltYXN0ZXJJbnB1dGAgaXMgZGVmaW5lZCIpOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvc2VyaWFsaXplcnMuanMKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbjIodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgaWYgKGlzRUlQNzEyVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVA3MTIodHJhbnNhY3Rpb24pOwogICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogIH0KICB2YXIgc2VyaWFsaXplcnMgPSB7CiAgICB0cmFuc2FjdGlvbjogc2VyaWFsaXplVHJhbnNhY3Rpb24yCiAgfTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDcxMih0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBnYXMsIG5vbmNlLCB0bywgZnJvbSwgdmFsdWUsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIGN1c3RvbVNpZ25hdHVyZSwgZmFjdG9yeURlcHMsIHBheW1hc3RlciwgcGF5bWFzdGVySW5wdXQsIGdhc1BlclB1YmRhdGEsIGRhdGEgfSA9IHRyYW5zYWN0aW9uOwogICAgYXNzZXJ0RWlwNzEyVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICBub25jZSA/IHRvSGV4KG5vbmNlKSA6ICIweCIsCiAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzID8gdG9IZXgobWF4UHJpb3JpdHlGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgbWF4RmVlUGVyR2FzID8gdG9IZXgobWF4RmVlUGVyR2FzKSA6ICIweCIsCiAgICAgIGdhcyA/IHRvSGV4KGdhcykgOiAiMHgiLAogICAgICB0byA/PyAiMHgiLAogICAgICB2YWx1ZSA/IHRvSGV4KHZhbHVlKSA6ICIweCIsCiAgICAgIGRhdGEgPz8gIjB4MCIsCiAgICAgIHRvSGV4KGNoYWluSWQpLAogICAgICB0b0hleCgiIiksCiAgICAgIHRvSGV4KCIiKSwKICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgIGZyb20gPz8gIjB4IiwKICAgICAgZ2FzUGVyUHViZGF0YSA/IHRvSGV4KGdhc1BlclB1YmRhdGEpIDogdG9IZXgoZ2FzUGVyUHViZGF0YURlZmF1bHQpLAogICAgICBmYWN0b3J5RGVwcyA/PyBbXSwKICAgICAgY3VzdG9tU2lnbmF0dXJlID8/ICIweCIsCiAgICAgIC8vIEVJUDcxMiBzaWduYXR1cmUKICAgICAgcGF5bWFzdGVyICYmIHBheW1hc3RlcklucHV0ID8gW3BheW1hc3RlciwgcGF5bWFzdGVySW5wdXRdIDogW10KICAgIF07CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4NzEiLAogICAgICB0b1JscChzZXJpYWxpemVkVHJhbnNhY3Rpb24pCiAgICBdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL3V0aWxzL2dldEVpcDcxMkRvbWFpbi5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvdXRpbHMvaGFzaEJ5dGVjb2RlLmpzCiAgaW5pdF9wYWQoKTsKICBpbml0X3RvQnl0ZXMoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvZXJyb3JzL2J5dGVjb2RlLmpzCiAgaW5pdF9iYXNlKCk7CiAgdmFyIEJ5dGVjb2RlTGVuZ3RoRXhjZWVkc01heFNpemVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGdpdmVuTGVuZ3RoLCBtYXhCeXRlY29kZVNpemU6IG1heEJ5dGVjb2RlU2l6ZTIgfSkgewogICAgICBzdXBlcihgQnl0ZWNvZGUgY2Fubm90IGJlIGxvbmdlciB0aGFuICR7bWF4Qnl0ZWNvZGVTaXplMn0gYnl0ZXMuIEdpdmVuIGxlbmd0aDogJHtnaXZlbkxlbmd0aH1gLCB7IG5hbWU6ICJCeXRlY29kZUxlbmd0aEV4Y2VlZHNNYXhTaXplRXJyb3IiIH0pOwogICAgfQogIH07CiAgdmFyIEJ5dGVjb2RlTGVuZ3RoSW5Xb3Jkc011c3RCZU9kZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgZ2l2ZW5MZW5ndGhJbldvcmRzIH0pIHsKICAgICAgc3VwZXIoYEJ5dGVjb2RlIGxlbmd0aCBpbiAzMi1ieXRlIHdvcmRzIG11c3QgYmUgb2RkLiBHaXZlbiBsZW5ndGggaW4gd29yZHM6ICR7Z2l2ZW5MZW5ndGhJbldvcmRzfWAsIHsgbmFtZTogIkJ5dGVjb2RlTGVuZ3RoSW5Xb3Jkc011c3RCZU9kZEVycm9yIiB9KTsKICAgIH0KICB9OwogIHZhciBCeXRlY29kZUxlbmd0aE11c3RCZURpdmlzaWJsZUJ5MzJFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGdpdmVuTGVuZ3RoIH0pIHsKICAgICAgc3VwZXIoYFRoZSBieXRlY29kZSBsZW5ndGggaW4gYnl0ZXMgbXVzdCBiZSBkaXZpc2libGUgYnkgMzIuIEdpdmVuIGxlbmd0aDogJHtnaXZlbkxlbmd0aH1gLCB7IG5hbWU6ICJCeXRlY29kZUxlbmd0aE11c3RCZURpdmlzaWJsZUJ5MzJFcnJvciIgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvdXRpbHMvaGFzaEJ5dGVjb2RlLmpzCiAgZnVuY3Rpb24gaGFzaEJ5dGVjb2RlKGJ5dGVjb2RlKSB7CiAgICBjb25zdCBieXRlY29kZUJ5dGVzID0gdG9CeXRlcyhieXRlY29kZSk7CiAgICBpZiAoYnl0ZWNvZGVCeXRlcy5sZW5ndGggJSAzMiAhPT0gMCkKICAgICAgdGhyb3cgbmV3IEJ5dGVjb2RlTGVuZ3RoTXVzdEJlRGl2aXNpYmxlQnkzMkVycm9yKHsKICAgICAgICBnaXZlbkxlbmd0aDogYnl0ZWNvZGVCeXRlcy5sZW5ndGgKICAgICAgfSk7CiAgICBpZiAoYnl0ZWNvZGVCeXRlcy5sZW5ndGggPiBtYXhCeXRlY29kZVNpemUpCiAgICAgIHRocm93IG5ldyBCeXRlY29kZUxlbmd0aEV4Y2VlZHNNYXhTaXplRXJyb3IoewogICAgICAgIGdpdmVuTGVuZ3RoOiBieXRlY29kZUJ5dGVzLmxlbmd0aCwKICAgICAgICBtYXhCeXRlY29kZVNpemUKICAgICAgfSk7CiAgICBjb25zdCBoYXNoU3RyID0gc2hhMjU2MihieXRlY29kZUJ5dGVzKTsKICAgIGNvbnN0IGhhc2gzID0gdG9CeXRlcyhoYXNoU3RyKTsKICAgIGNvbnN0IGJ5dGVjb2RlTGVuZ3RoSW5Xb3JkcyA9IGJ5dGVjb2RlQnl0ZXMubGVuZ3RoIC8gMzI7CiAgICBpZiAoYnl0ZWNvZGVMZW5ndGhJbldvcmRzICUgMiA9PT0gMCkgewogICAgICB0aHJvdyBuZXcgQnl0ZWNvZGVMZW5ndGhJbldvcmRzTXVzdEJlT2RkRXJyb3IoewogICAgICAgIGdpdmVuTGVuZ3RoSW5Xb3JkczogYnl0ZWNvZGVMZW5ndGhJbldvcmRzCiAgICAgIH0pOwogICAgfQogICAgY29uc3QgYnl0ZWNvZGVMZW5ndGggPSB0b0J5dGVzKGJ5dGVjb2RlTGVuZ3RoSW5Xb3Jkcyk7CiAgICBjb25zdCBieXRlY29kZUxlbmd0aFBhZGRlZCA9IHBhZChieXRlY29kZUxlbmd0aCwgeyBzaXplOiAyIH0pOwogICAgY29uc3QgY29kZUhhc2hWZXJzaW9uID0gbmV3IFVpbnQ4QXJyYXkoWzEsIDBdKTsKICAgIGhhc2gzLnNldChjb2RlSGFzaFZlcnNpb24sIDApOwogICAgaGFzaDMuc2V0KGJ5dGVjb2RlTGVuZ3RoUGFkZGVkLCAyKTsKICAgIHJldHVybiBoYXNoMzsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL3V0aWxzL2dldEVpcDcxMkRvbWFpbi5qcwogIHZhciBnZXRFaXA3MTJEb21haW4yID0gKHRyYW5zYWN0aW9uKSA9PiB7CiAgICBhc3NlcnRFaXA3MTJUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7CiAgICBjb25zdCBtZXNzYWdlID0gdHJhbnNhY3Rpb25Ub01lc3NhZ2UodHJhbnNhY3Rpb24pOwogICAgcmV0dXJuIHsKICAgICAgZG9tYWluOiB7CiAgICAgICAgbmFtZTogInprU3luYyIsCiAgICAgICAgdmVyc2lvbjogIjIiLAogICAgICAgIGNoYWluSWQ6IHRyYW5zYWN0aW9uLmNoYWluSWQKICAgICAgfSwKICAgICAgdHlwZXM6IHsKICAgICAgICBUcmFuc2FjdGlvbjogWwogICAgICAgICAgeyBuYW1lOiAidHhUeXBlIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgICB7IG5hbWU6ICJmcm9tIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgICB7IG5hbWU6ICJ0byIsIHR5cGU6ICJ1aW50MjU2IiB9LAogICAgICAgICAgeyBuYW1lOiAiZ2FzTGltaXQiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogImdhc1BlclB1YmRhdGFCeXRlTGltaXQiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogIm1heEZlZVBlckdhcyIsIHR5cGU6ICJ1aW50MjU2IiB9LAogICAgICAgICAgeyBuYW1lOiAibWF4UHJpb3JpdHlGZWVQZXJHYXMiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogInBheW1hc3RlciIsIHR5cGU6ICJ1aW50MjU2IiB9LAogICAgICAgICAgeyBuYW1lOiAibm9uY2UiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogInZhbHVlIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgICB7IG5hbWU6ICJkYXRhIiwgdHlwZTogImJ5dGVzIiB9LAogICAgICAgICAgeyBuYW1lOiAiZmFjdG9yeURlcHMiLCB0eXBlOiAiYnl0ZXMzMltdIiB9LAogICAgICAgICAgeyBuYW1lOiAicGF5bWFzdGVySW5wdXQiLCB0eXBlOiAiYnl0ZXMiIH0KICAgICAgICBdCiAgICAgIH0sCiAgICAgIHByaW1hcnlUeXBlOiAiVHJhbnNhY3Rpb24iLAogICAgICBtZXNzYWdlCiAgICB9OwogIH07CiAgZnVuY3Rpb24gdHJhbnNhY3Rpb25Ub01lc3NhZ2UodHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHsgZ2FzLCBub25jZSwgdG8sIGZyb20sIHZhbHVlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBmYWN0b3J5RGVwcywgcGF5bWFzdGVyLCBwYXltYXN0ZXJJbnB1dCwgZ2FzUGVyUHViZGF0YSwgZGF0YSB9ID0gdHJhbnNhY3Rpb247CiAgICByZXR1cm4gewogICAgICB0eFR5cGU6IDExM24sCiAgICAgIGZyb206IEJpZ0ludChmcm9tKSwKICAgICAgdG86IHRvID8gQmlnSW50KHRvKSA6IDBuLAogICAgICBnYXNMaW1pdDogZ2FzID8/IDBuLAogICAgICBnYXNQZXJQdWJkYXRhQnl0ZUxpbWl0OiBnYXNQZXJQdWJkYXRhID8/IGdhc1BlclB1YmRhdGFEZWZhdWx0LAogICAgICBtYXhGZWVQZXJHYXM6IG1heEZlZVBlckdhcyA/PyAwbiwKICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IG1heFByaW9yaXR5RmVlUGVyR2FzID8/IDBuLAogICAgICBwYXltYXN0ZXI6IHBheW1hc3RlciA/IEJpZ0ludChwYXltYXN0ZXIpIDogMG4sCiAgICAgIG5vbmNlOiBub25jZSA/IEJpZ0ludChub25jZSkgOiAwbiwKICAgICAgdmFsdWU6IHZhbHVlID8/IDBuLAogICAgICBkYXRhOiBkYXRhID8gZGF0YSA6ICIweDAiLAogICAgICBmYWN0b3J5RGVwczogZmFjdG9yeURlcHM/Lm1hcCgoZGVwKSA9PiB0b0hleChoYXNoQnl0ZWNvZGUoZGVwKSkpID8/IFtdLAogICAgICBwYXltYXN0ZXJJbnB1dDogcGF5bWFzdGVySW5wdXQgPyBwYXltYXN0ZXJJbnB1dCA6ICIweCIKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9jaGFpbkNvbmZpZy5qcwogIHZhciBjaGFpbkNvbmZpZyA9IHsKICAgIGZvcm1hdHRlcnMsCiAgICBzZXJpYWxpemVycywKICAgIGN1c3RvbTogewogICAgICBnZXRFaXA3MTJEb21haW46IGdldEVpcDcxMkRvbWFpbjIKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hYnN0cmFjdFRlc3RuZXQuanMKICB2YXIgYWJzdHJhY3RUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnLAogICAgaWQ6IDExMTI0LAogICAgbmFtZTogIkFic3RyYWN0IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRVRIIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLnRlc3RuZXQuYWJzLnh5eiJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFic3RyYWN0IEJsb2NrIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQuYWJzLnh5eiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYWNhbGEuanMKICB2YXIgYWNhbGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDc4NywKICAgIG5hbWU6ICJBY2FsYSIsCiAgICBuZXR3b3JrOiAiYWNhbGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkFjYWxhIiwKICAgICAgc3ltYm9sOiAiQUNBIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZXRoLXJwYy1hY2FsYS5hY2EtYXBpLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXRoLXJwYy1hY2FsYS5hY2EtYXBpLm5ldHdvcmsiXQogICAgICB9LAogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC1ycGMtYWNhbGEuYWNhLWFwaS5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2V0aC1ycGMtYWNhbGEuYWNhLWFwaS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQWNhbGEgQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmFjYWxhLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5hY2FsYS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vb3Atc3RhY2svY29udHJhY3RzLmpzCiAgdmFyIGNvbnRyYWN0cyA9IHsKICAgIGdhc1ByaWNlT3JhY2xlOiB7IGFkZHJlc3M6ICIweDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYiIH0sCiAgICBsMUJsb2NrOiB7IGFkZHJlc3M6ICIweDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUiIH0sCiAgICBsMkNyb3NzRG9tYWluTWVzc2VuZ2VyOiB7CiAgICAgIGFkZHJlc3M6ICIweDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDciCiAgICB9LAogICAgbDJFcmM3MjFCcmlkZ2U6IHsgYWRkcmVzczogIjB4NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNCIgfSwKICAgIGwyU3RhbmRhcmRCcmlkZ2U6IHsgYWRkcmVzczogIjB4NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCIgfSwKICAgIGwyVG9MMU1lc3NhZ2VQYXNzZXI6IHsKICAgICAgYWRkcmVzczogIjB4NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNiIKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL29wLXN0YWNrL2Zvcm1hdHRlcnMuanMKICBpbml0X2Zyb21IZXgoKTsKICB2YXIgZm9ybWF0dGVyczIgPSB7CiAgICBibG9jazogLyogQF9fUFVSRV9fICovIGRlZmluZUJsb2NrKHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbnMgPSBhcmdzLnRyYW5zYWN0aW9ucz8ubWFwKCh0cmFuc2FjdGlvbikgPT4gewogICAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbiA9PT0gInN0cmluZyIpCiAgICAgICAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKTsKICAgICAgICAgIGlmIChmb3JtYXR0ZWQudHlwZUhleCA9PT0gIjB4N2UiKSB7CiAgICAgICAgICAgIGZvcm1hdHRlZC5pc1N5c3RlbVR4ID0gdHJhbnNhY3Rpb24uaXNTeXN0ZW1UeDsKICAgICAgICAgICAgZm9ybWF0dGVkLm1pbnQgPSB0cmFuc2FjdGlvbi5taW50ID8gaGV4VG9CaWdJbnQodHJhbnNhY3Rpb24ubWludCkgOiB2b2lkIDA7CiAgICAgICAgICAgIGZvcm1hdHRlZC5zb3VyY2VIYXNoID0gdHJhbnNhY3Rpb24uc291cmNlSGFzaDsKICAgICAgICAgICAgZm9ybWF0dGVkLnR5cGUgPSAiZGVwb3NpdCI7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0cmFuc2FjdGlvbnMsCiAgICAgICAgICBzdGF0ZVJvb3Q6IGFyZ3Muc3RhdGVSb290CiAgICAgICAgfTsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvbjogLyogQF9fUFVSRV9fICovIGRlZmluZVRyYW5zYWN0aW9uKHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHt9OwogICAgICAgIGlmIChhcmdzLnR5cGUgPT09ICIweDdlIikgewogICAgICAgICAgdHJhbnNhY3Rpb24uaXNTeXN0ZW1UeCA9IGFyZ3MuaXNTeXN0ZW1UeDsKICAgICAgICAgIHRyYW5zYWN0aW9uLm1pbnQgPSBhcmdzLm1pbnQgPyBoZXhUb0JpZ0ludChhcmdzLm1pbnQpIDogdm9pZCAwOwogICAgICAgICAgdHJhbnNhY3Rpb24uc291cmNlSGFzaCA9IGFyZ3Muc291cmNlSGFzaDsKICAgICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAiZGVwb3NpdCI7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvblJlY2VpcHQ6IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVUcmFuc2FjdGlvblJlY2VpcHQoewogICAgICBmb3JtYXQoYXJncykgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBsMUdhc1ByaWNlOiBhcmdzLmwxR2FzUHJpY2UgPyBoZXhUb0JpZ0ludChhcmdzLmwxR2FzUHJpY2UpIDogbnVsbCwKICAgICAgICAgIGwxR2FzVXNlZDogYXJncy5sMUdhc1VzZWQgPyBoZXhUb0JpZ0ludChhcmdzLmwxR2FzVXNlZCkgOiBudWxsLAogICAgICAgICAgbDFGZWU6IGFyZ3MubDFGZWUgPyBoZXhUb0JpZ0ludChhcmdzLmwxRmVlKSA6IG51bGwsCiAgICAgICAgICBsMUZlZVNjYWxhcjogYXJncy5sMUZlZVNjYWxhciA/IE51bWJlcihhcmdzLmwxRmVlU2NhbGFyKSA6IG51bGwKICAgICAgICB9OwogICAgICB9CiAgICB9KQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vb3Atc3RhY2svc2VyaWFsaXplcnMuanMKICBpbml0X2FkZHJlc3MoKTsKICBpbml0X2lzQWRkcmVzcygpOwogIGluaXRfY29uY2F0KCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZVRyYW5zYWN0aW9uMyh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKSB7CiAgICBpZiAoaXNEZXBvc2l0KHRyYW5zYWN0aW9uKSkKICAgICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uRGVwb3NpdCh0cmFuc2FjdGlvbik7CiAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIHNpZ25hdHVyZSk7CiAgfQogIHZhciBzZXJpYWxpemVyczIgPSB7CiAgICB0cmFuc2FjdGlvbjogc2VyaWFsaXplVHJhbnNhY3Rpb24zCiAgfTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkRlcG9zaXQodHJhbnNhY3Rpb24pIHsKICAgIGFzc2VydFRyYW5zYWN0aW9uRGVwb3NpdCh0cmFuc2FjdGlvbik7CiAgICBjb25zdCB7IHNvdXJjZUhhc2gsIGRhdGEsIGZyb20sIGdhcywgaXNTeXN0ZW1UeCwgbWludCwgdG8sIHZhbHVlIH0gPSB0cmFuc2FjdGlvbjsKICAgIGNvbnN0IHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9IFsKICAgICAgc291cmNlSGFzaCwKICAgICAgZnJvbSwKICAgICAgdG8gPz8gIjB4IiwKICAgICAgbWludCA/IHRvSGV4KG1pbnQpIDogIjB4IiwKICAgICAgdmFsdWUgPyB0b0hleCh2YWx1ZSkgOiAiMHgiLAogICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgaXNTeXN0ZW1UeCA/ICIweDEiIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiCiAgICBdOwogICAgcmV0dXJuIGNvbmNhdEhleChbCiAgICAgICIweDdlIiwKICAgICAgdG9SbHAoc2VyaWFsaXplZFRyYW5zYWN0aW9uKQogICAgXSk7CiAgfQogIGZ1bmN0aW9uIGlzRGVwb3NpdCh0cmFuc2FjdGlvbikgewogICAgaWYgKHRyYW5zYWN0aW9uLnR5cGUgPT09ICJkZXBvc2l0IikKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAodHlwZW9mIHRyYW5zYWN0aW9uLnNvdXJjZUhhc2ggIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgZnVuY3Rpb24gYXNzZXJ0VHJhbnNhY3Rpb25EZXBvc2l0KHRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCB7IGZyb20sIHRvIH0gPSB0cmFuc2FjdGlvbjsKICAgIGlmIChmcm9tICYmICFpc0FkZHJlc3MoZnJvbSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogZnJvbSB9KTsKICAgIGlmICh0byAmJiAhaXNBZGRyZXNzKHRvKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB0byB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vb3Atc3RhY2svY2hhaW5Db25maWcuanMKICB2YXIgY2hhaW5Db25maWcyID0gewogICAgY29udHJhY3RzLAogICAgZm9ybWF0dGVyczogZm9ybWF0dGVyczIsCiAgICBzZXJpYWxpemVyczogc2VyaWFsaXplcnMyCiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYW5jaWVudDguanMKICB2YXIgc291cmNlSWQgPSAxOwogIHZhciBhbmNpZW50OCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogODg4ODg4ODg4LAogICAgbmFtZTogIkFuY2llbnQ4IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5hbmNpZW50OC5nZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFuY2llbnQ4IGV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4uYW5jaWVudDguZ2ciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2Nhbi5hbmNpZW50OC5nZy9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWRdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhCMDlEQzA4NDI4QzhiNEVGQjRmZjlDMDgyNzM4NkNERjM0Mjc3OTk2IgogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkXTogewogICAgICAgICAgYWRkcmVzczogIjB4NjM5RjJBRUNFMzk4QWE3NmIwN2U1OWVGNmFiZTJjRmUzMmJhY2I2OCIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MDcwNTcxCiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkXTogewogICAgICAgICAgYWRkcmVzczogIjB4ZDVlM2VEZjViNjgxMzVENTU5RDU3MkUyNmJGODYzRkJDMTk1MDAzMyIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MDcwNTcxCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYW5jaWVudDhTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMiA9IDExMTU1MTExOwogIHZhciBhbmNpZW50OFNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI4MTIyMDI0LAogICAgbmFtZTogIkFuY2llbnQ4IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjdjItdGVzdG5ldC5hbmNpZW50OC5nZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFuY2llbnQ4IENlbGVzdGlhIFRlc3RuZXQgZXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc2NhbnYyLXRlc3RuZXQuYW5jaWVudDguZ2ciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2NhbnYyLXRlc3RuZXQuYW5jaWVudDguZ2cvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDk0MmZENTAxN2MwRjYwNTc1OTMwRDg1NzRFYWNhMTNCRWNENmUxYkIiCiAgICAgICAgfQogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQyXTogewogICAgICAgICAgYWRkcmVzczogIjB4ZmExZDlFMjZBNmFDRDdiMjIxMTVEMjc1NzJjMTIyMUI5ODAzYzk2MCIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NzI5MDgKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyXTogewogICAgICAgICAgYWRkcmVzczogIjB4RjZCYzAxNDZkM2M3NEQ0ODMwNmU3OUFlMTM0QTI2MEU0MThDOTMzNSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NzI5MDgKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQyCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FudmlsLmpzCiAgdmFyIGFudmlsID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMTMzNywKICAgIG5hbWU6ICJBbnZpbCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHA6Ly8xMjcuMC4wLjE6ODU0NSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3czovLzEyNy4wLjAuMTo4NTQ1Il0KICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hcGV4VGVzdG5ldC5qcwogIHZhciBhcGV4VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzk5MywKICAgIG5hbWU6ICJBUEVYIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQuYXBleGxheWVyLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwLXRlc3RuZXQuYXBleGxheWVyLnh5eiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHAtdGVzdG5ldC5hcGV4bGF5ZXIueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Zjc2NDJiZTMzYTZiMThEMTZhOTk1NjU3YWRiNWE2OENEMDQzOGFFMiIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyODM3NzUKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJiaXRydW0uanMKICB2YXIgYXJiaXRydW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyMTYxLAogICAgbmFtZTogIkFyYml0cnVtIE9uZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcmIxLmFyYml0cnVtLmlvL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFyYmlzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2FyYmlzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5hcmJpc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNzY1NDcwNwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FyYml0cnVtR29lcmxpLmpzCiAgdmFyIGFyYml0cnVtR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MjE2MTMsCiAgICBuYW1lOiAiQXJiaXRydW0gR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJBcmJpdHJ1bSBHb2VybGkgRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZ29lcmxpLXJvbGx1cC5hcmJpdHJ1bS5pby9ycGMiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBcmJpc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9nb2VybGkuYXJiaXNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogODgxMTQKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJiaXRydW1Ob3ZhLmpzCiAgdmFyIGFyYml0cnVtTm92YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDIxNzAsCiAgICBuYW1lOiAiQXJiaXRydW0gTm92YSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ub3ZhLmFyYml0cnVtLmlvL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFyYmlzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL25vdmEuYXJiaXNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLW5vdmEuYXJiaXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE3NDY5NjMKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hc3NldENoYWluVGVzdG5ldC5qcwogIHZhciBhc3NldENoYWluVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDI0MjEsCiAgICBuYW1lOiAiQXNzZXRDaGFpbiBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlJlYWwgV29ybGQgQXNzZXQiLAogICAgICBzeW1ib2w6ICJSV0EiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9lbnVndS1ycGMuYXNzZXRjaGFpbi5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBc3NldCBDaGFpbiBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4tdGVzdG5ldC5hc3NldGNoYWluLm9yZyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLXRlc3RuZXQuYXNzZXRjaGFpbi5vcmcvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4OTg5RjgzMkQzNTk4OGNiNWUzZUIwMDFGYTJGZTc4OTQ2OUVDMzFFYSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNzE3NwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FzdGFyLmpzCiAgdmFyIGFzdGFyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTIsCiAgICBuYW1lOiAiQXN0YXIiLAogICAgbmV0d29yazogImFzdGFyLW1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkFzdGFyIiwKICAgICAgc3ltYm9sOiAiQVNUUiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXN0YXIuYXBpLm9uZmluYWxpdHkuaW8vcHVibGljIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXN0YXIgU3Vic2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hc3Rhci5zdWJzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc2MTc5NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXN0YXJaa0VWTS5qcwogIHZhciBhc3RhclprRVZNID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNzc2LAogICAgbmFtZTogIkFzdGFyIHprRVZNIiwKICAgIG5ldHdvcms6ICJBc3RhclprRVZNIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zdGFydGFsZS5jb20vYXN0YXItemtldm0iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBc3RhciB6a0VWTSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hc3Rhci16a2V2bS5leHBsb3Jlci5zdGFydGFsZS5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogOTM1MjgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FzdGFyWmt5b3RvLmpzCiAgdmFyIGFzdGFyWmt5b3RvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2MDM4MzYxLAogICAgbmFtZTogIkFzdGFyIHprRVZNIFRlc3RuZXQgekt5b3RvIiwKICAgIG5ldHdvcms6ICJ6S3lvdG8iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnN0YXJ0YWxlLmNvbS96a3lvdG8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJ6S3lvdG8gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vemt5b3RvLmV4cGxvcmVyLnN0YXJ0YWxlLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxOTYxNTMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJiaXRydW1TZXBvbGlhLmpzCiAgdmFyIGFyYml0cnVtU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDIxNjE0LAogICAgbmFtZTogIkFyYml0cnVtIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkFyYml0cnVtIFNlcG9saWEgRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS1yb2xsdXAuYXJiaXRydW0uaW8vcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXJiaXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5hcmJpc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5hcmJpc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogODE5MzAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJlb25OZXR3b3JrLmpzCiAgdmFyIGFyZW9uTmV0d29yayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDYzLAogICAgbmFtZTogIkFyZW9uIE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgZGVjaW1hbHM6IDE4LCBuYW1lOiAiQVJFQSIsIHN5bWJvbDogIkFSRUEiIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC1ycGMuYXJlb24ubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9tYWlubmV0LXdzLmFyZW9uLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBcmVvbnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYXJlb25zY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FyZW9uTmV0d29ya1Rlc3RuZXQuanMKICB2YXIgYXJlb25OZXR3b3JrVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDYyLAogICAgbmFtZTogIkFyZW9uIE5ldHdvcmsgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJUQVJFQSIsIHN5bWJvbDogIlRBUkVBIiB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQtcnBjLmFyZW9uLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC13cy5hcmVvbi5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXJlb25zY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2FyZW9uc2Nhbi5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FydGVsYVRlc3RuZXQuanMKICB2YXIgYXJ0ZWxhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTE4MjIsCiAgICBuYW1lOiAiQXJ0ZWxhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkFSVCIsIHN5bWJvbDogIkFSVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2JldGFuZXQtcnBjMS5hcnRlbGEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFydGVsYSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9iZXRhbmV0LXNjYW4uYXJ0ZWxhLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmV0YW5ldC1zY2FuLmFydGVsYS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4ZDA3Yzg2MzVmNzZlODc0NUVlNzA5MmZiYjZlOGZiYzVGZUYwOURENyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3MDAxODcxCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F0bGV0YU9seW1waWEuanMKICB2YXIgYXRsZXRhT2x5bXBpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjM0MCwKICAgIG5hbWU6ICJBdGxldGEgT2x5bXBpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJBdGxhIiwgc3ltYm9sOiAiQVRMQSIgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL3Rlc3RuZXQtcnBjLmF0bGV0YS5uZXR3b3JrOjk5NDQiLAogICAgICAgICAgImh0dHBzOi8vdGVzdG5ldC1ycGMuYXRsZXRhLm5ldHdvcmsiCiAgICAgICAgXSwKICAgICAgICB3czogWyJ3c3M6Ly90ZXN0bmV0LXJwYy5hdGxldGEubmV0d29yazo5OTQ0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXRsZXRhIE9seW1waWEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5hdGxldGEubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmF0bGV0YS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MTQ3MmVjNjM5MjE4MGZiODRGMzQ1ZDI0NTViQ0M3NUIyNjU3NzExNSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDc2NDczCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F1cm9yYS5qcwogIHZhciBhdXJvcmEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMTMxNjE1NTQsCiAgICBuYW1lOiAiQXVyb3JhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5hdXJvcmEuZGV2Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXVyb3Jhc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hdXJvcmFzY2FuLmRldiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hdXJvcmFzY2FuLmRldi9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjI5MDc4MTYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hdXJvcmFUZXN0bmV0LmpzCiAgdmFyIGF1cm9yYVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMTMxNjE1NTUsCiAgICBuYW1lOiAiQXVyb3JhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LmF1cm9yYS5kZXYiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBdXJvcmFzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuYXVyb3Jhc2Nhbi5kZXYiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC5hdXJvcmFzY2FuLmRldi9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F1cm9yaWEuanMKICB2YXIgYXVyb3JpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjA1MjA1LAogICAgbmFtZTogIkF1cm9yaWEgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiYXVyb3JpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiQXVyb3JpYSBTdHJhdGlzIiwKICAgICAgc3ltYm9sOiAidFNUUkFYIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2F1cm9yaWEucnBjLnN0cmF0aXNldm0uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXVyb3JpYSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2F1cm9yaWEuZXhwbG9yZXIuc3RyYXRpc2V2bS5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F2YWxhbmNoZS5qcwogIHZhciBhdmFsYW5jaGUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQzMTE0LAogICAgbmFtZTogIkF2YWxhbmNoZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJBdmFsYW5jaGUiLAogICAgICBzeW1ib2w6ICJBVkFYIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLmF2YXgubmV0d29yay9leHQvYmMvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTbm93VHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vc25vd3RyYWNlLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5zbm93dHJhY2UuaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTE5MDc5MzQKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hdmFsYW5jaGVGdWppLmpzCiAgdmFyIGF2YWxhbmNoZUZ1amkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQzMTEzLAogICAgbmFtZTogIkF2YWxhbmNoZSBGdWppIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkF2YWxhbmNoZSBGdWppIiwKICAgICAgc3ltYm9sOiAiQVZBWCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FwaS5hdmF4LXRlc3QubmV0d29yay9leHQvYmMvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTbm93VHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5zbm93dHJhY2UuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLXRlc3RuZXQuc25vd3RyYWNlLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDcwOTY5NTkKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYjNTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMyA9IDE2ODU4Nzc3MzsKICB2YXIgYjNTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOTkzLAogICAgbmFtZTogIkIzIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEuYjMuZnVuL2h0dHAiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEuZXhwbG9yZXIuYjMuZnVuIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDMKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYjMuanMKICB2YXIgc291cmNlSWQ0ID0gODQ1MzsKICB2YXIgYjMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgzMzMsCiAgICBuYW1lOiAiQjMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQtcnBjLmIzLmZ1bi9odHRwIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5iMy5mdW4iCiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQ0CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JhaGFtdXQuanMKICB2YXIgYmFoYW11dCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTE2NSwKICAgIG5ldHdvcms6ICJiYWhhbXV0IiwKICAgIG5hbWU6ICJCYWhhbXV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJGYXN0dG9rZW4iLCBzeW1ib2w6ICJGVE4iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL3JwYzEuYmFoYW11dC5pbyIsCiAgICAgICAgICAiaHR0cHM6Ly9iYWhhbXV0LXJwYy5wdWJsaWNub2RlLmNvbSIsCiAgICAgICAgICAiaHR0cHM6Ly9ycGMyLmJhaGFtdXQuaW8iCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsKICAgICAgICAgICJ3c3M6Ly93czEuc2FoYXJhLmJhaGFtdXRjaGFpbi5jb20iLAogICAgICAgICAgIndzczovL2JhaGFtdXQtcnBjLnB1YmxpY25vZGUuY29tIiwKICAgICAgICAgICJ3c3M6Ly93czIuc2FoYXJhLmJhaGFtdXRjaGFpbi5jb20iCiAgICAgICAgXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbCiAgICAgICAgICAiaHR0cHM6Ly9ycGMxLmJhaGFtdXQuaW8iLAogICAgICAgICAgImh0dHBzOi8vYmFoYW11dC1ycGMucHVibGljbm9kZS5jb20iLAogICAgICAgICAgImh0dHBzOi8vcnBjMi5iYWhhbXV0LmlvIgogICAgICAgIF0sCiAgICAgICAgd2ViU29ja2V0OiBbCiAgICAgICAgICAid3NzOi8vd3MxLnNhaGFyYS5iYWhhbXV0Y2hhaW4uY29tIiwKICAgICAgICAgICJ3c3M6Ly9iYWhhbXV0LXJwYy5wdWJsaWNub2RlLmNvbSIsCiAgICAgICAgICAid3NzOi8vd3MyLnNhaGFyYS5iYWhhbXV0Y2hhaW4uY29tIgogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRnRuc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cuZnRuc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vd3d3LmZ0bnNjYW4uY29tL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iYXNlLmpzCiAgdmFyIHNvdXJjZUlkNSA9IDE7CiAgdmFyIGJhc2UgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDg0NTMsCiAgICBuYW1lOiAiQmFzZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmJhc2Uub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmFzZXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYmFzZXNjYW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5iYXNlc2Nhbi5vcmcvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkNV06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDU2MzE1YjkwYzQwNzMwOTI1ZWM1NDg1Y2YwMDRkODM1MDU4NTE4QTAiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA1MDIyCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDVdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg0OTA0ODA0NEQ1N2UxQzkyQTc3Zjc5OTg4ZDIxRmE4ZkFGNzRFOTdlIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMTc0ODIxNDMKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQ1XTogewogICAgICAgICAgYWRkcmVzczogIjB4MzE1NENmMTZjY2RiNEM2ZDkyMjYyOTY2NDE3NGI5MDRkODBGMkMzNSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE3NDgyMTQzCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkNQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iYXNlR29lcmxpLmpzCiAgdmFyIHNvdXJjZUlkNiA9IDU7CiAgdmFyIGJhc2VHb2VybGkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDg0NTMxLAogICAgbmFtZTogIkJhc2UgR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJHb2VybGkgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZ29lcmxpLmJhc2Uub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmFzZXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLmJhc2VzY2FuLm9yZyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGkuYmFzZXNjYW4ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICAuLi5jaGFpbkNvbmZpZzIuY29udHJhY3RzLAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDZdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgyQTM1ODkxZmYzMDMxM0NjRmE2Q0U4OGRjZjM4NThiYjA3NUEyMjk4IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTM3Njk4OAogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQ2XTogewogICAgICAgICAgYWRkcmVzczogIjB4ZTkzYzhjRDBENDA5MzQxMjA1QTU5MmY4YzRBYzFBNWZlNTU4NWNmQSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQ2XTogewogICAgICAgICAgYWRkcmVzczogIjB4ZkE2RDhFZTVCRTc3MEY4NEZDMDAxRDA5OEM0YkQ2MDRGZTAxMjg0YSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkNgogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iYXNlU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDcgPSAxMTE1NTExMTsKICB2YXIgYmFzZVNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDg0NTMyLAogICAgbmV0d29yazogImJhc2Utc2Vwb2xpYSIsCiAgICBuYW1lOiAiQmFzZSBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZXBvbGlhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5iYXNlLm9yZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJhc2VzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEuYmFzZXNjYW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1zZXBvbGlhLmJhc2VzY2FuLm9yZy9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgZGlzcHV0ZUdhbWVGYWN0b3J5OiB7CiAgICAgICAgW3NvdXJjZUlkN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweGQ2RTZkQmY0RjdFQTBhYzQxMmZEOGI2NUVEMjk3ZTY0QkI3YTA2RTEiCiAgICAgICAgfQogICAgICB9LAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDddOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg4NDQ1N2NhOUQwMTYzRmJDNGJiZmU0RGZiYjIwYmE0NmU0OERGMjU0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDQ5ZjUzZTQxNDUyYzc0NTg5ZTg1Y2ExNjc3NDI2YmE0MjY0NTllODUiLAogICAgICAgICAgYmxvY2tDcmVhdGVkOiA0NDQ2Njc3CiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweGZkMEJmNzFGNjA2NjBFMmY2MDhlZDU2ZTE2NTlDNDUwZUIxMTMxMjAiLAogICAgICAgICAgYmxvY2tDcmVhdGVkOiA0NDQ2Njc3CiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDU5NjQ3CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkNwogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iZWFtLmpzCiAgdmFyIGJlYW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQzMzcsCiAgICBuYW1lOiAiQmVhbSIsCiAgICBuZXR3b3JrOiAiYmVhbSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCZWFtIiwKICAgICAgc3ltYm9sOiAiQkVBTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIHB1YmxpYzogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9idWlsZC5vbmJlYW0uY29tL3JwYyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9idWlsZC5vbmJlYW0uY29tL3dzIl0KICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9idWlsZC5vbmJlYW0uY29tL3JwYyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9idWlsZC5vbmJlYW0uY29tL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmVhbSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zdWJuZXRzLmF2YXgubmV0d29yay9iZWFtIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg0OTU2ZjE1ZWZkYzNkYzE2NjQ1ZTkwY2MzNTZlYWZhNjVmZmM2NWVjIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iZWFtVGVzdG5ldC5qcwogIHZhciBiZWFtVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTMzMzcsCiAgICBuYW1lOiAiQmVhbSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJiZWFtIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkJlYW0iLAogICAgICBzeW1ib2w6ICJCRUFNIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgcHVibGljOiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2J1aWxkLm9uYmVhbS5jb20vcnBjL3Rlc3RuZXQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vYnVpbGQub25iZWFtLmNvbS93cy90ZXN0bmV0Il0KICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9idWlsZC5vbmJlYW0uY29tL3JwYy90ZXN0bmV0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2J1aWxkLm9uYmVhbS5jb20vd3MvdGVzdG5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJlYW0gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc3VibmV0cy10ZXN0LmF2YXgubmV0d29yay9iZWFtIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg5YmY0OWI3MDRlZTJhMDk1Yjk1YzFmMmQ0ZWI5MDEwNTEwYzQxYzllIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYmVhck5ldHdvcmtDaGFpbk1haW5uZXQuanMKICB2YXIgYmVhck5ldHdvcmtDaGFpbk1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDY0MTIzMCwKICAgIG5hbWU6ICJCZWFyIE5ldHdvcmsgQ2hhaW4gTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCZWFyTmV0d29ya0NoYWluIiwKICAgICAgc3ltYm9sOiAiQlJOS0MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9icm5rYy1tYWlubmV0LmJlYXJuZXR3b3JrLm5ldCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJybmtTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2JybmtzY2FuLmJlYXJuZXR3b3JrLm5ldCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9icm5rc2Nhbi5iZWFybmV0d29yay5uZXQvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JlYXJOZXR3b3JrQ2hhaW5UZXN0bmV0LmpzCiAgdmFyIGJlYXJOZXR3b3JrQ2hhaW5UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NTEyMzAsCiAgICBuYW1lOiAiQmVhciBOZXR3b3JrIENoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAidEJSTktDIiwKICAgICAgc3ltYm9sOiAidEJSTktDIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYnJua2MtdGVzdC5iZWFybmV0d29yay5uZXQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCcm5rVGVzdFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYnJua3Rlc3Qtc2Nhbi5iZWFybmV0d29yay5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYnJua3Rlc3Qtc2Nhbi5iZWFybmV0d29yay5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iZXJhY2hhaW5UZXN0bmV0LmpzCiAgdmFyIGJlcmFjaGFpblRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwMDg1LAogICAgbmFtZTogIkJlcmFjaGFpbiBBcnRpbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCRVJBIFRva2VuIiwKICAgICAgc3ltYm9sOiAiQkVSQSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FydGlvLnJwYy5iZXJhY2hhaW4uY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmVyYWNoYWluIiwKICAgICAgICB1cmw6ICJodHRwczovL2FydGlvLmJlcmF0cmFpbC5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYmVyYWNoYWluVGVzdG5ldGJBcnRpby5qcwogIHZhciBiZXJhY2hhaW5UZXN0bmV0YkFydGlvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4MDA4NCwKICAgIG5hbWU6ICJCZXJhY2hhaW4gYkFydGlvIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkJFUkEgVG9rZW4iLAogICAgICBzeW1ib2w6ICJCRVJBIgogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDkyNjkKICAgICAgfQogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYmFydGlvLnJwYy5iZXJhY2hhaW4uY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmVyYWNoYWluIGJBcnRpbyBCZXJhdHJhaWwiLAogICAgICAgIHVybDogImh0dHBzOi8vYmFydGlvLmJlcmF0cmFpbC5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYmV2bU1haW5uZXQuanMKICB2YXIgYmV2bU1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExNTAxLAogICAgbmFtZTogIkJFVk0gTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQml0Y29pbiIsIHN5bWJvbDogIkJUQyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMtbWFpbm5ldC0xLmJldm0uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCZXZtc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLW1haW5uZXQuYmV2bS5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLW1haW5uZXQtYXBpLmJldm0uaW8vYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JpdGt1Yi5qcwogIHZhciBiaXRrdWIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDk2LAogICAgbmFtZTogIkJpdGt1YiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQml0a3ViIiwgc3ltYm9sOiAiS1VCIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmJpdGt1YmNoYWluLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQml0a3ViIENoYWluIE1haW5uZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3LmJrY3NjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3d3dy5ia2NzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYml0a3ViVGVzdG5ldC5qcwogIHZhciBiaXRrdWJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNTkyNSwKICAgIG5hbWU6ICJCaXRrdWIgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiQml0a3ViIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkJpdGt1YiBUZXN0Iiwgc3ltYm9sOiAidEtVQiIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy10ZXN0bmV0LmJpdGt1YmNoYWluLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQml0a3ViIENoYWluIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5ia2NzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJrY3NjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYml0VG9ycmVudC5qcwogIHZhciBiaXRUb3JyZW50ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOTksCiAgICBuYW1lOiAiQml0VG9ycmVudCIsCiAgICBuZXR3b3JrOiAiYml0dG9ycmVudC1jaGFpbi1tYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJCaXRUb3JyZW50Iiwgc3ltYm9sOiAiQlRUIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5iaXR0b3JyZW50Y2hhaW4uaW8iXSB9LAogICAgICBwdWJsaWM6IHsgaHR0cDogWyJodHRwczovL3JwYy5iaXR0b3JyZW50Y2hhaW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCdHRjc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9idHRjc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmJ0dGNzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzEwNzg1NTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iaXRUb3JyZW50VGVzdG5ldC5qcwogIHZhciBiaXRUb3JyZW50VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAyOCwKICAgIG5hbWU6ICJCaXRUb3JyZW50IENoYWluIFRlc3RuZXQiLAogICAgbmV0d29yazogImJpdHRvcnJlbnQtY2hhaW4tdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQml0VG9ycmVudCIsIHN5bWJvbDogIkJUVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly90ZXN0cnBjLmJpdHRvcnJlbnRjaGFpbi5pbyJdIH0sCiAgICAgIHB1YmxpYzogeyBodHRwOiBbImh0dHBzOi8vdGVzdHJwYy5iaXR0b3JyZW50Y2hhaW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCdHRjc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJ0dGNzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJ0dGNzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JsYXN0LmpzCiAgdmFyIHNvdXJjZUlkOCA9IDE7CiAgdmFyIGJsYXN0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4MTQ1NywKICAgIG5hbWU6ICJCbGFzdCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5ibGFzdC5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsYXN0c2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibGFzdHNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmJsYXN0c2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjEyOTI5CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQ4CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JsYXN0U2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDkgPSAxMTE1NTExMTsKICB2YXIgYmxhc3RTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjg1ODc3NzMsCiAgICBuYW1lOiAiQmxhc3QgU2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5ibGFzdC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsYXN0c2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZXBvbGlhLmJsYXN0c2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5ibGFzdHNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc1NjY5MAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDkKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYm9iLmpzCiAgdmFyIHNvdXJjZUlkMTAgPSAxOwogIHZhciBib2IgPSBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogNjA4MDgsCiAgICBuYW1lOiAiQk9CIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUSCIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmdvYm9iLnh5eiJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuZ29ib2IueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQk9CIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmdvYm9iLnh5eiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICAuLi5jaGFpbkNvbmZpZzIuY29udHJhY3RzLAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMzEzMQogICAgICB9LAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDEwXTogewogICAgICAgICAgYWRkcmVzczogIjB4ZERhNTNFMjNmOGEzMjY0MGIwNEQ3MjU2ZTY1MUMxZGI5OGRCMTFDMSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ0NjI2MTUKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDEwXTogewogICAgICAgICAgYWRkcmVzczogIjB4OEFkZUUxMjQ0NDc0MzVmRTAzZTNDRDI0ZEYzZjRjQUUzMkU2NWEzRSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ0NjI2MTUKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQxMAogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ib2JTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMTEgPSAxMTE1NTExMTsKICB2YXIgYm9iU2Vwb2xpYSA9IGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiA4MDg4MTMsCiAgICBuYW1lOiAiQk9CIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRVRIIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ib2Itc2Vwb2xpYS5ycGMuZ29ib2IueHl6Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2JvYi1zZXBvbGlhLnJwYy5nb2JvYi54eXoiXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vYm9iLXNlcG9saWEucnBjLmdvYm9iLnh5eiJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ib2Itc2Vwb2xpYS5ycGMuZ29ib2IueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQk9CIFNlcG9saWEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYm9iLXNlcG9saWEuZXhwbG9yZXIuZ29ib2IueHl6IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDM1Njc3CiAgICAgIH0sCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMTFdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgxNEQwMDY5NDUyYjRBRTJiMjUwQjM5NWI4YWRBYjc3MUU0MjY3ZDJmIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogNDQ2MjYxNQogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTFdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg4NjdCMUFhODcyYjlDOGNCNUU5Rjc3NTVmZURDNDVCQjI0QWQwYWU0IiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogNDQ2MjYxNQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBzb3VyY2VJZDogc291cmNlSWQxMQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ib2JhLmpzCiAgdmFyIGJvYmEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI4OCwKICAgIG5hbWU6ICJCb2JhIE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmJvYmEubmV0d29yayJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJPQkFTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2JvYmFzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0NDY4NTkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ib2JhU2Vwb2xpYS5qcwogIHZhciBib2JhU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjg4ODIsCiAgICBuYW1lOiAiQm9iYSBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5ib2JhLm5ldHdvcmsiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCT0JBU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJvYmFzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYnJvbm9zLmpzCiAgdmFyIGJyb25vcyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAzOSwKICAgIG5hbWU6ICJCcm9ub3MiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQlJPIiwKICAgICAgc3ltYm9sOiAiQlJPIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZXZtLmJyb25vcy5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCcm9ub1NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYnJvc2Nhbi5icm9ub3Mub3JnIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Jyb25vc1Rlc3RuZXQuanMKICB2YXIgYnJvbm9zVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAzOCwKICAgIG5hbWU6ICJCcm9ub3MgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCcm9ub3MgQ29pbiIsCiAgICAgIHN5bWJvbDogInRCUk8iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldm0tdGVzdG5ldC5icm9ub3Mub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQnJvbm9TY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Ricm9zY2FuLmJyb25vcy5vcmciCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JzYy5qcwogIHZhciBic2MgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU2LAogICAgbmFtZTogIkJOQiBTbWFydCBDaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCTkIiLAogICAgICBzeW1ib2w6ICJCTkIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMuYW5rci5jb20vYnNjIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQnNjU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ic2NzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkuYnNjc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE1OTIxNDUyCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYnNjVGVzdG5ldC5qcwogIHZhciBic2NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5NywKICAgIG5hbWU6ICJCaW5hbmNlIFNtYXJ0IENoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQk5CIiwKICAgICAgc3ltYm9sOiAidEJOQiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2RhdGEtc2VlZC1wcmVic2MtMS1zMS5ibmJjaGFpbi5vcmc6ODU0NSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJzY1NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5ic2NzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJzY3NjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNzQyMjQ4MwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ic2NHcmVlbmZpZWxkLmpzCiAgdmFyIGJzY0dyZWVuZmllbGQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMTcsCiAgICBuYW1lOiAiQk5CIEdyZWVuZmllbGQgQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQk5CIiwKICAgICAgc3ltYm9sOiAiQk5CIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZ3JlZW5maWVsZC1jaGFpbi5ibmJjaGFpbi5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCTkIgR3JlZW5maWVsZCBNYWlubmV0IFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ3JlZW5maWVsZHNjYW4uY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYnRyLmpzCiAgdmFyIGJ0ciA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAwOTAxLAogICAgbmFtZTogIkJpdGxheWVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCaXRjb2luIiwKICAgICAgc3ltYm9sOiAiQlRDIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWwogICAgICAgICAgImh0dHBzOi8vcnBjLmJpdGxheWVyLm9yZyIsCiAgICAgICAgICAiaHR0cHM6Ly9ycGMuYml0bGF5ZXItcnBjLmNvbSIsCiAgICAgICAgICAiaHR0cHM6Ly9ycGMuYW5rci5jb20vYml0bGF5ZXIiCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3MuYml0bGF5ZXIub3JnIiwgIndzczovL3dzLmJpdGxheWVyLXJwYy5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCaXRsYXllcihCVFIpIFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3LmJ0cnNjYW4uY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2J0clRlc3RuZXQuanMKICB2YXIgYnRyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAwODEwLAogICAgbmFtZTogIkJpdGxheWVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkJpdGNvaW4iLAogICAgICBzeW1ib2w6ICJCVEMiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC1ycGMuYml0bGF5ZXIub3JnIl0sCiAgICAgICAgd2ViU29ja2V0OiBbCiAgICAgICAgICAid3NzOi8vdGVzdG5ldC13cy5iaXRsYXllci5vcmciLAogICAgICAgICAgIndzczovL3Rlc3RuZXQtd3MuYml0bGF5ZXItcnBjLmNvbSIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJpdGxheWVyKEJUUikgU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJ0cnNjYW4uY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ieG4uanMKICB2YXIgYnhuID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0OTk5LAogICAgbmFtZTogIkJsYWNrRm9ydCBFeGNoYW5nZSBOZXR3b3JrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJCbGFja0ZvcnQgVG9rZW4iLCBzeW1ib2w6ICJCWE4iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmJsYWNrZm9ydC5uZXR3b3JrL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuYmxhY2tmb3J0Lm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuYmxhY2tmb3J0Lm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2J4blRlc3RuZXQuanMKICB2YXIgYnhuVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDc3NywKICAgIG5hbWU6ICJCbGFja0ZvcnQgRXhjaGFuZ2UgTmV0d29yayBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCbGFja0ZvcnQgVGVzdG5ldCBUb2tlbiIsCiAgICAgIHN5bWJvbDogIlRCWE4iLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5ibGFja2ZvcnQubmV0d29yay9ycGMiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQtZXhwbG9yZXIuYmxhY2tmb3J0Lm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC1leHBsb3Jlci5ibGFja2ZvcnQubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NhbnRvLmpzCiAgdmFyIGNhbnRvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NzAwLAogICAgbmFtZTogIkNhbnRvIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkNhbnRvIiwKICAgICAgc3ltYm9sOiAiQ0FOVE8iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9jYW50by5ncmF2aXR5Y2hhaW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUdWJlci5CdWlsZCAoQmxvY2tzY291dCkiLAogICAgICAgIHVybDogImh0dHBzOi8vdHViZXIuYnVpbGQiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjkwNTc4OQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2Vsby9mZWVzLmpzCiAgdmFyIGZlZXMgPSB7CiAgICAvKgogICAgICAgKiBFc3RpbWF0ZXMgdGhlIGZlZXMgcGVyIGdhcyBmb3IgYSB0cmFuc2FjdGlvbi4KICAgIAogICAgICAgKiBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgdG8gYmUgcGFpZCBpbiBhIHRva2VuIChmZWVDdXJyZW5jeSBpcyBwcmVzZW50KSB0aGVuIHRoZSBmZWVzCiAgICAgICAqIGFyZSBlc3RpbWF0ZWQgaW4gdGhlIHZhbHVlIG9mIHRoZSB0b2tlbi4gT3RoZXJ3aXNlIGZhbGxzIGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICAgICogZXN0aW1hdGlvbiBieSByZXR1cm5pbmcgbnVsbC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHBhcmFtcyBmZWUgZXN0aW1hdGlvbiBmdW5jdGlvbiBwYXJhbWV0ZXJzCiAgICAgICAqLwogICAgZXN0aW1hdGVGZWVzUGVyR2FzOiBhc3luYyAocGFyYW1zKSA9PiB7CiAgICAgIGlmICghcGFyYW1zLnJlcXVlc3Q/LmZlZUN1cnJlbmN5KQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCBbbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhc10gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgZXN0aW1hdGVGZWVQZXJHYXNJbkZlZUN1cnJlbmN5KHBhcmFtcy5jbGllbnQsIHBhcmFtcy5yZXF1ZXN0LmZlZUN1cnJlbmN5KSwKICAgICAgICBlc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzSW5GZWVDdXJyZW5jeShwYXJhbXMuY2xpZW50LCBwYXJhbXMucmVxdWVzdC5mZWVDdXJyZW5jeSkKICAgICAgXSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgbWF4RmVlUGVyR2FzLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzCiAgICAgIH07CiAgICB9CiAgfTsKICBhc3luYyBmdW5jdGlvbiBlc3RpbWF0ZUZlZVBlckdhc0luRmVlQ3VycmVuY3koY2xpZW50LCBmZWVDdXJyZW5jeSkgewogICAgY29uc3QgZmVlID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfZ2FzUHJpY2UiLAogICAgICBwYXJhbXM6IFtmZWVDdXJyZW5jeV0KICAgIH0pOwogICAgcmV0dXJuIEJpZ0ludChmZWUpOwogIH0KICBhc3luYyBmdW5jdGlvbiBlc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzSW5GZWVDdXJyZW5jeShjbGllbnQsIGZlZUN1cnJlbmN5KSB7CiAgICBjb25zdCBmZWVzUGVyR2FzID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfbWF4UHJpb3JpdHlGZWVQZXJHYXMiLAogICAgICBwYXJhbXM6IFtmZWVDdXJyZW5jeV0KICAgIH0pOwogICAgcmV0dXJuIEJpZ0ludChmZWVzUGVyR2FzKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2Vsby9mb3JtYXR0ZXJzLmpzCiAgaW5pdF9mcm9tSGV4KCk7CiAgaW5pdF90cmFuc2FjdGlvblJlcXVlc3QoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jZWxvL3V0aWxzLmpzCiAgaW5pdF90cmltKCk7CiAgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSAwIHx8IHZhbHVlID09PSAwbiB8fCB2YWx1ZSA9PT0gdm9pZCAwIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAiMCIgfHwgdmFsdWUgPT09ICIiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgKHRyaW0odmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICIweCIgfHwgdHJpbSh2YWx1ZSkudG9Mb3dlckNhc2UoKSA9PT0gIjB4MDAiKTsKICB9CiAgZnVuY3Rpb24gaXNQcmVzZW50KHZhbHVlKSB7CiAgICByZXR1cm4gIWlzRW1wdHkodmFsdWUpOwogIH0KICBmdW5jdGlvbiBpc0VJUDE1NTkodHJhbnNhY3Rpb24pIHsKICAgIHJldHVybiB0eXBlb2YgdHJhbnNhY3Rpb24ubWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgdHJhbnNhY3Rpb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiOwogIH0KICBmdW5jdGlvbiBpc0NJUDY0KHRyYW5zYWN0aW9uKSB7CiAgICBpZiAodHJhbnNhY3Rpb24udHlwZSA9PT0gImNpcDY0IikgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBpc0VJUDE1NTkodHJhbnNhY3Rpb24pICYmIGlzUHJlc2VudCh0cmFuc2FjdGlvbi5mZWVDdXJyZW5jeSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NlbG8vZm9ybWF0dGVycy5qcwogIHZhciBmb3JtYXR0ZXJzMyA9IHsKICAgIGJsb2NrOiAvKiBAX19QVVJFX18gKi8gZGVmaW5lQmxvY2soewogICAgICBmb3JtYXQoYXJncykgewogICAgICAgIGNvbnN0IHRyYW5zYWN0aW9ucyA9IGFyZ3MudHJhbnNhY3Rpb25zPy5tYXAoKHRyYW5zYWN0aW9uKSA9PiB7CiAgICAgICAgICBpZiAodHlwZW9mIHRyYW5zYWN0aW9uID09PSAic3RyaW5nIikKICAgICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uOwogICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgLi4uZm9ybWF0dGVkLAogICAgICAgICAgICAuLi50cmFuc2FjdGlvbi5nYXRld2F5RmVlID8gewogICAgICAgICAgICAgIGdhdGV3YXlGZWU6IGhleFRvQmlnSW50KHRyYW5zYWN0aW9uLmdhdGV3YXlGZWUpLAogICAgICAgICAgICAgIGdhdGV3YXlGZWVSZWNpcGllbnQ6IHRyYW5zYWN0aW9uLmdhdGV3YXlGZWVSZWNpcGllbnQKICAgICAgICAgICAgfSA6IHt9LAogICAgICAgICAgICBmZWVDdXJyZW5jeTogdHJhbnNhY3Rpb24uZmVlQ3VycmVuY3kKICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHRyYW5zYWN0aW9ucywKICAgICAgICAgIC4uLmFyZ3MucmFuZG9tbmVzcyA/IHsgcmFuZG9tbmVzczogYXJncy5yYW5kb21uZXNzIH0gOiB7fQogICAgICAgIH07CiAgICAgIH0KICAgIH0pLAogICAgdHJhbnNhY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVUcmFuc2FjdGlvbih7CiAgICAgIGZvcm1hdChhcmdzKSB7CiAgICAgICAgaWYgKGFyZ3MudHlwZSA9PT0gIjB4N2UiKQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgaXNTeXN0ZW1UeDogYXJncy5pc1N5c3RlbVR4LAogICAgICAgICAgICBtaW50OiBhcmdzLm1pbnQgPyBoZXhUb0JpZ0ludChhcmdzLm1pbnQpIDogdm9pZCAwLAogICAgICAgICAgICBzb3VyY2VIYXNoOiBhcmdzLnNvdXJjZUhhc2gsCiAgICAgICAgICAgIHR5cGU6ICJkZXBvc2l0IgogICAgICAgICAgfTsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHsgZmVlQ3VycmVuY3k6IGFyZ3MuZmVlQ3VycmVuY3kgfTsKICAgICAgICBpZiAoYXJncy50eXBlID09PSAiMHg3YiIpCiAgICAgICAgICB0cmFuc2FjdGlvbi50eXBlID0gImNpcDY0IjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGlmIChhcmdzLnR5cGUgPT09ICIweDdjIikKICAgICAgICAgICAgdHJhbnNhY3Rpb24udHlwZSA9ICJjaXA0MiI7CiAgICAgICAgICB0cmFuc2FjdGlvbi5nYXRld2F5RmVlID0gYXJncy5nYXRld2F5RmVlID8gaGV4VG9CaWdJbnQoYXJncy5nYXRld2F5RmVlKSA6IG51bGw7CiAgICAgICAgICB0cmFuc2FjdGlvbi5nYXRld2F5RmVlUmVjaXBpZW50ID0gYXJncy5nYXRld2F5RmVlUmVjaXBpZW50OwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICAgIH0KICAgIH0pLAogICAgdHJhbnNhY3Rpb25SZXF1ZXN0OiAvKiBAX19QVVJFX18gKi8gZGVmaW5lVHJhbnNhY3Rpb25SZXF1ZXN0KHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCByZXF1ZXN0ID0ge307CiAgICAgICAgaWYgKGFyZ3MuZmVlQ3VycmVuY3kpCiAgICAgICAgICByZXF1ZXN0LmZlZUN1cnJlbmN5ID0gYXJncy5mZWVDdXJyZW5jeTsKICAgICAgICBpZiAoaXNDSVA2NChhcmdzKSkKICAgICAgICAgIHJlcXVlc3QudHlwZSA9ICIweDdiIjsKICAgICAgICByZXR1cm4gcmVxdWVzdDsKICAgICAgfQogICAgfSkKICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NlbG8vc2VyaWFsaXplcnMuanMKICBpbml0X2FkZHJlc3MoKTsKICBpbml0X2Jhc2UoKTsKICBpbml0X2NoYWluKCk7CiAgaW5pdF9ub2RlKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbjQodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgaWYgKGlzQ0lQNjQodHJhbnNhY3Rpb24pKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25DSVA2NCh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKTsKICAgIHJldHVybiBzZXJpYWxpemVUcmFuc2FjdGlvbjModHJhbnNhY3Rpb24sIHNpZ25hdHVyZSk7CiAgfQogIHZhciBzZXJpYWxpemVyczMgPSB7CiAgICB0cmFuc2FjdGlvbjogc2VyaWFsaXplVHJhbnNhY3Rpb240CiAgfTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkNJUDY0KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpIHsKICAgIGFzc2VydFRyYW5zYWN0aW9uQ0lQNjQodHJhbnNhY3Rpb24pOwogICAgY29uc3QgeyBjaGFpbklkLCBnYXMsIG5vbmNlLCB0bywgdmFsdWUsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIGFjY2Vzc0xpc3QsIGZlZUN1cnJlbmN5LCBkYXRhIH0gPSB0cmFuc2FjdGlvbjsKICAgIGNvbnN0IHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9IFsKICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgIG5vbmNlID8gdG9IZXgobm9uY2UpIDogIjB4IiwKICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXMgPyB0b0hleChtYXhQcmlvcml0eUZlZVBlckdhcykgOiAiMHgiLAogICAgICBtYXhGZWVQZXJHYXMgPyB0b0hleChtYXhGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgZ2FzID8gdG9IZXgoZ2FzKSA6ICIweCIsCiAgICAgIHRvID8/ICIweCIsCiAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiLAogICAgICBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpLAogICAgICBmZWVDdXJyZW5jeSwKICAgICAgLi4udG9ZUGFyaXR5U2lnbmF0dXJlQXJyYXkodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkKICAgIF07CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4N2IiLAogICAgICB0b1JscChzZXJpYWxpemVkVHJhbnNhY3Rpb24pCiAgICBdKTsKICB9CiAgdmFyIE1BWF9NQVhfRkVFX1BFUl9HQVMgPSAybiAqKiAyNTZuIC0gMW47CiAgZnVuY3Rpb24gYXNzZXJ0VHJhbnNhY3Rpb25DSVA2NCh0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBtYXhQcmlvcml0eUZlZVBlckdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckdhcywgdG8sIGZlZUN1cnJlbmN5IH0gPSB0cmFuc2FjdGlvbjsKICAgIGlmIChjaGFpbklkIDw9IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhaW5JZEVycm9yKHsgY2hhaW5JZCB9KTsKICAgIGlmICh0byAmJiAhaXNBZGRyZXNzKHRvKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB0byB9KTsKICAgIGlmIChnYXNQcmljZSkKICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoImBnYXNQcmljZWAgaXMgbm90IGEgdmFsaWQgQ0lQLTY0IFRyYW5zYWN0aW9uIGF0dHJpYnV0ZS4iKTsKICAgIGlmIChpc1ByZXNlbnQobWF4RmVlUGVyR2FzKSAmJiBtYXhGZWVQZXJHYXMgPiBNQVhfTUFYX0ZFRV9QRVJfR0FTKQogICAgICB0aHJvdyBuZXcgRmVlQ2FwVG9vSGlnaEVycm9yKHsgbWF4RmVlUGVyR2FzIH0pOwogICAgaWYgKGlzUHJlc2VudChtYXhQcmlvcml0eUZlZVBlckdhcykgJiYgaXNQcmVzZW50KG1heEZlZVBlckdhcykgJiYgbWF4UHJpb3JpdHlGZWVQZXJHYXMgPiBtYXhGZWVQZXJHYXMpCiAgICAgIHRocm93IG5ldyBUaXBBYm92ZUZlZUNhcEVycm9yKHsgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcyB9KTsKICAgIGlmIChpc1ByZXNlbnQoZmVlQ3VycmVuY3kpICYmICFpc0FkZHJlc3MoZmVlQ3VycmVuY3kpKSB7CiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgZmVlQ3VycmVuY3lgIE1VU1QgYmUgYSB0b2tlbiBhZGRyZXNzIGZvciBDSVAtNjQgdHJhbnNhY3Rpb25zLiIpOwogICAgfQogICAgaWYgKGlzRW1wdHkoZmVlQ3VycmVuY3kpKSB7CiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgZmVlQ3VycmVuY3lgIG11c3QgYmUgcHJvdmlkZWQgZm9yIENJUC02NCB0cmFuc2FjdGlvbnMuIik7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NlbG8vY2hhaW5Db25maWcuanMKICB2YXIgY2hhaW5Db25maWczID0gewogICAgZm9ybWF0dGVyczogZm9ybWF0dGVyczMsCiAgICBzZXJpYWxpemVyczogc2VyaWFsaXplcnMzLAogICAgZmVlcwogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NlbG8uanMKICB2YXIgY2VsbyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzMsCiAgICBpZDogNDIyMjAsCiAgICBuYW1lOiAiQ2VsbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDRUxPIiwKICAgICAgc3ltYm9sOiAiQ0VMTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2Zvcm5vLmNlbG8ub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ2VsbyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9jZWxvc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkuY2Vsb3NjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEzMTEyNTk5CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jZWxvQWxmYWpvcmVzLmpzCiAgdmFyIGNlbG9BbGZham9yZXMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWczLAogICAgaWQ6IDQ0Nzg3LAogICAgbmFtZTogIkFsZmFqb3JlcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDRUxPIiwKICAgICAgc3ltYm9sOiAiQS1DRUxPIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hbGZham9yZXMtZm9ybm8uY2Vsby10ZXN0bmV0Lm9yZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNlbG8gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuY2Vsby5vcmcvYWxmYWpvcmVzIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmNlbG8ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDU2OTAwMQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jaGlsaXouanMKICB2YXIgY2hpbGl6ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4ODg4OCwKICAgIG5hbWU6ICJDaGlsaXogQ2hhaW4iLAogICAgbmV0d29yazogImNoaWxpei1jaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDSFoiLAogICAgICBzeW1ib2w6ICJDSFoiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWwogICAgICAgICAgImh0dHBzOi8vcnBjLmFua3IuY29tL2NoaWxpeiIsCiAgICAgICAgICAiaHR0cHM6Ly9jaGlsaXotcnBjLnB1YmxpY25vZGUuY29tIgogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ2hpbGl6IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4uY2hpbGl6LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLmNoaWxpei5jb20vYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NoaXBzLmpzCiAgdmFyIGNoaXBzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyODgyLAogICAgbmFtZTogIkNoaXBzIE5ldHdvcmsiLAogICAgbmV0d29yazogIkNISVBTIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIklPVEEiLAogICAgICBzeW1ib2w6ICJJT1RBIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL25vZGUuY2hpcHMub29vL3dhc3AvYXBpL3YxL2NoYWlucy9pb3RhMXBwM2QzbW5hcDN1Zm1ncW5qc253MzQ0c3FtZjVzdmpoMjZ5Mmtobm1jODlzdjY3ODh5M3IyMDdhOGZuL2V2bSIKICAgICAgICBdCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY2xhc3NpYy5qcwogIHZhciBjbGFzc2ljID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2MSwKICAgIG5hbWU6ICJFdGhlcmV1bSBDbGFzc2ljIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUQyIsCiAgICAgIHN5bWJvbDogIkVUQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2V0Yy5yaXZldC5saW5rIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmNvbS9ldGMvbWFpbm5ldCIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jb25mbHV4RVNwYWNlLmpzCiAgdmFyIGNvbmZsdXhFU3BhY2UgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMzAsCiAgICBuYW1lOiAiQ29uZmx1eCBlU3BhY2UiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkNvbmZsdXgiLCBzeW1ib2w6ICJDRlgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldm0uY29uZmx1eHJwYy5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXZtLmNvbmZsdXhycGMuY29tL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ29uZmx1eFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZXZtLmNvbmZsdXhzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhFRmYwMDc4OTEwZjYzOGNkODE5OTZjYzExN2JjY0QzZURmMkIwNzJGIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDY4NjAyOTM1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY29uZmx1eEVTcGFjZVRlc3RuZXQuanMKICB2YXIgY29uZmx1eEVTcGFjZVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDcxLAogICAgbmFtZTogIkNvbmZsdXggZVNwYWNlIFRlc3RuZXQiLAogICAgbmV0d29yazogImNmeC1lc3BhY2UtdGVzdG5ldCIsCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkNvbmZsdXgiLCBzeW1ib2w6ICJDRlgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldm10ZXN0bmV0LmNvbmZsdXhycGMuY29tIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2V2bXRlc3RuZXQuY29uZmx1eHJwYy5jb20vd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJDb25mbHV4U2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ldm10ZXN0bmV0LmNvbmZsdXhzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhFRmYwMDc4OTEwZjYzOGNkODE5OTZjYzExN2JjY0QzZURmMkIwNzJGIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDExNzQ5OTA1MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NvcmVEYW8uanMKICB2YXIgY29yZURhbyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExNiwKICAgIG5hbWU6ICJDb3JlIERhbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDb3JlIiwKICAgICAgc3ltYm9sOiAiQ09SRSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5jb3JlZGFvLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNvcmVEYW8iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5jb3JlZGFvLm9yZyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTkwNzkzNAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3JhYi5qcwogIHZhciBjcmFiID0gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQ0LAogICAgbmFtZTogIkNyYWIgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDcmFiIE5ldHdvcmsgTmF0aXZlIFRva2VuIiwKICAgICAgc3ltYm9sOiAiQ1JBQiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vY3JhYi1ycGMuZGFyd2luaWEubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9jcmFiLXJwYy5kYXJ3aW5pYS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsgbmFtZTogIkJsb2Nrc2NvdXQiLCB1cmw6ICJodHRwczovL2NyYWItc2Nhbi5kYXJ3aW5pYS5uZXR3b3JrIiB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwMzI1OTMKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jcm9ub3MuanMKICB2YXIgY3Jvbm9zID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNSwKICAgIG5hbWU6ICJDcm9ub3MgTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDcm9ub3MiLAogICAgICBzeW1ib2w6ICJDUk8iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldm0uY3Jvbm9zLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNyb25vcyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5jcm9ub3Mub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLWFwaS5jcm9ub3Mub3JnL21haW5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5NjMxMTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jcm9ub3N6a0VWTS5qcwogIHZhciBjcm9ub3N6a0VWTSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzg4LAogICAgbmFtZTogIkNyb25vcyB6a0VWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkNyb25vcyB6a0VWTSBDUk8iLAogICAgICBzeW1ib2w6ICJ6a0NSTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL21haW5uZXQuemtldm0uY3Jvbm9zLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNyb25vcyB6a0VWTSAoTWFpbm5ldCkgQ2hhaW4gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuemtldm0uY3Jvbm9zLm9yZyIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jcm9ub3N6a0VWTVRlc3RuZXQuanMKICB2YXIgY3Jvbm9zemtFVk1UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyODIsCiAgICBuYW1lOiAiQ3Jvbm9zIHprRVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ3Jvbm9zIHprRVZNIFRlc3QgQ29pbiIsCiAgICAgIHN5bWJvbDogInprVENSTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuemtldm0uY3Jvbm9zLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNyb25vcyB6a0VWTSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnprZXZtLmNyb25vcy5vcmcvdGVzdG5ldCIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3Jvbm9zVGVzdG5ldC5qcwogIHZhciBjcm9ub3NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMzgsCiAgICBuYW1lOiAiQ3Jvbm9zIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ1JPIiwKICAgICAgc3ltYm9sOiAidENSTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2V2bS10My5jcm9ub3Mub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ3Jvbm9zIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2Nyb25vcy5vcmcvZXhwbG9yZXIvdGVzdG5ldDMiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTAxOTEyNTEKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3Jvc3NiZWxsLmpzCiAgdmFyIGNyb3NzYmVsbCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzczNywKICAgIG5hbWU6ICJDcm9zc2JlbGwiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ1NCIiwKICAgICAgc3ltYm9sOiAiQ1NCIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuY3Jvc3NiZWxsLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ3Jvc3NTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4uY3Jvc3NiZWxsLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NjYW4uY3Jvc3NiZWxsLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAzODI0NjAzMQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2N1cnRpcy5qcwogIHZhciBjdXJ0aXMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMzMTExLAogICAgbmFtZTogIkN1cnRpcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQXBlQ29pbiIsIHN5bWJvbDogIkFQRSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5jdXJ0aXMuYXBlY2hhaW4uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ3VydGlzIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmN1cnRpcy5hcGVjaGFpbi5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2N5YmVyLmpzCiAgdmFyIGN5YmVyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NTYwLAogICAgbmFtZTogIkN5YmVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2N5YmVyLmFsdC50ZWNobm9sb2d5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9jeWJlcnNjYW4uY28iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vY3liZXJzY2FuLmNvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3liZXJUZXN0bmV0LmpzCiAgdmFyIGN5YmVyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExNTU3NTYwLAogICAgbmFtZTogIkN5YmVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vY3liZXItdGVzdG5ldC5hbHQudGVjaG5vbG9neSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5jeWJlcnNjYW4uY28iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC5jeWJlcnNjYW4uY28vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhmZmMzOTFGMDAxODI2OWQ0NzU4QUVBMWExNDQ3NzJFOEZCOTk1NDVFIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwNDU0NQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kYXJ3aW5pYS5qcwogIHZhciBkYXJ3aW5pYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDYsCiAgICBuYW1lOiAiRGFyd2luaWEgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJSSU5HIiwKICAgICAgc3ltYm9sOiAiUklORyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmRhcndpbmlhLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLmRhcndpbmlhLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogeyBuYW1lOiAiRXhwbG9yZXIiLCB1cmw6ICJodHRwczovL2V4cGxvcmVyLmRhcndpbmlhLm5ldHdvcmsiIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjk0MjAKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kY2hhaW4uanMKICB2YXIgZGNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAyNzE2NDQ2NDI5ODM3ZTMsCiAgICBuYW1lOiAiRGNoYWluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2RjaGFpbi0yNzE2NDQ2NDI5ODM3MDAwLTEuanNvbnJwYy5zYWdhcnBjLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRGNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2RjaGFpbi0yNzE2NDQ2NDI5ODM3MDAwLTEuc2FnYWV4cGxvcmVyLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1kY2hhaW4tMjcxNjQ0NjQyOTgzNzAwMC0xLnNhZ2FleHBsb3Jlci5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kY2hhaW5UZXN0bmV0LmpzCiAgdmFyIGRjaGFpblRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI3MTMwMTc5OTc1NzhlMywKICAgIG5hbWU6ICJEY2hhaW4gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL2RjaGFpbnRlc3RuZXQtMjcxMzAxNzk5NzU3ODAwMC0xLmpzb25ycGMudGVzdG5ldC5zYWdhcnBjLmlvIgogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRGNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2RjaGFpbnRlc3RuZXQtMjcxMzAxNzk5NzU3ODAwMC0xLnRlc3RuZXQuc2FnYWV4cGxvcmVyLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1kY2hhaW50ZXN0bmV0LTI3MTMwMTc5OTc1NzgwMDAtMS50ZXN0bmV0LnNhZ2FleHBsb3Jlci5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kZWZpY2hhaW5Fdm0uanMKICB2YXIgZGVmaWNoYWluRXZtID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMTMwLAogICAgbmV0d29yazogImRlZmljaGFpbi1ldm0iLAogICAgbmFtZTogIkRlRmlDaGFpbiBFVk0gTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRGVGaUNoYWluIiwKICAgICAgc3ltYm9sOiAiREZJIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC5tYWlubmV0Lm9jZWFuLmplbGx5ZmlzaHNkay5jb20iXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZXRoLm1haW5uZXQub2NlYW4uamVsbHlmaXNoc2RrLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRlRmlTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL21ldGEuZGVmaXNjYW4ubGl2ZSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMzc4NTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kZWZpY2hhaW5Fdm1UZXN0bmV0LmpzCiAgdmFyIGRlZmljaGFpbkV2bVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMzEsCiAgICBuZXR3b3JrOiAiZGVmaWNoYWluLWV2bS10ZXN0bmV0IiwKICAgIG5hbWU6ICJEZUZpQ2hhaW4gRVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkRlRmlDaGFpbiIsCiAgICAgIHN5bWJvbDogIkRGSSIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldGgudGVzdG5ldC5vY2Vhbi5qZWxseWZpc2hzZGsuY29tIl0KICAgICAgfSwKICAgICAgcHVibGljOiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC50ZXN0bmV0Lm9jZWFuLmplbGx5ZmlzaHNkay5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJEZUZpU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9tZXRhLmRlZmlzY2FuLmxpdmUvP25ldHdvcms9VGVzdE5ldCIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNTY0NjIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZGVnZW4uanMKICB2YXIgZGVnZW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDY2NjY2NjY2NiwKICAgIG5hbWU6ICJEZWdlbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJEZWdlbiIsCiAgICAgIHN5bWJvbDogIkRFR0VOIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZGVnZW4udGlwcyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuZGVnZW4udGlwcyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRlZ2VuIENoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmRlZ2VuLnRpcHMiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZGVnZW4udGlwcy9hcGkvdjIiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZGZrLmpzCiAgdmFyIGRmayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTM5MzUsCiAgICBuYW1lOiAiREZLIENoYWluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkpld2VsIiwKICAgICAgc3ltYm9sOiAiSkVXRUwiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3N1Ym5ldHMuYXZheC5uZXR3b3JrL2RlZmkta2luZ2RvbXMvZGZrLWNoYWluL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRGS1N1Ym5ldFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc3VibmV0cy5hdmF4Lm5ldHdvcmsvZGVmaS1raW5nZG9tcyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDc5MDU1MQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2RvZG9jaGFpblRlc3RuZXQuanMKICB2YXIgZG9kb2NoYWluVGVzdG5ldCA9IGRlZmluZUNoYWluKHsKICAgIGlkOiA1MzQ1NywKICAgIG5hbWU6ICJET0RPY2hhaW4gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJET0RPIiwgc3ltYm9sOiAiRE9ETyIgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9kb2RvY2hhaW4tdGVzdG5ldC5hbHQudGVjaG5vbG9neSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9kb2RvY2hhaW4tdGVzdG5ldC5hbHQudGVjaG5vbG9neS93cyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRPRE9jaGFpbiBUZXN0bmV0IChTZXBvbGlhKSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LXNjYW4uZG9kb2NoYWluLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZG9nZWNoYWluLmpzCiAgdmFyIGRvZ2VjaGFpbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMmUzLAogICAgbmFtZTogIkRvZ2VjaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJXcmFwcGVkIERvZ2Vjb2luIiwKICAgICAgc3ltYm9sOiAiV0RPR0UiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMuZG9nZWNoYWluLmRvZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRvZ2VDaGFpbkV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmRvZ2VjaGFpbi5kb2ciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZG9nZWNoYWluLmRvZy9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweDY4YTg2MDlhNjBhMDA4RUZBNjMzZGZkZWM1OTJjMDNCMDMwY0M1MDgiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjUzODQwMzEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kcmV5ZXJ4TWFpbm5ldC5qcwogIHZhciBkcmV5ZXJ4TWFpbm5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjM0NTEsCiAgICBuYW1lOiAiRHJleWVyWCBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJEcmV5ZXJYIiwKICAgICAgc3ltYm9sOiAiRFJYIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5kcmV5ZXJ4LmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRyZXllclggU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLmRyZXllcnguY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2RyZXllcnhUZXN0bmV0LmpzCiAgdmFyIGRyZXllcnhUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMzQ1MiwKICAgIG5hbWU6ICJEcmV5ZXJYIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkRyZXllclgiLAogICAgICBzeW1ib2w6ICJEUlgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHA6Ly90ZXN0bmV0LXJwYy5kcmV5ZXJ4LmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRyZXllclggVGVzdG5ldCBTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQtc2Nhbi5kcmV5ZXJ4LmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZWRnZWxlc3MuanMKICB2YXIgZWRnZWxlc3MgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIwMjYsCiAgICBuYW1lOiAiRWRnZWxlc3MgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRWRnZWxlc3MgV3JhcHBlZCBFVEgiLAogICAgICBzeW1ib2w6ICJFd0VUSCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZWRnZWxlc3MubmV0d29yay9odHRwIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5lZGdlbGVzcy5uZXR3b3JrL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWRnZWxlc3MgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuZWRnZWxlc3MubmV0d29yayIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lZGdlbGVzc1Rlc3RuZXQuanMKICB2YXIgZWRnZWxlc3NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDIsCiAgICBuYW1lOiAiRWRnZWxlc3MgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRWRnZWxlc3MgV3JhcHBlZCBFVEgiLAogICAgICBzeW1ib2w6ICJFd0VUSCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9lZGdlbGVzcy10ZXN0bmV0LnJwYy5jYWxkZXJhLnh5ei9odHRwIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2VkZ2VsZXNzLXRlc3RuZXQucnBjLmNhbGRlcmEueHl6L3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWRnZWxlc3MgVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmV4cGxvcmVyLmVkZ2VsZXNzLm5ldHdvcmsiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZWRnZXdhcmUuanMKICB2YXIgZWRnZXdhcmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIwMjEsCiAgICBuYW1lOiAiRWRnZXdhcmUgRWRnZUVWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVkZ2V3YXJlIiwKICAgICAgc3ltYm9sOiAiRURHIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZWRnZXdhcmUtZXZtLmplbGxpZWRvd2wubmV0Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWRnc2NhbiBieSBCaGFyYXRoY29vcmciLAogICAgICAgIHVybDogImh0dHBzOi8vZWRnc2Nhbi5saXZlIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2VkZ3NjYW4ubGl2ZS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTgxMTc4NzIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lZGdld2FyZVRlc3RuZXQuanMKICB2YXIgZWRnZXdhcmVUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDIyLAogICAgbmFtZTogIkJlcmVzaGVldCBCZXJlRVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiVGVzdG5ldCBFREciLAogICAgICBzeW1ib2w6ICJ0RURHIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYmVyZXNoZWV0LWV2bS5qZWxsaWVkb3dsLm5ldCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkVkZ3NjYW4gYnkgQmhhcmF0aGNvb3JnIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuZWRnc2Nhbi5saXZlIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQuZWRnc2Nhbi5saXZlL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lb24uanMKICB2YXIgZW9uID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3MzMyLAogICAgbmFtZTogIkhvcml6ZW4gRU9OIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlpFTiIsCiAgICAgIHN5bWJvbDogIlpFTiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2Vvbi1ycGMuaG9yaXplbmxhYnMuaW8vZXRodjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFT04gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZW9uLWV4cGxvcmVyLmhvcml6ZW5sYWJzLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lb3MuanMKICB2YXIgZW9zID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNzc3NywKICAgIG5hbWU6ICJFT1MgRVZNIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVPUyIsCiAgICAgIHN5bWJvbDogIkVPUyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FwaS5ldm0uZW9zbmV0d29yay5jb20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFT1MgRVZNIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmV2bS5lb3NuZXR3b3JrLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0uZW9zbmV0d29yay5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc5NDM5MzMKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lb3NUZXN0bmV0LmpzCiAgdmFyIGVvc1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE1NTU3LAogICAgbmFtZTogIkVPUyBFVk0gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFT1MiLAogICAgICBzeW1ib2w6ICJFT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkudGVzdG5ldC5ldm0uZW9zbmV0d29yay5jb20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFT1MgRVZNIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5ldm0uZW9zbmV0d29yay5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5ldm0uZW9zbmV0d29yay5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDkwNjc5NDAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZXRoZXJsaW5rLmpzCiAgdmFyIGV0aGVybGluayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDI3OTMsCiAgICBuYW1lOiAiRXRoZXJsaW5rIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlRleiIsCiAgICAgIHN5bWJvbDogIlhUWiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL25vZGUubWFpbm5ldC5ldGhlcmxpbmsuY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJsaW5rIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmV0aGVybGluay5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzM4OTkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ldGhlcmxpbmtUZXN0bmV0LmpzCiAgdmFyIGV0aGVybGlua1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODEyMywKICAgIG5hbWU6ICJFdGhlcmxpbmsgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJUZXoiLAogICAgICBzeW1ib2w6ICJYVFoiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ub2RlLmdob3N0bmV0LmV0aGVybGluay5jb20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcmxpbmsgVGVzdG5ldCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLmV0aGVybGluay5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2V2bW9zLmpzCiAgdmFyIGV2bW9zID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5MDAxLAogICAgbmFtZTogIkV2bW9zIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV2bW9zIiwKICAgICAgc3ltYm9sOiAiRVZNT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldGguYmQuZXZtb3Mub3JnOjg1NDUiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdm1vcyBCbG9jayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9lc2Nhbi5saXZlIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2V2bW9zVGVzdG5ldC5qcwogIHZhciBldm1vc1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDllMywKICAgIG5hbWU6ICJFdm1vcyBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV2bW9zIiwKICAgICAgc3ltYm9sOiAiRVZNT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldGguYmQuZXZtb3MuZGV2Ojg1NDUiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdm1vcyBUZXN0bmV0IEJsb2NrIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V2bS5ldm1vcy5kZXYvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2VrdGEuanMKICB2YXIgZWt0YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTk5NCwKICAgIG5hbWU6ICJFa3RhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVLVEEiLAogICAgICBzeW1ib2w6ICJFS1RBIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbWFpbi5la3RhLmlvIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWt0YXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZWt0YXNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZWt0YXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2VrdGFUZXN0bmV0LmpzCiAgdmFyIGVrdGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDA0LAogICAgbmFtZTogIkVrdGEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFS1RBIiwKICAgICAgc3ltYm9sOiAiRUtUQSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3Rlc3QuZWt0YS5pbzo4NTQ1Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGVzdCBFa3Rhc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0LmVrdGFzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3QuZWt0YXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mYW50b20uanMKICB2YXIgZmFudG9tID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNTAsCiAgICBuYW1lOiAiRmFudG9tIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkZhbnRvbSIsCiAgICAgIHN5bWJvbDogIkZUTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5hbmtyLmNvbS9mYW50b20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGVE1TY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2Z0bXNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5mdG1zY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzMwMDE5ODcKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mYW50b21Tb25pY1Rlc3RuZXQuanMKICB2YXIgZmFudG9tU29uaWNUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2NDI0MCwKICAgIG5hbWU6ICJGYW50b20gU29uaWMgT3BlbiBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJmYW50b20tc29uaWMtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJGYW50b20iLAogICAgICBzeW1ib2w6ICJGVE0iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGNhcGkuc29uaWMuZmFudG9tLm5ldHdvcmsiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGYW50b20gU29uaWMgT3BlbiBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3B1YmxpYy1zb25pYy5mYW50b20ubmV0d29yayIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmFudG9tVGVzdG5ldC5qcwogIHZhciBmYW50b21UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MDAyLAogICAgbmFtZTogIkZhbnRvbSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkZhbnRvbSIsCiAgICAgIHN5bWJvbDogIkZUTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy50ZXN0bmV0LmZhbnRvbS5uZXR3b3JrIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRlRNU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmZ0bXNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQuZnRtc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDgzMjg2ODgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmliby5qcwogIHZhciBmaWJvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjMwNiwKICAgIG5hbWU6ICJGaWJvIENoYWluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogImZpYm8iLAogICAgICBzeW1ib2w6ICJGSUJPIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbmV0d29yay5oenJvYy5hcnQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWJvU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLmZpYm9jaGFpbi5vcmciCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmlsZWNvaW4uanMKICB2YXIgZmlsZWNvaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxNCwKICAgIG5hbWU6ICJGaWxlY29pbiBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogImZpbGVjb2luIiwKICAgICAgc3ltYm9sOiAiRklMIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLm5vZGUuZ2xpZi5pby9ycGMvdjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWxmb3giLAogICAgICAgIHVybDogImh0dHBzOi8vZmlsZm94LmluZm8vZW4iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzMyODU5NAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZpbGVjb2luQ2FsaWJyYXRpb24uanMKICB2YXIgZmlsZWNvaW5DYWxpYnJhdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzE0MTU5LAogICAgbmFtZTogIkZpbGVjb2luIENhbGlicmF0aW9uIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogInRlc3RuZXQgZmlsZWNvaW4iLAogICAgICBzeW1ib2w6ICJ0RklMIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLmNhbGlicmF0aW9uLm5vZGUuZ2xpZi5pby9ycGMvdjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWxzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2NhbGlicmF0aW9uLmZpbHNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZpbGVjb2luSHlwZXJzcGFjZS5qcwogIHZhciBmaWxlY29pbkh5cGVyc3BhY2UgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxNDEsCiAgICBuYW1lOiAiRmlsZWNvaW4gSHlwZXJzcGFjZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJ0ZXN0bmV0IGZpbGVjb2luIiwKICAgICAgc3ltYm9sOiAidEZJTCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FwaS5oeXBlcnNwYWNlLm5vZGUuZ2xpZi5pby9ycGMvdjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWxmb3giLAogICAgICAgIHVybDogImh0dHBzOi8vaHlwZXJzcGFjZS5maWxmb3guaW5mby9lbiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmxhcmUuanMKICB2YXIgZmxhcmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0LAogICAgbmFtZTogIkZsYXJlIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiZmxhcmUiLAogICAgICBzeW1ib2w6ICJGTFIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9mbGFyZS1hcGkuZmxhcmUubmV0d29yay9leHQvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGbGFyZSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9mbGFyZS1leHBsb3Jlci5mbGFyZS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2ZsYXJlLWV4cGxvcmVyLmZsYXJlLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZsYXJlVGVzdG5ldC5qcwogIHZhciBmbGFyZVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExNCwKICAgIG5hbWU6ICJDb3N0b24yIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogImNvc3RvbjJmbGFyZSIsCiAgICAgIHN5bWJvbDogIkMyRkxSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vY29zdG9uMi1hcGkuZmxhcmUubmV0d29yay9leHQvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJDb3N0b24yIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2Nvc3RvbjItZXhwbG9yZXIuZmxhcmUubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9jb3N0b24yLWV4cGxvcmVyLmZsYXJlLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mbG93UHJldmlld25ldC5qcwogIHZhciBmbG93UHJldmlld25ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNjQ2LAogICAgbmFtZTogIkZsb3dFVk0gUHJldmlld25ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJGbG93IiwKICAgICAgc3ltYm9sOiAiRkxPVyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcHJldmlld25ldC5ldm0ubm9kZXMub25mbG93Lm9yZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlByZXZpZXduZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcHJldmlld25ldC5mbG93ZGl2ZXIuaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjIwNQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Zsb3dNYWlubmV0LmpzCiAgdmFyIGZsb3dNYWlubmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NDcsCiAgICBuYW1lOiAiRmxvd0VWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkZsb3ciLAogICAgICBzeW1ib2w6ICJGTE9XIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmV2bS5ub2Rlcy5vbmZsb3cub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFpbm5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9mbG93ZGl2ZXIuaW8iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmxvd1Rlc3RuZXQuanMKICB2YXIgZmxvd1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU0NSwKICAgIG5hbWU6ICJGbG93RVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRmxvdyIsCiAgICAgIHN5bWJvbDogIkZMT1ciCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuZXZtLm5vZGVzLm9uZmxvdy5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGbG93IERpdmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuZmxvd2RpdmVyLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEzNzUxOAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Zvcm1hLmpzCiAgdmFyIGZvcm1hID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5ODQxMjIsCiAgICBuYW1lOiAiRm9ybWEiLAogICAgbmV0d29yazogImZvcm1hIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIHN5bWJvbDogIlRJQSIsCiAgICAgIG5hbWU6ICJUSUEiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmZvcm1hLmFydCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly93cy5mb3JtYS5hcnQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGb3JtYSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5mb3JtYS5hcnQiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGQ1M0M2RkZCMTIzRjczNDlBMzI5ODBGODdmYWVEOEZmRGM5ZWYwNzkiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjUyNzA1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZm91bmRyeS5qcwogIHZhciBmb3VuZHJ5ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMTMzNywKICAgIG5hbWU6ICJGb3VuZHJ5IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cDovLzEyNy4wLjAuMTo4NTQ1Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzOi8vMTI3LjAuMC4xOjg1NDUiXQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZyYXh0YWwuanMKICB2YXIgc291cmNlSWQxMiA9IDE7CiAgdmFyIGZyYXh0YWwgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI1MiwKICAgIG5hbWU6ICJGcmF4dGFsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJGcmF4IEV0aGVyIiwgc3ltYm9sOiAiZnJ4RVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmZyYXguY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiZnJheHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZnJheHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5mcmF4c2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMTJdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg2NkNDOTE2RWQ1QzZDMkZBOTcwMTRmN0QxY0QxNDE1MjhBZTE3MWU0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDEyXTogewogICAgICAgICAgYWRkcmVzczogIjB4MzZjYjY1YzE5NjdBMEZiMEVFRTExNTY5QzUxQzJmMmFBMUNhNmY2RCIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MTM1MzIzCiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkMTJdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgzNEMwYkQ1ODc3QTVFZTcwOTlEMGY1Njg4RDY1RjRiQjkxNThCREUyIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMTkxMzUzMjMKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQxMgogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mcmF4dGFsVGVzdG5ldC5qcwogIHZhciBzb3VyY2VJZDEzID0gMTdlMzsKICB2YXIgZnJheHRhbFRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI1MjIsCiAgICBuYW1lOiAiRnJheHRhbCBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJGcmF4IEV0aGVyIiwgc3ltYm9sOiAiZnJ4RVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQuZnJheC5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJmcmF4c2NhbiB0ZXN0bmV0IiwKICAgICAgICB1cmw6ICJodHRwczovL2hvbGVza3kuZnJheHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1ob2xlc2t5LmZyYXhzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQxM106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDcxNUVBNjREQTEzRjRkMDgzMWVjZTRBZDNFOGMxYWEwMTMxNjdGMzIiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTNdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhCOWM2NEJmQTQ5OGQ1YjlhODM5OEVkNmY0NmViNzZkOTBkRTU1MDVkIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzE4NDE2CiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkMTNdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgwQmFhZkMyMTcxNjJmNjQ5MzA5MDlhRDlmMkIyNzEyNTEyMWQ2MzMyIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzE4NDE2CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTMKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZnVua2lNYWlubmV0LmpzCiAgdmFyIHNvdXJjZUlkMTQgPSAxOwogIHZhciBmdW5raU1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDMzOTc5LAogICAgbmFtZTogIkZ1bmtpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1tYWlubmV0LmZ1bmtpY2hhaW4uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRnVua2kgTWFpbm5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9mdW5raXNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cwogICAgfSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDE0CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Z1bmtpU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDE1ID0gMTExNTUxMTE7CiAgdmFyIGZ1bmtpU2Vwb2xpYSA9IGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAzMzk3OTAxLAogICAgbmV0d29yazogImZ1bmtpU2Vwb2xpYSIsCiAgICBuYW1lOiAiRnVua2kgU2Vwb2xpYSBTYW5kYm94IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2Z1bmtpLXRlc3RuZXQuYWx0LnRlY2hub2xvZ3kiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGdW5raSBTZXBvbGlhIFNhbmRib3ggRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS1zYW5kYm94LmZ1bmtpY2hhaW4uY29tLyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTYyMDIwNAogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZnVzZS5qcwogIHZhciBmdXNlID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjIsCiAgICBuYW1lOiAiRnVzZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRnVzZSIsIHN5bWJvbDogIkZVU0UiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcnBjLmZ1c2UuaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGdXNlIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmZ1c2UuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZnVzZS5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTYxNDY2MjgKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mdXNlU3BhcmtuZXQuanMKICB2YXIgZnVzZVNwYXJrbmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjMsCiAgICBuYW1lOiAiRnVzZSBTcGFya25ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU3BhcmsiLCBzeW1ib2w6ICJTUEFSSyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMuZnVzZXNwYXJrLmlvIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU3BhcmtlbnQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuZnVzZXNwYXJrLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmZ1c2VzcGFyay5pby9hcGkiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvaW90ZXguanMKICB2YXIgaW90ZXggPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQ2ODksCiAgICBuYW1lOiAiSW9UZVgiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSW9UZVgiLAogICAgICBzeW1ib2w6ICJJT1RYIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9iYWJlbC1hcGkubWFpbm5ldC5pb3RleC5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9iYWJlbC1hcGkubWFpbm5ldC5pb3RleC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIklvVGVYU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9pb3RleHNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjIxNjM2NzAKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pb3RleFRlc3RuZXQuanMKICB2YXIgaW90ZXhUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0NjkwLAogICAgbmFtZTogIklvVGVYIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSW9UZVgiLAogICAgICBzeW1ib2w6ICJJT1RYIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9iYWJlbC1hcGkudGVzdG5ldC5pb3RleC5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9iYWJlbC1hcGkudGVzdG5ldC5pb3RleC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIklvVGVYU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmlvdGV4c2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YjVjZWNENjg5NGM2ZjQ3M0VjNzI2QTE3NmYxNTEyMzk5QTJlMzU1ZCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDM0NzU5MgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9qYmMuanMKICB2YXIgamJjID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4ODk5LAogICAgbmFtZTogIkpJQkNIQUlOIEwxIiwKICAgIG5ldHdvcms6ICJqYmMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkpCQyIsIHN5bWJvbDogIkpCQyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1sMS5qaWJjaGFpbi5uZXQiXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLWwxLmppYmNoYWluLm5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwLWwxLmppYmNoYWluLm5ldCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHAtbDEuamliY2hhaW4ubmV0L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YzBDOEM0ODZEMTQ2NkM1N0VmZTEzQzJiZjAwMGQ0YzU2RjQ3Q0JkQyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMjk5MDQ4CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9qYmNUZXN0bmV0LmpzCiAgdmFyIGpiY1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDg4OTkxLAogICAgbmFtZTogIkppYmNoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInRKQkMiLCBzeW1ib2w6ICJ0SkJDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQuamliY2hhaW4ubmV0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHAudGVzdG5ldC5qaWJjaGFpbi5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwLnRlc3RuZXQuamliY2hhaW4ubmV0L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YTFhODU4YWQ5MDQxQjQ3NDFlNjIwMzU1YTNGOTZCM2M3OGU3MGVjRSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAzMjg0OAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rYXJ1cmEuanMKICB2YXIga2FydXJhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2ODYsCiAgICBuYW1lOiAiS2FydXJhIiwKICAgIG5ldHdvcms6ICJrYXJ1cmEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkthcnVyYSIsCiAgICAgIHN5bWJvbDogIktBUiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgcHVibGljOiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC1ycGMta2FydXJhLmFjYS1hcGkubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ldGgtcnBjLWthcnVyYS5hY2EtYXBpLm5ldHdvcmsiXQogICAgICB9LAogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC1ycGMta2FydXJhLmFjYS1hcGkubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ldGgtcnBjLWthcnVyYS5hY2EtYXBpLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJLYXJ1cmEgQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmthcnVyYS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2Jsb2Nrc2NvdXQua2FydXJhLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ29iaS5qcwogIHZhciBnb2JpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjYzLAogICAgbmFtZTogIkhvcml6ZW4gR29iaSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlRlc3QgWkVOIiwKICAgICAgc3ltYm9sOiAidFpFTiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2dvYmktdGVzdG5ldC5ob3JpemVubGFicy5pby9ldGh2MSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkdvYmkgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZ29iaS1leHBsb3Jlci5ob3JpemVuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ29lcmxpLmpzCiAgdmFyIGdvZXJsaSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNSwKICAgIG5hbWU6ICJHb2VybGkiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkdvZXJsaSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5hbmtyLmNvbS9ldGhfZ29lcmxpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2dvZXJsaS5ldGhlcnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLWdvZXJsaS5ldGhlcnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIGVuc1JlZ2lzdHJ5OiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIKICAgICAgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhmYzRBQzc1QzQ2QzkxNGFGNTg5MmQ2ZDNlRkZjZWJENzkxNzI5M0YxIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEwMzM5MjA2CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDY1MDc2NzAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ25vc2lzLmpzCiAgdmFyIGdub3NpcyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAwLAogICAgbmFtZTogIkdub3NpcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJHbm9zaXMiLAogICAgICBzeW1ib2w6ICJ4REFJIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ25vc2lzY2hhaW4uY29tIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5nbm9zaXNjaGFpbi5jb20vd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiR25vc2lzc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9nbm9zaXNzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5nbm9zaXNzY2FuLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMTAyMjQ5MQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2dub3Npc0NoaWFkby5qcwogIHZhciBnbm9zaXNDaGlhZG8gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMjAwLAogICAgbmFtZTogIkdub3NpcyBDaGlhZG8iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiR25vc2lzIiwKICAgICAgc3ltYm9sOiAieERBSSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmNoaWFkb2NoYWluLm5ldCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuY2hpYWRvY2hhaW4ubmV0L3dzcyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5jaGlhZG9jaGFpbi5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5jaGlhZG9jaGFpbi5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NjczMTMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ3Jhdml0eS5qcwogIHZhciBncmF2aXR5ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjI1LAogICAgbmFtZTogIkdyYXZpdHkgQWxwaGEgTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRyIsIHN5bWJvbDogIkciLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ3Jhdml0eS54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJHcmF2aXR5IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmdyYXZpdHkueHl6IiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmdyYXZpdHkueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4ZjhhYzRCRUIyRjc1ZDJjRkZiNTg4YzYzMjUxMzQ3ZmRENjI5QjkyYyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNjg1MQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hhbS5qcwogIHZhciBoYW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDUxMTIsCiAgICBuYW1lOiAiSGFtIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkhhbSIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmhhbS5mdW4iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLmhhbS5mdW4iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIYW0gQ2hhaW4gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuaGFtLmZ1biIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5oYW0uZnVuL2FwaS92MiIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9oYXJkaGF0LmpzCiAgdmFyIGhhcmRoYXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxMzM3LAogICAgbmFtZTogIkhhcmRoYXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cDovLzEyNy4wLjAuMTo4NTQ1Il0gfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9oYXJtb255T25lLmpzCiAgdmFyIGhhcm1vbnlPbmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE2NjY2ZTUsCiAgICBuYW1lOiAiSGFybW9ueSBPbmUiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkhhcm1vbnkiLAogICAgICBzeW1ib2w6ICJPTkUiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5hbmtyLmNvbS9oYXJtb255Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiSGFybW9ueSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5oYXJtb255Lm9uZSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDE4NTc1MwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hhcXFNYWlubmV0LmpzCiAgdmFyIGhhcXFNYWlubmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMTIzNSwKICAgIG5hbWU6ICJIQVFRIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSXNsYW1pYyBDb2luIiwKICAgICAgc3ltYm9sOiAiSVNMTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmV0aC5oYXFxLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIQVFRIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmhhcXEubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5oYXFxLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hhcXFUZXN0ZWRnZTIuanMKICB2YXIgaGFxcVRlc3RlZGdlMiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTQyMTEsCiAgICBuYW1lOiAiSEFRUSBUZXN0ZWRnZSAyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIklzbGFtaWMgQ29pbiIsCiAgICAgIHN5bWJvbDogIklTTE1UIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZXRoLnRlc3RlZGdlMi5oYXFxLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIQVFRIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RlZGdlMi5oYXFxLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdGVkZ2UyLmhhcXEubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvaGVkZXJhLmpzCiAgdmFyIGhlZGVyYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjk1LAogICAgbmFtZTogIkhlZGVyYSBNYWlubmV0IiwKICAgIG5ldHdvcms6ICJoZWRlcmEtbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBzeW1ib2w6ICJIQkFSIiwKICAgICAgbmFtZTogIkhCQVIiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5oYXNoaW8uaW8vYXBpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiSGFzaHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vaGFzaHNjYW4uaW8vbWFpbm5ldCIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hlZGVyYVRlc3RuZXQuanMKICB2YXIgaGVkZXJhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjk2LAogICAgbmFtZTogIkhlZGVyYSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJoZWRlcmEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBzeW1ib2w6ICJIQkFSIiwKICAgICAgbmFtZTogIkhCQVIiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5oYXNoaW8uaW8vYXBpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiSGFzaHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vaGFzaHNjYW4uaW8vdGVzdG5ldCIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvaGVkZXJhUHJldmlld25ldC5qcwogIHZhciBoZWRlcmFQcmV2aWV3bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyOTcsCiAgICBuYW1lOiAiSGVkZXJhIFByZXZpZXduZXQiLAogICAgbmV0d29yazogImhlZGVyYS1wcmV2aWV3bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIHN5bWJvbDogIkhCQVIiLAogICAgICBuYW1lOiAiSEJBUiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9wcmV2aWV3bmV0Lmhhc2hpby5pby9hcGkiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIYXNoc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9oYXNoc2Nhbi5pby9wcmV2aWV3bmV0IgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ob2xlc2t5LmpzCiAgdmFyIGhvbGVza3kgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE3ZTMsCiAgICBuYW1lOiAiSG9sZXNreSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiSG9sZXNreSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aGVyZXVtLWhvbGVza3ktcnBjLnB1YmxpY25vZGUuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2hvbGVza3kuZXRoZXJzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc3CiAgICAgIH0sCiAgICAgIGVuc1JlZ2lzdHJ5OiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA4MDE2MTMKICAgICAgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhhNkFDOTM1RDQ5NzFFM0NEMTMzYjk1MGFFMDUzYkVDRDE2ZkU3ZjNiIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDk3MzQ4NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pbW11dGFibGVaa0V2bS5qcwogIHZhciBpbW11dGFibGVaa0V2bSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTMzNzEsCiAgICBuYW1lOiAiSW1tdXRhYmxlIHprRVZNIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkltbXV0YWJsZSBDb2luIiwKICAgICAgc3ltYm9sOiAiSU1YIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuaW1tdXRhYmxlLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkltbXV0YWJsZSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5pbW11dGFibGUuY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmltbXV0YWJsZS5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHgyMzZiZEE0NTg5ZTQ0ZTY4NTBmNWFDNmE3NEJmQ2EzOThhODZjNmMwIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQzMzU5NzIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pbW11dGFibGVaa0V2bVRlc3RuZXQuanMKICB2YXIgaW1tdXRhYmxlWmtFdm1UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMzQ3MywKICAgIG5hbWU6ICJJbW11dGFibGUgemtFVk0gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJJbW11dGFibGUgQ29pbiIsCiAgICAgIHN5bWJvbDogIklNWCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQuaW1tdXRhYmxlLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkltbXV0YWJsZSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQuaW1tdXRhYmxlLmNvbS8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweDJDQzc4N0VkMzY0NjAwQjAyMjIzNjFDNDE4ODMwOEZhOEU2OGJBNjAiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTk3NzM5MQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pbkVWTS5qcwogIHZhciBpbkVWTSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjUyNSwKICAgIG5hbWU6ICJpbkVWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkluamVjdGl2ZSIsCiAgICAgIHN5bWJvbDogIklOSiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL21haW5uZXQucnBjLmluZXZtLmNvbS9odHRwIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiaW5FVk0gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vaW5ldm0uY2FsZGVyYWV4cGxvcmVyLnh5eiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9pbmV2bS5jYWxkZXJhZXhwbG9yZXIueHl6L2FwaS92MiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTg2MDYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pb3RhLmpzCiAgdmFyIGlvdGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDg4MjIsCiAgICBuYW1lOiAiSU9UQSBFVk0iLAogICAgbmV0d29yazogImlvdGFldm0iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSU9UQSIsCiAgICAgIHN5bWJvbDogIklPVEEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2pzb24tcnBjLmV2bS5pb3RhbGVkZ2VyLm5ldCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly93cy5qc29uLXJwYy5ldm0uaW90YWxlZGdlci5uZXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0uaW90YS5vcmciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLmlvdGEub3JnL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pb3RhVGVzdG5ldC5qcwogIHZhciBpb3RhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTA3NSwKICAgIG5hbWU6ICJJT1RBIEVWTSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJpb3RhZXZtLXRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSU9UQSIsCiAgICAgIHN5bWJvbDogIklPVEEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2pzb24tcnBjLmV2bS50ZXN0bmV0LmlvdGFsZWRnZXIubmV0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLmpzb24tcnBjLmV2bS50ZXN0bmV0LmlvdGFsZWRnZXIubmV0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLnRlc3RuZXQuaW90YWxlZGdlci5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLnRlc3RuZXQuaW90YWxlZGdlci5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rYWthcm90U2Vwb2xpYS5qcwogIHZhciBrYWthcm90U2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTgwMjIwMzc2NCwKICAgIG5hbWU6ICJLYWthcm90IFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEtcnBjLmtha2Fyb3Qub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiS2FrYXJvdCBTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEua2FrYXJvdHNjYW4ub3JnIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rYXZhLmpzCiAgdmFyIGthdmEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIyMjIsCiAgICBuYW1lOiAiS2F2YSBFVk0iLAogICAgbmV0d29yazogImthdmEtbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiS2F2YSIsCiAgICAgIHN5bWJvbDogIktBVkEiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2V2bS5rYXZhLmlvIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiS2F2YSBFVk0gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8va2F2YXNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2thdmFzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzY2MTE2NQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva2F2YVRlc3RuZXQuanMKICB2YXIga2F2YVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIyMjEsCiAgICBuYW1lOiAiS2F2YSBFVk0gVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAia2F2YS10ZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJLYXZhIiwKICAgICAgc3ltYm9sOiAiS0FWQSIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZXZtLnRlc3RuZXQua2F2YS5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkthdmEgRVZNIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5rYXZhc2Nhbi5jb20vIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQua2F2YXNjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4RGYxRDcyNEE3MTY2MjYxZUVCMDE1NDE4ZmU4Yzc2NzlCQkVhN2ZkNiIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3MjQyMTc5CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2tjYy5qcwogIHZhciBrY2MgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMyMSwKICAgIG5hbWU6ICJLQ0MgTWFpbm5ldCIsCiAgICBuZXR3b3JrOiAiS0NDIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiS0NTIiwKICAgICAgc3ltYm9sOiAiS0NTIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9rY2MtcnBjLmNvbSJdCiAgICAgIH0sCiAgICAgIHB1YmxpYzogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9rY2MtcnBjLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7IG5hbWU6ICJLQ0MgRXhwbG9yZXIiLCB1cmw6ICJodHRwczovL2V4cGxvcmVyLmtjYy5pbyIgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTc2MDQzMAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva2xheXRuLmpzCiAgdmFyIGtsYXl0biA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogODIxNywKICAgIG5hbWU6ICJLbGF5dG4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiS2xheXRuIiwKICAgICAgc3ltYm9sOiAiS0xBWSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3B1YmxpYy1lbi1jeXByZXNzLmtsYXl0bi5uZXQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJLbGF5dG5TY29wZSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY29wZS5rbGF5dG4uY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDk2MDAyNDE1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva2xheXRuQmFvYmFiLmpzCiAgdmFyIGtsYXl0bkJhb2JhYiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAwMSwKICAgIG5hbWU6ICJLbGF5dG4gQmFvYmFiIFRlc3RuZXQiLAogICAgbmV0d29yazogImtsYXl0bi1iYW9iYWIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQmFvYmFiIEtsYXl0biIsCiAgICAgIHN5bWJvbDogIktMQVkiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9wdWJsaWMtZW4tYmFvYmFiLmtsYXl0bi5uZXQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJLbGF5dG5TY29wZSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9iYW9iYWIua2xheXRuc2NvcGUuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEyMzM5MDU5MwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rb2kuanMKICB2YXIga29pID0gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDcwMSwKICAgIG5hbWU6ICJLb2kgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJLb2kgTmV0d29yayBOYXRpdmUgVG9rZW4iLAogICAgICBzeW1ib2w6ICJLUklORyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8va29pLXJwYy5kYXJ3aW5pYS5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2tvaS1ycGMuZGFyd2luaWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7IG5hbWU6ICJCbG9ja3Njb3V0IiwgdXJsOiAiaHR0cHM6Ly9rb2ktc2Nhbi5kYXJ3aW5pYS5uZXR3b3JrIiB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE4MDAwMQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rcm9tYS5qcwogIHZhciBrcm9tYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjU1LAogICAgbmFtZTogIktyb21hIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFVEgiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcGkua3JvbWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIktyb21hIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2Jsb2Nrc2NvdXQua3JvbWEubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0Lmtyb21hLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva3JvbWFTZXBvbGlhLmpzCiAgdmFyIGtyb21hU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjM1OCwKICAgIG5hbWU6ICJLcm9tYSBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZXBvbGlhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vYXBpLnNlcG9saWEua3JvbWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIktyb21hIFNlcG9saWEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5zZXBvbGlhLmtyb21hLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5zZXBvbGlhLmtyb21hLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9sM3guanMKICB2YXIgbDN4ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjMyNCwKICAgIG5hbWU6ICJMM1ggUHJvdG9jb2wiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLW1haW5uZXQubDN4LmNvbSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMtbWFpbm5ldC5sM3guY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTDNYIE1haW5uZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIubDN4LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5sM3guY29tL2FwaS92MiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2wzeFRlc3RuZXQuanMKICB2YXIgbDN4VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTIzMjUsCiAgICBuYW1lOiAiTDNYIFByb3RvY29sIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQubDN4LmNvbSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMtdGVzdG5ldC5sM3guY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTDNYIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXItdGVzdG5ldC5sM3guY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLXRlc3RuZXQubDN4LmNvbS9hcGkvdjIiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2xpZ2h0bGlua1BlZ2FzdXMuanMKICB2YXIgbGlnaHRsaW5rUGVnYXN1cyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTg5MSwKICAgIG5hbWU6ICJMaWdodExpbmsgUGVnYXN1cyBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJsaWdodGxpbmstcGVnYXN1cyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcmVwbGljYXRvci5wZWdhc3VzLmxpZ2h0bGluay5pby9ycGMvdjEiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJMaWdodExpbmsgUGVnYXN1cyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wZWdhc3VzLmxpZ2h0bGluay5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGlnaHRsaW5rUGhvZW5peC5qcwogIHZhciBsaWdodGxpbmtQaG9lbml4ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxODkwLAogICAgbmFtZTogIkxpZ2h0TGluayBQaG9lbml4IE1haW5uZXQiLAogICAgbmV0d29yazogImxpZ2h0bGluay1waG9lbml4IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9yZXBsaWNhdG9yLnBob2VuaXgubGlnaHRsaW5rLmlvL3JwYy92MSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkxpZ2h0TGluayBQaG9lbml4IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Bob2VuaXgubGlnaHRsaW5rLmlvIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGluZWEuanMKICB2YXIgbGluZWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU5MTQ0LAogICAgbmFtZTogIkxpbmVhIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkxpbmVhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmxpbmVhLmJ1aWxkIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5saW5lYS5idWlsZCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV0aGVyc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9saW5lYXNjYW4uYnVpbGQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmxpbmVhc2Nhbi5idWlsZC9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2xpbmVhR29lcmxpLmpzCiAgdmFyIGxpbmVhR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTE0MCwKICAgIG5hbWU6ICJMaW5lYSBHb2VybGkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTGluZWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ29lcmxpLmxpbmVhLmJ1aWxkIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5nb2VybGkubGluZWEuYnVpbGQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLmxpbmVhc2Nhbi5idWlsZCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktZ29lcmxpLmxpbmVhc2Nhbi5idWlsZC9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDk4NjIzCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2xpbmVhU2Vwb2xpYS5qcwogIHZhciBsaW5lYVNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU5MTQxLAogICAgbmFtZTogIkxpbmVhIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTGluZWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc2Vwb2xpYS5saW5lYS5idWlsZCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuc2Vwb2xpYS5saW5lYS5idWlsZCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV0aGVyc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZXBvbGlhLmxpbmVhc2Nhbi5idWlsZCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5saW5lYXNjYW4uYnVpbGQvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDIyNzQyNwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9saW5lYVRlc3RuZXQuanMKICB2YXIgbGluZWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTE0MCwKICAgIG5hbWU6ICJMaW5lYSBHb2VybGkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTGluZWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ29lcmxpLmxpbmVhLmJ1aWxkIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5nb2VybGkubGluZWEuYnVpbGQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLmxpbmVhc2Nhbi5idWlsZCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGkubGluZWFzY2FuLmJ1aWxkL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0OTg2MjMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGlzay5qcwogIHZhciBsaXNrID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAxMTM1LAogICAgbmFtZTogIkxpc2siLAogICAgbmV0d29yazogImxpc2siLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5hcGkubGlzay5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL2Jsb2Nrc2NvdXQubGlzay5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5saXNrLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweEE5ZDcxRTFkZDdjYTI2RjI2ZTY1NkU2NmQ2QUE4MWVkN2Y3NDViZjAiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGlza1NlcG9saWEuanMKICB2YXIgc291cmNlSWQxNiA9IDExMTU1MTExOwogIHZhciBsaXNrU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogNDIwMiwKICAgIG5ldHdvcms6ICJsaXNrLXNlcG9saWEiLAogICAgbmFtZTogIkxpc2sgU2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2Vwb2xpYSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zZXBvbGlhLWFwaS5saXNrLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS1ibG9ja3Njb3V0Lmxpc2suY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NlcG9saWEtYmxvY2tzY291dC5saXNrLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQxNl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEEwRTM1RjU2QzMxOERFMWJENUQ5Y2E2QTk0RmU3ZTM3QzU2NjMzNDgiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTZdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhlM2Q5MEYyMTQ5MDY4NkVjN2VGMzdCRTc4OEUwMmRmQzEyNzg3MjY0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDE2XTogewogICAgICAgICAgYWRkcmVzczogIjB4MUZiMzBlNDQ2ZUE3OTFjZDFmMDExNjc1RTVGM2Y1MzExYjcwZmFGNSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTYKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbG9jYWxob3N0LmpzCiAgdmFyIGxvY2FsaG9zdCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTMzNywKICAgIG5hbWU6ICJMb2NhbGhvc3QiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cDovLzEyNy4wLjAuMTo4NTQ1Il0gfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9sdWtzby5qcwogIHZhciBsdWtzbyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDIsCiAgICBuZXR3b3JrOiAibHVrc28iLAogICAgbmFtZTogIkxVS1NPIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJMVUtTTyIsCiAgICAgIHN5bWJvbDogIkxZWCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMubWFpbm5ldC5sdWtzby5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLXJwYy5tYWlubmV0Lmx1a3NvLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJMVUtTTyBNYWlubmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmV4ZWN1dGlvbi5tYWlubmV0Lmx1a3NvLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmV4cGxvcmVyLmV4ZWN1dGlvbi5tYWlubmV0Lmx1a3NvLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ2ODE4MwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2x1a3NvVGVzdG5ldC5qcwogIHZhciBsdWtzb1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyMDEsCiAgICBuYW1lOiAiTFVLU08gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJMVUtTTyBUZXN0bmV0IiwKICAgICAgc3ltYm9sOiAiTFlYdCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQubHVrc28ubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly93cy1ycGMudGVzdG5ldC5sdWtzby5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTFVLU08gVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5leGVjdXRpb24udGVzdG5ldC5sdWtzby5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5leHBsb3Jlci5leGVjdXRpb24udGVzdG5ldC5sdWtzby5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA2MDUzNDgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbHljYW4uanMKICB2YXIgbHljYW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDcyMSwKICAgIG5hbWU6ICJMeWNhbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJMeWNhbiIsCiAgICAgIHN5bWJvbDogIkxZQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbCiAgICAgICAgICAiaHR0cHM6Ly9ycGMubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgImh0dHBzOi8vdXMtZWFzdC5seWNhbmNoYWluLmNvbSIsCiAgICAgICAgICAiaHR0cHM6Ly91cy13ZXN0Lmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJodHRwczovL2V1LW5vcnRoLmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJodHRwczovL2V1LXdlc3QubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgImh0dHBzOi8vYXNpYS1zb3V0aGVhc3QubHljYW5jaGFpbi5jb20iCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsKICAgICAgICAgICJ3c3M6Ly9ycGMubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgIndzczovL3VzLWVhc3QubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgIndzczovL3VzLXdlc3QubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgIndzczovL2V1LW5vcnRoLmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJ3c3M6Ly9ldS13ZXN0Lmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJ3c3M6Ly9hc2lhLXNvdXRoZWFzdC5seWNhbmNoYWluLmNvbSIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkx5Y2FuIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmx5Y2FuY2hhaW4uY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2x5cmEuanMKICB2YXIgbHlyYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogOTU3LAogICAgbmFtZTogIkx5cmEgQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmx5cmEuZmluYW5jZSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkx5cmEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIubHlyYS5maW5hbmNlIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmx5cmEuZmluYW5jZS9hcGkvdjIiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTkzNTE5OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21haW5uZXQuanMKICB2YXIgbWFpbm5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMSwKICAgIG5hbWU6ICJFdGhlcmV1bSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9jbG91ZGZsYXJlLWV0aC5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZXRoZXJzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5ldGhlcnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIGVuc1JlZ2lzdHJ5OiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIKICAgICAgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjZTAxZjhlZWU3RTQ3OUM5MjhGODkxOWFiRDUzRTU1M2EzNkNlRjY3IiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MjU4MjEzCiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE0MzUzNjAxCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWFuZGFsYS5qcwogIHZhciBtYW5kYWxhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTUsCiAgICBuYW1lOiAiTWFuZGFsYSBUQzkiLAogICAgbmV0d29yazogIm1hbmRhbGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIk1hbmRhbGEiLAogICAgICBzeW1ib2w6ICJtQUNBIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZXRoLXJwYy10YzkuYWNhLXN0YWdpbmcubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ldGgtcnBjLXRjOS5hY2Etc3RhZ2luZy5uZXR3b3JrIl0KICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldGgtcnBjLXRjOS5hY2Etc3RhZ2luZy5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2V0aC1ycGMtdGM5LmFjYS1zdGFnaW5nLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNYW5kYWxhIEJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5tYW5kYWxhLmFjYS1zdGFnaW5nLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5tYW5kYWxhLmFjYS1zdGFnaW5nLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tYW50YS5qcwogIHZhciBtYW50YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY5LAogICAgbmFtZTogIk1hbnRhIFBhY2lmaWMgTWFpbm5ldCIsCiAgICBuZXR3b3JrOiAibWFudGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRVRIIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcGFjaWZpYy1ycGMubWFudGEubmV0d29yay9odHRwIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFudGEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGFjaWZpYy1leHBsb3Jlci5tYW50YS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3BhY2lmaWMtZXhwbG9yZXIubWFudGEubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzMyODkwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWFudGFTZXBvbGlhVGVzdG5ldC5qcwogIHZhciBtYW50YVNlcG9saWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNDQxMDA2LAogICAgbmFtZTogIk1hbnRhIFBhY2lmaWMgU2Vwb2xpYSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJtYW50YS1zZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUSCIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcGFjaWZpYy1ycGMuc2Vwb2xpYS10ZXN0bmV0Lm1hbnRhLm5ldHdvcmsvaHR0cCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1hbnRhIFNlcG9saWEgVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wYWNpZmljLWV4cGxvcmVyLnNlcG9saWEtdGVzdG5ldC5tYW50YS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3BhY2lmaWMtZXhwbG9yZXIuc2Vwb2xpYS10ZXN0bmV0Lm1hbnRhLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTU0OTE4ZjdCNTI1QzhkZjg5NDY2ODg0NjUwNjc2NzQxMmI1M0UzIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ3OTU4NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tYW50YVRlc3RuZXQuanMKICB2YXIgbWFudGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNDQxMDA1LAogICAgbmFtZTogIk1hbnRhIFBhY2lmaWMgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAibWFudGEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFVEgiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9tYW50YS10ZXN0bmV0LmNhbGRlcmFjaGFpbi54eXovaHR0cCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1hbnRhIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGFjaWZpYy1leHBsb3Jlci50ZXN0bmV0Lm1hbnRhLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vcGFjaWZpYy1leHBsb3Jlci50ZXN0bmV0Lm1hbnRhLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHgyMTFCMTY0M2I5NUZlNzZmMTFlRDg4ODBFRTgxMEFCRDlBNGNmNTZDIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQxOTkxNQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tYW50bGUuanMKICB2YXIgbWFudGxlID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1ZTMsCiAgICBuYW1lOiAiTWFudGxlIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1OVCIsCiAgICAgIHN5bWJvbDogIk1OVCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5tYW50bGUueHl6Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFudGxlIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL21hbnRsZXNjYW4ueHl6LyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkubWFudGxlc2Nhbi54eXovYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwNDcxNwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21hbnRsZVNlcG9saWFUZXN0bmV0LmpzCiAgdmFyIG1hbnRsZVNlcG9saWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1MDAzLAogICAgbmFtZTogIk1hbnRsZSBTZXBvbGlhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTU5UIiwKICAgICAgc3ltYm9sOiAiTU5UIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcnBjLnNlcG9saWEubWFudGxlLnh5eiJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1hbnRsZSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnNlcG9saWEubWFudGxlLnh5ei8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuc2Vwb2xpYS5tYW50bGUueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0NTg0MDEyCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21hbnRsZVRlc3RuZXQuanMKICB2YXIgbWFudGxlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTAwMSwKICAgIG5hbWU6ICJNYW50bGUgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJNTlQiLAogICAgICBzeW1ib2w6ICJNTlQiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVzdG5ldC5tYW50bGUueHl6Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFudGxlIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5tYW50bGUueHl6IiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQubWFudGxlLnh5ei9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTYxMzMzCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21lcmxpbi5qcwogIHZhciBtZXJsaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyMDAsCiAgICBuYW1lOiAiTWVybGluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCVEMiLAogICAgICBzeW1ib2w6ICJCVEMiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5tZXJsaW5jaGFpbi5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5tZXJsaW5jaGFpbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLm1lcmxpbmNoYWluLmlvL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tZXRhY2hhaW4uanMKICB2YXIgbWV0YWNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1NzEsCiAgICBuYW1lOiAiTWV0YUNoYWluIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk1ldGF0aW1lIENvaW4iLCBzeW1ib2w6ICJNVEMiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMubWV0YXRpbWUuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWV0YUV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLm1ldGF0aW1lLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWV0YWNoYWluSXN0YW5idWwuanMKICB2YXIgbWV0YWNoYWluSXN0YW5idWwgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0NTMsCiAgICBuYW1lOiAiTWV0YUNoYWluIElzdGFuYnVsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJNZXRhdGltZSBDb2luIiwgc3ltYm9sOiAiTVRDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vaXN0YW5idWwtcnBjLm1ldGFjaGFpbi5kZXYiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNZXRhRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vaXN0YW5idWwtZXhwbG9yZXIubWV0YWNoYWluLmRldiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGFsTDIuanMKICB2YXIgc291cmNlSWQxNyA9IDE7CiAgdmFyIG1ldGFsTDIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDE3NTAsCiAgICBuYW1lOiAiTWV0YWwgTDIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5tZXRhbGwyLmNvbSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMubWV0YWxsMi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5tZXRhbGwyLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5tZXRhbGwyLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQxN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDNCMUY3YURhMEZjYzI2QjEzNTE1YWY3NTJEZDA3ZkIxQ0FjMTE0MjYiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDE3XTogewogICAgICAgICAgYWRkcmVzczogIjB4M0YzN2FCZEUyQzZiNUIyZWQ2RjgwNDU3ODdEZjFFRDFFMzc1Mzk1NiIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQxN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDZkMGY2NUQ1OWI1NUIwRkVDNWQyZDE1MzY1MTU0RGNBREMxNDBCRjMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTcKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWV0ZXIuanMKICB2YXIgbWV0ZXIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgyLAogICAgbmFtZTogIk1ldGVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1UUiIsCiAgICAgIHN5bWJvbDogIk1UUiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5tZXRlci5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1ldGVyU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLm1ldGVyLmlvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGVyVGVzdG5ldC5qcwogIHZhciBtZXRlclRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgzLAogICAgbmFtZTogIk1ldGVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTVRSIiwKICAgICAgc3ltYm9sOiAiTVRSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcnBjdGVzdC5tZXRlci5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1ldGVyVGVzdG5ldFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi13YXJyaW5nc3Rha2VzLm1ldGVyLmlvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGlzLmpzCiAgdmFyIG1ldGlzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDg4LAogICAgbmFtZTogIk1ldGlzIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1ldGlzIiwKICAgICAgc3ltYm9sOiAiTUVUSVMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hbmRyb21lZGEubWV0aXMuaW8vP293bmVyPTEwODgiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNZXRpcyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5tZXRpcy5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkucm91dGVzY2FuLmlvL3YyL25ldHdvcmsvbWFpbm5ldC9ldm0vNDMxMTQvZXRoZXJzY2FuL2FwaSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJBbmRyb21lZGEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYW5kcm9tZWRhLWV4cGxvcmVyLm1ldGlzLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FuZHJvbWVkYS1leHBsb3Jlci5tZXRpcy5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjMzODU1MgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGlzR29lcmxpLmpzCiAgdmFyIG1ldGlzR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTksCiAgICBuYW1lOiAiTWV0aXMgR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1ldGlzIEdvZXJsaSIsCiAgICAgIHN5bWJvbDogIk1FVElTIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZ29lcmxpLmdhdGV3YXkubWV0aXNkZXZvcHMubGluayJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1ldGlzIEdvZXJsaSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9nb2VybGkuZXhwbG9yZXIubWV0aXNkZXZvcHMubGluayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGkuZXhwbG9yZXIubWV0aXNkZXZvcHMubGluay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTAwNjIwNwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldi5qcwogIHZhciBtZXYgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDc1MTgsCiAgICBuYW1lOiAiTUVWZXJzZSBDaGFpbiBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1FVmVyc2UiLAogICAgICBzeW1ib2w6ICJNRVYiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5tZXZlcnNlbWFpbm5ldC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3d3dy5tZXZlcnNlc2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA4Njg4MTM0MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldlRlc3RuZXQuanMKICB2YXIgbWV2VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDc1OSwKICAgIG5hbWU6ICJNRVZlcnNlIENoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTUVWZXJzZSIsCiAgICAgIHN5bWJvbDogIk1FViIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLm1ldmVyc2V0ZXN0bmV0LmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5tZXZlcnNlc2Nhbi5pby8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjQzNzExMTUKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWludFNlcG9saWFUZXN0bmV0LmpzCiAgdmFyIG1pbnRTZXBvbGlhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY4NiwKICAgIG5hbWU6ICJNaW50IFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LXJwYy5taW50Y2hhaW4uaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNaW50Y2hhaW4gVGVzdG5ldCBleHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLm1pbnRjaGFpbi5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9kZS5qcwogIHZhciBzb3VyY2VJZDE4ID0gMTsKICB2YXIgbW9kZSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzQ0NDMsCiAgICBuYW1lOiAiTW9kZSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQubW9kZS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTW9kZXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vbW9kZXNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjQ2NTg4MgogICAgICB9LAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDE4XTogewogICAgICAgICAgYWRkcmVzczogIjB4NDMxN2JhMTQ2RDQ5MzNEODg5NTE4YTNlNUUxMUZlN2E1MzE5OWIwNCIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDE4XTogewogICAgICAgICAgYWRkcmVzczogIjB4OEIzNGIxNGM3YzcxMjM0NTlDZjMwNzZiOENiOTI5QkUwOTdkMEMwNyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQxOF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDczNWFEQmJFNzIyMjZCRDUyZTgxOEU3MTgxOTUzZjQyRTNiMEZGMjEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTgKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9kZVRlc3RuZXQuanMKICB2YXIgc291cmNlSWQxOSA9IDExMTU1MTExOwogIHZhciBtb2RlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogOTE5LAogICAgbmFtZTogIk1vZGUgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLm1vZGUubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5leHBsb3Jlci5tb2RlLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2Vwb2xpYS5leHBsb3Jlci5tb2RlLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMTldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgyNjM0QkQ2NWJhMjdBQjYzODExYzc0QTYzMTE4QUNiMzEyNzAxQmZhIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzc3ODM5MwogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgzMjBlMTU4MGVmZkYzN0UwMDhGMUM5MjcwMGQxZUJhNDdjMUIyM2ZEIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzc3ODM5NQogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDE5XTogewogICAgICAgICAgYWRkcmVzczogIjB4YkM1QzY3OTg3OUIyOTY1Mjk2NzU2Q0Q5NTlDM0M3Mzk3Njk5OTVFMiIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDM3NzgzOTIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhCQWJhODM3MzExM0ZiN2E2OGYxOTVkZUYxODczMmUwMWFGOGVEZkNGIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwMTkwMDcKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBzb3VyY2VJZDogc291cmNlSWQxOQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tb29uYmFzZUFscGhhLmpzCiAgdmFyIG1vb25iYXNlQWxwaGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODcsCiAgICBuYW1lOiAiTW9vbmJhc2UgQWxwaGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiREVWIiwKICAgICAgc3ltYm9sOiAiREVWIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuYXBpLm1vb25iYXNlLm1vb25iZWFtLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3NzLmFwaS5tb29uYmFzZS5tb29uYmVhbS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTW9vbnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vbW9vbmJhc2UubW9vbnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vbW9vbmJhc2UubW9vbnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE4NTA2ODYKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9vbmJlYW0uanMKICB2YXIgbW9vbmJlYW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODQsCiAgICBuYW1lOiAiTW9vbmJlYW0iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiR0xNUiIsCiAgICAgIHN5bWJvbDogIkdMTVIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21vb25iZWFtLnB1YmxpYy5ibGFzdGFwaS5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9tb29uYmVhbS5wdWJsaWMuYmxhc3RhcGkuaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNb29uc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9tb29uc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktbW9vbmJlYW0ubW9vbnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDYwOTAwMgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9vbmJlYW1EZXYuanMKICB2YXIgbW9vbmJlYW1EZXYgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODEsCiAgICBuYW1lOiAiTW9vbmJlYW0gRGV2ZWxvcG1lbnQgTm9kZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJERVYiLAogICAgICBzeW1ib2w6ICJERVYiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwOi8vMTI3LjAuMC4xOjk5NDQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vMTI3LjAuMC4xOjk5NDQiXQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21vb25yaXZlci5qcwogIHZhciBtb29ucml2ZXIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODUsCiAgICBuYW1lOiAiTW9vbnJpdmVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1PVlIiLAogICAgICBzeW1ib2w6ICJNT1ZSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tb29ucml2ZXIucHVibGljLmJsYXN0YXBpLmlvIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21vb25yaXZlci5wdWJsaWMuYmxhc3RhcGkuaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNb29uc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9tb29ucml2ZXIubW9vbnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLW1vb25yaXZlci5tb29uc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTU5NzkwNAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9ycGhIb2xlc2t5LmpzCiAgdmFyIG1vcnBoSG9sZXNreSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjgxMCwKICAgIG5hbWU6ICJNb3JwaCBIb2xlc2t5IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1xdWlja25vZGUtaG9sZXNreS5tb3JwaGwyLmlvIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy1xdWlja25vZGUtaG9sZXNreS5tb3JwaGwyLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTW9ycGggSG9sZXNreSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci1ob2xlc2t5Lm1vcnBobDIuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXItYXBpLWhvbGVza3kubW9ycGhsMi5pby9hcGk/IgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tb3JwaFNlcG9saWEuanMKICB2YXIgbW9ycGhTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNzEwLAogICAgbmFtZTogIk1vcnBoIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQubW9ycGhsMi5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1vcnBoIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXItdGVzdG5ldC5tb3JwaGwyLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLWFwaS10ZXN0bmV0Lm1vcnBobDIuaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9uYXV0aWx1cy5qcwogIHZhciBuYXV0aWx1cyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjIyMjIsCiAgICBuYW1lOiAiTmF1dGlsdXMgTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiWkJDIiwgc3ltYm9sOiAiWkJDIiwgZGVjaW1hbHM6IDkgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcGkubmF1dGlsdXMubmF1dGNoYWluLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk5hdXRTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL25hdXRzY2FuLmNvbSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9uZW9uRGV2bmV0LmpzCiAgdmFyIG5lb25EZXZuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI0NTAyMjkyNiwKICAgIG5hbWU6ICJOZW9uIEVWTSBEZXZOZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk5FT04iLCBzeW1ib2w6ICJORU9OIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZGV2bmV0Lm5lb25ldm0ub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTmVvbnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZGV2bmV0Lm5lb25zY2FuLm9yZyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMDUyMDYxMTIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbmVvbk1haW5uZXQuanMKICB2YXIgbmVvbk1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI0NTAyMjkzNCwKICAgIG5ldHdvcms6ICJuZW9uTWFpbm5ldCIsCiAgICBuYW1lOiAiTmVvbiBFVk0gTWFpbk5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTkVPTiIsIHN5bWJvbDogIk5FT04iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9uZW9uLXByb3h5LW1haW5uZXQuc29sYW5hLnAycC5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJOZW9uc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9uZW9uc2Nhbi5vcmciCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjA2NTQ1NTI0CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9uZXhpLmpzCiAgdmFyIG5leGkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyNDIsCiAgICBuYW1lOiAiTmV4aSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTmV4aSIsIHN5bWJvbDogIk5FWEkiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuY2hhaW4ubmV4aS50ZWNobm9sb2d5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTmV4aVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3Lm5leGlzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly93d3cubmV4aXNjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDI3N0E0NkNjNjlBNTdlRTNBNkM4YzE1OGJBODc0ODMyRjcxOEI4RSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNTc3MDE2MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL25leGlsaXguanMKICB2YXIgbmV4aWxpeCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjQwLAogICAgbmFtZTogIk5leGlsaXggU21hcnQgQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTmV4aWxpeCIsCiAgICAgIHN5bWJvbDogIk5FWElMSVgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGN1cmwucG9zLm5leGlsaXguY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTmV4aWxpeFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5uZXhpbGl4LmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4NTgzODFjOGUyQkY5ZDBDMkM0MjU5Y0ExNEJkQTlBZmUwMjgzMTI0NCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3NDQ0OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL29hc3lzLmpzCiAgdmFyIG9hc3lzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNDgsCiAgICBuYW1lOiAiT2FzeXMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk9hc3lzIiwgc3ltYm9sOiAiT0FTIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLm1haW5uZXQub2FzeXMuZ2FtZXMiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJPYXN5c1NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5vYXN5cy5nYW1lcyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLm9hc3lzLmdhbWVzL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9vYXNpc1Rlc3RuZXQuanMKICB2YXIgb2FzaXNUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MDkwLAogICAgbmV0d29yazogIm9hc2lzLXRlc3RuZXQiLAogICAgbmFtZTogIk9hc2lzIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkZhc3R0b2tlbiIsIHN5bWJvbDogIkZUTiIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMxLm9hc2lzLmJhaGFtdXRjaGFpbi5jb20iXSB9LAogICAgICBwdWJsaWM6IHsgaHR0cDogWyJodHRwczovL3JwYzEub2FzaXMuYmFoYW11dGNoYWluLmNvbSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkZ0bnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vb2FzaXMuZnRuc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vb2FzaXMuZnRuc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9va2MuanMKICB2YXIgb2tjID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2NiwKICAgIG5hbWU6ICJPS0MiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiT0tUIiwKICAgICAgc3ltYm9sOiAiT0tUIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZXhjaGFpbnJwYy5va2V4Lm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIm9rbGluayIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cub2tsaW5rLmNvbS9va2MiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTAzNjQ3OTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9vcHRpbWlzbS5qcwogIHZhciBzb3VyY2VJZDIwID0gMTsKICB2YXIgb3B0aW1pc20gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDEwLAogICAgbmFtZTogIk9QIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5vcHRpbWlzbS5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk9wdGltaXNtIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL29wdGltaXN0aWMuZXRoZXJzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1vcHRpbWlzdGljLmV0aGVyc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgZGlzcHV0ZUdhbWVGYWN0b3J5OiB7CiAgICAgICAgW3NvdXJjZUlkMjBdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhlNTk2NUFiNTk2MmVEYzc0NzdDODUyMDI0M0E5NTUxN0NEMjUyZkE5IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQyMF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweGRmZTk3ODY4MjMzZDFhYTIyZTgxNWEyNjY5ODJmMmNmMTc2ODVhMjciCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0Mjg2MjYzCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDIwXTogewogICAgICAgICAgYWRkcmVzczogIjB4YkViNUZjNTc5MTE1MDcxNzY0Yzc0MjNBNGYxMmVEZGU0MWYxMDZFZCIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyMF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDk5QzlmYzQ2ZjkyRThhMWMwZGVDMWIxNzQ3ZDAxMDkwM0U4ODRiRTEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMjAKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvb3B0aW1pc21Hb2VybGkuanMKICB2YXIgc291cmNlSWQyMSA9IDU7CiAgdmFyIG9wdGltaXNtR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiA0MjAsCiAgICBuYW1lOiAiT3B0aW1pc20gR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJHb2VybGkgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9nb2VybGkub3B0aW1pc20uaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLW9wdGltaXNtLmV0aGVyc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGktb3B0aW1pc20uZXRoZXJzY2FuLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICAuLi5jaGFpbkNvbmZpZzIuY29udHJhY3RzLAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDIxXTogewogICAgICAgICAgYWRkcmVzczogIjB4RTZEZmJhMDk1MzYxNkJhY2FiMGM5QThlY2IzYTlCQmE3N0ZDMTVjMCIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NDYxCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDIxXTogewogICAgICAgICAgYWRkcmVzczogIjB4NWI0N0UxQTA4RWE2ZDk4NUQ2NjQ5MzAwNTg0ZTY3MjJFYzRCMTM4MyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyMV06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDYzNkFmMTZiZjJmNjgyZEQzMTA5ZTYwMTAyYjhFMUEwODlGZWRBYTgiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDIxCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL29wdGltaXNtU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDIyID0gMTExNTUxMTE7CiAgdmFyIG9wdGltaXNtU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogMTExNTU0MjAsCiAgICBuYW1lOiAiT1AgU2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2Vwb2xpYSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEub3B0aW1pc20uaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL29wdGltaXNtLXNlcG9saWEuYmxvY2tzY291dC5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vb3B0aW1pc20tc2Vwb2xpYS5ibG9ja3Njb3V0LmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgZGlzcHV0ZUdhbWVGYWN0b3J5OiB7CiAgICAgICAgW3NvdXJjZUlkMjJdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgwNUY5NjEzYURCMzAwMjZGRmQ2MzRmMzhlNUM0ZEZkMzBhMTk3RmExIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQyMl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDkwRTljNGY4YTk5NGEyNTBGNmFFZmQ2MUNBRmI0RjJlODk1RDQ1OEYiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNjIwMjA0CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDIyXTogewogICAgICAgICAgYWRkcmVzczogIjB4MTZGYzUwNThGMjU2NDgxOTQ0NzE5MzlkZjc1Q0YyN0EyZmRDNDhCQyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyMl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEZCYjA2MjFFMEIyM2I1NDc4QjYzMEJENTVhNWYyMWY2NzczMEIwRjEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDIyCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL29wQk5CLmpzCiAgdmFyIG9wQk5CID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDQsCiAgICBuYW1lOiAib3BCTkIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkJOQiIsCiAgICAgIHN5bWJvbDogIkJOQiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vb3BibmItbWFpbm5ldC1ycGMuYm5iY2hhaW4ub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAib3BibmJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL21haW5uZXQub3BibmJzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA1MTI4ODEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9vcEJOQlRlc3RuZXQuanMKICB2YXIgb3BCTkJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1NjExLAogICAgbmFtZTogIm9wQk5CIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAidEJOQiIsCiAgICAgIHN5bWJvbDogInRCTkIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9vcGJuYi10ZXN0bmV0LXJwYy5ibmJjaGFpbi5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJvcGJuYnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5vcGJuYnNjYW4uY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDM3MDUxMDgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvb29ydG1haW5uZXREZXYuanMKICB2YXIgb29ydE1haW5uZXREZXYgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDk3MDAsCiAgICBuYW1lOiAiT09SVCBNYWlubmV0RGV2IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk9PUlQiLAogICAgICBzeW1ib2w6ICJPT1JUIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZGV2LXJwYy5vb3J0ZWNoLmNvbSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBvb3J0OiB7CiAgICAgICAgbmFtZTogIk9PUlQgTWFpbm5ldERldiBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9kZXYtc2Nhbi5vb3J0ZWNoLmNvbSIKICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJPT1JUIE1haW5uZXREZXYgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZGV2LXNjYW4ub29ydGVjaC5jb20iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvb3RpbURldm5ldC5qcwogIHZhciBvdGltRGV2bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MTE0NDExNCwKICAgIG5hbWU6ICJPdGltIERldm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFVEgiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwOi8vZGV2bmV0Lm90aW0ueHl6Il0KICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBiYXRjaEludm9rZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHg1RmJEQjIzMTU2NzhhZmVjYjM2N2YwMzJkOTNGNjQyZjY0MTgwYWEzIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BhbG0uanMKICB2YXIgcGFsbSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTEyOTcxMDgxMDksCiAgICBuYW1lOiAiUGFsbSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJQQUxNIiwKICAgICAgc3ltYm9sOiAiUEFMTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcGFsbS1tYWlubmV0LnB1YmxpYy5ibGFzdGFwaS5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9wYWxtLW1haW5uZXQucHVibGljLmJsYXN0YXBpLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ2hhaW5sZW5zIiwKICAgICAgICB1cmw6ICJodHRwczovL3BhbG0uY2hhaW5sZW5zLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNTQyOTI0OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BhbG1UZXN0bmV0LmpzCiAgdmFyIHBhbG1UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMTI5NzEwODA5OSwKICAgIG5hbWU6ICJQYWxtIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiUEFMTSIsCiAgICAgIHN5bWJvbDogIlBBTE0iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3BhbG0tbWFpbm5ldC5wdWJsaWMuYmxhc3RhcGkuaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcGFsbS1tYWlubmV0LnB1YmxpYy5ibGFzdGFwaS5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNoYWlubGVucyIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wYWxtLmNoYWlubGVucy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTU0MjkyNDgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcGxheWZpQWxiaXJlby5qcwogIHZhciBwbGF5ZmlBbGJpcmVvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnLAogICAgaWQ6IDE2MTIxMjcsCiAgICBuYW1lOiAiUGxheUZpIEFsYmlyZW8gVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiYWxiaXJlbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hbGJpcmVvLXJwYy5wbGF5ZmkuYWkiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vYWxiaXJlby1ycGMtd3MucGxheWZpLmFpL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUGxheUZpIEFsYmlyZW8gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYWxiaXJlby1leHBsb3Jlci5wbGF5ZmkuYWkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweEY5Y2RhNjI0RkJDN2UwNTkzNTVjZTk4YTMxNjkzZDI5OUZBQ2Q5NjMiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3Bnbi5qcwogIHZhciBzb3VyY2VJZDIzID0gMTsKICB2YXIgcGduID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MjQsCiAgICBuZXR3b3JrOiAicGduIiwKICAgIG5hbWU6ICJQR04iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnB1YmxpY2dvb2RzLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQR04gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucHVibGljZ29vZHMubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJQR04gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucHVibGljZ29vZHMubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDIzXTogewogICAgICAgICAgYWRkcmVzczogIjB4OUU2MjA0Rjc1MGNEODY2YjI5OTU5NGUyYUM5ZUE4MjRFMmU1Zjk1YyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMzODAyMDkKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMjNdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhiMjZGZDk4NWM1OTU5YkJCMzgyQkFGZEQwYjg3OUUxNDllNDgxMTZjIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDIzXTogewogICAgICAgICAgYWRkcmVzczogIjB4RDAyMDRCOTUyN0MxYkE3YkQ3NjVGYTVDQ0Q5MzU1ZDM4MzM4MjcyYiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBmb3JtYXR0ZXJzOiBmb3JtYXR0ZXJzMiwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDIzCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BnblRlc3RuZXQuanMKICB2YXIgc291cmNlSWQyNCA9IDExMTU1MTExOwogIHZhciBwZ25UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1ODAwOCwKICAgIG5ldHdvcms6ICJwZ24tdGVzdG5ldCIsCiAgICBuYW1lOiAiUEdOICIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLnB1YmxpY2dvb2RzLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQR04gVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5zZXBvbGlhLnB1YmxpY2dvb2RzLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuc2Vwb2xpYS5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJQR04gVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5zZXBvbGlhLnB1YmxpY2dvb2RzLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuc2Vwb2xpYS5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDI0XTogewogICAgICAgICAgYWRkcmVzczogIjB4RDViQWMzMTUyZmZDMjUzMThGODQ4QjNERDVkQTZDODUxNzFCYUVFZSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDI0XTogewogICAgICAgICAgYWRkcmVzczogIjB4RjA0QmRENTM1M0JiMEVGRjZDQTYwQ2ZjQzc4NTk0Mjc4ZUJmRTE3OSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyNF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEZhRTZhYkNBRjMwRDIzZTIzM0FDN2ZhRjc0N0YyZkMzYTVhNkJmYTMiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAzNzU0OTI1CiAgICAgIH0KICAgIH0sCiAgICBmb3JtYXR0ZXJzOiBmb3JtYXR0ZXJzMiwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDI0LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9waG9lbml4LmpzCiAgdmFyIHBob2VuaXggPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMzgxLAogICAgbmFtZTogIlBob2VuaXggQmxvY2tjaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiUGhvZW5peCIsIHN5bWJvbDogIlBIWCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5waG9lbml4cGxvcmVyLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlBob2VuaXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGhvZW5peHBsb3Jlci5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vcGhvZW5peHBsb3Jlci5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg0OThjRjc1N2E1NzVjRkYyYzJFZDlmNTMyZjU2RWZhNzk3Zjg2NDQyIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDU2MjAxOTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wbGluZ2EuanMKICB2YXIgcGxpbmdhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNDIsCiAgICBuYW1lOiAiUGxpbmdhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJQbGluZ2EiLCBzeW1ib2w6ICJQTElOR0EiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGN1cmwubWFpbm5ldC5wbGdjaGFpbi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQbGdzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3d3dy5wbGdzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDk4OTU3NjE2MGYyZTcwOTI5MDhCQjk0Nzk2MzFiOTAxMDYwYjZlNCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMDQ0ODkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wbHVtZVRlc3RuZXQuanMKICB2YXIgc291cmNlSWQyNSA9IDExMTU1MTExOwogIHZhciBwbHVtZVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE2MTIyMTEzNSwKICAgIG5hbWU6ICJQbHVtZSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJQbHVtZSBTZXBvbGlhIEV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQtcnBjLnBsdW1lbmV0d29yay54eXovaHR0cCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly90ZXN0bmV0LXJwYy5wbHVtZW5ldHdvcmsueHl6L3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLnBsdW1lbmV0d29yay54eXoiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC1leHBsb3Jlci5wbHVtZW5ldHdvcmsueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBzb3VyY2VJZDogc291cmNlSWQyNQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wb2x5Z29uLmpzCiAgdmFyIHBvbHlnb24gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzNywKICAgIG5hbWU6ICJQb2x5Z29uIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJNQVRJQyIsIHN5bWJvbDogIk1BVElDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcG9seWdvbi1ycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vcG9seWdvbnNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI1NzcwMTYwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcG9seWdvbkFtb3kuanMKICB2YXIgcG9seWdvbkFtb3kgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwMDAyLAogICAgbmFtZTogIlBvbHlnb24gQW1veSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTUFUSUMiLCBzeW1ib2w6ICJNQVRJQyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1hbW95LnBvbHlnb24udGVjaG5vbG9neSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlBvbHlnb25TY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2Ftb3kucG9seWdvbnNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1hbW95LnBvbHlnb25zY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzEyNzM4OAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wb2x5Z29uTXVtYmFpLmpzCiAgdmFyIHBvbHlnb25NdW1iYWkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwMDAxLAogICAgbmFtZTogIlBvbHlnb24gTXVtYmFpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJNQVRJQyIsIHN5bWJvbDogIk1BVElDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmFua3IuY29tL3BvbHlnb25fbXVtYmFpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vbXVtYmFpLnBvbHlnb25zY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktdGVzdG5ldC5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI1NzcwMTYwCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BvbHlnb25aa0V2bS5qcwogIHZhciBwb2x5Z29uWmtFdm0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMDEsCiAgICBuYW1lOiAiUG9seWdvbiB6a0VWTSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly96a2V2bS1ycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vemtldm0ucG9seWdvbnNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS16a2V2bS5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDU3NzQ2CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcG9seWdvblprRXZtQ2FyZG9uYS5qcwogIHZhciBwb2x5Z29uWmtFdm1DYXJkb25hID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNDQyLAogICAgbmFtZTogIlBvbHlnb24gemtFVk0gQ2FyZG9uYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuY2FyZG9uYS56a2V2bS1ycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vY2FyZG9uYS16a2V2bS5wb2x5Z29uc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vY2FyZG9uYS16a2V2bS5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTQwOTEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wb2x5Z29uWmtFdm1UZXN0bmV0LmpzCiAgdmFyIHBvbHlnb25aa0V2bVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0NDIsCiAgICBuYW1lOiAiUG9seWdvbiB6a0VWTSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5wdWJsaWMuemtldm0tdGVzdC5uZXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQb2x5Z29uU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LXprZXZtLnBvbHlnb25zY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LXprZXZtLnBvbHlnb25zY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDUyNTY4NgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3B1bHNlY2hhaW4uanMKICB2YXIgcHVsc2VjaGFpbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzY5LAogICAgbmFtZTogIlB1bHNlQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlB1bHNlIiwgc3ltYm9sOiAiUExTIiwgZGVjaW1hbHM6IDE4IH0sCiAgICB0ZXN0bmV0OiBmYWxzZSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMucHVsc2VjaGFpbi5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3MucHVsc2VjaGFpbi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQdWxzZVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5wdWxzZWNoYWluLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkuc2Nhbi5wdWxzZWNoYWluLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgZW5zUmVnaXN0cnk6IHsKICAgICAgICBhZGRyZXNzOiAiMHgwMDAwMDAwMDAwMEMyRTA3NGVDNjlBMGRGYjI5OTdCQTZDN2QyZTFlIgogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDM1MzYwMQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3B1bHNlY2hhaW5WNC5qcwogIHZhciBwdWxzZWNoYWluVjQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDk0MywKICAgIG5hbWU6ICJQdWxzZUNoYWluIFY0IiwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiVjQgUHVsc2UiLCBzeW1ib2w6ICJ2NFBMUyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy52NC50ZXN0bmV0LnB1bHNlY2hhaW4uY29tIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLnY0LnRlc3RuZXQucHVsc2VjaGFpbi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQdWxzZVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi52NC50ZXN0bmV0LnB1bHNlY2hhaW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NjYW4udjQudGVzdG5ldC5wdWxzZWNoYWluLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgZW5zUmVnaXN0cnk6IHsKICAgICAgICBhZGRyZXNzOiAiMHgwMDAwMDAwMDAwMEMyRTA3NGVDNjlBMGRGYjI5OTdCQTZDN2QyZTFlIgogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDM1MzYwMQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3FNYWlubmV0LmpzCiAgdmFyIHFNYWlubmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNTQ0MSwKICAgIG5hbWU6ICJRIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiUSIsCiAgICAgIHN5bWJvbDogIlEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMucS5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJRIE1haW5uZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucS5vcmciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIucS5vcmcvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3FUZXN0bmV0LmpzCiAgdmFyIHFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNTQ0MywKICAgIG5hbWU6ICJRIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiUSIsCiAgICAgIHN5bWJvbDogIlEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMucXRlc3RuZXQub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnF0ZXN0bmV0Lm9yZyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5xdGVzdG5ldC5vcmcvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yZWFsLmpzCiAgdmFyIHJlYWwgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMTE4OCwKICAgIG5hbWU6ICJyZS5hbCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAicmVFVEgiLAogICAgICBkZWNpbWFsczogMTgsCiAgICAgIHN5bWJvbDogInJlRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcmVhbC5kcnBjLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogInJlLmFsIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnJlLmFsIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLnJlLmFsL2FwaS92MiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA2OTUKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yZWRiZWxseVRlc3RuZXQuanMKICB2YXIgcmVkYmVsbHlUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNTMsCiAgICBuYW1lOiAiUmVkYmVsbHkgTmV0d29yayBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJSZWRiZWxseSBOYXRpdmUgQ29pbiIsCiAgICAgIHN5bWJvbDogIlJCTlQiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZ292ZXJub3JzLnRlc3RuZXQucmVkYmVsbHkubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV0aGVybmFsIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQucmVkYmVsbHkubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ldGhlcm5hbC5mbHkuZGV2L2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcmVkc3RvbmUuanMKICB2YXIgcmVkc3RvbmUgPSBkZWZpbmVDaGFpbih7CiAgICBpZDogNjkwLAogICAgbmFtZTogIlJlZHN0b25lIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMucmVkc3RvbmVjaGFpbi5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnJlZHN0b25lY2hhaW4uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsgbmFtZTogIkV4cGxvcmVyIiwgdXJsOiAiCWh0dHBzOi8vZXhwbG9yZXIucmVkc3RvbmUueHl6IiB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3JleWFOZXR3b3JrLmpzCiAgdmFyIHJleWFOZXR3b3JrID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNzI5LAogICAgbmFtZTogIlJleWEgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMucmV5YS5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLnJleWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlJleWEgTmV0d29yayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5yZXlhLm5ldHdvcmsiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yb2xsdXguanMKICB2YXIgcm9sbHV4ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1NzAsCiAgICBuYW1lOiAiUm9sbHV4IE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiU3lzY29pbiIsCiAgICAgIHN5bWJvbDogIlNZUyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnJvbGx1eC5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnJvbGx1eC5jb20vd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9sbHV4RXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucm9sbHV4LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5yb2xsdXguY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTkyMjIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yb2xsdXhUZXN0bmV0LmpzCiAgdmFyIHJvbGx1eFRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU3ZTMsCiAgICBuYW1lOiAiUm9sbHV4IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiU3lzY29pbiIsCiAgICAgIHN5bWJvbDogIlNZUyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRhbmVuYmF1bS5yb2xsdXguY29tLyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMtdGFuZW5iYXVtLnJvbGx1eC5jb20vd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9sbHV4VGVzdG5ldEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3JvbGx1eC50YW5lbmJhdW0uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vcm9sbHV4LnRhbmVuYmF1bS5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTgxMzY3NQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3JvbmluLmpzCiAgdmFyIHJvbmluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDIwLAogICAgbmFtZTogIlJvbmluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJST04iLCBzeW1ib2w6ICJST04iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcGkucm9uaW5jaGFpbi5jb20vcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9uaW4gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYXBwLnJvbmluY2hhaW4uY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI2MDIzNTM1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcm9vdC5qcwogIHZhciByb290ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NjY4LAogICAgbmFtZTogIlRoZSBSb290IE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWFJQIiwKICAgICAgc3ltYm9sOiAiWFJQIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9yb290LnJvb3RuZXQubGl2ZS9hcmNoaXZlIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3Jvb3Qucm9vdG5ldC5saXZlL2FyY2hpdmUvd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJSb290c2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9yb290c2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YzlDMkUyNDI5QWVDMzU0OTE2YzQ3NkIzMGQ3MjlkZURkQzk0OTg4ZCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA5MjE4MzM4CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcm9vdFBvcmNpbmkuanMKICB2YXIgcm9vdFBvcmNpbmkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDc2NzIsCiAgICBuYW1lOiAiVGhlIFJvb3QgTmV0d29yayAtIFBvcmNpbmkiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWFJQIiwKICAgICAgc3ltYm9sOiAiWFJQIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9wb3JjaW5pLnJvb3RuZXQuYXBwL2FyY2hpdmUiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcG9yY2luaS5yb290bmV0LmFwcC9hcmNoaXZlL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9vdHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vcG9yY2luaS5yb290c2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YzlDMkUyNDI5QWVDMzU0OTE2YzQ3NkIzMGQ3MjlkZURkQzk0OTg4ZCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDU1NTY5MgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yb290c3RvY2suanMKICB2YXIgcm9vdHN0b2NrID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMCwKICAgIG5hbWU6ICJSb290c3RvY2sgTWFpbm5ldCIsCiAgICBuZXR3b3JrOiAicm9vdHN0b2NrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlJvb3RzdG9jayBCaXRjb2luIiwKICAgICAgc3ltYm9sOiAiUkJUQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3B1YmxpYy1ub2RlLnJzay5jbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlJTSyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5yc2suY28iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDI0OTU0MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3Jvb3RzdG9ja1Rlc3RuZXQuanMKICB2YXIgcm9vdHN0b2NrVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzEsCiAgICBuYW1lOiAiUm9vdHN0b2NrIFRlc3RuZXQiLAogICAgbmV0d29yazogInJvb3RzdG9jayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJSb290c3RvY2sgQml0Y29pbiIsCiAgICAgIHN5bWJvbDogInRSQlRDIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcHVibGljLW5vZGUudGVzdG5ldC5yc2suY28iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJSU0sgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5yb290c3RvY2suaW8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3JzczMuanMKICB2YXIgc291cmNlSWQyNiA9IDE7CiAgdmFyIHJzczMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDEyNTUzLAogICAgbmFtZTogIlJTUzMgVlNMIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlJTUzMiLCBzeW1ib2w6ICJSU1MzIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnJzczMuaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJSU1MzIFZTTCBNYWlubmV0IFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5yc3MzLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NjYW4ucnNzMy5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQyNl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEU2ZjI0ZDJDMzJCMzEwOUIxOGVkMzNjRjA4ZUZiNDkwYjFlMDlDMTAiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDE5MwogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQyNl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDZBMTI0MzI0OTFiYmJFOGQzYmFiZjc1Rjc1OTc2Njc3NEM3NzhEYjQiLAogICAgICAgICAgYmxvY2tDcmVhdGVkOiAxOTM4NzA1NwogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDI2XTogewogICAgICAgICAgYWRkcmVzczogIjB4NGNiYWI2OTEwOEFhNzIxNTFFRGE1QTNjMTY0ZUE4Njg0NWYxODQzOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQyNgogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yc3MzU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDI3ID0gMTExNTUxMTE7CiAgdmFyIHJzczNTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAyMzMxLAogICAgbmFtZTogIlJTUzMgVlNMIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiUlNTMyIsIHN5bWJvbDogIlJTUzMiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVzdG5ldC5yc3MzLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUlNTMyBWU0wgU2Vwb2xpYSBUZXN0bmV0IFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi50ZXN0bmV0LnJzczMuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2Nhbi50ZXN0bmV0LnJzczMuaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMjddOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhEYjVjNDZDM0VhYTZFZDZhRThiMjM3OTc4NURGN2RkMDI5QzBkQzgxIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTU2OTcKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMjddOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhjQkQ3N0U4RTFFN0YwNkIyNWJhRGU2NzE0MmNkRTgyNjUyRGE3YjU3IiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogNTM0NTAzNQogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDI3XTogewogICAgICAgICAgYWRkcmVzczogIjB4ZEREMjliYjYzQjA4MzlGQjFjRTBlRTQzOUZmMDI3NzM4NTk1RDA3QiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkMjcKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2FpZ29uLmpzCiAgdmFyIHNhaWdvbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAyMSwKICAgIG5hbWU6ICJTYWlnb24gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiUk9OIiwgc3ltYm9sOiAiUk9OIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2FpZ29uLXRlc3RuZXQucm9uaW5jaGFpbi5jb20vcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU2FpZ29uIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NhaWdvbi1hcHAucm9uaW5jaGFpbi5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTg3MzY4NzEKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2FwcGhpcmUuanMKICB2YXIgc2FwcGhpcmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIzMjk0LAogICAgbmFtZTogIk9hc2lzIFNhcHBoaXJlIiwKICAgIG5ldHdvcms6ICJzYXBwaGlyZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2FwcGhpcmUgUm9zZSIsIHN5bWJvbDogIlJPU0UiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zYXBwaGlyZS5vYXNpcy5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9zYXBwaGlyZS5vYXNpcy5pby93cyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk9hc2lzIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLm9hc2lzLmlvL21haW5uZXQvc2FwcGhpcmUiCiAgICAgIH0sCiAgICAgIGJsb2Nrc2NvdXQ6IHsKICAgICAgICBuYW1lOiAiT2FzaXMgU2FwcGhpcmUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vb2xkLWV4cGxvcmVyLnNhcHBoaXJlLm9hc2lzLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL29sZC1leHBsb3Jlci5zYXBwaGlyZS5vYXNpcy5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNzM0NTMxCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2FwcGhpcmVUZXN0bmV0LmpzCiAgdmFyIHNhcHBoaXJlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjMyOTUsCiAgICBuYW1lOiAiT2FzaXMgU2FwcGhpcmUgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAic2FwcGhpcmUtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2FwcGhpcmUgVGVzdCBSb3NlIiwgc3ltYm9sOiAiVEVTVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuc2FwcGhpcmUub2FzaXMuZGV2Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3Rlc3RuZXQuc2FwcGhpcmUub2FzaXMuZGV2L3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiT2FzaXMgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIub2FzaXMuaW8vdGVzdG5ldC9zYXBwaGlyZSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJPYXNpcyBTYXBwaGlyZSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQub2xkLWV4cGxvcmVyLnNhcHBoaXJlLm9hc2lzLmRldiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0Lm9sZC1leHBsb3Jlci5zYXBwaGlyZS5vYXNpcy5kZXYvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zYXRvc2hpdm0uanMKICB2YXIgc2F0b3NoaVZNID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMTA5LAogICAgbmFtZTogIlNhdG9zaGlWTSBBbHBoYSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCVEMiLAogICAgICBzeW1ib2w6ICJCVEMiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FscGhhLXJwYy1ub2RlLWh0dHAuc3Ztc2Nhbi5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc3Ztc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zdm1zY2FuLmlvL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zYXRvc2hpdm1UZXN0bmV0LmpzCiAgdmFyIHNhdG9zaGlWTVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxMTAsCiAgICBuYW1lOiAiU2F0b3NoaVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkJUQyIsCiAgICAgIHN5bWJvbDogIkJUQyIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vdGVzdC1ycGMtbm9kZS1odHRwLnN2bXNjYW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJibG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuc3Ztc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LnN2bXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zY3JvbGwuanMKICB2YXIgc2Nyb2xsID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1MzQzNTIsCiAgICBuYW1lOiAiU2Nyb2xsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zY3JvbGwuaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3NzLXJwYy5zY3JvbGwuaW8vd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTY3JvbGxzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Njcm9sbHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5zY3JvbGxzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTQKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3Njcm9sbFNlcG9saWEuanMKICB2YXIgc2Nyb2xsU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTM0MzUxLAogICAgbmFtZTogIlNjcm9sbCBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEtcnBjLnNjcm9sbC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNjcm9sbHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5zY3JvbGxzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5zY3JvbGxzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogOTQ3MwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zZWkuanMKICB2YXIgc2VpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMzI5LAogICAgbmFtZTogIlNlaSBOZXR3b3JrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZWkiLCBzeW1ib2w6ICJTRUkiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldm0tcnBjLnNlaS1hcGlzLmNvbS8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXZtLXdzLnNlaS1hcGlzLmNvbS8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTZWl0cmFjZSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZWl0cmFjZS5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2VpdHJhY2UuY29tL3BhY2lmaWMtMS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2VpRGV2bmV0LmpzCiAgdmFyIHNlaURldm5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNzEzNzE1LAogICAgbmFtZTogIlNlaSBEZXZuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlNlaSIsIHN5bWJvbDogIlNFSSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V2bS1ycGMtYXJjdGljLTEuc2VpLWFwaXMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU2VpdHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vc2VpdHJhY2UuY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zZWlUZXN0bmV0LmpzCiAgdmFyIHNlaVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMjgsCiAgICBuYW1lOiAiU2VpIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlNlaSIsIHN5bWJvbDogIlNFSSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V2bS1ycGMtdGVzdG5ldC5zZWktYXBpcy5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXZtLXdzLXRlc3RuZXQuc2VpLWFwaXMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU2VpdHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vc2VpdHJhY2UuY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zZXBvbGlhLmpzCiAgdmFyIHNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMTU1MTExLAogICAgbmFtZTogIlNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlNlcG9saWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc2Vwb2xpYS5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5ldGhlcnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLXNlcG9saWEuZXRoZXJzY2FuLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3NTE1MzIKICAgICAgfSwKICAgICAgZW5zUmVnaXN0cnk6IHsgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjOEFmOTk5ZTM4MjczRDY1OEJFMWI5MjFiODhBOURkZjAwNTc2OWNDIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDUzMTcwODAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2hhcGVTZXBvbGlhLmpzCiAgdmFyIHNoYXBlU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTEwMTEsCiAgICBuYW1lOiAiU2hhcGUgU2Vwb2xpYSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZXBvbGlhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5zaGFwZS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiYmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zaGFwZS1zZXBvbGlhLWV4cGxvcmVyLmFsY2hlbXkuY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NoYXBlLXNlcG9saWEtZXhwbG9yZXIuYWxjaGVteS5jb20vYXBpL3YyIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NoaW1tZXIuanMKICB2YXIgc2hpbW1lciA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTQ4LAogICAgbmFtZTogIlNoaW1tZXIiLAogICAgbmV0d29yazogInNoaW1tZXIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiU2hpbW1lciIsCiAgICAgIHN5bWJvbDogIlNNUiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vanNvbi1ycGMuZXZtLnNoaW1tZXIubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNoaW1tZXIgTmV0d29yayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0uc2hpbW1lci5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmV2bS5zaGltbWVyLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NoaW1tZXJUZXN0bmV0LmpzCiAgdmFyIHNoaW1tZXJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDczLAogICAgbmFtZTogIlNoaW1tZXIgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAic2hpbW1lci10ZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlNoaW1tZXIiLAogICAgICBzeW1ib2w6ICJTTVIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2pzb24tcnBjLmV2bS50ZXN0bmV0LnNoaW1tZXIubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNoaW1tZXIgTmV0d29yayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0udGVzdG5ldC5zaGltbWVyLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLnRlc3RuZXQuc2hpbW1lci5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2thbGUvYnJhd2wuanMKICB2YXIgc2thbGVCbG9ja0JyYXdsZXJzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzOTE4NDU4OTQsCiAgICBuYW1lOiAiU0tBTEUgfCBCbG9jayBCcmF3bGVycyIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQlJBV0wiLCBzeW1ib2w6ICJCUkFXTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvZnJheWVkLWRlY2VudC1hbnRhcmVzIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvZnJheWVkLWRlY2VudC1hbnRhcmVzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU0tBTEUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZnJheWVkLWRlY2VudC1hbnRhcmVzLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHt9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL2NhbHlwc28uanMKICB2YXIgc2thbGVDYWx5cHNvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNTY0ODMwODE4LAogICAgbmFtZTogIlNLQUxFIHwgQ2FseXBzbyBORlQgSHViIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS9ob25vcmFibGUtc3RlZWwtcmFzYWxoYWd1ZSJdLAogICAgICAgIHdlYlNvY2tldDogWwogICAgICAgICAgIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvaG9ub3JhYmxlLXN0ZWVsLXJhc2FsaGFndWUiCiAgICAgICAgXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ob25vcmFibGUtc3RlZWwtcmFzYWxoYWd1ZS5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMxMDc2MjYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9jYWx5cHNvVGVzdG5ldC5qcwogIHZhciBza2FsZUNhbHlwc29UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5NzQzOTkxMzEsCiAgICBuYW1lOiAiU0tBTEUgQ2FseXBzbyBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5za2FsZW5vZGVzLmNvbS92MS9naWFudC1oYWxmLWR1YWwtdGVzdG5ldCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly90ZXN0bmV0LnNrYWxlbm9kZXMuY29tL3YxL3dzL2dpYW50LWhhbGYtZHVhbC10ZXN0bmV0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU0tBTEUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZ2lhbnQtaGFsZi1kdWFsLXRlc3RuZXQuZXhwbG9yZXIudGVzdG5ldC5za2FsZW5vZGVzLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDMyMjAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2thbGUvY3J5cHRvQmxhZGVzLmpzCiAgdmFyIHNrYWxlQ3J5cHRvQmxhZGVzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDI2MDYyMTU3LAogICAgbmFtZTogIlNLQUxFIHwgQ3J5cHRvQmxhZGVzIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS9hZmZlY3Rpb25hdGUtaW1tZWRpYXRlLXBvbGx1eCJdLAogICAgICAgIHdlYlNvY2tldDogWwogICAgICAgICAgIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvYWZmZWN0aW9uYXRlLWltbWVkaWF0ZS1wb2xsdXgiCiAgICAgICAgXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hZmZlY3Rpb25hdGUtaW1tZWRpYXRlLXBvbGx1eC5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9jcnlwdG9Db2xvc3NldW0uanMKICB2YXIgc2thbGVDcnlwdG9Db2xvc3NldW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMzI5NDIxNzIsCiAgICBuYW1lOiAiU0tBTEUgfCBDcnlwdG8gQ29sb3NzZXVtIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS9oYXVudGluZy1kZXZvdGVkLWRlbmViIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvaGF1bnRpbmctZGV2b3RlZC1kZW5lYiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2hhdW50aW5nLWRldm90ZWQtZGVuZWIuZXhwbG9yZXIubWFpbm5ldC5za2FsZW5vZGVzLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czoge30KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2thbGUvZXVyb3BhLmpzCiAgdmFyIHNrYWxlRXVyb3BhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDQ2Mzk5MTI2LAogICAgbmFtZTogIlNLQUxFIHwgRXVyb3BhIExpcXVpZGl0eSBIdWIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL2VsYXRlZC10YW4tc2thdCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL3dzL2VsYXRlZC10YW4tc2thdCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2VsYXRlZC10YW4tc2thdC5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMxMTM0OTUKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9ldXJvcGFUZXN0bmV0LmpzCiAgdmFyIHNrYWxlRXVyb3BhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTQ0NDY3MzQxOSwKICAgIG5hbWU6ICJTS0FMRSBFdXJvcGEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuc2thbGVub2Rlcy5jb20vdjEvanVpY3ktbG93LXNtYWxsLXRlc3RuZXQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9qdWljeS1sb3ctc21hbGwtdGVzdG5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2p1aWN5LWxvdy1zbWFsbC10ZXN0bmV0LmV4cGxvcmVyLnRlc3RuZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTEwODU4CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL2V4b3JkZS5qcwogIHZhciBza2FsZUV4b3JkZSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjEzOTkyNzU1MiwKICAgIG5hbWU6ICJTS0FMRSB8IEV4b3JkZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvbGlnaHQtdmFzdC1kaXBoZGEiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9saWdodC12YXN0LWRpcGhkYSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2xpZ2h0LXZhc3QtZGlwaGRhLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHt9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL2h1bWFuUHJvdG9jb2wuanMKICB2YXIgc2thbGVIdW1hblByb3RvY29sID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjczMjI3NDUzLAogICAgbmFtZTogIlNLQUxFIHwgSHVtYW4gUHJvdG9jb2wiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL3dhbi1yZWQtYWluIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3Mvd2FuLXJlZC1haW4iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93YW4tcmVkLWFpbi5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9uZWJ1bGEuanMKICB2YXIgc2thbGVOZWJ1bGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0ODI2MDE2NDksCiAgICBuYW1lOiAiU0tBTEUgfCBOZWJ1bGEgR2FtaW5nIEh1YiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvZ3JlZW4tZ2lkZHktZGVuZWJvbGEiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9ncmVlbi1naWRkeS1kZW5lYm9sYSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2dyZWVuLWdpZGR5LWRlbmVib2xhLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjM3Mjk4NgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL25lYnVsYVRlc3RuZXQuanMKICB2YXIgc2thbGVOZWJ1bGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNzA4NDYyNCwKICAgIG5hbWU6ICJTS0FMRSBOZWJ1bGEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuc2thbGVub2Rlcy5jb20vdjEvbGFua3ktaWxsLWZ1bm55LXRlc3RuZXQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9sYW5reS1pbGwtZnVubnktdGVzdG5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2xhbmt5LWlsbC1mdW5ueS10ZXN0bmV0LmV4cGxvcmVyLnRlc3RuZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTA1MTQxCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL3Jhem9yLmpzCiAgdmFyIHNrYWxlUmF6b3IgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI3ODYxMTM1MSwKICAgIG5hbWU6ICJTS0FMRSB8IFJhem9yIE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL3R1cmJ1bGVudC11bmlxdWUtc2NoZWF0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvdHVyYnVsZW50LXVuaXF1ZS1zY2hlYXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90dXJidWxlbnQtdW5pcXVlLXNjaGVhdC5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS90aXRhbi5qcwogIHZhciBza2FsZVRpdGFuID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMzUwMjE2MjM0LAogICAgbmFtZTogIlNLQUxFIHwgVGl0YW4gQ29tbXVuaXR5IEh1YiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvcGFyYWxsZWwtc3Rvcm15LXNwaWNhIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvcGFyYWxsZWwtc3Rvcm15LXNwaWNhIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU0tBTEUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGFyYWxsZWwtc3Rvcm15LXNwaWNhLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjA3NjQ1OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL3RpdGFuVGVzdG5ldC5qcwogIHZhciBza2FsZVRpdGFuVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAyMDM1MjIyMCwKICAgIG5hbWU6ICJTS0FMRSBUaXRhbiBIdWIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LnNrYWxlbm9kZXMuY29tL3YxL2F3YXJlLWZha2UtdHJpbS10ZXN0bmV0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3Rlc3RuZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvYXdhcmUtZmFrZS10cmltLXRlc3RuZXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hd2FyZS1mYWtlLXRyaW0tdGVzdG5ldC5leHBsb3Jlci50ZXN0bmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEwNDA3MgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2V0Y2hwYWQuanMKICB2YXIgc2tldGNocGFkID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5ODQxMjMsCiAgICBuYW1lOiAiRm9ybWEgU2tldGNocGFkIiwKICAgIG5ldHdvcms6ICJza2V0Y2hwYWQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgc3ltYm9sOiAiVElBIiwKICAgICAgbmFtZTogIlRJQSIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc2tldGNocGFkLTEuZm9ybWEuYXJ0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLnNrZXRjaHBhZC0xLmZvcm1hLmFydCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNrZXRjaHBhZCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5za2V0Y2hwYWQtMS5mb3JtYS5hcnQiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NvbmdiaXJkLmpzCiAgdmFyIHNvbmdiaXJkID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOSwKICAgIG5hbWU6ICJTb25nYmlyZCBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogInNvbmdiaXJkIiwKICAgICAgc3ltYm9sOiAiU0dCIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vc29uZ2JpcmQtYXBpLmZsYXJlLm5ldHdvcmsvZXh0L0MvcnBjIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU29uZ2JpcmQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc29uZ2JpcmQtZXhwbG9yZXIuZmxhcmUubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zb25nYmlyZC1leHBsb3Jlci5mbGFyZS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zb25nYmlyZFRlc3RuZXQuanMKICB2YXIgc29uZ2JpcmRUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNiwKICAgIG5hbWU6ICJDb3N0b24iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiY29zdG9uZmxhcmUiLAogICAgICBzeW1ib2w6ICJDRkxSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vY29zdG9uLWFwaS5mbGFyZS5uZXR3b3JrL2V4dC9DL3JwYyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNvc3RvbiBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9jb3N0b24tZXhwbG9yZXIuZmxhcmUubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9jb3N0b24tZXhwbG9yZXIuZmxhcmUubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NwaWN5LmpzCiAgdmFyIHNwaWN5ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4ODg4MiwKICAgIG5hbWU6ICJDaGlsaXogU3BpY3kgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiY2hpbGl6LXNwaWN5LVRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ0haIiwKICAgICAgc3ltYm9sOiAiQ0haIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL3NwaWN5LXJwYy5jaGlsaXouY29tIiwKICAgICAgICAgICJodHRwczovL2NoaWxpei1zcGljeS1ycGMucHVibGljbm9kZS5jb20iCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsKICAgICAgICAgICJ3c3M6Ly9zcGljeS1ycGMtd3MuY2hpbGl6LmNvbSIsCiAgICAgICAgICAid3NzOi8vY2hpbGl6LXNwaWN5LXJwYy5wdWJsaWNub2RlLmNvbSIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNoaWxpeiBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cDovL3NwaWN5LWV4cGxvcmVyLmNoaWxpei5jb20iLAogICAgICAgIGFwaVVybDogImh0dHA6Ly9zcGljeS1leHBsb3Jlci5jaGlsaXouY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2hhcmRldW1TcGhpbnguanMKICB2YXIgc2hhcmRldW1TcGhpbnggPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwODIsCiAgICBuYW1lOiAiU2hhcmRldW0gU3BoaW54IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTSEFSREVVTSIsIHN5bWJvbDogIlNITSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NwaGlueC5zaGFyZGV1bS5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTaGFyZGV1bSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci1zcGhpbnguc2hhcmRldW0ub3JnIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zaGliYXJpdW0uanMKICB2YXIgc2hpYmFyaXVtID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDksCiAgICBuYW1lOiAiU2hpYmFyaXVtIiwKICAgIG5ldHdvcms6ICJzaGliYXJpdW0iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkJvbmUiLCBzeW1ib2w6ICJCT05FIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnNoaWJycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zaGliYXJpdW1zY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg4NjRCZjY4MUFERDYwNTIzOTUxODhBODkxMDFBMUIzN2QzQjRDOTYxIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI2NTkwMAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NoaWJhcml1bVRlc3RuZXQuanMKICB2YXIgc2hpYmFyaXVtVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTU3LAogICAgbmFtZTogIlB1cHB5bmV0IFNoaWJhcml1bSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCb25lIiwKICAgICAgc3ltYm9sOiAiQk9ORSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3B1cHB5bmV0LnNoaWJycGMuY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wdXBweXNjYW4uc2hpYi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9wdXBweXNjYW4uc2hpYi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweEE0MDI5Yjc0RkJBMzY2YzkyNmVERkE3RGQxMEIyMUM2MjExNzBhNGMiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzAzNTc2OQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zdHJhdGlzLmpzCiAgdmFyIHN0cmF0aXMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwNTEwNSwKICAgIG5hbWU6ICJTdHJhdGlzIE1haW5uZXQiLAogICAgbmV0d29yazogInN0cmF0aXMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIlN0cmF0aXMiLAogICAgICBzeW1ib2w6ICJTVFJBWCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc3RyYXRpc2V2bS5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTdHJhdGlzIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnN0cmF0aXNldm0uY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3N5c2NvaW4uanMKICB2YXIgc3lzY29pbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTcsCiAgICBuYW1lOiAiU3lzY29pbiBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlN5c2NvaW4iLAogICAgICBzeW1ib2w6ICJTWVMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zeXNjb2luLm9yZyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuc3lzY29pbi5vcmcvd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU3lzY29pbkV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnN5c2NvaW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLnN5c2NvaW4ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyODcxMzkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zeXNjb2luVGVzdG5ldC5qcwogIHZhciBzeXNjb2luVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTcwMCwKICAgIG5hbWU6ICJTeXNjb2luIFRhbmVuYmF1bSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlN5c2NvaW4iLAogICAgICBzeW1ib2w6ICJTWVMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy50YW5lbmJhdW0uaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnRhbmVuYmF1bS5pby93c3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTeXNjb2luVGVzdG5ldEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3RhbmVuYmF1bS5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNzEyODgKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90YXJheGEuanMKICB2YXIgdGFyYXhhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4NDEsCiAgICBuYW1lOiAiVGFyYXhhIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlRhcmEiLCBzeW1ib2w6ICJUQVJBIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLm1haW5uZXQudGFyYXhhLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGFyYXhhIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLm1haW5uZXQudGFyYXhhLmlvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvLmpzCiAgdmFyIHRhaWtvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjdlMywKICAgIG5hbWU6ICJUYWlrbyBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMubWFpbm5ldC50YWlrby54eXoiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3MubWFpbm5ldC50YWlrby54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUYWlrb3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vdGFpa29zY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS50YWlrb3NjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYjI0MzY3NzRDM2UxOTFjODUwNTZkMjQ4RUY0MjYwY2U1ZjI3QTlEIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvSGVrbGEuanMKICB2YXIgdGFpa29IZWtsYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY3MDA5LAogICAgbmFtZTogIlRhaWtvIEhla2xhIEwyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5oZWtsYS50YWlrby54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUYWlrb3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vaGVrbGEudGFpa29zY2FuLm5ldHdvcmsiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvSm9sbmlyLmpzCiAgdmFyIHRhaWtvSm9sbmlyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjcwMDcsCiAgICBuYW1lOiAiVGFpa28gSm9sbmlyIChBbHBoYS01IFRlc3RuZXQpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5qb2xuaXIudGFpa28ueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiYmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5qb2xuaXIudGFpa28ueHl6IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDczMjcwNgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90YWlrb0thdGxhLmpzCiAgdmFyIHRhaWtvS2F0bGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE2NzAwOCwKICAgIG5hbWU6ICJUYWlrbyBLYXRsYSAoQWxwaGEtNiBUZXN0bmV0KSIsCiAgICBuZXR3b3JrOiAidGtvLWthdGxhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5rYXRsYS50YWlrby54eXoiXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmthdGxhLnRhaWtvLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIua2F0bGEudGFpa28ueHl6IgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvVGVzdG5ldFNlcG9saWEuanMKICB2YXIgdGFpa29UZXN0bmV0U2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY3MDA1LAogICAgbmFtZTogIlRhaWtvIChBbHBoYS0zIFRlc3RuZXQpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy50ZXN0LnRhaWtvLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdC50YWlrby54eXoiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvdGFyYXhhVGVzdG5ldC5qcwogIHZhciB0YXJheGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4NDIsCiAgICBuYW1lOiAiVGFyYXhhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlRhcmEiLCBzeW1ib2w6ICJUQVJBIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQudGFyYXhhLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGFyYXhhIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQudGFyYXhhLmlvIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90ZWxjb2luVGVzdG5ldC5qcwogIHZhciB0ZWxjb2luVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAxNywKICAgIG5hbWU6ICJUZWxjb2luIEFkaXJpIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlRlbGNvaW4iLCBzeW1ib2w6ICJURUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVsY29pbi5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAidGVsc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZWxzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90ZWxvcy5qcwogIHZhciB0ZWxvcyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDAsCiAgICBuYW1lOiAiVGVsb3MiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiVGVsb3MiLAogICAgICBzeW1ib2w6ICJUTE9TIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC50ZWxvcy5uZXQvZXZtIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGVsb3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3LnRlbG9zY2FuLmlvLyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDY1MzA3MDkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90ZWxvc1Rlc3RuZXQuanMKICB2YXIgdGVsb3NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MSwKICAgIG5hbWU6ICJUZWxvcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJUZWxvcyIsCiAgICAgIHN5bWJvbDogIlRMT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LnRlbG9zLm5ldC9ldm0iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUZWxvc2NhbiAodGVzdG5ldCkiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC50ZWxvc2Nhbi5pby8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RlbmV0LmpzCiAgdmFyIHRlbmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNTU5LAogICAgbmFtZTogIlRlbmV0IiwKICAgIG5ldHdvcms6ICJ0ZW5ldC1tYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJURU5FVCIsCiAgICAgIHN5bWJvbDogIlRFTkVUIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVuZXQub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGVuZXRTY2FuIE1haW5uZXQiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVuZXRzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3RlbmV0c2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90aGFpQ2hhaW4uanMKICB2YXIgdGhhaUNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3LAogICAgbmFtZTogIlRoYWlDaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiVENIIiwgc3ltYm9sOiAiVENIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRoYWljaGFpbi5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cC50aGFpY2hhaW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cC50aGFpY2hhaW4ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MERhRDYxMzBlODMyYzIxNzE5QzVDRTNiYWU5MzQ1NEUxNkE4NDgyNiIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0ODA2Mzg2CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90aHVuZGVyVGVzdG5ldC5qcwogIHZhciB0aHVuZGVyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogOTk3LAogICAgbmFtZTogIjVpcmVDaGFpbiBUaHVuZGVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIjVpcmUgVG9rZW4iLCBzeW1ib2w6ICI1SVJFIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQuNWlyZS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiNWlyZUNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLjVpcmUubmV0d29yayIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvdW5yZWFsLmpzCiAgdmFyIHVucmVhbCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTgyMzMsCiAgICBuYW1lOiAiVW5yZWFsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJyZUVUSCIsCiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgc3ltYm9sOiAicmVFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMudW5yZWFsLW9yYml0LmdlbGF0by5kaWdpdGFsIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVW5yZWFsIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3VucmVhbC5ibG9ja3Njb3V0LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly91bnJlYWwuYmxvY2tzY291dC5jb20vYXBpL3YyIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4OGI2QjBlNjBEOENEODQ4OThFYThiOTgxMDY1QTEyRjg3NmVBNTY3NyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNzQ1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvdmVjaGFpbi5qcwogIHZhciB2ZWNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDAwMDksCiAgICBuYW1lOiAiVmVjaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiVmVDaGFpbiIsIHN5bWJvbDogIlZFVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQudmVjaGFpbi5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJWZWNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmUudmVjaGFpbi5vcmciCiAgICAgIH0sCiAgICAgIHZlY2hhaW5TdGF0czogewogICAgICAgIG5hbWU6ICJWZWNoYWluIFN0YXRzIiwKICAgICAgICB1cmw6ICJodHRwczovL3ZlY2hhaW5zdGF0cy5jb20iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvd2FuY2hhaW4uanMKICB2YXIgd2FuY2hhaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDg4OCwKICAgIG5hbWU6ICJXYW5jaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiV0FOQ0hBSU4iLCBzeW1ib2w6ICJXQU4iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL2d3YW4tc3NsLndhbmRldnMub3JnOjU2ODkxIiwKICAgICAgICAgICJodHRwczovL2d3YW4yLXNzbC53YW5kZXZzLm9yZyIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIldhblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd2Fuc2Nhbi5vcmciCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNERjZBMTU2NmU3OEVCNDU5NGM4NkZlNzNGY2RjODI0MjllOTdmYkIiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjUzMTIzOTAKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy93YW5jaGFpblRlc3RuZXQuanMKICB2YXIgd2FuY2hhaW5UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5OTksCiAgICBuYW1lOiAiV2FuY2hhaW4gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiV0FOQ0hBSU4iLCBzeW1ib2w6ICJXQU50IiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZ3dhbi1zc2wud2FuZGV2cy5vcmc6NDY4OTEiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJXYW5TY2FuVGVzdCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93YW5zY2FuLm9yZyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MTFjODliRjQ0OTZjMzlGQjgwNTM1RmZiNGM5MjcxNTgzOUNDNTMyNCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDc0MzQ0OAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy93ZW1peC5qcwogIHZhciB3ZW1peCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExMSwKICAgIG5hbWU6ICJXRU1JWCIsCiAgICBuZXR3b3JrOiAid2VtaXgtbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiV0VNSVgiLCBzeW1ib2w6ICJXRU1JWCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkud2VtaXguY29tIl0gfSwKICAgICAgcHVibGljOiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkud2VtaXguY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAid2VtaXhFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci53ZW1peC5jb20iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvd2VtaXhUZXN0bmV0LmpzCiAgdmFyIHdlbWl4VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExMiwKICAgIG5hbWU6ICJXRU1JWCBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJ3ZW1peC10ZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJXRU1JWCIsIHN5bWJvbDogInRXRU1JWCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkudGVzdC53ZW1peC5jb20iXSB9LAogICAgICBwdWJsaWM6IHsgaHR0cDogWyJodHRwczovL2FwaS50ZXN0LndlbWl4LmNvbSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIndlbWl4RXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC53ZW1peHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQud2VtaXhzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3hMYXllclRlc3RuZXQuanMKICB2YXIgeExheWVyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTk1LAogICAgbmFtZTogIlgxIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiT0tCIiwKICAgICAgc3ltYm9sOiAiT0tCIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8veGxheWVydGVzdHJwYy5va3guY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiT0tMaW5rIiwKICAgICAgICB1cmw6ICJodHRwczovL3d3dy5va2xpbmsuY29tL3hsYXllci10ZXN0IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDYyNDM0NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94TGF5ZXIuanMKICB2YXIgeExheWVyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOTYsCiAgICBuYW1lOiAiWCBMYXllciBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk9LQiIsCiAgICAgIHN5bWJvbDogIk9LQiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy54bGF5ZXIudGVjaCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk9LTGluayIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cub2tsaW5rLmNvbS94bGF5ZXIiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDc0MTYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94YWkuanMKICB2YXIgeGFpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2NjAyNzksCiAgICBuYW1lOiAiWGFpIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlhhaSIsIHN5bWJvbDogIlhBSSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3hhaS1jaGFpbi5uZXQvcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci54YWktY2hhaW4ubmV0IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDIyMjU0OQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMveGFpVGVzdG5ldC5qcwogIHZhciB4YWlUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNzcxNDU1NTQyOSwKICAgIG5hbWU6ICJYYWkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic1hhaSIsIHN5bWJvbDogInNYQUkiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LXYyLnhhaS1jaGFpbi5uZXQvcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLXYyLnhhaS1jaGFpbi5uZXQiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3hkYy5qcwogIHZhciB4ZGMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDUwLAogICAgbmFtZTogIlhpbkZpbiBOZXR3b3JrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlhEQyIsCiAgICAgIHN5bWJvbDogIlhEQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy54aW5maW4ubmV0d29yayJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICB4aW5maW46IHsKICAgICAgICBuYW1lOiAiWGluRmluIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnhpbmZpbi5uZXR3b3JrIgogICAgICB9LAogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8veGRjLmJsb2Nrc3NjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNzE1NDI3ODgKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94ZGNUZXN0bmV0LmpzCiAgdmFyIHhkY1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDUxLAogICAgbmFtZTogIkFwb3RoZW0gTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJUWERDIiwKICAgICAgc3ltYm9sOiAiVFhEQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2VycGMuYXBvdGhlbS5uZXR3b3JrIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hcG90aGVtLmJsb2Nrc3NjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTk3NjUzODkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94clNlcG9saWEuanMKICB2YXIgeHJTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNzMwLAogICAgbmFtZTogIlhSIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAidFhSIiwKICAgICAgc3ltYm9sOiAidFhSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8veHItc2Vwb2xpYS10ZXN0bmV0LnJwYy5jYWxkZXJhLnh5ei9odHRwIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly94ci1zZXBvbGlhLXRlc3RuZXQuZXhwbG9yZXIuY2FsZGVyYS54eXoiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3lvb2xkb1ZlcnNlLmpzCiAgdmFyIHlvb2xkb1ZlcnNlID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1MDAwNSwKICAgIG5hbWU6ICJZb29sZG8gVmVyc2UiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk9BUyIsIHN5bWJvbDogIk9BUyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy55b29sZG8tdmVyc2UueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiWW9vbGRvIFZlcnNlIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnlvb2xkby12ZXJzZS54eXoiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMveW9vbGRvVmVyc2VUZXN0bmV0LmpzCiAgdmFyIHlvb2xkb1ZlcnNlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTAwMDYsCiAgICBuYW1lOiAiWW9vbGRvIFZlcnNlIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk9BUyIsIHN5bWJvbDogIk9BUyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy50ZXN0bmV0Lnlvb2xkby12ZXJzZS54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJZb29sZG8gVmVyc2UgVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci50ZXN0bmV0Lnlvb2xkby12ZXJzZS54eXoiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3pldGFjaGFpbi5qcwogIHZhciB6ZXRhY2hhaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDdlMywKICAgIG5hbWU6ICJaZXRhQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWmV0YSIsCiAgICAgIHN5bWJvbDogIlpFVEEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3pldGFjaGFpbi1ldm0uYmxvY2twaS5uZXR3b3JrL3YxL3JwYy9wdWJsaWMiXQogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE2MzI3ODEKICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiWmV0YVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuemV0YWNoYWluLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3pldGFjaGFpbkF0aGVuc1Rlc3RuZXQuanMKICB2YXIgemV0YWNoYWluQXRoZW5zVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNzAwMSwKICAgIG5hbWU6ICJaZXRhQ2hhaW4gQXRoZW5zIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWmV0YSIsCiAgICAgIHN5bWJvbDogImFaRVRBIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly96ZXRhY2hhaW4tYXRoZW5zLWV2bS5ibG9ja3BpLm5ldHdvcmsvdjEvcnBjL3B1YmxpYyJdCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjcxNTIxNwogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJaZXRhU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hdGhlbnMuZXhwbG9yZXIuemV0YWNoYWluLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemhlamlhbmcuanMKICB2YXIgemhlamlhbmcgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMzc4MDMsCiAgICBuYW1lOiAiWmhlamlhbmciLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlpoZWppYW5nIEV0aGVyIiwgc3ltYm9sOiAiWmhlakVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy56aGVqaWFuZy5ldGhwYW5kYW9wcy5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJlYWNvbmNoYWluIiwKICAgICAgICB1cmw6ICJodHRwczovL3poZWppYW5nLmJlYWNvbmNoYS5pbiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemlsbGlxYS5qcwogIHZhciB6aWxsaXFhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMjc2OSwKICAgIG5hbWU6ICJaaWxsaXFhIiwKICAgIG5ldHdvcms6ICJ6aWxsaXFhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJaaWxsaXFhIiwgc3ltYm9sOiAiWklMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vYXBpLnppbGxpcWEuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJuYWwiLAogICAgICAgIHVybDogImh0dHBzOi8vZXZteC56aWxsaXFhLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3ppbGxpcWFUZXN0bmV0LmpzCiAgdmFyIHppbGxpcWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMzEwMSwKICAgIG5hbWU6ICJaaWxsaXFhIFRlc3RuZXQiLAogICAgbmV0d29yazogInppbGxpcWEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiWmlsbGlxYSIsIHN5bWJvbDogIlpJTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2Rldi1hcGkuemlsbGlxYS5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcm5hbCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ldm14LnRlc3RuZXQuemlsbGlxYS5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prRmFpci5qcwogIHZhciB6a0ZhaXIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyNzY2LAogICAgbmFtZTogIlpLRmFpciBNYWlubmV0IiwKICAgIG5ldHdvcms6ICJ6a2ZhaXItbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJVU0QgQ29pbiIsCiAgICAgIHN5bWJvbDogIlVTREMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy56a2ZhaXIuaW8iXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnprZmFpci5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogInprRmFpciBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLnprZmFpci5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLnprZmFpci5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjA5MDk1OQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemtGYWlyVGVzdG5ldC5qcwogIHZhciB6a0ZhaXJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0Mzg1MSwKICAgIG5hbWU6ICJaS0ZhaXIgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiemtmYWlyLXRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiVVNEIENvaW4iLAogICAgICBzeW1ib2w6ICJVU0RDIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LXJwYy56a2ZhaXIuaW8iXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC1ycGMuemtmYWlyLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiemtGYWlyIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQtc2Nhbi56a2ZhaXIuaW8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prTGlua05vdmEuanMKICB2YXIgemtMaW5rTm92YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogODEwMTgwLAogICAgbmFtZTogInprTGluayBOb3ZhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUSCIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy56a2xpbmsuaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJ6a0xpbmsgTm92YSBCbG9jayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci56a2xpbmsuaW8iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemtMaW5rTm92YVNlcG9saWFUZXN0bmV0LmpzCiAgdmFyIHprTGlua05vdmFTZXBvbGlhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogODEwMTgxLAogICAgbmFtZTogInprTGluayBOb3ZhIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFVEgiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLnJwYy56a2xpbmsuaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJ6a0xpbmsgTm92YSBCbG9jayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZXBvbGlhLmV4cGxvcmVyLnprbGluay5pbyIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy96a3N5bmMuanMKICB2YXIgemtzeW5jID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnLAogICAgaWQ6IDMyNCwKICAgIG5hbWU6ICJaS3N5bmMgRXJhIiwKICAgIG5ldHdvcms6ICJ6a3N5bmMtZXJhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmVyYS56a3N5bmMuaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vbWFpbm5ldC5lcmEuemtzeW5jLmlvL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2VyYS56a3N5bmMubmV0d29yay8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLWVyYS56a3N5bmMubmV0d29yay9hcGkiCiAgICAgIH0sCiAgICAgIG5hdGl2ZTogewogICAgICAgIG5hbWU6ICJaS3N5bmMgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuemtzeW5jLmlvLyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ibG9jay1leHBsb3Jlci1hcGkubWFpbm5ldC56a3N5bmMuaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhGOWNkYTYyNEZCQzdlMDU5MzU1Y2U5OGEzMTY5M2QyOTlGQUNkOTYzIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prc3luY0luTWVtb3J5Tm9kZS5qcwogIHZhciB6a3N5bmNJbk1lbW9yeU5vZGUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcsCiAgICBpZDogMjYwLAogICAgbmFtZTogIlpLc3luYyBJbk1lbW9yeSBOb2RlIiwKICAgIG5ldHdvcms6ICJ6a3N5bmMtaW4tbWVtb3J5LW5vZGUiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHA6Ly9sb2NhbGhvc3Q6ODAxMSJdCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prc3luY0xvY2FsTm9kZS5qcwogIHZhciB6a3N5bmNMb2NhbE5vZGUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcsCiAgICBpZDogMjcwLAogICAgbmFtZTogIlpLc3luYyBDTEkgTG9jYWwgTm9kZSIsCiAgICBuZXR3b3JrOiAiemtzeW5jLWNsaS1sb2NhbC1ub2RlIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwOi8vbG9jYWxob3N0OjMwNTAiXQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy96a3N5bmNTZXBvbGlhVGVzdG5ldC5qcwogIHZhciB6a3N5bmNTZXBvbGlhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZywKICAgIGlkOiAzMDAsCiAgICBuYW1lOiAiWktzeW5jIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiemtzeW5jLXNlcG9saWEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLmVyYS56a3N5bmMuZGV2Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3NlcG9saWEuZXJhLnprc3luYy5kZXYvd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS1lcmEuemtzeW5jLm5ldHdvcmsvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1zZXBvbGlhLWVyYS56a3N5bmMubmV0d29yay9hcGkiCiAgICAgIH0sCiAgICAgIG5hdGl2ZTogewogICAgICAgIG5hbWU6ICJaS3N5bmMgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5leHBsb3Jlci56a3N5bmMuaW8vIiwKICAgICAgICBibG9ja0V4cGxvcmVyQXBpOiAiaHR0cHM6Ly9ibG9jay1leHBsb3Jlci1hcGkuc2Vwb2xpYS56a3N5bmMuZGV2L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4RjljZGE2MjRGQkM3ZTA1OTM1NWNlOThhMzE2OTNkMjk5RkFDZDk2MyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvem9yYS5qcwogIHZhciBzb3VyY2VJZDI4ID0gMTsKICB2YXIgem9yYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogNzc3Nzc3NywKICAgIG5hbWU6ICJab3JhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuem9yYS5lbmVyZ3kiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnpvcmEuZW5lcmd5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuem9yYS5lbmVyZ3kiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuem9yYS5lbmVyZ3kvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMjhdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg5RTYyMDRGNzUwY0Q4NjZiMjk5NTk0ZTJhQzllQTgyNEUyZTVmOTVjIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTg4MgogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQyOF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDFhMGFkMDExOTEzQTE1MGY2OWY2QTE5REY0NDdBMENmRDk1NTEwNTQiCiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkMjhdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgzZTJFYTlCOTJCN0U0OEE1MjI5NmZEMjYxZGMyNmZkOTk1Mjg0NjMxIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDI4CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3pvcmFTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMjkgPSAxMTE1NTExMTsKICB2YXIgem9yYVNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDk5OTk5OTk5OSwKICAgIG5hbWU6ICJab3JhIFNlcG9saWEiLAogICAgbmV0d29yazogInpvcmEtc2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJab3JhIFNlcG9saWEiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEucnBjLnpvcmEuZW5lcmd5Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3NlcG9saWEucnBjLnpvcmEuZW5lcmd5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiWm9yYSBTZXBvbGlhIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEuZXhwbG9yZXIuem9yYS5lbmVyZ3kvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NlcG9saWEuZXhwbG9yZXIuem9yYS5lbmVyZ3kvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMjldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgyNjE1QjQ4MUJkM0U1QTFDMEM3Q2EzRGExYmRjNjYzRTg2MTVBZGU5IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogODMxNjAKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMjldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhlZmZFMkM2Y0E5QWI3OTdENDE4ZjBEOTFlQTYwODA3NzEzZjM1MzZmIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDI5XTogewogICAgICAgICAgYWRkcmVzczogIjB4NTM3NmYxRDU0M2RjYkI1QkQ0MTZjNTZDMTg5ZTRjQjczOTlmQ2NDQiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQyOSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvem9yYVRlc3RuZXQuanMKICB2YXIgc291cmNlSWQzMCA9IDU7CiAgdmFyIHpvcmFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiA5OTksCiAgICBuYW1lOiAiWm9yYSBHb2VybGkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJab3JhIEdvZXJsaSIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5ycGMuem9yYS5lbmVyZ3kiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC5ycGMuem9yYS5lbmVyZ3kiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmV4cGxvcmVyLnpvcmEuZW5lcmd5IiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQuZXhwbG9yZXIuem9yYS5lbmVyZ3kvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE4OTEyMwogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQzMF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweERiOUY1MTc5MDM2NWU3ZGMxOTZlN0QwNzI3MjhkZjM5QmU5NThBQ2UiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMzAsCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3ppcmN1aXRUZXN0bmV0LmpzCiAgdmFyIHppcmN1aXRUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0ODg5OSwKICAgIG5hbWU6ICJaaXJjdWl0IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkVUSCIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3ppcmN1aXQxLnAycGlmeS5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJaaXJjdWl0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnppcmN1aXQuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDYwNDAyODcKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQHNjdXJlL2JpcDM5L2VzbS93b3JkbGlzdHMvY3plY2guanMKICB2YXIgd29yZGxpc3QgPSBgYWJkaWthY2UKYWJlY2VkYQphZHJlc2EKYWdyZXNlCmFrY2UKYWt0b3ZrYQphbGVqCmFsa29ob2wKYW1wdXRhY2UKYW5hbmFzCmFuZHVsa2EKYW5la2RvdGEKYW5rZXRhCmFudGlrYQphbnVsb3ZhdAphcmNoYQphcm9nYW5jZQphc2ZhbHQKYXNpc3RlbnQKYXNwaXJhY2UKYXN0bWEKYXN0cm9ub20KYXRsYXMKYXRsZXRpa2EKYXRvbAphdXRvYnVzCmF6eWwKYmFia2EKYmFjaG9yCmJhY2lsCmJhY3Vsa2EKYmFkYXRlbApiYWdldGEKYmFncgpiYWhubwpiYWt0ZXJpZQpiYWxhZGEKYmFsZXRrYQpiYWxrb24KYmFsb25lawpiYWx2YW4KYmFsemEKYmFtYnVzCmJhbmtvbWF0CmJhcmJhcgpiYXJldApiYXJtYW4KYmFyb2tvCmJhcnZhCmJhdGVya2EKYmF0b2gKYmF2bG5hCmJhemFsa2EKYmF6aWxpa2EKYmF6dWthCmJlZG5hCmJlcmFuCmJlc2VkYQpiZXN0aWUKYmV0b24KYmV6aW5rYQpiZXptb2MKYmV6dGFrCmJpY3lrbApiaWRsbwpiaWZ0ZWsKYmlraW55CmJpbGFuY2UKYmlvZ3JhZgpiaW9sb2cKYml0dmEKYml6b24KYmxhaG9ieXQKYmxhdG91Y2gKYmxlY2hhCmJsZWR1bGUKYmxlc2sKYmxpa2F0CmJsaXpuYQpibG9rb3ZhdApibG91ZGl0CmJsdWQKYm9iZWsKYm9icgpib2RsaW5hCmJvZG5vdXQKYm9oYXRvc3QKYm9qa290CmJvam92YXQKYm9rb3J5cwpib2xlc3QKYm9yZWMKYm9yb3ZpY2UKYm90YQpib3ViZWwKYm91Y2hhdApib3VkYQpib3VsZQpib3VyYXQKYm94ZXIKYnJhZGF2a2EKYnJhbWJvcmEKYnJhbmthCmJyYXRyCmJyZXB0YQpicmlrZXRhCmJya28KYnJsb2gKYnJvbnoKYnJvc2tldgpicnVuZXRrYQpicnVzaW5rYQpicnpkYQpicnp5CmJ1YmxpbmEKYnVibm92YXQKYnVjaHRhCmJ1ZGl0ZWwKYnVka2EKYnVkb3ZhCmJ1ZmV0CmJ1amFyb3N0CmJ1a3ZpY2UKYnVsZG9rCmJ1bHZhCmJ1bmRhCmJ1bmtyCmJ1cnphCmJ1dGlrCmJ1dm9sCmJ1em9sYQpieWRsZXQKYnlsaW5hCmJ5dG92a2EKYnp1a290CmNhcGFydApjYXJldm5hCmNlZHIKY2VkdWxlCmNlamNoCmNlam4KY2VsYQpjZWxlcgpjZWxrZW0KY2VsbmljZQpjZW5pbmEKY2Vubm9zdApjZW5vdmthCmNlbnRydW0KY2Vuem9yCmNlc3RvcGlzCmNldGthCmNoYWx1cGEKY2hhcGFkbG8KY2hhcml0YQpjaGF0YQpjaGVjaHRhdApjaGVtaWUKY2hpY2hvdApjaGlydXJnCmNobGFkCmNobGViYQpjaGx1Yml0CmNobWVsCmNobXVyYQpjaG9ib3QKY2hvY2hvbApjaG9kYmEKY2hvbGVyYQpjaG9tb3V0CmNob3BpdApjaG9yb2JhCmNob3YKY2hyYXBvdApjaHJsaXQKY2hydApjaHJ1cApjaHRpdm9zdApjaHVkaW5hCmNodXRuYXQKY2h2YXQKY2h2aWxrYQpjaHZvc3QKY2h5YmEKY2h5c3RhdApjaHl0aXQKY2lidWxlCmNpZ2FyZXRhCmNpaGVsbmEKY2lobGEKY2lua290CmNpcmt1cwpjaXN0ZXJuYQpjaXRhY2UKY2l0cnVzCmNpemluZWMKY2l6b3N0CmNsb25hCmNva29saXYKY291dmF0CmN0aXRlbApjdG5vc3QKY3Vkbm9zdApjdWtldGEKY3VrcgpjdXBvdApjdmFrbm91dApjdmFsCmN2aWsKY3Zya290CmN5a2xpc3RhCmRhbGVrbwpkYXJlYmEKZGF0ZWwKZGF0dW0KZGNlcmEKZGViYXRhCmRlY2hvdmthCmRlY2liZWwKZGVmaWNpdApkZWZsYWNlCmRla2wKZGVrcmV0CmRlbW9rcmF0CmRlcHJlc2UKZGVyYnkKZGVza2EKZGV0ZWt0aXYKZGlrb2JyYXoKZGlrdG92YXQKZGlvZGEKZGlwbG9tCmRpc2sKZGlzcGxlagpkaXZhZGxvCmRpdm9jaApkbGFoYQpkbG91aG8KZGx1aG9waXMKZG5lcwpkb2Jybwpkb2J5dGVrCmRvY2VudApkb2NodXRpdApkb2RuZXMKZG9obGVkCmRvaG9kYQpkb2hyYQpkb2plbQpkb2puaWNlCmRva2xhZApkb2tvbGEKZG9rdG9yCmRva3VtZW50CmRvbGFyCmRvbGV2YQpkb2xpbmEKZG9tYQpkb21pbmFudApkb21sdXZpdApkb21vdgpkb251dGl0CmRvcGFkCmRvcGlzCmRvcGxuaXQKZG9wb3N1ZApkb3Byb3ZvZApkb3B1c3RpdApkb3Jheml0CmRvcm9zdApkb3J0CmRvc2FoCmRvc2xvdgpkb3N0YXRlawpkb3N1ZApkb3N5dGEKZG90YXoKZG90ZWsKZG90a25vdXQKZG91ZmF0CmRvdXRuYXQKZG92b3pjZQpkb3phZHUKZG96bmF0CmRvem9yY2UKZHJhaG90YQpkcmFrCmRyYW1hdGlrCmRyYXZlYwpkcmF6ZQpkcmRvbApkcm9ibm9zdApkcm9nZXJpZQpkcm96ZApkcnNub3N0CmRydGl0CmRyem9zdApkdWJlbgpkdWNob3ZubwpkdWRlawpkdWhhCmR1aG92a2EKZHVzaXQKZHVzbm8KZHV0b3N0CmR2b2ppY2UKZHZvcmVjCmR5bmFtaXQKZWtvbG9nCmVrb25vbWllCmVsZWt0cm9uCmVsaXBzYQplbWFpbAplbWlzZQplbW9jZQplbXBhdGllCmVwaXpvZGEKZXBvY2hhCmVwb3BlagplcG9zCmVzZWoKZXNlbmNlCmVza29ydGEKZXNreW1vCmV0aWtldGEKZXVmb3JpZQpldm9sdWNlCmV4ZWt1Y2UKZXhrdXJ6ZQpleHBlZGljZQpleHBsb3plCmV4cG9ydApleHRyYWt0CmZhY2thCmZhamZrYQpmYWt1bHRhCmZhbmF0aWsKZmFudGF6aWUKZmFybWFjaWUKZmF2b3JpdApmYXpvbGUKZmVkZXJhY2UKZmVqZXRvbgpmZW5rYQpmaWFsa2EKZmlndXJhbnQKZmlsb3pvZgpmaWx0cgpmaW5hbmNlCmZpbnRhCmZpeGFjZQpmam9yZApmbGFuZWwKZmxpcnQKZmxvdGlsYQpmb25kCmZvc2Zvcgpmb3RiYWwKZm90a2EKZm90b24KZnJha2NlCmZyZXNrYQpmcm9udGEKZnVrYXIKZnVua2NlCmZ5emlrYQpnYWxlamUKZ2FyYW50CmdlbmV0aWthCmdlb2xvZwpnaWxvdGluYQpnbGF6dXJhCmdsZWp0CmdvbGVtCmdvbGZpc3RhCmdvdGlrYQpncmFmCmdyYW1vZm9uCmdyYW51bGUKZ3JlcApncmlsCmdyb2cKZ3JvdGVza2EKZ3VtYQpoYWRpY2UKaGFkcgpoYWxhCmhhbGVua2EKaGFuYmEKaGFub3BpcwpoYXJmYQpoYXJwdW5hCmhhdnJhbgpoZWJrb3N0CmhlamthbApoZWpubwpoZWp0bWFuCmhla3RhcgpoZWxtYQpoZW1hdG9tCmhlcmVjCmhlcm5hCmhlc2xvCmhlemt5Cmhpc3RvcmlrCmhsYWRvdmthCmhsYXNpdmt5CmhsYXZhCmhsZWRhdApobGVuCmhsb2RhdmVjCmhsb2gKaGxvdXBvc3QKaGx0YXQKaGx1YmluYQpobHVjaG90YQpobWF0Cmhtb3RhCmhteXoKaG5pcwpobm9qaXZvCmhub3V0CmhvYmxpbmEKaG9ib2oKaG9jaApob2RpbnkKaG9kbGF0CmhvZG5vdGEKaG9kb3ZhdApob2pub3N0Cmhva2VqCmhvbGlua2EKaG9sa2EKaG9sdWIKaG9tb2xlCmhvbml0YmEKaG9ub3JhY2UKaG9yYWwKaG9yZGEKaG9yaXpvbnQKaG9ya28KaG9ybGl2ZWMKaG9ybW9uCmhvcm5pbmEKaG9yb3Nrb3AKaG9yc3R2bwpob3Nwb2RhCmhvc3RpbmEKaG90b3Zvc3QKaG91YmEKaG91Zgpob3VwYXQKaG91c2thCmhvdm9yCmhyYWRiYQpocmFuaWNlCmhyYXZvc3QKaHJhemRhCmhyYm9sZWsKaHJkaW5hCmhyZGxvCmhyZG9zdApocm5lawpocm9ia2EKaHJvbWFkYQpocm90Cmhyb3VkYQpocm96ZW4KaHJzdGthCmhydWJvc3QKaHJ5emF0Cmh1YmVub3N0Cmh1Ym5vdXQKaHVkYmEKaHVrb3QKaHVtcgpodXNpdGEKaHVzdG90YQpodm96ZApoeWJub3N0Cmh5ZHJhbnQKaHlnaWVuYQpoeW1uYQpoeXN0ZXJpawppZHlsa2EKaWhuZWQKaWtvbmEKaWx1emUKaW11bml0YQppbmZla2NlCmluZmxhY2UKaW5rYXNvCmlub3ZhY2UKaW5zcGVrY2UKaW50ZXJuZXQKaW52YWxpZGEKaW52ZXN0b3IKaW56ZXJjZQppcm9uaWUKamFibGtvCmphY2h0YQpqYWhvZGEKamFrbWlsZQpqYWtvc3QKamFsb3ZlYwpqYW50YXIKamFybWFyawpqYXJvCmphc2FuCmphc25vCmphdGthCmphdm9yCmphenlrCmplZGluZWMKamVkbGUKamVkbmF0ZWwKamVobGFuCmpla290CmplbGVuCmplbGl0bwpqZW1ub3N0Cmplbm9tCmplcGljZQpqZXNldGVyCmpldml0CmplemRlYwpqZXplcm8KamluYWsKamluZHkKamlub2NoCmppc2tyYQpqaXN0b3RhCmppdHJuaWNlCmppenZhCmptZW5vdmF0CmpvZ3VydApqdXJ0YQprYWJhcmV0CmthYmVsCmthYmluZXQKa2FjaG5hCmthZGV0CmthZGlkbG8Ka2FoYW4Ka2FqYWsKa2FqdXRhCmtha2FvCmtha3R1cwprYWxhbWl0YQprYWxob3R5CmthbGlicgprYWxub3N0CmthbWVyYQprYW1rb2xpdgprYW1uYQprYW5pYmFsCmthbm9lCmthbnRvcgprYXBhbGluYQprYXBlbGEKa2FwaXRvbGEKa2Fwa2EKa2FwbGUKa2Fwb3RhCmthcHIKa2FwdXN0YQprYXB5YmFyYQprYXJhbWVsCmthcm90a2EKa2FydG9uCmthc2EKa2F0YWxvZwprYXRlZHJhCmthdWNlCmthdXphCmthdmFsZWMKa2F6YWprYQprYXpldGEKa2F6aXZvc3QKa2Rla29saXYKa2Rlc2kKa2VkbHViZW4Ka2VtcAprZXJhbWlrYQpraW5vCmtsYWNlawprbGFkaXZvCmtsYW0Ka2xhcG90CmtsYXNpa2EKa2xhdW4Ka2xlYwprbGVuYmEKa2xlcGF0CmtsZXNub3V0CmtsaWQKa2xpbWEKa2xpc25hCmtsb2JvdWsKa2xva2FuCmtsb3BhCmtsb3ViCmtsdWJvdm5hCmtsdXNhdAprbHV6a29zdAprbWVuCmttaXRhdAprbW90cgprbmloYQprbm90CmtvYWxpY2UKa29iZXJlYwprb2JrYQprb2JsaWhhCmtvYnlsYQprb2NvdXIKa29ob3V0CmtvamVuZWMKa29rb3MKa29rdGVqbAprb2xhcHMKa29sZWRhCmtvbGl6ZQprb2xvCmtvbWFuZG8Ka29tZXRhCmtvbWlrCmtvbW5hdGEKa29tb3JhCmtvbXBhcwprb211bml0YQprb25hdAprb25jZXB0CmtvbmRpY2UKa29uZWMKa29uZmVzZQprb25ncmVzCmtvbmluYQprb25rdXJzCmtvbnRha3QKa29uemVydmEKa29wYW5lYwprb3BpZQprb3Bub3V0CmtvcHJvdmthCmtvcmJlbAprb3Jla3Rvcgprb3JtaWRsbwprb3JvcHRldgprb3JwdXMKa29ydW5hCmtvcnl0bwprb3J6ZXQKa29zYXRlYwprb3N0a2EKa290ZWwKa290bGV0YQprb3RvdWwKa291a2F0CmtvdXBlbG5hCmtvdXNlawprb3V6bG8Ka292Ym9qCmtvemEKa296b3JvaAprcmFiaWNlCmtyYWNoCmtyYWppbmEKa3JhbG92YXQKa3Jhc29waXMKa3JhdmF0YQprcmVkaXQKa3JlamNhcgprcmVzYmEKa3JldmV0YQprcmlrZXQKa3JpdGlrCmtyaXplCmtya2F2ZWMKa3JtZWxlYwprcm1pdm8Ka3JvY2FuCmtyb2sKa3JvbmlrYQprcm9waXQKa3JvdXBhCmtyb3ZrYQprcnRlawprcnVoYWRsbwprcnVwaWNlCmtydXRvc3QKa3J2aW5rYQprcnljaGxlCmtyeXB0YQprcnlzdGFsCmtyeXQKa3VkbGFua2EKa3VmcgprdWpub3N0Cmt1a2xhCmt1bGFqZGEKa3VsaWNoCmt1bGthCmt1bG9tZXQKa3VsdHVyYQprdW5hCmt1cG9kaXZ1Cmt1cnQKa3Vyem9yCmt1dGlsCmt2YWxpdGEKa3Zhc2lua2EKa3Zlc3RvcgpreW5vbG9nCmt5c2VsaW5hCmt5dGFyYQpreXRpY2UKa3l0a2EKa3l0b3ZlYwpreXZhZGxvCmxhYnJhZG9yCmxhY2h0YW4KbGFkbm9zdApsYWlrCmxha29tZWMKbGFtZWxhCmxhbXBhCmxhbm92a2EKbGFzaWNlCmxhc28KbGFzdHVyYQpsYXRpbmthCmxhdmluYQpsZWJrYQpsZWNrZHkKbGVkZW4KbGVkbmljZQpsZWRvdmthCmxlZHZpbmEKbGVnZW5kYQpsZWdpZQpsZWdyYWNlCmxlaGNlCmxlaGtvc3QKbGVobm91dApsZWt0dmFyCmxlbm9jaG9kCmxlbnRpbGthCmxlcGVua2EKbGVwaWRsbwpsZXRhZGxvCmxldGVjCmxldG1vCmxldG9rcnVoCmxldmhhcnQKbGV2aXRhY2UKbGV2b2JvawpsaWJyYQpsaWNob3RrYQpsaWRvamVkCmxpZHNrb3N0CmxpaG92aW5hCmxpamF2ZWMKbGlsZWsKbGltZXRrYQpsaW5pZQpsaW5rYQpsaW5vbGV1bQpsaXN0b3BhZApsaXRpbmEKbGl0b3ZhdApsb2Jpc3RhCmxvZGl2b2QKbG9naWthCmxvZ29wZWQKbG9rYWxpdGEKbG9rZXQKbG9tY292YXQKbG9wYXRhCmxvcHVjaApsb3JkCmxvc29zCmxvdHIKbG91ZGFsCmxvdWgKbG91a2EKbG91c2thdApsb3ZlYwpsc3Rpdm9zdApsdWNlcm5hCmx1Y2lmZXIKbHVtcApsdXNrCmx1c3RyYWNlCmx2aWNlCmx5cmEKbHlyaWthCmx5c2luYQptYWRhbQptYWRsbwptYWdpc3RyCm1haGFnb24KbWFqZXRlawptYWppdGVsCm1ham9yaXRhCm1ha2FrCm1ha292aWNlCm1ha3JlbGEKbWFsYmEKbWFsaW5hCm1hbG92YXQKbWFsdmljZQptYW1pbmthCm1hbmRsZQptYW5rbwptYXJub3N0Cm1hc2FrcgptYXNrb3QKbWFzb3B1c3QKbWF0aWNlCm1hdHJpa2EKbWF0dXJpdGEKbWF6YW5lYwptYXppdm8KbWF6bGl0Cm1henVya2EKbWRsb2JhCm1lY2hhbmlrCm1lZGl0YWNlCm1lZG92aW5hCm1lbGFzYQptZWxvdW4KbWVudG9sa2EKbWV0bGEKbWV0b2RhCm1ldHIKbWV6ZXJhCm1pZ3JhY2UKbWlobm91dAptaWh1bGUKbWlraW5hCm1pa3JvZm9uCm1pbGVuZWMKbWlsaW1ldHIKbWlsb3N0Cm1pbWlrYQptaW5jb3ZuYQptaW5pYmFyCm1pbm9tZXQKbWludWxvc3QKbWlza2EKbWlzdHIKbWl4b3ZhdAptbGFkb3N0Cm1saGEKbWxob3ZpbmEKbWxvawptbHNhdAptbHV2aXQKbW5pY2gKbW5vaGVtCm1vYmlsCm1vY25vc3QKbW9kZWxrYQptb2RsaXRiYQptb2h5bGEKbW9rcm8KbW9sZWt1bGEKbW9tZW50a2EKbW9uYXJjaGEKbW9ub2tsCm1vbnN0cnVtCm1vbnRvdmF0Cm1vbnp1bgptb3Nhegptb3NreXQKbW9zdAptb3RpdmFjZQptb3RvcmthCm1vdHlrYQptb3VjaGEKbW91ZHJvc3QKbW96YWlrYQptb3plawptb3pvbAptcmFtb3IKbXJhdmVuZWMKbXJrZXYKbXJ0dm9sYQptcnpldAptcnp1dG9zdAptc3RpdGVsCm11ZHJjCm11ZmxvbgptdWxhdAptdW1pZQptdW5pY2UKbXVzZXQKbXV0YWNlCm11emV1bQptdXppa2FudApteXNsaXZlYwptemRhCm5hYm91cmF0Cm5hY2h5dGF0Cm5hZGFjZQpuYWRieXRlawpuYWRob3oKbmFkb2JybwpuYWRwaXMKbmFobGFzCm5haG5hdApuYWhvZGlsZQpuYWhyYWRpdApuYWl2aXRhCm5hamVkbm91Cm5hamlzdG8KbmFqbW91dApuYWtsb25pdApuYWtvbmVjCm5ha3JtaXQKbmFsZXZvCm5hbWF6YXQKbmFtbHV2aXQKbmFub21ldHIKbmFva28KbmFvcGFrCm5hb3N0cm8KbmFwYWRhdApuYXBldm5vCm5hcGxuaXQKbmFwbm91dApuYXBvc2xlZApuYXByb3N0bwpuYXJvZGl0Cm5hcnVieQpuYXJ5Y2hsbwpuYXNhZGl0Cm5hc2VrYXQKbmFzbGVwbwpuYXN0YXQKbmF0b2xpawpuYXZlbmVrCm5hdnJjaApuYXZ6ZG9yeQpuYXp2YXQKbmViZQpuZWNoYXQKbmVja3kKbmVkYWxla28KbmVkYmF0Cm5lZHVoCm5lZ2FjZQpuZWhldApuZWhvZGEKbmVqZW4KbmVqcHJ2ZQpuZWtsaWQKbmVsaWJvc3QKbmVtaWxvc3QKbmVtb2MKbmVvY2hvdGEKbmVvbmthCm5lcG9rb2oKbmVyb3N0Cm5lcnYKbmVzbXlzbApuZXNvdWxhZApuZXR2b3IKbmV1cm9uCm5ldmluYQpuZXp2eWtsZQpuaWNvdGEKbmlqYWsKbmlrYW0KbmlrZHkKbmlrbApuaWt0ZXJhawpuaXRybwpub2NsZWgKbm9oYXZpY2UKbm9taW5hY2UKbm9yYQpub3Jlawpub3NpdGVsCm5vc25vc3QKbm91emUKbm92aW55Cm5vdm90YQpub3pkcmEKbnVkYQpudWRsZQpudWdldApudXRpdApudXRub3N0Cm51dHJpZQpueW1mYQpvYmFsCm9iYXJ2aXQKb2JhdmEKb2JkaXYKb2JlYwpvYmVobmF0Cm9iZWptb3V0Cm9iZXppdGEKb2JoYWpvYmEKb2JpbG5pY2UKb2JqYXNuaXQKb2JqZWt0Cm9ia2xvcGl0Cm9ibGFzdApvYmxlawpvYmxpYmEKb2Jsb2hhCm9ibHVkYQpvYm5vcwpvYm9oYXRpdApvYm9qZWsKb2JvdXQKb2JyYXplYwpvYnJuYQpvYnJ1YmEKb2JyeXMKb2JzYWgKb2JzbHVoYQpvYnN0YXJhdApvYnV2Cm9idmF6Cm9idmluaXQKb2J2b2QKb2J2eWtsZQpvYnl2YXRlbApvYnpvcgpvY2FzCm9jZWwKb2Nlbml0Cm9jaGxhZGl0Cm9jaG90YQpvY2hyYW5hCm9jaXRub3V0Cm9kYm9qCm9kYnl0Cm9kY2hvZApvZGNpeml0Cm9kZWJyYXQKb2Rlc2xhdApvZGV2emRhdApvZGV6dmEKb2RoYWRjZQpvZGhvZGl0Cm9kamV0Cm9kamludWQKb2RrYXoKb2Rrb3VwaXQKb2RsaXYKb2RsdWthCm9kbWxrYQpvZG9sbm9zdApvZHBhZApvZHBpcwpvZHBsb3V0Cm9kcG9yCm9kcHVzdGl0Cm9kcHlrYXQKb2RyYXprYQpvZHNvdWRpdApvZHN0dXAKb2RzdW4Kb2R0b2sKb2R0dWQKb2R2YWhhCm9kdmV0YQpvZHZvbGF0Cm9kdnJhY2V0Cm9kem5hawpvZmluYQpvZnNhamQKb2hsYXMKb2huaXNrbwpvaHJhZGEKb2hyb3ppdApvaHJ5emVrCm9rYXAKb2tlbmljZQpva2xpa2EKb2tubwpva291emxpdApva292eQpva3Jhc2EKb2tyZXMKb2tyc2VrCm9rcnVoCm9rdXBhbnQKb2t1cmthCm9rdXNpdApvbGVqbmluYQpvbGl6b3ZhdApvbWFrCm9tZWxldGEKb21leml0Cm9tbGFkaW5hCm9tbG91dmF0Cm9tbHV2YQpvbXlsCm9uZWhkeQpvcGFrb3ZhdApvcGFzZWsKb3BlcmFjZQpvcGljZQpvcGlsb3N0Cm9waXNvdmF0Cm9wb3JhCm9wb3ppY2UKb3ByYXZkdQpvcHJvdGkKb3JiaXRhbApvcmNoZXN0cgpvcmdpZQpvcmxpY2UKb3Jsb2oKb3J0ZWwKb3NhZGEKb3NjaG5vdXQKb3Npa2EKb3Npdm8Kb3NsYXZhCm9zbGVwaXQKb3Nsbml0Cm9zbG92aXQKb3Nub3ZhCm9zb2JhCm9zb2xpdApvc3BhbGVjCm9zdGVuCm9zdHJhaGEKb3N0dWRhCm9zdHljaApvc3Zvaml0Cm90ZXBsaXQKb3Rpc2sKb3RvcApvdHJoYXQKb3RybG9zdApvdHJvawpvdHJ1YnkKb3R2b3IKb3Zhbm91dApvdmFyCm92ZXMKb3ZsaXZuaXQKb3ZvY2UKb3hpZApvemRvYmEKcGFjaGF0ZWwKcGFjaWVudApwYWRvdWNoCnBhaG9yZWsKcGFrdApwYWxhbmRhCnBhbGVjCnBhbGl2bwpwYWx1YmEKcGFtZmxldApwYW1sc2VrCnBhbmVua2EKcGFuaWthCnBhbm5hCnBhbm92YXQKcGFuc3R2bwpwYW50b2ZsZQpwYXByaWthCnBhcmtldGEKcGFyb2RpZQpwYXJ0YQpwYXJ1a2EKcGFyeWJhCnBhc2VrYQpwYXNpdml0YQpwYXN0ZWxrYQpwYXRlbnQKcGF0cm9uYQpwYXZvdWsKcGF6bmVodApwYXpvdXJlawpwZWNrYQpwZWRhZ29nCnBlanNlawpwZWtsbwpwZWxvdG9uCnBlbmFsdGEKcGVuZHJlawpwZW56ZQpwZXJpc2tvcApwZXJvCnBlc3Ryb3N0CnBldGFyZGEKcGV0aWNlCnBldHJvbGVqCnBldm5pbmEKcGV4ZXNvCnBpYW5pc3RhCnBpaGEKcGlqYXZpY2UKcGlrbGUKcGlrbmlrCnBpbGluYQpwaWxub3N0CnBpbHVsa2EKcGluemV0YQpwaXBldGEKcGlzYXRlbApwaXN0b2xlCnBpdGV2bmEKcGl2bmljZQpwaXZvdmFyCnBsYWNlbnRhCnBsYWthdApwbGFtZW4KcGxhbmV0YQpwbGFzdGlrYQpwbGF0aXQKcGxhdmlkbG8KcGxhegpwbGVjaApwbGVtZW5vCnBsZW50YQpwbGVzCnBsZXRpdm8KcGxldmVsCnBsaXZhdApwbG5pdApwbG5vCnBsb2NoYQpwbG9kaW5hCnBsb21iYQpwbG91dApwbHVrCnBseW4KcG9iYXZpdApwb2J5dApwb2Nob2QKcG9jaXQKcG9jdGl2ZWMKcG9kYXQKcG9kY2VuaXQKcG9kZXBzYXQKcG9kaGxlZApwb2Rpdml0CnBvZGtsYWQKcG9kbWFuaXQKcG9kbmlrCnBvZG9iYQpwb2Rwb3JhCnBvZHJhegpwb2RzdGF0YQpwb2R2b2QKcG9kemltCnBvZXppZQpwb2hhbmthCnBvaG51dGthCnBvaG92b3IKcG9ocm9tYQpwb2h5Ygpwb2ludGEKcG9qaXN0a2EKcG9qbW91dApwb2theml0CnBva2xlcwpwb2tvagpwb2tyb2sKcG9rdXRhCnBva3luCnBvbGVkbmUKcG9saWJlawpwb2xrbm91dApwb2xvaGEKcG9seW5vbQpwb21hbHUKcG9taW5vdXQKcG9tbGthCnBvbW9jCnBvbXN0YQpwb215c2xldApwb25lY2hhdApwb25vcmthCnBvbnVyb3N0CnBvcGFkYXQKcG9wZWwKcG9waXNlawpwb3BsYWNoCnBvcHJvc2l0CnBvcHNhdApwb3B1ZApwb3JhZGNlCnBvcmNlCnBvcm9kCnBvcnVjaGEKcG9yeXYKcG9zYWRpdApwb3NlZApwb3NpbGEKcG9za29rCnBvc2xhbmVjCnBvc291ZGl0CnBvc3BvbHUKcG9zdGF2YQpwb3N1ZGVrCnBvc3lwCnBvdGFoCnBvdGthbgpwb3RsZXNrCnBvdG9tZWsKcG90cmF2YQpwb3R1cGEKcG90dm9yYQpwb3VrYXoKcG91dG8KcG91emRybwpwb3ZhaGEKcG92aWRsYQpwb3ZsYWsKcG92b3oKcG92cmNoCnBvdnN0YXQKcG92eWsKcG92emRlY2gKcG96ZHJhdgpwb3plbWVrCnBvem5hdGVrCnBvem9yCnBvenZhdApwcmFjb3ZhdApwcmFob3J5CnByYWt0aWthCnByYWxlcwpwcmFvdGVjCnByYXBvcmVrCnByYXNlCnByYXZkYQpwcmluY2lwCnBya25vCnByb2J1ZGl0CnByb2NlbnRvCnByb2Rlagpwcm9mZXNlCnByb2hyYQpwcm9qZWt0CnByb2xvbWl0CnByb21pbGUKcHJvbmlrYXQKcHJvcGFkCnByb3Jvawpwcm9zYmEKcHJvdG9uCnByb3V0ZWsKcHJvdmF6CnByc2thdmthCnByc3RlbgpwcnVka29zdApwcnV0CnBydmVrCnBydm9ob3J5CnBzYW5lYwpwc292b2QKcHN0cnVoCnB0YWN0dm8KcHViZXJ0YQpwdWNoCnB1ZGwKcHVrYXZlYwpwdWtsaW5hCnB1a3JsZQpwdWx0CnB1bXBhCnB1bmMKcHVwZW4KcHVzYQpwdXNpbmthCnB1c3RpbmEKcHV0b3ZhdApwdXR5a2EKcHlyYW1pZGEKcHlzawpweXRlbApyYWNlawpyYWNob3QKcmFkaWFjZQpyYWRuaWNlCnJhZG9uCnJhZnQKcmFnYnkKcmFrZXRhCnJha292aW5hCnJhbWVubwpyYW1wb3VjaApyYW5kZQpyYXJhY2gKcmFyaXRhCnJhc292bmEKcmFzdHIKcmF0b2xlc3QKcmF6YW5jZQpyYXppZGxvCnJlYWdvdmF0CnJlYWtjZQpyZWNlcHQKcmVkYWt0b3IKcmVmZXJlbnQKcmVmbGV4CnJlam5vawpyZWtsYW1hCnJla29yZApyZWtydXQKcmVrdG9yCnJlcHV0YWNlCnJldml6ZQpyZXZtYQpyZXZvbHZlcgpyZXplcnZhCnJpc2tvdmF0CnJpemlrbwpyb2JvdGlrYQpyb2Rva21lbgpyb2hvdmthCnJva2xlCnJva29rbwpyb21hbmV0bwpyb3Bvdm9kCnJvcHVjaGEKcm9yZWpzCnJvc29sCnJvc3RsaW5hCnJvdG1pc3RyCnJvdG9wZWQKcm90dW5kYQpyb3ViZW5rYQpyb3VjaG8Kcm91cApyb3VyYQpyb3ZpbmEKcm92bmljZQpyb3pib3IKcm96Y2hvZApyb3pkYXQKcm96ZXpuYXQKcm96aG9kY2UKcm96aW5rYQpyb3pqZXpkCnJvemthegpyb3psb2hhCnJvem1hcgpyb3pwYWQKcm96cnVjaApyb3pzYWgKcm96dG9rCnJvenVtCnJvenZvZApydWJyaWthCnJ1Y2hhZGxvCnJ1a2F2aWNlCnJ1a29waXMKcnliYQpyeWJvbG92CnJ5Y2hsb3N0CnJ5ZGxvCnJ5cGFkbG8Kcnl0aW5hCnJ5em9zdApzYWRpc3RhCnNhaGF0CnNha28Kc2FtZWMKc2FtaXpkYXQKc2Ftb3RhCnNhbml0a2EKc2FyZGlua2EKc2FzYW5rYQpzYXRlbGl0CnNhemJhCnNhemVuaWNlCnNib3IKc2Nob3ZhdApzZWJyYW5rYQpzZWNlc2UKc2VkYWRsbwpzZWRpbWVudApzZWRsbwpzZWhuYXQKc2VqbW91dApzZWtlcmEKc2VrdGEKc2VrdW5kYQpzZWt2b2plCnNlbWVubwpzZW5vCnNlcnZpcwpzZXNhZGl0CnNlc2hvcmEKc2Vza29rCnNlc2xhdApzZXN0cmEKc2VzdXYKc2VzeXBhdApzZXRiYQpzZXRpbmEKc2V0a2F0CnNldG5vdXQKc2V0cnZhdApzZXZlcgpzZXpuYW0Kc2hvZGEKc2hybm91dApzaWZvbgpzaWxuaWNlCnNpcmthCnNpcm90ZWsKc2lydXAKc2l0dWFjZQpza2FmYW5kcgpza2FsaXNrbwpza2FuemVuCnNrYXV0CnNrZXB0aWsKc2tpY2EKc2tsYWRiYQpza2xlbmljZQpza2xvCnNrbHV6CnNrb2JhCnNrb2thbgpza29ybwpza3JpcHRhCnNrcnoKc2t1cGluYQpza3Zvc3QKc2t2cm5hCnNsYWJpa2EKc2xhZGlkbG8Kc2xhbmluYQpzbGFzdApzbGF2bm9zdApzbGVkb3ZhdApzbGVwZWMKc2xldmEKc2xlemluYQpzbGliCnNsaW5hCnNsaXpuaWNlCnNsb24Kc2xvdXBlawpzbG92bwpzbHVjaApzbHVoYQpzbHVuY2UKc2x1cGthCnNsemEKc21hcmFnZApzbWV0YW5hCnNtaWxzdHZvCnNtbG91dmEKc21vZwpzbXJhZApzbXJrCnNtcnRrYQpzbXV0ZWsKc215c2wKc25hZApzbmFoYQpzbm9iCnNvYm90YQpzb2NoYQpzb2RvdmthCnNva29sCnNvcGthCnNvdHZhCnNvdWJvagpzb3VjaXQKc291ZGNlCnNvdWhsYXMKc291bGFkCnNvdW1yYWsKc291cHJhdmEKc291c2VkCnNvdXRvawpzb3V2aXNldApzcGFsb3ZuYQpzcGFzaXRlbApzcGlzCnNwbGF2CnNwb2RlawpzcG9qZW5lYwpzcG9sdQpzcG9uem9yCnNwb3Jub3N0CnNwb3VzdGEKc3ByY2hhCnNwdXN0aXQKc3JhbmRhCnNyYXoKc3JkY2UKc3JuYQpzcm5lYwpzcm92bmF0CnNycGVuCnNyc3QKc3J1YgpzdGFuaWNlCnN0YXJvc3RhCnN0YXRpa2EKc3RhdmJhCnN0ZWhubwpzdGV6a2EKc3RvZG9sYQpzdG9sZWsKc3RvcGEKc3Rvcm5vCnN0b3VwYXQKc3RyYWNoCnN0cmVzCnN0cmhub3V0CnN0cm9tCnN0cnVuYQpzdHVkbmEKc3R1cG5pY2UKc3R2b2wKc3R5awpzdWJqZWt0CnN1YnRyb3B5CnN1Y2hhcgpzdWRvc3QKc3Vrbm8Kc3VuZGF0CnN1bm91dApzdXJpa2F0YQpzdXJvdmluYQpzdmFoCnN2YWxzdHZvCnN2ZXRyCnN2YXRiYQpzdmF6ZWsKc3Zpc2xlCnN2aXRlawpzdm9ib2RhCnN2b2RpZGxvCnN2b3JrYQpzdnJhYgpzeWthdmthCnN5a290CnN5bmVrCnN5bm92ZWMKc3lwYXQKc3lwa29zdApzeXJvdm9zdApzeXNlbApzeXRvc3QKdGFibGV0a2EKdGFidWxlCnRhaG91bgp0YWplbW5vCnRhamZ1bgp0YWpnYQp0YWppdAp0YWpub3N0CnRha3Rpa2EKdGFtaGxlCnRhbXBvbgp0YW5jb3ZhdAp0YW5lYwp0YW5rZXIKdGFwZXRhCnRhdmVuaW5hCnRhemF0ZWwKdGVjaG5pa2EKdGVoZHkKdGVrdXRpbmEKdGVsZWZvbgp0ZW1ub3RhCnRlbmRlbmNlCnRlbmlzdGEKdGVub3IKdGVwbG90YQp0ZXBuYQp0ZXBydmUKdGVyYXBpZQp0ZXJtb3NrYQp0ZXh0aWwKdGljaG8KdGlza29waXMKdGl0dWxlawp0a2FkbGVjCnRrYW5pbmEKdGxhcGthCnRsZXNrYXQKdGx1a290CnRsdXBhCnRtZWwKdG9hbGV0YQp0b3BpbmthCnRvcG9sCnRvcnpvCnRvdWhhCnRvdWxlYwp0cmFkaWNlCnRyYWt0b3IKdHJhbXAKdHJhc2EKdHJhdmVyemEKdHJlZml0CnRyZXN0CnRyZXpvcgp0cmhhdmluYQp0cmhsaW5hCnRyb2NodQp0cm9qaWNlCnRyb3NrYQp0cm91YmEKdHJwY2UKdHJwaXRlbAp0cnBrb3N0CnRydWJlYwp0cnVjaGxpdAp0cnVobGljZQp0cnVzCnRydmF0CnR1ZHkKdHVobm91dAp0dWhvc3QKdHVuZHJhCnR1cmlzdGEKdHVybmFqCnR1emVtc2tvCnR2YXJvaAp0dm9yYmEKdHZyZG9zdAp0dnJ6CnR5Z3IKdHlrZXYKdWJvaG9zdAp1Ym96ZQp1YnJhdAp1YnJvdXNlawp1YnJ1cwp1Ynl0b3ZuYQp1Y2hvCnVjdGl2b3N0CnVkaXZpdAp1aHJhZGl0CnVqZWRuYXQKdWppc3RpdAp1am1vdXQKdWthemF0ZWwKdWtsaWRuaXQKdWtsb25pdAp1a290dml0CnVrcm9qaXQKdWxpY2UKdWxpdGEKdWxvdml0CnVteXZhZGxvCnVuYXZpdAp1bmlmb3JtYQp1bmlrbm91dAp1cGFkbm91dAp1cGxhdG5pdAp1cGx5bm91dAp1cG91dGF0CnVwcmF2aXQKdXJhbgp1cmF6aXQKdXNlZG5vdXQKdXNpbG92YXQKdXNtcnRpdAp1c25hZG5pdAp1c25vdXQKdXNvdWRpdAp1c3RsYXQKdXN0cm5vdXQKdXRhaG92YXQKdXRrYXQKdXRsdW1pdAp1dG9ub3V0CnV0b3BlbmVjCnV0cm91c2l0CnV2YWxpdAp1dm9sbml0CnV2b3pvdmthCnV6ZHJhdml0CnV6ZWwKdXplbmluYQp1emxpbmEKdXpuYXQKdmFnb24KdmFsY2hhCnZhbG91bgp2YW5hCnZhbmRhbAp2YW5pbGthCnZhcmFuCnZhcmhhbnkKdmFyb3ZhdAp2Y2Vsa3UKdmNob2QKdmRvdmEKdmVkcm8KdmVnZXRhY2UKdmVqY2UKdmVsYmxvdWQKdmVsZXRyaAp2ZWxpdGVsCnZlbG1vYwp2ZWxyeWJhCnZlbmtvdgp2ZXJhbmRhCnZlcnplCnZlc2Vsa2EKdmVza3J6ZQp2ZXNuaWNlCnZlc3BvZHUKdmVzdGEKdmV0ZXJpbmEKdmV2ZXJrYQp2aWJyYWNlCnZpY2hyCnZpZGVvaHJhCnZpZGluYQp2aWRsZQp2aWxhCnZpbmljZQp2aXNldAp2aXRhbGl0YQp2aXplCnZpeml0a2EKdmplemQKdmtsYWQKdmt1cwp2bGFqa2EKdmxhawp2bGFzZWMKdmxldm8Kdmxoa29zdAp2bGl2CnZsbm92a2EKdmxvdXBhdAp2bnVjb3ZhdAp2bnVrCnZvZGEKdm9kaXZvc3QKdm9kb3puYWsKdm9kc3R2bwp2b2plbnNreQp2b2puYQp2b2pza28Kdm9sYW50CnZvbGJhCnZvbGl0CnZvbG5vCnZvc2tvdmthCnZvemlkbG8Kdm96b3ZuYQp2cHJhdm8KdnJhYmVjCnZyYWNldAp2cmFoCnZyYXRhCnZyYmEKdnJjaG9sZWsKdnJoYXQKdnJzdHZhCnZydHVsZQp2c2FkaXQKdnN0b3VwaXQKdnN0dXAKdnRpcAp2eWJhdml0CnZ5YnJhdAp2eWNob3ZhdAp2eWRhdAp2eWRyYQp2eWZvdGl0CnZ5aGxlZGF0CnZ5aG5vdXQKdnlob2RpdAp2eWhyYWRpdAp2eWh1Yml0CnZ5amFzbml0CnZ5amV0CnZ5am1vdXQKdnlrbG9waXQKdnlrb25hdAp2eWxla2F0CnZ5bWF6YXQKdnltZXppdAp2eW1pemV0CnZ5bXlzbGV0CnZ5bmVjaGF0CnZ5bmlrYXQKdnludXRpdAp2eXBhZGF0CnZ5cGxhdGl0CnZ5cHJhdml0CnZ5cHVzdGl0CnZ5cmF6aXQKdnlyb3ZuYXQKdnlydmF0CnZ5c2xvdml0CnZ5c29rbwp2eXN0YXZpdAp2eXN1bm91dAp2eXN5cGF0CnZ5dGFzaXQKdnl0ZXNhdAp2eXRyYXRpdAp2eXZpbm91dAp2eXZvbGF0CnZ5dnJoZWwKdnl6ZG9iaXQKdnl6bmF0CnZ6YWR1CnZ6YnVkaXQKdnpjaG9waXQKdnpkb3IKdnpkdWNoCnZ6ZHljaGF0CnZ6ZXN0dXAKdnpobGVkZW0KdnprYXoKdnpseWthdAp2em5pawp2em9yZWsKdnpwb3VyYQp2enRhaAp2enRlawp4eWxvZm9uCnphYnJhdAp6YWJ5ZGxldAp6YWNob3ZhdAp6YWRhcm1vCnphZHVzaXQKemFmb3VrYXQKemFobHRpdAp6YWhvZGl0CnphaHJhZGEKemFoeW5vdXQKemFqYXRlYwp6YWpldAp6YWppc3RpdAp6YWtsZXBhdAp6YWtvdXBpdAp6YWxlcGl0CnphbWV6aXQKemFtb3RhdAp6YW15c2xldAp6YW5lY2hhdAp6YW5pa2F0CnphcGxhdGl0CnphcG9qaXQKemFwc2F0CnphcmF6aXQKemFzdGF2aXQKemFzdW5vdXQKemF0YWppdAp6YXRlbW5pdAp6YXRrbm91dAp6YXVqbW91dAp6YXZhbGl0CnphdmVsZXQKemF2aW5pdAp6YXZvbGF0CnphdnJ0YXQKemF6dm9uaXQKemJhdml0CnpicnVzdQp6YnVkb3ZhdAp6Ynl0ZWsKemRhbGVrYQp6ZGFybWEKemRhdG5vc3QKemRpdm8KemRvYml0Cnpkcm9qCnpkdmloCnpkeW1hZGxvCnplbGVuaW5hCnplbWFuCnplbWluYQp6ZXB0YXQKemV6YWR1CnplemRvbGEKemhhdGl0CnpobHRub3V0CnpobHVib2thCnpob3Rvdml0CnpocnViYQp6aW1hCnppbW5pY2UKemplbW5pdAp6a2xhbWF0Cnprb3VtYXQKemtyYXRrYQp6a3VtYXZrYQp6bGF0bwp6bGVoa2EKemxvYmEKemxvbQp6bG9zdAp6bG96dnlrCnptYXBvdmF0CnptYXIKem1hdGVrCnptaWplCnptaXpldAp6bW9jbml0Cnptb2RyYXQKem1yemxpbmEKem11dG92YXQKem5hawp6bmFsb3N0CnpuYW1lbmF0Cnpub3Z1CnpvYnJheml0CnpvdGF2aXQKem91YmVrCnpvdWZhbGUKenBsb2RpdAp6cG9tYWxpdAp6cHJhdmEKenByb3N0aXQKenBydWRrYQp6cHJ2dQp6cmFkYQp6cmFuaXQKenJjYWRsbwp6cm5pdG9zdAp6cm5vCnpyb3ZuYQp6cnljaGxpdAp6cnphdm9zdAp6dGljaGEKenRyYXRpdAp6dWJvdmluYQp6dWJyCnp2ZWRub3V0Cnp2ZW5rdQp6dmVzZWxhCnp2b24KenZyYXQKenZ1a292b2QKenZ5a2Auc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy9lbmdsaXNoLmpzCiAgdmFyIHdvcmRsaXN0MiA9IGBhYmFuZG9uCmFiaWxpdHkKYWJsZQphYm91dAphYm92ZQphYnNlbnQKYWJzb3JiCmFic3RyYWN0CmFic3VyZAphYnVzZQphY2Nlc3MKYWNjaWRlbnQKYWNjb3VudAphY2N1c2UKYWNoaWV2ZQphY2lkCmFjb3VzdGljCmFjcXVpcmUKYWNyb3NzCmFjdAphY3Rpb24KYWN0b3IKYWN0cmVzcwphY3R1YWwKYWRhcHQKYWRkCmFkZGljdAphZGRyZXNzCmFkanVzdAphZG1pdAphZHVsdAphZHZhbmNlCmFkdmljZQphZXJvYmljCmFmZmFpcgphZmZvcmQKYWZyYWlkCmFnYWluCmFnZQphZ2VudAphZ3JlZQphaGVhZAphaW0KYWlyCmFpcnBvcnQKYWlzbGUKYWxhcm0KYWxidW0KYWxjb2hvbAphbGVydAphbGllbgphbGwKYWxsZXkKYWxsb3cKYWxtb3N0CmFsb25lCmFscGhhCmFscmVhZHkKYWxzbwphbHRlcgphbHdheXMKYW1hdGV1cgphbWF6aW5nCmFtb25nCmFtb3VudAphbXVzZWQKYW5hbHlzdAphbmNob3IKYW5jaWVudAphbmdlcgphbmdsZQphbmdyeQphbmltYWwKYW5rbGUKYW5ub3VuY2UKYW5udWFsCmFub3RoZXIKYW5zd2VyCmFudGVubmEKYW50aXF1ZQphbnhpZXR5CmFueQphcGFydAphcG9sb2d5CmFwcGVhcgphcHBsZQphcHByb3ZlCmFwcmlsCmFyY2gKYXJjdGljCmFyZWEKYXJlbmEKYXJndWUKYXJtCmFybWVkCmFybW9yCmFybXkKYXJvdW5kCmFycmFuZ2UKYXJyZXN0CmFycml2ZQphcnJvdwphcnQKYXJ0ZWZhY3QKYXJ0aXN0CmFydHdvcmsKYXNrCmFzcGVjdAphc3NhdWx0CmFzc2V0CmFzc2lzdAphc3N1bWUKYXN0aG1hCmF0aGxldGUKYXRvbQphdHRhY2sKYXR0ZW5kCmF0dGl0dWRlCmF0dHJhY3QKYXVjdGlvbgphdWRpdAphdWd1c3QKYXVudAphdXRob3IKYXV0bwphdXR1bW4KYXZlcmFnZQphdm9jYWRvCmF2b2lkCmF3YWtlCmF3YXJlCmF3YXkKYXdlc29tZQphd2Z1bAphd2t3YXJkCmF4aXMKYmFieQpiYWNoZWxvcgpiYWNvbgpiYWRnZQpiYWcKYmFsYW5jZQpiYWxjb255CmJhbGwKYmFtYm9vCmJhbmFuYQpiYW5uZXIKYmFyCmJhcmVseQpiYXJnYWluCmJhcnJlbApiYXNlCmJhc2ljCmJhc2tldApiYXR0bGUKYmVhY2gKYmVhbgpiZWF1dHkKYmVjYXVzZQpiZWNvbWUKYmVlZgpiZWZvcmUKYmVnaW4KYmVoYXZlCmJlaGluZApiZWxpZXZlCmJlbG93CmJlbHQKYmVuY2gKYmVuZWZpdApiZXN0CmJldHJheQpiZXR0ZXIKYmV0d2VlbgpiZXlvbmQKYmljeWNsZQpiaWQKYmlrZQpiaW5kCmJpb2xvZ3kKYmlyZApiaXJ0aApiaXR0ZXIKYmxhY2sKYmxhZGUKYmxhbWUKYmxhbmtldApibGFzdApibGVhawpibGVzcwpibGluZApibG9vZApibG9zc29tCmJsb3VzZQpibHVlCmJsdXIKYmx1c2gKYm9hcmQKYm9hdApib2R5CmJvaWwKYm9tYgpib25lCmJvbnVzCmJvb2sKYm9vc3QKYm9yZGVyCmJvcmluZwpib3Jyb3cKYm9zcwpib3R0b20KYm91bmNlCmJveApib3kKYnJhY2tldApicmFpbgpicmFuZApicmFzcwpicmF2ZQpicmVhZApicmVlemUKYnJpY2sKYnJpZGdlCmJyaWVmCmJyaWdodApicmluZwpicmlzawpicm9jY29saQpicm9rZW4KYnJvbnplCmJyb29tCmJyb3RoZXIKYnJvd24KYnJ1c2gKYnViYmxlCmJ1ZGR5CmJ1ZGdldApidWZmYWxvCmJ1aWxkCmJ1bGIKYnVsawpidWxsZXQKYnVuZGxlCmJ1bmtlcgpidXJkZW4KYnVyZ2VyCmJ1cnN0CmJ1cwpidXNpbmVzcwpidXN5CmJ1dHRlcgpidXllcgpidXp6CmNhYmJhZ2UKY2FiaW4KY2FibGUKY2FjdHVzCmNhZ2UKY2FrZQpjYWxsCmNhbG0KY2FtZXJhCmNhbXAKY2FuCmNhbmFsCmNhbmNlbApjYW5keQpjYW5ub24KY2Fub2UKY2FudmFzCmNhbnlvbgpjYXBhYmxlCmNhcGl0YWwKY2FwdGFpbgpjYXIKY2FyYm9uCmNhcmQKY2FyZ28KY2FycGV0CmNhcnJ5CmNhcnQKY2FzZQpjYXNoCmNhc2lubwpjYXN0bGUKY2FzdWFsCmNhdApjYXRhbG9nCmNhdGNoCmNhdGVnb3J5CmNhdHRsZQpjYXVnaHQKY2F1c2UKY2F1dGlvbgpjYXZlCmNlaWxpbmcKY2VsZXJ5CmNlbWVudApjZW5zdXMKY2VudHVyeQpjZXJlYWwKY2VydGFpbgpjaGFpcgpjaGFsawpjaGFtcGlvbgpjaGFuZ2UKY2hhb3MKY2hhcHRlcgpjaGFyZ2UKY2hhc2UKY2hhdApjaGVhcApjaGVjawpjaGVlc2UKY2hlZgpjaGVycnkKY2hlc3QKY2hpY2tlbgpjaGllZgpjaGlsZApjaGltbmV5CmNob2ljZQpjaG9vc2UKY2hyb25pYwpjaHVja2xlCmNodW5rCmNodXJuCmNpZ2FyCmNpbm5hbW9uCmNpcmNsZQpjaXRpemVuCmNpdHkKY2l2aWwKY2xhaW0KY2xhcApjbGFyaWZ5CmNsYXcKY2xheQpjbGVhbgpjbGVyawpjbGV2ZXIKY2xpY2sKY2xpZW50CmNsaWZmCmNsaW1iCmNsaW5pYwpjbGlwCmNsb2NrCmNsb2cKY2xvc2UKY2xvdGgKY2xvdWQKY2xvd24KY2x1YgpjbHVtcApjbHVzdGVyCmNsdXRjaApjb2FjaApjb2FzdApjb2NvbnV0CmNvZGUKY29mZmVlCmNvaWwKY29pbgpjb2xsZWN0CmNvbG9yCmNvbHVtbgpjb21iaW5lCmNvbWUKY29tZm9ydApjb21pYwpjb21tb24KY29tcGFueQpjb25jZXJ0CmNvbmR1Y3QKY29uZmlybQpjb25ncmVzcwpjb25uZWN0CmNvbnNpZGVyCmNvbnRyb2wKY29udmluY2UKY29vawpjb29sCmNvcHBlcgpjb3B5CmNvcmFsCmNvcmUKY29ybgpjb3JyZWN0CmNvc3QKY290dG9uCmNvdWNoCmNvdW50cnkKY291cGxlCmNvdXJzZQpjb3VzaW4KY292ZXIKY295b3RlCmNyYWNrCmNyYWRsZQpjcmFmdApjcmFtCmNyYW5lCmNyYXNoCmNyYXRlcgpjcmF3bApjcmF6eQpjcmVhbQpjcmVkaXQKY3JlZWsKY3Jldwpjcmlja2V0CmNyaW1lCmNyaXNwCmNyaXRpYwpjcm9wCmNyb3NzCmNyb3VjaApjcm93ZApjcnVjaWFsCmNydWVsCmNydWlzZQpjcnVtYmxlCmNydW5jaApjcnVzaApjcnkKY3J5c3RhbApjdWJlCmN1bHR1cmUKY3VwCmN1cGJvYXJkCmN1cmlvdXMKY3VycmVudApjdXJ0YWluCmN1cnZlCmN1c2hpb24KY3VzdG9tCmN1dGUKY3ljbGUKZGFkCmRhbWFnZQpkYW1wCmRhbmNlCmRhbmdlcgpkYXJpbmcKZGFzaApkYXVnaHRlcgpkYXduCmRheQpkZWFsCmRlYmF0ZQpkZWJyaXMKZGVjYWRlCmRlY2VtYmVyCmRlY2lkZQpkZWNsaW5lCmRlY29yYXRlCmRlY3JlYXNlCmRlZXIKZGVmZW5zZQpkZWZpbmUKZGVmeQpkZWdyZWUKZGVsYXkKZGVsaXZlcgpkZW1hbmQKZGVtaXNlCmRlbmlhbApkZW50aXN0CmRlbnkKZGVwYXJ0CmRlcGVuZApkZXBvc2l0CmRlcHRoCmRlcHV0eQpkZXJpdmUKZGVzY3JpYmUKZGVzZXJ0CmRlc2lnbgpkZXNrCmRlc3BhaXIKZGVzdHJveQpkZXRhaWwKZGV0ZWN0CmRldmVsb3AKZGV2aWNlCmRldm90ZQpkaWFncmFtCmRpYWwKZGlhbW9uZApkaWFyeQpkaWNlCmRpZXNlbApkaWV0CmRpZmZlcgpkaWdpdGFsCmRpZ25pdHkKZGlsZW1tYQpkaW5uZXIKZGlub3NhdXIKZGlyZWN0CmRpcnQKZGlzYWdyZWUKZGlzY292ZXIKZGlzZWFzZQpkaXNoCmRpc21pc3MKZGlzb3JkZXIKZGlzcGxheQpkaXN0YW5jZQpkaXZlcnQKZGl2aWRlCmRpdm9yY2UKZGl6enkKZG9jdG9yCmRvY3VtZW50CmRvZwpkb2xsCmRvbHBoaW4KZG9tYWluCmRvbmF0ZQpkb25rZXkKZG9ub3IKZG9vcgpkb3NlCmRvdWJsZQpkb3ZlCmRyYWZ0CmRyYWdvbgpkcmFtYQpkcmFzdGljCmRyYXcKZHJlYW0KZHJlc3MKZHJpZnQKZHJpbGwKZHJpbmsKZHJpcApkcml2ZQpkcm9wCmRydW0KZHJ5CmR1Y2sKZHVtYgpkdW5lCmR1cmluZwpkdXN0CmR1dGNoCmR1dHkKZHdhcmYKZHluYW1pYwplYWdlcgplYWdsZQplYXJseQplYXJuCmVhcnRoCmVhc2lseQplYXN0CmVhc3kKZWNobwplY29sb2d5CmVjb25vbXkKZWRnZQplZGl0CmVkdWNhdGUKZWZmb3J0CmVnZwplaWdodAplaXRoZXIKZWxib3cKZWxkZXIKZWxlY3RyaWMKZWxlZ2FudAplbGVtZW50CmVsZXBoYW50CmVsZXZhdG9yCmVsaXRlCmVsc2UKZW1iYXJrCmVtYm9keQplbWJyYWNlCmVtZXJnZQplbW90aW9uCmVtcGxveQplbXBvd2VyCmVtcHR5CmVuYWJsZQplbmFjdAplbmQKZW5kbGVzcwplbmRvcnNlCmVuZW15CmVuZXJneQplbmZvcmNlCmVuZ2FnZQplbmdpbmUKZW5oYW5jZQplbmpveQplbmxpc3QKZW5vdWdoCmVucmljaAplbnJvbGwKZW5zdXJlCmVudGVyCmVudGlyZQplbnRyeQplbnZlbG9wZQplcGlzb2RlCmVxdWFsCmVxdWlwCmVyYQplcmFzZQplcm9kZQplcm9zaW9uCmVycm9yCmVydXB0CmVzY2FwZQplc3NheQplc3NlbmNlCmVzdGF0ZQpldGVybmFsCmV0aGljcwpldmlkZW5jZQpldmlsCmV2b2tlCmV2b2x2ZQpleGFjdApleGFtcGxlCmV4Y2VzcwpleGNoYW5nZQpleGNpdGUKZXhjbHVkZQpleGN1c2UKZXhlY3V0ZQpleGVyY2lzZQpleGhhdXN0CmV4aGliaXQKZXhpbGUKZXhpc3QKZXhpdApleG90aWMKZXhwYW5kCmV4cGVjdApleHBpcmUKZXhwbGFpbgpleHBvc2UKZXhwcmVzcwpleHRlbmQKZXh0cmEKZXllCmV5ZWJyb3cKZmFicmljCmZhY2UKZmFjdWx0eQpmYWRlCmZhaW50CmZhaXRoCmZhbGwKZmFsc2UKZmFtZQpmYW1pbHkKZmFtb3VzCmZhbgpmYW5jeQpmYW50YXN5CmZhcm0KZmFzaGlvbgpmYXQKZmF0YWwKZmF0aGVyCmZhdGlndWUKZmF1bHQKZmF2b3JpdGUKZmVhdHVyZQpmZWJydWFyeQpmZWRlcmFsCmZlZQpmZWVkCmZlZWwKZmVtYWxlCmZlbmNlCmZlc3RpdmFsCmZldGNoCmZldmVyCmZldwpmaWJlcgpmaWN0aW9uCmZpZWxkCmZpZ3VyZQpmaWxlCmZpbG0KZmlsdGVyCmZpbmFsCmZpbmQKZmluZQpmaW5nZXIKZmluaXNoCmZpcmUKZmlybQpmaXJzdApmaXNjYWwKZmlzaApmaXQKZml0bmVzcwpmaXgKZmxhZwpmbGFtZQpmbGFzaApmbGF0CmZsYXZvcgpmbGVlCmZsaWdodApmbGlwCmZsb2F0CmZsb2NrCmZsb29yCmZsb3dlcgpmbHVpZApmbHVzaApmbHkKZm9hbQpmb2N1cwpmb2cKZm9pbApmb2xkCmZvbGxvdwpmb29kCmZvb3QKZm9yY2UKZm9yZXN0CmZvcmdldApmb3JrCmZvcnR1bmUKZm9ydW0KZm9yd2FyZApmb3NzaWwKZm9zdGVyCmZvdW5kCmZveApmcmFnaWxlCmZyYW1lCmZyZXF1ZW50CmZyZXNoCmZyaWVuZApmcmluZ2UKZnJvZwpmcm9udApmcm9zdApmcm93bgpmcm96ZW4KZnJ1aXQKZnVlbApmdW4KZnVubnkKZnVybmFjZQpmdXJ5CmZ1dHVyZQpnYWRnZXQKZ2FpbgpnYWxheHkKZ2FsbGVyeQpnYW1lCmdhcApnYXJhZ2UKZ2FyYmFnZQpnYXJkZW4KZ2FybGljCmdhcm1lbnQKZ2FzCmdhc3AKZ2F0ZQpnYXRoZXIKZ2F1Z2UKZ2F6ZQpnZW5lcmFsCmdlbml1cwpnZW5yZQpnZW50bGUKZ2VudWluZQpnZXN0dXJlCmdob3N0CmdpYW50CmdpZnQKZ2lnZ2xlCmdpbmdlcgpnaXJhZmZlCmdpcmwKZ2l2ZQpnbGFkCmdsYW5jZQpnbGFyZQpnbGFzcwpnbGlkZQpnbGltcHNlCmdsb2JlCmdsb29tCmdsb3J5Cmdsb3ZlCmdsb3cKZ2x1ZQpnb2F0CmdvZGRlc3MKZ29sZApnb29kCmdvb3NlCmdvcmlsbGEKZ29zcGVsCmdvc3NpcApnb3Zlcm4KZ293bgpncmFiCmdyYWNlCmdyYWluCmdyYW50CmdyYXBlCmdyYXNzCmdyYXZpdHkKZ3JlYXQKZ3JlZW4KZ3JpZApncmllZgpncml0Cmdyb2NlcnkKZ3JvdXAKZ3JvdwpncnVudApndWFyZApndWVzcwpndWlkZQpndWlsdApndWl0YXIKZ3VuCmd5bQpoYWJpdApoYWlyCmhhbGYKaGFtbWVyCmhhbXN0ZXIKaGFuZApoYXBweQpoYXJib3IKaGFyZApoYXJzaApoYXJ2ZXN0CmhhdApoYXZlCmhhd2sKaGF6YXJkCmhlYWQKaGVhbHRoCmhlYXJ0CmhlYXZ5CmhlZGdlaG9nCmhlaWdodApoZWxsbwpoZWxtZXQKaGVscApoZW4KaGVybwpoaWRkZW4KaGlnaApoaWxsCmhpbnQKaGlwCmhpcmUKaGlzdG9yeQpob2JieQpob2NrZXkKaG9sZApob2xlCmhvbGlkYXkKaG9sbG93CmhvbWUKaG9uZXkKaG9vZApob3BlCmhvcm4KaG9ycm9yCmhvcnNlCmhvc3BpdGFsCmhvc3QKaG90ZWwKaG91cgpob3ZlcgpodWIKaHVnZQpodW1hbgpodW1ibGUKaHVtb3IKaHVuZHJlZApodW5ncnkKaHVudApodXJkbGUKaHVycnkKaHVydApodXNiYW5kCmh5YnJpZAppY2UKaWNvbgppZGVhCmlkZW50aWZ5CmlkbGUKaWdub3JlCmlsbAppbGxlZ2FsCmlsbG5lc3MKaW1hZ2UKaW1pdGF0ZQppbW1lbnNlCmltbXVuZQppbXBhY3QKaW1wb3NlCmltcHJvdmUKaW1wdWxzZQppbmNoCmluY2x1ZGUKaW5jb21lCmluY3JlYXNlCmluZGV4CmluZGljYXRlCmluZG9vcgppbmR1c3RyeQppbmZhbnQKaW5mbGljdAppbmZvcm0KaW5oYWxlCmluaGVyaXQKaW5pdGlhbAppbmplY3QKaW5qdXJ5CmlubWF0ZQppbm5lcgppbm5vY2VudAppbnB1dAppbnF1aXJ5Cmluc2FuZQppbnNlY3QKaW5zaWRlCmluc3BpcmUKaW5zdGFsbAppbnRhY3QKaW50ZXJlc3QKaW50bwppbnZlc3QKaW52aXRlCmludm9sdmUKaXJvbgppc2xhbmQKaXNvbGF0ZQppc3N1ZQppdGVtCml2b3J5CmphY2tldApqYWd1YXIKamFyCmphenoKamVhbG91cwpqZWFucwpqZWxseQpqZXdlbApqb2IKam9pbgpqb2tlCmpvdXJuZXkKam95Cmp1ZGdlCmp1aWNlCmp1bXAKanVuZ2xlCmp1bmlvcgpqdW5rCmp1c3QKa2FuZ2Fyb28Ka2VlbgprZWVwCmtldGNodXAKa2V5CmtpY2sKa2lkCmtpZG5leQpraW5kCmtpbmdkb20Ka2lzcwpraXQKa2l0Y2hlbgpraXRlCmtpdHRlbgpraXdpCmtuZWUKa25pZmUKa25vY2sKa25vdwpsYWIKbGFiZWwKbGFib3IKbGFkZGVyCmxhZHkKbGFrZQpsYW1wCmxhbmd1YWdlCmxhcHRvcApsYXJnZQpsYXRlcgpsYXRpbgpsYXVnaApsYXVuZHJ5CmxhdmEKbGF3Cmxhd24KbGF3c3VpdApsYXllcgpsYXp5CmxlYWRlcgpsZWFmCmxlYXJuCmxlYXZlCmxlY3R1cmUKbGVmdApsZWcKbGVnYWwKbGVnZW5kCmxlaXN1cmUKbGVtb24KbGVuZApsZW5ndGgKbGVucwpsZW9wYXJkCmxlc3NvbgpsZXR0ZXIKbGV2ZWwKbGlhcgpsaWJlcnR5CmxpYnJhcnkKbGljZW5zZQpsaWZlCmxpZnQKbGlnaHQKbGlrZQpsaW1iCmxpbWl0CmxpbmsKbGlvbgpsaXF1aWQKbGlzdApsaXR0bGUKbGl2ZQpsaXphcmQKbG9hZApsb2FuCmxvYnN0ZXIKbG9jYWwKbG9jawpsb2dpYwpsb25lbHkKbG9uZwpsb29wCmxvdHRlcnkKbG91ZApsb3VuZ2UKbG92ZQpsb3lhbApsdWNreQpsdWdnYWdlCmx1bWJlcgpsdW5hcgpsdW5jaApsdXh1cnkKbHlyaWNzCm1hY2hpbmUKbWFkCm1hZ2ljCm1hZ25ldAptYWlkCm1haWwKbWFpbgptYWpvcgptYWtlCm1hbW1hbAptYW4KbWFuYWdlCm1hbmRhdGUKbWFuZ28KbWFuc2lvbgptYW51YWwKbWFwbGUKbWFyYmxlCm1hcmNoCm1hcmdpbgptYXJpbmUKbWFya2V0Cm1hcnJpYWdlCm1hc2sKbWFzcwptYXN0ZXIKbWF0Y2gKbWF0ZXJpYWwKbWF0aAptYXRyaXgKbWF0dGVyCm1heGltdW0KbWF6ZQptZWFkb3cKbWVhbgptZWFzdXJlCm1lYXQKbWVjaGFuaWMKbWVkYWwKbWVkaWEKbWVsb2R5Cm1lbHQKbWVtYmVyCm1lbW9yeQptZW50aW9uCm1lbnUKbWVyY3kKbWVyZ2UKbWVyaXQKbWVycnkKbWVzaAptZXNzYWdlCm1ldGFsCm1ldGhvZAptaWRkbGUKbWlkbmlnaHQKbWlsawptaWxsaW9uCm1pbWljCm1pbmQKbWluaW11bQptaW5vcgptaW51dGUKbWlyYWNsZQptaXJyb3IKbWlzZXJ5Cm1pc3MKbWlzdGFrZQptaXgKbWl4ZWQKbWl4dHVyZQptb2JpbGUKbW9kZWwKbW9kaWZ5Cm1vbQptb21lbnQKbW9uaXRvcgptb25rZXkKbW9uc3Rlcgptb250aAptb29uCm1vcmFsCm1vcmUKbW9ybmluZwptb3NxdWl0bwptb3RoZXIKbW90aW9uCm1vdG9yCm1vdW50YWluCm1vdXNlCm1vdmUKbW92aWUKbXVjaAptdWZmaW4KbXVsZQptdWx0aXBseQptdXNjbGUKbXVzZXVtCm11c2hyb29tCm11c2ljCm11c3QKbXV0dWFsCm15c2VsZgpteXN0ZXJ5Cm15dGgKbmFpdmUKbmFtZQpuYXBraW4KbmFycm93Cm5hc3R5Cm5hdGlvbgpuYXR1cmUKbmVhcgpuZWNrCm5lZWQKbmVnYXRpdmUKbmVnbGVjdApuZWl0aGVyCm5lcGhldwpuZXJ2ZQpuZXN0Cm5ldApuZXR3b3JrCm5ldXRyYWwKbmV2ZXIKbmV3cwpuZXh0Cm5pY2UKbmlnaHQKbm9ibGUKbm9pc2UKbm9taW5lZQpub29kbGUKbm9ybWFsCm5vcnRoCm5vc2UKbm90YWJsZQpub3RlCm5vdGhpbmcKbm90aWNlCm5vdmVsCm5vdwpudWNsZWFyCm51bWJlcgpudXJzZQpudXQKb2FrCm9iZXkKb2JqZWN0Cm9ibGlnZQpvYnNjdXJlCm9ic2VydmUKb2J0YWluCm9idmlvdXMKb2NjdXIKb2NlYW4Kb2N0b2JlcgpvZG9yCm9mZgpvZmZlcgpvZmZpY2UKb2Z0ZW4Kb2lsCm9rYXkKb2xkCm9saXZlCm9seW1waWMKb21pdApvbmNlCm9uZQpvbmlvbgpvbmxpbmUKb25seQpvcGVuCm9wZXJhCm9waW5pb24Kb3Bwb3NlCm9wdGlvbgpvcmFuZ2UKb3JiaXQKb3JjaGFyZApvcmRlcgpvcmRpbmFyeQpvcmdhbgpvcmllbnQKb3JpZ2luYWwKb3JwaGFuCm9zdHJpY2gKb3RoZXIKb3V0ZG9vcgpvdXRlcgpvdXRwdXQKb3V0c2lkZQpvdmFsCm92ZW4Kb3Zlcgpvd24Kb3duZXIKb3h5Z2VuCm95c3Rlcgpvem9uZQpwYWN0CnBhZGRsZQpwYWdlCnBhaXIKcGFsYWNlCnBhbG0KcGFuZGEKcGFuZWwKcGFuaWMKcGFudGhlcgpwYXBlcgpwYXJhZGUKcGFyZW50CnBhcmsKcGFycm90CnBhcnR5CnBhc3MKcGF0Y2gKcGF0aApwYXRpZW50CnBhdHJvbApwYXR0ZXJuCnBhdXNlCnBhdmUKcGF5bWVudApwZWFjZQpwZWFudXQKcGVhcgpwZWFzYW50CnBlbGljYW4KcGVuCnBlbmFsdHkKcGVuY2lsCnBlb3BsZQpwZXBwZXIKcGVyZmVjdApwZXJtaXQKcGVyc29uCnBldApwaG9uZQpwaG90bwpwaHJhc2UKcGh5c2ljYWwKcGlhbm8KcGljbmljCnBpY3R1cmUKcGllY2UKcGlnCnBpZ2VvbgpwaWxsCnBpbG90CnBpbmsKcGlvbmVlcgpwaXBlCnBpc3RvbApwaXRjaApwaXp6YQpwbGFjZQpwbGFuZXQKcGxhc3RpYwpwbGF0ZQpwbGF5CnBsZWFzZQpwbGVkZ2UKcGx1Y2sKcGx1ZwpwbHVuZ2UKcG9lbQpwb2V0CnBvaW50CnBvbGFyCnBvbGUKcG9saWNlCnBvbmQKcG9ueQpwb29sCnBvcHVsYXIKcG9ydGlvbgpwb3NpdGlvbgpwb3NzaWJsZQpwb3N0CnBvdGF0bwpwb3R0ZXJ5CnBvdmVydHkKcG93ZGVyCnBvd2VyCnByYWN0aWNlCnByYWlzZQpwcmVkaWN0CnByZWZlcgpwcmVwYXJlCnByZXNlbnQKcHJldHR5CnByZXZlbnQKcHJpY2UKcHJpZGUKcHJpbWFyeQpwcmludApwcmlvcml0eQpwcmlzb24KcHJpdmF0ZQpwcml6ZQpwcm9ibGVtCnByb2Nlc3MKcHJvZHVjZQpwcm9maXQKcHJvZ3JhbQpwcm9qZWN0CnByb21vdGUKcHJvb2YKcHJvcGVydHkKcHJvc3Blcgpwcm90ZWN0CnByb3VkCnByb3ZpZGUKcHVibGljCnB1ZGRpbmcKcHVsbApwdWxwCnB1bHNlCnB1bXBraW4KcHVuY2gKcHVwaWwKcHVwcHkKcHVyY2hhc2UKcHVyaXR5CnB1cnBvc2UKcHVyc2UKcHVzaApwdXQKcHV6emxlCnB5cmFtaWQKcXVhbGl0eQpxdWFudHVtCnF1YXJ0ZXIKcXVlc3Rpb24KcXVpY2sKcXVpdApxdWl6CnF1b3RlCnJhYmJpdApyYWNjb29uCnJhY2UKcmFjawpyYWRhcgpyYWRpbwpyYWlsCnJhaW4KcmFpc2UKcmFsbHkKcmFtcApyYW5jaApyYW5kb20KcmFuZ2UKcmFwaWQKcmFyZQpyYXRlCnJhdGhlcgpyYXZlbgpyYXcKcmF6b3IKcmVhZHkKcmVhbApyZWFzb24KcmViZWwKcmVidWlsZApyZWNhbGwKcmVjZWl2ZQpyZWNpcGUKcmVjb3JkCnJlY3ljbGUKcmVkdWNlCnJlZmxlY3QKcmVmb3JtCnJlZnVzZQpyZWdpb24KcmVncmV0CnJlZ3VsYXIKcmVqZWN0CnJlbGF4CnJlbGVhc2UKcmVsaWVmCnJlbHkKcmVtYWluCnJlbWVtYmVyCnJlbWluZApyZW1vdmUKcmVuZGVyCnJlbmV3CnJlbnQKcmVvcGVuCnJlcGFpcgpyZXBlYXQKcmVwbGFjZQpyZXBvcnQKcmVxdWlyZQpyZXNjdWUKcmVzZW1ibGUKcmVzaXN0CnJlc291cmNlCnJlc3BvbnNlCnJlc3VsdApyZXRpcmUKcmV0cmVhdApyZXR1cm4KcmV1bmlvbgpyZXZlYWwKcmV2aWV3CnJld2FyZApyaHl0aG0KcmliCnJpYmJvbgpyaWNlCnJpY2gKcmlkZQpyaWRnZQpyaWZsZQpyaWdodApyaWdpZApyaW5nCnJpb3QKcmlwcGxlCnJpc2sKcml0dWFsCnJpdmFsCnJpdmVyCnJvYWQKcm9hc3QKcm9ib3QKcm9idXN0CnJvY2tldApyb21hbmNlCnJvb2YKcm9va2llCnJvb20Kcm9zZQpyb3RhdGUKcm91Z2gKcm91bmQKcm91dGUKcm95YWwKcnViYmVyCnJ1ZGUKcnVnCnJ1bGUKcnVuCnJ1bndheQpydXJhbApzYWQKc2FkZGxlCnNhZG5lc3MKc2FmZQpzYWlsCnNhbGFkCnNhbG1vbgpzYWxvbgpzYWx0CnNhbHV0ZQpzYW1lCnNhbXBsZQpzYW5kCnNhdGlzZnkKc2F0b3NoaQpzYXVjZQpzYXVzYWdlCnNhdmUKc2F5CnNjYWxlCnNjYW4Kc2NhcmUKc2NhdHRlcgpzY2VuZQpzY2hlbWUKc2Nob29sCnNjaWVuY2UKc2Npc3NvcnMKc2NvcnBpb24Kc2NvdXQKc2NyYXAKc2NyZWVuCnNjcmlwdApzY3J1YgpzZWEKc2VhcmNoCnNlYXNvbgpzZWF0CnNlY29uZApzZWNyZXQKc2VjdGlvbgpzZWN1cml0eQpzZWVkCnNlZWsKc2VnbWVudApzZWxlY3QKc2VsbApzZW1pbmFyCnNlbmlvcgpzZW5zZQpzZW50ZW5jZQpzZXJpZXMKc2VydmljZQpzZXNzaW9uCnNldHRsZQpzZXR1cApzZXZlbgpzaGFkb3cKc2hhZnQKc2hhbGxvdwpzaGFyZQpzaGVkCnNoZWxsCnNoZXJpZmYKc2hpZWxkCnNoaWZ0CnNoaW5lCnNoaXAKc2hpdmVyCnNob2NrCnNob2UKc2hvb3QKc2hvcApzaG9ydApzaG91bGRlcgpzaG92ZQpzaHJpbXAKc2hydWcKc2h1ZmZsZQpzaHkKc2libGluZwpzaWNrCnNpZGUKc2llZ2UKc2lnaHQKc2lnbgpzaWxlbnQKc2lsawpzaWxseQpzaWx2ZXIKc2ltaWxhcgpzaW1wbGUKc2luY2UKc2luZwpzaXJlbgpzaXN0ZXIKc2l0dWF0ZQpzaXgKc2l6ZQpza2F0ZQpza2V0Y2gKc2tpCnNraWxsCnNraW4Kc2tpcnQKc2t1bGwKc2xhYgpzbGFtCnNsZWVwCnNsZW5kZXIKc2xpY2UKc2xpZGUKc2xpZ2h0CnNsaW0Kc2xvZ2FuCnNsb3QKc2xvdwpzbHVzaApzbWFsbApzbWFydApzbWlsZQpzbW9rZQpzbW9vdGgKc25hY2sKc25ha2UKc25hcApzbmlmZgpzbm93CnNvYXAKc29jY2VyCnNvY2lhbApzb2NrCnNvZGEKc29mdApzb2xhcgpzb2xkaWVyCnNvbGlkCnNvbHV0aW9uCnNvbHZlCnNvbWVvbmUKc29uZwpzb29uCnNvcnJ5CnNvcnQKc291bApzb3VuZApzb3VwCnNvdXJjZQpzb3V0aApzcGFjZQpzcGFyZQpzcGF0aWFsCnNwYXduCnNwZWFrCnNwZWNpYWwKc3BlZWQKc3BlbGwKc3BlbmQKc3BoZXJlCnNwaWNlCnNwaWRlcgpzcGlrZQpzcGluCnNwaXJpdApzcGxpdApzcG9pbApzcG9uc29yCnNwb29uCnNwb3J0CnNwb3QKc3ByYXkKc3ByZWFkCnNwcmluZwpzcHkKc3F1YXJlCnNxdWVlemUKc3F1aXJyZWwKc3RhYmxlCnN0YWRpdW0Kc3RhZmYKc3RhZ2UKc3RhaXJzCnN0YW1wCnN0YW5kCnN0YXJ0CnN0YXRlCnN0YXkKc3RlYWsKc3RlZWwKc3RlbQpzdGVwCnN0ZXJlbwpzdGljawpzdGlsbApzdGluZwpzdG9jawpzdG9tYWNoCnN0b25lCnN0b29sCnN0b3J5CnN0b3ZlCnN0cmF0ZWd5CnN0cmVldApzdHJpa2UKc3Ryb25nCnN0cnVnZ2xlCnN0dWRlbnQKc3R1ZmYKc3R1bWJsZQpzdHlsZQpzdWJqZWN0CnN1Ym1pdApzdWJ3YXkKc3VjY2VzcwpzdWNoCnN1ZGRlbgpzdWZmZXIKc3VnYXIKc3VnZ2VzdApzdWl0CnN1bW1lcgpzdW4Kc3VubnkKc3Vuc2V0CnN1cGVyCnN1cHBseQpzdXByZW1lCnN1cmUKc3VyZmFjZQpzdXJnZQpzdXJwcmlzZQpzdXJyb3VuZApzdXJ2ZXkKc3VzcGVjdApzdXN0YWluCnN3YWxsb3cKc3dhbXAKc3dhcApzd2FybQpzd2Vhcgpzd2VldApzd2lmdApzd2ltCnN3aW5nCnN3aXRjaApzd29yZApzeW1ib2wKc3ltcHRvbQpzeXJ1cApzeXN0ZW0KdGFibGUKdGFja2xlCnRhZwp0YWlsCnRhbGVudAp0YWxrCnRhbmsKdGFwZQp0YXJnZXQKdGFzawp0YXN0ZQp0YXR0b28KdGF4aQp0ZWFjaAp0ZWFtCnRlbGwKdGVuCnRlbmFudAp0ZW5uaXMKdGVudAp0ZXJtCnRlc3QKdGV4dAp0aGFuawp0aGF0CnRoZW1lCnRoZW4KdGhlb3J5CnRoZXJlCnRoZXkKdGhpbmcKdGhpcwp0aG91Z2h0CnRocmVlCnRocml2ZQp0aHJvdwp0aHVtYgp0aHVuZGVyCnRpY2tldAp0aWRlCnRpZ2VyCnRpbHQKdGltYmVyCnRpbWUKdGlueQp0aXAKdGlyZWQKdGlzc3VlCnRpdGxlCnRvYXN0CnRvYmFjY28KdG9kYXkKdG9kZGxlcgp0b2UKdG9nZXRoZXIKdG9pbGV0CnRva2VuCnRvbWF0bwp0b21vcnJvdwp0b25lCnRvbmd1ZQp0b25pZ2h0CnRvb2wKdG9vdGgKdG9wCnRvcGljCnRvcHBsZQp0b3JjaAp0b3JuYWRvCnRvcnRvaXNlCnRvc3MKdG90YWwKdG91cmlzdAp0b3dhcmQKdG93ZXIKdG93bgp0b3kKdHJhY2sKdHJhZGUKdHJhZmZpYwp0cmFnaWMKdHJhaW4KdHJhbnNmZXIKdHJhcAp0cmFzaAp0cmF2ZWwKdHJheQp0cmVhdAp0cmVlCnRyZW5kCnRyaWFsCnRyaWJlCnRyaWNrCnRyaWdnZXIKdHJpbQp0cmlwCnRyb3BoeQp0cm91YmxlCnRydWNrCnRydWUKdHJ1bHkKdHJ1bXBldAp0cnVzdAp0cnV0aAp0cnkKdHViZQp0dWl0aW9uCnR1bWJsZQp0dW5hCnR1bm5lbAp0dXJrZXkKdHVybgp0dXJ0bGUKdHdlbHZlCnR3ZW50eQp0d2ljZQp0d2luCnR3aXN0CnR3bwp0eXBlCnR5cGljYWwKdWdseQp1bWJyZWxsYQp1bmFibGUKdW5hd2FyZQp1bmNsZQp1bmNvdmVyCnVuZGVyCnVuZG8KdW5mYWlyCnVuZm9sZAp1bmhhcHB5CnVuaWZvcm0KdW5pcXVlCnVuaXQKdW5pdmVyc2UKdW5rbm93bgp1bmxvY2sKdW50aWwKdW51c3VhbAp1bnZlaWwKdXBkYXRlCnVwZ3JhZGUKdXBob2xkCnVwb24KdXBwZXIKdXBzZXQKdXJiYW4KdXJnZQp1c2FnZQp1c2UKdXNlZAp1c2VmdWwKdXNlbGVzcwp1c3VhbAp1dGlsaXR5CnZhY2FudAp2YWN1dW0KdmFndWUKdmFsaWQKdmFsbGV5CnZhbHZlCnZhbgp2YW5pc2gKdmFwb3IKdmFyaW91cwp2YXN0CnZhdWx0CnZlaGljbGUKdmVsdmV0CnZlbmRvcgp2ZW50dXJlCnZlbnVlCnZlcmIKdmVyaWZ5CnZlcnNpb24KdmVyeQp2ZXNzZWwKdmV0ZXJhbgp2aWFibGUKdmlicmFudAp2aWNpb3VzCnZpY3RvcnkKdmlkZW8Kdmlldwp2aWxsYWdlCnZpbnRhZ2UKdmlvbGluCnZpcnR1YWwKdmlydXMKdmlzYQp2aXNpdAp2aXN1YWwKdml0YWwKdml2aWQKdm9jYWwKdm9pY2UKdm9pZAp2b2xjYW5vCnZvbHVtZQp2b3RlCnZveWFnZQp3YWdlCndhZ29uCndhaXQKd2Fsawp3YWxsCndhbG51dAp3YW50CndhcmZhcmUKd2FybQp3YXJyaW9yCndhc2gKd2FzcAp3YXN0ZQp3YXRlcgp3YXZlCndheQp3ZWFsdGgKd2VhcG9uCndlYXIKd2Vhc2VsCndlYXRoZXIKd2ViCndlZGRpbmcKd2Vla2VuZAp3ZWlyZAp3ZWxjb21lCndlc3QKd2V0CndoYWxlCndoYXQKd2hlYXQKd2hlZWwKd2hlbgp3aGVyZQp3aGlwCndoaXNwZXIKd2lkZQp3aWR0aAp3aWZlCndpbGQKd2lsbAp3aW4Kd2luZG93CndpbmUKd2luZwp3aW5rCndpbm5lcgp3aW50ZXIKd2lyZQp3aXNkb20Kd2lzZQp3aXNoCndpdG5lc3MKd29sZgp3b21hbgp3b25kZXIKd29vZAp3b29sCndvcmQKd29yawp3b3JsZAp3b3JyeQp3b3J0aAp3cmFwCndyZWNrCndyZXN0bGUKd3Jpc3QKd3JpdGUKd3JvbmcKeWFyZAp5ZWFyCnllbGxvdwp5b3UKeW91bmcKeW91dGgKemVicmEKemVybwp6b25lCnpvb2Auc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy9mcmVuY2guanMKICB2YXIgd29yZGxpc3QzID0gYGFiYWlzc2VyCmFiYW5kb24KYWJkaXF1ZXIKYWJlaWxsZQphYm9saXIKYWJvcmRlcgphYm91dGlyCmFib3llcgphYnJhc2lmCmFicmV1dmVyCmFicml0ZXIKYWJyb2dlcgphYnJ1cHQKYWJzZW5jZQphYnNvbHUKYWJzdXJkZQphYnVzaWYKYWJ5c3NhbAphY2FkZVx1MDMwMW1pZQphY2Fqb3UKYWNhcmllbgphY2NhYmxlcgphY2NlcHRlcgphY2NsYW1lcgphY2NvbGFkZQphY2Nyb2NoZQphY2N1c2VyCmFjZXJiZQphY2hhdAphY2hldGVyCmFjaWR1bGVyCmFjaWVyCmFjb21wdGUKYWNxdWVcdTAzMDFyaXIKYWNyb255bWUKYWN0ZXVyCmFjdGlmCmFjdHVlbAphZGVwdGUKYWRlXHUwMzAxcXVhdAphZGhlXHUwMzAxc2lmCmFkamVjdGlmCmFkanVnZXIKYWRtZXR0cmUKYWRtaXJlcgphZG9wdGVyCmFkb3JlcgphZG91Y2lyCmFkcmVzc2UKYWRyb2l0CmFkdWx0ZQphZHZlcmJlCmFlXHUwMzAxcmVyCmFlXHUwMzAxcm9uZWYKYWZmYWlyZQphZmZlY3RlcgphZmZpY2hlCmFmZnJldXgKYWZmdWJsZXIKYWdhY2VyCmFnZW5jZXIKYWdpbGUKYWdpdGVyCmFncmFmZXIKYWdyZVx1MDMwMWFibGUKYWdydW1lCmFpZGVyCmFpZ3VpbGxlCmFpbGllcgphaW1hYmxlCmFpc2FuY2UKYWpvdXRlcgphanVzdGVyCmFsYXJtZXIKYWxjaGltaWUKYWxlcnRlCmFsZ2VcdTAzMDBicmUKYWxndWUKYWxpZVx1MDMwMW5lcgphbGltZW50CmFsbGVcdTAzMDFnZXIKYWxsaWFnZQphbGxvdWVyCmFsbHVtZXIKYWxvdXJkaXIKYWxwYWdhCmFsdGVzc2UKYWx2ZVx1MDMwMW9sZQphbWF0ZXVyCmFtYmlndQphbWJyZQphbWVcdTAzMDFuYWdlcgphbWVydHVtZQphbWlkb24KYW1pcmFsCmFtb3JjZXIKYW1vdXIKYW1vdmlibGUKYW1waGliaWUKYW1wbGV1cgphbXVzYW50CmFuYWx5c2UKYW5hcGhvcmUKYW5hcmNoaWUKYW5hdG9taWUKYW5jaWVuCmFuZVx1MDMwMWFudGlyCmFuZ2xlCmFuZ29pc3NlCmFuZ3VsZXV4CmFuaW1hbAphbm5leGVyCmFubm9uY2UKYW5udWVsCmFub2Rpbgphbm9tYWxpZQphbm9ueW1lCmFub3JtYWwKYW50ZW5uZQphbnRpZG90ZQphbnhpZXV4CmFwYWlzZXIKYXBlXHUwMzAxcml0aWYKYXBsYW5pcgphcG9sb2dpZQphcHBhcmVpbAphcHBlbGVyCmFwcG9ydGVyCmFwcHV5ZXIKYXF1YXJpdW0KYXF1ZWR1YwphcmJpdHJlCmFyYnVzdGUKYXJkZXVyCmFyZG9pc2UKYXJnZW50CmFybGVxdWluCmFybWF0dXJlCmFybWVtZW50CmFybW9pcmUKYXJtdXJlCmFycGVudGVyCmFycmFjaGVyCmFycml2ZXIKYXJyb3NlcgphcnNlbmljCmFydGVcdTAzMDFyaWVsCmFydGljbGUKYXNwZWN0CmFzcGhhbHRlCmFzcGlyZXIKYXNzYXV0CmFzc2VydmlyCmFzc2lldHRlCmFzc29jaWVyCmFzc3VyZXIKYXN0aWNvdAphc3RyZQphc3R1Y2UKYXRlbGllcgphdG9tZQphdHJpdW0KYXRyb2NlCmF0dGFxdWUKYXR0ZW50aWYKYXR0aXJlcgphdHRyYXBlcgphdWJhaW5lCmF1YmVyZ2UKYXVkYWNlCmF1ZGlibGUKYXVndXJlcgphdXJvcmUKYXV0b21uZQphdXRydWNoZQphdmFsZXIKYXZhbmNlcgphdmFyaWNlCmF2ZW5pcgphdmVyc2UKYXZldWdsZQphdmlhdGV1cgphdmlkZQphdmlvbgphdmlzZXIKYXZvaW5lCmF2b3VlcgphdnJpbApheGlhbApheGlvbWUKYmFkZ2UKYmFmb3VlcgpiYWdhZ2UKYmFndWV0dGUKYmFpZ25hZGUKYmFsYW5jZXIKYmFsY29uCmJhbGVpbmUKYmFsaXNhZ2UKYmFtYmluCmJhbmNhaXJlCmJhbmRhZ2UKYmFubGlldWUKYmFubmllXHUwMzAwcmUKYmFucXVpZXIKYmFyYmllcgpiYXJpbApiYXJvbgpiYXJxdWUKYmFycmFnZQpiYXNzaW4KYmFzdGlvbgpiYXRhaWxsZQpiYXRlYXUKYmF0dGVyaWUKYmF1ZHJpZXIKYmF2YXJkZXIKYmVsZXR0ZQpiZVx1MDMwMWxpZXIKYmVsb3RlCmJlXHUwMzAxbmVcdTAzMDFmaWNlCmJlcmNlYXUKYmVyZ2VyCmJlcmxpbmUKYmVybXVkYQpiZXNhY2UKYmVzb2duZQpiZVx1MDMwMXRhaWwKYmV1cnJlCmJpYmVyb24KYmljeWNsZQpiaWR1bGUKYmlqb3UKYmlsYW4KYmlsaW5ndWUKYmlsbGFyZApiaW5haXJlCmJpb2xvZ2llCmJpb3BzaWUKYmlvdHlwZQpiaXNjdWl0CmJpc29uCmJpc3RvdXJpCmJpdHVtZQpiaXphcnJlCmJsYWZhcmQKYmxhZ3VlCmJsYW5jaGlyCmJsZXNzYW50CmJsaW5kZXIKYmxvbmQKYmxvcXVlcgpibG91c29uCmJvYmFyZApib2JpbmUKYm9pcmUKYm9pc2VyCmJvbGlkZQpib25ib24KYm9uZGlyCmJvbmhldXIKYm9uaWZpZXIKYm9udXMKYm9yZHVyZQpib3JuZQpib3R0ZQpib3VjbGUKYm91ZXV4CmJvdWdpZQpib3Vsb24KYm91cXVpbgpib3Vyc2UKYm91c3NvbGUKYm91dGlxdWUKYm94ZXVyCmJyYW5jaGUKYnJhc2llcgpicmF2ZQpicmViaXMKYnJlXHUwMzAwY2hlCmJyZXV2YWdlCmJyaWNvbGVyCmJyaWdhZGUKYnJpbGxhbnQKYnJpb2NoZQpicmlxdWUKYnJvY2h1cmUKYnJvZGVyCmJyb256ZXIKYnJvdXNzZQpicm95ZXVyCmJydW1lCmJydXNxdWUKYnJ1dGFsCmJydXlhbnQKYnVmZmxlCmJ1aXNzb24KYnVsbGV0aW4KYnVyZWF1CmJ1cmluCmJ1c3RpZXIKYnV0aW5lcgpidXRvaXIKYnV2YWJsZQpidXZldHRlCmNhYmFub24KY2FiaW5lCmNhY2hldHRlCmNhZGVhdQpjYWRyZQpjYWZlXHUwMzAxaW5lCmNhaWxsb3UKY2Fpc3NvbgpjYWxjdWxlcgpjYWxlcGluCmNhbGlicmUKY2FsbWVyCmNhbG9tbmllCmNhbHZhaXJlCmNhbWFyYWRlCmNhbWVcdTAzMDFyYQpjYW1pb24KY2FtcGFnbmUKY2FuYWwKY2FuZXRvbgpjYW5vbgpjYW50aW5lCmNhbnVsYXIKY2FwYWJsZQpjYXBvcmFsCmNhcHJpY2UKY2Fwc3VsZQpjYXB0ZXIKY2FwdWNoZQpjYXJhYmluZQpjYXJib25lCmNhcmVzc2VyCmNhcmlib3UKY2FybmFnZQpjYXJvdHRlCmNhcnJlYXUKY2FydG9uCmNhc2NhZGUKY2FzaWVyCmNhc3F1ZQpjYXNzdXJlCmNhdXNlcgpjYXV0aW9uCmNhdmFsaWVyCmNhdmVybmUKY2F2aWFyCmNlXHUwMzAxZGlsbGUKY2VpbnR1cmUKY2VcdTAzMDFsZXN0ZQpjZWxsdWxlCmNlbmRyaWVyCmNlbnN1cmVyCmNlbnRyYWwKY2VyY2xlCmNlXHUwMzAxcmVcdTAzMDFicmFsCmNlcmlzZQpjZXJuZXIKY2VydmVhdQpjZXNzZXIKY2hhZ3JpbgpjaGFpc2UKY2hhbGV1cgpjaGFtYnJlCmNoYW5jZQpjaGFwaXRyZQpjaGFyYm9uCmNoYXNzZXVyCmNoYXRvbgpjaGF1c3NvbgpjaGF2aXJlcgpjaGVtaXNlCmNoZW5pbGxlCmNoZVx1MDMwMXF1aWVyCmNoZXJjaGVyCmNoZXZhbApjaGllbgpjaGlmZnJlCmNoaWdub24KY2hpbWVcdTAzMDByZQpjaGlvdApjaGxvcnVyZQpjaG9jb2xhdApjaG9pc2lyCmNob3NlCmNob3VldHRlCmNocm9tZQpjaHV0ZQpjaWdhcmUKY2lnb2duZQpjaW1lbnRlcgpjaW5lXHUwMzAxbWEKY2ludHJlcgpjaXJjdWxlcgpjaXJlcgpjaXJxdWUKY2l0ZXJuZQpjaXRveWVuCmNpdHJvbgpjaXZpbApjbGFpcm9uCmNsYW1ldXIKY2xhcXVlcgpjbGFzc2UKY2xhdmllcgpjbGllbnQKY2xpZ25lcgpjbGltYXQKY2xpdmFnZQpjbG9jaGUKY2xvbmFnZQpjbG9wb3J0ZQpjb2JhbHQKY29icmEKY29jYXNzZQpjb2NvdGllcgpjb2Rlcgpjb2RpZmllcgpjb2ZmcmUKY29nbmVyCmNvaGVcdTAzMDFzaW9uCmNvaWZmZXIKY29pbmNlcgpjb2xlXHUwMzAwcmUKY29saWJyaQpjb2xsaW5lCmNvbG1hdGVyCmNvbG9uZWwKY29tYmF0CmNvbWVcdTAzMDFkaWUKY29tbWFuZGUKY29tcGFjdApjb25jZXJ0CmNvbmR1aXJlCmNvbmZpZXIKY29uZ2VsZXIKY29ubm90ZXIKY29uc29ubmUKY29udGFjdApjb252ZXhlCmNvcGFpbgpjb3BpZQpjb3JhaWwKY29yYmVhdQpjb3JkYWdlCmNvcm5pY2hlCmNvcnB1cwpjb3JyZWN0CmNvcnRlXHUwMzAwZ2UKY29zbWlxdWUKY29zdHVtZQpjb3Rvbgpjb3VkZQpjb3VwdXJlCmNvdXJhZ2UKY291dGVhdQpjb3V2cmlyCmNveW90ZQpjcmFiZQpjcmFpbnRlCmNyYXZhdGUKY3JheW9uCmNyZVx1MDMwMWF0dXJlCmNyZVx1MDMwMWRpdGVyCmNyZVx1MDMwMW1ldXgKY3JldXNlcgpjcmV2ZXR0ZQpjcmlibGVyCmNyaWVyCmNyaXN0YWwKY3JpdGVcdTAzMDByZQpjcm9pcmUKY3JvcXVlcgpjcm90YWxlCmNydWNpYWwKY3J1ZWwKY3J5cHRlcgpjdWJpcXVlCmN1ZWlsbGlyCmN1aWxsZVx1MDMwMHJlCmN1aXNpbmUKY3VpdnJlCmN1bG1pbmVyCmN1bHRpdmVyCmN1bXVsZXIKY3VwaWRlCmN1cmF0aWYKY3Vyc2V1cgpjeWFudXJlCmN5Y2xlCmN5bGluZHJlCmN5bmlxdWUKZGFpZ25lcgpkYW1pZXIKZGFuZ2VyCmRhbnNldXIKZGF1cGhpbgpkZVx1MDMwMWJhdHRyZQpkZVx1MDMwMWJpdGVyCmRlXHUwMzAxYm9yZGVyCmRlXHUwMzAxYnJpZGVyCmRlXHUwMzAxYnV0YW50CmRlXHUwMzAxY2FsZXIKZGVcdTAzMDFjZW1icmUKZGVcdTAzMDFjaGlyZXIKZGVcdTAzMDFjaWRlcgpkZVx1MDMwMWNsYXJlcgpkZVx1MDMwMWNvcmVyCmRlXHUwMzAxY3JpcmUKZGVcdTAzMDFjdXBsZXIKZGVcdTAzMDFkYWxlCmRlXHUwMzAxZHVjdGlmCmRlXHUwMzAxZXNzZQpkZVx1MDMwMWZlbnNpZgpkZVx1MDMwMWZpbGVyCmRlXHUwMzAxZnJheWVyCmRlXHUwMzAxZ2FnZXIKZGVcdTAzMDFnaXZyZXIKZGVcdTAzMDFnbHV0aXIKZGVcdTAzMDFncmFmZXIKZGVcdTAzMDFqZXVuZXIKZGVcdTAzMDFsaWNlCmRlXHUwMzAxbG9nZXIKZGVtYW5kZXIKZGVtZXVyZXIKZGVcdTAzMDFtb2xpcgpkZVx1MDMwMW5pY2hlcgpkZVx1MDMwMW5vdWVyCmRlbnRlbGxlCmRlXHUwMzAxbnVkZXIKZGVcdTAzMDFwYXJ0CmRlXHUwMzAxcGVuc2VyCmRlXHUwMzAxcGhhc2VyCmRlXHUwMzAxcGxhY2VyCmRlXHUwMzAxcG9zZXIKZGVcdTAzMDFyYW5nZXIKZGVcdTAzMDFyb2JlcgpkZVx1MDMwMXNhc3RyZQpkZXNjZW50ZQpkZVx1MDMwMXNlcnQKZGVcdTAzMDFzaWduZXIKZGVcdTAzMDFzb2JlXHUwMzAxaXIKZGVzc2luZXIKZGVzdHJpZXIKZGVcdTAzMDF0YWNoZXIKZGVcdTAzMDF0ZXN0ZXIKZGVcdTAzMDF0b3VyZXIKZGVcdTAzMDF0cmVzc2UKZGV2YW5jZXIKZGV2ZW5pcgpkZXZpbmVyCmRldm9pcgpkaWFibGUKZGlhbG9ndWUKZGlhbWFudApkaWN0ZXIKZGlmZmVcdTAzMDFyZXIKZGlnZVx1MDMwMXJlcgpkaWdpdGFsCmRpZ25lCmRpbHVlcgpkaW1hbmNoZQpkaW1pbnVlcgpkaW94eWRlCmRpcmVjdGlmCmRpcmlnZXIKZGlzY3V0ZXIKZGlzcG9zZXIKZGlzc2lwZXIKZGlzdGFuY2UKZGl2ZXJ0aXIKZGl2aXNlcgpkb2NpbGUKZG9jdGV1cgpkb2dtZQpkb2lndApkb21haW5lCmRvbWljaWxlCmRvbXB0ZXIKZG9uYXRldXIKZG9uam9uCmRvbm5lcgpkb3BhbWluZQpkb3J0b2lyCmRvcnVyZQpkb3NhZ2UKZG9zZXVyCmRvc3NpZXIKZG90YXRpb24KZG91YW5pZXIKZG91YmxlCmRvdWNldXIKZG91dGVyCmRveWVuCmRyYWdvbgpkcmFwZXIKZHJlc3NlcgpkcmliYmxlcgpkcm9pdHVyZQpkdXBlcmllCmR1cGxleGUKZHVyYWJsZQpkdXJjaXIKZHluYXN0aWUKZVx1MDMwMWJsb3VpcgplXHUwMzAxY2FydGVyCmVcdTAzMDFjaGFycGUKZVx1MDMwMWNoZWxsZQplXHUwMzAxY2xhaXJlcgplXHUwMzAxY2xpcHNlCmVcdTAzMDFjbG9yZQplXHUwMzAxY2x1c2UKZVx1MDMwMWNvbGUKZVx1MDMwMWNvbm9taWUKZVx1MDMwMWNvcmNlCmVcdTAzMDFjb3V0ZXIKZVx1MDMwMWNyYXNlcgplXHUwMzAxY3JlXHUwMzAxbWVyCmVcdTAzMDFjcml2YWluCmVcdTAzMDFjcm91CmVcdTAzMDFjdW1lCmVcdTAzMDFjdXJldWlsCmVcdTAzMDFkaWZpZXIKZVx1MDMwMWR1cXVlcgplZmZhY2VyCmVmZmVjdGlmCmVmZmlnaWUKZWZmb3J0CmVmZnJheWVyCmVmZnVzaW9uCmVcdTAzMDFnYWxpc2VyCmVcdTAzMDFnYXJlcgplXHUwMzAxamVjdGVyCmVcdTAzMDFsYWJvcmVyCmVcdTAzMDFsYXJnaXIKZVx1MDMwMWxlY3Ryb24KZVx1MDMwMWxlXHUwMzAxZ2FudAplXHUwMzAxbGVcdTAzMDFwaGFudAplXHUwMzAxbGVcdTAzMDB2ZQplXHUwMzAxbGlnaWJsZQplXHUwMzAxbGl0aXNtZQplXHUwMzAxbG9nZQplXHUwMzAxbHVjaWRlcgplXHUwMzAxbHVkZXIKZW1iYWxsZXIKZW1iZWxsaXIKZW1icnlvbgplXHUwMzAxbWVyYXVkZQplXHUwMzAxbWlzc2lvbgplbW1lbmVyCmVcdTAzMDFtb3Rpb24KZVx1MDMwMW1vdXZvaXIKZW1wZXJldXIKZW1wbG95ZXIKZW1wb3J0ZXIKZW1wcmlzZQplXHUwMzAxbXVsc2lvbgplbmNhZHJlcgplbmNoZVx1MDMwMHJlCmVuY2xhdmUKZW5jb2NoZQplbmRpZ3VlcgplbmRvc3NlcgplbmRyb2l0CmVuZHVpcmUKZVx1MDMwMW5lcmdpZQplbmZhbmNlCmVuZmVybWVyCmVuZm91aXIKZW5nYWdlcgplbmdpbgplbmdsb2JlcgplXHUwMzAxbmlnbWUKZW5qYW1iZXIKZW5qZXUKZW5sZXZlcgplbm5lbWkKZW5udXlldXgKZW5yaWNoaXIKZW5yb2JhZ2UKZW5zZWlnbmUKZW50YXNzZXIKZW50ZW5kcmUKZW50aWVyCmVudG91cmVyCmVudHJhdmVyCmVcdTAzMDFudW1lXHUwMzAxcmVyCmVudmFoaXIKZW52aWFibGUKZW52b3llcgplbnp5bWUKZVx1MDMwMW9saWVuCmVcdTAzMDFwYWlzc2lyCmVcdTAzMDFwYXJnbmUKZVx1MDMwMXBhdGFudAplXHUwMzAxcGF1bGUKZVx1MDMwMXBpY2VyaWUKZVx1MDMwMXBpZGVcdTAzMDFtaWUKZVx1MDMwMXBpZXIKZVx1MDMwMXBpbG9ndWUKZVx1MDMwMXBpbmUKZVx1MDMwMXBpc29kZQplXHUwMzAxcGl0YXBoZQplXHUwMzAxcG9xdWUKZVx1MDMwMXByZXV2ZQplXHUwMzAxcHJvdXZlcgplXHUwMzAxcHVpc2FudAplXHUwMzAxcXVlcnJlCmVcdTAzMDFxdWlwZQplXHUwMzAxcmlnZXIKZVx1MDMwMXJvc2lvbgplcnJldXIKZVx1MDMwMXJ1cHRpb24KZXNjYWxpZXIKZXNwYWRvbgplc3BlXHUwMzAwY2UKZXNwaWVcdTAzMDBnbGUKZXNwb2lyCmVzcHJpdAplc3F1aXZlcgplc3NheWVyCmVzc2VuY2UKZXNzaWV1CmVzc29yZXIKZXN0aW1lCmVzdG9tYWMKZXN0cmFkZQplXHUwMzAxdGFnZVx1MDMwMHJlCmVcdTAzMDF0YWxlcgplXHUwMzAxdGFuY2hlCmVcdTAzMDF0YXRpcXVlCmVcdTAzMDF0ZWluZHJlCmVcdTAzMDF0ZW5kb2lyCmVcdTAzMDF0ZXJuZWwKZVx1MDMwMXRoYW5vbAplXHUwMzAxdGhpcXVlCmV0aG5pZQplXHUwMzAxdGlyZXIKZVx1MDMwMXRvZmZlcgplXHUwMzAxdG9pbGUKZVx1MDMwMXRvbm5hbnQKZVx1MDMwMXRvdXJkaXIKZVx1MDMwMXRyYW5nZQplXHUwMzAxdHJvaXQKZVx1MDMwMXR1ZGUKZXVwaG9yaWUKZVx1MDMwMXZhbHVlcgplXHUwMzAxdmFzaW9uCmVcdTAzMDF2ZW50YWlsCmVcdTAzMDF2aWRlbmNlCmVcdTAzMDF2aXRlcgplXHUwMzAxdm9sdXRpZgplXHUwMzAxdm9xdWVyCmV4YWN0CmV4YWdlXHUwMzAxcmVyCmV4YXVjZXIKZXhjZWxsZXIKZXhjaXRhbnQKZXhjbHVzaWYKZXhjdXNlCmV4ZVx1MDMwMWN1dGVyCmV4ZW1wbGUKZXhlcmNlcgpleGhhbGVyCmV4aG9ydGVyCmV4aWdlbmNlCmV4aWxlcgpleGlzdGVyCmV4b3RpcXVlCmV4cGVcdTAzMDFkaWVyCmV4cGxvcmVyCmV4cG9zZXIKZXhwcmltZXIKZXhxdWlzCmV4dGVuc2lmCmV4dHJhaXJlCmV4dWx0ZXIKZmFibGUKZmFidWxldXgKZmFjZXR0ZQpmYWNpbGUKZmFjdHVyZQpmYWlibGlyCmZhbGFpc2UKZmFtZXV4CmZhbWlsbGUKZmFyY2V1cgpmYXJmZWx1CmZhcmluZQpmYXJvdWNoZQpmYXNjaW5lcgpmYXRhbApmYXRpZ3VlCmZhdWNvbgpmYXV0aWYKZmF2ZXVyCmZhdm9yaQpmZVx1MDMwMWJyaWxlCmZlXHUwMzAxY29uZGVyCmZlXHUwMzAxZGVcdTAzMDFyZXIKZmVcdTAzMDFsaW4KZmVtbWUKZmVcdTAzMDFtdXIKZmVuZG9pcgpmZVx1MDMwMW9kYWwKZmVybWVyCmZlXHUwMzAxcm9jZQpmZXJ2ZXVyCmZlc3RpdmFsCmZldWlsbGUKZmV1dHJlCmZlXHUwMzAxdnJpZXIKZmlhc2NvCmZpY2VsZXIKZmljdGlmCmZpZGVcdTAzMDBsZQpmaWd1cmUKZmlsYXR1cmUKZmlsZXRhZ2UKZmlsaWVcdTAzMDByZQpmaWxsZXVsCmZpbG1lcgpmaWxvdQpmaWx0cmVyCmZpbmFuY2VyCmZpbmlyCmZpb2xlCmZpcm1lCmZpc3N1cmUKZml4ZXIKZmxhaXJlcgpmbGFtbWUKZmxhc3F1ZQpmbGF0dGV1cgpmbGVcdTAzMDFhdQpmbGVcdTAzMDBjaGUKZmxldXIKZmxleGlvbgpmbG9jb24KZmxvcmUKZmx1Y3R1ZXIKZmx1aWRlCmZsdXZpYWwKZm9saWUKZm9uZGVyaWUKZm9uZ2libGUKZm9udGFpbmUKZm9yY2VyCmZvcmdlcm9uCmZvcm11bGVyCmZvcnR1bmUKZm9zc2lsZQpmb3VkcmUKZm91Z2VcdTAzMDByZQpmb3VpbGxlcgpmb3VsdXJlCmZvdXJtaQpmcmFnaWxlCmZyYWlzZQpmcmFuY2hpcgpmcmFwcGVyCmZyYXlldXIKZnJlXHUwMzAxZ2F0ZQpmcmVpbmVyCmZyZWxvbgpmcmVcdTAzMDFtaXIKZnJlXHUwMzAxbmVcdTAzMDFzaWUKZnJlXHUwMzAwcmUKZnJpYWJsZQpmcmljdGlvbgpmcmlzc29uCmZyaXZvbGUKZnJvaWQKZnJvbWFnZQpmcm9udGFsCmZyb3R0ZXIKZnJ1aXQKZnVnaXRpZgpmdWl0ZQpmdXJldXIKZnVyaWV1eApmdXJ0aWYKZnVzaW9uCmZ1dHVyCmdhZ25lcgpnYWxheGllCmdhbGVyaWUKZ2FtYmFkZXIKZ2FyYW50aXIKZ2FyZGllbgpnYXJuaXIKZ2FycmlndWUKZ2F6ZWxsZQpnYXpvbgpnZVx1MDMwMWFudApnZVx1MDMwMWxhdGluZQpnZVx1MDMwMWx1bGUKZ2VuZGFybWUKZ2VcdTAzMDFuZVx1MDMwMXJhbApnZVx1MDMwMW5pZQpnZW5vdQpnZW50aWwKZ2VcdTAzMDFvbG9naWUKZ2VcdTAzMDFvbWVcdTAzMDB0cmUKZ2VcdTAzMDFyYW5pdW0KZ2VybWUKZ2VzdHVlbApnZXlzZXIKZ2liaWVyCmdpY2xlcgpnaXJhZmUKZ2l2cmUKZ2xhY2UKZ2xhaXZlCmdsaXNzZXIKZ2xvYmUKZ2xvaXJlCmdsb3JpZXV4CmdvbGZldXIKZ29tbWUKZ29uZmxlcgpnb3JnZQpnb3JpbGxlCmdvdWRyb24KZ291ZmZyZQpnb3Vsb3QKZ291cGlsbGUKZ291cm1hbmQKZ291dHRlCmdyYWR1ZWwKZ3JhZmZpdGkKZ3JhaW5lCmdyYW5kCmdyYXBwaW4KZ3JhdHVpdApncmF2aXIKZ3JlbmF0CmdyaWZmdXJlCmdyaWxsZXIKZ3JpbXBlcgpncm9nbmVyCmdyb25kZXIKZ3JvdHRlCmdyb3VwZQpncnVnZXIKZ3J1dGllcgpncnV5ZVx1MDMwMHJlCmd1ZVx1MDMwMXBhcmQKZ3VlcnJpZXIKZ3VpZGUKZ3VpbWF1dmUKZ3VpdGFyZQpndXN0YXRpZgpneW1uYXN0ZQpneXJvc3RhdApoYWJpdHVkZQpoYWNob2lyCmhhbHRlCmhhbWVhdQpoYW5nYXIKaGFubmV0b24KaGFyaWNvdApoYXJtb25pZQpoYXJwb24KaGFzYXJkCmhlXHUwMzAxbGl1bQpoZVx1MDMwMW1hdG9tZQpoZXJiZQpoZVx1MDMwMXJpc3NvbgpoZXJtaW5lCmhlXHUwMzAxcm9uCmhlXHUwMzAxc2l0ZXIKaGV1cmV1eApoaWJlcm5lcgpoaWJvdQpoaWxhcmFudApoaXN0b2lyZQpoaXZlcgpob21hcmQKaG9tbWFnZQpob21vZ2VcdTAzMDBuZQpob25uZXVyCmhvbm9yZXIKaG9udGV1eApob3JkZQpob3Jpem9uCmhvcmxvZ2UKaG9ybW9uZQpob3JyaWJsZQpob3VsZXV4CmhvdXNzZQpodWJsb3QKaHVpbGV1eApodW1haW4KaHVtYmxlCmh1bWlkZQpodW1vdXIKaHVybGVyCmh5ZHJvbWVsCmh5Z2llXHUwMzAwbmUKaHltbmUKaHlwbm9zZQppZHlsbGUKaWdub3JlcgppZ3VhbmUKaWxsaWNpdGUKaWxsdXNpb24KaW1hZ2UKaW1iaWJlcgppbWl0ZXIKaW1tZW5zZQppbW1vYmlsZQppbW11YWJsZQppbXBhY3QKaW1wZVx1MDMwMXJpYWwKaW1wbG9yZXIKaW1wb3NlcgppbXByaW1lcgppbXB1dGVyCmluY2FybmVyCmluY2VuZGllCmluY2lkZW50CmluY2xpbmVyCmluY29sb3JlCmluZGV4ZXIKaW5kaWNlCmluZHVjdGlmCmluZVx1MDMwMWRpdAppbmVwdGllCmluZXhhY3QKaW5maW5pCmluZmxpZ2VyCmluZm9ybWVyCmluZnVzaW9uCmluZ2VcdTAzMDFyZXIKaW5oYWxlcgppbmhpYmVyCmluamVjdGVyCmluanVyZQppbm5vY2VudAppbm9jdWxlcgppbm9uZGVyCmluc2NyaXJlCmluc2VjdGUKaW5zaWduZQppbnNvbGl0ZQppbnNwaXJlcgppbnN0aW5jdAppbnN1bHRlcgppbnRhY3QKaW50ZW5zZQppbnRpbWUKaW50cmlndWUKaW50dWl0aWYKaW51dGlsZQppbnZhc2lvbgppbnZlbnRlcgppbnZpdGVyCmludm9xdWVyCmlyb25pcXVlCmlycmFkaWVyCmlycmVcdTAzMDFlbAppcnJpdGVyCmlzb2xlcgppdm9pcmUKaXZyZXNzZQpqYWd1YXIKamFpbGxpcgpqYW1iZQpqYW52aWVyCmphcmRpbgpqYXVnZXIKamF1bmUKamF2ZWxvdApqZXRhYmxlCmpldG9uCmpldWRpCmpldW5lc3NlCmpvaW5kcmUKam9uY2hlcgpqb25nbGVyCmpvdWV1cgpqb3Vpc3NpZgpqb3VybmFsCmpvdmlhbApqb3lhdQpqb3lldXgKanViaWxlcgpqdWdlbWVudApqdW5pb3IKanVwb24KanVyaXN0ZQpqdXN0aWNlCmp1dGV1eApqdXZlXHUwMzAxbmlsZQprYXlhawpraW1vbm8Ka2lvc3F1ZQpsYWJlbApsYWJpYWwKbGFib3VyZXIKbGFjZVx1MDMwMXJlcgpsYWN0b3NlCmxhZ3VuZQpsYWluZQpsYWlzc2VyCmxhaXRpZXIKbGFtYmVhdQpsYW1lbGxlCmxhbXBlCmxhbmNldXIKbGFuZ2FnZQpsYW50ZXJuZQpsYXBpbgpsYXJnZXVyCmxhcm1lCmxhdXJpZXIKbGF2YWJvCmxhdm9pcgpsZWN0dXJlCmxlXHUwMzAxZ2FsCmxlXHUwMzAxZ2VyCmxlXHUwMzAxZ3VtZQpsZXNzaXZlCmxldHRyZQpsZXZpZXIKbGV4aXF1ZQpsZVx1MDMwMXphcmQKbGlhc3NlCmxpYmVcdTAzMDFyZXIKbGlicmUKbGljZW5jZQpsaWNvcm5lCmxpZVx1MDMwMGdlCmxpZVx1MDMwMHZyZQpsaWdhdHVyZQpsaWdvdGVyCmxpZ3VlCmxpbWVyCmxpbWl0ZQpsaW1vbmFkZQpsaW1waWRlCmxpbmVcdTAzMDFhaXJlCmxpbmdvdApsaW9uY2VhdQpsaXF1aWRlCmxpc2llXHUwMzAwcmUKbGlzdGVyCmxpdGhpdW0KbGl0aWdlCmxpdHRvcmFsCmxpdnJldXIKbG9naXF1ZQpsb2ludGFpbgpsb2lzaXIKbG9tYnJpYwpsb3RlcmllCmxvdWVyCmxvdXJkCmxvdXRyZQpsb3V2ZQpsb3lhbApsdWJpZQpsdWNpZGUKbHVjcmF0aWYKbHVldXIKbHVndWJyZQpsdWlzYW50Cmx1bWllXHUwMzAwcmUKbHVuYWlyZQpsdW5kaQpsdXJvbgpsdXR0ZXIKbHV4dWV1eAptYWNoaW5lCm1hZ2FzaW4KbWFnZW50YQptYWdpcXVlCm1haWdyZQptYWlsbG9uCm1haW50aWVuCm1haXJpZQptYWlzb24KbWFqb3JlcgptYWxheGVyCm1hbGVcdTAzMDFmaWNlCm1hbGhldXIKbWFsaWNlCm1hbGxldHRlCm1hbW1vdXRoCm1hbmRhdGVyCm1hbmlhYmxlCm1hbnF1YW50Cm1hbnRlYXUKbWFudWVsCm1hcmF0aG9uCm1hcmJyZQptYXJjaGFuZAptYXJkaQptYXJpdGltZQptYXJxdWV1cgptYXJyb24KbWFydGVsZXIKbWFzY290dGUKbWFzc2lmCm1hdGVcdTAzMDFyaWVsCm1hdGllXHUwMzAwcmUKbWF0cmFxdWUKbWF1ZGlyZQptYXVzc2FkZQptYXV2ZQptYXhpbWFsCm1lXHUwMzAxY2hhbnQKbWVcdTAzMDFjb25udQptZVx1MDMwMWRhaWxsZQptZVx1MDMwMWRlY2luCm1lXHUwMzAxZGl0ZXIKbWVcdTAzMDFkdXNlCm1laWxsZXVyCm1lXHUwMzAxbGFuZ2UKbWVcdTAzMDFsb2RpZQptZW1icmUKbWVcdTAzMDFtb2lyZQptZW5hY2VyCm1lbmVyCm1lbmhpcgptZW5zb25nZQptZW50b3IKbWVyY3JlZGkKbWVcdTAzMDFyaXRlCm1lcmxlCm1lc3NhZ2VyCm1lc3VyZQptZVx1MDMwMXRhbAptZVx1MDMwMXRlXHUwMzAxb3JlCm1lXHUwMzAxdGhvZGUKbWVcdTAzMDF0aWVyCm1ldWJsZQptaWF1bGVyCm1pY3JvYmUKbWlldHRlCm1pZ25vbgptaWdyZXIKbWlsaWV1Cm1pbGxpb24KbWltaXF1ZQptaW5jZQptaW5lXHUwMzAxcmFsCm1pbmltYWwKbWlub3JlcgptaW51dGUKbWlyYWNsZQptaXJvaXRlcgptaXNzaWxlCm1peHRlCm1vYmlsZQptb2Rlcm5lCm1vZWxsZXV4Cm1vbmRpYWwKbW9uaXRldXIKbW9ubmFpZQptb25vdG9uZQptb25zdHJlCm1vbnRhZ25lCm1vbnVtZW50Cm1vcXVldXIKbW9yY2VhdQptb3JzdXJlCm1vcnRpZXIKbW90ZXVyCm1vdGlmCm1vdWNoZQptb3VmbGUKbW91bGluCm1vdXNzb24KbW91dG9uCm1vdXZhbnQKbXVsdGlwbGUKbXVuaXRpb24KbXVyYWlsbGUKbXVyZVx1MDMwMG5lCm11cm11cmUKbXVzY2xlCm11c2VcdTAzMDF1bQptdXNpY2llbgptdXRhdGlvbgptdXRlcgptdXR1ZWwKbXlyaWFkZQpteXJ0aWxsZQpteXN0ZVx1MDMwMHJlCm15dGhpcXVlCm5hZ2V1cgpuYXBwZQpuYXJxdW9pcwpuYXJyZXIKbmF0YXRpb24KbmF0aW9uCm5hdHVyZQpuYXVmcmFnZQpuYXV0aXF1ZQpuYXZpcmUKbmVcdTAzMDFidWxldXgKbmVjdGFyCm5lXHUwMzAxZmFzdGUKbmVcdTAzMDFnYXRpb24KbmVcdTAzMDFnbGlnZXIKbmVcdTAzMDFnb2NpZXIKbmVpZ2UKbmVydmV1eApuZXR0b3llcgpuZXVyb25lCm5ldXRyb24KbmV2ZXUKbmljaGUKbmlja2VsCm5pdHJhdGUKbml2ZWF1Cm5vYmxlCm5vY2lmCm5vY3R1cm5lCm5vaXJjZXVyCm5vaXNldHRlCm5vbWFkZQpub21icmV1eApub21tZXIKbm9ybWF0aWYKbm90YWJsZQpub3RpZmllcgpub3RvaXJlCm5vdXJyaXIKbm91dmVhdQpub3ZhdGV1cgpub3ZlbWJyZQpub3ZpY2UKbnVhZ2UKbnVhbmNlcgpudWlyZQpudWlzaWJsZQpudW1lXHUwMzAxcm8KbnVwdGlhbApudXF1ZQpudXRyaXRpZgpvYmVcdTAzMDFpcgpvYmplY3RpZgpvYmxpZ2VyCm9ic2N1cgpvYnNlcnZlcgpvYnN0YWNsZQpvYnRlbmlyCm9idHVyZXIKb2NjYXNpb24Kb2NjdXBlcgpvY2VcdTAzMDFhbgpvY3RvYnJlCm9jdHJveWVyCm9jdHVwbGVyCm9jdWxhaXJlCm9kZXVyCm9kb3JhbnQKb2ZmZW5zZXIKb2ZmaWNpZXIKb2ZmcmlyCm9naXZlCm9pc2VhdQpvaXNpbGxvbgpvbGZhY3RpZgpvbGl2aWVyCm9tYnJhZ2UKb21ldHRyZQpvbmN0dWV1eApvbmR1bGVyCm9uZVx1MDMwMXJldXgKb25pcmlxdWUKb3BhbGUKb3BhcXVlCm9wZVx1MDMwMXJlcgpvcGluaW9uCm9wcG9ydHVuCm9wcHJpbWVyCm9wdGVyCm9wdGlxdWUKb3JhZ2V1eApvcmFuZ2UKb3JiaXRlCm9yZG9ubmVyCm9yZWlsbGUKb3JnYW5lCm9yZ3VlaWwKb3JpZmljZQpvcm5lbWVudApvcnF1ZQpvcnRpZQpvc2NpbGxlcgpvc21vc2UKb3NzYXR1cmUKb3RhcmllCm91cmFnYW4Kb3Vyc29uCm91dGlsCm91dHJhZ2VyCm91dnJhZ2UKb3ZhdGlvbgpveHlkZQpveHlnZVx1MDMwMG5lCm96b25lCnBhaXNpYmxlCnBhbGFjZQpwYWxtYXJlXHUwMzAwcwpwYWxvdXJkZQpwYWxwZXIKcGFuYWNoZQpwYW5kYQpwYW5nb2xpbgpwYW5pcXVlcgpwYW5uZWF1CnBhbm9yYW1hCnBhbnRhbG9uCnBhcGF5ZQpwYXBpZXIKcGFwb3RlcgpwYXB5cnVzCnBhcmFkb3hlCnBhcmNlbGxlCnBhcmVzc2UKcGFyZnVtZXIKcGFybGVyCnBhcm9sZQpwYXJyYWluCnBhcnNlbWVyCnBhcnRhZ2VyCnBhcnVyZQpwYXJ2ZW5pcgpwYXNzaW9uCnBhc3RlXHUwMzAwcXVlCnBhdGVybmVsCnBhdGllbmNlCnBhdHJvbgpwYXZpbGxvbgpwYXZvaXNlcgpwYXllcgpwYXlzYWdlCnBlaWduZQpwZWludHJlCnBlbGFnZQpwZVx1MDMwMWxpY2FuCnBlbGxlCnBlbG91c2UKcGVsdWNoZQpwZW5kdWxlCnBlXHUwMzAxbmVcdTAzMDF0cmVyCnBlXHUwMzAxbmlibGUKcGVuc2lmCnBlXHUwMzAxbnVyaWUKcGVcdTAzMDFwaXRlCnBlXHUwMzAxcGx1bQpwZXJkcml4CnBlcmZvcmVyCnBlXHUwMzAxcmlvZGUKcGVybXV0ZXIKcGVycGxleGUKcGVyc2lsCnBlcnRlCnBlc2VyCnBlXHUwMzAxdGFsZQpwZXRpdApwZVx1MDMwMXRyaXIKcGV1cGxlCnBoYXJhb24KcGhvYmllCnBob3F1ZQpwaG90b24KcGhyYXNlCnBoeXNpcXVlCnBpYW5vCnBpY3R1cmFsCnBpZVx1MDMwMGNlCnBpZXJyZQpwaWV1dnJlCnBpbG90ZQpwaW5jZWF1CnBpcGV0dGUKcGlxdWVyCnBpcm9ndWUKcGlzY2luZQpwaXN0b24KcGl2b3RlcgpwaXhlbApwaXp6YQpwbGFjYXJkCnBsYWZvbmQKcGxhaXNpcgpwbGFuZXIKcGxhcXVlCnBsYXN0cm9uCnBsYXRlYXUKcGxldXJlcgpwbGV4dXMKcGxpYWdlCnBsb21iCnBsb25nZXIKcGx1aWUKcGx1bWFnZQpwb2NoZXR0ZQpwb2VcdTAzMDFzaWUKcG9lXHUwMzAwdGUKcG9pbnRlCnBvaXJpZXIKcG9pc3Nvbgpwb2l2cmUKcG9sYWlyZQpwb2xpY2llcgpwb2xsZW4KcG9seWdvbmUKcG9tbWFkZQpwb21waWVyCnBvbmN0dWVsCnBvbmRlXHUwMzAxcmVyCnBvbmV5CnBvcnRpcXVlCnBvc2l0aW9uCnBvc3NlXHUwMzAxZGVyCnBvc3R1cmUKcG90YWdlcgpwb3RlYXUKcG90aW9uCnBvdWNlCnBvdWxhaW4KcG91bW9uCnBvdXJwcmUKcG91c3Npbgpwb3V2b2lyCnByYWlyaWUKcHJhdGlxdWUKcHJlXHUwMzAxY2lldXgKcHJlXHUwMzAxZGlyZQpwcmVcdTAzMDFmaXhlCnByZVx1MDMwMWx1ZGUKcHJlXHUwMzAxbm9tCnByZVx1MDMwMXNlbmNlCnByZVx1MDMwMXRleHRlCnByZVx1MDMwMXZvaXIKcHJpbWl0aWYKcHJpbmNlCnByaXNvbgpwcml2ZXIKcHJvYmxlXHUwMzAwbWUKcHJvY2VcdTAzMDFkZXIKcHJvZGlnZQpwcm9mb25kCnByb2dyZVx1MDMwMHMKcHJvaWUKcHJvamV0ZXIKcHJvbG9ndWUKcHJvbWVuZXIKcHJvcHJlCnByb3NwZVx1MDMwMHJlCnByb3RlXHUwMzAxZ2VyCnByb3Vlc3NlCnByb3ZlcmJlCnBydWRlbmNlCnBydW5lYXUKcHN5Y2hvc2UKcHVibGljCnB1Y2Vyb24KcHVpc2VyCnB1bHBlCnB1bHNhcgpwdW5haXNlCnB1bml0aWYKcHVwaXRyZQpwdXJpZmllcgpwdXp6bGUKcHlyYW1pZGUKcXVhc2FyCnF1ZXJlbGxlCnF1ZXN0aW9uCnF1aWVcdTAzMDF0dWRlCnF1aXR0ZXIKcXVvdGllbnQKcmFjaW5lCnJhY29udGVyCnJhZGlldXgKcmFnb25kaW4KcmFpZGV1cgpyYWlzaW4KcmFsZW50aXIKcmFsbG9uZ2UKcmFtYXNzZXIKcmFwaWRlCnJhc2FnZQpyYXRpc3NlcgpyYXZhZ2VyCnJhdmluCnJheW9ubmVyCnJlXHUwMzAxYWN0aWYKcmVcdTAzMDFhZ2lyCnJlXHUwMzAxYWxpc2VyCnJlXHUwMzAxYW5pbWVyCnJlY2V2b2lyCnJlXHUwMzAxY2l0ZXIKcmVcdTAzMDFjbGFtZXIKcmVcdTAzMDFjb2x0ZXIKcmVjcnV0ZXIKcmVjdWxlcgpyZWN5Y2xlcgpyZVx1MDMwMWRpZ2VyCnJlZG91dGVyCnJlZmFpcmUKcmVcdTAzMDFmbGV4ZQpyZVx1MDMwMWZvcm1lcgpyZWZyYWluCnJlZnVnZQpyZVx1MDMwMWdhbGllbgpyZVx1MDMwMWdpb24KcmVcdTAzMDFnbGFnZQpyZVx1MDMwMWd1bGllcgpyZVx1MDMwMWl0ZVx1MDMwMXJlcgpyZWpldGVyCnJlam91ZXIKcmVsYXRpZgpyZWxldmVyCnJlbGllZgpyZW1hcnF1ZQpyZW1lXHUwMzAwZGUKcmVtaXNlCnJlbW9udGVyCnJlbXBsaXIKcmVtdWVyCnJlbmFyZApyZW5mb3J0CnJlbmlmbGVyCnJlbm9uY2VyCnJlbnRyZXIKcmVudm9pCnJlcGxpZXIKcmVwb3J0ZXIKcmVwcmlzZQpyZXB0aWxlCnJlcXVpbgpyZVx1MDMwMXNlcnZlCnJlXHUwMzAxc2luZXV4CnJlXHUwMzAxc291ZHJlCnJlc3BlY3QKcmVzdGVyCnJlXHUwMzAxc3VsdGF0CnJlXHUwMzAxdGFibGlyCnJldGVuaXIKcmVcdTAzMDF0aWN1bGUKcmV0b21iZXIKcmV0cmFjZXIKcmVcdTAzMDF1bmlvbgpyZVx1MDMwMXVzc2lyCnJldmFuY2hlCnJldml2cmUKcmVcdTAzMDF2b2x0ZQpyZVx1MDMwMXZ1bHNpZgpyaWNoZXNzZQpyaWRlYXUKcmlldXIKcmlnaWRlCnJpZ29sZXIKcmluY2VyCnJpcG9zdGVyCnJpc2libGUKcmlzcXVlCnJpdHVlbApyaXZhbApyaXZpZVx1MDMwMHJlCnJvY2hldXgKcm9tYW5jZQpyb21wcmUKcm9uY2UKcm9uZGluCnJvc2VhdQpyb3NpZXIKcm90YXRpZgpyb3Rvcgpyb3R1bGUKcm91Z2UKcm91aWxsZQpyb3VsZWF1CnJvdXRpbmUKcm95YXVtZQpydWJhbgpydWJpcwpydWNoZQpydWVsbGUKcnVndWV1eApydWluZXIKcnVpc3NlYXUKcnVzZXIKcnVzdGlxdWUKcnl0aG1lCnNhYmxlcgpzYWJvdGVyCnNhYnJlCnNhY29jaGUKc2FmYXJpCnNhZ2Vzc2UKc2Fpc2lyCnNhbGFkZQpzYWxpdmUKc2Fsb24Kc2FsdWVyCnNhbWVkaQpzYW5jdGlvbgpzYW5nbGllcgpzYXJjYXNtZQpzYXJkaW5lCnNhdHVyZXIKc2F1Z3JlbnUKc2F1bW9uCnNhdXRlcgpzYXV2YWdlCnNhdmFudApzYXZvbm5lcgpzY2FscGVsCnNjYW5kYWxlCnNjZVx1MDMwMWxlXHUwMzAxcmF0CnNjZVx1MDMwMW5hcmlvCnNjZXB0cmUKc2NoZVx1MDMwMW1hCnNjaWVuY2UKc2NpbmRlcgpzY29yZQpzY3J1dGluCnNjdWxwdGVyCnNlXHUwMzAxYW5jZQpzZVx1MDMwMWNhYmxlCnNlXHUwMzAxY2hlcgpzZWNvdWVyCnNlXHUwMzAxY3JlXHUwMzAxdGVyCnNlXHUwMzAxZGF0aWYKc2VcdTAzMDFkdWlyZQpzZWlnbmV1cgpzZVx1MDMwMWpvdXIKc2VcdTAzMDFsZWN0aWYKc2VtYWluZQpzZW1ibGVyCnNlbWVuY2UKc2VcdTAzMDFtaW5hbApzZVx1MDMwMW5hdGV1cgpzZW5zaWJsZQpzZW50ZW5jZQpzZVx1MDMwMXBhcmVyCnNlXHUwMzAxcXVlbmNlCnNlcmVpbgpzZXJnZW50CnNlXHUwMzAxcmlldXgKc2VycnVyZQpzZVx1MDMwMXJ1bQpzZXJ2aWNlCnNlXHUwMzAxc2FtZQpzZVx1MDMwMXZpcgpzZXZyYWdlCnNleHR1cGxlCnNpZGVcdTAzMDFyYWwKc2llXHUwMzAwY2xlCnNpZVx1MDMwMWdlcgpzaWZmbGVyCnNpZ2xlCnNpZ25hbApzaWxlbmNlCnNpbGljaXVtCnNpbXBsZQpzaW5jZVx1MDMwMHJlCnNpbmlzdHJlCnNpcGhvbgpzaXJvcApzaXNtaXF1ZQpzaXR1ZXIKc2tpZXIKc29jaWFsCnNvY2xlCnNvZGl1bQpzb2lnbmV1eApzb2xkYXQKc29sZWlsCnNvbGl0dWRlCnNvbHVibGUKc29tYnJlCnNvbW1laWwKc29tbm9sZXIKc29uZGUKc29uZ2V1cgpzb25uZXR0ZQpzb25vcmUKc29yY2llcgpzb3J0aXIKc29zaWUKc290dGlzZQpzb3VjaWV1eApzb3VkdXJlCnNvdWZmbGUKc291bGV2ZXIKc291cGFwZQpzb3VyY2UKc291dGlyZXIKc291dmVuaXIKc3BhY2lldXgKc3BhdGlhbApzcGVcdTAzMDFjaWFsCnNwaGVcdTAzMDByZQpzcGlyYWwKc3RhYmxlCnN0YXRpb24Kc3Rlcm51bQpzdGltdWx1cwpzdGlwdWxlcgpzdHJpY3QKc3R1ZGlldXgKc3R1cGV1cgpzdHlsaXN0ZQpzdWJsaW1lCnN1YnN0cmF0CnN1YnRpbApzdWJ2ZW5pcgpzdWNjZVx1MDMwMHMKc3VjcmUKc3VmZml4ZQpzdWdnZVx1MDMwMXJlcgpzdWl2ZXVyCnN1bGZhdGUKc3VwZXJiZQpzdXBwbGllcgpzdXJmYWNlCnN1cmljYXRlCnN1cm1lbmVyCnN1cnByaXNlCnN1cnNhdXQKc3VydmllCnN1c3BlY3QKc3lsbGFiZQpzeW1ib2xlCnN5bWVcdTAzMDF0cmllCnN5bmFwc2UKc3ludGF4ZQpzeXN0ZVx1MDMwMG1lCnRhYmFjCnRhYmxpZXIKdGFjdGlsZQp0YWlsbGVyCnRhbGVudAp0YWxpc21hbgp0YWxvbm5lcgp0YW1ib3VyCnRhbWlzZXIKdGFuZ2libGUKdGFwaXMKdGFxdWluZXIKdGFyZGVyCnRhcmlmCnRhcnRpbmUKdGFzc2UKdGF0YW1pCnRhdG91YWdlCnRhdXBlCnRhdXJlYXUKdGF4ZXIKdGVcdTAzMDFtb2luCnRlbXBvcmVsCnRlbmFpbGxlCnRlbmRyZQp0ZW5ldXIKdGVuaXIKdGVuc2lvbgp0ZXJtaW5lcgp0ZXJuZQp0ZXJyaWJsZQp0ZVx1MDMwMXRpbmUKdGV4dGUKdGhlXHUwMzAwbWUKdGhlXHUwMzAxb3JpZQp0aGVcdTAzMDFyYXBpZQp0aG9yYXgKdGliaWEKdGllXHUwMzAwZGUKdGltaWRlCnRpcmVsaXJlCnRpcm9pcgp0aXNzdQp0aXRhbmUKdGl0cmUKdGl0dWJlcgp0b2JvZ2dhbgp0b2xlXHUwMzAxcmFudAp0b21hdGUKdG9uaXF1ZQp0b25uZWF1CnRvcG9ueW1lCnRvcmNoZQp0b3JkcmUKdG9ybmFkZQp0b3JwaWxsZQp0b3JyZW50CnRvcnNlCnRvcnR1ZQp0b3RlbQp0b3VjaGVyCnRvdXJuYWdlCnRvdXNzZXIKdG94aW5lCnRyYWN0aW9uCnRyYWZpYwp0cmFnaXF1ZQp0cmFoaXIKdHJhaW4KdHJhbmNoZXIKdHJhdmFpbAp0cmVcdTAzMDBmbGUKdHJlbXBlcgp0cmVcdTAzMDFzb3IKdHJldWlsCnRyaWFnZQp0cmlidW5hbAp0cmljb3Rlcgp0cmlsb2dpZQp0cmlvbXBoZQp0cmlwbGVyCnRyaXR1cmVyCnRyaXZpYWwKdHJvbWJvbmUKdHJvbmMKdHJvcGljYWwKdHJvdXBlYXUKdHVpbGUKdHVsaXBlCnR1bXVsdGUKdHVubmVsCnR1cmJpbmUKdHV0ZXVyCnR1dG95ZXIKdHV5YXUKdHltcGFuCnR5cGhvbgp0eXBpcXVlCnR5cmFuCnVidWVzcXVlCnVsdGltZQp1bHRyYXNvbgp1bmFuaW1lCnVuaWZpZXIKdW5pb24KdW5pcXVlCnVuaXRhaXJlCnVuaXZlcnMKdXJhbml1bQp1cmJhaW4KdXJ0aWNhbnQKdXNhZ2UKdXNpbmUKdXN1ZWwKdXN1cmUKdXRpbGUKdXRvcGllCnZhY2FybWUKdmFjY2luCnZhZ2Fib25kCnZhZ3VlCnZhaWxsYW50CnZhaW5jcmUKdmFpc3NlYXUKdmFsYWJsZQp2YWxpc2UKdmFsbG9uCnZhbHZlCnZhbXBpcmUKdmFuaWxsZQp2YXBldXIKdmFyaWVyCnZhc2V1eAp2YXNzYWwKdmFzdGUKdmVjdGV1cgp2ZWRldHRlCnZlXHUwMzAxZ2VcdTAzMDF0YWwKdmVcdTAzMDFoaWN1bGUKdmVpbmFyZAp2ZVx1MDMwMWxvY2UKdmVuZHJlZGkKdmVcdTAzMDFuZVx1MDMwMXJlcgp2ZW5nZXIKdmVuaW1ldXgKdmVudG91c2UKdmVyZHVyZQp2ZVx1MDMwMXJpbgp2ZXJuaXIKdmVycm91CnZlcnNlcgp2ZXJ0dQp2ZXN0b24KdmVcdTAzMDF0ZVx1MDMwMXJhbgp2ZVx1MDMwMXR1c3RlCnZleGFudAp2ZXhlcgp2aWFkdWMKdmlhbmRlCnZpY3RvaXJlCnZpZGFuZ2UKdmlkZVx1MDMwMW8KdmlnbmV0dGUKdmlndWV1cgp2aWxhaW4KdmlsbGFnZQp2aW5haWdyZQp2aW9sb24KdmlwZVx1MDMwMHJlCnZpcmVtZW50CnZpcnR1b3NlCnZpcnVzCnZpc2FnZQp2aXNldXIKdmlzaW9uCnZpc3F1ZXV4CnZpc3VlbAp2aXRhbAp2aXRlc3NlCnZpdGljb2xlCnZpdHJpbmUKdml2YWNlCnZpdmlwYXJlCnZvY2F0aW9uCnZvZ3Vlcgp2b2lsZQp2b2lzaW4Kdm9pdHVyZQp2b2xhaWxsZQp2b2xjYW4Kdm9sdGlnZXIKdm9sdW1lCnZvcmFjZQp2b3J0ZXgKdm90ZXIKdm91bG9pcgp2b3lhZ2UKdm95ZWxsZQp3YWdvbgp4ZVx1MDMwMW5vbgp5YWNodAp6ZVx1MDMwMGJyZQp6ZVx1MDMwMW5pdGgKemVzdGUKem9vbG9naWVgLnNwbGl0KCJcbiIpOwoKICAvLyBub2RlX21vZHVsZXMvQHNjdXJlL2JpcDM5L2VzbS93b3JkbGlzdHMvaXRhbGlhbi5qcwogIHZhciB3b3JkbGlzdDQgPSBgYWJhY28KYWJiYWdsaW8KYWJiaW5hdG8KYWJldGUKYWJpc3NvCmFib2xpcmUKYWJyYXNpdm8KYWJyb2dhdG8KYWNjYWRlcmUKYWNjZW5ubwphY2N1c2F0bwphY2V0b25lCmFjaGlsbGUKYWNpZG8KYWNxdWEKYWNyZQphY3JpbGljbwphY3JvYmF0YQphY3V0bwphZGFnaW8KYWRkZWJpdG8KYWRkb21lCmFkZWd1YXRvCmFkZXJpcmUKYWRpcGUKYWRvdHRhcmUKYWR1bGFyZQphZmZhYmlsZQphZmZldHRvCmFmZmlzc28KYWZmcmFudG8KYWZvcmlzbWEKYWZvc28KYWZyaWNhbm8KYWdhdmUKYWdlbnRlCmFnZXZvbGUKYWdnYW5jaW8KYWdpcmUKYWdpdGFyZQphZ29uaXNtbwphZ3JpY29sbwphZ3J1bWV0bwphZ3V6em8KYWxhYmFyZGEKYWxhdG8KYWxiYXRybwphbGJlcmF0bwphbGJvCmFsYnVtZQphbGNlCmFsY29saWNvCmFsZXR0b25lCmFsZmEKYWxnZWJyYQphbGlhbnRlCmFsaWJpCmFsaW1lbnRvCmFsbGFnYXRvCmFsbGVncm8KYWxsaWV2bwphbGxvZG9sYQphbGx1c2l2bwphbG1lbm8KYWxvZ2VubwphbHBhY2EKYWxwZXN0cmUKYWx0YWxlbmEKYWx0ZXJubwphbHRpY2NpbwphbHRyb3ZlCmFsdW5ubwphbHZlb2xvCmFsemFyZQphbWFsZ2FtYQphbWFuaXRhCmFtYXJlbmEKYW1iaXRvCmFtYnJhdG8KYW1lYmEKYW1lcmljYQphbWV0aXN0YQphbWljbwphbW1hc3NvCmFtbWVuZGEKYW1taXJhcmUKYW1tb25pdG8KYW1vcmUKYW1waW8KYW1wbGlhcmUKYW11bGV0bwphbmFjYXJkbwphbmFncmFmZQphbmFsaXN0YQphbmFyY2hpYQphbmF0cmEKYW5jYQphbmNlbGxhCmFuY29yYQphbmRhcmUKYW5kcmVhCmFuZWxsbwphbmdlbG8KYW5nb2xhcmUKYW5ndXN0bwphbmltYQphbm5lZ2FyZQphbm5pZGF0bwphbm5vCmFubnVuY2lvCmFub25pbW8KYW50aWNpcG8KYW56aQphcGF0aWNvCmFwZXJ0dXJhCmFwb2RlCmFwcGFyaXJlCmFwcGV0aXRvCmFwcG9nZ2lvCmFwcHJvZG8KYXBwdW50bwphcHJpbGUKYXJhYmljYQphcmFjaGlkZQphcmFnb3N0YQphcmFsZGljYQphcmFuY2lvCmFyYXR1cmEKYXJhenpvCmFyYml0cm8KYXJjaGl2aW8KYXJkaXRvCmFyZW5pbGUKYXJnZW50bwphcmdpbmUKYXJndXRvCmFyaWEKYXJtb25pYQphcm5lc2UKYXJyZWRhdG8KYXJyaW5nYQphcnJvc3RvCmFyc2VuaWNvCmFyc28KYXJ0ZWZpY2UKYXJ6aWxsbwphc2NpdXR0bwphc2NvbHRvCmFzZXBzaQphc2V0dGljbwphc2ZhbHRvCmFzaW5vCmFzb2xhCmFzcGlyYXRvCmFzcHJvCmFzc2FnZ2lvCmFzc2UKYXNzb2x1dG8KYXNzdXJkbwphc3RhCmFzdGVudXRvCmFzdGljZQphc3RyYXR0bwphdGF2aWNvCmF0ZWlzbW8KYXRvbWljbwphdG9ubwphdHRlc2EKYXR0aXZhcmUKYXR0b3JubwphdHRyaXRvCmF0dHVhbGUKYXVzaWxpbwphdXN0cmlhCmF1dGlzdGEKYXV0b25vbW8KYXV0dW5ubwphdmFuemF0bwphdmVyZQphdnZlbmlyZQphdnZpc28KYXZ2b2xnZXJlCmF6aW9uZQphem90bwphenppbW8KYXp6dXJybwpiYWJlbGUKYmFjY2FubwpiYWNpbm8KYmFjbwpiYWRlc3NhCmJhZGlsYXRhCmJhZ25hdG8KYmFpdGEKYmFsY29uZQpiYWxkbwpiYWxlbmEKYmFsbGF0YQpiYWx6YW5vCmJhbWJpbm8KYmFuZGlyZQpiYXJhb25kYQpiYXJiYXJvCmJhcmNhCmJhcml0b25vCmJhcmx1bWUKYmFyb2NjbwpiYXNpbGljbwpiYXNzbwpiYXRvc3RhCmJhdHR1dG8KYmF1bGUKYmF2YQpiYXZvc2EKYmVjY28KYmVmZmEKYmVsZ2lvCmJlbHZhCmJlbmRhCmJlbmV2b2xlCmJlbmlnbm8KYmVuemluYQpiZXJlCmJlcmxpbmEKYmV0YQpiaWJpdGEKYmljaQpiaWRvbmUKYmlmaWRvCmJpZ2EKYmlsYW5jaWEKYmltYm8KYmlub2NvbG8KYmlvbG9nbwpiaXBlZGUKYmlwb2xhcmUKYmlyYmFudGUKYmlycmEKYmlzY290dG8KYmlzZXN0bwpiaXNub25ubwpiaXNvbnRlCmJpc3R1cmkKYml6emFycm8KYmxhbmRvCmJsYXR0YQpib2xsaXRvCmJvbmlmaWNvCmJvcmRvCmJvc2NvCmJvdGFuaWNvCmJvdHRpbm8KYm96em9sbwpicmFjY2lvCmJyYWRpcG8KYnJhbWEKYnJhbmNhCmJyYXZ1cmEKYnJldGVsbGEKYnJldmV0dG8KYnJlenphCmJyaWdsaWEKYnJpbGxhbnRlCmJyaW5kYXJlCmJyb2Njb2xvCmJyb2RvCmJyb256aW5hCmJydWxsbwpicnVubwpidWJib25lCmJ1Y2EKYnVkaW5vCmJ1ZmZvbmUKYnVpbwpidWxibwpidW9ubwpidXJsb25lCmJ1cnJhc2NhCmJ1c3NvbGEKYnVzdGEKY2FkZXR0bwpjYWR1Y28KY2FsYW1hcm8KY2FsY29sbwpjYWxlc3NlCmNhbGlicm8KY2FsbW8KY2Fsb3JpYQpjYW1idXNhCmNhbWVyYXRhCmNhbWljaWEKY2FtbWlubwpjYW1vbGEKY2FtcGFsZQpjYW5hcGEKY2FuZGVsYQpjYW5lCmNhbmlubwpjYW5vdHRvCmNhbnRpbmEKY2FwYWNlCmNhcGVsbG8KY2FwaXRvbG8KY2Fwb2dpcm8KY2FwcGVybwpjYXByYQpjYXBzdWxhCmNhcmFwYWNlCmNhcmNhc3NhCmNhcmRvCmNhcmlzbWEKY2Fyb3ZhbmEKY2FycmV0dG8KY2FydG9saW5hCmNhc2FjY2lvCmNhc2NhdGEKY2FzZXJtYQpjYXNvCmNhc3NvbmUKY2FzdGVsbG8KY2FzdWFsZQpjYXRhc3RhCmNhdGVuYQpjYXRyYW1lCmNhdXRvCmNhdmlsbG8KY2VkaWJpbGUKY2VkcmF0YQpjZWZhbG8KY2VsZWJyZQpjZWxsdWxhcmUKY2VuYQpjZW5vbmUKY2VudGVzaW1vCmNlcmFtaWNhCmNlcmNhcmUKY2VydG8KY2VydW1lCmNlcnZlbGxvCmNlc29pYQpjZXNwbwpjZXRvCmNoZWxhCmNoaWFybwpjaGljY2EKY2hpZWRlcmUKY2hpbWVyYQpjaGluYQpjaGlydXJnbwpjaGl0YXJyYQpjaWFvCmNpY2xpc21vCmNpZnJhcmUKY2lnbm8KY2lsaW5kcm8KY2lvdHRvbG8KY2lyY2EKY2lycm9zaQpjaXRyaWNvCmNpdHRhZGlubwpjaXVmZm8KY2l2ZXR0YQpjaXZpbGUKY2xhc3NpY28KY2xpbmljYQpjbG9ybwpjb2Njbwpjb2RhcmRvCmNvZGljZQpjb2VyZW50ZQpjb2dub21lCmNvbGxhcmUKY29sbWF0bwpjb2xvcmUKY29scG9zbwpjb2x0aXZhdG8KY29semEKY29tYQpjb21ldGEKY29tbWFuZG8KY29tb2RvCmNvbXB1dGVyCmNvbXVuZQpjb25jaXNvCmNvbmR1cnJlCmNvbmZlcm1hCmNvbmdlbGFyZQpjb25pdWdlCmNvbm5lc3NvCmNvbm9zY2VyZQpjb25zdW1vCmNvbnRpbnVvCmNvbnZlZ25vCmNvcGVydG8KY29waW9uZQpjb3BwaWEKY29wcmljYXBvCmNvcmF6emEKY29yZGF0YQpjb3JpY2F0bwpjb3JuaWNlCmNvcm9sbGEKY29ycG8KY29ycmVkbwpjb3JzaWEKY29ydGVzZQpjb3NtaWNvCmNvc3RhbnRlCmNvdHR1cmEKY292YXRvCmNyYXRlcmUKY3JhdmF0dGEKY3JlYXRvCmNyZWRlcmUKY3JlbW9zbwpjcmVzY2l0YQpjcmV0YQpjcmljZXRvCmNyaW5hbGUKY3Jpc2kKY3JpdGljbwpjcm9jZQpjcm9uYWNhCmNyb3N0YXRhCmNydWNpYWxlCmNydXNjYQpjdWNpcmUKY3VjdWxvCmN1Z2lubwpjdWxsYXRvCmN1cG9sYQpjdXJhdG9yZQpjdXJzb3JlCmN1cnZvCmN1c2Npbm8KY3VzdG9kZQpkYWRvCmRhaW5vCmRhbG1hdGEKZGFtZXJpbm8KZGFuaWVsYQpkYW5ub3NvCmRhbnphcmUKZGF0YXRvCmRhdmFudGkKZGF2dmVybwpkZWJ1dHRvCmRlY2VubmlvCmRlY2lzbwpkZWNsaW5vCmRlY29sbG8KZGVjcmV0bwpkZWRpY2F0bwpkZWZpbml0bwpkZWZvcm1lCmRlZ25vCmRlbGVnYXJlCmRlbGZpbm8KZGVsaXJpbwpkZWx0YQpkZW1lbnphCmRlbm90YXRvCmRlbnRybwpkZXBvc2l0bwpkZXJhcGF0YQpkZXJpdmFyZQpkZXJvZ2EKZGVzY3JpdHRvCmRlc2VydG8KZGVzaWRlcmlvCmRlc3VtZXJlCmRldGVyc2l2bwpkZXZvdG8KZGlhbWV0cm8KZGljZW1icmUKZGllZHJvCmRpZmVzbwpkaWZmdXNvCmRpZ2VyaXJlCmRpZ2l0YWxlCmRpbHV2aW8KZGluYW1pY28KZGlubmFuemkKZGlwaW50bwpkaXBsb21hCmRpcG9sbwpkaXJhZGFyZQpkaXJlCmRpcm90dG8KZGlydXBvCmRpc2FnaW8KZGlzY3JldG8KZGlzZmFyZQpkaXNnZWxvCmRpc3Bvc3RvCmRpc3RhbnphCmRpc3VtYW5vCmRpdG8KZGl2YW5vCmRpdmVsdG8KZGl2aWRlcmUKZGl2b3JhdG8KZG9ibG9uZQpkb2NlbnRlCmRvZ2FuYWxlCmRvZ21hCmRvbGNlCmRvbWF0bwpkb21lbmljYQpkb21pbmFyZQpkb25kb2xvCmRvbm8KZG9ybWlyZQpkb3RlCmRvdHRvcmUKZG92dXRvCmRvenppbmEKZHJhZ28KZHJ1aWRvCmR1YmJpbwpkdWJpdGFyZQpkdWNhbGUKZHVuYQpkdW9tbwpkdXBsaWNlCmR1cmF0dXJvCmViYW5vCmVjY2Vzc28KZWNjbwplY2xpc3NpCmVjb25vbWlhCmVkZXJhCmVkaWNvbGEKZWRpbGUKZWRpdG9yaWEKZWR1Y2FyZQplZ2Vtb25pYQplZ2xpCmVnb2lzbW8KZWdyZWdpbwplbGFib3JhdG8KZWxhcmdpcmUKZWxlZ2FudGUKZWxlbmNhdG8KZWxldHRvCmVsZXZhcmUKZWxmaWNvCmVsaWNhCmVsbW8KZWxzYQplbHVzbwplbWFuYXRvCmVtYmxlbWEKZW1lc3NvCmVtaXJvCmVtb3Rpdm8KZW1vemlvbmUKZW1waXJpY28KZW11bG8KZW5kZW1pY28KZW5kdXJvCmVuZXJnaWEKZW5mYXNpCmVub3RlY2EKZW50cmFyZQplbnppbWEKZXBhdGl0ZQplcGlsb2dvCmVwaXNvZGlvCmVwb2NhbGUKZXBwdXJlCmVxdWF0b3JlCmVyYXJpbwplcmJhCmVyYm9zbwplcmVkZQplcmVtaXRhCmVyaWdlcmUKZXJtZXRpY28KZXJvZQplcm9zaXZvCmVycmFudGUKZXNhZ29ubwplc2FtZQplc2FuaW1lCmVzYXVkaXJlCmVzY2EKZXNlbXBpbwplc2VyY2l0bwplc2liaXRvCmVzaWdlbnRlCmVzaXN0ZXJlCmVzaXRvCmVzb2ZhZ28KZXNvcnRhdG8KZXNvc28KZXNwYW5zbwplc3ByZXNzbwplc3NlbnphCmVzc28KZXN0ZXNvCmVzdGltYXJlCmVzdG9uaWEKZXN0cm9zbwplc3VsdGFyZQpldGlsaWNvCmV0bmljbwpldHJ1c2NvCmV0dG8KZXVjbGlkZW8KZXVyb3BhCmV2YXNvCmV2aWRlbnphCmV2aXRhdG8KZXZvbHV0bwpldnZpdmEKZmFiYnJpY2EKZmFjY2VuZGEKZmFjaGlybwpmYWxjbwpmYW1pZ2xpYQpmYW5hbGUKZmFuZmFyYQpmYW5nbwpmYW50YXNtYQpmYXJlCmZhcmZhbGxhCmZhcmlub3NvCmZhcm1hY28KZmFzY2lhCmZhc3Rvc28KZmFzdWxsbwpmYXRpY2FyZQpmYXRvCmZhdm9sb3NvCmZlYmJyZQpmZWNvbGEKZmVkZQpmZWdhdG8KZmVscGEKZmVsdHJvCmZlbW1pbmEKZmVuZGVyZQpmZW5vbWVubwpmZXJtZW50bwpmZXJybwpmZXJ0aWxlCmZlc3N1cmEKZmVzdGl2bwpmZXR0YQpmZXVkbwpmaWFiYQpmaWR1Y2lhCmZpZmEKZmlndXJhdG8KZmlsbwpmaW5hbnphCmZpbmVzdHJhCmZpbmlyZQpmaW9yZQpmaXNjYWxlCmZpc2ljbwpmaXVtZQpmbGFjb25lCmZsYW1lbmNvCmZsZWJvCmZsZW1tYQpmbG9yaWRvCmZsdWVudGUKZmx1b3JvCmZvYmljbwpmb2NhY2NpYQpmb2Nvc28KZm9kZXJhdG8KZm9nbGlvCmZvbGF0YQpmb2xjbG9yZQpmb2xnb3JlCmZvbmRlbnRlCmZvbmV0aWNvCmZvbmlhCmZvbnRhbmEKZm9yYml0bwpmb3JjaGV0dGEKZm9yZXN0YQpmb3JtaWNhCmZvcm5haW8KZm9ybwpmb3J0ZXp6YQpmb3J6YXJlCmZvc2ZhdG8KZm9zc28KZnJhY2Fzc28KZnJhbmEKZnJhc3Npbm8KZnJhdGVsbG8KZnJlY2NldHRhCmZyZW5hdGEKZnJlc2NvCmZyaWdvCmZyb2xsaW5vCmZyb25kZQpmcnVnYWxlCmZydXR0YQpmdWNpbGF0YQpmdWNzaWEKZnVnZ2VudGUKZnVsbWluZQpmdWx2bwpmdW1hbnRlCmZ1bWV0dG8KZnVtb3NvCmZ1bmUKZnVuemlvbmUKZnVvY28KZnVyYm8KZnVyZ29uZQpmdXJvcmUKZnVzbwpmdXRpbGUKZ2FiYmlhbm8KZ2FmZmUKZ2FsYXRlbwpnYWxsaW5hCmdhbG9wcG8KZ2FtYmVybwpnYW1tYQpnYXJhbnppYQpnYXJibwpnYXJvZmFubwpnYXJ6b25lCmdhc2RvdHRvCmdhc29saW8KZ2FzdHJpY28KZ2F0dG8KZ2F1ZGlvCmdhemVibwpnYXp6ZWxsYQpnZWNvCmdlbGF0aW5hCmdlbHNvCmdlbWVsbG8KZ2VtbWF0bwpnZW5lCmdlbml0b3JlCmdlbm5haW8KZ2Vub3RpcG8KZ2VyZ28KZ2hlcGFyZG8KZ2hpYWNjaW8KZ2hpc2EKZ2lhbGxvCmdpbGRhCmdpbmVwcm8KZ2lvY2FyZQpnaW9pZWxsbwpnaW9ybm8KZ2lvdmUKZ2lyYXRvCmdpcm9uZQpnaXR0YXRhCmdpdWRpemlvCmdpdXJhdG8KZ2l1c3RvCmdsb2J1bG8KZ2x1dGluZQpnbm9tbwpnb2JiYQpnb2xmCmdvbWl0bwpnb21tb25lCmdvbmZpbwpnb25uYQpnb3Zlcm5vCmdyYWNpbGUKZ3JhZG8KZ3JhZmljbwpncmFtbW8KZ3JhbmRlCmdyYXR0YXJlCmdyYXZvc28KZ3JhemlhCmdyZWNhCmdyZWdnZQpncmlmb25lCmdyaWdpbwpncmluemEKZ3JvdHRhCmdydXBwbwpndWFkYWdubwpndWFpbwpndWFudG8KZ3VhcmRhcmUKZ3VmbwpndWlkYXJlCmliZXJuYXRvCmljb25hCmlkZW50aWNvCmlkaWxsaW8KaWRvbG8KaWRyYQppZHJpY28KaWRyb2dlbm8KaWdpZW5lCmlnbmFybwppZ25vcmF0bwppbGFyZQppbGxlc28KaWxsb2dpY28KaWxsdWRlcmUKaW1iYWxsbwppbWJldnV0bwppbWJvY2NvCmltYnV0bwppbW1hbmUKaW1tZXJzbwppbW1vbGF0bwppbXBhY2NvCmltcGV0bwppbXBpZWdvCmltcG9ydG8KaW1wcm9udGEKaW5hbGFyZQppbmFyY2FyZQppbmF0dGl2bwppbmNhbnRvCmluY2VuZGlvCmluY2hpbm8KaW5jaXNpdm8KaW5jbHVzbwppbmNvbnRybwppbmNyb2NpbwppbmN1Ym8KaW5kYWdpbmUKaW5kaWEKaW5kb2xlCmluZWRpdG8KaW5mYXR0aQppbmZpbGFyZQppbmZsaXR0bwppbmdhZ2dpbwppbmdlZ25vCmluZ2xlc2UKaW5nb3Jkbwppbmdyb3Nzbwppbm5lc2NvCmlub2RvcmUKaW5vbHRyYXJlCmlub25kYXRvCmluc2FubwppbnNldHRvCmluc2llbWUKaW5zb25uaWEKaW5zdWxpbmEKaW50YXNhdG8KaW50ZXJvCmludG9uYWNvCmludHVpdG8KaW51bWlkaXJlCmludmFsaWRvCmludmVjZQppbnZpdG8KaXBlcmJvbGUKaXBub3RpY28KaXBvdGVzaQppcHBpY2EKaXJpZGUKaXJsYW5kYQppcm9uaWNvCmlycmlnYXRvCmlycm9yYXJlCmlzb2xhdG8KaXNvdG9wbwppc3Rlcmljbwppc3RpdHV0bwppc3RyaWNlCml0YWxpYQppdGVyYXJlCmxhYmJybwpsYWJpcmludG8KbGFjY2EKbGFjZXJhdG8KbGFjcmltYQpsYWN1bmEKbGFkZG92ZQpsYWdvCmxhbXBvCmxhbmNldHRhCmxhbnRlcm5hCmxhcmRvc28KbGFyZ2EKbGFyaW5nZQpsYXN0cmEKbGF0ZW56YQpsYXRpbm8KbGF0dHVnYQpsYXZhZ25hCmxhdm9ybwpsZWdhbGUKbGVnZ2VybwpsZW1ibwpsZW50ZXp6YQpsZW56YQpsZW9uZQpsZXByZQpsZXNpdm8KbGVzc2F0bwpsZXN0bwpsZXR0ZXJhbGUKbGV2YQpsZXZpZ2F0bwpsaWJlcm8KbGlkbwpsaWV2aXRvCmxpbGxhCmxpbWF0dXJhCmxpbWl0YXJlCmxpbXBpZG8KbGluZWFyZQpsaW5ndWEKbGlxdWlkbwpsaXJhCmxpcmljYQpsaXNjYQpsaXRlCmxpdGlnaW8KbGl2cmVhCmxvY2FuZGEKbG9kZQpsb2dpY2EKbG9tYmFyZQpsb25kcmEKbG9uZ2V2bwpsb3F1YWNlCmxvcmVuem8KbG90bwpsb3R0ZXJpYQpsdWNlCmx1Y2lkYXRvCmx1bWFjYQpsdW1pbm9zbwpsdW5nbwpsdXBvCmx1cHBvbG8KbHVzaW5nYQpsdXNzbwpsdXR0bwptYWNhYnJvCm1hY2NoaW5hCm1hY2VybwptYWNpbmF0bwptYWRhbWEKbWFnaWNvCm1hZ2xpYQptYWduZXRlCm1hZ3JvCm1haW9saWNhCm1hbGFmZWRlCm1hbGdyYWRvCm1hbGludGVzbwptYWxzYW5vCm1hbHRvCm1hbHVtb3JlCm1hbmEKbWFuY2lhCm1hbmRvcmxhCm1hbmdpYXJlCm1hbmlmZXN0bwptYW5uYXJvCm1hbm92cmEKbWFuc2FyZGEKbWFudGlkZQptYW51YnJpbwptYXBwYQptYXJhdG9uYQptYXJjaXJlCm1hcmV0dGEKbWFybW8KbWFyc3VwaW8KbWFzY2hlcmEKbWFzc2FpYQptYXN0aW5vCm1hdGVyYXNzbwptYXRyaWNvbGEKbWF0dG9uZQptYXR1cm8KbWF6dXJjYQptZWFuZHJvCm1lY2NhbmljbwptZWNlbmF0ZQptZWRlc2ltbwptZWRpdGFyZQptZWdhCm1lbGFzc2EKbWVsaXMKbWVsb2RpYQptZW5pbmdlCm1lbm8KbWVuc29sYQptZXJjdXJpbwptZXJlbmRhCm1lcmxvCm1lc2NoaW5vCm1lc2UKbWVzc2VyZQptZXN0b2xvCm1ldGFsbG8KbWV0b2RvCm1ldHRlcmUKbWlhZ29sYXJlCm1pY2EKbWljZWxpbwptaWNoZWxlCm1pY3JvYm8KbWlkb2xsbwptaWVsZQptaWdsaW9yZQptaWxhbm8KbWlsaXRlCm1pbW9zYQptaW5lcmFsZQptaW5pCm1pbm9yZQptaXJpbm8KbWlydGlsbG8KbWlzY2VsYQptaXNzaXZhCm1pc3RvCm1pc3VyYXJlCm1pdGV6emEKbWl0aWdhcmUKbWl0cmEKbWl0dGVudGUKbW5lbW9uaWNvCm1vZGVsbG8KbW9kaWZpY2EKbW9kdWxvCm1vZ2Fubwptb2dpbwptb2xlCm1vbG9zc28KbW9uYXN0ZXJvCm1vbmNvCm1vbmRpbmEKbW9uZXRhcmlvCm1vbmlsZQptb25vdG9ubwptb25zb25lCm1vbnRhdG8KbW9udmlzbwptb3JhCm1vcmRlcmUKbW9yc2ljYXRvCm1vc3Rybwptb3RpdmF0bwptb3Rvc2VnYQptb3R0bwptb3ZlbnphCm1vdmltZW50bwptb3p6bwptdWNjYQptdWNvc2EKbXVmZmEKbXVnaGV0dG8KbXVnbmFpbwptdWxhdHRvCm11bGluZWxsbwptdWx0aXBsbwptdW1taWEKbXVudG8KbXVvdmVyZQptdXJhbGUKbXVzYQptdXNjb2xvCm11c2ljYQptdXRldm9sZQptdXRvCm5hYmFiYm8KbmFmdGEKbmFub21ldHJvCm5hcmNpc28KbmFyaWNlCm5hcnJhdG8KbmFzY2VyZQpuYXN0cmFyZQpuYXR1cmFsZQpuYXV0aWNhCm5hdmlnbGlvCm5lYnVsb3NhCm5lY3Jvc2kKbmVnYXRpdm8KbmVnb3ppbwpuZW1tZW5vCm5lb2ZpdGEKbmVyZXR0bwpuZXJ2bwpuZXNzdW5vCm5ldHR1bm8KbmV1dHJhbGUKbmV2ZQpuZXZyb3RpY28KbmljY2hpYQpuaW5mYQpuaXRpZG8Kbm9iaWxlCm5vY2l2bwpub2RvCm5vbWUKbm9taW5hCm5vcmRpY28Kbm9ybWFsZQpub3J2ZWdlc2UKbm9zdHJhbm8Kbm90YXJlCm5vdGl6aWEKbm90dHVybm8Kbm92ZWxsYQpudWNsZW8KbnVsbGEKbnVtZXJvCm51b3ZvCm51dHJpcmUKbnV2b2xhCm51emlhbGUKb2FzaQpvYmJlZGlyZQpvYmJsaWdvCm9iZWxpc2NvCm9ibGlvCm9ib2xvCm9ic29sZXRvCm9jY2FzaW9uZQpvY2NoaW8Kb2NjaWRlbnRlCm9jY29ycmVyZQpvY2N1bHRhcmUKb2NyYQpvY3VsYXRvCm9kaWVybm8Kb2RvcmFyZQpvZmZlcnRhCm9mZnJpcmUKb2ZmdXNjYXRvCm9nZ2V0dG8Kb2dnaQpvZ251bm8Kb2xhbmRlc2UKb2xmYXR0bwpvbGlhdG8Kb2xpdmEKb2xvZ3JhbW1hCm9sdHJlCm9tYWdnaW8Kb21iZWxpY28Kb21icmEKb21lZ2EKb21pc3Npb25lCm9uZG9zbwpvbmVyZQpvbmljZQpvbm5pdm9ybwpvbm9yZXZvbGUKb250YQpvcGVyYXRvCm9waW5pb25lCm9wcG9zdG8Kb3JhY29sbwpvcmFmbwpvcmRpbmUKb3JlY2NoaW5vCm9yZWZpY2UKb3JmYW5vCm9yZ2FuaWNvCm9yaWdpbmUKb3JpenpvbnRlCm9ybWEKb3JtZWdnaW8Kb3JuYXRpdm8Kb3JvbG9naW8Kb3JyZW5kbwpvcnJpYmlsZQpvcnRlbnNpYQpvcnRpY2EKb3J6YXRhCm9yem8Kb3NhcmUKb3NjdXJhcmUKb3Ntb3NpCm9zcGVkYWxlCm9zcGl0ZQpvc3NhCm9zc2lkYXJlCm9zdGFjb2xvCm9zdGUKb3RpdGUKb3RyZQpvdHRhZ29ubwpvdHRpbW8Kb3R0b2JyZQpvdmFsZQpvdmVzdApvdmlubwpvdmlwYXJvCm92b2NpdG8Kb3Z1bnF1ZQpvdnZpYXJlCm96aW8KcGFjY2hldHRvCnBhY2UKcGFjaWZpY28KcGFkZWxsYQpwYWRyb25lCnBhZXNlCnBhZ2EKcGFnaW5hCnBhbGF6emluYQpwYWxlc2FyZQpwYWxsaWRvCnBhbG8KcGFsdWRlCnBhbmRvcm8KcGFubmVsbG8KcGFvbG8KcGFvbmF6em8KcGFwcmljYQpwYXJhYm9sYQpwYXJjZWxsYQpwYXJlcmUKcGFyZ29sbwpwYXJpCnBhcmxhdG8KcGFyb2xhCnBhcnRpcmUKcGFydmVuemEKcGFyemlhbGUKcGFzc2l2bwpwYXN0aWNjYQpwYXRhY2NhCnBhdG9sb2dpYQpwYXR0dW1lCnBhdm9uZQpwZWNjYXRvCnBlZGFsYXJlCnBlZG9uYWxlCnBlZ2dpbwpwZWxvc28KcGVuYXJlCnBlbmRpY2UKcGVuaXNvbGEKcGVubnV0bwpwZW5vbWJyYQpwZW5zYXJlCnBlbnRvbGEKcGVwZQpwZXBpdGEKcGVyYmVuZQpwZXJjb3JzbwpwZXJkb25hdG8KcGVyZm9yYXJlCnBlcmdhbWVuYQpwZXJpb2RvCnBlcm1lc3NvCnBlcm5vCnBlcnBsZXNzbwpwZXJzdWFzbwpwZXJ0dWdpbwpwZXJ2YXNvCnBlc2F0b3JlCnBlc2lzdGEKcGVzbwpwZXN0aWZlcm8KcGV0YWxvCnBldHRpbmUKcGV0dWxhbnRlCnBlenpvCnBpYWNlcmUKcGlhbnRhCnBpYXR0aW5vCnBpY2Npbm8KcGljb3p6YQpwaWVnYQpwaWV0cmEKcGlmZmVybwpwaWdpYW1hCnBpZ29saW8KcGlncm8KcGlsYQpwaWxpZmVybwpwaWxsb2xhCnBpbG90YQpwaW1wYW50ZQpwaW5ldGEKcGlubmEKcGlub2xvCnBpb2dnaWEKcGlvbWJvCnBpcmFtaWRlCnBpcmV0aWNvCnBpcml0ZQpwaXJvbGlzaQpwaXRvbmUKcGl6emljbwpwbGFjZWJvCnBsYW5hcmUKcGxhc21hCnBsYXRhbm8KcGxlbmFyaW8KcG9jaGV6emEKcG9kZXJvc28KcG9kaXNtbwpwb2VzaWEKcG9nZ2lhcmUKcG9sZW50YQpwb2xpZ29ubwpwb2xsaWNlCnBvbG1vbml0ZQpwb2xwZXR0YQpwb2xzbwpwb2x0cm9uYQpwb2x2ZXJlCnBvbWljZQpwb21vZG9ybwpwb250ZQpwb3BvbG9zbwpwb3JmaWRvCnBvcm9zbwpwb3Jwb3JhCnBvcnJlCnBvcnRhdGEKcG9zYQpwb3NpdGl2bwpwb3NzZXNzbwpwb3N0dWxhdG8KcG90YXNzaW8KcG90ZXJlCnByYW56bwpwcmFzc2kKcHJhdGljYQpwcmVjbHVzbwpwcmVkaWNhCnByZWZpc3NvCnByZWdpYXRvCnByZWxpZXZvCnByZW1lcmUKcHJlbm90YXJlCnByZXBhcmF0bwpwcmVzZW56YQpwcmV0ZXN0bwpwcmV2YWxzbwpwcmltYQpwcmluY2lwZQpwcml2YXRvCnByb2JsZW1hCnByb2N1cmEKcHJvZHVycmUKcHJvZnVtbwpwcm9nZXR0bwpwcm9sdW5nYQpwcm9tZXNzYQpwcm9ub21lCnByb3Bvc3RhCnByb3JvZ2EKcHJvdGVzbwpwcm92YQpwcnVkZW50ZQpwcnVnbmEKcHJ1cml0bwpwc2ljaGUKcHViYmxpY28KcHVkaWNhCnB1Z2lsYXRvCnB1Z25vCnB1bGNlCnB1bGl0bwpwdWxzYW50ZQpwdW50YXJlCnB1cGF6em8KcHVwaWxsYQpwdXJvCnF1YWRybwpxdWFsY29zYQpxdWFzaQpxdWVyZWxhCnF1b3RhCnJhY2NvbHRvCnJhZGRvcHBpbwpyYWRpY2FsZQpyYWR1bmF0bwpyYWZmaWNhCnJhZ2F6em8KcmFnaW9uZQpyYWdubwpyYW1hcnJvCnJhbWluZ28KcmFtbwpyYW5kYWdpbwpyYW50b2xhcmUKcmFwYXRvCnJhcGluYQpyYXBwcmVzbwpyYXNhdHVyYQpyYXNjaGlhdG8KcmFzZW50ZQpyYXNzZWduYQpyYXN0cmVsbG8KcmF0YQpyYXZ2ZWR1dG8KcmVhbGUKcmVjZXBpcmUKcmVjaW50bwpyZWNsdXRhCnJlY29uZGl0bwpyZWN1cGVybwpyZWRkaXRvCnJlZGltZXJlCnJlZ2FsYXRvCnJlZ2lzdHJvCnJlZ29sYQpyZWdyZXNzbwpyZWxhemlvbmUKcmVtYXJlCnJlbW90bwpyZW5uYQpyZXBsaWNhCnJlcHJpbWVyZQpyZXB1dGFyZQpyZXNhCnJlc2lkZW50ZQpyZXNwb25zbwpyZXN0YXVybwpyZXRlCnJldGluYQpyZXRvcmljYQpyZXR0aWZpY2EKcmV2b2NhdG8Kcmlhc3N1bnRvCnJpYmFkaXJlCnJpYmVsbGUKcmlicmV6em8KcmljYXJpY2EKcmljY28KcmljZXZlcmUKcmljaWNsYXRvCnJpY29yZG8KcmljcmVkdXRvCnJpZGljb2xvCnJpZHVycmUKcmlmYXNhcmUKcmlmbGVzc28Kcmlmb3JtYQpyaWZ1Z2lvCnJpZ2FyZQpyaWdldHRhdG8KcmlnaGVsbG8KcmlsYXNzYXRvCnJpbGV2YXRvCnJpbWFuZXJlCnJpbWJhbHpvCnJpbWVkaW8Kcmltb3JjaGlvCnJpbmFzY2l0YQpyaW5jYXJvCnJpbmZvcnpvCnJpbm5vdm8Kcmlub21hdG8Kcmluc2F2aXRvCnJpbnRvY2NvCnJpbnVuY2lhCnJpbnZlbmlyZQpyaXBhcmF0bwpyaXBldHV0bwpyaXBpZW5vCnJpcG9ydGFyZQpyaXByZXNhCnJpcHVsaXJlCnJpc2F0YQpyaXNjaGlvCnJpc2VydmEKcmlzaWJpbGUKcmlzbwpyaXNwZXR0bwpyaXN0b3JvCnJpc3VsdGF0bwpyaXN2b2x0bwpyaXRhcmRvCnJpdGVnbm8Kcml0bWljbwpyaXRyb3ZvCnJpdW5pb25lCnJpdmEKcml2ZXJzbwpyaXZpbmNpdGEKcml2b2x0bwpyaXpvbWEKcm9iYQpyb2JvdGljbwpyb2J1c3RvCnJvY2NpYQpyb2NvCnJvZGFnZ2lvCnJvZGVyZQpyb2RpdG9yZQpyb2dpdG8Kcm9sbGlvCnJvbWFudGljbwpyb21wZXJlCnJvbnppbwpyb3NvbGFyZQpyb3Nwbwpyb3RhbnRlCnJvdG9uZG8Kcm90dWxhCnJvdmVzY2lvCnJ1Yml6em8KcnVicmljYQpydWdhCnJ1bGxpbm8KcnVtaW5lCnJ1bW9yb3NvCnJ1b2xvCnJ1cGUKcnVzc2FyZQpydXN0aWNvCnNhYmF0bwpzYWJiaWFyZQpzYWJvdGF0bwpzYWdvbWEKc2FsYXNzbwpzYWxkYXR1cmEKc2FsZ2VtbWEKc2FsaXZhcmUKc2FsbW9uZQpzYWxvbmUKc2FsdGFyZQpzYWx1dG8Kc2Fsdm8Kc2FwZXJlCnNhcGlkbwpzYXBvcml0bwpzYXJhY2VubwpzYXJjYXNtbwpzYXJ0bwpzYXNzb3NvCnNhdGVsbGl0ZQpzYXRpcmEKc2F0b2xsbwpzYXR1cm5vCnNhdmFuYQpzYXZpbwpzYXppYXRvCnNiYWRpZ2xpbwpzYmFsem8Kc2JhbmNhdG8Kc2JhcnJhCnNiYXR0ZXJlCnNiYXZhcmUKc2JlbmRhcmUKc2JpcmNpYXJlCnNibG9jY2F0bwpzYm9jY2lhdG8Kc2JyaW5hcmUKc2JydWZmb25lCnNidWZmYXJlCnNjYWJyb3NvCnNjYWRlbnphCnNjYWxhCnNjYW1iaWFyZQpzY2FuZGFsbwpzY2Fwb2xhCnNjYXJzbwpzY2F0ZW5hcmUKc2NhdmF0bwpzY2VsdG8Kc2NlbmljbwpzY2V0dHJvCnNjaGVkYQpzY2hpZW5hCnNjaWFycGEKc2NpZW56YQpzY2luZGVyZQpzY2lwcG8Kc2Npcm9wcG8Kc2Npdm9sbwpzY2xlcmFyZQpzY29kZWxsYQpzY29scGl0bwpzY29tcGFydG8Kc2NvbmZvcnRvCnNjb3ByaXJlCnNjb3J0YQpzY29zc29uZQpzY296emVzZQpzY3JpYmEKc2Nyb2xsYXJlCnNjcnV0aW5pbwpzY3VkZXJpYQpzY3VsdG9yZQpzY3VvbGEKc2N1cm8Kc2N1c2FyZQpzZGViaXRhcmUKc2RvZ2FuYXJlCnNlY2NhdHVyYQpzZWNvbmRvCnNlZGFubwpzZWdnaW9sYQpzZWduYWxhdG8Kc2VncmVnYXRvCnNlZ3VpdG8Kc2VsY2lhdG8Kc2VsZXR0aXZvCnNlbGxhCnNlbHZhZ2dpbwpzZW1hZm9ybwpzZW1icmFyZQpzZW1lCnNlbWluYXRvCnNlbXByZQpzZW5zbwpzZW50aXJlCnNlcG9sdG8Kc2VxdWVuemEKc2VyYXRhCnNlcmJhdG8Kc2VyZW5vCnNlcmlvCnNlcnBlbnRlCnNlcnJhZ2xpbwpzZXJ2aXJlCnNlc3RpbmEKc2V0b2xhCnNldHRpbWFuYQpzZmFjZWxvCnNmYWxkYXJlCnNmYW1hdG8Kc2Zhcnpvc28Kc2ZhdGljYXRvCnNmZXJhCnNmaWRhCnNmaWxhdG8Kc2ZpbmdlCnNmb2NhdG8Kc2ZvZGVyYXJlCnNmb2dvCnNmb2x0aXJlCnNmb3J6YXRvCnNmcmF0dG8Kc2ZydXR0YXRvCnNmdWdnaXRvCnNmdW1hcmUKc2Z1c28Kc2dhYmVsbG8Kc2dhcmJhdG8Kc2dvbmZpYXJlCnNnb3JiaW8Kc2dyYXNzYXRvCnNndWFyZG8Kc2liaWxvCnNpY2NvbWUKc2llcnJhCnNpZ2xhCnNpZ25vcmUKc2lsZW56aW8Kc2lsbGFiYQpzaW1ib2xvCnNpbXBhdGljbwpzaW11bGF0bwpzaW5mb25pYQpzaW5nb2xvCnNpbmlzdHJvCnNpbm8Kc2ludGVzaQpzaW51c29pZGUKc2lwYXJpbwpzaXNtYQpzaXN0b2xlCnNpdHVhdG8Kc2xpdHRhCnNsb2dhdHVyYQpzbG92ZW5vCnNtYXJyaXRvCnNtZW1vcmF0bwpzbWVudGl0bwpzbWVyYWxkbwpzbWlsem8Kc21vbnRhcmUKc21vdHRhdG8Kc211c3NhdG8Kc25lbGxpcmUKc25lcnZhdG8Kc25vZG8Kc29iYmFsem8Kc29icmlvCnNvY2NvcnNvCnNvY2lhbGUKc29kYWxlCnNvZmZpdHRvCnNvZ25vCnNvbGRhdG8Kc29sZW5uZQpzb2xpZG8Kc29sbGF6em8Kc29sbwpzb2x1YmlsZQpzb2x2ZW50ZQpzb21hdGljbwpzb21tYQpzb25kYQpzb25ldHRvCnNvbm5pZmVybwpzb3BpcmUKc29wcGVzbwpzb3ByYQpzb3JnZXJlCnNvcnBhc3NvCnNvcnJpc28Kc29yc28Kc29ydGVnZ2lvCnNvcnZvbGF0bwpzb3NwaXJvCnNvc3RhCnNvdHRpbGUKc3BhZGEKc3BhbGxhCnNwYXJnZXJlCnNwYXRvbGEKc3BhdmVudG8Kc3BhenpvbGEKc3BlY2llCnNwZWRpcmUKc3BlZ25lcmUKc3BlbGF0dXJhCnNwZXJhbnphCnNwZXNzb3JlCnNwZXR0cmFsZQpzcGV6emF0bwpzcGlhCnNwaWdvbG9zbwpzcGlsbGF0bwpzcGlub3NvCnNwaXJhbGUKc3BsZW5kaWRvCnNwb3J0aXZvCnNwb3NvCnNwcmFuZ2EKc3ByZWNhcmUKc3Byb25hdG8Kc3BydXp6bwpzcHVudGlubwpzcXVpbGxvCnNyYWRpY2FyZQpzcm90b2xhdG8Kc3RhYmlsZQpzdGFjY28Kc3RhZmZhCnN0YWduYXJlCnN0YW1wYXRvCnN0YW50aW8Kc3Rhcm51dG8Kc3Rhc2VyYQpzdGF0dXRvCnN0ZWxvCnN0ZXBwYQpzdGVyem8Kc3RpbGV0dG8Kc3RpbWEKc3RpcnBlCnN0aXZhbGUKc3Rpenpvc28Kc3RvbmF0bwpzdG9yaWNvCnN0cmFwcG8Kc3RyZWdhdG8Kc3RyaWR1bG8Kc3Ryb3p6YXJlCnN0cnV0dG8Kc3R1Y2NhcmUKc3R1Zm8Kc3R1cGVuZG8Kc3ViZW50cm8Kc3VjY29zbwpzdWRvcmUKc3VnZ2VyaXRvCnN1Z28Kc3VsdGFubwpzdW9uYXJlCnN1cGVyYm8Kc3VwcG9ydG8Kc3VyZ2VsYXRvCnN1cnJvZ2F0bwpzdXNzdXJybwpzdXR1cmEKc3ZhZ2FyZQpzdmVkZXNlCnN2ZWdsaW8Kc3ZlbGFyZQpzdmVudXRvCnN2ZXppYQpzdmlsdXBwbwpzdmlzdGEKc3ZpenplcmEKc3ZvbHRhCnN2dW90YXJlCnRhYmFjY28KdGFidWxhdG8KdGFjY2lhcmUKdGFjaXR1cm5vCnRhbGUKdGFsaXNtYW5vCnRhbXBvbmUKdGFubmlubwp0YXJhCnRhcmRpdm8KdGFyZ2F0bwp0YXJpZmZhCnRhcnBhcmUKdGFydGFydWdhCnRhc3RvCnRhdHRpY28KdGF2ZXJuYQp0YXZvbGF0YQp0YXp6YQp0ZWNhCnRlY25pY28KdGVsZWZvbm8KdGVtZXJhcmlvCnRlbXBvCnRlbXV0bwp0ZW5kb25lCnRlbmVybwp0ZW5zaW9uZQp0ZW50YWNvbG8KdGVvcmVtYQp0ZXJtZQp0ZXJyYXp6bwp0ZXJ6ZXR0bwp0ZXNpCnRlc3NlcmF0bwp0ZXN0YXRvCnRldHJvCnRldHRvaWEKdGlmYXJlCnRpZ2VsbGEKdGltYnJvCnRpbnRvCnRpcGljbwp0aXBvZ3JhZm8KdGlyYWdnaW8KdGlybwp0aXRhbmlvCnRpdG9sbwp0aXR1YmFudGUKdGl6aW8KdGl6em9uZQp0b2NjYXJlCnRvbGxlcmFyZQp0b2x0bwp0b21ib2xhCnRvbW8KdG9uZm8KdG9uc2lsbGEKdG9wYXppbwp0b3BvbG9naWEKdG9wcGEKdG9yYmEKdG9ybmFyZQp0b3Jyb25lCnRvcnRvcmEKdG9zY2Fubwp0b3NzaXJlCnRvc3RhdHVyYQp0b3Rhbm8KdHJhYm9jY28KdHJhY2hlYQp0cmFmaWxhCnRyYWdlZGlhCnRyYWxjaW8KdHJhbW9udG8KdHJhbnNpdG8KdHJhcGFubwp0cmFycmUKdHJhc2xvY28KdHJhdHRhdG8KdHJhdmUKdHJlY2NpYQp0cmVtb2xpbwp0cmVzcG9sbwp0cmlidXRvCnRyaWNoZWNvCnRyaWZvZ2xpbwp0cmlsbG8KdHJpbmNlYQp0cmlvCnRyaXN0ZXp6YQp0cml0dXJhdG8KdHJpdmVsbGEKdHJvbWJhCnRyb25vCnRyb3Bwbwp0cm90dG9sYQp0cm92YXJlCnRydWNjYXRvCnR1YmF0dXJhCnR1ZmZhdG8KdHVsaXBhbm8KdHVtdWx0bwp0dW5pc2lhCnR1cmJhcmUKdHVyY2hpbm8KdHV0YQp0dXRlbGEKdWJpY2F0bwp1Y2NlbGxvCnVjY2lzb3JlCnVkaXJlCnVkaXRpdm8KdWZmYQp1ZmZpY2lvCnVndWFsZQp1bGlzc2UKdWx0aW1hdG8KdW1hbm8KdW1pbGUKdW1vcmlzbW8KdW5jaW5ldHRvCnVuZ2VyZQp1bmdoZXJlc2UKdW5pY29ybm8KdW5pZmljYXRvCnVuaXNvbm8KdW5pdGFyaW8KdW50ZQp1b3ZvCnVwdXBhCnVyYWdhbm8KdXJnZW56YQp1cmxvCnVzYW56YQp1c2F0bwp1c2NpdG8KdXNpZ25vbG8KdXN1cmFpbwp1dGVuc2lsZQp1dGlsaXp6bwp1dG9waWEKdmFjYW50ZQp2YWNjaW5hdG8KdmFnYWJvbmRvCnZhZ2xpYXRvCnZhbGFuZ2EKdmFsZ28KdmFsaWNvCnZhbGxldHRhCnZhbG9yb3NvCnZhbHV0YXJlCnZhbHZvbGEKdmFtcGF0YQp2YW5nYXJlCnZhbml0b3NvCnZhbm8KdmFudGFnZ2lvCnZhbnZlcmEKdmFwb3JlCnZhcmFubwp2YXJjYXRvCnZhcmlhbnRlCnZhc2NhCnZlZGV0dGEKdmVkb3ZhCnZlZHV0bwp2ZWdldGFsZQp2ZWljb2xvCnZlbGNybwp2ZWxpbmEKdmVsbHV0bwp2ZWxvY2UKdmVuYXRvCnZlbmRlbW1pYQp2ZW50bwp2ZXJhY2UKdmVyYmFsZQp2ZXJnb2duYQp2ZXJpZmljYQp2ZXJvCnZlcnJ1Y2EKdmVydGljYWxlCnZlc2NpY2EKdmVzc2lsbG8KdmVzdGFsZQp2ZXRlcmFubwp2ZXRyaW5hCnZldHVzdG8KdmlhbmRhbnRlCnZpYnJhbnRlCnZpY2VuZGEKdmljaGluZ28KdmljaW5hbnphCnZpZGltYXJlCnZpZ2lsaWEKdmlnbmV0bwp2aWdvcmUKdmlsZQp2aWxsYW5vCnZpbWluaQp2aW5jaXRvcmUKdmlvbGEKdmlwZXJhCnZpcmdvbGEKdmlyb2xvZ28KdmlydWxlbnRvCnZpc2Nvc28KdmlzaW9uZQp2aXNwbwp2aXNzdXRvCnZpc3VyYQp2aXRhCnZpdGVsbG8Kdml0dGltYQp2aXZhbmRhCnZpdmlkbwp2aXppYXJlCnZvY2UKdm9nYQp2b2xhdGlsZQp2b2xlcmUKdm9scGUKdm9yYWdpbmUKdnVsY2Fubwp6YW1wb2duYQp6YW5uYQp6YXBwYXRvCnphdHRlcmEKemF2b3JyYQp6ZWZpcm8KemVsYW50ZQp6ZWxvCnplbnplcm8KemVyYmlubwp6aWJldHRvCnppbmNvCnppcmNvbmUKeml0dG8Kem9sbGEKem90aWNvCnp1Y2NoZXJvCnp1Zm9sbwp6dWx1Cnp1cHBhYC5zcGxpdCgiXG4iKTsKCiAgLy8gbm9kZV9tb2R1bGVzL0BzY3VyZS9iaXAzOS9lc20vd29yZGxpc3RzL2phcGFuZXNlLmpzCiAgdmFyIHdvcmRsaXN0NSA9IGBcdTMwNDJcdTMwNDRcdTMwNTNcdTMwNEZcdTMwNTdcdTMwOTMKXHUzMDQyXHUzMDQ0XHUzMDU1XHUzMDY0Clx1MzA0Mlx1MzA0NFx1MzA1Rlx1MzA5OQpcdTMwNDJcdTMwNEFcdTMwNURcdTMwOTlcdTMwODkKXHUzMDQyXHUzMDRCXHUzMDYxXHUzMDgzXHUzMDkzClx1MzA0Mlx1MzA0RFx1MzA4QgpcdTMwNDJcdTMwNTFcdTMwNEJcdTMwOTlcdTMwNUYKXHUzMDQyXHUzMDUxXHUzMDhCClx1MzA0Mlx1MzA1M1x1MzA0Qlx1MzA5OVx1MzA4Q1x1MzA4QgpcdTMwNDJcdTMwNTVcdTMwNDQKXHUzMDQyXHUzMDU1XHUzMDcyClx1MzA0Mlx1MzA1N1x1MzA0Mlx1MzA2OApcdTMwNDJcdTMwNTdcdTMwOTlcdTMwOEZcdTMwNDYKXHUzMDQyXHUzMDU5XHUzMDk5XHUzMDRCXHUzMDhCClx1MzA0Mlx1MzA1OVx1MzA5OVx1MzA0RApcdTMwNDJcdTMwNURcdTMwNzVcdTMwOTkKXHUzMDQyXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA0Mlx1MzA1Rlx1MzA1Rlx1MzA4MVx1MzA4QgpcdTMwNDJcdTMwNUZcdTMwOEFcdTMwN0VcdTMwNDgKXHUzMDQyXHUzMDVGXHUzMDhCClx1MzA0Mlx1MzA2NFx1MzA0NApcdTMwNDJcdTMwNjRcdTMwNEJcdTMwNDYKXHUzMDQyXHUzMDYzXHUzMDU3XHUzMDg1XHUzMDRGClx1MzA0Mlx1MzA2NFx1MzA3RVx1MzA4QQpcdTMwNDJcdTMwNjRcdTMwODFcdTMwOEIKXHUzMDQyXHUzMDY2XHUzMDZBClx1MzA0Mlx1MzA2Nlx1MzA2Rlx1MzA3RVx1MzA4QgpcdTMwNDJcdTMwNzJcdTMwOEIKXHUzMDQyXHUzMDc1XHUzMDk5XHUzMDg5Clx1MzA0Mlx1MzA3NVx1MzA5OVx1MzA4QgpcdTMwNDJcdTMwNzVcdTMwOENcdTMwOEIKXHUzMDQyXHUzMDdFXHUzMDQ0Clx1MzA0Mlx1MzA3RVx1MzA2OFx1MzA5OQpcdTMwNDJcdTMwN0VcdTMwODRcdTMwNEJcdTMwNTkKXHUzMDQyXHUzMDdFXHUzMDhBClx1MzA0Mlx1MzA3Rlx1MzA4Mlx1MzA2RQpcdTMwNDJcdTMwODFcdTMwOEFcdTMwNEIKXHUzMDQyXHUzMDg0XHUzMDdFXHUzMDhCClx1MzA0Mlx1MzA4Nlx1MzA4MApcdTMwNDJcdTMwODlcdTMwNDRcdTMwNEZcdTMwOTlcdTMwN0UKXHUzMDQyXHUzMDg5XHUzMDU3Clx1MzA0Mlx1MzA4OVx1MzA1OVx1MzA1N1x1MzA5OQpcdTMwNDJcdTMwODlcdTMwNUZcdTMwODFcdTMwOEIKXHUzMDQyXHUzMDg5XHUzMDg2XHUzMDhCClx1MzA0Mlx1MzA4OVx1MzA4Rlx1MzA1OQpcdTMwNDJcdTMwOEFcdTMwNEJcdTMwOTlcdTMwNjhcdTMwNDYKXHUzMDQyXHUzMDhGXHUzMDVCXHUzMDhCClx1MzA0Mlx1MzA4Rlx1MzA2Nlx1MzA4QgpcdTMwNDJcdTMwOTNcdTMwNDQKXHUzMDQyXHUzMDkzXHUzMDRCXHUzMDk5XHUzMDQ0Clx1MzA0Mlx1MzA5M1x1MzA1MwpcdTMwNDJcdTMwOTNcdTMwNUJcdTMwOTlcdTMwOTMKXHUzMDQyXHUzMDkzXHUzMDY2XHUzMDQ0Clx1MzA0Mlx1MzA5M1x1MzA2QVx1MzA0NApcdTMwNDJcdTMwOTNcdTMwN0VcdTMwOEEKXHUzMDQ0XHUzMDQ0XHUzMDVGXHUzMDk5XHUzMDU5Clx1MzA0NFx1MzA0QVx1MzA5MwpcdTMwNDRcdTMwNEJcdTMwOTlcdTMwNDQKXHUzMDQ0XHUzMDRCXHUzMDk5XHUzMDRGClx1MzA0NFx1MzA0RFx1MzA0QVx1MzA0NApcdTMwNDRcdTMwNERcdTMwNkFcdTMwOEEKXHUzMDQ0XHUzMDREXHUzMDgyXHUzMDZFClx1MzA0NFx1MzA0RFx1MzA4QgpcdTMwNDRcdTMwNEZcdTMwNTdcdTMwOTkKXHUzMDQ0XHUzMDRGXHUzMDc1XHUzMDk5XHUzMDkzClx1MzA0NFx1MzA1MVx1MzA2Rlx1MzA5OVx1MzA2QQpcdTMwNDRcdTMwNTFcdTMwOTMKXHUzMDQ0XHUzMDUzXHUzMDQ2Clx1MzA0NFx1MzA1M1x1MzA0RgpcdTMwNDRcdTMwNTNcdTMwNjQKXHUzMDQ0XHUzMDU1XHUzMDdFXHUzMDU3XHUzMDQ0Clx1MzA0NFx1MzA1NVx1MzA5MwpcdTMwNDRcdTMwNTdcdTMwNEQKXHUzMDQ0XHUzMDU3XHUzMDk5XHUzMDg1XHUzMDQ2Clx1MzA0NFx1MzA1N1x1MzA5OVx1MzA4N1x1MzA0NgpcdTMwNDRcdTMwNTdcdTMwOTlcdTMwOEZcdTMwOEIKXHUzMDQ0XHUzMDU5XHUzMDk5XHUzMDdGClx1MzA0NFx1MzA1OVx1MzA5OVx1MzA4QwpcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDQ0XHUzMDVCXHUzMDQ4XHUzMDcyXHUzMDk5Clx1MzA0NFx1MzA1Qlx1MzA0Qlx1MzA0NApcdTMwNDRcdTMwNUJcdTMwNEQKXHUzMDQ0XHUzMDVCXHUzMDk5XHUzMDkzClx1MzA0NFx1MzA1RFx1MzA0Nlx1MzA4RFx1MzA0NgpcdTMwNDRcdTMwNURcdTMwNEJcdTMwOTlcdTMwNTdcdTMwNDQKXHUzMDQ0XHUzMDVGXHUzMDk5XHUzMDQ0Clx1MzA0NFx1MzA1Rlx1MzA5OVx1MzA0RgpcdTMwNDRcdTMwNUZcdTMwNTlcdTMwOTlcdTMwODkKXHUzMDQ0XHUzMDVGXHUzMDdGClx1MzA0NFx1MzA1Rlx1MzA4QVx1MzA0MgpcdTMwNDRcdTMwNjFcdTMwNEFcdTMwNDYKXHUzMDQ0XHUzMDYxXHUzMDU3XHUzMDk5Clx1MzA0NFx1MzA2MVx1MzA2OFx1MzA5OQpcdTMwNDRcdTMwNjFcdTMwNkZcdTMwOTkKXHUzMDQ0XHUzMDYxXHUzMDc1XHUzMDk5Clx1MzA0NFx1MzA2MVx1MzA4QVx1MzA4NVx1MzA0NgpcdTMwNDRcdTMwNjRcdTMwNEIKXHUzMDQ0XHUzMDYzXHUzMDU3XHUzMDg1XHUzMDkzClx1MzA0NFx1MzA2M1x1MzA1Qlx1MzA0NApcdTMwNDRcdTMwNjNcdTMwNURcdTMwNDYKXHUzMDQ0XHUzMDYzXHUzMDVGXHUzMDkzClx1MzA0NFx1MzA2M1x1MzA2MQpcdTMwNDRcdTMwNjNcdTMwNjZcdTMwNDQKXHUzMDQ0XHUzMDYzXHUzMDdCXHUzMDlBXHUzMDQ2Clx1MzA0NFx1MzA2Nlx1MzA1NVx1MzA5OQpcdTMwNDRcdTMwNjZcdTMwOTMKXHUzMDQ0XHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA0NFx1MzA2OFx1MzA1MwpcdTMwNDRcdTMwNkFcdTMwNDQKXHUzMDQ0XHUzMDZBXHUzMDRCClx1MzA0NFx1MzA2RFx1MzA4MFx1MzA4QQpcdTMwNDRcdTMwNkVcdTMwNjEKXHUzMDQ0XHUzMDZFXHUzMDhCClx1MzA0NFx1MzA2Rlx1MzA2NApcdTMwNDRcdTMwNkZcdTMwOTlcdTMwOEIKXHUzMDQ0XHUzMDZGXHUzMDkzClx1MzA0NFx1MzA3Mlx1MzA5OVx1MzA0RApcdTMwNDRcdTMwNzJcdTMwOTMKXHUzMDQ0XHUzMDc1XHUzMDRGClx1MzA0NFx1MzA3OFx1MzA5MwpcdTMwNDRcdTMwN0JcdTMwNDYKXHUzMDQ0XHUzMDdGXHUzMDkzClx1MzA0NFx1MzA4Mlx1MzA0Nlx1MzA2OApcdTMwNDRcdTMwODJcdTMwNUZcdTMwOEMKXHUzMDQ0XHUzMDgyXHUzMDhBClx1MzA0NFx1MzA4NFx1MzA0Qlx1MzA5OVx1MzA4QgpcdTMwNDRcdTMwODRcdTMwNTkKXHUzMDQ0XHUzMDg4XHUzMDRCXHUzMDkzClx1MzA0NFx1MzA4OFx1MzA0RgpcdTMwNDRcdTMwODlcdTMwNDQKXHUzMDQ0XHUzMDg5XHUzMDU5XHUzMDY4Clx1MzA0NFx1MzA4QVx1MzA0Rlx1MzA5OVx1MzA2MQpcdTMwNDRcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDQ0XHUzMDhDXHUzMDQ0Clx1MzA0NFx1MzA4Q1x1MzA4Mlx1MzA2RQpcdTMwNDRcdTMwOENcdTMwOEIKXHUzMDQ0XHUzMDhEXHUzMDQ4XHUzMDkzXHUzMDcyXHUzMDlBXHUzMDY0Clx1MzA0NFx1MzA4Rlx1MzA0NApcdTMwNDRcdTMwOEZcdTMwNDYKXHUzMDQ0XHUzMDhGXHUzMDRCXHUzMDkzClx1MzA0NFx1MzA4Rlx1MzA2Rlx1MzA5OQpcdTMwNDRcdTMwOEZcdTMwODZcdTMwOEIKXHUzMDQ0XHUzMDkzXHUzMDUxXHUzMDk5XHUzMDkzXHUzMDdFXHUzMDgxClx1MzA0NFx1MzA5M1x1MzA1NVx1MzA2NApcdTMwNDRcdTMwOTNcdTMwNTdcdTMwODdcdTMwNDYKXHUzMDQ0XHUzMDkzXHUzMDg4XHUzMDQ2Clx1MzA0Nlx1MzA0OFx1MzA0RApcdTMwNDZcdTMwNDhcdTMwOEIKXHUzMDQ2XHUzMDRBXHUzMDU1XHUzMDk5Clx1MzA0Nlx1MzA0Qlx1MzA5OVx1MzA0NApcdTMwNDZcdTMwNEJcdTMwNzVcdTMwOTkKXHUzMDQ2XHUzMDRCXHUzMDc4XHUzMDk5XHUzMDhCClx1MzA0Nlx1MzA0RFx1MzA4RgpcdTMwNDZcdTMwNEZcdTMwODlcdTMwNDRcdTMwNkEKXHUzMDQ2XHUzMDRGXHUzMDhDXHUzMDhDClx1MzA0Nlx1MzA1MVx1MzA1Rlx1MzA3RVx1MzA4Rlx1MzA4QgpcdTMwNDZcdTMwNTFcdTMwNjRcdTMwNTEKXHUzMDQ2XHUzMDUxXHUzMDY4XHUzMDhCClx1MzA0Nlx1MzA1MVx1MzA4Mlx1MzA2NApcdTMwNDZcdTMwNTFcdTMwOEIKXHUzMDQ2XHUzMDUzXHUzMDk5XHUzMDRCXHUzMDU5Clx1MzA0Nlx1MzA1M1x1MzA5OVx1MzA0RgpcdTMwNDZcdTMwNTNcdTMwOTMKXHUzMDQ2XHUzMDU1XHUzMDREXHUzMDk5Clx1MzA0Nlx1MzA1N1x1MzA2QVx1MzA0NgpcdTMwNDZcdTMwNTdcdTMwOERcdTMwNEJcdTMwOTlcdTMwN0YKXHUzMDQ2XHUzMDU5XHUzMDQ0Clx1MzA0Nlx1MzA1OVx1MzA0RFx1MzA5OQpcdTMwNDZcdTMwNTlcdTMwNEZcdTMwOTlcdTMwODlcdTMwNDQKXHUzMDQ2XHUzMDU5XHUzMDgxXHUzMDhCClx1MzA0Nlx1MzA1Qlx1MzA2NApcdTMwNDZcdTMwNjFcdTMwNDJcdTMwOEZcdTMwNUIKXHUzMDQ2XHUzMDYxXHUzMDRCXHUzMDk5XHUzMDhGClx1MzA0Nlx1MzA2MVx1MzA0RApcdTMwNDZcdTMwNjFcdTMwODVcdTMwNDYKXHUzMDQ2XHUzMDYzXHUzMDRCXHUzMDhBClx1MzA0Nlx1MzA2NFx1MzA0Rlx1MzA1N1x1MzA0NApcdTMwNDZcdTMwNjNcdTMwNUZcdTMwNDhcdTMwOEIKXHUzMDQ2XHUzMDY0XHUzMDhCClx1MzA0Nlx1MzA2OFx1MzA5OVx1MzA5MwpcdTMwNDZcdTMwNkFcdTMwNERcdTMwOTkKXHUzMDQ2XHUzMDZBXHUzMDU3XHUzMDk5Clx1MzA0Nlx1MzA2QVx1MzA1OVx1MzA5OVx1MzA0RgpcdTMwNDZcdTMwNkFcdTMwOEIKXHUzMDQ2XHUzMDZEXHUzMDhCClx1MzA0Nlx1MzA2RVx1MzA0NgpcdTMwNDZcdTMwNzVcdTMwOTlcdTMwNTFcdTMwOTkKXHUzMDQ2XHUzMDc1XHUzMDk5XHUzMDUzXHUzMDk5XHUzMDQ4Clx1MzA0Nlx1MzA3RVx1MzA4Q1x1MzA4QgpcdTMwNDZcdTMwODFcdTMwOEIKXHUzMDQ2XHUzMDgyXHUzMDQ2Clx1MzA0Nlx1MzA4NFx1MzA3RVx1MzA0NgpcdTMwNDZcdTMwODhcdTMwNEYKXHUzMDQ2XHUzMDg5XHUzMDRCXHUzMDk5XHUzMDQ4XHUzMDU5Clx1MzA0Nlx1MzA4OVx1MzA0Rlx1MzA5OVx1MzA2MQpcdTMwNDZcdTMwODlcdTMwNkFcdTMwNDQKXHUzMDQ2XHUzMDhBXHUzMDQyXHUzMDUxXHUzMDk5Clx1MzA0Nlx1MzA4QVx1MzA0RFx1MzA4QwpcdTMwNDZcdTMwOEJcdTMwNTVcdTMwNDQKXHUzMDQ2XHUzMDhDXHUzMDU3XHUzMDQ0Clx1MzA0Nlx1MzA4Q1x1MzA4Nlx1MzA0RApcdTMwNDZcdTMwOENcdTMwOEIKXHUzMDQ2XHUzMDhEXHUzMDUzClx1MzA0Nlx1MzA4Rlx1MzA0RApcdTMwNDZcdTMwOEZcdTMwNTUKXHUzMDQ2XHUzMDkzXHUzMDUzXHUzMDQ2Clx1MzA0Nlx1MzA5M1x1MzA2MVx1MzA5MwpcdTMwNDZcdTMwOTNcdTMwNjZcdTMwOTMKXHUzMDQ2XHUzMDkzXHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA0OFx1MzA0NFx1MzA0OFx1MzA5MwpcdTMwNDhcdTMwNDRcdTMwNEJcdTMwOTkKXHUzMDQ4XHUzMDQ0XHUzMDREXHUzMDg3XHUzMDQ2Clx1MzA0OFx1MzA0NFx1MzA1M1x1MzA5OQpcdTMwNDhcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDQ4XHUzMDQ0XHUzMDc1XHUzMDk5XHUzMDkzClx1MzA0OFx1MzA0NFx1MzA4OFx1MzA0NgpcdTMwNDhcdTMwNDRcdTMwOEYKXHUzMDQ4XHUzMDRBXHUzMDhBClx1MzA0OFx1MzA0Qlx1MzA5OVx1MzA0QQpcdTMwNDhcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDQ4XHUzMDREXHUzMDVGXHUzMDQ0Clx1MzA0OFx1MzA0Rlx1MzA1Qlx1MzA4QgpcdTMwNDhcdTMwNTdcdTMwODNcdTMwNEYKXHUzMDQ4XHUzMDU5XHUzMDY2Clx1MzA0OFx1MzA2NFx1MzA4OVx1MzA5MwpcdTMwNDhcdTMwNkVcdTMwNEZcdTMwOTkKXHUzMDQ4XHUzMDdCXHUzMDQ2XHUzMDdFXHUzMDREClx1MzA0OFx1MzA3Qlx1MzA5MwpcdTMwNDhcdTMwN0VcdTMwNEQKXHUzMDQ4XHUzMDgyXHUzMDU3XHUzMDk5Clx1MzA0OFx1MzA4Mlx1MzA2RQpcdTMwNDhcdTMwODlcdTMwNDQKXHUzMDQ4XHUzMDg5XHUzMDc1XHUzMDk5Clx1MzA0OFx1MzA4QVx1MzA0MgpcdTMwNDhcdTMwOTNcdTMwNDhcdTMwOTMKXHUzMDQ4XHUzMDkzXHUzMDRCXHUzMDQ0Clx1MzA0OFx1MzA5M1x1MzA0RFx1MzA5OQpcdTMwNDhcdTMwOTNcdTMwNTFcdTMwOTlcdTMwNEQKXHUzMDQ4XHUzMDkzXHUzMDU3XHUzMDg1XHUzMDQ2Clx1MzA0OFx1MzA5M1x1MzA1Qlx1MzA5OVx1MzA2NApcdTMwNDhcdTMwOTNcdTMwNURcdTMwNEYKXHUzMDQ4XHUzMDkzXHUzMDYxXHUzMDg3XHUzMDQ2Clx1MzA0OFx1MzA5M1x1MzA2OFx1MzA2NApcdTMwNEFcdTMwNDRcdTMwNEJcdTMwNTFcdTMwOEIKXHUzMDRBXHUzMDQ0XHUzMDUzXHUzMDU5Clx1MzA0QVx1MzA0NFx1MzA1N1x1MzA0NApcdTMwNEFcdTMwNDRcdTMwNjRcdTMwNEYKXHUzMDRBXHUzMDQ2XHUzMDQ4XHUzMDkzClx1MzA0QVx1MzA0Nlx1MzA1NVx1MzA3RQpcdTMwNEFcdTMwNDZcdTMwNTdcdTMwOTkKXHUzMDRBXHUzMDQ2XHUzMDVCXHUzMDY0Clx1MzA0QVx1MzA0Nlx1MzA1Rlx1MzA0NApcdTMwNEFcdTMwNDZcdTMwNzVcdTMwNEYKXHUzMDRBXHUzMDQ2XHUzMDc4XHUzMDk5XHUzMDQ0Clx1MzA0QVx1MzA0Nlx1MzA4OFx1MzA0NgpcdTMwNEFcdTMwNDhcdTMwOEIKXHUzMDRBXHUzMDRBXHUzMDQ0Clx1MzA0QVx1MzA0QVx1MzA0NgpcdTMwNEFcdTMwNEFcdTMwNjhcdTMwOTlcdTMwNEFcdTMwOEEKXHUzMDRBXHUzMDRBXHUzMDg0Clx1MzA0QVx1MzA0QVx1MzA4OFx1MzA1RApcdTMwNEFcdTMwNEJcdTMwNDhcdTMwOEEKXHUzMDRBXHUzMDRCXHUzMDU5XHUzMDk5Clx1MzA0QVx1MzA0Qlx1MzA5OVx1MzA4MApcdTMwNEFcdTMwNEJcdTMwOEZcdTMwOEEKXHUzMDRBXHUzMDREXHUzMDk5XHUzMDZBXHUzMDQ2Clx1MzA0QVx1MzA0RFx1MzA4QgpcdTMwNEFcdTMwNEZcdTMwNTVcdTMwN0UKXHUzMDRBXHUzMDRGXHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA0QVx1MzA0Rlx1MzA4QVx1MzA0Qlx1MzA5OVx1MzA2QQpcdTMwNEFcdTMwNEZcdTMwOEIKXHUzMDRBXHUzMDRGXHUzMDhDXHUzMDhCClx1MzA0QVx1MzA1M1x1MzA1OQpcdTMwNEFcdTMwNTNcdTMwNkFcdTMwNDYKXHUzMDRBXHUzMDUzXHUzMDhCClx1MzA0QVx1MzA1NVx1MzA0OFx1MzA4QgpcdTMwNEFcdTMwNTVcdTMwNkFcdTMwNDQKXHUzMDRBXHUzMDU1XHUzMDgxXHUzMDhCClx1MzA0QVx1MzA1N1x1MzA0NFx1MzA4QwpcdTMwNEFcdTMwNTdcdTMwNDhcdTMwOEIKXHUzMDRBXHUzMDU3XHUzMDk5XHUzMDREXHUzMDk5Clx1MzA0QVx1MzA1N1x1MzA5OVx1MzA1NVx1MzA5MwpcdTMwNEFcdTMwNTdcdTMwODNcdTMwOEMKXHUzMDRBXHUzMDVEXHUzMDg5XHUzMDRGClx1MzA0QVx1MzA1RFx1MzA4Rlx1MzA4QgpcdTMwNEFcdTMwNUZcdTMwNEJcdTMwOTlcdTMwNDQKXHUzMDRBXHUzMDVGXHUzMDRGClx1MzA0QVx1MzA1Rlx1MzA5OVx1MzA4NFx1MzA0QgpcdTMwNEFcdTMwNjFcdTMwNjRcdTMwNEYKXHUzMDRBXHUzMDYzXHUzMDY4Clx1MzA0QVx1MzA2NFx1MzA4QQpcdTMwNEFcdTMwNjZcdTMwOTlcdTMwNEJcdTMwNTEKXHUzMDRBXHUzMDY4XHUzMDU3XHUzMDgyXHUzMDZFClx1MzA0QVx1MzA2OFx1MzA2QVx1MzA1N1x1MzA0NApcdTMwNEFcdTMwNjhcdTMwOTlcdTMwOEEKXHUzMDRBXHUzMDY4XHUzMDk5XHUzMDhEXHUzMDRCXHUzMDU5Clx1MzA0QVx1MzA2Rlx1MzA5OVx1MzA1NVx1MzA5MwpcdTMwNEFcdTMwN0VcdTMwNDRcdTMwOEEKXHUzMDRBXHUzMDgxXHUzMDY2XHUzMDk5XHUzMDY4XHUzMDQ2Clx1MzA0QVx1MzA4Mlx1MzA0NFx1MzA2Nlx1MzA5OQpcdTMwNEFcdTMwODJcdTMwNDYKXHUzMDRBXHUzMDgyXHUzMDVGXHUzMDQ0Clx1MzA0QVx1MzA4Mlx1MzA2MVx1MzA4MwpcdTMwNEFcdTMwODRcdTMwNjQKXHUzMDRBXHUzMDg0XHUzMDg2XHUzMDcyXHUzMDk5Clx1MzA0QVx1MzA4OFx1MzA3Qlx1MzA5OVx1MzA1OQpcdTMwNEFcdTMwODlcdTMwOTNcdTMwNUZcdTMwOTkKXHUzMDRBXHUzMDhEXHUzMDU5Clx1MzA0QVx1MzA5M1x1MzA0Qlx1MzA5OVx1MzA0RgpcdTMwNEFcdTMwOTNcdTMwNTFcdTMwNDQKXHUzMDRBXHUzMDkzXHUzMDU3XHUzMDgzClx1MzA0QVx1MzA5M1x1MzA1Qlx1MzA5MwpcdTMwNEFcdTMwOTNcdTMwNUZcdTMwOTlcdTMwOTMKXHUzMDRBXHUzMDkzXHUzMDYxXHUzMDg1XHUzMDQ2Clx1MzA0QVx1MzA5M1x1MzA2OFx1MzA5OVx1MzA1MVx1MzA0NApcdTMwNEJcdTMwNDJcdTMwNjQKXHUzMDRCXHUzMDQ0XHUzMDRCXHUzMDk5Clx1MzA0Qlx1MzA5OVx1MzA0NFx1MzA0RApcdTMwNEJcdTMwOTlcdTMwNDRcdTMwNTFcdTMwOTMKXHUzMDRCXHUzMDk5XHUzMDQ0XHUzMDUzXHUzMDQ2Clx1MzA0Qlx1MzA0NFx1MzA1NVx1MzA2NApcdTMwNEJcdTMwNDRcdTMwNTdcdTMwODMKXHUzMDRCXHUzMDQ0XHUzMDU5XHUzMDQ0XHUzMDg4XHUzMDRGClx1MzA0Qlx1MzA0NFx1MzA1Qlx1MzA5OVx1MzA5MwpcdTMwNEJcdTMwNDRcdTMwNURcdTMwOTlcdTMwNDZcdTMwNjhcdTMwOTkKXHUzMDRCXHUzMDQ0XHUzMDY0XHUzMDQ2Clx1MzA0Qlx1MzA0NFx1MzA2Nlx1MzA5MwpcdTMwNEJcdTMwNDRcdTMwNjhcdTMwNDYKXHUzMDRCXHUzMDQ0XHUzMDc1XHUzMDRGClx1MzA0Qlx1MzA5OVx1MzA0NFx1MzA3OFx1MzA0RApcdTMwNEJcdTMwNDRcdTMwN0JcdTMwNDYKXHUzMDRCXHUzMDQ0XHUzMDg4XHUzMDQ2Clx1MzA0Qlx1MzA5OVx1MzA0NFx1MzA4OVx1MzA0NApcdTMwNEJcdTMwNDRcdTMwOEYKXHUzMDRCXHUzMDQ4XHUzMDhCClx1MzA0Qlx1MzA0QVx1MzA4QQpcdTMwNEJcdTMwNEJcdTMwNDhcdTMwOEIKXHUzMDRCXHUzMDRCXHUzMDk5XHUzMDRGClx1MzA0Qlx1MzA0Qlx1MzA5OVx1MzA1NwpcdTMwNEJcdTMwNEJcdTMwOTlcdTMwN0YKXHUzMDRCXHUzMDRGXHUzMDUzXHUzMDk5Clx1MzA0Qlx1MzA0Rlx1MzA2OFx1MzA0RgpcdTMwNEJcdTMwNTVcdTMwOTlcdTMwOEIKXHUzMDRCXHUzMDk5XHUzMDVEXHUzMDk5XHUzMDQ2Clx1MzA0Qlx1MzA1Rlx1MzA0NApcdTMwNEJcdTMwNUZcdTMwNjEKXHUzMDRCXHUzMDk5XHUzMDYxXHUzMDg3XHUzMDQ2Clx1MzA0Qlx1MzA5OVx1MzA2M1x1MzA0RFx1MzA4NVx1MzA0NgpcdTMwNEJcdTMwOTlcdTMwNjNcdTMwNTNcdTMwNDYKXHUzMDRCXHUzMDk5XHUzMDYzXHUzMDU1XHUzMDkzClx1MzA0Qlx1MzA5OVx1MzA2M1x1MzA1N1x1MzA4N1x1MzA0NgpcdTMwNEJcdTMwNkFcdTMwNTVcdTMwOTlcdTMwOEZcdTMwNTcKXHUzMDRCXHUzMDZFXHUzMDQ2Clx1MzA0Qlx1MzA5OVx1MzA2Rlx1MzA0RgpcdTMwNEJcdTMwNzVcdTMwOTlcdTMwNEIKXHUzMDRCXHUzMDdCXHUzMDQ2Clx1MzA0Qlx1MzA3Qlx1MzA1M1x1MzA5OQpcdTMwNEJcdTMwN0VcdTMwNDYKXHUzMDRCXHUzMDdFXHUzMDdCXHUzMDk5XHUzMDUzClx1MzA0Qlx1MzA4MVx1MzA4Q1x1MzA0QVx1MzA5MwpcdTMwNEJcdTMwODZcdTMwNDQKXHUzMDRCXHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA0Qlx1MzA4OVx1MzA0NApcdTMwNEJcdTMwOEJcdTMwNDQKXHUzMDRCXHUzMDhEXHUzMDQ2Clx1MzA0Qlx1MzA4Rlx1MzA0RgpcdTMwNEJcdTMwOEZcdTMwODkKXHUzMDRCXHUzMDk5XHUzMDkzXHUzMDRCClx1MzA0Qlx1MzA5M1x1MzA1MVx1MzA0NApcdTMwNEJcdTMwOTNcdTMwNTNcdTMwNDYKXHUzMDRCXHUzMDkzXHUzMDU3XHUzMDgzClx1MzA0Qlx1MzA5M1x1MzA1RFx1MzA0NgpcdTMwNEJcdTMwOTNcdTMwNUZcdTMwOTMKXHUzMDRCXHUzMDkzXHUzMDYxClx1MzA0Qlx1MzA5OVx1MzA5M1x1MzA2Rlx1MzA5OVx1MzA4QgpcdTMwNERcdTMwNDJcdTMwNDQKXHUzMDREXHUzMDQyXHUzMDY0Clx1MzA0RFx1MzA0NFx1MzA4RApcdTMwNERcdTMwOTlcdTMwNDRcdTMwOTMKXHUzMDREXHUzMDQ2XHUzMDQ0Clx1MzA0RFx1MzA0Nlx1MzA5MwpcdTMwNERcdTMwNDhcdTMwOEIKXHUzMDREXHUzMDRBXHUzMDQ2Clx1MzA0RFx1MzA0QVx1MzA0RgpcdTMwNERcdTMwNEFcdTMwNjEKXHUzMDREXHUzMDRBXHUzMDkzClx1MzA0RFx1MzA0Qlx1MzA0NApcdTMwNERcdTMwNEJcdTMwNEYKXHUzMDREXHUzMDRCXHUzMDkzXHUzMDU3XHUzMDgzClx1MzA0RFx1MzA0RFx1MzA2NgpcdTMwNERcdTMwNEZcdTMwNkZcdTMwOTlcdTMwOEEKXHUzMDREXHUzMDRGXHUzMDg5XHUzMDUxXHUzMDk5Clx1MzA0RFx1MzA1MVx1MzA5M1x1MzA1Qlx1MzA0NApcdTMwNERcdTMwNTNcdTMwNDYKXHUzMDREXHUzMDUzXHUzMDQ4XHUzMDhCClx1MzA0RFx1MzA1M1x1MzA0RgpcdTMwNERcdTMwNTVcdTMwNDQKXHUzMDREXHUzMDU1XHUzMDRGClx1MzA0RFx1MzA1NVx1MzA3RQpcdTMwNERcdTMwNTVcdTMwODlcdTMwNERcdTMwOTkKXHUzMDREXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDRCXHUzMDRCXHUzMDk5XHUzMDRGClx1MzA0RFx1MzA5OVx1MzA1N1x1MzA0RApcdTMwNERcdTMwOTlcdTMwNTdcdTMwOTlcdTMwNUZcdTMwNDRcdTMwNTFcdTMwOTMKXHUzMDREXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDZCXHUzMDYzXHUzMDY2XHUzMDQ0Clx1MzA0RFx1MzA5OVx1MzA1N1x1MzA5OVx1MzA4NVx1MzA2NFx1MzA1N1x1MzA4MwpcdTMwNERcdTMwNTlcdTMwNDYKXHUzMDREXHUzMDVCXHUzMDQ0Clx1MzA0RFx1MzA1Qlx1MzA0RApcdTMwNERcdTMwNUJcdTMwNjQKXHUzMDREXHUzMDVEXHUzMDQ2Clx1MzA0RFx1MzA1RFx1MzA5OVx1MzA0RgpcdTMwNERcdTMwNURcdTMwOTlcdTMwOTMKXHUzMDREXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA0RFx1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNERcdTMwNjRcdTMwNDhcdTMwOTMKXHUzMDREXHUzMDk5XHUzMDYzXHUzMDYxXHUzMDhBClx1MzA0RFx1MzA2NFx1MzA2NFx1MzA0RApcdTMwNERcdTMwNjRcdTMwNkQKXHUzMDREXHUzMDY2XHUzMDQ0Clx1MzA0RFx1MzA2OFx1MzA5OVx1MzA0NgpcdTMwNERcdTMwNjhcdTMwOTlcdTMwNEYKXHUzMDREXHUzMDZBXHUzMDQ0Clx1MzA0RFx1MzA2QVx1MzA0Qlx1MzA5OQpcdTMwNERcdTMwNkFcdTMwNTMKXHUzMDREXHUzMDZDXHUzMDUzXHUzMDk5XHUzMDU3Clx1MzA0RFx1MzA2RFx1MzA5MwpcdTMwNERcdTMwNkVcdTMwNDYKXHUzMDREXHUzMDZFXHUzMDU3XHUzMDVGClx1MzA0RFx1MzA2Rlx1MzA0RgpcdTMwNERcdTMwNzJcdTMwOTlcdTMwNTdcdTMwNDQKXHUzMDREXHUzMDcyXHUzMDkzClx1MzA0RFx1MzA3NVx1MzA0RgpcdTMwNERcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDREXHUzMDdCXHUzMDk5XHUzMDQ2Clx1MzA0RFx1MzA3Qlx1MzA5MwpcdTMwNERcdTMwN0VcdTMwOEIKXHUzMDREXHUzMDdGXHUzMDY0Clx1MzA0RFx1MzA4MFx1MzA1OVx1MzA5OVx1MzA0Qlx1MzA1N1x1MzA0NApcdTMwNERcdTMwODFcdTMwOEIKXHUzMDREXHUzMDgyXHUzMDVGXHUzMDk5XHUzMDgxXHUzMDU3Clx1MzA0RFx1MzA4Mlx1MzA2MQpcdTMwNERcdTMwODJcdTMwNkUKXHUzMDREXHUzMDgzXHUzMDRGClx1MzA0RFx1MzA4NFx1MzA0RgpcdTMwNERcdTMwOTlcdTMwODVcdTMwNDZcdTMwNkJcdTMwNEYKXHUzMDREXHUzMDg4XHUzMDQ2Clx1MzA0RFx1MzA4N1x1MzA0Nlx1MzA4QVx1MzA4NVx1MzA0NgpcdTMwNERcdTMwODlcdTMwNDQKXHUzMDREXHUzMDg5XHUzMDRGClx1MzA0RFx1MzA4QVx1MzA5MwpcdTMwNERcdTMwOENcdTMwNDQKXHUzMDREXHUzMDhDXHUzMDY0Clx1MzA0RFx1MzA4RFx1MzA0RgpcdTMwNERcdTMwOTlcdTMwOERcdTMwOTMKXHUzMDREXHUzMDhGXHUzMDgxXHUzMDhCClx1MzA0RFx1MzA5OVx1MzA5M1x1MzA0NFx1MzA4RApcdTMwNERcdTMwOTNcdTMwNEJcdTMwNEZcdTMwNTdcdTMwOTkKXHUzMDREXHUzMDkzXHUzMDU3XHUzMDk5XHUzMDg3Clx1MzA0RFx1MzA5M1x1MzA4OFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNEZcdTMwOTlcdTMwNDJcdTMwNDQKXHUzMDRGXHUzMDQ0XHUzMDU5XHUzMDk5Clx1MzA0Rlx1MzA0Nlx1MzA0Qlx1MzA5MwpcdTMwNEZcdTMwNDZcdTMwNEQKXHUzMDRGXHUzMDQ2XHUzMDRGXHUzMDk5XHUzMDkzClx1MzA0Rlx1MzA0Nlx1MzA1M1x1MzA0NgpcdTMwNEZcdTMwOTlcdTMwNDZcdTMwNUJcdTMwNDQKXHUzMDRGXHUzMDQ2XHUzMDVEXHUzMDQ2Clx1MzA0Rlx1MzA5OVx1MzA0Nlx1MzA1Rlx1MzA4OQpcdTMwNEZcdTMwNDZcdTMwNzVcdTMwNEYKXHUzMDRGXHUzMDQ2XHUzMDdCXHUzMDk5Clx1MzA0Rlx1MzA0Qlx1MzA5MwpcdTMwNEZcdTMwNERcdTMwODdcdTMwNDYKXHUzMDRGXHUzMDUxXHUzMDk5XHUzMDkzClx1MzA0Rlx1MzA5OVx1MzA1M1x1MzA0NgpcdTMwNEZcdTMwNTVcdTMwNDQKXHUzMDRGXHUzMDU1XHUzMDREClx1MzA0Rlx1MzA1NVx1MzA2Rlx1MzA5OVx1MzA2QQpcdTMwNEZcdTMwNTVcdTMwOEIKXHUzMDRGXHUzMDU3XHUzMDgzXHUzMDdGClx1MzA0Rlx1MzA1N1x1MzA4N1x1MzA0NgpcdTMwNEZcdTMwNTlcdTMwNkVcdTMwNEQKXHUzMDRGXHUzMDU5XHUzMDhBXHUzMDg2XHUzMDcyXHUzMDk5Clx1MzA0Rlx1MzA1Qlx1MzA1MVx1MzA5OQpcdTMwNEZcdTMwNUJcdTMwOTMKXHUzMDRGXHUzMDk5XHUzMDVGXHUzMDQ0XHUzMDY2XHUzMDREClx1MzA0Rlx1MzA1Rlx1MzA5OVx1MzA1NVx1MzA4QgpcdTMwNEZcdTMwNUZcdTMwNzJcdTMwOTlcdTMwOENcdTMwOEIKXHUzMDRGXHUzMDYxXHUzMDUzXHUzMDdGClx1MzA0Rlx1MzA2MVx1MzA1NVx1MzA0RApcdTMwNEZcdTMwNjRcdTMwNTdcdTMwNUYKXHUzMDRGXHUzMDk5XHUzMDYzXHUzMDU5XHUzMDhBClx1MzA0Rlx1MzA2NFx1MzA4RFx1MzA0Rlx1MzA5OQpcdTMwNEZcdTMwNjhcdTMwNDZcdTMwNjZcdTMwOTMKXHUzMDRGXHUzMDY4XHUzMDk5XHUzMDRGClx1MzA0Rlx1MzA2QVx1MzA5MwpcdTMwNEZcdTMwNkRcdTMwNEZcdTMwNkQKXHUzMDRGXHUzMDZFXHUzMDQ2Clx1MzA0Rlx1MzA3NVx1MzA0NgpcdTMwNEZcdTMwN0ZcdTMwNDJcdTMwOEZcdTMwNUIKXHUzMDRGXHUzMDdGXHUzMDVGXHUzMDY2XHUzMDhCClx1MzA0Rlx1MzA4MVx1MzA4QgpcdTMwNEZcdTMwODRcdTMwNEZcdTMwNTdcdTMwODcKXHUzMDRGXHUzMDg5XHUzMDU5Clx1MzA0Rlx1MzA4OVx1MzA3OFx1MzA5OVx1MzA4QgpcdTMwNEZcdTMwOEJcdTMwN0UKXHUzMDRGXHUzMDhDXHUzMDhCClx1MzA0Rlx1MzA4RFx1MzA0NgpcdTMwNEZcdTMwOEZcdTMwNTdcdTMwNDQKXHUzMDRGXHUzMDk5XHUzMDkzXHUzMDRCXHUzMDkzClx1MzA0Rlx1MzA5OVx1MzA5M1x1MzA1N1x1MzA4N1x1MzA0RgpcdTMwNEZcdTMwOTlcdTMwOTNcdTMwNUZcdTMwNDQKXHUzMDRGXHUzMDk5XHUzMDkzXHUzMDY2Clx1MzA1MVx1MzA0Mlx1MzA2QQpcdTMwNTFcdTMwNDRcdTMwNEJcdTMwNEYKXHUzMDUxXHUzMDQ0XHUzMDUxXHUzMDkzClx1MzA1MVx1MzA0NFx1MzA1MwpcdTMwNTFcdTMwNDRcdTMwNTVcdTMwNjQKXHUzMDUxXHUzMDk5XHUzMDQ0XHUzMDU3XHUzMDk5XHUzMDg1XHUzMDY0Clx1MzA1MVx1MzA0NFx1MzA1Rlx1MzA0NApcdTMwNTFcdTMwOTlcdTMwNDRcdTMwNkVcdTMwNDZcdTMwNTdcdTMwOTlcdTMwOTMKXHUzMDUxXHUzMDQ0XHUzMDhDXHUzMDREClx1MzA1MVx1MzA0NFx1MzA4RApcdTMwNTFcdTMwNEFcdTMwNjhcdTMwNTkKXHUzMDUxXHUzMDRBXHUzMDhBXHUzMDgyXHUzMDZFClx1MzA1MVx1MzA5OVx1MzA0RFx1MzA0QgpcdTMwNTFcdTMwOTlcdTMwNERcdTMwNTFcdTMwOTlcdTMwOTMKXHUzMDUxXHUzMDk5XHUzMDREXHUzMDVGXHUzMDk5XHUzMDkzClx1MzA1MVx1MzA5OVx1MzA0RFx1MzA2MVx1MzA5MwpcdTMwNTFcdTMwOTlcdTMwNERcdTMwNjhcdTMwNjQKXHUzMDUxXHUzMDk5XHUzMDREXHUzMDZGClx1MzA1MVx1MzA5OVx1MzA0RFx1MzA4NFx1MzA0RgpcdTMwNTFcdTMwOTlcdTMwNTNcdTMwNDYKXHUzMDUxXHUzMDk5XHUzMDUzXHUzMDRGXHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA1MVx1MzA5OVx1MzA1NVx1MzA5OVx1MzA0NApcdTMwNTFcdTMwNTVcdTMwNEQKXHUzMDUxXHUzMDk5XHUzMDU1XHUzMDk5XHUzMDkzClx1MzA1MVx1MzA1N1x1MzA0RApcdTMwNTFcdTMwNTdcdTMwNTNcdTMwOTlcdTMwODAKXHUzMDUxXHUzMDU3XHUzMDg3XHUzMDQ2Clx1MzA1MVx1MzA5OVx1MzA1OVx1MzA2OApcdTMwNTFcdTMwNUZcdTMwNkZcdTMwOTkKXHUzMDUxXHUzMDYxXHUzMDgzXHUzMDYzXHUzMDc1XHUzMDlBClx1MzA1MVx1MzA2MVx1MzA4OVx1MzA1OQpcdTMwNTFcdTMwNjRcdTMwNDJcdTMwNjQKXHUzMDUxXHUzMDY0XHUzMDQ0Clx1MzA1MVx1MzA2NFx1MzA0OFx1MzA0RApcdTMwNTFcdTMwNjNcdTMwNTNcdTMwOTMKXHUzMDUxXHUzMDY0XHUzMDU3XHUzMDk5XHUzMDg3Clx1MzA1MVx1MzA2M1x1MzA1Qlx1MzA0RApcdTMwNTFcdTMwNjNcdTMwNjZcdTMwNDQKXHUzMDUxXHUzMDY0XHUzMDdFXHUzMDY0Clx1MzA1MVx1MzA5OVx1MzA2NFx1MzA4OFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNTFcdTMwOTlcdTMwNjRcdTMwOENcdTMwNDQKXHUzMDUxXHUzMDY0XHUzMDhEXHUzMDkzClx1MzA1MVx1MzA5OVx1MzA2OFx1MzA5OVx1MzA0RgpcdTMwNTFcdTMwNjhcdTMwNkZcdTMwOTlcdTMwNTkKXHUzMDUxXHUzMDY4XHUzMDhCClx1MzA1MVx1MzA2QVx1MzA1MVx1MzA5OQpcdTMwNTFcdTMwNkFcdTMwNTkKXHUzMDUxXHUzMDZBXHUzMDdGClx1MzA1MVx1MzA2Q1x1MzA0RApcdTMwNTFcdTMwOTlcdTMwNkRcdTMwNjQKXHUzMDUxXHUzMDZEXHUzMDkzClx1MzA1MVx1MzA2Rlx1MzA0NApcdTMwNTFcdTMwOTlcdTMwNzJcdTMwOTMKXHUzMDUxXHUzMDc1XHUzMDk5XHUzMDRCXHUzMDQ0Clx1MzA1MVx1MzA5OVx1MzA3Qlx1MzA5OVx1MzA0RgpcdTMwNTFcdTMwN0VcdTMwOEEKXHUzMDUxXHUzMDdGXHUzMDRCXHUzMDhCClx1MzA1MVx1MzA4MFx1MzA1NwpcdTMwNTFcdTMwODBcdTMwOEEKXHUzMDUxXHUzMDgyXHUzMDZFClx1MzA1MVx1MzA4OVx1MzA0NApcdTMwNTFcdTMwOERcdTMwNTFcdTMwOEQKXHUzMDUxXHUzMDhGXHUzMDU3XHUzMDQ0Clx1MzA1MVx1MzA5M1x1MzA0NApcdTMwNTFcdTMwOTNcdTMwNDhcdTMwNjQKXHUzMDUxXHUzMDkzXHUzMDRBClx1MzA1MVx1MzA5M1x1MzA0QgpcdTMwNTFcdTMwOTlcdTMwOTNcdTMwNEQKXHUzMDUxXHUzMDkzXHUzMDUxXHUzMDk5XHUzMDkzClx1MzA1MVx1MzA5M1x1MzA1M1x1MzA0NgpcdTMwNTFcdTMwOTNcdTMwNTVcdTMwNEYKXHUzMDUxXHUzMDkzXHUzMDU3XHUzMDg1XHUzMDQ2Clx1MzA1MVx1MzA5M1x1MzA1OVx1MzA0NgpcdTMwNTFcdTMwOTlcdTMwOTNcdTMwNURcdTMwNDYKXHUzMDUxXHUzMDkzXHUzMDYxXHUzMDRGClx1MzA1MVx1MzA5M1x1MzA2Nlx1MzA0NApcdTMwNTFcdTMwOTNcdTMwNjhcdTMwNDYKXHUzMDUxXHUzMDkzXHUzMDZBXHUzMDQ0Clx1MzA1MVx1MzA5M1x1MzA2Qlx1MzA5MwpcdTMwNTFcdTMwOTlcdTMwOTNcdTMwNzVcdTMwOTlcdTMwNjQKXHUzMDUxXHUzMDkzXHUzMDdFClx1MzA1MVx1MzA5M1x1MzA3Rlx1MzA5MwpcdTMwNTFcdTMwOTNcdTMwODFcdTMwNDQKXHUzMDUxXHUzMDkzXHUzMDg5XHUzMDkzClx1MzA1MVx1MzA5M1x1MzA4QQpcdTMwNTNcdTMwNDJcdTMwNEZcdTMwN0UKXHUzMDUzXHUzMDQ0XHUzMDZDClx1MzA1M1x1MzA0NFx1MzA3Mlx1MzA5OVx1MzA2OApcdTMwNTNcdTMwOTlcdTMwNDZcdTMwNDQKXHUzMDUzXHUzMDQ2XHUzMDQ4XHUzMDkzClx1MzA1M1x1MzA0Nlx1MzA0QVx1MzA5MwpcdTMwNTNcdTMwNDZcdTMwNEJcdTMwOTMKXHUzMDUzXHUzMDk5XHUzMDQ2XHUzMDREXHUzMDg1XHUzMDQ2Clx1MzA1M1x1MzA5OVx1MzA0Nlx1MzA1MVx1MzA0NApcdTMwNTNcdTMwNDZcdTMwNTNcdTMwNDYKXHUzMDUzXHUzMDQ2XHUzMDU1XHUzMDQ0Clx1MzA1M1x1MzA0Nlx1MzA1N1x1MzA5OQpcdTMwNTNcdTMwNDZcdTMwNTlcdTMwNDQKXHUzMDUzXHUzMDk5XHUzMDQ2XHUzMDVCXHUzMDQ0Clx1MzA1M1x1MzA0Nlx1MzA1RFx1MzA0RgpcdTMwNTNcdTMwNDZcdTMwNUZcdTMwNDQKXHUzMDUzXHUzMDQ2XHUzMDYxXHUzMDgzClx1MzA1M1x1MzA0Nlx1MzA2NFx1MzA0NgpcdTMwNTNcdTMwNDZcdTMwNjZcdTMwNDQKXHUzMDUzXHUzMDQ2XHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA1M1x1MzA0Nlx1MzA2QVx1MzA0NApcdTMwNTNcdTMwNDZcdTMwNkZcdTMwNDQKXHUzMDUzXHUzMDk5XHUzMDQ2XHUzMDdCXHUzMDQ2Clx1MzA1M1x1MzA5OVx1MzA0Nlx1MzA3RVx1MzA5MwpcdTMwNTNcdTMwNDZcdTMwODJcdTMwNEYKXHUzMDUzXHUzMDQ2XHUzMDhBXHUzMDY0Clx1MzA1M1x1MzA0OFx1MzA4QgpcdTMwNTNcdTMwNEFcdTMwOEEKXHUzMDUzXHUzMDk5XHUzMDRCXHUzMDQ0Clx1MzA1M1x1MzA5OVx1MzA0Qlx1MzA5OVx1MzA2NApcdTMwNTNcdTMwOTlcdTMwNEJcdTMwOTMKXHUzMDUzXHUzMDRGXHUzMDUzXHUzMDk5Clx1MzA1M1x1MzA0Rlx1MzA1NVx1MzA0NApcdTMwNTNcdTMwNEZcdTMwNjhcdTMwNDYKXHUzMDUzXHUzMDRGXHUzMDZBXHUzMDQ0Clx1MzA1M1x1MzA0Rlx1MzA2Rlx1MzA0RgpcdTMwNTNcdTMwNEZcdTMwOTlcdTMwN0UKXHUzMDUzXHUzMDUxXHUzMDQ0Clx1MzA1M1x1MzA1MVx1MzA4QgpcdTMwNTNcdTMwNTNcdTMwNkVcdTMwNEIKXHUzMDUzXHUzMDUzXHUzMDhEClx1MzA1M1x1MzA1NVx1MzA4MQpcdTMwNTNcdTMwNTdcdTMwNjQKXHUzMDUzXHUzMDU5XHUzMDQ2Clx1MzA1M1x1MzA1Qlx1MzA0NApcdTMwNTNcdTMwNUJcdTMwNEQKXHUzMDUzXHUzMDVCXHUzMDk5XHUzMDkzClx1MzA1M1x1MzA1RFx1MzA1Rlx1MzA5OVx1MzA2NgpcdTMwNTNcdTMwNUZcdTMwNDQKXHUzMDUzXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA1M1x1MzA1Rlx1MzA2NApcdTMwNTNcdTMwNjFcdTMwODdcdTMwNDYKXHUzMDUzXHUzMDYzXHUzMDRCClx1MzA1M1x1MzA2NFx1MzA1M1x1MzA2NApcdTMwNTNcdTMwNjRcdTMwNkZcdTMwOTlcdTMwOTMKXHUzMDUzXHUzMDY0XHUzMDc1XHUzMDk5Clx1MzA1M1x1MzA2Nlx1MzA0NApcdTMwNTNcdTMwNjZcdTMwOTMKXHUzMDUzXHUzMDY4XHUzMDRCXHUzMDk5XHUzMDg5Clx1MzA1M1x1MzA2OFx1MzA1NwpcdTMwNTNcdTMwNjhcdTMwNkZcdTMwOTkKXHUzMDUzXHUzMDY4XHUzMDhBClx1MzA1M1x1MzA2QVx1MzA1M1x1MzA5OVx1MzA2QQpcdTMwNTNcdTMwNkRcdTMwNTNcdTMwNkQKXHUzMDUzXHUzMDZFXHUzMDdFXHUzMDdFClx1MzA1M1x1MzA2RVx1MzA3RgpcdTMwNTNcdTMwNkVcdTMwODgKXHUzMDUzXHUzMDk5XHUzMDZGXHUzMDkzClx1MzA1M1x1MzA3Mlx1MzA2NFx1MzA1N1x1MzA5OQpcdTMwNTNcdTMwNzVcdTMwNDYKXHUzMDUzXHUzMDc1XHUzMDkzClx1MzA1M1x1MzA3Qlx1MzA5OVx1MzA4Q1x1MzA4QgpcdTMwNTNcdTMwOTlcdTMwN0VcdTMwNDJcdTMwNzVcdTMwOTlcdTMwODkKXHUzMDUzXHUzMDdFXHUzMDRCXHUzMDQ0Clx1MzA1M1x1MzA5OVx1MzA3RVx1MzA1OVx1MzA4QQpcdTMwNTNcdTMwN0VcdTMwNjRcdTMwNkEKXHUzMDUzXHUzMDdFXHUzMDhCClx1MzA1M1x1MzA4MFx1MzA0RFx1MzA5OVx1MzA1MwpcdTMwNTNcdTMwODJcdTMwNTdcdTMwOTkKXHUzMDUzXHUzMDgyXHUzMDYxClx1MzA1M1x1MzA4Mlx1MzA2RQpcdTMwNTNcdTMwODJcdTMwOTMKXHUzMDUzXHUzMDg0XHUzMDRGClx1MzA1M1x1MzA4NFx1MzA3RQpcdTMwNTNcdTMwODZcdTMwNDYKXHUzMDUzXHUzMDg2XHUzMDcyXHUzMDk5Clx1MzA1M1x1MzA4OFx1MzA0NApcdTMwNTNcdTMwODhcdTMwNDYKXHUzMDUzXHUzMDhBXHUzMDhCClx1MzA1M1x1MzA4Q1x1MzA0Rlx1MzA1N1x1MzA4N1x1MzA5MwpcdTMwNTNcdTMwOERcdTMwNjNcdTMwNTEKXHUzMDUzXHUzMDhGXHUzMDgyXHUzMDY2Clx1MzA1M1x1MzA4Rlx1MzA4Q1x1MzA4QgpcdTMwNTNcdTMwOTNcdTMwNDRcdTMwOTMKXHUzMDUzXHUzMDkzXHUzMDRCXHUzMDQ0Clx1MzA1M1x1MzA5M1x1MzA0RApcdTMwNTNcdTMwOTNcdTMwNTdcdTMwODVcdTMwNDYKXHUzMDUzXHUzMDkzXHUzMDU5XHUzMDQ0Clx1MzA1M1x1MzA5M1x1MzA1Rlx1MzA5OVx1MzA2NgpcdTMwNTNcdTMwOTNcdTMwNjhcdTMwOTMKXHUzMDUzXHUzMDkzXHUzMDZBXHUzMDkzClx1MzA1M1x1MzA5M1x1MzA3Mlx1MzA5OVx1MzA2QgpcdTMwNTNcdTMwOTNcdTMwN0JcdTMwOUFcdTMwOTMKXHUzMDUzXHUzMDkzXHUzMDdFXHUzMDUxClx1MzA1M1x1MzA5M1x1MzA4NApcdTMwNTNcdTMwOTNcdTMwOENcdTMwNDQKXHUzMDUzXHUzMDkzXHUzMDhGXHUzMDRGClx1MzA1NVx1MzA5OVx1MzA0NFx1MzA0OFx1MzA0RApcdTMwNTVcdTMwNDRcdTMwNEJcdTMwNDQKXHUzMDU1XHUzMDQ0XHUzMDREXHUzMDkzClx1MzA1NVx1MzA5OVx1MzA0NFx1MzA1MVx1MzA5OVx1MzA5MwpcdTMwNTVcdTMwOTlcdTMwNDRcdTMwNTMKXHUzMDU1XHUzMDQ0XHUzMDU3XHUzMDg3Clx1MzA1NVx1MzA0NFx1MzA1Qlx1MzA0NApcdTMwNTVcdTMwOTlcdTMwNDRcdTMwNUZcdTMwNEYKXHUzMDU1XHUzMDk5XHUzMDQ0XHUzMDYxXHUzMDg1XHUzMDQ2Clx1MzA1NVx1MzA0NFx1MzA2Nlx1MzA0RApcdTMwNTVcdTMwOTlcdTMwNDRcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDU1XHUzMDQ2XHUzMDZBClx1MzA1NVx1MzA0Qlx1MzA0NFx1MzA1NwpcdTMwNTVcdTMwNEJcdTMwOTlcdTMwNTkKXHUzMDU1XHUzMDRCXHUzMDZBClx1MzA1NVx1MzA0Qlx1MzA3Rlx1MzA2MQpcdTMwNTVcdTMwNEJcdTMwOTlcdTMwOEIKXHUzMDU1XHUzMDREXHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA1NVx1MzA0Rlx1MzA1NwpcdTMwNTVcdTMwNEZcdTMwNzJcdTMwOTMKXHUzMDU1XHUzMDRGXHUzMDg5Clx1MzA1NVx1MzA1M1x1MzA0RgpcdTMwNTVcdTMwNTNcdTMwNjQKXHUzMDU1XHUzMDU5XHUzMDk5XHUzMDRCXHUzMDhCClx1MzA1NVx1MzA5OVx1MzA1Qlx1MzA0RApcdTMwNTVcdTMwNUZcdTMwOTMKXHUzMDU1XHUzMDY0XHUzMDQ4XHUzMDQ0Clx1MzA1NVx1MzA5OVx1MzA2NFx1MzA0QVx1MzA5MwpcdTMwNTVcdTMwOTlcdTMwNjNcdTMwNEIKXHUzMDU1XHUzMDk5XHUzMDY0XHUzMDRCXHUzMDk5XHUzMDRGClx1MzA1NVx1MzA2M1x1MzA0RFx1MzA4N1x1MzA0RgpcdTMwNTVcdTMwOTlcdTMwNjNcdTMwNTcKXHUzMDU1XHUzMDY0XHUzMDU3XHUzMDk5XHUzMDkzClx1MzA1NVx1MzA5OVx1MzA2M1x1MzA1RFx1MzA0NgpcdTMwNTVcdTMwNjRcdTMwNUZcdTMwNkZcdTMwOTkKXHUzMDU1XHUzMDY0XHUzMDdFXHUzMDQ0XHUzMDgyClx1MzA1NVx1MzA2Nlx1MzA0NApcdTMwNTVcdTMwNjhcdTMwNDRcdTMwODIKXHUzMDU1XHUzMDY4XHUzMDQ2Clx1MzA1NVx1MzA2OFx1MzA0QVx1MzA4NApcdTMwNTVcdTMwNjhcdTMwNTcKXHUzMDU1XHUzMDY4XHUzMDhCClx1MzA1NVx1MzA2RVx1MzA0NgpcdTMwNTVcdTMwNkZcdTMwOTlcdTMwNEYKXHUzMDU1XHUzMDcyXHUzMDk5XHUzMDU3XHUzMDQ0Clx1MzA1NVx1MzA3OFx1MzA5OVx1MzA2NApcdTMwNTVcdTMwN0JcdTMwNDYKXHUzMDU1XHUzMDdCXHUzMDY4XHUzMDk5Clx1MzA1NVx1MzA3RVx1MzA1OQpcdTMwNTVcdTMwN0ZcdTMwNTdcdTMwNDQKXHUzMDU1XHUzMDdGXHUzMDVGXHUzMDk5XHUzMDhDClx1MzA1NVx1MzA4MFx1MzA1MQpcdTMwNTVcdTMwODFcdTMwOEIKXHUzMDU1XHUzMDg0XHUzMDQ4XHUzMDkzXHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA1NVx1MzA4Nlx1MzA0NgpcdTMwNTVcdTMwODhcdTMwNDYKXHUzMDU1XHUzMDg4XHUzMDRGClx1MzA1NVx1MzA4OVx1MzA1Rlx1MzA5OQpcdTMwNTVcdTMwOTlcdTMwOEJcdTMwNURcdTMwNkZcdTMwOTkKXHUzMDU1XHUzMDhGXHUzMDg0XHUzMDRCClx1MzA1NVx1MzA4Rlx1MzA4QgpcdTMwNTVcdTMwOTNcdTMwNDRcdTMwOTMKXHUzMDU1XHUzMDkzXHUzMDRCClx1MzA1NVx1MzA5M1x1MzA0RFx1MzA4M1x1MzA0RgpcdTMwNTVcdTMwOTNcdTMwNTNcdTMwNDYKXHUzMDU1XHUzMDkzXHUzMDU1XHUzMDQ0Clx1MzA1NVx1MzA5OVx1MzA5M1x1MzA1N1x1MzA4NwpcdTMwNTVcdTMwOTNcdTMwNTlcdTMwNDYKXHUzMDU1XHUzMDkzXHUzMDVCXHUzMDQ0Clx1MzA1NVx1MzA5M1x1MzA1RApcdTMwNTVcdTMwOTNcdTMwNjEKXHUzMDU1XHUzMDkzXHUzMDdFClx1MzA1NVx1MzA5M1x1MzA3RgpcdTMwNTVcdTMwOTNcdTMwODlcdTMwOTMKXHUzMDU3XHUzMDQyXHUzMDQ0Clx1MzA1N1x1MzA0Mlx1MzA1MVx1MzA5OQpcdTMwNTdcdTMwNDJcdTMwNTVcdTMwNjNcdTMwNjYKXHUzMDU3XHUzMDQyXHUzMDhGXHUzMDVCClx1MzA1N1x1MzA0NFx1MzA0RgpcdTMwNTdcdTMwNDRcdTMwOTMKXHUzMDU3XHUzMDQ2XHUzMDYxClx1MzA1N1x1MzA0OFx1MzA0NApcdTMwNTdcdTMwNEFcdTMwNTEKXHUzMDU3XHUzMDRCXHUzMDQ0Clx1MzA1N1x1MzA0Qlx1MzA0RgpcdTMwNTdcdTMwOTlcdTMwNEJcdTMwOTMKXHUzMDU3XHUzMDUzXHUzMDk5XHUzMDY4Clx1MzA1N1x1MzA1OVx1MzA0NgpcdTMwNTdcdTMwOTlcdTMwNUZcdTMwOTlcdTMwNDQKXHUzMDU3XHUzMDVGXHUzMDQ2XHUzMDUxClx1MzA1N1x1MzA1Rlx1MzA0RFx1MzA5OQpcdTMwNTdcdTMwNUZcdTMwNjYKXHUzMDU3XHUzMDVGXHUzMDdGClx1MzA1N1x1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNTdcdTMwNjFcdTMwOEFcdTMwOTMKXHUzMDU3XHUzMDYzXHUzMDRCXHUzMDhBClx1MzA1N1x1MzA2NFx1MzA1N1x1MzA5OQpcdTMwNTdcdTMwNjRcdTMwODJcdTMwOTMKXHUzMDU3XHUzMDY2XHUzMDQ0Clx1MzA1N1x1MzA2Nlx1MzA0RApcdTMwNTdcdTMwNjZcdTMwNjQKXHUzMDU3XHUzMDk5XHUzMDY2XHUzMDkzClx1MzA1N1x1MzA5OVx1MzA2OFx1MzA5OVx1MzA0NgpcdTMwNTdcdTMwNkFcdTMwNERcdTMwOTlcdTMwOEMKXHUzMDU3XHUzMDZBXHUzMDgyXHUzMDZFClx1MzA1N1x1MzA2QVx1MzA5MwpcdTMwNTdcdTMwNkRcdTMwN0UKXHUzMDU3XHUzMDZEXHUzMDkzClx1MzA1N1x1MzA2RVx1MzA0Rlx1MzA5OQpcdTMwNTdcdTMwNkVcdTMwNzVcdTMwOTkKXHUzMDU3XHUzMDZGXHUzMDQ0Clx1MzA1N1x1MzA2Rlx1MzA5OVx1MzA0Qlx1MzA4QQpcdTMwNTdcdTMwNkZcdTMwNjQKXHUzMDU3XHUzMDZGXHUzMDg5XHUzMDQ0Clx1MzA1N1x1MzA2Rlx1MzA5MwpcdTMwNTdcdTMwNzJcdTMwODdcdTMwNDYKXHUzMDU3XHUzMDc1XHUzMDRGClx1MzA1N1x1MzA5OVx1MzA3NVx1MzA5OVx1MzA5MwpcdTMwNTdcdTMwNzhcdTMwNDQKXHUzMDU3XHUzMDdCXHUzMDQ2Clx1MzA1N1x1MzA3Qlx1MzA5MwpcdTMwNTdcdTMwN0VcdTMwNDYKXHUzMDU3XHUzMDdFXHUzMDhCClx1MzA1N1x1MzA3Rlx1MzA5MwpcdTMwNTdcdTMwODBcdTMwNTFcdTMwOEIKXHUzMDU3XHUzMDk5XHUzMDgwXHUzMDU3XHUzMDg3Clx1MzA1N1x1MzA4MVx1MzA0NApcdTMwNTdcdTMwODFcdTMwOEIKXHUzMDU3XHUzMDgyXHUzMDkzClx1MzA1N1x1MzA4M1x1MzA0NFx1MzA5MwpcdTMwNTdcdTMwODNcdTMwNDZcdTMwOTMKXHUzMDU3XHUzMDgzXHUzMDRBXHUzMDkzClx1MzA1N1x1MzA5OVx1MzA4M1x1MzA0Qlx1MzA5OVx1MzA0NFx1MzA4MgpcdTMwNTdcdTMwODRcdTMwNEZcdTMwNTdcdTMwODcKXHUzMDU3XHUzMDgzXHUzMDRGXHUzMDdCXHUzMDQ2Clx1MzA1N1x1MzA4M1x1MzA1MVx1MzA5MwpcdTMwNTdcdTMwODNcdTMwNTMKXHUzMDU3XHUzMDgzXHUzMDU1XHUzMDk5XHUzMDQ0Clx1MzA1N1x1MzA4M1x1MzA1N1x1MzA5MwpcdTMwNTdcdTMwODNcdTMwNUJcdTMwOTMKXHUzMDU3XHUzMDgzXHUzMDVEXHUzMDQ2Clx1MzA1N1x1MzA4M1x1MzA1Rlx1MzA0NApcdTMwNTdcdTMwODNcdTMwNjFcdTMwODdcdTMwNDYKXHUzMDU3XHUzMDgzXHUzMDYzXHUzMDREXHUzMDkzClx1MzA1N1x1MzA5OVx1MzA4M1x1MzA3RQpcdTMwNTdcdTMwODNcdTMwOEFcdTMwOTMKXHUzMDU3XHUzMDgzXHUzMDhDXHUzMDQ0Clx1MzA1N1x1MzA5OVx1MzA4Nlx1MzA0NgpcdTMwNTdcdTMwOTlcdTMwODVcdTMwNDZcdTMwNTdcdTMwODcKXHUzMDU3XHUzMDg1XHUzMDRGXHUzMDZGXHUzMDRGClx1MzA1N1x1MzA5OVx1MzA4NVx1MzA1N1x1MzA5MwpcdTMwNTdcdTMwODVcdTMwNjNcdTMwNUJcdTMwNEQKXHUzMDU3XHUzMDg1XHUzMDdGClx1MzA1N1x1MzA4NVx1MzA4OVx1MzA2Rlx1MzA5OQpcdTMwNTdcdTMwOTlcdTMwODVcdTMwOTNcdTMwNkZcdTMwOTlcdTMwOTMKXHUzMDU3XHUzMDg3XHUzMDQ2XHUzMDRCXHUzMDQ0Clx1MzA1N1x1MzA4N1x1MzA0Rlx1MzA1Rlx1MzA0RgpcdTMwNTdcdTMwODdcdTMwNjNcdTMwNTFcdTMwOTMKXHUzMDU3XHUzMDg3XHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA1N1x1MzA4N1x1MzA4Mlx1MzA2NApcdTMwNTdcdTMwODlcdTMwNUJcdTMwOEIKXHUzMDU3XHUzMDg5XHUzMDc4XHUzMDk5XHUzMDhCClx1MzA1N1x1MzA5M1x1MzA0QgpcdTMwNTdcdTMwOTNcdTMwNTNcdTMwNDYKXHUzMDU3XHUzMDk5XHUzMDkzXHUzMDU3XHUzMDk5XHUzMDgzClx1MzA1N1x1MzA5M1x1MzA1Qlx1MzA0NFx1MzA1N1x1MzA5OQpcdTMwNTdcdTMwOTNcdTMwNjFcdTMwNEYKXHUzMDU3XHUzMDkzXHUzMDhBXHUzMDkzClx1MzA1OVx1MzA0Mlx1MzA1MVx1MzA5OQpcdTMwNTlcdTMwNDJcdTMwNTcKXHUzMDU5XHUzMDQyXHUzMDZBClx1MzA1OVx1MzA5OVx1MzA0Mlx1MzA5MwpcdTMwNTlcdTMwNDRcdTMwNDhcdTMwNDQKXHUzMDU5XHUzMDQ0XHUzMDRCClx1MzA1OVx1MzA0NFx1MzA2OFx1MzA0NgpcdTMwNTlcdTMwOTlcdTMwNDRcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDU5XHUzMDQ0XHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA1OVx1MzA0Nlx1MzA0Qlx1MzA5OVx1MzA0RgpcdTMwNTlcdTMwNDZcdTMwNTdcdTMwOTlcdTMwNjQKXHUzMDU5XHUzMDQ2XHUzMDVCXHUzMDkzClx1MzA1OVx1MzA0QVx1MzA2OFx1MzA5OVx1MzA4QQpcdTMwNTlcdTMwNERcdTMwN0UKXHUzMDU5XHUzMDRGXHUzMDQ2Clx1MzA1OVx1MzA0Rlx1MzA2QVx1MzA0NApcdTMwNTlcdTMwNTFcdTMwOEIKXHUzMDU5XHUzMDUzXHUzMDk5XHUzMDQ0Clx1MzA1OVx1MzA1M1x1MzA1NwpcdTMwNTlcdTMwOTlcdTMwNTVcdTMwOTMKXHUzMDU5XHUzMDU5XHUzMDk5XHUzMDU3XHUzMDQ0Clx1MzA1OVx1MzA1OVx1MzA4MApcdTMwNTlcdTMwNTlcdTMwODFcdTMwOEIKXHUzMDU5XHUzMDYzXHUzMDRCXHUzMDhBClx1MzA1OVx1MzA5OVx1MzA2M1x1MzA1N1x1MzA4QQpcdTMwNTlcdTMwOTlcdTMwNjNcdTMwNjgKXHUzMDU5XHUzMDY2XHUzMDREClx1MzA1OVx1MzA2Nlx1MzA4QgpcdTMwNTlcdTMwNkRcdTMwOEIKXHUzMDU5XHUzMDZFXHUzMDUzClx1MzA1OVx1MzA2Rlx1MzA1Rlx1MzA5OQpcdTMwNTlcdTMwNkZcdTMwOTlcdTMwODlcdTMwNTdcdTMwNDQKXHUzMDU5XHUzMDk5XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA1OVx1MzA5OVx1MzA3NVx1MzA5OVx1MzA2Q1x1MzA4QwpcdTMwNTlcdTMwNzVcdTMwOTlcdTMwOEEKXHUzMDU5XHUzMDc1XHUzMDhDClx1MzA1OVx1MzA3OFx1MzA5OVx1MzA2NgpcdTMwNTlcdTMwNzhcdTMwOTlcdTMwOEIKXHUzMDU5XHUzMDk5XHUzMDdCXHUzMDQ2Clx1MzA1OVx1MzA3Qlx1MzA5OVx1MzA5MwpcdTMwNTlcdTMwN0VcdTMwNDQKXHUzMDU5XHUzMDgxXHUzMDU3Clx1MzA1OVx1MzA4Mlx1MzA0NgpcdTMwNTlcdTMwODRcdTMwNEQKXHUzMDU5XHUzMDg5XHUzMDU5XHUzMDg5Clx1MzA1OVx1MzA4Qlx1MzA4MQpcdTMwNTlcdTMwOENcdTMwNjFcdTMwNEJcdTMwOTlcdTMwNDYKXHUzMDU5XHUzMDhEXHUzMDYzXHUzMDY4Clx1MzA1OVx1MzA4Rlx1MzA4QgpcdTMwNTlcdTMwOTNcdTMwNUJcdTMwOTlcdTMwOTMKXHUzMDU5XHUzMDkzXHUzMDdCXHUzMDlBXHUzMDQ2Clx1MzA1Qlx1MzA0Mlx1MzA3NVx1MzA5OVx1MzA4OQpcdTMwNUJcdTMwNDRcdTMwNEJcdTMwNjQKXHUzMDVCXHUzMDQ0XHUzMDUxXHUzMDk5XHUzMDkzClx1MzA1Qlx1MzA0NFx1MzA1N1x1MzA5OQpcdTMwNUJcdTMwNDRcdTMwODhcdTMwNDYKXHUzMDVCXHUzMDRBXHUzMDQ2Clx1MzA1Qlx1MzA0Qlx1MzA0NFx1MzA0Qlx1MzA5MwpcdTMwNUJcdTMwNERcdTMwNkJcdTMwOTMKXHUzMDVCXHUzMDREXHUzMDgwClx1MzA1Qlx1MzA0RFx1MzA4NgpcdTMwNUJcdTMwNERcdTMwODlcdTMwOTNcdTMwNDZcdTMwOTMKXHUzMDVCXHUzMDUxXHUzMDkzClx1MzA1Qlx1MzA1M1x1MzA0NgpcdTMwNUJcdTMwNTlcdTMwNTdcdTMwOTkKXHUzMDVCXHUzMDVGXHUzMDQ0Clx1MzA1Qlx1MzA1Rlx1MzA1MQpcdTMwNUJcdTMwNjNcdTMwNEJcdTMwNEYKXHUzMDVCXHUzMDYzXHUzMDREXHUzMDgzXHUzMDRGClx1MzA1Qlx1MzA5OVx1MzA2M1x1MzA0RgpcdTMwNUJcdTMwNjNcdTMwNTFcdTMwOTMKXHUzMDVCXHUzMDYzXHUzMDUzXHUzMDY0Clx1MzA1Qlx1MzA2M1x1MzA1NVx1MzA1Rlx1MzA0Rlx1MzA3RQpcdTMwNUJcdTMwNjRcdTMwNURcdTMwOTlcdTMwNEYKXHUzMDVCXHUzMDY0XHUzMDVGXHUzMDk5XHUzMDkzClx1MzA1Qlx1MzA2NFx1MzA2Nlx1MzA5OVx1MzA5MwpcdTMwNUJcdTMwNjNcdTMwNkZcdTMwOUFcdTMwOTMKXHUzMDVCXHUzMDY0XHUzMDcyXHUzMDk5Clx1MzA1Qlx1MzA2NFx1MzA3NVx1MzA5OVx1MzA5MwpcdTMwNUJcdTMwNjRcdTMwODFcdTMwNDQKXHUzMDVCXHUzMDY0XHUzMDhBXHUzMDY0Clx1MzA1Qlx1MzA2QVx1MzA0QgpcdTMwNUJcdTMwNkVcdTMwNzJcdTMwOTkKXHUzMDVCXHUzMDZGXHUzMDZGXHUzMDk5Clx1MzA1Qlx1MzA3Mlx1MzA5OVx1MzA4RApcdTMwNUJcdTMwN0JcdTMwOTlcdTMwNkQKXHUzMDVCXHUzMDdFXHUzMDQ0Clx1MzA1Qlx1MzA3RVx1MzA4QgpcdTMwNUJcdTMwODFcdTMwOEIKXHUzMDVCXHUzMDgyXHUzMDVGXHUzMDhDClx1MzA1Qlx1MzA4QVx1MzA3NQpcdTMwNUJcdTMwOTlcdTMwOTNcdTMwNDJcdTMwNEYKXHUzMDVCXHUzMDkzXHUzMDQ0Clx1MzA1Qlx1MzA5M1x1MzA0OFx1MzA0NApcdTMwNUJcdTMwOTNcdTMwNEIKXHUzMDVCXHUzMDkzXHUzMDREXHUzMDg3Clx1MzA1Qlx1MzA5M1x1MzA0RgpcdTMwNUJcdTMwOTNcdTMwNTFcdTMwOTlcdTMwOTMKXHUzMDVCXHUzMDk5XHUzMDkzXHUzMDUzXHUzMDk5Clx1MzA1Qlx1MzA5M1x1MzA1NVx1MzA0NApcdTMwNUJcdTMwOTNcdTMwNTdcdTMwODUKXHUzMDVCXHUzMDkzXHUzMDU5XHUzMDQ0Clx1MzA1Qlx1MzA5M1x1MzA1Qlx1MzA0NApcdTMwNUJcdTMwOTNcdTMwNURcdTMwOTkKXHUzMDVCXHUzMDkzXHUzMDVGXHUzMDRGClx1MzA1Qlx1MzA5M1x1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNUJcdTMwOTNcdTMwNjZcdTMwNDQKXHUzMDVCXHUzMDkzXHUzMDY4XHUzMDQ2Clx1MzA1Qlx1MzA5M1x1MzA2Q1x1MzA0RApcdTMwNUJcdTMwOTNcdTMwNkRcdTMwOTMKXHUzMDVCXHUzMDkzXHUzMDZGXHUzMDlBXHUzMDQ0Clx1MzA1Qlx1MzA5OVx1MzA5M1x1MzA3NVx1MzA5OQpcdTMwNUJcdTMwOTlcdTMwOTNcdTMwN0JcdTMwOUFcdTMwNDYKXHUzMDVCXHUzMDkzXHUzMDgwClx1MzA1Qlx1MzA5M1x1MzA4MVx1MzA5M1x1MzA1N1x1MzA5OVx1MzA4NwpcdTMwNUJcdTMwOTNcdTMwODJcdTMwOTMKXHUzMDVCXHUzMDkzXHUzMDg0XHUzMDRGClx1MzA1Qlx1MzA5M1x1MzA4Nlx1MzA0NgpcdTMwNUJcdTMwOTNcdTMwODhcdTMwNDYKXHUzMDVCXHUzMDk5XHUzMDkzXHUzMDg5Clx1MzA1Qlx1MzA5OVx1MzA5M1x1MzA4QVx1MzA4M1x1MzA0RgpcdTMwNUJcdTMwOTNcdTMwOENcdTMwNDQKXHUzMDVCXHUzMDkzXHUzMDhEClx1MzA1RFx1MzA0Mlx1MzA0RgpcdTMwNURcdTMwNDRcdTMwNjhcdTMwNTFcdTMwOTlcdTMwOEIKXHUzMDVEXHUzMDQ0XHUzMDZEClx1MzA1RFx1MzA0Nlx1MzA0Qlx1MzA5OVx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0NgpcdTMwNURcdTMwNDZcdTMwNEQKXHUzMDVEXHUzMDQ2XHUzMDUzXHUzMDk5Clx1MzA1RFx1MzA0Nlx1MzA1N1x1MzA5MwpcdTMwNURcdTMwNDZcdTMwNUZcdTMwOTlcdTMwOTMKXHUzMDVEXHUzMDQ2XHUzMDZBXHUzMDkzClx1MzA1RFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNURcdTMwNDZcdTMwODFcdTMwOTMKXHUzMDVEXHUzMDQ2XHUzMDhBClx1MzA1RFx1MzA0OFx1MzA4Mlx1MzA2RQpcdTMwNURcdTMwNDhcdTMwOTMKXHUzMDVEXHUzMDRCXHUzMDk5XHUzMDQ0Clx1MzA1RFx1MzA1MVx1MzA5OVx1MzA0RApcdTMwNURcdTMwNTNcdTMwNDYKXHUzMDVEXHUzMDUzXHUzMDVEXHUzMDUzClx1MzA1RFx1MzA1NVx1MzA5OVx1MzA0NApcdTMwNURcdTMwNTdcdTMwNkEKXHUzMDVEXHUzMDVCXHUzMDQ0Clx1MzA1RFx1MzA1Qlx1MzA5MwpcdTMwNURcdTMwNURcdTMwNEZcdTMwOTkKXHUzMDVEXHUzMDVGXHUzMDk5XHUzMDY2XHUzMDhCClx1MzA1RFx1MzA2NFx1MzA0NgpcdTMwNURcdTMwNjRcdTMwNDhcdTMwOTMKXHUzMDVEXHUzMDYzXHUzMDRCXHUzMDkzClx1MzA1RFx1MzA2NFx1MzA0RFx1MzA5OVx1MzA4N1x1MzA0NgpcdTMwNURcdTMwNjNcdTMwNTFcdTMwNjQKXHUzMDVEXHUzMDYzXHUzMDUzXHUzMDQ2Clx1MzA1RFx1MzA2M1x1MzA1Qlx1MzA5MwpcdTMwNURcdTMwNjNcdTMwNjgKXHUzMDVEXHUzMDY4XHUzMDRCXHUzMDk5XHUzMDhGClx1MzA1RFx1MzA2OFx1MzA2NFx1MzA5OVx1MzA4OQpcdTMwNURcdTMwNkFcdTMwNDhcdTMwOEIKXHUzMDVEXHUzMDZBXHUzMDVGClx1MzA1RFx1MzA3NVx1MzA3Qlx1MzA5OQpcdTMwNURcdTMwN0JcdTMwOTlcdTMwNEYKXHUzMDVEXHUzMDdCXHUzMDk5XHUzMDhEClx1MzA1RFx1MzA3RVx1MzA2NApcdTMwNURcdTMwN0VcdTMwOEIKXHUzMDVEXHUzMDgwXHUzMDRGClx1MzA1RFx1MzA4MFx1MzA4QVx1MzA0OApcdTMwNURcdTMwODFcdTMwOEIKXHUzMDVEXHUzMDgyXHUzMDVEXHUzMDgyClx1MzA1RFx1MzA4OFx1MzA0Qlx1MzA1Qlx1MzA5OQpcdTMwNURcdTMwODlcdTMwN0VcdTMwODEKXHUzMDVEXHUzMDhEXHUzMDQ2Clx1MzA1RFx1MzA5M1x1MzA0Qlx1MzA0NApcdTMwNURcdTMwOTNcdTMwNTFcdTMwNDQKXHUzMDVEXHUzMDkzXHUzMDU1XHUzMDk5XHUzMDQ0Clx1MzA1RFx1MzA5M1x1MzA1N1x1MzA2NApcdTMwNURcdTMwOTNcdTMwNURcdTMwOTlcdTMwNEYKXHUzMDVEXHUzMDkzXHUzMDYxXHUzMDg3XHUzMDQ2Clx1MzA1RFx1MzA5OVx1MzA5M1x1MzA3Mlx1MzA5OQpcdTMwNURcdTMwOTlcdTMwOTNcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDVEXHUzMDkzXHUzMDdGXHUzMDkzClx1MzA1Rlx1MzA0Mlx1MzA0NApcdTMwNUZcdTMwNDRcdTMwNDRcdTMwOTMKXHUzMDVGXHUzMDQ0XHUzMDQ2XHUzMDkzClx1MzA1Rlx1MzA0NFx1MzA0OFx1MzA0RApcdTMwNUZcdTMwNDRcdTMwNEFcdTMwNDYKXHUzMDVGXHUzMDk5XHUzMDQ0XHUzMDRCXHUzMDk5XHUzMDRGClx1MzA1Rlx1MzA0NFx1MzA0RApcdTMwNUZcdTMwNDRcdTMwNEZcdTMwOTlcdTMwNDYKXHUzMDVGXHUzMDQ0XHUzMDUxXHUzMDkzClx1MzA1Rlx1MzA0NFx1MzA1MwpcdTMwNUZcdTMwNDRcdTMwNTVcdTMwOTlcdTMwNDQKXHUzMDVGXHUzMDk5XHUzMDQ0XHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2XHUzMDc1XHUzMDk5Clx1MzA1Rlx1MzA5OVx1MzA0NFx1MzA1OVx1MzA0RApcdTMwNUZcdTMwNDRcdTMwNUJcdTMwNjQKXHUzMDVGXHUzMDQ0XHUzMDVEXHUzMDQ2Clx1MzA1Rlx1MzA5OVx1MzA0NFx1MzA1Rlx1MzA0NApcdTMwNUZcdTMwNDRcdTMwNjFcdTMwODdcdTMwNDYKXHUzMDVGXHUzMDQ0XHUzMDY2XHUzMDQ0Clx1MzA1Rlx1MzA5OVx1MzA0NFx1MzA2OFx1MzA5OVx1MzA1M1x1MzA4RApcdTMwNUZcdTMwNDRcdTMwNkFcdTMwNDQKXHUzMDVGXHUzMDQ0XHUzMDZEXHUzMDY0Clx1MzA1Rlx1MzA0NFx1MzA2RVx1MzA0NgpcdTMwNUZcdTMwNDRcdTMwNkZcdTMwOTMKXHUzMDVGXHUzMDk5XHUzMDQ0XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA1Rlx1MzA0NFx1MzA3NVx1MzA0NgpcdTMwNUZcdTMwNDRcdTMwNzhcdTMwOTMKXHUzMDVGXHUzMDQ0XHUzMDdCClx1MzA1Rlx1MzA0NFx1MzA3RVx1MzA2NFx1MzA2Rlx1MzA5OVx1MzA2QQpcdTMwNUZcdTMwNDRcdTMwN0ZcdTMwOTNcdTMwNEZcdTMwOTkKXHUzMDVGXHUzMDQ0XHUzMDgwClx1MzA1Rlx1MzA0NFx1MzA4MVx1MzA5MwpcdTMwNUZcdTMwNDRcdTMwODRcdTMwNEQKXHUzMDVGXHUzMDQ0XHUzMDg4XHUzMDQ2Clx1MzA1Rlx1MzA0NFx1MzA4OQpcdTMwNUZcdTMwNDRcdTMwOEFcdTMwODdcdTMwNEYKXHUzMDVGXHUzMDQ0XHUzMDhCClx1MzA1Rlx1MzA0NFx1MzA4Rlx1MzA5MwpcdTMwNUZcdTMwNDZcdTMwNDgKXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA1Rlx1MzA0QVx1MzA1OQpcdTMwNUZcdTMwNEFcdTMwOEIKXHUzMDVGXHUzMDRBXHUzMDhDXHUzMDhCClx1MzA1Rlx1MzA0Qlx1MzA0NApcdTMwNUZcdTMwNEJcdTMwNkQKXHUzMDVGXHUzMDREXHUzMDcyXHUzMDk5Clx1MzA1Rlx1MzA0Rlx1MzA1NVx1MzA5MwpcdTMwNUZcdTMwNTNcdTMwNEYKXHUzMDVGXHUzMDUzXHUzMDg0XHUzMDREClx1MzA1Rlx1MzA1NVx1MzA0NApcdTMwNUZcdTMwNTdcdTMwNTVcdTMwOTlcdTMwOTMKXHUzMDVGXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDgzXHUzMDhDClx1MzA1Rlx1MzA1OVx1MzA1MVx1MzA4QgpcdTMwNUZcdTMwNTlcdTMwOTlcdTMwNTVcdTMwOEZcdTMwOEIKXHUzMDVGXHUzMDVEXHUzMDRCXHUzMDk5XHUzMDhDClx1MzA1Rlx1MzA1Rlx1MzA0Qlx1MzA0NgpcdTMwNUZcdTMwNUZcdTMwNEYKXHUzMDVGXHUzMDVGXHUzMDk5XHUzMDU3XHUzMDQ0Clx1MzA1Rlx1MzA1Rlx1MzA3RgpcdTMwNUZcdTMwNjFcdTMwNkZcdTMwOTlcdTMwNkEKXHUzMDVGXHUzMDk5XHUzMDYzXHUzMDRCXHUzMDQ0Clx1MzA1Rlx1MzA5OVx1MzA2M1x1MzA0RFx1MzA4M1x1MzA0RgpcdTMwNUZcdTMwOTlcdTMwNjNcdTMwNTMKXHUzMDVGXHUzMDk5XHUzMDYzXHUzMDU3XHUzMDg1XHUzMDY0Clx1MzA1Rlx1MzA5OVx1MzA2M1x1MzA1Rlx1MzA0NApcdTMwNUZcdTMwNjZcdTMwOEIKXHUzMDVGXHUzMDY4XHUzMDQ4XHUzMDhCClx1MzA1Rlx1MzA2QVx1MzA2Rlx1MzA5OVx1MzA1RgpcdTMwNUZcdTMwNkJcdTMwOTMKXHUzMDVGXHUzMDZDXHUzMDREClx1MzA1Rlx1MzA2RVx1MzA1N1x1MzA3RgpcdTMwNUZcdTMwNkZcdTMwNjQKXHUzMDVGXHUzMDc1XHUzMDk5XHUzMDkzClx1MzA1Rlx1MzA3OFx1MzA5OVx1MzA4QgpcdTMwNUZcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDVGXHUzMDdFXHUzMDUzXHUzMDk5Clx1MzA1Rlx1MzA3RVx1MzA4QgpcdTMwNUZcdTMwOTlcdTMwODBcdTMwOEIKXHUzMDVGXHUzMDgxXHUzMDQ0XHUzMDREClx1MzA1Rlx1MzA4MVx1MzA1OQpcdTMwNUZcdTMwODFcdTMwOEIKXHUzMDVGXHUzMDgyXHUzMDY0Clx1MzA1Rlx1MzA4NFx1MzA1OVx1MzA0NApcdTMwNUZcdTMwODhcdTMwOEIKXHUzMDVGXHUzMDg5XHUzMDU5Clx1MzA1Rlx1MzA4QVx1MzA0RFx1MzA3Qlx1MzA5M1x1MzA0Qlx1MzA5OVx1MzA5MwpcdTMwNUZcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDVGXHUzMDhBXHUzMDhCClx1MzA1Rlx1MzA4Qlx1MzA2OApcdTMwNUZcdTMwOENcdTMwOEIKXHUzMDVGXHUzMDhDXHUzMDkzXHUzMDY4Clx1MzA1Rlx1MzA4RFx1MzA2M1x1MzA2OApcdTMwNUZcdTMwOEZcdTMwODBcdTMwOENcdTMwOEIKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDQyXHUzMDY0Clx1MzA1Rlx1MzA5M1x1MzA0NApcdTMwNUZcdTMwOTNcdTMwNEFcdTMwOTMKXHUzMDVGXHUzMDkzXHUzMDRCClx1MzA1Rlx1MzA5M1x1MzA0RApcdTMwNUZcdTMwOTNcdTMwNTFcdTMwOTMKXHUzMDVGXHUzMDkzXHUzMDUzXHUzMDk5Clx1MzA1Rlx1MzA5M1x1MzA1NVx1MzA5MwpcdTMwNUZcdTMwOTNcdTMwNTdcdTMwOTlcdTMwODdcdTMwNDZcdTMwNzJcdTMwOTkKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDVCXHUzMDQ0Clx1MzA1Rlx1MzA5M1x1MzA1RFx1MzA0RgpcdTMwNUZcdTMwOTNcdTMwNUZcdTMwNDQKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDYxClx1MzA1Rlx1MzA5M1x1MzA2Nlx1MzA0NApcdTMwNUZcdTMwOTNcdTMwNjhcdTMwNDYKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDZBClx1MzA1Rlx1MzA5M1x1MzA2Qlx1MzA5MwpcdTMwNUZcdTMwOTlcdTMwOTNcdTMwNkRcdTMwNjQKXHUzMDVGXHUzMDkzXHUzMDZFXHUzMDQ2Clx1MzA1Rlx1MzA5M1x1MzA3Mlx1MzA5QVx1MzA5MwpcdTMwNUZcdTMwOTlcdTMwOTNcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDVGXHUzMDkzXHUzMDdFXHUzMDY0Clx1MzA1Rlx1MzA5M1x1MzA4MVx1MzA0NApcdTMwNUZcdTMwOTlcdTMwOTNcdTMwOENcdTMwNjQKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDhEClx1MzA1Rlx1MzA5OVx1MzA5M1x1MzA4RgpcdTMwNjFcdTMwNDJcdTMwNDQKXHUzMDYxXHUzMDQyXHUzMDkzClx1MzA2MVx1MzA0NFx1MzA0RApcdTMwNjFcdTMwNDRcdTMwNTVcdTMwNDQKXHUzMDYxXHUzMDQ4XHUzMDkzClx1MzA2MVx1MzA0Qlx1MzA0NApcdTMwNjFcdTMwNEJcdTMwODkKXHUzMDYxXHUzMDREXHUzMDg1XHUzMDQ2Clx1MzA2MVx1MzA0RFx1MzA5MwpcdTMwNjFcdTMwNTFcdTMwNDRcdTMwNTlcdTMwOTkKXHUzMDYxXHUzMDUxXHUzMDkzClx1MzA2MVx1MzA1M1x1MzA0RgpcdTMwNjFcdTMwNTVcdTMwNDQKXHUzMDYxXHUzMDU3XHUzMDREClx1MzA2MVx1MzA1N1x1MzA4QVx1MzA4N1x1MzA0NgpcdTMwNjFcdTMwNUJcdTMwNDQKXHUzMDYxXHUzMDVEXHUzMDQ2Clx1MzA2MVx1MzA1Rlx1MzA0NApcdTMwNjFcdTMwNUZcdTMwOTMKXHUzMDYxXHUzMDYxXHUzMDRBXHUzMDg0Clx1MzA2MVx1MzA2NFx1MzA1N1x1MzA5OVx1MzA4NwpcdTMwNjFcdTMwNjZcdTMwNEQKXHUzMDYxXHUzMDY2XHUzMDkzClx1MzA2MVx1MzA2Q1x1MzA0RApcdTMwNjFcdTMwNkNcdTMwOEEKXHUzMDYxXHUzMDZFXHUzMDQ2Clx1MzA2MVx1MzA3Mlx1MzA4N1x1MzA0NgpcdTMwNjFcdTMwNzhcdTMwNDRcdTMwNUJcdTMwOTMKXHUzMDYxXHUzMDdCXHUzMDQ2Clx1MzA2MVx1MzA3RVx1MzA1RgpcdTMwNjFcdTMwN0ZcdTMwNjQKXHUzMDYxXHUzMDdGXHUzMDY4XHUzMDk5XHUzMDhEClx1MzA2MVx1MzA4MVx1MzA0NFx1MzA2OFx1MzA5OQpcdTMwNjFcdTMwODNcdTMwOTNcdTMwNTNcdTMwNkFcdTMwNzhcdTMwOTkKXHUzMDYxXHUzMDg1XHUzMDQ2XHUzMDQ0Clx1MzA2MVx1MzA4Nlx1MzA4QVx1MzA4N1x1MzA0RgpcdTMwNjFcdTMwODdcdTMwNDZcdTMwNTcKXHUzMDYxXHUzMDg3XHUzMDU1XHUzMDRGXHUzMDUxXHUzMDkzClx1MzA2MVx1MzA4OVx1MzA1NwpcdTMwNjFcdTMwODlcdTMwN0YKXHUzMDYxXHUzMDhBXHUzMDRCXHUzMDk5XHUzMDdGClx1MzA2MVx1MzA4QVx1MzA4N1x1MzA0NgpcdTMwNjFcdTMwOEJcdTMwNjhcdTMwOTkKXHUzMDYxXHUzMDhGXHUzMDhGClx1MzA2MVx1MzA5M1x1MzA1Rlx1MzA0NApcdTMwNjFcdTMwOTNcdTMwODJcdTMwNEYKXHUzMDY0XHUzMDQ0XHUzMDRCClx1MzA2NFx1MzA0NFx1MzA1Rlx1MzA2MQpcdTMwNjRcdTMwNDZcdTMwNEIKXHUzMDY0XHUzMDQ2XHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA2NFx1MzA0Nlx1MzA2Rlx1MzA5MwpcdTMwNjRcdTMwNDZcdTMwOEYKXHUzMDY0XHUzMDRCXHUzMDQ2Clx1MzA2NFx1MzA0Qlx1MzA4Q1x1MzA4QgpcdTMwNjRcdTMwNEZcdTMwNkQKXHUzMDY0XHUzMDRGXHUzMDhCClx1MzA2NFx1MzA1MVx1MzA2RApcdTMwNjRcdTMwNTFcdTMwOEIKXHUzMDY0XHUzMDUzXHUzMDk5XHUzMDQ2Clx1MzA2NFx1MzA1Rlx1MzA0OFx1MzA4QgpcdTMwNjRcdTMwNjRcdTMwOTlcdTMwNEYKXHUzMDY0XHUzMDY0XHUzMDU3XHUzMDk5Clx1MzA2NFx1MzA2NFx1MzA4MApcdTMwNjRcdTMwNjhcdTMwODFcdTMwOEIKXHUzMDY0XHUzMDZBXHUzMDRCXHUzMDk5XHUzMDhCClx1MzA2NFx1MzA2QVx1MzA3RgpcdTMwNjRcdTMwNkRcdTMwNjRcdTMwOTlcdTMwNkQKXHUzMDY0XHUzMDZFXHUzMDhCClx1MzA2NFx1MzA3NVx1MzA5OVx1MzA1OQpcdTMwNjRcdTMwN0VcdTMwODlcdTMwNkFcdTMwNDQKXHUzMDY0XHUzMDdFXHUzMDhCClx1MzA2NFx1MzA3Rlx1MzA0RApcdTMwNjRcdTMwODFcdTMwNUZcdTMwNDQKXHUzMDY0XHUzMDgyXHUzMDhBClx1MzA2NFx1MzA4Mlx1MzA4QgpcdTMwNjRcdTMwODhcdTMwNDQKXHUzMDY0XHUzMDhCXHUzMDdCXHUzMDk5Clx1MzA2NFx1MzA4Qlx1MzA3Rlx1MzA0RgpcdTMwNjRcdTMwOEZcdTMwODJcdTMwNkUKXHUzMDY0XHUzMDhGXHUzMDhBClx1MzA2Nlx1MzA0Mlx1MzA1NwpcdTMwNjZcdTMwNDJcdTMwNjYKXHUzMDY2XHUzMDQyXHUzMDdGClx1MzA2Nlx1MzA0NFx1MzA0QVx1MzA5MwpcdTMwNjZcdTMwNDRcdTMwNEIKXHUzMDY2XHUzMDQ0XHUzMDREClx1MzA2Nlx1MzA0NFx1MzA1MVx1MzA0NApcdTMwNjZcdTMwNDRcdTMwNTNcdTMwNEYKXHUzMDY2XHUzMDQ0XHUzMDU1XHUzMDY0Clx1MzA2Nlx1MzA0NFx1MzA1NwpcdTMwNjZcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDY2XHUzMDQ0XHUzMDVGXHUzMDQ0Clx1MzA2Nlx1MzA0NFx1MzA2OFx1MzA5OQpcdTMwNjZcdTMwNDRcdTMwNkRcdTMwNDQKXHUzMDY2XHUzMDQ0XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA2Nlx1MzA0NFx1MzA3OFx1MzA5MwpcdTMwNjZcdTMwNDRcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDY2XHUzMDQ2XHUzMDYxClx1MzA2Nlx1MzA0QVx1MzA0Rlx1MzA4QwpcdTMwNjZcdTMwNERcdTMwNjhcdTMwNDYKXHUzMDY2XHUzMDRGXHUzMDcyXHUzMDk5Clx1MzA2Nlx1MzA5OVx1MzA1M1x1MzA3Qlx1MzA5OVx1MzA1MwpcdTMwNjZcdTMwNTVcdTMwNERcdTMwOTlcdTMwODdcdTMwNDYKXHUzMDY2XHUzMDU1XHUzMDUxXHUzMDk5Clx1MzA2Nlx1MzA1OVx1MzA4QQpcdTMwNjZcdTMwNURcdTMwNDYKXHUzMDY2XHUzMDYxXHUzMDRCXHUzMDk5XHUzMDQ0Clx1MzA2Nlx1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNjZcdTMwNjRcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDY2XHUzMDY0XHUzMDY0XHUzMDk5XHUzMDREClx1MzA2Nlx1MzA5OVx1MzA2M1x1MzA2Rlx1MzA5QQpcdTMwNjZcdTMwNjRcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDY2XHUzMDY0XHUzMDg0Clx1MzA2Nlx1MzA5OVx1MzA2Q1x1MzA0Qlx1MzA0OApcdTMwNjZcdTMwNkNcdTMwNEQKXHUzMDY2XHUzMDZDXHUzMDRGXHUzMDk5XHUzMDQ0Clx1MzA2Nlx1MzA2RVx1MzA3Mlx1MzA4OQpcdTMwNjZcdTMwNkZcdTMwNDQKXHUzMDY2XHUzMDc1XHUzMDk5XHUzMDRGXHUzMDhEClx1MzA2Nlx1MzA3NVx1MzA1Rlx1MzA5OQpcdTMwNjZcdTMwN0JcdTMwNjhcdTMwOTlcdTMwNEQKXHUzMDY2XHUzMDdCXHUzMDkzClx1MzA2Nlx1MzA3RVx1MzA0OApcdTMwNjZcdTMwN0VcdTMwNERcdTMwNTlcdTMwOTlcdTMwNTcKXHUzMDY2XHUzMDdGXHUzMDU3XHUzMDk5XHUzMDRCClx1MzA2Nlx1MzA3Rlx1MzA4NFx1MzA1MVx1MzA5OQpcdTMwNjZcdTMwODlcdTMwNTkKXHUzMDY2XHUzMDhDXHUzMDcyXHUzMDk5Clx1MzA2Nlx1MzA4Rlx1MzA1MQpcdTMwNjZcdTMwOEZcdTMwNUZcdTMwNTcKXHUzMDY2XHUzMDk5XHUzMDkzXHUzMDQyXHUzMDY0Clx1MzA2Nlx1MzA5M1x1MzA0NFx1MzA5MwpcdTMwNjZcdTMwOTNcdTMwNEJcdTMwNDQKXHUzMDY2XHUzMDkzXHUzMDREClx1MzA2Nlx1MzA5M1x1MzA0Rlx1MzA5OQpcdTMwNjZcdTMwOTNcdTMwNTFcdTMwOTMKXHUzMDY2XHUzMDkzXHUzMDUzXHUzMDk5XHUzMDRGClx1MzA2Nlx1MzA5M1x1MzA1NVx1MzA0NApcdTMwNjZcdTMwOTNcdTMwNTcKXHUzMDY2XHUzMDkzXHUzMDU5XHUzMDQ2Clx1MzA2Nlx1MzA5OVx1MzA5M1x1MzA2MQpcdTMwNjZcdTMwOTNcdTMwNjZcdTMwNEQKXHUzMDY2XHUzMDkzXHUzMDY4XHUzMDQ2Clx1MzA2Nlx1MzA5M1x1MzA2QVx1MzA0NApcdTMwNjZcdTMwOTNcdTMwNzVcdTMwOUFcdTMwODkKXHUzMDY2XHUzMDkzXHUzMDdCXHUzMDk5XHUzMDQ2XHUzMDVGXHUzMDk5XHUzMDQ0Clx1MzA2Nlx1MzA5M1x1MzA4MVx1MzA2NApcdTMwNjZcdTMwOTNcdTMwODlcdTMwOTNcdTMwNEJcdTMwNDQKXHUzMDY2XHUzMDk5XHUzMDkzXHUzMDhBXHUzMDg3XHUzMDRGClx1MzA2Nlx1MzA5OVx1MzA5M1x1MzA4RgpcdTMwNjhcdTMwOTlcdTMwNDJcdTMwNDQKXHUzMDY4XHUzMDQ0XHUzMDhDClx1MzA2OFx1MzA5OVx1MzA0Nlx1MzA0Qlx1MzA5MwpcdTMwNjhcdTMwNDZcdTMwNERcdTMwODVcdTMwNDYKXHUzMDY4XHUzMDk5XHUzMDQ2XHUzMDRGXHUzMDk5Clx1MzA2OFx1MzA0Nlx1MzA1NwpcdTMwNjhcdTMwNDZcdTMwODBcdTMwNERcdTMwOTkKXHUzMDY4XHUzMDRBXHUzMDQ0Clx1MzA2OFx1MzA0QVx1MzA0QgpcdTMwNjhcdTMwNEFcdTMwNEYKXHUzMDY4XHUzMDRBXHUzMDU5Clx1MzA2OFx1MzA0QVx1MzA4QgpcdTMwNjhcdTMwNEJcdTMwNDQKXHUzMDY4XHUzMDRCXHUzMDU5Clx1MzA2OFx1MzA0RFx1MzA0QVx1MzA4QQpcdTMwNjhcdTMwNERcdTMwNjhcdTMwOTlcdTMwNEQKXHUzMDY4XHUzMDRGXHUzMDQ0Clx1MzA2OFx1MzA0Rlx1MzA1N1x1MzA4NVx1MzA0NgpcdTMwNjhcdTMwNEZcdTMwNjZcdTMwOTMKXHUzMDY4XHUzMDRGXHUzMDZCClx1MzA2OFx1MzA0Rlx1MzA3OFx1MzA5OVx1MzA2NApcdTMwNjhcdTMwNTFcdTMwNDQKXHUzMDY4XHUzMDUxXHUzMDhCClx1MzA2OFx1MzA1M1x1MzA4NApcdTMwNjhcdTMwNTVcdTMwNEIKXHUzMDY4XHUzMDU3XHUzMDg3XHUzMDRCXHUzMDkzClx1MzA2OFx1MzA1RFx1MzA0NgpcdTMwNjhcdTMwNUZcdTMwOTMKXHUzMDY4XHUzMDYxXHUzMDg1XHUzMDQ2Clx1MzA2OFx1MzA2M1x1MzA0RFx1MzA4NVx1MzA0NgpcdTMwNjhcdTMwNjNcdTMwNEZcdTMwOTMKXHUzMDY4XHUzMDY0XHUzMDVCXHUzMDk5XHUzMDkzClx1MzA2OFx1MzA2NFx1MzA2Qlx1MzA4NVx1MzA0NgpcdTMwNjhcdTMwNjhcdTMwOTlcdTMwNTFcdTMwOEIKXHUzMDY4XHUzMDY4XHUzMDZFXHUzMDQ4XHUzMDhCClx1MzA2OFx1MzA2QVx1MzA0NApcdTMwNjhcdTMwNkFcdTMwNDhcdTMwOEIKXHUzMDY4XHUzMDZBXHUzMDhBClx1MzA2OFx1MzA2RVx1MzA1NVx1MzA3RQpcdTMwNjhcdTMwNkZcdTMwOTlcdTMwNTkKXHUzMDY4XHUzMDk5XHUzMDc1XHUzMDk5XHUzMDRCXHUzMDk5XHUzMDhGClx1MzA2OFx1MzA3Qlx1MzA0NgpcdTMwNjhcdTMwN0VcdTMwOEIKXHUzMDY4XHUzMDgxXHUzMDhCClx1MzA2OFx1MzA4Mlx1MzA1Rlx1MzA5OVx1MzA2MQpcdTMwNjhcdTMwODJcdTMwOEIKXHUzMDY4XHUzMDk5XHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA2OFx1MzA4OVx1MzA0OFx1MzA4QgpcdTMwNjhcdTMwOTNcdTMwNEJcdTMwNjQKXHUzMDY4XHUzMDk5XHUzMDkzXHUzMDc1XHUzMDk5XHUzMDhBClx1MzA2QVx1MzA0NFx1MzA0Qlx1MzA0RgpcdTMwNkFcdTMwNDRcdTMwNTNcdTMwNDYKXHUzMDZBXHUzMDQ0XHUzMDU3XHUzMDg3Clx1MzA2QVx1MzA0NFx1MzA1OQpcdTMwNkFcdTMwNDRcdTMwNUJcdTMwOTMKXHUzMDZBXHUzMDQ0XHUzMDVEXHUzMDQ2Clx1MzA2QVx1MzA0QVx1MzA1OQpcdTMwNkFcdTMwNEJcdTMwOTlcdTMwNDQKXHUzMDZBXHUzMDRGXHUzMDU5Clx1MzA2QVx1MzA1MVx1MzA5OVx1MzA4QgpcdTMwNkFcdTMwNTNcdTMwNDZcdTMwNjhcdTMwOTkKXHUzMDZBXHUzMDU1XHUzMDUxClx1MzA2QVx1MzA1Rlx1MzA2Nlx1MzA5OVx1MzA1M1x1MzA1MwpcdTMwNkFcdTMwNjNcdTMwNjhcdTMwNDYKXHUzMDZBXHUzMDY0XHUzMDg0XHUzMDU5XHUzMDdGClx1MzA2QVx1MzA2QVx1MzA0QVx1MzA1NwpcdTMwNkFcdTMwNkJcdTMwNTNcdTMwOTlcdTMwNjgKXHUzMDZBXHUzMDZCXHUzMDgyXHUzMDZFClx1MzA2QVx1MzA2Qlx1MzA4RgpcdTMwNkFcdTMwNkVcdTMwNEIKXHUzMDZBXHUzMDc1XHUzMDVGXHUzMDk5Clx1MzA2QVx1MzA3RVx1MzA0NFx1MzA0RApcdTMwNkFcdTMwN0VcdTMwNDgKXHUzMDZBXHUzMDdFXHUzMDdGClx1MzA2QVx1MzA3Rlx1MzA1Rlx1MzA5OQpcdTMwNkFcdTMwODFcdTMwODlcdTMwNEIKXHUzMDZBXHUzMDgxXHUzMDhCClx1MzA2QVx1MzA4NFx1MzA4MApcdTMwNkFcdTMwODlcdTMwNDYKXHUzMDZBXHUzMDg5XHUzMDcyXHUzMDk5Clx1MzA2QVx1MzA4OVx1MzA3NVx1MzA5OQpcdTMwNkFcdTMwOENcdTMwOEIKXHUzMDZBXHUzMDhGXHUzMDY4XHUzMDcyXHUzMDk5Clx1MzA2QVx1MzA4Rlx1MzA2Rlx1MzA5OVx1MzA4QQpcdTMwNkJcdTMwNDJcdTMwNDYKXHUzMDZCXHUzMDQ0XHUzMDRCXHUzMDk5XHUzMDVGClx1MzA2Qlx1MzA0Nlx1MzA1MQpcdTMwNkJcdTMwNEFcdTMwNDQKXHUzMDZCXHUzMDRCXHUzMDQ0Clx1MzA2Qlx1MzA0Qlx1MzA5OVx1MzA2NgpcdTMwNkJcdTMwNERcdTMwNzJcdTMwOTkKXHUzMDZCXHUzMDRGXHUzMDU3XHUzMDdGClx1MzA2Qlx1MzA0Rlx1MzA3RVx1MzA5MwpcdTMwNkJcdTMwNTFcdTMwOTlcdTMwOEIKXHUzMDZCXHUzMDU1XHUzMDkzXHUzMDRCXHUzMDVGXHUzMDkzXHUzMDVEClx1MzA2Qlx1MzA1N1x1MzA0RApcdTMwNkJcdTMwNUJcdTMwODJcdTMwNkUKXHUzMDZCXHUzMDYxXHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA2Qlx1MzA2MVx1MzA4OFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNkJcdTMwNjNcdTMwNEIKXHUzMDZCXHUzMDYzXHUzMDREClx1MzA2Qlx1MzA2M1x1MzA1MVx1MzA0NApcdTMwNkJcdTMwNjNcdTMwNTNcdTMwNDYKXHUzMDZCXHUzMDYzXHUzMDU1XHUzMDkzClx1MzA2Qlx1MzA2M1x1MzA1N1x1MzA4N1x1MzA0RgpcdTMwNkJcdTMwNjNcdTMwNTlcdTMwNDYKXHUzMDZCXHUzMDYzXHUzMDVCXHUzMDREClx1MzA2Qlx1MzA2M1x1MzA2Nlx1MzA0NApcdTMwNkJcdTMwNkFcdTMwNDYKXHUzMDZCXHUzMDdCXHUzMDkzClx1MzA2Qlx1MzA3RVx1MzA4MQpcdTMwNkJcdTMwODJcdTMwNjQKXHUzMDZCXHUzMDg0XHUzMDhBClx1MzA2Qlx1MzA4NVx1MzA0Nlx1MzA0NFx1MzA5MwpcdTMwNkJcdTMwOEFcdTMwOTNcdTMwNTdcdTMwODMKXHUzMDZCXHUzMDhGXHUzMDY4XHUzMDhBClx1MzA2Qlx1MzA5M1x1MzA0NApcdTMwNkJcdTMwOTNcdTMwNEIKXHUzMDZCXHUzMDkzXHUzMDREClx1MzA2Qlx1MzA5M1x1MzA1MVx1MzA5OVx1MzA5MwpcdTMwNkJcdTMwOTNcdTMwNTdcdTMwNEQKXHUzMDZCXHUzMDkzXHUzMDU5XHUzMDk5XHUzMDQ2Clx1MzA2Qlx1MzA5M1x1MzA1RFx1MzA0NgpcdTMwNkJcdTMwOTNcdTMwNUZcdTMwNDQKXHUzMDZCXHUzMDkzXHUzMDYxClx1MzA2Qlx1MzA5M1x1MzA2Nlx1MzA0NApcdTMwNkJcdTMwOTNcdTMwNkJcdTMwNEYKXHUzMDZCXHUzMDkzXHUzMDc1XHUzMDlBClx1MzA2Qlx1MzA5M1x1MzA3RVx1MzA4QQpcdTMwNkJcdTMwOTNcdTMwODAKXHUzMDZCXHUzMDkzXHUzMDgxXHUzMDQ0Clx1MzA2Qlx1MzA5M1x1MzA4OFx1MzA0NgpcdTMwNkNcdTMwNDRcdTMwNEZcdTMwNERcdTMwOTkKXHUzMDZDXHUzMDRCXHUzMDU5Clx1MzA2Q1x1MzA0Rlx1MzA5OVx1MzA0NFx1MzA2OFx1MzA4QgpcdTMwNkNcdTMwNEZcdTMwOTlcdTMwNDYKXHUzMDZDXHUzMDRGXHUzMDgyXHUzMDhBClx1MzA2Q1x1MzA1OVx1MzA4MApcdTMwNkNcdTMwN0VcdTMwNDhcdTMwNzJcdTMwOTkKXHUzMDZDXHUzMDgxXHUzMDhBClx1MzA2Q1x1MzA4OVx1MzA1OQpcdTMwNkNcdTMwOTNcdTMwNjFcdTMwODNcdTMwNEYKXHUzMDZEXHUzMDQyXHUzMDUxXHUzMDk5Clx1MzA2RFx1MzA0NFx1MzA0RApcdTMwNkRcdTMwNDRcdTMwOEIKXHUzMDZEXHUzMDQ0XHUzMDhEClx1MzA2RFx1MzA0Rlx1MzA5OVx1MzA1QgpcdTMwNkRcdTMwNEZcdTMwNUZcdTMwNDQKXHUzMDZEXHUzMDRGXHUzMDg5Clx1MzA2RFx1MzA1M1x1MzA1Qlx1MzA5OQpcdTMwNkRcdTMwNTNcdTMwODAKXHUzMDZEXHUzMDU1XHUzMDUxXHUzMDk5Clx1MzA2RFx1MzA1OVx1MzA1M1x1MzA5OVx1MzA1OQpcdTMwNkRcdTMwNURcdTMwNzhcdTMwOTlcdTMwOEIKXHUzMDZEXHUzMDVGXHUzMDk5XHUzMDkzClx1MzA2RFx1MzA2NFx1MzA0NApcdTMwNkRcdTMwNjNcdTMwNTdcdTMwOTMKXHUzMDZEXHUzMDY0XHUzMDVEXHUzMDk5XHUzMDQ2Clx1MzA2RFx1MzA2M1x1MzA1Rlx1MzA0NFx1MzA0RFx1MzA5OVx1MzA4NwpcdTMwNkRcdTMwNzVcdTMwOTlcdTMwNURcdTMwNEYKXHUzMDZEXHUzMDc1XHUzMDVGXHUzMDk5Clx1MzA2RFx1MzA3Qlx1MzA5OVx1MzA0NgpcdTMwNkRcdTMwN0JcdTMwOEFcdTMwNkZcdTMwN0JcdTMwOEEKXHUzMDZEXHUzMDdFXHUzMDREClx1MzA2RFx1MzA3RVx1MzA4Rlx1MzA1NwpcdTMwNkRcdTMwN0ZcdTMwN0YKXHUzMDZEXHUzMDgwXHUzMDQ0Clx1MzA2RFx1MzA4MFx1MzA1Rlx1MzA0NApcdTMwNkRcdTMwODJcdTMwNjgKXHUzMDZEXHUzMDg5XHUzMDQ2Clx1MzA2RFx1MzA4Rlx1MzA1NVx1MzA5OQpcdTMwNkRcdTMwOTNcdTMwNDRcdTMwOEEKXHUzMDZEXHUzMDkzXHUzMDRBXHUzMDU3Clx1MzA2RFx1MzA5M1x1MzA0Qlx1MzA5MwpcdTMwNkRcdTMwOTNcdTMwNERcdTMwOTMKXHUzMDZEXHUzMDkzXHUzMDRGXHUzMDk5Clx1MzA2RFx1MzA5M1x1MzA1NVx1MzA5OQpcdTMwNkRcdTMwOTNcdTMwNTcKXHUzMDZEXHUzMDkzXHUzMDYxXHUzMDgzXHUzMDRGClx1MzA2RFx1MzA5M1x1MzA2OFx1MzA5OQpcdTMwNkRcdTMwOTNcdTMwNzJcdTMwOUEKXHUzMDZEXHUzMDkzXHUzMDc1XHUzMDk5XHUzMDY0Clx1MzA2RFx1MzA5M1x1MzA3RVx1MzA2NApcdTMwNkRcdTMwOTNcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDZEXHUzMDkzXHUzMDhDXHUzMDQ0Clx1MzA2RVx1MzA0NFx1MzA1OVx1MzA5OQpcdTMwNkVcdTMwNEFcdTMwNjRcdTMwOTlcdTMwN0UKXHUzMDZFXHUzMDRCXHUzMDk5XHUzMDU5Clx1MzA2RVx1MzA0RFx1MzA2QVx1MzA3RgpcdTMwNkVcdTMwNTNcdTMwNERcdTMwOTlcdTMwOEEKXHUzMDZFXHUzMDUzXHUzMDU5Clx1MzA2RVx1MzA1M1x1MzA4QgpcdTMwNkVcdTMwNUJcdTMwOEIKXHUzMDZFXHUzMDVEXHUzMDk5XHUzMDRGClx1MzA2RVx1MzA1RFx1MzA5OVx1MzA4MApcdTMwNkVcdTMwNUZcdTMwN0VcdTMwNDYKXHUzMDZFXHUzMDYxXHUzMDdCXHUzMDY4XHUzMDk5Clx1MzA2RVx1MzA2M1x1MzA0RgpcdTMwNkVcdTMwNkZcdTMwOTlcdTMwNTkKXHUzMDZFXHUzMDZGXHUzMDg5Clx1MzA2RVx1MzA3OFx1MzA5OVx1MzA4QgpcdTMwNkVcdTMwN0JcdTMwOTlcdTMwOEIKXHUzMDZFXHUzMDdGXHUzMDgyXHUzMDZFClx1MzA2RVx1MzA4NFx1MzA3RQpcdTMwNkVcdTMwODlcdTMwNDRcdTMwNkMKXHUzMDZFXHUzMDg5XHUzMDZEXHUzMDUzClx1MzA2RVx1MzA4QVx1MzA4Mlx1MzA2RQpcdTMwNkVcdTMwOEFcdTMwODZcdTMwNEQKXHUzMDZFXHUzMDhDXHUzMDkzClx1MzA2RVx1MzA5M1x1MzA0RApcdTMwNkZcdTMwOTlcdTMwNDJcdTMwNDQKXHUzMDZGXHUzMDQyXHUzMDRGClx1MzA2Rlx1MzA5OVx1MzA0Mlx1MzA1NVx1MzA5MwpcdTMwNkZcdTMwOTlcdTMwNDRcdTMwNEIKXHUzMDZGXHUzMDk5XHUzMDQ0XHUzMDRGClx1MzA2Rlx1MzA0NFx1MzA1MVx1MzA5MwpcdTMwNkZcdTMwNDRcdTMwNTNcdTMwOTkKXHUzMDZGXHUzMDQ0XHUzMDU3XHUzMDkzClx1MzA2Rlx1MzA0NFx1MzA1OVx1MzA0NApcdTMwNkZcdTMwNDRcdTMwNUJcdTMwOTMKXHUzMDZGXHUzMDQ0XHUzMDVEXHUzMDQ2Clx1MzA2Rlx1MzA0NFx1MzA2MQpcdTMwNkZcdTMwOTlcdTMwNDRcdTMwNkZcdTMwOTlcdTMwNDQKXHUzMDZGXHUzMDQ0XHUzMDhDXHUzMDY0Clx1MzA2Rlx1MzA0OFx1MzA4QgpcdTMwNkZcdTMwNEFcdTMwOEIKXHUzMDZGXHUzMDRCXHUzMDQ0Clx1MzA2Rlx1MzA5OVx1MzA0Qlx1MzA4QQpcdTMwNkZcdTMwNEJcdTMwOEIKXHUzMDZGXHUzMDRGXHUzMDU3XHUzMDg1Clx1MzA2Rlx1MzA1MVx1MzA5MwpcdTMwNkZcdTMwNTNcdTMwNzVcdTMwOTkKXHUzMDZGXHUzMDU1XHUzMDdGClx1MzA2Rlx1MzA1NVx1MzA5MwpcdTMwNkZcdTMwNTdcdTMwNTNcdTMwOTkKXHUzMDZGXHUzMDk5XHUzMDU3XHUzMDg3Clx1MzA2Rlx1MzA1N1x1MzA4QgpcdTMwNkZcdTMwNUJcdTMwOEIKXHUzMDZGXHUzMDlBXHUzMDVEXHUzMDUzXHUzMDkzClx1MzA2Rlx1MzA1RFx1MzA5MwpcdTMwNkZcdTMwNUZcdTMwOTMKXHUzMDZGXHUzMDYxXHUzMDdGXHUzMDY0Clx1MzA2Rlx1MzA2NFx1MzA0QVx1MzA5MwpcdTMwNkZcdTMwNjNcdTMwNEJcdTMwNEYKXHUzMDZGXHUzMDY0XHUzMDk5XHUzMDREClx1MzA2Rlx1MzA2M1x1MzA0RFx1MzA4QQpcdTMwNkZcdTMwNjNcdTMwNEZcdTMwNjQKXHUzMDZGXHUzMDYzXHUzMDUxXHUzMDkzClx1MzA2Rlx1MzA2M1x1MzA1M1x1MzA0NgpcdTMwNkZcdTMwNjNcdTMwNTVcdTMwOTMKXHUzMDZGXHUzMDYzXHUzMDU3XHUzMDkzClx1MzA2Rlx1MzA2M1x1MzA1Rlx1MzA2NApcdTMwNkZcdTMwNjNcdTMwNjFcdTMwODVcdTMwNDYKXHUzMDZGXHUzMDYzXHUzMDY2XHUzMDkzClx1MzA2Rlx1MzA2M1x1MzA3Mlx1MzA5QVx1MzA4N1x1MzA0NgpcdTMwNkZcdTMwNjNcdTMwN0JcdTMwOUFcdTMwNDYKXHUzMDZGXHUzMDZBXHUzMDU5Clx1MzA2Rlx1MzA2QVx1MzA3Mlx1MzA5OQpcdTMwNkZcdTMwNkJcdTMwNEJcdTMwODAKXHUzMDZGXHUzMDc1XHUzMDk5XHUzMDg5XHUzMDU3Clx1MzA2Rlx1MzA3Rlx1MzA0Qlx1MzA5OVx1MzA0RApcdTMwNkZcdTMwODBcdTMwNEJcdTMwNDYKXHUzMDZGXHUzMDgxXHUzMDY0Clx1MzA2Rlx1MzA4NFx1MzA0NApcdTMwNkZcdTMwODRcdTMwNTcKXHUzMDZGXHUzMDg5XHUzMDQ2Clx1MzA2Rlx1MzA4RFx1MzA0Nlx1MzA0M1x1MzA5MwpcdTMwNkZcdTMwOEZcdTMwNDQKXHUzMDZGXHUzMDkzXHUzMDQ0Clx1MzA2Rlx1MzA5M1x1MzA0OFx1MzA0NApcdTMwNkZcdTMwOTNcdTMwNEFcdTMwOTMKXHUzMDZGXHUzMDkzXHUzMDRCXHUzMDRGClx1MzA2Rlx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0NgpcdTMwNkZcdTMwOTlcdTMwOTNcdTMwNEZcdTMwOTlcdTMwN0YKXHUzMDZGXHUzMDkzXHUzMDUzClx1MzA2Rlx1MzA5M1x1MzA1N1x1MzA4MwpcdTMwNkZcdTMwOTNcdTMwNTlcdTMwNDYKXHUzMDZGXHUzMDkzXHUzMDVGXHUzMDk5XHUzMDkzClx1MzA2Rlx1MzA5QVx1MzA5M1x1MzA2MQpcdTMwNkZcdTMwOUFcdTMwOTNcdTMwNjQKXHUzMDZGXHUzMDkzXHUzMDY2XHUzMDQ0Clx1MzA2Rlx1MzA5M1x1MzA2OFx1MzA1NwpcdTMwNkZcdTMwOTNcdTMwNkVcdTMwNDYKXHUzMDZGXHUzMDkzXHUzMDZGXHUzMDlBClx1MzA2Rlx1MzA5M1x1MzA3NVx1MzA5OVx1MzA5MwpcdTMwNkZcdTMwOTNcdTMwNzhcdTMwOUFcdTMwOTMKXHUzMDZGXHUzMDkzXHUzMDdCXHUzMDk5XHUzMDQ2XHUzMDREClx1MzA2Rlx1MzA5M1x1MzA4MVx1MzA0NApcdTMwNkZcdTMwOTNcdTMwODlcdTMwOTMKXHUzMDZGXHUzMDkzXHUzMDhEXHUzMDkzClx1MzA3Mlx1MzA0NFx1MzA0RApcdTMwNzJcdTMwNDZcdTMwOTMKXHUzMDcyXHUzMDQ4XHUzMDhCClx1MzA3Mlx1MzA0Qlx1MzA0RgpcdTMwNzJcdTMwNEJcdTMwOEEKXHUzMDcyXHUzMDRCXHUzMDhCClx1MzA3Mlx1MzA0Qlx1MzA5MwpcdTMwNzJcdTMwNEZcdTMwNDQKXHUzMDcyXHUzMDUxXHUzMDY0Clx1MzA3Mlx1MzA1M1x1MzA0Nlx1MzA0RApcdTMwNzJcdTMwNTNcdTMwNEYKXHUzMDcyXHUzMDU1XHUzMDQ0Clx1MzA3Mlx1MzA1NVx1MzA1N1x1MzA3NVx1MzA5OVx1MzA4QQpcdTMwNzJcdTMwNTVcdTMwOTMKXHUzMDcyXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDg1XHUzMDY0XHUzMDRCXHUzMDkzClx1MzA3Mlx1MzA1N1x1MzA4NwpcdTMwNzJcdTMwNURcdTMwNEIKXHUzMDcyXHUzMDVEXHUzMDgwClx1MzA3Mlx1MzA1Rlx1MzA4MFx1MzA0RApcdTMwNzJcdTMwNUZcdTMwOTlcdTMwOEEKXHUzMDcyXHUzMDVGXHUzMDhCClx1MzA3Mlx1MzA2NFx1MzA0RFx1MzA5OQpcdTMwNzJcdTMwNjNcdTMwNTNcdTMwNTcKXHUzMDcyXHUzMDYzXHUzMDU3Clx1MzA3Mlx1MzA2NFx1MzA1N1x1MzA5OVx1MzA4NVx1MzA3Mlx1MzA5MwpcdTMwNzJcdTMwNjNcdTMwNTkKXHUzMDcyXHUzMDY0XHUzMDVCXHUzMDk5XHUzMDkzClx1MzA3Mlx1MzA5QVx1MzA2M1x1MzA1Rlx1MzA4QQpcdTMwNzJcdTMwOUFcdTMwNjNcdTMwNjFcdTMwOEEKXHUzMDcyXHUzMDY0XHUzMDg4XHUzMDQ2Clx1MzA3Mlx1MzA2Nlx1MzA0NApcdTMwNzJcdTMwNjhcdTMwNTNcdTMwOTlcdTMwN0YKXHUzMDcyXHUzMDZBXHUzMDdFXHUzMDY0XHUzMDhBClx1MzA3Mlx1MzA2QVx1MzA5MwpcdTMwNzJcdTMwNkRcdTMwOEIKXHUzMDcyXHUzMDZGXHUzMDkzClx1MzA3Mlx1MzA3Mlx1MzA5OVx1MzA0RgpcdTMwNzJcdTMwNzJcdTMwODdcdTMwNDYKXHUzMDcyXHUzMDdCXHUzMDQ2Clx1MzA3Mlx1MzA3RVx1MzA4Rlx1MzA4QQpcdTMwNzJcdTMwN0VcdTMwOTMKXHUzMDcyXHUzMDdGXHUzMDY0Clx1MzA3Mlx1MzA4MVx1MzA0NApcdTMwNzJcdTMwODFcdTMwNTdcdTMwOTlcdTMwNTcKXHUzMDcyXHUzMDg0XHUzMDUxClx1MzA3Mlx1MzA4NFx1MzA1OQpcdTMwNzJcdTMwODhcdTMwNDYKXHUzMDcyXHUzMDk5XHUzMDg3XHUzMDQ2XHUzMDREClx1MzA3Mlx1MzA4OVx1MzA0Qlx1MzA5OVx1MzA2QQpcdTMwNzJcdTMwODlcdTMwNEYKXHUzMDcyXHUzMDhBXHUzMDY0Clx1MzA3Mlx1MzA4QVx1MzA4N1x1MzA0NgpcdTMwNzJcdTMwOEJcdTMwN0UKXHUzMDcyXHUzMDhCXHUzMDg0XHUzMDU5XHUzMDdGClx1MzA3Mlx1MzA4Q1x1MzA0NApcdTMwNzJcdTMwOERcdTMwNDQKXHUzMDcyXHUzMDhEXHUzMDQ2Clx1MzA3Mlx1MzA4RFx1MzA0RApcdTMwNzJcdTMwOERcdTMwODZcdTMwNEQKXHUzMDcyXHUzMDkzXHUzMDRCXHUzMDRGClx1MzA3Mlx1MzA5M1x1MzA1MVx1MzA2NApcdTMwNzJcdTMwOTNcdTMwNTNcdTMwOTMKXHUzMDcyXHUzMDkzXHUzMDU3XHUzMDg1Clx1MzA3Mlx1MzA5M1x1MzA1RFx1MzA0NgpcdTMwNzJcdTMwOUFcdTMwOTNcdTMwNjEKXHUzMDcyXHUzMDkzXHUzMDZGXHUzMDlBXHUzMDkzClx1MzA3Mlx1MzA5OVx1MzA5M1x1MzA3Qlx1MzA5OVx1MzA0NgpcdTMwNzVcdTMwNDJcdTMwOTMKXHUzMDc1XHUzMDQ0XHUzMDQ2XHUzMDYxClx1MzA3NVx1MzA0Nlx1MzA1MVx1MzA0NApcdTMwNzVcdTMwNDZcdTMwNUJcdTMwOTMKXHUzMDc1XHUzMDlBXHUzMDQ2XHUzMDVGXHUzMDhEXHUzMDQ2Clx1MzA3NVx1MzA0Nlx1MzA2OFx1MzA0NgpcdTMwNzVcdTMwNDZcdTMwNzUKXHUzMDc1XHUzMDQ4XHUzMDhCClx1MzA3NVx1MzA0QVx1MzA5MwpcdTMwNzVcdTMwNEJcdTMwNDQKXHUzMDc1XHUzMDREXHUzMDkzClx1MzA3NVx1MzA0Rlx1MzA1NVx1MzA5OVx1MzA2NApcdTMwNzVcdTMwNEZcdTMwNzVcdTMwOTlcdTMwNEZcdTMwOEQKXHUzMDc1XHUzMDUzXHUzMDQ2Clx1MzA3NVx1MzA1NVx1MzA0NApcdTMwNzVcdTMwNTdcdTMwNERcdTMwOTkKXHUzMDc1XHUzMDU3XHUzMDk5XHUzMDdGClx1MzA3NVx1MzA1OVx1MzA3RQpcdTMwNzVcdTMwNUJcdTMwNDQKXHUzMDc1XHUzMDVCXHUzMDRGXHUzMDk5Clx1MzA3NVx1MzA1RFx1MzA0RgpcdTMwNzVcdTMwOTlcdTMwNUZcdTMwNkJcdTMwNEYKXHUzMDc1XHUzMDVGXHUzMDkzClx1MzA3NVx1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNzVcdTMwNjRcdTMwNDYKXHUzMDc1XHUzMDY0XHUzMDRCClx1MzA3NVx1MzA2M1x1MzA0Qlx1MzA2NApcdTMwNzVcdTMwNjNcdTMwNEQKXHUzMDc1XHUzMDYzXHUzMDUzXHUzMDRGClx1MzA3NVx1MzA5OVx1MzA2OFx1MzA5OVx1MzA0NgpcdTMwNzVcdTMwNjhcdTMwOEIKXHUzMDc1XHUzMDY4XHUzMDkzClx1MzA3NVx1MzA2RVx1MzA0NgpcdTMwNzVcdTMwNkZcdTMwNDQKXHUzMDc1XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA3NVx1MzA3OFx1MzA5MwpcdTMwNzVcdTMwN0VcdTMwOTMKXHUzMDc1XHUzMDdGXHUzMDkzClx1MzA3NVx1MzA4MVx1MzA2NApcdTMwNzVcdTMwODFcdTMwOTMKXHUzMDc1XHUzMDg4XHUzMDQ2Clx1MzA3NVx1MzA4QVx1MzA1MwpcdTMwNzVcdTMwOEFcdTMwOEIKXHUzMDc1XHUzMDhCXHUzMDQ0Clx1MzA3NVx1MzA5M1x1MzA0NFx1MzA0RApcdTMwNzVcdTMwOTlcdTMwOTNcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDc1XHUzMDk5XHUzMDkzXHUzMDRGXHUzMDk5Clx1MzA3NVx1MzA5M1x1MzA1N1x1MzA2NApcdTMwNzVcdTMwOTlcdTMwOTNcdTMwNUJcdTMwNEQKXHUzMDc1XHUzMDkzXHUzMDVEXHUzMDQ2Clx1MzA3NVx1MzA5OVx1MzA5M1x1MzA3Qlx1MzA5QVx1MzA0NgpcdTMwNzhcdTMwNDRcdTMwNDJcdTMwOTMKXHUzMDc4XHUzMDQ0XHUzMDRBXHUzMDkzClx1MzA3OFx1MzA0NFx1MzA0Qlx1MzA5OVx1MzA0NApcdTMwNzhcdTMwNDRcdTMwNEQKXHUzMDc4XHUzMDQ0XHUzMDUxXHUzMDk5XHUzMDkzClx1MzA3OFx1MzA0NFx1MzA1M1x1MzA0NgpcdTMwNzhcdTMwNDRcdTMwNTUKXHUzMDc4XHUzMDQ0XHUzMDU3XHUzMDgzClx1MzA3OFx1MzA0NFx1MzA1Qlx1MzA2NApcdTMwNzhcdTMwNDRcdTMwNUQKXHUzMDc4XHUzMDQ0XHUzMDVGXHUzMDRGClx1MzA3OFx1MzA0NFx1MzA2Nlx1MzA5MwpcdTMwNzhcdTMwNDRcdTMwNkRcdTMwNjQKXHUzMDc4XHUzMDQ0XHUzMDhGClx1MzA3OFx1MzA0RFx1MzA0Qlx1MzA5OQpcdTMwNzhcdTMwNTNcdTMwODAKXHUzMDc4XHUzMDk5XHUzMDZCXHUzMDQ0XHUzMDhEClx1MzA3OFx1MzA5OVx1MzA2Qlx1MzA1N1x1MzA4N1x1MzA0Nlx1MzA0Qlx1MzA5OQpcdTMwNzhcdTMwODlcdTMwNTkKXHUzMDc4XHUzMDkzXHUzMDRCXHUzMDkzClx1MzA3OFx1MzA5OVx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0NgpcdTMwNzhcdTMwOTlcdTMwOTNcdTMwNTNcdTMwOTlcdTMwNTcKXHUzMDc4XHUzMDkzXHUzMDU1XHUzMDQ0Clx1MzA3OFx1MzA5M1x1MzA1Rlx1MzA0NApcdTMwNzhcdTMwOTlcdTMwOTNcdTMwOEEKXHUzMDdCXHUzMDQyXHUzMDkzClx1MzA3Qlx1MzA0NFx1MzA0RgpcdTMwN0JcdTMwOTlcdTMwNDZcdTMwNERcdTMwOTlcdTMwODcKXHUzMDdCXHUzMDQ2XHUzMDUzXHUzMDRGClx1MzA3Qlx1MzA0Nlx1MzA1RFx1MzA0NgpcdTMwN0JcdTMwNDZcdTMwN0JcdTMwNDYKXHUzMDdCXHUzMDQ2XHUzMDgyXHUzMDkzClx1MzA3Qlx1MzA0Nlx1MzA4QVx1MzA2NApcdTMwN0JcdTMwNDhcdTMwOEIKXHUzMDdCXHUzMDRBXHUzMDkzClx1MzA3Qlx1MzA0Qlx1MzA5MwpcdTMwN0JcdTMwNERcdTMwODdcdTMwNDYKXHUzMDdCXHUzMDk5XHUzMDREXHUzMDkzClx1MzA3Qlx1MzA0Rlx1MzA4RApcdTMwN0JcdTMwNTFcdTMwNjQKXHUzMDdCXHUzMDUxXHUzMDkzClx1MzA3Qlx1MzA1M1x1MzA0NgpcdTMwN0JcdTMwNTNcdTMwOEIKXHUzMDdCXHUzMDU3XHUzMDQ0Clx1MzA3Qlx1MzA1N1x1MzA2NApcdTMwN0JcdTMwNTdcdTMwODUKXHUzMDdCXHUzMDU3XHUzMDg3XHUzMDQ2Clx1MzA3Qlx1MzA1Qlx1MzA0NApcdTMwN0JcdTMwNURcdTMwNDQKXHUzMDdCXHUzMDVEXHUzMDRGClx1MzA3Qlx1MzA1Rlx1MzA2NgpcdTMwN0JcdTMwNUZcdTMwOEIKXHUzMDdCXHUzMDlBXHUzMDYxXHUzMDc1XHUzMDk5XHUzMDRGXHUzMDhEClx1MzA3Qlx1MzA2M1x1MzA0RFx1MzA4N1x1MzA0RgpcdTMwN0JcdTMwNjNcdTMwNTUKXHUzMDdCXHUzMDYzXHUzMDVGXHUzMDkzClx1MzA3Qlx1MzA2OFx1MzA5M1x1MzA2OFx1MzA5OQpcdTMwN0JcdTMwODFcdTMwOEIKXHUzMDdCXHUzMDkzXHUzMDQ0Clx1MzA3Qlx1MzA5M1x1MzA0RApcdTMwN0JcdTMwOTNcdTMwNTEKXHUzMDdCXHUzMDkzXHUzMDU3XHUzMDY0Clx1MzA3Qlx1MzA5M1x1MzA4NFx1MzA0RgpcdTMwN0VcdTMwNDRcdTMwNkJcdTMwNjEKXHUzMDdFXHUzMDRCXHUzMDQ0Clx1MzA3RVx1MzA0Qlx1MzA1Qlx1MzA4QgpcdTMwN0VcdTMwNEJcdTMwOTlcdTMwOEIKXHUzMDdFXHUzMDUxXHUzMDhCClx1MzA3RVx1MzA1M1x1MzA2OApcdTMwN0VcdTMwNTVcdTMwNjQKXHUzMDdFXHUzMDU3XHUzMDk5XHUzMDgxClx1MzA3RVx1MzA1OVx1MzA0RgpcdTMwN0VcdTMwNUJcdTMwOTlcdTMwOEIKXHUzMDdFXHUzMDY0XHUzMDhBClx1MzA3RVx1MzA2OFx1MzA4MQpcdTMwN0VcdTMwNkFcdTMwNzVcdTMwOTkKXHUzMDdFXHUzMDZDXHUzMDUxClx1MzA3RVx1MzA2RFx1MzA0RgpcdTMwN0VcdTMwN0JcdTMwNDYKXHUzMDdFXHUzMDgyXHUzMDhCClx1MzA3RVx1MzA4Nlx1MzA1MVx1MzA5OQpcdTMwN0VcdTMwODhcdTMwNDYKXHUzMDdFXHUzMDhEXHUzMDg0XHUzMDRCClx1MzA3RVx1MzA4Rlx1MzA1OQpcdTMwN0VcdTMwOEZcdTMwOEEKXHUzMDdFXHUzMDhGXHUzMDhCClx1MzA3RVx1MzA5M1x1MzA0Qlx1MzA5OQpcdTMwN0VcdTMwOTNcdTMwNERcdTMwNjQKXHUzMDdFXHUzMDkzXHUzMDVEXHUzMDk5XHUzMDRGClx1MzA3RVx1MzA5M1x1MzA2QVx1MzA0QgpcdTMwN0ZcdTMwNDRcdTMwODkKXHUzMDdGXHUzMDQ2XHUzMDYxClx1MzA3Rlx1MzA0OFx1MzA4QgpcdTMwN0ZcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDdGXHUzMDRCXHUzMDVGClx1MzA3Rlx1MzA0Qlx1MzA5MwpcdTMwN0ZcdTMwNTFcdTMwOTMKXHUzMDdGXHUzMDUzXHUzMDkzClx1MzA3Rlx1MzA1N1x1MzA5OVx1MzA0Qlx1MzA0NApcdTMwN0ZcdTMwNTlcdTMwNDQKXHUzMDdGXHUzMDU5XHUzMDQ4XHUzMDhCClx1MzA3Rlx1MzA1Qlx1MzA4QgpcdTMwN0ZcdTMwNjNcdTMwNEIKXHUzMDdGXHUzMDY0XHUzMDRCXHUzMDhCClx1MzA3Rlx1MzA2NFx1MzA1MVx1MzA4QgpcdTMwN0ZcdTMwNjZcdTMwNDQKXHUzMDdGXHUzMDY4XHUzMDgxXHUzMDhCClx1MzA3Rlx1MzA2QVx1MzA2OApcdTMwN0ZcdTMwNkFcdTMwN0ZcdTMwNEJcdTMwNTVcdTMwNDQKXHUzMDdGXHUzMDZEXHUzMDg5XHUzMDhCClx1MzA3Rlx1MzA2RVx1MzA0NgpcdTMwN0ZcdTMwNkVcdTMwNEJcdTMwOTlcdTMwNTkKXHUzMDdGXHUzMDdCXHUzMDkzClx1MzA3Rlx1MzA4Mlx1MzA2OApcdTMwN0ZcdTMwODRcdTMwNTFcdTMwOTkKXHUzMDdGXHUzMDg5XHUzMDQ0Clx1MzA3Rlx1MzA4QVx1MzA4N1x1MzA0RgpcdTMwN0ZcdTMwOEZcdTMwNEYKXHUzMDdGXHUzMDkzXHUzMDRCClx1MzA3Rlx1MzA5M1x1MzA1RFx1MzA5OVx1MzA0RgpcdTMwODBcdTMwNDRcdTMwNEIKXHUzMDgwXHUzMDQ4XHUzMDREClx1MzA4MFx1MzA0OFx1MzA5MwpcdTMwODBcdTMwNEJcdTMwNDQKXHUzMDgwXHUzMDRCXHUzMDQ2Clx1MzA4MFx1MzA0Qlx1MzA0OApcdTMwODBcdTMwNEJcdTMwNTcKXHUzMDgwXHUzMDREXHUzMDk5XHUzMDYxXHUzMDgzClx1MzA4MFx1MzA1MVx1MzA4QgpcdTMwODBcdTMwNTFcdTMwOTlcdTMwOTMKXHUzMDgwXHUzMDU1XHUzMDdCXHUzMDk5XHUzMDhCClx1MzA4MFx1MzA1N1x1MzA0Mlx1MzA2NFx1MzA0NApcdTMwODBcdTMwNTdcdTMwNkZcdTMwOTkKXHUzMDgwXHUzMDU3XHUzMDk5XHUzMDg1XHUzMDkzClx1MzA4MFx1MzA1N1x1MzA4RApcdTMwODBcdTMwNTlcdTMwNDYKXHUzMDgwXHUzMDU5XHUzMDUzClx1MzA4MFx1MzA1OVx1MzA3NVx1MzA5OQpcdTMwODBcdTMwNTlcdTMwODEKXHUzMDgwXHUzMDVCXHUzMDhCClx1MzA4MFx1MzA1Qlx1MzA5MwpcdTMwODBcdTMwNjFcdTMwODVcdTMwNDYKXHUzMDgwXHUzMDZBXHUzMDU3XHUzMDQ0Clx1MzA4MFx1MzA2RVx1MzA0NgpcdTMwODBcdTMwODRcdTMwN0YKXHUzMDgwXHUzMDg4XHUzMDQ2Clx1MzA4MFx1MzA4OVx1MzA1NVx1MzA0RApcdTMwODBcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDgwXHUzMDhEXHUzMDkzClx1MzA4MVx1MzA0NFx1MzA0Mlx1MzA5MwpcdTMwODFcdTMwNDRcdTMwNDZcdTMwOTMKXHUzMDgxXHUzMDQ0XHUzMDQ4XHUzMDkzClx1MzA4MVx1MzA0NFx1MzA0Qlx1MzA0RgpcdTMwODFcdTMwNDRcdTMwNERcdTMwODdcdTMwNEYKXHUzMDgxXHUzMDQ0XHUzMDU1XHUzMDQ0Clx1MzA4MVx1MzA0NFx1MzA1NwpcdTMwODFcdTMwNDRcdTMwNURcdTMwNDYKXHUzMDgxXHUzMDQ0XHUzMDc1XHUzMDk5XHUzMDY0Clx1MzA4MVx1MzA0NFx1MzA4Q1x1MzA0NApcdTMwODFcdTMwNDRcdTMwOEZcdTMwNEYKXHUzMDgxXHUzMDRGXHUzMDk5XHUzMDdFXHUzMDhDXHUzMDhCClx1MzA4MVx1MzA1NVx1MzA5OVx1MzA1OQpcdTMwODFcdTMwNTdcdTMwNUYKXHUzMDgxXHUzMDU5XHUzMDk5XHUzMDg5XHUzMDU3XHUzMDQ0Clx1MzA4MVx1MzA1Rlx1MzA5OVx1MzA2NApcdTMwODFcdTMwN0VcdTMwNDQKXHUzMDgxXHUzMDg0XHUzMDU5Clx1MzA4MVx1MzA5M1x1MzA0RFx1MzA4NwpcdTMwODFcdTMwOTNcdTMwNUJcdTMwNEQKXHUzMDgxXHUzMDkzXHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA4Mlx1MzA0Nlx1MzA1N1x1MzA0Mlx1MzA1MVx1MzA5OVx1MzA4QgpcdTMwODJcdTMwNDZcdTMwNjhcdTMwOTlcdTMwNDZcdTMwNTFcdTMwOTMKXHUzMDgyXHUzMDQ4XHUzMDhCClx1MzA4Mlx1MzA0Rlx1MzA1NwpcdTMwODJcdTMwNEZcdTMwNjZcdTMwNEQKXHUzMDgyXHUzMDRGXHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA4Mlx1MzA2MVx1MzA4RFx1MzA5MwpcdTMwODJcdTMwNjhcdTMwOTlcdTMwOEIKXHUzMDgyXHUzMDg5XHUzMDQ2Clx1MzA4Mlx1MzA5M1x1MzA0RgpcdTMwODJcdTMwOTNcdTMwNUZcdTMwOTlcdTMwNDQKXHUzMDg0XHUzMDRBXHUzMDg0Clx1MzA4NFx1MzA1MVx1MzA4QgpcdTMwODRcdTMwNTVcdTMwNDQKXHUzMDg0XHUzMDU1XHUzMDU3XHUzMDQ0Clx1MzA4NFx1MzA1OVx1MzA0NApcdTMwODRcdTMwNTlcdTMwNUZcdTMwOERcdTMwNDYKXHUzMDg0XHUzMDU5XHUzMDdGClx1MzA4NFx1MzA1Qlx1MzA4QgpcdTMwODRcdTMwNURcdTMwNDYKXHUzMDg0XHUzMDVGXHUzMDQ0Clx1MzA4NFx1MzA2MVx1MzA5MwpcdTMwODRcdTMwNjNcdTMwNjgKXHUzMDg0XHUzMDYzXHUzMDZGXHUzMDlBXHUzMDhBClx1MzA4NFx1MzA3NVx1MzA5OVx1MzA4QgpcdTMwODRcdTMwODFcdTMwOEIKXHUzMDg0XHUzMDg0XHUzMDUzXHUzMDU3XHUzMDQ0Clx1MzA4NFx1MzA4OFx1MzA0NApcdTMwODRcdTMwOEZcdTMwODlcdTMwNEJcdTMwNDQKXHUzMDg2XHUzMDQ2XHUzMDREClx1MzA4Nlx1MzA0Nlx1MzA3Mlx1MzA5OVx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0RgpcdTMwODZcdTMwNDZcdTMwNzhcdTMwOTkKXHUzMDg2XHUzMDQ2XHUzMDgxXHUzMDQ0Clx1MzA4Nlx1MzA1MVx1MzA2NApcdTMwODZcdTMwNTdcdTMwODVcdTMwNjQKXHUzMDg2XHUzMDVCXHUzMDkzClx1MzA4Nlx1MzA1RFx1MzA0NgpcdTMwODZcdTMwNUZcdTMwNEIKXHUzMDg2XHUzMDYxXHUzMDgzXHUzMDRGClx1MzA4Nlx1MzA2Nlx1MzA5OVx1MzA4QgpcdTMwODZcdTMwNkJcdTMwODVcdTMwNDYKXHUzMDg2XHUzMDcyXHUzMDk5XHUzMDhGClx1MzA4Nlx1MzA4OVx1MzA0NApcdTMwODZcdTMwOENcdTMwOEIKXHUzMDg4XHUzMDQ2XHUzMDQ0Clx1MzA4OFx1MzA0Nlx1MzA0QgpcdTMwODhcdTMwNDZcdTMwNERcdTMwODVcdTMwNDYKXHUzMDg4XHUzMDQ2XHUzMDU3XHUzMDk5Clx1MzA4OFx1MzA0Nlx1MzA1OQpcdTMwODhcdTMwNDZcdTMwNjFcdTMwNDhcdTMwOTMKXHUzMDg4XHUzMDRCXHUzMDVCXHUzMDk5Clx1MzA4OFx1MzA0Qlx1MzA5MwpcdTMwODhcdTMwNERcdTMwOTMKXHUzMDg4XHUzMDRGXHUzMDVCXHUzMDQ0Clx1MzA4OFx1MzA0Rlx1MzA3Qlx1MzA5OVx1MzA0NgpcdTMwODhcdTMwNTFcdTMwNDQKXHUzMDg4XHUzMDUzXHUzMDk5XHUzMDhDXHUzMDhCClx1MzA4OFx1MzA1NVx1MzA5MwpcdTMwODhcdTMwNTdcdTMwODVcdTMwNDYKXHUzMDg4XHUzMDVEXHUzMDQ2Clx1MzA4OFx1MzA1RFx1MzA0RgpcdTMwODhcdTMwNjNcdTMwNEIKXHUzMDg4XHUzMDY2XHUzMDQ0Clx1MzA4OFx1MzA2OFx1MzA5OVx1MzA0Qlx1MzA5OVx1MzA4Rlx1MzA0RgpcdTMwODhcdTMwNkRcdTMwNjQKXHUzMDg4XHUzMDg0XHUzMDRGClx1MzA4OFx1MzA4Nlx1MzA0NgpcdTMwODhcdTMwOERcdTMwNTNcdTMwNzVcdTMwOTkKXHUzMDg4XHUzMDhEXHUzMDU3XHUzMDQ0Clx1MzA4OVx1MzA0NFx1MzA0NgpcdTMwODlcdTMwNEZcdTMwNEJcdTMwOTlcdTMwNEQKXHUzMDg5XHUzMDRGXHUzMDUzXHUzMDk5Clx1MzA4OVx1MzA0Rlx1MzA1NVx1MzA2NApcdTMwODlcdTMwNEZcdTMwNUZcdTMwOTkKXHUzMDg5XHUzMDU3XHUzMDkzXHUzMDZGXHUzMDk5XHUzMDkzClx1MzA4OVx1MzA1Qlx1MzA5MwpcdTMwODlcdTMwNURcdTMwOTlcdTMwNEYKXHUzMDg5XHUzMDVGXHUzMDQ0Clx1MzA4OVx1MzA2M1x1MzA0QgpcdTMwODlcdTMwOENcdTMwNjQKXHUzMDhBXHUzMDQ4XHUzMDREClx1MzA4QVx1MzA0Qlx1MzA0NApcdTMwOEFcdTMwNERcdTMwNTVcdTMwNEYKXHUzMDhBXHUzMDREXHUzMDVCXHUzMDY0Clx1MzA4QVx1MzA0Rlx1MzA0Rlx1MzA5OVx1MzA5MwpcdTMwOEFcdTMwNEZcdTMwNjQKXHUzMDhBXHUzMDUxXHUzMDkzClx1MzA4QVx1MzA1M1x1MzA0NgpcdTMwOEFcdTMwNUJcdTMwNDQKXHUzMDhBXHUzMDVEXHUzMDQ2Clx1MzA4QVx1MzA1RFx1MzA0RgpcdTMwOEFcdTMwNjZcdTMwOTMKXHUzMDhBXHUzMDZEXHUzMDkzClx1MzA4QVx1MzA4Nlx1MzA0NgpcdTMwOEFcdTMwODVcdTMwNDZcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDhBXHUzMDg4XHUzMDQ2Clx1MzA4QVx1MzA4N1x1MzA0Nlx1MzA4QQpcdTMwOEFcdTMwODdcdTMwNEJcdTMwOTMKXHUzMDhBXHUzMDg3XHUzMDRGXHUzMDYxXHUzMDgzClx1MzA4QVx1MzA4N1x1MzA1M1x1MzA0NgpcdTMwOEFcdTMwOEFcdTMwNEYKXHUzMDhBXHUzMDhDXHUzMDREClx1MzA4QVx1MzA4RFx1MzA5MwpcdTMwOEFcdTMwOTNcdTMwNTNcdTMwOTkKXHUzMDhCXHUzMDQ0XHUzMDUxXHUzMDQ0Clx1MzA4Qlx1MzA0NFx1MzA1NVx1MzA0NApcdTMwOEJcdTMwNDRcdTMwNTdcdTMwOTkKXHUzMDhCXHUzMDQ0XHUzMDVCXHUzMDREClx1MzA4Qlx1MzA1OVx1MzA2Rlx1MzA5OVx1MzA5MwpcdTMwOEJcdTMwOEFcdTMwNEJcdTMwOTlcdTMwOEZcdTMwODkKXHUzMDhDXHUzMDQ0XHUzMDRCXHUzMDkzClx1MzA4Q1x1MzA0NFx1MzA0RFx1MzA5OQpcdTMwOENcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDhDXHUzMDQ0XHUzMDVEXHUzMDk5XHUzMDQ2XHUzMDUzClx1MzA4Q1x1MzA0NFx1MzA2OFx1MzA0NgpcdTMwOENcdTMwNDRcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDhDXHUzMDREXHUzMDU3Clx1MzA4Q1x1MzA0RFx1MzA1Rlx1MzA5OVx1MzA0NApcdTMwOENcdTMwOTNcdTMwNDJcdTMwNDQKXHUzMDhDXHUzMDkzXHUzMDUxXHUzMDQ0Clx1MzA4Q1x1MzA5M1x1MzA1M1x1MzA5MwpcdTMwOENcdTMwOTNcdTMwNTVcdTMwNDQKXHUzMDhDXHUzMDkzXHUzMDU3XHUzMDg1XHUzMDQ2Clx1MzA4Q1x1MzA5M1x1MzA1RFx1MzA5OVx1MzA0RgpcdTMwOENcdTMwOTNcdTMwODlcdTMwNEYKXHUzMDhEXHUzMDQ2XHUzMDRCClx1MzA4RFx1MzA0Nlx1MzA1M1x1MzA5OQpcdTMwOERcdTMwNDZcdTMwNTdcdTMwOTlcdTMwOTMKXHUzMDhEXHUzMDQ2XHUzMDVEXHUzMDRGClx1MzA4RFx1MzA0Rlx1MzA0Qlx1MzA5OQpcdTMwOERcdTMwNTNcdTMwNjQKXHUzMDhEXHUzMDU3XHUzMDk5XHUzMDQ2XHUzMDg5Clx1MzA4RFx1MzA1N1x1MzA4NVx1MzA2NApcdTMwOERcdTMwNUJcdTMwOTMKXHUzMDhEXHUzMDY2XHUzMDkzClx1MzA4RFx1MzA4MVx1MzA5MwpcdTMwOERcdTMwOENcdTMwNjQKXHUzMDhEXHUzMDkzXHUzMDREXHUzMDk5Clx1MzA4RFx1MzA5M1x1MzA2Rlx1MzA5QQpcdTMwOERcdTMwOTNcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDhEXHUzMDkzXHUzMDhBClx1MzA4Rlx1MzA0Qlx1MzA1OQpcdTMwOEZcdTMwNEJcdTMwODEKXHUzMDhGXHUzMDRCXHUzMDg0XHUzMDdFClx1MzA4Rlx1MzA0Qlx1MzA4Q1x1MzA4QgpcdTMwOEZcdTMwNTdcdTMwNjQKXHUzMDhGXHUzMDU3XHUzMDk5XHUzMDdFXHUzMDU3Clx1MzA4Rlx1MzA1OVx1MzA4Q1x1MzA4Mlx1MzA2RQpcdTMwOEZcdTMwODlcdTMwNDYKXHUzMDhGXHUzMDhDXHUzMDhCYC5zcGxpdCgiXG4iKTsKCiAgLy8gbm9kZV9tb2R1bGVzL0BzY3VyZS9iaXAzOS9lc20vd29yZGxpc3RzL2tvcmVhbi5qcwogIHZhciB3b3JkbGlzdDYgPSBgXHUxMTAwXHUxMTYxXHUxMTAwXHUxMTY3XHUxMUE4Clx1MTEwMFx1MTE2MVx1MTEwMVx1MTE3M1x1MTFCNwpcdTExMDBcdTExNjFcdTExMDJcdTExNjFcdTExQUIKXHUxMTAwXHUxMTYxXHUxMTAyXHUxMTczXHUxMUJDClx1MTEwMFx1MTE2MVx1MTEwM1x1MTE3M1x1MTFBOApcdTExMDBcdTExNjFcdTExMDVcdTExNzNcdTExMEVcdTExNzVcdTExQjcKXHUxMTAwXHUxMTYxXHUxMTA2XHUxMTZFXHUxMUI3Clx1MTEwMFx1MTE2MVx1MTEwN1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNjFcdTExMDlcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMTA5XHUxMTczXHUxMUI3Clx1MTEwMFx1MTE2MVx1MTEwQlx1MTE2RVx1MTFBQlx1MTEwM1x1MTE2NgpcdTExMDBcdTExNjFcdTExMEJcdTExNzNcdTExQUYKXHUxMTAwXHUxMTYxXHUxMTBCXHUxMTc1XHUxMTAzXHUxMTczClx1MTEwMFx1MTE2MVx1MTEwQlx1MTE3NVx1MTFCOApcdTExMDBcdTExNjFcdTExMENcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwMFx1MTE2MVx1MTEwQ1x1MTE2OVx1MTFBOApcdTExMDBcdTExNjFcdTExMENcdTExNkVcdTExQTgKXHUxMTAwXHUxMTYxXHUxMUE4XHUxMTBCXHUxMTY5Clx1MTEwMFx1MTE2MVx1MTFBOFx1MTEwQ1x1MTE2MQpcdTExMDBcdTExNjFcdTExQUJcdTExMDBcdTExNjdcdTExQTgKXHUxMTAwXHUxMTYxXHUxMUFCXHUxMTA3XHUxMTZFClx1MTEwMFx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2NVx1MTFCOApcdTExMDBcdTExNjFcdTExQUJcdTExMENcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUI4Clx1MTEwMFx1MTE2MVx1MTFBQlx1MTExMVx1MTE2MVx1MTFBQgpcdTExMDBcdTExNjFcdTExQUZcdTExMDNcdTExNzNcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUFGXHUxMTA3XHUxMTc1Clx1MTEwMFx1MTE2MVx1MTFBRlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDBcdTExNjFcdTExQUZcdTExMENcdTExNzNcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUI3XHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwMFx1MTE2MVx1MTFCN1x1MTEwMFx1MTE3NQpcdTExMDBcdTExNjFcdTExQjdcdTExMDlcdTExNjkKXHUxMTAwXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTZFXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwMFx1MTE2MVx1MTFCN1x1MTEwQ1x1MTE2MQpcdTExMDBcdTExNjFcdTExQjdcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUI4XHUxMTBDXHUxMTYxXHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwMlx1MTE2MVx1MTFCNwpcdTExMDBcdTExNjFcdTExQkNcdTExMDNcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTAzXHUxMTY5Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwNVx1MTE2N1x1MTFBOFx1MTExMlx1MTE3NQpcdTExMDBcdTExNjFcdTExQkNcdTExMDdcdTExNjdcdTExQUIKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTA3XHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMDBcdTExNjFcdTExQkNcdTExMDlcdTExNkVcdTExMDVcdTExNjNcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTBCXHUxMTYxXHUxMTBDXHUxMTc1Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2Rlx1MTFBQlx1MTEwM1x1MTE2OQpcdTExMDBcdTExNjFcdTExQkNcdTExMEJcdTExNzQKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY2Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE2OQpcdTExMDBcdTExNjFcdTExQzBcdTExMEJcdTExNzUKXHUxMTAwXHUxMTYyXHUxMTAwXHUxMTZFXHUxMTA1XHUxMTc1Clx1MTEwMFx1MTE2Mlx1MTEwMlx1MTE2MVx1MTEwNVx1MTE3NQpcdTExMDBcdTExNjJcdTExMDdcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYyXHUxMTA3XHUxMTY3XHUxMUFGClx1MTEwMFx1MTE2Mlx1MTEwOVx1MTE2NVx1MTFBQgpcdTExMDBcdTExNjJcdTExMDlcdTExNjVcdTExQkMKXHUxMTAwXHUxMTYyXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwMFx1MTE2Mlx1MTFBOFx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDBcdTExNjVcdTExMDlcdTExNzVcdTExQUYKXHUxMTAwXHUxMTY1XHUxMTBCXHUxMTYyXHUxMUE4Clx1MTEwMFx1MTE2NVx1MTEwQlx1MTE2RVx1MTFBRgpcdTExMDBcdTExNjVcdTExMENcdTExNzVcdTExQkEKXHUxMTAwXHUxMTY1XHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwMFx1MTE2NVx1MTFBOFx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMDBcdTExNjVcdTExQUJcdTExMDBcdTExNjFcdTExQkMKXHUxMTAwXHUxMTY1XHUxMUFCXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwMFx1MTE2NVx1MTFBQlx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMDBcdTExNjVcdTExQUJcdTExMENcdTExNjkKXHUxMTAwXHUxMTY1XHUxMUFCXHUxMTBFXHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE2NVx1MTFBRlx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDBcdTExNjVcdTExQjdcdTExMDlcdTExNjEKXHUxMTAwXHUxMTY1XHUxMUI3XHUxMTEwXHUxMTY5Clx1MTEwMFx1MTE2Nlx1MTEwOVx1MTE3NVx1MTExMVx1MTE2MVx1MTFBQgpcdTExMDBcdTExNjZcdTExMEJcdTExNzVcdTExQjcKXHUxMTAwXHUxMTY3XHUxMTBCXHUxMTZFXHUxMUFGClx1MTEwMFx1MTE2N1x1MTFBQlx1MTExMlx1MTE2MgpcdTExMDBcdTExNjdcdTExQUZcdTExMDBcdTExNkEKXHUxMTAwXHUxMTY3XHUxMUFGXHUxMTAwXHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE2N1x1MTFBRlx1MTEwNVx1MTE2OVx1MTFBQgpcdTExMDBcdTExNjdcdTExQUZcdTExMDlcdTExNjVcdTExQTgKXHUxMTAwXHUxMTY3XHUxMUFGXHUxMTA5XHUxMTczXHUxMUJDClx1MTEwMFx1MTE2N1x1MTFBRlx1MTEwOVx1MTE3NVx1MTFCNwpcdTExMDBcdTExNjdcdTExQUZcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTY3XHUxMUFGXHUxMTEyXHUxMTY5XHUxMUFCClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwMFx1MTE2OApcdTExMDBcdTExNjdcdTExQkNcdTExMDBcdTExNjkKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwNVx1MTE2N1x1MTFBOApcdTExMDBcdTExNjdcdTExQkNcdTExMDdcdTExNjlcdTExQThcdTExMDBcdTExNkVcdTExQkMKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTA3XHUxMTc1Clx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwM1x1MTE2OQpcdTExMDBcdTExNjdcdTExQkNcdTExMEJcdTExNjdcdTExQkMKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTBCXHUxMTZFClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwQ1x1MTE2Mlx1MTFCQwpcdTExMDBcdTExNjdcdTExQkNcdTExMENcdTExNjYKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTBDXHUxMTZFClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwRVx1MTE2MVx1MTFBRgpcdTExMDBcdTExNjdcdTExQkNcdTExMEVcdTExNzUKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTYzXHUxMUJDClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTExMlx1MTE2NVx1MTFCNwpcdTExMDBcdTExNjhcdTExMDBcdTExNjlcdTExQTgKXHUxMTAwXHUxMTY4XHUxMTAzXHUxMTYxXHUxMUFCClx1MTEwMFx1MTE2OFx1MTEwNVx1MTE2MVx1MTFBQgpcdTExMDBcdTExNjhcdTExMDlcdTExNjFcdTExQUIKXHUxMTAwXHUxMTY4XHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwMFx1MTE2OFx1MTEwQlx1MTE2M1x1MTFBOApcdTExMDBcdTExNjhcdTExMENcdTExNjVcdTExQUYKXHUxMTAwXHUxMTY4XHUxMTBFXHUxMTczXHUxMUJDClx1MTEwMFx1MTE2OFx1MTExMlx1MTE2Q1x1MTFBOApcdTExMDBcdTExNjlcdTExMDBcdTExNjJcdTExQTgKXHUxMTAwXHUxMTY5XHUxMTAwXHUxMTZFXHUxMTA1XHUxMTY3Clx1MTEwMFx1MTE2OVx1MTEwMFx1MTE2RVx1MTFCQwpcdTExMDBcdTExNjlcdTExMDBcdTExNzNcdTExQjgKXHUxMTAwXHUxMTY5XHUxMTAzXHUxMTczXHUxMUJDXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwMFx1MTE2OVx1MTEwNlx1MTE2RVx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMDBcdTExNjlcdTExMDZcdTExNzVcdTExQUIKXHUxMTAwXHUxMTY5XHUxMTBCXHUxMTYzXHUxMUJDXHUxMTBCXHUxMTc1Clx1MTEwMFx1MTE2OVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNjlcdTExMENcdTExNjVcdTExQUIKXHUxMTAwXHUxMTY5XHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwMFx1MTE2OVx1MTEwRVx1MTE2RVx1MTFCQVx1MTEwMFx1MTE2MVx1MTEwNVx1MTE2RQpcdTExMDBcdTExNjlcdTExMTBcdTExNjlcdTExQkMKXHUxMTAwXHUxMTY5XHUxMTEyXHUxMTYzXHUxMUJDClx1MTEwMFx1MTE2OVx1MTFBOFx1MTEwOVx1MTE3NVx1MTFBOApcdTExMDBcdTExNjlcdTExQUZcdTExMDZcdTExNjlcdTExQTgKXHUxMTAwXHUxMTY5XHUxMUFGXHUxMTBEXHUxMTYxXHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2OVx1MTFBRlx1MTExMVx1MTE3MwpcdTExMDBcdTExNjlcdTExQkNcdTExMDBcdTExNjFcdTExQUIKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTAwXHUxMTYyClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwMFx1MTE2N1x1MTFBOApcdTExMDBcdTExNjlcdTExQkNcdTExMDBcdTExNkVcdTExQUIKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTAwXHUxMTczXHUxMUI4Clx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwMFx1MTE3NQpcdTExMDBcdTExNjlcdTExQkNcdTExMDNcdTExNjlcdTExQkMKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTA2XHUxMTZFXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwN1x1MTE2RQpcdTExMDBcdTExNjlcdTExQkNcdTExMDlcdTExNjEKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwQlx1MTE2NVx1MTFCOApcdTExMDBcdTExNjlcdTExQkNcdTExMEJcdTExNjdcdTExQUIKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNjlcdTExQkNcdTExMERcdTExNjEKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTBFXHUxMTYyXHUxMUE4Clx1MTEwMFx1MTE2OVx1MTFCQ1x1MTExMFx1MTE2OVx1MTFCQwpcdTExMDBcdTExNjlcdTExQkNcdTExMTFcdTExNjkKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTEyXHUxMTYxXHUxMUJDClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTExMlx1MTE3Mlx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMDBcdTExNkFcdTExMDZcdTExNjlcdTExQTgKXHUxMTAwXHUxMTZBXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwMFx1MTE2QVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNkFcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTZBXHUxMTEyXHUxMTYxXHUxMUE4Clx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwMFx1MTE2Mlx1MTFBOApcdTExMDBcdTExNkFcdTExQUJcdTExMDBcdTExNjgKXHUxMTAwXHUxMTZBXHUxMUFCXHUxMTAwXHUxMTZBXHUxMUJDClx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwMlx1MTE2N1x1MTFCNwpcdTExMDBcdTExNkFcdTExQUJcdTExMDVcdTExNjFcdTExQjcKXHUxMTAwXHUxMTZBXHUxMUFCXHUxMTA1XHUxMTY3XHUxMUFCClx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwNVx1MTE3NQpcdTExMDBcdTExNkFcdTExQUJcdTExMDlcdTExNzNcdTExQjgKXHUxMTAwXHUxMTZBXHUxMUFCXHUxMTA5XHUxMTc1XHUxMUI3Clx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDBcdTExNkFcdTExQUJcdTExMEVcdTExNjFcdTExQUYKXHUxMTAwXHUxMTZBXHUxMUJDXHUxMTAwXHUxMTY3XHUxMUJDClx1MTEwMFx1MTE2QVx1MTFCQ1x1MTEwMFx1MTE2OQpcdTExMDBcdTExNkFcdTExQkNcdTExMENcdTExNjFcdTExQkMKXHUxMTAwXHUxMTZBXHUxMUJDXHUxMTBDXHUxMTZFClx1MTEwMFx1MTE2Q1x1MTEwNVx1MTE2OVx1MTEwQlx1MTE2RVx1MTFCNwpcdTExMDBcdTExNkNcdTExQkNcdTExMENcdTExNjFcdTExQkNcdTExMTJcdTExNzUKXHUxMTAwXHUxMTZEXHUxMTAwXHUxMTZBXHUxMTA5XHUxMTY1Clx1MTEwMFx1MTE2RFx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMDBcdTExNkRcdTExMDdcdTExNjlcdTExQTgKXHUxMTAwXHUxMTZEXHUxMTA5XHUxMTc1XHUxMUFGClx1MTEwMFx1MTE2RFx1MTEwQlx1MTE2M1x1MTFCQwpcdTExMDBcdTExNkRcdTExMEJcdTExNzJcdTExQTgKXHUxMTAwXHUxMTZEXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwMFx1MTE2RFx1MTEwQ1x1MTE3NVx1MTFBOApcdTExMDBcdTExNkRcdTExMTBcdTExNjlcdTExQkMKXHUxMTAwXHUxMTZEXHUxMTEyXHUxMTZBXHUxMUFCClx1MTEwMFx1MTE2RFx1MTExMlx1MTE2RVx1MTFBQgpcdTExMDBcdTExNkVcdTExMDBcdTExNjdcdTExQkMKXHUxMTAwXHUxMTZFXHUxMTA1XHUxMTczXHUxMUI3Clx1MTEwMFx1MTE2RVx1MTEwNlx1MTE2NVx1MTFCQwpcdTExMDBcdTExNkVcdTExMDdcdTExNjdcdTExQUYKXHUxMTAwXHUxMTZFXHUxMTA3XHUxMTZFXHUxMUFCClx1MTEwMFx1MTE2RVx1MTEwOVx1MTE2NVx1MTFBOApcdTExMDBcdTExNkVcdTExMDlcdTExNjVcdTExQkMKXHUxMTAwXHUxMTZFXHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwMFx1MTE2RVx1MTEwQlx1MTE2N1x1MTFBOApcdTExMDBcdTExNkVcdTExMEJcdTExNzVcdTExQjgKXHUxMTAwXHUxMTZFXHUxMTBFXHUxMTY1XHUxMUJDClx1MTEwMFx1MTE2RVx1MTEwRVx1MTE2Nlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDBcdTExNkVcdTExQThcdTExMDBcdTExNjEKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2RVx1MTFBOFx1MTEwMlx1MTE2MgpcdTExMDBcdTExNkVcdTExQThcdTExMDVcdTExNzVcdTExQjgKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwMFx1MTE2RVx1MTFBOFx1MTEwNlx1MTE3NVx1MTFBQgpcdTExMDBcdTExNkVcdTExQThcdTExMDlcdTExNkUKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTBCXHUxMTY1Clx1MTEwMFx1MTE2RVx1MTFBOFx1MTEwQlx1MTE2QVx1MTFCQwpcdTExMDBcdTExNkVcdTExQThcdTExMENcdTExNjVcdTExQTgKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTBDXHUxMTY2Clx1MTEwMFx1MTE2RVx1MTFBOFx1MTExMlx1MTE2QwpcdTExMDBcdTExNkVcdTExQUJcdTExMDNcdTExNjIKXHUxMTAwXHUxMTZFXHUxMUFCXHUxMTA5XHUxMTYxClx1MTEwMFx1MTE2RVx1MTFBQlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDBcdTExNkVcdTExQkNcdTExMDBcdTExNzNcdTExQThcdTExMENcdTExNjVcdTExQTgKXHUxMTAwXHUxMTZGXHUxMUFCXHUxMTA1XHUxMTc1Clx1MTEwMFx1MTE2Rlx1MTFBQlx1MTEwQlx1MTE3MQpcdTExMDBcdTExNkZcdTExQUJcdTExMTBcdTExNkUKXHUxMTAwXHUxMTcxXHUxMTAwXHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE3MVx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMDBcdTExNzJcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTcyXHUxMTBFXHUxMTc1XHUxMUE4Clx1MTEwMFx1MTE3Mlx1MTFBQlx1MTExMlx1MTE2N1x1MTFCQwpcdTExMDBcdTExNzNcdTExMDJcdTExNjFcdTExQUYKXHUxMTAwXHUxMTczXHUxMTAyXHUxMTYzXHUxMUJDClx1MTEwMFx1MTE3M1x1MTEwMlx1MTE3M1x1MTFBRgpcdTExMDBcdTExNzNcdTExMDVcdTExNjVcdTExMDJcdTExNjEKXHUxMTAwXHUxMTczXHUxMTA1XHUxMTZFXHUxMUI4Clx1MTEwMFx1MTE3M1x1MTEwNVx1MTE3M1x1MTFCQQpcdTExMDBcdTExNzNcdTExMDVcdTExNzVcdTExQjcKXHUxMTAwXHUxMTczXHUxMTBDXHUxMTY2XHUxMTA5XHUxMTY1XHUxMTBCXHUxMTYzClx1MTEwMFx1MTE3M1x1MTExMFx1MTE2OVx1MTEwNVx1MTE2OVx1MTFBOApcdTExMDBcdTExNzNcdTExQThcdTExMDdcdTExNjlcdTExQTgKXHUxMTAwXHUxMTczXHUxMUE4XHUxMTEyXHUxMTc1Clx1MTEwMFx1MTE3M1x1MTFBQlx1MTEwMFx1MTE2NQpcdTExMDBcdTExNzNcdTExQUJcdTExMDBcdTExNkQKXHUxMTAwXHUxMTczXHUxMUFCXHUxMTA1XHUxMTYyClx1MTEwMFx1MTE3M1x1MTFBQlx1MTEwNVx1MTE2OQpcdTExMDBcdTExNzNcdTExQUJcdTExMDZcdTExNkUKXHUxMTAwXHUxMTczXHUxMUFCXHUxMTA3XHUxMTY5XHUxMUFCClx1MTEwMFx1MTE3M1x1MTFBQlx1MTEwQlx1MTE2Rlx1MTFBQgpcdTExMDBcdTExNzNcdTExQUJcdTExMEJcdTExNzJcdTExQTgKXHUxMTAwXHUxMTczXHUxMUFCXHUxMTBFXHUxMTY1Clx1MTEwMFx1MTE3M1x1MTFBRlx1MTEwQVx1MTE3NQpcdTExMDBcdTExNzNcdTExQUZcdTExMENcdTExNjEKXHUxMTAwXHUxMTczXHUxMUI3XHUxMTAwXHUxMTYxXHUxMUJDXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwMFx1MTE2OQpcdTExMDBcdTExNzNcdTExQjdcdTExMDJcdTExNjdcdTExQUIKXHUxMTAwXHUxMTczXHUxMUI3XHUxMTA2XHUxMTY2XHUxMTAzXHUxMTYxXHUxMUFGClx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwQlx1MTE2Mlx1MTFBOApcdTExMDBcdTExNzNcdTExQjdcdTExMEJcdTExNjdcdTExQUIKXHUxMTAwXHUxMTczXHUxMUI3XHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwQ1x1MTE3NQpcdTExMDBcdTExNzNcdTExQkNcdTExMENcdTExNjVcdTExQkNcdTExMENcdTExNjVcdTExQTgKXHUxMTAwXHUxMTc1XHUxMTAwXHUxMTYxXHUxMUFCClx1MTEwMFx1MTE3NVx1MTEwMFx1MTE2QVx1MTFBQgpcdTExMDBcdTExNzVcdTExMDJcdTExNjdcdTExQjcKXHUxMTAwXHUxMTc1XHUxMTAyXHUxMTczXHUxMUJDClx1MTEwMFx1MTE3NVx1MTEwM1x1MTE2OVx1MTFBOFx1MTEwMFx1MTE2RApcdTExMDBcdTExNzVcdTExMDNcdTExNkVcdTExQkMKXHUxMTAwXHUxMTc1XHUxMTA1XHUxMTY5XHUxMUE4Clx1MTEwMFx1MTE3NVx1MTEwNVx1MTE3M1x1MTFCNwpcdTExMDBcdTExNzVcdTExMDdcdTExNjVcdTExQjgKXHUxMTAwXHUxMTc1XHUxMTA3XHUxMTY5XHUxMUFCClx1MTEwMFx1MTE3NVx1MTEwN1x1MTE2RVx1MTFBQgpcdTExMDBcdTExNzVcdTExMDhcdTExNzNcdTExQjcKXHUxMTAwXHUxMTc1XHUxMTA5XHUxMTZFXHUxMUE4XHUxMTA5XHUxMTYxClx1MTEwMFx1MTE3NVx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMDBcdTExNzVcdTExMEJcdTExNjVcdTExQTgKXHUxMTAwXHUxMTc1XHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwMFx1MTE3NVx1MTEwQlx1MTE2OVx1MTFBQgpcdTExMDBcdTExNzVcdTExMEJcdTExNkVcdTExQUIKXHUxMTAwXHUxMTc1XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwMFx1MTE3NVx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDBcdTExNzVcdTExMENcdTExNkVcdTExQUIKXHUxMTAwXHUxMTc1XHUxMTBFXHUxMTc1XHUxMUI3Clx1MTEwMFx1MTE3NVx1MTExMlx1MTE2OVx1MTFBQgpcdTExMDBcdTExNzVcdTExMTJcdTExNkNcdTExQTgKXHUxMTAwXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTczXHUxMUI4Clx1MTEwMFx1MTE3NVx1MTFBQlx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNzVcdTExQUZcdTExMEJcdTExNzUKXHUxMTAwXHUxMTc1XHUxMUI3XHUxMTA3XHUxMTYxXHUxMUI4Clx1MTEwMFx1MTE3NVx1MTFCN1x1MTEwRVx1MTE3NQpcdTExMDBcdTExNzVcdTExQjdcdTExMTFcdTExNjlcdTExMDBcdTExNjlcdTExQkNcdTExMTJcdTExNjFcdTExQkMKXHUxMTAxXHUxMTYxXHUxMUE4XHUxMTAzXHUxMTZFXHUxMTAwXHUxMTc1Clx1MTEwMVx1MTE2MVx1MTFCN1x1MTEwOFx1MTE2MVx1MTFBOApcdTExMDFcdTExNjJcdTExMDNcdTExNjFcdTExQUZcdTExMEJcdTExNzNcdTExQjcKXHUxMTAxXHUxMTYyXHUxMTA5XHUxMTY5XHUxMTAwXHUxMTczXHUxMUI3Clx1MTEwMVx1MTE2NVx1MTFCOFx1MTEwQ1x1MTE3NVx1MTFBRgpcdTExMDFcdTExNjlcdTExQThcdTExMDNcdTExNjJcdTExMDBcdTExNzUKXHUxMTAxXHUxMTY5XHUxMUJFXHUxMTBCXHUxMTc1XHUxMUMxClx1MTEwMlx1MTE2MVx1MTEwM1x1MTE3M1x1MTFBRlx1MTEwQlx1MTE3NQpcdTExMDJcdTExNjFcdTExMDVcdTExNjFcdTExQUJcdTExMTJcdTExNzUKXHUxMTAyXHUxMTYxXHUxMTA2XHUxMTY1XHUxMTBDXHUxMTc1Clx1MTEwMlx1MTE2MVx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDJcdTExNjFcdTExMEVcdTExNzVcdTExQjdcdTExMDdcdTExNjFcdTExQUIKXHUxMTAyXHUxMTYxXHUxMTEyXHUxMTczXHUxMUFGClx1MTEwMlx1MTE2MVx1MTFBOFx1MTEwQlx1MTE2N1x1MTFCOApcdTExMDJcdTExNjFcdTExQUJcdTExMDdcdTExNjFcdTExQkMKXHUxMTAyXHUxMTYxXHUxMUFGXHUxMTAwXHUxMTYyClx1MTEwMlx1MTE2MVx1MTFBRlx1MTEwQVx1MTE3NQpcdTExMDJcdTExNjFcdTExQUZcdTExMERcdTExNjEKXHUxMTAyXHUxMTYxXHUxMUI3XHUxMTAyXHUxMTY3Clx1MTEwMlx1MTE2MVx1MTFCN1x1MTEwM1x1MTE2Mlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMDJcdTExNjFcdTExQjdcdTExMDZcdTExNjIKXHUxMTAyXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwMlx1MTE2MVx1MTFCN1x1MTEwQ1x1MTE2MQpcdTExMDJcdTExNjFcdTExQjdcdTExMTFcdTExNjdcdTExQUIKXHUxMTAyXHUxMTYxXHUxMUI3XHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwMlx1MTE2MVx1MTFCQ1x1MTEwN1x1MTE3NQpcdTExMDJcdTExNjFcdTExQzBcdTExMDZcdTExNjFcdTExQUYKXHUxMTAyXHUxMTYyXHUxMTAyXHUxMTY3XHUxMUFCClx1MTEwMlx1MTE2Mlx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDJcdTExNjJcdTExMEJcdTExNzVcdTExQUYKXHUxMTAyXHUxMTYyXHUxMUI3XHUxMTA3XHUxMTc1Clx1MTEwMlx1MTE2Mlx1MTFCN1x1MTEwOVx1MTE2MgpcdTExMDJcdTExNjJcdTExQkFcdTExMDZcdTExNkVcdTExQUYKXHUxMTAyXHUxMTYyXHUxMUJDXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwMlx1MTE2Mlx1MTFCQ1x1MTEwNlx1MTE2N1x1MTFBQgpcdTExMDJcdTExNjJcdTExQkNcdTExMDdcdTExNjFcdTExQkMKXHUxMTAyXHUxMTYyXHUxMUJDXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTY5Clx1MTEwMlx1MTE2Nlx1MTFBOFx1MTExMFx1MTE2MVx1MTEwQlx1MTE3NQpcdTExMDJcdTExNjZcdTExQkFcdTExMERcdTExNjIKXHUxMTAyXHUxMTY5XHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwMlx1MTE2OVx1MTEwNVx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDJcdTExNjlcdTExMDVcdTExNjdcdTExQTgKXHUxMTAyXHUxMTY5XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwMlx1MTE2OVx1MTFBOFx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDJcdTExNjlcdTExQThcdTExMEVcdTExNjEKXHUxMTAyXHUxMTY5XHUxMUE4XHUxMTEyXHUxMTZBClx1MTEwMlx1MTE2OVx1MTFBQlx1MTEwNVx1MTE3NQpcdTExMDJcdTExNjlcdTExQUJcdTExMDZcdTExNkVcdTExQUIKXHUxMTAyXHUxMTY5XHUxMUFCXHUxMTBDXHUxMTYyXHUxMUJDClx1MTEwMlx1MTE2OVx1MTFBRlx1MTEwQlx1MTE3NQpcdTExMDJcdTExNjlcdTExQkNcdTExMDBcdTExNkUKXHUxMTAyXHUxMTY5XHUxMUJDXHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwMlx1MTE2OVx1MTFCQ1x1MTEwNlx1MTE3NVx1MTFBQgpcdTExMDJcdTExNjlcdTExQkNcdTExMDdcdTExNkUKXHUxMTAyXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwMlx1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDJcdTExNjlcdTExQkNcdTExMEVcdTExNjlcdTExQUIKXHUxMTAyXHUxMTY5XHUxMUMxXHUxMTBCXHUxMTc1Clx1MTEwMlx1MTE2RVx1MTFBQlx1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MQpcdTExMDJcdTExNkVcdTExQUJcdTExMDZcdTExNkVcdTExQUYKXHUxMTAyXHUxMTZFXHUxMUFCXHUxMTBBXHUxMTY1XHUxMUI4Clx1MTEwMlx1MTE3Mlx1MTEwQlx1MTE2RFx1MTFBOApcdTExMDJcdTExNzNcdTExMDFcdTExNzVcdTExQjcKXHUxMTAyXHUxMTczXHUxMUE4XHUxMTAzXHUxMTYyClx1MTEwMlx1MTE3M1x1MTFCQ1x1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDJcdTExNzNcdTExQkNcdTExMDVcdTExNjdcdTExQTgKXHUxMTAzXHUxMTYxXHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwM1x1MTE2MVx1MTEwQlx1MTE2M1x1MTFCQ1x1MTEwOVx1MTE2NVx1MTFCQwpcdTExMDNcdTExNjFcdTExMEJcdTExNzNcdTExQjcKXHUxMTAzXHUxMTYxXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTY1XHUxMTEwXHUxMTczClx1MTEwM1x1MTE2MVx1MTExMlx1MTE2Mlx1MTFCQwpcdTExMDNcdTExNjFcdTExQUJcdTExMDBcdTExNjgKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTAwXHUxMTY5XHUxMUFGClx1MTEwM1x1MTE2MVx1MTFBQlx1MTEwM1x1MTE2OVx1MTFBOApcdTExMDNcdTExNjFcdTExQUJcdTExMDZcdTExNjFcdTExQkEKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTA5XHUxMTZFXHUxMUFCClx1MTEwM1x1MTE2MVx1MTFBQlx1MTEwQlx1MTE2NQpcdTExMDNcdTExNjFcdTExQUJcdTExMEJcdTExNzEKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwM1x1MTE2MVx1MTFBQlx1MTEwRVx1MTE2NgpcdTExMDNcdTExNjFcdTExQUJcdTExMEVcdTExNkUKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTExXHUxMTY3XHUxMUFCClx1MTEwM1x1MTE2MVx1MTFBQlx1MTExMVx1MTE2RVx1MTFCQwpcdTExMDNcdTExNjFcdTExQUZcdTExMDBcdTExNjNcdTExQUYKXHUxMTAzXHUxMTYxXHUxMUFGXHUxMTA1XHUxMTY1Clx1MTEwM1x1MTE2MVx1MTFBRlx1MTEwNVx1MTE2N1x1MTFBOApcdTExMDNcdTExNjFcdTExQUZcdTExMDVcdTExNzUKXHUxMTAzXHUxMTYxXHUxMUIwXHUxMTAwXHUxMTY5XHUxMTAwXHUxMTc1Clx1MTEwM1x1MTE2MVx1MTFCN1x1MTEwM1x1MTE2MVx1MTFCQwpcdTExMDNcdTExNjFcdTExQjdcdTExMDdcdTExNjIKXHUxMTAzXHUxMTYxXHUxMUI3XHUxMTBCXHUxMTZEClx1MTEwM1x1MTE2MVx1MTFCN1x1MTEwQlx1MTE3NVx1MTFCNwpcdTExMDNcdTExNjFcdTExQjhcdTExMDdcdTExNjdcdTExQUIKXHUxMTAzXHUxMTYxXHUxMUI4XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwM1x1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3M1x1MTFBQgpcdTExMDNcdTExNjFcdTExQkNcdTExMDdcdTExNkVcdTExQUJcdTExMDBcdTExNjFcdTExQUIKXHUxMTAzXHUxMTYxXHUxMUJDXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwM1x1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDNcdTExNjJcdTExMDBcdTExNzJcdTExMDZcdTExNjkKXHUxMTAzXHUxMTYyXHUxMTAyXHUxMTYxXHUxMUJEClx1MTEwM1x1MTE2Mlx1MTEwM1x1MTE2MVx1MTFBQlx1MTExMlx1MTE3NQpcdTExMDNcdTExNjJcdTExMDNcdTExNjFcdTExQjgKXHUxMTAzXHUxMTYyXHUxMTAzXHUxMTY5XHUxMTA5XHUxMTc1Clx1MTEwM1x1MTE2Mlx1MTEwNVx1MTE2M1x1MTFBOApcdTExMDNcdTExNjJcdTExMDVcdTExNjNcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTA1XHUxMTcyXHUxMUE4Clx1MTEwM1x1MTE2Mlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMDNcdTExNjJcdTExMDdcdTExNkVcdTExMDdcdTExNkVcdTExQUIKXHUxMTAzXHUxMTYyXHUxMTA5XHUxMTc1XHUxMUFCClx1MTEwM1x1MTE2Mlx1MTEwQlx1MTE3M1x1MTFCQwpcdTExMDNcdTExNjJcdTExMENcdTExNjFcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTBDXHUxMTY1XHUxMUFCClx1MTEwM1x1MTE2Mlx1MTEwQ1x1MTE2NVx1MTFCOApcdTExMDNcdTExNjJcdTExMENcdTExNkVcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTBFXHUxMTYyXHUxMUE4Clx1MTEwM1x1MTE2Mlx1MTEwRVx1MTE2RVx1MTFBRgpcdTExMDNcdTExNjJcdTExMEVcdTExNkVcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTA1XHUxMTY3XHUxMUJDClx1MTEwM1x1MTE2Mlx1MTExMlx1MTE2MVx1MTFBOApcdTExMDNcdTExNjJcdTExMTJcdTExNjFcdTExQUJcdTExMDZcdTExNzVcdTExQUJcdTExMDBcdTExNkVcdTExQTgKXHUxMTAzXHUxMTYyXHUxMTEyXHUxMTYxXHUxMUI4XHUxMTA5XHUxMTc1XHUxMUFGClx1MTEwM1x1MTE2Mlx1MTExMlx1MTE2N1x1MTFCQwpcdTExMDNcdTExNjVcdTExQkNcdTExMEJcdTExNjVcdTExMDVcdTExNzUKXHUxMTAzXHUxMTY2XHUxMTBCXHUxMTc1XHUxMTEwXHUxMTczClx1MTEwM1x1MTE2OVx1MTEwM1x1MTE2Mlx1MTEwRVx1MTE2NgpcdTExMDNcdTExNjlcdTExMDNcdTExNjVcdTExQTgKXHUxMTAzXHUxMTY5XHUxMTAzXHUxMTZFXHUxMUE4Clx1MTEwM1x1MTE2OVx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMDNcdTExNjlcdTExMDlcdTExNjVcdTExMDBcdTExNkFcdTExQUIKXHUxMTAzXHUxMTY5XHUxMTA5XHUxMTc1XHUxMUI3Clx1MTEwM1x1MTE2OVx1MTEwQlx1MTE2RVx1MTFCNwpcdTExMDNcdTExNjlcdTExMEJcdTExNzVcdTExQjgKXHUxMTAzXHUxMTY5XHUxMTBDXHUxMTYxXHUxMTAwXHUxMTc1Clx1MTEwM1x1MTE2OVx1MTEwQ1x1MTE2NVx1MTExMlx1MTE3NQpcdTExMDNcdTExNjlcdTExMENcdTExNjVcdTExQUIKXHUxMTAzXHUxMTY5XHUxMTBDXHUxMTZFXHUxMUJDClx1MTEwM1x1MTE2OVx1MTEwRVx1MTE2MVx1MTFBOApcdTExMDNcdTExNjlcdTExQThcdTExMDBcdTExNjFcdTExQjcKXHUxMTAzXHUxMTY5XHUxMUE4XHUxMTA1XHUxMTc1XHUxMUI4Clx1MTEwM1x1MTE2OVx1MTFBOFx1MTEwOVx1MTE2NQpcdTExMDNcdTExNjlcdTExQThcdTExMEJcdTExNzVcdTExQUYKXHUxMTAzXHUxMTY5XHUxMUE4XHUxMTBFXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwM1x1MTE2OVx1MTFCQ1x1MTExMlx1MTE2QVx1MTEwRVx1MTE2Mlx1MTFBOApcdTExMDNcdTExNzFcdTExQkFcdTExMDZcdTExNjlcdTExMDlcdTExNzNcdTExQjgKXHUxMTAzXHUxMTcxXHUxMUJBXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwNFx1MTE2MVx1MTFBRlx1MTEwQlx1MTE2MVx1MTEwQlx1MTE3NQpcdTExMDZcdTExNjFcdTExMDJcdTExNkVcdTExMDVcdTExNjEKXHUxMTA2XHUxMTYxXHUxMTAyXHUxMTczXHUxMUFGClx1MTEwNlx1MTE2MVx1MTEwM1x1MTE2MVx1MTFCQwpcdTExMDZcdTExNjFcdTExMDVcdTExNjFcdTExMTBcdTExNjlcdTExQUIKXHUxMTA2XHUxMTYxXHUxMTA1XHUxMTY3XHUxMUFCClx1MTEwNlx1MTE2MVx1MTEwNlx1MTE2RVx1MTEwNVx1MTE3NQpcdTExMDZcdTExNjFcdTExMDlcdTExNjFcdTExMENcdTExNzUKXHUxMTA2XHUxMTYxXHUxMTBCXHUxMTYzXHUxMUE4Clx1MTEwNlx1MTE2MVx1MTEwQlx1MTE2RFx1MTEwMlx1MTE2Nlx1MTEwQ1x1MTE3MwpcdTExMDZcdTExNjFcdTExMEJcdTExNzNcdTExQUYKXHUxMTA2XHUxMTYxXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwNlx1MTE2MVx1MTEwQlx1MTE3NVx1MTEwRlx1MTE3MwpcdTExMDZcdTExNjFcdTExMENcdTExNkVcdTExQkMKXHUxMTA2XHUxMTYxXHUxMTBDXHUxMTc1XHUxMTA2XHUxMTYxXHUxMUE4Clx1MTEwNlx1MTE2MVx1MTEwRVx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2MVx1MTEwQ1x1MTE3NQpcdTExMDZcdTExNjFcdTExMEVcdTExNjFcdTExQUYKXHUxMTA2XHUxMTYxXHUxMTEyXHUxMTczXHUxMUFCClx1MTEwNlx1MTE2MVx1MTFBOFx1MTEwMFx1MTE2NVx1MTFBRlx1MTEwNVx1MTE3NQpcdTExMDZcdTExNjFcdTExQThcdTExMDJcdTExNjIKXHUxMTA2XHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwNlx1MTE2MVx1MTFBQlx1MTEwMlx1MTE2MVx1MTFCNwpcdTExMDZcdTExNjFcdTExQUJcdTExMDNcdTExNkUKXHUxMTA2XHUxMTYxXHUxMUFCXHUxMTA5XHUxMTY2Clx1MTEwNlx1MTE2MVx1MTFBQlx1MTEwQlx1MTE2M1x1MTFBOApcdTExMDZcdTExNjFcdTExQUJcdTExMEJcdTExNzVcdTExQUYKXHUxMTA2XHUxMTYxXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwNlx1MTE2MVx1MTFBQlx1MTEwQ1x1MTE2OVx1MTFBOApcdTExMDZcdTExNjFcdTExQUJcdTExMTJcdTExNkEKXHUxMTA2XHUxMTYxXHUxMUFEXHUxMTBCXHUxMTc1Clx1MTEwNlx1MTE2MVx1MTFBRlx1MTEwMFx1MTE3NQpcdTExMDZcdTExNjFcdTExQUZcdTExMEFcdTExNzNcdTExQjcKXHUxMTA2XHUxMTYxXHUxMUFGXHUxMTEwXHUxMTZFClx1MTEwNlx1MTE2MVx1MTFCN1x1MTEwM1x1MTE2Mlx1MTEwNVx1MTE2OQpcdTExMDZcdTExNjFcdTExQkNcdTExMEJcdTExNkZcdTExQUJcdTExMDBcdTExNjdcdTExQkMKXHUxMTA2XHUxMTYyXHUxMTAyXHUxMTY3XHUxMUFCClx1MTEwNlx1MTE2Mlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMDZcdTExNjJcdTExMDVcdTExNjdcdTExQTgKXHUxMTA2XHUxMTYyXHUxMTA3XHUxMTY1XHUxMUFCClx1MTEwNlx1MTE2Mlx1MTEwOVx1MTE3M1x1MTEwRlx1MTE2NVx1MTFCNwpcdTExMDZcdTExNjJcdTExMEJcdTExNzVcdTExQUYKXHUxMTA2XHUxMTYyXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwNlx1MTE2Mlx1MTFBOFx1MTEwQ1x1MTE2RQpcdTExMDZcdTExNjVcdTExQThcdTExMEJcdTExNzUKXHUxMTA2XHUxMTY1XHUxMUFCXHUxMTBDXHUxMTY1Clx1MTEwNlx1MTE2NVx1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMDZcdTExNjVcdTExQUZcdTExMDVcdTExNzUKXHUxMTA2XHUxMTY2XHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwNlx1MTE2N1x1MTEwMlx1MTE3M1x1MTEwNVx1MTE3NQpcdTExMDZcdTExNjdcdTExMEVcdTExNzVcdTExQUYKXHUxMTA2XHUxMTY3XHUxMUFCXHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwNlx1MTE2N1x1MTFBRlx1MTEwRVx1MTE3NQpcdTExMDZcdTExNjdcdTExQkNcdTExMDNcdTExNjFcdTExQUIKXHUxMTA2XHUxMTY3XHUxMUJDXHUxMTA1XHUxMTY3XHUxMUJDClx1MTEwNlx1MTE2N1x1MTFCQ1x1MTEwQlx1MTE2OApcdTExMDZcdTExNjdcdTExQkNcdTExMEJcdTExNzQKXHUxMTA2XHUxMTY3XHUxMUJDXHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwNlx1MTE2N1x1MTFCQ1x1MTEwRVx1MTE3NVx1MTFCQwpcdTExMDZcdTExNjdcdTExQkNcdTExMTJcdTExNjFcdTExQjcKXHUxMTA2XHUxMTY5XHUxMTAwXHUxMTczXHUxMUI3Clx1MTEwNlx1MTE2OVx1MTEwMlx1MTE3NVx1MTExMFx1MTE2NQpcdTExMDZcdTExNjlcdTExMDNcdTExNjZcdTExQUYKXHUxMTA2XHUxMTY5XHUxMTAzXHUxMTczXHUxMUFCClx1MTEwNlx1MTE2OVx1MTEwN1x1MTE2NVx1MTFCNwpcdTExMDZcdTExNjlcdTExMDlcdTExNzNcdTExQjgKXHUxMTA2XHUxMTY5XHUxMTBCXHUxMTYzXHUxMUJDClx1MTEwNlx1MTE2OVx1MTEwQlx1MTE3NVx1MTFCNwpcdTExMDZcdTExNjlcdTExMENcdTExNjlcdTExMDVcdTExNzUKXHUxMTA2XHUxMTY5XHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwNlx1MTE2OVx1MTExMFx1MTE2RVx1MTFCQ1x1MTEwQlx1MTE3NQpcdTExMDZcdTExNjlcdTExQThcdTExMDBcdTExNjVcdTExQUZcdTExMEJcdTExNzUKXHUxMTA2XHUxMTY5XHUxMUE4XHUxMTA1XHUxMTY5XHUxMUE4Clx1MTEwNlx1MTE2OVx1MTFBOFx1MTEwOVx1MTE2MQpcdTExMDZcdTExNjlcdTExQThcdTExMDlcdTExNjlcdTExMDVcdTExNzUKXHUxMTA2XHUxMTY5XHUxMUE4XHUxMTA5XHUxMTZFXHUxMUI3Clx1MTEwNlx1MTE2OVx1MTFBOFx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDZcdTExNjlcdTExQThcdTExMTFcdTExNkQKXHUxMTA2XHUxMTY5XHUxMUFGXHUxMTA1XHUxMTYyClx1MTEwNlx1MTE2OVx1MTFCN1x1MTEwNlx1MTE2MgpcdTExMDZcdTExNjlcdTExQjdcdTExMDZcdTExNkVcdTExMDBcdTExNjYKXHUxMTA2XHUxMTY5XHUxMUI3XHUxMTA5XHUxMTYxXHUxMUFGClx1MTEwNlx1MTE2OVx1MTFCN1x1MTEwOVx1MTE2OVx1MTFBOApcdTExMDZcdTExNjlcdTExQjdcdTExMENcdTExNzVcdTExQkEKXHUxMTA2XHUxMTY5XHUxMUI3XHUxMTEwXHUxMTY5XHUxMUJDClx1MTEwNlx1MTE2OVx1MTFCOFx1MTEwOVx1MTE3NQpcdTExMDZcdTExNkVcdTExMDBcdTExNkFcdTExQUJcdTExMDlcdTExNzVcdTExQjcKXHUxMTA2XHUxMTZFXHUxMTAwXHUxMTZFXHUxMUJDXHUxMTEyXHUxMTZBClx1MTEwNlx1MTE2RVx1MTEwM1x1MTE2NVx1MTEwQlx1MTE3MQpcdTExMDZcdTExNkVcdTExMDNcdTExNjVcdTExQjcKXHUxMTA2XHUxMTZFXHUxMTA1XHUxMTczXHUxMUMxClx1MTEwNlx1MTE2RVx1MTEwOVx1MTE3M1x1MTFBQgpcdTExMDZcdTExNkVcdTExMEJcdTExNjVcdTExQkEKXHUxMTA2XHUxMTZFXHUxMTBCXHUxMTY3XHUxMUE4Clx1MTEwNlx1MTE2RVx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDZcdTExNkVcdTExMENcdTExNjlcdTExMDBcdTExNjVcdTExQUIKXHUxMTA2XHUxMTZFXHUxMTBDXHUxMTc1XHUxMTAwXHUxMTYyClx1MTEwNlx1MTE2RVx1MTEwRVx1MTE2NVx1MTFBOApcdTExMDZcdTExNkVcdTExQUJcdTExMDBcdTExNkUKXHUxMTA2XHUxMTZFXHUxMUFCXHUxMTAzXHUxMTczXHUxMUE4Clx1MTEwNlx1MTE2RVx1MTFBQlx1MTEwN1x1MTE2NVx1MTFCOApcdTExMDZcdTExNkVcdTExQUJcdTExMDlcdTExNjUKXHUxMTA2XHUxMTZFXHUxMUFCXHUxMTBDXHUxMTY2Clx1MTEwNlx1MTE2RVx1MTFBQlx1MTExMlx1MTE2MVx1MTFBOApcdTExMDZcdTExNkVcdTExQUJcdTExMTJcdTExNkEKXHUxMTA2XHUxMTZFXHUxMUFGXHUxMTAwXHUxMTYxClx1MTEwNlx1MTE2RVx1MTFBRlx1MTEwMFx1MTE2NVx1MTFBQgpcdTExMDZcdTExNkVcdTExQUZcdTExMDBcdTExNjdcdTExQUYKXHUxMTA2XHUxMTZFXHUxMUFGXHUxMTAwXHUxMTY5XHUxMTAwXHUxMTc1Clx1MTEwNlx1MTE2RVx1MTFBRlx1MTEwNVx1MTE2OVx1MTFBQgpcdTExMDZcdTExNkVcdTExQUZcdTExMDVcdTExNzVcdTExMTJcdTExNjFcdTExQTgKXHUxMTA2XHUxMTZFXHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwNlx1MTE2RVx1MTFBRlx1MTEwQ1x1MTE3NVx1MTFBRgpcdTExMDZcdTExNkVcdTExQUZcdTExMEVcdTExNjYKXHUxMTA2XHUxMTc1XHUxMTAwXHUxMTZFXHUxMUE4Clx1MTEwNlx1MTE3NVx1MTEwM1x1MTE3NVx1MTEwQlx1MTE2NQpcdTExMDZcdTExNzVcdTExMDlcdTExNjFcdTExMEJcdTExNzVcdTExQUYKXHUxMTA2XHUxMTc1XHUxMTA5XHUxMTZFXHUxMUFGClx1MTEwNlx1MTE3NVx1MTEwQlx1MTE2N1x1MTFBOApcdTExMDZcdTExNzVcdTExMEJcdTExNkRcdTExQkNcdTExMDlcdTExNzVcdTExQUYKXHUxMTA2XHUxMTc1XHUxMTBCXHUxMTZFXHUxMUI3Clx1MTEwNlx1MTE3NVx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDZcdTExNzVcdTExMTBcdTExNzVcdTExQkMKXHUxMTA2XHUxMTc1XHUxMTEyXHUxMTY5XHUxMUFCClx1MTEwNlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE2MVx1MTFBQgpcdTExMDZcdTExNzVcdTExQUJcdTExMENcdTExNjlcdTExQTgKXHUxMTA2XHUxMTc1XHUxMUFCXHUxMTBDXHUxMTZFClx1MTEwNlx1MTE3NVx1MTFBRVx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDZcdTExNzVcdTExQUZcdTExMDBcdTExNjFcdTExMDVcdTExNkUKXHUxMTA2XHUxMTc1XHUxMUFGXHUxMTA1XHUxMTc1XHUxMTA2XHUxMTc1XHUxMTEwXHUxMTY1Clx1MTEwNlx1MTE3NVx1MTFDMFx1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExMDBcdTExNjFcdTExMENcdTExNzUKXHUxMTA3XHUxMTYxXHUxMTAwXHUxMTZFXHUxMTAyXHUxMTc1Clx1MTEwN1x1MTE2MVx1MTEwMlx1MTE2MVx1MTEwMlx1MTE2MQpcdTExMDdcdTExNjFcdTExMDJcdTExNzNcdTExQUYKXHUxMTA3XHUxMTYxXHUxMTAzXHUxMTYxXHUxMUE4Clx1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFCQVx1MTEwMFx1MTE2MQpcdTExMDdcdTExNjFcdTExMDVcdTExNjFcdTExQjcKXHUxMTA3XHUxMTYxXHUxMTBCXHUxMTc1XHUxMTA1XHUxMTY1XHUxMTA5XHUxMTczClx1MTEwN1x1MTE2MVx1MTExMFx1MTE2MVx1MTFCQwpcdTExMDdcdTExNjFcdTExQThcdTExMDZcdTExNkVcdTExQUZcdTExMDBcdTExNkFcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYxClx1MTEwN1x1MTE2MVx1MTFBOFx1MTEwOVx1MTE2RQpcdTExMDdcdTExNjFcdTExQUJcdTExMDNcdTExNjIKXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTAzXHUxMTczXHUxMTA5XHUxMTc1Clx1MTEwN1x1MTE2MVx1MTFBQlx1MTEwNlx1MTE2MVx1MTFBRgpcdTExMDdcdTExNjFcdTExQUJcdTExMDdcdTExNjFcdTExQUYKXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwN1x1MTE2MVx1MTFBQlx1MTEwQlx1MTE3M1x1MTFCQwpcdTExMDdcdTExNjFcdTExQUJcdTExMENcdTExNjFcdTExQkMKXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTBDXHUxMTZFXHUxMUE4Clx1MTEwN1x1MTE2MVx1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMDdcdTExNjFcdTExQUJcdTExMEVcdTExNjFcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUFFXHUxMTBFXHUxMTc1XHUxMUI3Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwMFx1MTE2MVx1MTEwNVx1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExQUZcdTExMDBcdTExNjVcdTExQUZcdTExMEJcdTExNzNcdTExQjcKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTAwXHUxMTY3XHUxMUFCClx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMDdcdTExNjFcdTExQUZcdTExMDVcdTExNjYKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTA2XHUxMTY5XHUxMUE4Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExQUZcdTExMDlcdTExNjJcdTExQkMKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwQ1x1MTE2MVx1MTEwMFx1MTE2RVx1MTFBOApcdTExMDdcdTExNjFcdTExQUZcdTExMENcdTExNjVcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTEwXHUxMTY5XHUxMUI4Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTExMVx1MTE2RApcdTExMDdcdTExNjFcdTExQjdcdTExMTJcdTExNjFcdTExMDJcdTExNzNcdTExQUYKXHUxMTA3XHUxMTYxXHUxMUI4XHUxMTAwXHUxMTczXHUxMTA1XHUxMTczXHUxMUJBClx1MTEwN1x1MTE2MVx1MTFCOFx1MTEwNlx1MTE2MVx1MTFCQQpcdTExMDdcdTExNjFcdTExQjhcdTExMDlcdTExNjFcdTExQkMKXHUxMTA3XHUxMTYxXHUxMUI4XHUxMTA5XHUxMTY5XHUxMUMwClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDdcdTExNjFcdTExQkNcdTExMDZcdTExNjdcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExQkNcdTExMDdcdTExNjVcdTExQjgKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTA5XHUxMTY5XHUxMUJDClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwOVx1MTE3NVx1MTFBOApcdTExMDdcdTExNjFcdTExQkNcdTExMEJcdTExNjFcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTBCXHUxMTZFXHUxMUFGClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE3NQpcdTExMDdcdTExNjFcdTExQkNcdTExMTJcdTExNjFcdTExQTgKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTEyXHUxMTYyClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTExMlx1MTE2M1x1MTFCQwpcdTExMDdcdTExNjJcdTExMDBcdTExNjdcdTExQkMKXHUxMTA3XHUxMTYyXHUxMTAxXHUxMTY5XHUxMUI4Clx1MTEwN1x1MTE2Mlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMDdcdTExNjJcdTExMDNcdTExNzNcdTExMDZcdTExNzVcdTExQUJcdTExMTBcdTExNjVcdTExQUIKXHUxMTA3XHUxMTYyXHUxMUE4XHUxMTAzXHUxMTZFXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwN1x1MTE2Mlx1MTFBOFx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDdcdTExNjJcdTExQThcdTExMDlcdTExNjVcdTExQkMKXHUxMTA3XHUxMTYyXHUxMUE4XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwN1x1MTE2Mlx1MTFBOFx1MTEwQ1x1MTE2NgpcdTExMDdcdTExNjJcdTExQThcdTExMTJcdTExNkFcdTExMENcdTExNjVcdTExQjcKXHUxMTA3XHUxMTY1XHUxMTA1XHUxMTczXHUxMUJBClx1MTEwN1x1MTE2NVx1MTEwOVx1MTE2NVx1MTFCQQpcdTExMDdcdTExNjVcdTExMTBcdTExNzNcdTExQUIKXHUxMTA3XHUxMTY1XHUxMUFCXHUxMTAwXHUxMTYyClx1MTEwN1x1MTE2NVx1MTFBQlx1MTEwQlx1MTE2N1x1MTFBOApcdTExMDdcdTExNjVcdTExQUJcdTExMENcdTExNzUKXHUxMTA3XHUxMTY1XHUxMUFCXHUxMTEyXHUxMTY5Clx1MTEwN1x1MTE2NVx1MTFBRlx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDdcdTExNjVcdTExQUZcdTExMDVcdTExNjYKXHUxMTA3XHUxMTY1XHUxMUFGXHUxMTBBXHUxMTY1Clx1MTEwN1x1MTE2NVx1MTFCN1x1MTEwQlx1MTE3MQpcdTExMDdcdTExNjVcdTExQjdcdTExMEJcdTExNzVcdTExQUIKXHUxMTA3XHUxMTY1XHUxMUI3XHUxMTBDXHUxMTZDClx1MTEwN1x1MTE2NVx1MTFCOFx1MTEwNVx1MTE3Mlx1MTFBRgpcdTExMDdcdTExNjVcdTExQjhcdTExMEJcdTExNkZcdTExQUIKXHUxMTA3XHUxMTY1XHUxMUI4XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwN1x1MTE2NVx1MTFCOFx1MTEwRVx1MTE3NVx1MTFBOApcdTExMDdcdTExNjZcdTExMEJcdTExNzVcdTExMENcdTExNzVcdTExQkMKXHUxMTA3XHUxMTY2XHUxMUFGXHUxMTEwXHUxMTczClx1MTEwN1x1MTE2N1x1MTFBQlx1MTEwMFx1MTE2N1x1MTFCQwpcdTExMDdcdTExNjdcdTExQUJcdTExMDNcdTExNjlcdTExQkMKXHUxMTA3XHUxMTY3XHUxMUFCXHUxMTA2XHUxMTY3XHUxMUJDClx1MTEwN1x1MTE2N1x1MTFBQlx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMDdcdTExNjdcdTExQUJcdTExMTJcdTExNjlcdTExMDlcdTExNjEKXHUxMTA3XHUxMTY3XHUxMUFCXHUxMTEyXHUxMTZBClx1MTEwN1x1MTE2N1x1MTFBRlx1MTEwM1x1MTE2OQpcdTExMDdcdTExNjdcdTExQUZcdTExMDZcdTExNjdcdTExQkMKXHUxMTA3XHUxMTY3XHUxMUFGXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwN1x1MTE2N1x1MTFCQ1x1MTEwOVx1MTE3NVx1MTFBRgpcdTExMDdcdTExNjdcdTExQkNcdTExMEJcdTExNjFcdTExMDVcdTExNzUKXHUxMTA3XHUxMTY3XHUxMUJDXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwN1x1MTE2OVx1MTEwMFx1MTE2QVx1MTFBQgpcdTExMDdcdTExNjlcdTExMDJcdTExNjVcdTExMDlcdTExNzMKXHUxMTA3XHUxMTY5XHUxMTA1XHUxMTYxXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTEwN1x1MTE2OVx1MTEwNVx1MTE2MVx1MTFCNwpcdTExMDdcdTExNjlcdTExMDVcdTExNzNcdTExQjcKXHUxMTA3XHUxMTY5XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwN1x1MTE2OVx1MTEwQlx1MTE2MVx1MTFBQgpcdTExMDdcdTExNjlcdTExMENcdTExNjFcdTExMDBcdTExNzUKXHUxMTA3XHUxMTY5XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwN1x1MTE2OVx1MTEwQ1x1MTE2NVx1MTFBQgpcdTExMDdcdTExNjlcdTExMENcdTExNjlcdTExQUIKXHUxMTA3XHUxMTY5XHUxMTEwXHUxMTY5XHUxMUJDClx1MTEwN1x1MTE2OVx1MTExMVx1MTE2N1x1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDdcdTExNjlcdTExMTJcdTExNjVcdTExQjcKXHUxMTA3XHUxMTY5XHUxMUE4XHUxMTAzXHUxMTY5Clx1MTEwN1x1MTE2OVx1MTFBOFx1MTEwOVx1MTE2MQpcdTExMDdcdTExNjlcdTExQThcdTExMDlcdTExNkVcdTExQkNcdTExMEJcdTExNjEKXHUxMTA3XHUxMTY5XHUxMUE4XHUxMTA5XHUxMTczXHUxMUI4Clx1MTEwN1x1MTE2OVx1MTFBOVx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDdcdTExNjlcdTExQUJcdTExMDBcdTExNjdcdTExQThcdTExMENcdTExNjVcdTExQTgKXHUxMTA3XHUxMTY5XHUxMUFCXHUxMTA1XHUxMTYyClx1MTEwN1x1MTE2OVx1MTFBQlx1MTEwN1x1MTE2RQpcdTExMDdcdTExNjlcdTExQUJcdTExMDlcdTExNjEKXHUxMTA3XHUxMTY5XHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwN1x1MTE2OVx1MTFBQlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDdcdTExNjlcdTExQUJcdTExMENcdTExNzVcdTExQUYKXHUxMTA3XHUxMTY5XHUxMUFGXHUxMTExXHUxMTY2XHUxMUFCClx1MTEwN1x1MTE2OVx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMDdcdTExNjlcdTExQkNcdTExMENcdTExNzUKXHUxMTA3XHUxMTY5XHUxMUJDXHUxMTEwXHUxMTZFClx1MTEwN1x1MTE2RVx1MTEwMFx1MTE3M1x1MTFBQgpcdTExMDdcdTExNkVcdTExMDFcdTExNzNcdTExMDVcdTExNjVcdTExMEJcdTExNkVcdTExQjcKXHUxMTA3XHUxMTZFXHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwN1x1MTE2RVx1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwOVx1MTE2MVx1MTFBQgpcdTExMDdcdTExNkVcdTExMDZcdTExNkVcdTExQUIKXHUxMTA3XHUxMTZFXHUxMTA3XHUxMTZFXHUxMUFCClx1MTEwN1x1MTE2RVx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMDdcdTExNkVcdTExMDlcdTExNjFcdTExQkMKXHUxMTA3XHUxMTZFXHUxMTBCXHUxMTY1XHUxMUJGClx1MTEwN1x1MTE2RVx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDdcdTExNkVcdTExMENcdTExNjFcdTExQThcdTExMEJcdTExNkRcdTExQkMKXHUxMTA3XHUxMTZFXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwN1x1MTE2RVx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMDdcdTExNkVcdTExMENcdTExNjlcdTExQTgKXHUxMTA3XHUxMTZFXHUxMTBDXHUxMTc1XHUxMTA1XHUxMTY1XHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwN1x1MTE2RVx1MTEwRVx1MTE3NVx1MTFBQgpcdTExMDdcdTExNkVcdTExMTBcdTExNjFcdTExQTgKXHUxMTA3XHUxMTZFXHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwN1x1MTE2RVx1MTExMlx1MTE2Q1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDdcdTExNkVcdTExQThcdTExMDdcdTExNkUKXHUxMTA3XHUxMTZFXHUxMUE4XHUxMTEyXHUxMTYxXHUxMUFCClx1MTEwN1x1MTE2RVx1MTFBQlx1MTEwMlx1MTE2OQpcdTExMDdcdTExNkVcdTExQUJcdTExMDVcdTExNjNcdTExQkMKXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTA1XHUxMTc1Clx1MTEwN1x1MTE2RVx1MTFBQlx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDdcdTExNkVcdTExQUJcdTExMDlcdTExNjVcdTExQTgKXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTBCXHUxMTYzClx1MTEwN1x1MTE2RVx1MTFBQlx1MTEwQlx1MTE3MVx1MTEwMFx1MTE3NQpcdTExMDdcdTExNkVcdTExQUJcdTExMTFcdTExNzVcdTExQUYKXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTEyXHUxMTY5XHUxMUJDXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTEwN1x1MTE2RVx1MTFBRlx1MTEwMFx1MTE2OVx1MTEwMFx1MTE3NQpcdTExMDdcdTExNkVcdTExQUZcdTExMDBcdTExNkEKXHUxMTA3XHUxMTZFXHUxMUFGXHUxMTAwXHUxMTZEClx1MTEwN1x1MTE2RVx1MTFBRlx1MTEwMVx1MTE2OVx1MTFCRQpcdTExMDdcdTExNkVcdTExQUZcdTExMDZcdTExNjFcdTExQUIKXHUxMTA3XHUxMTZFXHUxMUFGXHUxMTA3XHUxMTY1XHUxMUI4Clx1MTEwN1x1MTE2RVx1MTFBRlx1MTEwN1x1MTE3NVx1MTFCRQpcdTExMDdcdTExNkVcdTExQUZcdTExMEJcdTExNjFcdTExQUIKXHUxMTA3XHUxMTZFXHUxMUFGXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTc1XHUxMUE4Clx1MTEwN1x1MTE2RVx1MTFBRlx1MTExMlx1MTE2Mlx1MTFCQwpcdTExMDdcdTExNzNcdTExMDVcdTExNjJcdTExQUJcdTExMDNcdTExNzMKXHUxMTA3XHUxMTc1XHUxMTAwXHUxMTczXHUxMUE4Clx1MTEwN1x1MTE3NVx1MTEwMlx1MTE2MVx1MTFBQgpcdTExMDdcdTExNzVcdTExMDJcdTExNzVcdTExQUYKXHUxMTA3XHUxMTc1XHUxMTAzXHUxMTZFXHUxMUFGXHUxMTAwXHUxMTc1Clx1MTEwN1x1MTE3NVx1MTEwM1x1MTE3NVx1MTEwQlx1MTE2OQpcdTExMDdcdTExNzVcdTExMDVcdTExNjlcdTExMDlcdTExNjkKXHUxMTA3XHUxMTc1XHUxMTA2XHUxMTYxXHUxMUFCClx1MTEwN1x1MTE3NVx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDdcdTExNzVcdTExMDZcdTExNzVcdTExQUYKXHUxMTA3XHUxMTc1XHUxMTA3XHUxMTYxXHUxMTA1XHUxMTYxXHUxMUI3Clx1MTEwN1x1MTE3NVx1MTEwN1x1MTE3NVx1MTFCN1x1MTEwN1x1MTE2MVx1MTFCOApcdTExMDdcdTExNzVcdTExMDlcdTExNjFcdTExQkMKXHUxMTA3XHUxMTc1XHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwN1x1MTE3NVx1MTEwQlx1MTE3Mlx1MTFBRgpcdTExMDdcdTExNzVcdTExMENcdTExNkVcdTExQkMKXHUxMTA3XHUxMTc1XHUxMTEwXHUxMTYxXHUxMTA2XHUxMTc1XHUxMUFCClx1MTEwN1x1MTE3NVx1MTExMVx1MTE2MVx1MTFBQgpcdTExMDdcdTExNzVcdTExQUZcdTExMDNcdTExNzVcdTExQkMKXHUxMTA3XHUxMTc1XHUxMUJBXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwN1x1MTE3NVx1MTFCQVx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2RVx1MTFBRgpcdTExMDdcdTExNzVcdTExQkFcdTExMENcdTExNkVcdTExQUZcdTExMDBcdTExNzUKXHUxMTA3XHUxMTc1XHUxMUJFXHUxMTAxXHUxMTYxXHUxMUFGClx1MTEwOFx1MTE2MVx1MTFBRlx1MTEwMFx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDhcdTExNjFcdTExQUZcdTExMDVcdTExNjIKXHUxMTA4XHUxMTYxXHUxMUFGXHUxMTA1XHUxMTc1Clx1MTEwOVx1MTE2MVx1MTEwMFx1MTE2NVx1MTFBQgpcdTExMDlcdTExNjFcdTExMDBcdTExNjhcdTExMENcdTExNjVcdTExQUYKXHUxMTA5XHUxMTYxXHUxMTAyXHUxMTYxXHUxMTBCXHUxMTc1Clx1MTEwOVx1MTE2MVx1MTEwMlx1MTE2M1x1MTFCQwpcdTExMDlcdTExNjFcdTExMDVcdTExNjFcdTExQjcKXHUxMTA5XHUxMTYxXHUxMTA1XHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2MVx1MTEwNVx1MTE3NVx1MTFCOApcdTExMDlcdTExNjFcdTExMDZcdTExNjlcdTExMDJcdTExNzVcdTExQjcKXHUxMTA5XHUxMTYxXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwN1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNjFcdTExMDlcdTExNjFcdTExQkMKXHUxMTA5XHUxMTYxXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTEyXHUxMTZBXHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMDlcdTExNjFcdTExMDlcdTExNzNcdTExQjcKXHUxMTA5XHUxMTYxXHUxMTA5XHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwQlx1MTE2NVx1MTFCOApcdTExMDlcdTExNjFcdTExMEJcdTExNkRcdTExQkMKXHUxMTA5XHUxMTYxXHUxMTBCXHUxMTZGXHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNjFcdTExMENcdTExNjVcdTExQUIKXHUxMTA5XHUxMTYxXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwOVx1MTE2MVx1MTEwRVx1MTE2OVx1MTFBQgpcdTExMDlcdTExNjFcdTExMEVcdTExNkVcdTExQUJcdTExMDBcdTExNzUKXHUxMTA5XHUxMTYxXHUxMTEwXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2MVx1MTExMFx1MTE2RVx1MTEwNVx1MTE3NQpcdTExMDlcdTExNjFcdTExMTJcdTExNzNcdTExQUYKXHUxMTA5XHUxMTYxXHUxMUFCXHUxMTAwXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2MVx1MTFBQlx1MTEwN1x1MTE2RVx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE2QQpcdTExMDlcdTExNjFcdTExQUJcdTExMEJcdTExNjVcdTExQjgKXHUxMTA5XHUxMTYxXHUxMUFCXHUxMTBFXHUxMTYyXHUxMUE4Clx1MTEwOVx1MTE2MVx1MTFBRlx1MTEwNVx1MTE3NVx1MTFCNwpcdTExMDlcdTExNjFcdTExQUZcdTExMEJcdTExNzVcdTExQUIKXHUxMTA5XHUxMTYxXHUxMUFGXHUxMTBEXHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE2MVx1MTFCN1x1MTEwMFx1MTE2OFx1MTExMFx1MTE2MVx1MTFCQwpcdTExMDlcdTExNjFcdTExQjdcdTExMDBcdTExNkVcdTExQTgKXHUxMTA5XHUxMTYxXHUxMUI3XHUxMTA5XHUxMTc1XHUxMUI4Clx1MTEwOVx1MTE2MVx1MTFCN1x1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMDlcdTExNjFcdTExQjdcdTExMEVcdTExNjlcdTExQUIKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTAwXHUxMTZBXHUxMUFCClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDlcdTExNjFcdTExQkNcdTExMDNcdTExNjIKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTA1XHUxMTcyClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTFBQlx1MTEwMFx1MTE3NQpcdTExMDlcdTExNjFcdTExQkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2NVx1MTFCOApcdTExMDlcdTExNjFcdTExQkNcdTExMEJcdTExNzVcdTExQUIKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTBDXHUxMTYxClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDlcdTExNjFcdTExQkNcdTExMEVcdTExNjUKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTBFXHUxMTZFClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTExMFx1MTE2MgpcdTExMDlcdTExNjFcdTExQkNcdTExMTFcdTExNkQKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwOVx1MTE2MVx1MTFCQ1x1MTExMlx1MTE2QVx1MTFCQwpcdTExMDlcdTExNjJcdTExMDdcdTExNjdcdTExQTgKXHUxMTA5XHUxMTYyXHUxMUE4XHUxMTAxXHUxMTYxXHUxMUFGClx1MTEwOVx1MTE2Mlx1MTFBOFx1MTEwQlx1MTE2N1x1MTFBQlx1MTExMVx1MTE3NVx1MTFBRgpcdTExMDlcdTExNjJcdTExQkNcdTExMDBcdTExNjFcdTExQTgKXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTA2XHUxMTY3XHUxMUJDClx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNjJcdTExQkNcdTExMDdcdTExNjFcdTExQkNcdTExMDlcdTExNjlcdTExQkMKXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTEwOVx1MTE2NVx1MTFBQgpcdTExMDlcdTExNjJcdTExQkNcdTExMDlcdTExNzVcdTExQUIKXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTExMlx1MTE2QVx1MTFBRgpcdTExMDlcdTExNjVcdTExMDVcdTExNjFcdTExQjgKXHUxMTA5XHUxMTY1XHUxMTA1XHUxMTczXHUxMUFCClx1MTEwOVx1MTE2NVx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDlcdTExNjVcdTExMDZcdTExNzVcdTExQUIKXHUxMTA5XHUxMTY1XHUxMTA3XHUxMTc1XHUxMTA5XHUxMTczClx1MTEwOVx1MTE2NVx1MTEwQlx1MTE2M1x1MTFCQwpcdTExMDlcdTExNjVcdTExMEJcdTExNkVcdTExQUYKXHUxMTA5XHUxMTY1XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwOVx1MTE2NVx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDlcdTExNjVcdTExMERcdTExNjlcdTExQTgKXHUxMTA5XHUxMTY1XHUxMTBGXHUxMTczXHUxMUFGClx1MTEwOVx1MTE2NVx1MTFBOFx1MTEwOVx1MTE2MQpcdTExMDlcdTExNjVcdTExQThcdTExMEJcdTExNzIKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTAwXHUxMTY1Clx1MTEwOVx1MTE2NVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNjVcdTExQUJcdTExMDdcdTExNjIKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFBQlx1MTEwOVx1MTE2RQpcdTExMDlcdTExNjVcdTExQUJcdTExMEJcdTExNkZcdTExQUIKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBQgpcdTExMDlcdTExNjVcdTExQUJcdTExMTBcdTExNjJcdTExQTgKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTExXHUxMTZFXHUxMUJDXHUxMTAwXHUxMTc1Clx1MTEwOVx1MTE2NVx1MTFBRlx1MTEwMFx1MTE2NVx1MTEwQ1x1MTE3NQpcdTExMDlcdTExNjVcdTExQUZcdTExMDJcdTExNjFcdTExQUYKXHUxMTA5XHUxMTY1XHUxMUFGXHUxMTA1XHUxMTY1XHUxMUJDXHUxMTEwXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFBRlx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDlcdTExNjVcdTExQUZcdTExMDZcdTExNkVcdTExQUIKXHUxMTA5XHUxMTY1XHUxMUFGXHUxMTA5XHUxMTYxClx1MTEwOVx1MTE2NVx1MTFBRlx1MTEwQlx1MTE2MVx1MTFBOFx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMDlcdTExNjVcdTExQUZcdTExMEVcdTExNzUKXHUxMTA5XHUxMTY1XHUxMUFGXHUxMTEwXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFCOFx1MTEwQVx1MTE3NQpcdTExMDlcdTExNjVcdTExQkNcdTExMDBcdTExNjlcdTExQkMKXHUxMTA5XHUxMTY1XHUxMUJDXHUxMTAzXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFCQ1x1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDlcdTExNjVcdTExQkNcdTExMDdcdTExNjdcdTExQUYKXHUxMTA5XHUxMTY1XHUxMUJDXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwOVx1MTE2NVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNjVcdTExQkNcdTExMENcdTExNjVcdTExQTgKXHUxMTA5XHUxMTY1XHUxMUJDXHUxMTBDXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2NVx1MTFCQ1x1MTExMlx1MTE2MVx1MTFCNwpcdTExMDlcdTExNjZcdTExMDBcdTExNzNcdTExQjcKXHUxMTA5XHUxMTY2XHUxMTA2XHUxMTc1XHUxMTAyXHUxMTYxClx1MTEwOVx1MTE2Nlx1MTEwOVx1MTE2MVx1MTFCQwpcdTExMDlcdTExNjZcdTExMEJcdTExNkZcdTExQUYKXHUxMTA5XHUxMTY2XHUxMTBDXHUxMTY5XHUxMUJDXHUxMTAzXHUxMTYyXHUxMTBCXHUxMTZBXHUxMUJDClx1MTEwOVx1MTE2Nlx1MTExMFx1MTE2MVx1MTFBOApcdTExMDlcdTExNjZcdTExQUJcdTExMTBcdTExNjUKXHUxMTA5XHUxMTY2XHUxMUFCXHUxMTEwXHUxMTc1XHUxMTA2XHUxMTc1XHUxMTEwXHUxMTY1Clx1MTEwOVx1MTE2Nlx1MTFCQVx1MTEwRFx1MTE2MgpcdTExMDlcdTExNjlcdTExMDBcdTExNzJcdTExMDZcdTExNjkKXHUxMTA5XHUxMTY5XHUxMTAwXHUxMTczXHUxMUE4XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwOVx1MTE2OVx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDlcdTExNjlcdTExMDJcdTExNjFcdTExMDBcdTExNzUKXHUxMTA5XHUxMTY5XHUxMTAyXHUxMTY3XHUxMUFCClx1MTEwOVx1MTE2OVx1MTEwM1x1MTE3M1x1MTFBOApcdTExMDlcdTExNjlcdTExMDZcdTExNjFcdTExQkMKXHUxMTA5XHUxMTY5XHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwOVx1MTE2OVx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMDlcdTExNjlcdTExMDlcdTExNjlcdTExQTgKXHUxMTA5XHUxMTY5XHUxMTBCXHUxMTYxXHUxMTAwXHUxMTZBClx1MTEwOVx1MTE2OVx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDlcdTExNjlcdTExMEJcdTExNkZcdTExQUIKXHUxMTA5XHUxMTY5XHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwOVx1MTE2OVx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTExMlx1MTE3NQpcdTExMDlcdTExNjlcdTExMENcdTExNzVcdTExMTFcdTExNkVcdTExQjcKXHUxMTA5XHUxMTY5XHUxMTBDXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2OVx1MTExMVx1MTE2RVx1MTFCQwpcdTExMDlcdTExNjlcdTExMTJcdTExNjdcdTExQkMKXHUxMTA5XHUxMTY5XHUxMUE4XHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwOVx1MTE2OVx1MTFBOFx1MTEwM1x1MTE2OQpcdTExMDlcdTExNjlcdTExQThcdTExMEJcdTExNjlcdTExQkEKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTAwXHUxMTYxXHUxMTA1XHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTEwMFx1MTE3NVx1MTFBRgpcdTExMDlcdTExNjlcdTExQUJcdTExMDJcdTExNjcKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTAyXHUxMTc1XHUxMUI3Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTEwM1x1MTE3M1x1MTFCQwpcdTExMDlcdTExNjlcdTExQUJcdTExMDZcdTExNjlcdTExQTgKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTA4XHUxMTY3XHUxMUE4Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTEwOVx1MTE3NVx1MTFBRgpcdTExMDlcdTExNjlcdTExQUJcdTExMENcdTExNzVcdTExQUYKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTEwXHUxMTY5XHUxMUI4Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTExMlx1MTE2MgpcdTExMDlcdTExNjlcdTExQUZcdTExMENcdTExNzVcdTExQThcdTExMTJcdTExNzUKXHUxMTA5XHUxMTY5XHUxMUI3XHUxMTBBXHUxMTc1Clx1MTEwOVx1MTE2OVx1MTFCQ1x1MTEwQlx1MTE2MVx1MTEwQ1x1MTE3NQpcdTExMDlcdTExNjlcdTExQkNcdTExMEJcdTExNzUKXHUxMTA5XHUxMTY5XHUxMUJDXHUxMTExXHUxMTY3XHUxMUFCClx1MTEwOVx1MTE2Q1x1MTEwMFx1MTE2OVx1MTEwMFx1MTE3NQpcdTExMDlcdTExNkRcdTExMTFcdTExNzVcdTExQkMKXHUxMTA5XHUxMTZFXHUxMTAwXHUxMTY1XHUxMUFCClx1MTEwOVx1MTE2RVx1MTEwMlx1MTE2N1x1MTFBQgpcdTExMDlcdTExNkVcdTExMDNcdTExNjFcdTExQUIKXHUxMTA5XHUxMTZFXHUxMTAzXHUxMTY5XHUxMUJBXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwOVx1MTE2RVx1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDlcdTExNkVcdTExMDZcdTExNjdcdTExQUIKXHUxMTA5XHUxMTZFXHUxMTA2XHUxMTY3XHUxMUJDClx1MTEwOVx1MTE2RVx1MTEwN1x1MTE2MVx1MTFBOApcdTExMDlcdTExNkVcdTExMDlcdTExNjFcdTExQkMKXHUxMTA5XHUxMTZFXHUxMTA5XHUxMTY1XHUxMUE4Clx1MTEwOVx1MTE2RVx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMDlcdTExNkVcdTExMDlcdTExNzVcdTExMDVcdTExNjkKXHUxMTA5XHUxMTZFXHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwOVx1MTE2RVx1MTEwQlx1MTE2N1x1MTFCNwpcdTExMDlcdTExNkVcdTExMEJcdTExNjdcdTExQkMKXHUxMTA5XHUxMTZFXHUxMTBCXHUxMTc1XHUxMUI4Clx1MTEwOVx1MTE2RVx1MTEwQ1x1MTE2RVx1MTFBQgpcdTExMDlcdTExNkVcdTExMENcdTExNzVcdTExQjgKXHUxMTA5XHUxMTZFXHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwOVx1MTE2RVx1MTEwRlx1MTE2NVx1MTFCQQpcdTExMDlcdTExNkVcdTExMTFcdTExNzVcdTExQUYKXHUxMTA5XHUxMTZFXHUxMTEyXHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE2RVx1MTExMlx1MTE2NVx1MTFCN1x1MTEwOVx1MTE2Mlx1MTFCQwpcdTExMDlcdTExNkVcdTExMTJcdTExNkFcdTExMDBcdTExNzUKXHUxMTA5XHUxMTZFXHUxMUE4XHUxMTAyXHUxMTY3Clx1MTEwOVx1MTE2RVx1MTFBOFx1MTEwOVx1MTE2OQpcdTExMDlcdTExNkVcdTExQThcdTExMENcdTExNjYKXHUxMTA5XHUxMTZFXHUxMUFCXHUxMTAwXHUxMTYxXHUxMUFCClx1MTEwOVx1MTE2RVx1MTFBQlx1MTEwOVx1MTE2NQpcdTExMDlcdTExNkVcdTExQUJcdTExMDlcdTExNkUKXHUxMTA5XHUxMTZFXHUxMUFCXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTAwXHUxMTYxXHUxMUFCClx1MTEwOVx1MTE2RVx1MTFBQlx1MTEwQlx1MTE3MQpcdTExMDlcdTExNkVcdTExQUVcdTExMDBcdTExNjFcdTExMDVcdTExNjFcdTExQTgKXHUxMTA5XHUxMTZFXHUxMUFGXHUxMTA3XHUxMTY3XHUxMUJDClx1MTEwOVx1MTE2RVx1MTFBRlx1MTEwQ1x1MTE3NVx1MTFCOApcdTExMDlcdTExNkVcdTExQkFcdTExMENcdTExNjEKXHUxMTA5XHUxMTczXHUxMTAyXHUxMTc1XHUxMUI3Clx1MTEwOVx1MTE3M1x1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNzNcdTExMDlcdTExNzNcdTExMDVcdTExNjkKXHUxMTA5XHUxMTczXHUxMTA5XHUxMTczXHUxMUJDClx1MTEwOVx1MTE3M1x1MTEwQlx1MTE3MFx1MTExMFx1MTE2NQpcdTExMDlcdTExNzNcdTExMEJcdTExNzFcdTExMEVcdTExNzUKXHUxMTA5XHUxMTczXHUxMTBGXHUxMTY2XHUxMTBCXHUxMTc1XHUxMTEwXHUxMTczClx1MTEwOVx1MTE3M1x1MTExMFx1MTE3Mlx1MTEwM1x1MTE3NVx1MTEwQlx1MTE2OQpcdTExMDlcdTExNzNcdTExMTBcdTExNzNcdTExMDVcdTExNjZcdTExMDlcdTExNzMKXHUxMTA5XHUxMTczXHUxMTExXHUxMTY5XHUxMTBFXHUxMTczClx1MTEwOVx1MTE3M1x1MTFBRlx1MTEwRFx1MTE2NVx1MTFBOApcdTExMDlcdTExNzNcdTExQUZcdTExMTFcdTExNzNcdTExQjcKXHUxMTA5XHUxMTczXHUxMUI4XHUxMTAwXHUxMTZBXHUxMUFCClx1MTEwOVx1MTE3M1x1MTFCOFx1MTEwMFx1MTE3NQpcdTExMDlcdTExNzNcdTExQkNcdTExMDBcdTExNjJcdTExQTgKXHUxMTA5XHUxMTczXHUxMUJDXHUxMTA1XHUxMTc1Clx1MTEwOVx1MTE3M1x1MTFCQ1x1MTEwN1x1MTE2RQpcdTExMDlcdTExNzNcdTExQkNcdTExMEJcdTExNkRcdTExQkNcdTExMEVcdTExNjEKXHUxMTA5XHUxMTczXHUxMUJDXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwOVx1MTE3NVx1MTEwMFx1MTE2MVx1MTFBOApcdTExMDlcdTExNzVcdTExMDBcdTExNjFcdTExQUIKXHUxMTA5XHUxMTc1XHUxMTAwXHUxMTY5XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwRVx1MTE3NQpcdTExMDlcdTExNzVcdTExMDJcdTExNjFcdTExMDVcdTExNzVcdTExMEJcdTExNjkKXHUxMTA5XHUxMTc1XHUxMTAzXHUxMTYyXHUxMUE4Clx1MTEwOVx1MTE3NVx1MTEwNVx1MTE3NVx1MTEwQ1x1MTE3MwpcdTExMDlcdTExNzVcdTExMDZcdTExNjZcdTExQUJcdTExMTBcdTExNzMKXHUxMTA5XHUxMTc1XHUxMTA2XHUxMTc1XHUxMUFCClx1MTEwOVx1MTE3NVx1MTEwN1x1MTE2RVx1MTEwNlx1MTE2OQpcdTExMDlcdTExNzVcdTExMDlcdTExNjVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMTA5XHUxMTY1XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwOVx1MTE3M1x1MTExMFx1MTE2Nlx1MTFCNwpcdTExMDlcdTExNzVcdTExMEJcdTExNjFcdTExMDdcdTExNjVcdTExMENcdTExNzUKXHUxMTA5XHUxMTc1XHUxMTBCXHUxMTY1XHUxMTA2XHUxMTY1XHUxMTAyXHUxMTc1Clx1MTEwOVx1MTE3NVx1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMDlcdTExNzVcdTExMEJcdTExNzVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwQ1x1MTE2MVx1MTFBOApcdTExMDlcdTExNzVcdTExMENcdTExNjFcdTExQkMKXHUxMTA5XHUxMTc1XHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDlcdTExNzVcdTExMENcdTExNkVcdTExQkMKXHUxMTA5XHUxMTc1XHUxMTBDXHUxMTczXHUxMUFCClx1MTEwOVx1MTE3NVx1MTEwQ1x1MTE3NVx1MTFCOApcdTExMDlcdTExNzVcdTExMEVcdTExNjVcdTExQkMKXHUxMTA5XHUxMTc1XHUxMTEyXHUxMTYxXHUxMUI4Clx1MTEwOVx1MTE3NVx1MTExMlx1MTE2NVx1MTFCNwpcdTExMDlcdTExNzVcdTExQThcdTExMDBcdTExNkUKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTAwXHUxMTc1Clx1MTEwOVx1MTE3NVx1MTFBOFx1MTEwM1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNzVcdTExQThcdTExMDVcdTExNjNcdTExQkMKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTA1XHUxMTZEXHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwOVx1MTE3NVx1MTFBOFx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNzVcdTExQThcdTExMDhcdTExNjFcdTExQkMKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTA5XHUxMTYxClx1MTEwOVx1MTE3NVx1MTFBOFx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTExMlx1MTE2QVx1MTFBRgpcdTExMDlcdTExNzVcdTExQThcdTExMEVcdTExNjkKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTEwXHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE3NVx1MTFBOFx1MTExMVx1MTE2RVx1MTFCNwpcdTExMDlcdTExNzVcdTExQUJcdTExMDBcdTExNjkKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTAwXHUxMTcyClx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwMlx1MTE2N1x1MTFCNwpcdTExMDlcdTExNzVcdTExQUJcdTExMDZcdTExNkVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTA3XHUxMTYxXHUxMUFGClx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwN1x1MTE3NQpcdTExMDlcdTExNzVcdTExQUJcdTExMDlcdTExNjEKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTA5XHUxMTY2Clx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDlcdTExNzVcdTExQUJcdTExMENcdTExNjZcdTExMTFcdTExNkVcdTExQjcKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTBFXHUxMTY1XHUxMUJDClx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwRVx1MTE2NgpcdTExMDlcdTExNzVcdTExQUJcdTExMTJcdTExNkEKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTAwXHUxMTYxXHUxMUI3Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwMlx1MTE2MgpcdTExMDlcdTExNzVcdTExQUZcdTExMDVcdTExNjdcdTExQTgKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTA1XHUxMTY4Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMDlcdTExNzVcdTExQUZcdTExMDlcdTExNkUKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTA5XHUxMTczXHUxMUI4Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwOVx1MTE3NQpcdTExMDlcdTExNzVcdTExQUZcdTExMENcdTExNjFcdTExQkMKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwQ1x1MTE3NVx1MTFBRlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDlcdTExNzVcdTExQUZcdTExMEVcdTExNjVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTBFXHUxMTY2Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwRlx1MTE2NVx1MTFCQQpcdTExMDlcdTExNzVcdTExQUZcdTExMTBcdTExNjIKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTExXHUxMTYyClx1MTEwOVx1MTE3NVx1MTFBRlx1MTExMlx1MTE2NVx1MTFCNwpcdTExMDlcdTExNzVcdTExQUZcdTExMTJcdTExNjdcdTExQUIKXHUxMTA5XHUxMTc1XHUxMUI3XHUxMTA1XHUxMTc1Clx1MTEwOVx1MTE3NVx1MTFCN1x1MTEwN1x1MTE2RVx1MTEwNVx1MTE3M1x1MTFCNwpcdTExMDlcdTExNzVcdTExQjdcdTExMDlcdTExNjEKXHUxMTA5XHUxMTc1XHUxMUI3XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE3NVx1MTFCN1x1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMDlcdTExNzVcdTExQjdcdTExMTFcdTExNjFcdTExQUIKXHUxMTBBXHUxMTYxXHUxMUJDXHUxMTAzXHUxMTZFXHUxMUJDXHUxMTBCXHUxMTc1Clx1MTEwQVx1MTE3NVx1MTEwNVx1MTE3M1x1MTFCNwpcdTExMEFcdTExNzVcdTExMEJcdTExNjFcdTExQkEKXHUxMTBCXHUxMTYxXHUxMTAwXHUxMTYxXHUxMTBBXHUxMTc1Clx1MTEwQlx1MTE2MVx1MTEwMlx1MTE2MVx1MTEwQlx1MTE2RVx1MTFBQlx1MTEwOVx1MTE2NQpcdTExMEJcdTExNjFcdTExMDNcdTExNzNcdTExMDJcdTExNzVcdTExQjcKXHUxMTBCXHUxMTYxXHUxMTAzXHUxMTczXHUxMUFGClx1MTEwQlx1MTE2MVx1MTEwOVx1MTE3MVx1MTEwQlx1MTE2RVx1MTFCNwpcdTExMEJcdTExNjFcdTExMDlcdTExNzNcdTExMTFcdTExNjFcdTExQUZcdTExMTBcdTExNzMKXHUxMTBCXHUxMTYxXHUxMTA5XHUxMTc1XHUxMTBCXHUxMTYxClx1MTEwQlx1MTE2MVx1MTEwQlx1MTE2RVx1MTFBRlx1MTEwNVx1MTE2NQpcdTExMEJcdTExNjFcdTExMENcdTExNjVcdTExMEFcdTExNzUKXHUxMTBCXHUxMTYxXHUxMTBDXHUxMTZFXHUxMUI3XHUxMTA2XHUxMTYxClx1MTEwQlx1MTE2MVx1MTEwQ1x1MTE3NVx1MTFBOApcdTExMEJcdTExNjFcdTExMEVcdTExNzVcdTExQjcKXHUxMTBCXHUxMTYxXHUxMTExXHUxMTYxXHUxMTEwXHUxMTczClx1MTEwQlx1MTE2MVx1MTExMVx1MTE3M1x1MTEwNVx1MTE3NVx1MTEwRlx1MTE2MQpcdTExMEJcdTExNjFcdTExMTFcdTExNzNcdTExQjcKXHUxMTBCXHUxMTYxXHUxMTEyXHUxMTY5XHUxMUI4Clx1MTEwQlx1MTE2MVx1MTExMlx1MTE3M1x1MTFBQgpcdTExMEJcdTExNjFcdTExQThcdTExMDBcdTExNzUKXHUxMTBCXHUxMTYxXHUxMUE4XHUxMTA2XHUxMTY5XHUxMUJDClx1MTEwQlx1MTE2MVx1MTFBOFx1MTEwOVx1MTE2RQpcdTExMEJcdTExNjFcdTExQUJcdTExMDBcdTExNjIKXHUxMTBCXHUxMTYxXHUxMUFCXHUxMTAwXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2QQpcdTExMEJcdTExNjFcdTExQUJcdTExMDJcdTExNjIKXHUxMTBCXHUxMTYxXHUxMUFCXHUxMTAyXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE2MVx1MTFBQlx1MTEwM1x1MTE2OVx1MTFCQwpcdTExMEJcdTExNjFcdTExQUJcdTExMDdcdTExNjFcdTExQkMKXHUxMTBCXHUxMTYxXHUxMUFCXHUxMTA3XHUxMTZFClx1MTEwQlx1MTE2MVx1MTFBQlx1MTEwQ1x1MTE2RQpcdTExMEJcdTExNjFcdTExQUZcdTExMDVcdTExNkVcdTExMDZcdTExNzVcdTExMDJcdTExNzJcdTExQjcKXHUxMTBCXHUxMTYxXHUxMUFGXHUxMTBGXHUxMTY5XHUxMTBCXHUxMTY5XHUxMUFGClx1MTEwQlx1MTE2MVx1MTFCN1x1MTEwOVx1MTE3NQpcdTExMEJcdTExNjFcdTExQjdcdTExMEZcdTExNjVcdTExQkEKXHUxMTBCXHUxMTYxXHUxMUI4XHUxMTA1XHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE2MVx1MTFDMVx1MTEwMlx1MTE2MVx1MTFBRgpcdTExMEJcdTExNjFcdTExQzFcdTExMDZcdTExNkVcdTExQUIKXHUxMTBCXHUxMTYyXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2Mlx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMEJcdTExNjJcdTExQThcdTExMDlcdTExNkUKXHUxMTBCXHUxMTYyXHUxMUFGXHUxMTA3XHUxMTY1XHUxMUI3Clx1MTEwQlx1MTE2M1x1MTEwMFx1MTE2MVx1MTFBQgpcdTExMEJcdTExNjNcdTExMDNcdTExNjFcdTExQUIKXHUxMTBCXHUxMTYzXHUxMTBCXHUxMTY5XHUxMUJDClx1MTEwQlx1MTE2M1x1MTFBOFx1MTEwMFx1MTE2MVx1MTFBQgpcdTExMEJcdTExNjNcdTExQThcdTExMDBcdTExNkVcdTExQTgKXHUxMTBCXHUxMTYzXHUxMUE4XHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwQlx1MTE2M1x1MTFBOFx1MTEwOVx1MTE2RQpcdTExMEJcdTExNjNcdTExQThcdTExMENcdTExNjVcdTExQjcKXHUxMTBCXHUxMTYzXHUxMUE4XHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwQlx1MTE2M1x1MTFBOFx1MTExMlx1MTE2OVx1MTFBQlx1MTEwMlx1MTE2NwpcdTExMEJcdTExNjNcdTExQkNcdTExMDJcdTExNjdcdTExQjcKXHUxMTBCXHUxMTYzXHUxMUJDXHUxMTA1XHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE2M1x1MTFCQ1x1MTEwNlx1MTE2MVx1MTFBRgpcdTExMEJcdTExNjNcdTExQkNcdTExMDdcdTExNjJcdTExMEVcdTExNkUKXHUxMTBCXHUxMTYzXHUxMUJDXHUxMTBDXHUxMTZFClx1MTEwQlx1MTE2M1x1MTFCQ1x1MTExMVx1MTE2MQpcdTExMEJcdTExNjVcdTExMDNcdTExNkVcdTExQjcKXHUxMTBCXHUxMTY1XHUxMTA1XHUxMTY3XHUxMTBCXHUxMTZFXHUxMUI3Clx1MTEwQlx1MTE2NVx1MTEwNVx1MTE3M1x1MTFBQgpcdTExMEJcdTExNjVcdTExMENcdTExNjZcdTExQkFcdTExMDdcdTExNjFcdTExQjcKXHUxMTBCXHUxMTY1XHUxMTBEXHUxMTYyXHUxMUJCXHUxMTAzXHUxMTczXHUxMUFCClx1MTEwQlx1MTE2NVx1MTEwRFx1MTE2NVx1MTEwM1x1MTE2MVx1MTEwMFx1MTE2MQpcdTExMEJcdTExNjVcdTExMERcdTExNjVcdTExQUJcdTExMENcdTExNzUKXHUxMTBCXHUxMTY1XHUxMUFCXHUxMTAyXHUxMTc1Clx1MTEwQlx1MTE2NVx1MTFBQlx1MTEwM1x1MTE2NVx1MTFBOApcdTExMEJcdTExNjVcdTExQUJcdTExMDVcdTExNjlcdTExQUIKXHUxMTBCXHUxMTY1XHUxMUFCXHUxMTBCXHUxMTY1Clx1MTEwQlx1MTE2NVx1MTFBRlx1MTEwMFx1MTE2RVx1MTFBRgpcdTExMEJcdTExNjVcdTExQUZcdTExMDVcdTExNzNcdTExQUIKXHUxMTBCXHUxMTY1XHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2NVx1MTFBRlx1MTExMVx1MTE3NVx1MTFCQQpcdTExMEJcdTExNjVcdTExQjdcdTExMDZcdTExNjEKXHUxMTBCXHUxMTY1XHUxMUI4XHUxMTA2XHUxMTZFClx1MTEwQlx1MTE2NVx1MTFCOFx1MTEwQ1x1MTE2OVx1MTFCQwpcdTExMEJcdTExNjVcdTExQjhcdTExMEVcdTExNjYKXHUxMTBCXHUxMTY1XHUxMUJDXHUxMTAzXHUxMTY1XHUxMUJDXHUxMTBCXHUxMTc1Clx1MTEwQlx1MTE2NVx1MTFCQ1x1MTEwNlx1MTE2MVx1MTFCQwpcdTExMEJcdTExNjVcdTExQkNcdTExMTBcdTExNjVcdTExMDVcdTExNzUKXHUxMTBCXHUxMTY1XHUxMUJEXHUxMTAwXHUxMTczXHUxMTBDXHUxMTY2Clx1MTEwQlx1MTE2Nlx1MTEwMlx1MTE2NVx1MTEwQ1x1MTE3NQpcdTExMEJcdTExNjZcdTExMEJcdTExNjVcdTExMEZcdTExNjVcdTExQUIKXHUxMTBCXHUxMTY2XHUxMUFCXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwMFx1MTE2NVx1MTFBQgpcdTExMEJcdTExNjdcdTExMDBcdTExNjlcdTExMDlcdTExNjJcdTExQkMKXHUxMTBCXHUxMTY3XHUxMTAwXHUxMTZBXHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwMFx1MTE2RVx1MTFBQgpcdTExMEJcdTExNjdcdTExMDBcdTExNkZcdTExQUIKXHUxMTBCXHUxMTY3XHUxMTAzXHUxMTYyXHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwQlx1MTE2N1x1MTEwM1x1MTE2NVx1MTFCMgpcdTExMEJcdTExNjdcdTExMDNcdTExNjlcdTExQkNcdTExMDlcdTExNjJcdTExQkMKXHUxMTBCXHUxMTY3XHUxMTAzXHUxMTczXHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwNVx1MTE2OVx1MTFBQgpcdTExMEJcdTExNjdcdTExMDVcdTExNzNcdTExQjcKXHUxMTBCXHUxMTY3XHUxMTA5XHUxMTY1XHUxMUJBClx1MTEwQlx1MTE2N1x1MTEwOVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNjdcdTExMEJcdTExNkFcdTExQkMKXHUxMTBCXHUxMTY3XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwQ1x1MTE2NVx1MTFBQlx1MTExMlx1MTE3NQpcdTExMEJcdTExNjdcdTExMENcdTExNzVcdTExQThcdTExMEJcdTExNkZcdTExQUIKXHUxMTBCXHUxMTY3XHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwQlx1MTE2N1x1MTExMlx1MTE2Mlx1MTFCQwpcdTExMEJcdTExNjdcdTExQThcdTExMDlcdTExNjEKXHUxMTBCXHUxMTY3XHUxMUE4XHUxMTA5XHUxMTc1Clx1MTEwQlx1MTE2N1x1MTFBOFx1MTExMlx1MTE2MVx1MTFBRgpcdTExMEJcdTExNjdcdTExQUJcdTExMDBcdTExNjdcdTExQUYKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTAwXHUxMTZFClx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwMFx1MTE3M1x1MTFBOApcdTExMEJcdTExNjdcdTExQUJcdTExMDBcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTA1XHUxMTYxXHUxMUE4Clx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMEJcdTExNjdcdTExQUJcdTExMDlcdTExNjYKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwOVx1MTE3M1x1MTFCOApcdTExMEJcdTExNjdcdTExQUJcdTExMEJcdTExNjIKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTBCXHUxMTY4XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMEJcdTExNjdcdTExQUJcdTExMENcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTBDXHUxMTZFClx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwRVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNjdcdTExQUJcdTExMTFcdTExNzVcdTExQUYKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTEyXHUxMTYxXHUxMUI4Clx1MTEwQlx1MTE2N1x1MTFBQlx1MTExMlx1MTE3MgpcdTExMEJcdTExNjdcdTExQUZcdTExMDBcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUFGXHUxMTA2XHUxMTYyClx1MTEwQlx1MTE2N1x1MTFBRlx1MTEwOVx1MTE2QwpcdTExMEJcdTExNjdcdTExQUZcdTExMDlcdTExNzVcdTExQjdcdTExMTJcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUFGXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwQlx1MTE2N1x1MTFBRlx1MTEwRVx1MTE2MQpcdTExMEJcdTExNjdcdTExQUZcdTExMTJcdTExNzNcdTExQUYKXHUxMTBCXHUxMTY3XHUxMUI3XHUxMTA1XHUxMTY3Clx1MTEwQlx1MTE2N1x1MTFCOFx1MTEwOVx1MTE2NQpcdTExMEJcdTExNjdcdTExQkNcdTExMDBcdTExNkVcdTExQTgKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTAyXHUxMTYxXHUxMUI3Clx1MTEwQlx1MTE2N1x1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQwpcdTExMEJcdTExNjdcdTExQkNcdTExMEJcdTExNjNcdTExQkMKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTBCXHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE2N1x1MTFCQ1x1MTEwQlx1MTE2RVx1MTFCQwpcdTExMEJcdTExNjdcdTExQkNcdTExMEJcdTExNkZcdTExQUJcdTExMTJcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTYxClx1MTEwQlx1MTE2N1x1MTFCQ1x1MTExMlx1MTE2M1x1MTFCQwpcdTExMEJcdTExNjdcdTExQkNcdTExMTJcdTExNjlcdTExQUIKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTZBClx1MTEwQlx1MTE2N1x1MTFDMVx1MTEwMFx1MTE2RVx1MTEwNVx1MTE3NQpcdTExMEJcdTExNjdcdTExQzFcdTExMDdcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY3XHUxMUMxXHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwQlx1MTE2OFx1MTEwMFx1MTE2MVx1MTFCNwpcdTExMEJcdTExNjhcdTExMDBcdTExNzNcdTExQjcKXHUxMTBCXHUxMTY4XHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwQlx1MTE2OFx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMEJcdTExNjhcdTExMDlcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY4XHUxMTA5XHUxMTY1XHUxMUFCClx1MTEwQlx1MTE2OFx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNjhcdTExMDlcdTExNzNcdTExQjgKXHUxMTBCXHUxMTY4XHUxMTA5XHUxMTc1XHUxMUE4XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwQlx1MTE2OFx1MTEwQlx1MTE2M1x1MTFBOApcdTExMEJcdTExNjhcdTExMENcdTExNjVcdTExQUIKXHUxMTBCXHUxMTY4XHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwQlx1MTE2OFx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMEJcdTExNjhcdTExMEZcdTExNjVcdTExQUJcdTExMDNcdTExNjIKXHUxMTBCXHUxMTY4XHUxMUJBXHUxMTAyXHUxMTYxXHUxMUFGClx1MTEwQlx1MTE2OVx1MTEwMlx1MTE3M1x1MTFBRgpcdTExMEJcdTExNjlcdTExMDVcdTExNjFcdTExQTgKXHUxMTBCXHUxMTY5XHUxMTA1XHUxMTYyXHUxMUJBXHUxMTAzXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTYxXHUxMUFCClx1MTEwQlx1MTE2OVx1MTEwNVx1MTE2Nlx1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMEJcdTExNjlcdTExMDVcdTExNjlcdTExMENcdTExNzUKXHUxMTBCXHUxMTY5XHUxMTA1XHUxMTczXHUxMUFCXHUxMTA3XHUxMTYxXHUxMUFGClx1MTEwQlx1MTE2OVx1MTEwN1x1MTE3M1x1MTFBQgpcdTExMEJcdTExNjlcdTExMDlcdTExNzVcdTExQjgKXHUxMTBCXHUxMTY5XHUxMTBCXHUxMTY3XHUxMUI3Clx1MTEwQlx1MTE2OVx1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMEJcdTExNjlcdTExMENcdTExNjVcdTExQUIKXHUxMTBCXHUxMTY5XHUxMTBDXHUxMTc1XHUxMUE4Clx1MTEwQlx1MTE2OVx1MTEwQ1x1MTE3NVx1MTFCQ1x1MTEwQlx1MTE2NQpcdTExMEJcdTExNjlcdTExMTFcdTExNjZcdTExMDVcdTExNjEKXHUxMTBCXHUxMTY5XHUxMTExXHUxMTc1XHUxMTA5XHUxMTczXHUxMTEwXHUxMTY2XHUxMUFGClx1MTEwQlx1MTE2OVx1MTExMlx1MTE3NVx1MTEwNVx1MTE2NwpcdTExMEJcdTExNjlcdTExQThcdTExMDlcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY5XHUxMUE4XHUxMTA5XHUxMTZFXHUxMTA5XHUxMTZFClx1MTEwQlx1MTE2OVx1MTFBQlx1MTEwMFx1MTE2MVx1MTFCRApcdTExMEJcdTExNjlcdTExQUJcdTExMDVcdTExNjFcdTExMEJcdTExNzVcdTExQUIKXHUxMTBCXHUxMTY5XHUxMUFCXHUxMTA2XHUxMTY5XHUxMUI3Clx1MTEwQlx1MTE2OVx1MTFBQlx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTEwQlx1MTE3NVx1MTFBRgpcdTExMEJcdTExNjlcdTExQUJcdTExMTBcdTExNjlcdTExQkMKXHUxMTBCXHUxMTY5XHUxMUFGXHUxMTAwXHUxMTYxXHUxMTBCXHUxMTczXHUxMUFGClx1MTEwQlx1MTE2OVx1MTFBRlx1MTEwNVx1MTE3NVx1MTFCN1x1MTExMVx1MTE3NVx1MTFBOApcdTExMEJcdTExNjlcdTExQUZcdTExMTJcdTExNjIKXHUxMTBCXHUxMTY5XHUxMUJBXHUxMTBFXHUxMTYxXHUxMTA1XHUxMTc1XHUxMUI3Clx1MTEwQlx1MTE2QVx1MTEwQlx1MTE3NVx1MTEwOVx1MTE2N1x1MTEwRVx1MTE3MwpcdTExMEJcdTExNkFcdTExMEJcdTExNzVcdTExQUIKXHUxMTBCXHUxMTZBXHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwQlx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBQgpcdTExMEJcdTExNkFcdTExQkNcdTExMDdcdTExNzUKXHUxMTBCXHUxMTZBXHUxMUJDXHUxMTBDXHUxMTYxClx1MTEwQlx1MTE2Qlx1MTEwMlx1MTE2M1x1MTExMlx1MTE2MVx1MTEwNlx1MTE2N1x1MTFBQgpcdTExMEJcdTExNkJcdTExQUJcdTExMENcdTExNzUKXHUxMTBCXHUxMTZDXHUxMTAwXHUxMTYxXHUxMUJBXHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwQlx1MTE2Q1x1MTEwMFx1MTE2RVx1MTFBOApcdTExMEJcdTExNkNcdTExMDVcdTExNjlcdTExMEJcdTExNkVcdTExQjcKXHUxMTBCXHUxMTZDXHUxMTA5XHUxMTYxXHUxMUI3XHUxMTBFXHUxMTY5XHUxMUFCClx1MTEwQlx1MTE2Q1x1MTEwRVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNkNcdTExMEVcdTExNzVcdTExQjcKXHUxMTBCXHUxMTZDXHUxMTEyXHUxMTYxXHUxMUFGXHUxMTA2XHUxMTY1XHUxMTAyXHUxMTc1Clx1MTEwQlx1MTE2Q1x1MTFBQlx1MTEwN1x1MTE2MVx1MTFBRgpcdTExMEJcdTExNkNcdTExQUJcdTExMDlcdTExNjlcdTExQUIKXHUxMTBCXHUxMTZDXHUxMUFCXHUxMTBEXHUxMTY5XHUxMUE4Clx1MTEwQlx1MTE2RFx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMEJcdTExNkRcdTExMEJcdTExNzVcdTExQUYKXHUxMTBCXHUxMTZEXHUxMTBDXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2RFx1MTEwRVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNkRcdTExQkNcdTExMDBcdTExNzUKXHUxMTBCXHUxMTZEXHUxMUJDXHUxMTA5XHUxMTY1Clx1MTEwQlx1MTE2RFx1MTFCQ1x1MTEwQlx1MTE2NQpcdTExMEJcdTExNkVcdTExMDlcdTExNjFcdTExQUIKXHUxMTBCXHUxMTZFXHUxMTA5XHUxMTY1XHUxMUFCClx1MTEwQlx1MTE2RVx1MTEwOVx1MTE3M1x1MTFCQwpcdTExMEJcdTExNkVcdTExMEJcdTExNjdcdTExQUJcdTExMTJcdTExNzUKXHUxMTBCXHUxMTZFXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwQlx1MTE2RVx1MTEwRVx1MTE2Nlx1MTEwMFx1MTE2RVx1MTFBOApcdTExMEJcdTExNkVcdTExMTFcdTExNjdcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUFCXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwQlx1MTE2RVx1MTFBQlx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMEJcdTExNkVcdTExQUJcdTExMDdcdTExNjFcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUFCClx1MTEwQlx1MTE2RVx1MTFBQlx1MTExMlx1MTE2Mlx1MTFCQwpcdTExMEJcdTExNkVcdTExQUZcdTExMDlcdTExNjFcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2RVx1MTFCN1x1MTEwQ1x1MTE3NVx1MTFBOFx1MTEwQlx1MTE3NVx1MTFCNwpcdTExMEJcdTExNkVcdTExQkFcdTExMEJcdTExNjVcdTExMDVcdTExNzNcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUJBXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2Rlx1MTEwMlx1MTE2MVx1MTFBOApcdTExMEJcdTExNkZcdTExQUJcdTExMDBcdTExNjkKXHUxMTBCXHUxMTZGXHUxMUFCXHUxMTA1XHUxMTYyClx1MTEwQlx1MTE2Rlx1MTFBQlx1MTEwOVx1MTE2NQpcdTExMEJcdTExNkZcdTExQUJcdTExMDlcdTExNkVcdTExQkNcdTExMEJcdTExNzUKXHUxMTBCXHUxMTZGXHUxMUFCXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2Rlx1MTFBQlx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMEJcdTExNkZcdTExQUJcdTExMTFcdTExNzVcdTExMDlcdTExNzMKXHUxMTBCXHUxMTZGXHUxMUFGXHUxMTAwXHUxMTczXHUxMUI4Clx1MTEwQlx1MTE2Rlx1MTFBRlx1MTEwM1x1MTE3M1x1MTEwRlx1MTE2NVx1MTFCOApcdTExMEJcdTExNkZcdTExQUZcdTExMDlcdTExNjYKXHUxMTBCXHUxMTZGXHUxMUFGXHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQlx1MTE3MFx1MTEwQlx1MTE3NVx1MTExMFx1MTE2NQpcdTExMEJcdTExNzFcdTExMDdcdTExNjFcdTExQUIKXHUxMTBCXHUxMTcxXHUxMTA3XHUxMTY1XHUxMUI4Clx1MTEwQlx1MTE3MVx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNzFcdTExMEJcdTExNkZcdTExQUIKXHUxMTBCXHUxMTcxXHUxMTEyXHUxMTY1XHUxMUI3Clx1MTEwQlx1MTE3MVx1MTExMlx1MTE2N1x1MTFCOApcdTExMEJcdTExNzFcdTExQkFcdTExMDlcdTExNjFcdTExMDVcdTExNjFcdTExQjcKXHUxMTBCXHUxMTcyXHUxMTAyXHUxMTYxXHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwQlx1MTE3Mlx1MTEwNVx1MTE2NVx1MTFCOApcdTExMEJcdTExNzJcdTExMDZcdTExNjdcdTExQkMKXHUxMTBCXHUxMTcyXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwQlx1MTE3Mlx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMEJcdTExNzJcdTExMENcdTExNjVcdTExQTgKXHUxMTBCXHUxMTcyXHUxMTBFXHUxMTc1XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQlx1MTE3Mlx1MTExMlx1MTE2MVx1MTFBOApcdTExMEJcdTExNzJcdTExMTJcdTExNjJcdTExQkMKXHUxMTBCXHUxMTcyXHUxMTEyXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE3Mlx1MTFBOFx1MTEwMFx1MTE2RVx1MTFBQgpcdTExMEJcdTExNzJcdTExQThcdTExMDlcdTExNjFcdTExQkMKXHUxMTBCXHUxMTcyXHUxMUE4XHUxMTA5XHUxMTc1XHUxMUI4Clx1MTEwQlx1MTE3Mlx1MTFBOFx1MTEwRVx1MTE2NgpcdTExMEJcdTExNzNcdTExQUJcdTExMTJcdTExNjJcdTExQkMKXHUxMTBCXHUxMTczXHUxMUI3XHUxMTA1XHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE3M1x1MTFCN1x1MTEwNVx1MTE2RApcdTExMEJcdTExNzNcdTExQjdcdTExMDdcdTExNjFcdTExQUIKXHUxMTBCXHUxMTczXHUxMUI3XHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwQlx1MTE3M1x1MTFCN1x1MTEwOVx1MTE3NVx1MTFBOApcdTExMEJcdTExNzNcdTExQjdcdTExMEJcdTExNjFcdTExQTgKXHUxMTBCXHUxMTczXHUxMUI3XHUxMTBDXHUxMTZFClx1MTEwQlx1MTE3NFx1MTEwMFx1MTE2N1x1MTFBQgpcdTExMEJcdTExNzRcdTExMDJcdTExNjlcdTExQUIKXHUxMTBCXHUxMTc0XHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQlx1MTE3NFx1MTEwN1x1MTE2OVx1MTFBOApcdTExMEJcdTExNzRcdTExMDlcdTExNzVcdTExQTgKXHUxMTBCXHUxMTc0XHUxMTA5XHUxMTc1XHUxMUI3Clx1MTEwQlx1MTE3NFx1MTEwQlx1MTE2Q1x1MTEwNVx1MTE2OQpcdTExMEJcdTExNzRcdTExMEJcdTExNkRcdTExQTgKXHUxMTBCXHUxMTc0XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQlx1MTE3NFx1MTExMlx1MTE2MVx1MTFBOApcdTExMEJcdTExNzVcdTExMDBcdTExNjVcdTExQkEKXHUxMTBCXHUxMTc1XHUxMTAwXHUxMTY5XHUxMUJBClx1MTEwQlx1MTE3NVx1MTEwMlx1MTE2N1x1MTFCNwpcdTExMEJcdTExNzVcdTExMDJcdTExNjlcdTExQjcKXHUxMTBCXHUxMTc1XHUxMTAzXHUxMTYxXHUxMUFGClx1MTEwQlx1MTE3NVx1MTEwM1x1MTE2Mlx1MTEwNVx1MTE2OQpcdTExMEJcdTExNzVcdTExMDNcdTExNjlcdTExQkMKXHUxMTBCXHUxMTc1XHUxMTA1XHUxMTY1XHUxMUMyXHUxMTAwXHUxMTY2Clx1MTEwQlx1MTE3NVx1MTEwNVx1MTE2N1x1MTFBOFx1MTEwOVx1MTE2NQpcdTExMEJcdTExNzVcdTExMDVcdTExNjlcdTExQUJcdTExMENcdTExNjVcdTExQTgKXHUxMTBCXHUxMTc1XHUxMTA1XHUxMTczXHUxMUI3Clx1MTEwQlx1MTE3NVx1MTEwNlx1MTE3NVx1MTFBQgpcdTExMEJcdTExNzVcdTExMDdcdTExNjFcdTExQUZcdTExMDlcdTExNjkKXHUxMTBCXHUxMTc1XHUxMTA3XHUxMTY3XHUxMUFGClx1MTEwQlx1MTE3NVx1MTEwN1x1MTE2RVx1MTFBRgpcdTExMEJcdTExNzVcdTExMDhcdTExNjFcdTExQUYKXHUxMTBCXHUxMTc1XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwQlx1MTE3NVx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNzVcdTExMDlcdTExNzNcdTExQUYKXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTYzXHUxMTAwXHUxMTc1Clx1MTEwQlx1MTE3NVx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMEJcdTExNzVcdTExMEJcdTExNkVcdTExQkEKXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTZGXHUxMUFGClx1MTEwQlx1MTE3NVx1MTEwQlx1MTE3M1x1MTFBOFx1MTEwMFx1MTE2OQpcdTExMEJcdTExNzVcdTExMEJcdTExNzVcdTExQTgKXHUxMTBCXHUxMTc1XHUxMTBDXHUxMTY1XHUxMUFCClx1MTEwQlx1MTE3NVx1MTEwQ1x1MTE2RVx1MTFCQwpcdTExMEJcdTExNzVcdTExMTBcdTExNzNcdTExQUVcdTExMDJcdTExNjFcdTExQUYKXHUxMTBCXHUxMTc1XHUxMTEwXHUxMTczXHUxMUFGClx1MTEwQlx1MTE3NVx1MTExMlx1MTE2OVx1MTFBQgpcdTExMEJcdTExNzVcdTExQUJcdTExMDBcdTExNjFcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE2OVx1MTFCQwpcdTExMEJcdTExNzVcdTExQUJcdTExMDBcdTExNkUKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTczXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE3NQpcdTExMEJcdTExNzVcdTExQUJcdTExMDNcdTExNjkKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTA1XHUxMTcyClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMEJcdTExNzVcdTExQUJcdTExMDlcdTExNjJcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTA5XHUxMTZCClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwQlx1MTE2N1x1MTFBQgpcdTExMEJcdTExNzVcdTExQUJcdTExMEJcdTExNkZcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTBDXHUxMTYyClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwQ1x1MTE2OVx1MTFCQwpcdTExMEJcdTExNzVcdTExQUJcdTExMEVcdTExNjVcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTBFXHUxMTY2Clx1MTEwQlx1MTE3NVx1MTFBQlx1MTExMFx1MTE2NVx1MTEwMlx1MTE2Nlx1MTFCQQpcdTExMEJcdTExNzVcdTExQUJcdTExMTJcdTExNjEKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTEyXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwMFx1MTE2OVx1MTFCOApcdTExMEJcdTExNzVcdTExQUZcdTExMDBcdTExNzUKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTAzXHUxMTYxXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwM1x1MTE2MgpcdTExMEJcdTExNzVcdTExQUZcdTExMDNcdTExNzNcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTA3XHUxMTYxXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwN1x1MTE2OVx1MTFBQgpcdTExMEJcdTExNzVcdTExQUZcdTExMDdcdTExNkUKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwOVx1MTE2Mlx1MTFCQwpcdTExMEJcdTExNzVcdTExQUZcdTExMDlcdTExNjlcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMEJcdTExNzVcdTExQUZcdTExMENcdTExNjVcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTBDXHUxMTY5XHUxMUJDClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwQ1x1MTE2RVx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMEJcdTExNzVcdTExQUZcdTExMERcdTExNzVcdTExQTgKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTBFXHUxMTY2Clx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwRVx1MTE3NQpcdTExMEJcdTExNzVcdTExQUZcdTExMTJcdTExNjJcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTEyXHUxMTZDXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQlx1MTE3NVx1MTFCN1x1MTEwMFx1MTE3M1x1MTFCNwpcdTExMEJcdTExNzVcdTExQjdcdTExMDZcdTExNkUKXHUxMTBCXHUxMTc1XHUxMUI4XHUxMTAzXHUxMTYyClx1MTEwQlx1MTE3NVx1MTFCOFx1MTEwNVx1MTE2N1x1MTFBOApcdTExMEJcdTExNzVcdTExQjhcdTExMDZcdTExNjFcdTExQkEKXHUxMTBCXHUxMTc1XHUxMUI4XHUxMTA5XHUxMTYxClx1MTEwQlx1MTE3NVx1MTFCOFx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNzVcdTExQjhcdTExMDlcdTExNzUKXHUxMTBCXHUxMTc1XHUxMUI4XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFCOFx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMEJcdTExNzVcdTExQjhcdTExMTJcdTExNjFcdTExQTgKXHUxMTBDXHUxMTYxXHUxMTAwXHUxMTYxXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQ1x1MTE2MVx1MTEwMFx1MTE2N1x1MTFBOApcdTExMENcdTExNjFcdTExMDBcdTExNzNcdTExQTgKXHUxMTBDXHUxMTYxXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2MVx1MTEwNVx1MTE2MVx1MTFCQwpcdTExMENcdTExNjFcdTExMDdcdTExNkVcdTExMDlcdTExNzVcdTExQjcKXHUxMTBDXHUxMTYxXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwQ1x1MTE2MVx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMENcdTExNjFcdTExMEJcdTExNjdcdTExQUIKXHUxMTBDXHUxMTYxXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQ1x1MTE2MVx1MTEwQlx1MTE3Mlx1MTFBRgpcdTExMENcdTExNjFcdTExMENcdTExNjVcdTExQUJcdTExMDBcdTExNjUKXHUxMTBDXHUxMTYxXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwQ1x1MTE2MVx1MTEwQ1x1MTE2OVx1MTFBQlx1MTEwOVx1MTE3NVx1MTFCNwpcdTExMENcdTExNjFcdTExMTFcdTExNjFcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUE4XHUxMTAwXHUxMTYxClx1MTEwQ1x1MTE2MVx1MTFBOFx1MTEwMlx1MTE2N1x1MTFBQgpcdTExMENcdTExNjFcdTExQThcdTExMDlcdTExNjVcdTExQkMKXHUxMTBDXHUxMTYxXHUxMUE4XHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwQ1x1MTE2MVx1MTFBOFx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMENcdTExNjFcdTExQThcdTExMEJcdTExNzNcdTExQUJcdTExMDRcdTExNjFcdTExQUYKXHUxMTBDXHUxMTYxXHUxMUE4XHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwQ1x1MTE2MVx1MTFBQlx1MTEwM1x1MTE3NQpcdTExMENcdTExNjFcdTExQUJcdTExMDRcdTExNzNcdTExQTgKXHUxMTBDXHUxMTYxXHUxMUFCXHUxMTBFXHUxMTc1Clx1MTEwQ1x1MTE2MVx1MTFBRlx1MTEwNlx1MTE2OVx1MTFCQQpcdTExMENcdTExNjFcdTExQjdcdTExMDFcdTExNjFcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTZFXHUxMTEyXHUxMTYxXHUxMUI3Clx1MTEwQ1x1MTE2MVx1MTFCN1x1MTEwOVx1MTE3NQpcdTExMENcdTExNjFcdTExQjdcdTExMEJcdTExNjlcdTExQkEKXHUxMTBDXHUxMTYxXHUxMUI3XHUxMTBDXHUxMTYxXHUxMTA1XHUxMTc1Clx1MTEwQ1x1MTE2MVx1MTFCOFx1MTEwQ1x1MTE3NQpcdTExMENcdTExNjFcdTExQkNcdTExMDBcdTExNkFcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3NVx1MTEwMFx1MTE2MVx1MTFBQgpcdTExMENcdTExNjFcdTExQkNcdTExMDVcdTExNjIKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA1XHUxMTY4Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwNVx1MTE3MwpcdTExMENcdTExNjFcdTExQkNcdTExMDZcdTExNjEKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA2XHUxMTY3XHUxMUFCClx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwNlx1MTE2OQpcdTExMENcdTExNjFcdTExQkNcdTExMDZcdTExNzUKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA3XHUxMTc1Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMENcdTExNjFcdTExQkNcdTExMDlcdTExNjkKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2Mlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMENcdTExNjFcdTExQkNcdTExMEJcdTExNzVcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwRVx1MTE2MQpcdTExMENcdTExNjFcdTExQkNcdTExMTJcdTExNjFcdTExQThcdTExMDBcdTExNzNcdTExQjcKXHUxMTBDXHUxMTYyXHUxMTAyXHUxMTczXHUxMUJDClx1MTEwQ1x1MTE2Mlx1MTEwOFx1MTE2MVx1MTFBRlx1MTEwNVx1MTE3NQpcdTExMENcdTExNjJcdTExMDlcdTExNjFcdTExQUIKXHUxMTBDXHUxMTYyXHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwQ1x1MTE2Mlx1MTEwQ1x1MTE2MVx1MTFBOFx1MTEwMlx1MTE2N1x1MTFBQgpcdTExMENcdTExNjJcdTExMENcdTExNjVcdTExQkMKXHUxMTBDXHUxMTYyXHUxMTBFXHUxMTYyXHUxMTAwXHUxMTc1Clx1MTEwQ1x1MTE2Mlx1MTExMVx1MTE2MVx1MTFBQgpcdTExMENcdTExNjJcdTExMTJcdTExNjFcdTExQTgKXHUxMTBDXHUxMTYyXHUxMTEyXHUxMTZBXHUxMUFGXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTEwMFx1MTE2NVx1MTFCQQpcdTExMENcdTExNjVcdTExMDBcdTExNjlcdTExMDVcdTExNzUKXHUxMTBDXHUxMTY1XHUxMTAwXHUxMTY5XHUxMUJBClx1MTEwQ1x1MTE2NVx1MTEwMlx1MTE2N1x1MTFBOApcdTExMENcdTExNjVcdTExMDVcdTExNjVcdTExQUIKXHUxMTBDXHUxMTY1XHUxMTA1XHUxMTY1XHUxMUMyXHUxMTAwXHUxMTY2Clx1MTEwQ1x1MTE2NVx1MTEwN1x1MTE2NVx1MTFBQgpcdTExMENcdTExNjVcdTExMEJcdTExNkVcdTExQUYKXHUxMTBDXHUxMTY1XHUxMTBDXHUxMTY1XHUxMUFGXHUxMTA1XHUxMTY5Clx1MTEwQ1x1MTE2NVx1MTEwRVx1MTE2RVx1MTFBOApcdTExMENcdTExNjVcdTExQThcdTExMDBcdTExNzNcdTExQTgKXHUxMTBDXHUxMTY1XHUxMUE4XHUxMTAzXHUxMTYxXHUxMUJDXHUxMTEyXHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFBOFx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMENcdTExNjVcdTExQThcdTExMEJcdTExNkRcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUE4XHUxMTBCXHUxMTczXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwMFx1MTE2MgpcdTExMENcdTExNjVcdTExQUJcdTExMDBcdTExNjlcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTAwXHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMENcdTExNjVcdTExQUJcdTExMDVcdTExNjFcdTExMDNcdTExNjkKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTA2XHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMENcdTExNjVcdTExQUJcdTExMDdcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTA3XHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwOVx1MTE2NgpcdTExMENcdTExNjVcdTExQUJcdTExMDlcdTExNzUKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwQ1x1MTE2MQpcdTExMENcdTExNjVcdTExQUJcdTExMENcdTExNjJcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTBDXHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwRVx1MTE2NVx1MTFBRgpcdTExMENcdTExNjVcdTExQUJcdTExMEVcdTExNjYKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTEwXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTExMlx1MTE2NwpcdTExMENcdTExNjVcdTExQUJcdTExMTJcdTExNkUKXHUxMTBDXHUxMTY1XHUxMUFGXHUxMTAzXHUxMTYyClx1MTEwQ1x1MTE2NVx1MTFBRlx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMENcdTExNjVcdTExQUZcdTExMDdcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUFGXHUxMTBCXHUxMTYzXHUxMUE4Clx1MTEwQ1x1MTE2NVx1MTFBRlx1MTEwRVx1MTE2MQpcdTExMENcdTExNjVcdTExQjdcdTExMDBcdTExNjVcdTExQjcKXHUxMTBDXHUxMTY1XHUxMUI3XHUxMTA5XHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFCN1x1MTEwOVx1MTE3NVx1MTFCNwpcdTExMENcdTExNjVcdTExQjdcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUI3XHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwQ1x1MTE2NVx1MTFCN1x1MTEwRVx1MTE2MQpcdTExMENcdTExNjVcdTExQjhcdTExMDBcdTExNzNcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUI4XHUxMTA5XHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFCOFx1MTEwRVx1MTE2OVx1MTFBOApcdTExMENcdTExNjVcdTExQkFcdTExMDBcdTExNjFcdTExMDVcdTExNjFcdTExQTgKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTAwXHUxMTY1XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwM1x1MTE2OQpcdTExMENcdTExNjVcdTExQkNcdTExMDVcdTExNzJcdTExMENcdTExNjFcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA1XHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwNlx1MTE2MVx1MTFBRgpcdTExMENcdTExNjVcdTExQkNcdTExMDZcdTExNjdcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTFBQlx1MTEwM1x1MTE2MgpcdTExMENcdTExNjVcdTExQkNcdTExMDdcdTExNjkKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA3XHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwN1x1MTE3NQpcdTExMENcdTExNjVcdTExQkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwQlx1MTE2OQpcdTExMENcdTExNjVcdTExQkNcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwQ1x1MTE3NQpcdTExMENcdTExNjVcdTExQkNcdTExMEVcdTExNzUKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTEyXHUxMTZBXHUxMUE4XHUxMTEyXHUxMTc1Clx1MTEwQ1x1MTE2Nlx1MTEwMFx1MTE2OVx1MTFCQwpcdTExMENcdTExNjZcdTExMDBcdTExNkFcdTExMENcdTExNjVcdTExQjcKXHUxMTBDXHUxMTY2XHUxMTAzXHUxMTYyXHUxMTA1XHUxMTY5Clx1MTEwQ1x1MTE2Nlx1MTEwNlx1MTE2OVx1MTFBOApcdTExMENcdTExNjZcdTExMDdcdTExNjFcdTExQUYKXHUxMTBDXHUxMTY2XHUxMTA3XHUxMTY1XHUxMUI4Clx1MTEwQ1x1MTE2Nlx1MTEwOVx1MTE2MVx1MTFCQVx1MTEwMlx1MTE2MVx1MTFBRgpcdTExMENcdTExNjZcdTExMEJcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY2XHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQ1x1MTE2Nlx1MTEwQ1x1MTE2MVx1MTFBOApcdTExMENcdTExNjZcdTExMENcdTExNkVcdTExMDNcdTExNjkKXHUxMTBDXHUxMTY2XHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwQ1x1MTE2Nlx1MTExMVx1MTE2RVx1MTFCNwpcdTExMENcdTExNjZcdTExMTJcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY5XHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwQ1x1MTE2OVx1MTEwMFx1MTE2NVx1MTFBQgpcdTExMENcdTExNjlcdTExMDBcdTExNzNcdTExQjcKXHUxMTBDXHUxMTY5XHUxMTAwXHUxMTc1XHUxMUJDClx1MTEwQ1x1MTE2OVx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMENcdTExNjlcdTExMDZcdTExNzVcdTExMDVcdTExNkQKXHUxMTBDXHUxMTY5XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2OVx1MTEwOVx1MTE2NVx1MTFBQgpcdTExMENcdTExNjlcdTExMEJcdTExNkRcdTExQkNcdTExMTJcdTExNzUKXHUxMTBDXHUxMTY5XHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwQ1x1MTE2OVx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMENcdTExNjlcdTExMENcdTExNzVcdTExQTgKXHUxMTBDXHUxMTY5XHUxMUFCXHUxMTAzXHUxMTYyXHUxMUJBXHUxMTA2XHUxMTYxXHUxMUFGClx1MTEwQ1x1MTE2OVx1MTFBQlx1MTEwQ1x1MTE2MgpcdTExMENcdTExNjlcdTExQUZcdTExMEJcdTExNjVcdTExQjgKXHUxMTBDXHUxMTY5XHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTEwMFx1MTE2RApcdTExMENcdTExNjlcdTExQkNcdTExMDVcdTExNjkKXHUxMTBDXHUxMTY5XHUxMUJDXHUxMTA1XHUxMTcyClx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTEwOVx1MTE2OVx1MTEwNVx1MTE3NQpcdTExMENcdTExNjlcdTExQkNcdTExMEJcdTExNjVcdTExQjhcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTY5XHUxMUJDXHUxMTBDXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTExMlx1MTE2MVx1MTFCOApcdTExMENcdTExNkFcdTExMDlcdTExNjVcdTExQTgKXHUxMTBDXHUxMTZDXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQ1x1MTE2RVx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMENcdTExNkVcdTExMDVcdTExNzNcdTExQjcKXHUxMTBDXHUxMTZFXHUxMTA2XHUxMTYxXHUxMUFGClx1MTEwQ1x1MTE2RVx1MTEwNlx1MTE2NVx1MTEwMlx1MTE3NQpcdTExMENcdTExNkVcdTExMDZcdTExNjVcdTExQTgKXHUxMTBDXHUxMTZFXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2RVx1MTEwNlx1MTE3NVx1MTFBQgpcdTExMENcdTExNkVcdTExMDdcdTExNjFcdTExQkMKXHUxMTBDXHUxMTZFXHUxMTA3XHUxMTY3XHUxMUFCClx1MTEwQ1x1MTE2RVx1MTEwOVx1MTE3NVx1MTFBOApcdTExMENcdTExNkVcdTExMEJcdTExNzVcdTExQUIKXHUxMTBDXHUxMTZFXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQ1x1MTE2RVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMENcdTExNkVcdTExMENcdTExNjVcdTExQUJcdTExMENcdTExNjEKXHUxMTBDXHUxMTZFXHUxMTEwXHUxMTYyXHUxMUE4Clx1MTEwQ1x1MTE2RVx1MTFBQlx1MTEwN1x1MTE3NQpcdTExMENcdTExNkVcdTExQUZcdTExMDBcdTExNjVcdTExMDVcdTExNzUKXHUxMTBDXHUxMTZFXHUxMUFGXHUxMTAwXHUxMTc1Clx1MTEwQ1x1MTE2RVx1MTFBRlx1MTEwNlx1MTE2RVx1MTEwMlx1MTE3NApcdTExMENcdTExNkVcdTExQkNcdTExMDBcdTExNjFcdTExQUIKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTAwXHUxMTY4XHUxMTA3XHUxMTYxXHUxMUJDXHUxMTA5XHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwMFx1MTE2RVx1MTFBOApcdTExMENcdTExNkVcdTExQkNcdTExMDJcdTExNjdcdTExQUIKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTAzXHUxMTYxXHUxMUFCClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwM1x1MTE2OVx1MTFBOApcdTExMENcdTExNkVcdTExQkNcdTExMDdcdTExNjFcdTExQUIKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTA3XHUxMTZFClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwOVx1MTE2NgpcdTExMENcdTExNkVcdTExQkNcdTExMDlcdTExNjlcdTExMDBcdTExNzVcdTExMEJcdTExNjVcdTExQjgKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTA5XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwQlx1MTE2MVx1MTFCQwpcdTExMENcdTExNkVcdTExQkNcdTExMEJcdTExNkQKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTAwXHUxMTZEClx1MTEwQ1x1MTE3M1x1MTFBOFx1MTEwOVx1MTE2NVx1MTFBOApcdTExMENcdTExNzNcdTExQThcdTExMDlcdTExNzUKXHUxMTBDXHUxMTczXHUxMUFGXHUxMTAwXHUxMTY1XHUxMTBCXHUxMTZFXHUxMUI3Clx1MTEwQ1x1MTE3M1x1MTFCQ1x1MTEwMFx1MTE2MQpcdTExMENcdTExNzNcdTExQkNcdTExMDBcdTExNjUKXHUxMTBDXHUxMTczXHUxMUJDXHUxMTAwXHUxMTZGXHUxMUFCClx1MTEwQ1x1MTE3M1x1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQwpcdTExMENcdTExNzNcdTExQkNcdTExMDlcdTExNjYKXHUxMTBDXHUxMTc1XHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTEwMFx1MTE2MVx1MTFCOApcdTExMENcdTExNzVcdTExMDBcdTExNjdcdTExQkMKXHUxMTBDXHUxMTc1XHUxMTAwXHUxMTczXHUxMUE4XHUxMTEyXHUxMTc1Clx1MTEwQ1x1MTE3NVx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMENcdTExNzVcdTExMDBcdTExNzNcdTExQjgKXHUxMTBDXHUxMTc1XHUxMTAyXHUxMTczXHUxMUJDClx1MTEwQ1x1MTE3NVx1MTEwNVx1MTE3M1x1MTFCN1x1MTEwMFx1MTE3NVx1MTFBRgpcdTExMENcdTExNzVcdTExMDVcdTExNzVcdTExMDlcdTExNjFcdTExQUIKXHUxMTBDXHUxMTc1XHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE3NVx1MTEwN1x1MTE2RVx1MTFCQwpcdTExMENcdTExNzVcdTExMDlcdTExNzVcdTExQTgKXHUxMTBDXHUxMTc1XHUxMTBCXHUxMTY3XHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTEwQlx1MTE2RVx1MTEwMFx1MTE2MgpcdTExMENcdTExNzVcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTc1XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMENcdTExNzVcdTExMENcdTExNzVcdTExQUIKXHUxMTBDXHUxMTc1XHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwQ1x1MTE3NVx1MTFBOFx1MTEwOVx1MTE2NVx1MTFBQgpcdTExMENcdTExNzVcdTExQThcdTExMEJcdTExNjVcdTExQjgKXHUxMTBDXHUxMTc1XHUxMUE4XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQ1x1MTE3NVx1MTFBOFx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMENcdTExNzVcdTExQUJcdTExMDBcdTExNzNcdTExQjgKXHUxMTBDXHUxMTc1XHUxMUFCXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE3NVx1MTFBQlx1MTEwNVx1MTE2OQpcdTExMENcdTExNzVcdTExQUJcdTExMDVcdTExNkQKXHUxMTBDXHUxMTc1XHUxMUFCXHUxMTA1XHUxMTc1Clx1MTEwQ1x1MTE3NVx1MTFBQlx1MTEwRFx1MTE2MQpcdTExMENcdTExNzVcdTExQUJcdTExMEVcdTExNjFcdTExQUYKXHUxMTBDXHUxMTc1XHUxMUFCXHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwQ1x1MTE3NVx1MTFBQlx1MTExMFx1MTE2OVx1MTFCQwpcdTExMENcdTExNzVcdTExQUJcdTExMTJcdTExNjJcdTExQkMKXHUxMTBDXHUxMTc1XHUxMUFGXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE3NVx1MTFBRlx1MTEwN1x1MTE2N1x1MTFCQwpcdTExMENcdTExNzVcdTExQUZcdTExMDlcdTExNjUKXHUxMTBDXHUxMTc1XHUxMUI3XHUxMTBDXHUxMTYxXHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTFCOFx1MTEwM1x1MTE2MVx1MTFBQgpcdTExMENcdTExNzVcdTExQjhcdTExMEJcdTExNjFcdTExQUIKXHUxMTBDXHUxMTc1XHUxMUI4XHUxMTBDXHUxMTZFXHUxMUJDClx1MTEwRFx1MTE2MVx1MTEwQ1x1MTE3M1x1MTFCQwpcdTExMERcdTExNzVcdTExMDFcdTExNjVcdTExMDBcdTExNzUKXHUxMTBFXHUxMTYxXHUxMTAyXHUxMTYxXHUxMUI3Clx1MTEwRVx1MTE2MVx1MTEwNVx1MTE2MVx1MTEwNVx1MTE3NQpcdTExMEVcdTExNjFcdTExMDVcdTExNjNcdTExQkMKXHUxMTBFXHUxMTYxXHUxMTA1XHUxMTc1XHUxMUI3Clx1MTEwRVx1MTE2MVx1MTEwN1x1MTE2N1x1MTFBRgpcdTExMEVcdTExNjFcdTExMDlcdTExNjVcdTExQUIKXHUxMTBFXHUxMTYxXHUxMTBFXHUxMTczXHUxMUI3Clx1MTEwRVx1MTE2MVx1MTFBOFx1MTEwMFx1MTE2MVx1MTFBOApcdTExMEVcdTExNjFcdTExQUJcdTExMDZcdTExNkVcdTExQUYKXHUxMTBFXHUxMTYxXHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwRVx1MTE2MVx1MTFCN1x1MTEwMFx1MTE2MQpcdTExMEVcdTExNjFcdTExQjdcdTExMDBcdTExNzVcdTExMDVcdTExNzNcdTExQjcKXHUxMTBFXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTYyClx1MTEwRVx1MTE2MVx1MTFCN1x1MTEwOVx1MTE2NVx1MTFBOApcdTExMEVcdTExNjFcdTExQjdcdTExMEJcdTExNjcKXHUxMTBFXHUxMTYxXHUxMUI3XHUxMTBCXHUxMTZDClx1MTEwRVx1MTE2MVx1MTFCN1x1MTEwQ1x1MTE2OQpcdTExMEVcdTExNjFcdTExQkFcdTExMENcdTExNjFcdTExQUIKXHUxMTBFXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTYxClx1MTEwRVx1MTE2MVx1MTFCQ1x1MTEwMFx1MTE2OQpcdTExMEVcdTExNjFcdTExQkNcdTExMDBcdTExNkUKXHUxMTBFXHUxMTYxXHUxMUJDXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwRVx1MTE2MVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTFBOQpcdTExMEVcdTExNjFcdTExQkNcdTExMENcdTExNjFcdTExQTgKXHUxMTBFXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY5Clx1MTEwRVx1MTE2Mlx1MTEwMlx1MTE2NVx1MTFBRgpcdTExMEVcdTExNjJcdTExMENcdTExNjVcdTExQjcKXHUxMTBFXHUxMTYyXHUxMUE4XHUxMTAwXHUxMTYxXHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwRVx1MTE2Mlx1MTFBOFx1MTEwN1x1MTE2MVx1MTFCQwpcdTExMEVcdTExNjJcdTExQThcdTExMDlcdTExNjFcdTExQkMKXHUxMTBFXHUxMTYyXHUxMUE4XHUxMTBCXHUxMTc1XHUxMUI3Clx1MTEwRVx1MTE2Mlx1MTFCN1x1MTExMVx1MTE3NVx1MTEwQlx1MTE2NVx1MTFBQgpcdTExMEVcdTExNjVcdTExMDdcdTExNjVcdTExQUYKXHUxMTBFXHUxMTY1XHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwRVx1MTE2NVx1MTFBQlx1MTEwMFx1MTE2RVx1MTFBOApcdTExMEVcdTExNjVcdTExQUJcdTExMDNcdTExNkVcdTExQkMKXHUxMTBFXHUxMTY1XHUxMUFCXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwRVx1MTE2NVx1MTFBQlx1MTEwQ1x1MTE2MgpcdTExMEVcdTExNjVcdTExQUJcdTExMEVcdTExNjVcdTExQUJcdTExMTJcdTExNzUKXHUxMTBFXHUxMTY1XHUxMUFGXHUxMTAzXHUxMTY5Clx1MTEwRVx1MTE2NVx1MTFBRlx1MTEwQ1x1MTE2NVx1MTExMlx1MTE3NQpcdTExMEVcdTExNjVcdTExQUZcdTExMTJcdTExNjFcdTExQTgKXHUxMTBFXHUxMTY1XHUxMUJBXHUxMTAyXHUxMTYxXHUxMUFGClx1MTEwRVx1MTE2NVx1MTFCQVx1MTEwRFx1MTE2MgpcdTExMEVcdTExNjVcdTExQkNcdTExMDJcdTExNjdcdTExQUIKXHUxMTBFXHUxMTY1XHUxMUJDXHUxMTA3XHUxMTYxXHUxMTBDXHUxMTc1Clx1MTEwRVx1MTE2NVx1MTFCQ1x1MTEwOVx1MTE2OQpcdTExMEVcdTExNjVcdTExQkNcdTExMEVcdTExNkVcdTExQUIKXHUxMTBFXHUxMTY2XHUxMTAwXHUxMTY4Clx1MTEwRVx1MTE2Nlx1MTEwNVx1MTE2N1x1MTFBOApcdTExMEVcdTExNjZcdTExMEJcdTExNjlcdTExQUIKXHUxMTBFXHUxMTY2XHUxMTBCXHUxMTcyXHUxMUE4Clx1MTEwRVx1MTE2Nlx1MTEwQ1x1MTE2RVx1MTFCQwpcdTExMEVcdTExNjZcdTExMTJcdTExNjVcdTExQjcKXHUxMTBFXHUxMTY5XHUxMTAzXHUxMTczXHUxMUJDXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwRVx1MTE2OVx1MTEwN1x1MTE2MVx1MTFBQgpcdTExMEVcdTExNjlcdTExMDdcdTExNjFcdTExQjgKXHUxMTBFXHUxMTY5XHUxMTA5XHUxMTYxXHUxMUJDXHUxMTEyXHUxMTZBClx1MTEwRVx1MTE2OVx1MTEwOVx1MTE2RVx1MTFBQgpcdTExMEVcdTExNjlcdTExMEJcdTExNjdcdTExMDVcdTExNzNcdTExQjcKXHUxMTBFXHUxMTY5XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwRVx1MTE2OVx1MTEwQ1x1MTE2NVx1MTEwMlx1MTE2N1x1MTFBOApcdTExMEVcdTExNjlcdTExMENcdTExNjVcdTExQjcKXHUxMTBFXHUxMTY5XHUxMTBFXHUxMTY1XHUxMUJDClx1MTEwRVx1MTE2OVx1MTEwRlx1MTE2OVx1MTFBRlx1MTEwNVx1MTE3NVx1MTFCQQpcdTExMEVcdTExNjlcdTExQkFcdTExMDdcdTExNkVcdTExQUYKXHUxMTBFXHUxMTY5XHUxMUJDXHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwRVx1MTE2OVx1MTFCQ1x1MTEwNVx1MTE3NQpcdTExMEVcdTExNjlcdTExQkNcdTExMENcdTExNjFcdTExQkMKXHUxMTBFXHUxMTZBXHUxMUFGXHUxMTBCXHUxMTY3XHUxMUJDClx1MTEwRVx1MTE2Q1x1MTEwMFx1MTE3M1x1MTFBQgpcdTExMEVcdTExNkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTBFXHUxMTZDXHUxMTA5XHUxMTY1XHUxMUFCClx1MTEwRVx1MTE2Q1x1MTEwOVx1MTE3NVx1MTFBQgpcdTExMEVcdTExNkNcdTExMEJcdTExNjFcdTExQTgKXHUxMTBFXHUxMTZDXHUxMTBDXHUxMTY5XHUxMUJDClx1MTEwRVx1MTE2RVx1MTEwOVx1MTE2NVx1MTFBOApcdTExMEVcdTExNkVcdTExMEJcdTExNjVcdTExQTgKXHUxMTBFXHUxMTZFXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwRVx1MTE2RVx1MTEwRVx1MTE2NVx1MTFBQgpcdTExMEVcdTExNkVcdTExMEVcdTExNzNcdTExQTgKXHUxMTBFXHUxMTZFXHUxMUE4XHUxMTAwXHUxMTZFClx1MTEwRVx1MTE2RVx1MTFBOFx1MTEwOVx1MTE2OQpcdTExMEVcdTExNkVcdTExQThcdTExMENcdTExNjYKXHUxMTBFXHUxMTZFXHUxMUE4XHUxMTEyXHUxMTYxClx1MTEwRVx1MTE2RVx1MTFBRlx1MTEwMFx1MTE3M1x1MTFBQgpcdTExMEVcdTExNkVcdTExQUZcdTExMDdcdTExNjFcdTExQUYKXHUxMTBFXHUxMTZFXHUxMUFGXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwRVx1MTE2RVx1MTFBRlx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMEVcdTExNkVcdTExQUZcdTExMEJcdTExNjdcdTExQUIKXHUxMTBFXHUxMTZFXHUxMUFGXHUxMTBCXHUxMTc1XHUxMUI4Clx1MTEwRVx1MTE2RVx1MTFBRlx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMEVcdTExNkVcdTExQUZcdTExMTFcdTExNjFcdTExQUIKXHUxMTBFXHUxMTZFXHUxMUJDXHUxMTAwXHUxMTY3XHUxMUE4Clx1MTEwRVx1MTE2RVx1MTFCQ1x1MTEwMFx1MTE2OQpcdTExMEVcdTExNkVcdTExQkNcdTExMDNcdTExNjlcdTExQUYKXHUxMTBFXHUxMTZFXHUxMUJDXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwRVx1MTE2RVx1MTFCQ1x1MTEwRVx1MTE2NVx1MTFCQ1x1MTEwM1x1MTE2OQpcdTExMEVcdTExNzFcdTExMEJcdTExNjVcdTExQjgKXHUxMTBFXHUxMTcxXHUxMTBDXHUxMTc1XHUxMUE4Clx1MTEwRVx1MTE3MVx1MTExMlx1MTE2M1x1MTFCQwpcdTExMEVcdTExNzVcdTExMEJcdTExNjNcdTExQTgKXHUxMTBFXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTZFClx1MTEwRVx1MTE3NVx1MTFBQlx1MTEwRVx1MTE2NVx1MTFBOApcdTExMEVcdTExNzVcdTExQUZcdTExMDlcdTExNzVcdTExQjgKXHUxMTBFXHUxMTc1XHUxMUFGXHUxMTBCXHUxMTZGXHUxMUFGClx1MTEwRVx1MTE3NVx1MTFBRlx1MTExMVx1MTE2MVx1MTFBQgpcdTExMEVcdTExNzVcdTExQjdcdTExMDNcdTExNjIKXHUxMTBFXHUxMTc1XHUxMUI3XHUxMTA2XHUxMTZFXHUxMUE4Clx1MTEwRVx1MTE3NVx1MTFCN1x1MTEwOVx1MTE3NVx1MTFBRgpcdTExMEVcdTExNzVcdTExQkFcdTExMDlcdTExNjlcdTExQUYKXHUxMTBFXHUxMTc1XHUxMUJDXHUxMTBFXHUxMTYxXHUxMUFCClx1MTEwRlx1MTE2MVx1MTEwNlx1MTE2Nlx1MTEwNVx1MTE2MQpcdTExMEZcdTExNjFcdTExMEJcdTExNkVcdTExQUJcdTExMTBcdTExNjUKXHUxMTBGXHUxMTYxXHUxMUFGXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTA5XHUxMTZFClx1MTEwRlx1MTE2Mlx1MTEwNVx1MTE3NVx1MTFBOFx1MTExMFx1MTE2NQpcdTExMEZcdTExNjJcdTExQjdcdTExMTFcdTExNjVcdTExMDlcdTExNzMKXHUxMTBGXHUxMTYyXHUxMUI3XHUxMTExXHUxMTY2XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwRlx1MTE2NVx1MTExMFx1MTE3M1x1MTFBQgpcdTExMEZcdTExNjVcdTExQUJcdTExMDNcdTExNzVcdTExMDlcdTExNjdcdTExQUIKXHUxMTBGXHUxMTY1XHUxMUFGXHUxMTA1XHUxMTY1Clx1MTEwRlx1MTE2NVx1MTFCN1x1MTExMVx1MTE3Mlx1MTExMFx1MTE2NQpcdTExMEZcdTExNjlcdTExMDFcdTExNzVcdTExMDVcdTExNzUKXHUxMTBGXHUxMTY5XHUxMTA2XHUxMTc1XHUxMTAzXHUxMTc1Clx1MTEwRlx1MTE2OVx1MTFBQlx1MTEwOVx1MTE2NVx1MTExMFx1MTE3MwpcdTExMEZcdTExNjlcdTExQUZcdTExMDVcdTExNjEKXHUxMTBGXHUxMTY5XHUxMUI3XHUxMTExXHUxMTczXHUxMUFGXHUxMTA1XHUxMTY2XHUxMUE4XHUxMTA5XHUxMTczClx1MTEwRlx1MTE2OVx1MTFCQ1x1MTEwMlx1MTE2MVx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMEZcdTExNkJcdTExMDBcdTExNjFcdTExQjcKXHUxMTBGXHUxMTZFXHUxMTAzXHUxMTY2XHUxMTEwXHUxMTYxClx1MTEwRlx1MTE3M1x1MTEwNVx1MTE3NVx1MTFCNwpcdTExMEZcdTExNzNcdTExQUJcdTExMDBcdTExNzVcdTExQUYKXHUxMTBGXHUxMTczXHUxMUFCXHUxMTA0XHUxMTYxXHUxMUFGClx1MTEwRlx1MTE3M1x1MTFBQlx1MTEwOVx1MTE2OVx1MTEwNVx1MTE3NQpcdTExMEZcdTExNzNcdTExQUJcdTExMEJcdTExNjFcdTExMDNcdTExNzNcdTExQUYKXHUxMTBGXHUxMTczXHUxMUFCXHUxMTBCXHUxMTY1XHUxMTA2XHUxMTY1XHUxMTAyXHUxMTc1Clx1MTEwRlx1MTE3M1x1MTFBQlx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMEZcdTExNzNcdTExQUJcdTExMENcdTExNjVcdTExQUYKXHUxMTBGXHUxMTczXHUxMUFGXHUxMTA1XHUxMTYyXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwRlx1MTE3M1x1MTFBRlx1MTEwNVx1MTE2NVx1MTFCOApcdTExMEZcdTExNzVcdTExQUZcdTExMDVcdTExNjkKXHUxMTEwXHUxMTYxXHUxMTBCXHUxMTc1XHUxMUI4Clx1MTExMFx1MTE2MVx1MTEwQ1x1MTE2MVx1MTEwMFx1MTE3NQpcdTExMTBcdTExNjFcdTExQThcdTExMDBcdTExNkUKXHUxMTEwXHUxMTYxXHUxMUE4XHUxMTBDXHUxMTYxClx1MTExMFx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFCQwpcdTExMTBcdTExNjJcdTExMDBcdTExNkZcdTExQUJcdTExMDNcdTExNjkKXHUxMTEwXHUxMTYyXHUxMTBCXHUxMTYzXHUxMUJDClx1MTExMFx1MTE2Mlx1MTExMVx1MTE2RVx1MTFCQwpcdTExMTBcdTExNjJcdTExQThcdTExMDlcdTExNzUKXHUxMTEwXHUxMTYyXHUxMUFGXHUxMTA1XHUxMTY1XHUxMUFCXHUxMTEwXHUxMTczClx1MTExMFx1MTE2NVx1MTEwMlx1MTE2NVx1MTFBRgpcdTExMTBcdTExNjVcdTExMDZcdTExNzVcdTExMDJcdTExNjVcdTExQUYKXHUxMTEwXHUxMTY2XHUxMTAyXHUxMTc1XHUxMTA5XHUxMTczClx1MTExMFx1MTE2Nlx1MTEwOVx1MTE3M1x1MTExMFx1MTE3MwpcdTExMTBcdTExNjZcdTExMEJcdTExNzVcdTExMDdcdTExNzNcdTExQUYKXHUxMTEwXHUxMTY2XHUxMUFGXHUxMTA1XHUxMTY2XHUxMTA3XHUxMTc1XHUxMTBDXHUxMTY1XHUxMUFCClx1MTExMFx1MTE2OVx1MTEwNVx1MTE2OVx1MTFBQgpcdTExMTBcdTExNjlcdTExMDZcdTExNjFcdTExMTBcdTExNjkKXHUxMTEwXHUxMTY5XHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTExMFx1MTE2OVx1MTFCQ1x1MTEwMFx1MTE2OApcdTExMTBcdTExNjlcdTExQkNcdTExMDBcdTExNkEKXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTA1XHUxMTY5Clx1MTExMFx1MTE2OVx1MTFCQ1x1MTEwOVx1MTE3NVx1MTFBQgpcdTExMTBcdTExNjlcdTExQkNcdTExMEJcdTExNjdcdTExQTgKXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTc1XHUxMUFGClx1MTExMFx1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMTBcdTExNjlcdTExQkNcdTExMENcdTExNjYKXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTBDXHUxMTczXHUxMUJDClx1MTExMFx1MTE2OVx1MTFCQ1x1MTExMlx1MTE2MVx1MTFCOApcdTExMTBcdTExNjlcdTExQkNcdTExMTJcdTExNkEKXHUxMTEwXHUxMTZDXHUxMTAwXHUxMTczXHUxMUFCClx1MTExMFx1MTE2Q1x1MTEwQlx1MTE2Rlx1MTFBQgpcdTExMTBcdTExNkNcdTExMENcdTExNzVcdTExQThcdTExMDBcdTExNzNcdTExQjcKXHUxMTEwXHUxMTcxXHUxMTAwXHUxMTc1XHUxMUI3Clx1MTExMFx1MTE3M1x1MTEwNVx1MTE2NVx1MTFBOApcdTExMTBcdTExNzNcdTExQThcdTExMDBcdTExNzNcdTExQjgKXHUxMTEwXHUxMTczXHUxMUE4XHUxMTA3XHUxMTY3XHUxMUFGClx1MTExMFx1MTE3M1x1MTFBOFx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMTBcdTExNzNcdTExQThcdTExMDlcdTExNkUKXHUxMTEwXHUxMTczXHUxMUE4XHUxMTBDXHUxMTc1XHUxMUJDClx1MTExMFx1MTE3M1x1MTFBOFx1MTExMlx1MTE3NQpcdTExMTBcdTExNzNcdTExQUJcdTExMTBcdTExNzNcdTExQUJcdTExMTJcdTExNzUKXHUxMTEwXHUxMTc1XHUxMTA5XHUxMTY3XHUxMTBFXHUxMTczClx1MTExMVx1MTE2MVx1MTEwNVx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMTFcdTExNjFcdTExMEJcdTExNzVcdTExQUYKXHUxMTExXHUxMTYxXHUxMTBFXHUxMTZFXHUxMUFGXHUxMTA5XHUxMTY5Clx1MTExMVx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2N1x1MTFBRgpcdTExMTFcdTExNjFcdTExQUJcdTExMDNcdTExNjFcdTExQUIKXHUxMTExXHUxMTYxXHUxMUFCXHUxMTA2XHUxMTYyClx1MTExMVx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2MQpcdTExMTFcdTExNjFcdTExQUZcdTExMDlcdTExNzVcdTExQjgKXHUxMTExXHUxMTYxXHUxMUFGXHUxMTBCXHUxMTZGXHUxMUFGClx1MTExMVx1MTE2MVx1MTFCOFx1MTEwOVx1MTE2OVx1MTFCQwpcdTExMTFcdTExNjJcdTExMDlcdTExNjdcdTExQUIKXHUxMTExXHUxMTYyXHUxMUE4XHUxMTA5XHUxMTczClx1MTExMVx1MTE2Mlx1MTFBOFx1MTEwOVx1MTE3NVx1MTEwNlx1MTE3NVx1MTFBRlx1MTEwNVx1MTE3NQpcdTExMTFcdTExNjJcdTExQUJcdTExMTBcdTExNzUKXHUxMTExXHUxMTY1XHUxMTA5XHUxMTY2XHUxMUFCXHUxMTEwXHUxMTczClx1MTExMVx1MTE2Nlx1MTEwQlx1MTE3NVx1MTFBQlx1MTExMFx1MTE3MwpcdTExMTFcdTExNjdcdTExQUJcdTExMDBcdTExNjdcdTExQUIKXHUxMTExXHUxMTY3XHUxMUFCXHUxMTBCXHUxMTc0Clx1MTExMVx1MTE2N1x1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMTFcdTExNjdcdTExQUJcdTExMTJcdTExNzUKXHUxMTExXHUxMTY3XHUxMUJDXHUxMTAwXHUxMTYxClx1MTExMVx1MTE2N1x1MTFCQ1x1MTEwMFx1MTE3Mlx1MTFBQgpcdTExMTFcdTExNjdcdTExQkNcdTExMDlcdTExNjJcdTExQkMKXHUxMTExXHUxMTY3XHUxMUJDXHUxMTA5XHUxMTY5Clx1MTExMVx1MTE2N1x1MTFCQ1x1MTEwQlx1MTE2M1x1MTFCQwpcdTExMTFcdTExNjdcdTExQkNcdTExMEJcdTExNzVcdTExQUYKXHUxMTExXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTZBClx1MTExMVx1MTE2OVx1MTEwOVx1MTE3M1x1MTExMFx1MTE2NQpcdTExMTFcdTExNjlcdTExMEJcdTExNzVcdTExQUJcdTExMTBcdTExNzMKXHUxMTExXHUxMTY5XHUxMTBDXHUxMTYxXHUxMUJDClx1MTExMVx1MTE2OVx1MTExMlx1MTE2MVx1MTFCNwpcdTExMTFcdTExNkRcdTExMDZcdTExNjdcdTExQUIKXHUxMTExXHUxMTZEXHUxMTBDXHUxMTY1XHUxMUJDClx1MTExMVx1MTE2RFx1MTEwQ1x1MTE2RVx1MTFBQgpcdTExMTFcdTExNkRcdTExMTJcdTExNjdcdTExQUIKXHUxMTExXHUxMTZFXHUxMUI3XHUxMTA2XHUxMTY5XHUxMUE4Clx1MTExMVx1MTE2RVx1MTFCN1x1MTEwQ1x1MTE3NVx1MTFBRgpcdTExMTFcdTExNkVcdTExQkNcdTExMDBcdTExNjdcdTExQkMKXHUxMTExXHUxMTZFXHUxMUJDXHUxMTA5XHUxMTY5XHUxMUE4Clx1MTExMVx1MTE2RVx1MTFCQ1x1MTEwOVx1MTE3M1x1MTFCOApcdTExMTFcdTExNzNcdTExMDVcdTExNjFcdTExQkNcdTExMDlcdTExNzMKXHUxMTExXHUxMTczXHUxMTA1XHUxMTc1XHUxMUFCXHUxMTEwXHUxMTY1Clx1MTExMVx1MTE3M1x1MTFBRlx1MTEwNVx1MTE2MVx1MTEwOVx1MTE3M1x1MTExMFx1MTE3NVx1MTFBOApcdTExMTFcdTExNzVcdTExMDBcdTExNjlcdTExQUIKXHUxMTExXHUxMTc1XHUxMTA2XHUxMTYxXHUxMUJDClx1MTExMVx1MTE3NVx1MTEwQlx1MTE2MVx1MTEwMlx1MTE2OQpcdTExMTFcdTExNzVcdTExQUZcdTExMDVcdTExNzNcdTExQjcKXHUxMTExXHUxMTc1XHUxMUFGXHUxMTA5XHUxMTZFClx1MTExMVx1MTE3NVx1MTFBRlx1MTEwQlx1MTE2RApcdTExMTFcdTExNzVcdTExQUZcdTExMENcdTExNjEKXHUxMTExXHUxMTc1XHUxMUFGXHUxMTEwXHUxMTY5XHUxMUJDClx1MTExMVx1MTE3NVx1MTFCQ1x1MTEwMFx1MTE2OApcdTExMTJcdTExNjFcdTExMDJcdTExNzNcdTExMDJcdTExNzVcdTExQjcKXHUxMTEyXHUxMTYxXHUxMTAyXHUxMTczXHUxMUFGClx1MTExMlx1MTE2MVx1MTEwM1x1MTE3M1x1MTEwQlx1MTE3MFx1MTEwQlx1MTE2NQpcdTExMTJcdTExNjFcdTExMDVcdTExNkVcdTExQkFcdTExMDdcdTExNjFcdTExQjcKXHUxMTEyXHUxMTYxXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTAwXHUxMTc1Clx1MTExMlx1MTE2MVx1MTEwOVx1MTE2RVx1MTFBOFx1MTEwQ1x1MTE3NVx1MTFCOApcdTExMTJcdTExNjFcdTExMDlcdTExNkVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMTBCXHUxMTY3XHUxMTEwXHUxMTczXHUxMUFCClx1MTExMlx1MTE2MVx1MTEwQ1x1MTE3NVx1MTEwNlx1MTE2MVx1MTFBQgpcdTExMTJcdTExNjFcdTExMEVcdTExNjVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMTExXHUxMTZFXHUxMUI3Clx1MTExMlx1MTE2MVx1MTExMVx1MTE3NVx1MTFBRgpcdTExMTJcdTExNjFcdTExQThcdTExMDBcdTExNkEKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTAwXHUxMTZEClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwMFx1MTE3M1x1MTFCOApcdTExMTJcdTExNjFcdTExQThcdTExMDBcdTExNzUKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTAyXHUxMTY3XHUxMUFCClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwNVx1MTE2N1x1MTFBOApcdTExMTJcdTExNjFcdTExQThcdTExMDdcdTExNjVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA3XHUxMTZFXHUxMTA2XHUxMTY5Clx1MTExMlx1MTE2MVx1MTFBOFx1MTEwN1x1MTE3NQpcdTExMTJcdTExNjFcdTExQThcdTExMDlcdTExNjJcdTExQkMKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTZFXHUxMUFGClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwOVx1MTE3M1x1MTFCOApcdTExMTJcdTExNjFcdTExQThcdTExMEJcdTExNkRcdTExQkNcdTExMTFcdTExNkVcdTExQjcKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTBCXHUxMTZGXHUxMUFCClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwQlx1MTE3MQpcdTExMTJcdTExNjFcdTExQThcdTExMENcdTExNjEKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTBDXHUxMTY1XHUxMUI3Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2OApcdTExMTJcdTExNjFcdTExQUJcdTExMDBcdTExNzNcdTExQUYKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTAxXHUxMTY1XHUxMTA3XHUxMTY1XHUxMUFCXHUxMTBCXHUxMTY2Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwMlx1MTE2MVx1MTFCRApcdTExMTJcdTExNjFcdTExQUJcdTExMDJcdTExNkVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTAzXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTYxXHUxMUFCClx1MTExMlx1MTE2MVx1MTFBQlx1MTEwNFx1MTE2MgpcdTExMTJcdTExNjFcdTExQUJcdTExMDVcdTExNjFcdTExMDlcdTExNjFcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTA2XHUxMTYxXHUxMTAzXHUxMTc1Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMTJcdTExNjFcdTExQUJcdTExMDdcdTExNjVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTA3XHUxMTY5XHUxMUE4Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwOVx1MTE3NVx1MTFBOApcdTExMTJcdTExNjFcdTExQUJcdTExMEJcdTExNjdcdTExMDVcdTExNzNcdTExQjcKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTBEXHUxMTY5XHUxMUE4Clx1MTExMlx1MTE2MVx1MTFBRlx1MTEwNlx1MTE2NVx1MTEwMlx1MTE3NQpcdTExMTJcdTExNjFcdTExQUZcdTExMEJcdTExNjFcdTExMDdcdTExNjVcdTExMENcdTExNzUKXHUxMTEyXHUxMTYxXHUxMUFGXHUxMTBCXHUxMTc1XHUxMUFCClx1MTExMlx1MTE2MVx1MTFCN1x1MTEwMVx1MTE2NgpcdTExMTJcdTExNjFcdTExQjdcdTExMDdcdTExNkVcdTExMDVcdTExNjkKXHUxMTEyXHUxMTYxXHUxMUI4XHUxMTAwXHUxMTY3XHUxMUE4Clx1MTExMlx1MTE2MVx1MTFCOFx1MTEwNVx1MTE3NVx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMTJcdTExNjFcdTExQkNcdTExMDBcdTExNjlcdTExQkMKXHUxMTEyXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTZFClx1MTExMlx1MTE2MVx1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQwpcdTExMTJcdTExNjFcdTExQkNcdTExMEJcdTExNzQKXHUxMTEyXHUxMTYyXHUxMTAwXHUxMTY3XHUxMUFGClx1MTExMlx1MTE2Mlx1MTEwMFx1MTE2RVx1MTFBQgpcdTExMTJcdTExNjJcdTExMDNcdTExNjFcdTExQjgKXHUxMTEyXHUxMTYyXHUxMTAzXHUxMTYxXHUxMUJDClx1MTExMlx1MTE2Mlx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMTJcdTExNjJcdTExMDlcdTExNjVcdTExQTgKXHUxMTEyXHUxMTYyXHUxMTA5XHUxMTY1XHUxMUFGClx1MTExMlx1MTE2Mlx1MTEwOVx1MTE2RVx1MTEwQlx1MTE2RFx1MTFBOFx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMTJcdTExNjJcdTExMEJcdTExNjFcdTExQUIKXHUxMTEyXHUxMTYyXHUxMUE4XHUxMTA5XHUxMTc1XHUxMUI3Clx1MTExMlx1MTE2Mlx1MTFBQlx1MTEwM1x1MTE3M1x1MTEwN1x1MTE2Mlx1MTFBOApcdTExMTJcdTExNjJcdTExQjdcdTExMDdcdTExNjVcdTExMDBcdTExNjUKXHUxMTEyXHUxMTYyXHUxMUJBXHUxMTA3XHUxMTY3XHUxMUMwClx1MTExMlx1MTE2Mlx1MTFCQVx1MTEwOVx1MTE2MVx1MTFBRgpcdTExMTJcdTExNjJcdTExQkNcdTExMDNcdTExNjlcdTExQkMKXHUxMTEyXHUxMTYyXHUxMUJDXHUxMTA3XHUxMTY5XHUxMUE4Clx1MTExMlx1MTE2Mlx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMTJcdTExNjJcdTExQkNcdTExMEJcdTExNkVcdTExQUIKXHUxMTEyXHUxMTYyXHUxMUJDXHUxMTBCXHUxMTcxClx1MTExMlx1MTE2M1x1MTFCQ1x1MTEwMFx1MTE3NQpcdTExMTJcdTExNjNcdTExQkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTEyXHUxMTYzXHUxMUJDXHUxMTA5XHUxMTZFClx1MTExMlx1MTE2NVx1MTEwNVx1MTE2MVx1MTFBOApcdTExMTJcdTExNjVcdTExMEJcdTExNkRcdTExQkMKXHUxMTEyXHUxMTY2XHUxMUFGXHUxMTAwXHUxMTc1Clx1MTExMlx1MTE2N1x1MTFBQlx1MTEwMFx1MTE2QVx1MTFBQgpcdTExMTJcdTExNjdcdTExQUJcdTExMDBcdTExNzNcdTExQjcKXHUxMTEyXHUxMTY3XHUxMUFCXHUxMTAzXHUxMTYyClx1MTExMlx1MTE2N1x1MTFBQlx1MTEwOVx1MTE2MVx1MTFCQwpcdTExMTJcdTExNjdcdTExQUJcdTExMDlcdTExNzVcdTExQUYKXHUxMTEyXHUxMTY3XHUxMUFCXHUxMTBDXHUxMTYxXHUxMUJDClx1MTExMlx1MTE2N1x1MTFBQlx1MTEwQ1x1MTE2MgpcdTExMTJcdTExNjdcdTExQUJcdTExMENcdTExNzUKXHUxMTEyXHUxMTY3XHUxMUFGXHUxMTBCXHUxMTYyXHUxMUE4Clx1MTExMlx1MTE2N1x1MTFCOFx1MTEwNVx1MTE2N1x1MTFBOApcdTExMTJcdTExNjdcdTExQkNcdTExMDdcdTExNkUKXHUxMTEyXHUxMTY3XHUxMUJDXHUxMTA5XHUxMTYxClx1MTExMlx1MTE2N1x1MTFCQ1x1MTEwOVx1MTE2RQpcdTExMTJcdTExNjdcdTExQkNcdTExMDlcdTExNzVcdTExQTgKXHUxMTEyXHUxMTY3XHUxMUJDXHUxMTBDXHUxMTY2Clx1MTExMlx1MTE2N1x1MTFCQ1x1MTExMFx1MTE2MgpcdTExMTJcdTExNjdcdTExQkNcdTExMTFcdTExNjdcdTExQUIKXHUxMTEyXHUxMTY4XHUxMTEwXHUxMTYyXHUxMUE4Clx1MTExMlx1MTE2OVx1MTEwMFx1MTE3NVx1MTEwOVx1MTE3NVx1MTFCNwpcdTExMTJcdTExNjlcdTExMDJcdTExNjFcdTExQjcKXHUxMTEyXHUxMTY5XHUxMTA1XHUxMTYxXHUxMUJDXHUxMTBCXHUxMTc1Clx1MTExMlx1MTE2OVx1MTEwN1x1MTE2MVx1MTFBOApcdTExMTJcdTExNjlcdTExMTBcdTExNjZcdTExQUYKXHUxMTEyXHUxMTY5XHUxMTEyXHUxMTczXHUxMUI4Clx1MTExMlx1MTE2OVx1MTFBOFx1MTEwOVx1MTE3NQpcdTExMTJcdTExNjlcdTExQUZcdTExMDVcdTExNjkKXHUxMTEyXHUxMTY5XHUxMUI3XHUxMTExXHUxMTY2XHUxMTBCXHUxMTc1XHUxMTBDXHUxMTc1Clx1MTExMlx1MTE2OVx1MTFCQ1x1MTEwN1x1MTE2OQpcdTExMTJcdTExNjlcdTExQkNcdTExMDlcdTExNkUKXHUxMTEyXHUxMTY5XHUxMUJDXHUxMTBFXHUxMTYxClx1MTExMlx1MTE2QVx1MTEwNlx1MTE2N1x1MTFBQgpcdTExMTJcdTExNkFcdTExMDdcdTExNkVcdTExQUIKXHUxMTEyXHUxMTZBXHUxMTA5XHUxMTYxXHUxMUFGClx1MTExMlx1MTE2QVx1MTEwQlx1MTE2RFx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMTJcdTExNkFcdTExMENcdTExNjFcdTExQkMKXHUxMTEyXHUxMTZBXHUxMTEyXHUxMTYxXHUxMUE4Clx1MTExMlx1MTE2QVx1MTFBOFx1MTEwN1x1MTE2OQpcdTExMTJcdTExNkFcdTExQThcdTExMEJcdTExNzVcdTExQUIKXHUxMTEyXHUxMTZBXHUxMUE4XHUxMTBDXHUxMTYxXHUxMUJDClx1MTExMlx1MTE2QVx1MTFBOFx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMTJcdTExNkFcdTExQUJcdTExMDBcdTExNjFcdTExQjgKXHUxMTEyXHUxMTZBXHUxMUFCXHUxMTAwXHUxMTY3XHUxMUJDClx1MTExMlx1MTE2QVx1MTFBQlx1MTEwQlx1MTE2N1x1MTFCQwpcdTExMTJcdTExNkFcdTExQUJcdTExMEJcdTExNzJcdTExQUYKXHUxMTEyXHUxMTZBXHUxMUFCXHUxMTBDXHUxMTYxClx1MTExMlx1MTE2QVx1MTFBRlx1MTEwMFx1MTE3NQpcdTExMTJcdTExNkFcdTExQUZcdTExMDNcdTExNjlcdTExQkMKXHUxMTEyXHUxMTZBXHUxMUFGXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTEyXHUxMTc1Clx1MTExMlx1MTE2QVx1MTFBRlx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMTJcdTExNkFcdTExQUZcdTExMERcdTExNjFcdTExQTgKXHUxMTEyXHUxMTZDXHUxMTAwXHUxMTY3XHUxMUFCClx1MTExMlx1MTE2Q1x1MTEwMFx1MTE2QVx1MTFBQgpcdTExMTJcdTExNkNcdTExMDdcdTExNjlcdTExQTgKXHUxMTEyXHUxMTZDXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTExMlx1MTE2Q1x1MTEwQlx1MTE2Rlx1MTFBQgpcdTExMTJcdTExNkNcdTExMENcdTExNjFcdTExQkMKXHUxMTEyXHUxMTZDXHUxMTBDXHUxMTY1XHUxMUFCClx1MTExMlx1MTE2Q1x1MTFCQVx1MTEwOVx1MTE2RQpcdTExMTJcdTExNkNcdTExQkNcdTExMDNcdTExNjFcdTExQUJcdTExMDdcdTExNjlcdTExMDNcdTExNjkKXHUxMTEyXHUxMTZEXHUxMTBCXHUxMTcyXHUxMUFGXHUxMTBDXHUxMTY1XHUxMUE4Clx1MTExMlx1MTE2RVx1MTEwN1x1MTE2MVx1MTFBQgpcdTExMTJcdTExNkVcdTExMEVcdTExNkVcdTExQkFcdTExMDBcdTExNjFcdTExMDVcdTExNkUKXHUxMTEyXHUxMTZFXHUxMUFCXHUxMTA1XHUxMTY3XHUxMUFCClx1MTExMlx1MTE2Rlx1MTFBRlx1MTEwQVx1MTE3NVx1MTFBQgpcdTExMTJcdTExNzJcdTExMDlcdTExNzVcdTExQTgKXHUxMTEyXHUxMTcyXHUxMTBCXHUxMTc1XHUxMUFGClx1MTExMlx1MTE3Mlx1MTFCQ1x1MTEwMlx1MTE2MgpcdTExMTJcdTExNzNcdTExMDVcdTExNzNcdTExQjcKXHUxMTEyXHUxMTczXHUxMUE4XHUxMTA3XHUxMTYyXHUxMUE4Clx1MTExMlx1MTE3M1x1MTFBOFx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMTJcdTExNzNcdTExQUJcdTExMENcdTExNjVcdTExQTgKXHUxMTEyXHUxMTczXHUxMUFCXHUxMTEyXHUxMTc1Clx1MTExMlx1MTE3M1x1MTFCQ1x1MTEwNlx1MTE3NQpcdTExMTJcdTExNzNcdTExQkNcdTExMDdcdTExNkVcdTExQUIKXHUxMTEyXHUxMTc0XHUxMTAwXHUxMTY5XHUxMUE4Clx1MTExMlx1MTE3NFx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMTJcdTExNzRcdTExMDlcdTExNjJcdTExQkMKXHUxMTEyXHUxMTc0XHUxMUFCXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTExMlx1MTE3NVx1MTFCN1x1MTEwMVx1MTE2NVx1MTFCQWAuc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy9zaW1wbGlmaWVkLWNoaW5lc2UuanMKICB2YXIgd29yZGxpc3Q3ID0gYFx1NzY4NApcdTRFMDAKXHU2NjJGClx1NTcyOApcdTRFMEQKXHU0RTg2Clx1NjcwOQpcdTU0OEMKXHU0RUJBClx1OEZEOQpcdTRFMkQKXHU1OTI3Clx1NEUzQQpcdTRFMEEKXHU0RTJBClx1NTZGRApcdTYyMTEKXHU0RUU1Clx1ODk4MQpcdTRFRDYKXHU2NUY2Clx1Njc2NQpcdTc1MjgKXHU0RUVDClx1NzUxRgpcdTUyMzAKXHU0RjVDClx1NTczMApcdTRFOEUKXHU1MUZBClx1NUMzMQpcdTUyMDYKXHU1QkY5Clx1NjIxMApcdTRGMUEKXHU1M0VGClx1NEUzQgpcdTUzRDEKXHU1RTc0Clx1NTJBOApcdTU0MEMKXHU1REU1Clx1NEU1RgpcdTgwRkQKXHU0RTBCClx1OEZDNwpcdTVCNTAKXHU4QkY0Clx1NEVBNwpcdTc5Q0QKXHU5NzYyClx1ODAwQwpcdTY1QjkKXHU1NDBFClx1NTkxQQpcdTVCOUEKXHU4ODRDClx1NUI2NgpcdTZDRDUKXHU2MjQwClx1NkMxMQpcdTVGOTcKXHU3RUNGClx1NTM0MQpcdTRFMDkKXHU0RTRCClx1OEZEQgpcdTc3NDAKXHU3QjQ5Clx1OTBFOApcdTVFQTYKXHU1QkI2Clx1NzUzNQpcdTUyOUIKXHU5MUNDClx1NTk4MgpcdTZDMzQKXHU1MzE2Clx1OUFEOApcdTgxRUEKXHU0RThDClx1NzQwNgpcdThENzcKXHU1QzBGClx1NzI2OQpcdTczQjAKXHU1QjlFClx1NTJBMApcdTkxQ0YKXHU5MEZEClx1NEUyNApcdTRGNTMKXHU1MjM2Clx1NjczQQpcdTVGNTMKXHU0RjdGClx1NzBCOQpcdTRFQ0UKXHU0RTFBClx1NjcyQwpcdTUzQkIKXHU2MjhBClx1NjAyNwpcdTU5N0QKXHU1RTk0Clx1NUYwMApcdTVCODMKXHU1NDA4Clx1OEZEOApcdTU2RTAKXHU3NTMxClx1NTE3NgpcdTRFOUIKXHU3MTM2Clx1NTI0RApcdTU5MTYKXHU1OTI5Clx1NjUzRgpcdTU2REIKXHU2NUU1Clx1OTBBMwpcdTc5M0UKXHU0RTQ5Clx1NEU4QgpcdTVFNzMKXHU1RjYyClx1NzZGOApcdTUxNjgKXHU4ODY4Clx1OTVGNApcdTY4MzcKXHU0RTBFClx1NTE3MwpcdTU0MDQKXHU5MUNEClx1NjVCMApcdTdFQkYKXHU1MTg1Clx1NjU3MApcdTZCNjMKXHU1RkMzClx1NTNDRApcdTRGNjAKXHU2NjBFClx1NzcwQgpcdTUzOUYKXHU1M0M4Clx1NEU0OApcdTUyMjkKXHU2QkQ0Clx1NjIxNgpcdTRGNDYKXHU4RDI4Clx1NkMxNApcdTdCMkMKXHU1NDExClx1OTA1MwpcdTU0N0QKXHU2QjY0Clx1NTNEOApcdTY3NjEKXHU1M0VBClx1NkNBMQpcdTdFRDMKXHU4OUUzClx1OTVFRQpcdTYxMEYKXHU1RUZBClx1NjcwOApcdTUxNkMKXHU2NUUwClx1N0NGQgpcdTUxOUIKXHU1Rjg4Clx1NjBDNQpcdTgwMDUKXHU2NzAwClx1N0FDQgpcdTRFRTMKXHU2MEYzClx1NURGMgpcdTkwMUEKXHU1RTc2Clx1NjNEMApcdTc2RjQKXHU5ODk4Clx1NTE1QQpcdTdBMEIKXHU1QzU1Clx1NEU5NApcdTY3OUMKXHU2NTk5Clx1OEM2MQpcdTU0NTgKXHU5NzY5Clx1NEY0RApcdTUxNjUKXHU1RTM4Clx1NjU4NwpcdTYwM0IKXHU2QjIxClx1NTRDMQpcdTVGMEYKXHU2RDNCClx1OEJCRQpcdTUzQ0EKXHU3QkExClx1NzI3OQpcdTRFRjYKXHU5NTdGClx1NkM0MgpcdTgwMDEKXHU1OTM0Clx1NTdGQQpcdThENDQKXHU4RkI5Clx1NkQ0MQpcdThERUYKXHU3RUE3Clx1NUMxMQpcdTU2RkUKXHU1QzcxClx1N0VERgpcdTYzQTUKXHU3N0U1Clx1OEY4MwpcdTVDMDYKXHU3RUM0Clx1ODlDMQpcdThCQTEKXHU1MjJCClx1NTk3OQpcdTYyNEIKXHU4OUQyClx1NjcxRgpcdTY4MzkKXHU4QkJBClx1OEZEMApcdTUxOUMKXHU2MzA3Clx1NTFFMApcdTRFNUQKXHU1MzNBClx1NUYzQQpcdTY1M0UKXHU1MUIzClx1ODk3RgpcdTg4QUIKXHU1RTcyClx1NTA1QQpcdTVGQzUKXHU2MjE4Clx1NTE0OApcdTU2REUKXHU1MjE5Clx1NEVGQgpcdTUzRDYKXHU2MzZFClx1NTkwNApcdTk2MUYKXHU1MzU3Clx1N0VEOQpcdTgyNzIKXHU1MTQ5Clx1OTVFOApcdTUzNzMKXHU0RkREClx1NkNCQgpcdTUzMTcKXHU5MDIwClx1NzY3RQpcdTg5QzQKXHU3MEVEClx1OTg4NgpcdTRFMDMKXHU2RDc3Clx1NTNFMwpcdTRFMUMKXHU1QkZDClx1NTY2OApcdTUzOEIKXHU1RkQ3Clx1NEUxNgpcdTkxRDEKXHU1ODlFClx1NEU4OQpcdTZENEUKXHU5NjM2Clx1NkNCOQpcdTYwMUQKXHU2NzJGClx1Njc4MQpcdTRFQTQKXHU1M0Q3Clx1ODA1NApcdTRFQzAKXHU4QkE0Clx1NTE2RApcdTUxNzEKXHU2NzQzClx1NjUzNgpcdThCQzEKXHU2NTM5Clx1NkUwNQpcdTdGOEUKXHU1MThEClx1OTFDNwpcdThGNkMKXHU2NkY0Clx1NTM1NQpcdTk4Q0UKXHU1MjA3Clx1NjI1MwpcdTc2N0QKXHU2NTU5Clx1OTAxRgpcdTgyQjEKXHU1RTI2Clx1NUI4OQpcdTU3M0EKXHU4RUFCClx1OEY2NgpcdTRGOEIKXHU3NzFGClx1NTJBMQpcdTUxNzcKXHU0RTA3Clx1NkJDRgpcdTc2RUUKXHU4MUYzClx1OEZCRQpcdThENzAKXHU3OUVGClx1NzkzQQpcdThCQUUKXHU1OEYwClx1NjJBNQpcdTY1OTcKXHU1QjhDClx1N0M3QgpcdTUxNkIKXHU3OUJCClx1NTM0RQpcdTU0MEQKXHU3ODZFClx1NjI0RApcdTc5RDEKXHU1RjIwClx1NEZFMQpcdTlBNkMKXHU4MjgyClx1OEJERApcdTdDNzMKXHU2NTc0Clx1N0E3QQpcdTUxNDMKXHU1MUI1Clx1NEVDQQpcdTk2QzYKXHU2RTI5Clx1NEYyMApcdTU3MUYKXHU4QkI4Clx1NkI2NQpcdTdGQTQKXHU1RTdGClx1NzdGMwpcdThCQjAKXHU5NzAwClx1NkJCNQpcdTc4MTQKXHU3NTRDClx1NjJDOQpcdTY3OTcKXHU1RjhCClx1NTNFQgpcdTRFMTQKXHU3QTc2Clx1ODlDMgpcdThEOEEKXHU3RUM3Clx1ODhDNQpcdTVGNzEKXHU3Qjk3Clx1NEY0RQpcdTYzMDEKXHU5N0YzClx1NEYxNwpcdTRFNjYKXHU1RTAzClx1NTkwRApcdTVCQjkKXHU1MTNGClx1OTg3QgpcdTk2NDUKXHU1NTQ2Clx1OTc1RQpcdTlBOEMKXHU4RkRFClx1NjVBRApcdTZERjEKXHU5NkJFClx1OEZEMQpcdTc3RkYKXHU1MzQzClx1NTQ2OApcdTU5RDQKXHU3RDIwClx1NjI4MApcdTU5MDcKXHU1MzRBClx1NTI5RQpcdTk3NTIKXHU3NzAxClx1NTIxNwpcdTRFNjAKXHU1NENEClx1N0VBNgpcdTY1MkYKXHU4MjJDClx1NTNGMgpcdTYxMUYKXHU1MkIzClx1NEZCRgpcdTU2RTIKXHU1RjgwClx1OTE3OApcdTUzODYKXHU1RTAyClx1NTE0QgpcdTRGNTUKXHU5NjY0Clx1NkQ4OApcdTY3ODQKXHU1RTlDClx1NzlGMApcdTU5MkEKXHU1MUM2Clx1N0NCRQpcdTUwM0MKXHU1M0Y3Clx1NzM4NwpcdTY1Q0YKXHU3RUY0Clx1NTIxMgpcdTkwMDkKXHU2ODA3Clx1NTE5OQpcdTVCNTgKXHU1MDE5Clx1NkJEQgpcdTRFQjIKXHU1RkVCClx1NjU0OApcdTY1QUYKXHU5NjYyClx1NjdFNQpcdTZDNUYKXHU1NzhCClx1NzczQwpcdTczOEIKXHU2MzA5Clx1NjgzQwpcdTUxN0IKXHU2NjEzClx1N0Y2RQpcdTZEM0UKXHU1QzQyClx1NzI0NwpcdTU5Q0IKXHU1Mzc0Clx1NEUxMwpcdTcyQjYKXHU4MEIyClx1NTM4MgpcdTRFQUMKXHU4QkM2Clx1OTAwMgpcdTVDNUUKXHU1NzA2Clx1NTMwNQpcdTcwNkIKXHU0RjRGClx1OEMwMwpcdTZFRTEKXHU1M0JGClx1NUM0MApcdTcxNjcKXHU1M0MyClx1N0VBMgpcdTdFQzYKXHU1RjE1Clx1NTQyQwpcdThCRTUKXHU5NEMxClx1NEVGNwpcdTRFMjUKXHU5OTk2Clx1NUU5NQpcdTZEQjIKXHU1Qjk4Clx1NUZCNwpcdTk2OEYKXHU3NUM1Clx1ODJDRgpcdTU5MzEKXHU1QzE0Clx1NkI3QgpcdThCQjIKXHU5MTREClx1NTk3MwpcdTlFQzQKXHU2M0E4Clx1NjYzRQpcdThDMDgKXHU3RjZBClx1Nzk1RQpcdTgyN0EKXHU1NDYyClx1NUUyRApcdTU0MkIKXHU0RjAxClx1NjcxQgpcdTVCQzYKXHU2Mjc5Clx1ODQyNQpcdTk4NzkKXHU5NjMyClx1NEUzRQpcdTc0MDMKXHU4MkYxClx1NkMyNwpcdTUyQkYKXHU1NDRBClx1Njc0RQpcdTUzRjAKXHU4NDNEClx1NjcyOApcdTVFMkUKXHU4RjZFClx1NzgzNApcdTRFOUEKXHU1RTA4Clx1NTZGNApcdTZDRTgKXHU4RkRDClx1NUI1NwpcdTY3NTAKXHU2MzkyClx1NEY5QgpcdTZDQjMKXHU2MDAxClx1NUMwMQpcdTUzRTYKXHU2NUJEClx1NTFDRgpcdTY4MTEKXHU2RUI2Clx1NjAwRQpcdTZCNjIKXHU2ODQ4Clx1OEEwMApcdTU4RUIKXHU1NzQ3Clx1NkI2NgpcdTU2RkEKXHU1M0Y2Clx1OUM3QwpcdTZDRTIKXHU4OUM2Clx1NEVDNQpcdThEMzkKXHU3RDI3Clx1NzIzMQpcdTVERTYKXHU3QUUwClx1NjVFOQpcdTY3MUQKXHU1QkIzClx1N0VFRApcdThGN0IKXHU2NzBEClx1OEJENQpcdTk4REYKXHU1MTQ1Clx1NTE3NQpcdTZFOTAKXHU1MjI0Clx1NjJBNApcdTUzRjgKXHU4REIzClx1NjdEMApcdTdFQzMKXHU1REVFClx1ODFGNApcdTY3N0YKXHU3NTMwClx1OTY0RApcdTlFRDEKXHU3MkFGClx1OEQxRgpcdTUxRkIKXHU4MzAzClx1N0VFNwpcdTUxNzQKXHU0RjNDClx1NEY1OQpcdTU3NUEKXHU2NkYyClx1OEY5MwpcdTRGRUUKXHU2NTQ1Clx1NTdDRQpcdTU5MkIKXHU1OTFGClx1OTAwMQpcdTdCMTQKXHU4MjM5Clx1NTM2MApcdTUzRjMKXHU4RDIyClx1NTQwMwpcdTVCQ0MKXHU2NjI1Clx1ODA0QwpcdTg5QzkKXHU2QzQ5Clx1NzUzQgpcdTUyOUYKXHU1REY0Clx1OERERgpcdTg2N0QKXHU2NzQyClx1OThERQpcdTY4QzAKXHU1NDM4Clx1NTJBOQpcdTUzNDcKXHU5NjMzClx1NEU5MgpcdTUyMUQKXHU1MjFCClx1NjI5NwpcdTgwMDMKXHU2Mjk1Clx1NTc0RgpcdTdCNTYKXHU1M0U0Clx1NUY4NApcdTYzNjIKXHU2NzJBClx1OEREMQpcdTc1NTkKXHU5NEEyClx1NjZGRQpcdTdBRUYKXHU4RDIzClx1N0FEOQpcdTdCODAKXHU4RkYwClx1OTRCMQpcdTUyNkYKXHU1QzNEClx1NUUxRApcdTVDMDQKXHU4MzQ5Clx1NTFCMgpcdTYyN0YKXHU3MkVDClx1NEVFNApcdTk2NTAKXHU5NjNGClx1NUJBMwpcdTczQUYKXHU1M0NDClx1OEJGNwpcdThEODUKXHU1RkFFClx1OEJBOQpcdTYzQTcKXHU1RERFClx1ODI2RgpcdThGNzQKXHU2MjdFClx1NTQyNgpcdTdFQUEKXHU3NkNBClx1NEY5RApcdTRGMTgKXHU5ODc2Clx1Nzg0MApcdThGN0QKXHU1MDEyClx1NjIzRgpcdTdBODEKXHU1NzUwClx1N0M4OQpcdTY1NEMKXHU3NTY1Clx1NUJBMgpcdTg4ODEKXHU1MUI3Clx1ODBEQwpcdTdFREQKXHU2NzkwClx1NTc1NwpcdTUyNDIKXHU2RDRCClx1NEUxRApcdTUzNEYKXHU4QkM5Clx1NUZGNQpcdTk2NDgKXHU0RUNEClx1N0Y1NwpcdTc2RDAKXHU1M0NCClx1NkQwQgpcdTk1MTkKXHU4MkU2Clx1NTkxQwpcdTUyMTEKXHU3OUZCClx1OTg5MQpcdTkwMTAKXHU5NzYwClx1NkRGNwpcdTZCQ0QKXHU3N0VEClx1NzZBRQpcdTdFQzgKXHU4MDVBClx1NkM3RApcdTY3NTEKXHU0RTkxClx1NTRFQQpcdTY1RTIKXHU4REREClx1NTM2QgpcdTUwNUMKXHU3MEM4Clx1NTkyRQpcdTVCREYKXHU3MEU3Clx1OEZDNQpcdTU4ODMKXHU4MkU1Clx1NTM3MApcdTZEMzIKXHU1MjNCClx1NjJFQwpcdTZGQzAKXHU1QjU0Clx1NjQxRQpcdTc1MUEKXHU1QkE0Clx1NUY4NQpcdTY4MzgKXHU2ODIxClx1NjU2MwpcdTRGQjUKXHU1NDI3Clx1NzUzMgpcdTZFMzgKXHU0RTQ1Clx1ODNEQwpcdTU0NzMKXHU2NUU3Clx1NkEyMQpcdTZFNTYKXHU4RDI3Clx1NjM1RgpcdTk4ODQKXHU5NjNCClx1NkJFQgpcdTY2NkUKXHU3QTMzClx1NEU1OQpcdTU5ODgKXHU2OTBEClx1NjA2RgpcdTYyNjkKXHU5NEY2Clx1OEJFRApcdTYzMjUKXHU5MTUyClx1NUI4OApcdTYyRkYKXHU1RThGClx1N0VCOApcdTUzM0IKXHU3RjNBClx1OTZFOApcdTU0MTcKXHU5NDg4Clx1NTIxOApcdTU1NEEKXHU2MDI1Clx1NTUzMQpcdThCRUYKXHU4QkFEClx1NjEzRgpcdTVCQTEKXHU5NjQ0Clx1ODNCNwpcdTgzMzYKXHU5QzlDClx1N0NBRQpcdTY1QTQKXHU1QjY5Clx1ODEzMQpcdTc4NkIKXHU4MEE1Clx1NTU4NApcdTlGOTkKXHU2RjE0Clx1NzIzNgpcdTZFMTAKXHU4ODQwClx1NkIyMgpcdTY4QjAKXHU2MzhDClx1NkI0QwpcdTZDOTkKXHU1MjFBClx1NjUzQgpcdThDMTMKXHU3NkZFClx1OEJBOApcdTY2NUEKXHU3QzkyClx1NEU3MQpcdTcxQzMKXHU3N0RCClx1NEU0RQpcdTY3NDAKXHU4MzZGClx1NUI4MQpcdTlDODEKXHU4RDM1Clx1OTQ5RgpcdTcxNjQKXHU4QkZCClx1NzNFRApcdTRGMkYKXHU5OTk5Clx1NEVDQgpcdThGRUIKXHU1M0U1Clx1NEUzMApcdTU3RjkKXHU2M0UxClx1NTE3MApcdTYyQzUKXHU1RjI2Clx1ODZDQgpcdTZDODkKXHU1MDQ3Clx1N0E3RgpcdTYyNjcKXHU3QjU0Clx1NEU1MApcdThDMDEKXHU5ODdBClx1NzBERgpcdTdGMjkKXHU1RjgxClx1ODEzOApcdTU1OUMKXHU2NzdFClx1ODExQQpcdTU2RjAKXHU1RjAyClx1NTE0RApcdTgwQ0MKXHU2NjFGClx1Nzk4RgpcdTRFNzAKXHU2N0QzClx1NEU5NQpcdTY5ODIKXHU2MTYyClx1NjAxNQpcdTc4QzEKXHU1MDBEClx1Nzk1NgpcdTc2ODcKXHU0RkMzClx1OTc1OQpcdTg4NjUKXHU4QkM0Clx1N0ZGQgpcdTgwODkKXHU4REY1Clx1NUMzQwpcdTg4NjMKXHU1QkJEClx1NjI2QwpcdTY4QzkKXHU1RTBDClx1NEYyNApcdTY0Q0QKXHU1NzgyClx1NzlDQgpcdTVCOUMKXHU2QzIyClx1NTk1NwpcdTc3NjMKXHU2MzJGClx1NjdCNgpcdTRFQUUKXHU2NzJCClx1NUJBQQpcdTVFODYKXHU3RjE2Clx1NzI1QgpcdTg5RTYKXHU2NjIwClx1OTZGNwpcdTk1MDAKXHU4QkQ3Clx1NUVBNwpcdTVDNDUKXHU2MjkzClx1ODhDMgpcdTgwREUKXHU1NDdDClx1NUExOApcdTY2NkYKXHU1QTAxClx1N0VGRgpcdTY2NzYKXHU1MzlBClx1NzZERgpcdTg4NjEKXHU5RTIxClx1NUI1OQpcdTVFRjYKXHU1MzcxClx1ODBGNgpcdTVDNEIKXHU0RTYxClx1NEUzNApcdTk2NDYKXHU5ODdFClx1NjM4OQpcdTU0NDAKXHU3MDZGClx1NUM4MQpcdTYzQUEKXHU2NzVGClx1ODAxMApcdTUyNjcKXHU3Mzg5Clx1OEQ3NQpcdThERjMKXHU1NEU1Clx1NUI2MwpcdThCRkUKXHU1MUVGClx1ODBFMQpcdTk4OUQKXHU2QjNFClx1N0VDRApcdTUzNzcKXHU5RjUwClx1NEYxRgpcdTg0QjgKXHU2Qjk2Clx1NkMzOApcdTVCOTcKXHU4MkQ3Clx1NURERApcdTcwODkKXHU1Q0E5Clx1NUYzMQpcdTk2RjYKXHU2NzY4Clx1NTk0RgpcdTZDQkYKXHU5NzMyClx1Njc0NgpcdTYzQTIKXHU2RUQxClx1OTU0NwpcdTk5NkQKXHU2RDUzClx1ODIyQQpcdTYwMDAKXHU4RDc2Clx1NUU5MwpcdTU5M0EKXHU0RjBBClx1NzA3NQpcdTdBMEUKXHU5MDE0Clx1NzA2RApcdThENUIKXHU1RjUyClx1NTNFQwpcdTlGMTMKXHU2NEFEClx1NzZEOApcdTg4QzEKXHU5NjY5Clx1NUVCNwpcdTU1MkYKXHU1RjU1Clx1ODNDQwpcdTdFQUYKXHU1MDFGClx1N0NENgpcdTc2RDYKXHU2QTJBClx1N0IyNgpcdTc5QzEKXHU1MkFBClx1NTgwMgpcdTU3REYKXHU2N0FBClx1NkRBNgpcdTVFNDUKXHU1NEM4Clx1N0FERgpcdTcxOUYKXHU4NjZCClx1NkNGRApcdTgxMTEKXHU1OEU0Clx1NzhCMwpcdTZCMjcKXHU5MDREClx1NEZBNwpcdTVCRTgKXHU2NTYyClx1NUY3QgpcdTg2NTEKXHU2NTlDClx1ODU4NApcdTVFQUQKXHU3RUIzClx1NUYzOQpcdTk5NzIKXHU0RjM4Clx1NjI5OApcdTlFQTYKXHU2RTdGClx1NjY5NwpcdTgzNzcKXHU3NEU2Clx1NTg1RQpcdTVFOEEKXHU3QjUxClx1NjA3NgpcdTYyMzcKXHU4QkJGClx1NTg1NApcdTU5NDcKXHU5MDBGClx1Njg4MQpcdTUyMDAKXHU2NUNCClx1OEZGOQpcdTUzNjEKXHU2QzJGClx1OTA0NwpcdTRFRkQKXHU2QkQyClx1NkNFNQpcdTkwMDAKXHU2RDE3Clx1NjQ0NgpcdTcwNzAKXHU1RjY5Clx1NTM1NgpcdTgwMTcKXHU1OTBGClx1NjJFOQpcdTVGRDkKXHU5NERDClx1NzMyRQpcdTc4NkMKXHU0RTg4Clx1N0U0MQpcdTU3MDgKXHU5NkVBClx1NTFGRApcdTRFQTYKXHU2MkJEClx1N0JDNwpcdTk2MzUKXHU5NjM0Clx1NEUwMQpcdTVDM0EKXHU4RkZEClx1NTgwNgpcdTk2QzQKXHU4RkNFClx1NkNEQgpcdTcyMzgKXHU2OTdDClx1OTA3RgpcdThDMEIKXHU1NDI4Clx1OTFDRQpcdTczMkEKXHU2NUQ3Clx1N0QyRgpcdTUwNEYKXHU1MTc4Clx1OTk4NgpcdTdEMjIKXHU3OUU2Clx1ODEwMgpcdTZGNkUKXHU3MjM3Clx1OEM0NgpcdTVGRkQKXHU2MjU4Clx1NjBDQQpcdTU4NTEKXHU5MDU3Clx1NjEwOApcdTY3MzEKXHU2NkZGClx1N0VBNApcdTdDOTcKXHU1MDNFClx1NUMxQQpcdTc1REIKXHU2OTVBClx1OEMyMgpcdTU5NEIKXHU4RDJEClx1NzhFOApcdTU0MUIKXHU2QzYwClx1NjVDMQpcdTc4OEUKXHU5QUE4Clx1NzZEMQpcdTYzNTUKXHU1RjFGClx1NjZCNApcdTUyNzIKXHU4RDJGClx1NkI4QQpcdTkxQ0EKXHU4QkNEClx1NEVBMQpcdTU4QzEKXHU5ODdGClx1NUI5RApcdTUzNDgKXHU1QzE4Clx1OTVGQgpcdTYzRUQKXHU3MEFFClx1NkI4QgpcdTUxQUMKXHU2ODY1Clx1NTk4NwpcdThCNjYKXHU3RUZDClx1NjJEQgpcdTU0MzQKXHU0RUQ4Clx1NkQ2RQpcdTkwNkQKXHU1RjkwClx1NjBBOApcdTY0NDcKXHU4QzM3Clx1OEQ1RQpcdTdCQjEKXHU5Njk0Clx1OEJBMgpcdTc1MzcKXHU1NDM5Clx1NTZFRApcdTdFQjcKXHU1NTEwClx1OEQyNQpcdTVCOEIKXHU3M0JCClx1NURFOApcdTgwMTUKXHU1NzY2Clx1ODM2MwpcdTk1RUQKXHU2RTdFClx1OTUyRQpcdTUxRTEKXHU5QTdCClx1OTUwNQpcdTY1NTEKXHU2MDY5Clx1NTI2NQpcdTUxREQKXHU3OEIxClx1OUY3RgpcdTYyMkEKXHU3MEJDClx1OUVCQgpcdTdFQkEKXHU3OTgxClx1NUU5RgpcdTc2REIKXHU3MjQ4Clx1N0YxMwpcdTUxQzAKXHU3NzVCClx1NjYwQwpcdTVBNUEKXHU2RDg5Clx1N0I1MgpcdTU2MzQKXHU2M0QyClx1NUNCOApcdTY3MTcKXHU1RTg0Clx1ODg1NwpcdTg1Q0YKXHU1OUQxClx1OEQzOApcdTgxNTAKXHU1OTc0Clx1NTU2NgpcdTYwRUYKXHU0RTU4Clx1NEYxOQpcdTYwNjIKXHU1MzAwClx1N0VCMQpcdTYyNEUKXHU4RkE5Clx1ODAzMwpcdTVGNkEKXHU4MUUzClx1NEVCRgpcdTc0ODMKXHU2MkI1Clx1ODEwOQpcdTc5QzAKXHU4NDI4Clx1NEZDNApcdTdGNTEKXHU4MjFFClx1NUU5NwpcdTU1QjcKXHU3RUI1Clx1NUJGOApcdTZDNTcKXHU2MzAyClx1NkQyQQpcdThEM0EKXHU5NUVBClx1NjdFQwpcdTcyMDYKXHU3MEVGClx1NkQyNQpcdTdBM0IKXHU1ODk5Clx1OEY2RgpcdTUyQzcKXHU1MENGClx1NkVEQQpcdTUzOTgKXHU4NDk5Clx1ODJCMwpcdTgwQUYKXHU1NzYxClx1NjdGMQpcdTgzNjEKXHU4MTdGClx1NEVFQQpcdTY1QzUKXHU1QzNFClx1OEY2NwpcdTUxQjAKXHU4RDIxClx1NzY3QgpcdTlFQ0UKXHU1MjRBClx1OTRCQgpcdTUyRDIKXHU5MDAzClx1OTY5QwpcdTZDMjgKXHU5MEVEClx1NUNGMApcdTVFMDEKXHU2RTJGClx1NEYwRgpcdThGNjgKXHU0RUE5Clx1NkJENQpcdTY0RTYKXHU4M0FCClx1NTIzQQpcdTZENkEKXHU3OUQ4Clx1NjNGNApcdTY4MkEKXHU1MDY1Clx1NTUyRQpcdTgwQTEKXHU1QzlCClx1NzUxOApcdTZDRTEKXHU3NzYxClx1N0FFNQpcdTk0RjgKXHU2QzY0Clx1OTYwMApcdTRGMTEKXHU2QzQ3Clx1ODIwRApcdTcyNjcKXHU3RUQ1Clx1NzBCOApcdTU0RjIKXHU3OEY3Clx1N0VFOQpcdTY3MEIKXHU2REUxClx1NUMxNgpcdTU0MkYKXHU5Njc3Clx1NjdGNApcdTU0NDgKXHU1RjkyClx1OTg5QwpcdTZDRUEKXHU3QTBEClx1NUZEOApcdTZDRjUKXHU4NEREClx1NjJENgpcdTZEMUUKXHU2Mzg4Clx1OTU1QwpcdThGOUIKXHU1OEVFClx1OTUwQgpcdThEMkIKXHU4NjVBClx1NUYyRgpcdTY0NjkKXHU2Q0YwClx1NUU3QwpcdTVFRjcKXHU1QzBBClx1N0E5NwpcdTdFQjIKXHU1RjA0Clx1OTZCNgpcdTc1OTEKXHU2QzBGClx1NUJBQgpcdTU5RDAKXHU5NzA3Clx1NzQ1RQpcdTYwMkEKXHU1QzI0Clx1NzQzNApcdTVGQUEKXHU2M0NGClx1ODE5QwpcdThGREQKXHU1OTM5Clx1ODE3MApcdTdGMTgKXHU3M0UwClx1N0E3NwpcdTY4RUUKXHU2NzlEClx1N0FGOQpcdTZDOUYKXHU1MEFDClx1N0VGMwpcdTVGQzYKXHU5MEE2Clx1NTI2OQpcdTVFNzgKXHU2RDQ2Clx1NjgwRgpcdTYyRTUKXHU3MjU5Clx1OEQyRQpcdTc5M0MKXHU2RUU0Clx1OTRBMApcdTdFQjkKXHU3RjYyClx1NjJDRApcdTU0QjEKXHU1NThBClx1ODg5NgpcdTU3QzMKXHU1MkU0Clx1N0Y1QQpcdTcxMjYKXHU2RjVDClx1NEYwRApcdTU4QTgKXHU2QjMyClx1N0YxRApcdTU5RDMKXHU1MjBBClx1OTk3MQpcdTRFRkYKXHU1OTU2Clx1OTRERApcdTlCM0MKXHU0RTNEClx1OERFOApcdTlFRDgKXHU2MzE2Clx1OTRGRQpcdTYyNkIKXHU1NTlEClx1ODg4QgpcdTcwQUQKXHU2QzYxClx1NUU1NQpcdThCRjgKXHU1RjI3Clx1NTJCMQpcdTY4ODUKXHU1OTc2Clx1NkQwMQpcdTcwN0UKXHU4MjFGClx1OTI3NApcdTgyRUYKXHU4QkJDClx1NjJCMQpcdTZCQzEKXHU2MUMyClx1NUJEMgpcdTY2N0EKXHU1N0Q0Clx1NUJDNApcdTVDNEEKXHU4REMzClx1NkUyMQpcdTYzMTEKXHU0RTM5Clx1ODI3MApcdThEMUQKXHU3OEIwClx1NjJENApcdTcyMzkKXHU2MjM0Clx1NzgwMQpcdTY4QTYKXHU4MkJEClx1NzE5NApcdThENjQKXHU2RTE0Clx1NTRFRApcdTY1NkMKXHU5ODk3Clx1NTk1NApcdTk0QzUKXHU0RUYyClx1ODY0RQpcdTdBMDAKXHU1OUI5Clx1NEU0RgpcdTczQ0QKXHU3NTMzClx1Njg0QwpcdTkwNzUKXHU1MTQxClx1OTY4NgpcdTg3QkEKXHU0RUQzClx1OUI0RgpcdTk1MTAKXHU2NjUzClx1NkMyRQpcdTUxN0MKXHU5NjkwClx1Nzg4RApcdThENkIKXHU2MkU4Clx1NUZFMApcdTgwODMKXHU3RjM4Clx1NzI3NQpcdTYyQTIKXHU1MzVBClx1NURFNwpcdTU4RjMKXHU1MTQ0Clx1Njc1QwpcdThCQUYKXHU4QkRBClx1NzhBNwpcdTc5NjUKXHU2N0VGClx1OTg3NQpcdTVERTEKXHU3N0U5Clx1NjBCMgpcdTcwNEMKXHU5Rjg0Clx1NEYyNgpcdTc5NjgKXHU1QkZCClx1Njg0MgpcdTk0RkEKXHU1NzIzClx1NjA1MApcdTYwNzAKXHU5MEQxClx1OERBMwpcdTYyQUMKXHU4MzUyClx1ODE3RQpcdThEMzQKXHU2N0Q0Clx1NkVGNApcdTczMUIKXHU5NjE0Clx1OEY4NgpcdTU5QkIKXHU1ODZCClx1NjRBNApcdTUwQTgKXHU3QjdFClx1OTVGOQpcdTYyNzAKXHU3RDJCClx1NzgwMgpcdTkwMTIKXHU2MjBGClx1NTQwQQpcdTk2NzYKXHU0RjEwClx1NTU4MgpcdTc1OTcKXHU3NEY2Clx1NUE0NgpcdTYyOUEKXHU4MUMyClx1NjQ3OApcdTVGQ0QKXHU4NjdFClx1ODcyMQpcdTkwQkIKXHU4MEY4Clx1NURFOQpcdTYzMjQKXHU1MDc2Clx1NUYwMwpcdTY5RkQKXHU1MkIyClx1NEU3MwpcdTkwOTMKXHU1NDA5Clx1NEVDMQpcdTcwQzIKXHU3ODE2Clx1NzlERgpcdTRFNEMKXHU4MjMwClx1NEYzNApcdTc0REMKXHU2RDQ1Clx1NEUxOQpcdTY2ODIKXHU3MUU1Clx1NkE2MQpcdTY3RjMKXHU4RkY3Clx1NjY5NgpcdTcyNEMKXHU3OUU3Clx1ODBDNgpcdThCRTYKXHU3QzI3Clx1OEUwRgpcdTc0RjcKXHU4QzMxClx1NTQ0NgpcdTVCQkUKXHU3Q0NBClx1NkQxQgpcdThGODkKXHU2MTI0Clx1N0FERQpcdTk2OTkKXHU2MDEyClx1N0M5OApcdTRFNDMKXHU3RUVBClx1ODBBOQpcdTdDNEQKXHU2NTRGClx1NkQ4MgpcdTcxOTkKXHU3Njg2Clx1NEZBNgpcdTYwQUMKXHU2Mzk4Clx1NEVBQgpcdTdFQTAKXHU5MTkyClx1NzJDMgpcdTk1MDEKXHU2REMwClx1NjA2OApcdTcyNzIKXHU5NzM4Clx1NzIyQwpcdThENEYKXHU5MDA2Clx1NzNBOQpcdTk2NzUKXHU3OTVEClx1NzlEMgpcdTZENTkKXHU4QzhDClx1NUY3OQpcdTVGN0MKXHU2MDg5Clx1OUUyRApcdThEOEIKXHU1MUU0Clx1NjY2OApcdTc1NUMKXHU4Rjg4Clx1NzlFOQpcdTUzNzUKXHU3RjcyClx1NjhBRgpcdTcwOEUKXHU2RUU5Clx1NjhDQgpcdTlBNzEKXHU3QjVCClx1NUNFMQpcdTUxOTIKXHU1NTY1Clx1NUJGRgpcdThCRDEKXHU2RDc4Clx1NkNDOQpcdTVFM0QKXHU4RkRGClx1Nzg0NQpcdTc1ODYKXHU4RDM3Clx1NkYwRgpcdTdBM0YKXHU1MUEwClx1NUFFOQpcdTgwQzEKXHU4MkFGClx1NzI2MgpcdTUzREIKXHU4NjgwClx1NTk2NQpcdTlFMjMKXHU1Q0FEClx1N0Y4QQpcdTUxRUQKXHU0RTMyClx1NTg1OApcdTdFRDgKXHU5MTc1Clx1ODc4RApcdTc2QzYKXHU5NTIxClx1NUU5OQpcdTdCNzkKXHU1MUJCClx1OEY4NQpcdTY0NDQKXHU4OEFEClx1N0I0QgpcdTYyRDIKXHU1MERBClx1NjVGMQpcdTk0QkUKXHU5RTFGClx1NkYwNgpcdTZDODgKXHU3NzA5Clx1NzU4RgpcdTZERkIKXHU2OEQyClx1N0E1NwpcdTc4NUQKXHU5N0U5Clx1OTAzQwpcdTYyNkQKXHU0RkE4Clx1NTFDOQpcdTYzM0EKXHU3ODk3Clx1NjgzRApcdTcwOTIKXHU2NzZGClx1NjBBMwpcdTk5OEYKXHU1MjlEClx1OEM2QQpcdThGQkQKXHU1MkMzClx1OUUzRgpcdTY1RTYKXHU1NDBGClx1NjJEQwpcdTcyRDcKXHU1N0NCClx1OEY4QQpcdTYzQTkKXHU5OTZFClx1NjQyQwpcdTlBODIKXHU4RjlFClx1NTJGRQpcdTYyNjMKXHU0RjMwClx1ODQ4QgpcdTdFRDIKXHU5NkZFClx1NEUwOApcdTY3MzUKXHU1OUM2Clx1NjJERgpcdTVCODcKXHU4RjkxClx1OTY1NQpcdTk2RDUKXHU1MDdGClx1ODRDNApcdTVEMDcKXHU1MjZBClx1NTAyMQpcdTUzODUKXHU1NEFDClx1OUE3NgpcdTg1QUYKXHU1MjM3Clx1NjVBNQpcdTc1NkEKXHU4RDRCClx1NTk0OQpcdTRGNUIKXHU2RDQ3Clx1NkYyQgpcdTY2RkMKXHU2MjQ3Clx1OTQ5OQpcdTY4NDMKXHU2Mjc2Clx1NEVENApcdThGRDQKXHU0RkQ3Clx1NEU4RgpcdTgxNTQKXHU5NzhCClx1NjhGMQpcdTg5ODYKXHU2ODQ2Clx1NjA4NApcdTUzRDQKXHU2NDlFClx1OUE5NwpcdTUyRDgKXHU2NUZBClx1NkNCOApcdTVCNjQKXHU1NDEwClx1NUI1RgpcdTZFMjAKXHU1QzQ4Clx1NzVCRQpcdTU5OTkKXHU2MERDClx1NEVGMApcdTcyRTAKXHU4MEMwClx1OEMxMApcdTYyOUIKXHU5NzA5Clx1Njg1MQpcdTVDOTcKXHU1NjFCClx1ODg3MApcdTc2RDcKXHU2RTE3Clx1ODEwRgpcdThENTYKXHU2RDhDClx1NzUxQwpcdTY2RjkKXHU5NjA1Clx1ODA4QwpcdTU0RTkKXHU1Mzg5Clx1NzBDMwpcdTdFQUMKXHU2QkM1Clx1NjYyOApcdTRGMkEKXHU3NUM3Clx1NzE2RQpcdTUzRjkKXHU5NDg5Clx1NjQyRApcdTgzMEUKXHU3QjNDClx1OTE3NwpcdTUwNzcKXHU1RjEzClx1OTUyNQpcdTYwNTIKXHU2NzcwClx1NTc1MQpcdTlGM0IKXHU3RkZDClx1N0VCNgpcdTUzRDkKXHU3MkYxClx1OTAyRQpcdTdGNTAKXHU3RURDClx1NjhEQQpcdTYyOTEKXHU4MUE4Clx1ODUyQwpcdTVCRkEKXHU5QUE0Clx1N0E0NgpcdTUxQjYKXHU2N0FGClx1NTE4QwpcdTVDMzgKXHU1MUY4Clx1N0VDNQpcdTU3NkYKXHU3MjdBClx1NzEzMApcdThGNzAKXHU2QjIzClx1NjY0QgpcdTc2MjYKXHU1RkExClx1OTUyRApcdTk1MjYKXHU0RTI3Clx1NjVFQwpcdTk1M0IKXHU1Nzg0Clx1NjQxQwpcdTYyNTEKXHU5MDgwClx1NEVBRApcdTkxNkYKXHU4RkM4Clx1ODIxMgpcdTgxMDYKXHU5MTc2Clx1OTVGMgpcdTVGRTcKXHU5MTVBClx1OTg3RApcdTdGQkQKXHU2REE4Clx1NTM3OApcdTRFRDcKXHU5NjZBClx1OEY5RgpcdTYwRTkKXHU2NzZEClx1NTlEQQpcdTgwOUEKXHU2MzQ5Clx1OThEOApcdTZGMDIKXHU2NjA2Clx1NkIzQQpcdTU0M0UKXHU5MENFClx1NzBGNwpcdTZDNDEKXHU1NDc1Clx1OTk3MApcdTg0MjcKXHU5NkM1Clx1OTBBRQpcdThGQzEKXHU3MUQ1Clx1NjQ5MgpcdTU5RkIKXHU4RDc0Clx1NUJCNApcdTcwRTYKXHU1MDNBClx1NUUxMApcdTY1OTEKXHU5NEMzClx1NjVFOApcdTkxODcKXHU4NDYzClx1OTk3QwpcdTk2Q0YKXHU1OUZGClx1NjJDQwpcdTUwODUKXHU4MTc5Clx1NTlBNQpcdTYzQzkKXHU4RDI0Clx1NjJDNgpcdTZCNkEKXHU4NDYxClx1ODBGQQpcdTRFMjIKXHU2RDY5Clx1NUZCRApcdTY2MDIKXHU1N0FCClx1NjMyMQpcdTg5QzgKXHU4RDJBClx1NjE3MApcdTdGMzQKXHU2QzZBClx1NjE0QwpcdTUxQUYKXHU4QkZBClx1NTlEQwpcdThDMEEKXHU1MUY2Clx1NTJBMwpcdThCRUMKXHU4MDAwClx1NjYwRgpcdThFQkEKXHU3NkM4Clx1OUE5MQpcdTRFNTQKXHU2RUFBClx1NEUxQgpcdTUzNjIKXHU2MkI5Clx1OTVGNwpcdTU0QTgKXHU1MjJFClx1OUE3RQpcdTdGMDYKXHU2MDlGClx1NjQ1OApcdTk0RDIKXHU2M0I3Clx1OTg4NwpcdTVFN0IKXHU2N0M0Clx1NjBFMApcdTYwRTgKXHU0RjczClx1NEVDNwpcdTgxNEEKXHU3QTlEClx1NkRBNApcdTUyNTEKXHU3N0E3Clx1NTgyMQpcdTZDRkMKXHU4NDcxClx1N0Y2OQpcdTk3MEQKXHU2MzVFClx1ODBDRQpcdTgyQ0QKXHU2RUU4Clx1NEZFOQpcdTYzNDUKXHU2RTU4Clx1NzgwRApcdTk3MUUKXHU5MEI1Clx1ODQwNApcdTc1QUYKXHU2REVFClx1OTA0MgpcdTcxOEEKXHU3Q0FBClx1NzBEOApcdTVCQkYKXHU2ODYzClx1NjIwOApcdTlBNzMKXHU1QUMyClx1ODhENQpcdTVGOTkKXHU3QkFEClx1NjM1MApcdTgwQTAKXHU2NDkxClx1NjY1MgpcdThGQTgKXHU2QkJGClx1ODNCMgpcdTY0NEEKXHU2NDA1Clx1OTE3MQpcdTVDNEYKXHU3NUFCClx1NTRDMApcdTg1MjEKXHU1ODM1Clx1NkNBQgpcdTc2QjEKXHU3NTQ1Clx1NTNFMApcdTk2MDEKXHU4M0IxClx1NjU3MgpcdThGOTYKXHU5NEE5Clx1NzVENQpcdTU3NUQKXHU1REY3Clx1OTk3RgpcdTc5NzgKXHU0RTE4Clx1NzM4NApcdTZFOUMKXHU2NkYwClx1OTAzQgpcdTVGNkQKXHU1QzFEClx1NTM3RgpcdTU5QTgKXHU4MjQ3Clx1NTQxRQpcdTk3RTYKXHU2MDI4Clx1NzdFRQpcdTZCNDdgLnNwbGl0KCJcbiIpOwoKICAvLyBub2RlX21vZHVsZXMvQHNjdXJlL2JpcDM5L2VzbS93b3JkbGlzdHMvc3BhbmlzaC5qcwogIHZhciB3b3JkbGlzdDggPSBgYVx1MDMwMWJhY28KYWJkb21lbgphYmVqYQphYmllcnRvCmFib2dhZG8KYWJvbm8KYWJvcnRvCmFicmF6bwphYnJpcgphYnVlbG8KYWJ1c28KYWNhYmFyCmFjYWRlbWlhCmFjY2VzbwphY2Npb1x1MDMwMW4KYWNlaXRlCmFjZWxnYQphY2VudG8KYWNlcHRhcgphXHUwMzAxY2lkbwphY2xhcmFyCmFjbmVcdTAzMDEKYWNvZ2VyCmFjb3NvCmFjdGl2bwphY3RvCmFjdHJpegphY3R1YXIKYWN1ZGlyCmFjdWVyZG8KYWN1c2FyCmFkaWN0bwphZG1pdGlyCmFkb3B0YXIKYWRvcm5vCmFkdWFuYQphZHVsdG8KYWVcdTAzMDFyZW8KYWZlY3RhcgphZmljaW9cdTAzMDFuCmFmaW5hcgphZmlybWFyCmFcdTAzMDFnaWwKYWdpdGFyCmFnb25pXHUwMzAxYQphZ29zdG8KYWdvdGFyCmFncmVnYXIKYWdyaW8KYWd1YQphZ3VkbwphXHUwMzAxZ3VpbGEKYWd1amEKYWhvZ28KYWhvcnJvCmFpcmUKYWlzbGFyCmFqZWRyZXoKYWplbm8KYWp1c3RlCmFsYWNyYVx1MDMwMW4KYWxhbWJyZQphbGFybWEKYWxiYQphXHUwMzAxbGJ1bQphbGNhbGRlCmFsZGVhCmFsZWdyZQphbGVqYXIKYWxlcnRhCmFsZXRhCmFsZmlsZXIKYWxnYQphbGdvZG9cdTAzMDFuCmFsaWFkbwphbGllbnRvCmFsaXZpbwphbG1hCmFsbWVqYQphbG1pXHUwMzAxYmFyCmFsdGFyCmFsdGV6YQphbHRpdm8KYWx0bwphbHR1cmEKYWx1bW5vCmFsemFyCmFtYWJsZQphbWFudGUKYW1hcG9sYQphbWFyZ28KYW1hc2FyCmFcdTAzMDFtYmFyCmFcdTAzMDFtYml0bwphbWVubwphbWlnbwphbWlzdGFkCmFtb3IKYW1wYXJvCmFtcGxpbwphbmNobwphbmNpYW5vCmFuY2xhCmFuZGFyCmFuZGVcdTAzMDFuCmFuZW1pYQphXHUwMzAxbmd1bG8KYW5pbGxvCmFcdTAzMDFuaW1vCmFuaVx1MDMwMXMKYW5vdGFyCmFudGVuYQphbnRpZ3VvCmFudG9qbwphbnVhbAphbnVsYXIKYW51bmNpbwphblx1MDMwM2FkaXIKYW5cdTAzMDNlam8KYW5cdTAzMDNvCmFwYWdhcgphcGFyYXRvCmFwZXRpdG8KYXBpbwphcGxpY2FyCmFwb2RvCmFwb3J0ZQphcG95bwphcHJlbmRlcgphcHJvYmFyCmFwdWVzdGEKYXB1cm8KYXJhZG8KYXJhblx1MDMwM2EKYXJhcgphXHUwMzAxcmJpdHJvCmFcdTAzMDFyYm9sCmFyYnVzdG8KYXJjaGl2bwphcmNvCmFyZGVyCmFyZGlsbGEKYXJkdW8KYVx1MDMwMXJlYQphXHUwMzAxcmlkbwphcmllcwphcm1vbmlcdTAzMDFhCmFybmVcdTAzMDFzCmFyb21hCmFycGEKYXJwb1x1MDMwMW4KYXJyZWdsbwphcnJvegphcnJ1Z2EKYXJ0ZQphcnRpc3RhCmFzYQphc2Fkbwphc2FsdG8KYXNjZW5zbwphc2VndXJhcgphc2VvCmFzZXNvcgphc2llbnRvCmFzaWxvCmFzaXN0aXIKYXNubwphc29tYnJvCmFcdTAzMDFzcGVybwphc3RpbGxhCmFzdHJvCmFzdHV0bwphc3VtaXIKYXN1bnRvCmF0YWpvCmF0YXF1ZQphdGFyCmF0ZW50bwphdGVvCmFcdTAzMDF0aWNvCmF0bGV0YQphXHUwMzAxdG9tbwphdHJhZXIKYXRyb3oKYXR1XHUwMzAxbgphdWRhegphdWRpbwphdWdlCmF1bGEKYXVtZW50bwphdXNlbnRlCmF1dG9yCmF2YWwKYXZhbmNlCmF2YXJvCmF2ZQphdmVsbGFuYQphdmVuYQphdmVzdHJ1egphdmlvXHUwMzAxbgphdmlzbwpheWVyCmF5dWRhCmF5dW5vCmF6YWZyYVx1MDMwMW4KYXphcgphem90ZQphenVcdTAzMDFjYXIKYXp1ZnJlCmF6dWwKYmFiYQpiYWJvcgpiYWNoZQpiYWhpXHUwMzAxYQpiYWlsZQpiYWphcgpiYWxhbnphCmJhbGNvXHUwMzAxbgpiYWxkZQpiYW1idVx1MDMwMQpiYW5jbwpiYW5kYQpiYW5cdTAzMDNvCmJhcmJhCmJhcmNvCmJhcm5pegpiYXJybwpiYVx1MDMwMXNjdWxhCmJhc3RvXHUwMzAxbgpiYXN1cmEKYmF0YWxsYQpiYXRlcmlcdTAzMDFhCmJhdGlyCmJhdHV0YQpiYXVcdTAzMDFsCmJhemFyCmJlYmVcdTAzMDEKYmViaWRhCmJlbGxvCmJlc2FyCmJlc28KYmVzdGlhCmJpY2hvCmJpZW4KYmluZ28KYmxhbmNvCmJsb3F1ZQpibHVzYQpib2EKYm9iaW5hCmJvYm8KYm9jYQpib2NpbmEKYm9kYQpib2RlZ2EKYm9pbmEKYm9sYQpib2xlcm8KYm9sc2EKYm9tYmEKYm9uZGFkCmJvbml0bwpib25vCmJvbnNhXHUwMzAxaQpib3JkZQpib3JyYXIKYm9zcXVlCmJvdGUKYm90aVx1MDMwMW4KYm9cdTAzMDF2ZWRhCmJvemFsCmJyYXZvCmJyYXpvCmJyZWNoYQpicmV2ZQpicmlsbG8KYnJpbmNvCmJyaXNhCmJyb2NhCmJyb21hCmJyb25jZQpicm90ZQpicnVqYQpicnVzY28KYnJ1dG8KYnVjZW8KYnVjbGUKYnVlbm8KYnVleQpidWZhbmRhCmJ1Zm9cdTAzMDFuCmJ1XHUwMzAxaG8KYnVpdHJlCmJ1bHRvCmJ1cmJ1amEKYnVybGEKYnVycm8KYnVzY2FyCmJ1dGFjYQpidXpvXHUwMzAxbgpjYWJhbGxvCmNhYmV6YQpjYWJpbmEKY2FicmEKY2FjYW8KY2FkYVx1MDMwMXZlcgpjYWRlbmEKY2FlcgpjYWZlXHUwMzAxCmNhaVx1MDMwMWRhCmNhaW1hXHUwMzAxbgpjYWphCmNham9cdTAzMDFuCmNhbApjYWxhbWFyCmNhbGNpbwpjYWxkbwpjYWxpZGFkCmNhbGxlCmNhbG1hCmNhbG9yCmNhbHZvCmNhbWEKY2FtYmlvCmNhbWVsbG8KY2FtaW5vCmNhbXBvCmNhXHUwMzAxbmNlcgpjYW5kaWwKY2FuZWxhCmNhbmd1cm8KY2FuaWNhCmNhbnRvCmNhblx1MDMwM2EKY2FuXHUwMzAzb1x1MDMwMW4KY2FvYmEKY2FvcwpjYXBhegpjYXBpdGFcdTAzMDFuCmNhcG90ZQpjYXB0YXIKY2FwdWNoYQpjYXJhCmNhcmJvXHUwMzAxbgpjYVx1MDMwMXJjZWwKY2FyZXRhCmNhcmdhCmNhcmluXHUwMzAzbwpjYXJuZQpjYXJwZXRhCmNhcnJvCmNhcnRhCmNhc2EKY2FzY28KY2FzZXJvCmNhc3BhCmNhc3RvcgpjYXRvcmNlCmNhdHJlCmNhdWRhbApjYXVzYQpjYXpvCmNlYm9sbGEKY2VkZXIKY2Vkcm8KY2VsZGEKY2VcdTAzMDFsZWJyZQpjZWxvc28KY2VcdTAzMDFsdWxhCmNlbWVudG8KY2VuaXphCmNlbnRybwpjZXJjYQpjZXJkbwpjZXJlemEKY2VybwpjZXJyYXIKY2VydGV6YQpjZVx1MDMwMXNwZWQKY2V0cm8KY2hhY2FsCmNoYWxlY28KY2hhbXB1XHUwMzAxCmNoYW5jbGEKY2hhcGEKY2hhcmxhCmNoaWNvCmNoaXN0ZQpjaGl2bwpjaG9xdWUKY2hvemEKY2h1bGV0YQpjaHVwYXIKY2ljbG9cdTAzMDFuCmNpZWdvCmNpZWxvCmNpZW4KY2llcnRvCmNpZnJhCmNpZ2Fycm8KY2ltYQpjaW5jbwpjaW5lCmNpbnRhCmNpcHJlXHUwMzAxcwpjaXJjbwpjaXJ1ZWxhCmNpc25lCmNpdGEKY2l1ZGFkCmNsYW1vcgpjbGFuCmNsYXJvCmNsYXNlCmNsYXZlCmNsaWVudGUKY2xpbWEKY2xpXHUwMzAxbmljYQpjb2JyZQpjb2NjaW9cdTAzMDFuCmNvY2hpbm8KY29jaW5hCmNvY28KY29cdTAzMDFkaWdvCmNvZG8KY29mcmUKY29nZXIKY29oZXRlCmNvamlcdTAzMDFuCmNvam8KY29sYQpjb2xjaGEKY29sZWdpbwpjb2xnYXIKY29saW5hCmNvbGxhcgpjb2xtbwpjb2x1bW5hCmNvbWJhdGUKY29tZXIKY29taWRhCmNvXHUwMzAxbW9kbwpjb21wcmEKY29uZGUKY29uZWpvCmNvbmdhCmNvbm9jZXIKY29uc2Vqbwpjb250YXIKY29wYQpjb3BpYQpjb3Jhem9cdTAzMDFuCmNvcmJhdGEKY29yY2hvCmNvcmRvXHUwMzAxbgpjb3JvbmEKY29ycmVyCmNvc2VyCmNvc21vcwpjb3N0YQpjcmFcdTAzMDFuZW8KY3JhXHUwMzAxdGVyCmNyZWFyCmNyZWNlcgpjcmVpXHUwMzAxZG8KY3JlbWEKY3JpXHUwMzAxYQpjcmltZW4KY3JpcHRhCmNyaXNpcwpjcm9tbwpjcm9cdTAzMDFuaWNhCmNyb3F1ZXRhCmNydWRvCmNydXoKY3VhZHJvCmN1YXJ0bwpjdWF0cm8KY3VibwpjdWJyaXIKY3VjaGFyYQpjdWVsbG8KY3VlbnRvCmN1ZXJkYQpjdWVzdGEKY3VldmEKY3VpZGFyCmN1bGVicmEKY3VscGEKY3VsdG8KY3VtYnJlCmN1bXBsaXIKY3VuYQpjdW5ldGEKY3VvdGEKY3Vwb1x1MDMwMW4KY3VcdTAzMDFwdWxhCmN1cmFyCmN1cmlvc28KY3Vyc28KY3VydmEKY3V0aXMKZGFtYQpkYW56YQpkYXIKZGFyZG8KZGFcdTAzMDF0aWwKZGViZXIKZGVcdTAzMDFiaWwKZGVcdTAzMDFjYWRhCmRlY2lyCmRlZG8KZGVmZW5zYQpkZWZpbmlyCmRlamFyCmRlbGZpXHUwMzAxbgpkZWxnYWRvCmRlbGl0bwpkZW1vcmEKZGVuc28KZGVudGFsCmRlcG9ydGUKZGVyZWNobwpkZXJyb3RhCmRlc2F5dW5vCmRlc2VvCmRlc2ZpbGUKZGVzbnVkbwpkZXN0aW5vCmRlc3ZpXHUwMzAxbwpkZXRhbGxlCmRldGVuZXIKZGV1ZGEKZGlcdTAzMDFhCmRpYWJsbwpkaWFkZW1hCmRpYW1hbnRlCmRpYW5hCmRpYXJpbwpkaWJ1am8KZGljdGFyCmRpZW50ZQpkaWV0YQpkaWV6CmRpZmlcdTAzMDFjaWwKZGlnbm8KZGlsZW1hCmRpbHVpcgpkaW5lcm8KZGlyZWN0bwpkaXJpZ2lyCmRpc2NvCmRpc2VuXHUwMzAzbwpkaXNmcmF6CmRpdmEKZGl2aW5vCmRvYmxlCmRvY2UKZG9sb3IKZG9taW5nbwpkb24KZG9uYXIKZG9yYWRvCmRvcm1pcgpkb3Jzbwpkb3MKZG9zaXMKZHJhZ29cdTAzMDFuCmRyb2dhCmR1Y2hhCmR1ZGEKZHVlbG8KZHVlblx1MDMwM28KZHVsY2UKZHVcdTAzMDFvCmR1cXVlCmR1cmFyCmR1cmV6YQpkdXJvCmVcdTAzMDFiYW5vCmVicmlvCmVjaGFyCmVjbwplY3VhZG9yCmVkYWQKZWRpY2lvXHUwMzAxbgplZGlmaWNpbwplZGl0b3IKZWR1Y2FyCmVmZWN0bwplZmljYXoKZWplCmVqZW1wbG8KZWxlZmFudGUKZWxlZ2lyCmVsZW1lbnRvCmVsZXZhcgplbGlwc2UKZVx1MDMwMWxpdGUKZWxpeGlyCmVsb2dpbwplbHVkaXIKZW1idWRvCmVtaXRpcgplbW9jaW9cdTAzMDFuCmVtcGF0ZQplbXBlblx1MDMwM28KZW1wbGVvCmVtcHJlc2EKZW5hbm8KZW5jYXJnbwplbmNodWZlCmVuY2lcdTAzMDFhCmVuZW1pZ28KZW5lcm8KZW5mYWRvCmVuZmVybW8KZW5nYW5cdTAzMDNvCmVuaWdtYQplbmxhY2UKZW5vcm1lCmVucmVkbwplbnNheW8KZW5zZW5cdTAzMDNhcgplbnRlcm8KZW50cmFyCmVudmFzZQplbnZpXHUwMzAxbwplXHUwMzAxcG9jYQplcXVpcG8KZXJpem8KZXNjYWxhCmVzY2VuYQplc2NvbGFyCmVzY3JpYmlyCmVzY3Vkbwplc2VuY2lhCmVzZmVyYQplc2Z1ZXJ6bwplc3BhZGEKZXNwZWpvCmVzcGlcdTAzMDFhCmVzcG9zYQplc3B1bWEKZXNxdWlcdTAzMDEKZXN0YXIKZXN0ZQplc3RpbG8KZXN0dWZhCmV0YXBhCmV0ZXJubwplXHUwMzAxdGljYQpldG5pYQpldmFkaXIKZXZhbHVhcgpldmVudG8KZXZpdGFyCmV4YWN0bwpleGFtZW4KZXhjZXNvCmV4Y3VzYQpleGVudG8KZXhpZ2lyCmV4aWxpbwpleGlzdGlyCmVcdTAzMDF4aXRvCmV4cGVydG8KZXhwbGljYXIKZXhwb25lcgpleHRyZW1vCmZhXHUwMzAxYnJpY2EKZmFcdTAzMDFidWxhCmZhY2hhZGEKZmFcdTAzMDFjaWwKZmFjdG9yCmZhZW5hCmZhamEKZmFsZGEKZmFsbG8KZmFsc28KZmFsdGFyCmZhbWEKZmFtaWxpYQpmYW1vc28KZmFyYW9cdTAzMDFuCmZhcm1hY2lhCmZhcm9sCmZhcnNhCmZhc2UKZmF0aWdhCmZhdW5hCmZhdm9yCmZheApmZWJyZXJvCmZlY2hhCmZlbGl6CmZlbwpmZXJpYQpmZXJvegpmZVx1MDMwMXJ0aWwKZmVydm9yCmZlc3RpXHUwMzAxbgpmaWFibGUKZmlhbnphCmZpYXIKZmlicmEKZmljY2lvXHUwMzAxbgpmaWNoYQpmaWRlbwpmaWVicmUKZmllbApmaWVyYQpmaWVzdGEKZmlndXJhCmZpamFyCmZpam8KZmlsYQpmaWxldGUKZmlsaWFsCmZpbHRybwpmaW4KZmluY2EKZmluZ2lyCmZpbml0bwpmaXJtYQpmbGFjbwpmbGF1dGEKZmxlY2hhCmZsb3IKZmxvdGEKZmx1aXIKZmx1am8KZmx1XHUwMzAxb3IKZm9iaWEKZm9jYQpmb2dhdGEKZm9nb1x1MDMwMW4KZm9saW8KZm9sbGV0bwpmb25kbwpmb3JtYQpmb3Jybwpmb3J0dW5hCmZvcnphcgpmb3NhCmZvdG8KZnJhY2FzbwpmcmFcdTAzMDFnaWwKZnJhbmphCmZyYXNlCmZyYXVkZQpmcmVpXHUwMzAxcgpmcmVubwpmcmVzYQpmcmlcdTAzMDFvCmZyaXRvCmZydXRhCmZ1ZWdvCmZ1ZW50ZQpmdWVyemEKZnVnYQpmdW1hcgpmdW5jaW9cdTAzMDFuCmZ1bmRhCmZ1cmdvXHUwMzAxbgpmdXJpYQpmdXNpbApmdVx1MDMwMXRib2wKZnV0dXJvCmdhY2VsYQpnYWZhcwpnYWl0YQpnYWpvCmdhbGEKZ2FsZXJpXHUwMzAxYQpnYWxsbwpnYW1iYQpnYW5hcgpnYW5jaG8KZ2FuZ2EKZ2Fuc28KZ2FyYWplCmdhcnphCmdhc29saW5hCmdhc3RhcgpnYXRvCmdhdmlsYVx1MDMwMW4KZ2VtZWxvCmdlbWlyCmdlbgpnZVx1MDMwMW5lcm8KZ2VuaW8KZ2VudGUKZ2VyYW5pbwpnZXJlbnRlCmdlcm1lbgpnZXN0bwpnaWdhbnRlCmdpbW5hc2lvCmdpcmFyCmdpcm8KZ2xhY2lhcgpnbG9ibwpnbG9yaWEKZ29sCmdvbGZvCmdvbG9zbwpnb2xwZQpnb21hCmdvcmRvCmdvcmlsYQpnb3JyYQpnb3RhCmdvdGVvCmdvemFyCmdyYWRhCmdyYVx1MDMwMWZpY28KZ3Jhbm8KZ3Jhc2EKZ3JhdGlzCmdyYXZlCmdyaWV0YQpncmlsbG8KZ3JpcGUKZ3Jpcwpncml0bwpncm9zb3IKZ3J1XHUwMzAxYQpncnVlc28KZ3J1bW8KZ3J1cG8KZ3VhbnRlCmd1YXBvCmd1YXJkaWEKZ3VlcnJhCmd1aVx1MDMwMWEKZ3Vpblx1MDMwM28KZ3Vpb24KZ3Vpc28KZ3VpdGFycmEKZ3VzYW5vCmd1c3RhcgpoYWJlcgpoYVx1MDMwMWJpbApoYWJsYXIKaGFjZXIKaGFjaGEKaGFkYQpoYWxsYXIKaGFtYWNhCmhhcmluYQpoYXoKaGF6YW5cdTAzMDNhCmhlYmlsbGEKaGVicmEKaGVjaG8KaGVsYWRvCmhlbGlvCmhlbWJyYQpoZXJpcgpoZXJtYW5vCmhlXHUwMzAxcm9lCmhlcnZpcgpoaWVsbwpoaWVycm8KaGlcdTAzMDFnYWRvCmhpZ2llbmUKaGlqbwpoaW1ubwpoaXN0b3JpYQpob2NpY28KaG9nYXIKaG9ndWVyYQpob2phCmhvbWJyZQpob25nbwpob25vcgpob25yYQpob3JhCmhvcm1pZ2EKaG9ybm8KaG9zdGlsCmhveW8KaHVlY28KaHVlbGdhCmh1ZXJ0YQpodWVzbwpodWV2bwpodWlkYQpodWlyCmh1bWFubwpodVx1MDMwMW1lZG8KaHVtaWxkZQpodW1vCmh1bmRpcgpodXJhY2FcdTAzMDFuCmh1cnRvCmljb25vCmlkZWFsCmlkaW9tYQppXHUwMzAxZG9sbwppZ2xlc2lhCmlnbHVcdTAzMDEKaWd1YWwKaWxlZ2FsCmlsdXNpb1x1MDMwMW4KaW1hZ2VuCmltYVx1MDMwMW4KaW1pdGFyCmltcGFyCmltcGVyaW8KaW1wb25lcgppbXB1bHNvCmluY2FwYXoKaVx1MDMwMW5kaWNlCmluZXJ0ZQppbmZpZWwKaW5mb3JtZQppbmdlbmlvCmluaWNpbwppbm1lbnNvCmlubXVuZQppbm5hdG8KaW5zZWN0bwppbnN0YW50ZQppbnRlcmVcdTAzMDFzCmlcdTAzMDFudGltbwppbnR1aXIKaW51XHUwMzAxdGlsCmludmllcm5vCmlyYQppcmlzCmlyb25pXHUwMzAxYQppc2xhCmlzbG90ZQpqYWJhbGlcdTAzMDEKamFib1x1MDMwMW4KamFtb1x1MDMwMW4KamFyYWJlCmphcmRpXHUwMzAxbgpqYXJyYQpqYXVsYQpqYXptaVx1MDMwMW4KamVmZQpqZXJpbmdhCmppbmV0ZQpqb3JuYWRhCmpvcm9iYQpqb3Zlbgpqb3lhCmp1ZXJnYQpqdWV2ZXMKanVlegpqdWdhZG9yCmp1Z28KanVndWV0ZQpqdWljaW8KanVuY28KanVuZ2xhCmp1bmlvCmp1bnRhcgpqdVx1MDMwMXBpdGVyCmp1cmFyCmp1c3RvCmp1dmVuaWwKanV6Z2FyCmtpbG8Ka29hbGEKbGFiaW8KbGFjaW8KbGFjcmEKbGFkbwpsYWRyb1x1MDMwMW4KbGFnYXJ0bwpsYVx1MDMwMWdyaW1hCmxhZ3VuYQpsYWljbwpsYW1lcgpsYVx1MDMwMW1pbmEKbGFcdTAzMDFtcGFyYQpsYW5hCmxhbmNoYQpsYW5nb3N0YQpsYW56YQpsYVx1MDMwMXBpegpsYXJnbwpsYXJ2YQpsYVx1MDMwMXN0aW1hCmxhdGEKbGFcdTAzMDF0ZXgKbGF0aXIKbGF1cmVsCmxhdmFyCmxhem8KbGVhbApsZWNjaW9cdTAzMDFuCmxlY2hlCmxlY3RvcgpsZWVyCmxlZ2lvXHUwMzAxbgpsZWd1bWJyZQpsZWphbm8KbGVuZ3VhCmxlbnRvCmxlblx1MDMwM2EKbGVvXHUwMzAxbgpsZW9wYXJkbwpsZXNpb1x1MDMwMW4KbGV0YWwKbGV0cmEKbGV2ZQpsZXllbmRhCmxpYmVydGFkCmxpYnJvCmxpY29yCmxpXHUwMzAxZGVyCmxpZGlhcgpsaWVuem8KbGlnYQpsaWdlcm8KbGltYQpsaVx1MDMwMW1pdGUKbGltb1x1MDMwMW4KbGltcGlvCmxpbmNlCmxpbmRvCmxpXHUwMzAxbmVhCmxpbmdvdGUKbGlubwpsaW50ZXJuYQpsaVx1MDMwMXF1aWRvCmxpc28KbGlzdGEKbGl0ZXJhCmxpdGlvCmxpdHJvCmxsYWdhCmxsYW1hCmxsYW50bwpsbGF2ZQpsbGVnYXIKbGxlbmFyCmxsZXZhcgpsbG9yYXIKbGxvdmVyCmxsdXZpYQpsb2JvCmxvY2lvXHUwMzAxbgpsb2NvCmxvY3VyYQpsb1x1MDMwMWdpY2EKbG9ncm8KbG9tYnJpegpsb21vCmxvbmphCmxvdGUKbHVjaGEKbHVjaXIKbHVnYXIKbHVqbwpsdW5hCmx1bmVzCmx1cGEKbHVzdHJvCmx1dG8KbHV6Cm1hY2V0YQptYWNobwptYWRlcmEKbWFkcmUKbWFkdXJvCm1hZXN0cm8KbWFmaWEKbWFnaWEKbWFnbwptYWlcdTAzMDF6Cm1hbGRhZAptYWxldGEKbWFsbGEKbWFsbwptYW1hXHUwMzAxCm1hbWJvCm1hbXV0Cm1hbmNvCm1hbmRvCm1hbmVqYXIKbWFuZ2EKbWFuaXF1aVx1MDMwMQptYW5qYXIKbWFubwptYW5zbwptYW50YQptYW5cdTAzMDNhbmEKbWFwYQptYVx1MDMwMXF1aW5hCm1hcgptYXJjbwptYXJlYQptYXJmaWwKbWFyZ2VuCm1hcmlkbwptYVx1MDMwMXJtb2wKbWFycm9cdTAzMDFuCm1hcnRlcwptYXJ6bwptYXNhCm1hXHUwMzAxc2NhcmEKbWFzaXZvCm1hdGFyCm1hdGVyaWEKbWF0aXoKbWF0cml6Cm1hXHUwMzAxeGltbwptYXlvcgptYXpvcmNhCm1lY2hhCm1lZGFsbGEKbWVkaW8KbWVcdTAzMDFkdWxhCm1lamlsbGEKbWVqb3IKbWVsZW5hCm1lbG9cdTAzMDFuCm1lbW9yaWEKbWVub3IKbWVuc2FqZQptZW50ZQptZW51XHUwMzAxCm1lcmNhZG8KbWVyZW5ndWUKbWVcdTAzMDFyaXRvCm1lcwptZXNvXHUwMzAxbgptZXRhCm1ldGVyCm1lXHUwMzAxdG9kbwptZXRybwptZXpjbGEKbWllZG8KbWllbAptaWVtYnJvCm1pZ2EKbWlsCm1pbGFncm8KbWlsaXRhcgptaWxsb1x1MDMwMW4KbWltbwptaW5hCm1pbmVybwptaVx1MDMwMW5pbW8KbWludXRvCm1pb3BlCm1pcmFyCm1pc2EKbWlzZXJpYQptaXNpbAptaXNtbwptaXRhZAptaXRvCm1vY2hpbGEKbW9jaW9cdTAzMDFuCm1vZGEKbW9kZWxvCm1vaG8KbW9qYXIKbW9sZGUKbW9sZXIKbW9saW5vCm1vbWVudG8KbW9taWEKbW9uYXJjYQptb25lZGEKbW9uamEKbW9udG8KbW9uXHUwMzAzbwptb3JhZGEKbW9yZGVyCm1vcmVubwptb3Jpcgptb3Jybwptb3JzYQptb3J0YWwKbW9zY2EKbW9zdHJhcgptb3Rpdm8KbW92ZXIKbW9cdTAzMDF2aWwKbW96bwptdWNobwptdWRhcgptdWVibGUKbXVlbGEKbXVlcnRlCm11ZXN0cmEKbXVncmUKbXVqZXIKbXVsYQptdWxldGEKbXVsdGEKbXVuZG8KbXVuXHUwMzAzZWNhCm11cmFsCm11cm8KbXVcdTAzMDFzY3VsbwptdXNlbwptdXNnbwptdVx1MDMwMXNpY2EKbXVzbG8KbmFcdTAzMDFjYXIKbmFjaW9cdTAzMDFuCm5hZGFyCm5haXBlCm5hcmFuamEKbmFyaXoKbmFycmFyCm5hc2FsCm5hdGFsCm5hdGl2bwpuYXR1cmFsCm5hXHUwMzAxdXNlYQpuYXZhbApuYXZlCm5hdmlkYWQKbmVjaW8KbmVcdTAzMDFjdGFyCm5lZ2FyCm5lZ29jaW8KbmVncm8KbmVvXHUwMzAxbgpuZXJ2aW8KbmV0bwpuZXV0cm8KbmV2YXIKbmV2ZXJhCm5pY2hvCm5pZG8KbmllYmxhCm5pZXRvCm5pblx1MDMwM2V6Cm5pblx1MDMwM28KbmlcdTAzMDF0aWRvCm5pdmVsCm5vYmxlemEKbm9jaGUKbm9cdTAzMDFtaW5hCm5vcmlhCm5vcm1hCm5vcnRlCm5vdGEKbm90aWNpYQpub3ZhdG8Kbm92ZWxhCm5vdmlvCm51YmUKbnVjYQpudVx1MDMwMWNsZW8KbnVkaWxsbwpudWRvCm51ZXJhCm51ZXZlCm51ZXoKbnVsbwpudVx1MDMwMW1lcm8KbnV0cmlhCm9hc2lzCm9iZXNvCm9iaXNwbwpvYmpldG8Kb2JyYQpvYnJlcm8Kb2JzZXJ2YXIKb2J0ZW5lcgpvYnZpbwpvY2EKb2Nhc28Kb2NlXHUwMzAxYW5vCm9jaGVudGEKb2NobwpvY2lvCm9jcmUKb2N0YXZvCm9jdHVicmUKb2N1bHRvCm9jdXBhcgpvY3VycmlyCm9kaWFyCm9kaW8Kb2Rpc2VhCm9lc3RlCm9mZW5zYQpvZmVydGEKb2ZpY2lvCm9mcmVjZXIKb2dybwpvaVx1MDMwMWRvCm9pXHUwMzAxcgpvam8Kb2xhCm9sZWFkYQpvbGZhdG8Kb2xpdm8Kb2xsYQpvbG1vCm9sb3IKb2x2aWRvCm9tYmxpZ28Kb25kYQpvbnphCm9wYWNvCm9wY2lvXHUwMzAxbgpvXHUwMzAxcGVyYQpvcGluYXIKb3BvbmVyCm9wdGFyCm9cdTAzMDFwdGljYQpvcHVlc3RvCm9yYWNpb1x1MDMwMW4Kb3JhZG9yCm9yYWwKb1x1MDMwMXJiaXRhCm9yY2EKb3JkZW4Kb3JlamEKb1x1MDMwMXJnYW5vCm9yZ2lcdTAzMDFhCm9yZ3VsbG8Kb3JpZW50ZQpvcmlnZW4Kb3JpbGxhCm9ybwpvcnF1ZXN0YQpvcnVnYQpvc2FkaVx1MDMwMWEKb3NjdXJvCm9zZXpubwpvc28Kb3N0cmEKb3Rvblx1MDMwM28Kb3RybwpvdmVqYQpvXHUwMzAxdnVsbwpvXHUwMzAxeGlkbwpveGlcdTAzMDFnZW5vCm95ZW50ZQpvem9ubwpwYWN0bwpwYWRyZQpwYWVsbGEKcGFcdTAzMDFnaW5hCnBhZ28KcGFpXHUwMzAxcwpwYVx1MDMwMWphcm8KcGFsYWJyYQpwYWxjbwpwYWxldGEKcGFcdTAzMDFsaWRvCnBhbG1hCnBhbG9tYQpwYWxwYXIKcGFuCnBhbmFsCnBhXHUwMzAxbmljbwpwYW50ZXJhCnBhblx1MDMwM3VlbG8KcGFwYVx1MDMwMQpwYXBlbApwYXBpbGxhCnBhcXVldGUKcGFyYXIKcGFyY2VsYQpwYXJlZApwYXJpcgpwYXJvCnBhXHUwMzAxcnBhZG8KcGFycXVlCnBhXHUwMzAxcnJhZm8KcGFydGUKcGFzYXIKcGFzZW8KcGFzaW9cdTAzMDFuCnBhc28KcGFzdGEKcGF0YQpwYXRpbwpwYXRyaWEKcGF1c2EKcGF1dGEKcGF2bwpwYXlhc28KcGVhdG9cdTAzMDFuCnBlY2FkbwpwZWNlcmEKcGVjaG8KcGVkYWwKcGVkaXIKcGVnYXIKcGVpbmUKcGVsYXIKcGVsZGFuXHUwMzAzbwpwZWxlYQpwZWxpZ3JvCnBlbGxlam8KcGVsbwpwZWx1Y2EKcGVuYQpwZW5zYXIKcGVuXHUwMzAzb1x1MDMwMW4KcGVvXHUwMzAxbgpwZW9yCnBlcGlubwpwZXF1ZW5cdTAzMDNvCnBlcmEKcGVyY2hhCnBlcmRlcgpwZXJlemEKcGVyZmlsCnBlcmljbwpwZXJsYQpwZXJtaXNvCnBlcnJvCnBlcnNvbmEKcGVzYQpwZXNjYQpwZVx1MDMwMXNpbW8KcGVzdGFuXHUwMzAzYQpwZVx1MDMwMXRhbG8KcGV0cm9cdTAzMDFsZW8KcGV6CnBlenVuXHUwMzAzYQpwaWNhcgpwaWNob1x1MDMwMW4KcGllCnBpZWRyYQpwaWVybmEKcGllemEKcGlqYW1hCnBpbGFyCnBpbG90bwpwaW1pZW50YQpwaW5vCnBpbnRvcgpwaW56YQpwaW5cdTAzMDNhCnBpb2pvCnBpcGEKcGlyYXRhCnBpc2FyCnBpc2NpbmEKcGlzbwpwaXN0YQpwaXRvXHUwMzAxbgpwaXpjYQpwbGFjYQpwbGFuCnBsYXRhCnBsYXlhCnBsYXphCnBsZWl0bwpwbGVubwpwbG9tbwpwbHVtYQpwbHVyYWwKcG9icmUKcG9jbwpwb2Rlcgpwb2Rpbwpwb2VtYQpwb2VzaVx1MDMwMWEKcG9ldGEKcG9sZW4KcG9saWNpXHUwMzAxYQpwb2xsbwpwb2x2bwpwb21hZGEKcG9tZWxvCnBvbW8KcG9tcGEKcG9uZXIKcG9yY2lvXHUwMzAxbgpwb3J0YWwKcG9zYWRhCnBvc2Vlcgpwb3NpYmxlCnBvc3RlCnBvdGVuY2lhCnBvdHJvCnBvem8KcHJhZG8KcHJlY296CnByZWd1bnRhCnByZW1pbwpwcmVuc2EKcHJlc28KcHJldmlvCnByaW1vCnByaVx1MDMwMW5jaXBlCnByaXNpb1x1MDMwMW4KcHJpdmFyCnByb2EKcHJvYmFyCnByb2Nlc28KcHJvZHVjdG8KcHJvZXphCnByb2Zlc29yCnByb2dyYW1hCnByb2xlCnByb21lc2EKcHJvbnRvCnByb3Bpbwpwcm9cdTAzMDF4aW1vCnBydWViYQpwdVx1MDMwMWJsaWNvCnB1Y2hlcm8KcHVkb3IKcHVlYmxvCnB1ZXJ0YQpwdWVzdG8KcHVsZ2EKcHVsaXIKcHVsbW9cdTAzMDFuCnB1bHBvCnB1bHNvCnB1bWEKcHVudG8KcHVuXHUwMzAzYWwKcHVuXHUwMzAzbwpwdXBhCnB1cGlsYQpwdXJlXHUwMzAxCnF1ZWRhcgpxdWVqYQpxdWVtYXIKcXVlcmVyCnF1ZXNvCnF1aWV0bwpxdWlcdTAzMDFtaWNhCnF1aW5jZQpxdWl0YXIKcmFcdTAzMDFiYW5vCnJhYmlhCnJhYm8KcmFjaW9cdTAzMDFuCnJhZGljYWwKcmFpXHUwMzAxegpyYW1hCnJhbXBhCnJhbmNobwpyYW5nbwpyYXBhegpyYVx1MDMwMXBpZG8KcmFwdG8KcmFzZ28KcmFzcGEKcmF0bwpyYXlvCnJhemEKcmF6b1x1MDMwMW4KcmVhY2Npb1x1MDMwMW4KcmVhbGlkYWQKcmViYW5cdTAzMDNvCnJlYm90ZQpyZWNhZXIKcmVjZXRhCnJlY2hhem8KcmVjb2dlcgpyZWNyZW8KcmVjdG8KcmVjdXJzbwpyZWQKcmVkb25kbwpyZWR1Y2lyCnJlZmxlam8KcmVmb3JtYQpyZWZyYVx1MDMwMW4KcmVmdWdpbwpyZWdhbG8KcmVnaXIKcmVnbGEKcmVncmVzbwpyZWhlXHUwMzAxbgpyZWlubwpyZWlcdTAzMDFyCnJlamEKcmVsYXRvCnJlbGV2bwpyZWxpZXZlCnJlbGxlbm8KcmVsb2oKcmVtYXIKcmVtZWRpbwpyZW1vCnJlbmNvcgpyZW5kaXIKcmVudGEKcmVwYXJ0bwpyZXBldGlyCnJlcG9zbwpyZXB0aWwKcmVzCnJlc2NhdGUKcmVzaW5hCnJlc3BldG8KcmVzdG8KcmVzdW1lbgpyZXRpcm8KcmV0b3JubwpyZXRyYXRvCnJldW5pcgpyZXZlXHUwMzAxcwpyZXZpc3RhCnJleQpyZXphcgpyaWNvCnJpZWdvCnJpZW5kYQpyaWVzZ28KcmlmYQpyaVx1MDMwMWdpZG8Kcmlnb3IKcmluY29cdTAzMDFuCnJpblx1MDMwM29cdTAzMDFuCnJpXHUwMzAxbwpyaXF1ZXphCnJpc2EKcml0bW8Kcml0bwpyaXpvCnJvYmxlCnJvY2UKcm9jaWFyCnJvZGFyCnJvZGVvCnJvZGlsbGEKcm9lcgpyb2ppem8Kcm9qbwpyb21lcm8Kcm9tcGVyCnJvbgpyb25jbwpyb25kYQpyb3BhCnJvcGVybwpyb3NhCnJvc2NhCnJvc3Rybwpyb3RhcgpydWJpXHUwMzAxCnJ1Ym9yCnJ1ZG8KcnVlZGEKcnVnaXIKcnVpZG8KcnVpbmEKcnVsZXRhCnJ1bG8KcnVtYm8KcnVtb3IKcnVwdHVyYQpydXRhCnJ1dGluYQpzYVx1MDMwMWJhZG8Kc2FiZXIKc2FiaW8Kc2FibGUKc2FjYXIKc2FnYXoKc2FncmFkbwpzYWxhCnNhbGRvCnNhbGVybwpzYWxpcgpzYWxtb1x1MDMwMW4Kc2Fsb1x1MDMwMW4Kc2Fsc2EKc2FsdG8Kc2FsdWQKc2FsdmFyCnNhbWJhCnNhbmNpb1x1MDMwMW4Kc2FuZGlcdTAzMDFhCnNhbmVhcgpzYW5ncmUKc2FuaWRhZApzYW5vCnNhbnRvCnNhcG8Kc2FxdWUKc2FyZGluYQpzYXJ0ZVx1MDMwMW4Kc2FzdHJlCnNhdGFcdTAzMDFuCnNhdW5hCnNheG9mb1x1MDMwMW4Kc2VjY2lvXHUwMzAxbgpzZWNvCnNlY3JldG8Kc2VjdGEKc2VkCnNlZ3VpcgpzZWlzCnNlbGxvCnNlbHZhCnNlbWFuYQpzZW1pbGxhCnNlbmRhCnNlbnNvcgpzZW5cdTAzMDNhbApzZW5cdTAzMDNvcgpzZXBhcmFyCnNlcGlhCnNlcXVpXHUwMzAxYQpzZXIKc2VyaWUKc2VybW9cdTAzMDFuCnNlcnZpcgpzZXNlbnRhCnNlc2lvXHUwMzAxbgpzZXRhCnNldGVudGEKc2V2ZXJvCnNleG8Kc2V4dG8Kc2lkcmEKc2llc3RhCnNpZXRlCnNpZ2xvCnNpZ25vCnNpXHUwMzAxbGFiYQpzaWxiYXIKc2lsZW5jaW8Kc2lsbGEKc2lcdTAzMDFtYm9sbwpzaW1pbwpzaXJlbmEKc2lzdGVtYQpzaXRpbwpzaXR1YXIKc29icmUKc29jaW8Kc29kaW8Kc29sCnNvbGFwYQpzb2xkYWRvCnNvbGVkYWQKc29cdTAzMDFsaWRvCnNvbHRhcgpzb2x1Y2lvXHUwMzAxbgpzb21icmEKc29uZGVvCnNvbmlkbwpzb25vcm8Kc29ucmlzYQpzb3BhCnNvcGxhcgpzb3BvcnRlCnNvcmRvCnNvcnByZXNhCnNvcnRlbwpzb3N0ZVx1MDMwMW4Kc29cdTAzMDF0YW5vCnN1YXZlCnN1YmlyCnN1Y2VzbwpzdWRvcgpzdWVncmEKc3VlbG8Kc3Vlblx1MDMwM28Kc3VlcnRlCnN1ZnJpcgpzdWpldG8Kc3VsdGFcdTAzMDFuCnN1bWFyCnN1cGVyYXIKc3VwbGlyCnN1cG9uZXIKc3VwcmVtbwpzdXIKc3VyY28Kc3VyZW5cdTAzMDNvCnN1cmdpcgpzdXN0bwpzdXRpbAp0YWJhY28KdGFiaXF1ZQp0YWJsYQp0YWJ1XHUwMzAxCnRhY28KdGFjdG8KdGFqbwp0YWxhcgp0YWxjbwp0YWxlbnRvCnRhbGxhCnRhbG9cdTAzMDFuCnRhbWFuXHUwMzAzbwp0YW1ib3IKdGFuZ28KdGFucXVlCnRhcGEKdGFwZXRlCnRhcGlhCnRhcG9cdTAzMDFuCnRhcXVpbGxhCnRhcmRlCnRhcmVhCnRhcmlmYQp0YXJqZXRhCnRhcm90CnRhcnJvCnRhcnRhCnRhdHVhamUKdGF1cm8KdGF6YQp0YXpvXHUwMzAxbgp0ZWF0cm8KdGVjaG8KdGVjbGEKdGVcdTAzMDFjbmljYQp0ZWphZG8KdGVqZXIKdGVqaWRvCnRlbGEKdGVsZVx1MDMwMWZvbm8KdGVtYQp0ZW1vcgp0ZW1wbG8KdGVuYXoKdGVuZGVyCnRlbmVyCnRlbmlzCnRlbnNvCnRlb3JpXHUwMzAxYQp0ZXJhcGlhCnRlcmNvCnRlXHUwMzAxcm1pbm8KdGVybnVyYQp0ZXJyb3IKdGVzaXMKdGVzb3JvCnRlc3RpZ28KdGV0ZXJhCnRleHRvCnRlegp0aWJpbwp0aWJ1cm9cdTAzMDFuCnRpZW1wbwp0aWVuZGEKdGllcnJhCnRpZXNvCnRpZ3JlCnRpamVyYQp0aWxkZQp0aW1icmUKdGlcdTAzMDFtaWRvCnRpbW8KdGludGEKdGlcdTAzMDFvCnRpXHUwMzAxcGljbwp0aXBvCnRpcmEKdGlyb1x1MDMwMW4KdGl0YVx1MDMwMW4KdGlcdTAzMDF0ZXJlCnRpXHUwMzAxdHVsbwp0aXphCnRvYWxsYQp0b2JpbGxvCnRvY2FyCnRvY2lubwp0b2RvCnRvZ2EKdG9sZG8KdG9tYXIKdG9ubwp0b250bwp0b3Bhcgp0b3BlCnRvcXVlCnRvXHUwMzAxcmF4CnRvcmVybwp0b3JtZW50YQp0b3JuZW8KdG9ybwp0b3JwZWRvCnRvcnJlCnRvcnNvCnRvcnR1Z2EKdG9zCnRvc2NvCnRvc2VyCnRvXHUwMzAxeGljbwp0cmFiYWpvCnRyYWN0b3IKdHJhZXIKdHJhXHUwMzAxZmljbwp0cmFnbwp0cmFqZQp0cmFtbwp0cmFuY2UKdHJhdG8KdHJhdW1hCnRyYXphcgp0cmVcdTAzMDFib2wKdHJlZ3VhCnRyZWludGEKdHJlbgp0cmVwYXIKdHJlcwp0cmlidQp0cmlnbwp0cmlwYQp0cmlzdGUKdHJpdW5mbwp0cm9mZW8KdHJvbXBhCnRyb25jbwp0cm9wYQp0cm90ZQp0cm96bwp0cnVjbwp0cnVlbm8KdHJ1ZmEKdHViZXJpXHUwMzAxYQp0dWJvCnR1ZXJ0bwp0dW1iYQp0dW1vcgp0dVx1MDMwMW5lbAp0dVx1MDMwMW5pY2EKdHVyYmluYQp0dXJpc21vCnR1cm5vCnR1dG9yCnViaWNhcgp1XHUwMzAxbGNlcmEKdW1icmFsCnVuaWRhZAp1bmlyCnVuaXZlcnNvCnVubwp1bnRhcgp1blx1MDMwM2EKdXJiYW5vCnVyYmUKdXJnZW50ZQp1cm5hCnVzYXIKdXN1YXJpbwp1XHUwMzAxdGlsCnV0b3BpXHUwMzAxYQp1dmEKdmFjYQp2YWNpXHUwMzAxbwp2YWN1bmEKdmFnYXIKdmFnbwp2YWluYQp2YWppbGxhCnZhbGUKdmFcdTAzMDFsaWRvCnZhbGxlCnZhbG9yCnZhXHUwMzAxbHZ1bGEKdmFtcGlybwp2YXJhCnZhcmlhcgp2YXJvXHUwMzAxbgp2YXNvCnZlY2lubwp2ZWN0b3IKdmVoaVx1MDMwMWN1bG8KdmVpbnRlCnZlamV6CnZlbGEKdmVsZXJvCnZlbG96CnZlbmEKdmVuY2VyCnZlbmRhCnZlbmVubwp2ZW5nYXIKdmVuaXIKdmVudGEKdmVudXMKdmVyCnZlcmFubwp2ZXJibwp2ZXJkZQp2ZXJlZGEKdmVyamEKdmVyc28KdmVydGVyCnZpXHUwMzAxYQp2aWFqZQp2aWJyYXIKdmljaW8KdmlcdTAzMDFjdGltYQp2aWRhCnZpXHUwMzAxZGVvCnZpZHJpbwp2aWVqbwp2aWVybmVzCnZpZ29yCnZpbAp2aWxsYQp2aW5hZ3JlCnZpbm8KdmluXHUwMzAzZWRvCnZpb2xpXHUwMzAxbgp2aXJhbAp2aXJnbwp2aXJ0dWQKdmlzb3IKdmlcdTAzMDFzcGVyYQp2aXN0YQp2aXRhbWluYQp2aXVkbwp2aXZhegp2aXZlcm8Kdml2aXIKdml2bwp2b2xjYVx1MDMwMW4Kdm9sdW1lbgp2b2x2ZXIKdm9yYXoKdm90YXIKdm90bwp2b3oKdnVlbG8KdnVsZ2FyCnlhY2VyCnlhdGUKeWVndWEKeWVtYQp5ZXJubwp5ZXNvCnlvZG8KeW9nYQp5b2d1cgp6YWZpcm8KemFuamEKemFwYXRvCnphcnphCnpvbmEKem9ycm8KenVtbwp6dXJkb2Auc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy90cmFkaXRpb25hbC1jaGluZXNlLmpzCiAgdmFyIHdvcmRsaXN0OSA9IGBcdTc2ODQKXHU0RTAwClx1NjYyRgpcdTU3MjgKXHU0RTBEClx1NEU4NgpcdTY3MDkKXHU1NDhDClx1NEVCQQpcdTkwMTkKXHU0RTJEClx1NTkyNwpcdTcwQkEKXHU0RTBBClx1NTAwQgpcdTU3MEIKXHU2MjExClx1NEVFNQpcdTg5ODEKXHU0RUQ2Clx1NjY0MgpcdTRGODYKXHU3NTI4Clx1NTAxMQpcdTc1MUYKXHU1MjMwClx1NEY1QwpcdTU3MzAKXHU2NUJDClx1NTFGQQpcdTVDMzEKXHU1MjA2Clx1NUMwRApcdTYyMTAKXHU2NzAzClx1NTNFRgpcdTRFM0IKXHU3NjdDClx1NUU3NApcdTUyRDUKXHU1NDBDClx1NURFNQpcdTRFNUYKXHU4MEZEClx1NEUwQgpcdTkwNEUKXHU1QjUwClx1OEFBQQpcdTc1MjIKXHU3QTJFClx1OTc2MgpcdTgwMEMKXHU2NUI5Clx1NUY4QwpcdTU5MUEKXHU1QjlBClx1ODg0QwpcdTVCNzgKXHU2Q0Q1Clx1NjI0MApcdTZDMTEKXHU1Rjk3Clx1N0Q5MwpcdTUzNDEKXHU0RTA5Clx1NEU0QgpcdTkwMzIKXHU4NDU3Clx1N0I0OQpcdTkwRTgKXHU1RUE2Clx1NUJCNgpcdTk2RkIKXHU1MjlCClx1ODhFMQpcdTU5ODIKXHU2QzM0Clx1NTMxNgpcdTlBRDgKXHU4MUVBClx1NEU4QwpcdTc0MDYKXHU4RDc3Clx1NUMwRgpcdTcyNjkKXHU3M0ZFClx1NUJFNgpcdTUyQTAKXHU5MUNGClx1OTBGRApcdTUxNjkKXHU5QUQ0Clx1NTIzNgpcdTZBNUYKXHU3NTc2Clx1NEY3RgpcdTlFREUKXHU1RjlFClx1Njk2RApcdTY3MkMKXHU1M0JCClx1NjI4QQpcdTYwMjcKXHU1OTdEClx1NjFDOQpcdTk1OEIKXHU1QjgzClx1NTQwOApcdTkwODQKXHU1NkUwClx1NzUzMQpcdTUxNzYKXHU0RTlCClx1NzEzNgpcdTUyNEQKXHU1OTE2Clx1NTkyOQpcdTY1M0YKXHU1NkRCClx1NjVFNQpcdTkwQTMKXHU3OTNFClx1N0ZBOQpcdTRFOEIKXHU1RTczClx1NUY2MgpcdTc2RjgKXHU1MTY4Clx1ODg2OApcdTk1OTMKXHU2QTIzClx1ODIwNwpcdTk1REMKXHU1NDA0Clx1OTFDRApcdTY1QjAKXHU3RERBClx1NTE2NwpcdTY1NzgKXHU2QjYzClx1NUZDMwpcdTUzQ0QKXHU0RjYwClx1NjYwRQpcdTc3MEIKXHU1MzlGClx1NTNDOApcdTlFQkMKXHU1MjI5Clx1NkJENApcdTYyMTYKXHU0RjQ2Clx1OENFQQpcdTZDMjMKXHU3QjJDClx1NTQxMQpcdTkwNTMKXHU1NDdEClx1NkI2NApcdThCOEEKXHU2ODlEClx1NTNFQQpcdTZDOTIKXHU3RDUwClx1ODlFMwpcdTU1NEYKXHU2MTBGClx1NUVGQQpcdTY3MDgKXHU1MTZDClx1NzEyMQpcdTdDRkIKXHU4RUNEClx1NUY4OApcdTYwQzUKXHU4MDA1Clx1NjcwMApcdTdBQ0IKXHU0RUUzClx1NjBGMwpcdTVERjIKXHU5MDFBClx1NEUyNgpcdTYzRDAKXHU3NkY0Clx1OTg0QwpcdTlFRTgKXHU3QTBCClx1NUM1NQpcdTRFOTQKXHU2NzlDClx1NjU5OQpcdThDNjEKXHU1NEUxClx1OTc2OQpcdTRGNEQKXHU1MTY1Clx1NUUzOApcdTY1ODcKXHU3RTNEClx1NkIyMQpcdTU0QzEKXHU1RjBGClx1NkQzQgpcdThBMkQKXHU1M0NBClx1N0JBMQpcdTcyNzkKXHU0RUY2Clx1OTU3NwpcdTZDNDIKXHU4MDAxClx1OTgyRApcdTU3RkEKXHU4Q0M3Clx1OTA4QQpcdTZENDEKXHU4REVGClx1N0QxQQpcdTVDMTEKXHU1NzE2Clx1NUM3MQpcdTdENzEKXHU2M0E1Clx1NzdFNQpcdThGMDMKXHU1QzA3Clx1N0Q0NApcdTg5OEIKXHU4QTA4Clx1NTIyNQpcdTU5NzkKXHU2MjRCClx1ODlEMgpcdTY3MUYKXHU2ODM5Clx1OEFENgpcdTkwNEIKXHU4RkIyClx1NjMwNwpcdTVFN0UKXHU0RTVEClx1NTM0MApcdTVGMzcKXHU2NTNFClx1NkM3QQpcdTg5N0YKXHU4OEFCClx1NUU3OQpcdTUwNUEKXHU1RkM1Clx1NjIzMApcdTUxNDgKXHU1NkRFClx1NTI0NwpcdTRFRkIKXHU1M0Q2Clx1NjREQQpcdTg2NTUKXHU5NjhBClx1NTM1NwpcdTdENjYKXHU4MjcyClx1NTE0OQpcdTk1ODAKXHU1MzczClx1NEZERApcdTZDQkIKXHU1MzE3Clx1OTAyMApcdTc2N0UKXHU4OThGClx1NzFCMQpcdTk4MTgKXHU0RTAzClx1NkQ3NwpcdTUzRTMKXHU2NzcxClx1NUMwRQpcdTU2NjgKXHU1OEQzClx1NUZENwpcdTRFMTYKXHU5MUQxClx1NTg5RQpcdTcyMkQKXHU2RkRGClx1OTY4RQpcdTZDQjkKXHU2MDFEClx1ODg1MwpcdTY5NzUKXHU0RUE0Clx1NTNENwpcdTgwNkYKXHU0RUMwClx1OEE4RApcdTUxNkQKXHU1MTcxClx1NkIwQQpcdTY1MzYKXHU4QjQ5Clx1NjUzOQpcdTZFMDUKXHU3RjhFClx1NTE4RApcdTYzQTEKXHU4RjQ5Clx1NjZGNApcdTU1QUUKXHU5OEE4Clx1NTIwNwpcdTYyNTMKXHU3NjdEClx1NjU1OQpcdTkwMUYKXHU4MkIxClx1NUUzNgpcdTVCODkKXHU1ODM0Clx1OEVBQgpcdThFQ0EKXHU0RjhCClx1NzcxRgpcdTUyRDkKXHU1MTc3Clx1ODQyQwpcdTZCQ0YKXHU3NkVFClx1ODFGMwpcdTkwNTQKXHU4RDcwClx1N0E0RApcdTc5M0EKXHU4QjcwClx1ODA3MgpcdTU4MzEKXHU5QjI1Clx1NUI4QwpcdTk4NUUKXHU1MTZCClx1OTZFMgpcdTgzRUYKXHU1NDBEClx1NzhCQQpcdTYyNEQKXHU3OUQxClx1NUYzNQpcdTRGRTEKXHU5OUFDClx1N0JDMApcdThBNzEKXHU3QzczClx1NjU3NApcdTdBN0EKXHU1MTQzClx1NkNDMQpcdTRFQ0EKXHU5NkM2Clx1NkVBQgpcdTUwQjMKXHU1NzFGClx1OEEzMQpcdTZCNjUKXHU3RkE0Clx1NUVFMwpcdTc3RjMKXHU4QTE4Clx1OTcwMApcdTZCQjUKXHU3ODE0Clx1NzU0QwpcdTYyQzkKXHU2Nzk3Clx1NUY4QgpcdTUzRUIKXHU0RTE0Clx1N0E3NgpcdTg5QzAKXHU4RDhBClx1N0U1NApcdTg4REQKXHU1RjcxClx1N0I5NwpcdTRGNEUKXHU2MzAxClx1OTdGMwpcdTc3M0UKXHU2NkY4Clx1NUUwMwpcdTU5MEQKXHU1QkI5Clx1NTE1MgpcdTk4MDgKXHU5NjlCClx1NTU0NgpcdTk3NUUKXHU5QTU3Clx1OTAyMwpcdTY1QjcKXHU2REYxClx1OTZFMwpcdThGRDEKXHU3OTI2Clx1NTM0MwpcdTkwMzEKXHU1OUQ0Clx1N0QyMApcdTYyODAKXHU1MDk5Clx1NTM0QQpcdThGQTYKXHU5NzUyClx1NzcwMQpcdTUyMTcKXHU3RkQyClx1OTdGRgpcdTdEMDQKXHU2NTJGClx1ODIyQwpcdTUzRjIKXHU2MTFGClx1NTJERQpcdTRGQkYKXHU1NzE4Clx1NUY4MApcdTkxNzgKXHU2Qjc3Clx1NUUwMgpcdTUxNEIKXHU0RjU1Clx1OTY2NApcdTZEODgKXHU2OUNCClx1NUU5QwpcdTdBMzEKXHU1OTJBClx1NkU5NgpcdTdDQkUKXHU1MDNDClx1ODY1RgpcdTczODcKXHU2NUNGClx1N0RBRApcdTUyODMKXHU5MDc4Clx1NkExOQpcdTVCRUIKXHU1QjU4Clx1NTAxOQpcdTZCREIKXHU4OUFBClx1NUZFQgpcdTY1NDgKXHU2NUFGClx1OTY2MgpcdTY3RTUKXHU2QzVGClx1NTc4QgpcdTc3M0MKXHU3MzhCClx1NjMwOQpcdTY4M0MKXHU5OTBBClx1NjYxMwpcdTdGNkUKXHU2RDNFClx1NUM2NApcdTcyNDcKXHU1OUNCClx1NTM3QgpcdTVDMDgKXHU3MkMwClx1ODBCMgpcdTVFRTAKXHU0RUFDClx1OEI1OApcdTkwNjkKXHU1QzZDClx1NTcxMwpcdTUzMDUKXHU3MDZCClx1NEY0RgpcdThBQkYKXHU2RUZGClx1N0UyMwpcdTVDNDAKXHU3MTY3Clx1NTNDMwpcdTdEMDUKXHU3RDMwClx1NUYxNQpcdTgwN0QKXHU4QTcyClx1OTQzNQpcdTUwRjkKXHU1NkI0Clx1OTk5NgpcdTVFOTUKXHU2REIyClx1NUI5OApcdTVGQjcKXHU5NkE4Clx1NzVDNQpcdTg2MDcKXHU1OTMxClx1NzIzRQpcdTZCN0IKXHU4QjFCClx1OTE0RApcdTU5NzMKXHU5RUMzClx1NjNBOApcdTk4NkYKXHU4QUM3Clx1N0Y2QQpcdTc5NUUKXHU4NUREClx1NTQ2MgpcdTVFMkQKXHU1NDJCClx1NEYwMQpcdTY3MUIKXHU1QkM2Clx1NjI3OQpcdTcxREYKXHU5ODA1Clx1OTYzMgpcdTgyMDkKXHU3NDAzClx1ODJGMQpcdTZDMjcKXHU1MkUyClx1NTQ0QQpcdTY3NEUKXHU1M0YwClx1ODQzRApcdTY3MjgKXHU1RTZCClx1OEYyQQpcdTc4MzQKXHU0RTlFClx1NUUyQgpcdTU3MEQKXHU2Q0U4Clx1OTA2MApcdTVCNTcKXHU2NzUwClx1NjM5MgpcdTRGOUIKXHU2Q0IzClx1NjE0QgpcdTVDMDEKXHU1M0U2Clx1NjVCRApcdTZFMUIKXHU2QTM5Clx1NkVCNgpcdTYwMEUKXHU2QjYyClx1Njg0OApcdThBMDAKXHU1OEVCClx1NTc0NwpcdTZCNjYKXHU1NkZBClx1ODQ0OQpcdTlCNUEKXHU2Q0UyClx1ODk5NgpcdTUwQzUKXHU4Q0JCClx1N0RDQQpcdTYxMUIKXHU1REU2Clx1N0FFMApcdTY1RTkKXHU2NzFEClx1NUJCMwpcdTdFOEMKXHU4RjE1Clx1NjcwRApcdThBNjYKXHU5OERGClx1NTE0NQpcdTUxNzUKXHU2RTkwClx1NTIyNApcdThCNzcKXHU1M0Y4Clx1OERCMwpcdTY3RDAKXHU3REY0Clx1NURFRQpcdTgxRjQKXHU2NzdGClx1NzUzMApcdTk2NEQKXHU5RUQxClx1NzJBRgpcdThDQTAKXHU2NENBClx1ODMwMwpcdTdFN0MKXHU4MjA4Clx1NEYzQwpcdTk5MTgKXHU1ODA1Clx1NjZGMgpcdThGMzgKXHU0RkVFClx1NjU0NQpcdTU3Q0UKXHU1OTJCClx1NTkyMApcdTkwMDEKXHU3QjQ2Clx1ODIzOQpcdTRGNTQKXHU1M0YzClx1OENBMQpcdTU0MDMKXHU1QkNDClx1NjYyNQpcdTgwNzcKXHU4OUJBClx1NkYyMgpcdTc1NkIKXHU1MjlGClx1NURGNApcdThEREYKXHU5NkQ2Clx1OTZEQwpcdTk4REIKXHU2QUEyClx1NTQzOApcdTUyQTkKXHU2NjA3Clx1OTY3RApcdTRFOTIKXHU1MjFEClx1NTI3NQpcdTYyOTcKXHU4MDAzClx1NjI5NQpcdTU4REUKXHU3QjU2Clx1NTNFNApcdTVGOTEKXHU2M0RCClx1NjcyQQpcdThERDEKXHU3NTU5Clx1OTJGQwpcdTY2RkUKXHU3QUVGClx1OENBQwpcdTdBRDkKXHU3QzIxClx1OEZGMApcdTkzMjIKXHU1MjZGClx1NzZFMQpcdTVFMUQKXHU1QzA0Clx1ODM0OQpcdTg4NUQKXHU2MjdGClx1NzM2OApcdTRFRTQKXHU5NjUwClx1OTYzRgpcdTVCQTMKXHU3NEIwClx1OTZEOQpcdThBQ0IKXHU4RDg1Clx1NUZBRQpcdThCOTMKXHU2M0E3Clx1NURERQpcdTgyNkYKXHU4RUY4Clx1NjI3RQpcdTU0MjYKXHU3RDAwClx1NzZDQQpcdTRGOUQKXHU1MTJBClx1OTgwMgpcdTc5MEUKXHU4RjA5Clx1NTAxMgpcdTYyM0YKXHU3QTgxClx1NTc1MApcdTdDODkKXHU2NTc1Clx1NzU2NQpcdTVCQTIKXHU4ODgxClx1NTFCNwpcdTUyREQKXHU3RDU1Clx1Njc5MApcdTU4NEEKXHU1MjkxClx1NkUyQwpcdTdENzIKXHU1MzU0Clx1OEEzNApcdTVGRjUKXHU5NjczClx1NEVDRApcdTdGODUKXHU5RTdEClx1NTNDQgpcdTZEMEIKXHU5MzJGClx1ODJFNgpcdTU5MUMKXHU1MjExClx1NzlGQgpcdTk4M0IKXHU5MDEwClx1OTc2MApcdTZERjcKXHU2QkNEClx1NzdFRApcdTc2QUUKXHU3RDQyClx1ODA1QQpcdTZDN0QKXHU2NzUxClx1OTZGMgpcdTU0RUEKXHU2NUUyClx1OERERApcdTg4NUIKXHU1MDVDClx1NzBDOApcdTU5MkUKXHU1QkRGClx1NzFEMgpcdThGQzUKXHU1ODgzClx1ODJFNQpcdTUzNzAKXHU2RDMyClx1NTIzQgpcdTYyRUMKXHU2RkMwClx1NUI1NApcdTY0MUUKXHU3NTFBClx1NUJBNApcdTVGODUKXHU2ODM4Clx1NjgyMQpcdTY1NjMKXHU0RkI1Clx1NTQyNwpcdTc1MzIKXHU5MDRBClx1NEU0NQpcdTgzREMKXHU1NDczClx1ODIwQQpcdTZBMjEKXHU2RTU2Clx1OENBOApcdTY0MEQKXHU5ODEwClx1OTYzQgpcdTZCRUIKXHU2NjZFClx1N0E2OQpcdTRFNTkKXHU1QUJEClx1NjkwRApcdTYwNkYKXHU2NEY0Clx1OTI4MApcdThBOUUKXHU2M0VFClx1OTE1MgpcdTVCODgKXHU2MkZGClx1NUU4RgpcdTdEMTkKXHU5MUFCClx1N0YzQQpcdTk2RTgKXHU1NUNFClx1OTFERApcdTUyODkKXHU1NTRBClx1NjAyNQpcdTU1MzEKXHU4QUE0Clx1OEExMwpcdTk4NTgKXHU1QkU5Clx1OTY0NApcdTczNzIKXHU4MzM2Clx1OUJBRQpcdTdDRTcKXHU2NUE0Clx1NUI2OQpcdTgxMkIKXHU3ODZCClx1ODBBNQpcdTU1ODQKXHU5RjhEClx1NkYxNApcdTcyMzYKXHU2RjM4Clx1ODg0MApcdTZCNjEKXHU2OEIwClx1NjM4QwpcdTZCNEMKXHU2Qzk5Clx1NTI1QgpcdTY1M0IKXHU4QjAyClx1NzZGRQpcdThBMEUKXHU2NjVBClx1N0M5MgpcdTRFODIKXHU3MUMzClx1NzdEQgpcdTRFNEUKXHU2QkJBClx1ODVFNQpcdTVCRTcKXHU5QjZGClx1OENCNApcdTk0MTgKXHU3MTY0Clx1OEI4MApcdTczRUQKXHU0RjJGClx1OTk5OQpcdTRFQ0IKXHU4RkVCClx1NTNFNQpcdThDNTAKXHU1N0Y5Clx1NjNFMQpcdTg2MkQKXHU2NEQ0Clx1NUYyNgpcdTg2Q0IKXHU2Qzg5Clx1NTA0NwpcdTdBN0YKXHU1N0Y3Clx1N0I1NApcdTZBMDIKXHU4QUIwClx1OTgwNgpcdTcxNTkKXHU3RTJFClx1NUZCNQpcdTgxQzkKXHU1NTlDClx1Njc3RQpcdTgxNzMKXHU1NkYwClx1NzU3MApcdTUxNEQKXHU4MENDClx1NjYxRgpcdTc5OEYKXHU4Q0I3Clx1NjdEMwpcdTRFOTUKXHU2OTgyClx1NjE2MgpcdTYwMTUKXHU3OEMxClx1NTAwRApcdTc5NTYKXHU3Njg3Clx1NEZDMwpcdTk3NUMKXHU4OERDClx1OEE1NQpcdTdGRkIKXHU4MDg5Clx1OEUxMApcdTVDM0MKXHU4ODYzClx1NUJFQwpcdTYzREEKXHU2OEM5Clx1NUUwQwpcdTUwQjcKXHU2NENEClx1NTc4MgpcdTc5Q0IKXHU1QjlDClx1NkMyQgpcdTU5NTcKXHU3NzYzClx1NjMyRgpcdTY3QjYKXHU0RUFFClx1NjcyQgpcdTYxQjIKXHU2MTc2Clx1N0RFOApcdTcyNUIKXHU4OUY4Clx1NjYyMApcdTk2RjcKXHU5MkI3Clx1OEE2OQpcdTVFQTcKXHU1QzQ1Clx1NjI5MwpcdTg4QzIKXHU4MERFClx1NTQ3QwpcdTVBMTgKXHU2NjZGClx1NUEwMQpcdTdEQTAKXHU2Njc2Clx1NTM5QQpcdTc2REYKXHU4ODYxClx1OTZERQpcdTVCNkIKXHU1RUY2Clx1NTM3MQpcdTgxQTAKXHU1QzRCClx1OTEwOQpcdTgxRTgKXHU5Njc4Clx1OTg2NwpcdTYzODkKXHU1NDQwClx1NzFDOApcdTZCNzIKXHU2M0FBClx1Njc1RgpcdTgwMTAKXHU1Mjg3Clx1NzM4OQpcdThEOTkKXHU4REYzClx1NTRFNQpcdTVCNjMKXHU4QUIyClx1NTFGMQpcdTgwRTEKXHU5ODREClx1NkIzRQpcdTdEMzkKXHU1Mzc3Clx1OUY0QQpcdTUwNDkKXHU4NEI4Clx1NkI5NgpcdTZDMzgKXHU1Qjk3Clx1ODJENwpcdTVEREQKXHU3MjEwClx1NUNBOQpcdTVGMzEKXHU5NkY2Clx1Njk0QQpcdTU5NEYKXHU2Q0JGClx1OTczMgpcdTY4N0YKXHU2M0EyClx1NkVEMQpcdTkzQUUKXHU5OEVGClx1NkZDMwpcdTgyMkEKXHU2MUY3Clx1OEQ5NQpcdTVFQUIKXHU1OTZBClx1NEYwQQpcdTk3NDgKXHU3QTA1Clx1OTAxNApcdTZFQzUKXHU4Q0ZEClx1NkI3OApcdTUzRUMKXHU5RjEzClx1NjRBRApcdTc2RTQKXHU4OEMxClx1OTZBQQpcdTVFQjcKXHU1NTJGClx1OTMwNApcdTgzQ0MKXHU3RDE0Clx1NTAxRgpcdTdDRDYKXHU4NENCClx1NkE2QgpcdTdCMjYKXHU3OUMxClx1NTJBQQpcdTU4MDIKXHU1N0RGClx1NjlDRApcdTZGNjQKXHU1RTQ1Clx1NTRDOApcdTdBREYKXHU3MTlGClx1ODdGMgpcdTZGQTQKXHU4MTY2Clx1NThFNApcdTc4QjMKXHU2QjUwClx1OTA0RApcdTUwNzQKXHU1QkU4Clx1NjU2MgpcdTVGQjkKXHU2MTZFClx1NjU5QwpcdTg1ODQKXHU1RUFEClx1N0QwRApcdTVGNDgKXHU5OEZDClx1NEYzOApcdTYyOTgKXHU5RUE1Clx1NkZENQpcdTY2OTcKXHU4Mzc3Clx1NzRFNgpcdTU4NUUKXHU1RThBClx1N0JDOQpcdTYwRTEKXHU2MjM2Clx1OEEyQQpcdTU4NTQKXHU1OTQ3Clx1OTAwRgpcdTY4ODEKXHU1MjAwClx1NjVDQgpcdThERTEKXHU1MzYxClx1NkMyRgpcdTkwNDcKXHU0RUZEClx1NkJEMgpcdTZDRTUKXHU5MDAwClx1NkQxNwpcdTY0RkEKXHU3MDcwClx1NUY2OQpcdThDRTMKXHU4MDE3Clx1NTkwRgpcdTY0QzcKXHU1RkQ5Clx1OTI4NQpcdTczN0IKXHU3ODZDClx1NEU4OApcdTdFNDEKXHU1NzA4Clx1OTZFQQpcdTUxRkQKXHU0RUE2Clx1NjJCRApcdTdCQzcKXHU5NjYzClx1OTY3MApcdTRFMDEKXHU1QzNBClx1OEZGRApcdTU4MDYKXHU5NkM0Clx1OEZDRQpcdTZDREIKXHU3MjM4Clx1NkExMwpcdTkwN0YKXHU4QjAwClx1NTY3OApcdTkxQ0UKXHU4QzZDClx1NjVENwpcdTdEMkYKXHU1MDRGClx1NTE3OApcdTk5MjgKXHU3RDIyClx1NzlFNgpcdTgxMDIKXHU2RjZFClx1NzIzQQpcdThDNDYKXHU1RkZEClx1NjI1OApcdTlBNUEKXHU1ODUxClx1OTA3QQpcdTYxMDgKXHU2NzMxClx1NjZGRgpcdTdFOTYKXHU3Qzk3Clx1NTBCRQpcdTVDMUEKXHU3NURCClx1Njk1QQpcdThCMUQKXHU1OTZFClx1OENGQwpcdTc4RTgKXHU1NDFCClx1NkM2MApcdTY1QzEKXHU3ODhFClx1OUFBOApcdTc2RTMKXHU2MzU1Clx1NUYxRgpcdTY2QjQKXHU1MjcyClx1OENBQgpcdTZCOEEKXHU5MUNCClx1OEE1RQpcdTRFQTEKXHU1OEMxClx1OTgxMwpcdTVCRjYKXHU1MzQ4Clx1NTg3NQpcdTgwNUUKXHU2M0VEClx1NzBBRQpcdTZCOTgKXHU1MUFDClx1NkE0QgpcdTVBNjYKXHU4QjY2Clx1N0Q5QwpcdTYyREIKXHU1NDMzClx1NEVEOApcdTZENkUKXHU5MDZEClx1NUY5MApcdTYwQTgKXHU2NDE2Clx1OEMzNwpcdThEMEEKXHU3QkIxClx1OTY5NApcdThBMDIKXHU3NTM3Clx1NTQzOQpcdTU3MTIKXHU3RDFCClx1NTUxMApcdTY1NTcKXHU1QjhCClx1NzNCQgpcdTVERTgKXHU4MDE1Clx1NTc2NgpcdTY5QUUKXHU5NTg5Clx1NzA2MwpcdTkzNzUKXHU1MUUxClx1OTlEMApcdTkzNEIKXHU2NTUxClx1NjA2OQpcdTUyNUQKXHU1MUREClx1OUU3QwpcdTlGNTIKXHU2MjJBClx1NzE0OQpcdTlFQkIKXHU3RDIxClx1Nzk4MQpcdTVFRTIKXHU3NkRCClx1NzI0OApcdTdERTkKXHU2REU4Clx1Nzc1QgpcdTY2MEMKXHU1QTVBClx1NkQ4OQpcdTdCNTIKXHU1NjM0Clx1NjNEMgpcdTVDQjgKXHU2NzE3Clx1ODM4QQpcdTg4NTcKXHU4NUNGClx1NTlEMQpcdThDQkYKXHU4MTUwClx1NTk3NApcdTU1NjYKXHU2MTYzClx1NEU1OApcdTU5MjUKXHU2MDYyClx1NTJGQgpcdTdEMTcKXHU2MjRFClx1OEZBRgpcdTgwMzMKXHU1RjZBClx1ODFFMwpcdTUxMDQKXHU3NDgzClx1NjJCNQpcdTgxMDgKXHU3OUMwClx1ODVBOQpcdTRGQzQKXHU3REIyClx1ODIxRQpcdTVFOTcKXHU1Njc0Clx1N0UzMQpcdTVCRjgKXHU2QzU3Clx1NjM5QgpcdTZEMkEKXHU4Q0MwClx1OTU4MwpcdTY3RUMKXHU3MjA2Clx1NzBFRgpcdTZEMjUKXHU3QTNCClx1NzI0NgpcdThFREYKXHU1MkM3Clx1NTBDRgpcdTZFRkUKXHU1Mzk4Clx1ODQ5OQpcdTgyQjMKXHU4MEFGClx1NTc2MQpcdTY3RjEKXHU3NkVBClx1ODE3RgpcdTUxMDAKXHU2NUM1Clx1NUMzRQpcdThFQ0IKXHU1MUIwClx1OENBMgpcdTc2N0IKXHU5RUNFClx1NTI0QQpcdTk0N0QKXHU1MkQyClx1OTAwMwpcdTk2OUMKXHU2QzI4Clx1OTBFRApcdTVDRjAKXHU1RTYzClx1NkUyRgpcdTRGMEYKXHU4RUNDClx1NzU1RApcdTc1NjIKXHU2NEU2Clx1ODNBQgpcdTUyM0EKXHU2RDZBClx1NzlEOApcdTYzRjQKXHU2ODJBClx1NTA2NQpcdTU1MkUKXHU4MEExClx1NUNGNgpcdTc1MTgKXHU2Q0UxClx1Nzc2MQpcdTdBRTUKXHU5NDQ0Clx1NkU2RgpcdTk1QTUKXHU0RjExClx1NTMyRgpcdTgyMEQKXHU3MjY3Clx1N0U1RQpcdTcwQjgKXHU1NEYyClx1NzhGNwpcdTdFM0UKXHU2NzBCClx1NkRFMQpcdTVDMTYKXHU1NTVGClx1OTY3NwpcdTY3RjQKXHU1NDQ4Clx1NUY5MgpcdTk4NEYKXHU2RERBClx1N0EwRApcdTVGRDgKXHU2Q0Y1Clx1ODVDRApcdTYyRDYKXHU2RDFFClx1NjM4OApcdTkzRTEKXHU4RjlCClx1NThFRgpcdTkyRDIKXHU4Q0E3Clx1ODY1QgpcdTVGNEUKXHU2NDY5Clx1NkNGMApcdTVFN0MKXHU1RUY3Clx1NUMwQQpcdTdBOTcKXHU3REIxClx1NUYwNApcdTk2QjgKXHU3NTkxClx1NkMwRgpcdTVCQUUKXHU1OUQwClx1OTcwNwpcdTc0NUUKXHU2MDJBClx1NUMyNApcdTc0MzQKXHU1RkFBClx1NjNDRgpcdTgxOUMKXHU5MDU1Clx1NTkzRQpcdTgxNzAKXHU3REUzClx1NzNFMApcdTdBQUUKXHU2OEVFClx1Njc5RApcdTdBRjkKXHU2RTlEClx1NTBBQwpcdTdFNjkKXHU2MUI2Clx1OTBBNgpcdTUyNjkKXHU1RTc4Clx1NkYzRgpcdTZCMDQKXHU2NEMxClx1NzI1OQpcdThDQUYKXHU3OUFFClx1NkZGRQpcdTkyMDkKXHU3RDBCClx1N0Y3NwpcdTYyQ0QKXHU1NEIxClx1NTU4QQpcdTg4OTYKXHU1N0MzClx1NTJFNApcdTdGNzAKXHU3MTI2Clx1NkY1QgpcdTRGMEQKXHU1OEE4Clx1NkIzMgpcdTdFMkIKXHU1OUQzClx1NTIwQQpcdTk4RkQKXHU0RUZGClx1NzM0RQpcdTkyQzEKXHU5QjNDClx1OUU5NwpcdThERTgKXHU5RUQ4Clx1NjMxNgpcdTkzQzgKXHU2MzgzClx1NTU5RApcdTg4OEIKXHU3MEFEClx1NkM2MQpcdTVFNTUKXHU4QUY4Clx1NUYyNwpcdTUyRjUKXHU2ODg1Clx1NTk3NgpcdTZGNTQKXHU3MDdEClx1ODIxRgpcdTk0NTEKXHU4MkVGClx1OEExRgpcdTYyQjEKXHU2QkMwClx1NjFDMgpcdTVCRDIKXHU2NjdBClx1NTdENApcdTVCQzQKXHU1QzQ2Clx1OEU4RApcdTZFMjEKXHU2MzExClx1NEUzOQpcdTgyNzEKXHU4QzlEClx1NzhCMApcdTYyRDQKXHU3MjM5Clx1NjIzNApcdTc4QkMKXHU1OTIyClx1ODJCRApcdTcxOTQKXHU4RDY0Clx1NkYwMQpcdTU0RUQKXHU2NTZDClx1OTg0NgpcdTU5NTQKXHU5MjVCClx1NEVGMgpcdTg2NEUKXHU3QTAwClx1NTlCOQpcdTRFNEYKXHU3M0NEClx1NzUzMwpcdTY4NEMKXHU5MDc1Clx1NTE0MQpcdTk2ODYKXHU4N0JBClx1NTAwOQpcdTlCNEYKXHU5MkIzClx1NjZDOQpcdTZDMkUKXHU1MTdDClx1OTZCMQpcdTc5MTkKXHU4RDZCClx1NjRBNQpcdTVGRTAKXHU4MDg1Clx1N0YzOApcdTcyN0QKXHU2NDM2Clx1NTM1QQpcdTVERTcKXHU2QkJDClx1NTE0NApcdTY3NUMKXHU4QTBBClx1OEFBMApcdTc4QTcKXHU3OTY1Clx1NjdFRgpcdTk4MDEKXHU1REUxClx1NzdFOQpcdTYwQjIKXHU3MDRDClx1OUY2MQpcdTUwMkIKXHU3OTY4Clx1NUMwQgpcdTY4NDIKXHU5MkVBClx1ODA1NgpcdTYwNTAKXHU2MDcwClx1OTEyRApcdThEQTMKXHU2MkFDClx1ODM1MgpcdTlBMzAKXHU4Q0JDClx1NjdENApcdTZFRjQKXHU3MzFCClx1OTVDQQpcdThGMUIKXHU1OUJCClx1NTg2QgpcdTY0QTQKXHU1MTMyClx1N0MzRApcdTlCMjcKXHU2NEZFClx1N0QyQgpcdTc4MDIKXHU5MDVFClx1NjIzMgpcdTU0MEEKXHU5Njc2Clx1NEYxMApcdTk5MzUKXHU3NjQyClx1NzRGNgpcdTVBNDYKXHU2NEFCClx1ODFDMgpcdTY0NzgKXHU1RkNEClx1ODc2NgpcdTg4MUYKXHU5MTMwClx1ODBGOApcdTk3OEYKXHU2NEUwClx1NTA3NgpcdTY4QzQKXHU2OUZEClx1NTJDMQpcdTRFNzMKXHU5MTI3Clx1NTQwOQpcdTRFQzEKXHU3MjFCClx1NzhEQQpcdTc5REYKXHU3MENGClx1ODI2NgpcdTRGMzQKXHU3NERDClx1NkRGQQpcdTRFMTkKXHU2NkFCClx1NzFFNQpcdTZBNjEKXHU2N0YzClx1OEZGNwpcdTY2OTYKXHU3MjRDClx1NzlFNwpcdTgxQkQKXHU4QTczClx1N0MyNwpcdThFMEYKXHU3NEY3Clx1OEI1QwpcdTU0NDYKXHU4Q0QzClx1N0NDQQpcdTZEMUIKXHU4RjFEClx1NjFBNApcdTdBRjYKXHU5Njk5Clx1NjAxMgpcdTdDOTgKXHU0RTQzClx1N0REMgpcdTgwQTkKXHU3QzREClx1NjU0RgpcdTU4NTcKXHU3MTk5Clx1NzY4NgpcdTUwNzUKXHU2MUY4Clx1NjM5OApcdTRFQUIKXHU3Q0ZFClx1OTE5MgpcdTcyQzIKXHU5Mzk2Clx1NkRDMApcdTYwNjgKXHU3MjcyClx1OTczOApcdTcyMkMKXHU4Q0RFClx1OTAwNgpcdTczQTkKXHU5Njc1Clx1Nzk1RApcdTc5RDIKXHU2RDU5Clx1OEM4QwpcdTVGNzkKXHU1RjdDClx1NjA4OQpcdTlEMjgKXHU4REE4Clx1OUNGMwpcdTY2NjgKXHU3NTVDClx1OEYyOQpcdTc5RTkKXHU1Mzc1Clx1N0Y3MgpcdTY4QUYKXHU3MDhFClx1NzA1OApcdTY4Q0IKXHU5QTQ1Clx1N0JFOQpcdTVDRkQKXHU1MTkyClx1NTU2NQpcdTU4RkQKXHU4QjZGClx1NkQ3OApcdTZDQzkKXHU1RTNEClx1OTA3MgpcdTc3RkQKXHU3NTg2Clx1OENCOApcdTZGMEYKXHU3QTNGClx1NTFBMApcdTVBRTkKXHU4MTA1Clx1ODJBRgpcdTcyNjIKXHU1M0RCClx1ODc1NQpcdTU5NjcKXHU5Q0Y0Clx1NURCQQpcdTdGOEEKXHU2MTkxClx1NEUzMgpcdTU4NTgKXHU3RTZBClx1OTE3NQpcdTg3OEQKXHU3NkM2Clx1OTMyQgpcdTVFREYKXHU3QzRDClx1NTFDRApcdThGMTQKXHU2NTFEClx1ODk3MgpcdTdCNEIKXHU2MkQyClx1NTBEQQpcdTY1RjEKXHU5MjQwClx1OUNFNQpcdTZGMDYKXHU2Qzg4Clx1NzcwOQpcdTc1OEYKXHU2REZCClx1NjhEMgpcdTdBNTcKXHU3ODVEClx1OTdEMwpcdTkwM0MKXHU2MjZEClx1NTBEMQpcdTZEQkMKXHU2MzNBClx1Nzg5NwpcdTY4M0QKXHU3MDkyClx1Njc2RgpcdTYwQTMKXHU5OTNFClx1NTJGOApcdThDNkEKXHU5MDdDClx1NTJDMwpcdTlEM0IKXHU2NUU2Clx1NTQwRgpcdTYyREMKXHU3MkQ3Clx1NTdDQgpcdThGMjUKXHU2M0E5Clx1OThGMgpcdTY0MkMKXHU3Rjc1Clx1OEZBRApcdTUyRkUKXHU2MjYzClx1NEYzMApcdTg1MjMKXHU3RDY4Clx1OTcyNwpcdTRFMDgKXHU2NzM1Clx1NTlDNgpcdTY0RUMKXHU1Qjg3Clx1OEYyRgpcdTk2NUQKXHU5NkQ1Clx1NTExRgpcdTg0QzQKXHU1RDA3Clx1NTI2QQpcdTUwMjEKXHU1RUYzClx1NTRBQwpcdTk5REIKXHU4NUFGClx1NTIzNwpcdTY1QTUKXHU3NTZBClx1OENFNgpcdTU5NDkKXHU0RjVCClx1NkY4NgpcdTZGMkIKXHU2NkZDClx1NjI0NwpcdTkyMjMKXHU2ODQzClx1NjI3NgpcdTRFRDQKXHU4RkQ0Clx1NEZENwpcdTg2NjcKXHU4MTU0Clx1OTc4QgpcdTY4RjEKXHU4OTg2Clx1Njg0NgpcdTYwODQKXHU1M0Q0Clx1NjQ5RQpcdTlBMTkKXHU1MkQ4Clx1NjVGQQpcdTZDQjgKXHU1QjY0Clx1NTQxMApcdTVCNUYKXHU2RTIwClx1NUM0OApcdTc1QkUKXHU1OTk5Clx1NjBEQwpcdTRFRjAKXHU3MkUwClx1ODEzOQpcdThBRTcKXHU2MkNCClx1OUVGNApcdTY4NTEKXHU1RDE3Clx1NTYxQgpcdTg4NzAKXHU3NkRDClx1NkVGMgpcdTgxREYKXHU4Q0Y0Clx1NkU2NwpcdTc1MUMKXHU2NkY5Clx1OTVCMQpcdTgwOEMKXHU1NEU5Clx1NTNCMgpcdTcwRjQKXHU3REVGClx1NkJDNQpcdTY2MjgKXHU1MDdEClx1NzVDNwpcdTcxNkUKXHU1NjA2Clx1OTFEOApcdTY0MkQKXHU4Mzk2Clx1N0M2MApcdTkxNzcKXHU1MDc3Clx1NUYxMwpcdTkzMTAKXHU2MDQ2Clx1NTA5MQpcdTU3NTEKXHU5RjNCClx1N0ZGQwpcdTdEQjgKXHU2NTU4Clx1NzM0NApcdTkwMkUKXHU3RjUwClx1N0Q2MQpcdTY4REEKXHU2MjkxClx1ODFBOApcdTg1MkMKXHU1QkZBClx1OUE1RgpcdTdBNDYKXHU1MUI2Clx1NjdBRgpcdTUxOEEKXHU1QzREClx1NTFGOApcdTdEMzMKXHU1NzZGClx1NzJBNwpcdTcxMzAKXHU4RjVGClx1NkIyMwpcdTY2NDkKXHU3NjI2Clx1NzlBNgpcdTkzMjAKXHU5MzI2Clx1NTVBQQpcdTY1RUMKXHU5MzVCClx1NThERgpcdTY0MUMKXHU2NEIyClx1OTA4MApcdTRFQUQKXHU5MTZGClx1OTA4MQpcdTgyMTIKXHU4MTA2Clx1OTE3NgpcdTk1OTIKXHU2MTgyClx1OTE1QQpcdTk4MTEKXHU3RkJEClx1NkYzMgpcdTUzNzgKXHU0RUQ3Clx1OTY2QQpcdTk1RTIKXHU2MUYyClx1Njc2RApcdTU5REEKXHU4MDlBClx1NjM0OQpcdTk4QzQKXHU2RjAyClx1NjYwNgpcdTZCM0EKXHU1NDNFClx1OTBDRQpcdTcwRjcKXHU2QzQxClx1NTQ3NQpcdTk4RkUKXHU4NTZEClx1OTZDNQpcdTkwRjUKXHU5MDc3Clx1NzFENQpcdTY0OTIKXHU1OUZCClx1OEQ3NApcdTVCQjQKXHU3MTY5Clx1NTBCNQpcdTVFMzMKXHU2NTkxClx1OTIzNApcdTY1RTgKXHU5MTg3Clx1ODQ2MwpcdTk5MDUKXHU5NkRCClx1NTlGRgpcdTYyQ0MKXHU1MDg1Clx1ODE3OQpcdTU5QTUKXHU2M0M5Clx1OENFMgpcdTYyQzYKXHU2QjZBClx1ODQ2MQpcdTgwRkEKXHU0RTFGClx1NkQ2OQpcdTVGQkQKXHU2NjAyClx1NTg4QQpcdTY0Q0IKXHU4OUJEClx1OENBQQpcdTYxNzAKXHU3RTczClx1NkM2QQpcdTYxNEMKXHU5OUFFClx1OEFGRQpcdTU5REMKXHU4QUJDClx1NTE0NwpcdTUyQTMKXHU4QUEzClx1ODAwMApcdTY2MEYKXHU4RUJBClx1NzZDOApcdTlBMEUKXHU1NUFDClx1NkVBQQpcdTUzRTIKXHU3NkU3Clx1NjJCOQpcdTYwQjYKXHU4QUVFClx1NTIyRQpcdTk5RDUKXHU3RTlDClx1NjA5RgpcdTY0NTgKXHU5MjdBClx1NjRGMgpcdTk4MTcKXHU1RTdCClx1NjdDNApcdTYwRTAKXHU2MTU4Clx1NEY3MwpcdTRFQzcKXHU4MUQ4Clx1N0FBOQpcdTZFQ0MKXHU1MjhEClx1NzdBNwpcdTU4MjEKXHU2RjUxClx1ODUyNQpcdTdGNjkKXHU5NzBEClx1NjQ4OApcdTgwQ0UKXHU4NEJDClx1NkZGMQpcdTUwMDYKXHU2MzQ1Clx1NkU1OApcdTc4MEQKXHU5NzFFClx1OTBCNQpcdTg0MDQKXHU3NjBCClx1NkRFRQpcdTkwNDIKXHU3MThBClx1N0NERQpcdTcwRDgKXHU1QkJGClx1NkE5NApcdTYyMDgKXHU5OUMxClx1NUFDMgpcdTg4RDUKXHU1Rjk5Clx1N0JBRApcdTYzNTAKXHU4MTc4Clx1NjQ5MApcdTY2RUMKXHU4RkE4Clx1NkJCRgpcdTg0RUUKXHU2NTI0Clx1NjUyQQpcdTkxQUMKXHU1QzRGClx1NzVBQgpcdTU0QzAKXHU4NTIxClx1NTgzNQpcdTZDQUIKXHU3NkJBClx1NjZBMgpcdTc1OEEKXHU5NUEzClx1ODQwQQpcdTY1NzIKXHU4RjQ0Clx1OTI2NApcdTc1RDUKXHU1OEU5Clx1NURGNwpcdTk5MTMKXHU3OThEClx1NEUxOApcdTczODQKXHU2RTlDClx1NjZGMApcdTkwOEYKXHU1RjZEClx1NTYxNwpcdTUzN0YKXHU1OUE4Clx1ODI0NwpcdTU0MUUKXHU5N0NCClx1NjAyOApcdTc3RUUKXHU2QjQ3YC5zcGxpdCgiXG4iKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy9wcml2YXRlS2V5VG9BY2NvdW50LmpzCiAgaW5pdF9zZWNwMjU2azEoKTsKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvdG9BY2NvdW50LmpzCiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBmdW5jdGlvbiB0b0FjY291bnQoc291cmNlKSB7CiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gInN0cmluZyIpIHsKICAgICAgaWYgKCFpc0FkZHJlc3Moc291cmNlLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiBzb3VyY2UgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgYWRkcmVzczogc291cmNlLAogICAgICAgIHR5cGU6ICJqc29uLXJwYyIKICAgICAgfTsKICAgIH0KICAgIGlmICghaXNBZGRyZXNzKHNvdXJjZS5hZGRyZXNzLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogc291cmNlLmFkZHJlc3MgfSk7CiAgICByZXR1cm4gewogICAgICBhZGRyZXNzOiBzb3VyY2UuYWRkcmVzcywKICAgICAgbm9uY2VNYW5hZ2VyOiBzb3VyY2Uubm9uY2VNYW5hZ2VyLAogICAgICBzaWduOiBzb3VyY2Uuc2lnbiwKICAgICAgZXhwZXJpbWVudGFsX3NpZ25BdXRob3JpemF0aW9uOiBzb3VyY2UuZXhwZXJpbWVudGFsX3NpZ25BdXRob3JpemF0aW9uLAogICAgICBzaWduTWVzc2FnZTogc291cmNlLnNpZ25NZXNzYWdlLAogICAgICBzaWduVHJhbnNhY3Rpb246IHNvdXJjZS5zaWduVHJhbnNhY3Rpb24sCiAgICAgIHNpZ25UeXBlZERhdGE6IHNvdXJjZS5zaWduVHlwZWREYXRhLAogICAgICBzb3VyY2U6ICJjdXN0b20iLAogICAgICB0eXBlOiAibG9jYWwiCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9zaWduLmpzCiAgaW5pdF9zZWNwMjU2azEoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2lnbih7IGhhc2g6IGhhc2gzLCBwcml2YXRlS2V5LCB0byA9ICJvYmplY3QiIH0pIHsKICAgIGNvbnN0IHsgciwgcywgcmVjb3ZlcnkgfSA9IHNlY3AyNTZrMS5zaWduKGhhc2gzLnNsaWNlKDIpLCBwcml2YXRlS2V5LnNsaWNlKDIpKTsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHsKICAgICAgcjogbnVtYmVyVG9IZXgociwgeyBzaXplOiAzMiB9KSwKICAgICAgczogbnVtYmVyVG9IZXgocywgeyBzaXplOiAzMiB9KSwKICAgICAgdjogcmVjb3ZlcnkgPyAyOG4gOiAyN24sCiAgICAgIHlQYXJpdHk6IHJlY292ZXJ5CiAgICB9OwogICAgcmV0dXJuICgoKSA9PiB7CiAgICAgIGlmICh0byA9PT0gImJ5dGVzIiB8fCB0byA9PT0gImhleCIpCiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVNpZ25hdHVyZSh7IC4uLnNpZ25hdHVyZSwgdG8gfSk7CiAgICAgIHJldHVybiBzaWduYXR1cmU7CiAgICB9KSgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9zaWduQXV0aG9yaXphdGlvbi5qcwogIGFzeW5jIGZ1bmN0aW9uIGV4cGVyaW1lbnRhbF9zaWduQXV0aG9yaXphdGlvbihwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGNvbnRyYWN0QWRkcmVzcywgY2hhaW5JZCwgbm9uY2UsIHByaXZhdGVLZXksIHRvID0gIm9iamVjdCIgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzaWduKHsKICAgICAgaGFzaDogaGFzaEF1dGhvcml6YXRpb24oeyBjb250cmFjdEFkZHJlc3MsIGNoYWluSWQsIG5vbmNlIH0pLAogICAgICBwcml2YXRlS2V5LAogICAgICB0bwogICAgfSk7CiAgICBpZiAodG8gPT09ICJvYmplY3QiKQogICAgICByZXR1cm4gewogICAgICAgIGNvbnRyYWN0QWRkcmVzcywKICAgICAgICBjaGFpbklkLAogICAgICAgIG5vbmNlLAogICAgICAgIC4uLnNpZ25hdHVyZQogICAgICB9OwogICAgcmV0dXJuIHNpZ25hdHVyZTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvdXRpbHMvc2lnbk1lc3NhZ2UuanMKICBhc3luYyBmdW5jdGlvbiBzaWduTWVzc2FnZTIoeyBtZXNzYWdlLCBwcml2YXRlS2V5IH0pIHsKICAgIHJldHVybiBhd2FpdCBzaWduKHsgaGFzaDogaGFzaE1lc3NhZ2UobWVzc2FnZSksIHByaXZhdGVLZXksIHRvOiAiaGV4IiB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvdXRpbHMvc2lnblRyYW5zYWN0aW9uLmpzCiAgaW5pdF9rZWNjYWsyNTYoKTsKICBhc3luYyBmdW5jdGlvbiBzaWduVHJhbnNhY3Rpb24yKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgcHJpdmF0ZUtleSwgdHJhbnNhY3Rpb24sIHNlcmlhbGl6ZXIgPSBzZXJpYWxpemVUcmFuc2FjdGlvbiB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hYmxlVHJhbnNhY3Rpb24gPSAoKCkgPT4gewogICAgICBpZiAodHJhbnNhY3Rpb24udHlwZSA9PT0gImVpcDQ4NDQiKQogICAgICAgIHJldHVybiB7CiAgICAgICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgICAgIHNpZGVjYXJzOiBmYWxzZQogICAgICAgIH07CiAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgIH0pKCk7CiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzaWduKHsKICAgICAgaGFzaDoga2VjY2FrMjU2KHNlcmlhbGl6ZXIoc2lnbmFibGVUcmFuc2FjdGlvbikpLAogICAgICBwcml2YXRlS2V5CiAgICB9KTsKICAgIHJldHVybiBzZXJpYWxpemVyKHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9zaWduVHlwZWREYXRhLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2lnblR5cGVkRGF0YTIocGFyYW1ldGVycykgewogICAgY29uc3QgeyBwcml2YXRlS2V5LCAuLi50eXBlZERhdGEgfSA9IHBhcmFtZXRlcnM7CiAgICByZXR1cm4gYXdhaXQgc2lnbih7CiAgICAgIGhhc2g6IGhhc2hUeXBlZERhdGEodHlwZWREYXRhKSwKICAgICAgcHJpdmF0ZUtleSwKICAgICAgdG86ICJoZXgiCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvcHJpdmF0ZUtleVRvQWNjb3VudC5qcwogIGZ1bmN0aW9uIHByaXZhdGVLZXlUb0FjY291bnQocHJpdmF0ZUtleSwgb3B0aW9ucyA9IHt9KSB7CiAgICBjb25zdCB7IG5vbmNlTWFuYWdlcjogbm9uY2VNYW5hZ2VyMiB9ID0gb3B0aW9uczsKICAgIGNvbnN0IHB1YmxpY0tleSA9IHRvSGV4KHNlY3AyNTZrMS5nZXRQdWJsaWNLZXkocHJpdmF0ZUtleS5zbGljZSgyKSwgZmFsc2UpKTsKICAgIGNvbnN0IGFkZHJlc3MgPSBwdWJsaWNLZXlUb0FkZHJlc3MocHVibGljS2V5KTsKICAgIGNvbnN0IGFjY291bnQgPSB0b0FjY291bnQoewogICAgICBhZGRyZXNzLAogICAgICBub25jZU1hbmFnZXI6IG5vbmNlTWFuYWdlcjIsCiAgICAgIGFzeW5jIHNpZ24oeyBoYXNoOiBoYXNoMyB9KSB7CiAgICAgICAgcmV0dXJuIHNpZ24oeyBoYXNoOiBoYXNoMywgcHJpdmF0ZUtleSwgdG86ICJoZXgiIH0pOwogICAgICB9LAogICAgICBhc3luYyBleHBlcmltZW50YWxfc2lnbkF1dGhvcml6YXRpb24oYXV0aG9yaXphdGlvbikgewogICAgICAgIHJldHVybiBleHBlcmltZW50YWxfc2lnbkF1dGhvcml6YXRpb24oeyAuLi5hdXRob3JpemF0aW9uLCBwcml2YXRlS2V5IH0pOwogICAgICB9LAogICAgICBhc3luYyBzaWduTWVzc2FnZSh7IG1lc3NhZ2UgfSkgewogICAgICAgIHJldHVybiBzaWduTWVzc2FnZTIoeyBtZXNzYWdlLCBwcml2YXRlS2V5IH0pOwogICAgICB9LAogICAgICBhc3luYyBzaWduVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIHsgc2VyaWFsaXplciB9ID0ge30pIHsKICAgICAgICByZXR1cm4gc2lnblRyYW5zYWN0aW9uMih7IHByaXZhdGVLZXksIHRyYW5zYWN0aW9uLCBzZXJpYWxpemVyIH0pOwogICAgICB9LAogICAgICBhc3luYyBzaWduVHlwZWREYXRhKHR5cGVkRGF0YSkgewogICAgICAgIHJldHVybiBzaWduVHlwZWREYXRhMih7IC4uLnR5cGVkRGF0YSwgcHJpdmF0ZUtleSB9KTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gewogICAgICAuLi5hY2NvdW50LAogICAgICBwdWJsaWNLZXksCiAgICAgIHNvdXJjZTogInByaXZhdGVLZXkiCiAgICB9OwogIH0KCiAgLy8gbGlicy9zaGlua2FpLXZpZW0vc3JjL2luZGV4LnRzCiAgd2luZG93LnZpZW0gPSBlc21fZXhwb3J0czsKICB3aW5kb3cuY2hhaW5zID0gY2hhaW5zX2V4cG9ydHM7CiAgd2luZG93LmhvbGFEYW5pZWwgPSBmdW5jdGlvbigpIHsKICAgIGNvbnNvbGUubG9nKCJob2xhIERhbmllbDMzMzMiKTsKICB9OwogIHZhciBWaWVtUHJvdmlkZXIgPSBjbGFzcyB7CiAgICBjbGllbnQ7CiAgICBzZWxlY3RlZEFkZHJlc3M7CiAgICBjb25zdHJ1Y3RvcihjaGFpbiwgc2spIHsKICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IHNrOwogICAgICBjb25zdCBhY2NvdW50ID0gcHJpdmF0ZUtleVRvQWNjb3VudChwcml2YXRlS2V5KTsKICAgICAgdGhpcy5jbGllbnQgPSBjcmVhdGVXYWxsZXRDbGllbnQoewogICAgICAgIGFjY291bnQsCiAgICAgICAgY2hhaW46IGNoYWluIHx8IGJhc2VTZXBvbGlhLAogICAgICAgIHRyYW5zcG9ydDogaHR0cCgiaHR0cHM6Ly9zZXBvbGlhLmJhc2Uub3JnIikKICAgICAgfSkuZXh0ZW5kKHB1YmxpY0FjdGlvbnMpOwogICAgICB0aGlzLmNsaWVudC5nZXRBZGRyZXNzZXMoKS50aGVuKChhZGRyZXNzZXMpID0+IHsKICAgICAgICBjb25zb2xlLmxvZygiYWRkcmVzc2VzIiwgYWRkcmVzc2VzKTsKICAgICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IGFkZHJlc3Nlc1swXTsKICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBlbmFibGUoKSB7CiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RBY2NvdW50cygpOwogICAgfQogICAgYXN5bmMgcmVxdWVzdCh7IG1ldGhvZCwgcGFyYW1zIH0pIHsKICAgICAgY29uc29sZS5sb2coInJlcXVlc3QiLCBtZXRob2QsIHBhcmFtcyk7CiAgICAgIHN3aXRjaCAobWV0aG9kKSB7CiAgICAgICAgY2FzZSAiZXRoX3JlcXVlc3RBY2NvdW50cyI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0QWNjb3VudHMoKTsKICAgICAgICBjYXNlICJldGhfYWNjb3VudHMiOgogICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWNjb3VudHMoKTsKICAgICAgICBjYXNlICJldGhfc2VuZFRyYW5zYWN0aW9uIjoKICAgICAgICAgIHJldHVybiB0aGlzLnNlbmRUcmFuc2FjdGlvbihwYXJhbXNbMF0pOwogICAgICAgIGNhc2UgImV0aF9zaWduIjoKICAgICAgICAgIHJldHVybiB0aGlzLnNpZ24ocGFyYW1zWzBdLCBwYXJhbXNbMV0pOwogICAgICAgIGNhc2UgInBlcnNvbmFsX3NpZ24iOgogICAgICAgICAgcmV0dXJuIHRoaXMucGVyc29uYWxTaWduKHBhcmFtc1swXSwgcGFyYW1zWzFdKTsKICAgICAgICBjYXNlICJldGhfc2lnblR5cGVkRGF0YSI6CiAgICAgICAgICByZXR1cm4gdGhpcy5zaWduVHlwZWREYXRhKHBhcmFtc1swXSwgcGFyYW1zWzFdKTsKICAgICAgICBjYXNlICJldGhfY2hhaW5JZCI6CiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDaGFpbklkKCk7CiAgICAgICAgY2FzZSAibmV0X3ZlcnNpb24iOgogICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmV0d29ya0lkKCk7CiAgICAgICAgY2FzZSAiZXRoX2Jsb2NrTnVtYmVyIjoKICAgICAgICAgIHJldHVybiB0aGlzLmdldEJsb2NrTnVtYmVyKCk7CiAgICAgICAgY2FzZSAiZXRoX2dldFRyYW5zYWN0aW9uQ291bnQiOgogICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNhY3Rpb25Db3VudChwYXJhbXNbMF0pOwogICAgICAgIGNhc2UgImV0aF9nZXRUcmFuc2FjdGlvbkJ5SGFzaCI6CiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvbihwYXJhbXNbMF0pOwogICAgICAgIGNhc2UgImV0aF9nZXRUcmFuc2FjdGlvblJlY2VpcHQiOgogICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNhY3Rpb25SZWNlaXB0KHBhcmFtc1swXSk7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbWV0aG9kOiAke21ldGhvZH1gKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZ2V0VHJhbnNhY3Rpb24oaGFzaDMpIHsKICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRUcmFuc2FjdGlvbih7IGhhc2g6IGhhc2gzIH0pOwogICAgICBjb25zb2xlLmxvZygiZ2V0VHJhbnNhY3Rpb24iLCB0cmFuc2FjdGlvbik7CiAgICAgIGlmICh0cmFuc2FjdGlvbi50eXBlID09PSAiZWlwMTU1OSIpIHsKICAgICAgICB0cmFuc2FjdGlvbi50eXBlID0gIjB4MiI7CiAgICAgIH0KICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uOwogICAgfQogICAgYXN5bmMgZ2V0VHJhbnNhY3Rpb25SZWNlaXB0KGhhc2gzKSB7CiAgICAgIGNvbnN0IHJlY2VpcHQgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRUcmFuc2FjdGlvblJlY2VpcHQoeyBoYXNoOiBoYXNoMyB9KTsKICAgICAgY29uc29sZS5sb2coImdldFRyYW5zYWN0aW9uUmVjZWlwdCIsIHJlY2VpcHQpOwogICAgICBpZiAocmVjZWlwdC50eXBlID09PSAiZWlwMTU1OSIpIHsKICAgICAgICByZWNlaXB0LnR5cGUgPSAiMHgyIjsKICAgICAgfQogICAgICBpZiAocmVjZWlwdC5zdGF0dXMgPT09ICJzdWNjZXNzIikgewogICAgICAgIHJlY2VpcHQuc3RhdHVzID0gIjB4MSI7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlY2VpcHQ7CiAgICB9CiAgICBhc3luYyBnZXRUcmFuc2FjdGlvbkNvdW50KGFkZHJlc3MpIHsKICAgICAgY29uc3QgdHJhbnNhY3Rpb25Db3VudCA9IGF3YWl0IHRoaXMuY2xpZW50LmdldFRyYW5zYWN0aW9uQ291bnQoeyBhZGRyZXNzIH0pOwogICAgICBjb25zb2xlLmxvZygidHJhbnNhY3Rpb25Db3VudCIsIHRyYW5zYWN0aW9uQ291bnQpOwogICAgICByZXR1cm4gdHJhbnNhY3Rpb25Db3VudDsKICAgIH0KICAgIGFzeW5jIGdldEJsb2NrTnVtYmVyKCkgewogICAgICBjb25zdCBibG9ja051bWJlciA9IGF3YWl0IHRoaXMuY2xpZW50LmdldEJsb2NrTnVtYmVyKCk7CiAgICAgIGNvbnNvbGUubG9nKCJibG9ja051bWJlciIsIGJsb2NrTnVtYmVyKTsKICAgICAgcmV0dXJuIGJsb2NrTnVtYmVyOwogICAgfQogICAgYXN5bmMgcmVxdWVzdEFjY291bnRzKCkgewogICAgICBjb25zdCBbYWRkcmVzc10gPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRBZGRyZXNzZXMoKTsKICAgICAgY29uc29sZS5sb2coInJlcXVlc3RBY2NvdW50cyIsIGFkZHJlc3MpOwogICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IGFkZHJlc3M7CiAgICAgIHJldHVybiBbYWRkcmVzc107CiAgICB9CiAgICBhc3luYyBnZXRBY2NvdW50cygpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID8gW3RoaXMuc2VsZWN0ZWRBZGRyZXNzXSA6IFtdOwogICAgfQogICAgYXN5bmMgc2VuZFRyYW5zYWN0aW9uKHR4KSB7CiAgICAgIGlmICghdGhpcy5zZWxlY3RlZEFkZHJlc3MpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIGFjY291bnRzIGF2YWlsYWJsZSIpOwogICAgICB9CiAgICAgIGlmICghdHgudG8gfHwgIXR4LnZhbHVlIHx8ICF0eC5nYXMpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWlyZWQgdHJhbnNhY3Rpb24gcGFyYW1ldGVycyIpOwogICAgICB9CiAgICAgIGNvbnNvbGUubG9nKCJzZW5kVHJhbnNhY3Rpb24gdHg6ICIsIHR4KTsKICAgICAgY29uc29sZS5sb2coIlRyYW5zYWN0aW9uIGdhc1ByaWNlOiAiLCB0eC5nYXNQcmljZSk7CiAgICAgIGNvbnNvbGUubG9nKCJUcmFuc2FjdGlvbiBnYXM6ICIsIHR4Lmdhcyk7CiAgICAgIGNvbnN0IHZhbHVlID0gQmlnSW50KHR4LnZhbHVlKTsKICAgICAgY29uc3QgdmFsdWVJbkV0aCA9IE51bWJlcih2YWx1ZSkgLyAxMCAqKiAxODsKICAgICAgY29uc29sZS5sb2coYFRyYW5zYWN0aW9uIHZhbHVlIGluIEVUSDogJHt2YWx1ZUluRXRofWApOwogICAgICBjb25zdCB0cmFuc2FjdGlvbkNvbnRlbnQgPSB7CiAgICAgICAgdG86IHR4LnRvLAogICAgICAgIHZhbHVlLAogICAgICAgIGRhdGE6IHR4LmRhdGEsCiAgICAgICAgY2hhaW46IHRoaXMuY2xpZW50LmNoYWluCiAgICAgIH07CiAgICAgIGNvbnNvbGUubG9nKCJzZW5kVHJhbnNhY3Rpb24iLCB0cmFuc2FjdGlvbkNvbnRlbnQpOwogICAgICB0cnkgewogICAgICAgIGNvbnN0IHJlcXVlc3QgPSBhd2FpdCB0aGlzLmNsaWVudC5wcmVwYXJlVHJhbnNhY3Rpb25SZXF1ZXN0KHRyYW5zYWN0aW9uQ29udGVudCk7CiAgICAgICAgY29uc29sZS5sb2coIlByZXBhcmVkIHRyYW5zYWN0aW9uIHJlcXVlc3Q6IiwgcmVxdWVzdCk7CiAgICAgICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gYXdhaXQgdGhpcy5jbGllbnQuc2lnblRyYW5zYWN0aW9uKHJlcXVlc3QpOwogICAgICAgIGNvbnNvbGUubG9nKCJTZXJpYWxpemVkIHRyYW5zYWN0aW9uOiIsIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgICAgICAgY29uc3QgaGFzaDMgPSBhd2FpdCB0aGlzLmNsaWVudC5zZW5kUmF3VHJhbnNhY3Rpb24oewogICAgICAgICAgc2VyaWFsaXplZFRyYW5zYWN0aW9uCiAgICAgICAgfSk7CiAgICAgICAgY29uc29sZS5sb2coInNlbmRUcmFuc2FjdGlvbiBoYXNoIiwgaGFzaDMpOwogICAgICAgIHJldHVybiBoYXNoMzsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJzZW5kVHJhbnNhY3Rpb24gZXJyb3IiLCBlcnJvcik7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHNpZ24oYWRkcmVzcywgbWVzc2FnZSkgewogICAgICBpZiAoYWRkcmVzcyAhPT0gdGhpcy5zZWxlY3RlZEFkZHJlc3MpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFkZHJlc3MgbWlzbWF0Y2giKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2lnbk1lc3NhZ2UoeyBhY2NvdW50OiBhZGRyZXNzLCBtZXNzYWdlIH0pOwogICAgfQogICAgYXN5bmMgcGVyc29uYWxTaWduKG1lc3NhZ2UsIGFkZHJlc3MpIHsKICAgICAgaWYgKGFkZHJlc3MgIT09IHRoaXMuc2VsZWN0ZWRBZGRyZXNzKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBZGRyZXNzIG1pc21hdGNoIik7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNpZ25NZXNzYWdlKHsgYWNjb3VudDogYWRkcmVzcywgbWVzc2FnZSB9KTsKICAgIH0KICAgIGFzeW5jIHNpZ25UeXBlZERhdGEoYWRkcmVzcywgdHlwZWREYXRhKSB7CiAgICAgIGlmIChhZGRyZXNzICE9PSB0aGlzLnNlbGVjdGVkQWRkcmVzcykgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiQWRkcmVzcyBtaXNtYXRjaCIpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zaWduVHlwZWREYXRhKHsKICAgICAgICBhY2NvdW50OiBhZGRyZXNzLAogICAgICAgIGRvbWFpbjogdHlwZWREYXRhLmRvbWFpbiwKICAgICAgICB0eXBlczogdHlwZWREYXRhLnR5cGVzLAogICAgICAgIG1lc3NhZ2U6IHR5cGVkRGF0YS5tZXNzYWdlLAogICAgICAgIHByaW1hcnlUeXBlOiB0eXBlZERhdGEucHJpbWFyeVR5cGUKICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBnZXRDaGFpbklkKCkgewogICAgICBjb25zdCBjaGFpbklkID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0Q2hhaW5JZCgpOwogICAgICBjb25zb2xlLmxvZygiZ2V0Q2hhaW5JZCIsIGNoYWluSWQpOwogICAgICByZXR1cm4gY2hhaW5JZDsKICAgIH0KICAgIGFzeW5jIGdldE5ldHdvcmtJZCgpIHsKICAgICAgY29uc3QgY2hhaW5JZCA9IGF3YWl0IHRoaXMuZ2V0Q2hhaW5JZCgpOwogICAgICByZXR1cm4gY2hhaW5JZC50b1N0cmluZygpOwogICAgfQogIH07CiAgZnVuY3Rpb24gYWRkRWlwNjk2M0xpc3RlbmVyKGluZm8sIHByb3ZpZGVyKSB7CiAgICBjb25zdCBhbm5vdW5jZUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KAogICAgICAiZWlwNjk2Mzphbm5vdW5jZVByb3ZpZGVyIiwKICAgICAgewogICAgICAgIGRldGFpbDogT2JqZWN0LmZyZWV6ZSh7IGluZm8sIHByb3ZpZGVyIH0pCiAgICAgIH0KICAgICk7CiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChhbm5vdW5jZUV2ZW50KTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJlaXA2OTYzOnJlcXVlc3RQcm92aWRlciIsICgpID0+IHsKICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoYW5ub3VuY2VFdmVudCk7CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gaW5pdGlhbGl6ZVZpZW1Qcm92aWRlcihjaGFpbiwgcHJvdmlkZXJJbmZvLCBzaykgewogICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgVmllbVByb3ZpZGVyKGNoYWluLCBzayk7CiAgICB3aW5kb3cuZXRoZXJldW0gPSB7CiAgICAgIHJlcXVlc3Q6IHByb3ZpZGVyLnJlcXVlc3QuYmluZChwcm92aWRlciksCiAgICAgIGVuYWJsZTogcHJvdmlkZXIuZW5hYmxlLmJpbmQocHJvdmlkZXIpLAogICAgICBvbjogKGV2ZW50TmFtZSwgY2FsbGJhY2spID0+IHsKICAgICAgICBjb25zb2xlLmxvZyhgRXZlbnQgbGlzdGVuZXIgZm9yICR7ZXZlbnROYW1lfSBhZGRlZC5gKTsKICAgICAgfSwKICAgICAgcmVtb3ZlTGlzdGVuZXI6IChldmVudE5hbWUsIGNhbGxiYWNrKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coYEV2ZW50IGxpc3RlbmVyIGZvciAke2V2ZW50TmFtZX0gcmVtb3ZlZC5gKTsKICAgICAgfSwKICAgICAgaXNDb25uZWN0ZWQ6ICgpID0+IHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSwKICAgICAgc2VuZDogKG1ldGhvZCwgcGFyYW1zKSA9PiB7CiAgICAgICAgY29uc29sZS53YXJuKCJzZW5kIGlzIGRlcHJlY2F0ZWQuIFVzZSByZXF1ZXN0IGluc3RlYWQuIik7CiAgICAgICAgcmV0dXJuIHByb3ZpZGVyLnJlcXVlc3QoeyBtZXRob2QsIHBhcmFtcyB9KTsKICAgICAgfSwKICAgICAgc2VuZEFzeW5jOiAocGF5bG9hZCwgY2FsbGJhY2spID0+IHsKICAgICAgICBjb25zb2xlLndhcm4oInNlbmRBc3luYyBpcyBkZXByZWNhdGVkLiBVc2UgcmVxdWVzdCBpbnN0ZWFkLiIpOwogICAgICAgIHByb3ZpZGVyLnJlcXVlc3QoeyBtZXRob2Q6IHBheWxvYWQubWV0aG9kLCBwYXJhbXM6IHBheWxvYWQucGFyYW1zIH0pLnRoZW4oKHJlc3VsdCkgPT4gY2FsbGJhY2sobnVsbCwgeyByZXN1bHQgfSkpLmNhdGNoKChlcnJvcikgPT4gY2FsbGJhY2soZXJyb3IsIG51bGwpKTsKICAgICAgfSwKICAgICAgaXNNZXRhTWFzazogdHJ1ZSwKICAgICAgLy8gU2V0IHRvIHRydWUgaWYgbWltaWNraW5nIE1ldGFNYXNrCiAgICAgIHNlbGVjdGVkQWRkcmVzczogcHJvdmlkZXIuc2VsZWN0ZWRBZGRyZXNzLAogICAgICBjaGFpbklkOiBjaGFpbj8uaWQgfHwgIjB4MSIKICAgICAgLy8gRGVmYXVsdCB0byBtYWlubmV0IGlmIGNoYWluIGlzIG5vdCBwcm92aWRlZAogICAgfTsKICAgIGFkZEVpcDY5NjNMaXN0ZW5lcihwcm92aWRlckluZm8sIHByb3ZpZGVyKTsKICAgIGNvbnNvbGUubG9nKCJWaWVtIHByb3ZpZGVyIGluaXRpYWxpemVkIik7CiAgfQogIHZhciB2aWVtUHJvdmlkZXJJbmZvID0gewogICAgdXVpZDogImQ2OWJjNGM0LWU0M2EtNGQwYS04M2Q3LWI2ZTdiNzUwNGJlYiIsCiAgICBuYW1lOiAiU2hpbmthaSBWaWVtIFByb3ZpZGVyIiwKICAgIGljb246ICJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNelkzSWlCb1pXbG5hSFE5SWpNMk55SWdkbWxsZDBKdmVEMGlNQ0F3SURNMk55QXpOamNpSUdacGJHdzlJbTV2Ym1VaUlIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJK0NqeGphWEpqYkdVZ1kzZzlJakU0TXk0MUlpQmplVDBpTVRnekxqVWlJSEk5SWpFNE15NDFJaUJtYVd4c1BTSWpSa1UyTVRZeUlpOCtDanh3WVhSb0lHUTlJazB5TnpJdU1qazFJREkzTkM0Mk5qaERNamN3TGpjMU9DQXlOamd1T1RjMUlESTJOaTQyTVRrZ01qWTJMakl4TlNBeU5qQXVPRFEwSURJMk5pNDNOemxETWpRNUxqWTJOQ0F5TmpjdU9EWXpJREkwTlM0NU5USWdNalkwTGpJM09TQXlOREF1TmpRMklESTFOaTQwTURSRE1qVTBMall5T0NBeU5Ua3VNelkzSURJMk15NDJORFlnTWpVMUxqY3lOU0F5TmpZdU5EWXpJREkxTkM0eE1EZERNamN3TGpBNUlESTFNaTR3TVRJZ01qY3pMamMySURJME9TNHpNalFnTWpjeUxqTXdPU0F5TkRRdU5UZzFRekkzTUM0NE9EWWdNak01TGprME55QXlOall1TmpFNUlESXpPUzR3TWpJZ01qWXlMakl6T0NBeU16a3VPRFpETWpVMkxqQXlNaUF5TkRFdU1EUTFJREkxTUM0d05qSWdNalF4TGpjek9DQXlORFV1TWpJMklESXpOUzQyT0RSRE1qUTJMakkxSURJek5DNDNOVGtnTWpRM0xqSTNOQ0F5TXpNdU9EQTJJREkwT0M0ek1qY2dNak15TGpnNU5VTXlOVEF1T1RBeUlESXpNQzQyT0RVZ01qVXlMamc1TXlBeU1qZ3VNRGcwSURJMU1TNDFPRFFnTWpJMExqVTNNME15TlRBdU16TXpJREl5TVM0eU1pQXlORGN1TVRZeElESXhPUzR5T1RrZ01qUXpMamt6TWlBeU1Ua3VPRGt4UXpJME1TNHpJREl5TUM0ek9ESWdNak0yTGpBeU15QXlNakl1TURNZ01qTTBMalF4TmlBeU1Ua3VNelF5VERJek5DNDBPRGNnTWpFNUxqTXhNME15TXpNdU9EYzFJREl4T1M0eE5qa2dNak15TGprek55QXlNVFl1TmpVMElESXpNaTQzTXpjZ01qRTBMamd4T1VNeU16RXVOems1SURJd05TNDRORFlnTWpNMUxqWTRNaUF4T1RjdU1qTTFJREkwTUM0NU1UWWdNVGt3TGpBNE1rTXlORGN1TkRRMUlERTRNUzR4T1RZZ01qVXhMamt5TmlBeE56RXVNems1SURJMU15NDVNVGNnTVRZd0xqVXpNME15TlRjdU1ETXlJREUwTXk0ME9ETWdNalV6TGpjek1pQXhNamN1TmpFNElESTBOQzQxTVRVZ01URXpMakF6T1VNeU16TXVOVGMzSURrMUxqY3lPRE1nTWpFNExqRTFPQ0E0TkM0ek1qYzRJREU1Tnk0NE5pQTRNQzR4TXpjMVF6RTVNeTR3T1RVZ056a3VNVFUxSURFNE9DNDBORFFnTnpndU5qTTBPQ0F4T0RNdU9UTTFJRGM0TGpVME9ERkRNVGM1TGpReE1TQTNPQzQyTXpRNElERTNOQzQzTnpRZ056a3VNVFUxSURFM01DNHdNRGtnT0RBdU1UTTNOVU14TkRrdU56STJJRGcwTGpNeU56Z2dNVE0wTGpJNU15QTVOUzQzTWpneklERXlNeTR6TlRRZ01URXpMakF6T1VNeE1UUXVNVFV4SURFeU55NDJNVGdnTVRFd0xqZzFNU0F4TkRNdU5EZ3pJREV4TXk0NU5USWdNVFl3TGpVek0wTXhNVFV1T1RJNUlERTNNUzQwTVRRZ01USXdMalF5TkNBeE9ERXVNVGsySURFeU5pNDVOVE1nTVRrd0xqQTRNa014TXpJdU1qQXlJREU1Tnk0eU16VWdNVE0yTGpBNE5TQXlNRFV1T0RNeUlERXpOUzR4TXpJZ01qRTBMamd4T1VNeE16UXVPVE16SURJeE5pNDJOVFFnTVRNekxqazVOQ0F5TVRrdU1UWTVJREV6TXk0ek9ESWdNakU1TGpNeE0wd3hNek11TkRVeklESXhPUzR6TkRKRE1UTXhMamcwTmlBeU1qSXVNREUxSURFeU5pNDFPRE1nTWpJd0xqTTRNaUF4TWpNdU9UTTRJREl4T1M0NE9URkRNVEl3TGpjeU15QXlNVGt1TWprNUlERXhOeTQxTXpjZ01qSXhMakl5SURFeE5pNHlPRFVnTWpJMExqVTNNME14TVRRdU9UYzJJREl5T0M0d09EUWdNVEUyTGprMU5DQXlNekF1TmpnMUlERXhPUzQxTkRJZ01qTXlMamc1TlVNeE1qQXVOVGsxSURJek15NDRNRFlnTVRJeExqWXhPU0F5TXpRdU56VTVJREV5TWk0Mk5ETWdNak0xTGpZNE5FTXhNVGN1T0RBM0lESTBNUzQzTXpnZ01URXhMamd6TXlBeU5ERXVNRFExSURFd05TNDJNekVnTWpNNUxqZzJRekV3TVM0eU5TQXlNemt1TURJeUlEazJMams0TWprZ01qTTVMamswTnlBNU5TNDFOakExSURJME5DNDFPRFZET1RRdU1UQTVOeUF5TkRrdU16STBJRGszTGpjM09UVWdNalV5TGpBeE1pQXhNREV1TkRBM0lESTFOQzR4TURkRE1UQTBMakl3T1NBeU5UVXVOekkxSURFeE15NHlOREVnTWpVNUxqTTFNaUF4TWpjdU1qSXpJREkxTmk0ME1EUkRNVEl4TGpreE9DQXlOalF1TWpjNUlERXhPQzR5TURVZ01qWTNMamcyTXlBeE1EY3VNREkxSURJMk5pNDNOemxETVRBeExqSTFJREkyTmk0eU1UVWdPVGN1TURrMk55QXlOamd1T1RjMUlEazFMalUzTkRjZ01qYzBMalkyT0VNNU5DNHdPREV5SURJNE1DNHlNekVnT1RjdU1ESTFOaUF5T0RRdU1qRTVJREV3TVM0Mk9URWdNamcyTGpnM09FTXhNRFF1TnpRNUlESTRPQzQyTVRJZ01UQTRMakUyTXlBeU9Ea3VNamt4SURFeE1TNDNOellnTWpnNUxqTTBPVU14TXpFdU5UWXlJREk0T1M0Mk1qTWdNVFEzTGpnNU1TQXlPREV1TkRVNUlERTJNaTQxT1RrZ01qWTVMakUzT0VNeE56QXVOamt5SURJMk1pNDBNVFVnTVRjM0xqTTBPU0F5TlRndU9Ua3hJREU0TXk0NU5Ea2dNalU0TGprd05FTXhPVEF1TlRRNUlESTFPQzQ1T1RFZ01UazNMakU1TVNBeU5qSXVOREUxSURJd05TNHlPVGtnTWpZNUxqRTNPRU15TWpBdU1EQTNJREk0TVM0ME5Ua2dNak0yTGpNek5pQXlPRGt1TmpJeklESTFOaTR4TWpJZ01qZzVMak0wT1VNeU5Ua3VOek0xSURJNE9TNHpNRFVnTWpZekxqRTBPQ0F5T0RndU5qRXlJREkyTmk0eU1EY2dNamcyTGpnM09FTXlOekF1T0RnMklESTROQzR5TVRrZ01qY3pMamd4TnlBeU9EQXVNak14SURJM01pNHpNak1nTWpjMExqWTJPRWd5TnpJdU1qazFXazB4TlRZdU5qSTBJREl3Tnk0eU5qSkRNVFV3TGpVd09DQXlNRGN1TWpRNElERTBOUzQwTlRrZ01qQXlMakV6TXlBeE5EVXVORFEwSURFNU5TNDVOak5ETVRRMUxqUTBOQ0F4T0RrdU5qYzRJREUxTUM0MU5URWdNVGcwTGpVek5DQXhOVFl1T0RVeUlERTROQzQwTnpaRE1UWXlMamcwSURFNE5DNDBNVGdnTVRZNExqRTNOQ0F4T1RBdU1EazNJREUyT0M0eE1UY2dNVGsyTGpRMk9VTXhOamd1TURZeElESXdNaTQzT0RNZ01UWXpMakkxTXlBeU1EY3VNamt4SURFMU5pNDJNalFnTWpBM0xqSTJNbHBOTWpFeExqSXpNU0F5TURjdU1qWXlRekl3TkM0MU9EZ2dNakEzTGpJNU1TQXhPVGt1TnprMUlESXdNaTQzTmprZ01UazVMamN6T0NBeE9UWXVORFk1UXpFNU9TNDJPREVnTVRrd0xqQTVOeUF5TURVdU1ESTVJREU0TkM0ME1UZ2dNakV4TGpBd015QXhPRFF1TkRjMlF6SXhOeTR6TURRZ01UZzBMalUwT0NBeU1qSXVOREV4SURFNE9TNDJPVElnTWpJeUxqUXhNU0F4T1RVdU9UWXpRekl5TWk0ME1URWdNakF5TGpFek15QXlNVGN1TXpRM0lESXdOeTR5TkRnZ01qRXhMakl6TVNBeU1EY3VNall5V2lJZ1ptbHNiRDBpZDJocGRHVWlMejRLUEM5emRtYytDZz09IiwKICAgIC8vIEJhc2U2NCBlbmNvZGVkIGljb24KICAgIHJkbnM6ICJjb20uc2hpbmthaS5kZXNrdG9wIgogIH07CiAgd2luZG93LmluaXRWaWVtUHJvdmlkZXIgPSBmdW5jdGlvbihzaykgewogICAgY29uc29sZS5sb2coYGhvbGEgRGFuaWVsLCB2YW1vcyBhIGluaWNpYWxpemFyIGVsIHByb3ZpZGVyIGNvbiBsYSBzazogJHtza31gKTsKICAgIGluaXRpYWxpemVWaWVtUHJvdmlkZXIoYmFzZVNlcG9saWEsIHZpZW1Qcm92aWRlckluZm8sIHNrKTsKICB9Owp9KSgpOwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKQG5vYmxlL2hhc2hlcy9lc20vdXRpbHMuanM6CiAgKCohIG5vYmxlLWhhc2hlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqKQoKQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvdXRpbHMuanM6CiAgKCohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqKQoKQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvbW9kdWxhci5qczoKICAoKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICopCgpAbm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC9jdXJ2ZS5qczoKICAoKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICopCgpAbm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC93ZWllcnN0cmFzcy5qczoKICAoKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICopCgpAbm9ibGUvY3VydmVzL2VzbS9fc2hvcnR3X3V0aWxzLmpzOgogICgqISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKikKCkBub2JsZS9jdXJ2ZXMvZXNtL3NlY3AyNTZrMS5qczoKICAoKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICopCiovCg=="; diff --git a/apps/shinkai-tool-aave-loan-requester/src/index.test.ts b/apps/shinkai-tool-aave-loan-requester/src/index.test.ts index 681409b..beb04bd 100644 --- a/apps/shinkai-tool-aave-loan-requester/src/index.test.ts +++ b/apps/shinkai-tool-aave-loan-requester/src/index.test.ts @@ -13,6 +13,7 @@ test('run definition', async () => { const run_result = await tool.run({ inputValue: '0.005', assetSymbol: 'ETH', + secretKey: '0x{{your-secret-key}}', }); console.log(run_result); }, 25000); diff --git a/apps/shinkai-tool-aave-loan-requester/src/index.ts b/apps/shinkai-tool-aave-loan-requester/src/index.ts index 53d8131..5527320 100644 --- a/apps/shinkai-tool-aave-loan-requester/src/index.ts +++ b/apps/shinkai-tool-aave-loan-requester/src/index.ts @@ -15,6 +15,7 @@ type Config = { type Params = { inputValue: string; assetSymbol: string; + secretKey: string; }; type Result = { amountProcessed: string; @@ -47,8 +48,9 @@ export class Tool extends BaseTool { properties: { inputValue: { type: 'string' }, assetSymbol: { type: 'string' }, + secretKey: { type: 'string' }, }, - required: ['inputValue', 'assetSymbol'], + required: ['inputValue', 'assetSymbol', 'secretKey'], }, result: { type: 'object', @@ -62,6 +64,7 @@ export class Tool extends BaseTool { async run(params: Params): Promise> { const browser = await playwright['chromium'].launch({ executablePath: this.config?.chromePath || chromePaths.chrome, + headless: false, }); const context = await browser.newContext({ viewport: { width: 1280, height: 800 }, // Set viewport size @@ -69,9 +72,7 @@ export class Tool extends BaseTool { const page = await context.newPage(); // await page.goto(params.url); - await page.goto( - 'https://staging.aave.com/?marketName=proto_arbitrum_sepolia_v3', - ); + await page.goto('https://staging.aave.com/?marketName=proto_base_sepolia_v3'); console.log('Viem script loaded'); @@ -82,6 +83,13 @@ export class Tool extends BaseTool { console.log('Viem script injected'); }, Buffer.from(viemScriptContent, 'base64').toString('utf-8')); + // Call alert('hello') on the page + await page.evaluate((secretKey) => { + console.log('hello', secretKey); + alert('hello'); + (window as any).initViemProvider(secretKey); + }, params.secretKey); + // Click the "Opt-out" button // Wait for the "Opt-out" button to appear and click it await page.waitForSelector('#rcc-decline-button > p'); diff --git a/libs/shinkai-viem/src/index.ts b/libs/shinkai-viem/src/index.ts index ad0e738..80290e2 100644 --- a/libs/shinkai-viem/src/index.ts +++ b/libs/shinkai-viem/src/index.ts @@ -6,24 +6,23 @@ import { privateKeyToAccount } from 'viem/accounts'; // Assign to window object (window as any).viem = viem; (window as any).chains = chains; +(window as any).holaDaniel = function () { + console.log('hola Daniel3333'); +}; // EIP-1193 Provider Implementation class ViemProvider { client; selectedAddress: viem.Address | undefined; - constructor(chain: any, sk: viem.Hex | null) { - const privateKey: viem.Hex = - sk || - '0xf4c1c6d9231a5f08aa8d9824a142c4fc5a663ca1a6ecd61126e54a0d7501df82'; + constructor(chain: any, sk: string) { + const privateKey: viem.Hex = sk as viem.Hex const account = privateKeyToAccount(privateKey); this.client = createWalletClient({ account, - chain: chain || chains.arbitrumSepolia, - transport: viem.http( - 'https://arbitrum-sepolia.blockpi.network/v1/rpc/public', - ), + chain: chain || chains.baseSepolia, + transport: viem.http('https://sepolia.base.org'), }).extend(viem.publicActions); // Update to await the promise @@ -248,8 +247,8 @@ function addEip6963Listener(info: EIP6963ProviderInfo, provider: ViemProvider) { } // Function to initialize and assign the provider to window.ethereum -function initializeViemProvider(chain: any, providerInfo: EIP6963ProviderInfo) { - const provider = new ViemProvider(chain, null); // TODO: remove null +function initializeViemProvider(chain: any, providerInfo: EIP6963ProviderInfo, sk: string) { + const provider = new ViemProvider(chain, sk); // TODO: remove null (window as any).ethereum = { request: provider.request.bind(provider), @@ -299,8 +298,11 @@ const viemProviderInfo: EIP6963ProviderInfo = { rdns: 'com.shinkai.desktop', }; -// Initialize the provider for Arbitrum Sepolia by default -initializeViemProvider(chains.arbitrumSepolia, viemProviderInfo); +// Initialize the provider for Base Sepolia by default +(window as any).initViemProvider = function (sk: string) { + console.log(`hola Daniel, vamos a inicializar el provider con la sk: ${sk}`); + initializeViemProvider(chains.baseSepolia, viemProviderInfo, sk); +}; // Optionally export them if you want to access them later export { viem, chains, ViemProvider, initializeViemProvider, viemProviderInfo }; From 8c90547ace3371ce7e2aa8e1010307d4898223fa Mon Sep 17 00:00:00 2001 From: Daniel Baez Date: Mon, 16 Sep 2024 15:47:11 -0500 Subject: [PATCH 2/3] feature/aave-loan-requester: derivates new aave-dashboard --- .../generate-shinkai-viem-export.ts | 23 ++ .../jest.config.ts | 6 + apps/shinkai-tool-aave-dashboard/package.json | 4 + apps/shinkai-tool-aave-dashboard/project.json | 37 +++ .../src/bundled-resources/shinkai-viem.ts | 2 + .../src/chrome-paths.d.ts | 3 + .../src/index.test.ts | 31 ++ apps/shinkai-tool-aave-dashboard/src/index.ts | 307 ++++++++++++++++++ .../tsconfig.app.json | 4 + .../shinkai-tool-aave-dashboard/tsconfig.json | 10 + .../tsconfig.spec.json | 15 + .../generate-shinkai-viem-export.ts | 5 + .../src/bundled-resources/shinkai-viem.ts | 2 +- .../src/index.test.ts | 7 +- .../src/index.ts | 15 +- .../src/bundled-resources/shinkai-viem.js | 16 +- .../src/built_in_tools.rs | 10 + libs/shinkai-viem/src/index.ts | 6 +- 18 files changed, 482 insertions(+), 21 deletions(-) create mode 100644 apps/shinkai-tool-aave-dashboard/generate-shinkai-viem-export.ts create mode 100644 apps/shinkai-tool-aave-dashboard/jest.config.ts create mode 100644 apps/shinkai-tool-aave-dashboard/package.json create mode 100644 apps/shinkai-tool-aave-dashboard/project.json create mode 100644 apps/shinkai-tool-aave-dashboard/src/bundled-resources/shinkai-viem.ts create mode 100644 apps/shinkai-tool-aave-dashboard/src/chrome-paths.d.ts create mode 100644 apps/shinkai-tool-aave-dashboard/src/index.test.ts create mode 100644 apps/shinkai-tool-aave-dashboard/src/index.ts create mode 100644 apps/shinkai-tool-aave-dashboard/tsconfig.app.json create mode 100644 apps/shinkai-tool-aave-dashboard/tsconfig.json create mode 100644 apps/shinkai-tool-aave-dashboard/tsconfig.spec.json diff --git a/apps/shinkai-tool-aave-dashboard/generate-shinkai-viem-export.ts b/apps/shinkai-tool-aave-dashboard/generate-shinkai-viem-export.ts new file mode 100644 index 0000000..5f2e3f2 --- /dev/null +++ b/apps/shinkai-tool-aave-dashboard/generate-shinkai-viem-export.ts @@ -0,0 +1,23 @@ +import * as fs from 'fs'; +import * as path from 'path'; + +const shinkaViemPath = path.join( + __dirname, + '../../dist/libs/shinkai-viem/shinkai-viem.js', +); +const shinkaiViemContent = fs.readFileSync(shinkaViemPath, 'utf-8'); + +const outputPath = path.join( + __dirname, + 'src/bundled-resources/shinkai-viem.ts', +); +const outputContent = `// autogenerated +export const viemScriptContent = "${Buffer.from(shinkaiViemContent).toString('base64')}"; +`; + +const outputDir = path.dirname(outputPath); +if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); +} + +fs.writeFileSync(outputPath, outputContent); diff --git a/apps/shinkai-tool-aave-dashboard/jest.config.ts b/apps/shinkai-tool-aave-dashboard/jest.config.ts new file mode 100644 index 0000000..9f98c38 --- /dev/null +++ b/apps/shinkai-tool-aave-dashboard/jest.config.ts @@ -0,0 +1,6 @@ +/* eslint-disable */ +export default { + displayName: '@shinkai_protocol/shinkai-tool-aave-dashboard', + preset: '../../jest.preset.js', + coverageDirectory: '../../coverage/apps/shinkai-tool-aave-dashboard', +}; diff --git a/apps/shinkai-tool-aave-dashboard/package.json b/apps/shinkai-tool-aave-dashboard/package.json new file mode 100644 index 0000000..40fd4db --- /dev/null +++ b/apps/shinkai-tool-aave-dashboard/package.json @@ -0,0 +1,4 @@ +{ + "name": "@shinkai_protocol/shinkai-tool-aave-dashboard", + "type": "commonjs" +} diff --git a/apps/shinkai-tool-aave-dashboard/project.json b/apps/shinkai-tool-aave-dashboard/project.json new file mode 100644 index 0000000..dde7d05 --- /dev/null +++ b/apps/shinkai-tool-aave-dashboard/project.json @@ -0,0 +1,37 @@ +{ + "name": "@shinkai_protocol/shinkai-tool-aave-dashboard", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/shinkai-tool-aave-dashboard/src", + "projectType": "library", + "tags": ["tool"], + "targets": { + "build": { + "dependsOn": [ + { "projects": "@shinkai_protocol/shinkai-viem", "target": "build" } + ], + "executor": "nx:run-commands", + "defaultConfiguration": "production", + "options": { + "commands": [ + "npx ts-node apps/shinkai-tool-aave-dashboard/generate-shinkai-viem-export.ts", + "npx ts-node scripts/tool-bundler.ts --entry ./apps/shinkai-tool-aave-dashboard/src/index.ts --outputFolder ./dist/apps/shinkai-tool-aave-dashboard" + ], + "parallel": false + }, + "configurations": { + "development": {}, + "production": {} + } + }, + "lint": { + "executor": "@nx/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": [ + "apps/shinkai-tool-aave-dashboard/**/*.ts", + "apps/shinkai-tool-aave-dashboard/package.json" + ] + } + } + } +} diff --git a/apps/shinkai-tool-aave-dashboard/src/bundled-resources/shinkai-viem.ts b/apps/shinkai-tool-aave-dashboard/src/bundled-resources/shinkai-viem.ts new file mode 100644 index 0000000..69c66d0 --- /dev/null +++ b/apps/shinkai-tool-aave-dashboard/src/bundled-resources/shinkai-viem.ts @@ -0,0 +1,2 @@ +// autogenerated +export const viemScriptContent = "InVzZSBzdHJpY3QiOwooKCkgPT4gewogIHZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7CiAgdmFyIF9fZXNtID0gKGZuLCByZXMpID0+IGZ1bmN0aW9uIF9faW5pdCgpIHsKICAgIHJldHVybiBmbiAmJiAocmVzID0gKDAsIGZuW19fZ2V0T3duUHJvcE5hbWVzKGZuKVswXV0pKGZuID0gMCkpLCByZXM7CiAgfTsKICB2YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHsKICAgIGZvciAodmFyIG5hbWUgaW4gYWxsKQogICAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pOwogIH07CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL3ZlcnNpb24uanMKICB2YXIgdmVyc2lvbjsKICB2YXIgaW5pdF92ZXJzaW9uID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL3ZlcnNpb24uanMiKCkgewogICAgICB2ZXJzaW9uID0gIjEuMC41IjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vZXJyb3JzLmpzCiAgdmFyIEJhc2VFcnJvcjsKICB2YXIgaW5pdF9lcnJvcnMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vZXJyb3JzLmpzIigpIHsKICAgICAgaW5pdF92ZXJzaW9uKCk7CiAgICAgIEJhc2VFcnJvciA9IGNsYXNzIF9CYXNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3Ioc2hvcnRNZXNzYWdlLCBhcmdzID0ge30pIHsKICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSBhcmdzLmNhdXNlIGluc3RhbmNlb2YgX0Jhc2VFcnJvciA/IGFyZ3MuY2F1c2UuZGV0YWlscyA6IGFyZ3MuY2F1c2U/Lm1lc3NhZ2UgPyBhcmdzLmNhdXNlLm1lc3NhZ2UgOiBhcmdzLmRldGFpbHM7CiAgICAgICAgICBjb25zdCBkb2NzUGF0aDkgPSBhcmdzLmNhdXNlIGluc3RhbmNlb2YgX0Jhc2VFcnJvciA/IGFyZ3MuY2F1c2UuZG9jc1BhdGggfHwgYXJncy5kb2NzUGF0aCA6IGFyZ3MuZG9jc1BhdGg7CiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gWwogICAgICAgICAgICBzaG9ydE1lc3NhZ2UgfHwgIkFuIGVycm9yIG9jY3VycmVkLiIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICAuLi5hcmdzLm1ldGFNZXNzYWdlcyA/IFsuLi5hcmdzLm1ldGFNZXNzYWdlcywgIiJdIDogW10sCiAgICAgICAgICAgIC4uLmRvY3NQYXRoOSA/IFtgRG9jczogaHR0cHM6Ly9hYml0eXBlLmRldiR7ZG9jc1BhdGg5fWBdIDogW10sCiAgICAgICAgICAgIC4uLmRldGFpbHMgPyBbYERldGFpbHM6ICR7ZGV0YWlsc31gXSA6IFtdLAogICAgICAgICAgICBgVmVyc2lvbjogYWJpdHlwZUAke3ZlcnNpb259YAogICAgICAgICAgXS5qb2luKCJcbiIpOwogICAgICAgICAgc3VwZXIobWVzc2FnZSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRldGFpbHMiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkb2NzUGF0aCIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm1ldGFNZXNzYWdlcyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNob3J0TWVzc2FnZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiQWJpVHlwZUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoYXJncy5jYXVzZSkKICAgICAgICAgICAgdGhpcy5jYXVzZSA9IGFyZ3MuY2F1c2U7CiAgICAgICAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzOwogICAgICAgICAgdGhpcy5kb2NzUGF0aCA9IGRvY3NQYXRoOTsKICAgICAgICAgIHRoaXMubWV0YU1lc3NhZ2VzID0gYXJncy5tZXRhTWVzc2FnZXM7CiAgICAgICAgICB0aGlzLnNob3J0TWVzc2FnZSA9IHNob3J0TWVzc2FnZTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL3JlZ2V4LmpzCiAgZnVuY3Rpb24gZXhlY1R5cGVkKHJlZ2V4LCBzdHJpbmcpIHsKICAgIGNvbnN0IG1hdGNoID0gcmVnZXguZXhlYyhzdHJpbmcpOwogICAgcmV0dXJuIG1hdGNoPy5ncm91cHM7CiAgfQogIHZhciBieXRlc1JlZ2V4LCBpbnRlZ2VyUmVnZXgsIGlzVHVwbGVSZWdleDsKICB2YXIgaW5pdF9yZWdleCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9yZWdleC5qcyIoKSB7CiAgICAgIGJ5dGVzUmVnZXggPSAvXmJ5dGVzKFsxLTldfDFbMC05XXwyWzAtOV18M1swLTJdKT8kLzsKICAgICAgaW50ZWdlclJlZ2V4ID0gL151P2ludCg4fDE2fDI0fDMyfDQwfDQ4fDU2fDY0fDcyfDgwfDg4fDk2fDEwNHwxMTJ8MTIwfDEyOHwxMzZ8MTQ0fDE1MnwxNjB8MTY4fDE3NnwxODR8MTkyfDIwMHwyMDh8MjE2fDIyNHwyMzJ8MjQwfDI0OHwyNTYpPyQvOwogICAgICBpc1R1cGxlUmVnZXggPSAvXlwoLis/XCkuKj8kLzsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZm9ybWF0QWJpUGFyYW1ldGVyLmpzCiAgZnVuY3Rpb24gZm9ybWF0QWJpUGFyYW1ldGVyKGFiaVBhcmFtZXRlcikgewogICAgbGV0IHR5cGUgPSBhYmlQYXJhbWV0ZXIudHlwZTsKICAgIGlmICh0dXBsZVJlZ2V4LnRlc3QoYWJpUGFyYW1ldGVyLnR5cGUpICYmICJjb21wb25lbnRzIiBpbiBhYmlQYXJhbWV0ZXIpIHsKICAgICAgdHlwZSA9ICIoIjsKICAgICAgY29uc3QgbGVuZ3RoID0gYWJpUGFyYW1ldGVyLmNvbXBvbmVudHMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gYWJpUGFyYW1ldGVyLmNvbXBvbmVudHNbaV07CiAgICAgICAgdHlwZSArPSBmb3JtYXRBYmlQYXJhbWV0ZXIoY29tcG9uZW50KTsKICAgICAgICBpZiAoaSA8IGxlbmd0aCAtIDEpCiAgICAgICAgICB0eXBlICs9ICIsICI7CiAgICAgIH0KICAgICAgY29uc3QgcmVzdWx0ID0gZXhlY1R5cGVkKHR1cGxlUmVnZXgsIGFiaVBhcmFtZXRlci50eXBlKTsKICAgICAgdHlwZSArPSBgKSR7cmVzdWx0Py5hcnJheSA/PyAiIn1gOwogICAgICByZXR1cm4gZm9ybWF0QWJpUGFyYW1ldGVyKHsKICAgICAgICAuLi5hYmlQYXJhbWV0ZXIsCiAgICAgICAgdHlwZQogICAgICB9KTsKICAgIH0KICAgIGlmICgiaW5kZXhlZCIgaW4gYWJpUGFyYW1ldGVyICYmIGFiaVBhcmFtZXRlci5pbmRleGVkKQogICAgICB0eXBlID0gYCR7dHlwZX0gaW5kZXhlZGA7CiAgICBpZiAoYWJpUGFyYW1ldGVyLm5hbWUpCiAgICAgIHJldHVybiBgJHt0eXBlfSAke2FiaVBhcmFtZXRlci5uYW1lfWA7CiAgICByZXR1cm4gdHlwZTsKICB9CiAgdmFyIHR1cGxlUmVnZXg7CiAgdmFyIGluaXRfZm9ybWF0QWJpUGFyYW1ldGVyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Zvcm1hdEFiaVBhcmFtZXRlci5qcyIoKSB7CiAgICAgIGluaXRfcmVnZXgoKTsKICAgICAgdHVwbGVSZWdleCA9IC9edHVwbGUoPzxhcnJheT4oXFsoXGQqKVxdKSopJC87CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Zvcm1hdEFiaVBhcmFtZXRlcnMuanMKICBmdW5jdGlvbiBmb3JtYXRBYmlQYXJhbWV0ZXJzKGFiaVBhcmFtZXRlcnMpIHsKICAgIGxldCBwYXJhbXMgPSAiIjsKICAgIGNvbnN0IGxlbmd0aCA9IGFiaVBhcmFtZXRlcnMubGVuZ3RoOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhYmlQYXJhbWV0ZXIgPSBhYmlQYXJhbWV0ZXJzW2ldOwogICAgICBwYXJhbXMgKz0gZm9ybWF0QWJpUGFyYW1ldGVyKGFiaVBhcmFtZXRlcik7CiAgICAgIGlmIChpICE9PSBsZW5ndGggLSAxKQogICAgICAgIHBhcmFtcyArPSAiLCAiOwogICAgfQogICAgcmV0dXJuIHBhcmFtczsKICB9CiAgdmFyIGluaXRfZm9ybWF0QWJpUGFyYW1ldGVycyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9mb3JtYXRBYmlQYXJhbWV0ZXJzLmpzIigpIHsKICAgICAgaW5pdF9mb3JtYXRBYmlQYXJhbWV0ZXIoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZm9ybWF0QWJpSXRlbS5qcwogIGZ1bmN0aW9uIGZvcm1hdEFiaUl0ZW0oYWJpSXRlbSkgewogICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImZ1bmN0aW9uIikKICAgICAgcmV0dXJuIGBmdW5jdGlvbiAke2FiaUl0ZW0ubmFtZX0oJHtmb3JtYXRBYmlQYXJhbWV0ZXJzKGFiaUl0ZW0uaW5wdXRzKX0pJHthYmlJdGVtLnN0YXRlTXV0YWJpbGl0eSAmJiBhYmlJdGVtLnN0YXRlTXV0YWJpbGl0eSAhPT0gIm5vbnBheWFibGUiID8gYCAke2FiaUl0ZW0uc3RhdGVNdXRhYmlsaXR5fWAgOiAiIn0ke2FiaUl0ZW0ub3V0cHV0cy5sZW5ndGggPyBgIHJldHVybnMgKCR7Zm9ybWF0QWJpUGFyYW1ldGVycyhhYmlJdGVtLm91dHB1dHMpfSlgIDogIiJ9YDsKICAgIGlmIChhYmlJdGVtLnR5cGUgPT09ICJldmVudCIpCiAgICAgIHJldHVybiBgZXZlbnQgJHthYmlJdGVtLm5hbWV9KCR7Zm9ybWF0QWJpUGFyYW1ldGVycyhhYmlJdGVtLmlucHV0cyl9KWA7CiAgICBpZiAoYWJpSXRlbS50eXBlID09PSAiZXJyb3IiKQogICAgICByZXR1cm4gYGVycm9yICR7YWJpSXRlbS5uYW1lfSgke2Zvcm1hdEFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMpfSlgOwogICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImNvbnN0cnVjdG9yIikKICAgICAgcmV0dXJuIGBjb25zdHJ1Y3Rvcigke2Zvcm1hdEFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMpfSkke2FiaUl0ZW0uc3RhdGVNdXRhYmlsaXR5ID09PSAicGF5YWJsZSIgPyAiIHBheWFibGUiIDogIiJ9YDsKICAgIGlmIChhYmlJdGVtLnR5cGUgPT09ICJmYWxsYmFjayIpCiAgICAgIHJldHVybiAiZmFsbGJhY2soKSI7CiAgICByZXR1cm4gInJlY2VpdmUoKSBleHRlcm5hbCBwYXlhYmxlIjsKICB9CiAgdmFyIGluaXRfZm9ybWF0QWJpSXRlbSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9mb3JtYXRBYmlJdGVtLmpzIigpIHsKICAgICAgaW5pdF9mb3JtYXRBYmlQYXJhbWV0ZXJzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvc2lnbmF0dXJlcy5qcwogIGZ1bmN0aW9uIGlzRXJyb3JTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gZXJyb3JTaWduYXR1cmVSZWdleC50ZXN0KHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGV4ZWNFcnJvclNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBleGVjVHlwZWQoZXJyb3JTaWduYXR1cmVSZWdleCwgc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gaXNFdmVudFNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBldmVudFNpZ25hdHVyZVJlZ2V4LnRlc3Qoc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gZXhlY0V2ZW50U2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIGV4ZWNUeXBlZChldmVudFNpZ25hdHVyZVJlZ2V4LCBzaWduYXR1cmUpOwogIH0KICBmdW5jdGlvbiBpc0Z1bmN0aW9uU2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uU2lnbmF0dXJlUmVnZXgudGVzdChzaWduYXR1cmUpOwogIH0KICBmdW5jdGlvbiBleGVjRnVuY3Rpb25TaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gZXhlY1R5cGVkKGZ1bmN0aW9uU2lnbmF0dXJlUmVnZXgsIHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGlzU3RydWN0U2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIHN0cnVjdFNpZ25hdHVyZVJlZ2V4LnRlc3Qoc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gZXhlY1N0cnVjdFNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBleGVjVHlwZWQoc3RydWN0U2lnbmF0dXJlUmVnZXgsIHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGlzQ29uc3RydWN0b3JTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gY29uc3RydWN0b3JTaWduYXR1cmVSZWdleC50ZXN0KHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGV4ZWNDb25zdHJ1Y3RvclNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBleGVjVHlwZWQoY29uc3RydWN0b3JTaWduYXR1cmVSZWdleCwgc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gaXNGYWxsYmFja1NpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBmYWxsYmFja1NpZ25hdHVyZVJlZ2V4LnRlc3Qoc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gaXNSZWNlaXZlU2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIHJlY2VpdmVTaWduYXR1cmVSZWdleC50ZXN0KHNpZ25hdHVyZSk7CiAgfQogIHZhciBlcnJvclNpZ25hdHVyZVJlZ2V4LCBldmVudFNpZ25hdHVyZVJlZ2V4LCBmdW5jdGlvblNpZ25hdHVyZVJlZ2V4LCBzdHJ1Y3RTaWduYXR1cmVSZWdleCwgY29uc3RydWN0b3JTaWduYXR1cmVSZWdleCwgZmFsbGJhY2tTaWduYXR1cmVSZWdleCwgcmVjZWl2ZVNpZ25hdHVyZVJlZ2V4LCBtb2RpZmllcnMsIGV2ZW50TW9kaWZpZXJzLCBmdW5jdGlvbk1vZGlmaWVyczsKICB2YXIgaW5pdF9zaWduYXR1cmVzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvc2lnbmF0dXJlcy5qcyIoKSB7CiAgICAgIGluaXRfcmVnZXgoKTsKICAgICAgZXJyb3JTaWduYXR1cmVSZWdleCA9IC9eZXJyb3IgKD88bmFtZT5bYS16QS1aJF9dW2EtekEtWjAtOSRfXSopXCgoPzxwYXJhbWV0ZXJzPi4qPylcKSQvOwogICAgICBldmVudFNpZ25hdHVyZVJlZ2V4ID0gL15ldmVudCAoPzxuYW1lPlthLXpBLVokX11bYS16QS1aMC05JF9dKilcKCg/PHBhcmFtZXRlcnM+Lio/KVwpJC87CiAgICAgIGZ1bmN0aW9uU2lnbmF0dXJlUmVnZXggPSAvXmZ1bmN0aW9uICg/PG5hbWU+W2EtekEtWiRfXVthLXpBLVowLTkkX10qKVwoKD88cGFyYW1ldGVycz4uKj8pXCkoPzogKD88c2NvcGU+ZXh0ZXJuYWx8cHVibGljezF9KSk/KD86ICg/PHN0YXRlTXV0YWJpbGl0eT5wdXJlfHZpZXd8bm9ucGF5YWJsZXxwYXlhYmxlezF9KSk/KD86IHJldHVybnNccz9cKCg/PHJldHVybnM+Lio/KVwpKT8kLzsKICAgICAgc3RydWN0U2lnbmF0dXJlUmVnZXggPSAvXnN0cnVjdCAoPzxuYW1lPlthLXpBLVokX11bYS16QS1aMC05JF9dKikgXHsoPzxwcm9wZXJ0aWVzPi4qPylcfSQvOwogICAgICBjb25zdHJ1Y3RvclNpZ25hdHVyZVJlZ2V4ID0gL15jb25zdHJ1Y3RvclwoKD88cGFyYW1ldGVycz4uKj8pXCkoPzpccyg/PHN0YXRlTXV0YWJpbGl0eT5wYXlhYmxlezF9KSk/JC87CiAgICAgIGZhbGxiYWNrU2lnbmF0dXJlUmVnZXggPSAvXmZhbGxiYWNrXChcKSBleHRlcm5hbCg/OlxzKD88c3RhdGVNdXRhYmlsaXR5PnBheWFibGV7MX0pKT8kLzsKICAgICAgcmVjZWl2ZVNpZ25hdHVyZVJlZ2V4ID0gL15yZWNlaXZlXChcKSBleHRlcm5hbCBwYXlhYmxlJC87CiAgICAgIG1vZGlmaWVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsKICAgICAgICAibWVtb3J5IiwKICAgICAgICAiaW5kZXhlZCIsCiAgICAgICAgInN0b3JhZ2UiLAogICAgICAgICJjYWxsZGF0YSIKICAgICAgXSk7CiAgICAgIGV2ZW50TW9kaWZpZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoWyJpbmRleGVkIl0pOwogICAgICBmdW5jdGlvbk1vZGlmaWVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsKICAgICAgICAiY2FsbGRhdGEiLAogICAgICAgICJtZW1vcnkiLAogICAgICAgICJzdG9yYWdlIgogICAgICBdKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL2FiaUl0ZW0uanMKICB2YXIgSW52YWxpZEFiaUl0ZW1FcnJvciwgVW5rbm93blR5cGVFcnJvciwgVW5rbm93blNvbGlkaXR5VHlwZUVycm9yOwogIHZhciBpbml0X2FiaUl0ZW0gPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL2FiaUl0ZW0uanMiKCkgewogICAgICBpbml0X2Vycm9ycygpOwogICAgICBJbnZhbGlkQWJpSXRlbUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgc2lnbmF0dXJlIH0pIHsKICAgICAgICAgIHN1cGVyKCJGYWlsZWQgdG8gcGFyc2UgQUJJIGl0ZW0uIiwgewogICAgICAgICAgICBkZXRhaWxzOiBgcGFyc2VBYmlJdGVtKCR7SlNPTi5zdHJpbmdpZnkoc2lnbmF0dXJlLCBudWxsLCAyKX0pYCwKICAgICAgICAgICAgZG9jc1BhdGg6ICIvYXBpL2h1bWFuI3BhcnNlYWJpaXRlbS0xIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZEFiaUl0ZW1FcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgVW5rbm93blR5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHR5cGUgfSkgewogICAgICAgICAgc3VwZXIoIlVua25vd24gdHlwZS4iLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBUeXBlICIke3R5cGV9IiBpcyBub3QgYSB2YWxpZCBBQkkgdHlwZS4gUGVyaGFwcyB5b3UgZm9yZ290IHRvIGluY2x1ZGUgYSBzdHJ1Y3Qgc2lnbmF0dXJlP2AKICAgICAgICAgICAgXQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiVW5rbm93blR5cGVFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgVW5rbm93blNvbGlkaXR5VHlwZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcigiVW5rbm93biB0eXBlLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIEFCSSB0eXBlLmBdCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJVbmtub3duU29saWRpdHlUeXBlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9hYmlQYXJhbWV0ZXIuanMKICB2YXIgSW52YWxpZEFiaVBhcmFtZXRlckVycm9yLCBJbnZhbGlkQWJpUGFyYW1ldGVyc0Vycm9yLCBJbnZhbGlkUGFyYW1ldGVyRXJyb3IsIFNvbGlkaXR5UHJvdGVjdGVkS2V5d29yZEVycm9yLCBJbnZhbGlkTW9kaWZpZXJFcnJvciwgSW52YWxpZEZ1bmN0aW9uTW9kaWZpZXJFcnJvciwgSW52YWxpZEFiaVR5cGVQYXJhbWV0ZXJFcnJvcjsKICB2YXIgaW5pdF9hYmlQYXJhbWV0ZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL2FiaVBhcmFtZXRlci5qcyIoKSB7CiAgICAgIGluaXRfZXJyb3JzKCk7CiAgICAgIEludmFsaWRBYmlQYXJhbWV0ZXJFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHBhcmFtIH0pIHsKICAgICAgICAgIHN1cGVyKCJGYWlsZWQgdG8gcGFyc2UgQUJJIHBhcmFtZXRlci4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IGBwYXJzZUFiaVBhcmFtZXRlcigke0pTT04uc3RyaW5naWZ5KHBhcmFtLCBudWxsLCAyKX0pYCwKICAgICAgICAgICAgZG9jc1BhdGg6ICIvYXBpL2h1bWFuI3BhcnNlYWJpcGFyYW1ldGVyLTEiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJJbnZhbGlkQWJpUGFyYW1ldGVyRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbXMgfSkgewogICAgICAgICAgc3VwZXIoIkZhaWxlZCB0byBwYXJzZSBBQkkgcGFyYW1ldGVycy4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IGBwYXJzZUFiaVBhcmFtZXRlcnMoJHtKU09OLnN0cmluZ2lmeShwYXJhbXMsIG51bGwsIDIpfSlgLAogICAgICAgICAgICBkb2NzUGF0aDogIi9hcGkvaHVtYW4jcGFyc2VhYmlwYXJhbWV0ZXJzLTEiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJJbnZhbGlkQWJpUGFyYW1ldGVyc0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkUGFyYW1ldGVyRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSB9KSB7CiAgICAgICAgICBzdXBlcigiSW52YWxpZCBBQkkgcGFyYW1ldGVyLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogcGFyYW0KICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJuYW1lIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogIkludmFsaWRQYXJhbWV0ZXJFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU29saWRpdHlQcm90ZWN0ZWRLZXl3b3JkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSwgbmFtZSB9KSB7CiAgICAgICAgICBzdXBlcigiSW52YWxpZCBBQkkgcGFyYW1ldGVyLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogcGFyYW0sCiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGAiJHtuYW1lfSIgaXMgYSBwcm90ZWN0ZWQgU29saWRpdHkga2V5d29yZC4gTW9yZSBpbmZvOiBodHRwczovL2RvY3Muc29saWRpdHlsYW5nLm9yZy9lbi9sYXRlc3QvY2hlYXRzaGVldC5odG1sYAogICAgICAgICAgICBdCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJTb2xpZGl0eVByb3RlY3RlZEtleXdvcmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgSW52YWxpZE1vZGlmaWVyRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSwgdHlwZSwgbW9kaWZpZXIgfSkgewogICAgICAgICAgc3VwZXIoIkludmFsaWQgQUJJIHBhcmFtZXRlci4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IHBhcmFtLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgTW9kaWZpZXIgIiR7bW9kaWZpZXJ9IiBub3QgYWxsb3dlZCR7dHlwZSA/IGAgaW4gIiR7dHlwZX0iIHR5cGVgIDogIiJ9LmAKICAgICAgICAgICAgXQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZE1vZGlmaWVyRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSwgdHlwZSwgbW9kaWZpZXIgfSkgewogICAgICAgICAgc3VwZXIoIkludmFsaWQgQUJJIHBhcmFtZXRlci4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IHBhcmFtLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgTW9kaWZpZXIgIiR7bW9kaWZpZXJ9IiBub3QgYWxsb3dlZCR7dHlwZSA/IGAgaW4gIiR7dHlwZX0iIHR5cGVgIDogIiJ9LmAsCiAgICAgICAgICAgICAgYERhdGEgbG9jYXRpb24gY2FuIG9ubHkgYmUgc3BlY2lmaWVkIGZvciBhcnJheSwgc3RydWN0LCBvciBtYXBwaW5nIHR5cGVzLCBidXQgIiR7bW9kaWZpZXJ9IiB3YXMgZ2l2ZW4uYAogICAgICAgICAgICBdCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJJbnZhbGlkRnVuY3Rpb25Nb2RpZmllckVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQWJpVHlwZVBhcmFtZXRlckVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYWJpUGFyYW1ldGVyIH0pIHsKICAgICAgICAgIHN1cGVyKCJJbnZhbGlkIEFCSSBwYXJhbWV0ZXIuIiwgewogICAgICAgICAgICBkZXRhaWxzOiBKU09OLnN0cmluZ2lmeShhYmlQYXJhbWV0ZXIsIG51bGwsIDIpLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsiQUJJIHBhcmFtZXRlciB0eXBlIGlzIGludmFsaWQuIl0KICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJuYW1lIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogIkludmFsaWRBYmlUeXBlUGFyYW1ldGVyRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zaWduYXR1cmUuanMKICB2YXIgSW52YWxpZFNpZ25hdHVyZUVycm9yLCBVbmtub3duU2lnbmF0dXJlRXJyb3IsIEludmFsaWRTdHJ1Y3RTaWduYXR1cmVFcnJvcjsKICB2YXIgaW5pdF9zaWduYXR1cmUgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL3NpZ25hdHVyZS5qcyIoKSB7CiAgICAgIGluaXRfZXJyb3JzKCk7CiAgICAgIEludmFsaWRTaWduYXR1cmVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHNpZ25hdHVyZSwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihgSW52YWxpZCAke3R5cGV9IHNpZ25hdHVyZS5gLCB7CiAgICAgICAgICAgIGRldGFpbHM6IHNpZ25hdHVyZQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZFNpZ25hdHVyZUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBVbmtub3duU2lnbmF0dXJlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBzaWduYXR1cmUgfSkgewogICAgICAgICAgc3VwZXIoIlVua25vd24gc2lnbmF0dXJlLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogc2lnbmF0dXJlCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJVbmtub3duU2lnbmF0dXJlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRTdHJ1Y3RTaWduYXR1cmVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHNpZ25hdHVyZSB9KSB7CiAgICAgICAgICBzdXBlcigiSW52YWxpZCBzdHJ1Y3Qgc2lnbmF0dXJlLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogc2lnbmF0dXJlLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsiTm8gcHJvcGVydGllcyBleGlzdC4iXQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZFN0cnVjdFNpZ25hdHVyZUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9lcnJvcnMvc3RydWN0LmpzCiAgdmFyIENpcmN1bGFyUmVmZXJlbmNlRXJyb3I7CiAgdmFyIGluaXRfc3RydWN0ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zdHJ1Y3QuanMiKCkgewogICAgICBpbml0X2Vycm9ycygpOwogICAgICBDaXJjdWxhclJlZmVyZW5jZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYFN0cnVjdCAiJHt0eXBlfSIgaXMgYSBjaXJjdWxhciByZWZlcmVuY2UuYF0KICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJuYW1lIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogIkNpcmN1bGFyUmVmZXJlbmNlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zcGxpdFBhcmFtZXRlcnMuanMKICB2YXIgSW52YWxpZFBhcmVudGhlc2lzRXJyb3I7CiAgdmFyIGluaXRfc3BsaXRQYXJhbWV0ZXJzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zcGxpdFBhcmFtZXRlcnMuanMiKCkgewogICAgICBpbml0X2Vycm9ycygpOwogICAgICBJbnZhbGlkUGFyZW50aGVzaXNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGN1cnJlbnQsIGRlcHRoIH0pIHsKICAgICAgICAgIHN1cGVyKCJVbmJhbGFuY2VkIHBhcmVudGhlc2VzLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgYCIke2N1cnJlbnQudHJpbSgpfSIgaGFzIHRvbyBtYW55ICR7ZGVwdGggPiAwID8gIm9wZW5pbmciIDogImNsb3NpbmcifSBwYXJlbnRoZXNlcy5gCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIGRldGFpbHM6IGBEZXB0aCAiJHtkZXB0aH0iYAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZFBhcmVudGhlc2lzRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvY2FjaGUuanMKICBmdW5jdGlvbiBnZXRQYXJhbWV0ZXJDYWNoZUtleShwYXJhbSwgdHlwZSkgewogICAgaWYgKHR5cGUpCiAgICAgIHJldHVybiBgJHt0eXBlfToke3BhcmFtfWA7CiAgICByZXR1cm4gcGFyYW07CiAgfQogIHZhciBwYXJhbWV0ZXJDYWNoZTsKICB2YXIgaW5pdF9jYWNoZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL2NhY2hlLmpzIigpIHsKICAgICAgcGFyYW1ldGVyQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbCiAgICAgICAgLy8gVW5uYW1lZAogICAgICAgIFsiYWRkcmVzcyIsIHsgdHlwZTogImFkZHJlc3MiIH1dLAogICAgICAgIFsiYm9vbCIsIHsgdHlwZTogImJvb2wiIH1dLAogICAgICAgIFsiYnl0ZXMiLCB7IHR5cGU6ICJieXRlcyIgfV0sCiAgICAgICAgWyJieXRlczMyIiwgeyB0eXBlOiAiYnl0ZXMzMiIgfV0sCiAgICAgICAgWyJpbnQiLCB7IHR5cGU6ICJpbnQyNTYiIH1dLAogICAgICAgIFsiaW50MjU2IiwgeyB0eXBlOiAiaW50MjU2IiB9XSwKICAgICAgICBbInN0cmluZyIsIHsgdHlwZTogInN0cmluZyIgfV0sCiAgICAgICAgWyJ1aW50IiwgeyB0eXBlOiAidWludDI1NiIgfV0sCiAgICAgICAgWyJ1aW50OCIsIHsgdHlwZTogInVpbnQ4IiB9XSwKICAgICAgICBbInVpbnQxNiIsIHsgdHlwZTogInVpbnQxNiIgfV0sCiAgICAgICAgWyJ1aW50MjQiLCB7IHR5cGU6ICJ1aW50MjQiIH1dLAogICAgICAgIFsidWludDMyIiwgeyB0eXBlOiAidWludDMyIiB9XSwKICAgICAgICBbInVpbnQ2NCIsIHsgdHlwZTogInVpbnQ2NCIgfV0sCiAgICAgICAgWyJ1aW50OTYiLCB7IHR5cGU6ICJ1aW50OTYiIH1dLAogICAgICAgIFsidWludDExMiIsIHsgdHlwZTogInVpbnQxMTIiIH1dLAogICAgICAgIFsidWludDE2MCIsIHsgdHlwZTogInVpbnQxNjAiIH1dLAogICAgICAgIFsidWludDE5MiIsIHsgdHlwZTogInVpbnQxOTIiIH1dLAogICAgICAgIFsidWludDI1NiIsIHsgdHlwZTogInVpbnQyNTYiIH1dLAogICAgICAgIC8vIE5hbWVkCiAgICAgICAgWyJhZGRyZXNzIG93bmVyIiwgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJvd25lciIgfV0sCiAgICAgICAgWyJhZGRyZXNzIHRvIiwgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJ0byIgfV0sCiAgICAgICAgWyJib29sIGFwcHJvdmVkIiwgeyB0eXBlOiAiYm9vbCIsIG5hbWU6ICJhcHByb3ZlZCIgfV0sCiAgICAgICAgWyJieXRlcyBfZGF0YSIsIHsgdHlwZTogImJ5dGVzIiwgbmFtZTogIl9kYXRhIiB9XSwKICAgICAgICBbImJ5dGVzIGRhdGEiLCB7IHR5cGU6ICJieXRlcyIsIG5hbWU6ICJkYXRhIiB9XSwKICAgICAgICBbImJ5dGVzIHNpZ25hdHVyZSIsIHsgdHlwZTogImJ5dGVzIiwgbmFtZTogInNpZ25hdHVyZSIgfV0sCiAgICAgICAgWyJieXRlczMyIGhhc2giLCB7IHR5cGU6ICJieXRlczMyIiwgbmFtZTogImhhc2giIH1dLAogICAgICAgIFsiYnl0ZXMzMiByIiwgeyB0eXBlOiAiYnl0ZXMzMiIsIG5hbWU6ICJyIiB9XSwKICAgICAgICBbImJ5dGVzMzIgcm9vdCIsIHsgdHlwZTogImJ5dGVzMzIiLCBuYW1lOiAicm9vdCIgfV0sCiAgICAgICAgWyJieXRlczMyIHMiLCB7IHR5cGU6ICJieXRlczMyIiwgbmFtZTogInMiIH1dLAogICAgICAgIFsic3RyaW5nIG5hbWUiLCB7IHR5cGU6ICJzdHJpbmciLCBuYW1lOiAibmFtZSIgfV0sCiAgICAgICAgWyJzdHJpbmcgc3ltYm9sIiwgeyB0eXBlOiAic3RyaW5nIiwgbmFtZTogInN5bWJvbCIgfV0sCiAgICAgICAgWyJzdHJpbmcgdG9rZW5VUkkiLCB7IHR5cGU6ICJzdHJpbmciLCBuYW1lOiAidG9rZW5VUkkiIH1dLAogICAgICAgIFsidWludCB0b2tlbklkIiwgeyB0eXBlOiAidWludDI1NiIsIG5hbWU6ICJ0b2tlbklkIiB9XSwKICAgICAgICBbInVpbnQ4IHYiLCB7IHR5cGU6ICJ1aW50OCIsIG5hbWU6ICJ2IiB9XSwKICAgICAgICBbInVpbnQyNTYgYmFsYW5jZSIsIHsgdHlwZTogInVpbnQyNTYiLCBuYW1lOiAiYmFsYW5jZSIgfV0sCiAgICAgICAgWyJ1aW50MjU2IHRva2VuSWQiLCB7IHR5cGU6ICJ1aW50MjU2IiwgbmFtZTogInRva2VuSWQiIH1dLAogICAgICAgIFsidWludDI1NiB2YWx1ZSIsIHsgdHlwZTogInVpbnQyNTYiLCBuYW1lOiAidmFsdWUiIH1dLAogICAgICAgIC8vIEluZGV4ZWQKICAgICAgICBbCiAgICAgICAgICAiZXZlbnQ6YWRkcmVzcyBpbmRleGVkIGZyb20iLAogICAgICAgICAgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJmcm9tIiwgaW5kZXhlZDogdHJ1ZSB9CiAgICAgICAgXSwKICAgICAgICBbImV2ZW50OmFkZHJlc3MgaW5kZXhlZCB0byIsIHsgdHlwZTogImFkZHJlc3MiLCBuYW1lOiAidG8iLCBpbmRleGVkOiB0cnVlIH1dLAogICAgICAgIFsKICAgICAgICAgICJldmVudDp1aW50IGluZGV4ZWQgdG9rZW5JZCIsCiAgICAgICAgICB7IHR5cGU6ICJ1aW50MjU2IiwgbmFtZTogInRva2VuSWQiLCBpbmRleGVkOiB0cnVlIH0KICAgICAgICBdLAogICAgICAgIFsKICAgICAgICAgICJldmVudDp1aW50MjU2IGluZGV4ZWQgdG9rZW5JZCIsCiAgICAgICAgICB7IHR5cGU6ICJ1aW50MjU2IiwgbmFtZTogInRva2VuSWQiLCBpbmRleGVkOiB0cnVlIH0KICAgICAgICBdCiAgICAgIF0pOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL3V0aWxzLmpzCiAgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmUoc2lnbmF0dXJlLCBzdHJ1Y3RzID0ge30pIHsKICAgIGlmIChpc0Z1bmN0aW9uU2lnbmF0dXJlKHNpZ25hdHVyZSkpIHsKICAgICAgY29uc3QgbWF0Y2ggPSBleGVjRnVuY3Rpb25TaWduYXR1cmUoc2lnbmF0dXJlKTsKICAgICAgaWYgKCFtYXRjaCkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFNpZ25hdHVyZUVycm9yKHsgc2lnbmF0dXJlLCB0eXBlOiAiZnVuY3Rpb24iIH0pOwogICAgICBjb25zdCBpbnB1dFBhcmFtcyA9IHNwbGl0UGFyYW1ldGVycyhtYXRjaC5wYXJhbWV0ZXJzKTsKICAgICAgY29uc3QgaW5wdXRzID0gW107CiAgICAgIGNvbnN0IGlucHV0TGVuZ3RoID0gaW5wdXRQYXJhbXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHsKICAgICAgICBpbnB1dHMucHVzaChwYXJzZUFiaVBhcmFtZXRlcihpbnB1dFBhcmFtc1tpXSwgewogICAgICAgICAgbW9kaWZpZXJzOiBmdW5jdGlvbk1vZGlmaWVycywKICAgICAgICAgIHN0cnVjdHMsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSkpOwogICAgICB9CiAgICAgIGNvbnN0IG91dHB1dHMgPSBbXTsKICAgICAgaWYgKG1hdGNoLnJldHVybnMpIHsKICAgICAgICBjb25zdCBvdXRwdXRQYXJhbXMgPSBzcGxpdFBhcmFtZXRlcnMobWF0Y2gucmV0dXJucyk7CiAgICAgICAgY29uc3Qgb3V0cHV0TGVuZ3RoID0gb3V0cHV0UGFyYW1zLmxlbmd0aDsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dExlbmd0aDsgaSsrKSB7CiAgICAgICAgICBvdXRwdXRzLnB1c2gocGFyc2VBYmlQYXJhbWV0ZXIob3V0cHV0UGFyYW1zW2ldLCB7CiAgICAgICAgICAgIG1vZGlmaWVyczogZnVuY3Rpb25Nb2RpZmllcnMsCiAgICAgICAgICAgIHN0cnVjdHMsCiAgICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsKICAgICAgICBuYW1lOiBtYXRjaC5uYW1lLAogICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiBtYXRjaC5zdGF0ZU11dGFiaWxpdHkgPz8gIm5vbnBheWFibGUiLAogICAgICAgIGlucHV0cywKICAgICAgICBvdXRwdXRzCiAgICAgIH07CiAgICB9CiAgICBpZiAoaXNFdmVudFNpZ25hdHVyZShzaWduYXR1cmUpKSB7CiAgICAgIGNvbnN0IG1hdGNoID0gZXhlY0V2ZW50U2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICAgIGlmICghbWF0Y2gpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSwgdHlwZTogImV2ZW50IiB9KTsKICAgICAgY29uc3QgcGFyYW1zID0gc3BsaXRQYXJhbWV0ZXJzKG1hdGNoLnBhcmFtZXRlcnMpOwogICAgICBjb25zdCBhYmlQYXJhbWV0ZXJzID0gW107CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBhYmlQYXJhbWV0ZXJzLnB1c2gocGFyc2VBYmlQYXJhbWV0ZXIocGFyYW1zW2ldLCB7CiAgICAgICAgICBtb2RpZmllcnM6IGV2ZW50TW9kaWZpZXJzLAogICAgICAgICAgc3RydWN0cywKICAgICAgICAgIHR5cGU6ICJldmVudCIKICAgICAgICB9KSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgbmFtZTogbWF0Y2gubmFtZSwgdHlwZTogImV2ZW50IiwgaW5wdXRzOiBhYmlQYXJhbWV0ZXJzIH07CiAgICB9CiAgICBpZiAoaXNFcnJvclNpZ25hdHVyZShzaWduYXR1cmUpKSB7CiAgICAgIGNvbnN0IG1hdGNoID0gZXhlY0Vycm9yU2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICAgIGlmICghbWF0Y2gpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSwgdHlwZTogImVycm9yIiB9KTsKICAgICAgY29uc3QgcGFyYW1zID0gc3BsaXRQYXJhbWV0ZXJzKG1hdGNoLnBhcmFtZXRlcnMpOwogICAgICBjb25zdCBhYmlQYXJhbWV0ZXJzID0gW107CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBhYmlQYXJhbWV0ZXJzLnB1c2gocGFyc2VBYmlQYXJhbWV0ZXIocGFyYW1zW2ldLCB7IHN0cnVjdHMsIHR5cGU6ICJlcnJvciIgfSkpOwogICAgICB9CiAgICAgIHJldHVybiB7IG5hbWU6IG1hdGNoLm5hbWUsIHR5cGU6ICJlcnJvciIsIGlucHV0czogYWJpUGFyYW1ldGVycyB9OwogICAgfQogICAgaWYgKGlzQ29uc3RydWN0b3JTaWduYXR1cmUoc2lnbmF0dXJlKSkgewogICAgICBjb25zdCBtYXRjaCA9IGV4ZWNDb25zdHJ1Y3RvclNpZ25hdHVyZShzaWduYXR1cmUpOwogICAgICBpZiAoIW1hdGNoKQogICAgICAgIHRocm93IG5ldyBJbnZhbGlkU2lnbmF0dXJlRXJyb3IoeyBzaWduYXR1cmUsIHR5cGU6ICJjb25zdHJ1Y3RvciIgfSk7CiAgICAgIGNvbnN0IHBhcmFtcyA9IHNwbGl0UGFyYW1ldGVycyhtYXRjaC5wYXJhbWV0ZXJzKTsKICAgICAgY29uc3QgYWJpUGFyYW1ldGVycyA9IFtdOwogICAgICBjb25zdCBsZW5ndGggPSBwYXJhbXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgYWJpUGFyYW1ldGVycy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtc1tpXSwgeyBzdHJ1Y3RzLCB0eXBlOiAiY29uc3RydWN0b3IiIH0pKTsKICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6ICJjb25zdHJ1Y3RvciIsCiAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiBtYXRjaC5zdGF0ZU11dGFiaWxpdHkgPz8gIm5vbnBheWFibGUiLAogICAgICAgIGlucHV0czogYWJpUGFyYW1ldGVycwogICAgICB9OwogICAgfQogICAgaWYgKGlzRmFsbGJhY2tTaWduYXR1cmUoc2lnbmF0dXJlKSkKICAgICAgcmV0dXJuIHsgdHlwZTogImZhbGxiYWNrIiB9OwogICAgaWYgKGlzUmVjZWl2ZVNpZ25hdHVyZShzaWduYXR1cmUpKQogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6ICJyZWNlaXZlIiwKICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJwYXlhYmxlIgogICAgICB9OwogICAgdGhyb3cgbmV3IFVua25vd25TaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSB9KTsKICB9CiAgZnVuY3Rpb24gcGFyc2VBYmlQYXJhbWV0ZXIocGFyYW0sIG9wdGlvbnMpIHsKICAgIGNvbnN0IHBhcmFtZXRlckNhY2hlS2V5ID0gZ2V0UGFyYW1ldGVyQ2FjaGVLZXkocGFyYW0sIG9wdGlvbnM/LnR5cGUpOwogICAgaWYgKHBhcmFtZXRlckNhY2hlLmhhcyhwYXJhbWV0ZXJDYWNoZUtleSkpCiAgICAgIHJldHVybiBwYXJhbWV0ZXJDYWNoZS5nZXQocGFyYW1ldGVyQ2FjaGVLZXkpOwogICAgY29uc3QgaXNUdXBsZSA9IGlzVHVwbGVSZWdleC50ZXN0KHBhcmFtKTsKICAgIGNvbnN0IG1hdGNoID0gZXhlY1R5cGVkKGlzVHVwbGUgPyBhYmlQYXJhbWV0ZXJXaXRoVHVwbGVSZWdleCA6IGFiaVBhcmFtZXRlcldpdGhvdXRUdXBsZVJlZ2V4LCBwYXJhbSk7CiAgICBpZiAoIW1hdGNoKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlckVycm9yKHsgcGFyYW0gfSk7CiAgICBpZiAobWF0Y2gubmFtZSAmJiBpc1NvbGlkaXR5S2V5d29yZChtYXRjaC5uYW1lKSkKICAgICAgdGhyb3cgbmV3IFNvbGlkaXR5UHJvdGVjdGVkS2V5d29yZEVycm9yKHsgcGFyYW0sIG5hbWU6IG1hdGNoLm5hbWUgfSk7CiAgICBjb25zdCBuYW1lID0gbWF0Y2gubmFtZSA/IHsgbmFtZTogbWF0Y2gubmFtZSB9IDoge307CiAgICBjb25zdCBpbmRleGVkID0gbWF0Y2gubW9kaWZpZXIgPT09ICJpbmRleGVkIiA/IHsgaW5kZXhlZDogdHJ1ZSB9IDoge307CiAgICBjb25zdCBzdHJ1Y3RzID0gb3B0aW9ucz8uc3RydWN0cyA/PyB7fTsKICAgIGxldCB0eXBlOwogICAgbGV0IGNvbXBvbmVudHMgPSB7fTsKICAgIGlmIChpc1R1cGxlKSB7CiAgICAgIHR5cGUgPSAidHVwbGUiOwogICAgICBjb25zdCBwYXJhbXMgPSBzcGxpdFBhcmFtZXRlcnMobWF0Y2gudHlwZSk7CiAgICAgIGNvbnN0IGNvbXBvbmVudHNfID0gW107CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBjb21wb25lbnRzXy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtc1tpXSwgeyBzdHJ1Y3RzIH0pKTsKICAgICAgfQogICAgICBjb21wb25lbnRzID0geyBjb21wb25lbnRzOiBjb21wb25lbnRzXyB9OwogICAgfSBlbHNlIGlmIChtYXRjaC50eXBlIGluIHN0cnVjdHMpIHsKICAgICAgdHlwZSA9ICJ0dXBsZSI7CiAgICAgIGNvbXBvbmVudHMgPSB7IGNvbXBvbmVudHM6IHN0cnVjdHNbbWF0Y2gudHlwZV0gfTsKICAgIH0gZWxzZSBpZiAoZHluYW1pY0ludGVnZXJSZWdleC50ZXN0KG1hdGNoLnR5cGUpKSB7CiAgICAgIHR5cGUgPSBgJHttYXRjaC50eXBlfTI1NmA7CiAgICB9IGVsc2UgewogICAgICB0eXBlID0gbWF0Y2gudHlwZTsKICAgICAgaWYgKCEob3B0aW9ucz8udHlwZSA9PT0gInN0cnVjdCIpICYmICFpc1NvbGlkaXR5VHlwZSh0eXBlKSkKICAgICAgICB0aHJvdyBuZXcgVW5rbm93blNvbGlkaXR5VHlwZUVycm9yKHsgdHlwZSB9KTsKICAgIH0KICAgIGlmIChtYXRjaC5tb2RpZmllcikgewogICAgICBpZiAoIW9wdGlvbnM/Lm1vZGlmaWVycz8uaGFzPy4obWF0Y2gubW9kaWZpZXIpKQogICAgICAgIHRocm93IG5ldyBJbnZhbGlkTW9kaWZpZXJFcnJvcih7CiAgICAgICAgICBwYXJhbSwKICAgICAgICAgIHR5cGU6IG9wdGlvbnM/LnR5cGUsCiAgICAgICAgICBtb2RpZmllcjogbWF0Y2gubW9kaWZpZXIKICAgICAgICB9KTsKICAgICAgaWYgKGZ1bmN0aW9uTW9kaWZpZXJzLmhhcyhtYXRjaC5tb2RpZmllcikgJiYgIWlzVmFsaWREYXRhTG9jYXRpb24odHlwZSwgISFtYXRjaC5hcnJheSkpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3IoewogICAgICAgICAgcGFyYW0sCiAgICAgICAgICB0eXBlOiBvcHRpb25zPy50eXBlLAogICAgICAgICAgbW9kaWZpZXI6IG1hdGNoLm1vZGlmaWVyCiAgICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBhYmlQYXJhbWV0ZXIgPSB7CiAgICAgIHR5cGU6IGAke3R5cGV9JHttYXRjaC5hcnJheSA/PyAiIn1gLAogICAgICAuLi5uYW1lLAogICAgICAuLi5pbmRleGVkLAogICAgICAuLi5jb21wb25lbnRzCiAgICB9OwogICAgcGFyYW1ldGVyQ2FjaGUuc2V0KHBhcmFtZXRlckNhY2hlS2V5LCBhYmlQYXJhbWV0ZXIpOwogICAgcmV0dXJuIGFiaVBhcmFtZXRlcjsKICB9CiAgZnVuY3Rpb24gc3BsaXRQYXJhbWV0ZXJzKHBhcmFtcywgcmVzdWx0ID0gW10sIGN1cnJlbnQgPSAiIiwgZGVwdGggPSAwKSB7CiAgICBjb25zdCBsZW5ndGggPSBwYXJhbXMudHJpbSgpLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgY2hhciA9IHBhcmFtc1tpXTsKICAgICAgY29uc3QgdGFpbCA9IHBhcmFtcy5zbGljZShpICsgMSk7CiAgICAgIHN3aXRjaCAoY2hhcikgewogICAgICAgIGNhc2UgIiwiOgogICAgICAgICAgcmV0dXJuIGRlcHRoID09PSAwID8gc3BsaXRQYXJhbWV0ZXJzKHRhaWwsIFsuLi5yZXN1bHQsIGN1cnJlbnQudHJpbSgpXSkgOiBzcGxpdFBhcmFtZXRlcnModGFpbCwgcmVzdWx0LCBgJHtjdXJyZW50fSR7Y2hhcn1gLCBkZXB0aCk7CiAgICAgICAgY2FzZSAiKCI6CiAgICAgICAgICByZXR1cm4gc3BsaXRQYXJhbWV0ZXJzKHRhaWwsIHJlc3VsdCwgYCR7Y3VycmVudH0ke2NoYXJ9YCwgZGVwdGggKyAxKTsKICAgICAgICBjYXNlICIpIjoKICAgICAgICAgIHJldHVybiBzcGxpdFBhcmFtZXRlcnModGFpbCwgcmVzdWx0LCBgJHtjdXJyZW50fSR7Y2hhcn1gLCBkZXB0aCAtIDEpOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gc3BsaXRQYXJhbWV0ZXJzKHRhaWwsIHJlc3VsdCwgYCR7Y3VycmVudH0ke2NoYXJ9YCwgZGVwdGgpOwogICAgICB9CiAgICB9CiAgICBpZiAoY3VycmVudCA9PT0gIiIpCiAgICAgIHJldHVybiByZXN1bHQ7CiAgICBpZiAoZGVwdGggIT09IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyZW50aGVzaXNFcnJvcih7IGN1cnJlbnQsIGRlcHRoIH0pOwogICAgcmVzdWx0LnB1c2goY3VycmVudC50cmltKCkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gaXNTb2xpZGl0eVR5cGUodHlwZSkgewogICAgcmV0dXJuIHR5cGUgPT09ICJhZGRyZXNzIiB8fCB0eXBlID09PSAiYm9vbCIgfHwgdHlwZSA9PT0gImZ1bmN0aW9uIiB8fCB0eXBlID09PSAic3RyaW5nIiB8fCBieXRlc1JlZ2V4LnRlc3QodHlwZSkgfHwgaW50ZWdlclJlZ2V4LnRlc3QodHlwZSk7CiAgfQogIGZ1bmN0aW9uIGlzU29saWRpdHlLZXl3b3JkKG5hbWUpIHsKICAgIHJldHVybiBuYW1lID09PSAiYWRkcmVzcyIgfHwgbmFtZSA9PT0gImJvb2wiIHx8IG5hbWUgPT09ICJmdW5jdGlvbiIgfHwgbmFtZSA9PT0gInN0cmluZyIgfHwgbmFtZSA9PT0gInR1cGxlIiB8fCBieXRlc1JlZ2V4LnRlc3QobmFtZSkgfHwgaW50ZWdlclJlZ2V4LnRlc3QobmFtZSkgfHwgcHJvdGVjdGVkS2V5d29yZHNSZWdleC50ZXN0KG5hbWUpOwogIH0KICBmdW5jdGlvbiBpc1ZhbGlkRGF0YUxvY2F0aW9uKHR5cGUsIGlzQXJyYXkpIHsKICAgIHJldHVybiBpc0FycmF5IHx8IHR5cGUgPT09ICJieXRlcyIgfHwgdHlwZSA9PT0gInN0cmluZyIgfHwgdHlwZSA9PT0gInR1cGxlIjsKICB9CiAgdmFyIGFiaVBhcmFtZXRlcldpdGhvdXRUdXBsZVJlZ2V4LCBhYmlQYXJhbWV0ZXJXaXRoVHVwbGVSZWdleCwgZHluYW1pY0ludGVnZXJSZWdleCwgcHJvdGVjdGVkS2V5d29yZHNSZWdleDsKICB2YXIgaW5pdF91dGlscyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL3V0aWxzLmpzIigpIHsKICAgICAgaW5pdF9yZWdleCgpOwogICAgICBpbml0X2FiaUl0ZW0oKTsKICAgICAgaW5pdF9hYmlQYXJhbWV0ZXIoKTsKICAgICAgaW5pdF9zaWduYXR1cmUoKTsKICAgICAgaW5pdF9zcGxpdFBhcmFtZXRlcnMoKTsKICAgICAgaW5pdF9jYWNoZSgpOwogICAgICBpbml0X3NpZ25hdHVyZXMoKTsKICAgICAgYWJpUGFyYW1ldGVyV2l0aG91dFR1cGxlUmVnZXggPSAvXig/PHR5cGU+W2EtekEtWiRfXVthLXpBLVowLTkkX10qKSg/PGFycmF5Pig/OlxbXGQqP1xdKSs/KT8oPzpccyg/PG1vZGlmaWVyPmNhbGxkYXRhfGluZGV4ZWR8bWVtb3J5fHN0b3JhZ2V7MX0pKT8oPzpccyg/PG5hbWU+W2EtekEtWiRfXVthLXpBLVowLTkkX10qKSk/JC87CiAgICAgIGFiaVBhcmFtZXRlcldpdGhUdXBsZVJlZ2V4ID0gL15cKCg/PHR5cGU+Lis/KVwpKD88YXJyYXk+KD86XFtcZCo/XF0pKz8pPyg/OlxzKD88bW9kaWZpZXI+Y2FsbGRhdGF8aW5kZXhlZHxtZW1vcnl8c3RvcmFnZXsxfSkpPyg/OlxzKD88bmFtZT5bYS16QS1aJF9dW2EtekEtWjAtOSRfXSopKT8kLzsKICAgICAgZHluYW1pY0ludGVnZXJSZWdleCA9IC9edT9pbnQkLzsKICAgICAgcHJvdGVjdGVkS2V5d29yZHNSZWdleCA9IC9eKD86YWZ0ZXJ8YWxpYXN8YW5vbnltb3VzfGFwcGx5fGF1dG98Ynl0ZXxjYWxsZGF0YXxjYXNlfGNhdGNofGNvbnN0YW50fGNvcHlvZnxkZWZhdWx0fGRlZmluZWR8ZXJyb3J8ZXZlbnR8ZXh0ZXJuYWx8ZmFsc2V8ZmluYWx8ZnVuY3Rpb258aW1tdXRhYmxlfGltcGxlbWVudHN8aW58aW5kZXhlZHxpbmxpbmV8aW50ZXJuYWx8bGV0fG1hcHBpbmd8bWF0Y2h8bWVtb3J5fG11dGFibGV8bnVsbHxvZnxvdmVycmlkZXxwYXJ0aWFsfHByaXZhdGV8cHJvbWlzZXxwdWJsaWN8cHVyZXxyZWZlcmVuY2V8cmVsb2NhdGFibGV8cmV0dXJufHJldHVybnN8c2l6ZW9mfHN0YXRpY3xzdG9yYWdlfHN0cnVjdHxzdXBlcnxzdXBwb3J0c3xzd2l0Y2h8dGhpc3x0cnVlfHRyeXx0eXBlZGVmfHR5cGVvZnx2YXJ8dmlld3x2aXJ0dWFsKSQvOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL3N0cnVjdHMuanMKICBmdW5jdGlvbiBwYXJzZVN0cnVjdHMoc2lnbmF0dXJlcykgewogICAgY29uc3Qgc2hhbGxvd1N0cnVjdHMgPSB7fTsKICAgIGNvbnN0IHNpZ25hdHVyZXNMZW5ndGggPSBzaWduYXR1cmVzLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2lnbmF0dXJlc0xlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25hdHVyZXNbaV07CiAgICAgIGlmICghaXNTdHJ1Y3RTaWduYXR1cmUoc2lnbmF0dXJlKSkKICAgICAgICBjb250aW51ZTsKICAgICAgY29uc3QgbWF0Y2ggPSBleGVjU3RydWN0U2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICAgIGlmICghbWF0Y2gpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSwgdHlwZTogInN0cnVjdCIgfSk7CiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBtYXRjaC5wcm9wZXJ0aWVzLnNwbGl0KCI7Iik7CiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBbXTsKICAgICAgY29uc3QgcHJvcGVydGllc0xlbmd0aCA9IHByb3BlcnRpZXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBrID0gMDsgayA8IHByb3BlcnRpZXNMZW5ndGg7IGsrKykgewogICAgICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1trXTsKICAgICAgICBjb25zdCB0cmltbWVkID0gcHJvcGVydHkudHJpbSgpOwogICAgICAgIGlmICghdHJpbW1lZCkKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGNvbnN0IGFiaVBhcmFtZXRlciA9IHBhcnNlQWJpUGFyYW1ldGVyKHRyaW1tZWQsIHsKICAgICAgICAgIHR5cGU6ICJzdHJ1Y3QiCiAgICAgICAgfSk7CiAgICAgICAgY29tcG9uZW50cy5wdXNoKGFiaVBhcmFtZXRlcik7CiAgICAgIH0KICAgICAgaWYgKCFjb21wb25lbnRzLmxlbmd0aCkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFN0cnVjdFNpZ25hdHVyZUVycm9yKHsgc2lnbmF0dXJlIH0pOwogICAgICBzaGFsbG93U3RydWN0c1ttYXRjaC5uYW1lXSA9IGNvbXBvbmVudHM7CiAgICB9CiAgICBjb25zdCByZXNvbHZlZFN0cnVjdHMgPSB7fTsKICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhzaGFsbG93U3RydWN0cyk7CiAgICBjb25zdCBlbnRyaWVzTGVuZ3RoID0gZW50cmllcy5sZW5ndGg7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXNMZW5ndGg7IGkrKykgewogICAgICBjb25zdCBbbmFtZSwgcGFyYW1ldGVyc10gPSBlbnRyaWVzW2ldOwogICAgICByZXNvbHZlZFN0cnVjdHNbbmFtZV0gPSByZXNvbHZlU3RydWN0cyhwYXJhbWV0ZXJzLCBzaGFsbG93U3RydWN0cyk7CiAgICB9CiAgICByZXR1cm4gcmVzb2x2ZWRTdHJ1Y3RzOwogIH0KICBmdW5jdGlvbiByZXNvbHZlU3RydWN0cyhhYmlQYXJhbWV0ZXJzLCBzdHJ1Y3RzLCBhbmNlc3RvcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSB7CiAgICBjb25zdCBjb21wb25lbnRzID0gW107CiAgICBjb25zdCBsZW5ndGggPSBhYmlQYXJhbWV0ZXJzLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgYWJpUGFyYW1ldGVyID0gYWJpUGFyYW1ldGVyc1tpXTsKICAgICAgY29uc3QgaXNUdXBsZSA9IGlzVHVwbGVSZWdleC50ZXN0KGFiaVBhcmFtZXRlci50eXBlKTsKICAgICAgaWYgKGlzVHVwbGUpCiAgICAgICAgY29tcG9uZW50cy5wdXNoKGFiaVBhcmFtZXRlcik7CiAgICAgIGVsc2UgewogICAgICAgIGNvbnN0IG1hdGNoID0gZXhlY1R5cGVkKHR5cGVXaXRob3V0VHVwbGVSZWdleCwgYWJpUGFyYW1ldGVyLnR5cGUpOwogICAgICAgIGlmICghbWF0Y2g/LnR5cGUpCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFiaVR5cGVQYXJhbWV0ZXJFcnJvcih7IGFiaVBhcmFtZXRlciB9KTsKICAgICAgICBjb25zdCB7IGFycmF5LCB0eXBlIH0gPSBtYXRjaDsKICAgICAgICBpZiAodHlwZSBpbiBzdHJ1Y3RzKSB7CiAgICAgICAgICBpZiAoYW5jZXN0b3JzLmhhcyh0eXBlKSkKICAgICAgICAgICAgdGhyb3cgbmV3IENpcmN1bGFyUmVmZXJlbmNlRXJyb3IoeyB0eXBlIH0pOwogICAgICAgICAgY29tcG9uZW50cy5wdXNoKHsKICAgICAgICAgICAgLi4uYWJpUGFyYW1ldGVyLAogICAgICAgICAgICB0eXBlOiBgdHVwbGUke2FycmF5ID8/ICIifWAsCiAgICAgICAgICAgIGNvbXBvbmVudHM6IHJlc29sdmVTdHJ1Y3RzKHN0cnVjdHNbdHlwZV0gPz8gW10sIHN0cnVjdHMsIC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsuLi5hbmNlc3RvcnMsIHR5cGVdKSkKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoaXNTb2xpZGl0eVR5cGUodHlwZSkpCiAgICAgICAgICAgIGNvbXBvbmVudHMucHVzaChhYmlQYXJhbWV0ZXIpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICB0aHJvdyBuZXcgVW5rbm93blR5cGVFcnJvcih7IHR5cGUgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gY29tcG9uZW50czsKICB9CiAgdmFyIHR5cGVXaXRob3V0VHVwbGVSZWdleDsKICB2YXIgaW5pdF9zdHJ1Y3RzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvc3RydWN0cy5qcyIoKSB7CiAgICAgIGluaXRfcmVnZXgoKTsKICAgICAgaW5pdF9hYmlJdGVtKCk7CiAgICAgIGluaXRfYWJpUGFyYW1ldGVyKCk7CiAgICAgIGluaXRfc2lnbmF0dXJlKCk7CiAgICAgIGluaXRfc3RydWN0KCk7CiAgICAgIGluaXRfc2lnbmF0dXJlcygpOwogICAgICBpbml0X3V0aWxzKCk7CiAgICAgIHR5cGVXaXRob3V0VHVwbGVSZWdleCA9IC9eKD88dHlwZT5bYS16QS1aJF9dW2EtekEtWjAtOSRfXSopKD88YXJyYXk+KD86XFtcZCo/XF0pKz8pPyQvOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9wYXJzZUFiaS5qcwogIGZ1bmN0aW9uIHBhcnNlQWJpKHNpZ25hdHVyZXMpIHsKICAgIGNvbnN0IHN0cnVjdHMgPSBwYXJzZVN0cnVjdHMoc2lnbmF0dXJlcyk7CiAgICBjb25zdCBhYmkyID0gW107CiAgICBjb25zdCBsZW5ndGggPSBzaWduYXR1cmVzLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmF0dXJlc1tpXTsKICAgICAgaWYgKGlzU3RydWN0U2lnbmF0dXJlKHNpZ25hdHVyZSkpCiAgICAgICAgY29udGludWU7CiAgICAgIGFiaTIucHVzaChwYXJzZVNpZ25hdHVyZShzaWduYXR1cmUsIHN0cnVjdHMpKTsKICAgIH0KICAgIHJldHVybiBhYmkyOwogIH0KICB2YXIgaW5pdF9wYXJzZUFiaSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9wYXJzZUFiaS5qcyIoKSB7CiAgICAgIGluaXRfc2lnbmF0dXJlcygpOwogICAgICBpbml0X3N0cnVjdHMoKTsKICAgICAgaW5pdF91dGlscygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9wYXJzZUFiaUl0ZW0uanMKICBmdW5jdGlvbiBwYXJzZUFiaUl0ZW0oc2lnbmF0dXJlKSB7CiAgICBsZXQgYWJpSXRlbTsKICAgIGlmICh0eXBlb2Ygc2lnbmF0dXJlID09PSAic3RyaW5nIikKICAgICAgYWJpSXRlbSA9IHBhcnNlU2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc3RydWN0cyA9IHBhcnNlU3RydWN0cyhzaWduYXR1cmUpOwogICAgICBjb25zdCBsZW5ndGggPSBzaWduYXR1cmUubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3Qgc2lnbmF0dXJlXyA9IHNpZ25hdHVyZVtpXTsKICAgICAgICBpZiAoaXNTdHJ1Y3RTaWduYXR1cmUoc2lnbmF0dXJlXykpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBhYmlJdGVtID0gcGFyc2VTaWduYXR1cmUoc2lnbmF0dXJlXywgc3RydWN0cyk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmICghYWJpSXRlbSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBYmlJdGVtRXJyb3IoeyBzaWduYXR1cmUgfSk7CiAgICByZXR1cm4gYWJpSXRlbTsKICB9CiAgdmFyIGluaXRfcGFyc2VBYmlJdGVtID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpSXRlbS5qcyIoKSB7CiAgICAgIGluaXRfYWJpSXRlbSgpOwogICAgICBpbml0X3NpZ25hdHVyZXMoKTsKICAgICAgaW5pdF9zdHJ1Y3RzKCk7CiAgICAgIGluaXRfdXRpbHMoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvcGFyc2VBYmlQYXJhbWV0ZXIuanMKICBmdW5jdGlvbiBwYXJzZUFiaVBhcmFtZXRlcjIocGFyYW0pIHsKICAgIGxldCBhYmlQYXJhbWV0ZXI7CiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAic3RyaW5nIikKICAgICAgYWJpUGFyYW1ldGVyID0gcGFyc2VBYmlQYXJhbWV0ZXIocGFyYW0sIHsKICAgICAgICBtb2RpZmllcnMKICAgICAgfSk7CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc3RydWN0cyA9IHBhcnNlU3RydWN0cyhwYXJhbSk7CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtLmxlbmd0aDsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHBhcmFtW2ldOwogICAgICAgIGlmIChpc1N0cnVjdFNpZ25hdHVyZShzaWduYXR1cmUpKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgYWJpUGFyYW1ldGVyID0gcGFyc2VBYmlQYXJhbWV0ZXIoc2lnbmF0dXJlLCB7IG1vZGlmaWVycywgc3RydWN0cyB9KTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKCFhYmlQYXJhbWV0ZXIpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWJpUGFyYW1ldGVyRXJyb3IoeyBwYXJhbSB9KTsKICAgIHJldHVybiBhYmlQYXJhbWV0ZXI7CiAgfQogIHZhciBpbml0X3BhcnNlQWJpUGFyYW1ldGVyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpUGFyYW1ldGVyLmpzIigpIHsKICAgICAgaW5pdF9hYmlQYXJhbWV0ZXIoKTsKICAgICAgaW5pdF9zaWduYXR1cmVzKCk7CiAgICAgIGluaXRfc3RydWN0cygpOwogICAgICBpbml0X3V0aWxzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpUGFyYW1ldGVycy5qcwogIGZ1bmN0aW9uIHBhcnNlQWJpUGFyYW1ldGVycyhwYXJhbXMpIHsKICAgIGNvbnN0IGFiaVBhcmFtZXRlcnMgPSBbXTsKICAgIGlmICh0eXBlb2YgcGFyYW1zID09PSAic3RyaW5nIikgewogICAgICBjb25zdCBwYXJhbWV0ZXJzID0gc3BsaXRQYXJhbWV0ZXJzKHBhcmFtcyk7CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtZXRlcnMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgYWJpUGFyYW1ldGVycy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtZXRlcnNbaV0sIHsgbW9kaWZpZXJzIH0pKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgc3RydWN0cyA9IHBhcnNlU3RydWN0cyhwYXJhbXMpOwogICAgICBjb25zdCBsZW5ndGggPSBwYXJhbXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gcGFyYW1zW2ldOwogICAgICAgIGlmIChpc1N0cnVjdFNpZ25hdHVyZShzaWduYXR1cmUpKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHNwbGl0UGFyYW1ldGVycyhzaWduYXR1cmUpOwogICAgICAgIGNvbnN0IGxlbmd0aDIgPSBwYXJhbWV0ZXJzLmxlbmd0aDsKICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxlbmd0aDI7IGsrKykgewogICAgICAgICAgYWJpUGFyYW1ldGVycy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtZXRlcnNba10sIHsgbW9kaWZpZXJzLCBzdHJ1Y3RzIH0pKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChhYmlQYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMCkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3IoeyBwYXJhbXMgfSk7CiAgICByZXR1cm4gYWJpUGFyYW1ldGVyczsKICB9CiAgdmFyIGluaXRfcGFyc2VBYmlQYXJhbWV0ZXJzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpUGFyYW1ldGVycy5qcyIoKSB7CiAgICAgIGluaXRfYWJpUGFyYW1ldGVyKCk7CiAgICAgIGluaXRfc2lnbmF0dXJlcygpOwogICAgICBpbml0X3N0cnVjdHMoKTsKICAgICAgaW5pdF91dGlscygpOwogICAgICBpbml0X3V0aWxzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2V4cG9ydHMvaW5kZXguanMKICB2YXIgaW5pdF9leHBvcnRzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2V4cG9ydHMvaW5kZXguanMiKCkgewogICAgICBpbml0X2Zvcm1hdEFiaUl0ZW0oKTsKICAgICAgaW5pdF9wYXJzZUFiaSgpOwogICAgICBpbml0X3BhcnNlQWJpSXRlbSgpOwogICAgICBpbml0X3BhcnNlQWJpUGFyYW1ldGVyKCk7CiAgICAgIGluaXRfcGFyc2VBYmlQYXJhbWV0ZXJzKCk7CiAgICAgIGluaXRfYWJpSXRlbSgpOwogICAgICBpbml0X2FiaVBhcmFtZXRlcigpOwogICAgICBpbml0X3NpZ25hdHVyZSgpOwogICAgICBpbml0X3NwbGl0UGFyYW1ldGVycygpOwogICAgICBpbml0X3N0cnVjdCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9mb3JtYXRBYmlJdGVtLmpzCiAgZnVuY3Rpb24gZm9ybWF0QWJpSXRlbTIoYWJpSXRlbSwgeyBpbmNsdWRlTmFtZSA9IGZhbHNlIH0gPSB7fSkgewogICAgaWYgKGFiaUl0ZW0udHlwZSAhPT0gImZ1bmN0aW9uIiAmJiBhYmlJdGVtLnR5cGUgIT09ICJldmVudCIgJiYgYWJpSXRlbS50eXBlICE9PSAiZXJyb3IiKQogICAgICB0aHJvdyBuZXcgSW52YWxpZERlZmluaXRpb25UeXBlRXJyb3IoYWJpSXRlbS50eXBlKTsKICAgIHJldHVybiBgJHthYmlJdGVtLm5hbWV9KCR7Zm9ybWF0QWJpUGFyYW1zKGFiaUl0ZW0uaW5wdXRzLCB7IGluY2x1ZGVOYW1lIH0pfSlgOwogIH0KICBmdW5jdGlvbiBmb3JtYXRBYmlQYXJhbXMocGFyYW1zLCB7IGluY2x1ZGVOYW1lID0gZmFsc2UgfSA9IHt9KSB7CiAgICBpZiAoIXBhcmFtcykKICAgICAgcmV0dXJuICIiOwogICAgcmV0dXJuIHBhcmFtcy5tYXAoKHBhcmFtKSA9PiBmb3JtYXRBYmlQYXJhbShwYXJhbSwgeyBpbmNsdWRlTmFtZSB9KSkuam9pbihpbmNsdWRlTmFtZSA/ICIsICIgOiAiLCIpOwogIH0KICBmdW5jdGlvbiBmb3JtYXRBYmlQYXJhbShwYXJhbSwgeyBpbmNsdWRlTmFtZSB9KSB7CiAgICBpZiAocGFyYW0udHlwZS5zdGFydHNXaXRoKCJ0dXBsZSIpKSB7CiAgICAgIHJldHVybiBgKCR7Zm9ybWF0QWJpUGFyYW1zKHBhcmFtLmNvbXBvbmVudHMsIHsgaW5jbHVkZU5hbWUgfSl9KSR7cGFyYW0udHlwZS5zbGljZSgidHVwbGUiLmxlbmd0aCl9YDsKICAgIH0KICAgIHJldHVybiBwYXJhbS50eXBlICsgKGluY2x1ZGVOYW1lICYmIHBhcmFtLm5hbWUgPyBgICR7cGFyYW0ubmFtZX1gIDogIiIpOwogIH0KICB2YXIgaW5pdF9mb3JtYXRBYmlJdGVtMiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9mb3JtYXRBYmlJdGVtLmpzIigpIHsKICAgICAgaW5pdF9hYmkoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL2lzSGV4LmpzCiAgZnVuY3Rpb24gaXNIZXgodmFsdWUsIHsgc3RyaWN0ID0gdHJ1ZSB9ID0ge30pIHsKICAgIGlmICghdmFsdWUpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJzdHJpbmciKQogICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc3RyaWN0ID8gL14weFswLTlhLWZBLUZdKiQvLnRlc3QodmFsdWUpIDogdmFsdWUuc3RhcnRzV2l0aCgiMHgiKTsKICB9CiAgdmFyIGluaXRfaXNIZXggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL2lzSGV4LmpzIigpIHsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL3NpemUuanMKICBmdW5jdGlvbiBzaXplKHZhbHVlKSB7CiAgICBpZiAoaXNIZXgodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgcmV0dXJuIE1hdGguY2VpbCgodmFsdWUubGVuZ3RoIC0gMikgLyAyKTsKICAgIHJldHVybiB2YWx1ZS5sZW5ndGg7CiAgfQogIHZhciBpbml0X3NpemUgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL3NpemUuanMiKCkgewogICAgICBpbml0X2lzSGV4KCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL3ZlcnNpb24uanMKICB2YXIgdmVyc2lvbjI7CiAgdmFyIGluaXRfdmVyc2lvbjIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvdmVyc2lvbi5qcyIoKSB7CiAgICAgIHZlcnNpb24yID0gIjIuMTkuOCI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2Jhc2UuanMKICBmdW5jdGlvbiBzZXRFcnJvckNvbmZpZyhjb25maWcpIHsKICAgIGVycm9yQ29uZmlnID0gY29uZmlnOwogIH0KICBmdW5jdGlvbiB3YWxrKGVyciwgZm4pIHsKICAgIGlmIChmbj8uKGVycikpCiAgICAgIHJldHVybiBlcnI7CiAgICBpZiAoZXJyICYmIHR5cGVvZiBlcnIgPT09ICJvYmplY3QiICYmICJjYXVzZSIgaW4gZXJyKQogICAgICByZXR1cm4gd2FsayhlcnIuY2F1c2UsIGZuKTsKICAgIHJldHVybiBmbiA/IG51bGwgOiBlcnI7CiAgfQogIHZhciBlcnJvckNvbmZpZywgQmFzZUVycm9yMjsKICB2YXIgaW5pdF9iYXNlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2Jhc2UuanMiKCkgewogICAgICBpbml0X3ZlcnNpb24yKCk7CiAgICAgIGVycm9yQ29uZmlnID0gewogICAgICAgIGdldERvY3NVcmw6ICh7IGRvY3NCYXNlVXJsLCBkb2NzUGF0aDogZG9jc1BhdGg5ID0gIiIsIGRvY3NTbHVnIH0pID0+IGRvY3NQYXRoOSA/IGAke2RvY3NCYXNlVXJsID8/ICJodHRwczovL3ZpZW0uc2gifSR7ZG9jc1BhdGg5fSR7ZG9jc1NsdWcgPyBgIyR7ZG9jc1NsdWd9YCA6ICIifWAgOiB2b2lkIDAsCiAgICAgICAgdmVyc2lvbjogdmVyc2lvbjIKICAgICAgfTsKICAgICAgQmFzZUVycm9yMiA9IGNsYXNzIF9CYXNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3Ioc2hvcnRNZXNzYWdlLCBhcmdzID0ge30pIHsKICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSAoKCkgPT4gewogICAgICAgICAgICBpZiAoYXJncy5jYXVzZSBpbnN0YW5jZW9mIF9CYXNlRXJyb3IpCiAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2F1c2UuZGV0YWlsczsKICAgICAgICAgICAgaWYgKGFyZ3MuY2F1c2U/Lm1lc3NhZ2UpCiAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2F1c2UubWVzc2FnZTsKICAgICAgICAgICAgcmV0dXJuIGFyZ3MuZGV0YWlsczsKICAgICAgICAgIH0pKCk7CiAgICAgICAgICBjb25zdCBkb2NzUGF0aDkgPSAoKCkgPT4gewogICAgICAgICAgICBpZiAoYXJncy5jYXVzZSBpbnN0YW5jZW9mIF9CYXNlRXJyb3IpCiAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2F1c2UuZG9jc1BhdGggfHwgYXJncy5kb2NzUGF0aDsKICAgICAgICAgICAgcmV0dXJuIGFyZ3MuZG9jc1BhdGg7CiAgICAgICAgICB9KSgpOwogICAgICAgICAgY29uc3QgZG9jc1VybCA9IGVycm9yQ29uZmlnLmdldERvY3NVcmw/Lih7IC4uLmFyZ3MsIGRvY3NQYXRoOiBkb2NzUGF0aDkgfSk7CiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gWwogICAgICAgICAgICBzaG9ydE1lc3NhZ2UgfHwgIkFuIGVycm9yIG9jY3VycmVkLiIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICAuLi5hcmdzLm1ldGFNZXNzYWdlcyA/IFsuLi5hcmdzLm1ldGFNZXNzYWdlcywgIiJdIDogW10sCiAgICAgICAgICAgIC4uLmRvY3NVcmwgPyBbYERvY3M6ICR7ZG9jc1VybH1gXSA6IFtdLAogICAgICAgICAgICAuLi5kZXRhaWxzID8gW2BEZXRhaWxzOiAke2RldGFpbHN9YF0gOiBbXSwKICAgICAgICAgICAgLi4uZXJyb3JDb25maWcudmVyc2lvbiA/IFtgVmVyc2lvbjogJHtlcnJvckNvbmZpZy52ZXJzaW9ufWBdIDogW10KICAgICAgICAgIF0uam9pbigiXG4iKTsKICAgICAgICAgIHN1cGVyKG1lc3NhZ2UsIGFyZ3MuY2F1c2UgPyB7IGNhdXNlOiBhcmdzLmNhdXNlIH0gOiB2b2lkIDApOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkZXRhaWxzIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiZG9jc1BhdGgiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJtZXRhTWVzc2FnZXMiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaG9ydE1lc3NhZ2UiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJ2ZXJzaW9uIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJCYXNlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7CiAgICAgICAgICB0aGlzLmRvY3NQYXRoID0gZG9jc1BhdGg5OwogICAgICAgICAgdGhpcy5tZXRhTWVzc2FnZXMgPSBhcmdzLm1ldGFNZXNzYWdlczsKICAgICAgICAgIHRoaXMubmFtZSA9IGFyZ3MubmFtZSA/PyB0aGlzLm5hbWU7CiAgICAgICAgICB0aGlzLnNob3J0TWVzc2FnZSA9IHNob3J0TWVzc2FnZTsKICAgICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb24yOwogICAgICAgIH0KICAgICAgICB3YWxrKGZuKSB7CiAgICAgICAgICByZXR1cm4gd2Fsayh0aGlzLCBmbik7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hYmkuanMKICB2YXIgQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yLCBBYmlDb25zdHJ1Y3RvclBhcmFtc05vdEZvdW5kRXJyb3IsIEFiaURlY29kaW5nRGF0YVNpemVJbnZhbGlkRXJyb3IsIEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yLCBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IsIEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yLCBBYmlFbmNvZGluZ0J5dGVzU2l6ZU1pc21hdGNoRXJyb3IsIEFiaUVuY29kaW5nTGVuZ3RoTWlzbWF0Y2hFcnJvciwgQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yLCBBYmlFcnJvck5vdEZvdW5kRXJyb3IsIEFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvciwgQWJpRXZlbnRTaWduYXR1cmVFbXB0eVRvcGljc0Vycm9yLCBBYmlFdmVudFNpZ25hdHVyZU5vdEZvdW5kRXJyb3IsIEFiaUV2ZW50Tm90Rm91bmRFcnJvciwgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yLCBBYmlGdW5jdGlvbk91dHB1dHNOb3RGb3VuZEVycm9yLCBBYmlGdW5jdGlvblNpZ25hdHVyZU5vdEZvdW5kRXJyb3IsIEFiaUl0ZW1BbWJpZ3VpdHlFcnJvciwgQnl0ZXNTaXplTWlzbWF0Y2hFcnJvciwgRGVjb2RlTG9nRGF0YU1pc21hdGNoLCBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCwgSW52YWxpZEFiaUVuY29kaW5nVHlwZUVycm9yLCBJbnZhbGlkQWJpRGVjb2RpbmdUeXBlRXJyb3IsIEludmFsaWRBcnJheUVycm9yLCBJbnZhbGlkRGVmaW5pdGlvblR5cGVFcnJvciwgVW5zdXBwb3J0ZWRQYWNrZWRBYmlUeXBlOwogIHZhciBpbml0X2FiaSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hYmkuanMiKCkgewogICAgICBpbml0X2Zvcm1hdEFiaUl0ZW0yKCk7CiAgICAgIGluaXRfc2l6ZSgpOwogICAgICBpbml0X2Jhc2UoKTsKICAgICAgQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDkgfSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICAiQSBjb25zdHJ1Y3RvciB3YXMgbm90IGZvdW5kIG9uIHRoZSBBQkkuIiwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgY29uc3RydWN0b3IgZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlDb25zdHJ1Y3RvclBhcmFtc05vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgICJDb25zdHJ1Y3RvciBhcmd1bWVudHMgd2VyZSBwcm92aWRlZCAoYGFyZ3NgKSwgYnV0IGEgY29uc3RydWN0b3IgcGFyYW1ldGVycyAoYGlucHV0c2ApIHdlcmUgbm90IGZvdW5kIG9uIHRoZSBBQkkuIiwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSwgYW5kIHRoYXQgdGhlIGBpbnB1dHNgIGF0dHJpYnV0ZSBvbiB0aGUgY29uc3RydWN0b3IgZXhpc3RzLiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlEZWNvZGluZ0RhdGFTaXplSW52YWxpZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGRhdGEsIHNpemU6IHNpemUzIH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYERhdGEgc2l6ZSBvZiAke3NpemUzfSBieXRlcyBpcyBpbnZhbGlkLmAsCiAgICAgICAgICAgICJTaXplIG11c3QgYmUgaW4gaW5jcmVtZW50cyBvZiAzMiBieXRlcyAoc2l6ZSAlIDMyID09PSAwKS4iCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYERhdGE6ICR7ZGF0YX0gKCR7c2l6ZTN9IGJ5dGVzKWBdLAogICAgICAgICAgICBuYW1lOiAiQWJpRGVjb2RpbmdEYXRhU2l6ZUludmFsaWRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRGVjb2RpbmdEYXRhU2l6ZVRvb1NtYWxsRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZGF0YSwgcGFyYW1zLCBzaXplOiBzaXplMyB9KSB7CiAgICAgICAgICBzdXBlcihbYERhdGEgc2l6ZSBvZiAke3NpemUzfSBieXRlcyBpcyB0b28gc21hbGwgZm9yIGdpdmVuIHBhcmFtZXRlcnMuYF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgUGFyYW1zOiAoJHtmb3JtYXRBYmlQYXJhbXMocGFyYW1zLCB7IGluY2x1ZGVOYW1lOiB0cnVlIH0pfSlgLAogICAgICAgICAgICAgIGBEYXRhOiAgICR7ZGF0YX0gKCR7c2l6ZTN9IGJ5dGVzKWAKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbmFtZTogIkFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRhdGEiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJwYXJhbXMiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaXplIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKICAgICAgICAgIHRoaXMuc2l6ZSA9IHNpemUzOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRGVjb2RpbmdaZXJvRGF0YUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCdDYW5ub3QgZGVjb2RlIHplcm8gZGF0YSAoIjB4Iikgd2l0aCBBQkkgcGFyYW1ldGVycy4nLCB7CiAgICAgICAgICAgIG5hbWU6ICJBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGV4cGVjdGVkTGVuZ3RoLCBnaXZlbkxlbmd0aCwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBBQkkgZW5jb2RpbmcgYXJyYXkgbGVuZ3RoIG1pc21hdGNoIGZvciB0eXBlICR7dHlwZX0uYCwKICAgICAgICAgICAgYEV4cGVjdGVkIGxlbmd0aDogJHtleHBlY3RlZExlbmd0aH1gLAogICAgICAgICAgICBgR2l2ZW4gbGVuZ3RoOiAke2dpdmVuTGVuZ3RofWAKICAgICAgICAgIF0uam9pbigiXG4iKSwgeyBuYW1lOiAiQWJpRW5jb2RpbmdBcnJheUxlbmd0aE1pc21hdGNoRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRW5jb2RpbmdCeXRlc1NpemVNaXNtYXRjaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGV4cGVjdGVkU2l6ZSwgdmFsdWUgfSkgewogICAgICAgICAgc3VwZXIoYFNpemUgb2YgYnl0ZXMgIiR7dmFsdWV9IiAoYnl0ZXMke3NpemUodmFsdWUpfSkgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgc2l6ZSAoYnl0ZXMke2V4cGVjdGVkU2l6ZX0pLmAsIHsgbmFtZTogIkFiaUVuY29kaW5nQnl0ZXNTaXplTWlzbWF0Y2hFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFbmNvZGluZ0xlbmd0aE1pc21hdGNoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZXhwZWN0ZWRMZW5ndGgsIGdpdmVuTGVuZ3RoIH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgIkFCSSBlbmNvZGluZyBwYXJhbXMvdmFsdWVzIGxlbmd0aCBtaXNtYXRjaC4iLAogICAgICAgICAgICBgRXhwZWN0ZWQgbGVuZ3RoIChwYXJhbXMpOiAke2V4cGVjdGVkTGVuZ3RofWAsCiAgICAgICAgICAgIGBHaXZlbiBsZW5ndGggKHZhbHVlcyk6ICR7Z2l2ZW5MZW5ndGh9YAogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IG5hbWU6ICJBYmlFbmNvZGluZ0xlbmd0aE1pc21hdGNoRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihlcnJvck5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBBcmd1bWVudHMgKFxgYXJnc1xgKSB3ZXJlIHByb3ZpZGVkIHRvICIke2Vycm9yTmFtZX0iLCBidXQgIiR7ZXJyb3JOYW1lfSIgb24gdGhlIEFCSSBkb2VzIG5vdCBjb250YWluIGFueSBwYXJhbWV0ZXJzIChcYGlucHV0c1xgKS5gLAogICAgICAgICAgICAiQ2Fubm90IGVuY29kZSBlcnJvciByZXN1bHQgd2l0aG91dCBrbm93aW5nIHdoYXQgdGhlIHBhcmFtZXRlciB0eXBlcyBhcmUuIiwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgaW5wdXRzIGV4aXN0IG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFcnJvck5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGVycm9yTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRXJyb3IgJHtlcnJvck5hbWUgPyBgIiR7ZXJyb3JOYW1lfSIgYCA6ICIifW5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXJyb3IgZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXJyb3JOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFcnJvclNpZ25hdHVyZU5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHNpZ25hdHVyZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYEVuY29kZWQgZXJyb3Igc2lnbmF0dXJlICIke3NpZ25hdHVyZX0iIG5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXJyb3IgZXhpc3RzIG9uIGl0LiIsCiAgICAgICAgICAgIGBZb3UgY2FuIGxvb2sgdXAgdGhlIGRlY29kZWQgc2lnbmF0dXJlIGhlcmU6IGh0dHBzOi8vb3BlbmNoYWluLnh5ei9zaWduYXR1cmVzP3F1ZXJ5PSR7c2lnbmF0dXJlfS5gCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaWduYXR1cmUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5zaWduYXR1cmUgPSBzaWduYXR1cmU7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFdmVudFNpZ25hdHVyZUVtcHR5VG9waWNzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcigiQ2Fubm90IGV4dHJhY3QgZXZlbnQgc2lnbmF0dXJlIGZyb20gZW1wdHkgdG9waWNzLiIsIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUV2ZW50U2lnbmF0dXJlRW1wdHlUb3BpY3NFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRXZlbnRTaWduYXR1cmVOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihzaWduYXR1cmUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBFbmNvZGVkIGV2ZW50IHNpZ25hdHVyZSAiJHtzaWduYXR1cmV9IiBub3QgZm91bmQgb24gQUJJLmAsCiAgICAgICAgICAgICJNYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBBQkkgYW5kIHRoYXQgdGhlIGV2ZW50IGV4aXN0cyBvbiBpdC4iLAogICAgICAgICAgICBgWW91IGNhbiBsb29rIHVwIHRoZSBzaWduYXR1cmUgaGVyZTogaHR0cHM6Ly9vcGVuY2hhaW4ueHl6L3NpZ25hdHVyZXM/cXVlcnk9JHtzaWduYXR1cmV9LmAKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXZlbnRTaWduYXR1cmVOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFdmVudE5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGV2ZW50TmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRXZlbnQgJHtldmVudE5hbWUgPyBgIiR7ZXZlbnROYW1lfSIgYCA6ICIifW5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXZlbnQgZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXZlbnROb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlGdW5jdGlvbk5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGZ1bmN0aW9uTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRnVuY3Rpb24gJHtmdW5jdGlvbk5hbWUgPyBgIiR7ZnVuY3Rpb25OYW1lfSIgYCA6ICIifW5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZnVuY3Rpb24gZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlGdW5jdGlvbk91dHB1dHNOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihmdW5jdGlvbk5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBGdW5jdGlvbiAiJHtmdW5jdGlvbk5hbWV9IiBkb2VzIG5vdCBjb250YWluIGFueSBcYG91dHB1dHNcYCBvbiBBQkkuYCwKICAgICAgICAgICAgIkNhbm5vdCBkZWNvZGUgZnVuY3Rpb24gcmVzdWx0IHdpdGhvdXQga25vd2luZyB3aGF0IHRoZSBwYXJhbWV0ZXIgdHlwZXMgYXJlLiIsCiAgICAgICAgICAgICJNYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBBQkkgYW5kIHRoYXQgdGhlIGZ1bmN0aW9uIGV4aXN0cyBvbiBpdC4iCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUZ1bmN0aW9uT3V0cHV0c05vdEZvdW5kRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3Ioc2lnbmF0dXJlLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDkgfSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRW5jb2RlZCBmdW5jdGlvbiBzaWduYXR1cmUgIiR7c2lnbmF0dXJlfSIgbm90IGZvdW5kIG9uIEFCSS5gLAogICAgICAgICAgICAiTWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgQUJJIGFuZCB0aGF0IHRoZSBmdW5jdGlvbiBleGlzdHMgb24gaXQuIiwKICAgICAgICAgICAgYFlvdSBjYW4gbG9vayB1cCB0aGUgc2lnbmF0dXJlIGhlcmU6IGh0dHBzOi8vb3BlbmNoYWluLnh5ei9zaWduYXR1cmVzP3F1ZXJ5PSR7c2lnbmF0dXJlfS5gCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpSXRlbUFtYmlndWl0eUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih4LCB5KSB7CiAgICAgICAgICBzdXBlcigiRm91bmQgYW1iaWd1b3VzIHR5cGVzIGluIG92ZXJsb2FkZWQgQUJJIGl0ZW1zLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgYFxgJHt4LnR5cGV9XGAgaW4gXGAke2Zvcm1hdEFiaUl0ZW0yKHguYWJpSXRlbSl9XGAsIGFuZGAsCiAgICAgICAgICAgICAgYFxgJHt5LnR5cGV9XGAgaW4gXGAke2Zvcm1hdEFiaUl0ZW0yKHkuYWJpSXRlbSl9XGBgLAogICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICJUaGVzZSB0eXBlcyBlbmNvZGUgZGlmZmVyZW50bHkgYW5kIGNhbm5vdCBiZSBkaXN0aW5ndWlzaGVkIGF0IHJ1bnRpbWUuIiwKICAgICAgICAgICAgICAiUmVtb3ZlIG9uZSBvZiB0aGUgYW1iaWd1b3VzIGl0ZW1zIGluIHRoZSBBQkkuIgogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQWJpSXRlbUFtYmlndWl0eUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBCeXRlc1NpemVNaXNtYXRjaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGV4cGVjdGVkU2l6ZSwgZ2l2ZW5TaXplIH0pIHsKICAgICAgICAgIHN1cGVyKGBFeHBlY3RlZCBieXRlcyR7ZXhwZWN0ZWRTaXplfSwgZ290IGJ5dGVzJHtnaXZlblNpemV9LmAsIHsKICAgICAgICAgICAgbmFtZTogIkJ5dGVzU2l6ZU1pc21hdGNoRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIERlY29kZUxvZ0RhdGFNaXNtYXRjaCA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBhYmlJdGVtLCBkYXRhLCBwYXJhbXMsIHNpemU6IHNpemUzIH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYERhdGEgc2l6ZSBvZiAke3NpemUzfSBieXRlcyBpcyB0b28gc21hbGwgZm9yIG5vbi1pbmRleGVkIGV2ZW50IHBhcmFtZXRlcnMuYAogICAgICAgICAgXS5qb2luKCJcbiIpLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBQYXJhbXM6ICgke2Zvcm1hdEFiaVBhcmFtcyhwYXJhbXMsIHsgaW5jbHVkZU5hbWU6IHRydWUgfSl9KWAsCiAgICAgICAgICAgICAgYERhdGE6ICAgJHtkYXRhfSAoJHtzaXplM30gYnl0ZXMpYAogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiRGVjb2RlTG9nRGF0YU1pc21hdGNoIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFiaUl0ZW0iLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkYXRhIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAicGFyYW1zIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2l6ZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmFiaUl0ZW0gPSBhYmlJdGVtOwogICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOwogICAgICAgICAgdGhpcy5zaXplID0gc2l6ZTM7CiAgICAgICAgfQogICAgICB9OwogICAgICBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBhYmlJdGVtLCBwYXJhbSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBFeHBlY3RlZCBhIHRvcGljIGZvciBpbmRleGVkIGV2ZW50IHBhcmFtZXRlciR7cGFyYW0ubmFtZSA/IGAgIiR7cGFyYW0ubmFtZX0iYCA6ICIifSBvbiBldmVudCAiJHtmb3JtYXRBYmlJdGVtMihhYmlJdGVtLCB7IGluY2x1ZGVOYW1lOiB0cnVlIH0pfSIuYAogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IG5hbWU6ICJEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCIgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFiaUl0ZW0iLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5hYmlJdGVtID0gYWJpSXRlbTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBYmlFbmNvZGluZ1R5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIGVuY29kaW5nIHR5cGUuYCwKICAgICAgICAgICAgIlBsZWFzZSBwcm92aWRlIGEgdmFsaWQgQUJJIHR5cGUuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIG5hbWU6ICJJbnZhbGlkQWJpRW5jb2RpbmdUeXBlIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBYmlEZWNvZGluZ1R5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIGRlY29kaW5nIHR5cGUuYCwKICAgICAgICAgICAgIlBsZWFzZSBwcm92aWRlIGEgdmFsaWQgQUJJIHR5cGUuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIG5hbWU6ICJJbnZhbGlkQWJpRGVjb2RpbmdUeXBlIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBcnJheUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkgewogICAgICAgICAgc3VwZXIoW2BWYWx1ZSAiJHt2YWx1ZX0iIGlzIG5vdCBhIHZhbGlkIGFycmF5LmBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgbmFtZTogIkludmFsaWRBcnJheUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkRGVmaW5pdGlvblR5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIGRlZmluaXRpb24gdHlwZS5gLAogICAgICAgICAgICAnVmFsaWQgdHlwZXM6ICJmdW5jdGlvbiIsICJldmVudCIsICJlcnJvciInCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsgbmFtZTogIkludmFsaWREZWZpbml0aW9uVHlwZUVycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFVuc3VwcG9ydGVkUGFja2VkQWJpVHlwZSA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSkgewogICAgICAgICAgc3VwZXIoYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHBhY2tlZCBlbmNvZGluZy5gLCB7CiAgICAgICAgICAgIG5hbWU6ICJVbnN1cHBvcnRlZFBhY2tlZEFiaVR5cGUiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2RhdGEuanMKICB2YXIgU2xpY2VPZmZzZXRPdXRPZkJvdW5kc0Vycm9yLCBTaXplRXhjZWVkc1BhZGRpbmdTaXplRXJyb3IsIEludmFsaWRCeXRlc0xlbmd0aEVycm9yOwogIHZhciBpbml0X2RhdGEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvZGF0YS5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgb2Zmc2V0LCBwb3NpdGlvbiwgc2l6ZTogc2l6ZTMgfSkgewogICAgICAgICAgc3VwZXIoYFNsaWNlICR7cG9zaXRpb24gPT09ICJzdGFydCIgPyAic3RhcnRpbmciIDogImVuZGluZyJ9IGF0IG9mZnNldCAiJHtvZmZzZXR9IiBpcyBvdXQtb2YtYm91bmRzIChzaXplOiAke3NpemUzfSkuYCwgeyBuYW1lOiAiU2xpY2VPZmZzZXRPdXRPZkJvdW5kc0Vycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFNpemVFeGNlZWRzUGFkZGluZ1NpemVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBzaXplOiBzaXplMywgdGFyZ2V0U2l6ZSwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihgJHt0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7dHlwZS5zbGljZSgxKS50b0xvd2VyQ2FzZSgpfSBzaXplICgke3NpemUzfSkgZXhjZWVkcyBwYWRkaW5nIHNpemUgKCR7dGFyZ2V0U2l6ZX0pLmAsIHsgbmFtZTogIlNpemVFeGNlZWRzUGFkZGluZ1NpemVFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQnl0ZXNMZW5ndGhFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBzaXplOiBzaXplMywgdGFyZ2V0U2l6ZSwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihgJHt0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7dHlwZS5zbGljZSgxKS50b0xvd2VyQ2FzZSgpfSBpcyBleHBlY3RlZCB0byBiZSAke3RhcmdldFNpemV9ICR7dHlwZX0gbG9uZywgYnV0IGlzICR7c2l6ZTN9ICR7dHlwZX0gbG9uZy5gLCB7IG5hbWU6ICJJbnZhbGlkQnl0ZXNMZW5ndGhFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvcGFkLmpzCiAgZnVuY3Rpb24gcGFkKGhleE9yQnl0ZXMsIHsgZGlyLCBzaXplOiBzaXplMyA9IDMyIH0gPSB7fSkgewogICAgaWYgKHR5cGVvZiBoZXhPckJ5dGVzID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIHBhZEhleChoZXhPckJ5dGVzLCB7IGRpciwgc2l6ZTogc2l6ZTMgfSk7CiAgICByZXR1cm4gcGFkQnl0ZXMoaGV4T3JCeXRlcywgeyBkaXIsIHNpemU6IHNpemUzIH0pOwogIH0KICBmdW5jdGlvbiBwYWRIZXgoaGV4XywgeyBkaXIsIHNpemU6IHNpemUzID0gMzIgfSA9IHt9KSB7CiAgICBpZiAoc2l6ZTMgPT09IG51bGwpCiAgICAgIHJldHVybiBoZXhfOwogICAgY29uc3QgaGV4ID0gaGV4Xy5yZXBsYWNlKCIweCIsICIiKTsKICAgIGlmIChoZXgubGVuZ3RoID4gc2l6ZTMgKiAyKQogICAgICB0aHJvdyBuZXcgU2l6ZUV4Y2VlZHNQYWRkaW5nU2l6ZUVycm9yKHsKICAgICAgICBzaXplOiBNYXRoLmNlaWwoaGV4Lmxlbmd0aCAvIDIpLAogICAgICAgIHRhcmdldFNpemU6IHNpemUzLAogICAgICAgIHR5cGU6ICJoZXgiCiAgICAgIH0pOwogICAgcmV0dXJuIGAweCR7aGV4W2RpciA9PT0gInJpZ2h0IiA/ICJwYWRFbmQiIDogInBhZFN0YXJ0Il0oc2l6ZTMgKiAyLCAiMCIpfWA7CiAgfQogIGZ1bmN0aW9uIHBhZEJ5dGVzKGJ5dGVzMiwgeyBkaXIsIHNpemU6IHNpemUzID0gMzIgfSA9IHt9KSB7CiAgICBpZiAoc2l6ZTMgPT09IG51bGwpCiAgICAgIHJldHVybiBieXRlczI7CiAgICBpZiAoYnl0ZXMyLmxlbmd0aCA+IHNpemUzKQogICAgICB0aHJvdyBuZXcgU2l6ZUV4Y2VlZHNQYWRkaW5nU2l6ZUVycm9yKHsKICAgICAgICBzaXplOiBieXRlczIubGVuZ3RoLAogICAgICAgIHRhcmdldFNpemU6IHNpemUzLAogICAgICAgIHR5cGU6ICJieXRlcyIKICAgICAgfSk7CiAgICBjb25zdCBwYWRkZWRCeXRlcyA9IG5ldyBVaW50OEFycmF5KHNpemUzKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTM7IGkrKykgewogICAgICBjb25zdCBwYWRFbmQgPSBkaXIgPT09ICJyaWdodCI7CiAgICAgIHBhZGRlZEJ5dGVzW3BhZEVuZCA/IGkgOiBzaXplMyAtIGkgLSAxXSA9IGJ5dGVzMltwYWRFbmQgPyBpIDogYnl0ZXMyLmxlbmd0aCAtIGkgLSAxXTsKICAgIH0KICAgIHJldHVybiBwYWRkZWRCeXRlczsKICB9CiAgdmFyIGluaXRfcGFkID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9wYWQuanMiKCkgewogICAgICBpbml0X2RhdGEoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvZW5jb2RpbmcuanMKICB2YXIgSW50ZWdlck91dE9mUmFuZ2VFcnJvciwgSW52YWxpZEJ5dGVzQm9vbGVhbkVycm9yLCBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yLCBJbnZhbGlkSGV4VmFsdWVFcnJvciwgU2l6ZU92ZXJmbG93RXJyb3I7CiAgdmFyIGluaXRfZW5jb2RpbmcgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvZW5jb2RpbmcuanMiKCkgewogICAgICBpbml0X2Jhc2UoKTsKICAgICAgSW50ZWdlck91dE9mUmFuZ2VFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBtYXgsIG1pbiwgc2lnbmVkLCBzaXplOiBzaXplMywgdmFsdWUgfSkgewogICAgICAgICAgc3VwZXIoYE51bWJlciAiJHt2YWx1ZX0iIGlzIG5vdCBpbiBzYWZlICR7c2l6ZTMgPyBgJHtzaXplMyAqIDh9LWJpdCAke3NpZ25lZCA/ICJzaWduZWQiIDogInVuc2lnbmVkIn0gYCA6ICIifWludGVnZXIgcmFuZ2UgJHttYXggPyBgKCR7bWlufSB0byAke21heH0pYCA6IGAoYWJvdmUgJHttaW59KWB9YCwgeyBuYW1lOiAiSW50ZWdlck91dE9mUmFuZ2VFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQnl0ZXNCb29sZWFuRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGJ5dGVzMikgewogICAgICAgICAgc3VwZXIoYEJ5dGVzIHZhbHVlICIke2J5dGVzMn0iIGlzIG5vdCBhIHZhbGlkIGJvb2xlYW4uIFRoZSBieXRlcyBhcnJheSBtdXN0IGNvbnRhaW4gYSBzaW5nbGUgYnl0ZSBvZiBlaXRoZXIgYSAwIG9yIDEgdmFsdWUuYCwgewogICAgICAgICAgICBuYW1lOiAiSW52YWxpZEJ5dGVzQm9vbGVhbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihoZXgpIHsKICAgICAgICAgIHN1cGVyKGBIZXggdmFsdWUgIiR7aGV4fSIgaXMgbm90IGEgdmFsaWQgYm9vbGVhbi4gVGhlIGhleCB2YWx1ZSBtdXN0IGJlICIweDAiIChmYWxzZSkgb3IgIjB4MSIgKHRydWUpLmAsIHsgbmFtZTogIkludmFsaWRIZXhCb29sZWFuRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgSW52YWxpZEhleFZhbHVlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7CiAgICAgICAgICBzdXBlcihgSGV4IHZhbHVlICIke3ZhbHVlfSIgaXMgYW4gb2RkIGxlbmd0aCAoJHt2YWx1ZS5sZW5ndGh9KS4gSXQgbXVzdCBiZSBhbiBldmVuIGxlbmd0aC5gLCB7IG5hbWU6ICJJbnZhbGlkSGV4VmFsdWVFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTaXplT3ZlcmZsb3dFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBnaXZlblNpemUsIG1heFNpemUgfSkgewogICAgICAgICAgc3VwZXIoYFNpemUgY2Fubm90IGV4Y2VlZCAke21heFNpemV9IGJ5dGVzLiBHaXZlbiBzaXplOiAke2dpdmVuU2l6ZX0gYnl0ZXMuYCwgeyBuYW1lOiAiU2l6ZU92ZXJmbG93RXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL3RyaW0uanMKICBmdW5jdGlvbiB0cmltKGhleE9yQnl0ZXMsIHsgZGlyID0gImxlZnQiIH0gPSB7fSkgewogICAgbGV0IGRhdGEgPSB0eXBlb2YgaGV4T3JCeXRlcyA9PT0gInN0cmluZyIgPyBoZXhPckJ5dGVzLnJlcGxhY2UoIjB4IiwgIiIpIDogaGV4T3JCeXRlczsKICAgIGxldCBzbGljZUxlbmd0aCA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoIC0gMTsgaSsrKSB7CiAgICAgIGlmIChkYXRhW2RpciA9PT0gImxlZnQiID8gaSA6IGRhdGEubGVuZ3RoIC0gaSAtIDFdLnRvU3RyaW5nKCkgPT09ICIwIikKICAgICAgICBzbGljZUxlbmd0aCsrOwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBkYXRhID0gZGlyID09PSAibGVmdCIgPyBkYXRhLnNsaWNlKHNsaWNlTGVuZ3RoKSA6IGRhdGEuc2xpY2UoMCwgZGF0YS5sZW5ndGggLSBzbGljZUxlbmd0aCk7CiAgICBpZiAodHlwZW9mIGhleE9yQnl0ZXMgPT09ICJzdHJpbmciKSB7CiAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMSAmJiBkaXIgPT09ICJyaWdodCIpCiAgICAgICAgZGF0YSA9IGAke2RhdGF9MGA7CiAgICAgIHJldHVybiBgMHgke2RhdGEubGVuZ3RoICUgMiA9PT0gMSA/IGAwJHtkYXRhfWAgOiBkYXRhfWA7CiAgICB9CiAgICByZXR1cm4gZGF0YTsKICB9CiAgdmFyIGluaXRfdHJpbSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvdHJpbS5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5jb2RpbmcvZnJvbUhleC5qcwogIGZ1bmN0aW9uIGFzc2VydFNpemUoaGV4T3JCeXRlcywgeyBzaXplOiBzaXplMyB9KSB7CiAgICBpZiAoc2l6ZShoZXhPckJ5dGVzKSA+IHNpemUzKQogICAgICB0aHJvdyBuZXcgU2l6ZU92ZXJmbG93RXJyb3IoewogICAgICAgIGdpdmVuU2l6ZTogc2l6ZShoZXhPckJ5dGVzKSwKICAgICAgICBtYXhTaXplOiBzaXplMwogICAgICB9KTsKICB9CiAgZnVuY3Rpb24gZnJvbUhleChoZXgsIHRvT3JPcHRzKSB7CiAgICBjb25zdCBvcHRzID0gdHlwZW9mIHRvT3JPcHRzID09PSAic3RyaW5nIiA/IHsgdG86IHRvT3JPcHRzIH0gOiB0b09yT3B0czsKICAgIGNvbnN0IHRvID0gb3B0cy50bzsKICAgIGlmICh0byA9PT0gIm51bWJlciIpCiAgICAgIHJldHVybiBoZXhUb051bWJlcihoZXgsIG9wdHMpOwogICAgaWYgKHRvID09PSAiYmlnaW50IikKICAgICAgcmV0dXJuIGhleFRvQmlnSW50KGhleCwgb3B0cyk7CiAgICBpZiAodG8gPT09ICJzdHJpbmciKQogICAgICByZXR1cm4gaGV4VG9TdHJpbmcoaGV4LCBvcHRzKTsKICAgIGlmICh0byA9PT0gImJvb2xlYW4iKQogICAgICByZXR1cm4gaGV4VG9Cb29sKGhleCwgb3B0cyk7CiAgICByZXR1cm4gaGV4VG9CeXRlcyhoZXgsIG9wdHMpOwogIH0KICBmdW5jdGlvbiBoZXhUb0JpZ0ludChoZXgsIG9wdHMgPSB7fSkgewogICAgY29uc3QgeyBzaWduZWQgfSA9IG9wdHM7CiAgICBpZiAob3B0cy5zaXplKQogICAgICBhc3NlcnRTaXplKGhleCwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICBjb25zdCB2YWx1ZSA9IEJpZ0ludChoZXgpOwogICAgaWYgKCFzaWduZWQpCiAgICAgIHJldHVybiB2YWx1ZTsKICAgIGNvbnN0IHNpemUzID0gKGhleC5sZW5ndGggLSAyKSAvIDI7CiAgICBjb25zdCBtYXggPSAoMW4gPDwgQmlnSW50KHNpemUzKSAqIDhuIC0gMW4pIC0gMW47CiAgICBpZiAodmFsdWUgPD0gbWF4KQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gdmFsdWUgLSBCaWdJbnQoYDB4JHsiZiIucGFkU3RhcnQoc2l6ZTMgKiAyLCAiZiIpfWApIC0gMW47CiAgfQogIGZ1bmN0aW9uIGhleFRvQm9vbChoZXhfLCBvcHRzID0ge30pIHsKICAgIGxldCBoZXggPSBoZXhfOwogICAgaWYgKG9wdHMuc2l6ZSkgewogICAgICBhc3NlcnRTaXplKGhleCwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICAgIGhleCA9IHRyaW0oaGV4KTsKICAgIH0KICAgIGlmICh0cmltKGhleCkgPT09ICIweDAwIikKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKHRyaW0oaGV4KSA9PT0gIjB4MDEiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIHRocm93IG5ldyBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yKGhleCk7CiAgfQogIGZ1bmN0aW9uIGhleFRvTnVtYmVyKGhleCwgb3B0cyA9IHt9KSB7CiAgICByZXR1cm4gTnVtYmVyKGhleFRvQmlnSW50KGhleCwgb3B0cykpOwogIH0KICBmdW5jdGlvbiBoZXhUb1N0cmluZyhoZXgsIG9wdHMgPSB7fSkgewogICAgbGV0IGJ5dGVzMiA9IGhleFRvQnl0ZXMoaGV4KTsKICAgIGlmIChvcHRzLnNpemUpIHsKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICBieXRlczIgPSB0cmltKGJ5dGVzMiwgeyBkaXI6ICJyaWdodCIgfSk7CiAgICB9CiAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGJ5dGVzMik7CiAgfQogIHZhciBpbml0X2Zyb21IZXggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbmNvZGluZy9mcm9tSGV4LmpzIigpIHsKICAgICAgaW5pdF9lbmNvZGluZygpOwogICAgICBpbml0X3NpemUoKTsKICAgICAgaW5pdF90cmltKCk7CiAgICAgIGluaXRfdG9CeXRlcygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL3RvSGV4LmpzCiAgZnVuY3Rpb24gdG9IZXgodmFsdWUsIG9wdHMgPSB7fSkgewogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIgfHwgdHlwZW9mIHZhbHVlID09PSAiYmlnaW50IikKICAgICAgcmV0dXJuIG51bWJlclRvSGV4KHZhbHVlLCBvcHRzKTsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB7CiAgICAgIHJldHVybiBzdHJpbmdUb0hleCh2YWx1ZSwgb3B0cyk7CiAgICB9CiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAiYm9vbGVhbiIpCiAgICAgIHJldHVybiBib29sVG9IZXgodmFsdWUsIG9wdHMpOwogICAgcmV0dXJuIGJ5dGVzVG9IZXgodmFsdWUsIG9wdHMpOwogIH0KICBmdW5jdGlvbiBib29sVG9IZXgodmFsdWUsIG9wdHMgPSB7fSkgewogICAgY29uc3QgaGV4ID0gYDB4JHtOdW1iZXIodmFsdWUpfWA7CiAgICBpZiAodHlwZW9mIG9wdHMuc2l6ZSA9PT0gIm51bWJlciIpIHsKICAgICAgYXNzZXJ0U2l6ZShoZXgsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICByZXR1cm4gcGFkKGhleCwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICB9CiAgICByZXR1cm4gaGV4OwogIH0KICBmdW5jdGlvbiBieXRlc1RvSGV4KHZhbHVlLCBvcHRzID0ge30pIHsKICAgIGxldCBzdHJpbmcgPSAiIjsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKICAgICAgc3RyaW5nICs9IGhleGVzW3ZhbHVlW2ldXTsKICAgIH0KICAgIGNvbnN0IGhleCA9IGAweCR7c3RyaW5nfWA7CiAgICBpZiAodHlwZW9mIG9wdHMuc2l6ZSA9PT0gIm51bWJlciIpIHsKICAgICAgYXNzZXJ0U2l6ZShoZXgsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICByZXR1cm4gcGFkKGhleCwgeyBkaXI6ICJyaWdodCIsIHNpemU6IG9wdHMuc2l6ZSB9KTsKICAgIH0KICAgIHJldHVybiBoZXg7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvSGV4KHZhbHVlXywgb3B0cyA9IHt9KSB7CiAgICBjb25zdCB7IHNpZ25lZCwgc2l6ZTogc2l6ZTMgfSA9IG9wdHM7CiAgICBjb25zdCB2YWx1ZSA9IEJpZ0ludCh2YWx1ZV8pOwogICAgbGV0IG1heFZhbHVlOwogICAgaWYgKHNpemUzKSB7CiAgICAgIGlmIChzaWduZWQpCiAgICAgICAgbWF4VmFsdWUgPSAoMW4gPDwgQmlnSW50KHNpemUzKSAqIDhuIC0gMW4pIC0gMW47CiAgICAgIGVsc2UKICAgICAgICBtYXhWYWx1ZSA9IDJuICoqIChCaWdJbnQoc2l6ZTMpICogOG4pIC0gMW47CiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZV8gPT09ICJudW1iZXIiKSB7CiAgICAgIG1heFZhbHVlID0gQmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTsKICAgIH0KICAgIGNvbnN0IG1pblZhbHVlID0gdHlwZW9mIG1heFZhbHVlID09PSAiYmlnaW50IiAmJiBzaWduZWQgPyAtbWF4VmFsdWUgLSAxbiA6IDA7CiAgICBpZiAobWF4VmFsdWUgJiYgdmFsdWUgPiBtYXhWYWx1ZSB8fCB2YWx1ZSA8IG1pblZhbHVlKSB7CiAgICAgIGNvbnN0IHN1ZmZpeCA9IHR5cGVvZiB2YWx1ZV8gPT09ICJiaWdpbnQiID8gIm4iIDogIiI7CiAgICAgIHRocm93IG5ldyBJbnRlZ2VyT3V0T2ZSYW5nZUVycm9yKHsKICAgICAgICBtYXg6IG1heFZhbHVlID8gYCR7bWF4VmFsdWV9JHtzdWZmaXh9YCA6IHZvaWQgMCwKICAgICAgICBtaW46IGAke21pblZhbHVlfSR7c3VmZml4fWAsCiAgICAgICAgc2lnbmVkLAogICAgICAgIHNpemU6IHNpemUzLAogICAgICAgIHZhbHVlOiBgJHt2YWx1ZV99JHtzdWZmaXh9YAogICAgICB9KTsKICAgIH0KICAgIGNvbnN0IGhleCA9IGAweCR7KHNpZ25lZCAmJiB2YWx1ZSA8IDAgPyAoMW4gPDwgQmlnSW50KHNpemUzICogOCkpICsgQmlnSW50KHZhbHVlKSA6IHZhbHVlKS50b1N0cmluZygxNil9YDsKICAgIGlmIChzaXplMykKICAgICAgcmV0dXJuIHBhZChoZXgsIHsgc2l6ZTogc2l6ZTMgfSk7CiAgICByZXR1cm4gaGV4OwogIH0KICBmdW5jdGlvbiBzdHJpbmdUb0hleCh2YWx1ZV8sIG9wdHMgPSB7fSkgewogICAgY29uc3QgdmFsdWUgPSBlbmNvZGVyLmVuY29kZSh2YWx1ZV8pOwogICAgcmV0dXJuIGJ5dGVzVG9IZXgodmFsdWUsIG9wdHMpOwogIH0KICB2YXIgaGV4ZXMsIGVuY29kZXI7CiAgdmFyIGluaXRfdG9IZXggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbmNvZGluZy90b0hleC5qcyIoKSB7CiAgICAgIGluaXRfZW5jb2RpbmcoKTsKICAgICAgaW5pdF9wYWQoKTsKICAgICAgaW5pdF9mcm9tSGV4KCk7CiAgICAgIGhleGVzID0gLyogQF9fUFVSRV9fICovIEFycmF5LmZyb20oeyBsZW5ndGg6IDI1NiB9LCAoX3YsIGkpID0+IGkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICIwIikpOwogICAgICBlbmNvZGVyID0gLyogQF9fUFVSRV9fICovIG5ldyBUZXh0RW5jb2RlcigpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL3RvQnl0ZXMuanMKICBmdW5jdGlvbiB0b0J5dGVzKHZhbHVlLCBvcHRzID0ge30pIHsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJudW1iZXIiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gImJpZ2ludCIpCiAgICAgIHJldHVybiBudW1iZXJUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJib29sZWFuIikKICAgICAgcmV0dXJuIGJvb2xUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICAgIGlmIChpc0hleCh2YWx1ZSkpCiAgICAgIHJldHVybiBoZXhUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICAgIHJldHVybiBzdHJpbmdUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICB9CiAgZnVuY3Rpb24gYm9vbFRvQnl0ZXModmFsdWUsIG9wdHMgPSB7fSkgewogICAgY29uc3QgYnl0ZXMyID0gbmV3IFVpbnQ4QXJyYXkoMSk7CiAgICBieXRlczJbMF0gPSBOdW1iZXIodmFsdWUpOwogICAgaWYgKHR5cGVvZiBvcHRzLnNpemUgPT09ICJudW1iZXIiKSB7CiAgICAgIGFzc2VydFNpemUoYnl0ZXMyLCB7IHNpemU6IG9wdHMuc2l6ZSB9KTsKICAgICAgcmV0dXJuIHBhZChieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgfQogICAgcmV0dXJuIGJ5dGVzMjsKICB9CiAgZnVuY3Rpb24gY2hhckNvZGVUb0Jhc2UxNihjaGFyKSB7CiAgICBpZiAoY2hhciA+PSBjaGFyQ29kZU1hcC56ZXJvICYmIGNoYXIgPD0gY2hhckNvZGVNYXAubmluZSkKICAgICAgcmV0dXJuIGNoYXIgLSBjaGFyQ29kZU1hcC56ZXJvOwogICAgaWYgKGNoYXIgPj0gY2hhckNvZGVNYXAuQSAmJiBjaGFyIDw9IGNoYXJDb2RlTWFwLkYpCiAgICAgIHJldHVybiBjaGFyIC0gKGNoYXJDb2RlTWFwLkEgLSAxMCk7CiAgICBpZiAoY2hhciA+PSBjaGFyQ29kZU1hcC5hICYmIGNoYXIgPD0gY2hhckNvZGVNYXAuZikKICAgICAgcmV0dXJuIGNoYXIgLSAoY2hhckNvZGVNYXAuYSAtIDEwKTsKICAgIHJldHVybiB2b2lkIDA7CiAgfQogIGZ1bmN0aW9uIGhleFRvQnl0ZXMoaGV4Xywgb3B0cyA9IHt9KSB7CiAgICBsZXQgaGV4ID0gaGV4XzsKICAgIGlmIChvcHRzLnNpemUpIHsKICAgICAgYXNzZXJ0U2l6ZShoZXgsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICBoZXggPSBwYWQoaGV4LCB7IGRpcjogInJpZ2h0Iiwgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgfQogICAgbGV0IGhleFN0cmluZyA9IGhleC5zbGljZSgyKTsKICAgIGlmIChoZXhTdHJpbmcubGVuZ3RoICUgMikKICAgICAgaGV4U3RyaW5nID0gYDAke2hleFN0cmluZ31gOwogICAgY29uc3QgbGVuZ3RoID0gaGV4U3RyaW5nLmxlbmd0aCAvIDI7CiAgICBjb25zdCBieXRlczIgPSBuZXcgVWludDhBcnJheShsZW5ndGgpOwogICAgZm9yIChsZXQgaW5kZXgyID0gMCwgaiA9IDA7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyKyspIHsKICAgICAgY29uc3QgbmliYmxlTGVmdCA9IGNoYXJDb2RlVG9CYXNlMTYoaGV4U3RyaW5nLmNoYXJDb2RlQXQoaisrKSk7CiAgICAgIGNvbnN0IG5pYmJsZVJpZ2h0ID0gY2hhckNvZGVUb0Jhc2UxNihoZXhTdHJpbmcuY2hhckNvZGVBdChqKyspKTsKICAgICAgaWYgKG5pYmJsZUxlZnQgPT09IHZvaWQgMCB8fCBuaWJibGVSaWdodCA9PT0gdm9pZCAwKSB7CiAgICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoYEludmFsaWQgYnl0ZSBzZXF1ZW5jZSAoIiR7aGV4U3RyaW5nW2ogLSAyXX0ke2hleFN0cmluZ1tqIC0gMV19IiBpbiAiJHtoZXhTdHJpbmd9IikuYCk7CiAgICAgIH0KICAgICAgYnl0ZXMyW2luZGV4Ml0gPSBuaWJibGVMZWZ0ICogMTYgKyBuaWJibGVSaWdodDsKICAgIH0KICAgIHJldHVybiBieXRlczI7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvQnl0ZXModmFsdWUsIG9wdHMpIHsKICAgIGNvbnN0IGhleCA9IG51bWJlclRvSGV4KHZhbHVlLCBvcHRzKTsKICAgIHJldHVybiBoZXhUb0J5dGVzKGhleCk7CiAgfQogIGZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXModmFsdWUsIG9wdHMgPSB7fSkgewogICAgY29uc3QgYnl0ZXMyID0gZW5jb2RlcjIuZW5jb2RlKHZhbHVlKTsKICAgIGlmICh0eXBlb2Ygb3B0cy5zaXplID09PSAibnVtYmVyIikgewogICAgICBhc3NlcnRTaXplKGJ5dGVzMiwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICAgIHJldHVybiBwYWQoYnl0ZXMyLCB7IGRpcjogInJpZ2h0Iiwgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgfQogICAgcmV0dXJuIGJ5dGVzMjsKICB9CiAgdmFyIGVuY29kZXIyLCBjaGFyQ29kZU1hcDsKICB2YXIgaW5pdF90b0J5dGVzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5jb2RpbmcvdG9CeXRlcy5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X2lzSGV4KCk7CiAgICAgIGluaXRfcGFkKCk7CiAgICAgIGluaXRfZnJvbUhleCgpOwogICAgICBpbml0X3RvSGV4KCk7CiAgICAgIGVuY29kZXIyID0gLyogQF9fUFVSRV9fICovIG5ldyBUZXh0RW5jb2RlcigpOwogICAgICBjaGFyQ29kZU1hcCA9IHsKICAgICAgICB6ZXJvOiA0OCwKICAgICAgICBuaW5lOiA1NywKICAgICAgICBBOiA2NSwKICAgICAgICBGOiA3MCwKICAgICAgICBhOiA5NywKICAgICAgICBmOiAxMDIKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL19hc3NlcnQuanMKICBmdW5jdGlvbiBudW1iZXIobikgewogICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihuKSB8fCBuIDwgMCkKICAgICAgdGhyb3cgbmV3IEVycm9yKGBwb3NpdGl2ZSBpbnRlZ2VyIGV4cGVjdGVkLCBub3QgJHtufWApOwogIH0KICBmdW5jdGlvbiBpc0J5dGVzKGEpIHsKICAgIHJldHVybiBhIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBhICE9IG51bGwgJiYgdHlwZW9mIGEgPT09ICJvYmplY3QiICYmIGEuY29uc3RydWN0b3IubmFtZSA9PT0gIlVpbnQ4QXJyYXkiOwogIH0KICBmdW5jdGlvbiBieXRlcyhiLCAuLi5sZW5ndGhzKSB7CiAgICBpZiAoIWlzQnl0ZXMoYikpCiAgICAgIHRocm93IG5ldyBFcnJvcigiVWludDhBcnJheSBleHBlY3RlZCIpOwogICAgaWYgKGxlbmd0aHMubGVuZ3RoID4gMCAmJiAhbGVuZ3Rocy5pbmNsdWRlcyhiLmxlbmd0aCkpCiAgICAgIHRocm93IG5ldyBFcnJvcihgVWludDhBcnJheSBleHBlY3RlZCBvZiBsZW5ndGggJHtsZW5ndGhzfSwgbm90IG9mIGxlbmd0aD0ke2IubGVuZ3RofWApOwogIH0KICBmdW5jdGlvbiBoYXNoKGgpIHsKICAgIGlmICh0eXBlb2YgaCAhPT0gImZ1bmN0aW9uIiB8fCB0eXBlb2YgaC5jcmVhdGUgIT09ICJmdW5jdGlvbiIpCiAgICAgIHRocm93IG5ldyBFcnJvcigiSGFzaCBzaG91bGQgYmUgd3JhcHBlZCBieSB1dGlscy53cmFwQ29uc3RydWN0b3IiKTsKICAgIG51bWJlcihoLm91dHB1dExlbik7CiAgICBudW1iZXIoaC5ibG9ja0xlbik7CiAgfQogIGZ1bmN0aW9uIGV4aXN0cyhpbnN0YW5jZSwgY2hlY2tGaW5pc2hlZCA9IHRydWUpIHsKICAgIGlmIChpbnN0YW5jZS5kZXN0cm95ZWQpCiAgICAgIHRocm93IG5ldyBFcnJvcigiSGFzaCBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWQiKTsKICAgIGlmIChjaGVja0ZpbmlzaGVkICYmIGluc3RhbmNlLmZpbmlzaGVkKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkhhc2gjZGlnZXN0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQiKTsKICB9CiAgZnVuY3Rpb24gb3V0cHV0KG91dCwgaW5zdGFuY2UpIHsKICAgIGJ5dGVzKG91dCk7CiAgICBjb25zdCBtaW4gPSBpbnN0YW5jZS5vdXRwdXRMZW47CiAgICBpZiAob3V0Lmxlbmd0aCA8IG1pbikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpZ2VzdEludG8oKSBleHBlY3RzIG91dHB1dCBidWZmZXIgb2YgbGVuZ3RoIGF0IGxlYXN0ICR7bWlufWApOwogICAgfQogIH0KICB2YXIgaW5pdF9hc3NlcnQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL19hc3NlcnQuanMiKCkgewogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vX3U2NC5qcwogIGZ1bmN0aW9uIGZyb21CaWcobiwgbGUgPSBmYWxzZSkgewogICAgaWYgKGxlKQogICAgICByZXR1cm4geyBoOiBOdW1iZXIobiAmIFUzMl9NQVNLNjQpLCBsOiBOdW1iZXIobiA+PiBfMzJuICYgVTMyX01BU0s2NCkgfTsKICAgIHJldHVybiB7IGg6IE51bWJlcihuID4+IF8zMm4gJiBVMzJfTUFTSzY0KSB8IDAsIGw6IE51bWJlcihuICYgVTMyX01BU0s2NCkgfCAwIH07CiAgfQogIGZ1bmN0aW9uIHNwbGl0KGxzdCwgbGUgPSBmYWxzZSkgewogICAgbGV0IEFoID0gbmV3IFVpbnQzMkFycmF5KGxzdC5sZW5ndGgpOwogICAgbGV0IEFsID0gbmV3IFVpbnQzMkFycmF5KGxzdC5sZW5ndGgpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsc3QubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgeyBoLCBsIH0gPSBmcm9tQmlnKGxzdFtpXSwgbGUpOwogICAgICBbQWhbaV0sIEFsW2ldXSA9IFtoLCBsXTsKICAgIH0KICAgIHJldHVybiBbQWgsIEFsXTsKICB9CiAgdmFyIFUzMl9NQVNLNjQsIF8zMm4sIHJvdGxTSCwgcm90bFNMLCByb3RsQkgsIHJvdGxCTDsKICB2YXIgaW5pdF91NjQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL191NjQuanMiKCkgewogICAgICBVMzJfTUFTSzY0ID0gLyogQF9fUFVSRV9fICovIEJpZ0ludCgyICoqIDMyIC0gMSk7CiAgICAgIF8zMm4gPSAvKiBAX19QVVJFX18gKi8gQmlnSW50KDMyKTsKICAgICAgcm90bFNIID0gKGgsIGwsIHMpID0+IGggPDwgcyB8IGwgPj4+IDMyIC0gczsKICAgICAgcm90bFNMID0gKGgsIGwsIHMpID0+IGwgPDwgcyB8IGggPj4+IDMyIC0gczsKICAgICAgcm90bEJIID0gKGgsIGwsIHMpID0+IGwgPDwgcyAtIDMyIHwgaCA+Pj4gNjQgLSBzOwogICAgICByb3RsQkwgPSAoaCwgbCwgcykgPT4gaCA8PCBzIC0gMzIgfCBsID4+PiA2NCAtIHM7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9jcnlwdG8uanMKICB2YXIgY3J5cHRvOwogIHZhciBpbml0X2NyeXB0byA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vY3J5cHRvLmpzIigpIHsKICAgICAgY3J5cHRvID0gdHlwZW9mIGdsb2JhbFRoaXMgPT09ICJvYmplY3QiICYmICJjcnlwdG8iIGluIGdsb2JhbFRoaXMgPyBnbG9iYWxUaGlzLmNyeXB0byA6IHZvaWQgMDsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL3V0aWxzLmpzCiAgZnVuY3Rpb24gYnl0ZVN3YXAzMihhcnIpIHsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7CiAgICAgIGFycltpXSA9IGJ5dGVTd2FwKGFycltpXSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHV0ZjhUb0J5dGVzKHN0cikgewogICAgaWYgKHR5cGVvZiBzdHIgIT09ICJzdHJpbmciKQogICAgICB0aHJvdyBuZXcgRXJyb3IoYHV0ZjhUb0J5dGVzIGV4cGVjdGVkIHN0cmluZywgZ290ICR7dHlwZW9mIHN0cn1gKTsKICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyKSk7CiAgfQogIGZ1bmN0aW9uIHRvQnl0ZXMyKGRhdGEpIHsKICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIpCiAgICAgIGRhdGEgPSB1dGY4VG9CeXRlcyhkYXRhKTsKICAgIGJ5dGVzKGRhdGEpOwogICAgcmV0dXJuIGRhdGE7CiAgfQogIGZ1bmN0aW9uIGNvbmNhdEJ5dGVzKC4uLmFycmF5cykgewogICAgbGV0IHN1bSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhID0gYXJyYXlzW2ldOwogICAgICBieXRlcyhhKTsKICAgICAgc3VtICs9IGEubGVuZ3RoOwogICAgfQogICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc3VtKTsKICAgIGZvciAobGV0IGkgPSAwLCBwYWQyID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhID0gYXJyYXlzW2ldOwogICAgICByZXMuc2V0KGEsIHBhZDIpOwogICAgICBwYWQyICs9IGEubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9CiAgZnVuY3Rpb24gd3JhcENvbnN0cnVjdG9yKGhhc2hDb25zKSB7CiAgICBjb25zdCBoYXNoQyA9IChtc2cpID0+IGhhc2hDb25zKCkudXBkYXRlKHRvQnl0ZXMyKG1zZykpLmRpZ2VzdCgpOwogICAgY29uc3QgdG1wID0gaGFzaENvbnMoKTsKICAgIGhhc2hDLm91dHB1dExlbiA9IHRtcC5vdXRwdXRMZW47CiAgICBoYXNoQy5ibG9ja0xlbiA9IHRtcC5ibG9ja0xlbjsKICAgIGhhc2hDLmNyZWF0ZSA9ICgpID0+IGhhc2hDb25zKCk7CiAgICByZXR1cm4gaGFzaEM7CiAgfQogIGZ1bmN0aW9uIHdyYXBYT0ZDb25zdHJ1Y3RvcldpdGhPcHRzKGhhc2hDb25zKSB7CiAgICBjb25zdCBoYXNoQyA9IChtc2csIG9wdHMpID0+IGhhc2hDb25zKG9wdHMpLnVwZGF0ZSh0b0J5dGVzMihtc2cpKS5kaWdlc3QoKTsKICAgIGNvbnN0IHRtcCA9IGhhc2hDb25zKHt9KTsKICAgIGhhc2hDLm91dHB1dExlbiA9IHRtcC5vdXRwdXRMZW47CiAgICBoYXNoQy5ibG9ja0xlbiA9IHRtcC5ibG9ja0xlbjsKICAgIGhhc2hDLmNyZWF0ZSA9IChvcHRzKSA9PiBoYXNoQ29ucyhvcHRzKTsKICAgIHJldHVybiBoYXNoQzsKICB9CiAgZnVuY3Rpb24gcmFuZG9tQnl0ZXMoYnl0ZXNMZW5ndGggPSAzMikgewogICAgaWYgKGNyeXB0byAmJiB0eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyA9PT0gImZ1bmN0aW9uIikgewogICAgICByZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShieXRlc0xlbmd0aCkpOwogICAgfQogICAgdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIG11c3QgYmUgZGVmaW5lZCIpOwogIH0KICB2YXIgdTMyLCBjcmVhdGVWaWV3LCByb3RyLCByb3RsLCBpc0xFLCBieXRlU3dhcCwgSGFzaCwgdG9TdHI7CiAgdmFyIGluaXRfdXRpbHMyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS91dGlscy5qcyIoKSB7CiAgICAgIGluaXRfY3J5cHRvKCk7CiAgICAgIGluaXRfYXNzZXJ0KCk7CiAgICAgIHUzMiA9IChhcnIpID0+IG5ldyBVaW50MzJBcnJheShhcnIuYnVmZmVyLCBhcnIuYnl0ZU9mZnNldCwgTWF0aC5mbG9vcihhcnIuYnl0ZUxlbmd0aCAvIDQpKTsKICAgICAgY3JlYXRlVmlldyA9IChhcnIpID0+IG5ldyBEYXRhVmlldyhhcnIuYnVmZmVyLCBhcnIuYnl0ZU9mZnNldCwgYXJyLmJ5dGVMZW5ndGgpOwogICAgICByb3RyID0gKHdvcmQsIHNoaWZ0KSA9PiB3b3JkIDw8IDMyIC0gc2hpZnQgfCB3b3JkID4+PiBzaGlmdDsKICAgICAgcm90bCA9ICh3b3JkLCBzaGlmdCkgPT4gd29yZCA8PCBzaGlmdCB8IHdvcmQgPj4+IDMyIC0gc2hpZnQgPj4+IDA7CiAgICAgIGlzTEUgPSBuZXcgVWludDhBcnJheShuZXcgVWludDMyQXJyYXkoWzI4NzQ1NDAyMF0pLmJ1ZmZlcilbMF0gPT09IDY4OwogICAgICBieXRlU3dhcCA9ICh3b3JkKSA9PiB3b3JkIDw8IDI0ICYgNDI3ODE5MDA4MCB8IHdvcmQgPDwgOCAmIDE2NzExNjgwIHwgd29yZCA+Pj4gOCAmIDY1MjgwIHwgd29yZCA+Pj4gMjQgJiAyNTU7CiAgICAgIEhhc2ggPSBjbGFzcyB7CiAgICAgICAgLy8gU2FmZSB2ZXJzaW9uIHRoYXQgY2xvbmVzIGludGVybmFsIHN0YXRlCiAgICAgICAgY2xvbmUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvbmVJbnRvKCk7CiAgICAgICAgfQogICAgICB9OwogICAgICB0b1N0ciA9IHt9LnRvU3RyaW5nOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vc2hhMy5qcwogIGZ1bmN0aW9uIGtlY2Nha1Aocywgcm91bmRzID0gMjQpIHsKICAgIGNvbnN0IEIgPSBuZXcgVWludDMyQXJyYXkoNSAqIDIpOwogICAgZm9yIChsZXQgcm91bmQgPSAyNCAtIHJvdW5kczsgcm91bmQgPCAyNDsgcm91bmQrKykgewogICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IDEwOyB4KyspCiAgICAgICAgQlt4XSA9IHNbeF0gXiBzW3ggKyAxMF0gXiBzW3ggKyAyMF0gXiBzW3ggKyAzMF0gXiBzW3ggKyA0MF07CiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgMTA7IHggKz0gMikgewogICAgICAgIGNvbnN0IGlkeDEgPSAoeCArIDgpICUgMTA7CiAgICAgICAgY29uc3QgaWR4MCA9ICh4ICsgMikgJSAxMDsKICAgICAgICBjb25zdCBCMCA9IEJbaWR4MF07CiAgICAgICAgY29uc3QgQjEgPSBCW2lkeDAgKyAxXTsKICAgICAgICBjb25zdCBUaCA9IHJvdGxIKEIwLCBCMSwgMSkgXiBCW2lkeDFdOwogICAgICAgIGNvbnN0IFRsID0gcm90bEwoQjAsIEIxLCAxKSBeIEJbaWR4MSArIDFdOwogICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgNTA7IHkgKz0gMTApIHsKICAgICAgICAgIHNbeCArIHldIF49IFRoOwogICAgICAgICAgc1t4ICsgeSArIDFdIF49IFRsOwogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgY3VySCA9IHNbMl07CiAgICAgIGxldCBjdXJMID0gc1szXTsKICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCAyNDsgdCsrKSB7CiAgICAgICAgY29uc3Qgc2hpZnQgPSBTSEEzX1JPVExbdF07CiAgICAgICAgY29uc3QgVGggPSByb3RsSChjdXJILCBjdXJMLCBzaGlmdCk7CiAgICAgICAgY29uc3QgVGwgPSByb3RsTChjdXJILCBjdXJMLCBzaGlmdCk7CiAgICAgICAgY29uc3QgUEkgPSBTSEEzX1BJW3RdOwogICAgICAgIGN1ckggPSBzW1BJXTsKICAgICAgICBjdXJMID0gc1tQSSArIDFdOwogICAgICAgIHNbUEldID0gVGg7CiAgICAgICAgc1tQSSArIDFdID0gVGw7CiAgICAgIH0KICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCA1MDsgeSArPSAxMCkgewogICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgMTA7IHgrKykKICAgICAgICAgIEJbeF0gPSBzW3kgKyB4XTsKICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IDEwOyB4KyspCiAgICAgICAgICBzW3kgKyB4XSBePSB+QlsoeCArIDIpICUgMTBdICYgQlsoeCArIDQpICUgMTBdOwogICAgICB9CiAgICAgIHNbMF0gXj0gU0hBM19JT1RBX0hbcm91bmRdOwogICAgICBzWzFdIF49IFNIQTNfSU9UQV9MW3JvdW5kXTsKICAgIH0KICAgIEIuZmlsbCgwKTsKICB9CiAgdmFyIFNIQTNfUEksIFNIQTNfUk9UTCwgX1NIQTNfSU9UQSwgXzBuLCBfMW4sIF8ybiwgXzduLCBfMjU2biwgXzB4NzFuLCBTSEEzX0lPVEFfSCwgU0hBM19JT1RBX0wsIHJvdGxILCByb3RsTCwgS2VjY2FrLCBnZW4sIHNoYTNfMjI0LCBzaGEzXzI1Niwgc2hhM18zODQsIHNoYTNfNTEyLCBrZWNjYWtfMjI0LCBrZWNjYWtfMjU2LCBrZWNjYWtfMzg0LCBrZWNjYWtfNTEyLCBnZW5TaGFrZSwgc2hha2UxMjgsIHNoYWtlMjU2OwogIHZhciBpbml0X3NoYTMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL3NoYTMuanMiKCkgewogICAgICBpbml0X2Fzc2VydCgpOwogICAgICBpbml0X3U2NCgpOwogICAgICBpbml0X3V0aWxzMigpOwogICAgICBTSEEzX1BJID0gW107CiAgICAgIFNIQTNfUk9UTCA9IFtdOwogICAgICBfU0hBM19JT1RBID0gW107CiAgICAgIF8wbiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMCk7CiAgICAgIF8xbiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMSk7CiAgICAgIF8ybiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMik7CiAgICAgIF83biA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoNyk7CiAgICAgIF8yNTZuID0gLyogQF9fUFVSRV9fICovIEJpZ0ludCgyNTYpOwogICAgICBfMHg3MW4gPSAvKiBAX19QVVJFX18gKi8gQmlnSW50KDExMyk7CiAgICAgIGZvciAobGV0IHJvdW5kID0gMCwgUiA9IF8xbiwgeCA9IDEsIHkgPSAwOyByb3VuZCA8IDI0OyByb3VuZCsrKSB7CiAgICAgICAgW3gsIHldID0gW3ksICgyICogeCArIDMgKiB5KSAlIDVdOwogICAgICAgIFNIQTNfUEkucHVzaCgyICogKDUgKiB5ICsgeCkpOwogICAgICAgIFNIQTNfUk9UTC5wdXNoKChyb3VuZCArIDEpICogKHJvdW5kICsgMikgLyAyICUgNjQpOwogICAgICAgIGxldCB0ID0gXzBuOwogICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgNzsgaisrKSB7CiAgICAgICAgICBSID0gKFIgPDwgXzFuIF4gKFIgPj4gXzduKSAqIF8weDcxbikgJSBfMjU2bjsKICAgICAgICAgIGlmIChSICYgXzJuKQogICAgICAgICAgICB0IF49IF8xbiA8PCAoXzFuIDw8IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoaikpIC0gXzFuOwogICAgICAgIH0KICAgICAgICBfU0hBM19JT1RBLnB1c2godCk7CiAgICAgIH0KICAgICAgW1NIQTNfSU9UQV9ILCBTSEEzX0lPVEFfTF0gPSAvKiBAX19QVVJFX18gKi8gc3BsaXQoX1NIQTNfSU9UQSwgdHJ1ZSk7CiAgICAgIHJvdGxIID0gKGgsIGwsIHMpID0+IHMgPiAzMiA/IHJvdGxCSChoLCBsLCBzKSA6IHJvdGxTSChoLCBsLCBzKTsKICAgICAgcm90bEwgPSAoaCwgbCwgcykgPT4gcyA+IDMyID8gcm90bEJMKGgsIGwsIHMpIDogcm90bFNMKGgsIGwsIHMpOwogICAgICBLZWNjYWsgPSBjbGFzcyBfS2VjY2FrIGV4dGVuZHMgSGFzaCB7CiAgICAgICAgLy8gTk9URTogd2UgYWNjZXB0IGFyZ3VtZW50cyBpbiBieXRlcyBpbnN0ZWFkIG9mIGJpdHMgaGVyZS4KICAgICAgICBjb25zdHJ1Y3RvcihibG9ja0xlbiwgc3VmZml4LCBvdXRwdXRMZW4sIGVuYWJsZVhPRiA9IGZhbHNlLCByb3VuZHMgPSAyNCkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIHRoaXMuYmxvY2tMZW4gPSBibG9ja0xlbjsKICAgICAgICAgIHRoaXMuc3VmZml4ID0gc3VmZml4OwogICAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0aGlzLmVuYWJsZVhPRiA9IGVuYWJsZVhPRjsKICAgICAgICAgIHRoaXMucm91bmRzID0gcm91bmRzOwogICAgICAgICAgdGhpcy5wb3MgPSAwOwogICAgICAgICAgdGhpcy5wb3NPdXQgPSAwOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTsKICAgICAgICAgIG51bWJlcihvdXRwdXRMZW4pOwogICAgICAgICAgaWYgKDAgPj0gdGhpcy5ibG9ja0xlbiB8fCB0aGlzLmJsb2NrTGVuID49IDIwMCkKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTaGEzIHN1cHBvcnRzIG9ubHkga2VjY2FrLWYxNjAwIGZ1bmN0aW9uIik7CiAgICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFVpbnQ4QXJyYXkoMjAwKTsKICAgICAgICAgIHRoaXMuc3RhdGUzMiA9IHUzMih0aGlzLnN0YXRlKTsKICAgICAgICB9CiAgICAgICAga2VjY2FrKCkgewogICAgICAgICAgaWYgKCFpc0xFKQogICAgICAgICAgICBieXRlU3dhcDMyKHRoaXMuc3RhdGUzMik7CiAgICAgICAgICBrZWNjYWtQKHRoaXMuc3RhdGUzMiwgdGhpcy5yb3VuZHMpOwogICAgICAgICAgaWYgKCFpc0xFKQogICAgICAgICAgICBieXRlU3dhcDMyKHRoaXMuc3RhdGUzMik7CiAgICAgICAgICB0aGlzLnBvc091dCA9IDA7CiAgICAgICAgICB0aGlzLnBvcyA9IDA7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZShkYXRhKSB7CiAgICAgICAgICBleGlzdHModGhpcyk7CiAgICAgICAgICBjb25zdCB7IGJsb2NrTGVuLCBzdGF0ZSB9ID0gdGhpczsKICAgICAgICAgIGRhdGEgPSB0b0J5dGVzMihkYXRhKTsKICAgICAgICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoOwogICAgICAgICAgZm9yIChsZXQgcG9zID0gMDsgcG9zIDwgbGVuOyApIHsKICAgICAgICAgICAgY29uc3QgdGFrZSA9IE1hdGgubWluKGJsb2NrTGVuIC0gdGhpcy5wb3MsIGxlbiAtIHBvcyk7CiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFrZTsgaSsrKQogICAgICAgICAgICAgIHN0YXRlW3RoaXMucG9zKytdIF49IGRhdGFbcG9zKytdOwogICAgICAgICAgICBpZiAodGhpcy5wb3MgPT09IGJsb2NrTGVuKQogICAgICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgZmluaXNoKCkgewogICAgICAgICAgaWYgKHRoaXMuZmluaXNoZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMuZmluaXNoZWQgPSB0cnVlOwogICAgICAgICAgY29uc3QgeyBzdGF0ZSwgc3VmZml4LCBwb3MsIGJsb2NrTGVuIH0gPSB0aGlzOwogICAgICAgICAgc3RhdGVbcG9zXSBePSBzdWZmaXg7CiAgICAgICAgICBpZiAoKHN1ZmZpeCAmIDEyOCkgIT09IDAgJiYgcG9zID09PSBibG9ja0xlbiAtIDEpCiAgICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgICBzdGF0ZVtibG9ja0xlbiAtIDFdIF49IDEyODsKICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgfQogICAgICAgIHdyaXRlSW50byhvdXQpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzLCBmYWxzZSk7CiAgICAgICAgICBieXRlcyhvdXQpOwogICAgICAgICAgdGhpcy5maW5pc2goKTsKICAgICAgICAgIGNvbnN0IGJ1ZmZlck91dCA9IHRoaXMuc3RhdGU7CiAgICAgICAgICBjb25zdCB7IGJsb2NrTGVuIH0gPSB0aGlzOwogICAgICAgICAgZm9yIChsZXQgcG9zID0gMCwgbGVuID0gb3V0Lmxlbmd0aDsgcG9zIDwgbGVuOyApIHsKICAgICAgICAgICAgaWYgKHRoaXMucG9zT3V0ID49IGJsb2NrTGVuKQogICAgICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihibG9ja0xlbiAtIHRoaXMucG9zT3V0LCBsZW4gLSBwb3MpOwogICAgICAgICAgICBvdXQuc2V0KGJ1ZmZlck91dC5zdWJhcnJheSh0aGlzLnBvc091dCwgdGhpcy5wb3NPdXQgKyB0YWtlKSwgcG9zKTsKICAgICAgICAgICAgdGhpcy5wb3NPdXQgKz0gdGFrZTsKICAgICAgICAgICAgcG9zICs9IHRha2U7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gb3V0OwogICAgICAgIH0KICAgICAgICB4b2ZJbnRvKG91dCkgewogICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZVhPRikKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJYT0YgaXMgbm90IHBvc3NpYmxlIGZvciB0aGlzIGluc3RhbmNlIik7CiAgICAgICAgICByZXR1cm4gdGhpcy53cml0ZUludG8ob3V0KTsKICAgICAgICB9CiAgICAgICAgeG9mKGJ5dGVzMikgewogICAgICAgICAgbnVtYmVyKGJ5dGVzMik7CiAgICAgICAgICByZXR1cm4gdGhpcy54b2ZJbnRvKG5ldyBVaW50OEFycmF5KGJ5dGVzMikpOwogICAgICAgIH0KICAgICAgICBkaWdlc3RJbnRvKG91dCkgewogICAgICAgICAgb3V0cHV0KG91dCwgdGhpcyk7CiAgICAgICAgICBpZiAodGhpcy5maW5pc2hlZCkKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJkaWdlc3QoKSB3YXMgYWxyZWFkeSBjYWxsZWQiKTsKICAgICAgICAgIHRoaXMud3JpdGVJbnRvKG91dCk7CiAgICAgICAgICB0aGlzLmRlc3Ryb3koKTsKICAgICAgICAgIHJldHVybiBvdXQ7CiAgICAgICAgfQogICAgICAgIGRpZ2VzdCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmRpZ2VzdEludG8obmV3IFVpbnQ4QXJyYXkodGhpcy5vdXRwdXRMZW4pKTsKICAgICAgICB9CiAgICAgICAgZGVzdHJveSgpIHsKICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuc3RhdGUuZmlsbCgwKTsKICAgICAgICB9CiAgICAgICAgX2Nsb25lSW50byh0bykgewogICAgICAgICAgY29uc3QgeyBibG9ja0xlbiwgc3VmZml4LCBvdXRwdXRMZW4sIHJvdW5kcywgZW5hYmxlWE9GIH0gPSB0aGlzOwogICAgICAgICAgdG8gfHwgKHRvID0gbmV3IF9LZWNjYWsoYmxvY2tMZW4sIHN1ZmZpeCwgb3V0cHV0TGVuLCBlbmFibGVYT0YsIHJvdW5kcykpOwogICAgICAgICAgdG8uc3RhdGUzMi5zZXQodGhpcy5zdGF0ZTMyKTsKICAgICAgICAgIHRvLnBvcyA9IHRoaXMucG9zOwogICAgICAgICAgdG8ucG9zT3V0ID0gdGhpcy5wb3NPdXQ7CiAgICAgICAgICB0by5maW5pc2hlZCA9IHRoaXMuZmluaXNoZWQ7CiAgICAgICAgICB0by5yb3VuZHMgPSByb3VuZHM7CiAgICAgICAgICB0by5zdWZmaXggPSBzdWZmaXg7CiAgICAgICAgICB0by5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0by5lbmFibGVYT0YgPSBlbmFibGVYT0Y7CiAgICAgICAgICB0by5kZXN0cm95ZWQgPSB0aGlzLmRlc3Ryb3llZDsKICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGdlbiA9IChzdWZmaXgsIGJsb2NrTGVuLCBvdXRwdXRMZW4pID0+IHdyYXBDb25zdHJ1Y3RvcigoKSA9PiBuZXcgS2VjY2FrKGJsb2NrTGVuLCBzdWZmaXgsIG91dHB1dExlbikpOwogICAgICBzaGEzXzIyNCA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oNiwgMTQ0LCAyMjQgLyA4KTsKICAgICAgc2hhM18yNTYgPSAvKiBAX19QVVJFX18gKi8gZ2VuKDYsIDEzNiwgMjU2IC8gOCk7CiAgICAgIHNoYTNfMzg0ID0gLyogQF9fUFVSRV9fICovIGdlbig2LCAxMDQsIDM4NCAvIDgpOwogICAgICBzaGEzXzUxMiA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oNiwgNzIsIDUxMiAvIDgpOwogICAgICBrZWNjYWtfMjI0ID0gLyogQF9fUFVSRV9fICovIGdlbigxLCAxNDQsIDIyNCAvIDgpOwogICAgICBrZWNjYWtfMjU2ID0gLyogQF9fUFVSRV9fICovIGdlbigxLCAxMzYsIDI1NiAvIDgpOwogICAgICBrZWNjYWtfMzg0ID0gLyogQF9fUFVSRV9fICovIGdlbigxLCAxMDQsIDM4NCAvIDgpOwogICAgICBrZWNjYWtfNTEyID0gLyogQF9fUFVSRV9fICovIGdlbigxLCA3MiwgNTEyIC8gOCk7CiAgICAgIGdlblNoYWtlID0gKHN1ZmZpeCwgYmxvY2tMZW4sIG91dHB1dExlbikgPT4gd3JhcFhPRkNvbnN0cnVjdG9yV2l0aE9wdHMoKG9wdHMgPSB7fSkgPT4gbmV3IEtlY2NhayhibG9ja0xlbiwgc3VmZml4LCBvcHRzLmRrTGVuID09PSB2b2lkIDAgPyBvdXRwdXRMZW4gOiBvcHRzLmRrTGVuLCB0cnVlKSk7CiAgICAgIHNoYWtlMTI4ID0gLyogQF9fUFVSRV9fICovIGdlblNoYWtlKDMxLCAxNjgsIDEyOCAvIDgpOwogICAgICBzaGFrZTI1NiA9IC8qIEBfX1BVUkVfXyAqLyBnZW5TaGFrZSgzMSwgMTM2LCAyNTYgLyA4KTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL2tlY2NhazI1Ni5qcwogIGZ1bmN0aW9uIGtlY2NhazI1Nih2YWx1ZSwgdG9fKSB7CiAgICBjb25zdCB0byA9IHRvXyB8fCAiaGV4IjsKICAgIGNvbnN0IGJ5dGVzMiA9IGtlY2Nha18yNTYoaXNIZXgodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KSA/IHRvQnl0ZXModmFsdWUpIDogdmFsdWUpOwogICAgaWYgKHRvID09PSAiYnl0ZXMiKQogICAgICByZXR1cm4gYnl0ZXMyOwogICAgcmV0dXJuIHRvSGV4KGJ5dGVzMik7CiAgfQogIHZhciBpbml0X2tlY2NhazI1NiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gva2VjY2FrMjU2LmpzIigpIHsKICAgICAgaW5pdF9zaGEzKCk7CiAgICAgIGluaXRfaXNIZXgoKTsKICAgICAgaW5pdF90b0J5dGVzKCk7CiAgICAgIGluaXRfdG9IZXgoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL2hhc2hTaWduYXR1cmUuanMKICBmdW5jdGlvbiBoYXNoU2lnbmF0dXJlKHNpZykgewogICAgcmV0dXJuIGhhc2gyKHNpZyk7CiAgfQogIHZhciBoYXNoMjsKICB2YXIgaW5pdF9oYXNoU2lnbmF0dXJlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9oYXNoU2lnbmF0dXJlLmpzIigpIHsKICAgICAgaW5pdF90b0J5dGVzKCk7CiAgICAgIGluaXRfa2VjY2FrMjU2KCk7CiAgICAgIGhhc2gyID0gKHZhbHVlKSA9PiBrZWNjYWsyNTYodG9CeXRlcyh2YWx1ZSkpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvbm9ybWFsaXplU2lnbmF0dXJlLmpzCiAgZnVuY3Rpb24gbm9ybWFsaXplU2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgbGV0IGFjdGl2ZSA9IHRydWU7CiAgICBsZXQgY3VycmVudCA9ICIiOwogICAgbGV0IGxldmVsID0gMDsKICAgIGxldCByZXN1bHQgPSAiIjsKICAgIGxldCB2YWxpZCA9IGZhbHNlOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaWduYXR1cmUubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgY2hhciA9IHNpZ25hdHVyZVtpXTsKICAgICAgaWYgKFsiKCIsICIpIiwgIiwiXS5pbmNsdWRlcyhjaGFyKSkKICAgICAgICBhY3RpdmUgPSB0cnVlOwogICAgICBpZiAoY2hhciA9PT0gIigiKQogICAgICAgIGxldmVsKys7CiAgICAgIGlmIChjaGFyID09PSAiKSIpCiAgICAgICAgbGV2ZWwtLTsKICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgY29udGludWU7CiAgICAgIGlmIChsZXZlbCA9PT0gMCkgewogICAgICAgIGlmIChjaGFyID09PSAiICIgJiYgWyJldmVudCIsICJmdW5jdGlvbiIsICIiXS5pbmNsdWRlcyhyZXN1bHQpKQogICAgICAgICAgcmVzdWx0ID0gIiI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICByZXN1bHQgKz0gY2hhcjsKICAgICAgICAgIGlmIChjaGFyID09PSAiKSIpIHsKICAgICAgICAgICAgdmFsaWQgPSB0cnVlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGNoYXIgPT09ICIgIikgewogICAgICAgIGlmIChzaWduYXR1cmVbaSAtIDFdICE9PSAiLCIgJiYgY3VycmVudCAhPT0gIiwiICYmIGN1cnJlbnQgIT09ICIsKCIpIHsKICAgICAgICAgIGN1cnJlbnQgPSAiIjsKICAgICAgICAgIGFjdGl2ZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICByZXN1bHQgKz0gY2hhcjsKICAgICAgY3VycmVudCArPSBjaGFyOwogICAgfQogICAgaWYgKCF2YWxpZCkKICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoIlVuYWJsZSB0byBub3JtYWxpemUgc2lnbmF0dXJlLiIpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdmFyIGluaXRfbm9ybWFsaXplU2lnbmF0dXJlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9ub3JtYWxpemVTaWduYXR1cmUuanMiKCkgewogICAgICBpbml0X2Jhc2UoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvU2lnbmF0dXJlLmpzCiAgdmFyIHRvU2lnbmF0dXJlOwogIHZhciBpbml0X3RvU2lnbmF0dXJlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b1NpZ25hdHVyZS5qcyIoKSB7CiAgICAgIGluaXRfZXhwb3J0cygpOwogICAgICBpbml0X25vcm1hbGl6ZVNpZ25hdHVyZSgpOwogICAgICB0b1NpZ25hdHVyZSA9IChkZWYpID0+IHsKICAgICAgICBjb25zdCBkZWZfID0gKCgpID0+IHsKICAgICAgICAgIGlmICh0eXBlb2YgZGVmID09PSAic3RyaW5nIikKICAgICAgICAgICAgcmV0dXJuIGRlZjsKICAgICAgICAgIHJldHVybiBmb3JtYXRBYmlJdGVtKGRlZik7CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gbm9ybWFsaXplU2lnbmF0dXJlKGRlZl8pOwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9TaWduYXR1cmVIYXNoLmpzCiAgZnVuY3Rpb24gdG9TaWduYXR1cmVIYXNoKGZuKSB7CiAgICByZXR1cm4gaGFzaFNpZ25hdHVyZSh0b1NpZ25hdHVyZShmbikpOwogIH0KICB2YXIgaW5pdF90b1NpZ25hdHVyZUhhc2ggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvU2lnbmF0dXJlSGFzaC5qcyIoKSB7CiAgICAgIGluaXRfaGFzaFNpZ25hdHVyZSgpOwogICAgICBpbml0X3RvU2lnbmF0dXJlKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b0V2ZW50U2VsZWN0b3IuanMKICB2YXIgdG9FdmVudFNlbGVjdG9yOwogIHZhciBpbml0X3RvRXZlbnRTZWxlY3RvciA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9FdmVudFNlbGVjdG9yLmpzIigpIHsKICAgICAgaW5pdF90b1NpZ25hdHVyZUhhc2goKTsKICAgICAgdG9FdmVudFNlbGVjdG9yID0gdG9TaWduYXR1cmVIYXNoOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hZGRyZXNzLmpzCiAgdmFyIEludmFsaWRBZGRyZXNzRXJyb3I7CiAgdmFyIGluaXRfYWRkcmVzcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hZGRyZXNzLmpzIigpIHsKICAgICAgaW5pdF9iYXNlKCk7CiAgICAgIEludmFsaWRBZGRyZXNzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYWRkcmVzcyB9KSB7CiAgICAgICAgICBzdXBlcihgQWRkcmVzcyAiJHthZGRyZXNzfSIgaXMgaW52YWxpZC5gLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgICItIEFkZHJlc3MgbXVzdCBiZSBhIGhleCB2YWx1ZSBvZiAyMCBieXRlcyAoNDAgaGV4IGNoYXJhY3RlcnMpLiIsCiAgICAgICAgICAgICAgIi0gQWRkcmVzcyBtdXN0IG1hdGNoIGl0cyBjaGVja3N1bSBjb3VudGVycGFydC4iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkQWRkcmVzc0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2xydS5qcwogIHZhciBMcnVNYXA7CiAgdmFyIGluaXRfbHJ1ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvbHJ1LmpzIigpIHsKICAgICAgTHJ1TWFwID0gY2xhc3MgZXh0ZW5kcyBNYXAgewogICAgICAgIGNvbnN0cnVjdG9yKHNpemUzKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJtYXhTaXplIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMubWF4U2l6ZSA9IHNpemUzOwogICAgICAgIH0KICAgICAgICBzZXQoa2V5LCB2YWx1ZSkgewogICAgICAgICAgc3VwZXIuc2V0KGtleSwgdmFsdWUpOwogICAgICAgICAgaWYgKHRoaXMubWF4U2l6ZSAmJiB0aGlzLnNpemUgPiB0aGlzLm1heFNpemUpCiAgICAgICAgICAgIHRoaXMuZGVsZXRlKHRoaXMua2V5cygpLm5leHQoKS52YWx1ZSk7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9nZXRBZGRyZXNzLmpzCiAgZnVuY3Rpb24gY2hlY2tzdW1BZGRyZXNzKGFkZHJlc3NfLCBjaGFpbklkKSB7CiAgICBpZiAoY2hlY2tzdW1BZGRyZXNzQ2FjaGUuaGFzKGAke2FkZHJlc3NffS4ke2NoYWluSWR9YCkpCiAgICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3NDYWNoZS5nZXQoYCR7YWRkcmVzc199LiR7Y2hhaW5JZH1gKTsKICAgIGNvbnN0IGhleEFkZHJlc3MgPSBjaGFpbklkID8gYCR7Y2hhaW5JZH0ke2FkZHJlc3NfLnRvTG93ZXJDYXNlKCl9YCA6IGFkZHJlc3NfLnN1YnN0cmluZygyKS50b0xvd2VyQ2FzZSgpOwogICAgY29uc3QgaGFzaDMgPSBrZWNjYWsyNTYoc3RyaW5nVG9CeXRlcyhoZXhBZGRyZXNzKSwgImJ5dGVzIik7CiAgICBjb25zdCBhZGRyZXNzID0gKGNoYWluSWQgPyBoZXhBZGRyZXNzLnN1YnN0cmluZyhgJHtjaGFpbklkfTB4YC5sZW5ndGgpIDogaGV4QWRkcmVzcykuc3BsaXQoIiIpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MDsgaSArPSAyKSB7CiAgICAgIGlmIChoYXNoM1tpID4+IDFdID4+IDQgPj0gOCAmJiBhZGRyZXNzW2ldKSB7CiAgICAgICAgYWRkcmVzc1tpXSA9IGFkZHJlc3NbaV0udG9VcHBlckNhc2UoKTsKICAgICAgfQogICAgICBpZiAoKGhhc2gzW2kgPj4gMV0gJiAxNSkgPj0gOCAmJiBhZGRyZXNzW2kgKyAxXSkgewogICAgICAgIGFkZHJlc3NbaSArIDFdID0gYWRkcmVzc1tpICsgMV0udG9VcHBlckNhc2UoKTsKICAgICAgfQogICAgfQogICAgY29uc3QgcmVzdWx0ID0gYDB4JHthZGRyZXNzLmpvaW4oIiIpfWA7CiAgICBjaGVja3N1bUFkZHJlc3NDYWNoZS5zZXQoYCR7YWRkcmVzc199LiR7Y2hhaW5JZH1gLCByZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gZ2V0QWRkcmVzcyhhZGRyZXNzLCBjaGFpbklkKSB7CiAgICBpZiAoIWlzQWRkcmVzcyhhZGRyZXNzLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzcyB9KTsKICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3MoYWRkcmVzcywgY2hhaW5JZCk7CiAgfQogIHZhciBjaGVja3N1bUFkZHJlc3NDYWNoZTsKICB2YXIgaW5pdF9nZXRBZGRyZXNzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9nZXRBZGRyZXNzLmpzIigpIHsKICAgICAgaW5pdF9hZGRyZXNzKCk7CiAgICAgIGluaXRfdG9CeXRlcygpOwogICAgICBpbml0X2tlY2NhazI1NigpOwogICAgICBpbml0X2xydSgpOwogICAgICBpbml0X2lzQWRkcmVzcygpOwogICAgICBjaGVja3N1bUFkZHJlc3NDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTHJ1TWFwKDgxOTIpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FkZHJlc3MvaXNBZGRyZXNzLmpzCiAgZnVuY3Rpb24gaXNBZGRyZXNzKGFkZHJlc3MsIG9wdGlvbnMpIHsKICAgIGNvbnN0IHsgc3RyaWN0ID0gdHJ1ZSB9ID0gb3B0aW9ucyA/PyB7fTsKICAgIGNvbnN0IGNhY2hlS2V5MiA9IGAke2FkZHJlc3N9LiR7c3RyaWN0fWA7CiAgICBpZiAoaXNBZGRyZXNzQ2FjaGUuaGFzKGNhY2hlS2V5MikpCiAgICAgIHJldHVybiBpc0FkZHJlc3NDYWNoZS5nZXQoY2FjaGVLZXkyKTsKICAgIGNvbnN0IHJlc3VsdCA9ICgoKSA9PiB7CiAgICAgIGlmICghYWRkcmVzc1JlZ2V4LnRlc3QoYWRkcmVzcykpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoYWRkcmVzcy50b0xvd2VyQ2FzZSgpID09PSBhZGRyZXNzKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoc3RyaWN0KQogICAgICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3MoYWRkcmVzcykgPT09IGFkZHJlc3M7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSkoKTsKICAgIGlzQWRkcmVzc0NhY2hlLnNldChjYWNoZUtleTIsIHJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2YXIgYWRkcmVzc1JlZ2V4LCBpc0FkZHJlc3NDYWNoZTsKICB2YXIgaW5pdF9pc0FkZHJlc3MgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hZGRyZXNzL2lzQWRkcmVzcy5qcyIoKSB7CiAgICAgIGluaXRfbHJ1KCk7CiAgICAgIGluaXRfZ2V0QWRkcmVzcygpOwogICAgICBhZGRyZXNzUmVnZXggPSAvXjB4W2EtZkEtRjAtOV17NDB9JC87CiAgICAgIGlzQWRkcmVzc0NhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBMcnVNYXAoODE5Mik7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9jb25jYXQuanMKICBmdW5jdGlvbiBjb25jYXQodmFsdWVzKSB7CiAgICBpZiAodHlwZW9mIHZhbHVlc1swXSA9PT0gInN0cmluZyIpCiAgICAgIHJldHVybiBjb25jYXRIZXgodmFsdWVzKTsKICAgIHJldHVybiBjb25jYXRCeXRlczIodmFsdWVzKTsKICB9CiAgZnVuY3Rpb24gY29uY2F0Qnl0ZXMyKHZhbHVlcykgewogICAgbGV0IGxlbmd0aCA9IDA7CiAgICBmb3IgKGNvbnN0IGFyciBvZiB2YWx1ZXMpIHsKICAgICAgbGVuZ3RoICs9IGFyci5sZW5ndGg7CiAgICB9CiAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpOwogICAgbGV0IG9mZnNldCA9IDA7CiAgICBmb3IgKGNvbnN0IGFyciBvZiB2YWx1ZXMpIHsKICAgICAgcmVzdWx0LnNldChhcnIsIG9mZnNldCk7CiAgICAgIG9mZnNldCArPSBhcnIubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gY29uY2F0SGV4KHZhbHVlcykgewogICAgcmV0dXJuIGAweCR7dmFsdWVzLnJlZHVjZSgoYWNjLCB4KSA9PiBhY2MgKyB4LnJlcGxhY2UoIjB4IiwgIiIpLCAiIil9YDsKICB9CiAgdmFyIGluaXRfY29uY2F0ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9jb25jYXQuanMiKCkgewogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvc2xpY2UuanMKICBmdW5jdGlvbiBzbGljZSh2YWx1ZSwgc3RhcnQsIGVuZCwgeyBzdHJpY3QgfSA9IHt9KSB7CiAgICBpZiAoaXNIZXgodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgcmV0dXJuIHNsaWNlSGV4KHZhbHVlLCBzdGFydCwgZW5kLCB7CiAgICAgICAgc3RyaWN0CiAgICAgIH0pOwogICAgcmV0dXJuIHNsaWNlQnl0ZXModmFsdWUsIHN0YXJ0LCBlbmQsIHsKICAgICAgc3RyaWN0CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gYXNzZXJ0U3RhcnRPZmZzZXQodmFsdWUsIHN0YXJ0KSB7CiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAibnVtYmVyIiAmJiBzdGFydCA+IDAgJiYgc3RhcnQgPiBzaXplKHZhbHVlKSAtIDEpCiAgICAgIHRocm93IG5ldyBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IoewogICAgICAgIG9mZnNldDogc3RhcnQsCiAgICAgICAgcG9zaXRpb246ICJzdGFydCIsCiAgICAgICAgc2l6ZTogc2l6ZSh2YWx1ZSkKICAgICAgfSk7CiAgfQogIGZ1bmN0aW9uIGFzc2VydEVuZE9mZnNldCh2YWx1ZSwgc3RhcnQsIGVuZCkgewogICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gIm51bWJlciIgJiYgdHlwZW9mIGVuZCA9PT0gIm51bWJlciIgJiYgc2l6ZSh2YWx1ZSkgIT09IGVuZCAtIHN0YXJ0KSB7CiAgICAgIHRocm93IG5ldyBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IoewogICAgICAgIG9mZnNldDogZW5kLAogICAgICAgIHBvc2l0aW9uOiAiZW5kIiwKICAgICAgICBzaXplOiBzaXplKHZhbHVlKQogICAgICB9KTsKICAgIH0KICB9CiAgZnVuY3Rpb24gc2xpY2VCeXRlcyh2YWx1ZV8sIHN0YXJ0LCBlbmQsIHsgc3RyaWN0IH0gPSB7fSkgewogICAgYXNzZXJ0U3RhcnRPZmZzZXQodmFsdWVfLCBzdGFydCk7CiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlXy5zbGljZShzdGFydCwgZW5kKTsKICAgIGlmIChzdHJpY3QpCiAgICAgIGFzc2VydEVuZE9mZnNldCh2YWx1ZSwgc3RhcnQsIGVuZCk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQogIGZ1bmN0aW9uIHNsaWNlSGV4KHZhbHVlXywgc3RhcnQsIGVuZCwgeyBzdHJpY3QgfSA9IHt9KSB7CiAgICBhc3NlcnRTdGFydE9mZnNldCh2YWx1ZV8sIHN0YXJ0KTsKICAgIGNvbnN0IHZhbHVlID0gYDB4JHt2YWx1ZV8ucmVwbGFjZSgiMHgiLCAiIikuc2xpY2UoKHN0YXJ0ID8/IDApICogMiwgKGVuZCA/PyB2YWx1ZV8ubGVuZ3RoKSAqIDIpfWA7CiAgICBpZiAoc3RyaWN0KQogICAgICBhc3NlcnRFbmRPZmZzZXQodmFsdWUsIHN0YXJ0LCBlbmQpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KICB2YXIgaW5pdF9zbGljZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvc2xpY2UuanMiKCkgewogICAgICBpbml0X2RhdGEoKTsKICAgICAgaW5pdF9pc0hleCgpOwogICAgICBpbml0X3NpemUoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlQWJpUGFyYW1ldGVycy5qcwogIGZ1bmN0aW9uIGVuY29kZUFiaVBhcmFtZXRlcnMocGFyYW1zLCB2YWx1ZXMpIHsKICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSB2YWx1ZXMubGVuZ3RoKQogICAgICB0aHJvdyBuZXcgQWJpRW5jb2RpbmdMZW5ndGhNaXNtYXRjaEVycm9yKHsKICAgICAgICBleHBlY3RlZExlbmd0aDogcGFyYW1zLmxlbmd0aCwKICAgICAgICBnaXZlbkxlbmd0aDogdmFsdWVzLmxlbmd0aAogICAgICB9KTsKICAgIGNvbnN0IHByZXBhcmVkUGFyYW1zID0gcHJlcGFyZVBhcmFtcyh7CiAgICAgIHBhcmFtcywKICAgICAgdmFsdWVzCiAgICB9KTsKICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVQYXJhbXMocHJlcGFyZWRQYXJhbXMpOwogICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gIjB4IjsKICAgIHJldHVybiBkYXRhOwogIH0KICBmdW5jdGlvbiBwcmVwYXJlUGFyYW1zKHsgcGFyYW1zLCB2YWx1ZXMgfSkgewogICAgY29uc3QgcHJlcGFyZWRQYXJhbXMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIHByZXBhcmVkUGFyYW1zLnB1c2gocHJlcGFyZVBhcmFtKHsgcGFyYW06IHBhcmFtc1tpXSwgdmFsdWU6IHZhbHVlc1tpXSB9KSk7CiAgICB9CiAgICByZXR1cm4gcHJlcGFyZWRQYXJhbXM7CiAgfQogIGZ1bmN0aW9uIHByZXBhcmVQYXJhbSh7IHBhcmFtLCB2YWx1ZSB9KSB7CiAgICBjb25zdCBhcnJheUNvbXBvbmVudHMgPSBnZXRBcnJheUNvbXBvbmVudHMocGFyYW0udHlwZSk7CiAgICBpZiAoYXJyYXlDb21wb25lbnRzKSB7CiAgICAgIGNvbnN0IFtsZW5ndGgsIHR5cGVdID0gYXJyYXlDb21wb25lbnRzOwogICAgICByZXR1cm4gZW5jb2RlQXJyYXkodmFsdWUsIHsgbGVuZ3RoLCBwYXJhbTogeyAuLi5wYXJhbSwgdHlwZSB9IH0pOwogICAgfQogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJ0dXBsZSIpIHsKICAgICAgcmV0dXJuIGVuY29kZVR1cGxlKHZhbHVlLCB7CiAgICAgICAgcGFyYW0KICAgICAgfSk7CiAgICB9CiAgICBpZiAocGFyYW0udHlwZSA9PT0gImFkZHJlc3MiKSB7CiAgICAgIHJldHVybiBlbmNvZGVBZGRyZXNzKHZhbHVlKTsKICAgIH0KICAgIGlmIChwYXJhbS50eXBlID09PSAiYm9vbCIpIHsKICAgICAgcmV0dXJuIGVuY29kZUJvb2wodmFsdWUpOwogICAgfQogICAgaWYgKHBhcmFtLnR5cGUuc3RhcnRzV2l0aCgidWludCIpIHx8IHBhcmFtLnR5cGUuc3RhcnRzV2l0aCgiaW50IikpIHsKICAgICAgY29uc3Qgc2lnbmVkID0gcGFyYW0udHlwZS5zdGFydHNXaXRoKCJpbnQiKTsKICAgICAgcmV0dXJuIGVuY29kZU51bWJlcih2YWx1ZSwgeyBzaWduZWQgfSk7CiAgICB9CiAgICBpZiAocGFyYW0udHlwZS5zdGFydHNXaXRoKCJieXRlcyIpKSB7CiAgICAgIHJldHVybiBlbmNvZGVCeXRlcyh2YWx1ZSwgeyBwYXJhbSB9KTsKICAgIH0KICAgIGlmIChwYXJhbS50eXBlID09PSAic3RyaW5nIikgewogICAgICByZXR1cm4gZW5jb2RlU3RyaW5nKHZhbHVlKTsKICAgIH0KICAgIHRocm93IG5ldyBJbnZhbGlkQWJpRW5jb2RpbmdUeXBlRXJyb3IocGFyYW0udHlwZSwgewogICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L2VuY29kZUFiaVBhcmFtZXRlcnMiCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlUGFyYW1zKHByZXBhcmVkUGFyYW1zKSB7CiAgICBsZXQgc3RhdGljU2l6ZSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXBhcmVkUGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IHsgZHluYW1pYywgZW5jb2RlZCB9ID0gcHJlcGFyZWRQYXJhbXNbaV07CiAgICAgIGlmIChkeW5hbWljKQogICAgICAgIHN0YXRpY1NpemUgKz0gMzI7CiAgICAgIGVsc2UKICAgICAgICBzdGF0aWNTaXplICs9IHNpemUoZW5jb2RlZCk7CiAgICB9CiAgICBjb25zdCBzdGF0aWNQYXJhbXMgPSBbXTsKICAgIGNvbnN0IGR5bmFtaWNQYXJhbXMgPSBbXTsKICAgIGxldCBkeW5hbWljU2l6ZSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXBhcmVkUGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IHsgZHluYW1pYywgZW5jb2RlZCB9ID0gcHJlcGFyZWRQYXJhbXNbaV07CiAgICAgIGlmIChkeW5hbWljKSB7CiAgICAgICAgc3RhdGljUGFyYW1zLnB1c2gobnVtYmVyVG9IZXgoc3RhdGljU2l6ZSArIGR5bmFtaWNTaXplLCB7IHNpemU6IDMyIH0pKTsKICAgICAgICBkeW5hbWljUGFyYW1zLnB1c2goZW5jb2RlZCk7CiAgICAgICAgZHluYW1pY1NpemUgKz0gc2l6ZShlbmNvZGVkKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGF0aWNQYXJhbXMucHVzaChlbmNvZGVkKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvbmNhdChbLi4uc3RhdGljUGFyYW1zLCAuLi5keW5hbWljUGFyYW1zXSk7CiAgfQogIGZ1bmN0aW9uIGVuY29kZUFkZHJlc3ModmFsdWUpIHsKICAgIGlmICghaXNBZGRyZXNzKHZhbHVlKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB2YWx1ZSB9KTsKICAgIHJldHVybiB7IGR5bmFtaWM6IGZhbHNlLCBlbmNvZGVkOiBwYWRIZXgodmFsdWUudG9Mb3dlckNhc2UoKSkgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlQXJyYXkodmFsdWUsIHsgbGVuZ3RoLCBwYXJhbSB9KSB7CiAgICBjb25zdCBkeW5hbWljID0gbGVuZ3RoID09PSBudWxsOwogICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBcnJheUVycm9yKHZhbHVlKTsKICAgIGlmICghZHluYW1pYyAmJiB2YWx1ZS5sZW5ndGggIT09IGxlbmd0aCkKICAgICAgdGhyb3cgbmV3IEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yKHsKICAgICAgICBleHBlY3RlZExlbmd0aDogbGVuZ3RoLAogICAgICAgIGdpdmVuTGVuZ3RoOiB2YWx1ZS5sZW5ndGgsCiAgICAgICAgdHlwZTogYCR7cGFyYW0udHlwZX1bJHtsZW5ndGh9XWAKICAgICAgfSk7CiAgICBsZXQgZHluYW1pY0NoaWxkID0gZmFsc2U7CiAgICBjb25zdCBwcmVwYXJlZFBhcmFtcyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBwcmVwYXJlZFBhcmFtID0gcHJlcGFyZVBhcmFtKHsgcGFyYW0sIHZhbHVlOiB2YWx1ZVtpXSB9KTsKICAgICAgaWYgKHByZXBhcmVkUGFyYW0uZHluYW1pYykKICAgICAgICBkeW5hbWljQ2hpbGQgPSB0cnVlOwogICAgICBwcmVwYXJlZFBhcmFtcy5wdXNoKHByZXBhcmVkUGFyYW0pOwogICAgfQogICAgaWYgKGR5bmFtaWMgfHwgZHluYW1pY0NoaWxkKSB7CiAgICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVQYXJhbXMocHJlcGFyZWRQYXJhbXMpOwogICAgICBpZiAoZHluYW1pYykgewogICAgICAgIGNvbnN0IGxlbmd0aDIgPSBudW1iZXJUb0hleChwcmVwYXJlZFBhcmFtcy5sZW5ndGgsIHsgc2l6ZTogMzIgfSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGR5bmFtaWM6IHRydWUsCiAgICAgICAgICBlbmNvZGVkOiBwcmVwYXJlZFBhcmFtcy5sZW5ndGggPiAwID8gY29uY2F0KFtsZW5ndGgyLCBkYXRhXSkgOiBsZW5ndGgyCiAgICAgICAgfTsKICAgICAgfQogICAgICBpZiAoZHluYW1pY0NoaWxkKQogICAgICAgIHJldHVybiB7IGR5bmFtaWM6IHRydWUsIGVuY29kZWQ6IGRhdGEgfTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIGR5bmFtaWM6IGZhbHNlLAogICAgICBlbmNvZGVkOiBjb25jYXQocHJlcGFyZWRQYXJhbXMubWFwKCh7IGVuY29kZWQgfSkgPT4gZW5jb2RlZCkpCiAgICB9OwogIH0KICBmdW5jdGlvbiBlbmNvZGVCeXRlcyh2YWx1ZSwgeyBwYXJhbSB9KSB7CiAgICBjb25zdCBbLCBwYXJhbVNpemVdID0gcGFyYW0udHlwZS5zcGxpdCgiYnl0ZXMiKTsKICAgIGNvbnN0IGJ5dGVzU2l6ZSA9IHNpemUodmFsdWUpOwogICAgaWYgKCFwYXJhbVNpemUpIHsKICAgICAgbGV0IHZhbHVlXyA9IHZhbHVlOwogICAgICBpZiAoYnl0ZXNTaXplICUgMzIgIT09IDApCiAgICAgICAgdmFsdWVfID0gcGFkSGV4KHZhbHVlXywgewogICAgICAgICAgZGlyOiAicmlnaHQiLAogICAgICAgICAgc2l6ZTogTWF0aC5jZWlsKCh2YWx1ZS5sZW5ndGggLSAyKSAvIDIgLyAzMikgKiAzMgogICAgICAgIH0pOwogICAgICByZXR1cm4gewogICAgICAgIGR5bmFtaWM6IHRydWUsCiAgICAgICAgZW5jb2RlZDogY29uY2F0KFtwYWRIZXgobnVtYmVyVG9IZXgoYnl0ZXNTaXplLCB7IHNpemU6IDMyIH0pKSwgdmFsdWVfXSkKICAgICAgfTsKICAgIH0KICAgIGlmIChieXRlc1NpemUgIT09IE51bWJlci5wYXJzZUludChwYXJhbVNpemUpKQogICAgICB0aHJvdyBuZXcgQWJpRW5jb2RpbmdCeXRlc1NpemVNaXNtYXRjaEVycm9yKHsKICAgICAgICBleHBlY3RlZFNpemU6IE51bWJlci5wYXJzZUludChwYXJhbVNpemUpLAogICAgICAgIHZhbHVlCiAgICAgIH0pOwogICAgcmV0dXJuIHsgZHluYW1pYzogZmFsc2UsIGVuY29kZWQ6IHBhZEhleCh2YWx1ZSwgeyBkaXI6ICJyaWdodCIgfSkgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlQm9vbCh2YWx1ZSkgewogICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gImJvb2xlYW4iKQogICAgICB0aHJvdyBuZXcgQmFzZUVycm9yMihgSW52YWxpZCBib29sZWFuIHZhbHVlOiAiJHt2YWx1ZX0iICh0eXBlOiAke3R5cGVvZiB2YWx1ZX0pLiBFeHBlY3RlZDogXGB0cnVlXGAgb3IgXGBmYWxzZVxgLmApOwogICAgcmV0dXJuIHsgZHluYW1pYzogZmFsc2UsIGVuY29kZWQ6IHBhZEhleChib29sVG9IZXgodmFsdWUpKSB9OwogIH0KICBmdW5jdGlvbiBlbmNvZGVOdW1iZXIodmFsdWUsIHsgc2lnbmVkIH0pIHsKICAgIHJldHVybiB7CiAgICAgIGR5bmFtaWM6IGZhbHNlLAogICAgICBlbmNvZGVkOiBudW1iZXJUb0hleCh2YWx1ZSwgewogICAgICAgIHNpemU6IDMyLAogICAgICAgIHNpZ25lZAogICAgICB9KQogICAgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlU3RyaW5nKHZhbHVlKSB7CiAgICBjb25zdCBoZXhWYWx1ZSA9IHN0cmluZ1RvSGV4KHZhbHVlKTsKICAgIGNvbnN0IHBhcnRzTGVuZ3RoID0gTWF0aC5jZWlsKHNpemUoaGV4VmFsdWUpIC8gMzIpOwogICAgY29uc3QgcGFydHMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHNMZW5ndGg7IGkrKykgewogICAgICBwYXJ0cy5wdXNoKHBhZEhleChzbGljZShoZXhWYWx1ZSwgaSAqIDMyLCAoaSArIDEpICogMzIpLCB7CiAgICAgICAgZGlyOiAicmlnaHQiCiAgICAgIH0pKTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIGR5bmFtaWM6IHRydWUsCiAgICAgIGVuY29kZWQ6IGNvbmNhdChbCiAgICAgICAgcGFkSGV4KG51bWJlclRvSGV4KHNpemUoaGV4VmFsdWUpLCB7IHNpemU6IDMyIH0pKSwKICAgICAgICAuLi5wYXJ0cwogICAgICBdKQogICAgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlVHVwbGUodmFsdWUsIHsgcGFyYW0gfSkgewogICAgbGV0IGR5bmFtaWMgPSBmYWxzZTsKICAgIGNvbnN0IHByZXBhcmVkUGFyYW1zID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtLmNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgcGFyYW1fID0gcGFyYW0uY29tcG9uZW50c1tpXTsKICAgICAgY29uc3QgaW5kZXgyID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBpIDogcGFyYW1fLm5hbWU7CiAgICAgIGNvbnN0IHByZXBhcmVkUGFyYW0gPSBwcmVwYXJlUGFyYW0oewogICAgICAgIHBhcmFtOiBwYXJhbV8sCiAgICAgICAgdmFsdWU6IHZhbHVlW2luZGV4Ml0KICAgICAgfSk7CiAgICAgIHByZXBhcmVkUGFyYW1zLnB1c2gocHJlcGFyZWRQYXJhbSk7CiAgICAgIGlmIChwcmVwYXJlZFBhcmFtLmR5bmFtaWMpCiAgICAgICAgZHluYW1pYyA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gewogICAgICBkeW5hbWljLAogICAgICBlbmNvZGVkOiBkeW5hbWljID8gZW5jb2RlUGFyYW1zKHByZXBhcmVkUGFyYW1zKSA6IGNvbmNhdChwcmVwYXJlZFBhcmFtcy5tYXAoKHsgZW5jb2RlZCB9KSA9PiBlbmNvZGVkKSkKICAgIH07CiAgfQogIGZ1bmN0aW9uIGdldEFycmF5Q29tcG9uZW50cyh0eXBlKSB7CiAgICBjb25zdCBtYXRjaGVzID0gdHlwZS5tYXRjaCgvXiguKilcWyhcZCspP1xdJC8pOwogICAgcmV0dXJuIG1hdGNoZXMgPyAoCiAgICAgIC8vIFJldHVybiBgbnVsbGAgaWYgdGhlIGFycmF5IGlzIGR5bmFtaWMuCiAgICAgIFttYXRjaGVzWzJdID8gTnVtYmVyKG1hdGNoZXNbMl0pIDogbnVsbCwgbWF0Y2hlc1sxXV0KICAgICkgOiB2b2lkIDA7CiAgfQogIHZhciBpbml0X2VuY29kZUFiaVBhcmFtZXRlcnMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlQWJpUGFyYW1ldGVycy5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfYWRkcmVzcygpOwogICAgICBpbml0X2Jhc2UoKTsKICAgICAgaW5pdF9pc0FkZHJlc3MoKTsKICAgICAgaW5pdF9jb25jYXQoKTsKICAgICAgaW5pdF9wYWQoKTsKICAgICAgaW5pdF9zaXplKCk7CiAgICAgIGluaXRfc2xpY2UoKTsKICAgICAgaW5pdF90b0hleCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9GdW5jdGlvblNlbGVjdG9yLmpzCiAgdmFyIHRvRnVuY3Rpb25TZWxlY3RvcjsKICB2YXIgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvRnVuY3Rpb25TZWxlY3Rvci5qcyIoKSB7CiAgICAgIGluaXRfc2xpY2UoKTsKICAgICAgaW5pdF90b1NpZ25hdHVyZUhhc2goKTsKICAgICAgdG9GdW5jdGlvblNlbGVjdG9yID0gKGZuKSA9PiBzbGljZSh0b1NpZ25hdHVyZUhhc2goZm4pLCAwLCA0KTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZ2V0QWJpSXRlbS5qcwogIGZ1bmN0aW9uIGdldEFiaUl0ZW0ocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFyZ3MgPSBbXSwgbmFtZSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGlzU2VsZWN0b3IgPSBpc0hleChuYW1lLCB7IHN0cmljdDogZmFsc2UgfSk7CiAgICBjb25zdCBhYmlJdGVtcyA9IGFiaTIuZmlsdGVyKChhYmlJdGVtKSA9PiB7CiAgICAgIGlmIChpc1NlbGVjdG9yKSB7CiAgICAgICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImZ1bmN0aW9uIikKICAgICAgICAgIHJldHVybiB0b0Z1bmN0aW9uU2VsZWN0b3IoYWJpSXRlbSkgPT09IG5hbWU7CiAgICAgICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImV2ZW50IikKICAgICAgICAgIHJldHVybiB0b0V2ZW50U2VsZWN0b3IoYWJpSXRlbSkgPT09IG5hbWU7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiAibmFtZSIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLm5hbWUgPT09IG5hbWU7CiAgICB9KTsKICAgIGlmIChhYmlJdGVtcy5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiB2b2lkIDA7CiAgICBpZiAoYWJpSXRlbXMubGVuZ3RoID09PSAxKQogICAgICByZXR1cm4gYWJpSXRlbXNbMF07CiAgICBsZXQgbWF0Y2hlZEFiaUl0ZW0gPSB2b2lkIDA7CiAgICBmb3IgKGNvbnN0IGFiaUl0ZW0gb2YgYWJpSXRlbXMpIHsKICAgICAgaWYgKCEoImlucHV0cyIgaW4gYWJpSXRlbSkpCiAgICAgICAgY29udGludWU7CiAgICAgIGlmICghYXJncyB8fCBhcmdzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIGlmICghYWJpSXRlbS5pbnB1dHMgfHwgYWJpSXRlbS5pbnB1dHMubGVuZ3RoID09PSAwKQogICAgICAgICAgcmV0dXJuIGFiaUl0ZW07CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKCFhYmlJdGVtLmlucHV0cykKICAgICAgICBjb250aW51ZTsKICAgICAgaWYgKGFiaUl0ZW0uaW5wdXRzLmxlbmd0aCA9PT0gMCkKICAgICAgICBjb250aW51ZTsKICAgICAgaWYgKGFiaUl0ZW0uaW5wdXRzLmxlbmd0aCAhPT0gYXJncy5sZW5ndGgpCiAgICAgICAgY29udGludWU7CiAgICAgIGNvbnN0IG1hdGNoZWQgPSBhcmdzLmV2ZXJ5KChhcmcsIGluZGV4MikgPT4gewogICAgICAgIGNvbnN0IGFiaVBhcmFtZXRlciA9ICJpbnB1dHMiIGluIGFiaUl0ZW0gJiYgYWJpSXRlbS5pbnB1dHNbaW5kZXgyXTsKICAgICAgICBpZiAoIWFiaVBhcmFtZXRlcikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gaXNBcmdPZlR5cGUoYXJnLCBhYmlQYXJhbWV0ZXIpOwogICAgICB9KTsKICAgICAgaWYgKG1hdGNoZWQpIHsKICAgICAgICBpZiAobWF0Y2hlZEFiaUl0ZW0gJiYgImlucHV0cyIgaW4gbWF0Y2hlZEFiaUl0ZW0gJiYgbWF0Y2hlZEFiaUl0ZW0uaW5wdXRzKSB7CiAgICAgICAgICBjb25zdCBhbWJpZ3VvdXNUeXBlcyA9IGdldEFtYmlndW91c1R5cGVzKGFiaUl0ZW0uaW5wdXRzLCBtYXRjaGVkQWJpSXRlbS5pbnB1dHMsIGFyZ3MpOwogICAgICAgICAgaWYgKGFtYmlndW91c1R5cGVzKQogICAgICAgICAgICB0aHJvdyBuZXcgQWJpSXRlbUFtYmlndWl0eUVycm9yKHsKICAgICAgICAgICAgICBhYmlJdGVtLAogICAgICAgICAgICAgIHR5cGU6IGFtYmlndW91c1R5cGVzWzBdCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICBhYmlJdGVtOiBtYXRjaGVkQWJpSXRlbSwKICAgICAgICAgICAgICB0eXBlOiBhbWJpZ3VvdXNUeXBlc1sxXQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgbWF0Y2hlZEFiaUl0ZW0gPSBhYmlJdGVtOwogICAgICB9CiAgICB9CiAgICBpZiAobWF0Y2hlZEFiaUl0ZW0pCiAgICAgIHJldHVybiBtYXRjaGVkQWJpSXRlbTsKICAgIHJldHVybiBhYmlJdGVtc1swXTsKICB9CiAgZnVuY3Rpb24gaXNBcmdPZlR5cGUoYXJnLCBhYmlQYXJhbWV0ZXIpIHsKICAgIGNvbnN0IGFyZ1R5cGUgPSB0eXBlb2YgYXJnOwogICAgY29uc3QgYWJpUGFyYW1ldGVyVHlwZSA9IGFiaVBhcmFtZXRlci50eXBlOwogICAgc3dpdGNoIChhYmlQYXJhbWV0ZXJUeXBlKSB7CiAgICAgIGNhc2UgImFkZHJlc3MiOgogICAgICAgIHJldHVybiBpc0FkZHJlc3MoYXJnLCB7IHN0cmljdDogZmFsc2UgfSk7CiAgICAgIGNhc2UgImJvb2wiOgogICAgICAgIHJldHVybiBhcmdUeXBlID09PSAiYm9vbGVhbiI7CiAgICAgIGNhc2UgImZ1bmN0aW9uIjoKICAgICAgICByZXR1cm4gYXJnVHlwZSA9PT0gInN0cmluZyI7CiAgICAgIGNhc2UgInN0cmluZyI6CiAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT09ICJzdHJpbmciOwogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaWYgKGFiaVBhcmFtZXRlclR5cGUgPT09ICJ0dXBsZSIgJiYgImNvbXBvbmVudHMiIGluIGFiaVBhcmFtZXRlcikKICAgICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGFiaVBhcmFtZXRlci5jb21wb25lbnRzKS5ldmVyeSgoY29tcG9uZW50LCBpbmRleDIpID0+IHsKICAgICAgICAgICAgcmV0dXJuIGlzQXJnT2ZUeXBlKE9iamVjdC52YWx1ZXMoYXJnKVtpbmRleDJdLCBjb21wb25lbnQpOwogICAgICAgICAgfSk7CiAgICAgICAgaWYgKC9edT9pbnQoOHwxNnwyNHwzMnw0MHw0OHw1Nnw2NHw3Mnw4MHw4OHw5NnwxMDR8MTEyfDEyMHwxMjh8MTM2fDE0NHwxNTJ8MTYwfDE2OHwxNzZ8MTg0fDE5MnwyMDB8MjA4fDIxNnwyMjR8MjMyfDI0MHwyNDh8MjU2KT8kLy50ZXN0KGFiaVBhcmFtZXRlclR5cGUpKQogICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT09ICJudW1iZXIiIHx8IGFyZ1R5cGUgPT09ICJiaWdpbnQiOwogICAgICAgIGlmICgvXmJ5dGVzKFsxLTldfDFbMC05XXwyWzAtOV18M1swLTJdKT8kLy50ZXN0KGFiaVBhcmFtZXRlclR5cGUpKQogICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT09ICJzdHJpbmciIHx8IGFyZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk7CiAgICAgICAgaWYgKC9bYS16XStbMS05XXswLDN9KFxbWzAtOV17MCx9XF0pKyQvLnRlc3QoYWJpUGFyYW1ldGVyVHlwZSkpIHsKICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFyZykgJiYgYXJnLmV2ZXJ5KCh4KSA9PiBpc0FyZ09mVHlwZSh4LCB7CiAgICAgICAgICAgIC4uLmFiaVBhcmFtZXRlciwKICAgICAgICAgICAgLy8gUG9wIG9mZiBgW11gIG9yIGBbTV1gIGZyb20gZW5kIG9mIHR5cGUKICAgICAgICAgICAgdHlwZTogYWJpUGFyYW1ldGVyVHlwZS5yZXBsYWNlKC8oXFtbMC05XXswLH1cXSkkLywgIiIpCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiBnZXRBbWJpZ3VvdXNUeXBlcyhzb3VyY2VQYXJhbWV0ZXJzLCB0YXJnZXRQYXJhbWV0ZXJzLCBhcmdzKSB7CiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlckluZGV4IGluIHNvdXJjZVBhcmFtZXRlcnMpIHsKICAgICAgY29uc3Qgc291cmNlUGFyYW1ldGVyID0gc291cmNlUGFyYW1ldGVyc1twYXJhbWV0ZXJJbmRleF07CiAgICAgIGNvbnN0IHRhcmdldFBhcmFtZXRlciA9IHRhcmdldFBhcmFtZXRlcnNbcGFyYW1ldGVySW5kZXhdOwogICAgICBpZiAoc291cmNlUGFyYW1ldGVyLnR5cGUgPT09ICJ0dXBsZSIgJiYgdGFyZ2V0UGFyYW1ldGVyLnR5cGUgPT09ICJ0dXBsZSIgJiYgImNvbXBvbmVudHMiIGluIHNvdXJjZVBhcmFtZXRlciAmJiAiY29tcG9uZW50cyIgaW4gdGFyZ2V0UGFyYW1ldGVyKQogICAgICAgIHJldHVybiBnZXRBbWJpZ3VvdXNUeXBlcyhzb3VyY2VQYXJhbWV0ZXIuY29tcG9uZW50cywgdGFyZ2V0UGFyYW1ldGVyLmNvbXBvbmVudHMsIGFyZ3NbcGFyYW1ldGVySW5kZXhdKTsKICAgICAgY29uc3QgdHlwZXMgPSBbc291cmNlUGFyYW1ldGVyLnR5cGUsIHRhcmdldFBhcmFtZXRlci50eXBlXTsKICAgICAgY29uc3QgYW1iaWd1b3VzID0gKCgpID0+IHsKICAgICAgICBpZiAodHlwZXMuaW5jbHVkZXMoImFkZHJlc3MiKSAmJiB0eXBlcy5pbmNsdWRlcygiYnl0ZXMyMCIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKHR5cGVzLmluY2x1ZGVzKCJhZGRyZXNzIikgJiYgdHlwZXMuaW5jbHVkZXMoInN0cmluZyIpKQogICAgICAgICAgcmV0dXJuIGlzQWRkcmVzcyhhcmdzW3BhcmFtZXRlckluZGV4XSwgeyBzdHJpY3Q6IGZhbHNlIH0pOwogICAgICAgIGlmICh0eXBlcy5pbmNsdWRlcygiYWRkcmVzcyIpICYmIHR5cGVzLmluY2x1ZGVzKCJieXRlcyIpKQogICAgICAgICAgcmV0dXJuIGlzQWRkcmVzcyhhcmdzW3BhcmFtZXRlckluZGV4XSwgeyBzdHJpY3Q6IGZhbHNlIH0pOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSkoKTsKICAgICAgaWYgKGFtYmlndW91cykKICAgICAgICByZXR1cm4gdHlwZXM7CiAgICB9CiAgICByZXR1cm47CiAgfQogIHZhciBpbml0X2dldEFiaUl0ZW0gPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZ2V0QWJpSXRlbS5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfaXNIZXgoKTsKICAgICAgaW5pdF9pc0FkZHJlc3MoKTsKICAgICAgaW5pdF90b0V2ZW50U2VsZWN0b3IoKTsKICAgICAgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9wYXJzZUFjY291bnQuanMKICBmdW5jdGlvbiBwYXJzZUFjY291bnQoYWNjb3VudCkgewogICAgaWYgKHR5cGVvZiBhY2NvdW50ID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIHsgYWRkcmVzczogYWNjb3VudCwgdHlwZTogImpzb24tcnBjIiB9OwogICAgcmV0dXJuIGFjY291bnQ7CiAgfQogIHZhciBpbml0X3BhcnNlQWNjb3VudCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjY291bnRzL3V0aWxzL3BhcnNlQWNjb3VudC5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL3ByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEuanMKICBmdW5jdGlvbiBwcmVwYXJlRW5jb2RlRnVuY3Rpb25EYXRhKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhcmdzLCBmdW5jdGlvbk5hbWUgfSA9IHBhcmFtZXRlcnM7CiAgICBsZXQgYWJpSXRlbSA9IGFiaTJbMF07CiAgICBpZiAoZnVuY3Rpb25OYW1lKSB7CiAgICAgIGNvbnN0IGl0ZW0gPSBnZXRBYmlJdGVtKHsKICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgYXJncywKICAgICAgICBuYW1lOiBmdW5jdGlvbk5hbWUKICAgICAgfSk7CiAgICAgIGlmICghaXRlbSkKICAgICAgICB0aHJvdyBuZXcgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yKGZ1bmN0aW9uTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGgyIH0pOwogICAgICBhYmlJdGVtID0gaXRlbTsKICAgIH0KICAgIGlmIChhYmlJdGVtLnR5cGUgIT09ICJmdW5jdGlvbiIpCiAgICAgIHRocm93IG5ldyBBYmlGdW5jdGlvbk5vdEZvdW5kRXJyb3Iodm9pZCAwLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDIgfSk7CiAgICByZXR1cm4gewogICAgICBhYmk6IFthYmlJdGVtXSwKICAgICAgZnVuY3Rpb25OYW1lOiB0b0Z1bmN0aW9uU2VsZWN0b3IoZm9ybWF0QWJpSXRlbTIoYWJpSXRlbSkpCiAgICB9OwogIH0KICB2YXIgZG9jc1BhdGgyOwogIHZhciBpbml0X3ByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvcHJlcGFyZUVuY29kZUZ1bmN0aW9uRGF0YS5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfdG9GdW5jdGlvblNlbGVjdG9yKCk7CiAgICAgIGluaXRfZm9ybWF0QWJpSXRlbTIoKTsKICAgICAgaW5pdF9nZXRBYmlJdGVtKCk7CiAgICAgIGRvY3NQYXRoMiA9ICIvZG9jcy9jb250cmFjdC9lbmNvZGVGdW5jdGlvbkRhdGEiOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVGdW5jdGlvbkRhdGEuanMKICBmdW5jdGlvbiBlbmNvZGVGdW5jdGlvbkRhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhcmdzIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgeyBhYmk6IGFiaTIsIGZ1bmN0aW9uTmFtZSB9ID0gKCgpID0+IHsKICAgICAgaWYgKHBhcmFtZXRlcnMuYWJpLmxlbmd0aCA9PT0gMSAmJiBwYXJhbWV0ZXJzLmZ1bmN0aW9uTmFtZT8uc3RhcnRzV2l0aCgiMHgiKSkKICAgICAgICByZXR1cm4gcGFyYW1ldGVyczsKICAgICAgcmV0dXJuIHByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEocGFyYW1ldGVycyk7CiAgICB9KSgpOwogICAgY29uc3QgYWJpSXRlbSA9IGFiaTJbMF07CiAgICBjb25zdCBzaWduYXR1cmUgPSBmdW5jdGlvbk5hbWU7CiAgICBjb25zdCBkYXRhID0gImlucHV0cyIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLmlucHV0cyA/IGVuY29kZUFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMsIGFyZ3MgPz8gW10pIDogdm9pZCAwOwogICAgcmV0dXJuIGNvbmNhdEhleChbc2lnbmF0dXJlLCBkYXRhID8/ICIweCJdKTsKICB9CiAgdmFyIGluaXRfZW5jb2RlRnVuY3Rpb25EYXRhID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2VuY29kZUZ1bmN0aW9uRGF0YS5qcyIoKSB7CiAgICAgIGluaXRfY29uY2F0KCk7CiAgICAgIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogICAgICBpbml0X3ByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMvc29saWRpdHkuanMKICB2YXIgcGFuaWNSZWFzb25zLCBzb2xpZGl0eUVycm9yLCBzb2xpZGl0eVBhbmljOwogIHZhciBpbml0X3NvbGlkaXR5ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL3NvbGlkaXR5LmpzIigpIHsKICAgICAgcGFuaWNSZWFzb25zID0gewogICAgICAgIDE6ICJBbiBgYXNzZXJ0YCBjb25kaXRpb24gZmFpbGVkLiIsCiAgICAgICAgMTc6ICJBcml0aG1ldGljIG9wZXJhdGlvbiByZXN1bHRlZCBpbiB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cuIiwKICAgICAgICAxODogIkRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvIChlLmcuIGA1IC8gMGAgb3IgYDIzICUgMGApLiIsCiAgICAgICAgMzM6ICJBdHRlbXB0ZWQgdG8gY29udmVydCB0byBhbiBpbnZhbGlkIHR5cGUuIiwKICAgICAgICAzNDogIkF0dGVtcHRlZCB0byBhY2Nlc3MgYSBzdG9yYWdlIGJ5dGUgYXJyYXkgdGhhdCBpcyBpbmNvcnJlY3RseSBlbmNvZGVkLiIsCiAgICAgICAgNDk6ICJQZXJmb3JtZWQgYC5wb3AoKWAgb24gYW4gZW1wdHkgYXJyYXkiLAogICAgICAgIDUwOiAiQXJyYXkgaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4iLAogICAgICAgIDY1OiAiQWxsb2NhdGVkIHRvbyBtdWNoIG1lbW9yeSBvciBjcmVhdGVkIGFuIGFycmF5IHdoaWNoIGlzIHRvbyBsYXJnZS4iLAogICAgICAgIDgxOiAiQXR0ZW1wdGVkIHRvIGNhbGwgYSB6ZXJvLWluaXRpYWxpemVkIHZhcmlhYmxlIG9mIGludGVybmFsIGZ1bmN0aW9uIHR5cGUuIgogICAgICB9OwogICAgICBzb2xpZGl0eUVycm9yID0gewogICAgICAgIGlucHV0czogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAibWVzc2FnZSIsCiAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICBuYW1lOiAiRXJyb3IiLAogICAgICAgIHR5cGU6ICJlcnJvciIKICAgICAgfTsKICAgICAgc29saWRpdHlQYW5pYyA9IHsKICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogInJlYXNvbiIsCiAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgbmFtZTogIlBhbmljIiwKICAgICAgICB0eXBlOiAiZXJyb3IiCiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2N1cnNvci5qcwogIHZhciBOZWdhdGl2ZU9mZnNldEVycm9yLCBQb3NpdGlvbk91dE9mQm91bmRzRXJyb3IsIFJlY3Vyc2l2ZVJlYWRMaW1pdEV4Y2VlZGVkRXJyb3I7CiAgdmFyIGluaXRfY3Vyc29yID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2N1cnNvci5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBOZWdhdGl2ZU9mZnNldEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IG9mZnNldCB9KSB7CiAgICAgICAgICBzdXBlcihgT2Zmc2V0IFxgJHtvZmZzZXR9XGAgY2Fubm90IGJlIG5lZ2F0aXZlLmAsIHsKICAgICAgICAgICAgbmFtZTogIk5lZ2F0aXZlT2Zmc2V0RXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFBvc2l0aW9uT3V0T2ZCb3VuZHNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBsZW5ndGgsIHBvc2l0aW9uIH0pIHsKICAgICAgICAgIHN1cGVyKGBQb3NpdGlvbiBcYCR7cG9zaXRpb259XGAgaXMgb3V0IG9mIGJvdW5kcyAoXGAwIDwgcG9zaXRpb24gPCAke2xlbmd0aH1cYCkuYCwgeyBuYW1lOiAiUG9zaXRpb25PdXRPZkJvdW5kc0Vycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFJlY3Vyc2l2ZVJlYWRMaW1pdEV4Y2VlZGVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY291bnQsIGxpbWl0IH0pIHsKICAgICAgICAgIHN1cGVyKGBSZWN1cnNpdmUgcmVhZCBsaW1pdCBvZiBcYCR7bGltaXR9XGAgZXhjZWVkZWQgKHJlY3Vyc2l2ZSByZWFkIGNvdW50OiBcYCR7Y291bnR9XGApLmAsIHsgbmFtZTogIlJlY3Vyc2l2ZVJlYWRMaW1pdEV4Y2VlZGVkRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9jdXJzb3IuanMKICBmdW5jdGlvbiBjcmVhdGVDdXJzb3IoYnl0ZXMyLCB7IHJlY3Vyc2l2ZVJlYWRMaW1pdCA9IDgxOTIgfSA9IHt9KSB7CiAgICBjb25zdCBjdXJzb3IgPSBPYmplY3QuY3JlYXRlKHN0YXRpY0N1cnNvcik7CiAgICBjdXJzb3IuYnl0ZXMgPSBieXRlczI7CiAgICBjdXJzb3IuZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYnl0ZXMyLmJ1ZmZlciwgYnl0ZXMyLmJ5dGVPZmZzZXQsIGJ5dGVzMi5ieXRlTGVuZ3RoKTsKICAgIGN1cnNvci5wb3NpdGlvblJlYWRDb3VudCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBjdXJzb3IucmVjdXJzaXZlUmVhZExpbWl0ID0gcmVjdXJzaXZlUmVhZExpbWl0OwogICAgcmV0dXJuIGN1cnNvcjsKICB9CiAgdmFyIHN0YXRpY0N1cnNvcjsKICB2YXIgaW5pdF9jdXJzb3IyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY3Vyc29yLmpzIigpIHsKICAgICAgaW5pdF9jdXJzb3IoKTsKICAgICAgc3RhdGljQ3Vyc29yID0gewogICAgICAgIGJ5dGVzOiBuZXcgVWludDhBcnJheSgpLAogICAgICAgIGRhdGFWaWV3OiBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDApKSwKICAgICAgICBwb3NpdGlvbjogMCwKICAgICAgICBwb3NpdGlvblJlYWRDb3VudDogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwKICAgICAgICByZWN1cnNpdmVSZWFkQ291bnQ6IDAsCiAgICAgICAgcmVjdXJzaXZlUmVhZExpbWl0OiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksCiAgICAgICAgYXNzZXJ0UmVhZExpbWl0KCkgewogICAgICAgICAgaWYgKHRoaXMucmVjdXJzaXZlUmVhZENvdW50ID49IHRoaXMucmVjdXJzaXZlUmVhZExpbWl0KQogICAgICAgICAgICB0aHJvdyBuZXcgUmVjdXJzaXZlUmVhZExpbWl0RXhjZWVkZWRFcnJvcih7CiAgICAgICAgICAgICAgY291bnQ6IHRoaXMucmVjdXJzaXZlUmVhZENvdW50ICsgMSwKICAgICAgICAgICAgICBsaW1pdDogdGhpcy5yZWN1cnNpdmVSZWFkTGltaXQKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBhc3NlcnRQb3NpdGlvbihwb3NpdGlvbikgewogICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+IHRoaXMuYnl0ZXMubGVuZ3RoIC0gMSkKICAgICAgICAgICAgdGhyb3cgbmV3IFBvc2l0aW9uT3V0T2ZCb3VuZHNFcnJvcih7CiAgICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmJ5dGVzLmxlbmd0aCwKICAgICAgICAgICAgICBwb3NpdGlvbgogICAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGRlY3JlbWVudFBvc2l0aW9uKG9mZnNldCkgewogICAgICAgICAgaWYgKG9mZnNldCA8IDApCiAgICAgICAgICAgIHRocm93IG5ldyBOZWdhdGl2ZU9mZnNldEVycm9yKHsgb2Zmc2V0IH0pOwogICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uIC0gb2Zmc2V0OwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbik7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgICAgfSwKICAgICAgICBnZXRSZWFkQ291bnQocG9zaXRpb24pIHsKICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uUmVhZENvdW50LmdldChwb3NpdGlvbiB8fCB0aGlzLnBvc2l0aW9uKSB8fCAwOwogICAgICAgIH0sCiAgICAgICAgaW5jcmVtZW50UG9zaXRpb24ob2Zmc2V0KSB7CiAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkKICAgICAgICAgICAgdGhyb3cgbmV3IE5lZ2F0aXZlT2Zmc2V0RXJyb3IoeyBvZmZzZXQgfSk7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb24gKyBvZmZzZXQ7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RCeXRlKHBvc2l0aW9uXykgewogICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbl8gPz8gdGhpcy5wb3NpdGlvbjsKICAgICAgICAgIHRoaXMuYXNzZXJ0UG9zaXRpb24ocG9zaXRpb24pOwogICAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZXNbcG9zaXRpb25dOwogICAgICAgIH0sCiAgICAgICAgaW5zcGVjdEJ5dGVzKGxlbmd0aCwgcG9zaXRpb25fKSB7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uXyA/PyB0aGlzLnBvc2l0aW9uOwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbiArIGxlbmd0aCAtIDEpOwogICAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZXMuc3ViYXJyYXkocG9zaXRpb24sIHBvc2l0aW9uICsgbGVuZ3RoKTsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RVaW50OChwb3NpdGlvbl8pIHsKICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gcG9zaXRpb25fID8/IHRoaXMucG9zaXRpb247CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICAgICAgIHJldHVybiB0aGlzLmJ5dGVzW3Bvc2l0aW9uXTsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RVaW50MTYocG9zaXRpb25fKSB7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uXyA/PyB0aGlzLnBvc2l0aW9uOwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbiArIDEpOwogICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0VWludDE2KHBvc2l0aW9uKTsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RVaW50MjQocG9zaXRpb25fKSB7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uXyA/PyB0aGlzLnBvc2l0aW9uOwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbiArIDIpOwogICAgICAgICAgcmV0dXJuICh0aGlzLmRhdGFWaWV3LmdldFVpbnQxNihwb3NpdGlvbikgPDwgOCkgKyB0aGlzLmRhdGFWaWV3LmdldFVpbnQ4KHBvc2l0aW9uICsgMik7CiAgICAgICAgfSwKICAgICAgICBpbnNwZWN0VWludDMyKHBvc2l0aW9uXykgewogICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbl8gPz8gdGhpcy5wb3NpdGlvbjsKICAgICAgICAgIHRoaXMuYXNzZXJ0UG9zaXRpb24ocG9zaXRpb24gKyAzKTsKICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldFVpbnQzMihwb3NpdGlvbik7CiAgICAgICAgfSwKICAgICAgICBwdXNoQnl0ZShieXRlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24pOwogICAgICAgICAgdGhpcy5ieXRlc1t0aGlzLnBvc2l0aW9uXSA9IGJ5dGU7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uKys7CiAgICAgICAgfSwKICAgICAgICBwdXNoQnl0ZXMoYnl0ZXMyKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24gKyBieXRlczIubGVuZ3RoIC0gMSk7CiAgICAgICAgICB0aGlzLmJ5dGVzLnNldChieXRlczIsIHRoaXMucG9zaXRpb24pOwogICAgICAgICAgdGhpcy5wb3NpdGlvbiArPSBieXRlczIubGVuZ3RoOwogICAgICAgIH0sCiAgICAgICAgcHVzaFVpbnQ4KHZhbHVlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24pOwogICAgICAgICAgdGhpcy5ieXRlc1t0aGlzLnBvc2l0aW9uXSA9IHZhbHVlOwogICAgICAgICAgdGhpcy5wb3NpdGlvbisrOwogICAgICAgIH0sCiAgICAgICAgcHVzaFVpbnQxNih2YWx1ZSkgewogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbih0aGlzLnBvc2l0aW9uICsgMSk7CiAgICAgICAgICB0aGlzLmRhdGFWaWV3LnNldFVpbnQxNih0aGlzLnBvc2l0aW9uLCB2YWx1ZSk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDI7CiAgICAgICAgfSwKICAgICAgICBwdXNoVWludDI0KHZhbHVlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24gKyAyKTsKICAgICAgICAgIHRoaXMuZGF0YVZpZXcuc2V0VWludDE2KHRoaXMucG9zaXRpb24sIHZhbHVlID4+IDgpOwogICAgICAgICAgdGhpcy5kYXRhVmlldy5zZXRVaW50OCh0aGlzLnBvc2l0aW9uICsgMiwgdmFsdWUgJiB+NDI5NDk2NzA0MCk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDM7CiAgICAgICAgfSwKICAgICAgICBwdXNoVWludDMyKHZhbHVlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24gKyAzKTsKICAgICAgICAgIHRoaXMuZGF0YVZpZXcuc2V0VWludDMyKHRoaXMucG9zaXRpb24sIHZhbHVlKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gKz0gNDsKICAgICAgICB9LAogICAgICAgIHJlYWRCeXRlKCkgewogICAgICAgICAgdGhpcy5hc3NlcnRSZWFkTGltaXQoKTsKICAgICAgICAgIHRoaXMuX3RvdWNoKCk7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zcGVjdEJ5dGUoKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24rKzsKICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9LAogICAgICAgIHJlYWRCeXRlcyhsZW5ndGgsIHNpemUzKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFJlYWRMaW1pdCgpOwogICAgICAgICAgdGhpcy5fdG91Y2goKTsKICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnNwZWN0Qnl0ZXMobGVuZ3RoKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gKz0gc2l6ZTMgPz8gbGVuZ3RoOwogICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0sCiAgICAgICAgcmVhZFVpbnQ4KCkgewogICAgICAgICAgdGhpcy5hc3NlcnRSZWFkTGltaXQoKTsKICAgICAgICAgIHRoaXMuX3RvdWNoKCk7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zcGVjdFVpbnQ4KCk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDE7CiAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfSwKICAgICAgICByZWFkVWludDE2KCkgewogICAgICAgICAgdGhpcy5hc3NlcnRSZWFkTGltaXQoKTsKICAgICAgICAgIHRoaXMuX3RvdWNoKCk7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zcGVjdFVpbnQxNigpOwogICAgICAgICAgdGhpcy5wb3NpdGlvbiArPSAyOwogICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0sCiAgICAgICAgcmVhZFVpbnQyNCgpIHsKICAgICAgICAgIHRoaXMuYXNzZXJ0UmVhZExpbWl0KCk7CiAgICAgICAgICB0aGlzLl90b3VjaCgpOwogICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmluc3BlY3RVaW50MjQoKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gKz0gMzsKICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9LAogICAgICAgIHJlYWRVaW50MzIoKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFJlYWRMaW1pdCgpOwogICAgICAgICAgdGhpcy5fdG91Y2goKTsKICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnNwZWN0VWludDMyKCk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDQ7CiAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfSwKICAgICAgICBnZXQgcmVtYWluaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZXMubGVuZ3RoIC0gdGhpcy5wb3NpdGlvbjsKICAgICAgICB9LAogICAgICAgIHNldFBvc2l0aW9uKHBvc2l0aW9uKSB7CiAgICAgICAgICBjb25zdCBvbGRQb3NpdGlvbiA9IHRoaXMucG9zaXRpb247CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICAgICAgIHJldHVybiAoKSA9PiB0aGlzLnBvc2l0aW9uID0gb2xkUG9zaXRpb247CiAgICAgICAgfSwKICAgICAgICBfdG91Y2goKSB7CiAgICAgICAgICBpZiAodGhpcy5yZWN1cnNpdmVSZWFkTGltaXQgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLmdldFJlYWRDb3VudCgpOwogICAgICAgICAgdGhpcy5wb3NpdGlvblJlYWRDb3VudC5zZXQodGhpcy5wb3NpdGlvbiwgY291bnQgKyAxKTsKICAgICAgICAgIGlmIChjb3VudCA+IDApCiAgICAgICAgICAgIHRoaXMucmVjdXJzaXZlUmVhZENvdW50Kys7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL2Zyb21CeXRlcy5qcwogIGZ1bmN0aW9uIGZyb21CeXRlcyhieXRlczIsIHRvT3JPcHRzKSB7CiAgICBjb25zdCBvcHRzID0gdHlwZW9mIHRvT3JPcHRzID09PSAic3RyaW5nIiA/IHsgdG86IHRvT3JPcHRzIH0gOiB0b09yT3B0czsKICAgIGNvbnN0IHRvID0gb3B0cy50bzsKICAgIGlmICh0byA9PT0gIm51bWJlciIpCiAgICAgIHJldHVybiBieXRlc1RvTnVtYmVyKGJ5dGVzMiwgb3B0cyk7CiAgICBpZiAodG8gPT09ICJiaWdpbnQiKQogICAgICByZXR1cm4gYnl0ZXNUb0JpZ0ludChieXRlczIsIG9wdHMpOwogICAgaWYgKHRvID09PSAiYm9vbGVhbiIpCiAgICAgIHJldHVybiBieXRlc1RvQm9vbChieXRlczIsIG9wdHMpOwogICAgaWYgKHRvID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIGJ5dGVzVG9TdHJpbmcoYnl0ZXMyLCBvcHRzKTsKICAgIHJldHVybiBieXRlc1RvSGV4KGJ5dGVzMiwgb3B0cyk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9CaWdJbnQoYnl0ZXMyLCBvcHRzID0ge30pIHsKICAgIGlmICh0eXBlb2Ygb3B0cy5zaXplICE9PSAidW5kZWZpbmVkIikKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgY29uc3QgaGV4ID0gYnl0ZXNUb0hleChieXRlczIsIG9wdHMpOwogICAgcmV0dXJuIGhleFRvQmlnSW50KGhleCwgb3B0cyk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9Cb29sKGJ5dGVzXywgb3B0cyA9IHt9KSB7CiAgICBsZXQgYnl0ZXMyID0gYnl0ZXNfOwogICAgaWYgKHR5cGVvZiBvcHRzLnNpemUgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGFzc2VydFNpemUoYnl0ZXMyLCB7IHNpemU6IG9wdHMuc2l6ZSB9KTsKICAgICAgYnl0ZXMyID0gdHJpbShieXRlczIpOwogICAgfQogICAgaWYgKGJ5dGVzMi5sZW5ndGggPiAxIHx8IGJ5dGVzMlswXSA+IDEpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQnl0ZXNCb29sZWFuRXJyb3IoYnl0ZXMyKTsKICAgIHJldHVybiBCb29sZWFuKGJ5dGVzMlswXSk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9OdW1iZXIoYnl0ZXMyLCBvcHRzID0ge30pIHsKICAgIGlmICh0eXBlb2Ygb3B0cy5zaXplICE9PSAidW5kZWZpbmVkIikKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgY29uc3QgaGV4ID0gYnl0ZXNUb0hleChieXRlczIsIG9wdHMpOwogICAgcmV0dXJuIGhleFRvTnVtYmVyKGhleCwgb3B0cyk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9TdHJpbmcoYnl0ZXNfLCBvcHRzID0ge30pIHsKICAgIGxldCBieXRlczIgPSBieXRlc187CiAgICBpZiAodHlwZW9mIG9wdHMuc2l6ZSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICBieXRlczIgPSB0cmltKGJ5dGVzMiwgeyBkaXI6ICJyaWdodCIgfSk7CiAgICB9CiAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGJ5dGVzMik7CiAgfQogIHZhciBpbml0X2Zyb21CeXRlcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL2Zyb21CeXRlcy5qcyIoKSB7CiAgICAgIGluaXRfZW5jb2RpbmcoKTsKICAgICAgaW5pdF90cmltKCk7CiAgICAgIGluaXRfZnJvbUhleCgpOwogICAgICBpbml0X3RvSGV4KCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZUFiaVBhcmFtZXRlcnMuanMKICBmdW5jdGlvbiBkZWNvZGVBYmlQYXJhbWV0ZXJzKHBhcmFtcywgZGF0YSkgewogICAgY29uc3QgYnl0ZXMyID0gdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciID8gaGV4VG9CeXRlcyhkYXRhKSA6IGRhdGE7CiAgICBjb25zdCBjdXJzb3IgPSBjcmVhdGVDdXJzb3IoYnl0ZXMyKTsKICAgIGlmIChzaXplKGJ5dGVzMikgPT09IDAgJiYgcGFyYW1zLmxlbmd0aCA+IDApCiAgICAgIHRocm93IG5ldyBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IoKTsKICAgIGlmIChzaXplKGRhdGEpICYmIHNpemUoZGF0YSkgPCAzMikKICAgICAgdGhyb3cgbmV3IEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yKHsKICAgICAgICBkYXRhOiB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgPyBkYXRhIDogYnl0ZXNUb0hleChkYXRhKSwKICAgICAgICBwYXJhbXMsCiAgICAgICAgc2l6ZTogc2l6ZShkYXRhKQogICAgICB9KTsKICAgIGxldCBjb25zdW1lZCA9IDA7CiAgICBjb25zdCB2YWx1ZXMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgKytpKSB7CiAgICAgIGNvbnN0IHBhcmFtID0gcGFyYW1zW2ldOwogICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oY29uc3VtZWQpOwogICAgICBjb25zdCBbZGF0YTIsIGNvbnN1bWVkX10gPSBkZWNvZGVQYXJhbWV0ZXIoY3Vyc29yLCBwYXJhbSwgewogICAgICAgIHN0YXRpY1Bvc2l0aW9uOiAwCiAgICAgIH0pOwogICAgICBjb25zdW1lZCArPSBjb25zdW1lZF87CiAgICAgIHZhbHVlcy5wdXNoKGRhdGEyKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZXM7CiAgfQogIGZ1bmN0aW9uIGRlY29kZVBhcmFtZXRlcihjdXJzb3IsIHBhcmFtLCB7IHN0YXRpY1Bvc2l0aW9uIH0pIHsKICAgIGNvbnN0IGFycmF5Q29tcG9uZW50cyA9IGdldEFycmF5Q29tcG9uZW50cyhwYXJhbS50eXBlKTsKICAgIGlmIChhcnJheUNvbXBvbmVudHMpIHsKICAgICAgY29uc3QgW2xlbmd0aCwgdHlwZV0gPSBhcnJheUNvbXBvbmVudHM7CiAgICAgIHJldHVybiBkZWNvZGVBcnJheShjdXJzb3IsIHsgLi4ucGFyYW0sIHR5cGUgfSwgeyBsZW5ndGgsIHN0YXRpY1Bvc2l0aW9uIH0pOwogICAgfQogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJ0dXBsZSIpCiAgICAgIHJldHVybiBkZWNvZGVUdXBsZShjdXJzb3IsIHBhcmFtLCB7IHN0YXRpY1Bvc2l0aW9uIH0pOwogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJhZGRyZXNzIikKICAgICAgcmV0dXJuIGRlY29kZUFkZHJlc3MoY3Vyc29yKTsKICAgIGlmIChwYXJhbS50eXBlID09PSAiYm9vbCIpCiAgICAgIHJldHVybiBkZWNvZGVCb29sKGN1cnNvcik7CiAgICBpZiAocGFyYW0udHlwZS5zdGFydHNXaXRoKCJieXRlcyIpKQogICAgICByZXR1cm4gZGVjb2RlQnl0ZXMoY3Vyc29yLCBwYXJhbSwgeyBzdGF0aWNQb3NpdGlvbiB9KTsKICAgIGlmIChwYXJhbS50eXBlLnN0YXJ0c1dpdGgoInVpbnQiKSB8fCBwYXJhbS50eXBlLnN0YXJ0c1dpdGgoImludCIpKQogICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKGN1cnNvciwgcGFyYW0pOwogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJzdHJpbmciKQogICAgICByZXR1cm4gZGVjb2RlU3RyaW5nKGN1cnNvciwgeyBzdGF0aWNQb3NpdGlvbiB9KTsKICAgIHRocm93IG5ldyBJbnZhbGlkQWJpRGVjb2RpbmdUeXBlRXJyb3IocGFyYW0udHlwZSwgewogICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L2RlY29kZUFiaVBhcmFtZXRlcnMiCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlQWRkcmVzcyhjdXJzb3IpIHsKICAgIGNvbnN0IHZhbHVlID0gY3Vyc29yLnJlYWRCeXRlcygzMik7CiAgICByZXR1cm4gW2NoZWNrc3VtQWRkcmVzcyhieXRlc1RvSGV4KHNsaWNlQnl0ZXModmFsdWUsIC0yMCkpKSwgMzJdOwogIH0KICBmdW5jdGlvbiBkZWNvZGVBcnJheShjdXJzb3IsIHBhcmFtLCB7IGxlbmd0aCwgc3RhdGljUG9zaXRpb24gfSkgewogICAgaWYgKCFsZW5ndGgpIHsKICAgICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKHNpemVPZk9mZnNldCkpOwogICAgICBjb25zdCBzdGFydCA9IHN0YXRpY1Bvc2l0aW9uICsgb2Zmc2V0OwogICAgICBjb25zdCBzdGFydE9mRGF0YSA9IHN0YXJ0ICsgc2l6ZU9mTGVuZ3RoOwogICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oc3RhcnQpOwogICAgICBjb25zdCBsZW5ndGgyID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKHNpemVPZkxlbmd0aCkpOwogICAgICBjb25zdCBkeW5hbWljQ2hpbGQgPSBoYXNEeW5hbWljQ2hpbGQocGFyYW0pOwogICAgICBsZXQgY29uc3VtZWQyID0gMDsKICAgICAgY29uc3QgdmFsdWUyID0gW107CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoMjsgKytpKSB7CiAgICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXJ0T2ZEYXRhICsgKGR5bmFtaWNDaGlsZCA/IGkgKiAzMiA6IGNvbnN1bWVkMikpOwogICAgICAgIGNvbnN0IFtkYXRhLCBjb25zdW1lZF9dID0gZGVjb2RlUGFyYW1ldGVyKGN1cnNvciwgcGFyYW0sIHsKICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uOiBzdGFydE9mRGF0YQogICAgICAgIH0pOwogICAgICAgIGNvbnN1bWVkMiArPSBjb25zdW1lZF87CiAgICAgICAgdmFsdWUyLnB1c2goZGF0YSk7CiAgICAgIH0KICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgICByZXR1cm4gW3ZhbHVlMiwgMzJdOwogICAgfQogICAgaWYgKGhhc0R5bmFtaWNDaGlsZChwYXJhbSkpIHsKICAgICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKHNpemVPZk9mZnNldCkpOwogICAgICBjb25zdCBzdGFydCA9IHN0YXRpY1Bvc2l0aW9uICsgb2Zmc2V0OwogICAgICBjb25zdCB2YWx1ZTIgPSBbXTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGFydCArIGkgKiAzMik7CiAgICAgICAgY29uc3QgW2RhdGFdID0gZGVjb2RlUGFyYW1ldGVyKGN1cnNvciwgcGFyYW0sIHsKICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uOiBzdGFydAogICAgICAgIH0pOwogICAgICAgIHZhbHVlMi5wdXNoKGRhdGEpOwogICAgICB9CiAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGF0aWNQb3NpdGlvbiArIDMyKTsKICAgICAgcmV0dXJuIFt2YWx1ZTIsIDMyXTsKICAgIH0KICAgIGxldCBjb25zdW1lZCA9IDA7CiAgICBjb25zdCB2YWx1ZSA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICBjb25zdCBbZGF0YSwgY29uc3VtZWRfXSA9IGRlY29kZVBhcmFtZXRlcihjdXJzb3IsIHBhcmFtLCB7CiAgICAgICAgc3RhdGljUG9zaXRpb246IHN0YXRpY1Bvc2l0aW9uICsgY29uc3VtZWQKICAgICAgfSk7CiAgICAgIGNvbnN1bWVkICs9IGNvbnN1bWVkXzsKICAgICAgdmFsdWUucHVzaChkYXRhKTsKICAgIH0KICAgIHJldHVybiBbdmFsdWUsIGNvbnN1bWVkXTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlQm9vbChjdXJzb3IpIHsKICAgIHJldHVybiBbYnl0ZXNUb0Jvb2woY3Vyc29yLnJlYWRCeXRlcygzMiksIHsgc2l6ZTogMzIgfSksIDMyXTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlQnl0ZXMoY3Vyc29yLCBwYXJhbSwgeyBzdGF0aWNQb3NpdGlvbiB9KSB7CiAgICBjb25zdCBbXywgc2l6ZTNdID0gcGFyYW0udHlwZS5zcGxpdCgiYnl0ZXMiKTsKICAgIGlmICghc2l6ZTMpIHsKICAgICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKDMyKSk7CiAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGF0aWNQb3NpdGlvbiArIG9mZnNldCk7CiAgICAgIGNvbnN0IGxlbmd0aCA9IGJ5dGVzVG9OdW1iZXIoY3Vyc29yLnJlYWRCeXRlcygzMikpOwogICAgICBpZiAobGVuZ3RoID09PSAwKSB7CiAgICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgICAgIHJldHVybiBbIjB4IiwgMzJdOwogICAgICB9CiAgICAgIGNvbnN0IGRhdGEgPSBjdXJzb3IucmVhZEJ5dGVzKGxlbmd0aCk7CiAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGF0aWNQb3NpdGlvbiArIDMyKTsKICAgICAgcmV0dXJuIFtieXRlc1RvSGV4KGRhdGEpLCAzMl07CiAgICB9CiAgICBjb25zdCB2YWx1ZSA9IGJ5dGVzVG9IZXgoY3Vyc29yLnJlYWRCeXRlcyhOdW1iZXIucGFyc2VJbnQoc2l6ZTMpLCAzMikpOwogICAgcmV0dXJuIFt2YWx1ZSwgMzJdOwogIH0KICBmdW5jdGlvbiBkZWNvZGVOdW1iZXIoY3Vyc29yLCBwYXJhbSkgewogICAgY29uc3Qgc2lnbmVkID0gcGFyYW0udHlwZS5zdGFydHNXaXRoKCJpbnQiKTsKICAgIGNvbnN0IHNpemUzID0gTnVtYmVyLnBhcnNlSW50KHBhcmFtLnR5cGUuc3BsaXQoImludCIpWzFdIHx8ICIyNTYiKTsKICAgIGNvbnN0IHZhbHVlID0gY3Vyc29yLnJlYWRCeXRlcygzMik7CiAgICByZXR1cm4gWwogICAgICBzaXplMyA+IDQ4ID8gYnl0ZXNUb0JpZ0ludCh2YWx1ZSwgeyBzaWduZWQgfSkgOiBieXRlc1RvTnVtYmVyKHZhbHVlLCB7IHNpZ25lZCB9KSwKICAgICAgMzIKICAgIF07CiAgfQogIGZ1bmN0aW9uIGRlY29kZVR1cGxlKGN1cnNvciwgcGFyYW0sIHsgc3RhdGljUG9zaXRpb24gfSkgewogICAgY29uc3QgaGFzVW5uYW1lZENoaWxkID0gcGFyYW0uY29tcG9uZW50cy5sZW5ndGggPT09IDAgfHwgcGFyYW0uY29tcG9uZW50cy5zb21lKCh7IG5hbWUgfSkgPT4gIW5hbWUpOwogICAgY29uc3QgdmFsdWUgPSBoYXNVbm5hbWVkQ2hpbGQgPyBbXSA6IHt9OwogICAgbGV0IGNvbnN1bWVkID0gMDsKICAgIGlmIChoYXNEeW5hbWljQ2hpbGQocGFyYW0pKSB7CiAgICAgIGNvbnN0IG9mZnNldCA9IGJ5dGVzVG9OdW1iZXIoY3Vyc29yLnJlYWRCeXRlcyhzaXplT2ZPZmZzZXQpKTsKICAgICAgY29uc3Qgc3RhcnQgPSBzdGF0aWNQb3NpdGlvbiArIG9mZnNldDsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbS5jb21wb25lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gcGFyYW0uY29tcG9uZW50c1tpXTsKICAgICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oc3RhcnQgKyBjb25zdW1lZCk7CiAgICAgICAgY29uc3QgW2RhdGEsIGNvbnN1bWVkX10gPSBkZWNvZGVQYXJhbWV0ZXIoY3Vyc29yLCBjb21wb25lbnQsIHsKICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uOiBzdGFydAogICAgICAgIH0pOwogICAgICAgIGNvbnN1bWVkICs9IGNvbnN1bWVkXzsKICAgICAgICB2YWx1ZVtoYXNVbm5hbWVkQ2hpbGQgPyBpIDogY29tcG9uZW50Py5uYW1lXSA9IGRhdGE7CiAgICAgIH0KICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgICByZXR1cm4gW3ZhbHVlLCAzMl07CiAgICB9CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtLmNvbXBvbmVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgY29uc3QgY29tcG9uZW50ID0gcGFyYW0uY29tcG9uZW50c1tpXTsKICAgICAgY29uc3QgW2RhdGEsIGNvbnN1bWVkX10gPSBkZWNvZGVQYXJhbWV0ZXIoY3Vyc29yLCBjb21wb25lbnQsIHsKICAgICAgICBzdGF0aWNQb3NpdGlvbgogICAgICB9KTsKICAgICAgdmFsdWVbaGFzVW5uYW1lZENoaWxkID8gaSA6IGNvbXBvbmVudD8ubmFtZV0gPSBkYXRhOwogICAgICBjb25zdW1lZCArPSBjb25zdW1lZF87CiAgICB9CiAgICByZXR1cm4gW3ZhbHVlLCBjb25zdW1lZF07CiAgfQogIGZ1bmN0aW9uIGRlY29kZVN0cmluZyhjdXJzb3IsIHsgc3RhdGljUG9zaXRpb24gfSkgewogICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKDMyKSk7CiAgICBjb25zdCBzdGFydCA9IHN0YXRpY1Bvc2l0aW9uICsgb2Zmc2V0OwogICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXJ0KTsKICAgIGNvbnN0IGxlbmd0aCA9IGJ5dGVzVG9OdW1iZXIoY3Vyc29yLnJlYWRCeXRlcygzMikpOwogICAgaWYgKGxlbmd0aCA9PT0gMCkgewogICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oc3RhdGljUG9zaXRpb24gKyAzMik7CiAgICAgIHJldHVybiBbIiIsIDMyXTsKICAgIH0KICAgIGNvbnN0IGRhdGEgPSBjdXJzb3IucmVhZEJ5dGVzKGxlbmd0aCwgMzIpOwogICAgY29uc3QgdmFsdWUgPSBieXRlc1RvU3RyaW5nKHRyaW0oZGF0YSkpOwogICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgcmV0dXJuIFt2YWx1ZSwgMzJdOwogIH0KICBmdW5jdGlvbiBoYXNEeW5hbWljQ2hpbGQocGFyYW0pIHsKICAgIGNvbnN0IHsgdHlwZSB9ID0gcGFyYW07CiAgICBpZiAodHlwZSA9PT0gInN0cmluZyIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUgPT09ICJieXRlcyIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUuZW5kc1dpdGgoIltdIikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUgPT09ICJ0dXBsZSIpCiAgICAgIHJldHVybiBwYXJhbS5jb21wb25lbnRzPy5zb21lKGhhc0R5bmFtaWNDaGlsZCk7CiAgICBjb25zdCBhcnJheUNvbXBvbmVudHMgPSBnZXRBcnJheUNvbXBvbmVudHMocGFyYW0udHlwZSk7CiAgICBpZiAoYXJyYXlDb21wb25lbnRzICYmIGhhc0R5bmFtaWNDaGlsZCh7IC4uLnBhcmFtLCB0eXBlOiBhcnJheUNvbXBvbmVudHNbMV0gfSkpCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KICB2YXIgc2l6ZU9mTGVuZ3RoLCBzaXplT2ZPZmZzZXQ7CiAgdmFyIGluaXRfZGVjb2RlQWJpUGFyYW1ldGVycyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9kZWNvZGVBYmlQYXJhbWV0ZXJzLmpzIigpIHsKICAgICAgaW5pdF9hYmkoKTsKICAgICAgaW5pdF9nZXRBZGRyZXNzKCk7CiAgICAgIGluaXRfY3Vyc29yMigpOwogICAgICBpbml0X3NpemUoKTsKICAgICAgaW5pdF9zbGljZSgpOwogICAgICBpbml0X3RyaW0oKTsKICAgICAgaW5pdF9mcm9tQnl0ZXMoKTsKICAgICAgaW5pdF90b0J5dGVzKCk7CiAgICAgIGluaXRfdG9IZXgoKTsKICAgICAgaW5pdF9lbmNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgICAgIHNpemVPZkxlbmd0aCA9IDMyOwogICAgICBzaXplT2ZPZmZzZXQgPSAzMjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZGVjb2RlRXJyb3JSZXN1bHQuanMKICBmdW5jdGlvbiBkZWNvZGVFcnJvclJlc3VsdChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgZGF0YSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNsaWNlKGRhdGEsIDAsIDQpOwogICAgaWYgKHNpZ25hdHVyZSA9PT0gIjB4IikKICAgICAgdGhyb3cgbmV3IEFiaURlY29kaW5nWmVyb0RhdGFFcnJvcigpOwogICAgY29uc3QgYWJpXyA9IFsuLi5hYmkyIHx8IFtdLCBzb2xpZGl0eUVycm9yLCBzb2xpZGl0eVBhbmljXTsKICAgIGNvbnN0IGFiaUl0ZW0gPSBhYmlfLmZpbmQoKHgpID0+IHgudHlwZSA9PT0gImVycm9yIiAmJiBzaWduYXR1cmUgPT09IHRvRnVuY3Rpb25TZWxlY3Rvcihmb3JtYXRBYmlJdGVtMih4KSkpOwogICAgaWYgKCFhYmlJdGVtKQogICAgICB0aHJvdyBuZXcgQWJpRXJyb3JTaWduYXR1cmVOb3RGb3VuZEVycm9yKHNpZ25hdHVyZSwgewogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3QvZGVjb2RlRXJyb3JSZXN1bHQiCiAgICAgIH0pOwogICAgcmV0dXJuIHsKICAgICAgYWJpSXRlbSwKICAgICAgYXJnczogImlucHV0cyIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLmlucHV0cyAmJiBhYmlJdGVtLmlucHV0cy5sZW5ndGggPiAwID8gZGVjb2RlQWJpUGFyYW1ldGVycyhhYmlJdGVtLmlucHV0cywgc2xpY2UoZGF0YSwgNCkpIDogdm9pZCAwLAogICAgICBlcnJvck5hbWU6IGFiaUl0ZW0ubmFtZQogICAgfTsKICB9CiAgdmFyIGluaXRfZGVjb2RlRXJyb3JSZXN1bHQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZGVjb2RlRXJyb3JSZXN1bHQuanMiKCkgewogICAgICBpbml0X3NvbGlkaXR5KCk7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfc2xpY2UoKTsKICAgICAgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IoKTsKICAgICAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgICAgIGluaXRfZm9ybWF0QWJpSXRlbTIoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zdHJpbmdpZnkuanMKICB2YXIgc3RyaW5naWZ5OwogIHZhciBpbml0X3N0cmluZ2lmeSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3N0cmluZ2lmeS5qcyIoKSB7CiAgICAgIHN0cmluZ2lmeSA9ICh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKSA9PiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgKGtleSwgdmFsdWVfKSA9PiB7CiAgICAgICAgY29uc3QgdmFsdWUyID0gdHlwZW9mIHZhbHVlXyA9PT0gImJpZ2ludCIgPyB2YWx1ZV8udG9TdHJpbmcoKSA6IHZhbHVlXzsKICAgICAgICByZXR1cm4gdHlwZW9mIHJlcGxhY2VyID09PSAiZnVuY3Rpb24iID8gcmVwbGFjZXIoa2V5LCB2YWx1ZTIpIDogdmFsdWUyOwogICAgICB9LCBzcGFjZSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2Zvcm1hdEFiaUl0ZW1XaXRoQXJncy5qcwogIGZ1bmN0aW9uIGZvcm1hdEFiaUl0ZW1XaXRoQXJncyh7IGFiaUl0ZW0sIGFyZ3MsIGluY2x1ZGVGdW5jdGlvbk5hbWUgPSB0cnVlLCBpbmNsdWRlTmFtZSA9IGZhbHNlIH0pIHsKICAgIGlmICghKCJuYW1lIiBpbiBhYmlJdGVtKSkKICAgICAgcmV0dXJuOwogICAgaWYgKCEoImlucHV0cyIgaW4gYWJpSXRlbSkpCiAgICAgIHJldHVybjsKICAgIGlmICghYWJpSXRlbS5pbnB1dHMpCiAgICAgIHJldHVybjsKICAgIHJldHVybiBgJHtpbmNsdWRlRnVuY3Rpb25OYW1lID8gYWJpSXRlbS5uYW1lIDogIiJ9KCR7YWJpSXRlbS5pbnB1dHMubWFwKChpbnB1dCwgaSkgPT4gYCR7aW5jbHVkZU5hbWUgJiYgaW5wdXQubmFtZSA/IGAke2lucHV0Lm5hbWV9OiBgIDogIiJ9JHt0eXBlb2YgYXJnc1tpXSA9PT0gIm9iamVjdCIgPyBzdHJpbmdpZnkoYXJnc1tpXSkgOiBhcmdzW2ldfWApLmpvaW4oIiwgIil9KWA7CiAgfQogIHZhciBpbml0X2Zvcm1hdEFiaUl0ZW1XaXRoQXJncyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9mb3JtYXRBYmlJdGVtV2l0aEFyZ3MuanMiKCkgewogICAgICBpbml0X3N0cmluZ2lmeSgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy91bml0LmpzCiAgdmFyIGV0aGVyVW5pdHMsIGd3ZWlVbml0cywgd2VpVW5pdHM7CiAgdmFyIGluaXRfdW5pdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy91bml0LmpzIigpIHsKICAgICAgZXRoZXJVbml0cyA9IHsKICAgICAgICBnd2VpOiA5LAogICAgICAgIHdlaTogMTgKICAgICAgfTsKICAgICAgZ3dlaVVuaXRzID0gewogICAgICAgIGV0aGVyOiAtOSwKICAgICAgICB3ZWk6IDkKICAgICAgfTsKICAgICAgd2VpVW5pdHMgPSB7CiAgICAgICAgZXRoZXI6IC0xOCwKICAgICAgICBnd2VpOiAtOQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3VuaXQvZm9ybWF0VW5pdHMuanMKICBmdW5jdGlvbiBmb3JtYXRVbml0cyh2YWx1ZSwgZGVjaW1hbHMpIHsKICAgIGxldCBkaXNwbGF5ID0gdmFsdWUudG9TdHJpbmcoKTsKICAgIGNvbnN0IG5lZ2F0aXZlID0gZGlzcGxheS5zdGFydHNXaXRoKCItIik7CiAgICBpZiAobmVnYXRpdmUpCiAgICAgIGRpc3BsYXkgPSBkaXNwbGF5LnNsaWNlKDEpOwogICAgZGlzcGxheSA9IGRpc3BsYXkucGFkU3RhcnQoZGVjaW1hbHMsICIwIik7CiAgICBsZXQgW2ludGVnZXIsIGZyYWN0aW9uXSA9IFsKICAgICAgZGlzcGxheS5zbGljZSgwLCBkaXNwbGF5Lmxlbmd0aCAtIGRlY2ltYWxzKSwKICAgICAgZGlzcGxheS5zbGljZShkaXNwbGF5Lmxlbmd0aCAtIGRlY2ltYWxzKQogICAgXTsKICAgIGZyYWN0aW9uID0gZnJhY3Rpb24ucmVwbGFjZSgvKDArKSQvLCAiIik7CiAgICByZXR1cm4gYCR7bmVnYXRpdmUgPyAiLSIgOiAiIn0ke2ludGVnZXIgfHwgIjAifSR7ZnJhY3Rpb24gPyBgLiR7ZnJhY3Rpb259YCA6ICIifWA7CiAgfQogIHZhciBpbml0X2Zvcm1hdFVuaXRzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9mb3JtYXRVbml0cy5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9mb3JtYXRFdGhlci5qcwogIGZ1bmN0aW9uIGZvcm1hdEV0aGVyKHdlaSwgdW5pdCA9ICJ3ZWkiKSB7CiAgICByZXR1cm4gZm9ybWF0VW5pdHMod2VpLCBldGhlclVuaXRzW3VuaXRdKTsKICB9CiAgdmFyIGluaXRfZm9ybWF0RXRoZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L2Zvcm1hdEV0aGVyLmpzIigpIHsKICAgICAgaW5pdF91bml0KCk7CiAgICAgIGluaXRfZm9ybWF0VW5pdHMoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L2Zvcm1hdEd3ZWkuanMKICBmdW5jdGlvbiBmb3JtYXRHd2VpKHdlaSwgdW5pdCA9ICJ3ZWkiKSB7CiAgICByZXR1cm4gZm9ybWF0VW5pdHMod2VpLCBnd2VpVW5pdHNbdW5pdF0pOwogIH0KICB2YXIgaW5pdF9mb3JtYXRHd2VpID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9mb3JtYXRHd2VpLmpzIigpIHsKICAgICAgaW5pdF91bml0KCk7CiAgICAgIGluaXRfZm9ybWF0VW5pdHMoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvc3RhdGVPdmVycmlkZS5qcwogIGZ1bmN0aW9uIHByZXR0eVN0YXRlTWFwcGluZyhzdGF0ZU1hcHBpbmcpIHsKICAgIHJldHVybiBzdGF0ZU1hcHBpbmcucmVkdWNlKChwcmV0dHksIHsgc2xvdCwgdmFsdWUgfSkgPT4gewogICAgICByZXR1cm4gYCR7cHJldHR5fSAgICAgICAgJHtzbG90fTogJHt2YWx1ZX0KYDsKICAgIH0sICIiKTsKICB9CiAgZnVuY3Rpb24gcHJldHR5U3RhdGVPdmVycmlkZShzdGF0ZU92ZXJyaWRlKSB7CiAgICByZXR1cm4gc3RhdGVPdmVycmlkZS5yZWR1Y2UoKHByZXR0eSwgeyBhZGRyZXNzLCAuLi5zdGF0ZSB9KSA9PiB7CiAgICAgIGxldCB2YWwgPSBgJHtwcmV0dHl9ICAgICR7YWRkcmVzc306CmA7CiAgICAgIGlmIChzdGF0ZS5ub25jZSkKICAgICAgICB2YWwgKz0gYCAgICAgIG5vbmNlOiAke3N0YXRlLm5vbmNlfQpgOwogICAgICBpZiAoc3RhdGUuYmFsYW5jZSkKICAgICAgICB2YWwgKz0gYCAgICAgIGJhbGFuY2U6ICR7c3RhdGUuYmFsYW5jZX0KYDsKICAgICAgaWYgKHN0YXRlLmNvZGUpCiAgICAgICAgdmFsICs9IGAgICAgICBjb2RlOiAke3N0YXRlLmNvZGV9CmA7CiAgICAgIGlmIChzdGF0ZS5zdGF0ZSkgewogICAgICAgIHZhbCArPSAiICAgICAgc3RhdGU6XG4iOwogICAgICAgIHZhbCArPSBwcmV0dHlTdGF0ZU1hcHBpbmcoc3RhdGUuc3RhdGUpOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS5zdGF0ZURpZmYpIHsKICAgICAgICB2YWwgKz0gIiAgICAgIHN0YXRlRGlmZjpcbiI7CiAgICAgICAgdmFsICs9IHByZXR0eVN0YXRlTWFwcGluZyhzdGF0ZS5zdGF0ZURpZmYpOwogICAgICB9CiAgICAgIHJldHVybiB2YWw7CiAgICB9LCAiICBTdGF0ZSBPdmVycmlkZTpcbiIpLnNsaWNlKDAsIC0xKTsKICB9CiAgdmFyIEFjY291bnRTdGF0ZUNvbmZsaWN0RXJyb3IsIFN0YXRlQXNzaWdubWVudENvbmZsaWN0RXJyb3I7CiAgdmFyIGluaXRfc3RhdGVPdmVycmlkZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9zdGF0ZU92ZXJyaWRlLmpzIigpIHsKICAgICAgaW5pdF9iYXNlKCk7CiAgICAgIEFjY291bnRTdGF0ZUNvbmZsaWN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYWRkcmVzcyB9KSB7CiAgICAgICAgICBzdXBlcihgU3RhdGUgZm9yIGFjY291bnQgIiR7YWRkcmVzc30iIGlzIHNldCBtdWx0aXBsZSB0aW1lcy5gLCB7CiAgICAgICAgICAgIG5hbWU6ICJBY2NvdW50U3RhdGVDb25mbGljdEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCJzdGF0ZSBhbmQgc3RhdGVEaWZmIGFyZSBzZXQgb24gdGhlIHNhbWUgYWNjb3VudC4iLCB7CiAgICAgICAgICAgIG5hbWU6ICJTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy90cmFuc2FjdGlvbi5qcwogIGZ1bmN0aW9uIHByZXR0eVByaW50KGFyZ3MpIHsKICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhhcmdzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gewogICAgICBpZiAodmFsdWUgPT09IHZvaWQgMCB8fCB2YWx1ZSA9PT0gZmFsc2UpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBba2V5LCB2YWx1ZV07CiAgICB9KS5maWx0ZXIoQm9vbGVhbik7CiAgICBjb25zdCBtYXhMZW5ndGggPSBlbnRyaWVzLnJlZHVjZSgoYWNjLCBba2V5XSkgPT4gTWF0aC5tYXgoYWNjLCBrZXkubGVuZ3RoKSwgMCk7CiAgICByZXR1cm4gZW50cmllcy5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCAgJHtgJHtrZXl9OmAucGFkRW5kKG1heExlbmd0aCArIDEpfSAgJHt2YWx1ZX1gKS5qb2luKCJcbiIpOwogIH0KICB2YXIgRmVlQ29uZmxpY3RFcnJvciwgSW52YWxpZExlZ2FjeVZFcnJvciwgSW52YWxpZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uRXJyb3IsIEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlRXJyb3IsIEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25FcnJvciwgSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IsIFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IsIFRyYW5zYWN0aW9uTm90Rm91bmRFcnJvciwgVHJhbnNhY3Rpb25SZWNlaXB0Tm90Rm91bmRFcnJvciwgV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvcjsKICB2YXIgaW5pdF90cmFuc2FjdGlvbiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy90cmFuc2FjdGlvbi5qcyIoKSB7CiAgICAgIGluaXRfZm9ybWF0RXRoZXIoKTsKICAgICAgaW5pdF9mb3JtYXRHd2VpKCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBGZWVDb25mbGljdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgIkNhbm5vdCBzcGVjaWZ5IGJvdGggYSBgZ2FzUHJpY2VgIGFuZCBhIGBtYXhGZWVQZXJHYXNgL2BtYXhQcmlvcml0eUZlZVBlckdhc2AuIiwKICAgICAgICAgICAgIlVzZSBgbWF4RmVlUGVyR2FzYC9gbWF4UHJpb3JpdHlGZWVQZXJHYXNgIGZvciBFSVAtMTU1OSBjb21wYXRpYmxlIG5ldHdvcmtzLCBhbmQgYGdhc1ByaWNlYCBmb3Igb3RoZXJzLiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgeyBuYW1lOiAiRmVlQ29uZmxpY3RFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkTGVnYWN5VkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHYgfSkgewogICAgICAgICAgc3VwZXIoYEludmFsaWQgXGB2XGAgdmFsdWUgIiR7dn0iLiBFeHBlY3RlZCAyNyBvciAyOC5gLCB7CiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkTGVnYWN5VkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkU2VyaWFsaXphYmxlVHJhbnNhY3Rpb25FcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyB0cmFuc2FjdGlvbiB9KSB7CiAgICAgICAgICBzdXBlcigiQ2Fubm90IGluZmVyIGEgdHJhbnNhY3Rpb24gdHlwZSBmcm9tIHByb3ZpZGVkIHRyYW5zYWN0aW9uLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgIlByb3ZpZGVkIFRyYW5zYWN0aW9uOiIsCiAgICAgICAgICAgICAgInsiLAogICAgICAgICAgICAgIHByZXR0eVByaW50KHRyYW5zYWN0aW9uKSwKICAgICAgICAgICAgICAifSIsCiAgICAgICAgICAgICAgIiIsCiAgICAgICAgICAgICAgIlRvIGluZmVyIHRoZSB0eXBlLCBlaXRoZXIgcHJvdmlkZToiLAogICAgICAgICAgICAgICItIGEgYHR5cGVgIHRvIHRoZSBUcmFuc2FjdGlvbiwgb3IiLAogICAgICAgICAgICAgICItIGFuIEVJUC0xNTU5IFRyYW5zYWN0aW9uIHdpdGggYG1heEZlZVBlckdhc2AsIG9yIiwKICAgICAgICAgICAgICAiLSBhbiBFSVAtMjkzMCBUcmFuc2FjdGlvbiB3aXRoIGBnYXNQcmljZWAgJiBgYWNjZXNzTGlzdGAsIG9yIiwKICAgICAgICAgICAgICAiLSBhbiBFSVAtNDg0NCBUcmFuc2FjdGlvbiB3aXRoIGBibG9ic2AsIGBibG9iVmVyc2lvbmVkSGFzaGVzYCwgYHNpZGVjYXJzYCwgb3IiLAogICAgICAgICAgICAgICItIGFuIEVJUC03NzAyIFRyYW5zYWN0aW9uIHdpdGggYGF1dGhvcml6YXRpb25MaXN0YCwgb3IiLAogICAgICAgICAgICAgICItIGEgTGVnYWN5IFRyYW5zYWN0aW9uIHdpdGggYGdhc1ByaWNlYCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbmFtZTogIkludmFsaWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uVHlwZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHNlcmlhbGl6ZWRUeXBlIH0pIHsKICAgICAgICAgIHN1cGVyKGBTZXJpYWxpemVkIHRyYW5zYWN0aW9uIHR5cGUgIiR7c2VyaWFsaXplZFR5cGV9IiBpcyBpbnZhbGlkLmAsIHsKICAgICAgICAgICAgbmFtZTogIkludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNlcmlhbGl6ZWRUeXBlIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuc2VyaWFsaXplZFR5cGUgPSBzZXJpYWxpemVkVHlwZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25FcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBhdHRyaWJ1dGVzLCBzZXJpYWxpemVkVHJhbnNhY3Rpb24sIHR5cGUgfSkgewogICAgICAgICAgY29uc3QgbWlzc2luZyA9IE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB0eXBlb2YgdmFsdWUgPT09ICJ1bmRlZmluZWQiID8ga2V5IDogdm9pZCAwKS5maWx0ZXIoQm9vbGVhbik7CiAgICAgICAgICBzdXBlcihgSW52YWxpZCBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIG9mIHR5cGUgIiR7dHlwZX0iIHdhcyBwcm92aWRlZC5gLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBTZXJpYWxpemVkIFRyYW5zYWN0aW9uOiAiJHtzZXJpYWxpemVkVHJhbnNhY3Rpb259ImAsCiAgICAgICAgICAgICAgbWlzc2luZy5sZW5ndGggPiAwID8gYE1pc3NpbmcgQXR0cmlidXRlczogJHttaXNzaW5nLmpvaW4oIiwgIil9YCA6ICIiCiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNlcmlhbGl6ZWRUcmFuc2FjdGlvbiIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInR5cGUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5zZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBzZXJpYWxpemVkVHJhbnNhY3Rpb247CiAgICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgc3RvcmFnZUtleSB9KSB7CiAgICAgICAgICBzdXBlcihgU2l6ZSBmb3Igc3RvcmFnZSBrZXkgIiR7c3RvcmFnZUtleX0iIGlzIGludmFsaWQuIEV4cGVjdGVkIDMyIGJ5dGVzLiBHb3QgJHtNYXRoLmZsb29yKChzdG9yYWdlS2V5Lmxlbmd0aCAtIDIpIC8gMil9IGJ5dGVzLmAsIHsgbmFtZTogIkludmFsaWRTdG9yYWdlS2V5U2l6ZUVycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlLCB7IGFjY291bnQsIGRvY3NQYXRoOiBkb2NzUGF0aDksIGNoYWluLCBkYXRhLCBnYXMsIGdhc1ByaWNlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBub25jZSwgdG8sIHZhbHVlIH0pIHsKICAgICAgICAgIGNvbnN0IHByZXR0eUFyZ3MgPSBwcmV0dHlQcmludCh7CiAgICAgICAgICAgIGNoYWluOiBjaGFpbiAmJiBgJHtjaGFpbj8ubmFtZX0gKGlkOiAke2NoYWluPy5pZH0pYCwKICAgICAgICAgICAgZnJvbTogYWNjb3VudD8uYWRkcmVzcywKICAgICAgICAgICAgdG8sCiAgICAgICAgICAgIHZhbHVlOiB0eXBlb2YgdmFsdWUgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEV0aGVyKHZhbHVlKX0gJHtjaGFpbj8ubmF0aXZlQ3VycmVuY3k/LnN5bWJvbCB8fCAiRVRIIn1gLAogICAgICAgICAgICBkYXRhLAogICAgICAgICAgICBnYXMsCiAgICAgICAgICAgIGdhc1ByaWNlOiB0eXBlb2YgZ2FzUHJpY2UgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkoZ2FzUHJpY2UpfSBnd2VpYCwKICAgICAgICAgICAgbWF4RmVlUGVyR2FzOiB0eXBlb2YgbWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9IGd3ZWlgLAogICAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogdHlwZW9mIG1heFByaW9yaXR5RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKG1heFByaW9yaXR5RmVlUGVyR2FzKX0gZ3dlaWAsCiAgICAgICAgICAgIG5vbmNlCiAgICAgICAgICB9KTsKICAgICAgICAgIHN1cGVyKGNhdXNlLnNob3J0TWVzc2FnZSwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgLi4uY2F1c2UubWV0YU1lc3NhZ2VzID8gWy4uLmNhdXNlLm1ldGFNZXNzYWdlcywgIiAiXSA6IFtdLAogICAgICAgICAgICAgICJSZXF1ZXN0IEFyZ3VtZW50czoiLAogICAgICAgICAgICAgIHByZXR0eUFyZ3MKICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgICAgIG5hbWU6ICJUcmFuc2FjdGlvbkV4ZWN1dGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNhdXNlIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuY2F1c2UgPSBjYXVzZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFRyYW5zYWN0aW9uTm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyLCBibG9ja1RhZywgaGFzaDogaGFzaDMsIGluZGV4OiBpbmRleDIgfSkgewogICAgICAgICAgbGV0IGlkZW50aWZpZXIgPSAiVHJhbnNhY3Rpb24iOwogICAgICAgICAgaWYgKGJsb2NrVGFnICYmIGluZGV4MiAhPT0gdm9pZCAwKQogICAgICAgICAgICBpZGVudGlmaWVyID0gYFRyYW5zYWN0aW9uIGF0IGJsb2NrIHRpbWUgIiR7YmxvY2tUYWd9IiBhdCBpbmRleCAiJHtpbmRleDJ9ImA7CiAgICAgICAgICBpZiAoYmxvY2tIYXNoICYmIGluZGV4MiAhPT0gdm9pZCAwKQogICAgICAgICAgICBpZGVudGlmaWVyID0gYFRyYW5zYWN0aW9uIGF0IGJsb2NrIGhhc2ggIiR7YmxvY2tIYXNofSIgYXQgaW5kZXggIiR7aW5kZXgyfSJgOwogICAgICAgICAgaWYgKGJsb2NrTnVtYmVyICYmIGluZGV4MiAhPT0gdm9pZCAwKQogICAgICAgICAgICBpZGVudGlmaWVyID0gYFRyYW5zYWN0aW9uIGF0IGJsb2NrIG51bWJlciAiJHtibG9ja051bWJlcn0iIGF0IGluZGV4ICIke2luZGV4Mn0iYDsKICAgICAgICAgIGlmIChoYXNoMykKICAgICAgICAgICAgaWRlbnRpZmllciA9IGBUcmFuc2FjdGlvbiB3aXRoIGhhc2ggIiR7aGFzaDN9ImA7CiAgICAgICAgICBzdXBlcihgJHtpZGVudGlmaWVyfSBjb3VsZCBub3QgYmUgZm91bmQuYCwgewogICAgICAgICAgICBuYW1lOiAiVHJhbnNhY3Rpb25Ob3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBUcmFuc2FjdGlvblJlY2VpcHROb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGhhc2g6IGhhc2gzIH0pIHsKICAgICAgICAgIHN1cGVyKGBUcmFuc2FjdGlvbiByZWNlaXB0IHdpdGggaGFzaCAiJHtoYXNoM30iIGNvdWxkIG5vdCBiZSBmb3VuZC4gVGhlIFRyYW5zYWN0aW9uIG1heSBub3QgYmUgcHJvY2Vzc2VkIG9uIGEgYmxvY2sgeWV0LmAsIHsKICAgICAgICAgICAgbmFtZTogIlRyYW5zYWN0aW9uUmVjZWlwdE5vdEZvdW5kRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFdhaXRGb3JUcmFuc2FjdGlvblJlY2VpcHRUaW1lb3V0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgaGFzaDogaGFzaDMgfSkgewogICAgICAgICAgc3VwZXIoYFRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciB0cmFuc2FjdGlvbiB3aXRoIGhhc2ggIiR7aGFzaDN9IiB0byBiZSBjb25maXJtZWQuYCwgeyBuYW1lOiAiV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy91dGlscy5qcwogIHZhciBnZXRDb250cmFjdEFkZHJlc3MsIGdldFVybDsKICB2YXIgaW5pdF91dGlsczMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvdXRpbHMuanMiKCkgewogICAgICBnZXRDb250cmFjdEFkZHJlc3MgPSAoYWRkcmVzcykgPT4gYWRkcmVzczsKICAgICAgZ2V0VXJsID0gKHVybCkgPT4gdXJsOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9jb250cmFjdC5qcwogIHZhciBDYWxsRXhlY3V0aW9uRXJyb3IsIENvbnRyYWN0RnVuY3Rpb25FeGVjdXRpb25FcnJvciwgQ29udHJhY3RGdW5jdGlvblJldmVydGVkRXJyb3IsIENvbnRyYWN0RnVuY3Rpb25aZXJvRGF0YUVycm9yLCBDb3VudGVyZmFjdHVhbERlcGxveW1lbnRGYWlsZWRFcnJvciwgUmF3Q29udHJhY3RFcnJvcjsKICB2YXIgaW5pdF9jb250cmFjdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9jb250cmFjdC5qcyIoKSB7CiAgICAgIGluaXRfcGFyc2VBY2NvdW50KCk7CiAgICAgIGluaXRfc29saWRpdHkoKTsKICAgICAgaW5pdF9kZWNvZGVFcnJvclJlc3VsdCgpOwogICAgICBpbml0X2Zvcm1hdEFiaUl0ZW0yKCk7CiAgICAgIGluaXRfZm9ybWF0QWJpSXRlbVdpdGhBcmdzKCk7CiAgICAgIGluaXRfZ2V0QWJpSXRlbSgpOwogICAgICBpbml0X2Zvcm1hdEV0aGVyKCk7CiAgICAgIGluaXRfZm9ybWF0R3dlaSgpOwogICAgICBpbml0X2FiaSgpOwogICAgICBpbml0X2Jhc2UoKTsKICAgICAgaW5pdF9zdGF0ZU92ZXJyaWRlKCk7CiAgICAgIGluaXRfdHJhbnNhY3Rpb24oKTsKICAgICAgaW5pdF91dGlsczMoKTsKICAgICAgQ2FsbEV4ZWN1dGlvbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBhY2NvdW50OiBhY2NvdW50XywgZG9jc1BhdGg6IGRvY3NQYXRoOSwgY2hhaW4sIGRhdGEsIGdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIG5vbmNlLCB0bywgdmFsdWUsIHN0YXRlT3ZlcnJpZGUgfSkgewogICAgICAgICAgY29uc3QgYWNjb3VudCA9IGFjY291bnRfID8gcGFyc2VBY2NvdW50KGFjY291bnRfKSA6IHZvaWQgMDsKICAgICAgICAgIGxldCBwcmV0dHlBcmdzID0gcHJldHR5UHJpbnQoewogICAgICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgICAgICB0bywKICAgICAgICAgICAgdmFsdWU6IHR5cGVvZiB2YWx1ZSAhPT0gInVuZGVmaW5lZCIgJiYgYCR7Zm9ybWF0RXRoZXIodmFsdWUpfSAke2NoYWluPy5uYXRpdmVDdXJyZW5jeT8uc3ltYm9sIHx8ICJFVEgifWAsCiAgICAgICAgICAgIGRhdGEsCiAgICAgICAgICAgIGdhcywKICAgICAgICAgICAgZ2FzUHJpY2U6IHR5cGVvZiBnYXNQcmljZSAhPT0gInVuZGVmaW5lZCIgJiYgYCR7Zm9ybWF0R3dlaShnYXNQcmljZSl9IGd3ZWlgLAogICAgICAgICAgICBtYXhGZWVQZXJHYXM6IHR5cGVvZiBtYXhGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkobWF4RmVlUGVyR2FzKX0gZ3dlaWAsCiAgICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiB0eXBlb2YgbWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkobWF4UHJpb3JpdHlGZWVQZXJHYXMpfSBnd2VpYCwKICAgICAgICAgICAgbm9uY2UKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHsKICAgICAgICAgICAgcHJldHR5QXJncyArPSBgCiR7cHJldHR5U3RhdGVPdmVycmlkZShzdGF0ZU92ZXJyaWRlKX1gOwogICAgICAgICAgfQogICAgICAgICAgc3VwZXIoY2F1c2Uuc2hvcnRNZXNzYWdlLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAuLi5jYXVzZS5tZXRhTWVzc2FnZXMgPyBbLi4uY2F1c2UubWV0YU1lc3NhZ2VzLCAiICJdIDogW10sCiAgICAgICAgICAgICAgIlJhdyBDYWxsIEFyZ3VtZW50czoiLAogICAgICAgICAgICAgIHByZXR0eUFyZ3MKICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgICAgIG5hbWU6ICJDYWxsRXhlY3V0aW9uRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY2F1c2UiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5jYXVzZSA9IGNhdXNlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29udHJhY3RGdW5jdGlvbkV4ZWN1dGlvbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBhYmk6IGFiaTIsIGFyZ3MsIGNvbnRyYWN0QWRkcmVzcywgZG9jc1BhdGg6IGRvY3NQYXRoOSwgZnVuY3Rpb25OYW1lLCBzZW5kZXIgfSkgewogICAgICAgICAgY29uc3QgYWJpSXRlbSA9IGdldEFiaUl0ZW0oeyBhYmk6IGFiaTIsIGFyZ3MsIG5hbWU6IGZ1bmN0aW9uTmFtZSB9KTsKICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEFyZ3MgPSBhYmlJdGVtID8gZm9ybWF0QWJpSXRlbVdpdGhBcmdzKHsKICAgICAgICAgICAgYWJpSXRlbSwKICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgaW5jbHVkZUZ1bmN0aW9uTmFtZTogZmFsc2UsCiAgICAgICAgICAgIGluY2x1ZGVOYW1lOiBmYWxzZQogICAgICAgICAgfSkgOiB2b2lkIDA7CiAgICAgICAgICBjb25zdCBmdW5jdGlvbldpdGhQYXJhbXMgPSBhYmlJdGVtID8gZm9ybWF0QWJpSXRlbTIoYWJpSXRlbSwgeyBpbmNsdWRlTmFtZTogdHJ1ZSB9KSA6IHZvaWQgMDsKICAgICAgICAgIGNvbnN0IHByZXR0eUFyZ3MgPSBwcmV0dHlQcmludCh7CiAgICAgICAgICAgIGFkZHJlc3M6IGNvbnRyYWN0QWRkcmVzcyAmJiBnZXRDb250cmFjdEFkZHJlc3MoY29udHJhY3RBZGRyZXNzKSwKICAgICAgICAgICAgZnVuY3Rpb246IGZ1bmN0aW9uV2l0aFBhcmFtcywKICAgICAgICAgICAgYXJnczogZm9ybWF0dGVkQXJncyAmJiBmb3JtYXR0ZWRBcmdzICE9PSAiKCkiICYmIGAke1suLi5BcnJheShmdW5jdGlvbk5hbWU/Lmxlbmd0aCA/PyAwKS5rZXlzKCldLm1hcCgoKSA9PiAiICIpLmpvaW4oIiIpfSR7Zm9ybWF0dGVkQXJnc31gLAogICAgICAgICAgICBzZW5kZXIKICAgICAgICAgIH0pOwogICAgICAgICAgc3VwZXIoY2F1c2Uuc2hvcnRNZXNzYWdlIHx8IGBBbiB1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyB0aGUgY29udHJhY3QgZnVuY3Rpb24gIiR7ZnVuY3Rpb25OYW1lfSIuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgLi4uY2F1c2UubWV0YU1lc3NhZ2VzID8gWy4uLmNhdXNlLm1ldGFNZXNzYWdlcywgIiAiXSA6IFtdLAogICAgICAgICAgICAgIHByZXR0eUFyZ3MgJiYgIkNvbnRyYWN0IENhbGw6IiwKICAgICAgICAgICAgICBwcmV0dHlBcmdzCiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiQ29udHJhY3RGdW5jdGlvbkV4ZWN1dGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFiaSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFyZ3MiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJjYXVzZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNvbnRyYWN0QWRkcmVzcyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImZvcm1hdHRlZEFyZ3MiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJmdW5jdGlvbk5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kZXIiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5hYmkgPSBhYmkyOwogICAgICAgICAgdGhpcy5hcmdzID0gYXJnczsKICAgICAgICAgIHRoaXMuY2F1c2UgPSBjYXVzZTsKICAgICAgICAgIHRoaXMuY29udHJhY3RBZGRyZXNzID0gY29udHJhY3RBZGRyZXNzOwogICAgICAgICAgdGhpcy5mdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7CiAgICAgICAgICB0aGlzLnNlbmRlciA9IHNlbmRlcjsKICAgICAgICB9CiAgICAgIH07CiAgICAgIENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGFiaTogYWJpMiwgZGF0YSwgZnVuY3Rpb25OYW1lLCBtZXNzYWdlIH0pIHsKICAgICAgICAgIGxldCBjYXVzZTsKICAgICAgICAgIGxldCBkZWNvZGVkRGF0YSA9IHZvaWQgMDsKICAgICAgICAgIGxldCBtZXRhTWVzc2FnZXM7CiAgICAgICAgICBsZXQgcmVhc29uOwogICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YSAhPT0gIjB4IikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGRlY29kZWREYXRhID0gZGVjb2RlRXJyb3JSZXN1bHQoeyBhYmk6IGFiaTIsIGRhdGEgfSk7CiAgICAgICAgICAgICAgY29uc3QgeyBhYmlJdGVtLCBlcnJvck5hbWUsIGFyZ3M6IGVycm9yQXJncyB9ID0gZGVjb2RlZERhdGE7CiAgICAgICAgICAgICAgaWYgKGVycm9yTmFtZSA9PT0gIkVycm9yIikgewogICAgICAgICAgICAgICAgcmVhc29uID0gZXJyb3JBcmdzWzBdOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3JOYW1lID09PSAiUGFuaWMiKSB7CiAgICAgICAgICAgICAgICBjb25zdCBbZmlyc3RBcmddID0gZXJyb3JBcmdzOwogICAgICAgICAgICAgICAgcmVhc29uID0gcGFuaWNSZWFzb25zW2ZpcnN0QXJnXTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29uc3QgZXJyb3JXaXRoUGFyYW1zID0gYWJpSXRlbSA/IGZvcm1hdEFiaUl0ZW0yKGFiaUl0ZW0sIHsgaW5jbHVkZU5hbWU6IHRydWUgfSkgOiB2b2lkIDA7CiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRBcmdzID0gYWJpSXRlbSAmJiBlcnJvckFyZ3MgPyBmb3JtYXRBYmlJdGVtV2l0aEFyZ3MoewogICAgICAgICAgICAgICAgICBhYmlJdGVtLAogICAgICAgICAgICAgICAgICBhcmdzOiBlcnJvckFyZ3MsCiAgICAgICAgICAgICAgICAgIGluY2x1ZGVGdW5jdGlvbk5hbWU6IGZhbHNlLAogICAgICAgICAgICAgICAgICBpbmNsdWRlTmFtZTogZmFsc2UKICAgICAgICAgICAgICAgIH0pIDogdm9pZCAwOwogICAgICAgICAgICAgICAgbWV0YU1lc3NhZ2VzID0gWwogICAgICAgICAgICAgICAgICBlcnJvcldpdGhQYXJhbXMgPyBgRXJyb3I6ICR7ZXJyb3JXaXRoUGFyYW1zfWAgOiAiIiwKICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkQXJncyAmJiBmb3JtYXR0ZWRBcmdzICE9PSAiKCkiID8gYCAgICAgICAke1suLi5BcnJheShlcnJvck5hbWU/Lmxlbmd0aCA/PyAwKS5rZXlzKCldLm1hcCgoKSA9PiAiICIpLmpvaW4oIiIpfSR7Zm9ybWF0dGVkQXJnc31gIDogIiIKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICBjYXVzZSA9IGVycjsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlKQogICAgICAgICAgICByZWFzb24gPSBtZXNzYWdlOwogICAgICAgICAgbGV0IHNpZ25hdHVyZTsKICAgICAgICAgIGlmIChjYXVzZSBpbnN0YW5jZW9mIEFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvcikgewogICAgICAgICAgICBzaWduYXR1cmUgPSBjYXVzZS5zaWduYXR1cmU7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlcyA9IFsKICAgICAgICAgICAgICBgVW5hYmxlIHRvIGRlY29kZSBzaWduYXR1cmUgIiR7c2lnbmF0dXJlfSIgYXMgaXQgd2FzIG5vdCBmb3VuZCBvbiB0aGUgcHJvdmlkZWQgQUJJLmAsCiAgICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXJyb3IgZXhpc3RzIG9uIGl0LiIsCiAgICAgICAgICAgICAgYFlvdSBjYW4gbG9vayB1cCB0aGUgZGVjb2RlZCBzaWduYXR1cmUgaGVyZTogaHR0cHM6Ly9vcGVuY2hhaW4ueHl6L3NpZ25hdHVyZXM/cXVlcnk9JHtzaWduYXR1cmV9LmAKICAgICAgICAgICAgXTsKICAgICAgICAgIH0KICAgICAgICAgIHN1cGVyKHJlYXNvbiAmJiByZWFzb24gIT09ICJleGVjdXRpb24gcmV2ZXJ0ZWQiIHx8IHNpZ25hdHVyZSA/IFsKICAgICAgICAgICAgYFRoZSBjb250cmFjdCBmdW5jdGlvbiAiJHtmdW5jdGlvbk5hbWV9IiByZXZlcnRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgJHtzaWduYXR1cmUgPyAic2lnbmF0dXJlIiA6ICJyZWFzb24ifTpgLAogICAgICAgICAgICByZWFzb24gfHwgc2lnbmF0dXJlCiAgICAgICAgICBdLmpvaW4oIlxuIikgOiBgVGhlIGNvbnRyYWN0IGZ1bmN0aW9uICIke2Z1bmN0aW9uTmFtZX0iIHJldmVydGVkLmAsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIG1ldGFNZXNzYWdlcywKICAgICAgICAgICAgbmFtZTogIkNvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRhdGEiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJyZWFzb24iLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaWduYXR1cmUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5kYXRhID0gZGVjb2RlZERhdGE7CiAgICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvbjsKICAgICAgICAgIHRoaXMuc2lnbmF0dXJlID0gc2lnbmF0dXJlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29udHJhY3RGdW5jdGlvblplcm9EYXRhRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZnVuY3Rpb25OYW1lIH0pIHsKICAgICAgICAgIHN1cGVyKGBUaGUgY29udHJhY3QgZnVuY3Rpb24gIiR7ZnVuY3Rpb25OYW1lfSIgcmV0dXJuZWQgbm8gZGF0YSAoIjB4IikuYCwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAiVGhpcyBjb3VsZCBiZSBkdWUgdG8gYW55IG9mIHRoZSBmb2xsb3dpbmc6IiwKICAgICAgICAgICAgICBgICAtIFRoZSBjb250cmFjdCBkb2VzIG5vdCBoYXZlIHRoZSBmdW5jdGlvbiAiJHtmdW5jdGlvbk5hbWV9IixgLAogICAgICAgICAgICAgICIgIC0gVGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBjb250cmFjdCBmdW5jdGlvbiBtYXkgYmUgaW52YWxpZCwgb3IiLAogICAgICAgICAgICAgICIgIC0gVGhlIGFkZHJlc3MgaXMgbm90IGEgY29udHJhY3QuIgogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQ29udHJhY3RGdW5jdGlvblplcm9EYXRhRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIENvdW50ZXJmYWN0dWFsRGVwbG95bWVudEZhaWxlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGZhY3RvcnkgfSkgewogICAgICAgICAgc3VwZXIoYERlcGxveW1lbnQgZm9yIGNvdW50ZXJmYWN0dWFsIGNvbnRyYWN0IGNhbGwgZmFpbGVkJHtmYWN0b3J5ID8gYCBmb3IgZmFjdG9yeSAiJHtmYWN0b3J5fSIuYCA6ICIifWAsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgIlBsZWFzZSBlbnN1cmU6IiwKICAgICAgICAgICAgICAiLSBUaGUgYGZhY3RvcnlgIGlzIGEgdmFsaWQgY29udHJhY3QgZGVwbG95bWVudCBmYWN0b3J5IChpZS4gQ3JlYXRlMiBGYWN0b3J5LCBFUkMtNDMzNyBGYWN0b3J5LCBldGMpLiIsCiAgICAgICAgICAgICAgIi0gVGhlIGBmYWN0b3J5RGF0YWAgaXMgYSB2YWxpZCBlbmNvZGVkIGZ1bmN0aW9uIGNhbGwgZm9yIGNvbnRyYWN0IGRlcGxveW1lbnQgZnVuY3Rpb24gb24gdGhlIGZhY3RvcnkuIgogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQ291bnRlcmZhY3R1YWxEZXBsb3ltZW50RmFpbGVkRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFJhd0NvbnRyYWN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZGF0YSwgbWVzc2FnZSB9KSB7CiAgICAgICAgICBzdXBlcihtZXNzYWdlIHx8ICIiLCB7IG5hbWU6ICJSYXdDb250cmFjdEVycm9yIiB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29kZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IDMKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkYXRhIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9yZXF1ZXN0LmpzCiAgdmFyIEh0dHBSZXF1ZXN0RXJyb3IsIFdlYlNvY2tldFJlcXVlc3RFcnJvciwgUnBjUmVxdWVzdEVycm9yLCBTb2NrZXRDbG9zZWRFcnJvciwgVGltZW91dEVycm9yOwogIHZhciBpbml0X3JlcXVlc3QgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvcmVxdWVzdC5qcyIoKSB7CiAgICAgIGluaXRfc3RyaW5naWZ5KCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X3V0aWxzMygpOwogICAgICBIdHRwUmVxdWVzdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGJvZHksIGNhdXNlLCBkZXRhaWxzLCBoZWFkZXJzLCBzdGF0dXMsIHVybCB9KSB7CiAgICAgICAgICBzdXBlcigiSFRUUCByZXF1ZXN0IGZhaWxlZC4iLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBkZXRhaWxzLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBzdGF0dXMgJiYgYFN0YXR1czogJHtzdGF0dXN9YCwKICAgICAgICAgICAgICBgVVJMOiAke2dldFVybCh1cmwpfWAsCiAgICAgICAgICAgICAgYm9keSAmJiBgUmVxdWVzdCBib2R5OiAke3N0cmluZ2lmeShib2R5KX1gCiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiSHR0cFJlcXVlc3RFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJib2R5IiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiaGVhZGVycyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInN0YXR1cyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInVybCIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwogICAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyczsKICAgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOwogICAgICAgICAgdGhpcy51cmwgPSB1cmw7CiAgICAgICAgfQogICAgICB9OwogICAgICBXZWJTb2NrZXRSZXF1ZXN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYm9keSwgY2F1c2UsIGRldGFpbHMsIHVybCB9KSB7CiAgICAgICAgICBzdXBlcigiV2ViU29ja2V0IHJlcXVlc3QgZmFpbGVkLiIsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIGRldGFpbHMsCiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBVUkw6ICR7Z2V0VXJsKHVybCl9YCwKICAgICAgICAgICAgICBib2R5ICYmIGBSZXF1ZXN0IGJvZHk6ICR7c3RyaW5naWZ5KGJvZHkpfWAKICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgICAgIG5hbWU6ICJXZWJTb2NrZXRSZXF1ZXN0RXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFJwY1JlcXVlc3RFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBib2R5LCBlcnJvciwgdXJsIH0pIHsKICAgICAgICAgIHN1cGVyKCJSUEMgUmVxdWVzdCBmYWlsZWQuIiwgewogICAgICAgICAgICBjYXVzZTogZXJyb3IsCiAgICAgICAgICAgIGRldGFpbHM6IGVycm9yLm1lc3NhZ2UsCiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogW2BVUkw6ICR7Z2V0VXJsKHVybCl9YCwgYFJlcXVlc3QgYm9keTogJHtzdHJpbmdpZnkoYm9keSl9YF0sCiAgICAgICAgICAgIG5hbWU6ICJScGNSZXF1ZXN0RXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29kZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmNvZGUgPSBlcnJvci5jb2RlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU29ja2V0Q2xvc2VkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgdXJsIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoIlRoZSBzb2NrZXQgaGFzIGJlZW4gY2xvc2VkLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbdXJsICYmIGBVUkw6ICR7Z2V0VXJsKHVybCl9YF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiU29ja2V0Q2xvc2VkRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFRpbWVvdXRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBib2R5LCB1cmwgfSkgewogICAgICAgICAgc3VwZXIoIlRoZSByZXF1ZXN0IHRvb2sgdG9vIGxvbmcgdG8gcmVzcG9uZC4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6ICJUaGUgcmVxdWVzdCB0aW1lZCBvdXQuIiwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYFVSTDogJHtnZXRVcmwodXJsKX1gLCBgUmVxdWVzdCBib2R5OiAke3N0cmluZ2lmeShib2R5KX1gXSwKICAgICAgICAgICAgbmFtZTogIlRpbWVvdXRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvcnBjLmpzCiAgdmFyIHVua25vd25FcnJvckNvZGUsIFJwY0Vycm9yLCBQcm92aWRlclJwY0Vycm9yLCBQYXJzZVJwY0Vycm9yLCBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yLCBNZXRob2ROb3RGb3VuZFJwY0Vycm9yLCBJbnZhbGlkUGFyYW1zUnBjRXJyb3IsIEludGVybmFsUnBjRXJyb3IsIEludmFsaWRJbnB1dFJwY0Vycm9yLCBSZXNvdXJjZU5vdEZvdW5kUnBjRXJyb3IsIFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciwgVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yLCBNZXRob2ROb3RTdXBwb3J0ZWRScGNFcnJvciwgTGltaXRFeGNlZWRlZFJwY0Vycm9yLCBKc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IsIFVzZXJSZWplY3RlZFJlcXVlc3RFcnJvciwgVW5hdXRob3JpemVkUHJvdmlkZXJFcnJvciwgVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLCBQcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yLCBDaGFpbkRpc2Nvbm5lY3RlZEVycm9yLCBTd2l0Y2hDaGFpbkVycm9yLCBVbmtub3duUnBjRXJyb3I7CiAgdmFyIGluaXRfcnBjID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL3JwYy5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X3JlcXVlc3QoKTsKICAgICAgdW5rbm93bkVycm9yQ29kZSA9IC0xOwogICAgICBScGNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UsIHsgY29kZSwgZG9jc1BhdGg6IGRvY3NQYXRoOSwgbWV0YU1lc3NhZ2VzLCBuYW1lLCBzaG9ydE1lc3NhZ2UgfSkgewogICAgICAgICAgc3VwZXIoc2hvcnRNZXNzYWdlLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IG1ldGFNZXNzYWdlcyB8fCBjYXVzZT8ubWV0YU1lc3NhZ2VzLAogICAgICAgICAgICBuYW1lOiBuYW1lIHx8ICJScGNFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJjb2RlIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWUgfHwgY2F1c2UubmFtZTsKICAgICAgICAgIHRoaXMuY29kZSA9IGNhdXNlIGluc3RhbmNlb2YgUnBjUmVxdWVzdEVycm9yID8gY2F1c2UuY29kZSA6IGNvZGUgPz8gdW5rbm93bkVycm9yQ29kZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFByb3ZpZGVyUnBjRXJyb3IgPSBjbGFzcyBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgb3B0aW9ucykgewogICAgICAgICAgc3VwZXIoY2F1c2UsIG9wdGlvbnMpOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkYXRhIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGF0YSA9IG9wdGlvbnMuZGF0YTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFBhcnNlUnBjRXJyb3IgPSBjbGFzcyBfUGFyc2VScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1BhcnNlUnBjRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlBhcnNlUnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJJbnZhbGlkIEpTT04gd2FzIHJlY2VpdmVkIGJ5IHRoZSBzZXJ2ZXIuIEFuIGVycm9yIG9jY3VycmVkIG9uIHRoZSBzZXJ2ZXIgd2hpbGUgcGFyc2luZyB0aGUgSlNPTiB0ZXh0LiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhcnNlUnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzI3MDAKICAgICAgfSk7CiAgICAgIEludmFsaWRSZXF1ZXN0UnBjRXJyb3IgPSBjbGFzcyBfSW52YWxpZFJlcXVlc3RScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX0ludmFsaWRSZXF1ZXN0UnBjRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIkludmFsaWRSZXF1ZXN0UnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJKU09OIGlzIG5vdCBhIHZhbGlkIHJlcXVlc3Qgb2JqZWN0LiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEludmFsaWRSZXF1ZXN0UnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzI2MDAKICAgICAgfSk7CiAgICAgIE1ldGhvZE5vdEZvdW5kUnBjRXJyb3IgPSBjbGFzcyBfTWV0aG9kTm90Rm91bmRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBtZXRob2QgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfTWV0aG9kTm90Rm91bmRScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiTWV0aG9kTm90Rm91bmRScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogYFRoZSBtZXRob2Qke21ldGhvZCA/IGAgIiR7bWV0aG9kfSJgIDogIiJ9IGRvZXMgbm90IGV4aXN0IC8gaXMgbm90IGF2YWlsYWJsZS5gCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXRob2ROb3RGb3VuZFJwY0Vycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogLTMyNjAxCiAgICAgIH0pOwogICAgICBJbnZhbGlkUGFyYW1zUnBjRXJyb3IgPSBjbGFzcyBfSW52YWxpZFBhcmFtc1JwY0Vycm9yIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfSW52YWxpZFBhcmFtc1JwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkUGFyYW1zUnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6IFsKICAgICAgICAgICAgICAiSW52YWxpZCBwYXJhbWV0ZXJzIHdlcmUgcHJvdmlkZWQgdG8gdGhlIFJQQyBtZXRob2QuIiwKICAgICAgICAgICAgICAiRG91YmxlIGNoZWNrIHlvdSBoYXZlIHByb3ZpZGVkIHRoZSBjb3JyZWN0IHBhcmFtZXRlcnMuIgogICAgICAgICAgICBdLmpvaW4oIlxuIikKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEludmFsaWRQYXJhbXNScGNFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC0zMjYwMgogICAgICB9KTsKICAgICAgSW50ZXJuYWxScGNFcnJvciA9IGNsYXNzIF9JbnRlcm5hbFJwY0Vycm9yIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfSW50ZXJuYWxScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiSW50ZXJuYWxScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIkFuIGludGVybmFsIGVycm9yIHdhcyByZWNlaXZlZC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRlcm5hbFJwY0Vycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogLTMyNjAzCiAgICAgIH0pOwogICAgICBJbnZhbGlkSW5wdXRScGNFcnJvciA9IGNsYXNzIF9JbnZhbGlkSW5wdXRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX0ludmFsaWRJbnB1dFJwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkSW5wdXRScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogWwogICAgICAgICAgICAgICJNaXNzaW5nIG9yIGludmFsaWQgcGFyYW1ldGVycy4iLAogICAgICAgICAgICAgICJEb3VibGUgY2hlY2sgeW91IGhhdmUgcHJvdmlkZWQgdGhlIGNvcnJlY3QgcGFyYW1ldGVycy4iCiAgICAgICAgICAgIF0uam9pbigiXG4iKQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW52YWxpZElucHV0UnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzJlMwogICAgICB9KTsKICAgICAgUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yID0gY2xhc3MgX1Jlc291cmNlTm90Rm91bmRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1Jlc291cmNlTm90Rm91bmRScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiUmVxdWVzdGVkIHJlc291cmNlIG5vdCBmb3VuZC4iCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJSZXNvdXJjZU5vdEZvdW5kUnBjRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZXNvdXJjZU5vdEZvdW5kUnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzIwMDEKICAgICAgfSk7CiAgICAgIFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciA9IGNsYXNzIF9SZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IgZXh0ZW5kcyBScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UpIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9SZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIlJlcXVlc3RlZCByZXNvdXJjZSBub3QgYXZhaWxhYmxlLiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC0zMjAwMgogICAgICB9KTsKICAgICAgVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yID0gY2xhc3MgX1RyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1RyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiVHJhbnNhY3Rpb24gY3JlYXRpb24gZmFpbGVkLiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC0zMjAwMwogICAgICB9KTsKICAgICAgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IgPSBjbGFzcyBfTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IgZXh0ZW5kcyBScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UsIHsgbWV0aG9kIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX01ldGhvZE5vdFN1cHBvcnRlZFJwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJNZXRob2ROb3RTdXBwb3J0ZWRScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogYE1ldGhvZCR7bWV0aG9kID8gYCAiJHttZXRob2R9ImAgOiAiIn0gaXMgbm90IGltcGxlbWVudGVkLmAKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1ldGhvZE5vdFN1cHBvcnRlZFJwY0Vycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogLTMyMDA0CiAgICAgIH0pOwogICAgICBMaW1pdEV4Y2VlZGVkUnBjRXJyb3IgPSBjbGFzcyBfTGltaXRFeGNlZWRlZFJwY0Vycm9yIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfTGltaXRFeGNlZWRlZFJwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJMaW1pdEV4Y2VlZGVkUnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJSZXF1ZXN0IGV4Y2VlZHMgZGVmaW5lZCBsaW1pdC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaW1pdEV4Y2VlZGVkUnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzIwMDUKICAgICAgfSk7CiAgICAgIEpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvciA9IGNsYXNzIF9Kc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UpIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9Kc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIkpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIlZlcnNpb24gb2YgSlNPTi1SUEMgcHJvdG9jb2wgaXMgbm90IHN1cHBvcnRlZC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzIwMDYKICAgICAgfSk7CiAgICAgIFVzZXJSZWplY3RlZFJlcXVlc3RFcnJvciA9IGNsYXNzIF9Vc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBQcm92aWRlclJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1VzZXJSZWplY3RlZFJlcXVlc3RFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiVXNlclJlamVjdGVkUmVxdWVzdEVycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiVXNlciByZWplY3RlZCB0aGUgcmVxdWVzdC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiA0MDAxCiAgICAgIH0pOwogICAgICBVbmF1dGhvcml6ZWRQcm92aWRlckVycm9yID0gY2xhc3MgX1VuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IgZXh0ZW5kcyBQcm92aWRlclJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1VuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlVuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJUaGUgcmVxdWVzdGVkIG1ldGhvZCBhbmQvb3IgYWNjb3VudCBoYXMgbm90IGJlZW4gYXV0aG9yaXplZCBieSB0aGUgdXNlci4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVbmF1dGhvcml6ZWRQcm92aWRlckVycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogNDEwMAogICAgICB9KTsKICAgICAgVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yID0gY2xhc3MgX1Vuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvciBleHRlbmRzIFByb3ZpZGVyUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlLCB7IG1ldGhvZCB9ID0ge30pIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9VbnN1cHBvcnRlZFByb3ZpZGVyTWV0aG9kRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlVuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogYFRoZSBQcm92aWRlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQgbWV0aG9kJHttZXRob2QgPyBgICIgJHttZXRob2R9ImAgOiAiIn0uYAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogNDIwMAogICAgICB9KTsKICAgICAgUHJvdmlkZXJEaXNjb25uZWN0ZWRFcnJvciA9IGNsYXNzIF9Qcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yIGV4dGVuZHMgUHJvdmlkZXJScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UpIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9Qcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJQcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiVGhlIFByb3ZpZGVyIGlzIGRpc2Nvbm5lY3RlZCBmcm9tIGFsbCBjaGFpbnMuIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUHJvdmlkZXJEaXNjb25uZWN0ZWRFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IDQ5MDAKICAgICAgfSk7CiAgICAgIENoYWluRGlzY29ubmVjdGVkRXJyb3IgPSBjbGFzcyBfQ2hhaW5EaXNjb25uZWN0ZWRFcnJvciBleHRlbmRzIFByb3ZpZGVyUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfQ2hhaW5EaXNjb25uZWN0ZWRFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiQ2hhaW5EaXNjb25uZWN0ZWRFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIlRoZSBQcm92aWRlciBpcyBub3QgY29ubmVjdGVkIHRvIHRoZSByZXF1ZXN0ZWQgY2hhaW4uIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2hhaW5EaXNjb25uZWN0ZWRFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IDQ5MDEKICAgICAgfSk7CiAgICAgIFN3aXRjaENoYWluRXJyb3IgPSBjbGFzcyBfU3dpdGNoQ2hhaW5FcnJvciBleHRlbmRzIFByb3ZpZGVyUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfU3dpdGNoQ2hhaW5FcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiU3dpdGNoQ2hhaW5FcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIkFuIGVycm9yIG9jY3VycmVkIHdoZW4gYXR0ZW1wdGluZyB0byBzd2l0Y2ggY2hhaW4uIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3dpdGNoQ2hhaW5FcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IDQ5MDIKICAgICAgfSk7CiAgICAgIFVua25vd25ScGNFcnJvciA9IGNsYXNzIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBuYW1lOiAiVW5rbm93blJwY0Vycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiQW4gdW5rbm93biBSUEMgZXJyb3Igb2NjdXJyZWQuIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vX21kLmpzCiAgZnVuY3Rpb24gc2V0QmlnVWludDY0KHZpZXcsIGJ5dGVPZmZzZXQsIHZhbHVlLCBpc0xFMikgewogICAgaWYgKHR5cGVvZiB2aWV3LnNldEJpZ1VpbnQ2NCA9PT0gImZ1bmN0aW9uIikKICAgICAgcmV0dXJuIHZpZXcuc2V0QmlnVWludDY0KGJ5dGVPZmZzZXQsIHZhbHVlLCBpc0xFMik7CiAgICBjb25zdCBfMzJuMiA9IEJpZ0ludCgzMik7CiAgICBjb25zdCBfdTMyX21heCA9IEJpZ0ludCg0Mjk0OTY3Mjk1KTsKICAgIGNvbnN0IHdoID0gTnVtYmVyKHZhbHVlID4+IF8zMm4yICYgX3UzMl9tYXgpOwogICAgY29uc3Qgd2wgPSBOdW1iZXIodmFsdWUgJiBfdTMyX21heCk7CiAgICBjb25zdCBoID0gaXNMRTIgPyA0IDogMDsKICAgIGNvbnN0IGwgPSBpc0xFMiA/IDAgOiA0OwogICAgdmlldy5zZXRVaW50MzIoYnl0ZU9mZnNldCArIGgsIHdoLCBpc0xFMik7CiAgICB2aWV3LnNldFVpbnQzMihieXRlT2Zmc2V0ICsgbCwgd2wsIGlzTEUyKTsKICB9CiAgdmFyIENoaSwgTWFqLCBIYXNoTUQ7CiAgdmFyIGluaXRfbWQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL19tZC5qcyIoKSB7CiAgICAgIGluaXRfYXNzZXJ0KCk7CiAgICAgIGluaXRfdXRpbHMyKCk7CiAgICAgIENoaSA9IChhLCBiLCBjKSA9PiBhICYgYiBeIH5hICYgYzsKICAgICAgTWFqID0gKGEsIGIsIGMpID0+IGEgJiBiIF4gYSAmIGMgXiBiICYgYzsKICAgICAgSGFzaE1EID0gY2xhc3MgZXh0ZW5kcyBIYXNoIHsKICAgICAgICBjb25zdHJ1Y3RvcihibG9ja0xlbiwgb3V0cHV0TGVuLCBwYWRPZmZzZXQsIGlzTEUyKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgdGhpcy5ibG9ja0xlbiA9IGJsb2NrTGVuOwogICAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0aGlzLnBhZE9mZnNldCA9IHBhZE9mZnNldDsKICAgICAgICAgIHRoaXMuaXNMRSA9IGlzTEUyOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy5sZW5ndGggPSAwOwogICAgICAgICAgdGhpcy5wb3MgPSAwOwogICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tMZW4pOwogICAgICAgICAgdGhpcy52aWV3ID0gY3JlYXRlVmlldyh0aGlzLmJ1ZmZlcik7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZShkYXRhKSB7CiAgICAgICAgICBleGlzdHModGhpcyk7CiAgICAgICAgICBjb25zdCB7IHZpZXcsIGJ1ZmZlcjogYnVmZmVyMiwgYmxvY2tMZW4gfSA9IHRoaXM7CiAgICAgICAgICBkYXRhID0gdG9CeXRlczIoZGF0YSk7CiAgICAgICAgICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aDsKICAgICAgICAgIGZvciAobGV0IHBvcyA9IDA7IHBvcyA8IGxlbjsgKSB7CiAgICAgICAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihibG9ja0xlbiAtIHRoaXMucG9zLCBsZW4gLSBwb3MpOwogICAgICAgICAgICBpZiAodGFrZSA9PT0gYmxvY2tMZW4pIHsKICAgICAgICAgICAgICBjb25zdCBkYXRhVmlldyA9IGNyZWF0ZVZpZXcoZGF0YSk7CiAgICAgICAgICAgICAgZm9yICg7IGJsb2NrTGVuIDw9IGxlbiAtIHBvczsgcG9zICs9IGJsb2NrTGVuKQogICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzKGRhdGFWaWV3LCBwb3MpOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJ1ZmZlcjIuc2V0KGRhdGEuc3ViYXJyYXkocG9zLCBwb3MgKyB0YWtlKSwgdGhpcy5wb3MpOwogICAgICAgICAgICB0aGlzLnBvcyArPSB0YWtlOwogICAgICAgICAgICBwb3MgKz0gdGFrZTsKICAgICAgICAgICAgaWYgKHRoaXMucG9zID09PSBibG9ja0xlbikgewogICAgICAgICAgICAgIHRoaXMucHJvY2Vzcyh2aWV3LCAwKTsKICAgICAgICAgICAgICB0aGlzLnBvcyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHRoaXMubGVuZ3RoICs9IGRhdGEubGVuZ3RoOwogICAgICAgICAgdGhpcy5yb3VuZENsZWFuKCk7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgZGlnZXN0SW50byhvdXQpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzKTsKICAgICAgICAgIG91dHB1dChvdXQsIHRoaXMpOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IHRydWU7CiAgICAgICAgICBjb25zdCB7IGJ1ZmZlcjogYnVmZmVyMiwgdmlldywgYmxvY2tMZW4sIGlzTEU6IGlzTEUyIH0gPSB0aGlzOwogICAgICAgICAgbGV0IHsgcG9zIH0gPSB0aGlzOwogICAgICAgICAgYnVmZmVyMltwb3MrK10gPSAxMjg7CiAgICAgICAgICB0aGlzLmJ1ZmZlci5zdWJhcnJheShwb3MpLmZpbGwoMCk7CiAgICAgICAgICBpZiAodGhpcy5wYWRPZmZzZXQgPiBibG9ja0xlbiAtIHBvcykgewogICAgICAgICAgICB0aGlzLnByb2Nlc3ModmlldywgMCk7CiAgICAgICAgICAgIHBvcyA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKGxldCBpID0gcG9zOyBpIDwgYmxvY2tMZW47IGkrKykKICAgICAgICAgICAgYnVmZmVyMltpXSA9IDA7CiAgICAgICAgICBzZXRCaWdVaW50NjQodmlldywgYmxvY2tMZW4gLSA4LCBCaWdJbnQodGhpcy5sZW5ndGggKiA4KSwgaXNMRTIpOwogICAgICAgICAgdGhpcy5wcm9jZXNzKHZpZXcsIDApOwogICAgICAgICAgY29uc3Qgb3ZpZXcgPSBjcmVhdGVWaWV3KG91dCk7CiAgICAgICAgICBjb25zdCBsZW4gPSB0aGlzLm91dHB1dExlbjsKICAgICAgICAgIGlmIChsZW4gJSA0KQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIl9zaGEyOiBvdXRwdXRMZW4gc2hvdWxkIGJlIGFsaWduZWQgdG8gMzJiaXQiKTsKICAgICAgICAgIGNvbnN0IG91dExlbiA9IGxlbiAvIDQ7CiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0KCk7CiAgICAgICAgICBpZiAob3V0TGVuID4gc3RhdGUubGVuZ3RoKQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIl9zaGEyOiBvdXRwdXRMZW4gYmlnZ2VyIHRoYW4gc3RhdGUiKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0TGVuOyBpKyspCiAgICAgICAgICAgIG92aWV3LnNldFVpbnQzMig0ICogaSwgc3RhdGVbaV0sIGlzTEUyKTsKICAgICAgICB9CiAgICAgICAgZGlnZXN0KCkgewogICAgICAgICAgY29uc3QgeyBidWZmZXI6IGJ1ZmZlcjIsIG91dHB1dExlbiB9ID0gdGhpczsKICAgICAgICAgIHRoaXMuZGlnZXN0SW50byhidWZmZXIyKTsKICAgICAgICAgIGNvbnN0IHJlcyA9IGJ1ZmZlcjIuc2xpY2UoMCwgb3V0cHV0TGVuKTsKICAgICAgICAgIHRoaXMuZGVzdHJveSgpOwogICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICB9CiAgICAgICAgX2Nsb25lSW50byh0bykgewogICAgICAgICAgdG8gfHwgKHRvID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKSk7CiAgICAgICAgICB0by5zZXQoLi4udGhpcy5nZXQoKSk7CiAgICAgICAgICBjb25zdCB7IGJsb2NrTGVuLCBidWZmZXI6IGJ1ZmZlcjIsIGxlbmd0aCwgZmluaXNoZWQsIGRlc3Ryb3llZCwgcG9zIH0gPSB0aGlzOwogICAgICAgICAgdG8ubGVuZ3RoID0gbGVuZ3RoOwogICAgICAgICAgdG8ucG9zID0gcG9zOwogICAgICAgICAgdG8uZmluaXNoZWQgPSBmaW5pc2hlZDsKICAgICAgICAgIHRvLmRlc3Ryb3llZCA9IGRlc3Ryb3llZDsKICAgICAgICAgIGlmIChsZW5ndGggJSBibG9ja0xlbikKICAgICAgICAgICAgdG8uYnVmZmVyLnNldChidWZmZXIyKTsKICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9zaGEyNTYuanMKICB2YXIgU0hBMjU2X0ssIFNIQTI1Nl9JViwgU0hBMjU2X1csIFNIQTI1Niwgc2hhMjU2OwogIHZhciBpbml0X3NoYTI1NiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vc2hhMjU2LmpzIigpIHsKICAgICAgaW5pdF9tZCgpOwogICAgICBpbml0X3V0aWxzMigpOwogICAgICBTSEEyNTZfSyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgVWludDMyQXJyYXkoWwogICAgICAgIDExMTYzNTI0MDgsCiAgICAgICAgMTg5OTQ0NzQ0MSwKICAgICAgICAzMDQ5MzIzNDcxLAogICAgICAgIDM5MjEwMDk1NzMsCiAgICAgICAgOTYxOTg3MTYzLAogICAgICAgIDE1MDg5NzA5OTMsCiAgICAgICAgMjQ1MzYzNTc0OCwKICAgICAgICAyODcwNzYzMjIxLAogICAgICAgIDM2MjQzODEwODAsCiAgICAgICAgMzEwNTk4NDAxLAogICAgICAgIDYwNzIyNTI3OCwKICAgICAgICAxNDI2ODgxOTg3LAogICAgICAgIDE5MjUwNzgzODgsCiAgICAgICAgMjE2MjA3ODIwNiwKICAgICAgICAyNjE0ODg4MTAzLAogICAgICAgIDMyNDgyMjI1ODAsCiAgICAgICAgMzgzNTM5MDQwMSwKICAgICAgICA0MDIyMjI0Nzc0LAogICAgICAgIDI2NDM0NzA3OCwKICAgICAgICA2MDQ4MDc2MjgsCiAgICAgICAgNzcwMjU1OTgzLAogICAgICAgIDEyNDkxNTAxMjIsCiAgICAgICAgMTU1NTA4MTY5MiwKICAgICAgICAxOTk2MDY0OTg2LAogICAgICAgIDI1NTQyMjA4ODIsCiAgICAgICAgMjgyMTgzNDM0OSwKICAgICAgICAyOTUyOTk2ODA4LAogICAgICAgIDMyMTAzMTM2NzEsCiAgICAgICAgMzMzNjU3MTg5MSwKICAgICAgICAzNTg0NTI4NzExLAogICAgICAgIDExMzkyNjk5MywKICAgICAgICAzMzgyNDE4OTUsCiAgICAgICAgNjY2MzA3MjA1LAogICAgICAgIDc3MzUyOTkxMiwKICAgICAgICAxMjk0NzU3MzcyLAogICAgICAgIDEzOTYxODIyOTEsCiAgICAgICAgMTY5NTE4MzcwMCwKICAgICAgICAxOTg2NjYxMDUxLAogICAgICAgIDIxNzcwMjYzNTAsCiAgICAgICAgMjQ1Njk1NjAzNywKICAgICAgICAyNzMwNDg1OTIxLAogICAgICAgIDI4MjAzMDI0MTEsCiAgICAgICAgMzI1OTczMDgwMCwKICAgICAgICAzMzQ1NzY0NzcxLAogICAgICAgIDM1MTYwNjU4MTcsCiAgICAgICAgMzYwMDM1MjgwNCwKICAgICAgICA0MDk0NTcxOTA5LAogICAgICAgIDI3NTQyMzM0NCwKICAgICAgICA0MzAyMjc3MzQsCiAgICAgICAgNTA2OTQ4NjE2LAogICAgICAgIDY1OTA2MDU1NiwKICAgICAgICA4ODM5OTc4NzcsCiAgICAgICAgOTU4MTM5NTcxLAogICAgICAgIDEzMjI4MjIyMTgsCiAgICAgICAgMTUzNzAwMjA2MywKICAgICAgICAxNzQ3ODczNzc5LAogICAgICAgIDE5NTU1NjIyMjIsCiAgICAgICAgMjAyNDEwNDgxNSwKICAgICAgICAyMjI3NzMwNDUyLAogICAgICAgIDIzNjE4NTI0MjQsCiAgICAgICAgMjQyODQzNjQ3NCwKICAgICAgICAyNzU2NzM0MTg3LAogICAgICAgIDMyMDQwMzE0NzksCiAgICAgICAgMzMyOTMyNTI5OAogICAgICBdKTsKICAgICAgU0hBMjU2X0lWID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheShbCiAgICAgICAgMTc3OTAzMzcwMywKICAgICAgICAzMTQ0MTM0Mjc3LAogICAgICAgIDEwMTM5MDQyNDIsCiAgICAgICAgMjc3MzQ4MDc2MiwKICAgICAgICAxMzU5ODkzMTE5LAogICAgICAgIDI2MDA4MjI5MjQsCiAgICAgICAgNTI4NzM0NjM1LAogICAgICAgIDE1NDE0NTkyMjUKICAgICAgXSk7CiAgICAgIFNIQTI1Nl9XID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheSg2NCk7CiAgICAgIFNIQTI1NiA9IGNsYXNzIGV4dGVuZHMgSGFzaE1EIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKDY0LCAzMiwgOCwgZmFsc2UpOwogICAgICAgICAgdGhpcy5BID0gU0hBMjU2X0lWWzBdIHwgMDsKICAgICAgICAgIHRoaXMuQiA9IFNIQTI1Nl9JVlsxXSB8IDA7CiAgICAgICAgICB0aGlzLkMgPSBTSEEyNTZfSVZbMl0gfCAwOwogICAgICAgICAgdGhpcy5EID0gU0hBMjU2X0lWWzNdIHwgMDsKICAgICAgICAgIHRoaXMuRSA9IFNIQTI1Nl9JVls0XSB8IDA7CiAgICAgICAgICB0aGlzLkYgPSBTSEEyNTZfSVZbNV0gfCAwOwogICAgICAgICAgdGhpcy5HID0gU0hBMjU2X0lWWzZdIHwgMDsKICAgICAgICAgIHRoaXMuSCA9IFNIQTI1Nl9JVls3XSB8IDA7CiAgICAgICAgfQogICAgICAgIGdldCgpIHsKICAgICAgICAgIGNvbnN0IHsgQSwgQiwgQywgRCwgRSwgRiwgRywgSCB9ID0gdGhpczsKICAgICAgICAgIHJldHVybiBbQSwgQiwgQywgRCwgRSwgRiwgRywgSF07CiAgICAgICAgfQogICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZQogICAgICAgIHNldChBLCBCLCBDLCBELCBFLCBGLCBHLCBIKSB7CiAgICAgICAgICB0aGlzLkEgPSBBIHwgMDsKICAgICAgICAgIHRoaXMuQiA9IEIgfCAwOwogICAgICAgICAgdGhpcy5DID0gQyB8IDA7CiAgICAgICAgICB0aGlzLkQgPSBEIHwgMDsKICAgICAgICAgIHRoaXMuRSA9IEUgfCAwOwogICAgICAgICAgdGhpcy5GID0gRiB8IDA7CiAgICAgICAgICB0aGlzLkcgPSBHIHwgMDsKICAgICAgICAgIHRoaXMuSCA9IEggfCAwOwogICAgICAgIH0KICAgICAgICBwcm9jZXNzKHZpZXcsIG9mZnNldCkgewogICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrLCBvZmZzZXQgKz0gNCkKICAgICAgICAgICAgU0hBMjU2X1dbaV0gPSB2aWV3LmdldFVpbnQzMihvZmZzZXQsIGZhbHNlKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAxNjsgaSA8IDY0OyBpKyspIHsKICAgICAgICAgICAgY29uc3QgVzE1ID0gU0hBMjU2X1dbaSAtIDE1XTsKICAgICAgICAgICAgY29uc3QgVzIgPSBTSEEyNTZfV1tpIC0gMl07CiAgICAgICAgICAgIGNvbnN0IHMwID0gcm90cihXMTUsIDcpIF4gcm90cihXMTUsIDE4KSBeIFcxNSA+Pj4gMzsKICAgICAgICAgICAgY29uc3QgczEgPSByb3RyKFcyLCAxNykgXiByb3RyKFcyLCAxOSkgXiBXMiA+Pj4gMTA7CiAgICAgICAgICAgIFNIQTI1Nl9XW2ldID0gczEgKyBTSEEyNTZfV1tpIC0gN10gKyBzMCArIFNIQTI1Nl9XW2kgLSAxNl0gfCAwOwogICAgICAgICAgfQogICAgICAgICAgbGV0IHsgQSwgQiwgQywgRCwgRSwgRiwgRywgSCB9ID0gdGhpczsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjQ7IGkrKykgewogICAgICAgICAgICBjb25zdCBzaWdtYTEgPSByb3RyKEUsIDYpIF4gcm90cihFLCAxMSkgXiByb3RyKEUsIDI1KTsKICAgICAgICAgICAgY29uc3QgVDEgPSBIICsgc2lnbWExICsgQ2hpKEUsIEYsIEcpICsgU0hBMjU2X0tbaV0gKyBTSEEyNTZfV1tpXSB8IDA7CiAgICAgICAgICAgIGNvbnN0IHNpZ21hMCA9IHJvdHIoQSwgMikgXiByb3RyKEEsIDEzKSBeIHJvdHIoQSwgMjIpOwogICAgICAgICAgICBjb25zdCBUMiA9IHNpZ21hMCArIE1haihBLCBCLCBDKSB8IDA7CiAgICAgICAgICAgIEggPSBHOwogICAgICAgICAgICBHID0gRjsKICAgICAgICAgICAgRiA9IEU7CiAgICAgICAgICAgIEUgPSBEICsgVDEgfCAwOwogICAgICAgICAgICBEID0gQzsKICAgICAgICAgICAgQyA9IEI7CiAgICAgICAgICAgIEIgPSBBOwogICAgICAgICAgICBBID0gVDEgKyBUMiB8IDA7CiAgICAgICAgICB9CiAgICAgICAgICBBID0gQSArIHRoaXMuQSB8IDA7CiAgICAgICAgICBCID0gQiArIHRoaXMuQiB8IDA7CiAgICAgICAgICBDID0gQyArIHRoaXMuQyB8IDA7CiAgICAgICAgICBEID0gRCArIHRoaXMuRCB8IDA7CiAgICAgICAgICBFID0gRSArIHRoaXMuRSB8IDA7CiAgICAgICAgICBGID0gRiArIHRoaXMuRiB8IDA7CiAgICAgICAgICBHID0gRyArIHRoaXMuRyB8IDA7CiAgICAgICAgICBIID0gSCArIHRoaXMuSCB8IDA7CiAgICAgICAgICB0aGlzLnNldChBLCBCLCBDLCBELCBFLCBGLCBHLCBIKTsKICAgICAgICB9CiAgICAgICAgcm91bmRDbGVhbigpIHsKICAgICAgICAgIFNIQTI1Nl9XLmZpbGwoMCk7CiAgICAgICAgfQogICAgICAgIGRlc3Ryb3koKSB7CiAgICAgICAgICB0aGlzLnNldCgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKICAgICAgICAgIHRoaXMuYnVmZmVyLmZpbGwoMCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBzaGEyNTYgPSAvKiBAX19QVVJFX18gKi8gd3JhcENvbnN0cnVjdG9yKCgpID0+IG5ldyBTSEEyNTYoKSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC91dGlscy5qcwogIHZhciB1dGlsc19leHBvcnRzID0ge307CiAgX19leHBvcnQodXRpbHNfZXhwb3J0cywgewogICAgYWJ5dGVzOiAoKSA9PiBhYnl0ZXMsCiAgICBiaXRHZXQ6ICgpID0+IGJpdEdldCwKICAgIGJpdExlbjogKCkgPT4gYml0TGVuLAogICAgYml0TWFzazogKCkgPT4gYml0TWFzaywKICAgIGJpdFNldDogKCkgPT4gYml0U2V0LAogICAgYnl0ZXNUb0hleDogKCkgPT4gYnl0ZXNUb0hleDIsCiAgICBieXRlc1RvTnVtYmVyQkU6ICgpID0+IGJ5dGVzVG9OdW1iZXJCRSwKICAgIGJ5dGVzVG9OdW1iZXJMRTogKCkgPT4gYnl0ZXNUb051bWJlckxFLAogICAgY29uY2F0Qnl0ZXM6ICgpID0+IGNvbmNhdEJ5dGVzMywKICAgIGNyZWF0ZUhtYWNEcmJnOiAoKSA9PiBjcmVhdGVIbWFjRHJiZywKICAgIGVuc3VyZUJ5dGVzOiAoKSA9PiBlbnN1cmVCeXRlcywKICAgIGVxdWFsQnl0ZXM6ICgpID0+IGVxdWFsQnl0ZXMsCiAgICBoZXhUb0J5dGVzOiAoKSA9PiBoZXhUb0J5dGVzMiwKICAgIGhleFRvTnVtYmVyOiAoKSA9PiBoZXhUb051bWJlcjIsCiAgICBpc0J5dGVzOiAoKSA9PiBpc0J5dGVzMiwKICAgIG51bWJlclRvQnl0ZXNCRTogKCkgPT4gbnVtYmVyVG9CeXRlc0JFLAogICAgbnVtYmVyVG9CeXRlc0xFOiAoKSA9PiBudW1iZXJUb0J5dGVzTEUsCiAgICBudW1iZXJUb0hleFVucGFkZGVkOiAoKSA9PiBudW1iZXJUb0hleFVucGFkZGVkLAogICAgbnVtYmVyVG9WYXJCeXRlc0JFOiAoKSA9PiBudW1iZXJUb1ZhckJ5dGVzQkUsCiAgICB1dGY4VG9CeXRlczogKCkgPT4gdXRmOFRvQnl0ZXMyLAogICAgdmFsaWRhdGVPYmplY3Q6ICgpID0+IHZhbGlkYXRlT2JqZWN0CiAgfSk7CiAgZnVuY3Rpb24gaXNCeXRlczIoYSkgewogICAgcmV0dXJuIGEgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IGEgIT0gbnVsbCAmJiB0eXBlb2YgYSA9PT0gIm9iamVjdCIgJiYgYS5jb25zdHJ1Y3Rvci5uYW1lID09PSAiVWludDhBcnJheSI7CiAgfQogIGZ1bmN0aW9uIGFieXRlcyhpdGVtKSB7CiAgICBpZiAoIWlzQnl0ZXMyKGl0ZW0pKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVpbnQ4QXJyYXkgZXhwZWN0ZWQiKTsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb0hleDIoYnl0ZXMyKSB7CiAgICBhYnl0ZXMoYnl0ZXMyKTsKICAgIGxldCBoZXggPSAiIjsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMyLmxlbmd0aDsgaSsrKSB7CiAgICAgIGhleCArPSBoZXhlczJbYnl0ZXMyW2ldXTsKICAgIH0KICAgIHJldHVybiBoZXg7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvSGV4VW5wYWRkZWQobnVtKSB7CiAgICBjb25zdCBoZXggPSBudW0udG9TdHJpbmcoMTYpOwogICAgcmV0dXJuIGhleC5sZW5ndGggJiAxID8gYDAke2hleH1gIDogaGV4OwogIH0KICBmdW5jdGlvbiBoZXhUb051bWJlcjIoaGV4KSB7CiAgICBpZiAodHlwZW9mIGhleCAhPT0gInN0cmluZyIpCiAgICAgIHRocm93IG5ldyBFcnJvcigiaGV4IHN0cmluZyBleHBlY3RlZCwgZ290ICIgKyB0eXBlb2YgaGV4KTsKICAgIHJldHVybiBCaWdJbnQoaGV4ID09PSAiIiA/ICIwIiA6IGAweCR7aGV4fWApOwogIH0KICBmdW5jdGlvbiBhc2NpaVRvQmFzZTE2KGNoYXIpIHsKICAgIGlmIChjaGFyID49IGFzY2lpcy5fMCAmJiBjaGFyIDw9IGFzY2lpcy5fOSkKICAgICAgcmV0dXJuIGNoYXIgLSBhc2NpaXMuXzA7CiAgICBpZiAoY2hhciA+PSBhc2NpaXMuX0EgJiYgY2hhciA8PSBhc2NpaXMuX0YpCiAgICAgIHJldHVybiBjaGFyIC0gKGFzY2lpcy5fQSAtIDEwKTsKICAgIGlmIChjaGFyID49IGFzY2lpcy5fYSAmJiBjaGFyIDw9IGFzY2lpcy5fZikKICAgICAgcmV0dXJuIGNoYXIgLSAoYXNjaWlzLl9hIC0gMTApOwogICAgcmV0dXJuOwogIH0KICBmdW5jdGlvbiBoZXhUb0J5dGVzMihoZXgpIHsKICAgIGlmICh0eXBlb2YgaGV4ICE9PSAic3RyaW5nIikKICAgICAgdGhyb3cgbmV3IEVycm9yKCJoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgIiArIHR5cGVvZiBoZXgpOwogICAgY29uc3QgaGwgPSBoZXgubGVuZ3RoOwogICAgY29uc3QgYWwgPSBobCAvIDI7CiAgICBpZiAoaGwgJSAyKQogICAgICB0aHJvdyBuZXcgRXJyb3IoInBhZGRlZCBoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgdW5wYWRkZWQgaGV4IG9mIGxlbmd0aCAiICsgaGwpOwogICAgY29uc3QgYXJyYXkgPSBuZXcgVWludDhBcnJheShhbCk7CiAgICBmb3IgKGxldCBhaSA9IDAsIGhpID0gMDsgYWkgPCBhbDsgYWkrKywgaGkgKz0gMikgewogICAgICBjb25zdCBuMSA9IGFzY2lpVG9CYXNlMTYoaGV4LmNoYXJDb2RlQXQoaGkpKTsKICAgICAgY29uc3QgbjIgPSBhc2NpaVRvQmFzZTE2KGhleC5jaGFyQ29kZUF0KGhpICsgMSkpOwogICAgICBpZiAobjEgPT09IHZvaWQgMCB8fCBuMiA9PT0gdm9pZCAwKSB7CiAgICAgICAgY29uc3QgY2hhciA9IGhleFtoaV0gKyBoZXhbaGkgKyAxXTsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCBub24taGV4IGNoYXJhY3RlciAiJyArIGNoYXIgKyAnIiBhdCBpbmRleCAnICsgaGkpOwogICAgICB9CiAgICAgIGFycmF5W2FpXSA9IG4xICogMTYgKyBuMjsKICAgIH0KICAgIHJldHVybiBhcnJheTsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb051bWJlckJFKGJ5dGVzMikgewogICAgcmV0dXJuIGhleFRvTnVtYmVyMihieXRlc1RvSGV4MihieXRlczIpKTsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb051bWJlckxFKGJ5dGVzMikgewogICAgYWJ5dGVzKGJ5dGVzMik7CiAgICByZXR1cm4gaGV4VG9OdW1iZXIyKGJ5dGVzVG9IZXgyKFVpbnQ4QXJyYXkuZnJvbShieXRlczIpLnJldmVyc2UoKSkpOwogIH0KICBmdW5jdGlvbiBudW1iZXJUb0J5dGVzQkUobiwgbGVuKSB7CiAgICByZXR1cm4gaGV4VG9CeXRlczIobi50b1N0cmluZygxNikucGFkU3RhcnQobGVuICogMiwgIjAiKSk7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvQnl0ZXNMRShuLCBsZW4pIHsKICAgIHJldHVybiBudW1iZXJUb0J5dGVzQkUobiwgbGVuKS5yZXZlcnNlKCk7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvVmFyQnl0ZXNCRShuKSB7CiAgICByZXR1cm4gaGV4VG9CeXRlczIobnVtYmVyVG9IZXhVbnBhZGRlZChuKSk7CiAgfQogIGZ1bmN0aW9uIGVuc3VyZUJ5dGVzKHRpdGxlLCBoZXgsIGV4cGVjdGVkTGVuZ3RoKSB7CiAgICBsZXQgcmVzOwogICAgaWYgKHR5cGVvZiBoZXggPT09ICJzdHJpbmciKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmVzID0gaGV4VG9CeXRlczIoaGV4KTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aXRsZX0gbXVzdCBiZSB2YWxpZCBoZXggc3RyaW5nLCBnb3QgIiR7aGV4fSIuIENhdXNlOiAke2V9YCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXNCeXRlczIoaGV4KSkgewogICAgICByZXMgPSBVaW50OEFycmF5LmZyb20oaGV4KTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aXRsZX0gbXVzdCBiZSBoZXggc3RyaW5nIG9yIFVpbnQ4QXJyYXlgKTsKICAgIH0KICAgIGNvbnN0IGxlbiA9IHJlcy5sZW5ndGg7CiAgICBpZiAodHlwZW9mIGV4cGVjdGVkTGVuZ3RoID09PSAibnVtYmVyIiAmJiBsZW4gIT09IGV4cGVjdGVkTGVuZ3RoKQogICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGl0bGV9IGV4cGVjdGVkICR7ZXhwZWN0ZWRMZW5ndGh9IGJ5dGVzLCBnb3QgJHtsZW59YCk7CiAgICByZXR1cm4gcmVzOwogIH0KICBmdW5jdGlvbiBjb25jYXRCeXRlczMoLi4uYXJyYXlzKSB7CiAgICBsZXQgc3VtID0gMDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IGEgPSBhcnJheXNbaV07CiAgICAgIGFieXRlcyhhKTsKICAgICAgc3VtICs9IGEubGVuZ3RoOwogICAgfQogICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc3VtKTsKICAgIGZvciAobGV0IGkgPSAwLCBwYWQyID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhID0gYXJyYXlzW2ldOwogICAgICByZXMuc2V0KGEsIHBhZDIpOwogICAgICBwYWQyICs9IGEubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9CiAgZnVuY3Rpb24gZXF1YWxCeXRlcyhhLCBiKSB7CiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgZGlmZiA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspCiAgICAgIGRpZmYgfD0gYVtpXSBeIGJbaV07CiAgICByZXR1cm4gZGlmZiA9PT0gMDsKICB9CiAgZnVuY3Rpb24gdXRmOFRvQnl0ZXMyKHN0cikgewogICAgaWYgKHR5cGVvZiBzdHIgIT09ICJzdHJpbmciKQogICAgICB0aHJvdyBuZXcgRXJyb3IoYHV0ZjhUb0J5dGVzIGV4cGVjdGVkIHN0cmluZywgZ290ICR7dHlwZW9mIHN0cn1gKTsKICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyKSk7CiAgfQogIGZ1bmN0aW9uIGJpdExlbihuKSB7CiAgICBsZXQgbGVuOwogICAgZm9yIChsZW4gPSAwOyBuID4gXzBuMjsgbiA+Pj0gXzFuMiwgbGVuICs9IDEpCiAgICAgIDsKICAgIHJldHVybiBsZW47CiAgfQogIGZ1bmN0aW9uIGJpdEdldChuLCBwb3MpIHsKICAgIHJldHVybiBuID4+IEJpZ0ludChwb3MpICYgXzFuMjsKICB9CiAgZnVuY3Rpb24gYml0U2V0KG4sIHBvcywgdmFsdWUpIHsKICAgIHJldHVybiBuIHwgKHZhbHVlID8gXzFuMiA6IF8wbjIpIDw8IEJpZ0ludChwb3MpOwogIH0KICBmdW5jdGlvbiBjcmVhdGVIbWFjRHJiZyhoYXNoTGVuLCBxQnl0ZUxlbiwgaG1hY0ZuKSB7CiAgICBpZiAodHlwZW9mIGhhc2hMZW4gIT09ICJudW1iZXIiIHx8IGhhc2hMZW4gPCAyKQogICAgICB0aHJvdyBuZXcgRXJyb3IoImhhc2hMZW4gbXVzdCBiZSBhIG51bWJlciIpOwogICAgaWYgKHR5cGVvZiBxQnl0ZUxlbiAhPT0gIm51bWJlciIgfHwgcUJ5dGVMZW4gPCAyKQogICAgICB0aHJvdyBuZXcgRXJyb3IoInFCeXRlTGVuIG11c3QgYmUgYSBudW1iZXIiKTsKICAgIGlmICh0eXBlb2YgaG1hY0ZuICE9PSAiZnVuY3Rpb24iKQogICAgICB0aHJvdyBuZXcgRXJyb3IoImhtYWNGbiBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKICAgIGxldCB2ID0gdThuKGhhc2hMZW4pOwogICAgbGV0IGsgPSB1OG4oaGFzaExlbik7CiAgICBsZXQgaSA9IDA7CiAgICBjb25zdCByZXNldDIgPSAoKSA9PiB7CiAgICAgIHYuZmlsbCgxKTsKICAgICAgay5maWxsKDApOwogICAgICBpID0gMDsKICAgIH07CiAgICBjb25zdCBoID0gKC4uLmIpID0+IGhtYWNGbihrLCB2LCAuLi5iKTsKICAgIGNvbnN0IHJlc2VlZCA9IChzZWVkID0gdThuKCkpID0+IHsKICAgICAgayA9IGgodThmcihbMF0pLCBzZWVkKTsKICAgICAgdiA9IGgoKTsKICAgICAgaWYgKHNlZWQubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgayA9IGgodThmcihbMV0pLCBzZWVkKTsKICAgICAgdiA9IGgoKTsKICAgIH07CiAgICBjb25zdCBnZW4yID0gKCkgPT4gewogICAgICBpZiAoaSsrID49IDFlMykKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImRyYmc6IHRyaWVkIDEwMDAgdmFsdWVzIik7CiAgICAgIGxldCBsZW4gPSAwOwogICAgICBjb25zdCBvdXQgPSBbXTsKICAgICAgd2hpbGUgKGxlbiA8IHFCeXRlTGVuKSB7CiAgICAgICAgdiA9IGgoKTsKICAgICAgICBjb25zdCBzbCA9IHYuc2xpY2UoKTsKICAgICAgICBvdXQucHVzaChzbCk7CiAgICAgICAgbGVuICs9IHYubGVuZ3RoOwogICAgICB9CiAgICAgIHJldHVybiBjb25jYXRCeXRlczMoLi4ub3V0KTsKICAgIH07CiAgICBjb25zdCBnZW5VbnRpbCA9IChzZWVkLCBwcmVkKSA9PiB7CiAgICAgIHJlc2V0MigpOwogICAgICByZXNlZWQoc2VlZCk7CiAgICAgIGxldCByZXMgPSB2b2lkIDA7CiAgICAgIHdoaWxlICghKHJlcyA9IHByZWQoZ2VuMigpKSkpCiAgICAgICAgcmVzZWVkKCk7CiAgICAgIHJlc2V0MigpOwogICAgICByZXR1cm4gcmVzOwogICAgfTsKICAgIHJldHVybiBnZW5VbnRpbDsKICB9CiAgZnVuY3Rpb24gdmFsaWRhdGVPYmplY3Qob2JqZWN0LCB2YWxpZGF0b3JzLCBvcHRWYWxpZGF0b3JzID0ge30pIHsKICAgIGNvbnN0IGNoZWNrRmllbGQgPSAoZmllbGROYW1lLCB0eXBlLCBpc09wdGlvbmFsKSA9PiB7CiAgICAgIGNvbnN0IGNoZWNrVmFsID0gdmFsaWRhdG9yRm5zW3R5cGVdOwogICAgICBpZiAodHlwZW9mIGNoZWNrVmFsICE9PSAiZnVuY3Rpb24iKQogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWxpZGF0b3IgIiR7dHlwZX0iLCBleHBlY3RlZCBmdW5jdGlvbmApOwogICAgICBjb25zdCB2YWwgPSBvYmplY3RbZmllbGROYW1lXTsKICAgICAgaWYgKGlzT3B0aW9uYWwgJiYgdmFsID09PSB2b2lkIDApCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoIWNoZWNrVmFsKHZhbCwgb2JqZWN0KSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbSAke1N0cmluZyhmaWVsZE5hbWUpfT0ke3ZhbH0gKCR7dHlwZW9mIHZhbH0pLCBleHBlY3RlZCAke3R5cGV9YCk7CiAgICAgIH0KICAgIH07CiAgICBmb3IgKGNvbnN0IFtmaWVsZE5hbWUsIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbGlkYXRvcnMpKQogICAgICBjaGVja0ZpZWxkKGZpZWxkTmFtZSwgdHlwZSwgZmFsc2UpOwogICAgZm9yIChjb25zdCBbZmllbGROYW1lLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhvcHRWYWxpZGF0b3JzKSkKICAgICAgY2hlY2tGaWVsZChmaWVsZE5hbWUsIHR5cGUsIHRydWUpOwogICAgcmV0dXJuIG9iamVjdDsKICB9CiAgdmFyIF8wbjIsIF8xbjIsIF8ybjIsIGhleGVzMiwgYXNjaWlzLCBiaXRNYXNrLCB1OG4sIHU4ZnIsIHZhbGlkYXRvckZuczsKICB2YXIgaW5pdF91dGlsczQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L3V0aWxzLmpzIigpIHsKICAgICAgXzBuMiA9IEJpZ0ludCgwKTsKICAgICAgXzFuMiA9IEJpZ0ludCgxKTsKICAgICAgXzJuMiA9IEJpZ0ludCgyKTsKICAgICAgaGV4ZXMyID0gLyogQF9fUFVSRV9fICovIEFycmF5LmZyb20oeyBsZW5ndGg6IDI1NiB9LCAoXywgaSkgPT4gaS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgIjAiKSk7CiAgICAgIGFzY2lpcyA9IHsgXzA6IDQ4LCBfOTogNTcsIF9BOiA2NSwgX0Y6IDcwLCBfYTogOTcsIF9mOiAxMDIgfTsKICAgICAgYml0TWFzayA9IChuKSA9PiAoXzJuMiA8PCBCaWdJbnQobiAtIDEpKSAtIF8xbjI7CiAgICAgIHU4biA9IChkYXRhKSA9PiBuZXcgVWludDhBcnJheShkYXRhKTsKICAgICAgdThmciA9IChhcnIpID0+IFVpbnQ4QXJyYXkuZnJvbShhcnIpOwogICAgICB2YWxpZGF0b3JGbnMgPSB7CiAgICAgICAgYmlnaW50OiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAiYmlnaW50IiwKICAgICAgICBmdW5jdGlvbjogKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gImZ1bmN0aW9uIiwKICAgICAgICBib29sZWFuOiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAiYm9vbGVhbiIsCiAgICAgICAgc3RyaW5nOiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAic3RyaW5nIiwKICAgICAgICBzdHJpbmdPclVpbnQ4QXJyYXk6ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICJzdHJpbmciIHx8IGlzQnl0ZXMyKHZhbCksCiAgICAgICAgaXNTYWZlSW50ZWdlcjogKHZhbCkgPT4gTnVtYmVyLmlzU2FmZUludGVnZXIodmFsKSwKICAgICAgICBhcnJheTogKHZhbCkgPT4gQXJyYXkuaXNBcnJheSh2YWwpLAogICAgICAgIGZpZWxkOiAodmFsLCBvYmplY3QpID0+IG9iamVjdC5GcC5pc1ZhbGlkKHZhbCksCiAgICAgICAgaGFzaDogKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gImZ1bmN0aW9uIiAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWwub3V0cHV0TGVuKQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvbW9kdWxhci5qcwogIGZ1bmN0aW9uIG1vZChhLCBiKSB7CiAgICBjb25zdCByZXN1bHQgPSBhICUgYjsKICAgIHJldHVybiByZXN1bHQgPj0gXzBuMyA/IHJlc3VsdCA6IGIgKyByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIHBvdyhudW0sIHBvd2VyLCBtb2R1bG8pIHsKICAgIGlmIChtb2R1bG8gPD0gXzBuMyB8fCBwb3dlciA8IF8wbjMpCiAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcG93ZXIvbW9kdWxvID4gMCIpOwogICAgaWYgKG1vZHVsbyA9PT0gXzFuMykKICAgICAgcmV0dXJuIF8wbjM7CiAgICBsZXQgcmVzID0gXzFuMzsKICAgIHdoaWxlIChwb3dlciA+IF8wbjMpIHsKICAgICAgaWYgKHBvd2VyICYgXzFuMykKICAgICAgICByZXMgPSByZXMgKiBudW0gJSBtb2R1bG87CiAgICAgIG51bSA9IG51bSAqIG51bSAlIG1vZHVsbzsKICAgICAgcG93ZXIgPj49IF8xbjM7CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KICBmdW5jdGlvbiBwb3cyKHgsIHBvd2VyLCBtb2R1bG8pIHsKICAgIGxldCByZXMgPSB4OwogICAgd2hpbGUgKHBvd2VyLS0gPiBfMG4zKSB7CiAgICAgIHJlcyAqPSByZXM7CiAgICAgIHJlcyAlPSBtb2R1bG87CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KICBmdW5jdGlvbiBpbnZlcnQobnVtYmVyMiwgbW9kdWxvKSB7CiAgICBpZiAobnVtYmVyMiA9PT0gXzBuMyB8fCBtb2R1bG8gPD0gXzBuMykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmVydDogZXhwZWN0ZWQgcG9zaXRpdmUgaW50ZWdlcnMsIGdvdCBuPSR7bnVtYmVyMn0gbW9kPSR7bW9kdWxvfWApOwogICAgfQogICAgbGV0IGEgPSBtb2QobnVtYmVyMiwgbW9kdWxvKTsKICAgIGxldCBiID0gbW9kdWxvOwogICAgbGV0IHggPSBfMG4zLCB5ID0gXzFuMywgdSA9IF8xbjMsIHYgPSBfMG4zOwogICAgd2hpbGUgKGEgIT09IF8wbjMpIHsKICAgICAgY29uc3QgcSA9IGIgLyBhOwogICAgICBjb25zdCByID0gYiAlIGE7CiAgICAgIGNvbnN0IG0gPSB4IC0gdSAqIHE7CiAgICAgIGNvbnN0IG4gPSB5IC0gdiAqIHE7CiAgICAgIGIgPSBhLCBhID0gciwgeCA9IHUsIHkgPSB2LCB1ID0gbSwgdiA9IG47CiAgICB9CiAgICBjb25zdCBnY2QgPSBiOwogICAgaWYgKGdjZCAhPT0gXzFuMykKICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZlcnQ6IGRvZXMgbm90IGV4aXN0Iik7CiAgICByZXR1cm4gbW9kKHgsIG1vZHVsbyk7CiAgfQogIGZ1bmN0aW9uIHRvbmVsbGlTaGFua3MoUCkgewogICAgY29uc3QgbGVnZW5kcmVDID0gKFAgLSBfMW4zKSAvIF8ybjM7CiAgICBsZXQgUSwgUywgWjsKICAgIGZvciAoUSA9IFAgLSBfMW4zLCBTID0gMDsgUSAlIF8ybjMgPT09IF8wbjM7IFEgLz0gXzJuMywgUysrKQogICAgICA7CiAgICBmb3IgKFogPSBfMm4zOyBaIDwgUCAmJiBwb3coWiwgbGVnZW5kcmVDLCBQKSAhPT0gUCAtIF8xbjM7IForKykKICAgICAgOwogICAgaWYgKFMgPT09IDEpIHsKICAgICAgY29uc3QgcDFkaXY0ID0gKFAgKyBfMW4zKSAvIF80bjsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRvbmVsbGlGYXN0KEZwMiwgbikgewogICAgICAgIGNvbnN0IHJvb3QyID0gRnAyLnBvdyhuLCBwMWRpdjQpOwogICAgICAgIGlmICghRnAyLmVxbChGcDIuc3FyKHJvb3QyKSwgbikpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNxdWFyZSByb290Iik7CiAgICAgICAgcmV0dXJuIHJvb3QyOwogICAgICB9OwogICAgfQogICAgY29uc3QgUTFkaXYyID0gKFEgKyBfMW4zKSAvIF8ybjM7CiAgICByZXR1cm4gZnVuY3Rpb24gdG9uZWxsaVNsb3coRnAyLCBuKSB7CiAgICAgIGlmIChGcDIucG93KG4sIGxlZ2VuZHJlQykgPT09IEZwMi5uZWcoRnAyLk9ORSkpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpOwogICAgICBsZXQgciA9IFM7CiAgICAgIGxldCBnID0gRnAyLnBvdyhGcDIubXVsKEZwMi5PTkUsIFopLCBRKTsKICAgICAgbGV0IHggPSBGcDIucG93KG4sIFExZGl2Mik7CiAgICAgIGxldCBiID0gRnAyLnBvdyhuLCBRKTsKICAgICAgd2hpbGUgKCFGcDIuZXFsKGIsIEZwMi5PTkUpKSB7CiAgICAgICAgaWYgKEZwMi5lcWwoYiwgRnAyLlpFUk8pKQogICAgICAgICAgcmV0dXJuIEZwMi5aRVJPOwogICAgICAgIGxldCBtID0gMTsKICAgICAgICBmb3IgKGxldCB0MiA9IEZwMi5zcXIoYik7IG0gPCByOyBtKyspIHsKICAgICAgICAgIGlmIChGcDIuZXFsKHQyLCBGcDIuT05FKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB0MiA9IEZwMi5zcXIodDIpOwogICAgICAgIH0KICAgICAgICBjb25zdCBnZTIgPSBGcDIucG93KGcsIF8xbjMgPDwgQmlnSW50KHIgLSBtIC0gMSkpOwogICAgICAgIGcgPSBGcDIuc3FyKGdlMik7CiAgICAgICAgeCA9IEZwMi5tdWwoeCwgZ2UyKTsKICAgICAgICBiID0gRnAyLm11bChiLCBnKTsKICAgICAgICByID0gbTsKICAgICAgfQogICAgICByZXR1cm4geDsKICAgIH07CiAgfQogIGZ1bmN0aW9uIEZwU3FydChQKSB7CiAgICBpZiAoUCAlIF80biA9PT0gXzNuKSB7CiAgICAgIGNvbnN0IHAxZGl2NCA9IChQICsgXzFuMykgLyBfNG47CiAgICAgIHJldHVybiBmdW5jdGlvbiBzcXJ0M21vZDQoRnAyLCBuKSB7CiAgICAgICAgY29uc3Qgcm9vdDIgPSBGcDIucG93KG4sIHAxZGl2NCk7CiAgICAgICAgaWYgKCFGcDIuZXFsKEZwMi5zcXIocm9vdDIpLCBuKSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QiKTsKICAgICAgICByZXR1cm4gcm9vdDI7CiAgICAgIH07CiAgICB9CiAgICBpZiAoUCAlIF84biA9PT0gXzVuKSB7CiAgICAgIGNvbnN0IGMxID0gKFAgLSBfNW4pIC8gXzhuOwogICAgICByZXR1cm4gZnVuY3Rpb24gc3FydDVtb2Q4KEZwMiwgbikgewogICAgICAgIGNvbnN0IG4yID0gRnAyLm11bChuLCBfMm4zKTsKICAgICAgICBjb25zdCB2ID0gRnAyLnBvdyhuMiwgYzEpOwogICAgICAgIGNvbnN0IG52ID0gRnAyLm11bChuLCB2KTsKICAgICAgICBjb25zdCBpID0gRnAyLm11bChGcDIubXVsKG52LCBfMm4zKSwgdik7CiAgICAgICAgY29uc3Qgcm9vdDIgPSBGcDIubXVsKG52LCBGcDIuc3ViKGksIEZwMi5PTkUpKTsKICAgICAgICBpZiAoIUZwMi5lcWwoRnAyLnNxcihyb290MiksIG4pKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpOwogICAgICAgIHJldHVybiByb290MjsKICAgICAgfTsKICAgIH0KICAgIGlmIChQICUgXzE2biA9PT0gXzluKSB7CiAgICB9CiAgICByZXR1cm4gdG9uZWxsaVNoYW5rcyhQKTsKICB9CiAgZnVuY3Rpb24gdmFsaWRhdGVGaWVsZChmaWVsZCkgewogICAgY29uc3QgaW5pdGlhbCA9IHsKICAgICAgT1JERVI6ICJiaWdpbnQiLAogICAgICBNQVNLOiAiYmlnaW50IiwKICAgICAgQllURVM6ICJpc1NhZmVJbnRlZ2VyIiwKICAgICAgQklUUzogImlzU2FmZUludGVnZXIiCiAgICB9OwogICAgY29uc3Qgb3B0cyA9IEZJRUxEX0ZJRUxEUy5yZWR1Y2UoKG1hcCwgdmFsKSA9PiB7CiAgICAgIG1hcFt2YWxdID0gImZ1bmN0aW9uIjsKICAgICAgcmV0dXJuIG1hcDsKICAgIH0sIGluaXRpYWwpOwogICAgcmV0dXJuIHZhbGlkYXRlT2JqZWN0KGZpZWxkLCBvcHRzKTsKICB9CiAgZnVuY3Rpb24gRnBQb3coZjIsIG51bSwgcG93ZXIpIHsKICAgIGlmIChwb3dlciA8IF8wbjMpCiAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcG93ZXIgPiAwIik7CiAgICBpZiAocG93ZXIgPT09IF8wbjMpCiAgICAgIHJldHVybiBmMi5PTkU7CiAgICBpZiAocG93ZXIgPT09IF8xbjMpCiAgICAgIHJldHVybiBudW07CiAgICBsZXQgcCA9IGYyLk9ORTsKICAgIGxldCBkID0gbnVtOwogICAgd2hpbGUgKHBvd2VyID4gXzBuMykgewogICAgICBpZiAocG93ZXIgJiBfMW4zKQogICAgICAgIHAgPSBmMi5tdWwocCwgZCk7CiAgICAgIGQgPSBmMi5zcXIoZCk7CiAgICAgIHBvd2VyID4+PSBfMW4zOwogICAgfQogICAgcmV0dXJuIHA7CiAgfQogIGZ1bmN0aW9uIEZwSW52ZXJ0QmF0Y2goZjIsIG51bXMpIHsKICAgIGNvbnN0IHRtcCA9IG5ldyBBcnJheShudW1zLmxlbmd0aCk7CiAgICBjb25zdCBsYXN0TXVsdGlwbGllZCA9IG51bXMucmVkdWNlKChhY2MsIG51bSwgaSkgPT4gewogICAgICBpZiAoZjIuaXMwKG51bSkpCiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgdG1wW2ldID0gYWNjOwogICAgICByZXR1cm4gZjIubXVsKGFjYywgbnVtKTsKICAgIH0sIGYyLk9ORSk7CiAgICBjb25zdCBpbnZlcnRlZCA9IGYyLmludihsYXN0TXVsdGlwbGllZCk7CiAgICBudW1zLnJlZHVjZVJpZ2h0KChhY2MsIG51bSwgaSkgPT4gewogICAgICBpZiAoZjIuaXMwKG51bSkpCiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgdG1wW2ldID0gZjIubXVsKGFjYywgdG1wW2ldKTsKICAgICAgcmV0dXJuIGYyLm11bChhY2MsIG51bSk7CiAgICB9LCBpbnZlcnRlZCk7CiAgICByZXR1cm4gdG1wOwogIH0KICBmdW5jdGlvbiBuTGVuZ3RoKG4sIG5CaXRMZW5ndGgpIHsKICAgIGNvbnN0IF9uQml0TGVuZ3RoID0gbkJpdExlbmd0aCAhPT0gdm9pZCAwID8gbkJpdExlbmd0aCA6IG4udG9TdHJpbmcoMikubGVuZ3RoOwogICAgY29uc3QgbkJ5dGVMZW5ndGggPSBNYXRoLmNlaWwoX25CaXRMZW5ndGggLyA4KTsKICAgIHJldHVybiB7IG5CaXRMZW5ndGg6IF9uQml0TGVuZ3RoLCBuQnl0ZUxlbmd0aCB9OwogIH0KICBmdW5jdGlvbiBGaWVsZChPUkRFUiwgYml0TGVuMiwgaXNMRTIgPSBmYWxzZSwgcmVkZWYgPSB7fSkgewogICAgaWYgKE9SREVSIDw9IF8wbjMpCiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgRmllbGQgT1JERVIgPiAwLCBnb3QgJHtPUkRFUn1gKTsKICAgIGNvbnN0IHsgbkJpdExlbmd0aDogQklUUywgbkJ5dGVMZW5ndGg6IEJZVEVTIH0gPSBuTGVuZ3RoKE9SREVSLCBiaXRMZW4yKTsKICAgIGlmIChCWVRFUyA+IDIwNDgpCiAgICAgIHRocm93IG5ldyBFcnJvcigiRmllbGQgbGVuZ3RocyBvdmVyIDIwNDggYnl0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQiKTsKICAgIGNvbnN0IHNxcnRQID0gRnBTcXJ0KE9SREVSKTsKICAgIGNvbnN0IGYyID0gT2JqZWN0LmZyZWV6ZSh7CiAgICAgIE9SREVSLAogICAgICBCSVRTLAogICAgICBCWVRFUywKICAgICAgTUFTSzogYml0TWFzayhCSVRTKSwKICAgICAgWkVSTzogXzBuMywKICAgICAgT05FOiBfMW4zLAogICAgICBjcmVhdGU6IChudW0pID0+IG1vZChudW0sIE9SREVSKSwKICAgICAgaXNWYWxpZDogKG51bSkgPT4gewogICAgICAgIGlmICh0eXBlb2YgbnVtICE9PSAiYmlnaW50IikKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmaWVsZCBlbGVtZW50OiBleHBlY3RlZCBiaWdpbnQsIGdvdCAke3R5cGVvZiBudW19YCk7CiAgICAgICAgcmV0dXJuIF8wbjMgPD0gbnVtICYmIG51bSA8IE9SREVSOwogICAgICB9LAogICAgICBpczA6IChudW0pID0+IG51bSA9PT0gXzBuMywKICAgICAgaXNPZGQ6IChudW0pID0+IChudW0gJiBfMW4zKSA9PT0gXzFuMywKICAgICAgbmVnOiAobnVtKSA9PiBtb2QoLW51bSwgT1JERVIpLAogICAgICBlcWw6IChsaHMsIHJocykgPT4gbGhzID09PSByaHMsCiAgICAgIHNxcjogKG51bSkgPT4gbW9kKG51bSAqIG51bSwgT1JERVIpLAogICAgICBhZGQ6IChsaHMsIHJocykgPT4gbW9kKGxocyArIHJocywgT1JERVIpLAogICAgICBzdWI6IChsaHMsIHJocykgPT4gbW9kKGxocyAtIHJocywgT1JERVIpLAogICAgICBtdWw6IChsaHMsIHJocykgPT4gbW9kKGxocyAqIHJocywgT1JERVIpLAogICAgICBwb3c6IChudW0sIHBvd2VyKSA9PiBGcFBvdyhmMiwgbnVtLCBwb3dlciksCiAgICAgIGRpdjogKGxocywgcmhzKSA9PiBtb2QobGhzICogaW52ZXJ0KHJocywgT1JERVIpLCBPUkRFUiksCiAgICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBkb2Vzbid0IG5vcm1hbGl6ZQogICAgICBzcXJOOiAobnVtKSA9PiBudW0gKiBudW0sCiAgICAgIGFkZE46IChsaHMsIHJocykgPT4gbGhzICsgcmhzLAogICAgICBzdWJOOiAobGhzLCByaHMpID0+IGxocyAtIHJocywKICAgICAgbXVsTjogKGxocywgcmhzKSA9PiBsaHMgKiByaHMsCiAgICAgIGludjogKG51bSkgPT4gaW52ZXJ0KG51bSwgT1JERVIpLAogICAgICBzcXJ0OiByZWRlZi5zcXJ0IHx8ICgobikgPT4gc3FydFAoZjIsIG4pKSwKICAgICAgaW52ZXJ0QmF0Y2g6IChsc3QpID0+IEZwSW52ZXJ0QmF0Y2goZjIsIGxzdCksCiAgICAgIC8vIFRPRE86IGRvIHdlIHJlYWxseSBuZWVkIGNvbnN0YW50IGNtb3Y/CiAgICAgIC8vIFdlIGRvbid0IGhhdmUgY29uc3QtdGltZSBiaWdpbnRzIGFueXdheSwgc28gcHJvYmFibHkgd2lsbCBiZSBub3QgdmVyeSB1c2VmdWwKICAgICAgY21vdjogKGEsIGIsIGMpID0+IGMgPyBiIDogYSwKICAgICAgdG9CeXRlczogKG51bSkgPT4gaXNMRTIgPyBudW1iZXJUb0J5dGVzTEUobnVtLCBCWVRFUykgOiBudW1iZXJUb0J5dGVzQkUobnVtLCBCWVRFUyksCiAgICAgIGZyb21CeXRlczogKGJ5dGVzMikgPT4gewogICAgICAgIGlmIChieXRlczIubGVuZ3RoICE9PSBCWVRFUykKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRnAuZnJvbUJ5dGVzOiBleHBlY3RlZCAke0JZVEVTfSwgZ290ICR7Ynl0ZXMyLmxlbmd0aH1gKTsKICAgICAgICByZXR1cm4gaXNMRTIgPyBieXRlc1RvTnVtYmVyTEUoYnl0ZXMyKSA6IGJ5dGVzVG9OdW1iZXJCRShieXRlczIpOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBPYmplY3QuZnJlZXplKGYyKTsKICB9CiAgZnVuY3Rpb24gZ2V0RmllbGRCeXRlc0xlbmd0aChmaWVsZE9yZGVyKSB7CiAgICBpZiAodHlwZW9mIGZpZWxkT3JkZXIgIT09ICJiaWdpbnQiKQogICAgICB0aHJvdyBuZXcgRXJyb3IoImZpZWxkIG9yZGVyIG11c3QgYmUgYmlnaW50Iik7CiAgICBjb25zdCBiaXRMZW5ndGggPSBmaWVsZE9yZGVyLnRvU3RyaW5nKDIpLmxlbmd0aDsKICAgIHJldHVybiBNYXRoLmNlaWwoYml0TGVuZ3RoIC8gOCk7CiAgfQogIGZ1bmN0aW9uIGdldE1pbkhhc2hMZW5ndGgoZmllbGRPcmRlcikgewogICAgY29uc3QgbGVuZ3RoID0gZ2V0RmllbGRCeXRlc0xlbmd0aChmaWVsZE9yZGVyKTsKICAgIHJldHVybiBsZW5ndGggKyBNYXRoLmNlaWwobGVuZ3RoIC8gMik7CiAgfQogIGZ1bmN0aW9uIG1hcEhhc2hUb0ZpZWxkKGtleSwgZmllbGRPcmRlciwgaXNMRTIgPSBmYWxzZSkgewogICAgY29uc3QgbGVuID0ga2V5Lmxlbmd0aDsKICAgIGNvbnN0IGZpZWxkTGVuID0gZ2V0RmllbGRCeXRlc0xlbmd0aChmaWVsZE9yZGVyKTsKICAgIGNvbnN0IG1pbkxlbiA9IGdldE1pbkhhc2hMZW5ndGgoZmllbGRPcmRlcik7CiAgICBpZiAobGVuIDwgMTYgfHwgbGVuIDwgbWluTGVuIHx8IGxlbiA+IDEwMjQpCiAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHttaW5MZW59LTEwMjQgYnl0ZXMgb2YgaW5wdXQsIGdvdCAke2xlbn1gKTsKICAgIGNvbnN0IG51bSA9IGlzTEUyID8gYnl0ZXNUb051bWJlckJFKGtleSkgOiBieXRlc1RvTnVtYmVyTEUoa2V5KTsKICAgIGNvbnN0IHJlZHVjZWQgPSBtb2QobnVtLCBmaWVsZE9yZGVyIC0gXzFuMykgKyBfMW4zOwogICAgcmV0dXJuIGlzTEUyID8gbnVtYmVyVG9CeXRlc0xFKHJlZHVjZWQsIGZpZWxkTGVuKSA6IG51bWJlclRvQnl0ZXNCRShyZWR1Y2VkLCBmaWVsZExlbik7CiAgfQogIHZhciBfMG4zLCBfMW4zLCBfMm4zLCBfM24sIF80biwgXzVuLCBfOG4sIF85biwgXzE2biwgRklFTERfRklFTERTOwogIHZhciBpbml0X21vZHVsYXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L21vZHVsYXIuanMiKCkgewogICAgICBpbml0X3V0aWxzNCgpOwogICAgICBfMG4zID0gQmlnSW50KDApOwogICAgICBfMW4zID0gQmlnSW50KDEpOwogICAgICBfMm4zID0gQmlnSW50KDIpOwogICAgICBfM24gPSBCaWdJbnQoMyk7CiAgICAgIF80biA9IEJpZ0ludCg0KTsKICAgICAgXzVuID0gQmlnSW50KDUpOwogICAgICBfOG4gPSBCaWdJbnQoOCk7CiAgICAgIF85biA9IEJpZ0ludCg5KTsKICAgICAgXzE2biA9IEJpZ0ludCgxNik7CiAgICAgIEZJRUxEX0ZJRUxEUyA9IFsKICAgICAgICAiY3JlYXRlIiwKICAgICAgICAiaXNWYWxpZCIsCiAgICAgICAgImlzMCIsCiAgICAgICAgIm5lZyIsCiAgICAgICAgImludiIsCiAgICAgICAgInNxcnQiLAogICAgICAgICJzcXIiLAogICAgICAgICJlcWwiLAogICAgICAgICJhZGQiLAogICAgICAgICJzdWIiLAogICAgICAgICJtdWwiLAogICAgICAgICJwb3ciLAogICAgICAgICJkaXYiLAogICAgICAgICJhZGROIiwKICAgICAgICAic3ViTiIsCiAgICAgICAgIm11bE4iLAogICAgICAgICJzcXJOIgogICAgICBdOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvY3VydmUuanMKICBmdW5jdGlvbiB3TkFGKGMsIGJpdHMpIHsKICAgIGNvbnN0IGNvbnN0VGltZU5lZ2F0ZSA9IChjb25kaXRpb24sIGl0ZW0pID0+IHsKICAgICAgY29uc3QgbmVnID0gaXRlbS5uZWdhdGUoKTsKICAgICAgcmV0dXJuIGNvbmRpdGlvbiA/IG5lZyA6IGl0ZW07CiAgICB9OwogICAgY29uc3Qgb3B0cyA9IChXKSA9PiB7CiAgICAgIGNvbnN0IHdpbmRvd3MgPSBNYXRoLmNlaWwoYml0cyAvIFcpICsgMTsKICAgICAgY29uc3Qgd2luZG93U2l6ZSA9IDIgKiogKFcgLSAxKTsKICAgICAgcmV0dXJuIHsgd2luZG93cywgd2luZG93U2l6ZSB9OwogICAgfTsKICAgIHJldHVybiB7CiAgICAgIGNvbnN0VGltZU5lZ2F0ZSwKICAgICAgLy8gbm9uLWNvbnN0IHRpbWUgbXVsdGlwbGljYXRpb24gbGFkZGVyCiAgICAgIHVuc2FmZUxhZGRlcihlbG0sIG4pIHsKICAgICAgICBsZXQgcCA9IGMuWkVSTzsKICAgICAgICBsZXQgZCA9IGVsbTsKICAgICAgICB3aGlsZSAobiA+IF8wbjQpIHsKICAgICAgICAgIGlmIChuICYgXzFuNCkKICAgICAgICAgICAgcCA9IHAuYWRkKGQpOwogICAgICAgICAgZCA9IGQuZG91YmxlKCk7CiAgICAgICAgICBuID4+PSBfMW40OwogICAgICAgIH0KICAgICAgICByZXR1cm4gcDsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgYSB3TkFGIHByZWNvbXB1dGF0aW9uIHdpbmRvdy4gVXNlZCBmb3IgY2FjaGluZy4KICAgICAgICogRGVmYXVsdCB3aW5kb3cgc2l6ZSBpcyBzZXQgYnkgYHV0aWxzLnByZWNvbXB1dGUoKWAgYW5kIGlzIGVxdWFsIHRvIDguCiAgICAgICAqIE51bWJlciBvZiBwcmVjb21wdXRlZCBwb2ludHMgZGVwZW5kcyBvbiB0aGUgY3VydmUgc2l6ZToKICAgICAgICogMl4o8J2RiuKIkjEpICogKE1hdGguY2VpbCjwnZGbIC8g8J2RiikgKyAxKSwgd2hlcmU6CiAgICAgICAqIC0g8J2RiiBpcyB0aGUgd2luZG93IHNpemUKICAgICAgICogLSDwnZGbIGlzIHRoZSBiaXRsZW5ndGggb2YgdGhlIGN1cnZlIG9yZGVyLgogICAgICAgKiBGb3IgYSAyNTYtYml0IGN1cnZlIGFuZCB3aW5kb3cgc2l6ZSA4LCB0aGUgbnVtYmVyIG9mIHByZWNvbXB1dGVkIHBvaW50cyBpcyAxMjggKiAzMyA9IDQyMjQuCiAgICAgICAqIEByZXR1cm5zIHByZWNvbXB1dGVkIHBvaW50IHRhYmxlcyBmbGF0dGVuZWQgdG8gYSBzaW5nbGUgYXJyYXkKICAgICAgICovCiAgICAgIHByZWNvbXB1dGVXaW5kb3coZWxtLCBXKSB7CiAgICAgICAgY29uc3QgeyB3aW5kb3dzLCB3aW5kb3dTaXplIH0gPSBvcHRzKFcpOwogICAgICAgIGNvbnN0IHBvaW50cyA9IFtdOwogICAgICAgIGxldCBwID0gZWxtOwogICAgICAgIGxldCBiYXNlMiA9IHA7CiAgICAgICAgZm9yIChsZXQgd2luZG93MiA9IDA7IHdpbmRvdzIgPCB3aW5kb3dzOyB3aW5kb3cyKyspIHsKICAgICAgICAgIGJhc2UyID0gcDsKICAgICAgICAgIHBvaW50cy5wdXNoKGJhc2UyKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgd2luZG93U2l6ZTsgaSsrKSB7CiAgICAgICAgICAgIGJhc2UyID0gYmFzZTIuYWRkKHApOwogICAgICAgICAgICBwb2ludHMucHVzaChiYXNlMik7CiAgICAgICAgICB9CiAgICAgICAgICBwID0gYmFzZTIuZG91YmxlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb2ludHM7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBJbXBsZW1lbnRzIGVjIG11bHRpcGxpY2F0aW9uIHVzaW5nIHByZWNvbXB1dGVkIHRhYmxlcyBhbmQgdy1hcnkgbm9uLWFkamFjZW50IGZvcm0uCiAgICAgICAqIEBwYXJhbSBXIHdpbmRvdyBzaXplCiAgICAgICAqIEBwYXJhbSBwcmVjb21wdXRlcyBwcmVjb21wdXRlZCB0YWJsZXMKICAgICAgICogQHBhcmFtIG4gc2NhbGFyICh3ZSBkb24ndCBjaGVjayBoZXJlLCBidXQgc2hvdWxkIGJlIGxlc3MgdGhhbiBjdXJ2ZSBvcmRlcikKICAgICAgICogQHJldHVybnMgcmVhbCBhbmQgZmFrZSAoZm9yIGNvbnN0LXRpbWUpIHBvaW50cwogICAgICAgKi8KICAgICAgd05BRihXLCBwcmVjb21wdXRlcywgbikgewogICAgICAgIGNvbnN0IHsgd2luZG93cywgd2luZG93U2l6ZSB9ID0gb3B0cyhXKTsKICAgICAgICBsZXQgcCA9IGMuWkVSTzsKICAgICAgICBsZXQgZjIgPSBjLkJBU0U7CiAgICAgICAgY29uc3QgbWFzayA9IEJpZ0ludCgyICoqIFcgLSAxKTsKICAgICAgICBjb25zdCBtYXhOdW1iZXIgPSAyICoqIFc7CiAgICAgICAgY29uc3Qgc2hpZnRCeSA9IEJpZ0ludChXKTsKICAgICAgICBmb3IgKGxldCB3aW5kb3cyID0gMDsgd2luZG93MiA8IHdpbmRvd3M7IHdpbmRvdzIrKykgewogICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gd2luZG93MiAqIHdpbmRvd1NpemU7CiAgICAgICAgICBsZXQgd2JpdHMgPSBOdW1iZXIobiAmIG1hc2spOwogICAgICAgICAgbiA+Pj0gc2hpZnRCeTsKICAgICAgICAgIGlmICh3Yml0cyA+IHdpbmRvd1NpemUpIHsKICAgICAgICAgICAgd2JpdHMgLT0gbWF4TnVtYmVyOwogICAgICAgICAgICBuICs9IF8xbjQ7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBvZmZzZXQxID0gb2Zmc2V0OwogICAgICAgICAgY29uc3Qgb2Zmc2V0MiA9IG9mZnNldCArIE1hdGguYWJzKHdiaXRzKSAtIDE7CiAgICAgICAgICBjb25zdCBjb25kMSA9IHdpbmRvdzIgJSAyICE9PSAwOwogICAgICAgICAgY29uc3QgY29uZDIgPSB3Yml0cyA8IDA7CiAgICAgICAgICBpZiAod2JpdHMgPT09IDApIHsKICAgICAgICAgICAgZjIgPSBmMi5hZGQoY29uc3RUaW1lTmVnYXRlKGNvbmQxLCBwcmVjb21wdXRlc1tvZmZzZXQxXSkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcCA9IHAuYWRkKGNvbnN0VGltZU5lZ2F0ZShjb25kMiwgcHJlY29tcHV0ZXNbb2Zmc2V0Ml0pKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgcCwgZjogZjIgfTsKICAgICAgfSwKICAgICAgd05BRkNhY2hlZChQLCBwcmVjb21wdXRlc01hcCwgbiwgdHJhbnNmb3JtKSB7CiAgICAgICAgY29uc3QgVyA9IFAuX1dJTkRPV19TSVpFIHx8IDE7CiAgICAgICAgbGV0IGNvbXAgPSBwcmVjb21wdXRlc01hcC5nZXQoUCk7CiAgICAgICAgaWYgKCFjb21wKSB7CiAgICAgICAgICBjb21wID0gdGhpcy5wcmVjb21wdXRlV2luZG93KFAsIFcpOwogICAgICAgICAgaWYgKFcgIT09IDEpIHsKICAgICAgICAgICAgcHJlY29tcHV0ZXNNYXAuc2V0KFAsIHRyYW5zZm9ybShjb21wKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLndOQUYoVywgY29tcCwgbik7CiAgICAgIH0KICAgIH07CiAgfQogIGZ1bmN0aW9uIHZhbGlkYXRlQmFzaWMoY3VydmUpIHsKICAgIHZhbGlkYXRlRmllbGQoY3VydmUuRnApOwogICAgdmFsaWRhdGVPYmplY3QoY3VydmUsIHsKICAgICAgbjogImJpZ2ludCIsCiAgICAgIGg6ICJiaWdpbnQiLAogICAgICBHeDogImZpZWxkIiwKICAgICAgR3k6ICJmaWVsZCIKICAgIH0sIHsKICAgICAgbkJpdExlbmd0aDogImlzU2FmZUludGVnZXIiLAogICAgICBuQnl0ZUxlbmd0aDogImlzU2FmZUludGVnZXIiCiAgICB9KTsKICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsKICAgICAgLi4ubkxlbmd0aChjdXJ2ZS5uLCBjdXJ2ZS5uQml0TGVuZ3RoKSwKICAgICAgLi4uY3VydmUsCiAgICAgIC4uLnsgcDogY3VydmUuRnAuT1JERVIgfQogICAgfSk7CiAgfQogIHZhciBfMG40LCBfMW40OwogIHZhciBpbml0X2N1cnZlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC9jdXJ2ZS5qcyIoKSB7CiAgICAgIGluaXRfbW9kdWxhcigpOwogICAgICBpbml0X3V0aWxzNCgpOwogICAgICBfMG40ID0gQmlnSW50KDApOwogICAgICBfMW40ID0gQmlnSW50KDEpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3Qvd2VpZXJzdHJhc3MuanMKICBmdW5jdGlvbiB2YWxpZGF0ZVBvaW50T3B0cyhjdXJ2ZSkgewogICAgY29uc3Qgb3B0cyA9IHZhbGlkYXRlQmFzaWMoY3VydmUpOwogICAgdmFsaWRhdGVPYmplY3Qob3B0cywgewogICAgICBhOiAiZmllbGQiLAogICAgICBiOiAiZmllbGQiCiAgICB9LCB7CiAgICAgIGFsbG93ZWRQcml2YXRlS2V5TGVuZ3RoczogImFycmF5IiwKICAgICAgd3JhcFByaXZhdGVLZXk6ICJib29sZWFuIiwKICAgICAgaXNUb3JzaW9uRnJlZTogImZ1bmN0aW9uIiwKICAgICAgY2xlYXJDb2ZhY3RvcjogImZ1bmN0aW9uIiwKICAgICAgYWxsb3dJbmZpbml0eVBvaW50OiAiYm9vbGVhbiIsCiAgICAgIGZyb21CeXRlczogImZ1bmN0aW9uIiwKICAgICAgdG9CeXRlczogImZ1bmN0aW9uIgogICAgfSk7CiAgICBjb25zdCB7IGVuZG8sIEZwOiBGcDIsIGEgfSA9IG9wdHM7CiAgICBpZiAoZW5kbykgewogICAgICBpZiAoIUZwMi5lcWwoYSwgRnAyLlpFUk8pKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFbmRvbW9ycGhpc20gY2FuIG9ubHkgYmUgZGVmaW5lZCBmb3IgS29ibGl0eiBjdXJ2ZXMgdGhhdCBoYXZlIGE9MCIpOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgZW5kbyAhPT0gIm9iamVjdCIgfHwgdHlwZW9mIGVuZG8uYmV0YSAhPT0gImJpZ2ludCIgfHwgdHlwZW9mIGVuZG8uc3BsaXRTY2FsYXIgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGVuZG9tb3JwaGlzbSB3aXRoIGJldGE6IGJpZ2ludCBhbmQgc3BsaXRTY2FsYXI6IGZ1bmN0aW9uIik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsgLi4ub3B0cyB9KTsKICB9CiAgZnVuY3Rpb24gd2VpZXJzdHJhc3NQb2ludHMob3B0cykgewogICAgY29uc3QgQ1VSVkUgPSB2YWxpZGF0ZVBvaW50T3B0cyhvcHRzKTsKICAgIGNvbnN0IHsgRnA6IEZwMiB9ID0gQ1VSVkU7CiAgICBjb25zdCB0b0J5dGVzMyA9IENVUlZFLnRvQnl0ZXMgfHwgKChfYywgcG9pbnQsIF9pc0NvbXByZXNzZWQpID0+IHsKICAgICAgY29uc3QgYSA9IHBvaW50LnRvQWZmaW5lKCk7CiAgICAgIHJldHVybiBjb25jYXRCeXRlczMoVWludDhBcnJheS5mcm9tKFs0XSksIEZwMi50b0J5dGVzKGEueCksIEZwMi50b0J5dGVzKGEueSkpOwogICAgfSk7CiAgICBjb25zdCBmcm9tQnl0ZXMyID0gQ1VSVkUuZnJvbUJ5dGVzIHx8ICgoYnl0ZXMyKSA9PiB7CiAgICAgIGNvbnN0IHRhaWwgPSBieXRlczIuc3ViYXJyYXkoMSk7CiAgICAgIGNvbnN0IHggPSBGcDIuZnJvbUJ5dGVzKHRhaWwuc3ViYXJyYXkoMCwgRnAyLkJZVEVTKSk7CiAgICAgIGNvbnN0IHkgPSBGcDIuZnJvbUJ5dGVzKHRhaWwuc3ViYXJyYXkoRnAyLkJZVEVTLCAyICogRnAyLkJZVEVTKSk7CiAgICAgIHJldHVybiB7IHgsIHkgfTsKICAgIH0pOwogICAgZnVuY3Rpb24gd2VpZXJzdHJhc3NFcXVhdGlvbih4KSB7CiAgICAgIGNvbnN0IHsgYSwgYiB9ID0gQ1VSVkU7CiAgICAgIGNvbnN0IHgyID0gRnAyLnNxcih4KTsKICAgICAgY29uc3QgeDMgPSBGcDIubXVsKHgyLCB4KTsKICAgICAgcmV0dXJuIEZwMi5hZGQoRnAyLmFkZCh4MywgRnAyLm11bCh4LCBhKSksIGIpOwogICAgfQogICAgaWYgKCFGcDIuZXFsKEZwMi5zcXIoQ1VSVkUuR3kpLCB3ZWllcnN0cmFzc0VxdWF0aW9uKENVUlZFLkd4KSkpCiAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIGdlbmVyYXRvciBwb2ludDogZXF1YXRpb24gbGVmdCAhPSByaWdodCIpOwogICAgZnVuY3Rpb24gaXNXaXRoaW5DdXJ2ZU9yZGVyKG51bSkgewogICAgICByZXR1cm4gdHlwZW9mIG51bSA9PT0gImJpZ2ludCIgJiYgXzBuNSA8IG51bSAmJiBudW0gPCBDVVJWRS5uOwogICAgfQogICAgZnVuY3Rpb24gYXNzZXJ0R0UobnVtKSB7CiAgICAgIGlmICghaXNXaXRoaW5DdXJ2ZU9yZGVyKG51bSkpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB2YWxpZCBiaWdpbnQ6IDAgPCBiaWdpbnQgPCBjdXJ2ZS5uIik7CiAgICB9CiAgICBmdW5jdGlvbiBub3JtUHJpdmF0ZUtleVRvU2NhbGFyKGtleSkgewogICAgICBjb25zdCB7IGFsbG93ZWRQcml2YXRlS2V5TGVuZ3RoczogbGVuZ3RocywgbkJ5dGVMZW5ndGgsIHdyYXBQcml2YXRlS2V5LCBuIH0gPSBDVVJWRTsKICAgICAgaWYgKGxlbmd0aHMgJiYgdHlwZW9mIGtleSAhPT0gImJpZ2ludCIpIHsKICAgICAgICBpZiAoaXNCeXRlczIoa2V5KSkKICAgICAgICAgIGtleSA9IGJ5dGVzVG9IZXgyKGtleSk7CiAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICJzdHJpbmciIHx8ICFsZW5ndGhzLmluY2x1ZGVzKGtleS5sZW5ndGgpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGtleSIpOwogICAgICAgIGtleSA9IGtleS5wYWRTdGFydChuQnl0ZUxlbmd0aCAqIDIsICIwIik7CiAgICAgIH0KICAgICAgbGV0IG51bTsKICAgICAgdHJ5IHsKICAgICAgICBudW0gPSB0eXBlb2Yga2V5ID09PSAiYmlnaW50IiA/IGtleSA6IGJ5dGVzVG9OdW1iZXJCRShlbnN1cmVCeXRlcygicHJpdmF0ZSBrZXkiLCBrZXksIG5CeXRlTGVuZ3RoKSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcml2YXRlIGtleSBtdXN0IGJlICR7bkJ5dGVMZW5ndGh9IGJ5dGVzLCBoZXggb3IgYmlnaW50LCBub3QgJHt0eXBlb2Yga2V5fWApOwogICAgICB9CiAgICAgIGlmICh3cmFwUHJpdmF0ZUtleSkKICAgICAgICBudW0gPSBtb2QobnVtLCBuKTsKICAgICAgYXNzZXJ0R0UobnVtKTsKICAgICAgcmV0dXJuIG51bTsKICAgIH0KICAgIGNvbnN0IHBvaW50UHJlY29tcHV0ZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgZnVuY3Rpb24gYXNzZXJ0UHJqUG9pbnQob3RoZXIpIHsKICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBQb2ludDIpKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiUHJvamVjdGl2ZVBvaW50IGV4cGVjdGVkIik7CiAgICB9CiAgICBjbGFzcyBQb2ludDIgewogICAgICBjb25zdHJ1Y3RvcihweCwgcHksIHB6KSB7CiAgICAgICAgdGhpcy5weCA9IHB4OwogICAgICAgIHRoaXMucHkgPSBweTsKICAgICAgICB0aGlzLnB6ID0gcHo7CiAgICAgICAgaWYgKHB4ID09IG51bGwgfHwgIUZwMi5pc1ZhbGlkKHB4KSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigieCByZXF1aXJlZCIpOwogICAgICAgIGlmIChweSA9PSBudWxsIHx8ICFGcDIuaXNWYWxpZChweSkpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInkgcmVxdWlyZWQiKTsKICAgICAgICBpZiAocHogPT0gbnVsbCB8fCAhRnAyLmlzVmFsaWQocHopKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ6IHJlcXVpcmVkIik7CiAgICAgIH0KICAgICAgLy8gRG9lcyBub3QgdmFsaWRhdGUgaWYgdGhlIHBvaW50IGlzIG9uLWN1cnZlLgogICAgICAvLyBVc2UgZnJvbUhleCBpbnN0ZWFkLCBvciBjYWxsIGFzc2VydFZhbGlkaXR5KCkgbGF0ZXIuCiAgICAgIHN0YXRpYyBmcm9tQWZmaW5lKHApIHsKICAgICAgICBjb25zdCB7IHgsIHkgfSA9IHAgfHwge307CiAgICAgICAgaWYgKCFwIHx8ICFGcDIuaXNWYWxpZCh4KSB8fCAhRnAyLmlzVmFsaWQoeSkpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYWZmaW5lIHBvaW50Iik7CiAgICAgICAgaWYgKHAgaW5zdGFuY2VvZiBQb2ludDIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInByb2plY3RpdmUgcG9pbnQgbm90IGFsbG93ZWQiKTsKICAgICAgICBjb25zdCBpczAgPSAoaSkgPT4gRnAyLmVxbChpLCBGcDIuWkVSTyk7CiAgICAgICAgaWYgKGlzMCh4KSAmJiBpczAoeSkpCiAgICAgICAgICByZXR1cm4gUG9pbnQyLlpFUk87CiAgICAgICAgcmV0dXJuIG5ldyBQb2ludDIoeCwgeSwgRnAyLk9ORSk7CiAgICAgIH0KICAgICAgZ2V0IHgoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudG9BZmZpbmUoKS54OwogICAgICB9CiAgICAgIGdldCB5KCkgewogICAgICAgIHJldHVybiB0aGlzLnRvQWZmaW5lKCkueTsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGFrZXMgYSBidW5jaCBvZiBQcm9qZWN0aXZlIFBvaW50cyBidXQgZXhlY3V0ZXMgb25seSBvbmUKICAgICAgICogaW52ZXJzaW9uIG9uIGFsbCBvZiB0aGVtLiBJbnZlcnNpb24gaXMgdmVyeSBzbG93IG9wZXJhdGlvbiwKICAgICAgICogc28gdGhpcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBtYXNzaXZlbHkuCiAgICAgICAqIE9wdGltaXphdGlvbjogY29udmVydHMgYSBsaXN0IG9mIHByb2plY3RpdmUgcG9pbnRzIHRvIGEgbGlzdCBvZiBpZGVudGljYWwgcG9pbnRzIHdpdGggWj0xLgogICAgICAgKi8KICAgICAgc3RhdGljIG5vcm1hbGl6ZVoocG9pbnRzKSB7CiAgICAgICAgY29uc3QgdG9JbnYgPSBGcDIuaW52ZXJ0QmF0Y2gocG9pbnRzLm1hcCgocCkgPT4gcC5weikpOwogICAgICAgIHJldHVybiBwb2ludHMubWFwKChwLCBpKSA9PiBwLnRvQWZmaW5lKHRvSW52W2ldKSkubWFwKFBvaW50Mi5mcm9tQWZmaW5lKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ29udmVydHMgaGFzaCBzdHJpbmcgb3IgVWludDhBcnJheSB0byBQb2ludC4KICAgICAgICogQHBhcmFtIGhleCBzaG9ydC9sb25nIEVDRFNBIGhleAogICAgICAgKi8KICAgICAgc3RhdGljIGZyb21IZXgoaGV4KSB7CiAgICAgICAgY29uc3QgUCA9IFBvaW50Mi5mcm9tQWZmaW5lKGZyb21CeXRlczIoZW5zdXJlQnl0ZXMoInBvaW50SGV4IiwgaGV4KSkpOwogICAgICAgIFAuYXNzZXJ0VmFsaWRpdHkoKTsKICAgICAgICByZXR1cm4gUDsKICAgICAgfQogICAgICAvLyBNdWx0aXBsaWVzIGdlbmVyYXRvciBwb2ludCBieSBwcml2YXRlS2V5LgogICAgICBzdGF0aWMgZnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleSkgewogICAgICAgIHJldHVybiBQb2ludDIuQkFTRS5tdWx0aXBseShub3JtUHJpdmF0ZUtleVRvU2NhbGFyKHByaXZhdGVLZXkpKTsKICAgICAgfQogICAgICAvLyAiUHJpdmF0ZSBtZXRob2QiLCBkb24ndCB1c2UgaXQgZGlyZWN0bHkKICAgICAgX3NldFdpbmRvd1NpemUod2luZG93U2l6ZSkgewogICAgICAgIHRoaXMuX1dJTkRPV19TSVpFID0gd2luZG93U2l6ZTsKICAgICAgICBwb2ludFByZWNvbXB1dGVzLmRlbGV0ZSh0aGlzKTsKICAgICAgfQogICAgICAvLyBBIHBvaW50IG9uIGN1cnZlIGlzIHZhbGlkIGlmIGl0IGNvbmZvcm1zIHRvIGVxdWF0aW9uLgogICAgICBhc3NlcnRWYWxpZGl0eSgpIHsKICAgICAgICBpZiAodGhpcy5pczAoKSkgewogICAgICAgICAgaWYgKENVUlZFLmFsbG93SW5maW5pdHlQb2ludCAmJiAhRnAyLmlzMCh0aGlzLnB5KSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IFpFUk8iKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLnRvQWZmaW5lKCk7CiAgICAgICAgaWYgKCFGcDIuaXNWYWxpZCh4KSB8fCAhRnAyLmlzVmFsaWQoeSkpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBwb2ludDogeCBvciB5IG5vdCBGRSIpOwogICAgICAgIGNvbnN0IGxlZnQgPSBGcDIuc3FyKHkpOwogICAgICAgIGNvbnN0IHJpZ2h0ID0gd2VpZXJzdHJhc3NFcXVhdGlvbih4KTsKICAgICAgICBpZiAoIUZwMi5lcWwobGVmdCwgcmlnaHQpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IGVxdWF0aW9uIGxlZnQgIT0gcmlnaHQiKTsKICAgICAgICBpZiAoIXRoaXMuaXNUb3JzaW9uRnJlZSgpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IG5vdCBpbiBwcmltZS1vcmRlciBzdWJncm91cCIpOwogICAgICB9CiAgICAgIGhhc0V2ZW5ZKCkgewogICAgICAgIGNvbnN0IHsgeSB9ID0gdGhpcy50b0FmZmluZSgpOwogICAgICAgIGlmIChGcDIuaXNPZGQpCiAgICAgICAgICByZXR1cm4gIUZwMi5pc09kZCh5KTsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkZpZWxkIGRvZXNuJ3Qgc3VwcG9ydCBpc09kZCIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDb21wYXJlIG9uZSBwb2ludCB0byBhbm90aGVyLgogICAgICAgKi8KICAgICAgZXF1YWxzKG90aGVyKSB7CiAgICAgICAgYXNzZXJ0UHJqUG9pbnQob3RoZXIpOwogICAgICAgIGNvbnN0IHsgcHg6IFgxLCBweTogWTEsIHB6OiBaMSB9ID0gdGhpczsKICAgICAgICBjb25zdCB7IHB4OiBYMiwgcHk6IFkyLCBwejogWjIgfSA9IG90aGVyOwogICAgICAgIGNvbnN0IFUxID0gRnAyLmVxbChGcDIubXVsKFgxLCBaMiksIEZwMi5tdWwoWDIsIFoxKSk7CiAgICAgICAgY29uc3QgVTIgPSBGcDIuZXFsKEZwMi5tdWwoWTEsIFoyKSwgRnAyLm11bChZMiwgWjEpKTsKICAgICAgICByZXR1cm4gVTEgJiYgVTI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZsaXBzIHBvaW50IHRvIG9uZSBjb3JyZXNwb25kaW5nIHRvICh4LCAteSkgaW4gQWZmaW5lIGNvb3JkaW5hdGVzLgogICAgICAgKi8KICAgICAgbmVnYXRlKCkgewogICAgICAgIHJldHVybiBuZXcgUG9pbnQyKHRoaXMucHgsIEZwMi5uZWcodGhpcy5weSksIHRoaXMucHopOwogICAgICB9CiAgICAgIC8vIFJlbmVzLUNvc3RlbGxvLUJhdGluYSBleGNlcHRpb24tZnJlZSBkb3VibGluZyBmb3JtdWxhLgogICAgICAvLyBUaGVyZSBpcyAzMCUgZmFzdGVyIEphY29iaWFuIGZvcm11bGEsIGJ1dCBpdCBpcyBub3QgY29tcGxldGUuCiAgICAgIC8vIGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMTUvMTA2MCwgYWxnb3JpdGhtIDMKICAgICAgLy8gQ29zdDogOE0gKyAzUyArIDMqYSArIDIqYjMgKyAxNWFkZC4KICAgICAgZG91YmxlKCkgewogICAgICAgIGNvbnN0IHsgYSwgYiB9ID0gQ1VSVkU7CiAgICAgICAgY29uc3QgYjMyID0gRnAyLm11bChiLCBfM24yKTsKICAgICAgICBjb25zdCB7IHB4OiBYMSwgcHk6IFkxLCBwejogWjEgfSA9IHRoaXM7CiAgICAgICAgbGV0IFgzID0gRnAyLlpFUk8sIFkzID0gRnAyLlpFUk8sIFozID0gRnAyLlpFUk87CiAgICAgICAgbGV0IHQwID0gRnAyLm11bChYMSwgWDEpOwogICAgICAgIGxldCB0MSA9IEZwMi5tdWwoWTEsIFkxKTsKICAgICAgICBsZXQgdDIgPSBGcDIubXVsKFoxLCBaMSk7CiAgICAgICAgbGV0IHQzID0gRnAyLm11bChYMSwgWTEpOwogICAgICAgIHQzID0gRnAyLmFkZCh0MywgdDMpOwogICAgICAgIFozID0gRnAyLm11bChYMSwgWjEpOwogICAgICAgIFozID0gRnAyLmFkZChaMywgWjMpOwogICAgICAgIFgzID0gRnAyLm11bChhLCBaMyk7CiAgICAgICAgWTMgPSBGcDIubXVsKGIzMiwgdDIpOwogICAgICAgIFkzID0gRnAyLmFkZChYMywgWTMpOwogICAgICAgIFgzID0gRnAyLnN1Yih0MSwgWTMpOwogICAgICAgIFkzID0gRnAyLmFkZCh0MSwgWTMpOwogICAgICAgIFkzID0gRnAyLm11bChYMywgWTMpOwogICAgICAgIFgzID0gRnAyLm11bCh0MywgWDMpOwogICAgICAgIFozID0gRnAyLm11bChiMzIsIFozKTsKICAgICAgICB0MiA9IEZwMi5tdWwoYSwgdDIpOwogICAgICAgIHQzID0gRnAyLnN1Yih0MCwgdDIpOwogICAgICAgIHQzID0gRnAyLm11bChhLCB0Myk7CiAgICAgICAgdDMgPSBGcDIuYWRkKHQzLCBaMyk7CiAgICAgICAgWjMgPSBGcDIuYWRkKHQwLCB0MCk7CiAgICAgICAgdDAgPSBGcDIuYWRkKFozLCB0MCk7CiAgICAgICAgdDAgPSBGcDIuYWRkKHQwLCB0Mik7CiAgICAgICAgdDAgPSBGcDIubXVsKHQwLCB0Myk7CiAgICAgICAgWTMgPSBGcDIuYWRkKFkzLCB0MCk7CiAgICAgICAgdDIgPSBGcDIubXVsKFkxLCBaMSk7CiAgICAgICAgdDIgPSBGcDIuYWRkKHQyLCB0Mik7CiAgICAgICAgdDAgPSBGcDIubXVsKHQyLCB0Myk7CiAgICAgICAgWDMgPSBGcDIuc3ViKFgzLCB0MCk7CiAgICAgICAgWjMgPSBGcDIubXVsKHQyLCB0MSk7CiAgICAgICAgWjMgPSBGcDIuYWRkKFozLCBaMyk7CiAgICAgICAgWjMgPSBGcDIuYWRkKFozLCBaMyk7CiAgICAgICAgcmV0dXJuIG5ldyBQb2ludDIoWDMsIFkzLCBaMyk7CiAgICAgIH0KICAgICAgLy8gUmVuZXMtQ29zdGVsbG8tQmF0aW5hIGV4Y2VwdGlvbi1mcmVlIGFkZGl0aW9uIGZvcm11bGEuCiAgICAgIC8vIFRoZXJlIGlzIDMwJSBmYXN0ZXIgSmFjb2JpYW4gZm9ybXVsYSwgYnV0IGl0IGlzIG5vdCBjb21wbGV0ZS4KICAgICAgLy8gaHR0cHM6Ly9lcHJpbnQuaWFjci5vcmcvMjAxNS8xMDYwLCBhbGdvcml0aG0gMQogICAgICAvLyBDb3N0OiAxMk0gKyAwUyArIDMqYSArIDMqYjMgKyAyM2FkZC4KICAgICAgYWRkKG90aGVyKSB7CiAgICAgICAgYXNzZXJ0UHJqUG9pbnQob3RoZXIpOwogICAgICAgIGNvbnN0IHsgcHg6IFgxLCBweTogWTEsIHB6OiBaMSB9ID0gdGhpczsKICAgICAgICBjb25zdCB7IHB4OiBYMiwgcHk6IFkyLCBwejogWjIgfSA9IG90aGVyOwogICAgICAgIGxldCBYMyA9IEZwMi5aRVJPLCBZMyA9IEZwMi5aRVJPLCBaMyA9IEZwMi5aRVJPOwogICAgICAgIGNvbnN0IGEgPSBDVVJWRS5hOwogICAgICAgIGNvbnN0IGIzMiA9IEZwMi5tdWwoQ1VSVkUuYiwgXzNuMik7CiAgICAgICAgbGV0IHQwID0gRnAyLm11bChYMSwgWDIpOwogICAgICAgIGxldCB0MSA9IEZwMi5tdWwoWTEsIFkyKTsKICAgICAgICBsZXQgdDIgPSBGcDIubXVsKFoxLCBaMik7CiAgICAgICAgbGV0IHQzID0gRnAyLmFkZChYMSwgWTEpOwogICAgICAgIGxldCB0NCA9IEZwMi5hZGQoWDIsIFkyKTsKICAgICAgICB0MyA9IEZwMi5tdWwodDMsIHQ0KTsKICAgICAgICB0NCA9IEZwMi5hZGQodDAsIHQxKTsKICAgICAgICB0MyA9IEZwMi5zdWIodDMsIHQ0KTsKICAgICAgICB0NCA9IEZwMi5hZGQoWDEsIFoxKTsKICAgICAgICBsZXQgdDUgPSBGcDIuYWRkKFgyLCBaMik7CiAgICAgICAgdDQgPSBGcDIubXVsKHQ0LCB0NSk7CiAgICAgICAgdDUgPSBGcDIuYWRkKHQwLCB0Mik7CiAgICAgICAgdDQgPSBGcDIuc3ViKHQ0LCB0NSk7CiAgICAgICAgdDUgPSBGcDIuYWRkKFkxLCBaMSk7CiAgICAgICAgWDMgPSBGcDIuYWRkKFkyLCBaMik7CiAgICAgICAgdDUgPSBGcDIubXVsKHQ1LCBYMyk7CiAgICAgICAgWDMgPSBGcDIuYWRkKHQxLCB0Mik7CiAgICAgICAgdDUgPSBGcDIuc3ViKHQ1LCBYMyk7CiAgICAgICAgWjMgPSBGcDIubXVsKGEsIHQ0KTsKICAgICAgICBYMyA9IEZwMi5tdWwoYjMyLCB0Mik7CiAgICAgICAgWjMgPSBGcDIuYWRkKFgzLCBaMyk7CiAgICAgICAgWDMgPSBGcDIuc3ViKHQxLCBaMyk7CiAgICAgICAgWjMgPSBGcDIuYWRkKHQxLCBaMyk7CiAgICAgICAgWTMgPSBGcDIubXVsKFgzLCBaMyk7CiAgICAgICAgdDEgPSBGcDIuYWRkKHQwLCB0MCk7CiAgICAgICAgdDEgPSBGcDIuYWRkKHQxLCB0MCk7CiAgICAgICAgdDIgPSBGcDIubXVsKGEsIHQyKTsKICAgICAgICB0NCA9IEZwMi5tdWwoYjMyLCB0NCk7CiAgICAgICAgdDEgPSBGcDIuYWRkKHQxLCB0Mik7CiAgICAgICAgdDIgPSBGcDIuc3ViKHQwLCB0Mik7CiAgICAgICAgdDIgPSBGcDIubXVsKGEsIHQyKTsKICAgICAgICB0NCA9IEZwMi5hZGQodDQsIHQyKTsKICAgICAgICB0MCA9IEZwMi5tdWwodDEsIHQ0KTsKICAgICAgICBZMyA9IEZwMi5hZGQoWTMsIHQwKTsKICAgICAgICB0MCA9IEZwMi5tdWwodDUsIHQ0KTsKICAgICAgICBYMyA9IEZwMi5tdWwodDMsIFgzKTsKICAgICAgICBYMyA9IEZwMi5zdWIoWDMsIHQwKTsKICAgICAgICB0MCA9IEZwMi5tdWwodDMsIHQxKTsKICAgICAgICBaMyA9IEZwMi5tdWwodDUsIFozKTsKICAgICAgICBaMyA9IEZwMi5hZGQoWjMsIHQwKTsKICAgICAgICByZXR1cm4gbmV3IFBvaW50MihYMywgWTMsIFozKTsKICAgICAgfQogICAgICBzdWJ0cmFjdChvdGhlcikgewogICAgICAgIHJldHVybiB0aGlzLmFkZChvdGhlci5uZWdhdGUoKSk7CiAgICAgIH0KICAgICAgaXMwKCkgewogICAgICAgIHJldHVybiB0aGlzLmVxdWFscyhQb2ludDIuWkVSTyk7CiAgICAgIH0KICAgICAgd05BRihuKSB7CiAgICAgICAgcmV0dXJuIHduYWYud05BRkNhY2hlZCh0aGlzLCBwb2ludFByZWNvbXB1dGVzLCBuLCAoY29tcCkgPT4gewogICAgICAgICAgY29uc3QgdG9JbnYgPSBGcDIuaW52ZXJ0QmF0Y2goY29tcC5tYXAoKHApID0+IHAucHopKTsKICAgICAgICAgIHJldHVybiBjb21wLm1hcCgocCwgaSkgPT4gcC50b0FmZmluZSh0b0ludltpXSkpLm1hcChQb2ludDIuZnJvbUFmZmluZSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIE5vbi1jb25zdGFudC10aW1lIG11bHRpcGxpY2F0aW9uLiBVc2VzIGRvdWJsZS1hbmQtYWRkIGFsZ29yaXRobS4KICAgICAgICogSXQncyBmYXN0ZXIsIGJ1dCBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4geW91IGRvbid0IGNhcmUgYWJvdXQKICAgICAgICogYW4gZXhwb3NlZCBwcml2YXRlIGtleSBlLmcuIHNpZyB2ZXJpZmljYXRpb24sIHdoaWNoIHdvcmtzIG92ZXIgKnB1YmxpYyoga2V5cy4KICAgICAgICovCiAgICAgIG11bHRpcGx5VW5zYWZlKG4pIHsKICAgICAgICBjb25zdCBJID0gUG9pbnQyLlpFUk87CiAgICAgICAgaWYgKG4gPT09IF8wbjUpCiAgICAgICAgICByZXR1cm4gSTsKICAgICAgICBhc3NlcnRHRShuKTsKICAgICAgICBpZiAobiA9PT0gXzFuNSkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIGNvbnN0IHsgZW5kbyB9ID0gQ1VSVkU7CiAgICAgICAgaWYgKCFlbmRvKQogICAgICAgICAgcmV0dXJuIHduYWYudW5zYWZlTGFkZGVyKHRoaXMsIG4pOwogICAgICAgIGxldCB7IGsxbmVnLCBrMSwgazJuZWcsIGsyIH0gPSBlbmRvLnNwbGl0U2NhbGFyKG4pOwogICAgICAgIGxldCBrMXAgPSBJOwogICAgICAgIGxldCBrMnAgPSBJOwogICAgICAgIGxldCBkID0gdGhpczsKICAgICAgICB3aGlsZSAoazEgPiBfMG41IHx8IGsyID4gXzBuNSkgewogICAgICAgICAgaWYgKGsxICYgXzFuNSkKICAgICAgICAgICAgazFwID0gazFwLmFkZChkKTsKICAgICAgICAgIGlmIChrMiAmIF8xbjUpCiAgICAgICAgICAgIGsycCA9IGsycC5hZGQoZCk7CiAgICAgICAgICBkID0gZC5kb3VibGUoKTsKICAgICAgICAgIGsxID4+PSBfMW41OwogICAgICAgICAgazIgPj49IF8xbjU7CiAgICAgICAgfQogICAgICAgIGlmIChrMW5lZykKICAgICAgICAgIGsxcCA9IGsxcC5uZWdhdGUoKTsKICAgICAgICBpZiAoazJuZWcpCiAgICAgICAgICBrMnAgPSBrMnAubmVnYXRlKCk7CiAgICAgICAgazJwID0gbmV3IFBvaW50MihGcDIubXVsKGsycC5weCwgZW5kby5iZXRhKSwgazJwLnB5LCBrMnAucHopOwogICAgICAgIHJldHVybiBrMXAuYWRkKGsycCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENvbnN0YW50IHRpbWUgbXVsdGlwbGljYXRpb24uCiAgICAgICAqIFVzZXMgd05BRiBtZXRob2QuIFdpbmRvd2VkIG1ldGhvZCBtYXkgYmUgMTAlIGZhc3RlciwKICAgICAgICogYnV0IHRha2VzIDJ4IGxvbmdlciB0byBnZW5lcmF0ZSBhbmQgY29uc3VtZXMgMnggbWVtb3J5LgogICAgICAgKiBVc2VzIHByZWNvbXB1dGVzIHdoZW4gYXZhaWxhYmxlLgogICAgICAgKiBVc2VzIGVuZG9tb3JwaGlzbSBmb3IgS29ibGl0eiBjdXJ2ZXMuCiAgICAgICAqIEBwYXJhbSBzY2FsYXIgYnkgd2hpY2ggdGhlIHBvaW50IHdvdWxkIGJlIG11bHRpcGxpZWQKICAgICAgICogQHJldHVybnMgTmV3IHBvaW50CiAgICAgICAqLwogICAgICBtdWx0aXBseShzY2FsYXIpIHsKICAgICAgICBhc3NlcnRHRShzY2FsYXIpOwogICAgICAgIGxldCBuID0gc2NhbGFyOwogICAgICAgIGxldCBwb2ludCwgZmFrZTsKICAgICAgICBjb25zdCB7IGVuZG8gfSA9IENVUlZFOwogICAgICAgIGlmIChlbmRvKSB7CiAgICAgICAgICBjb25zdCB7IGsxbmVnLCBrMSwgazJuZWcsIGsyIH0gPSBlbmRvLnNwbGl0U2NhbGFyKG4pOwogICAgICAgICAgbGV0IHsgcDogazFwLCBmOiBmMXAgfSA9IHRoaXMud05BRihrMSk7CiAgICAgICAgICBsZXQgeyBwOiBrMnAsIGY6IGYycCB9ID0gdGhpcy53TkFGKGsyKTsKICAgICAgICAgIGsxcCA9IHduYWYuY29uc3RUaW1lTmVnYXRlKGsxbmVnLCBrMXApOwogICAgICAgICAgazJwID0gd25hZi5jb25zdFRpbWVOZWdhdGUoazJuZWcsIGsycCk7CiAgICAgICAgICBrMnAgPSBuZXcgUG9pbnQyKEZwMi5tdWwoazJwLnB4LCBlbmRvLmJldGEpLCBrMnAucHksIGsycC5weik7CiAgICAgICAgICBwb2ludCA9IGsxcC5hZGQoazJwKTsKICAgICAgICAgIGZha2UgPSBmMXAuYWRkKGYycCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHsgcCwgZjogZjIgfSA9IHRoaXMud05BRihuKTsKICAgICAgICAgIHBvaW50ID0gcDsKICAgICAgICAgIGZha2UgPSBmMjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBvaW50Mi5ub3JtYWxpemVaKFtwb2ludCwgZmFrZV0pWzBdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBFZmZpY2llbnRseSBjYWxjdWxhdGUgYGFQICsgYlFgLiBVbnNhZmUsIGNhbiBleHBvc2UgcHJpdmF0ZSBrZXksIGlmIHVzZWQgaW5jb3JyZWN0bHkuCiAgICAgICAqIE5vdCB1c2luZyBTdHJhdXNzLVNoYW1pciB0cmljazogcHJlY29tcHV0YXRpb24gdGFibGVzIGFyZSBmYXN0ZXIuCiAgICAgICAqIFRoZSB0cmljayBjb3VsZCBiZSB1c2VmdWwgaWYgYm90aCBQIGFuZCBRIGFyZSBub3QgRyAobm90IGluIG91ciBjYXNlKS4KICAgICAgICogQHJldHVybnMgbm9uLXplcm8gYWZmaW5lIHBvaW50CiAgICAgICAqLwogICAgICBtdWx0aXBseUFuZEFkZFVuc2FmZShRLCBhLCBiKSB7CiAgICAgICAgY29uc3QgRyA9IFBvaW50Mi5CQVNFOwogICAgICAgIGNvbnN0IG11bCA9IChQLCBhMikgPT4gYTIgPT09IF8wbjUgfHwgYTIgPT09IF8xbjUgfHwgIVAuZXF1YWxzKEcpID8gUC5tdWx0aXBseVVuc2FmZShhMikgOiBQLm11bHRpcGx5KGEyKTsKICAgICAgICBjb25zdCBzdW0gPSBtdWwodGhpcywgYSkuYWRkKG11bChRLCBiKSk7CiAgICAgICAgcmV0dXJuIHN1bS5pczAoKSA/IHZvaWQgMCA6IHN1bTsKICAgICAgfQogICAgICAvLyBDb252ZXJ0cyBQcm9qZWN0aXZlIHBvaW50IHRvIGFmZmluZSAoeCwgeSkgY29vcmRpbmF0ZXMuCiAgICAgIC8vIENhbiBhY2NlcHQgcHJlY29tcHV0ZWQgWl4tMSAtIGZvciBleGFtcGxlLCBmcm9tIGludmVydEJhdGNoLgogICAgICAvLyAoeCwgeSwgeikg4oiLICh4PXgveiwgeT15L3opCiAgICAgIHRvQWZmaW5lKGl6KSB7CiAgICAgICAgY29uc3QgeyBweDogeCwgcHk6IHksIHB6OiB6IH0gPSB0aGlzOwogICAgICAgIGNvbnN0IGlzMCA9IHRoaXMuaXMwKCk7CiAgICAgICAgaWYgKGl6ID09IG51bGwpCiAgICAgICAgICBpeiA9IGlzMCA/IEZwMi5PTkUgOiBGcDIuaW52KHopOwogICAgICAgIGNvbnN0IGF4ID0gRnAyLm11bCh4LCBpeik7CiAgICAgICAgY29uc3QgYXkgPSBGcDIubXVsKHksIGl6KTsKICAgICAgICBjb25zdCB6eiA9IEZwMi5tdWwoeiwgaXopOwogICAgICAgIGlmIChpczApCiAgICAgICAgICByZXR1cm4geyB4OiBGcDIuWkVSTywgeTogRnAyLlpFUk8gfTsKICAgICAgICBpZiAoIUZwMi5lcWwoenosIEZwMi5PTkUpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZaIHdhcyBpbnZhbGlkIik7CiAgICAgICAgcmV0dXJuIHsgeDogYXgsIHk6IGF5IH07CiAgICAgIH0KICAgICAgaXNUb3JzaW9uRnJlZSgpIHsKICAgICAgICBjb25zdCB7IGg6IGNvZmFjdG9yLCBpc1RvcnNpb25GcmVlIH0gPSBDVVJWRTsKICAgICAgICBpZiAoY29mYWN0b3IgPT09IF8xbjUpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoaXNUb3JzaW9uRnJlZSkKICAgICAgICAgIHJldHVybiBpc1RvcnNpb25GcmVlKFBvaW50MiwgdGhpcyk7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpc1RvcnNpb25GcmVlKCkgaGFzIG5vdCBiZWVuIGRlY2xhcmVkIGZvciB0aGUgZWxsaXB0aWMgY3VydmUiKTsKICAgICAgfQogICAgICBjbGVhckNvZmFjdG9yKCkgewogICAgICAgIGNvbnN0IHsgaDogY29mYWN0b3IsIGNsZWFyQ29mYWN0b3IgfSA9IENVUlZFOwogICAgICAgIGlmIChjb2ZhY3RvciA9PT0gXzFuNSkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIGlmIChjbGVhckNvZmFjdG9yKQogICAgICAgICAgcmV0dXJuIGNsZWFyQ29mYWN0b3IoUG9pbnQyLCB0aGlzKTsKICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBseVVuc2FmZShDVVJWRS5oKTsKICAgICAgfQogICAgICB0b1Jhd0J5dGVzKGlzQ29tcHJlc3NlZCA9IHRydWUpIHsKICAgICAgICB0aGlzLmFzc2VydFZhbGlkaXR5KCk7CiAgICAgICAgcmV0dXJuIHRvQnl0ZXMzKFBvaW50MiwgdGhpcywgaXNDb21wcmVzc2VkKTsKICAgICAgfQogICAgICB0b0hleChpc0NvbXByZXNzZWQgPSB0cnVlKSB7CiAgICAgICAgcmV0dXJuIGJ5dGVzVG9IZXgyKHRoaXMudG9SYXdCeXRlcyhpc0NvbXByZXNzZWQpKTsKICAgICAgfQogICAgfQogICAgUG9pbnQyLkJBU0UgPSBuZXcgUG9pbnQyKENVUlZFLkd4LCBDVVJWRS5HeSwgRnAyLk9ORSk7CiAgICBQb2ludDIuWkVSTyA9IG5ldyBQb2ludDIoRnAyLlpFUk8sIEZwMi5PTkUsIEZwMi5aRVJPKTsKICAgIGNvbnN0IF9iaXRzID0gQ1VSVkUubkJpdExlbmd0aDsKICAgIGNvbnN0IHduYWYgPSB3TkFGKFBvaW50MiwgQ1VSVkUuZW5kbyA/IE1hdGguY2VpbChfYml0cyAvIDIpIDogX2JpdHMpOwogICAgcmV0dXJuIHsKICAgICAgQ1VSVkUsCiAgICAgIFByb2plY3RpdmVQb2ludDogUG9pbnQyLAogICAgICBub3JtUHJpdmF0ZUtleVRvU2NhbGFyLAogICAgICB3ZWllcnN0cmFzc0VxdWF0aW9uLAogICAgICBpc1dpdGhpbkN1cnZlT3JkZXIKICAgIH07CiAgfQogIGZ1bmN0aW9uIHZhbGlkYXRlT3B0cyhjdXJ2ZSkgewogICAgY29uc3Qgb3B0cyA9IHZhbGlkYXRlQmFzaWMoY3VydmUpOwogICAgdmFsaWRhdGVPYmplY3Qob3B0cywgewogICAgICBoYXNoOiAiaGFzaCIsCiAgICAgIGhtYWM6ICJmdW5jdGlvbiIsCiAgICAgIHJhbmRvbUJ5dGVzOiAiZnVuY3Rpb24iCiAgICB9LCB7CiAgICAgIGJpdHMyaW50OiAiZnVuY3Rpb24iLAogICAgICBiaXRzMmludF9tb2ROOiAiZnVuY3Rpb24iLAogICAgICBsb3dTOiAiYm9vbGVhbiIKICAgIH0pOwogICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyBsb3dTOiB0cnVlLCAuLi5vcHRzIH0pOwogIH0KICBmdW5jdGlvbiB3ZWllcnN0cmFzcyhjdXJ2ZURlZikgewogICAgY29uc3QgQ1VSVkUgPSB2YWxpZGF0ZU9wdHMoY3VydmVEZWYpOwogICAgY29uc3QgeyBGcDogRnAyLCBuOiBDVVJWRV9PUkRFUiB9ID0gQ1VSVkU7CiAgICBjb25zdCBjb21wcmVzc2VkTGVuID0gRnAyLkJZVEVTICsgMTsKICAgIGNvbnN0IHVuY29tcHJlc3NlZExlbiA9IDIgKiBGcDIuQllURVMgKyAxOwogICAgZnVuY3Rpb24gaXNWYWxpZEZpZWxkRWxlbWVudChudW0pIHsKICAgICAgcmV0dXJuIF8wbjUgPCBudW0gJiYgbnVtIDwgRnAyLk9SREVSOwogICAgfQogICAgZnVuY3Rpb24gbW9kTjIoYSkgewogICAgICByZXR1cm4gbW9kKGEsIENVUlZFX09SREVSKTsKICAgIH0KICAgIGZ1bmN0aW9uIGludk4oYSkgewogICAgICByZXR1cm4gaW52ZXJ0KGEsIENVUlZFX09SREVSKTsKICAgIH0KICAgIGNvbnN0IHsgUHJvamVjdGl2ZVBvaW50OiBQb2ludDIsIG5vcm1Qcml2YXRlS2V5VG9TY2FsYXIsIHdlaWVyc3RyYXNzRXF1YXRpb24sIGlzV2l0aGluQ3VydmVPcmRlciB9ID0gd2VpZXJzdHJhc3NQb2ludHMoewogICAgICAuLi5DVVJWRSwKICAgICAgdG9CeXRlcyhfYywgcG9pbnQsIGlzQ29tcHJlc3NlZCkgewogICAgICAgIGNvbnN0IGEgPSBwb2ludC50b0FmZmluZSgpOwogICAgICAgIGNvbnN0IHggPSBGcDIudG9CeXRlcyhhLngpOwogICAgICAgIGNvbnN0IGNhdCA9IGNvbmNhdEJ5dGVzMzsKICAgICAgICBpZiAoaXNDb21wcmVzc2VkKSB7CiAgICAgICAgICByZXR1cm4gY2F0KFVpbnQ4QXJyYXkuZnJvbShbcG9pbnQuaGFzRXZlblkoKSA/IDIgOiAzXSksIHgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gY2F0KFVpbnQ4QXJyYXkuZnJvbShbNF0pLCB4LCBGcDIudG9CeXRlcyhhLnkpKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGZyb21CeXRlcyhieXRlczIpIHsKICAgICAgICBjb25zdCBsZW4gPSBieXRlczIubGVuZ3RoOwogICAgICAgIGNvbnN0IGhlYWQgPSBieXRlczJbMF07CiAgICAgICAgY29uc3QgdGFpbCA9IGJ5dGVzMi5zdWJhcnJheSgxKTsKICAgICAgICBpZiAobGVuID09PSBjb21wcmVzc2VkTGVuICYmIChoZWFkID09PSAyIHx8IGhlYWQgPT09IDMpKSB7CiAgICAgICAgICBjb25zdCB4ID0gYnl0ZXNUb051bWJlckJFKHRhaWwpOwogICAgICAgICAgaWYgKCFpc1ZhbGlkRmllbGRFbGVtZW50KHgpKQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlBvaW50IGlzIG5vdCBvbiBjdXJ2ZSIpOwogICAgICAgICAgY29uc3QgeTIgPSB3ZWllcnN0cmFzc0VxdWF0aW9uKHgpOwogICAgICAgICAgbGV0IHk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB5ID0gRnAyLnNxcnQoeTIpOwogICAgICAgICAgfSBjYXRjaCAoc3FydEVycm9yKSB7CiAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IHNxcnRFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gIjogIiArIHNxcnRFcnJvci5tZXNzYWdlIDogIiI7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiUG9pbnQgaXMgbm90IG9uIGN1cnZlIiArIHN1ZmZpeCk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBpc1lPZGQgPSAoeSAmIF8xbjUpID09PSBfMW41OwogICAgICAgICAgY29uc3QgaXNIZWFkT2RkID0gKGhlYWQgJiAxKSA9PT0gMTsKICAgICAgICAgIGlmIChpc0hlYWRPZGQgIT09IGlzWU9kZCkKICAgICAgICAgICAgeSA9IEZwMi5uZWcoeSk7CiAgICAgICAgICByZXR1cm4geyB4LCB5IH07CiAgICAgICAgfSBlbHNlIGlmIChsZW4gPT09IHVuY29tcHJlc3NlZExlbiAmJiBoZWFkID09PSA0KSB7CiAgICAgICAgICBjb25zdCB4ID0gRnAyLmZyb21CeXRlcyh0YWlsLnN1YmFycmF5KDAsIEZwMi5CWVRFUykpOwogICAgICAgICAgY29uc3QgeSA9IEZwMi5mcm9tQnl0ZXModGFpbC5zdWJhcnJheShGcDIuQllURVMsIDIgKiBGcDIuQllURVMpKTsKICAgICAgICAgIHJldHVybiB7IHgsIHkgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb2ludCBvZiBsZW5ndGggJHtsZW59IHdhcyBpbnZhbGlkLiBFeHBlY3RlZCAke2NvbXByZXNzZWRMZW59IGNvbXByZXNzZWQgYnl0ZXMgb3IgJHt1bmNvbXByZXNzZWRMZW59IHVuY29tcHJlc3NlZCBieXRlc2ApOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBjb25zdCBudW1Ub05CeXRlU3RyID0gKG51bSkgPT4gYnl0ZXNUb0hleDIobnVtYmVyVG9CeXRlc0JFKG51bSwgQ1VSVkUubkJ5dGVMZW5ndGgpKTsKICAgIGZ1bmN0aW9uIGlzQmlnZ2VyVGhhbkhhbGZPcmRlcihudW1iZXIyKSB7CiAgICAgIGNvbnN0IEhBTEYgPSBDVVJWRV9PUkRFUiA+PiBfMW41OwogICAgICByZXR1cm4gbnVtYmVyMiA+IEhBTEY7CiAgICB9CiAgICBmdW5jdGlvbiBub3JtYWxpemVTKHMpIHsKICAgICAgcmV0dXJuIGlzQmlnZ2VyVGhhbkhhbGZPcmRlcihzKSA/IG1vZE4yKC1zKSA6IHM7CiAgICB9CiAgICBjb25zdCBzbGNOdW0gPSAoYiwgZnJvbSwgdG8pID0+IGJ5dGVzVG9OdW1iZXJCRShiLnNsaWNlKGZyb20sIHRvKSk7CiAgICBjbGFzcyBTaWduYXR1cmUgewogICAgICBjb25zdHJ1Y3RvcihyLCBzLCByZWNvdmVyeSkgewogICAgICAgIHRoaXMuciA9IHI7CiAgICAgICAgdGhpcy5zID0gczsKICAgICAgICB0aGlzLnJlY292ZXJ5ID0gcmVjb3Zlcnk7CiAgICAgICAgdGhpcy5hc3NlcnRWYWxpZGl0eSgpOwogICAgICB9CiAgICAgIC8vIHBhaXIgKGJ5dGVzIG9mIHIsIGJ5dGVzIG9mIHMpCiAgICAgIHN0YXRpYyBmcm9tQ29tcGFjdChoZXgpIHsKICAgICAgICBjb25zdCBsID0gQ1VSVkUubkJ5dGVMZW5ndGg7CiAgICAgICAgaGV4ID0gZW5zdXJlQnl0ZXMoImNvbXBhY3RTaWduYXR1cmUiLCBoZXgsIGwgKiAyKTsKICAgICAgICByZXR1cm4gbmV3IFNpZ25hdHVyZShzbGNOdW0oaGV4LCAwLCBsKSwgc2xjTnVtKGhleCwgbCwgMiAqIGwpKTsKICAgICAgfQogICAgICAvLyBERVIgZW5jb2RlZCBFQ0RTQSBzaWduYXR1cmUKICAgICAgLy8gaHR0cHM6Ly9iaXRjb2luLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy81NzY0NC93aGF0LWFyZS10aGUtcGFydHMtb2YtYS1iaXRjb2luLXRyYW5zYWN0aW9uLWlucHV0LXNjcmlwdAogICAgICBzdGF0aWMgZnJvbURFUihoZXgpIHsKICAgICAgICBjb25zdCB7IHIsIHMgfSA9IERFUi50b1NpZyhlbnN1cmVCeXRlcygiREVSIiwgaGV4KSk7CiAgICAgICAgcmV0dXJuIG5ldyBTaWduYXR1cmUociwgcyk7CiAgICAgIH0KICAgICAgYXNzZXJ0VmFsaWRpdHkoKSB7CiAgICAgICAgaWYgKCFpc1dpdGhpbkN1cnZlT3JkZXIodGhpcy5yKSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiciBtdXN0IGJlIDAgPCByIDwgQ1VSVkUubiIpOwogICAgICAgIGlmICghaXNXaXRoaW5DdXJ2ZU9yZGVyKHRoaXMucykpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInMgbXVzdCBiZSAwIDwgcyA8IENVUlZFLm4iKTsKICAgICAgfQogICAgICBhZGRSZWNvdmVyeUJpdChyZWNvdmVyeSkgewogICAgICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKHRoaXMuciwgdGhpcy5zLCByZWNvdmVyeSk7CiAgICAgIH0KICAgICAgcmVjb3ZlclB1YmxpY0tleShtc2dIYXNoKSB7CiAgICAgICAgY29uc3QgeyByLCBzLCByZWNvdmVyeTogcmVjIH0gPSB0aGlzOwogICAgICAgIGNvbnN0IGggPSBiaXRzMmludF9tb2ROKGVuc3VyZUJ5dGVzKCJtc2dIYXNoIiwgbXNnSGFzaCkpOwogICAgICAgIGlmIChyZWMgPT0gbnVsbCB8fCAhWzAsIDEsIDIsIDNdLmluY2x1ZGVzKHJlYykpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInJlY292ZXJ5IGlkIGludmFsaWQiKTsKICAgICAgICBjb25zdCByYWRqID0gcmVjID09PSAyIHx8IHJlYyA9PT0gMyA/IHIgKyBDVVJWRS5uIDogcjsKICAgICAgICBpZiAocmFkaiA+PSBGcDIuT1JERVIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInJlY292ZXJ5IGlkIDIgb3IgMyBpbnZhbGlkIik7CiAgICAgICAgY29uc3QgcHJlZml4ID0gKHJlYyAmIDEpID09PSAwID8gIjAyIiA6ICIwMyI7CiAgICAgICAgY29uc3QgUiA9IFBvaW50Mi5mcm9tSGV4KHByZWZpeCArIG51bVRvTkJ5dGVTdHIocmFkaikpOwogICAgICAgIGNvbnN0IGlyID0gaW52TihyYWRqKTsKICAgICAgICBjb25zdCB1MSA9IG1vZE4yKC1oICogaXIpOwogICAgICAgIGNvbnN0IHUyID0gbW9kTjIocyAqIGlyKTsKICAgICAgICBjb25zdCBRID0gUG9pbnQyLkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoUiwgdTEsIHUyKTsKICAgICAgICBpZiAoIVEpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInBvaW50IGF0IGluZmluaWZ5Iik7CiAgICAgICAgUS5hc3NlcnRWYWxpZGl0eSgpOwogICAgICAgIHJldHVybiBROwogICAgICB9CiAgICAgIC8vIFNpZ25hdHVyZXMgc2hvdWxkIGJlIGxvdy1zLCB0byBwcmV2ZW50IG1hbGxlYWJpbGl0eS4KICAgICAgaGFzSGlnaFMoKSB7CiAgICAgICAgcmV0dXJuIGlzQmlnZ2VyVGhhbkhhbGZPcmRlcih0aGlzLnMpOwogICAgICB9CiAgICAgIG5vcm1hbGl6ZVMoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaGFzSGlnaFMoKSA/IG5ldyBTaWduYXR1cmUodGhpcy5yLCBtb2ROMigtdGhpcy5zKSwgdGhpcy5yZWNvdmVyeSkgOiB0aGlzOwogICAgICB9CiAgICAgIC8vIERFUi1lbmNvZGVkCiAgICAgIHRvREVSUmF3Qnl0ZXMoKSB7CiAgICAgICAgcmV0dXJuIGhleFRvQnl0ZXMyKHRoaXMudG9ERVJIZXgoKSk7CiAgICAgIH0KICAgICAgdG9ERVJIZXgoKSB7CiAgICAgICAgcmV0dXJuIERFUi5oZXhGcm9tU2lnKHsgcjogdGhpcy5yLCBzOiB0aGlzLnMgfSk7CiAgICAgIH0KICAgICAgLy8gcGFkZGVkIGJ5dGVzIG9mIHIsIHRoZW4gcGFkZGVkIGJ5dGVzIG9mIHMKICAgICAgdG9Db21wYWN0UmF3Qnl0ZXMoKSB7CiAgICAgICAgcmV0dXJuIGhleFRvQnl0ZXMyKHRoaXMudG9Db21wYWN0SGV4KCkpOwogICAgICB9CiAgICAgIHRvQ29tcGFjdEhleCgpIHsKICAgICAgICByZXR1cm4gbnVtVG9OQnl0ZVN0cih0aGlzLnIpICsgbnVtVG9OQnl0ZVN0cih0aGlzLnMpOwogICAgICB9CiAgICB9CiAgICBjb25zdCB1dGlscyA9IHsKICAgICAgaXNWYWxpZFByaXZhdGVLZXkocHJpdmF0ZUtleSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBub3JtUHJpdmF0ZUtleVRvU2NhbGFyKHByaXZhdGVLZXkpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG5vcm1Qcml2YXRlS2V5VG9TY2FsYXIsCiAgICAgIC8qKgogICAgICAgKiBQcm9kdWNlcyBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgcHJpdmF0ZSBrZXkgZnJvbSByYW5kb20gb2Ygc2l6ZQogICAgICAgKiAoZ3JvdXBMZW4gKyBjZWlsKGdyb3VwTGVuIC8gMikpIHdpdGggbW9kdWxvIGJpYXMgYmVpbmcgbmVnbGlnaWJsZS4KICAgICAgICovCiAgICAgIHJhbmRvbVByaXZhdGVLZXk6ICgpID0+IHsKICAgICAgICBjb25zdCBsZW5ndGggPSBnZXRNaW5IYXNoTGVuZ3RoKENVUlZFLm4pOwogICAgICAgIHJldHVybiBtYXBIYXNoVG9GaWVsZChDVVJWRS5yYW5kb21CeXRlcyhsZW5ndGgpLCBDVVJWRS5uKTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgcHJlY29tcHV0ZSB0YWJsZSBmb3IgYW4gYXJiaXRyYXJ5IEVDIHBvaW50LiBNYWtlcyBwb2ludCAiY2FjaGVkIi4KICAgICAgICogQWxsb3dzIHRvIG1hc3NpdmVseSBzcGVlZC11cCBgcG9pbnQubXVsdGlwbHkoc2NhbGFyKWAuCiAgICAgICAqIEByZXR1cm5zIGNhY2hlZCBwb2ludAogICAgICAgKiBAZXhhbXBsZQogICAgICAgKiBjb25zdCBmYXN0ID0gdXRpbHMucHJlY29tcHV0ZSg4LCBQcm9qZWN0aXZlUG9pbnQuZnJvbUhleChzb21lb25lc1B1YktleSkpOwogICAgICAgKiBmYXN0Lm11bHRpcGx5KHByaXZLZXkpOyAvLyBtdWNoIGZhc3RlciBFQ0RIIG5vdwogICAgICAgKi8KICAgICAgcHJlY29tcHV0ZSh3aW5kb3dTaXplID0gOCwgcG9pbnQgPSBQb2ludDIuQkFTRSkgewogICAgICAgIHBvaW50Ll9zZXRXaW5kb3dTaXplKHdpbmRvd1NpemUpOwogICAgICAgIHBvaW50Lm11bHRpcGx5KEJpZ0ludCgzKSk7CiAgICAgICAgcmV0dXJuIHBvaW50OwogICAgICB9CiAgICB9OwogICAgZnVuY3Rpb24gZ2V0UHVibGljS2V5KHByaXZhdGVLZXksIGlzQ29tcHJlc3NlZCA9IHRydWUpIHsKICAgICAgcmV0dXJuIFBvaW50Mi5mcm9tUHJpdmF0ZUtleShwcml2YXRlS2V5KS50b1Jhd0J5dGVzKGlzQ29tcHJlc3NlZCk7CiAgICB9CiAgICBmdW5jdGlvbiBpc1Byb2JQdWIoaXRlbSkgewogICAgICBjb25zdCBhcnIgPSBpc0J5dGVzMihpdGVtKTsKICAgICAgY29uc3Qgc3RyID0gdHlwZW9mIGl0ZW0gPT09ICJzdHJpbmciOwogICAgICBjb25zdCBsZW4gPSAoYXJyIHx8IHN0cikgJiYgaXRlbS5sZW5ndGg7CiAgICAgIGlmIChhcnIpCiAgICAgICAgcmV0dXJuIGxlbiA9PT0gY29tcHJlc3NlZExlbiB8fCBsZW4gPT09IHVuY29tcHJlc3NlZExlbjsKICAgICAgaWYgKHN0cikKICAgICAgICByZXR1cm4gbGVuID09PSAyICogY29tcHJlc3NlZExlbiB8fCBsZW4gPT09IDIgKiB1bmNvbXByZXNzZWRMZW47CiAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUG9pbnQyKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRTaGFyZWRTZWNyZXQocHJpdmF0ZUEsIHB1YmxpY0IsIGlzQ29tcHJlc3NlZCA9IHRydWUpIHsKICAgICAgaWYgKGlzUHJvYlB1Yihwcml2YXRlQSkpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJmaXJzdCBhcmcgbXVzdCBiZSBwcml2YXRlIGtleSIpOwogICAgICBpZiAoIWlzUHJvYlB1YihwdWJsaWNCKSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInNlY29uZCBhcmcgbXVzdCBiZSBwdWJsaWMga2V5Iik7CiAgICAgIGNvbnN0IGIgPSBQb2ludDIuZnJvbUhleChwdWJsaWNCKTsKICAgICAgcmV0dXJuIGIubXVsdGlwbHkobm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2YXRlQSkpLnRvUmF3Qnl0ZXMoaXNDb21wcmVzc2VkKTsKICAgIH0KICAgIGNvbnN0IGJpdHMyaW50ID0gQ1VSVkUuYml0czJpbnQgfHwgZnVuY3Rpb24oYnl0ZXMyKSB7CiAgICAgIGNvbnN0IG51bSA9IGJ5dGVzVG9OdW1iZXJCRShieXRlczIpOwogICAgICBjb25zdCBkZWx0YSA9IGJ5dGVzMi5sZW5ndGggKiA4IC0gQ1VSVkUubkJpdExlbmd0aDsKICAgICAgcmV0dXJuIGRlbHRhID4gMCA/IG51bSA+PiBCaWdJbnQoZGVsdGEpIDogbnVtOwogICAgfTsKICAgIGNvbnN0IGJpdHMyaW50X21vZE4gPSBDVVJWRS5iaXRzMmludF9tb2ROIHx8IGZ1bmN0aW9uKGJ5dGVzMikgewogICAgICByZXR1cm4gbW9kTjIoYml0czJpbnQoYnl0ZXMyKSk7CiAgICB9OwogICAgY29uc3QgT1JERVJfTUFTSyA9IGJpdE1hc2soQ1VSVkUubkJpdExlbmd0aCk7CiAgICBmdW5jdGlvbiBpbnQyb2N0ZXRzKG51bSkgewogICAgICBpZiAodHlwZW9mIG51bSAhPT0gImJpZ2ludCIpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiaWdpbnQgZXhwZWN0ZWQiKTsKICAgICAgaWYgKCEoXzBuNSA8PSBudW0gJiYgbnVtIDwgT1JERVJfTUFTSykpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiaWdpbnQgZXhwZWN0ZWQgPCAyXiR7Q1VSVkUubkJpdExlbmd0aH1gKTsKICAgICAgcmV0dXJuIG51bWJlclRvQnl0ZXNCRShudW0sIENVUlZFLm5CeXRlTGVuZ3RoKTsKICAgIH0KICAgIGZ1bmN0aW9uIHByZXBTaWcobXNnSGFzaCwgcHJpdmF0ZUtleSwgb3B0cyA9IGRlZmF1bHRTaWdPcHRzKSB7CiAgICAgIGlmIChbInJlY292ZXJlZCIsICJjYW5vbmljYWwiXS5zb21lKChrKSA9PiBrIGluIG9wdHMpKQogICAgICAgIHRocm93IG5ldyBFcnJvcigic2lnbigpIGxlZ2FjeSBvcHRpb25zIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgY29uc3QgeyBoYXNoOiBoYXNoMywgcmFuZG9tQnl0ZXM6IHJhbmRvbUJ5dGVzMiB9ID0gQ1VSVkU7CiAgICAgIGxldCB7IGxvd1MsIHByZWhhc2gsIGV4dHJhRW50cm9weTogZW50IH0gPSBvcHRzOwogICAgICBpZiAobG93UyA9PSBudWxsKQogICAgICAgIGxvd1MgPSB0cnVlOwogICAgICBtc2dIYXNoID0gZW5zdXJlQnl0ZXMoIm1zZ0hhc2giLCBtc2dIYXNoKTsKICAgICAgaWYgKHByZWhhc2gpCiAgICAgICAgbXNnSGFzaCA9IGVuc3VyZUJ5dGVzKCJwcmVoYXNoZWQgbXNnSGFzaCIsIGhhc2gzKG1zZ0hhc2gpKTsKICAgICAgY29uc3QgaDFpbnQgPSBiaXRzMmludF9tb2ROKG1zZ0hhc2gpOwogICAgICBjb25zdCBkID0gbm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2YXRlS2V5KTsKICAgICAgY29uc3Qgc2VlZEFyZ3MgPSBbaW50Mm9jdGV0cyhkKSwgaW50Mm9jdGV0cyhoMWludCldOwogICAgICBpZiAoZW50ICE9IG51bGwgJiYgZW50ICE9PSBmYWxzZSkgewogICAgICAgIGNvbnN0IGUgPSBlbnQgPT09IHRydWUgPyByYW5kb21CeXRlczIoRnAyLkJZVEVTKSA6IGVudDsKICAgICAgICBzZWVkQXJncy5wdXNoKGVuc3VyZUJ5dGVzKCJleHRyYUVudHJvcHkiLCBlKSk7CiAgICAgIH0KICAgICAgY29uc3Qgc2VlZCA9IGNvbmNhdEJ5dGVzMyguLi5zZWVkQXJncyk7CiAgICAgIGNvbnN0IG0gPSBoMWludDsKICAgICAgZnVuY3Rpb24gazJzaWcoa0J5dGVzKSB7CiAgICAgICAgY29uc3QgayA9IGJpdHMyaW50KGtCeXRlcyk7CiAgICAgICAgaWYgKCFpc1dpdGhpbkN1cnZlT3JkZXIoaykpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgaWsgPSBpbnZOKGspOwogICAgICAgIGNvbnN0IHEgPSBQb2ludDIuQkFTRS5tdWx0aXBseShrKS50b0FmZmluZSgpOwogICAgICAgIGNvbnN0IHIgPSBtb2ROMihxLngpOwogICAgICAgIGlmIChyID09PSBfMG41KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IHMgPSBtb2ROMihpayAqIG1vZE4yKG0gKyByICogZCkpOwogICAgICAgIGlmIChzID09PSBfMG41KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGxldCByZWNvdmVyeSA9IChxLnggPT09IHIgPyAwIDogMikgfCBOdW1iZXIocS55ICYgXzFuNSk7CiAgICAgICAgbGV0IG5vcm1TID0gczsKICAgICAgICBpZiAobG93UyAmJiBpc0JpZ2dlclRoYW5IYWxmT3JkZXIocykpIHsKICAgICAgICAgIG5vcm1TID0gbm9ybWFsaXplUyhzKTsKICAgICAgICAgIHJlY292ZXJ5IF49IDE7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKHIsIG5vcm1TLCByZWNvdmVyeSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgc2VlZCwgazJzaWcgfTsKICAgIH0KICAgIGNvbnN0IGRlZmF1bHRTaWdPcHRzID0geyBsb3dTOiBDVVJWRS5sb3dTLCBwcmVoYXNoOiBmYWxzZSB9OwogICAgY29uc3QgZGVmYXVsdFZlck9wdHMgPSB7IGxvd1M6IENVUlZFLmxvd1MsIHByZWhhc2g6IGZhbHNlIH07CiAgICBmdW5jdGlvbiBzaWduMihtc2dIYXNoLCBwcml2S2V5LCBvcHRzID0gZGVmYXVsdFNpZ09wdHMpIHsKICAgICAgY29uc3QgeyBzZWVkLCBrMnNpZyB9ID0gcHJlcFNpZyhtc2dIYXNoLCBwcml2S2V5LCBvcHRzKTsKICAgICAgY29uc3QgQyA9IENVUlZFOwogICAgICBjb25zdCBkcmJnID0gY3JlYXRlSG1hY0RyYmcoQy5oYXNoLm91dHB1dExlbiwgQy5uQnl0ZUxlbmd0aCwgQy5obWFjKTsKICAgICAgcmV0dXJuIGRyYmcoc2VlZCwgazJzaWcpOwogICAgfQogICAgUG9pbnQyLkJBU0UuX3NldFdpbmRvd1NpemUoOCk7CiAgICBmdW5jdGlvbiB2ZXJpZnkoc2lnbmF0dXJlLCBtc2dIYXNoLCBwdWJsaWNLZXksIG9wdHMgPSBkZWZhdWx0VmVyT3B0cykgewogICAgICBjb25zdCBzZyA9IHNpZ25hdHVyZTsKICAgICAgbXNnSGFzaCA9IGVuc3VyZUJ5dGVzKCJtc2dIYXNoIiwgbXNnSGFzaCk7CiAgICAgIHB1YmxpY0tleSA9IGVuc3VyZUJ5dGVzKCJwdWJsaWNLZXkiLCBwdWJsaWNLZXkpOwogICAgICBpZiAoInN0cmljdCIgaW4gb3B0cykKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm9wdGlvbnMuc3RyaWN0IHdhcyByZW5hbWVkIHRvIGxvd1MiKTsKICAgICAgY29uc3QgeyBsb3dTLCBwcmVoYXNoIH0gPSBvcHRzOwogICAgICBsZXQgX3NpZyA9IHZvaWQgMDsKICAgICAgbGV0IFA7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKHR5cGVvZiBzZyA9PT0gInN0cmluZyIgfHwgaXNCeXRlczIoc2cpKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBfc2lnID0gU2lnbmF0dXJlLmZyb21ERVIoc2cpOwogICAgICAgICAgfSBjYXRjaCAoZGVyRXJyb3IpIHsKICAgICAgICAgICAgaWYgKCEoZGVyRXJyb3IgaW5zdGFuY2VvZiBERVIuRXJyKSkKICAgICAgICAgICAgICB0aHJvdyBkZXJFcnJvcjsKICAgICAgICAgICAgX3NpZyA9IFNpZ25hdHVyZS5mcm9tQ29tcGFjdChzZyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2cgPT09ICJvYmplY3QiICYmIHR5cGVvZiBzZy5yID09PSAiYmlnaW50IiAmJiB0eXBlb2Ygc2cucyA9PT0gImJpZ2ludCIpIHsKICAgICAgICAgIGNvbnN0IHsgcjogcjIsIHM6IHMyIH0gPSBzZzsKICAgICAgICAgIF9zaWcgPSBuZXcgU2lnbmF0dXJlKHIyLCBzMik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiUEFSU0UiKTsKICAgICAgICB9CiAgICAgICAgUCA9IFBvaW50Mi5mcm9tSGV4KHB1YmxpY0tleSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgPT09ICJQQVJTRSIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNpZ25hdHVyZSBtdXN0IGJlIFNpZ25hdHVyZSBpbnN0YW5jZSwgVWludDhBcnJheSBvciBoZXggc3RyaW5nYCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChsb3dTICYmIF9zaWcuaGFzSGlnaFMoKSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChwcmVoYXNoKQogICAgICAgIG1zZ0hhc2ggPSBDVVJWRS5oYXNoKG1zZ0hhc2gpOwogICAgICBjb25zdCB7IHIsIHMgfSA9IF9zaWc7CiAgICAgIGNvbnN0IGggPSBiaXRzMmludF9tb2ROKG1zZ0hhc2gpOwogICAgICBjb25zdCBpcyA9IGludk4ocyk7CiAgICAgIGNvbnN0IHUxID0gbW9kTjIoaCAqIGlzKTsKICAgICAgY29uc3QgdTIgPSBtb2ROMihyICogaXMpOwogICAgICBjb25zdCBSID0gUG9pbnQyLkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoUCwgdTEsIHUyKT8udG9BZmZpbmUoKTsKICAgICAgaWYgKCFSKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgY29uc3QgdiA9IG1vZE4yKFIueCk7CiAgICAgIHJldHVybiB2ID09PSByOwogICAgfQogICAgcmV0dXJuIHsKICAgICAgQ1VSVkUsCiAgICAgIGdldFB1YmxpY0tleSwKICAgICAgZ2V0U2hhcmVkU2VjcmV0LAogICAgICBzaWduOiBzaWduMiwKICAgICAgdmVyaWZ5LAogICAgICBQcm9qZWN0aXZlUG9pbnQ6IFBvaW50MiwKICAgICAgU2lnbmF0dXJlLAogICAgICB1dGlscwogICAgfTsKICB9CiAgZnVuY3Rpb24gU1dVRnBTcXJ0UmF0aW8oRnAyLCBaKSB7CiAgICBjb25zdCBxID0gRnAyLk9SREVSOwogICAgbGV0IGwgPSBfMG41OwogICAgZm9yIChsZXQgbyA9IHEgLSBfMW41OyBvICUgXzJuNCA9PT0gXzBuNTsgbyAvPSBfMm40KQogICAgICBsICs9IF8xbjU7CiAgICBjb25zdCBjMSA9IGw7CiAgICBjb25zdCBfMm5fcG93X2MxXzEgPSBfMm40IDw8IGMxIC0gXzFuNSAtIF8xbjU7CiAgICBjb25zdCBfMm5fcG93X2MxID0gXzJuX3Bvd19jMV8xICogXzJuNDsKICAgIGNvbnN0IGMyID0gKHEgLSBfMW41KSAvIF8ybl9wb3dfYzE7CiAgICBjb25zdCBjMyA9IChjMiAtIF8xbjUpIC8gXzJuNDsKICAgIGNvbnN0IGM0ID0gXzJuX3Bvd19jMSAtIF8xbjU7CiAgICBjb25zdCBjNSA9IF8ybl9wb3dfYzFfMTsKICAgIGNvbnN0IGM2ID0gRnAyLnBvdyhaLCBjMik7CiAgICBjb25zdCBjNyA9IEZwMi5wb3coWiwgKGMyICsgXzFuNSkgLyBfMm40KTsKICAgIGxldCBzcXJ0UmF0aW8gPSAodSwgdikgPT4gewogICAgICBsZXQgdHYxID0gYzY7CiAgICAgIGxldCB0djIgPSBGcDIucG93KHYsIGM0KTsKICAgICAgbGV0IHR2MyA9IEZwMi5zcXIodHYyKTsKICAgICAgdHYzID0gRnAyLm11bCh0djMsIHYpOwogICAgICBsZXQgdHY1ID0gRnAyLm11bCh1LCB0djMpOwogICAgICB0djUgPSBGcDIucG93KHR2NSwgYzMpOwogICAgICB0djUgPSBGcDIubXVsKHR2NSwgdHYyKTsKICAgICAgdHYyID0gRnAyLm11bCh0djUsIHYpOwogICAgICB0djMgPSBGcDIubXVsKHR2NSwgdSk7CiAgICAgIGxldCB0djQgPSBGcDIubXVsKHR2MywgdHYyKTsKICAgICAgdHY1ID0gRnAyLnBvdyh0djQsIGM1KTsKICAgICAgbGV0IGlzUVIgPSBGcDIuZXFsKHR2NSwgRnAyLk9ORSk7CiAgICAgIHR2MiA9IEZwMi5tdWwodHYzLCBjNyk7CiAgICAgIHR2NSA9IEZwMi5tdWwodHY0LCB0djEpOwogICAgICB0djMgPSBGcDIuY21vdih0djIsIHR2MywgaXNRUik7CiAgICAgIHR2NCA9IEZwMi5jbW92KHR2NSwgdHY0LCBpc1FSKTsKICAgICAgZm9yIChsZXQgaSA9IGMxOyBpID4gXzFuNTsgaS0tKSB7CiAgICAgICAgbGV0IHR2NTIgPSBpIC0gXzJuNDsKICAgICAgICB0djUyID0gXzJuNCA8PCB0djUyIC0gXzFuNTsKICAgICAgICBsZXQgdHZ2NSA9IEZwMi5wb3codHY0LCB0djUyKTsKICAgICAgICBjb25zdCBlMSA9IEZwMi5lcWwodHZ2NSwgRnAyLk9ORSk7CiAgICAgICAgdHYyID0gRnAyLm11bCh0djMsIHR2MSk7CiAgICAgICAgdHYxID0gRnAyLm11bCh0djEsIHR2MSk7CiAgICAgICAgdHZ2NSA9IEZwMi5tdWwodHY0LCB0djEpOwogICAgICAgIHR2MyA9IEZwMi5jbW92KHR2MiwgdHYzLCBlMSk7CiAgICAgICAgdHY0ID0gRnAyLmNtb3YodHZ2NSwgdHY0LCBlMSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgaXNWYWxpZDogaXNRUiwgdmFsdWU6IHR2MyB9OwogICAgfTsKICAgIGlmIChGcDIuT1JERVIgJSBfNG4yID09PSBfM24yKSB7CiAgICAgIGNvbnN0IGMxMiA9IChGcDIuT1JERVIgLSBfM24yKSAvIF80bjI7CiAgICAgIGNvbnN0IGMyMiA9IEZwMi5zcXJ0KEZwMi5uZWcoWikpOwogICAgICBzcXJ0UmF0aW8gPSAodSwgdikgPT4gewogICAgICAgIGxldCB0djEgPSBGcDIuc3FyKHYpOwogICAgICAgIGNvbnN0IHR2MiA9IEZwMi5tdWwodSwgdik7CiAgICAgICAgdHYxID0gRnAyLm11bCh0djEsIHR2Mik7CiAgICAgICAgbGV0IHkxID0gRnAyLnBvdyh0djEsIGMxMik7CiAgICAgICAgeTEgPSBGcDIubXVsKHkxLCB0djIpOwogICAgICAgIGNvbnN0IHkyID0gRnAyLm11bCh5MSwgYzIyKTsKICAgICAgICBjb25zdCB0djMgPSBGcDIubXVsKEZwMi5zcXIoeTEpLCB2KTsKICAgICAgICBjb25zdCBpc1FSID0gRnAyLmVxbCh0djMsIHUpOwogICAgICAgIGxldCB5ID0gRnAyLmNtb3YoeTIsIHkxLCBpc1FSKTsKICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBpc1FSLCB2YWx1ZTogeSB9OwogICAgICB9OwogICAgfQogICAgcmV0dXJuIHNxcnRSYXRpbzsKICB9CiAgZnVuY3Rpb24gbWFwVG9DdXJ2ZVNpbXBsZVNXVShGcDIsIG9wdHMpIHsKICAgIHZhbGlkYXRlRmllbGQoRnAyKTsKICAgIGlmICghRnAyLmlzVmFsaWQob3B0cy5BKSB8fCAhRnAyLmlzVmFsaWQob3B0cy5CKSB8fCAhRnAyLmlzVmFsaWQob3B0cy5aKSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJtYXBUb0N1cnZlU2ltcGxlU1dVOiBpbnZhbGlkIG9wdHMiKTsKICAgIGNvbnN0IHNxcnRSYXRpbyA9IFNXVUZwU3FydFJhdGlvKEZwMiwgb3B0cy5aKTsKICAgIGlmICghRnAyLmlzT2RkKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkZwLmlzT2RkIGlzIG5vdCBpbXBsZW1lbnRlZCEiKTsKICAgIHJldHVybiAodSkgPT4gewogICAgICBsZXQgdHYxLCB0djIsIHR2MywgdHY0LCB0djUsIHR2NiwgeCwgeTsKICAgICAgdHYxID0gRnAyLnNxcih1KTsKICAgICAgdHYxID0gRnAyLm11bCh0djEsIG9wdHMuWik7CiAgICAgIHR2MiA9IEZwMi5zcXIodHYxKTsKICAgICAgdHYyID0gRnAyLmFkZCh0djIsIHR2MSk7CiAgICAgIHR2MyA9IEZwMi5hZGQodHYyLCBGcDIuT05FKTsKICAgICAgdHYzID0gRnAyLm11bCh0djMsIG9wdHMuQik7CiAgICAgIHR2NCA9IEZwMi5jbW92KG9wdHMuWiwgRnAyLm5lZyh0djIpLCAhRnAyLmVxbCh0djIsIEZwMi5aRVJPKSk7CiAgICAgIHR2NCA9IEZwMi5tdWwodHY0LCBvcHRzLkEpOwogICAgICB0djIgPSBGcDIuc3FyKHR2Myk7CiAgICAgIHR2NiA9IEZwMi5zcXIodHY0KTsKICAgICAgdHY1ID0gRnAyLm11bCh0djYsIG9wdHMuQSk7CiAgICAgIHR2MiA9IEZwMi5hZGQodHYyLCB0djUpOwogICAgICB0djIgPSBGcDIubXVsKHR2MiwgdHYzKTsKICAgICAgdHY2ID0gRnAyLm11bCh0djYsIHR2NCk7CiAgICAgIHR2NSA9IEZwMi5tdWwodHY2LCBvcHRzLkIpOwogICAgICB0djIgPSBGcDIuYWRkKHR2MiwgdHY1KTsKICAgICAgeCA9IEZwMi5tdWwodHYxLCB0djMpOwogICAgICBjb25zdCB7IGlzVmFsaWQsIHZhbHVlIH0gPSBzcXJ0UmF0aW8odHYyLCB0djYpOwogICAgICB5ID0gRnAyLm11bCh0djEsIHUpOwogICAgICB5ID0gRnAyLm11bCh5LCB2YWx1ZSk7CiAgICAgIHggPSBGcDIuY21vdih4LCB0djMsIGlzVmFsaWQpOwogICAgICB5ID0gRnAyLmNtb3YoeSwgdmFsdWUsIGlzVmFsaWQpOwogICAgICBjb25zdCBlMSA9IEZwMi5pc09kZCh1KSA9PT0gRnAyLmlzT2RkKHkpOwogICAgICB5ID0gRnAyLmNtb3YoRnAyLm5lZyh5KSwgeSwgZTEpOwogICAgICB4ID0gRnAyLmRpdih4LCB0djQpOwogICAgICByZXR1cm4geyB4LCB5IH07CiAgICB9OwogIH0KICB2YXIgYjJuLCBoMmIsIERFUiwgXzBuNSwgXzFuNSwgXzJuNCwgXzNuMiwgXzRuMjsKICB2YXIgaW5pdF93ZWllcnN0cmFzcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3Qvd2VpZXJzdHJhc3MuanMiKCkgewogICAgICBpbml0X21vZHVsYXIoKTsKICAgICAgaW5pdF91dGlsczQoKTsKICAgICAgaW5pdF91dGlsczQoKTsKICAgICAgaW5pdF9jdXJ2ZSgpOwogICAgICAoeyBieXRlc1RvTnVtYmVyQkU6IGIybiwgaGV4VG9CeXRlczogaDJiIH0gPSB1dGlsc19leHBvcnRzKTsKICAgICAgREVSID0gewogICAgICAgIC8vIGFzbi4xIERFUiBlbmNvZGluZyB1dGlscwogICAgICAgIEVycjogY2xhc3MgREVSRXJyIGV4dGVuZHMgRXJyb3IgewogICAgICAgICAgY29uc3RydWN0b3IobSA9ICIiKSB7CiAgICAgICAgICAgIHN1cGVyKG0pOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgX3BhcnNlSW50KGRhdGEpIHsKICAgICAgICAgIGNvbnN0IHsgRXJyOiBFIH0gPSBERVI7CiAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPCAyIHx8IGRhdGFbMF0gIT09IDIpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyIHRhZyIpOwogICAgICAgICAgY29uc3QgbGVuID0gZGF0YVsxXTsKICAgICAgICAgIGNvbnN0IHJlcyA9IGRhdGEuc3ViYXJyYXkoMiwgbGVuICsgMik7CiAgICAgICAgICBpZiAoIWxlbiB8fCByZXMubGVuZ3RoICE9PSBsZW4pCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiB3cm9uZyBsZW5ndGgiKTsKICAgICAgICAgIGlmIChyZXNbMF0gJiAxMjgpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiBuZWdhdGl2ZSIpOwogICAgICAgICAgaWYgKHJlc1swXSA9PT0gMCAmJiAhKHJlc1sxXSAmIDEyOCkpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiB1bm5lY2Vzc2FyeSBsZWFkaW5nIHplcm8iKTsKICAgICAgICAgIHJldHVybiB7IGQ6IGIybihyZXMpLCBsOiBkYXRhLnN1YmFycmF5KGxlbiArIDIpIH07CiAgICAgICAgfSwKICAgICAgICB0b1NpZyhoZXgpIHsKICAgICAgICAgIGNvbnN0IHsgRXJyOiBFIH0gPSBERVI7CiAgICAgICAgICBjb25zdCBkYXRhID0gdHlwZW9mIGhleCA9PT0gInN0cmluZyIgPyBoMmIoaGV4KSA6IGhleDsKICAgICAgICAgIGFieXRlcyhkYXRhKTsKICAgICAgICAgIGxldCBsID0gZGF0YS5sZW5ndGg7CiAgICAgICAgICBpZiAobCA8IDIgfHwgZGF0YVswXSAhPSA0OCkKICAgICAgICAgICAgdGhyb3cgbmV3IEUoIkludmFsaWQgc2lnbmF0dXJlIHRhZyIpOwogICAgICAgICAgaWYgKGRhdGFbMV0gIT09IGwgLSAyKQogICAgICAgICAgICB0aHJvdyBuZXcgRSgiSW52YWxpZCBzaWduYXR1cmU6IGluY29ycmVjdCBsZW5ndGgiKTsKICAgICAgICAgIGNvbnN0IHsgZDogciwgbDogc0J5dGVzIH0gPSBERVIuX3BhcnNlSW50KGRhdGEuc3ViYXJyYXkoMikpOwogICAgICAgICAgY29uc3QgeyBkOiBzLCBsOiByQnl0ZXNMZWZ0IH0gPSBERVIuX3BhcnNlSW50KHNCeXRlcyk7CiAgICAgICAgICBpZiAockJ5dGVzTGVmdC5sZW5ndGgpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZTogbGVmdCBieXRlcyBhZnRlciBwYXJzaW5nIik7CiAgICAgICAgICByZXR1cm4geyByLCBzIH07CiAgICAgICAgfSwKICAgICAgICBoZXhGcm9tU2lnKHNpZykgewogICAgICAgICAgY29uc3Qgc2xpY2UyID0gKHMyKSA9PiBOdW1iZXIucGFyc2VJbnQoczJbMF0sIDE2KSAmIDggPyAiMDAiICsgczIgOiBzMjsKICAgICAgICAgIGNvbnN0IGggPSAobnVtKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGhleCA9IG51bS50b1N0cmluZygxNik7CiAgICAgICAgICAgIHJldHVybiBoZXgubGVuZ3RoICYgMSA/IGAwJHtoZXh9YCA6IGhleDsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCBzID0gc2xpY2UyKGgoc2lnLnMpKTsKICAgICAgICAgIGNvbnN0IHIgPSBzbGljZTIoaChzaWcucikpOwogICAgICAgICAgY29uc3Qgc2hsID0gcy5sZW5ndGggLyAyOwogICAgICAgICAgY29uc3QgcmhsID0gci5sZW5ndGggLyAyOwogICAgICAgICAgY29uc3Qgc2wgPSBoKHNobCk7CiAgICAgICAgICBjb25zdCBybCA9IGgocmhsKTsKICAgICAgICAgIHJldHVybiBgMzAke2gocmhsICsgc2hsICsgNCl9MDIke3JsfSR7cn0wMiR7c2x9JHtzfWA7CiAgICAgICAgfQogICAgICB9OwogICAgICBfMG41ID0gQmlnSW50KDApOwogICAgICBfMW41ID0gQmlnSW50KDEpOwogICAgICBfMm40ID0gQmlnSW50KDIpOwogICAgICBfM24yID0gQmlnSW50KDMpOwogICAgICBfNG4yID0gQmlnSW50KDQpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvaGFzaC10by1jdXJ2ZS5qcwogIGZ1bmN0aW9uIGkyb3NwKHZhbHVlLCBsZW5ndGgpIHsKICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPj0gMSA8PCA4ICogbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIEkyT1NQIGNhbGw6IHZhbHVlPSR7dmFsdWV9IGxlbmd0aD0ke2xlbmd0aH1gKTsKICAgIH0KICAgIGNvbnN0IHJlcyA9IEFycmF5LmZyb20oeyBsZW5ndGggfSkuZmlsbCgwKTsKICAgIGZvciAobGV0IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICByZXNbaV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgdmFsdWUgPj4+PSA4OwogICAgfQogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlcyk7CiAgfQogIGZ1bmN0aW9uIHN0cnhvcihhLCBiKSB7CiAgICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheShhLmxlbmd0aCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKICAgICAgYXJyW2ldID0gYVtpXSBeIGJbaV07CiAgICB9CiAgICByZXR1cm4gYXJyOwogIH0KICBmdW5jdGlvbiBhbnVtKGl0ZW0pIHsKICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoaXRlbSkpCiAgICAgIHRocm93IG5ldyBFcnJvcigibnVtYmVyIGV4cGVjdGVkIik7CiAgfQogIGZ1bmN0aW9uIGV4cGFuZF9tZXNzYWdlX3htZChtc2csIERTVCwgbGVuSW5CeXRlcywgSCkgewogICAgYWJ5dGVzKG1zZyk7CiAgICBhYnl0ZXMoRFNUKTsKICAgIGFudW0obGVuSW5CeXRlcyk7CiAgICBpZiAoRFNULmxlbmd0aCA+IDI1NSkKICAgICAgRFNUID0gSChjb25jYXRCeXRlczModXRmOFRvQnl0ZXMyKCJIMkMtT1ZFUlNJWkUtRFNULSIpLCBEU1QpKTsKICAgIGNvbnN0IHsgb3V0cHV0TGVuOiBiX2luX2J5dGVzLCBibG9ja0xlbjogcl9pbl9ieXRlcyB9ID0gSDsKICAgIGNvbnN0IGVsbCA9IE1hdGguY2VpbChsZW5JbkJ5dGVzIC8gYl9pbl9ieXRlcyk7CiAgICBpZiAoZWxsID4gMjU1KQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeG1kIGxlbmd0aCIpOwogICAgY29uc3QgRFNUX3ByaW1lID0gY29uY2F0Qnl0ZXMzKERTVCwgaTJvc3AoRFNULmxlbmd0aCwgMSkpOwogICAgY29uc3QgWl9wYWQgPSBpMm9zcCgwLCByX2luX2J5dGVzKTsKICAgIGNvbnN0IGxfaV9iX3N0ciA9IGkyb3NwKGxlbkluQnl0ZXMsIDIpOwogICAgY29uc3QgYiA9IG5ldyBBcnJheShlbGwpOwogICAgY29uc3QgYl8wID0gSChjb25jYXRCeXRlczMoWl9wYWQsIG1zZywgbF9pX2Jfc3RyLCBpMm9zcCgwLCAxKSwgRFNUX3ByaW1lKSk7CiAgICBiWzBdID0gSChjb25jYXRCeXRlczMoYl8wLCBpMm9zcCgxLCAxKSwgRFNUX3ByaW1lKSk7CiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBlbGw7IGkrKykgewogICAgICBjb25zdCBhcmdzID0gW3N0cnhvcihiXzAsIGJbaSAtIDFdKSwgaTJvc3AoaSArIDEsIDEpLCBEU1RfcHJpbWVdOwogICAgICBiW2ldID0gSChjb25jYXRCeXRlczMoLi4uYXJncykpOwogICAgfQogICAgY29uc3QgcHNldWRvX3JhbmRvbV9ieXRlcyA9IGNvbmNhdEJ5dGVzMyguLi5iKTsKICAgIHJldHVybiBwc2V1ZG9fcmFuZG9tX2J5dGVzLnNsaWNlKDAsIGxlbkluQnl0ZXMpOwogIH0KICBmdW5jdGlvbiBleHBhbmRfbWVzc2FnZV94b2YobXNnLCBEU1QsIGxlbkluQnl0ZXMsIGssIEgpIHsKICAgIGFieXRlcyhtc2cpOwogICAgYWJ5dGVzKERTVCk7CiAgICBhbnVtKGxlbkluQnl0ZXMpOwogICAgaWYgKERTVC5sZW5ndGggPiAyNTUpIHsKICAgICAgY29uc3QgZGtMZW4gPSBNYXRoLmNlaWwoMiAqIGsgLyA4KTsKICAgICAgRFNUID0gSC5jcmVhdGUoeyBka0xlbiB9KS51cGRhdGUodXRmOFRvQnl0ZXMyKCJIMkMtT1ZFUlNJWkUtRFNULSIpKS51cGRhdGUoRFNUKS5kaWdlc3QoKTsKICAgIH0KICAgIGlmIChsZW5JbkJ5dGVzID4gNjU1MzUgfHwgRFNULmxlbmd0aCA+IDI1NSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJleHBhbmRfbWVzc2FnZV94b2Y6IGludmFsaWQgbGVuSW5CeXRlcyIpOwogICAgcmV0dXJuIEguY3JlYXRlKHsgZGtMZW46IGxlbkluQnl0ZXMgfSkudXBkYXRlKG1zZykudXBkYXRlKGkyb3NwKGxlbkluQnl0ZXMsIDIpKS51cGRhdGUoRFNUKS51cGRhdGUoaTJvc3AoRFNULmxlbmd0aCwgMSkpLmRpZ2VzdCgpOwogIH0KICBmdW5jdGlvbiBoYXNoX3RvX2ZpZWxkKG1zZywgY291bnQsIG9wdGlvbnMpIHsKICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsIHsKICAgICAgRFNUOiAic3RyaW5nT3JVaW50OEFycmF5IiwKICAgICAgcDogImJpZ2ludCIsCiAgICAgIG06ICJpc1NhZmVJbnRlZ2VyIiwKICAgICAgazogImlzU2FmZUludGVnZXIiLAogICAgICBoYXNoOiAiaGFzaCIKICAgIH0pOwogICAgY29uc3QgeyBwLCBrLCBtLCBoYXNoOiBoYXNoMywgZXhwYW5kLCBEU1Q6IF9EU1QgfSA9IG9wdGlvbnM7CiAgICBhYnl0ZXMobXNnKTsKICAgIGFudW0oY291bnQpOwogICAgY29uc3QgRFNUID0gdHlwZW9mIF9EU1QgPT09ICJzdHJpbmciID8gdXRmOFRvQnl0ZXMyKF9EU1QpIDogX0RTVDsKICAgIGNvbnN0IGxvZzJwID0gcC50b1N0cmluZygyKS5sZW5ndGg7CiAgICBjb25zdCBMID0gTWF0aC5jZWlsKChsb2cycCArIGspIC8gOCk7CiAgICBjb25zdCBsZW5faW5fYnl0ZXMgPSBjb3VudCAqIG0gKiBMOwogICAgbGV0IHByYjsKICAgIGlmIChleHBhbmQgPT09ICJ4bWQiKSB7CiAgICAgIHByYiA9IGV4cGFuZF9tZXNzYWdlX3htZChtc2csIERTVCwgbGVuX2luX2J5dGVzLCBoYXNoMyk7CiAgICB9IGVsc2UgaWYgKGV4cGFuZCA9PT0gInhvZiIpIHsKICAgICAgcHJiID0gZXhwYW5kX21lc3NhZ2VfeG9mKG1zZywgRFNULCBsZW5faW5fYnl0ZXMsIGssIGhhc2gzKTsKICAgIH0gZWxzZSBpZiAoZXhwYW5kID09PSAiX2ludGVybmFsX3Bhc3MiKSB7CiAgICAgIHByYiA9IG1zZzsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwYW5kIG11c3QgYmUgInhtZCIgb3IgInhvZiInKTsKICAgIH0KICAgIGNvbnN0IHUgPSBuZXcgQXJyYXkoY291bnQpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGNvbnN0IGUgPSBuZXcgQXJyYXkobSk7CiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbTsgaisrKSB7CiAgICAgICAgY29uc3QgZWxtX29mZnNldCA9IEwgKiAoaiArIGkgKiBtKTsKICAgICAgICBjb25zdCB0diA9IHByYi5zdWJhcnJheShlbG1fb2Zmc2V0LCBlbG1fb2Zmc2V0ICsgTCk7CiAgICAgICAgZVtqXSA9IG1vZChvczJpcCh0diksIHApOwogICAgICB9CiAgICAgIHVbaV0gPSBlOwogICAgfQogICAgcmV0dXJuIHU7CiAgfQogIGZ1bmN0aW9uIGlzb2dlbnlNYXAoZmllbGQsIG1hcCkgewogICAgY29uc3QgQ09FRkYgPSBtYXAubWFwKChpKSA9PiBBcnJheS5mcm9tKGkpLnJldmVyc2UoKSk7CiAgICByZXR1cm4gKHgsIHkpID0+IHsKICAgICAgY29uc3QgW3hOdW0sIHhEZW4sIHlOdW0sIHlEZW5dID0gQ09FRkYubWFwKCh2YWwpID0+IHZhbC5yZWR1Y2UoKGFjYywgaSkgPT4gZmllbGQuYWRkKGZpZWxkLm11bChhY2MsIHgpLCBpKSkpOwogICAgICB4ID0gZmllbGQuZGl2KHhOdW0sIHhEZW4pOwogICAgICB5ID0gZmllbGQubXVsKHksIGZpZWxkLmRpdih5TnVtLCB5RGVuKSk7CiAgICAgIHJldHVybiB7IHgsIHkgfTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIGNyZWF0ZUhhc2hlcihQb2ludDIsIG1hcFRvQ3VydmUsIGRlZikgewogICAgaWYgKHR5cGVvZiBtYXBUb0N1cnZlICE9PSAiZnVuY3Rpb24iKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIm1hcFRvQ3VydmUoKSBtdXN0IGJlIGRlZmluZWQiKTsKICAgIHJldHVybiB7CiAgICAgIC8vIEVuY29kZXMgYnl0ZSBzdHJpbmcgdG8gZWxsaXB0aWMgY3VydmUuCiAgICAgIC8vIGhhc2hfdG9fY3VydmUgZnJvbSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTMKICAgICAgaGFzaFRvQ3VydmUobXNnLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgdSA9IGhhc2hfdG9fZmllbGQobXNnLCAyLCB7IC4uLmRlZiwgRFNUOiBkZWYuRFNULCAuLi5vcHRpb25zIH0pOwogICAgICAgIGNvbnN0IHUwID0gUG9pbnQyLmZyb21BZmZpbmUobWFwVG9DdXJ2ZSh1WzBdKSk7CiAgICAgICAgY29uc3QgdTEgPSBQb2ludDIuZnJvbUFmZmluZShtYXBUb0N1cnZlKHVbMV0pKTsKICAgICAgICBjb25zdCBQID0gdTAuYWRkKHUxKS5jbGVhckNvZmFjdG9yKCk7CiAgICAgICAgUC5hc3NlcnRWYWxpZGl0eSgpOwogICAgICAgIHJldHVybiBQOwogICAgICB9LAogICAgICAvLyBFbmNvZGVzIGJ5dGUgc3RyaW5nIHRvIGVsbGlwdGljIGN1cnZlLgogICAgICAvLyBlbmNvZGVfdG9fY3VydmUgZnJvbSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTMKICAgICAgZW5jb2RlVG9DdXJ2ZShtc2csIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCB1ID0gaGFzaF90b19maWVsZChtc2csIDEsIHsgLi4uZGVmLCBEU1Q6IGRlZi5lbmNvZGVEU1QsIC4uLm9wdGlvbnMgfSk7CiAgICAgICAgY29uc3QgUCA9IFBvaW50Mi5mcm9tQWZmaW5lKG1hcFRvQ3VydmUodVswXSkpLmNsZWFyQ29mYWN0b3IoKTsKICAgICAgICBQLmFzc2VydFZhbGlkaXR5KCk7CiAgICAgICAgcmV0dXJuIFA7CiAgICAgIH0KICAgIH07CiAgfQogIHZhciBvczJpcDsKICB2YXIgaW5pdF9oYXNoX3RvX2N1cnZlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC9oYXNoLXRvLWN1cnZlLmpzIigpIHsKICAgICAgaW5pdF9tb2R1bGFyKCk7CiAgICAgIGluaXRfdXRpbHM0KCk7CiAgICAgIG9zMmlwID0gYnl0ZXNUb051bWJlckJFOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vaG1hYy5qcwogIHZhciBITUFDLCBobWFjOwogIHZhciBpbml0X2htYWMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL2htYWMuanMiKCkgewogICAgICBpbml0X2Fzc2VydCgpOwogICAgICBpbml0X3V0aWxzMigpOwogICAgICBITUFDID0gY2xhc3MgZXh0ZW5kcyBIYXNoIHsKICAgICAgICBjb25zdHJ1Y3RvcihoYXNoMywgX2tleSkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIHRoaXMuZmluaXNoZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7CiAgICAgICAgICBoYXNoKGhhc2gzKTsKICAgICAgICAgIGNvbnN0IGtleSA9IHRvQnl0ZXMyKF9rZXkpOwogICAgICAgICAgdGhpcy5pSGFzaCA9IGhhc2gzLmNyZWF0ZSgpOwogICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlIYXNoLnVwZGF0ZSAhPT0gImZ1bmN0aW9uIikKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBpbnN0YW5jZSBvZiBjbGFzcyB3aGljaCBleHRlbmRzIHV0aWxzLkhhc2giKTsKICAgICAgICAgIHRoaXMuYmxvY2tMZW4gPSB0aGlzLmlIYXNoLmJsb2NrTGVuOwogICAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSB0aGlzLmlIYXNoLm91dHB1dExlbjsKICAgICAgICAgIGNvbnN0IGJsb2NrTGVuID0gdGhpcy5ibG9ja0xlbjsKICAgICAgICAgIGNvbnN0IHBhZDIgPSBuZXcgVWludDhBcnJheShibG9ja0xlbik7CiAgICAgICAgICBwYWQyLnNldChrZXkubGVuZ3RoID4gYmxvY2tMZW4gPyBoYXNoMy5jcmVhdGUoKS51cGRhdGUoa2V5KS5kaWdlc3QoKSA6IGtleSk7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZDIubGVuZ3RoOyBpKyspCiAgICAgICAgICAgIHBhZDJbaV0gXj0gNTQ7CiAgICAgICAgICB0aGlzLmlIYXNoLnVwZGF0ZShwYWQyKTsKICAgICAgICAgIHRoaXMub0hhc2ggPSBoYXNoMy5jcmVhdGUoKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFkMi5sZW5ndGg7IGkrKykKICAgICAgICAgICAgcGFkMltpXSBePSA1NCBeIDkyOwogICAgICAgICAgdGhpcy5vSGFzaC51cGRhdGUocGFkMik7CiAgICAgICAgICBwYWQyLmZpbGwoMCk7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZShidWYpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzKTsKICAgICAgICAgIHRoaXMuaUhhc2gudXBkYXRlKGJ1Zik7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgZGlnZXN0SW50byhvdXQpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzKTsKICAgICAgICAgIGJ5dGVzKG91dCwgdGhpcy5vdXRwdXRMZW4pOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IHRydWU7CiAgICAgICAgICB0aGlzLmlIYXNoLmRpZ2VzdEludG8ob3V0KTsKICAgICAgICAgIHRoaXMub0hhc2gudXBkYXRlKG91dCk7CiAgICAgICAgICB0aGlzLm9IYXNoLmRpZ2VzdEludG8ob3V0KTsKICAgICAgICAgIHRoaXMuZGVzdHJveSgpOwogICAgICAgIH0KICAgICAgICBkaWdlc3QoKSB7CiAgICAgICAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheSh0aGlzLm9IYXNoLm91dHB1dExlbik7CiAgICAgICAgICB0aGlzLmRpZ2VzdEludG8ob3V0KTsKICAgICAgICAgIHJldHVybiBvdXQ7CiAgICAgICAgfQogICAgICAgIF9jbG9uZUludG8odG8pIHsKICAgICAgICAgIHRvIHx8ICh0byA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLCB7fSkpOwogICAgICAgICAgY29uc3QgeyBvSGFzaCwgaUhhc2gsIGZpbmlzaGVkLCBkZXN0cm95ZWQsIGJsb2NrTGVuLCBvdXRwdXRMZW4gfSA9IHRoaXM7CiAgICAgICAgICB0byA9IHRvOwogICAgICAgICAgdG8uZmluaXNoZWQgPSBmaW5pc2hlZDsKICAgICAgICAgIHRvLmRlc3Ryb3llZCA9IGRlc3Ryb3llZDsKICAgICAgICAgIHRvLmJsb2NrTGVuID0gYmxvY2tMZW47CiAgICAgICAgICB0by5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0by5vSGFzaCA9IG9IYXNoLl9jbG9uZUludG8odG8ub0hhc2gpOwogICAgICAgICAgdG8uaUhhc2ggPSBpSGFzaC5fY2xvbmVJbnRvKHRvLmlIYXNoKTsKICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICB9CiAgICAgICAgZGVzdHJveSgpIHsKICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMub0hhc2guZGVzdHJveSgpOwogICAgICAgICAgdGhpcy5pSGFzaC5kZXN0cm95KCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBobWFjID0gKGhhc2gzLCBrZXksIG1lc3NhZ2UpID0+IG5ldyBITUFDKGhhc2gzLCBrZXkpLnVwZGF0ZShtZXNzYWdlKS5kaWdlc3QoKTsKICAgICAgaG1hYy5jcmVhdGUgPSAoaGFzaDMsIGtleSkgPT4gbmV3IEhNQUMoaGFzaDMsIGtleSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9fc2hvcnR3X3V0aWxzLmpzCiAgZnVuY3Rpb24gZ2V0SGFzaChoYXNoMykgewogICAgcmV0dXJuIHsKICAgICAgaGFzaDogaGFzaDMsCiAgICAgIGhtYWM6IChrZXksIC4uLm1zZ3MpID0+IGhtYWMoaGFzaDMsIGtleSwgY29uY2F0Qnl0ZXMoLi4ubXNncykpLAogICAgICByYW5kb21CeXRlcwogICAgfTsKICB9CiAgZnVuY3Rpb24gY3JlYXRlQ3VydmUoY3VydmVEZWYsIGRlZkhhc2gpIHsKICAgIGNvbnN0IGNyZWF0ZSA9IChoYXNoMykgPT4gd2VpZXJzdHJhc3MoeyAuLi5jdXJ2ZURlZiwgLi4uZ2V0SGFzaChoYXNoMykgfSk7CiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLmNyZWF0ZShkZWZIYXNoKSwgY3JlYXRlIH0pOwogIH0KICB2YXIgaW5pdF9zaG9ydHdfdXRpbHMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL19zaG9ydHdfdXRpbHMuanMiKCkgewogICAgICBpbml0X2htYWMoKTsKICAgICAgaW5pdF91dGlsczIoKTsKICAgICAgaW5pdF93ZWllcnN0cmFzcygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vc2VjcDI1NmsxLmpzCiAgdmFyIHNlY3AyNTZrMV9leHBvcnRzID0ge307CiAgX19leHBvcnQoc2VjcDI1NmsxX2V4cG9ydHMsIHsKICAgIGVuY29kZVRvQ3VydmU6ICgpID0+IGVuY29kZVRvQ3VydmUsCiAgICBoYXNoVG9DdXJ2ZTogKCkgPT4gaGFzaFRvQ3VydmUsCiAgICBzY2hub3JyOiAoKSA9PiBzY2hub3JyLAogICAgc2VjcDI1NmsxOiAoKSA9PiBzZWNwMjU2azEKICB9KTsKICBmdW5jdGlvbiBzcXJ0TW9kKHkpIHsKICAgIGNvbnN0IFAgPSBzZWNwMjU2azFQOwogICAgY29uc3QgXzNuMyA9IEJpZ0ludCgzKSwgXzZuID0gQmlnSW50KDYpLCBfMTFuID0gQmlnSW50KDExKSwgXzIybiA9IEJpZ0ludCgyMik7CiAgICBjb25zdCBfMjNuID0gQmlnSW50KDIzKSwgXzQ0biA9IEJpZ0ludCg0NCksIF84OG4gPSBCaWdJbnQoODgpOwogICAgY29uc3QgYjIgPSB5ICogeSAqIHkgJSBQOwogICAgY29uc3QgYjMyID0gYjIgKiBiMiAqIHkgJSBQOwogICAgY29uc3QgYjYgPSBwb3cyKGIzMiwgXzNuMywgUCkgKiBiMzIgJSBQOwogICAgY29uc3QgYjkgPSBwb3cyKGI2LCBfM24zLCBQKSAqIGIzMiAlIFA7CiAgICBjb25zdCBiMTEgPSBwb3cyKGI5LCBfMm41LCBQKSAqIGIyICUgUDsKICAgIGNvbnN0IGIyMiA9IHBvdzIoYjExLCBfMTFuLCBQKSAqIGIxMSAlIFA7CiAgICBjb25zdCBiNDQgPSBwb3cyKGIyMiwgXzIybiwgUCkgKiBiMjIgJSBQOwogICAgY29uc3QgYjg4ID0gcG93MihiNDQsIF80NG4sIFApICogYjQ0ICUgUDsKICAgIGNvbnN0IGIxNzYgPSBwb3cyKGI4OCwgXzg4biwgUCkgKiBiODggJSBQOwogICAgY29uc3QgYjIyMCA9IHBvdzIoYjE3NiwgXzQ0biwgUCkgKiBiNDQgJSBQOwogICAgY29uc3QgYjIyMyA9IHBvdzIoYjIyMCwgXzNuMywgUCkgKiBiMzIgJSBQOwogICAgY29uc3QgdDEgPSBwb3cyKGIyMjMsIF8yM24sIFApICogYjIyICUgUDsKICAgIGNvbnN0IHQyID0gcG93Mih0MSwgXzZuLCBQKSAqIGIyICUgUDsKICAgIGNvbnN0IHJvb3QyID0gcG93Mih0MiwgXzJuNSwgUCk7CiAgICBpZiAoIUZwLmVxbChGcC5zcXIocm9vdDIpLCB5KSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpOwogICAgcmV0dXJuIHJvb3QyOwogIH0KICBmdW5jdGlvbiB0YWdnZWRIYXNoKHRhZywgLi4ubWVzc2FnZXMpIHsKICAgIGxldCB0YWdQID0gVEFHR0VEX0hBU0hfUFJFRklYRVNbdGFnXTsKICAgIGlmICh0YWdQID09PSB2b2lkIDApIHsKICAgICAgY29uc3QgdGFnSCA9IHNoYTI1NihVaW50OEFycmF5LmZyb20odGFnLCAoYykgPT4gYy5jaGFyQ29kZUF0KDApKSk7CiAgICAgIHRhZ1AgPSBjb25jYXRCeXRlczModGFnSCwgdGFnSCk7CiAgICAgIFRBR0dFRF9IQVNIX1BSRUZJWEVTW3RhZ10gPSB0YWdQOwogICAgfQogICAgcmV0dXJuIHNoYTI1Nihjb25jYXRCeXRlczModGFnUCwgLi4ubWVzc2FnZXMpKTsKICB9CiAgZnVuY3Rpb24gc2Nobm9yckdldEV4dFB1YktleShwcml2KSB7CiAgICBsZXQgZF8gPSBzZWNwMjU2azEudXRpbHMubm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2KTsKICAgIGxldCBwID0gUG9pbnQuZnJvbVByaXZhdGVLZXkoZF8pOwogICAgY29uc3Qgc2NhbGFyID0gcC5oYXNFdmVuWSgpID8gZF8gOiBtb2ROKC1kXyk7CiAgICByZXR1cm4geyBzY2FsYXIsIGJ5dGVzOiBwb2ludFRvQnl0ZXMocCkgfTsKICB9CiAgZnVuY3Rpb24gbGlmdF94KHgpIHsKICAgIGlmICghZmUoeCkpCiAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHg6IG5lZWQgMCA8IHggPCBwIik7CiAgICBjb25zdCB4eCA9IG1vZFAoeCAqIHgpOwogICAgY29uc3QgYyA9IG1vZFAoeHggKiB4ICsgQmlnSW50KDcpKTsKICAgIGxldCB5ID0gc3FydE1vZChjKTsKICAgIGlmICh5ICUgXzJuNSAhPT0gXzBuNikKICAgICAgeSA9IG1vZFAoLXkpOwogICAgY29uc3QgcCA9IG5ldyBQb2ludCh4LCB5LCBfMW42KTsKICAgIHAuYXNzZXJ0VmFsaWRpdHkoKTsKICAgIHJldHVybiBwOwogIH0KICBmdW5jdGlvbiBjaGFsbGVuZ2UoLi4uYXJncykgewogICAgcmV0dXJuIG1vZE4oYnl0ZXNUb051bWJlckJFKHRhZ2dlZEhhc2goIkJJUDAzNDAvY2hhbGxlbmdlIiwgLi4uYXJncykpKTsKICB9CiAgZnVuY3Rpb24gc2Nobm9yckdldFB1YmxpY0tleShwcml2YXRlS2V5KSB7CiAgICByZXR1cm4gc2Nobm9yckdldEV4dFB1YktleShwcml2YXRlS2V5KS5ieXRlczsKICB9CiAgZnVuY3Rpb24gc2Nobm9yclNpZ24obWVzc2FnZSwgcHJpdmF0ZUtleSwgYXV4UmFuZCA9IHJhbmRvbUJ5dGVzKDMyKSkgewogICAgY29uc3QgbSA9IGVuc3VyZUJ5dGVzKCJtZXNzYWdlIiwgbWVzc2FnZSk7CiAgICBjb25zdCB7IGJ5dGVzOiBweCwgc2NhbGFyOiBkIH0gPSBzY2hub3JyR2V0RXh0UHViS2V5KHByaXZhdGVLZXkpOwogICAgY29uc3QgYSA9IGVuc3VyZUJ5dGVzKCJhdXhSYW5kIiwgYXV4UmFuZCwgMzIpOwogICAgY29uc3QgdCA9IG51bVRvMzJiKGQgXiBieXRlc1RvTnVtYmVyQkUodGFnZ2VkSGFzaCgiQklQMDM0MC9hdXgiLCBhKSkpOwogICAgY29uc3QgcmFuZCA9IHRhZ2dlZEhhc2goIkJJUDAzNDAvbm9uY2UiLCB0LCBweCwgbSk7CiAgICBjb25zdCBrXyA9IG1vZE4oYnl0ZXNUb051bWJlckJFKHJhbmQpKTsKICAgIGlmIChrXyA9PT0gXzBuNikKICAgICAgdGhyb3cgbmV3IEVycm9yKCJzaWduIGZhaWxlZDogayBpcyB6ZXJvIik7CiAgICBjb25zdCB7IGJ5dGVzOiByeCwgc2NhbGFyOiBrIH0gPSBzY2hub3JyR2V0RXh0UHViS2V5KGtfKTsKICAgIGNvbnN0IGUgPSBjaGFsbGVuZ2UocngsIHB4LCBtKTsKICAgIGNvbnN0IHNpZyA9IG5ldyBVaW50OEFycmF5KDY0KTsKICAgIHNpZy5zZXQocngsIDApOwogICAgc2lnLnNldChudW1UbzMyYihtb2ROKGsgKyBlICogZCkpLCAzMik7CiAgICBpZiAoIXNjaG5vcnJWZXJpZnkoc2lnLCBtLCBweCkpCiAgICAgIHRocm93IG5ldyBFcnJvcigic2lnbjogSW52YWxpZCBzaWduYXR1cmUgcHJvZHVjZWQiKTsKICAgIHJldHVybiBzaWc7CiAgfQogIGZ1bmN0aW9uIHNjaG5vcnJWZXJpZnkoc2lnbmF0dXJlLCBtZXNzYWdlLCBwdWJsaWNLZXkpIHsKICAgIGNvbnN0IHNpZyA9IGVuc3VyZUJ5dGVzKCJzaWduYXR1cmUiLCBzaWduYXR1cmUsIDY0KTsKICAgIGNvbnN0IG0gPSBlbnN1cmVCeXRlcygibWVzc2FnZSIsIG1lc3NhZ2UpOwogICAgY29uc3QgcHViID0gZW5zdXJlQnl0ZXMoInB1YmxpY0tleSIsIHB1YmxpY0tleSwgMzIpOwogICAgdHJ5IHsKICAgICAgY29uc3QgUCA9IGxpZnRfeChieXRlc1RvTnVtYmVyQkUocHViKSk7CiAgICAgIGNvbnN0IHIgPSBieXRlc1RvTnVtYmVyQkUoc2lnLnN1YmFycmF5KDAsIDMyKSk7CiAgICAgIGlmICghZmUocikpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBjb25zdCBzID0gYnl0ZXNUb051bWJlckJFKHNpZy5zdWJhcnJheSgzMiwgNjQpKTsKICAgICAgaWYgKCFnZShzKSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGNvbnN0IGUgPSBjaGFsbGVuZ2UobnVtVG8zMmIociksIHBvaW50VG9CeXRlcyhQKSwgbSk7CiAgICAgIGNvbnN0IFIgPSBHbXVsQWRkKFAsIHMsIG1vZE4oLWUpKTsKICAgICAgaWYgKCFSIHx8ICFSLmhhc0V2ZW5ZKCkgfHwgUi50b0FmZmluZSgpLnggIT09IHIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgdmFyIHNlY3AyNTZrMVAsIHNlY3AyNTZrMU4sIF8xbjYsIF8ybjUsIGRpdk5lYXJlc3QsIEZwLCBzZWNwMjU2azEsIF8wbjYsIGZlLCBnZSwgVEFHR0VEX0hBU0hfUFJFRklYRVMsIHBvaW50VG9CeXRlcywgbnVtVG8zMmIsIG1vZFAsIG1vZE4sIFBvaW50LCBHbXVsQWRkLCBzY2hub3JyLCBpc29NYXAsIG1hcFNXVSwgaHRmLCBoYXNoVG9DdXJ2ZSwgZW5jb2RlVG9DdXJ2ZTsKICB2YXIgaW5pdF9zZWNwMjU2azEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL3NlY3AyNTZrMS5qcyIoKSB7CiAgICAgIGluaXRfc2hhMjU2KCk7CiAgICAgIGluaXRfdXRpbHMyKCk7CiAgICAgIGluaXRfbW9kdWxhcigpOwogICAgICBpbml0X3dlaWVyc3RyYXNzKCk7CiAgICAgIGluaXRfdXRpbHM0KCk7CiAgICAgIGluaXRfaGFzaF90b19jdXJ2ZSgpOwogICAgICBpbml0X3Nob3J0d191dGlscygpOwogICAgICBzZWNwMjU2azFQID0gQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlZmZmZmZjMmYiKTsKICAgICAgc2VjcDI1NmsxTiA9IEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWJhYWVkY2U2YWY0OGEwM2JiZmQyNWU4Y2QwMzY0MTQxIik7CiAgICAgIF8xbjYgPSBCaWdJbnQoMSk7CiAgICAgIF8ybjUgPSBCaWdJbnQoMik7CiAgICAgIGRpdk5lYXJlc3QgPSAoYSwgYikgPT4gKGEgKyBiIC8gXzJuNSkgLyBiOwogICAgICBGcCA9IEZpZWxkKHNlY3AyNTZrMVAsIHZvaWQgMCwgdm9pZCAwLCB7IHNxcnQ6IHNxcnRNb2QgfSk7CiAgICAgIHNlY3AyNTZrMSA9IGNyZWF0ZUN1cnZlKHsKICAgICAgICBhOiBCaWdJbnQoMCksCiAgICAgICAgLy8gZXF1YXRpb24gcGFyYW1zOiBhLCBiCiAgICAgICAgYjogQmlnSW50KDcpLAogICAgICAgIC8vIFNlZW0gdG8gYmUgcmlnaWQ6IGJpdGNvaW50YWxrLm9yZy9pbmRleC5waHA/dG9waWM9Mjg5Nzk1Lm1zZzMxODM5NzUjbXNnMzE4Mzk3NQogICAgICAgIEZwLAogICAgICAgIC8vIEZpZWxkJ3MgcHJpbWU6IDJuKioyNTZuIC0gMm4qKjMybiAtIDJuKio5biAtIDJuKio4biAtIDJuKio3biAtIDJuKio2biAtIDJuKio0biAtIDFuCiAgICAgICAgbjogc2VjcDI1NmsxTiwKICAgICAgICAvLyBDdXJ2ZSBvcmRlciwgdG90YWwgY291bnQgb2YgdmFsaWQgcG9pbnRzIGluIHRoZSBmaWVsZAogICAgICAgIC8vIEJhc2UgcG9pbnQgKHgsIHkpIGFrYSBnZW5lcmF0b3IgcG9pbnQKICAgICAgICBHeDogQmlnSW50KCI1NTA2NjI2MzAyMjI3NzM0MzY2OTU3ODcxODg5NTE2ODUzNDMyNjI1MDYwMzQ1Mzc3NzU5NDE3NTUwMDE4NzM2MDM4OTExNjcyOTI0MCIpLAogICAgICAgIEd5OiBCaWdJbnQoIjMyNjcwNTEwMDIwNzU4ODE2OTc4MDgzMDg1MTMwNTA3MDQzMTg0NDcxMjczMzgwNjU5MjQzMjc1OTM4OTA0MzM1NzU3MzM3NDgyNDI0IiksCiAgICAgICAgaDogQmlnSW50KDEpLAogICAgICAgIC8vIENvZmFjdG9yCiAgICAgICAgbG93UzogdHJ1ZSwKICAgICAgICAvLyBBbGxvdyBvbmx5IGxvdy1TIHNpZ25hdHVyZXMgYnkgZGVmYXVsdCBpbiBzaWduKCkgYW5kIHZlcmlmeSgpCiAgICAgICAgLyoqCiAgICAgICAgICogc2VjcDI1NmsxIGJlbG9uZ3MgdG8gS29ibGl0eiBjdXJ2ZXM6IGl0IGhhcyBlZmZpY2llbnRseSBjb21wdXRhYmxlIGVuZG9tb3JwaGlzbS4KICAgICAgICAgKiBFbmRvbW9ycGhpc20gdXNlcyAyeCBsZXNzIFJBTSwgc3BlZWRzIHVwIHByZWNvbXB1dGF0aW9uIGJ5IDJ4IGFuZCBFQ0RIIC8ga2V5IHJlY292ZXJ5IGJ5IDIwJS4KICAgICAgICAgKiBGb3IgcHJlY29tcHV0ZWQgd05BRiBpdCB0cmFkZXMgb2ZmIDEvMiBpbml0IHRpbWUgJiAxLzMgcmFtIGZvciAyMCUgcGVyZiBoaXQuCiAgICAgICAgICogRXhwbGFuYXRpb246IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3BhdWxtaWxsci9lYjY3MDgwNjc5M2U4NGRmNjI4YTdjNDM0YTg3MzA2NgogICAgICAgICAqLwogICAgICAgIGVuZG86IHsKICAgICAgICAgIGJldGE6IEJpZ0ludCgiMHg3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIiksCiAgICAgICAgICBzcGxpdFNjYWxhcjogKGspID0+IHsKICAgICAgICAgICAgY29uc3QgbiA9IHNlY3AyNTZrMU47CiAgICAgICAgICAgIGNvbnN0IGExID0gQmlnSW50KCIweDMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1Iik7CiAgICAgICAgICAgIGNvbnN0IGIxID0gLV8xbjYgKiBCaWdJbnQoIjB4ZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMiKTsKICAgICAgICAgICAgY29uc3QgYTIgPSBCaWdJbnQoIjB4MTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4Iik7CiAgICAgICAgICAgIGNvbnN0IGIyID0gYTE7CiAgICAgICAgICAgIGNvbnN0IFBPV18yXzEyOCA9IEJpZ0ludCgiMHgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKTsKICAgICAgICAgICAgY29uc3QgYzEgPSBkaXZOZWFyZXN0KGIyICogaywgbik7CiAgICAgICAgICAgIGNvbnN0IGMyID0gZGl2TmVhcmVzdCgtYjEgKiBrLCBuKTsKICAgICAgICAgICAgbGV0IGsxID0gbW9kKGsgLSBjMSAqIGExIC0gYzIgKiBhMiwgbik7CiAgICAgICAgICAgIGxldCBrMiA9IG1vZCgtYzEgKiBiMSAtIGMyICogYjIsIG4pOwogICAgICAgICAgICBjb25zdCBrMW5lZyA9IGsxID4gUE9XXzJfMTI4OwogICAgICAgICAgICBjb25zdCBrMm5lZyA9IGsyID4gUE9XXzJfMTI4OwogICAgICAgICAgICBpZiAoazFuZWcpCiAgICAgICAgICAgICAgazEgPSBuIC0gazE7CiAgICAgICAgICAgIGlmIChrMm5lZykKICAgICAgICAgICAgICBrMiA9IG4gLSBrMjsKICAgICAgICAgICAgaWYgKGsxID4gUE9XXzJfMTI4IHx8IGsyID4gUE9XXzJfMTI4KSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJzcGxpdFNjYWxhcjogRW5kb21vcnBoaXNtIGZhaWxlZCwgaz0iICsgayk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHsgazFuZWcsIGsxLCBrMm5lZywgazIgfTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sIHNoYTI1Nik7CiAgICAgIF8wbjYgPSBCaWdJbnQoMCk7CiAgICAgIGZlID0gKHgpID0+IHR5cGVvZiB4ID09PSAiYmlnaW50IiAmJiBfMG42IDwgeCAmJiB4IDwgc2VjcDI1NmsxUDsKICAgICAgZ2UgPSAoeCkgPT4gdHlwZW9mIHggPT09ICJiaWdpbnQiICYmIF8wbjYgPCB4ICYmIHggPCBzZWNwMjU2azFOOwogICAgICBUQUdHRURfSEFTSF9QUkVGSVhFUyA9IHt9OwogICAgICBwb2ludFRvQnl0ZXMgPSAocG9pbnQpID0+IHBvaW50LnRvUmF3Qnl0ZXModHJ1ZSkuc2xpY2UoMSk7CiAgICAgIG51bVRvMzJiID0gKG4pID0+IG51bWJlclRvQnl0ZXNCRShuLCAzMik7CiAgICAgIG1vZFAgPSAoeCkgPT4gbW9kKHgsIHNlY3AyNTZrMVApOwogICAgICBtb2ROID0gKHgpID0+IG1vZCh4LCBzZWNwMjU2azFOKTsKICAgICAgUG9pbnQgPSBzZWNwMjU2azEuUHJvamVjdGl2ZVBvaW50OwogICAgICBHbXVsQWRkID0gKFEsIGEsIGIpID0+IFBvaW50LkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoUSwgYSwgYik7CiAgICAgIHNjaG5vcnIgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+ICh7CiAgICAgICAgZ2V0UHVibGljS2V5OiBzY2hub3JyR2V0UHVibGljS2V5LAogICAgICAgIHNpZ246IHNjaG5vcnJTaWduLAogICAgICAgIHZlcmlmeTogc2Nobm9yclZlcmlmeSwKICAgICAgICB1dGlsczogewogICAgICAgICAgcmFuZG9tUHJpdmF0ZUtleTogc2VjcDI1NmsxLnV0aWxzLnJhbmRvbVByaXZhdGVLZXksCiAgICAgICAgICBsaWZ0X3gsCiAgICAgICAgICBwb2ludFRvQnl0ZXMsCiAgICAgICAgICBudW1iZXJUb0J5dGVzQkUsCiAgICAgICAgICBieXRlc1RvTnVtYmVyQkUsCiAgICAgICAgICB0YWdnZWRIYXNoLAogICAgICAgICAgbW9kCiAgICAgICAgfQogICAgICB9KSkoKTsKICAgICAgaXNvTWFwID0gLyogQF9fUFVSRV9fICovICgoKSA9PiBpc29nZW55TWFwKEZwLCBbCiAgICAgICAgLy8geE51bQogICAgICAgIFsKICAgICAgICAgICIweDhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhkYWFhYWE4YzciLAogICAgICAgICAgIjB4N2QzZDRjODBiYzMyMWQ1YjlmMzE1Y2VhN2ZkNDRjNWQ1OTVkMmZjMGJmNjNiOTJkZmZmMTA0NGYxN2M2NTgxIiwKICAgICAgICAgICIweDUzNGMzMjhkMjNmMjM0ZTZlMmE0MTNkZWNhMjVjYWVjZTQ1MDYxNDQwMzdjNDAzMTRlY2JkMGI1M2Q5ZGQyNjIiLAogICAgICAgICAgIjB4OGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGRhYWFhYTg4YyIKICAgICAgICBdLAogICAgICAgIC8vIHhEZW4KICAgICAgICBbCiAgICAgICAgICAiMHhkMzU3NzExOTNkOTQ5MThhOWNhMzRjY2JiN2I2NDBkZDg2Y2Q0MDk1NDJmODQ4N2Q5ZmU2Yjc0NTc4MWViNDliIiwKICAgICAgICAgICIweGVkYWRjNmY2NDM4M2RjMWRmN2M0YjJkNTFiNTQyMjU0MDZkMzZiNjQxZjVlNDFiYmM1MmE1NjYxMmE4YzZkMTQiLAogICAgICAgICAgIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIKICAgICAgICAgIC8vIExBU1QgMQogICAgICAgIF0sCiAgICAgICAgLy8geU51bQogICAgICAgIFsKICAgICAgICAgICIweDRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiOGUzOGUyM2MiLAogICAgICAgICAgIjB4Yzc1ZTBjMzJkNWNiN2MwZmE5ZDBhNTRiMTJhMGE2ZDU2NDdhYjA0NmQ2ODZkYTZmZGZmYzkwZmMyMDFkNzFhMyIsCiAgICAgICAgICAiMHgyOWE2MTk0NjkxZjkxYTczNzE1MjA5ZWY2NTEyZTU3NjcyMjgzMGEyMDFiZTIwMThhNzY1ZTg1YTllY2VlOTMxIiwKICAgICAgICAgICIweDJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmMzhlMzhkODQiCiAgICAgICAgXSwKICAgICAgICAvLyB5RGVuCiAgICAgICAgWwogICAgICAgICAgIjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZjkzYiIsCiAgICAgICAgICAiMHg3YTA2NTM0YmI4YmRiNDlmZDVlOWU2NjMyNzIyYzI5ODk0NjdjMWJmYzhlOGQ5NzhkZmI0MjVkMjY4NWMyNTczIiwKICAgICAgICAgICIweDY0ODRhYTcxNjU0NWNhMmNmM2E3MGMzZmE4ZmUzMzdlMGEzZDIxMTYyZjBkNjI5OWE3YmY4MTkyYmZkMmE3NmYiLAogICAgICAgICAgIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIKICAgICAgICAgIC8vIExBU1QgMQogICAgICAgIF0KICAgICAgXS5tYXAoKGkpID0+IGkubWFwKChqKSA9PiBCaWdJbnQoaikpKSkpKCk7CiAgICAgIG1hcFNXVSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gbWFwVG9DdXJ2ZVNpbXBsZVNXVShGcCwgewogICAgICAgIEE6IEJpZ0ludCgiMHgzZjg3MzFhYmRkNjYxYWRjYTA4YTU1NThmMGY1ZDI3MmU5NTNkMzYzY2I2ZjBlNWQ0MDU0NDdjMDFhNDQ0NTMzIiksCiAgICAgICAgQjogQmlnSW50KCIxNzcxIiksCiAgICAgICAgWjogRnAuY3JlYXRlKEJpZ0ludCgiLTExIikpCiAgICAgIH0pKSgpOwogICAgICBodGYgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IGNyZWF0ZUhhc2hlcihzZWNwMjU2azEuUHJvamVjdGl2ZVBvaW50LCAoc2NhbGFycykgPT4gewogICAgICAgIGNvbnN0IHsgeCwgeSB9ID0gbWFwU1dVKEZwLmNyZWF0ZShzY2FsYXJzWzBdKSk7CiAgICAgICAgcmV0dXJuIGlzb01hcCh4LCB5KTsKICAgICAgfSwgewogICAgICAgIERTVDogInNlY3AyNTZrMV9YTUQ6U0hBLTI1Nl9TU1dVX1JPXyIsCiAgICAgICAgZW5jb2RlRFNUOiAic2VjcDI1NmsxX1hNRDpTSEEtMjU2X1NTV1VfTlVfIiwKICAgICAgICBwOiBGcC5PUkRFUiwKICAgICAgICBtOiAxLAogICAgICAgIGs6IDEyOCwKICAgICAgICBleHBhbmQ6ICJ4bWQiLAogICAgICAgIGhhc2g6IHNoYTI1NgogICAgICB9KSkoKTsKICAgICAgaGFzaFRvQ3VydmUgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IGh0Zi5oYXNoVG9DdXJ2ZSkoKTsKICAgICAgZW5jb2RlVG9DdXJ2ZSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gaHRmLmVuY29kZVRvQ3VydmUpKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL25vZGUuanMKICB2YXIgRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvciwgRmVlQ2FwVG9vSGlnaEVycm9yLCBGZWVDYXBUb29Mb3dFcnJvciwgTm9uY2VUb29IaWdoRXJyb3IsIE5vbmNlVG9vTG93RXJyb3IsIE5vbmNlTWF4VmFsdWVFcnJvciwgSW5zdWZmaWNpZW50RnVuZHNFcnJvciwgSW50cmluc2ljR2FzVG9vSGlnaEVycm9yLCBJbnRyaW5zaWNHYXNUb29Mb3dFcnJvciwgVHJhbnNhY3Rpb25UeXBlTm90U3VwcG9ydGVkRXJyb3IsIFRpcEFib3ZlRmVlQ2FwRXJyb3IsIFVua25vd25Ob2RlRXJyb3I7CiAgdmFyIGluaXRfbm9kZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9ub2RlLmpzIigpIHsKICAgICAgaW5pdF9mb3JtYXRHd2VpKCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBFeGVjdXRpb25SZXZlcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhdXNlLCBtZXNzYWdlIH0gPSB7fSkgewogICAgICAgICAgY29uc3QgcmVhc29uID0gbWVzc2FnZT8ucmVwbGFjZSgiZXhlY3V0aW9uIHJldmVydGVkOiAiLCAiIik/LnJlcGxhY2UoImV4ZWN1dGlvbiByZXZlcnRlZCIsICIiKTsKICAgICAgICAgIHN1cGVyKGBFeGVjdXRpb24gcmV2ZXJ0ZWQgJHtyZWFzb24gPyBgd2l0aCByZWFzb246ICR7cmVhc29ufWAgOiAiZm9yIGFuIHVua25vd24gcmVhc29uIn0uYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkV4ZWN1dGlvblJldmVydGVkRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeGVjdXRpb25SZXZlcnRlZEVycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogMwogICAgICB9KTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4ZWN1dGlvblJldmVydGVkRXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL2V4ZWN1dGlvbiByZXZlcnRlZC8KICAgICAgfSk7CiAgICAgIEZlZUNhcFRvb0hpZ2hFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgbWF4RmVlUGVyR2FzIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYFRoZSBmZWUgY2FwIChcYG1heEZlZVBlckdhc1xgJHttYXhGZWVQZXJHYXMgPyBgID0gJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9IGd3ZWlgIDogIiJ9KSBjYW5ub3QgYmUgaGlnaGVyIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZSAoMl4yNTYtMSkuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkZlZUNhcFRvb0hpZ2hFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZlZUNhcFRvb0hpZ2hFcnJvciwgIm5vZGVNZXNzYWdlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAvbWF4IGZlZSBwZXIgZ2FzIGhpZ2hlciB0aGFuIDJcXjI1Ni0xfGZlZSBjYXAgaGlnaGVyIHRoYW4gMlxeMjU2LTEvCiAgICAgIH0pOwogICAgICBGZWVDYXBUb29Mb3dFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgbWF4RmVlUGVyR2FzIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYFRoZSBmZWUgY2FwIChcYG1heEZlZVBlckdhc1xgJHttYXhGZWVQZXJHYXMgPyBgID0gJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9YCA6ICIifSBnd2VpKSBjYW5ub3QgYmUgbG93ZXIgdGhhbiB0aGUgYmxvY2sgYmFzZSBmZWUuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkZlZUNhcFRvb0xvd0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmVlQ2FwVG9vTG93RXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL21heCBmZWUgcGVyIGdhcyBsZXNzIHRoYW4gYmxvY2sgYmFzZSBmZWV8ZmVlIGNhcCBsZXNzIHRoYW4gYmxvY2sgYmFzZSBmZWV8dHJhbnNhY3Rpb24gaXMgb3V0ZGF0ZWQvCiAgICAgIH0pOwogICAgICBOb25jZVRvb0hpZ2hFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgbm9uY2UgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihgTm9uY2UgcHJvdmlkZWQgZm9yIHRoZSB0cmFuc2FjdGlvbiAke25vbmNlID8gYCgke25vbmNlfSkgYCA6ICIifWlzIGhpZ2hlciB0aGFuIHRoZSBuZXh0IG9uZSBleHBlY3RlZC5gLCB7IGNhdXNlLCBuYW1lOiAiTm9uY2VUb29IaWdoRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vbmNlVG9vSGlnaEVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC9ub25jZSB0b28gaGlnaC8KICAgICAgfSk7CiAgICAgIE5vbmNlVG9vTG93RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2F1c2UsIG5vbmNlIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgTm9uY2UgcHJvdmlkZWQgZm9yIHRoZSB0cmFuc2FjdGlvbiAke25vbmNlID8gYCgke25vbmNlfSkgYCA6ICIifWlzIGxvd2VyIHRoYW4gdGhlIGN1cnJlbnQgbm9uY2Ugb2YgdGhlIGFjY291bnQuYCwKICAgICAgICAgICAgIlRyeSBpbmNyZWFzaW5nIHRoZSBub25jZSBvciBmaW5kIHRoZSBsYXRlc3Qgbm9uY2Ugd2l0aCBgZ2V0VHJhbnNhY3Rpb25Db3VudGAuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IGNhdXNlLCBuYW1lOiAiTm9uY2VUb29Mb3dFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9uY2VUb29Mb3dFcnJvciwgIm5vZGVNZXNzYWdlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAvbm9uY2UgdG9vIGxvd3x0cmFuc2FjdGlvbiBhbHJlYWR5IGltcG9ydGVkfGFscmVhZHkga25vd24vCiAgICAgIH0pOwogICAgICBOb25jZU1heFZhbHVlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2F1c2UsIG5vbmNlIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYE5vbmNlIHByb3ZpZGVkIGZvciB0aGUgdHJhbnNhY3Rpb24gJHtub25jZSA/IGAoJHtub25jZX0pIGAgOiAiIn1leGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbm9uY2UuYCwgeyBjYXVzZSwgbmFtZTogIk5vbmNlTWF4VmFsdWVFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9uY2VNYXhWYWx1ZUVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC9ub25jZSBoYXMgbWF4IHZhbHVlLwogICAgICB9KTsKICAgICAgSW5zdWZmaWNpZW50RnVuZHNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSB9ID0ge30pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgIlRoZSB0b3RhbCBjb3N0IChnYXMgKiBnYXMgZmVlICsgdmFsdWUpIG9mIGV4ZWN1dGluZyB0aGlzIHRyYW5zYWN0aW9uIGV4Y2VlZHMgdGhlIGJhbGFuY2Ugb2YgdGhlIGFjY291bnQuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAiVGhpcyBlcnJvciBjb3VsZCBhcmlzZSB3aGVuIHRoZSBhY2NvdW50IGRvZXMgbm90IGhhdmUgZW5vdWdoIGZ1bmRzIHRvOiIsCiAgICAgICAgICAgICAgIiAtIHBheSBmb3IgdGhlIHRvdGFsIGdhcyBmZWUsIiwKICAgICAgICAgICAgICAiIC0gcGF5IGZvciB0aGUgdmFsdWUgdG8gc2VuZC4iLAogICAgICAgICAgICAgICIgIiwKICAgICAgICAgICAgICAiVGhlIGNvc3Qgb2YgdGhlIHRyYW5zYWN0aW9uIGlzIGNhbGN1bGF0ZWQgYXMgYGdhcyAqIGdhcyBmZWUgKyB2YWx1ZWAsIHdoZXJlOiIsCiAgICAgICAgICAgICAgIiAtIGBnYXNgIGlzIHRoZSBhbW91bnQgb2YgZ2FzIG5lZWRlZCBmb3IgdHJhbnNhY3Rpb24gdG8gZXhlY3V0ZSwiLAogICAgICAgICAgICAgICIgLSBgZ2FzIGZlZWAgaXMgdGhlIGdhcyBmZWUsIiwKICAgICAgICAgICAgICAiIC0gYHZhbHVlYCBpcyB0aGUgYW1vdW50IG9mIGV0aGVyIHRvIHNlbmQgdG8gdGhlIHJlY2lwaWVudC4iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG5hbWU6ICJJbnN1ZmZpY2llbnRGdW5kc0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5zdWZmaWNpZW50RnVuZHNFcnJvciwgIm5vZGVNZXNzYWdlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAvaW5zdWZmaWNpZW50IGZ1bmRzLwogICAgICB9KTsKICAgICAgSW50cmluc2ljR2FzVG9vSGlnaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhdXNlLCBnYXMgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihgVGhlIGFtb3VudCBvZiBnYXMgJHtnYXMgPyBgKCR7Z2FzfSkgYCA6ICIifXByb3ZpZGVkIGZvciB0aGUgdHJhbnNhY3Rpb24gZXhjZWVkcyB0aGUgbGltaXQgYWxsb3dlZCBmb3IgdGhlIGJsb2NrLmAsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIG5hbWU6ICJJbnRyaW5zaWNHYXNUb29IaWdoRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRyaW5zaWNHYXNUb29IaWdoRXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL2ludHJpbnNpYyBnYXMgdG9vIGhpZ2h8Z2FzIGxpbWl0IHJlYWNoZWQvCiAgICAgIH0pOwogICAgICBJbnRyaW5zaWNHYXNUb29Mb3dFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgZ2FzIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYFRoZSBhbW91bnQgb2YgZ2FzICR7Z2FzID8gYCgke2dhc30pIGAgOiAiIn1wcm92aWRlZCBmb3IgdGhlIHRyYW5zYWN0aW9uIGlzIHRvbyBsb3cuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkludHJpbnNpY0dhc1Rvb0xvd0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW50cmluc2ljR2FzVG9vTG93RXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL2ludHJpbnNpYyBnYXMgdG9vIGxvdy8KICAgICAgfSk7CiAgICAgIFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhdXNlIH0pIHsKICAgICAgICAgIHN1cGVyKCJUaGUgdHJhbnNhY3Rpb24gdHlwZSBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGNoYWluLiIsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIG5hbWU6ICJUcmFuc2FjdGlvblR5cGVOb3RTdXBwb3J0ZWRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC90cmFuc2FjdGlvbiB0eXBlIG5vdCB2YWxpZC8KICAgICAgfSk7CiAgICAgIFRpcEFib3ZlRmVlQ2FwRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2F1c2UsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBtYXhGZWVQZXJHYXMgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBUaGUgcHJvdmlkZWQgdGlwIChcYG1heFByaW9yaXR5RmVlUGVyR2FzXGAke21heFByaW9yaXR5RmVlUGVyR2FzID8gYCA9ICR7Zm9ybWF0R3dlaShtYXhQcmlvcml0eUZlZVBlckdhcyl9IGd3ZWlgIDogIiJ9KSBjYW5ub3QgYmUgaGlnaGVyIHRoYW4gdGhlIGZlZSBjYXAgKFxgbWF4RmVlUGVyR2FzXGAke21heEZlZVBlckdhcyA/IGAgPSAke2Zvcm1hdEd3ZWkobWF4RmVlUGVyR2FzKX0gZ3dlaWAgOiAiIn0pLmAKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIlRpcEFib3ZlRmVlQ2FwRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUaXBBYm92ZUZlZUNhcEVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC9tYXggcHJpb3JpdHkgZmVlIHBlciBnYXMgaGlnaGVyIHRoYW4gbWF4IGZlZSBwZXIgZ2FzfHRpcCBoaWdoZXIgdGhhbiBmZWUgY2FwLwogICAgICB9KTsKICAgICAgVW5rbm93bk5vZGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSB9KSB7CiAgICAgICAgICBzdXBlcihgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZXhlY3V0aW5nOiAke2NhdXNlPy5zaG9ydE1lc3NhZ2V9YCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIlVua25vd25Ob2RlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZXJyb3JzL2dldE5vZGVFcnJvci5qcwogIGZ1bmN0aW9uIGdldE5vZGVFcnJvcihlcnIsIGFyZ3MpIHsKICAgIGNvbnN0IG1lc3NhZ2UgPSAoZXJyLmRldGFpbHMgfHwgIiIpLnRvTG93ZXJDYXNlKCk7CiAgICBjb25zdCBleGVjdXRpb25SZXZlcnRlZEVycm9yID0gZXJyIGluc3RhbmNlb2YgQmFzZUVycm9yMiA/IGVyci53YWxrKChlKSA9PiBlLmNvZGUgPT09IEV4ZWN1dGlvblJldmVydGVkRXJyb3IuY29kZSkgOiBlcnI7CiAgICBpZiAoZXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvciBpbnN0YW5jZW9mIEJhc2VFcnJvcjIpCiAgICAgIHJldHVybiBuZXcgRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvcih7CiAgICAgICAgY2F1c2U6IGVyciwKICAgICAgICBtZXNzYWdlOiBleGVjdXRpb25SZXZlcnRlZEVycm9yLmRldGFpbHMKICAgICAgfSk7CiAgICBpZiAoRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IEV4ZWN1dGlvblJldmVydGVkRXJyb3IoewogICAgICAgIGNhdXNlOiBlcnIsCiAgICAgICAgbWVzc2FnZTogZXJyLmRldGFpbHMKICAgICAgfSk7CiAgICBpZiAoRmVlQ2FwVG9vSGlnaEVycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgRmVlQ2FwVG9vSGlnaEVycm9yKHsKICAgICAgICBjYXVzZTogZXJyLAogICAgICAgIG1heEZlZVBlckdhczogYXJncz8ubWF4RmVlUGVyR2FzCiAgICAgIH0pOwogICAgaWYgKEZlZUNhcFRvb0xvd0Vycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgRmVlQ2FwVG9vTG93RXJyb3IoewogICAgICAgIGNhdXNlOiBlcnIsCiAgICAgICAgbWF4RmVlUGVyR2FzOiBhcmdzPy5tYXhGZWVQZXJHYXMKICAgICAgfSk7CiAgICBpZiAoTm9uY2VUb29IaWdoRXJyb3Iubm9kZU1lc3NhZ2UudGVzdChtZXNzYWdlKSkKICAgICAgcmV0dXJuIG5ldyBOb25jZVRvb0hpZ2hFcnJvcih7IGNhdXNlOiBlcnIsIG5vbmNlOiBhcmdzPy5ub25jZSB9KTsKICAgIGlmIChOb25jZVRvb0xvd0Vycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgTm9uY2VUb29Mb3dFcnJvcih7IGNhdXNlOiBlcnIsIG5vbmNlOiBhcmdzPy5ub25jZSB9KTsKICAgIGlmIChOb25jZU1heFZhbHVlRXJyb3Iubm9kZU1lc3NhZ2UudGVzdChtZXNzYWdlKSkKICAgICAgcmV0dXJuIG5ldyBOb25jZU1heFZhbHVlRXJyb3IoeyBjYXVzZTogZXJyLCBub25jZTogYXJncz8ubm9uY2UgfSk7CiAgICBpZiAoSW5zdWZmaWNpZW50RnVuZHNFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IEluc3VmZmljaWVudEZ1bmRzRXJyb3IoeyBjYXVzZTogZXJyIH0pOwogICAgaWYgKEludHJpbnNpY0dhc1Rvb0hpZ2hFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IEludHJpbnNpY0dhc1Rvb0hpZ2hFcnJvcih7IGNhdXNlOiBlcnIsIGdhczogYXJncz8uZ2FzIH0pOwogICAgaWYgKEludHJpbnNpY0dhc1Rvb0xvd0Vycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgSW50cmluc2ljR2FzVG9vTG93RXJyb3IoeyBjYXVzZTogZXJyLCBnYXM6IGFyZ3M/LmdhcyB9KTsKICAgIGlmIChUcmFuc2FjdGlvblR5cGVOb3RTdXBwb3J0ZWRFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yKHsgY2F1c2U6IGVyciB9KTsKICAgIGlmIChUaXBBYm92ZUZlZUNhcEVycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgVGlwQWJvdmVGZWVDYXBFcnJvcih7CiAgICAgICAgY2F1c2U6IGVyciwKICAgICAgICBtYXhGZWVQZXJHYXM6IGFyZ3M/Lm1heEZlZVBlckdhcywKICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogYXJncz8ubWF4UHJpb3JpdHlGZWVQZXJHYXMKICAgICAgfSk7CiAgICByZXR1cm4gbmV3IFVua25vd25Ob2RlRXJyb3IoewogICAgICBjYXVzZTogZXJyCiAgICB9KTsKICB9CiAgdmFyIGluaXRfZ2V0Tm9kZUVycm9yID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZXJyb3JzL2dldE5vZGVFcnJvci5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X25vZGUoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2V4dHJhY3QuanMKICBmdW5jdGlvbiBleHRyYWN0KHZhbHVlXywgeyBmb3JtYXQgfSkgewogICAgaWYgKCFmb3JtYXQpCiAgICAgIHJldHVybiB7fTsKICAgIGNvbnN0IHZhbHVlID0ge307CiAgICBmdW5jdGlvbiBleHRyYWN0Xyhmb3JtYXR0ZWQyKSB7CiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmb3JtYXR0ZWQyKTsKICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykgewogICAgICAgIGlmIChrZXkgaW4gdmFsdWVfKQogICAgICAgICAgdmFsdWVba2V5XSA9IHZhbHVlX1trZXldOwogICAgICAgIGlmIChmb3JtYXR0ZWQyW2tleV0gJiYgdHlwZW9mIGZvcm1hdHRlZDJba2V5XSA9PT0gIm9iamVjdCIgJiYgIUFycmF5LmlzQXJyYXkoZm9ybWF0dGVkMltrZXldKSkKICAgICAgICAgIGV4dHJhY3RfKGZvcm1hdHRlZDJba2V5XSk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdCh2YWx1ZV8gfHwge30pOwogICAgZXh0cmFjdF8oZm9ybWF0dGVkKTsKICAgIHJldHVybiB2YWx1ZTsKICB9CiAgdmFyIGluaXRfZXh0cmFjdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Zvcm1hdHRlcnMvZXh0cmFjdC5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZm9ybWF0dGVycy9mb3JtYXR0ZXIuanMKICBmdW5jdGlvbiBkZWZpbmVGb3JtYXR0ZXIodHlwZSwgZm9ybWF0KSB7CiAgICByZXR1cm4gKHsgZXhjbHVkZSwgZm9ybWF0OiBvdmVycmlkZXMgfSkgPT4gewogICAgICByZXR1cm4gewogICAgICAgIGV4Y2x1ZGUsCiAgICAgICAgZm9ybWF0OiAoYXJncykgPT4gewogICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0KGFyZ3MpOwogICAgICAgICAgaWYgKGV4Y2x1ZGUpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZXhjbHVkZSkgewogICAgICAgICAgICAgIGRlbGV0ZSBmb3JtYXR0ZWRba2V5XTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgLi4uZm9ybWF0dGVkLAogICAgICAgICAgICAuLi5vdmVycmlkZXMoYXJncykKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICB0eXBlCiAgICAgIH07CiAgICB9OwogIH0KICB2YXIgaW5pdF9mb3JtYXR0ZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2Zvcm1hdHRlci5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZm9ybWF0dGVycy90cmFuc2FjdGlvblJlcXVlc3QuanMKICBmdW5jdGlvbiBmb3JtYXRUcmFuc2FjdGlvblJlcXVlc3QocmVxdWVzdCkgewogICAgY29uc3QgcnBjUmVxdWVzdCA9IHt9OwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LmF1dGhvcml6YXRpb25MaXN0ICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5hdXRob3JpemF0aW9uTGlzdCA9IGZvcm1hdEF1dGhvcml6YXRpb25MaXN0KHJlcXVlc3QuYXV0aG9yaXphdGlvbkxpc3QpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LmFjY2Vzc0xpc3QgIT09ICJ1bmRlZmluZWQiKQogICAgICBycGNSZXF1ZXN0LmFjY2Vzc0xpc3QgPSByZXF1ZXN0LmFjY2Vzc0xpc3Q7CiAgICBpZiAodHlwZW9mIHJlcXVlc3QuYmxvYlZlcnNpb25lZEhhc2hlcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QuYmxvYlZlcnNpb25lZEhhc2hlcyA9IHJlcXVlc3QuYmxvYlZlcnNpb25lZEhhc2hlczsKICAgIGlmICh0eXBlb2YgcmVxdWVzdC5ibG9icyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0LmJsb2JzWzBdICE9PSAic3RyaW5nIikKICAgICAgICBycGNSZXF1ZXN0LmJsb2JzID0gcmVxdWVzdC5ibG9icy5tYXAoKHgpID0+IGJ5dGVzVG9IZXgoeCkpOwogICAgICBlbHNlCiAgICAgICAgcnBjUmVxdWVzdC5ibG9icyA9IHJlcXVlc3QuYmxvYnM7CiAgICB9CiAgICBpZiAodHlwZW9mIHJlcXVlc3QuZGF0YSAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QuZGF0YSA9IHJlcXVlc3QuZGF0YTsKICAgIGlmICh0eXBlb2YgcmVxdWVzdC5mcm9tICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5mcm9tID0gcmVxdWVzdC5mcm9tOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LmdhcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QuZ2FzID0gbnVtYmVyVG9IZXgocmVxdWVzdC5nYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lmdhc1ByaWNlICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5nYXNQcmljZSA9IG51bWJlclRvSGV4KHJlcXVlc3QuZ2FzUHJpY2UpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm1heEZlZVBlckJsb2JHYXMgIT09ICJ1bmRlZmluZWQiKQogICAgICBycGNSZXF1ZXN0Lm1heEZlZVBlckJsb2JHYXMgPSBudW1iZXJUb0hleChyZXF1ZXN0Lm1heEZlZVBlckJsb2JHYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm1heEZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QubWF4RmVlUGVyR2FzID0gbnVtYmVyVG9IZXgocmVxdWVzdC5tYXhGZWVQZXJHYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm1heFByaW9yaXR5RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5tYXhQcmlvcml0eUZlZVBlckdhcyA9IG51bWJlclRvSGV4KHJlcXVlc3QubWF4UHJpb3JpdHlGZWVQZXJHYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm5vbmNlICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5ub25jZSA9IG51bWJlclRvSGV4KHJlcXVlc3Qubm9uY2UpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LnRvICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC50byA9IHJlcXVlc3QudG87CiAgICBpZiAodHlwZW9mIHJlcXVlc3QudHlwZSAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QudHlwZSA9IHJwY1RyYW5zYWN0aW9uVHlwZVtyZXF1ZXN0LnR5cGVdOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LnZhbHVlICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC52YWx1ZSA9IG51bWJlclRvSGV4KHJlcXVlc3QudmFsdWUpOwogICAgcmV0dXJuIHJwY1JlcXVlc3Q7CiAgfQogIGZ1bmN0aW9uIGZvcm1hdEF1dGhvcml6YXRpb25MaXN0KGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICByZXR1cm4gYXV0aG9yaXphdGlvbkxpc3QubWFwKChhdXRob3JpemF0aW9uKSA9PiAoewogICAgICBhZGRyZXNzOiBhdXRob3JpemF0aW9uLmNvbnRyYWN0QWRkcmVzcywKICAgICAgcjogYXV0aG9yaXphdGlvbi5yLAogICAgICBzOiBhdXRob3JpemF0aW9uLnMsCiAgICAgIGNoYWluSWQ6IG51bWJlclRvSGV4KGF1dGhvcml6YXRpb24uY2hhaW5JZCksCiAgICAgIG5vbmNlOiBudW1iZXJUb0hleChhdXRob3JpemF0aW9uLm5vbmNlKSwKICAgICAgLi4udHlwZW9mIGF1dGhvcml6YXRpb24ueVBhcml0eSAhPT0gInVuZGVmaW5lZCIgPyB7IHlQYXJpdHk6IG51bWJlclRvSGV4KGF1dGhvcml6YXRpb24ueVBhcml0eSkgfSA6IHt9LAogICAgICAuLi50eXBlb2YgYXV0aG9yaXphdGlvbi52ICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgYXV0aG9yaXphdGlvbi55UGFyaXR5ID09PSAidW5kZWZpbmVkIiA/IHsgdjogbnVtYmVyVG9IZXgoYXV0aG9yaXphdGlvbi52KSB9IDoge30KICAgIH0pKTsKICB9CiAgdmFyIHJwY1RyYW5zYWN0aW9uVHlwZSwgZGVmaW5lVHJhbnNhY3Rpb25SZXF1ZXN0OwogIHZhciBpbml0X3RyYW5zYWN0aW9uUmVxdWVzdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Zvcm1hdHRlcnMvdHJhbnNhY3Rpb25SZXF1ZXN0LmpzIigpIHsKICAgICAgaW5pdF90b0hleCgpOwogICAgICBpbml0X2Zvcm1hdHRlcigpOwogICAgICBycGNUcmFuc2FjdGlvblR5cGUgPSB7CiAgICAgICAgbGVnYWN5OiAiMHgwIiwKICAgICAgICBlaXAyOTMwOiAiMHgxIiwKICAgICAgICBlaXAxNTU5OiAiMHgyIiwKICAgICAgICBlaXA0ODQ0OiAiMHgzIiwKICAgICAgICBlaXA3NzAyOiAiMHg0IgogICAgICB9OwogICAgICBkZWZpbmVUcmFuc2FjdGlvblJlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lRm9ybWF0dGVyKCJ0cmFuc2FjdGlvblJlcXVlc3QiLCBmb3JtYXRUcmFuc2FjdGlvblJlcXVlc3QpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3N0YXRlT3ZlcnJpZGUuanMKICBmdW5jdGlvbiBzZXJpYWxpemVTdGF0ZU1hcHBpbmcoc3RhdGVNYXBwaW5nKSB7CiAgICBpZiAoIXN0YXRlTWFwcGluZyB8fCBzdGF0ZU1hcHBpbmcubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gdm9pZCAwOwogICAgcmV0dXJuIHN0YXRlTWFwcGluZy5yZWR1Y2UoKGFjYywgeyBzbG90LCB2YWx1ZSB9KSA9PiB7CiAgICAgIGlmIChzbG90Lmxlbmd0aCAhPT0gNjYpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRCeXRlc0xlbmd0aEVycm9yKHsKICAgICAgICAgIHNpemU6IHNsb3QubGVuZ3RoLAogICAgICAgICAgdGFyZ2V0U2l6ZTogNjYsCiAgICAgICAgICB0eXBlOiAiaGV4IgogICAgICAgIH0pOwogICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSA2NikKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEJ5dGVzTGVuZ3RoRXJyb3IoewogICAgICAgICAgc2l6ZTogdmFsdWUubGVuZ3RoLAogICAgICAgICAgdGFyZ2V0U2l6ZTogNjYsCiAgICAgICAgICB0eXBlOiAiaGV4IgogICAgICAgIH0pOwogICAgICBhY2Nbc2xvdF0gPSB2YWx1ZTsKICAgICAgcmV0dXJuIGFjYzsKICAgIH0sIHt9KTsKICB9CiAgZnVuY3Rpb24gc2VyaWFsaXplQWNjb3VudFN0YXRlT3ZlcnJpZGUocGFyYW1ldGVycykgewogICAgY29uc3QgeyBiYWxhbmNlLCBub25jZSwgc3RhdGUsIHN0YXRlRGlmZiwgY29kZSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlID0ge307CiAgICBpZiAoY29kZSAhPT0gdm9pZCAwKQogICAgICBycGNBY2NvdW50U3RhdGVPdmVycmlkZS5jb2RlID0gY29kZTsKICAgIGlmIChiYWxhbmNlICE9PSB2b2lkIDApCiAgICAgIHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlLmJhbGFuY2UgPSBudW1iZXJUb0hleChiYWxhbmNlKTsKICAgIGlmIChub25jZSAhPT0gdm9pZCAwKQogICAgICBycGNBY2NvdW50U3RhdGVPdmVycmlkZS5ub25jZSA9IG51bWJlclRvSGV4KG5vbmNlKTsKICAgIGlmIChzdGF0ZSAhPT0gdm9pZCAwKQogICAgICBycGNBY2NvdW50U3RhdGVPdmVycmlkZS5zdGF0ZSA9IHNlcmlhbGl6ZVN0YXRlTWFwcGluZyhzdGF0ZSk7CiAgICBpZiAoc3RhdGVEaWZmICE9PSB2b2lkIDApIHsKICAgICAgaWYgKHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlLnN0YXRlKQogICAgICAgIHRocm93IG5ldyBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yKCk7CiAgICAgIHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlLnN0YXRlRGlmZiA9IHNlcmlhbGl6ZVN0YXRlTWFwcGluZyhzdGF0ZURpZmYpOwogICAgfQogICAgcmV0dXJuIHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlOwogIH0KICBmdW5jdGlvbiBzZXJpYWxpemVTdGF0ZU92ZXJyaWRlKHBhcmFtZXRlcnMpIHsKICAgIGlmICghcGFyYW1ldGVycykKICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIGNvbnN0IHJwY1N0YXRlT3ZlcnJpZGUgPSB7fTsKICAgIGZvciAoY29uc3QgeyBhZGRyZXNzLCAuLi5hY2NvdW50U3RhdGUgfSBvZiBwYXJhbWV0ZXJzKSB7CiAgICAgIGlmICghaXNBZGRyZXNzKGFkZHJlc3MsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3MgfSk7CiAgICAgIGlmIChycGNTdGF0ZU92ZXJyaWRlW2FkZHJlc3NdKQogICAgICAgIHRocm93IG5ldyBBY2NvdW50U3RhdGVDb25mbGljdEVycm9yKHsgYWRkcmVzcyB9KTsKICAgICAgcnBjU3RhdGVPdmVycmlkZVthZGRyZXNzXSA9IHNlcmlhbGl6ZUFjY291bnRTdGF0ZU92ZXJyaWRlKGFjY291bnRTdGF0ZSk7CiAgICB9CiAgICByZXR1cm4gcnBjU3RhdGVPdmVycmlkZTsKICB9CiAgdmFyIGluaXRfc3RhdGVPdmVycmlkZTIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zdGF0ZU92ZXJyaWRlLmpzIigpIHsKICAgICAgaW5pdF9hZGRyZXNzKCk7CiAgICAgIGluaXRfZGF0YSgpOwogICAgICBpbml0X3N0YXRlT3ZlcnJpZGUoKTsKICAgICAgaW5pdF9pc0FkZHJlc3MoKTsKICAgICAgaW5pdF90b0hleCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL2Fzc2VydFJlcXVlc3QuanMKICBmdW5jdGlvbiBhc3NlcnRSZXF1ZXN0KGFyZ3MpIHsKICAgIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudF8sIGdhc1ByaWNlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCB0byB9ID0gYXJnczsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICBpZiAoYWNjb3VudCAmJiAhaXNBZGRyZXNzKGFjY291bnQuYWRkcmVzcykpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogYWNjb3VudC5hZGRyZXNzIH0pOwogICAgaWYgKHRvICYmICFpc0FkZHJlc3ModG8pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IHRvIH0pOwogICAgaWYgKHR5cGVvZiBnYXNQcmljZSAhPT0gInVuZGVmaW5lZCIgJiYgKHR5cGVvZiBtYXhGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiBtYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpKQogICAgICB0aHJvdyBuZXcgRmVlQ29uZmxpY3RFcnJvcigpOwogICAgaWYgKG1heEZlZVBlckdhcyAmJiBtYXhGZWVQZXJHYXMgPiAybiAqKiAyNTZuIC0gMW4pCiAgICAgIHRocm93IG5ldyBGZWVDYXBUb29IaWdoRXJyb3IoeyBtYXhGZWVQZXJHYXMgfSk7CiAgICBpZiAobWF4UHJpb3JpdHlGZWVQZXJHYXMgJiYgbWF4RmVlUGVyR2FzICYmIG1heFByaW9yaXR5RmVlUGVyR2FzID4gbWF4RmVlUGVyR2FzKQogICAgICB0aHJvdyBuZXcgVGlwQWJvdmVGZWVDYXBFcnJvcih7IG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMgfSk7CiAgfQogIHZhciBpbml0X2Fzc2VydFJlcXVlc3QgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9hc3NlcnRSZXF1ZXN0LmpzIigpIHsKICAgICAgaW5pdF9wYXJzZUFjY291bnQoKTsKICAgICAgaW5pdF9hZGRyZXNzKCk7CiAgICAgIGluaXRfbm9kZSgpOwogICAgICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgICAgIGluaXRfaXNBZGRyZXNzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9pc0FkZHJlc3NFcXVhbC5qcwogIGZ1bmN0aW9uIGlzQWRkcmVzc0VxdWFsKGEsIGIpIHsKICAgIGlmICghaXNBZGRyZXNzKGEsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiBhIH0pOwogICAgaWYgKCFpc0FkZHJlc3MoYiwgeyBzdHJpY3Q6IGZhbHNlIH0pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IGIgfSk7CiAgICByZXR1cm4gYS50b0xvd2VyQ2FzZSgpID09PSBiLnRvTG93ZXJDYXNlKCk7CiAgfQogIHZhciBpbml0X2lzQWRkcmVzc0VxdWFsID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9pc0FkZHJlc3NFcXVhbC5qcyIoKSB7CiAgICAgIGluaXRfYWRkcmVzcygpOwogICAgICBpbml0X2lzQWRkcmVzcygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9kZWNvZGVGdW5jdGlvblJlc3VsdC5qcwogIGZ1bmN0aW9uIGRlY29kZUZ1bmN0aW9uUmVzdWx0KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhcmdzLCBmdW5jdGlvbk5hbWUsIGRhdGEgfSA9IHBhcmFtZXRlcnM7CiAgICBsZXQgYWJpSXRlbSA9IGFiaTJbMF07CiAgICBpZiAoZnVuY3Rpb25OYW1lKSB7CiAgICAgIGNvbnN0IGl0ZW0gPSBnZXRBYmlJdGVtKHsgYWJpOiBhYmkyLCBhcmdzLCBuYW1lOiBmdW5jdGlvbk5hbWUgfSk7CiAgICAgIGlmICghaXRlbSkKICAgICAgICB0aHJvdyBuZXcgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yKGZ1bmN0aW9uTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg0IH0pOwogICAgICBhYmlJdGVtID0gaXRlbTsKICAgIH0KICAgIGlmIChhYmlJdGVtLnR5cGUgIT09ICJmdW5jdGlvbiIpCiAgICAgIHRocm93IG5ldyBBYmlGdW5jdGlvbk5vdEZvdW5kRXJyb3Iodm9pZCAwLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDQgfSk7CiAgICBpZiAoIWFiaUl0ZW0ub3V0cHV0cykKICAgICAgdGhyb3cgbmV3IEFiaUZ1bmN0aW9uT3V0cHV0c05vdEZvdW5kRXJyb3IoYWJpSXRlbS5uYW1lLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDQgfSk7CiAgICBjb25zdCB2YWx1ZXMgPSBkZWNvZGVBYmlQYXJhbWV0ZXJzKGFiaUl0ZW0ub3V0cHV0cywgZGF0YSk7CiAgICBpZiAodmFsdWVzICYmIHZhbHVlcy5sZW5ndGggPiAxKQogICAgICByZXR1cm4gdmFsdWVzOwogICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID09PSAxKQogICAgICByZXR1cm4gdmFsdWVzWzBdOwogICAgcmV0dXJuIHZvaWQgMDsKICB9CiAgdmFyIGRvY3NQYXRoNDsKICB2YXIgaW5pdF9kZWNvZGVGdW5jdGlvblJlc3VsdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9kZWNvZGVGdW5jdGlvblJlc3VsdC5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfZGVjb2RlQWJpUGFyYW1ldGVycygpOwogICAgICBpbml0X2dldEFiaUl0ZW0oKTsKICAgICAgZG9jc1BhdGg0ID0gIi9kb2NzL2NvbnRyYWN0L2RlY29kZUZ1bmN0aW9uUmVzdWx0IjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMvYWJpcy5qcwogIHZhciBtdWx0aWNhbGwzQWJpLCB1bml2ZXJzYWxSZXNvbHZlckVycm9ycywgdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpLCB1bml2ZXJzYWxSZXNvbHZlclJldmVyc2VBYmksIHRleHRSZXNvbHZlckFiaSwgYWRkcmVzc1Jlc29sdmVyQWJpLCB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JBYmksIGVyYzIwQWJpLCBlcmMyMEFiaV9ieXRlczMyLCBlcmM3MjFBYmksIGVyYzQ2MjZBYmk7CiAgdmFyIGluaXRfYWJpcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9hYmlzLmpzIigpIHsKICAgICAgbXVsdGljYWxsM0FiaSA9IFsKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbXBvbmVudHM6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogInRhcmdldCIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogImFsbG93RmFpbHVyZSIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogImNhbGxEYXRhIiwKICAgICAgICAgICAgICAgICAgdHlwZTogImJ5dGVzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgbmFtZTogImNhbGxzIiwKICAgICAgICAgICAgICB0eXBlOiAidHVwbGVbXSIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJhZ2dyZWdhdGUzIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbXBvbmVudHM6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogInN1Y2Nlc3MiLAogICAgICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIG5hbWU6ICJyZXR1cm5EYXRhIiwKICAgICAgICAgICAgICAgICAgdHlwZTogImJ5dGVzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgbmFtZTogInJldHVybkRhdGEiLAogICAgICAgICAgICAgIHR5cGU6ICJ0dXBsZVtdIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfQogICAgICBdOwogICAgICB1bml2ZXJzYWxSZXNvbHZlckVycm9ycyA9IFsKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogIlJlc29sdmVyTm90Rm91bmQiLAogICAgICAgICAgdHlwZTogImVycm9yIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG5hbWU6ICJSZXNvbHZlcldpbGRjYXJkTm90U3VwcG9ydGVkIiwKICAgICAgICAgIHR5cGU6ICJlcnJvciIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBuYW1lOiAiUmVzb2x2ZXJOb3RDb250cmFjdCIsCiAgICAgICAgICB0eXBlOiAiZXJyb3IiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJyZXR1cm5EYXRhIiwKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiUmVzb2x2ZXJFcnJvciIsCiAgICAgICAgICB0eXBlOiAiZXJyb3IiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbXBvbmVudHM6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogInN0YXR1cyIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJ1aW50MTYiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBuYW1lOiAibWVzc2FnZSIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICBuYW1lOiAiZXJyb3JzIiwKICAgICAgICAgICAgICB0eXBlOiAidHVwbGVbXSIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJIdHRwRXJyb3IiLAogICAgICAgICAgdHlwZTogImVycm9yIgogICAgICAgIH0KICAgICAgXTsKICAgICAgdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpID0gWwogICAgICAgIC4uLnVuaXZlcnNhbFJlc29sdmVyRXJyb3JzLAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJyZXNvbHZlIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICJuYW1lIiwgdHlwZTogImJ5dGVzIiB9LAogICAgICAgICAgICB7IG5hbWU6ICJkYXRhIiwgdHlwZTogImJ5dGVzIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICIiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImFkZHJlc3MiLCB0eXBlOiAiYWRkcmVzcyIgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogInJlc29sdmUiLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsgbmFtZTogIm5hbWUiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImRhdGEiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImdhdGV3YXlzIiwgdHlwZTogInN0cmluZ1tdIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICIiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImFkZHJlc3MiLCB0eXBlOiAiYWRkcmVzcyIgfQogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXTsKICAgICAgdW5pdmVyc2FsUmVzb2x2ZXJSZXZlcnNlQWJpID0gWwogICAgICAgIC4uLnVuaXZlcnNhbFJlc29sdmVyRXJyb3JzLAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJyZXZlcnNlIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW3sgdHlwZTogImJ5dGVzIiwgbmFtZTogInJldmVyc2VOYW1lIiB9XSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgeyB0eXBlOiAic3RyaW5nIiwgbmFtZTogInJlc29sdmVkTmFtZSIgfSwKICAgICAgICAgICAgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJyZXNvbHZlZEFkZHJlc3MiIH0sCiAgICAgICAgICAgIHsgdHlwZTogImFkZHJlc3MiLCBuYW1lOiAicmV2ZXJzZVJlc29sdmVyIiB9LAogICAgICAgICAgICB7IHR5cGU6ICJhZGRyZXNzIiwgbmFtZTogInJlc29sdmVyIiB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAicmV2ZXJzZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgeyB0eXBlOiAiYnl0ZXMiLCBuYW1lOiAicmV2ZXJzZU5hbWUiIH0sCiAgICAgICAgICAgIHsgdHlwZTogInN0cmluZ1tdIiwgbmFtZTogImdhdGV3YXlzIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7IHR5cGU6ICJzdHJpbmciLCBuYW1lOiAicmVzb2x2ZWROYW1lIiB9LAogICAgICAgICAgICB7IHR5cGU6ICJhZGRyZXNzIiwgbmFtZTogInJlc29sdmVkQWRkcmVzcyIgfSwKICAgICAgICAgICAgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJyZXZlcnNlUmVzb2x2ZXIiIH0sCiAgICAgICAgICAgIHsgdHlwZTogImFkZHJlc3MiLCBuYW1lOiAicmVzb2x2ZXIiIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF07CiAgICAgIHRleHRSZXNvbHZlckFiaSA9IFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAidGV4dCIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgeyBuYW1lOiAibmFtZSIsIHR5cGU6ICJieXRlczMyIiB9LAogICAgICAgICAgICB7IG5hbWU6ICJrZXkiLCB0eXBlOiAic3RyaW5nIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogW3sgbmFtZTogIiIsIHR5cGU6ICJzdHJpbmciIH1dCiAgICAgICAgfQogICAgICBdOwogICAgICBhZGRyZXNzUmVzb2x2ZXJBYmkgPSBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogImFkZHIiLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbeyBuYW1lOiAibmFtZSIsIHR5cGU6ICJieXRlczMyIiB9XSwKICAgICAgICAgIG91dHB1dHM6IFt7IG5hbWU6ICIiLCB0eXBlOiAiYWRkcmVzcyIgfV0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJhZGRyIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICJuYW1lIiwgdHlwZTogImJ5dGVzMzIiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImNvaW5UeXBlIiwgdHlwZTogInVpbnQyNTYiIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbeyBuYW1lOiAiIiwgdHlwZTogImJ5dGVzIiB9XQogICAgICAgIH0KICAgICAgXTsKICAgICAgdW5pdmVyc2FsU2lnbmF0dXJlVmFsaWRhdG9yQWJpID0gWwogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIl9zaWduZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIl9oYXNoIiwKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMzMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJfc2lnbmF0dXJlIiwKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIHR5cGU6ICJjb25zdHJ1Y3RvciIKICAgICAgICB9CiAgICAgIF07CiAgICAgIGVyYzIwQWJpID0gWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiQXBwcm92YWwiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYWxsb3dhbmNlIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYXBwcm92ZSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJiYWxhbmNlT2YiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhY2NvdW50IiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImRlY2ltYWxzIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50OCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJuYW1lIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAic3ltYm9sIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidG90YWxTdXBwbHkiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidHJhbnNmZXIiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJyZWNpcGllbnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJ0cmFuc2ZlckZyb20iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2lwaWVudCIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfQogICAgICBdOwogICAgICBlcmMyMEFiaV9ieXRlczMyID0gWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiQXBwcm92YWwiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYWxsb3dhbmNlIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYXBwcm92ZSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJiYWxhbmNlT2YiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhY2NvdW50IiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImRlY2ltYWxzIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50OCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJuYW1lIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJieXRlczMyIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInN5bWJvbCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMzMiIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJ0b3RhbFN1cHBseSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJ0cmFuc2ZlciIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2lwaWVudCIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInRyYW5zZmVyRnJvbSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNlbmRlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAicmVjaXBpZW50IiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhbW91bnQiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogImJvb2wiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF07CiAgICAgIGVyYzcyMUFiaSA9IFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZXZlbnQiLAogICAgICAgICAgbmFtZTogIkFwcHJvdmFsIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAic3BlbmRlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImV2ZW50IiwKICAgICAgICAgIG5hbWU6ICJBcHByb3ZhbEZvckFsbCIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogIm93bmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogIm9wZXJhdG9yIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJhcHByb3ZlZCIsCiAgICAgICAgICAgICAgdHlwZTogImJvb2wiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRva2VuSWQiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImFwcHJvdmUiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAicGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImJhbGFuY2VPZiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFjY291bnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiZ2V0QXBwcm92ZWQiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImlzQXBwcm92ZWRGb3JBbGwiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3BlcmF0b3IiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogImJvb2wiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAibmFtZSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogIm93bmVyT2YiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAic2FmZVRyYW5zZmVyRnJvbSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJwYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImZyb20iLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInNhZmVUcmFuc2ZlckZyb20iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0byIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiaWQiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImRhdGEiLAogICAgICAgICAgICAgIHR5cGU6ICJieXRlcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInNldEFwcHJvdmFsRm9yQWxsIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogIm5vbnBheWFibGUiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3BlcmF0b3IiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFwcHJvdmVkIiwKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInN5bWJvbCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInRva2VuQnlJbmRleCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImluZGV4IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInRva2VuQnlJbmRleCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIm93bmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJpbmRleCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAidG9rZW5JZCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidG9rZW5VUkkiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidG90YWxTdXBwbHkiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidHJhbnNmZXJGcm9tIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInBheWFibGUiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJyZWNpcGllbnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInRva2VJZCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbXQogICAgICAgIH0KICAgICAgXTsKICAgICAgZXJjNDYyNkFiaSA9IFsKICAgICAgICB7CiAgICAgICAgICBhbm9ueW1vdXM6IGZhbHNlLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiQXBwcm92YWwiLAogICAgICAgICAgdHlwZTogImV2ZW50IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgYW5vbnltb3VzOiBmYWxzZSwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogZmFsc2UsCiAgICAgICAgICAgICAgbmFtZTogInNoYXJlcyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiRGVwb3NpdCIsCiAgICAgICAgICB0eXBlOiAiZXZlbnQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBhbm9ueW1vdXM6IGZhbHNlLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgdHlwZTogImV2ZW50IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgYW5vbnltb3VzOiBmYWxzZSwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogIm93bmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogZmFsc2UsCiAgICAgICAgICAgICAgbmFtZTogInNoYXJlcyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiV2l0aGRyYXciLAogICAgICAgICAgdHlwZTogImV2ZW50IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogImFsbG93YW5jZSIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAic3BlbmRlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJhcHByb3ZlIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogImFzc2V0IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldFRva2VuQWRkcmVzcyIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFjY291bnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogImJhbGFuY2VPZiIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAic2hhcmVzIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJjb252ZXJ0VG9Bc3NldHMiLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiY29udmVydFRvU2hhcmVzIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJkZXBvc2l0IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJjYWxsZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogIm1heERlcG9zaXQiLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIm1heEFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImNhbGxlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAibWF4TWludCIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAibWF4U2hhcmVzIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogIm1heFJlZGVlbSIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAibWF4U2hhcmVzIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogIm1heFdpdGhkcmF3IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJtYXhBc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJtaW50IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogInByZXZpZXdEZXBvc2l0IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogInByZXZpZXdNaW50IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogInByZXZpZXdSZWRlZW0iLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAicHJldmlld1dpdGhkcmF3IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAicmVkZWVtIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogInRvdGFsQXNzZXRzIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b3RhbE1hbmFnZWRBc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogInRvdGFsU3VwcGx5IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0byIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJ0cmFuc2ZlciIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogIm5vbnBheWFibGUiLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiZnJvbSIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAidG8iLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAidHJhbnNmZXJGcm9tIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAid2l0aGRyYXciLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNoYXJlcyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9CiAgICAgIF07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2NvbnRyYWN0LmpzCiAgdmFyIGFnZ3JlZ2F0ZTNTaWduYXR1cmU7CiAgdmFyIGluaXRfY29udHJhY3QyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2NvbnRyYWN0LmpzIigpIHsKICAgICAgYWdncmVnYXRlM1NpZ25hdHVyZSA9ICIweDgyYWQ1NmNiIjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMvY29udHJhY3RzLmpzCiAgdmFyIGRlcGxveWxlc3NDYWxsVmlhQnl0ZWNvZGVCeXRlY29kZSwgZGVwbG95bGVzc0NhbGxWaWFGYWN0b3J5Qnl0ZWNvZGUsIHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckJ5dGVDb2RlOwogIHZhciBpbml0X2NvbnRyYWN0cyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9jb250cmFjdHMuanMiKCkgewogICAgICBkZXBsb3lsZXNzQ2FsbFZpYUJ5dGVjb2RlQnl0ZWNvZGUgPSAiMHg2MDgwNjA0MDUyMzQ4MDE1NjEwMDEwNTc2MDAwODBmZDViNTA2MDQwNTE2MTAxOGUzODAzODA2MTAxOGU4MzM5ODEwMTYwNDA4MTkwNTI2MTAwMmY5MTYxMDEyNDU2NWI2MDAwODA4MzUxNjAyMDg1MDE2MDAwZjU5MDUwODAzYjYxMDA0ODU3NjAwMDgwZmQ1YjYwMDA4MDgzNTE2MDIwODUwMTYwMDA4NTVhZjE2MDQwNTEzZDYwMDA4MjNlODE2MTAwNjc1NzNkODFmZDViM2Q4MWYzNWI2MzRlNDg3YjcxNjBlMDFiNjAwMDUyNjA0MTYwMDQ1MjYwMjQ2MDAwZmQ1YjYwMDA4MjYwMWY4MzAxMTI2MTAwOTI1NzYwMDA4MGZkNWI4MTUxNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDBhYjU3NjEwMGFiNjEwMDZiNTY1YjYwNDA1MTYwMWY4MjAxNjAxZjE5OTA4MTE2NjAzZjAxMTY4MTAxNjAwMTYwMDE2MDQwMWIwMzgxMTE4MjgyMTAxNzE1NjEwMGQ5NTc2MTAwZDk2MTAwNmI1NjViNjA0MDUyODE4MTUyODM4MjAxNjAyMDAxODUxMDE1NjEwMGYxNTc2MDAwODBmZDViNjAwMDViODI4MTEwMTU2MTAxMTA1NzYwMjA4MTg2MDE4MTAxNTE4MzgzMDE4MjAxNTIwMTYxMDBmNDU2NWI1MDYwMDA5MTgxMDE2MDIwMDE5MTkwOTE1MjkzOTI1MDUwNTA1NjViNjAwMDgwNjA0MDgzODUwMzEyMTU2MTAxMzc1NzYwMDA4MGZkNWI4MjUxNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDE0ZDU3NjAwMDgwZmQ1YjYxMDE1OTg1ODI4NjAxNjEwMDgxNTY1YjYwMjA4NTAxNTE5MDkzNTA5MDUwNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDE3NzU3NjAwMDgwZmQ1YjYxMDE4Mzg1ODI4NjAxNjEwMDgxNTY1YjkxNTA1MDkyNTA5MjkwNTA1NmZlIjsKICAgICAgZGVwbG95bGVzc0NhbGxWaWFGYWN0b3J5Qnl0ZWNvZGUgPSAiMHg2MDgwNjA0MDUyMzQ4MDE1NjEwMDEwNTc2MDAwODBmZDViNTA2MDQwNTE2MTAyYzAzODAzODA2MTAyYzA4MzM5ODEwMTYwNDA4MTkwNTI2MTAwMmY5MTYxMDFlNjU2NWI4MzYwMDE2MDAxNjBhMDFiMDMxNjNiNjAwMDAzNjEwMGU0NTc2MDAwODA4MzYwMDE2MDAxNjBhMDFiMDMxNjgzNjA0MDUxNjEwMDVjOTE5MDYxMDI3MDU2NWI2MDAwNjA0MDUxODA4MzAzODE2MDAwODY1YWYxOTE1MDUwM2Q4MDYwMDA4MTE0NjEwMDk5NTc2MDQwNTE5MTUwNjAxZjE5NjAzZjNkMDExNjgyMDE2MDQwNTIzZDgyNTIzZDYwMDA2MDIwODQwMTNlNjEwMDllNTY1YjYwNjA5MTUwNWI1MDkxNTA5MTUwODExNTgwNjEwMGI4NTc1MDYwMDE2MDAxNjBhMDFiMDM4NjE2M2IxNTViMTU2MTAwZTE1NzgwNjA0MDUxNjMxMDFiYjk4ZDYwZTAxYjgxNTI2MDA0MDE2MTAwZDg5MTkwNjEwMjhjNTY1YjYwNDA1MTgwOTEwMzkwZmQ1YjUwNTA1YjYwMDA4MDg0NTE2MDIwODYwMTYwMDA4ODVhZjE2MDQwNTEzZDYwMDA4MjNlODE2MTAxMDM1NzNkODFmZDViM2Q4MWYzNWI4MDUxNjAwMTYwMDE2MGEwMWIwMzgxMTY4MTE0NjEwMTFlNTc2MDAwODBmZDViOTE5MDUwNTY1YjYzNGU0ODdiNzE2MGUwMWI2MDAwNTI2MDQxNjAwNDUyNjAyNDYwMDBmZDViNjAwMDViODM4MTEwMTU2MTAxNTQ1NzgxODEwMTUxODM4MjAxNTI2MDIwMDE2MTAxM2M1NjViNTA1MDYwMDA5MTAxNTI1NjViNjAwMDgyNjAxZjgzMDExMjYxMDE2ZTU3NjAwMDgwZmQ1YjgxNTE2MDAxNjAwMTYwNDAxYjAzODExMTE1NjEwMTg3NTc2MTAxODc2MTAxMjM1NjViNjA0MDUxNjAxZjgyMDE2MDFmMTk5MDgxMTY2MDNmMDExNjgxMDE2MDAxNjAwMTYwNDAxYjAzODExMTgyODIxMDE3MTU2MTAxYjU1NzYxMDFiNTYxMDEyMzU2NWI2MDQwNTI4MTgxNTI4MzgyMDE2MDIwMDE4NTEwMTU2MTAxY2Q1NzYwMDA4MGZkNWI2MTAxZGU4MjYwMjA4MzAxNjAyMDg3MDE2MTAxMzk1NjViOTQ5MzUwNTA1MDUwNTY1YjYwMDA4MDYwMDA4MDYwODA4NTg3MDMxMjE1NjEwMWZjNTc2MDAwODBmZDViNjEwMjA1ODU2MTAxMDc1NjViNjAyMDg2MDE1MTkwOTQ1MDYwMDE2MDAxNjA0MDFiMDM4MTExMTU2MTAyMjE1NzYwMDA4MGZkNWI2MTAyMmQ4NzgyODgwMTYxMDE1ZDU2NWI5MzUwNTA2MTAyM2M2MDQwODYwMTYxMDEwNzU2NWI2MDYwODYwMTUxOTA5MjUwNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDI1ODU3NjAwMDgwZmQ1YjYxMDI2NDg3ODI4ODAxNjEwMTVkNTY1YjkxNTA1MDkyOTU5MTk0NTA5MjUwNTY1YjYwMDA4MjUxNjEwMjgyODE4NDYwMjA4NzAxNjEwMTM5NTY1YjkxOTA5MTAxOTI5MTUwNTA1NjViNjAyMDgxNTI2MDAwODI1MTgwNjAyMDg0MDE1MjYxMDJhYjgxNjA0MDg1MDE2MDIwODcwMTYxMDEzOTU2NWI2MDFmMDE2MDFmMTkxNjkxOTA5MTAxNjA0MDAxOTI5MTUwNTA1NmZlIjsKICAgICAgdW5pdmVyc2FsU2lnbmF0dXJlVmFsaWRhdG9yQnl0ZUNvZGUgPSAiMHg2MDgwNjA0MDUyMzQ4MDE1NjEwMDEwNTc2MDAwODBmZDViNTA2MDQwNTE2MTA2OTQzODAzODA2MTA2OTQ4MzM5ODEwMTYwNDA4MTkwNTI2MTAwMmY5MTYxMDUxZTU2NWI2MDAwNjEwMDNjODQ4NDg0NjEwMDQ4NTY1YjkwNTA4MDYwMDA1MjYwMDE2MDFmZjM1YjYwMDA3ZjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2MTAwNzQ4MzYxMDQwYzU2NWIwMzYxMDFlNzU3NjAwMDYwNjA4MDg0ODA2MDIwMDE5MDUxODEwMTkwNjEwMDkyOTE5MDYxMDU3NzU2NWI2MDQwNTE5Mjk1NTA5MDkzNTA5MTUwNjAwMDkwNjAwMTYwMDE2MGEwMWIwMzg1MTY5MDYxMDBiNjkwODU5MDYxMDVkZDU2NWI2MDAwNjA0MDUxODA4MzAzODE2MDAwODY1YWYxOTE1MDUwM2Q4MDYwMDA4MTE0NjEwMGYzNTc2MDQwNTE5MTUwNjAxZjE5NjAzZjNkMDExNjgyMDE2MDQwNTIzZDgyNTIzZDYwMDA2MDIwODQwMTNlNjEwMGY4NTY1YjYwNjA5MTUwNWI1MDUwOTA1MDg3NjAwMTYwMDE2MGEwMWIwMzE2M2I2MDAwMDM2MTAxNjA1NzgwNjEwMTYwNTc2MDQwNTE2MjQ2MWJjZDYwZTUxYjgxNTI2MDIwNjAwNDgyMDE1MjYwMWU2MDI0ODIwMTUyN2Y1MzY5Njc2ZTYxNzQ3NTcyNjU1NjYxNmM2OTY0NjE3NDZmNzIzYTIwNjQ2NTcwNmM2Zjc5NmQ2NTZlNzQwMDAwNjA0NDgyMDE1MjYwNjQwMTViNjA0MDUxODA5MTAzOTBmZDViNjA0MDUxNjMwYjEzNWQzZjYwZTExYjgwODI1MjkwNjAwMTYwMDE2MGEwMWIwMzhhMTY5MDYzMTYyNmJhN2U5MDYxMDE5MDkwOGI5MDg3OTA2MDA0MDE2MTA1Zjk1NjViNjAyMDYwNDA1MTgwODMwMzgxODY1YWZhMTU4MDE1NjEwMWFkNTczZDYwMDA4MDNlM2Q2MDAwZmQ1YjUwNTA1MDUwNjA0MDUxM2Q2MDFmMTk2MDFmODIwMTE2ODIwMTgwNjA0MDUyNTA4MTAxOTA2MTAxZDE5MTkwNjEwNjMzNTY1YjYwMDE2MDAxNjBlMDFiMDMxOTE2MTQ5NDUwNTA1MDUwNTA2MTA0MDU1NjViNjAwMTYwMDE2MGEwMWIwMzg0MTYzYjE1NjEwMjdhNTc2MDQwNTE2MzBiMTM1ZDNmNjBlMTFiODA4MjUyOTA2MDAxNjAwMTYwYTAxYjAzODYxNjkwNjMxNjI2YmE3ZTkwNjEwMjI3OTA4NzkwODc5MDYwMDQwMTYxMDVmOTU2NWI2MDIwNjA0MDUxODA4MzAzODE4NjVhZmExNTgwMTU2MTAyNDQ1NzNkNjAwMDgwM2UzZDYwMDBmZDViNTA1MDUwNTA2MDQwNTEzZDYwMWYxOTYwMWY4MjAxMTY4MjAxODA2MDQwNTI1MDgxMDE5MDYxMDI2ODkxOTA2MTA2MzM1NjViNjAwMTYwMDE2MGUwMWIwMzE5MTYxNDkwNTA2MTA0MDU1NjViODE1MTYwNDExNDYxMDJkZjU3NjA0MDUxNjI0NjFiY2Q2MGU1MWI4MTUyNjAyMDYwMDQ4MjAxNTI2MDNhNjAyNDgyMDE1MjYwMDA4MDUxNjAyMDYxMDY3NDgzMzk4MTUxOTE1MjYwNDQ4MjAxNTI3ZjNhMjA2OTZlNzY2MTZjNjk2NDIwNzM2OTY3NmU2MTc0NzU3MjY1MjA2YzY1NmU2Nzc0NjgwMDAwMDAwMDAwMDA2MDY0ODIwMTUyNjA4NDAxNjEwMTU3NTY1YjYxMDJlNzYxMDQyNTU2NWI1MDYwMjA4MjAxNTE2MDQwODA4NDAxNTE4NDUxODU5MzkyNjAwMDkxODU5MTkwODExMDYxMDMwYzU3NjEwMzBjNjEwNjVkNTY1YjAxNjAyMDAxNTE2MGY4MWM5MDUwNjAxYjgxMTQ4MDE1OTA2MTAzMmI1NzUwODA2MGZmMTY2MDFjMTQxNTViMTU2MTAzOGM1NzYwNDA1MTYyNDYxYmNkNjBlNTFiODE1MjYwMjA2MDA0ODIwMTUyNjAzYjYwMjQ4MjAxNTI2MDAwODA1MTYwMjA2MTA2NzQ4MzM5ODE1MTkxNTI2MDQ0ODIwMTUyN2YzYTIwNjk2ZTc2NjE2YzY5NjQyMDczNjk2NzZlNjE3NDc1NzI2NTIwNzYyMDc2NjE2Yzc1NjUwMDAwMDAwMDAwNjA2NDgyMDE1MjYwODQwMTYxMDE1NzU2NWI2MDQwODA1MTYwMDA4MTUyNjAyMDgxMDE4MDgzNTI4OTkwNTI2MGZmODMxNjkxODEwMTkxOTA5MTUyNjA2MDgxMDE4NDkwNTI2MDgwODEwMTgzOTA1MjYwMDE2MDAxNjBhMDFiMDM4OTE2OTA2MDAxOTA2MGEwMDE2MDIwNjA0MDUxNjAyMDgxMDM5MDgwODQwMzkwODU1YWZhMTU4MDE1NjEwM2VhNTczZDYwMDA4MDNlM2Q2MDAwZmQ1YjUwNTA1MDYwMjA2MDQwNTEwMzUxNjAwMTYwMDE2MGEwMWIwMzE2MTQ5NDUwNTA1MDUwNTA1YjkzOTI1MDUwNTA1NjViNjAwMDYwMjA4MjUxMTAxNTYxMDQxZDU3NjAwMDgwZmQ1YjUwODA1MTAxNTE5MDU2NWI2MDQwNTE4MDYwNjAwMTYwNDA1MjgwNjAwMzkwNjAyMDgyMDI4MDM2ODMzNzUwOTE5MjkxNTA1MDU2NWI2MDAxNjAwMTYwYTAxYjAzODExNjgxMTQ2MTA0NTg1NzYwMDA4MGZkNWI1MDU2NWI2MzRlNDg3YjcxNjBlMDFiNjAwMDUyNjA0MTYwMDQ1MjYwMjQ2MDAwZmQ1YjYwMDA1YjgzODExMDE1NjEwNDhjNTc4MTgxMDE1MTgzODIwMTUyNjAyMDAxNjEwNDc0NTY1YjUwNTA2MDAwOTEwMTUyNTY1YjYwMDA4MjYwMWY4MzAxMTI2MTA0YTY1NzYwMDA4MGZkNWI4MTUxNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDRiZjU3NjEwNGJmNjEwNDViNTY1YjYwNDA1MTYwMWY4MjAxNjAxZjE5OTA4MTE2NjAzZjAxMTY4MTAxNjAwMTYwMDE2MDQwMWIwMzgxMTE4MjgyMTAxNzE1NjEwNGVkNTc2MTA0ZWQ2MTA0NWI1NjViNjA0MDUyODE4MTUyODM4MjAxNjAyMDAxODUxMDE1NjEwNTA1NTc2MDAwODBmZDViNjEwNTE2ODI2MDIwODMwMTYwMjA4NzAxNjEwNDcxNTY1Yjk0OTM1MDUwNTA1MDU2NWI2MDAwODA2MDAwNjA2MDg0ODYwMzEyMTU2MTA1MzM1NzYwMDA4MGZkNWI4MzUxNjEwNTNlODE2MTA0NDM1NjViNjAyMDg1MDE1MTYwNDA4NjAxNTE5MTk0NTA5MjUwNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDU2MTU3NjAwMDgwZmQ1YjYxMDU2ZDg2ODI4NzAxNjEwNDk1NTY1YjkxNTA1MDkyNTA5MjUwOTI1NjViNjAwMDgwNjAwMDYwNjA4NDg2MDMxMjE1NjEwNThjNTc2MDAwODBmZDViODM1MTYxMDU5NzgxNjEwNDQzNTY1YjYwMjA4NTAxNTE5MDkzNTA2MDAxNjAwMTYwNDAxYjAzODExMTE1NjEwNWIzNTc2MDAwODBmZDViNjEwNWJmODY4Mjg3MDE2MTA0OTU1NjViNjA0MDg2MDE1MTkwOTM1MDkwNTA2MDAxNjAwMTYwNDAxYjAzODExMTE1NjEwNTYxNTc2MDAwODBmZDViNjAwMDgyNTE2MTA1ZWY4MTg0NjAyMDg3MDE2MTA0NzE1NjViOTE5MDkxMDE5MjkxNTA1MDU2NWI4MjgxNTI2MDQwNjAyMDgyMDE1MjYwMDA4MjUxODA2MDQwODQwMTUyNjEwNjFlODE2MDYwODUwMTYwMjA4NzAxNjEwNDcxNTY1YjYwMWYwMTYwMWYxOTE2OTE5MDkxMDE2MDYwMDE5MzkyNTA1MDUwNTY1YjYwMDA2MDIwODI4NDAzMTIxNTYxMDY0NTU3NjAwMDgwZmQ1YjgxNTE2MDAxNjAwMTYwZTAxYjAzMTk4MTE2ODExNDYxMDQwNTU3NjAwMDgwZmQ1YjYzNGU0ODdiNzE2MGUwMWI2MDAwNTI2MDMyNjAwNDUyNjAyNDYwMDBmZGZlNTM2OTY3NmU2MTc0NzU3MjY1NTY2MTZjNjk2NDYxNzQ2ZjcyMjM3MjY1NjM2Zjc2NjU3MjUzNjk2NzZlNjU3MiI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2NoYWluLmpzCiAgdmFyIENoYWluRG9lc05vdFN1cHBvcnRDb250cmFjdCwgQ2hhaW5NaXNtYXRjaEVycm9yLCBDaGFpbk5vdEZvdW5kRXJyb3IsIENsaWVudENoYWluTm90Q29uZmlndXJlZEVycm9yLCBJbnZhbGlkQ2hhaW5JZEVycm9yOwogIHZhciBpbml0X2NoYWluID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2NoYWluLmpzIigpIHsKICAgICAgaW5pdF9iYXNlKCk7CiAgICAgIENoYWluRG9lc05vdFN1cHBvcnRDb250cmFjdCA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBibG9ja051bWJlciwgY2hhaW4sIGNvbnRyYWN0IH0pIHsKICAgICAgICAgIHN1cGVyKGBDaGFpbiAiJHtjaGFpbi5uYW1lfSIgZG9lcyBub3Qgc3VwcG9ydCBjb250cmFjdCAiJHtjb250cmFjdC5uYW1lfSIuYCwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAiVGhpcyBjb3VsZCBiZSBkdWUgdG8gYW55IG9mIHRoZSBmb2xsb3dpbmc6IiwKICAgICAgICAgICAgICAuLi5ibG9ja051bWJlciAmJiBjb250cmFjdC5ibG9ja0NyZWF0ZWQgJiYgY29udHJhY3QuYmxvY2tDcmVhdGVkID4gYmxvY2tOdW1iZXIgPyBbCiAgICAgICAgICAgICAgICBgLSBUaGUgY29udHJhY3QgIiR7Y29udHJhY3QubmFtZX0iIHdhcyBub3QgZGVwbG95ZWQgdW50aWwgYmxvY2sgJHtjb250cmFjdC5ibG9ja0NyZWF0ZWR9IChjdXJyZW50IGJsb2NrICR7YmxvY2tOdW1iZXJ9KS5gCiAgICAgICAgICAgICAgXSA6IFsKICAgICAgICAgICAgICAgIGAtIFRoZSBjaGFpbiBkb2VzIG5vdCBoYXZlIHRoZSBjb250cmFjdCAiJHtjb250cmFjdC5uYW1lfSIgY29uZmlndXJlZC5gCiAgICAgICAgICAgICAgXQogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0IgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBDaGFpbk1pc21hdGNoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2hhaW4sIGN1cnJlbnRDaGFpbklkIH0pIHsKICAgICAgICAgIHN1cGVyKGBUaGUgY3VycmVudCBjaGFpbiBvZiB0aGUgd2FsbGV0IChpZDogJHtjdXJyZW50Q2hhaW5JZH0pIGRvZXMgbm90IG1hdGNoIHRoZSB0YXJnZXQgY2hhaW4gZm9yIHRoZSB0cmFuc2FjdGlvbiAoaWQ6ICR7Y2hhaW4uaWR9IFx1MjAxMyAke2NoYWluLm5hbWV9KS5gLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBDdXJyZW50IENoYWluIElEOiAgJHtjdXJyZW50Q2hhaW5JZH1gLAogICAgICAgICAgICAgIGBFeHBlY3RlZCBDaGFpbiBJRDogJHtjaGFpbi5pZH0gXHUyMDEzICR7Y2hhaW4ubmFtZX1gCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG5hbWU6ICJDaGFpbk1pc21hdGNoRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIENoYWluTm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgICJObyBjaGFpbiB3YXMgcHJvdmlkZWQgdG8gdGhlIHJlcXVlc3QuIiwKICAgICAgICAgICAgIlBsZWFzZSBwcm92aWRlIGEgY2hhaW4gd2l0aCB0aGUgYGNoYWluYCBhcmd1bWVudCBvbiB0aGUgQWN0aW9uLCBvciBieSBzdXBwbHlpbmcgYSBgY2hhaW5gIHRvIFdhbGxldENsaWVudC4iCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgbmFtZTogIkNoYWluTm90Rm91bmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ2xpZW50Q2hhaW5Ob3RDb25maWd1cmVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoIk5vIGNoYWluIHdhcyBwcm92aWRlZCB0byB0aGUgQ2xpZW50LiIsIHsKICAgICAgICAgICAgbmFtZTogIkNsaWVudENoYWluTm90Q29uZmlndXJlZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQ2hhaW5JZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNoYWluSWQgfSkgewogICAgICAgICAgc3VwZXIodHlwZW9mIGNoYWluSWQgPT09ICJudW1iZXIiID8gYENoYWluIElEICIke2NoYWluSWR9IiBpcyBpbnZhbGlkLmAgOiAiQ2hhaW4gSUQgaXMgaW52YWxpZC4iLCB7IG5hbWU6ICJJbnZhbGlkQ2hhaW5JZEVycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2VuY29kZURlcGxveURhdGEuanMKICBmdW5jdGlvbiBlbmNvZGVEZXBsb3lEYXRhKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhcmdzLCBieXRlY29kZSB9ID0gcGFyYW1ldGVyczsKICAgIGlmICghYXJncyB8fCBhcmdzLmxlbmd0aCA9PT0gMCkKICAgICAgcmV0dXJuIGJ5dGVjb2RlOwogICAgY29uc3QgZGVzY3JpcHRpb24gPSBhYmkyLmZpbmQoKHgpID0+ICJ0eXBlIiBpbiB4ICYmIHgudHlwZSA9PT0gImNvbnN0cnVjdG9yIik7CiAgICBpZiAoIWRlc2NyaXB0aW9uKQogICAgICB0aHJvdyBuZXcgQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoNSB9KTsKICAgIGlmICghKCJpbnB1dHMiIGluIGRlc2NyaXB0aW9uKSkKICAgICAgdGhyb3cgbmV3IEFiaUNvbnN0cnVjdG9yUGFyYW1zTm90Rm91bmRFcnJvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDUgfSk7CiAgICBpZiAoIWRlc2NyaXB0aW9uLmlucHV0cyB8fCBkZXNjcmlwdGlvbi5pbnB1dHMubGVuZ3RoID09PSAwKQogICAgICB0aHJvdyBuZXcgQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoNSB9KTsKICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVBYmlQYXJhbWV0ZXJzKGRlc2NyaXB0aW9uLmlucHV0cywgYXJncyk7CiAgICByZXR1cm4gY29uY2F0SGV4KFtieXRlY29kZSwgZGF0YV0pOwogIH0KICB2YXIgZG9jc1BhdGg1OwogIHZhciBpbml0X2VuY29kZURlcGxveURhdGEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlRGVwbG95RGF0YS5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfY29uY2F0KCk7CiAgICAgIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogICAgICBkb2NzUGF0aDUgPSAiL2RvY3MvY29udHJhY3QvZW5jb2RlRGVwbG95RGF0YSI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY2hhaW4vZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MuanMKICBmdW5jdGlvbiBnZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyh7IGJsb2NrTnVtYmVyLCBjaGFpbiwgY29udHJhY3Q6IG5hbWUgfSkgewogICAgY29uc3QgY29udHJhY3QgPSBjaGFpbj8uY29udHJhY3RzPy5bbmFtZV07CiAgICBpZiAoIWNvbnRyYWN0KQogICAgICB0aHJvdyBuZXcgQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0KHsKICAgICAgICBjaGFpbiwKICAgICAgICBjb250cmFjdDogeyBuYW1lIH0KICAgICAgfSk7CiAgICBpZiAoYmxvY2tOdW1iZXIgJiYgY29udHJhY3QuYmxvY2tDcmVhdGVkICYmIGNvbnRyYWN0LmJsb2NrQ3JlYXRlZCA+IGJsb2NrTnVtYmVyKQogICAgICB0aHJvdyBuZXcgQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0KHsKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBjaGFpbiwKICAgICAgICBjb250cmFjdDogewogICAgICAgICAgbmFtZSwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogY29udHJhY3QuYmxvY2tDcmVhdGVkCiAgICAgICAgfQogICAgICB9KTsKICAgIHJldHVybiBjb250cmFjdC5hZGRyZXNzOwogIH0KICB2YXIgaW5pdF9nZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2NoYWluL2dldENoYWluQ29udHJhY3RBZGRyZXNzLmpzIigpIHsKICAgICAgaW5pdF9jaGFpbigpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vycm9ycy9nZXRDYWxsRXJyb3IuanMKICBmdW5jdGlvbiBnZXRDYWxsRXJyb3IoZXJyLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIC4uLmFyZ3MgfSkgewogICAgY29uc3QgY2F1c2UgPSAoKCkgPT4gewogICAgICBjb25zdCBjYXVzZTIgPSBnZXROb2RlRXJyb3IoZXJyLCBhcmdzKTsKICAgICAgaWYgKGNhdXNlMiBpbnN0YW5jZW9mIFVua25vd25Ob2RlRXJyb3IpCiAgICAgICAgcmV0dXJuIGVycjsKICAgICAgcmV0dXJuIGNhdXNlMjsKICAgIH0pKCk7CiAgICByZXR1cm4gbmV3IENhbGxFeGVjdXRpb25FcnJvcihjYXVzZSwgewogICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAuLi5hcmdzCiAgICB9KTsKICB9CiAgdmFyIGluaXRfZ2V0Q2FsbEVycm9yID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZXJyb3JzL2dldENhbGxFcnJvci5qcyIoKSB7CiAgICAgIGluaXRfY29udHJhY3QoKTsKICAgICAgaW5pdF9ub2RlKCk7CiAgICAgIGluaXRfZ2V0Tm9kZUVycm9yKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcHJvbWlzZS9jcmVhdGVCYXRjaFNjaGVkdWxlci5qcwogIGZ1bmN0aW9uIGNyZWF0ZUJhdGNoU2NoZWR1bGVyKHsgZm4sIGlkLCBzaG91bGRTcGxpdEJhdGNoLCB3YWl0OiB3YWl0MiA9IDAsIHNvcnQgfSkgewogICAgY29uc3QgZXhlYyA9IGFzeW5jICgpID0+IHsKICAgICAgY29uc3Qgc2NoZWR1bGVyID0gZ2V0U2NoZWR1bGVyKCk7CiAgICAgIGZsdXNoKCk7CiAgICAgIGNvbnN0IGFyZ3MgPSBzY2hlZHVsZXIubWFwKCh7IGFyZ3M6IGFyZ3MyIH0pID0+IGFyZ3MyKTsKICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgZm4oYXJncykudGhlbigoZGF0YSkgPT4gewogICAgICAgIGlmIChzb3J0ICYmIEFycmF5LmlzQXJyYXkoZGF0YSkpCiAgICAgICAgICBkYXRhLnNvcnQoc29ydCk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY2hlZHVsZXIubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGNvbnN0IHsgcGVuZGluZ1Byb21pc2UgfSA9IHNjaGVkdWxlcltpXTsKICAgICAgICAgIHBlbmRpbmdQcm9taXNlLnJlc29sdmU/LihbZGF0YVtpXSwgZGF0YV0pOwogICAgICAgIH0KICAgICAgfSkuY2F0Y2goKGVycikgPT4gewogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2NoZWR1bGVyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBjb25zdCB7IHBlbmRpbmdQcm9taXNlIH0gPSBzY2hlZHVsZXJbaV07CiAgICAgICAgICBwZW5kaW5nUHJvbWlzZS5yZWplY3Q/LihlcnIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9OwogICAgY29uc3QgZmx1c2ggPSAoKSA9PiBzY2hlZHVsZXJDYWNoZS5kZWxldGUoaWQpOwogICAgY29uc3QgZ2V0QmF0Y2hlZEFyZ3MgPSAoKSA9PiBnZXRTY2hlZHVsZXIoKS5tYXAoKHsgYXJncyB9KSA9PiBhcmdzKTsKICAgIGNvbnN0IGdldFNjaGVkdWxlciA9ICgpID0+IHNjaGVkdWxlckNhY2hlLmdldChpZCkgfHwgW107CiAgICBjb25zdCBzZXRTY2hlZHVsZXIgPSAoaXRlbSkgPT4gc2NoZWR1bGVyQ2FjaGUuc2V0KGlkLCBbLi4uZ2V0U2NoZWR1bGVyKCksIGl0ZW1dKTsKICAgIHJldHVybiB7CiAgICAgIGZsdXNoLAogICAgICBhc3luYyBzY2hlZHVsZShhcmdzKSB7CiAgICAgICAgY29uc3QgcGVuZGluZ1Byb21pc2UgPSB7fTsKICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgICAgcGVuZGluZ1Byb21pc2UucmVzb2x2ZSA9IHJlc29sdmU7CiAgICAgICAgICBwZW5kaW5nUHJvbWlzZS5yZWplY3QgPSByZWplY3Q7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3Qgc3BsaXQyID0gc2hvdWxkU3BsaXRCYXRjaD8uKFsuLi5nZXRCYXRjaGVkQXJncygpLCBhcmdzXSk7CiAgICAgICAgaWYgKHNwbGl0MikKICAgICAgICAgIGV4ZWMoKTsKICAgICAgICBjb25zdCBoYXNBY3RpdmVTY2hlZHVsZXIgPSBnZXRTY2hlZHVsZXIoKS5sZW5ndGggPiAwOwogICAgICAgIGlmIChoYXNBY3RpdmVTY2hlZHVsZXIpIHsKICAgICAgICAgIHNldFNjaGVkdWxlcih7IGFyZ3MsIHBlbmRpbmdQcm9taXNlIH0pOwogICAgICAgICAgcmV0dXJuIHByb21pc2U7CiAgICAgICAgfQogICAgICAgIHNldFNjaGVkdWxlcih7IGFyZ3MsIHBlbmRpbmdQcm9taXNlIH0pOwogICAgICAgIHNldFRpbWVvdXQoZXhlYywgd2FpdDIpOwogICAgICAgIHJldHVybiBwcm9taXNlOwogICAgICB9CiAgICB9OwogIH0KICB2YXIgc2NoZWR1bGVyQ2FjaGU7CiAgdmFyIGluaXRfY3JlYXRlQmF0Y2hTY2hlZHVsZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9wcm9taXNlL2NyZWF0ZUJhdGNoU2NoZWR1bGVyLmpzIigpIHsKICAgICAgc2NoZWR1bGVyQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9jY2lwLmpzCiAgdmFyIE9mZmNoYWluTG9va3VwRXJyb3IsIE9mZmNoYWluTG9va3VwUmVzcG9uc2VNYWxmb3JtZWRFcnJvciwgT2ZmY2hhaW5Mb29rdXBTZW5kZXJNaXNtYXRjaEVycm9yOwogIHZhciBpbml0X2NjaXAgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvY2NpcC5qcyIoKSB7CiAgICAgIGluaXRfc3RyaW5naWZ5KCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X3V0aWxzMygpOwogICAgICBPZmZjaGFpbkxvb2t1cEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhbGxiYWNrU2VsZWN0b3IsIGNhdXNlLCBkYXRhLCBleHRyYURhdGEsIHNlbmRlciwgdXJscyB9KSB7CiAgICAgICAgICBzdXBlcihjYXVzZS5zaG9ydE1lc3NhZ2UgfHwgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGZldGNoaW5nIGZvciBhbiBvZmZjaGFpbiByZXN1bHQuIiwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgLi4uY2F1c2UubWV0YU1lc3NhZ2VzIHx8IFtdLAogICAgICAgICAgICAgIGNhdXNlLm1ldGFNZXNzYWdlcz8ubGVuZ3RoID8gIiIgOiBbXSwKICAgICAgICAgICAgICAiT2ZmY2hhaW4gR2F0ZXdheSBDYWxsOiIsCiAgICAgICAgICAgICAgdXJscyAmJiBbCiAgICAgICAgICAgICAgICAiICBHYXRld2F5IFVSTChzKToiLAogICAgICAgICAgICAgICAgLi4udXJscy5tYXAoKHVybCkgPT4gYCAgICAke2dldFVybCh1cmwpfWApCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICBgICBTZW5kZXI6ICR7c2VuZGVyfWAsCiAgICAgICAgICAgICAgYCAgRGF0YTogJHtkYXRhfWAsCiAgICAgICAgICAgICAgYCAgQ2FsbGJhY2sgc2VsZWN0b3I6ICR7Y2FsbGJhY2tTZWxlY3Rvcn1gLAogICAgICAgICAgICAgIGAgIEV4dHJhIGRhdGE6ICR7ZXh0cmFEYXRhfWAKICAgICAgICAgICAgXS5mbGF0KCksCiAgICAgICAgICAgIG5hbWU6ICJPZmZjaGFpbkxvb2t1cEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPZmZjaGFpbkxvb2t1cFJlc3BvbnNlTWFsZm9ybWVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgcmVzdWx0LCB1cmwgfSkgewogICAgICAgICAgc3VwZXIoIk9mZmNoYWluIGdhdGV3YXkgcmVzcG9uc2UgaXMgbWFsZm9ybWVkLiBSZXNwb25zZSBkYXRhIG11c3QgYmUgYSBoZXggdmFsdWUuIiwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgR2F0ZXdheSBVUkw6ICR7Z2V0VXJsKHVybCl9YCwKICAgICAgICAgICAgICBgUmVzcG9uc2U6ICR7c3RyaW5naWZ5KHJlc3VsdCl9YAogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiT2ZmY2hhaW5Mb29rdXBSZXNwb25zZU1hbGZvcm1lZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPZmZjaGFpbkxvb2t1cFNlbmRlck1pc21hdGNoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgc2VuZGVyLCB0byB9KSB7CiAgICAgICAgICBzdXBlcigiUmV2ZXJ0ZWQgc2VuZGVyIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggdGFyZ2V0IGNvbnRyYWN0IGFkZHJlc3MgKGB0b2ApLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgYENvbnRyYWN0IGFkZHJlc3M6ICR7dG99YCwKICAgICAgICAgICAgICBgT2ZmY2hhaW5Mb29rdXAgc2VuZGVyIGFkZHJlc3M6ICR7c2VuZGVyfWAKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbmFtZTogIk9mZmNoYWluTG9va3VwU2VuZGVyTWlzbWF0Y2hFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9jY2lwLmpzCiAgdmFyIGNjaXBfZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KGNjaXBfZXhwb3J0cywgewogICAgY2NpcFJlcXVlc3Q6ICgpID0+IGNjaXBSZXF1ZXN0LAogICAgb2ZmY2hhaW5Mb29rdXA6ICgpID0+IG9mZmNoYWluTG9va3VwLAogICAgb2ZmY2hhaW5Mb29rdXBBYmlJdGVtOiAoKSA9PiBvZmZjaGFpbkxvb2t1cEFiaUl0ZW0sCiAgICBvZmZjaGFpbkxvb2t1cFNpZ25hdHVyZTogKCkgPT4gb2ZmY2hhaW5Mb29rdXBTaWduYXR1cmUKICB9KTsKICBhc3luYyBmdW5jdGlvbiBvZmZjaGFpbkxvb2t1cChjbGllbnQsIHsgYmxvY2tOdW1iZXIsIGJsb2NrVGFnLCBkYXRhLCB0byB9KSB7CiAgICBjb25zdCB7IGFyZ3MgfSA9IGRlY29kZUVycm9yUmVzdWx0KHsKICAgICAgZGF0YSwKICAgICAgYWJpOiBbb2ZmY2hhaW5Mb29rdXBBYmlJdGVtXQogICAgfSk7CiAgICBjb25zdCBbc2VuZGVyLCB1cmxzLCBjYWxsRGF0YSwgY2FsbGJhY2tTZWxlY3RvciwgZXh0cmFEYXRhXSA9IGFyZ3M7CiAgICBjb25zdCB7IGNjaXBSZWFkIH0gPSBjbGllbnQ7CiAgICBjb25zdCBjY2lwUmVxdWVzdF8gPSBjY2lwUmVhZCAmJiB0eXBlb2YgY2NpcFJlYWQ/LnJlcXVlc3QgPT09ICJmdW5jdGlvbiIgPyBjY2lwUmVhZC5yZXF1ZXN0IDogY2NpcFJlcXVlc3Q7CiAgICB0cnkgewogICAgICBpZiAoIWlzQWRkcmVzc0VxdWFsKHRvLCBzZW5kZXIpKQogICAgICAgIHRocm93IG5ldyBPZmZjaGFpbkxvb2t1cFNlbmRlck1pc21hdGNoRXJyb3IoeyBzZW5kZXIsIHRvIH0pOwogICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjY2lwUmVxdWVzdF8oeyBkYXRhOiBjYWxsRGF0YSwgc2VuZGVyLCB1cmxzIH0pOwogICAgICBjb25zdCB7IGRhdGE6IGRhdGFfIH0gPSBhd2FpdCBjYWxsKGNsaWVudCwgewogICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgIGJsb2NrVGFnLAogICAgICAgIGRhdGE6IGNvbmNhdChbCiAgICAgICAgICBjYWxsYmFja1NlbGVjdG9yLAogICAgICAgICAgZW5jb2RlQWJpUGFyYW1ldGVycyhbeyB0eXBlOiAiYnl0ZXMiIH0sIHsgdHlwZTogImJ5dGVzIiB9XSwgW3Jlc3VsdCwgZXh0cmFEYXRhXSkKICAgICAgICBdKSwKICAgICAgICB0bwogICAgICB9KTsKICAgICAgcmV0dXJuIGRhdGFfOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIHRocm93IG5ldyBPZmZjaGFpbkxvb2t1cEVycm9yKHsKICAgICAgICBjYWxsYmFja1NlbGVjdG9yLAogICAgICAgIGNhdXNlOiBlcnIsCiAgICAgICAgZGF0YSwKICAgICAgICBleHRyYURhdGEsCiAgICAgICAgc2VuZGVyLAogICAgICAgIHVybHMKICAgICAgfSk7CiAgICB9CiAgfQogIGFzeW5jIGZ1bmN0aW9uIGNjaXBSZXF1ZXN0KHsgZGF0YSwgc2VuZGVyLCB1cmxzIH0pIHsKICAgIGxldCBlcnJvciA9IG5ldyBFcnJvcigiQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZC4iKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCB1cmwgPSB1cmxzW2ldOwogICAgICBjb25zdCBtZXRob2QgPSB1cmwuaW5jbHVkZXMoIntkYXRhfSIpID8gIkdFVCIgOiAiUE9TVCI7CiAgICAgIGNvbnN0IGJvZHkgPSBtZXRob2QgPT09ICJQT1NUIiA/IHsgZGF0YSwgc2VuZGVyIH0gOiB2b2lkIDA7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwucmVwbGFjZSgie3NlbmRlcn0iLCBzZW5kZXIpLnJlcGxhY2UoIntkYXRhfSIsIGRhdGEpLCB7CiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSwKICAgICAgICAgIG1ldGhvZAogICAgICAgIH0pOwogICAgICAgIGxldCByZXN1bHQ7CiAgICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCJDb250ZW50LVR5cGUiKT8uc3RhcnRzV2l0aCgiYXBwbGljYXRpb24vanNvbiIpKSB7CiAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKS5kYXRhOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7CiAgICAgICAgfQogICAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICAgIGVycm9yID0gbmV3IEh0dHBSZXF1ZXN0RXJyb3IoewogICAgICAgICAgICBib2R5LAogICAgICAgICAgICBkZXRhaWxzOiByZXN1bHQ/LmVycm9yID8gc3RyaW5naWZ5KHJlc3VsdC5lcnJvcikgOiByZXNwb25zZS5zdGF0dXNUZXh0LAogICAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLAogICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywKICAgICAgICAgICAgdXJsCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzSGV4KHJlc3VsdCkpIHsKICAgICAgICAgIGVycm9yID0gbmV3IE9mZmNoYWluTG9va3VwUmVzcG9uc2VNYWxmb3JtZWRFcnJvcih7CiAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgdXJsCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBlcnJvciA9IG5ldyBIdHRwUmVxdWVzdEVycm9yKHsKICAgICAgICAgIGJvZHksCiAgICAgICAgICBkZXRhaWxzOiBlcnIubWVzc2FnZSwKICAgICAgICAgIHVybAogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICB0aHJvdyBlcnJvcjsKICB9CiAgdmFyIG9mZmNoYWluTG9va3VwU2lnbmF0dXJlLCBvZmZjaGFpbkxvb2t1cEFiaUl0ZW07CiAgdmFyIGluaXRfY2NpcDIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9jY2lwLmpzIigpIHsKICAgICAgaW5pdF9jYWxsKCk7CiAgICAgIGluaXRfY2NpcCgpOwogICAgICBpbml0X3JlcXVlc3QoKTsKICAgICAgaW5pdF9kZWNvZGVFcnJvclJlc3VsdCgpOwogICAgICBpbml0X2VuY29kZUFiaVBhcmFtZXRlcnMoKTsKICAgICAgaW5pdF9pc0FkZHJlc3NFcXVhbCgpOwogICAgICBpbml0X2NvbmNhdCgpOwogICAgICBpbml0X2lzSGV4KCk7CiAgICAgIGluaXRfc3RyaW5naWZ5KCk7CiAgICAgIG9mZmNoYWluTG9va3VwU2lnbmF0dXJlID0gIjB4NTU2ZjE4MzAiOwogICAgICBvZmZjaGFpbkxvb2t1cEFiaUl0ZW0gPSB7CiAgICAgICAgbmFtZTogIk9mZmNoYWluTG9va3VwIiwKICAgICAgICB0eXBlOiAiZXJyb3IiLAogICAgICAgIGlucHV0czogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAidXJscyIsCiAgICAgICAgICAgIHR5cGU6ICJzdHJpbmdbXSIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJjYWxsRGF0YSIsCiAgICAgICAgICAgIHR5cGU6ICJieXRlcyIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJjYWxsYmFja0Z1bmN0aW9uIiwKICAgICAgICAgICAgdHlwZTogImJ5dGVzNCIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJleHRyYURhdGEiLAogICAgICAgICAgICB0eXBlOiAiYnl0ZXMiCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2NhbGwuanMKICBhc3luYyBmdW5jdGlvbiBjYWxsKGNsaWVudCwgYXJncykgewogICAgY29uc3QgeyBhY2NvdW50OiBhY2NvdW50XyA9IGNsaWVudC5hY2NvdW50LCBiYXRjaCA9IEJvb2xlYW4oY2xpZW50LmJhdGNoPy5tdWx0aWNhbGwpLCBibG9ja051bWJlciwgYmxvY2tUYWcgPSAibGF0ZXN0IiwgYWNjZXNzTGlzdCwgYmxvYnMsIGNvZGUsIGRhdGE6IGRhdGFfLCBmYWN0b3J5LCBmYWN0b3J5RGF0YSwgZ2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyQmxvYkdhcywgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbm9uY2UsIHRvLCB2YWx1ZSwgc3RhdGVPdmVycmlkZSwgLi4ucmVzdCB9ID0gYXJnczsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICBpZiAoY29kZSAmJiAoZmFjdG9yeSB8fCBmYWN0b3J5RGF0YSkpCiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJDYW5ub3QgcHJvdmlkZSBib3RoIGBjb2RlYCAmIGBmYWN0b3J5YC9gZmFjdG9yeURhdGFgIGFzIHBhcmFtZXRlcnMuIik7CiAgICBpZiAoY29kZSAmJiB0bykKICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoIkNhbm5vdCBwcm92aWRlIGJvdGggYGNvZGVgICYgYHRvYCBhcyBwYXJhbWV0ZXJzLiIpOwogICAgY29uc3QgZGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZSA9IGNvZGUgJiYgZGF0YV87CiAgICBjb25zdCBkZXBsb3lsZXNzQ2FsbFZpYUZhY3RvcnkgPSBmYWN0b3J5ICYmIGZhY3RvcnlEYXRhICYmIHRvICYmIGRhdGFfOwogICAgY29uc3QgZGVwbG95bGVzc0NhbGwgPSBkZXBsb3lsZXNzQ2FsbFZpYUJ5dGVjb2RlIHx8IGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeTsKICAgIGNvbnN0IGRhdGEgPSAoKCkgPT4gewogICAgICBpZiAoZGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZSkKICAgICAgICByZXR1cm4gdG9EZXBsb3lsZXNzQ2FsbFZpYUJ5dGVjb2RlRGF0YSh7CiAgICAgICAgICBjb2RlLAogICAgICAgICAgZGF0YTogZGF0YV8KICAgICAgICB9KTsKICAgICAgaWYgKGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeSkKICAgICAgICByZXR1cm4gdG9EZXBsb3lsZXNzQ2FsbFZpYUZhY3RvcnlEYXRhKHsKICAgICAgICAgIGRhdGE6IGRhdGFfLAogICAgICAgICAgZmFjdG9yeSwKICAgICAgICAgIGZhY3RvcnlEYXRhLAogICAgICAgICAgdG8KICAgICAgICB9KTsKICAgICAgcmV0dXJuIGRhdGFfOwogICAgfSkoKTsKICAgIHRyeSB7CiAgICAgIGFzc2VydFJlcXVlc3QoYXJncyk7CiAgICAgIGNvbnN0IGJsb2NrTnVtYmVySGV4ID0gYmxvY2tOdW1iZXIgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWc7CiAgICAgIGNvbnN0IHJwY1N0YXRlT3ZlcnJpZGUgPSBzZXJpYWxpemVTdGF0ZU92ZXJyaWRlKHN0YXRlT3ZlcnJpZGUpOwogICAgICBjb25zdCBjaGFpbkZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb25SZXF1ZXN0Py5mb3JtYXQ7CiAgICAgIGNvbnN0IGZvcm1hdCA9IGNoYWluRm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgICAgY29uc3QgcmVxdWVzdCA9IGZvcm1hdCh7CiAgICAgICAgLy8gUGljayBvdXQgZXh0cmEgZGF0YSB0aGF0IG1pZ2h0IGV4aXN0IG9uIHRoZSBjaGFpbidzIHRyYW5zYWN0aW9uIHJlcXVlc3QgdHlwZS4KICAgICAgICAuLi5leHRyYWN0KHJlc3QsIHsgZm9ybWF0OiBjaGFpbkZvcm1hdCB9KSwKICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgIGFjY2Vzc0xpc3QsCiAgICAgICAgYmxvYnMsCiAgICAgICAgZGF0YSwKICAgICAgICBnYXMsCiAgICAgICAgZ2FzUHJpY2UsCiAgICAgICAgbWF4RmVlUGVyQmxvYkdhcywKICAgICAgICBtYXhGZWVQZXJHYXMsCiAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXMsCiAgICAgICAgbm9uY2UsCiAgICAgICAgdG86IGRlcGxveWxlc3NDYWxsID8gdm9pZCAwIDogdG8sCiAgICAgICAgdmFsdWUKICAgICAgfSk7CiAgICAgIGlmIChiYXRjaCAmJiBzaG91bGRQZXJmb3JtTXVsdGljYWxsKHsgcmVxdWVzdCB9KSAmJiAhcnBjU3RhdGVPdmVycmlkZSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gYXdhaXQgc2NoZWR1bGVNdWx0aWNhbGwoY2xpZW50LCB7CiAgICAgICAgICAgIC4uLnJlcXVlc3QsCiAgICAgICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgICAgICBibG9ja1RhZwogICAgICAgICAgfSk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBDbGllbnRDaGFpbk5vdENvbmZpZ3VyZWRFcnJvcikgJiYgIShlcnIgaW5zdGFuY2VvZiBDaGFpbkRvZXNOb3RTdXBwb3J0Q29udHJhY3QpKQogICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICAgIG1ldGhvZDogImV0aF9jYWxsIiwKICAgICAgICBwYXJhbXM6IHJwY1N0YXRlT3ZlcnJpZGUgPyBbCiAgICAgICAgICByZXF1ZXN0LAogICAgICAgICAgYmxvY2ssCiAgICAgICAgICBycGNTdGF0ZU92ZXJyaWRlCiAgICAgICAgXSA6IFtyZXF1ZXN0LCBibG9ja10KICAgICAgfSk7CiAgICAgIGlmIChyZXNwb25zZSA9PT0gIjB4IikKICAgICAgICByZXR1cm4geyBkYXRhOiB2b2lkIDAgfTsKICAgICAgcmV0dXJuIHsgZGF0YTogcmVzcG9uc2UgfTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zdCBkYXRhMiA9IGdldFJldmVydEVycm9yRGF0YShlcnIpOwogICAgICBjb25zdCB7IG9mZmNoYWluTG9va3VwOiBvZmZjaGFpbkxvb2t1cDIsIG9mZmNoYWluTG9va3VwU2lnbmF0dXJlOiBvZmZjaGFpbkxvb2t1cFNpZ25hdHVyZTIgfSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gKGluaXRfY2NpcDIoKSwgY2NpcF9leHBvcnRzKSk7CiAgICAgIGlmIChjbGllbnQuY2NpcFJlYWQgIT09IGZhbHNlICYmIGRhdGEyPy5zbGljZSgwLCAxMCkgPT09IG9mZmNoYWluTG9va3VwU2lnbmF0dXJlMiAmJiB0bykKICAgICAgICByZXR1cm4geyBkYXRhOiBhd2FpdCBvZmZjaGFpbkxvb2t1cDIoY2xpZW50LCB7IGRhdGE6IGRhdGEyLCB0byB9KSB9OwogICAgICBpZiAoZGVwbG95bGVzc0NhbGwgJiYgZGF0YTI/LnNsaWNlKDAsIDEwKSA9PT0gIjB4MTAxYmI5OGQiKQogICAgICAgIHRocm93IG5ldyBDb3VudGVyZmFjdHVhbERlcGxveW1lbnRGYWlsZWRFcnJvcih7IGZhY3RvcnkgfSk7CiAgICAgIHRocm93IGdldENhbGxFcnJvcihlcnIsIHsKICAgICAgICAuLi5hcmdzLAogICAgICAgIGFjY291bnQsCiAgICAgICAgY2hhaW46IGNsaWVudC5jaGFpbgogICAgICB9KTsKICAgIH0KICB9CiAgZnVuY3Rpb24gc2hvdWxkUGVyZm9ybU11bHRpY2FsbCh7IHJlcXVlc3QgfSkgewogICAgY29uc3QgeyBkYXRhLCB0bywgLi4ucmVxdWVzdF8gfSA9IHJlcXVlc3Q7CiAgICBpZiAoIWRhdGEpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChkYXRhLnN0YXJ0c1dpdGgoYWdncmVnYXRlM1NpZ25hdHVyZSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICghdG8pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChPYmplY3QudmFsdWVzKHJlcXVlc3RfKS5maWx0ZXIoKHgpID0+IHR5cGVvZiB4ICE9PSAidW5kZWZpbmVkIikubGVuZ3RoID4gMCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgfQogIGFzeW5jIGZ1bmN0aW9uIHNjaGVkdWxlTXVsdGljYWxsKGNsaWVudCwgYXJncykgewogICAgY29uc3QgeyBiYXRjaFNpemUgPSAxMDI0LCB3YWl0OiB3YWl0MiA9IDAgfSA9IHR5cGVvZiBjbGllbnQuYmF0Y2g/Lm11bHRpY2FsbCA9PT0gIm9iamVjdCIgPyBjbGllbnQuYmF0Y2gubXVsdGljYWxsIDoge307CiAgICBjb25zdCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZyA9ICJsYXRlc3QiLCBkYXRhLCBtdWx0aWNhbGxBZGRyZXNzOiBtdWx0aWNhbGxBZGRyZXNzXywgdG8gfSA9IGFyZ3M7CiAgICBsZXQgbXVsdGljYWxsQWRkcmVzcyA9IG11bHRpY2FsbEFkZHJlc3NfOwogICAgaWYgKCFtdWx0aWNhbGxBZGRyZXNzKSB7CiAgICAgIGlmICghY2xpZW50LmNoYWluKQogICAgICAgIHRocm93IG5ldyBDbGllbnRDaGFpbk5vdENvbmZpZ3VyZWRFcnJvcigpOwogICAgICBtdWx0aWNhbGxBZGRyZXNzID0gZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoewogICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgIGNoYWluOiBjbGllbnQuY2hhaW4sCiAgICAgICAgY29udHJhY3Q6ICJtdWx0aWNhbGwzIgogICAgICB9KTsKICAgIH0KICAgIGNvbnN0IGJsb2NrTnVtYmVySGV4ID0gYmxvY2tOdW1iZXIgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICBjb25zdCBibG9jayA9IGJsb2NrTnVtYmVySGV4IHx8IGJsb2NrVGFnOwogICAgY29uc3QgeyBzY2hlZHVsZSB9ID0gY3JlYXRlQmF0Y2hTY2hlZHVsZXIoewogICAgICBpZDogYCR7Y2xpZW50LnVpZH0uJHtibG9ja31gLAogICAgICB3YWl0OiB3YWl0MiwKICAgICAgc2hvdWxkU3BsaXRCYXRjaChhcmdzMikgewogICAgICAgIGNvbnN0IHNpemUzID0gYXJnczIucmVkdWNlKChzaXplNCwgeyBkYXRhOiBkYXRhMiB9KSA9PiBzaXplNCArIChkYXRhMi5sZW5ndGggLSAyKSwgMCk7CiAgICAgICAgcmV0dXJuIHNpemUzID4gYmF0Y2hTaXplICogMjsKICAgICAgfSwKICAgICAgZm46IGFzeW5jIChyZXF1ZXN0cykgPT4gewogICAgICAgIGNvbnN0IGNhbGxzID0gcmVxdWVzdHMubWFwKChyZXF1ZXN0KSA9PiAoewogICAgICAgICAgYWxsb3dGYWlsdXJlOiB0cnVlLAogICAgICAgICAgY2FsbERhdGE6IHJlcXVlc3QuZGF0YSwKICAgICAgICAgIHRhcmdldDogcmVxdWVzdC50bwogICAgICAgIH0pKTsKICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7CiAgICAgICAgICBhYmk6IG11bHRpY2FsbDNBYmksCiAgICAgICAgICBhcmdzOiBbY2FsbHNdLAogICAgICAgICAgZnVuY3Rpb25OYW1lOiAiYWdncmVnYXRlMyIKICAgICAgICB9KTsKICAgICAgICBjb25zdCBkYXRhMiA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICAgIG1ldGhvZDogImV0aF9jYWxsIiwKICAgICAgICAgIHBhcmFtczogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZGF0YTogY2FsbGRhdGEsCiAgICAgICAgICAgICAgdG86IG11bHRpY2FsbEFkZHJlc3MKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYmxvY2sKICAgICAgICAgIF0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZGVjb2RlRnVuY3Rpb25SZXN1bHQoewogICAgICAgICAgYWJpOiBtdWx0aWNhbGwzQWJpLAogICAgICAgICAgYXJnczogW2NhbGxzXSwKICAgICAgICAgIGZ1bmN0aW9uTmFtZTogImFnZ3JlZ2F0ZTMiLAogICAgICAgICAgZGF0YTogZGF0YTIgfHwgIjB4IgogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IFt7IHJldHVybkRhdGEsIHN1Y2Nlc3MgfV0gPSBhd2FpdCBzY2hlZHVsZSh7IGRhdGEsIHRvIH0pOwogICAgaWYgKCFzdWNjZXNzKQogICAgICB0aHJvdyBuZXcgUmF3Q29udHJhY3RFcnJvcih7IGRhdGE6IHJldHVybkRhdGEgfSk7CiAgICBpZiAocmV0dXJuRGF0YSA9PT0gIjB4IikKICAgICAgcmV0dXJuIHsgZGF0YTogdm9pZCAwIH07CiAgICByZXR1cm4geyBkYXRhOiByZXR1cm5EYXRhIH07CiAgfQogIGZ1bmN0aW9uIHRvRGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZURhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBjb2RlLCBkYXRhIH0gPSBwYXJhbWV0ZXJzOwogICAgcmV0dXJuIGVuY29kZURlcGxveURhdGEoewogICAgICBhYmk6IHBhcnNlQWJpKFsiY29uc3RydWN0b3IoYnl0ZXMsIGJ5dGVzKSJdKSwKICAgICAgYnl0ZWNvZGU6IGRlcGxveWxlc3NDYWxsVmlhQnl0ZWNvZGVCeXRlY29kZSwKICAgICAgYXJnczogW2NvZGUsIGRhdGFdCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gdG9EZXBsb3lsZXNzQ2FsbFZpYUZhY3RvcnlEYXRhKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgZGF0YSwgZmFjdG9yeSwgZmFjdG9yeURhdGEsIHRvIH0gPSBwYXJhbWV0ZXJzOwogICAgcmV0dXJuIGVuY29kZURlcGxveURhdGEoewogICAgICBhYmk6IHBhcnNlQWJpKFsiY29uc3RydWN0b3IoYWRkcmVzcywgYnl0ZXMsIGFkZHJlc3MsIGJ5dGVzKSJdKSwKICAgICAgYnl0ZWNvZGU6IGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeUJ5dGVjb2RlLAogICAgICBhcmdzOiBbdG8sIGRhdGEsIGZhY3RvcnksIGZhY3RvcnlEYXRhXQogICAgfSk7CiAgfQogIGZ1bmN0aW9uIGdldFJldmVydEVycm9yRGF0YShlcnIpIHsKICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEJhc2VFcnJvcjIpKQogICAgICByZXR1cm4gdm9pZCAwOwogICAgY29uc3QgZXJyb3IgPSBlcnIud2FsaygpOwogICAgcmV0dXJuIHR5cGVvZiBlcnJvcj8uZGF0YSA9PT0gIm9iamVjdCIgPyBlcnJvci5kYXRhPy5kYXRhIDogZXJyb3IuZGF0YTsKICB9CiAgdmFyIGluaXRfY2FsbCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2NhbGwuanMiKCkgewogICAgICBpbml0X2V4cG9ydHMoKTsKICAgICAgaW5pdF9wYXJzZUFjY291bnQoKTsKICAgICAgaW5pdF9hYmlzKCk7CiAgICAgIGluaXRfY29udHJhY3QyKCk7CiAgICAgIGluaXRfY29udHJhY3RzKCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X2NoYWluKCk7CiAgICAgIGluaXRfY29udHJhY3QoKTsKICAgICAgaW5pdF9kZWNvZGVGdW5jdGlvblJlc3VsdCgpOwogICAgICBpbml0X2VuY29kZURlcGxveURhdGEoKTsKICAgICAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICAgICAgaW5pdF9nZXRDaGFpbkNvbnRyYWN0QWRkcmVzcygpOwogICAgICBpbml0X3RvSGV4KCk7CiAgICAgIGluaXRfZ2V0Q2FsbEVycm9yKCk7CiAgICAgIGluaXRfZXh0cmFjdCgpOwogICAgICBpbml0X3RyYW5zYWN0aW9uUmVxdWVzdCgpOwogICAgICBpbml0X2NyZWF0ZUJhdGNoU2NoZWR1bGVyKCk7CiAgICAgIGluaXRfc3RhdGVPdmVycmlkZTIoKTsKICAgICAgaW5pdF9hc3NlcnRSZXF1ZXN0KCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9pc293cy9fZXNtL3V0aWxzLmpzCiAgZnVuY3Rpb24gZ2V0TmF0aXZlV2ViU29ja2V0KCkgewogICAgaWYgKHR5cGVvZiBXZWJTb2NrZXQgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gV2ViU29ja2V0OwogICAgaWYgKHR5cGVvZiBnbG9iYWwuV2ViU29ja2V0ICE9PSAidW5kZWZpbmVkIikKICAgICAgcmV0dXJuIGdsb2JhbC5XZWJTb2NrZXQ7CiAgICBpZiAodHlwZW9mIHdpbmRvdy5XZWJTb2NrZXQgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gd2luZG93LldlYlNvY2tldDsKICAgIGlmICh0eXBlb2Ygc2VsZi5XZWJTb2NrZXQgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gc2VsZi5XZWJTb2NrZXQ7CiAgICB0aHJvdyBuZXcgRXJyb3IoImBXZWJTb2NrZXRgIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudCIpOwogIH0KICB2YXIgaW5pdF91dGlsczUgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2lzb3dzL19lc20vdXRpbHMuanMiKCkgewogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvaXNvd3MvX2VzbS9uYXRpdmUuanMKICB2YXIgbmF0aXZlX2V4cG9ydHMgPSB7fTsKICBfX2V4cG9ydChuYXRpdmVfZXhwb3J0cywgewogICAgV2ViU29ja2V0OiAoKSA9PiBXZWJTb2NrZXQyCiAgfSk7CiAgdmFyIFdlYlNvY2tldDI7CiAgdmFyIGluaXRfbmF0aXZlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9pc293cy9fZXNtL25hdGl2ZS5qcyIoKSB7CiAgICAgIGluaXRfdXRpbHM1KCk7CiAgICAgIFdlYlNvY2tldDIgPSBnZXROYXRpdmVXZWJTb2NrZXQoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9pbmRleC5qcwogIHZhciBlc21fZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KGVzbV9leHBvcnRzLCB7CiAgICBBYmlDb25zdHJ1Y3Rvck5vdEZvdW5kRXJyb3I6ICgpID0+IEFiaUNvbnN0cnVjdG9yTm90Rm91bmRFcnJvciwKICAgIEFiaUNvbnN0cnVjdG9yUGFyYW1zTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yLAogICAgQWJpRGVjb2RpbmdEYXRhU2l6ZUludmFsaWRFcnJvcjogKCkgPT4gQWJpRGVjb2RpbmdEYXRhU2l6ZUludmFsaWRFcnJvciwKICAgIEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yOiAoKSA9PiBBYmlEZWNvZGluZ0RhdGFTaXplVG9vU21hbGxFcnJvciwKICAgIEFiaURlY29kaW5nWmVyb0RhdGFFcnJvcjogKCkgPT4gQWJpRGVjb2RpbmdaZXJvRGF0YUVycm9yLAogICAgQWJpRW5jb2RpbmdBcnJheUxlbmd0aE1pc21hdGNoRXJyb3I6ICgpID0+IEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yLAogICAgQWJpRW5jb2RpbmdCeXRlc1NpemVNaXNtYXRjaEVycm9yOiAoKSA9PiBBYmlFbmNvZGluZ0J5dGVzU2l6ZU1pc21hdGNoRXJyb3IsCiAgICBBYmlFbmNvZGluZ0xlbmd0aE1pc21hdGNoRXJyb3I6ICgpID0+IEFiaUVuY29kaW5nTGVuZ3RoTWlzbWF0Y2hFcnJvciwKICAgIEFiaUVycm9ySW5wdXRzTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yLAogICAgQWJpRXJyb3JOb3RGb3VuZEVycm9yOiAoKSA9PiBBYmlFcnJvck5vdEZvdW5kRXJyb3IsCiAgICBBYmlFcnJvclNpZ25hdHVyZU5vdEZvdW5kRXJyb3I6ICgpID0+IEFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvciwKICAgIEFiaUV2ZW50Tm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRXZlbnROb3RGb3VuZEVycm9yLAogICAgQWJpRXZlbnRTaWduYXR1cmVFbXB0eVRvcGljc0Vycm9yOiAoKSA9PiBBYmlFdmVudFNpZ25hdHVyZUVtcHR5VG9waWNzRXJyb3IsCiAgICBBYmlFdmVudFNpZ25hdHVyZU5vdEZvdW5kRXJyb3I6ICgpID0+IEFiaUV2ZW50U2lnbmF0dXJlTm90Rm91bmRFcnJvciwKICAgIEFiaUZ1bmN0aW9uTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yLAogICAgQWJpRnVuY3Rpb25PdXRwdXRzTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRnVuY3Rpb25PdXRwdXRzTm90Rm91bmRFcnJvciwKICAgIEFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRnVuY3Rpb25TaWduYXR1cmVOb3RGb3VuZEVycm9yLAogICAgQWNjb3VudFN0YXRlQ29uZmxpY3RFcnJvcjogKCkgPT4gQWNjb3VudFN0YXRlQ29uZmxpY3RFcnJvciwKICAgIEJhc2VFcnJvcjogKCkgPT4gQmFzZUVycm9yMiwKICAgIEJhc2VGZWVTY2FsYXJFcnJvcjogKCkgPT4gQmFzZUZlZVNjYWxhckVycm9yLAogICAgQmxvY2tOb3RGb3VuZEVycm9yOiAoKSA9PiBCbG9ja05vdEZvdW5kRXJyb3IsCiAgICBCeXRlc1NpemVNaXNtYXRjaEVycm9yOiAoKSA9PiBCeXRlc1NpemVNaXNtYXRjaEVycm9yLAogICAgQ2FsbEV4ZWN1dGlvbkVycm9yOiAoKSA9PiBDYWxsRXhlY3V0aW9uRXJyb3IsCiAgICBDaGFpbkRpc2Nvbm5lY3RlZEVycm9yOiAoKSA9PiBDaGFpbkRpc2Nvbm5lY3RlZEVycm9yLAogICAgQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0OiAoKSA9PiBDaGFpbkRvZXNOb3RTdXBwb3J0Q29udHJhY3QsCiAgICBDaGFpbk1pc21hdGNoRXJyb3I6ICgpID0+IENoYWluTWlzbWF0Y2hFcnJvciwKICAgIENoYWluTm90Rm91bmRFcnJvcjogKCkgPT4gQ2hhaW5Ob3RGb3VuZEVycm9yLAogICAgQ2lyY3VsYXJSZWZlcmVuY2VFcnJvcjogKCkgPT4gQ2lyY3VsYXJSZWZlcmVuY2VFcnJvciwKICAgIENsaWVudENoYWluTm90Q29uZmlndXJlZEVycm9yOiAoKSA9PiBDbGllbnRDaGFpbk5vdENvbmZpZ3VyZWRFcnJvciwKICAgIENvbnRyYWN0RnVuY3Rpb25FeGVjdXRpb25FcnJvcjogKCkgPT4gQ29udHJhY3RGdW5jdGlvbkV4ZWN1dGlvbkVycm9yLAogICAgQ29udHJhY3RGdW5jdGlvblJldmVydGVkRXJyb3I6ICgpID0+IENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yLAogICAgQ29udHJhY3RGdW5jdGlvblplcm9EYXRhRXJyb3I6ICgpID0+IENvbnRyYWN0RnVuY3Rpb25aZXJvRGF0YUVycm9yLAogICAgQ291bnRlcmZhY3R1YWxEZXBsb3ltZW50RmFpbGVkRXJyb3I6ICgpID0+IENvdW50ZXJmYWN0dWFsRGVwbG95bWVudEZhaWxlZEVycm9yLAogICAgRGVjb2RlTG9nRGF0YU1pc21hdGNoOiAoKSA9PiBEZWNvZGVMb2dEYXRhTWlzbWF0Y2gsCiAgICBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaDogKCkgPT4gRGVjb2RlTG9nVG9waWNzTWlzbWF0Y2gsCiAgICBFSVAxMTkzUHJvdmlkZXJScGNFcnJvcjogKCkgPT4gUHJvdmlkZXJScGNFcnJvcjIsCiAgICBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yOiAoKSA9PiBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yLAogICAgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yOiAoKSA9PiBFbnNBdmF0YXJJbnZhbGlkTmZ0VXJpRXJyb3IsCiAgICBFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yOiAoKSA9PiBFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yLAogICAgRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yOiAoKSA9PiBFbnNBdmF0YXJVcmlSZXNvbHV0aW9uRXJyb3IsCiAgICBFc3RpbWF0ZUdhc0V4ZWN1dGlvbkVycm9yOiAoKSA9PiBFc3RpbWF0ZUdhc0V4ZWN1dGlvbkVycm9yLAogICAgRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvcjogKCkgPT4gRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvciwKICAgIEZlZUNhcFRvb0hpZ2hFcnJvcjogKCkgPT4gRmVlQ2FwVG9vSGlnaEVycm9yLAogICAgRmVlQ2FwVG9vTG93RXJyb3I6ICgpID0+IEZlZUNhcFRvb0xvd0Vycm9yLAogICAgRmVlQ29uZmxpY3RFcnJvcjogKCkgPT4gRmVlQ29uZmxpY3RFcnJvciwKICAgIEZpbHRlclR5cGVOb3RTdXBwb3J0ZWRFcnJvcjogKCkgPT4gRmlsdGVyVHlwZU5vdFN1cHBvcnRlZEVycm9yLAogICAgSHR0cFJlcXVlc3RFcnJvcjogKCkgPT4gSHR0cFJlcXVlc3RFcnJvciwKICAgIEluc3VmZmljaWVudEZ1bmRzRXJyb3I6ICgpID0+IEluc3VmZmljaWVudEZ1bmRzRXJyb3IsCiAgICBJbnRlZ2VyT3V0T2ZSYW5nZUVycm9yOiAoKSA9PiBJbnRlZ2VyT3V0T2ZSYW5nZUVycm9yLAogICAgSW50ZXJuYWxScGNFcnJvcjogKCkgPT4gSW50ZXJuYWxScGNFcnJvciwKICAgIEludHJpbnNpY0dhc1Rvb0hpZ2hFcnJvcjogKCkgPT4gSW50cmluc2ljR2FzVG9vSGlnaEVycm9yLAogICAgSW50cmluc2ljR2FzVG9vTG93RXJyb3I6ICgpID0+IEludHJpbnNpY0dhc1Rvb0xvd0Vycm9yLAogICAgSW52YWxpZEFiaURlY29kaW5nVHlwZUVycm9yOiAoKSA9PiBJbnZhbGlkQWJpRGVjb2RpbmdUeXBlRXJyb3IsCiAgICBJbnZhbGlkQWJpRW5jb2RpbmdUeXBlRXJyb3I6ICgpID0+IEludmFsaWRBYmlFbmNvZGluZ1R5cGVFcnJvciwKICAgIEludmFsaWRBYmlJdGVtRXJyb3I6ICgpID0+IEludmFsaWRBYmlJdGVtRXJyb3IsCiAgICBJbnZhbGlkQWJpUGFyYW1ldGVyRXJyb3I6ICgpID0+IEludmFsaWRBYmlQYXJhbWV0ZXJFcnJvciwKICAgIEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3I6ICgpID0+IEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3IsCiAgICBJbnZhbGlkQWJpVHlwZVBhcmFtZXRlckVycm9yOiAoKSA9PiBJbnZhbGlkQWJpVHlwZVBhcmFtZXRlckVycm9yLAogICAgSW52YWxpZEFkZHJlc3NFcnJvcjogKCkgPT4gSW52YWxpZEFkZHJlc3NFcnJvciwKICAgIEludmFsaWRBcnJheUVycm9yOiAoKSA9PiBJbnZhbGlkQXJyYXlFcnJvciwKICAgIEludmFsaWRCeXRlc0Jvb2xlYW5FcnJvcjogKCkgPT4gSW52YWxpZEJ5dGVzQm9vbGVhbkVycm9yLAogICAgSW52YWxpZENoYWluSWRFcnJvcjogKCkgPT4gSW52YWxpZENoYWluSWRFcnJvciwKICAgIEludmFsaWREZWZpbml0aW9uVHlwZUVycm9yOiAoKSA9PiBJbnZhbGlkRGVmaW5pdGlvblR5cGVFcnJvciwKICAgIEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3I6ICgpID0+IEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3IsCiAgICBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yOiAoKSA9PiBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yLAogICAgSW52YWxpZEhleFZhbHVlRXJyb3I6ICgpID0+IEludmFsaWRIZXhWYWx1ZUVycm9yLAogICAgSW52YWxpZElucHV0UnBjRXJyb3I6ICgpID0+IEludmFsaWRJbnB1dFJwY0Vycm9yLAogICAgSW52YWxpZExlZ2FjeVZFcnJvcjogKCkgPT4gSW52YWxpZExlZ2FjeVZFcnJvciwKICAgIEludmFsaWRNb2RpZmllckVycm9yOiAoKSA9PiBJbnZhbGlkTW9kaWZpZXJFcnJvciwKICAgIEludmFsaWRQYXJhbWV0ZXJFcnJvcjogKCkgPT4gSW52YWxpZFBhcmFtZXRlckVycm9yLAogICAgSW52YWxpZFBhcmFtc1JwY0Vycm9yOiAoKSA9PiBJbnZhbGlkUGFyYW1zUnBjRXJyb3IsCiAgICBJbnZhbGlkUGFyZW50aGVzaXNFcnJvcjogKCkgPT4gSW52YWxpZFBhcmVudGhlc2lzRXJyb3IsCiAgICBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yOiAoKSA9PiBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yLAogICAgSW52YWxpZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uRXJyb3I6ICgpID0+IEludmFsaWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbkVycm9yLAogICAgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yOiAoKSA9PiBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uRXJyb3IsCiAgICBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uVHlwZUVycm9yOiAoKSA9PiBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uVHlwZUVycm9yLAogICAgSW52YWxpZFNpZ25hdHVyZUVycm9yOiAoKSA9PiBJbnZhbGlkU2lnbmF0dXJlRXJyb3IsCiAgICBJbnZhbGlkU3RvcmFnZUtleVNpemVFcnJvcjogKCkgPT4gSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IsCiAgICBJbnZhbGlkU3RydWN0U2lnbmF0dXJlRXJyb3I6ICgpID0+IEludmFsaWRTdHJ1Y3RTaWduYXR1cmVFcnJvciwKICAgIEpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvcjogKCkgPT4gSnNvblJwY1ZlcnNpb25VbnN1cHBvcnRlZEVycm9yLAogICAgTGltaXRFeGNlZWRlZFJwY0Vycm9yOiAoKSA9PiBMaW1pdEV4Y2VlZGVkUnBjRXJyb3IsCiAgICBNYXhGZWVQZXJHYXNUb29Mb3dFcnJvcjogKCkgPT4gTWF4RmVlUGVyR2FzVG9vTG93RXJyb3IsCiAgICBNZXRob2ROb3RGb3VuZFJwY0Vycm9yOiAoKSA9PiBNZXRob2ROb3RGb3VuZFJwY0Vycm9yLAogICAgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3I6ICgpID0+IE1ldGhvZE5vdFN1cHBvcnRlZFJwY0Vycm9yLAogICAgTm9uY2VNYXhWYWx1ZUVycm9yOiAoKSA9PiBOb25jZU1heFZhbHVlRXJyb3IsCiAgICBOb25jZVRvb0hpZ2hFcnJvcjogKCkgPT4gTm9uY2VUb29IaWdoRXJyb3IsCiAgICBOb25jZVRvb0xvd0Vycm9yOiAoKSA9PiBOb25jZVRvb0xvd0Vycm9yLAogICAgUGFyc2VScGNFcnJvcjogKCkgPT4gUGFyc2VScGNFcnJvciwKICAgIFByb3ZpZGVyRGlzY29ubmVjdGVkRXJyb3I6ICgpID0+IFByb3ZpZGVyRGlzY29ubmVjdGVkRXJyb3IsCiAgICBQcm92aWRlclJwY0Vycm9yOiAoKSA9PiBQcm92aWRlclJwY0Vycm9yLAogICAgUmF3Q29udHJhY3RFcnJvcjogKCkgPT4gUmF3Q29udHJhY3RFcnJvciwKICAgIFJlc291cmNlTm90Rm91bmRScGNFcnJvcjogKCkgPT4gUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yLAogICAgUmVzb3VyY2VVbmF2YWlsYWJsZVJwY0Vycm9yOiAoKSA9PiBSZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IsCiAgICBScGNFcnJvcjogKCkgPT4gUnBjRXJyb3IsCiAgICBScGNSZXF1ZXN0RXJyb3I6ICgpID0+IFJwY1JlcXVlc3RFcnJvciwKICAgIFNpemVFeGNlZWRzUGFkZGluZ1NpemVFcnJvcjogKCkgPT4gU2l6ZUV4Y2VlZHNQYWRkaW5nU2l6ZUVycm9yLAogICAgU2l6ZU92ZXJmbG93RXJyb3I6ICgpID0+IFNpemVPdmVyZmxvd0Vycm9yLAogICAgU2xpY2VPZmZzZXRPdXRPZkJvdW5kc0Vycm9yOiAoKSA9PiBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IsCiAgICBTb2NrZXRDbG9zZWRFcnJvcjogKCkgPT4gU29ja2V0Q2xvc2VkRXJyb3IsCiAgICBTb2xpZGl0eVByb3RlY3RlZEtleXdvcmRFcnJvcjogKCkgPT4gU29saWRpdHlQcm90ZWN0ZWRLZXl3b3JkRXJyb3IsCiAgICBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yOiAoKSA9PiBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yLAogICAgU3dpdGNoQ2hhaW5FcnJvcjogKCkgPT4gU3dpdGNoQ2hhaW5FcnJvciwKICAgIFRpbWVvdXRFcnJvcjogKCkgPT4gVGltZW91dEVycm9yLAogICAgVGlwQWJvdmVGZWVDYXBFcnJvcjogKCkgPT4gVGlwQWJvdmVGZWVDYXBFcnJvciwKICAgIFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IsCiAgICBUcmFuc2FjdGlvbk5vdEZvdW5kRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uTm90Rm91bmRFcnJvciwKICAgIFRyYW5zYWN0aW9uUmVjZWlwdE5vdEZvdW5kRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uUmVjZWlwdE5vdEZvdW5kRXJyb3IsCiAgICBUcmFuc2FjdGlvblJlamVjdGVkUnBjRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvciwKICAgIFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yOiAoKSA9PiBUcmFuc2FjdGlvblR5cGVOb3RTdXBwb3J0ZWRFcnJvciwKICAgIFVuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3I6ICgpID0+IFVuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IsCiAgICBVbmtub3duTm9kZUVycm9yOiAoKSA9PiBVbmtub3duTm9kZUVycm9yLAogICAgVW5rbm93blJwY0Vycm9yOiAoKSA9PiBVbmtub3duUnBjRXJyb3IsCiAgICBVbmtub3duU2lnbmF0dXJlRXJyb3I6ICgpID0+IFVua25vd25TaWduYXR1cmVFcnJvciwKICAgIFVua25vd25UeXBlRXJyb3I6ICgpID0+IFVua25vd25UeXBlRXJyb3IsCiAgICBVbnN1cHBvcnRlZFBhY2tlZEFiaVR5cGU6ICgpID0+IFVuc3VwcG9ydGVkUGFja2VkQWJpVHlwZSwKICAgIFVuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvcjogKCkgPT4gVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLAogICAgVXJsUmVxdWlyZWRFcnJvcjogKCkgPT4gVXJsUmVxdWlyZWRFcnJvciwKICAgIFVzZXJSZWplY3RlZFJlcXVlc3RFcnJvcjogKCkgPT4gVXNlclJlamVjdGVkUmVxdWVzdEVycm9yLAogICAgV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvcjogKCkgPT4gV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvciwKICAgIFdlYlNvY2tldFJlcXVlc3RFcnJvcjogKCkgPT4gV2ViU29ja2V0UmVxdWVzdEVycm9yLAogICAgYXNzZXJ0Q3VycmVudENoYWluOiAoKSA9PiBhc3NlcnRDdXJyZW50Q2hhaW4sCiAgICBhc3NlcnRSZXF1ZXN0OiAoKSA9PiBhc3NlcnRSZXF1ZXN0LAogICAgYXNzZXJ0VHJhbnNhY3Rpb25FSVAxNTU5OiAoKSA9PiBhc3NlcnRUcmFuc2FjdGlvbkVJUDE1NTksCiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDI5MzA6ICgpID0+IGFzc2VydFRyYW5zYWN0aW9uRUlQMjkzMCwKICAgIGFzc2VydFRyYW5zYWN0aW9uTGVnYWN5OiAoKSA9PiBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSwKICAgIGJsb2JzVG9Db21taXRtZW50czogKCkgPT4gYmxvYnNUb0NvbW1pdG1lbnRzLAogICAgYmxvYnNUb1Byb29mczogKCkgPT4gYmxvYnNUb1Byb29mcywKICAgIGJvb2xUb0J5dGVzOiAoKSA9PiBib29sVG9CeXRlcywKICAgIGJvb2xUb0hleDogKCkgPT4gYm9vbFRvSGV4LAogICAgYnl0ZXNUb0JpZ0ludDogKCkgPT4gYnl0ZXNUb0JpZ0ludCwKICAgIGJ5dGVzVG9Cb29sOiAoKSA9PiBieXRlc1RvQm9vbCwKICAgIGJ5dGVzVG9IZXg6ICgpID0+IGJ5dGVzVG9IZXgsCiAgICBieXRlc1RvTnVtYmVyOiAoKSA9PiBieXRlc1RvTnVtYmVyLAogICAgYnl0ZXNUb1JscDogKCkgPT4gYnl0ZXNUb1JscCwKICAgIGJ5dGVzVG9TdHJpbmc6ICgpID0+IGJ5dGVzVG9TdHJpbmcsCiAgICBjY2lwRmV0Y2g6ICgpID0+IGNjaXBSZXF1ZXN0LAogICAgY2NpcFJlcXVlc3Q6ICgpID0+IGNjaXBSZXF1ZXN0LAogICAgY2hlY2tzdW1BZGRyZXNzOiAoKSA9PiBjaGVja3N1bUFkZHJlc3MsCiAgICBjb21taXRtZW50VG9WZXJzaW9uZWRIYXNoOiAoKSA9PiBjb21taXRtZW50VG9WZXJzaW9uZWRIYXNoLAogICAgY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlczogKCkgPT4gY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlcywKICAgIGNvbXBhY3RTaWduYXR1cmVUb0hleDogKCkgPT4gc2VyaWFsaXplQ29tcGFjdFNpZ25hdHVyZSwKICAgIGNvbXBhY3RTaWduYXR1cmVUb1NpZ25hdHVyZTogKCkgPT4gY29tcGFjdFNpZ25hdHVyZVRvU2lnbmF0dXJlLAogICAgY29uY2F0OiAoKSA9PiBjb25jYXQsCiAgICBjb25jYXRCeXRlczogKCkgPT4gY29uY2F0Qnl0ZXMyLAogICAgY29uY2F0SGV4OiAoKSA9PiBjb25jYXRIZXgsCiAgICBjcmVhdGVDbGllbnQ6ICgpID0+IGNyZWF0ZUNsaWVudCwKICAgIGNyZWF0ZU5vbmNlTWFuYWdlcjogKCkgPT4gY3JlYXRlTm9uY2VNYW5hZ2VyLAogICAgY3JlYXRlUHVibGljQ2xpZW50OiAoKSA9PiBjcmVhdGVQdWJsaWNDbGllbnQsCiAgICBjcmVhdGVUZXN0Q2xpZW50OiAoKSA9PiBjcmVhdGVUZXN0Q2xpZW50LAogICAgY3JlYXRlVHJhbnNwb3J0OiAoKSA9PiBjcmVhdGVUcmFuc3BvcnQsCiAgICBjcmVhdGVXYWxsZXRDbGllbnQ6ICgpID0+IGNyZWF0ZVdhbGxldENsaWVudCwKICAgIGN1c3RvbTogKCkgPT4gY3VzdG9tLAogICAgZGVjb2RlQWJpUGFyYW1ldGVyczogKCkgPT4gZGVjb2RlQWJpUGFyYW1ldGVycywKICAgIGRlY29kZURlcGxveURhdGE6ICgpID0+IGRlY29kZURlcGxveURhdGEsCiAgICBkZWNvZGVFcnJvclJlc3VsdDogKCkgPT4gZGVjb2RlRXJyb3JSZXN1bHQsCiAgICBkZWNvZGVFdmVudExvZzogKCkgPT4gZGVjb2RlRXZlbnRMb2csCiAgICBkZWNvZGVGdW5jdGlvbkRhdGE6ICgpID0+IGRlY29kZUZ1bmN0aW9uRGF0YSwKICAgIGRlY29kZUZ1bmN0aW9uUmVzdWx0OiAoKSA9PiBkZWNvZGVGdW5jdGlvblJlc3VsdCwKICAgIGRlZmluZUJsb2NrOiAoKSA9PiBkZWZpbmVCbG9jaywKICAgIGRlZmluZUNoYWluOiAoKSA9PiBkZWZpbmVDaGFpbiwKICAgIGRlZmluZUt6ZzogKCkgPT4gZGVmaW5lS3pnLAogICAgZGVmaW5lVHJhbnNhY3Rpb246ICgpID0+IGRlZmluZVRyYW5zYWN0aW9uLAogICAgZGVmaW5lVHJhbnNhY3Rpb25SZWNlaXB0OiAoKSA9PiBkZWZpbmVUcmFuc2FjdGlvblJlY2VpcHQsCiAgICBkZWZpbmVUcmFuc2FjdGlvblJlcXVlc3Q6ICgpID0+IGRlZmluZVRyYW5zYWN0aW9uUmVxdWVzdCwKICAgIGRlcGxveWxlc3NDYWxsVmlhQnl0ZWNvZGVCeXRlY29kZTogKCkgPT4gZGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZUJ5dGVjb2RlLAogICAgZGVwbG95bGVzc0NhbGxWaWFGYWN0b3J5Qnl0ZWNvZGU6ICgpID0+IGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeUJ5dGVjb2RlLAogICAgZG9tYWluU2VwYXJhdG9yOiAoKSA9PiBkb21haW5TZXBhcmF0b3IsCiAgICBlbmNvZGVBYmlQYXJhbWV0ZXJzOiAoKSA9PiBlbmNvZGVBYmlQYXJhbWV0ZXJzLAogICAgZW5jb2RlRGVwbG95RGF0YTogKCkgPT4gZW5jb2RlRGVwbG95RGF0YSwKICAgIGVuY29kZUVycm9yUmVzdWx0OiAoKSA9PiBlbmNvZGVFcnJvclJlc3VsdCwKICAgIGVuY29kZUV2ZW50VG9waWNzOiAoKSA9PiBlbmNvZGVFdmVudFRvcGljcywKICAgIGVuY29kZUZ1bmN0aW9uRGF0YTogKCkgPT4gZW5jb2RlRnVuY3Rpb25EYXRhLAogICAgZW5jb2RlRnVuY3Rpb25SZXN1bHQ6ICgpID0+IGVuY29kZUZ1bmN0aW9uUmVzdWx0LAogICAgZW5jb2RlUGFja2VkOiAoKSA9PiBlbmNvZGVQYWNrZWQsCiAgICBlcmMyMEFiaTogKCkgPT4gZXJjMjBBYmksCiAgICBlcmMyMEFiaV9ieXRlczMyOiAoKSA9PiBlcmMyMEFiaV9ieXRlczMyLAogICAgZXJjNDYyNkFiaTogKCkgPT4gZXJjNDYyNkFiaSwKICAgIGVyYzcyMUFiaTogKCkgPT4gZXJjNzIxQWJpLAogICAgZXRoZXJVbml0czogKCkgPT4gZXRoZXJVbml0cywKICAgIGV4dHJhY3RDaGFpbjogKCkgPT4gZXh0cmFjdENoYWluLAogICAgZmFsbGJhY2s6ICgpID0+IGZhbGxiYWNrLAogICAgZm9ybWF0QmxvY2s6ICgpID0+IGZvcm1hdEJsb2NrLAogICAgZm9ybWF0RXRoZXI6ICgpID0+IGZvcm1hdEV0aGVyLAogICAgZm9ybWF0R3dlaTogKCkgPT4gZm9ybWF0R3dlaSwKICAgIGZvcm1hdExvZzogKCkgPT4gZm9ybWF0TG9nLAogICAgZm9ybWF0VHJhbnNhY3Rpb246ICgpID0+IGZvcm1hdFRyYW5zYWN0aW9uLAogICAgZm9ybWF0VHJhbnNhY3Rpb25SZWNlaXB0OiAoKSA9PiBmb3JtYXRUcmFuc2FjdGlvblJlY2VpcHQsCiAgICBmb3JtYXRUcmFuc2FjdGlvblJlcXVlc3Q6ICgpID0+IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdCwKICAgIGZvcm1hdFVuaXRzOiAoKSA9PiBmb3JtYXRVbml0cywKICAgIGZyb21CbG9iczogKCkgPT4gZnJvbUJsb2JzLAogICAgZnJvbUJ5dGVzOiAoKSA9PiBmcm9tQnl0ZXMsCiAgICBmcm9tSGV4OiAoKSA9PiBmcm9tSGV4LAogICAgZnJvbVJscDogKCkgPT4gZnJvbVJscCwKICAgIGdldEFiaUl0ZW06ICgpID0+IGdldEFiaUl0ZW0sCiAgICBnZXRBZGRyZXNzOiAoKSA9PiBnZXRBZGRyZXNzLAogICAgZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3M6ICgpID0+IGdldENoYWluQ29udHJhY3RBZGRyZXNzLAogICAgZ2V0Q29udHJhY3Q6ICgpID0+IGdldENvbnRyYWN0LAogICAgZ2V0Q29udHJhY3RBZGRyZXNzOiAoKSA9PiBnZXRDb250cmFjdEFkZHJlc3MyLAogICAgZ2V0Q29udHJhY3RFcnJvcjogKCkgPT4gZ2V0Q29udHJhY3RFcnJvciwKICAgIGdldENyZWF0ZTJBZGRyZXNzOiAoKSA9PiBnZXRDcmVhdGUyQWRkcmVzcywKICAgIGdldENyZWF0ZUFkZHJlc3M6ICgpID0+IGdldENyZWF0ZUFkZHJlc3MsCiAgICBnZXRFdmVudFNlbGVjdG9yOiAoKSA9PiB0b0V2ZW50U2VsZWN0b3IsCiAgICBnZXRFdmVudFNpZ25hdHVyZTogKCkgPT4gdG9TaWduYXR1cmUsCiAgICBnZXRGdW5jdGlvblNlbGVjdG9yOiAoKSA9PiB0b0Z1bmN0aW9uU2VsZWN0b3IsCiAgICBnZXRGdW5jdGlvblNpZ25hdHVyZTogKCkgPT4gdG9TaWduYXR1cmUsCiAgICBnZXRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlOiAoKSA9PiBnZXRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlLAogICAgZ2V0VHJhbnNhY3Rpb25UeXBlOiAoKSA9PiBnZXRUcmFuc2FjdGlvblR5cGUsCiAgICBnZXRUeXBlc0ZvckVJUDcxMkRvbWFpbjogKCkgPT4gZ2V0VHlwZXNGb3JFSVA3MTJEb21haW4sCiAgICBnd2VpVW5pdHM6ICgpID0+IGd3ZWlVbml0cywKICAgIGhhc2hEb21haW46ICgpID0+IGhhc2hEb21haW4sCiAgICBoYXNoTWVzc2FnZTogKCkgPT4gaGFzaE1lc3NhZ2UsCiAgICBoYXNoVHlwZWREYXRhOiAoKSA9PiBoYXNoVHlwZWREYXRhLAogICAgaGV4VG9CaWdJbnQ6ICgpID0+IGhleFRvQmlnSW50LAogICAgaGV4VG9Cb29sOiAoKSA9PiBoZXhUb0Jvb2wsCiAgICBoZXhUb0J5dGVzOiAoKSA9PiBoZXhUb0J5dGVzLAogICAgaGV4VG9Db21wYWN0U2lnbmF0dXJlOiAoKSA9PiBwYXJzZUNvbXBhY3RTaWduYXR1cmUsCiAgICBoZXhUb051bWJlcjogKCkgPT4gaGV4VG9OdW1iZXIsCiAgICBoZXhUb1JscDogKCkgPT4gaGV4VG9SbHAsCiAgICBoZXhUb1NpZ25hdHVyZTogKCkgPT4gcGFyc2VTaWduYXR1cmUyLAogICAgaGV4VG9TdHJpbmc6ICgpID0+IGhleFRvU3RyaW5nLAogICAgaHR0cDogKCkgPT4gaHR0cCwKICAgIGlzQWRkcmVzczogKCkgPT4gaXNBZGRyZXNzLAogICAgaXNBZGRyZXNzRXF1YWw6ICgpID0+IGlzQWRkcmVzc0VxdWFsLAogICAgaXNCeXRlczogKCkgPT4gaXNCeXRlczMsCiAgICBpc0VyYzY0OTJTaWduYXR1cmU6ICgpID0+IGlzRXJjNjQ5MlNpZ25hdHVyZSwKICAgIGlzSGFzaDogKCkgPT4gaXNIYXNoLAogICAgaXNIZXg6ICgpID0+IGlzSGV4LAogICAga2VjY2FrMjU2OiAoKSA9PiBrZWNjYWsyNTYsCiAgICBsYWJlbGhhc2g6ICgpID0+IGxhYmVsaGFzaCwKICAgIG1heEludDEwNDogKCkgPT4gbWF4SW50MTA0LAogICAgbWF4SW50MTEyOiAoKSA9PiBtYXhJbnQxMTIsCiAgICBtYXhJbnQxMjA6ICgpID0+IG1heEludDEyMCwKICAgIG1heEludDEyODogKCkgPT4gbWF4SW50MTI4LAogICAgbWF4SW50MTM2OiAoKSA9PiBtYXhJbnQxMzYsCiAgICBtYXhJbnQxNDQ6ICgpID0+IG1heEludDE0NCwKICAgIG1heEludDE1MjogKCkgPT4gbWF4SW50MTUyLAogICAgbWF4SW50MTY6ICgpID0+IG1heEludDE2LAogICAgbWF4SW50MTYwOiAoKSA9PiBtYXhJbnQxNjAsCiAgICBtYXhJbnQxNjg6ICgpID0+IG1heEludDE2OCwKICAgIG1heEludDE3NjogKCkgPT4gbWF4SW50MTc2LAogICAgbWF4SW50MTg0OiAoKSA9PiBtYXhJbnQxODQsCiAgICBtYXhJbnQxOTI6ICgpID0+IG1heEludDE5MiwKICAgIG1heEludDIwMDogKCkgPT4gbWF4SW50MjAwLAogICAgbWF4SW50MjA4OiAoKSA9PiBtYXhJbnQyMDgsCiAgICBtYXhJbnQyMTY6ICgpID0+IG1heEludDIxNiwKICAgIG1heEludDIyNDogKCkgPT4gbWF4SW50MjI0LAogICAgbWF4SW50MjMyOiAoKSA9PiBtYXhJbnQyMzIsCiAgICBtYXhJbnQyNDogKCkgPT4gbWF4SW50MjQsCiAgICBtYXhJbnQyNDA6ICgpID0+IG1heEludDI0MCwKICAgIG1heEludDI0ODogKCkgPT4gbWF4SW50MjQ4LAogICAgbWF4SW50MjU2OiAoKSA9PiBtYXhJbnQyNTYsCiAgICBtYXhJbnQzMjogKCkgPT4gbWF4SW50MzIsCiAgICBtYXhJbnQ0MDogKCkgPT4gbWF4SW50NDAsCiAgICBtYXhJbnQ0ODogKCkgPT4gbWF4SW50NDgsCiAgICBtYXhJbnQ1NjogKCkgPT4gbWF4SW50NTYsCiAgICBtYXhJbnQ2NDogKCkgPT4gbWF4SW50NjQsCiAgICBtYXhJbnQ3MjogKCkgPT4gbWF4SW50NzIsCiAgICBtYXhJbnQ4OiAoKSA9PiBtYXhJbnQ4LAogICAgbWF4SW50ODA6ICgpID0+IG1heEludDgwLAogICAgbWF4SW50ODg6ICgpID0+IG1heEludDg4LAogICAgbWF4SW50OTY6ICgpID0+IG1heEludDk2LAogICAgbWF4VWludDEwNDogKCkgPT4gbWF4VWludDEwNCwKICAgIG1heFVpbnQxMTI6ICgpID0+IG1heFVpbnQxMTIsCiAgICBtYXhVaW50MTIwOiAoKSA9PiBtYXhVaW50MTIwLAogICAgbWF4VWludDEyODogKCkgPT4gbWF4VWludDEyOCwKICAgIG1heFVpbnQxMzY6ICgpID0+IG1heFVpbnQxMzYsCiAgICBtYXhVaW50MTQ0OiAoKSA9PiBtYXhVaW50MTQ0LAogICAgbWF4VWludDE1MjogKCkgPT4gbWF4VWludDE1MiwKICAgIG1heFVpbnQxNjogKCkgPT4gbWF4VWludDE2LAogICAgbWF4VWludDE2MDogKCkgPT4gbWF4VWludDE2MCwKICAgIG1heFVpbnQxNjg6ICgpID0+IG1heFVpbnQxNjgsCiAgICBtYXhVaW50MTc2OiAoKSA9PiBtYXhVaW50MTc2LAogICAgbWF4VWludDE4NDogKCkgPT4gbWF4VWludDE4NCwKICAgIG1heFVpbnQxOTI6ICgpID0+IG1heFVpbnQxOTIsCiAgICBtYXhVaW50MjAwOiAoKSA9PiBtYXhVaW50MjAwLAogICAgbWF4VWludDIwODogKCkgPT4gbWF4VWludDIwOCwKICAgIG1heFVpbnQyMTY6ICgpID0+IG1heFVpbnQyMTYsCiAgICBtYXhVaW50MjI0OiAoKSA9PiBtYXhVaW50MjI0LAogICAgbWF4VWludDIzMjogKCkgPT4gbWF4VWludDIzMiwKICAgIG1heFVpbnQyNDogKCkgPT4gbWF4VWludDI0LAogICAgbWF4VWludDI0MDogKCkgPT4gbWF4VWludDI0MCwKICAgIG1heFVpbnQyNDg6ICgpID0+IG1heFVpbnQyNDgsCiAgICBtYXhVaW50MjU2OiAoKSA9PiBtYXhVaW50MjU2LAogICAgbWF4VWludDMyOiAoKSA9PiBtYXhVaW50MzIsCiAgICBtYXhVaW50NDA6ICgpID0+IG1heFVpbnQ0MCwKICAgIG1heFVpbnQ0ODogKCkgPT4gbWF4VWludDQ4LAogICAgbWF4VWludDU2OiAoKSA9PiBtYXhVaW50NTYsCiAgICBtYXhVaW50NjQ6ICgpID0+IG1heFVpbnQ2NCwKICAgIG1heFVpbnQ3MjogKCkgPT4gbWF4VWludDcyLAogICAgbWF4VWludDg6ICgpID0+IG1heFVpbnQ4LAogICAgbWF4VWludDgwOiAoKSA9PiBtYXhVaW50ODAsCiAgICBtYXhVaW50ODg6ICgpID0+IG1heFVpbnQ4OCwKICAgIG1heFVpbnQ5NjogKCkgPT4gbWF4VWludDk2LAogICAgbWluSW50MTA0OiAoKSA9PiBtaW5JbnQxMDQsCiAgICBtaW5JbnQxMTI6ICgpID0+IG1pbkludDExMiwKICAgIG1pbkludDEyMDogKCkgPT4gbWluSW50MTIwLAogICAgbWluSW50MTI4OiAoKSA9PiBtaW5JbnQxMjgsCiAgICBtaW5JbnQxMzY6ICgpID0+IG1pbkludDEzNiwKICAgIG1pbkludDE0NDogKCkgPT4gbWluSW50MTQ0LAogICAgbWluSW50MTUyOiAoKSA9PiBtaW5JbnQxNTIsCiAgICBtaW5JbnQxNjogKCkgPT4gbWluSW50MTYsCiAgICBtaW5JbnQxNjA6ICgpID0+IG1pbkludDE2MCwKICAgIG1pbkludDE2ODogKCkgPT4gbWluSW50MTY4LAogICAgbWluSW50MTc2OiAoKSA9PiBtaW5JbnQxNzYsCiAgICBtaW5JbnQxODQ6ICgpID0+IG1pbkludDE4NCwKICAgIG1pbkludDE5MjogKCkgPT4gbWluSW50MTkyLAogICAgbWluSW50MjAwOiAoKSA9PiBtaW5JbnQyMDAsCiAgICBtaW5JbnQyMDg6ICgpID0+IG1pbkludDIwOCwKICAgIG1pbkludDIxNjogKCkgPT4gbWluSW50MjE2LAogICAgbWluSW50MjI0OiAoKSA9PiBtaW5JbnQyMjQsCiAgICBtaW5JbnQyMzI6ICgpID0+IG1pbkludDIzMiwKICAgIG1pbkludDI0OiAoKSA9PiBtaW5JbnQyNCwKICAgIG1pbkludDI0MDogKCkgPT4gbWluSW50MjQwLAogICAgbWluSW50MjQ4OiAoKSA9PiBtaW5JbnQyNDgsCiAgICBtaW5JbnQyNTY6ICgpID0+IG1pbkludDI1NiwKICAgIG1pbkludDMyOiAoKSA9PiBtaW5JbnQzMiwKICAgIG1pbkludDQwOiAoKSA9PiBtaW5JbnQ0MCwKICAgIG1pbkludDQ4OiAoKSA9PiBtaW5JbnQ0OCwKICAgIG1pbkludDU2OiAoKSA9PiBtaW5JbnQ1NiwKICAgIG1pbkludDY0OiAoKSA9PiBtaW5JbnQ2NCwKICAgIG1pbkludDcyOiAoKSA9PiBtaW5JbnQ3MiwKICAgIG1pbkludDg6ICgpID0+IG1pbkludDgsCiAgICBtaW5JbnQ4MDogKCkgPT4gbWluSW50ODAsCiAgICBtaW5JbnQ4ODogKCkgPT4gbWluSW50ODgsCiAgICBtaW5JbnQ5NjogKCkgPT4gbWluSW50OTYsCiAgICBtdWx0aWNhbGwzQWJpOiAoKSA9PiBtdWx0aWNhbGwzQWJpLAogICAgbmFtZWhhc2g6ICgpID0+IG5hbWVoYXNoLAogICAgbm9uY2VNYW5hZ2VyOiAoKSA9PiBub25jZU1hbmFnZXIsCiAgICBudW1iZXJUb0J5dGVzOiAoKSA9PiBudW1iZXJUb0J5dGVzLAogICAgbnVtYmVyVG9IZXg6ICgpID0+IG51bWJlclRvSGV4LAogICAgb2ZmY2hhaW5Mb29rdXA6ICgpID0+IG9mZmNoYWluTG9va3VwLAogICAgb2ZmY2hhaW5Mb29rdXBBYmlJdGVtOiAoKSA9PiBvZmZjaGFpbkxvb2t1cEFiaUl0ZW0sCiAgICBvZmZjaGFpbkxvb2t1cFNpZ25hdHVyZTogKCkgPT4gb2ZmY2hhaW5Mb29rdXBTaWduYXR1cmUsCiAgICBwYWQ6ICgpID0+IHBhZCwKICAgIHBhZEJ5dGVzOiAoKSA9PiBwYWRCeXRlcywKICAgIHBhZEhleDogKCkgPT4gcGFkSGV4LAogICAgcGFyc2VBYmk6ICgpID0+IHBhcnNlQWJpLAogICAgcGFyc2VBYmlJdGVtOiAoKSA9PiBwYXJzZUFiaUl0ZW0sCiAgICBwYXJzZUFiaVBhcmFtZXRlcjogKCkgPT4gcGFyc2VBYmlQYXJhbWV0ZXIyLAogICAgcGFyc2VBYmlQYXJhbWV0ZXJzOiAoKSA9PiBwYXJzZUFiaVBhcmFtZXRlcnMsCiAgICBwYXJzZUNvbXBhY3RTaWduYXR1cmU6ICgpID0+IHBhcnNlQ29tcGFjdFNpZ25hdHVyZSwKICAgIHBhcnNlRXJjNjQ5MlNpZ25hdHVyZTogKCkgPT4gcGFyc2VFcmM2NDkyU2lnbmF0dXJlLAogICAgcGFyc2VFdGhlcjogKCkgPT4gcGFyc2VFdGhlciwKICAgIHBhcnNlRXZlbnRMb2dzOiAoKSA9PiBwYXJzZUV2ZW50TG9ncywKICAgIHBhcnNlR3dlaTogKCkgPT4gcGFyc2VHd2VpLAogICAgcGFyc2VTaWduYXR1cmU6ICgpID0+IHBhcnNlU2lnbmF0dXJlMiwKICAgIHBhcnNlVHJhbnNhY3Rpb246ICgpID0+IHBhcnNlVHJhbnNhY3Rpb24sCiAgICBwYXJzZVVuaXRzOiAoKSA9PiBwYXJzZVVuaXRzLAogICAgcHJlcGFyZUVuY29kZUZ1bmN0aW9uRGF0YTogKCkgPT4gcHJlcGFyZUVuY29kZUZ1bmN0aW9uRGF0YSwKICAgIHByZXNpZ25NZXNzYWdlUHJlZml4OiAoKSA9PiBwcmVzaWduTWVzc2FnZVByZWZpeCwKICAgIHB1YmxpY0FjdGlvbnM6ICgpID0+IHB1YmxpY0FjdGlvbnMsCiAgICByZWNvdmVyQWRkcmVzczogKCkgPT4gcmVjb3ZlckFkZHJlc3MsCiAgICByZWNvdmVyTWVzc2FnZUFkZHJlc3M6ICgpID0+IHJlY292ZXJNZXNzYWdlQWRkcmVzcywKICAgIHJlY292ZXJQdWJsaWNLZXk6ICgpID0+IHJlY292ZXJQdWJsaWNLZXksCiAgICByZWNvdmVyVHJhbnNhY3Rpb25BZGRyZXNzOiAoKSA9PiByZWNvdmVyVHJhbnNhY3Rpb25BZGRyZXNzLAogICAgcmVjb3ZlclR5cGVkRGF0YUFkZHJlc3M6ICgpID0+IHJlY292ZXJUeXBlZERhdGFBZGRyZXNzLAogICAgcmlwZW1kMTYwOiAoKSA9PiByaXBlbWQxNjAyLAogICAgcnBjU2NoZW1hOiAoKSA9PiBycGNTY2hlbWEsCiAgICBycGNUcmFuc2FjdGlvblR5cGU6ICgpID0+IHJwY1RyYW5zYWN0aW9uVHlwZSwKICAgIHNlcmlhbGl6ZUFjY2Vzc0xpc3Q6ICgpID0+IHNlcmlhbGl6ZUFjY2Vzc0xpc3QsCiAgICBzZXJpYWxpemVDb21wYWN0U2lnbmF0dXJlOiAoKSA9PiBzZXJpYWxpemVDb21wYWN0U2lnbmF0dXJlLAogICAgc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZTogKCkgPT4gc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZSwKICAgIHNlcmlhbGl6ZVNpZ25hdHVyZTogKCkgPT4gc2VyaWFsaXplU2lnbmF0dXJlLAogICAgc2VyaWFsaXplVHJhbnNhY3Rpb246ICgpID0+IHNlcmlhbGl6ZVRyYW5zYWN0aW9uLAogICAgc2VyaWFsaXplVHlwZWREYXRhOiAoKSA9PiBzZXJpYWxpemVUeXBlZERhdGEsCiAgICBzZXRFcnJvckNvbmZpZzogKCkgPT4gc2V0RXJyb3JDb25maWcsCiAgICBzZXR1cEt6ZzogKCkgPT4gc2V0dXBLemcsCiAgICBzaGEyNTY6ICgpID0+IHNoYTI1NjIsCiAgICBzaWRlY2Fyc1RvVmVyc2lvbmVkSGFzaGVzOiAoKSA9PiBzaWRlY2Fyc1RvVmVyc2lvbmVkSGFzaGVzLAogICAgc2lnbmF0dXJlVG9Db21wYWN0U2lnbmF0dXJlOiAoKSA9PiBzaWduYXR1cmVUb0NvbXBhY3RTaWduYXR1cmUsCiAgICBzaWduYXR1cmVUb0hleDogKCkgPT4gc2VyaWFsaXplU2lnbmF0dXJlLAogICAgc2l6ZTogKCkgPT4gc2l6ZSwKICAgIHNsaWNlOiAoKSA9PiBzbGljZSwKICAgIHNsaWNlQnl0ZXM6ICgpID0+IHNsaWNlQnl0ZXMsCiAgICBzbGljZUhleDogKCkgPT4gc2xpY2VIZXgsCiAgICBzdHJpbmdUb0J5dGVzOiAoKSA9PiBzdHJpbmdUb0J5dGVzLAogICAgc3RyaW5nVG9IZXg6ICgpID0+IHN0cmluZ1RvSGV4LAogICAgc3RyaW5naWZ5OiAoKSA9PiBzdHJpbmdpZnksCiAgICB0ZXN0QWN0aW9uczogKCkgPT4gdGVzdEFjdGlvbnMsCiAgICB0b0Jsb2JTaWRlY2FyczogKCkgPT4gdG9CbG9iU2lkZWNhcnMsCiAgICB0b0Jsb2JzOiAoKSA9PiB0b0Jsb2JzLAogICAgdG9CeXRlczogKCkgPT4gdG9CeXRlcywKICAgIHRvRXZlbnRIYXNoOiAoKSA9PiB0b1NpZ25hdHVyZUhhc2gsCiAgICB0b0V2ZW50U2VsZWN0b3I6ICgpID0+IHRvRXZlbnRTZWxlY3RvciwKICAgIHRvRXZlbnRTaWduYXR1cmU6ICgpID0+IHRvU2lnbmF0dXJlLAogICAgdG9GdW5jdGlvbkhhc2g6ICgpID0+IHRvU2lnbmF0dXJlSGFzaCwKICAgIHRvRnVuY3Rpb25TZWxlY3RvcjogKCkgPT4gdG9GdW5jdGlvblNlbGVjdG9yLAogICAgdG9GdW5jdGlvblNpZ25hdHVyZTogKCkgPT4gdG9TaWduYXR1cmUsCiAgICB0b0hleDogKCkgPT4gdG9IZXgsCiAgICB0b1ByZWZpeGVkTWVzc2FnZTogKCkgPT4gdG9QcmVmaXhlZE1lc3NhZ2UsCiAgICB0b1JscDogKCkgPT4gdG9SbHAsCiAgICB0cmFuc2FjdGlvblR5cGU6ICgpID0+IHRyYW5zYWN0aW9uVHlwZSwKICAgIHRyaW06ICgpID0+IHRyaW0sCiAgICB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JBYmk6ICgpID0+IHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckFiaSwKICAgIHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckJ5dGVDb2RlOiAoKSA9PiB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JCeXRlQ29kZSwKICAgIHZhbGlkYXRlVHlwZWREYXRhOiAoKSA9PiB2YWxpZGF0ZVR5cGVkRGF0YSwKICAgIHZlcmlmeUhhc2g6ICgpID0+IHZlcmlmeUhhc2gsCiAgICB2ZXJpZnlNZXNzYWdlOiAoKSA9PiB2ZXJpZnlNZXNzYWdlLAogICAgdmVyaWZ5VHlwZWREYXRhOiAoKSA9PiB2ZXJpZnlUeXBlZERhdGEsCiAgICB3YWxsZXRBY3Rpb25zOiAoKSA9PiB3YWxsZXRBY3Rpb25zLAogICAgd2ViU29ja2V0OiAoKSA9PiB3ZWJTb2NrZXQsCiAgICB3ZWlVbml0czogKCkgPT4gd2VpVW5pdHMsCiAgICB3aXRoUmV0cnk6ICgpID0+IHdpdGhSZXRyeSwKICAgIHdpdGhUaW1lb3V0OiAoKSA9PiB3aXRoVGltZW91dCwKICAgIHplcm9BZGRyZXNzOiAoKSA9PiB6ZXJvQWRkcmVzcywKICAgIHplcm9IYXNoOiAoKSA9PiB6ZXJvSGFzaAogIH0pOwogIGluaXRfZXhwb3J0cygpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2dldEFjdGlvbi5qcwogIGZ1bmN0aW9uIGdldEFjdGlvbihjbGllbnQsIGFjdGlvbkZuLCBuYW1lKSB7CiAgICBjb25zdCBhY3Rpb25faW1wbGljaXQgPSBjbGllbnRbYWN0aW9uRm4ubmFtZV07CiAgICBpZiAodHlwZW9mIGFjdGlvbl9pbXBsaWNpdCA9PT0gImZ1bmN0aW9uIikKICAgICAgcmV0dXJuIGFjdGlvbl9pbXBsaWNpdDsKICAgIGNvbnN0IGFjdGlvbl9leHBsaWNpdCA9IGNsaWVudFtuYW1lXTsKICAgIGlmICh0eXBlb2YgYWN0aW9uX2V4cGxpY2l0ID09PSAiZnVuY3Rpb24iKQogICAgICByZXR1cm4gYWN0aW9uX2V4cGxpY2l0OwogICAgcmV0dXJuIChwYXJhbXMpID0+IGFjdGlvbkZuKGNsaWVudCwgcGFyYW1zKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2VuY29kZUV2ZW50VG9waWNzLmpzCiAgaW5pdF9hYmkoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvbG9nLmpzCiAgaW5pdF9iYXNlKCk7CiAgdmFyIEZpbHRlclR5cGVOb3RTdXBwb3J0ZWRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih0eXBlKSB7CiAgICAgIHN1cGVyKGBGaWx0ZXIgdHlwZSAiJHt0eXBlfSIgaXMgbm90IHN1cHBvcnRlZC5gLCB7CiAgICAgICAgbmFtZTogIkZpbHRlclR5cGVOb3RTdXBwb3J0ZWRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlRXZlbnRUb3BpY3MuanMKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X2tlY2NhazI1NigpOwogIGluaXRfdG9FdmVudFNlbGVjdG9yKCk7CiAgaW5pdF9lbmNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9mb3JtYXRBYmlJdGVtMigpOwogIGluaXRfZ2V0QWJpSXRlbSgpOwogIHZhciBkb2NzUGF0aCA9ICIvZG9jcy9jb250cmFjdC9lbmNvZGVFdmVudFRvcGljcyI7CiAgZnVuY3Rpb24gZW5jb2RlRXZlbnRUb3BpY3MocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGV2ZW50TmFtZSwgYXJncyB9ID0gcGFyYW1ldGVyczsKICAgIGxldCBhYmlJdGVtID0gYWJpMlswXTsKICAgIGlmIChldmVudE5hbWUpIHsKICAgICAgY29uc3QgaXRlbSA9IGdldEFiaUl0ZW0oeyBhYmk6IGFiaTIsIG5hbWU6IGV2ZW50TmFtZSB9KTsKICAgICAgaWYgKCFpdGVtKQogICAgICAgIHRocm93IG5ldyBBYmlFdmVudE5vdEZvdW5kRXJyb3IoZXZlbnROYW1lLCB7IGRvY3NQYXRoIH0pOwogICAgICBhYmlJdGVtID0gaXRlbTsKICAgIH0KICAgIGlmIChhYmlJdGVtLnR5cGUgIT09ICJldmVudCIpCiAgICAgIHRocm93IG5ldyBBYmlFdmVudE5vdEZvdW5kRXJyb3Iodm9pZCAwLCB7IGRvY3NQYXRoIH0pOwogICAgY29uc3QgZGVmaW5pdGlvbiA9IGZvcm1hdEFiaUl0ZW0yKGFiaUl0ZW0pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdG9FdmVudFNlbGVjdG9yKGRlZmluaXRpb24pOwogICAgbGV0IHRvcGljcyA9IFtdOwogICAgaWYgKGFyZ3MgJiYgImlucHV0cyIgaW4gYWJpSXRlbSkgewogICAgICBjb25zdCBpbmRleGVkSW5wdXRzID0gYWJpSXRlbS5pbnB1dHM/LmZpbHRlcigocGFyYW0pID0+ICJpbmRleGVkIiBpbiBwYXJhbSAmJiBwYXJhbS5pbmRleGVkKTsKICAgICAgY29uc3QgYXJnc18gPSBBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IE9iamVjdC52YWx1ZXMoYXJncykubGVuZ3RoID4gMCA/IGluZGV4ZWRJbnB1dHM/Lm1hcCgoeCkgPT4gYXJnc1t4Lm5hbWVdKSA/PyBbXSA6IFtdOwogICAgICBpZiAoYXJnc18ubGVuZ3RoID4gMCkgewogICAgICAgIHRvcGljcyA9IGluZGV4ZWRJbnB1dHM/Lm1hcCgocGFyYW0sIGkpID0+IHsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3NfW2ldKSkKICAgICAgICAgICAgcmV0dXJuIGFyZ3NfW2ldLm1hcCgoXywgaikgPT4gZW5jb2RlQXJnKHsgcGFyYW0sIHZhbHVlOiBhcmdzX1tpXVtqXSB9KSk7CiAgICAgICAgICByZXR1cm4gYXJnc19baV0gPyBlbmNvZGVBcmcoeyBwYXJhbSwgdmFsdWU6IGFyZ3NfW2ldIH0pIDogbnVsbDsKICAgICAgICB9KSA/PyBbXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIFtzaWduYXR1cmUsIC4uLnRvcGljc107CiAgfQogIGZ1bmN0aW9uIGVuY29kZUFyZyh7IHBhcmFtLCB2YWx1ZSB9KSB7CiAgICBpZiAocGFyYW0udHlwZSA9PT0gInN0cmluZyIgfHwgcGFyYW0udHlwZSA9PT0gImJ5dGVzIikKICAgICAgcmV0dXJuIGtlY2NhazI1Nih0b0J5dGVzKHZhbHVlKSk7CiAgICBpZiAocGFyYW0udHlwZSA9PT0gInR1cGxlIiB8fCBwYXJhbS50eXBlLm1hdGNoKC9eKC4qKVxbKFxkKyk/XF0kLykpCiAgICAgIHRocm93IG5ldyBGaWx0ZXJUeXBlTm90U3VwcG9ydGVkRXJyb3IocGFyYW0udHlwZSk7CiAgICByZXR1cm4gZW5jb2RlQWJpUGFyYW1ldGVycyhbcGFyYW1dLCBbdmFsdWVdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvY3JlYXRlQ29udHJhY3RFdmVudEZpbHRlci5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9maWx0ZXJzL2NyZWF0ZUZpbHRlclJlcXVlc3RTY29wZS5qcwogIGZ1bmN0aW9uIGNyZWF0ZUZpbHRlclJlcXVlc3RTY29wZShjbGllbnQsIHsgbWV0aG9kIH0pIHsKICAgIGNvbnN0IHJlcXVlc3RNYXAgPSB7fTsKICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIpCiAgICAgIGNsaWVudC50cmFuc3BvcnQub25SZXNwb25zZT8uKCh7IG1ldGhvZDogbWV0aG9kXywgcmVzcG9uc2U6IGlkLCBzdGF0dXMsIHRyYW5zcG9ydCB9KSA9PiB7CiAgICAgICAgaWYgKHN0YXR1cyA9PT0gInN1Y2Nlc3MiICYmIG1ldGhvZCA9PT0gbWV0aG9kXykKICAgICAgICAgIHJlcXVlc3RNYXBbaWRdID0gdHJhbnNwb3J0LnJlcXVlc3Q7CiAgICAgIH0pOwogICAgcmV0dXJuIChpZCkgPT4gcmVxdWVzdE1hcFtpZF0gfHwgY2xpZW50LnJlcXVlc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2NyZWF0ZUNvbnRyYWN0RXZlbnRGaWx0ZXIuanMKICBhc3luYyBmdW5jdGlvbiBjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhZGRyZXNzLCBhYmk6IGFiaTIsIGFyZ3MsIGV2ZW50TmFtZSwgZnJvbUJsb2NrLCBzdHJpY3QsIHRvQmxvY2sgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBnZXRSZXF1ZXN0ID0gY3JlYXRlRmlsdGVyUmVxdWVzdFNjb3BlKGNsaWVudCwgewogICAgICBtZXRob2Q6ICJldGhfbmV3RmlsdGVyIgogICAgfSk7CiAgICBjb25zdCB0b3BpY3MgPSBldmVudE5hbWUgPyBlbmNvZGVFdmVudFRvcGljcyh7CiAgICAgIGFiaTogYWJpMiwKICAgICAgYXJncywKICAgICAgZXZlbnROYW1lCiAgICB9KSA6IHZvaWQgMDsKICAgIGNvbnN0IGlkID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfbmV3RmlsdGVyIiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgewogICAgICAgICAgYWRkcmVzcywKICAgICAgICAgIGZyb21CbG9jazogdHlwZW9mIGZyb21CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleChmcm9tQmxvY2spIDogZnJvbUJsb2NrLAogICAgICAgICAgdG9CbG9jazogdHlwZW9mIHRvQmxvY2sgPT09ICJiaWdpbnQiID8gbnVtYmVyVG9IZXgodG9CbG9jaykgOiB0b0Jsb2NrLAogICAgICAgICAgdG9waWNzCiAgICAgICAgfQogICAgICBdCiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIGFiaTogYWJpMiwKICAgICAgYXJncywKICAgICAgZXZlbnROYW1lLAogICAgICBpZCwKICAgICAgcmVxdWVzdDogZ2V0UmVxdWVzdChpZCksCiAgICAgIHN0cmljdDogQm9vbGVhbihzdHJpY3QpLAogICAgICB0eXBlOiAiZXZlbnQiCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9lc3RpbWF0ZUNvbnRyYWN0R2FzLmpzCiAgaW5pdF9wYXJzZUFjY291bnQoKTsKICBpbml0X2VuY29kZUZ1bmN0aW9uRGF0YSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vycm9ycy9nZXRDb250cmFjdEVycm9yLmpzCiAgaW5pdF9hYmkoKTsKICBpbml0X2Jhc2UoKTsKICBpbml0X2NvbnRyYWN0KCk7CiAgaW5pdF9ycGMoKTsKICB2YXIgRVhFQ1VUSU9OX1JFVkVSVEVEX0VSUk9SX0NPREUgPSAzOwogIGZ1bmN0aW9uIGdldENvbnRyYWN0RXJyb3IoZXJyLCB7IGFiaTogYWJpMiwgYWRkcmVzcywgYXJncywgZG9jc1BhdGg6IGRvY3NQYXRoOSwgZnVuY3Rpb25OYW1lLCBzZW5kZXIgfSkgewogICAgY29uc3QgeyBjb2RlLCBkYXRhLCBtZXNzYWdlLCBzaG9ydE1lc3NhZ2UgfSA9IGVyciBpbnN0YW5jZW9mIFJhd0NvbnRyYWN0RXJyb3IgPyBlcnIgOiBlcnIgaW5zdGFuY2VvZiBCYXNlRXJyb3IyID8gZXJyLndhbGsoKGVycjIpID0+ICJkYXRhIiBpbiBlcnIyKSB8fCBlcnIud2FsaygpIDoge307CiAgICBjb25zdCBjYXVzZSA9ICgoKSA9PiB7CiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IpCiAgICAgICAgcmV0dXJuIG5ldyBDb250cmFjdEZ1bmN0aW9uWmVyb0RhdGFFcnJvcih7IGZ1bmN0aW9uTmFtZSB9KTsKICAgICAgaWYgKFtFWEVDVVRJT05fUkVWRVJURURfRVJST1JfQ09ERSwgSW50ZXJuYWxScGNFcnJvci5jb2RlXS5pbmNsdWRlcyhjb2RlKSAmJiAoZGF0YSB8fCBtZXNzYWdlIHx8IHNob3J0TWVzc2FnZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yKHsKICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgIGRhdGE6IHR5cGVvZiBkYXRhID09PSAib2JqZWN0IiA/IGRhdGEuZGF0YSA6IGRhdGEsCiAgICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgICBtZXNzYWdlOiBzaG9ydE1lc3NhZ2UgPz8gbWVzc2FnZQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBlcnI7CiAgICB9KSgpOwogICAgcmV0dXJuIG5ldyBDb250cmFjdEZ1bmN0aW9uRXhlY3V0aW9uRXJyb3IoY2F1c2UsIHsKICAgICAgYWJpOiBhYmkyLAogICAgICBhcmdzLAogICAgICBjb250cmFjdEFkZHJlc3M6IGFkZHJlc3MsCiAgICAgIGRvY3NQYXRoOiBkb2NzUGF0aDksCiAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgc2VuZGVyCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVHYXMuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGluaXRfYmFzZSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjY291bnRzL3V0aWxzL3B1YmxpY0tleVRvQWRkcmVzcy5qcwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfa2VjY2FrMjU2KCk7CiAgZnVuY3Rpb24gcHVibGljS2V5VG9BZGRyZXNzKHB1YmxpY0tleSkgewogICAgY29uc3QgYWRkcmVzcyA9IGtlY2NhazI1NihgMHgke3B1YmxpY0tleS5zdWJzdHJpbmcoNCl9YCkuc3Vic3RyaW5nKDI2KTsKICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3MoYDB4JHthZGRyZXNzfWApOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcmVjb3ZlclB1YmxpY0tleS5qcwogIGluaXRfaXNIZXgoKTsKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gcmVjb3ZlclB1YmxpY0tleSh7IGhhc2g6IGhhc2gzLCBzaWduYXR1cmUgfSkgewogICAgY29uc3QgaGFzaEhleCA9IGlzSGV4KGhhc2gzKSA/IGhhc2gzIDogdG9IZXgoaGFzaDMpOwogICAgY29uc3QgeyBzZWNwMjU2azE6IHNlY3AyNTZrMTIgfSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gKGluaXRfc2VjcDI1NmsxKCksIHNlY3AyNTZrMV9leHBvcnRzKSk7CiAgICBjb25zdCBzaWduYXR1cmVfID0gKCgpID0+IHsKICAgICAgaWYgKHR5cGVvZiBzaWduYXR1cmUgPT09ICJvYmplY3QiICYmICJyIiBpbiBzaWduYXR1cmUgJiYgInMiIGluIHNpZ25hdHVyZSkgewogICAgICAgIGNvbnN0IHsgciwgcywgdiwgeVBhcml0eSB9ID0gc2lnbmF0dXJlOwogICAgICAgIGNvbnN0IHlQYXJpdHlPclYyID0gTnVtYmVyKHlQYXJpdHkgPz8gdik7CiAgICAgICAgY29uc3QgcmVjb3ZlcnlCaXQyID0gdG9SZWNvdmVyeUJpdCh5UGFyaXR5T3JWMik7CiAgICAgICAgcmV0dXJuIG5ldyBzZWNwMjU2azEyLlNpZ25hdHVyZShoZXhUb0JpZ0ludChyKSwgaGV4VG9CaWdJbnQocykpLmFkZFJlY292ZXJ5Qml0KHJlY292ZXJ5Qml0Mik7CiAgICAgIH0KICAgICAgY29uc3Qgc2lnbmF0dXJlSGV4ID0gaXNIZXgoc2lnbmF0dXJlKSA/IHNpZ25hdHVyZSA6IHRvSGV4KHNpZ25hdHVyZSk7CiAgICAgIGNvbnN0IHlQYXJpdHlPclYgPSBoZXhUb051bWJlcihgMHgke3NpZ25hdHVyZUhleC5zbGljZSgxMzApfWApOwogICAgICBjb25zdCByZWNvdmVyeUJpdCA9IHRvUmVjb3ZlcnlCaXQoeVBhcml0eU9yVik7CiAgICAgIHJldHVybiBzZWNwMjU2azEyLlNpZ25hdHVyZS5mcm9tQ29tcGFjdChzaWduYXR1cmVIZXguc3Vic3RyaW5nKDIsIDEzMCkpLmFkZFJlY292ZXJ5Qml0KHJlY292ZXJ5Qml0KTsKICAgIH0pKCk7CiAgICBjb25zdCBwdWJsaWNLZXkgPSBzaWduYXR1cmVfLnJlY292ZXJQdWJsaWNLZXkoaGFzaEhleC5zdWJzdHJpbmcoMikpLnRvSGV4KGZhbHNlKTsKICAgIHJldHVybiBgMHgke3B1YmxpY0tleX1gOwogIH0KICBmdW5jdGlvbiB0b1JlY292ZXJ5Qml0KHlQYXJpdHlPclYpIHsKICAgIGlmICh5UGFyaXR5T3JWID09PSAwIHx8IHlQYXJpdHlPclYgPT09IDEpCiAgICAgIHJldHVybiB5UGFyaXR5T3JWOwogICAgaWYgKHlQYXJpdHlPclYgPT09IDI3KQogICAgICByZXR1cm4gMDsKICAgIGlmICh5UGFyaXR5T3JWID09PSAyOCkKICAgICAgcmV0dXJuIDE7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeVBhcml0eU9yViB2YWx1ZSIpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcmVjb3ZlckFkZHJlc3MuanMKICBhc3luYyBmdW5jdGlvbiByZWNvdmVyQWRkcmVzcyh7IGhhc2g6IGhhc2gzLCBzaWduYXR1cmUgfSkgewogICAgcmV0dXJuIHB1YmxpY0tleVRvQWRkcmVzcyhhd2FpdCByZWNvdmVyUHVibGljS2V5KHsgaGFzaDogaGFzaDMsIHNpZ25hdHVyZSB9KSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2V4cGVyaW1lbnRhbC9laXA3NzAyL3V0aWxzL2hhc2hBdXRob3JpemF0aW9uLmpzCiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5jb2RpbmcvdG9SbHAuanMKICBpbml0X2Jhc2UoKTsKICBpbml0X2N1cnNvcjIoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gdG9SbHAoYnl0ZXMyLCB0byA9ICJoZXgiKSB7CiAgICBjb25zdCBlbmNvZGFibGUgPSBnZXRFbmNvZGFibGUoYnl0ZXMyKTsKICAgIGNvbnN0IGN1cnNvciA9IGNyZWF0ZUN1cnNvcihuZXcgVWludDhBcnJheShlbmNvZGFibGUubGVuZ3RoKSk7CiAgICBlbmNvZGFibGUuZW5jb2RlKGN1cnNvcik7CiAgICBpZiAodG8gPT09ICJoZXgiKQogICAgICByZXR1cm4gYnl0ZXNUb0hleChjdXJzb3IuYnl0ZXMpOwogICAgcmV0dXJuIGN1cnNvci5ieXRlczsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb1JscChieXRlczIsIHRvID0gImJ5dGVzIikgewogICAgcmV0dXJuIHRvUmxwKGJ5dGVzMiwgdG8pOwogIH0KICBmdW5jdGlvbiBoZXhUb1JscChoZXgsIHRvID0gImhleCIpIHsKICAgIHJldHVybiB0b1JscChoZXgsIHRvKTsKICB9CiAgZnVuY3Rpb24gZ2V0RW5jb2RhYmxlKGJ5dGVzMikgewogICAgaWYgKEFycmF5LmlzQXJyYXkoYnl0ZXMyKSkKICAgICAgcmV0dXJuIGdldEVuY29kYWJsZUxpc3QoYnl0ZXMyLm1hcCgoeCkgPT4gZ2V0RW5jb2RhYmxlKHgpKSk7CiAgICByZXR1cm4gZ2V0RW5jb2RhYmxlQnl0ZXMoYnl0ZXMyKTsKICB9CiAgZnVuY3Rpb24gZ2V0RW5jb2RhYmxlTGlzdChsaXN0KSB7CiAgICBjb25zdCBib2R5TGVuZ3RoID0gbGlzdC5yZWR1Y2UoKGFjYywgeCkgPT4gYWNjICsgeC5sZW5ndGgsIDApOwogICAgY29uc3Qgc2l6ZU9mQm9keUxlbmd0aCA9IGdldFNpemVPZkxlbmd0aChib2R5TGVuZ3RoKTsKICAgIGNvbnN0IGxlbmd0aCA9ICgoKSA9PiB7CiAgICAgIGlmIChib2R5TGVuZ3RoIDw9IDU1KQogICAgICAgIHJldHVybiAxICsgYm9keUxlbmd0aDsKICAgICAgcmV0dXJuIDEgKyBzaXplT2ZCb2R5TGVuZ3RoICsgYm9keUxlbmd0aDsKICAgIH0pKCk7CiAgICByZXR1cm4gewogICAgICBsZW5ndGgsCiAgICAgIGVuY29kZShjdXJzb3IpIHsKICAgICAgICBpZiAoYm9keUxlbmd0aCA8PSA1NSkgewogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlKDE5MiArIGJvZHlMZW5ndGgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJzb3IucHVzaEJ5dGUoMTkyICsgNTUgKyBzaXplT2ZCb2R5TGVuZ3RoKTsKICAgICAgICAgIGlmIChzaXplT2ZCb2R5TGVuZ3RoID09PSAxKQogICAgICAgICAgICBjdXJzb3IucHVzaFVpbnQ4KGJvZHlMZW5ndGgpOwogICAgICAgICAgZWxzZSBpZiAoc2l6ZU9mQm9keUxlbmd0aCA9PT0gMikKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MTYoYm9keUxlbmd0aCk7CiAgICAgICAgICBlbHNlIGlmIChzaXplT2ZCb2R5TGVuZ3RoID09PSAzKQogICAgICAgICAgICBjdXJzb3IucHVzaFVpbnQyNChib2R5TGVuZ3RoKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MzIoYm9keUxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGZvciAoY29uc3QgeyBlbmNvZGU6IGVuY29kZTIgfSBvZiBsaXN0KSB7CiAgICAgICAgICBlbmNvZGUyKGN1cnNvcik7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KICBmdW5jdGlvbiBnZXRFbmNvZGFibGVCeXRlcyhieXRlc09ySGV4KSB7CiAgICBjb25zdCBieXRlczIgPSB0eXBlb2YgYnl0ZXNPckhleCA9PT0gInN0cmluZyIgPyBoZXhUb0J5dGVzKGJ5dGVzT3JIZXgpIDogYnl0ZXNPckhleDsKICAgIGNvbnN0IHNpemVPZkJ5dGVzTGVuZ3RoID0gZ2V0U2l6ZU9mTGVuZ3RoKGJ5dGVzMi5sZW5ndGgpOwogICAgY29uc3QgbGVuZ3RoID0gKCgpID0+IHsKICAgICAgaWYgKGJ5dGVzMi5sZW5ndGggPT09IDEgJiYgYnl0ZXMyWzBdIDwgMTI4KQogICAgICAgIHJldHVybiAxOwogICAgICBpZiAoYnl0ZXMyLmxlbmd0aCA8PSA1NSkKICAgICAgICByZXR1cm4gMSArIGJ5dGVzMi5sZW5ndGg7CiAgICAgIHJldHVybiAxICsgc2l6ZU9mQnl0ZXNMZW5ndGggKyBieXRlczIubGVuZ3RoOwogICAgfSkoKTsKICAgIHJldHVybiB7CiAgICAgIGxlbmd0aCwKICAgICAgZW5jb2RlKGN1cnNvcikgewogICAgICAgIGlmIChieXRlczIubGVuZ3RoID09PSAxICYmIGJ5dGVzMlswXSA8IDEyOCkgewogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIH0gZWxzZSBpZiAoYnl0ZXMyLmxlbmd0aCA8PSA1NSkgewogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlKDEyOCArIGJ5dGVzMi5sZW5ndGgpOwogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJzb3IucHVzaEJ5dGUoMTI4ICsgNTUgKyBzaXplT2ZCeXRlc0xlbmd0aCk7CiAgICAgICAgICBpZiAoc2l6ZU9mQnl0ZXNMZW5ndGggPT09IDEpCiAgICAgICAgICAgIGN1cnNvci5wdXNoVWludDgoYnl0ZXMyLmxlbmd0aCk7CiAgICAgICAgICBlbHNlIGlmIChzaXplT2ZCeXRlc0xlbmd0aCA9PT0gMikKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MTYoYnl0ZXMyLmxlbmd0aCk7CiAgICAgICAgICBlbHNlIGlmIChzaXplT2ZCeXRlc0xlbmd0aCA9PT0gMykKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MjQoYnl0ZXMyLmxlbmd0aCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGN1cnNvci5wdXNoVWludDMyKGJ5dGVzMi5sZW5ndGgpOwogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9CiAgZnVuY3Rpb24gZ2V0U2l6ZU9mTGVuZ3RoKGxlbmd0aCkgewogICAgaWYgKGxlbmd0aCA8IDIgKiogOCkKICAgICAgcmV0dXJuIDE7CiAgICBpZiAobGVuZ3RoIDwgMiAqKiAxNikKICAgICAgcmV0dXJuIDI7CiAgICBpZiAobGVuZ3RoIDwgMiAqKiAyNCkKICAgICAgcmV0dXJuIDM7CiAgICBpZiAobGVuZ3RoIDwgMiAqKiAzMikKICAgICAgcmV0dXJuIDQ7CiAgICB0aHJvdyBuZXcgQmFzZUVycm9yMigiTGVuZ3RoIGlzIHRvbyBsYXJnZS4iKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXhwZXJpbWVudGFsL2VpcDc3MDIvdXRpbHMvaGFzaEF1dGhvcml6YXRpb24uanMKICBpbml0X2tlY2NhazI1NigpOwogIGZ1bmN0aW9uIGhhc2hBdXRob3JpemF0aW9uKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgY2hhaW5JZCwgY29udHJhY3RBZGRyZXNzLCBub25jZSwgdG8gfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBoYXNoMyA9IGtlY2NhazI1Nihjb25jYXRIZXgoWwogICAgICAiMHgwNSIsCiAgICAgIHRvUmxwKFtudW1iZXJUb0hleChjaGFpbklkKSwgY29udHJhY3RBZGRyZXNzLCBudW1iZXJUb0hleChub25jZSldKQogICAgXSkpOwogICAgaWYgKHRvID09PSAiYnl0ZXMiKQogICAgICByZXR1cm4gaGV4VG9CeXRlcyhoYXNoMyk7CiAgICByZXR1cm4gaGFzaDM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2V4cGVyaW1lbnRhbC9laXA3NzAyL3V0aWxzL3JlY292ZXJBdXRob3JpemF0aW9uQWRkcmVzcy5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJBdXRob3JpemF0aW9uQWRkcmVzcyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGF1dGhvcml6YXRpb24sIHNpZ25hdHVyZSB9ID0gcGFyYW1ldGVyczsKICAgIHJldHVybiByZWNvdmVyQWRkcmVzcyh7CiAgICAgIGhhc2g6IGhhc2hBdXRob3JpemF0aW9uKGF1dGhvcml6YXRpb24pLAogICAgICBzaWduYXR1cmU6IHNpZ25hdHVyZSA/PyBhdXRob3JpemF0aW9uCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVHYXMuanMKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2VzdGltYXRlR2FzLmpzCiAgaW5pdF9mb3JtYXRFdGhlcigpOwogIGluaXRfZm9ybWF0R3dlaSgpOwogIGluaXRfYmFzZSgpOwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICB2YXIgRXN0aW1hdGVHYXNFeGVjdXRpb25FcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBhY2NvdW50LCBkb2NzUGF0aDogZG9jc1BhdGg5LCBjaGFpbiwgZGF0YSwgZ2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbm9uY2UsIHRvLCB2YWx1ZSB9KSB7CiAgICAgIGNvbnN0IHByZXR0eUFyZ3MgPSBwcmV0dHlQcmludCh7CiAgICAgICAgZnJvbTogYWNjb3VudD8uYWRkcmVzcywKICAgICAgICB0bywKICAgICAgICB2YWx1ZTogdHlwZW9mIHZhbHVlICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRFdGhlcih2YWx1ZSl9ICR7Y2hhaW4/Lm5hdGl2ZUN1cnJlbmN5Py5zeW1ib2wgfHwgIkVUSCJ9YCwKICAgICAgICBkYXRhLAogICAgICAgIGdhcywKICAgICAgICBnYXNQcmljZTogdHlwZW9mIGdhc1ByaWNlICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKGdhc1ByaWNlKX0gZ3dlaWAsCiAgICAgICAgbWF4RmVlUGVyR2FzOiB0eXBlb2YgbWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9IGd3ZWlgLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiB0eXBlb2YgbWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkobWF4UHJpb3JpdHlGZWVQZXJHYXMpfSBnd2VpYCwKICAgICAgICBub25jZQogICAgICB9KTsKICAgICAgc3VwZXIoY2F1c2Uuc2hvcnRNZXNzYWdlLCB7CiAgICAgICAgY2F1c2UsCiAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgIC4uLmNhdXNlLm1ldGFNZXNzYWdlcyA/IFsuLi5jYXVzZS5tZXRhTWVzc2FnZXMsICIgIl0gOiBbXSwKICAgICAgICAgICJFc3RpbWF0ZSBHYXMgQXJndW1lbnRzOiIsCiAgICAgICAgICBwcmV0dHlBcmdzCiAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgbmFtZTogIkVzdGltYXRlR2FzRXhlY3V0aW9uRXJyb3IiCiAgICAgIH0pOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNhdXNlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgfSk7CiAgICAgIHRoaXMuY2F1c2UgPSBjYXVzZTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vycm9ycy9nZXRFc3RpbWF0ZUdhc0Vycm9yLmpzCiAgaW5pdF9ub2RlKCk7CiAgaW5pdF9nZXROb2RlRXJyb3IoKTsKICBmdW5jdGlvbiBnZXRFc3RpbWF0ZUdhc0Vycm9yKGVyciwgeyBkb2NzUGF0aDogZG9jc1BhdGg5LCAuLi5hcmdzIH0pIHsKICAgIGNvbnN0IGNhdXNlID0gKCgpID0+IHsKICAgICAgY29uc3QgY2F1c2UyID0gZ2V0Tm9kZUVycm9yKGVyciwgYXJncyk7CiAgICAgIGlmIChjYXVzZTIgaW5zdGFuY2VvZiBVbmtub3duTm9kZUVycm9yKQogICAgICAgIHJldHVybiBlcnI7CiAgICAgIHJldHVybiBjYXVzZTI7CiAgICB9KSgpOwogICAgcmV0dXJuIG5ldyBFc3RpbWF0ZUdhc0V4ZWN1dGlvbkVycm9yKGNhdXNlLCB7CiAgICAgIGRvY3NQYXRoOiBkb2NzUGF0aDksCiAgICAgIC4uLmFyZ3MKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9lc3RpbWF0ZUdhcy5qcwogIGluaXRfZXh0cmFjdCgpOwogIGluaXRfdHJhbnNhY3Rpb25SZXF1ZXN0KCk7CiAgaW5pdF9zdGF0ZU92ZXJyaWRlMigpOwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3ByZXBhcmVUcmFuc2FjdGlvblJlcXVlc3QuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9mZWUuanMKICBpbml0X2Zvcm1hdEd3ZWkoKTsKICBpbml0X2Jhc2UoKTsKICB2YXIgQmFzZUZlZVNjYWxhckVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiYGJhc2VGZWVNdWx0aXBsaWVyYCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxLiIsIHsKICAgICAgICBuYW1lOiAiQmFzZUZlZVNjYWxhckVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwogIHZhciBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiQ2hhaW4gZG9lcyBub3Qgc3VwcG9ydCBFSVAtMTU1OSBmZWVzLiIsIHsKICAgICAgICBuYW1lOiAiRWlwMTU1OUZlZXNOb3RTdXBwb3J0ZWRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKICB2YXIgTWF4RmVlUGVyR2FzVG9vTG93RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyBtYXhQcmlvcml0eUZlZVBlckdhcyB9KSB7CiAgICAgIHN1cGVyKGBcYG1heEZlZVBlckdhc1xgIGNhbm5vdCBiZSBsZXNzIHRoYW4gdGhlIFxgbWF4UHJpb3JpdHlGZWVQZXJHYXNcYCAoJHtmb3JtYXRHd2VpKG1heFByaW9yaXR5RmVlUGVyR2FzKX0gZ3dlaSkuYCwgeyBuYW1lOiAiTWF4RmVlUGVyR2FzVG9vTG93RXJyb3IiIH0pOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcy5qcwogIGluaXRfZnJvbUhleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9ibG9jay5qcwogIGluaXRfYmFzZSgpOwogIHZhciBCbG9ja05vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyIH0pIHsKICAgICAgbGV0IGlkZW50aWZpZXIgPSAiQmxvY2siOwogICAgICBpZiAoYmxvY2tIYXNoKQogICAgICAgIGlkZW50aWZpZXIgPSBgQmxvY2sgYXQgaGFzaCAiJHtibG9ja0hhc2h9ImA7CiAgICAgIGlmIChibG9ja051bWJlcikKICAgICAgICBpZGVudGlmaWVyID0gYEJsb2NrIGF0IG51bWJlciAiJHtibG9ja051bWJlcn0iYDsKICAgICAgc3VwZXIoYCR7aWRlbnRpZmllcn0gY291bGQgbm90IGJlIGZvdW5kLmAsIHsgbmFtZTogIkJsb2NrTm90Rm91bmRFcnJvciIgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRCbG9jay5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2Jsb2NrLmpzCiAgaW5pdF9mb3JtYXR0ZXIoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL3RyYW5zYWN0aW9uLmpzCiAgaW5pdF9mcm9tSGV4KCk7CiAgaW5pdF9mb3JtYXR0ZXIoKTsKICB2YXIgdHJhbnNhY3Rpb25UeXBlID0gewogICAgIjB4MCI6ICJsZWdhY3kiLAogICAgIjB4MSI6ICJlaXAyOTMwIiwKICAgICIweDIiOiAiZWlwMTU1OSIsCiAgICAiMHgzIjogImVpcDQ4NDQiLAogICAgIjB4NCI6ICJlaXA3NzAyIgogIH07CiAgZnVuY3Rpb24gZm9ybWF0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHRyYW5zYWN0aW9uXyA9IHsKICAgICAgLi4udHJhbnNhY3Rpb24sCiAgICAgIGJsb2NrSGFzaDogdHJhbnNhY3Rpb24uYmxvY2tIYXNoID8gdHJhbnNhY3Rpb24uYmxvY2tIYXNoIDogbnVsbCwKICAgICAgYmxvY2tOdW1iZXI6IHRyYW5zYWN0aW9uLmJsb2NrTnVtYmVyID8gQmlnSW50KHRyYW5zYWN0aW9uLmJsb2NrTnVtYmVyKSA6IG51bGwsCiAgICAgIGNoYWluSWQ6IHRyYW5zYWN0aW9uLmNoYWluSWQgPyBoZXhUb051bWJlcih0cmFuc2FjdGlvbi5jaGFpbklkKSA6IHZvaWQgMCwKICAgICAgZ2FzOiB0cmFuc2FjdGlvbi5nYXMgPyBCaWdJbnQodHJhbnNhY3Rpb24uZ2FzKSA6IHZvaWQgMCwKICAgICAgZ2FzUHJpY2U6IHRyYW5zYWN0aW9uLmdhc1ByaWNlID8gQmlnSW50KHRyYW5zYWN0aW9uLmdhc1ByaWNlKSA6IHZvaWQgMCwKICAgICAgbWF4RmVlUGVyQmxvYkdhczogdHJhbnNhY3Rpb24ubWF4RmVlUGVyQmxvYkdhcyA/IEJpZ0ludCh0cmFuc2FjdGlvbi5tYXhGZWVQZXJCbG9iR2FzKSA6IHZvaWQgMCwKICAgICAgbWF4RmVlUGVyR2FzOiB0cmFuc2FjdGlvbi5tYXhGZWVQZXJHYXMgPyBCaWdJbnQodHJhbnNhY3Rpb24ubWF4RmVlUGVyR2FzKSA6IHZvaWQgMCwKICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IHRyYW5zYWN0aW9uLm1heFByaW9yaXR5RmVlUGVyR2FzID8gQmlnSW50KHRyYW5zYWN0aW9uLm1heFByaW9yaXR5RmVlUGVyR2FzKSA6IHZvaWQgMCwKICAgICAgbm9uY2U6IHRyYW5zYWN0aW9uLm5vbmNlID8gaGV4VG9OdW1iZXIodHJhbnNhY3Rpb24ubm9uY2UpIDogdm9pZCAwLAogICAgICB0bzogdHJhbnNhY3Rpb24udG8gPyB0cmFuc2FjdGlvbi50byA6IG51bGwsCiAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5kZXggPyBOdW1iZXIodHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmRleCkgOiBudWxsLAogICAgICB0eXBlOiB0cmFuc2FjdGlvbi50eXBlID8gdHJhbnNhY3Rpb25UeXBlW3RyYW5zYWN0aW9uLnR5cGVdIDogdm9pZCAwLAogICAgICB0eXBlSGV4OiB0cmFuc2FjdGlvbi50eXBlID8gdHJhbnNhY3Rpb24udHlwZSA6IHZvaWQgMCwKICAgICAgdmFsdWU6IHRyYW5zYWN0aW9uLnZhbHVlID8gQmlnSW50KHRyYW5zYWN0aW9uLnZhbHVlKSA6IHZvaWQgMCwKICAgICAgdjogdHJhbnNhY3Rpb24udiA/IEJpZ0ludCh0cmFuc2FjdGlvbi52KSA6IHZvaWQgMAogICAgfTsKICAgIGlmICh0cmFuc2FjdGlvbi5hdXRob3JpemF0aW9uTGlzdCkKICAgICAgdHJhbnNhY3Rpb25fLmF1dGhvcml6YXRpb25MaXN0ID0gZm9ybWF0QXV0aG9yaXphdGlvbkxpc3QyKHRyYW5zYWN0aW9uLmF1dGhvcml6YXRpb25MaXN0KTsKICAgIHRyYW5zYWN0aW9uXy55UGFyaXR5ID0gKCgpID0+IHsKICAgICAgaWYgKHRyYW5zYWN0aW9uLnlQYXJpdHkpCiAgICAgICAgcmV0dXJuIE51bWJlcih0cmFuc2FjdGlvbi55UGFyaXR5KTsKICAgICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbl8udiA9PT0gImJpZ2ludCIpIHsKICAgICAgICBpZiAodHJhbnNhY3Rpb25fLnYgPT09IDBuIHx8IHRyYW5zYWN0aW9uXy52ID09PSAyN24pCiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBpZiAodHJhbnNhY3Rpb25fLnYgPT09IDFuIHx8IHRyYW5zYWN0aW9uXy52ID09PSAyOG4pCiAgICAgICAgICByZXR1cm4gMTsKICAgICAgICBpZiAodHJhbnNhY3Rpb25fLnYgPj0gMzVuKQogICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uXy52ICUgMm4gPT09IDBuID8gMSA6IDA7CiAgICAgIH0KICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIH0pKCk7CiAgICBpZiAodHJhbnNhY3Rpb25fLnR5cGUgPT09ICJsZWdhY3kiKSB7CiAgICAgIGRlbGV0ZSB0cmFuc2FjdGlvbl8uYWNjZXNzTGlzdDsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhGZWVQZXJCbG9iR2FzOwogICAgICBkZWxldGUgdHJhbnNhY3Rpb25fLm1heEZlZVBlckdhczsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhQcmlvcml0eUZlZVBlckdhczsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy55UGFyaXR5OwogICAgfQogICAgaWYgKHRyYW5zYWN0aW9uXy50eXBlID09PSAiZWlwMjkzMCIpIHsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhGZWVQZXJCbG9iR2FzOwogICAgICBkZWxldGUgdHJhbnNhY3Rpb25fLm1heEZlZVBlckdhczsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhQcmlvcml0eUZlZVBlckdhczsKICAgIH0KICAgIGlmICh0cmFuc2FjdGlvbl8udHlwZSA9PT0gImVpcDE1NTkiKSB7CiAgICAgIGRlbGV0ZSB0cmFuc2FjdGlvbl8ubWF4RmVlUGVyQmxvYkdhczsKICAgIH0KICAgIHJldHVybiB0cmFuc2FjdGlvbl87CiAgfQogIHZhciBkZWZpbmVUcmFuc2FjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVGb3JtYXR0ZXIoInRyYW5zYWN0aW9uIiwgZm9ybWF0VHJhbnNhY3Rpb24pOwogIGZ1bmN0aW9uIGZvcm1hdEF1dGhvcml6YXRpb25MaXN0MihhdXRob3JpemF0aW9uTGlzdCkgewogICAgcmV0dXJuIGF1dGhvcml6YXRpb25MaXN0Lm1hcCgoYXV0aG9yaXphdGlvbikgPT4gKHsKICAgICAgY29udHJhY3RBZGRyZXNzOiBhdXRob3JpemF0aW9uLmFkZHJlc3MsCiAgICAgIHI6IGF1dGhvcml6YXRpb24uciwKICAgICAgczogYXV0aG9yaXphdGlvbi5zLAogICAgICBjaGFpbklkOiBOdW1iZXIoYXV0aG9yaXphdGlvbi5jaGFpbklkKSwKICAgICAgbm9uY2U6IE51bWJlcihhdXRob3JpemF0aW9uLm5vbmNlKSwKICAgICAgLi4udHlwZW9mIGF1dGhvcml6YXRpb24ueVBhcml0eSAhPT0gInVuZGVmaW5lZCIgPyB7IHlQYXJpdHk6IE51bWJlcihhdXRob3JpemF0aW9uLnlQYXJpdHkpIH0gOiB7fSwKICAgICAgLi4udHlwZW9mIGF1dGhvcml6YXRpb24udiAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIGF1dGhvcml6YXRpb24ueVBhcml0eSA9PT0gInVuZGVmaW5lZCIgPyB7IHY6IE51bWJlcihhdXRob3JpemF0aW9uLnYpIH0gOiB7fQogICAgfSkpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2Jsb2NrLmpzCiAgZnVuY3Rpb24gZm9ybWF0QmxvY2soYmxvY2spIHsKICAgIGNvbnN0IHRyYW5zYWN0aW9ucyA9IGJsb2NrLnRyYW5zYWN0aW9ucz8ubWFwKCh0cmFuc2FjdGlvbikgPT4gewogICAgICBpZiAodHlwZW9mIHRyYW5zYWN0aW9uID09PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICAgIHJldHVybiBmb3JtYXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7CiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIC4uLmJsb2NrLAogICAgICBiYXNlRmVlUGVyR2FzOiBibG9jay5iYXNlRmVlUGVyR2FzID8gQmlnSW50KGJsb2NrLmJhc2VGZWVQZXJHYXMpIDogbnVsbCwKICAgICAgYmxvYkdhc1VzZWQ6IGJsb2NrLmJsb2JHYXNVc2VkID8gQmlnSW50KGJsb2NrLmJsb2JHYXNVc2VkKSA6IHZvaWQgMCwKICAgICAgZGlmZmljdWx0eTogYmxvY2suZGlmZmljdWx0eSA/IEJpZ0ludChibG9jay5kaWZmaWN1bHR5KSA6IHZvaWQgMCwKICAgICAgZXhjZXNzQmxvYkdhczogYmxvY2suZXhjZXNzQmxvYkdhcyA/IEJpZ0ludChibG9jay5leGNlc3NCbG9iR2FzKSA6IHZvaWQgMCwKICAgICAgZ2FzTGltaXQ6IGJsb2NrLmdhc0xpbWl0ID8gQmlnSW50KGJsb2NrLmdhc0xpbWl0KSA6IHZvaWQgMCwKICAgICAgZ2FzVXNlZDogYmxvY2suZ2FzVXNlZCA/IEJpZ0ludChibG9jay5nYXNVc2VkKSA6IHZvaWQgMCwKICAgICAgaGFzaDogYmxvY2suaGFzaCA/IGJsb2NrLmhhc2ggOiBudWxsLAogICAgICBsb2dzQmxvb206IGJsb2NrLmxvZ3NCbG9vbSA/IGJsb2NrLmxvZ3NCbG9vbSA6IG51bGwsCiAgICAgIG5vbmNlOiBibG9jay5ub25jZSA/IGJsb2NrLm5vbmNlIDogbnVsbCwKICAgICAgbnVtYmVyOiBibG9jay5udW1iZXIgPyBCaWdJbnQoYmxvY2subnVtYmVyKSA6IG51bGwsCiAgICAgIHNpemU6IGJsb2NrLnNpemUgPyBCaWdJbnQoYmxvY2suc2l6ZSkgOiB2b2lkIDAsCiAgICAgIHRpbWVzdGFtcDogYmxvY2sudGltZXN0YW1wID8gQmlnSW50KGJsb2NrLnRpbWVzdGFtcCkgOiB2b2lkIDAsCiAgICAgIHRyYW5zYWN0aW9ucywKICAgICAgdG90YWxEaWZmaWN1bHR5OiBibG9jay50b3RhbERpZmZpY3VsdHkgPyBCaWdJbnQoYmxvY2sudG90YWxEaWZmaWN1bHR5KSA6IG51bGwKICAgIH07CiAgfQogIHZhciBkZWZpbmVCbG9jayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVGb3JtYXR0ZXIoImJsb2NrIiwgZm9ybWF0QmxvY2spOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEJsb2NrLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvY2soY2xpZW50LCB7IGJsb2NrSGFzaCwgYmxvY2tOdW1iZXIsIGJsb2NrVGFnOiBibG9ja1RhZ18sIGluY2x1ZGVUcmFuc2FjdGlvbnM6IGluY2x1ZGVUcmFuc2FjdGlvbnNfIH0gPSB7fSkgewogICAgY29uc3QgYmxvY2tUYWcgPSBibG9ja1RhZ18gPz8gImxhdGVzdCI7CiAgICBjb25zdCBpbmNsdWRlVHJhbnNhY3Rpb25zID0gaW5jbHVkZVRyYW5zYWN0aW9uc18gPz8gZmFsc2U7CiAgICBjb25zdCBibG9ja051bWJlckhleCA9IGJsb2NrTnVtYmVyICE9PSB2b2lkIDAgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICBsZXQgYmxvY2sgPSBudWxsOwogICAgaWYgKGJsb2NrSGFzaCkgewogICAgICBibG9jayA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0QmxvY2tCeUhhc2giLAogICAgICAgIHBhcmFtczogW2Jsb2NrSGFzaCwgaW5jbHVkZVRyYW5zYWN0aW9uc10KICAgICAgfSwgeyBkZWR1cGU6IHRydWUgfSk7CiAgICB9IGVsc2UgewogICAgICBibG9jayA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0QmxvY2tCeU51bWJlciIsCiAgICAgICAgcGFyYW1zOiBbYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWcsIGluY2x1ZGVUcmFuc2FjdGlvbnNdCiAgICAgIH0sIHsgZGVkdXBlOiBCb29sZWFuKGJsb2NrTnVtYmVySGV4KSB9KTsKICAgIH0KICAgIGlmICghYmxvY2spCiAgICAgIHRocm93IG5ldyBCbG9ja05vdEZvdW5kRXJyb3IoeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyIH0pOwogICAgY29uc3QgZm9ybWF0ID0gY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzPy5ibG9jaz8uZm9ybWF0IHx8IGZvcm1hdEJsb2NrOwogICAgcmV0dXJuIGZvcm1hdChibG9jayk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEdhc1ByaWNlLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0R2FzUHJpY2UoY2xpZW50KSB7CiAgICBjb25zdCBnYXNQcmljZSA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2dhc1ByaWNlIgogICAgfSk7CiAgICByZXR1cm4gQmlnSW50KGdhc1ByaWNlKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcy5qcwogIGFzeW5jIGZ1bmN0aW9uIGVzdGltYXRlTWF4UHJpb3JpdHlGZWVQZXJHYXMoY2xpZW50LCBhcmdzKSB7CiAgICByZXR1cm4gaW50ZXJuYWxfZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcyhjbGllbnQsIGFyZ3MpOwogIH0KICBhc3luYyBmdW5jdGlvbiBpbnRlcm5hbF9lc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzKGNsaWVudCwgYXJncykgewogICAgY29uc3QgeyBibG9jazogYmxvY2tfLCBjaGFpbiA9IGNsaWVudC5jaGFpbiwgcmVxdWVzdCB9ID0gYXJncyB8fCB7fTsKICAgIGlmICh0eXBlb2YgY2hhaW4/LmZlZXM/LmRlZmF1bHRQcmlvcml0eUZlZSA9PT0gImZ1bmN0aW9uIikgewogICAgICBjb25zdCBibG9jayA9IGJsb2NrXyB8fCBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRCbG9jaywgImdldEJsb2NrIikoe30pOwogICAgICByZXR1cm4gY2hhaW4uZmVlcy5kZWZhdWx0UHJpb3JpdHlGZWUoewogICAgICAgIGJsb2NrLAogICAgICAgIGNsaWVudCwKICAgICAgICByZXF1ZXN0CiAgICAgIH0pOwogICAgfQogICAgaWYgKHR5cGVvZiBjaGFpbj8uZmVlcz8uZGVmYXVsdFByaW9yaXR5RmVlICE9PSAidW5kZWZpbmVkIikKICAgICAgcmV0dXJuIGNoYWluPy5mZWVzPy5kZWZhdWx0UHJpb3JpdHlGZWU7CiAgICB0cnkgewogICAgICBjb25zdCBtYXhQcmlvcml0eUZlZVBlckdhc0hleCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfbWF4UHJpb3JpdHlGZWVQZXJHYXMiCiAgICAgIH0pOwogICAgICByZXR1cm4gaGV4VG9CaWdJbnQobWF4UHJpb3JpdHlGZWVQZXJHYXNIZXgpOwogICAgfSBjYXRjaCB7CiAgICAgIGNvbnN0IFtibG9jaywgZ2FzUHJpY2VdID0gYXdhaXQgUHJvbWlzZS5hbGwoWwogICAgICAgIGJsb2NrXyA/IFByb21pc2UucmVzb2x2ZShibG9ja18pIDogZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2ssICJnZXRCbG9jayIpKHt9KSwKICAgICAgICBnZXRBY3Rpb24oY2xpZW50LCBnZXRHYXNQcmljZSwgImdldEdhc1ByaWNlIikoe30pCiAgICAgIF0pOwogICAgICBpZiAodHlwZW9mIGJsb2NrLmJhc2VGZWVQZXJHYXMgIT09ICJiaWdpbnQiKQogICAgICAgIHRocm93IG5ldyBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yKCk7CiAgICAgIGNvbnN0IG1heFByaW9yaXR5RmVlUGVyR2FzID0gZ2FzUHJpY2UgLSBibG9jay5iYXNlRmVlUGVyR2FzOwogICAgICBpZiAobWF4UHJpb3JpdHlGZWVQZXJHYXMgPCAwbikKICAgICAgICByZXR1cm4gMG47CiAgICAgIHJldHVybiBtYXhQcmlvcml0eUZlZVBlckdhczsKICAgIH0KICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVGZWVzUGVyR2FzLmpzCiAgYXN5bmMgZnVuY3Rpb24gZXN0aW1hdGVGZWVzUGVyR2FzKGNsaWVudCwgYXJncykgewogICAgcmV0dXJuIGludGVybmFsX2VzdGltYXRlRmVlc1BlckdhcyhjbGllbnQsIGFyZ3MpOwogIH0KICBhc3luYyBmdW5jdGlvbiBpbnRlcm5hbF9lc3RpbWF0ZUZlZXNQZXJHYXMoY2xpZW50LCBhcmdzKSB7CiAgICBjb25zdCB7IGJsb2NrOiBibG9ja18sIGNoYWluID0gY2xpZW50LmNoYWluLCByZXF1ZXN0LCB0eXBlID0gImVpcDE1NTkiIH0gPSBhcmdzIHx8IHt9OwogICAgY29uc3QgYmFzZUZlZU11bHRpcGxpZXIgPSBhd2FpdCAoYXN5bmMgKCkgPT4gewogICAgICBpZiAodHlwZW9mIGNoYWluPy5mZWVzPy5iYXNlRmVlTXVsdGlwbGllciA9PT0gImZ1bmN0aW9uIikKICAgICAgICByZXR1cm4gY2hhaW4uZmVlcy5iYXNlRmVlTXVsdGlwbGllcih7CiAgICAgICAgICBibG9jazogYmxvY2tfLAogICAgICAgICAgY2xpZW50LAogICAgICAgICAgcmVxdWVzdAogICAgICAgIH0pOwogICAgICByZXR1cm4gY2hhaW4/LmZlZXM/LmJhc2VGZWVNdWx0aXBsaWVyID8/IDEuMjsKICAgIH0pKCk7CiAgICBpZiAoYmFzZUZlZU11bHRpcGxpZXIgPCAxKQogICAgICB0aHJvdyBuZXcgQmFzZUZlZVNjYWxhckVycm9yKCk7CiAgICBjb25zdCBkZWNpbWFscyA9IGJhc2VGZWVNdWx0aXBsaWVyLnRvU3RyaW5nKCkuc3BsaXQoIi4iKVsxXT8ubGVuZ3RoID8/IDA7CiAgICBjb25zdCBkZW5vbWluYXRvciA9IDEwICoqIGRlY2ltYWxzOwogICAgY29uc3QgbXVsdGlwbHkgPSAoYmFzZTIpID0+IGJhc2UyICogQmlnSW50KE1hdGguY2VpbChiYXNlRmVlTXVsdGlwbGllciAqIGRlbm9taW5hdG9yKSkgLyBCaWdJbnQoZGVub21pbmF0b3IpOwogICAgY29uc3QgYmxvY2sgPSBibG9ja18gPyBibG9ja18gOiBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRCbG9jaywgImdldEJsb2NrIikoe30pOwogICAgaWYgKHR5cGVvZiBjaGFpbj8uZmVlcz8uZXN0aW1hdGVGZWVzUGVyR2FzID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGNvbnN0IGZlZXMyID0gYXdhaXQgY2hhaW4uZmVlcy5lc3RpbWF0ZUZlZXNQZXJHYXMoewogICAgICAgIGJsb2NrOiBibG9ja18sCiAgICAgICAgY2xpZW50LAogICAgICAgIG11bHRpcGx5LAogICAgICAgIHJlcXVlc3QsCiAgICAgICAgdHlwZQogICAgICB9KTsKICAgICAgaWYgKGZlZXMyICE9PSBudWxsKQogICAgICAgIHJldHVybiBmZWVzMjsKICAgIH0KICAgIGlmICh0eXBlID09PSAiZWlwMTU1OSIpIHsKICAgICAgaWYgKHR5cGVvZiBibG9jay5iYXNlRmVlUGVyR2FzICE9PSAiYmlnaW50IikKICAgICAgICB0aHJvdyBuZXcgRWlwMTU1OUZlZXNOb3RTdXBwb3J0ZWRFcnJvcigpOwogICAgICBjb25zdCBtYXhQcmlvcml0eUZlZVBlckdhcyA9IHR5cGVvZiByZXF1ZXN0Py5tYXhQcmlvcml0eUZlZVBlckdhcyA9PT0gImJpZ2ludCIgPyByZXF1ZXN0Lm1heFByaW9yaXR5RmVlUGVyR2FzIDogYXdhaXQgaW50ZXJuYWxfZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcyhjbGllbnQsIHsKICAgICAgICBibG9jaywKICAgICAgICBjaGFpbiwKICAgICAgICByZXF1ZXN0CiAgICAgIH0pOwogICAgICBjb25zdCBiYXNlRmVlUGVyR2FzID0gbXVsdGlwbHkoYmxvY2suYmFzZUZlZVBlckdhcyk7CiAgICAgIGNvbnN0IG1heEZlZVBlckdhcyA9IHJlcXVlc3Q/Lm1heEZlZVBlckdhcyA/PyBiYXNlRmVlUGVyR2FzICsgbWF4UHJpb3JpdHlGZWVQZXJHYXM7CiAgICAgIHJldHVybiB7CiAgICAgICAgbWF4RmVlUGVyR2FzLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzCiAgICAgIH07CiAgICB9CiAgICBjb25zdCBnYXNQcmljZSA9IHJlcXVlc3Q/Lmdhc1ByaWNlID8/IG11bHRpcGx5KGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEdhc1ByaWNlLCAiZ2V0R2FzUHJpY2UiKSh7fSkpOwogICAgcmV0dXJuIHsKICAgICAgZ2FzUHJpY2UKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldFRyYW5zYWN0aW9uQ291bnQuanMKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25Db3VudChjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tUYWcgPSAibGF0ZXN0IiwgYmxvY2tOdW1iZXIgfSkgewogICAgY29uc3QgY291bnQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRUcmFuc2FjdGlvbkNvdW50IiwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYmxvY2tOdW1iZXIgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiBibG9ja1RhZ10KICAgIH0sIHsgZGVkdXBlOiBCb29sZWFuKGJsb2NrTnVtYmVyKSB9KTsKICAgIHJldHVybiBoZXhUb051bWJlcihjb3VudCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Jsb2IvYmxvYnNUb0NvbW1pdG1lbnRzLmpzCiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIGJsb2JzVG9Db21taXRtZW50cyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGt6ZyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IGJsb2JzID0gdHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gcGFyYW1ldGVycy5ibG9icy5tYXAoKHgpID0+IGhleFRvQnl0ZXMoeCkpIDogcGFyYW1ldGVycy5ibG9iczsKICAgIGNvbnN0IGNvbW1pdG1lbnRzID0gW107CiAgICBmb3IgKGNvbnN0IGJsb2Igb2YgYmxvYnMpCiAgICAgIGNvbW1pdG1lbnRzLnB1c2goVWludDhBcnJheS5mcm9tKGt6Zy5ibG9iVG9LemdDb21taXRtZW50KGJsb2IpKSk7CiAgICByZXR1cm4gdG8gPT09ICJieXRlcyIgPyBjb21taXRtZW50cyA6IGNvbW1pdG1lbnRzLm1hcCgoeCkgPT4gYnl0ZXNUb0hleCh4KSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Jsb2IvYmxvYnNUb1Byb29mcy5qcwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBibG9ic1RvUHJvb2ZzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsga3pnIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgdG8gPSBwYXJhbWV0ZXJzLnRvID8/ICh0eXBlb2YgcGFyYW1ldGVycy5ibG9ic1swXSA9PT0gInN0cmluZyIgPyAiaGV4IiA6ICJieXRlcyIpOwogICAgY29uc3QgYmxvYnMgPSB0eXBlb2YgcGFyYW1ldGVycy5ibG9ic1swXSA9PT0gInN0cmluZyIgPyBwYXJhbWV0ZXJzLmJsb2JzLm1hcCgoeCkgPT4gaGV4VG9CeXRlcyh4KSkgOiBwYXJhbWV0ZXJzLmJsb2JzOwogICAgY29uc3QgY29tbWl0bWVudHMgPSB0eXBlb2YgcGFyYW1ldGVycy5jb21taXRtZW50c1swXSA9PT0gInN0cmluZyIgPyBwYXJhbWV0ZXJzLmNvbW1pdG1lbnRzLm1hcCgoeCkgPT4gaGV4VG9CeXRlcyh4KSkgOiBwYXJhbWV0ZXJzLmNvbW1pdG1lbnRzOwogICAgY29uc3QgcHJvb2ZzID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2JzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IGJsb2IgPSBibG9ic1tpXTsKICAgICAgY29uc3QgY29tbWl0bWVudCA9IGNvbW1pdG1lbnRzW2ldOwogICAgICBwcm9vZnMucHVzaChVaW50OEFycmF5LmZyb20oa3pnLmNvbXB1dGVCbG9iS3pnUHJvb2YoYmxvYiwgY29tbWl0bWVudCkpKTsKICAgIH0KICAgIHJldHVybiB0byA9PT0gImJ5dGVzIiA/IHByb29mcyA6IHByb29mcy5tYXAoKHgpID0+IGJ5dGVzVG9IZXgoeCkpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL2NvbW1pdG1lbnRUb1ZlcnNpb25lZEhhc2guanMKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9zaGEyNTYuanMKICBpbml0X3NoYTI1NigpOwogIGluaXRfaXNIZXgoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gc2hhMjU2Mih2YWx1ZSwgdG9fKSB7CiAgICBjb25zdCB0byA9IHRvXyB8fCAiaGV4IjsKICAgIGNvbnN0IGJ5dGVzMiA9IHNoYTI1Nihpc0hleCh2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pID8gdG9CeXRlcyh2YWx1ZSkgOiB2YWx1ZSk7CiAgICBpZiAodG8gPT09ICJieXRlcyIpCiAgICAgIHJldHVybiBieXRlczI7CiAgICByZXR1cm4gdG9IZXgoYnl0ZXMyKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYmxvYi9jb21taXRtZW50VG9WZXJzaW9uZWRIYXNoLmpzCiAgZnVuY3Rpb24gY29tbWl0bWVudFRvVmVyc2lvbmVkSGFzaChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGNvbW1pdG1lbnQsIHZlcnNpb246IHZlcnNpb24zID0gMSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIGNvbW1pdG1lbnQgPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IHZlcnNpb25lZEhhc2ggPSBzaGEyNTYyKGNvbW1pdG1lbnQsICJieXRlcyIpOwogICAgdmVyc2lvbmVkSGFzaC5zZXQoW3ZlcnNpb24zXSwgMCk7CiAgICByZXR1cm4gdG8gPT09ICJieXRlcyIgPyB2ZXJzaW9uZWRIYXNoIDogYnl0ZXNUb0hleCh2ZXJzaW9uZWRIYXNoKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYmxvYi9jb21taXRtZW50c1RvVmVyc2lvbmVkSGFzaGVzLmpzCiAgZnVuY3Rpb24gY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlcyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGNvbW1pdG1lbnRzLCB2ZXJzaW9uOiB2ZXJzaW9uMyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIGNvbW1pdG1lbnRzWzBdID09PSAic3RyaW5nIiA/ICJoZXgiIDogImJ5dGVzIik7CiAgICBjb25zdCBoYXNoZXMgPSBbXTsKICAgIGZvciAoY29uc3QgY29tbWl0bWVudCBvZiBjb21taXRtZW50cykgewogICAgICBoYXNoZXMucHVzaChjb21taXRtZW50VG9WZXJzaW9uZWRIYXNoKHsKICAgICAgICBjb21taXRtZW50LAogICAgICAgIHRvLAogICAgICAgIHZlcnNpb246IHZlcnNpb24zCiAgICAgIH0pKTsKICAgIH0KICAgIHJldHVybiBoYXNoZXM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9ibG9iLmpzCiAgdmFyIGJsb2JzUGVyVHJhbnNhY3Rpb24gPSA2OwogIHZhciBieXRlc1BlckZpZWxkRWxlbWVudCA9IDMyOwogIHZhciBmaWVsZEVsZW1lbnRzUGVyQmxvYiA9IDQwOTY7CiAgdmFyIGJ5dGVzUGVyQmxvYiA9IGJ5dGVzUGVyRmllbGRFbGVtZW50ICogZmllbGRFbGVtZW50c1BlckJsb2I7CiAgdmFyIG1heEJ5dGVzUGVyVHJhbnNhY3Rpb24gPSBieXRlc1BlckJsb2IgKiBibG9ic1BlclRyYW5zYWN0aW9uIC0gLy8gdGVybWluYXRvciBieXRlICgweDgwKS4KICAxIC0gLy8gemVybyBieXRlICgweDAwKSBhcHBlbmRlZCB0byBlYWNoIGZpZWxkIGVsZW1lbnQuCiAgMSAqIGZpZWxkRWxlbWVudHNQZXJCbG9iICogYmxvYnNQZXJUcmFuc2FjdGlvbjsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMva3pnLmpzCiAgdmFyIHZlcnNpb25lZEhhc2hWZXJzaW9uS3pnID0gMTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvYmxvYi5qcwogIGluaXRfYmFzZSgpOwogIHZhciBCbG9iU2l6ZVRvb0xhcmdlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyBtYXhTaXplLCBzaXplOiBzaXplMyB9KSB7CiAgICAgIHN1cGVyKCJCbG9iIHNpemUgaXMgdG9vIGxhcmdlLiIsIHsKICAgICAgICBtZXRhTWVzc2FnZXM6IFtgTWF4OiAke21heFNpemV9IGJ5dGVzYCwgYEdpdmVuOiAke3NpemUzfSBieXRlc2BdLAogICAgICAgIG5hbWU6ICJCbG9iU2l6ZVRvb0xhcmdlRXJyb3IiCiAgICAgIH0pOwogICAgfQogIH07CiAgdmFyIEVtcHR5QmxvYkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiQmxvYiBkYXRhIG11c3Qgbm90IGJlIGVtcHR5LiIsIHsgbmFtZTogIkVtcHR5QmxvYkVycm9yIiB9KTsKICAgIH0KICB9OwogIHZhciBJbnZhbGlkVmVyc2lvbmVkSGFzaFNpemVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGhhc2g6IGhhc2gzLCBzaXplOiBzaXplMyB9KSB7CiAgICAgIHN1cGVyKGBWZXJzaW9uZWQgaGFzaCAiJHtoYXNoM30iIHNpemUgaXMgaW52YWxpZC5gLCB7CiAgICAgICAgbWV0YU1lc3NhZ2VzOiBbIkV4cGVjdGVkOiAzMiIsIGBSZWNlaXZlZDogJHtzaXplM31gXSwKICAgICAgICBuYW1lOiAiSW52YWxpZFZlcnNpb25lZEhhc2hTaXplRXJyb3IiCiAgICAgIH0pOwogICAgfQogIH07CiAgdmFyIEludmFsaWRWZXJzaW9uZWRIYXNoVmVyc2lvbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgaGFzaDogaGFzaDMsIHZlcnNpb246IHZlcnNpb24zIH0pIHsKICAgICAgc3VwZXIoYFZlcnNpb25lZCBoYXNoICIke2hhc2gzfSIgdmVyc2lvbiBpcyBpbnZhbGlkLmAsIHsKICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgIGBFeHBlY3RlZDogJHt2ZXJzaW9uZWRIYXNoVmVyc2lvbkt6Z31gLAogICAgICAgICAgYFJlY2VpdmVkOiAke3ZlcnNpb24zfWAKICAgICAgICBdLAogICAgICAgIG5hbWU6ICJJbnZhbGlkVmVyc2lvbmVkSGFzaFZlcnNpb25FcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL3RvQmxvYnMuanMKICBpbml0X2N1cnNvcjIoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gdG9CbG9icyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB0byA9IHBhcmFtZXRlcnMudG8gPz8gKHR5cGVvZiBwYXJhbWV0ZXJzLmRhdGEgPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgcGFyYW1ldGVycy5kYXRhID09PSAic3RyaW5nIiA/IGhleFRvQnl0ZXMocGFyYW1ldGVycy5kYXRhKSA6IHBhcmFtZXRlcnMuZGF0YTsKICAgIGNvbnN0IHNpemVfID0gc2l6ZShkYXRhKTsKICAgIGlmICghc2l6ZV8pCiAgICAgIHRocm93IG5ldyBFbXB0eUJsb2JFcnJvcigpOwogICAgaWYgKHNpemVfID4gbWF4Qnl0ZXNQZXJUcmFuc2FjdGlvbikKICAgICAgdGhyb3cgbmV3IEJsb2JTaXplVG9vTGFyZ2VFcnJvcih7CiAgICAgICAgbWF4U2l6ZTogbWF4Qnl0ZXNQZXJUcmFuc2FjdGlvbiwKICAgICAgICBzaXplOiBzaXplXwogICAgICB9KTsKICAgIGNvbnN0IGJsb2JzID0gW107CiAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgIGxldCBwb3NpdGlvbiA9IDA7CiAgICB3aGlsZSAoYWN0aXZlKSB7CiAgICAgIGNvbnN0IGJsb2IgPSBjcmVhdGVDdXJzb3IobmV3IFVpbnQ4QXJyYXkoYnl0ZXNQZXJCbG9iKSk7CiAgICAgIGxldCBzaXplMyA9IDA7CiAgICAgIHdoaWxlIChzaXplMyA8IGZpZWxkRWxlbWVudHNQZXJCbG9iKSB7CiAgICAgICAgY29uc3QgYnl0ZXMyID0gZGF0YS5zbGljZShwb3NpdGlvbiwgcG9zaXRpb24gKyAoYnl0ZXNQZXJGaWVsZEVsZW1lbnQgLSAxKSk7CiAgICAgICAgYmxvYi5wdXNoQnl0ZSgwKTsKICAgICAgICBibG9iLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIGlmIChieXRlczIubGVuZ3RoIDwgMzEpIHsKICAgICAgICAgIGJsb2IucHVzaEJ5dGUoMTI4KTsKICAgICAgICAgIGFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNpemUzKys7CiAgICAgICAgcG9zaXRpb24gKz0gMzE7CiAgICAgIH0KICAgICAgYmxvYnMucHVzaChibG9iKTsKICAgIH0KICAgIHJldHVybiB0byA9PT0gImJ5dGVzIiA/IGJsb2JzLm1hcCgoeCkgPT4geC5ieXRlcykgOiBibG9icy5tYXAoKHgpID0+IGJ5dGVzVG9IZXgoeC5ieXRlcykpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL3RvQmxvYlNpZGVjYXJzLmpzCiAgZnVuY3Rpb24gdG9CbG9iU2lkZWNhcnMocGFyYW1ldGVycykgewogICAgY29uc3QgeyBkYXRhLCBremcsIHRvIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgYmxvYnMgPSBwYXJhbWV0ZXJzLmJsb2JzID8/IHRvQmxvYnMoeyBkYXRhLCB0byB9KTsKICAgIGNvbnN0IGNvbW1pdG1lbnRzID0gcGFyYW1ldGVycy5jb21taXRtZW50cyA/PyBibG9ic1RvQ29tbWl0bWVudHMoeyBibG9icywga3pnLCB0byB9KTsKICAgIGNvbnN0IHByb29mcyA9IHBhcmFtZXRlcnMucHJvb2ZzID8/IGJsb2JzVG9Qcm9vZnMoeyBibG9icywgY29tbWl0bWVudHMsIGt6ZywgdG8gfSk7CiAgICBjb25zdCBzaWRlY2FycyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBibG9icy5sZW5ndGg7IGkrKykKICAgICAgc2lkZWNhcnMucHVzaCh7CiAgICAgICAgYmxvYjogYmxvYnNbaV0sCiAgICAgICAgY29tbWl0bWVudDogY29tbWl0bWVudHNbaV0sCiAgICAgICAgcHJvb2Y6IHByb29mc1tpXQogICAgICB9KTsKICAgIHJldHVybiBzaWRlY2FyczsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdC5qcwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL2dldFRyYW5zYWN0aW9uVHlwZS5qcwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb24pIHsKICAgIGlmICh0cmFuc2FjdGlvbi50eXBlKQogICAgICByZXR1cm4gdHJhbnNhY3Rpb24udHlwZTsKICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24uYXV0aG9yaXphdGlvbkxpc3QgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gImVpcDc3MDIiOwogICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbi5ibG9icyAhPT0gInVuZGVmaW5lZCIgfHwgdHlwZW9mIHRyYW5zYWN0aW9uLmJsb2JWZXJzaW9uZWRIYXNoZXMgIT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiB0cmFuc2FjdGlvbi5tYXhGZWVQZXJCbG9iR2FzICE9PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgdHJhbnNhY3Rpb24uc2lkZWNhcnMgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gImVpcDQ4NDQiOwogICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbi5tYXhGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiB0cmFuc2FjdGlvbi5tYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgcmV0dXJuICJlaXAxNTU5IjsKICAgIH0KICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24uZ2FzUHJpY2UgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24uYWNjZXNzTGlzdCAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgcmV0dXJuICJlaXAyOTMwIjsKICAgICAgcmV0dXJuICJsZWdhY3kiOwogICAgfQogICAgdGhyb3cgbmV3IEludmFsaWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbkVycm9yKHsgdHJhbnNhY3Rpb24gfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldENoYWluSWQuanMKICBpbml0X2Zyb21IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRDaGFpbklkKGNsaWVudCkgewogICAgY29uc3QgY2hhaW5JZEhleCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2NoYWluSWQiCiAgICB9LCB7IGRlZHVwZTogdHJ1ZSB9KTsKICAgIHJldHVybiBoZXhUb051bWJlcihjaGFpbklkSGV4KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdC5qcwogIHZhciBkZWZhdWx0UGFyYW1ldGVycyA9IFsKICAgICJibG9iVmVyc2lvbmVkSGFzaGVzIiwKICAgICJjaGFpbklkIiwKICAgICJmZWVzIiwKICAgICJnYXMiLAogICAgIm5vbmNlIiwKICAgICJ0eXBlIgogIF07CiAgYXN5bmMgZnVuY3Rpb24gcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdChjbGllbnQsIGFyZ3MpIHsKICAgIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudF8gPSBjbGllbnQuYWNjb3VudCwgYmxvYnMsIGNoYWluLCBnYXMsIGt6Zywgbm9uY2UsIHBhcmFtZXRlcnMgPSBkZWZhdWx0UGFyYW1ldGVycywgdHlwZSB9ID0gYXJnczsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICBjb25zdCByZXF1ZXN0ID0geyAuLi5hcmdzLCAuLi5hY2NvdW50ID8geyBmcm9tOiBhY2NvdW50Py5hZGRyZXNzIH0gOiB7fSB9OwogICAgbGV0IGJsb2NrOwogICAgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvY2syKCkgewogICAgICBpZiAoYmxvY2spCiAgICAgICAgcmV0dXJuIGJsb2NrOwogICAgICBibG9jayA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrLCAiZ2V0QmxvY2siKSh7IGJsb2NrVGFnOiAibGF0ZXN0IiB9KTsKICAgICAgcmV0dXJuIGJsb2NrOwogICAgfQogICAgbGV0IGNoYWluSWQ7CiAgICBhc3luYyBmdW5jdGlvbiBnZXRDaGFpbklkMigpIHsKICAgICAgaWYgKGNoYWluSWQpCiAgICAgICAgcmV0dXJuIGNoYWluSWQ7CiAgICAgIGlmIChjaGFpbikKICAgICAgICByZXR1cm4gY2hhaW4uaWQ7CiAgICAgIGlmICh0eXBlb2YgYXJncy5jaGFpbklkICE9PSAidW5kZWZpbmVkIikKICAgICAgICByZXR1cm4gYXJncy5jaGFpbklkOwogICAgICBjb25zdCBjaGFpbklkXyA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldENoYWluSWQsICJnZXRDaGFpbklkIikoe30pOwogICAgICBjaGFpbklkID0gY2hhaW5JZF87CiAgICAgIHJldHVybiBjaGFpbklkOwogICAgfQogICAgaWYgKChwYXJhbWV0ZXJzLmluY2x1ZGVzKCJibG9iVmVyc2lvbmVkSGFzaGVzIikgfHwgcGFyYW1ldGVycy5pbmNsdWRlcygic2lkZWNhcnMiKSkgJiYgYmxvYnMgJiYga3pnKSB7CiAgICAgIGNvbnN0IGNvbW1pdG1lbnRzID0gYmxvYnNUb0NvbW1pdG1lbnRzKHsgYmxvYnMsIGt6ZyB9KTsKICAgICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoImJsb2JWZXJzaW9uZWRIYXNoZXMiKSkgewogICAgICAgIGNvbnN0IHZlcnNpb25lZEhhc2hlcyA9IGNvbW1pdG1lbnRzVG9WZXJzaW9uZWRIYXNoZXMoewogICAgICAgICAgY29tbWl0bWVudHMsCiAgICAgICAgICB0bzogImhleCIKICAgICAgICB9KTsKICAgICAgICByZXF1ZXN0LmJsb2JWZXJzaW9uZWRIYXNoZXMgPSB2ZXJzaW9uZWRIYXNoZXM7CiAgICAgIH0KICAgICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoInNpZGVjYXJzIikpIHsKICAgICAgICBjb25zdCBwcm9vZnMgPSBibG9ic1RvUHJvb2ZzKHsgYmxvYnMsIGNvbW1pdG1lbnRzLCBremcgfSk7CiAgICAgICAgY29uc3Qgc2lkZWNhcnMgPSB0b0Jsb2JTaWRlY2Fycyh7CiAgICAgICAgICBibG9icywKICAgICAgICAgIGNvbW1pdG1lbnRzLAogICAgICAgICAgcHJvb2ZzLAogICAgICAgICAgdG86ICJoZXgiCiAgICAgICAgfSk7CiAgICAgICAgcmVxdWVzdC5zaWRlY2FycyA9IHNpZGVjYXJzOwogICAgICB9CiAgICB9CiAgICBpZiAocGFyYW1ldGVycy5pbmNsdWRlcygiY2hhaW5JZCIpKQogICAgICByZXF1ZXN0LmNoYWluSWQgPSBhd2FpdCBnZXRDaGFpbklkMigpOwogICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoIm5vbmNlIikgJiYgdHlwZW9mIG5vbmNlID09PSAidW5kZWZpbmVkIiAmJiBhY2NvdW50KSB7CiAgICAgIGlmIChhY2NvdW50Lm5vbmNlTWFuYWdlcikgewogICAgICAgIGNvbnN0IGNoYWluSWQyID0gYXdhaXQgZ2V0Q2hhaW5JZDIoKTsKICAgICAgICByZXF1ZXN0Lm5vbmNlID0gYXdhaXQgYWNjb3VudC5ub25jZU1hbmFnZXIuY29uc3VtZSh7CiAgICAgICAgICBhZGRyZXNzOiBhY2NvdW50LmFkZHJlc3MsCiAgICAgICAgICBjaGFpbklkOiBjaGFpbklkMiwKICAgICAgICAgIGNsaWVudAogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHJlcXVlc3Qubm9uY2UgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRUcmFuc2FjdGlvbkNvdW50LCAiZ2V0VHJhbnNhY3Rpb25Db3VudCIpKHsKICAgICAgICAgIGFkZHJlc3M6IGFjY291bnQuYWRkcmVzcywKICAgICAgICAgIGJsb2NrVGFnOiAicGVuZGluZyIKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgaWYgKChwYXJhbWV0ZXJzLmluY2x1ZGVzKCJmZWVzIikgfHwgcGFyYW1ldGVycy5pbmNsdWRlcygidHlwZSIpKSAmJiB0eXBlb2YgdHlwZSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXF1ZXN0LnR5cGUgPSBnZXRUcmFuc2FjdGlvblR5cGUocmVxdWVzdCk7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIGNvbnN0IGJsb2NrMiA9IGF3YWl0IGdldEJsb2NrMigpOwogICAgICAgIHJlcXVlc3QudHlwZSA9IHR5cGVvZiBibG9jazI/LmJhc2VGZWVQZXJHYXMgPT09ICJiaWdpbnQiID8gImVpcDE1NTkiIDogImxlZ2FjeSI7CiAgICAgIH0KICAgIH0KICAgIGlmIChwYXJhbWV0ZXJzLmluY2x1ZGVzKCJmZWVzIikpIHsKICAgICAgaWYgKHJlcXVlc3QudHlwZSAhPT0gImxlZ2FjeSIgJiYgcmVxdWVzdC50eXBlICE9PSAiZWlwMjkzMCIpIHsKICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3QubWF4RmVlUGVyR2FzID09PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgcmVxdWVzdC5tYXhQcmlvcml0eUZlZVBlckdhcyA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIGNvbnN0IGJsb2NrMiA9IGF3YWl0IGdldEJsb2NrMigpOwogICAgICAgICAgY29uc3QgeyBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzIH0gPSBhd2FpdCBpbnRlcm5hbF9lc3RpbWF0ZUZlZXNQZXJHYXMoY2xpZW50LCB7CiAgICAgICAgICAgIGJsb2NrOiBibG9jazIsCiAgICAgICAgICAgIGNoYWluLAogICAgICAgICAgICByZXF1ZXN0CiAgICAgICAgICB9KTsKICAgICAgICAgIGlmICh0eXBlb2YgYXJncy5tYXhQcmlvcml0eUZlZVBlckdhcyA9PT0gInVuZGVmaW5lZCIgJiYgYXJncy5tYXhGZWVQZXJHYXMgJiYgYXJncy5tYXhGZWVQZXJHYXMgPCBtYXhQcmlvcml0eUZlZVBlckdhcykKICAgICAgICAgICAgdGhyb3cgbmV3IE1heEZlZVBlckdhc1Rvb0xvd0Vycm9yKHsKICAgICAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhcwogICAgICAgICAgICB9KTsKICAgICAgICAgIHJlcXVlc3QubWF4UHJpb3JpdHlGZWVQZXJHYXMgPSBtYXhQcmlvcml0eUZlZVBlckdhczsKICAgICAgICAgIHJlcXVlc3QubWF4RmVlUGVyR2FzID0gbWF4RmVlUGVyR2FzOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAodHlwZW9mIGFyZ3MubWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgYXJncy5tYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgICB0aHJvdyBuZXcgRWlwMTU1OUZlZXNOb3RTdXBwb3J0ZWRFcnJvcigpOwogICAgICAgIGNvbnN0IGJsb2NrMiA9IGF3YWl0IGdldEJsb2NrMigpOwogICAgICAgIGNvbnN0IHsgZ2FzUHJpY2U6IGdhc1ByaWNlXyB9ID0gYXdhaXQgaW50ZXJuYWxfZXN0aW1hdGVGZWVzUGVyR2FzKGNsaWVudCwgewogICAgICAgICAgYmxvY2s6IGJsb2NrMiwKICAgICAgICAgIGNoYWluLAogICAgICAgICAgcmVxdWVzdCwKICAgICAgICAgIHR5cGU6ICJsZWdhY3kiCiAgICAgICAgfSk7CiAgICAgICAgcmVxdWVzdC5nYXNQcmljZSA9IGdhc1ByaWNlXzsKICAgICAgfQogICAgfQogICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoImdhcyIpICYmIHR5cGVvZiBnYXMgPT09ICJ1bmRlZmluZWQiKQogICAgICByZXF1ZXN0LmdhcyA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGVzdGltYXRlR2FzLCAiZXN0aW1hdGVHYXMiKSh7CiAgICAgICAgLi4ucmVxdWVzdCwKICAgICAgICBhY2NvdW50OiBhY2NvdW50ID8geyBhZGRyZXNzOiBhY2NvdW50LmFkZHJlc3MsIHR5cGU6ICJqc29uLXJwYyIgfSA6IHZvaWQgMAogICAgICB9KTsKICAgIGFzc2VydFJlcXVlc3QocmVxdWVzdCk7CiAgICBkZWxldGUgcmVxdWVzdC5wYXJhbWV0ZXJzOwogICAgcmV0dXJuIHJlcXVlc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEJhbGFuY2UuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0QmFsYW5jZShjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tOdW1iZXIsIGJsb2NrVGFnID0gImxhdGVzdCIgfSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgIGNvbnN0IGJhbGFuY2UgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRCYWxhbmNlIiwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWddCiAgICB9KTsKICAgIHJldHVybiBCaWdJbnQoYmFsYW5jZSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2VzdGltYXRlR2FzLmpzCiAgYXN5bmMgZnVuY3Rpb24gZXN0aW1hdGVHYXMoY2xpZW50LCBhcmdzKSB7CiAgICBjb25zdCBhY2NvdW50XyA9IGFyZ3MuYWNjb3VudCA/PyBjbGllbnQuYWNjb3VudDsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICB0cnkgewogICAgICBsZXQgZXN0aW1hdGVHYXNfcnBjID0gZnVuY3Rpb24ocGFyYW1ldGVycykgewogICAgICAgIGNvbnN0IHsgYmxvY2s6IGJsb2NrMiwgcmVxdWVzdDogcmVxdWVzdDIsIHJwY1N0YXRlT3ZlcnJpZGU6IHJwY1N0YXRlT3ZlcnJpZGUyIH0gPSBwYXJhbWV0ZXJzOwogICAgICAgIHJldHVybiBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgICBtZXRob2Q6ICJldGhfZXN0aW1hdGVHYXMiLAogICAgICAgICAgcGFyYW1zOiBycGNTdGF0ZU92ZXJyaWRlMiA/IFtyZXF1ZXN0MiwgYmxvY2syID8/ICJsYXRlc3QiLCBycGNTdGF0ZU92ZXJyaWRlMl0gOiBibG9jazIgPyBbcmVxdWVzdDIsIGJsb2NrMl0gOiBbcmVxdWVzdDJdCiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIGNvbnN0IHsgYWNjZXNzTGlzdCwgYXV0aG9yaXphdGlvbkxpc3QsIGJsb2JzLCBibG9iVmVyc2lvbmVkSGFzaGVzLCBibG9ja051bWJlciwgYmxvY2tUYWcsIGRhdGEsIGdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckJsb2JHYXMsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIG5vbmNlLCB2YWx1ZSwgc3RhdGVPdmVycmlkZSwgLi4ucmVzdCB9ID0gYXdhaXQgcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdChjbGllbnQsIHsKICAgICAgICAuLi5hcmdzLAogICAgICAgIHBhcmFtZXRlcnM6ICgKICAgICAgICAgIC8vIFNvbWUgUlBDIFByb3ZpZGVycyBkbyBub3QgY29tcHV0ZSB2ZXJzaW9uZWQgaGFzaGVzIGZyb20gYmxvYnMuIFdlIHdpbGwgbmVlZAogICAgICAgICAgLy8gdG8gY29tcHV0ZSB0aGVtLgogICAgICAgICAgYWNjb3VudD8udHlwZSA9PT0gImxvY2FsIiA/IHZvaWQgMCA6IFsiYmxvYlZlcnNpb25lZEhhc2hlcyJdCiAgICAgICAgKQogICAgICB9KTsKICAgICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgICAgY29uc3QgYmxvY2sgPSBibG9ja051bWJlckhleCB8fCBibG9ja1RhZzsKICAgICAgY29uc3QgcnBjU3RhdGVPdmVycmlkZSA9IHNlcmlhbGl6ZVN0YXRlT3ZlcnJpZGUoc3RhdGVPdmVycmlkZSk7CiAgICAgIGNvbnN0IHRvID0gYXdhaXQgKGFzeW5jICgpID0+IHsKICAgICAgICBpZiAocmVzdC50bykKICAgICAgICAgIHJldHVybiByZXN0LnRvOwogICAgICAgIGlmIChhdXRob3JpemF0aW9uTGlzdCAmJiBhdXRob3JpemF0aW9uTGlzdC5sZW5ndGggPiAwKQogICAgICAgICAgcmV0dXJuIGF3YWl0IHJlY292ZXJBdXRob3JpemF0aW9uQWRkcmVzcyh7CiAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGF1dGhvcml6YXRpb25MaXN0WzBdCiAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgdG9gIGlzIHJlcXVpcmVkLiBDb3VsZCBub3QgaW5mZXIgZnJvbSBgYXV0aG9yaXphdGlvbkxpc3RgIik7CiAgICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9KSgpOwogICAgICBhc3NlcnRSZXF1ZXN0KGFyZ3MpOwogICAgICBjb25zdCBjaGFpbkZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb25SZXF1ZXN0Py5mb3JtYXQ7CiAgICAgIGNvbnN0IGZvcm1hdCA9IGNoYWluRm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgICAgY29uc3QgcmVxdWVzdCA9IGZvcm1hdCh7CiAgICAgICAgLy8gUGljayBvdXQgZXh0cmEgZGF0YSB0aGF0IG1pZ2h0IGV4aXN0IG9uIHRoZSBjaGFpbidzIHRyYW5zYWN0aW9uIHJlcXVlc3QgdHlwZS4KICAgICAgICAuLi5leHRyYWN0KHJlc3QsIHsgZm9ybWF0OiBjaGFpbkZvcm1hdCB9KSwKICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgIGFjY2Vzc0xpc3QsCiAgICAgICAgYXV0aG9yaXphdGlvbkxpc3QsCiAgICAgICAgYmxvYnMsCiAgICAgICAgYmxvYlZlcnNpb25lZEhhc2hlcywKICAgICAgICBkYXRhLAogICAgICAgIGdhcywKICAgICAgICBnYXNQcmljZSwKICAgICAgICBtYXhGZWVQZXJCbG9iR2FzLAogICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhcywKICAgICAgICBub25jZSwKICAgICAgICB0bywKICAgICAgICB2YWx1ZQogICAgICB9KTsKICAgICAgbGV0IGVzdGltYXRlID0gQmlnSW50KGF3YWl0IGVzdGltYXRlR2FzX3JwYyh7IGJsb2NrLCByZXF1ZXN0LCBycGNTdGF0ZU92ZXJyaWRlIH0pKTsKICAgICAgaWYgKGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICAgICAgY29uc3QgdmFsdWUyID0gYXdhaXQgZ2V0QmFsYW5jZShjbGllbnQsIHsgYWRkcmVzczogcmVxdWVzdC5mcm9tIH0pOwogICAgICAgIGNvbnN0IGVzdGltYXRlcyA9IGF3YWl0IFByb21pc2UuYWxsKGF1dGhvcml6YXRpb25MaXN0Lm1hcChhc3luYyAoYXV0aG9yaXphdGlvbikgPT4gewogICAgICAgICAgY29uc3QgeyBjb250cmFjdEFkZHJlc3MgfSA9IGF1dGhvcml6YXRpb247CiAgICAgICAgICBjb25zdCBlc3RpbWF0ZTIgPSBhd2FpdCBlc3RpbWF0ZUdhc19ycGMoewogICAgICAgICAgICBibG9jaywKICAgICAgICAgICAgcmVxdWVzdDogewogICAgICAgICAgICAgIGF1dGhvcml6YXRpb25MaXN0OiB2b2lkIDAsCiAgICAgICAgICAgICAgZGF0YSwKICAgICAgICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgICAgICAgIHRvOiBjb250cmFjdEFkZHJlc3MsCiAgICAgICAgICAgICAgdmFsdWU6IG51bWJlclRvSGV4KHZhbHVlMikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcnBjU3RhdGVPdmVycmlkZQogICAgICAgICAgfSkuY2F0Y2goKCkgPT4gMTAwMDAwbik7CiAgICAgICAgICByZXR1cm4gMm4gKiBCaWdJbnQoZXN0aW1hdGUyKTsKICAgICAgICB9KSk7CiAgICAgICAgZXN0aW1hdGUgKz0gZXN0aW1hdGVzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLCAwbik7CiAgICAgIH0KICAgICAgcmV0dXJuIGVzdGltYXRlOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIHRocm93IGdldEVzdGltYXRlR2FzRXJyb3IoZXJyLCB7CiAgICAgICAgLi4uYXJncywKICAgICAgICBhY2NvdW50LAogICAgICAgIGNoYWluOiBjbGllbnQuY2hhaW4KICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2VzdGltYXRlQ29udHJhY3RHYXMuanMKICBhc3luYyBmdW5jdGlvbiBlc3RpbWF0ZUNvbnRyYWN0R2FzKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGZ1bmN0aW9uTmFtZSwgLi4ucmVxdWVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVGdW5jdGlvbkRhdGEoewogICAgICBhYmk6IGFiaTIsCiAgICAgIGFyZ3MsCiAgICAgIGZ1bmN0aW9uTmFtZQogICAgfSk7CiAgICB0cnkgewogICAgICBjb25zdCBnYXMgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBlc3RpbWF0ZUdhcywgImVzdGltYXRlR2FzIikoewogICAgICAgIGRhdGEsCiAgICAgICAgdG86IGFkZHJlc3MsCiAgICAgICAgLi4ucmVxdWVzdAogICAgICB9KTsKICAgICAgcmV0dXJuIGdhczsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnN0IGFjY291bnQgPSByZXF1ZXN0LmFjY291bnQgPyBwYXJzZUFjY291bnQocmVxdWVzdC5hY2NvdW50KSA6IHZvaWQgMDsKICAgICAgdGhyb3cgZ2V0Q29udHJhY3RFcnJvcihlcnJvciwgewogICAgICAgIGFiaTogYWJpMiwKICAgICAgICBhZGRyZXNzLAogICAgICAgIGFyZ3MsCiAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9jb250cmFjdC9lc3RpbWF0ZUNvbnRyYWN0R2FzIiwKICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgc2VuZGVyOiBhY2NvdW50Py5hZGRyZXNzCiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRDb250cmFjdEV2ZW50cy5qcwogIGluaXRfZ2V0QWJpSXRlbSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9wYXJzZUV2ZW50TG9ncy5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9pc0FkZHJlc3NFcXVhbCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfa2VjY2FrMjU2KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZUV2ZW50TG9nLmpzCiAgaW5pdF9hYmkoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvRXZlbnRTZWxlY3RvcigpOwogIGluaXRfY3Vyc29yKCk7CiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9mb3JtYXRBYmlJdGVtMigpOwogIHZhciBkb2NzUGF0aDMgPSAiL2RvY3MvY29udHJhY3QvZGVjb2RlRXZlbnRMb2ciOwogIGZ1bmN0aW9uIGRlY29kZUV2ZW50TG9nKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBkYXRhLCBzdHJpY3Q6IHN0cmljdF8sIHRvcGljcyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHN0cmljdCA9IHN0cmljdF8gPz8gdHJ1ZTsKICAgIGNvbnN0IFtzaWduYXR1cmUsIC4uLmFyZ1RvcGljc10gPSB0b3BpY3M7CiAgICBpZiAoIXNpZ25hdHVyZSkKICAgICAgdGhyb3cgbmV3IEFiaUV2ZW50U2lnbmF0dXJlRW1wdHlUb3BpY3NFcnJvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDMgfSk7CiAgICBjb25zdCBhYmlJdGVtID0gYWJpMi5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICJldmVudCIgJiYgc2lnbmF0dXJlID09PSB0b0V2ZW50U2VsZWN0b3IoZm9ybWF0QWJpSXRlbTIoeCkpKTsKICAgIGlmICghKGFiaUl0ZW0gJiYgIm5hbWUiIGluIGFiaUl0ZW0pIHx8IGFiaUl0ZW0udHlwZSAhPT0gImV2ZW50IikKICAgICAgdGhyb3cgbmV3IEFiaUV2ZW50U2lnbmF0dXJlTm90Rm91bmRFcnJvcihzaWduYXR1cmUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoMyB9KTsKICAgIGNvbnN0IHsgbmFtZSwgaW5wdXRzIH0gPSBhYmlJdGVtOwogICAgY29uc3QgaXNVbm5hbWVkID0gaW5wdXRzPy5zb21lKCh4KSA9PiAhKCJuYW1lIiBpbiB4ICYmIHgubmFtZSkpOwogICAgbGV0IGFyZ3MgPSBpc1VubmFtZWQgPyBbXSA6IHt9OwogICAgY29uc3QgaW5kZXhlZElucHV0cyA9IGlucHV0cy5maWx0ZXIoKHgpID0+ICJpbmRleGVkIiBpbiB4ICYmIHguaW5kZXhlZCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4ZWRJbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgcGFyYW0gPSBpbmRleGVkSW5wdXRzW2ldOwogICAgICBjb25zdCB0b3BpYyA9IGFyZ1RvcGljc1tpXTsKICAgICAgaWYgKCF0b3BpYykKICAgICAgICB0aHJvdyBuZXcgRGVjb2RlTG9nVG9waWNzTWlzbWF0Y2goewogICAgICAgICAgYWJpSXRlbSwKICAgICAgICAgIHBhcmFtCiAgICAgICAgfSk7CiAgICAgIGFyZ3NbaXNVbm5hbWVkID8gaSA6IHBhcmFtLm5hbWUgfHwgaV0gPSBkZWNvZGVUb3BpYyh7IHBhcmFtLCB2YWx1ZTogdG9waWMgfSk7CiAgICB9CiAgICBjb25zdCBub25JbmRleGVkSW5wdXRzID0gaW5wdXRzLmZpbHRlcigoeCkgPT4gISgiaW5kZXhlZCIgaW4geCAmJiB4LmluZGV4ZWQpKTsKICAgIGlmIChub25JbmRleGVkSW5wdXRzLmxlbmd0aCA+IDApIHsKICAgICAgaWYgKGRhdGEgJiYgZGF0YSAhPT0gIjB4IikgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IGRlY29kZUFiaVBhcmFtZXRlcnMobm9uSW5kZXhlZElucHV0cywgZGF0YSk7CiAgICAgICAgICBpZiAoZGVjb2RlZERhdGEpIHsKICAgICAgICAgICAgaWYgKGlzVW5uYW1lZCkKICAgICAgICAgICAgICBhcmdzID0gWy4uLmFyZ3MsIC4uLmRlY29kZWREYXRhXTsKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub25JbmRleGVkSW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBhcmdzW25vbkluZGV4ZWRJbnB1dHNbaV0ubmFtZV0gPSBkZWNvZGVkRGF0YVtpXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGlmIChzdHJpY3QpIHsKICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yIHx8IGVyciBpbnN0YW5jZW9mIFBvc2l0aW9uT3V0T2ZCb3VuZHNFcnJvcikKICAgICAgICAgICAgICB0aHJvdyBuZXcgRGVjb2RlTG9nRGF0YU1pc21hdGNoKHsKICAgICAgICAgICAgICAgIGFiaUl0ZW0sCiAgICAgICAgICAgICAgICBkYXRhLAogICAgICAgICAgICAgICAgcGFyYW1zOiBub25JbmRleGVkSW5wdXRzLAogICAgICAgICAgICAgICAgc2l6ZTogc2l6ZShkYXRhKQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHN0cmljdCkgewogICAgICAgIHRocm93IG5ldyBEZWNvZGVMb2dEYXRhTWlzbWF0Y2goewogICAgICAgICAgYWJpSXRlbSwKICAgICAgICAgIGRhdGE6ICIweCIsCiAgICAgICAgICBwYXJhbXM6IG5vbkluZGV4ZWRJbnB1dHMsCiAgICAgICAgICBzaXplOiAwCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB7CiAgICAgIGV2ZW50TmFtZTogbmFtZSwKICAgICAgYXJnczogT2JqZWN0LnZhbHVlcyhhcmdzKS5sZW5ndGggPiAwID8gYXJncyA6IHZvaWQgMAogICAgfTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlVG9waWMoeyBwYXJhbSwgdmFsdWUgfSkgewogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJzdHJpbmciIHx8IHBhcmFtLnR5cGUgPT09ICJieXRlcyIgfHwgcGFyYW0udHlwZSA9PT0gInR1cGxlIiB8fCBwYXJhbS50eXBlLm1hdGNoKC9eKC4qKVxbKFxkKyk/XF0kLykpCiAgICAgIHJldHVybiB2YWx1ZTsKICAgIGNvbnN0IGRlY29kZWRBcmcgPSBkZWNvZGVBYmlQYXJhbWV0ZXJzKFtwYXJhbV0sIHZhbHVlKSB8fCBbXTsKICAgIHJldHVybiBkZWNvZGVkQXJnWzBdOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvcGFyc2VFdmVudExvZ3MuanMKICBpbml0X2dldEFiaUl0ZW0oKTsKICBmdW5jdGlvbiBwYXJzZUV2ZW50TG9ncyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYXJncywgbG9ncywgc3RyaWN0ID0gdHJ1ZSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGV2ZW50TmFtZSA9ICgoKSA9PiB7CiAgICAgIGlmICghcGFyYW1ldGVycy5ldmVudE5hbWUpCiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1ldGVycy5ldmVudE5hbWUpKQogICAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmV2ZW50TmFtZTsKICAgICAgcmV0dXJuIFtwYXJhbWV0ZXJzLmV2ZW50TmFtZV07CiAgICB9KSgpOwogICAgcmV0dXJuIGxvZ3MubWFwKChsb2cpID0+IHsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBhYmlJdGVtID0gZ2V0QWJpSXRlbSh7CiAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICBuYW1lOiBsb2cudG9waWNzWzBdCiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFhYmlJdGVtKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgY29uc3QgZXZlbnQgPSBkZWNvZGVFdmVudExvZyh7CiAgICAgICAgICAuLi5sb2csCiAgICAgICAgICBhYmk6IFthYmlJdGVtXSwKICAgICAgICAgIHN0cmljdAogICAgICAgIH0pOwogICAgICAgIGlmIChldmVudE5hbWUgJiYgIWV2ZW50TmFtZS5pbmNsdWRlcyhldmVudC5ldmVudE5hbWUpKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKCFpbmNsdWRlc0FyZ3MoewogICAgICAgICAgYXJnczogZXZlbnQuYXJncywKICAgICAgICAgIGlucHV0czogYWJpSXRlbS5pbnB1dHMsCiAgICAgICAgICBtYXRjaEFyZ3M6IGFyZ3MKICAgICAgICB9KSkKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIHJldHVybiB7IC4uLmV2ZW50LCAuLi5sb2cgfTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgbGV0IGV2ZW50TmFtZTI7CiAgICAgICAgbGV0IGlzVW5uYW1lZDsKICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgQWJpRXZlbnRTaWduYXR1cmVOb3RGb3VuZEVycm9yKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIERlY29kZUxvZ0RhdGFNaXNtYXRjaCB8fCBlcnIgaW5zdGFuY2VvZiBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCkgewogICAgICAgICAgaWYgKHN0cmljdCkKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICBldmVudE5hbWUyID0gZXJyLmFiaUl0ZW0ubmFtZTsKICAgICAgICAgIGlzVW5uYW1lZCA9IGVyci5hYmlJdGVtLmlucHV0cz8uc29tZSgoeCkgPT4gISgibmFtZSIgaW4geCAmJiB4Lm5hbWUpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgLi4ubG9nLCBhcmdzOiBpc1VubmFtZWQgPyBbXSA6IHt9LCBldmVudE5hbWU6IGV2ZW50TmFtZTIgfTsKICAgICAgfQogICAgfSkuZmlsdGVyKEJvb2xlYW4pOwogIH0KICBmdW5jdGlvbiBpbmNsdWRlc0FyZ3MocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhcmdzLCBpbnB1dHMsIG1hdGNoQXJncyB9ID0gcGFyYW1ldGVyczsKICAgIGlmICghbWF0Y2hBcmdzKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICghYXJncykKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZnVuY3Rpb24gaXNFcXVhbChpbnB1dCwgdmFsdWUsIGFyZykgewogICAgICB0cnkgewogICAgICAgIGlmIChpbnB1dC50eXBlID09PSAiYWRkcmVzcyIpCiAgICAgICAgICByZXR1cm4gaXNBZGRyZXNzRXF1YWwodmFsdWUsIGFyZyk7CiAgICAgICAgaWYgKGlucHV0LnR5cGUgPT09ICJzdHJpbmciIHx8IGlucHV0LnR5cGUgPT09ICJieXRlcyIpCiAgICAgICAgICByZXR1cm4ga2VjY2FrMjU2KHRvQnl0ZXModmFsdWUpKSA9PT0gYXJnOwogICAgICAgIHJldHVybiB2YWx1ZSA9PT0gYXJnOwogICAgICB9IGNhdGNoIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3MpICYmIEFycmF5LmlzQXJyYXkobWF0Y2hBcmdzKSkgewogICAgICByZXR1cm4gbWF0Y2hBcmdzLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgyKSA9PiB7CiAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRzW2luZGV4Ml07CiAgICAgICAgaWYgKCFpbnB1dCkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBjb25zdCB2YWx1ZV8gPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTsKICAgICAgICByZXR1cm4gdmFsdWVfLnNvbWUoKHZhbHVlMikgPT4gaXNFcXVhbChpbnB1dCwgdmFsdWUyLCBhcmdzW2luZGV4Ml0pKTsKICAgICAgfSk7CiAgICB9CiAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICJvYmplY3QiICYmICFBcnJheS5pc0FycmF5KGFyZ3MpICYmIHR5cGVvZiBtYXRjaEFyZ3MgPT09ICJvYmplY3QiICYmICFBcnJheS5pc0FycmF5KG1hdGNoQXJncykpCiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhtYXRjaEFyZ3MpLmV2ZXJ5KChba2V5LCB2YWx1ZV0pID0+IHsKICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dHMuZmluZCgoaW5wdXQyKSA9PiBpbnB1dDIubmFtZSA9PT0ga2V5KTsKICAgICAgICBpZiAoIWlucHV0KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGNvbnN0IHZhbHVlXyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdOwogICAgICAgIHJldHVybiB2YWx1ZV8uc29tZSgodmFsdWUyKSA9PiBpc0VxdWFsKGlucHV0LCB2YWx1ZTIsIGFyZ3Nba2V5XSkpOwogICAgICB9KTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0TG9ncy5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2xvZy5qcwogIGZ1bmN0aW9uIGZvcm1hdExvZyhsb2csIHsgYXJncywgZXZlbnROYW1lIH0gPSB7fSkgewogICAgcmV0dXJuIHsKICAgICAgLi4ubG9nLAogICAgICBibG9ja0hhc2g6IGxvZy5ibG9ja0hhc2ggPyBsb2cuYmxvY2tIYXNoIDogbnVsbCwKICAgICAgYmxvY2tOdW1iZXI6IGxvZy5ibG9ja051bWJlciA/IEJpZ0ludChsb2cuYmxvY2tOdW1iZXIpIDogbnVsbCwKICAgICAgbG9nSW5kZXg6IGxvZy5sb2dJbmRleCA/IE51bWJlcihsb2cubG9nSW5kZXgpIDogbnVsbCwKICAgICAgdHJhbnNhY3Rpb25IYXNoOiBsb2cudHJhbnNhY3Rpb25IYXNoID8gbG9nLnRyYW5zYWN0aW9uSGFzaCA6IG51bGwsCiAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IGxvZy50cmFuc2FjdGlvbkluZGV4ID8gTnVtYmVyKGxvZy50cmFuc2FjdGlvbkluZGV4KSA6IG51bGwsCiAgICAgIC4uLmV2ZW50TmFtZSA/IHsgYXJncywgZXZlbnROYW1lIH0gOiB7fQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0TG9ncy5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldExvZ3MoY2xpZW50LCB7IGFkZHJlc3MsIGJsb2NrSGFzaCwgZnJvbUJsb2NrLCB0b0Jsb2NrLCBldmVudCwgZXZlbnRzOiBldmVudHNfLCBhcmdzLCBzdHJpY3Q6IHN0cmljdF8gfSA9IHt9KSB7CiAgICBjb25zdCBzdHJpY3QgPSBzdHJpY3RfID8/IGZhbHNlOwogICAgY29uc3QgZXZlbnRzID0gZXZlbnRzXyA/PyAoZXZlbnQgPyBbZXZlbnRdIDogdm9pZCAwKTsKICAgIGxldCB0b3BpY3MgPSBbXTsKICAgIGlmIChldmVudHMpIHsKICAgICAgY29uc3QgZW5jb2RlZCA9IGV2ZW50cy5mbGF0TWFwKChldmVudDIpID0+IGVuY29kZUV2ZW50VG9waWNzKHsKICAgICAgICBhYmk6IFtldmVudDJdLAogICAgICAgIGV2ZW50TmFtZTogZXZlbnQyLm5hbWUsCiAgICAgICAgYXJnczogZXZlbnRzXyA/IHZvaWQgMCA6IGFyZ3MKICAgICAgfSkpOwogICAgICB0b3BpY3MgPSBbZW5jb2RlZF07CiAgICAgIGlmIChldmVudCkKICAgICAgICB0b3BpY3MgPSB0b3BpY3NbMF07CiAgICB9CiAgICBsZXQgbG9nczsKICAgIGlmIChibG9ja0hhc2gpIHsKICAgICAgbG9ncyA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0TG9ncyIsCiAgICAgICAgcGFyYW1zOiBbeyBhZGRyZXNzLCB0b3BpY3MsIGJsb2NrSGFzaCB9XQogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGxvZ3MgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXRoX2dldExvZ3MiLAogICAgICAgIHBhcmFtczogWwogICAgICAgICAgewogICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICB0b3BpY3MsCiAgICAgICAgICAgIGZyb21CbG9jazogdHlwZW9mIGZyb21CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleChmcm9tQmxvY2spIDogZnJvbUJsb2NrLAogICAgICAgICAgICB0b0Jsb2NrOiB0eXBlb2YgdG9CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleCh0b0Jsb2NrKSA6IHRvQmxvY2sKICAgICAgICAgIH0KICAgICAgICBdCiAgICAgIH0pOwogICAgfQogICAgY29uc3QgZm9ybWF0dGVkTG9ncyA9IGxvZ3MubWFwKChsb2cpID0+IGZvcm1hdExvZyhsb2cpKTsKICAgIGlmICghZXZlbnRzKQogICAgICByZXR1cm4gZm9ybWF0dGVkTG9nczsKICAgIHJldHVybiBwYXJzZUV2ZW50TG9ncyh7CiAgICAgIGFiaTogZXZlbnRzLAogICAgICBhcmdzLAogICAgICBsb2dzOiBmb3JtYXR0ZWRMb2dzLAogICAgICBzdHJpY3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRDb250cmFjdEV2ZW50cy5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldENvbnRyYWN0RXZlbnRzKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGJsb2NrSGFzaCwgZXZlbnROYW1lLCBmcm9tQmxvY2ssIHRvQmxvY2ssIHN0cmljdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGV2ZW50ID0gZXZlbnROYW1lID8gZ2V0QWJpSXRlbSh7IGFiaTogYWJpMiwgbmFtZTogZXZlbnROYW1lIH0pIDogdm9pZCAwOwogICAgY29uc3QgZXZlbnRzID0gIWV2ZW50ID8gYWJpMi5maWx0ZXIoKHgpID0+IHgudHlwZSA9PT0gImV2ZW50IikgOiB2b2lkIDA7CiAgICByZXR1cm4gZ2V0QWN0aW9uKGNsaWVudCwgZ2V0TG9ncywgImdldExvZ3MiKSh7CiAgICAgIGFkZHJlc3MsCiAgICAgIGFyZ3MsCiAgICAgIGJsb2NrSGFzaCwKICAgICAgZXZlbnQsCiAgICAgIGV2ZW50cywKICAgICAgZnJvbUJsb2NrLAogICAgICB0b0Jsb2NrLAogICAgICBzdHJpY3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9yZWFkQ29udHJhY3QuanMKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2NhbGwoKTsKICBhc3luYyBmdW5jdGlvbiByZWFkQ29udHJhY3QoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYWRkcmVzcywgYXJncywgZnVuY3Rpb25OYW1lLCAuLi5yZXN0IH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgY2FsbGRhdGEgPSBlbmNvZGVGdW5jdGlvbkRhdGEoewogICAgICBhYmk6IGFiaTIsCiAgICAgIGFyZ3MsCiAgICAgIGZ1bmN0aW9uTmFtZQogICAgfSk7CiAgICB0cnkgewogICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGNhbGwsICJjYWxsIikoewogICAgICAgIC4uLnJlc3QsCiAgICAgICAgZGF0YTogY2FsbGRhdGEsCiAgICAgICAgdG86IGFkZHJlc3MKICAgICAgfSk7CiAgICAgIHJldHVybiBkZWNvZGVGdW5jdGlvblJlc3VsdCh7CiAgICAgICAgYWJpOiBhYmkyLAogICAgICAgIGFyZ3MsCiAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgIGRhdGE6IGRhdGEgfHwgIjB4IgogICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHRocm93IGdldENvbnRyYWN0RXJyb3IoZXJyb3IsIHsKICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3QvcmVhZENvbnRyYWN0IiwKICAgICAgICBmdW5jdGlvbk5hbWUKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3NpbXVsYXRlQ29udHJhY3QuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGluaXRfZGVjb2RlRnVuY3Rpb25SZXN1bHQoKTsKICBpbml0X2VuY29kZUZ1bmN0aW9uRGF0YSgpOwogIGluaXRfY2FsbCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNpbXVsYXRlQ29udHJhY3QoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYWRkcmVzcywgYXJncywgZGF0YVN1ZmZpeCwgZnVuY3Rpb25OYW1lLCAuLi5jYWxsUmVxdWVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGFjY291bnQgPSBjYWxsUmVxdWVzdC5hY2NvdW50ID8gcGFyc2VBY2NvdW50KGNhbGxSZXF1ZXN0LmFjY291bnQpIDogY2xpZW50LmFjY291bnQ7CiAgICBjb25zdCBjYWxsZGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7IGFiaTogYWJpMiwgYXJncywgZnVuY3Rpb25OYW1lIH0pOwogICAgdHJ5IHsKICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBjYWxsLCAiY2FsbCIpKHsKICAgICAgICBiYXRjaDogZmFsc2UsCiAgICAgICAgZGF0YTogYCR7Y2FsbGRhdGF9JHtkYXRhU3VmZml4ID8gZGF0YVN1ZmZpeC5yZXBsYWNlKCIweCIsICIiKSA6ICIifWAsCiAgICAgICAgdG86IGFkZHJlc3MsCiAgICAgICAgLi4uY2FsbFJlcXVlc3QsCiAgICAgICAgYWNjb3VudAogICAgICB9KTsKICAgICAgY29uc3QgcmVzdWx0ID0gZGVjb2RlRnVuY3Rpb25SZXN1bHQoewogICAgICAgIGFiaTogYWJpMiwKICAgICAgICBhcmdzLAogICAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgICBkYXRhOiBkYXRhIHx8ICIweCIKICAgICAgfSk7CiAgICAgIGNvbnN0IG1pbmltaXplZEFiaSA9IGFiaTIuZmlsdGVyKChhYmlJdGVtKSA9PiAibmFtZSIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLm5hbWUgPT09IHBhcmFtZXRlcnMuZnVuY3Rpb25OYW1lKTsKICAgICAgcmV0dXJuIHsKICAgICAgICByZXN1bHQsCiAgICAgICAgcmVxdWVzdDogewogICAgICAgICAgYWJpOiBtaW5pbWl6ZWRBYmksCiAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgYXJncywKICAgICAgICAgIGRhdGFTdWZmaXgsCiAgICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgICAuLi5jYWxsUmVxdWVzdCwKICAgICAgICAgIGFjY291bnQKICAgICAgICB9CiAgICAgIH07CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICB0aHJvdyBnZXRDb250cmFjdEVycm9yKGVycm9yLCB7CiAgICAgICAgYWJpOiBhYmkyLAogICAgICAgIGFkZHJlc3MsCiAgICAgICAgYXJncywKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L3NpbXVsYXRlQ29udHJhY3QiLAogICAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgICBzZW5kZXI6IGFjY291bnQ/LmFkZHJlc3MKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3dhdGNoQ29udHJhY3RFdmVudC5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9ycGMoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9vYnNlcnZlLmpzCiAgdmFyIGxpc3RlbmVyc0NhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICB2YXIgY2xlYW51cENhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICB2YXIgY2FsbGJhY2tDb3VudCA9IDA7CiAgZnVuY3Rpb24gb2JzZXJ2ZShvYnNlcnZlcklkLCBjYWxsYmFja3MsIGZuKSB7CiAgICBjb25zdCBjYWxsYmFja0lkID0gKytjYWxsYmFja0NvdW50OwogICAgY29uc3QgZ2V0TGlzdGVuZXJzID0gKCkgPT4gbGlzdGVuZXJzQ2FjaGUuZ2V0KG9ic2VydmVySWQpIHx8IFtdOwogICAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGxpc3RlbmVyczIgPSBnZXRMaXN0ZW5lcnMoKTsKICAgICAgbGlzdGVuZXJzQ2FjaGUuc2V0KG9ic2VydmVySWQsIGxpc3RlbmVyczIuZmlsdGVyKChjYikgPT4gY2IuaWQgIT09IGNhbGxiYWNrSWQpKTsKICAgIH07CiAgICBjb25zdCB1bndhdGNoID0gKCkgPT4gewogICAgICBjb25zdCBjbGVhbnVwMiA9IGNsZWFudXBDYWNoZS5nZXQob2JzZXJ2ZXJJZCk7CiAgICAgIGlmIChnZXRMaXN0ZW5lcnMoKS5sZW5ndGggPT09IDEgJiYgY2xlYW51cDIpCiAgICAgICAgY2xlYW51cDIoKTsKICAgICAgdW5zdWJzY3JpYmUoKTsKICAgIH07CiAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnMoKTsKICAgIGxpc3RlbmVyc0NhY2hlLnNldChvYnNlcnZlcklkLCBbCiAgICAgIC4uLmxpc3RlbmVycywKICAgICAgeyBpZDogY2FsbGJhY2tJZCwgZm5zOiBjYWxsYmFja3MgfQogICAgXSk7CiAgICBpZiAobGlzdGVuZXJzICYmIGxpc3RlbmVycy5sZW5ndGggPiAwKQogICAgICByZXR1cm4gdW53YXRjaDsKICAgIGNvbnN0IGVtaXQgPSB7fTsKICAgIGZvciAoY29uc3Qga2V5IGluIGNhbGxiYWNrcykgewogICAgICBlbWl0W2tleV0gPSAoLi4uYXJncykgPT4gewogICAgICAgIGNvbnN0IGxpc3RlbmVyczIgPSBnZXRMaXN0ZW5lcnMoKTsKICAgICAgICBpZiAobGlzdGVuZXJzMi5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMyKQogICAgICAgICAgbGlzdGVuZXIuZm5zW2tleV0/LiguLi5hcmdzKTsKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IGNsZWFudXAgPSBmbihlbWl0KTsKICAgIGlmICh0eXBlb2YgY2xlYW51cCA9PT0gImZ1bmN0aW9uIikKICAgICAgY2xlYW51cENhY2hlLnNldChvYnNlcnZlcklkLCBjbGVhbnVwKTsKICAgIHJldHVybiB1bndhdGNoOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy93YWl0LmpzCiAgYXN5bmMgZnVuY3Rpb24gd2FpdCh0aW1lKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcykgPT4gc2V0VGltZW91dChyZXMsIHRpbWUpKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcG9sbC5qcwogIGZ1bmN0aW9uIHBvbGwoZm4sIHsgZW1pdE9uQmVnaW4sIGluaXRpYWxXYWl0VGltZSwgaW50ZXJ2YWwgfSkgewogICAgbGV0IGFjdGl2ZSA9IHRydWU7CiAgICBjb25zdCB1bndhdGNoID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICBjb25zdCB3YXRjaCA9IGFzeW5jICgpID0+IHsKICAgICAgbGV0IGRhdGEgPSB2b2lkIDA7CiAgICAgIGlmIChlbWl0T25CZWdpbikKICAgICAgICBkYXRhID0gYXdhaXQgZm4oeyB1bnBvbGw6IHVud2F0Y2ggfSk7CiAgICAgIGNvbnN0IGluaXRpYWxXYWl0ID0gYXdhaXQgaW5pdGlhbFdhaXRUaW1lPy4oZGF0YSkgPz8gaW50ZXJ2YWw7CiAgICAgIGF3YWl0IHdhaXQoaW5pdGlhbFdhaXQpOwogICAgICBjb25zdCBwb2xsMiA9IGFzeW5jICgpID0+IHsKICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBhd2FpdCBmbih7IHVucG9sbDogdW53YXRjaCB9KTsKICAgICAgICBhd2FpdCB3YWl0KGludGVydmFsKTsKICAgICAgICBwb2xsMigpOwogICAgICB9OwogICAgICBwb2xsMigpOwogICAgfTsKICAgIHdhdGNoKCk7CiAgICByZXR1cm4gdW53YXRjaDsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvd2F0Y2hDb250cmFjdEV2ZW50LmpzCiAgaW5pdF9zdHJpbmdpZnkoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9wcm9taXNlL3dpdGhDYWNoZS5qcwogIHZhciBwcm9taXNlQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIHZhciByZXNwb25zZUNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBmdW5jdGlvbiBnZXRDYWNoZShjYWNoZUtleTIpIHsKICAgIGNvbnN0IGJ1aWxkQ2FjaGUgPSAoY2FjaGVLZXkzLCBjYWNoZSkgPT4gKHsKICAgICAgY2xlYXI6ICgpID0+IGNhY2hlLmRlbGV0ZShjYWNoZUtleTMpLAogICAgICBnZXQ6ICgpID0+IGNhY2hlLmdldChjYWNoZUtleTMpLAogICAgICBzZXQ6IChkYXRhKSA9PiBjYWNoZS5zZXQoY2FjaGVLZXkzLCBkYXRhKQogICAgfSk7CiAgICBjb25zdCBwcm9taXNlID0gYnVpbGRDYWNoZShjYWNoZUtleTIsIHByb21pc2VDYWNoZSk7CiAgICBjb25zdCByZXNwb25zZSA9IGJ1aWxkQ2FjaGUoY2FjaGVLZXkyLCByZXNwb25zZUNhY2hlKTsKICAgIHJldHVybiB7CiAgICAgIGNsZWFyOiAoKSA9PiB7CiAgICAgICAgcHJvbWlzZS5jbGVhcigpOwogICAgICAgIHJlc3BvbnNlLmNsZWFyKCk7CiAgICAgIH0sCiAgICAgIHByb21pc2UsCiAgICAgIHJlc3BvbnNlCiAgICB9OwogIH0KICBhc3luYyBmdW5jdGlvbiB3aXRoQ2FjaGUoZm4sIHsgY2FjaGVLZXk6IGNhY2hlS2V5MiwgY2FjaGVUaW1lID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIH0pIHsKICAgIGNvbnN0IGNhY2hlID0gZ2V0Q2FjaGUoY2FjaGVLZXkyKTsKICAgIGNvbnN0IHJlc3BvbnNlID0gY2FjaGUucmVzcG9uc2UuZ2V0KCk7CiAgICBpZiAocmVzcG9uc2UgJiYgY2FjaGVUaW1lID4gMCkgewogICAgICBjb25zdCBhZ2UgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIHJlc3BvbnNlLmNyZWF0ZWQuZ2V0VGltZSgpOwogICAgICBpZiAoYWdlIDwgY2FjaGVUaW1lKQogICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhOwogICAgfQogICAgbGV0IHByb21pc2UgPSBjYWNoZS5wcm9taXNlLmdldCgpOwogICAgaWYgKCFwcm9taXNlKSB7CiAgICAgIHByb21pc2UgPSBmbigpOwogICAgICBjYWNoZS5wcm9taXNlLnNldChwcm9taXNlKTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwcm9taXNlOwogICAgICBjYWNoZS5yZXNwb25zZS5zZXQoeyBjcmVhdGVkOiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgZGF0YSB9KTsKICAgICAgcmV0dXJuIGRhdGE7CiAgICB9IGZpbmFsbHkgewogICAgICBjYWNoZS5wcm9taXNlLmNsZWFyKCk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEJsb2NrTnVtYmVyLmpzCiAgdmFyIGNhY2hlS2V5ID0gKGlkKSA9PiBgYmxvY2tOdW1iZXIuJHtpZH1gOwogIGFzeW5jIGZ1bmN0aW9uIGdldEJsb2NrTnVtYmVyKGNsaWVudCwgeyBjYWNoZVRpbWUgPSBjbGllbnQuY2FjaGVUaW1lIH0gPSB7fSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBhd2FpdCB3aXRoQ2FjaGUoKCkgPT4gY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfYmxvY2tOdW1iZXIiCiAgICB9KSwgeyBjYWNoZUtleTogY2FjaGVLZXkoY2xpZW50LnVpZCksIGNhY2hlVGltZSB9KTsKICAgIHJldHVybiBCaWdJbnQoYmxvY2tOdW1iZXJIZXgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRGaWx0ZXJDaGFuZ2VzLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0RmlsdGVyQ2hhbmdlcyhfY2xpZW50LCB7IGZpbHRlciB9KSB7CiAgICBjb25zdCBzdHJpY3QgPSAic3RyaWN0IiBpbiBmaWx0ZXIgJiYgZmlsdGVyLnN0cmljdDsKICAgIGNvbnN0IGxvZ3MgPSBhd2FpdCBmaWx0ZXIucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRGaWx0ZXJDaGFuZ2VzIiwKICAgICAgcGFyYW1zOiBbZmlsdGVyLmlkXQogICAgfSk7CiAgICBpZiAodHlwZW9mIGxvZ3NbMF0gPT09ICJzdHJpbmciKQogICAgICByZXR1cm4gbG9nczsKICAgIGNvbnN0IGZvcm1hdHRlZExvZ3MgPSBsb2dzLm1hcCgobG9nKSA9PiBmb3JtYXRMb2cobG9nKSk7CiAgICBpZiAoISgiYWJpIiBpbiBmaWx0ZXIpIHx8ICFmaWx0ZXIuYWJpKQogICAgICByZXR1cm4gZm9ybWF0dGVkTG9nczsKICAgIHJldHVybiBwYXJzZUV2ZW50TG9ncyh7CiAgICAgIGFiaTogZmlsdGVyLmFiaSwKICAgICAgbG9nczogZm9ybWF0dGVkTG9ncywKICAgICAgc3RyaWN0CiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvdW5pbnN0YWxsRmlsdGVyLmpzCiAgYXN5bmMgZnVuY3Rpb24gdW5pbnN0YWxsRmlsdGVyKF9jbGllbnQsIHsgZmlsdGVyIH0pIHsKICAgIHJldHVybiBmaWx0ZXIucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF91bmluc3RhbGxGaWx0ZXIiLAogICAgICBwYXJhbXM6IFtmaWx0ZXIuaWRdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvd2F0Y2hDb250cmFjdEV2ZW50LmpzCiAgZnVuY3Rpb24gd2F0Y2hDb250cmFjdEV2ZW50KGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGJhdGNoID0gdHJ1ZSwgZXZlbnROYW1lLCBmcm9tQmxvY2ssIG9uRXJyb3IsIG9uTG9ncywgcG9sbDogcG9sbF8sIHBvbGxpbmdJbnRlcnZhbCA9IGNsaWVudC5wb2xsaW5nSW50ZXJ2YWwsIHN0cmljdDogc3RyaWN0XyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGVuYWJsZVBvbGxpbmcgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIHBvbGxfICE9PSAidW5kZWZpbmVkIikKICAgICAgICByZXR1cm4gcG9sbF87CiAgICAgIGlmICh0eXBlb2YgZnJvbUJsb2NrID09PSAiYmlnaW50IikKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAiZmFsbGJhY2siICYmIGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0c1swXS5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pKCk7CiAgICBjb25zdCBwb2xsQ29udHJhY3RFdmVudCA9ICgpID0+IHsKICAgICAgY29uc3Qgc3RyaWN0ID0gc3RyaWN0XyA/PyBmYWxzZTsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoQ29udHJhY3RFdmVudCIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGJhdGNoLAogICAgICAgIGNsaWVudC51aWQsCiAgICAgICAgZXZlbnROYW1lLAogICAgICAgIHBvbGxpbmdJbnRlcnZhbCwKICAgICAgICBzdHJpY3QsCiAgICAgICAgZnJvbUJsb2NrCiAgICAgIF0pOwogICAgICByZXR1cm4gb2JzZXJ2ZShvYnNlcnZlcklkLCB7IG9uTG9ncywgb25FcnJvciB9LCAoZW1pdCkgPT4gewogICAgICAgIGxldCBwcmV2aW91c0Jsb2NrTnVtYmVyOwogICAgICAgIGlmIChmcm9tQmxvY2sgIT09IHZvaWQgMCkKICAgICAgICAgIHByZXZpb3VzQmxvY2tOdW1iZXIgPSBmcm9tQmxvY2sgLSAxbjsKICAgICAgICBsZXQgZmlsdGVyOwogICAgICAgIGxldCBpbml0aWFsaXplZCA9IGZhbHNlOwogICAgICAgIGNvbnN0IHVud2F0Y2ggPSBwb2xsKGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBmaWx0ZXIgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyLCAiY3JlYXRlQ29udHJhY3RFdmVudEZpbHRlciIpKHsKICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgZXZlbnROYW1lLAogICAgICAgICAgICAgICAgc3RyaWN0LAogICAgICAgICAgICAgICAgZnJvbUJsb2NrCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICB9CiAgICAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbGV0IGxvZ3M7CiAgICAgICAgICAgIGlmIChmaWx0ZXIpIHsKICAgICAgICAgICAgICBsb2dzID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0RmlsdGVyQ2hhbmdlcywgImdldEZpbHRlckNoYW5nZXMiKSh7IGZpbHRlciB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjb25zdCBibG9ja051bWJlciA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrTnVtYmVyLCAiZ2V0QmxvY2tOdW1iZXIiKSh7fSk7CiAgICAgICAgICAgICAgaWYgKHByZXZpb3VzQmxvY2tOdW1iZXIgJiYgcHJldmlvdXNCbG9ja051bWJlciA8IGJsb2NrTnVtYmVyKSB7CiAgICAgICAgICAgICAgICBsb2dzID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0Q29udHJhY3RFdmVudHMsICJnZXRDb250cmFjdEV2ZW50cyIpKHsKICAgICAgICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgICBldmVudE5hbWUsCiAgICAgICAgICAgICAgICAgIGZyb21CbG9jazogcHJldmlvdXNCbG9ja051bWJlciArIDFuLAogICAgICAgICAgICAgICAgICB0b0Jsb2NrOiBibG9ja051bWJlciwKICAgICAgICAgICAgICAgICAgc3RyaWN0CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbG9ncyA9IFtdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBwcmV2aW91c0Jsb2NrTnVtYmVyID0gYmxvY2tOdW1iZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGxvZ3MubGVuZ3RoID09PSAwKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGJhdGNoKQogICAgICAgICAgICAgIGVtaXQub25Mb2dzKGxvZ3MpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgZm9yIChjb25zdCBsb2cgb2YgbG9ncykKICAgICAgICAgICAgICAgIGVtaXQub25Mb2dzKFtsb2ddKTsKICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICBpZiAoZmlsdGVyICYmIGVyciBpbnN0YW5jZW9mIEludmFsaWRJbnB1dFJwY0Vycm9yKQogICAgICAgICAgICAgIGluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgICAgICAgIGVtaXQub25FcnJvcj8uKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgZW1pdE9uQmVnaW46IHRydWUsCiAgICAgICAgICBpbnRlcnZhbDogcG9sbGluZ0ludGVydmFsCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChmaWx0ZXIpCiAgICAgICAgICAgIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHVuaW5zdGFsbEZpbHRlciwgInVuaW5zdGFsbEZpbHRlciIpKHsgZmlsdGVyIH0pOwogICAgICAgICAgdW53YXRjaCgpOwogICAgICAgIH07CiAgICAgIH0pOwogICAgfTsKICAgIGNvbnN0IHN1YnNjcmliZUNvbnRyYWN0RXZlbnQgPSAoKSA9PiB7CiAgICAgIGNvbnN0IHN0cmljdCA9IHN0cmljdF8gPz8gZmFsc2U7CiAgICAgIGNvbnN0IG9ic2VydmVySWQgPSBzdHJpbmdpZnkoWwogICAgICAgICJ3YXRjaENvbnRyYWN0RXZlbnQiLAogICAgICAgIGFkZHJlc3MsCiAgICAgICAgYXJncywKICAgICAgICBiYXRjaCwKICAgICAgICBjbGllbnQudWlkLAogICAgICAgIGV2ZW50TmFtZSwKICAgICAgICBwb2xsaW5nSW50ZXJ2YWwsCiAgICAgICAgc3RyaWN0CiAgICAgIF0pOwogICAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgICAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICAgIHJldHVybiBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25Mb2dzLCBvbkVycm9yIH0sIChlbWl0KSA9PiB7CiAgICAgICAgOwogICAgICAgIChhc3luYyAoKSA9PiB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCB0cmFuc3BvcnQgPSAoKCkgPT4gewogICAgICAgICAgICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIpIHsKICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydDIgPSBjbGllbnQudHJhbnNwb3J0LnRyYW5zcG9ydHMuZmluZCgodHJhbnNwb3J0MykgPT4gdHJhbnNwb3J0My5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpOwogICAgICAgICAgICAgICAgaWYgKCF0cmFuc3BvcnQyKQogICAgICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc3BvcnQyLnZhbHVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAgY29uc3QgdG9waWNzID0gZXZlbnROYW1lID8gZW5jb2RlRXZlbnRUb3BpY3MoewogICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICBldmVudE5hbWUsCiAgICAgICAgICAgICAgYXJncwogICAgICAgICAgICB9KSA6IFtdOwogICAgICAgICAgICBjb25zdCB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZV8gfSA9IGF3YWl0IHRyYW5zcG9ydC5zdWJzY3JpYmUoewogICAgICAgICAgICAgIHBhcmFtczogWyJsb2dzIiwgeyBhZGRyZXNzLCB0b3BpY3MgfV0sCiAgICAgICAgICAgICAgb25EYXRhKGRhdGEpIHsKICAgICAgICAgICAgICAgIGlmICghYWN0aXZlKQogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBjb25zdCBsb2cgPSBkYXRhLnJlc3VsdDsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZXZlbnROYW1lOiBldmVudE5hbWUyLCBhcmdzOiBhcmdzMiB9ID0gZGVjb2RlRXZlbnRMb2coewogICAgICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgICAgICBkYXRhOiBsb2cuZGF0YSwKICAgICAgICAgICAgICAgICAgICB0b3BpY3M6IGxvZy50b3BpY3MsCiAgICAgICAgICAgICAgICAgICAgc3RyaWN0OiBzdHJpY3RfCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2cobG9nLCB7CiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJnczIsCiAgICAgICAgICAgICAgICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUyCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBlbWl0Lm9uTG9ncyhbZm9ybWF0dGVkXSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICAgICAgbGV0IGV2ZW50TmFtZTI7CiAgICAgICAgICAgICAgICAgIGxldCBpc1VubmFtZWQ7CiAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBEZWNvZGVMb2dEYXRhTWlzbWF0Y2ggfHwgZXJyIGluc3RhbmNlb2YgRGVjb2RlTG9nVG9waWNzTWlzbWF0Y2gpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaWN0XykKICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBldmVudE5hbWUyID0gZXJyLmFiaUl0ZW0ubmFtZTsKICAgICAgICAgICAgICAgICAgICBpc1VubmFtZWQgPSBlcnIuYWJpSXRlbS5pbnB1dHM/LnNvbWUoKHgpID0+ICEoIm5hbWUiIGluIHggJiYgeC5uYW1lKSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TG9nKGxvZywgewogICAgICAgICAgICAgICAgICAgIGFyZ3M6IGlzVW5uYW1lZCA/IFtdIDoge30sCiAgICAgICAgICAgICAgICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUyCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBlbWl0Lm9uTG9ncyhbZm9ybWF0dGVkXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBvbkVycm9yKGVycm9yKSB7CiAgICAgICAgICAgICAgICBlbWl0Lm9uRXJyb3I/LihlcnJvcik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZV87CiAgICAgICAgICAgIGlmICghYWN0aXZlKQogICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgb25FcnJvcj8uKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gKCkgPT4gdW5zdWJzY3JpYmUoKTsKICAgICAgfSk7CiAgICB9OwogICAgcmV0dXJuIGVuYWJsZVBvbGxpbmcgPyBwb2xsQ29udHJhY3RFdmVudCgpIDogc3Vic2NyaWJlQ29udHJhY3RFdmVudCgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC93cml0ZUNvbnRyYWN0LmpzCiAgaW5pdF9wYXJzZUFjY291bnQoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvYWNjb3VudC5qcwogIGluaXRfYmFzZSgpOwogIHZhciBBY2NvdW50Tm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDkgfSA9IHt9KSB7CiAgICAgIHN1cGVyKFsKICAgICAgICAiQ291bGQgbm90IGZpbmQgYW4gQWNjb3VudCB0byBleGVjdXRlIHdpdGggdGhpcyBBY3Rpb24uIiwKICAgICAgICAiUGxlYXNlIHByb3ZpZGUgYW4gQWNjb3VudCB3aXRoIHRoZSBgYWNjb3VudGAgYXJndW1lbnQgb24gdGhlIEFjdGlvbiwgb3IgYnkgc3VwcGx5aW5nIGFuIGBhY2NvdW50YCB0byB0aGUgQ2xpZW50LiIKICAgICAgXS5qb2luKCJcbiIpLCB7CiAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICBkb2NzU2x1ZzogImFjY291bnQiLAogICAgICAgIG5hbWU6ICJBY2NvdW50Tm90Rm91bmRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKICB2YXIgQWNjb3VudFR5cGVOb3RTdXBwb3J0ZWRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDksIG1ldGFNZXNzYWdlcywgdHlwZSB9KSB7CiAgICAgIHN1cGVyKGBBY2NvdW50IHR5cGUgIiR7dHlwZX0iIGlzIG5vdCBzdXBwb3J0ZWQuYCwgewogICAgICAgIGRvY3NQYXRoOiBkb2NzUGF0aDksCiAgICAgICAgbWV0YU1lc3NhZ2VzLAogICAgICAgIG5hbWU6ICJBY2NvdW50VHlwZU5vdFN1cHBvcnRlZEVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3dyaXRlQ29udHJhY3QuanMKICBpbml0X2VuY29kZUZ1bmN0aW9uRGF0YSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NlbmRUcmFuc2FjdGlvbi5qcwogIGluaXRfcGFyc2VBY2NvdW50KCk7CiAgaW5pdF9iYXNlKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY2hhaW4vYXNzZXJ0Q3VycmVudENoYWluLmpzCiAgaW5pdF9jaGFpbigpOwogIGZ1bmN0aW9uIGFzc2VydEN1cnJlbnRDaGFpbih7IGNoYWluLCBjdXJyZW50Q2hhaW5JZCB9KSB7CiAgICBpZiAoIWNoYWluKQogICAgICB0aHJvdyBuZXcgQ2hhaW5Ob3RGb3VuZEVycm9yKCk7CiAgICBpZiAoY3VycmVudENoYWluSWQgIT09IGNoYWluLmlkKQogICAgICB0aHJvdyBuZXcgQ2hhaW5NaXNtYXRjaEVycm9yKHsgY2hhaW4sIGN1cnJlbnRDaGFpbklkIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lcnJvcnMvZ2V0VHJhbnNhY3Rpb25FcnJvci5qcwogIGluaXRfbm9kZSgpOwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBpbml0X2dldE5vZGVFcnJvcigpOwogIGZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uRXJyb3IoZXJyLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIC4uLmFyZ3MgfSkgewogICAgY29uc3QgY2F1c2UgPSAoKCkgPT4gewogICAgICBjb25zdCBjYXVzZTIgPSBnZXROb2RlRXJyb3IoZXJyLCBhcmdzKTsKICAgICAgaWYgKGNhdXNlMiBpbnN0YW5jZW9mIFVua25vd25Ob2RlRXJyb3IpCiAgICAgICAgcmV0dXJuIGVycjsKICAgICAgcmV0dXJuIGNhdXNlMjsKICAgIH0pKCk7CiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IoY2F1c2UsIHsKICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgLi4uYXJncwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NlbmRUcmFuc2FjdGlvbi5qcwogIGluaXRfZXh0cmFjdCgpOwogIGluaXRfdHJhbnNhY3Rpb25SZXF1ZXN0KCk7CiAgaW5pdF9hc3NlcnRSZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvc2VuZFJhd1RyYW5zYWN0aW9uLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2VuZFJhd1RyYW5zYWN0aW9uKGNsaWVudCwgeyBzZXJpYWxpemVkVHJhbnNhY3Rpb24gfSkgewogICAgcmV0dXJuIGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX3NlbmRSYXdUcmFuc2FjdGlvbiIsCiAgICAgIHBhcmFtczogW3NlcmlhbGl6ZWRUcmFuc2FjdGlvbl0KICAgIH0sIHsgcmV0cnlDb3VudDogMCB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvc2VuZFRyYW5zYWN0aW9uLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2VuZFRyYW5zYWN0aW9uKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhY2NvdW50OiBhY2NvdW50XyA9IGNsaWVudC5hY2NvdW50LCBjaGFpbiA9IGNsaWVudC5jaGFpbiwgYWNjZXNzTGlzdCwgYXV0aG9yaXphdGlvbkxpc3QsIGJsb2JzLCBkYXRhLCBnYXMsIGdhc1ByaWNlLCBtYXhGZWVQZXJCbG9iR2FzLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBub25jZSwgdmFsdWUsIC4uLnJlc3QgfSA9IHBhcmFtZXRlcnM7CiAgICBpZiAoIWFjY291bnRfKQogICAgICB0aHJvdyBuZXcgQWNjb3VudE5vdEZvdW5kRXJyb3IoewogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvYWN0aW9ucy93YWxsZXQvc2VuZFRyYW5zYWN0aW9uIgogICAgICB9KTsKICAgIGNvbnN0IGFjY291bnQgPSBwYXJzZUFjY291bnQoYWNjb3VudF8pOwogICAgdHJ5IHsKICAgICAgYXNzZXJ0UmVxdWVzdChwYXJhbWV0ZXJzKTsKICAgICAgY29uc3QgdG8gPSBhd2FpdCAoYXN5bmMgKCkgPT4gewogICAgICAgIGlmIChwYXJhbWV0ZXJzLnRvKQogICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMudG87CiAgICAgICAgaWYgKGF1dGhvcml6YXRpb25MaXN0ICYmIGF1dGhvcml6YXRpb25MaXN0Lmxlbmd0aCA+IDApCiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVjb3ZlckF1dGhvcml6YXRpb25BZGRyZXNzKHsKICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvbkxpc3RbMF0KICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoImB0b2AgaXMgcmVxdWlyZWQuIENvdWxkIG5vdCBpbmZlciBmcm9tIGBhdXRob3JpemF0aW9uTGlzdGAuIik7CiAgICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9KSgpOwogICAgICBpZiAoYWNjb3VudC50eXBlID09PSAianNvbi1ycGMiKSB7CiAgICAgICAgbGV0IGNoYWluSWQ7CiAgICAgICAgaWYgKGNoYWluICE9PSBudWxsKSB7CiAgICAgICAgICBjaGFpbklkID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0Q2hhaW5JZCwgImdldENoYWluSWQiKSh7fSk7CiAgICAgICAgICBhc3NlcnRDdXJyZW50Q2hhaW4oewogICAgICAgICAgICBjdXJyZW50Q2hhaW5JZDogY2hhaW5JZCwKICAgICAgICAgICAgY2hhaW4KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb25zdCBjaGFpbkZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb25SZXF1ZXN0Py5mb3JtYXQ7CiAgICAgICAgY29uc3QgZm9ybWF0ID0gY2hhaW5Gb3JtYXQgfHwgZm9ybWF0VHJhbnNhY3Rpb25SZXF1ZXN0OwogICAgICAgIGNvbnN0IHJlcXVlc3QgPSBmb3JtYXQoewogICAgICAgICAgLy8gUGljayBvdXQgZXh0cmEgZGF0YSB0aGF0IG1pZ2h0IGV4aXN0IG9uIHRoZSBjaGFpbidzIHRyYW5zYWN0aW9uIHJlcXVlc3QgdHlwZS4KICAgICAgICAgIC4uLmV4dHJhY3QocmVzdCwgeyBmb3JtYXQ6IGNoYWluRm9ybWF0IH0pLAogICAgICAgICAgYWNjZXNzTGlzdCwKICAgICAgICAgIGF1dGhvcml6YXRpb25MaXN0LAogICAgICAgICAgYmxvYnMsCiAgICAgICAgICBjaGFpbklkLAogICAgICAgICAgZGF0YSwKICAgICAgICAgIGZyb206IGFjY291bnQuYWRkcmVzcywKICAgICAgICAgIGdhcywKICAgICAgICAgIGdhc1ByaWNlLAogICAgICAgICAgbWF4RmVlUGVyQmxvYkdhcywKICAgICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICB0bywKICAgICAgICAgIHZhbHVlCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICAgIG1ldGhvZDogImV0aF9zZW5kVHJhbnNhY3Rpb24iLAogICAgICAgICAgcGFyYW1zOiBbcmVxdWVzdF0KICAgICAgICB9LCB7IHJldHJ5Q291bnQ6IDAgfSk7CiAgICAgIH0KICAgICAgaWYgKGFjY291bnQudHlwZSA9PT0gImxvY2FsIikgewogICAgICAgIGNvbnN0IHJlcXVlc3QgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBwcmVwYXJlVHJhbnNhY3Rpb25SZXF1ZXN0LCAicHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdCIpKHsKICAgICAgICAgIGFjY291bnQsCiAgICAgICAgICBhY2Nlc3NMaXN0LAogICAgICAgICAgYXV0aG9yaXphdGlvbkxpc3QsCiAgICAgICAgICBibG9icywKICAgICAgICAgIGNoYWluLAogICAgICAgICAgZGF0YSwKICAgICAgICAgIGdhcywKICAgICAgICAgIGdhc1ByaWNlLAogICAgICAgICAgbWF4RmVlUGVyQmxvYkdhcywKICAgICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICBwYXJhbWV0ZXJzOiBbLi4uZGVmYXVsdFBhcmFtZXRlcnMsICJzaWRlY2FycyJdLAogICAgICAgICAgdmFsdWUsCiAgICAgICAgICAuLi5yZXN0LAogICAgICAgICAgdG8KICAgICAgICB9KTsKICAgICAgICBjb25zdCBzZXJpYWxpemVyID0gY2hhaW4/LnNlcmlhbGl6ZXJzPy50cmFuc2FjdGlvbjsKICAgICAgICBjb25zdCBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBhd2FpdCBhY2NvdW50LnNpZ25UcmFuc2FjdGlvbihyZXF1ZXN0LCB7CiAgICAgICAgICBzZXJpYWxpemVyCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHNlbmRSYXdUcmFuc2FjdGlvbiwgInNlbmRSYXdUcmFuc2FjdGlvbiIpKHsKICAgICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbgogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChhY2NvdW50LnR5cGUgPT09ICJzbWFydCIpCiAgICAgICAgdGhyb3cgbmV3IEFjY291bnRUeXBlTm90U3VwcG9ydGVkRXJyb3IoewogICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICJDb25zaWRlciB1c2luZyB0aGUgYHNlbmRVc2VyT3BlcmF0aW9uYCBBY3Rpb24gaW5zdGVhZC4iCiAgICAgICAgICBdLAogICAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9hY3Rpb25zL2J1bmRsZXIvc2VuZFVzZXJPcGVyYXRpb24iLAogICAgICAgICAgdHlwZTogInNtYXJ0IgogICAgICAgIH0pOwogICAgICB0aHJvdyBuZXcgQWNjb3VudFR5cGVOb3RTdXBwb3J0ZWRFcnJvcih7CiAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9hY3Rpb25zL3dhbGxldC9zZW5kVHJhbnNhY3Rpb24iLAogICAgICAgIHR5cGU6IGFjY291bnQudHlwZQogICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBpZiAoZXJyIGluc3RhbmNlb2YgQWNjb3VudFR5cGVOb3RTdXBwb3J0ZWRFcnJvcikKICAgICAgICB0aHJvdyBlcnI7CiAgICAgIHRocm93IGdldFRyYW5zYWN0aW9uRXJyb3IoZXJyLCB7CiAgICAgICAgLi4ucGFyYW1ldGVycywKICAgICAgICBhY2NvdW50LAogICAgICAgIGNoYWluOiBwYXJhbWV0ZXJzLmNoYWluIHx8IHZvaWQgMAogICAgICB9KTsKICAgIH0KICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvd3JpdGVDb250cmFjdC5qcwogIGFzeW5jIGZ1bmN0aW9uIHdyaXRlQ29udHJhY3QoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYWNjb3VudDogYWNjb3VudF8gPSBjbGllbnQuYWNjb3VudCwgYWRkcmVzcywgYXJncywgZGF0YVN1ZmZpeCwgZnVuY3Rpb25OYW1lLCAuLi5yZXF1ZXN0IH0gPSBwYXJhbWV0ZXJzOwogICAgaWYgKCFhY2NvdW50XykKICAgICAgdGhyb3cgbmV3IEFjY291bnROb3RGb3VuZEVycm9yKHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L3dyaXRlQ29udHJhY3QiCiAgICAgIH0pOwogICAgY29uc3QgYWNjb3VudCA9IHBhcnNlQWNjb3VudChhY2NvdW50Xyk7CiAgICBjb25zdCBkYXRhID0gZW5jb2RlRnVuY3Rpb25EYXRhKHsKICAgICAgYWJpOiBhYmkyLAogICAgICBhcmdzLAogICAgICBmdW5jdGlvbk5hbWUKICAgIH0pOwogICAgdHJ5IHsKICAgICAgcmV0dXJuIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHNlbmRUcmFuc2FjdGlvbiwgInNlbmRUcmFuc2FjdGlvbiIpKHsKICAgICAgICBkYXRhOiBgJHtkYXRhfSR7ZGF0YVN1ZmZpeCA/IGRhdGFTdWZmaXgucmVwbGFjZSgiMHgiLCAiIikgOiAiIn1gLAogICAgICAgIHRvOiBhZGRyZXNzLAogICAgICAgIGFjY291bnQsCiAgICAgICAgLi4ucmVxdWVzdAogICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHRocm93IGdldENvbnRyYWN0RXJyb3IoZXJyb3IsIHsKICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3Qvd3JpdGVDb250cmFjdCIsCiAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgIHNlbmRlcjogYWNjb3VudC5hZGRyZXNzCiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2dldENvbnRyYWN0LmpzCiAgZnVuY3Rpb24gZ2V0Q29udHJhY3QoeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGNsaWVudDogY2xpZW50XyB9KSB7CiAgICBjb25zdCBjbGllbnQgPSBjbGllbnRfOwogICAgY29uc3QgW3B1YmxpY0NsaWVudCwgd2FsbGV0Q2xpZW50XSA9ICgoKSA9PiB7CiAgICAgIGlmICghY2xpZW50KQogICAgICAgIHJldHVybiBbdm9pZCAwLCB2b2lkIDBdOwogICAgICBpZiAoInB1YmxpYyIgaW4gY2xpZW50ICYmICJ3YWxsZXQiIGluIGNsaWVudCkKICAgICAgICByZXR1cm4gW2NsaWVudC5wdWJsaWMsIGNsaWVudC53YWxsZXRdOwogICAgICBpZiAoInB1YmxpYyIgaW4gY2xpZW50KQogICAgICAgIHJldHVybiBbY2xpZW50LnB1YmxpYywgdm9pZCAwXTsKICAgICAgaWYgKCJ3YWxsZXQiIGluIGNsaWVudCkKICAgICAgICByZXR1cm4gW3ZvaWQgMCwgY2xpZW50LndhbGxldF07CiAgICAgIHJldHVybiBbY2xpZW50LCBjbGllbnRdOwogICAgfSkoKTsKICAgIGNvbnN0IGhhc1B1YmxpY0NsaWVudCA9IHB1YmxpY0NsaWVudCAhPT0gdm9pZCAwICYmIHB1YmxpY0NsaWVudCAhPT0gbnVsbDsKICAgIGNvbnN0IGhhc1dhbGxldENsaWVudCA9IHdhbGxldENsaWVudCAhPT0gdm9pZCAwICYmIHdhbGxldENsaWVudCAhPT0gbnVsbDsKICAgIGNvbnN0IGNvbnRyYWN0ID0ge307CiAgICBsZXQgaGFzUmVhZEZ1bmN0aW9uID0gZmFsc2U7CiAgICBsZXQgaGFzV3JpdGVGdW5jdGlvbiA9IGZhbHNlOwogICAgbGV0IGhhc0V2ZW50ID0gZmFsc2U7CiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYWJpMikgewogICAgICBpZiAoaXRlbS50eXBlID09PSAiZnVuY3Rpb24iKQogICAgICAgIGlmIChpdGVtLnN0YXRlTXV0YWJpbGl0eSA9PT0gInZpZXciIHx8IGl0ZW0uc3RhdGVNdXRhYmlsaXR5ID09PSAicHVyZSIpCiAgICAgICAgICBoYXNSZWFkRnVuY3Rpb24gPSB0cnVlOwogICAgICAgIGVsc2UKICAgICAgICAgIGhhc1dyaXRlRnVuY3Rpb24gPSB0cnVlOwogICAgICBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICJldmVudCIpCiAgICAgICAgaGFzRXZlbnQgPSB0cnVlOwogICAgICBpZiAoaGFzUmVhZEZ1bmN0aW9uICYmIGhhc1dyaXRlRnVuY3Rpb24gJiYgaGFzRXZlbnQpCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoaGFzUHVibGljQ2xpZW50KSB7CiAgICAgIGlmIChoYXNSZWFkRnVuY3Rpb24pCiAgICAgICAgY29udHJhY3QucmVhZCA9IG5ldyBQcm94eSh7fSwgewogICAgICAgICAgZ2V0KF8sIGZ1bmN0aW9uTmFtZSkgewogICAgICAgICAgICByZXR1cm4gKC4uLnBhcmFtZXRlcnMpID0+IHsKICAgICAgICAgICAgICBjb25zdCB7IGFyZ3MsIG9wdGlvbnMgfSA9IGdldEZ1bmN0aW9uUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKICAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0aW9uKHB1YmxpY0NsaWVudCwgcmVhZENvbnRyYWN0LCAicmVhZENvbnRyYWN0IikoewogICAgICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICAgICAgYWRkcmVzcywKICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgICAgICAgICAgIGFyZ3MsCiAgICAgICAgICAgICAgICAuLi5vcHRpb25zCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIGlmIChoYXNXcml0ZUZ1bmN0aW9uKQogICAgICAgIGNvbnRyYWN0LnNpbXVsYXRlID0gbmV3IFByb3h5KHt9LCB7CiAgICAgICAgICBnZXQoXywgZnVuY3Rpb25OYW1lKSB7CiAgICAgICAgICAgIHJldHVybiAoLi4ucGFyYW1ldGVycykgPT4gewogICAgICAgICAgICAgIGNvbnN0IHsgYXJncywgb3B0aW9ucyB9ID0gZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwogICAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb24ocHVibGljQ2xpZW50LCBzaW11bGF0ZUNvbnRyYWN0LCAic2ltdWxhdGVDb250cmFjdCIpKHsKICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgLi4ub3B0aW9ucwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICBpZiAoaGFzRXZlbnQpIHsKICAgICAgICBjb250cmFjdC5jcmVhdGVFdmVudEZpbHRlciA9IG5ldyBQcm94eSh7fSwgewogICAgICAgICAgZ2V0KF8sIGV2ZW50TmFtZSkgewogICAgICAgICAgICByZXR1cm4gKC4uLnBhcmFtZXRlcnMpID0+IHsKICAgICAgICAgICAgICBjb25zdCBhYmlFdmVudCA9IGFiaTIuZmluZCgoeCkgPT4geC50eXBlID09PSAiZXZlbnQiICYmIHgubmFtZSA9PT0gZXZlbnROYW1lKTsKICAgICAgICAgICAgICBjb25zdCB7IGFyZ3MsIG9wdGlvbnMgfSA9IGdldEV2ZW50UGFyYW1ldGVycyhwYXJhbWV0ZXJzLCBhYmlFdmVudCk7CiAgICAgICAgICAgICAgcmV0dXJuIGdldEFjdGlvbihwdWJsaWNDbGllbnQsIGNyZWF0ZUNvbnRyYWN0RXZlbnRGaWx0ZXIsICJjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyIikoewogICAgICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICAgICAgYWRkcmVzcywKICAgICAgICAgICAgICAgIGV2ZW50TmFtZSwKICAgICAgICAgICAgICAgIGFyZ3MsCiAgICAgICAgICAgICAgICAuLi5vcHRpb25zCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgY29udHJhY3QuZ2V0RXZlbnRzID0gbmV3IFByb3h5KHt9LCB7CiAgICAgICAgICBnZXQoXywgZXZlbnROYW1lKSB7CiAgICAgICAgICAgIHJldHVybiAoLi4ucGFyYW1ldGVycykgPT4gewogICAgICAgICAgICAgIGNvbnN0IGFiaUV2ZW50ID0gYWJpMi5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICJldmVudCIgJiYgeC5uYW1lID09PSBldmVudE5hbWUpOwogICAgICAgICAgICAgIGNvbnN0IHsgYXJncywgb3B0aW9ucyB9ID0gZ2V0RXZlbnRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMsIGFiaUV2ZW50KTsKICAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0aW9uKHB1YmxpY0NsaWVudCwgZ2V0Q29udHJhY3RFdmVudHMsICJnZXRDb250cmFjdEV2ZW50cyIpKHsKICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBldmVudE5hbWUsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgLi4ub3B0aW9ucwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGNvbnRyYWN0LndhdGNoRXZlbnQgPSBuZXcgUHJveHkoe30sIHsKICAgICAgICAgIGdldChfLCBldmVudE5hbWUpIHsKICAgICAgICAgICAgcmV0dXJuICguLi5wYXJhbWV0ZXJzKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgYWJpRXZlbnQgPSBhYmkyLmZpbmQoKHgpID0+IHgudHlwZSA9PT0gImV2ZW50IiAmJiB4Lm5hbWUgPT09IGV2ZW50TmFtZSk7CiAgICAgICAgICAgICAgY29uc3QgeyBhcmdzLCBvcHRpb25zIH0gPSBnZXRFdmVudFBhcmFtZXRlcnMocGFyYW1ldGVycywgYWJpRXZlbnQpOwogICAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb24ocHVibGljQ2xpZW50LCB3YXRjaENvbnRyYWN0RXZlbnQsICJ3YXRjaENvbnRyYWN0RXZlbnQiKSh7CiAgICAgICAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgZXZlbnROYW1lLAogICAgICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgaWYgKGhhc1dhbGxldENsaWVudCkgewogICAgICBpZiAoaGFzV3JpdGVGdW5jdGlvbikKICAgICAgICBjb250cmFjdC53cml0ZSA9IG5ldyBQcm94eSh7fSwgewogICAgICAgICAgZ2V0KF8sIGZ1bmN0aW9uTmFtZSkgewogICAgICAgICAgICByZXR1cm4gKC4uLnBhcmFtZXRlcnMpID0+IHsKICAgICAgICAgICAgICBjb25zdCB7IGFyZ3MsIG9wdGlvbnMgfSA9IGdldEZ1bmN0aW9uUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKICAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0aW9uKHdhbGxldENsaWVudCwgd3JpdGVDb250cmFjdCwgIndyaXRlQ29udHJhY3QiKSh7CiAgICAgICAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KICAgIGlmIChoYXNQdWJsaWNDbGllbnQgfHwgaGFzV2FsbGV0Q2xpZW50KSB7CiAgICAgIGlmIChoYXNXcml0ZUZ1bmN0aW9uKQogICAgICAgIGNvbnRyYWN0LmVzdGltYXRlR2FzID0gbmV3IFByb3h5KHt9LCB7CiAgICAgICAgICBnZXQoXywgZnVuY3Rpb25OYW1lKSB7CiAgICAgICAgICAgIHJldHVybiAoLi4ucGFyYW1ldGVycykgPT4gewogICAgICAgICAgICAgIGNvbnN0IHsgYXJncywgb3B0aW9ucyB9ID0gZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwogICAgICAgICAgICAgIGNvbnN0IGNsaWVudDIgPSBwdWJsaWNDbGllbnQgPz8gd2FsbGV0Q2xpZW50OwogICAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb24oY2xpZW50MiwgZXN0aW1hdGVDb250cmFjdEdhcywgImVzdGltYXRlQ29udHJhY3RHYXMiKSh7CiAgICAgICAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsCiAgICAgICAgICAgICAgICBhY2NvdW50OiBvcHRpb25zLmFjY291bnQgPz8gd2FsbGV0Q2xpZW50LmFjY291bnQKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KICAgIGNvbnRyYWN0LmFkZHJlc3MgPSBhZGRyZXNzOwogICAgY29udHJhY3QuYWJpID0gYWJpMjsKICAgIHJldHVybiBjb250cmFjdDsKICB9CiAgZnVuY3Rpb24gZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzKHZhbHVlcykgewogICAgY29uc3QgaGFzQXJncyA9IHZhbHVlcy5sZW5ndGggJiYgQXJyYXkuaXNBcnJheSh2YWx1ZXNbMF0pOwogICAgY29uc3QgYXJncyA9IGhhc0FyZ3MgPyB2YWx1ZXNbMF0gOiBbXTsKICAgIGNvbnN0IG9wdGlvbnMgPSAoaGFzQXJncyA/IHZhbHVlc1sxXSA6IHZhbHVlc1swXSkgPz8ge307CiAgICByZXR1cm4geyBhcmdzLCBvcHRpb25zIH07CiAgfQogIGZ1bmN0aW9uIGdldEV2ZW50UGFyYW1ldGVycyh2YWx1ZXMsIGFiaUV2ZW50KSB7CiAgICBsZXQgaGFzQXJncyA9IGZhbHNlOwogICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzWzBdKSkKICAgICAgaGFzQXJncyA9IHRydWU7CiAgICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxKSB7CiAgICAgIGhhc0FyZ3MgPSBhYmlFdmVudC5pbnB1dHMuc29tZSgoeCkgPT4geC5pbmRleGVkKTsKICAgIH0gZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMikgewogICAgICBoYXNBcmdzID0gdHJ1ZTsKICAgIH0KICAgIGNvbnN0IGFyZ3MgPSBoYXNBcmdzID8gdmFsdWVzWzBdIDogdm9pZCAwOwogICAgY29uc3Qgb3B0aW9ucyA9IChoYXNBcmdzID8gdmFsdWVzWzFdIDogdmFsdWVzWzBdKSA/PyB7fTsKICAgIHJldHVybiB7IGFyZ3MsIG9wdGlvbnMgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2VpcDcxMi5qcwogIGluaXRfYmFzZSgpOwogIHZhciBFaXA3MTJEb21haW5Ob3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgYWRkcmVzcyB9KSB7CiAgICAgIHN1cGVyKGBObyBFSVAtNzEyIGRvbWFpbiBmb3VuZCBvbiBjb250cmFjdCAiJHthZGRyZXNzfSIuYCwgewogICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgIkVuc3VyZSB0aGF0OiIsCiAgICAgICAgICBgLSBUaGUgY29udHJhY3QgaXMgZGVwbG95ZWQgYXQgdGhlIGFkZHJlc3MgIiR7YWRkcmVzc30iLmAsCiAgICAgICAgICAiLSBgZWlwNzEyRG9tYWluKClgIGZ1bmN0aW9uIGV4aXN0cyBvbiB0aGUgY29udHJhY3QuIiwKICAgICAgICAgICItIGBlaXA3MTJEb21haW4oKWAgZnVuY3Rpb24gbWF0Y2hlcyBzaWduYXR1cmUgdG8gRVJDLTUyNjcgc3BlY2lmaWNhdGlvbi4iCiAgICAgICAgXSwKICAgICAgICBuYW1lOiAiRWlwNzEyRG9tYWluTm90Rm91bmRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRFaXA3MTJEb21haW4uanMKICBhc3luYyBmdW5jdGlvbiBnZXRFaXA3MTJEb21haW4oY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGZhY3RvcnksIGZhY3RvcnlEYXRhIH0gPSBwYXJhbWV0ZXJzOwogICAgdHJ5IHsKICAgICAgY29uc3QgW2ZpZWxkcywgbmFtZSwgdmVyc2lvbjMsIGNoYWluSWQsIHZlcmlmeWluZ0NvbnRyYWN0LCBzYWx0LCBleHRlbnNpb25zXSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHJlYWRDb250cmFjdCwgInJlYWRDb250cmFjdCIpKHsKICAgICAgICBhYmksCiAgICAgICAgYWRkcmVzcywKICAgICAgICBmdW5jdGlvbk5hbWU6ICJlaXA3MTJEb21haW4iLAogICAgICAgIGZhY3RvcnksCiAgICAgICAgZmFjdG9yeURhdGEKICAgICAgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgZG9tYWluOiB7CiAgICAgICAgICBuYW1lLAogICAgICAgICAgdmVyc2lvbjogdmVyc2lvbjMsCiAgICAgICAgICBjaGFpbklkOiBOdW1iZXIoY2hhaW5JZCksCiAgICAgICAgICB2ZXJpZnlpbmdDb250cmFjdCwKICAgICAgICAgIHNhbHQKICAgICAgICB9LAogICAgICAgIGV4dGVuc2lvbnMsCiAgICAgICAgZmllbGRzCiAgICAgIH07CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIGNvbnN0IGVycm9yID0gZTsKICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICJDb250cmFjdEZ1bmN0aW9uRXhlY3V0aW9uRXJyb3IiICYmIGVycm9yLmNhdXNlLm5hbWUgPT09ICJDb250cmFjdEZ1bmN0aW9uWmVyb0RhdGFFcnJvciIpIHsKICAgICAgICB0aHJvdyBuZXcgRWlwNzEyRG9tYWluTm90Rm91bmRFcnJvcih7IGFkZHJlc3MgfSk7CiAgICAgIH0KICAgICAgdGhyb3cgZXJyb3I7CiAgICB9CiAgfQogIHZhciBhYmkgPSBbCiAgICB7CiAgICAgIGlucHV0czogW10sCiAgICAgIG5hbWU6ICJlaXA3MTJEb21haW4iLAogICAgICBvdXRwdXRzOiBbCiAgICAgICAgeyBuYW1lOiAiZmllbGRzIiwgdHlwZTogImJ5dGVzMSIgfSwKICAgICAgICB7IG5hbWU6ICJuYW1lIiwgdHlwZTogInN0cmluZyIgfSwKICAgICAgICB7IG5hbWU6ICJ2ZXJzaW9uIiwgdHlwZTogInN0cmluZyIgfSwKICAgICAgICB7IG5hbWU6ICJjaGFpbklkIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgeyBuYW1lOiAidmVyaWZ5aW5nQ29udHJhY3QiLCB0eXBlOiAiYWRkcmVzcyIgfSwKICAgICAgICB7IG5hbWU6ICJzYWx0IiwgdHlwZTogImJ5dGVzMzIiIH0sCiAgICAgICAgeyBuYW1lOiAiZXh0ZW5zaW9ucyIsIHR5cGU6ICJ1aW50MjU2W10iIH0KICAgICAgXSwKICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgIH0KICBdOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L2FkZENoYWluLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGFkZENoYWluKGNsaWVudCwgeyBjaGFpbiB9KSB7CiAgICBjb25zdCB7IGlkLCBuYW1lLCBuYXRpdmVDdXJyZW5jeSwgcnBjVXJscywgYmxvY2tFeHBsb3JlcnMgfSA9IGNoYWluOwogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ3YWxsZXRfYWRkRXRoZXJldW1DaGFpbiIsCiAgICAgIHBhcmFtczogWwogICAgICAgIHsKICAgICAgICAgIGNoYWluSWQ6IG51bWJlclRvSGV4KGlkKSwKICAgICAgICAgIGNoYWluTmFtZTogbmFtZSwKICAgICAgICAgIG5hdGl2ZUN1cnJlbmN5LAogICAgICAgICAgcnBjVXJsczogcnBjVXJscy5kZWZhdWx0Lmh0dHAsCiAgICAgICAgICBibG9ja0V4cGxvcmVyVXJsczogYmxvY2tFeHBsb3JlcnMgPyBPYmplY3QudmFsdWVzKGJsb2NrRXhwbG9yZXJzKS5tYXAoKHsgdXJsIH0pID0+IHVybCkgOiB2b2lkIDAKICAgICAgICB9CiAgICAgIF0KICAgIH0sIHsgZGVkdXBlOiB0cnVlLCByZXRyeUNvdW50OiAwIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2NyZWF0ZUNsaWVudC5qcwogIGluaXRfcGFyc2VBY2NvdW50KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdWlkLmpzCiAgdmFyIHNpemUyID0gMjU2OwogIHZhciBpbmRleCA9IHNpemUyOwogIHZhciBidWZmZXI7CiAgZnVuY3Rpb24gdWlkKGxlbmd0aCA9IDExKSB7CiAgICBpZiAoIWJ1ZmZlciB8fCBpbmRleCArIGxlbmd0aCA+IHNpemUyICogMikgewogICAgICBidWZmZXIgPSAiIjsKICAgICAgaW5kZXggPSAwOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemUyOyBpKyspIHsKICAgICAgICBidWZmZXIgKz0gKDI1NiArIE1hdGgucmFuZG9tKCkgKiAyNTYgfCAwKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnN1YnN0cmluZyhpbmRleCwgaW5kZXgrKyArIGxlbmd0aCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvY3JlYXRlQ2xpZW50LmpzCiAgZnVuY3Rpb24gY3JlYXRlQ2xpZW50KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYmF0Y2gsIGNhY2hlVGltZSA9IHBhcmFtZXRlcnMucG9sbGluZ0ludGVydmFsID8/IDRlMywgY2NpcFJlYWQsIGtleSA9ICJiYXNlIiwgbmFtZSA9ICJCYXNlIENsaWVudCIsIHBvbGxpbmdJbnRlcnZhbCA9IDRlMywgdHlwZSA9ICJiYXNlIiB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGNoYWluID0gcGFyYW1ldGVycy5jaGFpbjsKICAgIGNvbnN0IGFjY291bnQgPSBwYXJhbWV0ZXJzLmFjY291bnQgPyBwYXJzZUFjY291bnQocGFyYW1ldGVycy5hY2NvdW50KSA6IHZvaWQgMDsKICAgIGNvbnN0IHsgY29uZmlnLCByZXF1ZXN0LCB2YWx1ZSB9ID0gcGFyYW1ldGVycy50cmFuc3BvcnQoewogICAgICBjaGFpbiwKICAgICAgcG9sbGluZ0ludGVydmFsCiAgICB9KTsKICAgIGNvbnN0IHRyYW5zcG9ydCA9IHsgLi4uY29uZmlnLCAuLi52YWx1ZSB9OwogICAgY29uc3QgY2xpZW50ID0gewogICAgICBhY2NvdW50LAogICAgICBiYXRjaCwKICAgICAgY2FjaGVUaW1lLAogICAgICBjY2lwUmVhZCwKICAgICAgY2hhaW4sCiAgICAgIGtleSwKICAgICAgbmFtZSwKICAgICAgcG9sbGluZ0ludGVydmFsLAogICAgICByZXF1ZXN0LAogICAgICB0cmFuc3BvcnQsCiAgICAgIHR5cGUsCiAgICAgIHVpZDogdWlkKCkKICAgIH07CiAgICBmdW5jdGlvbiBleHRlbmQoYmFzZTIpIHsKICAgICAgcmV0dXJuIChleHRlbmRGbikgPT4gewogICAgICAgIGNvbnN0IGV4dGVuZGVkID0gZXh0ZW5kRm4oYmFzZTIpOwogICAgICAgIGZvciAoY29uc3Qga2V5MiBpbiBjbGllbnQpCiAgICAgICAgICBkZWxldGUgZXh0ZW5kZWRba2V5Ml07CiAgICAgICAgY29uc3QgY29tYmluZWQgPSB7IC4uLmJhc2UyLCAuLi5leHRlbmRlZCB9OwogICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGNvbWJpbmVkLCB7IGV4dGVuZDogZXh0ZW5kKGNvbWJpbmVkKSB9KTsKICAgICAgfTsKICAgIH0KICAgIHJldHVybiBPYmplY3QuYXNzaWduKGNsaWVudCwgeyBleHRlbmQ6IGV4dGVuZChjbGllbnQpIH0pOwogIH0KICBmdW5jdGlvbiBycGNTY2hlbWEoKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYnVpbGRSZXF1ZXN0LmpzCiAgaW5pdF9iYXNlKCk7CiAgaW5pdF9yZXF1ZXN0KCk7CiAgaW5pdF9ycGMoKTsKICBpbml0X3RvSGV4KCk7CiAgaW5pdF9rZWNjYWsyNTYoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9wcm9taXNlL3dpdGhEZWR1cGUuanMKICBpbml0X2xydSgpOwogIHZhciBwcm9taXNlQ2FjaGUyID0gLyogQF9fUFVSRV9fICovIG5ldyBMcnVNYXAoODE5Mik7CiAgZnVuY3Rpb24gd2l0aERlZHVwZShmbiwgeyBlbmFibGVkID0gdHJ1ZSwgaWQgfSkgewogICAgaWYgKCFlbmFibGVkIHx8ICFpZCkKICAgICAgcmV0dXJuIGZuKCk7CiAgICBpZiAocHJvbWlzZUNhY2hlMi5nZXQoaWQpKQogICAgICByZXR1cm4gcHJvbWlzZUNhY2hlMi5nZXQoaWQpOwogICAgY29uc3QgcHJvbWlzZSA9IGZuKCkuZmluYWxseSgoKSA9PiBwcm9taXNlQ2FjaGUyLmRlbGV0ZShpZCkpOwogICAgcHJvbWlzZUNhY2hlMi5zZXQoaWQsIHByb21pc2UpOwogICAgcmV0dXJuIHByb21pc2U7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3Byb21pc2Uvd2l0aFJldHJ5LmpzCiAgZnVuY3Rpb24gd2l0aFJldHJ5KGZuLCB7IGRlbGF5OiBkZWxheV8gPSAxMDAsIHJldHJ5Q291bnQgPSAyLCBzaG91bGRSZXRyeTogc2hvdWxkUmV0cnkyID0gKCkgPT4gdHJ1ZSB9ID0ge30pIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIGNvbnN0IGF0dGVtcHRSZXRyeSA9IGFzeW5jICh7IGNvdW50ID0gMCB9ID0ge30pID0+IHsKICAgICAgICBjb25zdCByZXRyeSA9IGFzeW5jICh7IGVycm9yIH0pID0+IHsKICAgICAgICAgIGNvbnN0IGRlbGF5ID0gdHlwZW9mIGRlbGF5XyA9PT0gImZ1bmN0aW9uIiA/IGRlbGF5Xyh7IGNvdW50LCBlcnJvciB9KSA6IGRlbGF5XzsKICAgICAgICAgIGlmIChkZWxheSkKICAgICAgICAgICAgYXdhaXQgd2FpdChkZWxheSk7CiAgICAgICAgICBhdHRlbXB0UmV0cnkoeyBjb3VudDogY291bnQgKyAxIH0pOwogICAgICAgIH07CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmbigpOwogICAgICAgICAgcmVzb2x2ZShkYXRhKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGlmIChjb3VudCA8IHJldHJ5Q291bnQgJiYgYXdhaXQgc2hvdWxkUmV0cnkyKHsgY291bnQsIGVycm9yOiBlcnIgfSkpCiAgICAgICAgICAgIHJldHVybiByZXRyeSh7IGVycm9yOiBlcnIgfSk7CiAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGF0dGVtcHRSZXRyeSgpOwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2J1aWxkUmVxdWVzdC5qcwogIGluaXRfc3RyaW5naWZ5KCk7CiAgZnVuY3Rpb24gYnVpbGRSZXF1ZXN0KHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkgewogICAgcmV0dXJuIGFzeW5jIChhcmdzLCBvdmVycmlkZU9wdGlvbnMgPSB7fSkgPT4gewogICAgICBjb25zdCB7IGRlZHVwZSA9IGZhbHNlLCByZXRyeURlbGF5ID0gMTUwLCByZXRyeUNvdW50ID0gMywgdWlkOiB1aWQyIH0gPSB7CiAgICAgICAgLi4ub3B0aW9ucywKICAgICAgICAuLi5vdmVycmlkZU9wdGlvbnMKICAgICAgfTsKICAgICAgY29uc3QgcmVxdWVzdElkID0gZGVkdXBlID8ga2VjY2FrMjU2KHN0cmluZ1RvSGV4KGAke3VpZDJ9LiR7c3RyaW5naWZ5KGFyZ3MpfWApKSA6IHZvaWQgMDsKICAgICAgcmV0dXJuIHdpdGhEZWR1cGUoKCkgPT4gd2l0aFJldHJ5KGFzeW5jICgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIGF3YWl0IHJlcXVlc3QoYXJncyk7CiAgICAgICAgfSBjYXRjaCAoZXJyXykgewogICAgICAgICAgY29uc3QgZXJyID0gZXJyXzsKICAgICAgICAgIHN3aXRjaCAoZXJyLmNvZGUpIHsKICAgICAgICAgICAgY2FzZSBQYXJzZVJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlUnBjRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRSZXF1ZXN0UnBjRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBNZXRob2ROb3RGb3VuZFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IE1ldGhvZE5vdEZvdW5kUnBjRXJyb3IoZXJyLCB7IG1ldGhvZDogYXJncy5tZXRob2QgfSk7CiAgICAgICAgICAgIGNhc2UgSW52YWxpZFBhcmFtc1JwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbXNScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIEludGVybmFsUnBjRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIEludmFsaWRJbnB1dFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRJbnB1dFJwY0Vycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlTm90Rm91bmRScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvci5jb2RlOgogICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBUcmFuc2FjdGlvblJlamVjdGVkUnBjRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IoZXJyLCB7CiAgICAgICAgICAgICAgICBtZXRob2Q6IGFyZ3MubWV0aG9kCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNhc2UgTGltaXRFeGNlZWRlZFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IExpbWl0RXhjZWVkZWRScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIEpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvci5jb2RlOgogICAgICAgICAgICAgIHRocm93IG5ldyBKc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBVc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgVXNlclJlamVjdGVkUmVxdWVzdEVycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgVW5hdXRob3JpemVkUHJvdmlkZXJFcnJvci5jb2RlOgogICAgICAgICAgICAgIHRocm93IG5ldyBVbmF1dGhvcml6ZWRQcm92aWRlckVycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIFByb3ZpZGVyRGlzY29ubmVjdGVkRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgUHJvdmlkZXJEaXNjb25uZWN0ZWRFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIENoYWluRGlzY29ubmVjdGVkRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgQ2hhaW5EaXNjb25uZWN0ZWRFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIFN3aXRjaENoYWluRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgU3dpdGNoQ2hhaW5FcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIDVlMzoKICAgICAgICAgICAgICB0aHJvdyBuZXcgVXNlclJlamVjdGVkUmVxdWVzdEVycm9yKGVycik7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgaWYgKGVycl8gaW5zdGFuY2VvZiBCYXNlRXJyb3IyKQogICAgICAgICAgICAgICAgdGhyb3cgZXJyXzsKICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5rbm93blJwY0Vycm9yKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAgZGVsYXk6ICh7IGNvdW50LCBlcnJvciB9KSA9PiB7CiAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IgaW5zdGFuY2VvZiBIdHRwUmVxdWVzdEVycm9yKSB7CiAgICAgICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBlcnJvcj8uaGVhZGVycz8uZ2V0KCJSZXRyeS1BZnRlciIpOwogICAgICAgICAgICBpZiAocmV0cnlBZnRlcj8ubWF0Y2goL1xkLykpCiAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5wYXJzZUludChyZXRyeUFmdGVyKSAqIDFlMzsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB+figxIDw8IGNvdW50KSAqIHJldHJ5RGVsYXk7CiAgICAgICAgfSwKICAgICAgICByZXRyeUNvdW50LAogICAgICAgIHNob3VsZFJldHJ5OiAoeyBlcnJvciB9KSA9PiBzaG91bGRSZXRyeShlcnJvcikKICAgICAgfSksIHsgZW5hYmxlZDogZGVkdXBlLCBpZDogcmVxdWVzdElkIH0pOwogICAgfTsKICB9CiAgZnVuY3Rpb24gc2hvdWxkUmV0cnkoZXJyb3IpIHsKICAgIGlmICgiY29kZSIgaW4gZXJyb3IgJiYgdHlwZW9mIGVycm9yLmNvZGUgPT09ICJudW1iZXIiKSB7CiAgICAgIGlmIChlcnJvci5jb2RlID09PSAtMSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGVycm9yLmNvZGUgPT09IExpbWl0RXhjZWVkZWRScGNFcnJvci5jb2RlKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoZXJyb3IuY29kZSA9PT0gSW50ZXJuYWxScGNFcnJvci5jb2RlKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwUmVxdWVzdEVycm9yICYmIGVycm9yLnN0YXR1cykgewogICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDMpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwOCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDEzKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MjkpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDUwMCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAyKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA1MDMpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDUwNCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvdHJhbnNwb3J0cy9jcmVhdGVUcmFuc3BvcnQuanMKICBmdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnQoeyBrZXksIG5hbWUsIHJlcXVlc3QsIHJldHJ5Q291bnQgPSAzLCByZXRyeURlbGF5ID0gMTUwLCB0aW1lb3V0LCB0eXBlIH0sIHZhbHVlKSB7CiAgICBjb25zdCB1aWQyID0gdWlkKCk7CiAgICByZXR1cm4gewogICAgICBjb25maWc6IHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICByZXF1ZXN0LAogICAgICAgIHJldHJ5Q291bnQsCiAgICAgICAgcmV0cnlEZWxheSwKICAgICAgICB0aW1lb3V0LAogICAgICAgIHR5cGUKICAgICAgfSwKICAgICAgcmVxdWVzdDogYnVpbGRSZXF1ZXN0KHJlcXVlc3QsIHsgcmV0cnlDb3VudCwgcmV0cnlEZWxheSwgdWlkOiB1aWQyIH0pLAogICAgICB2YWx1ZQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2xpZW50cy90cmFuc3BvcnRzL2N1c3RvbS5qcwogIGZ1bmN0aW9uIGN1c3RvbShwcm92aWRlciwgY29uZmlnID0ge30pIHsKICAgIGNvbnN0IHsga2V5ID0gImN1c3RvbSIsIG5hbWUgPSAiQ3VzdG9tIFByb3ZpZGVyIiwgcmV0cnlEZWxheSB9ID0gY29uZmlnOwogICAgcmV0dXJuICh7IHJldHJ5Q291bnQ6IGRlZmF1bHRSZXRyeUNvdW50IH0pID0+IGNyZWF0ZVRyYW5zcG9ydCh7CiAgICAgIGtleSwKICAgICAgbmFtZSwKICAgICAgcmVxdWVzdDogcHJvdmlkZXIucmVxdWVzdC5iaW5kKHByb3ZpZGVyKSwKICAgICAgcmV0cnlDb3VudDogY29uZmlnLnJldHJ5Q291bnQgPz8gZGVmYXVsdFJldHJ5Q291bnQsCiAgICAgIHJldHJ5RGVsYXksCiAgICAgIHR5cGU6ICJjdXN0b20iCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2xpZW50cy90cmFuc3BvcnRzL2ZhbGxiYWNrLmpzCiAgaW5pdF9ycGMoKTsKICBmdW5jdGlvbiBmYWxsYmFjayh0cmFuc3BvcnRzXywgY29uZmlnID0ge30pIHsKICAgIGNvbnN0IHsga2V5ID0gImZhbGxiYWNrIiwgbmFtZSA9ICJGYWxsYmFjayIsIHJhbmsgPSBmYWxzZSwgcmV0cnlDb3VudCwgcmV0cnlEZWxheSB9ID0gY29uZmlnOwogICAgcmV0dXJuICh7IGNoYWluLCBwb2xsaW5nSW50ZXJ2YWwgPSA0ZTMsIHRpbWVvdXQsIC4uLnJlc3QgfSkgPT4gewogICAgICBsZXQgdHJhbnNwb3J0cyA9IHRyYW5zcG9ydHNfOwogICAgICBsZXQgb25SZXNwb25zZSA9ICgpID0+IHsKICAgICAgfTsKICAgICAgY29uc3QgdHJhbnNwb3J0ID0gY3JlYXRlVHJhbnNwb3J0KHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICAgICAgY29uc3QgZmV0Y2gyID0gYXN5bmMgKGkgPSAwKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydDIgPSB0cmFuc3BvcnRzW2ldKHsKICAgICAgICAgICAgICAuLi5yZXN0LAogICAgICAgICAgICAgIGNoYWluLAogICAgICAgICAgICAgIHJldHJ5Q291bnQ6IDAsCiAgICAgICAgICAgICAgdGltZW91dAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRyYW5zcG9ydDIucmVxdWVzdCh7CiAgICAgICAgICAgICAgICBtZXRob2QsCiAgICAgICAgICAgICAgICBwYXJhbXMKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBvblJlc3BvbnNlKHsKICAgICAgICAgICAgICAgIG1ldGhvZCwKICAgICAgICAgICAgICAgIHBhcmFtcywKICAgICAgICAgICAgICAgIHJlc3BvbnNlLAogICAgICAgICAgICAgICAgdHJhbnNwb3J0OiB0cmFuc3BvcnQyLAogICAgICAgICAgICAgICAgc3RhdHVzOiAic3VjY2VzcyIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgIG9uUmVzcG9uc2UoewogICAgICAgICAgICAgICAgZXJyb3I6IGVyciwKICAgICAgICAgICAgICAgIG1ldGhvZCwKICAgICAgICAgICAgICAgIHBhcmFtcywKICAgICAgICAgICAgICAgIHRyYW5zcG9ydDogdHJhbnNwb3J0MiwKICAgICAgICAgICAgICAgIHN0YXR1czogImVycm9yIgogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyhlcnIpKQogICAgICAgICAgICAgICAgdGhyb3cgZXJyOwogICAgICAgICAgICAgIGlmIChpID09PSB0cmFuc3BvcnRzLmxlbmd0aCAtIDEpCiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgICAgICAgcmV0dXJuIGZldGNoMihpICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gZmV0Y2gyKCk7CiAgICAgICAgfSwKICAgICAgICByZXRyeUNvdW50LAogICAgICAgIHJldHJ5RGVsYXksCiAgICAgICAgdHlwZTogImZhbGxiYWNrIgogICAgICB9LCB7CiAgICAgICAgb25SZXNwb25zZTogKGZuKSA9PiBvblJlc3BvbnNlID0gZm4sCiAgICAgICAgdHJhbnNwb3J0czogdHJhbnNwb3J0cy5tYXAoKGZuKSA9PiBmbih7IGNoYWluLCByZXRyeUNvdW50OiAwIH0pKQogICAgICB9KTsKICAgICAgaWYgKHJhbmspIHsKICAgICAgICBjb25zdCByYW5rT3B0aW9ucyA9IHR5cGVvZiByYW5rID09PSAib2JqZWN0IiA/IHJhbmsgOiB7fTsKICAgICAgICByYW5rVHJhbnNwb3J0cyh7CiAgICAgICAgICBjaGFpbiwKICAgICAgICAgIGludGVydmFsOiByYW5rT3B0aW9ucy5pbnRlcnZhbCA/PyBwb2xsaW5nSW50ZXJ2YWwsCiAgICAgICAgICBvblRyYW5zcG9ydHM6ICh0cmFuc3BvcnRzXzIpID0+IHRyYW5zcG9ydHMgPSB0cmFuc3BvcnRzXzIsCiAgICAgICAgICBzYW1wbGVDb3VudDogcmFua09wdGlvbnMuc2FtcGxlQ291bnQsCiAgICAgICAgICB0aW1lb3V0OiByYW5rT3B0aW9ucy50aW1lb3V0LAogICAgICAgICAgdHJhbnNwb3J0cywKICAgICAgICAgIHdlaWdodHM6IHJhbmtPcHRpb25zLndlaWdodHMKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gdHJhbnNwb3J0OwogICAgfTsKICB9CiAgZnVuY3Rpb24gc2hvdWxkVGhyb3coZXJyb3IpIHsKICAgIGlmICgiY29kZSIgaW4gZXJyb3IgJiYgdHlwZW9mIGVycm9yLmNvZGUgPT09ICJudW1iZXIiKSB7CiAgICAgIGlmIChlcnJvci5jb2RlID09PSBUcmFuc2FjdGlvblJlamVjdGVkUnBjRXJyb3IuY29kZSB8fCBlcnJvci5jb2RlID09PSBVc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IuY29kZSB8fCBlcnJvci5jb2RlID09PSA1ZTMpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIHJhbmtUcmFuc3BvcnRzKHsgY2hhaW4sIGludGVydmFsID0gNGUzLCBvblRyYW5zcG9ydHMsIHNhbXBsZUNvdW50ID0gMTAsIHRpbWVvdXQgPSAxZTMsIHRyYW5zcG9ydHMsIHdlaWdodHMgPSB7fSB9KSB7CiAgICBjb25zdCB7IHN0YWJpbGl0eTogc3RhYmlsaXR5V2VpZ2h0ID0gMC43LCBsYXRlbmN5OiBsYXRlbmN5V2VpZ2h0ID0gMC4zIH0gPSB3ZWlnaHRzOwogICAgY29uc3Qgc2FtcGxlcyA9IFtdOwogICAgY29uc3QgcmFua1RyYW5zcG9ydHNfID0gYXN5bmMgKCkgPT4gewogICAgICBjb25zdCBzYW1wbGUgPSBhd2FpdCBQcm9taXNlLmFsbCh0cmFuc3BvcnRzLm1hcChhc3luYyAodHJhbnNwb3J0KSA9PiB7CiAgICAgICAgY29uc3QgdHJhbnNwb3J0XyA9IHRyYW5zcG9ydCh7IGNoYWluLCByZXRyeUNvdW50OiAwLCB0aW1lb3V0IH0pOwogICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTsKICAgICAgICBsZXQgZW5kOwogICAgICAgIGxldCBzdWNjZXNzOwogICAgICAgIHRyeSB7CiAgICAgICAgICBhd2FpdCB0cmFuc3BvcnRfLnJlcXVlc3QoeyBtZXRob2Q6ICJuZXRfbGlzdGVuaW5nIiB9KTsKICAgICAgICAgIHN1Y2Nlc3MgPSAxOwogICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgc3VjY2VzcyA9IDA7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIGVuZCA9IERhdGUubm93KCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxhdGVuY3kgPSBlbmQgLSBzdGFydDsKICAgICAgICByZXR1cm4geyBsYXRlbmN5LCBzdWNjZXNzIH07CiAgICAgIH0pKTsKICAgICAgc2FtcGxlcy5wdXNoKHNhbXBsZSk7CiAgICAgIGlmIChzYW1wbGVzLmxlbmd0aCA+IHNhbXBsZUNvdW50KQogICAgICAgIHNhbXBsZXMuc2hpZnQoKTsKICAgICAgY29uc3QgbWF4TGF0ZW5jeSA9IE1hdGgubWF4KC4uLnNhbXBsZXMubWFwKChzYW1wbGUyKSA9PiBNYXRoLm1heCguLi5zYW1wbGUyLm1hcCgoeyBsYXRlbmN5IH0pID0+IGxhdGVuY3kpKSkpOwogICAgICBjb25zdCBzY29yZXMgPSB0cmFuc3BvcnRzLm1hcCgoXywgaSkgPT4gewogICAgICAgIGNvbnN0IGxhdGVuY2llcyA9IHNhbXBsZXMubWFwKChzYW1wbGUyKSA9PiBzYW1wbGUyW2ldLmxhdGVuY3kpOwogICAgICAgIGNvbnN0IG1lYW5MYXRlbmN5ID0gbGF0ZW5jaWVzLnJlZHVjZSgoYWNjLCBsYXRlbmN5KSA9PiBhY2MgKyBsYXRlbmN5LCAwKSAvIGxhdGVuY2llcy5sZW5ndGg7CiAgICAgICAgY29uc3QgbGF0ZW5jeVNjb3JlID0gMSAtIG1lYW5MYXRlbmN5IC8gbWF4TGF0ZW5jeTsKICAgICAgICBjb25zdCBzdWNjZXNzZXMgPSBzYW1wbGVzLm1hcCgoc2FtcGxlMikgPT4gc2FtcGxlMltpXS5zdWNjZXNzKTsKICAgICAgICBjb25zdCBzdGFiaWxpdHlTY29yZSA9IHN1Y2Nlc3Nlcy5yZWR1Y2UoKGFjYywgc3VjY2VzcykgPT4gYWNjICsgc3VjY2VzcywgMCkgLyBzdWNjZXNzZXMubGVuZ3RoOwogICAgICAgIGlmIChzdGFiaWxpdHlTY29yZSA9PT0gMCkKICAgICAgICAgIHJldHVybiBbMCwgaV07CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgIGxhdGVuY3lXZWlnaHQgKiBsYXRlbmN5U2NvcmUgKyBzdGFiaWxpdHlXZWlnaHQgKiBzdGFiaWxpdHlTY29yZSwKICAgICAgICAgIGkKICAgICAgICBdOwogICAgICB9KS5zb3J0KChhLCBiKSA9PiBiWzBdIC0gYVswXSk7CiAgICAgIG9uVHJhbnNwb3J0cyhzY29yZXMubWFwKChbLCBpXSkgPT4gdHJhbnNwb3J0c1tpXSkpOwogICAgICBhd2FpdCB3YWl0KGludGVydmFsKTsKICAgICAgcmFua1RyYW5zcG9ydHNfKCk7CiAgICB9OwogICAgcmFua1RyYW5zcG9ydHNfKCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvdHJhbnNwb3J0cy9odHRwLmpzCiAgaW5pdF9yZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL3RyYW5zcG9ydC5qcwogIGluaXRfYmFzZSgpOwogIHZhciBVcmxSZXF1aXJlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiTm8gVVJMIHdhcyBwcm92aWRlZCB0byB0aGUgVHJhbnNwb3J0LiBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIFJQQyBVUkwgdG8gdGhlIFRyYW5zcG9ydC4iLCB7CiAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9jbGllbnRzL2ludHJvIiwKICAgICAgICBuYW1lOiAiVXJsUmVxdWlyZWRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL3RyYW5zcG9ydHMvaHR0cC5qcwogIGluaXRfY3JlYXRlQmF0Y2hTY2hlZHVsZXIoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ycGMvaHR0cC5qcwogIGluaXRfcmVxdWVzdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3Byb21pc2Uvd2l0aFRpbWVvdXQuanMKICBmdW5jdGlvbiB3aXRoVGltZW91dChmbiwgeyBlcnJvckluc3RhbmNlID0gbmV3IEVycm9yKCJ0aW1lZCBvdXQiKSwgdGltZW91dCwgc2lnbmFsIH0pIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIDsKICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICBsZXQgdGltZW91dElkOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgICAgaWYgKHRpbWVvdXQgPiAwKSB7CiAgICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIGlmIChzaWduYWwpIHsKICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVqZWN0KGVycm9ySW5zdGFuY2UpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgdGltZW91dCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXNvbHZlKGF3YWl0IGZuKHsgc2lnbmFsOiBjb250cm9sbGVyPy5zaWduYWwgfHwgbnVsbCB9KSk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBpZiAoZXJyPy5uYW1lID09PSAiQWJvcnRFcnJvciIpCiAgICAgICAgICAgIHJlamVjdChlcnJvckluc3RhbmNlKTsKICAgICAgICAgIHJlamVjdChlcnIpOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTsKICAgICAgICB9CiAgICAgIH0pKCk7CiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcnBjL2h0dHAuanMKICBpbml0X3N0cmluZ2lmeSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3JwYy9pZC5qcwogIGZ1bmN0aW9uIGNyZWF0ZUlkU3RvcmUoKSB7CiAgICByZXR1cm4gewogICAgICBjdXJyZW50OiAwLAogICAgICB0YWtlKCkgewogICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQrKzsKICAgICAgfSwKICAgICAgcmVzZXQoKSB7CiAgICAgICAgdGhpcy5jdXJyZW50ID0gMDsKICAgICAgfQogICAgfTsKICB9CiAgdmFyIGlkQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gY3JlYXRlSWRTdG9yZSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3JwYy9odHRwLmpzCiAgZnVuY3Rpb24gZ2V0SHR0cFJwY0NsaWVudCh1cmwsIG9wdGlvbnMgPSB7fSkgewogICAgcmV0dXJuIHsKICAgICAgYXN5bmMgcmVxdWVzdChwYXJhbXMpIHsKICAgICAgICBjb25zdCB7IGJvZHksIG9uUmVxdWVzdCA9IG9wdGlvbnMub25SZXF1ZXN0LCBvblJlc3BvbnNlID0gb3B0aW9ucy5vblJlc3BvbnNlLCB0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID8/IDFlNCB9ID0gcGFyYW1zOwogICAgICAgIGNvbnN0IGZldGNoT3B0aW9ucyA9IHsKICAgICAgICAgIC4uLm9wdGlvbnMuZmV0Y2hPcHRpb25zID8/IHt9LAogICAgICAgICAgLi4ucGFyYW1zLmZldGNoT3B0aW9ucyA/PyB7fQogICAgICAgIH07CiAgICAgICAgY29uc3QgeyBoZWFkZXJzLCBtZXRob2QsIHNpZ25hbDogc2lnbmFsXyB9ID0gZmV0Y2hPcHRpb25zOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHdpdGhUaW1lb3V0KGFzeW5jICh7IHNpZ25hbCB9KSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGluaXQgPSB7CiAgICAgICAgICAgICAgLi4uZmV0Y2hPcHRpb25zLAogICAgICAgICAgICAgIGJvZHk6IEFycmF5LmlzQXJyYXkoYm9keSkgPyBzdHJpbmdpZnkoYm9keS5tYXAoKGJvZHkyKSA9PiAoewogICAgICAgICAgICAgICAganNvbnJwYzogIjIuMCIsCiAgICAgICAgICAgICAgICBpZDogYm9keTIuaWQgPz8gaWRDYWNoZS50YWtlKCksCiAgICAgICAgICAgICAgICAuLi5ib2R5MgogICAgICAgICAgICAgIH0pKSkgOiBzdHJpbmdpZnkoewogICAgICAgICAgICAgICAganNvbnJwYzogIjIuMCIsCiAgICAgICAgICAgICAgICBpZDogYm9keS5pZCA/PyBpZENhY2hlLnRha2UoKSwKICAgICAgICAgICAgICAgIC4uLmJvZHkKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICAgICAgICAgLi4uaGVhZGVycwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QgfHwgIlBPU1QiLAogICAgICAgICAgICAgIHNpZ25hbDogc2lnbmFsXyB8fCAodGltZW91dCA+IDAgPyBzaWduYWwgOiBudWxsKQogICAgICAgICAgICB9OwogICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCBpbml0KTsKICAgICAgICAgICAgaWYgKG9uUmVxdWVzdCkKICAgICAgICAgICAgICBhd2FpdCBvblJlcXVlc3QocmVxdWVzdCk7CiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlMiA9IGF3YWl0IGZldGNoKHVybCwgaW5pdCk7CiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTI7CiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIGVycm9ySW5zdGFuY2U6IG5ldyBUaW1lb3V0RXJyb3IoeyBib2R5LCB1cmwgfSksCiAgICAgICAgICAgIHRpbWVvdXQsCiAgICAgICAgICAgIHNpZ25hbDogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAob25SZXNwb25zZSkKICAgICAgICAgICAgYXdhaXQgb25SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgICBsZXQgZGF0YTsKICAgICAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIik/LnN0YXJ0c1dpdGgoImFwcGxpY2F0aW9uL2pzb24iKSkKICAgICAgICAgICAgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBkYXRhID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhIHx8ICJ7fSIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykgewogICAgICAgICAgICB0aHJvdyBuZXcgSHR0cFJlcXVlc3RFcnJvcih7CiAgICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgICBkZXRhaWxzOiBzdHJpbmdpZnkoZGF0YS5lcnJvcikgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dCwKICAgICAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLAogICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLAogICAgICAgICAgICAgIHVybAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEh0dHBSZXF1ZXN0RXJyb3IpCiAgICAgICAgICAgIHRocm93IGVycjsKICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IpCiAgICAgICAgICAgIHRocm93IGVycjsKICAgICAgICAgIHRocm93IG5ldyBIdHRwUmVxdWVzdEVycm9yKHsKICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgY2F1c2U6IGVyciwKICAgICAgICAgICAgdXJsCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvdHJhbnNwb3J0cy9odHRwLmpzCiAgZnVuY3Rpb24gaHR0cCh1cmwsIGNvbmZpZyA9IHt9KSB7CiAgICBjb25zdCB7IGJhdGNoLCBmZXRjaE9wdGlvbnMsIGtleSA9ICJodHRwIiwgbmFtZSA9ICJIVFRQIEpTT04tUlBDIiwgb25GZXRjaFJlcXVlc3QsIG9uRmV0Y2hSZXNwb25zZSwgcmV0cnlEZWxheSB9ID0gY29uZmlnOwogICAgcmV0dXJuICh7IGNoYWluLCByZXRyeUNvdW50OiByZXRyeUNvdW50XywgdGltZW91dDogdGltZW91dF8gfSkgPT4gewogICAgICBjb25zdCB7IGJhdGNoU2l6ZSA9IDFlMywgd2FpdDogd2FpdDIgPSAwIH0gPSB0eXBlb2YgYmF0Y2ggPT09ICJvYmplY3QiID8gYmF0Y2ggOiB7fTsKICAgICAgY29uc3QgcmV0cnlDb3VudCA9IGNvbmZpZy5yZXRyeUNvdW50ID8/IHJldHJ5Q291bnRfOwogICAgICBjb25zdCB0aW1lb3V0ID0gdGltZW91dF8gPz8gY29uZmlnLnRpbWVvdXQgPz8gMWU0OwogICAgICBjb25zdCB1cmxfID0gdXJsIHx8IGNoYWluPy5ycGNVcmxzLmRlZmF1bHQuaHR0cFswXTsKICAgICAgaWYgKCF1cmxfKQogICAgICAgIHRocm93IG5ldyBVcmxSZXF1aXJlZEVycm9yKCk7CiAgICAgIGNvbnN0IHJwY0NsaWVudCA9IGdldEh0dHBScGNDbGllbnQodXJsXywgewogICAgICAgIGZldGNoT3B0aW9ucywKICAgICAgICBvblJlcXVlc3Q6IG9uRmV0Y2hSZXF1ZXN0LAogICAgICAgIG9uUmVzcG9uc2U6IG9uRmV0Y2hSZXNwb25zZSwKICAgICAgICB0aW1lb3V0CiAgICAgIH0pOwogICAgICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICAgICAgY29uc3QgYm9keSA9IHsgbWV0aG9kLCBwYXJhbXMgfTsKICAgICAgICAgIGNvbnN0IHsgc2NoZWR1bGUgfSA9IGNyZWF0ZUJhdGNoU2NoZWR1bGVyKHsKICAgICAgICAgICAgaWQ6IHVybF8sCiAgICAgICAgICAgIHdhaXQ6IHdhaXQyLAogICAgICAgICAgICBzaG91bGRTcGxpdEJhdGNoKHJlcXVlc3RzKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RzLmxlbmd0aCA+IGJhdGNoU2l6ZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZm46IChib2R5MikgPT4gcnBjQ2xpZW50LnJlcXVlc3QoewogICAgICAgICAgICAgIGJvZHk6IGJvZHkyCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBzb3J0OiAoYSwgYikgPT4gYS5pZCAtIGIuaWQKICAgICAgICAgIH0pOwogICAgICAgICAgY29uc3QgZm4gPSBhc3luYyAoYm9keTIpID0+IGJhdGNoID8gc2NoZWR1bGUoYm9keTIpIDogWwogICAgICAgICAgICBhd2FpdCBycGNDbGllbnQucmVxdWVzdCh7CiAgICAgICAgICAgICAgYm9keTogYm9keTIKICAgICAgICAgICAgfSkKICAgICAgICAgIF07CiAgICAgICAgICBjb25zdCBbeyBlcnJvciwgcmVzdWx0IH1dID0gYXdhaXQgZm4oYm9keSk7CiAgICAgICAgICBpZiAoZXJyb3IpCiAgICAgICAgICAgIHRocm93IG5ldyBScGNSZXF1ZXN0RXJyb3IoewogICAgICAgICAgICAgIGJvZHksCiAgICAgICAgICAgICAgZXJyb3IsCiAgICAgICAgICAgICAgdXJsOiB1cmxfCiAgICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9LAogICAgICAgIHJldHJ5Q291bnQsCiAgICAgICAgcmV0cnlEZWxheSwKICAgICAgICB0aW1lb3V0LAogICAgICAgIHR5cGU6ICJodHRwIgogICAgICB9LCB7CiAgICAgICAgZmV0Y2hPcHRpb25zLAogICAgICAgIHVybDogdXJsXwogICAgICB9KTsKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvZW5zL2dldEVuc0FkZHJlc3MuanMKICBpbml0X2FiaXMoKTsKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2dldENoYWluQ29udHJhY3RBZGRyZXNzKCk7CiAgaW5pdF90cmltKCk7CiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9lcnJvcnMuanMKICBpbml0X3NvbGlkaXR5KCk7CiAgaW5pdF9iYXNlKCk7CiAgaW5pdF9jb250cmFjdCgpOwogIGZ1bmN0aW9uIGlzTnVsbFVuaXZlcnNhbFJlc29sdmVyRXJyb3IoZXJyLCBjYWxsVHlwZSkgewogICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgQmFzZUVycm9yMikpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IGNhdXNlID0gZXJyLndhbGsoKGUpID0+IGUgaW5zdGFuY2VvZiBDb250cmFjdEZ1bmN0aW9uUmV2ZXJ0ZWRFcnJvcik7CiAgICBpZiAoIShjYXVzZSBpbnN0YW5jZW9mIENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKGNhdXNlLmRhdGE/LmVycm9yTmFtZSA9PT0gIlJlc29sdmVyTm90Rm91bmQiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChjYXVzZS5kYXRhPy5lcnJvck5hbWUgPT09ICJSZXNvbHZlcldpbGRjYXJkTm90U3VwcG9ydGVkIikKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoY2F1c2UuZGF0YT8uZXJyb3JOYW1lID09PSAiUmVzb2x2ZXJOb3RDb250cmFjdCIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKGNhdXNlLmRhdGE/LmVycm9yTmFtZSA9PT0gIlJlc29sdmVyRXJyb3IiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChjYXVzZS5kYXRhPy5lcnJvck5hbWUgPT09ICJIdHRwRXJyb3IiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChjYXVzZS5yZWFzb24/LmluY2x1ZGVzKCJXaWxkY2FyZCBvbiBub24tZXh0ZW5kZWQgcmVzb2x2ZXJzIGlzIG5vdCBzdXBwb3J0ZWQiKSkKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoY2FsbFR5cGUgPT09ICJyZXZlcnNlIiAmJiBjYXVzZS5yZWFzb24gPT09IHBhbmljUmVhc29uc1s1MF0pCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbnMvbmFtZWhhc2guanMKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X2tlY2NhazI1NigpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9lbmNvZGVkTGFiZWxUb0xhYmVsaGFzaC5qcwogIGluaXRfaXNIZXgoKTsKICBmdW5jdGlvbiBlbmNvZGVkTGFiZWxUb0xhYmVsaGFzaChsYWJlbCkgewogICAgaWYgKGxhYmVsLmxlbmd0aCAhPT0gNjYpCiAgICAgIHJldHVybiBudWxsOwogICAgaWYgKGxhYmVsLmluZGV4T2YoIlsiKSAhPT0gMCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBpZiAobGFiZWwuaW5kZXhPZigiXSIpICE9PSA2NSkKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCBoYXNoMyA9IGAweCR7bGFiZWwuc2xpY2UoMSwgNjUpfWA7CiAgICBpZiAoIWlzSGV4KGhhc2gzKSkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gaGFzaDM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9uYW1laGFzaC5qcwogIGZ1bmN0aW9uIG5hbWVoYXNoKG5hbWUpIHsKICAgIGxldCByZXN1bHQgPSBuZXcgVWludDhBcnJheSgzMikuZmlsbCgwKTsKICAgIGlmICghbmFtZSkKICAgICAgcmV0dXJuIGJ5dGVzVG9IZXgocmVzdWx0KTsKICAgIGNvbnN0IGxhYmVscyA9IG5hbWUuc3BsaXQoIi4iKTsKICAgIGZvciAobGV0IGkgPSBsYWJlbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHsKICAgICAgY29uc3QgaGFzaEZyb21FbmNvZGVkTGFiZWwgPSBlbmNvZGVkTGFiZWxUb0xhYmVsaGFzaChsYWJlbHNbaV0pOwogICAgICBjb25zdCBoYXNoZWQgPSBoYXNoRnJvbUVuY29kZWRMYWJlbCA/IHRvQnl0ZXMoaGFzaEZyb21FbmNvZGVkTGFiZWwpIDoga2VjY2FrMjU2KHN0cmluZ1RvQnl0ZXMobGFiZWxzW2ldKSwgImJ5dGVzIik7CiAgICAgIHJlc3VsdCA9IGtlY2NhazI1Nihjb25jYXQoW3Jlc3VsdCwgaGFzaGVkXSksICJieXRlcyIpOwogICAgfQogICAgcmV0dXJuIGJ5dGVzVG9IZXgocmVzdWx0KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5zL3BhY2tldFRvQnl0ZXMuanMKICBpbml0X3RvQnl0ZXMoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbnMvZW5jb2RlTGFiZWxoYXNoLmpzCiAgZnVuY3Rpb24gZW5jb2RlTGFiZWxoYXNoKGhhc2gzKSB7CiAgICByZXR1cm4gYFske2hhc2gzLnNsaWNlKDIpfV1gOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbnMvbGFiZWxoYXNoLmpzCiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGluaXRfa2VjY2FrMjU2KCk7CiAgZnVuY3Rpb24gbGFiZWxoYXNoKGxhYmVsKSB7CiAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheSgzMikuZmlsbCgwKTsKICAgIGlmICghbGFiZWwpCiAgICAgIHJldHVybiBieXRlc1RvSGV4KHJlc3VsdCk7CiAgICByZXR1cm4gZW5jb2RlZExhYmVsVG9MYWJlbGhhc2gobGFiZWwpIHx8IGtlY2NhazI1NihzdHJpbmdUb0J5dGVzKGxhYmVsKSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9wYWNrZXRUb0J5dGVzLmpzCiAgZnVuY3Rpb24gcGFja2V0VG9CeXRlcyhwYWNrZXQpIHsKICAgIGNvbnN0IHZhbHVlID0gcGFja2V0LnJlcGxhY2UoL15cLnxcLiQvZ20sICIiKTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgxKTsKICAgIGNvbnN0IGJ5dGVzMiA9IG5ldyBVaW50OEFycmF5KHN0cmluZ1RvQnl0ZXModmFsdWUpLmJ5dGVMZW5ndGggKyAyKTsKICAgIGxldCBvZmZzZXQgPSAwOwogICAgY29uc3QgbGlzdCA9IHZhbHVlLnNwbGl0KCIuIik7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgbGV0IGVuY29kZWQgPSBzdHJpbmdUb0J5dGVzKGxpc3RbaV0pOwogICAgICBpZiAoZW5jb2RlZC5ieXRlTGVuZ3RoID4gMjU1KQogICAgICAgIGVuY29kZWQgPSBzdHJpbmdUb0J5dGVzKGVuY29kZUxhYmVsaGFzaChsYWJlbGhhc2gobGlzdFtpXSkpKTsKICAgICAgYnl0ZXMyW29mZnNldF0gPSBlbmNvZGVkLmxlbmd0aDsKICAgICAgYnl0ZXMyLnNldChlbmNvZGVkLCBvZmZzZXQgKyAxKTsKICAgICAgb2Zmc2V0ICs9IGVuY29kZWQubGVuZ3RoICsgMTsKICAgIH0KICAgIGlmIChieXRlczIuYnl0ZUxlbmd0aCAhPT0gb2Zmc2V0ICsgMSkKICAgICAgcmV0dXJuIGJ5dGVzMi5zbGljZSgwLCBvZmZzZXQgKyAxKTsKICAgIHJldHVybiBieXRlczI7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvZW5zL2dldEVuc0FkZHJlc3MuanMKICBhc3luYyBmdW5jdGlvbiBnZXRFbnNBZGRyZXNzKGNsaWVudCwgeyBibG9ja051bWJlciwgYmxvY2tUYWcsIGNvaW5UeXBlLCBuYW1lLCBnYXRld2F5VXJscywgc3RyaWN0LCB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3M6IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc18gfSkgewogICAgbGV0IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyA9IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc187CiAgICBpZiAoIXVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcykgewogICAgICBpZiAoIWNsaWVudC5jaGFpbikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNsaWVudCBjaGFpbiBub3QgY29uZmlndXJlZC4gdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzIGlzIHJlcXVpcmVkLiIpOwogICAgICB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgPSBnZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyh7CiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgY2hhaW46IGNsaWVudC5jaGFpbiwKICAgICAgICBjb250cmFjdDogImVuc1VuaXZlcnNhbFJlc29sdmVyIgogICAgICB9KTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IGZ1bmN0aW9uRGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7CiAgICAgICAgYWJpOiBhZGRyZXNzUmVzb2x2ZXJBYmksCiAgICAgICAgZnVuY3Rpb25OYW1lOiAiYWRkciIsCiAgICAgICAgLi4uY29pblR5cGUgIT0gbnVsbCA/IHsgYXJnczogW25hbWVoYXNoKG5hbWUpLCBCaWdJbnQoY29pblR5cGUpXSB9IDogeyBhcmdzOiBbbmFtZWhhc2gobmFtZSldIH0KICAgICAgfSk7CiAgICAgIGNvbnN0IHJlYWRDb250cmFjdFBhcmFtZXRlcnMgPSB7CiAgICAgICAgYWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzLAogICAgICAgIGFiaTogdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpLAogICAgICAgIGZ1bmN0aW9uTmFtZTogInJlc29sdmUiLAogICAgICAgIGFyZ3M6IFt0b0hleChwYWNrZXRUb0J5dGVzKG5hbWUpKSwgZnVuY3Rpb25EYXRhXSwKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBibG9ja1RhZwogICAgICB9OwogICAgICBjb25zdCByZWFkQ29udHJhY3RBY3Rpb24gPSBnZXRBY3Rpb24oY2xpZW50LCByZWFkQ29udHJhY3QsICJyZWFkQ29udHJhY3QiKTsKICAgICAgY29uc3QgcmVzID0gZ2F0ZXdheVVybHMgPyBhd2FpdCByZWFkQ29udHJhY3RBY3Rpb24oewogICAgICAgIC4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMsCiAgICAgICAgYXJnczogWy4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMuYXJncywgZ2F0ZXdheVVybHNdCiAgICAgIH0pIDogYXdhaXQgcmVhZENvbnRyYWN0QWN0aW9uKHJlYWRDb250cmFjdFBhcmFtZXRlcnMpOwogICAgICBpZiAocmVzWzBdID09PSAiMHgiKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCBhZGRyZXNzID0gZGVjb2RlRnVuY3Rpb25SZXN1bHQoewogICAgICAgIGFiaTogYWRkcmVzc1Jlc29sdmVyQWJpLAogICAgICAgIGFyZ3M6IGNvaW5UeXBlICE9IG51bGwgPyBbbmFtZWhhc2gobmFtZSksIEJpZ0ludChjb2luVHlwZSldIDogdm9pZCAwLAogICAgICAgIGZ1bmN0aW9uTmFtZTogImFkZHIiLAogICAgICAgIGRhdGE6IHJlc1swXQogICAgICB9KTsKICAgICAgaWYgKGFkZHJlc3MgPT09ICIweCIpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGlmICh0cmltKGFkZHJlc3MpID09PSAiMHgwMCIpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBhZGRyZXNzOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGlmIChzdHJpY3QpCiAgICAgICAgdGhyb3cgZXJyOwogICAgICBpZiAoaXNOdWxsVW5pdmVyc2FsUmVzb2x2ZXJFcnJvcihlcnIsICJyZXNvbHZlIikpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHRocm93IGVycjsKICAgIH0KICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2Vucy5qcwogIGluaXRfYmFzZSgpOwogIHZhciBFbnNBdmF0YXJJbnZhbGlkTWV0YWRhdGFFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGRhdGEgfSkgewogICAgICBzdXBlcigiVW5hYmxlIHRvIGV4dHJhY3QgaW1hZ2UgZnJvbSBtZXRhZGF0YS4gVGhlIG1ldGFkYXRhIG1heSBiZSBtYWxmb3JtZWQgb3IgaW52YWxpZC4iLCB7CiAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAiLSBNZXRhZGF0YSBtdXN0IGJlIGEgSlNPTiBvYmplY3Qgd2l0aCBhdCBsZWFzdCBhbiBgaW1hZ2VgLCBgaW1hZ2VfdXJsYCBvciBgaW1hZ2VfZGF0YWAgcHJvcGVydHkuIiwKICAgICAgICAgICIiLAogICAgICAgICAgYFByb3ZpZGVkIGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YAogICAgICAgIF0sCiAgICAgICAgbmFtZTogIkVuc0F2YXRhckludmFsaWRNZXRhZGF0YUVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwogIHZhciBFbnNBdmF0YXJJbnZhbGlkTmZ0VXJpRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyByZWFzb24gfSkgewogICAgICBzdXBlcihgRU5TIE5GVCBhdmF0YXIgVVJJIGlzIGludmFsaWQuICR7cmVhc29ufWAsIHsKICAgICAgICBuYW1lOiAiRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwogIHZhciBFbnNBdmF0YXJVcmlSZXNvbHV0aW9uRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyB1cmkgfSkgewogICAgICBzdXBlcihgVW5hYmxlIHRvIHJlc29sdmUgRU5TIGF2YXRhciBVUkkgIiR7dXJpfSIuIFRoZSBVUkkgbWF5IGJlIG1hbGZvcm1lZCwgaW52YWxpZCwgb3IgZG9lcyBub3QgcmVzcG9uZCB3aXRoIGEgdmFsaWQgaW1hZ2UuYCwgeyBuYW1lOiAiRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yIiB9KTsKICAgIH0KICB9OwogIHZhciBFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgbmFtZXNwYWNlIH0pIHsKICAgICAgc3VwZXIoYEVOUyBORlQgYXZhdGFyIG5hbWVzcGFjZSAiJHtuYW1lc3BhY2V9IiBpcyBub3Qgc3VwcG9ydGVkLiBNdXN0IGJlICJlcmM3MjEiIG9yICJlcmMxMTU1Ii5gLCB7IG5hbWU6ICJFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yIiB9KTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9hdmF0YXIvdXRpbHMuanMKICB2YXIgbmV0d29ya1JlZ2V4ID0gLyg/PHByb3RvY29sPmh0dHBzPzpcL1wvW15cL10qfGlwZnM6XC98aXBuczpcL3xhcjpcLyk/KD88cm9vdD5cLyk/KD88c3VicGF0aD5pcGZzXC98aXBuc1wvKT8oPzx0YXJnZXQ+W1x3XC0uXSspKD88c3VidGFyZ2V0PlwvLiopPy87CiAgdmFyIGlwZnNIYXNoUmVnZXggPSAvXihRbVsxLTlBLUhKLU5QLVphLWttLXpdezQ0LH18YltBLVphLXoyLTddezU4LH18QltBLVoyLTddezU4LH18elsxLTlBLUhKLU5QLVphLWttLXpdezQ4LH18RlswLTlBLUZdezUwLH0pKFwvKD88dGFyZ2V0Pltcd1wtLl0rKSk/KD88c3VidGFyZ2V0PlwvLiopPyQvOwogIHZhciBiYXNlNjRSZWdleCA9IC9eZGF0YTooW2EtekEtWlwtLytdKik7YmFzZTY0LChbXiJdLiopLzsKICB2YXIgZGF0YVVSSVJlZ2V4ID0gL15kYXRhOihbYS16QS1aXC0vK10qKT8oO1thLXpBLVowLTldLio/KT8oLCkvOwogIGFzeW5jIGZ1bmN0aW9uIGlzSW1hZ2VVcmkodXJpKSB7CiAgICB0cnkgewogICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmksIHsgbWV0aG9kOiAiSEVBRCIgfSk7CiAgICAgIGlmIChyZXMuc3RhdHVzID09PSAyMDApIHsKICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIik7CiAgICAgICAgcmV0dXJuIGNvbnRlbnRUeXBlPy5zdGFydHNXaXRoKCJpbWFnZS8iKTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBpZiAodHlwZW9mIGVycm9yID09PSAib2JqZWN0IiAmJiB0eXBlb2YgZXJyb3IucmVzcG9uc2UgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmICghZ2xvYmFsVGhpcy5oYXNPd25Qcm9wZXJ0eSgiSW1hZ2UiKSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpOwogICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7CiAgICAgICAgICByZXNvbHZlKHRydWUpOwogICAgICAgIH07CiAgICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiB7CiAgICAgICAgICByZXNvbHZlKGZhbHNlKTsKICAgICAgICB9OwogICAgICAgIGltZy5zcmMgPSB1cmk7CiAgICAgIH0pOwogICAgfQogIH0KICBmdW5jdGlvbiBnZXRHYXRld2F5KGN1c3RvbTIsIGRlZmF1bHRHYXRld2F5KSB7CiAgICBpZiAoIWN1c3RvbTIpCiAgICAgIHJldHVybiBkZWZhdWx0R2F0ZXdheTsKICAgIGlmIChjdXN0b20yLmVuZHNXaXRoKCIvIikpCiAgICAgIHJldHVybiBjdXN0b20yLnNsaWNlKDAsIC0xKTsKICAgIHJldHVybiBjdXN0b20yOwogIH0KICBmdW5jdGlvbiByZXNvbHZlQXZhdGFyVXJpKHsgdXJpLCBnYXRld2F5VXJscyB9KSB7CiAgICBjb25zdCBpc0VuY29kZWQgPSBiYXNlNjRSZWdleC50ZXN0KHVyaSk7CiAgICBpZiAoaXNFbmNvZGVkKQogICAgICByZXR1cm4geyB1cmksIGlzT25DaGFpbjogdHJ1ZSwgaXNFbmNvZGVkIH07CiAgICBjb25zdCBpcGZzR2F0ZXdheSA9IGdldEdhdGV3YXkoZ2F0ZXdheVVybHM/LmlwZnMsICJodHRwczovL2lwZnMuaW8iKTsKICAgIGNvbnN0IGFyd2VhdmVHYXRld2F5ID0gZ2V0R2F0ZXdheShnYXRld2F5VXJscz8uYXJ3ZWF2ZSwgImh0dHBzOi8vYXJ3ZWF2ZS5uZXQiKTsKICAgIGNvbnN0IG5ldHdvcmtSZWdleE1hdGNoID0gdXJpLm1hdGNoKG5ldHdvcmtSZWdleCk7CiAgICBjb25zdCB7IHByb3RvY29sLCBzdWJwYXRoLCB0YXJnZXQsIHN1YnRhcmdldCA9ICIiIH0gPSBuZXR3b3JrUmVnZXhNYXRjaD8uZ3JvdXBzIHx8IHt9OwogICAgY29uc3QgaXNJUE5TID0gcHJvdG9jb2wgPT09ICJpcG5zOi8iIHx8IHN1YnBhdGggPT09ICJpcG5zLyI7CiAgICBjb25zdCBpc0lQRlMgPSBwcm90b2NvbCA9PT0gImlwZnM6LyIgfHwgc3VicGF0aCA9PT0gImlwZnMvIiB8fCBpcGZzSGFzaFJlZ2V4LnRlc3QodXJpKTsKICAgIGlmICh1cmkuc3RhcnRzV2l0aCgiaHR0cCIpICYmICFpc0lQTlMgJiYgIWlzSVBGUykgewogICAgICBsZXQgcmVwbGFjZWRVcmkgPSB1cmk7CiAgICAgIGlmIChnYXRld2F5VXJscz8uYXJ3ZWF2ZSkKICAgICAgICByZXBsYWNlZFVyaSA9IHVyaS5yZXBsYWNlKC9odHRwczpcL1wvYXJ3ZWF2ZS5uZXQvZywgZ2F0ZXdheVVybHM/LmFyd2VhdmUpOwogICAgICByZXR1cm4geyB1cmk6IHJlcGxhY2VkVXJpLCBpc09uQ2hhaW46IGZhbHNlLCBpc0VuY29kZWQ6IGZhbHNlIH07CiAgICB9CiAgICBpZiAoKGlzSVBOUyB8fCBpc0lQRlMpICYmIHRhcmdldCkgewogICAgICByZXR1cm4gewogICAgICAgIHVyaTogYCR7aXBmc0dhdGV3YXl9LyR7aXNJUE5TID8gImlwbnMiIDogImlwZnMifS8ke3RhcmdldH0ke3N1YnRhcmdldH1gLAogICAgICAgIGlzT25DaGFpbjogZmFsc2UsCiAgICAgICAgaXNFbmNvZGVkOiBmYWxzZQogICAgICB9OwogICAgfQogICAgaWYgKHByb3RvY29sID09PSAiYXI6LyIgJiYgdGFyZ2V0KSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdXJpOiBgJHthcndlYXZlR2F0ZXdheX0vJHt0YXJnZXR9JHtzdWJ0YXJnZXQgfHwgIiJ9YCwKICAgICAgICBpc09uQ2hhaW46IGZhbHNlLAogICAgICAgIGlzRW5jb2RlZDogZmFsc2UKICAgICAgfTsKICAgIH0KICAgIGxldCBwYXJzZWRVcmkgPSB1cmkucmVwbGFjZShkYXRhVVJJUmVnZXgsICIiKTsKICAgIGlmIChwYXJzZWRVcmkuc3RhcnRzV2l0aCgiPHN2ZyIpKSB7CiAgICAgIHBhcnNlZFVyaSA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7YnRvYShwYXJzZWRVcmkpfWA7CiAgICB9CiAgICBpZiAocGFyc2VkVXJpLnN0YXJ0c1dpdGgoImRhdGE6IikgfHwgcGFyc2VkVXJpLnN0YXJ0c1dpdGgoInsiKSkgewogICAgICByZXR1cm4gewogICAgICAgIHVyaTogcGFyc2VkVXJpLAogICAgICAgIGlzT25DaGFpbjogdHJ1ZSwKICAgICAgICBpc0VuY29kZWQ6IGZhbHNlCiAgICAgIH07CiAgICB9CiAgICB0aHJvdyBuZXcgRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yKHsgdXJpIH0pOwogIH0KICBmdW5jdGlvbiBnZXRKc29uSW1hZ2UoZGF0YSkgewogICAgaWYgKHR5cGVvZiBkYXRhICE9PSAib2JqZWN0IiB8fCAhKCJpbWFnZSIgaW4gZGF0YSkgJiYgISgiaW1hZ2VfdXJsIiBpbiBkYXRhKSAmJiAhKCJpbWFnZV9kYXRhIiBpbiBkYXRhKSkgewogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE1ldGFkYXRhRXJyb3IoeyBkYXRhIH0pOwogICAgfQogICAgcmV0dXJuIGRhdGEuaW1hZ2UgfHwgZGF0YS5pbWFnZV91cmwgfHwgZGF0YS5pbWFnZV9kYXRhOwogIH0KICBhc3luYyBmdW5jdGlvbiBnZXRNZXRhZGF0YUF2YXRhclVyaSh7IGdhdGV3YXlVcmxzLCB1cmkgfSkgewogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJpKS50aGVuKChyZXMyKSA9PiByZXMyLmpzb24oKSk7CiAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgcGFyc2VBdmF0YXJVcmkoewogICAgICAgIGdhdGV3YXlVcmxzLAogICAgICAgIHVyaTogZ2V0SnNvbkltYWdlKHJlcykKICAgICAgfSk7CiAgICAgIHJldHVybiBpbWFnZTsKICAgIH0gY2F0Y2ggewogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yKHsgdXJpIH0pOwogICAgfQogIH0KICBhc3luYyBmdW5jdGlvbiBwYXJzZUF2YXRhclVyaSh7IGdhdGV3YXlVcmxzLCB1cmkgfSkgewogICAgY29uc3QgeyB1cmk6IHJlc29sdmVkVVJJLCBpc09uQ2hhaW4gfSA9IHJlc29sdmVBdmF0YXJVcmkoeyB1cmksIGdhdGV3YXlVcmxzIH0pOwogICAgaWYgKGlzT25DaGFpbikKICAgICAgcmV0dXJuIHJlc29sdmVkVVJJOwogICAgY29uc3QgaXNJbWFnZSA9IGF3YWl0IGlzSW1hZ2VVcmkocmVzb2x2ZWRVUkkpOwogICAgaWYgKGlzSW1hZ2UpCiAgICAgIHJldHVybiByZXNvbHZlZFVSSTsKICAgIHRocm93IG5ldyBFbnNBdmF0YXJVcmlSZXNvbHV0aW9uRXJyb3IoeyB1cmkgfSk7CiAgfQogIGZ1bmN0aW9uIHBhcnNlTmZ0VXJpKHVyaV8pIHsKICAgIGxldCB1cmkgPSB1cmlfOwogICAgaWYgKHVyaS5zdGFydHNXaXRoKCJkaWQ6bmZ0OiIpKSB7CiAgICAgIHVyaSA9IHVyaS5yZXBsYWNlKCJkaWQ6bmZ0OiIsICIiKS5yZXBsYWNlKC9fL2csICIvIik7CiAgICB9CiAgICBjb25zdCBbcmVmZXJlbmNlLCBhc3NldF9uYW1lc3BhY2UsIHRva2VuSURdID0gdXJpLnNwbGl0KCIvIik7CiAgICBjb25zdCBbZWlwX25hbWVzcGFjZSwgY2hhaW5JRF0gPSByZWZlcmVuY2Uuc3BsaXQoIjoiKTsKICAgIGNvbnN0IFtlcmNfbmFtZXNwYWNlLCBjb250cmFjdEFkZHJlc3NdID0gYXNzZXRfbmFtZXNwYWNlLnNwbGl0KCI6Iik7CiAgICBpZiAoIWVpcF9uYW1lc3BhY2UgfHwgZWlwX25hbWVzcGFjZS50b0xvd2VyQ2FzZSgpICE9PSAiZWlwMTU1IikKICAgICAgdGhyb3cgbmV3IEVuc0F2YXRhckludmFsaWROZnRVcmlFcnJvcih7IHJlYXNvbjogIk9ubHkgRUlQLTE1NSBzdXBwb3J0ZWQiIH0pOwogICAgaWYgKCFjaGFpbklEKQogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yKHsgcmVhc29uOiAiQ2hhaW4gSUQgbm90IGZvdW5kIiB9KTsKICAgIGlmICghY29udHJhY3RBZGRyZXNzKQogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yKHsKICAgICAgICByZWFzb246ICJDb250cmFjdCBhZGRyZXNzIG5vdCBmb3VuZCIKICAgICAgfSk7CiAgICBpZiAoIXRva2VuSUQpCiAgICAgIHRocm93IG5ldyBFbnNBdmF0YXJJbnZhbGlkTmZ0VXJpRXJyb3IoeyByZWFzb246ICJUb2tlbiBJRCBub3QgZm91bmQiIH0pOwogICAgaWYgKCFlcmNfbmFtZXNwYWNlKQogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yKHsgcmVhc29uOiAiRVJDIG5hbWVzcGFjZSBub3QgZm91bmQiIH0pOwogICAgcmV0dXJuIHsKICAgICAgY2hhaW5JRDogTnVtYmVyLnBhcnNlSW50KGNoYWluSUQpLAogICAgICBuYW1lc3BhY2U6IGVyY19uYW1lc3BhY2UudG9Mb3dlckNhc2UoKSwKICAgICAgY29udHJhY3RBZGRyZXNzLAogICAgICB0b2tlbklECiAgICB9OwogIH0KICBhc3luYyBmdW5jdGlvbiBnZXROZnRUb2tlblVyaShjbGllbnQsIHsgbmZ0IH0pIHsKICAgIGlmIChuZnQubmFtZXNwYWNlID09PSAiZXJjNzIxIikgewogICAgICByZXR1cm4gcmVhZENvbnRyYWN0KGNsaWVudCwgewogICAgICAgIGFkZHJlc3M6IG5mdC5jb250cmFjdEFkZHJlc3MsCiAgICAgICAgYWJpOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJ0b2tlblVSSSIsCiAgICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgICBpbnB1dHM6IFt7IG5hbWU6ICJ0b2tlbklkIiwgdHlwZTogInVpbnQyNTYiIH1dLAogICAgICAgICAgICBvdXRwdXRzOiBbeyBuYW1lOiAiIiwgdHlwZTogInN0cmluZyIgfV0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIGZ1bmN0aW9uTmFtZTogInRva2VuVVJJIiwKICAgICAgICBhcmdzOiBbQmlnSW50KG5mdC50b2tlbklEKV0KICAgICAgfSk7CiAgICB9CiAgICBpZiAobmZ0Lm5hbWVzcGFjZSA9PT0gImVyYzExNTUiKSB7CiAgICAgIHJldHVybiByZWFkQ29udHJhY3QoY2xpZW50LCB7CiAgICAgICAgYWRkcmVzczogbmZ0LmNvbnRyYWN0QWRkcmVzcywKICAgICAgICBhYmk6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogInVyaSIsCiAgICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgICBpbnB1dHM6IFt7IG5hbWU6ICJfaWQiLCB0eXBlOiAidWludDI1NiIgfV0sCiAgICAgICAgICAgIG91dHB1dHM6IFt7IG5hbWU6ICIiLCB0eXBlOiAic3RyaW5nIiB9XQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgZnVuY3Rpb25OYW1lOiAidXJpIiwKICAgICAgICBhcmdzOiBbQmlnSW50KG5mdC50b2tlbklEKV0KICAgICAgfSk7CiAgICB9CiAgICB0aHJvdyBuZXcgRW5zQXZhdGFyVW5zdXBwb3J0ZWROYW1lc3BhY2VFcnJvcih7IG5hbWVzcGFjZTogbmZ0Lm5hbWVzcGFjZSB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5zL2F2YXRhci9wYXJzZUF2YXRhclJlY29yZC5qcwogIGFzeW5jIGZ1bmN0aW9uIHBhcnNlQXZhdGFyUmVjb3JkKGNsaWVudCwgeyBnYXRld2F5VXJscywgcmVjb3JkIH0pIHsKICAgIGlmICgvZWlwMTU1Oi9pLnRlc3QocmVjb3JkKSkKICAgICAgcmV0dXJuIHBhcnNlTmZ0QXZhdGFyVXJpKGNsaWVudCwgeyBnYXRld2F5VXJscywgcmVjb3JkIH0pOwogICAgcmV0dXJuIHBhcnNlQXZhdGFyVXJpKHsgdXJpOiByZWNvcmQsIGdhdGV3YXlVcmxzIH0pOwogIH0KICBhc3luYyBmdW5jdGlvbiBwYXJzZU5mdEF2YXRhclVyaShjbGllbnQsIHsgZ2F0ZXdheVVybHMsIHJlY29yZCB9KSB7CiAgICBjb25zdCBuZnQgPSBwYXJzZU5mdFVyaShyZWNvcmQpOwogICAgY29uc3QgbmZ0VXJpID0gYXdhaXQgZ2V0TmZ0VG9rZW5VcmkoY2xpZW50LCB7IG5mdCB9KTsKICAgIGNvbnN0IHsgdXJpOiByZXNvbHZlZE5mdFVyaSwgaXNPbkNoYWluLCBpc0VuY29kZWQgfSA9IHJlc29sdmVBdmF0YXJVcmkoeyB1cmk6IG5mdFVyaSwgZ2F0ZXdheVVybHMgfSk7CiAgICBpZiAoaXNPbkNoYWluICYmIChyZXNvbHZlZE5mdFVyaS5pbmNsdWRlcygiZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwiKSB8fCByZXNvbHZlZE5mdFVyaS5zdGFydHNXaXRoKCJ7IikpKSB7CiAgICAgIGNvbnN0IGVuY29kZWRKc29uID0gaXNFbmNvZGVkID8gKAogICAgICAgIC8vIGlmIGl0IGlzIGVuY29kZWQsIGRlY29kZSBpdAogICAgICAgIGF0b2IocmVzb2x2ZWROZnRVcmkucmVwbGFjZSgiZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwiLCAiIikpCiAgICAgICkgOiAoCiAgICAgICAgLy8gaWYgaXQgaXNuJ3QgZW5jb2RlZCBhc3N1bWUgaXQgaXMgYSBKU09OIHN0cmluZywgYnV0IGl0IGNvdWxkIGJlIGFueXRoaW5nIChpdCB3aWxsIGVycm9yIGlmIGl0IGlzKQogICAgICAgIHJlc29sdmVkTmZ0VXJpCiAgICAgICk7CiAgICAgIGNvbnN0IGRlY29kZWQgPSBKU09OLnBhcnNlKGVuY29kZWRKc29uKTsKICAgICAgcmV0dXJuIHBhcnNlQXZhdGFyVXJpKHsgdXJpOiBnZXRKc29uSW1hZ2UoZGVjb2RlZCksIGdhdGV3YXlVcmxzIH0pOwogICAgfQogICAgbGV0IHVyaVRva2VuSWQgPSBuZnQudG9rZW5JRDsKICAgIGlmIChuZnQubmFtZXNwYWNlID09PSAiZXJjMTE1NSIpCiAgICAgIHVyaVRva2VuSWQgPSB1cmlUb2tlbklkLnJlcGxhY2UoIjB4IiwgIiIpLnBhZFN0YXJ0KDY0LCAiMCIpOwogICAgcmV0dXJuIGdldE1ldGFkYXRhQXZhdGFyVXJpKHsKICAgICAgZ2F0ZXdheVVybHMsCiAgICAgIHVyaTogcmVzb2x2ZWROZnRVcmkucmVwbGFjZSgvKD86MHgpP3tpZH0vLCB1cmlUb2tlbklkKQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvZW5zL2dldEVuc1RleHQuanMKICBpbml0X2FiaXMoKTsKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2dldENoYWluQ29udHJhY3RBZGRyZXNzKCk7CiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldEVuc1RleHQoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZywgbmFtZSwga2V5LCBnYXRld2F5VXJscywgc3RyaWN0LCB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3M6IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc18gfSkgewogICAgbGV0IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyA9IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc187CiAgICBpZiAoIXVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcykgewogICAgICBpZiAoIWNsaWVudC5jaGFpbikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNsaWVudCBjaGFpbiBub3QgY29uZmlndXJlZC4gdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzIGlzIHJlcXVpcmVkLiIpOwogICAgICB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgPSBnZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyh7CiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgY2hhaW46IGNsaWVudC5jaGFpbiwKICAgICAgICBjb250cmFjdDogImVuc1VuaXZlcnNhbFJlc29sdmVyIgogICAgICB9KTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlYWRDb250cmFjdFBhcmFtZXRlcnMgPSB7CiAgICAgICAgYWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzLAogICAgICAgIGFiaTogdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpLAogICAgICAgIGZ1bmN0aW9uTmFtZTogInJlc29sdmUiLAogICAgICAgIGFyZ3M6IFsKICAgICAgICAgIHRvSGV4KHBhY2tldFRvQnl0ZXMobmFtZSkpLAogICAgICAgICAgZW5jb2RlRnVuY3Rpb25EYXRhKHsKICAgICAgICAgICAgYWJpOiB0ZXh0UmVzb2x2ZXJBYmksCiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogInRleHQiLAogICAgICAgICAgICBhcmdzOiBbbmFtZWhhc2gobmFtZSksIGtleV0KICAgICAgICAgIH0pCiAgICAgICAgXSwKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBibG9ja1RhZwogICAgICB9OwogICAgICBjb25zdCByZWFkQ29udHJhY3RBY3Rpb24gPSBnZXRBY3Rpb24oY2xpZW50LCByZWFkQ29udHJhY3QsICJyZWFkQ29udHJhY3QiKTsKICAgICAgY29uc3QgcmVzID0gZ2F0ZXdheVVybHMgPyBhd2FpdCByZWFkQ29udHJhY3RBY3Rpb24oewogICAgICAgIC4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMsCiAgICAgICAgYXJnczogWy4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMuYXJncywgZ2F0ZXdheVVybHNdCiAgICAgIH0pIDogYXdhaXQgcmVhZENvbnRyYWN0QWN0aW9uKHJlYWRDb250cmFjdFBhcmFtZXRlcnMpOwogICAgICBpZiAocmVzWzBdID09PSAiMHgiKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCByZWNvcmQgPSBkZWNvZGVGdW5jdGlvblJlc3VsdCh7CiAgICAgICAgYWJpOiB0ZXh0UmVzb2x2ZXJBYmksCiAgICAgICAgZnVuY3Rpb25OYW1lOiAidGV4dCIsCiAgICAgICAgZGF0YTogcmVzWzBdCiAgICAgIH0pOwogICAgICByZXR1cm4gcmVjb3JkID09PSAiIiA/IG51bGwgOiByZWNvcmQ7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgaWYgKHN0cmljdCkKICAgICAgICB0aHJvdyBlcnI7CiAgICAgIGlmIChpc051bGxVbml2ZXJzYWxSZXNvbHZlckVycm9yKGVyciwgInJlc29sdmUiKSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgdGhyb3cgZXJyOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2Vucy9nZXRFbnNBdmF0YXIuanMKICBhc3luYyBmdW5jdGlvbiBnZXRFbnNBdmF0YXIoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZywgYXNzZXRHYXRld2F5VXJscywgbmFtZSwgZ2F0ZXdheVVybHMsIHN0cmljdCwgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzIH0pIHsKICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEVuc1RleHQsICJnZXRFbnNUZXh0IikoewogICAgICBibG9ja051bWJlciwKICAgICAgYmxvY2tUYWcsCiAgICAgIGtleTogImF2YXRhciIsCiAgICAgIG5hbWUsCiAgICAgIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcywKICAgICAgZ2F0ZXdheVVybHMsCiAgICAgIHN0cmljdAogICAgfSk7CiAgICBpZiAoIXJlY29yZCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB0cnkgewogICAgICByZXR1cm4gYXdhaXQgcGFyc2VBdmF0YXJSZWNvcmQoY2xpZW50LCB7CiAgICAgICAgcmVjb3JkLAogICAgICAgIGdhdGV3YXlVcmxzOiBhc3NldEdhdGV3YXlVcmxzCiAgICAgIH0pOwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2Vucy9nZXRFbnNOYW1lLmpzCiAgaW5pdF9hYmlzKCk7CiAgaW5pdF9nZXRDaGFpbkNvbnRyYWN0QWRkcmVzcygpOwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRFbnNOYW1lKGNsaWVudCwgeyBhZGRyZXNzLCBibG9ja051bWJlciwgYmxvY2tUYWcsIGdhdGV3YXlVcmxzLCBzdHJpY3QsIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzXyB9KSB7CiAgICBsZXQgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzID0gdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzXzsKICAgIGlmICghdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzKSB7CiAgICAgIGlmICghY2xpZW50LmNoYWluKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiY2xpZW50IGNoYWluIG5vdCBjb25maWd1cmVkLiB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgaXMgcmVxdWlyZWQuIik7CiAgICAgIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyA9IGdldENoYWluQ29udHJhY3RBZGRyZXNzKHsKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBjaGFpbjogY2xpZW50LmNoYWluLAogICAgICAgIGNvbnRyYWN0OiAiZW5zVW5pdmVyc2FsUmVzb2x2ZXIiCiAgICAgIH0pOwogICAgfQogICAgY29uc3QgcmV2ZXJzZU5vZGUgPSBgJHthZGRyZXNzLnRvTG93ZXJDYXNlKCkuc3Vic3RyaW5nKDIpfS5hZGRyLnJldmVyc2VgOwogICAgdHJ5IHsKICAgICAgY29uc3QgcmVhZENvbnRyYWN0UGFyYW1ldGVycyA9IHsKICAgICAgICBhZGRyZXNzOiB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MsCiAgICAgICAgYWJpOiB1bml2ZXJzYWxSZXNvbHZlclJldmVyc2VBYmksCiAgICAgICAgZnVuY3Rpb25OYW1lOiAicmV2ZXJzZSIsCiAgICAgICAgYXJnczogW3RvSGV4KHBhY2tldFRvQnl0ZXMocmV2ZXJzZU5vZGUpKV0sCiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgYmxvY2tUYWcKICAgICAgfTsKICAgICAgY29uc3QgcmVhZENvbnRyYWN0QWN0aW9uID0gZ2V0QWN0aW9uKGNsaWVudCwgcmVhZENvbnRyYWN0LCAicmVhZENvbnRyYWN0Iik7CiAgICAgIGNvbnN0IFtuYW1lLCByZXNvbHZlZEFkZHJlc3NdID0gZ2F0ZXdheVVybHMgPyBhd2FpdCByZWFkQ29udHJhY3RBY3Rpb24oewogICAgICAgIC4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMsCiAgICAgICAgYXJnczogWy4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMuYXJncywgZ2F0ZXdheVVybHNdCiAgICAgIH0pIDogYXdhaXQgcmVhZENvbnRyYWN0QWN0aW9uKHJlYWRDb250cmFjdFBhcmFtZXRlcnMpOwogICAgICBpZiAoYWRkcmVzcy50b0xvd2VyQ2FzZSgpICE9PSByZXNvbHZlZEFkZHJlc3MudG9Mb3dlckNhc2UoKSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIG5hbWU7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgaWYgKHN0cmljdCkKICAgICAgICB0aHJvdyBlcnI7CiAgICAgIGlmIChpc051bGxVbml2ZXJzYWxSZXNvbHZlckVycm9yKGVyciwgInJldmVyc2UiKSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgdGhyb3cgZXJyOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2Vucy9nZXRFbnNSZXNvbHZlci5qcwogIGluaXRfZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0RW5zUmVzb2x2ZXIoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZywgbmFtZSwgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzOiB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3NfIH0pIHsKICAgIGxldCB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgPSB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3NfOwogICAgaWYgKCF1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MpIHsKICAgICAgaWYgKCFjbGllbnQuY2hhaW4pCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJjbGllbnQgY2hhaW4gbm90IGNvbmZpZ3VyZWQuIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyBpcyByZXF1aXJlZC4iKTsKICAgICAgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzID0gZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoewogICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgIGNoYWluOiBjbGllbnQuY2hhaW4sCiAgICAgICAgY29udHJhY3Q6ICJlbnNVbml2ZXJzYWxSZXNvbHZlciIKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBbcmVzb2x2ZXJBZGRyZXNzXSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHJlYWRDb250cmFjdCwgInJlYWRDb250cmFjdCIpKHsKICAgICAgYWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzLAogICAgICBhYmk6IFsKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFt7IHR5cGU6ICJieXRlcyIgfV0sCiAgICAgICAgICBuYW1lOiAiZmluZFJlc29sdmVyIiwKICAgICAgICAgIG91dHB1dHM6IFt7IHR5cGU6ICJhZGRyZXNzIiB9LCB7IHR5cGU6ICJieXRlczMyIiB9XSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0KICAgICAgXSwKICAgICAgZnVuY3Rpb25OYW1lOiAiZmluZFJlc29sdmVyIiwKICAgICAgYXJnczogW3RvSGV4KHBhY2tldFRvQnl0ZXMobmFtZSkpXSwKICAgICAgYmxvY2tOdW1iZXIsCiAgICAgIGJsb2NrVGFnCiAgICB9KTsKICAgIHJldHVybiByZXNvbHZlckFkZHJlc3M7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvZGVjb3JhdG9ycy9wdWJsaWMuanMKICBpbml0X2NhbGwoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9jcmVhdGVCbG9ja0ZpbHRlci5qcwogIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJsb2NrRmlsdGVyKGNsaWVudCkgewogICAgY29uc3QgZ2V0UmVxdWVzdCA9IGNyZWF0ZUZpbHRlclJlcXVlc3RTY29wZShjbGllbnQsIHsKICAgICAgbWV0aG9kOiAiZXRoX25ld0Jsb2NrRmlsdGVyIgogICAgfSk7CiAgICBjb25zdCBpZCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX25ld0Jsb2NrRmlsdGVyIgogICAgfSk7CiAgICByZXR1cm4geyBpZCwgcmVxdWVzdDogZ2V0UmVxdWVzdChpZCksIHR5cGU6ICJibG9jayIgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvY3JlYXRlRXZlbnRGaWx0ZXIuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRXZlbnRGaWx0ZXIoY2xpZW50LCB7IGFkZHJlc3MsIGFyZ3MsIGV2ZW50LCBldmVudHM6IGV2ZW50c18sIGZyb21CbG9jaywgc3RyaWN0LCB0b0Jsb2NrIH0gPSB7fSkgewogICAgY29uc3QgZXZlbnRzID0gZXZlbnRzXyA/PyAoZXZlbnQgPyBbZXZlbnRdIDogdm9pZCAwKTsKICAgIGNvbnN0IGdldFJlcXVlc3QgPSBjcmVhdGVGaWx0ZXJSZXF1ZXN0U2NvcGUoY2xpZW50LCB7CiAgICAgIG1ldGhvZDogImV0aF9uZXdGaWx0ZXIiCiAgICB9KTsKICAgIGxldCB0b3BpY3MgPSBbXTsKICAgIGlmIChldmVudHMpIHsKICAgICAgY29uc3QgZW5jb2RlZCA9IGV2ZW50cy5mbGF0TWFwKChldmVudDIpID0+IGVuY29kZUV2ZW50VG9waWNzKHsKICAgICAgICBhYmk6IFtldmVudDJdLAogICAgICAgIGV2ZW50TmFtZTogZXZlbnQyLm5hbWUsCiAgICAgICAgYXJncwogICAgICB9KSk7CiAgICAgIHRvcGljcyA9IFtlbmNvZGVkXTsKICAgICAgaWYgKGV2ZW50KQogICAgICAgIHRvcGljcyA9IHRvcGljc1swXTsKICAgIH0KICAgIGNvbnN0IGlkID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfbmV3RmlsdGVyIiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgewogICAgICAgICAgYWRkcmVzcywKICAgICAgICAgIGZyb21CbG9jazogdHlwZW9mIGZyb21CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleChmcm9tQmxvY2spIDogZnJvbUJsb2NrLAogICAgICAgICAgdG9CbG9jazogdHlwZW9mIHRvQmxvY2sgPT09ICJiaWdpbnQiID8gbnVtYmVyVG9IZXgodG9CbG9jaykgOiB0b0Jsb2NrLAogICAgICAgICAgLi4udG9waWNzLmxlbmd0aCA/IHsgdG9waWNzIH0gOiB7fQogICAgICAgIH0KICAgICAgXQogICAgfSk7CiAgICByZXR1cm4gewogICAgICBhYmk6IGV2ZW50cywKICAgICAgYXJncywKICAgICAgZXZlbnROYW1lOiBldmVudCA/IGV2ZW50Lm5hbWUgOiB2b2lkIDAsCiAgICAgIGZyb21CbG9jaywKICAgICAgaWQsCiAgICAgIHJlcXVlc3Q6IGdldFJlcXVlc3QoaWQpLAogICAgICBzdHJpY3Q6IEJvb2xlYW4oc3RyaWN0KSwKICAgICAgdG9CbG9jaywKICAgICAgdHlwZTogImV2ZW50IgogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvY3JlYXRlUGVuZGluZ1RyYW5zYWN0aW9uRmlsdGVyLmpzCiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlUGVuZGluZ1RyYW5zYWN0aW9uRmlsdGVyKGNsaWVudCkgewogICAgY29uc3QgZ2V0UmVxdWVzdCA9IGNyZWF0ZUZpbHRlclJlcXVlc3RTY29wZShjbGllbnQsIHsKICAgICAgbWV0aG9kOiAiZXRoX25ld1BlbmRpbmdUcmFuc2FjdGlvbkZpbHRlciIKICAgIH0pOwogICAgY29uc3QgaWQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9uZXdQZW5kaW5nVHJhbnNhY3Rpb25GaWx0ZXIiCiAgICB9KTsKICAgIHJldHVybiB7IGlkLCByZXF1ZXN0OiBnZXRSZXF1ZXN0KGlkKSwgdHlwZTogInRyYW5zYWN0aW9uIiB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRCbG9iQmFzZUZlZS5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldEJsb2JCYXNlRmVlKGNsaWVudCkgewogICAgY29uc3QgYmFzZUZlZSA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2Jsb2JCYXNlRmVlIgogICAgfSk7CiAgICByZXR1cm4gQmlnSW50KGJhc2VGZWUpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRCbG9ja1RyYW5zYWN0aW9uQ291bnQuanMKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50KGNsaWVudCwgeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyLCBibG9ja1RhZyA9ICJsYXRlc3QiIH0gPSB7fSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciAhPT0gdm9pZCAwID8gbnVtYmVyVG9IZXgoYmxvY2tOdW1iZXIpIDogdm9pZCAwOwogICAgbGV0IGNvdW50OwogICAgaWYgKGJsb2NrSGFzaCkgewogICAgICBjb3VudCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50QnlIYXNoIiwKICAgICAgICBwYXJhbXM6IFtibG9ja0hhc2hdCiAgICAgIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgfSBlbHNlIHsKICAgICAgY291bnQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXRoX2dldEJsb2NrVHJhbnNhY3Rpb25Db3VudEJ5TnVtYmVyIiwKICAgICAgICBwYXJhbXM6IFtibG9ja051bWJlckhleCB8fCBibG9ja1RhZ10KICAgICAgfSwgeyBkZWR1cGU6IEJvb2xlYW4oYmxvY2tOdW1iZXJIZXgpIH0pOwogICAgfQogICAgcmV0dXJuIGhleFRvTnVtYmVyKGNvdW50KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0Q29kZS5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRDb2RlKGNsaWVudCwgeyBhZGRyZXNzLCBibG9ja051bWJlciwgYmxvY2tUYWcgPSAibGF0ZXN0IiB9KSB7CiAgICBjb25zdCBibG9ja051bWJlckhleCA9IGJsb2NrTnVtYmVyICE9PSB2b2lkIDAgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICBjb25zdCBoZXggPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRDb2RlIiwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWddCiAgICB9LCB7IGRlZHVwZTogQm9vbGVhbihibG9ja051bWJlckhleCkgfSk7CiAgICBpZiAoaGV4ID09PSAiMHgiKQogICAgICByZXR1cm4gdm9pZCAwOwogICAgcmV0dXJuIGhleDsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0RmVlSGlzdG9yeS5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2ZlZUhpc3RvcnkuanMKICBmdW5jdGlvbiBmb3JtYXRGZWVIaXN0b3J5KGZlZUhpc3RvcnkpIHsKICAgIHJldHVybiB7CiAgICAgIGJhc2VGZWVQZXJHYXM6IGZlZUhpc3RvcnkuYmFzZUZlZVBlckdhcy5tYXAoKHZhbHVlKSA9PiBCaWdJbnQodmFsdWUpKSwKICAgICAgZ2FzVXNlZFJhdGlvOiBmZWVIaXN0b3J5Lmdhc1VzZWRSYXRpbywKICAgICAgb2xkZXN0QmxvY2s6IEJpZ0ludChmZWVIaXN0b3J5Lm9sZGVzdEJsb2NrKSwKICAgICAgcmV3YXJkOiBmZWVIaXN0b3J5LnJld2FyZD8ubWFwKChyZXdhcmQpID0+IHJld2FyZC5tYXAoKHZhbHVlKSA9PiBCaWdJbnQodmFsdWUpKSkKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEZlZUhpc3RvcnkuanMKICBhc3luYyBmdW5jdGlvbiBnZXRGZWVIaXN0b3J5KGNsaWVudCwgeyBibG9ja0NvdW50LCBibG9ja051bWJlciwgYmxvY2tUYWcgPSAibGF0ZXN0IiwgcmV3YXJkUGVyY2VudGlsZXMgfSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgIGNvbnN0IGZlZUhpc3RvcnkgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9mZWVIaXN0b3J5IiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgbnVtYmVyVG9IZXgoYmxvY2tDb3VudCksCiAgICAgICAgYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWcsCiAgICAgICAgcmV3YXJkUGVyY2VudGlsZXMKICAgICAgXQogICAgfSwgeyBkZWR1cGU6IEJvb2xlYW4oYmxvY2tOdW1iZXJIZXgpIH0pOwogICAgcmV0dXJuIGZvcm1hdEZlZUhpc3RvcnkoZmVlSGlzdG9yeSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEZpbHRlckxvZ3MuanMKICBhc3luYyBmdW5jdGlvbiBnZXRGaWx0ZXJMb2dzKF9jbGllbnQsIHsgZmlsdGVyIH0pIHsKICAgIGNvbnN0IHN0cmljdCA9IGZpbHRlci5zdHJpY3QgPz8gZmFsc2U7CiAgICBjb25zdCBsb2dzID0gYXdhaXQgZmlsdGVyLnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfZ2V0RmlsdGVyTG9ncyIsCiAgICAgIHBhcmFtczogW2ZpbHRlci5pZF0KICAgIH0pOwogICAgY29uc3QgZm9ybWF0dGVkTG9ncyA9IGxvZ3MubWFwKChsb2cpID0+IGZvcm1hdExvZyhsb2cpKTsKICAgIGlmICghZmlsdGVyLmFiaSkKICAgICAgcmV0dXJuIGZvcm1hdHRlZExvZ3M7CiAgICByZXR1cm4gcGFyc2VFdmVudExvZ3MoewogICAgICBhYmk6IGZpbHRlci5hYmksCiAgICAgIGxvZ3M6IGZvcm1hdHRlZExvZ3MsCiAgICAgIHN0cmljdAogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldFByb29mLmpzCiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2NoYWluL2RlZmluZUNoYWluLmpzCiAgZnVuY3Rpb24gZGVmaW5lQ2hhaW4oY2hhaW4pIHsKICAgIHJldHVybiB7CiAgICAgIGZvcm1hdHRlcnM6IHZvaWQgMCwKICAgICAgZmVlczogdm9pZCAwLAogICAgICBzZXJpYWxpemVyczogdm9pZCAwLAogICAgICAuLi5jaGFpbgogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY2hhaW4vZXh0cmFjdENoYWluLmpzCiAgZnVuY3Rpb24gZXh0cmFjdENoYWluKHsgY2hhaW5zLCBpZCB9KSB7CiAgICByZXR1cm4gY2hhaW5zLmZpbmQoKGNoYWluKSA9PiBjaGFpbi5pZCA9PT0gaWQpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9yZWdleC5qcwogIHZhciBhcnJheVJlZ2V4ID0gL14oLiopXFsoWzAtOV0qKVxdJC87CiAgdmFyIGJ5dGVzUmVnZXgyID0gL15ieXRlcyhbMS05XXwxWzAtOV18MlswLTldfDNbMC0yXSk/JC87CiAgdmFyIGludGVnZXJSZWdleDIgPSAvXih1P2ludCkoOHwxNnwyNHwzMnw0MHw0OHw1Nnw2NHw3Mnw4MHw4OHw5NnwxMDR8MTEyfDEyMHwxMjh8MTM2fDE0NHwxNTJ8MTYwfDE2OHwxNzZ8MTg0fDE5MnwyMDB8MjA4fDIxNnwyMjR8MjMyfDI0MHwyNDh8MjU2KT8kLzsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ycGMvd2ViU29ja2V0LmpzCiAgaW5pdF9yZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcnBjL3NvY2tldC5qcwogIGluaXRfcmVxdWVzdCgpOwogIGluaXRfY3JlYXRlQmF0Y2hTY2hlZHVsZXIoKTsKICB2YXIgc29ja2V0Q2xpZW50Q2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldFNvY2tldFJwY0NsaWVudChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGdldFNvY2tldDogZ2V0U29ja2V0Miwga2VlcEFsaXZlID0gdHJ1ZSwga2V5ID0gInNvY2tldCIsIHJlY29ubmVjdCA9IHRydWUsIHVybCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHsgaW50ZXJ2YWw6IGtlZXBBbGl2ZUludGVydmFsID0gM2U0IH0gPSB0eXBlb2Yga2VlcEFsaXZlID09PSAib2JqZWN0IiA/IGtlZXBBbGl2ZSA6IHt9OwogICAgY29uc3QgeyBhdHRlbXB0cyA9IDUsIGRlbGF5ID0gMmUzIH0gPSB0eXBlb2YgcmVjb25uZWN0ID09PSAib2JqZWN0IiA/IHJlY29ubmVjdCA6IHt9OwogICAgbGV0IHNvY2tldENsaWVudCA9IHNvY2tldENsaWVudENhY2hlLmdldChgJHtrZXl9OiR7dXJsfWApOwogICAgaWYgKHNvY2tldENsaWVudCkKICAgICAgcmV0dXJuIHNvY2tldENsaWVudDsKICAgIGxldCByZWNvbm5lY3RDb3VudCA9IDA7CiAgICBjb25zdCB7IHNjaGVkdWxlIH0gPSBjcmVhdGVCYXRjaFNjaGVkdWxlcih7CiAgICAgIGlkOiBgJHtrZXl9OiR7dXJsfWAsCiAgICAgIGZuOiBhc3luYyAoKSA9PiB7CiAgICAgICAgY29uc3QgcmVxdWVzdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIGxldCBlcnJvcjsKICAgICAgICBsZXQgc29ja2V0OwogICAgICAgIGxldCBrZWVwQWxpdmVUaW1lcjsKICAgICAgICBhc3luYyBmdW5jdGlvbiBzZXR1cCgpIHsKICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFNvY2tldDIoewogICAgICAgICAgICBvbkNsb3NlKCkgewogICAgICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cy52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIHJlcXVlc3Qub25FcnJvcj8uKG5ldyBTb2NrZXRDbG9zZWRFcnJvcih7IHVybCB9KSk7CiAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5vbkVycm9yPy4obmV3IFNvY2tldENsb3NlZEVycm9yKHsgdXJsIH0pKTsKICAgICAgICAgICAgICByZXF1ZXN0cy5jbGVhcigpOwogICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMuY2xlYXIoKTsKICAgICAgICAgICAgICBpZiAocmVjb25uZWN0ICYmIHJlY29ubmVjdENvdW50IDwgYXR0ZW1wdHMpCiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgICAgcmVjb25uZWN0Q291bnQrKzsKICAgICAgICAgICAgICAgICAgYXdhaXQgc2V0dXAoKS5jYXRjaChjb25zb2xlLmVycm9yKTsKICAgICAgICAgICAgICAgIH0sIGRlbGF5KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25FcnJvcihlcnJvcl8pIHsKICAgICAgICAgICAgICBlcnJvciA9IGVycm9yXzsKICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMudmFsdWVzKCkpCiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9uRXJyb3I/LihlcnJvcik7CiAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5vbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICAgIHJlcXVlc3RzLmNsZWFyKCk7CiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5jbGVhcigpOwogICAgICAgICAgICAgIGlmIChyZWNvbm5lY3QgJiYgcmVjb25uZWN0Q291bnQgPCBhdHRlbXB0cykKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgICByZWNvbm5lY3RDb3VudCsrOwogICAgICAgICAgICAgICAgICBhd2FpdCBzZXR1cCgpLmNhdGNoKGNvbnNvbGUuZXJyb3IpOwogICAgICAgICAgICAgICAgfSwgZGVsYXkpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbk9wZW4oKSB7CiAgICAgICAgICAgICAgZXJyb3IgPSB2b2lkIDA7CiAgICAgICAgICAgICAgcmVjb25uZWN0Q291bnQgPSAwOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvblJlc3BvbnNlKGRhdGEpIHsKICAgICAgICAgICAgICBjb25zdCBpc1N1YnNjcmlwdGlvbiA9IGRhdGEubWV0aG9kID09PSAiZXRoX3N1YnNjcmlwdGlvbiI7CiAgICAgICAgICAgICAgY29uc3QgaWQgPSBpc1N1YnNjcmlwdGlvbiA/IGRhdGEucGFyYW1zLnN1YnNjcmlwdGlvbiA6IGRhdGEuaWQ7CiAgICAgICAgICAgICAgY29uc3QgY2FjaGUgPSBpc1N1YnNjcmlwdGlvbiA/IHN1YnNjcmlwdGlvbnMgOiByZXF1ZXN0czsKICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGNhY2hlLmdldChpZCk7CiAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKQogICAgICAgICAgICAgICAgY2FsbGJhY2sub25SZXNwb25zZShkYXRhKTsKICAgICAgICAgICAgICBpZiAoIWlzU3Vic2NyaXB0aW9uKQogICAgICAgICAgICAgICAgY2FjaGUuZGVsZXRlKGlkKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBzb2NrZXQgPSByZXN1bHQ7CiAgICAgICAgICBpZiAoa2VlcEFsaXZlKSB7CiAgICAgICAgICAgIGlmIChrZWVwQWxpdmVUaW1lcikKICAgICAgICAgICAgICBjbGVhckludGVydmFsKGtlZXBBbGl2ZVRpbWVyKTsKICAgICAgICAgICAga2VlcEFsaXZlVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiBzb2NrZXQucGluZz8uKCksIGtlZXBBbGl2ZUludGVydmFsKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHNldHVwKCk7CiAgICAgICAgZXJyb3IgPSB2b2lkIDA7CiAgICAgICAgc29ja2V0Q2xpZW50ID0gewogICAgICAgICAgY2xvc2UoKSB7CiAgICAgICAgICAgIGtlZXBBbGl2ZVRpbWVyICYmIGNsZWFySW50ZXJ2YWwoa2VlcEFsaXZlVGltZXIpOwogICAgICAgICAgICBzb2NrZXQuY2xvc2UoKTsKICAgICAgICAgICAgc29ja2V0Q2xpZW50Q2FjaGUuZGVsZXRlKGAke2tleX06JHt1cmx9YCk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0IHNvY2tldCgpIHsKICAgICAgICAgICAgcmV0dXJuIHNvY2tldDsKICAgICAgICAgIH0sCiAgICAgICAgICByZXF1ZXN0KHsgYm9keSwgb25FcnJvciwgb25SZXNwb25zZSB9KSB7CiAgICAgICAgICAgIGlmIChlcnJvciAmJiBvbkVycm9yKQogICAgICAgICAgICAgIG9uRXJyb3IoZXJyb3IpOwogICAgICAgICAgICBjb25zdCBpZCA9IGJvZHkuaWQgPz8gaWRDYWNoZS50YWtlKCk7CiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gKHJlc3BvbnNlKSA9PiB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZS5pZCA9PT0gIm51bWJlciIgJiYgaWQgIT09IHJlc3BvbnNlLmlkKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIGlmIChib2R5Lm1ldGhvZCA9PT0gImV0aF9zdWJzY3JpYmUiICYmIHR5cGVvZiByZXNwb25zZS5yZXN1bHQgPT09ICJzdHJpbmciKQogICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5zZXQocmVzcG9uc2UucmVzdWx0LCB7CiAgICAgICAgICAgICAgICAgIG9uUmVzcG9uc2U6IGNhbGxiYWNrLAogICAgICAgICAgICAgICAgICBvbkVycm9yCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBpZiAoYm9keS5tZXRob2QgPT09ICJldGhfdW5zdWJzY3JpYmUiKQogICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5kZWxldGUoYm9keS5wYXJhbXM/LlswXSk7CiAgICAgICAgICAgICAgb25SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHJlcXVlc3RzLnNldChpZCwgeyBvblJlc3BvbnNlOiBjYWxsYmFjaywgb25FcnJvciB9KTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBzb2NrZXQucmVxdWVzdCh7CiAgICAgICAgICAgICAgICBib2R5OiB7CiAgICAgICAgICAgICAgICAgIGpzb25ycGM6ICIyLjAiLAogICAgICAgICAgICAgICAgICBpZCwKICAgICAgICAgICAgICAgICAgLi4uYm9keQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGNhdGNoIChlcnJvcjIpIHsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHJlcXVlc3RBc3luYyh7IGJvZHksIHRpbWVvdXQgPSAxZTQgfSkgewogICAgICAgICAgICByZXR1cm4gd2l0aFRpbWVvdXQoKCkgPT4gbmV3IFByb21pc2UoKG9uUmVzcG9uc2UsIG9uRXJyb3IpID0+IHRoaXMucmVxdWVzdCh7CiAgICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgICBvbkVycm9yLAogICAgICAgICAgICAgIG9uUmVzcG9uc2UKICAgICAgICAgICAgfSkpLCB7CiAgICAgICAgICAgICAgZXJyb3JJbnN0YW5jZTogbmV3IFRpbWVvdXRFcnJvcih7IGJvZHksIHVybCB9KSwKICAgICAgICAgICAgICB0aW1lb3V0CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHJlcXVlc3RzLAogICAgICAgICAgc3Vic2NyaXB0aW9ucywKICAgICAgICAgIHVybAogICAgICAgIH07CiAgICAgICAgc29ja2V0Q2xpZW50Q2FjaGUuc2V0KGAke2tleX06JHt1cmx9YCwgc29ja2V0Q2xpZW50KTsKICAgICAgICByZXR1cm4gW3NvY2tldENsaWVudF07CiAgICAgIH0KICAgIH0pOwogICAgY29uc3QgW18sIFtzb2NrZXRDbGllbnRfXV0gPSBhd2FpdCBzY2hlZHVsZSgpOwogICAgcmV0dXJuIHNvY2tldENsaWVudF87CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3JwYy93ZWJTb2NrZXQuanMKICBhc3luYyBmdW5jdGlvbiBnZXRXZWJTb2NrZXRScGNDbGllbnQodXJsLCBvcHRpb25zID0ge30pIHsKICAgIGNvbnN0IHsga2VlcEFsaXZlLCByZWNvbm5lY3QgfSA9IG9wdGlvbnM7CiAgICByZXR1cm4gZ2V0U29ja2V0UnBjQ2xpZW50KHsKICAgICAgYXN5bmMgZ2V0U29ja2V0KHsgb25DbG9zZSwgb25FcnJvciwgb25PcGVuLCBvblJlc3BvbnNlIH0pIHsKICAgICAgICBjb25zdCBXZWJTb2NrZXQzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiAoaW5pdF9uYXRpdmUoKSwgbmF0aXZlX2V4cG9ydHMpKS50aGVuKChtb2R1bGUpID0+IG1vZHVsZS5XZWJTb2NrZXQpOwogICAgICAgIGNvbnN0IHNvY2tldCA9IG5ldyBXZWJTb2NrZXQzKHVybCk7CiAgICAgICAgZnVuY3Rpb24gb25DbG9zZV8oKSB7CiAgICAgICAgICBvbkNsb3NlKCk7CiAgICAgICAgICBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCBvbkNsb3NlXyk7CiAgICAgICAgICBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG9uTWVzc2FnZSk7CiAgICAgICAgICBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBvbkVycm9yKTsKICAgICAgICAgIHNvY2tldC5yZW1vdmVFdmVudExpc3RlbmVyKCJvcGVuIiwgb25PcGVuKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gb25NZXNzYWdlKHsgZGF0YSB9KSB7CiAgICAgICAgICBvblJlc3BvbnNlKEpTT04ucGFyc2UoZGF0YSkpOwogICAgICAgIH0KICAgICAgICBzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCBvbkNsb3NlXyk7CiAgICAgICAgc29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBvbk1lc3NhZ2UpOwogICAgICAgIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsIG9uRXJyb3IpOwogICAgICAgIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKCJvcGVuIiwgb25PcGVuKTsKICAgICAgICBpZiAoc29ja2V0LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldDMuQ09OTkVDVElORykgewogICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgICAgICBpZiAoIXNvY2tldCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHNvY2tldC5vbm9wZW4gPSByZXNvbHZlOwogICAgICAgICAgICBzb2NrZXQub25lcnJvciA9IHJlamVjdDsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb25zdCB7IGNsb3NlOiBjbG9zZV8gfSA9IHNvY2tldDsKICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzb2NrZXQsIHsKICAgICAgICAgIGNsb3NlKCkgewogICAgICAgICAgICBjbG9zZV8uYmluZChzb2NrZXQpKCk7CiAgICAgICAgICAgIG9uQ2xvc2UoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBwaW5nKCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGlmIChzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NFRCB8fCBzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NJTkcpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0UmVxdWVzdEVycm9yKHsKICAgICAgICAgICAgICAgICAgdXJsOiBzb2NrZXQudXJsLAogICAgICAgICAgICAgICAgICBjYXVzZTogbmV3IFNvY2tldENsb3NlZEVycm9yKHsgdXJsOiBzb2NrZXQudXJsIH0pCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBjb25zdCBib2R5ID0gewogICAgICAgICAgICAgICAganNvbnJwYzogIjIuMCIsCiAgICAgICAgICAgICAgICBtZXRob2Q6ICJuZXRfdmVyc2lvbiIsCiAgICAgICAgICAgICAgICBwYXJhbXM6IFtdCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBzb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeShib2R5KSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgb25FcnJvcihlcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICByZXF1ZXN0KHsgYm9keSB9KSB7CiAgICAgICAgICAgIGlmIChzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NFRCB8fCBzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NJTkcpCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldFJlcXVlc3RFcnJvcih7CiAgICAgICAgICAgICAgICBib2R5LAogICAgICAgICAgICAgICAgdXJsOiBzb2NrZXQudXJsLAogICAgICAgICAgICAgICAgY2F1c2U6IG5ldyBTb2NrZXRDbG9zZWRFcnJvcih7IHVybDogc29ja2V0LnVybCB9KQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoYm9keSkpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9LAogICAgICBrZWVwQWxpdmUsCiAgICAgIHJlY29ubmVjdCwKICAgICAgdXJsCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcnBjL2NvbXBhdC5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldFNvY2tldCh1cmwpIHsKICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldFdlYlNvY2tldFJwY0NsaWVudCh1cmwpOwogICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oY2xpZW50LnNvY2tldCwgewogICAgICByZXF1ZXN0czogY2xpZW50LnJlcXVlc3RzLAogICAgICBzdWJzY3JpcHRpb25zOiBjbGllbnQuc3Vic2NyaXB0aW9ucwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3R5cGVkRGF0YS5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL2hhc2hUeXBlZERhdGEuanMKICBpbml0X2VuY29kZUFiaVBhcmFtZXRlcnMoKTsKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X2tlY2NhazI1NigpOwogIGZ1bmN0aW9uIGhhc2hUeXBlZERhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBkb21haW4gPSB7fSwgbWVzc2FnZSwgcHJpbWFyeVR5cGUgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCB0eXBlcyA9IHsKICAgICAgRUlQNzEyRG9tYWluOiBnZXRUeXBlc0ZvckVJUDcxMkRvbWFpbih7IGRvbWFpbiB9KSwKICAgICAgLi4ucGFyYW1ldGVycy50eXBlcwogICAgfTsKICAgIHZhbGlkYXRlVHlwZWREYXRhKHsKICAgICAgZG9tYWluLAogICAgICBtZXNzYWdlLAogICAgICBwcmltYXJ5VHlwZSwKICAgICAgdHlwZXMKICAgIH0pOwogICAgY29uc3QgcGFydHMgPSBbIjB4MTkwMSJdOwogICAgaWYgKGRvbWFpbikKICAgICAgcGFydHMucHVzaChoYXNoRG9tYWluKHsKICAgICAgICBkb21haW4sCiAgICAgICAgdHlwZXMKICAgICAgfSkpOwogICAgaWYgKHByaW1hcnlUeXBlICE9PSAiRUlQNzEyRG9tYWluIikKICAgICAgcGFydHMucHVzaChoYXNoU3RydWN0KHsKICAgICAgICBkYXRhOiBtZXNzYWdlLAogICAgICAgIHByaW1hcnlUeXBlLAogICAgICAgIHR5cGVzCiAgICAgIH0pKTsKICAgIHJldHVybiBrZWNjYWsyNTYoY29uY2F0KHBhcnRzKSk7CiAgfQogIGZ1bmN0aW9uIGhhc2hEb21haW4oeyBkb21haW4sIHR5cGVzIH0pIHsKICAgIHJldHVybiBoYXNoU3RydWN0KHsKICAgICAgZGF0YTogZG9tYWluLAogICAgICBwcmltYXJ5VHlwZTogIkVJUDcxMkRvbWFpbiIsCiAgICAgIHR5cGVzCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gaGFzaFN0cnVjdCh7IGRhdGEsIHByaW1hcnlUeXBlLCB0eXBlcyB9KSB7CiAgICBjb25zdCBlbmNvZGVkID0gZW5jb2RlRGF0YSh7CiAgICAgIGRhdGEsCiAgICAgIHByaW1hcnlUeXBlLAogICAgICB0eXBlcwogICAgfSk7CiAgICByZXR1cm4ga2VjY2FrMjU2KGVuY29kZWQpOwogIH0KICBmdW5jdGlvbiBlbmNvZGVEYXRhKHsgZGF0YSwgcHJpbWFyeVR5cGUsIHR5cGVzIH0pIHsKICAgIGNvbnN0IGVuY29kZWRUeXBlcyA9IFt7IHR5cGU6ICJieXRlczMyIiB9XTsKICAgIGNvbnN0IGVuY29kZWRWYWx1ZXMgPSBbaGFzaFR5cGUoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSldOwogICAgZm9yIChjb25zdCBmaWVsZCBvZiB0eXBlc1twcmltYXJ5VHlwZV0pIHsKICAgICAgY29uc3QgW3R5cGUsIHZhbHVlXSA9IGVuY29kZUZpZWxkKHsKICAgICAgICB0eXBlcywKICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLAogICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsCiAgICAgICAgdmFsdWU6IGRhdGFbZmllbGQubmFtZV0KICAgICAgfSk7CiAgICAgIGVuY29kZWRUeXBlcy5wdXNoKHR5cGUpOwogICAgICBlbmNvZGVkVmFsdWVzLnB1c2godmFsdWUpOwogICAgfQogICAgcmV0dXJuIGVuY29kZUFiaVBhcmFtZXRlcnMoZW5jb2RlZFR5cGVzLCBlbmNvZGVkVmFsdWVzKTsKICB9CiAgZnVuY3Rpb24gaGFzaFR5cGUoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSkgewogICAgY29uc3QgZW5jb2RlZEhhc2hUeXBlID0gdG9IZXgoZW5jb2RlVHlwZSh7IHByaW1hcnlUeXBlLCB0eXBlcyB9KSk7CiAgICByZXR1cm4ga2VjY2FrMjU2KGVuY29kZWRIYXNoVHlwZSk7CiAgfQogIGZ1bmN0aW9uIGVuY29kZVR5cGUoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSkgewogICAgbGV0IHJlc3VsdCA9ICIiOwogICAgY29uc3QgdW5zb3J0ZWREZXBzID0gZmluZFR5cGVEZXBlbmRlbmNpZXMoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSk7CiAgICB1bnNvcnRlZERlcHMuZGVsZXRlKHByaW1hcnlUeXBlKTsKICAgIGNvbnN0IGRlcHMgPSBbcHJpbWFyeVR5cGUsIC4uLkFycmF5LmZyb20odW5zb3J0ZWREZXBzKS5zb3J0KCldOwogICAgZm9yIChjb25zdCB0eXBlIG9mIGRlcHMpIHsKICAgICAgcmVzdWx0ICs9IGAke3R5cGV9KCR7dHlwZXNbdHlwZV0ubWFwKCh7IG5hbWUsIHR5cGU6IHQgfSkgPT4gYCR7dH0gJHtuYW1lfWApLmpvaW4oIiwiKX0pYDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIGZpbmRUeXBlRGVwZW5kZW5jaWVzKHsgcHJpbWFyeVR5cGU6IHByaW1hcnlUeXBlXywgdHlwZXMgfSwgcmVzdWx0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpIHsKICAgIGNvbnN0IG1hdGNoID0gcHJpbWFyeVR5cGVfLm1hdGNoKC9eXHcqL3UpOwogICAgY29uc3QgcHJpbWFyeVR5cGUgPSBtYXRjaD8uWzBdOwogICAgaWYgKHJlc3VsdHMuaGFzKHByaW1hcnlUeXBlKSB8fCB0eXBlc1twcmltYXJ5VHlwZV0gPT09IHZvaWQgMCkgewogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KICAgIHJlc3VsdHMuYWRkKHByaW1hcnlUeXBlKTsKICAgIGZvciAoY29uc3QgZmllbGQgb2YgdHlwZXNbcHJpbWFyeVR5cGVdKSB7CiAgICAgIGZpbmRUeXBlRGVwZW5kZW5jaWVzKHsgcHJpbWFyeVR5cGU6IGZpZWxkLnR5cGUsIHR5cGVzIH0sIHJlc3VsdHMpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQogIGZ1bmN0aW9uIGVuY29kZUZpZWxkKHsgdHlwZXMsIG5hbWUsIHR5cGUsIHZhbHVlIH0pIHsKICAgIGlmICh0eXBlc1t0eXBlXSAhPT0gdm9pZCAwKSB7CiAgICAgIHJldHVybiBbCiAgICAgICAgeyB0eXBlOiAiYnl0ZXMzMiIgfSwKICAgICAgICBrZWNjYWsyNTYoZW5jb2RlRGF0YSh7IGRhdGE6IHZhbHVlLCBwcmltYXJ5VHlwZTogdHlwZSwgdHlwZXMgfSkpCiAgICAgIF07CiAgICB9CiAgICBpZiAodHlwZSA9PT0gImJ5dGVzIikgewogICAgICBjb25zdCBwcmVwZW5kID0gdmFsdWUubGVuZ3RoICUgMiA/ICIwIiA6ICIiOwogICAgICB2YWx1ZSA9IGAweCR7cHJlcGVuZCArIHZhbHVlLnNsaWNlKDIpfWA7CiAgICAgIHJldHVybiBbeyB0eXBlOiAiYnl0ZXMzMiIgfSwga2VjY2FrMjU2KHZhbHVlKV07CiAgICB9CiAgICBpZiAodHlwZSA9PT0gInN0cmluZyIpCiAgICAgIHJldHVybiBbeyB0eXBlOiAiYnl0ZXMzMiIgfSwga2VjY2FrMjU2KHRvSGV4KHZhbHVlKSldOwogICAgaWYgKHR5cGUubGFzdEluZGV4T2YoIl0iKSA9PT0gdHlwZS5sZW5ndGggLSAxKSB7CiAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0eXBlLnNsaWNlKDAsIHR5cGUubGFzdEluZGV4T2YoIlsiKSk7CiAgICAgIGNvbnN0IHR5cGVWYWx1ZVBhaXJzID0gdmFsdWUubWFwKChpdGVtKSA9PiBlbmNvZGVGaWVsZCh7CiAgICAgICAgbmFtZSwKICAgICAgICB0eXBlOiBwYXJzZWRUeXBlLAogICAgICAgIHR5cGVzLAogICAgICAgIHZhbHVlOiBpdGVtCiAgICAgIH0pKTsKICAgICAgcmV0dXJuIFsKICAgICAgICB7IHR5cGU6ICJieXRlczMyIiB9LAogICAgICAgIGtlY2NhazI1NihlbmNvZGVBYmlQYXJhbWV0ZXJzKHR5cGVWYWx1ZVBhaXJzLm1hcCgoW3RdKSA9PiB0KSwgdHlwZVZhbHVlUGFpcnMubWFwKChbLCB2XSkgPT4gdikpKQogICAgICBdOwogICAgfQogICAgcmV0dXJuIFt7IHR5cGUgfSwgdmFsdWVdOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90eXBlZERhdGEuanMKICBpbml0X3N0cmluZ2lmeSgpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZVR5cGVkRGF0YShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGRvbWFpbjogZG9tYWluXywgbWVzc2FnZTogbWVzc2FnZV8sIHByaW1hcnlUeXBlLCB0eXBlcyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IG5vcm1hbGl6ZURhdGEgPSAoc3RydWN0LCBkYXRhXykgPT4gewogICAgICBjb25zdCBkYXRhID0geyAuLi5kYXRhXyB9OwogICAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHN0cnVjdCkgewogICAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSB9ID0gcGFyYW07CiAgICAgICAgaWYgKHR5cGUgPT09ICJhZGRyZXNzIikKICAgICAgICAgIGRhdGFbbmFtZV0gPSBkYXRhW25hbWVdLnRvTG93ZXJDYXNlKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGRhdGE7CiAgICB9OwogICAgY29uc3QgZG9tYWluID0gKCgpID0+IHsKICAgICAgaWYgKCF0eXBlcy5FSVA3MTJEb21haW4pCiAgICAgICAgcmV0dXJuIHt9OwogICAgICBpZiAoIWRvbWFpbl8pCiAgICAgICAgcmV0dXJuIHt9OwogICAgICByZXR1cm4gbm9ybWFsaXplRGF0YSh0eXBlcy5FSVA3MTJEb21haW4sIGRvbWFpbl8pOwogICAgfSkoKTsKICAgIGNvbnN0IG1lc3NhZ2UgPSAoKCkgPT4gewogICAgICBpZiAocHJpbWFyeVR5cGUgPT09ICJFSVA3MTJEb21haW4iKQogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhKHR5cGVzW3ByaW1hcnlUeXBlXSwgbWVzc2FnZV8pOwogICAgfSkoKTsKICAgIHJldHVybiBzdHJpbmdpZnkoeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9KTsKICB9CiAgZnVuY3Rpb24gdmFsaWRhdGVUeXBlZERhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHZhbGlkYXRlRGF0YSA9IChzdHJ1Y3QsIGRhdGEpID0+IHsKICAgICAgZm9yIChjb25zdCBwYXJhbSBvZiBzdHJ1Y3QpIHsKICAgICAgICBjb25zdCB7IG5hbWUsIHR5cGUgfSA9IHBhcmFtOwogICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtuYW1lXTsKICAgICAgICBjb25zdCBpbnRlZ2VyTWF0Y2ggPSB0eXBlLm1hdGNoKGludGVnZXJSZWdleDIpOwogICAgICAgIGlmIChpbnRlZ2VyTWF0Y2ggJiYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIgfHwgdHlwZW9mIHZhbHVlID09PSAiYmlnaW50IikpIHsKICAgICAgICAgIGNvbnN0IFtfdHlwZSwgYmFzZTIsIHNpemVfXSA9IGludGVnZXJNYXRjaDsKICAgICAgICAgIG51bWJlclRvSGV4KHZhbHVlLCB7CiAgICAgICAgICAgIHNpZ25lZDogYmFzZTIgPT09ICJpbnQiLAogICAgICAgICAgICBzaXplOiBOdW1iZXIucGFyc2VJbnQoc2l6ZV8pIC8gOAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlID09PSAiYWRkcmVzcyIgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiAhaXNBZGRyZXNzKHZhbHVlKSkKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogdmFsdWUgfSk7CiAgICAgICAgY29uc3QgYnl0ZXNNYXRjaCA9IHR5cGUubWF0Y2goYnl0ZXNSZWdleDIpOwogICAgICAgIGlmIChieXRlc01hdGNoKSB7CiAgICAgICAgICBjb25zdCBbX3R5cGUsIHNpemVfXSA9IGJ5dGVzTWF0Y2g7CiAgICAgICAgICBpZiAoc2l6ZV8gJiYgc2l6ZSh2YWx1ZSkgIT09IE51bWJlci5wYXJzZUludChzaXplXykpCiAgICAgICAgICAgIHRocm93IG5ldyBCeXRlc1NpemVNaXNtYXRjaEVycm9yKHsKICAgICAgICAgICAgICBleHBlY3RlZFNpemU6IE51bWJlci5wYXJzZUludChzaXplXyksCiAgICAgICAgICAgICAgZ2l2ZW5TaXplOiBzaXplKHZhbHVlKQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY29uc3Qgc3RydWN0MiA9IHR5cGVzW3R5cGVdOwogICAgICAgIGlmIChzdHJ1Y3QyKQogICAgICAgICAgdmFsaWRhdGVEYXRhKHN0cnVjdDIsIHZhbHVlKTsKICAgICAgfQogICAgfTsKICAgIGlmICh0eXBlcy5FSVA3MTJEb21haW4gJiYgZG9tYWluKQogICAgICB2YWxpZGF0ZURhdGEodHlwZXMuRUlQNzEyRG9tYWluLCBkb21haW4pOwogICAgaWYgKHByaW1hcnlUeXBlICE9PSAiRUlQNzEyRG9tYWluIikKICAgICAgdmFsaWRhdGVEYXRhKHR5cGVzW3ByaW1hcnlUeXBlXSwgbWVzc2FnZSk7CiAgfQogIGZ1bmN0aW9uIGdldFR5cGVzRm9yRUlQNzEyRG9tYWluKHsgZG9tYWluIH0pIHsKICAgIHJldHVybiBbCiAgICAgIHR5cGVvZiBkb21haW4/Lm5hbWUgPT09ICJzdHJpbmciICYmIHsgbmFtZTogIm5hbWUiLCB0eXBlOiAic3RyaW5nIiB9LAogICAgICBkb21haW4/LnZlcnNpb24gJiYgeyBuYW1lOiAidmVyc2lvbiIsIHR5cGU6ICJzdHJpbmciIH0sCiAgICAgIHR5cGVvZiBkb21haW4/LmNoYWluSWQgPT09ICJudW1iZXIiICYmIHsKICAgICAgICBuYW1lOiAiY2hhaW5JZCIsCiAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgIH0sCiAgICAgIGRvbWFpbj8udmVyaWZ5aW5nQ29udHJhY3QgJiYgewogICAgICAgIG5hbWU6ICJ2ZXJpZnlpbmdDb250cmFjdCIsCiAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgIH0sCiAgICAgIGRvbWFpbj8uc2FsdCAmJiB7IG5hbWU6ICJzYWx0IiwgdHlwZTogImJ5dGVzMzIiIH0KICAgIF0uZmlsdGVyKEJvb2xlYW4pOwogIH0KICBmdW5jdGlvbiBkb21haW5TZXBhcmF0b3IoeyBkb21haW4gfSkgewogICAgcmV0dXJuIGhhc2hEb21haW4oewogICAgICBkb21haW4sCiAgICAgIHR5cGVzOiB7CiAgICAgICAgRUlQNzEyRG9tYWluOiBnZXRUeXBlc0ZvckVJUDcxMkRvbWFpbih7IGRvbWFpbiB9KQogICAgICB9CiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZUZ1bmN0aW9uRGF0YS5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9zbGljZSgpOwogIGluaXRfdG9GdW5jdGlvblNlbGVjdG9yKCk7CiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9mb3JtYXRBYmlJdGVtMigpOwogIGZ1bmN0aW9uIGRlY29kZUZ1bmN0aW9uRGF0YShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgZGF0YSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNsaWNlKGRhdGEsIDAsIDQpOwogICAgY29uc3QgZGVzY3JpcHRpb24gPSBhYmkyLmZpbmQoKHgpID0+IHgudHlwZSA9PT0gImZ1bmN0aW9uIiAmJiBzaWduYXR1cmUgPT09IHRvRnVuY3Rpb25TZWxlY3Rvcihmb3JtYXRBYmlJdGVtMih4KSkpOwogICAgaWYgKCFkZXNjcmlwdGlvbikKICAgICAgdGhyb3cgbmV3IEFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvcihzaWduYXR1cmUsIHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L2RlY29kZUZ1bmN0aW9uRGF0YSIKICAgICAgfSk7CiAgICByZXR1cm4gewogICAgICBmdW5jdGlvbk5hbWU6IGRlc2NyaXB0aW9uLm5hbWUsCiAgICAgIGFyZ3M6ICJpbnB1dHMiIGluIGRlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uLmlucHV0cyAmJiBkZXNjcmlwdGlvbi5pbnB1dHMubGVuZ3RoID4gMCA/IGRlY29kZUFiaVBhcmFtZXRlcnMoZGVzY3JpcHRpb24uaW5wdXRzLCBzbGljZShkYXRhLCA0KSkgOiB2b2lkIDAKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVFcnJvclJlc3VsdC5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3RvRnVuY3Rpb25TZWxlY3RvcigpOwogIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogIGluaXRfZm9ybWF0QWJpSXRlbTIoKTsKICBpbml0X2dldEFiaUl0ZW0oKTsKICB2YXIgZG9jc1BhdGg2ID0gIi9kb2NzL2NvbnRyYWN0L2VuY29kZUVycm9yUmVzdWx0IjsKICBmdW5jdGlvbiBlbmNvZGVFcnJvclJlc3VsdChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgZXJyb3JOYW1lLCBhcmdzIH0gPSBwYXJhbWV0ZXJzOwogICAgbGV0IGFiaUl0ZW0gPSBhYmkyWzBdOwogICAgaWYgKGVycm9yTmFtZSkgewogICAgICBjb25zdCBpdGVtID0gZ2V0QWJpSXRlbSh7IGFiaTogYWJpMiwgYXJncywgbmFtZTogZXJyb3JOYW1lIH0pOwogICAgICBpZiAoIWl0ZW0pCiAgICAgICAgdGhyb3cgbmV3IEFiaUVycm9yTm90Rm91bmRFcnJvcihlcnJvck5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoNiB9KTsKICAgICAgYWJpSXRlbSA9IGl0ZW07CiAgICB9CiAgICBpZiAoYWJpSXRlbS50eXBlICE9PSAiZXJyb3IiKQogICAgICB0aHJvdyBuZXcgQWJpRXJyb3JOb3RGb3VuZEVycm9yKHZvaWQgMCwgeyBkb2NzUGF0aDogZG9jc1BhdGg2IH0pOwogICAgY29uc3QgZGVmaW5pdGlvbiA9IGZvcm1hdEFiaUl0ZW0yKGFiaUl0ZW0pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdG9GdW5jdGlvblNlbGVjdG9yKGRlZmluaXRpb24pOwogICAgbGV0IGRhdGEgPSAiMHgiOwogICAgaWYgKGFyZ3MgJiYgYXJncy5sZW5ndGggPiAwKSB7CiAgICAgIGlmICghYWJpSXRlbS5pbnB1dHMpCiAgICAgICAgdGhyb3cgbmV3IEFiaUVycm9ySW5wdXRzTm90Rm91bmRFcnJvcihhYmlJdGVtLm5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoNiB9KTsKICAgICAgZGF0YSA9IGVuY29kZUFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMsIGFyZ3MpOwogICAgfQogICAgcmV0dXJuIGNvbmNhdEhleChbc2lnbmF0dXJlLCBkYXRhXSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVGdW5jdGlvblJlc3VsdC5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9lbmNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9nZXRBYmlJdGVtKCk7CiAgdmFyIGRvY3NQYXRoNyA9ICIvZG9jcy9jb250cmFjdC9lbmNvZGVGdW5jdGlvblJlc3VsdCI7CiAgZnVuY3Rpb24gZW5jb2RlRnVuY3Rpb25SZXN1bHQocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGZ1bmN0aW9uTmFtZSwgcmVzdWx0IH0gPSBwYXJhbWV0ZXJzOwogICAgbGV0IGFiaUl0ZW0gPSBhYmkyWzBdOwogICAgaWYgKGZ1bmN0aW9uTmFtZSkgewogICAgICBjb25zdCBpdGVtID0gZ2V0QWJpSXRlbSh7IGFiaTogYWJpMiwgbmFtZTogZnVuY3Rpb25OYW1lIH0pOwogICAgICBpZiAoIWl0ZW0pCiAgICAgICAgdGhyb3cgbmV3IEFiaUZ1bmN0aW9uTm90Rm91bmRFcnJvcihmdW5jdGlvbk5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoNyB9KTsKICAgICAgYWJpSXRlbSA9IGl0ZW07CiAgICB9CiAgICBpZiAoYWJpSXRlbS50eXBlICE9PSAiZnVuY3Rpb24iKQogICAgICB0aHJvdyBuZXcgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yKHZvaWQgMCwgeyBkb2NzUGF0aDogZG9jc1BhdGg3IH0pOwogICAgaWYgKCFhYmlJdGVtLm91dHB1dHMpCiAgICAgIHRocm93IG5ldyBBYmlGdW5jdGlvbk91dHB1dHNOb3RGb3VuZEVycm9yKGFiaUl0ZW0ubmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg3IH0pOwogICAgbGV0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IFtyZXN1bHRdOwogICAgaWYgKGFiaUl0ZW0ub3V0cHV0cy5sZW5ndGggPT09IDAgJiYgIXZhbHVlc1swXSkKICAgICAgdmFsdWVzID0gW107CiAgICByZXR1cm4gZW5jb2RlQWJpUGFyYW1ldGVycyhhYmlJdGVtLm91dHB1dHMsIHZhbHVlcyk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVQYWNrZWQuanMKICBpbml0X2FiaSgpOwogIGluaXRfYWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzKCk7CiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3BhZCgpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBlbmNvZGVQYWNrZWQodHlwZXMsIHZhbHVlcykgewogICAgaWYgKHR5cGVzLmxlbmd0aCAhPT0gdmFsdWVzLmxlbmd0aCkKICAgICAgdGhyb3cgbmV3IEFiaUVuY29kaW5nTGVuZ3RoTWlzbWF0Y2hFcnJvcih7CiAgICAgICAgZXhwZWN0ZWRMZW5ndGg6IHR5cGVzLmxlbmd0aCwKICAgICAgICBnaXZlbkxlbmd0aDogdmFsdWVzLmxlbmd0aAogICAgICB9KTsKICAgIGNvbnN0IGRhdGEgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgdHlwZSA9IHR5cGVzW2ldOwogICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTsKICAgICAgZGF0YS5wdXNoKGVuY29kZSh0eXBlLCB2YWx1ZSkpOwogICAgfQogICAgcmV0dXJuIGNvbmNhdEhleChkYXRhKTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlKHR5cGUsIHZhbHVlLCBpc0FycmF5ID0gZmFsc2UpIHsKICAgIGlmICh0eXBlID09PSAiYWRkcmVzcyIpIHsKICAgICAgY29uc3QgYWRkcmVzcyA9IHZhbHVlOwogICAgICBpZiAoIWlzQWRkcmVzcyhhZGRyZXNzKSkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3MgfSk7CiAgICAgIHJldHVybiBwYWQoYWRkcmVzcy50b0xvd2VyQ2FzZSgpLCB7CiAgICAgICAgc2l6ZTogaXNBcnJheSA/IDMyIDogbnVsbAogICAgICB9KTsKICAgIH0KICAgIGlmICh0eXBlID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIHN0cmluZ1RvSGV4KHZhbHVlKTsKICAgIGlmICh0eXBlID09PSAiYnl0ZXMiKQogICAgICByZXR1cm4gdmFsdWU7CiAgICBpZiAodHlwZSA9PT0gImJvb2wiKQogICAgICByZXR1cm4gcGFkKGJvb2xUb0hleCh2YWx1ZSksIHsgc2l6ZTogaXNBcnJheSA/IDMyIDogMSB9KTsKICAgIGNvbnN0IGludE1hdGNoID0gdHlwZS5tYXRjaChpbnRlZ2VyUmVnZXgyKTsKICAgIGlmIChpbnRNYXRjaCkgewogICAgICBjb25zdCBbX3R5cGUsIGJhc2VUeXBlLCBiaXRzID0gIjI1NiJdID0gaW50TWF0Y2g7CiAgICAgIGNvbnN0IHNpemUzID0gTnVtYmVyLnBhcnNlSW50KGJpdHMpIC8gODsKICAgICAgcmV0dXJuIG51bWJlclRvSGV4KHZhbHVlLCB7CiAgICAgICAgc2l6ZTogaXNBcnJheSA/IDMyIDogc2l6ZTMsCiAgICAgICAgc2lnbmVkOiBiYXNlVHlwZSA9PT0gImludCIKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBieXRlc01hdGNoID0gdHlwZS5tYXRjaChieXRlc1JlZ2V4Mik7CiAgICBpZiAoYnl0ZXNNYXRjaCkgewogICAgICBjb25zdCBbX3R5cGUsIHNpemUzXSA9IGJ5dGVzTWF0Y2g7CiAgICAgIGlmIChOdW1iZXIucGFyc2VJbnQoc2l6ZTMpICE9PSAodmFsdWUubGVuZ3RoIC0gMikgLyAyKQogICAgICAgIHRocm93IG5ldyBCeXRlc1NpemVNaXNtYXRjaEVycm9yKHsKICAgICAgICAgIGV4cGVjdGVkU2l6ZTogTnVtYmVyLnBhcnNlSW50KHNpemUzKSwKICAgICAgICAgIGdpdmVuU2l6ZTogKHZhbHVlLmxlbmd0aCAtIDIpIC8gMgogICAgICAgIH0pOwogICAgICByZXR1cm4gcGFkKHZhbHVlLCB7IGRpcjogInJpZ2h0Iiwgc2l6ZTogaXNBcnJheSA/IDMyIDogbnVsbCB9KTsKICAgIH0KICAgIGNvbnN0IGFycmF5TWF0Y2ggPSB0eXBlLm1hdGNoKGFycmF5UmVnZXgpOwogICAgaWYgKGFycmF5TWF0Y2ggJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgY29uc3QgW190eXBlLCBjaGlsZFR5cGVdID0gYXJyYXlNYXRjaDsKICAgICAgY29uc3QgZGF0YSA9IFtdOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgZGF0YS5wdXNoKGVuY29kZShjaGlsZFR5cGUsIHZhbHVlW2ldLCB0cnVlKSk7CiAgICAgIH0KICAgICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybiAiMHgiOwogICAgICByZXR1cm4gY29uY2F0SGV4KGRhdGEpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkUGFja2VkQWJpVHlwZSh0eXBlKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9nZXRDb250cmFjdEFkZHJlc3MuanMKICBpbml0X2NvbmNhdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvaXNCeXRlcy5qcwogIGZ1bmN0aW9uIGlzQnl0ZXMzKHZhbHVlKSB7CiAgICBpZiAoIXZhbHVlKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAib2JqZWN0IikKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKCEoIkJZVEVTX1BFUl9FTEVNRU5UIiBpbiB2YWx1ZSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB2YWx1ZS5CWVRFU19QRVJfRUxFTUVOVCA9PT0gMSAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lID09PSAiVWludDhBcnJheSI7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FkZHJlc3MvZ2V0Q29udHJhY3RBZGRyZXNzLmpzCiAgaW5pdF9wYWQoKTsKICBpbml0X3NsaWNlKCk7CiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF9rZWNjYWsyNTYoKTsKICBpbml0X2dldEFkZHJlc3MoKTsKICBmdW5jdGlvbiBnZXRDb250cmFjdEFkZHJlc3MyKG9wdHMpIHsKICAgIGlmIChvcHRzLm9wY29kZSA9PT0gIkNSRUFURTIiKQogICAgICByZXR1cm4gZ2V0Q3JlYXRlMkFkZHJlc3Mob3B0cyk7CiAgICByZXR1cm4gZ2V0Q3JlYXRlQWRkcmVzcyhvcHRzKTsKICB9CiAgZnVuY3Rpb24gZ2V0Q3JlYXRlQWRkcmVzcyhvcHRzKSB7CiAgICBjb25zdCBmcm9tID0gdG9CeXRlcyhnZXRBZGRyZXNzKG9wdHMuZnJvbSkpOwogICAgbGV0IG5vbmNlID0gdG9CeXRlcyhvcHRzLm5vbmNlKTsKICAgIGlmIChub25jZVswXSA9PT0gMCkKICAgICAgbm9uY2UgPSBuZXcgVWludDhBcnJheShbXSk7CiAgICByZXR1cm4gZ2V0QWRkcmVzcyhgMHgke2tlY2NhazI1Nih0b1JscChbZnJvbSwgbm9uY2VdLCAiYnl0ZXMiKSkuc2xpY2UoMjYpfWApOwogIH0KICBmdW5jdGlvbiBnZXRDcmVhdGUyQWRkcmVzcyhvcHRzKSB7CiAgICBjb25zdCBmcm9tID0gdG9CeXRlcyhnZXRBZGRyZXNzKG9wdHMuZnJvbSkpOwogICAgY29uc3Qgc2FsdCA9IHBhZChpc0J5dGVzMyhvcHRzLnNhbHQpID8gb3B0cy5zYWx0IDogdG9CeXRlcyhvcHRzLnNhbHQpLCB7CiAgICAgIHNpemU6IDMyCiAgICB9KTsKICAgIGNvbnN0IGJ5dGVjb2RlSGFzaCA9ICgoKSA9PiB7CiAgICAgIGlmICgiYnl0ZWNvZGVIYXNoIiBpbiBvcHRzKSB7CiAgICAgICAgaWYgKGlzQnl0ZXMzKG9wdHMuYnl0ZWNvZGVIYXNoKSkKICAgICAgICAgIHJldHVybiBvcHRzLmJ5dGVjb2RlSGFzaDsKICAgICAgICByZXR1cm4gdG9CeXRlcyhvcHRzLmJ5dGVjb2RlSGFzaCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGtlY2NhazI1NihvcHRzLmJ5dGVjb2RlLCAiYnl0ZXMiKTsKICAgIH0pKCk7CiAgICByZXR1cm4gZ2V0QWRkcmVzcyhzbGljZShrZWNjYWsyNTYoY29uY2F0KFt0b0J5dGVzKCIweGZmIiksIGZyb20sIHNhbHQsIGJ5dGVjb2RlSGFzaF0pKSwgMTIpKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZm9ybWF0dGVycy90cmFuc2FjdGlvblJlY2VpcHQuanMKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X2Zvcm1hdHRlcigpOwogIHZhciByZWNlaXB0U3RhdHVzZXMgPSB7CiAgICAiMHgwIjogInJldmVydGVkIiwKICAgICIweDEiOiAic3VjY2VzcyIKICB9OwogIGZ1bmN0aW9uIGZvcm1hdFRyYW5zYWN0aW9uUmVjZWlwdCh0cmFuc2FjdGlvblJlY2VpcHQpIHsKICAgIGNvbnN0IHJlY2VpcHQgPSB7CiAgICAgIC4uLnRyYW5zYWN0aW9uUmVjZWlwdCwKICAgICAgYmxvY2tOdW1iZXI6IHRyYW5zYWN0aW9uUmVjZWlwdC5ibG9ja051bWJlciA/IEJpZ0ludCh0cmFuc2FjdGlvblJlY2VpcHQuYmxvY2tOdW1iZXIpIDogbnVsbCwKICAgICAgY29udHJhY3RBZGRyZXNzOiB0cmFuc2FjdGlvblJlY2VpcHQuY29udHJhY3RBZGRyZXNzID8gdHJhbnNhY3Rpb25SZWNlaXB0LmNvbnRyYWN0QWRkcmVzcyA6IG51bGwsCiAgICAgIGN1bXVsYXRpdmVHYXNVc2VkOiB0cmFuc2FjdGlvblJlY2VpcHQuY3VtdWxhdGl2ZUdhc1VzZWQgPyBCaWdJbnQodHJhbnNhY3Rpb25SZWNlaXB0LmN1bXVsYXRpdmVHYXNVc2VkKSA6IG51bGwsCiAgICAgIGVmZmVjdGl2ZUdhc1ByaWNlOiB0cmFuc2FjdGlvblJlY2VpcHQuZWZmZWN0aXZlR2FzUHJpY2UgPyBCaWdJbnQodHJhbnNhY3Rpb25SZWNlaXB0LmVmZmVjdGl2ZUdhc1ByaWNlKSA6IG51bGwsCiAgICAgIGdhc1VzZWQ6IHRyYW5zYWN0aW9uUmVjZWlwdC5nYXNVc2VkID8gQmlnSW50KHRyYW5zYWN0aW9uUmVjZWlwdC5nYXNVc2VkKSA6IG51bGwsCiAgICAgIGxvZ3M6IHRyYW5zYWN0aW9uUmVjZWlwdC5sb2dzID8gdHJhbnNhY3Rpb25SZWNlaXB0LmxvZ3MubWFwKChsb2cpID0+IGZvcm1hdExvZyhsb2cpKSA6IG51bGwsCiAgICAgIHRvOiB0cmFuc2FjdGlvblJlY2VpcHQudG8gPyB0cmFuc2FjdGlvblJlY2VpcHQudG8gOiBudWxsLAogICAgICB0cmFuc2FjdGlvbkluZGV4OiB0cmFuc2FjdGlvblJlY2VpcHQudHJhbnNhY3Rpb25JbmRleCA/IGhleFRvTnVtYmVyKHRyYW5zYWN0aW9uUmVjZWlwdC50cmFuc2FjdGlvbkluZGV4KSA6IG51bGwsCiAgICAgIHN0YXR1czogdHJhbnNhY3Rpb25SZWNlaXB0LnN0YXR1cyA/IHJlY2VpcHRTdGF0dXNlc1t0cmFuc2FjdGlvblJlY2VpcHQuc3RhdHVzXSA6IG51bGwsCiAgICAgIHR5cGU6IHRyYW5zYWN0aW9uUmVjZWlwdC50eXBlID8gdHJhbnNhY3Rpb25UeXBlW3RyYW5zYWN0aW9uUmVjZWlwdC50eXBlXSB8fCB0cmFuc2FjdGlvblJlY2VpcHQudHlwZSA6IG51bGwKICAgIH07CiAgICBpZiAodHJhbnNhY3Rpb25SZWNlaXB0LmJsb2JHYXNQcmljZSkKICAgICAgcmVjZWlwdC5ibG9iR2FzUHJpY2UgPSBCaWdJbnQodHJhbnNhY3Rpb25SZWNlaXB0LmJsb2JHYXNQcmljZSk7CiAgICBpZiAodHJhbnNhY3Rpb25SZWNlaXB0LmJsb2JHYXNVc2VkKQogICAgICByZWNlaXB0LmJsb2JHYXNVc2VkID0gQmlnSW50KHRyYW5zYWN0aW9uUmVjZWlwdC5ibG9iR2FzVXNlZCk7CiAgICByZXR1cm4gcmVjZWlwdDsKICB9CiAgdmFyIGRlZmluZVRyYW5zYWN0aW9uUmVjZWlwdCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVGb3JtYXR0ZXIoInRyYW5zYWN0aW9uUmVjZWlwdCIsIGZvcm1hdFRyYW5zYWN0aW9uUmVjZWlwdCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaW5kZXguanMKICBpbml0X2Zyb21IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbmNvZGluZy9mcm9tUmxwLmpzCiAgaW5pdF9iYXNlKCk7CiAgaW5pdF9lbmNvZGluZygpOwogIGluaXRfY3Vyc29yMigpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBmcm9tUmxwKHZhbHVlLCB0byA9ICJoZXgiKSB7CiAgICBjb25zdCBieXRlczIgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgewogICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAzICYmIHZhbHVlLmxlbmd0aCAlIDIgIT09IDApCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEhleFZhbHVlRXJyb3IodmFsdWUpOwogICAgICAgIHJldHVybiBoZXhUb0J5dGVzKHZhbHVlKTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWU7CiAgICB9KSgpOwogICAgY29uc3QgY3Vyc29yID0gY3JlYXRlQ3Vyc29yKGJ5dGVzMiwgewogICAgICByZWN1cnNpdmVSZWFkTGltaXQ6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWQogICAgfSk7CiAgICBjb25zdCByZXN1bHQgPSBmcm9tUmxwQ3Vyc29yKGN1cnNvciwgdG8pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gZnJvbVJscEN1cnNvcihjdXJzb3IsIHRvID0gImhleCIpIHsKICAgIGlmIChjdXJzb3IuYnl0ZXMubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gdG8gPT09ICJoZXgiID8gYnl0ZXNUb0hleChjdXJzb3IuYnl0ZXMpIDogY3Vyc29yLmJ5dGVzOwogICAgY29uc3QgcHJlZml4ID0gY3Vyc29yLnJlYWRCeXRlKCk7CiAgICBpZiAocHJlZml4IDwgMTI4KQogICAgICBjdXJzb3IuZGVjcmVtZW50UG9zaXRpb24oMSk7CiAgICBpZiAocHJlZml4IDwgMTkyKSB7CiAgICAgIGNvbnN0IGxlbmd0aDIgPSByZWFkTGVuZ3RoKGN1cnNvciwgcHJlZml4LCAxMjgpOwogICAgICBjb25zdCBieXRlczIgPSBjdXJzb3IucmVhZEJ5dGVzKGxlbmd0aDIpOwogICAgICByZXR1cm4gdG8gPT09ICJoZXgiID8gYnl0ZXNUb0hleChieXRlczIpIDogYnl0ZXMyOwogICAgfQogICAgY29uc3QgbGVuZ3RoID0gcmVhZExlbmd0aChjdXJzb3IsIHByZWZpeCwgMTkyKTsKICAgIHJldHVybiByZWFkTGlzdChjdXJzb3IsIGxlbmd0aCwgdG8pOwogIH0KICBmdW5jdGlvbiByZWFkTGVuZ3RoKGN1cnNvciwgcHJlZml4LCBvZmZzZXQpIHsKICAgIGlmIChvZmZzZXQgPT09IDEyOCAmJiBwcmVmaXggPCAxMjgpCiAgICAgIHJldHVybiAxOwogICAgaWYgKHByZWZpeCA8PSBvZmZzZXQgKyA1NSkKICAgICAgcmV0dXJuIHByZWZpeCAtIG9mZnNldDsKICAgIGlmIChwcmVmaXggPT09IG9mZnNldCArIDU1ICsgMSkKICAgICAgcmV0dXJuIGN1cnNvci5yZWFkVWludDgoKTsKICAgIGlmIChwcmVmaXggPT09IG9mZnNldCArIDU1ICsgMikKICAgICAgcmV0dXJuIGN1cnNvci5yZWFkVWludDE2KCk7CiAgICBpZiAocHJlZml4ID09PSBvZmZzZXQgKyA1NSArIDMpCiAgICAgIHJldHVybiBjdXJzb3IucmVhZFVpbnQyNCgpOwogICAgaWYgKHByZWZpeCA9PT0gb2Zmc2V0ICsgNTUgKyA0KQogICAgICByZXR1cm4gY3Vyc29yLnJlYWRVaW50MzIoKTsKICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJJbnZhbGlkIFJMUCBwcmVmaXgiKTsKICB9CiAgZnVuY3Rpb24gcmVhZExpc3QoY3Vyc29yLCBsZW5ndGgsIHRvKSB7CiAgICBjb25zdCBwb3NpdGlvbiA9IGN1cnNvci5wb3NpdGlvbjsKICAgIGNvbnN0IHZhbHVlID0gW107CiAgICB3aGlsZSAoY3Vyc29yLnBvc2l0aW9uIC0gcG9zaXRpb24gPCBsZW5ndGgpCiAgICAgIHZhbHVlLnB1c2goZnJvbVJscEN1cnNvcihjdXJzb3IsIHRvKSk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9FdmVudFNpZ25hdHVyZS5qcwogIGluaXRfdG9TaWduYXR1cmUoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvRnVuY3Rpb25TaWduYXR1cmUuanMKICBpbml0X3RvU2lnbmF0dXJlKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b0V2ZW50SGFzaC5qcwogIGluaXRfdG9TaWduYXR1cmVIYXNoKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b0Z1bmN0aW9uSGFzaC5qcwogIGluaXRfdG9TaWduYXR1cmVIYXNoKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9pc0hhc2guanMKICBpbml0X2lzSGV4KCk7CiAgaW5pdF9zaXplKCk7CiAgZnVuY3Rpb24gaXNIYXNoKGhhc2gzKSB7CiAgICByZXR1cm4gaXNIZXgoaGFzaDMpICYmIHNpemUoaGFzaDMpID09PSAzMjsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9yaXBlbWQxNjAuanMKICBpbml0X21kKCk7CiAgaW5pdF91dGlsczIoKTsKICB2YXIgUmhvID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50OEFycmF5KFs3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4XSk7CiAgdmFyIElkID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50OEFycmF5KG5ldyBBcnJheSgxNikuZmlsbCgwKS5tYXAoKF8sIGkpID0+IGkpKTsKICB2YXIgUGkgPSAvKiBAX19QVVJFX18gKi8gSWQubWFwKChpKSA9PiAoOSAqIGkgKyA1KSAlIDE2KTsKICB2YXIgaWR4TCA9IFtJZF07CiAgdmFyIGlkeFIgPSBbUGldOwogIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKQogICAgZm9yIChsZXQgaiBvZiBbaWR4TCwgaWR4Ul0pCiAgICAgIGoucHVzaChqW2ldLm1hcCgoaykgPT4gUmhvW2tdKSk7CiAgdmFyIHNoaWZ0cyA9IC8qIEBfX1BVUkVfXyAqLyBbCiAgICBbMTEsIDE0LCAxNSwgMTIsIDUsIDgsIDcsIDksIDExLCAxMywgMTQsIDE1LCA2LCA3LCA5LCA4XSwKICAgIFsxMiwgMTMsIDExLCAxNSwgNiwgOSwgOSwgNywgMTIsIDE1LCAxMSwgMTMsIDcsIDgsIDcsIDddLAogICAgWzEzLCAxNSwgMTQsIDExLCA3LCA3LCA2LCA4LCAxMywgMTQsIDEzLCAxMiwgNSwgNSwgNiwgOV0sCiAgICBbMTQsIDExLCAxMiwgMTQsIDgsIDYsIDUsIDUsIDE1LCAxMiwgMTUsIDE0LCA5LCA5LCA4LCA2XSwKICAgIFsxNSwgMTIsIDEzLCAxMywgOSwgNSwgOCwgNiwgMTQsIDExLCAxMiwgMTEsIDgsIDYsIDUsIDVdCiAgXS5tYXAoKGkpID0+IG5ldyBVaW50OEFycmF5KGkpKTsKICB2YXIgc2hpZnRzTCA9IC8qIEBfX1BVUkVfXyAqLyBpZHhMLm1hcCgoaWR4LCBpKSA9PiBpZHgubWFwKChqKSA9PiBzaGlmdHNbaV1bal0pKTsKICB2YXIgc2hpZnRzUiA9IC8qIEBfX1BVUkVfXyAqLyBpZHhSLm1hcCgoaWR4LCBpKSA9PiBpZHgubWFwKChqKSA9PiBzaGlmdHNbaV1bal0pKTsKICB2YXIgS2wgPSAvKiBAX19QVVJFX18gKi8gbmV3IFVpbnQzMkFycmF5KFsKICAgIDAsCiAgICAxNTE4NTAwMjQ5LAogICAgMTg1OTc3NTM5MywKICAgIDI0MDA5NTk3MDgsCiAgICAyODQwODUzODM4CiAgXSk7CiAgdmFyIEtyID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheShbCiAgICAxMzUyODI5OTI2LAogICAgMTU0ODYwMzY4NCwKICAgIDE4MzYwNzI2OTEsCiAgICAyMDUzOTk0MjE3LAogICAgMAogIF0pOwogIGZ1bmN0aW9uIGYoZ3JvdXAsIHgsIHksIHopIHsKICAgIGlmIChncm91cCA9PT0gMCkKICAgICAgcmV0dXJuIHggXiB5IF4gejsKICAgIGVsc2UgaWYgKGdyb3VwID09PSAxKQogICAgICByZXR1cm4geCAmIHkgfCB+eCAmIHo7CiAgICBlbHNlIGlmIChncm91cCA9PT0gMikKICAgICAgcmV0dXJuICh4IHwgfnkpIF4gejsKICAgIGVsc2UgaWYgKGdyb3VwID09PSAzKQogICAgICByZXR1cm4geCAmIHogfCB5ICYgfno7CiAgICBlbHNlCiAgICAgIHJldHVybiB4IF4gKHkgfCB+eik7CiAgfQogIHZhciBSX0JVRiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgVWludDMyQXJyYXkoMTYpOwogIHZhciBSSVBFTUQxNjAgPSBjbGFzcyBleHRlbmRzIEhhc2hNRCB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoNjQsIDIwLCA4LCB0cnVlKTsKICAgICAgdGhpcy5oMCA9IDE3MzI1ODQxOTMgfCAwOwogICAgICB0aGlzLmgxID0gNDAyMzIzMzQxNyB8IDA7CiAgICAgIHRoaXMuaDIgPSAyNTYyMzgzMTAyIHwgMDsKICAgICAgdGhpcy5oMyA9IDI3MTczMzg3OCB8IDA7CiAgICAgIHRoaXMuaDQgPSAzMjg1Mzc3NTIwIHwgMDsKICAgIH0KICAgIGdldCgpIHsKICAgICAgY29uc3QgeyBoMCwgaDEsIGgyLCBoMywgaDQgfSA9IHRoaXM7CiAgICAgIHJldHVybiBbaDAsIGgxLCBoMiwgaDMsIGg0XTsKICAgIH0KICAgIHNldChoMCwgaDEsIGgyLCBoMywgaDQpIHsKICAgICAgdGhpcy5oMCA9IGgwIHwgMDsKICAgICAgdGhpcy5oMSA9IGgxIHwgMDsKICAgICAgdGhpcy5oMiA9IGgyIHwgMDsKICAgICAgdGhpcy5oMyA9IGgzIHwgMDsKICAgICAgdGhpcy5oNCA9IGg0IHwgMDsKICAgIH0KICAgIHByb2Nlc3Modmlldywgb2Zmc2V0KSB7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKywgb2Zmc2V0ICs9IDQpCiAgICAgICAgUl9CVUZbaV0gPSB2aWV3LmdldFVpbnQzMihvZmZzZXQsIHRydWUpOwogICAgICBsZXQgYWwgPSB0aGlzLmgwIHwgMCwgYXIgPSBhbCwgYmwgPSB0aGlzLmgxIHwgMCwgYnIgPSBibCwgY2wgPSB0aGlzLmgyIHwgMCwgY3IgPSBjbCwgZGwgPSB0aGlzLmgzIHwgMCwgZHIgPSBkbCwgZWwgPSB0aGlzLmg0IHwgMCwgZXIgPSBlbDsKICAgICAgZm9yIChsZXQgZ3JvdXAgPSAwOyBncm91cCA8IDU7IGdyb3VwKyspIHsKICAgICAgICBjb25zdCByR3JvdXAgPSA0IC0gZ3JvdXA7CiAgICAgICAgY29uc3QgaGJsID0gS2xbZ3JvdXBdLCBoYnIgPSBLcltncm91cF07CiAgICAgICAgY29uc3QgcmwgPSBpZHhMW2dyb3VwXSwgcnIgPSBpZHhSW2dyb3VwXTsKICAgICAgICBjb25zdCBzbCA9IHNoaWZ0c0xbZ3JvdXBdLCBzciA9IHNoaWZ0c1JbZ3JvdXBdOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgewogICAgICAgICAgY29uc3QgdGwgPSByb3RsKGFsICsgZihncm91cCwgYmwsIGNsLCBkbCkgKyBSX0JVRltybFtpXV0gKyBoYmwsIHNsW2ldKSArIGVsIHwgMDsKICAgICAgICAgIGFsID0gZWwsIGVsID0gZGwsIGRsID0gcm90bChjbCwgMTApIHwgMCwgY2wgPSBibCwgYmwgPSB0bDsKICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAgICAgICAgICBjb25zdCB0ciA9IHJvdGwoYXIgKyBmKHJHcm91cCwgYnIsIGNyLCBkcikgKyBSX0JVRltycltpXV0gKyBoYnIsIHNyW2ldKSArIGVyIHwgMDsKICAgICAgICAgIGFyID0gZXIsIGVyID0gZHIsIGRyID0gcm90bChjciwgMTApIHwgMCwgY3IgPSBiciwgYnIgPSB0cjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5zZXQodGhpcy5oMSArIGNsICsgZHIgfCAwLCB0aGlzLmgyICsgZGwgKyBlciB8IDAsIHRoaXMuaDMgKyBlbCArIGFyIHwgMCwgdGhpcy5oNCArIGFsICsgYnIgfCAwLCB0aGlzLmgwICsgYmwgKyBjciB8IDApOwogICAgfQogICAgcm91bmRDbGVhbigpIHsKICAgICAgUl9CVUYuZmlsbCgwKTsKICAgIH0KICAgIGRlc3Ryb3koKSB7CiAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgICAgdGhpcy5idWZmZXIuZmlsbCgwKTsKICAgICAgdGhpcy5zZXQoMCwgMCwgMCwgMCwgMCk7CiAgICB9CiAgfTsKICB2YXIgcmlwZW1kMTYwID0gLyogQF9fUFVSRV9fICovIHdyYXBDb25zdHJ1Y3RvcigoKSA9PiBuZXcgUklQRU1EMTYwKCkpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvcmlwZW1kMTYwLmpzCiAgaW5pdF9pc0hleCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiByaXBlbWQxNjAyKHZhbHVlLCB0b18pIHsKICAgIGNvbnN0IHRvID0gdG9fIHx8ICJoZXgiOwogICAgY29uc3QgYnl0ZXMyID0gcmlwZW1kMTYwKGlzSGV4KHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSkgPyB0b0J5dGVzKHZhbHVlKSA6IHZhbHVlKTsKICAgIGlmICh0byA9PT0gImJ5dGVzIikKICAgICAgcmV0dXJuIGJ5dGVzMjsKICAgIHJldHVybiB0b0hleChieXRlczIpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvaGFzaE1lc3NhZ2UuanMKICBpbml0X2tlY2NhazI1NigpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9zdHJpbmdzLmpzCiAgdmFyIHByZXNpZ25NZXNzYWdlUHJlZml4ID0gIhlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcbiI7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3RvUHJlZml4ZWRNZXNzYWdlLmpzCiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gdG9QcmVmaXhlZE1lc3NhZ2UobWVzc2FnZV8pIHsKICAgIGNvbnN0IG1lc3NhZ2UgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIG1lc3NhZ2VfID09PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gc3RyaW5nVG9IZXgobWVzc2FnZV8pOwogICAgICBpZiAodHlwZW9mIG1lc3NhZ2VfLnJhdyA9PT0gInN0cmluZyIpCiAgICAgICAgcmV0dXJuIG1lc3NhZ2VfLnJhdzsKICAgICAgcmV0dXJuIGJ5dGVzVG9IZXgobWVzc2FnZV8ucmF3KTsKICAgIH0pKCk7CiAgICBjb25zdCBwcmVmaXggPSBzdHJpbmdUb0hleChgJHtwcmVzaWduTWVzc2FnZVByZWZpeH0ke3NpemUobWVzc2FnZSl9YCk7CiAgICByZXR1cm4gY29uY2F0KFtwcmVmaXgsIG1lc3NhZ2VdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL2hhc2hNZXNzYWdlLmpzCiAgZnVuY3Rpb24gaGFzaE1lc3NhZ2UobWVzc2FnZSwgdG9fKSB7CiAgICByZXR1cm4ga2VjY2FrMjU2KHRvUHJlZml4ZWRNZXNzYWdlKG1lc3NhZ2UpLCB0b18pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcmVjb3Zlck1lc3NhZ2VBZGRyZXNzLmpzCiAgYXN5bmMgZnVuY3Rpb24gcmVjb3Zlck1lc3NhZ2VBZGRyZXNzKHsgbWVzc2FnZSwgc2lnbmF0dXJlIH0pIHsKICAgIHJldHVybiByZWNvdmVyQWRkcmVzcyh7IGhhc2g6IGhhc2hNZXNzYWdlKG1lc3NhZ2UpLCBzaWduYXR1cmUgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3NpZ25hdHVyZS9yZWNvdmVyVHlwZWREYXRhQWRkcmVzcy5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJUeXBlZERhdGFBZGRyZXNzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgZG9tYWluLCBtZXNzYWdlLCBwcmltYXJ5VHlwZSwgc2lnbmF0dXJlLCB0eXBlcyB9ID0gcGFyYW1ldGVyczsKICAgIHJldHVybiByZWNvdmVyQWRkcmVzcyh7CiAgICAgIGhhc2g6IGhhc2hUeXBlZERhdGEoewogICAgICAgIGRvbWFpbiwKICAgICAgICBtZXNzYWdlLAogICAgICAgIHByaW1hcnlUeXBlLAogICAgICAgIHR5cGVzCiAgICAgIH0pLAogICAgICBzaWduYXR1cmUKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvdmVyaWZ5SGFzaC5qcwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzRXF1YWwoKTsKICBhc3luYyBmdW5jdGlvbiB2ZXJpZnlIYXNoKHsgYWRkcmVzcywgaGFzaDogaGFzaDMsIHNpZ25hdHVyZSB9KSB7CiAgICByZXR1cm4gaXNBZGRyZXNzRXF1YWwoZ2V0QWRkcmVzcyhhZGRyZXNzKSwgYXdhaXQgcmVjb3ZlckFkZHJlc3MoeyBoYXNoOiBoYXNoMywgc2lnbmF0dXJlIH0pKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3ZlcmlmeU1lc3NhZ2UuanMKICBpbml0X2dldEFkZHJlc3MoKTsKICBpbml0X2lzQWRkcmVzc0VxdWFsKCk7CiAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5TWVzc2FnZSh7IGFkZHJlc3MsIG1lc3NhZ2UsIHNpZ25hdHVyZSB9KSB7CiAgICByZXR1cm4gaXNBZGRyZXNzRXF1YWwoZ2V0QWRkcmVzcyhhZGRyZXNzKSwgYXdhaXQgcmVjb3Zlck1lc3NhZ2VBZGRyZXNzKHsgbWVzc2FnZSwgc2lnbmF0dXJlIH0pKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3ZlcmlmeVR5cGVkRGF0YS5qcwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzRXF1YWwoKTsKICBhc3luYyBmdW5jdGlvbiB2ZXJpZnlUeXBlZERhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhZGRyZXNzLCBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCBzaWduYXR1cmUsIHR5cGVzIH0gPSBwYXJhbWV0ZXJzOwogICAgcmV0dXJuIGlzQWRkcmVzc0VxdWFsKGdldEFkZHJlc3MoYWRkcmVzcyksIGF3YWl0IHJlY292ZXJUeXBlZERhdGFBZGRyZXNzKHsKICAgICAgZG9tYWluLAogICAgICBtZXNzYWdlLAogICAgICBwcmltYXJ5VHlwZSwKICAgICAgc2lnbmF0dXJlLAogICAgICB0eXBlcwogICAgfSkpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcGFyc2VFcmM2NDkyU2lnbmF0dXJlLmpzCiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2J5dGVzLmpzCiAgdmFyIGVyYzY0OTJNYWdpY0J5dGVzID0gIjB4NjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MiI7CiAgdmFyIHplcm9IYXNoID0gIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL2lzRXJjNjQ5MlNpZ25hdHVyZS5qcwogIGluaXRfc2xpY2UoKTsKICBmdW5jdGlvbiBpc0VyYzY0OTJTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gc2xpY2VIZXgoc2lnbmF0dXJlLCAtMzIpID09PSBlcmM2NDkyTWFnaWNCeXRlczsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3BhcnNlRXJjNjQ5MlNpZ25hdHVyZS5qcwogIGZ1bmN0aW9uIHBhcnNlRXJjNjQ5MlNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIGlmICghaXNFcmM2NDkyU2lnbmF0dXJlKHNpZ25hdHVyZSkpCiAgICAgIHJldHVybiB7IHNpZ25hdHVyZSB9OwogICAgY29uc3QgW2FkZHJlc3MsIGRhdGEsIHNpZ25hdHVyZV9dID0gZGVjb2RlQWJpUGFyYW1ldGVycyhbeyB0eXBlOiAiYWRkcmVzcyIgfSwgeyB0eXBlOiAiYnl0ZXMiIH0sIHsgdHlwZTogImJ5dGVzIiB9XSwgc2lnbmF0dXJlKTsKICAgIHJldHVybiB7IGFkZHJlc3MsIGRhdGEsIHNpZ25hdHVyZTogc2lnbmF0dXJlXyB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZS5qcwogIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogIGluaXRfY29uY2F0KCk7CiAgaW5pdF90b0J5dGVzKCk7CiAgZnVuY3Rpb24gc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGRhdGEsIHNpZ25hdHVyZSwgdG8gPSAiaGV4IiB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZV8gPSBjb25jYXRIZXgoWwogICAgICBlbmNvZGVBYmlQYXJhbWV0ZXJzKFt7IHR5cGU6ICJhZGRyZXNzIiB9LCB7IHR5cGU6ICJieXRlcyIgfSwgeyB0eXBlOiAiYnl0ZXMiIH1dLCBbYWRkcmVzcywgZGF0YSwgc2lnbmF0dXJlXSksCiAgICAgIGVyYzY0OTJNYWdpY0J5dGVzCiAgICBdKTsKICAgIGlmICh0byA9PT0gImhleCIpCiAgICAgIHJldHVybiBzaWduYXR1cmVfOwogICAgcmV0dXJuIGhleFRvQnl0ZXMoc2lnbmF0dXJlXyk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL2dldFNlcmlhbGl6ZWRUcmFuc2FjdGlvblR5cGUuanMKICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgaW5pdF9zbGljZSgpOwogIGluaXRfZnJvbUhleCgpOwogIGZ1bmN0aW9uIGdldFNlcmlhbGl6ZWRUcmFuc2FjdGlvblR5cGUoc2VyaWFsaXplZFRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCBzZXJpYWxpemVkVHlwZSA9IHNsaWNlSGV4KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwgMCwgMSk7CiAgICBpZiAoc2VyaWFsaXplZFR5cGUgPT09ICIweDA0IikKICAgICAgcmV0dXJuICJlaXA3NzAyIjsKICAgIGlmIChzZXJpYWxpemVkVHlwZSA9PT0gIjB4MDMiKQogICAgICByZXR1cm4gImVpcDQ4NDQiOwogICAgaWYgKHNlcmlhbGl6ZWRUeXBlID09PSAiMHgwMiIpCiAgICAgIHJldHVybiAiZWlwMTU1OSI7CiAgICBpZiAoc2VyaWFsaXplZFR5cGUgPT09ICIweDAxIikKICAgICAgcmV0dXJuICJlaXAyOTMwIjsKICAgIGlmIChzZXJpYWxpemVkVHlwZSAhPT0gIjB4IiAmJiBoZXhUb051bWJlcihzZXJpYWxpemVkVHlwZSkgPj0gMTkyKQogICAgICByZXR1cm4gImxlZ2FjeSI7CiAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvblR5cGVFcnJvcih7IHNlcmlhbGl6ZWRUeXBlIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9hc3NlcnRUcmFuc2FjdGlvbi5qcwogIGluaXRfYWRkcmVzcygpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY2hhaW4oKTsKICBpbml0X25vZGUoKTsKICBpbml0X2lzQWRkcmVzcygpOwogIGluaXRfc2l6ZSgpOwogIGluaXRfc2xpY2UoKTsKICBpbml0X2Zyb21IZXgoKTsKICBmdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkVJUDc3MDIodHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHsgYXV0aG9yaXphdGlvbkxpc3QgfSA9IHRyYW5zYWN0aW9uOwogICAgaWYgKGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICAgIGZvciAoY29uc3QgYXV0aG9yaXphdGlvbiBvZiBhdXRob3JpemF0aW9uTGlzdCkgewogICAgICAgIGNvbnN0IHsgY29udHJhY3RBZGRyZXNzLCBjaGFpbklkIH0gPSBhdXRob3JpemF0aW9uOwogICAgICAgIGlmICghaXNBZGRyZXNzKGNvbnRyYWN0QWRkcmVzcykpCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IGNvbnRyYWN0QWRkcmVzcyB9KTsKICAgICAgICBpZiAoY2hhaW5JZCA8PSAwKQogICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRDaGFpbklkRXJyb3IoeyBjaGFpbklkIH0pOwogICAgICB9CiAgICB9CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDE1NTkodHJhbnNhY3Rpb24pOwogIH0KICBmdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkVJUDQ4NDQodHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHsgYmxvYlZlcnNpb25lZEhhc2hlcyB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoYmxvYlZlcnNpb25lZEhhc2hlcykgewogICAgICBpZiAoYmxvYlZlcnNpb25lZEhhc2hlcy5sZW5ndGggPT09IDApCiAgICAgICAgdGhyb3cgbmV3IEVtcHR5QmxvYkVycm9yKCk7CiAgICAgIGZvciAoY29uc3QgaGFzaDMgb2YgYmxvYlZlcnNpb25lZEhhc2hlcykgewogICAgICAgIGNvbnN0IHNpemVfID0gc2l6ZShoYXNoMyk7CiAgICAgICAgY29uc3QgdmVyc2lvbjMgPSBoZXhUb051bWJlcihzbGljZShoYXNoMywgMCwgMSkpOwogICAgICAgIGlmIChzaXplXyAhPT0gMzIpCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFZlcnNpb25lZEhhc2hTaXplRXJyb3IoeyBoYXNoOiBoYXNoMywgc2l6ZTogc2l6ZV8gfSk7CiAgICAgICAgaWYgKHZlcnNpb24zICE9PSB2ZXJzaW9uZWRIYXNoVmVyc2lvbkt6ZykKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkVmVyc2lvbmVkSGFzaFZlcnNpb25FcnJvcih7CiAgICAgICAgICAgIGhhc2g6IGhhc2gzLAogICAgICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uMwogICAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQMTU1OSh0cmFuc2FjdGlvbik7CiAgfQogIGZ1bmN0aW9uIGFzc2VydFRyYW5zYWN0aW9uRUlQMTU1OSh0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbWF4RmVlUGVyR2FzLCB0byB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoY2hhaW5JZCA8PSAwKQogICAgICB0aHJvdyBuZXcgSW52YWxpZENoYWluSWRFcnJvcih7IGNoYWluSWQgfSk7CiAgICBpZiAodG8gJiYgIWlzQWRkcmVzcyh0bykpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogdG8gfSk7CiAgICBpZiAobWF4RmVlUGVyR2FzICYmIG1heEZlZVBlckdhcyA+IDJuICoqIDI1Nm4gLSAxbikKICAgICAgdGhyb3cgbmV3IEZlZUNhcFRvb0hpZ2hFcnJvcih7IG1heEZlZVBlckdhcyB9KTsKICAgIGlmIChtYXhQcmlvcml0eUZlZVBlckdhcyAmJiBtYXhGZWVQZXJHYXMgJiYgbWF4UHJpb3JpdHlGZWVQZXJHYXMgPiBtYXhGZWVQZXJHYXMpCiAgICAgIHRocm93IG5ldyBUaXBBYm92ZUZlZUNhcEVycm9yKHsgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcyB9KTsKICB9CiAgZnVuY3Rpb24gYXNzZXJ0VHJhbnNhY3Rpb25FSVAyOTMwKHRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCB7IGNoYWluSWQsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyR2FzLCB0byB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoY2hhaW5JZCA8PSAwKQogICAgICB0aHJvdyBuZXcgSW52YWxpZENoYWluSWRFcnJvcih7IGNoYWluSWQgfSk7CiAgICBpZiAodG8gJiYgIWlzQWRkcmVzcyh0bykpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogdG8gfSk7CiAgICBpZiAobWF4UHJpb3JpdHlGZWVQZXJHYXMgfHwgbWF4RmVlUGVyR2FzKQogICAgICB0aHJvdyBuZXcgQmFzZUVycm9yMigiYG1heEZlZVBlckdhc2AvYG1heFByaW9yaXR5RmVlUGVyR2FzYCBpcyBub3QgYSB2YWxpZCBFSVAtMjkzMCBUcmFuc2FjdGlvbiBhdHRyaWJ1dGUuIik7CiAgICBpZiAoZ2FzUHJpY2UgJiYgZ2FzUHJpY2UgPiAybiAqKiAyNTZuIC0gMW4pCiAgICAgIHRocm93IG5ldyBGZWVDYXBUb29IaWdoRXJyb3IoeyBtYXhGZWVQZXJHYXM6IGdhc1ByaWNlIH0pOwogIH0KICBmdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSh0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBtYXhQcmlvcml0eUZlZVBlckdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckdhcywgdG8gfSA9IHRyYW5zYWN0aW9uOwogICAgaWYgKHRvICYmICFpc0FkZHJlc3ModG8pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IHRvIH0pOwogICAgaWYgKHR5cGVvZiBjaGFpbklkICE9PSAidW5kZWZpbmVkIiAmJiBjaGFpbklkIDw9IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhaW5JZEVycm9yKHsgY2hhaW5JZCB9KTsKICAgIGlmIChtYXhQcmlvcml0eUZlZVBlckdhcyB8fCBtYXhGZWVQZXJHYXMpCiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgbWF4RmVlUGVyR2FzYC9gbWF4UHJpb3JpdHlGZWVQZXJHYXNgIGlzIG5vdCBhIHZhbGlkIExlZ2FjeSBUcmFuc2FjdGlvbiBhdHRyaWJ1dGUuIik7CiAgICBpZiAoZ2FzUHJpY2UgJiYgZ2FzUHJpY2UgPiAybiAqKiAyNTZuIC0gMW4pCiAgICAgIHRocm93IG5ldyBGZWVDYXBUb29IaWdoRXJyb3IoeyBtYXhGZWVQZXJHYXM6IGdhc1ByaWNlIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9wYXJzZVRyYW5zYWN0aW9uLmpzCiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF90cmFuc2FjdGlvbigpOwogIGluaXRfaXNBZGRyZXNzKCk7CiAgaW5pdF9pc0hleCgpOwogIGluaXRfcGFkKCk7CiAgaW5pdF90cmltKCk7CiAgaW5pdF9mcm9tSGV4KCk7CiAgZnVuY3Rpb24gcGFyc2VUcmFuc2FjdGlvbihzZXJpYWxpemVkVHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHR5cGUgPSBnZXRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgICBpZiAodHlwZSA9PT0gImVpcDE1NTkiKQogICAgICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbkVJUDE1NTkoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgIGlmICh0eXBlID09PSAiZWlwMjkzMCIpCiAgICAgIHJldHVybiBwYXJzZVRyYW5zYWN0aW9uRUlQMjkzMChzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgaWYgKHR5cGUgPT09ICJlaXA0ODQ0IikKICAgICAgcmV0dXJuIHBhcnNlVHJhbnNhY3Rpb25FSVA0ODQ0KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgICBpZiAodHlwZSA9PT0gImVpcDc3MDIiKQogICAgICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbkVJUDc3MDIoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgIHJldHVybiBwYXJzZVRyYW5zYWN0aW9uTGVnYWN5KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25FSVA3NzAyKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgY29uc3QgdHJhbnNhY3Rpb25BcnJheSA9IHRvVHJhbnNhY3Rpb25BcnJheShzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3QgW2NoYWluSWQsIG5vbmNlLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbWF4RmVlUGVyR2FzLCBnYXMsIHRvLCB2YWx1ZSwgZGF0YSwgYWNjZXNzTGlzdCwgYXV0aG9yaXphdGlvbkxpc3QsIHYsIHIsIHNdID0gdHJhbnNhY3Rpb25BcnJheTsKICAgIGlmICh0cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCAhPT0gMTAgJiYgdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggIT09IDEzKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yKHsKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBjaGFpbklkLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhcywKICAgICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICAgIGdhcywKICAgICAgICAgIHRvLAogICAgICAgICAgdmFsdWUsCiAgICAgICAgICBkYXRhLAogICAgICAgICAgYWNjZXNzTGlzdCwKICAgICAgICAgIGF1dGhvcml6YXRpb25MaXN0LAogICAgICAgICAgLi4udHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPiA5ID8gewogICAgICAgICAgICB2LAogICAgICAgICAgICByLAogICAgICAgICAgICBzCiAgICAgICAgICB9IDoge30KICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0eXBlOiAiZWlwNzcwMiIKICAgICAgfSk7CiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHsKICAgICAgY2hhaW5JZDogaGV4VG9OdW1iZXIoY2hhaW5JZCksCiAgICAgIHR5cGU6ICJlaXA3NzAyIgogICAgfTsKICAgIGlmIChpc0hleCh0bykgJiYgdG8gIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnRvID0gdG87CiAgICBpZiAoaXNIZXgoZ2FzKSAmJiBnYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhcyA9IGhleFRvQmlnSW50KGdhcyk7CiAgICBpZiAoaXNIZXgoZGF0YSkgJiYgZGF0YSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZGF0YSA9IGRhdGE7CiAgICBpZiAoaXNIZXgobm9uY2UpICYmIG5vbmNlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5ub25jZSA9IGhleFRvTnVtYmVyKG5vbmNlKTsKICAgIGlmIChpc0hleCh2YWx1ZSkgJiYgdmFsdWUgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnZhbHVlID0gaGV4VG9CaWdJbnQodmFsdWUpOwogICAgaWYgKGlzSGV4KG1heEZlZVBlckdhcykgJiYgbWF4RmVlUGVyR2FzICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5tYXhGZWVQZXJHYXMgPSBoZXhUb0JpZ0ludChtYXhGZWVQZXJHYXMpOwogICAgaWYgKGlzSGV4KG1heFByaW9yaXR5RmVlUGVyR2FzKSAmJiBtYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMgPSBoZXhUb0JpZ0ludChtYXhQcmlvcml0eUZlZVBlckdhcyk7CiAgICBpZiAoYWNjZXNzTGlzdC5sZW5ndGggIT09IDAgJiYgYWNjZXNzTGlzdCAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uYWNjZXNzTGlzdCA9IHBhcnNlQWNjZXNzTGlzdChhY2Nlc3NMaXN0KTsKICAgIGlmIChhdXRob3JpemF0aW9uTGlzdC5sZW5ndGggIT09IDAgJiYgYXV0aG9yaXphdGlvbkxpc3QgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmF1dGhvcml6YXRpb25MaXN0ID0gcGFyc2VBdXRob3JpemF0aW9uTGlzdChhdXRob3JpemF0aW9uTGlzdCk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDc3MDIodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDEzID8gcGFyc2VFSVAxNTVTaWduYXR1cmUodHJhbnNhY3Rpb25BcnJheSkgOiB2b2lkIDA7CiAgICByZXR1cm4geyAuLi5zaWduYXR1cmUsIC4uLnRyYW5zYWN0aW9uIH07CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25FSVA0ODQ0KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgY29uc3QgdHJhbnNhY3Rpb25PcldyYXBwZXJBcnJheSA9IHRvVHJhbnNhY3Rpb25BcnJheShzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3QgaGFzTmV0d29ya1dyYXBwZXIgPSB0cmFuc2FjdGlvbk9yV3JhcHBlckFycmF5Lmxlbmd0aCA9PT0gNDsKICAgIGNvbnN0IHRyYW5zYWN0aW9uQXJyYXkgPSBoYXNOZXR3b3JrV3JhcHBlciA/IHRyYW5zYWN0aW9uT3JXcmFwcGVyQXJyYXlbMF0gOiB0cmFuc2FjdGlvbk9yV3JhcHBlckFycmF5OwogICAgY29uc3Qgd3JhcHBlckFycmF5ID0gaGFzTmV0d29ya1dyYXBwZXIgPyB0cmFuc2FjdGlvbk9yV3JhcHBlckFycmF5LnNsaWNlKDEpIDogW107CiAgICBjb25zdCBbY2hhaW5JZCwgbm9uY2UsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBtYXhGZWVQZXJHYXMsIGdhcywgdG8sIHZhbHVlLCBkYXRhLCBhY2Nlc3NMaXN0LCBtYXhGZWVQZXJCbG9iR2FzLCBibG9iVmVyc2lvbmVkSGFzaGVzLCB2LCByLCBzXSA9IHRyYW5zYWN0aW9uQXJyYXk7CiAgICBjb25zdCBbYmxvYnMsIGNvbW1pdG1lbnRzLCBwcm9vZnNdID0gd3JhcHBlckFycmF5OwogICAgaWYgKCEodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDExIHx8IHRyYW5zYWN0aW9uQXJyYXkubGVuZ3RoID09PSAxNCkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uRXJyb3IoewogICAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICAgIGNoYWluSWQsCiAgICAgICAgICBub25jZSwKICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzLAogICAgICAgICAgbWF4RmVlUGVyR2FzLAogICAgICAgICAgZ2FzLAogICAgICAgICAgdG8sCiAgICAgICAgICB2YWx1ZSwKICAgICAgICAgIGRhdGEsCiAgICAgICAgICBhY2Nlc3NMaXN0LAogICAgICAgICAgLi4udHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPiA5ID8gewogICAgICAgICAgICB2LAogICAgICAgICAgICByLAogICAgICAgICAgICBzCiAgICAgICAgICB9IDoge30KICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0eXBlOiAiZWlwNDg0NCIKICAgICAgfSk7CiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHsKICAgICAgYmxvYlZlcnNpb25lZEhhc2hlcywKICAgICAgY2hhaW5JZDogaGV4VG9OdW1iZXIoY2hhaW5JZCksCiAgICAgIHR5cGU6ICJlaXA0ODQ0IgogICAgfTsKICAgIGlmIChpc0hleCh0bykgJiYgdG8gIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnRvID0gdG87CiAgICBpZiAoaXNIZXgoZ2FzKSAmJiBnYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhcyA9IGhleFRvQmlnSW50KGdhcyk7CiAgICBpZiAoaXNIZXgoZGF0YSkgJiYgZGF0YSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZGF0YSA9IGRhdGE7CiAgICBpZiAoaXNIZXgobm9uY2UpICYmIG5vbmNlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5ub25jZSA9IGhleFRvTnVtYmVyKG5vbmNlKTsKICAgIGlmIChpc0hleCh2YWx1ZSkgJiYgdmFsdWUgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnZhbHVlID0gaGV4VG9CaWdJbnQodmFsdWUpOwogICAgaWYgKGlzSGV4KG1heEZlZVBlckJsb2JHYXMpICYmIG1heEZlZVBlckJsb2JHYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm1heEZlZVBlckJsb2JHYXMgPSBoZXhUb0JpZ0ludChtYXhGZWVQZXJCbG9iR2FzKTsKICAgIGlmIChpc0hleChtYXhGZWVQZXJHYXMpICYmIG1heEZlZVBlckdhcyAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24ubWF4RmVlUGVyR2FzID0gaGV4VG9CaWdJbnQobWF4RmVlUGVyR2FzKTsKICAgIGlmIChpc0hleChtYXhQcmlvcml0eUZlZVBlckdhcykgJiYgbWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm1heFByaW9yaXR5RmVlUGVyR2FzID0gaGV4VG9CaWdJbnQobWF4UHJpb3JpdHlGZWVQZXJHYXMpOwogICAgaWYgKGFjY2Vzc0xpc3QubGVuZ3RoICE9PSAwICYmIGFjY2Vzc0xpc3QgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmFjY2Vzc0xpc3QgPSBwYXJzZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBpZiAoYmxvYnMgJiYgY29tbWl0bWVudHMgJiYgcHJvb2ZzKQogICAgICB0cmFuc2FjdGlvbi5zaWRlY2FycyA9IHRvQmxvYlNpZGVjYXJzKHsKICAgICAgICBibG9icywKICAgICAgICBjb21taXRtZW50cywKICAgICAgICBwcm9vZnMKICAgICAgfSk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDQ4NDQodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDE0ID8gcGFyc2VFSVAxNTVTaWduYXR1cmUodHJhbnNhY3Rpb25BcnJheSkgOiB2b2lkIDA7CiAgICByZXR1cm4geyAuLi5zaWduYXR1cmUsIC4uLnRyYW5zYWN0aW9uIH07CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25FSVAxNTU5KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgY29uc3QgdHJhbnNhY3Rpb25BcnJheSA9IHRvVHJhbnNhY3Rpb25BcnJheShzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3QgW2NoYWluSWQsIG5vbmNlLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbWF4RmVlUGVyR2FzLCBnYXMsIHRvLCB2YWx1ZSwgZGF0YSwgYWNjZXNzTGlzdCwgdiwgciwgc10gPSB0cmFuc2FjdGlvbkFycmF5OwogICAgaWYgKCEodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDkgfHwgdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDEyKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25FcnJvcih7CiAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgY2hhaW5JZCwKICAgICAgICAgIG5vbmNlLAogICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXMsCiAgICAgICAgICBtYXhGZWVQZXJHYXMsCiAgICAgICAgICBnYXMsCiAgICAgICAgICB0bywKICAgICAgICAgIHZhbHVlLAogICAgICAgICAgZGF0YSwKICAgICAgICAgIGFjY2Vzc0xpc3QsCiAgICAgICAgICAuLi50cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA+IDkgPyB7CiAgICAgICAgICAgIHYsCiAgICAgICAgICAgIHIsCiAgICAgICAgICAgIHMKICAgICAgICAgIH0gOiB7fQogICAgICAgIH0sCiAgICAgICAgc2VyaWFsaXplZFRyYW5zYWN0aW9uLAogICAgICAgIHR5cGU6ICJlaXAxNTU5IgogICAgICB9KTsKICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gewogICAgICBjaGFpbklkOiBoZXhUb051bWJlcihjaGFpbklkKSwKICAgICAgdHlwZTogImVpcDE1NTkiCiAgICB9OwogICAgaWYgKGlzSGV4KHRvKSAmJiB0byAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24udG8gPSB0bzsKICAgIGlmIChpc0hleChnYXMpICYmIGdhcyAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZ2FzID0gaGV4VG9CaWdJbnQoZ2FzKTsKICAgIGlmIChpc0hleChkYXRhKSAmJiBkYXRhICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5kYXRhID0gZGF0YTsKICAgIGlmIChpc0hleChub25jZSkgJiYgbm9uY2UgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm5vbmNlID0gaGV4VG9OdW1iZXIobm9uY2UpOwogICAgaWYgKGlzSGV4KHZhbHVlKSAmJiB2YWx1ZSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24udmFsdWUgPSBoZXhUb0JpZ0ludCh2YWx1ZSk7CiAgICBpZiAoaXNIZXgobWF4RmVlUGVyR2FzKSAmJiBtYXhGZWVQZXJHYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm1heEZlZVBlckdhcyA9IGhleFRvQmlnSW50KG1heEZlZVBlckdhcyk7CiAgICBpZiAoaXNIZXgobWF4UHJpb3JpdHlGZWVQZXJHYXMpICYmIG1heFByaW9yaXR5RmVlUGVyR2FzICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5tYXhQcmlvcml0eUZlZVBlckdhcyA9IGhleFRvQmlnSW50KG1heFByaW9yaXR5RmVlUGVyR2FzKTsKICAgIGlmIChhY2Nlc3NMaXN0Lmxlbmd0aCAhPT0gMCAmJiBhY2Nlc3NMaXN0ICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5hY2Nlc3NMaXN0ID0gcGFyc2VBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpOwogICAgYXNzZXJ0VHJhbnNhY3Rpb25FSVAxNTU5KHRyYW5zYWN0aW9uKTsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRyYW5zYWN0aW9uQXJyYXkubGVuZ3RoID09PSAxMiA/IHBhcnNlRUlQMTU1U2lnbmF0dXJlKHRyYW5zYWN0aW9uQXJyYXkpIDogdm9pZCAwOwogICAgcmV0dXJuIHsgLi4uc2lnbmF0dXJlLCAuLi50cmFuc2FjdGlvbiB9OwogIH0KICBmdW5jdGlvbiBwYXJzZVRyYW5zYWN0aW9uRUlQMjkzMChzZXJpYWxpemVkVHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHRyYW5zYWN0aW9uQXJyYXkgPSB0b1RyYW5zYWN0aW9uQXJyYXkoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgIGNvbnN0IFtjaGFpbklkLCBub25jZSwgZ2FzUHJpY2UsIGdhcywgdG8sIHZhbHVlLCBkYXRhLCBhY2Nlc3NMaXN0LCB2LCByLCBzXSA9IHRyYW5zYWN0aW9uQXJyYXk7CiAgICBpZiAoISh0cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA9PT0gOCB8fCB0cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA9PT0gMTEpKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yKHsKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBjaGFpbklkLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICBnYXNQcmljZSwKICAgICAgICAgIGdhcywKICAgICAgICAgIHRvLAogICAgICAgICAgdmFsdWUsCiAgICAgICAgICBkYXRhLAogICAgICAgICAgYWNjZXNzTGlzdCwKICAgICAgICAgIC4uLnRyYW5zYWN0aW9uQXJyYXkubGVuZ3RoID4gOCA/IHsKICAgICAgICAgICAgdiwKICAgICAgICAgICAgciwKICAgICAgICAgICAgcwogICAgICAgICAgfSA6IHt9CiAgICAgICAgfSwKICAgICAgICBzZXJpYWxpemVkVHJhbnNhY3Rpb24sCiAgICAgICAgdHlwZTogImVpcDI5MzAiCiAgICAgIH0pOwogICAgY29uc3QgdHJhbnNhY3Rpb24gPSB7CiAgICAgIGNoYWluSWQ6IGhleFRvTnVtYmVyKGNoYWluSWQpLAogICAgICB0eXBlOiAiZWlwMjkzMCIKICAgIH07CiAgICBpZiAoaXNIZXgodG8pICYmIHRvICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi50byA9IHRvOwogICAgaWYgKGlzSGV4KGdhcykgJiYgZ2FzICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5nYXMgPSBoZXhUb0JpZ0ludChnYXMpOwogICAgaWYgKGlzSGV4KGRhdGEpICYmIGRhdGEgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmRhdGEgPSBkYXRhOwogICAgaWYgKGlzSGV4KG5vbmNlKSAmJiBub25jZSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24ubm9uY2UgPSBoZXhUb051bWJlcihub25jZSk7CiAgICBpZiAoaXNIZXgodmFsdWUpICYmIHZhbHVlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi52YWx1ZSA9IGhleFRvQmlnSW50KHZhbHVlKTsKICAgIGlmIChpc0hleChnYXNQcmljZSkgJiYgZ2FzUHJpY2UgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhc1ByaWNlID0gaGV4VG9CaWdJbnQoZ2FzUHJpY2UpOwogICAgaWYgKGFjY2Vzc0xpc3QubGVuZ3RoICE9PSAwICYmIGFjY2Vzc0xpc3QgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmFjY2Vzc0xpc3QgPSBwYXJzZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDI5MzAodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDExID8gcGFyc2VFSVAxNTVTaWduYXR1cmUodHJhbnNhY3Rpb25BcnJheSkgOiB2b2lkIDA7CiAgICByZXR1cm4geyAuLi5zaWduYXR1cmUsIC4uLnRyYW5zYWN0aW9uIH07CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25MZWdhY3koc2VyaWFsaXplZFRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCB0cmFuc2FjdGlvbkFycmF5ID0gZnJvbVJscChzZXJpYWxpemVkVHJhbnNhY3Rpb24sICJoZXgiKTsKICAgIGNvbnN0IFtub25jZSwgZ2FzUHJpY2UsIGdhcywgdG8sIHZhbHVlLCBkYXRhLCBjaGFpbklkT3JWXywgciwgc10gPSB0cmFuc2FjdGlvbkFycmF5OwogICAgaWYgKCEodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDYgfHwgdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDkpKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yKHsKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBub25jZSwKICAgICAgICAgIGdhc1ByaWNlLAogICAgICAgICAgZ2FzLAogICAgICAgICAgdG8sCiAgICAgICAgICB2YWx1ZSwKICAgICAgICAgIGRhdGEsCiAgICAgICAgICAuLi50cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA+IDYgPyB7CiAgICAgICAgICAgIHY6IGNoYWluSWRPclZfLAogICAgICAgICAgICByLAogICAgICAgICAgICBzCiAgICAgICAgICB9IDoge30KICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0eXBlOiAibGVnYWN5IgogICAgICB9KTsKICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gewogICAgICB0eXBlOiAibGVnYWN5IgogICAgfTsKICAgIGlmIChpc0hleCh0bykgJiYgdG8gIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnRvID0gdG87CiAgICBpZiAoaXNIZXgoZ2FzKSAmJiBnYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhcyA9IGhleFRvQmlnSW50KGdhcyk7CiAgICBpZiAoaXNIZXgoZGF0YSkgJiYgZGF0YSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZGF0YSA9IGRhdGE7CiAgICBpZiAoaXNIZXgobm9uY2UpICYmIG5vbmNlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5ub25jZSA9IGhleFRvTnVtYmVyKG5vbmNlKTsKICAgIGlmIChpc0hleCh2YWx1ZSkgJiYgdmFsdWUgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnZhbHVlID0gaGV4VG9CaWdJbnQodmFsdWUpOwogICAgaWYgKGlzSGV4KGdhc1ByaWNlKSAmJiBnYXNQcmljZSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZ2FzUHJpY2UgPSBoZXhUb0JpZ0ludChnYXNQcmljZSk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSh0cmFuc2FjdGlvbik7CiAgICBpZiAodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDYpCiAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgIGNvbnN0IGNoYWluSWRPclYgPSBpc0hleChjaGFpbklkT3JWXykgJiYgY2hhaW5JZE9yVl8gIT09ICIweCIgPyBoZXhUb0JpZ0ludChjaGFpbklkT3JWXykgOiAwbjsKICAgIGlmIChzID09PSAiMHgiICYmIHIgPT09ICIweCIpIHsKICAgICAgaWYgKGNoYWluSWRPclYgPiAwKQogICAgICAgIHRyYW5zYWN0aW9uLmNoYWluSWQgPSBOdW1iZXIoY2hhaW5JZE9yVik7CiAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgIH0KICAgIGNvbnN0IHYgPSBjaGFpbklkT3JWOwogICAgY29uc3QgY2hhaW5JZCA9IE51bWJlcigodiAtIDM1bikgLyAybik7CiAgICBpZiAoY2hhaW5JZCA+IDApCiAgICAgIHRyYW5zYWN0aW9uLmNoYWluSWQgPSBjaGFpbklkOwogICAgZWxzZSBpZiAodiAhPT0gMjduICYmIHYgIT09IDI4bikKICAgICAgdGhyb3cgbmV3IEludmFsaWRMZWdhY3lWRXJyb3IoeyB2IH0pOwogICAgdHJhbnNhY3Rpb24udiA9IHY7CiAgICB0cmFuc2FjdGlvbi5zID0gczsKICAgIHRyYW5zYWN0aW9uLnIgPSByOwogICAgdHJhbnNhY3Rpb24ueVBhcml0eSA9IHYgJSAybiA9PT0gMG4gPyAxIDogMDsKICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICB9CiAgZnVuY3Rpb24gdG9UcmFuc2FjdGlvbkFycmF5KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgcmV0dXJuIGZyb21SbHAoYDB4JHtzZXJpYWxpemVkVHJhbnNhY3Rpb24uc2xpY2UoNCl9YCwgImhleCIpOwogIH0KICBmdW5jdGlvbiBwYXJzZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdF8pIHsKICAgIGNvbnN0IGFjY2Vzc0xpc3QgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWNjZXNzTGlzdF8ubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgW2FkZHJlc3MsIHN0b3JhZ2VLZXlzXSA9IGFjY2Vzc0xpc3RfW2ldOwogICAgICBpZiAoIWlzQWRkcmVzcyhhZGRyZXNzLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzIH0pOwogICAgICBhY2Nlc3NMaXN0LnB1c2goewogICAgICAgIGFkZHJlc3MsCiAgICAgICAgc3RvcmFnZUtleXM6IHN0b3JhZ2VLZXlzLm1hcCgoa2V5KSA9PiBpc0hhc2goa2V5KSA/IGtleSA6IHRyaW0oa2V5KSkKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gYWNjZXNzTGlzdDsKICB9CiAgZnVuY3Rpb24gcGFyc2VBdXRob3JpemF0aW9uTGlzdChzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3QpIHsKICAgIGNvbnN0IGF1dGhvcml6YXRpb25MaXN0ID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcmlhbGl6ZWRBdXRob3JpemF0aW9uTGlzdC5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBbY2hhaW5JZCwgY29udHJhY3RBZGRyZXNzLCBub25jZSwgeVBhcml0eSwgciwgc10gPSBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3RbaV07CiAgICAgIGF1dGhvcml6YXRpb25MaXN0LnB1c2goewogICAgICAgIGNoYWluSWQ6IGhleFRvTnVtYmVyKGNoYWluSWQpLAogICAgICAgIGNvbnRyYWN0QWRkcmVzcywKICAgICAgICBub25jZTogaGV4VG9OdW1iZXIobm9uY2UpLAogICAgICAgIC4uLnBhcnNlRUlQMTU1U2lnbmF0dXJlKFt5UGFyaXR5LCByLCBzXSkKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gYXV0aG9yaXphdGlvbkxpc3Q7CiAgfQogIGZ1bmN0aW9uIHBhcnNlRUlQMTU1U2lnbmF0dXJlKHRyYW5zYWN0aW9uQXJyYXkpIHsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRyYW5zYWN0aW9uQXJyYXkuc2xpY2UoLTMpOwogICAgY29uc3QgdiA9IHNpZ25hdHVyZVswXSA9PT0gIjB4IiB8fCBoZXhUb0JpZ0ludChzaWduYXR1cmVbMF0pID09PSAwbiA/IDI3biA6IDI4bjsKICAgIHJldHVybiB7CiAgICAgIHI6IHBhZEhleChzaWduYXR1cmVbMV0sIHsgc2l6ZTogMzIgfSksCiAgICAgIHM6IHBhZEhleChzaWduYXR1cmVbMl0sIHsgc2l6ZTogMzIgfSksCiAgICAgIHYsCiAgICAgIHlQYXJpdHk6IHYgPT09IDI3biA/IDAgOiAxCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9zZXJpYWxpemVUcmFuc2FjdGlvbi5qcwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdHJpbSgpOwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9leHBlcmltZW50YWwvZWlwNzcwMi91dGlscy9zZXJpYWxpemVBdXRob3JpemF0aW9uTGlzdC5qcwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBzZXJpYWxpemVBdXRob3JpemF0aW9uTGlzdChhdXRob3JpemF0aW9uTGlzdCkgewogICAgaWYgKCFhdXRob3JpemF0aW9uTGlzdCB8fCBhdXRob3JpemF0aW9uTGlzdC5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiBbXTsKICAgIGNvbnN0IHNlcmlhbGl6ZWRBdXRob3JpemF0aW9uTGlzdCA9IFtdOwogICAgZm9yIChjb25zdCBhdXRob3JpemF0aW9uIG9mIGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICAgIGNvbnN0IHsgY29udHJhY3RBZGRyZXNzLCBjaGFpbklkLCBub25jZSwgLi4uc2lnbmF0dXJlIH0gPSBhdXRob3JpemF0aW9uOwogICAgICBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3QucHVzaChbCiAgICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgICAgY29udHJhY3RBZGRyZXNzLAogICAgICAgIHRvSGV4KG5vbmNlKSwKICAgICAgICAuLi50b1lQYXJpdHlTaWduYXR1cmVBcnJheSh7fSwgc2lnbmF0dXJlKQogICAgICBdKTsKICAgIH0KICAgIHJldHVybiBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL3NlcmlhbGl6ZUFjY2Vzc0xpc3QuanMKICBpbml0X2FkZHJlc3MoKTsKICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBmdW5jdGlvbiBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpIHsKICAgIGlmICghYWNjZXNzTGlzdCB8fCBhY2Nlc3NMaXN0Lmxlbmd0aCA9PT0gMCkKICAgICAgcmV0dXJuIFtdOwogICAgY29uc3Qgc2VyaWFsaXplZEFjY2Vzc0xpc3QgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWNjZXNzTGlzdC5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCB7IGFkZHJlc3MsIHN0b3JhZ2VLZXlzIH0gPSBhY2Nlc3NMaXN0W2ldOwogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHN0b3JhZ2VLZXlzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgaWYgKHN0b3JhZ2VLZXlzW2pdLmxlbmd0aCAtIDIgIT09IDY0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IoeyBzdG9yYWdlS2V5OiBzdG9yYWdlS2V5c1tqXSB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFpc0FkZHJlc3MoYWRkcmVzcywgeyBzdHJpY3Q6IGZhbHNlIH0pKSB7CiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzIH0pOwogICAgICB9CiAgICAgIHNlcmlhbGl6ZWRBY2Nlc3NMaXN0LnB1c2goW2FkZHJlc3MsIHN0b3JhZ2VLZXlzXSk7CiAgICB9CiAgICByZXR1cm4gc2VyaWFsaXplZEFjY2Vzc0xpc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL3NlcmlhbGl6ZVRyYW5zYWN0aW9uLmpzCiAgZnVuY3Rpb24gc2VyaWFsaXplVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgdHlwZSA9IGdldFRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvbik7CiAgICBpZiAodHlwZSA9PT0gImVpcDE1NTkiKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVAxNTU5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogICAgaWYgKHR5cGUgPT09ICJlaXAyOTMwIikKICAgICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uRUlQMjkzMCh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKTsKICAgIGlmICh0eXBlID09PSAiZWlwNDg0NCIpCiAgICAgIHJldHVybiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDQ4NDQodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSk7CiAgICBpZiAodHlwZSA9PT0gImVpcDc3MDIiKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVA3NzAyKHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uTGVnYWN5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogIH0KICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDc3MDIodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgeyBhdXRob3JpemF0aW9uTGlzdCwgY2hhaW5JZCwgZ2FzLCBub25jZSwgdG8sIHZhbHVlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBhY2Nlc3NMaXN0LCBkYXRhIH0gPSB0cmFuc2FjdGlvbjsKICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQNzcwMih0cmFuc2FjdGlvbik7CiAgICBjb25zdCBzZXJpYWxpemVkQWNjZXNzTGlzdCA9IHNlcmlhbGl6ZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBjb25zdCBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3QgPSBzZXJpYWxpemVBdXRob3JpemF0aW9uTGlzdChhdXRob3JpemF0aW9uTGlzdCk7CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4MDQiLAogICAgICB0b1JscChbCiAgICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgICAgbm9uY2UgPyB0b0hleChub25jZSkgOiAiMHgiLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzID8gdG9IZXgobWF4UHJpb3JpdHlGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgICBtYXhGZWVQZXJHYXMgPyB0b0hleChtYXhGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgICB0byA/PyAiMHgiLAogICAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgICBkYXRhID8/ICIweCIsCiAgICAgICAgc2VyaWFsaXplZEFjY2Vzc0xpc3QsCiAgICAgICAgc2VyaWFsaXplZEF1dGhvcml6YXRpb25MaXN0LAogICAgICAgIC4uLnRvWVBhcml0eVNpZ25hdHVyZUFycmF5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpCiAgICAgIF0pCiAgICBdKTsKICB9CiAgZnVuY3Rpb24gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVA0ODQ0KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpIHsKICAgIGNvbnN0IHsgY2hhaW5JZCwgZ2FzLCBub25jZSwgdG8sIHZhbHVlLCBtYXhGZWVQZXJCbG9iR2FzLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBhY2Nlc3NMaXN0LCBkYXRhIH0gPSB0cmFuc2FjdGlvbjsKICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQNDg0NCh0cmFuc2FjdGlvbik7CiAgICBsZXQgYmxvYlZlcnNpb25lZEhhc2hlcyA9IHRyYW5zYWN0aW9uLmJsb2JWZXJzaW9uZWRIYXNoZXM7CiAgICBsZXQgc2lkZWNhcnMgPSB0cmFuc2FjdGlvbi5zaWRlY2FyczsKICAgIGlmICh0cmFuc2FjdGlvbi5ibG9icyAmJiAodHlwZW9mIGJsb2JWZXJzaW9uZWRIYXNoZXMgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiBzaWRlY2FycyA9PT0gInVuZGVmaW5lZCIpKSB7CiAgICAgIGNvbnN0IGJsb2JzMiA9IHR5cGVvZiB0cmFuc2FjdGlvbi5ibG9ic1swXSA9PT0gInN0cmluZyIgPyB0cmFuc2FjdGlvbi5ibG9icyA6IHRyYW5zYWN0aW9uLmJsb2JzLm1hcCgoeCkgPT4gYnl0ZXNUb0hleCh4KSk7CiAgICAgIGNvbnN0IGt6ZyA9IHRyYW5zYWN0aW9uLmt6ZzsKICAgICAgY29uc3QgY29tbWl0bWVudHMyID0gYmxvYnNUb0NvbW1pdG1lbnRzKHsKICAgICAgICBibG9iczogYmxvYnMyLAogICAgICAgIGt6ZwogICAgICB9KTsKICAgICAgaWYgKHR5cGVvZiBibG9iVmVyc2lvbmVkSGFzaGVzID09PSAidW5kZWZpbmVkIikKICAgICAgICBibG9iVmVyc2lvbmVkSGFzaGVzID0gY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlcyh7CiAgICAgICAgICBjb21taXRtZW50czogY29tbWl0bWVudHMyCiAgICAgICAgfSk7CiAgICAgIGlmICh0eXBlb2Ygc2lkZWNhcnMgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgY29uc3QgcHJvb2ZzMiA9IGJsb2JzVG9Qcm9vZnMoeyBibG9iczogYmxvYnMyLCBjb21taXRtZW50czogY29tbWl0bWVudHMyLCBremcgfSk7CiAgICAgICAgc2lkZWNhcnMgPSB0b0Jsb2JTaWRlY2Fycyh7IGJsb2JzOiBibG9iczIsIGNvbW1pdG1lbnRzOiBjb21taXRtZW50czIsIHByb29mczogcHJvb2ZzMiB9KTsKICAgICAgfQogICAgfQogICAgY29uc3Qgc2VyaWFsaXplZEFjY2Vzc0xpc3QgPSBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpOwogICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICB0b0hleChjaGFpbklkKSwKICAgICAgbm9uY2UgPyB0b0hleChub25jZSkgOiAiMHgiLAogICAgICBtYXhQcmlvcml0eUZlZVBlckdhcyA/IHRvSGV4KG1heFByaW9yaXR5RmVlUGVyR2FzKSA6ICIweCIsCiAgICAgIG1heEZlZVBlckdhcyA/IHRvSGV4KG1heEZlZVBlckdhcykgOiAiMHgiLAogICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgdG8gPz8gIjB4IiwKICAgICAgdmFsdWUgPyB0b0hleCh2YWx1ZSkgOiAiMHgiLAogICAgICBkYXRhID8/ICIweCIsCiAgICAgIHNlcmlhbGl6ZWRBY2Nlc3NMaXN0LAogICAgICBtYXhGZWVQZXJCbG9iR2FzID8gdG9IZXgobWF4RmVlUGVyQmxvYkdhcykgOiAiMHgiLAogICAgICBibG9iVmVyc2lvbmVkSGFzaGVzID8/IFtdLAogICAgICAuLi50b1lQYXJpdHlTaWduYXR1cmVBcnJheSh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKQogICAgXTsKICAgIGNvbnN0IGJsb2JzID0gW107CiAgICBjb25zdCBjb21taXRtZW50cyA9IFtdOwogICAgY29uc3QgcHJvb2ZzID0gW107CiAgICBpZiAoc2lkZWNhcnMpCiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2lkZWNhcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBjb25zdCB7IGJsb2IsIGNvbW1pdG1lbnQsIHByb29mIH0gPSBzaWRlY2Fyc1tpXTsKICAgICAgICBibG9icy5wdXNoKGJsb2IpOwogICAgICAgIGNvbW1pdG1lbnRzLnB1c2goY29tbWl0bWVudCk7CiAgICAgICAgcHJvb2ZzLnB1c2gocHJvb2YpOwogICAgICB9CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4MDMiLAogICAgICBzaWRlY2FycyA/ICgKICAgICAgICAvLyBJZiBzaWRlY2FycyBhcmUgZW5hYmxlZCwgZW52ZWxvcGUgdHVybnMgaW50byBhICJ3cmFwcGVyIjoKICAgICAgICB0b1JscChbc2VyaWFsaXplZFRyYW5zYWN0aW9uLCBibG9icywgY29tbWl0bWVudHMsIHByb29mc10pCiAgICAgICkgOiAoCiAgICAgICAgLy8gSWYgc2lkZWNhcnMgYXJlIGRpc2FibGVkLCBzdGFuZGFyZCBlbnZlbG9wZSBpcyB1c2VkOgogICAgICAgIHRvUmxwKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikKICAgICAgKQogICAgXSk7CiAgfQogIGZ1bmN0aW9uIHNlcmlhbGl6ZVRyYW5zYWN0aW9uRUlQMTU1OSh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKSB7CiAgICBjb25zdCB7IGNoYWluSWQsIGdhcywgbm9uY2UsIHRvLCB2YWx1ZSwgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgYWNjZXNzTGlzdCwgZGF0YSB9ID0gdHJhbnNhY3Rpb247CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDE1NTkodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2VyaWFsaXplZEFjY2Vzc0xpc3QgPSBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpOwogICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICB0b0hleChjaGFpbklkKSwKICAgICAgbm9uY2UgPyB0b0hleChub25jZSkgOiAiMHgiLAogICAgICBtYXhQcmlvcml0eUZlZVBlckdhcyA/IHRvSGV4KG1heFByaW9yaXR5RmVlUGVyR2FzKSA6ICIweCIsCiAgICAgIG1heEZlZVBlckdhcyA/IHRvSGV4KG1heEZlZVBlckdhcykgOiAiMHgiLAogICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgdG8gPz8gIjB4IiwKICAgICAgdmFsdWUgPyB0b0hleCh2YWx1ZSkgOiAiMHgiLAogICAgICBkYXRhID8/ICIweCIsCiAgICAgIHNlcmlhbGl6ZWRBY2Nlc3NMaXN0LAogICAgICAuLi50b1lQYXJpdHlTaWduYXR1cmVBcnJheSh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKQogICAgXTsKICAgIHJldHVybiBjb25jYXRIZXgoWwogICAgICAiMHgwMiIsCiAgICAgIHRvUmxwKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikKICAgIF0pOwogIH0KICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDI5MzAodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgeyBjaGFpbklkLCBnYXMsIGRhdGEsIG5vbmNlLCB0bywgdmFsdWUsIGFjY2Vzc0xpc3QsIGdhc1ByaWNlIH0gPSB0cmFuc2FjdGlvbjsKICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQMjkzMCh0cmFuc2FjdGlvbik7CiAgICBjb25zdCBzZXJpYWxpemVkQWNjZXNzTGlzdCA9IHNlcmlhbGl6ZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBjb25zdCBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBbCiAgICAgIHRvSGV4KGNoYWluSWQpLAogICAgICBub25jZSA/IHRvSGV4KG5vbmNlKSA6ICIweCIsCiAgICAgIGdhc1ByaWNlID8gdG9IZXgoZ2FzUHJpY2UpIDogIjB4IiwKICAgICAgZ2FzID8gdG9IZXgoZ2FzKSA6ICIweCIsCiAgICAgIHRvID8/ICIweCIsCiAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiLAogICAgICBzZXJpYWxpemVkQWNjZXNzTGlzdCwKICAgICAgLi4udG9ZUGFyaXR5U2lnbmF0dXJlQXJyYXkodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkKICAgIF07CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4MDEiLAogICAgICB0b1JscChzZXJpYWxpemVkVHJhbnNhY3Rpb24pCiAgICBdKTsKICB9CiAgZnVuY3Rpb24gc2VyaWFsaXplVHJhbnNhY3Rpb25MZWdhY3kodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgeyBjaGFpbklkID0gMCwgZ2FzLCBkYXRhLCBub25jZSwgdG8sIHZhbHVlLCBnYXNQcmljZSB9ID0gdHJhbnNhY3Rpb247CiAgICBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSh0cmFuc2FjdGlvbik7CiAgICBsZXQgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICBub25jZSA/IHRvSGV4KG5vbmNlKSA6ICIweCIsCiAgICAgIGdhc1ByaWNlID8gdG9IZXgoZ2FzUHJpY2UpIDogIjB4IiwKICAgICAgZ2FzID8gdG9IZXgoZ2FzKSA6ICIweCIsCiAgICAgIHRvID8/ICIweCIsCiAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiCiAgICBdOwogICAgaWYgKHNpZ25hdHVyZSkgewogICAgICBjb25zdCB2ID0gKCgpID0+IHsKICAgICAgICBpZiAoc2lnbmF0dXJlLnYgPj0gMzVuKSB7CiAgICAgICAgICBjb25zdCBpbmZlcnJlZENoYWluSWQgPSAoc2lnbmF0dXJlLnYgLSAzNW4pIC8gMm47CiAgICAgICAgICBpZiAoaW5mZXJyZWRDaGFpbklkID4gMCkKICAgICAgICAgICAgcmV0dXJuIHNpZ25hdHVyZS52OwogICAgICAgICAgcmV0dXJuIDI3biArIChzaWduYXR1cmUudiA9PT0gMzVuID8gMG4gOiAxbik7CiAgICAgICAgfQogICAgICAgIGlmIChjaGFpbklkID4gMCkKICAgICAgICAgIHJldHVybiBCaWdJbnQoY2hhaW5JZCAqIDIpICsgQmlnSW50KDM1biArIHNpZ25hdHVyZS52IC0gMjduKTsKICAgICAgICBjb25zdCB2MiA9IDI3biArIChzaWduYXR1cmUudiA9PT0gMjduID8gMG4gOiAxbik7CiAgICAgICAgaWYgKHNpZ25hdHVyZS52ICE9PSB2MikKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkTGVnYWN5VkVycm9yKHsgdjogc2lnbmF0dXJlLnYgfSk7CiAgICAgICAgcmV0dXJuIHYyOwogICAgICB9KSgpOwogICAgICBjb25zdCByID0gdHJpbShzaWduYXR1cmUucik7CiAgICAgIGNvbnN0IHMgPSB0cmltKHNpZ25hdHVyZS5zKTsKICAgICAgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICAgIC4uLnNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0b0hleCh2KSwKICAgICAgICByID09PSAiMHgwMCIgPyAiMHgiIDogciwKICAgICAgICBzID09PSAiMHgwMCIgPyAiMHgiIDogcwogICAgICBdOwogICAgfSBlbHNlIGlmIChjaGFpbklkID4gMCkgewogICAgICBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBbCiAgICAgICAgLi4uc2VyaWFsaXplZFRyYW5zYWN0aW9uLAogICAgICAgIHRvSGV4KGNoYWluSWQpLAogICAgICAgICIweCIsCiAgICAgICAgIjB4IgogICAgICBdOwogICAgfQogICAgcmV0dXJuIHRvUmxwKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgfQogIGZ1bmN0aW9uIHRvWVBhcml0eVNpZ25hdHVyZUFycmF5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmVfKSB7CiAgICBjb25zdCBzaWduYXR1cmUgPSBzaWduYXR1cmVfID8/IHRyYW5zYWN0aW9uOwogICAgY29uc3QgeyB2LCB5UGFyaXR5IH0gPSBzaWduYXR1cmU7CiAgICBpZiAodHlwZW9mIHNpZ25hdHVyZS5yID09PSAidW5kZWZpbmVkIikKICAgICAgcmV0dXJuIFtdOwogICAgaWYgKHR5cGVvZiBzaWduYXR1cmUucyA9PT0gInVuZGVmaW5lZCIpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICh0eXBlb2YgdiA9PT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIHlQYXJpdHkgPT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gW107CiAgICBjb25zdCByID0gdHJpbShzaWduYXR1cmUucik7CiAgICBjb25zdCBzID0gdHJpbShzaWduYXR1cmUucyk7CiAgICBjb25zdCB5UGFyaXR5XyA9ICgoKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgeVBhcml0eSA9PT0gIm51bWJlciIpCiAgICAgICAgcmV0dXJuIHlQYXJpdHkgPyB0b0hleCgxKSA6ICIweCI7CiAgICAgIGlmICh2ID09PSAwbikKICAgICAgICByZXR1cm4gIjB4IjsKICAgICAgaWYgKHYgPT09IDFuKQogICAgICAgIHJldHVybiB0b0hleCgxKTsKICAgICAgcmV0dXJuIHYgPT09IDI3biA/ICIweCIgOiB0b0hleCgxKTsKICAgIH0pKCk7CiAgICByZXR1cm4gW3lQYXJpdHlfLCByID09PSAiMHgwMCIgPyAiMHgiIDogciwgcyA9PT0gIjB4MDAiID8gIjB4IiA6IHNdOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L3BhcnNlVW5pdHMuanMKICBmdW5jdGlvbiBwYXJzZVVuaXRzKHZhbHVlLCBkZWNpbWFscykgewogICAgbGV0IFtpbnRlZ2VyLCBmcmFjdGlvbiA9ICIwIl0gPSB2YWx1ZS5zcGxpdCgiLiIpOwogICAgY29uc3QgbmVnYXRpdmUgPSBpbnRlZ2VyLnN0YXJ0c1dpdGgoIi0iKTsKICAgIGlmIChuZWdhdGl2ZSkKICAgICAgaW50ZWdlciA9IGludGVnZXIuc2xpY2UoMSk7CiAgICBmcmFjdGlvbiA9IGZyYWN0aW9uLnJlcGxhY2UoLygwKykkLywgIiIpOwogICAgaWYgKGRlY2ltYWxzID09PSAwKSB7CiAgICAgIGlmIChNYXRoLnJvdW5kKE51bWJlcihgLiR7ZnJhY3Rpb259YCkpID09PSAxKQogICAgICAgIGludGVnZXIgPSBgJHtCaWdJbnQoaW50ZWdlcikgKyAxbn1gOwogICAgICBmcmFjdGlvbiA9ICIiOwogICAgfSBlbHNlIGlmIChmcmFjdGlvbi5sZW5ndGggPiBkZWNpbWFscykgewogICAgICBjb25zdCBbbGVmdCwgdW5pdCwgcmlnaHRdID0gWwogICAgICAgIGZyYWN0aW9uLnNsaWNlKDAsIGRlY2ltYWxzIC0gMSksCiAgICAgICAgZnJhY3Rpb24uc2xpY2UoZGVjaW1hbHMgLSAxLCBkZWNpbWFscyksCiAgICAgICAgZnJhY3Rpb24uc2xpY2UoZGVjaW1hbHMpCiAgICAgIF07CiAgICAgIGNvbnN0IHJvdW5kZWQgPSBNYXRoLnJvdW5kKE51bWJlcihgJHt1bml0fS4ke3JpZ2h0fWApKTsKICAgICAgaWYgKHJvdW5kZWQgPiA5KQogICAgICAgIGZyYWN0aW9uID0gYCR7QmlnSW50KGxlZnQpICsgQmlnSW50KDEpfTBgLnBhZFN0YXJ0KGxlZnQubGVuZ3RoICsgMSwgIjAiKTsKICAgICAgZWxzZQogICAgICAgIGZyYWN0aW9uID0gYCR7bGVmdH0ke3JvdW5kZWR9YDsKICAgICAgaWYgKGZyYWN0aW9uLmxlbmd0aCA+IGRlY2ltYWxzKSB7CiAgICAgICAgZnJhY3Rpb24gPSBmcmFjdGlvbi5zbGljZSgxKTsKICAgICAgICBpbnRlZ2VyID0gYCR7QmlnSW50KGludGVnZXIpICsgMW59YDsKICAgICAgfQogICAgICBmcmFjdGlvbiA9IGZyYWN0aW9uLnNsaWNlKDAsIGRlY2ltYWxzKTsKICAgIH0gZWxzZSB7CiAgICAgIGZyYWN0aW9uID0gZnJhY3Rpb24ucGFkRW5kKGRlY2ltYWxzLCAiMCIpOwogICAgfQogICAgcmV0dXJuIEJpZ0ludChgJHtuZWdhdGl2ZSA/ICItIiA6ICIifSR7aW50ZWdlcn0ke2ZyYWN0aW9ufWApOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L3BhcnNlRXRoZXIuanMKICBpbml0X3VuaXQoKTsKICBmdW5jdGlvbiBwYXJzZUV0aGVyKGV0aGVyLCB1bml0ID0gIndlaSIpIHsKICAgIHJldHVybiBwYXJzZVVuaXRzKGV0aGVyLCBldGhlclVuaXRzW3VuaXRdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9wYXJzZUd3ZWkuanMKICBpbml0X3VuaXQoKTsKICBmdW5jdGlvbiBwYXJzZUd3ZWkoZXRoZXIsIHVuaXQgPSAid2VpIikgewogICAgcmV0dXJuIHBhcnNlVW5pdHMoZXRoZXIsIGd3ZWlVbml0c1t1bml0XSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL25vbmNlTWFuYWdlci5qcwogIGluaXRfbHJ1KCk7CiAgZnVuY3Rpb24gY3JlYXRlTm9uY2VNYW5hZ2VyKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgc291cmNlIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgZGVsdGFNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgY29uc3Qgbm9uY2VNYXAgPSBuZXcgTHJ1TWFwKDgxOTIpOwogICAgY29uc3QgcHJvbWlzZU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBjb25zdCBnZXRLZXkgPSAoeyBhZGRyZXNzLCBjaGFpbklkIH0pID0+IGAke2FkZHJlc3N9LiR7Y2hhaW5JZH1gOwogICAgcmV0dXJuIHsKICAgICAgYXN5bmMgY29uc3VtZSh7IGFkZHJlc3MsIGNoYWluSWQsIGNsaWVudCB9KSB7CiAgICAgICAgY29uc3Qga2V5ID0gZ2V0S2V5KHsgYWRkcmVzcywgY2hhaW5JZCB9KTsKICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5nZXQoeyBhZGRyZXNzLCBjaGFpbklkLCBjbGllbnQgfSk7CiAgICAgICAgdGhpcy5pbmNyZW1lbnQoeyBhZGRyZXNzLCBjaGFpbklkIH0pOwogICAgICAgIGNvbnN0IG5vbmNlID0gYXdhaXQgcHJvbWlzZTsKICAgICAgICBhd2FpdCBzb3VyY2Uuc2V0KHsgYWRkcmVzcywgY2hhaW5JZCB9LCBub25jZSk7CiAgICAgICAgbm9uY2VNYXAuc2V0KGtleSwgbm9uY2UpOwogICAgICAgIHJldHVybiBub25jZTsKICAgICAgfSwKICAgICAgYXN5bmMgaW5jcmVtZW50KHsgYWRkcmVzcywgY2hhaW5JZCB9KSB7CiAgICAgICAgY29uc3Qga2V5ID0gZ2V0S2V5KHsgYWRkcmVzcywgY2hhaW5JZCB9KTsKICAgICAgICBjb25zdCBkZWx0YSA9IGRlbHRhTWFwLmdldChrZXkpID8/IDA7CiAgICAgICAgZGVsdGFNYXAuc2V0KGtleSwgZGVsdGEgKyAxKTsKICAgICAgfSwKICAgICAgYXN5bmMgZ2V0KHsgYWRkcmVzcywgY2hhaW5JZCwgY2xpZW50IH0pIHsKICAgICAgICBjb25zdCBrZXkgPSBnZXRLZXkoeyBhZGRyZXNzLCBjaGFpbklkIH0pOwogICAgICAgIGxldCBwcm9taXNlID0gcHJvbWlzZU1hcC5nZXQoa2V5KTsKICAgICAgICBpZiAoIXByb21pc2UpIHsKICAgICAgICAgIHByb21pc2UgPSAoYXN5bmMgKCkgPT4gewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGNvbnN0IG5vbmNlID0gYXdhaXQgc291cmNlLmdldCh7IGFkZHJlc3MsIGNoYWluSWQsIGNsaWVudCB9KTsKICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c05vbmNlID0gbm9uY2VNYXAuZ2V0KGtleSkgPz8gMDsKICAgICAgICAgICAgICBpZiAocHJldmlvdXNOb25jZSA+IDAgJiYgbm9uY2UgPD0gcHJldmlvdXNOb25jZSkKICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c05vbmNlICsgMTsKICAgICAgICAgICAgICBub25jZU1hcC5kZWxldGUoa2V5KTsKICAgICAgICAgICAgICByZXR1cm4gbm9uY2U7CiAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgdGhpcy5yZXNldCh7IGFkZHJlc3MsIGNoYWluSWQgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pKCk7CiAgICAgICAgICBwcm9taXNlTWFwLnNldChrZXksIHByb21pc2UpOwogICAgICAgIH0KICAgICAgICBjb25zdCBkZWx0YSA9IGRlbHRhTWFwLmdldChrZXkpID8/IDA7CiAgICAgICAgcmV0dXJuIGRlbHRhICsgYXdhaXQgcHJvbWlzZTsKICAgICAgfSwKICAgICAgcmVzZXQoeyBhZGRyZXNzLCBjaGFpbklkIH0pIHsKICAgICAgICBjb25zdCBrZXkgPSBnZXRLZXkoeyBhZGRyZXNzLCBjaGFpbklkIH0pOwogICAgICAgIGRlbHRhTWFwLmRlbGV0ZShrZXkpOwogICAgICAgIHByb21pc2VNYXAuZGVsZXRlKGtleSk7CiAgICAgIH0KICAgIH07CiAgfQogIGZ1bmN0aW9uIGpzb25ScGMoKSB7CiAgICByZXR1cm4gewogICAgICBhc3luYyBnZXQocGFyYW1ldGVycykgewogICAgICAgIGNvbnN0IHsgYWRkcmVzcywgY2xpZW50IH0gPSBwYXJhbWV0ZXJzOwogICAgICAgIHJldHVybiBnZXRUcmFuc2FjdGlvbkNvdW50KGNsaWVudCwgewogICAgICAgICAgYWRkcmVzcywKICAgICAgICAgIGJsb2NrVGFnOiAicGVuZGluZyIKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgc2V0KCkgewogICAgICB9CiAgICB9OwogIH0KICB2YXIgbm9uY2VNYW5hZ2VyID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZU5vbmNlTWFuYWdlcih7CiAgICBzb3VyY2U6IGpzb25ScGMoKQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Zvcm1hdHRlcnMvcHJvb2YuanMKICBmdW5jdGlvbiBmb3JtYXRTdG9yYWdlUHJvb2Yoc3RvcmFnZVByb29mKSB7CiAgICByZXR1cm4gc3RvcmFnZVByb29mLm1hcCgocHJvb2YpID0+ICh7CiAgICAgIC4uLnByb29mLAogICAgICB2YWx1ZTogQmlnSW50KHByb29mLnZhbHVlKQogICAgfSkpOwogIH0KICBmdW5jdGlvbiBmb3JtYXRQcm9vZihwcm9vZikgewogICAgcmV0dXJuIHsKICAgICAgLi4ucHJvb2YsCiAgICAgIGJhbGFuY2U6IHByb29mLmJhbGFuY2UgPyBCaWdJbnQocHJvb2YuYmFsYW5jZSkgOiB2b2lkIDAsCiAgICAgIG5vbmNlOiBwcm9vZi5ub25jZSA/IGhleFRvTnVtYmVyKHByb29mLm5vbmNlKSA6IHZvaWQgMCwKICAgICAgc3RvcmFnZVByb29mOiBwcm9vZi5zdG9yYWdlUHJvb2YgPyBmb3JtYXRTdG9yYWdlUHJvb2YocHJvb2Yuc3RvcmFnZVByb29mKSA6IHZvaWQgMAogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0UHJvb2YuanMKICBhc3luYyBmdW5jdGlvbiBnZXRQcm9vZihjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tOdW1iZXIsIGJsb2NrVGFnOiBibG9ja1RhZ18sIHN0b3JhZ2VLZXlzIH0pIHsKICAgIGNvbnN0IGJsb2NrVGFnID0gYmxvY2tUYWdfID8/ICJsYXRlc3QiOwogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciAhPT0gdm9pZCAwID8gbnVtYmVyVG9IZXgoYmxvY2tOdW1iZXIpIDogdm9pZCAwOwogICAgY29uc3QgcHJvb2YgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRQcm9vZiIsCiAgICAgIHBhcmFtczogW2FkZHJlc3MsIHN0b3JhZ2VLZXlzLCBibG9ja051bWJlckhleCB8fCBibG9ja1RhZ10KICAgIH0pOwogICAgcmV0dXJuIGZvcm1hdFByb29mKHByb29mKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0U3RvcmFnZUF0LmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldFN0b3JhZ2VBdChjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tOdW1iZXIsIGJsb2NrVGFnID0gImxhdGVzdCIsIHNsb3QgfSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciAhPT0gdm9pZCAwID8gbnVtYmVyVG9IZXgoYmxvY2tOdW1iZXIpIDogdm9pZCAwOwogICAgY29uc3QgZGF0YSA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2dldFN0b3JhZ2VBdCIsCiAgICAgIHBhcmFtczogW2FkZHJlc3MsIHNsb3QsIGJsb2NrTnVtYmVySGV4IHx8IGJsb2NrVGFnXQogICAgfSk7CiAgICByZXR1cm4gZGF0YTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0VHJhbnNhY3Rpb24uanMKICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uKGNsaWVudCwgeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyLCBibG9ja1RhZzogYmxvY2tUYWdfLCBoYXNoOiBoYXNoMywgaW5kZXg6IGluZGV4MiB9KSB7CiAgICBjb25zdCBibG9ja1RhZyA9IGJsb2NrVGFnXyB8fCAibGF0ZXN0IjsKICAgIGNvbnN0IGJsb2NrTnVtYmVySGV4ID0gYmxvY2tOdW1iZXIgIT09IHZvaWQgMCA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgIGxldCB0cmFuc2FjdGlvbiA9IG51bGw7CiAgICBpZiAoaGFzaDMpIHsKICAgICAgdHJhbnNhY3Rpb24gPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXRoX2dldFRyYW5zYWN0aW9uQnlIYXNoIiwKICAgICAgICBwYXJhbXM6IFtoYXNoM10KICAgICAgfSwgeyBkZWR1cGU6IHRydWUgfSk7CiAgICB9IGVsc2UgaWYgKGJsb2NrSGFzaCkgewogICAgICB0cmFuc2FjdGlvbiA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0VHJhbnNhY3Rpb25CeUJsb2NrSGFzaEFuZEluZGV4IiwKICAgICAgICBwYXJhbXM6IFtibG9ja0hhc2gsIG51bWJlclRvSGV4KGluZGV4MildCiAgICAgIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgfSBlbHNlIGlmIChibG9ja051bWJlckhleCB8fCBibG9ja1RhZykgewogICAgICB0cmFuc2FjdGlvbiA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0VHJhbnNhY3Rpb25CeUJsb2NrTnVtYmVyQW5kSW5kZXgiLAogICAgICAgIHBhcmFtczogW2Jsb2NrTnVtYmVySGV4IHx8IGJsb2NrVGFnLCBudW1iZXJUb0hleChpbmRleDIpXQogICAgICB9LCB7IGRlZHVwZTogQm9vbGVhbihibG9ja051bWJlckhleCkgfSk7CiAgICB9CiAgICBpZiAoIXRyYW5zYWN0aW9uKQogICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25Ob3RGb3VuZEVycm9yKHsKICAgICAgICBibG9ja0hhc2gsCiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgYmxvY2tUYWcsCiAgICAgICAgaGFzaDogaGFzaDMsCiAgICAgICAgaW5kZXg6IGluZGV4MgogICAgICB9KTsKICAgIGNvbnN0IGZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb24/LmZvcm1hdCB8fCBmb3JtYXRUcmFuc2FjdGlvbjsKICAgIHJldHVybiBmb3JtYXQodHJhbnNhY3Rpb24pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRUcmFuc2FjdGlvbkNvbmZpcm1hdGlvbnMuanMKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvbkNvbmZpcm1hdGlvbnMoY2xpZW50LCB7IGhhc2g6IGhhc2gzLCB0cmFuc2FjdGlvblJlY2VpcHQgfSkgewogICAgY29uc3QgW2Jsb2NrTnVtYmVyLCB0cmFuc2FjdGlvbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgIGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrTnVtYmVyLCAiZ2V0QmxvY2tOdW1iZXIiKSh7fSksCiAgICAgIGhhc2gzID8gZ2V0QWN0aW9uKGNsaWVudCwgZ2V0VHJhbnNhY3Rpb24sICJnZXRUcmFuc2FjdGlvbiIpKHsgaGFzaDogaGFzaDMgfSkgOiB2b2lkIDAKICAgIF0pOwogICAgY29uc3QgdHJhbnNhY3Rpb25CbG9ja051bWJlciA9IHRyYW5zYWN0aW9uUmVjZWlwdD8uYmxvY2tOdW1iZXIgfHwgdHJhbnNhY3Rpb24/LmJsb2NrTnVtYmVyOwogICAgaWYgKCF0cmFuc2FjdGlvbkJsb2NrTnVtYmVyKQogICAgICByZXR1cm4gMG47CiAgICByZXR1cm4gYmxvY2tOdW1iZXIgLSB0cmFuc2FjdGlvbkJsb2NrTnVtYmVyICsgMW47CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldFRyYW5zYWN0aW9uUmVjZWlwdC5qcwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvblJlY2VpcHQoY2xpZW50LCB7IGhhc2g6IGhhc2gzIH0pIHsKICAgIGNvbnN0IHJlY2VpcHQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRUcmFuc2FjdGlvblJlY2VpcHQiLAogICAgICBwYXJhbXM6IFtoYXNoM10KICAgIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgaWYgKCFyZWNlaXB0KQogICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25SZWNlaXB0Tm90Rm91bmRFcnJvcih7IGhhc2g6IGhhc2gzIH0pOwogICAgY29uc3QgZm9ybWF0ID0gY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzPy50cmFuc2FjdGlvblJlY2VpcHQ/LmZvcm1hdCB8fCBmb3JtYXRUcmFuc2FjdGlvblJlY2VpcHQ7CiAgICByZXR1cm4gZm9ybWF0KHJlY2VpcHQpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9tdWx0aWNhbGwuanMKICBpbml0X2FiaXMoKTsKICBpbml0X2FiaSgpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY29udHJhY3QoKTsKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2dldENoYWluQ29udHJhY3RBZGRyZXNzKCk7CiAgYXN5bmMgZnVuY3Rpb24gbXVsdGljYWxsKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhbGxvd0ZhaWx1cmUgPSB0cnVlLCBiYXRjaFNpemU6IGJhdGNoU2l6ZV8sIGJsb2NrTnVtYmVyLCBibG9ja1RhZywgbXVsdGljYWxsQWRkcmVzczogbXVsdGljYWxsQWRkcmVzc18sIHN0YXRlT3ZlcnJpZGUgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjb250cmFjdHMyID0gcGFyYW1ldGVycy5jb250cmFjdHM7CiAgICBjb25zdCBiYXRjaFNpemUgPSBiYXRjaFNpemVfID8/ICh0eXBlb2YgY2xpZW50LmJhdGNoPy5tdWx0aWNhbGwgPT09ICJvYmplY3QiICYmIGNsaWVudC5iYXRjaC5tdWx0aWNhbGwuYmF0Y2hTaXplIHx8IDEwMjQpOwogICAgbGV0IG11bHRpY2FsbEFkZHJlc3MgPSBtdWx0aWNhbGxBZGRyZXNzXzsKICAgIGlmICghbXVsdGljYWxsQWRkcmVzcykgewogICAgICBpZiAoIWNsaWVudC5jaGFpbikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNsaWVudCBjaGFpbiBub3QgY29uZmlndXJlZC4gbXVsdGljYWxsQWRkcmVzcyBpcyByZXF1aXJlZC4iKTsKICAgICAgbXVsdGljYWxsQWRkcmVzcyA9IGdldENoYWluQ29udHJhY3RBZGRyZXNzKHsKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBjaGFpbjogY2xpZW50LmNoYWluLAogICAgICAgIGNvbnRyYWN0OiAibXVsdGljYWxsMyIKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBjaHVua2VkQ2FsbHMgPSBbW11dOwogICAgbGV0IGN1cnJlbnRDaHVuayA9IDA7CiAgICBsZXQgY3VycmVudENodW5rU2l6ZSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyYWN0czIubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGZ1bmN0aW9uTmFtZSB9ID0gY29udHJhY3RzMltpXTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBjYWxsRGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7IGFiaTogYWJpMiwgYXJncywgZnVuY3Rpb25OYW1lIH0pOwogICAgICAgIGN1cnJlbnRDaHVua1NpemUgKz0gKGNhbGxEYXRhLmxlbmd0aCAtIDIpIC8gMjsKICAgICAgICBpZiAoCiAgICAgICAgICAvLyBDaGVjayBpZiBiYXRjaGluZyBpcyBlbmFibGVkLgogICAgICAgICAgYmF0Y2hTaXplID4gMCAmJiAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBzaXplIG9mIHRoZSBiYXRjaCBleGNlZWRzIHRoZSBzaXplIGxpbWl0LgogICAgICAgICAgY3VycmVudENodW5rU2l6ZSA+IGJhdGNoU2l6ZSAmJiAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBjaHVuayBpcyBub3QgYWxyZWFkeSBlbXB0eS4KICAgICAgICAgIGNodW5rZWRDYWxsc1tjdXJyZW50Q2h1bmtdLmxlbmd0aCA+IDAKICAgICAgICApIHsKICAgICAgICAgIGN1cnJlbnRDaHVuaysrOwogICAgICAgICAgY3VycmVudENodW5rU2l6ZSA9IChjYWxsRGF0YS5sZW5ndGggLSAyKSAvIDI7CiAgICAgICAgICBjaHVua2VkQ2FsbHNbY3VycmVudENodW5rXSA9IFtdOwogICAgICAgIH0KICAgICAgICBjaHVua2VkQ2FsbHNbY3VycmVudENodW5rXSA9IFsKICAgICAgICAgIC4uLmNodW5rZWRDYWxsc1tjdXJyZW50Q2h1bmtdLAogICAgICAgICAgewogICAgICAgICAgICBhbGxvd0ZhaWx1cmU6IHRydWUsCiAgICAgICAgICAgIGNhbGxEYXRhLAogICAgICAgICAgICB0YXJnZXQ6IGFkZHJlc3MKICAgICAgICAgIH0KICAgICAgICBdOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zdCBlcnJvciA9IGdldENvbnRyYWN0RXJyb3IoZXJyLCB7CiAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgYXJncywKICAgICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3QvbXVsdGljYWxsIiwKICAgICAgICAgIGZ1bmN0aW9uTmFtZQogICAgICAgIH0pOwogICAgICAgIGlmICghYWxsb3dGYWlsdXJlKQogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgY2h1bmtlZENhbGxzW2N1cnJlbnRDaHVua10gPSBbCiAgICAgICAgICAuLi5jaHVua2VkQ2FsbHNbY3VycmVudENodW5rXSwKICAgICAgICAgIHsKICAgICAgICAgICAgYWxsb3dGYWlsdXJlOiB0cnVlLAogICAgICAgICAgICBjYWxsRGF0YTogIjB4IiwKICAgICAgICAgICAgdGFyZ2V0OiBhZGRyZXNzCiAgICAgICAgICB9CiAgICAgICAgXTsKICAgICAgfQogICAgfQogICAgY29uc3QgYWdncmVnYXRlM1Jlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoY2h1bmtlZENhbGxzLm1hcCgoY2FsbHMpID0+IGdldEFjdGlvbihjbGllbnQsIHJlYWRDb250cmFjdCwgInJlYWRDb250cmFjdCIpKHsKICAgICAgYWJpOiBtdWx0aWNhbGwzQWJpLAogICAgICBhZGRyZXNzOiBtdWx0aWNhbGxBZGRyZXNzLAogICAgICBhcmdzOiBbY2FsbHNdLAogICAgICBibG9ja051bWJlciwKICAgICAgYmxvY2tUYWcsCiAgICAgIGZ1bmN0aW9uTmFtZTogImFnZ3JlZ2F0ZTMiLAogICAgICBzdGF0ZU92ZXJyaWRlCiAgICB9KSkpOwogICAgY29uc3QgcmVzdWx0cyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZ2dyZWdhdGUzUmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCByZXN1bHQgPSBhZ2dyZWdhdGUzUmVzdWx0c1tpXTsKICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICJyZWplY3RlZCIpIHsKICAgICAgICBpZiAoIWFsbG93RmFpbHVyZSkKICAgICAgICAgIHRocm93IHJlc3VsdC5yZWFzb247CiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaHVua2VkQ2FsbHNbaV0ubGVuZ3RoOyBqKyspIHsKICAgICAgICAgIHJlc3VsdHMucHVzaCh7CiAgICAgICAgICAgIHN0YXR1czogImZhaWx1cmUiLAogICAgICAgICAgICBlcnJvcjogcmVzdWx0LnJlYXNvbiwKICAgICAgICAgICAgcmVzdWx0OiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBhZ2dyZWdhdGUzUmVzdWx0ID0gcmVzdWx0LnZhbHVlOwogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFnZ3JlZ2F0ZTNSZXN1bHQubGVuZ3RoOyBqKyspIHsKICAgICAgICBjb25zdCB7IHJldHVybkRhdGEsIHN1Y2Nlc3MgfSA9IGFnZ3JlZ2F0ZTNSZXN1bHRbal07CiAgICAgICAgY29uc3QgeyBjYWxsRGF0YSB9ID0gY2h1bmtlZENhbGxzW2ldW2pdOwogICAgICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhZGRyZXNzLCBmdW5jdGlvbk5hbWUsIGFyZ3MgfSA9IGNvbnRyYWN0czJbcmVzdWx0cy5sZW5ndGhdOwogICAgICAgIHRyeSB7CiAgICAgICAgICBpZiAoY2FsbERhdGEgPT09ICIweCIpCiAgICAgICAgICAgIHRocm93IG5ldyBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IoKTsKICAgICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgdGhyb3cgbmV3IFJhd0NvbnRyYWN0RXJyb3IoeyBkYXRhOiByZXR1cm5EYXRhIH0pOwogICAgICAgICAgY29uc3QgcmVzdWx0MiA9IGRlY29kZUZ1bmN0aW9uUmVzdWx0KHsKICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICBhcmdzLAogICAgICAgICAgICBkYXRhOiByZXR1cm5EYXRhLAogICAgICAgICAgICBmdW5jdGlvbk5hbWUKICAgICAgICAgIH0pOwogICAgICAgICAgcmVzdWx0cy5wdXNoKGFsbG93RmFpbHVyZSA/IHsgcmVzdWx0OiByZXN1bHQyLCBzdGF0dXM6ICJzdWNjZXNzIiB9IDogcmVzdWx0Mik7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBjb25zdCBlcnJvciA9IGdldENvbnRyYWN0RXJyb3IoZXJyLCB7CiAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgYWRkcmVzcywKICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9jb250cmFjdC9tdWx0aWNhbGwiLAogICAgICAgICAgICBmdW5jdGlvbk5hbWUKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFhbGxvd0ZhaWx1cmUpCiAgICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgICAgcmVzdWx0cy5wdXNoKHsgZXJyb3IsIHJlc3VsdDogdm9pZCAwLCBzdGF0dXM6ICJmYWlsdXJlIiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChyZXN1bHRzLmxlbmd0aCAhPT0gY29udHJhY3RzMi5sZW5ndGgpCiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJtdWx0aWNhbGwgcmVzdWx0cyBtaXNtYXRjaCIpOwogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3ZlcmlmeUhhc2guanMKICBpbml0X2FiaXMoKTsKICBpbml0X2NvbnRyYWN0cygpOwogIGluaXRfY29udHJhY3QoKTsKICBpbml0X2VuY29kZURlcGxveURhdGEoKTsKICBpbml0X2dldEFkZHJlc3MoKTsKICBpbml0X2lzQWRkcmVzc0VxdWFsKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9pc0J5dGVzRXF1YWwuanMKICBpbml0X3V0aWxzNCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfaXNIZXgoKTsKICBmdW5jdGlvbiBpc0J5dGVzRXF1YWwoYV8sIGJfKSB7CiAgICBjb25zdCBhID0gaXNIZXgoYV8pID8gdG9CeXRlcyhhXykgOiBhXzsKICAgIGNvbnN0IGIgPSBpc0hleChiXykgPyB0b0J5dGVzKGJfKSA6IGJfOwogICAgcmV0dXJuIGVxdWFsQnl0ZXMoYSwgYik7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3ZlcmlmeUhhc2guanMKICBpbml0X2lzSGV4KCk7CiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3NpZ25hdHVyZS9zZXJpYWxpemVTaWduYXR1cmUuanMKICBpbml0X3NlY3AyNTZrMSgpOwogIGluaXRfZnJvbUhleCgpOwogIGluaXRfdG9CeXRlcygpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZVNpZ25hdHVyZSh7IHIsIHMsIHRvID0gImhleCIsIHYsIHlQYXJpdHkgfSkgewogICAgY29uc3QgeVBhcml0eV8gPSAoKCkgPT4gewogICAgICBpZiAoeVBhcml0eSA9PT0gMCB8fCB5UGFyaXR5ID09PSAxKQogICAgICAgIHJldHVybiB5UGFyaXR5OwogICAgICBpZiAodiAmJiAodiA9PT0gMjduIHx8IHYgPT09IDI4biB8fCB2ID49IDM1bikpCiAgICAgICAgcmV0dXJuIHYgJSAybiA9PT0gMG4gPyAxIDogMDsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGB2YCBvciBgeVBhcml0eWAgdmFsdWUiKTsKICAgIH0pKCk7CiAgICBjb25zdCBzaWduYXR1cmUgPSBgMHgke25ldyBzZWNwMjU2azEuU2lnbmF0dXJlKGhleFRvQmlnSW50KHIpLCBoZXhUb0JpZ0ludChzKSkudG9Db21wYWN0SGV4KCl9JHt5UGFyaXR5XyA9PT0gMCA/ICIxYiIgOiAiMWMifWA7CiAgICBpZiAodG8gPT09ICJoZXgiKQogICAgICByZXR1cm4gc2lnbmF0dXJlOwogICAgcmV0dXJuIGhleFRvQnl0ZXMoc2lnbmF0dXJlKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvdmVyaWZ5SGFzaC5qcwogIGluaXRfY2FsbCgpOwogIGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUhhc2gyKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhZGRyZXNzLCBmYWN0b3J5LCBmYWN0b3J5RGF0YSwgaGFzaDogaGFzaDMsIHNpZ25hdHVyZSwgLi4ucmVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZUhleCA9ICgoKSA9PiB7CiAgICAgIGlmIChpc0hleChzaWduYXR1cmUpKQogICAgICAgIHJldHVybiBzaWduYXR1cmU7CiAgICAgIGlmICh0eXBlb2Ygc2lnbmF0dXJlID09PSAib2JqZWN0IiAmJiAiciIgaW4gc2lnbmF0dXJlICYmICJzIiBpbiBzaWduYXR1cmUpCiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVNpZ25hdHVyZShzaWduYXR1cmUpOwogICAgICByZXR1cm4gYnl0ZXNUb0hleChzaWduYXR1cmUpOwogICAgfSkoKTsKICAgIGNvbnN0IHdyYXBwZWRTaWduYXR1cmUgPSBhd2FpdCAoYXN5bmMgKCkgPT4gewogICAgICBpZiAoIWZhY3RvcnkgJiYgIWZhY3RvcnlEYXRhKQogICAgICAgIHJldHVybiBzaWduYXR1cmVIZXg7CiAgICAgIGlmIChpc0VyYzY0OTJTaWduYXR1cmUoc2lnbmF0dXJlSGV4KSkKICAgICAgICByZXR1cm4gc2lnbmF0dXJlSGV4OwogICAgICByZXR1cm4gc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZSh7CiAgICAgICAgYWRkcmVzczogZmFjdG9yeSwKICAgICAgICBkYXRhOiBmYWN0b3J5RGF0YSwKICAgICAgICBzaWduYXR1cmU6IHNpZ25hdHVyZUhleAogICAgICB9KTsKICAgIH0pKCk7CiAgICB0cnkgewogICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGNhbGwsICJjYWxsIikoewogICAgICAgIGRhdGE6IGVuY29kZURlcGxveURhdGEoewogICAgICAgICAgYWJpOiB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JBYmksCiAgICAgICAgICBhcmdzOiBbYWRkcmVzcywgaGFzaDMsIHdyYXBwZWRTaWduYXR1cmVdLAogICAgICAgICAgYnl0ZWNvZGU6IHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckJ5dGVDb2RlCiAgICAgICAgfSksCiAgICAgICAgLi4ucmVzdAogICAgICB9KTsKICAgICAgcmV0dXJuIGlzQnl0ZXNFcXVhbChkYXRhID8/ICIweDAiLCAiMHgxIik7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICB0cnkgewogICAgICAgIGNvbnN0IHZlcmlmaWVkID0gaXNBZGRyZXNzRXF1YWwoZ2V0QWRkcmVzcyhhZGRyZXNzKSwgYXdhaXQgcmVjb3ZlckFkZHJlc3MoeyBoYXNoOiBoYXNoMywgc2lnbmF0dXJlIH0pKTsKICAgICAgICBpZiAodmVyaWZpZWQpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSBjYXRjaCB7CiAgICAgIH0KICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ2FsbEV4ZWN1dGlvbkVycm9yKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHRocm93IGVycm9yOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy92ZXJpZnlNZXNzYWdlLmpzCiAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5TWVzc2FnZTIoY2xpZW50LCB7IGFkZHJlc3MsIG1lc3NhZ2UsIGZhY3RvcnksIGZhY3RvcnlEYXRhLCBzaWduYXR1cmUsIC4uLmNhbGxSZXF1ZXN0IH0pIHsKICAgIGNvbnN0IGhhc2gzID0gaGFzaE1lc3NhZ2UobWVzc2FnZSk7CiAgICByZXR1cm4gdmVyaWZ5SGFzaDIoY2xpZW50LCB7CiAgICAgIGFkZHJlc3MsCiAgICAgIGZhY3RvcnksCiAgICAgIGZhY3RvcnlEYXRhLAogICAgICBoYXNoOiBoYXNoMywKICAgICAgc2lnbmF0dXJlLAogICAgICAuLi5jYWxsUmVxdWVzdAogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3ZlcmlmeVR5cGVkRGF0YS5qcwogIGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVR5cGVkRGF0YTIoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGZhY3RvcnksIGZhY3RvcnlEYXRhLCBzaWduYXR1cmUsIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcywgZG9tYWluLCAuLi5jYWxsUmVxdWVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGhhc2gzID0gaGFzaFR5cGVkRGF0YSh7IG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcywgZG9tYWluIH0pOwogICAgcmV0dXJuIHZlcmlmeUhhc2gyKGNsaWVudCwgewogICAgICBhZGRyZXNzLAogICAgICBmYWN0b3J5LAogICAgICBmYWN0b3J5RGF0YSwKICAgICAgaGFzaDogaGFzaDMsCiAgICAgIHNpZ25hdHVyZSwKICAgICAgLi4uY2FsbFJlcXVlc3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy93YWl0Rm9yVHJhbnNhY3Rpb25SZWNlaXB0LmpzCiAgaW5pdF90cmFuc2FjdGlvbigpOwogIGluaXRfc3RyaW5naWZ5KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvd2F0Y2hCbG9ja051bWJlci5qcwogIGluaXRfZnJvbUhleCgpOwogIGluaXRfc3RyaW5naWZ5KCk7CiAgZnVuY3Rpb24gd2F0Y2hCbG9ja051bWJlcihjbGllbnQsIHsgZW1pdE9uQmVnaW4gPSBmYWxzZSwgZW1pdE1pc3NlZCA9IGZhbHNlLCBvbkJsb2NrTnVtYmVyLCBvbkVycm9yLCBwb2xsOiBwb2xsXywgcG9sbGluZ0ludGVydmFsID0gY2xpZW50LnBvbGxpbmdJbnRlcnZhbCB9KSB7CiAgICBjb25zdCBlbmFibGVQb2xsaW5nID0gKCgpID0+IHsKICAgICAgaWYgKHR5cGVvZiBwb2xsXyAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgcmV0dXJuIHBvbGxfOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAid2ViU29ja2V0IikKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIgJiYgY2xpZW50LnRyYW5zcG9ydC50cmFuc3BvcnRzWzBdLmNvbmZpZy50eXBlID09PSAid2ViU29ja2V0IikKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSkoKTsKICAgIGxldCBwcmV2QmxvY2tOdW1iZXI7CiAgICBjb25zdCBwb2xsQmxvY2tOdW1iZXIgPSAoKSA9PiB7CiAgICAgIGNvbnN0IG9ic2VydmVySWQgPSBzdHJpbmdpZnkoWwogICAgICAgICJ3YXRjaEJsb2NrTnVtYmVyIiwKICAgICAgICBjbGllbnQudWlkLAogICAgICAgIGVtaXRPbkJlZ2luLAogICAgICAgIGVtaXRNaXNzZWQsCiAgICAgICAgcG9sbGluZ0ludGVydmFsCiAgICAgIF0pOwogICAgICByZXR1cm4gb2JzZXJ2ZShvYnNlcnZlcklkLCB7IG9uQmxvY2tOdW1iZXIsIG9uRXJyb3IgfSwgKGVtaXQpID0+IHBvbGwoYXN5bmMgKCkgPT4gewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBibG9ja051bWJlciA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrTnVtYmVyLCAiZ2V0QmxvY2tOdW1iZXIiKSh7IGNhY2hlVGltZTogMCB9KTsKICAgICAgICAgIGlmIChwcmV2QmxvY2tOdW1iZXIpIHsKICAgICAgICAgICAgaWYgKGJsb2NrTnVtYmVyID09PSBwcmV2QmxvY2tOdW1iZXIpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoYmxvY2tOdW1iZXIgLSBwcmV2QmxvY2tOdW1iZXIgPiAxICYmIGVtaXRNaXNzZWQpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBpID0gcHJldkJsb2NrTnVtYmVyICsgMW47IGkgPCBibG9ja051bWJlcjsgaSsrKSB7CiAgICAgICAgICAgICAgICBlbWl0Lm9uQmxvY2tOdW1iZXIoaSwgcHJldkJsb2NrTnVtYmVyKTsKICAgICAgICAgICAgICAgIHByZXZCbG9ja051bWJlciA9IGk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXByZXZCbG9ja051bWJlciB8fCBibG9ja051bWJlciA+IHByZXZCbG9ja051bWJlcikgewogICAgICAgICAgICBlbWl0Lm9uQmxvY2tOdW1iZXIoYmxvY2tOdW1iZXIsIHByZXZCbG9ja051bWJlcik7CiAgICAgICAgICAgIHByZXZCbG9ja051bWJlciA9IGJsb2NrTnVtYmVyOwogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgZW1pdC5vbkVycm9yPy4oZXJyKTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBlbWl0T25CZWdpbiwKICAgICAgICBpbnRlcnZhbDogcG9sbGluZ0ludGVydmFsCiAgICAgIH0pKTsKICAgIH07CiAgICBjb25zdCBzdWJzY3JpYmVCbG9ja051bWJlciA9ICgpID0+IHsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoQmxvY2tOdW1iZXIiLAogICAgICAgIGNsaWVudC51aWQsCiAgICAgICAgZW1pdE9uQmVnaW4sCiAgICAgICAgZW1pdE1pc3NlZAogICAgICBdKTsKICAgICAgcmV0dXJuIG9ic2VydmUob2JzZXJ2ZXJJZCwgeyBvbkJsb2NrTnVtYmVyLCBvbkVycm9yIH0sIChlbWl0KSA9PiB7CiAgICAgICAgbGV0IGFjdGl2ZSA9IHRydWU7CiAgICAgICAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydCA9ICgoKSA9PiB7CiAgICAgICAgICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gImZhbGxiYWNrIikgewogICAgICAgICAgICAgICAgY29uc3QgdHJhbnNwb3J0MiA9IGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0cy5maW5kKCh0cmFuc3BvcnQzKSA9PiB0cmFuc3BvcnQzLmNvbmZpZy50eXBlID09PSAid2ViU29ja2V0Iik7CiAgICAgICAgICAgICAgICBpZiAoIXRyYW5zcG9ydDIpCiAgICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zcG9ydDIudmFsdWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgICB9KSgpOwogICAgICAgICAgICBjb25zdCB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZV8gfSA9IGF3YWl0IHRyYW5zcG9ydC5zdWJzY3JpYmUoewogICAgICAgICAgICAgIHBhcmFtczogWyJuZXdIZWFkcyJdLAogICAgICAgICAgICAgIG9uRGF0YShkYXRhKSB7CiAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgY29uc3QgYmxvY2tOdW1iZXIgPSBoZXhUb0JpZ0ludChkYXRhLnJlc3VsdD8ubnVtYmVyKTsKICAgICAgICAgICAgICAgIGVtaXQub25CbG9ja051bWJlcihibG9ja051bWJlciwgcHJldkJsb2NrTnVtYmVyKTsKICAgICAgICAgICAgICAgIHByZXZCbG9ja051bWJlciA9IGJsb2NrTnVtYmVyOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgb25FcnJvcihlcnJvcikgewogICAgICAgICAgICAgICAgZW1pdC5vbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgICB1bnN1YnNjcmliZSgpOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIG9uRXJyb3I/LihlcnIpOwogICAgICAgICAgfQogICAgICAgIH0pKCk7CiAgICAgICAgcmV0dXJuICgpID0+IHVuc3Vic2NyaWJlKCk7CiAgICAgIH0pOwogICAgfTsKICAgIHJldHVybiBlbmFibGVQb2xsaW5nID8gcG9sbEJsb2NrTnVtYmVyKCkgOiBzdWJzY3JpYmVCbG9ja051bWJlcigpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy93YWl0Rm9yVHJhbnNhY3Rpb25SZWNlaXB0LmpzCiAgYXN5bmMgZnVuY3Rpb24gd2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdChjbGllbnQsIHsKICAgIGNvbmZpcm1hdGlvbnMgPSAxLAogICAgaGFzaDogaGFzaDMsCiAgICBvblJlcGxhY2VkLAogICAgcG9sbGluZ0ludGVydmFsID0gY2xpZW50LnBvbGxpbmdJbnRlcnZhbCwKICAgIHJldHJ5Q291bnQgPSA2LAogICAgcmV0cnlEZWxheSA9ICh7IGNvdW50IH0pID0+IH5+KDEgPDwgY291bnQpICogMjAwLAogICAgLy8gZXhwb25lbnRpYWwgYmFja29mZgogICAgdGltZW91dAogIH0pIHsKICAgIGNvbnN0IG9ic2VydmVySWQgPSBzdHJpbmdpZnkoWyJ3YWl0Rm9yVHJhbnNhY3Rpb25SZWNlaXB0IiwgY2xpZW50LnVpZCwgaGFzaDNdKTsKICAgIGxldCBjb3VudCA9IDA7CiAgICBsZXQgdHJhbnNhY3Rpb247CiAgICBsZXQgcmVwbGFjZWRUcmFuc2FjdGlvbjsKICAgIGxldCByZWNlaXB0OwogICAgbGV0IHJldHJ5aW5nID0gZmFsc2U7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICBpZiAodGltZW91dCkKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvcih7IGhhc2g6IGhhc2gzIH0pKSwgdGltZW91dCk7CiAgICAgIGNvbnN0IF91bm9ic2VydmUgPSBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25SZXBsYWNlZCwgcmVzb2x2ZSwgcmVqZWN0IH0sIChlbWl0KSA9PiB7CiAgICAgICAgY29uc3QgX3Vud2F0Y2ggPSBnZXRBY3Rpb24oY2xpZW50LCB3YXRjaEJsb2NrTnVtYmVyLCAid2F0Y2hCbG9ja051bWJlciIpKHsKICAgICAgICAgIGVtaXRNaXNzZWQ6IHRydWUsCiAgICAgICAgICBlbWl0T25CZWdpbjogdHJ1ZSwKICAgICAgICAgIHBvbGw6IHRydWUsCiAgICAgICAgICBwb2xsaW5nSW50ZXJ2YWwsCiAgICAgICAgICBhc3luYyBvbkJsb2NrTnVtYmVyKGJsb2NrTnVtYmVyXykgewogICAgICAgICAgICBjb25zdCBkb25lID0gKGZuKSA9PiB7CiAgICAgICAgICAgICAgX3Vud2F0Y2goKTsKICAgICAgICAgICAgICBmbigpOwogICAgICAgICAgICAgIF91bm9ic2VydmUoKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgbGV0IGJsb2NrTnVtYmVyID0gYmxvY2tOdW1iZXJfOwogICAgICAgICAgICBpZiAocmV0cnlpbmcpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoY291bnQgPiByZXRyeUNvdW50KQogICAgICAgICAgICAgIGRvbmUoKCkgPT4gZW1pdC5yZWplY3QobmV3IFdhaXRGb3JUcmFuc2FjdGlvblJlY2VpcHRUaW1lb3V0RXJyb3IoeyBoYXNoOiBoYXNoMyB9KSkpOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGlmIChyZWNlaXB0KSB7CiAgICAgICAgICAgICAgICBpZiAoY29uZmlybWF0aW9ucyA+IDEgJiYgKCFyZWNlaXB0LmJsb2NrTnVtYmVyIHx8IGJsb2NrTnVtYmVyIC0gcmVjZWlwdC5ibG9ja051bWJlciArIDFuIDwgY29uZmlybWF0aW9ucykpCiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGRvbmUoKCkgPT4gZW1pdC5yZXNvbHZlKHJlY2VpcHQpKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbikgewogICAgICAgICAgICAgICAgcmV0cnlpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgYXdhaXQgd2l0aFJldHJ5KGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24gPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRUcmFuc2FjdGlvbiwgImdldFRyYW5zYWN0aW9uIikoeyBoYXNoOiBoYXNoMyB9KTsKICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zYWN0aW9uLmJsb2NrTnVtYmVyKQogICAgICAgICAgICAgICAgICAgIGJsb2NrTnVtYmVyID0gdHJhbnNhY3Rpb24uYmxvY2tOdW1iZXI7CiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgIGRlbGF5OiByZXRyeURlbGF5LAogICAgICAgICAgICAgICAgICByZXRyeUNvdW50CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHJ5aW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJlY2VpcHQgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRUcmFuc2FjdGlvblJlY2VpcHQsICJnZXRUcmFuc2FjdGlvblJlY2VpcHQiKSh7IGhhc2g6IGhhc2gzIH0pOwogICAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25zID4gMSAmJiAoIXJlY2VpcHQuYmxvY2tOdW1iZXIgfHwgYmxvY2tOdW1iZXIgLSByZWNlaXB0LmJsb2NrTnVtYmVyICsgMW4gPCBjb25maXJtYXRpb25zKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICBkb25lKCgpID0+IGVtaXQucmVzb2x2ZShyZWNlaXB0KSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUcmFuc2FjdGlvbk5vdEZvdW5kRXJyb3IgfHwgZXJyIGluc3RhbmNlb2YgVHJhbnNhY3Rpb25SZWNlaXB0Tm90Rm91bmRFcnJvcikgewogICAgICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbikgewogICAgICAgICAgICAgICAgICByZXRyeWluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICByZXBsYWNlZFRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247CiAgICAgICAgICAgICAgICAgIHJldHJ5aW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBhd2FpdCB3aXRoUmV0cnkoKCkgPT4gZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2ssICJnZXRCbG9jayIpKHsKICAgICAgICAgICAgICAgICAgICBibG9ja051bWJlciwKICAgICAgICAgICAgICAgICAgICBpbmNsdWRlVHJhbnNhY3Rpb25zOiB0cnVlCiAgICAgICAgICAgICAgICAgIH0pLCB7CiAgICAgICAgICAgICAgICAgICAgZGVsYXk6IHJldHJ5RGVsYXksCiAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudCwKICAgICAgICAgICAgICAgICAgICBzaG91bGRSZXRyeTogKHsgZXJyb3IgfSkgPT4gZXJyb3IgaW5zdGFuY2VvZiBCbG9ja05vdEZvdW5kRXJyb3IKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIHJldHJ5aW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50VHJhbnNhY3Rpb24gPSBibG9jay50cmFuc2FjdGlvbnMuZmluZCgoeyBmcm9tLCBub25jZSB9KSA9PiBmcm9tID09PSByZXBsYWNlZFRyYW5zYWN0aW9uLmZyb20gJiYgbm9uY2UgPT09IHJlcGxhY2VkVHJhbnNhY3Rpb24ubm9uY2UpOwogICAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2VtZW50VHJhbnNhY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICByZWNlaXB0ID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0VHJhbnNhY3Rpb25SZWNlaXB0LCAiZ2V0VHJhbnNhY3Rpb25SZWNlaXB0IikoewogICAgICAgICAgICAgICAgICAgIGhhc2g6IHJlcGxhY2VtZW50VHJhbnNhY3Rpb24uaGFzaAogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbnMgPiAxICYmICghcmVjZWlwdC5ibG9ja051bWJlciB8fCBibG9ja051bWJlciAtIHJlY2VpcHQuYmxvY2tOdW1iZXIgKyAxbiA8IGNvbmZpcm1hdGlvbnMpKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgbGV0IHJlYXNvbiA9ICJyZXBsYWNlZCI7CiAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudFRyYW5zYWN0aW9uLnRvID09PSByZXBsYWNlZFRyYW5zYWN0aW9uLnRvICYmIHJlcGxhY2VtZW50VHJhbnNhY3Rpb24udmFsdWUgPT09IHJlcGxhY2VkVHJhbnNhY3Rpb24udmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICByZWFzb24gPSAicmVwcmljZWQiOwogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcGxhY2VtZW50VHJhbnNhY3Rpb24uZnJvbSA9PT0gcmVwbGFjZW1lbnRUcmFuc2FjdGlvbi50byAmJiByZXBsYWNlbWVudFRyYW5zYWN0aW9uLnZhbHVlID09PSAwbikgewogICAgICAgICAgICAgICAgICAgIHJlYXNvbiA9ICJjYW5jZWxsZWQiOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGRvbmUoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGVtaXQub25SZXBsYWNlZD8uKHsKICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbiwKICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VkVHJhbnNhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbjogcmVwbGFjZW1lbnRUcmFuc2FjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUmVjZWlwdDogcmVjZWlwdAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGVtaXQucmVzb2x2ZShyZWNlaXB0KTsKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJfKSB7CiAgICAgICAgICAgICAgICAgIGRvbmUoKCkgPT4gZW1pdC5yZWplY3QoZXJyXykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkb25lKCgpID0+IGVtaXQucmVqZWN0KGVycikpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3dhdGNoQmxvY2tzLmpzCiAgaW5pdF9zdHJpbmdpZnkoKTsKICBmdW5jdGlvbiB3YXRjaEJsb2NrcyhjbGllbnQsIHsgYmxvY2tUYWcgPSAibGF0ZXN0IiwgZW1pdE1pc3NlZCA9IGZhbHNlLCBlbWl0T25CZWdpbiA9IGZhbHNlLCBvbkJsb2NrLCBvbkVycm9yLCBpbmNsdWRlVHJhbnNhY3Rpb25zOiBpbmNsdWRlVHJhbnNhY3Rpb25zXywgcG9sbDogcG9sbF8sIHBvbGxpbmdJbnRlcnZhbCA9IGNsaWVudC5wb2xsaW5nSW50ZXJ2YWwgfSkgewogICAgY29uc3QgZW5hYmxlUG9sbGluZyA9ICgoKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgcG9sbF8gIT09ICJ1bmRlZmluZWQiKQogICAgICAgIHJldHVybiBwb2xsXzsKICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAiZmFsbGJhY2siICYmIGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0c1swXS5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pKCk7CiAgICBjb25zdCBpbmNsdWRlVHJhbnNhY3Rpb25zID0gaW5jbHVkZVRyYW5zYWN0aW9uc18gPz8gZmFsc2U7CiAgICBsZXQgcHJldkJsb2NrOwogICAgY29uc3QgcG9sbEJsb2NrcyA9ICgpID0+IHsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoQmxvY2tzIiwKICAgICAgICBjbGllbnQudWlkLAogICAgICAgIGJsb2NrVGFnLAogICAgICAgIGVtaXRNaXNzZWQsCiAgICAgICAgZW1pdE9uQmVnaW4sCiAgICAgICAgaW5jbHVkZVRyYW5zYWN0aW9ucywKICAgICAgICBwb2xsaW5nSW50ZXJ2YWwKICAgICAgXSk7CiAgICAgIHJldHVybiBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25CbG9jaywgb25FcnJvciB9LCAoZW1pdCkgPT4gcG9sbChhc3luYyAoKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGJsb2NrID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2ssICJnZXRCbG9jayIpKHsKICAgICAgICAgICAgYmxvY2tUYWcsCiAgICAgICAgICAgIGluY2x1ZGVUcmFuc2FjdGlvbnMKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGJsb2NrLm51bWJlciAmJiBwcmV2QmxvY2s/Lm51bWJlcikgewogICAgICAgICAgICBpZiAoYmxvY2subnVtYmVyID09PSBwcmV2QmxvY2subnVtYmVyKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGJsb2NrLm51bWJlciAtIHByZXZCbG9jay5udW1iZXIgPiAxICYmIGVtaXRNaXNzZWQpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBpID0gcHJldkJsb2NrPy5udW1iZXIgKyAxbjsgaSA8IGJsb2NrLm51bWJlcjsgaSsrKSB7CiAgICAgICAgICAgICAgICBjb25zdCBibG9jazIgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRCbG9jaywgImdldEJsb2NrIikoewogICAgICAgICAgICAgICAgICBibG9ja051bWJlcjogaSwKICAgICAgICAgICAgICAgICAgaW5jbHVkZVRyYW5zYWN0aW9ucwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBlbWl0Lm9uQmxvY2soYmxvY2syLCBwcmV2QmxvY2spOwogICAgICAgICAgICAgICAgcHJldkJsb2NrID0gYmxvY2syOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKAogICAgICAgICAgICAvLyBJZiBubyBwcmV2aW91cyBibG9jayBleGlzdHMsIGVtaXQuCiAgICAgICAgICAgICFwcmV2QmxvY2s/Lm51bWJlciB8fCAvLyBJZiB0aGUgYmxvY2sgdGFnIGlzICJwZW5kaW5nIiB3aXRoIG5vIGJsb2NrIG51bWJlciwgZW1pdC4KICAgICAgICAgICAgYmxvY2tUYWcgPT09ICJwZW5kaW5nIiAmJiAhYmxvY2s/Lm51bWJlciB8fCAvLyBJZiB0aGUgbmV4dCBibG9jayBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSBwcmV2aW91cyBibG9jayBudW1iZXIsIGVtaXQuCiAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZW1pdCBibG9ja3MgaW4gdGhlIHBhc3QuCiAgICAgICAgICAgIGJsb2NrLm51bWJlciAmJiBibG9jay5udW1iZXIgPiBwcmV2QmxvY2subnVtYmVyCiAgICAgICAgICApIHsKICAgICAgICAgICAgZW1pdC5vbkJsb2NrKGJsb2NrLCBwcmV2QmxvY2spOwogICAgICAgICAgICBwcmV2QmxvY2sgPSBibG9jazsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGVtaXQub25FcnJvcj8uKGVycik7CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAgZW1pdE9uQmVnaW4sCiAgICAgICAgaW50ZXJ2YWw6IHBvbGxpbmdJbnRlcnZhbAogICAgICB9KSk7CiAgICB9OwogICAgY29uc3Qgc3Vic2NyaWJlQmxvY2tzID0gKCkgPT4gewogICAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgICAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICAgIChhc3luYyAoKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydCA9ICgoKSA9PiB7CiAgICAgICAgICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIpIHsKICAgICAgICAgICAgICBjb25zdCB0cmFuc3BvcnQyID0gY2xpZW50LnRyYW5zcG9ydC50cmFuc3BvcnRzLmZpbmQoKHRyYW5zcG9ydDMpID0+IHRyYW5zcG9ydDMuY29uZmlnLnR5cGUgPT09ICJ3ZWJTb2NrZXQiKTsKICAgICAgICAgICAgICBpZiAoIXRyYW5zcG9ydDIpCiAgICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgICAgICByZXR1cm4gdHJhbnNwb3J0Mi52YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgIH0pKCk7CiAgICAgICAgICBjb25zdCB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZV8gfSA9IGF3YWl0IHRyYW5zcG9ydC5zdWJzY3JpYmUoewogICAgICAgICAgICBwYXJhbXM6IFsibmV3SGVhZHMiXSwKICAgICAgICAgICAgb25EYXRhKGRhdGEpIHsKICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBjbGllbnQuY2hhaW4/LmZvcm1hdHRlcnM/LmJsb2NrPy5mb3JtYXQgfHwgZm9ybWF0QmxvY2s7CiAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBmb3JtYXQoZGF0YS5yZXN1bHQpOwogICAgICAgICAgICAgIG9uQmxvY2soYmxvY2ssIHByZXZCbG9jayk7CiAgICAgICAgICAgICAgcHJldkJsb2NrID0gYmxvY2s7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uRXJyb3IoZXJyb3IpIHsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBvbkVycm9yPy4oZXJyKTsKICAgICAgICB9CiAgICAgIH0pKCk7CiAgICAgIHJldHVybiAoKSA9PiB1bnN1YnNjcmliZSgpOwogICAgfTsKICAgIHJldHVybiBlbmFibGVQb2xsaW5nID8gcG9sbEJsb2NrcygpIDogc3Vic2NyaWJlQmxvY2tzKCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3dhdGNoRXZlbnQuanMKICBpbml0X3N0cmluZ2lmeSgpOwogIGluaXRfYWJpKCk7CiAgaW5pdF9ycGMoKTsKICBmdW5jdGlvbiB3YXRjaEV2ZW50KGNsaWVudCwgeyBhZGRyZXNzLCBhcmdzLCBiYXRjaCA9IHRydWUsIGV2ZW50LCBldmVudHMsIGZyb21CbG9jaywgb25FcnJvciwgb25Mb2dzLCBwb2xsOiBwb2xsXywgcG9sbGluZ0ludGVydmFsID0gY2xpZW50LnBvbGxpbmdJbnRlcnZhbCwgc3RyaWN0OiBzdHJpY3RfIH0pIHsKICAgIGNvbnN0IGVuYWJsZVBvbGxpbmcgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIHBvbGxfICE9PSAidW5kZWZpbmVkIikKICAgICAgICByZXR1cm4gcG9sbF87CiAgICAgIGlmICh0eXBlb2YgZnJvbUJsb2NrID09PSAiYmlnaW50IikKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAiZmFsbGJhY2siICYmIGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0c1swXS5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pKCk7CiAgICBjb25zdCBzdHJpY3QgPSBzdHJpY3RfID8/IGZhbHNlOwogICAgY29uc3QgcG9sbEV2ZW50ID0gKCkgPT4gewogICAgICBjb25zdCBvYnNlcnZlcklkID0gc3RyaW5naWZ5KFsKICAgICAgICAid2F0Y2hFdmVudCIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGJhdGNoLAogICAgICAgIGNsaWVudC51aWQsCiAgICAgICAgZXZlbnQsCiAgICAgICAgcG9sbGluZ0ludGVydmFsLAogICAgICAgIGZyb21CbG9jawogICAgICBdKTsKICAgICAgcmV0dXJuIG9ic2VydmUob2JzZXJ2ZXJJZCwgeyBvbkxvZ3MsIG9uRXJyb3IgfSwgKGVtaXQpID0+IHsKICAgICAgICBsZXQgcHJldmlvdXNCbG9ja051bWJlcjsKICAgICAgICBpZiAoZnJvbUJsb2NrICE9PSB2b2lkIDApCiAgICAgICAgICBwcmV2aW91c0Jsb2NrTnVtYmVyID0gZnJvbUJsb2NrIC0gMW47CiAgICAgICAgbGV0IGZpbHRlcjsKICAgICAgICBsZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICAgICBjb25zdCB1bndhdGNoID0gcG9sbChhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAoIWluaXRpYWxpemVkKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgZmlsdGVyID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgY3JlYXRlRXZlbnRGaWx0ZXIsICJjcmVhdGVFdmVudEZpbHRlciIpKHsKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgZXZlbnQsCiAgICAgICAgICAgICAgICBldmVudHMsCiAgICAgICAgICAgICAgICBzdHJpY3QsCiAgICAgICAgICAgICAgICBmcm9tQmxvY2sKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBsZXQgbG9nczsKICAgICAgICAgICAgaWYgKGZpbHRlcikgewogICAgICAgICAgICAgIGxvZ3MgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRGaWx0ZXJDaGFuZ2VzLCAiZ2V0RmlsdGVyQ2hhbmdlcyIpKHsgZmlsdGVyIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnN0IGJsb2NrTnVtYmVyID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2tOdW1iZXIsICJnZXRCbG9ja051bWJlciIpKHt9KTsKICAgICAgICAgICAgICBpZiAocHJldmlvdXNCbG9ja051bWJlciAmJiBwcmV2aW91c0Jsb2NrTnVtYmVyICE9PSBibG9ja051bWJlcikgewogICAgICAgICAgICAgICAgbG9ncyA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldExvZ3MsICJnZXRMb2dzIikoewogICAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgICBldmVudCwKICAgICAgICAgICAgICAgICAgZXZlbnRzLAogICAgICAgICAgICAgICAgICBmcm9tQmxvY2s6IHByZXZpb3VzQmxvY2tOdW1iZXIgKyAxbiwKICAgICAgICAgICAgICAgICAgdG9CbG9jazogYmxvY2tOdW1iZXIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBsb2dzID0gW107CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHByZXZpb3VzQmxvY2tOdW1iZXIgPSBibG9ja051bWJlcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobG9ncy5sZW5ndGggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoYmF0Y2gpCiAgICAgICAgICAgICAgZW1pdC5vbkxvZ3MobG9ncyk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxvZyBvZiBsb2dzKQogICAgICAgICAgICAgICAgZW1pdC5vbkxvZ3MoW2xvZ10pOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGlmIChmaWx0ZXIgJiYgZXJyIGluc3RhbmNlb2YgSW52YWxpZElucHV0UnBjRXJyb3IpCiAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICAgICAgICAgZW1pdC5vbkVycm9yPy4oZXJyKTsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBlbWl0T25CZWdpbjogdHJ1ZSwKICAgICAgICAgIGludGVydmFsOiBwb2xsaW5nSW50ZXJ2YWwKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4gewogICAgICAgICAgaWYgKGZpbHRlcikKICAgICAgICAgICAgYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgdW5pbnN0YWxsRmlsdGVyLCAidW5pbnN0YWxsRmlsdGVyIikoeyBmaWx0ZXIgfSk7CiAgICAgICAgICB1bndhdGNoKCk7CiAgICAgICAgfTsKICAgICAgfSk7CiAgICB9OwogICAgY29uc3Qgc3Vic2NyaWJlRXZlbnQgPSAoKSA9PiB7CiAgICAgIGxldCBhY3RpdmUgPSB0cnVlOwogICAgICBsZXQgdW5zdWJzY3JpYmUgPSAoKSA9PiBhY3RpdmUgPSBmYWxzZTsKICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgdHJhbnNwb3J0ID0gKCgpID0+IHsKICAgICAgICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gImZhbGxiYWNrIikgewogICAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydDIgPSBjbGllbnQudHJhbnNwb3J0LnRyYW5zcG9ydHMuZmluZCgodHJhbnNwb3J0MykgPT4gdHJhbnNwb3J0My5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpOwogICAgICAgICAgICAgIGlmICghdHJhbnNwb3J0MikKICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgICAgIHJldHVybiB0cmFuc3BvcnQyLnZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgfSkoKTsKICAgICAgICAgIGNvbnN0IGV2ZW50c18gPSBldmVudHMgPz8gKGV2ZW50ID8gW2V2ZW50XSA6IHZvaWQgMCk7CiAgICAgICAgICBsZXQgdG9waWNzID0gW107CiAgICAgICAgICBpZiAoZXZlbnRzXykgewogICAgICAgICAgICBjb25zdCBlbmNvZGVkID0gZXZlbnRzXy5mbGF0TWFwKChldmVudDIpID0+IGVuY29kZUV2ZW50VG9waWNzKHsKICAgICAgICAgICAgICBhYmk6IFtldmVudDJdLAogICAgICAgICAgICAgIGV2ZW50TmFtZTogZXZlbnQyLm5hbWUsCiAgICAgICAgICAgICAgYXJncwogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIHRvcGljcyA9IFtlbmNvZGVkXTsKICAgICAgICAgICAgaWYgKGV2ZW50KQogICAgICAgICAgICAgIHRvcGljcyA9IHRvcGljc1swXTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHsgdW5zdWJzY3JpYmU6IHVuc3Vic2NyaWJlXyB9ID0gYXdhaXQgdHJhbnNwb3J0LnN1YnNjcmliZSh7CiAgICAgICAgICAgIHBhcmFtczogWyJsb2dzIiwgeyBhZGRyZXNzLCB0b3BpY3MgfV0sCiAgICAgICAgICAgIG9uRGF0YShkYXRhKSB7CiAgICAgICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgY29uc3QgbG9nID0gZGF0YS5yZXN1bHQ7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGNvbnN0IHsgZXZlbnROYW1lLCBhcmdzOiBhcmdzMiB9ID0gZGVjb2RlRXZlbnRMb2coewogICAgICAgICAgICAgICAgICBhYmk6IGV2ZW50c18gPz8gW10sCiAgICAgICAgICAgICAgICAgIGRhdGE6IGxvZy5kYXRhLAogICAgICAgICAgICAgICAgICB0b3BpY3M6IGxvZy50b3BpY3MsCiAgICAgICAgICAgICAgICAgIHN0cmljdAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2cobG9nLCB7IGFyZ3M6IGFyZ3MyLCBldmVudE5hbWUgfSk7CiAgICAgICAgICAgICAgICBvbkxvZ3MoW2Zvcm1hdHRlZF0pOwogICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgbGV0IGV2ZW50TmFtZTsKICAgICAgICAgICAgICAgIGxldCBpc1VubmFtZWQ7CiAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRGVjb2RlTG9nRGF0YU1pc21hdGNoIHx8IGVyciBpbnN0YW5jZW9mIERlY29kZUxvZ1RvcGljc01pc21hdGNoKSB7CiAgICAgICAgICAgICAgICAgIGlmIChzdHJpY3RfKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgZXZlbnROYW1lID0gZXJyLmFiaUl0ZW0ubmFtZTsKICAgICAgICAgICAgICAgICAgaXNVbm5hbWVkID0gZXJyLmFiaUl0ZW0uaW5wdXRzPy5zb21lKCh4KSA9PiAhKCJuYW1lIiBpbiB4ICYmIHgubmFtZSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TG9nKGxvZywgewogICAgICAgICAgICAgICAgICBhcmdzOiBpc1VubmFtZWQgPyBbXSA6IHt9LAogICAgICAgICAgICAgICAgICBldmVudE5hbWUKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgb25Mb2dzKFtmb3JtYXR0ZWRdKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uRXJyb3IoZXJyb3IpIHsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBvbkVycm9yPy4oZXJyKTsKICAgICAgICB9CiAgICAgIH0pKCk7CiAgICAgIHJldHVybiAoKSA9PiB1bnN1YnNjcmliZSgpOwogICAgfTsKICAgIHJldHVybiBlbmFibGVQb2xsaW5nID8gcG9sbEV2ZW50KCkgOiBzdWJzY3JpYmVFdmVudCgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy93YXRjaFBlbmRpbmdUcmFuc2FjdGlvbnMuanMKICBpbml0X3N0cmluZ2lmeSgpOwogIGZ1bmN0aW9uIHdhdGNoUGVuZGluZ1RyYW5zYWN0aW9ucyhjbGllbnQsIHsgYmF0Y2ggPSB0cnVlLCBvbkVycm9yLCBvblRyYW5zYWN0aW9ucywgcG9sbDogcG9sbF8sIHBvbGxpbmdJbnRlcnZhbCA9IGNsaWVudC5wb2xsaW5nSW50ZXJ2YWwgfSkgewogICAgY29uc3QgZW5hYmxlUG9sbGluZyA9IHR5cGVvZiBwb2xsXyAhPT0gInVuZGVmaW5lZCIgPyBwb2xsXyA6IGNsaWVudC50cmFuc3BvcnQudHlwZSAhPT0gIndlYlNvY2tldCI7CiAgICBjb25zdCBwb2xsUGVuZGluZ1RyYW5zYWN0aW9ucyA9ICgpID0+IHsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoUGVuZGluZ1RyYW5zYWN0aW9ucyIsCiAgICAgICAgY2xpZW50LnVpZCwKICAgICAgICBiYXRjaCwKICAgICAgICBwb2xsaW5nSW50ZXJ2YWwKICAgICAgXSk7CiAgICAgIHJldHVybiBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25UcmFuc2FjdGlvbnMsIG9uRXJyb3IgfSwgKGVtaXQpID0+IHsKICAgICAgICBsZXQgZmlsdGVyOwogICAgICAgIGNvbnN0IHVud2F0Y2ggPSBwb2xsKGFzeW5jICgpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICghZmlsdGVyKSB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGZpbHRlciA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGNyZWF0ZVBlbmRpbmdUcmFuc2FjdGlvbkZpbHRlciwgImNyZWF0ZVBlbmRpbmdUcmFuc2FjdGlvbkZpbHRlciIpKHt9KTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICAgIHVud2F0Y2goKTsKICAgICAgICAgICAgICAgIHRocm93IGVycjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgaGFzaGVzID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0RmlsdGVyQ2hhbmdlcywgImdldEZpbHRlckNoYW5nZXMiKSh7IGZpbHRlciB9KTsKICAgICAgICAgICAgaWYgKGhhc2hlcy5sZW5ndGggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoYmF0Y2gpCiAgICAgICAgICAgICAgZW1pdC5vblRyYW5zYWN0aW9ucyhoYXNoZXMpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgZm9yIChjb25zdCBoYXNoMyBvZiBoYXNoZXMpCiAgICAgICAgICAgICAgICBlbWl0Lm9uVHJhbnNhY3Rpb25zKFtoYXNoM10pOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGVtaXQub25FcnJvcj8uKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgZW1pdE9uQmVnaW46IHRydWUsCiAgICAgICAgICBpbnRlcnZhbDogcG9sbGluZ0ludGVydmFsCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChmaWx0ZXIpCiAgICAgICAgICAgIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHVuaW5zdGFsbEZpbHRlciwgInVuaW5zdGFsbEZpbHRlciIpKHsgZmlsdGVyIH0pOwogICAgICAgICAgdW53YXRjaCgpOwogICAgICAgIH07CiAgICAgIH0pOwogICAgfTsKICAgIGNvbnN0IHN1YnNjcmliZVBlbmRpbmdUcmFuc2FjdGlvbnMgPSAoKSA9PiB7CiAgICAgIGxldCBhY3RpdmUgPSB0cnVlOwogICAgICBsZXQgdW5zdWJzY3JpYmUgPSAoKSA9PiBhY3RpdmUgPSBmYWxzZTsKICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgeyB1bnN1YnNjcmliZTogdW5zdWJzY3JpYmVfIH0gPSBhd2FpdCBjbGllbnQudHJhbnNwb3J0LnN1YnNjcmliZSh7CiAgICAgICAgICAgIHBhcmFtczogWyJuZXdQZW5kaW5nVHJhbnNhY3Rpb25zIl0sCiAgICAgICAgICAgIG9uRGF0YShkYXRhKSB7CiAgICAgICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYXRhLnJlc3VsdDsKICAgICAgICAgICAgICBvblRyYW5zYWN0aW9ucyhbdHJhbnNhY3Rpb25dKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25FcnJvcihlcnJvcikgewogICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZV87CiAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgdW5zdWJzY3JpYmUoKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIG9uRXJyb3I/LihlcnIpOwogICAgICAgIH0KICAgICAgfSkoKTsKICAgICAgcmV0dXJuICgpID0+IHVuc3Vic2NyaWJlKCk7CiAgICB9OwogICAgcmV0dXJuIGVuYWJsZVBvbGxpbmcgPyBwb2xsUGVuZGluZ1RyYW5zYWN0aW9ucygpIDogc3Vic2NyaWJlUGVuZGluZ1RyYW5zYWN0aW9ucygpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaXdlL3BhcnNlU2l3ZU1lc3NhZ2UuanMKICBmdW5jdGlvbiBwYXJzZVNpd2VNZXNzYWdlKG1lc3NhZ2UpIHsKICAgIGNvbnN0IHsgc2NoZW1lLCBzdGF0ZW1lbnQsIC4uLnByZWZpeCB9ID0gbWVzc2FnZS5tYXRjaChwcmVmaXhSZWdleCk/Lmdyb3VwcyA/PyB7fTsKICAgIGNvbnN0IHsgY2hhaW5JZCwgZXhwaXJhdGlvblRpbWUsIGlzc3VlZEF0LCBub3RCZWZvcmUsIHJlcXVlc3RJZCwgLi4uc3VmZml4IH0gPSBtZXNzYWdlLm1hdGNoKHN1ZmZpeFJlZ2V4KT8uZ3JvdXBzID8/IHt9OwogICAgY29uc3QgcmVzb3VyY2VzID0gbWVzc2FnZS5zcGxpdCgiUmVzb3VyY2VzOiIpWzFdPy5zcGxpdCgiXG4tICIpLnNsaWNlKDEpOwogICAgcmV0dXJuIHsKICAgICAgLi4ucHJlZml4LAogICAgICAuLi5zdWZmaXgsCiAgICAgIC4uLmNoYWluSWQgPyB7IGNoYWluSWQ6IE51bWJlcihjaGFpbklkKSB9IDoge30sCiAgICAgIC4uLmV4cGlyYXRpb25UaW1lID8geyBleHBpcmF0aW9uVGltZTogbmV3IERhdGUoZXhwaXJhdGlvblRpbWUpIH0gOiB7fSwKICAgICAgLi4uaXNzdWVkQXQgPyB7IGlzc3VlZEF0OiBuZXcgRGF0ZShpc3N1ZWRBdCkgfSA6IHt9LAogICAgICAuLi5ub3RCZWZvcmUgPyB7IG5vdEJlZm9yZTogbmV3IERhdGUobm90QmVmb3JlKSB9IDoge30sCiAgICAgIC4uLnJlcXVlc3RJZCA/IHsgcmVxdWVzdElkIH0gOiB7fSwKICAgICAgLi4ucmVzb3VyY2VzID8geyByZXNvdXJjZXMgfSA6IHt9LAogICAgICAuLi5zY2hlbWUgPyB7IHNjaGVtZSB9IDoge30sCiAgICAgIC4uLnN0YXRlbWVudCA/IHsgc3RhdGVtZW50IH0gOiB7fQogICAgfTsKICB9CiAgdmFyIHByZWZpeFJlZ2V4ID0gL14oPzooPzxzY2hlbWU+W2EtekEtWl1bYS16QS1aMC05Ky0uXSopOlwvXC8pPyg/PGRvbWFpbj5bYS16QS1aMC05Ky0uXSooPzo6WzAtOV17MSw1fSk/KSAoPzp3YW50cyB5b3UgdG8gc2lnbiBpbiB3aXRoIHlvdXIgRXRoZXJldW0gYWNjb3VudDpcbikoPzxhZGRyZXNzPjB4W2EtZkEtRjAtOV17NDB9KVxuXG4oPzooPzxzdGF0ZW1lbnQ+LiopXG5cbik/LzsKICB2YXIgc3VmZml4UmVnZXggPSAvKD86VVJJOiAoPzx1cmk+LispKVxuKD86VmVyc2lvbjogKD88dmVyc2lvbj4uKykpXG4oPzpDaGFpbiBJRDogKD88Y2hhaW5JZD5cZCspKVxuKD86Tm9uY2U6ICg/PG5vbmNlPlthLXpBLVowLTldKykpXG4oPzpJc3N1ZWQgQXQ6ICg/PGlzc3VlZEF0Pi4rKSkoPzpcbkV4cGlyYXRpb24gVGltZTogKD88ZXhwaXJhdGlvblRpbWU+LispKT8oPzpcbk5vdCBCZWZvcmU6ICg/PG5vdEJlZm9yZT4uKykpPyg/OlxuUmVxdWVzdCBJRDogKD88cmVxdWVzdElkPi4rKSk/LzsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaXdlL3ZhbGlkYXRlU2l3ZU1lc3NhZ2UuanMKICBpbml0X2lzQWRkcmVzc0VxdWFsKCk7CiAgZnVuY3Rpb24gdmFsaWRhdGVTaXdlTWVzc2FnZShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGRvbWFpbiwgbWVzc2FnZSwgbm9uY2UsIHNjaGVtZSwgdGltZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpIH0gPSBwYXJhbWV0ZXJzOwogICAgaWYgKGRvbWFpbiAmJiBtZXNzYWdlLmRvbWFpbiAhPT0gZG9tYWluKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAobm9uY2UgJiYgbWVzc2FnZS5ub25jZSAhPT0gbm9uY2UpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChzY2hlbWUgJiYgbWVzc2FnZS5zY2hlbWUgIT09IHNjaGVtZSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKG1lc3NhZ2UuZXhwaXJhdGlvblRpbWUgJiYgdGltZSA+PSBtZXNzYWdlLmV4cGlyYXRpb25UaW1lKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAobWVzc2FnZS5ub3RCZWZvcmUgJiYgdGltZSA8IG1lc3NhZ2Uubm90QmVmb3JlKQogICAgICByZXR1cm4gZmFsc2U7CiAgICB0cnkgewogICAgICBpZiAoIW1lc3NhZ2UuYWRkcmVzcykKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChhZGRyZXNzICYmICFpc0FkZHJlc3NFcXVhbChtZXNzYWdlLmFkZHJlc3MsIGFkZHJlc3MpKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gY2F0Y2ggewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9zaXdlL3ZlcmlmeVNpd2VNZXNzYWdlLmpzCiAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5U2l3ZU1lc3NhZ2UoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGRvbWFpbiwgbWVzc2FnZSwgbm9uY2UsIHNjaGVtZSwgc2lnbmF0dXJlLCB0aW1lID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCksIC4uLmNhbGxSZXF1ZXN0IH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgcGFyc2VkID0gcGFyc2VTaXdlTWVzc2FnZShtZXNzYWdlKTsKICAgIGlmICghcGFyc2VkLmFkZHJlc3MpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZVNpd2VNZXNzYWdlKHsKICAgICAgYWRkcmVzcywKICAgICAgZG9tYWluLAogICAgICBtZXNzYWdlOiBwYXJzZWQsCiAgICAgIG5vbmNlLAogICAgICBzY2hlbWUsCiAgICAgIHRpbWUKICAgIH0pOwogICAgaWYgKCFpc1ZhbGlkKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBjb25zdCBoYXNoMyA9IGhhc2hNZXNzYWdlKG1lc3NhZ2UpOwogICAgcmV0dXJuIHZlcmlmeUhhc2gyKGNsaWVudCwgewogICAgICBhZGRyZXNzOiBwYXJzZWQuYWRkcmVzcywKICAgICAgaGFzaDogaGFzaDMsCiAgICAgIHNpZ25hdHVyZSwKICAgICAgLi4uY2FsbFJlcXVlc3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2RlY29yYXRvcnMvcHVibGljLmpzCiAgZnVuY3Rpb24gcHVibGljQWN0aW9ucyhjbGllbnQpIHsKICAgIHJldHVybiB7CiAgICAgIGNhbGw6IChhcmdzKSA9PiBjYWxsKGNsaWVudCwgYXJncyksCiAgICAgIGNyZWF0ZUJsb2NrRmlsdGVyOiAoKSA9PiBjcmVhdGVCbG9ja0ZpbHRlcihjbGllbnQpLAogICAgICBjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyOiAoYXJncykgPT4gY3JlYXRlQ29udHJhY3RFdmVudEZpbHRlcihjbGllbnQsIGFyZ3MpLAogICAgICBjcmVhdGVFdmVudEZpbHRlcjogKGFyZ3MpID0+IGNyZWF0ZUV2ZW50RmlsdGVyKGNsaWVudCwgYXJncyksCiAgICAgIGNyZWF0ZVBlbmRpbmdUcmFuc2FjdGlvbkZpbHRlcjogKCkgPT4gY3JlYXRlUGVuZGluZ1RyYW5zYWN0aW9uRmlsdGVyKGNsaWVudCksCiAgICAgIGVzdGltYXRlQ29udHJhY3RHYXM6IChhcmdzKSA9PiBlc3RpbWF0ZUNvbnRyYWN0R2FzKGNsaWVudCwgYXJncyksCiAgICAgIGVzdGltYXRlR2FzOiAoYXJncykgPT4gZXN0aW1hdGVHYXMoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0QmFsYW5jZTogKGFyZ3MpID0+IGdldEJhbGFuY2UoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0QmxvYkJhc2VGZWU6ICgpID0+IGdldEJsb2JCYXNlRmVlKGNsaWVudCksCiAgICAgIGdldEJsb2NrOiAoYXJncykgPT4gZ2V0QmxvY2soY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0QmxvY2tOdW1iZXI6IChhcmdzKSA9PiBnZXRCbG9ja051bWJlcihjbGllbnQsIGFyZ3MpLAogICAgICBnZXRCbG9ja1RyYW5zYWN0aW9uQ291bnQ6IChhcmdzKSA9PiBnZXRCbG9ja1RyYW5zYWN0aW9uQ291bnQoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0Qnl0ZWNvZGU6IChhcmdzKSA9PiBnZXRDb2RlKGNsaWVudCwgYXJncyksCiAgICAgIGdldENoYWluSWQ6ICgpID0+IGdldENoYWluSWQoY2xpZW50KSwKICAgICAgZ2V0Q29kZTogKGFyZ3MpID0+IGdldENvZGUoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0Q29udHJhY3RFdmVudHM6IChhcmdzKSA9PiBnZXRDb250cmFjdEV2ZW50cyhjbGllbnQsIGFyZ3MpLAogICAgICBnZXRFaXA3MTJEb21haW46IChhcmdzKSA9PiBnZXRFaXA3MTJEb21haW4oY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RW5zQWRkcmVzczogKGFyZ3MpID0+IGdldEVuc0FkZHJlc3MoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RW5zQXZhdGFyOiAoYXJncykgPT4gZ2V0RW5zQXZhdGFyKGNsaWVudCwgYXJncyksCiAgICAgIGdldEVuc05hbWU6IChhcmdzKSA9PiBnZXRFbnNOYW1lKGNsaWVudCwgYXJncyksCiAgICAgIGdldEVuc1Jlc29sdmVyOiAoYXJncykgPT4gZ2V0RW5zUmVzb2x2ZXIoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RW5zVGV4dDogKGFyZ3MpID0+IGdldEVuc1RleHQoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RmVlSGlzdG9yeTogKGFyZ3MpID0+IGdldEZlZUhpc3RvcnkoY2xpZW50LCBhcmdzKSwKICAgICAgZXN0aW1hdGVGZWVzUGVyR2FzOiAoYXJncykgPT4gZXN0aW1hdGVGZWVzUGVyR2FzKGNsaWVudCwgYXJncyksCiAgICAgIGdldEZpbHRlckNoYW5nZXM6IChhcmdzKSA9PiBnZXRGaWx0ZXJDaGFuZ2VzKGNsaWVudCwgYXJncyksCiAgICAgIGdldEZpbHRlckxvZ3M6IChhcmdzKSA9PiBnZXRGaWx0ZXJMb2dzKGNsaWVudCwgYXJncyksCiAgICAgIGdldEdhc1ByaWNlOiAoKSA9PiBnZXRHYXNQcmljZShjbGllbnQpLAogICAgICBnZXRMb2dzOiAoYXJncykgPT4gZ2V0TG9ncyhjbGllbnQsIGFyZ3MpLAogICAgICBnZXRQcm9vZjogKGFyZ3MpID0+IGdldFByb29mKGNsaWVudCwgYXJncyksCiAgICAgIGVzdGltYXRlTWF4UHJpb3JpdHlGZWVQZXJHYXM6IChhcmdzKSA9PiBlc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzKGNsaWVudCwgYXJncyksCiAgICAgIGdldFN0b3JhZ2VBdDogKGFyZ3MpID0+IGdldFN0b3JhZ2VBdChjbGllbnQsIGFyZ3MpLAogICAgICBnZXRUcmFuc2FjdGlvbjogKGFyZ3MpID0+IGdldFRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgIGdldFRyYW5zYWN0aW9uQ29uZmlybWF0aW9uczogKGFyZ3MpID0+IGdldFRyYW5zYWN0aW9uQ29uZmlybWF0aW9ucyhjbGllbnQsIGFyZ3MpLAogICAgICBnZXRUcmFuc2FjdGlvbkNvdW50OiAoYXJncykgPT4gZ2V0VHJhbnNhY3Rpb25Db3VudChjbGllbnQsIGFyZ3MpLAogICAgICBnZXRUcmFuc2FjdGlvblJlY2VpcHQ6IChhcmdzKSA9PiBnZXRUcmFuc2FjdGlvblJlY2VpcHQoY2xpZW50LCBhcmdzKSwKICAgICAgbXVsdGljYWxsOiAoYXJncykgPT4gbXVsdGljYWxsKGNsaWVudCwgYXJncyksCiAgICAgIHByZXBhcmVUcmFuc2FjdGlvblJlcXVlc3Q6IChhcmdzKSA9PiBwcmVwYXJlVHJhbnNhY3Rpb25SZXF1ZXN0KGNsaWVudCwgYXJncyksCiAgICAgIHJlYWRDb250cmFjdDogKGFyZ3MpID0+IHJlYWRDb250cmFjdChjbGllbnQsIGFyZ3MpLAogICAgICBzZW5kUmF3VHJhbnNhY3Rpb246IChhcmdzKSA9PiBzZW5kUmF3VHJhbnNhY3Rpb24oY2xpZW50LCBhcmdzKSwKICAgICAgc2ltdWxhdGVDb250cmFjdDogKGFyZ3MpID0+IHNpbXVsYXRlQ29udHJhY3QoY2xpZW50LCBhcmdzKSwKICAgICAgdmVyaWZ5TWVzc2FnZTogKGFyZ3MpID0+IHZlcmlmeU1lc3NhZ2UyKGNsaWVudCwgYXJncyksCiAgICAgIHZlcmlmeVNpd2VNZXNzYWdlOiAoYXJncykgPT4gdmVyaWZ5U2l3ZU1lc3NhZ2UoY2xpZW50LCBhcmdzKSwKICAgICAgdmVyaWZ5VHlwZWREYXRhOiAoYXJncykgPT4gdmVyaWZ5VHlwZWREYXRhMihjbGllbnQsIGFyZ3MpLAogICAgICB1bmluc3RhbGxGaWx0ZXI6IChhcmdzKSA9PiB1bmluc3RhbGxGaWx0ZXIoY2xpZW50LCBhcmdzKSwKICAgICAgd2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdDogKGFyZ3MpID0+IHdhaXRGb3JUcmFuc2FjdGlvblJlY2VpcHQoY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hCbG9ja3M6IChhcmdzKSA9PiB3YXRjaEJsb2NrcyhjbGllbnQsIGFyZ3MpLAogICAgICB3YXRjaEJsb2NrTnVtYmVyOiAoYXJncykgPT4gd2F0Y2hCbG9ja051bWJlcihjbGllbnQsIGFyZ3MpLAogICAgICB3YXRjaENvbnRyYWN0RXZlbnQ6IChhcmdzKSA9PiB3YXRjaENvbnRyYWN0RXZlbnQoY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hFdmVudDogKGFyZ3MpID0+IHdhdGNoRXZlbnQoY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hQZW5kaW5nVHJhbnNhY3Rpb25zOiAoYXJncykgPT4gd2F0Y2hQZW5kaW5nVHJhbnNhY3Rpb25zKGNsaWVudCwgYXJncykKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvY3JlYXRlUHVibGljQ2xpZW50LmpzCiAgZnVuY3Rpb24gY3JlYXRlUHVibGljQ2xpZW50KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsga2V5ID0gInB1YmxpYyIsIG5hbWUgPSAiUHVibGljIENsaWVudCIgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQoewogICAgICAuLi5wYXJhbWV0ZXJzLAogICAgICBrZXksCiAgICAgIG5hbWUsCiAgICAgIHR5cGU6ICJwdWJsaWNDbGllbnQiCiAgICB9KTsKICAgIHJldHVybiBjbGllbnQuZXh0ZW5kKHB1YmxpY0FjdGlvbnMpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvZHJvcFRyYW5zYWN0aW9uLmpzCiAgYXN5bmMgZnVuY3Rpb24gZHJvcFRyYW5zYWN0aW9uKGNsaWVudCwgeyBoYXNoOiBoYXNoMyB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X2Ryb3BUcmFuc2FjdGlvbmAsCiAgICAgIHBhcmFtczogW2hhc2gzXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9kdW1wU3RhdGUuanMKICBhc3luYyBmdW5jdGlvbiBkdW1wU3RhdGUoY2xpZW50KSB7CiAgICByZXR1cm4gY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9kdW1wU3RhdGVgCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L2dldEF1dG9taW5lLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0QXV0b21pbmUoY2xpZW50KSB7CiAgICBpZiAoY2xpZW50Lm1vZGUgPT09ICJnYW5hY2hlIikKICAgICAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfbWluaW5nIgogICAgICB9KTsKICAgIHJldHVybiBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X2dldEF1dG9taW5lYAogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9nZXRUeHBvb2xDb250ZW50LmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0VHhwb29sQ29udGVudChjbGllbnQpIHsKICAgIHJldHVybiBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogInR4cG9vbF9jb250ZW50IgogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9nZXRUeHBvb2xTdGF0dXMuanMKICBpbml0X2Zyb21IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUeHBvb2xTdGF0dXMoY2xpZW50KSB7CiAgICBjb25zdCB7IHBlbmRpbmcsIHF1ZXVlZCB9ID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ0eHBvb2xfc3RhdHVzIgogICAgfSk7CiAgICByZXR1cm4gewogICAgICBwZW5kaW5nOiBoZXhUb051bWJlcihwZW5kaW5nKSwKICAgICAgcXVldWVkOiBoZXhUb051bWJlcihxdWV1ZWQpCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvaW1wZXJzb25hdGVBY2NvdW50LmpzCiAgYXN5bmMgZnVuY3Rpb24gaW1wZXJzb25hdGVBY2NvdW50KGNsaWVudCwgeyBhZGRyZXNzIH0pIHsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiBgJHtjbGllbnQubW9kZX1faW1wZXJzb25hdGVBY2NvdW50YCwKICAgICAgcGFyYW1zOiBbYWRkcmVzc10KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvaW5jcmVhc2VUaW1lLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGluY3JlYXNlVGltZShjbGllbnQsIHsgc2Vjb25kcyB9KSB7CiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldm1faW5jcmVhc2VUaW1lIiwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoc2Vjb25kcyldCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L2luc3BlY3RUeHBvb2wuanMKICBhc3luYyBmdW5jdGlvbiBpbnNwZWN0VHhwb29sKGNsaWVudCkgewogICAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAidHhwb29sX2luc3BlY3QiCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L2xvYWRTdGF0ZS5qcwogIGFzeW5jIGZ1bmN0aW9uIGxvYWRTdGF0ZShjbGllbnQsIHsgc3RhdGUgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9sb2FkU3RhdGVgLAogICAgICBwYXJhbXM6IFtzdGF0ZV0KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvbWluZS5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBtaW5lKGNsaWVudCwgeyBibG9ja3MsIGludGVydmFsIH0pIHsKICAgIGlmIChjbGllbnQubW9kZSA9PT0gImdhbmFjaGUiKQogICAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXZtX21pbmUiLAogICAgICAgIHBhcmFtczogW3sgYmxvY2tzOiBudW1iZXJUb0hleChibG9ja3MpIH1dCiAgICAgIH0pOwogICAgZWxzZQogICAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiBgJHtjbGllbnQubW9kZX1fbWluZWAsCiAgICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoYmxvY2tzKSwgbnVtYmVyVG9IZXgoaW50ZXJ2YWwgfHwgMCldCiAgICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvcmVtb3ZlQmxvY2tUaW1lc3RhbXBJbnRlcnZhbC5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUJsb2NrVGltZXN0YW1wSW50ZXJ2YWwoY2xpZW50KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X3JlbW92ZUJsb2NrVGltZXN0YW1wSW50ZXJ2YWxgCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3Jlc2V0LmpzCiAgYXN5bmMgZnVuY3Rpb24gcmVzZXQoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBqc29uUnBjVXJsIH0gPSB7fSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9yZXNldGAsCiAgICAgIHBhcmFtczogW3sgZm9ya2luZzogeyBibG9ja051bWJlcjogTnVtYmVyKGJsb2NrTnVtYmVyKSwganNvblJwY1VybCB9IH1dCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3JldmVydC5qcwogIGFzeW5jIGZ1bmN0aW9uIHJldmVydChjbGllbnQsIHsgaWQgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldm1fcmV2ZXJ0IiwKICAgICAgcGFyYW1zOiBbaWRdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NlbmRVbnNpZ25lZFRyYW5zYWN0aW9uLmpzCiAgaW5pdF9leHRyYWN0KCk7CiAgaW5pdF90cmFuc2FjdGlvblJlcXVlc3QoKTsKICBhc3luYyBmdW5jdGlvbiBzZW5kVW5zaWduZWRUcmFuc2FjdGlvbihjbGllbnQsIGFyZ3MpIHsKICAgIGNvbnN0IHsgYWNjZXNzTGlzdCwgZGF0YSwgZnJvbSwgZ2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbm9uY2UsIHRvLCB2YWx1ZSwgLi4ucmVzdCB9ID0gYXJnczsKICAgIGNvbnN0IGNoYWluRm9ybWF0ID0gY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzPy50cmFuc2FjdGlvblJlcXVlc3Q/LmZvcm1hdDsKICAgIGNvbnN0IGZvcm1hdCA9IGNoYWluRm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgIGNvbnN0IHJlcXVlc3QgPSBmb3JtYXQoewogICAgICAvLyBQaWNrIG91dCBleHRyYSBkYXRhIHRoYXQgbWlnaHQgZXhpc3Qgb24gdGhlIGNoYWluJ3MgdHJhbnNhY3Rpb24gcmVxdWVzdCB0eXBlLgogICAgICAuLi5leHRyYWN0KHJlc3QsIHsgZm9ybWF0OiBjaGFpbkZvcm1hdCB9KSwKICAgICAgYWNjZXNzTGlzdCwKICAgICAgZGF0YSwKICAgICAgZnJvbSwKICAgICAgZ2FzLAogICAgICBnYXNQcmljZSwKICAgICAgbWF4RmVlUGVyR2FzLAogICAgICBtYXhQcmlvcml0eUZlZVBlckdhcywKICAgICAgbm9uY2UsCiAgICAgIHRvLAogICAgICB2YWx1ZQogICAgfSk7CiAgICBjb25zdCBoYXNoMyA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX3NlbmRVbnNpZ25lZFRyYW5zYWN0aW9uIiwKICAgICAgcGFyYW1zOiBbcmVxdWVzdF0KICAgIH0pOwogICAgcmV0dXJuIGhhc2gzOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc2V0QXV0b21pbmUuanMKICBhc3luYyBmdW5jdGlvbiBzZXRBdXRvbWluZShjbGllbnQsIGVuYWJsZWQpIHsKICAgIGlmIChjbGllbnQubW9kZSA9PT0gImdhbmFjaGUiKSB7CiAgICAgIGlmIChlbmFibGVkKQogICAgICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsgbWV0aG9kOiAibWluZXJfc3RhcnQiIH0pOwogICAgICBlbHNlCiAgICAgICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoeyBtZXRob2Q6ICJtaW5lcl9zdG9wIiB9KTsKICAgIH0gZWxzZQogICAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXZtX3NldEF1dG9taW5lIiwKICAgICAgICBwYXJhbXM6IFtlbmFibGVkXQogICAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldEJhbGFuY2UuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2V0QmFsYW5jZShjbGllbnQsIHsgYWRkcmVzcywgdmFsdWUgfSkgewogICAgaWYgKGNsaWVudC5tb2RlID09PSAiZ2FuYWNoZSIpCiAgICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldm1fc2V0QWNjb3VudEJhbGFuY2UiLAogICAgICAgIHBhcmFtczogW2FkZHJlc3MsIG51bWJlclRvSGV4KHZhbHVlKV0KICAgICAgfSk7CiAgICBlbHNlCiAgICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRCYWxhbmNlYCwKICAgICAgICBwYXJhbXM6IFthZGRyZXNzLCBudW1iZXJUb0hleCh2YWx1ZSldCiAgICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc2V0QmxvY2tHYXNMaW1pdC5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBzZXRCbG9ja0dhc0xpbWl0KGNsaWVudCwgeyBnYXNMaW1pdCB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV2bV9zZXRCbG9ja0dhc0xpbWl0IiwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoZ2FzTGltaXQpXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRCbG9ja1RpbWVzdGFtcEludGVydmFsLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0QmxvY2tUaW1lc3RhbXBJbnRlcnZhbChjbGllbnQsIHsgaW50ZXJ2YWwgfSkgewogICAgY29uc3QgaW50ZXJ2YWxfID0gKCgpID0+IHsKICAgICAgaWYgKGNsaWVudC5tb2RlID09PSAiaGFyZGhhdCIpCiAgICAgICAgcmV0dXJuIGludGVydmFsICogMWUzOwogICAgICByZXR1cm4gaW50ZXJ2YWw7CiAgICB9KSgpOwogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRCbG9ja1RpbWVzdGFtcEludGVydmFsYCwKICAgICAgcGFyYW1zOiBbaW50ZXJ2YWxfXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRDb2RlLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0Q29kZShjbGllbnQsIHsgYWRkcmVzcywgYnl0ZWNvZGUgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRDb2RlYCwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYnl0ZWNvZGVdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldENvaW5iYXNlLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0Q29pbmJhc2UoY2xpZW50LCB7IGFkZHJlc3MgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRDb2luYmFzZWAsCiAgICAgIHBhcmFtczogW2FkZHJlc3NdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldEludGVydmFsTWluaW5nLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0SW50ZXJ2YWxNaW5pbmcoY2xpZW50LCB7IGludGVydmFsIH0pIHsKICAgIGNvbnN0IGludGVydmFsXyA9ICgoKSA9PiB7CiAgICAgIGlmIChjbGllbnQubW9kZSA9PT0gImhhcmRoYXQiKQogICAgICAgIHJldHVybiBpbnRlcnZhbCAqIDFlMzsKICAgICAgcmV0dXJuIGludGVydmFsOwogICAgfSkoKTsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXZtX3NldEludGVydmFsTWluaW5nIiwKICAgICAgcGFyYW1zOiBbaW50ZXJ2YWxfXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRMb2dnaW5nRW5hYmxlZC5qcwogIGFzeW5jIGZ1bmN0aW9uIHNldExvZ2dpbmdFbmFibGVkKGNsaWVudCwgZW5hYmxlZCkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRMb2dnaW5nRW5hYmxlZGAsCiAgICAgIHBhcmFtczogW2VuYWJsZWRdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldE1pbkdhc1ByaWNlLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNldE1pbkdhc1ByaWNlKGNsaWVudCwgeyBnYXNQcmljZSB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X3NldE1pbkdhc1ByaWNlYCwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoZ2FzUHJpY2UpXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXROZXh0QmxvY2tCYXNlRmVlUGVyR2FzLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNldE5leHRCbG9ja0Jhc2VGZWVQZXJHYXMoY2xpZW50LCB7IGJhc2VGZWVQZXJHYXMgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXROZXh0QmxvY2tCYXNlRmVlUGVyR2FzYCwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoYmFzZUZlZVBlckdhcyldCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldE5leHRCbG9ja1RpbWVzdGFtcC5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBzZXROZXh0QmxvY2tUaW1lc3RhbXAoY2xpZW50LCB7IHRpbWVzdGFtcCB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV2bV9zZXROZXh0QmxvY2tUaW1lc3RhbXAiLAogICAgICBwYXJhbXM6IFtudW1iZXJUb0hleCh0aW1lc3RhbXApXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXROb25jZS5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBzZXROb25jZShjbGllbnQsIHsgYWRkcmVzcywgbm9uY2UgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXROb25jZWAsCiAgICAgIHBhcmFtczogW2FkZHJlc3MsIG51bWJlclRvSGV4KG5vbmNlKV0KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc2V0UnBjVXJsLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0UnBjVXJsKGNsaWVudCwganNvblJwY1VybCkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRScGNVcmxgLAogICAgICBwYXJhbXM6IFtqc29uUnBjVXJsXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRTdG9yYWdlQXQuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2V0U3RvcmFnZUF0KGNsaWVudCwgeyBhZGRyZXNzLCBpbmRleDogaW5kZXgyLCB2YWx1ZSB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X3NldFN0b3JhZ2VBdGAsCiAgICAgIHBhcmFtczogWwogICAgICAgIGFkZHJlc3MsCiAgICAgICAgdHlwZW9mIGluZGV4MiA9PT0gIm51bWJlciIgPyBudW1iZXJUb0hleChpbmRleDIpIDogaW5kZXgyLAogICAgICAgIHZhbHVlCiAgICAgIF0KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc25hcHNob3QuanMKICBhc3luYyBmdW5jdGlvbiBzbmFwc2hvdChjbGllbnQpIHsKICAgIHJldHVybiBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV2bV9zbmFwc2hvdCIKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc3RvcEltcGVyc29uYXRpbmdBY2NvdW50LmpzCiAgYXN5bmMgZnVuY3Rpb24gc3RvcEltcGVyc29uYXRpbmdBY2NvdW50KGNsaWVudCwgeyBhZGRyZXNzIH0pIHsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiBgJHtjbGllbnQubW9kZX1fc3RvcEltcGVyc29uYXRpbmdBY2NvdW50YCwKICAgICAgcGFyYW1zOiBbYWRkcmVzc10KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2RlY29yYXRvcnMvdGVzdC5qcwogIGZ1bmN0aW9uIHRlc3RBY3Rpb25zKHsgbW9kZTogbW9kZTIgfSkgewogICAgcmV0dXJuIChjbGllbnRfKSA9PiB7CiAgICAgIGNvbnN0IGNsaWVudCA9IGNsaWVudF8uZXh0ZW5kKCgpID0+ICh7CiAgICAgICAgbW9kZTogbW9kZTIKICAgICAgfSkpOwogICAgICByZXR1cm4gewogICAgICAgIGRyb3BUcmFuc2FjdGlvbjogKGFyZ3MpID0+IGRyb3BUcmFuc2FjdGlvbihjbGllbnQsIGFyZ3MpLAogICAgICAgIGR1bXBTdGF0ZTogKCkgPT4gZHVtcFN0YXRlKGNsaWVudCksCiAgICAgICAgZ2V0QXV0b21pbmU6ICgpID0+IGdldEF1dG9taW5lKGNsaWVudCksCiAgICAgICAgZ2V0VHhwb29sQ29udGVudDogKCkgPT4gZ2V0VHhwb29sQ29udGVudChjbGllbnQpLAogICAgICAgIGdldFR4cG9vbFN0YXR1czogKCkgPT4gZ2V0VHhwb29sU3RhdHVzKGNsaWVudCksCiAgICAgICAgaW1wZXJzb25hdGVBY2NvdW50OiAoYXJncykgPT4gaW1wZXJzb25hdGVBY2NvdW50KGNsaWVudCwgYXJncyksCiAgICAgICAgaW5jcmVhc2VUaW1lOiAoYXJncykgPT4gaW5jcmVhc2VUaW1lKGNsaWVudCwgYXJncyksCiAgICAgICAgaW5zcGVjdFR4cG9vbDogKCkgPT4gaW5zcGVjdFR4cG9vbChjbGllbnQpLAogICAgICAgIGxvYWRTdGF0ZTogKGFyZ3MpID0+IGxvYWRTdGF0ZShjbGllbnQsIGFyZ3MpLAogICAgICAgIG1pbmU6IChhcmdzKSA9PiBtaW5lKGNsaWVudCwgYXJncyksCiAgICAgICAgcmVtb3ZlQmxvY2tUaW1lc3RhbXBJbnRlcnZhbDogKCkgPT4gcmVtb3ZlQmxvY2tUaW1lc3RhbXBJbnRlcnZhbChjbGllbnQpLAogICAgICAgIHJlc2V0OiAoYXJncykgPT4gcmVzZXQoY2xpZW50LCBhcmdzKSwKICAgICAgICByZXZlcnQ6IChhcmdzKSA9PiByZXZlcnQoY2xpZW50LCBhcmdzKSwKICAgICAgICBzZW5kVW5zaWduZWRUcmFuc2FjdGlvbjogKGFyZ3MpID0+IHNlbmRVbnNpZ25lZFRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0QXV0b21pbmU6IChhcmdzKSA9PiBzZXRBdXRvbWluZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldEJhbGFuY2U6IChhcmdzKSA9PiBzZXRCYWxhbmNlKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0QmxvY2tHYXNMaW1pdDogKGFyZ3MpID0+IHNldEJsb2NrR2FzTGltaXQoY2xpZW50LCBhcmdzKSwKICAgICAgICBzZXRCbG9ja1RpbWVzdGFtcEludGVydmFsOiAoYXJncykgPT4gc2V0QmxvY2tUaW1lc3RhbXBJbnRlcnZhbChjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldENvZGU6IChhcmdzKSA9PiBzZXRDb2RlKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0Q29pbmJhc2U6IChhcmdzKSA9PiBzZXRDb2luYmFzZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldEludGVydmFsTWluaW5nOiAoYXJncykgPT4gc2V0SW50ZXJ2YWxNaW5pbmcoY2xpZW50LCBhcmdzKSwKICAgICAgICBzZXRMb2dnaW5nRW5hYmxlZDogKGFyZ3MpID0+IHNldExvZ2dpbmdFbmFibGVkKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0TWluR2FzUHJpY2U6IChhcmdzKSA9PiBzZXRNaW5HYXNQcmljZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldE5leHRCbG9ja0Jhc2VGZWVQZXJHYXM6IChhcmdzKSA9PiBzZXROZXh0QmxvY2tCYXNlRmVlUGVyR2FzKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0TmV4dEJsb2NrVGltZXN0YW1wOiAoYXJncykgPT4gc2V0TmV4dEJsb2NrVGltZXN0YW1wKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0Tm9uY2U6IChhcmdzKSA9PiBzZXROb25jZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldFJwY1VybDogKGFyZ3MpID0+IHNldFJwY1VybChjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldFN0b3JhZ2VBdDogKGFyZ3MpID0+IHNldFN0b3JhZ2VBdChjbGllbnQsIGFyZ3MpLAogICAgICAgIHNuYXBzaG90OiAoKSA9PiBzbmFwc2hvdChjbGllbnQpLAogICAgICAgIHN0b3BJbXBlcnNvbmF0aW5nQWNjb3VudDogKGFyZ3MpID0+IHN0b3BJbXBlcnNvbmF0aW5nQWNjb3VudChjbGllbnQsIGFyZ3MpCiAgICAgIH07CiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2NyZWF0ZVRlc3RDbGllbnQuanMKICBmdW5jdGlvbiBjcmVhdGVUZXN0Q2xpZW50KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsga2V5ID0gInRlc3QiLCBuYW1lID0gIlRlc3QgQ2xpZW50IiwgbW9kZTogbW9kZTIgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQoewogICAgICAuLi5wYXJhbWV0ZXJzLAogICAgICBrZXksCiAgICAgIG5hbWUsCiAgICAgIHR5cGU6ICJ0ZXN0Q2xpZW50IgogICAgfSk7CiAgICByZXR1cm4gY2xpZW50LmV4dGVuZCgoY29uZmlnKSA9PiAoewogICAgICBtb2RlOiBtb2RlMiwKICAgICAgLi4udGVzdEFjdGlvbnMoeyBtb2RlOiBtb2RlMiB9KShjb25maWcpCiAgICB9KSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L2RlcGxveUNvbnRyYWN0LmpzCiAgaW5pdF9lbmNvZGVEZXBsb3lEYXRhKCk7CiAgZnVuY3Rpb24gZGVwbG95Q29udHJhY3Qod2FsbGV0Q2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYXJncywgYnl0ZWNvZGUsIC4uLnJlcXVlc3QgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjYWxsZGF0YSA9IGVuY29kZURlcGxveURhdGEoeyBhYmk6IGFiaTIsIGFyZ3MsIGJ5dGVjb2RlIH0pOwogICAgcmV0dXJuIHNlbmRUcmFuc2FjdGlvbih3YWxsZXRDbGllbnQsIHsKICAgICAgLi4ucmVxdWVzdCwKICAgICAgZGF0YTogY2FsbGRhdGEKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC9nZXRBZGRyZXNzZXMuanMKICBpbml0X2dldEFkZHJlc3MoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRBZGRyZXNzZXMoY2xpZW50KSB7CiAgICBpZiAoY2xpZW50LmFjY291bnQ/LnR5cGUgPT09ICJsb2NhbCIpCiAgICAgIHJldHVybiBbY2xpZW50LmFjY291bnQuYWRkcmVzc107CiAgICBjb25zdCBhZGRyZXNzZXMgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7IG1ldGhvZDogImV0aF9hY2NvdW50cyIgfSwgeyBkZWR1cGU6IHRydWUgfSk7CiAgICByZXR1cm4gYWRkcmVzc2VzLm1hcCgoYWRkcmVzcykgPT4gY2hlY2tzdW1BZGRyZXNzKGFkZHJlc3MpKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvZ2V0UGVybWlzc2lvbnMuanMKICBhc3luYyBmdW5jdGlvbiBnZXRQZXJtaXNzaW9ucyhjbGllbnQpIHsKICAgIGNvbnN0IHBlcm1pc3Npb25zID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoeyBtZXRob2Q6ICJ3YWxsZXRfZ2V0UGVybWlzc2lvbnMiIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgcmV0dXJuIHBlcm1pc3Npb25zOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC9yZXF1ZXN0QWRkcmVzc2VzLmpzCiAgaW5pdF9nZXRBZGRyZXNzKCk7CiAgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdEFkZHJlc3NlcyhjbGllbnQpIHsKICAgIGNvbnN0IGFkZHJlc3NlcyA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsgbWV0aG9kOiAiZXRoX3JlcXVlc3RBY2NvdW50cyIgfSwgeyBkZWR1cGU6IHRydWUsIHJldHJ5Q291bnQ6IDAgfSk7CiAgICByZXR1cm4gYWRkcmVzc2VzLm1hcCgoYWRkcmVzcykgPT4gZ2V0QWRkcmVzcyhhZGRyZXNzKSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3JlcXVlc3RQZXJtaXNzaW9ucy5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RQZXJtaXNzaW9ucyhjbGllbnQsIHBlcm1pc3Npb25zKSB7CiAgICByZXR1cm4gY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ3YWxsZXRfcmVxdWVzdFBlcm1pc3Npb25zIiwKICAgICAgcGFyYW1zOiBbcGVybWlzc2lvbnNdCiAgICB9LCB7IHJldHJ5Q291bnQ6IDAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NpZ25NZXNzYWdlLmpzCiAgaW5pdF9wYXJzZUFjY291bnQoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2lnbk1lc3NhZ2UoY2xpZW50LCB7IGFjY291bnQ6IGFjY291bnRfID0gY2xpZW50LmFjY291bnQsIG1lc3NhZ2UgfSkgewogICAgaWYgKCFhY2NvdW50XykKICAgICAgdGhyb3cgbmV3IEFjY291bnROb3RGb3VuZEVycm9yKHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2FjdGlvbnMvd2FsbGV0L3NpZ25NZXNzYWdlIgogICAgICB9KTsKICAgIGNvbnN0IGFjY291bnQgPSBwYXJzZUFjY291bnQoYWNjb3VudF8pOwogICAgaWYgKGFjY291bnQuc2lnbk1lc3NhZ2UpCiAgICAgIHJldHVybiBhY2NvdW50LnNpZ25NZXNzYWdlKHsgbWVzc2FnZSB9KTsKICAgIGNvbnN0IG1lc3NhZ2VfID0gKCgpID0+IHsKICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gc3RyaW5nVG9IZXgobWVzc2FnZSk7CiAgICAgIGlmIChtZXNzYWdlLnJhdyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpCiAgICAgICAgcmV0dXJuIHRvSGV4KG1lc3NhZ2UucmF3KTsKICAgICAgcmV0dXJuIG1lc3NhZ2UucmF3OwogICAgfSkoKTsKICAgIHJldHVybiBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogInBlcnNvbmFsX3NpZ24iLAogICAgICBwYXJhbXM6IFttZXNzYWdlXywgYWNjb3VudC5hZGRyZXNzXQogICAgfSwgeyByZXRyeUNvdW50OiAwIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC9zaWduVHJhbnNhY3Rpb24uanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X3RyYW5zYWN0aW9uUmVxdWVzdCgpOwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNpZ25UcmFuc2FjdGlvbihjbGllbnQsIHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudF8gPSBjbGllbnQuYWNjb3VudCwgY2hhaW4gPSBjbGllbnQuY2hhaW4sIC4uLnRyYW5zYWN0aW9uIH0gPSBwYXJhbWV0ZXJzOwogICAgaWYgKCFhY2NvdW50XykKICAgICAgdGhyb3cgbmV3IEFjY291bnROb3RGb3VuZEVycm9yKHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2FjdGlvbnMvd2FsbGV0L3NpZ25UcmFuc2FjdGlvbiIKICAgICAgfSk7CiAgICBjb25zdCBhY2NvdW50ID0gcGFyc2VBY2NvdW50KGFjY291bnRfKTsKICAgIGFzc2VydFJlcXVlc3QoewogICAgICBhY2NvdW50LAogICAgICAuLi5wYXJhbWV0ZXJzCiAgICB9KTsKICAgIGNvbnN0IGNoYWluSWQgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRDaGFpbklkLCAiZ2V0Q2hhaW5JZCIpKHt9KTsKICAgIGlmIChjaGFpbiAhPT0gbnVsbCkKICAgICAgYXNzZXJ0Q3VycmVudENoYWluKHsKICAgICAgICBjdXJyZW50Q2hhaW5JZDogY2hhaW5JZCwKICAgICAgICBjaGFpbgogICAgICB9KTsKICAgIGNvbnN0IGZvcm1hdHRlcnM0ID0gY2hhaW4/LmZvcm1hdHRlcnMgfHwgY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzOwogICAgY29uc3QgZm9ybWF0ID0gZm9ybWF0dGVyczQ/LnRyYW5zYWN0aW9uUmVxdWVzdD8uZm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgIGlmIChhY2NvdW50LnNpZ25UcmFuc2FjdGlvbikKICAgICAgcmV0dXJuIGFjY291bnQuc2lnblRyYW5zYWN0aW9uKHsKICAgICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgICBjaGFpbklkCiAgICAgIH0sIHsgc2VyaWFsaXplcjogY2xpZW50LmNoYWluPy5zZXJpYWxpemVycz8udHJhbnNhY3Rpb24gfSk7CiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfc2lnblRyYW5zYWN0aW9uIiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgewogICAgICAgICAgLi4uZm9ybWF0KHRyYW5zYWN0aW9uKSwKICAgICAgICAgIGNoYWluSWQ6IG51bWJlclRvSGV4KGNoYWluSWQpLAogICAgICAgICAgZnJvbTogYWNjb3VudC5hZGRyZXNzCiAgICAgICAgfQogICAgICBdCiAgICB9LCB7IHJldHJ5Q291bnQ6IDAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NpZ25UeXBlZERhdGEuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNpZ25UeXBlZERhdGEoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFjY291bnQ6IGFjY291bnRfID0gY2xpZW50LmFjY291bnQsIGRvbWFpbiwgbWVzc2FnZSwgcHJpbWFyeVR5cGUgfSA9IHBhcmFtZXRlcnM7CiAgICBpZiAoIWFjY291bnRfKQogICAgICB0aHJvdyBuZXcgQWNjb3VudE5vdEZvdW5kRXJyb3IoewogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvYWN0aW9ucy93YWxsZXQvc2lnblR5cGVkRGF0YSIKICAgICAgfSk7CiAgICBjb25zdCBhY2NvdW50ID0gcGFyc2VBY2NvdW50KGFjY291bnRfKTsKICAgIGNvbnN0IHR5cGVzID0gewogICAgICBFSVA3MTJEb21haW46IGdldFR5cGVzRm9yRUlQNzEyRG9tYWluKHsgZG9tYWluIH0pLAogICAgICAuLi5wYXJhbWV0ZXJzLnR5cGVzCiAgICB9OwogICAgdmFsaWRhdGVUeXBlZERhdGEoeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9KTsKICAgIGlmIChhY2NvdW50LnNpZ25UeXBlZERhdGEpCiAgICAgIHJldHVybiBhY2NvdW50LnNpZ25UeXBlZERhdGEoeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9KTsKICAgIGNvbnN0IHR5cGVkRGF0YSA9IHNlcmlhbGl6ZVR5cGVkRGF0YSh7IGRvbWFpbiwgbWVzc2FnZSwgcHJpbWFyeVR5cGUsIHR5cGVzIH0pOwogICAgcmV0dXJuIGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX3NpZ25UeXBlZERhdGFfdjQiLAogICAgICBwYXJhbXM6IFthY2NvdW50LmFkZHJlc3MsIHR5cGVkRGF0YV0KICAgIH0sIHsgcmV0cnlDb3VudDogMCB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvc3dpdGNoQ2hhaW4uanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc3dpdGNoQ2hhaW4oY2xpZW50LCB7IGlkIH0pIHsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAid2FsbGV0X3N3aXRjaEV0aGVyZXVtQ2hhaW4iLAogICAgICBwYXJhbXM6IFsKICAgICAgICB7CiAgICAgICAgICBjaGFpbklkOiBudW1iZXJUb0hleChpZCkKICAgICAgICB9CiAgICAgIF0KICAgIH0sIHsgcmV0cnlDb3VudDogMCB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvd2F0Y2hBc3NldC5qcwogIGFzeW5jIGZ1bmN0aW9uIHdhdGNoQXNzZXQoY2xpZW50LCBwYXJhbXMpIHsKICAgIGNvbnN0IGFkZGVkID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ3YWxsZXRfd2F0Y2hBc3NldCIsCiAgICAgIHBhcmFtcwogICAgfSwgeyByZXRyeUNvdW50OiAwIH0pOwogICAgcmV0dXJuIGFkZGVkOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2RlY29yYXRvcnMvd2FsbGV0LmpzCiAgZnVuY3Rpb24gd2FsbGV0QWN0aW9ucyhjbGllbnQpIHsKICAgIHJldHVybiB7CiAgICAgIGFkZENoYWluOiAoYXJncykgPT4gYWRkQ2hhaW4oY2xpZW50LCBhcmdzKSwKICAgICAgZGVwbG95Q29udHJhY3Q6IChhcmdzKSA9PiBkZXBsb3lDb250cmFjdChjbGllbnQsIGFyZ3MpLAogICAgICBnZXRBZGRyZXNzZXM6ICgpID0+IGdldEFkZHJlc3NlcyhjbGllbnQpLAogICAgICBnZXRDaGFpbklkOiAoKSA9PiBnZXRDaGFpbklkKGNsaWVudCksCiAgICAgIGdldFBlcm1pc3Npb25zOiAoKSA9PiBnZXRQZXJtaXNzaW9ucyhjbGllbnQpLAogICAgICBwcmVwYXJlVHJhbnNhY3Rpb25SZXF1ZXN0OiAoYXJncykgPT4gcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdChjbGllbnQsIGFyZ3MpLAogICAgICByZXF1ZXN0QWRkcmVzc2VzOiAoKSA9PiByZXF1ZXN0QWRkcmVzc2VzKGNsaWVudCksCiAgICAgIHJlcXVlc3RQZXJtaXNzaW9uczogKGFyZ3MpID0+IHJlcXVlc3RQZXJtaXNzaW9ucyhjbGllbnQsIGFyZ3MpLAogICAgICBzZW5kUmF3VHJhbnNhY3Rpb246IChhcmdzKSA9PiBzZW5kUmF3VHJhbnNhY3Rpb24oY2xpZW50LCBhcmdzKSwKICAgICAgc2VuZFRyYW5zYWN0aW9uOiAoYXJncykgPT4gc2VuZFRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgIHNpZ25NZXNzYWdlOiAoYXJncykgPT4gc2lnbk1lc3NhZ2UoY2xpZW50LCBhcmdzKSwKICAgICAgc2lnblRyYW5zYWN0aW9uOiAoYXJncykgPT4gc2lnblRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgIHNpZ25UeXBlZERhdGE6IChhcmdzKSA9PiBzaWduVHlwZWREYXRhKGNsaWVudCwgYXJncyksCiAgICAgIHN3aXRjaENoYWluOiAoYXJncykgPT4gc3dpdGNoQ2hhaW4oY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hBc3NldDogKGFyZ3MpID0+IHdhdGNoQXNzZXQoY2xpZW50LCBhcmdzKSwKICAgICAgd3JpdGVDb250cmFjdDogKGFyZ3MpID0+IHdyaXRlQ29udHJhY3QoY2xpZW50LCBhcmdzKQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2xpZW50cy9jcmVhdGVXYWxsZXRDbGllbnQuanMKICBmdW5jdGlvbiBjcmVhdGVXYWxsZXRDbGllbnQocGFyYW1ldGVycykgewogICAgY29uc3QgeyBrZXkgPSAid2FsbGV0IiwgbmFtZSA9ICJXYWxsZXQgQ2xpZW50IiwgdHJhbnNwb3J0IH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQ2xpZW50KHsKICAgICAgLi4ucGFyYW1ldGVycywKICAgICAga2V5LAogICAgICBuYW1lLAogICAgICB0cmFuc3BvcnQsCiAgICAgIHR5cGU6ICJ3YWxsZXRDbGllbnQiCiAgICB9KTsKICAgIHJldHVybiBjbGllbnQuZXh0ZW5kKHdhbGxldEFjdGlvbnMpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL3RyYW5zcG9ydHMvd2ViU29ja2V0LmpzCiAgaW5pdF9yZXF1ZXN0KCk7CiAgZnVuY3Rpb24gd2ViU29ja2V0KHVybCwgY29uZmlnID0ge30pIHsKICAgIGNvbnN0IHsga2VlcEFsaXZlLCBrZXkgPSAid2ViU29ja2V0IiwgbmFtZSA9ICJXZWJTb2NrZXQgSlNPTi1SUEMiLCByZWNvbm5lY3QsIHJldHJ5RGVsYXkgfSA9IGNvbmZpZzsKICAgIHJldHVybiAoeyBjaGFpbiwgcmV0cnlDb3VudDogcmV0cnlDb3VudF8sIHRpbWVvdXQ6IHRpbWVvdXRfIH0pID0+IHsKICAgICAgY29uc3QgcmV0cnlDb3VudCA9IGNvbmZpZy5yZXRyeUNvdW50ID8/IHJldHJ5Q291bnRfOwogICAgICBjb25zdCB0aW1lb3V0ID0gdGltZW91dF8gPz8gY29uZmlnLnRpbWVvdXQgPz8gMWU0OwogICAgICBjb25zdCB1cmxfID0gdXJsIHx8IGNoYWluPy5ycGNVcmxzLmRlZmF1bHQud2ViU29ja2V0Py5bMF07CiAgICAgIGlmICghdXJsXykKICAgICAgICB0aHJvdyBuZXcgVXJsUmVxdWlyZWRFcnJvcigpOwogICAgICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICAgICAgY29uc3QgYm9keSA9IHsgbWV0aG9kLCBwYXJhbXMgfTsKICAgICAgICAgIGNvbnN0IHJwY0NsaWVudCA9IGF3YWl0IGdldFdlYlNvY2tldFJwY0NsaWVudCh1cmxfLCB7CiAgICAgICAgICAgIGtlZXBBbGl2ZSwKICAgICAgICAgICAgcmVjb25uZWN0CiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IHsgZXJyb3IsIHJlc3VsdCB9ID0gYXdhaXQgcnBjQ2xpZW50LnJlcXVlc3RBc3luYyh7CiAgICAgICAgICAgIGJvZHksCiAgICAgICAgICAgIHRpbWVvdXQKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGVycm9yKQogICAgICAgICAgICB0aHJvdyBuZXcgUnBjUmVxdWVzdEVycm9yKHsKICAgICAgICAgICAgICBib2R5LAogICAgICAgICAgICAgIGVycm9yLAogICAgICAgICAgICAgIHVybDogdXJsXwogICAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfSwKICAgICAgICByZXRyeUNvdW50LAogICAgICAgIHJldHJ5RGVsYXksCiAgICAgICAgdGltZW91dCwKICAgICAgICB0eXBlOiAid2ViU29ja2V0IgogICAgICB9LCB7CiAgICAgICAgZ2V0U29ja2V0KCkgewogICAgICAgICAgcmV0dXJuIGdldFNvY2tldCh1cmxfKTsKICAgICAgICB9LAogICAgICAgIGdldFJwY0NsaWVudCgpIHsKICAgICAgICAgIHJldHVybiBnZXRXZWJTb2NrZXRScGNDbGllbnQodXJsXyk7CiAgICAgICAgfSwKICAgICAgICBhc3luYyBzdWJzY3JpYmUoeyBwYXJhbXMsIG9uRGF0YSwgb25FcnJvciB9KSB7CiAgICAgICAgICBjb25zdCBycGNDbGllbnQgPSBhd2FpdCBnZXRXZWJTb2NrZXRScGNDbGllbnQodXJsXyk7CiAgICAgICAgICBjb25zdCB7IHJlc3VsdDogc3Vic2NyaXB0aW9uSWQgfSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHJwY0NsaWVudC5yZXF1ZXN0KHsKICAgICAgICAgICAgYm9keTogewogICAgICAgICAgICAgIG1ldGhvZDogImV0aF9zdWJzY3JpYmUiLAogICAgICAgICAgICAgIHBhcmFtcwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbkVycm9yKGVycm9yKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25SZXNwb25zZShyZXNwb25zZSkgewogICAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikgewogICAgICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlLmVycm9yKTsKICAgICAgICAgICAgICAgIG9uRXJyb3I/LihyZXNwb25zZS5lcnJvcik7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UuaWQgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLm1ldGhvZCAhPT0gImV0aF9zdWJzY3JpcHRpb24iKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIG9uRGF0YShyZXNwb25zZS5wYXJhbXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KSk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBzdWJzY3JpcHRpb25JZCwKICAgICAgICAgICAgYXN5bmMgdW5zdWJzY3JpYmUoKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBycGNDbGllbnQucmVxdWVzdCh7CiAgICAgICAgICAgICAgICBib2R5OiB7CiAgICAgICAgICAgICAgICAgIG1ldGhvZDogImV0aF91bnN1YnNjcmliZSIsCiAgICAgICAgICAgICAgICAgIHBhcmFtczogW3N1YnNjcmlwdGlvbklkXQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIG9uUmVzcG9uc2U6IHJlc29sdmUKICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9KTsKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2luZGV4LmpzCiAgaW5pdF9hYmlzKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2FkZHJlc3MuanMKICB2YXIgemVyb0FkZHJlc3MgPSAiMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9pbmRleC5qcwogIGluaXRfY29udHJhY3RzKCk7CiAgaW5pdF91bml0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL251bWJlci5qcwogIHZhciBtYXhJbnQ4ID0gMm4gKiogKDhuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDE2ID0gMm4gKiogKDE2biAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQyNCA9IDJuICoqICgyNG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MzIgPSAybiAqKiAoMzJuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDQwID0gMm4gKiogKDQwbiAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQ0OCA9IDJuICoqICg0OG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50NTYgPSAybiAqKiAoNTZuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDY0ID0gMm4gKiogKDY0biAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQ3MiA9IDJuICoqICg3Mm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50ODAgPSAybiAqKiAoODBuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDg4ID0gMm4gKiogKDg4biAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQ5NiA9IDJuICoqICg5Nm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTA0ID0gMm4gKiogKDEwNG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTEyID0gMm4gKiogKDExMm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTIwID0gMm4gKiogKDEyMG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTI4ID0gMm4gKiogKDEyOG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTM2ID0gMm4gKiogKDEzNm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTQ0ID0gMm4gKiogKDE0NG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTUyID0gMm4gKiogKDE1Mm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTYwID0gMm4gKiogKDE2MG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTY4ID0gMm4gKiogKDE2OG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTc2ID0gMm4gKiogKDE3Nm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTg0ID0gMm4gKiogKDE4NG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTkyID0gMm4gKiogKDE5Mm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjAwID0gMm4gKiogKDIwMG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjA4ID0gMm4gKiogKDIwOG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjE2ID0gMm4gKiogKDIxNm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjI0ID0gMm4gKiogKDIyNG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjMyID0gMm4gKiogKDIzMm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjQwID0gMm4gKiogKDI0MG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjQ4ID0gMm4gKiogKDI0OG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjU2ID0gMm4gKiogKDI1Nm4gLSAxbikgLSAxbjsKICB2YXIgbWluSW50OCA9IC0oMm4gKiogKDhuIC0gMW4pKTsKICB2YXIgbWluSW50MTYgPSAtKDJuICoqICgxNm4gLSAxbikpOwogIHZhciBtaW5JbnQyNCA9IC0oMm4gKiogKDI0biAtIDFuKSk7CiAgdmFyIG1pbkludDMyID0gLSgybiAqKiAoMzJuIC0gMW4pKTsKICB2YXIgbWluSW50NDAgPSAtKDJuICoqICg0MG4gLSAxbikpOwogIHZhciBtaW5JbnQ0OCA9IC0oMm4gKiogKDQ4biAtIDFuKSk7CiAgdmFyIG1pbkludDU2ID0gLSgybiAqKiAoNTZuIC0gMW4pKTsKICB2YXIgbWluSW50NjQgPSAtKDJuICoqICg2NG4gLSAxbikpOwogIHZhciBtaW5JbnQ3MiA9IC0oMm4gKiogKDcybiAtIDFuKSk7CiAgdmFyIG1pbkludDgwID0gLSgybiAqKiAoODBuIC0gMW4pKTsKICB2YXIgbWluSW50ODggPSAtKDJuICoqICg4OG4gLSAxbikpOwogIHZhciBtaW5JbnQ5NiA9IC0oMm4gKiogKDk2biAtIDFuKSk7CiAgdmFyIG1pbkludDEwNCA9IC0oMm4gKiogKDEwNG4gLSAxbikpOwogIHZhciBtaW5JbnQxMTIgPSAtKDJuICoqICgxMTJuIC0gMW4pKTsKICB2YXIgbWluSW50MTIwID0gLSgybiAqKiAoMTIwbiAtIDFuKSk7CiAgdmFyIG1pbkludDEyOCA9IC0oMm4gKiogKDEyOG4gLSAxbikpOwogIHZhciBtaW5JbnQxMzYgPSAtKDJuICoqICgxMzZuIC0gMW4pKTsKICB2YXIgbWluSW50MTQ0ID0gLSgybiAqKiAoMTQ0biAtIDFuKSk7CiAgdmFyIG1pbkludDE1MiA9IC0oMm4gKiogKDE1Mm4gLSAxbikpOwogIHZhciBtaW5JbnQxNjAgPSAtKDJuICoqICgxNjBuIC0gMW4pKTsKICB2YXIgbWluSW50MTY4ID0gLSgybiAqKiAoMTY4biAtIDFuKSk7CiAgdmFyIG1pbkludDE3NiA9IC0oMm4gKiogKDE3Nm4gLSAxbikpOwogIHZhciBtaW5JbnQxODQgPSAtKDJuICoqICgxODRuIC0gMW4pKTsKICB2YXIgbWluSW50MTkyID0gLSgybiAqKiAoMTkybiAtIDFuKSk7CiAgdmFyIG1pbkludDIwMCA9IC0oMm4gKiogKDIwMG4gLSAxbikpOwogIHZhciBtaW5JbnQyMDggPSAtKDJuICoqICgyMDhuIC0gMW4pKTsKICB2YXIgbWluSW50MjE2ID0gLSgybiAqKiAoMjE2biAtIDFuKSk7CiAgdmFyIG1pbkludDIyNCA9IC0oMm4gKiogKDIyNG4gLSAxbikpOwogIHZhciBtaW5JbnQyMzIgPSAtKDJuICoqICgyMzJuIC0gMW4pKTsKICB2YXIgbWluSW50MjQwID0gLSgybiAqKiAoMjQwbiAtIDFuKSk7CiAgdmFyIG1pbkludDI0OCA9IC0oMm4gKiogKDI0OG4gLSAxbikpOwogIHZhciBtaW5JbnQyNTYgPSAtKDJuICoqICgyNTZuIC0gMW4pKTsKICB2YXIgbWF4VWludDggPSAybiAqKiA4biAtIDFuOwogIHZhciBtYXhVaW50MTYgPSAybiAqKiAxNm4gLSAxbjsKICB2YXIgbWF4VWludDI0ID0gMm4gKiogMjRuIC0gMW47CiAgdmFyIG1heFVpbnQzMiA9IDJuICoqIDMybiAtIDFuOwogIHZhciBtYXhVaW50NDAgPSAybiAqKiA0MG4gLSAxbjsKICB2YXIgbWF4VWludDQ4ID0gMm4gKiogNDhuIC0gMW47CiAgdmFyIG1heFVpbnQ1NiA9IDJuICoqIDU2biAtIDFuOwogIHZhciBtYXhVaW50NjQgPSAybiAqKiA2NG4gLSAxbjsKICB2YXIgbWF4VWludDcyID0gMm4gKiogNzJuIC0gMW47CiAgdmFyIG1heFVpbnQ4MCA9IDJuICoqIDgwbiAtIDFuOwogIHZhciBtYXhVaW50ODggPSAybiAqKiA4OG4gLSAxbjsKICB2YXIgbWF4VWludDk2ID0gMm4gKiogOTZuIC0gMW47CiAgdmFyIG1heFVpbnQxMDQgPSAybiAqKiAxMDRuIC0gMW47CiAgdmFyIG1heFVpbnQxMTIgPSAybiAqKiAxMTJuIC0gMW47CiAgdmFyIG1heFVpbnQxMjAgPSAybiAqKiAxMjBuIC0gMW47CiAgdmFyIG1heFVpbnQxMjggPSAybiAqKiAxMjhuIC0gMW47CiAgdmFyIG1heFVpbnQxMzYgPSAybiAqKiAxMzZuIC0gMW47CiAgdmFyIG1heFVpbnQxNDQgPSAybiAqKiAxNDRuIC0gMW47CiAgdmFyIG1heFVpbnQxNTIgPSAybiAqKiAxNTJuIC0gMW47CiAgdmFyIG1heFVpbnQxNjAgPSAybiAqKiAxNjBuIC0gMW47CiAgdmFyIG1heFVpbnQxNjggPSAybiAqKiAxNjhuIC0gMW47CiAgdmFyIG1heFVpbnQxNzYgPSAybiAqKiAxNzZuIC0gMW47CiAgdmFyIG1heFVpbnQxODQgPSAybiAqKiAxODRuIC0gMW47CiAgdmFyIG1heFVpbnQxOTIgPSAybiAqKiAxOTJuIC0gMW47CiAgdmFyIG1heFVpbnQyMDAgPSAybiAqKiAyMDBuIC0gMW47CiAgdmFyIG1heFVpbnQyMDggPSAybiAqKiAyMDhuIC0gMW47CiAgdmFyIG1heFVpbnQyMTYgPSAybiAqKiAyMTZuIC0gMW47CiAgdmFyIG1heFVpbnQyMjQgPSAybiAqKiAyMjRuIC0gMW47CiAgdmFyIG1heFVpbnQyMzIgPSAybiAqKiAyMzJuIC0gMW47CiAgdmFyIG1heFVpbnQyNDAgPSAybiAqKiAyNDBuIC0gMW47CiAgdmFyIG1heFVpbnQyNDggPSAybiAqKiAyNDhuIC0gMW47CiAgdmFyIG1heFVpbnQyNTYgPSAybiAqKiAyNTZuIC0gMW47CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vaW5kZXguanMKICBpbml0X2FiaSgpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY29udHJhY3QoKTsKICBpbml0X3JwYygpOwogIGluaXRfY2hhaW4oKTsKICBpbml0X2VuY29kaW5nKCk7CiAgaW5pdF9ub2RlKCk7CiAgaW5pdF9yZXF1ZXN0KCk7CiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF90cmFuc2FjdGlvbigpOwogIGluaXRfZGF0YSgpOwogIGluaXRfc3RhdGVPdmVycmlkZSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3R5cGVzL2VpcDExOTMuanMKICB2YXIgUHJvdmlkZXJScGNFcnJvcjIgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICAgIGNvbnN0cnVjdG9yKGNvZGUsIG1lc3NhZ2UpIHsKICAgICAgc3VwZXIobWVzc2FnZSk7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgIH0pOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRldGFpbHMiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICB9KTsKICAgICAgdGhpcy5jb2RlID0gY29kZTsKICAgICAgdGhpcy5kZXRhaWxzID0gbWVzc2FnZTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2luZGV4LmpzCiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZURlcGxveURhdGEuanMKICBpbml0X2FiaSgpOwogIGluaXRfZGVjb2RlQWJpUGFyYW1ldGVycygpOwogIHZhciBkb2NzUGF0aDggPSAiL2RvY3MvY29udHJhY3QvZGVjb2RlRGVwbG95RGF0YSI7CiAgZnVuY3Rpb24gZGVjb2RlRGVwbG95RGF0YShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYnl0ZWNvZGUsIGRhdGEgfSA9IHBhcmFtZXRlcnM7CiAgICBpZiAoZGF0YSA9PT0gYnl0ZWNvZGUpCiAgICAgIHJldHVybiB7IGJ5dGVjb2RlIH07CiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGFiaTIuZmluZCgoeCkgPT4gInR5cGUiIGluIHggJiYgeC50eXBlID09PSAiY29uc3RydWN0b3IiKTsKICAgIGlmICghZGVzY3JpcHRpb24pCiAgICAgIHRocm93IG5ldyBBYmlDb25zdHJ1Y3Rvck5vdEZvdW5kRXJyb3IoeyBkb2NzUGF0aDogZG9jc1BhdGg4IH0pOwogICAgaWYgKCEoImlucHV0cyIgaW4gZGVzY3JpcHRpb24pKQogICAgICB0aHJvdyBuZXcgQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoOCB9KTsKICAgIGlmICghZGVzY3JpcHRpb24uaW5wdXRzIHx8IGRlc2NyaXB0aW9uLmlucHV0cy5sZW5ndGggPT09IDApCiAgICAgIHRocm93IG5ldyBBYmlDb25zdHJ1Y3RvclBhcmFtc05vdEZvdW5kRXJyb3IoeyBkb2NzUGF0aDogZG9jc1BhdGg4IH0pOwogICAgY29uc3QgYXJncyA9IGRlY29kZUFiaVBhcmFtZXRlcnMoZGVzY3JpcHRpb24uaW5wdXRzLCBgMHgke2RhdGEucmVwbGFjZShieXRlY29kZSwgIiIpfWApOwogICAgcmV0dXJuIHsgYXJncywgYnl0ZWNvZGUgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vaW5kZXguanMKICBpbml0X2RlY29kZUVycm9yUmVzdWx0KCk7CiAgaW5pdF9kZWNvZGVGdW5jdGlvblJlc3VsdCgpOwogIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogIGluaXRfZW5jb2RlRGVwbG95RGF0YSgpOwogIGluaXRfZW5jb2RlRnVuY3Rpb25EYXRhKCk7CiAgaW5pdF9wcmVwYXJlRW5jb2RlRnVuY3Rpb25EYXRhKCk7CiAgaW5pdF90cmFuc2FjdGlvblJlcXVlc3QoKTsKICBpbml0X2dldEFiaUl0ZW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvY29tcGFjdFNpZ25hdHVyZVRvU2lnbmF0dXJlLmpzCiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIGNvbXBhY3RTaWduYXR1cmVUb1NpZ25hdHVyZSh7IHIsIHlQYXJpdHlBbmRTIH0pIHsKICAgIGNvbnN0IHlQYXJpdHlBbmRTX2J5dGVzID0gaGV4VG9CeXRlcyh5UGFyaXR5QW5kUyk7CiAgICBjb25zdCB5UGFyaXR5ID0geVBhcml0eUFuZFNfYnl0ZXNbMF0gJiAxMjggPyAxIDogMDsKICAgIGNvbnN0IHMgPSB5UGFyaXR5QW5kU19ieXRlczsKICAgIGlmICh5UGFyaXR5ID09PSAxKQogICAgICBzWzBdICY9IDEyNzsKICAgIHJldHVybiB7IHIsIHM6IGJ5dGVzVG9IZXgocyksIHlQYXJpdHkgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3BhcnNlQ29tcGFjdFNpZ25hdHVyZS5qcwogIGluaXRfc2VjcDI1NmsxKCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIHBhcnNlQ29tcGFjdFNpZ25hdHVyZShzaWduYXR1cmVIZXgpIHsKICAgIGNvbnN0IHsgciwgcyB9ID0gc2VjcDI1NmsxLlNpZ25hdHVyZS5mcm9tQ29tcGFjdChzaWduYXR1cmVIZXguc2xpY2UoMiwgMTMwKSk7CiAgICByZXR1cm4gewogICAgICByOiBudW1iZXJUb0hleChyLCB7IHNpemU6IDMyIH0pLAogICAgICB5UGFyaXR5QW5kUzogbnVtYmVyVG9IZXgocywgeyBzaXplOiAzMiB9KQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3BhcnNlU2lnbmF0dXJlLmpzCiAgaW5pdF9zZWNwMjU2azEoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmUyKHNpZ25hdHVyZUhleCkgewogICAgY29uc3QgeyByLCBzIH0gPSBzZWNwMjU2azEuU2lnbmF0dXJlLmZyb21Db21wYWN0KHNpZ25hdHVyZUhleC5zbGljZSgyLCAxMzApKTsKICAgIGNvbnN0IHlQYXJpdHlPclYgPSBOdW1iZXIoYDB4JHtzaWduYXR1cmVIZXguc2xpY2UoMTMwKX1gKTsKICAgIGNvbnN0IFt2LCB5UGFyaXR5XSA9ICgoKSA9PiB7CiAgICAgIGlmICh5UGFyaXR5T3JWID09PSAwIHx8IHlQYXJpdHlPclYgPT09IDEpCiAgICAgICAgcmV0dXJuIFt2b2lkIDAsIHlQYXJpdHlPclZdOwogICAgICBpZiAoeVBhcml0eU9yViA9PT0gMjcpCiAgICAgICAgcmV0dXJuIFtCaWdJbnQoeVBhcml0eU9yViksIDBdOwogICAgICBpZiAoeVBhcml0eU9yViA9PT0gMjgpCiAgICAgICAgcmV0dXJuIFtCaWdJbnQoeVBhcml0eU9yViksIDFdOwogICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeVBhcml0eU9yViB2YWx1ZSIpOwogICAgfSkoKTsKICAgIGlmICh0eXBlb2YgdiAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJldHVybiB7CiAgICAgICAgcjogbnVtYmVyVG9IZXgociwgeyBzaXplOiAzMiB9KSwKICAgICAgICBzOiBudW1iZXJUb0hleChzLCB7IHNpemU6IDMyIH0pLAogICAgICAgIHYsCiAgICAgICAgeVBhcml0eQogICAgICB9OwogICAgcmV0dXJuIHsKICAgICAgcjogbnVtYmVyVG9IZXgociwgeyBzaXplOiAzMiB9KSwKICAgICAgczogbnVtYmVyVG9IZXgocywgeyBzaXplOiAzMiB9KSwKICAgICAgeVBhcml0eQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3JlY292ZXJUcmFuc2FjdGlvbkFkZHJlc3MuanMKICBpbml0X2tlY2NhazI1NigpOwogIGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJUcmFuc2FjdGlvbkFkZHJlc3MocGFyYW1ldGVycykgewogICAgY29uc3QgeyBzZXJpYWxpemVkVHJhbnNhY3Rpb24sIHNpZ25hdHVyZTogc2lnbmF0dXJlXyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gcGFyc2VUcmFuc2FjdGlvbihzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmF0dXJlXyA/PyB7CiAgICAgIHI6IHRyYW5zYWN0aW9uLnIsCiAgICAgIHM6IHRyYW5zYWN0aW9uLnMsCiAgICAgIHY6IHRyYW5zYWN0aW9uLnYsCiAgICAgIHlQYXJpdHk6IHRyYW5zYWN0aW9uLnlQYXJpdHkKICAgIH07CiAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplVHJhbnNhY3Rpb24oewogICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgcjogdm9pZCAwLAogICAgICBzOiB2b2lkIDAsCiAgICAgIHY6IHZvaWQgMCwKICAgICAgeVBhcml0eTogdm9pZCAwLAogICAgICBzaWRlY2Fyczogdm9pZCAwCiAgICB9KTsKICAgIHJldHVybiBhd2FpdCByZWNvdmVyQWRkcmVzcyh7CiAgICAgIGhhc2g6IGtlY2NhazI1NihzZXJpYWxpemVkKSwKICAgICAgc2lnbmF0dXJlCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3NpZ25hdHVyZVRvQ29tcGFjdFNpZ25hdHVyZS5qcwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBzaWduYXR1cmVUb0NvbXBhY3RTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICBjb25zdCB7IHIsIHMsIHYsIHlQYXJpdHkgfSA9IHNpZ25hdHVyZTsKICAgIGNvbnN0IHlQYXJpdHlfID0gTnVtYmVyKHlQYXJpdHkgPz8gdiAtIDI3bik7CiAgICBsZXQgeVBhcml0eUFuZFMgPSBzOwogICAgaWYgKHlQYXJpdHlfID09PSAxKSB7CiAgICAgIGNvbnN0IGJ5dGVzMiA9IGhleFRvQnl0ZXMocyk7CiAgICAgIGJ5dGVzMlswXSB8PSAxMjg7CiAgICAgIHlQYXJpdHlBbmRTID0gYnl0ZXNUb0hleChieXRlczIpOwogICAgfQogICAgcmV0dXJuIHsgciwgeVBhcml0eUFuZFMgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3NlcmlhbGl6ZUNvbXBhY3RTaWduYXR1cmUuanMKICBpbml0X3NlY3AyNTZrMSgpOwogIGluaXRfZnJvbUhleCgpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZUNvbXBhY3RTaWduYXR1cmUoeyByLCB5UGFyaXR5QW5kUyB9KSB7CiAgICByZXR1cm4gYDB4JHtuZXcgc2VjcDI1NmsxLlNpZ25hdHVyZShoZXhUb0JpZ0ludChyKSwgaGV4VG9CaWdJbnQoeVBhcml0eUFuZFMpKS50b0NvbXBhY3RIZXgoKX1gOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9pbmRleC5qcwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X2Zyb21CeXRlcygpOwogIGluaXRfY2NpcDIoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL3NpZGVjYXJzVG9WZXJzaW9uZWRIYXNoZXMuanMKICBmdW5jdGlvbiBzaWRlY2Fyc1RvVmVyc2lvbmVkSGFzaGVzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgc2lkZWNhcnMsIHZlcnNpb246IHZlcnNpb24zIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgdG8gPSBwYXJhbWV0ZXJzLnRvID8/ICh0eXBlb2Ygc2lkZWNhcnNbMF0uYmxvYiA9PT0gInN0cmluZyIgPyAiaGV4IiA6ICJieXRlcyIpOwogICAgY29uc3QgaGFzaGVzID0gW107CiAgICBmb3IgKGNvbnN0IHsgY29tbWl0bWVudCB9IG9mIHNpZGVjYXJzKSB7CiAgICAgIGhhc2hlcy5wdXNoKGNvbW1pdG1lbnRUb1ZlcnNpb25lZEhhc2goewogICAgICAgIGNvbW1pdG1lbnQsCiAgICAgICAgdG8sCiAgICAgICAgdmVyc2lvbjogdmVyc2lvbjMKICAgICAgfSkpOwogICAgfQogICAgcmV0dXJuIGhhc2hlczsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYmxvYi9mcm9tQmxvYnMuanMKICBpbml0X2N1cnNvcjIoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gZnJvbUJsb2JzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IGJsb2JzID0gdHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gcGFyYW1ldGVycy5ibG9icy5tYXAoKHgpID0+IGhleFRvQnl0ZXMoeCkpIDogcGFyYW1ldGVycy5ibG9iczsKICAgIGNvbnN0IGxlbmd0aCA9IGJsb2JzLnJlZHVjZSgobGVuZ3RoMiwgYmxvYikgPT4gbGVuZ3RoMiArIGJsb2IubGVuZ3RoLCAwKTsKICAgIGNvbnN0IGRhdGEgPSBjcmVhdGVDdXJzb3IobmV3IFVpbnQ4QXJyYXkobGVuZ3RoKSk7CiAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgIGZvciAoY29uc3QgYmxvYiBvZiBibG9icykgewogICAgICBjb25zdCBjdXJzb3IgPSBjcmVhdGVDdXJzb3IoYmxvYik7CiAgICAgIHdoaWxlIChhY3RpdmUgJiYgY3Vyc29yLnBvc2l0aW9uIDwgYmxvYi5sZW5ndGgpIHsKICAgICAgICBjdXJzb3IuaW5jcmVtZW50UG9zaXRpb24oMSk7CiAgICAgICAgbGV0IGNvbnN1bWUgPSAzMTsKICAgICAgICBpZiAoYmxvYi5sZW5ndGggLSBjdXJzb3IucG9zaXRpb24gPCAzMSkKICAgICAgICAgIGNvbnN1bWUgPSBibG9iLmxlbmd0aCAtIGN1cnNvci5wb3NpdGlvbjsKICAgICAgICBmb3IgKGNvbnN0IF8gaW4gQXJyYXkuZnJvbSh7IGxlbmd0aDogY29uc3VtZSB9KSkgewogICAgICAgICAgY29uc3QgYnl0ZSA9IGN1cnNvci5yZWFkQnl0ZSgpOwogICAgICAgICAgY29uc3QgaXNUZXJtaW5hdG9yID0gYnl0ZSA9PT0gMTI4ICYmICFjdXJzb3IuaW5zcGVjdEJ5dGVzKGN1cnNvci5yZW1haW5pbmcpLmluY2x1ZGVzKDEyOCk7CiAgICAgICAgICBpZiAoaXNUZXJtaW5hdG9yKSB7CiAgICAgICAgICAgIGFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGRhdGEucHVzaEJ5dGUoYnl0ZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBjb25zdCB0cmltbWVkRGF0YSA9IGRhdGEuYnl0ZXMuc2xpY2UoMCwgZGF0YS5wb3NpdGlvbik7CiAgICByZXR1cm4gdG8gPT09ICJoZXgiID8gYnl0ZXNUb0hleCh0cmltbWVkRGF0YSkgOiB0cmltbWVkRGF0YTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMva3pnL2RlZmluZUt6Zy5qcwogIGZ1bmN0aW9uIGRlZmluZUt6Zyh7IGJsb2JUb0t6Z0NvbW1pdG1lbnQsIGNvbXB1dGVCbG9iS3pnUHJvb2YgfSkgewogICAgcmV0dXJuIHsKICAgICAgYmxvYlRvS3pnQ29tbWl0bWVudCwKICAgICAgY29tcHV0ZUJsb2JLemdQcm9vZgogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMva3pnL3NldHVwS3pnLmpzCiAgZnVuY3Rpb24gc2V0dXBLemcocGFyYW1ldGVycywgcGF0aCkgewogICAgdHJ5IHsKICAgICAgcGFyYW1ldGVycy5sb2FkVHJ1c3RlZFNldHVwKHBhdGgpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBjb25zdCBlcnJvciA9IGU7CiAgICAgIGlmICghZXJyb3IubWVzc2FnZS5pbmNsdWRlcygidHJ1c3RlZCBzZXR1cCBpcyBhbHJlYWR5IGxvYWRlZCIpKQogICAgICAgIHRocm93IGVycm9yOwogICAgfQogICAgcmV0dXJuIGRlZmluZUt6ZyhwYXJhbWV0ZXJzKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vaW5kZXguanMKICBpbml0X2NvbmNhdCgpOwogIGluaXRfZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoKTsKICBpbml0X2Zvcm1hdEV0aGVyKCk7CiAgaW5pdF9mb3JtYXRHd2VpKCk7CiAgaW5pdF9mb3JtYXRVbml0cygpOwogIGluaXRfZnJvbUhleCgpOwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfdG9FdmVudFNlbGVjdG9yKCk7CiAgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IoKTsKICBpbml0X2lzQWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzRXF1YWwoKTsKICBpbml0X2lzSGV4KCk7CiAgaW5pdF9rZWNjYWsyNTYoKTsKICBpbml0X3BhZCgpOwogIGluaXRfc2l6ZSgpOwogIGluaXRfc2xpY2UoKTsKICBpbml0X3N0cmluZ2lmeSgpOwogIGluaXRfdHJpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9pbmRleC5qcwogIHZhciBjaGFpbnNfZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KGNoYWluc19leHBvcnRzLCB7CiAgICBhYnN0cmFjdFRlc3RuZXQ6ICgpID0+IGFic3RyYWN0VGVzdG5ldCwKICAgIGFjYWxhOiAoKSA9PiBhY2FsYSwKICAgIGFuY2llbnQ4OiAoKSA9PiBhbmNpZW50OCwKICAgIGFuY2llbnQ4U2Vwb2xpYTogKCkgPT4gYW5jaWVudDhTZXBvbGlhLAogICAgYW52aWw6ICgpID0+IGFudmlsLAogICAgYXBleFRlc3RuZXQ6ICgpID0+IGFwZXhUZXN0bmV0LAogICAgYXJiaXRydW06ICgpID0+IGFyYml0cnVtLAogICAgYXJiaXRydW1Hb2VybGk6ICgpID0+IGFyYml0cnVtR29lcmxpLAogICAgYXJiaXRydW1Ob3ZhOiAoKSA9PiBhcmJpdHJ1bU5vdmEsCiAgICBhcmJpdHJ1bVNlcG9saWE6ICgpID0+IGFyYml0cnVtU2Vwb2xpYSwKICAgIGFyZW9uTmV0d29yazogKCkgPT4gYXJlb25OZXR3b3JrLAogICAgYXJlb25OZXR3b3JrVGVzdG5ldDogKCkgPT4gYXJlb25OZXR3b3JrVGVzdG5ldCwKICAgIGFydGVsYVRlc3RuZXQ6ICgpID0+IGFydGVsYVRlc3RuZXQsCiAgICBhc3NldENoYWluVGVzdG5ldDogKCkgPT4gYXNzZXRDaGFpblRlc3RuZXQsCiAgICBhc3RhcjogKCkgPT4gYXN0YXIsCiAgICBhc3RhclprRVZNOiAoKSA9PiBhc3RhclprRVZNLAogICAgYXN0YXJaa3lvdG86ICgpID0+IGFzdGFyWmt5b3RvLAogICAgYXRsZXRhT2x5bXBpYTogKCkgPT4gYXRsZXRhT2x5bXBpYSwKICAgIGF1cm9yYTogKCkgPT4gYXVyb3JhLAogICAgYXVyb3JhVGVzdG5ldDogKCkgPT4gYXVyb3JhVGVzdG5ldCwKICAgIGF1cm9yaWE6ICgpID0+IGF1cm9yaWEsCiAgICBhdmFsYW5jaGU6ICgpID0+IGF2YWxhbmNoZSwKICAgIGF2YWxhbmNoZUZ1amk6ICgpID0+IGF2YWxhbmNoZUZ1amksCiAgICBiMzogKCkgPT4gYjMsCiAgICBiM1NlcG9saWE6ICgpID0+IGIzU2Vwb2xpYSwKICAgIGJhaGFtdXQ6ICgpID0+IGJhaGFtdXQsCiAgICBiYXNlOiAoKSA9PiBiYXNlLAogICAgYmFzZUdvZXJsaTogKCkgPT4gYmFzZUdvZXJsaSwKICAgIGJhc2VTZXBvbGlhOiAoKSA9PiBiYXNlU2Vwb2xpYSwKICAgIGJlYW06ICgpID0+IGJlYW0sCiAgICBiZWFtVGVzdG5ldDogKCkgPT4gYmVhbVRlc3RuZXQsCiAgICBiZWFyTmV0d29ya0NoYWluTWFpbm5ldDogKCkgPT4gYmVhck5ldHdvcmtDaGFpbk1haW5uZXQsCiAgICBiZWFyTmV0d29ya0NoYWluVGVzdG5ldDogKCkgPT4gYmVhck5ldHdvcmtDaGFpblRlc3RuZXQsCiAgICBiZXJhY2hhaW5UZXN0bmV0OiAoKSA9PiBiZXJhY2hhaW5UZXN0bmV0LAogICAgYmVyYWNoYWluVGVzdG5ldGJBcnRpbzogKCkgPT4gYmVyYWNoYWluVGVzdG5ldGJBcnRpbywKICAgIGJldm1NYWlubmV0OiAoKSA9PiBiZXZtTWFpbm5ldCwKICAgIGJpdFRvcnJlbnQ6ICgpID0+IGJpdFRvcnJlbnQsCiAgICBiaXRUb3JyZW50VGVzdG5ldDogKCkgPT4gYml0VG9ycmVudFRlc3RuZXQsCiAgICBiaXRrdWI6ICgpID0+IGJpdGt1YiwKICAgIGJpdGt1YlRlc3RuZXQ6ICgpID0+IGJpdGt1YlRlc3RuZXQsCiAgICBibGFzdDogKCkgPT4gYmxhc3QsCiAgICBibGFzdFNlcG9saWE6ICgpID0+IGJsYXN0U2Vwb2xpYSwKICAgIGJvYjogKCkgPT4gYm9iLAogICAgYm9iU2Vwb2xpYTogKCkgPT4gYm9iU2Vwb2xpYSwKICAgIGJvYmE6ICgpID0+IGJvYmEsCiAgICBib2JhU2Vwb2xpYTogKCkgPT4gYm9iYVNlcG9saWEsCiAgICBicm9ub3M6ICgpID0+IGJyb25vcywKICAgIGJyb25vc1Rlc3RuZXQ6ICgpID0+IGJyb25vc1Rlc3RuZXQsCiAgICBic2M6ICgpID0+IGJzYywKICAgIGJzY0dyZWVuZmllbGQ6ICgpID0+IGJzY0dyZWVuZmllbGQsCiAgICBic2NUZXN0bmV0OiAoKSA9PiBic2NUZXN0bmV0LAogICAgYnRyOiAoKSA9PiBidHIsCiAgICBidHJUZXN0bmV0OiAoKSA9PiBidHJUZXN0bmV0LAogICAgYnhuOiAoKSA9PiBieG4sCiAgICBieG5UZXN0bmV0OiAoKSA9PiBieG5UZXN0bmV0LAogICAgY2FudG86ICgpID0+IGNhbnRvLAogICAgY2VsbzogKCkgPT4gY2VsbywKICAgIGNlbG9BbGZham9yZXM6ICgpID0+IGNlbG9BbGZham9yZXMsCiAgICBjaGlsaXo6ICgpID0+IGNoaWxpeiwKICAgIGNoaXBzOiAoKSA9PiBjaGlwcywKICAgIGNsYXNzaWM6ICgpID0+IGNsYXNzaWMsCiAgICBjb25mbHV4RVNwYWNlOiAoKSA9PiBjb25mbHV4RVNwYWNlLAogICAgY29uZmx1eEVTcGFjZVRlc3RuZXQ6ICgpID0+IGNvbmZsdXhFU3BhY2VUZXN0bmV0LAogICAgY29yZURhbzogKCkgPT4gY29yZURhbywKICAgIGNyYWI6ICgpID0+IGNyYWIsCiAgICBjcm9ub3M6ICgpID0+IGNyb25vcywKICAgIGNyb25vc1Rlc3RuZXQ6ICgpID0+IGNyb25vc1Rlc3RuZXQsCiAgICBjcm9ub3N6a0VWTTogKCkgPT4gY3Jvbm9zemtFVk0sCiAgICBjcm9ub3N6a0VWTVRlc3RuZXQ6ICgpID0+IGNyb25vc3prRVZNVGVzdG5ldCwKICAgIGNyb3NzYmVsbDogKCkgPT4gY3Jvc3NiZWxsLAogICAgY3VydGlzOiAoKSA9PiBjdXJ0aXMsCiAgICBjeWJlcjogKCkgPT4gY3liZXIsCiAgICBjeWJlclRlc3RuZXQ6ICgpID0+IGN5YmVyVGVzdG5ldCwKICAgIGRhcndpbmlhOiAoKSA9PiBkYXJ3aW5pYSwKICAgIGRjaGFpbjogKCkgPT4gZGNoYWluLAogICAgZGNoYWluVGVzdG5ldDogKCkgPT4gZGNoYWluVGVzdG5ldCwKICAgIGRlZmljaGFpbkV2bTogKCkgPT4gZGVmaWNoYWluRXZtLAogICAgZGVmaWNoYWluRXZtVGVzdG5ldDogKCkgPT4gZGVmaWNoYWluRXZtVGVzdG5ldCwKICAgIGRlZ2VuOiAoKSA9PiBkZWdlbiwKICAgIGRmazogKCkgPT4gZGZrLAogICAgZG9kb2NoYWluVGVzdG5ldDogKCkgPT4gZG9kb2NoYWluVGVzdG5ldCwKICAgIGRvZ2VjaGFpbjogKCkgPT4gZG9nZWNoYWluLAogICAgZHJleWVyeE1haW5uZXQ6ICgpID0+IGRyZXllcnhNYWlubmV0LAogICAgZHJleWVyeFRlc3RuZXQ6ICgpID0+IGRyZXllcnhUZXN0bmV0LAogICAgZWRnZWxlc3M6ICgpID0+IGVkZ2VsZXNzLAogICAgZWRnZWxlc3NUZXN0bmV0OiAoKSA9PiBlZGdlbGVzc1Rlc3RuZXQsCiAgICBlZGdld2FyZTogKCkgPT4gZWRnZXdhcmUsCiAgICBlZGdld2FyZVRlc3RuZXQ6ICgpID0+IGVkZ2V3YXJlVGVzdG5ldCwKICAgIGVrdGE6ICgpID0+IGVrdGEsCiAgICBla3RhVGVzdG5ldDogKCkgPT4gZWt0YVRlc3RuZXQsCiAgICBlb246ICgpID0+IGVvbiwKICAgIGVvczogKCkgPT4gZW9zLAogICAgZW9zVGVzdG5ldDogKCkgPT4gZW9zVGVzdG5ldCwKICAgIGV0aGVybGluazogKCkgPT4gZXRoZXJsaW5rLAogICAgZXRoZXJsaW5rVGVzdG5ldDogKCkgPT4gZXRoZXJsaW5rVGVzdG5ldCwKICAgIGV2bW9zOiAoKSA9PiBldm1vcywKICAgIGV2bW9zVGVzdG5ldDogKCkgPT4gZXZtb3NUZXN0bmV0LAogICAgZmFudG9tOiAoKSA9PiBmYW50b20sCiAgICBmYW50b21Tb25pY1Rlc3RuZXQ6ICgpID0+IGZhbnRvbVNvbmljVGVzdG5ldCwKICAgIGZhbnRvbVRlc3RuZXQ6ICgpID0+IGZhbnRvbVRlc3RuZXQsCiAgICBmaWJvOiAoKSA9PiBmaWJvLAogICAgZmlsZWNvaW46ICgpID0+IGZpbGVjb2luLAogICAgZmlsZWNvaW5DYWxpYnJhdGlvbjogKCkgPT4gZmlsZWNvaW5DYWxpYnJhdGlvbiwKICAgIGZpbGVjb2luSHlwZXJzcGFjZTogKCkgPT4gZmlsZWNvaW5IeXBlcnNwYWNlLAogICAgZmxhcmU6ICgpID0+IGZsYXJlLAogICAgZmxhcmVUZXN0bmV0OiAoKSA9PiBmbGFyZVRlc3RuZXQsCiAgICBmbG93TWFpbm5ldDogKCkgPT4gZmxvd01haW5uZXQsCiAgICBmbG93UHJldmlld25ldDogKCkgPT4gZmxvd1ByZXZpZXduZXQsCiAgICBmbG93VGVzdG5ldDogKCkgPT4gZmxvd1Rlc3RuZXQsCiAgICBmb3JtYTogKCkgPT4gZm9ybWEsCiAgICBmb3VuZHJ5OiAoKSA9PiBmb3VuZHJ5LAogICAgZnJheHRhbDogKCkgPT4gZnJheHRhbCwKICAgIGZyYXh0YWxUZXN0bmV0OiAoKSA9PiBmcmF4dGFsVGVzdG5ldCwKICAgIGZ1bmtpTWFpbm5ldDogKCkgPT4gZnVua2lNYWlubmV0LAogICAgZnVua2lTZXBvbGlhOiAoKSA9PiBmdW5raVNlcG9saWEsCiAgICBmdXNlOiAoKSA9PiBmdXNlLAogICAgZnVzZVNwYXJrbmV0OiAoKSA9PiBmdXNlU3BhcmtuZXQsCiAgICBnbm9zaXM6ICgpID0+IGdub3NpcywKICAgIGdub3Npc0NoaWFkbzogKCkgPT4gZ25vc2lzQ2hpYWRvLAogICAgZ29iaTogKCkgPT4gZ29iaSwKICAgIGdvZXJsaTogKCkgPT4gZ29lcmxpLAogICAgZ3Jhdml0eTogKCkgPT4gZ3Jhdml0eSwKICAgIGhhbTogKCkgPT4gaGFtLAogICAgaGFxcU1haW5uZXQ6ICgpID0+IGhhcXFNYWlubmV0LAogICAgaGFxcVRlc3RlZGdlMjogKCkgPT4gaGFxcVRlc3RlZGdlMiwKICAgIGhhcmRoYXQ6ICgpID0+IGhhcmRoYXQsCiAgICBoYXJtb255T25lOiAoKSA9PiBoYXJtb255T25lLAogICAgaGVkZXJhOiAoKSA9PiBoZWRlcmEsCiAgICBoZWRlcmFQcmV2aWV3bmV0OiAoKSA9PiBoZWRlcmFQcmV2aWV3bmV0LAogICAgaGVkZXJhVGVzdG5ldDogKCkgPT4gaGVkZXJhVGVzdG5ldCwKICAgIGhvbGVza3k6ICgpID0+IGhvbGVza3ksCiAgICBpbW11dGFibGVaa0V2bTogKCkgPT4gaW1tdXRhYmxlWmtFdm0sCiAgICBpbW11dGFibGVaa0V2bVRlc3RuZXQ6ICgpID0+IGltbXV0YWJsZVprRXZtVGVzdG5ldCwKICAgIGluRVZNOiAoKSA9PiBpbkVWTSwKICAgIGlvdGE6ICgpID0+IGlvdGEsCiAgICBpb3RhVGVzdG5ldDogKCkgPT4gaW90YVRlc3RuZXQsCiAgICBpb3RleDogKCkgPT4gaW90ZXgsCiAgICBpb3RleFRlc3RuZXQ6ICgpID0+IGlvdGV4VGVzdG5ldCwKICAgIGpiYzogKCkgPT4gamJjLAogICAgamJjVGVzdG5ldDogKCkgPT4gamJjVGVzdG5ldCwKICAgIGtha2Fyb3RTZXBvbGlhOiAoKSA9PiBrYWthcm90U2Vwb2xpYSwKICAgIGthcnVyYTogKCkgPT4ga2FydXJhLAogICAga2F2YTogKCkgPT4ga2F2YSwKICAgIGthdmFUZXN0bmV0OiAoKSA9PiBrYXZhVGVzdG5ldCwKICAgIGtjYzogKCkgPT4ga2NjLAogICAga2xheXRuOiAoKSA9PiBrbGF5dG4sCiAgICBrbGF5dG5CYW9iYWI6ICgpID0+IGtsYXl0bkJhb2JhYiwKICAgIGtvaTogKCkgPT4ga29pLAogICAga3JvbWE6ICgpID0+IGtyb21hLAogICAga3JvbWFTZXBvbGlhOiAoKSA9PiBrcm9tYVNlcG9saWEsCiAgICBsM3g6ICgpID0+IGwzeCwKICAgIGwzeFRlc3RuZXQ6ICgpID0+IGwzeFRlc3RuZXQsCiAgICBsaWdodGxpbmtQZWdhc3VzOiAoKSA9PiBsaWdodGxpbmtQZWdhc3VzLAogICAgbGlnaHRsaW5rUGhvZW5peDogKCkgPT4gbGlnaHRsaW5rUGhvZW5peCwKICAgIGxpbmVhOiAoKSA9PiBsaW5lYSwKICAgIGxpbmVhR29lcmxpOiAoKSA9PiBsaW5lYUdvZXJsaSwKICAgIGxpbmVhU2Vwb2xpYTogKCkgPT4gbGluZWFTZXBvbGlhLAogICAgbGluZWFUZXN0bmV0OiAoKSA9PiBsaW5lYVRlc3RuZXQsCiAgICBsaXNrOiAoKSA9PiBsaXNrLAogICAgbGlza1NlcG9saWE6ICgpID0+IGxpc2tTZXBvbGlhLAogICAgbG9jYWxob3N0OiAoKSA9PiBsb2NhbGhvc3QsCiAgICBsdWtzbzogKCkgPT4gbHVrc28sCiAgICBsdWtzb1Rlc3RuZXQ6ICgpID0+IGx1a3NvVGVzdG5ldCwKICAgIGx5Y2FuOiAoKSA9PiBseWNhbiwKICAgIGx5cmE6ICgpID0+IGx5cmEsCiAgICBtYWlubmV0OiAoKSA9PiBtYWlubmV0LAogICAgbWFuZGFsYTogKCkgPT4gbWFuZGFsYSwKICAgIG1hbnRhOiAoKSA9PiBtYW50YSwKICAgIG1hbnRhU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IG1hbnRhU2Vwb2xpYVRlc3RuZXQsCiAgICBtYW50YVRlc3RuZXQ6ICgpID0+IG1hbnRhVGVzdG5ldCwKICAgIG1hbnRsZTogKCkgPT4gbWFudGxlLAogICAgbWFudGxlU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IG1hbnRsZVNlcG9saWFUZXN0bmV0LAogICAgbWFudGxlVGVzdG5ldDogKCkgPT4gbWFudGxlVGVzdG5ldCwKICAgIG1lcmxpbjogKCkgPT4gbWVybGluLAogICAgbWV0YWNoYWluOiAoKSA9PiBtZXRhY2hhaW4sCiAgICBtZXRhY2hhaW5Jc3RhbmJ1bDogKCkgPT4gbWV0YWNoYWluSXN0YW5idWwsCiAgICBtZXRhbEwyOiAoKSA9PiBtZXRhbEwyLAogICAgbWV0ZXI6ICgpID0+IG1ldGVyLAogICAgbWV0ZXJUZXN0bmV0OiAoKSA9PiBtZXRlclRlc3RuZXQsCiAgICBtZXRpczogKCkgPT4gbWV0aXMsCiAgICBtZXRpc0dvZXJsaTogKCkgPT4gbWV0aXNHb2VybGksCiAgICBtZXY6ICgpID0+IG1ldiwKICAgIG1ldlRlc3RuZXQ6ICgpID0+IG1ldlRlc3RuZXQsCiAgICBtaW50U2Vwb2xpYVRlc3RuZXQ6ICgpID0+IG1pbnRTZXBvbGlhVGVzdG5ldCwKICAgIG1vZGU6ICgpID0+IG1vZGUsCiAgICBtb2RlVGVzdG5ldDogKCkgPT4gbW9kZVRlc3RuZXQsCiAgICBtb29uYmFzZUFscGhhOiAoKSA9PiBtb29uYmFzZUFscGhhLAogICAgbW9vbmJlYW06ICgpID0+IG1vb25iZWFtLAogICAgbW9vbmJlYW1EZXY6ICgpID0+IG1vb25iZWFtRGV2LAogICAgbW9vbnJpdmVyOiAoKSA9PiBtb29ucml2ZXIsCiAgICBtb3JwaEhvbGVza3k6ICgpID0+IG1vcnBoSG9sZXNreSwKICAgIG1vcnBoU2Vwb2xpYTogKCkgPT4gbW9ycGhTZXBvbGlhLAogICAgbmF1dGlsdXM6ICgpID0+IG5hdXRpbHVzLAogICAgbmVvbkRldm5ldDogKCkgPT4gbmVvbkRldm5ldCwKICAgIG5lb25NYWlubmV0OiAoKSA9PiBuZW9uTWFpbm5ldCwKICAgIG5leGk6ICgpID0+IG5leGksCiAgICBuZXhpbGl4OiAoKSA9PiBuZXhpbGl4LAogICAgb2FzaXNUZXN0bmV0OiAoKSA9PiBvYXNpc1Rlc3RuZXQsCiAgICBvYXN5czogKCkgPT4gb2FzeXMsCiAgICBva2M6ICgpID0+IG9rYywKICAgIG9vcnRNYWlubmV0RGV2OiAoKSA9PiBvb3J0TWFpbm5ldERldiwKICAgIG9wQk5COiAoKSA9PiBvcEJOQiwKICAgIG9wQk5CVGVzdG5ldDogKCkgPT4gb3BCTkJUZXN0bmV0LAogICAgb3B0aW1pc206ICgpID0+IG9wdGltaXNtLAogICAgb3B0aW1pc21Hb2VybGk6ICgpID0+IG9wdGltaXNtR29lcmxpLAogICAgb3B0aW1pc21TZXBvbGlhOiAoKSA9PiBvcHRpbWlzbVNlcG9saWEsCiAgICBvdGltRGV2bmV0OiAoKSA9PiBvdGltRGV2bmV0LAogICAgcGFsbTogKCkgPT4gcGFsbSwKICAgIHBhbG1UZXN0bmV0OiAoKSA9PiBwYWxtVGVzdG5ldCwKICAgIHBnbjogKCkgPT4gcGduLAogICAgcGduVGVzdG5ldDogKCkgPT4gcGduVGVzdG5ldCwKICAgIHBob2VuaXg6ICgpID0+IHBob2VuaXgsCiAgICBwbGF5ZmlBbGJpcmVvOiAoKSA9PiBwbGF5ZmlBbGJpcmVvLAogICAgcGxpbmdhOiAoKSA9PiBwbGluZ2EsCiAgICBwbHVtZVRlc3RuZXQ6ICgpID0+IHBsdW1lVGVzdG5ldCwKICAgIHBvbHlnb246ICgpID0+IHBvbHlnb24sCiAgICBwb2x5Z29uQW1veTogKCkgPT4gcG9seWdvbkFtb3ksCiAgICBwb2x5Z29uTXVtYmFpOiAoKSA9PiBwb2x5Z29uTXVtYmFpLAogICAgcG9seWdvblprRXZtOiAoKSA9PiBwb2x5Z29uWmtFdm0sCiAgICBwb2x5Z29uWmtFdm1DYXJkb25hOiAoKSA9PiBwb2x5Z29uWmtFdm1DYXJkb25hLAogICAgcG9seWdvblprRXZtVGVzdG5ldDogKCkgPT4gcG9seWdvblprRXZtVGVzdG5ldCwKICAgIHB1bHNlY2hhaW46ICgpID0+IHB1bHNlY2hhaW4sCiAgICBwdWxzZWNoYWluVjQ6ICgpID0+IHB1bHNlY2hhaW5WNCwKICAgIHFNYWlubmV0OiAoKSA9PiBxTWFpbm5ldCwKICAgIHFUZXN0bmV0OiAoKSA9PiBxVGVzdG5ldCwKICAgIHJlYWw6ICgpID0+IHJlYWwsCiAgICByZWRiZWxseVRlc3RuZXQ6ICgpID0+IHJlZGJlbGx5VGVzdG5ldCwKICAgIHJlZHN0b25lOiAoKSA9PiByZWRzdG9uZSwKICAgIHJleWFOZXR3b3JrOiAoKSA9PiByZXlhTmV0d29yaywKICAgIHJvbGx1eDogKCkgPT4gcm9sbHV4LAogICAgcm9sbHV4VGVzdG5ldDogKCkgPT4gcm9sbHV4VGVzdG5ldCwKICAgIHJvbmluOiAoKSA9PiByb25pbiwKICAgIHJvb3Q6ICgpID0+IHJvb3QsCiAgICByb290UG9yY2luaTogKCkgPT4gcm9vdFBvcmNpbmksCiAgICByb290c3RvY2s6ICgpID0+IHJvb3RzdG9jaywKICAgIHJvb3RzdG9ja1Rlc3RuZXQ6ICgpID0+IHJvb3RzdG9ja1Rlc3RuZXQsCiAgICByc3MzOiAoKSA9PiByc3MzLAogICAgcnNzM1NlcG9saWE6ICgpID0+IHJzczNTZXBvbGlhLAogICAgc2FpZ29uOiAoKSA9PiBzYWlnb24sCiAgICBzYXBwaGlyZTogKCkgPT4gc2FwcGhpcmUsCiAgICBzYXBwaGlyZVRlc3RuZXQ6ICgpID0+IHNhcHBoaXJlVGVzdG5ldCwKICAgIHNhdG9zaGlWTTogKCkgPT4gc2F0b3NoaVZNLAogICAgc2F0b3NoaVZNVGVzdG5ldDogKCkgPT4gc2F0b3NoaVZNVGVzdG5ldCwKICAgIHNjcm9sbDogKCkgPT4gc2Nyb2xsLAogICAgc2Nyb2xsU2Vwb2xpYTogKCkgPT4gc2Nyb2xsU2Vwb2xpYSwKICAgIHNlaTogKCkgPT4gc2VpLAogICAgc2VpRGV2bmV0OiAoKSA9PiBzZWlEZXZuZXQsCiAgICBzZWlUZXN0bmV0OiAoKSA9PiBzZWlUZXN0bmV0LAogICAgc2Vwb2xpYTogKCkgPT4gc2Vwb2xpYSwKICAgIHNoYXBlU2Vwb2xpYTogKCkgPT4gc2hhcGVTZXBvbGlhLAogICAgc2hhcmRldW1TcGhpbng6ICgpID0+IHNoYXJkZXVtU3BoaW54LAogICAgc2hpYmFyaXVtOiAoKSA9PiBzaGliYXJpdW0sCiAgICBzaGliYXJpdW1UZXN0bmV0OiAoKSA9PiBzaGliYXJpdW1UZXN0bmV0LAogICAgc2hpbW1lcjogKCkgPT4gc2hpbW1lciwKICAgIHNoaW1tZXJUZXN0bmV0OiAoKSA9PiBzaGltbWVyVGVzdG5ldCwKICAgIHNrYWxlQmxvY2tCcmF3bGVyczogKCkgPT4gc2thbGVCbG9ja0JyYXdsZXJzLAogICAgc2thbGVDYWx5cHNvOiAoKSA9PiBza2FsZUNhbHlwc28sCiAgICBza2FsZUNhbHlwc29UZXN0bmV0OiAoKSA9PiBza2FsZUNhbHlwc29UZXN0bmV0LAogICAgc2thbGVDcnlwdG9CbGFkZXM6ICgpID0+IHNrYWxlQ3J5cHRvQmxhZGVzLAogICAgc2thbGVDcnlwdG9Db2xvc3NldW06ICgpID0+IHNrYWxlQ3J5cHRvQ29sb3NzZXVtLAogICAgc2thbGVFdXJvcGE6ICgpID0+IHNrYWxlRXVyb3BhLAogICAgc2thbGVFdXJvcGFUZXN0bmV0OiAoKSA9PiBza2FsZUV1cm9wYVRlc3RuZXQsCiAgICBza2FsZUV4b3JkZTogKCkgPT4gc2thbGVFeG9yZGUsCiAgICBza2FsZUh1bWFuUHJvdG9jb2w6ICgpID0+IHNrYWxlSHVtYW5Qcm90b2NvbCwKICAgIHNrYWxlTmVidWxhOiAoKSA9PiBza2FsZU5lYnVsYSwKICAgIHNrYWxlTmVidWxhVGVzdG5ldDogKCkgPT4gc2thbGVOZWJ1bGFUZXN0bmV0LAogICAgc2thbGVSYXpvcjogKCkgPT4gc2thbGVSYXpvciwKICAgIHNrYWxlVGl0YW46ICgpID0+IHNrYWxlVGl0YW4sCiAgICBza2FsZVRpdGFuVGVzdG5ldDogKCkgPT4gc2thbGVUaXRhblRlc3RuZXQsCiAgICBza2V0Y2hwYWQ6ICgpID0+IHNrZXRjaHBhZCwKICAgIHNvbmdiaXJkOiAoKSA9PiBzb25nYmlyZCwKICAgIHNvbmdiaXJkVGVzdG5ldDogKCkgPT4gc29uZ2JpcmRUZXN0bmV0LAogICAgc3BpY3k6ICgpID0+IHNwaWN5LAogICAgc3RyYXRpczogKCkgPT4gc3RyYXRpcywKICAgIHN5c2NvaW46ICgpID0+IHN5c2NvaW4sCiAgICBzeXNjb2luVGVzdG5ldDogKCkgPT4gc3lzY29pblRlc3RuZXQsCiAgICB0YWlrbzogKCkgPT4gdGFpa28sCiAgICB0YWlrb0hla2xhOiAoKSA9PiB0YWlrb0hla2xhLAogICAgdGFpa29Kb2xuaXI6ICgpID0+IHRhaWtvSm9sbmlyLAogICAgdGFpa29LYXRsYTogKCkgPT4gdGFpa29LYXRsYSwKICAgIHRhaWtvVGVzdG5ldFNlcG9saWE6ICgpID0+IHRhaWtvVGVzdG5ldFNlcG9saWEsCiAgICB0YXJheGE6ICgpID0+IHRhcmF4YSwKICAgIHRhcmF4YVRlc3RuZXQ6ICgpID0+IHRhcmF4YVRlc3RuZXQsCiAgICB0ZWxjb2luVGVzdG5ldDogKCkgPT4gdGVsY29pblRlc3RuZXQsCiAgICB0ZWxvczogKCkgPT4gdGVsb3MsCiAgICB0ZWxvc1Rlc3RuZXQ6ICgpID0+IHRlbG9zVGVzdG5ldCwKICAgIHRlbmV0OiAoKSA9PiB0ZW5ldCwKICAgIHRoYWlDaGFpbjogKCkgPT4gdGhhaUNoYWluLAogICAgdGh1bmRlclRlc3RuZXQ6ICgpID0+IHRodW5kZXJUZXN0bmV0LAogICAgdW5yZWFsOiAoKSA9PiB1bnJlYWwsCiAgICB2ZWNoYWluOiAoKSA9PiB2ZWNoYWluLAogICAgd2FuY2hhaW46ICgpID0+IHdhbmNoYWluLAogICAgd2FuY2hhaW5UZXN0bmV0OiAoKSA9PiB3YW5jaGFpblRlc3RuZXQsCiAgICB3ZW1peDogKCkgPT4gd2VtaXgsCiAgICB3ZW1peFRlc3RuZXQ6ICgpID0+IHdlbWl4VGVzdG5ldCwKICAgIHgxVGVzdG5ldDogKCkgPT4geExheWVyVGVzdG5ldCwKICAgIHhMYXllcjogKCkgPT4geExheWVyLAogICAgeExheWVyVGVzdG5ldDogKCkgPT4geExheWVyVGVzdG5ldCwKICAgIHhhaTogKCkgPT4geGFpLAogICAgeGFpVGVzdG5ldDogKCkgPT4geGFpVGVzdG5ldCwKICAgIHhkYzogKCkgPT4geGRjLAogICAgeGRjVGVzdG5ldDogKCkgPT4geGRjVGVzdG5ldCwKICAgIHhyU2Vwb2xpYTogKCkgPT4geHJTZXBvbGlhLAogICAgeW9vbGRvVmVyc2U6ICgpID0+IHlvb2xkb1ZlcnNlLAogICAgeW9vbGRvVmVyc2VUZXN0bmV0OiAoKSA9PiB5b29sZG9WZXJzZVRlc3RuZXQsCiAgICB6ZXRhY2hhaW46ICgpID0+IHpldGFjaGFpbiwKICAgIHpldGFjaGFpbkF0aGVuc1Rlc3RuZXQ6ICgpID0+IHpldGFjaGFpbkF0aGVuc1Rlc3RuZXQsCiAgICB6aGVqaWFuZzogKCkgPT4gemhlamlhbmcsCiAgICB6aWxsaXFhOiAoKSA9PiB6aWxsaXFhLAogICAgemlsbGlxYVRlc3RuZXQ6ICgpID0+IHppbGxpcWFUZXN0bmV0LAogICAgemlyY3VpdFRlc3RuZXQ6ICgpID0+IHppcmN1aXRUZXN0bmV0LAogICAgemtGYWlyOiAoKSA9PiB6a0ZhaXIsCiAgICB6a0ZhaXJUZXN0bmV0OiAoKSA9PiB6a0ZhaXJUZXN0bmV0LAogICAgemtMaW5rTm92YTogKCkgPT4gemtMaW5rTm92YSwKICAgIHprTGlua05vdmFTZXBvbGlhVGVzdG5ldDogKCkgPT4gemtMaW5rTm92YVNlcG9saWFUZXN0bmV0LAogICAgemtTeW5jOiAoKSA9PiB6a3N5bmMsCiAgICB6a1N5bmNJbk1lbW9yeU5vZGU6ICgpID0+IHprc3luY0luTWVtb3J5Tm9kZSwKICAgIHprU3luY0xvY2FsTm9kZTogKCkgPT4gemtzeW5jTG9jYWxOb2RlLAogICAgemtTeW5jU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IHprc3luY1NlcG9saWFUZXN0bmV0LAogICAgemtzeW5jOiAoKSA9PiB6a3N5bmMsCiAgICB6a3N5bmNJbk1lbW9yeU5vZGU6ICgpID0+IHprc3luY0luTWVtb3J5Tm9kZSwKICAgIHprc3luY0xvY2FsTm9kZTogKCkgPT4gemtzeW5jTG9jYWxOb2RlLAogICAgemtzeW5jU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IHprc3luY1NlcG9saWFUZXN0bmV0LAogICAgem9yYTogKCkgPT4gem9yYSwKICAgIHpvcmFTZXBvbGlhOiAoKSA9PiB6b3JhU2Vwb2xpYSwKICAgIHpvcmFUZXN0bmV0OiAoKSA9PiB6b3JhVGVzdG5ldAogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9mb3JtYXR0ZXJzLmpzCiAgaW5pdF9mcm9tSGV4KCk7CiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGluaXRfdHJhbnNhY3Rpb25SZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL2NvbnN0YW50cy9udW1iZXIuanMKICB2YXIgZ2FzUGVyUHViZGF0YURlZmF1bHQgPSA1MDAwMG47CiAgdmFyIG1heEJ5dGVjb2RlU2l6ZSA9IG1heFVpbnQxNiAqIDMybjsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvZm9ybWF0dGVycy5qcwogIHZhciBmb3JtYXR0ZXJzID0gewogICAgYmxvY2s6IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVCbG9jayh7CiAgICAgIGZvcm1hdChhcmdzKSB7CiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25zID0gYXJncy50cmFuc2FjdGlvbnM/Lm1hcCgodHJhbnNhY3Rpb24pID0+IHsKICAgICAgICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24gPT09ICJzdHJpbmciKQogICAgICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXR0ZXJzLnRyYW5zYWN0aW9uPy5mb3JtYXQodHJhbnNhY3Rpb24pOwogICAgICAgICAgaWYgKGZvcm1hdHRlZC50eXBlSGV4ID09PSAiMHg3MSIpCiAgICAgICAgICAgIGZvcm1hdHRlZC50eXBlID0gImVpcDcxMiI7CiAgICAgICAgICBlbHNlIGlmIChmb3JtYXR0ZWQudHlwZUhleCA9PT0gIjB4ZmYiKQogICAgICAgICAgICBmb3JtYXR0ZWQudHlwZSA9ICJwcmlvcml0eSI7CiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBsMUJhdGNoTnVtYmVyOiBhcmdzLmwxQmF0Y2hOdW1iZXIgPyBoZXhUb0JpZ0ludChhcmdzLmwxQmF0Y2hOdW1iZXIpIDogbnVsbCwKICAgICAgICAgIGwxQmF0Y2hUaW1lc3RhbXA6IGFyZ3MubDFCYXRjaFRpbWVzdGFtcCA/IGhleFRvQmlnSW50KGFyZ3MubDFCYXRjaFRpbWVzdGFtcCkgOiBudWxsLAogICAgICAgICAgdHJhbnNhY3Rpb25zCiAgICAgICAgfTsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvbjogLyogQF9fUFVSRV9fICovIGRlZmluZVRyYW5zYWN0aW9uKHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHt9OwogICAgICAgIGlmIChhcmdzLnR5cGUgPT09ICIweDcxIikKICAgICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAiZWlwNzEyIjsKICAgICAgICBlbHNlIGlmIChhcmdzLnR5cGUgPT09ICIweGZmIikKICAgICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAicHJpb3JpdHkiOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgICAgIGwxQmF0Y2hOdW1iZXI6IGFyZ3MubDFCYXRjaE51bWJlciA/IGhleFRvQmlnSW50KGFyZ3MubDFCYXRjaE51bWJlcikgOiBudWxsLAogICAgICAgICAgbDFCYXRjaFR4SW5kZXg6IGFyZ3MubDFCYXRjaFR4SW5kZXggPyBoZXhUb0JpZ0ludChhcmdzLmwxQmF0Y2hUeEluZGV4KSA6IG51bGwKICAgICAgICB9OwogICAgICB9CiAgICB9KSwKICAgIHRyYW5zYWN0aW9uUmVjZWlwdDogLyogQF9fUFVSRV9fICovIGRlZmluZVRyYW5zYWN0aW9uUmVjZWlwdCh7CiAgICAgIGZvcm1hdChhcmdzKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGwxQmF0Y2hOdW1iZXI6IGFyZ3MubDFCYXRjaE51bWJlciA/IGhleFRvQmlnSW50KGFyZ3MubDFCYXRjaE51bWJlcikgOiBudWxsLAogICAgICAgICAgbDFCYXRjaFR4SW5kZXg6IGFyZ3MubDFCYXRjaFR4SW5kZXggPyBoZXhUb0JpZ0ludChhcmdzLmwxQmF0Y2hUeEluZGV4KSA6IG51bGwsCiAgICAgICAgICBsb2dzOiBhcmdzLmxvZ3MubWFwKChsb2cpID0+IHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAuLi5mb3JtYXRMb2cobG9nKSwKICAgICAgICAgICAgICBsMUJhdGNoTnVtYmVyOiBsb2cubDFCYXRjaE51bWJlciA/IGhleFRvQmlnSW50KGxvZy5sMUJhdGNoTnVtYmVyKSA6IG51bGwsCiAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Mb2dJbmRleDogaGV4VG9OdW1iZXIobG9nLnRyYW5zYWN0aW9uTG9nSW5kZXgpLAogICAgICAgICAgICAgIGxvZ1R5cGU6IGxvZy5sb2dUeXBlCiAgICAgICAgICAgIH07CiAgICAgICAgICB9KSwKICAgICAgICAgIGwyVG9MMUxvZ3M6IGFyZ3MubDJUb0wxTG9ncy5tYXAoKGwyVG9MMUxvZykgPT4gewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIGJsb2NrTnVtYmVyOiBoZXhUb0JpZ0ludChsMlRvTDFMb2cuYmxvY2tIYXNoKSwKICAgICAgICAgICAgICBibG9ja0hhc2g6IGwyVG9MMUxvZy5ibG9ja0hhc2gsCiAgICAgICAgICAgICAgbDFCYXRjaE51bWJlcjogaGV4VG9CaWdJbnQobDJUb0wxTG9nLmwxQmF0Y2hOdW1iZXIpLAogICAgICAgICAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IGhleFRvQmlnSW50KGwyVG9MMUxvZy50cmFuc2FjdGlvbkluZGV4KSwKICAgICAgICAgICAgICBzaGFyZElkOiBoZXhUb0JpZ0ludChsMlRvTDFMb2cuc2hhcmRJZCksCiAgICAgICAgICAgICAgaXNTZXJ2aWNlOiBsMlRvTDFMb2cuaXNTZXJ2aWNlLAogICAgICAgICAgICAgIHNlbmRlcjogbDJUb0wxTG9nLnNlbmRlciwKICAgICAgICAgICAgICBrZXk6IGwyVG9MMUxvZy5rZXksCiAgICAgICAgICAgICAgdmFsdWU6IGwyVG9MMUxvZy52YWx1ZSwKICAgICAgICAgICAgICB0cmFuc2FjdGlvbkhhc2g6IGwyVG9MMUxvZy50cmFuc2FjdGlvbkhhc2gsCiAgICAgICAgICAgICAgbG9nSW5kZXg6IGhleFRvQmlnSW50KGwyVG9MMUxvZy5sb2dJbmRleCkKICAgICAgICAgICAgfTsKICAgICAgICAgIH0pCiAgICAgICAgfTsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvblJlcXVlc3Q6IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVUcmFuc2FjdGlvblJlcXVlc3QoewogICAgICBleGNsdWRlOiBbCiAgICAgICAgImN1c3RvbVNpZ25hdHVyZSIsCiAgICAgICAgImZhY3RvcnlEZXBzIiwKICAgICAgICAiZ2FzUGVyUHViZGF0YSIsCiAgICAgICAgInBheW1hc3RlciIsCiAgICAgICAgInBheW1hc3RlcklucHV0IgogICAgICBdLAogICAgICBmb3JtYXQoYXJncykgewogICAgICAgIGlmIChhcmdzLmdhc1BlclB1YmRhdGEgfHwgYXJncy5wYXltYXN0ZXIgJiYgYXJncy5wYXltYXN0ZXJJbnB1dCB8fCBhcmdzLmZhY3RvcnlEZXBzIHx8IGFyZ3MuY3VzdG9tU2lnbmF0dXJlKQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgZWlwNzEyTWV0YTogewogICAgICAgICAgICAgIC4uLmFyZ3MuZ2FzUGVyUHViZGF0YSA/IHsgZ2FzUGVyUHViZGF0YTogdG9IZXgoYXJncy5nYXNQZXJQdWJkYXRhKSB9IDogeyBnYXNQZXJQdWJkYXRhOiB0b0hleChnYXNQZXJQdWJkYXRhRGVmYXVsdCkgfSwKICAgICAgICAgICAgICAuLi5hcmdzLnBheW1hc3RlciAmJiBhcmdzLnBheW1hc3RlcklucHV0ID8gewogICAgICAgICAgICAgICAgcGF5bWFzdGVyUGFyYW1zOiB7CiAgICAgICAgICAgICAgICAgIHBheW1hc3RlcjogYXJncy5wYXltYXN0ZXIsCiAgICAgICAgICAgICAgICAgIHBheW1hc3RlcklucHV0OiBBcnJheS5mcm9tKGhleFRvQnl0ZXMoYXJncy5wYXltYXN0ZXJJbnB1dCkpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSA6IHt9LAogICAgICAgICAgICAgIC4uLmFyZ3MuZmFjdG9yeURlcHMgPyB7CiAgICAgICAgICAgICAgICBmYWN0b3J5RGVwczogYXJncy5mYWN0b3J5RGVwcy5tYXAoKGRlcCkgPT4gQXJyYXkuZnJvbShoZXhUb0J5dGVzKGRlcCkpKQogICAgICAgICAgICAgIH0gOiB7fSwKICAgICAgICAgICAgICAuLi5hcmdzLmN1c3RvbVNpZ25hdHVyZSA/IHsKICAgICAgICAgICAgICAgIGN1c3RvbVNpZ25hdHVyZTogQXJyYXkuZnJvbShoZXhUb0J5dGVzKGFyZ3MuY3VzdG9tU2lnbmF0dXJlKSkKICAgICAgICAgICAgICB9IDoge30KICAgICAgICAgICAgfSwKICAgICAgICAgICAgdHlwZTogIjB4NzEiCiAgICAgICAgICB9OwogICAgICAgIHJldHVybiB7fTsKICAgICAgfQogICAgfSkKICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9zZXJpYWxpemVycy5qcwogIGluaXRfY29uY2F0KCk7CiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy91dGlscy9hc3NlcnRFaXA3MTJUcmFuc2FjdGlvbi5qcwogIGluaXRfYWRkcmVzcygpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY2hhaW4oKTsKICBpbml0X2lzQWRkcmVzcygpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9lcnJvcnMvdHJhbnNhY3Rpb24uanMKICBpbml0X2Jhc2UoKTsKICB2YXIgSW52YWxpZEVpcDcxMlRyYW5zYWN0aW9uRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKFsKICAgICAgICAiVHJhbnNhY3Rpb24gaXMgbm90IGFuIEVJUDcxMiB0cmFuc2FjdGlvbi4iLAogICAgICAgICIiLAogICAgICAgICJUcmFuc2FjdGlvbiBtdXN0OiIsCiAgICAgICAgJyAgLSBpbmNsdWRlIGB0eXBlOiAiZWlwNzEyImAnLAogICAgICAgICIgIC0gaW5jbHVkZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogYGN1c3RvbVNpZ25hdHVyZWAsIGBwYXltYXN0ZXJgLCBgcGF5bWFzdGVySW5wdXRgLCBgZ2FzUGVyUHViZGF0YWAsIGBmYWN0b3J5RGVwc2AiCiAgICAgIF0uam9pbigiXG4iKSwgeyBuYW1lOiAiSW52YWxpZEVpcDcxMlRyYW5zYWN0aW9uRXJyb3IiIH0pOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL3V0aWxzL2lzRWlwNzEyVHJhbnNhY3Rpb24uanMKICBmdW5jdGlvbiBpc0VJUDcxMlRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKSB7CiAgICBpZiAodHJhbnNhY3Rpb24udHlwZSA9PT0gImVpcDcxMiIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCJjdXN0b21TaWduYXR1cmUiIGluIHRyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uLmN1c3RvbVNpZ25hdHVyZSB8fCAicGF5bWFzdGVyIiBpbiB0cmFuc2FjdGlvbiAmJiB0cmFuc2FjdGlvbi5wYXltYXN0ZXIgfHwgInBheW1hc3RlcklucHV0IiBpbiB0cmFuc2FjdGlvbiAmJiB0cmFuc2FjdGlvbi5wYXltYXN0ZXJJbnB1dCB8fCAiZ2FzUGVyUHViZGF0YSIgaW4gdHJhbnNhY3Rpb24gJiYgdHlwZW9mIHRyYW5zYWN0aW9uLmdhc1BlclB1YmRhdGEgPT09ICJiaWdpbnQiIHx8ICJmYWN0b3J5RGVwcyIgaW4gdHJhbnNhY3Rpb24gJiYgdHJhbnNhY3Rpb24uZmFjdG9yeURlcHMpCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvdXRpbHMvYXNzZXJ0RWlwNzEyVHJhbnNhY3Rpb24uanMKICBmdW5jdGlvbiBhc3NlcnRFaXA3MTJUcmFuc2FjdGlvbih0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCB0bywgZnJvbSwgcGF5bWFzdGVyLCBwYXltYXN0ZXJJbnB1dCB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoIWlzRUlQNzEyVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEVpcDcxMlRyYW5zYWN0aW9uRXJyb3IoKTsKICAgIGlmICghY2hhaW5JZCB8fCBjaGFpbklkIDw9IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhaW5JZEVycm9yKHsgY2hhaW5JZCB9KTsKICAgIGlmICh0byAmJiAhaXNBZGRyZXNzKHRvKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB0byB9KTsKICAgIGlmIChmcm9tICYmICFpc0FkZHJlc3MoZnJvbSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogZnJvbSB9KTsKICAgIGlmIChwYXltYXN0ZXIgJiYgIWlzQWRkcmVzcyhwYXltYXN0ZXIpKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IHBheW1hc3RlciB9KTsKICAgIGlmIChwYXltYXN0ZXIgJiYgIXBheW1hc3RlcklucHV0KSB7CiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgcGF5bWFzdGVySW5wdXRgIG11c3QgYmUgcHJvdmlkZWQgd2hlbiBgcGF5bWFzdGVyYCBpcyBkZWZpbmVkIik7CiAgICB9CiAgICBpZiAoIXBheW1hc3RlciAmJiBwYXltYXN0ZXJJbnB1dCkgewogICAgICB0aHJvdyBuZXcgQmFzZUVycm9yMigiYHBheW1hc3RlcmAgbXVzdCBiZSBwcm92aWRlZCB3aGVuIGBwYXltYXN0ZXJJbnB1dGAgaXMgZGVmaW5lZCIpOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvc2VyaWFsaXplcnMuanMKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbjIodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgaWYgKGlzRUlQNzEyVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVA3MTIodHJhbnNhY3Rpb24pOwogICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogIH0KICB2YXIgc2VyaWFsaXplcnMgPSB7CiAgICB0cmFuc2FjdGlvbjogc2VyaWFsaXplVHJhbnNhY3Rpb24yCiAgfTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDcxMih0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBnYXMsIG5vbmNlLCB0bywgZnJvbSwgdmFsdWUsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIGN1c3RvbVNpZ25hdHVyZSwgZmFjdG9yeURlcHMsIHBheW1hc3RlciwgcGF5bWFzdGVySW5wdXQsIGdhc1BlclB1YmRhdGEsIGRhdGEgfSA9IHRyYW5zYWN0aW9uOwogICAgYXNzZXJ0RWlwNzEyVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICBub25jZSA/IHRvSGV4KG5vbmNlKSA6ICIweCIsCiAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzID8gdG9IZXgobWF4UHJpb3JpdHlGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgbWF4RmVlUGVyR2FzID8gdG9IZXgobWF4RmVlUGVyR2FzKSA6ICIweCIsCiAgICAgIGdhcyA/IHRvSGV4KGdhcykgOiAiMHgiLAogICAgICB0byA/PyAiMHgiLAogICAgICB2YWx1ZSA/IHRvSGV4KHZhbHVlKSA6ICIweCIsCiAgICAgIGRhdGEgPz8gIjB4MCIsCiAgICAgIHRvSGV4KGNoYWluSWQpLAogICAgICB0b0hleCgiIiksCiAgICAgIHRvSGV4KCIiKSwKICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgIGZyb20gPz8gIjB4IiwKICAgICAgZ2FzUGVyUHViZGF0YSA/IHRvSGV4KGdhc1BlclB1YmRhdGEpIDogdG9IZXgoZ2FzUGVyUHViZGF0YURlZmF1bHQpLAogICAgICBmYWN0b3J5RGVwcyA/PyBbXSwKICAgICAgY3VzdG9tU2lnbmF0dXJlID8/ICIweCIsCiAgICAgIC8vIEVJUDcxMiBzaWduYXR1cmUKICAgICAgcGF5bWFzdGVyICYmIHBheW1hc3RlcklucHV0ID8gW3BheW1hc3RlciwgcGF5bWFzdGVySW5wdXRdIDogW10KICAgIF07CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4NzEiLAogICAgICB0b1JscChzZXJpYWxpemVkVHJhbnNhY3Rpb24pCiAgICBdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL3V0aWxzL2dldEVpcDcxMkRvbWFpbi5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvdXRpbHMvaGFzaEJ5dGVjb2RlLmpzCiAgaW5pdF9wYWQoKTsKICBpbml0X3RvQnl0ZXMoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvZXJyb3JzL2J5dGVjb2RlLmpzCiAgaW5pdF9iYXNlKCk7CiAgdmFyIEJ5dGVjb2RlTGVuZ3RoRXhjZWVkc01heFNpemVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGdpdmVuTGVuZ3RoLCBtYXhCeXRlY29kZVNpemU6IG1heEJ5dGVjb2RlU2l6ZTIgfSkgewogICAgICBzdXBlcihgQnl0ZWNvZGUgY2Fubm90IGJlIGxvbmdlciB0aGFuICR7bWF4Qnl0ZWNvZGVTaXplMn0gYnl0ZXMuIEdpdmVuIGxlbmd0aDogJHtnaXZlbkxlbmd0aH1gLCB7IG5hbWU6ICJCeXRlY29kZUxlbmd0aEV4Y2VlZHNNYXhTaXplRXJyb3IiIH0pOwogICAgfQogIH07CiAgdmFyIEJ5dGVjb2RlTGVuZ3RoSW5Xb3Jkc011c3RCZU9kZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgZ2l2ZW5MZW5ndGhJbldvcmRzIH0pIHsKICAgICAgc3VwZXIoYEJ5dGVjb2RlIGxlbmd0aCBpbiAzMi1ieXRlIHdvcmRzIG11c3QgYmUgb2RkLiBHaXZlbiBsZW5ndGggaW4gd29yZHM6ICR7Z2l2ZW5MZW5ndGhJbldvcmRzfWAsIHsgbmFtZTogIkJ5dGVjb2RlTGVuZ3RoSW5Xb3Jkc011c3RCZU9kZEVycm9yIiB9KTsKICAgIH0KICB9OwogIHZhciBCeXRlY29kZUxlbmd0aE11c3RCZURpdmlzaWJsZUJ5MzJFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGdpdmVuTGVuZ3RoIH0pIHsKICAgICAgc3VwZXIoYFRoZSBieXRlY29kZSBsZW5ndGggaW4gYnl0ZXMgbXVzdCBiZSBkaXZpc2libGUgYnkgMzIuIEdpdmVuIGxlbmd0aDogJHtnaXZlbkxlbmd0aH1gLCB7IG5hbWU6ICJCeXRlY29kZUxlbmd0aE11c3RCZURpdmlzaWJsZUJ5MzJFcnJvciIgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvdXRpbHMvaGFzaEJ5dGVjb2RlLmpzCiAgZnVuY3Rpb24gaGFzaEJ5dGVjb2RlKGJ5dGVjb2RlKSB7CiAgICBjb25zdCBieXRlY29kZUJ5dGVzID0gdG9CeXRlcyhieXRlY29kZSk7CiAgICBpZiAoYnl0ZWNvZGVCeXRlcy5sZW5ndGggJSAzMiAhPT0gMCkKICAgICAgdGhyb3cgbmV3IEJ5dGVjb2RlTGVuZ3RoTXVzdEJlRGl2aXNpYmxlQnkzMkVycm9yKHsKICAgICAgICBnaXZlbkxlbmd0aDogYnl0ZWNvZGVCeXRlcy5sZW5ndGgKICAgICAgfSk7CiAgICBpZiAoYnl0ZWNvZGVCeXRlcy5sZW5ndGggPiBtYXhCeXRlY29kZVNpemUpCiAgICAgIHRocm93IG5ldyBCeXRlY29kZUxlbmd0aEV4Y2VlZHNNYXhTaXplRXJyb3IoewogICAgICAgIGdpdmVuTGVuZ3RoOiBieXRlY29kZUJ5dGVzLmxlbmd0aCwKICAgICAgICBtYXhCeXRlY29kZVNpemUKICAgICAgfSk7CiAgICBjb25zdCBoYXNoU3RyID0gc2hhMjU2MihieXRlY29kZUJ5dGVzKTsKICAgIGNvbnN0IGhhc2gzID0gdG9CeXRlcyhoYXNoU3RyKTsKICAgIGNvbnN0IGJ5dGVjb2RlTGVuZ3RoSW5Xb3JkcyA9IGJ5dGVjb2RlQnl0ZXMubGVuZ3RoIC8gMzI7CiAgICBpZiAoYnl0ZWNvZGVMZW5ndGhJbldvcmRzICUgMiA9PT0gMCkgewogICAgICB0aHJvdyBuZXcgQnl0ZWNvZGVMZW5ndGhJbldvcmRzTXVzdEJlT2RkRXJyb3IoewogICAgICAgIGdpdmVuTGVuZ3RoSW5Xb3JkczogYnl0ZWNvZGVMZW5ndGhJbldvcmRzCiAgICAgIH0pOwogICAgfQogICAgY29uc3QgYnl0ZWNvZGVMZW5ndGggPSB0b0J5dGVzKGJ5dGVjb2RlTGVuZ3RoSW5Xb3Jkcyk7CiAgICBjb25zdCBieXRlY29kZUxlbmd0aFBhZGRlZCA9IHBhZChieXRlY29kZUxlbmd0aCwgeyBzaXplOiAyIH0pOwogICAgY29uc3QgY29kZUhhc2hWZXJzaW9uID0gbmV3IFVpbnQ4QXJyYXkoWzEsIDBdKTsKICAgIGhhc2gzLnNldChjb2RlSGFzaFZlcnNpb24sIDApOwogICAgaGFzaDMuc2V0KGJ5dGVjb2RlTGVuZ3RoUGFkZGVkLCAyKTsKICAgIHJldHVybiBoYXNoMzsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL3V0aWxzL2dldEVpcDcxMkRvbWFpbi5qcwogIHZhciBnZXRFaXA3MTJEb21haW4yID0gKHRyYW5zYWN0aW9uKSA9PiB7CiAgICBhc3NlcnRFaXA3MTJUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7CiAgICBjb25zdCBtZXNzYWdlID0gdHJhbnNhY3Rpb25Ub01lc3NhZ2UodHJhbnNhY3Rpb24pOwogICAgcmV0dXJuIHsKICAgICAgZG9tYWluOiB7CiAgICAgICAgbmFtZTogInprU3luYyIsCiAgICAgICAgdmVyc2lvbjogIjIiLAogICAgICAgIGNoYWluSWQ6IHRyYW5zYWN0aW9uLmNoYWluSWQKICAgICAgfSwKICAgICAgdHlwZXM6IHsKICAgICAgICBUcmFuc2FjdGlvbjogWwogICAgICAgICAgeyBuYW1lOiAidHhUeXBlIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgICB7IG5hbWU6ICJmcm9tIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgICB7IG5hbWU6ICJ0byIsIHR5cGU6ICJ1aW50MjU2IiB9LAogICAgICAgICAgeyBuYW1lOiAiZ2FzTGltaXQiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogImdhc1BlclB1YmRhdGFCeXRlTGltaXQiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogIm1heEZlZVBlckdhcyIsIHR5cGU6ICJ1aW50MjU2IiB9LAogICAgICAgICAgeyBuYW1lOiAibWF4UHJpb3JpdHlGZWVQZXJHYXMiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogInBheW1hc3RlciIsIHR5cGU6ICJ1aW50MjU2IiB9LAogICAgICAgICAgeyBuYW1lOiAibm9uY2UiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogInZhbHVlIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgICB7IG5hbWU6ICJkYXRhIiwgdHlwZTogImJ5dGVzIiB9LAogICAgICAgICAgeyBuYW1lOiAiZmFjdG9yeURlcHMiLCB0eXBlOiAiYnl0ZXMzMltdIiB9LAogICAgICAgICAgeyBuYW1lOiAicGF5bWFzdGVySW5wdXQiLCB0eXBlOiAiYnl0ZXMiIH0KICAgICAgICBdCiAgICAgIH0sCiAgICAgIHByaW1hcnlUeXBlOiAiVHJhbnNhY3Rpb24iLAogICAgICBtZXNzYWdlCiAgICB9OwogIH07CiAgZnVuY3Rpb24gdHJhbnNhY3Rpb25Ub01lc3NhZ2UodHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHsgZ2FzLCBub25jZSwgdG8sIGZyb20sIHZhbHVlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBmYWN0b3J5RGVwcywgcGF5bWFzdGVyLCBwYXltYXN0ZXJJbnB1dCwgZ2FzUGVyUHViZGF0YSwgZGF0YSB9ID0gdHJhbnNhY3Rpb247CiAgICByZXR1cm4gewogICAgICB0eFR5cGU6IDExM24sCiAgICAgIGZyb206IEJpZ0ludChmcm9tKSwKICAgICAgdG86IHRvID8gQmlnSW50KHRvKSA6IDBuLAogICAgICBnYXNMaW1pdDogZ2FzID8/IDBuLAogICAgICBnYXNQZXJQdWJkYXRhQnl0ZUxpbWl0OiBnYXNQZXJQdWJkYXRhID8/IGdhc1BlclB1YmRhdGFEZWZhdWx0LAogICAgICBtYXhGZWVQZXJHYXM6IG1heEZlZVBlckdhcyA/PyAwbiwKICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IG1heFByaW9yaXR5RmVlUGVyR2FzID8/IDBuLAogICAgICBwYXltYXN0ZXI6IHBheW1hc3RlciA/IEJpZ0ludChwYXltYXN0ZXIpIDogMG4sCiAgICAgIG5vbmNlOiBub25jZSA/IEJpZ0ludChub25jZSkgOiAwbiwKICAgICAgdmFsdWU6IHZhbHVlID8/IDBuLAogICAgICBkYXRhOiBkYXRhID8gZGF0YSA6ICIweDAiLAogICAgICBmYWN0b3J5RGVwczogZmFjdG9yeURlcHM/Lm1hcCgoZGVwKSA9PiB0b0hleChoYXNoQnl0ZWNvZGUoZGVwKSkpID8/IFtdLAogICAgICBwYXltYXN0ZXJJbnB1dDogcGF5bWFzdGVySW5wdXQgPyBwYXltYXN0ZXJJbnB1dCA6ICIweCIKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9jaGFpbkNvbmZpZy5qcwogIHZhciBjaGFpbkNvbmZpZyA9IHsKICAgIGZvcm1hdHRlcnMsCiAgICBzZXJpYWxpemVycywKICAgIGN1c3RvbTogewogICAgICBnZXRFaXA3MTJEb21haW46IGdldEVpcDcxMkRvbWFpbjIKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hYnN0cmFjdFRlc3RuZXQuanMKICB2YXIgYWJzdHJhY3RUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnLAogICAgaWQ6IDExMTI0LAogICAgbmFtZTogIkFic3RyYWN0IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRVRIIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLnRlc3RuZXQuYWJzLnh5eiJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFic3RyYWN0IEJsb2NrIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQuYWJzLnh5eiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYWNhbGEuanMKICB2YXIgYWNhbGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDc4NywKICAgIG5hbWU6ICJBY2FsYSIsCiAgICBuZXR3b3JrOiAiYWNhbGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkFjYWxhIiwKICAgICAgc3ltYm9sOiAiQUNBIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZXRoLXJwYy1hY2FsYS5hY2EtYXBpLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXRoLXJwYy1hY2FsYS5hY2EtYXBpLm5ldHdvcmsiXQogICAgICB9LAogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC1ycGMtYWNhbGEuYWNhLWFwaS5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2V0aC1ycGMtYWNhbGEuYWNhLWFwaS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQWNhbGEgQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmFjYWxhLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5hY2FsYS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vb3Atc3RhY2svY29udHJhY3RzLmpzCiAgdmFyIGNvbnRyYWN0cyA9IHsKICAgIGdhc1ByaWNlT3JhY2xlOiB7IGFkZHJlc3M6ICIweDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYiIH0sCiAgICBsMUJsb2NrOiB7IGFkZHJlc3M6ICIweDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUiIH0sCiAgICBsMkNyb3NzRG9tYWluTWVzc2VuZ2VyOiB7CiAgICAgIGFkZHJlc3M6ICIweDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDciCiAgICB9LAogICAgbDJFcmM3MjFCcmlkZ2U6IHsgYWRkcmVzczogIjB4NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNCIgfSwKICAgIGwyU3RhbmRhcmRCcmlkZ2U6IHsgYWRkcmVzczogIjB4NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCIgfSwKICAgIGwyVG9MMU1lc3NhZ2VQYXNzZXI6IHsKICAgICAgYWRkcmVzczogIjB4NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNiIKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL29wLXN0YWNrL2Zvcm1hdHRlcnMuanMKICBpbml0X2Zyb21IZXgoKTsKICB2YXIgZm9ybWF0dGVyczIgPSB7CiAgICBibG9jazogLyogQF9fUFVSRV9fICovIGRlZmluZUJsb2NrKHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbnMgPSBhcmdzLnRyYW5zYWN0aW9ucz8ubWFwKCh0cmFuc2FjdGlvbikgPT4gewogICAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbiA9PT0gInN0cmluZyIpCiAgICAgICAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKTsKICAgICAgICAgIGlmIChmb3JtYXR0ZWQudHlwZUhleCA9PT0gIjB4N2UiKSB7CiAgICAgICAgICAgIGZvcm1hdHRlZC5pc1N5c3RlbVR4ID0gdHJhbnNhY3Rpb24uaXNTeXN0ZW1UeDsKICAgICAgICAgICAgZm9ybWF0dGVkLm1pbnQgPSB0cmFuc2FjdGlvbi5taW50ID8gaGV4VG9CaWdJbnQodHJhbnNhY3Rpb24ubWludCkgOiB2b2lkIDA7CiAgICAgICAgICAgIGZvcm1hdHRlZC5zb3VyY2VIYXNoID0gdHJhbnNhY3Rpb24uc291cmNlSGFzaDsKICAgICAgICAgICAgZm9ybWF0dGVkLnR5cGUgPSAiZGVwb3NpdCI7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0cmFuc2FjdGlvbnMsCiAgICAgICAgICBzdGF0ZVJvb3Q6IGFyZ3Muc3RhdGVSb290CiAgICAgICAgfTsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvbjogLyogQF9fUFVSRV9fICovIGRlZmluZVRyYW5zYWN0aW9uKHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHt9OwogICAgICAgIGlmIChhcmdzLnR5cGUgPT09ICIweDdlIikgewogICAgICAgICAgdHJhbnNhY3Rpb24uaXNTeXN0ZW1UeCA9IGFyZ3MuaXNTeXN0ZW1UeDsKICAgICAgICAgIHRyYW5zYWN0aW9uLm1pbnQgPSBhcmdzLm1pbnQgPyBoZXhUb0JpZ0ludChhcmdzLm1pbnQpIDogdm9pZCAwOwogICAgICAgICAgdHJhbnNhY3Rpb24uc291cmNlSGFzaCA9IGFyZ3Muc291cmNlSGFzaDsKICAgICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAiZGVwb3NpdCI7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvblJlY2VpcHQ6IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVUcmFuc2FjdGlvblJlY2VpcHQoewogICAgICBmb3JtYXQoYXJncykgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBsMUdhc1ByaWNlOiBhcmdzLmwxR2FzUHJpY2UgPyBoZXhUb0JpZ0ludChhcmdzLmwxR2FzUHJpY2UpIDogbnVsbCwKICAgICAgICAgIGwxR2FzVXNlZDogYXJncy5sMUdhc1VzZWQgPyBoZXhUb0JpZ0ludChhcmdzLmwxR2FzVXNlZCkgOiBudWxsLAogICAgICAgICAgbDFGZWU6IGFyZ3MubDFGZWUgPyBoZXhUb0JpZ0ludChhcmdzLmwxRmVlKSA6IG51bGwsCiAgICAgICAgICBsMUZlZVNjYWxhcjogYXJncy5sMUZlZVNjYWxhciA/IE51bWJlcihhcmdzLmwxRmVlU2NhbGFyKSA6IG51bGwKICAgICAgICB9OwogICAgICB9CiAgICB9KQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vb3Atc3RhY2svc2VyaWFsaXplcnMuanMKICBpbml0X2FkZHJlc3MoKTsKICBpbml0X2lzQWRkcmVzcygpOwogIGluaXRfY29uY2F0KCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZVRyYW5zYWN0aW9uMyh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKSB7CiAgICBpZiAoaXNEZXBvc2l0KHRyYW5zYWN0aW9uKSkKICAgICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uRGVwb3NpdCh0cmFuc2FjdGlvbik7CiAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIHNpZ25hdHVyZSk7CiAgfQogIHZhciBzZXJpYWxpemVyczIgPSB7CiAgICB0cmFuc2FjdGlvbjogc2VyaWFsaXplVHJhbnNhY3Rpb24zCiAgfTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkRlcG9zaXQodHJhbnNhY3Rpb24pIHsKICAgIGFzc2VydFRyYW5zYWN0aW9uRGVwb3NpdCh0cmFuc2FjdGlvbik7CiAgICBjb25zdCB7IHNvdXJjZUhhc2gsIGRhdGEsIGZyb20sIGdhcywgaXNTeXN0ZW1UeCwgbWludCwgdG8sIHZhbHVlIH0gPSB0cmFuc2FjdGlvbjsKICAgIGNvbnN0IHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9IFsKICAgICAgc291cmNlSGFzaCwKICAgICAgZnJvbSwKICAgICAgdG8gPz8gIjB4IiwKICAgICAgbWludCA/IHRvSGV4KG1pbnQpIDogIjB4IiwKICAgICAgdmFsdWUgPyB0b0hleCh2YWx1ZSkgOiAiMHgiLAogICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgaXNTeXN0ZW1UeCA/ICIweDEiIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiCiAgICBdOwogICAgcmV0dXJuIGNvbmNhdEhleChbCiAgICAgICIweDdlIiwKICAgICAgdG9SbHAoc2VyaWFsaXplZFRyYW5zYWN0aW9uKQogICAgXSk7CiAgfQogIGZ1bmN0aW9uIGlzRGVwb3NpdCh0cmFuc2FjdGlvbikgewogICAgaWYgKHRyYW5zYWN0aW9uLnR5cGUgPT09ICJkZXBvc2l0IikKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAodHlwZW9mIHRyYW5zYWN0aW9uLnNvdXJjZUhhc2ggIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgZnVuY3Rpb24gYXNzZXJ0VHJhbnNhY3Rpb25EZXBvc2l0KHRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCB7IGZyb20sIHRvIH0gPSB0cmFuc2FjdGlvbjsKICAgIGlmIChmcm9tICYmICFpc0FkZHJlc3MoZnJvbSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogZnJvbSB9KTsKICAgIGlmICh0byAmJiAhaXNBZGRyZXNzKHRvKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB0byB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vb3Atc3RhY2svY2hhaW5Db25maWcuanMKICB2YXIgY2hhaW5Db25maWcyID0gewogICAgY29udHJhY3RzLAogICAgZm9ybWF0dGVyczogZm9ybWF0dGVyczIsCiAgICBzZXJpYWxpemVyczogc2VyaWFsaXplcnMyCiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYW5jaWVudDguanMKICB2YXIgc291cmNlSWQgPSAxOwogIHZhciBhbmNpZW50OCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogODg4ODg4ODg4LAogICAgbmFtZTogIkFuY2llbnQ4IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5hbmNpZW50OC5nZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFuY2llbnQ4IGV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4uYW5jaWVudDguZ2ciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2Nhbi5hbmNpZW50OC5nZy9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWRdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhCMDlEQzA4NDI4QzhiNEVGQjRmZjlDMDgyNzM4NkNERjM0Mjc3OTk2IgogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkXTogewogICAgICAgICAgYWRkcmVzczogIjB4NjM5RjJBRUNFMzk4QWE3NmIwN2U1OWVGNmFiZTJjRmUzMmJhY2I2OCIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MDcwNTcxCiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkXTogewogICAgICAgICAgYWRkcmVzczogIjB4ZDVlM2VEZjViNjgxMzVENTU5RDU3MkUyNmJGODYzRkJDMTk1MDAzMyIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MDcwNTcxCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYW5jaWVudDhTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMiA9IDExMTU1MTExOwogIHZhciBhbmNpZW50OFNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI4MTIyMDI0LAogICAgbmFtZTogIkFuY2llbnQ4IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjdjItdGVzdG5ldC5hbmNpZW50OC5nZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFuY2llbnQ4IENlbGVzdGlhIFRlc3RuZXQgZXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc2NhbnYyLXRlc3RuZXQuYW5jaWVudDguZ2ciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2NhbnYyLXRlc3RuZXQuYW5jaWVudDguZ2cvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDk0MmZENTAxN2MwRjYwNTc1OTMwRDg1NzRFYWNhMTNCRWNENmUxYkIiCiAgICAgICAgfQogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQyXTogewogICAgICAgICAgYWRkcmVzczogIjB4ZmExZDlFMjZBNmFDRDdiMjIxMTVEMjc1NzJjMTIyMUI5ODAzYzk2MCIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NzI5MDgKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyXTogewogICAgICAgICAgYWRkcmVzczogIjB4RjZCYzAxNDZkM2M3NEQ0ODMwNmU3OUFlMTM0QTI2MEU0MThDOTMzNSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NzI5MDgKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQyCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FudmlsLmpzCiAgdmFyIGFudmlsID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMTMzNywKICAgIG5hbWU6ICJBbnZpbCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHA6Ly8xMjcuMC4wLjE6ODU0NSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3czovLzEyNy4wLjAuMTo4NTQ1Il0KICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hcGV4VGVzdG5ldC5qcwogIHZhciBhcGV4VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzk5MywKICAgIG5hbWU6ICJBUEVYIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQuYXBleGxheWVyLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwLXRlc3RuZXQuYXBleGxheWVyLnh5eiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHAtdGVzdG5ldC5hcGV4bGF5ZXIueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Zjc2NDJiZTMzYTZiMThEMTZhOTk1NjU3YWRiNWE2OENEMDQzOGFFMiIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyODM3NzUKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJiaXRydW0uanMKICB2YXIgYXJiaXRydW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyMTYxLAogICAgbmFtZTogIkFyYml0cnVtIE9uZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcmIxLmFyYml0cnVtLmlvL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFyYmlzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2FyYmlzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5hcmJpc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNzY1NDcwNwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FyYml0cnVtR29lcmxpLmpzCiAgdmFyIGFyYml0cnVtR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MjE2MTMsCiAgICBuYW1lOiAiQXJiaXRydW0gR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJBcmJpdHJ1bSBHb2VybGkgRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZ29lcmxpLXJvbGx1cC5hcmJpdHJ1bS5pby9ycGMiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBcmJpc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9nb2VybGkuYXJiaXNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogODgxMTQKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJiaXRydW1Ob3ZhLmpzCiAgdmFyIGFyYml0cnVtTm92YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDIxNzAsCiAgICBuYW1lOiAiQXJiaXRydW0gTm92YSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ub3ZhLmFyYml0cnVtLmlvL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFyYmlzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL25vdmEuYXJiaXNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLW5vdmEuYXJiaXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE3NDY5NjMKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hc3NldENoYWluVGVzdG5ldC5qcwogIHZhciBhc3NldENoYWluVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDI0MjEsCiAgICBuYW1lOiAiQXNzZXRDaGFpbiBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlJlYWwgV29ybGQgQXNzZXQiLAogICAgICBzeW1ib2w6ICJSV0EiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9lbnVndS1ycGMuYXNzZXRjaGFpbi5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBc3NldCBDaGFpbiBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4tdGVzdG5ldC5hc3NldGNoYWluLm9yZyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLXRlc3RuZXQuYXNzZXRjaGFpbi5vcmcvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4OTg5RjgzMkQzNTk4OGNiNWUzZUIwMDFGYTJGZTc4OTQ2OUVDMzFFYSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNzE3NwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FzdGFyLmpzCiAgdmFyIGFzdGFyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTIsCiAgICBuYW1lOiAiQXN0YXIiLAogICAgbmV0d29yazogImFzdGFyLW1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkFzdGFyIiwKICAgICAgc3ltYm9sOiAiQVNUUiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXN0YXIuYXBpLm9uZmluYWxpdHkuaW8vcHVibGljIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXN0YXIgU3Vic2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hc3Rhci5zdWJzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc2MTc5NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXN0YXJaa0VWTS5qcwogIHZhciBhc3RhclprRVZNID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNzc2LAogICAgbmFtZTogIkFzdGFyIHprRVZNIiwKICAgIG5ldHdvcms6ICJBc3RhclprRVZNIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zdGFydGFsZS5jb20vYXN0YXItemtldm0iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBc3RhciB6a0VWTSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hc3Rhci16a2V2bS5leHBsb3Jlci5zdGFydGFsZS5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogOTM1MjgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FzdGFyWmt5b3RvLmpzCiAgdmFyIGFzdGFyWmt5b3RvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2MDM4MzYxLAogICAgbmFtZTogIkFzdGFyIHprRVZNIFRlc3RuZXQgekt5b3RvIiwKICAgIG5ldHdvcms6ICJ6S3lvdG8iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnN0YXJ0YWxlLmNvbS96a3lvdG8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJ6S3lvdG8gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vemt5b3RvLmV4cGxvcmVyLnN0YXJ0YWxlLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxOTYxNTMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJiaXRydW1TZXBvbGlhLmpzCiAgdmFyIGFyYml0cnVtU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDIxNjE0LAogICAgbmFtZTogIkFyYml0cnVtIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkFyYml0cnVtIFNlcG9saWEgRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS1yb2xsdXAuYXJiaXRydW0uaW8vcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXJiaXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5hcmJpc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5hcmJpc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogODE5MzAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJlb25OZXR3b3JrLmpzCiAgdmFyIGFyZW9uTmV0d29yayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDYzLAogICAgbmFtZTogIkFyZW9uIE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgZGVjaW1hbHM6IDE4LCBuYW1lOiAiQVJFQSIsIHN5bWJvbDogIkFSRUEiIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC1ycGMuYXJlb24ubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9tYWlubmV0LXdzLmFyZW9uLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBcmVvbnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYXJlb25zY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FyZW9uTmV0d29ya1Rlc3RuZXQuanMKICB2YXIgYXJlb25OZXR3b3JrVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDYyLAogICAgbmFtZTogIkFyZW9uIE5ldHdvcmsgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJUQVJFQSIsIHN5bWJvbDogIlRBUkVBIiB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQtcnBjLmFyZW9uLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC13cy5hcmVvbi5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXJlb25zY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2FyZW9uc2Nhbi5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FydGVsYVRlc3RuZXQuanMKICB2YXIgYXJ0ZWxhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTE4MjIsCiAgICBuYW1lOiAiQXJ0ZWxhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkFSVCIsIHN5bWJvbDogIkFSVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2JldGFuZXQtcnBjMS5hcnRlbGEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFydGVsYSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9iZXRhbmV0LXNjYW4uYXJ0ZWxhLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmV0YW5ldC1zY2FuLmFydGVsYS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4ZDA3Yzg2MzVmNzZlODc0NUVlNzA5MmZiYjZlOGZiYzVGZUYwOURENyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3MDAxODcxCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F0bGV0YU9seW1waWEuanMKICB2YXIgYXRsZXRhT2x5bXBpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjM0MCwKICAgIG5hbWU6ICJBdGxldGEgT2x5bXBpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJBdGxhIiwgc3ltYm9sOiAiQVRMQSIgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL3Rlc3RuZXQtcnBjLmF0bGV0YS5uZXR3b3JrOjk5NDQiLAogICAgICAgICAgImh0dHBzOi8vdGVzdG5ldC1ycGMuYXRsZXRhLm5ldHdvcmsiCiAgICAgICAgXSwKICAgICAgICB3czogWyJ3c3M6Ly90ZXN0bmV0LXJwYy5hdGxldGEubmV0d29yazo5OTQ0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXRsZXRhIE9seW1waWEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5hdGxldGEubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmF0bGV0YS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MTQ3MmVjNjM5MjE4MGZiODRGMzQ1ZDI0NTViQ0M3NUIyNjU3NzExNSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDc2NDczCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F1cm9yYS5qcwogIHZhciBhdXJvcmEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMTMxNjE1NTQsCiAgICBuYW1lOiAiQXVyb3JhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5hdXJvcmEuZGV2Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXVyb3Jhc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hdXJvcmFzY2FuLmRldiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hdXJvcmFzY2FuLmRldi9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjI5MDc4MTYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hdXJvcmFUZXN0bmV0LmpzCiAgdmFyIGF1cm9yYVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMTMxNjE1NTUsCiAgICBuYW1lOiAiQXVyb3JhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LmF1cm9yYS5kZXYiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBdXJvcmFzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuYXVyb3Jhc2Nhbi5kZXYiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC5hdXJvcmFzY2FuLmRldi9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F1cm9yaWEuanMKICB2YXIgYXVyb3JpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjA1MjA1LAogICAgbmFtZTogIkF1cm9yaWEgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiYXVyb3JpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiQXVyb3JpYSBTdHJhdGlzIiwKICAgICAgc3ltYm9sOiAidFNUUkFYIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2F1cm9yaWEucnBjLnN0cmF0aXNldm0uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXVyb3JpYSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2F1cm9yaWEuZXhwbG9yZXIuc3RyYXRpc2V2bS5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F2YWxhbmNoZS5qcwogIHZhciBhdmFsYW5jaGUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQzMTE0LAogICAgbmFtZTogIkF2YWxhbmNoZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJBdmFsYW5jaGUiLAogICAgICBzeW1ib2w6ICJBVkFYIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLmF2YXgubmV0d29yay9leHQvYmMvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTbm93VHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vc25vd3RyYWNlLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5zbm93dHJhY2UuaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTE5MDc5MzQKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hdmFsYW5jaGVGdWppLmpzCiAgdmFyIGF2YWxhbmNoZUZ1amkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQzMTEzLAogICAgbmFtZTogIkF2YWxhbmNoZSBGdWppIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkF2YWxhbmNoZSBGdWppIiwKICAgICAgc3ltYm9sOiAiQVZBWCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FwaS5hdmF4LXRlc3QubmV0d29yay9leHQvYmMvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTbm93VHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5zbm93dHJhY2UuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLXRlc3RuZXQuc25vd3RyYWNlLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDcwOTY5NTkKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYjNTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMyA9IDE2ODU4Nzc3MzsKICB2YXIgYjNTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOTkzLAogICAgbmFtZTogIkIzIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEuYjMuZnVuL2h0dHAiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEuZXhwbG9yZXIuYjMuZnVuIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDMKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYjMuanMKICB2YXIgc291cmNlSWQ0ID0gODQ1MzsKICB2YXIgYjMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgzMzMsCiAgICBuYW1lOiAiQjMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQtcnBjLmIzLmZ1bi9odHRwIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5iMy5mdW4iCiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQ0CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JhaGFtdXQuanMKICB2YXIgYmFoYW11dCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTE2NSwKICAgIG5ldHdvcms6ICJiYWhhbXV0IiwKICAgIG5hbWU6ICJCYWhhbXV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJGYXN0dG9rZW4iLCBzeW1ib2w6ICJGVE4iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL3JwYzEuYmFoYW11dC5pbyIsCiAgICAgICAgICAiaHR0cHM6Ly9iYWhhbXV0LXJwYy5wdWJsaWNub2RlLmNvbSIsCiAgICAgICAgICAiaHR0cHM6Ly9ycGMyLmJhaGFtdXQuaW8iCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsKICAgICAgICAgICJ3c3M6Ly93czEuc2FoYXJhLmJhaGFtdXRjaGFpbi5jb20iLAogICAgICAgICAgIndzczovL2JhaGFtdXQtcnBjLnB1YmxpY25vZGUuY29tIiwKICAgICAgICAgICJ3c3M6Ly93czIuc2FoYXJhLmJhaGFtdXRjaGFpbi5jb20iCiAgICAgICAgXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbCiAgICAgICAgICAiaHR0cHM6Ly9ycGMxLmJhaGFtdXQuaW8iLAogICAgICAgICAgImh0dHBzOi8vYmFoYW11dC1ycGMucHVibGljbm9kZS5jb20iLAogICAgICAgICAgImh0dHBzOi8vcnBjMi5iYWhhbXV0LmlvIgogICAgICAgIF0sCiAgICAgICAgd2ViU29ja2V0OiBbCiAgICAgICAgICAid3NzOi8vd3MxLnNhaGFyYS5iYWhhbXV0Y2hhaW4uY29tIiwKICAgICAgICAgICJ3c3M6Ly9iYWhhbXV0LXJwYy5wdWJsaWNub2RlLmNvbSIsCiAgICAgICAgICAid3NzOi8vd3MyLnNhaGFyYS5iYWhhbXV0Y2hhaW4uY29tIgogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRnRuc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cuZnRuc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vd3d3LmZ0bnNjYW4uY29tL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iYXNlLmpzCiAgdmFyIHNvdXJjZUlkNSA9IDE7CiAgdmFyIGJhc2UgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDg0NTMsCiAgICBuYW1lOiAiQmFzZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmJhc2Uub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmFzZXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYmFzZXNjYW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5iYXNlc2Nhbi5vcmcvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkNV06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDU2MzE1YjkwYzQwNzMwOTI1ZWM1NDg1Y2YwMDRkODM1MDU4NTE4QTAiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA1MDIyCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDVdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg0OTA0ODA0NEQ1N2UxQzkyQTc3Zjc5OTg4ZDIxRmE4ZkFGNzRFOTdlIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMTc0ODIxNDMKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQ1XTogewogICAgICAgICAgYWRkcmVzczogIjB4MzE1NENmMTZjY2RiNEM2ZDkyMjYyOTY2NDE3NGI5MDRkODBGMkMzNSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE3NDgyMTQzCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkNQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iYXNlR29lcmxpLmpzCiAgdmFyIHNvdXJjZUlkNiA9IDU7CiAgdmFyIGJhc2VHb2VybGkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDg0NTMxLAogICAgbmFtZTogIkJhc2UgR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJHb2VybGkgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZ29lcmxpLmJhc2Uub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmFzZXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLmJhc2VzY2FuLm9yZyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGkuYmFzZXNjYW4ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICAuLi5jaGFpbkNvbmZpZzIuY29udHJhY3RzLAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDZdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgyQTM1ODkxZmYzMDMxM0NjRmE2Q0U4OGRjZjM4NThiYjA3NUEyMjk4IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTM3Njk4OAogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQ2XTogewogICAgICAgICAgYWRkcmVzczogIjB4ZTkzYzhjRDBENDA5MzQxMjA1QTU5MmY4YzRBYzFBNWZlNTU4NWNmQSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQ2XTogewogICAgICAgICAgYWRkcmVzczogIjB4ZkE2RDhFZTVCRTc3MEY4NEZDMDAxRDA5OEM0YkQ2MDRGZTAxMjg0YSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkNgogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iYXNlU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDcgPSAxMTE1NTExMTsKICB2YXIgYmFzZVNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDg0NTMyLAogICAgbmV0d29yazogImJhc2Utc2Vwb2xpYSIsCiAgICBuYW1lOiAiQmFzZSBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZXBvbGlhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5iYXNlLm9yZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJhc2VzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEuYmFzZXNjYW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1zZXBvbGlhLmJhc2VzY2FuLm9yZy9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgZGlzcHV0ZUdhbWVGYWN0b3J5OiB7CiAgICAgICAgW3NvdXJjZUlkN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweGQ2RTZkQmY0RjdFQTBhYzQxMmZEOGI2NUVEMjk3ZTY0QkI3YTA2RTEiCiAgICAgICAgfQogICAgICB9LAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDddOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg4NDQ1N2NhOUQwMTYzRmJDNGJiZmU0RGZiYjIwYmE0NmU0OERGMjU0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDQ5ZjUzZTQxNDUyYzc0NTg5ZTg1Y2ExNjc3NDI2YmE0MjY0NTllODUiLAogICAgICAgICAgYmxvY2tDcmVhdGVkOiA0NDQ2Njc3CiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweGZkMEJmNzFGNjA2NjBFMmY2MDhlZDU2ZTE2NTlDNDUwZUIxMTMxMjAiLAogICAgICAgICAgYmxvY2tDcmVhdGVkOiA0NDQ2Njc3CiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDU5NjQ3CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkNwogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iZWFtLmpzCiAgdmFyIGJlYW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQzMzcsCiAgICBuYW1lOiAiQmVhbSIsCiAgICBuZXR3b3JrOiAiYmVhbSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCZWFtIiwKICAgICAgc3ltYm9sOiAiQkVBTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIHB1YmxpYzogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9idWlsZC5vbmJlYW0uY29tL3JwYyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9idWlsZC5vbmJlYW0uY29tL3dzIl0KICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9idWlsZC5vbmJlYW0uY29tL3JwYyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9idWlsZC5vbmJlYW0uY29tL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmVhbSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zdWJuZXRzLmF2YXgubmV0d29yay9iZWFtIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg0OTU2ZjE1ZWZkYzNkYzE2NjQ1ZTkwY2MzNTZlYWZhNjVmZmM2NWVjIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iZWFtVGVzdG5ldC5qcwogIHZhciBiZWFtVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTMzMzcsCiAgICBuYW1lOiAiQmVhbSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJiZWFtIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkJlYW0iLAogICAgICBzeW1ib2w6ICJCRUFNIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgcHVibGljOiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2J1aWxkLm9uYmVhbS5jb20vcnBjL3Rlc3RuZXQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vYnVpbGQub25iZWFtLmNvbS93cy90ZXN0bmV0Il0KICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9idWlsZC5vbmJlYW0uY29tL3JwYy90ZXN0bmV0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2J1aWxkLm9uYmVhbS5jb20vd3MvdGVzdG5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJlYW0gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc3VibmV0cy10ZXN0LmF2YXgubmV0d29yay9iZWFtIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg5YmY0OWI3MDRlZTJhMDk1Yjk1YzFmMmQ0ZWI5MDEwNTEwYzQxYzllIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYmVhck5ldHdvcmtDaGFpbk1haW5uZXQuanMKICB2YXIgYmVhck5ldHdvcmtDaGFpbk1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDY0MTIzMCwKICAgIG5hbWU6ICJCZWFyIE5ldHdvcmsgQ2hhaW4gTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCZWFyTmV0d29ya0NoYWluIiwKICAgICAgc3ltYm9sOiAiQlJOS0MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9icm5rYy1tYWlubmV0LmJlYXJuZXR3b3JrLm5ldCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJybmtTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2JybmtzY2FuLmJlYXJuZXR3b3JrLm5ldCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9icm5rc2Nhbi5iZWFybmV0d29yay5uZXQvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JlYXJOZXR3b3JrQ2hhaW5UZXN0bmV0LmpzCiAgdmFyIGJlYXJOZXR3b3JrQ2hhaW5UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NTEyMzAsCiAgICBuYW1lOiAiQmVhciBOZXR3b3JrIENoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAidEJSTktDIiwKICAgICAgc3ltYm9sOiAidEJSTktDIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYnJua2MtdGVzdC5iZWFybmV0d29yay5uZXQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCcm5rVGVzdFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYnJua3Rlc3Qtc2Nhbi5iZWFybmV0d29yay5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYnJua3Rlc3Qtc2Nhbi5iZWFybmV0d29yay5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iZXJhY2hhaW5UZXN0bmV0LmpzCiAgdmFyIGJlcmFjaGFpblRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwMDg1LAogICAgbmFtZTogIkJlcmFjaGFpbiBBcnRpbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCRVJBIFRva2VuIiwKICAgICAgc3ltYm9sOiAiQkVSQSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FydGlvLnJwYy5iZXJhY2hhaW4uY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmVyYWNoYWluIiwKICAgICAgICB1cmw6ICJodHRwczovL2FydGlvLmJlcmF0cmFpbC5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYmVyYWNoYWluVGVzdG5ldGJBcnRpby5qcwogIHZhciBiZXJhY2hhaW5UZXN0bmV0YkFydGlvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4MDA4NCwKICAgIG5hbWU6ICJCZXJhY2hhaW4gYkFydGlvIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkJFUkEgVG9rZW4iLAogICAgICBzeW1ib2w6ICJCRVJBIgogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDkyNjkKICAgICAgfQogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYmFydGlvLnJwYy5iZXJhY2hhaW4uY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmVyYWNoYWluIGJBcnRpbyBCZXJhdHJhaWwiLAogICAgICAgIHVybDogImh0dHBzOi8vYmFydGlvLmJlcmF0cmFpbC5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYmV2bU1haW5uZXQuanMKICB2YXIgYmV2bU1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExNTAxLAogICAgbmFtZTogIkJFVk0gTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQml0Y29pbiIsIHN5bWJvbDogIkJUQyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMtbWFpbm5ldC0xLmJldm0uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCZXZtc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLW1haW5uZXQuYmV2bS5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLW1haW5uZXQtYXBpLmJldm0uaW8vYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JpdGt1Yi5qcwogIHZhciBiaXRrdWIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDk2LAogICAgbmFtZTogIkJpdGt1YiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQml0a3ViIiwgc3ltYm9sOiAiS1VCIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmJpdGt1YmNoYWluLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQml0a3ViIENoYWluIE1haW5uZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3LmJrY3NjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3d3dy5ia2NzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYml0a3ViVGVzdG5ldC5qcwogIHZhciBiaXRrdWJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNTkyNSwKICAgIG5hbWU6ICJCaXRrdWIgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiQml0a3ViIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkJpdGt1YiBUZXN0Iiwgc3ltYm9sOiAidEtVQiIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy10ZXN0bmV0LmJpdGt1YmNoYWluLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQml0a3ViIENoYWluIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5ia2NzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJrY3NjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYml0VG9ycmVudC5qcwogIHZhciBiaXRUb3JyZW50ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOTksCiAgICBuYW1lOiAiQml0VG9ycmVudCIsCiAgICBuZXR3b3JrOiAiYml0dG9ycmVudC1jaGFpbi1tYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJCaXRUb3JyZW50Iiwgc3ltYm9sOiAiQlRUIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5iaXR0b3JyZW50Y2hhaW4uaW8iXSB9LAogICAgICBwdWJsaWM6IHsgaHR0cDogWyJodHRwczovL3JwYy5iaXR0b3JyZW50Y2hhaW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCdHRjc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9idHRjc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmJ0dGNzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzEwNzg1NTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iaXRUb3JyZW50VGVzdG5ldC5qcwogIHZhciBiaXRUb3JyZW50VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAyOCwKICAgIG5hbWU6ICJCaXRUb3JyZW50IENoYWluIFRlc3RuZXQiLAogICAgbmV0d29yazogImJpdHRvcnJlbnQtY2hhaW4tdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQml0VG9ycmVudCIsIHN5bWJvbDogIkJUVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly90ZXN0cnBjLmJpdHRvcnJlbnRjaGFpbi5pbyJdIH0sCiAgICAgIHB1YmxpYzogeyBodHRwOiBbImh0dHBzOi8vdGVzdHJwYy5iaXR0b3JyZW50Y2hhaW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCdHRjc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJ0dGNzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJ0dGNzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JsYXN0LmpzCiAgdmFyIHNvdXJjZUlkOCA9IDE7CiAgdmFyIGJsYXN0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4MTQ1NywKICAgIG5hbWU6ICJCbGFzdCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5ibGFzdC5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsYXN0c2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibGFzdHNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmJsYXN0c2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjEyOTI5CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQ4CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JsYXN0U2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDkgPSAxMTE1NTExMTsKICB2YXIgYmxhc3RTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjg1ODc3NzMsCiAgICBuYW1lOiAiQmxhc3QgU2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5ibGFzdC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsYXN0c2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZXBvbGlhLmJsYXN0c2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5ibGFzdHNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc1NjY5MAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDkKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYm9iLmpzCiAgdmFyIHNvdXJjZUlkMTAgPSAxOwogIHZhciBib2IgPSBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogNjA4MDgsCiAgICBuYW1lOiAiQk9CIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUSCIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmdvYm9iLnh5eiJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuZ29ib2IueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQk9CIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmdvYm9iLnh5eiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICAuLi5jaGFpbkNvbmZpZzIuY29udHJhY3RzLAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMzEzMQogICAgICB9LAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDEwXTogewogICAgICAgICAgYWRkcmVzczogIjB4ZERhNTNFMjNmOGEzMjY0MGIwNEQ3MjU2ZTY1MUMxZGI5OGRCMTFDMSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ0NjI2MTUKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDEwXTogewogICAgICAgICAgYWRkcmVzczogIjB4OEFkZUUxMjQ0NDc0MzVmRTAzZTNDRDI0ZEYzZjRjQUUzMkU2NWEzRSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ0NjI2MTUKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQxMAogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ib2JTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMTEgPSAxMTE1NTExMTsKICB2YXIgYm9iU2Vwb2xpYSA9IGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiA4MDg4MTMsCiAgICBuYW1lOiAiQk9CIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRVRIIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ib2Itc2Vwb2xpYS5ycGMuZ29ib2IueHl6Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2JvYi1zZXBvbGlhLnJwYy5nb2JvYi54eXoiXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vYm9iLXNlcG9saWEucnBjLmdvYm9iLnh5eiJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ib2Itc2Vwb2xpYS5ycGMuZ29ib2IueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQk9CIFNlcG9saWEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYm9iLXNlcG9saWEuZXhwbG9yZXIuZ29ib2IueHl6IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDM1Njc3CiAgICAgIH0sCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMTFdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgxNEQwMDY5NDUyYjRBRTJiMjUwQjM5NWI4YWRBYjc3MUU0MjY3ZDJmIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogNDQ2MjYxNQogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTFdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg4NjdCMUFhODcyYjlDOGNCNUU5Rjc3NTVmZURDNDVCQjI0QWQwYWU0IiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogNDQ2MjYxNQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBzb3VyY2VJZDogc291cmNlSWQxMQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ib2JhLmpzCiAgdmFyIGJvYmEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI4OCwKICAgIG5hbWU6ICJCb2JhIE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmJvYmEubmV0d29yayJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJPQkFTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2JvYmFzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0NDY4NTkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ib2JhU2Vwb2xpYS5qcwogIHZhciBib2JhU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjg4ODIsCiAgICBuYW1lOiAiQm9iYSBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5ib2JhLm5ldHdvcmsiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCT0JBU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJvYmFzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYnJvbm9zLmpzCiAgdmFyIGJyb25vcyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAzOSwKICAgIG5hbWU6ICJCcm9ub3MiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQlJPIiwKICAgICAgc3ltYm9sOiAiQlJPIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZXZtLmJyb25vcy5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCcm9ub1NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYnJvc2Nhbi5icm9ub3Mub3JnIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Jyb25vc1Rlc3RuZXQuanMKICB2YXIgYnJvbm9zVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAzOCwKICAgIG5hbWU6ICJCcm9ub3MgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCcm9ub3MgQ29pbiIsCiAgICAgIHN5bWJvbDogInRCUk8iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldm0tdGVzdG5ldC5icm9ub3Mub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQnJvbm9TY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Ricm9zY2FuLmJyb25vcy5vcmciCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JzYy5qcwogIHZhciBic2MgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU2LAogICAgbmFtZTogIkJOQiBTbWFydCBDaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCTkIiLAogICAgICBzeW1ib2w6ICJCTkIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMuYW5rci5jb20vYnNjIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQnNjU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ic2NzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkuYnNjc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE1OTIxNDUyCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYnNjVGVzdG5ldC5qcwogIHZhciBic2NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5NywKICAgIG5hbWU6ICJCaW5hbmNlIFNtYXJ0IENoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQk5CIiwKICAgICAgc3ltYm9sOiAidEJOQiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2RhdGEtc2VlZC1wcmVic2MtMS1zMS5ibmJjaGFpbi5vcmc6ODU0NSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJzY1NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5ic2NzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJzY3NjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNzQyMjQ4MwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ic2NHcmVlbmZpZWxkLmpzCiAgdmFyIGJzY0dyZWVuZmllbGQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMTcsCiAgICBuYW1lOiAiQk5CIEdyZWVuZmllbGQgQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQk5CIiwKICAgICAgc3ltYm9sOiAiQk5CIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZ3JlZW5maWVsZC1jaGFpbi5ibmJjaGFpbi5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCTkIgR3JlZW5maWVsZCBNYWlubmV0IFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ3JlZW5maWVsZHNjYW4uY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYnRyLmpzCiAgdmFyIGJ0ciA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAwOTAxLAogICAgbmFtZTogIkJpdGxheWVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCaXRjb2luIiwKICAgICAgc3ltYm9sOiAiQlRDIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWwogICAgICAgICAgImh0dHBzOi8vcnBjLmJpdGxheWVyLm9yZyIsCiAgICAgICAgICAiaHR0cHM6Ly9ycGMuYml0bGF5ZXItcnBjLmNvbSIsCiAgICAgICAgICAiaHR0cHM6Ly9ycGMuYW5rci5jb20vYml0bGF5ZXIiCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3MuYml0bGF5ZXIub3JnIiwgIndzczovL3dzLmJpdGxheWVyLXJwYy5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCaXRsYXllcihCVFIpIFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3LmJ0cnNjYW4uY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2J0clRlc3RuZXQuanMKICB2YXIgYnRyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAwODEwLAogICAgbmFtZTogIkJpdGxheWVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkJpdGNvaW4iLAogICAgICBzeW1ib2w6ICJCVEMiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC1ycGMuYml0bGF5ZXIub3JnIl0sCiAgICAgICAgd2ViU29ja2V0OiBbCiAgICAgICAgICAid3NzOi8vdGVzdG5ldC13cy5iaXRsYXllci5vcmciLAogICAgICAgICAgIndzczovL3Rlc3RuZXQtd3MuYml0bGF5ZXItcnBjLmNvbSIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJpdGxheWVyKEJUUikgU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJ0cnNjYW4uY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ieG4uanMKICB2YXIgYnhuID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0OTk5LAogICAgbmFtZTogIkJsYWNrRm9ydCBFeGNoYW5nZSBOZXR3b3JrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJCbGFja0ZvcnQgVG9rZW4iLCBzeW1ib2w6ICJCWE4iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmJsYWNrZm9ydC5uZXR3b3JrL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuYmxhY2tmb3J0Lm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuYmxhY2tmb3J0Lm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2J4blRlc3RuZXQuanMKICB2YXIgYnhuVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDc3NywKICAgIG5hbWU6ICJCbGFja0ZvcnQgRXhjaGFuZ2UgTmV0d29yayBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCbGFja0ZvcnQgVGVzdG5ldCBUb2tlbiIsCiAgICAgIHN5bWJvbDogIlRCWE4iLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5ibGFja2ZvcnQubmV0d29yay9ycGMiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQtZXhwbG9yZXIuYmxhY2tmb3J0Lm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC1leHBsb3Jlci5ibGFja2ZvcnQubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NhbnRvLmpzCiAgdmFyIGNhbnRvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NzAwLAogICAgbmFtZTogIkNhbnRvIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkNhbnRvIiwKICAgICAgc3ltYm9sOiAiQ0FOVE8iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9jYW50by5ncmF2aXR5Y2hhaW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUdWJlci5CdWlsZCAoQmxvY2tzY291dCkiLAogICAgICAgIHVybDogImh0dHBzOi8vdHViZXIuYnVpbGQiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjkwNTc4OQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2Vsby9mZWVzLmpzCiAgdmFyIGZlZXMgPSB7CiAgICAvKgogICAgICAgKiBFc3RpbWF0ZXMgdGhlIGZlZXMgcGVyIGdhcyBmb3IgYSB0cmFuc2FjdGlvbi4KICAgIAogICAgICAgKiBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgdG8gYmUgcGFpZCBpbiBhIHRva2VuIChmZWVDdXJyZW5jeSBpcyBwcmVzZW50KSB0aGVuIHRoZSBmZWVzCiAgICAgICAqIGFyZSBlc3RpbWF0ZWQgaW4gdGhlIHZhbHVlIG9mIHRoZSB0b2tlbi4gT3RoZXJ3aXNlIGZhbGxzIGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICAgICogZXN0aW1hdGlvbiBieSByZXR1cm5pbmcgbnVsbC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHBhcmFtcyBmZWUgZXN0aW1hdGlvbiBmdW5jdGlvbiBwYXJhbWV0ZXJzCiAgICAgICAqLwogICAgZXN0aW1hdGVGZWVzUGVyR2FzOiBhc3luYyAocGFyYW1zKSA9PiB7CiAgICAgIGlmICghcGFyYW1zLnJlcXVlc3Q/LmZlZUN1cnJlbmN5KQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCBbbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhc10gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgZXN0aW1hdGVGZWVQZXJHYXNJbkZlZUN1cnJlbmN5KHBhcmFtcy5jbGllbnQsIHBhcmFtcy5yZXF1ZXN0LmZlZUN1cnJlbmN5KSwKICAgICAgICBlc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzSW5GZWVDdXJyZW5jeShwYXJhbXMuY2xpZW50LCBwYXJhbXMucmVxdWVzdC5mZWVDdXJyZW5jeSkKICAgICAgXSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgbWF4RmVlUGVyR2FzLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzCiAgICAgIH07CiAgICB9CiAgfTsKICBhc3luYyBmdW5jdGlvbiBlc3RpbWF0ZUZlZVBlckdhc0luRmVlQ3VycmVuY3koY2xpZW50LCBmZWVDdXJyZW5jeSkgewogICAgY29uc3QgZmVlID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfZ2FzUHJpY2UiLAogICAgICBwYXJhbXM6IFtmZWVDdXJyZW5jeV0KICAgIH0pOwogICAgcmV0dXJuIEJpZ0ludChmZWUpOwogIH0KICBhc3luYyBmdW5jdGlvbiBlc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzSW5GZWVDdXJyZW5jeShjbGllbnQsIGZlZUN1cnJlbmN5KSB7CiAgICBjb25zdCBmZWVzUGVyR2FzID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfbWF4UHJpb3JpdHlGZWVQZXJHYXMiLAogICAgICBwYXJhbXM6IFtmZWVDdXJyZW5jeV0KICAgIH0pOwogICAgcmV0dXJuIEJpZ0ludChmZWVzUGVyR2FzKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2Vsby9mb3JtYXR0ZXJzLmpzCiAgaW5pdF9mcm9tSGV4KCk7CiAgaW5pdF90cmFuc2FjdGlvblJlcXVlc3QoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jZWxvL3V0aWxzLmpzCiAgaW5pdF90cmltKCk7CiAgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSAwIHx8IHZhbHVlID09PSAwbiB8fCB2YWx1ZSA9PT0gdm9pZCAwIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAiMCIgfHwgdmFsdWUgPT09ICIiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgKHRyaW0odmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICIweCIgfHwgdHJpbSh2YWx1ZSkudG9Mb3dlckNhc2UoKSA9PT0gIjB4MDAiKTsKICB9CiAgZnVuY3Rpb24gaXNQcmVzZW50KHZhbHVlKSB7CiAgICByZXR1cm4gIWlzRW1wdHkodmFsdWUpOwogIH0KICBmdW5jdGlvbiBpc0VJUDE1NTkodHJhbnNhY3Rpb24pIHsKICAgIHJldHVybiB0eXBlb2YgdHJhbnNhY3Rpb24ubWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgdHJhbnNhY3Rpb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiOwogIH0KICBmdW5jdGlvbiBpc0NJUDY0KHRyYW5zYWN0aW9uKSB7CiAgICBpZiAodHJhbnNhY3Rpb24udHlwZSA9PT0gImNpcDY0IikgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBpc0VJUDE1NTkodHJhbnNhY3Rpb24pICYmIGlzUHJlc2VudCh0cmFuc2FjdGlvbi5mZWVDdXJyZW5jeSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NlbG8vZm9ybWF0dGVycy5qcwogIHZhciBmb3JtYXR0ZXJzMyA9IHsKICAgIGJsb2NrOiAvKiBAX19QVVJFX18gKi8gZGVmaW5lQmxvY2soewogICAgICBmb3JtYXQoYXJncykgewogICAgICAgIGNvbnN0IHRyYW5zYWN0aW9ucyA9IGFyZ3MudHJhbnNhY3Rpb25zPy5tYXAoKHRyYW5zYWN0aW9uKSA9PiB7CiAgICAgICAgICBpZiAodHlwZW9mIHRyYW5zYWN0aW9uID09PSAic3RyaW5nIikKICAgICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uOwogICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgLi4uZm9ybWF0dGVkLAogICAgICAgICAgICAuLi50cmFuc2FjdGlvbi5nYXRld2F5RmVlID8gewogICAgICAgICAgICAgIGdhdGV3YXlGZWU6IGhleFRvQmlnSW50KHRyYW5zYWN0aW9uLmdhdGV3YXlGZWUpLAogICAgICAgICAgICAgIGdhdGV3YXlGZWVSZWNpcGllbnQ6IHRyYW5zYWN0aW9uLmdhdGV3YXlGZWVSZWNpcGllbnQKICAgICAgICAgICAgfSA6IHt9LAogICAgICAgICAgICBmZWVDdXJyZW5jeTogdHJhbnNhY3Rpb24uZmVlQ3VycmVuY3kKICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHRyYW5zYWN0aW9ucywKICAgICAgICAgIC4uLmFyZ3MucmFuZG9tbmVzcyA/IHsgcmFuZG9tbmVzczogYXJncy5yYW5kb21uZXNzIH0gOiB7fQogICAgICAgIH07CiAgICAgIH0KICAgIH0pLAogICAgdHJhbnNhY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVUcmFuc2FjdGlvbih7CiAgICAgIGZvcm1hdChhcmdzKSB7CiAgICAgICAgaWYgKGFyZ3MudHlwZSA9PT0gIjB4N2UiKQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgaXNTeXN0ZW1UeDogYXJncy5pc1N5c3RlbVR4LAogICAgICAgICAgICBtaW50OiBhcmdzLm1pbnQgPyBoZXhUb0JpZ0ludChhcmdzLm1pbnQpIDogdm9pZCAwLAogICAgICAgICAgICBzb3VyY2VIYXNoOiBhcmdzLnNvdXJjZUhhc2gsCiAgICAgICAgICAgIHR5cGU6ICJkZXBvc2l0IgogICAgICAgICAgfTsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHsgZmVlQ3VycmVuY3k6IGFyZ3MuZmVlQ3VycmVuY3kgfTsKICAgICAgICBpZiAoYXJncy50eXBlID09PSAiMHg3YiIpCiAgICAgICAgICB0cmFuc2FjdGlvbi50eXBlID0gImNpcDY0IjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGlmIChhcmdzLnR5cGUgPT09ICIweDdjIikKICAgICAgICAgICAgdHJhbnNhY3Rpb24udHlwZSA9ICJjaXA0MiI7CiAgICAgICAgICB0cmFuc2FjdGlvbi5nYXRld2F5RmVlID0gYXJncy5nYXRld2F5RmVlID8gaGV4VG9CaWdJbnQoYXJncy5nYXRld2F5RmVlKSA6IG51bGw7CiAgICAgICAgICB0cmFuc2FjdGlvbi5nYXRld2F5RmVlUmVjaXBpZW50ID0gYXJncy5nYXRld2F5RmVlUmVjaXBpZW50OwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICAgIH0KICAgIH0pLAogICAgdHJhbnNhY3Rpb25SZXF1ZXN0OiAvKiBAX19QVVJFX18gKi8gZGVmaW5lVHJhbnNhY3Rpb25SZXF1ZXN0KHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCByZXF1ZXN0ID0ge307CiAgICAgICAgaWYgKGFyZ3MuZmVlQ3VycmVuY3kpCiAgICAgICAgICByZXF1ZXN0LmZlZUN1cnJlbmN5ID0gYXJncy5mZWVDdXJyZW5jeTsKICAgICAgICBpZiAoaXNDSVA2NChhcmdzKSkKICAgICAgICAgIHJlcXVlc3QudHlwZSA9ICIweDdiIjsKICAgICAgICByZXR1cm4gcmVxdWVzdDsKICAgICAgfQogICAgfSkKICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NlbG8vc2VyaWFsaXplcnMuanMKICBpbml0X2FkZHJlc3MoKTsKICBpbml0X2Jhc2UoKTsKICBpbml0X2NoYWluKCk7CiAgaW5pdF9ub2RlKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbjQodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgaWYgKGlzQ0lQNjQodHJhbnNhY3Rpb24pKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25DSVA2NCh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKTsKICAgIHJldHVybiBzZXJpYWxpemVUcmFuc2FjdGlvbjModHJhbnNhY3Rpb24sIHNpZ25hdHVyZSk7CiAgfQogIHZhciBzZXJpYWxpemVyczMgPSB7CiAgICB0cmFuc2FjdGlvbjogc2VyaWFsaXplVHJhbnNhY3Rpb240CiAgfTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkNJUDY0KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpIHsKICAgIGFzc2VydFRyYW5zYWN0aW9uQ0lQNjQodHJhbnNhY3Rpb24pOwogICAgY29uc3QgeyBjaGFpbklkLCBnYXMsIG5vbmNlLCB0bywgdmFsdWUsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIGFjY2Vzc0xpc3QsIGZlZUN1cnJlbmN5LCBkYXRhIH0gPSB0cmFuc2FjdGlvbjsKICAgIGNvbnN0IHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9IFsKICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgIG5vbmNlID8gdG9IZXgobm9uY2UpIDogIjB4IiwKICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXMgPyB0b0hleChtYXhQcmlvcml0eUZlZVBlckdhcykgOiAiMHgiLAogICAgICBtYXhGZWVQZXJHYXMgPyB0b0hleChtYXhGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgZ2FzID8gdG9IZXgoZ2FzKSA6ICIweCIsCiAgICAgIHRvID8/ICIweCIsCiAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiLAogICAgICBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpLAogICAgICBmZWVDdXJyZW5jeSwKICAgICAgLi4udG9ZUGFyaXR5U2lnbmF0dXJlQXJyYXkodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkKICAgIF07CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4N2IiLAogICAgICB0b1JscChzZXJpYWxpemVkVHJhbnNhY3Rpb24pCiAgICBdKTsKICB9CiAgdmFyIE1BWF9NQVhfRkVFX1BFUl9HQVMgPSAybiAqKiAyNTZuIC0gMW47CiAgZnVuY3Rpb24gYXNzZXJ0VHJhbnNhY3Rpb25DSVA2NCh0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBtYXhQcmlvcml0eUZlZVBlckdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckdhcywgdG8sIGZlZUN1cnJlbmN5IH0gPSB0cmFuc2FjdGlvbjsKICAgIGlmIChjaGFpbklkIDw9IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhaW5JZEVycm9yKHsgY2hhaW5JZCB9KTsKICAgIGlmICh0byAmJiAhaXNBZGRyZXNzKHRvKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB0byB9KTsKICAgIGlmIChnYXNQcmljZSkKICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoImBnYXNQcmljZWAgaXMgbm90IGEgdmFsaWQgQ0lQLTY0IFRyYW5zYWN0aW9uIGF0dHJpYnV0ZS4iKTsKICAgIGlmIChpc1ByZXNlbnQobWF4RmVlUGVyR2FzKSAmJiBtYXhGZWVQZXJHYXMgPiBNQVhfTUFYX0ZFRV9QRVJfR0FTKQogICAgICB0aHJvdyBuZXcgRmVlQ2FwVG9vSGlnaEVycm9yKHsgbWF4RmVlUGVyR2FzIH0pOwogICAgaWYgKGlzUHJlc2VudChtYXhQcmlvcml0eUZlZVBlckdhcykgJiYgaXNQcmVzZW50KG1heEZlZVBlckdhcykgJiYgbWF4UHJpb3JpdHlGZWVQZXJHYXMgPiBtYXhGZWVQZXJHYXMpCiAgICAgIHRocm93IG5ldyBUaXBBYm92ZUZlZUNhcEVycm9yKHsgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcyB9KTsKICAgIGlmIChpc1ByZXNlbnQoZmVlQ3VycmVuY3kpICYmICFpc0FkZHJlc3MoZmVlQ3VycmVuY3kpKSB7CiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgZmVlQ3VycmVuY3lgIE1VU1QgYmUgYSB0b2tlbiBhZGRyZXNzIGZvciBDSVAtNjQgdHJhbnNhY3Rpb25zLiIpOwogICAgfQogICAgaWYgKGlzRW1wdHkoZmVlQ3VycmVuY3kpKSB7CiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgZmVlQ3VycmVuY3lgIG11c3QgYmUgcHJvdmlkZWQgZm9yIENJUC02NCB0cmFuc2FjdGlvbnMuIik7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NlbG8vY2hhaW5Db25maWcuanMKICB2YXIgY2hhaW5Db25maWczID0gewogICAgZm9ybWF0dGVyczogZm9ybWF0dGVyczMsCiAgICBzZXJpYWxpemVyczogc2VyaWFsaXplcnMzLAogICAgZmVlcwogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NlbG8uanMKICB2YXIgY2VsbyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzMsCiAgICBpZDogNDIyMjAsCiAgICBuYW1lOiAiQ2VsbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDRUxPIiwKICAgICAgc3ltYm9sOiAiQ0VMTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2Zvcm5vLmNlbG8ub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ2VsbyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9jZWxvc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkuY2Vsb3NjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEzMTEyNTk5CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jZWxvQWxmYWpvcmVzLmpzCiAgdmFyIGNlbG9BbGZham9yZXMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWczLAogICAgaWQ6IDQ0Nzg3LAogICAgbmFtZTogIkFsZmFqb3JlcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDRUxPIiwKICAgICAgc3ltYm9sOiAiQS1DRUxPIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hbGZham9yZXMtZm9ybm8uY2Vsby10ZXN0bmV0Lm9yZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNlbG8gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuY2Vsby5vcmcvYWxmYWpvcmVzIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmNlbG8ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDU2OTAwMQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jaGlsaXouanMKICB2YXIgY2hpbGl6ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4ODg4OCwKICAgIG5hbWU6ICJDaGlsaXogQ2hhaW4iLAogICAgbmV0d29yazogImNoaWxpei1jaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDSFoiLAogICAgICBzeW1ib2w6ICJDSFoiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWwogICAgICAgICAgImh0dHBzOi8vcnBjLmFua3IuY29tL2NoaWxpeiIsCiAgICAgICAgICAiaHR0cHM6Ly9jaGlsaXotcnBjLnB1YmxpY25vZGUuY29tIgogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ2hpbGl6IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4uY2hpbGl6LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLmNoaWxpei5jb20vYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NoaXBzLmpzCiAgdmFyIGNoaXBzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyODgyLAogICAgbmFtZTogIkNoaXBzIE5ldHdvcmsiLAogICAgbmV0d29yazogIkNISVBTIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIklPVEEiLAogICAgICBzeW1ib2w6ICJJT1RBIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL25vZGUuY2hpcHMub29vL3dhc3AvYXBpL3YxL2NoYWlucy9pb3RhMXBwM2QzbW5hcDN1Zm1ncW5qc253MzQ0c3FtZjVzdmpoMjZ5Mmtobm1jODlzdjY3ODh5M3IyMDdhOGZuL2V2bSIKICAgICAgICBdCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY2xhc3NpYy5qcwogIHZhciBjbGFzc2ljID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2MSwKICAgIG5hbWU6ICJFdGhlcmV1bSBDbGFzc2ljIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUQyIsCiAgICAgIHN5bWJvbDogIkVUQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2V0Yy5yaXZldC5saW5rIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmNvbS9ldGMvbWFpbm5ldCIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jb25mbHV4RVNwYWNlLmpzCiAgdmFyIGNvbmZsdXhFU3BhY2UgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMzAsCiAgICBuYW1lOiAiQ29uZmx1eCBlU3BhY2UiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkNvbmZsdXgiLCBzeW1ib2w6ICJDRlgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldm0uY29uZmx1eHJwYy5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXZtLmNvbmZsdXhycGMuY29tL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ29uZmx1eFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZXZtLmNvbmZsdXhzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhFRmYwMDc4OTEwZjYzOGNkODE5OTZjYzExN2JjY0QzZURmMkIwNzJGIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDY4NjAyOTM1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY29uZmx1eEVTcGFjZVRlc3RuZXQuanMKICB2YXIgY29uZmx1eEVTcGFjZVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDcxLAogICAgbmFtZTogIkNvbmZsdXggZVNwYWNlIFRlc3RuZXQiLAogICAgbmV0d29yazogImNmeC1lc3BhY2UtdGVzdG5ldCIsCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkNvbmZsdXgiLCBzeW1ib2w6ICJDRlgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldm10ZXN0bmV0LmNvbmZsdXhycGMuY29tIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2V2bXRlc3RuZXQuY29uZmx1eHJwYy5jb20vd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJDb25mbHV4U2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ldm10ZXN0bmV0LmNvbmZsdXhzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhFRmYwMDc4OTEwZjYzOGNkODE5OTZjYzExN2JjY0QzZURmMkIwNzJGIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDExNzQ5OTA1MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NvcmVEYW8uanMKICB2YXIgY29yZURhbyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExNiwKICAgIG5hbWU6ICJDb3JlIERhbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDb3JlIiwKICAgICAgc3ltYm9sOiAiQ09SRSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5jb3JlZGFvLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNvcmVEYW8iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5jb3JlZGFvLm9yZyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTkwNzkzNAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3JhYi5qcwogIHZhciBjcmFiID0gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQ0LAogICAgbmFtZTogIkNyYWIgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDcmFiIE5ldHdvcmsgTmF0aXZlIFRva2VuIiwKICAgICAgc3ltYm9sOiAiQ1JBQiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vY3JhYi1ycGMuZGFyd2luaWEubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9jcmFiLXJwYy5kYXJ3aW5pYS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsgbmFtZTogIkJsb2Nrc2NvdXQiLCB1cmw6ICJodHRwczovL2NyYWItc2Nhbi5kYXJ3aW5pYS5uZXR3b3JrIiB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwMzI1OTMKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jcm9ub3MuanMKICB2YXIgY3Jvbm9zID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNSwKICAgIG5hbWU6ICJDcm9ub3MgTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDcm9ub3MiLAogICAgICBzeW1ib2w6ICJDUk8iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldm0uY3Jvbm9zLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNyb25vcyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5jcm9ub3Mub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLWFwaS5jcm9ub3Mub3JnL21haW5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5NjMxMTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jcm9ub3N6a0VWTS5qcwogIHZhciBjcm9ub3N6a0VWTSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzg4LAogICAgbmFtZTogIkNyb25vcyB6a0VWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkNyb25vcyB6a0VWTSBDUk8iLAogICAgICBzeW1ib2w6ICJ6a0NSTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL21haW5uZXQuemtldm0uY3Jvbm9zLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNyb25vcyB6a0VWTSAoTWFpbm5ldCkgQ2hhaW4gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuemtldm0uY3Jvbm9zLm9yZyIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jcm9ub3N6a0VWTVRlc3RuZXQuanMKICB2YXIgY3Jvbm9zemtFVk1UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyODIsCiAgICBuYW1lOiAiQ3Jvbm9zIHprRVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ3Jvbm9zIHprRVZNIFRlc3QgQ29pbiIsCiAgICAgIHN5bWJvbDogInprVENSTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuemtldm0uY3Jvbm9zLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNyb25vcyB6a0VWTSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnprZXZtLmNyb25vcy5vcmcvdGVzdG5ldCIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3Jvbm9zVGVzdG5ldC5qcwogIHZhciBjcm9ub3NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMzgsCiAgICBuYW1lOiAiQ3Jvbm9zIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ1JPIiwKICAgICAgc3ltYm9sOiAidENSTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2V2bS10My5jcm9ub3Mub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ3Jvbm9zIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2Nyb25vcy5vcmcvZXhwbG9yZXIvdGVzdG5ldDMiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTAxOTEyNTEKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3Jvc3NiZWxsLmpzCiAgdmFyIGNyb3NzYmVsbCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzczNywKICAgIG5hbWU6ICJDcm9zc2JlbGwiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ1NCIiwKICAgICAgc3ltYm9sOiAiQ1NCIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuY3Jvc3NiZWxsLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ3Jvc3NTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4uY3Jvc3NiZWxsLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NjYW4uY3Jvc3NiZWxsLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAzODI0NjAzMQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2N1cnRpcy5qcwogIHZhciBjdXJ0aXMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMzMTExLAogICAgbmFtZTogIkN1cnRpcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQXBlQ29pbiIsIHN5bWJvbDogIkFQRSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5jdXJ0aXMuYXBlY2hhaW4uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ3VydGlzIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmN1cnRpcy5hcGVjaGFpbi5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2N5YmVyLmpzCiAgdmFyIGN5YmVyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NTYwLAogICAgbmFtZTogIkN5YmVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2N5YmVyLmFsdC50ZWNobm9sb2d5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9jeWJlcnNjYW4uY28iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vY3liZXJzY2FuLmNvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3liZXJUZXN0bmV0LmpzCiAgdmFyIGN5YmVyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExNTU3NTYwLAogICAgbmFtZTogIkN5YmVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vY3liZXItdGVzdG5ldC5hbHQudGVjaG5vbG9neSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5jeWJlcnNjYW4uY28iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC5jeWJlcnNjYW4uY28vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhmZmMzOTFGMDAxODI2OWQ0NzU4QUVBMWExNDQ3NzJFOEZCOTk1NDVFIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwNDU0NQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kYXJ3aW5pYS5qcwogIHZhciBkYXJ3aW5pYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDYsCiAgICBuYW1lOiAiRGFyd2luaWEgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJSSU5HIiwKICAgICAgc3ltYm9sOiAiUklORyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmRhcndpbmlhLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLmRhcndpbmlhLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogeyBuYW1lOiAiRXhwbG9yZXIiLCB1cmw6ICJodHRwczovL2V4cGxvcmVyLmRhcndpbmlhLm5ldHdvcmsiIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjk0MjAKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kY2hhaW4uanMKICB2YXIgZGNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAyNzE2NDQ2NDI5ODM3ZTMsCiAgICBuYW1lOiAiRGNoYWluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2RjaGFpbi0yNzE2NDQ2NDI5ODM3MDAwLTEuanNvbnJwYy5zYWdhcnBjLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRGNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2RjaGFpbi0yNzE2NDQ2NDI5ODM3MDAwLTEuc2FnYWV4cGxvcmVyLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1kY2hhaW4tMjcxNjQ0NjQyOTgzNzAwMC0xLnNhZ2FleHBsb3Jlci5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kY2hhaW5UZXN0bmV0LmpzCiAgdmFyIGRjaGFpblRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI3MTMwMTc5OTc1NzhlMywKICAgIG5hbWU6ICJEY2hhaW4gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL2RjaGFpbnRlc3RuZXQtMjcxMzAxNzk5NzU3ODAwMC0xLmpzb25ycGMudGVzdG5ldC5zYWdhcnBjLmlvIgogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRGNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2RjaGFpbnRlc3RuZXQtMjcxMzAxNzk5NzU3ODAwMC0xLnRlc3RuZXQuc2FnYWV4cGxvcmVyLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1kY2hhaW50ZXN0bmV0LTI3MTMwMTc5OTc1NzgwMDAtMS50ZXN0bmV0LnNhZ2FleHBsb3Jlci5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kZWZpY2hhaW5Fdm0uanMKICB2YXIgZGVmaWNoYWluRXZtID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMTMwLAogICAgbmV0d29yazogImRlZmljaGFpbi1ldm0iLAogICAgbmFtZTogIkRlRmlDaGFpbiBFVk0gTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRGVGaUNoYWluIiwKICAgICAgc3ltYm9sOiAiREZJIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC5tYWlubmV0Lm9jZWFuLmplbGx5ZmlzaHNkay5jb20iXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZXRoLm1haW5uZXQub2NlYW4uamVsbHlmaXNoc2RrLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRlRmlTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL21ldGEuZGVmaXNjYW4ubGl2ZSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMzc4NTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kZWZpY2hhaW5Fdm1UZXN0bmV0LmpzCiAgdmFyIGRlZmljaGFpbkV2bVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMzEsCiAgICBuZXR3b3JrOiAiZGVmaWNoYWluLWV2bS10ZXN0bmV0IiwKICAgIG5hbWU6ICJEZUZpQ2hhaW4gRVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkRlRmlDaGFpbiIsCiAgICAgIHN5bWJvbDogIkRGSSIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldGgudGVzdG5ldC5vY2Vhbi5qZWxseWZpc2hzZGsuY29tIl0KICAgICAgfSwKICAgICAgcHVibGljOiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC50ZXN0bmV0Lm9jZWFuLmplbGx5ZmlzaHNkay5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJEZUZpU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9tZXRhLmRlZmlzY2FuLmxpdmUvP25ldHdvcms9VGVzdE5ldCIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNTY0NjIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZGVnZW4uanMKICB2YXIgZGVnZW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDY2NjY2NjY2NiwKICAgIG5hbWU6ICJEZWdlbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJEZWdlbiIsCiAgICAgIHN5bWJvbDogIkRFR0VOIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZGVnZW4udGlwcyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuZGVnZW4udGlwcyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRlZ2VuIENoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmRlZ2VuLnRpcHMiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZGVnZW4udGlwcy9hcGkvdjIiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZGZrLmpzCiAgdmFyIGRmayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTM5MzUsCiAgICBuYW1lOiAiREZLIENoYWluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkpld2VsIiwKICAgICAgc3ltYm9sOiAiSkVXRUwiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3N1Ym5ldHMuYXZheC5uZXR3b3JrL2RlZmkta2luZ2RvbXMvZGZrLWNoYWluL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRGS1N1Ym5ldFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc3VibmV0cy5hdmF4Lm5ldHdvcmsvZGVmaS1raW5nZG9tcyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDc5MDU1MQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2RvZG9jaGFpblRlc3RuZXQuanMKICB2YXIgZG9kb2NoYWluVGVzdG5ldCA9IGRlZmluZUNoYWluKHsKICAgIGlkOiA1MzQ1NywKICAgIG5hbWU6ICJET0RPY2hhaW4gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJET0RPIiwgc3ltYm9sOiAiRE9ETyIgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9kb2RvY2hhaW4tdGVzdG5ldC5hbHQudGVjaG5vbG9neSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9kb2RvY2hhaW4tdGVzdG5ldC5hbHQudGVjaG5vbG9neS93cyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRPRE9jaGFpbiBUZXN0bmV0IChTZXBvbGlhKSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LXNjYW4uZG9kb2NoYWluLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZG9nZWNoYWluLmpzCiAgdmFyIGRvZ2VjaGFpbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMmUzLAogICAgbmFtZTogIkRvZ2VjaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJXcmFwcGVkIERvZ2Vjb2luIiwKICAgICAgc3ltYm9sOiAiV0RPR0UiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMuZG9nZWNoYWluLmRvZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRvZ2VDaGFpbkV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmRvZ2VjaGFpbi5kb2ciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZG9nZWNoYWluLmRvZy9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweDY4YTg2MDlhNjBhMDA4RUZBNjMzZGZkZWM1OTJjMDNCMDMwY0M1MDgiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjUzODQwMzEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kcmV5ZXJ4TWFpbm5ldC5qcwogIHZhciBkcmV5ZXJ4TWFpbm5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjM0NTEsCiAgICBuYW1lOiAiRHJleWVyWCBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJEcmV5ZXJYIiwKICAgICAgc3ltYm9sOiAiRFJYIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5kcmV5ZXJ4LmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRyZXllclggU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLmRyZXllcnguY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2RyZXllcnhUZXN0bmV0LmpzCiAgdmFyIGRyZXllcnhUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMzQ1MiwKICAgIG5hbWU6ICJEcmV5ZXJYIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkRyZXllclgiLAogICAgICBzeW1ib2w6ICJEUlgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHA6Ly90ZXN0bmV0LXJwYy5kcmV5ZXJ4LmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRyZXllclggVGVzdG5ldCBTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQtc2Nhbi5kcmV5ZXJ4LmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZWRnZWxlc3MuanMKICB2YXIgZWRnZWxlc3MgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIwMjYsCiAgICBuYW1lOiAiRWRnZWxlc3MgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRWRnZWxlc3MgV3JhcHBlZCBFVEgiLAogICAgICBzeW1ib2w6ICJFd0VUSCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZWRnZWxlc3MubmV0d29yay9odHRwIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5lZGdlbGVzcy5uZXR3b3JrL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWRnZWxlc3MgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuZWRnZWxlc3MubmV0d29yayIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lZGdlbGVzc1Rlc3RuZXQuanMKICB2YXIgZWRnZWxlc3NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDIsCiAgICBuYW1lOiAiRWRnZWxlc3MgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRWRnZWxlc3MgV3JhcHBlZCBFVEgiLAogICAgICBzeW1ib2w6ICJFd0VUSCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9lZGdlbGVzcy10ZXN0bmV0LnJwYy5jYWxkZXJhLnh5ei9odHRwIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2VkZ2VsZXNzLXRlc3RuZXQucnBjLmNhbGRlcmEueHl6L3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWRnZWxlc3MgVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmV4cGxvcmVyLmVkZ2VsZXNzLm5ldHdvcmsiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZWRnZXdhcmUuanMKICB2YXIgZWRnZXdhcmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIwMjEsCiAgICBuYW1lOiAiRWRnZXdhcmUgRWRnZUVWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVkZ2V3YXJlIiwKICAgICAgc3ltYm9sOiAiRURHIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZWRnZXdhcmUtZXZtLmplbGxpZWRvd2wubmV0Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWRnc2NhbiBieSBCaGFyYXRoY29vcmciLAogICAgICAgIHVybDogImh0dHBzOi8vZWRnc2Nhbi5saXZlIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2VkZ3NjYW4ubGl2ZS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTgxMTc4NzIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lZGdld2FyZVRlc3RuZXQuanMKICB2YXIgZWRnZXdhcmVUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDIyLAogICAgbmFtZTogIkJlcmVzaGVldCBCZXJlRVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiVGVzdG5ldCBFREciLAogICAgICBzeW1ib2w6ICJ0RURHIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYmVyZXNoZWV0LWV2bS5qZWxsaWVkb3dsLm5ldCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkVkZ3NjYW4gYnkgQmhhcmF0aGNvb3JnIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuZWRnc2Nhbi5saXZlIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQuZWRnc2Nhbi5saXZlL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lb24uanMKICB2YXIgZW9uID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3MzMyLAogICAgbmFtZTogIkhvcml6ZW4gRU9OIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlpFTiIsCiAgICAgIHN5bWJvbDogIlpFTiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2Vvbi1ycGMuaG9yaXplbmxhYnMuaW8vZXRodjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFT04gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZW9uLWV4cGxvcmVyLmhvcml6ZW5sYWJzLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lb3MuanMKICB2YXIgZW9zID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNzc3NywKICAgIG5hbWU6ICJFT1MgRVZNIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVPUyIsCiAgICAgIHN5bWJvbDogIkVPUyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FwaS5ldm0uZW9zbmV0d29yay5jb20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFT1MgRVZNIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmV2bS5lb3NuZXR3b3JrLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0uZW9zbmV0d29yay5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc5NDM5MzMKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lb3NUZXN0bmV0LmpzCiAgdmFyIGVvc1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE1NTU3LAogICAgbmFtZTogIkVPUyBFVk0gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFT1MiLAogICAgICBzeW1ib2w6ICJFT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkudGVzdG5ldC5ldm0uZW9zbmV0d29yay5jb20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFT1MgRVZNIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5ldm0uZW9zbmV0d29yay5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5ldm0uZW9zbmV0d29yay5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDkwNjc5NDAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZXRoZXJsaW5rLmpzCiAgdmFyIGV0aGVybGluayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDI3OTMsCiAgICBuYW1lOiAiRXRoZXJsaW5rIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlRleiIsCiAgICAgIHN5bWJvbDogIlhUWiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL25vZGUubWFpbm5ldC5ldGhlcmxpbmsuY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJsaW5rIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmV0aGVybGluay5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzM4OTkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ldGhlcmxpbmtUZXN0bmV0LmpzCiAgdmFyIGV0aGVybGlua1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODEyMywKICAgIG5hbWU6ICJFdGhlcmxpbmsgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJUZXoiLAogICAgICBzeW1ib2w6ICJYVFoiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ub2RlLmdob3N0bmV0LmV0aGVybGluay5jb20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcmxpbmsgVGVzdG5ldCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLmV0aGVybGluay5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2V2bW9zLmpzCiAgdmFyIGV2bW9zID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5MDAxLAogICAgbmFtZTogIkV2bW9zIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV2bW9zIiwKICAgICAgc3ltYm9sOiAiRVZNT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldGguYmQuZXZtb3Mub3JnOjg1NDUiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdm1vcyBCbG9jayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9lc2Nhbi5saXZlIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2V2bW9zVGVzdG5ldC5qcwogIHZhciBldm1vc1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDllMywKICAgIG5hbWU6ICJFdm1vcyBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV2bW9zIiwKICAgICAgc3ltYm9sOiAiRVZNT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldGguYmQuZXZtb3MuZGV2Ojg1NDUiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdm1vcyBUZXN0bmV0IEJsb2NrIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V2bS5ldm1vcy5kZXYvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2VrdGEuanMKICB2YXIgZWt0YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTk5NCwKICAgIG5hbWU6ICJFa3RhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVLVEEiLAogICAgICBzeW1ib2w6ICJFS1RBIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbWFpbi5la3RhLmlvIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWt0YXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZWt0YXNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZWt0YXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2VrdGFUZXN0bmV0LmpzCiAgdmFyIGVrdGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDA0LAogICAgbmFtZTogIkVrdGEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFS1RBIiwKICAgICAgc3ltYm9sOiAiRUtUQSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3Rlc3QuZWt0YS5pbzo4NTQ1Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGVzdCBFa3Rhc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0LmVrdGFzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3QuZWt0YXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mYW50b20uanMKICB2YXIgZmFudG9tID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNTAsCiAgICBuYW1lOiAiRmFudG9tIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkZhbnRvbSIsCiAgICAgIHN5bWJvbDogIkZUTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5hbmtyLmNvbS9mYW50b20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGVE1TY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2Z0bXNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5mdG1zY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzMwMDE5ODcKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mYW50b21Tb25pY1Rlc3RuZXQuanMKICB2YXIgZmFudG9tU29uaWNUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2NDI0MCwKICAgIG5hbWU6ICJGYW50b20gU29uaWMgT3BlbiBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJmYW50b20tc29uaWMtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJGYW50b20iLAogICAgICBzeW1ib2w6ICJGVE0iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGNhcGkuc29uaWMuZmFudG9tLm5ldHdvcmsiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGYW50b20gU29uaWMgT3BlbiBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3B1YmxpYy1zb25pYy5mYW50b20ubmV0d29yayIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmFudG9tVGVzdG5ldC5qcwogIHZhciBmYW50b21UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MDAyLAogICAgbmFtZTogIkZhbnRvbSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkZhbnRvbSIsCiAgICAgIHN5bWJvbDogIkZUTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy50ZXN0bmV0LmZhbnRvbS5uZXR3b3JrIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRlRNU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmZ0bXNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQuZnRtc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDgzMjg2ODgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmliby5qcwogIHZhciBmaWJvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjMwNiwKICAgIG5hbWU6ICJGaWJvIENoYWluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogImZpYm8iLAogICAgICBzeW1ib2w6ICJGSUJPIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbmV0d29yay5oenJvYy5hcnQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWJvU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLmZpYm9jaGFpbi5vcmciCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmlsZWNvaW4uanMKICB2YXIgZmlsZWNvaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxNCwKICAgIG5hbWU6ICJGaWxlY29pbiBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogImZpbGVjb2luIiwKICAgICAgc3ltYm9sOiAiRklMIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLm5vZGUuZ2xpZi5pby9ycGMvdjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWxmb3giLAogICAgICAgIHVybDogImh0dHBzOi8vZmlsZm94LmluZm8vZW4iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzMyODU5NAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZpbGVjb2luQ2FsaWJyYXRpb24uanMKICB2YXIgZmlsZWNvaW5DYWxpYnJhdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzE0MTU5LAogICAgbmFtZTogIkZpbGVjb2luIENhbGlicmF0aW9uIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogInRlc3RuZXQgZmlsZWNvaW4iLAogICAgICBzeW1ib2w6ICJ0RklMIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLmNhbGlicmF0aW9uLm5vZGUuZ2xpZi5pby9ycGMvdjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWxzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2NhbGlicmF0aW9uLmZpbHNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZpbGVjb2luSHlwZXJzcGFjZS5qcwogIHZhciBmaWxlY29pbkh5cGVyc3BhY2UgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxNDEsCiAgICBuYW1lOiAiRmlsZWNvaW4gSHlwZXJzcGFjZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJ0ZXN0bmV0IGZpbGVjb2luIiwKICAgICAgc3ltYm9sOiAidEZJTCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FwaS5oeXBlcnNwYWNlLm5vZGUuZ2xpZi5pby9ycGMvdjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWxmb3giLAogICAgICAgIHVybDogImh0dHBzOi8vaHlwZXJzcGFjZS5maWxmb3guaW5mby9lbiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmxhcmUuanMKICB2YXIgZmxhcmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0LAogICAgbmFtZTogIkZsYXJlIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiZmxhcmUiLAogICAgICBzeW1ib2w6ICJGTFIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9mbGFyZS1hcGkuZmxhcmUubmV0d29yay9leHQvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGbGFyZSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9mbGFyZS1leHBsb3Jlci5mbGFyZS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2ZsYXJlLWV4cGxvcmVyLmZsYXJlLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZsYXJlVGVzdG5ldC5qcwogIHZhciBmbGFyZVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExNCwKICAgIG5hbWU6ICJDb3N0b24yIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogImNvc3RvbjJmbGFyZSIsCiAgICAgIHN5bWJvbDogIkMyRkxSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vY29zdG9uMi1hcGkuZmxhcmUubmV0d29yay9leHQvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJDb3N0b24yIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2Nvc3RvbjItZXhwbG9yZXIuZmxhcmUubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9jb3N0b24yLWV4cGxvcmVyLmZsYXJlLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mbG93UHJldmlld25ldC5qcwogIHZhciBmbG93UHJldmlld25ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNjQ2LAogICAgbmFtZTogIkZsb3dFVk0gUHJldmlld25ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJGbG93IiwKICAgICAgc3ltYm9sOiAiRkxPVyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcHJldmlld25ldC5ldm0ubm9kZXMub25mbG93Lm9yZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlByZXZpZXduZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcHJldmlld25ldC5mbG93ZGl2ZXIuaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjIwNQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Zsb3dNYWlubmV0LmpzCiAgdmFyIGZsb3dNYWlubmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NDcsCiAgICBuYW1lOiAiRmxvd0VWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkZsb3ciLAogICAgICBzeW1ib2w6ICJGTE9XIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmV2bS5ub2Rlcy5vbmZsb3cub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFpbm5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9mbG93ZGl2ZXIuaW8iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmxvd1Rlc3RuZXQuanMKICB2YXIgZmxvd1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU0NSwKICAgIG5hbWU6ICJGbG93RVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRmxvdyIsCiAgICAgIHN5bWJvbDogIkZMT1ciCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuZXZtLm5vZGVzLm9uZmxvdy5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGbG93IERpdmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuZmxvd2RpdmVyLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEzNzUxOAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Zvcm1hLmpzCiAgdmFyIGZvcm1hID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5ODQxMjIsCiAgICBuYW1lOiAiRm9ybWEiLAogICAgbmV0d29yazogImZvcm1hIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIHN5bWJvbDogIlRJQSIsCiAgICAgIG5hbWU6ICJUSUEiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmZvcm1hLmFydCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly93cy5mb3JtYS5hcnQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGb3JtYSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5mb3JtYS5hcnQiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGQ1M0M2RkZCMTIzRjczNDlBMzI5ODBGODdmYWVEOEZmRGM5ZWYwNzkiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjUyNzA1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZm91bmRyeS5qcwogIHZhciBmb3VuZHJ5ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMTMzNywKICAgIG5hbWU6ICJGb3VuZHJ5IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cDovLzEyNy4wLjAuMTo4NTQ1Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzOi8vMTI3LjAuMC4xOjg1NDUiXQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZyYXh0YWwuanMKICB2YXIgc291cmNlSWQxMiA9IDE7CiAgdmFyIGZyYXh0YWwgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI1MiwKICAgIG5hbWU6ICJGcmF4dGFsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJGcmF4IEV0aGVyIiwgc3ltYm9sOiAiZnJ4RVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmZyYXguY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiZnJheHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZnJheHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5mcmF4c2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMTJdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg2NkNDOTE2RWQ1QzZDMkZBOTcwMTRmN0QxY0QxNDE1MjhBZTE3MWU0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDEyXTogewogICAgICAgICAgYWRkcmVzczogIjB4MzZjYjY1YzE5NjdBMEZiMEVFRTExNTY5QzUxQzJmMmFBMUNhNmY2RCIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MTM1MzIzCiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkMTJdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgzNEMwYkQ1ODc3QTVFZTcwOTlEMGY1Njg4RDY1RjRiQjkxNThCREUyIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMTkxMzUzMjMKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQxMgogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mcmF4dGFsVGVzdG5ldC5qcwogIHZhciBzb3VyY2VJZDEzID0gMTdlMzsKICB2YXIgZnJheHRhbFRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI1MjIsCiAgICBuYW1lOiAiRnJheHRhbCBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJGcmF4IEV0aGVyIiwgc3ltYm9sOiAiZnJ4RVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQuZnJheC5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJmcmF4c2NhbiB0ZXN0bmV0IiwKICAgICAgICB1cmw6ICJodHRwczovL2hvbGVza3kuZnJheHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1ob2xlc2t5LmZyYXhzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQxM106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDcxNUVBNjREQTEzRjRkMDgzMWVjZTRBZDNFOGMxYWEwMTMxNjdGMzIiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTNdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhCOWM2NEJmQTQ5OGQ1YjlhODM5OEVkNmY0NmViNzZkOTBkRTU1MDVkIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzE4NDE2CiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkMTNdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgwQmFhZkMyMTcxNjJmNjQ5MzA5MDlhRDlmMkIyNzEyNTEyMWQ2MzMyIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzE4NDE2CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTMKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZnVua2lNYWlubmV0LmpzCiAgdmFyIHNvdXJjZUlkMTQgPSAxOwogIHZhciBmdW5raU1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDMzOTc5LAogICAgbmFtZTogIkZ1bmtpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1tYWlubmV0LmZ1bmtpY2hhaW4uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRnVua2kgTWFpbm5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9mdW5raXNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cwogICAgfSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDE0CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Z1bmtpU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDE1ID0gMTExNTUxMTE7CiAgdmFyIGZ1bmtpU2Vwb2xpYSA9IGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAzMzk3OTAxLAogICAgbmV0d29yazogImZ1bmtpU2Vwb2xpYSIsCiAgICBuYW1lOiAiRnVua2kgU2Vwb2xpYSBTYW5kYm94IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2Z1bmtpLXRlc3RuZXQuYWx0LnRlY2hub2xvZ3kiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGdW5raSBTZXBvbGlhIFNhbmRib3ggRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS1zYW5kYm94LmZ1bmtpY2hhaW4uY29tLyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTYyMDIwNAogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZnVzZS5qcwogIHZhciBmdXNlID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjIsCiAgICBuYW1lOiAiRnVzZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRnVzZSIsIHN5bWJvbDogIkZVU0UiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcnBjLmZ1c2UuaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGdXNlIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmZ1c2UuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZnVzZS5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTYxNDY2MjgKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mdXNlU3BhcmtuZXQuanMKICB2YXIgZnVzZVNwYXJrbmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjMsCiAgICBuYW1lOiAiRnVzZSBTcGFya25ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU3BhcmsiLCBzeW1ib2w6ICJTUEFSSyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMuZnVzZXNwYXJrLmlvIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU3BhcmtlbnQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuZnVzZXNwYXJrLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmZ1c2VzcGFyay5pby9hcGkiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvaW90ZXguanMKICB2YXIgaW90ZXggPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQ2ODksCiAgICBuYW1lOiAiSW9UZVgiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSW9UZVgiLAogICAgICBzeW1ib2w6ICJJT1RYIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9iYWJlbC1hcGkubWFpbm5ldC5pb3RleC5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9iYWJlbC1hcGkubWFpbm5ldC5pb3RleC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIklvVGVYU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9pb3RleHNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjIxNjM2NzAKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pb3RleFRlc3RuZXQuanMKICB2YXIgaW90ZXhUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0NjkwLAogICAgbmFtZTogIklvVGVYIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSW9UZVgiLAogICAgICBzeW1ib2w6ICJJT1RYIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9iYWJlbC1hcGkudGVzdG5ldC5pb3RleC5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9iYWJlbC1hcGkudGVzdG5ldC5pb3RleC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIklvVGVYU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmlvdGV4c2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YjVjZWNENjg5NGM2ZjQ3M0VjNzI2QTE3NmYxNTEyMzk5QTJlMzU1ZCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDM0NzU5MgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9qYmMuanMKICB2YXIgamJjID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4ODk5LAogICAgbmFtZTogIkpJQkNIQUlOIEwxIiwKICAgIG5ldHdvcms6ICJqYmMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkpCQyIsIHN5bWJvbDogIkpCQyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1sMS5qaWJjaGFpbi5uZXQiXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLWwxLmppYmNoYWluLm5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwLWwxLmppYmNoYWluLm5ldCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHAtbDEuamliY2hhaW4ubmV0L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YzBDOEM0ODZEMTQ2NkM1N0VmZTEzQzJiZjAwMGQ0YzU2RjQ3Q0JkQyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMjk5MDQ4CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9qYmNUZXN0bmV0LmpzCiAgdmFyIGpiY1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDg4OTkxLAogICAgbmFtZTogIkppYmNoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInRKQkMiLCBzeW1ib2w6ICJ0SkJDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQuamliY2hhaW4ubmV0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHAudGVzdG5ldC5qaWJjaGFpbi5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwLnRlc3RuZXQuamliY2hhaW4ubmV0L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YTFhODU4YWQ5MDQxQjQ3NDFlNjIwMzU1YTNGOTZCM2M3OGU3MGVjRSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAzMjg0OAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rYXJ1cmEuanMKICB2YXIga2FydXJhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2ODYsCiAgICBuYW1lOiAiS2FydXJhIiwKICAgIG5ldHdvcms6ICJrYXJ1cmEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkthcnVyYSIsCiAgICAgIHN5bWJvbDogIktBUiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgcHVibGljOiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC1ycGMta2FydXJhLmFjYS1hcGkubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ldGgtcnBjLWthcnVyYS5hY2EtYXBpLm5ldHdvcmsiXQogICAgICB9LAogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC1ycGMta2FydXJhLmFjYS1hcGkubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ldGgtcnBjLWthcnVyYS5hY2EtYXBpLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJLYXJ1cmEgQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmthcnVyYS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2Jsb2Nrc2NvdXQua2FydXJhLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ29iaS5qcwogIHZhciBnb2JpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjYzLAogICAgbmFtZTogIkhvcml6ZW4gR29iaSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlRlc3QgWkVOIiwKICAgICAgc3ltYm9sOiAidFpFTiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2dvYmktdGVzdG5ldC5ob3JpemVubGFicy5pby9ldGh2MSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkdvYmkgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZ29iaS1leHBsb3Jlci5ob3JpemVuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ29lcmxpLmpzCiAgdmFyIGdvZXJsaSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNSwKICAgIG5hbWU6ICJHb2VybGkiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkdvZXJsaSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5hbmtyLmNvbS9ldGhfZ29lcmxpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2dvZXJsaS5ldGhlcnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLWdvZXJsaS5ldGhlcnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIGVuc1JlZ2lzdHJ5OiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIKICAgICAgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhmYzRBQzc1QzQ2QzkxNGFGNTg5MmQ2ZDNlRkZjZWJENzkxNzI5M0YxIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEwMzM5MjA2CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDY1MDc2NzAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ25vc2lzLmpzCiAgdmFyIGdub3NpcyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAwLAogICAgbmFtZTogIkdub3NpcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJHbm9zaXMiLAogICAgICBzeW1ib2w6ICJ4REFJIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ25vc2lzY2hhaW4uY29tIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5nbm9zaXNjaGFpbi5jb20vd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiR25vc2lzc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9nbm9zaXNzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5nbm9zaXNzY2FuLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMTAyMjQ5MQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2dub3Npc0NoaWFkby5qcwogIHZhciBnbm9zaXNDaGlhZG8gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMjAwLAogICAgbmFtZTogIkdub3NpcyBDaGlhZG8iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiR25vc2lzIiwKICAgICAgc3ltYm9sOiAieERBSSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmNoaWFkb2NoYWluLm5ldCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuY2hpYWRvY2hhaW4ubmV0L3dzcyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5jaGlhZG9jaGFpbi5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5jaGlhZG9jaGFpbi5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NjczMTMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ3Jhdml0eS5qcwogIHZhciBncmF2aXR5ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjI1LAogICAgbmFtZTogIkdyYXZpdHkgQWxwaGEgTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRyIsIHN5bWJvbDogIkciLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ3Jhdml0eS54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJHcmF2aXR5IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmdyYXZpdHkueHl6IiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmdyYXZpdHkueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4ZjhhYzRCRUIyRjc1ZDJjRkZiNTg4YzYzMjUxMzQ3ZmRENjI5QjkyYyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNjg1MQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hhbS5qcwogIHZhciBoYW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDUxMTIsCiAgICBuYW1lOiAiSGFtIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkhhbSIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmhhbS5mdW4iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLmhhbS5mdW4iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIYW0gQ2hhaW4gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuaGFtLmZ1biIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5oYW0uZnVuL2FwaS92MiIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9oYXJkaGF0LmpzCiAgdmFyIGhhcmRoYXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxMzM3LAogICAgbmFtZTogIkhhcmRoYXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cDovLzEyNy4wLjAuMTo4NTQ1Il0gfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9oYXJtb255T25lLmpzCiAgdmFyIGhhcm1vbnlPbmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE2NjY2ZTUsCiAgICBuYW1lOiAiSGFybW9ueSBPbmUiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkhhcm1vbnkiLAogICAgICBzeW1ib2w6ICJPTkUiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5hbmtyLmNvbS9oYXJtb255Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiSGFybW9ueSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5oYXJtb255Lm9uZSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDE4NTc1MwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hhcXFNYWlubmV0LmpzCiAgdmFyIGhhcXFNYWlubmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMTIzNSwKICAgIG5hbWU6ICJIQVFRIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSXNsYW1pYyBDb2luIiwKICAgICAgc3ltYm9sOiAiSVNMTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmV0aC5oYXFxLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIQVFRIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmhhcXEubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5oYXFxLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hhcXFUZXN0ZWRnZTIuanMKICB2YXIgaGFxcVRlc3RlZGdlMiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTQyMTEsCiAgICBuYW1lOiAiSEFRUSBUZXN0ZWRnZSAyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIklzbGFtaWMgQ29pbiIsCiAgICAgIHN5bWJvbDogIklTTE1UIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZXRoLnRlc3RlZGdlMi5oYXFxLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIQVFRIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RlZGdlMi5oYXFxLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdGVkZ2UyLmhhcXEubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvaGVkZXJhLmpzCiAgdmFyIGhlZGVyYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjk1LAogICAgbmFtZTogIkhlZGVyYSBNYWlubmV0IiwKICAgIG5ldHdvcms6ICJoZWRlcmEtbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBzeW1ib2w6ICJIQkFSIiwKICAgICAgbmFtZTogIkhCQVIiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5oYXNoaW8uaW8vYXBpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiSGFzaHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vaGFzaHNjYW4uaW8vbWFpbm5ldCIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hlZGVyYVRlc3RuZXQuanMKICB2YXIgaGVkZXJhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjk2LAogICAgbmFtZTogIkhlZGVyYSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJoZWRlcmEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBzeW1ib2w6ICJIQkFSIiwKICAgICAgbmFtZTogIkhCQVIiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5oYXNoaW8uaW8vYXBpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiSGFzaHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vaGFzaHNjYW4uaW8vdGVzdG5ldCIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvaGVkZXJhUHJldmlld25ldC5qcwogIHZhciBoZWRlcmFQcmV2aWV3bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyOTcsCiAgICBuYW1lOiAiSGVkZXJhIFByZXZpZXduZXQiLAogICAgbmV0d29yazogImhlZGVyYS1wcmV2aWV3bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIHN5bWJvbDogIkhCQVIiLAogICAgICBuYW1lOiAiSEJBUiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9wcmV2aWV3bmV0Lmhhc2hpby5pby9hcGkiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIYXNoc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9oYXNoc2Nhbi5pby9wcmV2aWV3bmV0IgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ob2xlc2t5LmpzCiAgdmFyIGhvbGVza3kgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE3ZTMsCiAgICBuYW1lOiAiSG9sZXNreSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiSG9sZXNreSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aGVyZXVtLWhvbGVza3ktcnBjLnB1YmxpY25vZGUuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2hvbGVza3kuZXRoZXJzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc3CiAgICAgIH0sCiAgICAgIGVuc1JlZ2lzdHJ5OiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA4MDE2MTMKICAgICAgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhhNkFDOTM1RDQ5NzFFM0NEMTMzYjk1MGFFMDUzYkVDRDE2ZkU3ZjNiIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDk3MzQ4NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pbW11dGFibGVaa0V2bS5qcwogIHZhciBpbW11dGFibGVaa0V2bSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTMzNzEsCiAgICBuYW1lOiAiSW1tdXRhYmxlIHprRVZNIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkltbXV0YWJsZSBDb2luIiwKICAgICAgc3ltYm9sOiAiSU1YIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuaW1tdXRhYmxlLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkltbXV0YWJsZSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5pbW11dGFibGUuY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmltbXV0YWJsZS5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHgyMzZiZEE0NTg5ZTQ0ZTY4NTBmNWFDNmE3NEJmQ2EzOThhODZjNmMwIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQzMzU5NzIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pbW11dGFibGVaa0V2bVRlc3RuZXQuanMKICB2YXIgaW1tdXRhYmxlWmtFdm1UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMzQ3MywKICAgIG5hbWU6ICJJbW11dGFibGUgemtFVk0gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJJbW11dGFibGUgQ29pbiIsCiAgICAgIHN5bWJvbDogIklNWCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQuaW1tdXRhYmxlLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkltbXV0YWJsZSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQuaW1tdXRhYmxlLmNvbS8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweDJDQzc4N0VkMzY0NjAwQjAyMjIzNjFDNDE4ODMwOEZhOEU2OGJBNjAiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTk3NzM5MQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pbkVWTS5qcwogIHZhciBpbkVWTSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjUyNSwKICAgIG5hbWU6ICJpbkVWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkluamVjdGl2ZSIsCiAgICAgIHN5bWJvbDogIklOSiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL21haW5uZXQucnBjLmluZXZtLmNvbS9odHRwIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiaW5FVk0gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vaW5ldm0uY2FsZGVyYWV4cGxvcmVyLnh5eiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9pbmV2bS5jYWxkZXJhZXhwbG9yZXIueHl6L2FwaS92MiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTg2MDYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pb3RhLmpzCiAgdmFyIGlvdGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDg4MjIsCiAgICBuYW1lOiAiSU9UQSBFVk0iLAogICAgbmV0d29yazogImlvdGFldm0iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSU9UQSIsCiAgICAgIHN5bWJvbDogIklPVEEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2pzb24tcnBjLmV2bS5pb3RhbGVkZ2VyLm5ldCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly93cy5qc29uLXJwYy5ldm0uaW90YWxlZGdlci5uZXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0uaW90YS5vcmciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLmlvdGEub3JnL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pb3RhVGVzdG5ldC5qcwogIHZhciBpb3RhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTA3NSwKICAgIG5hbWU6ICJJT1RBIEVWTSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJpb3RhZXZtLXRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSU9UQSIsCiAgICAgIHN5bWJvbDogIklPVEEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2pzb24tcnBjLmV2bS50ZXN0bmV0LmlvdGFsZWRnZXIubmV0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLmpzb24tcnBjLmV2bS50ZXN0bmV0LmlvdGFsZWRnZXIubmV0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLnRlc3RuZXQuaW90YWxlZGdlci5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLnRlc3RuZXQuaW90YWxlZGdlci5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rYWthcm90U2Vwb2xpYS5qcwogIHZhciBrYWthcm90U2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTgwMjIwMzc2NCwKICAgIG5hbWU6ICJLYWthcm90IFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEtcnBjLmtha2Fyb3Qub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiS2FrYXJvdCBTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEua2FrYXJvdHNjYW4ub3JnIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rYXZhLmpzCiAgdmFyIGthdmEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIyMjIsCiAgICBuYW1lOiAiS2F2YSBFVk0iLAogICAgbmV0d29yazogImthdmEtbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiS2F2YSIsCiAgICAgIHN5bWJvbDogIktBVkEiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2V2bS5rYXZhLmlvIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiS2F2YSBFVk0gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8va2F2YXNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2thdmFzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzY2MTE2NQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva2F2YVRlc3RuZXQuanMKICB2YXIga2F2YVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIyMjEsCiAgICBuYW1lOiAiS2F2YSBFVk0gVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAia2F2YS10ZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJLYXZhIiwKICAgICAgc3ltYm9sOiAiS0FWQSIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZXZtLnRlc3RuZXQua2F2YS5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkthdmEgRVZNIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5rYXZhc2Nhbi5jb20vIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQua2F2YXNjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4RGYxRDcyNEE3MTY2MjYxZUVCMDE1NDE4ZmU4Yzc2NzlCQkVhN2ZkNiIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3MjQyMTc5CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2tjYy5qcwogIHZhciBrY2MgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMyMSwKICAgIG5hbWU6ICJLQ0MgTWFpbm5ldCIsCiAgICBuZXR3b3JrOiAiS0NDIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiS0NTIiwKICAgICAgc3ltYm9sOiAiS0NTIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9rY2MtcnBjLmNvbSJdCiAgICAgIH0sCiAgICAgIHB1YmxpYzogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9rY2MtcnBjLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7IG5hbWU6ICJLQ0MgRXhwbG9yZXIiLCB1cmw6ICJodHRwczovL2V4cGxvcmVyLmtjYy5pbyIgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTc2MDQzMAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva2xheXRuLmpzCiAgdmFyIGtsYXl0biA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogODIxNywKICAgIG5hbWU6ICJLbGF5dG4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiS2xheXRuIiwKICAgICAgc3ltYm9sOiAiS0xBWSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3B1YmxpYy1lbi1jeXByZXNzLmtsYXl0bi5uZXQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJLbGF5dG5TY29wZSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY29wZS5rbGF5dG4uY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDk2MDAyNDE1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva2xheXRuQmFvYmFiLmpzCiAgdmFyIGtsYXl0bkJhb2JhYiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAwMSwKICAgIG5hbWU6ICJLbGF5dG4gQmFvYmFiIFRlc3RuZXQiLAogICAgbmV0d29yazogImtsYXl0bi1iYW9iYWIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQmFvYmFiIEtsYXl0biIsCiAgICAgIHN5bWJvbDogIktMQVkiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9wdWJsaWMtZW4tYmFvYmFiLmtsYXl0bi5uZXQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJLbGF5dG5TY29wZSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9iYW9iYWIua2xheXRuc2NvcGUuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEyMzM5MDU5MwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rb2kuanMKICB2YXIga29pID0gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDcwMSwKICAgIG5hbWU6ICJLb2kgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJLb2kgTmV0d29yayBOYXRpdmUgVG9rZW4iLAogICAgICBzeW1ib2w6ICJLUklORyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8va29pLXJwYy5kYXJ3aW5pYS5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2tvaS1ycGMuZGFyd2luaWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7IG5hbWU6ICJCbG9ja3Njb3V0IiwgdXJsOiAiaHR0cHM6Ly9rb2ktc2Nhbi5kYXJ3aW5pYS5uZXR3b3JrIiB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE4MDAwMQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rcm9tYS5qcwogIHZhciBrcm9tYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjU1LAogICAgbmFtZTogIktyb21hIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFVEgiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcGkua3JvbWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIktyb21hIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2Jsb2Nrc2NvdXQua3JvbWEubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0Lmtyb21hLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva3JvbWFTZXBvbGlhLmpzCiAgdmFyIGtyb21hU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjM1OCwKICAgIG5hbWU6ICJLcm9tYSBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZXBvbGlhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vYXBpLnNlcG9saWEua3JvbWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIktyb21hIFNlcG9saWEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5zZXBvbGlhLmtyb21hLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5zZXBvbGlhLmtyb21hLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9sM3guanMKICB2YXIgbDN4ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjMyNCwKICAgIG5hbWU6ICJMM1ggUHJvdG9jb2wiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLW1haW5uZXQubDN4LmNvbSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMtbWFpbm5ldC5sM3guY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTDNYIE1haW5uZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIubDN4LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5sM3guY29tL2FwaS92MiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2wzeFRlc3RuZXQuanMKICB2YXIgbDN4VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTIzMjUsCiAgICBuYW1lOiAiTDNYIFByb3RvY29sIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQubDN4LmNvbSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMtdGVzdG5ldC5sM3guY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTDNYIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXItdGVzdG5ldC5sM3guY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLXRlc3RuZXQubDN4LmNvbS9hcGkvdjIiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2xpZ2h0bGlua1BlZ2FzdXMuanMKICB2YXIgbGlnaHRsaW5rUGVnYXN1cyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTg5MSwKICAgIG5hbWU6ICJMaWdodExpbmsgUGVnYXN1cyBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJsaWdodGxpbmstcGVnYXN1cyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcmVwbGljYXRvci5wZWdhc3VzLmxpZ2h0bGluay5pby9ycGMvdjEiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJMaWdodExpbmsgUGVnYXN1cyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wZWdhc3VzLmxpZ2h0bGluay5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGlnaHRsaW5rUGhvZW5peC5qcwogIHZhciBsaWdodGxpbmtQaG9lbml4ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxODkwLAogICAgbmFtZTogIkxpZ2h0TGluayBQaG9lbml4IE1haW5uZXQiLAogICAgbmV0d29yazogImxpZ2h0bGluay1waG9lbml4IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9yZXBsaWNhdG9yLnBob2VuaXgubGlnaHRsaW5rLmlvL3JwYy92MSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkxpZ2h0TGluayBQaG9lbml4IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Bob2VuaXgubGlnaHRsaW5rLmlvIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGluZWEuanMKICB2YXIgbGluZWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU5MTQ0LAogICAgbmFtZTogIkxpbmVhIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkxpbmVhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmxpbmVhLmJ1aWxkIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5saW5lYS5idWlsZCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV0aGVyc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9saW5lYXNjYW4uYnVpbGQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmxpbmVhc2Nhbi5idWlsZC9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2xpbmVhR29lcmxpLmpzCiAgdmFyIGxpbmVhR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTE0MCwKICAgIG5hbWU6ICJMaW5lYSBHb2VybGkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTGluZWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ29lcmxpLmxpbmVhLmJ1aWxkIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5nb2VybGkubGluZWEuYnVpbGQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLmxpbmVhc2Nhbi5idWlsZCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktZ29lcmxpLmxpbmVhc2Nhbi5idWlsZC9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDk4NjIzCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2xpbmVhU2Vwb2xpYS5qcwogIHZhciBsaW5lYVNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU5MTQxLAogICAgbmFtZTogIkxpbmVhIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTGluZWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc2Vwb2xpYS5saW5lYS5idWlsZCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuc2Vwb2xpYS5saW5lYS5idWlsZCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV0aGVyc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZXBvbGlhLmxpbmVhc2Nhbi5idWlsZCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5saW5lYXNjYW4uYnVpbGQvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDIyNzQyNwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9saW5lYVRlc3RuZXQuanMKICB2YXIgbGluZWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTE0MCwKICAgIG5hbWU6ICJMaW5lYSBHb2VybGkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTGluZWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ29lcmxpLmxpbmVhLmJ1aWxkIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5nb2VybGkubGluZWEuYnVpbGQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLmxpbmVhc2Nhbi5idWlsZCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGkubGluZWFzY2FuLmJ1aWxkL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0OTg2MjMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGlzay5qcwogIHZhciBsaXNrID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAxMTM1LAogICAgbmFtZTogIkxpc2siLAogICAgbmV0d29yazogImxpc2siLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5hcGkubGlzay5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL2Jsb2Nrc2NvdXQubGlzay5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5saXNrLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweEE5ZDcxRTFkZDdjYTI2RjI2ZTY1NkU2NmQ2QUE4MWVkN2Y3NDViZjAiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGlza1NlcG9saWEuanMKICB2YXIgc291cmNlSWQxNiA9IDExMTU1MTExOwogIHZhciBsaXNrU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogNDIwMiwKICAgIG5ldHdvcms6ICJsaXNrLXNlcG9saWEiLAogICAgbmFtZTogIkxpc2sgU2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2Vwb2xpYSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zZXBvbGlhLWFwaS5saXNrLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS1ibG9ja3Njb3V0Lmxpc2suY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NlcG9saWEtYmxvY2tzY291dC5saXNrLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQxNl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEEwRTM1RjU2QzMxOERFMWJENUQ5Y2E2QTk0RmU3ZTM3QzU2NjMzNDgiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTZdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhlM2Q5MEYyMTQ5MDY4NkVjN2VGMzdCRTc4OEUwMmRmQzEyNzg3MjY0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDE2XTogewogICAgICAgICAgYWRkcmVzczogIjB4MUZiMzBlNDQ2ZUE3OTFjZDFmMDExNjc1RTVGM2Y1MzExYjcwZmFGNSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTYKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbG9jYWxob3N0LmpzCiAgdmFyIGxvY2FsaG9zdCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTMzNywKICAgIG5hbWU6ICJMb2NhbGhvc3QiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cDovLzEyNy4wLjAuMTo4NTQ1Il0gfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9sdWtzby5qcwogIHZhciBsdWtzbyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDIsCiAgICBuZXR3b3JrOiAibHVrc28iLAogICAgbmFtZTogIkxVS1NPIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJMVUtTTyIsCiAgICAgIHN5bWJvbDogIkxZWCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMubWFpbm5ldC5sdWtzby5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLXJwYy5tYWlubmV0Lmx1a3NvLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJMVUtTTyBNYWlubmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmV4ZWN1dGlvbi5tYWlubmV0Lmx1a3NvLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmV4cGxvcmVyLmV4ZWN1dGlvbi5tYWlubmV0Lmx1a3NvLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ2ODE4MwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2x1a3NvVGVzdG5ldC5qcwogIHZhciBsdWtzb1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyMDEsCiAgICBuYW1lOiAiTFVLU08gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJMVUtTTyBUZXN0bmV0IiwKICAgICAgc3ltYm9sOiAiTFlYdCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQubHVrc28ubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly93cy1ycGMudGVzdG5ldC5sdWtzby5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTFVLU08gVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5leGVjdXRpb24udGVzdG5ldC5sdWtzby5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5leHBsb3Jlci5leGVjdXRpb24udGVzdG5ldC5sdWtzby5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA2MDUzNDgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbHljYW4uanMKICB2YXIgbHljYW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDcyMSwKICAgIG5hbWU6ICJMeWNhbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJMeWNhbiIsCiAgICAgIHN5bWJvbDogIkxZQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbCiAgICAgICAgICAiaHR0cHM6Ly9ycGMubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgImh0dHBzOi8vdXMtZWFzdC5seWNhbmNoYWluLmNvbSIsCiAgICAgICAgICAiaHR0cHM6Ly91cy13ZXN0Lmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJodHRwczovL2V1LW5vcnRoLmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJodHRwczovL2V1LXdlc3QubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgImh0dHBzOi8vYXNpYS1zb3V0aGVhc3QubHljYW5jaGFpbi5jb20iCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsKICAgICAgICAgICJ3c3M6Ly9ycGMubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgIndzczovL3VzLWVhc3QubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgIndzczovL3VzLXdlc3QubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgIndzczovL2V1LW5vcnRoLmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJ3c3M6Ly9ldS13ZXN0Lmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJ3c3M6Ly9hc2lhLXNvdXRoZWFzdC5seWNhbmNoYWluLmNvbSIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkx5Y2FuIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmx5Y2FuY2hhaW4uY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2x5cmEuanMKICB2YXIgbHlyYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogOTU3LAogICAgbmFtZTogIkx5cmEgQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmx5cmEuZmluYW5jZSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkx5cmEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIubHlyYS5maW5hbmNlIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmx5cmEuZmluYW5jZS9hcGkvdjIiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTkzNTE5OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21haW5uZXQuanMKICB2YXIgbWFpbm5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMSwKICAgIG5hbWU6ICJFdGhlcmV1bSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9jbG91ZGZsYXJlLWV0aC5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZXRoZXJzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5ldGhlcnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIGVuc1JlZ2lzdHJ5OiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIKICAgICAgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjZTAxZjhlZWU3RTQ3OUM5MjhGODkxOWFiRDUzRTU1M2EzNkNlRjY3IiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MjU4MjEzCiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE0MzUzNjAxCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWFuZGFsYS5qcwogIHZhciBtYW5kYWxhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTUsCiAgICBuYW1lOiAiTWFuZGFsYSBUQzkiLAogICAgbmV0d29yazogIm1hbmRhbGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIk1hbmRhbGEiLAogICAgICBzeW1ib2w6ICJtQUNBIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZXRoLXJwYy10YzkuYWNhLXN0YWdpbmcubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ldGgtcnBjLXRjOS5hY2Etc3RhZ2luZy5uZXR3b3JrIl0KICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldGgtcnBjLXRjOS5hY2Etc3RhZ2luZy5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2V0aC1ycGMtdGM5LmFjYS1zdGFnaW5nLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNYW5kYWxhIEJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5tYW5kYWxhLmFjYS1zdGFnaW5nLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5tYW5kYWxhLmFjYS1zdGFnaW5nLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tYW50YS5qcwogIHZhciBtYW50YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY5LAogICAgbmFtZTogIk1hbnRhIFBhY2lmaWMgTWFpbm5ldCIsCiAgICBuZXR3b3JrOiAibWFudGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRVRIIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcGFjaWZpYy1ycGMubWFudGEubmV0d29yay9odHRwIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFudGEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGFjaWZpYy1leHBsb3Jlci5tYW50YS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3BhY2lmaWMtZXhwbG9yZXIubWFudGEubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzMyODkwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWFudGFTZXBvbGlhVGVzdG5ldC5qcwogIHZhciBtYW50YVNlcG9saWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNDQxMDA2LAogICAgbmFtZTogIk1hbnRhIFBhY2lmaWMgU2Vwb2xpYSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJtYW50YS1zZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUSCIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcGFjaWZpYy1ycGMuc2Vwb2xpYS10ZXN0bmV0Lm1hbnRhLm5ldHdvcmsvaHR0cCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1hbnRhIFNlcG9saWEgVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wYWNpZmljLWV4cGxvcmVyLnNlcG9saWEtdGVzdG5ldC5tYW50YS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3BhY2lmaWMtZXhwbG9yZXIuc2Vwb2xpYS10ZXN0bmV0Lm1hbnRhLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTU0OTE4ZjdCNTI1QzhkZjg5NDY2ODg0NjUwNjc2NzQxMmI1M0UzIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ3OTU4NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tYW50YVRlc3RuZXQuanMKICB2YXIgbWFudGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNDQxMDA1LAogICAgbmFtZTogIk1hbnRhIFBhY2lmaWMgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAibWFudGEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFVEgiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9tYW50YS10ZXN0bmV0LmNhbGRlcmFjaGFpbi54eXovaHR0cCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1hbnRhIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGFjaWZpYy1leHBsb3Jlci50ZXN0bmV0Lm1hbnRhLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vcGFjaWZpYy1leHBsb3Jlci50ZXN0bmV0Lm1hbnRhLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHgyMTFCMTY0M2I5NUZlNzZmMTFlRDg4ODBFRTgxMEFCRDlBNGNmNTZDIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQxOTkxNQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tYW50bGUuanMKICB2YXIgbWFudGxlID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1ZTMsCiAgICBuYW1lOiAiTWFudGxlIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1OVCIsCiAgICAgIHN5bWJvbDogIk1OVCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5tYW50bGUueHl6Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFudGxlIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL21hbnRsZXNjYW4ueHl6LyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkubWFudGxlc2Nhbi54eXovYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwNDcxNwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21hbnRsZVNlcG9saWFUZXN0bmV0LmpzCiAgdmFyIG1hbnRsZVNlcG9saWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1MDAzLAogICAgbmFtZTogIk1hbnRsZSBTZXBvbGlhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTU5UIiwKICAgICAgc3ltYm9sOiAiTU5UIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcnBjLnNlcG9saWEubWFudGxlLnh5eiJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1hbnRsZSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnNlcG9saWEubWFudGxlLnh5ei8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuc2Vwb2xpYS5tYW50bGUueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0NTg0MDEyCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21hbnRsZVRlc3RuZXQuanMKICB2YXIgbWFudGxlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTAwMSwKICAgIG5hbWU6ICJNYW50bGUgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJNTlQiLAogICAgICBzeW1ib2w6ICJNTlQiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVzdG5ldC5tYW50bGUueHl6Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFudGxlIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5tYW50bGUueHl6IiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQubWFudGxlLnh5ei9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTYxMzMzCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21lcmxpbi5qcwogIHZhciBtZXJsaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyMDAsCiAgICBuYW1lOiAiTWVybGluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCVEMiLAogICAgICBzeW1ib2w6ICJCVEMiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5tZXJsaW5jaGFpbi5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5tZXJsaW5jaGFpbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLm1lcmxpbmNoYWluLmlvL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tZXRhY2hhaW4uanMKICB2YXIgbWV0YWNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1NzEsCiAgICBuYW1lOiAiTWV0YUNoYWluIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk1ldGF0aW1lIENvaW4iLCBzeW1ib2w6ICJNVEMiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMubWV0YXRpbWUuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWV0YUV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLm1ldGF0aW1lLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWV0YWNoYWluSXN0YW5idWwuanMKICB2YXIgbWV0YWNoYWluSXN0YW5idWwgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0NTMsCiAgICBuYW1lOiAiTWV0YUNoYWluIElzdGFuYnVsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJNZXRhdGltZSBDb2luIiwgc3ltYm9sOiAiTVRDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vaXN0YW5idWwtcnBjLm1ldGFjaGFpbi5kZXYiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNZXRhRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vaXN0YW5idWwtZXhwbG9yZXIubWV0YWNoYWluLmRldiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGFsTDIuanMKICB2YXIgc291cmNlSWQxNyA9IDE7CiAgdmFyIG1ldGFsTDIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDE3NTAsCiAgICBuYW1lOiAiTWV0YWwgTDIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5tZXRhbGwyLmNvbSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMubWV0YWxsMi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5tZXRhbGwyLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5tZXRhbGwyLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQxN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDNCMUY3YURhMEZjYzI2QjEzNTE1YWY3NTJEZDA3ZkIxQ0FjMTE0MjYiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDE3XTogewogICAgICAgICAgYWRkcmVzczogIjB4M0YzN2FCZEUyQzZiNUIyZWQ2RjgwNDU3ODdEZjFFRDFFMzc1Mzk1NiIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQxN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDZkMGY2NUQ1OWI1NUIwRkVDNWQyZDE1MzY1MTU0RGNBREMxNDBCRjMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTcKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWV0ZXIuanMKICB2YXIgbWV0ZXIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgyLAogICAgbmFtZTogIk1ldGVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1UUiIsCiAgICAgIHN5bWJvbDogIk1UUiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5tZXRlci5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1ldGVyU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLm1ldGVyLmlvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGVyVGVzdG5ldC5qcwogIHZhciBtZXRlclRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgzLAogICAgbmFtZTogIk1ldGVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTVRSIiwKICAgICAgc3ltYm9sOiAiTVRSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcnBjdGVzdC5tZXRlci5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1ldGVyVGVzdG5ldFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi13YXJyaW5nc3Rha2VzLm1ldGVyLmlvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGlzLmpzCiAgdmFyIG1ldGlzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDg4LAogICAgbmFtZTogIk1ldGlzIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1ldGlzIiwKICAgICAgc3ltYm9sOiAiTUVUSVMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hbmRyb21lZGEubWV0aXMuaW8vP293bmVyPTEwODgiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNZXRpcyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5tZXRpcy5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkucm91dGVzY2FuLmlvL3YyL25ldHdvcmsvbWFpbm5ldC9ldm0vNDMxMTQvZXRoZXJzY2FuL2FwaSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJBbmRyb21lZGEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYW5kcm9tZWRhLWV4cGxvcmVyLm1ldGlzLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FuZHJvbWVkYS1leHBsb3Jlci5tZXRpcy5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjMzODU1MgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGlzR29lcmxpLmpzCiAgdmFyIG1ldGlzR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTksCiAgICBuYW1lOiAiTWV0aXMgR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1ldGlzIEdvZXJsaSIsCiAgICAgIHN5bWJvbDogIk1FVElTIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZ29lcmxpLmdhdGV3YXkubWV0aXNkZXZvcHMubGluayJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1ldGlzIEdvZXJsaSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9nb2VybGkuZXhwbG9yZXIubWV0aXNkZXZvcHMubGluayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGkuZXhwbG9yZXIubWV0aXNkZXZvcHMubGluay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTAwNjIwNwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldi5qcwogIHZhciBtZXYgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDc1MTgsCiAgICBuYW1lOiAiTUVWZXJzZSBDaGFpbiBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1FVmVyc2UiLAogICAgICBzeW1ib2w6ICJNRVYiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5tZXZlcnNlbWFpbm5ldC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3d3dy5tZXZlcnNlc2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA4Njg4MTM0MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldlRlc3RuZXQuanMKICB2YXIgbWV2VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDc1OSwKICAgIG5hbWU6ICJNRVZlcnNlIENoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTUVWZXJzZSIsCiAgICAgIHN5bWJvbDogIk1FViIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLm1ldmVyc2V0ZXN0bmV0LmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5tZXZlcnNlc2Nhbi5pby8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjQzNzExMTUKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWludFNlcG9saWFUZXN0bmV0LmpzCiAgdmFyIG1pbnRTZXBvbGlhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY4NiwKICAgIG5hbWU6ICJNaW50IFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LXJwYy5taW50Y2hhaW4uaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNaW50Y2hhaW4gVGVzdG5ldCBleHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLm1pbnRjaGFpbi5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9kZS5qcwogIHZhciBzb3VyY2VJZDE4ID0gMTsKICB2YXIgbW9kZSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzQ0NDMsCiAgICBuYW1lOiAiTW9kZSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQubW9kZS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTW9kZXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vbW9kZXNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjQ2NTg4MgogICAgICB9LAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDE4XTogewogICAgICAgICAgYWRkcmVzczogIjB4NDMxN2JhMTQ2RDQ5MzNEODg5NTE4YTNlNUUxMUZlN2E1MzE5OWIwNCIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDE4XTogewogICAgICAgICAgYWRkcmVzczogIjB4OEIzNGIxNGM3YzcxMjM0NTlDZjMwNzZiOENiOTI5QkUwOTdkMEMwNyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQxOF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDczNWFEQmJFNzIyMjZCRDUyZTgxOEU3MTgxOTUzZjQyRTNiMEZGMjEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTgKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9kZVRlc3RuZXQuanMKICB2YXIgc291cmNlSWQxOSA9IDExMTU1MTExOwogIHZhciBtb2RlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogOTE5LAogICAgbmFtZTogIk1vZGUgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLm1vZGUubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5leHBsb3Jlci5tb2RlLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2Vwb2xpYS5leHBsb3Jlci5tb2RlLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMTldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgyNjM0QkQ2NWJhMjdBQjYzODExYzc0QTYzMTE4QUNiMzEyNzAxQmZhIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzc3ODM5MwogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgzMjBlMTU4MGVmZkYzN0UwMDhGMUM5MjcwMGQxZUJhNDdjMUIyM2ZEIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzc3ODM5NQogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDE5XTogewogICAgICAgICAgYWRkcmVzczogIjB4YkM1QzY3OTg3OUIyOTY1Mjk2NzU2Q0Q5NTlDM0M3Mzk3Njk5OTVFMiIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDM3NzgzOTIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhCQWJhODM3MzExM0ZiN2E2OGYxOTVkZUYxODczMmUwMWFGOGVEZkNGIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwMTkwMDcKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBzb3VyY2VJZDogc291cmNlSWQxOQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tb29uYmFzZUFscGhhLmpzCiAgdmFyIG1vb25iYXNlQWxwaGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODcsCiAgICBuYW1lOiAiTW9vbmJhc2UgQWxwaGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiREVWIiwKICAgICAgc3ltYm9sOiAiREVWIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuYXBpLm1vb25iYXNlLm1vb25iZWFtLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3NzLmFwaS5tb29uYmFzZS5tb29uYmVhbS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTW9vbnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vbW9vbmJhc2UubW9vbnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vbW9vbmJhc2UubW9vbnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE4NTA2ODYKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9vbmJlYW0uanMKICB2YXIgbW9vbmJlYW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODQsCiAgICBuYW1lOiAiTW9vbmJlYW0iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiR0xNUiIsCiAgICAgIHN5bWJvbDogIkdMTVIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21vb25iZWFtLnB1YmxpYy5ibGFzdGFwaS5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9tb29uYmVhbS5wdWJsaWMuYmxhc3RhcGkuaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNb29uc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9tb29uc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktbW9vbmJlYW0ubW9vbnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDYwOTAwMgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9vbmJlYW1EZXYuanMKICB2YXIgbW9vbmJlYW1EZXYgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODEsCiAgICBuYW1lOiAiTW9vbmJlYW0gRGV2ZWxvcG1lbnQgTm9kZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJERVYiLAogICAgICBzeW1ib2w6ICJERVYiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwOi8vMTI3LjAuMC4xOjk5NDQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vMTI3LjAuMC4xOjk5NDQiXQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21vb25yaXZlci5qcwogIHZhciBtb29ucml2ZXIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODUsCiAgICBuYW1lOiAiTW9vbnJpdmVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1PVlIiLAogICAgICBzeW1ib2w6ICJNT1ZSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tb29ucml2ZXIucHVibGljLmJsYXN0YXBpLmlvIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21vb25yaXZlci5wdWJsaWMuYmxhc3RhcGkuaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNb29uc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9tb29ucml2ZXIubW9vbnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLW1vb25yaXZlci5tb29uc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTU5NzkwNAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9ycGhIb2xlc2t5LmpzCiAgdmFyIG1vcnBoSG9sZXNreSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjgxMCwKICAgIG5hbWU6ICJNb3JwaCBIb2xlc2t5IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1xdWlja25vZGUtaG9sZXNreS5tb3JwaGwyLmlvIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy1xdWlja25vZGUtaG9sZXNreS5tb3JwaGwyLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTW9ycGggSG9sZXNreSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci1ob2xlc2t5Lm1vcnBobDIuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXItYXBpLWhvbGVza3kubW9ycGhsMi5pby9hcGk/IgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tb3JwaFNlcG9saWEuanMKICB2YXIgbW9ycGhTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNzEwLAogICAgbmFtZTogIk1vcnBoIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQubW9ycGhsMi5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1vcnBoIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXItdGVzdG5ldC5tb3JwaGwyLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLWFwaS10ZXN0bmV0Lm1vcnBobDIuaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9uYXV0aWx1cy5qcwogIHZhciBuYXV0aWx1cyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjIyMjIsCiAgICBuYW1lOiAiTmF1dGlsdXMgTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiWkJDIiwgc3ltYm9sOiAiWkJDIiwgZGVjaW1hbHM6IDkgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcGkubmF1dGlsdXMubmF1dGNoYWluLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk5hdXRTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL25hdXRzY2FuLmNvbSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9uZW9uRGV2bmV0LmpzCiAgdmFyIG5lb25EZXZuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI0NTAyMjkyNiwKICAgIG5hbWU6ICJOZW9uIEVWTSBEZXZOZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk5FT04iLCBzeW1ib2w6ICJORU9OIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZGV2bmV0Lm5lb25ldm0ub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTmVvbnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZGV2bmV0Lm5lb25zY2FuLm9yZyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMDUyMDYxMTIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbmVvbk1haW5uZXQuanMKICB2YXIgbmVvbk1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI0NTAyMjkzNCwKICAgIG5ldHdvcms6ICJuZW9uTWFpbm5ldCIsCiAgICBuYW1lOiAiTmVvbiBFVk0gTWFpbk5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTkVPTiIsIHN5bWJvbDogIk5FT04iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9uZW9uLXByb3h5LW1haW5uZXQuc29sYW5hLnAycC5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJOZW9uc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9uZW9uc2Nhbi5vcmciCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjA2NTQ1NTI0CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9uZXhpLmpzCiAgdmFyIG5leGkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyNDIsCiAgICBuYW1lOiAiTmV4aSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTmV4aSIsIHN5bWJvbDogIk5FWEkiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuY2hhaW4ubmV4aS50ZWNobm9sb2d5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTmV4aVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3Lm5leGlzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly93d3cubmV4aXNjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDI3N0E0NkNjNjlBNTdlRTNBNkM4YzE1OGJBODc0ODMyRjcxOEI4RSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNTc3MDE2MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL25leGlsaXguanMKICB2YXIgbmV4aWxpeCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjQwLAogICAgbmFtZTogIk5leGlsaXggU21hcnQgQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTmV4aWxpeCIsCiAgICAgIHN5bWJvbDogIk5FWElMSVgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGN1cmwucG9zLm5leGlsaXguY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTmV4aWxpeFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5uZXhpbGl4LmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4NTgzODFjOGUyQkY5ZDBDMkM0MjU5Y0ExNEJkQTlBZmUwMjgzMTI0NCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3NDQ0OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL29hc3lzLmpzCiAgdmFyIG9hc3lzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNDgsCiAgICBuYW1lOiAiT2FzeXMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk9hc3lzIiwgc3ltYm9sOiAiT0FTIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLm1haW5uZXQub2FzeXMuZ2FtZXMiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJPYXN5c1NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5vYXN5cy5nYW1lcyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLm9hc3lzLmdhbWVzL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9vYXNpc1Rlc3RuZXQuanMKICB2YXIgb2FzaXNUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MDkwLAogICAgbmV0d29yazogIm9hc2lzLXRlc3RuZXQiLAogICAgbmFtZTogIk9hc2lzIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkZhc3R0b2tlbiIsIHN5bWJvbDogIkZUTiIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMxLm9hc2lzLmJhaGFtdXRjaGFpbi5jb20iXSB9LAogICAgICBwdWJsaWM6IHsgaHR0cDogWyJodHRwczovL3JwYzEub2FzaXMuYmFoYW11dGNoYWluLmNvbSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkZ0bnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vb2FzaXMuZnRuc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vb2FzaXMuZnRuc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9va2MuanMKICB2YXIgb2tjID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2NiwKICAgIG5hbWU6ICJPS0MiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiT0tUIiwKICAgICAgc3ltYm9sOiAiT0tUIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZXhjaGFpbnJwYy5va2V4Lm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIm9rbGluayIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cub2tsaW5rLmNvbS9va2MiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTAzNjQ3OTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9vcHRpbWlzbS5qcwogIHZhciBzb3VyY2VJZDIwID0gMTsKICB2YXIgb3B0aW1pc20gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDEwLAogICAgbmFtZTogIk9QIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5vcHRpbWlzbS5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk9wdGltaXNtIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL29wdGltaXN0aWMuZXRoZXJzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1vcHRpbWlzdGljLmV0aGVyc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgZGlzcHV0ZUdhbWVGYWN0b3J5OiB7CiAgICAgICAgW3NvdXJjZUlkMjBdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhlNTk2NUFiNTk2MmVEYzc0NzdDODUyMDI0M0E5NTUxN0NEMjUyZkE5IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQyMF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweGRmZTk3ODY4MjMzZDFhYTIyZTgxNWEyNjY5ODJmMmNmMTc2ODVhMjciCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0Mjg2MjYzCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDIwXTogewogICAgICAgICAgYWRkcmVzczogIjB4YkViNUZjNTc5MTE1MDcxNzY0Yzc0MjNBNGYxMmVEZGU0MWYxMDZFZCIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyMF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDk5QzlmYzQ2ZjkyRThhMWMwZGVDMWIxNzQ3ZDAxMDkwM0U4ODRiRTEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMjAKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvb3B0aW1pc21Hb2VybGkuanMKICB2YXIgc291cmNlSWQyMSA9IDU7CiAgdmFyIG9wdGltaXNtR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiA0MjAsCiAgICBuYW1lOiAiT3B0aW1pc20gR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJHb2VybGkgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9nb2VybGkub3B0aW1pc20uaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLW9wdGltaXNtLmV0aGVyc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGktb3B0aW1pc20uZXRoZXJzY2FuLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICAuLi5jaGFpbkNvbmZpZzIuY29udHJhY3RzLAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDIxXTogewogICAgICAgICAgYWRkcmVzczogIjB4RTZEZmJhMDk1MzYxNkJhY2FiMGM5QThlY2IzYTlCQmE3N0ZDMTVjMCIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NDYxCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDIxXTogewogICAgICAgICAgYWRkcmVzczogIjB4NWI0N0UxQTA4RWE2ZDk4NUQ2NjQ5MzAwNTg0ZTY3MjJFYzRCMTM4MyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyMV06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDYzNkFmMTZiZjJmNjgyZEQzMTA5ZTYwMTAyYjhFMUEwODlGZWRBYTgiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDIxCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL29wdGltaXNtU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDIyID0gMTExNTUxMTE7CiAgdmFyIG9wdGltaXNtU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogMTExNTU0MjAsCiAgICBuYW1lOiAiT1AgU2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2Vwb2xpYSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEub3B0aW1pc20uaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL29wdGltaXNtLXNlcG9saWEuYmxvY2tzY291dC5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vb3B0aW1pc20tc2Vwb2xpYS5ibG9ja3Njb3V0LmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgZGlzcHV0ZUdhbWVGYWN0b3J5OiB7CiAgICAgICAgW3NvdXJjZUlkMjJdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgwNUY5NjEzYURCMzAwMjZGRmQ2MzRmMzhlNUM0ZEZkMzBhMTk3RmExIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQyMl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDkwRTljNGY4YTk5NGEyNTBGNmFFZmQ2MUNBRmI0RjJlODk1RDQ1OEYiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNjIwMjA0CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDIyXTogewogICAgICAgICAgYWRkcmVzczogIjB4MTZGYzUwNThGMjU2NDgxOTQ0NzE5MzlkZjc1Q0YyN0EyZmRDNDhCQyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyMl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEZCYjA2MjFFMEIyM2I1NDc4QjYzMEJENTVhNWYyMWY2NzczMEIwRjEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDIyCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL29wQk5CLmpzCiAgdmFyIG9wQk5CID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDQsCiAgICBuYW1lOiAib3BCTkIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkJOQiIsCiAgICAgIHN5bWJvbDogIkJOQiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vb3BibmItbWFpbm5ldC1ycGMuYm5iY2hhaW4ub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAib3BibmJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL21haW5uZXQub3BibmJzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA1MTI4ODEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9vcEJOQlRlc3RuZXQuanMKICB2YXIgb3BCTkJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1NjExLAogICAgbmFtZTogIm9wQk5CIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAidEJOQiIsCiAgICAgIHN5bWJvbDogInRCTkIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9vcGJuYi10ZXN0bmV0LXJwYy5ibmJjaGFpbi5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJvcGJuYnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5vcGJuYnNjYW4uY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDM3MDUxMDgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvb29ydG1haW5uZXREZXYuanMKICB2YXIgb29ydE1haW5uZXREZXYgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDk3MDAsCiAgICBuYW1lOiAiT09SVCBNYWlubmV0RGV2IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk9PUlQiLAogICAgICBzeW1ib2w6ICJPT1JUIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZGV2LXJwYy5vb3J0ZWNoLmNvbSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBvb3J0OiB7CiAgICAgICAgbmFtZTogIk9PUlQgTWFpbm5ldERldiBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9kZXYtc2Nhbi5vb3J0ZWNoLmNvbSIKICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJPT1JUIE1haW5uZXREZXYgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZGV2LXNjYW4ub29ydGVjaC5jb20iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvb3RpbURldm5ldC5qcwogIHZhciBvdGltRGV2bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MTE0NDExNCwKICAgIG5hbWU6ICJPdGltIERldm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFVEgiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwOi8vZGV2bmV0Lm90aW0ueHl6Il0KICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBiYXRjaEludm9rZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHg1RmJEQjIzMTU2NzhhZmVjYjM2N2YwMzJkOTNGNjQyZjY0MTgwYWEzIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BhbG0uanMKICB2YXIgcGFsbSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTEyOTcxMDgxMDksCiAgICBuYW1lOiAiUGFsbSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJQQUxNIiwKICAgICAgc3ltYm9sOiAiUEFMTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcGFsbS1tYWlubmV0LnB1YmxpYy5ibGFzdGFwaS5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9wYWxtLW1haW5uZXQucHVibGljLmJsYXN0YXBpLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ2hhaW5sZW5zIiwKICAgICAgICB1cmw6ICJodHRwczovL3BhbG0uY2hhaW5sZW5zLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNTQyOTI0OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BhbG1UZXN0bmV0LmpzCiAgdmFyIHBhbG1UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMTI5NzEwODA5OSwKICAgIG5hbWU6ICJQYWxtIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiUEFMTSIsCiAgICAgIHN5bWJvbDogIlBBTE0iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3BhbG0tbWFpbm5ldC5wdWJsaWMuYmxhc3RhcGkuaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcGFsbS1tYWlubmV0LnB1YmxpYy5ibGFzdGFwaS5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNoYWlubGVucyIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wYWxtLmNoYWlubGVucy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTU0MjkyNDgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcGxheWZpQWxiaXJlby5qcwogIHZhciBwbGF5ZmlBbGJpcmVvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnLAogICAgaWQ6IDE2MTIxMjcsCiAgICBuYW1lOiAiUGxheUZpIEFsYmlyZW8gVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiYWxiaXJlbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hbGJpcmVvLXJwYy5wbGF5ZmkuYWkiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vYWxiaXJlby1ycGMtd3MucGxheWZpLmFpL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUGxheUZpIEFsYmlyZW8gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYWxiaXJlby1leHBsb3Jlci5wbGF5ZmkuYWkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweEY5Y2RhNjI0RkJDN2UwNTkzNTVjZTk4YTMxNjkzZDI5OUZBQ2Q5NjMiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3Bnbi5qcwogIHZhciBzb3VyY2VJZDIzID0gMTsKICB2YXIgcGduID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MjQsCiAgICBuZXR3b3JrOiAicGduIiwKICAgIG5hbWU6ICJQR04iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnB1YmxpY2dvb2RzLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQR04gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucHVibGljZ29vZHMubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJQR04gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucHVibGljZ29vZHMubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDIzXTogewogICAgICAgICAgYWRkcmVzczogIjB4OUU2MjA0Rjc1MGNEODY2YjI5OTU5NGUyYUM5ZUE4MjRFMmU1Zjk1YyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMzODAyMDkKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMjNdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhiMjZGZDk4NWM1OTU5YkJCMzgyQkFGZEQwYjg3OUUxNDllNDgxMTZjIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDIzXTogewogICAgICAgICAgYWRkcmVzczogIjB4RDAyMDRCOTUyN0MxYkE3YkQ3NjVGYTVDQ0Q5MzU1ZDM4MzM4MjcyYiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBmb3JtYXR0ZXJzOiBmb3JtYXR0ZXJzMiwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDIzCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BnblRlc3RuZXQuanMKICB2YXIgc291cmNlSWQyNCA9IDExMTU1MTExOwogIHZhciBwZ25UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1ODAwOCwKICAgIG5ldHdvcms6ICJwZ24tdGVzdG5ldCIsCiAgICBuYW1lOiAiUEdOICIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLnB1YmxpY2dvb2RzLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQR04gVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5zZXBvbGlhLnB1YmxpY2dvb2RzLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuc2Vwb2xpYS5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJQR04gVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5zZXBvbGlhLnB1YmxpY2dvb2RzLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuc2Vwb2xpYS5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDI0XTogewogICAgICAgICAgYWRkcmVzczogIjB4RDViQWMzMTUyZmZDMjUzMThGODQ4QjNERDVkQTZDODUxNzFCYUVFZSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDI0XTogewogICAgICAgICAgYWRkcmVzczogIjB4RjA0QmRENTM1M0JiMEVGRjZDQTYwQ2ZjQzc4NTk0Mjc4ZUJmRTE3OSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyNF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEZhRTZhYkNBRjMwRDIzZTIzM0FDN2ZhRjc0N0YyZkMzYTVhNkJmYTMiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAzNzU0OTI1CiAgICAgIH0KICAgIH0sCiAgICBmb3JtYXR0ZXJzOiBmb3JtYXR0ZXJzMiwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDI0LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9waG9lbml4LmpzCiAgdmFyIHBob2VuaXggPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMzgxLAogICAgbmFtZTogIlBob2VuaXggQmxvY2tjaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiUGhvZW5peCIsIHN5bWJvbDogIlBIWCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5waG9lbml4cGxvcmVyLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlBob2VuaXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGhvZW5peHBsb3Jlci5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vcGhvZW5peHBsb3Jlci5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg0OThjRjc1N2E1NzVjRkYyYzJFZDlmNTMyZjU2RWZhNzk3Zjg2NDQyIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDU2MjAxOTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wbGluZ2EuanMKICB2YXIgcGxpbmdhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNDIsCiAgICBuYW1lOiAiUGxpbmdhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJQbGluZ2EiLCBzeW1ib2w6ICJQTElOR0EiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGN1cmwubWFpbm5ldC5wbGdjaGFpbi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQbGdzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3d3dy5wbGdzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDk4OTU3NjE2MGYyZTcwOTI5MDhCQjk0Nzk2MzFiOTAxMDYwYjZlNCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMDQ0ODkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wbHVtZVRlc3RuZXQuanMKICB2YXIgc291cmNlSWQyNSA9IDExMTU1MTExOwogIHZhciBwbHVtZVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE2MTIyMTEzNSwKICAgIG5hbWU6ICJQbHVtZSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJQbHVtZSBTZXBvbGlhIEV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQtcnBjLnBsdW1lbmV0d29yay54eXovaHR0cCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly90ZXN0bmV0LXJwYy5wbHVtZW5ldHdvcmsueHl6L3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLnBsdW1lbmV0d29yay54eXoiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC1leHBsb3Jlci5wbHVtZW5ldHdvcmsueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBzb3VyY2VJZDogc291cmNlSWQyNQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wb2x5Z29uLmpzCiAgdmFyIHBvbHlnb24gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzNywKICAgIG5hbWU6ICJQb2x5Z29uIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJNQVRJQyIsIHN5bWJvbDogIk1BVElDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcG9seWdvbi1ycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vcG9seWdvbnNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI1NzcwMTYwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcG9seWdvbkFtb3kuanMKICB2YXIgcG9seWdvbkFtb3kgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwMDAyLAogICAgbmFtZTogIlBvbHlnb24gQW1veSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTUFUSUMiLCBzeW1ib2w6ICJNQVRJQyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1hbW95LnBvbHlnb24udGVjaG5vbG9neSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlBvbHlnb25TY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2Ftb3kucG9seWdvbnNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1hbW95LnBvbHlnb25zY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzEyNzM4OAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wb2x5Z29uTXVtYmFpLmpzCiAgdmFyIHBvbHlnb25NdW1iYWkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwMDAxLAogICAgbmFtZTogIlBvbHlnb24gTXVtYmFpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJNQVRJQyIsIHN5bWJvbDogIk1BVElDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmFua3IuY29tL3BvbHlnb25fbXVtYmFpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vbXVtYmFpLnBvbHlnb25zY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktdGVzdG5ldC5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI1NzcwMTYwCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BvbHlnb25aa0V2bS5qcwogIHZhciBwb2x5Z29uWmtFdm0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMDEsCiAgICBuYW1lOiAiUG9seWdvbiB6a0VWTSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly96a2V2bS1ycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vemtldm0ucG9seWdvbnNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS16a2V2bS5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDU3NzQ2CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcG9seWdvblprRXZtQ2FyZG9uYS5qcwogIHZhciBwb2x5Z29uWmtFdm1DYXJkb25hID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNDQyLAogICAgbmFtZTogIlBvbHlnb24gemtFVk0gQ2FyZG9uYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuY2FyZG9uYS56a2V2bS1ycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vY2FyZG9uYS16a2V2bS5wb2x5Z29uc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vY2FyZG9uYS16a2V2bS5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTQwOTEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wb2x5Z29uWmtFdm1UZXN0bmV0LmpzCiAgdmFyIHBvbHlnb25aa0V2bVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0NDIsCiAgICBuYW1lOiAiUG9seWdvbiB6a0VWTSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5wdWJsaWMuemtldm0tdGVzdC5uZXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQb2x5Z29uU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LXprZXZtLnBvbHlnb25zY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LXprZXZtLnBvbHlnb25zY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDUyNTY4NgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3B1bHNlY2hhaW4uanMKICB2YXIgcHVsc2VjaGFpbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzY5LAogICAgbmFtZTogIlB1bHNlQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlB1bHNlIiwgc3ltYm9sOiAiUExTIiwgZGVjaW1hbHM6IDE4IH0sCiAgICB0ZXN0bmV0OiBmYWxzZSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMucHVsc2VjaGFpbi5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3MucHVsc2VjaGFpbi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQdWxzZVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5wdWxzZWNoYWluLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkuc2Nhbi5wdWxzZWNoYWluLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgZW5zUmVnaXN0cnk6IHsKICAgICAgICBhZGRyZXNzOiAiMHgwMDAwMDAwMDAwMEMyRTA3NGVDNjlBMGRGYjI5OTdCQTZDN2QyZTFlIgogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDM1MzYwMQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3B1bHNlY2hhaW5WNC5qcwogIHZhciBwdWxzZWNoYWluVjQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDk0MywKICAgIG5hbWU6ICJQdWxzZUNoYWluIFY0IiwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiVjQgUHVsc2UiLCBzeW1ib2w6ICJ2NFBMUyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy52NC50ZXN0bmV0LnB1bHNlY2hhaW4uY29tIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLnY0LnRlc3RuZXQucHVsc2VjaGFpbi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQdWxzZVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi52NC50ZXN0bmV0LnB1bHNlY2hhaW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NjYW4udjQudGVzdG5ldC5wdWxzZWNoYWluLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgZW5zUmVnaXN0cnk6IHsKICAgICAgICBhZGRyZXNzOiAiMHgwMDAwMDAwMDAwMEMyRTA3NGVDNjlBMGRGYjI5OTdCQTZDN2QyZTFlIgogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDM1MzYwMQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3FNYWlubmV0LmpzCiAgdmFyIHFNYWlubmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNTQ0MSwKICAgIG5hbWU6ICJRIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiUSIsCiAgICAgIHN5bWJvbDogIlEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMucS5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJRIE1haW5uZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucS5vcmciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIucS5vcmcvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3FUZXN0bmV0LmpzCiAgdmFyIHFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNTQ0MywKICAgIG5hbWU6ICJRIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiUSIsCiAgICAgIHN5bWJvbDogIlEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMucXRlc3RuZXQub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnF0ZXN0bmV0Lm9yZyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5xdGVzdG5ldC5vcmcvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yZWFsLmpzCiAgdmFyIHJlYWwgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMTE4OCwKICAgIG5hbWU6ICJyZS5hbCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAicmVFVEgiLAogICAgICBkZWNpbWFsczogMTgsCiAgICAgIHN5bWJvbDogInJlRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcmVhbC5kcnBjLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogInJlLmFsIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnJlLmFsIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLnJlLmFsL2FwaS92MiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA2OTUKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yZWRiZWxseVRlc3RuZXQuanMKICB2YXIgcmVkYmVsbHlUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNTMsCiAgICBuYW1lOiAiUmVkYmVsbHkgTmV0d29yayBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJSZWRiZWxseSBOYXRpdmUgQ29pbiIsCiAgICAgIHN5bWJvbDogIlJCTlQiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZ292ZXJub3JzLnRlc3RuZXQucmVkYmVsbHkubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV0aGVybmFsIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQucmVkYmVsbHkubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ldGhlcm5hbC5mbHkuZGV2L2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcmVkc3RvbmUuanMKICB2YXIgcmVkc3RvbmUgPSBkZWZpbmVDaGFpbih7CiAgICBpZDogNjkwLAogICAgbmFtZTogIlJlZHN0b25lIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMucmVkc3RvbmVjaGFpbi5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnJlZHN0b25lY2hhaW4uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsgbmFtZTogIkV4cGxvcmVyIiwgdXJsOiAiCWh0dHBzOi8vZXhwbG9yZXIucmVkc3RvbmUueHl6IiB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3JleWFOZXR3b3JrLmpzCiAgdmFyIHJleWFOZXR3b3JrID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNzI5LAogICAgbmFtZTogIlJleWEgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMucmV5YS5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLnJleWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlJleWEgTmV0d29yayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5yZXlhLm5ldHdvcmsiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yb2xsdXguanMKICB2YXIgcm9sbHV4ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1NzAsCiAgICBuYW1lOiAiUm9sbHV4IE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiU3lzY29pbiIsCiAgICAgIHN5bWJvbDogIlNZUyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnJvbGx1eC5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnJvbGx1eC5jb20vd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9sbHV4RXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucm9sbHV4LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5yb2xsdXguY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTkyMjIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yb2xsdXhUZXN0bmV0LmpzCiAgdmFyIHJvbGx1eFRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU3ZTMsCiAgICBuYW1lOiAiUm9sbHV4IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiU3lzY29pbiIsCiAgICAgIHN5bWJvbDogIlNZUyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRhbmVuYmF1bS5yb2xsdXguY29tLyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMtdGFuZW5iYXVtLnJvbGx1eC5jb20vd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9sbHV4VGVzdG5ldEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3JvbGx1eC50YW5lbmJhdW0uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vcm9sbHV4LnRhbmVuYmF1bS5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTgxMzY3NQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3JvbmluLmpzCiAgdmFyIHJvbmluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDIwLAogICAgbmFtZTogIlJvbmluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJST04iLCBzeW1ib2w6ICJST04iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcGkucm9uaW5jaGFpbi5jb20vcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9uaW4gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYXBwLnJvbmluY2hhaW4uY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI2MDIzNTM1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcm9vdC5qcwogIHZhciByb290ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NjY4LAogICAgbmFtZTogIlRoZSBSb290IE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWFJQIiwKICAgICAgc3ltYm9sOiAiWFJQIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9yb290LnJvb3RuZXQubGl2ZS9hcmNoaXZlIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3Jvb3Qucm9vdG5ldC5saXZlL2FyY2hpdmUvd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJSb290c2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9yb290c2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YzlDMkUyNDI5QWVDMzU0OTE2YzQ3NkIzMGQ3MjlkZURkQzk0OTg4ZCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA5MjE4MzM4CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcm9vdFBvcmNpbmkuanMKICB2YXIgcm9vdFBvcmNpbmkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDc2NzIsCiAgICBuYW1lOiAiVGhlIFJvb3QgTmV0d29yayAtIFBvcmNpbmkiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWFJQIiwKICAgICAgc3ltYm9sOiAiWFJQIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9wb3JjaW5pLnJvb3RuZXQuYXBwL2FyY2hpdmUiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcG9yY2luaS5yb290bmV0LmFwcC9hcmNoaXZlL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9vdHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vcG9yY2luaS5yb290c2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YzlDMkUyNDI5QWVDMzU0OTE2YzQ3NkIzMGQ3MjlkZURkQzk0OTg4ZCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDU1NTY5MgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yb290c3RvY2suanMKICB2YXIgcm9vdHN0b2NrID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMCwKICAgIG5hbWU6ICJSb290c3RvY2sgTWFpbm5ldCIsCiAgICBuZXR3b3JrOiAicm9vdHN0b2NrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlJvb3RzdG9jayBCaXRjb2luIiwKICAgICAgc3ltYm9sOiAiUkJUQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3B1YmxpYy1ub2RlLnJzay5jbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlJTSyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5yc2suY28iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDI0OTU0MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3Jvb3RzdG9ja1Rlc3RuZXQuanMKICB2YXIgcm9vdHN0b2NrVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzEsCiAgICBuYW1lOiAiUm9vdHN0b2NrIFRlc3RuZXQiLAogICAgbmV0d29yazogInJvb3RzdG9jayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJSb290c3RvY2sgQml0Y29pbiIsCiAgICAgIHN5bWJvbDogInRSQlRDIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcHVibGljLW5vZGUudGVzdG5ldC5yc2suY28iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJSU0sgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5yb290c3RvY2suaW8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3JzczMuanMKICB2YXIgc291cmNlSWQyNiA9IDE7CiAgdmFyIHJzczMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDEyNTUzLAogICAgbmFtZTogIlJTUzMgVlNMIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlJTUzMiLCBzeW1ib2w6ICJSU1MzIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnJzczMuaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJSU1MzIFZTTCBNYWlubmV0IFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5yc3MzLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NjYW4ucnNzMy5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQyNl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEU2ZjI0ZDJDMzJCMzEwOUIxOGVkMzNjRjA4ZUZiNDkwYjFlMDlDMTAiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDE5MwogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQyNl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDZBMTI0MzI0OTFiYmJFOGQzYmFiZjc1Rjc1OTc2Njc3NEM3NzhEYjQiLAogICAgICAgICAgYmxvY2tDcmVhdGVkOiAxOTM4NzA1NwogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDI2XTogewogICAgICAgICAgYWRkcmVzczogIjB4NGNiYWI2OTEwOEFhNzIxNTFFRGE1QTNjMTY0ZUE4Njg0NWYxODQzOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQyNgogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yc3MzU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDI3ID0gMTExNTUxMTE7CiAgdmFyIHJzczNTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAyMzMxLAogICAgbmFtZTogIlJTUzMgVlNMIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiUlNTMyIsIHN5bWJvbDogIlJTUzMiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVzdG5ldC5yc3MzLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUlNTMyBWU0wgU2Vwb2xpYSBUZXN0bmV0IFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi50ZXN0bmV0LnJzczMuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2Nhbi50ZXN0bmV0LnJzczMuaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMjddOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhEYjVjNDZDM0VhYTZFZDZhRThiMjM3OTc4NURGN2RkMDI5QzBkQzgxIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTU2OTcKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMjddOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhjQkQ3N0U4RTFFN0YwNkIyNWJhRGU2NzE0MmNkRTgyNjUyRGE3YjU3IiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogNTM0NTAzNQogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDI3XTogewogICAgICAgICAgYWRkcmVzczogIjB4ZEREMjliYjYzQjA4MzlGQjFjRTBlRTQzOUZmMDI3NzM4NTk1RDA3QiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkMjcKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2FpZ29uLmpzCiAgdmFyIHNhaWdvbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAyMSwKICAgIG5hbWU6ICJTYWlnb24gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiUk9OIiwgc3ltYm9sOiAiUk9OIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2FpZ29uLXRlc3RuZXQucm9uaW5jaGFpbi5jb20vcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU2FpZ29uIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NhaWdvbi1hcHAucm9uaW5jaGFpbi5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTg3MzY4NzEKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2FwcGhpcmUuanMKICB2YXIgc2FwcGhpcmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIzMjk0LAogICAgbmFtZTogIk9hc2lzIFNhcHBoaXJlIiwKICAgIG5ldHdvcms6ICJzYXBwaGlyZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2FwcGhpcmUgUm9zZSIsIHN5bWJvbDogIlJPU0UiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zYXBwaGlyZS5vYXNpcy5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9zYXBwaGlyZS5vYXNpcy5pby93cyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk9hc2lzIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLm9hc2lzLmlvL21haW5uZXQvc2FwcGhpcmUiCiAgICAgIH0sCiAgICAgIGJsb2Nrc2NvdXQ6IHsKICAgICAgICBuYW1lOiAiT2FzaXMgU2FwcGhpcmUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vb2xkLWV4cGxvcmVyLnNhcHBoaXJlLm9hc2lzLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL29sZC1leHBsb3Jlci5zYXBwaGlyZS5vYXNpcy5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNzM0NTMxCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2FwcGhpcmVUZXN0bmV0LmpzCiAgdmFyIHNhcHBoaXJlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjMyOTUsCiAgICBuYW1lOiAiT2FzaXMgU2FwcGhpcmUgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAic2FwcGhpcmUtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2FwcGhpcmUgVGVzdCBSb3NlIiwgc3ltYm9sOiAiVEVTVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuc2FwcGhpcmUub2FzaXMuZGV2Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3Rlc3RuZXQuc2FwcGhpcmUub2FzaXMuZGV2L3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiT2FzaXMgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIub2FzaXMuaW8vdGVzdG5ldC9zYXBwaGlyZSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJPYXNpcyBTYXBwaGlyZSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQub2xkLWV4cGxvcmVyLnNhcHBoaXJlLm9hc2lzLmRldiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0Lm9sZC1leHBsb3Jlci5zYXBwaGlyZS5vYXNpcy5kZXYvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zYXRvc2hpdm0uanMKICB2YXIgc2F0b3NoaVZNID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMTA5LAogICAgbmFtZTogIlNhdG9zaGlWTSBBbHBoYSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCVEMiLAogICAgICBzeW1ib2w6ICJCVEMiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FscGhhLXJwYy1ub2RlLWh0dHAuc3Ztc2Nhbi5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc3Ztc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zdm1zY2FuLmlvL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zYXRvc2hpdm1UZXN0bmV0LmpzCiAgdmFyIHNhdG9zaGlWTVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxMTAsCiAgICBuYW1lOiAiU2F0b3NoaVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkJUQyIsCiAgICAgIHN5bWJvbDogIkJUQyIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vdGVzdC1ycGMtbm9kZS1odHRwLnN2bXNjYW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJibG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuc3Ztc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LnN2bXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zY3JvbGwuanMKICB2YXIgc2Nyb2xsID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1MzQzNTIsCiAgICBuYW1lOiAiU2Nyb2xsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zY3JvbGwuaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3NzLXJwYy5zY3JvbGwuaW8vd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTY3JvbGxzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Njcm9sbHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5zY3JvbGxzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTQKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3Njcm9sbFNlcG9saWEuanMKICB2YXIgc2Nyb2xsU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTM0MzUxLAogICAgbmFtZTogIlNjcm9sbCBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEtcnBjLnNjcm9sbC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNjcm9sbHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5zY3JvbGxzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5zY3JvbGxzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogOTQ3MwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zZWkuanMKICB2YXIgc2VpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMzI5LAogICAgbmFtZTogIlNlaSBOZXR3b3JrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZWkiLCBzeW1ib2w6ICJTRUkiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldm0tcnBjLnNlaS1hcGlzLmNvbS8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXZtLXdzLnNlaS1hcGlzLmNvbS8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTZWl0cmFjZSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZWl0cmFjZS5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2VpdHJhY2UuY29tL3BhY2lmaWMtMS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2VpRGV2bmV0LmpzCiAgdmFyIHNlaURldm5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNzEzNzE1LAogICAgbmFtZTogIlNlaSBEZXZuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlNlaSIsIHN5bWJvbDogIlNFSSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V2bS1ycGMtYXJjdGljLTEuc2VpLWFwaXMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU2VpdHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vc2VpdHJhY2UuY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zZWlUZXN0bmV0LmpzCiAgdmFyIHNlaVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMjgsCiAgICBuYW1lOiAiU2VpIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlNlaSIsIHN5bWJvbDogIlNFSSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V2bS1ycGMtdGVzdG5ldC5zZWktYXBpcy5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXZtLXdzLXRlc3RuZXQuc2VpLWFwaXMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU2VpdHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vc2VpdHJhY2UuY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zZXBvbGlhLmpzCiAgdmFyIHNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMTU1MTExLAogICAgbmFtZTogIlNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlNlcG9saWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc2Vwb2xpYS5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5ldGhlcnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLXNlcG9saWEuZXRoZXJzY2FuLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3NTE1MzIKICAgICAgfSwKICAgICAgZW5zUmVnaXN0cnk6IHsgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjOEFmOTk5ZTM4MjczRDY1OEJFMWI5MjFiODhBOURkZjAwNTc2OWNDIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDUzMTcwODAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2hhcGVTZXBvbGlhLmpzCiAgdmFyIHNoYXBlU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTEwMTEsCiAgICBuYW1lOiAiU2hhcGUgU2Vwb2xpYSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZXBvbGlhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5zaGFwZS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiYmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zaGFwZS1zZXBvbGlhLWV4cGxvcmVyLmFsY2hlbXkuY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NoYXBlLXNlcG9saWEtZXhwbG9yZXIuYWxjaGVteS5jb20vYXBpL3YyIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NoaW1tZXIuanMKICB2YXIgc2hpbW1lciA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTQ4LAogICAgbmFtZTogIlNoaW1tZXIiLAogICAgbmV0d29yazogInNoaW1tZXIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiU2hpbW1lciIsCiAgICAgIHN5bWJvbDogIlNNUiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vanNvbi1ycGMuZXZtLnNoaW1tZXIubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNoaW1tZXIgTmV0d29yayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0uc2hpbW1lci5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmV2bS5zaGltbWVyLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NoaW1tZXJUZXN0bmV0LmpzCiAgdmFyIHNoaW1tZXJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDczLAogICAgbmFtZTogIlNoaW1tZXIgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAic2hpbW1lci10ZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlNoaW1tZXIiLAogICAgICBzeW1ib2w6ICJTTVIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2pzb24tcnBjLmV2bS50ZXN0bmV0LnNoaW1tZXIubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNoaW1tZXIgTmV0d29yayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0udGVzdG5ldC5zaGltbWVyLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLnRlc3RuZXQuc2hpbW1lci5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2thbGUvYnJhd2wuanMKICB2YXIgc2thbGVCbG9ja0JyYXdsZXJzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzOTE4NDU4OTQsCiAgICBuYW1lOiAiU0tBTEUgfCBCbG9jayBCcmF3bGVycyIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQlJBV0wiLCBzeW1ib2w6ICJCUkFXTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvZnJheWVkLWRlY2VudC1hbnRhcmVzIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvZnJheWVkLWRlY2VudC1hbnRhcmVzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU0tBTEUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZnJheWVkLWRlY2VudC1hbnRhcmVzLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHt9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL2NhbHlwc28uanMKICB2YXIgc2thbGVDYWx5cHNvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNTY0ODMwODE4LAogICAgbmFtZTogIlNLQUxFIHwgQ2FseXBzbyBORlQgSHViIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS9ob25vcmFibGUtc3RlZWwtcmFzYWxoYWd1ZSJdLAogICAgICAgIHdlYlNvY2tldDogWwogICAgICAgICAgIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvaG9ub3JhYmxlLXN0ZWVsLXJhc2FsaGFndWUiCiAgICAgICAgXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ob25vcmFibGUtc3RlZWwtcmFzYWxoYWd1ZS5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMxMDc2MjYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9jYWx5cHNvVGVzdG5ldC5qcwogIHZhciBza2FsZUNhbHlwc29UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5NzQzOTkxMzEsCiAgICBuYW1lOiAiU0tBTEUgQ2FseXBzbyBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5za2FsZW5vZGVzLmNvbS92MS9naWFudC1oYWxmLWR1YWwtdGVzdG5ldCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly90ZXN0bmV0LnNrYWxlbm9kZXMuY29tL3YxL3dzL2dpYW50LWhhbGYtZHVhbC10ZXN0bmV0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU0tBTEUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZ2lhbnQtaGFsZi1kdWFsLXRlc3RuZXQuZXhwbG9yZXIudGVzdG5ldC5za2FsZW5vZGVzLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDMyMjAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2thbGUvY3J5cHRvQmxhZGVzLmpzCiAgdmFyIHNrYWxlQ3J5cHRvQmxhZGVzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDI2MDYyMTU3LAogICAgbmFtZTogIlNLQUxFIHwgQ3J5cHRvQmxhZGVzIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS9hZmZlY3Rpb25hdGUtaW1tZWRpYXRlLXBvbGx1eCJdLAogICAgICAgIHdlYlNvY2tldDogWwogICAgICAgICAgIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvYWZmZWN0aW9uYXRlLWltbWVkaWF0ZS1wb2xsdXgiCiAgICAgICAgXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hZmZlY3Rpb25hdGUtaW1tZWRpYXRlLXBvbGx1eC5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9jcnlwdG9Db2xvc3NldW0uanMKICB2YXIgc2thbGVDcnlwdG9Db2xvc3NldW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMzI5NDIxNzIsCiAgICBuYW1lOiAiU0tBTEUgfCBDcnlwdG8gQ29sb3NzZXVtIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS9oYXVudGluZy1kZXZvdGVkLWRlbmViIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvaGF1bnRpbmctZGV2b3RlZC1kZW5lYiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2hhdW50aW5nLWRldm90ZWQtZGVuZWIuZXhwbG9yZXIubWFpbm5ldC5za2FsZW5vZGVzLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czoge30KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2thbGUvZXVyb3BhLmpzCiAgdmFyIHNrYWxlRXVyb3BhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDQ2Mzk5MTI2LAogICAgbmFtZTogIlNLQUxFIHwgRXVyb3BhIExpcXVpZGl0eSBIdWIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL2VsYXRlZC10YW4tc2thdCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL3dzL2VsYXRlZC10YW4tc2thdCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2VsYXRlZC10YW4tc2thdC5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMxMTM0OTUKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9ldXJvcGFUZXN0bmV0LmpzCiAgdmFyIHNrYWxlRXVyb3BhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTQ0NDY3MzQxOSwKICAgIG5hbWU6ICJTS0FMRSBFdXJvcGEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuc2thbGVub2Rlcy5jb20vdjEvanVpY3ktbG93LXNtYWxsLXRlc3RuZXQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9qdWljeS1sb3ctc21hbGwtdGVzdG5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2p1aWN5LWxvdy1zbWFsbC10ZXN0bmV0LmV4cGxvcmVyLnRlc3RuZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTEwODU4CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL2V4b3JkZS5qcwogIHZhciBza2FsZUV4b3JkZSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjEzOTkyNzU1MiwKICAgIG5hbWU6ICJTS0FMRSB8IEV4b3JkZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvbGlnaHQtdmFzdC1kaXBoZGEiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9saWdodC12YXN0LWRpcGhkYSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2xpZ2h0LXZhc3QtZGlwaGRhLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHt9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL2h1bWFuUHJvdG9jb2wuanMKICB2YXIgc2thbGVIdW1hblByb3RvY29sID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjczMjI3NDUzLAogICAgbmFtZTogIlNLQUxFIHwgSHVtYW4gUHJvdG9jb2wiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL3dhbi1yZWQtYWluIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3Mvd2FuLXJlZC1haW4iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93YW4tcmVkLWFpbi5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9uZWJ1bGEuanMKICB2YXIgc2thbGVOZWJ1bGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0ODI2MDE2NDksCiAgICBuYW1lOiAiU0tBTEUgfCBOZWJ1bGEgR2FtaW5nIEh1YiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvZ3JlZW4tZ2lkZHktZGVuZWJvbGEiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9ncmVlbi1naWRkeS1kZW5lYm9sYSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2dyZWVuLWdpZGR5LWRlbmVib2xhLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjM3Mjk4NgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL25lYnVsYVRlc3RuZXQuanMKICB2YXIgc2thbGVOZWJ1bGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNzA4NDYyNCwKICAgIG5hbWU6ICJTS0FMRSBOZWJ1bGEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuc2thbGVub2Rlcy5jb20vdjEvbGFua3ktaWxsLWZ1bm55LXRlc3RuZXQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9sYW5reS1pbGwtZnVubnktdGVzdG5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2xhbmt5LWlsbC1mdW5ueS10ZXN0bmV0LmV4cGxvcmVyLnRlc3RuZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTA1MTQxCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL3Jhem9yLmpzCiAgdmFyIHNrYWxlUmF6b3IgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI3ODYxMTM1MSwKICAgIG5hbWU6ICJTS0FMRSB8IFJhem9yIE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL3R1cmJ1bGVudC11bmlxdWUtc2NoZWF0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvdHVyYnVsZW50LXVuaXF1ZS1zY2hlYXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90dXJidWxlbnQtdW5pcXVlLXNjaGVhdC5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS90aXRhbi5qcwogIHZhciBza2FsZVRpdGFuID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMzUwMjE2MjM0LAogICAgbmFtZTogIlNLQUxFIHwgVGl0YW4gQ29tbXVuaXR5IEh1YiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvcGFyYWxsZWwtc3Rvcm15LXNwaWNhIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvcGFyYWxsZWwtc3Rvcm15LXNwaWNhIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU0tBTEUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGFyYWxsZWwtc3Rvcm15LXNwaWNhLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjA3NjQ1OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL3RpdGFuVGVzdG5ldC5qcwogIHZhciBza2FsZVRpdGFuVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAyMDM1MjIyMCwKICAgIG5hbWU6ICJTS0FMRSBUaXRhbiBIdWIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LnNrYWxlbm9kZXMuY29tL3YxL2F3YXJlLWZha2UtdHJpbS10ZXN0bmV0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3Rlc3RuZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvYXdhcmUtZmFrZS10cmltLXRlc3RuZXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hd2FyZS1mYWtlLXRyaW0tdGVzdG5ldC5leHBsb3Jlci50ZXN0bmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEwNDA3MgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2V0Y2hwYWQuanMKICB2YXIgc2tldGNocGFkID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5ODQxMjMsCiAgICBuYW1lOiAiRm9ybWEgU2tldGNocGFkIiwKICAgIG5ldHdvcms6ICJza2V0Y2hwYWQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgc3ltYm9sOiAiVElBIiwKICAgICAgbmFtZTogIlRJQSIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc2tldGNocGFkLTEuZm9ybWEuYXJ0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLnNrZXRjaHBhZC0xLmZvcm1hLmFydCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNrZXRjaHBhZCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5za2V0Y2hwYWQtMS5mb3JtYS5hcnQiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NvbmdiaXJkLmpzCiAgdmFyIHNvbmdiaXJkID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOSwKICAgIG5hbWU6ICJTb25nYmlyZCBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogInNvbmdiaXJkIiwKICAgICAgc3ltYm9sOiAiU0dCIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vc29uZ2JpcmQtYXBpLmZsYXJlLm5ldHdvcmsvZXh0L0MvcnBjIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU29uZ2JpcmQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc29uZ2JpcmQtZXhwbG9yZXIuZmxhcmUubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zb25nYmlyZC1leHBsb3Jlci5mbGFyZS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zb25nYmlyZFRlc3RuZXQuanMKICB2YXIgc29uZ2JpcmRUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNiwKICAgIG5hbWU6ICJDb3N0b24iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiY29zdG9uZmxhcmUiLAogICAgICBzeW1ib2w6ICJDRkxSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vY29zdG9uLWFwaS5mbGFyZS5uZXR3b3JrL2V4dC9DL3JwYyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNvc3RvbiBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9jb3N0b24tZXhwbG9yZXIuZmxhcmUubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9jb3N0b24tZXhwbG9yZXIuZmxhcmUubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NwaWN5LmpzCiAgdmFyIHNwaWN5ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4ODg4MiwKICAgIG5hbWU6ICJDaGlsaXogU3BpY3kgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiY2hpbGl6LXNwaWN5LVRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ0haIiwKICAgICAgc3ltYm9sOiAiQ0haIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL3NwaWN5LXJwYy5jaGlsaXouY29tIiwKICAgICAgICAgICJodHRwczovL2NoaWxpei1zcGljeS1ycGMucHVibGljbm9kZS5jb20iCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsKICAgICAgICAgICJ3c3M6Ly9zcGljeS1ycGMtd3MuY2hpbGl6LmNvbSIsCiAgICAgICAgICAid3NzOi8vY2hpbGl6LXNwaWN5LXJwYy5wdWJsaWNub2RlLmNvbSIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNoaWxpeiBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cDovL3NwaWN5LWV4cGxvcmVyLmNoaWxpei5jb20iLAogICAgICAgIGFwaVVybDogImh0dHA6Ly9zcGljeS1leHBsb3Jlci5jaGlsaXouY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2hhcmRldW1TcGhpbnguanMKICB2YXIgc2hhcmRldW1TcGhpbnggPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwODIsCiAgICBuYW1lOiAiU2hhcmRldW0gU3BoaW54IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTSEFSREVVTSIsIHN5bWJvbDogIlNITSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NwaGlueC5zaGFyZGV1bS5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTaGFyZGV1bSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci1zcGhpbnguc2hhcmRldW0ub3JnIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zaGliYXJpdW0uanMKICB2YXIgc2hpYmFyaXVtID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDksCiAgICBuYW1lOiAiU2hpYmFyaXVtIiwKICAgIG5ldHdvcms6ICJzaGliYXJpdW0iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkJvbmUiLCBzeW1ib2w6ICJCT05FIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnNoaWJycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zaGliYXJpdW1zY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg4NjRCZjY4MUFERDYwNTIzOTUxODhBODkxMDFBMUIzN2QzQjRDOTYxIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI2NTkwMAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NoaWJhcml1bVRlc3RuZXQuanMKICB2YXIgc2hpYmFyaXVtVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTU3LAogICAgbmFtZTogIlB1cHB5bmV0IFNoaWJhcml1bSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCb25lIiwKICAgICAgc3ltYm9sOiAiQk9ORSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3B1cHB5bmV0LnNoaWJycGMuY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wdXBweXNjYW4uc2hpYi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9wdXBweXNjYW4uc2hpYi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweEE0MDI5Yjc0RkJBMzY2YzkyNmVERkE3RGQxMEIyMUM2MjExNzBhNGMiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzAzNTc2OQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zdHJhdGlzLmpzCiAgdmFyIHN0cmF0aXMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwNTEwNSwKICAgIG5hbWU6ICJTdHJhdGlzIE1haW5uZXQiLAogICAgbmV0d29yazogInN0cmF0aXMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIlN0cmF0aXMiLAogICAgICBzeW1ib2w6ICJTVFJBWCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc3RyYXRpc2V2bS5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTdHJhdGlzIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnN0cmF0aXNldm0uY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3N5c2NvaW4uanMKICB2YXIgc3lzY29pbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTcsCiAgICBuYW1lOiAiU3lzY29pbiBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlN5c2NvaW4iLAogICAgICBzeW1ib2w6ICJTWVMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zeXNjb2luLm9yZyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuc3lzY29pbi5vcmcvd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU3lzY29pbkV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnN5c2NvaW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLnN5c2NvaW4ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyODcxMzkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zeXNjb2luVGVzdG5ldC5qcwogIHZhciBzeXNjb2luVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTcwMCwKICAgIG5hbWU6ICJTeXNjb2luIFRhbmVuYmF1bSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlN5c2NvaW4iLAogICAgICBzeW1ib2w6ICJTWVMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy50YW5lbmJhdW0uaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnRhbmVuYmF1bS5pby93c3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTeXNjb2luVGVzdG5ldEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3RhbmVuYmF1bS5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNzEyODgKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90YXJheGEuanMKICB2YXIgdGFyYXhhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4NDEsCiAgICBuYW1lOiAiVGFyYXhhIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlRhcmEiLCBzeW1ib2w6ICJUQVJBIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLm1haW5uZXQudGFyYXhhLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGFyYXhhIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLm1haW5uZXQudGFyYXhhLmlvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvLmpzCiAgdmFyIHRhaWtvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjdlMywKICAgIG5hbWU6ICJUYWlrbyBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMubWFpbm5ldC50YWlrby54eXoiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3MubWFpbm5ldC50YWlrby54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUYWlrb3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vdGFpa29zY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS50YWlrb3NjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYjI0MzY3NzRDM2UxOTFjODUwNTZkMjQ4RUY0MjYwY2U1ZjI3QTlEIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvSGVrbGEuanMKICB2YXIgdGFpa29IZWtsYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY3MDA5LAogICAgbmFtZTogIlRhaWtvIEhla2xhIEwyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5oZWtsYS50YWlrby54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUYWlrb3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vaGVrbGEudGFpa29zY2FuLm5ldHdvcmsiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvSm9sbmlyLmpzCiAgdmFyIHRhaWtvSm9sbmlyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjcwMDcsCiAgICBuYW1lOiAiVGFpa28gSm9sbmlyIChBbHBoYS01IFRlc3RuZXQpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5qb2xuaXIudGFpa28ueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiYmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5qb2xuaXIudGFpa28ueHl6IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDczMjcwNgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90YWlrb0thdGxhLmpzCiAgdmFyIHRhaWtvS2F0bGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE2NzAwOCwKICAgIG5hbWU6ICJUYWlrbyBLYXRsYSAoQWxwaGEtNiBUZXN0bmV0KSIsCiAgICBuZXR3b3JrOiAidGtvLWthdGxhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5rYXRsYS50YWlrby54eXoiXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmthdGxhLnRhaWtvLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIua2F0bGEudGFpa28ueHl6IgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvVGVzdG5ldFNlcG9saWEuanMKICB2YXIgdGFpa29UZXN0bmV0U2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY3MDA1LAogICAgbmFtZTogIlRhaWtvIChBbHBoYS0zIFRlc3RuZXQpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy50ZXN0LnRhaWtvLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdC50YWlrby54eXoiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvdGFyYXhhVGVzdG5ldC5qcwogIHZhciB0YXJheGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4NDIsCiAgICBuYW1lOiAiVGFyYXhhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlRhcmEiLCBzeW1ib2w6ICJUQVJBIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQudGFyYXhhLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGFyYXhhIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQudGFyYXhhLmlvIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90ZWxjb2luVGVzdG5ldC5qcwogIHZhciB0ZWxjb2luVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAxNywKICAgIG5hbWU6ICJUZWxjb2luIEFkaXJpIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlRlbGNvaW4iLCBzeW1ib2w6ICJURUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVsY29pbi5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAidGVsc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZWxzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90ZWxvcy5qcwogIHZhciB0ZWxvcyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDAsCiAgICBuYW1lOiAiVGVsb3MiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiVGVsb3MiLAogICAgICBzeW1ib2w6ICJUTE9TIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC50ZWxvcy5uZXQvZXZtIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGVsb3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3LnRlbG9zY2FuLmlvLyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDY1MzA3MDkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90ZWxvc1Rlc3RuZXQuanMKICB2YXIgdGVsb3NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MSwKICAgIG5hbWU6ICJUZWxvcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJUZWxvcyIsCiAgICAgIHN5bWJvbDogIlRMT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LnRlbG9zLm5ldC9ldm0iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUZWxvc2NhbiAodGVzdG5ldCkiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC50ZWxvc2Nhbi5pby8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RlbmV0LmpzCiAgdmFyIHRlbmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNTU5LAogICAgbmFtZTogIlRlbmV0IiwKICAgIG5ldHdvcms6ICJ0ZW5ldC1tYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJURU5FVCIsCiAgICAgIHN5bWJvbDogIlRFTkVUIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVuZXQub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGVuZXRTY2FuIE1haW5uZXQiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVuZXRzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3RlbmV0c2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90aGFpQ2hhaW4uanMKICB2YXIgdGhhaUNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3LAogICAgbmFtZTogIlRoYWlDaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiVENIIiwgc3ltYm9sOiAiVENIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRoYWljaGFpbi5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cC50aGFpY2hhaW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cC50aGFpY2hhaW4ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MERhRDYxMzBlODMyYzIxNzE5QzVDRTNiYWU5MzQ1NEUxNkE4NDgyNiIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0ODA2Mzg2CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90aHVuZGVyVGVzdG5ldC5qcwogIHZhciB0aHVuZGVyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogOTk3LAogICAgbmFtZTogIjVpcmVDaGFpbiBUaHVuZGVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIjVpcmUgVG9rZW4iLCBzeW1ib2w6ICI1SVJFIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQuNWlyZS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiNWlyZUNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLjVpcmUubmV0d29yayIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvdW5yZWFsLmpzCiAgdmFyIHVucmVhbCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTgyMzMsCiAgICBuYW1lOiAiVW5yZWFsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJyZUVUSCIsCiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgc3ltYm9sOiAicmVFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMudW5yZWFsLW9yYml0LmdlbGF0by5kaWdpdGFsIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVW5yZWFsIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3VucmVhbC5ibG9ja3Njb3V0LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly91bnJlYWwuYmxvY2tzY291dC5jb20vYXBpL3YyIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4OGI2QjBlNjBEOENEODQ4OThFYThiOTgxMDY1QTEyRjg3NmVBNTY3NyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNzQ1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvdmVjaGFpbi5qcwogIHZhciB2ZWNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDAwMDksCiAgICBuYW1lOiAiVmVjaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiVmVDaGFpbiIsIHN5bWJvbDogIlZFVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQudmVjaGFpbi5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJWZWNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmUudmVjaGFpbi5vcmciCiAgICAgIH0sCiAgICAgIHZlY2hhaW5TdGF0czogewogICAgICAgIG5hbWU6ICJWZWNoYWluIFN0YXRzIiwKICAgICAgICB1cmw6ICJodHRwczovL3ZlY2hhaW5zdGF0cy5jb20iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvd2FuY2hhaW4uanMKICB2YXIgd2FuY2hhaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDg4OCwKICAgIG5hbWU6ICJXYW5jaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiV0FOQ0hBSU4iLCBzeW1ib2w6ICJXQU4iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL2d3YW4tc3NsLndhbmRldnMub3JnOjU2ODkxIiwKICAgICAgICAgICJodHRwczovL2d3YW4yLXNzbC53YW5kZXZzLm9yZyIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIldhblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd2Fuc2Nhbi5vcmciCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNERjZBMTU2NmU3OEVCNDU5NGM4NkZlNzNGY2RjODI0MjllOTdmYkIiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjUzMTIzOTAKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy93YW5jaGFpblRlc3RuZXQuanMKICB2YXIgd2FuY2hhaW5UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5OTksCiAgICBuYW1lOiAiV2FuY2hhaW4gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiV0FOQ0hBSU4iLCBzeW1ib2w6ICJXQU50IiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZ3dhbi1zc2wud2FuZGV2cy5vcmc6NDY4OTEiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJXYW5TY2FuVGVzdCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93YW5zY2FuLm9yZyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MTFjODliRjQ0OTZjMzlGQjgwNTM1RmZiNGM5MjcxNTgzOUNDNTMyNCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDc0MzQ0OAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy93ZW1peC5qcwogIHZhciB3ZW1peCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExMSwKICAgIG5hbWU6ICJXRU1JWCIsCiAgICBuZXR3b3JrOiAid2VtaXgtbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiV0VNSVgiLCBzeW1ib2w6ICJXRU1JWCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkud2VtaXguY29tIl0gfSwKICAgICAgcHVibGljOiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkud2VtaXguY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAid2VtaXhFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci53ZW1peC5jb20iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvd2VtaXhUZXN0bmV0LmpzCiAgdmFyIHdlbWl4VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExMiwKICAgIG5hbWU6ICJXRU1JWCBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJ3ZW1peC10ZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJXRU1JWCIsIHN5bWJvbDogInRXRU1JWCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkudGVzdC53ZW1peC5jb20iXSB9LAogICAgICBwdWJsaWM6IHsgaHR0cDogWyJodHRwczovL2FwaS50ZXN0LndlbWl4LmNvbSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIndlbWl4RXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC53ZW1peHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQud2VtaXhzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3hMYXllclRlc3RuZXQuanMKICB2YXIgeExheWVyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTk1LAogICAgbmFtZTogIlgxIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiT0tCIiwKICAgICAgc3ltYm9sOiAiT0tCIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8veGxheWVydGVzdHJwYy5va3guY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiT0tMaW5rIiwKICAgICAgICB1cmw6ICJodHRwczovL3d3dy5va2xpbmsuY29tL3hsYXllci10ZXN0IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDYyNDM0NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94TGF5ZXIuanMKICB2YXIgeExheWVyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOTYsCiAgICBuYW1lOiAiWCBMYXllciBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk9LQiIsCiAgICAgIHN5bWJvbDogIk9LQiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy54bGF5ZXIudGVjaCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk9LTGluayIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cub2tsaW5rLmNvbS94bGF5ZXIiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDc0MTYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94YWkuanMKICB2YXIgeGFpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2NjAyNzksCiAgICBuYW1lOiAiWGFpIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlhhaSIsIHN5bWJvbDogIlhBSSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3hhaS1jaGFpbi5uZXQvcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci54YWktY2hhaW4ubmV0IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDIyMjU0OQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMveGFpVGVzdG5ldC5qcwogIHZhciB4YWlUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNzcxNDU1NTQyOSwKICAgIG5hbWU6ICJYYWkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic1hhaSIsIHN5bWJvbDogInNYQUkiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LXYyLnhhaS1jaGFpbi5uZXQvcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLXYyLnhhaS1jaGFpbi5uZXQiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3hkYy5qcwogIHZhciB4ZGMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDUwLAogICAgbmFtZTogIlhpbkZpbiBOZXR3b3JrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlhEQyIsCiAgICAgIHN5bWJvbDogIlhEQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy54aW5maW4ubmV0d29yayJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICB4aW5maW46IHsKICAgICAgICBuYW1lOiAiWGluRmluIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnhpbmZpbi5uZXR3b3JrIgogICAgICB9LAogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8veGRjLmJsb2Nrc3NjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNzE1NDI3ODgKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94ZGNUZXN0bmV0LmpzCiAgdmFyIHhkY1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDUxLAogICAgbmFtZTogIkFwb3RoZW0gTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJUWERDIiwKICAgICAgc3ltYm9sOiAiVFhEQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2VycGMuYXBvdGhlbS5uZXR3b3JrIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hcG90aGVtLmJsb2Nrc3NjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTk3NjUzODkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94clNlcG9saWEuanMKICB2YXIgeHJTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNzMwLAogICAgbmFtZTogIlhSIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAidFhSIiwKICAgICAgc3ltYm9sOiAidFhSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8veHItc2Vwb2xpYS10ZXN0bmV0LnJwYy5jYWxkZXJhLnh5ei9odHRwIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly94ci1zZXBvbGlhLXRlc3RuZXQuZXhwbG9yZXIuY2FsZGVyYS54eXoiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3lvb2xkb1ZlcnNlLmpzCiAgdmFyIHlvb2xkb1ZlcnNlID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1MDAwNSwKICAgIG5hbWU6ICJZb29sZG8gVmVyc2UiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk9BUyIsIHN5bWJvbDogIk9BUyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy55b29sZG8tdmVyc2UueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiWW9vbGRvIFZlcnNlIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnlvb2xkby12ZXJzZS54eXoiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMveW9vbGRvVmVyc2VUZXN0bmV0LmpzCiAgdmFyIHlvb2xkb1ZlcnNlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTAwMDYsCiAgICBuYW1lOiAiWW9vbGRvIFZlcnNlIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk9BUyIsIHN5bWJvbDogIk9BUyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy50ZXN0bmV0Lnlvb2xkby12ZXJzZS54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJZb29sZG8gVmVyc2UgVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci50ZXN0bmV0Lnlvb2xkby12ZXJzZS54eXoiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3pldGFjaGFpbi5qcwogIHZhciB6ZXRhY2hhaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDdlMywKICAgIG5hbWU6ICJaZXRhQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWmV0YSIsCiAgICAgIHN5bWJvbDogIlpFVEEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3pldGFjaGFpbi1ldm0uYmxvY2twaS5uZXR3b3JrL3YxL3JwYy9wdWJsaWMiXQogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE2MzI3ODEKICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiWmV0YVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuemV0YWNoYWluLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3pldGFjaGFpbkF0aGVuc1Rlc3RuZXQuanMKICB2YXIgemV0YWNoYWluQXRoZW5zVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNzAwMSwKICAgIG5hbWU6ICJaZXRhQ2hhaW4gQXRoZW5zIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWmV0YSIsCiAgICAgIHN5bWJvbDogImFaRVRBIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly96ZXRhY2hhaW4tYXRoZW5zLWV2bS5ibG9ja3BpLm5ldHdvcmsvdjEvcnBjL3B1YmxpYyJdCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjcxNTIxNwogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJaZXRhU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hdGhlbnMuZXhwbG9yZXIuemV0YWNoYWluLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemhlamlhbmcuanMKICB2YXIgemhlamlhbmcgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMzc4MDMsCiAgICBuYW1lOiAiWmhlamlhbmciLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlpoZWppYW5nIEV0aGVyIiwgc3ltYm9sOiAiWmhlakVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy56aGVqaWFuZy5ldGhwYW5kYW9wcy5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJlYWNvbmNoYWluIiwKICAgICAgICB1cmw6ICJodHRwczovL3poZWppYW5nLmJlYWNvbmNoYS5pbiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemlsbGlxYS5qcwogIHZhciB6aWxsaXFhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMjc2OSwKICAgIG5hbWU6ICJaaWxsaXFhIiwKICAgIG5ldHdvcms6ICJ6aWxsaXFhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJaaWxsaXFhIiwgc3ltYm9sOiAiWklMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vYXBpLnppbGxpcWEuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJuYWwiLAogICAgICAgIHVybDogImh0dHBzOi8vZXZteC56aWxsaXFhLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3ppbGxpcWFUZXN0bmV0LmpzCiAgdmFyIHppbGxpcWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMzEwMSwKICAgIG5hbWU6ICJaaWxsaXFhIFRlc3RuZXQiLAogICAgbmV0d29yazogInppbGxpcWEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiWmlsbGlxYSIsIHN5bWJvbDogIlpJTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2Rldi1hcGkuemlsbGlxYS5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcm5hbCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ldm14LnRlc3RuZXQuemlsbGlxYS5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prRmFpci5qcwogIHZhciB6a0ZhaXIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyNzY2LAogICAgbmFtZTogIlpLRmFpciBNYWlubmV0IiwKICAgIG5ldHdvcms6ICJ6a2ZhaXItbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJVU0QgQ29pbiIsCiAgICAgIHN5bWJvbDogIlVTREMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy56a2ZhaXIuaW8iXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnprZmFpci5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogInprRmFpciBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLnprZmFpci5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLnprZmFpci5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjA5MDk1OQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemtGYWlyVGVzdG5ldC5qcwogIHZhciB6a0ZhaXJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0Mzg1MSwKICAgIG5hbWU6ICJaS0ZhaXIgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiemtmYWlyLXRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiVVNEIENvaW4iLAogICAgICBzeW1ib2w6ICJVU0RDIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LXJwYy56a2ZhaXIuaW8iXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC1ycGMuemtmYWlyLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiemtGYWlyIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQtc2Nhbi56a2ZhaXIuaW8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prTGlua05vdmEuanMKICB2YXIgemtMaW5rTm92YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogODEwMTgwLAogICAgbmFtZTogInprTGluayBOb3ZhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUSCIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy56a2xpbmsuaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJ6a0xpbmsgTm92YSBCbG9jayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci56a2xpbmsuaW8iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemtMaW5rTm92YVNlcG9saWFUZXN0bmV0LmpzCiAgdmFyIHprTGlua05vdmFTZXBvbGlhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogODEwMTgxLAogICAgbmFtZTogInprTGluayBOb3ZhIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFVEgiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLnJwYy56a2xpbmsuaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJ6a0xpbmsgTm92YSBCbG9jayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZXBvbGlhLmV4cGxvcmVyLnprbGluay5pbyIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy96a3N5bmMuanMKICB2YXIgemtzeW5jID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnLAogICAgaWQ6IDMyNCwKICAgIG5hbWU6ICJaS3N5bmMgRXJhIiwKICAgIG5ldHdvcms6ICJ6a3N5bmMtZXJhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmVyYS56a3N5bmMuaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vbWFpbm5ldC5lcmEuemtzeW5jLmlvL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2VyYS56a3N5bmMubmV0d29yay8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLWVyYS56a3N5bmMubmV0d29yay9hcGkiCiAgICAgIH0sCiAgICAgIG5hdGl2ZTogewogICAgICAgIG5hbWU6ICJaS3N5bmMgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuemtzeW5jLmlvLyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ibG9jay1leHBsb3Jlci1hcGkubWFpbm5ldC56a3N5bmMuaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhGOWNkYTYyNEZCQzdlMDU5MzU1Y2U5OGEzMTY5M2QyOTlGQUNkOTYzIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prc3luY0luTWVtb3J5Tm9kZS5qcwogIHZhciB6a3N5bmNJbk1lbW9yeU5vZGUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcsCiAgICBpZDogMjYwLAogICAgbmFtZTogIlpLc3luYyBJbk1lbW9yeSBOb2RlIiwKICAgIG5ldHdvcms6ICJ6a3N5bmMtaW4tbWVtb3J5LW5vZGUiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHA6Ly9sb2NhbGhvc3Q6ODAxMSJdCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prc3luY0xvY2FsTm9kZS5qcwogIHZhciB6a3N5bmNMb2NhbE5vZGUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcsCiAgICBpZDogMjcwLAogICAgbmFtZTogIlpLc3luYyBDTEkgTG9jYWwgTm9kZSIsCiAgICBuZXR3b3JrOiAiemtzeW5jLWNsaS1sb2NhbC1ub2RlIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwOi8vbG9jYWxob3N0OjMwNTAiXQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy96a3N5bmNTZXBvbGlhVGVzdG5ldC5qcwogIHZhciB6a3N5bmNTZXBvbGlhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZywKICAgIGlkOiAzMDAsCiAgICBuYW1lOiAiWktzeW5jIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiemtzeW5jLXNlcG9saWEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLmVyYS56a3N5bmMuZGV2Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3NlcG9saWEuZXJhLnprc3luYy5kZXYvd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS1lcmEuemtzeW5jLm5ldHdvcmsvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1zZXBvbGlhLWVyYS56a3N5bmMubmV0d29yay9hcGkiCiAgICAgIH0sCiAgICAgIG5hdGl2ZTogewogICAgICAgIG5hbWU6ICJaS3N5bmMgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5leHBsb3Jlci56a3N5bmMuaW8vIiwKICAgICAgICBibG9ja0V4cGxvcmVyQXBpOiAiaHR0cHM6Ly9ibG9jay1leHBsb3Jlci1hcGkuc2Vwb2xpYS56a3N5bmMuZGV2L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4RjljZGE2MjRGQkM3ZTA1OTM1NWNlOThhMzE2OTNkMjk5RkFDZDk2MyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvem9yYS5qcwogIHZhciBzb3VyY2VJZDI4ID0gMTsKICB2YXIgem9yYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogNzc3Nzc3NywKICAgIG5hbWU6ICJab3JhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuem9yYS5lbmVyZ3kiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnpvcmEuZW5lcmd5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuem9yYS5lbmVyZ3kiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuem9yYS5lbmVyZ3kvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMjhdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg5RTYyMDRGNzUwY0Q4NjZiMjk5NTk0ZTJhQzllQTgyNEUyZTVmOTVjIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTg4MgogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQyOF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDFhMGFkMDExOTEzQTE1MGY2OWY2QTE5REY0NDdBMENmRDk1NTEwNTQiCiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkMjhdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgzZTJFYTlCOTJCN0U0OEE1MjI5NmZEMjYxZGMyNmZkOTk1Mjg0NjMxIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDI4CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3pvcmFTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMjkgPSAxMTE1NTExMTsKICB2YXIgem9yYVNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDk5OTk5OTk5OSwKICAgIG5hbWU6ICJab3JhIFNlcG9saWEiLAogICAgbmV0d29yazogInpvcmEtc2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJab3JhIFNlcG9saWEiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEucnBjLnpvcmEuZW5lcmd5Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3NlcG9saWEucnBjLnpvcmEuZW5lcmd5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiWm9yYSBTZXBvbGlhIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEuZXhwbG9yZXIuem9yYS5lbmVyZ3kvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NlcG9saWEuZXhwbG9yZXIuem9yYS5lbmVyZ3kvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMjldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgyNjE1QjQ4MUJkM0U1QTFDMEM3Q2EzRGExYmRjNjYzRTg2MTVBZGU5IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogODMxNjAKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMjldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhlZmZFMkM2Y0E5QWI3OTdENDE4ZjBEOTFlQTYwODA3NzEzZjM1MzZmIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDI5XTogewogICAgICAgICAgYWRkcmVzczogIjB4NTM3NmYxRDU0M2RjYkI1QkQ0MTZjNTZDMTg5ZTRjQjczOTlmQ2NDQiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQyOSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvem9yYVRlc3RuZXQuanMKICB2YXIgc291cmNlSWQzMCA9IDU7CiAgdmFyIHpvcmFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiA5OTksCiAgICBuYW1lOiAiWm9yYSBHb2VybGkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJab3JhIEdvZXJsaSIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5ycGMuem9yYS5lbmVyZ3kiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC5ycGMuem9yYS5lbmVyZ3kiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmV4cGxvcmVyLnpvcmEuZW5lcmd5IiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQuZXhwbG9yZXIuem9yYS5lbmVyZ3kvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE4OTEyMwogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQzMF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweERiOUY1MTc5MDM2NWU3ZGMxOTZlN0QwNzI3MjhkZjM5QmU5NThBQ2UiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMzAsCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3ppcmN1aXRUZXN0bmV0LmpzCiAgdmFyIHppcmN1aXRUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0ODg5OSwKICAgIG5hbWU6ICJaaXJjdWl0IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkVUSCIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3ppcmN1aXQxLnAycGlmeS5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJaaXJjdWl0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnppcmN1aXQuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDYwNDAyODcKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQHNjdXJlL2JpcDM5L2VzbS93b3JkbGlzdHMvY3plY2guanMKICB2YXIgd29yZGxpc3QgPSBgYWJkaWthY2UKYWJlY2VkYQphZHJlc2EKYWdyZXNlCmFrY2UKYWt0b3ZrYQphbGVqCmFsa29ob2wKYW1wdXRhY2UKYW5hbmFzCmFuZHVsa2EKYW5la2RvdGEKYW5rZXRhCmFudGlrYQphbnVsb3ZhdAphcmNoYQphcm9nYW5jZQphc2ZhbHQKYXNpc3RlbnQKYXNwaXJhY2UKYXN0bWEKYXN0cm9ub20KYXRsYXMKYXRsZXRpa2EKYXRvbAphdXRvYnVzCmF6eWwKYmFia2EKYmFjaG9yCmJhY2lsCmJhY3Vsa2EKYmFkYXRlbApiYWdldGEKYmFncgpiYWhubwpiYWt0ZXJpZQpiYWxhZGEKYmFsZXRrYQpiYWxrb24KYmFsb25lawpiYWx2YW4KYmFsemEKYmFtYnVzCmJhbmtvbWF0CmJhcmJhcgpiYXJldApiYXJtYW4KYmFyb2tvCmJhcnZhCmJhdGVya2EKYmF0b2gKYmF2bG5hCmJhemFsa2EKYmF6aWxpa2EKYmF6dWthCmJlZG5hCmJlcmFuCmJlc2VkYQpiZXN0aWUKYmV0b24KYmV6aW5rYQpiZXptb2MKYmV6dGFrCmJpY3lrbApiaWRsbwpiaWZ0ZWsKYmlraW55CmJpbGFuY2UKYmlvZ3JhZgpiaW9sb2cKYml0dmEKYml6b24KYmxhaG9ieXQKYmxhdG91Y2gKYmxlY2hhCmJsZWR1bGUKYmxlc2sKYmxpa2F0CmJsaXpuYQpibG9rb3ZhdApibG91ZGl0CmJsdWQKYm9iZWsKYm9icgpib2RsaW5hCmJvZG5vdXQKYm9oYXRvc3QKYm9qa290CmJvam92YXQKYm9rb3J5cwpib2xlc3QKYm9yZWMKYm9yb3ZpY2UKYm90YQpib3ViZWwKYm91Y2hhdApib3VkYQpib3VsZQpib3VyYXQKYm94ZXIKYnJhZGF2a2EKYnJhbWJvcmEKYnJhbmthCmJyYXRyCmJyZXB0YQpicmlrZXRhCmJya28KYnJsb2gKYnJvbnoKYnJvc2tldgpicnVuZXRrYQpicnVzaW5rYQpicnpkYQpicnp5CmJ1YmxpbmEKYnVibm92YXQKYnVjaHRhCmJ1ZGl0ZWwKYnVka2EKYnVkb3ZhCmJ1ZmV0CmJ1amFyb3N0CmJ1a3ZpY2UKYnVsZG9rCmJ1bHZhCmJ1bmRhCmJ1bmtyCmJ1cnphCmJ1dGlrCmJ1dm9sCmJ1em9sYQpieWRsZXQKYnlsaW5hCmJ5dG92a2EKYnp1a290CmNhcGFydApjYXJldm5hCmNlZHIKY2VkdWxlCmNlamNoCmNlam4KY2VsYQpjZWxlcgpjZWxrZW0KY2VsbmljZQpjZW5pbmEKY2Vubm9zdApjZW5vdmthCmNlbnRydW0KY2Vuem9yCmNlc3RvcGlzCmNldGthCmNoYWx1cGEKY2hhcGFkbG8KY2hhcml0YQpjaGF0YQpjaGVjaHRhdApjaGVtaWUKY2hpY2hvdApjaGlydXJnCmNobGFkCmNobGViYQpjaGx1Yml0CmNobWVsCmNobXVyYQpjaG9ib3QKY2hvY2hvbApjaG9kYmEKY2hvbGVyYQpjaG9tb3V0CmNob3BpdApjaG9yb2JhCmNob3YKY2hyYXBvdApjaHJsaXQKY2hydApjaHJ1cApjaHRpdm9zdApjaHVkaW5hCmNodXRuYXQKY2h2YXQKY2h2aWxrYQpjaHZvc3QKY2h5YmEKY2h5c3RhdApjaHl0aXQKY2lidWxlCmNpZ2FyZXRhCmNpaGVsbmEKY2lobGEKY2lua290CmNpcmt1cwpjaXN0ZXJuYQpjaXRhY2UKY2l0cnVzCmNpemluZWMKY2l6b3N0CmNsb25hCmNva29saXYKY291dmF0CmN0aXRlbApjdG5vc3QKY3Vkbm9zdApjdWtldGEKY3VrcgpjdXBvdApjdmFrbm91dApjdmFsCmN2aWsKY3Zya290CmN5a2xpc3RhCmRhbGVrbwpkYXJlYmEKZGF0ZWwKZGF0dW0KZGNlcmEKZGViYXRhCmRlY2hvdmthCmRlY2liZWwKZGVmaWNpdApkZWZsYWNlCmRla2wKZGVrcmV0CmRlbW9rcmF0CmRlcHJlc2UKZGVyYnkKZGVza2EKZGV0ZWt0aXYKZGlrb2JyYXoKZGlrdG92YXQKZGlvZGEKZGlwbG9tCmRpc2sKZGlzcGxlagpkaXZhZGxvCmRpdm9jaApkbGFoYQpkbG91aG8KZGx1aG9waXMKZG5lcwpkb2Jybwpkb2J5dGVrCmRvY2VudApkb2NodXRpdApkb2RuZXMKZG9obGVkCmRvaG9kYQpkb2hyYQpkb2plbQpkb2puaWNlCmRva2xhZApkb2tvbGEKZG9rdG9yCmRva3VtZW50CmRvbGFyCmRvbGV2YQpkb2xpbmEKZG9tYQpkb21pbmFudApkb21sdXZpdApkb21vdgpkb251dGl0CmRvcGFkCmRvcGlzCmRvcGxuaXQKZG9wb3N1ZApkb3Byb3ZvZApkb3B1c3RpdApkb3Jheml0CmRvcm9zdApkb3J0CmRvc2FoCmRvc2xvdgpkb3N0YXRlawpkb3N1ZApkb3N5dGEKZG90YXoKZG90ZWsKZG90a25vdXQKZG91ZmF0CmRvdXRuYXQKZG92b3pjZQpkb3phZHUKZG96bmF0CmRvem9yY2UKZHJhaG90YQpkcmFrCmRyYW1hdGlrCmRyYXZlYwpkcmF6ZQpkcmRvbApkcm9ibm9zdApkcm9nZXJpZQpkcm96ZApkcnNub3N0CmRydGl0CmRyem9zdApkdWJlbgpkdWNob3ZubwpkdWRlawpkdWhhCmR1aG92a2EKZHVzaXQKZHVzbm8KZHV0b3N0CmR2b2ppY2UKZHZvcmVjCmR5bmFtaXQKZWtvbG9nCmVrb25vbWllCmVsZWt0cm9uCmVsaXBzYQplbWFpbAplbWlzZQplbW9jZQplbXBhdGllCmVwaXpvZGEKZXBvY2hhCmVwb3BlagplcG9zCmVzZWoKZXNlbmNlCmVza29ydGEKZXNreW1vCmV0aWtldGEKZXVmb3JpZQpldm9sdWNlCmV4ZWt1Y2UKZXhrdXJ6ZQpleHBlZGljZQpleHBsb3plCmV4cG9ydApleHRyYWt0CmZhY2thCmZhamZrYQpmYWt1bHRhCmZhbmF0aWsKZmFudGF6aWUKZmFybWFjaWUKZmF2b3JpdApmYXpvbGUKZmVkZXJhY2UKZmVqZXRvbgpmZW5rYQpmaWFsa2EKZmlndXJhbnQKZmlsb3pvZgpmaWx0cgpmaW5hbmNlCmZpbnRhCmZpeGFjZQpmam9yZApmbGFuZWwKZmxpcnQKZmxvdGlsYQpmb25kCmZvc2Zvcgpmb3RiYWwKZm90a2EKZm90b24KZnJha2NlCmZyZXNrYQpmcm9udGEKZnVrYXIKZnVua2NlCmZ5emlrYQpnYWxlamUKZ2FyYW50CmdlbmV0aWthCmdlb2xvZwpnaWxvdGluYQpnbGF6dXJhCmdsZWp0CmdvbGVtCmdvbGZpc3RhCmdvdGlrYQpncmFmCmdyYW1vZm9uCmdyYW51bGUKZ3JlcApncmlsCmdyb2cKZ3JvdGVza2EKZ3VtYQpoYWRpY2UKaGFkcgpoYWxhCmhhbGVua2EKaGFuYmEKaGFub3BpcwpoYXJmYQpoYXJwdW5hCmhhdnJhbgpoZWJrb3N0CmhlamthbApoZWpubwpoZWp0bWFuCmhla3RhcgpoZWxtYQpoZW1hdG9tCmhlcmVjCmhlcm5hCmhlc2xvCmhlemt5Cmhpc3RvcmlrCmhsYWRvdmthCmhsYXNpdmt5CmhsYXZhCmhsZWRhdApobGVuCmhsb2RhdmVjCmhsb2gKaGxvdXBvc3QKaGx0YXQKaGx1YmluYQpobHVjaG90YQpobWF0Cmhtb3RhCmhteXoKaG5pcwpobm9qaXZvCmhub3V0CmhvYmxpbmEKaG9ib2oKaG9jaApob2RpbnkKaG9kbGF0CmhvZG5vdGEKaG9kb3ZhdApob2pub3N0Cmhva2VqCmhvbGlua2EKaG9sa2EKaG9sdWIKaG9tb2xlCmhvbml0YmEKaG9ub3JhY2UKaG9yYWwKaG9yZGEKaG9yaXpvbnQKaG9ya28KaG9ybGl2ZWMKaG9ybW9uCmhvcm5pbmEKaG9yb3Nrb3AKaG9yc3R2bwpob3Nwb2RhCmhvc3RpbmEKaG90b3Zvc3QKaG91YmEKaG91Zgpob3VwYXQKaG91c2thCmhvdm9yCmhyYWRiYQpocmFuaWNlCmhyYXZvc3QKaHJhemRhCmhyYm9sZWsKaHJkaW5hCmhyZGxvCmhyZG9zdApocm5lawpocm9ia2EKaHJvbWFkYQpocm90Cmhyb3VkYQpocm96ZW4KaHJzdGthCmhydWJvc3QKaHJ5emF0Cmh1YmVub3N0Cmh1Ym5vdXQKaHVkYmEKaHVrb3QKaHVtcgpodXNpdGEKaHVzdG90YQpodm96ZApoeWJub3N0Cmh5ZHJhbnQKaHlnaWVuYQpoeW1uYQpoeXN0ZXJpawppZHlsa2EKaWhuZWQKaWtvbmEKaWx1emUKaW11bml0YQppbmZla2NlCmluZmxhY2UKaW5rYXNvCmlub3ZhY2UKaW5zcGVrY2UKaW50ZXJuZXQKaW52YWxpZGEKaW52ZXN0b3IKaW56ZXJjZQppcm9uaWUKamFibGtvCmphY2h0YQpqYWhvZGEKamFrbWlsZQpqYWtvc3QKamFsb3ZlYwpqYW50YXIKamFybWFyawpqYXJvCmphc2FuCmphc25vCmphdGthCmphdm9yCmphenlrCmplZGluZWMKamVkbGUKamVkbmF0ZWwKamVobGFuCmpla290CmplbGVuCmplbGl0bwpqZW1ub3N0Cmplbm9tCmplcGljZQpqZXNldGVyCmpldml0CmplemRlYwpqZXplcm8KamluYWsKamluZHkKamlub2NoCmppc2tyYQpqaXN0b3RhCmppdHJuaWNlCmppenZhCmptZW5vdmF0CmpvZ3VydApqdXJ0YQprYWJhcmV0CmthYmVsCmthYmluZXQKa2FjaG5hCmthZGV0CmthZGlkbG8Ka2FoYW4Ka2FqYWsKa2FqdXRhCmtha2FvCmtha3R1cwprYWxhbWl0YQprYWxob3R5CmthbGlicgprYWxub3N0CmthbWVyYQprYW1rb2xpdgprYW1uYQprYW5pYmFsCmthbm9lCmthbnRvcgprYXBhbGluYQprYXBlbGEKa2FwaXRvbGEKa2Fwa2EKa2FwbGUKa2Fwb3RhCmthcHIKa2FwdXN0YQprYXB5YmFyYQprYXJhbWVsCmthcm90a2EKa2FydG9uCmthc2EKa2F0YWxvZwprYXRlZHJhCmthdWNlCmthdXphCmthdmFsZWMKa2F6YWprYQprYXpldGEKa2F6aXZvc3QKa2Rla29saXYKa2Rlc2kKa2VkbHViZW4Ka2VtcAprZXJhbWlrYQpraW5vCmtsYWNlawprbGFkaXZvCmtsYW0Ka2xhcG90CmtsYXNpa2EKa2xhdW4Ka2xlYwprbGVuYmEKa2xlcGF0CmtsZXNub3V0CmtsaWQKa2xpbWEKa2xpc25hCmtsb2JvdWsKa2xva2FuCmtsb3BhCmtsb3ViCmtsdWJvdm5hCmtsdXNhdAprbHV6a29zdAprbWVuCmttaXRhdAprbW90cgprbmloYQprbm90CmtvYWxpY2UKa29iZXJlYwprb2JrYQprb2JsaWhhCmtvYnlsYQprb2NvdXIKa29ob3V0CmtvamVuZWMKa29rb3MKa29rdGVqbAprb2xhcHMKa29sZWRhCmtvbGl6ZQprb2xvCmtvbWFuZG8Ka29tZXRhCmtvbWlrCmtvbW5hdGEKa29tb3JhCmtvbXBhcwprb211bml0YQprb25hdAprb25jZXB0CmtvbmRpY2UKa29uZWMKa29uZmVzZQprb25ncmVzCmtvbmluYQprb25rdXJzCmtvbnRha3QKa29uemVydmEKa29wYW5lYwprb3BpZQprb3Bub3V0CmtvcHJvdmthCmtvcmJlbAprb3Jla3Rvcgprb3JtaWRsbwprb3JvcHRldgprb3JwdXMKa29ydW5hCmtvcnl0bwprb3J6ZXQKa29zYXRlYwprb3N0a2EKa290ZWwKa290bGV0YQprb3RvdWwKa291a2F0CmtvdXBlbG5hCmtvdXNlawprb3V6bG8Ka292Ym9qCmtvemEKa296b3JvaAprcmFiaWNlCmtyYWNoCmtyYWppbmEKa3JhbG92YXQKa3Jhc29waXMKa3JhdmF0YQprcmVkaXQKa3JlamNhcgprcmVzYmEKa3JldmV0YQprcmlrZXQKa3JpdGlrCmtyaXplCmtya2F2ZWMKa3JtZWxlYwprcm1pdm8Ka3JvY2FuCmtyb2sKa3JvbmlrYQprcm9waXQKa3JvdXBhCmtyb3ZrYQprcnRlawprcnVoYWRsbwprcnVwaWNlCmtydXRvc3QKa3J2aW5rYQprcnljaGxlCmtyeXB0YQprcnlzdGFsCmtyeXQKa3VkbGFua2EKa3VmcgprdWpub3N0Cmt1a2xhCmt1bGFqZGEKa3VsaWNoCmt1bGthCmt1bG9tZXQKa3VsdHVyYQprdW5hCmt1cG9kaXZ1Cmt1cnQKa3Vyem9yCmt1dGlsCmt2YWxpdGEKa3Zhc2lua2EKa3Zlc3RvcgpreW5vbG9nCmt5c2VsaW5hCmt5dGFyYQpreXRpY2UKa3l0a2EKa3l0b3ZlYwpreXZhZGxvCmxhYnJhZG9yCmxhY2h0YW4KbGFkbm9zdApsYWlrCmxha29tZWMKbGFtZWxhCmxhbXBhCmxhbm92a2EKbGFzaWNlCmxhc28KbGFzdHVyYQpsYXRpbmthCmxhdmluYQpsZWJrYQpsZWNrZHkKbGVkZW4KbGVkbmljZQpsZWRvdmthCmxlZHZpbmEKbGVnZW5kYQpsZWdpZQpsZWdyYWNlCmxlaGNlCmxlaGtvc3QKbGVobm91dApsZWt0dmFyCmxlbm9jaG9kCmxlbnRpbGthCmxlcGVua2EKbGVwaWRsbwpsZXRhZGxvCmxldGVjCmxldG1vCmxldG9rcnVoCmxldmhhcnQKbGV2aXRhY2UKbGV2b2JvawpsaWJyYQpsaWNob3RrYQpsaWRvamVkCmxpZHNrb3N0CmxpaG92aW5hCmxpamF2ZWMKbGlsZWsKbGltZXRrYQpsaW5pZQpsaW5rYQpsaW5vbGV1bQpsaXN0b3BhZApsaXRpbmEKbGl0b3ZhdApsb2Jpc3RhCmxvZGl2b2QKbG9naWthCmxvZ29wZWQKbG9rYWxpdGEKbG9rZXQKbG9tY292YXQKbG9wYXRhCmxvcHVjaApsb3JkCmxvc29zCmxvdHIKbG91ZGFsCmxvdWgKbG91a2EKbG91c2thdApsb3ZlYwpsc3Rpdm9zdApsdWNlcm5hCmx1Y2lmZXIKbHVtcApsdXNrCmx1c3RyYWNlCmx2aWNlCmx5cmEKbHlyaWthCmx5c2luYQptYWRhbQptYWRsbwptYWdpc3RyCm1haGFnb24KbWFqZXRlawptYWppdGVsCm1ham9yaXRhCm1ha2FrCm1ha292aWNlCm1ha3JlbGEKbWFsYmEKbWFsaW5hCm1hbG92YXQKbWFsdmljZQptYW1pbmthCm1hbmRsZQptYW5rbwptYXJub3N0Cm1hc2FrcgptYXNrb3QKbWFzb3B1c3QKbWF0aWNlCm1hdHJpa2EKbWF0dXJpdGEKbWF6YW5lYwptYXppdm8KbWF6bGl0Cm1henVya2EKbWRsb2JhCm1lY2hhbmlrCm1lZGl0YWNlCm1lZG92aW5hCm1lbGFzYQptZWxvdW4KbWVudG9sa2EKbWV0bGEKbWV0b2RhCm1ldHIKbWV6ZXJhCm1pZ3JhY2UKbWlobm91dAptaWh1bGUKbWlraW5hCm1pa3JvZm9uCm1pbGVuZWMKbWlsaW1ldHIKbWlsb3N0Cm1pbWlrYQptaW5jb3ZuYQptaW5pYmFyCm1pbm9tZXQKbWludWxvc3QKbWlza2EKbWlzdHIKbWl4b3ZhdAptbGFkb3N0Cm1saGEKbWxob3ZpbmEKbWxvawptbHNhdAptbHV2aXQKbW5pY2gKbW5vaGVtCm1vYmlsCm1vY25vc3QKbW9kZWxrYQptb2RsaXRiYQptb2h5bGEKbW9rcm8KbW9sZWt1bGEKbW9tZW50a2EKbW9uYXJjaGEKbW9ub2tsCm1vbnN0cnVtCm1vbnRvdmF0Cm1vbnp1bgptb3Nhegptb3NreXQKbW9zdAptb3RpdmFjZQptb3RvcmthCm1vdHlrYQptb3VjaGEKbW91ZHJvc3QKbW96YWlrYQptb3plawptb3pvbAptcmFtb3IKbXJhdmVuZWMKbXJrZXYKbXJ0dm9sYQptcnpldAptcnp1dG9zdAptc3RpdGVsCm11ZHJjCm11ZmxvbgptdWxhdAptdW1pZQptdW5pY2UKbXVzZXQKbXV0YWNlCm11emV1bQptdXppa2FudApteXNsaXZlYwptemRhCm5hYm91cmF0Cm5hY2h5dGF0Cm5hZGFjZQpuYWRieXRlawpuYWRob3oKbmFkb2JybwpuYWRwaXMKbmFobGFzCm5haG5hdApuYWhvZGlsZQpuYWhyYWRpdApuYWl2aXRhCm5hamVkbm91Cm5hamlzdG8KbmFqbW91dApuYWtsb25pdApuYWtvbmVjCm5ha3JtaXQKbmFsZXZvCm5hbWF6YXQKbmFtbHV2aXQKbmFub21ldHIKbmFva28KbmFvcGFrCm5hb3N0cm8KbmFwYWRhdApuYXBldm5vCm5hcGxuaXQKbmFwbm91dApuYXBvc2xlZApuYXByb3N0bwpuYXJvZGl0Cm5hcnVieQpuYXJ5Y2hsbwpuYXNhZGl0Cm5hc2VrYXQKbmFzbGVwbwpuYXN0YXQKbmF0b2xpawpuYXZlbmVrCm5hdnJjaApuYXZ6ZG9yeQpuYXp2YXQKbmViZQpuZWNoYXQKbmVja3kKbmVkYWxla28KbmVkYmF0Cm5lZHVoCm5lZ2FjZQpuZWhldApuZWhvZGEKbmVqZW4KbmVqcHJ2ZQpuZWtsaWQKbmVsaWJvc3QKbmVtaWxvc3QKbmVtb2MKbmVvY2hvdGEKbmVvbmthCm5lcG9rb2oKbmVyb3N0Cm5lcnYKbmVzbXlzbApuZXNvdWxhZApuZXR2b3IKbmV1cm9uCm5ldmluYQpuZXp2eWtsZQpuaWNvdGEKbmlqYWsKbmlrYW0KbmlrZHkKbmlrbApuaWt0ZXJhawpuaXRybwpub2NsZWgKbm9oYXZpY2UKbm9taW5hY2UKbm9yYQpub3Jlawpub3NpdGVsCm5vc25vc3QKbm91emUKbm92aW55Cm5vdm90YQpub3pkcmEKbnVkYQpudWRsZQpudWdldApudXRpdApudXRub3N0Cm51dHJpZQpueW1mYQpvYmFsCm9iYXJ2aXQKb2JhdmEKb2JkaXYKb2JlYwpvYmVobmF0Cm9iZWptb3V0Cm9iZXppdGEKb2JoYWpvYmEKb2JpbG5pY2UKb2JqYXNuaXQKb2JqZWt0Cm9ia2xvcGl0Cm9ibGFzdApvYmxlawpvYmxpYmEKb2Jsb2hhCm9ibHVkYQpvYm5vcwpvYm9oYXRpdApvYm9qZWsKb2JvdXQKb2JyYXplYwpvYnJuYQpvYnJ1YmEKb2JyeXMKb2JzYWgKb2JzbHVoYQpvYnN0YXJhdApvYnV2Cm9idmF6Cm9idmluaXQKb2J2b2QKb2J2eWtsZQpvYnl2YXRlbApvYnpvcgpvY2FzCm9jZWwKb2Nlbml0Cm9jaGxhZGl0Cm9jaG90YQpvY2hyYW5hCm9jaXRub3V0Cm9kYm9qCm9kYnl0Cm9kY2hvZApvZGNpeml0Cm9kZWJyYXQKb2Rlc2xhdApvZGV2emRhdApvZGV6dmEKb2RoYWRjZQpvZGhvZGl0Cm9kamV0Cm9kamludWQKb2RrYXoKb2Rrb3VwaXQKb2RsaXYKb2RsdWthCm9kbWxrYQpvZG9sbm9zdApvZHBhZApvZHBpcwpvZHBsb3V0Cm9kcG9yCm9kcHVzdGl0Cm9kcHlrYXQKb2RyYXprYQpvZHNvdWRpdApvZHN0dXAKb2RzdW4Kb2R0b2sKb2R0dWQKb2R2YWhhCm9kdmV0YQpvZHZvbGF0Cm9kdnJhY2V0Cm9kem5hawpvZmluYQpvZnNhamQKb2hsYXMKb2huaXNrbwpvaHJhZGEKb2hyb3ppdApvaHJ5emVrCm9rYXAKb2tlbmljZQpva2xpa2EKb2tubwpva291emxpdApva292eQpva3Jhc2EKb2tyZXMKb2tyc2VrCm9rcnVoCm9rdXBhbnQKb2t1cmthCm9rdXNpdApvbGVqbmluYQpvbGl6b3ZhdApvbWFrCm9tZWxldGEKb21leml0Cm9tbGFkaW5hCm9tbG91dmF0Cm9tbHV2YQpvbXlsCm9uZWhkeQpvcGFrb3ZhdApvcGFzZWsKb3BlcmFjZQpvcGljZQpvcGlsb3N0Cm9waXNvdmF0Cm9wb3JhCm9wb3ppY2UKb3ByYXZkdQpvcHJvdGkKb3JiaXRhbApvcmNoZXN0cgpvcmdpZQpvcmxpY2UKb3Jsb2oKb3J0ZWwKb3NhZGEKb3NjaG5vdXQKb3Npa2EKb3Npdm8Kb3NsYXZhCm9zbGVwaXQKb3Nsbml0Cm9zbG92aXQKb3Nub3ZhCm9zb2JhCm9zb2xpdApvc3BhbGVjCm9zdGVuCm9zdHJhaGEKb3N0dWRhCm9zdHljaApvc3Zvaml0Cm90ZXBsaXQKb3Rpc2sKb3RvcApvdHJoYXQKb3RybG9zdApvdHJvawpvdHJ1YnkKb3R2b3IKb3Zhbm91dApvdmFyCm92ZXMKb3ZsaXZuaXQKb3ZvY2UKb3hpZApvemRvYmEKcGFjaGF0ZWwKcGFjaWVudApwYWRvdWNoCnBhaG9yZWsKcGFrdApwYWxhbmRhCnBhbGVjCnBhbGl2bwpwYWx1YmEKcGFtZmxldApwYW1sc2VrCnBhbmVua2EKcGFuaWthCnBhbm5hCnBhbm92YXQKcGFuc3R2bwpwYW50b2ZsZQpwYXByaWthCnBhcmtldGEKcGFyb2RpZQpwYXJ0YQpwYXJ1a2EKcGFyeWJhCnBhc2VrYQpwYXNpdml0YQpwYXN0ZWxrYQpwYXRlbnQKcGF0cm9uYQpwYXZvdWsKcGF6bmVodApwYXpvdXJlawpwZWNrYQpwZWRhZ29nCnBlanNlawpwZWtsbwpwZWxvdG9uCnBlbmFsdGEKcGVuZHJlawpwZW56ZQpwZXJpc2tvcApwZXJvCnBlc3Ryb3N0CnBldGFyZGEKcGV0aWNlCnBldHJvbGVqCnBldm5pbmEKcGV4ZXNvCnBpYW5pc3RhCnBpaGEKcGlqYXZpY2UKcGlrbGUKcGlrbmlrCnBpbGluYQpwaWxub3N0CnBpbHVsa2EKcGluemV0YQpwaXBldGEKcGlzYXRlbApwaXN0b2xlCnBpdGV2bmEKcGl2bmljZQpwaXZvdmFyCnBsYWNlbnRhCnBsYWthdApwbGFtZW4KcGxhbmV0YQpwbGFzdGlrYQpwbGF0aXQKcGxhdmlkbG8KcGxhegpwbGVjaApwbGVtZW5vCnBsZW50YQpwbGVzCnBsZXRpdm8KcGxldmVsCnBsaXZhdApwbG5pdApwbG5vCnBsb2NoYQpwbG9kaW5hCnBsb21iYQpwbG91dApwbHVrCnBseW4KcG9iYXZpdApwb2J5dApwb2Nob2QKcG9jaXQKcG9jdGl2ZWMKcG9kYXQKcG9kY2VuaXQKcG9kZXBzYXQKcG9kaGxlZApwb2Rpdml0CnBvZGtsYWQKcG9kbWFuaXQKcG9kbmlrCnBvZG9iYQpwb2Rwb3JhCnBvZHJhegpwb2RzdGF0YQpwb2R2b2QKcG9kemltCnBvZXppZQpwb2hhbmthCnBvaG51dGthCnBvaG92b3IKcG9ocm9tYQpwb2h5Ygpwb2ludGEKcG9qaXN0a2EKcG9qbW91dApwb2theml0CnBva2xlcwpwb2tvagpwb2tyb2sKcG9rdXRhCnBva3luCnBvbGVkbmUKcG9saWJlawpwb2xrbm91dApwb2xvaGEKcG9seW5vbQpwb21hbHUKcG9taW5vdXQKcG9tbGthCnBvbW9jCnBvbXN0YQpwb215c2xldApwb25lY2hhdApwb25vcmthCnBvbnVyb3N0CnBvcGFkYXQKcG9wZWwKcG9waXNlawpwb3BsYWNoCnBvcHJvc2l0CnBvcHNhdApwb3B1ZApwb3JhZGNlCnBvcmNlCnBvcm9kCnBvcnVjaGEKcG9yeXYKcG9zYWRpdApwb3NlZApwb3NpbGEKcG9za29rCnBvc2xhbmVjCnBvc291ZGl0CnBvc3BvbHUKcG9zdGF2YQpwb3N1ZGVrCnBvc3lwCnBvdGFoCnBvdGthbgpwb3RsZXNrCnBvdG9tZWsKcG90cmF2YQpwb3R1cGEKcG90dm9yYQpwb3VrYXoKcG91dG8KcG91emRybwpwb3ZhaGEKcG92aWRsYQpwb3ZsYWsKcG92b3oKcG92cmNoCnBvdnN0YXQKcG92eWsKcG92emRlY2gKcG96ZHJhdgpwb3plbWVrCnBvem5hdGVrCnBvem9yCnBvenZhdApwcmFjb3ZhdApwcmFob3J5CnByYWt0aWthCnByYWxlcwpwcmFvdGVjCnByYXBvcmVrCnByYXNlCnByYXZkYQpwcmluY2lwCnBya25vCnByb2J1ZGl0CnByb2NlbnRvCnByb2Rlagpwcm9mZXNlCnByb2hyYQpwcm9qZWt0CnByb2xvbWl0CnByb21pbGUKcHJvbmlrYXQKcHJvcGFkCnByb3Jvawpwcm9zYmEKcHJvdG9uCnByb3V0ZWsKcHJvdmF6CnByc2thdmthCnByc3RlbgpwcnVka29zdApwcnV0CnBydmVrCnBydm9ob3J5CnBzYW5lYwpwc292b2QKcHN0cnVoCnB0YWN0dm8KcHViZXJ0YQpwdWNoCnB1ZGwKcHVrYXZlYwpwdWtsaW5hCnB1a3JsZQpwdWx0CnB1bXBhCnB1bmMKcHVwZW4KcHVzYQpwdXNpbmthCnB1c3RpbmEKcHV0b3ZhdApwdXR5a2EKcHlyYW1pZGEKcHlzawpweXRlbApyYWNlawpyYWNob3QKcmFkaWFjZQpyYWRuaWNlCnJhZG9uCnJhZnQKcmFnYnkKcmFrZXRhCnJha292aW5hCnJhbWVubwpyYW1wb3VjaApyYW5kZQpyYXJhY2gKcmFyaXRhCnJhc292bmEKcmFzdHIKcmF0b2xlc3QKcmF6YW5jZQpyYXppZGxvCnJlYWdvdmF0CnJlYWtjZQpyZWNlcHQKcmVkYWt0b3IKcmVmZXJlbnQKcmVmbGV4CnJlam5vawpyZWtsYW1hCnJla29yZApyZWtydXQKcmVrdG9yCnJlcHV0YWNlCnJldml6ZQpyZXZtYQpyZXZvbHZlcgpyZXplcnZhCnJpc2tvdmF0CnJpemlrbwpyb2JvdGlrYQpyb2Rva21lbgpyb2hvdmthCnJva2xlCnJva29rbwpyb21hbmV0bwpyb3Bvdm9kCnJvcHVjaGEKcm9yZWpzCnJvc29sCnJvc3RsaW5hCnJvdG1pc3RyCnJvdG9wZWQKcm90dW5kYQpyb3ViZW5rYQpyb3VjaG8Kcm91cApyb3VyYQpyb3ZpbmEKcm92bmljZQpyb3pib3IKcm96Y2hvZApyb3pkYXQKcm96ZXpuYXQKcm96aG9kY2UKcm96aW5rYQpyb3pqZXpkCnJvemthegpyb3psb2hhCnJvem1hcgpyb3pwYWQKcm96cnVjaApyb3pzYWgKcm96dG9rCnJvenVtCnJvenZvZApydWJyaWthCnJ1Y2hhZGxvCnJ1a2F2aWNlCnJ1a29waXMKcnliYQpyeWJvbG92CnJ5Y2hsb3N0CnJ5ZGxvCnJ5cGFkbG8Kcnl0aW5hCnJ5em9zdApzYWRpc3RhCnNhaGF0CnNha28Kc2FtZWMKc2FtaXpkYXQKc2Ftb3RhCnNhbml0a2EKc2FyZGlua2EKc2FzYW5rYQpzYXRlbGl0CnNhemJhCnNhemVuaWNlCnNib3IKc2Nob3ZhdApzZWJyYW5rYQpzZWNlc2UKc2VkYWRsbwpzZWRpbWVudApzZWRsbwpzZWhuYXQKc2VqbW91dApzZWtlcmEKc2VrdGEKc2VrdW5kYQpzZWt2b2plCnNlbWVubwpzZW5vCnNlcnZpcwpzZXNhZGl0CnNlc2hvcmEKc2Vza29rCnNlc2xhdApzZXN0cmEKc2VzdXYKc2VzeXBhdApzZXRiYQpzZXRpbmEKc2V0a2F0CnNldG5vdXQKc2V0cnZhdApzZXZlcgpzZXpuYW0Kc2hvZGEKc2hybm91dApzaWZvbgpzaWxuaWNlCnNpcmthCnNpcm90ZWsKc2lydXAKc2l0dWFjZQpza2FmYW5kcgpza2FsaXNrbwpza2FuemVuCnNrYXV0CnNrZXB0aWsKc2tpY2EKc2tsYWRiYQpza2xlbmljZQpza2xvCnNrbHV6CnNrb2JhCnNrb2thbgpza29ybwpza3JpcHRhCnNrcnoKc2t1cGluYQpza3Zvc3QKc2t2cm5hCnNsYWJpa2EKc2xhZGlkbG8Kc2xhbmluYQpzbGFzdApzbGF2bm9zdApzbGVkb3ZhdApzbGVwZWMKc2xldmEKc2xlemluYQpzbGliCnNsaW5hCnNsaXpuaWNlCnNsb24Kc2xvdXBlawpzbG92bwpzbHVjaApzbHVoYQpzbHVuY2UKc2x1cGthCnNsemEKc21hcmFnZApzbWV0YW5hCnNtaWxzdHZvCnNtbG91dmEKc21vZwpzbXJhZApzbXJrCnNtcnRrYQpzbXV0ZWsKc215c2wKc25hZApzbmFoYQpzbm9iCnNvYm90YQpzb2NoYQpzb2RvdmthCnNva29sCnNvcGthCnNvdHZhCnNvdWJvagpzb3VjaXQKc291ZGNlCnNvdWhsYXMKc291bGFkCnNvdW1yYWsKc291cHJhdmEKc291c2VkCnNvdXRvawpzb3V2aXNldApzcGFsb3ZuYQpzcGFzaXRlbApzcGlzCnNwbGF2CnNwb2RlawpzcG9qZW5lYwpzcG9sdQpzcG9uem9yCnNwb3Jub3N0CnNwb3VzdGEKc3ByY2hhCnNwdXN0aXQKc3JhbmRhCnNyYXoKc3JkY2UKc3JuYQpzcm5lYwpzcm92bmF0CnNycGVuCnNyc3QKc3J1YgpzdGFuaWNlCnN0YXJvc3RhCnN0YXRpa2EKc3RhdmJhCnN0ZWhubwpzdGV6a2EKc3RvZG9sYQpzdG9sZWsKc3RvcGEKc3Rvcm5vCnN0b3VwYXQKc3RyYWNoCnN0cmVzCnN0cmhub3V0CnN0cm9tCnN0cnVuYQpzdHVkbmEKc3R1cG5pY2UKc3R2b2wKc3R5awpzdWJqZWt0CnN1YnRyb3B5CnN1Y2hhcgpzdWRvc3QKc3Vrbm8Kc3VuZGF0CnN1bm91dApzdXJpa2F0YQpzdXJvdmluYQpzdmFoCnN2YWxzdHZvCnN2ZXRyCnN2YXRiYQpzdmF6ZWsKc3Zpc2xlCnN2aXRlawpzdm9ib2RhCnN2b2RpZGxvCnN2b3JrYQpzdnJhYgpzeWthdmthCnN5a290CnN5bmVrCnN5bm92ZWMKc3lwYXQKc3lwa29zdApzeXJvdm9zdApzeXNlbApzeXRvc3QKdGFibGV0a2EKdGFidWxlCnRhaG91bgp0YWplbW5vCnRhamZ1bgp0YWpnYQp0YWppdAp0YWpub3N0CnRha3Rpa2EKdGFtaGxlCnRhbXBvbgp0YW5jb3ZhdAp0YW5lYwp0YW5rZXIKdGFwZXRhCnRhdmVuaW5hCnRhemF0ZWwKdGVjaG5pa2EKdGVoZHkKdGVrdXRpbmEKdGVsZWZvbgp0ZW1ub3RhCnRlbmRlbmNlCnRlbmlzdGEKdGVub3IKdGVwbG90YQp0ZXBuYQp0ZXBydmUKdGVyYXBpZQp0ZXJtb3NrYQp0ZXh0aWwKdGljaG8KdGlza29waXMKdGl0dWxlawp0a2FkbGVjCnRrYW5pbmEKdGxhcGthCnRsZXNrYXQKdGx1a290CnRsdXBhCnRtZWwKdG9hbGV0YQp0b3BpbmthCnRvcG9sCnRvcnpvCnRvdWhhCnRvdWxlYwp0cmFkaWNlCnRyYWt0b3IKdHJhbXAKdHJhc2EKdHJhdmVyemEKdHJlZml0CnRyZXN0CnRyZXpvcgp0cmhhdmluYQp0cmhsaW5hCnRyb2NodQp0cm9qaWNlCnRyb3NrYQp0cm91YmEKdHJwY2UKdHJwaXRlbAp0cnBrb3N0CnRydWJlYwp0cnVjaGxpdAp0cnVobGljZQp0cnVzCnRydmF0CnR1ZHkKdHVobm91dAp0dWhvc3QKdHVuZHJhCnR1cmlzdGEKdHVybmFqCnR1emVtc2tvCnR2YXJvaAp0dm9yYmEKdHZyZG9zdAp0dnJ6CnR5Z3IKdHlrZXYKdWJvaG9zdAp1Ym96ZQp1YnJhdAp1YnJvdXNlawp1YnJ1cwp1Ynl0b3ZuYQp1Y2hvCnVjdGl2b3N0CnVkaXZpdAp1aHJhZGl0CnVqZWRuYXQKdWppc3RpdAp1am1vdXQKdWthemF0ZWwKdWtsaWRuaXQKdWtsb25pdAp1a290dml0CnVrcm9qaXQKdWxpY2UKdWxpdGEKdWxvdml0CnVteXZhZGxvCnVuYXZpdAp1bmlmb3JtYQp1bmlrbm91dAp1cGFkbm91dAp1cGxhdG5pdAp1cGx5bm91dAp1cG91dGF0CnVwcmF2aXQKdXJhbgp1cmF6aXQKdXNlZG5vdXQKdXNpbG92YXQKdXNtcnRpdAp1c25hZG5pdAp1c25vdXQKdXNvdWRpdAp1c3RsYXQKdXN0cm5vdXQKdXRhaG92YXQKdXRrYXQKdXRsdW1pdAp1dG9ub3V0CnV0b3BlbmVjCnV0cm91c2l0CnV2YWxpdAp1dm9sbml0CnV2b3pvdmthCnV6ZHJhdml0CnV6ZWwKdXplbmluYQp1emxpbmEKdXpuYXQKdmFnb24KdmFsY2hhCnZhbG91bgp2YW5hCnZhbmRhbAp2YW5pbGthCnZhcmFuCnZhcmhhbnkKdmFyb3ZhdAp2Y2Vsa3UKdmNob2QKdmRvdmEKdmVkcm8KdmVnZXRhY2UKdmVqY2UKdmVsYmxvdWQKdmVsZXRyaAp2ZWxpdGVsCnZlbG1vYwp2ZWxyeWJhCnZlbmtvdgp2ZXJhbmRhCnZlcnplCnZlc2Vsa2EKdmVza3J6ZQp2ZXNuaWNlCnZlc3BvZHUKdmVzdGEKdmV0ZXJpbmEKdmV2ZXJrYQp2aWJyYWNlCnZpY2hyCnZpZGVvaHJhCnZpZGluYQp2aWRsZQp2aWxhCnZpbmljZQp2aXNldAp2aXRhbGl0YQp2aXplCnZpeml0a2EKdmplemQKdmtsYWQKdmt1cwp2bGFqa2EKdmxhawp2bGFzZWMKdmxldm8Kdmxoa29zdAp2bGl2CnZsbm92a2EKdmxvdXBhdAp2bnVjb3ZhdAp2bnVrCnZvZGEKdm9kaXZvc3QKdm9kb3puYWsKdm9kc3R2bwp2b2plbnNreQp2b2puYQp2b2pza28Kdm9sYW50CnZvbGJhCnZvbGl0CnZvbG5vCnZvc2tvdmthCnZvemlkbG8Kdm96b3ZuYQp2cHJhdm8KdnJhYmVjCnZyYWNldAp2cmFoCnZyYXRhCnZyYmEKdnJjaG9sZWsKdnJoYXQKdnJzdHZhCnZydHVsZQp2c2FkaXQKdnN0b3VwaXQKdnN0dXAKdnRpcAp2eWJhdml0CnZ5YnJhdAp2eWNob3ZhdAp2eWRhdAp2eWRyYQp2eWZvdGl0CnZ5aGxlZGF0CnZ5aG5vdXQKdnlob2RpdAp2eWhyYWRpdAp2eWh1Yml0CnZ5amFzbml0CnZ5amV0CnZ5am1vdXQKdnlrbG9waXQKdnlrb25hdAp2eWxla2F0CnZ5bWF6YXQKdnltZXppdAp2eW1pemV0CnZ5bXlzbGV0CnZ5bmVjaGF0CnZ5bmlrYXQKdnludXRpdAp2eXBhZGF0CnZ5cGxhdGl0CnZ5cHJhdml0CnZ5cHVzdGl0CnZ5cmF6aXQKdnlyb3ZuYXQKdnlydmF0CnZ5c2xvdml0CnZ5c29rbwp2eXN0YXZpdAp2eXN1bm91dAp2eXN5cGF0CnZ5dGFzaXQKdnl0ZXNhdAp2eXRyYXRpdAp2eXZpbm91dAp2eXZvbGF0CnZ5dnJoZWwKdnl6ZG9iaXQKdnl6bmF0CnZ6YWR1CnZ6YnVkaXQKdnpjaG9waXQKdnpkb3IKdnpkdWNoCnZ6ZHljaGF0CnZ6ZXN0dXAKdnpobGVkZW0KdnprYXoKdnpseWthdAp2em5pawp2em9yZWsKdnpwb3VyYQp2enRhaAp2enRlawp4eWxvZm9uCnphYnJhdAp6YWJ5ZGxldAp6YWNob3ZhdAp6YWRhcm1vCnphZHVzaXQKemFmb3VrYXQKemFobHRpdAp6YWhvZGl0CnphaHJhZGEKemFoeW5vdXQKemFqYXRlYwp6YWpldAp6YWppc3RpdAp6YWtsZXBhdAp6YWtvdXBpdAp6YWxlcGl0CnphbWV6aXQKemFtb3RhdAp6YW15c2xldAp6YW5lY2hhdAp6YW5pa2F0CnphcGxhdGl0CnphcG9qaXQKemFwc2F0CnphcmF6aXQKemFzdGF2aXQKemFzdW5vdXQKemF0YWppdAp6YXRlbW5pdAp6YXRrbm91dAp6YXVqbW91dAp6YXZhbGl0CnphdmVsZXQKemF2aW5pdAp6YXZvbGF0CnphdnJ0YXQKemF6dm9uaXQKemJhdml0CnpicnVzdQp6YnVkb3ZhdAp6Ynl0ZWsKemRhbGVrYQp6ZGFybWEKemRhdG5vc3QKemRpdm8KemRvYml0Cnpkcm9qCnpkdmloCnpkeW1hZGxvCnplbGVuaW5hCnplbWFuCnplbWluYQp6ZXB0YXQKemV6YWR1CnplemRvbGEKemhhdGl0CnpobHRub3V0CnpobHVib2thCnpob3Rvdml0CnpocnViYQp6aW1hCnppbW5pY2UKemplbW5pdAp6a2xhbWF0Cnprb3VtYXQKemtyYXRrYQp6a3VtYXZrYQp6bGF0bwp6bGVoa2EKemxvYmEKemxvbQp6bG9zdAp6bG96dnlrCnptYXBvdmF0CnptYXIKem1hdGVrCnptaWplCnptaXpldAp6bW9jbml0Cnptb2RyYXQKem1yemxpbmEKem11dG92YXQKem5hawp6bmFsb3N0CnpuYW1lbmF0Cnpub3Z1CnpvYnJheml0CnpvdGF2aXQKem91YmVrCnpvdWZhbGUKenBsb2RpdAp6cG9tYWxpdAp6cHJhdmEKenByb3N0aXQKenBydWRrYQp6cHJ2dQp6cmFkYQp6cmFuaXQKenJjYWRsbwp6cm5pdG9zdAp6cm5vCnpyb3ZuYQp6cnljaGxpdAp6cnphdm9zdAp6dGljaGEKenRyYXRpdAp6dWJvdmluYQp6dWJyCnp2ZWRub3V0Cnp2ZW5rdQp6dmVzZWxhCnp2b24KenZyYXQKenZ1a292b2QKenZ5a2Auc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy9lbmdsaXNoLmpzCiAgdmFyIHdvcmRsaXN0MiA9IGBhYmFuZG9uCmFiaWxpdHkKYWJsZQphYm91dAphYm92ZQphYnNlbnQKYWJzb3JiCmFic3RyYWN0CmFic3VyZAphYnVzZQphY2Nlc3MKYWNjaWRlbnQKYWNjb3VudAphY2N1c2UKYWNoaWV2ZQphY2lkCmFjb3VzdGljCmFjcXVpcmUKYWNyb3NzCmFjdAphY3Rpb24KYWN0b3IKYWN0cmVzcwphY3R1YWwKYWRhcHQKYWRkCmFkZGljdAphZGRyZXNzCmFkanVzdAphZG1pdAphZHVsdAphZHZhbmNlCmFkdmljZQphZXJvYmljCmFmZmFpcgphZmZvcmQKYWZyYWlkCmFnYWluCmFnZQphZ2VudAphZ3JlZQphaGVhZAphaW0KYWlyCmFpcnBvcnQKYWlzbGUKYWxhcm0KYWxidW0KYWxjb2hvbAphbGVydAphbGllbgphbGwKYWxsZXkKYWxsb3cKYWxtb3N0CmFsb25lCmFscGhhCmFscmVhZHkKYWxzbwphbHRlcgphbHdheXMKYW1hdGV1cgphbWF6aW5nCmFtb25nCmFtb3VudAphbXVzZWQKYW5hbHlzdAphbmNob3IKYW5jaWVudAphbmdlcgphbmdsZQphbmdyeQphbmltYWwKYW5rbGUKYW5ub3VuY2UKYW5udWFsCmFub3RoZXIKYW5zd2VyCmFudGVubmEKYW50aXF1ZQphbnhpZXR5CmFueQphcGFydAphcG9sb2d5CmFwcGVhcgphcHBsZQphcHByb3ZlCmFwcmlsCmFyY2gKYXJjdGljCmFyZWEKYXJlbmEKYXJndWUKYXJtCmFybWVkCmFybW9yCmFybXkKYXJvdW5kCmFycmFuZ2UKYXJyZXN0CmFycml2ZQphcnJvdwphcnQKYXJ0ZWZhY3QKYXJ0aXN0CmFydHdvcmsKYXNrCmFzcGVjdAphc3NhdWx0CmFzc2V0CmFzc2lzdAphc3N1bWUKYXN0aG1hCmF0aGxldGUKYXRvbQphdHRhY2sKYXR0ZW5kCmF0dGl0dWRlCmF0dHJhY3QKYXVjdGlvbgphdWRpdAphdWd1c3QKYXVudAphdXRob3IKYXV0bwphdXR1bW4KYXZlcmFnZQphdm9jYWRvCmF2b2lkCmF3YWtlCmF3YXJlCmF3YXkKYXdlc29tZQphd2Z1bAphd2t3YXJkCmF4aXMKYmFieQpiYWNoZWxvcgpiYWNvbgpiYWRnZQpiYWcKYmFsYW5jZQpiYWxjb255CmJhbGwKYmFtYm9vCmJhbmFuYQpiYW5uZXIKYmFyCmJhcmVseQpiYXJnYWluCmJhcnJlbApiYXNlCmJhc2ljCmJhc2tldApiYXR0bGUKYmVhY2gKYmVhbgpiZWF1dHkKYmVjYXVzZQpiZWNvbWUKYmVlZgpiZWZvcmUKYmVnaW4KYmVoYXZlCmJlaGluZApiZWxpZXZlCmJlbG93CmJlbHQKYmVuY2gKYmVuZWZpdApiZXN0CmJldHJheQpiZXR0ZXIKYmV0d2VlbgpiZXlvbmQKYmljeWNsZQpiaWQKYmlrZQpiaW5kCmJpb2xvZ3kKYmlyZApiaXJ0aApiaXR0ZXIKYmxhY2sKYmxhZGUKYmxhbWUKYmxhbmtldApibGFzdApibGVhawpibGVzcwpibGluZApibG9vZApibG9zc29tCmJsb3VzZQpibHVlCmJsdXIKYmx1c2gKYm9hcmQKYm9hdApib2R5CmJvaWwKYm9tYgpib25lCmJvbnVzCmJvb2sKYm9vc3QKYm9yZGVyCmJvcmluZwpib3Jyb3cKYm9zcwpib3R0b20KYm91bmNlCmJveApib3kKYnJhY2tldApicmFpbgpicmFuZApicmFzcwpicmF2ZQpicmVhZApicmVlemUKYnJpY2sKYnJpZGdlCmJyaWVmCmJyaWdodApicmluZwpicmlzawpicm9jY29saQpicm9rZW4KYnJvbnplCmJyb29tCmJyb3RoZXIKYnJvd24KYnJ1c2gKYnViYmxlCmJ1ZGR5CmJ1ZGdldApidWZmYWxvCmJ1aWxkCmJ1bGIKYnVsawpidWxsZXQKYnVuZGxlCmJ1bmtlcgpidXJkZW4KYnVyZ2VyCmJ1cnN0CmJ1cwpidXNpbmVzcwpidXN5CmJ1dHRlcgpidXllcgpidXp6CmNhYmJhZ2UKY2FiaW4KY2FibGUKY2FjdHVzCmNhZ2UKY2FrZQpjYWxsCmNhbG0KY2FtZXJhCmNhbXAKY2FuCmNhbmFsCmNhbmNlbApjYW5keQpjYW5ub24KY2Fub2UKY2FudmFzCmNhbnlvbgpjYXBhYmxlCmNhcGl0YWwKY2FwdGFpbgpjYXIKY2FyYm9uCmNhcmQKY2FyZ28KY2FycGV0CmNhcnJ5CmNhcnQKY2FzZQpjYXNoCmNhc2lubwpjYXN0bGUKY2FzdWFsCmNhdApjYXRhbG9nCmNhdGNoCmNhdGVnb3J5CmNhdHRsZQpjYXVnaHQKY2F1c2UKY2F1dGlvbgpjYXZlCmNlaWxpbmcKY2VsZXJ5CmNlbWVudApjZW5zdXMKY2VudHVyeQpjZXJlYWwKY2VydGFpbgpjaGFpcgpjaGFsawpjaGFtcGlvbgpjaGFuZ2UKY2hhb3MKY2hhcHRlcgpjaGFyZ2UKY2hhc2UKY2hhdApjaGVhcApjaGVjawpjaGVlc2UKY2hlZgpjaGVycnkKY2hlc3QKY2hpY2tlbgpjaGllZgpjaGlsZApjaGltbmV5CmNob2ljZQpjaG9vc2UKY2hyb25pYwpjaHVja2xlCmNodW5rCmNodXJuCmNpZ2FyCmNpbm5hbW9uCmNpcmNsZQpjaXRpemVuCmNpdHkKY2l2aWwKY2xhaW0KY2xhcApjbGFyaWZ5CmNsYXcKY2xheQpjbGVhbgpjbGVyawpjbGV2ZXIKY2xpY2sKY2xpZW50CmNsaWZmCmNsaW1iCmNsaW5pYwpjbGlwCmNsb2NrCmNsb2cKY2xvc2UKY2xvdGgKY2xvdWQKY2xvd24KY2x1YgpjbHVtcApjbHVzdGVyCmNsdXRjaApjb2FjaApjb2FzdApjb2NvbnV0CmNvZGUKY29mZmVlCmNvaWwKY29pbgpjb2xsZWN0CmNvbG9yCmNvbHVtbgpjb21iaW5lCmNvbWUKY29tZm9ydApjb21pYwpjb21tb24KY29tcGFueQpjb25jZXJ0CmNvbmR1Y3QKY29uZmlybQpjb25ncmVzcwpjb25uZWN0CmNvbnNpZGVyCmNvbnRyb2wKY29udmluY2UKY29vawpjb29sCmNvcHBlcgpjb3B5CmNvcmFsCmNvcmUKY29ybgpjb3JyZWN0CmNvc3QKY290dG9uCmNvdWNoCmNvdW50cnkKY291cGxlCmNvdXJzZQpjb3VzaW4KY292ZXIKY295b3RlCmNyYWNrCmNyYWRsZQpjcmFmdApjcmFtCmNyYW5lCmNyYXNoCmNyYXRlcgpjcmF3bApjcmF6eQpjcmVhbQpjcmVkaXQKY3JlZWsKY3Jldwpjcmlja2V0CmNyaW1lCmNyaXNwCmNyaXRpYwpjcm9wCmNyb3NzCmNyb3VjaApjcm93ZApjcnVjaWFsCmNydWVsCmNydWlzZQpjcnVtYmxlCmNydW5jaApjcnVzaApjcnkKY3J5c3RhbApjdWJlCmN1bHR1cmUKY3VwCmN1cGJvYXJkCmN1cmlvdXMKY3VycmVudApjdXJ0YWluCmN1cnZlCmN1c2hpb24KY3VzdG9tCmN1dGUKY3ljbGUKZGFkCmRhbWFnZQpkYW1wCmRhbmNlCmRhbmdlcgpkYXJpbmcKZGFzaApkYXVnaHRlcgpkYXduCmRheQpkZWFsCmRlYmF0ZQpkZWJyaXMKZGVjYWRlCmRlY2VtYmVyCmRlY2lkZQpkZWNsaW5lCmRlY29yYXRlCmRlY3JlYXNlCmRlZXIKZGVmZW5zZQpkZWZpbmUKZGVmeQpkZWdyZWUKZGVsYXkKZGVsaXZlcgpkZW1hbmQKZGVtaXNlCmRlbmlhbApkZW50aXN0CmRlbnkKZGVwYXJ0CmRlcGVuZApkZXBvc2l0CmRlcHRoCmRlcHV0eQpkZXJpdmUKZGVzY3JpYmUKZGVzZXJ0CmRlc2lnbgpkZXNrCmRlc3BhaXIKZGVzdHJveQpkZXRhaWwKZGV0ZWN0CmRldmVsb3AKZGV2aWNlCmRldm90ZQpkaWFncmFtCmRpYWwKZGlhbW9uZApkaWFyeQpkaWNlCmRpZXNlbApkaWV0CmRpZmZlcgpkaWdpdGFsCmRpZ25pdHkKZGlsZW1tYQpkaW5uZXIKZGlub3NhdXIKZGlyZWN0CmRpcnQKZGlzYWdyZWUKZGlzY292ZXIKZGlzZWFzZQpkaXNoCmRpc21pc3MKZGlzb3JkZXIKZGlzcGxheQpkaXN0YW5jZQpkaXZlcnQKZGl2aWRlCmRpdm9yY2UKZGl6enkKZG9jdG9yCmRvY3VtZW50CmRvZwpkb2xsCmRvbHBoaW4KZG9tYWluCmRvbmF0ZQpkb25rZXkKZG9ub3IKZG9vcgpkb3NlCmRvdWJsZQpkb3ZlCmRyYWZ0CmRyYWdvbgpkcmFtYQpkcmFzdGljCmRyYXcKZHJlYW0KZHJlc3MKZHJpZnQKZHJpbGwKZHJpbmsKZHJpcApkcml2ZQpkcm9wCmRydW0KZHJ5CmR1Y2sKZHVtYgpkdW5lCmR1cmluZwpkdXN0CmR1dGNoCmR1dHkKZHdhcmYKZHluYW1pYwplYWdlcgplYWdsZQplYXJseQplYXJuCmVhcnRoCmVhc2lseQplYXN0CmVhc3kKZWNobwplY29sb2d5CmVjb25vbXkKZWRnZQplZGl0CmVkdWNhdGUKZWZmb3J0CmVnZwplaWdodAplaXRoZXIKZWxib3cKZWxkZXIKZWxlY3RyaWMKZWxlZ2FudAplbGVtZW50CmVsZXBoYW50CmVsZXZhdG9yCmVsaXRlCmVsc2UKZW1iYXJrCmVtYm9keQplbWJyYWNlCmVtZXJnZQplbW90aW9uCmVtcGxveQplbXBvd2VyCmVtcHR5CmVuYWJsZQplbmFjdAplbmQKZW5kbGVzcwplbmRvcnNlCmVuZW15CmVuZXJneQplbmZvcmNlCmVuZ2FnZQplbmdpbmUKZW5oYW5jZQplbmpveQplbmxpc3QKZW5vdWdoCmVucmljaAplbnJvbGwKZW5zdXJlCmVudGVyCmVudGlyZQplbnRyeQplbnZlbG9wZQplcGlzb2RlCmVxdWFsCmVxdWlwCmVyYQplcmFzZQplcm9kZQplcm9zaW9uCmVycm9yCmVydXB0CmVzY2FwZQplc3NheQplc3NlbmNlCmVzdGF0ZQpldGVybmFsCmV0aGljcwpldmlkZW5jZQpldmlsCmV2b2tlCmV2b2x2ZQpleGFjdApleGFtcGxlCmV4Y2VzcwpleGNoYW5nZQpleGNpdGUKZXhjbHVkZQpleGN1c2UKZXhlY3V0ZQpleGVyY2lzZQpleGhhdXN0CmV4aGliaXQKZXhpbGUKZXhpc3QKZXhpdApleG90aWMKZXhwYW5kCmV4cGVjdApleHBpcmUKZXhwbGFpbgpleHBvc2UKZXhwcmVzcwpleHRlbmQKZXh0cmEKZXllCmV5ZWJyb3cKZmFicmljCmZhY2UKZmFjdWx0eQpmYWRlCmZhaW50CmZhaXRoCmZhbGwKZmFsc2UKZmFtZQpmYW1pbHkKZmFtb3VzCmZhbgpmYW5jeQpmYW50YXN5CmZhcm0KZmFzaGlvbgpmYXQKZmF0YWwKZmF0aGVyCmZhdGlndWUKZmF1bHQKZmF2b3JpdGUKZmVhdHVyZQpmZWJydWFyeQpmZWRlcmFsCmZlZQpmZWVkCmZlZWwKZmVtYWxlCmZlbmNlCmZlc3RpdmFsCmZldGNoCmZldmVyCmZldwpmaWJlcgpmaWN0aW9uCmZpZWxkCmZpZ3VyZQpmaWxlCmZpbG0KZmlsdGVyCmZpbmFsCmZpbmQKZmluZQpmaW5nZXIKZmluaXNoCmZpcmUKZmlybQpmaXJzdApmaXNjYWwKZmlzaApmaXQKZml0bmVzcwpmaXgKZmxhZwpmbGFtZQpmbGFzaApmbGF0CmZsYXZvcgpmbGVlCmZsaWdodApmbGlwCmZsb2F0CmZsb2NrCmZsb29yCmZsb3dlcgpmbHVpZApmbHVzaApmbHkKZm9hbQpmb2N1cwpmb2cKZm9pbApmb2xkCmZvbGxvdwpmb29kCmZvb3QKZm9yY2UKZm9yZXN0CmZvcmdldApmb3JrCmZvcnR1bmUKZm9ydW0KZm9yd2FyZApmb3NzaWwKZm9zdGVyCmZvdW5kCmZveApmcmFnaWxlCmZyYW1lCmZyZXF1ZW50CmZyZXNoCmZyaWVuZApmcmluZ2UKZnJvZwpmcm9udApmcm9zdApmcm93bgpmcm96ZW4KZnJ1aXQKZnVlbApmdW4KZnVubnkKZnVybmFjZQpmdXJ5CmZ1dHVyZQpnYWRnZXQKZ2FpbgpnYWxheHkKZ2FsbGVyeQpnYW1lCmdhcApnYXJhZ2UKZ2FyYmFnZQpnYXJkZW4KZ2FybGljCmdhcm1lbnQKZ2FzCmdhc3AKZ2F0ZQpnYXRoZXIKZ2F1Z2UKZ2F6ZQpnZW5lcmFsCmdlbml1cwpnZW5yZQpnZW50bGUKZ2VudWluZQpnZXN0dXJlCmdob3N0CmdpYW50CmdpZnQKZ2lnZ2xlCmdpbmdlcgpnaXJhZmZlCmdpcmwKZ2l2ZQpnbGFkCmdsYW5jZQpnbGFyZQpnbGFzcwpnbGlkZQpnbGltcHNlCmdsb2JlCmdsb29tCmdsb3J5Cmdsb3ZlCmdsb3cKZ2x1ZQpnb2F0CmdvZGRlc3MKZ29sZApnb29kCmdvb3NlCmdvcmlsbGEKZ29zcGVsCmdvc3NpcApnb3Zlcm4KZ293bgpncmFiCmdyYWNlCmdyYWluCmdyYW50CmdyYXBlCmdyYXNzCmdyYXZpdHkKZ3JlYXQKZ3JlZW4KZ3JpZApncmllZgpncml0Cmdyb2NlcnkKZ3JvdXAKZ3JvdwpncnVudApndWFyZApndWVzcwpndWlkZQpndWlsdApndWl0YXIKZ3VuCmd5bQpoYWJpdApoYWlyCmhhbGYKaGFtbWVyCmhhbXN0ZXIKaGFuZApoYXBweQpoYXJib3IKaGFyZApoYXJzaApoYXJ2ZXN0CmhhdApoYXZlCmhhd2sKaGF6YXJkCmhlYWQKaGVhbHRoCmhlYXJ0CmhlYXZ5CmhlZGdlaG9nCmhlaWdodApoZWxsbwpoZWxtZXQKaGVscApoZW4KaGVybwpoaWRkZW4KaGlnaApoaWxsCmhpbnQKaGlwCmhpcmUKaGlzdG9yeQpob2JieQpob2NrZXkKaG9sZApob2xlCmhvbGlkYXkKaG9sbG93CmhvbWUKaG9uZXkKaG9vZApob3BlCmhvcm4KaG9ycm9yCmhvcnNlCmhvc3BpdGFsCmhvc3QKaG90ZWwKaG91cgpob3ZlcgpodWIKaHVnZQpodW1hbgpodW1ibGUKaHVtb3IKaHVuZHJlZApodW5ncnkKaHVudApodXJkbGUKaHVycnkKaHVydApodXNiYW5kCmh5YnJpZAppY2UKaWNvbgppZGVhCmlkZW50aWZ5CmlkbGUKaWdub3JlCmlsbAppbGxlZ2FsCmlsbG5lc3MKaW1hZ2UKaW1pdGF0ZQppbW1lbnNlCmltbXVuZQppbXBhY3QKaW1wb3NlCmltcHJvdmUKaW1wdWxzZQppbmNoCmluY2x1ZGUKaW5jb21lCmluY3JlYXNlCmluZGV4CmluZGljYXRlCmluZG9vcgppbmR1c3RyeQppbmZhbnQKaW5mbGljdAppbmZvcm0KaW5oYWxlCmluaGVyaXQKaW5pdGlhbAppbmplY3QKaW5qdXJ5CmlubWF0ZQppbm5lcgppbm5vY2VudAppbnB1dAppbnF1aXJ5Cmluc2FuZQppbnNlY3QKaW5zaWRlCmluc3BpcmUKaW5zdGFsbAppbnRhY3QKaW50ZXJlc3QKaW50bwppbnZlc3QKaW52aXRlCmludm9sdmUKaXJvbgppc2xhbmQKaXNvbGF0ZQppc3N1ZQppdGVtCml2b3J5CmphY2tldApqYWd1YXIKamFyCmphenoKamVhbG91cwpqZWFucwpqZWxseQpqZXdlbApqb2IKam9pbgpqb2tlCmpvdXJuZXkKam95Cmp1ZGdlCmp1aWNlCmp1bXAKanVuZ2xlCmp1bmlvcgpqdW5rCmp1c3QKa2FuZ2Fyb28Ka2VlbgprZWVwCmtldGNodXAKa2V5CmtpY2sKa2lkCmtpZG5leQpraW5kCmtpbmdkb20Ka2lzcwpraXQKa2l0Y2hlbgpraXRlCmtpdHRlbgpraXdpCmtuZWUKa25pZmUKa25vY2sKa25vdwpsYWIKbGFiZWwKbGFib3IKbGFkZGVyCmxhZHkKbGFrZQpsYW1wCmxhbmd1YWdlCmxhcHRvcApsYXJnZQpsYXRlcgpsYXRpbgpsYXVnaApsYXVuZHJ5CmxhdmEKbGF3Cmxhd24KbGF3c3VpdApsYXllcgpsYXp5CmxlYWRlcgpsZWFmCmxlYXJuCmxlYXZlCmxlY3R1cmUKbGVmdApsZWcKbGVnYWwKbGVnZW5kCmxlaXN1cmUKbGVtb24KbGVuZApsZW5ndGgKbGVucwpsZW9wYXJkCmxlc3NvbgpsZXR0ZXIKbGV2ZWwKbGlhcgpsaWJlcnR5CmxpYnJhcnkKbGljZW5zZQpsaWZlCmxpZnQKbGlnaHQKbGlrZQpsaW1iCmxpbWl0CmxpbmsKbGlvbgpsaXF1aWQKbGlzdApsaXR0bGUKbGl2ZQpsaXphcmQKbG9hZApsb2FuCmxvYnN0ZXIKbG9jYWwKbG9jawpsb2dpYwpsb25lbHkKbG9uZwpsb29wCmxvdHRlcnkKbG91ZApsb3VuZ2UKbG92ZQpsb3lhbApsdWNreQpsdWdnYWdlCmx1bWJlcgpsdW5hcgpsdW5jaApsdXh1cnkKbHlyaWNzCm1hY2hpbmUKbWFkCm1hZ2ljCm1hZ25ldAptYWlkCm1haWwKbWFpbgptYWpvcgptYWtlCm1hbW1hbAptYW4KbWFuYWdlCm1hbmRhdGUKbWFuZ28KbWFuc2lvbgptYW51YWwKbWFwbGUKbWFyYmxlCm1hcmNoCm1hcmdpbgptYXJpbmUKbWFya2V0Cm1hcnJpYWdlCm1hc2sKbWFzcwptYXN0ZXIKbWF0Y2gKbWF0ZXJpYWwKbWF0aAptYXRyaXgKbWF0dGVyCm1heGltdW0KbWF6ZQptZWFkb3cKbWVhbgptZWFzdXJlCm1lYXQKbWVjaGFuaWMKbWVkYWwKbWVkaWEKbWVsb2R5Cm1lbHQKbWVtYmVyCm1lbW9yeQptZW50aW9uCm1lbnUKbWVyY3kKbWVyZ2UKbWVyaXQKbWVycnkKbWVzaAptZXNzYWdlCm1ldGFsCm1ldGhvZAptaWRkbGUKbWlkbmlnaHQKbWlsawptaWxsaW9uCm1pbWljCm1pbmQKbWluaW11bQptaW5vcgptaW51dGUKbWlyYWNsZQptaXJyb3IKbWlzZXJ5Cm1pc3MKbWlzdGFrZQptaXgKbWl4ZWQKbWl4dHVyZQptb2JpbGUKbW9kZWwKbW9kaWZ5Cm1vbQptb21lbnQKbW9uaXRvcgptb25rZXkKbW9uc3Rlcgptb250aAptb29uCm1vcmFsCm1vcmUKbW9ybmluZwptb3NxdWl0bwptb3RoZXIKbW90aW9uCm1vdG9yCm1vdW50YWluCm1vdXNlCm1vdmUKbW92aWUKbXVjaAptdWZmaW4KbXVsZQptdWx0aXBseQptdXNjbGUKbXVzZXVtCm11c2hyb29tCm11c2ljCm11c3QKbXV0dWFsCm15c2VsZgpteXN0ZXJ5Cm15dGgKbmFpdmUKbmFtZQpuYXBraW4KbmFycm93Cm5hc3R5Cm5hdGlvbgpuYXR1cmUKbmVhcgpuZWNrCm5lZWQKbmVnYXRpdmUKbmVnbGVjdApuZWl0aGVyCm5lcGhldwpuZXJ2ZQpuZXN0Cm5ldApuZXR3b3JrCm5ldXRyYWwKbmV2ZXIKbmV3cwpuZXh0Cm5pY2UKbmlnaHQKbm9ibGUKbm9pc2UKbm9taW5lZQpub29kbGUKbm9ybWFsCm5vcnRoCm5vc2UKbm90YWJsZQpub3RlCm5vdGhpbmcKbm90aWNlCm5vdmVsCm5vdwpudWNsZWFyCm51bWJlcgpudXJzZQpudXQKb2FrCm9iZXkKb2JqZWN0Cm9ibGlnZQpvYnNjdXJlCm9ic2VydmUKb2J0YWluCm9idmlvdXMKb2NjdXIKb2NlYW4Kb2N0b2JlcgpvZG9yCm9mZgpvZmZlcgpvZmZpY2UKb2Z0ZW4Kb2lsCm9rYXkKb2xkCm9saXZlCm9seW1waWMKb21pdApvbmNlCm9uZQpvbmlvbgpvbmxpbmUKb25seQpvcGVuCm9wZXJhCm9waW5pb24Kb3Bwb3NlCm9wdGlvbgpvcmFuZ2UKb3JiaXQKb3JjaGFyZApvcmRlcgpvcmRpbmFyeQpvcmdhbgpvcmllbnQKb3JpZ2luYWwKb3JwaGFuCm9zdHJpY2gKb3RoZXIKb3V0ZG9vcgpvdXRlcgpvdXRwdXQKb3V0c2lkZQpvdmFsCm92ZW4Kb3Zlcgpvd24Kb3duZXIKb3h5Z2VuCm95c3Rlcgpvem9uZQpwYWN0CnBhZGRsZQpwYWdlCnBhaXIKcGFsYWNlCnBhbG0KcGFuZGEKcGFuZWwKcGFuaWMKcGFudGhlcgpwYXBlcgpwYXJhZGUKcGFyZW50CnBhcmsKcGFycm90CnBhcnR5CnBhc3MKcGF0Y2gKcGF0aApwYXRpZW50CnBhdHJvbApwYXR0ZXJuCnBhdXNlCnBhdmUKcGF5bWVudApwZWFjZQpwZWFudXQKcGVhcgpwZWFzYW50CnBlbGljYW4KcGVuCnBlbmFsdHkKcGVuY2lsCnBlb3BsZQpwZXBwZXIKcGVyZmVjdApwZXJtaXQKcGVyc29uCnBldApwaG9uZQpwaG90bwpwaHJhc2UKcGh5c2ljYWwKcGlhbm8KcGljbmljCnBpY3R1cmUKcGllY2UKcGlnCnBpZ2VvbgpwaWxsCnBpbG90CnBpbmsKcGlvbmVlcgpwaXBlCnBpc3RvbApwaXRjaApwaXp6YQpwbGFjZQpwbGFuZXQKcGxhc3RpYwpwbGF0ZQpwbGF5CnBsZWFzZQpwbGVkZ2UKcGx1Y2sKcGx1ZwpwbHVuZ2UKcG9lbQpwb2V0CnBvaW50CnBvbGFyCnBvbGUKcG9saWNlCnBvbmQKcG9ueQpwb29sCnBvcHVsYXIKcG9ydGlvbgpwb3NpdGlvbgpwb3NzaWJsZQpwb3N0CnBvdGF0bwpwb3R0ZXJ5CnBvdmVydHkKcG93ZGVyCnBvd2VyCnByYWN0aWNlCnByYWlzZQpwcmVkaWN0CnByZWZlcgpwcmVwYXJlCnByZXNlbnQKcHJldHR5CnByZXZlbnQKcHJpY2UKcHJpZGUKcHJpbWFyeQpwcmludApwcmlvcml0eQpwcmlzb24KcHJpdmF0ZQpwcml6ZQpwcm9ibGVtCnByb2Nlc3MKcHJvZHVjZQpwcm9maXQKcHJvZ3JhbQpwcm9qZWN0CnByb21vdGUKcHJvb2YKcHJvcGVydHkKcHJvc3Blcgpwcm90ZWN0CnByb3VkCnByb3ZpZGUKcHVibGljCnB1ZGRpbmcKcHVsbApwdWxwCnB1bHNlCnB1bXBraW4KcHVuY2gKcHVwaWwKcHVwcHkKcHVyY2hhc2UKcHVyaXR5CnB1cnBvc2UKcHVyc2UKcHVzaApwdXQKcHV6emxlCnB5cmFtaWQKcXVhbGl0eQpxdWFudHVtCnF1YXJ0ZXIKcXVlc3Rpb24KcXVpY2sKcXVpdApxdWl6CnF1b3RlCnJhYmJpdApyYWNjb29uCnJhY2UKcmFjawpyYWRhcgpyYWRpbwpyYWlsCnJhaW4KcmFpc2UKcmFsbHkKcmFtcApyYW5jaApyYW5kb20KcmFuZ2UKcmFwaWQKcmFyZQpyYXRlCnJhdGhlcgpyYXZlbgpyYXcKcmF6b3IKcmVhZHkKcmVhbApyZWFzb24KcmViZWwKcmVidWlsZApyZWNhbGwKcmVjZWl2ZQpyZWNpcGUKcmVjb3JkCnJlY3ljbGUKcmVkdWNlCnJlZmxlY3QKcmVmb3JtCnJlZnVzZQpyZWdpb24KcmVncmV0CnJlZ3VsYXIKcmVqZWN0CnJlbGF4CnJlbGVhc2UKcmVsaWVmCnJlbHkKcmVtYWluCnJlbWVtYmVyCnJlbWluZApyZW1vdmUKcmVuZGVyCnJlbmV3CnJlbnQKcmVvcGVuCnJlcGFpcgpyZXBlYXQKcmVwbGFjZQpyZXBvcnQKcmVxdWlyZQpyZXNjdWUKcmVzZW1ibGUKcmVzaXN0CnJlc291cmNlCnJlc3BvbnNlCnJlc3VsdApyZXRpcmUKcmV0cmVhdApyZXR1cm4KcmV1bmlvbgpyZXZlYWwKcmV2aWV3CnJld2FyZApyaHl0aG0KcmliCnJpYmJvbgpyaWNlCnJpY2gKcmlkZQpyaWRnZQpyaWZsZQpyaWdodApyaWdpZApyaW5nCnJpb3QKcmlwcGxlCnJpc2sKcml0dWFsCnJpdmFsCnJpdmVyCnJvYWQKcm9hc3QKcm9ib3QKcm9idXN0CnJvY2tldApyb21hbmNlCnJvb2YKcm9va2llCnJvb20Kcm9zZQpyb3RhdGUKcm91Z2gKcm91bmQKcm91dGUKcm95YWwKcnViYmVyCnJ1ZGUKcnVnCnJ1bGUKcnVuCnJ1bndheQpydXJhbApzYWQKc2FkZGxlCnNhZG5lc3MKc2FmZQpzYWlsCnNhbGFkCnNhbG1vbgpzYWxvbgpzYWx0CnNhbHV0ZQpzYW1lCnNhbXBsZQpzYW5kCnNhdGlzZnkKc2F0b3NoaQpzYXVjZQpzYXVzYWdlCnNhdmUKc2F5CnNjYWxlCnNjYW4Kc2NhcmUKc2NhdHRlcgpzY2VuZQpzY2hlbWUKc2Nob29sCnNjaWVuY2UKc2Npc3NvcnMKc2NvcnBpb24Kc2NvdXQKc2NyYXAKc2NyZWVuCnNjcmlwdApzY3J1YgpzZWEKc2VhcmNoCnNlYXNvbgpzZWF0CnNlY29uZApzZWNyZXQKc2VjdGlvbgpzZWN1cml0eQpzZWVkCnNlZWsKc2VnbWVudApzZWxlY3QKc2VsbApzZW1pbmFyCnNlbmlvcgpzZW5zZQpzZW50ZW5jZQpzZXJpZXMKc2VydmljZQpzZXNzaW9uCnNldHRsZQpzZXR1cApzZXZlbgpzaGFkb3cKc2hhZnQKc2hhbGxvdwpzaGFyZQpzaGVkCnNoZWxsCnNoZXJpZmYKc2hpZWxkCnNoaWZ0CnNoaW5lCnNoaXAKc2hpdmVyCnNob2NrCnNob2UKc2hvb3QKc2hvcApzaG9ydApzaG91bGRlcgpzaG92ZQpzaHJpbXAKc2hydWcKc2h1ZmZsZQpzaHkKc2libGluZwpzaWNrCnNpZGUKc2llZ2UKc2lnaHQKc2lnbgpzaWxlbnQKc2lsawpzaWxseQpzaWx2ZXIKc2ltaWxhcgpzaW1wbGUKc2luY2UKc2luZwpzaXJlbgpzaXN0ZXIKc2l0dWF0ZQpzaXgKc2l6ZQpza2F0ZQpza2V0Y2gKc2tpCnNraWxsCnNraW4Kc2tpcnQKc2t1bGwKc2xhYgpzbGFtCnNsZWVwCnNsZW5kZXIKc2xpY2UKc2xpZGUKc2xpZ2h0CnNsaW0Kc2xvZ2FuCnNsb3QKc2xvdwpzbHVzaApzbWFsbApzbWFydApzbWlsZQpzbW9rZQpzbW9vdGgKc25hY2sKc25ha2UKc25hcApzbmlmZgpzbm93CnNvYXAKc29jY2VyCnNvY2lhbApzb2NrCnNvZGEKc29mdApzb2xhcgpzb2xkaWVyCnNvbGlkCnNvbHV0aW9uCnNvbHZlCnNvbWVvbmUKc29uZwpzb29uCnNvcnJ5CnNvcnQKc291bApzb3VuZApzb3VwCnNvdXJjZQpzb3V0aApzcGFjZQpzcGFyZQpzcGF0aWFsCnNwYXduCnNwZWFrCnNwZWNpYWwKc3BlZWQKc3BlbGwKc3BlbmQKc3BoZXJlCnNwaWNlCnNwaWRlcgpzcGlrZQpzcGluCnNwaXJpdApzcGxpdApzcG9pbApzcG9uc29yCnNwb29uCnNwb3J0CnNwb3QKc3ByYXkKc3ByZWFkCnNwcmluZwpzcHkKc3F1YXJlCnNxdWVlemUKc3F1aXJyZWwKc3RhYmxlCnN0YWRpdW0Kc3RhZmYKc3RhZ2UKc3RhaXJzCnN0YW1wCnN0YW5kCnN0YXJ0CnN0YXRlCnN0YXkKc3RlYWsKc3RlZWwKc3RlbQpzdGVwCnN0ZXJlbwpzdGljawpzdGlsbApzdGluZwpzdG9jawpzdG9tYWNoCnN0b25lCnN0b29sCnN0b3J5CnN0b3ZlCnN0cmF0ZWd5CnN0cmVldApzdHJpa2UKc3Ryb25nCnN0cnVnZ2xlCnN0dWRlbnQKc3R1ZmYKc3R1bWJsZQpzdHlsZQpzdWJqZWN0CnN1Ym1pdApzdWJ3YXkKc3VjY2VzcwpzdWNoCnN1ZGRlbgpzdWZmZXIKc3VnYXIKc3VnZ2VzdApzdWl0CnN1bW1lcgpzdW4Kc3VubnkKc3Vuc2V0CnN1cGVyCnN1cHBseQpzdXByZW1lCnN1cmUKc3VyZmFjZQpzdXJnZQpzdXJwcmlzZQpzdXJyb3VuZApzdXJ2ZXkKc3VzcGVjdApzdXN0YWluCnN3YWxsb3cKc3dhbXAKc3dhcApzd2FybQpzd2Vhcgpzd2VldApzd2lmdApzd2ltCnN3aW5nCnN3aXRjaApzd29yZApzeW1ib2wKc3ltcHRvbQpzeXJ1cApzeXN0ZW0KdGFibGUKdGFja2xlCnRhZwp0YWlsCnRhbGVudAp0YWxrCnRhbmsKdGFwZQp0YXJnZXQKdGFzawp0YXN0ZQp0YXR0b28KdGF4aQp0ZWFjaAp0ZWFtCnRlbGwKdGVuCnRlbmFudAp0ZW5uaXMKdGVudAp0ZXJtCnRlc3QKdGV4dAp0aGFuawp0aGF0CnRoZW1lCnRoZW4KdGhlb3J5CnRoZXJlCnRoZXkKdGhpbmcKdGhpcwp0aG91Z2h0CnRocmVlCnRocml2ZQp0aHJvdwp0aHVtYgp0aHVuZGVyCnRpY2tldAp0aWRlCnRpZ2VyCnRpbHQKdGltYmVyCnRpbWUKdGlueQp0aXAKdGlyZWQKdGlzc3VlCnRpdGxlCnRvYXN0CnRvYmFjY28KdG9kYXkKdG9kZGxlcgp0b2UKdG9nZXRoZXIKdG9pbGV0CnRva2VuCnRvbWF0bwp0b21vcnJvdwp0b25lCnRvbmd1ZQp0b25pZ2h0CnRvb2wKdG9vdGgKdG9wCnRvcGljCnRvcHBsZQp0b3JjaAp0b3JuYWRvCnRvcnRvaXNlCnRvc3MKdG90YWwKdG91cmlzdAp0b3dhcmQKdG93ZXIKdG93bgp0b3kKdHJhY2sKdHJhZGUKdHJhZmZpYwp0cmFnaWMKdHJhaW4KdHJhbnNmZXIKdHJhcAp0cmFzaAp0cmF2ZWwKdHJheQp0cmVhdAp0cmVlCnRyZW5kCnRyaWFsCnRyaWJlCnRyaWNrCnRyaWdnZXIKdHJpbQp0cmlwCnRyb3BoeQp0cm91YmxlCnRydWNrCnRydWUKdHJ1bHkKdHJ1bXBldAp0cnVzdAp0cnV0aAp0cnkKdHViZQp0dWl0aW9uCnR1bWJsZQp0dW5hCnR1bm5lbAp0dXJrZXkKdHVybgp0dXJ0bGUKdHdlbHZlCnR3ZW50eQp0d2ljZQp0d2luCnR3aXN0CnR3bwp0eXBlCnR5cGljYWwKdWdseQp1bWJyZWxsYQp1bmFibGUKdW5hd2FyZQp1bmNsZQp1bmNvdmVyCnVuZGVyCnVuZG8KdW5mYWlyCnVuZm9sZAp1bmhhcHB5CnVuaWZvcm0KdW5pcXVlCnVuaXQKdW5pdmVyc2UKdW5rbm93bgp1bmxvY2sKdW50aWwKdW51c3VhbAp1bnZlaWwKdXBkYXRlCnVwZ3JhZGUKdXBob2xkCnVwb24KdXBwZXIKdXBzZXQKdXJiYW4KdXJnZQp1c2FnZQp1c2UKdXNlZAp1c2VmdWwKdXNlbGVzcwp1c3VhbAp1dGlsaXR5CnZhY2FudAp2YWN1dW0KdmFndWUKdmFsaWQKdmFsbGV5CnZhbHZlCnZhbgp2YW5pc2gKdmFwb3IKdmFyaW91cwp2YXN0CnZhdWx0CnZlaGljbGUKdmVsdmV0CnZlbmRvcgp2ZW50dXJlCnZlbnVlCnZlcmIKdmVyaWZ5CnZlcnNpb24KdmVyeQp2ZXNzZWwKdmV0ZXJhbgp2aWFibGUKdmlicmFudAp2aWNpb3VzCnZpY3RvcnkKdmlkZW8Kdmlldwp2aWxsYWdlCnZpbnRhZ2UKdmlvbGluCnZpcnR1YWwKdmlydXMKdmlzYQp2aXNpdAp2aXN1YWwKdml0YWwKdml2aWQKdm9jYWwKdm9pY2UKdm9pZAp2b2xjYW5vCnZvbHVtZQp2b3RlCnZveWFnZQp3YWdlCndhZ29uCndhaXQKd2Fsawp3YWxsCndhbG51dAp3YW50CndhcmZhcmUKd2FybQp3YXJyaW9yCndhc2gKd2FzcAp3YXN0ZQp3YXRlcgp3YXZlCndheQp3ZWFsdGgKd2VhcG9uCndlYXIKd2Vhc2VsCndlYXRoZXIKd2ViCndlZGRpbmcKd2Vla2VuZAp3ZWlyZAp3ZWxjb21lCndlc3QKd2V0CndoYWxlCndoYXQKd2hlYXQKd2hlZWwKd2hlbgp3aGVyZQp3aGlwCndoaXNwZXIKd2lkZQp3aWR0aAp3aWZlCndpbGQKd2lsbAp3aW4Kd2luZG93CndpbmUKd2luZwp3aW5rCndpbm5lcgp3aW50ZXIKd2lyZQp3aXNkb20Kd2lzZQp3aXNoCndpdG5lc3MKd29sZgp3b21hbgp3b25kZXIKd29vZAp3b29sCndvcmQKd29yawp3b3JsZAp3b3JyeQp3b3J0aAp3cmFwCndyZWNrCndyZXN0bGUKd3Jpc3QKd3JpdGUKd3JvbmcKeWFyZAp5ZWFyCnllbGxvdwp5b3UKeW91bmcKeW91dGgKemVicmEKemVybwp6b25lCnpvb2Auc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy9mcmVuY2guanMKICB2YXIgd29yZGxpc3QzID0gYGFiYWlzc2VyCmFiYW5kb24KYWJkaXF1ZXIKYWJlaWxsZQphYm9saXIKYWJvcmRlcgphYm91dGlyCmFib3llcgphYnJhc2lmCmFicmV1dmVyCmFicml0ZXIKYWJyb2dlcgphYnJ1cHQKYWJzZW5jZQphYnNvbHUKYWJzdXJkZQphYnVzaWYKYWJ5c3NhbAphY2FkZVx1MDMwMW1pZQphY2Fqb3UKYWNhcmllbgphY2NhYmxlcgphY2NlcHRlcgphY2NsYW1lcgphY2NvbGFkZQphY2Nyb2NoZQphY2N1c2VyCmFjZXJiZQphY2hhdAphY2hldGVyCmFjaWR1bGVyCmFjaWVyCmFjb21wdGUKYWNxdWVcdTAzMDFyaXIKYWNyb255bWUKYWN0ZXVyCmFjdGlmCmFjdHVlbAphZGVwdGUKYWRlXHUwMzAxcXVhdAphZGhlXHUwMzAxc2lmCmFkamVjdGlmCmFkanVnZXIKYWRtZXR0cmUKYWRtaXJlcgphZG9wdGVyCmFkb3JlcgphZG91Y2lyCmFkcmVzc2UKYWRyb2l0CmFkdWx0ZQphZHZlcmJlCmFlXHUwMzAxcmVyCmFlXHUwMzAxcm9uZWYKYWZmYWlyZQphZmZlY3RlcgphZmZpY2hlCmFmZnJldXgKYWZmdWJsZXIKYWdhY2VyCmFnZW5jZXIKYWdpbGUKYWdpdGVyCmFncmFmZXIKYWdyZVx1MDMwMWFibGUKYWdydW1lCmFpZGVyCmFpZ3VpbGxlCmFpbGllcgphaW1hYmxlCmFpc2FuY2UKYWpvdXRlcgphanVzdGVyCmFsYXJtZXIKYWxjaGltaWUKYWxlcnRlCmFsZ2VcdTAzMDBicmUKYWxndWUKYWxpZVx1MDMwMW5lcgphbGltZW50CmFsbGVcdTAzMDFnZXIKYWxsaWFnZQphbGxvdWVyCmFsbHVtZXIKYWxvdXJkaXIKYWxwYWdhCmFsdGVzc2UKYWx2ZVx1MDMwMW9sZQphbWF0ZXVyCmFtYmlndQphbWJyZQphbWVcdTAzMDFuYWdlcgphbWVydHVtZQphbWlkb24KYW1pcmFsCmFtb3JjZXIKYW1vdXIKYW1vdmlibGUKYW1waGliaWUKYW1wbGV1cgphbXVzYW50CmFuYWx5c2UKYW5hcGhvcmUKYW5hcmNoaWUKYW5hdG9taWUKYW5jaWVuCmFuZVx1MDMwMWFudGlyCmFuZ2xlCmFuZ29pc3NlCmFuZ3VsZXV4CmFuaW1hbAphbm5leGVyCmFubm9uY2UKYW5udWVsCmFub2Rpbgphbm9tYWxpZQphbm9ueW1lCmFub3JtYWwKYW50ZW5uZQphbnRpZG90ZQphbnhpZXV4CmFwYWlzZXIKYXBlXHUwMzAxcml0aWYKYXBsYW5pcgphcG9sb2dpZQphcHBhcmVpbAphcHBlbGVyCmFwcG9ydGVyCmFwcHV5ZXIKYXF1YXJpdW0KYXF1ZWR1YwphcmJpdHJlCmFyYnVzdGUKYXJkZXVyCmFyZG9pc2UKYXJnZW50CmFybGVxdWluCmFybWF0dXJlCmFybWVtZW50CmFybW9pcmUKYXJtdXJlCmFycGVudGVyCmFycmFjaGVyCmFycml2ZXIKYXJyb3NlcgphcnNlbmljCmFydGVcdTAzMDFyaWVsCmFydGljbGUKYXNwZWN0CmFzcGhhbHRlCmFzcGlyZXIKYXNzYXV0CmFzc2VydmlyCmFzc2lldHRlCmFzc29jaWVyCmFzc3VyZXIKYXN0aWNvdAphc3RyZQphc3R1Y2UKYXRlbGllcgphdG9tZQphdHJpdW0KYXRyb2NlCmF0dGFxdWUKYXR0ZW50aWYKYXR0aXJlcgphdHRyYXBlcgphdWJhaW5lCmF1YmVyZ2UKYXVkYWNlCmF1ZGlibGUKYXVndXJlcgphdXJvcmUKYXV0b21uZQphdXRydWNoZQphdmFsZXIKYXZhbmNlcgphdmFyaWNlCmF2ZW5pcgphdmVyc2UKYXZldWdsZQphdmlhdGV1cgphdmlkZQphdmlvbgphdmlzZXIKYXZvaW5lCmF2b3VlcgphdnJpbApheGlhbApheGlvbWUKYmFkZ2UKYmFmb3VlcgpiYWdhZ2UKYmFndWV0dGUKYmFpZ25hZGUKYmFsYW5jZXIKYmFsY29uCmJhbGVpbmUKYmFsaXNhZ2UKYmFtYmluCmJhbmNhaXJlCmJhbmRhZ2UKYmFubGlldWUKYmFubmllXHUwMzAwcmUKYmFucXVpZXIKYmFyYmllcgpiYXJpbApiYXJvbgpiYXJxdWUKYmFycmFnZQpiYXNzaW4KYmFzdGlvbgpiYXRhaWxsZQpiYXRlYXUKYmF0dGVyaWUKYmF1ZHJpZXIKYmF2YXJkZXIKYmVsZXR0ZQpiZVx1MDMwMWxpZXIKYmVsb3RlCmJlXHUwMzAxbmVcdTAzMDFmaWNlCmJlcmNlYXUKYmVyZ2VyCmJlcmxpbmUKYmVybXVkYQpiZXNhY2UKYmVzb2duZQpiZVx1MDMwMXRhaWwKYmV1cnJlCmJpYmVyb24KYmljeWNsZQpiaWR1bGUKYmlqb3UKYmlsYW4KYmlsaW5ndWUKYmlsbGFyZApiaW5haXJlCmJpb2xvZ2llCmJpb3BzaWUKYmlvdHlwZQpiaXNjdWl0CmJpc29uCmJpc3RvdXJpCmJpdHVtZQpiaXphcnJlCmJsYWZhcmQKYmxhZ3VlCmJsYW5jaGlyCmJsZXNzYW50CmJsaW5kZXIKYmxvbmQKYmxvcXVlcgpibG91c29uCmJvYmFyZApib2JpbmUKYm9pcmUKYm9pc2VyCmJvbGlkZQpib25ib24KYm9uZGlyCmJvbmhldXIKYm9uaWZpZXIKYm9udXMKYm9yZHVyZQpib3JuZQpib3R0ZQpib3VjbGUKYm91ZXV4CmJvdWdpZQpib3Vsb24KYm91cXVpbgpib3Vyc2UKYm91c3NvbGUKYm91dGlxdWUKYm94ZXVyCmJyYW5jaGUKYnJhc2llcgpicmF2ZQpicmViaXMKYnJlXHUwMzAwY2hlCmJyZXV2YWdlCmJyaWNvbGVyCmJyaWdhZGUKYnJpbGxhbnQKYnJpb2NoZQpicmlxdWUKYnJvY2h1cmUKYnJvZGVyCmJyb256ZXIKYnJvdXNzZQpicm95ZXVyCmJydW1lCmJydXNxdWUKYnJ1dGFsCmJydXlhbnQKYnVmZmxlCmJ1aXNzb24KYnVsbGV0aW4KYnVyZWF1CmJ1cmluCmJ1c3RpZXIKYnV0aW5lcgpidXRvaXIKYnV2YWJsZQpidXZldHRlCmNhYmFub24KY2FiaW5lCmNhY2hldHRlCmNhZGVhdQpjYWRyZQpjYWZlXHUwMzAxaW5lCmNhaWxsb3UKY2Fpc3NvbgpjYWxjdWxlcgpjYWxlcGluCmNhbGlicmUKY2FsbWVyCmNhbG9tbmllCmNhbHZhaXJlCmNhbWFyYWRlCmNhbWVcdTAzMDFyYQpjYW1pb24KY2FtcGFnbmUKY2FuYWwKY2FuZXRvbgpjYW5vbgpjYW50aW5lCmNhbnVsYXIKY2FwYWJsZQpjYXBvcmFsCmNhcHJpY2UKY2Fwc3VsZQpjYXB0ZXIKY2FwdWNoZQpjYXJhYmluZQpjYXJib25lCmNhcmVzc2VyCmNhcmlib3UKY2FybmFnZQpjYXJvdHRlCmNhcnJlYXUKY2FydG9uCmNhc2NhZGUKY2FzaWVyCmNhc3F1ZQpjYXNzdXJlCmNhdXNlcgpjYXV0aW9uCmNhdmFsaWVyCmNhdmVybmUKY2F2aWFyCmNlXHUwMzAxZGlsbGUKY2VpbnR1cmUKY2VcdTAzMDFsZXN0ZQpjZWxsdWxlCmNlbmRyaWVyCmNlbnN1cmVyCmNlbnRyYWwKY2VyY2xlCmNlXHUwMzAxcmVcdTAzMDFicmFsCmNlcmlzZQpjZXJuZXIKY2VydmVhdQpjZXNzZXIKY2hhZ3JpbgpjaGFpc2UKY2hhbGV1cgpjaGFtYnJlCmNoYW5jZQpjaGFwaXRyZQpjaGFyYm9uCmNoYXNzZXVyCmNoYXRvbgpjaGF1c3NvbgpjaGF2aXJlcgpjaGVtaXNlCmNoZW5pbGxlCmNoZVx1MDMwMXF1aWVyCmNoZXJjaGVyCmNoZXZhbApjaGllbgpjaGlmZnJlCmNoaWdub24KY2hpbWVcdTAzMDByZQpjaGlvdApjaGxvcnVyZQpjaG9jb2xhdApjaG9pc2lyCmNob3NlCmNob3VldHRlCmNocm9tZQpjaHV0ZQpjaWdhcmUKY2lnb2duZQpjaW1lbnRlcgpjaW5lXHUwMzAxbWEKY2ludHJlcgpjaXJjdWxlcgpjaXJlcgpjaXJxdWUKY2l0ZXJuZQpjaXRveWVuCmNpdHJvbgpjaXZpbApjbGFpcm9uCmNsYW1ldXIKY2xhcXVlcgpjbGFzc2UKY2xhdmllcgpjbGllbnQKY2xpZ25lcgpjbGltYXQKY2xpdmFnZQpjbG9jaGUKY2xvbmFnZQpjbG9wb3J0ZQpjb2JhbHQKY29icmEKY29jYXNzZQpjb2NvdGllcgpjb2Rlcgpjb2RpZmllcgpjb2ZmcmUKY29nbmVyCmNvaGVcdTAzMDFzaW9uCmNvaWZmZXIKY29pbmNlcgpjb2xlXHUwMzAwcmUKY29saWJyaQpjb2xsaW5lCmNvbG1hdGVyCmNvbG9uZWwKY29tYmF0CmNvbWVcdTAzMDFkaWUKY29tbWFuZGUKY29tcGFjdApjb25jZXJ0CmNvbmR1aXJlCmNvbmZpZXIKY29uZ2VsZXIKY29ubm90ZXIKY29uc29ubmUKY29udGFjdApjb252ZXhlCmNvcGFpbgpjb3BpZQpjb3JhaWwKY29yYmVhdQpjb3JkYWdlCmNvcm5pY2hlCmNvcnB1cwpjb3JyZWN0CmNvcnRlXHUwMzAwZ2UKY29zbWlxdWUKY29zdHVtZQpjb3Rvbgpjb3VkZQpjb3VwdXJlCmNvdXJhZ2UKY291dGVhdQpjb3V2cmlyCmNveW90ZQpjcmFiZQpjcmFpbnRlCmNyYXZhdGUKY3JheW9uCmNyZVx1MDMwMWF0dXJlCmNyZVx1MDMwMWRpdGVyCmNyZVx1MDMwMW1ldXgKY3JldXNlcgpjcmV2ZXR0ZQpjcmlibGVyCmNyaWVyCmNyaXN0YWwKY3JpdGVcdTAzMDByZQpjcm9pcmUKY3JvcXVlcgpjcm90YWxlCmNydWNpYWwKY3J1ZWwKY3J5cHRlcgpjdWJpcXVlCmN1ZWlsbGlyCmN1aWxsZVx1MDMwMHJlCmN1aXNpbmUKY3VpdnJlCmN1bG1pbmVyCmN1bHRpdmVyCmN1bXVsZXIKY3VwaWRlCmN1cmF0aWYKY3Vyc2V1cgpjeWFudXJlCmN5Y2xlCmN5bGluZHJlCmN5bmlxdWUKZGFpZ25lcgpkYW1pZXIKZGFuZ2VyCmRhbnNldXIKZGF1cGhpbgpkZVx1MDMwMWJhdHRyZQpkZVx1MDMwMWJpdGVyCmRlXHUwMzAxYm9yZGVyCmRlXHUwMzAxYnJpZGVyCmRlXHUwMzAxYnV0YW50CmRlXHUwMzAxY2FsZXIKZGVcdTAzMDFjZW1icmUKZGVcdTAzMDFjaGlyZXIKZGVcdTAzMDFjaWRlcgpkZVx1MDMwMWNsYXJlcgpkZVx1MDMwMWNvcmVyCmRlXHUwMzAxY3JpcmUKZGVcdTAzMDFjdXBsZXIKZGVcdTAzMDFkYWxlCmRlXHUwMzAxZHVjdGlmCmRlXHUwMzAxZXNzZQpkZVx1MDMwMWZlbnNpZgpkZVx1MDMwMWZpbGVyCmRlXHUwMzAxZnJheWVyCmRlXHUwMzAxZ2FnZXIKZGVcdTAzMDFnaXZyZXIKZGVcdTAzMDFnbHV0aXIKZGVcdTAzMDFncmFmZXIKZGVcdTAzMDFqZXVuZXIKZGVcdTAzMDFsaWNlCmRlXHUwMzAxbG9nZXIKZGVtYW5kZXIKZGVtZXVyZXIKZGVcdTAzMDFtb2xpcgpkZVx1MDMwMW5pY2hlcgpkZVx1MDMwMW5vdWVyCmRlbnRlbGxlCmRlXHUwMzAxbnVkZXIKZGVcdTAzMDFwYXJ0CmRlXHUwMzAxcGVuc2VyCmRlXHUwMzAxcGhhc2VyCmRlXHUwMzAxcGxhY2VyCmRlXHUwMzAxcG9zZXIKZGVcdTAzMDFyYW5nZXIKZGVcdTAzMDFyb2JlcgpkZVx1MDMwMXNhc3RyZQpkZXNjZW50ZQpkZVx1MDMwMXNlcnQKZGVcdTAzMDFzaWduZXIKZGVcdTAzMDFzb2JlXHUwMzAxaXIKZGVzc2luZXIKZGVzdHJpZXIKZGVcdTAzMDF0YWNoZXIKZGVcdTAzMDF0ZXN0ZXIKZGVcdTAzMDF0b3VyZXIKZGVcdTAzMDF0cmVzc2UKZGV2YW5jZXIKZGV2ZW5pcgpkZXZpbmVyCmRldm9pcgpkaWFibGUKZGlhbG9ndWUKZGlhbWFudApkaWN0ZXIKZGlmZmVcdTAzMDFyZXIKZGlnZVx1MDMwMXJlcgpkaWdpdGFsCmRpZ25lCmRpbHVlcgpkaW1hbmNoZQpkaW1pbnVlcgpkaW94eWRlCmRpcmVjdGlmCmRpcmlnZXIKZGlzY3V0ZXIKZGlzcG9zZXIKZGlzc2lwZXIKZGlzdGFuY2UKZGl2ZXJ0aXIKZGl2aXNlcgpkb2NpbGUKZG9jdGV1cgpkb2dtZQpkb2lndApkb21haW5lCmRvbWljaWxlCmRvbXB0ZXIKZG9uYXRldXIKZG9uam9uCmRvbm5lcgpkb3BhbWluZQpkb3J0b2lyCmRvcnVyZQpkb3NhZ2UKZG9zZXVyCmRvc3NpZXIKZG90YXRpb24KZG91YW5pZXIKZG91YmxlCmRvdWNldXIKZG91dGVyCmRveWVuCmRyYWdvbgpkcmFwZXIKZHJlc3NlcgpkcmliYmxlcgpkcm9pdHVyZQpkdXBlcmllCmR1cGxleGUKZHVyYWJsZQpkdXJjaXIKZHluYXN0aWUKZVx1MDMwMWJsb3VpcgplXHUwMzAxY2FydGVyCmVcdTAzMDFjaGFycGUKZVx1MDMwMWNoZWxsZQplXHUwMzAxY2xhaXJlcgplXHUwMzAxY2xpcHNlCmVcdTAzMDFjbG9yZQplXHUwMzAxY2x1c2UKZVx1MDMwMWNvbGUKZVx1MDMwMWNvbm9taWUKZVx1MDMwMWNvcmNlCmVcdTAzMDFjb3V0ZXIKZVx1MDMwMWNyYXNlcgplXHUwMzAxY3JlXHUwMzAxbWVyCmVcdTAzMDFjcml2YWluCmVcdTAzMDFjcm91CmVcdTAzMDFjdW1lCmVcdTAzMDFjdXJldWlsCmVcdTAzMDFkaWZpZXIKZVx1MDMwMWR1cXVlcgplZmZhY2VyCmVmZmVjdGlmCmVmZmlnaWUKZWZmb3J0CmVmZnJheWVyCmVmZnVzaW9uCmVcdTAzMDFnYWxpc2VyCmVcdTAzMDFnYXJlcgplXHUwMzAxamVjdGVyCmVcdTAzMDFsYWJvcmVyCmVcdTAzMDFsYXJnaXIKZVx1MDMwMWxlY3Ryb24KZVx1MDMwMWxlXHUwMzAxZ2FudAplXHUwMzAxbGVcdTAzMDFwaGFudAplXHUwMzAxbGVcdTAzMDB2ZQplXHUwMzAxbGlnaWJsZQplXHUwMzAxbGl0aXNtZQplXHUwMzAxbG9nZQplXHUwMzAxbHVjaWRlcgplXHUwMzAxbHVkZXIKZW1iYWxsZXIKZW1iZWxsaXIKZW1icnlvbgplXHUwMzAxbWVyYXVkZQplXHUwMzAxbWlzc2lvbgplbW1lbmVyCmVcdTAzMDFtb3Rpb24KZVx1MDMwMW1vdXZvaXIKZW1wZXJldXIKZW1wbG95ZXIKZW1wb3J0ZXIKZW1wcmlzZQplXHUwMzAxbXVsc2lvbgplbmNhZHJlcgplbmNoZVx1MDMwMHJlCmVuY2xhdmUKZW5jb2NoZQplbmRpZ3VlcgplbmRvc3NlcgplbmRyb2l0CmVuZHVpcmUKZVx1MDMwMW5lcmdpZQplbmZhbmNlCmVuZmVybWVyCmVuZm91aXIKZW5nYWdlcgplbmdpbgplbmdsb2JlcgplXHUwMzAxbmlnbWUKZW5qYW1iZXIKZW5qZXUKZW5sZXZlcgplbm5lbWkKZW5udXlldXgKZW5yaWNoaXIKZW5yb2JhZ2UKZW5zZWlnbmUKZW50YXNzZXIKZW50ZW5kcmUKZW50aWVyCmVudG91cmVyCmVudHJhdmVyCmVcdTAzMDFudW1lXHUwMzAxcmVyCmVudmFoaXIKZW52aWFibGUKZW52b3llcgplbnp5bWUKZVx1MDMwMW9saWVuCmVcdTAzMDFwYWlzc2lyCmVcdTAzMDFwYXJnbmUKZVx1MDMwMXBhdGFudAplXHUwMzAxcGF1bGUKZVx1MDMwMXBpY2VyaWUKZVx1MDMwMXBpZGVcdTAzMDFtaWUKZVx1MDMwMXBpZXIKZVx1MDMwMXBpbG9ndWUKZVx1MDMwMXBpbmUKZVx1MDMwMXBpc29kZQplXHUwMzAxcGl0YXBoZQplXHUwMzAxcG9xdWUKZVx1MDMwMXByZXV2ZQplXHUwMzAxcHJvdXZlcgplXHUwMzAxcHVpc2FudAplXHUwMzAxcXVlcnJlCmVcdTAzMDFxdWlwZQplXHUwMzAxcmlnZXIKZVx1MDMwMXJvc2lvbgplcnJldXIKZVx1MDMwMXJ1cHRpb24KZXNjYWxpZXIKZXNwYWRvbgplc3BlXHUwMzAwY2UKZXNwaWVcdTAzMDBnbGUKZXNwb2lyCmVzcHJpdAplc3F1aXZlcgplc3NheWVyCmVzc2VuY2UKZXNzaWV1CmVzc29yZXIKZXN0aW1lCmVzdG9tYWMKZXN0cmFkZQplXHUwMzAxdGFnZVx1MDMwMHJlCmVcdTAzMDF0YWxlcgplXHUwMzAxdGFuY2hlCmVcdTAzMDF0YXRpcXVlCmVcdTAzMDF0ZWluZHJlCmVcdTAzMDF0ZW5kb2lyCmVcdTAzMDF0ZXJuZWwKZVx1MDMwMXRoYW5vbAplXHUwMzAxdGhpcXVlCmV0aG5pZQplXHUwMzAxdGlyZXIKZVx1MDMwMXRvZmZlcgplXHUwMzAxdG9pbGUKZVx1MDMwMXRvbm5hbnQKZVx1MDMwMXRvdXJkaXIKZVx1MDMwMXRyYW5nZQplXHUwMzAxdHJvaXQKZVx1MDMwMXR1ZGUKZXVwaG9yaWUKZVx1MDMwMXZhbHVlcgplXHUwMzAxdmFzaW9uCmVcdTAzMDF2ZW50YWlsCmVcdTAzMDF2aWRlbmNlCmVcdTAzMDF2aXRlcgplXHUwMzAxdm9sdXRpZgplXHUwMzAxdm9xdWVyCmV4YWN0CmV4YWdlXHUwMzAxcmVyCmV4YXVjZXIKZXhjZWxsZXIKZXhjaXRhbnQKZXhjbHVzaWYKZXhjdXNlCmV4ZVx1MDMwMWN1dGVyCmV4ZW1wbGUKZXhlcmNlcgpleGhhbGVyCmV4aG9ydGVyCmV4aWdlbmNlCmV4aWxlcgpleGlzdGVyCmV4b3RpcXVlCmV4cGVcdTAzMDFkaWVyCmV4cGxvcmVyCmV4cG9zZXIKZXhwcmltZXIKZXhxdWlzCmV4dGVuc2lmCmV4dHJhaXJlCmV4dWx0ZXIKZmFibGUKZmFidWxldXgKZmFjZXR0ZQpmYWNpbGUKZmFjdHVyZQpmYWlibGlyCmZhbGFpc2UKZmFtZXV4CmZhbWlsbGUKZmFyY2V1cgpmYXJmZWx1CmZhcmluZQpmYXJvdWNoZQpmYXNjaW5lcgpmYXRhbApmYXRpZ3VlCmZhdWNvbgpmYXV0aWYKZmF2ZXVyCmZhdm9yaQpmZVx1MDMwMWJyaWxlCmZlXHUwMzAxY29uZGVyCmZlXHUwMzAxZGVcdTAzMDFyZXIKZmVcdTAzMDFsaW4KZmVtbWUKZmVcdTAzMDFtdXIKZmVuZG9pcgpmZVx1MDMwMW9kYWwKZmVybWVyCmZlXHUwMzAxcm9jZQpmZXJ2ZXVyCmZlc3RpdmFsCmZldWlsbGUKZmV1dHJlCmZlXHUwMzAxdnJpZXIKZmlhc2NvCmZpY2VsZXIKZmljdGlmCmZpZGVcdTAzMDBsZQpmaWd1cmUKZmlsYXR1cmUKZmlsZXRhZ2UKZmlsaWVcdTAzMDByZQpmaWxsZXVsCmZpbG1lcgpmaWxvdQpmaWx0cmVyCmZpbmFuY2VyCmZpbmlyCmZpb2xlCmZpcm1lCmZpc3N1cmUKZml4ZXIKZmxhaXJlcgpmbGFtbWUKZmxhc3F1ZQpmbGF0dGV1cgpmbGVcdTAzMDFhdQpmbGVcdTAzMDBjaGUKZmxldXIKZmxleGlvbgpmbG9jb24KZmxvcmUKZmx1Y3R1ZXIKZmx1aWRlCmZsdXZpYWwKZm9saWUKZm9uZGVyaWUKZm9uZ2libGUKZm9udGFpbmUKZm9yY2VyCmZvcmdlcm9uCmZvcm11bGVyCmZvcnR1bmUKZm9zc2lsZQpmb3VkcmUKZm91Z2VcdTAzMDByZQpmb3VpbGxlcgpmb3VsdXJlCmZvdXJtaQpmcmFnaWxlCmZyYWlzZQpmcmFuY2hpcgpmcmFwcGVyCmZyYXlldXIKZnJlXHUwMzAxZ2F0ZQpmcmVpbmVyCmZyZWxvbgpmcmVcdTAzMDFtaXIKZnJlXHUwMzAxbmVcdTAzMDFzaWUKZnJlXHUwMzAwcmUKZnJpYWJsZQpmcmljdGlvbgpmcmlzc29uCmZyaXZvbGUKZnJvaWQKZnJvbWFnZQpmcm9udGFsCmZyb3R0ZXIKZnJ1aXQKZnVnaXRpZgpmdWl0ZQpmdXJldXIKZnVyaWV1eApmdXJ0aWYKZnVzaW9uCmZ1dHVyCmdhZ25lcgpnYWxheGllCmdhbGVyaWUKZ2FtYmFkZXIKZ2FyYW50aXIKZ2FyZGllbgpnYXJuaXIKZ2FycmlndWUKZ2F6ZWxsZQpnYXpvbgpnZVx1MDMwMWFudApnZVx1MDMwMWxhdGluZQpnZVx1MDMwMWx1bGUKZ2VuZGFybWUKZ2VcdTAzMDFuZVx1MDMwMXJhbApnZVx1MDMwMW5pZQpnZW5vdQpnZW50aWwKZ2VcdTAzMDFvbG9naWUKZ2VcdTAzMDFvbWVcdTAzMDB0cmUKZ2VcdTAzMDFyYW5pdW0KZ2VybWUKZ2VzdHVlbApnZXlzZXIKZ2liaWVyCmdpY2xlcgpnaXJhZmUKZ2l2cmUKZ2xhY2UKZ2xhaXZlCmdsaXNzZXIKZ2xvYmUKZ2xvaXJlCmdsb3JpZXV4CmdvbGZldXIKZ29tbWUKZ29uZmxlcgpnb3JnZQpnb3JpbGxlCmdvdWRyb24KZ291ZmZyZQpnb3Vsb3QKZ291cGlsbGUKZ291cm1hbmQKZ291dHRlCmdyYWR1ZWwKZ3JhZmZpdGkKZ3JhaW5lCmdyYW5kCmdyYXBwaW4KZ3JhdHVpdApncmF2aXIKZ3JlbmF0CmdyaWZmdXJlCmdyaWxsZXIKZ3JpbXBlcgpncm9nbmVyCmdyb25kZXIKZ3JvdHRlCmdyb3VwZQpncnVnZXIKZ3J1dGllcgpncnV5ZVx1MDMwMHJlCmd1ZVx1MDMwMXBhcmQKZ3VlcnJpZXIKZ3VpZGUKZ3VpbWF1dmUKZ3VpdGFyZQpndXN0YXRpZgpneW1uYXN0ZQpneXJvc3RhdApoYWJpdHVkZQpoYWNob2lyCmhhbHRlCmhhbWVhdQpoYW5nYXIKaGFubmV0b24KaGFyaWNvdApoYXJtb25pZQpoYXJwb24KaGFzYXJkCmhlXHUwMzAxbGl1bQpoZVx1MDMwMW1hdG9tZQpoZXJiZQpoZVx1MDMwMXJpc3NvbgpoZXJtaW5lCmhlXHUwMzAxcm9uCmhlXHUwMzAxc2l0ZXIKaGV1cmV1eApoaWJlcm5lcgpoaWJvdQpoaWxhcmFudApoaXN0b2lyZQpoaXZlcgpob21hcmQKaG9tbWFnZQpob21vZ2VcdTAzMDBuZQpob25uZXVyCmhvbm9yZXIKaG9udGV1eApob3JkZQpob3Jpem9uCmhvcmxvZ2UKaG9ybW9uZQpob3JyaWJsZQpob3VsZXV4CmhvdXNzZQpodWJsb3QKaHVpbGV1eApodW1haW4KaHVtYmxlCmh1bWlkZQpodW1vdXIKaHVybGVyCmh5ZHJvbWVsCmh5Z2llXHUwMzAwbmUKaHltbmUKaHlwbm9zZQppZHlsbGUKaWdub3JlcgppZ3VhbmUKaWxsaWNpdGUKaWxsdXNpb24KaW1hZ2UKaW1iaWJlcgppbWl0ZXIKaW1tZW5zZQppbW1vYmlsZQppbW11YWJsZQppbXBhY3QKaW1wZVx1MDMwMXJpYWwKaW1wbG9yZXIKaW1wb3NlcgppbXByaW1lcgppbXB1dGVyCmluY2FybmVyCmluY2VuZGllCmluY2lkZW50CmluY2xpbmVyCmluY29sb3JlCmluZGV4ZXIKaW5kaWNlCmluZHVjdGlmCmluZVx1MDMwMWRpdAppbmVwdGllCmluZXhhY3QKaW5maW5pCmluZmxpZ2VyCmluZm9ybWVyCmluZnVzaW9uCmluZ2VcdTAzMDFyZXIKaW5oYWxlcgppbmhpYmVyCmluamVjdGVyCmluanVyZQppbm5vY2VudAppbm9jdWxlcgppbm9uZGVyCmluc2NyaXJlCmluc2VjdGUKaW5zaWduZQppbnNvbGl0ZQppbnNwaXJlcgppbnN0aW5jdAppbnN1bHRlcgppbnRhY3QKaW50ZW5zZQppbnRpbWUKaW50cmlndWUKaW50dWl0aWYKaW51dGlsZQppbnZhc2lvbgppbnZlbnRlcgppbnZpdGVyCmludm9xdWVyCmlyb25pcXVlCmlycmFkaWVyCmlycmVcdTAzMDFlbAppcnJpdGVyCmlzb2xlcgppdm9pcmUKaXZyZXNzZQpqYWd1YXIKamFpbGxpcgpqYW1iZQpqYW52aWVyCmphcmRpbgpqYXVnZXIKamF1bmUKamF2ZWxvdApqZXRhYmxlCmpldG9uCmpldWRpCmpldW5lc3NlCmpvaW5kcmUKam9uY2hlcgpqb25nbGVyCmpvdWV1cgpqb3Vpc3NpZgpqb3VybmFsCmpvdmlhbApqb3lhdQpqb3lldXgKanViaWxlcgpqdWdlbWVudApqdW5pb3IKanVwb24KanVyaXN0ZQpqdXN0aWNlCmp1dGV1eApqdXZlXHUwMzAxbmlsZQprYXlhawpraW1vbm8Ka2lvc3F1ZQpsYWJlbApsYWJpYWwKbGFib3VyZXIKbGFjZVx1MDMwMXJlcgpsYWN0b3NlCmxhZ3VuZQpsYWluZQpsYWlzc2VyCmxhaXRpZXIKbGFtYmVhdQpsYW1lbGxlCmxhbXBlCmxhbmNldXIKbGFuZ2FnZQpsYW50ZXJuZQpsYXBpbgpsYXJnZXVyCmxhcm1lCmxhdXJpZXIKbGF2YWJvCmxhdm9pcgpsZWN0dXJlCmxlXHUwMzAxZ2FsCmxlXHUwMzAxZ2VyCmxlXHUwMzAxZ3VtZQpsZXNzaXZlCmxldHRyZQpsZXZpZXIKbGV4aXF1ZQpsZVx1MDMwMXphcmQKbGlhc3NlCmxpYmVcdTAzMDFyZXIKbGlicmUKbGljZW5jZQpsaWNvcm5lCmxpZVx1MDMwMGdlCmxpZVx1MDMwMHZyZQpsaWdhdHVyZQpsaWdvdGVyCmxpZ3VlCmxpbWVyCmxpbWl0ZQpsaW1vbmFkZQpsaW1waWRlCmxpbmVcdTAzMDFhaXJlCmxpbmdvdApsaW9uY2VhdQpsaXF1aWRlCmxpc2llXHUwMzAwcmUKbGlzdGVyCmxpdGhpdW0KbGl0aWdlCmxpdHRvcmFsCmxpdnJldXIKbG9naXF1ZQpsb2ludGFpbgpsb2lzaXIKbG9tYnJpYwpsb3RlcmllCmxvdWVyCmxvdXJkCmxvdXRyZQpsb3V2ZQpsb3lhbApsdWJpZQpsdWNpZGUKbHVjcmF0aWYKbHVldXIKbHVndWJyZQpsdWlzYW50Cmx1bWllXHUwMzAwcmUKbHVuYWlyZQpsdW5kaQpsdXJvbgpsdXR0ZXIKbHV4dWV1eAptYWNoaW5lCm1hZ2FzaW4KbWFnZW50YQptYWdpcXVlCm1haWdyZQptYWlsbG9uCm1haW50aWVuCm1haXJpZQptYWlzb24KbWFqb3JlcgptYWxheGVyCm1hbGVcdTAzMDFmaWNlCm1hbGhldXIKbWFsaWNlCm1hbGxldHRlCm1hbW1vdXRoCm1hbmRhdGVyCm1hbmlhYmxlCm1hbnF1YW50Cm1hbnRlYXUKbWFudWVsCm1hcmF0aG9uCm1hcmJyZQptYXJjaGFuZAptYXJkaQptYXJpdGltZQptYXJxdWV1cgptYXJyb24KbWFydGVsZXIKbWFzY290dGUKbWFzc2lmCm1hdGVcdTAzMDFyaWVsCm1hdGllXHUwMzAwcmUKbWF0cmFxdWUKbWF1ZGlyZQptYXVzc2FkZQptYXV2ZQptYXhpbWFsCm1lXHUwMzAxY2hhbnQKbWVcdTAzMDFjb25udQptZVx1MDMwMWRhaWxsZQptZVx1MDMwMWRlY2luCm1lXHUwMzAxZGl0ZXIKbWVcdTAzMDFkdXNlCm1laWxsZXVyCm1lXHUwMzAxbGFuZ2UKbWVcdTAzMDFsb2RpZQptZW1icmUKbWVcdTAzMDFtb2lyZQptZW5hY2VyCm1lbmVyCm1lbmhpcgptZW5zb25nZQptZW50b3IKbWVyY3JlZGkKbWVcdTAzMDFyaXRlCm1lcmxlCm1lc3NhZ2VyCm1lc3VyZQptZVx1MDMwMXRhbAptZVx1MDMwMXRlXHUwMzAxb3JlCm1lXHUwMzAxdGhvZGUKbWVcdTAzMDF0aWVyCm1ldWJsZQptaWF1bGVyCm1pY3JvYmUKbWlldHRlCm1pZ25vbgptaWdyZXIKbWlsaWV1Cm1pbGxpb24KbWltaXF1ZQptaW5jZQptaW5lXHUwMzAxcmFsCm1pbmltYWwKbWlub3JlcgptaW51dGUKbWlyYWNsZQptaXJvaXRlcgptaXNzaWxlCm1peHRlCm1vYmlsZQptb2Rlcm5lCm1vZWxsZXV4Cm1vbmRpYWwKbW9uaXRldXIKbW9ubmFpZQptb25vdG9uZQptb25zdHJlCm1vbnRhZ25lCm1vbnVtZW50Cm1vcXVldXIKbW9yY2VhdQptb3JzdXJlCm1vcnRpZXIKbW90ZXVyCm1vdGlmCm1vdWNoZQptb3VmbGUKbW91bGluCm1vdXNzb24KbW91dG9uCm1vdXZhbnQKbXVsdGlwbGUKbXVuaXRpb24KbXVyYWlsbGUKbXVyZVx1MDMwMG5lCm11cm11cmUKbXVzY2xlCm11c2VcdTAzMDF1bQptdXNpY2llbgptdXRhdGlvbgptdXRlcgptdXR1ZWwKbXlyaWFkZQpteXJ0aWxsZQpteXN0ZVx1MDMwMHJlCm15dGhpcXVlCm5hZ2V1cgpuYXBwZQpuYXJxdW9pcwpuYXJyZXIKbmF0YXRpb24KbmF0aW9uCm5hdHVyZQpuYXVmcmFnZQpuYXV0aXF1ZQpuYXZpcmUKbmVcdTAzMDFidWxldXgKbmVjdGFyCm5lXHUwMzAxZmFzdGUKbmVcdTAzMDFnYXRpb24KbmVcdTAzMDFnbGlnZXIKbmVcdTAzMDFnb2NpZXIKbmVpZ2UKbmVydmV1eApuZXR0b3llcgpuZXVyb25lCm5ldXRyb24KbmV2ZXUKbmljaGUKbmlja2VsCm5pdHJhdGUKbml2ZWF1Cm5vYmxlCm5vY2lmCm5vY3R1cm5lCm5vaXJjZXVyCm5vaXNldHRlCm5vbWFkZQpub21icmV1eApub21tZXIKbm9ybWF0aWYKbm90YWJsZQpub3RpZmllcgpub3RvaXJlCm5vdXJyaXIKbm91dmVhdQpub3ZhdGV1cgpub3ZlbWJyZQpub3ZpY2UKbnVhZ2UKbnVhbmNlcgpudWlyZQpudWlzaWJsZQpudW1lXHUwMzAxcm8KbnVwdGlhbApudXF1ZQpudXRyaXRpZgpvYmVcdTAzMDFpcgpvYmplY3RpZgpvYmxpZ2VyCm9ic2N1cgpvYnNlcnZlcgpvYnN0YWNsZQpvYnRlbmlyCm9idHVyZXIKb2NjYXNpb24Kb2NjdXBlcgpvY2VcdTAzMDFhbgpvY3RvYnJlCm9jdHJveWVyCm9jdHVwbGVyCm9jdWxhaXJlCm9kZXVyCm9kb3JhbnQKb2ZmZW5zZXIKb2ZmaWNpZXIKb2ZmcmlyCm9naXZlCm9pc2VhdQpvaXNpbGxvbgpvbGZhY3RpZgpvbGl2aWVyCm9tYnJhZ2UKb21ldHRyZQpvbmN0dWV1eApvbmR1bGVyCm9uZVx1MDMwMXJldXgKb25pcmlxdWUKb3BhbGUKb3BhcXVlCm9wZVx1MDMwMXJlcgpvcGluaW9uCm9wcG9ydHVuCm9wcHJpbWVyCm9wdGVyCm9wdGlxdWUKb3JhZ2V1eApvcmFuZ2UKb3JiaXRlCm9yZG9ubmVyCm9yZWlsbGUKb3JnYW5lCm9yZ3VlaWwKb3JpZmljZQpvcm5lbWVudApvcnF1ZQpvcnRpZQpvc2NpbGxlcgpvc21vc2UKb3NzYXR1cmUKb3RhcmllCm91cmFnYW4Kb3Vyc29uCm91dGlsCm91dHJhZ2VyCm91dnJhZ2UKb3ZhdGlvbgpveHlkZQpveHlnZVx1MDMwMG5lCm96b25lCnBhaXNpYmxlCnBhbGFjZQpwYWxtYXJlXHUwMzAwcwpwYWxvdXJkZQpwYWxwZXIKcGFuYWNoZQpwYW5kYQpwYW5nb2xpbgpwYW5pcXVlcgpwYW5uZWF1CnBhbm9yYW1hCnBhbnRhbG9uCnBhcGF5ZQpwYXBpZXIKcGFwb3RlcgpwYXB5cnVzCnBhcmFkb3hlCnBhcmNlbGxlCnBhcmVzc2UKcGFyZnVtZXIKcGFybGVyCnBhcm9sZQpwYXJyYWluCnBhcnNlbWVyCnBhcnRhZ2VyCnBhcnVyZQpwYXJ2ZW5pcgpwYXNzaW9uCnBhc3RlXHUwMzAwcXVlCnBhdGVybmVsCnBhdGllbmNlCnBhdHJvbgpwYXZpbGxvbgpwYXZvaXNlcgpwYXllcgpwYXlzYWdlCnBlaWduZQpwZWludHJlCnBlbGFnZQpwZVx1MDMwMWxpY2FuCnBlbGxlCnBlbG91c2UKcGVsdWNoZQpwZW5kdWxlCnBlXHUwMzAxbmVcdTAzMDF0cmVyCnBlXHUwMzAxbmlibGUKcGVuc2lmCnBlXHUwMzAxbnVyaWUKcGVcdTAzMDFwaXRlCnBlXHUwMzAxcGx1bQpwZXJkcml4CnBlcmZvcmVyCnBlXHUwMzAxcmlvZGUKcGVybXV0ZXIKcGVycGxleGUKcGVyc2lsCnBlcnRlCnBlc2VyCnBlXHUwMzAxdGFsZQpwZXRpdApwZVx1MDMwMXRyaXIKcGV1cGxlCnBoYXJhb24KcGhvYmllCnBob3F1ZQpwaG90b24KcGhyYXNlCnBoeXNpcXVlCnBpYW5vCnBpY3R1cmFsCnBpZVx1MDMwMGNlCnBpZXJyZQpwaWV1dnJlCnBpbG90ZQpwaW5jZWF1CnBpcGV0dGUKcGlxdWVyCnBpcm9ndWUKcGlzY2luZQpwaXN0b24KcGl2b3RlcgpwaXhlbApwaXp6YQpwbGFjYXJkCnBsYWZvbmQKcGxhaXNpcgpwbGFuZXIKcGxhcXVlCnBsYXN0cm9uCnBsYXRlYXUKcGxldXJlcgpwbGV4dXMKcGxpYWdlCnBsb21iCnBsb25nZXIKcGx1aWUKcGx1bWFnZQpwb2NoZXR0ZQpwb2VcdTAzMDFzaWUKcG9lXHUwMzAwdGUKcG9pbnRlCnBvaXJpZXIKcG9pc3Nvbgpwb2l2cmUKcG9sYWlyZQpwb2xpY2llcgpwb2xsZW4KcG9seWdvbmUKcG9tbWFkZQpwb21waWVyCnBvbmN0dWVsCnBvbmRlXHUwMzAxcmVyCnBvbmV5CnBvcnRpcXVlCnBvc2l0aW9uCnBvc3NlXHUwMzAxZGVyCnBvc3R1cmUKcG90YWdlcgpwb3RlYXUKcG90aW9uCnBvdWNlCnBvdWxhaW4KcG91bW9uCnBvdXJwcmUKcG91c3Npbgpwb3V2b2lyCnByYWlyaWUKcHJhdGlxdWUKcHJlXHUwMzAxY2lldXgKcHJlXHUwMzAxZGlyZQpwcmVcdTAzMDFmaXhlCnByZVx1MDMwMWx1ZGUKcHJlXHUwMzAxbm9tCnByZVx1MDMwMXNlbmNlCnByZVx1MDMwMXRleHRlCnByZVx1MDMwMXZvaXIKcHJpbWl0aWYKcHJpbmNlCnByaXNvbgpwcml2ZXIKcHJvYmxlXHUwMzAwbWUKcHJvY2VcdTAzMDFkZXIKcHJvZGlnZQpwcm9mb25kCnByb2dyZVx1MDMwMHMKcHJvaWUKcHJvamV0ZXIKcHJvbG9ndWUKcHJvbWVuZXIKcHJvcHJlCnByb3NwZVx1MDMwMHJlCnByb3RlXHUwMzAxZ2VyCnByb3Vlc3NlCnByb3ZlcmJlCnBydWRlbmNlCnBydW5lYXUKcHN5Y2hvc2UKcHVibGljCnB1Y2Vyb24KcHVpc2VyCnB1bHBlCnB1bHNhcgpwdW5haXNlCnB1bml0aWYKcHVwaXRyZQpwdXJpZmllcgpwdXp6bGUKcHlyYW1pZGUKcXVhc2FyCnF1ZXJlbGxlCnF1ZXN0aW9uCnF1aWVcdTAzMDF0dWRlCnF1aXR0ZXIKcXVvdGllbnQKcmFjaW5lCnJhY29udGVyCnJhZGlldXgKcmFnb25kaW4KcmFpZGV1cgpyYWlzaW4KcmFsZW50aXIKcmFsbG9uZ2UKcmFtYXNzZXIKcmFwaWRlCnJhc2FnZQpyYXRpc3NlcgpyYXZhZ2VyCnJhdmluCnJheW9ubmVyCnJlXHUwMzAxYWN0aWYKcmVcdTAzMDFhZ2lyCnJlXHUwMzAxYWxpc2VyCnJlXHUwMzAxYW5pbWVyCnJlY2V2b2lyCnJlXHUwMzAxY2l0ZXIKcmVcdTAzMDFjbGFtZXIKcmVcdTAzMDFjb2x0ZXIKcmVjcnV0ZXIKcmVjdWxlcgpyZWN5Y2xlcgpyZVx1MDMwMWRpZ2VyCnJlZG91dGVyCnJlZmFpcmUKcmVcdTAzMDFmbGV4ZQpyZVx1MDMwMWZvcm1lcgpyZWZyYWluCnJlZnVnZQpyZVx1MDMwMWdhbGllbgpyZVx1MDMwMWdpb24KcmVcdTAzMDFnbGFnZQpyZVx1MDMwMWd1bGllcgpyZVx1MDMwMWl0ZVx1MDMwMXJlcgpyZWpldGVyCnJlam91ZXIKcmVsYXRpZgpyZWxldmVyCnJlbGllZgpyZW1hcnF1ZQpyZW1lXHUwMzAwZGUKcmVtaXNlCnJlbW9udGVyCnJlbXBsaXIKcmVtdWVyCnJlbmFyZApyZW5mb3J0CnJlbmlmbGVyCnJlbm9uY2VyCnJlbnRyZXIKcmVudm9pCnJlcGxpZXIKcmVwb3J0ZXIKcmVwcmlzZQpyZXB0aWxlCnJlcXVpbgpyZVx1MDMwMXNlcnZlCnJlXHUwMzAxc2luZXV4CnJlXHUwMzAxc291ZHJlCnJlc3BlY3QKcmVzdGVyCnJlXHUwMzAxc3VsdGF0CnJlXHUwMzAxdGFibGlyCnJldGVuaXIKcmVcdTAzMDF0aWN1bGUKcmV0b21iZXIKcmV0cmFjZXIKcmVcdTAzMDF1bmlvbgpyZVx1MDMwMXVzc2lyCnJldmFuY2hlCnJldml2cmUKcmVcdTAzMDF2b2x0ZQpyZVx1MDMwMXZ1bHNpZgpyaWNoZXNzZQpyaWRlYXUKcmlldXIKcmlnaWRlCnJpZ29sZXIKcmluY2VyCnJpcG9zdGVyCnJpc2libGUKcmlzcXVlCnJpdHVlbApyaXZhbApyaXZpZVx1MDMwMHJlCnJvY2hldXgKcm9tYW5jZQpyb21wcmUKcm9uY2UKcm9uZGluCnJvc2VhdQpyb3NpZXIKcm90YXRpZgpyb3Rvcgpyb3R1bGUKcm91Z2UKcm91aWxsZQpyb3VsZWF1CnJvdXRpbmUKcm95YXVtZQpydWJhbgpydWJpcwpydWNoZQpydWVsbGUKcnVndWV1eApydWluZXIKcnVpc3NlYXUKcnVzZXIKcnVzdGlxdWUKcnl0aG1lCnNhYmxlcgpzYWJvdGVyCnNhYnJlCnNhY29jaGUKc2FmYXJpCnNhZ2Vzc2UKc2Fpc2lyCnNhbGFkZQpzYWxpdmUKc2Fsb24Kc2FsdWVyCnNhbWVkaQpzYW5jdGlvbgpzYW5nbGllcgpzYXJjYXNtZQpzYXJkaW5lCnNhdHVyZXIKc2F1Z3JlbnUKc2F1bW9uCnNhdXRlcgpzYXV2YWdlCnNhdmFudApzYXZvbm5lcgpzY2FscGVsCnNjYW5kYWxlCnNjZVx1MDMwMWxlXHUwMzAxcmF0CnNjZVx1MDMwMW5hcmlvCnNjZXB0cmUKc2NoZVx1MDMwMW1hCnNjaWVuY2UKc2NpbmRlcgpzY29yZQpzY3J1dGluCnNjdWxwdGVyCnNlXHUwMzAxYW5jZQpzZVx1MDMwMWNhYmxlCnNlXHUwMzAxY2hlcgpzZWNvdWVyCnNlXHUwMzAxY3JlXHUwMzAxdGVyCnNlXHUwMzAxZGF0aWYKc2VcdTAzMDFkdWlyZQpzZWlnbmV1cgpzZVx1MDMwMWpvdXIKc2VcdTAzMDFsZWN0aWYKc2VtYWluZQpzZW1ibGVyCnNlbWVuY2UKc2VcdTAzMDFtaW5hbApzZVx1MDMwMW5hdGV1cgpzZW5zaWJsZQpzZW50ZW5jZQpzZVx1MDMwMXBhcmVyCnNlXHUwMzAxcXVlbmNlCnNlcmVpbgpzZXJnZW50CnNlXHUwMzAxcmlldXgKc2VycnVyZQpzZVx1MDMwMXJ1bQpzZXJ2aWNlCnNlXHUwMzAxc2FtZQpzZVx1MDMwMXZpcgpzZXZyYWdlCnNleHR1cGxlCnNpZGVcdTAzMDFyYWwKc2llXHUwMzAwY2xlCnNpZVx1MDMwMWdlcgpzaWZmbGVyCnNpZ2xlCnNpZ25hbApzaWxlbmNlCnNpbGljaXVtCnNpbXBsZQpzaW5jZVx1MDMwMHJlCnNpbmlzdHJlCnNpcGhvbgpzaXJvcApzaXNtaXF1ZQpzaXR1ZXIKc2tpZXIKc29jaWFsCnNvY2xlCnNvZGl1bQpzb2lnbmV1eApzb2xkYXQKc29sZWlsCnNvbGl0dWRlCnNvbHVibGUKc29tYnJlCnNvbW1laWwKc29tbm9sZXIKc29uZGUKc29uZ2V1cgpzb25uZXR0ZQpzb25vcmUKc29yY2llcgpzb3J0aXIKc29zaWUKc290dGlzZQpzb3VjaWV1eApzb3VkdXJlCnNvdWZmbGUKc291bGV2ZXIKc291cGFwZQpzb3VyY2UKc291dGlyZXIKc291dmVuaXIKc3BhY2lldXgKc3BhdGlhbApzcGVcdTAzMDFjaWFsCnNwaGVcdTAzMDByZQpzcGlyYWwKc3RhYmxlCnN0YXRpb24Kc3Rlcm51bQpzdGltdWx1cwpzdGlwdWxlcgpzdHJpY3QKc3R1ZGlldXgKc3R1cGV1cgpzdHlsaXN0ZQpzdWJsaW1lCnN1YnN0cmF0CnN1YnRpbApzdWJ2ZW5pcgpzdWNjZVx1MDMwMHMKc3VjcmUKc3VmZml4ZQpzdWdnZVx1MDMwMXJlcgpzdWl2ZXVyCnN1bGZhdGUKc3VwZXJiZQpzdXBwbGllcgpzdXJmYWNlCnN1cmljYXRlCnN1cm1lbmVyCnN1cnByaXNlCnN1cnNhdXQKc3VydmllCnN1c3BlY3QKc3lsbGFiZQpzeW1ib2xlCnN5bWVcdTAzMDF0cmllCnN5bmFwc2UKc3ludGF4ZQpzeXN0ZVx1MDMwMG1lCnRhYmFjCnRhYmxpZXIKdGFjdGlsZQp0YWlsbGVyCnRhbGVudAp0YWxpc21hbgp0YWxvbm5lcgp0YW1ib3VyCnRhbWlzZXIKdGFuZ2libGUKdGFwaXMKdGFxdWluZXIKdGFyZGVyCnRhcmlmCnRhcnRpbmUKdGFzc2UKdGF0YW1pCnRhdG91YWdlCnRhdXBlCnRhdXJlYXUKdGF4ZXIKdGVcdTAzMDFtb2luCnRlbXBvcmVsCnRlbmFpbGxlCnRlbmRyZQp0ZW5ldXIKdGVuaXIKdGVuc2lvbgp0ZXJtaW5lcgp0ZXJuZQp0ZXJyaWJsZQp0ZVx1MDMwMXRpbmUKdGV4dGUKdGhlXHUwMzAwbWUKdGhlXHUwMzAxb3JpZQp0aGVcdTAzMDFyYXBpZQp0aG9yYXgKdGliaWEKdGllXHUwMzAwZGUKdGltaWRlCnRpcmVsaXJlCnRpcm9pcgp0aXNzdQp0aXRhbmUKdGl0cmUKdGl0dWJlcgp0b2JvZ2dhbgp0b2xlXHUwMzAxcmFudAp0b21hdGUKdG9uaXF1ZQp0b25uZWF1CnRvcG9ueW1lCnRvcmNoZQp0b3JkcmUKdG9ybmFkZQp0b3JwaWxsZQp0b3JyZW50CnRvcnNlCnRvcnR1ZQp0b3RlbQp0b3VjaGVyCnRvdXJuYWdlCnRvdXNzZXIKdG94aW5lCnRyYWN0aW9uCnRyYWZpYwp0cmFnaXF1ZQp0cmFoaXIKdHJhaW4KdHJhbmNoZXIKdHJhdmFpbAp0cmVcdTAzMDBmbGUKdHJlbXBlcgp0cmVcdTAzMDFzb3IKdHJldWlsCnRyaWFnZQp0cmlidW5hbAp0cmljb3Rlcgp0cmlsb2dpZQp0cmlvbXBoZQp0cmlwbGVyCnRyaXR1cmVyCnRyaXZpYWwKdHJvbWJvbmUKdHJvbmMKdHJvcGljYWwKdHJvdXBlYXUKdHVpbGUKdHVsaXBlCnR1bXVsdGUKdHVubmVsCnR1cmJpbmUKdHV0ZXVyCnR1dG95ZXIKdHV5YXUKdHltcGFuCnR5cGhvbgp0eXBpcXVlCnR5cmFuCnVidWVzcXVlCnVsdGltZQp1bHRyYXNvbgp1bmFuaW1lCnVuaWZpZXIKdW5pb24KdW5pcXVlCnVuaXRhaXJlCnVuaXZlcnMKdXJhbml1bQp1cmJhaW4KdXJ0aWNhbnQKdXNhZ2UKdXNpbmUKdXN1ZWwKdXN1cmUKdXRpbGUKdXRvcGllCnZhY2FybWUKdmFjY2luCnZhZ2Fib25kCnZhZ3VlCnZhaWxsYW50CnZhaW5jcmUKdmFpc3NlYXUKdmFsYWJsZQp2YWxpc2UKdmFsbG9uCnZhbHZlCnZhbXBpcmUKdmFuaWxsZQp2YXBldXIKdmFyaWVyCnZhc2V1eAp2YXNzYWwKdmFzdGUKdmVjdGV1cgp2ZWRldHRlCnZlXHUwMzAxZ2VcdTAzMDF0YWwKdmVcdTAzMDFoaWN1bGUKdmVpbmFyZAp2ZVx1MDMwMWxvY2UKdmVuZHJlZGkKdmVcdTAzMDFuZVx1MDMwMXJlcgp2ZW5nZXIKdmVuaW1ldXgKdmVudG91c2UKdmVyZHVyZQp2ZVx1MDMwMXJpbgp2ZXJuaXIKdmVycm91CnZlcnNlcgp2ZXJ0dQp2ZXN0b24KdmVcdTAzMDF0ZVx1MDMwMXJhbgp2ZVx1MDMwMXR1c3RlCnZleGFudAp2ZXhlcgp2aWFkdWMKdmlhbmRlCnZpY3RvaXJlCnZpZGFuZ2UKdmlkZVx1MDMwMW8KdmlnbmV0dGUKdmlndWV1cgp2aWxhaW4KdmlsbGFnZQp2aW5haWdyZQp2aW9sb24KdmlwZVx1MDMwMHJlCnZpcmVtZW50CnZpcnR1b3NlCnZpcnVzCnZpc2FnZQp2aXNldXIKdmlzaW9uCnZpc3F1ZXV4CnZpc3VlbAp2aXRhbAp2aXRlc3NlCnZpdGljb2xlCnZpdHJpbmUKdml2YWNlCnZpdmlwYXJlCnZvY2F0aW9uCnZvZ3Vlcgp2b2lsZQp2b2lzaW4Kdm9pdHVyZQp2b2xhaWxsZQp2b2xjYW4Kdm9sdGlnZXIKdm9sdW1lCnZvcmFjZQp2b3J0ZXgKdm90ZXIKdm91bG9pcgp2b3lhZ2UKdm95ZWxsZQp3YWdvbgp4ZVx1MDMwMW5vbgp5YWNodAp6ZVx1MDMwMGJyZQp6ZVx1MDMwMW5pdGgKemVzdGUKem9vbG9naWVgLnNwbGl0KCJcbiIpOwoKICAvLyBub2RlX21vZHVsZXMvQHNjdXJlL2JpcDM5L2VzbS93b3JkbGlzdHMvaXRhbGlhbi5qcwogIHZhciB3b3JkbGlzdDQgPSBgYWJhY28KYWJiYWdsaW8KYWJiaW5hdG8KYWJldGUKYWJpc3NvCmFib2xpcmUKYWJyYXNpdm8KYWJyb2dhdG8KYWNjYWRlcmUKYWNjZW5ubwphY2N1c2F0bwphY2V0b25lCmFjaGlsbGUKYWNpZG8KYWNxdWEKYWNyZQphY3JpbGljbwphY3JvYmF0YQphY3V0bwphZGFnaW8KYWRkZWJpdG8KYWRkb21lCmFkZWd1YXRvCmFkZXJpcmUKYWRpcGUKYWRvdHRhcmUKYWR1bGFyZQphZmZhYmlsZQphZmZldHRvCmFmZmlzc28KYWZmcmFudG8KYWZvcmlzbWEKYWZvc28KYWZyaWNhbm8KYWdhdmUKYWdlbnRlCmFnZXZvbGUKYWdnYW5jaW8KYWdpcmUKYWdpdGFyZQphZ29uaXNtbwphZ3JpY29sbwphZ3J1bWV0bwphZ3V6em8KYWxhYmFyZGEKYWxhdG8KYWxiYXRybwphbGJlcmF0bwphbGJvCmFsYnVtZQphbGNlCmFsY29saWNvCmFsZXR0b25lCmFsZmEKYWxnZWJyYQphbGlhbnRlCmFsaWJpCmFsaW1lbnRvCmFsbGFnYXRvCmFsbGVncm8KYWxsaWV2bwphbGxvZG9sYQphbGx1c2l2bwphbG1lbm8KYWxvZ2VubwphbHBhY2EKYWxwZXN0cmUKYWx0YWxlbmEKYWx0ZXJubwphbHRpY2NpbwphbHRyb3ZlCmFsdW5ubwphbHZlb2xvCmFsemFyZQphbWFsZ2FtYQphbWFuaXRhCmFtYXJlbmEKYW1iaXRvCmFtYnJhdG8KYW1lYmEKYW1lcmljYQphbWV0aXN0YQphbWljbwphbW1hc3NvCmFtbWVuZGEKYW1taXJhcmUKYW1tb25pdG8KYW1vcmUKYW1waW8KYW1wbGlhcmUKYW11bGV0bwphbmFjYXJkbwphbmFncmFmZQphbmFsaXN0YQphbmFyY2hpYQphbmF0cmEKYW5jYQphbmNlbGxhCmFuY29yYQphbmRhcmUKYW5kcmVhCmFuZWxsbwphbmdlbG8KYW5nb2xhcmUKYW5ndXN0bwphbmltYQphbm5lZ2FyZQphbm5pZGF0bwphbm5vCmFubnVuY2lvCmFub25pbW8KYW50aWNpcG8KYW56aQphcGF0aWNvCmFwZXJ0dXJhCmFwb2RlCmFwcGFyaXJlCmFwcGV0aXRvCmFwcG9nZ2lvCmFwcHJvZG8KYXBwdW50bwphcHJpbGUKYXJhYmljYQphcmFjaGlkZQphcmFnb3N0YQphcmFsZGljYQphcmFuY2lvCmFyYXR1cmEKYXJhenpvCmFyYml0cm8KYXJjaGl2aW8KYXJkaXRvCmFyZW5pbGUKYXJnZW50bwphcmdpbmUKYXJndXRvCmFyaWEKYXJtb25pYQphcm5lc2UKYXJyZWRhdG8KYXJyaW5nYQphcnJvc3RvCmFyc2VuaWNvCmFyc28KYXJ0ZWZpY2UKYXJ6aWxsbwphc2NpdXR0bwphc2NvbHRvCmFzZXBzaQphc2V0dGljbwphc2ZhbHRvCmFzaW5vCmFzb2xhCmFzcGlyYXRvCmFzcHJvCmFzc2FnZ2lvCmFzc2UKYXNzb2x1dG8KYXNzdXJkbwphc3RhCmFzdGVudXRvCmFzdGljZQphc3RyYXR0bwphdGF2aWNvCmF0ZWlzbW8KYXRvbWljbwphdG9ubwphdHRlc2EKYXR0aXZhcmUKYXR0b3JubwphdHRyaXRvCmF0dHVhbGUKYXVzaWxpbwphdXN0cmlhCmF1dGlzdGEKYXV0b25vbW8KYXV0dW5ubwphdmFuemF0bwphdmVyZQphdnZlbmlyZQphdnZpc28KYXZ2b2xnZXJlCmF6aW9uZQphem90bwphenppbW8KYXp6dXJybwpiYWJlbGUKYmFjY2FubwpiYWNpbm8KYmFjbwpiYWRlc3NhCmJhZGlsYXRhCmJhZ25hdG8KYmFpdGEKYmFsY29uZQpiYWxkbwpiYWxlbmEKYmFsbGF0YQpiYWx6YW5vCmJhbWJpbm8KYmFuZGlyZQpiYXJhb25kYQpiYXJiYXJvCmJhcmNhCmJhcml0b25vCmJhcmx1bWUKYmFyb2NjbwpiYXNpbGljbwpiYXNzbwpiYXRvc3RhCmJhdHR1dG8KYmF1bGUKYmF2YQpiYXZvc2EKYmVjY28KYmVmZmEKYmVsZ2lvCmJlbHZhCmJlbmRhCmJlbmV2b2xlCmJlbmlnbm8KYmVuemluYQpiZXJlCmJlcmxpbmEKYmV0YQpiaWJpdGEKYmljaQpiaWRvbmUKYmlmaWRvCmJpZ2EKYmlsYW5jaWEKYmltYm8KYmlub2NvbG8KYmlvbG9nbwpiaXBlZGUKYmlwb2xhcmUKYmlyYmFudGUKYmlycmEKYmlzY290dG8KYmlzZXN0bwpiaXNub25ubwpiaXNvbnRlCmJpc3R1cmkKYml6emFycm8KYmxhbmRvCmJsYXR0YQpib2xsaXRvCmJvbmlmaWNvCmJvcmRvCmJvc2NvCmJvdGFuaWNvCmJvdHRpbm8KYm96em9sbwpicmFjY2lvCmJyYWRpcG8KYnJhbWEKYnJhbmNhCmJyYXZ1cmEKYnJldGVsbGEKYnJldmV0dG8KYnJlenphCmJyaWdsaWEKYnJpbGxhbnRlCmJyaW5kYXJlCmJyb2Njb2xvCmJyb2RvCmJyb256aW5hCmJydWxsbwpicnVubwpidWJib25lCmJ1Y2EKYnVkaW5vCmJ1ZmZvbmUKYnVpbwpidWxibwpidW9ubwpidXJsb25lCmJ1cnJhc2NhCmJ1c3NvbGEKYnVzdGEKY2FkZXR0bwpjYWR1Y28KY2FsYW1hcm8KY2FsY29sbwpjYWxlc3NlCmNhbGlicm8KY2FsbW8KY2Fsb3JpYQpjYW1idXNhCmNhbWVyYXRhCmNhbWljaWEKY2FtbWlubwpjYW1vbGEKY2FtcGFsZQpjYW5hcGEKY2FuZGVsYQpjYW5lCmNhbmlubwpjYW5vdHRvCmNhbnRpbmEKY2FwYWNlCmNhcGVsbG8KY2FwaXRvbG8KY2Fwb2dpcm8KY2FwcGVybwpjYXByYQpjYXBzdWxhCmNhcmFwYWNlCmNhcmNhc3NhCmNhcmRvCmNhcmlzbWEKY2Fyb3ZhbmEKY2FycmV0dG8KY2FydG9saW5hCmNhc2FjY2lvCmNhc2NhdGEKY2FzZXJtYQpjYXNvCmNhc3NvbmUKY2FzdGVsbG8KY2FzdWFsZQpjYXRhc3RhCmNhdGVuYQpjYXRyYW1lCmNhdXRvCmNhdmlsbG8KY2VkaWJpbGUKY2VkcmF0YQpjZWZhbG8KY2VsZWJyZQpjZWxsdWxhcmUKY2VuYQpjZW5vbmUKY2VudGVzaW1vCmNlcmFtaWNhCmNlcmNhcmUKY2VydG8KY2VydW1lCmNlcnZlbGxvCmNlc29pYQpjZXNwbwpjZXRvCmNoZWxhCmNoaWFybwpjaGljY2EKY2hpZWRlcmUKY2hpbWVyYQpjaGluYQpjaGlydXJnbwpjaGl0YXJyYQpjaWFvCmNpY2xpc21vCmNpZnJhcmUKY2lnbm8KY2lsaW5kcm8KY2lvdHRvbG8KY2lyY2EKY2lycm9zaQpjaXRyaWNvCmNpdHRhZGlubwpjaXVmZm8KY2l2ZXR0YQpjaXZpbGUKY2xhc3NpY28KY2xpbmljYQpjbG9ybwpjb2Njbwpjb2RhcmRvCmNvZGljZQpjb2VyZW50ZQpjb2dub21lCmNvbGxhcmUKY29sbWF0bwpjb2xvcmUKY29scG9zbwpjb2x0aXZhdG8KY29semEKY29tYQpjb21ldGEKY29tbWFuZG8KY29tb2RvCmNvbXB1dGVyCmNvbXVuZQpjb25jaXNvCmNvbmR1cnJlCmNvbmZlcm1hCmNvbmdlbGFyZQpjb25pdWdlCmNvbm5lc3NvCmNvbm9zY2VyZQpjb25zdW1vCmNvbnRpbnVvCmNvbnZlZ25vCmNvcGVydG8KY29waW9uZQpjb3BwaWEKY29wcmljYXBvCmNvcmF6emEKY29yZGF0YQpjb3JpY2F0bwpjb3JuaWNlCmNvcm9sbGEKY29ycG8KY29ycmVkbwpjb3JzaWEKY29ydGVzZQpjb3NtaWNvCmNvc3RhbnRlCmNvdHR1cmEKY292YXRvCmNyYXRlcmUKY3JhdmF0dGEKY3JlYXRvCmNyZWRlcmUKY3JlbW9zbwpjcmVzY2l0YQpjcmV0YQpjcmljZXRvCmNyaW5hbGUKY3Jpc2kKY3JpdGljbwpjcm9jZQpjcm9uYWNhCmNyb3N0YXRhCmNydWNpYWxlCmNydXNjYQpjdWNpcmUKY3VjdWxvCmN1Z2lubwpjdWxsYXRvCmN1cG9sYQpjdXJhdG9yZQpjdXJzb3JlCmN1cnZvCmN1c2Npbm8KY3VzdG9kZQpkYWRvCmRhaW5vCmRhbG1hdGEKZGFtZXJpbm8KZGFuaWVsYQpkYW5ub3NvCmRhbnphcmUKZGF0YXRvCmRhdmFudGkKZGF2dmVybwpkZWJ1dHRvCmRlY2VubmlvCmRlY2lzbwpkZWNsaW5vCmRlY29sbG8KZGVjcmV0bwpkZWRpY2F0bwpkZWZpbml0bwpkZWZvcm1lCmRlZ25vCmRlbGVnYXJlCmRlbGZpbm8KZGVsaXJpbwpkZWx0YQpkZW1lbnphCmRlbm90YXRvCmRlbnRybwpkZXBvc2l0bwpkZXJhcGF0YQpkZXJpdmFyZQpkZXJvZ2EKZGVzY3JpdHRvCmRlc2VydG8KZGVzaWRlcmlvCmRlc3VtZXJlCmRldGVyc2l2bwpkZXZvdG8KZGlhbWV0cm8KZGljZW1icmUKZGllZHJvCmRpZmVzbwpkaWZmdXNvCmRpZ2VyaXJlCmRpZ2l0YWxlCmRpbHV2aW8KZGluYW1pY28KZGlubmFuemkKZGlwaW50bwpkaXBsb21hCmRpcG9sbwpkaXJhZGFyZQpkaXJlCmRpcm90dG8KZGlydXBvCmRpc2FnaW8KZGlzY3JldG8KZGlzZmFyZQpkaXNnZWxvCmRpc3Bvc3RvCmRpc3RhbnphCmRpc3VtYW5vCmRpdG8KZGl2YW5vCmRpdmVsdG8KZGl2aWRlcmUKZGl2b3JhdG8KZG9ibG9uZQpkb2NlbnRlCmRvZ2FuYWxlCmRvZ21hCmRvbGNlCmRvbWF0bwpkb21lbmljYQpkb21pbmFyZQpkb25kb2xvCmRvbm8KZG9ybWlyZQpkb3RlCmRvdHRvcmUKZG92dXRvCmRvenppbmEKZHJhZ28KZHJ1aWRvCmR1YmJpbwpkdWJpdGFyZQpkdWNhbGUKZHVuYQpkdW9tbwpkdXBsaWNlCmR1cmF0dXJvCmViYW5vCmVjY2Vzc28KZWNjbwplY2xpc3NpCmVjb25vbWlhCmVkZXJhCmVkaWNvbGEKZWRpbGUKZWRpdG9yaWEKZWR1Y2FyZQplZ2Vtb25pYQplZ2xpCmVnb2lzbW8KZWdyZWdpbwplbGFib3JhdG8KZWxhcmdpcmUKZWxlZ2FudGUKZWxlbmNhdG8KZWxldHRvCmVsZXZhcmUKZWxmaWNvCmVsaWNhCmVsbW8KZWxzYQplbHVzbwplbWFuYXRvCmVtYmxlbWEKZW1lc3NvCmVtaXJvCmVtb3Rpdm8KZW1vemlvbmUKZW1waXJpY28KZW11bG8KZW5kZW1pY28KZW5kdXJvCmVuZXJnaWEKZW5mYXNpCmVub3RlY2EKZW50cmFyZQplbnppbWEKZXBhdGl0ZQplcGlsb2dvCmVwaXNvZGlvCmVwb2NhbGUKZXBwdXJlCmVxdWF0b3JlCmVyYXJpbwplcmJhCmVyYm9zbwplcmVkZQplcmVtaXRhCmVyaWdlcmUKZXJtZXRpY28KZXJvZQplcm9zaXZvCmVycmFudGUKZXNhZ29ubwplc2FtZQplc2FuaW1lCmVzYXVkaXJlCmVzY2EKZXNlbXBpbwplc2VyY2l0bwplc2liaXRvCmVzaWdlbnRlCmVzaXN0ZXJlCmVzaXRvCmVzb2ZhZ28KZXNvcnRhdG8KZXNvc28KZXNwYW5zbwplc3ByZXNzbwplc3NlbnphCmVzc28KZXN0ZXNvCmVzdGltYXJlCmVzdG9uaWEKZXN0cm9zbwplc3VsdGFyZQpldGlsaWNvCmV0bmljbwpldHJ1c2NvCmV0dG8KZXVjbGlkZW8KZXVyb3BhCmV2YXNvCmV2aWRlbnphCmV2aXRhdG8KZXZvbHV0bwpldnZpdmEKZmFiYnJpY2EKZmFjY2VuZGEKZmFjaGlybwpmYWxjbwpmYW1pZ2xpYQpmYW5hbGUKZmFuZmFyYQpmYW5nbwpmYW50YXNtYQpmYXJlCmZhcmZhbGxhCmZhcmlub3NvCmZhcm1hY28KZmFzY2lhCmZhc3Rvc28KZmFzdWxsbwpmYXRpY2FyZQpmYXRvCmZhdm9sb3NvCmZlYmJyZQpmZWNvbGEKZmVkZQpmZWdhdG8KZmVscGEKZmVsdHJvCmZlbW1pbmEKZmVuZGVyZQpmZW5vbWVubwpmZXJtZW50bwpmZXJybwpmZXJ0aWxlCmZlc3N1cmEKZmVzdGl2bwpmZXR0YQpmZXVkbwpmaWFiYQpmaWR1Y2lhCmZpZmEKZmlndXJhdG8KZmlsbwpmaW5hbnphCmZpbmVzdHJhCmZpbmlyZQpmaW9yZQpmaXNjYWxlCmZpc2ljbwpmaXVtZQpmbGFjb25lCmZsYW1lbmNvCmZsZWJvCmZsZW1tYQpmbG9yaWRvCmZsdWVudGUKZmx1b3JvCmZvYmljbwpmb2NhY2NpYQpmb2Nvc28KZm9kZXJhdG8KZm9nbGlvCmZvbGF0YQpmb2xjbG9yZQpmb2xnb3JlCmZvbmRlbnRlCmZvbmV0aWNvCmZvbmlhCmZvbnRhbmEKZm9yYml0bwpmb3JjaGV0dGEKZm9yZXN0YQpmb3JtaWNhCmZvcm5haW8KZm9ybwpmb3J0ZXp6YQpmb3J6YXJlCmZvc2ZhdG8KZm9zc28KZnJhY2Fzc28KZnJhbmEKZnJhc3Npbm8KZnJhdGVsbG8KZnJlY2NldHRhCmZyZW5hdGEKZnJlc2NvCmZyaWdvCmZyb2xsaW5vCmZyb25kZQpmcnVnYWxlCmZydXR0YQpmdWNpbGF0YQpmdWNzaWEKZnVnZ2VudGUKZnVsbWluZQpmdWx2bwpmdW1hbnRlCmZ1bWV0dG8KZnVtb3NvCmZ1bmUKZnVuemlvbmUKZnVvY28KZnVyYm8KZnVyZ29uZQpmdXJvcmUKZnVzbwpmdXRpbGUKZ2FiYmlhbm8KZ2FmZmUKZ2FsYXRlbwpnYWxsaW5hCmdhbG9wcG8KZ2FtYmVybwpnYW1tYQpnYXJhbnppYQpnYXJibwpnYXJvZmFubwpnYXJ6b25lCmdhc2RvdHRvCmdhc29saW8KZ2FzdHJpY28KZ2F0dG8KZ2F1ZGlvCmdhemVibwpnYXp6ZWxsYQpnZWNvCmdlbGF0aW5hCmdlbHNvCmdlbWVsbG8KZ2VtbWF0bwpnZW5lCmdlbml0b3JlCmdlbm5haW8KZ2Vub3RpcG8KZ2VyZ28KZ2hlcGFyZG8KZ2hpYWNjaW8KZ2hpc2EKZ2lhbGxvCmdpbGRhCmdpbmVwcm8KZ2lvY2FyZQpnaW9pZWxsbwpnaW9ybm8KZ2lvdmUKZ2lyYXRvCmdpcm9uZQpnaXR0YXRhCmdpdWRpemlvCmdpdXJhdG8KZ2l1c3RvCmdsb2J1bG8KZ2x1dGluZQpnbm9tbwpnb2JiYQpnb2xmCmdvbWl0bwpnb21tb25lCmdvbmZpbwpnb25uYQpnb3Zlcm5vCmdyYWNpbGUKZ3JhZG8KZ3JhZmljbwpncmFtbW8KZ3JhbmRlCmdyYXR0YXJlCmdyYXZvc28KZ3JhemlhCmdyZWNhCmdyZWdnZQpncmlmb25lCmdyaWdpbwpncmluemEKZ3JvdHRhCmdydXBwbwpndWFkYWdubwpndWFpbwpndWFudG8KZ3VhcmRhcmUKZ3VmbwpndWlkYXJlCmliZXJuYXRvCmljb25hCmlkZW50aWNvCmlkaWxsaW8KaWRvbG8KaWRyYQppZHJpY28KaWRyb2dlbm8KaWdpZW5lCmlnbmFybwppZ25vcmF0bwppbGFyZQppbGxlc28KaWxsb2dpY28KaWxsdWRlcmUKaW1iYWxsbwppbWJldnV0bwppbWJvY2NvCmltYnV0bwppbW1hbmUKaW1tZXJzbwppbW1vbGF0bwppbXBhY2NvCmltcGV0bwppbXBpZWdvCmltcG9ydG8KaW1wcm9udGEKaW5hbGFyZQppbmFyY2FyZQppbmF0dGl2bwppbmNhbnRvCmluY2VuZGlvCmluY2hpbm8KaW5jaXNpdm8KaW5jbHVzbwppbmNvbnRybwppbmNyb2NpbwppbmN1Ym8KaW5kYWdpbmUKaW5kaWEKaW5kb2xlCmluZWRpdG8KaW5mYXR0aQppbmZpbGFyZQppbmZsaXR0bwppbmdhZ2dpbwppbmdlZ25vCmluZ2xlc2UKaW5nb3Jkbwppbmdyb3Nzbwppbm5lc2NvCmlub2RvcmUKaW5vbHRyYXJlCmlub25kYXRvCmluc2FubwppbnNldHRvCmluc2llbWUKaW5zb25uaWEKaW5zdWxpbmEKaW50YXNhdG8KaW50ZXJvCmludG9uYWNvCmludHVpdG8KaW51bWlkaXJlCmludmFsaWRvCmludmVjZQppbnZpdG8KaXBlcmJvbGUKaXBub3RpY28KaXBvdGVzaQppcHBpY2EKaXJpZGUKaXJsYW5kYQppcm9uaWNvCmlycmlnYXRvCmlycm9yYXJlCmlzb2xhdG8KaXNvdG9wbwppc3Rlcmljbwppc3RpdHV0bwppc3RyaWNlCml0YWxpYQppdGVyYXJlCmxhYmJybwpsYWJpcmludG8KbGFjY2EKbGFjZXJhdG8KbGFjcmltYQpsYWN1bmEKbGFkZG92ZQpsYWdvCmxhbXBvCmxhbmNldHRhCmxhbnRlcm5hCmxhcmRvc28KbGFyZ2EKbGFyaW5nZQpsYXN0cmEKbGF0ZW56YQpsYXRpbm8KbGF0dHVnYQpsYXZhZ25hCmxhdm9ybwpsZWdhbGUKbGVnZ2VybwpsZW1ibwpsZW50ZXp6YQpsZW56YQpsZW9uZQpsZXByZQpsZXNpdm8KbGVzc2F0bwpsZXN0bwpsZXR0ZXJhbGUKbGV2YQpsZXZpZ2F0bwpsaWJlcm8KbGlkbwpsaWV2aXRvCmxpbGxhCmxpbWF0dXJhCmxpbWl0YXJlCmxpbXBpZG8KbGluZWFyZQpsaW5ndWEKbGlxdWlkbwpsaXJhCmxpcmljYQpsaXNjYQpsaXRlCmxpdGlnaW8KbGl2cmVhCmxvY2FuZGEKbG9kZQpsb2dpY2EKbG9tYmFyZQpsb25kcmEKbG9uZ2V2bwpsb3F1YWNlCmxvcmVuem8KbG90bwpsb3R0ZXJpYQpsdWNlCmx1Y2lkYXRvCmx1bWFjYQpsdW1pbm9zbwpsdW5nbwpsdXBvCmx1cHBvbG8KbHVzaW5nYQpsdXNzbwpsdXR0bwptYWNhYnJvCm1hY2NoaW5hCm1hY2VybwptYWNpbmF0bwptYWRhbWEKbWFnaWNvCm1hZ2xpYQptYWduZXRlCm1hZ3JvCm1haW9saWNhCm1hbGFmZWRlCm1hbGdyYWRvCm1hbGludGVzbwptYWxzYW5vCm1hbHRvCm1hbHVtb3JlCm1hbmEKbWFuY2lhCm1hbmRvcmxhCm1hbmdpYXJlCm1hbmlmZXN0bwptYW5uYXJvCm1hbm92cmEKbWFuc2FyZGEKbWFudGlkZQptYW51YnJpbwptYXBwYQptYXJhdG9uYQptYXJjaXJlCm1hcmV0dGEKbWFybW8KbWFyc3VwaW8KbWFzY2hlcmEKbWFzc2FpYQptYXN0aW5vCm1hdGVyYXNzbwptYXRyaWNvbGEKbWF0dG9uZQptYXR1cm8KbWF6dXJjYQptZWFuZHJvCm1lY2NhbmljbwptZWNlbmF0ZQptZWRlc2ltbwptZWRpdGFyZQptZWdhCm1lbGFzc2EKbWVsaXMKbWVsb2RpYQptZW5pbmdlCm1lbm8KbWVuc29sYQptZXJjdXJpbwptZXJlbmRhCm1lcmxvCm1lc2NoaW5vCm1lc2UKbWVzc2VyZQptZXN0b2xvCm1ldGFsbG8KbWV0b2RvCm1ldHRlcmUKbWlhZ29sYXJlCm1pY2EKbWljZWxpbwptaWNoZWxlCm1pY3JvYm8KbWlkb2xsbwptaWVsZQptaWdsaW9yZQptaWxhbm8KbWlsaXRlCm1pbW9zYQptaW5lcmFsZQptaW5pCm1pbm9yZQptaXJpbm8KbWlydGlsbG8KbWlzY2VsYQptaXNzaXZhCm1pc3RvCm1pc3VyYXJlCm1pdGV6emEKbWl0aWdhcmUKbWl0cmEKbWl0dGVudGUKbW5lbW9uaWNvCm1vZGVsbG8KbW9kaWZpY2EKbW9kdWxvCm1vZ2Fubwptb2dpbwptb2xlCm1vbG9zc28KbW9uYXN0ZXJvCm1vbmNvCm1vbmRpbmEKbW9uZXRhcmlvCm1vbmlsZQptb25vdG9ubwptb25zb25lCm1vbnRhdG8KbW9udmlzbwptb3JhCm1vcmRlcmUKbW9yc2ljYXRvCm1vc3Rybwptb3RpdmF0bwptb3Rvc2VnYQptb3R0bwptb3ZlbnphCm1vdmltZW50bwptb3p6bwptdWNjYQptdWNvc2EKbXVmZmEKbXVnaGV0dG8KbXVnbmFpbwptdWxhdHRvCm11bGluZWxsbwptdWx0aXBsbwptdW1taWEKbXVudG8KbXVvdmVyZQptdXJhbGUKbXVzYQptdXNjb2xvCm11c2ljYQptdXRldm9sZQptdXRvCm5hYmFiYm8KbmFmdGEKbmFub21ldHJvCm5hcmNpc28KbmFyaWNlCm5hcnJhdG8KbmFzY2VyZQpuYXN0cmFyZQpuYXR1cmFsZQpuYXV0aWNhCm5hdmlnbGlvCm5lYnVsb3NhCm5lY3Jvc2kKbmVnYXRpdm8KbmVnb3ppbwpuZW1tZW5vCm5lb2ZpdGEKbmVyZXR0bwpuZXJ2bwpuZXNzdW5vCm5ldHR1bm8KbmV1dHJhbGUKbmV2ZQpuZXZyb3RpY28KbmljY2hpYQpuaW5mYQpuaXRpZG8Kbm9iaWxlCm5vY2l2bwpub2RvCm5vbWUKbm9taW5hCm5vcmRpY28Kbm9ybWFsZQpub3J2ZWdlc2UKbm9zdHJhbm8Kbm90YXJlCm5vdGl6aWEKbm90dHVybm8Kbm92ZWxsYQpudWNsZW8KbnVsbGEKbnVtZXJvCm51b3ZvCm51dHJpcmUKbnV2b2xhCm51emlhbGUKb2FzaQpvYmJlZGlyZQpvYmJsaWdvCm9iZWxpc2NvCm9ibGlvCm9ib2xvCm9ic29sZXRvCm9jY2FzaW9uZQpvY2NoaW8Kb2NjaWRlbnRlCm9jY29ycmVyZQpvY2N1bHRhcmUKb2NyYQpvY3VsYXRvCm9kaWVybm8Kb2RvcmFyZQpvZmZlcnRhCm9mZnJpcmUKb2ZmdXNjYXRvCm9nZ2V0dG8Kb2dnaQpvZ251bm8Kb2xhbmRlc2UKb2xmYXR0bwpvbGlhdG8Kb2xpdmEKb2xvZ3JhbW1hCm9sdHJlCm9tYWdnaW8Kb21iZWxpY28Kb21icmEKb21lZ2EKb21pc3Npb25lCm9uZG9zbwpvbmVyZQpvbmljZQpvbm5pdm9ybwpvbm9yZXZvbGUKb250YQpvcGVyYXRvCm9waW5pb25lCm9wcG9zdG8Kb3JhY29sbwpvcmFmbwpvcmRpbmUKb3JlY2NoaW5vCm9yZWZpY2UKb3JmYW5vCm9yZ2FuaWNvCm9yaWdpbmUKb3JpenpvbnRlCm9ybWEKb3JtZWdnaW8Kb3JuYXRpdm8Kb3JvbG9naW8Kb3JyZW5kbwpvcnJpYmlsZQpvcnRlbnNpYQpvcnRpY2EKb3J6YXRhCm9yem8Kb3NhcmUKb3NjdXJhcmUKb3Ntb3NpCm9zcGVkYWxlCm9zcGl0ZQpvc3NhCm9zc2lkYXJlCm9zdGFjb2xvCm9zdGUKb3RpdGUKb3RyZQpvdHRhZ29ubwpvdHRpbW8Kb3R0b2JyZQpvdmFsZQpvdmVzdApvdmlubwpvdmlwYXJvCm92b2NpdG8Kb3Z1bnF1ZQpvdnZpYXJlCm96aW8KcGFjY2hldHRvCnBhY2UKcGFjaWZpY28KcGFkZWxsYQpwYWRyb25lCnBhZXNlCnBhZ2EKcGFnaW5hCnBhbGF6emluYQpwYWxlc2FyZQpwYWxsaWRvCnBhbG8KcGFsdWRlCnBhbmRvcm8KcGFubmVsbG8KcGFvbG8KcGFvbmF6em8KcGFwcmljYQpwYXJhYm9sYQpwYXJjZWxsYQpwYXJlcmUKcGFyZ29sbwpwYXJpCnBhcmxhdG8KcGFyb2xhCnBhcnRpcmUKcGFydmVuemEKcGFyemlhbGUKcGFzc2l2bwpwYXN0aWNjYQpwYXRhY2NhCnBhdG9sb2dpYQpwYXR0dW1lCnBhdm9uZQpwZWNjYXRvCnBlZGFsYXJlCnBlZG9uYWxlCnBlZ2dpbwpwZWxvc28KcGVuYXJlCnBlbmRpY2UKcGVuaXNvbGEKcGVubnV0bwpwZW5vbWJyYQpwZW5zYXJlCnBlbnRvbGEKcGVwZQpwZXBpdGEKcGVyYmVuZQpwZXJjb3JzbwpwZXJkb25hdG8KcGVyZm9yYXJlCnBlcmdhbWVuYQpwZXJpb2RvCnBlcm1lc3NvCnBlcm5vCnBlcnBsZXNzbwpwZXJzdWFzbwpwZXJ0dWdpbwpwZXJ2YXNvCnBlc2F0b3JlCnBlc2lzdGEKcGVzbwpwZXN0aWZlcm8KcGV0YWxvCnBldHRpbmUKcGV0dWxhbnRlCnBlenpvCnBpYWNlcmUKcGlhbnRhCnBpYXR0aW5vCnBpY2Npbm8KcGljb3p6YQpwaWVnYQpwaWV0cmEKcGlmZmVybwpwaWdpYW1hCnBpZ29saW8KcGlncm8KcGlsYQpwaWxpZmVybwpwaWxsb2xhCnBpbG90YQpwaW1wYW50ZQpwaW5ldGEKcGlubmEKcGlub2xvCnBpb2dnaWEKcGlvbWJvCnBpcmFtaWRlCnBpcmV0aWNvCnBpcml0ZQpwaXJvbGlzaQpwaXRvbmUKcGl6emljbwpwbGFjZWJvCnBsYW5hcmUKcGxhc21hCnBsYXRhbm8KcGxlbmFyaW8KcG9jaGV6emEKcG9kZXJvc28KcG9kaXNtbwpwb2VzaWEKcG9nZ2lhcmUKcG9sZW50YQpwb2xpZ29ubwpwb2xsaWNlCnBvbG1vbml0ZQpwb2xwZXR0YQpwb2xzbwpwb2x0cm9uYQpwb2x2ZXJlCnBvbWljZQpwb21vZG9ybwpwb250ZQpwb3BvbG9zbwpwb3JmaWRvCnBvcm9zbwpwb3Jwb3JhCnBvcnJlCnBvcnRhdGEKcG9zYQpwb3NpdGl2bwpwb3NzZXNzbwpwb3N0dWxhdG8KcG90YXNzaW8KcG90ZXJlCnByYW56bwpwcmFzc2kKcHJhdGljYQpwcmVjbHVzbwpwcmVkaWNhCnByZWZpc3NvCnByZWdpYXRvCnByZWxpZXZvCnByZW1lcmUKcHJlbm90YXJlCnByZXBhcmF0bwpwcmVzZW56YQpwcmV0ZXN0bwpwcmV2YWxzbwpwcmltYQpwcmluY2lwZQpwcml2YXRvCnByb2JsZW1hCnByb2N1cmEKcHJvZHVycmUKcHJvZnVtbwpwcm9nZXR0bwpwcm9sdW5nYQpwcm9tZXNzYQpwcm9ub21lCnByb3Bvc3RhCnByb3JvZ2EKcHJvdGVzbwpwcm92YQpwcnVkZW50ZQpwcnVnbmEKcHJ1cml0bwpwc2ljaGUKcHViYmxpY28KcHVkaWNhCnB1Z2lsYXRvCnB1Z25vCnB1bGNlCnB1bGl0bwpwdWxzYW50ZQpwdW50YXJlCnB1cGF6em8KcHVwaWxsYQpwdXJvCnF1YWRybwpxdWFsY29zYQpxdWFzaQpxdWVyZWxhCnF1b3RhCnJhY2NvbHRvCnJhZGRvcHBpbwpyYWRpY2FsZQpyYWR1bmF0bwpyYWZmaWNhCnJhZ2F6em8KcmFnaW9uZQpyYWdubwpyYW1hcnJvCnJhbWluZ28KcmFtbwpyYW5kYWdpbwpyYW50b2xhcmUKcmFwYXRvCnJhcGluYQpyYXBwcmVzbwpyYXNhdHVyYQpyYXNjaGlhdG8KcmFzZW50ZQpyYXNzZWduYQpyYXN0cmVsbG8KcmF0YQpyYXZ2ZWR1dG8KcmVhbGUKcmVjZXBpcmUKcmVjaW50bwpyZWNsdXRhCnJlY29uZGl0bwpyZWN1cGVybwpyZWRkaXRvCnJlZGltZXJlCnJlZ2FsYXRvCnJlZ2lzdHJvCnJlZ29sYQpyZWdyZXNzbwpyZWxhemlvbmUKcmVtYXJlCnJlbW90bwpyZW5uYQpyZXBsaWNhCnJlcHJpbWVyZQpyZXB1dGFyZQpyZXNhCnJlc2lkZW50ZQpyZXNwb25zbwpyZXN0YXVybwpyZXRlCnJldGluYQpyZXRvcmljYQpyZXR0aWZpY2EKcmV2b2NhdG8Kcmlhc3N1bnRvCnJpYmFkaXJlCnJpYmVsbGUKcmlicmV6em8KcmljYXJpY2EKcmljY28KcmljZXZlcmUKcmljaWNsYXRvCnJpY29yZG8KcmljcmVkdXRvCnJpZGljb2xvCnJpZHVycmUKcmlmYXNhcmUKcmlmbGVzc28Kcmlmb3JtYQpyaWZ1Z2lvCnJpZ2FyZQpyaWdldHRhdG8KcmlnaGVsbG8KcmlsYXNzYXRvCnJpbGV2YXRvCnJpbWFuZXJlCnJpbWJhbHpvCnJpbWVkaW8Kcmltb3JjaGlvCnJpbmFzY2l0YQpyaW5jYXJvCnJpbmZvcnpvCnJpbm5vdm8Kcmlub21hdG8Kcmluc2F2aXRvCnJpbnRvY2NvCnJpbnVuY2lhCnJpbnZlbmlyZQpyaXBhcmF0bwpyaXBldHV0bwpyaXBpZW5vCnJpcG9ydGFyZQpyaXByZXNhCnJpcHVsaXJlCnJpc2F0YQpyaXNjaGlvCnJpc2VydmEKcmlzaWJpbGUKcmlzbwpyaXNwZXR0bwpyaXN0b3JvCnJpc3VsdGF0bwpyaXN2b2x0bwpyaXRhcmRvCnJpdGVnbm8Kcml0bWljbwpyaXRyb3ZvCnJpdW5pb25lCnJpdmEKcml2ZXJzbwpyaXZpbmNpdGEKcml2b2x0bwpyaXpvbWEKcm9iYQpyb2JvdGljbwpyb2J1c3RvCnJvY2NpYQpyb2NvCnJvZGFnZ2lvCnJvZGVyZQpyb2RpdG9yZQpyb2dpdG8Kcm9sbGlvCnJvbWFudGljbwpyb21wZXJlCnJvbnppbwpyb3NvbGFyZQpyb3Nwbwpyb3RhbnRlCnJvdG9uZG8Kcm90dWxhCnJvdmVzY2lvCnJ1Yml6em8KcnVicmljYQpydWdhCnJ1bGxpbm8KcnVtaW5lCnJ1bW9yb3NvCnJ1b2xvCnJ1cGUKcnVzc2FyZQpydXN0aWNvCnNhYmF0bwpzYWJiaWFyZQpzYWJvdGF0bwpzYWdvbWEKc2FsYXNzbwpzYWxkYXR1cmEKc2FsZ2VtbWEKc2FsaXZhcmUKc2FsbW9uZQpzYWxvbmUKc2FsdGFyZQpzYWx1dG8Kc2Fsdm8Kc2FwZXJlCnNhcGlkbwpzYXBvcml0bwpzYXJhY2VubwpzYXJjYXNtbwpzYXJ0bwpzYXNzb3NvCnNhdGVsbGl0ZQpzYXRpcmEKc2F0b2xsbwpzYXR1cm5vCnNhdmFuYQpzYXZpbwpzYXppYXRvCnNiYWRpZ2xpbwpzYmFsem8Kc2JhbmNhdG8Kc2JhcnJhCnNiYXR0ZXJlCnNiYXZhcmUKc2JlbmRhcmUKc2JpcmNpYXJlCnNibG9jY2F0bwpzYm9jY2lhdG8Kc2JyaW5hcmUKc2JydWZmb25lCnNidWZmYXJlCnNjYWJyb3NvCnNjYWRlbnphCnNjYWxhCnNjYW1iaWFyZQpzY2FuZGFsbwpzY2Fwb2xhCnNjYXJzbwpzY2F0ZW5hcmUKc2NhdmF0bwpzY2VsdG8Kc2NlbmljbwpzY2V0dHJvCnNjaGVkYQpzY2hpZW5hCnNjaWFycGEKc2NpZW56YQpzY2luZGVyZQpzY2lwcG8Kc2Npcm9wcG8Kc2Npdm9sbwpzY2xlcmFyZQpzY29kZWxsYQpzY29scGl0bwpzY29tcGFydG8Kc2NvbmZvcnRvCnNjb3ByaXJlCnNjb3J0YQpzY29zc29uZQpzY296emVzZQpzY3JpYmEKc2Nyb2xsYXJlCnNjcnV0aW5pbwpzY3VkZXJpYQpzY3VsdG9yZQpzY3VvbGEKc2N1cm8Kc2N1c2FyZQpzZGViaXRhcmUKc2RvZ2FuYXJlCnNlY2NhdHVyYQpzZWNvbmRvCnNlZGFubwpzZWdnaW9sYQpzZWduYWxhdG8Kc2VncmVnYXRvCnNlZ3VpdG8Kc2VsY2lhdG8Kc2VsZXR0aXZvCnNlbGxhCnNlbHZhZ2dpbwpzZW1hZm9ybwpzZW1icmFyZQpzZW1lCnNlbWluYXRvCnNlbXByZQpzZW5zbwpzZW50aXJlCnNlcG9sdG8Kc2VxdWVuemEKc2VyYXRhCnNlcmJhdG8Kc2VyZW5vCnNlcmlvCnNlcnBlbnRlCnNlcnJhZ2xpbwpzZXJ2aXJlCnNlc3RpbmEKc2V0b2xhCnNldHRpbWFuYQpzZmFjZWxvCnNmYWxkYXJlCnNmYW1hdG8Kc2Zhcnpvc28Kc2ZhdGljYXRvCnNmZXJhCnNmaWRhCnNmaWxhdG8Kc2ZpbmdlCnNmb2NhdG8Kc2ZvZGVyYXJlCnNmb2dvCnNmb2x0aXJlCnNmb3J6YXRvCnNmcmF0dG8Kc2ZydXR0YXRvCnNmdWdnaXRvCnNmdW1hcmUKc2Z1c28Kc2dhYmVsbG8Kc2dhcmJhdG8Kc2dvbmZpYXJlCnNnb3JiaW8Kc2dyYXNzYXRvCnNndWFyZG8Kc2liaWxvCnNpY2NvbWUKc2llcnJhCnNpZ2xhCnNpZ25vcmUKc2lsZW56aW8Kc2lsbGFiYQpzaW1ib2xvCnNpbXBhdGljbwpzaW11bGF0bwpzaW5mb25pYQpzaW5nb2xvCnNpbmlzdHJvCnNpbm8Kc2ludGVzaQpzaW51c29pZGUKc2lwYXJpbwpzaXNtYQpzaXN0b2xlCnNpdHVhdG8Kc2xpdHRhCnNsb2dhdHVyYQpzbG92ZW5vCnNtYXJyaXRvCnNtZW1vcmF0bwpzbWVudGl0bwpzbWVyYWxkbwpzbWlsem8Kc21vbnRhcmUKc21vdHRhdG8Kc211c3NhdG8Kc25lbGxpcmUKc25lcnZhdG8Kc25vZG8Kc29iYmFsem8Kc29icmlvCnNvY2NvcnNvCnNvY2lhbGUKc29kYWxlCnNvZmZpdHRvCnNvZ25vCnNvbGRhdG8Kc29sZW5uZQpzb2xpZG8Kc29sbGF6em8Kc29sbwpzb2x1YmlsZQpzb2x2ZW50ZQpzb21hdGljbwpzb21tYQpzb25kYQpzb25ldHRvCnNvbm5pZmVybwpzb3BpcmUKc29wcGVzbwpzb3ByYQpzb3JnZXJlCnNvcnBhc3NvCnNvcnJpc28Kc29yc28Kc29ydGVnZ2lvCnNvcnZvbGF0bwpzb3NwaXJvCnNvc3RhCnNvdHRpbGUKc3BhZGEKc3BhbGxhCnNwYXJnZXJlCnNwYXRvbGEKc3BhdmVudG8Kc3BhenpvbGEKc3BlY2llCnNwZWRpcmUKc3BlZ25lcmUKc3BlbGF0dXJhCnNwZXJhbnphCnNwZXNzb3JlCnNwZXR0cmFsZQpzcGV6emF0bwpzcGlhCnNwaWdvbG9zbwpzcGlsbGF0bwpzcGlub3NvCnNwaXJhbGUKc3BsZW5kaWRvCnNwb3J0aXZvCnNwb3NvCnNwcmFuZ2EKc3ByZWNhcmUKc3Byb25hdG8Kc3BydXp6bwpzcHVudGlubwpzcXVpbGxvCnNyYWRpY2FyZQpzcm90b2xhdG8Kc3RhYmlsZQpzdGFjY28Kc3RhZmZhCnN0YWduYXJlCnN0YW1wYXRvCnN0YW50aW8Kc3Rhcm51dG8Kc3Rhc2VyYQpzdGF0dXRvCnN0ZWxvCnN0ZXBwYQpzdGVyem8Kc3RpbGV0dG8Kc3RpbWEKc3RpcnBlCnN0aXZhbGUKc3Rpenpvc28Kc3RvbmF0bwpzdG9yaWNvCnN0cmFwcG8Kc3RyZWdhdG8Kc3RyaWR1bG8Kc3Ryb3p6YXJlCnN0cnV0dG8Kc3R1Y2NhcmUKc3R1Zm8Kc3R1cGVuZG8Kc3ViZW50cm8Kc3VjY29zbwpzdWRvcmUKc3VnZ2VyaXRvCnN1Z28Kc3VsdGFubwpzdW9uYXJlCnN1cGVyYm8Kc3VwcG9ydG8Kc3VyZ2VsYXRvCnN1cnJvZ2F0bwpzdXNzdXJybwpzdXR1cmEKc3ZhZ2FyZQpzdmVkZXNlCnN2ZWdsaW8Kc3ZlbGFyZQpzdmVudXRvCnN2ZXppYQpzdmlsdXBwbwpzdmlzdGEKc3ZpenplcmEKc3ZvbHRhCnN2dW90YXJlCnRhYmFjY28KdGFidWxhdG8KdGFjY2lhcmUKdGFjaXR1cm5vCnRhbGUKdGFsaXNtYW5vCnRhbXBvbmUKdGFubmlubwp0YXJhCnRhcmRpdm8KdGFyZ2F0bwp0YXJpZmZhCnRhcnBhcmUKdGFydGFydWdhCnRhc3RvCnRhdHRpY28KdGF2ZXJuYQp0YXZvbGF0YQp0YXp6YQp0ZWNhCnRlY25pY28KdGVsZWZvbm8KdGVtZXJhcmlvCnRlbXBvCnRlbXV0bwp0ZW5kb25lCnRlbmVybwp0ZW5zaW9uZQp0ZW50YWNvbG8KdGVvcmVtYQp0ZXJtZQp0ZXJyYXp6bwp0ZXJ6ZXR0bwp0ZXNpCnRlc3NlcmF0bwp0ZXN0YXRvCnRldHJvCnRldHRvaWEKdGlmYXJlCnRpZ2VsbGEKdGltYnJvCnRpbnRvCnRpcGljbwp0aXBvZ3JhZm8KdGlyYWdnaW8KdGlybwp0aXRhbmlvCnRpdG9sbwp0aXR1YmFudGUKdGl6aW8KdGl6em9uZQp0b2NjYXJlCnRvbGxlcmFyZQp0b2x0bwp0b21ib2xhCnRvbW8KdG9uZm8KdG9uc2lsbGEKdG9wYXppbwp0b3BvbG9naWEKdG9wcGEKdG9yYmEKdG9ybmFyZQp0b3Jyb25lCnRvcnRvcmEKdG9zY2Fubwp0b3NzaXJlCnRvc3RhdHVyYQp0b3Rhbm8KdHJhYm9jY28KdHJhY2hlYQp0cmFmaWxhCnRyYWdlZGlhCnRyYWxjaW8KdHJhbW9udG8KdHJhbnNpdG8KdHJhcGFubwp0cmFycmUKdHJhc2xvY28KdHJhdHRhdG8KdHJhdmUKdHJlY2NpYQp0cmVtb2xpbwp0cmVzcG9sbwp0cmlidXRvCnRyaWNoZWNvCnRyaWZvZ2xpbwp0cmlsbG8KdHJpbmNlYQp0cmlvCnRyaXN0ZXp6YQp0cml0dXJhdG8KdHJpdmVsbGEKdHJvbWJhCnRyb25vCnRyb3Bwbwp0cm90dG9sYQp0cm92YXJlCnRydWNjYXRvCnR1YmF0dXJhCnR1ZmZhdG8KdHVsaXBhbm8KdHVtdWx0bwp0dW5pc2lhCnR1cmJhcmUKdHVyY2hpbm8KdHV0YQp0dXRlbGEKdWJpY2F0bwp1Y2NlbGxvCnVjY2lzb3JlCnVkaXJlCnVkaXRpdm8KdWZmYQp1ZmZpY2lvCnVndWFsZQp1bGlzc2UKdWx0aW1hdG8KdW1hbm8KdW1pbGUKdW1vcmlzbW8KdW5jaW5ldHRvCnVuZ2VyZQp1bmdoZXJlc2UKdW5pY29ybm8KdW5pZmljYXRvCnVuaXNvbm8KdW5pdGFyaW8KdW50ZQp1b3ZvCnVwdXBhCnVyYWdhbm8KdXJnZW56YQp1cmxvCnVzYW56YQp1c2F0bwp1c2NpdG8KdXNpZ25vbG8KdXN1cmFpbwp1dGVuc2lsZQp1dGlsaXp6bwp1dG9waWEKdmFjYW50ZQp2YWNjaW5hdG8KdmFnYWJvbmRvCnZhZ2xpYXRvCnZhbGFuZ2EKdmFsZ28KdmFsaWNvCnZhbGxldHRhCnZhbG9yb3NvCnZhbHV0YXJlCnZhbHZvbGEKdmFtcGF0YQp2YW5nYXJlCnZhbml0b3NvCnZhbm8KdmFudGFnZ2lvCnZhbnZlcmEKdmFwb3JlCnZhcmFubwp2YXJjYXRvCnZhcmlhbnRlCnZhc2NhCnZlZGV0dGEKdmVkb3ZhCnZlZHV0bwp2ZWdldGFsZQp2ZWljb2xvCnZlbGNybwp2ZWxpbmEKdmVsbHV0bwp2ZWxvY2UKdmVuYXRvCnZlbmRlbW1pYQp2ZW50bwp2ZXJhY2UKdmVyYmFsZQp2ZXJnb2duYQp2ZXJpZmljYQp2ZXJvCnZlcnJ1Y2EKdmVydGljYWxlCnZlc2NpY2EKdmVzc2lsbG8KdmVzdGFsZQp2ZXRlcmFubwp2ZXRyaW5hCnZldHVzdG8KdmlhbmRhbnRlCnZpYnJhbnRlCnZpY2VuZGEKdmljaGluZ28KdmljaW5hbnphCnZpZGltYXJlCnZpZ2lsaWEKdmlnbmV0bwp2aWdvcmUKdmlsZQp2aWxsYW5vCnZpbWluaQp2aW5jaXRvcmUKdmlvbGEKdmlwZXJhCnZpcmdvbGEKdmlyb2xvZ28KdmlydWxlbnRvCnZpc2Nvc28KdmlzaW9uZQp2aXNwbwp2aXNzdXRvCnZpc3VyYQp2aXRhCnZpdGVsbG8Kdml0dGltYQp2aXZhbmRhCnZpdmlkbwp2aXppYXJlCnZvY2UKdm9nYQp2b2xhdGlsZQp2b2xlcmUKdm9scGUKdm9yYWdpbmUKdnVsY2Fubwp6YW1wb2duYQp6YW5uYQp6YXBwYXRvCnphdHRlcmEKemF2b3JyYQp6ZWZpcm8KemVsYW50ZQp6ZWxvCnplbnplcm8KemVyYmlubwp6aWJldHRvCnppbmNvCnppcmNvbmUKeml0dG8Kem9sbGEKem90aWNvCnp1Y2NoZXJvCnp1Zm9sbwp6dWx1Cnp1cHBhYC5zcGxpdCgiXG4iKTsKCiAgLy8gbm9kZV9tb2R1bGVzL0BzY3VyZS9iaXAzOS9lc20vd29yZGxpc3RzL2phcGFuZXNlLmpzCiAgdmFyIHdvcmRsaXN0NSA9IGBcdTMwNDJcdTMwNDRcdTMwNTNcdTMwNEZcdTMwNTdcdTMwOTMKXHUzMDQyXHUzMDQ0XHUzMDU1XHUzMDY0Clx1MzA0Mlx1MzA0NFx1MzA1Rlx1MzA5OQpcdTMwNDJcdTMwNEFcdTMwNURcdTMwOTlcdTMwODkKXHUzMDQyXHUzMDRCXHUzMDYxXHUzMDgzXHUzMDkzClx1MzA0Mlx1MzA0RFx1MzA4QgpcdTMwNDJcdTMwNTFcdTMwNEJcdTMwOTlcdTMwNUYKXHUzMDQyXHUzMDUxXHUzMDhCClx1MzA0Mlx1MzA1M1x1MzA0Qlx1MzA5OVx1MzA4Q1x1MzA4QgpcdTMwNDJcdTMwNTVcdTMwNDQKXHUzMDQyXHUzMDU1XHUzMDcyClx1MzA0Mlx1MzA1N1x1MzA0Mlx1MzA2OApcdTMwNDJcdTMwNTdcdTMwOTlcdTMwOEZcdTMwNDYKXHUzMDQyXHUzMDU5XHUzMDk5XHUzMDRCXHUzMDhCClx1MzA0Mlx1MzA1OVx1MzA5OVx1MzA0RApcdTMwNDJcdTMwNURcdTMwNzVcdTMwOTkKXHUzMDQyXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA0Mlx1MzA1Rlx1MzA1Rlx1MzA4MVx1MzA4QgpcdTMwNDJcdTMwNUZcdTMwOEFcdTMwN0VcdTMwNDgKXHUzMDQyXHUzMDVGXHUzMDhCClx1MzA0Mlx1MzA2NFx1MzA0NApcdTMwNDJcdTMwNjRcdTMwNEJcdTMwNDYKXHUzMDQyXHUzMDYzXHUzMDU3XHUzMDg1XHUzMDRGClx1MzA0Mlx1MzA2NFx1MzA3RVx1MzA4QQpcdTMwNDJcdTMwNjRcdTMwODFcdTMwOEIKXHUzMDQyXHUzMDY2XHUzMDZBClx1MzA0Mlx1MzA2Nlx1MzA2Rlx1MzA3RVx1MzA4QgpcdTMwNDJcdTMwNzJcdTMwOEIKXHUzMDQyXHUzMDc1XHUzMDk5XHUzMDg5Clx1MzA0Mlx1MzA3NVx1MzA5OVx1MzA4QgpcdTMwNDJcdTMwNzVcdTMwOENcdTMwOEIKXHUzMDQyXHUzMDdFXHUzMDQ0Clx1MzA0Mlx1MzA3RVx1MzA2OFx1MzA5OQpcdTMwNDJcdTMwN0VcdTMwODRcdTMwNEJcdTMwNTkKXHUzMDQyXHUzMDdFXHUzMDhBClx1MzA0Mlx1MzA3Rlx1MzA4Mlx1MzA2RQpcdTMwNDJcdTMwODFcdTMwOEFcdTMwNEIKXHUzMDQyXHUzMDg0XHUzMDdFXHUzMDhCClx1MzA0Mlx1MzA4Nlx1MzA4MApcdTMwNDJcdTMwODlcdTMwNDRcdTMwNEZcdTMwOTlcdTMwN0UKXHUzMDQyXHUzMDg5XHUzMDU3Clx1MzA0Mlx1MzA4OVx1MzA1OVx1MzA1N1x1MzA5OQpcdTMwNDJcdTMwODlcdTMwNUZcdTMwODFcdTMwOEIKXHUzMDQyXHUzMDg5XHUzMDg2XHUzMDhCClx1MzA0Mlx1MzA4OVx1MzA4Rlx1MzA1OQpcdTMwNDJcdTMwOEFcdTMwNEJcdTMwOTlcdTMwNjhcdTMwNDYKXHUzMDQyXHUzMDhGXHUzMDVCXHUzMDhCClx1MzA0Mlx1MzA4Rlx1MzA2Nlx1MzA4QgpcdTMwNDJcdTMwOTNcdTMwNDQKXHUzMDQyXHUzMDkzXHUzMDRCXHUzMDk5XHUzMDQ0Clx1MzA0Mlx1MzA5M1x1MzA1MwpcdTMwNDJcdTMwOTNcdTMwNUJcdTMwOTlcdTMwOTMKXHUzMDQyXHUzMDkzXHUzMDY2XHUzMDQ0Clx1MzA0Mlx1MzA5M1x1MzA2QVx1MzA0NApcdTMwNDJcdTMwOTNcdTMwN0VcdTMwOEEKXHUzMDQ0XHUzMDQ0XHUzMDVGXHUzMDk5XHUzMDU5Clx1MzA0NFx1MzA0QVx1MzA5MwpcdTMwNDRcdTMwNEJcdTMwOTlcdTMwNDQKXHUzMDQ0XHUzMDRCXHUzMDk5XHUzMDRGClx1MzA0NFx1MzA0RFx1MzA0QVx1MzA0NApcdTMwNDRcdTMwNERcdTMwNkFcdTMwOEEKXHUzMDQ0XHUzMDREXHUzMDgyXHUzMDZFClx1MzA0NFx1MzA0RFx1MzA4QgpcdTMwNDRcdTMwNEZcdTMwNTdcdTMwOTkKXHUzMDQ0XHUzMDRGXHUzMDc1XHUzMDk5XHUzMDkzClx1MzA0NFx1MzA1MVx1MzA2Rlx1MzA5OVx1MzA2QQpcdTMwNDRcdTMwNTFcdTMwOTMKXHUzMDQ0XHUzMDUzXHUzMDQ2Clx1MzA0NFx1MzA1M1x1MzA0RgpcdTMwNDRcdTMwNTNcdTMwNjQKXHUzMDQ0XHUzMDU1XHUzMDdFXHUzMDU3XHUzMDQ0Clx1MzA0NFx1MzA1NVx1MzA5MwpcdTMwNDRcdTMwNTdcdTMwNEQKXHUzMDQ0XHUzMDU3XHUzMDk5XHUzMDg1XHUzMDQ2Clx1MzA0NFx1MzA1N1x1MzA5OVx1MzA4N1x1MzA0NgpcdTMwNDRcdTMwNTdcdTMwOTlcdTMwOEZcdTMwOEIKXHUzMDQ0XHUzMDU5XHUzMDk5XHUzMDdGClx1MzA0NFx1MzA1OVx1MzA5OVx1MzA4QwpcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDQ0XHUzMDVCXHUzMDQ4XHUzMDcyXHUzMDk5Clx1MzA0NFx1MzA1Qlx1MzA0Qlx1MzA0NApcdTMwNDRcdTMwNUJcdTMwNEQKXHUzMDQ0XHUzMDVCXHUzMDk5XHUzMDkzClx1MzA0NFx1MzA1RFx1MzA0Nlx1MzA4RFx1MzA0NgpcdTMwNDRcdTMwNURcdTMwNEJcdTMwOTlcdTMwNTdcdTMwNDQKXHUzMDQ0XHUzMDVGXHUzMDk5XHUzMDQ0Clx1MzA0NFx1MzA1Rlx1MzA5OVx1MzA0RgpcdTMwNDRcdTMwNUZcdTMwNTlcdTMwOTlcdTMwODkKXHUzMDQ0XHUzMDVGXHUzMDdGClx1MzA0NFx1MzA1Rlx1MzA4QVx1MzA0MgpcdTMwNDRcdTMwNjFcdTMwNEFcdTMwNDYKXHUzMDQ0XHUzMDYxXHUzMDU3XHUzMDk5Clx1MzA0NFx1MzA2MVx1MzA2OFx1MzA5OQpcdTMwNDRcdTMwNjFcdTMwNkZcdTMwOTkKXHUzMDQ0XHUzMDYxXHUzMDc1XHUzMDk5Clx1MzA0NFx1MzA2MVx1MzA4QVx1MzA4NVx1MzA0NgpcdTMwNDRcdTMwNjRcdTMwNEIKXHUzMDQ0XHUzMDYzXHUzMDU3XHUzMDg1XHUzMDkzClx1MzA0NFx1MzA2M1x1MzA1Qlx1MzA0NApcdTMwNDRcdTMwNjNcdTMwNURcdTMwNDYKXHUzMDQ0XHUzMDYzXHUzMDVGXHUzMDkzClx1MzA0NFx1MzA2M1x1MzA2MQpcdTMwNDRcdTMwNjNcdTMwNjZcdTMwNDQKXHUzMDQ0XHUzMDYzXHUzMDdCXHUzMDlBXHUzMDQ2Clx1MzA0NFx1MzA2Nlx1MzA1NVx1MzA5OQpcdTMwNDRcdTMwNjZcdTMwOTMKXHUzMDQ0XHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA0NFx1MzA2OFx1MzA1MwpcdTMwNDRcdTMwNkFcdTMwNDQKXHUzMDQ0XHUzMDZBXHUzMDRCClx1MzA0NFx1MzA2RFx1MzA4MFx1MzA4QQpcdTMwNDRcdTMwNkVcdTMwNjEKXHUzMDQ0XHUzMDZFXHUzMDhCClx1MzA0NFx1MzA2Rlx1MzA2NApcdTMwNDRcdTMwNkZcdTMwOTlcdTMwOEIKXHUzMDQ0XHUzMDZGXHUzMDkzClx1MzA0NFx1MzA3Mlx1MzA5OVx1MzA0RApcdTMwNDRcdTMwNzJcdTMwOTMKXHUzMDQ0XHUzMDc1XHUzMDRGClx1MzA0NFx1MzA3OFx1MzA5MwpcdTMwNDRcdTMwN0JcdTMwNDYKXHUzMDQ0XHUzMDdGXHUzMDkzClx1MzA0NFx1MzA4Mlx1MzA0Nlx1MzA2OApcdTMwNDRcdTMwODJcdTMwNUZcdTMwOEMKXHUzMDQ0XHUzMDgyXHUzMDhBClx1MzA0NFx1MzA4NFx1MzA0Qlx1MzA5OVx1MzA4QgpcdTMwNDRcdTMwODRcdTMwNTkKXHUzMDQ0XHUzMDg4XHUzMDRCXHUzMDkzClx1MzA0NFx1MzA4OFx1MzA0RgpcdTMwNDRcdTMwODlcdTMwNDQKXHUzMDQ0XHUzMDg5XHUzMDU5XHUzMDY4Clx1MzA0NFx1MzA4QVx1MzA0Rlx1MzA5OVx1MzA2MQpcdTMwNDRcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDQ0XHUzMDhDXHUzMDQ0Clx1MzA0NFx1MzA4Q1x1MzA4Mlx1MzA2RQpcdTMwNDRcdTMwOENcdTMwOEIKXHUzMDQ0XHUzMDhEXHUzMDQ4XHUzMDkzXHUzMDcyXHUzMDlBXHUzMDY0Clx1MzA0NFx1MzA4Rlx1MzA0NApcdTMwNDRcdTMwOEZcdTMwNDYKXHUzMDQ0XHUzMDhGXHUzMDRCXHUzMDkzClx1MzA0NFx1MzA4Rlx1MzA2Rlx1MzA5OQpcdTMwNDRcdTMwOEZcdTMwODZcdTMwOEIKXHUzMDQ0XHUzMDkzXHUzMDUxXHUzMDk5XHUzMDkzXHUzMDdFXHUzMDgxClx1MzA0NFx1MzA5M1x1MzA1NVx1MzA2NApcdTMwNDRcdTMwOTNcdTMwNTdcdTMwODdcdTMwNDYKXHUzMDQ0XHUzMDkzXHUzMDg4XHUzMDQ2Clx1MzA0Nlx1MzA0OFx1MzA0RApcdTMwNDZcdTMwNDhcdTMwOEIKXHUzMDQ2XHUzMDRBXHUzMDU1XHUzMDk5Clx1MzA0Nlx1MzA0Qlx1MzA5OVx1MzA0NApcdTMwNDZcdTMwNEJcdTMwNzVcdTMwOTkKXHUzMDQ2XHUzMDRCXHUzMDc4XHUzMDk5XHUzMDhCClx1MzA0Nlx1MzA0RFx1MzA4RgpcdTMwNDZcdTMwNEZcdTMwODlcdTMwNDRcdTMwNkEKXHUzMDQ2XHUzMDRGXHUzMDhDXHUzMDhDClx1MzA0Nlx1MzA1MVx1MzA1Rlx1MzA3RVx1MzA4Rlx1MzA4QgpcdTMwNDZcdTMwNTFcdTMwNjRcdTMwNTEKXHUzMDQ2XHUzMDUxXHUzMDY4XHUzMDhCClx1MzA0Nlx1MzA1MVx1MzA4Mlx1MzA2NApcdTMwNDZcdTMwNTFcdTMwOEIKXHUzMDQ2XHUzMDUzXHUzMDk5XHUzMDRCXHUzMDU5Clx1MzA0Nlx1MzA1M1x1MzA5OVx1MzA0RgpcdTMwNDZcdTMwNTNcdTMwOTMKXHUzMDQ2XHUzMDU1XHUzMDREXHUzMDk5Clx1MzA0Nlx1MzA1N1x1MzA2QVx1MzA0NgpcdTMwNDZcdTMwNTdcdTMwOERcdTMwNEJcdTMwOTlcdTMwN0YKXHUzMDQ2XHUzMDU5XHUzMDQ0Clx1MzA0Nlx1MzA1OVx1MzA0RFx1MzA5OQpcdTMwNDZcdTMwNTlcdTMwNEZcdTMwOTlcdTMwODlcdTMwNDQKXHUzMDQ2XHUzMDU5XHUzMDgxXHUzMDhCClx1MzA0Nlx1MzA1Qlx1MzA2NApcdTMwNDZcdTMwNjFcdTMwNDJcdTMwOEZcdTMwNUIKXHUzMDQ2XHUzMDYxXHUzMDRCXHUzMDk5XHUzMDhGClx1MzA0Nlx1MzA2MVx1MzA0RApcdTMwNDZcdTMwNjFcdTMwODVcdTMwNDYKXHUzMDQ2XHUzMDYzXHUzMDRCXHUzMDhBClx1MzA0Nlx1MzA2NFx1MzA0Rlx1MzA1N1x1MzA0NApcdTMwNDZcdTMwNjNcdTMwNUZcdTMwNDhcdTMwOEIKXHUzMDQ2XHUzMDY0XHUzMDhCClx1MzA0Nlx1MzA2OFx1MzA5OVx1MzA5MwpcdTMwNDZcdTMwNkFcdTMwNERcdTMwOTkKXHUzMDQ2XHUzMDZBXHUzMDU3XHUzMDk5Clx1MzA0Nlx1MzA2QVx1MzA1OVx1MzA5OVx1MzA0RgpcdTMwNDZcdTMwNkFcdTMwOEIKXHUzMDQ2XHUzMDZEXHUzMDhCClx1MzA0Nlx1MzA2RVx1MzA0NgpcdTMwNDZcdTMwNzVcdTMwOTlcdTMwNTFcdTMwOTkKXHUzMDQ2XHUzMDc1XHUzMDk5XHUzMDUzXHUzMDk5XHUzMDQ4Clx1MzA0Nlx1MzA3RVx1MzA4Q1x1MzA4QgpcdTMwNDZcdTMwODFcdTMwOEIKXHUzMDQ2XHUzMDgyXHUzMDQ2Clx1MzA0Nlx1MzA4NFx1MzA3RVx1MzA0NgpcdTMwNDZcdTMwODhcdTMwNEYKXHUzMDQ2XHUzMDg5XHUzMDRCXHUzMDk5XHUzMDQ4XHUzMDU5Clx1MzA0Nlx1MzA4OVx1MzA0Rlx1MzA5OVx1MzA2MQpcdTMwNDZcdTMwODlcdTMwNkFcdTMwNDQKXHUzMDQ2XHUzMDhBXHUzMDQyXHUzMDUxXHUzMDk5Clx1MzA0Nlx1MzA4QVx1MzA0RFx1MzA4QwpcdTMwNDZcdTMwOEJcdTMwNTVcdTMwNDQKXHUzMDQ2XHUzMDhDXHUzMDU3XHUzMDQ0Clx1MzA0Nlx1MzA4Q1x1MzA4Nlx1MzA0RApcdTMwNDZcdTMwOENcdTMwOEIKXHUzMDQ2XHUzMDhEXHUzMDUzClx1MzA0Nlx1MzA4Rlx1MzA0RApcdTMwNDZcdTMwOEZcdTMwNTUKXHUzMDQ2XHUzMDkzXHUzMDUzXHUzMDQ2Clx1MzA0Nlx1MzA5M1x1MzA2MVx1MzA5MwpcdTMwNDZcdTMwOTNcdTMwNjZcdTMwOTMKXHUzMDQ2XHUzMDkzXHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA0OFx1MzA0NFx1MzA0OFx1MzA5MwpcdTMwNDhcdTMwNDRcdTMwNEJcdTMwOTkKXHUzMDQ4XHUzMDQ0XHUzMDREXHUzMDg3XHUzMDQ2Clx1MzA0OFx1MzA0NFx1MzA1M1x1MzA5OQpcdTMwNDhcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDQ4XHUzMDQ0XHUzMDc1XHUzMDk5XHUzMDkzClx1MzA0OFx1MzA0NFx1MzA4OFx1MzA0NgpcdTMwNDhcdTMwNDRcdTMwOEYKXHUzMDQ4XHUzMDRBXHUzMDhBClx1MzA0OFx1MzA0Qlx1MzA5OVx1MzA0QQpcdTMwNDhcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDQ4XHUzMDREXHUzMDVGXHUzMDQ0Clx1MzA0OFx1MzA0Rlx1MzA1Qlx1MzA4QgpcdTMwNDhcdTMwNTdcdTMwODNcdTMwNEYKXHUzMDQ4XHUzMDU5XHUzMDY2Clx1MzA0OFx1MzA2NFx1MzA4OVx1MzA5MwpcdTMwNDhcdTMwNkVcdTMwNEZcdTMwOTkKXHUzMDQ4XHUzMDdCXHUzMDQ2XHUzMDdFXHUzMDREClx1MzA0OFx1MzA3Qlx1MzA5MwpcdTMwNDhcdTMwN0VcdTMwNEQKXHUzMDQ4XHUzMDgyXHUzMDU3XHUzMDk5Clx1MzA0OFx1MzA4Mlx1MzA2RQpcdTMwNDhcdTMwODlcdTMwNDQKXHUzMDQ4XHUzMDg5XHUzMDc1XHUzMDk5Clx1MzA0OFx1MzA4QVx1MzA0MgpcdTMwNDhcdTMwOTNcdTMwNDhcdTMwOTMKXHUzMDQ4XHUzMDkzXHUzMDRCXHUzMDQ0Clx1MzA0OFx1MzA5M1x1MzA0RFx1MzA5OQpcdTMwNDhcdTMwOTNcdTMwNTFcdTMwOTlcdTMwNEQKXHUzMDQ4XHUzMDkzXHUzMDU3XHUzMDg1XHUzMDQ2Clx1MzA0OFx1MzA5M1x1MzA1Qlx1MzA5OVx1MzA2NApcdTMwNDhcdTMwOTNcdTMwNURcdTMwNEYKXHUzMDQ4XHUzMDkzXHUzMDYxXHUzMDg3XHUzMDQ2Clx1MzA0OFx1MzA5M1x1MzA2OFx1MzA2NApcdTMwNEFcdTMwNDRcdTMwNEJcdTMwNTFcdTMwOEIKXHUzMDRBXHUzMDQ0XHUzMDUzXHUzMDU5Clx1MzA0QVx1MzA0NFx1MzA1N1x1MzA0NApcdTMwNEFcdTMwNDRcdTMwNjRcdTMwNEYKXHUzMDRBXHUzMDQ2XHUzMDQ4XHUzMDkzClx1MzA0QVx1MzA0Nlx1MzA1NVx1MzA3RQpcdTMwNEFcdTMwNDZcdTMwNTdcdTMwOTkKXHUzMDRBXHUzMDQ2XHUzMDVCXHUzMDY0Clx1MzA0QVx1MzA0Nlx1MzA1Rlx1MzA0NApcdTMwNEFcdTMwNDZcdTMwNzVcdTMwNEYKXHUzMDRBXHUzMDQ2XHUzMDc4XHUzMDk5XHUzMDQ0Clx1MzA0QVx1MzA0Nlx1MzA4OFx1MzA0NgpcdTMwNEFcdTMwNDhcdTMwOEIKXHUzMDRBXHUzMDRBXHUzMDQ0Clx1MzA0QVx1MzA0QVx1MzA0NgpcdTMwNEFcdTMwNEFcdTMwNjhcdTMwOTlcdTMwNEFcdTMwOEEKXHUzMDRBXHUzMDRBXHUzMDg0Clx1MzA0QVx1MzA0QVx1MzA4OFx1MzA1RApcdTMwNEFcdTMwNEJcdTMwNDhcdTMwOEEKXHUzMDRBXHUzMDRCXHUzMDU5XHUzMDk5Clx1MzA0QVx1MzA0Qlx1MzA5OVx1MzA4MApcdTMwNEFcdTMwNEJcdTMwOEZcdTMwOEEKXHUzMDRBXHUzMDREXHUzMDk5XHUzMDZBXHUzMDQ2Clx1MzA0QVx1MzA0RFx1MzA4QgpcdTMwNEFcdTMwNEZcdTMwNTVcdTMwN0UKXHUzMDRBXHUzMDRGXHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA0QVx1MzA0Rlx1MzA4QVx1MzA0Qlx1MzA5OVx1MzA2QQpcdTMwNEFcdTMwNEZcdTMwOEIKXHUzMDRBXHUzMDRGXHUzMDhDXHUzMDhCClx1MzA0QVx1MzA1M1x1MzA1OQpcdTMwNEFcdTMwNTNcdTMwNkFcdTMwNDYKXHUzMDRBXHUzMDUzXHUzMDhCClx1MzA0QVx1MzA1NVx1MzA0OFx1MzA4QgpcdTMwNEFcdTMwNTVcdTMwNkFcdTMwNDQKXHUzMDRBXHUzMDU1XHUzMDgxXHUzMDhCClx1MzA0QVx1MzA1N1x1MzA0NFx1MzA4QwpcdTMwNEFcdTMwNTdcdTMwNDhcdTMwOEIKXHUzMDRBXHUzMDU3XHUzMDk5XHUzMDREXHUzMDk5Clx1MzA0QVx1MzA1N1x1MzA5OVx1MzA1NVx1MzA5MwpcdTMwNEFcdTMwNTdcdTMwODNcdTMwOEMKXHUzMDRBXHUzMDVEXHUzMDg5XHUzMDRGClx1MzA0QVx1MzA1RFx1MzA4Rlx1MzA4QgpcdTMwNEFcdTMwNUZcdTMwNEJcdTMwOTlcdTMwNDQKXHUzMDRBXHUzMDVGXHUzMDRGClx1MzA0QVx1MzA1Rlx1MzA5OVx1MzA4NFx1MzA0QgpcdTMwNEFcdTMwNjFcdTMwNjRcdTMwNEYKXHUzMDRBXHUzMDYzXHUzMDY4Clx1MzA0QVx1MzA2NFx1MzA4QQpcdTMwNEFcdTMwNjZcdTMwOTlcdTMwNEJcdTMwNTEKXHUzMDRBXHUzMDY4XHUzMDU3XHUzMDgyXHUzMDZFClx1MzA0QVx1MzA2OFx1MzA2QVx1MzA1N1x1MzA0NApcdTMwNEFcdTMwNjhcdTMwOTlcdTMwOEEKXHUzMDRBXHUzMDY4XHUzMDk5XHUzMDhEXHUzMDRCXHUzMDU5Clx1MzA0QVx1MzA2Rlx1MzA5OVx1MzA1NVx1MzA5MwpcdTMwNEFcdTMwN0VcdTMwNDRcdTMwOEEKXHUzMDRBXHUzMDgxXHUzMDY2XHUzMDk5XHUzMDY4XHUzMDQ2Clx1MzA0QVx1MzA4Mlx1MzA0NFx1MzA2Nlx1MzA5OQpcdTMwNEFcdTMwODJcdTMwNDYKXHUzMDRBXHUzMDgyXHUzMDVGXHUzMDQ0Clx1MzA0QVx1MzA4Mlx1MzA2MVx1MzA4MwpcdTMwNEFcdTMwODRcdTMwNjQKXHUzMDRBXHUzMDg0XHUzMDg2XHUzMDcyXHUzMDk5Clx1MzA0QVx1MzA4OFx1MzA3Qlx1MzA5OVx1MzA1OQpcdTMwNEFcdTMwODlcdTMwOTNcdTMwNUZcdTMwOTkKXHUzMDRBXHUzMDhEXHUzMDU5Clx1MzA0QVx1MzA5M1x1MzA0Qlx1MzA5OVx1MzA0RgpcdTMwNEFcdTMwOTNcdTMwNTFcdTMwNDQKXHUzMDRBXHUzMDkzXHUzMDU3XHUzMDgzClx1MzA0QVx1MzA5M1x1MzA1Qlx1MzA5MwpcdTMwNEFcdTMwOTNcdTMwNUZcdTMwOTlcdTMwOTMKXHUzMDRBXHUzMDkzXHUzMDYxXHUzMDg1XHUzMDQ2Clx1MzA0QVx1MzA5M1x1MzA2OFx1MzA5OVx1MzA1MVx1MzA0NApcdTMwNEJcdTMwNDJcdTMwNjQKXHUzMDRCXHUzMDQ0XHUzMDRCXHUzMDk5Clx1MzA0Qlx1MzA5OVx1MzA0NFx1MzA0RApcdTMwNEJcdTMwOTlcdTMwNDRcdTMwNTFcdTMwOTMKXHUzMDRCXHUzMDk5XHUzMDQ0XHUzMDUzXHUzMDQ2Clx1MzA0Qlx1MzA0NFx1MzA1NVx1MzA2NApcdTMwNEJcdTMwNDRcdTMwNTdcdTMwODMKXHUzMDRCXHUzMDQ0XHUzMDU5XHUzMDQ0XHUzMDg4XHUzMDRGClx1MzA0Qlx1MzA0NFx1MzA1Qlx1MzA5OVx1MzA5MwpcdTMwNEJcdTMwNDRcdTMwNURcdTMwOTlcdTMwNDZcdTMwNjhcdTMwOTkKXHUzMDRCXHUzMDQ0XHUzMDY0XHUzMDQ2Clx1MzA0Qlx1MzA0NFx1MzA2Nlx1MzA5MwpcdTMwNEJcdTMwNDRcdTMwNjhcdTMwNDYKXHUzMDRCXHUzMDQ0XHUzMDc1XHUzMDRGClx1MzA0Qlx1MzA5OVx1MzA0NFx1MzA3OFx1MzA0RApcdTMwNEJcdTMwNDRcdTMwN0JcdTMwNDYKXHUzMDRCXHUzMDQ0XHUzMDg4XHUzMDQ2Clx1MzA0Qlx1MzA5OVx1MzA0NFx1MzA4OVx1MzA0NApcdTMwNEJcdTMwNDRcdTMwOEYKXHUzMDRCXHUzMDQ4XHUzMDhCClx1MzA0Qlx1MzA0QVx1MzA4QQpcdTMwNEJcdTMwNEJcdTMwNDhcdTMwOEIKXHUzMDRCXHUzMDRCXHUzMDk5XHUzMDRGClx1MzA0Qlx1MzA0Qlx1MzA5OVx1MzA1NwpcdTMwNEJcdTMwNEJcdTMwOTlcdTMwN0YKXHUzMDRCXHUzMDRGXHUzMDUzXHUzMDk5Clx1MzA0Qlx1MzA0Rlx1MzA2OFx1MzA0RgpcdTMwNEJcdTMwNTVcdTMwOTlcdTMwOEIKXHUzMDRCXHUzMDk5XHUzMDVEXHUzMDk5XHUzMDQ2Clx1MzA0Qlx1MzA1Rlx1MzA0NApcdTMwNEJcdTMwNUZcdTMwNjEKXHUzMDRCXHUzMDk5XHUzMDYxXHUzMDg3XHUzMDQ2Clx1MzA0Qlx1MzA5OVx1MzA2M1x1MzA0RFx1MzA4NVx1MzA0NgpcdTMwNEJcdTMwOTlcdTMwNjNcdTMwNTNcdTMwNDYKXHUzMDRCXHUzMDk5XHUzMDYzXHUzMDU1XHUzMDkzClx1MzA0Qlx1MzA5OVx1MzA2M1x1MzA1N1x1MzA4N1x1MzA0NgpcdTMwNEJcdTMwNkFcdTMwNTVcdTMwOTlcdTMwOEZcdTMwNTcKXHUzMDRCXHUzMDZFXHUzMDQ2Clx1MzA0Qlx1MzA5OVx1MzA2Rlx1MzA0RgpcdTMwNEJcdTMwNzVcdTMwOTlcdTMwNEIKXHUzMDRCXHUzMDdCXHUzMDQ2Clx1MzA0Qlx1MzA3Qlx1MzA1M1x1MzA5OQpcdTMwNEJcdTMwN0VcdTMwNDYKXHUzMDRCXHUzMDdFXHUzMDdCXHUzMDk5XHUzMDUzClx1MzA0Qlx1MzA4MVx1MzA4Q1x1MzA0QVx1MzA5MwpcdTMwNEJcdTMwODZcdTMwNDQKXHUzMDRCXHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA0Qlx1MzA4OVx1MzA0NApcdTMwNEJcdTMwOEJcdTMwNDQKXHUzMDRCXHUzMDhEXHUzMDQ2Clx1MzA0Qlx1MzA4Rlx1MzA0RgpcdTMwNEJcdTMwOEZcdTMwODkKXHUzMDRCXHUzMDk5XHUzMDkzXHUzMDRCClx1MzA0Qlx1MzA5M1x1MzA1MVx1MzA0NApcdTMwNEJcdTMwOTNcdTMwNTNcdTMwNDYKXHUzMDRCXHUzMDkzXHUzMDU3XHUzMDgzClx1MzA0Qlx1MzA5M1x1MzA1RFx1MzA0NgpcdTMwNEJcdTMwOTNcdTMwNUZcdTMwOTMKXHUzMDRCXHUzMDkzXHUzMDYxClx1MzA0Qlx1MzA5OVx1MzA5M1x1MzA2Rlx1MzA5OVx1MzA4QgpcdTMwNERcdTMwNDJcdTMwNDQKXHUzMDREXHUzMDQyXHUzMDY0Clx1MzA0RFx1MzA0NFx1MzA4RApcdTMwNERcdTMwOTlcdTMwNDRcdTMwOTMKXHUzMDREXHUzMDQ2XHUzMDQ0Clx1MzA0RFx1MzA0Nlx1MzA5MwpcdTMwNERcdTMwNDhcdTMwOEIKXHUzMDREXHUzMDRBXHUzMDQ2Clx1MzA0RFx1MzA0QVx1MzA0RgpcdTMwNERcdTMwNEFcdTMwNjEKXHUzMDREXHUzMDRBXHUzMDkzClx1MzA0RFx1MzA0Qlx1MzA0NApcdTMwNERcdTMwNEJcdTMwNEYKXHUzMDREXHUzMDRCXHUzMDkzXHUzMDU3XHUzMDgzClx1MzA0RFx1MzA0RFx1MzA2NgpcdTMwNERcdTMwNEZcdTMwNkZcdTMwOTlcdTMwOEEKXHUzMDREXHUzMDRGXHUzMDg5XHUzMDUxXHUzMDk5Clx1MzA0RFx1MzA1MVx1MzA5M1x1MzA1Qlx1MzA0NApcdTMwNERcdTMwNTNcdTMwNDYKXHUzMDREXHUzMDUzXHUzMDQ4XHUzMDhCClx1MzA0RFx1MzA1M1x1MzA0RgpcdTMwNERcdTMwNTVcdTMwNDQKXHUzMDREXHUzMDU1XHUzMDRGClx1MzA0RFx1MzA1NVx1MzA3RQpcdTMwNERcdTMwNTVcdTMwODlcdTMwNERcdTMwOTkKXHUzMDREXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDRCXHUzMDRCXHUzMDk5XHUzMDRGClx1MzA0RFx1MzA5OVx1MzA1N1x1MzA0RApcdTMwNERcdTMwOTlcdTMwNTdcdTMwOTlcdTMwNUZcdTMwNDRcdTMwNTFcdTMwOTMKXHUzMDREXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDZCXHUzMDYzXHUzMDY2XHUzMDQ0Clx1MzA0RFx1MzA5OVx1MzA1N1x1MzA5OVx1MzA4NVx1MzA2NFx1MzA1N1x1MzA4MwpcdTMwNERcdTMwNTlcdTMwNDYKXHUzMDREXHUzMDVCXHUzMDQ0Clx1MzA0RFx1MzA1Qlx1MzA0RApcdTMwNERcdTMwNUJcdTMwNjQKXHUzMDREXHUzMDVEXHUzMDQ2Clx1MzA0RFx1MzA1RFx1MzA5OVx1MzA0RgpcdTMwNERcdTMwNURcdTMwOTlcdTMwOTMKXHUzMDREXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA0RFx1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNERcdTMwNjRcdTMwNDhcdTMwOTMKXHUzMDREXHUzMDk5XHUzMDYzXHUzMDYxXHUzMDhBClx1MzA0RFx1MzA2NFx1MzA2NFx1MzA0RApcdTMwNERcdTMwNjRcdTMwNkQKXHUzMDREXHUzMDY2XHUzMDQ0Clx1MzA0RFx1MzA2OFx1MzA5OVx1MzA0NgpcdTMwNERcdTMwNjhcdTMwOTlcdTMwNEYKXHUzMDREXHUzMDZBXHUzMDQ0Clx1MzA0RFx1MzA2QVx1MzA0Qlx1MzA5OQpcdTMwNERcdTMwNkFcdTMwNTMKXHUzMDREXHUzMDZDXHUzMDUzXHUzMDk5XHUzMDU3Clx1MzA0RFx1MzA2RFx1MzA5MwpcdTMwNERcdTMwNkVcdTMwNDYKXHUzMDREXHUzMDZFXHUzMDU3XHUzMDVGClx1MzA0RFx1MzA2Rlx1MzA0RgpcdTMwNERcdTMwNzJcdTMwOTlcdTMwNTdcdTMwNDQKXHUzMDREXHUzMDcyXHUzMDkzClx1MzA0RFx1MzA3NVx1MzA0RgpcdTMwNERcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDREXHUzMDdCXHUzMDk5XHUzMDQ2Clx1MzA0RFx1MzA3Qlx1MzA5MwpcdTMwNERcdTMwN0VcdTMwOEIKXHUzMDREXHUzMDdGXHUzMDY0Clx1MzA0RFx1MzA4MFx1MzA1OVx1MzA5OVx1MzA0Qlx1MzA1N1x1MzA0NApcdTMwNERcdTMwODFcdTMwOEIKXHUzMDREXHUzMDgyXHUzMDVGXHUzMDk5XHUzMDgxXHUzMDU3Clx1MzA0RFx1MzA4Mlx1MzA2MQpcdTMwNERcdTMwODJcdTMwNkUKXHUzMDREXHUzMDgzXHUzMDRGClx1MzA0RFx1MzA4NFx1MzA0RgpcdTMwNERcdTMwOTlcdTMwODVcdTMwNDZcdTMwNkJcdTMwNEYKXHUzMDREXHUzMDg4XHUzMDQ2Clx1MzA0RFx1MzA4N1x1MzA0Nlx1MzA4QVx1MzA4NVx1MzA0NgpcdTMwNERcdTMwODlcdTMwNDQKXHUzMDREXHUzMDg5XHUzMDRGClx1MzA0RFx1MzA4QVx1MzA5MwpcdTMwNERcdTMwOENcdTMwNDQKXHUzMDREXHUzMDhDXHUzMDY0Clx1MzA0RFx1MzA4RFx1MzA0RgpcdTMwNERcdTMwOTlcdTMwOERcdTMwOTMKXHUzMDREXHUzMDhGXHUzMDgxXHUzMDhCClx1MzA0RFx1MzA5OVx1MzA5M1x1MzA0NFx1MzA4RApcdTMwNERcdTMwOTNcdTMwNEJcdTMwNEZcdTMwNTdcdTMwOTkKXHUzMDREXHUzMDkzXHUzMDU3XHUzMDk5XHUzMDg3Clx1MzA0RFx1MzA5M1x1MzA4OFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNEZcdTMwOTlcdTMwNDJcdTMwNDQKXHUzMDRGXHUzMDQ0XHUzMDU5XHUzMDk5Clx1MzA0Rlx1MzA0Nlx1MzA0Qlx1MzA5MwpcdTMwNEZcdTMwNDZcdTMwNEQKXHUzMDRGXHUzMDQ2XHUzMDRGXHUzMDk5XHUzMDkzClx1MzA0Rlx1MzA0Nlx1MzA1M1x1MzA0NgpcdTMwNEZcdTMwOTlcdTMwNDZcdTMwNUJcdTMwNDQKXHUzMDRGXHUzMDQ2XHUzMDVEXHUzMDQ2Clx1MzA0Rlx1MzA5OVx1MzA0Nlx1MzA1Rlx1MzA4OQpcdTMwNEZcdTMwNDZcdTMwNzVcdTMwNEYKXHUzMDRGXHUzMDQ2XHUzMDdCXHUzMDk5Clx1MzA0Rlx1MzA0Qlx1MzA5MwpcdTMwNEZcdTMwNERcdTMwODdcdTMwNDYKXHUzMDRGXHUzMDUxXHUzMDk5XHUzMDkzClx1MzA0Rlx1MzA5OVx1MzA1M1x1MzA0NgpcdTMwNEZcdTMwNTVcdTMwNDQKXHUzMDRGXHUzMDU1XHUzMDREClx1MzA0Rlx1MzA1NVx1MzA2Rlx1MzA5OVx1MzA2QQpcdTMwNEZcdTMwNTVcdTMwOEIKXHUzMDRGXHUzMDU3XHUzMDgzXHUzMDdGClx1MzA0Rlx1MzA1N1x1MzA4N1x1MzA0NgpcdTMwNEZcdTMwNTlcdTMwNkVcdTMwNEQKXHUzMDRGXHUzMDU5XHUzMDhBXHUzMDg2XHUzMDcyXHUzMDk5Clx1MzA0Rlx1MzA1Qlx1MzA1MVx1MzA5OQpcdTMwNEZcdTMwNUJcdTMwOTMKXHUzMDRGXHUzMDk5XHUzMDVGXHUzMDQ0XHUzMDY2XHUzMDREClx1MzA0Rlx1MzA1Rlx1MzA5OVx1MzA1NVx1MzA4QgpcdTMwNEZcdTMwNUZcdTMwNzJcdTMwOTlcdTMwOENcdTMwOEIKXHUzMDRGXHUzMDYxXHUzMDUzXHUzMDdGClx1MzA0Rlx1MzA2MVx1MzA1NVx1MzA0RApcdTMwNEZcdTMwNjRcdTMwNTdcdTMwNUYKXHUzMDRGXHUzMDk5XHUzMDYzXHUzMDU5XHUzMDhBClx1MzA0Rlx1MzA2NFx1MzA4RFx1MzA0Rlx1MzA5OQpcdTMwNEZcdTMwNjhcdTMwNDZcdTMwNjZcdTMwOTMKXHUzMDRGXHUzMDY4XHUzMDk5XHUzMDRGClx1MzA0Rlx1MzA2QVx1MzA5MwpcdTMwNEZcdTMwNkRcdTMwNEZcdTMwNkQKXHUzMDRGXHUzMDZFXHUzMDQ2Clx1MzA0Rlx1MzA3NVx1MzA0NgpcdTMwNEZcdTMwN0ZcdTMwNDJcdTMwOEZcdTMwNUIKXHUzMDRGXHUzMDdGXHUzMDVGXHUzMDY2XHUzMDhCClx1MzA0Rlx1MzA4MVx1MzA4QgpcdTMwNEZcdTMwODRcdTMwNEZcdTMwNTdcdTMwODcKXHUzMDRGXHUzMDg5XHUzMDU5Clx1MzA0Rlx1MzA4OVx1MzA3OFx1MzA5OVx1MzA4QgpcdTMwNEZcdTMwOEJcdTMwN0UKXHUzMDRGXHUzMDhDXHUzMDhCClx1MzA0Rlx1MzA4RFx1MzA0NgpcdTMwNEZcdTMwOEZcdTMwNTdcdTMwNDQKXHUzMDRGXHUzMDk5XHUzMDkzXHUzMDRCXHUzMDkzClx1MzA0Rlx1MzA5OVx1MzA5M1x1MzA1N1x1MzA4N1x1MzA0RgpcdTMwNEZcdTMwOTlcdTMwOTNcdTMwNUZcdTMwNDQKXHUzMDRGXHUzMDk5XHUzMDkzXHUzMDY2Clx1MzA1MVx1MzA0Mlx1MzA2QQpcdTMwNTFcdTMwNDRcdTMwNEJcdTMwNEYKXHUzMDUxXHUzMDQ0XHUzMDUxXHUzMDkzClx1MzA1MVx1MzA0NFx1MzA1MwpcdTMwNTFcdTMwNDRcdTMwNTVcdTMwNjQKXHUzMDUxXHUzMDk5XHUzMDQ0XHUzMDU3XHUzMDk5XHUzMDg1XHUzMDY0Clx1MzA1MVx1MzA0NFx1MzA1Rlx1MzA0NApcdTMwNTFcdTMwOTlcdTMwNDRcdTMwNkVcdTMwNDZcdTMwNTdcdTMwOTlcdTMwOTMKXHUzMDUxXHUzMDQ0XHUzMDhDXHUzMDREClx1MzA1MVx1MzA0NFx1MzA4RApcdTMwNTFcdTMwNEFcdTMwNjhcdTMwNTkKXHUzMDUxXHUzMDRBXHUzMDhBXHUzMDgyXHUzMDZFClx1MzA1MVx1MzA5OVx1MzA0RFx1MzA0QgpcdTMwNTFcdTMwOTlcdTMwNERcdTMwNTFcdTMwOTlcdTMwOTMKXHUzMDUxXHUzMDk5XHUzMDREXHUzMDVGXHUzMDk5XHUzMDkzClx1MzA1MVx1MzA5OVx1MzA0RFx1MzA2MVx1MzA5MwpcdTMwNTFcdTMwOTlcdTMwNERcdTMwNjhcdTMwNjQKXHUzMDUxXHUzMDk5XHUzMDREXHUzMDZGClx1MzA1MVx1MzA5OVx1MzA0RFx1MzA4NFx1MzA0RgpcdTMwNTFcdTMwOTlcdTMwNTNcdTMwNDYKXHUzMDUxXHUzMDk5XHUzMDUzXHUzMDRGXHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA1MVx1MzA5OVx1MzA1NVx1MzA5OVx1MzA0NApcdTMwNTFcdTMwNTVcdTMwNEQKXHUzMDUxXHUzMDk5XHUzMDU1XHUzMDk5XHUzMDkzClx1MzA1MVx1MzA1N1x1MzA0RApcdTMwNTFcdTMwNTdcdTMwNTNcdTMwOTlcdTMwODAKXHUzMDUxXHUzMDU3XHUzMDg3XHUzMDQ2Clx1MzA1MVx1MzA5OVx1MzA1OVx1MzA2OApcdTMwNTFcdTMwNUZcdTMwNkZcdTMwOTkKXHUzMDUxXHUzMDYxXHUzMDgzXHUzMDYzXHUzMDc1XHUzMDlBClx1MzA1MVx1MzA2MVx1MzA4OVx1MzA1OQpcdTMwNTFcdTMwNjRcdTMwNDJcdTMwNjQKXHUzMDUxXHUzMDY0XHUzMDQ0Clx1MzA1MVx1MzA2NFx1MzA0OFx1MzA0RApcdTMwNTFcdTMwNjNcdTMwNTNcdTMwOTMKXHUzMDUxXHUzMDY0XHUzMDU3XHUzMDk5XHUzMDg3Clx1MzA1MVx1MzA2M1x1MzA1Qlx1MzA0RApcdTMwNTFcdTMwNjNcdTMwNjZcdTMwNDQKXHUzMDUxXHUzMDY0XHUzMDdFXHUzMDY0Clx1MzA1MVx1MzA5OVx1MzA2NFx1MzA4OFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNTFcdTMwOTlcdTMwNjRcdTMwOENcdTMwNDQKXHUzMDUxXHUzMDY0XHUzMDhEXHUzMDkzClx1MzA1MVx1MzA5OVx1MzA2OFx1MzA5OVx1MzA0RgpcdTMwNTFcdTMwNjhcdTMwNkZcdTMwOTlcdTMwNTkKXHUzMDUxXHUzMDY4XHUzMDhCClx1MzA1MVx1MzA2QVx1MzA1MVx1MzA5OQpcdTMwNTFcdTMwNkFcdTMwNTkKXHUzMDUxXHUzMDZBXHUzMDdGClx1MzA1MVx1MzA2Q1x1MzA0RApcdTMwNTFcdTMwOTlcdTMwNkRcdTMwNjQKXHUzMDUxXHUzMDZEXHUzMDkzClx1MzA1MVx1MzA2Rlx1MzA0NApcdTMwNTFcdTMwOTlcdTMwNzJcdTMwOTMKXHUzMDUxXHUzMDc1XHUzMDk5XHUzMDRCXHUzMDQ0Clx1MzA1MVx1MzA5OVx1MzA3Qlx1MzA5OVx1MzA0RgpcdTMwNTFcdTMwN0VcdTMwOEEKXHUzMDUxXHUzMDdGXHUzMDRCXHUzMDhCClx1MzA1MVx1MzA4MFx1MzA1NwpcdTMwNTFcdTMwODBcdTMwOEEKXHUzMDUxXHUzMDgyXHUzMDZFClx1MzA1MVx1MzA4OVx1MzA0NApcdTMwNTFcdTMwOERcdTMwNTFcdTMwOEQKXHUzMDUxXHUzMDhGXHUzMDU3XHUzMDQ0Clx1MzA1MVx1MzA5M1x1MzA0NApcdTMwNTFcdTMwOTNcdTMwNDhcdTMwNjQKXHUzMDUxXHUzMDkzXHUzMDRBClx1MzA1MVx1MzA5M1x1MzA0QgpcdTMwNTFcdTMwOTlcdTMwOTNcdTMwNEQKXHUzMDUxXHUzMDkzXHUzMDUxXHUzMDk5XHUzMDkzClx1MzA1MVx1MzA5M1x1MzA1M1x1MzA0NgpcdTMwNTFcdTMwOTNcdTMwNTVcdTMwNEYKXHUzMDUxXHUzMDkzXHUzMDU3XHUzMDg1XHUzMDQ2Clx1MzA1MVx1MzA5M1x1MzA1OVx1MzA0NgpcdTMwNTFcdTMwOTlcdTMwOTNcdTMwNURcdTMwNDYKXHUzMDUxXHUzMDkzXHUzMDYxXHUzMDRGClx1MzA1MVx1MzA5M1x1MzA2Nlx1MzA0NApcdTMwNTFcdTMwOTNcdTMwNjhcdTMwNDYKXHUzMDUxXHUzMDkzXHUzMDZBXHUzMDQ0Clx1MzA1MVx1MzA5M1x1MzA2Qlx1MzA5MwpcdTMwNTFcdTMwOTlcdTMwOTNcdTMwNzVcdTMwOTlcdTMwNjQKXHUzMDUxXHUzMDkzXHUzMDdFClx1MzA1MVx1MzA5M1x1MzA3Rlx1MzA5MwpcdTMwNTFcdTMwOTNcdTMwODFcdTMwNDQKXHUzMDUxXHUzMDkzXHUzMDg5XHUzMDkzClx1MzA1MVx1MzA5M1x1MzA4QQpcdTMwNTNcdTMwNDJcdTMwNEZcdTMwN0UKXHUzMDUzXHUzMDQ0XHUzMDZDClx1MzA1M1x1MzA0NFx1MzA3Mlx1MzA5OVx1MzA2OApcdTMwNTNcdTMwOTlcdTMwNDZcdTMwNDQKXHUzMDUzXHUzMDQ2XHUzMDQ4XHUzMDkzClx1MzA1M1x1MzA0Nlx1MzA0QVx1MzA5MwpcdTMwNTNcdTMwNDZcdTMwNEJcdTMwOTMKXHUzMDUzXHUzMDk5XHUzMDQ2XHUzMDREXHUzMDg1XHUzMDQ2Clx1MzA1M1x1MzA5OVx1MzA0Nlx1MzA1MVx1MzA0NApcdTMwNTNcdTMwNDZcdTMwNTNcdTMwNDYKXHUzMDUzXHUzMDQ2XHUzMDU1XHUzMDQ0Clx1MzA1M1x1MzA0Nlx1MzA1N1x1MzA5OQpcdTMwNTNcdTMwNDZcdTMwNTlcdTMwNDQKXHUzMDUzXHUzMDk5XHUzMDQ2XHUzMDVCXHUzMDQ0Clx1MzA1M1x1MzA0Nlx1MzA1RFx1MzA0RgpcdTMwNTNcdTMwNDZcdTMwNUZcdTMwNDQKXHUzMDUzXHUzMDQ2XHUzMDYxXHUzMDgzClx1MzA1M1x1MzA0Nlx1MzA2NFx1MzA0NgpcdTMwNTNcdTMwNDZcdTMwNjZcdTMwNDQKXHUzMDUzXHUzMDQ2XHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA1M1x1MzA0Nlx1MzA2QVx1MzA0NApcdTMwNTNcdTMwNDZcdTMwNkZcdTMwNDQKXHUzMDUzXHUzMDk5XHUzMDQ2XHUzMDdCXHUzMDQ2Clx1MzA1M1x1MzA5OVx1MzA0Nlx1MzA3RVx1MzA5MwpcdTMwNTNcdTMwNDZcdTMwODJcdTMwNEYKXHUzMDUzXHUzMDQ2XHUzMDhBXHUzMDY0Clx1MzA1M1x1MzA0OFx1MzA4QgpcdTMwNTNcdTMwNEFcdTMwOEEKXHUzMDUzXHUzMDk5XHUzMDRCXHUzMDQ0Clx1MzA1M1x1MzA5OVx1MzA0Qlx1MzA5OVx1MzA2NApcdTMwNTNcdTMwOTlcdTMwNEJcdTMwOTMKXHUzMDUzXHUzMDRGXHUzMDUzXHUzMDk5Clx1MzA1M1x1MzA0Rlx1MzA1NVx1MzA0NApcdTMwNTNcdTMwNEZcdTMwNjhcdTMwNDYKXHUzMDUzXHUzMDRGXHUzMDZBXHUzMDQ0Clx1MzA1M1x1MzA0Rlx1MzA2Rlx1MzA0RgpcdTMwNTNcdTMwNEZcdTMwOTlcdTMwN0UKXHUzMDUzXHUzMDUxXHUzMDQ0Clx1MzA1M1x1MzA1MVx1MzA4QgpcdTMwNTNcdTMwNTNcdTMwNkVcdTMwNEIKXHUzMDUzXHUzMDUzXHUzMDhEClx1MzA1M1x1MzA1NVx1MzA4MQpcdTMwNTNcdTMwNTdcdTMwNjQKXHUzMDUzXHUzMDU5XHUzMDQ2Clx1MzA1M1x1MzA1Qlx1MzA0NApcdTMwNTNcdTMwNUJcdTMwNEQKXHUzMDUzXHUzMDVCXHUzMDk5XHUzMDkzClx1MzA1M1x1MzA1RFx1MzA1Rlx1MzA5OVx1MzA2NgpcdTMwNTNcdTMwNUZcdTMwNDQKXHUzMDUzXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA1M1x1MzA1Rlx1MzA2NApcdTMwNTNcdTMwNjFcdTMwODdcdTMwNDYKXHUzMDUzXHUzMDYzXHUzMDRCClx1MzA1M1x1MzA2NFx1MzA1M1x1MzA2NApcdTMwNTNcdTMwNjRcdTMwNkZcdTMwOTlcdTMwOTMKXHUzMDUzXHUzMDY0XHUzMDc1XHUzMDk5Clx1MzA1M1x1MzA2Nlx1MzA0NApcdTMwNTNcdTMwNjZcdTMwOTMKXHUzMDUzXHUzMDY4XHUzMDRCXHUzMDk5XHUzMDg5Clx1MzA1M1x1MzA2OFx1MzA1NwpcdTMwNTNcdTMwNjhcdTMwNkZcdTMwOTkKXHUzMDUzXHUzMDY4XHUzMDhBClx1MzA1M1x1MzA2QVx1MzA1M1x1MzA5OVx1MzA2QQpcdTMwNTNcdTMwNkRcdTMwNTNcdTMwNkQKXHUzMDUzXHUzMDZFXHUzMDdFXHUzMDdFClx1MzA1M1x1MzA2RVx1MzA3RgpcdTMwNTNcdTMwNkVcdTMwODgKXHUzMDUzXHUzMDk5XHUzMDZGXHUzMDkzClx1MzA1M1x1MzA3Mlx1MzA2NFx1MzA1N1x1MzA5OQpcdTMwNTNcdTMwNzVcdTMwNDYKXHUzMDUzXHUzMDc1XHUzMDkzClx1MzA1M1x1MzA3Qlx1MzA5OVx1MzA4Q1x1MzA4QgpcdTMwNTNcdTMwOTlcdTMwN0VcdTMwNDJcdTMwNzVcdTMwOTlcdTMwODkKXHUzMDUzXHUzMDdFXHUzMDRCXHUzMDQ0Clx1MzA1M1x1MzA5OVx1MzA3RVx1MzA1OVx1MzA4QQpcdTMwNTNcdTMwN0VcdTMwNjRcdTMwNkEKXHUzMDUzXHUzMDdFXHUzMDhCClx1MzA1M1x1MzA4MFx1MzA0RFx1MzA5OVx1MzA1MwpcdTMwNTNcdTMwODJcdTMwNTdcdTMwOTkKXHUzMDUzXHUzMDgyXHUzMDYxClx1MzA1M1x1MzA4Mlx1MzA2RQpcdTMwNTNcdTMwODJcdTMwOTMKXHUzMDUzXHUzMDg0XHUzMDRGClx1MzA1M1x1MzA4NFx1MzA3RQpcdTMwNTNcdTMwODZcdTMwNDYKXHUzMDUzXHUzMDg2XHUzMDcyXHUzMDk5Clx1MzA1M1x1MzA4OFx1MzA0NApcdTMwNTNcdTMwODhcdTMwNDYKXHUzMDUzXHUzMDhBXHUzMDhCClx1MzA1M1x1MzA4Q1x1MzA0Rlx1MzA1N1x1MzA4N1x1MzA5MwpcdTMwNTNcdTMwOERcdTMwNjNcdTMwNTEKXHUzMDUzXHUzMDhGXHUzMDgyXHUzMDY2Clx1MzA1M1x1MzA4Rlx1MzA4Q1x1MzA4QgpcdTMwNTNcdTMwOTNcdTMwNDRcdTMwOTMKXHUzMDUzXHUzMDkzXHUzMDRCXHUzMDQ0Clx1MzA1M1x1MzA5M1x1MzA0RApcdTMwNTNcdTMwOTNcdTMwNTdcdTMwODVcdTMwNDYKXHUzMDUzXHUzMDkzXHUzMDU5XHUzMDQ0Clx1MzA1M1x1MzA5M1x1MzA1Rlx1MzA5OVx1MzA2NgpcdTMwNTNcdTMwOTNcdTMwNjhcdTMwOTMKXHUzMDUzXHUzMDkzXHUzMDZBXHUzMDkzClx1MzA1M1x1MzA5M1x1MzA3Mlx1MzA5OVx1MzA2QgpcdTMwNTNcdTMwOTNcdTMwN0JcdTMwOUFcdTMwOTMKXHUzMDUzXHUzMDkzXHUzMDdFXHUzMDUxClx1MzA1M1x1MzA5M1x1MzA4NApcdTMwNTNcdTMwOTNcdTMwOENcdTMwNDQKXHUzMDUzXHUzMDkzXHUzMDhGXHUzMDRGClx1MzA1NVx1MzA5OVx1MzA0NFx1MzA0OFx1MzA0RApcdTMwNTVcdTMwNDRcdTMwNEJcdTMwNDQKXHUzMDU1XHUzMDQ0XHUzMDREXHUzMDkzClx1MzA1NVx1MzA5OVx1MzA0NFx1MzA1MVx1MzA5OVx1MzA5MwpcdTMwNTVcdTMwOTlcdTMwNDRcdTMwNTMKXHUzMDU1XHUzMDQ0XHUzMDU3XHUzMDg3Clx1MzA1NVx1MzA0NFx1MzA1Qlx1MzA0NApcdTMwNTVcdTMwOTlcdTMwNDRcdTMwNUZcdTMwNEYKXHUzMDU1XHUzMDk5XHUzMDQ0XHUzMDYxXHUzMDg1XHUzMDQ2Clx1MzA1NVx1MzA0NFx1MzA2Nlx1MzA0RApcdTMwNTVcdTMwOTlcdTMwNDRcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDU1XHUzMDQ2XHUzMDZBClx1MzA1NVx1MzA0Qlx1MzA0NFx1MzA1NwpcdTMwNTVcdTMwNEJcdTMwOTlcdTMwNTkKXHUzMDU1XHUzMDRCXHUzMDZBClx1MzA1NVx1MzA0Qlx1MzA3Rlx1MzA2MQpcdTMwNTVcdTMwNEJcdTMwOTlcdTMwOEIKXHUzMDU1XHUzMDREXHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA1NVx1MzA0Rlx1MzA1NwpcdTMwNTVcdTMwNEZcdTMwNzJcdTMwOTMKXHUzMDU1XHUzMDRGXHUzMDg5Clx1MzA1NVx1MzA1M1x1MzA0RgpcdTMwNTVcdTMwNTNcdTMwNjQKXHUzMDU1XHUzMDU5XHUzMDk5XHUzMDRCXHUzMDhCClx1MzA1NVx1MzA5OVx1MzA1Qlx1MzA0RApcdTMwNTVcdTMwNUZcdTMwOTMKXHUzMDU1XHUzMDY0XHUzMDQ4XHUzMDQ0Clx1MzA1NVx1MzA5OVx1MzA2NFx1MzA0QVx1MzA5MwpcdTMwNTVcdTMwOTlcdTMwNjNcdTMwNEIKXHUzMDU1XHUzMDk5XHUzMDY0XHUzMDRCXHUzMDk5XHUzMDRGClx1MzA1NVx1MzA2M1x1MzA0RFx1MzA4N1x1MzA0RgpcdTMwNTVcdTMwOTlcdTMwNjNcdTMwNTcKXHUzMDU1XHUzMDY0XHUzMDU3XHUzMDk5XHUzMDkzClx1MzA1NVx1MzA5OVx1MzA2M1x1MzA1RFx1MzA0NgpcdTMwNTVcdTMwNjRcdTMwNUZcdTMwNkZcdTMwOTkKXHUzMDU1XHUzMDY0XHUzMDdFXHUzMDQ0XHUzMDgyClx1MzA1NVx1MzA2Nlx1MzA0NApcdTMwNTVcdTMwNjhcdTMwNDRcdTMwODIKXHUzMDU1XHUzMDY4XHUzMDQ2Clx1MzA1NVx1MzA2OFx1MzA0QVx1MzA4NApcdTMwNTVcdTMwNjhcdTMwNTcKXHUzMDU1XHUzMDY4XHUzMDhCClx1MzA1NVx1MzA2RVx1MzA0NgpcdTMwNTVcdTMwNkZcdTMwOTlcdTMwNEYKXHUzMDU1XHUzMDcyXHUzMDk5XHUzMDU3XHUzMDQ0Clx1MzA1NVx1MzA3OFx1MzA5OVx1MzA2NApcdTMwNTVcdTMwN0JcdTMwNDYKXHUzMDU1XHUzMDdCXHUzMDY4XHUzMDk5Clx1MzA1NVx1MzA3RVx1MzA1OQpcdTMwNTVcdTMwN0ZcdTMwNTdcdTMwNDQKXHUzMDU1XHUzMDdGXHUzMDVGXHUzMDk5XHUzMDhDClx1MzA1NVx1MzA4MFx1MzA1MQpcdTMwNTVcdTMwODFcdTMwOEIKXHUzMDU1XHUzMDg0XHUzMDQ4XHUzMDkzXHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA1NVx1MzA4Nlx1MzA0NgpcdTMwNTVcdTMwODhcdTMwNDYKXHUzMDU1XHUzMDg4XHUzMDRGClx1MzA1NVx1MzA4OVx1MzA1Rlx1MzA5OQpcdTMwNTVcdTMwOTlcdTMwOEJcdTMwNURcdTMwNkZcdTMwOTkKXHUzMDU1XHUzMDhGXHUzMDg0XHUzMDRCClx1MzA1NVx1MzA4Rlx1MzA4QgpcdTMwNTVcdTMwOTNcdTMwNDRcdTMwOTMKXHUzMDU1XHUzMDkzXHUzMDRCClx1MzA1NVx1MzA5M1x1MzA0RFx1MzA4M1x1MzA0RgpcdTMwNTVcdTMwOTNcdTMwNTNcdTMwNDYKXHUzMDU1XHUzMDkzXHUzMDU1XHUzMDQ0Clx1MzA1NVx1MzA5OVx1MzA5M1x1MzA1N1x1MzA4NwpcdTMwNTVcdTMwOTNcdTMwNTlcdTMwNDYKXHUzMDU1XHUzMDkzXHUzMDVCXHUzMDQ0Clx1MzA1NVx1MzA5M1x1MzA1RApcdTMwNTVcdTMwOTNcdTMwNjEKXHUzMDU1XHUzMDkzXHUzMDdFClx1MzA1NVx1MzA5M1x1MzA3RgpcdTMwNTVcdTMwOTNcdTMwODlcdTMwOTMKXHUzMDU3XHUzMDQyXHUzMDQ0Clx1MzA1N1x1MzA0Mlx1MzA1MVx1MzA5OQpcdTMwNTdcdTMwNDJcdTMwNTVcdTMwNjNcdTMwNjYKXHUzMDU3XHUzMDQyXHUzMDhGXHUzMDVCClx1MzA1N1x1MzA0NFx1MzA0RgpcdTMwNTdcdTMwNDRcdTMwOTMKXHUzMDU3XHUzMDQ2XHUzMDYxClx1MzA1N1x1MzA0OFx1MzA0NApcdTMwNTdcdTMwNEFcdTMwNTEKXHUzMDU3XHUzMDRCXHUzMDQ0Clx1MzA1N1x1MzA0Qlx1MzA0RgpcdTMwNTdcdTMwOTlcdTMwNEJcdTMwOTMKXHUzMDU3XHUzMDUzXHUzMDk5XHUzMDY4Clx1MzA1N1x1MzA1OVx1MzA0NgpcdTMwNTdcdTMwOTlcdTMwNUZcdTMwOTlcdTMwNDQKXHUzMDU3XHUzMDVGXHUzMDQ2XHUzMDUxClx1MzA1N1x1MzA1Rlx1MzA0RFx1MzA5OQpcdTMwNTdcdTMwNUZcdTMwNjYKXHUzMDU3XHUzMDVGXHUzMDdGClx1MzA1N1x1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNTdcdTMwNjFcdTMwOEFcdTMwOTMKXHUzMDU3XHUzMDYzXHUzMDRCXHUzMDhBClx1MzA1N1x1MzA2NFx1MzA1N1x1MzA5OQpcdTMwNTdcdTMwNjRcdTMwODJcdTMwOTMKXHUzMDU3XHUzMDY2XHUzMDQ0Clx1MzA1N1x1MzA2Nlx1MzA0RApcdTMwNTdcdTMwNjZcdTMwNjQKXHUzMDU3XHUzMDk5XHUzMDY2XHUzMDkzClx1MzA1N1x1MzA5OVx1MzA2OFx1MzA5OVx1MzA0NgpcdTMwNTdcdTMwNkFcdTMwNERcdTMwOTlcdTMwOEMKXHUzMDU3XHUzMDZBXHUzMDgyXHUzMDZFClx1MzA1N1x1MzA2QVx1MzA5MwpcdTMwNTdcdTMwNkRcdTMwN0UKXHUzMDU3XHUzMDZEXHUzMDkzClx1MzA1N1x1MzA2RVx1MzA0Rlx1MzA5OQpcdTMwNTdcdTMwNkVcdTMwNzVcdTMwOTkKXHUzMDU3XHUzMDZGXHUzMDQ0Clx1MzA1N1x1MzA2Rlx1MzA5OVx1MzA0Qlx1MzA4QQpcdTMwNTdcdTMwNkZcdTMwNjQKXHUzMDU3XHUzMDZGXHUzMDg5XHUzMDQ0Clx1MzA1N1x1MzA2Rlx1MzA5MwpcdTMwNTdcdTMwNzJcdTMwODdcdTMwNDYKXHUzMDU3XHUzMDc1XHUzMDRGClx1MzA1N1x1MzA5OVx1MzA3NVx1MzA5OVx1MzA5MwpcdTMwNTdcdTMwNzhcdTMwNDQKXHUzMDU3XHUzMDdCXHUzMDQ2Clx1MzA1N1x1MzA3Qlx1MzA5MwpcdTMwNTdcdTMwN0VcdTMwNDYKXHUzMDU3XHUzMDdFXHUzMDhCClx1MzA1N1x1MzA3Rlx1MzA5MwpcdTMwNTdcdTMwODBcdTMwNTFcdTMwOEIKXHUzMDU3XHUzMDk5XHUzMDgwXHUzMDU3XHUzMDg3Clx1MzA1N1x1MzA4MVx1MzA0NApcdTMwNTdcdTMwODFcdTMwOEIKXHUzMDU3XHUzMDgyXHUzMDkzClx1MzA1N1x1MzA4M1x1MzA0NFx1MzA5MwpcdTMwNTdcdTMwODNcdTMwNDZcdTMwOTMKXHUzMDU3XHUzMDgzXHUzMDRBXHUzMDkzClx1MzA1N1x1MzA5OVx1MzA4M1x1MzA0Qlx1MzA5OVx1MzA0NFx1MzA4MgpcdTMwNTdcdTMwODRcdTMwNEZcdTMwNTdcdTMwODcKXHUzMDU3XHUzMDgzXHUzMDRGXHUzMDdCXHUzMDQ2Clx1MzA1N1x1MzA4M1x1MzA1MVx1MzA5MwpcdTMwNTdcdTMwODNcdTMwNTMKXHUzMDU3XHUzMDgzXHUzMDU1XHUzMDk5XHUzMDQ0Clx1MzA1N1x1MzA4M1x1MzA1N1x1MzA5MwpcdTMwNTdcdTMwODNcdTMwNUJcdTMwOTMKXHUzMDU3XHUzMDgzXHUzMDVEXHUzMDQ2Clx1MzA1N1x1MzA4M1x1MzA1Rlx1MzA0NApcdTMwNTdcdTMwODNcdTMwNjFcdTMwODdcdTMwNDYKXHUzMDU3XHUzMDgzXHUzMDYzXHUzMDREXHUzMDkzClx1MzA1N1x1MzA5OVx1MzA4M1x1MzA3RQpcdTMwNTdcdTMwODNcdTMwOEFcdTMwOTMKXHUzMDU3XHUzMDgzXHUzMDhDXHUzMDQ0Clx1MzA1N1x1MzA5OVx1MzA4Nlx1MzA0NgpcdTMwNTdcdTMwOTlcdTMwODVcdTMwNDZcdTMwNTdcdTMwODcKXHUzMDU3XHUzMDg1XHUzMDRGXHUzMDZGXHUzMDRGClx1MzA1N1x1MzA5OVx1MzA4NVx1MzA1N1x1MzA5MwpcdTMwNTdcdTMwODVcdTMwNjNcdTMwNUJcdTMwNEQKXHUzMDU3XHUzMDg1XHUzMDdGClx1MzA1N1x1MzA4NVx1MzA4OVx1MzA2Rlx1MzA5OQpcdTMwNTdcdTMwOTlcdTMwODVcdTMwOTNcdTMwNkZcdTMwOTlcdTMwOTMKXHUzMDU3XHUzMDg3XHUzMDQ2XHUzMDRCXHUzMDQ0Clx1MzA1N1x1MzA4N1x1MzA0Rlx1MzA1Rlx1MzA0RgpcdTMwNTdcdTMwODdcdTMwNjNcdTMwNTFcdTMwOTMKXHUzMDU3XHUzMDg3XHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA1N1x1MzA4N1x1MzA4Mlx1MzA2NApcdTMwNTdcdTMwODlcdTMwNUJcdTMwOEIKXHUzMDU3XHUzMDg5XHUzMDc4XHUzMDk5XHUzMDhCClx1MzA1N1x1MzA5M1x1MzA0QgpcdTMwNTdcdTMwOTNcdTMwNTNcdTMwNDYKXHUzMDU3XHUzMDk5XHUzMDkzXHUzMDU3XHUzMDk5XHUzMDgzClx1MzA1N1x1MzA5M1x1MzA1Qlx1MzA0NFx1MzA1N1x1MzA5OQpcdTMwNTdcdTMwOTNcdTMwNjFcdTMwNEYKXHUzMDU3XHUzMDkzXHUzMDhBXHUzMDkzClx1MzA1OVx1MzA0Mlx1MzA1MVx1MzA5OQpcdTMwNTlcdTMwNDJcdTMwNTcKXHUzMDU5XHUzMDQyXHUzMDZBClx1MzA1OVx1MzA5OVx1MzA0Mlx1MzA5MwpcdTMwNTlcdTMwNDRcdTMwNDhcdTMwNDQKXHUzMDU5XHUzMDQ0XHUzMDRCClx1MzA1OVx1MzA0NFx1MzA2OFx1MzA0NgpcdTMwNTlcdTMwOTlcdTMwNDRcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDU5XHUzMDQ0XHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA1OVx1MzA0Nlx1MzA0Qlx1MzA5OVx1MzA0RgpcdTMwNTlcdTMwNDZcdTMwNTdcdTMwOTlcdTMwNjQKXHUzMDU5XHUzMDQ2XHUzMDVCXHUzMDkzClx1MzA1OVx1MzA0QVx1MzA2OFx1MzA5OVx1MzA4QQpcdTMwNTlcdTMwNERcdTMwN0UKXHUzMDU5XHUzMDRGXHUzMDQ2Clx1MzA1OVx1MzA0Rlx1MzA2QVx1MzA0NApcdTMwNTlcdTMwNTFcdTMwOEIKXHUzMDU5XHUzMDUzXHUzMDk5XHUzMDQ0Clx1MzA1OVx1MzA1M1x1MzA1NwpcdTMwNTlcdTMwOTlcdTMwNTVcdTMwOTMKXHUzMDU5XHUzMDU5XHUzMDk5XHUzMDU3XHUzMDQ0Clx1MzA1OVx1MzA1OVx1MzA4MApcdTMwNTlcdTMwNTlcdTMwODFcdTMwOEIKXHUzMDU5XHUzMDYzXHUzMDRCXHUzMDhBClx1MzA1OVx1MzA5OVx1MzA2M1x1MzA1N1x1MzA4QQpcdTMwNTlcdTMwOTlcdTMwNjNcdTMwNjgKXHUzMDU5XHUzMDY2XHUzMDREClx1MzA1OVx1MzA2Nlx1MzA4QgpcdTMwNTlcdTMwNkRcdTMwOEIKXHUzMDU5XHUzMDZFXHUzMDUzClx1MzA1OVx1MzA2Rlx1MzA1Rlx1MzA5OQpcdTMwNTlcdTMwNkZcdTMwOTlcdTMwODlcdTMwNTdcdTMwNDQKXHUzMDU5XHUzMDk5XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA1OVx1MzA5OVx1MzA3NVx1MzA5OVx1MzA2Q1x1MzA4QwpcdTMwNTlcdTMwNzVcdTMwOTlcdTMwOEEKXHUzMDU5XHUzMDc1XHUzMDhDClx1MzA1OVx1MzA3OFx1MzA5OVx1MzA2NgpcdTMwNTlcdTMwNzhcdTMwOTlcdTMwOEIKXHUzMDU5XHUzMDk5XHUzMDdCXHUzMDQ2Clx1MzA1OVx1MzA3Qlx1MzA5OVx1MzA5MwpcdTMwNTlcdTMwN0VcdTMwNDQKXHUzMDU5XHUzMDgxXHUzMDU3Clx1MzA1OVx1MzA4Mlx1MzA0NgpcdTMwNTlcdTMwODRcdTMwNEQKXHUzMDU5XHUzMDg5XHUzMDU5XHUzMDg5Clx1MzA1OVx1MzA4Qlx1MzA4MQpcdTMwNTlcdTMwOENcdTMwNjFcdTMwNEJcdTMwOTlcdTMwNDYKXHUzMDU5XHUzMDhEXHUzMDYzXHUzMDY4Clx1MzA1OVx1MzA4Rlx1MzA4QgpcdTMwNTlcdTMwOTNcdTMwNUJcdTMwOTlcdTMwOTMKXHUzMDU5XHUzMDkzXHUzMDdCXHUzMDlBXHUzMDQ2Clx1MzA1Qlx1MzA0Mlx1MzA3NVx1MzA5OVx1MzA4OQpcdTMwNUJcdTMwNDRcdTMwNEJcdTMwNjQKXHUzMDVCXHUzMDQ0XHUzMDUxXHUzMDk5XHUzMDkzClx1MzA1Qlx1MzA0NFx1MzA1N1x1MzA5OQpcdTMwNUJcdTMwNDRcdTMwODhcdTMwNDYKXHUzMDVCXHUzMDRBXHUzMDQ2Clx1MzA1Qlx1MzA0Qlx1MzA0NFx1MzA0Qlx1MzA5MwpcdTMwNUJcdTMwNERcdTMwNkJcdTMwOTMKXHUzMDVCXHUzMDREXHUzMDgwClx1MzA1Qlx1MzA0RFx1MzA4NgpcdTMwNUJcdTMwNERcdTMwODlcdTMwOTNcdTMwNDZcdTMwOTMKXHUzMDVCXHUzMDUxXHUzMDkzClx1MzA1Qlx1MzA1M1x1MzA0NgpcdTMwNUJcdTMwNTlcdTMwNTdcdTMwOTkKXHUzMDVCXHUzMDVGXHUzMDQ0Clx1MzA1Qlx1MzA1Rlx1MzA1MQpcdTMwNUJcdTMwNjNcdTMwNEJcdTMwNEYKXHUzMDVCXHUzMDYzXHUzMDREXHUzMDgzXHUzMDRGClx1MzA1Qlx1MzA5OVx1MzA2M1x1MzA0RgpcdTMwNUJcdTMwNjNcdTMwNTFcdTMwOTMKXHUzMDVCXHUzMDYzXHUzMDUzXHUzMDY0Clx1MzA1Qlx1MzA2M1x1MzA1NVx1MzA1Rlx1MzA0Rlx1MzA3RQpcdTMwNUJcdTMwNjRcdTMwNURcdTMwOTlcdTMwNEYKXHUzMDVCXHUzMDY0XHUzMDVGXHUzMDk5XHUzMDkzClx1MzA1Qlx1MzA2NFx1MzA2Nlx1MzA5OVx1MzA5MwpcdTMwNUJcdTMwNjNcdTMwNkZcdTMwOUFcdTMwOTMKXHUzMDVCXHUzMDY0XHUzMDcyXHUzMDk5Clx1MzA1Qlx1MzA2NFx1MzA3NVx1MzA5OVx1MzA5MwpcdTMwNUJcdTMwNjRcdTMwODFcdTMwNDQKXHUzMDVCXHUzMDY0XHUzMDhBXHUzMDY0Clx1MzA1Qlx1MzA2QVx1MzA0QgpcdTMwNUJcdTMwNkVcdTMwNzJcdTMwOTkKXHUzMDVCXHUzMDZGXHUzMDZGXHUzMDk5Clx1MzA1Qlx1MzA3Mlx1MzA5OVx1MzA4RApcdTMwNUJcdTMwN0JcdTMwOTlcdTMwNkQKXHUzMDVCXHUzMDdFXHUzMDQ0Clx1MzA1Qlx1MzA3RVx1MzA4QgpcdTMwNUJcdTMwODFcdTMwOEIKXHUzMDVCXHUzMDgyXHUzMDVGXHUzMDhDClx1MzA1Qlx1MzA4QVx1MzA3NQpcdTMwNUJcdTMwOTlcdTMwOTNcdTMwNDJcdTMwNEYKXHUzMDVCXHUzMDkzXHUzMDQ0Clx1MzA1Qlx1MzA5M1x1MzA0OFx1MzA0NApcdTMwNUJcdTMwOTNcdTMwNEIKXHUzMDVCXHUzMDkzXHUzMDREXHUzMDg3Clx1MzA1Qlx1MzA5M1x1MzA0RgpcdTMwNUJcdTMwOTNcdTMwNTFcdTMwOTlcdTMwOTMKXHUzMDVCXHUzMDk5XHUzMDkzXHUzMDUzXHUzMDk5Clx1MzA1Qlx1MzA5M1x1MzA1NVx1MzA0NApcdTMwNUJcdTMwOTNcdTMwNTdcdTMwODUKXHUzMDVCXHUzMDkzXHUzMDU5XHUzMDQ0Clx1MzA1Qlx1MzA5M1x1MzA1Qlx1MzA0NApcdTMwNUJcdTMwOTNcdTMwNURcdTMwOTkKXHUzMDVCXHUzMDkzXHUzMDVGXHUzMDRGClx1MzA1Qlx1MzA5M1x1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNUJcdTMwOTNcdTMwNjZcdTMwNDQKXHUzMDVCXHUzMDkzXHUzMDY4XHUzMDQ2Clx1MzA1Qlx1MzA5M1x1MzA2Q1x1MzA0RApcdTMwNUJcdTMwOTNcdTMwNkRcdTMwOTMKXHUzMDVCXHUzMDkzXHUzMDZGXHUzMDlBXHUzMDQ0Clx1MzA1Qlx1MzA5OVx1MzA5M1x1MzA3NVx1MzA5OQpcdTMwNUJcdTMwOTlcdTMwOTNcdTMwN0JcdTMwOUFcdTMwNDYKXHUzMDVCXHUzMDkzXHUzMDgwClx1MzA1Qlx1MzA5M1x1MzA4MVx1MzA5M1x1MzA1N1x1MzA5OVx1MzA4NwpcdTMwNUJcdTMwOTNcdTMwODJcdTMwOTMKXHUzMDVCXHUzMDkzXHUzMDg0XHUzMDRGClx1MzA1Qlx1MzA5M1x1MzA4Nlx1MzA0NgpcdTMwNUJcdTMwOTNcdTMwODhcdTMwNDYKXHUzMDVCXHUzMDk5XHUzMDkzXHUzMDg5Clx1MzA1Qlx1MzA5OVx1MzA5M1x1MzA4QVx1MzA4M1x1MzA0RgpcdTMwNUJcdTMwOTNcdTMwOENcdTMwNDQKXHUzMDVCXHUzMDkzXHUzMDhEClx1MzA1RFx1MzA0Mlx1MzA0RgpcdTMwNURcdTMwNDRcdTMwNjhcdTMwNTFcdTMwOTlcdTMwOEIKXHUzMDVEXHUzMDQ0XHUzMDZEClx1MzA1RFx1MzA0Nlx1MzA0Qlx1MzA5OVx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0NgpcdTMwNURcdTMwNDZcdTMwNEQKXHUzMDVEXHUzMDQ2XHUzMDUzXHUzMDk5Clx1MzA1RFx1MzA0Nlx1MzA1N1x1MzA5MwpcdTMwNURcdTMwNDZcdTMwNUZcdTMwOTlcdTMwOTMKXHUzMDVEXHUzMDQ2XHUzMDZBXHUzMDkzClx1MzA1RFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNURcdTMwNDZcdTMwODFcdTMwOTMKXHUzMDVEXHUzMDQ2XHUzMDhBClx1MzA1RFx1MzA0OFx1MzA4Mlx1MzA2RQpcdTMwNURcdTMwNDhcdTMwOTMKXHUzMDVEXHUzMDRCXHUzMDk5XHUzMDQ0Clx1MzA1RFx1MzA1MVx1MzA5OVx1MzA0RApcdTMwNURcdTMwNTNcdTMwNDYKXHUzMDVEXHUzMDUzXHUzMDVEXHUzMDUzClx1MzA1RFx1MzA1NVx1MzA5OVx1MzA0NApcdTMwNURcdTMwNTdcdTMwNkEKXHUzMDVEXHUzMDVCXHUzMDQ0Clx1MzA1RFx1MzA1Qlx1MzA5MwpcdTMwNURcdTMwNURcdTMwNEZcdTMwOTkKXHUzMDVEXHUzMDVGXHUzMDk5XHUzMDY2XHUzMDhCClx1MzA1RFx1MzA2NFx1MzA0NgpcdTMwNURcdTMwNjRcdTMwNDhcdTMwOTMKXHUzMDVEXHUzMDYzXHUzMDRCXHUzMDkzClx1MzA1RFx1MzA2NFx1MzA0RFx1MzA5OVx1MzA4N1x1MzA0NgpcdTMwNURcdTMwNjNcdTMwNTFcdTMwNjQKXHUzMDVEXHUzMDYzXHUzMDUzXHUzMDQ2Clx1MzA1RFx1MzA2M1x1MzA1Qlx1MzA5MwpcdTMwNURcdTMwNjNcdTMwNjgKXHUzMDVEXHUzMDY4XHUzMDRCXHUzMDk5XHUzMDhGClx1MzA1RFx1MzA2OFx1MzA2NFx1MzA5OVx1MzA4OQpcdTMwNURcdTMwNkFcdTMwNDhcdTMwOEIKXHUzMDVEXHUzMDZBXHUzMDVGClx1MzA1RFx1MzA3NVx1MzA3Qlx1MzA5OQpcdTMwNURcdTMwN0JcdTMwOTlcdTMwNEYKXHUzMDVEXHUzMDdCXHUzMDk5XHUzMDhEClx1MzA1RFx1MzA3RVx1MzA2NApcdTMwNURcdTMwN0VcdTMwOEIKXHUzMDVEXHUzMDgwXHUzMDRGClx1MzA1RFx1MzA4MFx1MzA4QVx1MzA0OApcdTMwNURcdTMwODFcdTMwOEIKXHUzMDVEXHUzMDgyXHUzMDVEXHUzMDgyClx1MzA1RFx1MzA4OFx1MzA0Qlx1MzA1Qlx1MzA5OQpcdTMwNURcdTMwODlcdTMwN0VcdTMwODEKXHUzMDVEXHUzMDhEXHUzMDQ2Clx1MzA1RFx1MzA5M1x1MzA0Qlx1MzA0NApcdTMwNURcdTMwOTNcdTMwNTFcdTMwNDQKXHUzMDVEXHUzMDkzXHUzMDU1XHUzMDk5XHUzMDQ0Clx1MzA1RFx1MzA5M1x1MzA1N1x1MzA2NApcdTMwNURcdTMwOTNcdTMwNURcdTMwOTlcdTMwNEYKXHUzMDVEXHUzMDkzXHUzMDYxXHUzMDg3XHUzMDQ2Clx1MzA1RFx1MzA5OVx1MzA5M1x1MzA3Mlx1MzA5OQpcdTMwNURcdTMwOTlcdTMwOTNcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDVEXHUzMDkzXHUzMDdGXHUzMDkzClx1MzA1Rlx1MzA0Mlx1MzA0NApcdTMwNUZcdTMwNDRcdTMwNDRcdTMwOTMKXHUzMDVGXHUzMDQ0XHUzMDQ2XHUzMDkzClx1MzA1Rlx1MzA0NFx1MzA0OFx1MzA0RApcdTMwNUZcdTMwNDRcdTMwNEFcdTMwNDYKXHUzMDVGXHUzMDk5XHUzMDQ0XHUzMDRCXHUzMDk5XHUzMDRGClx1MzA1Rlx1MzA0NFx1MzA0RApcdTMwNUZcdTMwNDRcdTMwNEZcdTMwOTlcdTMwNDYKXHUzMDVGXHUzMDQ0XHUzMDUxXHUzMDkzClx1MzA1Rlx1MzA0NFx1MzA1MwpcdTMwNUZcdTMwNDRcdTMwNTVcdTMwOTlcdTMwNDQKXHUzMDVGXHUzMDk5XHUzMDQ0XHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2XHUzMDc1XHUzMDk5Clx1MzA1Rlx1MzA5OVx1MzA0NFx1MzA1OVx1MzA0RApcdTMwNUZcdTMwNDRcdTMwNUJcdTMwNjQKXHUzMDVGXHUzMDQ0XHUzMDVEXHUzMDQ2Clx1MzA1Rlx1MzA5OVx1MzA0NFx1MzA1Rlx1MzA0NApcdTMwNUZcdTMwNDRcdTMwNjFcdTMwODdcdTMwNDYKXHUzMDVGXHUzMDQ0XHUzMDY2XHUzMDQ0Clx1MzA1Rlx1MzA5OVx1MzA0NFx1MzA2OFx1MzA5OVx1MzA1M1x1MzA4RApcdTMwNUZcdTMwNDRcdTMwNkFcdTMwNDQKXHUzMDVGXHUzMDQ0XHUzMDZEXHUzMDY0Clx1MzA1Rlx1MzA0NFx1MzA2RVx1MzA0NgpcdTMwNUZcdTMwNDRcdTMwNkZcdTMwOTMKXHUzMDVGXHUzMDk5XHUzMDQ0XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA1Rlx1MzA0NFx1MzA3NVx1MzA0NgpcdTMwNUZcdTMwNDRcdTMwNzhcdTMwOTMKXHUzMDVGXHUzMDQ0XHUzMDdCClx1MzA1Rlx1MzA0NFx1MzA3RVx1MzA2NFx1MzA2Rlx1MzA5OVx1MzA2QQpcdTMwNUZcdTMwNDRcdTMwN0ZcdTMwOTNcdTMwNEZcdTMwOTkKXHUzMDVGXHUzMDQ0XHUzMDgwClx1MzA1Rlx1MzA0NFx1MzA4MVx1MzA5MwpcdTMwNUZcdTMwNDRcdTMwODRcdTMwNEQKXHUzMDVGXHUzMDQ0XHUzMDg4XHUzMDQ2Clx1MzA1Rlx1MzA0NFx1MzA4OQpcdTMwNUZcdTMwNDRcdTMwOEFcdTMwODdcdTMwNEYKXHUzMDVGXHUzMDQ0XHUzMDhCClx1MzA1Rlx1MzA0NFx1MzA4Rlx1MzA5MwpcdTMwNUZcdTMwNDZcdTMwNDgKXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA1Rlx1MzA0QVx1MzA1OQpcdTMwNUZcdTMwNEFcdTMwOEIKXHUzMDVGXHUzMDRBXHUzMDhDXHUzMDhCClx1MzA1Rlx1MzA0Qlx1MzA0NApcdTMwNUZcdTMwNEJcdTMwNkQKXHUzMDVGXHUzMDREXHUzMDcyXHUzMDk5Clx1MzA1Rlx1MzA0Rlx1MzA1NVx1MzA5MwpcdTMwNUZcdTMwNTNcdTMwNEYKXHUzMDVGXHUzMDUzXHUzMDg0XHUzMDREClx1MzA1Rlx1MzA1NVx1MzA0NApcdTMwNUZcdTMwNTdcdTMwNTVcdTMwOTlcdTMwOTMKXHUzMDVGXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDgzXHUzMDhDClx1MzA1Rlx1MzA1OVx1MzA1MVx1MzA4QgpcdTMwNUZcdTMwNTlcdTMwOTlcdTMwNTVcdTMwOEZcdTMwOEIKXHUzMDVGXHUzMDVEXHUzMDRCXHUzMDk5XHUzMDhDClx1MzA1Rlx1MzA1Rlx1MzA0Qlx1MzA0NgpcdTMwNUZcdTMwNUZcdTMwNEYKXHUzMDVGXHUzMDVGXHUzMDk5XHUzMDU3XHUzMDQ0Clx1MzA1Rlx1MzA1Rlx1MzA3RgpcdTMwNUZcdTMwNjFcdTMwNkZcdTMwOTlcdTMwNkEKXHUzMDVGXHUzMDk5XHUzMDYzXHUzMDRCXHUzMDQ0Clx1MzA1Rlx1MzA5OVx1MzA2M1x1MzA0RFx1MzA4M1x1MzA0RgpcdTMwNUZcdTMwOTlcdTMwNjNcdTMwNTMKXHUzMDVGXHUzMDk5XHUzMDYzXHUzMDU3XHUzMDg1XHUzMDY0Clx1MzA1Rlx1MzA5OVx1MzA2M1x1MzA1Rlx1MzA0NApcdTMwNUZcdTMwNjZcdTMwOEIKXHUzMDVGXHUzMDY4XHUzMDQ4XHUzMDhCClx1MzA1Rlx1MzA2QVx1MzA2Rlx1MzA5OVx1MzA1RgpcdTMwNUZcdTMwNkJcdTMwOTMKXHUzMDVGXHUzMDZDXHUzMDREClx1MzA1Rlx1MzA2RVx1MzA1N1x1MzA3RgpcdTMwNUZcdTMwNkZcdTMwNjQKXHUzMDVGXHUzMDc1XHUzMDk5XHUzMDkzClx1MzA1Rlx1MzA3OFx1MzA5OVx1MzA4QgpcdTMwNUZcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDVGXHUzMDdFXHUzMDUzXHUzMDk5Clx1MzA1Rlx1MzA3RVx1MzA4QgpcdTMwNUZcdTMwOTlcdTMwODBcdTMwOEIKXHUzMDVGXHUzMDgxXHUzMDQ0XHUzMDREClx1MzA1Rlx1MzA4MVx1MzA1OQpcdTMwNUZcdTMwODFcdTMwOEIKXHUzMDVGXHUzMDgyXHUzMDY0Clx1MzA1Rlx1MzA4NFx1MzA1OVx1MzA0NApcdTMwNUZcdTMwODhcdTMwOEIKXHUzMDVGXHUzMDg5XHUzMDU5Clx1MzA1Rlx1MzA4QVx1MzA0RFx1MzA3Qlx1MzA5M1x1MzA0Qlx1MzA5OVx1MzA5MwpcdTMwNUZcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDVGXHUzMDhBXHUzMDhCClx1MzA1Rlx1MzA4Qlx1MzA2OApcdTMwNUZcdTMwOENcdTMwOEIKXHUzMDVGXHUzMDhDXHUzMDkzXHUzMDY4Clx1MzA1Rlx1MzA4RFx1MzA2M1x1MzA2OApcdTMwNUZcdTMwOEZcdTMwODBcdTMwOENcdTMwOEIKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDQyXHUzMDY0Clx1MzA1Rlx1MzA5M1x1MzA0NApcdTMwNUZcdTMwOTNcdTMwNEFcdTMwOTMKXHUzMDVGXHUzMDkzXHUzMDRCClx1MzA1Rlx1MzA5M1x1MzA0RApcdTMwNUZcdTMwOTNcdTMwNTFcdTMwOTMKXHUzMDVGXHUzMDkzXHUzMDUzXHUzMDk5Clx1MzA1Rlx1MzA5M1x1MzA1NVx1MzA5MwpcdTMwNUZcdTMwOTNcdTMwNTdcdTMwOTlcdTMwODdcdTMwNDZcdTMwNzJcdTMwOTkKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDVCXHUzMDQ0Clx1MzA1Rlx1MzA5M1x1MzA1RFx1MzA0RgpcdTMwNUZcdTMwOTNcdTMwNUZcdTMwNDQKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDYxClx1MzA1Rlx1MzA5M1x1MzA2Nlx1MzA0NApcdTMwNUZcdTMwOTNcdTMwNjhcdTMwNDYKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDZBClx1MzA1Rlx1MzA5M1x1MzA2Qlx1MzA5MwpcdTMwNUZcdTMwOTlcdTMwOTNcdTMwNkRcdTMwNjQKXHUzMDVGXHUzMDkzXHUzMDZFXHUzMDQ2Clx1MzA1Rlx1MzA5M1x1MzA3Mlx1MzA5QVx1MzA5MwpcdTMwNUZcdTMwOTlcdTMwOTNcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDVGXHUzMDkzXHUzMDdFXHUzMDY0Clx1MzA1Rlx1MzA5M1x1MzA4MVx1MzA0NApcdTMwNUZcdTMwOTlcdTMwOTNcdTMwOENcdTMwNjQKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDhEClx1MzA1Rlx1MzA5OVx1MzA5M1x1MzA4RgpcdTMwNjFcdTMwNDJcdTMwNDQKXHUzMDYxXHUzMDQyXHUzMDkzClx1MzA2MVx1MzA0NFx1MzA0RApcdTMwNjFcdTMwNDRcdTMwNTVcdTMwNDQKXHUzMDYxXHUzMDQ4XHUzMDkzClx1MzA2MVx1MzA0Qlx1MzA0NApcdTMwNjFcdTMwNEJcdTMwODkKXHUzMDYxXHUzMDREXHUzMDg1XHUzMDQ2Clx1MzA2MVx1MzA0RFx1MzA5MwpcdTMwNjFcdTMwNTFcdTMwNDRcdTMwNTlcdTMwOTkKXHUzMDYxXHUzMDUxXHUzMDkzClx1MzA2MVx1MzA1M1x1MzA0RgpcdTMwNjFcdTMwNTVcdTMwNDQKXHUzMDYxXHUzMDU3XHUzMDREClx1MzA2MVx1MzA1N1x1MzA4QVx1MzA4N1x1MzA0NgpcdTMwNjFcdTMwNUJcdTMwNDQKXHUzMDYxXHUzMDVEXHUzMDQ2Clx1MzA2MVx1MzA1Rlx1MzA0NApcdTMwNjFcdTMwNUZcdTMwOTMKXHUzMDYxXHUzMDYxXHUzMDRBXHUzMDg0Clx1MzA2MVx1MzA2NFx1MzA1N1x1MzA5OVx1MzA4NwpcdTMwNjFcdTMwNjZcdTMwNEQKXHUzMDYxXHUzMDY2XHUzMDkzClx1MzA2MVx1MzA2Q1x1MzA0RApcdTMwNjFcdTMwNkNcdTMwOEEKXHUzMDYxXHUzMDZFXHUzMDQ2Clx1MzA2MVx1MzA3Mlx1MzA4N1x1MzA0NgpcdTMwNjFcdTMwNzhcdTMwNDRcdTMwNUJcdTMwOTMKXHUzMDYxXHUzMDdCXHUzMDQ2Clx1MzA2MVx1MzA3RVx1MzA1RgpcdTMwNjFcdTMwN0ZcdTMwNjQKXHUzMDYxXHUzMDdGXHUzMDY4XHUzMDk5XHUzMDhEClx1MzA2MVx1MzA4MVx1MzA0NFx1MzA2OFx1MzA5OQpcdTMwNjFcdTMwODNcdTMwOTNcdTMwNTNcdTMwNkFcdTMwNzhcdTMwOTkKXHUzMDYxXHUzMDg1XHUzMDQ2XHUzMDQ0Clx1MzA2MVx1MzA4Nlx1MzA4QVx1MzA4N1x1MzA0RgpcdTMwNjFcdTMwODdcdTMwNDZcdTMwNTcKXHUzMDYxXHUzMDg3XHUzMDU1XHUzMDRGXHUzMDUxXHUzMDkzClx1MzA2MVx1MzA4OVx1MzA1NwpcdTMwNjFcdTMwODlcdTMwN0YKXHUzMDYxXHUzMDhBXHUzMDRCXHUzMDk5XHUzMDdGClx1MzA2MVx1MzA4QVx1MzA4N1x1MzA0NgpcdTMwNjFcdTMwOEJcdTMwNjhcdTMwOTkKXHUzMDYxXHUzMDhGXHUzMDhGClx1MzA2MVx1MzA5M1x1MzA1Rlx1MzA0NApcdTMwNjFcdTMwOTNcdTMwODJcdTMwNEYKXHUzMDY0XHUzMDQ0XHUzMDRCClx1MzA2NFx1MzA0NFx1MzA1Rlx1MzA2MQpcdTMwNjRcdTMwNDZcdTMwNEIKXHUzMDY0XHUzMDQ2XHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA2NFx1MzA0Nlx1MzA2Rlx1MzA5MwpcdTMwNjRcdTMwNDZcdTMwOEYKXHUzMDY0XHUzMDRCXHUzMDQ2Clx1MzA2NFx1MzA0Qlx1MzA4Q1x1MzA4QgpcdTMwNjRcdTMwNEZcdTMwNkQKXHUzMDY0XHUzMDRGXHUzMDhCClx1MzA2NFx1MzA1MVx1MzA2RApcdTMwNjRcdTMwNTFcdTMwOEIKXHUzMDY0XHUzMDUzXHUzMDk5XHUzMDQ2Clx1MzA2NFx1MzA1Rlx1MzA0OFx1MzA4QgpcdTMwNjRcdTMwNjRcdTMwOTlcdTMwNEYKXHUzMDY0XHUzMDY0XHUzMDU3XHUzMDk5Clx1MzA2NFx1MzA2NFx1MzA4MApcdTMwNjRcdTMwNjhcdTMwODFcdTMwOEIKXHUzMDY0XHUzMDZBXHUzMDRCXHUzMDk5XHUzMDhCClx1MzA2NFx1MzA2QVx1MzA3RgpcdTMwNjRcdTMwNkRcdTMwNjRcdTMwOTlcdTMwNkQKXHUzMDY0XHUzMDZFXHUzMDhCClx1MzA2NFx1MzA3NVx1MzA5OVx1MzA1OQpcdTMwNjRcdTMwN0VcdTMwODlcdTMwNkFcdTMwNDQKXHUzMDY0XHUzMDdFXHUzMDhCClx1MzA2NFx1MzA3Rlx1MzA0RApcdTMwNjRcdTMwODFcdTMwNUZcdTMwNDQKXHUzMDY0XHUzMDgyXHUzMDhBClx1MzA2NFx1MzA4Mlx1MzA4QgpcdTMwNjRcdTMwODhcdTMwNDQKXHUzMDY0XHUzMDhCXHUzMDdCXHUzMDk5Clx1MzA2NFx1MzA4Qlx1MzA3Rlx1MzA0RgpcdTMwNjRcdTMwOEZcdTMwODJcdTMwNkUKXHUzMDY0XHUzMDhGXHUzMDhBClx1MzA2Nlx1MzA0Mlx1MzA1NwpcdTMwNjZcdTMwNDJcdTMwNjYKXHUzMDY2XHUzMDQyXHUzMDdGClx1MzA2Nlx1MzA0NFx1MzA0QVx1MzA5MwpcdTMwNjZcdTMwNDRcdTMwNEIKXHUzMDY2XHUzMDQ0XHUzMDREClx1MzA2Nlx1MzA0NFx1MzA1MVx1MzA0NApcdTMwNjZcdTMwNDRcdTMwNTNcdTMwNEYKXHUzMDY2XHUzMDQ0XHUzMDU1XHUzMDY0Clx1MzA2Nlx1MzA0NFx1MzA1NwpcdTMwNjZcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDY2XHUzMDQ0XHUzMDVGXHUzMDQ0Clx1MzA2Nlx1MzA0NFx1MzA2OFx1MzA5OQpcdTMwNjZcdTMwNDRcdTMwNkRcdTMwNDQKXHUzMDY2XHUzMDQ0XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA2Nlx1MzA0NFx1MzA3OFx1MzA5MwpcdTMwNjZcdTMwNDRcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDY2XHUzMDQ2XHUzMDYxClx1MzA2Nlx1MzA0QVx1MzA0Rlx1MzA4QwpcdTMwNjZcdTMwNERcdTMwNjhcdTMwNDYKXHUzMDY2XHUzMDRGXHUzMDcyXHUzMDk5Clx1MzA2Nlx1MzA5OVx1MzA1M1x1MzA3Qlx1MzA5OVx1MzA1MwpcdTMwNjZcdTMwNTVcdTMwNERcdTMwOTlcdTMwODdcdTMwNDYKXHUzMDY2XHUzMDU1XHUzMDUxXHUzMDk5Clx1MzA2Nlx1MzA1OVx1MzA4QQpcdTMwNjZcdTMwNURcdTMwNDYKXHUzMDY2XHUzMDYxXHUzMDRCXHUzMDk5XHUzMDQ0Clx1MzA2Nlx1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNjZcdTMwNjRcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDY2XHUzMDY0XHUzMDY0XHUzMDk5XHUzMDREClx1MzA2Nlx1MzA5OVx1MzA2M1x1MzA2Rlx1MzA5QQpcdTMwNjZcdTMwNjRcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDY2XHUzMDY0XHUzMDg0Clx1MzA2Nlx1MzA5OVx1MzA2Q1x1MzA0Qlx1MzA0OApcdTMwNjZcdTMwNkNcdTMwNEQKXHUzMDY2XHUzMDZDXHUzMDRGXHUzMDk5XHUzMDQ0Clx1MzA2Nlx1MzA2RVx1MzA3Mlx1MzA4OQpcdTMwNjZcdTMwNkZcdTMwNDQKXHUzMDY2XHUzMDc1XHUzMDk5XHUzMDRGXHUzMDhEClx1MzA2Nlx1MzA3NVx1MzA1Rlx1MzA5OQpcdTMwNjZcdTMwN0JcdTMwNjhcdTMwOTlcdTMwNEQKXHUzMDY2XHUzMDdCXHUzMDkzClx1MzA2Nlx1MzA3RVx1MzA0OApcdTMwNjZcdTMwN0VcdTMwNERcdTMwNTlcdTMwOTlcdTMwNTcKXHUzMDY2XHUzMDdGXHUzMDU3XHUzMDk5XHUzMDRCClx1MzA2Nlx1MzA3Rlx1MzA4NFx1MzA1MVx1MzA5OQpcdTMwNjZcdTMwODlcdTMwNTkKXHUzMDY2XHUzMDhDXHUzMDcyXHUzMDk5Clx1MzA2Nlx1MzA4Rlx1MzA1MQpcdTMwNjZcdTMwOEZcdTMwNUZcdTMwNTcKXHUzMDY2XHUzMDk5XHUzMDkzXHUzMDQyXHUzMDY0Clx1MzA2Nlx1MzA5M1x1MzA0NFx1MzA5MwpcdTMwNjZcdTMwOTNcdTMwNEJcdTMwNDQKXHUzMDY2XHUzMDkzXHUzMDREClx1MzA2Nlx1MzA5M1x1MzA0Rlx1MzA5OQpcdTMwNjZcdTMwOTNcdTMwNTFcdTMwOTMKXHUzMDY2XHUzMDkzXHUzMDUzXHUzMDk5XHUzMDRGClx1MzA2Nlx1MzA5M1x1MzA1NVx1MzA0NApcdTMwNjZcdTMwOTNcdTMwNTcKXHUzMDY2XHUzMDkzXHUzMDU5XHUzMDQ2Clx1MzA2Nlx1MzA5OVx1MzA5M1x1MzA2MQpcdTMwNjZcdTMwOTNcdTMwNjZcdTMwNEQKXHUzMDY2XHUzMDkzXHUzMDY4XHUzMDQ2Clx1MzA2Nlx1MzA5M1x1MzA2QVx1MzA0NApcdTMwNjZcdTMwOTNcdTMwNzVcdTMwOUFcdTMwODkKXHUzMDY2XHUzMDkzXHUzMDdCXHUzMDk5XHUzMDQ2XHUzMDVGXHUzMDk5XHUzMDQ0Clx1MzA2Nlx1MzA5M1x1MzA4MVx1MzA2NApcdTMwNjZcdTMwOTNcdTMwODlcdTMwOTNcdTMwNEJcdTMwNDQKXHUzMDY2XHUzMDk5XHUzMDkzXHUzMDhBXHUzMDg3XHUzMDRGClx1MzA2Nlx1MzA5OVx1MzA5M1x1MzA4RgpcdTMwNjhcdTMwOTlcdTMwNDJcdTMwNDQKXHUzMDY4XHUzMDQ0XHUzMDhDClx1MzA2OFx1MzA5OVx1MzA0Nlx1MzA0Qlx1MzA5MwpcdTMwNjhcdTMwNDZcdTMwNERcdTMwODVcdTMwNDYKXHUzMDY4XHUzMDk5XHUzMDQ2XHUzMDRGXHUzMDk5Clx1MzA2OFx1MzA0Nlx1MzA1NwpcdTMwNjhcdTMwNDZcdTMwODBcdTMwNERcdTMwOTkKXHUzMDY4XHUzMDRBXHUzMDQ0Clx1MzA2OFx1MzA0QVx1MzA0QgpcdTMwNjhcdTMwNEFcdTMwNEYKXHUzMDY4XHUzMDRBXHUzMDU5Clx1MzA2OFx1MzA0QVx1MzA4QgpcdTMwNjhcdTMwNEJcdTMwNDQKXHUzMDY4XHUzMDRCXHUzMDU5Clx1MzA2OFx1MzA0RFx1MzA0QVx1MzA4QQpcdTMwNjhcdTMwNERcdTMwNjhcdTMwOTlcdTMwNEQKXHUzMDY4XHUzMDRGXHUzMDQ0Clx1MzA2OFx1MzA0Rlx1MzA1N1x1MzA4NVx1MzA0NgpcdTMwNjhcdTMwNEZcdTMwNjZcdTMwOTMKXHUzMDY4XHUzMDRGXHUzMDZCClx1MzA2OFx1MzA0Rlx1MzA3OFx1MzA5OVx1MzA2NApcdTMwNjhcdTMwNTFcdTMwNDQKXHUzMDY4XHUzMDUxXHUzMDhCClx1MzA2OFx1MzA1M1x1MzA4NApcdTMwNjhcdTMwNTVcdTMwNEIKXHUzMDY4XHUzMDU3XHUzMDg3XHUzMDRCXHUzMDkzClx1MzA2OFx1MzA1RFx1MzA0NgpcdTMwNjhcdTMwNUZcdTMwOTMKXHUzMDY4XHUzMDYxXHUzMDg1XHUzMDQ2Clx1MzA2OFx1MzA2M1x1MzA0RFx1MzA4NVx1MzA0NgpcdTMwNjhcdTMwNjNcdTMwNEZcdTMwOTMKXHUzMDY4XHUzMDY0XHUzMDVCXHUzMDk5XHUzMDkzClx1MzA2OFx1MzA2NFx1MzA2Qlx1MzA4NVx1MzA0NgpcdTMwNjhcdTMwNjhcdTMwOTlcdTMwNTFcdTMwOEIKXHUzMDY4XHUzMDY4XHUzMDZFXHUzMDQ4XHUzMDhCClx1MzA2OFx1MzA2QVx1MzA0NApcdTMwNjhcdTMwNkFcdTMwNDhcdTMwOEIKXHUzMDY4XHUzMDZBXHUzMDhBClx1MzA2OFx1MzA2RVx1MzA1NVx1MzA3RQpcdTMwNjhcdTMwNkZcdTMwOTlcdTMwNTkKXHUzMDY4XHUzMDk5XHUzMDc1XHUzMDk5XHUzMDRCXHUzMDk5XHUzMDhGClx1MzA2OFx1MzA3Qlx1MzA0NgpcdTMwNjhcdTMwN0VcdTMwOEIKXHUzMDY4XHUzMDgxXHUzMDhCClx1MzA2OFx1MzA4Mlx1MzA1Rlx1MzA5OVx1MzA2MQpcdTMwNjhcdTMwODJcdTMwOEIKXHUzMDY4XHUzMDk5XHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA2OFx1MzA4OVx1MzA0OFx1MzA4QgpcdTMwNjhcdTMwOTNcdTMwNEJcdTMwNjQKXHUzMDY4XHUzMDk5XHUzMDkzXHUzMDc1XHUzMDk5XHUzMDhBClx1MzA2QVx1MzA0NFx1MzA0Qlx1MzA0RgpcdTMwNkFcdTMwNDRcdTMwNTNcdTMwNDYKXHUzMDZBXHUzMDQ0XHUzMDU3XHUzMDg3Clx1MzA2QVx1MzA0NFx1MzA1OQpcdTMwNkFcdTMwNDRcdTMwNUJcdTMwOTMKXHUzMDZBXHUzMDQ0XHUzMDVEXHUzMDQ2Clx1MzA2QVx1MzA0QVx1MzA1OQpcdTMwNkFcdTMwNEJcdTMwOTlcdTMwNDQKXHUzMDZBXHUzMDRGXHUzMDU5Clx1MzA2QVx1MzA1MVx1MzA5OVx1MzA4QgpcdTMwNkFcdTMwNTNcdTMwNDZcdTMwNjhcdTMwOTkKXHUzMDZBXHUzMDU1XHUzMDUxClx1MzA2QVx1MzA1Rlx1MzA2Nlx1MzA5OVx1MzA1M1x1MzA1MwpcdTMwNkFcdTMwNjNcdTMwNjhcdTMwNDYKXHUzMDZBXHUzMDY0XHUzMDg0XHUzMDU5XHUzMDdGClx1MzA2QVx1MzA2QVx1MzA0QVx1MzA1NwpcdTMwNkFcdTMwNkJcdTMwNTNcdTMwOTlcdTMwNjgKXHUzMDZBXHUzMDZCXHUzMDgyXHUzMDZFClx1MzA2QVx1MzA2Qlx1MzA4RgpcdTMwNkFcdTMwNkVcdTMwNEIKXHUzMDZBXHUzMDc1XHUzMDVGXHUzMDk5Clx1MzA2QVx1MzA3RVx1MzA0NFx1MzA0RApcdTMwNkFcdTMwN0VcdTMwNDgKXHUzMDZBXHUzMDdFXHUzMDdGClx1MzA2QVx1MzA3Rlx1MzA1Rlx1MzA5OQpcdTMwNkFcdTMwODFcdTMwODlcdTMwNEIKXHUzMDZBXHUzMDgxXHUzMDhCClx1MzA2QVx1MzA4NFx1MzA4MApcdTMwNkFcdTMwODlcdTMwNDYKXHUzMDZBXHUzMDg5XHUzMDcyXHUzMDk5Clx1MzA2QVx1MzA4OVx1MzA3NVx1MzA5OQpcdTMwNkFcdTMwOENcdTMwOEIKXHUzMDZBXHUzMDhGXHUzMDY4XHUzMDcyXHUzMDk5Clx1MzA2QVx1MzA4Rlx1MzA2Rlx1MzA5OVx1MzA4QQpcdTMwNkJcdTMwNDJcdTMwNDYKXHUzMDZCXHUzMDQ0XHUzMDRCXHUzMDk5XHUzMDVGClx1MzA2Qlx1MzA0Nlx1MzA1MQpcdTMwNkJcdTMwNEFcdTMwNDQKXHUzMDZCXHUzMDRCXHUzMDQ0Clx1MzA2Qlx1MzA0Qlx1MzA5OVx1MzA2NgpcdTMwNkJcdTMwNERcdTMwNzJcdTMwOTkKXHUzMDZCXHUzMDRGXHUzMDU3XHUzMDdGClx1MzA2Qlx1MzA0Rlx1MzA3RVx1MzA5MwpcdTMwNkJcdTMwNTFcdTMwOTlcdTMwOEIKXHUzMDZCXHUzMDU1XHUzMDkzXHUzMDRCXHUzMDVGXHUzMDkzXHUzMDVEClx1MzA2Qlx1MzA1N1x1MzA0RApcdTMwNkJcdTMwNUJcdTMwODJcdTMwNkUKXHUzMDZCXHUzMDYxXHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA2Qlx1MzA2MVx1MzA4OFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNkJcdTMwNjNcdTMwNEIKXHUzMDZCXHUzMDYzXHUzMDREClx1MzA2Qlx1MzA2M1x1MzA1MVx1MzA0NApcdTMwNkJcdTMwNjNcdTMwNTNcdTMwNDYKXHUzMDZCXHUzMDYzXHUzMDU1XHUzMDkzClx1MzA2Qlx1MzA2M1x1MzA1N1x1MzA4N1x1MzA0RgpcdTMwNkJcdTMwNjNcdTMwNTlcdTMwNDYKXHUzMDZCXHUzMDYzXHUzMDVCXHUzMDREClx1MzA2Qlx1MzA2M1x1MzA2Nlx1MzA0NApcdTMwNkJcdTMwNkFcdTMwNDYKXHUzMDZCXHUzMDdCXHUzMDkzClx1MzA2Qlx1MzA3RVx1MzA4MQpcdTMwNkJcdTMwODJcdTMwNjQKXHUzMDZCXHUzMDg0XHUzMDhBClx1MzA2Qlx1MzA4NVx1MzA0Nlx1MzA0NFx1MzA5MwpcdTMwNkJcdTMwOEFcdTMwOTNcdTMwNTdcdTMwODMKXHUzMDZCXHUzMDhGXHUzMDY4XHUzMDhBClx1MzA2Qlx1MzA5M1x1MzA0NApcdTMwNkJcdTMwOTNcdTMwNEIKXHUzMDZCXHUzMDkzXHUzMDREClx1MzA2Qlx1MzA5M1x1MzA1MVx1MzA5OVx1MzA5MwpcdTMwNkJcdTMwOTNcdTMwNTdcdTMwNEQKXHUzMDZCXHUzMDkzXHUzMDU5XHUzMDk5XHUzMDQ2Clx1MzA2Qlx1MzA5M1x1MzA1RFx1MzA0NgpcdTMwNkJcdTMwOTNcdTMwNUZcdTMwNDQKXHUzMDZCXHUzMDkzXHUzMDYxClx1MzA2Qlx1MzA5M1x1MzA2Nlx1MzA0NApcdTMwNkJcdTMwOTNcdTMwNkJcdTMwNEYKXHUzMDZCXHUzMDkzXHUzMDc1XHUzMDlBClx1MzA2Qlx1MzA5M1x1MzA3RVx1MzA4QQpcdTMwNkJcdTMwOTNcdTMwODAKXHUzMDZCXHUzMDkzXHUzMDgxXHUzMDQ0Clx1MzA2Qlx1MzA5M1x1MzA4OFx1MzA0NgpcdTMwNkNcdTMwNDRcdTMwNEZcdTMwNERcdTMwOTkKXHUzMDZDXHUzMDRCXHUzMDU5Clx1MzA2Q1x1MzA0Rlx1MzA5OVx1MzA0NFx1MzA2OFx1MzA4QgpcdTMwNkNcdTMwNEZcdTMwOTlcdTMwNDYKXHUzMDZDXHUzMDRGXHUzMDgyXHUzMDhBClx1MzA2Q1x1MzA1OVx1MzA4MApcdTMwNkNcdTMwN0VcdTMwNDhcdTMwNzJcdTMwOTkKXHUzMDZDXHUzMDgxXHUzMDhBClx1MzA2Q1x1MzA4OVx1MzA1OQpcdTMwNkNcdTMwOTNcdTMwNjFcdTMwODNcdTMwNEYKXHUzMDZEXHUzMDQyXHUzMDUxXHUzMDk5Clx1MzA2RFx1MzA0NFx1MzA0RApcdTMwNkRcdTMwNDRcdTMwOEIKXHUzMDZEXHUzMDQ0XHUzMDhEClx1MzA2RFx1MzA0Rlx1MzA5OVx1MzA1QgpcdTMwNkRcdTMwNEZcdTMwNUZcdTMwNDQKXHUzMDZEXHUzMDRGXHUzMDg5Clx1MzA2RFx1MzA1M1x1MzA1Qlx1MzA5OQpcdTMwNkRcdTMwNTNcdTMwODAKXHUzMDZEXHUzMDU1XHUzMDUxXHUzMDk5Clx1MzA2RFx1MzA1OVx1MzA1M1x1MzA5OVx1MzA1OQpcdTMwNkRcdTMwNURcdTMwNzhcdTMwOTlcdTMwOEIKXHUzMDZEXHUzMDVGXHUzMDk5XHUzMDkzClx1MzA2RFx1MzA2NFx1MzA0NApcdTMwNkRcdTMwNjNcdTMwNTdcdTMwOTMKXHUzMDZEXHUzMDY0XHUzMDVEXHUzMDk5XHUzMDQ2Clx1MzA2RFx1MzA2M1x1MzA1Rlx1MzA0NFx1MzA0RFx1MzA5OVx1MzA4NwpcdTMwNkRcdTMwNzVcdTMwOTlcdTMwNURcdTMwNEYKXHUzMDZEXHUzMDc1XHUzMDVGXHUzMDk5Clx1MzA2RFx1MzA3Qlx1MzA5OVx1MzA0NgpcdTMwNkRcdTMwN0JcdTMwOEFcdTMwNkZcdTMwN0JcdTMwOEEKXHUzMDZEXHUzMDdFXHUzMDREClx1MzA2RFx1MzA3RVx1MzA4Rlx1MzA1NwpcdTMwNkRcdTMwN0ZcdTMwN0YKXHUzMDZEXHUzMDgwXHUzMDQ0Clx1MzA2RFx1MzA4MFx1MzA1Rlx1MzA0NApcdTMwNkRcdTMwODJcdTMwNjgKXHUzMDZEXHUzMDg5XHUzMDQ2Clx1MzA2RFx1MzA4Rlx1MzA1NVx1MzA5OQpcdTMwNkRcdTMwOTNcdTMwNDRcdTMwOEEKXHUzMDZEXHUzMDkzXHUzMDRBXHUzMDU3Clx1MzA2RFx1MzA5M1x1MzA0Qlx1MzA5MwpcdTMwNkRcdTMwOTNcdTMwNERcdTMwOTMKXHUzMDZEXHUzMDkzXHUzMDRGXHUzMDk5Clx1MzA2RFx1MzA5M1x1MzA1NVx1MzA5OQpcdTMwNkRcdTMwOTNcdTMwNTcKXHUzMDZEXHUzMDkzXHUzMDYxXHUzMDgzXHUzMDRGClx1MzA2RFx1MzA5M1x1MzA2OFx1MzA5OQpcdTMwNkRcdTMwOTNcdTMwNzJcdTMwOUEKXHUzMDZEXHUzMDkzXHUzMDc1XHUzMDk5XHUzMDY0Clx1MzA2RFx1MzA5M1x1MzA3RVx1MzA2NApcdTMwNkRcdTMwOTNcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDZEXHUzMDkzXHUzMDhDXHUzMDQ0Clx1MzA2RVx1MzA0NFx1MzA1OVx1MzA5OQpcdTMwNkVcdTMwNEFcdTMwNjRcdTMwOTlcdTMwN0UKXHUzMDZFXHUzMDRCXHUzMDk5XHUzMDU5Clx1MzA2RVx1MzA0RFx1MzA2QVx1MzA3RgpcdTMwNkVcdTMwNTNcdTMwNERcdTMwOTlcdTMwOEEKXHUzMDZFXHUzMDUzXHUzMDU5Clx1MzA2RVx1MzA1M1x1MzA4QgpcdTMwNkVcdTMwNUJcdTMwOEIKXHUzMDZFXHUzMDVEXHUzMDk5XHUzMDRGClx1MzA2RVx1MzA1RFx1MzA5OVx1MzA4MApcdTMwNkVcdTMwNUZcdTMwN0VcdTMwNDYKXHUzMDZFXHUzMDYxXHUzMDdCXHUzMDY4XHUzMDk5Clx1MzA2RVx1MzA2M1x1MzA0RgpcdTMwNkVcdTMwNkZcdTMwOTlcdTMwNTkKXHUzMDZFXHUzMDZGXHUzMDg5Clx1MzA2RVx1MzA3OFx1MzA5OVx1MzA4QgpcdTMwNkVcdTMwN0JcdTMwOTlcdTMwOEIKXHUzMDZFXHUzMDdGXHUzMDgyXHUzMDZFClx1MzA2RVx1MzA4NFx1MzA3RQpcdTMwNkVcdTMwODlcdTMwNDRcdTMwNkMKXHUzMDZFXHUzMDg5XHUzMDZEXHUzMDUzClx1MzA2RVx1MzA4QVx1MzA4Mlx1MzA2RQpcdTMwNkVcdTMwOEFcdTMwODZcdTMwNEQKXHUzMDZFXHUzMDhDXHUzMDkzClx1MzA2RVx1MzA5M1x1MzA0RApcdTMwNkZcdTMwOTlcdTMwNDJcdTMwNDQKXHUzMDZGXHUzMDQyXHUzMDRGClx1MzA2Rlx1MzA5OVx1MzA0Mlx1MzA1NVx1MzA5MwpcdTMwNkZcdTMwOTlcdTMwNDRcdTMwNEIKXHUzMDZGXHUzMDk5XHUzMDQ0XHUzMDRGClx1MzA2Rlx1MzA0NFx1MzA1MVx1MzA5MwpcdTMwNkZcdTMwNDRcdTMwNTNcdTMwOTkKXHUzMDZGXHUzMDQ0XHUzMDU3XHUzMDkzClx1MzA2Rlx1MzA0NFx1MzA1OVx1MzA0NApcdTMwNkZcdTMwNDRcdTMwNUJcdTMwOTMKXHUzMDZGXHUzMDQ0XHUzMDVEXHUzMDQ2Clx1MzA2Rlx1MzA0NFx1MzA2MQpcdTMwNkZcdTMwOTlcdTMwNDRcdTMwNkZcdTMwOTlcdTMwNDQKXHUzMDZGXHUzMDQ0XHUzMDhDXHUzMDY0Clx1MzA2Rlx1MzA0OFx1MzA4QgpcdTMwNkZcdTMwNEFcdTMwOEIKXHUzMDZGXHUzMDRCXHUzMDQ0Clx1MzA2Rlx1MzA5OVx1MzA0Qlx1MzA4QQpcdTMwNkZcdTMwNEJcdTMwOEIKXHUzMDZGXHUzMDRGXHUzMDU3XHUzMDg1Clx1MzA2Rlx1MzA1MVx1MzA5MwpcdTMwNkZcdTMwNTNcdTMwNzVcdTMwOTkKXHUzMDZGXHUzMDU1XHUzMDdGClx1MzA2Rlx1MzA1NVx1MzA5MwpcdTMwNkZcdTMwNTdcdTMwNTNcdTMwOTkKXHUzMDZGXHUzMDk5XHUzMDU3XHUzMDg3Clx1MzA2Rlx1MzA1N1x1MzA4QgpcdTMwNkZcdTMwNUJcdTMwOEIKXHUzMDZGXHUzMDlBXHUzMDVEXHUzMDUzXHUzMDkzClx1MzA2Rlx1MzA1RFx1MzA5MwpcdTMwNkZcdTMwNUZcdTMwOTMKXHUzMDZGXHUzMDYxXHUzMDdGXHUzMDY0Clx1MzA2Rlx1MzA2NFx1MzA0QVx1MzA5MwpcdTMwNkZcdTMwNjNcdTMwNEJcdTMwNEYKXHUzMDZGXHUzMDY0XHUzMDk5XHUzMDREClx1MzA2Rlx1MzA2M1x1MzA0RFx1MzA4QQpcdTMwNkZcdTMwNjNcdTMwNEZcdTMwNjQKXHUzMDZGXHUzMDYzXHUzMDUxXHUzMDkzClx1MzA2Rlx1MzA2M1x1MzA1M1x1MzA0NgpcdTMwNkZcdTMwNjNcdTMwNTVcdTMwOTMKXHUzMDZGXHUzMDYzXHUzMDU3XHUzMDkzClx1MzA2Rlx1MzA2M1x1MzA1Rlx1MzA2NApcdTMwNkZcdTMwNjNcdTMwNjFcdTMwODVcdTMwNDYKXHUzMDZGXHUzMDYzXHUzMDY2XHUzMDkzClx1MzA2Rlx1MzA2M1x1MzA3Mlx1MzA5QVx1MzA4N1x1MzA0NgpcdTMwNkZcdTMwNjNcdTMwN0JcdTMwOUFcdTMwNDYKXHUzMDZGXHUzMDZBXHUzMDU5Clx1MzA2Rlx1MzA2QVx1MzA3Mlx1MzA5OQpcdTMwNkZcdTMwNkJcdTMwNEJcdTMwODAKXHUzMDZGXHUzMDc1XHUzMDk5XHUzMDg5XHUzMDU3Clx1MzA2Rlx1MzA3Rlx1MzA0Qlx1MzA5OVx1MzA0RApcdTMwNkZcdTMwODBcdTMwNEJcdTMwNDYKXHUzMDZGXHUzMDgxXHUzMDY0Clx1MzA2Rlx1MzA4NFx1MzA0NApcdTMwNkZcdTMwODRcdTMwNTcKXHUzMDZGXHUzMDg5XHUzMDQ2Clx1MzA2Rlx1MzA4RFx1MzA0Nlx1MzA0M1x1MzA5MwpcdTMwNkZcdTMwOEZcdTMwNDQKXHUzMDZGXHUzMDkzXHUzMDQ0Clx1MzA2Rlx1MzA5M1x1MzA0OFx1MzA0NApcdTMwNkZcdTMwOTNcdTMwNEFcdTMwOTMKXHUzMDZGXHUzMDkzXHUzMDRCXHUzMDRGClx1MzA2Rlx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0NgpcdTMwNkZcdTMwOTlcdTMwOTNcdTMwNEZcdTMwOTlcdTMwN0YKXHUzMDZGXHUzMDkzXHUzMDUzClx1MzA2Rlx1MzA5M1x1MzA1N1x1MzA4MwpcdTMwNkZcdTMwOTNcdTMwNTlcdTMwNDYKXHUzMDZGXHUzMDkzXHUzMDVGXHUzMDk5XHUzMDkzClx1MzA2Rlx1MzA5QVx1MzA5M1x1MzA2MQpcdTMwNkZcdTMwOUFcdTMwOTNcdTMwNjQKXHUzMDZGXHUzMDkzXHUzMDY2XHUzMDQ0Clx1MzA2Rlx1MzA5M1x1MzA2OFx1MzA1NwpcdTMwNkZcdTMwOTNcdTMwNkVcdTMwNDYKXHUzMDZGXHUzMDkzXHUzMDZGXHUzMDlBClx1MzA2Rlx1MzA5M1x1MzA3NVx1MzA5OVx1MzA5MwpcdTMwNkZcdTMwOTNcdTMwNzhcdTMwOUFcdTMwOTMKXHUzMDZGXHUzMDkzXHUzMDdCXHUzMDk5XHUzMDQ2XHUzMDREClx1MzA2Rlx1MzA5M1x1MzA4MVx1MzA0NApcdTMwNkZcdTMwOTNcdTMwODlcdTMwOTMKXHUzMDZGXHUzMDkzXHUzMDhEXHUzMDkzClx1MzA3Mlx1MzA0NFx1MzA0RApcdTMwNzJcdTMwNDZcdTMwOTMKXHUzMDcyXHUzMDQ4XHUzMDhCClx1MzA3Mlx1MzA0Qlx1MzA0RgpcdTMwNzJcdTMwNEJcdTMwOEEKXHUzMDcyXHUzMDRCXHUzMDhCClx1MzA3Mlx1MzA0Qlx1MzA5MwpcdTMwNzJcdTMwNEZcdTMwNDQKXHUzMDcyXHUzMDUxXHUzMDY0Clx1MzA3Mlx1MzA1M1x1MzA0Nlx1MzA0RApcdTMwNzJcdTMwNTNcdTMwNEYKXHUzMDcyXHUzMDU1XHUzMDQ0Clx1MzA3Mlx1MzA1NVx1MzA1N1x1MzA3NVx1MzA5OVx1MzA4QQpcdTMwNzJcdTMwNTVcdTMwOTMKXHUzMDcyXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDg1XHUzMDY0XHUzMDRCXHUzMDkzClx1MzA3Mlx1MzA1N1x1MzA4NwpcdTMwNzJcdTMwNURcdTMwNEIKXHUzMDcyXHUzMDVEXHUzMDgwClx1MzA3Mlx1MzA1Rlx1MzA4MFx1MzA0RApcdTMwNzJcdTMwNUZcdTMwOTlcdTMwOEEKXHUzMDcyXHUzMDVGXHUzMDhCClx1MzA3Mlx1MzA2NFx1MzA0RFx1MzA5OQpcdTMwNzJcdTMwNjNcdTMwNTNcdTMwNTcKXHUzMDcyXHUzMDYzXHUzMDU3Clx1MzA3Mlx1MzA2NFx1MzA1N1x1MzA5OVx1MzA4NVx1MzA3Mlx1MzA5MwpcdTMwNzJcdTMwNjNcdTMwNTkKXHUzMDcyXHUzMDY0XHUzMDVCXHUzMDk5XHUzMDkzClx1MzA3Mlx1MzA5QVx1MzA2M1x1MzA1Rlx1MzA4QQpcdTMwNzJcdTMwOUFcdTMwNjNcdTMwNjFcdTMwOEEKXHUzMDcyXHUzMDY0XHUzMDg4XHUzMDQ2Clx1MzA3Mlx1MzA2Nlx1MzA0NApcdTMwNzJcdTMwNjhcdTMwNTNcdTMwOTlcdTMwN0YKXHUzMDcyXHUzMDZBXHUzMDdFXHUzMDY0XHUzMDhBClx1MzA3Mlx1MzA2QVx1MzA5MwpcdTMwNzJcdTMwNkRcdTMwOEIKXHUzMDcyXHUzMDZGXHUzMDkzClx1MzA3Mlx1MzA3Mlx1MzA5OVx1MzA0RgpcdTMwNzJcdTMwNzJcdTMwODdcdTMwNDYKXHUzMDcyXHUzMDdCXHUzMDQ2Clx1MzA3Mlx1MzA3RVx1MzA4Rlx1MzA4QQpcdTMwNzJcdTMwN0VcdTMwOTMKXHUzMDcyXHUzMDdGXHUzMDY0Clx1MzA3Mlx1MzA4MVx1MzA0NApcdTMwNzJcdTMwODFcdTMwNTdcdTMwOTlcdTMwNTcKXHUzMDcyXHUzMDg0XHUzMDUxClx1MzA3Mlx1MzA4NFx1MzA1OQpcdTMwNzJcdTMwODhcdTMwNDYKXHUzMDcyXHUzMDk5XHUzMDg3XHUzMDQ2XHUzMDREClx1MzA3Mlx1MzA4OVx1MzA0Qlx1MzA5OVx1MzA2QQpcdTMwNzJcdTMwODlcdTMwNEYKXHUzMDcyXHUzMDhBXHUzMDY0Clx1MzA3Mlx1MzA4QVx1MzA4N1x1MzA0NgpcdTMwNzJcdTMwOEJcdTMwN0UKXHUzMDcyXHUzMDhCXHUzMDg0XHUzMDU5XHUzMDdGClx1MzA3Mlx1MzA4Q1x1MzA0NApcdTMwNzJcdTMwOERcdTMwNDQKXHUzMDcyXHUzMDhEXHUzMDQ2Clx1MzA3Mlx1MzA4RFx1MzA0RApcdTMwNzJcdTMwOERcdTMwODZcdTMwNEQKXHUzMDcyXHUzMDkzXHUzMDRCXHUzMDRGClx1MzA3Mlx1MzA5M1x1MzA1MVx1MzA2NApcdTMwNzJcdTMwOTNcdTMwNTNcdTMwOTMKXHUzMDcyXHUzMDkzXHUzMDU3XHUzMDg1Clx1MzA3Mlx1MzA5M1x1MzA1RFx1MzA0NgpcdTMwNzJcdTMwOUFcdTMwOTNcdTMwNjEKXHUzMDcyXHUzMDkzXHUzMDZGXHUzMDlBXHUzMDkzClx1MzA3Mlx1MzA5OVx1MzA5M1x1MzA3Qlx1MzA5OVx1MzA0NgpcdTMwNzVcdTMwNDJcdTMwOTMKXHUzMDc1XHUzMDQ0XHUzMDQ2XHUzMDYxClx1MzA3NVx1MzA0Nlx1MzA1MVx1MzA0NApcdTMwNzVcdTMwNDZcdTMwNUJcdTMwOTMKXHUzMDc1XHUzMDlBXHUzMDQ2XHUzMDVGXHUzMDhEXHUzMDQ2Clx1MzA3NVx1MzA0Nlx1MzA2OFx1MzA0NgpcdTMwNzVcdTMwNDZcdTMwNzUKXHUzMDc1XHUzMDQ4XHUzMDhCClx1MzA3NVx1MzA0QVx1MzA5MwpcdTMwNzVcdTMwNEJcdTMwNDQKXHUzMDc1XHUzMDREXHUzMDkzClx1MzA3NVx1MzA0Rlx1MzA1NVx1MzA5OVx1MzA2NApcdTMwNzVcdTMwNEZcdTMwNzVcdTMwOTlcdTMwNEZcdTMwOEQKXHUzMDc1XHUzMDUzXHUzMDQ2Clx1MzA3NVx1MzA1NVx1MzA0NApcdTMwNzVcdTMwNTdcdTMwNERcdTMwOTkKXHUzMDc1XHUzMDU3XHUzMDk5XHUzMDdGClx1MzA3NVx1MzA1OVx1MzA3RQpcdTMwNzVcdTMwNUJcdTMwNDQKXHUzMDc1XHUzMDVCXHUzMDRGXHUzMDk5Clx1MzA3NVx1MzA1RFx1MzA0RgpcdTMwNzVcdTMwOTlcdTMwNUZcdTMwNkJcdTMwNEYKXHUzMDc1XHUzMDVGXHUzMDkzClx1MzA3NVx1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNzVcdTMwNjRcdTMwNDYKXHUzMDc1XHUzMDY0XHUzMDRCClx1MzA3NVx1MzA2M1x1MzA0Qlx1MzA2NApcdTMwNzVcdTMwNjNcdTMwNEQKXHUzMDc1XHUzMDYzXHUzMDUzXHUzMDRGClx1MzA3NVx1MzA5OVx1MzA2OFx1MzA5OVx1MzA0NgpcdTMwNzVcdTMwNjhcdTMwOEIKXHUzMDc1XHUzMDY4XHUzMDkzClx1MzA3NVx1MzA2RVx1MzA0NgpcdTMwNzVcdTMwNkZcdTMwNDQKXHUzMDc1XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA3NVx1MzA3OFx1MzA5MwpcdTMwNzVcdTMwN0VcdTMwOTMKXHUzMDc1XHUzMDdGXHUzMDkzClx1MzA3NVx1MzA4MVx1MzA2NApcdTMwNzVcdTMwODFcdTMwOTMKXHUzMDc1XHUzMDg4XHUzMDQ2Clx1MzA3NVx1MzA4QVx1MzA1MwpcdTMwNzVcdTMwOEFcdTMwOEIKXHUzMDc1XHUzMDhCXHUzMDQ0Clx1MzA3NVx1MzA5M1x1MzA0NFx1MzA0RApcdTMwNzVcdTMwOTlcdTMwOTNcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDc1XHUzMDk5XHUzMDkzXHUzMDRGXHUzMDk5Clx1MzA3NVx1MzA5M1x1MzA1N1x1MzA2NApcdTMwNzVcdTMwOTlcdTMwOTNcdTMwNUJcdTMwNEQKXHUzMDc1XHUzMDkzXHUzMDVEXHUzMDQ2Clx1MzA3NVx1MzA5OVx1MzA5M1x1MzA3Qlx1MzA5QVx1MzA0NgpcdTMwNzhcdTMwNDRcdTMwNDJcdTMwOTMKXHUzMDc4XHUzMDQ0XHUzMDRBXHUzMDkzClx1MzA3OFx1MzA0NFx1MzA0Qlx1MzA5OVx1MzA0NApcdTMwNzhcdTMwNDRcdTMwNEQKXHUzMDc4XHUzMDQ0XHUzMDUxXHUzMDk5XHUzMDkzClx1MzA3OFx1MzA0NFx1MzA1M1x1MzA0NgpcdTMwNzhcdTMwNDRcdTMwNTUKXHUzMDc4XHUzMDQ0XHUzMDU3XHUzMDgzClx1MzA3OFx1MzA0NFx1MzA1Qlx1MzA2NApcdTMwNzhcdTMwNDRcdTMwNUQKXHUzMDc4XHUzMDQ0XHUzMDVGXHUzMDRGClx1MzA3OFx1MzA0NFx1MzA2Nlx1MzA5MwpcdTMwNzhcdTMwNDRcdTMwNkRcdTMwNjQKXHUzMDc4XHUzMDQ0XHUzMDhGClx1MzA3OFx1MzA0RFx1MzA0Qlx1MzA5OQpcdTMwNzhcdTMwNTNcdTMwODAKXHUzMDc4XHUzMDk5XHUzMDZCXHUzMDQ0XHUzMDhEClx1MzA3OFx1MzA5OVx1MzA2Qlx1MzA1N1x1MzA4N1x1MzA0Nlx1MzA0Qlx1MzA5OQpcdTMwNzhcdTMwODlcdTMwNTkKXHUzMDc4XHUzMDkzXHUzMDRCXHUzMDkzClx1MzA3OFx1MzA5OVx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0NgpcdTMwNzhcdTMwOTlcdTMwOTNcdTMwNTNcdTMwOTlcdTMwNTcKXHUzMDc4XHUzMDkzXHUzMDU1XHUzMDQ0Clx1MzA3OFx1MzA5M1x1MzA1Rlx1MzA0NApcdTMwNzhcdTMwOTlcdTMwOTNcdTMwOEEKXHUzMDdCXHUzMDQyXHUzMDkzClx1MzA3Qlx1MzA0NFx1MzA0RgpcdTMwN0JcdTMwOTlcdTMwNDZcdTMwNERcdTMwOTlcdTMwODcKXHUzMDdCXHUzMDQ2XHUzMDUzXHUzMDRGClx1MzA3Qlx1MzA0Nlx1MzA1RFx1MzA0NgpcdTMwN0JcdTMwNDZcdTMwN0JcdTMwNDYKXHUzMDdCXHUzMDQ2XHUzMDgyXHUzMDkzClx1MzA3Qlx1MzA0Nlx1MzA4QVx1MzA2NApcdTMwN0JcdTMwNDhcdTMwOEIKXHUzMDdCXHUzMDRBXHUzMDkzClx1MzA3Qlx1MzA0Qlx1MzA5MwpcdTMwN0JcdTMwNERcdTMwODdcdTMwNDYKXHUzMDdCXHUzMDk5XHUzMDREXHUzMDkzClx1MzA3Qlx1MzA0Rlx1MzA4RApcdTMwN0JcdTMwNTFcdTMwNjQKXHUzMDdCXHUzMDUxXHUzMDkzClx1MzA3Qlx1MzA1M1x1MzA0NgpcdTMwN0JcdTMwNTNcdTMwOEIKXHUzMDdCXHUzMDU3XHUzMDQ0Clx1MzA3Qlx1MzA1N1x1MzA2NApcdTMwN0JcdTMwNTdcdTMwODUKXHUzMDdCXHUzMDU3XHUzMDg3XHUzMDQ2Clx1MzA3Qlx1MzA1Qlx1MzA0NApcdTMwN0JcdTMwNURcdTMwNDQKXHUzMDdCXHUzMDVEXHUzMDRGClx1MzA3Qlx1MzA1Rlx1MzA2NgpcdTMwN0JcdTMwNUZcdTMwOEIKXHUzMDdCXHUzMDlBXHUzMDYxXHUzMDc1XHUzMDk5XHUzMDRGXHUzMDhEClx1MzA3Qlx1MzA2M1x1MzA0RFx1MzA4N1x1MzA0RgpcdTMwN0JcdTMwNjNcdTMwNTUKXHUzMDdCXHUzMDYzXHUzMDVGXHUzMDkzClx1MzA3Qlx1MzA2OFx1MzA5M1x1MzA2OFx1MzA5OQpcdTMwN0JcdTMwODFcdTMwOEIKXHUzMDdCXHUzMDkzXHUzMDQ0Clx1MzA3Qlx1MzA5M1x1MzA0RApcdTMwN0JcdTMwOTNcdTMwNTEKXHUzMDdCXHUzMDkzXHUzMDU3XHUzMDY0Clx1MzA3Qlx1MzA5M1x1MzA4NFx1MzA0RgpcdTMwN0VcdTMwNDRcdTMwNkJcdTMwNjEKXHUzMDdFXHUzMDRCXHUzMDQ0Clx1MzA3RVx1MzA0Qlx1MzA1Qlx1MzA4QgpcdTMwN0VcdTMwNEJcdTMwOTlcdTMwOEIKXHUzMDdFXHUzMDUxXHUzMDhCClx1MzA3RVx1MzA1M1x1MzA2OApcdTMwN0VcdTMwNTVcdTMwNjQKXHUzMDdFXHUzMDU3XHUzMDk5XHUzMDgxClx1MzA3RVx1MzA1OVx1MzA0RgpcdTMwN0VcdTMwNUJcdTMwOTlcdTMwOEIKXHUzMDdFXHUzMDY0XHUzMDhBClx1MzA3RVx1MzA2OFx1MzA4MQpcdTMwN0VcdTMwNkFcdTMwNzVcdTMwOTkKXHUzMDdFXHUzMDZDXHUzMDUxClx1MzA3RVx1MzA2RFx1MzA0RgpcdTMwN0VcdTMwN0JcdTMwNDYKXHUzMDdFXHUzMDgyXHUzMDhCClx1MzA3RVx1MzA4Nlx1MzA1MVx1MzA5OQpcdTMwN0VcdTMwODhcdTMwNDYKXHUzMDdFXHUzMDhEXHUzMDg0XHUzMDRCClx1MzA3RVx1MzA4Rlx1MzA1OQpcdTMwN0VcdTMwOEZcdTMwOEEKXHUzMDdFXHUzMDhGXHUzMDhCClx1MzA3RVx1MzA5M1x1MzA0Qlx1MzA5OQpcdTMwN0VcdTMwOTNcdTMwNERcdTMwNjQKXHUzMDdFXHUzMDkzXHUzMDVEXHUzMDk5XHUzMDRGClx1MzA3RVx1MzA5M1x1MzA2QVx1MzA0QgpcdTMwN0ZcdTMwNDRcdTMwODkKXHUzMDdGXHUzMDQ2XHUzMDYxClx1MzA3Rlx1MzA0OFx1MzA4QgpcdTMwN0ZcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDdGXHUzMDRCXHUzMDVGClx1MzA3Rlx1MzA0Qlx1MzA5MwpcdTMwN0ZcdTMwNTFcdTMwOTMKXHUzMDdGXHUzMDUzXHUzMDkzClx1MzA3Rlx1MzA1N1x1MzA5OVx1MzA0Qlx1MzA0NApcdTMwN0ZcdTMwNTlcdTMwNDQKXHUzMDdGXHUzMDU5XHUzMDQ4XHUzMDhCClx1MzA3Rlx1MzA1Qlx1MzA4QgpcdTMwN0ZcdTMwNjNcdTMwNEIKXHUzMDdGXHUzMDY0XHUzMDRCXHUzMDhCClx1MzA3Rlx1MzA2NFx1MzA1MVx1MzA4QgpcdTMwN0ZcdTMwNjZcdTMwNDQKXHUzMDdGXHUzMDY4XHUzMDgxXHUzMDhCClx1MzA3Rlx1MzA2QVx1MzA2OApcdTMwN0ZcdTMwNkFcdTMwN0ZcdTMwNEJcdTMwNTVcdTMwNDQKXHUzMDdGXHUzMDZEXHUzMDg5XHUzMDhCClx1MzA3Rlx1MzA2RVx1MzA0NgpcdTMwN0ZcdTMwNkVcdTMwNEJcdTMwOTlcdTMwNTkKXHUzMDdGXHUzMDdCXHUzMDkzClx1MzA3Rlx1MzA4Mlx1MzA2OApcdTMwN0ZcdTMwODRcdTMwNTFcdTMwOTkKXHUzMDdGXHUzMDg5XHUzMDQ0Clx1MzA3Rlx1MzA4QVx1MzA4N1x1MzA0RgpcdTMwN0ZcdTMwOEZcdTMwNEYKXHUzMDdGXHUzMDkzXHUzMDRCClx1MzA3Rlx1MzA5M1x1MzA1RFx1MzA5OVx1MzA0RgpcdTMwODBcdTMwNDRcdTMwNEIKXHUzMDgwXHUzMDQ4XHUzMDREClx1MzA4MFx1MzA0OFx1MzA5MwpcdTMwODBcdTMwNEJcdTMwNDQKXHUzMDgwXHUzMDRCXHUzMDQ2Clx1MzA4MFx1MzA0Qlx1MzA0OApcdTMwODBcdTMwNEJcdTMwNTcKXHUzMDgwXHUzMDREXHUzMDk5XHUzMDYxXHUzMDgzClx1MzA4MFx1MzA1MVx1MzA4QgpcdTMwODBcdTMwNTFcdTMwOTlcdTMwOTMKXHUzMDgwXHUzMDU1XHUzMDdCXHUzMDk5XHUzMDhCClx1MzA4MFx1MzA1N1x1MzA0Mlx1MzA2NFx1MzA0NApcdTMwODBcdTMwNTdcdTMwNkZcdTMwOTkKXHUzMDgwXHUzMDU3XHUzMDk5XHUzMDg1XHUzMDkzClx1MzA4MFx1MzA1N1x1MzA4RApcdTMwODBcdTMwNTlcdTMwNDYKXHUzMDgwXHUzMDU5XHUzMDUzClx1MzA4MFx1MzA1OVx1MzA3NVx1MzA5OQpcdTMwODBcdTMwNTlcdTMwODEKXHUzMDgwXHUzMDVCXHUzMDhCClx1MzA4MFx1MzA1Qlx1MzA5MwpcdTMwODBcdTMwNjFcdTMwODVcdTMwNDYKXHUzMDgwXHUzMDZBXHUzMDU3XHUzMDQ0Clx1MzA4MFx1MzA2RVx1MzA0NgpcdTMwODBcdTMwODRcdTMwN0YKXHUzMDgwXHUzMDg4XHUzMDQ2Clx1MzA4MFx1MzA4OVx1MzA1NVx1MzA0RApcdTMwODBcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDgwXHUzMDhEXHUzMDkzClx1MzA4MVx1MzA0NFx1MzA0Mlx1MzA5MwpcdTMwODFcdTMwNDRcdTMwNDZcdTMwOTMKXHUzMDgxXHUzMDQ0XHUzMDQ4XHUzMDkzClx1MzA4MVx1MzA0NFx1MzA0Qlx1MzA0RgpcdTMwODFcdTMwNDRcdTMwNERcdTMwODdcdTMwNEYKXHUzMDgxXHUzMDQ0XHUzMDU1XHUzMDQ0Clx1MzA4MVx1MzA0NFx1MzA1NwpcdTMwODFcdTMwNDRcdTMwNURcdTMwNDYKXHUzMDgxXHUzMDQ0XHUzMDc1XHUzMDk5XHUzMDY0Clx1MzA4MVx1MzA0NFx1MzA4Q1x1MzA0NApcdTMwODFcdTMwNDRcdTMwOEZcdTMwNEYKXHUzMDgxXHUzMDRGXHUzMDk5XHUzMDdFXHUzMDhDXHUzMDhCClx1MzA4MVx1MzA1NVx1MzA5OVx1MzA1OQpcdTMwODFcdTMwNTdcdTMwNUYKXHUzMDgxXHUzMDU5XHUzMDk5XHUzMDg5XHUzMDU3XHUzMDQ0Clx1MzA4MVx1MzA1Rlx1MzA5OVx1MzA2NApcdTMwODFcdTMwN0VcdTMwNDQKXHUzMDgxXHUzMDg0XHUzMDU5Clx1MzA4MVx1MzA5M1x1MzA0RFx1MzA4NwpcdTMwODFcdTMwOTNcdTMwNUJcdTMwNEQKXHUzMDgxXHUzMDkzXHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA4Mlx1MzA0Nlx1MzA1N1x1MzA0Mlx1MzA1MVx1MzA5OVx1MzA4QgpcdTMwODJcdTMwNDZcdTMwNjhcdTMwOTlcdTMwNDZcdTMwNTFcdTMwOTMKXHUzMDgyXHUzMDQ4XHUzMDhCClx1MzA4Mlx1MzA0Rlx1MzA1NwpcdTMwODJcdTMwNEZcdTMwNjZcdTMwNEQKXHUzMDgyXHUzMDRGXHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA4Mlx1MzA2MVx1MzA4RFx1MzA5MwpcdTMwODJcdTMwNjhcdTMwOTlcdTMwOEIKXHUzMDgyXHUzMDg5XHUzMDQ2Clx1MzA4Mlx1MzA5M1x1MzA0RgpcdTMwODJcdTMwOTNcdTMwNUZcdTMwOTlcdTMwNDQKXHUzMDg0XHUzMDRBXHUzMDg0Clx1MzA4NFx1MzA1MVx1MzA4QgpcdTMwODRcdTMwNTVcdTMwNDQKXHUzMDg0XHUzMDU1XHUzMDU3XHUzMDQ0Clx1MzA4NFx1MzA1OVx1MzA0NApcdTMwODRcdTMwNTlcdTMwNUZcdTMwOERcdTMwNDYKXHUzMDg0XHUzMDU5XHUzMDdGClx1MzA4NFx1MzA1Qlx1MzA4QgpcdTMwODRcdTMwNURcdTMwNDYKXHUzMDg0XHUzMDVGXHUzMDQ0Clx1MzA4NFx1MzA2MVx1MzA5MwpcdTMwODRcdTMwNjNcdTMwNjgKXHUzMDg0XHUzMDYzXHUzMDZGXHUzMDlBXHUzMDhBClx1MzA4NFx1MzA3NVx1MzA5OVx1MzA4QgpcdTMwODRcdTMwODFcdTMwOEIKXHUzMDg0XHUzMDg0XHUzMDUzXHUzMDU3XHUzMDQ0Clx1MzA4NFx1MzA4OFx1MzA0NApcdTMwODRcdTMwOEZcdTMwODlcdTMwNEJcdTMwNDQKXHUzMDg2XHUzMDQ2XHUzMDREClx1MzA4Nlx1MzA0Nlx1MzA3Mlx1MzA5OVx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0RgpcdTMwODZcdTMwNDZcdTMwNzhcdTMwOTkKXHUzMDg2XHUzMDQ2XHUzMDgxXHUzMDQ0Clx1MzA4Nlx1MzA1MVx1MzA2NApcdTMwODZcdTMwNTdcdTMwODVcdTMwNjQKXHUzMDg2XHUzMDVCXHUzMDkzClx1MzA4Nlx1MzA1RFx1MzA0NgpcdTMwODZcdTMwNUZcdTMwNEIKXHUzMDg2XHUzMDYxXHUzMDgzXHUzMDRGClx1MzA4Nlx1MzA2Nlx1MzA5OVx1MzA4QgpcdTMwODZcdTMwNkJcdTMwODVcdTMwNDYKXHUzMDg2XHUzMDcyXHUzMDk5XHUzMDhGClx1MzA4Nlx1MzA4OVx1MzA0NApcdTMwODZcdTMwOENcdTMwOEIKXHUzMDg4XHUzMDQ2XHUzMDQ0Clx1MzA4OFx1MzA0Nlx1MzA0QgpcdTMwODhcdTMwNDZcdTMwNERcdTMwODVcdTMwNDYKXHUzMDg4XHUzMDQ2XHUzMDU3XHUzMDk5Clx1MzA4OFx1MzA0Nlx1MzA1OQpcdTMwODhcdTMwNDZcdTMwNjFcdTMwNDhcdTMwOTMKXHUzMDg4XHUzMDRCXHUzMDVCXHUzMDk5Clx1MzA4OFx1MzA0Qlx1MzA5MwpcdTMwODhcdTMwNERcdTMwOTMKXHUzMDg4XHUzMDRGXHUzMDVCXHUzMDQ0Clx1MzA4OFx1MzA0Rlx1MzA3Qlx1MzA5OVx1MzA0NgpcdTMwODhcdTMwNTFcdTMwNDQKXHUzMDg4XHUzMDUzXHUzMDk5XHUzMDhDXHUzMDhCClx1MzA4OFx1MzA1NVx1MzA5MwpcdTMwODhcdTMwNTdcdTMwODVcdTMwNDYKXHUzMDg4XHUzMDVEXHUzMDQ2Clx1MzA4OFx1MzA1RFx1MzA0RgpcdTMwODhcdTMwNjNcdTMwNEIKXHUzMDg4XHUzMDY2XHUzMDQ0Clx1MzA4OFx1MzA2OFx1MzA5OVx1MzA0Qlx1MzA5OVx1MzA4Rlx1MzA0RgpcdTMwODhcdTMwNkRcdTMwNjQKXHUzMDg4XHUzMDg0XHUzMDRGClx1MzA4OFx1MzA4Nlx1MzA0NgpcdTMwODhcdTMwOERcdTMwNTNcdTMwNzVcdTMwOTkKXHUzMDg4XHUzMDhEXHUzMDU3XHUzMDQ0Clx1MzA4OVx1MzA0NFx1MzA0NgpcdTMwODlcdTMwNEZcdTMwNEJcdTMwOTlcdTMwNEQKXHUzMDg5XHUzMDRGXHUzMDUzXHUzMDk5Clx1MzA4OVx1MzA0Rlx1MzA1NVx1MzA2NApcdTMwODlcdTMwNEZcdTMwNUZcdTMwOTkKXHUzMDg5XHUzMDU3XHUzMDkzXHUzMDZGXHUzMDk5XHUzMDkzClx1MzA4OVx1MzA1Qlx1MzA5MwpcdTMwODlcdTMwNURcdTMwOTlcdTMwNEYKXHUzMDg5XHUzMDVGXHUzMDQ0Clx1MzA4OVx1MzA2M1x1MzA0QgpcdTMwODlcdTMwOENcdTMwNjQKXHUzMDhBXHUzMDQ4XHUzMDREClx1MzA4QVx1MzA0Qlx1MzA0NApcdTMwOEFcdTMwNERcdTMwNTVcdTMwNEYKXHUzMDhBXHUzMDREXHUzMDVCXHUzMDY0Clx1MzA4QVx1MzA0Rlx1MzA0Rlx1MzA5OVx1MzA5MwpcdTMwOEFcdTMwNEZcdTMwNjQKXHUzMDhBXHUzMDUxXHUzMDkzClx1MzA4QVx1MzA1M1x1MzA0NgpcdTMwOEFcdTMwNUJcdTMwNDQKXHUzMDhBXHUzMDVEXHUzMDQ2Clx1MzA4QVx1MzA1RFx1MzA0RgpcdTMwOEFcdTMwNjZcdTMwOTMKXHUzMDhBXHUzMDZEXHUzMDkzClx1MzA4QVx1MzA4Nlx1MzA0NgpcdTMwOEFcdTMwODVcdTMwNDZcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDhBXHUzMDg4XHUzMDQ2Clx1MzA4QVx1MzA4N1x1MzA0Nlx1MzA4QQpcdTMwOEFcdTMwODdcdTMwNEJcdTMwOTMKXHUzMDhBXHUzMDg3XHUzMDRGXHUzMDYxXHUzMDgzClx1MzA4QVx1MzA4N1x1MzA1M1x1MzA0NgpcdTMwOEFcdTMwOEFcdTMwNEYKXHUzMDhBXHUzMDhDXHUzMDREClx1MzA4QVx1MzA4RFx1MzA5MwpcdTMwOEFcdTMwOTNcdTMwNTNcdTMwOTkKXHUzMDhCXHUzMDQ0XHUzMDUxXHUzMDQ0Clx1MzA4Qlx1MzA0NFx1MzA1NVx1MzA0NApcdTMwOEJcdTMwNDRcdTMwNTdcdTMwOTkKXHUzMDhCXHUzMDQ0XHUzMDVCXHUzMDREClx1MzA4Qlx1MzA1OVx1MzA2Rlx1MzA5OVx1MzA5MwpcdTMwOEJcdTMwOEFcdTMwNEJcdTMwOTlcdTMwOEZcdTMwODkKXHUzMDhDXHUzMDQ0XHUzMDRCXHUzMDkzClx1MzA4Q1x1MzA0NFx1MzA0RFx1MzA5OQpcdTMwOENcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDhDXHUzMDQ0XHUzMDVEXHUzMDk5XHUzMDQ2XHUzMDUzClx1MzA4Q1x1MzA0NFx1MzA2OFx1MzA0NgpcdTMwOENcdTMwNDRcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDhDXHUzMDREXHUzMDU3Clx1MzA4Q1x1MzA0RFx1MzA1Rlx1MzA5OVx1MzA0NApcdTMwOENcdTMwOTNcdTMwNDJcdTMwNDQKXHUzMDhDXHUzMDkzXHUzMDUxXHUzMDQ0Clx1MzA4Q1x1MzA5M1x1MzA1M1x1MzA5MwpcdTMwOENcdTMwOTNcdTMwNTVcdTMwNDQKXHUzMDhDXHUzMDkzXHUzMDU3XHUzMDg1XHUzMDQ2Clx1MzA4Q1x1MzA5M1x1MzA1RFx1MzA5OVx1MzA0RgpcdTMwOENcdTMwOTNcdTMwODlcdTMwNEYKXHUzMDhEXHUzMDQ2XHUzMDRCClx1MzA4RFx1MzA0Nlx1MzA1M1x1MzA5OQpcdTMwOERcdTMwNDZcdTMwNTdcdTMwOTlcdTMwOTMKXHUzMDhEXHUzMDQ2XHUzMDVEXHUzMDRGClx1MzA4RFx1MzA0Rlx1MzA0Qlx1MzA5OQpcdTMwOERcdTMwNTNcdTMwNjQKXHUzMDhEXHUzMDU3XHUzMDk5XHUzMDQ2XHUzMDg5Clx1MzA4RFx1MzA1N1x1MzA4NVx1MzA2NApcdTMwOERcdTMwNUJcdTMwOTMKXHUzMDhEXHUzMDY2XHUzMDkzClx1MzA4RFx1MzA4MVx1MzA5MwpcdTMwOERcdTMwOENcdTMwNjQKXHUzMDhEXHUzMDkzXHUzMDREXHUzMDk5Clx1MzA4RFx1MzA5M1x1MzA2Rlx1MzA5QQpcdTMwOERcdTMwOTNcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDhEXHUzMDkzXHUzMDhBClx1MzA4Rlx1MzA0Qlx1MzA1OQpcdTMwOEZcdTMwNEJcdTMwODEKXHUzMDhGXHUzMDRCXHUzMDg0XHUzMDdFClx1MzA4Rlx1MzA0Qlx1MzA4Q1x1MzA4QgpcdTMwOEZcdTMwNTdcdTMwNjQKXHUzMDhGXHUzMDU3XHUzMDk5XHUzMDdFXHUzMDU3Clx1MzA4Rlx1MzA1OVx1MzA4Q1x1MzA4Mlx1MzA2RQpcdTMwOEZcdTMwODlcdTMwNDYKXHUzMDhGXHUzMDhDXHUzMDhCYC5zcGxpdCgiXG4iKTsKCiAgLy8gbm9kZV9tb2R1bGVzL0BzY3VyZS9iaXAzOS9lc20vd29yZGxpc3RzL2tvcmVhbi5qcwogIHZhciB3b3JkbGlzdDYgPSBgXHUxMTAwXHUxMTYxXHUxMTAwXHUxMTY3XHUxMUE4Clx1MTEwMFx1MTE2MVx1MTEwMVx1MTE3M1x1MTFCNwpcdTExMDBcdTExNjFcdTExMDJcdTExNjFcdTExQUIKXHUxMTAwXHUxMTYxXHUxMTAyXHUxMTczXHUxMUJDClx1MTEwMFx1MTE2MVx1MTEwM1x1MTE3M1x1MTFBOApcdTExMDBcdTExNjFcdTExMDVcdTExNzNcdTExMEVcdTExNzVcdTExQjcKXHUxMTAwXHUxMTYxXHUxMTA2XHUxMTZFXHUxMUI3Clx1MTEwMFx1MTE2MVx1MTEwN1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNjFcdTExMDlcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMTA5XHUxMTczXHUxMUI3Clx1MTEwMFx1MTE2MVx1MTEwQlx1MTE2RVx1MTFBQlx1MTEwM1x1MTE2NgpcdTExMDBcdTExNjFcdTExMEJcdTExNzNcdTExQUYKXHUxMTAwXHUxMTYxXHUxMTBCXHUxMTc1XHUxMTAzXHUxMTczClx1MTEwMFx1MTE2MVx1MTEwQlx1MTE3NVx1MTFCOApcdTExMDBcdTExNjFcdTExMENcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwMFx1MTE2MVx1MTEwQ1x1MTE2OVx1MTFBOApcdTExMDBcdTExNjFcdTExMENcdTExNkVcdTExQTgKXHUxMTAwXHUxMTYxXHUxMUE4XHUxMTBCXHUxMTY5Clx1MTEwMFx1MTE2MVx1MTFBOFx1MTEwQ1x1MTE2MQpcdTExMDBcdTExNjFcdTExQUJcdTExMDBcdTExNjdcdTExQTgKXHUxMTAwXHUxMTYxXHUxMUFCXHUxMTA3XHUxMTZFClx1MTEwMFx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2NVx1MTFCOApcdTExMDBcdTExNjFcdTExQUJcdTExMENcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUI4Clx1MTEwMFx1MTE2MVx1MTFBQlx1MTExMVx1MTE2MVx1MTFBQgpcdTExMDBcdTExNjFcdTExQUZcdTExMDNcdTExNzNcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUFGXHUxMTA3XHUxMTc1Clx1MTEwMFx1MTE2MVx1MTFBRlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDBcdTExNjFcdTExQUZcdTExMENcdTExNzNcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUI3XHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwMFx1MTE2MVx1MTFCN1x1MTEwMFx1MTE3NQpcdTExMDBcdTExNjFcdTExQjdcdTExMDlcdTExNjkKXHUxMTAwXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTZFXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwMFx1MTE2MVx1MTFCN1x1MTEwQ1x1MTE2MQpcdTExMDBcdTExNjFcdTExQjdcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUI4XHUxMTBDXHUxMTYxXHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwMlx1MTE2MVx1MTFCNwpcdTExMDBcdTExNjFcdTExQkNcdTExMDNcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTAzXHUxMTY5Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwNVx1MTE2N1x1MTFBOFx1MTExMlx1MTE3NQpcdTExMDBcdTExNjFcdTExQkNcdTExMDdcdTExNjdcdTExQUIKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTA3XHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMDBcdTExNjFcdTExQkNcdTExMDlcdTExNkVcdTExMDVcdTExNjNcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTBCXHUxMTYxXHUxMTBDXHUxMTc1Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2Rlx1MTFBQlx1MTEwM1x1MTE2OQpcdTExMDBcdTExNjFcdTExQkNcdTExMEJcdTExNzQKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY2Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE2OQpcdTExMDBcdTExNjFcdTExQzBcdTExMEJcdTExNzUKXHUxMTAwXHUxMTYyXHUxMTAwXHUxMTZFXHUxMTA1XHUxMTc1Clx1MTEwMFx1MTE2Mlx1MTEwMlx1MTE2MVx1MTEwNVx1MTE3NQpcdTExMDBcdTExNjJcdTExMDdcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYyXHUxMTA3XHUxMTY3XHUxMUFGClx1MTEwMFx1MTE2Mlx1MTEwOVx1MTE2NVx1MTFBQgpcdTExMDBcdTExNjJcdTExMDlcdTExNjVcdTExQkMKXHUxMTAwXHUxMTYyXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwMFx1MTE2Mlx1MTFBOFx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDBcdTExNjVcdTExMDlcdTExNzVcdTExQUYKXHUxMTAwXHUxMTY1XHUxMTBCXHUxMTYyXHUxMUE4Clx1MTEwMFx1MTE2NVx1MTEwQlx1MTE2RVx1MTFBRgpcdTExMDBcdTExNjVcdTExMENcdTExNzVcdTExQkEKXHUxMTAwXHUxMTY1XHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwMFx1MTE2NVx1MTFBOFx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMDBcdTExNjVcdTExQUJcdTExMDBcdTExNjFcdTExQkMKXHUxMTAwXHUxMTY1XHUxMUFCXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwMFx1MTE2NVx1MTFBQlx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMDBcdTExNjVcdTExQUJcdTExMENcdTExNjkKXHUxMTAwXHUxMTY1XHUxMUFCXHUxMTBFXHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE2NVx1MTFBRlx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDBcdTExNjVcdTExQjdcdTExMDlcdTExNjEKXHUxMTAwXHUxMTY1XHUxMUI3XHUxMTEwXHUxMTY5Clx1MTEwMFx1MTE2Nlx1MTEwOVx1MTE3NVx1MTExMVx1MTE2MVx1MTFBQgpcdTExMDBcdTExNjZcdTExMEJcdTExNzVcdTExQjcKXHUxMTAwXHUxMTY3XHUxMTBCXHUxMTZFXHUxMUFGClx1MTEwMFx1MTE2N1x1MTFBQlx1MTExMlx1MTE2MgpcdTExMDBcdTExNjdcdTExQUZcdTExMDBcdTExNkEKXHUxMTAwXHUxMTY3XHUxMUFGXHUxMTAwXHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE2N1x1MTFBRlx1MTEwNVx1MTE2OVx1MTFBQgpcdTExMDBcdTExNjdcdTExQUZcdTExMDlcdTExNjVcdTExQTgKXHUxMTAwXHUxMTY3XHUxMUFGXHUxMTA5XHUxMTczXHUxMUJDClx1MTEwMFx1MTE2N1x1MTFBRlx1MTEwOVx1MTE3NVx1MTFCNwpcdTExMDBcdTExNjdcdTExQUZcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTY3XHUxMUFGXHUxMTEyXHUxMTY5XHUxMUFCClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwMFx1MTE2OApcdTExMDBcdTExNjdcdTExQkNcdTExMDBcdTExNjkKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwNVx1MTE2N1x1MTFBOApcdTExMDBcdTExNjdcdTExQkNcdTExMDdcdTExNjlcdTExQThcdTExMDBcdTExNkVcdTExQkMKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTA3XHUxMTc1Clx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwM1x1MTE2OQpcdTExMDBcdTExNjdcdTExQkNcdTExMEJcdTExNjdcdTExQkMKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTBCXHUxMTZFClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwQ1x1MTE2Mlx1MTFCQwpcdTExMDBcdTExNjdcdTExQkNcdTExMENcdTExNjYKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTBDXHUxMTZFClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwRVx1MTE2MVx1MTFBRgpcdTExMDBcdTExNjdcdTExQkNcdTExMEVcdTExNzUKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTYzXHUxMUJDClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTExMlx1MTE2NVx1MTFCNwpcdTExMDBcdTExNjhcdTExMDBcdTExNjlcdTExQTgKXHUxMTAwXHUxMTY4XHUxMTAzXHUxMTYxXHUxMUFCClx1MTEwMFx1MTE2OFx1MTEwNVx1MTE2MVx1MTFBQgpcdTExMDBcdTExNjhcdTExMDlcdTExNjFcdTExQUIKXHUxMTAwXHUxMTY4XHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwMFx1MTE2OFx1MTEwQlx1MTE2M1x1MTFBOApcdTExMDBcdTExNjhcdTExMENcdTExNjVcdTExQUYKXHUxMTAwXHUxMTY4XHUxMTBFXHUxMTczXHUxMUJDClx1MTEwMFx1MTE2OFx1MTExMlx1MTE2Q1x1MTFBOApcdTExMDBcdTExNjlcdTExMDBcdTExNjJcdTExQTgKXHUxMTAwXHUxMTY5XHUxMTAwXHUxMTZFXHUxMTA1XHUxMTY3Clx1MTEwMFx1MTE2OVx1MTEwMFx1MTE2RVx1MTFCQwpcdTExMDBcdTExNjlcdTExMDBcdTExNzNcdTExQjgKXHUxMTAwXHUxMTY5XHUxMTAzXHUxMTczXHUxMUJDXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwMFx1MTE2OVx1MTEwNlx1MTE2RVx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMDBcdTExNjlcdTExMDZcdTExNzVcdTExQUIKXHUxMTAwXHUxMTY5XHUxMTBCXHUxMTYzXHUxMUJDXHUxMTBCXHUxMTc1Clx1MTEwMFx1MTE2OVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNjlcdTExMENcdTExNjVcdTExQUIKXHUxMTAwXHUxMTY5XHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwMFx1MTE2OVx1MTEwRVx1MTE2RVx1MTFCQVx1MTEwMFx1MTE2MVx1MTEwNVx1MTE2RQpcdTExMDBcdTExNjlcdTExMTBcdTExNjlcdTExQkMKXHUxMTAwXHUxMTY5XHUxMTEyXHUxMTYzXHUxMUJDClx1MTEwMFx1MTE2OVx1MTFBOFx1MTEwOVx1MTE3NVx1MTFBOApcdTExMDBcdTExNjlcdTExQUZcdTExMDZcdTExNjlcdTExQTgKXHUxMTAwXHUxMTY5XHUxMUFGXHUxMTBEXHUxMTYxXHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2OVx1MTFBRlx1MTExMVx1MTE3MwpcdTExMDBcdTExNjlcdTExQkNcdTExMDBcdTExNjFcdTExQUIKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTAwXHUxMTYyClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwMFx1MTE2N1x1MTFBOApcdTExMDBcdTExNjlcdTExQkNcdTExMDBcdTExNkVcdTExQUIKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTAwXHUxMTczXHUxMUI4Clx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwMFx1MTE3NQpcdTExMDBcdTExNjlcdTExQkNcdTExMDNcdTExNjlcdTExQkMKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTA2XHUxMTZFXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwN1x1MTE2RQpcdTExMDBcdTExNjlcdTExQkNcdTExMDlcdTExNjEKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwQlx1MTE2NVx1MTFCOApcdTExMDBcdTExNjlcdTExQkNcdTExMEJcdTExNjdcdTExQUIKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNjlcdTExQkNcdTExMERcdTExNjEKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTBFXHUxMTYyXHUxMUE4Clx1MTEwMFx1MTE2OVx1MTFCQ1x1MTExMFx1MTE2OVx1MTFCQwpcdTExMDBcdTExNjlcdTExQkNcdTExMTFcdTExNjkKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTEyXHUxMTYxXHUxMUJDClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTExMlx1MTE3Mlx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMDBcdTExNkFcdTExMDZcdTExNjlcdTExQTgKXHUxMTAwXHUxMTZBXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwMFx1MTE2QVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNkFcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTZBXHUxMTEyXHUxMTYxXHUxMUE4Clx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwMFx1MTE2Mlx1MTFBOApcdTExMDBcdTExNkFcdTExQUJcdTExMDBcdTExNjgKXHUxMTAwXHUxMTZBXHUxMUFCXHUxMTAwXHUxMTZBXHUxMUJDClx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwMlx1MTE2N1x1MTFCNwpcdTExMDBcdTExNkFcdTExQUJcdTExMDVcdTExNjFcdTExQjcKXHUxMTAwXHUxMTZBXHUxMUFCXHUxMTA1XHUxMTY3XHUxMUFCClx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwNVx1MTE3NQpcdTExMDBcdTExNkFcdTExQUJcdTExMDlcdTExNzNcdTExQjgKXHUxMTAwXHUxMTZBXHUxMUFCXHUxMTA5XHUxMTc1XHUxMUI3Clx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDBcdTExNkFcdTExQUJcdTExMEVcdTExNjFcdTExQUYKXHUxMTAwXHUxMTZBXHUxMUJDXHUxMTAwXHUxMTY3XHUxMUJDClx1MTEwMFx1MTE2QVx1MTFCQ1x1MTEwMFx1MTE2OQpcdTExMDBcdTExNkFcdTExQkNcdTExMENcdTExNjFcdTExQkMKXHUxMTAwXHUxMTZBXHUxMUJDXHUxMTBDXHUxMTZFClx1MTEwMFx1MTE2Q1x1MTEwNVx1MTE2OVx1MTEwQlx1MTE2RVx1MTFCNwpcdTExMDBcdTExNkNcdTExQkNcdTExMENcdTExNjFcdTExQkNcdTExMTJcdTExNzUKXHUxMTAwXHUxMTZEXHUxMTAwXHUxMTZBXHUxMTA5XHUxMTY1Clx1MTEwMFx1MTE2RFx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMDBcdTExNkRcdTExMDdcdTExNjlcdTExQTgKXHUxMTAwXHUxMTZEXHUxMTA5XHUxMTc1XHUxMUFGClx1MTEwMFx1MTE2RFx1MTEwQlx1MTE2M1x1MTFCQwpcdTExMDBcdTExNkRcdTExMEJcdTExNzJcdTExQTgKXHUxMTAwXHUxMTZEXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwMFx1MTE2RFx1MTEwQ1x1MTE3NVx1MTFBOApcdTExMDBcdTExNkRcdTExMTBcdTExNjlcdTExQkMKXHUxMTAwXHUxMTZEXHUxMTEyXHUxMTZBXHUxMUFCClx1MTEwMFx1MTE2RFx1MTExMlx1MTE2RVx1MTFBQgpcdTExMDBcdTExNkVcdTExMDBcdTExNjdcdTExQkMKXHUxMTAwXHUxMTZFXHUxMTA1XHUxMTczXHUxMUI3Clx1MTEwMFx1MTE2RVx1MTEwNlx1MTE2NVx1MTFCQwpcdTExMDBcdTExNkVcdTExMDdcdTExNjdcdTExQUYKXHUxMTAwXHUxMTZFXHUxMTA3XHUxMTZFXHUxMUFCClx1MTEwMFx1MTE2RVx1MTEwOVx1MTE2NVx1MTFBOApcdTExMDBcdTExNkVcdTExMDlcdTExNjVcdTExQkMKXHUxMTAwXHUxMTZFXHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwMFx1MTE2RVx1MTEwQlx1MTE2N1x1MTFBOApcdTExMDBcdTExNkVcdTExMEJcdTExNzVcdTExQjgKXHUxMTAwXHUxMTZFXHUxMTBFXHUxMTY1XHUxMUJDClx1MTEwMFx1MTE2RVx1MTEwRVx1MTE2Nlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDBcdTExNkVcdTExQThcdTExMDBcdTExNjEKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2RVx1MTFBOFx1MTEwMlx1MTE2MgpcdTExMDBcdTExNkVcdTExQThcdTExMDVcdTExNzVcdTExQjgKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwMFx1MTE2RVx1MTFBOFx1MTEwNlx1MTE3NVx1MTFBQgpcdTExMDBcdTExNkVcdTExQThcdTExMDlcdTExNkUKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTBCXHUxMTY1Clx1MTEwMFx1MTE2RVx1MTFBOFx1MTEwQlx1MTE2QVx1MTFCQwpcdTExMDBcdTExNkVcdTExQThcdTExMENcdTExNjVcdTExQTgKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTBDXHUxMTY2Clx1MTEwMFx1MTE2RVx1MTFBOFx1MTExMlx1MTE2QwpcdTExMDBcdTExNkVcdTExQUJcdTExMDNcdTExNjIKXHUxMTAwXHUxMTZFXHUxMUFCXHUxMTA5XHUxMTYxClx1MTEwMFx1MTE2RVx1MTFBQlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDBcdTExNkVcdTExQkNcdTExMDBcdTExNzNcdTExQThcdTExMENcdTExNjVcdTExQTgKXHUxMTAwXHUxMTZGXHUxMUFCXHUxMTA1XHUxMTc1Clx1MTEwMFx1MTE2Rlx1MTFBQlx1MTEwQlx1MTE3MQpcdTExMDBcdTExNkZcdTExQUJcdTExMTBcdTExNkUKXHUxMTAwXHUxMTcxXHUxMTAwXHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE3MVx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMDBcdTExNzJcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTcyXHUxMTBFXHUxMTc1XHUxMUE4Clx1MTEwMFx1MTE3Mlx1MTFBQlx1MTExMlx1MTE2N1x1MTFCQwpcdTExMDBcdTExNzNcdTExMDJcdTExNjFcdTExQUYKXHUxMTAwXHUxMTczXHUxMTAyXHUxMTYzXHUxMUJDClx1MTEwMFx1MTE3M1x1MTEwMlx1MTE3M1x1MTFBRgpcdTExMDBcdTExNzNcdTExMDVcdTExNjVcdTExMDJcdTExNjEKXHUxMTAwXHUxMTczXHUxMTA1XHUxMTZFXHUxMUI4Clx1MTEwMFx1MTE3M1x1MTEwNVx1MTE3M1x1MTFCQQpcdTExMDBcdTExNzNcdTExMDVcdTExNzVcdTExQjcKXHUxMTAwXHUxMTczXHUxMTBDXHUxMTY2XHUxMTA5XHUxMTY1XHUxMTBCXHUxMTYzClx1MTEwMFx1MTE3M1x1MTExMFx1MTE2OVx1MTEwNVx1MTE2OVx1MTFBOApcdTExMDBcdTExNzNcdTExQThcdTExMDdcdTExNjlcdTExQTgKXHUxMTAwXHUxMTczXHUxMUE4XHUxMTEyXHUxMTc1Clx1MTEwMFx1MTE3M1x1MTFBQlx1MTEwMFx1MTE2NQpcdTExMDBcdTExNzNcdTExQUJcdTExMDBcdTExNkQKXHUxMTAwXHUxMTczXHUxMUFCXHUxMTA1XHUxMTYyClx1MTEwMFx1MTE3M1x1MTFBQlx1MTEwNVx1MTE2OQpcdTExMDBcdTExNzNcdTExQUJcdTExMDZcdTExNkUKXHUxMTAwXHUxMTczXHUxMUFCXHUxMTA3XHUxMTY5XHUxMUFCClx1MTEwMFx1MTE3M1x1MTFBQlx1MTEwQlx1MTE2Rlx1MTFBQgpcdTExMDBcdTExNzNcdTExQUJcdTExMEJcdTExNzJcdTExQTgKXHUxMTAwXHUxMTczXHUxMUFCXHUxMTBFXHUxMTY1Clx1MTEwMFx1MTE3M1x1MTFBRlx1MTEwQVx1MTE3NQpcdTExMDBcdTExNzNcdTExQUZcdTExMENcdTExNjEKXHUxMTAwXHUxMTczXHUxMUI3XHUxMTAwXHUxMTYxXHUxMUJDXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwMFx1MTE2OQpcdTExMDBcdTExNzNcdTExQjdcdTExMDJcdTExNjdcdTExQUIKXHUxMTAwXHUxMTczXHUxMUI3XHUxMTA2XHUxMTY2XHUxMTAzXHUxMTYxXHUxMUFGClx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwQlx1MTE2Mlx1MTFBOApcdTExMDBcdTExNzNcdTExQjdcdTExMEJcdTExNjdcdTExQUIKXHUxMTAwXHUxMTczXHUxMUI3XHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwQ1x1MTE3NQpcdTExMDBcdTExNzNcdTExQkNcdTExMENcdTExNjVcdTExQkNcdTExMENcdTExNjVcdTExQTgKXHUxMTAwXHUxMTc1XHUxMTAwXHUxMTYxXHUxMUFCClx1MTEwMFx1MTE3NVx1MTEwMFx1MTE2QVx1MTFBQgpcdTExMDBcdTExNzVcdTExMDJcdTExNjdcdTExQjcKXHUxMTAwXHUxMTc1XHUxMTAyXHUxMTczXHUxMUJDClx1MTEwMFx1MTE3NVx1MTEwM1x1MTE2OVx1MTFBOFx1MTEwMFx1MTE2RApcdTExMDBcdTExNzVcdTExMDNcdTExNkVcdTExQkMKXHUxMTAwXHUxMTc1XHUxMTA1XHUxMTY5XHUxMUE4Clx1MTEwMFx1MTE3NVx1MTEwNVx1MTE3M1x1MTFCNwpcdTExMDBcdTExNzVcdTExMDdcdTExNjVcdTExQjgKXHUxMTAwXHUxMTc1XHUxMTA3XHUxMTY5XHUxMUFCClx1MTEwMFx1MTE3NVx1MTEwN1x1MTE2RVx1MTFBQgpcdTExMDBcdTExNzVcdTExMDhcdTExNzNcdTExQjcKXHUxMTAwXHUxMTc1XHUxMTA5XHUxMTZFXHUxMUE4XHUxMTA5XHUxMTYxClx1MTEwMFx1MTE3NVx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMDBcdTExNzVcdTExMEJcdTExNjVcdTExQTgKXHUxMTAwXHUxMTc1XHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwMFx1MTE3NVx1MTEwQlx1MTE2OVx1MTFBQgpcdTExMDBcdTExNzVcdTExMEJcdTExNkVcdTExQUIKXHUxMTAwXHUxMTc1XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwMFx1MTE3NVx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDBcdTExNzVcdTExMENcdTExNkVcdTExQUIKXHUxMTAwXHUxMTc1XHUxMTBFXHUxMTc1XHUxMUI3Clx1MTEwMFx1MTE3NVx1MTExMlx1MTE2OVx1MTFBQgpcdTExMDBcdTExNzVcdTExMTJcdTExNkNcdTExQTgKXHUxMTAwXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTczXHUxMUI4Clx1MTEwMFx1MTE3NVx1MTFBQlx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNzVcdTExQUZcdTExMEJcdTExNzUKXHUxMTAwXHUxMTc1XHUxMUI3XHUxMTA3XHUxMTYxXHUxMUI4Clx1MTEwMFx1MTE3NVx1MTFCN1x1MTEwRVx1MTE3NQpcdTExMDBcdTExNzVcdTExQjdcdTExMTFcdTExNjlcdTExMDBcdTExNjlcdTExQkNcdTExMTJcdTExNjFcdTExQkMKXHUxMTAxXHUxMTYxXHUxMUE4XHUxMTAzXHUxMTZFXHUxMTAwXHUxMTc1Clx1MTEwMVx1MTE2MVx1MTFCN1x1MTEwOFx1MTE2MVx1MTFBOApcdTExMDFcdTExNjJcdTExMDNcdTExNjFcdTExQUZcdTExMEJcdTExNzNcdTExQjcKXHUxMTAxXHUxMTYyXHUxMTA5XHUxMTY5XHUxMTAwXHUxMTczXHUxMUI3Clx1MTEwMVx1MTE2NVx1MTFCOFx1MTEwQ1x1MTE3NVx1MTFBRgpcdTExMDFcdTExNjlcdTExQThcdTExMDNcdTExNjJcdTExMDBcdTExNzUKXHUxMTAxXHUxMTY5XHUxMUJFXHUxMTBCXHUxMTc1XHUxMUMxClx1MTEwMlx1MTE2MVx1MTEwM1x1MTE3M1x1MTFBRlx1MTEwQlx1MTE3NQpcdTExMDJcdTExNjFcdTExMDVcdTExNjFcdTExQUJcdTExMTJcdTExNzUKXHUxMTAyXHUxMTYxXHUxMTA2XHUxMTY1XHUxMTBDXHUxMTc1Clx1MTEwMlx1MTE2MVx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDJcdTExNjFcdTExMEVcdTExNzVcdTExQjdcdTExMDdcdTExNjFcdTExQUIKXHUxMTAyXHUxMTYxXHUxMTEyXHUxMTczXHUxMUFGClx1MTEwMlx1MTE2MVx1MTFBOFx1MTEwQlx1MTE2N1x1MTFCOApcdTExMDJcdTExNjFcdTExQUJcdTExMDdcdTExNjFcdTExQkMKXHUxMTAyXHUxMTYxXHUxMUFGXHUxMTAwXHUxMTYyClx1MTEwMlx1MTE2MVx1MTFBRlx1MTEwQVx1MTE3NQpcdTExMDJcdTExNjFcdTExQUZcdTExMERcdTExNjEKXHUxMTAyXHUxMTYxXHUxMUI3XHUxMTAyXHUxMTY3Clx1MTEwMlx1MTE2MVx1MTFCN1x1MTEwM1x1MTE2Mlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMDJcdTExNjFcdTExQjdcdTExMDZcdTExNjIKXHUxMTAyXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwMlx1MTE2MVx1MTFCN1x1MTEwQ1x1MTE2MQpcdTExMDJcdTExNjFcdTExQjdcdTExMTFcdTExNjdcdTExQUIKXHUxMTAyXHUxMTYxXHUxMUI3XHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwMlx1MTE2MVx1MTFCQ1x1MTEwN1x1MTE3NQpcdTExMDJcdTExNjFcdTExQzBcdTExMDZcdTExNjFcdTExQUYKXHUxMTAyXHUxMTYyXHUxMTAyXHUxMTY3XHUxMUFCClx1MTEwMlx1MTE2Mlx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDJcdTExNjJcdTExMEJcdTExNzVcdTExQUYKXHUxMTAyXHUxMTYyXHUxMUI3XHUxMTA3XHUxMTc1Clx1MTEwMlx1MTE2Mlx1MTFCN1x1MTEwOVx1MTE2MgpcdTExMDJcdTExNjJcdTExQkFcdTExMDZcdTExNkVcdTExQUYKXHUxMTAyXHUxMTYyXHUxMUJDXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwMlx1MTE2Mlx1MTFCQ1x1MTEwNlx1MTE2N1x1MTFBQgpcdTExMDJcdTExNjJcdTExQkNcdTExMDdcdTExNjFcdTExQkMKXHUxMTAyXHUxMTYyXHUxMUJDXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTY5Clx1MTEwMlx1MTE2Nlx1MTFBOFx1MTExMFx1MTE2MVx1MTEwQlx1MTE3NQpcdTExMDJcdTExNjZcdTExQkFcdTExMERcdTExNjIKXHUxMTAyXHUxMTY5XHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwMlx1MTE2OVx1MTEwNVx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDJcdTExNjlcdTExMDVcdTExNjdcdTExQTgKXHUxMTAyXHUxMTY5XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwMlx1MTE2OVx1MTFBOFx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDJcdTExNjlcdTExQThcdTExMEVcdTExNjEKXHUxMTAyXHUxMTY5XHUxMUE4XHUxMTEyXHUxMTZBClx1MTEwMlx1MTE2OVx1MTFBQlx1MTEwNVx1MTE3NQpcdTExMDJcdTExNjlcdTExQUJcdTExMDZcdTExNkVcdTExQUIKXHUxMTAyXHUxMTY5XHUxMUFCXHUxMTBDXHUxMTYyXHUxMUJDClx1MTEwMlx1MTE2OVx1MTFBRlx1MTEwQlx1MTE3NQpcdTExMDJcdTExNjlcdTExQkNcdTExMDBcdTExNkUKXHUxMTAyXHUxMTY5XHUxMUJDXHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwMlx1MTE2OVx1MTFCQ1x1MTEwNlx1MTE3NVx1MTFBQgpcdTExMDJcdTExNjlcdTExQkNcdTExMDdcdTExNkUKXHUxMTAyXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwMlx1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDJcdTExNjlcdTExQkNcdTExMEVcdTExNjlcdTExQUIKXHUxMTAyXHUxMTY5XHUxMUMxXHUxMTBCXHUxMTc1Clx1MTEwMlx1MTE2RVx1MTFBQlx1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MQpcdTExMDJcdTExNkVcdTExQUJcdTExMDZcdTExNkVcdTExQUYKXHUxMTAyXHUxMTZFXHUxMUFCXHUxMTBBXHUxMTY1XHUxMUI4Clx1MTEwMlx1MTE3Mlx1MTEwQlx1MTE2RFx1MTFBOApcdTExMDJcdTExNzNcdTExMDFcdTExNzVcdTExQjcKXHUxMTAyXHUxMTczXHUxMUE4XHUxMTAzXHUxMTYyClx1MTEwMlx1MTE3M1x1MTFCQ1x1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDJcdTExNzNcdTExQkNcdTExMDVcdTExNjdcdTExQTgKXHUxMTAzXHUxMTYxXHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwM1x1MTE2MVx1MTEwQlx1MTE2M1x1MTFCQ1x1MTEwOVx1MTE2NVx1MTFCQwpcdTExMDNcdTExNjFcdTExMEJcdTExNzNcdTExQjcKXHUxMTAzXHUxMTYxXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTY1XHUxMTEwXHUxMTczClx1MTEwM1x1MTE2MVx1MTExMlx1MTE2Mlx1MTFCQwpcdTExMDNcdTExNjFcdTExQUJcdTExMDBcdTExNjgKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTAwXHUxMTY5XHUxMUFGClx1MTEwM1x1MTE2MVx1MTFBQlx1MTEwM1x1MTE2OVx1MTFBOApcdTExMDNcdTExNjFcdTExQUJcdTExMDZcdTExNjFcdTExQkEKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTA5XHUxMTZFXHUxMUFCClx1MTEwM1x1MTE2MVx1MTFBQlx1MTEwQlx1MTE2NQpcdTExMDNcdTExNjFcdTExQUJcdTExMEJcdTExNzEKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwM1x1MTE2MVx1MTFBQlx1MTEwRVx1MTE2NgpcdTExMDNcdTExNjFcdTExQUJcdTExMEVcdTExNkUKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTExXHUxMTY3XHUxMUFCClx1MTEwM1x1MTE2MVx1MTFBQlx1MTExMVx1MTE2RVx1MTFCQwpcdTExMDNcdTExNjFcdTExQUZcdTExMDBcdTExNjNcdTExQUYKXHUxMTAzXHUxMTYxXHUxMUFGXHUxMTA1XHUxMTY1Clx1MTEwM1x1MTE2MVx1MTFBRlx1MTEwNVx1MTE2N1x1MTFBOApcdTExMDNcdTExNjFcdTExQUZcdTExMDVcdTExNzUKXHUxMTAzXHUxMTYxXHUxMUIwXHUxMTAwXHUxMTY5XHUxMTAwXHUxMTc1Clx1MTEwM1x1MTE2MVx1MTFCN1x1MTEwM1x1MTE2MVx1MTFCQwpcdTExMDNcdTExNjFcdTExQjdcdTExMDdcdTExNjIKXHUxMTAzXHUxMTYxXHUxMUI3XHUxMTBCXHUxMTZEClx1MTEwM1x1MTE2MVx1MTFCN1x1MTEwQlx1MTE3NVx1MTFCNwpcdTExMDNcdTExNjFcdTExQjhcdTExMDdcdTExNjdcdTExQUIKXHUxMTAzXHUxMTYxXHUxMUI4XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwM1x1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3M1x1MTFBQgpcdTExMDNcdTExNjFcdTExQkNcdTExMDdcdTExNkVcdTExQUJcdTExMDBcdTExNjFcdTExQUIKXHUxMTAzXHUxMTYxXHUxMUJDXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwM1x1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDNcdTExNjJcdTExMDBcdTExNzJcdTExMDZcdTExNjkKXHUxMTAzXHUxMTYyXHUxMTAyXHUxMTYxXHUxMUJEClx1MTEwM1x1MTE2Mlx1MTEwM1x1MTE2MVx1MTFBQlx1MTExMlx1MTE3NQpcdTExMDNcdTExNjJcdTExMDNcdTExNjFcdTExQjgKXHUxMTAzXHUxMTYyXHUxMTAzXHUxMTY5XHUxMTA5XHUxMTc1Clx1MTEwM1x1MTE2Mlx1MTEwNVx1MTE2M1x1MTFBOApcdTExMDNcdTExNjJcdTExMDVcdTExNjNcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTA1XHUxMTcyXHUxMUE4Clx1MTEwM1x1MTE2Mlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMDNcdTExNjJcdTExMDdcdTExNkVcdTExMDdcdTExNkVcdTExQUIKXHUxMTAzXHUxMTYyXHUxMTA5XHUxMTc1XHUxMUFCClx1MTEwM1x1MTE2Mlx1MTEwQlx1MTE3M1x1MTFCQwpcdTExMDNcdTExNjJcdTExMENcdTExNjFcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTBDXHUxMTY1XHUxMUFCClx1MTEwM1x1MTE2Mlx1MTEwQ1x1MTE2NVx1MTFCOApcdTExMDNcdTExNjJcdTExMENcdTExNkVcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTBFXHUxMTYyXHUxMUE4Clx1MTEwM1x1MTE2Mlx1MTEwRVx1MTE2RVx1MTFBRgpcdTExMDNcdTExNjJcdTExMEVcdTExNkVcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTA1XHUxMTY3XHUxMUJDClx1MTEwM1x1MTE2Mlx1MTExMlx1MTE2MVx1MTFBOApcdTExMDNcdTExNjJcdTExMTJcdTExNjFcdTExQUJcdTExMDZcdTExNzVcdTExQUJcdTExMDBcdTExNkVcdTExQTgKXHUxMTAzXHUxMTYyXHUxMTEyXHUxMTYxXHUxMUI4XHUxMTA5XHUxMTc1XHUxMUFGClx1MTEwM1x1MTE2Mlx1MTExMlx1MTE2N1x1MTFCQwpcdTExMDNcdTExNjVcdTExQkNcdTExMEJcdTExNjVcdTExMDVcdTExNzUKXHUxMTAzXHUxMTY2XHUxMTBCXHUxMTc1XHUxMTEwXHUxMTczClx1MTEwM1x1MTE2OVx1MTEwM1x1MTE2Mlx1MTEwRVx1MTE2NgpcdTExMDNcdTExNjlcdTExMDNcdTExNjVcdTExQTgKXHUxMTAzXHUxMTY5XHUxMTAzXHUxMTZFXHUxMUE4Clx1MTEwM1x1MTE2OVx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMDNcdTExNjlcdTExMDlcdTExNjVcdTExMDBcdTExNkFcdTExQUIKXHUxMTAzXHUxMTY5XHUxMTA5XHUxMTc1XHUxMUI3Clx1MTEwM1x1MTE2OVx1MTEwQlx1MTE2RVx1MTFCNwpcdTExMDNcdTExNjlcdTExMEJcdTExNzVcdTExQjgKXHUxMTAzXHUxMTY5XHUxMTBDXHUxMTYxXHUxMTAwXHUxMTc1Clx1MTEwM1x1MTE2OVx1MTEwQ1x1MTE2NVx1MTExMlx1MTE3NQpcdTExMDNcdTExNjlcdTExMENcdTExNjVcdTExQUIKXHUxMTAzXHUxMTY5XHUxMTBDXHUxMTZFXHUxMUJDClx1MTEwM1x1MTE2OVx1MTEwRVx1MTE2MVx1MTFBOApcdTExMDNcdTExNjlcdTExQThcdTExMDBcdTExNjFcdTExQjcKXHUxMTAzXHUxMTY5XHUxMUE4XHUxMTA1XHUxMTc1XHUxMUI4Clx1MTEwM1x1MTE2OVx1MTFBOFx1MTEwOVx1MTE2NQpcdTExMDNcdTExNjlcdTExQThcdTExMEJcdTExNzVcdTExQUYKXHUxMTAzXHUxMTY5XHUxMUE4XHUxMTBFXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwM1x1MTE2OVx1MTFCQ1x1MTExMlx1MTE2QVx1MTEwRVx1MTE2Mlx1MTFBOApcdTExMDNcdTExNzFcdTExQkFcdTExMDZcdTExNjlcdTExMDlcdTExNzNcdTExQjgKXHUxMTAzXHUxMTcxXHUxMUJBXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwNFx1MTE2MVx1MTFBRlx1MTEwQlx1MTE2MVx1MTEwQlx1MTE3NQpcdTExMDZcdTExNjFcdTExMDJcdTExNkVcdTExMDVcdTExNjEKXHUxMTA2XHUxMTYxXHUxMTAyXHUxMTczXHUxMUFGClx1MTEwNlx1MTE2MVx1MTEwM1x1MTE2MVx1MTFCQwpcdTExMDZcdTExNjFcdTExMDVcdTExNjFcdTExMTBcdTExNjlcdTExQUIKXHUxMTA2XHUxMTYxXHUxMTA1XHUxMTY3XHUxMUFCClx1MTEwNlx1MTE2MVx1MTEwNlx1MTE2RVx1MTEwNVx1MTE3NQpcdTExMDZcdTExNjFcdTExMDlcdTExNjFcdTExMENcdTExNzUKXHUxMTA2XHUxMTYxXHUxMTBCXHUxMTYzXHUxMUE4Clx1MTEwNlx1MTE2MVx1MTEwQlx1MTE2RFx1MTEwMlx1MTE2Nlx1MTEwQ1x1MTE3MwpcdTExMDZcdTExNjFcdTExMEJcdTExNzNcdTExQUYKXHUxMTA2XHUxMTYxXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwNlx1MTE2MVx1MTEwQlx1MTE3NVx1MTEwRlx1MTE3MwpcdTExMDZcdTExNjFcdTExMENcdTExNkVcdTExQkMKXHUxMTA2XHUxMTYxXHUxMTBDXHUxMTc1XHUxMTA2XHUxMTYxXHUxMUE4Clx1MTEwNlx1MTE2MVx1MTEwRVx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2MVx1MTEwQ1x1MTE3NQpcdTExMDZcdTExNjFcdTExMEVcdTExNjFcdTExQUYKXHUxMTA2XHUxMTYxXHUxMTEyXHUxMTczXHUxMUFCClx1MTEwNlx1MTE2MVx1MTFBOFx1MTEwMFx1MTE2NVx1MTFBRlx1MTEwNVx1MTE3NQpcdTExMDZcdTExNjFcdTExQThcdTExMDJcdTExNjIKXHUxMTA2XHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwNlx1MTE2MVx1MTFBQlx1MTEwMlx1MTE2MVx1MTFCNwpcdTExMDZcdTExNjFcdTExQUJcdTExMDNcdTExNkUKXHUxMTA2XHUxMTYxXHUxMUFCXHUxMTA5XHUxMTY2Clx1MTEwNlx1MTE2MVx1MTFBQlx1MTEwQlx1MTE2M1x1MTFBOApcdTExMDZcdTExNjFcdTExQUJcdTExMEJcdTExNzVcdTExQUYKXHUxMTA2XHUxMTYxXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwNlx1MTE2MVx1MTFBQlx1MTEwQ1x1MTE2OVx1MTFBOApcdTExMDZcdTExNjFcdTExQUJcdTExMTJcdTExNkEKXHUxMTA2XHUxMTYxXHUxMUFEXHUxMTBCXHUxMTc1Clx1MTEwNlx1MTE2MVx1MTFBRlx1MTEwMFx1MTE3NQpcdTExMDZcdTExNjFcdTExQUZcdTExMEFcdTExNzNcdTExQjcKXHUxMTA2XHUxMTYxXHUxMUFGXHUxMTEwXHUxMTZFClx1MTEwNlx1MTE2MVx1MTFCN1x1MTEwM1x1MTE2Mlx1MTEwNVx1MTE2OQpcdTExMDZcdTExNjFcdTExQkNcdTExMEJcdTExNkZcdTExQUJcdTExMDBcdTExNjdcdTExQkMKXHUxMTA2XHUxMTYyXHUxMTAyXHUxMTY3XHUxMUFCClx1MTEwNlx1MTE2Mlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMDZcdTExNjJcdTExMDVcdTExNjdcdTExQTgKXHUxMTA2XHUxMTYyXHUxMTA3XHUxMTY1XHUxMUFCClx1MTEwNlx1MTE2Mlx1MTEwOVx1MTE3M1x1MTEwRlx1MTE2NVx1MTFCNwpcdTExMDZcdTExNjJcdTExMEJcdTExNzVcdTExQUYKXHUxMTA2XHUxMTYyXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwNlx1MTE2Mlx1MTFBOFx1MTEwQ1x1MTE2RQpcdTExMDZcdTExNjVcdTExQThcdTExMEJcdTExNzUKXHUxMTA2XHUxMTY1XHUxMUFCXHUxMTBDXHUxMTY1Clx1MTEwNlx1MTE2NVx1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMDZcdTExNjVcdTExQUZcdTExMDVcdTExNzUKXHUxMTA2XHUxMTY2XHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwNlx1MTE2N1x1MTEwMlx1MTE3M1x1MTEwNVx1MTE3NQpcdTExMDZcdTExNjdcdTExMEVcdTExNzVcdTExQUYKXHUxMTA2XHUxMTY3XHUxMUFCXHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwNlx1MTE2N1x1MTFBRlx1MTEwRVx1MTE3NQpcdTExMDZcdTExNjdcdTExQkNcdTExMDNcdTExNjFcdTExQUIKXHUxMTA2XHUxMTY3XHUxMUJDXHUxMTA1XHUxMTY3XHUxMUJDClx1MTEwNlx1MTE2N1x1MTFCQ1x1MTEwQlx1MTE2OApcdTExMDZcdTExNjdcdTExQkNcdTExMEJcdTExNzQKXHUxMTA2XHUxMTY3XHUxMUJDXHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwNlx1MTE2N1x1MTFCQ1x1MTEwRVx1MTE3NVx1MTFCQwpcdTExMDZcdTExNjdcdTExQkNcdTExMTJcdTExNjFcdTExQjcKXHUxMTA2XHUxMTY5XHUxMTAwXHUxMTczXHUxMUI3Clx1MTEwNlx1MTE2OVx1MTEwMlx1MTE3NVx1MTExMFx1MTE2NQpcdTExMDZcdTExNjlcdTExMDNcdTExNjZcdTExQUYKXHUxMTA2XHUxMTY5XHUxMTAzXHUxMTczXHUxMUFCClx1MTEwNlx1MTE2OVx1MTEwN1x1MTE2NVx1MTFCNwpcdTExMDZcdTExNjlcdTExMDlcdTExNzNcdTExQjgKXHUxMTA2XHUxMTY5XHUxMTBCXHUxMTYzXHUxMUJDClx1MTEwNlx1MTE2OVx1MTEwQlx1MTE3NVx1MTFCNwpcdTExMDZcdTExNjlcdTExMENcdTExNjlcdTExMDVcdTExNzUKXHUxMTA2XHUxMTY5XHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwNlx1MTE2OVx1MTExMFx1MTE2RVx1MTFCQ1x1MTEwQlx1MTE3NQpcdTExMDZcdTExNjlcdTExQThcdTExMDBcdTExNjVcdTExQUZcdTExMEJcdTExNzUKXHUxMTA2XHUxMTY5XHUxMUE4XHUxMTA1XHUxMTY5XHUxMUE4Clx1MTEwNlx1MTE2OVx1MTFBOFx1MTEwOVx1MTE2MQpcdTExMDZcdTExNjlcdTExQThcdTExMDlcdTExNjlcdTExMDVcdTExNzUKXHUxMTA2XHUxMTY5XHUxMUE4XHUxMTA5XHUxMTZFXHUxMUI3Clx1MTEwNlx1MTE2OVx1MTFBOFx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDZcdTExNjlcdTExQThcdTExMTFcdTExNkQKXHUxMTA2XHUxMTY5XHUxMUFGXHUxMTA1XHUxMTYyClx1MTEwNlx1MTE2OVx1MTFCN1x1MTEwNlx1MTE2MgpcdTExMDZcdTExNjlcdTExQjdcdTExMDZcdTExNkVcdTExMDBcdTExNjYKXHUxMTA2XHUxMTY5XHUxMUI3XHUxMTA5XHUxMTYxXHUxMUFGClx1MTEwNlx1MTE2OVx1MTFCN1x1MTEwOVx1MTE2OVx1MTFBOApcdTExMDZcdTExNjlcdTExQjdcdTExMENcdTExNzVcdTExQkEKXHUxMTA2XHUxMTY5XHUxMUI3XHUxMTEwXHUxMTY5XHUxMUJDClx1MTEwNlx1MTE2OVx1MTFCOFx1MTEwOVx1MTE3NQpcdTExMDZcdTExNkVcdTExMDBcdTExNkFcdTExQUJcdTExMDlcdTExNzVcdTExQjcKXHUxMTA2XHUxMTZFXHUxMTAwXHUxMTZFXHUxMUJDXHUxMTEyXHUxMTZBClx1MTEwNlx1MTE2RVx1MTEwM1x1MTE2NVx1MTEwQlx1MTE3MQpcdTExMDZcdTExNkVcdTExMDNcdTExNjVcdTExQjcKXHUxMTA2XHUxMTZFXHUxMTA1XHUxMTczXHUxMUMxClx1MTEwNlx1MTE2RVx1MTEwOVx1MTE3M1x1MTFBQgpcdTExMDZcdTExNkVcdTExMEJcdTExNjVcdTExQkEKXHUxMTA2XHUxMTZFXHUxMTBCXHUxMTY3XHUxMUE4Clx1MTEwNlx1MTE2RVx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDZcdTExNkVcdTExMENcdTExNjlcdTExMDBcdTExNjVcdTExQUIKXHUxMTA2XHUxMTZFXHUxMTBDXHUxMTc1XHUxMTAwXHUxMTYyClx1MTEwNlx1MTE2RVx1MTEwRVx1MTE2NVx1MTFBOApcdTExMDZcdTExNkVcdTExQUJcdTExMDBcdTExNkUKXHUxMTA2XHUxMTZFXHUxMUFCXHUxMTAzXHUxMTczXHUxMUE4Clx1MTEwNlx1MTE2RVx1MTFBQlx1MTEwN1x1MTE2NVx1MTFCOApcdTExMDZcdTExNkVcdTExQUJcdTExMDlcdTExNjUKXHUxMTA2XHUxMTZFXHUxMUFCXHUxMTBDXHUxMTY2Clx1MTEwNlx1MTE2RVx1MTFBQlx1MTExMlx1MTE2MVx1MTFBOApcdTExMDZcdTExNkVcdTExQUJcdTExMTJcdTExNkEKXHUxMTA2XHUxMTZFXHUxMUFGXHUxMTAwXHUxMTYxClx1MTEwNlx1MTE2RVx1MTFBRlx1MTEwMFx1MTE2NVx1MTFBQgpcdTExMDZcdTExNkVcdTExQUZcdTExMDBcdTExNjdcdTExQUYKXHUxMTA2XHUxMTZFXHUxMUFGXHUxMTAwXHUxMTY5XHUxMTAwXHUxMTc1Clx1MTEwNlx1MTE2RVx1MTFBRlx1MTEwNVx1MTE2OVx1MTFBQgpcdTExMDZcdTExNkVcdTExQUZcdTExMDVcdTExNzVcdTExMTJcdTExNjFcdTExQTgKXHUxMTA2XHUxMTZFXHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwNlx1MTE2RVx1MTFBRlx1MTEwQ1x1MTE3NVx1MTFBRgpcdTExMDZcdTExNkVcdTExQUZcdTExMEVcdTExNjYKXHUxMTA2XHUxMTc1XHUxMTAwXHUxMTZFXHUxMUE4Clx1MTEwNlx1MTE3NVx1MTEwM1x1MTE3NVx1MTEwQlx1MTE2NQpcdTExMDZcdTExNzVcdTExMDlcdTExNjFcdTExMEJcdTExNzVcdTExQUYKXHUxMTA2XHUxMTc1XHUxMTA5XHUxMTZFXHUxMUFGClx1MTEwNlx1MTE3NVx1MTEwQlx1MTE2N1x1MTFBOApcdTExMDZcdTExNzVcdTExMEJcdTExNkRcdTExQkNcdTExMDlcdTExNzVcdTExQUYKXHUxMTA2XHUxMTc1XHUxMTBCXHUxMTZFXHUxMUI3Clx1MTEwNlx1MTE3NVx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDZcdTExNzVcdTExMTBcdTExNzVcdTExQkMKXHUxMTA2XHUxMTc1XHUxMTEyXHUxMTY5XHUxMUFCClx1MTEwNlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE2MVx1MTFBQgpcdTExMDZcdTExNzVcdTExQUJcdTExMENcdTExNjlcdTExQTgKXHUxMTA2XHUxMTc1XHUxMUFCXHUxMTBDXHUxMTZFClx1MTEwNlx1MTE3NVx1MTFBRVx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDZcdTExNzVcdTExQUZcdTExMDBcdTExNjFcdTExMDVcdTExNkUKXHUxMTA2XHUxMTc1XHUxMUFGXHUxMTA1XHUxMTc1XHUxMTA2XHUxMTc1XHUxMTEwXHUxMTY1Clx1MTEwNlx1MTE3NVx1MTFDMFx1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExMDBcdTExNjFcdTExMENcdTExNzUKXHUxMTA3XHUxMTYxXHUxMTAwXHUxMTZFXHUxMTAyXHUxMTc1Clx1MTEwN1x1MTE2MVx1MTEwMlx1MTE2MVx1MTEwMlx1MTE2MQpcdTExMDdcdTExNjFcdTExMDJcdTExNzNcdTExQUYKXHUxMTA3XHUxMTYxXHUxMTAzXHUxMTYxXHUxMUE4Clx1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFCQVx1MTEwMFx1MTE2MQpcdTExMDdcdTExNjFcdTExMDVcdTExNjFcdTExQjcKXHUxMTA3XHUxMTYxXHUxMTBCXHUxMTc1XHUxMTA1XHUxMTY1XHUxMTA5XHUxMTczClx1MTEwN1x1MTE2MVx1MTExMFx1MTE2MVx1MTFCQwpcdTExMDdcdTExNjFcdTExQThcdTExMDZcdTExNkVcdTExQUZcdTExMDBcdTExNkFcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYxClx1MTEwN1x1MTE2MVx1MTFBOFx1MTEwOVx1MTE2RQpcdTExMDdcdTExNjFcdTExQUJcdTExMDNcdTExNjIKXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTAzXHUxMTczXHUxMTA5XHUxMTc1Clx1MTEwN1x1MTE2MVx1MTFBQlx1MTEwNlx1MTE2MVx1MTFBRgpcdTExMDdcdTExNjFcdTExQUJcdTExMDdcdTExNjFcdTExQUYKXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwN1x1MTE2MVx1MTFBQlx1MTEwQlx1MTE3M1x1MTFCQwpcdTExMDdcdTExNjFcdTExQUJcdTExMENcdTExNjFcdTExQkMKXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTBDXHUxMTZFXHUxMUE4Clx1MTEwN1x1MTE2MVx1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMDdcdTExNjFcdTExQUJcdTExMEVcdTExNjFcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUFFXHUxMTBFXHUxMTc1XHUxMUI3Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwMFx1MTE2MVx1MTEwNVx1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExQUZcdTExMDBcdTExNjVcdTExQUZcdTExMEJcdTExNzNcdTExQjcKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTAwXHUxMTY3XHUxMUFCClx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMDdcdTExNjFcdTExQUZcdTExMDVcdTExNjYKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTA2XHUxMTY5XHUxMUE4Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExQUZcdTExMDlcdTExNjJcdTExQkMKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwQ1x1MTE2MVx1MTEwMFx1MTE2RVx1MTFBOApcdTExMDdcdTExNjFcdTExQUZcdTExMENcdTExNjVcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTEwXHUxMTY5XHUxMUI4Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTExMVx1MTE2RApcdTExMDdcdTExNjFcdTExQjdcdTExMTJcdTExNjFcdTExMDJcdTExNzNcdTExQUYKXHUxMTA3XHUxMTYxXHUxMUI4XHUxMTAwXHUxMTczXHUxMTA1XHUxMTczXHUxMUJBClx1MTEwN1x1MTE2MVx1MTFCOFx1MTEwNlx1MTE2MVx1MTFCQQpcdTExMDdcdTExNjFcdTExQjhcdTExMDlcdTExNjFcdTExQkMKXHUxMTA3XHUxMTYxXHUxMUI4XHUxMTA5XHUxMTY5XHUxMUMwClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDdcdTExNjFcdTExQkNcdTExMDZcdTExNjdcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExQkNcdTExMDdcdTExNjVcdTExQjgKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTA5XHUxMTY5XHUxMUJDClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwOVx1MTE3NVx1MTFBOApcdTExMDdcdTExNjFcdTExQkNcdTExMEJcdTExNjFcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTBCXHUxMTZFXHUxMUFGClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE3NQpcdTExMDdcdTExNjFcdTExQkNcdTExMTJcdTExNjFcdTExQTgKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTEyXHUxMTYyClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTExMlx1MTE2M1x1MTFCQwpcdTExMDdcdTExNjJcdTExMDBcdTExNjdcdTExQkMKXHUxMTA3XHUxMTYyXHUxMTAxXHUxMTY5XHUxMUI4Clx1MTEwN1x1MTE2Mlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMDdcdTExNjJcdTExMDNcdTExNzNcdTExMDZcdTExNzVcdTExQUJcdTExMTBcdTExNjVcdTExQUIKXHUxMTA3XHUxMTYyXHUxMUE4XHUxMTAzXHUxMTZFXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwN1x1MTE2Mlx1MTFBOFx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDdcdTExNjJcdTExQThcdTExMDlcdTExNjVcdTExQkMKXHUxMTA3XHUxMTYyXHUxMUE4XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwN1x1MTE2Mlx1MTFBOFx1MTEwQ1x1MTE2NgpcdTExMDdcdTExNjJcdTExQThcdTExMTJcdTExNkFcdTExMENcdTExNjVcdTExQjcKXHUxMTA3XHUxMTY1XHUxMTA1XHUxMTczXHUxMUJBClx1MTEwN1x1MTE2NVx1MTEwOVx1MTE2NVx1MTFCQQpcdTExMDdcdTExNjVcdTExMTBcdTExNzNcdTExQUIKXHUxMTA3XHUxMTY1XHUxMUFCXHUxMTAwXHUxMTYyClx1MTEwN1x1MTE2NVx1MTFBQlx1MTEwQlx1MTE2N1x1MTFBOApcdTExMDdcdTExNjVcdTExQUJcdTExMENcdTExNzUKXHUxMTA3XHUxMTY1XHUxMUFCXHUxMTEyXHUxMTY5Clx1MTEwN1x1MTE2NVx1MTFBRlx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDdcdTExNjVcdTExQUZcdTExMDVcdTExNjYKXHUxMTA3XHUxMTY1XHUxMUFGXHUxMTBBXHUxMTY1Clx1MTEwN1x1MTE2NVx1MTFCN1x1MTEwQlx1MTE3MQpcdTExMDdcdTExNjVcdTExQjdcdTExMEJcdTExNzVcdTExQUIKXHUxMTA3XHUxMTY1XHUxMUI3XHUxMTBDXHUxMTZDClx1MTEwN1x1MTE2NVx1MTFCOFx1MTEwNVx1MTE3Mlx1MTFBRgpcdTExMDdcdTExNjVcdTExQjhcdTExMEJcdTExNkZcdTExQUIKXHUxMTA3XHUxMTY1XHUxMUI4XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwN1x1MTE2NVx1MTFCOFx1MTEwRVx1MTE3NVx1MTFBOApcdTExMDdcdTExNjZcdTExMEJcdTExNzVcdTExMENcdTExNzVcdTExQkMKXHUxMTA3XHUxMTY2XHUxMUFGXHUxMTEwXHUxMTczClx1MTEwN1x1MTE2N1x1MTFBQlx1MTEwMFx1MTE2N1x1MTFCQwpcdTExMDdcdTExNjdcdTExQUJcdTExMDNcdTExNjlcdTExQkMKXHUxMTA3XHUxMTY3XHUxMUFCXHUxMTA2XHUxMTY3XHUxMUJDClx1MTEwN1x1MTE2N1x1MTFBQlx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMDdcdTExNjdcdTExQUJcdTExMTJcdTExNjlcdTExMDlcdTExNjEKXHUxMTA3XHUxMTY3XHUxMUFCXHUxMTEyXHUxMTZBClx1MTEwN1x1MTE2N1x1MTFBRlx1MTEwM1x1MTE2OQpcdTExMDdcdTExNjdcdTExQUZcdTExMDZcdTExNjdcdTExQkMKXHUxMTA3XHUxMTY3XHUxMUFGXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwN1x1MTE2N1x1MTFCQ1x1MTEwOVx1MTE3NVx1MTFBRgpcdTExMDdcdTExNjdcdTExQkNcdTExMEJcdTExNjFcdTExMDVcdTExNzUKXHUxMTA3XHUxMTY3XHUxMUJDXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwN1x1MTE2OVx1MTEwMFx1MTE2QVx1MTFBQgpcdTExMDdcdTExNjlcdTExMDJcdTExNjVcdTExMDlcdTExNzMKXHUxMTA3XHUxMTY5XHUxMTA1XHUxMTYxXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTEwN1x1MTE2OVx1MTEwNVx1MTE2MVx1MTFCNwpcdTExMDdcdTExNjlcdTExMDVcdTExNzNcdTExQjcKXHUxMTA3XHUxMTY5XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwN1x1MTE2OVx1MTEwQlx1MTE2MVx1MTFBQgpcdTExMDdcdTExNjlcdTExMENcdTExNjFcdTExMDBcdTExNzUKXHUxMTA3XHUxMTY5XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwN1x1MTE2OVx1MTEwQ1x1MTE2NVx1MTFBQgpcdTExMDdcdTExNjlcdTExMENcdTExNjlcdTExQUIKXHUxMTA3XHUxMTY5XHUxMTEwXHUxMTY5XHUxMUJDClx1MTEwN1x1MTE2OVx1MTExMVx1MTE2N1x1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDdcdTExNjlcdTExMTJcdTExNjVcdTExQjcKXHUxMTA3XHUxMTY5XHUxMUE4XHUxMTAzXHUxMTY5Clx1MTEwN1x1MTE2OVx1MTFBOFx1MTEwOVx1MTE2MQpcdTExMDdcdTExNjlcdTExQThcdTExMDlcdTExNkVcdTExQkNcdTExMEJcdTExNjEKXHUxMTA3XHUxMTY5XHUxMUE4XHUxMTA5XHUxMTczXHUxMUI4Clx1MTEwN1x1MTE2OVx1MTFBOVx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDdcdTExNjlcdTExQUJcdTExMDBcdTExNjdcdTExQThcdTExMENcdTExNjVcdTExQTgKXHUxMTA3XHUxMTY5XHUxMUFCXHUxMTA1XHUxMTYyClx1MTEwN1x1MTE2OVx1MTFBQlx1MTEwN1x1MTE2RQpcdTExMDdcdTExNjlcdTExQUJcdTExMDlcdTExNjEKXHUxMTA3XHUxMTY5XHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwN1x1MTE2OVx1MTFBQlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDdcdTExNjlcdTExQUJcdTExMENcdTExNzVcdTExQUYKXHUxMTA3XHUxMTY5XHUxMUFGXHUxMTExXHUxMTY2XHUxMUFCClx1MTEwN1x1MTE2OVx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMDdcdTExNjlcdTExQkNcdTExMENcdTExNzUKXHUxMTA3XHUxMTY5XHUxMUJDXHUxMTEwXHUxMTZFClx1MTEwN1x1MTE2RVx1MTEwMFx1MTE3M1x1MTFBQgpcdTExMDdcdTExNkVcdTExMDFcdTExNzNcdTExMDVcdTExNjVcdTExMEJcdTExNkVcdTExQjcKXHUxMTA3XHUxMTZFXHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwN1x1MTE2RVx1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwOVx1MTE2MVx1MTFBQgpcdTExMDdcdTExNkVcdTExMDZcdTExNkVcdTExQUIKXHUxMTA3XHUxMTZFXHUxMTA3XHUxMTZFXHUxMUFCClx1MTEwN1x1MTE2RVx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMDdcdTExNkVcdTExMDlcdTExNjFcdTExQkMKXHUxMTA3XHUxMTZFXHUxMTBCXHUxMTY1XHUxMUJGClx1MTEwN1x1MTE2RVx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDdcdTExNkVcdTExMENcdTExNjFcdTExQThcdTExMEJcdTExNkRcdTExQkMKXHUxMTA3XHUxMTZFXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwN1x1MTE2RVx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMDdcdTExNkVcdTExMENcdTExNjlcdTExQTgKXHUxMTA3XHUxMTZFXHUxMTBDXHUxMTc1XHUxMTA1XHUxMTY1XHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwN1x1MTE2RVx1MTEwRVx1MTE3NVx1MTFBQgpcdTExMDdcdTExNkVcdTExMTBcdTExNjFcdTExQTgKXHUxMTA3XHUxMTZFXHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwN1x1MTE2RVx1MTExMlx1MTE2Q1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDdcdTExNkVcdTExQThcdTExMDdcdTExNkUKXHUxMTA3XHUxMTZFXHUxMUE4XHUxMTEyXHUxMTYxXHUxMUFCClx1MTEwN1x1MTE2RVx1MTFBQlx1MTEwMlx1MTE2OQpcdTExMDdcdTExNkVcdTExQUJcdTExMDVcdTExNjNcdTExQkMKXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTA1XHUxMTc1Clx1MTEwN1x1MTE2RVx1MTFBQlx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDdcdTExNkVcdTExQUJcdTExMDlcdTExNjVcdTExQTgKXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTBCXHUxMTYzClx1MTEwN1x1MTE2RVx1MTFBQlx1MTEwQlx1MTE3MVx1MTEwMFx1MTE3NQpcdTExMDdcdTExNkVcdTExQUJcdTExMTFcdTExNzVcdTExQUYKXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTEyXHUxMTY5XHUxMUJDXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTEwN1x1MTE2RVx1MTFBRlx1MTEwMFx1MTE2OVx1MTEwMFx1MTE3NQpcdTExMDdcdTExNkVcdTExQUZcdTExMDBcdTExNkEKXHUxMTA3XHUxMTZFXHUxMUFGXHUxMTAwXHUxMTZEClx1MTEwN1x1MTE2RVx1MTFBRlx1MTEwMVx1MTE2OVx1MTFCRQpcdTExMDdcdTExNkVcdTExQUZcdTExMDZcdTExNjFcdTExQUIKXHUxMTA3XHUxMTZFXHUxMUFGXHUxMTA3XHUxMTY1XHUxMUI4Clx1MTEwN1x1MTE2RVx1MTFBRlx1MTEwN1x1MTE3NVx1MTFCRQpcdTExMDdcdTExNkVcdTExQUZcdTExMEJcdTExNjFcdTExQUIKXHUxMTA3XHUxMTZFXHUxMUFGXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTc1XHUxMUE4Clx1MTEwN1x1MTE2RVx1MTFBRlx1MTExMlx1MTE2Mlx1MTFCQwpcdTExMDdcdTExNzNcdTExMDVcdTExNjJcdTExQUJcdTExMDNcdTExNzMKXHUxMTA3XHUxMTc1XHUxMTAwXHUxMTczXHUxMUE4Clx1MTEwN1x1MTE3NVx1MTEwMlx1MTE2MVx1MTFBQgpcdTExMDdcdTExNzVcdTExMDJcdTExNzVcdTExQUYKXHUxMTA3XHUxMTc1XHUxMTAzXHUxMTZFXHUxMUFGXHUxMTAwXHUxMTc1Clx1MTEwN1x1MTE3NVx1MTEwM1x1MTE3NVx1MTEwQlx1MTE2OQpcdTExMDdcdTExNzVcdTExMDVcdTExNjlcdTExMDlcdTExNjkKXHUxMTA3XHUxMTc1XHUxMTA2XHUxMTYxXHUxMUFCClx1MTEwN1x1MTE3NVx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDdcdTExNzVcdTExMDZcdTExNzVcdTExQUYKXHUxMTA3XHUxMTc1XHUxMTA3XHUxMTYxXHUxMTA1XHUxMTYxXHUxMUI3Clx1MTEwN1x1MTE3NVx1MTEwN1x1MTE3NVx1MTFCN1x1MTEwN1x1MTE2MVx1MTFCOApcdTExMDdcdTExNzVcdTExMDlcdTExNjFcdTExQkMKXHUxMTA3XHUxMTc1XHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwN1x1MTE3NVx1MTEwQlx1MTE3Mlx1MTFBRgpcdTExMDdcdTExNzVcdTExMENcdTExNkVcdTExQkMKXHUxMTA3XHUxMTc1XHUxMTEwXHUxMTYxXHUxMTA2XHUxMTc1XHUxMUFCClx1MTEwN1x1MTE3NVx1MTExMVx1MTE2MVx1MTFBQgpcdTExMDdcdTExNzVcdTExQUZcdTExMDNcdTExNzVcdTExQkMKXHUxMTA3XHUxMTc1XHUxMUJBXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwN1x1MTE3NVx1MTFCQVx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2RVx1MTFBRgpcdTExMDdcdTExNzVcdTExQkFcdTExMENcdTExNkVcdTExQUZcdTExMDBcdTExNzUKXHUxMTA3XHUxMTc1XHUxMUJFXHUxMTAxXHUxMTYxXHUxMUFGClx1MTEwOFx1MTE2MVx1MTFBRlx1MTEwMFx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDhcdTExNjFcdTExQUZcdTExMDVcdTExNjIKXHUxMTA4XHUxMTYxXHUxMUFGXHUxMTA1XHUxMTc1Clx1MTEwOVx1MTE2MVx1MTEwMFx1MTE2NVx1MTFBQgpcdTExMDlcdTExNjFcdTExMDBcdTExNjhcdTExMENcdTExNjVcdTExQUYKXHUxMTA5XHUxMTYxXHUxMTAyXHUxMTYxXHUxMTBCXHUxMTc1Clx1MTEwOVx1MTE2MVx1MTEwMlx1MTE2M1x1MTFCQwpcdTExMDlcdTExNjFcdTExMDVcdTExNjFcdTExQjcKXHUxMTA5XHUxMTYxXHUxMTA1XHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2MVx1MTEwNVx1MTE3NVx1MTFCOApcdTExMDlcdTExNjFcdTExMDZcdTExNjlcdTExMDJcdTExNzVcdTExQjcKXHUxMTA5XHUxMTYxXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwN1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNjFcdTExMDlcdTExNjFcdTExQkMKXHUxMTA5XHUxMTYxXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTEyXHUxMTZBXHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMDlcdTExNjFcdTExMDlcdTExNzNcdTExQjcKXHUxMTA5XHUxMTYxXHUxMTA5XHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwQlx1MTE2NVx1MTFCOApcdTExMDlcdTExNjFcdTExMEJcdTExNkRcdTExQkMKXHUxMTA5XHUxMTYxXHUxMTBCXHUxMTZGXHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNjFcdTExMENcdTExNjVcdTExQUIKXHUxMTA5XHUxMTYxXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwOVx1MTE2MVx1MTEwRVx1MTE2OVx1MTFBQgpcdTExMDlcdTExNjFcdTExMEVcdTExNkVcdTExQUJcdTExMDBcdTExNzUKXHUxMTA5XHUxMTYxXHUxMTEwXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2MVx1MTExMFx1MTE2RVx1MTEwNVx1MTE3NQpcdTExMDlcdTExNjFcdTExMTJcdTExNzNcdTExQUYKXHUxMTA5XHUxMTYxXHUxMUFCXHUxMTAwXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2MVx1MTFBQlx1MTEwN1x1MTE2RVx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE2QQpcdTExMDlcdTExNjFcdTExQUJcdTExMEJcdTExNjVcdTExQjgKXHUxMTA5XHUxMTYxXHUxMUFCXHUxMTBFXHUxMTYyXHUxMUE4Clx1MTEwOVx1MTE2MVx1MTFBRlx1MTEwNVx1MTE3NVx1MTFCNwpcdTExMDlcdTExNjFcdTExQUZcdTExMEJcdTExNzVcdTExQUIKXHUxMTA5XHUxMTYxXHUxMUFGXHUxMTBEXHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE2MVx1MTFCN1x1MTEwMFx1MTE2OFx1MTExMFx1MTE2MVx1MTFCQwpcdTExMDlcdTExNjFcdTExQjdcdTExMDBcdTExNkVcdTExQTgKXHUxMTA5XHUxMTYxXHUxMUI3XHUxMTA5XHUxMTc1XHUxMUI4Clx1MTEwOVx1MTE2MVx1MTFCN1x1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMDlcdTExNjFcdTExQjdcdTExMEVcdTExNjlcdTExQUIKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTAwXHUxMTZBXHUxMUFCClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDlcdTExNjFcdTExQkNcdTExMDNcdTExNjIKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTA1XHUxMTcyClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTFBQlx1MTEwMFx1MTE3NQpcdTExMDlcdTExNjFcdTExQkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2NVx1MTFCOApcdTExMDlcdTExNjFcdTExQkNcdTExMEJcdTExNzVcdTExQUIKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTBDXHUxMTYxClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDlcdTExNjFcdTExQkNcdTExMEVcdTExNjUKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTBFXHUxMTZFClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTExMFx1MTE2MgpcdTExMDlcdTExNjFcdTExQkNcdTExMTFcdTExNkQKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwOVx1MTE2MVx1MTFCQ1x1MTExMlx1MTE2QVx1MTFCQwpcdTExMDlcdTExNjJcdTExMDdcdTExNjdcdTExQTgKXHUxMTA5XHUxMTYyXHUxMUE4XHUxMTAxXHUxMTYxXHUxMUFGClx1MTEwOVx1MTE2Mlx1MTFBOFx1MTEwQlx1MTE2N1x1MTFBQlx1MTExMVx1MTE3NVx1MTFBRgpcdTExMDlcdTExNjJcdTExQkNcdTExMDBcdTExNjFcdTExQTgKXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTA2XHUxMTY3XHUxMUJDClx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNjJcdTExQkNcdTExMDdcdTExNjFcdTExQkNcdTExMDlcdTExNjlcdTExQkMKXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTEwOVx1MTE2NVx1MTFBQgpcdTExMDlcdTExNjJcdTExQkNcdTExMDlcdTExNzVcdTExQUIKXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTExMlx1MTE2QVx1MTFBRgpcdTExMDlcdTExNjVcdTExMDVcdTExNjFcdTExQjgKXHUxMTA5XHUxMTY1XHUxMTA1XHUxMTczXHUxMUFCClx1MTEwOVx1MTE2NVx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDlcdTExNjVcdTExMDZcdTExNzVcdTExQUIKXHUxMTA5XHUxMTY1XHUxMTA3XHUxMTc1XHUxMTA5XHUxMTczClx1MTEwOVx1MTE2NVx1MTEwQlx1MTE2M1x1MTFCQwpcdTExMDlcdTExNjVcdTExMEJcdTExNkVcdTExQUYKXHUxMTA5XHUxMTY1XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwOVx1MTE2NVx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDlcdTExNjVcdTExMERcdTExNjlcdTExQTgKXHUxMTA5XHUxMTY1XHUxMTBGXHUxMTczXHUxMUFGClx1MTEwOVx1MTE2NVx1MTFBOFx1MTEwOVx1MTE2MQpcdTExMDlcdTExNjVcdTExQThcdTExMEJcdTExNzIKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTAwXHUxMTY1Clx1MTEwOVx1MTE2NVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNjVcdTExQUJcdTExMDdcdTExNjIKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFBQlx1MTEwOVx1MTE2RQpcdTExMDlcdTExNjVcdTExQUJcdTExMEJcdTExNkZcdTExQUIKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBQgpcdTExMDlcdTExNjVcdTExQUJcdTExMTBcdTExNjJcdTExQTgKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTExXHUxMTZFXHUxMUJDXHUxMTAwXHUxMTc1Clx1MTEwOVx1MTE2NVx1MTFBRlx1MTEwMFx1MTE2NVx1MTEwQ1x1MTE3NQpcdTExMDlcdTExNjVcdTExQUZcdTExMDJcdTExNjFcdTExQUYKXHUxMTA5XHUxMTY1XHUxMUFGXHUxMTA1XHUxMTY1XHUxMUJDXHUxMTEwXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFBRlx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDlcdTExNjVcdTExQUZcdTExMDZcdTExNkVcdTExQUIKXHUxMTA5XHUxMTY1XHUxMUFGXHUxMTA5XHUxMTYxClx1MTEwOVx1MTE2NVx1MTFBRlx1MTEwQlx1MTE2MVx1MTFBOFx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMDlcdTExNjVcdTExQUZcdTExMEVcdTExNzUKXHUxMTA5XHUxMTY1XHUxMUFGXHUxMTEwXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFCOFx1MTEwQVx1MTE3NQpcdTExMDlcdTExNjVcdTExQkNcdTExMDBcdTExNjlcdTExQkMKXHUxMTA5XHUxMTY1XHUxMUJDXHUxMTAzXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFCQ1x1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDlcdTExNjVcdTExQkNcdTExMDdcdTExNjdcdTExQUYKXHUxMTA5XHUxMTY1XHUxMUJDXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwOVx1MTE2NVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNjVcdTExQkNcdTExMENcdTExNjVcdTExQTgKXHUxMTA5XHUxMTY1XHUxMUJDXHUxMTBDXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2NVx1MTFCQ1x1MTExMlx1MTE2MVx1MTFCNwpcdTExMDlcdTExNjZcdTExMDBcdTExNzNcdTExQjcKXHUxMTA5XHUxMTY2XHUxMTA2XHUxMTc1XHUxMTAyXHUxMTYxClx1MTEwOVx1MTE2Nlx1MTEwOVx1MTE2MVx1MTFCQwpcdTExMDlcdTExNjZcdTExMEJcdTExNkZcdTExQUYKXHUxMTA5XHUxMTY2XHUxMTBDXHUxMTY5XHUxMUJDXHUxMTAzXHUxMTYyXHUxMTBCXHUxMTZBXHUxMUJDClx1MTEwOVx1MTE2Nlx1MTExMFx1MTE2MVx1MTFBOApcdTExMDlcdTExNjZcdTExQUJcdTExMTBcdTExNjUKXHUxMTA5XHUxMTY2XHUxMUFCXHUxMTEwXHUxMTc1XHUxMTA2XHUxMTc1XHUxMTEwXHUxMTY1Clx1MTEwOVx1MTE2Nlx1MTFCQVx1MTEwRFx1MTE2MgpcdTExMDlcdTExNjlcdTExMDBcdTExNzJcdTExMDZcdTExNjkKXHUxMTA5XHUxMTY5XHUxMTAwXHUxMTczXHUxMUE4XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwOVx1MTE2OVx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDlcdTExNjlcdTExMDJcdTExNjFcdTExMDBcdTExNzUKXHUxMTA5XHUxMTY5XHUxMTAyXHUxMTY3XHUxMUFCClx1MTEwOVx1MTE2OVx1MTEwM1x1MTE3M1x1MTFBOApcdTExMDlcdTExNjlcdTExMDZcdTExNjFcdTExQkMKXHUxMTA5XHUxMTY5XHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwOVx1MTE2OVx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMDlcdTExNjlcdTExMDlcdTExNjlcdTExQTgKXHUxMTA5XHUxMTY5XHUxMTBCXHUxMTYxXHUxMTAwXHUxMTZBClx1MTEwOVx1MTE2OVx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDlcdTExNjlcdTExMEJcdTExNkZcdTExQUIKXHUxMTA5XHUxMTY5XHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwOVx1MTE2OVx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTExMlx1MTE3NQpcdTExMDlcdTExNjlcdTExMENcdTExNzVcdTExMTFcdTExNkVcdTExQjcKXHUxMTA5XHUxMTY5XHUxMTBDXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2OVx1MTExMVx1MTE2RVx1MTFCQwpcdTExMDlcdTExNjlcdTExMTJcdTExNjdcdTExQkMKXHUxMTA5XHUxMTY5XHUxMUE4XHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwOVx1MTE2OVx1MTFBOFx1MTEwM1x1MTE2OQpcdTExMDlcdTExNjlcdTExQThcdTExMEJcdTExNjlcdTExQkEKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTAwXHUxMTYxXHUxMTA1XHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTEwMFx1MTE3NVx1MTFBRgpcdTExMDlcdTExNjlcdTExQUJcdTExMDJcdTExNjcKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTAyXHUxMTc1XHUxMUI3Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTEwM1x1MTE3M1x1MTFCQwpcdTExMDlcdTExNjlcdTExQUJcdTExMDZcdTExNjlcdTExQTgKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTA4XHUxMTY3XHUxMUE4Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTEwOVx1MTE3NVx1MTFBRgpcdTExMDlcdTExNjlcdTExQUJcdTExMENcdTExNzVcdTExQUYKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTEwXHUxMTY5XHUxMUI4Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTExMlx1MTE2MgpcdTExMDlcdTExNjlcdTExQUZcdTExMENcdTExNzVcdTExQThcdTExMTJcdTExNzUKXHUxMTA5XHUxMTY5XHUxMUI3XHUxMTBBXHUxMTc1Clx1MTEwOVx1MTE2OVx1MTFCQ1x1MTEwQlx1MTE2MVx1MTEwQ1x1MTE3NQpcdTExMDlcdTExNjlcdTExQkNcdTExMEJcdTExNzUKXHUxMTA5XHUxMTY5XHUxMUJDXHUxMTExXHUxMTY3XHUxMUFCClx1MTEwOVx1MTE2Q1x1MTEwMFx1MTE2OVx1MTEwMFx1MTE3NQpcdTExMDlcdTExNkRcdTExMTFcdTExNzVcdTExQkMKXHUxMTA5XHUxMTZFXHUxMTAwXHUxMTY1XHUxMUFCClx1MTEwOVx1MTE2RVx1MTEwMlx1MTE2N1x1MTFBQgpcdTExMDlcdTExNkVcdTExMDNcdTExNjFcdTExQUIKXHUxMTA5XHUxMTZFXHUxMTAzXHUxMTY5XHUxMUJBXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwOVx1MTE2RVx1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDlcdTExNkVcdTExMDZcdTExNjdcdTExQUIKXHUxMTA5XHUxMTZFXHUxMTA2XHUxMTY3XHUxMUJDClx1MTEwOVx1MTE2RVx1MTEwN1x1MTE2MVx1MTFBOApcdTExMDlcdTExNkVcdTExMDlcdTExNjFcdTExQkMKXHUxMTA5XHUxMTZFXHUxMTA5XHUxMTY1XHUxMUE4Clx1MTEwOVx1MTE2RVx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMDlcdTExNkVcdTExMDlcdTExNzVcdTExMDVcdTExNjkKXHUxMTA5XHUxMTZFXHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwOVx1MTE2RVx1MTEwQlx1MTE2N1x1MTFCNwpcdTExMDlcdTExNkVcdTExMEJcdTExNjdcdTExQkMKXHUxMTA5XHUxMTZFXHUxMTBCXHUxMTc1XHUxMUI4Clx1MTEwOVx1MTE2RVx1MTEwQ1x1MTE2RVx1MTFBQgpcdTExMDlcdTExNkVcdTExMENcdTExNzVcdTExQjgKXHUxMTA5XHUxMTZFXHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwOVx1MTE2RVx1MTEwRlx1MTE2NVx1MTFCQQpcdTExMDlcdTExNkVcdTExMTFcdTExNzVcdTExQUYKXHUxMTA5XHUxMTZFXHUxMTEyXHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE2RVx1MTExMlx1MTE2NVx1MTFCN1x1MTEwOVx1MTE2Mlx1MTFCQwpcdTExMDlcdTExNkVcdTExMTJcdTExNkFcdTExMDBcdTExNzUKXHUxMTA5XHUxMTZFXHUxMUE4XHUxMTAyXHUxMTY3Clx1MTEwOVx1MTE2RVx1MTFBOFx1MTEwOVx1MTE2OQpcdTExMDlcdTExNkVcdTExQThcdTExMENcdTExNjYKXHUxMTA5XHUxMTZFXHUxMUFCXHUxMTAwXHUxMTYxXHUxMUFCClx1MTEwOVx1MTE2RVx1MTFBQlx1MTEwOVx1MTE2NQpcdTExMDlcdTExNkVcdTExQUJcdTExMDlcdTExNkUKXHUxMTA5XHUxMTZFXHUxMUFCXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTAwXHUxMTYxXHUxMUFCClx1MTEwOVx1MTE2RVx1MTFBQlx1MTEwQlx1MTE3MQpcdTExMDlcdTExNkVcdTExQUVcdTExMDBcdTExNjFcdTExMDVcdTExNjFcdTExQTgKXHUxMTA5XHUxMTZFXHUxMUFGXHUxMTA3XHUxMTY3XHUxMUJDClx1MTEwOVx1MTE2RVx1MTFBRlx1MTEwQ1x1MTE3NVx1MTFCOApcdTExMDlcdTExNkVcdTExQkFcdTExMENcdTExNjEKXHUxMTA5XHUxMTczXHUxMTAyXHUxMTc1XHUxMUI3Clx1MTEwOVx1MTE3M1x1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNzNcdTExMDlcdTExNzNcdTExMDVcdTExNjkKXHUxMTA5XHUxMTczXHUxMTA5XHUxMTczXHUxMUJDClx1MTEwOVx1MTE3M1x1MTEwQlx1MTE3MFx1MTExMFx1MTE2NQpcdTExMDlcdTExNzNcdTExMEJcdTExNzFcdTExMEVcdTExNzUKXHUxMTA5XHUxMTczXHUxMTBGXHUxMTY2XHUxMTBCXHUxMTc1XHUxMTEwXHUxMTczClx1MTEwOVx1MTE3M1x1MTExMFx1MTE3Mlx1MTEwM1x1MTE3NVx1MTEwQlx1MTE2OQpcdTExMDlcdTExNzNcdTExMTBcdTExNzNcdTExMDVcdTExNjZcdTExMDlcdTExNzMKXHUxMTA5XHUxMTczXHUxMTExXHUxMTY5XHUxMTBFXHUxMTczClx1MTEwOVx1MTE3M1x1MTFBRlx1MTEwRFx1MTE2NVx1MTFBOApcdTExMDlcdTExNzNcdTExQUZcdTExMTFcdTExNzNcdTExQjcKXHUxMTA5XHUxMTczXHUxMUI4XHUxMTAwXHUxMTZBXHUxMUFCClx1MTEwOVx1MTE3M1x1MTFCOFx1MTEwMFx1MTE3NQpcdTExMDlcdTExNzNcdTExQkNcdTExMDBcdTExNjJcdTExQTgKXHUxMTA5XHUxMTczXHUxMUJDXHUxMTA1XHUxMTc1Clx1MTEwOVx1MTE3M1x1MTFCQ1x1MTEwN1x1MTE2RQpcdTExMDlcdTExNzNcdTExQkNcdTExMEJcdTExNkRcdTExQkNcdTExMEVcdTExNjEKXHUxMTA5XHUxMTczXHUxMUJDXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwOVx1MTE3NVx1MTEwMFx1MTE2MVx1MTFBOApcdTExMDlcdTExNzVcdTExMDBcdTExNjFcdTExQUIKXHUxMTA5XHUxMTc1XHUxMTAwXHUxMTY5XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwRVx1MTE3NQpcdTExMDlcdTExNzVcdTExMDJcdTExNjFcdTExMDVcdTExNzVcdTExMEJcdTExNjkKXHUxMTA5XHUxMTc1XHUxMTAzXHUxMTYyXHUxMUE4Clx1MTEwOVx1MTE3NVx1MTEwNVx1MTE3NVx1MTEwQ1x1MTE3MwpcdTExMDlcdTExNzVcdTExMDZcdTExNjZcdTExQUJcdTExMTBcdTExNzMKXHUxMTA5XHUxMTc1XHUxMTA2XHUxMTc1XHUxMUFCClx1MTEwOVx1MTE3NVx1MTEwN1x1MTE2RVx1MTEwNlx1MTE2OQpcdTExMDlcdTExNzVcdTExMDlcdTExNjVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMTA5XHUxMTY1XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwOVx1MTE3M1x1MTExMFx1MTE2Nlx1MTFCNwpcdTExMDlcdTExNzVcdTExMEJcdTExNjFcdTExMDdcdTExNjVcdTExMENcdTExNzUKXHUxMTA5XHUxMTc1XHUxMTBCXHUxMTY1XHUxMTA2XHUxMTY1XHUxMTAyXHUxMTc1Clx1MTEwOVx1MTE3NVx1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMDlcdTExNzVcdTExMEJcdTExNzVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwQ1x1MTE2MVx1MTFBOApcdTExMDlcdTExNzVcdTExMENcdTExNjFcdTExQkMKXHUxMTA5XHUxMTc1XHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDlcdTExNzVcdTExMENcdTExNkVcdTExQkMKXHUxMTA5XHUxMTc1XHUxMTBDXHUxMTczXHUxMUFCClx1MTEwOVx1MTE3NVx1MTEwQ1x1MTE3NVx1MTFCOApcdTExMDlcdTExNzVcdTExMEVcdTExNjVcdTExQkMKXHUxMTA5XHUxMTc1XHUxMTEyXHUxMTYxXHUxMUI4Clx1MTEwOVx1MTE3NVx1MTExMlx1MTE2NVx1MTFCNwpcdTExMDlcdTExNzVcdTExQThcdTExMDBcdTExNkUKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTAwXHUxMTc1Clx1MTEwOVx1MTE3NVx1MTFBOFx1MTEwM1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNzVcdTExQThcdTExMDVcdTExNjNcdTExQkMKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTA1XHUxMTZEXHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwOVx1MTE3NVx1MTFBOFx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNzVcdTExQThcdTExMDhcdTExNjFcdTExQkMKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTA5XHUxMTYxClx1MTEwOVx1MTE3NVx1MTFBOFx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTExMlx1MTE2QVx1MTFBRgpcdTExMDlcdTExNzVcdTExQThcdTExMEVcdTExNjkKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTEwXHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE3NVx1MTFBOFx1MTExMVx1MTE2RVx1MTFCNwpcdTExMDlcdTExNzVcdTExQUJcdTExMDBcdTExNjkKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTAwXHUxMTcyClx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwMlx1MTE2N1x1MTFCNwpcdTExMDlcdTExNzVcdTExQUJcdTExMDZcdTExNkVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTA3XHUxMTYxXHUxMUFGClx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwN1x1MTE3NQpcdTExMDlcdTExNzVcdTExQUJcdTExMDlcdTExNjEKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTA5XHUxMTY2Clx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDlcdTExNzVcdTExQUJcdTExMENcdTExNjZcdTExMTFcdTExNkVcdTExQjcKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTBFXHUxMTY1XHUxMUJDClx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwRVx1MTE2NgpcdTExMDlcdTExNzVcdTExQUJcdTExMTJcdTExNkEKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTAwXHUxMTYxXHUxMUI3Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwMlx1MTE2MgpcdTExMDlcdTExNzVcdTExQUZcdTExMDVcdTExNjdcdTExQTgKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTA1XHUxMTY4Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMDlcdTExNzVcdTExQUZcdTExMDlcdTExNkUKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTA5XHUxMTczXHUxMUI4Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwOVx1MTE3NQpcdTExMDlcdTExNzVcdTExQUZcdTExMENcdTExNjFcdTExQkMKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwQ1x1MTE3NVx1MTFBRlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDlcdTExNzVcdTExQUZcdTExMEVcdTExNjVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTBFXHUxMTY2Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwRlx1MTE2NVx1MTFCQQpcdTExMDlcdTExNzVcdTExQUZcdTExMTBcdTExNjIKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTExXHUxMTYyClx1MTEwOVx1MTE3NVx1MTFBRlx1MTExMlx1MTE2NVx1MTFCNwpcdTExMDlcdTExNzVcdTExQUZcdTExMTJcdTExNjdcdTExQUIKXHUxMTA5XHUxMTc1XHUxMUI3XHUxMTA1XHUxMTc1Clx1MTEwOVx1MTE3NVx1MTFCN1x1MTEwN1x1MTE2RVx1MTEwNVx1MTE3M1x1MTFCNwpcdTExMDlcdTExNzVcdTExQjdcdTExMDlcdTExNjEKXHUxMTA5XHUxMTc1XHUxMUI3XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE3NVx1MTFCN1x1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMDlcdTExNzVcdTExQjdcdTExMTFcdTExNjFcdTExQUIKXHUxMTBBXHUxMTYxXHUxMUJDXHUxMTAzXHUxMTZFXHUxMUJDXHUxMTBCXHUxMTc1Clx1MTEwQVx1MTE3NVx1MTEwNVx1MTE3M1x1MTFCNwpcdTExMEFcdTExNzVcdTExMEJcdTExNjFcdTExQkEKXHUxMTBCXHUxMTYxXHUxMTAwXHUxMTYxXHUxMTBBXHUxMTc1Clx1MTEwQlx1MTE2MVx1MTEwMlx1MTE2MVx1MTEwQlx1MTE2RVx1MTFBQlx1MTEwOVx1MTE2NQpcdTExMEJcdTExNjFcdTExMDNcdTExNzNcdTExMDJcdTExNzVcdTExQjcKXHUxMTBCXHUxMTYxXHUxMTAzXHUxMTczXHUxMUFGClx1MTEwQlx1MTE2MVx1MTEwOVx1MTE3MVx1MTEwQlx1MTE2RVx1MTFCNwpcdTExMEJcdTExNjFcdTExMDlcdTExNzNcdTExMTFcdTExNjFcdTExQUZcdTExMTBcdTExNzMKXHUxMTBCXHUxMTYxXHUxMTA5XHUxMTc1XHUxMTBCXHUxMTYxClx1MTEwQlx1MTE2MVx1MTEwQlx1MTE2RVx1MTFBRlx1MTEwNVx1MTE2NQpcdTExMEJcdTExNjFcdTExMENcdTExNjVcdTExMEFcdTExNzUKXHUxMTBCXHUxMTYxXHUxMTBDXHUxMTZFXHUxMUI3XHUxMTA2XHUxMTYxClx1MTEwQlx1MTE2MVx1MTEwQ1x1MTE3NVx1MTFBOApcdTExMEJcdTExNjFcdTExMEVcdTExNzVcdTExQjcKXHUxMTBCXHUxMTYxXHUxMTExXHUxMTYxXHUxMTEwXHUxMTczClx1MTEwQlx1MTE2MVx1MTExMVx1MTE3M1x1MTEwNVx1MTE3NVx1MTEwRlx1MTE2MQpcdTExMEJcdTExNjFcdTExMTFcdTExNzNcdTExQjcKXHUxMTBCXHUxMTYxXHUxMTEyXHUxMTY5XHUxMUI4Clx1MTEwQlx1MTE2MVx1MTExMlx1MTE3M1x1MTFBQgpcdTExMEJcdTExNjFcdTExQThcdTExMDBcdTExNzUKXHUxMTBCXHUxMTYxXHUxMUE4XHUxMTA2XHUxMTY5XHUxMUJDClx1MTEwQlx1MTE2MVx1MTFBOFx1MTEwOVx1MTE2RQpcdTExMEJcdTExNjFcdTExQUJcdTExMDBcdTExNjIKXHUxMTBCXHUxMTYxXHUxMUFCXHUxMTAwXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2QQpcdTExMEJcdTExNjFcdTExQUJcdTExMDJcdTExNjIKXHUxMTBCXHUxMTYxXHUxMUFCXHUxMTAyXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE2MVx1MTFBQlx1MTEwM1x1MTE2OVx1MTFCQwpcdTExMEJcdTExNjFcdTExQUJcdTExMDdcdTExNjFcdTExQkMKXHUxMTBCXHUxMTYxXHUxMUFCXHUxMTA3XHUxMTZFClx1MTEwQlx1MTE2MVx1MTFBQlx1MTEwQ1x1MTE2RQpcdTExMEJcdTExNjFcdTExQUZcdTExMDVcdTExNkVcdTExMDZcdTExNzVcdTExMDJcdTExNzJcdTExQjcKXHUxMTBCXHUxMTYxXHUxMUFGXHUxMTBGXHUxMTY5XHUxMTBCXHUxMTY5XHUxMUFGClx1MTEwQlx1MTE2MVx1MTFCN1x1MTEwOVx1MTE3NQpcdTExMEJcdTExNjFcdTExQjdcdTExMEZcdTExNjVcdTExQkEKXHUxMTBCXHUxMTYxXHUxMUI4XHUxMTA1XHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE2MVx1MTFDMVx1MTEwMlx1MTE2MVx1MTFBRgpcdTExMEJcdTExNjFcdTExQzFcdTExMDZcdTExNkVcdTExQUIKXHUxMTBCXHUxMTYyXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2Mlx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMEJcdTExNjJcdTExQThcdTExMDlcdTExNkUKXHUxMTBCXHUxMTYyXHUxMUFGXHUxMTA3XHUxMTY1XHUxMUI3Clx1MTEwQlx1MTE2M1x1MTEwMFx1MTE2MVx1MTFBQgpcdTExMEJcdTExNjNcdTExMDNcdTExNjFcdTExQUIKXHUxMTBCXHUxMTYzXHUxMTBCXHUxMTY5XHUxMUJDClx1MTEwQlx1MTE2M1x1MTFBOFx1MTEwMFx1MTE2MVx1MTFBQgpcdTExMEJcdTExNjNcdTExQThcdTExMDBcdTExNkVcdTExQTgKXHUxMTBCXHUxMTYzXHUxMUE4XHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwQlx1MTE2M1x1MTFBOFx1MTEwOVx1MTE2RQpcdTExMEJcdTExNjNcdTExQThcdTExMENcdTExNjVcdTExQjcKXHUxMTBCXHUxMTYzXHUxMUE4XHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwQlx1MTE2M1x1MTFBOFx1MTExMlx1MTE2OVx1MTFBQlx1MTEwMlx1MTE2NwpcdTExMEJcdTExNjNcdTExQkNcdTExMDJcdTExNjdcdTExQjcKXHUxMTBCXHUxMTYzXHUxMUJDXHUxMTA1XHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE2M1x1MTFCQ1x1MTEwNlx1MTE2MVx1MTFBRgpcdTExMEJcdTExNjNcdTExQkNcdTExMDdcdTExNjJcdTExMEVcdTExNkUKXHUxMTBCXHUxMTYzXHUxMUJDXHUxMTBDXHUxMTZFClx1MTEwQlx1MTE2M1x1MTFCQ1x1MTExMVx1MTE2MQpcdTExMEJcdTExNjVcdTExMDNcdTExNkVcdTExQjcKXHUxMTBCXHUxMTY1XHUxMTA1XHUxMTY3XHUxMTBCXHUxMTZFXHUxMUI3Clx1MTEwQlx1MTE2NVx1MTEwNVx1MTE3M1x1MTFBQgpcdTExMEJcdTExNjVcdTExMENcdTExNjZcdTExQkFcdTExMDdcdTExNjFcdTExQjcKXHUxMTBCXHUxMTY1XHUxMTBEXHUxMTYyXHUxMUJCXHUxMTAzXHUxMTczXHUxMUFCClx1MTEwQlx1MTE2NVx1MTEwRFx1MTE2NVx1MTEwM1x1MTE2MVx1MTEwMFx1MTE2MQpcdTExMEJcdTExNjVcdTExMERcdTExNjVcdTExQUJcdTExMENcdTExNzUKXHUxMTBCXHUxMTY1XHUxMUFCXHUxMTAyXHUxMTc1Clx1MTEwQlx1MTE2NVx1MTFBQlx1MTEwM1x1MTE2NVx1MTFBOApcdTExMEJcdTExNjVcdTExQUJcdTExMDVcdTExNjlcdTExQUIKXHUxMTBCXHUxMTY1XHUxMUFCXHUxMTBCXHUxMTY1Clx1MTEwQlx1MTE2NVx1MTFBRlx1MTEwMFx1MTE2RVx1MTFBRgpcdTExMEJcdTExNjVcdTExQUZcdTExMDVcdTExNzNcdTExQUIKXHUxMTBCXHUxMTY1XHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2NVx1MTFBRlx1MTExMVx1MTE3NVx1MTFCQQpcdTExMEJcdTExNjVcdTExQjdcdTExMDZcdTExNjEKXHUxMTBCXHUxMTY1XHUxMUI4XHUxMTA2XHUxMTZFClx1MTEwQlx1MTE2NVx1MTFCOFx1MTEwQ1x1MTE2OVx1MTFCQwpcdTExMEJcdTExNjVcdTExQjhcdTExMEVcdTExNjYKXHUxMTBCXHUxMTY1XHUxMUJDXHUxMTAzXHUxMTY1XHUxMUJDXHUxMTBCXHUxMTc1Clx1MTEwQlx1MTE2NVx1MTFCQ1x1MTEwNlx1MTE2MVx1MTFCQwpcdTExMEJcdTExNjVcdTExQkNcdTExMTBcdTExNjVcdTExMDVcdTExNzUKXHUxMTBCXHUxMTY1XHUxMUJEXHUxMTAwXHUxMTczXHUxMTBDXHUxMTY2Clx1MTEwQlx1MTE2Nlx1MTEwMlx1MTE2NVx1MTEwQ1x1MTE3NQpcdTExMEJcdTExNjZcdTExMEJcdTExNjVcdTExMEZcdTExNjVcdTExQUIKXHUxMTBCXHUxMTY2XHUxMUFCXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwMFx1MTE2NVx1MTFBQgpcdTExMEJcdTExNjdcdTExMDBcdTExNjlcdTExMDlcdTExNjJcdTExQkMKXHUxMTBCXHUxMTY3XHUxMTAwXHUxMTZBXHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwMFx1MTE2RVx1MTFBQgpcdTExMEJcdTExNjdcdTExMDBcdTExNkZcdTExQUIKXHUxMTBCXHUxMTY3XHUxMTAzXHUxMTYyXHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwQlx1MTE2N1x1MTEwM1x1MTE2NVx1MTFCMgpcdTExMEJcdTExNjdcdTExMDNcdTExNjlcdTExQkNcdTExMDlcdTExNjJcdTExQkMKXHUxMTBCXHUxMTY3XHUxMTAzXHUxMTczXHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwNVx1MTE2OVx1MTFBQgpcdTExMEJcdTExNjdcdTExMDVcdTExNzNcdTExQjcKXHUxMTBCXHUxMTY3XHUxMTA5XHUxMTY1XHUxMUJBClx1MTEwQlx1MTE2N1x1MTEwOVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNjdcdTExMEJcdTExNkFcdTExQkMKXHUxMTBCXHUxMTY3XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwQ1x1MTE2NVx1MTFBQlx1MTExMlx1MTE3NQpcdTExMEJcdTExNjdcdTExMENcdTExNzVcdTExQThcdTExMEJcdTExNkZcdTExQUIKXHUxMTBCXHUxMTY3XHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwQlx1MTE2N1x1MTExMlx1MTE2Mlx1MTFCQwpcdTExMEJcdTExNjdcdTExQThcdTExMDlcdTExNjEKXHUxMTBCXHUxMTY3XHUxMUE4XHUxMTA5XHUxMTc1Clx1MTEwQlx1MTE2N1x1MTFBOFx1MTExMlx1MTE2MVx1MTFBRgpcdTExMEJcdTExNjdcdTExQUJcdTExMDBcdTExNjdcdTExQUYKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTAwXHUxMTZFClx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwMFx1MTE3M1x1MTFBOApcdTExMEJcdTExNjdcdTExQUJcdTExMDBcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTA1XHUxMTYxXHUxMUE4Clx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMEJcdTExNjdcdTExQUJcdTExMDlcdTExNjYKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwOVx1MTE3M1x1MTFCOApcdTExMEJcdTExNjdcdTExQUJcdTExMEJcdTExNjIKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTBCXHUxMTY4XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMEJcdTExNjdcdTExQUJcdTExMENcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTBDXHUxMTZFClx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwRVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNjdcdTExQUJcdTExMTFcdTExNzVcdTExQUYKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTEyXHUxMTYxXHUxMUI4Clx1MTEwQlx1MTE2N1x1MTFBQlx1MTExMlx1MTE3MgpcdTExMEJcdTExNjdcdTExQUZcdTExMDBcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUFGXHUxMTA2XHUxMTYyClx1MTEwQlx1MTE2N1x1MTFBRlx1MTEwOVx1MTE2QwpcdTExMEJcdTExNjdcdTExQUZcdTExMDlcdTExNzVcdTExQjdcdTExMTJcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUFGXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwQlx1MTE2N1x1MTFBRlx1MTEwRVx1MTE2MQpcdTExMEJcdTExNjdcdTExQUZcdTExMTJcdTExNzNcdTExQUYKXHUxMTBCXHUxMTY3XHUxMUI3XHUxMTA1XHUxMTY3Clx1MTEwQlx1MTE2N1x1MTFCOFx1MTEwOVx1MTE2NQpcdTExMEJcdTExNjdcdTExQkNcdTExMDBcdTExNkVcdTExQTgKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTAyXHUxMTYxXHUxMUI3Clx1MTEwQlx1MTE2N1x1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQwpcdTExMEJcdTExNjdcdTExQkNcdTExMEJcdTExNjNcdTExQkMKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTBCXHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE2N1x1MTFCQ1x1MTEwQlx1MTE2RVx1MTFCQwpcdTExMEJcdTExNjdcdTExQkNcdTExMEJcdTExNkZcdTExQUJcdTExMTJcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTYxClx1MTEwQlx1MTE2N1x1MTFCQ1x1MTExMlx1MTE2M1x1MTFCQwpcdTExMEJcdTExNjdcdTExQkNcdTExMTJcdTExNjlcdTExQUIKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTZBClx1MTEwQlx1MTE2N1x1MTFDMVx1MTEwMFx1MTE2RVx1MTEwNVx1MTE3NQpcdTExMEJcdTExNjdcdTExQzFcdTExMDdcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY3XHUxMUMxXHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwQlx1MTE2OFx1MTEwMFx1MTE2MVx1MTFCNwpcdTExMEJcdTExNjhcdTExMDBcdTExNzNcdTExQjcKXHUxMTBCXHUxMTY4XHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwQlx1MTE2OFx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMEJcdTExNjhcdTExMDlcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY4XHUxMTA5XHUxMTY1XHUxMUFCClx1MTEwQlx1MTE2OFx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNjhcdTExMDlcdTExNzNcdTExQjgKXHUxMTBCXHUxMTY4XHUxMTA5XHUxMTc1XHUxMUE4XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwQlx1MTE2OFx1MTEwQlx1MTE2M1x1MTFBOApcdTExMEJcdTExNjhcdTExMENcdTExNjVcdTExQUIKXHUxMTBCXHUxMTY4XHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwQlx1MTE2OFx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMEJcdTExNjhcdTExMEZcdTExNjVcdTExQUJcdTExMDNcdTExNjIKXHUxMTBCXHUxMTY4XHUxMUJBXHUxMTAyXHUxMTYxXHUxMUFGClx1MTEwQlx1MTE2OVx1MTEwMlx1MTE3M1x1MTFBRgpcdTExMEJcdTExNjlcdTExMDVcdTExNjFcdTExQTgKXHUxMTBCXHUxMTY5XHUxMTA1XHUxMTYyXHUxMUJBXHUxMTAzXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTYxXHUxMUFCClx1MTEwQlx1MTE2OVx1MTEwNVx1MTE2Nlx1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMEJcdTExNjlcdTExMDVcdTExNjlcdTExMENcdTExNzUKXHUxMTBCXHUxMTY5XHUxMTA1XHUxMTczXHUxMUFCXHUxMTA3XHUxMTYxXHUxMUFGClx1MTEwQlx1MTE2OVx1MTEwN1x1MTE3M1x1MTFBQgpcdTExMEJcdTExNjlcdTExMDlcdTExNzVcdTExQjgKXHUxMTBCXHUxMTY5XHUxMTBCXHUxMTY3XHUxMUI3Clx1MTEwQlx1MTE2OVx1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMEJcdTExNjlcdTExMENcdTExNjVcdTExQUIKXHUxMTBCXHUxMTY5XHUxMTBDXHUxMTc1XHUxMUE4Clx1MTEwQlx1MTE2OVx1MTEwQ1x1MTE3NVx1MTFCQ1x1MTEwQlx1MTE2NQpcdTExMEJcdTExNjlcdTExMTFcdTExNjZcdTExMDVcdTExNjEKXHUxMTBCXHUxMTY5XHUxMTExXHUxMTc1XHUxMTA5XHUxMTczXHUxMTEwXHUxMTY2XHUxMUFGClx1MTEwQlx1MTE2OVx1MTExMlx1MTE3NVx1MTEwNVx1MTE2NwpcdTExMEJcdTExNjlcdTExQThcdTExMDlcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY5XHUxMUE4XHUxMTA5XHUxMTZFXHUxMTA5XHUxMTZFClx1MTEwQlx1MTE2OVx1MTFBQlx1MTEwMFx1MTE2MVx1MTFCRApcdTExMEJcdTExNjlcdTExQUJcdTExMDVcdTExNjFcdTExMEJcdTExNzVcdTExQUIKXHUxMTBCXHUxMTY5XHUxMUFCXHUxMTA2XHUxMTY5XHUxMUI3Clx1MTEwQlx1MTE2OVx1MTFBQlx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTEwQlx1MTE3NVx1MTFBRgpcdTExMEJcdTExNjlcdTExQUJcdTExMTBcdTExNjlcdTExQkMKXHUxMTBCXHUxMTY5XHUxMUFGXHUxMTAwXHUxMTYxXHUxMTBCXHUxMTczXHUxMUFGClx1MTEwQlx1MTE2OVx1MTFBRlx1MTEwNVx1MTE3NVx1MTFCN1x1MTExMVx1MTE3NVx1MTFBOApcdTExMEJcdTExNjlcdTExQUZcdTExMTJcdTExNjIKXHUxMTBCXHUxMTY5XHUxMUJBXHUxMTBFXHUxMTYxXHUxMTA1XHUxMTc1XHUxMUI3Clx1MTEwQlx1MTE2QVx1MTEwQlx1MTE3NVx1MTEwOVx1MTE2N1x1MTEwRVx1MTE3MwpcdTExMEJcdTExNkFcdTExMEJcdTExNzVcdTExQUIKXHUxMTBCXHUxMTZBXHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwQlx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBQgpcdTExMEJcdTExNkFcdTExQkNcdTExMDdcdTExNzUKXHUxMTBCXHUxMTZBXHUxMUJDXHUxMTBDXHUxMTYxClx1MTEwQlx1MTE2Qlx1MTEwMlx1MTE2M1x1MTExMlx1MTE2MVx1MTEwNlx1MTE2N1x1MTFBQgpcdTExMEJcdTExNkJcdTExQUJcdTExMENcdTExNzUKXHUxMTBCXHUxMTZDXHUxMTAwXHUxMTYxXHUxMUJBXHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwQlx1MTE2Q1x1MTEwMFx1MTE2RVx1MTFBOApcdTExMEJcdTExNkNcdTExMDVcdTExNjlcdTExMEJcdTExNkVcdTExQjcKXHUxMTBCXHUxMTZDXHUxMTA5XHUxMTYxXHUxMUI3XHUxMTBFXHUxMTY5XHUxMUFCClx1MTEwQlx1MTE2Q1x1MTEwRVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNkNcdTExMEVcdTExNzVcdTExQjcKXHUxMTBCXHUxMTZDXHUxMTEyXHUxMTYxXHUxMUFGXHUxMTA2XHUxMTY1XHUxMTAyXHUxMTc1Clx1MTEwQlx1MTE2Q1x1MTFBQlx1MTEwN1x1MTE2MVx1MTFBRgpcdTExMEJcdTExNkNcdTExQUJcdTExMDlcdTExNjlcdTExQUIKXHUxMTBCXHUxMTZDXHUxMUFCXHUxMTBEXHUxMTY5XHUxMUE4Clx1MTEwQlx1MTE2RFx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMEJcdTExNkRcdTExMEJcdTExNzVcdTExQUYKXHUxMTBCXHUxMTZEXHUxMTBDXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2RFx1MTEwRVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNkRcdTExQkNcdTExMDBcdTExNzUKXHUxMTBCXHUxMTZEXHUxMUJDXHUxMTA5XHUxMTY1Clx1MTEwQlx1MTE2RFx1MTFCQ1x1MTEwQlx1MTE2NQpcdTExMEJcdTExNkVcdTExMDlcdTExNjFcdTExQUIKXHUxMTBCXHUxMTZFXHUxMTA5XHUxMTY1XHUxMUFCClx1MTEwQlx1MTE2RVx1MTEwOVx1MTE3M1x1MTFCQwpcdTExMEJcdTExNkVcdTExMEJcdTExNjdcdTExQUJcdTExMTJcdTExNzUKXHUxMTBCXHUxMTZFXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwQlx1MTE2RVx1MTEwRVx1MTE2Nlx1MTEwMFx1MTE2RVx1MTFBOApcdTExMEJcdTExNkVcdTExMTFcdTExNjdcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUFCXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwQlx1MTE2RVx1MTFBQlx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMEJcdTExNkVcdTExQUJcdTExMDdcdTExNjFcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUFCClx1MTEwQlx1MTE2RVx1MTFBQlx1MTExMlx1MTE2Mlx1MTFCQwpcdTExMEJcdTExNkVcdTExQUZcdTExMDlcdTExNjFcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2RVx1MTFCN1x1MTEwQ1x1MTE3NVx1MTFBOFx1MTEwQlx1MTE3NVx1MTFCNwpcdTExMEJcdTExNkVcdTExQkFcdTExMEJcdTExNjVcdTExMDVcdTExNzNcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUJBXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2Rlx1MTEwMlx1MTE2MVx1MTFBOApcdTExMEJcdTExNkZcdTExQUJcdTExMDBcdTExNjkKXHUxMTBCXHUxMTZGXHUxMUFCXHUxMTA1XHUxMTYyClx1MTEwQlx1MTE2Rlx1MTFBQlx1MTEwOVx1MTE2NQpcdTExMEJcdTExNkZcdTExQUJcdTExMDlcdTExNkVcdTExQkNcdTExMEJcdTExNzUKXHUxMTBCXHUxMTZGXHUxMUFCXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2Rlx1MTFBQlx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMEJcdTExNkZcdTExQUJcdTExMTFcdTExNzVcdTExMDlcdTExNzMKXHUxMTBCXHUxMTZGXHUxMUFGXHUxMTAwXHUxMTczXHUxMUI4Clx1MTEwQlx1MTE2Rlx1MTFBRlx1MTEwM1x1MTE3M1x1MTEwRlx1MTE2NVx1MTFCOApcdTExMEJcdTExNkZcdTExQUZcdTExMDlcdTExNjYKXHUxMTBCXHUxMTZGXHUxMUFGXHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQlx1MTE3MFx1MTEwQlx1MTE3NVx1MTExMFx1MTE2NQpcdTExMEJcdTExNzFcdTExMDdcdTExNjFcdTExQUIKXHUxMTBCXHUxMTcxXHUxMTA3XHUxMTY1XHUxMUI4Clx1MTEwQlx1MTE3MVx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNzFcdTExMEJcdTExNkZcdTExQUIKXHUxMTBCXHUxMTcxXHUxMTEyXHUxMTY1XHUxMUI3Clx1MTEwQlx1MTE3MVx1MTExMlx1MTE2N1x1MTFCOApcdTExMEJcdTExNzFcdTExQkFcdTExMDlcdTExNjFcdTExMDVcdTExNjFcdTExQjcKXHUxMTBCXHUxMTcyXHUxMTAyXHUxMTYxXHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwQlx1MTE3Mlx1MTEwNVx1MTE2NVx1MTFCOApcdTExMEJcdTExNzJcdTExMDZcdTExNjdcdTExQkMKXHUxMTBCXHUxMTcyXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwQlx1MTE3Mlx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMEJcdTExNzJcdTExMENcdTExNjVcdTExQTgKXHUxMTBCXHUxMTcyXHUxMTBFXHUxMTc1XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQlx1MTE3Mlx1MTExMlx1MTE2MVx1MTFBOApcdTExMEJcdTExNzJcdTExMTJcdTExNjJcdTExQkMKXHUxMTBCXHUxMTcyXHUxMTEyXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE3Mlx1MTFBOFx1MTEwMFx1MTE2RVx1MTFBQgpcdTExMEJcdTExNzJcdTExQThcdTExMDlcdTExNjFcdTExQkMKXHUxMTBCXHUxMTcyXHUxMUE4XHUxMTA5XHUxMTc1XHUxMUI4Clx1MTEwQlx1MTE3Mlx1MTFBOFx1MTEwRVx1MTE2NgpcdTExMEJcdTExNzNcdTExQUJcdTExMTJcdTExNjJcdTExQkMKXHUxMTBCXHUxMTczXHUxMUI3XHUxMTA1XHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE3M1x1MTFCN1x1MTEwNVx1MTE2RApcdTExMEJcdTExNzNcdTExQjdcdTExMDdcdTExNjFcdTExQUIKXHUxMTBCXHUxMTczXHUxMUI3XHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwQlx1MTE3M1x1MTFCN1x1MTEwOVx1MTE3NVx1MTFBOApcdTExMEJcdTExNzNcdTExQjdcdTExMEJcdTExNjFcdTExQTgKXHUxMTBCXHUxMTczXHUxMUI3XHUxMTBDXHUxMTZFClx1MTEwQlx1MTE3NFx1MTEwMFx1MTE2N1x1MTFBQgpcdTExMEJcdTExNzRcdTExMDJcdTExNjlcdTExQUIKXHUxMTBCXHUxMTc0XHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQlx1MTE3NFx1MTEwN1x1MTE2OVx1MTFBOApcdTExMEJcdTExNzRcdTExMDlcdTExNzVcdTExQTgKXHUxMTBCXHUxMTc0XHUxMTA5XHUxMTc1XHUxMUI3Clx1MTEwQlx1MTE3NFx1MTEwQlx1MTE2Q1x1MTEwNVx1MTE2OQpcdTExMEJcdTExNzRcdTExMEJcdTExNkRcdTExQTgKXHUxMTBCXHUxMTc0XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQlx1MTE3NFx1MTExMlx1MTE2MVx1MTFBOApcdTExMEJcdTExNzVcdTExMDBcdTExNjVcdTExQkEKXHUxMTBCXHUxMTc1XHUxMTAwXHUxMTY5XHUxMUJBClx1MTEwQlx1MTE3NVx1MTEwMlx1MTE2N1x1MTFCNwpcdTExMEJcdTExNzVcdTExMDJcdTExNjlcdTExQjcKXHUxMTBCXHUxMTc1XHUxMTAzXHUxMTYxXHUxMUFGClx1MTEwQlx1MTE3NVx1MTEwM1x1MTE2Mlx1MTEwNVx1MTE2OQpcdTExMEJcdTExNzVcdTExMDNcdTExNjlcdTExQkMKXHUxMTBCXHUxMTc1XHUxMTA1XHUxMTY1XHUxMUMyXHUxMTAwXHUxMTY2Clx1MTEwQlx1MTE3NVx1MTEwNVx1MTE2N1x1MTFBOFx1MTEwOVx1MTE2NQpcdTExMEJcdTExNzVcdTExMDVcdTExNjlcdTExQUJcdTExMENcdTExNjVcdTExQTgKXHUxMTBCXHUxMTc1XHUxMTA1XHUxMTczXHUxMUI3Clx1MTEwQlx1MTE3NVx1MTEwNlx1MTE3NVx1MTFBQgpcdTExMEJcdTExNzVcdTExMDdcdTExNjFcdTExQUZcdTExMDlcdTExNjkKXHUxMTBCXHUxMTc1XHUxMTA3XHUxMTY3XHUxMUFGClx1MTEwQlx1MTE3NVx1MTEwN1x1MTE2RVx1MTFBRgpcdTExMEJcdTExNzVcdTExMDhcdTExNjFcdTExQUYKXHUxMTBCXHUxMTc1XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwQlx1MTE3NVx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNzVcdTExMDlcdTExNzNcdTExQUYKXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTYzXHUxMTAwXHUxMTc1Clx1MTEwQlx1MTE3NVx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMEJcdTExNzVcdTExMEJcdTExNkVcdTExQkEKXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTZGXHUxMUFGClx1MTEwQlx1MTE3NVx1MTEwQlx1MTE3M1x1MTFBOFx1MTEwMFx1MTE2OQpcdTExMEJcdTExNzVcdTExMEJcdTExNzVcdTExQTgKXHUxMTBCXHUxMTc1XHUxMTBDXHUxMTY1XHUxMUFCClx1MTEwQlx1MTE3NVx1MTEwQ1x1MTE2RVx1MTFCQwpcdTExMEJcdTExNzVcdTExMTBcdTExNzNcdTExQUVcdTExMDJcdTExNjFcdTExQUYKXHUxMTBCXHUxMTc1XHUxMTEwXHUxMTczXHUxMUFGClx1MTEwQlx1MTE3NVx1MTExMlx1MTE2OVx1MTFBQgpcdTExMEJcdTExNzVcdTExQUJcdTExMDBcdTExNjFcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE2OVx1MTFCQwpcdTExMEJcdTExNzVcdTExQUJcdTExMDBcdTExNkUKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTczXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE3NQpcdTExMEJcdTExNzVcdTExQUJcdTExMDNcdTExNjkKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTA1XHUxMTcyClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMEJcdTExNzVcdTExQUJcdTExMDlcdTExNjJcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTA5XHUxMTZCClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwQlx1MTE2N1x1MTFBQgpcdTExMEJcdTExNzVcdTExQUJcdTExMEJcdTExNkZcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTBDXHUxMTYyClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwQ1x1MTE2OVx1MTFCQwpcdTExMEJcdTExNzVcdTExQUJcdTExMEVcdTExNjVcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTBFXHUxMTY2Clx1MTEwQlx1MTE3NVx1MTFBQlx1MTExMFx1MTE2NVx1MTEwMlx1MTE2Nlx1MTFCQQpcdTExMEJcdTExNzVcdTExQUJcdTExMTJcdTExNjEKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTEyXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwMFx1MTE2OVx1MTFCOApcdTExMEJcdTExNzVcdTExQUZcdTExMDBcdTExNzUKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTAzXHUxMTYxXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwM1x1MTE2MgpcdTExMEJcdTExNzVcdTExQUZcdTExMDNcdTExNzNcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTA3XHUxMTYxXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwN1x1MTE2OVx1MTFBQgpcdTExMEJcdTExNzVcdTExQUZcdTExMDdcdTExNkUKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwOVx1MTE2Mlx1MTFCQwpcdTExMEJcdTExNzVcdTExQUZcdTExMDlcdTExNjlcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMEJcdTExNzVcdTExQUZcdTExMENcdTExNjVcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTBDXHUxMTY5XHUxMUJDClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwQ1x1MTE2RVx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMEJcdTExNzVcdTExQUZcdTExMERcdTExNzVcdTExQTgKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTBFXHUxMTY2Clx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwRVx1MTE3NQpcdTExMEJcdTExNzVcdTExQUZcdTExMTJcdTExNjJcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTEyXHUxMTZDXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQlx1MTE3NVx1MTFCN1x1MTEwMFx1MTE3M1x1MTFCNwpcdTExMEJcdTExNzVcdTExQjdcdTExMDZcdTExNkUKXHUxMTBCXHUxMTc1XHUxMUI4XHUxMTAzXHUxMTYyClx1MTEwQlx1MTE3NVx1MTFCOFx1MTEwNVx1MTE2N1x1MTFBOApcdTExMEJcdTExNzVcdTExQjhcdTExMDZcdTExNjFcdTExQkEKXHUxMTBCXHUxMTc1XHUxMUI4XHUxMTA5XHUxMTYxClx1MTEwQlx1MTE3NVx1MTFCOFx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNzVcdTExQjhcdTExMDlcdTExNzUKXHUxMTBCXHUxMTc1XHUxMUI4XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFCOFx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMEJcdTExNzVcdTExQjhcdTExMTJcdTExNjFcdTExQTgKXHUxMTBDXHUxMTYxXHUxMTAwXHUxMTYxXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQ1x1MTE2MVx1MTEwMFx1MTE2N1x1MTFBOApcdTExMENcdTExNjFcdTExMDBcdTExNzNcdTExQTgKXHUxMTBDXHUxMTYxXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2MVx1MTEwNVx1MTE2MVx1MTFCQwpcdTExMENcdTExNjFcdTExMDdcdTExNkVcdTExMDlcdTExNzVcdTExQjcKXHUxMTBDXHUxMTYxXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwQ1x1MTE2MVx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMENcdTExNjFcdTExMEJcdTExNjdcdTExQUIKXHUxMTBDXHUxMTYxXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQ1x1MTE2MVx1MTEwQlx1MTE3Mlx1MTFBRgpcdTExMENcdTExNjFcdTExMENcdTExNjVcdTExQUJcdTExMDBcdTExNjUKXHUxMTBDXHUxMTYxXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwQ1x1MTE2MVx1MTEwQ1x1MTE2OVx1MTFBQlx1MTEwOVx1MTE3NVx1MTFCNwpcdTExMENcdTExNjFcdTExMTFcdTExNjFcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUE4XHUxMTAwXHUxMTYxClx1MTEwQ1x1MTE2MVx1MTFBOFx1MTEwMlx1MTE2N1x1MTFBQgpcdTExMENcdTExNjFcdTExQThcdTExMDlcdTExNjVcdTExQkMKXHUxMTBDXHUxMTYxXHUxMUE4XHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwQ1x1MTE2MVx1MTFBOFx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMENcdTExNjFcdTExQThcdTExMEJcdTExNzNcdTExQUJcdTExMDRcdTExNjFcdTExQUYKXHUxMTBDXHUxMTYxXHUxMUE4XHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwQ1x1MTE2MVx1MTFBQlx1MTEwM1x1MTE3NQpcdTExMENcdTExNjFcdTExQUJcdTExMDRcdTExNzNcdTExQTgKXHUxMTBDXHUxMTYxXHUxMUFCXHUxMTBFXHUxMTc1Clx1MTEwQ1x1MTE2MVx1MTFBRlx1MTEwNlx1MTE2OVx1MTFCQQpcdTExMENcdTExNjFcdTExQjdcdTExMDFcdTExNjFcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTZFXHUxMTEyXHUxMTYxXHUxMUI3Clx1MTEwQ1x1MTE2MVx1MTFCN1x1MTEwOVx1MTE3NQpcdTExMENcdTExNjFcdTExQjdcdTExMEJcdTExNjlcdTExQkEKXHUxMTBDXHUxMTYxXHUxMUI3XHUxMTBDXHUxMTYxXHUxMTA1XHUxMTc1Clx1MTEwQ1x1MTE2MVx1MTFCOFx1MTEwQ1x1MTE3NQpcdTExMENcdTExNjFcdTExQkNcdTExMDBcdTExNkFcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3NVx1MTEwMFx1MTE2MVx1MTFBQgpcdTExMENcdTExNjFcdTExQkNcdTExMDVcdTExNjIKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA1XHUxMTY4Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwNVx1MTE3MwpcdTExMENcdTExNjFcdTExQkNcdTExMDZcdTExNjEKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA2XHUxMTY3XHUxMUFCClx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwNlx1MTE2OQpcdTExMENcdTExNjFcdTExQkNcdTExMDZcdTExNzUKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA3XHUxMTc1Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMENcdTExNjFcdTExQkNcdTExMDlcdTExNjkKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2Mlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMENcdTExNjFcdTExQkNcdTExMEJcdTExNzVcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwRVx1MTE2MQpcdTExMENcdTExNjFcdTExQkNcdTExMTJcdTExNjFcdTExQThcdTExMDBcdTExNzNcdTExQjcKXHUxMTBDXHUxMTYyXHUxMTAyXHUxMTczXHUxMUJDClx1MTEwQ1x1MTE2Mlx1MTEwOFx1MTE2MVx1MTFBRlx1MTEwNVx1MTE3NQpcdTExMENcdTExNjJcdTExMDlcdTExNjFcdTExQUIKXHUxMTBDXHUxMTYyXHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwQ1x1MTE2Mlx1MTEwQ1x1MTE2MVx1MTFBOFx1MTEwMlx1MTE2N1x1MTFBQgpcdTExMENcdTExNjJcdTExMENcdTExNjVcdTExQkMKXHUxMTBDXHUxMTYyXHUxMTBFXHUxMTYyXHUxMTAwXHUxMTc1Clx1MTEwQ1x1MTE2Mlx1MTExMVx1MTE2MVx1MTFBQgpcdTExMENcdTExNjJcdTExMTJcdTExNjFcdTExQTgKXHUxMTBDXHUxMTYyXHUxMTEyXHUxMTZBXHUxMUFGXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTEwMFx1MTE2NVx1MTFCQQpcdTExMENcdTExNjVcdTExMDBcdTExNjlcdTExMDVcdTExNzUKXHUxMTBDXHUxMTY1XHUxMTAwXHUxMTY5XHUxMUJBClx1MTEwQ1x1MTE2NVx1MTEwMlx1MTE2N1x1MTFBOApcdTExMENcdTExNjVcdTExMDVcdTExNjVcdTExQUIKXHUxMTBDXHUxMTY1XHUxMTA1XHUxMTY1XHUxMUMyXHUxMTAwXHUxMTY2Clx1MTEwQ1x1MTE2NVx1MTEwN1x1MTE2NVx1MTFBQgpcdTExMENcdTExNjVcdTExMEJcdTExNkVcdTExQUYKXHUxMTBDXHUxMTY1XHUxMTBDXHUxMTY1XHUxMUFGXHUxMTA1XHUxMTY5Clx1MTEwQ1x1MTE2NVx1MTEwRVx1MTE2RVx1MTFBOApcdTExMENcdTExNjVcdTExQThcdTExMDBcdTExNzNcdTExQTgKXHUxMTBDXHUxMTY1XHUxMUE4XHUxMTAzXHUxMTYxXHUxMUJDXHUxMTEyXHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFBOFx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMENcdTExNjVcdTExQThcdTExMEJcdTExNkRcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUE4XHUxMTBCXHUxMTczXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwMFx1MTE2MgpcdTExMENcdTExNjVcdTExQUJcdTExMDBcdTExNjlcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTAwXHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMENcdTExNjVcdTExQUJcdTExMDVcdTExNjFcdTExMDNcdTExNjkKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTA2XHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMENcdTExNjVcdTExQUJcdTExMDdcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTA3XHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwOVx1MTE2NgpcdTExMENcdTExNjVcdTExQUJcdTExMDlcdTExNzUKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwQ1x1MTE2MQpcdTExMENcdTExNjVcdTExQUJcdTExMENcdTExNjJcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTBDXHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwRVx1MTE2NVx1MTFBRgpcdTExMENcdTExNjVcdTExQUJcdTExMEVcdTExNjYKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTEwXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTExMlx1MTE2NwpcdTExMENcdTExNjVcdTExQUJcdTExMTJcdTExNkUKXHUxMTBDXHUxMTY1XHUxMUFGXHUxMTAzXHUxMTYyClx1MTEwQ1x1MTE2NVx1MTFBRlx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMENcdTExNjVcdTExQUZcdTExMDdcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUFGXHUxMTBCXHUxMTYzXHUxMUE4Clx1MTEwQ1x1MTE2NVx1MTFBRlx1MTEwRVx1MTE2MQpcdTExMENcdTExNjVcdTExQjdcdTExMDBcdTExNjVcdTExQjcKXHUxMTBDXHUxMTY1XHUxMUI3XHUxMTA5XHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFCN1x1MTEwOVx1MTE3NVx1MTFCNwpcdTExMENcdTExNjVcdTExQjdcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUI3XHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwQ1x1MTE2NVx1MTFCN1x1MTEwRVx1MTE2MQpcdTExMENcdTExNjVcdTExQjhcdTExMDBcdTExNzNcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUI4XHUxMTA5XHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFCOFx1MTEwRVx1MTE2OVx1MTFBOApcdTExMENcdTExNjVcdTExQkFcdTExMDBcdTExNjFcdTExMDVcdTExNjFcdTExQTgKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTAwXHUxMTY1XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwM1x1MTE2OQpcdTExMENcdTExNjVcdTExQkNcdTExMDVcdTExNzJcdTExMENcdTExNjFcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA1XHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwNlx1MTE2MVx1MTFBRgpcdTExMENcdTExNjVcdTExQkNcdTExMDZcdTExNjdcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTFBQlx1MTEwM1x1MTE2MgpcdTExMENcdTExNjVcdTExQkNcdTExMDdcdTExNjkKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA3XHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwN1x1MTE3NQpcdTExMENcdTExNjVcdTExQkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwQlx1MTE2OQpcdTExMENcdTExNjVcdTExQkNcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwQ1x1MTE3NQpcdTExMENcdTExNjVcdTExQkNcdTExMEVcdTExNzUKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTEyXHUxMTZBXHUxMUE4XHUxMTEyXHUxMTc1Clx1MTEwQ1x1MTE2Nlx1MTEwMFx1MTE2OVx1MTFCQwpcdTExMENcdTExNjZcdTExMDBcdTExNkFcdTExMENcdTExNjVcdTExQjcKXHUxMTBDXHUxMTY2XHUxMTAzXHUxMTYyXHUxMTA1XHUxMTY5Clx1MTEwQ1x1MTE2Nlx1MTEwNlx1MTE2OVx1MTFBOApcdTExMENcdTExNjZcdTExMDdcdTExNjFcdTExQUYKXHUxMTBDXHUxMTY2XHUxMTA3XHUxMTY1XHUxMUI4Clx1MTEwQ1x1MTE2Nlx1MTEwOVx1MTE2MVx1MTFCQVx1MTEwMlx1MTE2MVx1MTFBRgpcdTExMENcdTExNjZcdTExMEJcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY2XHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQ1x1MTE2Nlx1MTEwQ1x1MTE2MVx1MTFBOApcdTExMENcdTExNjZcdTExMENcdTExNkVcdTExMDNcdTExNjkKXHUxMTBDXHUxMTY2XHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwQ1x1MTE2Nlx1MTExMVx1MTE2RVx1MTFCNwpcdTExMENcdTExNjZcdTExMTJcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY5XHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwQ1x1MTE2OVx1MTEwMFx1MTE2NVx1MTFBQgpcdTExMENcdTExNjlcdTExMDBcdTExNzNcdTExQjcKXHUxMTBDXHUxMTY5XHUxMTAwXHUxMTc1XHUxMUJDClx1MTEwQ1x1MTE2OVx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMENcdTExNjlcdTExMDZcdTExNzVcdTExMDVcdTExNkQKXHUxMTBDXHUxMTY5XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2OVx1MTEwOVx1MTE2NVx1MTFBQgpcdTExMENcdTExNjlcdTExMEJcdTExNkRcdTExQkNcdTExMTJcdTExNzUKXHUxMTBDXHUxMTY5XHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwQ1x1MTE2OVx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMENcdTExNjlcdTExMENcdTExNzVcdTExQTgKXHUxMTBDXHUxMTY5XHUxMUFCXHUxMTAzXHUxMTYyXHUxMUJBXHUxMTA2XHUxMTYxXHUxMUFGClx1MTEwQ1x1MTE2OVx1MTFBQlx1MTEwQ1x1MTE2MgpcdTExMENcdTExNjlcdTExQUZcdTExMEJcdTExNjVcdTExQjgKXHUxMTBDXHUxMTY5XHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTEwMFx1MTE2RApcdTExMENcdTExNjlcdTExQkNcdTExMDVcdTExNjkKXHUxMTBDXHUxMTY5XHUxMUJDXHUxMTA1XHUxMTcyClx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTEwOVx1MTE2OVx1MTEwNVx1MTE3NQpcdTExMENcdTExNjlcdTExQkNcdTExMEJcdTExNjVcdTExQjhcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTY5XHUxMUJDXHUxMTBDXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTExMlx1MTE2MVx1MTFCOApcdTExMENcdTExNkFcdTExMDlcdTExNjVcdTExQTgKXHUxMTBDXHUxMTZDXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQ1x1MTE2RVx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMENcdTExNkVcdTExMDVcdTExNzNcdTExQjcKXHUxMTBDXHUxMTZFXHUxMTA2XHUxMTYxXHUxMUFGClx1MTEwQ1x1MTE2RVx1MTEwNlx1MTE2NVx1MTEwMlx1MTE3NQpcdTExMENcdTExNkVcdTExMDZcdTExNjVcdTExQTgKXHUxMTBDXHUxMTZFXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2RVx1MTEwNlx1MTE3NVx1MTFBQgpcdTExMENcdTExNkVcdTExMDdcdTExNjFcdTExQkMKXHUxMTBDXHUxMTZFXHUxMTA3XHUxMTY3XHUxMUFCClx1MTEwQ1x1MTE2RVx1MTEwOVx1MTE3NVx1MTFBOApcdTExMENcdTExNkVcdTExMEJcdTExNzVcdTExQUIKXHUxMTBDXHUxMTZFXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQ1x1MTE2RVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMENcdTExNkVcdTExMENcdTExNjVcdTExQUJcdTExMENcdTExNjEKXHUxMTBDXHUxMTZFXHUxMTEwXHUxMTYyXHUxMUE4Clx1MTEwQ1x1MTE2RVx1MTFBQlx1MTEwN1x1MTE3NQpcdTExMENcdTExNkVcdTExQUZcdTExMDBcdTExNjVcdTExMDVcdTExNzUKXHUxMTBDXHUxMTZFXHUxMUFGXHUxMTAwXHUxMTc1Clx1MTEwQ1x1MTE2RVx1MTFBRlx1MTEwNlx1MTE2RVx1MTEwMlx1MTE3NApcdTExMENcdTExNkVcdTExQkNcdTExMDBcdTExNjFcdTExQUIKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTAwXHUxMTY4XHUxMTA3XHUxMTYxXHUxMUJDXHUxMTA5XHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwMFx1MTE2RVx1MTFBOApcdTExMENcdTExNkVcdTExQkNcdTExMDJcdTExNjdcdTExQUIKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTAzXHUxMTYxXHUxMUFCClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwM1x1MTE2OVx1MTFBOApcdTExMENcdTExNkVcdTExQkNcdTExMDdcdTExNjFcdTExQUIKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTA3XHUxMTZFClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwOVx1MTE2NgpcdTExMENcdTExNkVcdTExQkNcdTExMDlcdTExNjlcdTExMDBcdTExNzVcdTExMEJcdTExNjVcdTExQjgKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTA5XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwQlx1MTE2MVx1MTFCQwpcdTExMENcdTExNkVcdTExQkNcdTExMEJcdTExNkQKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTAwXHUxMTZEClx1MTEwQ1x1MTE3M1x1MTFBOFx1MTEwOVx1MTE2NVx1MTFBOApcdTExMENcdTExNzNcdTExQThcdTExMDlcdTExNzUKXHUxMTBDXHUxMTczXHUxMUFGXHUxMTAwXHUxMTY1XHUxMTBCXHUxMTZFXHUxMUI3Clx1MTEwQ1x1MTE3M1x1MTFCQ1x1MTEwMFx1MTE2MQpcdTExMENcdTExNzNcdTExQkNcdTExMDBcdTExNjUKXHUxMTBDXHUxMTczXHUxMUJDXHUxMTAwXHUxMTZGXHUxMUFCClx1MTEwQ1x1MTE3M1x1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQwpcdTExMENcdTExNzNcdTExQkNcdTExMDlcdTExNjYKXHUxMTBDXHUxMTc1XHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTEwMFx1MTE2MVx1MTFCOApcdTExMENcdTExNzVcdTExMDBcdTExNjdcdTExQkMKXHUxMTBDXHUxMTc1XHUxMTAwXHUxMTczXHUxMUE4XHUxMTEyXHUxMTc1Clx1MTEwQ1x1MTE3NVx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMENcdTExNzVcdTExMDBcdTExNzNcdTExQjgKXHUxMTBDXHUxMTc1XHUxMTAyXHUxMTczXHUxMUJDClx1MTEwQ1x1MTE3NVx1MTEwNVx1MTE3M1x1MTFCN1x1MTEwMFx1MTE3NVx1MTFBRgpcdTExMENcdTExNzVcdTExMDVcdTExNzVcdTExMDlcdTExNjFcdTExQUIKXHUxMTBDXHUxMTc1XHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE3NVx1MTEwN1x1MTE2RVx1MTFCQwpcdTExMENcdTExNzVcdTExMDlcdTExNzVcdTExQTgKXHUxMTBDXHUxMTc1XHUxMTBCXHUxMTY3XHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTEwQlx1MTE2RVx1MTEwMFx1MTE2MgpcdTExMENcdTExNzVcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTc1XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMENcdTExNzVcdTExMENcdTExNzVcdTExQUIKXHUxMTBDXHUxMTc1XHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwQ1x1MTE3NVx1MTFBOFx1MTEwOVx1MTE2NVx1MTFBQgpcdTExMENcdTExNzVcdTExQThcdTExMEJcdTExNjVcdTExQjgKXHUxMTBDXHUxMTc1XHUxMUE4XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQ1x1MTE3NVx1MTFBOFx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMENcdTExNzVcdTExQUJcdTExMDBcdTExNzNcdTExQjgKXHUxMTBDXHUxMTc1XHUxMUFCXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE3NVx1MTFBQlx1MTEwNVx1MTE2OQpcdTExMENcdTExNzVcdTExQUJcdTExMDVcdTExNkQKXHUxMTBDXHUxMTc1XHUxMUFCXHUxMTA1XHUxMTc1Clx1MTEwQ1x1MTE3NVx1MTFBQlx1MTEwRFx1MTE2MQpcdTExMENcdTExNzVcdTExQUJcdTExMEVcdTExNjFcdTExQUYKXHUxMTBDXHUxMTc1XHUxMUFCXHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwQ1x1MTE3NVx1MTFBQlx1MTExMFx1MTE2OVx1MTFCQwpcdTExMENcdTExNzVcdTExQUJcdTExMTJcdTExNjJcdTExQkMKXHUxMTBDXHUxMTc1XHUxMUFGXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE3NVx1MTFBRlx1MTEwN1x1MTE2N1x1MTFCQwpcdTExMENcdTExNzVcdTExQUZcdTExMDlcdTExNjUKXHUxMTBDXHUxMTc1XHUxMUI3XHUxMTBDXHUxMTYxXHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTFCOFx1MTEwM1x1MTE2MVx1MTFBQgpcdTExMENcdTExNzVcdTExQjhcdTExMEJcdTExNjFcdTExQUIKXHUxMTBDXHUxMTc1XHUxMUI4XHUxMTBDXHUxMTZFXHUxMUJDClx1MTEwRFx1MTE2MVx1MTEwQ1x1MTE3M1x1MTFCQwpcdTExMERcdTExNzVcdTExMDFcdTExNjVcdTExMDBcdTExNzUKXHUxMTBFXHUxMTYxXHUxMTAyXHUxMTYxXHUxMUI3Clx1MTEwRVx1MTE2MVx1MTEwNVx1MTE2MVx1MTEwNVx1MTE3NQpcdTExMEVcdTExNjFcdTExMDVcdTExNjNcdTExQkMKXHUxMTBFXHUxMTYxXHUxMTA1XHUxMTc1XHUxMUI3Clx1MTEwRVx1MTE2MVx1MTEwN1x1MTE2N1x1MTFBRgpcdTExMEVcdTExNjFcdTExMDlcdTExNjVcdTExQUIKXHUxMTBFXHUxMTYxXHUxMTBFXHUxMTczXHUxMUI3Clx1MTEwRVx1MTE2MVx1MTFBOFx1MTEwMFx1MTE2MVx1MTFBOApcdTExMEVcdTExNjFcdTExQUJcdTExMDZcdTExNkVcdTExQUYKXHUxMTBFXHUxMTYxXHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwRVx1MTE2MVx1MTFCN1x1MTEwMFx1MTE2MQpcdTExMEVcdTExNjFcdTExQjdcdTExMDBcdTExNzVcdTExMDVcdTExNzNcdTExQjcKXHUxMTBFXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTYyClx1MTEwRVx1MTE2MVx1MTFCN1x1MTEwOVx1MTE2NVx1MTFBOApcdTExMEVcdTExNjFcdTExQjdcdTExMEJcdTExNjcKXHUxMTBFXHUxMTYxXHUxMUI3XHUxMTBCXHUxMTZDClx1MTEwRVx1MTE2MVx1MTFCN1x1MTEwQ1x1MTE2OQpcdTExMEVcdTExNjFcdTExQkFcdTExMENcdTExNjFcdTExQUIKXHUxMTBFXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTYxClx1MTEwRVx1MTE2MVx1MTFCQ1x1MTEwMFx1MTE2OQpcdTExMEVcdTExNjFcdTExQkNcdTExMDBcdTExNkUKXHUxMTBFXHUxMTYxXHUxMUJDXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwRVx1MTE2MVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTFBOQpcdTExMEVcdTExNjFcdTExQkNcdTExMENcdTExNjFcdTExQTgKXHUxMTBFXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY5Clx1MTEwRVx1MTE2Mlx1MTEwMlx1MTE2NVx1MTFBRgpcdTExMEVcdTExNjJcdTExMENcdTExNjVcdTExQjcKXHUxMTBFXHUxMTYyXHUxMUE4XHUxMTAwXHUxMTYxXHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwRVx1MTE2Mlx1MTFBOFx1MTEwN1x1MTE2MVx1MTFCQwpcdTExMEVcdTExNjJcdTExQThcdTExMDlcdTExNjFcdTExQkMKXHUxMTBFXHUxMTYyXHUxMUE4XHUxMTBCXHUxMTc1XHUxMUI3Clx1MTEwRVx1MTE2Mlx1MTFCN1x1MTExMVx1MTE3NVx1MTEwQlx1MTE2NVx1MTFBQgpcdTExMEVcdTExNjVcdTExMDdcdTExNjVcdTExQUYKXHUxMTBFXHUxMTY1XHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwRVx1MTE2NVx1MTFBQlx1MTEwMFx1MTE2RVx1MTFBOApcdTExMEVcdTExNjVcdTExQUJcdTExMDNcdTExNkVcdTExQkMKXHUxMTBFXHUxMTY1XHUxMUFCXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwRVx1MTE2NVx1MTFBQlx1MTEwQ1x1MTE2MgpcdTExMEVcdTExNjVcdTExQUJcdTExMEVcdTExNjVcdTExQUJcdTExMTJcdTExNzUKXHUxMTBFXHUxMTY1XHUxMUFGXHUxMTAzXHUxMTY5Clx1MTEwRVx1MTE2NVx1MTFBRlx1MTEwQ1x1MTE2NVx1MTExMlx1MTE3NQpcdTExMEVcdTExNjVcdTExQUZcdTExMTJcdTExNjFcdTExQTgKXHUxMTBFXHUxMTY1XHUxMUJBXHUxMTAyXHUxMTYxXHUxMUFGClx1MTEwRVx1MTE2NVx1MTFCQVx1MTEwRFx1MTE2MgpcdTExMEVcdTExNjVcdTExQkNcdTExMDJcdTExNjdcdTExQUIKXHUxMTBFXHUxMTY1XHUxMUJDXHUxMTA3XHUxMTYxXHUxMTBDXHUxMTc1Clx1MTEwRVx1MTE2NVx1MTFCQ1x1MTEwOVx1MTE2OQpcdTExMEVcdTExNjVcdTExQkNcdTExMEVcdTExNkVcdTExQUIKXHUxMTBFXHUxMTY2XHUxMTAwXHUxMTY4Clx1MTEwRVx1MTE2Nlx1MTEwNVx1MTE2N1x1MTFBOApcdTExMEVcdTExNjZcdTExMEJcdTExNjlcdTExQUIKXHUxMTBFXHUxMTY2XHUxMTBCXHUxMTcyXHUxMUE4Clx1MTEwRVx1MTE2Nlx1MTEwQ1x1MTE2RVx1MTFCQwpcdTExMEVcdTExNjZcdTExMTJcdTExNjVcdTExQjcKXHUxMTBFXHUxMTY5XHUxMTAzXHUxMTczXHUxMUJDXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwRVx1MTE2OVx1MTEwN1x1MTE2MVx1MTFBQgpcdTExMEVcdTExNjlcdTExMDdcdTExNjFcdTExQjgKXHUxMTBFXHUxMTY5XHUxMTA5XHUxMTYxXHUxMUJDXHUxMTEyXHUxMTZBClx1MTEwRVx1MTE2OVx1MTEwOVx1MTE2RVx1MTFBQgpcdTExMEVcdTExNjlcdTExMEJcdTExNjdcdTExMDVcdTExNzNcdTExQjcKXHUxMTBFXHUxMTY5XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwRVx1MTE2OVx1MTEwQ1x1MTE2NVx1MTEwMlx1MTE2N1x1MTFBOApcdTExMEVcdTExNjlcdTExMENcdTExNjVcdTExQjcKXHUxMTBFXHUxMTY5XHUxMTBFXHUxMTY1XHUxMUJDClx1MTEwRVx1MTE2OVx1MTEwRlx1MTE2OVx1MTFBRlx1MTEwNVx1MTE3NVx1MTFCQQpcdTExMEVcdTExNjlcdTExQkFcdTExMDdcdTExNkVcdTExQUYKXHUxMTBFXHUxMTY5XHUxMUJDXHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwRVx1MTE2OVx1MTFCQ1x1MTEwNVx1MTE3NQpcdTExMEVcdTExNjlcdTExQkNcdTExMENcdTExNjFcdTExQkMKXHUxMTBFXHUxMTZBXHUxMUFGXHUxMTBCXHUxMTY3XHUxMUJDClx1MTEwRVx1MTE2Q1x1MTEwMFx1MTE3M1x1MTFBQgpcdTExMEVcdTExNkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTBFXHUxMTZDXHUxMTA5XHUxMTY1XHUxMUFCClx1MTEwRVx1MTE2Q1x1MTEwOVx1MTE3NVx1MTFBQgpcdTExMEVcdTExNkNcdTExMEJcdTExNjFcdTExQTgKXHUxMTBFXHUxMTZDXHUxMTBDXHUxMTY5XHUxMUJDClx1MTEwRVx1MTE2RVx1MTEwOVx1MTE2NVx1MTFBOApcdTExMEVcdTExNkVcdTExMEJcdTExNjVcdTExQTgKXHUxMTBFXHUxMTZFXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwRVx1MTE2RVx1MTEwRVx1MTE2NVx1MTFBQgpcdTExMEVcdTExNkVcdTExMEVcdTExNzNcdTExQTgKXHUxMTBFXHUxMTZFXHUxMUE4XHUxMTAwXHUxMTZFClx1MTEwRVx1MTE2RVx1MTFBOFx1MTEwOVx1MTE2OQpcdTExMEVcdTExNkVcdTExQThcdTExMENcdTExNjYKXHUxMTBFXHUxMTZFXHUxMUE4XHUxMTEyXHUxMTYxClx1MTEwRVx1MTE2RVx1MTFBRlx1MTEwMFx1MTE3M1x1MTFBQgpcdTExMEVcdTExNkVcdTExQUZcdTExMDdcdTExNjFcdTExQUYKXHUxMTBFXHUxMTZFXHUxMUFGXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwRVx1MTE2RVx1MTFBRlx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMEVcdTExNkVcdTExQUZcdTExMEJcdTExNjdcdTExQUIKXHUxMTBFXHUxMTZFXHUxMUFGXHUxMTBCXHUxMTc1XHUxMUI4Clx1MTEwRVx1MTE2RVx1MTFBRlx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMEVcdTExNkVcdTExQUZcdTExMTFcdTExNjFcdTExQUIKXHUxMTBFXHUxMTZFXHUxMUJDXHUxMTAwXHUxMTY3XHUxMUE4Clx1MTEwRVx1MTE2RVx1MTFCQ1x1MTEwMFx1MTE2OQpcdTExMEVcdTExNkVcdTExQkNcdTExMDNcdTExNjlcdTExQUYKXHUxMTBFXHUxMTZFXHUxMUJDXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwRVx1MTE2RVx1MTFCQ1x1MTEwRVx1MTE2NVx1MTFCQ1x1MTEwM1x1MTE2OQpcdTExMEVcdTExNzFcdTExMEJcdTExNjVcdTExQjgKXHUxMTBFXHUxMTcxXHUxMTBDXHUxMTc1XHUxMUE4Clx1MTEwRVx1MTE3MVx1MTExMlx1MTE2M1x1MTFCQwpcdTExMEVcdTExNzVcdTExMEJcdTExNjNcdTExQTgKXHUxMTBFXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTZFClx1MTEwRVx1MTE3NVx1MTFBQlx1MTEwRVx1MTE2NVx1MTFBOApcdTExMEVcdTExNzVcdTExQUZcdTExMDlcdTExNzVcdTExQjgKXHUxMTBFXHUxMTc1XHUxMUFGXHUxMTBCXHUxMTZGXHUxMUFGClx1MTEwRVx1MTE3NVx1MTFBRlx1MTExMVx1MTE2MVx1MTFBQgpcdTExMEVcdTExNzVcdTExQjdcdTExMDNcdTExNjIKXHUxMTBFXHUxMTc1XHUxMUI3XHUxMTA2XHUxMTZFXHUxMUE4Clx1MTEwRVx1MTE3NVx1MTFCN1x1MTEwOVx1MTE3NVx1MTFBRgpcdTExMEVcdTExNzVcdTExQkFcdTExMDlcdTExNjlcdTExQUYKXHUxMTBFXHUxMTc1XHUxMUJDXHUxMTBFXHUxMTYxXHUxMUFCClx1MTEwRlx1MTE2MVx1MTEwNlx1MTE2Nlx1MTEwNVx1MTE2MQpcdTExMEZcdTExNjFcdTExMEJcdTExNkVcdTExQUJcdTExMTBcdTExNjUKXHUxMTBGXHUxMTYxXHUxMUFGXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTA5XHUxMTZFClx1MTEwRlx1MTE2Mlx1MTEwNVx1MTE3NVx1MTFBOFx1MTExMFx1MTE2NQpcdTExMEZcdTExNjJcdTExQjdcdTExMTFcdTExNjVcdTExMDlcdTExNzMKXHUxMTBGXHUxMTYyXHUxMUI3XHUxMTExXHUxMTY2XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwRlx1MTE2NVx1MTExMFx1MTE3M1x1MTFBQgpcdTExMEZcdTExNjVcdTExQUJcdTExMDNcdTExNzVcdTExMDlcdTExNjdcdTExQUIKXHUxMTBGXHUxMTY1XHUxMUFGXHUxMTA1XHUxMTY1Clx1MTEwRlx1MTE2NVx1MTFCN1x1MTExMVx1MTE3Mlx1MTExMFx1MTE2NQpcdTExMEZcdTExNjlcdTExMDFcdTExNzVcdTExMDVcdTExNzUKXHUxMTBGXHUxMTY5XHUxMTA2XHUxMTc1XHUxMTAzXHUxMTc1Clx1MTEwRlx1MTE2OVx1MTFBQlx1MTEwOVx1MTE2NVx1MTExMFx1MTE3MwpcdTExMEZcdTExNjlcdTExQUZcdTExMDVcdTExNjEKXHUxMTBGXHUxMTY5XHUxMUI3XHUxMTExXHUxMTczXHUxMUFGXHUxMTA1XHUxMTY2XHUxMUE4XHUxMTA5XHUxMTczClx1MTEwRlx1MTE2OVx1MTFCQ1x1MTEwMlx1MTE2MVx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMEZcdTExNkJcdTExMDBcdTExNjFcdTExQjcKXHUxMTBGXHUxMTZFXHUxMTAzXHUxMTY2XHUxMTEwXHUxMTYxClx1MTEwRlx1MTE3M1x1MTEwNVx1MTE3NVx1MTFCNwpcdTExMEZcdTExNzNcdTExQUJcdTExMDBcdTExNzVcdTExQUYKXHUxMTBGXHUxMTczXHUxMUFCXHUxMTA0XHUxMTYxXHUxMUFGClx1MTEwRlx1MTE3M1x1MTFBQlx1MTEwOVx1MTE2OVx1MTEwNVx1MTE3NQpcdTExMEZcdTExNzNcdTExQUJcdTExMEJcdTExNjFcdTExMDNcdTExNzNcdTExQUYKXHUxMTBGXHUxMTczXHUxMUFCXHUxMTBCXHUxMTY1XHUxMTA2XHUxMTY1XHUxMTAyXHUxMTc1Clx1MTEwRlx1MTE3M1x1MTFBQlx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMEZcdTExNzNcdTExQUJcdTExMENcdTExNjVcdTExQUYKXHUxMTBGXHUxMTczXHUxMUFGXHUxMTA1XHUxMTYyXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwRlx1MTE3M1x1MTFBRlx1MTEwNVx1MTE2NVx1MTFCOApcdTExMEZcdTExNzVcdTExQUZcdTExMDVcdTExNjkKXHUxMTEwXHUxMTYxXHUxMTBCXHUxMTc1XHUxMUI4Clx1MTExMFx1MTE2MVx1MTEwQ1x1MTE2MVx1MTEwMFx1MTE3NQpcdTExMTBcdTExNjFcdTExQThcdTExMDBcdTExNkUKXHUxMTEwXHUxMTYxXHUxMUE4XHUxMTBDXHUxMTYxClx1MTExMFx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFCQwpcdTExMTBcdTExNjJcdTExMDBcdTExNkZcdTExQUJcdTExMDNcdTExNjkKXHUxMTEwXHUxMTYyXHUxMTBCXHUxMTYzXHUxMUJDClx1MTExMFx1MTE2Mlx1MTExMVx1MTE2RVx1MTFCQwpcdTExMTBcdTExNjJcdTExQThcdTExMDlcdTExNzUKXHUxMTEwXHUxMTYyXHUxMUFGXHUxMTA1XHUxMTY1XHUxMUFCXHUxMTEwXHUxMTczClx1MTExMFx1MTE2NVx1MTEwMlx1MTE2NVx1MTFBRgpcdTExMTBcdTExNjVcdTExMDZcdTExNzVcdTExMDJcdTExNjVcdTExQUYKXHUxMTEwXHUxMTY2XHUxMTAyXHUxMTc1XHUxMTA5XHUxMTczClx1MTExMFx1MTE2Nlx1MTEwOVx1MTE3M1x1MTExMFx1MTE3MwpcdTExMTBcdTExNjZcdTExMEJcdTExNzVcdTExMDdcdTExNzNcdTExQUYKXHUxMTEwXHUxMTY2XHUxMUFGXHUxMTA1XHUxMTY2XHUxMTA3XHUxMTc1XHUxMTBDXHUxMTY1XHUxMUFCClx1MTExMFx1MTE2OVx1MTEwNVx1MTE2OVx1MTFBQgpcdTExMTBcdTExNjlcdTExMDZcdTExNjFcdTExMTBcdTExNjkKXHUxMTEwXHUxMTY5XHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTExMFx1MTE2OVx1MTFCQ1x1MTEwMFx1MTE2OApcdTExMTBcdTExNjlcdTExQkNcdTExMDBcdTExNkEKXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTA1XHUxMTY5Clx1MTExMFx1MTE2OVx1MTFCQ1x1MTEwOVx1MTE3NVx1MTFBQgpcdTExMTBcdTExNjlcdTExQkNcdTExMEJcdTExNjdcdTExQTgKXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTc1XHUxMUFGClx1MTExMFx1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMTBcdTExNjlcdTExQkNcdTExMENcdTExNjYKXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTBDXHUxMTczXHUxMUJDClx1MTExMFx1MTE2OVx1MTFCQ1x1MTExMlx1MTE2MVx1MTFCOApcdTExMTBcdTExNjlcdTExQkNcdTExMTJcdTExNkEKXHUxMTEwXHUxMTZDXHUxMTAwXHUxMTczXHUxMUFCClx1MTExMFx1MTE2Q1x1MTEwQlx1MTE2Rlx1MTFBQgpcdTExMTBcdTExNkNcdTExMENcdTExNzVcdTExQThcdTExMDBcdTExNzNcdTExQjcKXHUxMTEwXHUxMTcxXHUxMTAwXHUxMTc1XHUxMUI3Clx1MTExMFx1MTE3M1x1MTEwNVx1MTE2NVx1MTFBOApcdTExMTBcdTExNzNcdTExQThcdTExMDBcdTExNzNcdTExQjgKXHUxMTEwXHUxMTczXHUxMUE4XHUxMTA3XHUxMTY3XHUxMUFGClx1MTExMFx1MTE3M1x1MTFBOFx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMTBcdTExNzNcdTExQThcdTExMDlcdTExNkUKXHUxMTEwXHUxMTczXHUxMUE4XHUxMTBDXHUxMTc1XHUxMUJDClx1MTExMFx1MTE3M1x1MTFBOFx1MTExMlx1MTE3NQpcdTExMTBcdTExNzNcdTExQUJcdTExMTBcdTExNzNcdTExQUJcdTExMTJcdTExNzUKXHUxMTEwXHUxMTc1XHUxMTA5XHUxMTY3XHUxMTBFXHUxMTczClx1MTExMVx1MTE2MVx1MTEwNVx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMTFcdTExNjFcdTExMEJcdTExNzVcdTExQUYKXHUxMTExXHUxMTYxXHUxMTBFXHUxMTZFXHUxMUFGXHUxMTA5XHUxMTY5Clx1MTExMVx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2N1x1MTFBRgpcdTExMTFcdTExNjFcdTExQUJcdTExMDNcdTExNjFcdTExQUIKXHUxMTExXHUxMTYxXHUxMUFCXHUxMTA2XHUxMTYyClx1MTExMVx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2MQpcdTExMTFcdTExNjFcdTExQUZcdTExMDlcdTExNzVcdTExQjgKXHUxMTExXHUxMTYxXHUxMUFGXHUxMTBCXHUxMTZGXHUxMUFGClx1MTExMVx1MTE2MVx1MTFCOFx1MTEwOVx1MTE2OVx1MTFCQwpcdTExMTFcdTExNjJcdTExMDlcdTExNjdcdTExQUIKXHUxMTExXHUxMTYyXHUxMUE4XHUxMTA5XHUxMTczClx1MTExMVx1MTE2Mlx1MTFBOFx1MTEwOVx1MTE3NVx1MTEwNlx1MTE3NVx1MTFBRlx1MTEwNVx1MTE3NQpcdTExMTFcdTExNjJcdTExQUJcdTExMTBcdTExNzUKXHUxMTExXHUxMTY1XHUxMTA5XHUxMTY2XHUxMUFCXHUxMTEwXHUxMTczClx1MTExMVx1MTE2Nlx1MTEwQlx1MTE3NVx1MTFBQlx1MTExMFx1MTE3MwpcdTExMTFcdTExNjdcdTExQUJcdTExMDBcdTExNjdcdTExQUIKXHUxMTExXHUxMTY3XHUxMUFCXHUxMTBCXHUxMTc0Clx1MTExMVx1MTE2N1x1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMTFcdTExNjdcdTExQUJcdTExMTJcdTExNzUKXHUxMTExXHUxMTY3XHUxMUJDXHUxMTAwXHUxMTYxClx1MTExMVx1MTE2N1x1MTFCQ1x1MTEwMFx1MTE3Mlx1MTFBQgpcdTExMTFcdTExNjdcdTExQkNcdTExMDlcdTExNjJcdTExQkMKXHUxMTExXHUxMTY3XHUxMUJDXHUxMTA5XHUxMTY5Clx1MTExMVx1MTE2N1x1MTFCQ1x1MTEwQlx1MTE2M1x1MTFCQwpcdTExMTFcdTExNjdcdTExQkNcdTExMEJcdTExNzVcdTExQUYKXHUxMTExXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTZBClx1MTExMVx1MTE2OVx1MTEwOVx1MTE3M1x1MTExMFx1MTE2NQpcdTExMTFcdTExNjlcdTExMEJcdTExNzVcdTExQUJcdTExMTBcdTExNzMKXHUxMTExXHUxMTY5XHUxMTBDXHUxMTYxXHUxMUJDClx1MTExMVx1MTE2OVx1MTExMlx1MTE2MVx1MTFCNwpcdTExMTFcdTExNkRcdTExMDZcdTExNjdcdTExQUIKXHUxMTExXHUxMTZEXHUxMTBDXHUxMTY1XHUxMUJDClx1MTExMVx1MTE2RFx1MTEwQ1x1MTE2RVx1MTFBQgpcdTExMTFcdTExNkRcdTExMTJcdTExNjdcdTExQUIKXHUxMTExXHUxMTZFXHUxMUI3XHUxMTA2XHUxMTY5XHUxMUE4Clx1MTExMVx1MTE2RVx1MTFCN1x1MTEwQ1x1MTE3NVx1MTFBRgpcdTExMTFcdTExNkVcdTExQkNcdTExMDBcdTExNjdcdTExQkMKXHUxMTExXHUxMTZFXHUxMUJDXHUxMTA5XHUxMTY5XHUxMUE4Clx1MTExMVx1MTE2RVx1MTFCQ1x1MTEwOVx1MTE3M1x1MTFCOApcdTExMTFcdTExNzNcdTExMDVcdTExNjFcdTExQkNcdTExMDlcdTExNzMKXHUxMTExXHUxMTczXHUxMTA1XHUxMTc1XHUxMUFCXHUxMTEwXHUxMTY1Clx1MTExMVx1MTE3M1x1MTFBRlx1MTEwNVx1MTE2MVx1MTEwOVx1MTE3M1x1MTExMFx1MTE3NVx1MTFBOApcdTExMTFcdTExNzVcdTExMDBcdTExNjlcdTExQUIKXHUxMTExXHUxMTc1XHUxMTA2XHUxMTYxXHUxMUJDClx1MTExMVx1MTE3NVx1MTEwQlx1MTE2MVx1MTEwMlx1MTE2OQpcdTExMTFcdTExNzVcdTExQUZcdTExMDVcdTExNzNcdTExQjcKXHUxMTExXHUxMTc1XHUxMUFGXHUxMTA5XHUxMTZFClx1MTExMVx1MTE3NVx1MTFBRlx1MTEwQlx1MTE2RApcdTExMTFcdTExNzVcdTExQUZcdTExMENcdTExNjEKXHUxMTExXHUxMTc1XHUxMUFGXHUxMTEwXHUxMTY5XHUxMUJDClx1MTExMVx1MTE3NVx1MTFCQ1x1MTEwMFx1MTE2OApcdTExMTJcdTExNjFcdTExMDJcdTExNzNcdTExMDJcdTExNzVcdTExQjcKXHUxMTEyXHUxMTYxXHUxMTAyXHUxMTczXHUxMUFGClx1MTExMlx1MTE2MVx1MTEwM1x1MTE3M1x1MTEwQlx1MTE3MFx1MTEwQlx1MTE2NQpcdTExMTJcdTExNjFcdTExMDVcdTExNkVcdTExQkFcdTExMDdcdTExNjFcdTExQjcKXHUxMTEyXHUxMTYxXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTAwXHUxMTc1Clx1MTExMlx1MTE2MVx1MTEwOVx1MTE2RVx1MTFBOFx1MTEwQ1x1MTE3NVx1MTFCOApcdTExMTJcdTExNjFcdTExMDlcdTExNkVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMTBCXHUxMTY3XHUxMTEwXHUxMTczXHUxMUFCClx1MTExMlx1MTE2MVx1MTEwQ1x1MTE3NVx1MTEwNlx1MTE2MVx1MTFBQgpcdTExMTJcdTExNjFcdTExMEVcdTExNjVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMTExXHUxMTZFXHUxMUI3Clx1MTExMlx1MTE2MVx1MTExMVx1MTE3NVx1MTFBRgpcdTExMTJcdTExNjFcdTExQThcdTExMDBcdTExNkEKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTAwXHUxMTZEClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwMFx1MTE3M1x1MTFCOApcdTExMTJcdTExNjFcdTExQThcdTExMDBcdTExNzUKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTAyXHUxMTY3XHUxMUFCClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwNVx1MTE2N1x1MTFBOApcdTExMTJcdTExNjFcdTExQThcdTExMDdcdTExNjVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA3XHUxMTZFXHUxMTA2XHUxMTY5Clx1MTExMlx1MTE2MVx1MTFBOFx1MTEwN1x1MTE3NQpcdTExMTJcdTExNjFcdTExQThcdTExMDlcdTExNjJcdTExQkMKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTZFXHUxMUFGClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwOVx1MTE3M1x1MTFCOApcdTExMTJcdTExNjFcdTExQThcdTExMEJcdTExNkRcdTExQkNcdTExMTFcdTExNkVcdTExQjcKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTBCXHUxMTZGXHUxMUFCClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwQlx1MTE3MQpcdTExMTJcdTExNjFcdTExQThcdTExMENcdTExNjEKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTBDXHUxMTY1XHUxMUI3Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2OApcdTExMTJcdTExNjFcdTExQUJcdTExMDBcdTExNzNcdTExQUYKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTAxXHUxMTY1XHUxMTA3XHUxMTY1XHUxMUFCXHUxMTBCXHUxMTY2Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwMlx1MTE2MVx1MTFCRApcdTExMTJcdTExNjFcdTExQUJcdTExMDJcdTExNkVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTAzXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTYxXHUxMUFCClx1MTExMlx1MTE2MVx1MTFBQlx1MTEwNFx1MTE2MgpcdTExMTJcdTExNjFcdTExQUJcdTExMDVcdTExNjFcdTExMDlcdTExNjFcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTA2XHUxMTYxXHUxMTAzXHUxMTc1Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMTJcdTExNjFcdTExQUJcdTExMDdcdTExNjVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTA3XHUxMTY5XHUxMUE4Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwOVx1MTE3NVx1MTFBOApcdTExMTJcdTExNjFcdTExQUJcdTExMEJcdTExNjdcdTExMDVcdTExNzNcdTExQjcKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTBEXHUxMTY5XHUxMUE4Clx1MTExMlx1MTE2MVx1MTFBRlx1MTEwNlx1MTE2NVx1MTEwMlx1MTE3NQpcdTExMTJcdTExNjFcdTExQUZcdTExMEJcdTExNjFcdTExMDdcdTExNjVcdTExMENcdTExNzUKXHUxMTEyXHUxMTYxXHUxMUFGXHUxMTBCXHUxMTc1XHUxMUFCClx1MTExMlx1MTE2MVx1MTFCN1x1MTEwMVx1MTE2NgpcdTExMTJcdTExNjFcdTExQjdcdTExMDdcdTExNkVcdTExMDVcdTExNjkKXHUxMTEyXHUxMTYxXHUxMUI4XHUxMTAwXHUxMTY3XHUxMUE4Clx1MTExMlx1MTE2MVx1MTFCOFx1MTEwNVx1MTE3NVx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMTJcdTExNjFcdTExQkNcdTExMDBcdTExNjlcdTExQkMKXHUxMTEyXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTZFClx1MTExMlx1MTE2MVx1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQwpcdTExMTJcdTExNjFcdTExQkNcdTExMEJcdTExNzQKXHUxMTEyXHUxMTYyXHUxMTAwXHUxMTY3XHUxMUFGClx1MTExMlx1MTE2Mlx1MTEwMFx1MTE2RVx1MTFBQgpcdTExMTJcdTExNjJcdTExMDNcdTExNjFcdTExQjgKXHUxMTEyXHUxMTYyXHUxMTAzXHUxMTYxXHUxMUJDClx1MTExMlx1MTE2Mlx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMTJcdTExNjJcdTExMDlcdTExNjVcdTExQTgKXHUxMTEyXHUxMTYyXHUxMTA5XHUxMTY1XHUxMUFGClx1MTExMlx1MTE2Mlx1MTEwOVx1MTE2RVx1MTEwQlx1MTE2RFx1MTFBOFx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMTJcdTExNjJcdTExMEJcdTExNjFcdTExQUIKXHUxMTEyXHUxMTYyXHUxMUE4XHUxMTA5XHUxMTc1XHUxMUI3Clx1MTExMlx1MTE2Mlx1MTFBQlx1MTEwM1x1MTE3M1x1MTEwN1x1MTE2Mlx1MTFBOApcdTExMTJcdTExNjJcdTExQjdcdTExMDdcdTExNjVcdTExMDBcdTExNjUKXHUxMTEyXHUxMTYyXHUxMUJBXHUxMTA3XHUxMTY3XHUxMUMwClx1MTExMlx1MTE2Mlx1MTFCQVx1MTEwOVx1MTE2MVx1MTFBRgpcdTExMTJcdTExNjJcdTExQkNcdTExMDNcdTExNjlcdTExQkMKXHUxMTEyXHUxMTYyXHUxMUJDXHUxMTA3XHUxMTY5XHUxMUE4Clx1MTExMlx1MTE2Mlx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMTJcdTExNjJcdTExQkNcdTExMEJcdTExNkVcdTExQUIKXHUxMTEyXHUxMTYyXHUxMUJDXHUxMTBCXHUxMTcxClx1MTExMlx1MTE2M1x1MTFCQ1x1MTEwMFx1MTE3NQpcdTExMTJcdTExNjNcdTExQkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTEyXHUxMTYzXHUxMUJDXHUxMTA5XHUxMTZFClx1MTExMlx1MTE2NVx1MTEwNVx1MTE2MVx1MTFBOApcdTExMTJcdTExNjVcdTExMEJcdTExNkRcdTExQkMKXHUxMTEyXHUxMTY2XHUxMUFGXHUxMTAwXHUxMTc1Clx1MTExMlx1MTE2N1x1MTFBQlx1MTEwMFx1MTE2QVx1MTFBQgpcdTExMTJcdTExNjdcdTExQUJcdTExMDBcdTExNzNcdTExQjcKXHUxMTEyXHUxMTY3XHUxMUFCXHUxMTAzXHUxMTYyClx1MTExMlx1MTE2N1x1MTFBQlx1MTEwOVx1MTE2MVx1MTFCQwpcdTExMTJcdTExNjdcdTExQUJcdTExMDlcdTExNzVcdTExQUYKXHUxMTEyXHUxMTY3XHUxMUFCXHUxMTBDXHUxMTYxXHUxMUJDClx1MTExMlx1MTE2N1x1MTFBQlx1MTEwQ1x1MTE2MgpcdTExMTJcdTExNjdcdTExQUJcdTExMENcdTExNzUKXHUxMTEyXHUxMTY3XHUxMUFGXHUxMTBCXHUxMTYyXHUxMUE4Clx1MTExMlx1MTE2N1x1MTFCOFx1MTEwNVx1MTE2N1x1MTFBOApcdTExMTJcdTExNjdcdTExQkNcdTExMDdcdTExNkUKXHUxMTEyXHUxMTY3XHUxMUJDXHUxMTA5XHUxMTYxClx1MTExMlx1MTE2N1x1MTFCQ1x1MTEwOVx1MTE2RQpcdTExMTJcdTExNjdcdTExQkNcdTExMDlcdTExNzVcdTExQTgKXHUxMTEyXHUxMTY3XHUxMUJDXHUxMTBDXHUxMTY2Clx1MTExMlx1MTE2N1x1MTFCQ1x1MTExMFx1MTE2MgpcdTExMTJcdTExNjdcdTExQkNcdTExMTFcdTExNjdcdTExQUIKXHUxMTEyXHUxMTY4XHUxMTEwXHUxMTYyXHUxMUE4Clx1MTExMlx1MTE2OVx1MTEwMFx1MTE3NVx1MTEwOVx1MTE3NVx1MTFCNwpcdTExMTJcdTExNjlcdTExMDJcdTExNjFcdTExQjcKXHUxMTEyXHUxMTY5XHUxMTA1XHUxMTYxXHUxMUJDXHUxMTBCXHUxMTc1Clx1MTExMlx1MTE2OVx1MTEwN1x1MTE2MVx1MTFBOApcdTExMTJcdTExNjlcdTExMTBcdTExNjZcdTExQUYKXHUxMTEyXHUxMTY5XHUxMTEyXHUxMTczXHUxMUI4Clx1MTExMlx1MTE2OVx1MTFBOFx1MTEwOVx1MTE3NQpcdTExMTJcdTExNjlcdTExQUZcdTExMDVcdTExNjkKXHUxMTEyXHUxMTY5XHUxMUI3XHUxMTExXHUxMTY2XHUxMTBCXHUxMTc1XHUxMTBDXHUxMTc1Clx1MTExMlx1MTE2OVx1MTFCQ1x1MTEwN1x1MTE2OQpcdTExMTJcdTExNjlcdTExQkNcdTExMDlcdTExNkUKXHUxMTEyXHUxMTY5XHUxMUJDXHUxMTBFXHUxMTYxClx1MTExMlx1MTE2QVx1MTEwNlx1MTE2N1x1MTFBQgpcdTExMTJcdTExNkFcdTExMDdcdTExNkVcdTExQUIKXHUxMTEyXHUxMTZBXHUxMTA5XHUxMTYxXHUxMUFGClx1MTExMlx1MTE2QVx1MTEwQlx1MTE2RFx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMTJcdTExNkFcdTExMENcdTExNjFcdTExQkMKXHUxMTEyXHUxMTZBXHUxMTEyXHUxMTYxXHUxMUE4Clx1MTExMlx1MTE2QVx1MTFBOFx1MTEwN1x1MTE2OQpcdTExMTJcdTExNkFcdTExQThcdTExMEJcdTExNzVcdTExQUIKXHUxMTEyXHUxMTZBXHUxMUE4XHUxMTBDXHUxMTYxXHUxMUJDClx1MTExMlx1MTE2QVx1MTFBOFx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMTJcdTExNkFcdTExQUJcdTExMDBcdTExNjFcdTExQjgKXHUxMTEyXHUxMTZBXHUxMUFCXHUxMTAwXHUxMTY3XHUxMUJDClx1MTExMlx1MTE2QVx1MTFBQlx1MTEwQlx1MTE2N1x1MTFCQwpcdTExMTJcdTExNkFcdTExQUJcdTExMEJcdTExNzJcdTExQUYKXHUxMTEyXHUxMTZBXHUxMUFCXHUxMTBDXHUxMTYxClx1MTExMlx1MTE2QVx1MTFBRlx1MTEwMFx1MTE3NQpcdTExMTJcdTExNkFcdTExQUZcdTExMDNcdTExNjlcdTExQkMKXHUxMTEyXHUxMTZBXHUxMUFGXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTEyXHUxMTc1Clx1MTExMlx1MTE2QVx1MTFBRlx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMTJcdTExNkFcdTExQUZcdTExMERcdTExNjFcdTExQTgKXHUxMTEyXHUxMTZDXHUxMTAwXHUxMTY3XHUxMUFCClx1MTExMlx1MTE2Q1x1MTEwMFx1MTE2QVx1MTFBQgpcdTExMTJcdTExNkNcdTExMDdcdTExNjlcdTExQTgKXHUxMTEyXHUxMTZDXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTExMlx1MTE2Q1x1MTEwQlx1MTE2Rlx1MTFBQgpcdTExMTJcdTExNkNcdTExMENcdTExNjFcdTExQkMKXHUxMTEyXHUxMTZDXHUxMTBDXHUxMTY1XHUxMUFCClx1MTExMlx1MTE2Q1x1MTFCQVx1MTEwOVx1MTE2RQpcdTExMTJcdTExNkNcdTExQkNcdTExMDNcdTExNjFcdTExQUJcdTExMDdcdTExNjlcdTExMDNcdTExNjkKXHUxMTEyXHUxMTZEXHUxMTBCXHUxMTcyXHUxMUFGXHUxMTBDXHUxMTY1XHUxMUE4Clx1MTExMlx1MTE2RVx1MTEwN1x1MTE2MVx1MTFBQgpcdTExMTJcdTExNkVcdTExMEVcdTExNkVcdTExQkFcdTExMDBcdTExNjFcdTExMDVcdTExNkUKXHUxMTEyXHUxMTZFXHUxMUFCXHUxMTA1XHUxMTY3XHUxMUFCClx1MTExMlx1MTE2Rlx1MTFBRlx1MTEwQVx1MTE3NVx1MTFBQgpcdTExMTJcdTExNzJcdTExMDlcdTExNzVcdTExQTgKXHUxMTEyXHUxMTcyXHUxMTBCXHUxMTc1XHUxMUFGClx1MTExMlx1MTE3Mlx1MTFCQ1x1MTEwMlx1MTE2MgpcdTExMTJcdTExNzNcdTExMDVcdTExNzNcdTExQjcKXHUxMTEyXHUxMTczXHUxMUE4XHUxMTA3XHUxMTYyXHUxMUE4Clx1MTExMlx1MTE3M1x1MTFBOFx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMTJcdTExNzNcdTExQUJcdTExMENcdTExNjVcdTExQTgKXHUxMTEyXHUxMTczXHUxMUFCXHUxMTEyXHUxMTc1Clx1MTExMlx1MTE3M1x1MTFCQ1x1MTEwNlx1MTE3NQpcdTExMTJcdTExNzNcdTExQkNcdTExMDdcdTExNkVcdTExQUIKXHUxMTEyXHUxMTc0XHUxMTAwXHUxMTY5XHUxMUE4Clx1MTExMlx1MTE3NFx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMTJcdTExNzRcdTExMDlcdTExNjJcdTExQkMKXHUxMTEyXHUxMTc0XHUxMUFCXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTExMlx1MTE3NVx1MTFCN1x1MTEwMVx1MTE2NVx1MTFCQWAuc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy9zaW1wbGlmaWVkLWNoaW5lc2UuanMKICB2YXIgd29yZGxpc3Q3ID0gYFx1NzY4NApcdTRFMDAKXHU2NjJGClx1NTcyOApcdTRFMEQKXHU0RTg2Clx1NjcwOQpcdTU0OEMKXHU0RUJBClx1OEZEOQpcdTRFMkQKXHU1OTI3Clx1NEUzQQpcdTRFMEEKXHU0RTJBClx1NTZGRApcdTYyMTEKXHU0RUU1Clx1ODk4MQpcdTRFRDYKXHU2NUY2Clx1Njc2NQpcdTc1MjgKXHU0RUVDClx1NzUxRgpcdTUyMzAKXHU0RjVDClx1NTczMApcdTRFOEUKXHU1MUZBClx1NUMzMQpcdTUyMDYKXHU1QkY5Clx1NjIxMApcdTRGMUEKXHU1M0VGClx1NEUzQgpcdTUzRDEKXHU1RTc0Clx1NTJBOApcdTU0MEMKXHU1REU1Clx1NEU1RgpcdTgwRkQKXHU0RTBCClx1OEZDNwpcdTVCNTAKXHU4QkY0Clx1NEVBNwpcdTc5Q0QKXHU5NzYyClx1ODAwQwpcdTY1QjkKXHU1NDBFClx1NTkxQQpcdTVCOUEKXHU4ODRDClx1NUI2NgpcdTZDRDUKXHU2MjQwClx1NkMxMQpcdTVGOTcKXHU3RUNGClx1NTM0MQpcdTRFMDkKXHU0RTRCClx1OEZEQgpcdTc3NDAKXHU3QjQ5Clx1OTBFOApcdTVFQTYKXHU1QkI2Clx1NzUzNQpcdTUyOUIKXHU5MUNDClx1NTk4MgpcdTZDMzQKXHU1MzE2Clx1OUFEOApcdTgxRUEKXHU0RThDClx1NzQwNgpcdThENzcKXHU1QzBGClx1NzI2OQpcdTczQjAKXHU1QjlFClx1NTJBMApcdTkxQ0YKXHU5MEZEClx1NEUyNApcdTRGNTMKXHU1MjM2Clx1NjczQQpcdTVGNTMKXHU0RjdGClx1NzBCOQpcdTRFQ0UKXHU0RTFBClx1NjcyQwpcdTUzQkIKXHU2MjhBClx1NjAyNwpcdTU5N0QKXHU1RTk0Clx1NUYwMApcdTVCODMKXHU1NDA4Clx1OEZEOApcdTU2RTAKXHU3NTMxClx1NTE3NgpcdTRFOUIKXHU3MTM2Clx1NTI0RApcdTU5MTYKXHU1OTI5Clx1NjUzRgpcdTU2REIKXHU2NUU1Clx1OTBBMwpcdTc5M0UKXHU0RTQ5Clx1NEU4QgpcdTVFNzMKXHU1RjYyClx1NzZGOApcdTUxNjgKXHU4ODY4Clx1OTVGNApcdTY4MzcKXHU0RTBFClx1NTE3MwpcdTU0MDQKXHU5MUNEClx1NjVCMApcdTdFQkYKXHU1MTg1Clx1NjU3MApcdTZCNjMKXHU1RkMzClx1NTNDRApcdTRGNjAKXHU2NjBFClx1NzcwQgpcdTUzOUYKXHU1M0M4Clx1NEU0OApcdTUyMjkKXHU2QkQ0Clx1NjIxNgpcdTRGNDYKXHU4RDI4Clx1NkMxNApcdTdCMkMKXHU1NDExClx1OTA1MwpcdTU0N0QKXHU2QjY0Clx1NTNEOApcdTY3NjEKXHU1M0VBClx1NkNBMQpcdTdFRDMKXHU4OUUzClx1OTVFRQpcdTYxMEYKXHU1RUZBClx1NjcwOApcdTUxNkMKXHU2NUUwClx1N0NGQgpcdTUxOUIKXHU1Rjg4Clx1NjBDNQpcdTgwMDUKXHU2NzAwClx1N0FDQgpcdTRFRTMKXHU2MEYzClx1NURGMgpcdTkwMUEKXHU1RTc2Clx1NjNEMApcdTc2RjQKXHU5ODk4Clx1NTE1QQpcdTdBMEIKXHU1QzU1Clx1NEU5NApcdTY3OUMKXHU2NTk5Clx1OEM2MQpcdTU0NTgKXHU5NzY5Clx1NEY0RApcdTUxNjUKXHU1RTM4Clx1NjU4NwpcdTYwM0IKXHU2QjIxClx1NTRDMQpcdTVGMEYKXHU2RDNCClx1OEJCRQpcdTUzQ0EKXHU3QkExClx1NzI3OQpcdTRFRjYKXHU5NTdGClx1NkM0MgpcdTgwMDEKXHU1OTM0Clx1NTdGQQpcdThENDQKXHU4RkI5Clx1NkQ0MQpcdThERUYKXHU3RUE3Clx1NUMxMQpcdTU2RkUKXHU1QzcxClx1N0VERgpcdTYzQTUKXHU3N0U1Clx1OEY4MwpcdTVDMDYKXHU3RUM0Clx1ODlDMQpcdThCQTEKXHU1MjJCClx1NTk3OQpcdTYyNEIKXHU4OUQyClx1NjcxRgpcdTY4MzkKXHU4QkJBClx1OEZEMApcdTUxOUMKXHU2MzA3Clx1NTFFMApcdTRFNUQKXHU1MzNBClx1NUYzQQpcdTY1M0UKXHU1MUIzClx1ODk3RgpcdTg4QUIKXHU1RTcyClx1NTA1QQpcdTVGQzUKXHU2MjE4Clx1NTE0OApcdTU2REUKXHU1MjE5Clx1NEVGQgpcdTUzRDYKXHU2MzZFClx1NTkwNApcdTk2MUYKXHU1MzU3Clx1N0VEOQpcdTgyNzIKXHU1MTQ5Clx1OTVFOApcdTUzNzMKXHU0RkREClx1NkNCQgpcdTUzMTcKXHU5MDIwClx1NzY3RQpcdTg5QzQKXHU3MEVEClx1OTg4NgpcdTRFMDMKXHU2RDc3Clx1NTNFMwpcdTRFMUMKXHU1QkZDClx1NTY2OApcdTUzOEIKXHU1RkQ3Clx1NEUxNgpcdTkxRDEKXHU1ODlFClx1NEU4OQpcdTZENEUKXHU5NjM2Clx1NkNCOQpcdTYwMUQKXHU2NzJGClx1Njc4MQpcdTRFQTQKXHU1M0Q3Clx1ODA1NApcdTRFQzAKXHU4QkE0Clx1NTE2RApcdTUxNzEKXHU2NzQzClx1NjUzNgpcdThCQzEKXHU2NTM5Clx1NkUwNQpcdTdGOEUKXHU1MThEClx1OTFDNwpcdThGNkMKXHU2NkY0Clx1NTM1NQpcdTk4Q0UKXHU1MjA3Clx1NjI1MwpcdTc2N0QKXHU2NTU5Clx1OTAxRgpcdTgyQjEKXHU1RTI2Clx1NUI4OQpcdTU3M0EKXHU4RUFCClx1OEY2NgpcdTRGOEIKXHU3NzFGClx1NTJBMQpcdTUxNzcKXHU0RTA3Clx1NkJDRgpcdTc2RUUKXHU4MUYzClx1OEZCRQpcdThENzAKXHU3OUVGClx1NzkzQQpcdThCQUUKXHU1OEYwClx1NjJBNQpcdTY1OTcKXHU1QjhDClx1N0M3QgpcdTUxNkIKXHU3OUJCClx1NTM0RQpcdTU0MEQKXHU3ODZFClx1NjI0RApcdTc5RDEKXHU1RjIwClx1NEZFMQpcdTlBNkMKXHU4MjgyClx1OEJERApcdTdDNzMKXHU2NTc0Clx1N0E3QQpcdTUxNDMKXHU1MUI1Clx1NEVDQQpcdTk2QzYKXHU2RTI5Clx1NEYyMApcdTU3MUYKXHU4QkI4Clx1NkI2NQpcdTdGQTQKXHU1RTdGClx1NzdGMwpcdThCQjAKXHU5NzAwClx1NkJCNQpcdTc4MTQKXHU3NTRDClx1NjJDOQpcdTY3OTcKXHU1RjhCClx1NTNFQgpcdTRFMTQKXHU3QTc2Clx1ODlDMgpcdThEOEEKXHU3RUM3Clx1ODhDNQpcdTVGNzEKXHU3Qjk3Clx1NEY0RQpcdTYzMDEKXHU5N0YzClx1NEYxNwpcdTRFNjYKXHU1RTAzClx1NTkwRApcdTVCQjkKXHU1MTNGClx1OTg3QgpcdTk2NDUKXHU1NTQ2Clx1OTc1RQpcdTlBOEMKXHU4RkRFClx1NjVBRApcdTZERjEKXHU5NkJFClx1OEZEMQpcdTc3RkYKXHU1MzQzClx1NTQ2OApcdTU5RDQKXHU3RDIwClx1NjI4MApcdTU5MDcKXHU1MzRBClx1NTI5RQpcdTk3NTIKXHU3NzAxClx1NTIxNwpcdTRFNjAKXHU1NENEClx1N0VBNgpcdTY1MkYKXHU4MjJDClx1NTNGMgpcdTYxMUYKXHU1MkIzClx1NEZCRgpcdTU2RTIKXHU1RjgwClx1OTE3OApcdTUzODYKXHU1RTAyClx1NTE0QgpcdTRGNTUKXHU5NjY0Clx1NkQ4OApcdTY3ODQKXHU1RTlDClx1NzlGMApcdTU5MkEKXHU1MUM2Clx1N0NCRQpcdTUwM0MKXHU1M0Y3Clx1NzM4NwpcdTY1Q0YKXHU3RUY0Clx1NTIxMgpcdTkwMDkKXHU2ODA3Clx1NTE5OQpcdTVCNTgKXHU1MDE5Clx1NkJEQgpcdTRFQjIKXHU1RkVCClx1NjU0OApcdTY1QUYKXHU5NjYyClx1NjdFNQpcdTZDNUYKXHU1NzhCClx1NzczQwpcdTczOEIKXHU2MzA5Clx1NjgzQwpcdTUxN0IKXHU2NjEzClx1N0Y2RQpcdTZEM0UKXHU1QzQyClx1NzI0NwpcdTU5Q0IKXHU1Mzc0Clx1NEUxMwpcdTcyQjYKXHU4MEIyClx1NTM4MgpcdTRFQUMKXHU4QkM2Clx1OTAwMgpcdTVDNUUKXHU1NzA2Clx1NTMwNQpcdTcwNkIKXHU0RjRGClx1OEMwMwpcdTZFRTEKXHU1M0JGClx1NUM0MApcdTcxNjcKXHU1M0MyClx1N0VBMgpcdTdFQzYKXHU1RjE1Clx1NTQyQwpcdThCRTUKXHU5NEMxClx1NEVGNwpcdTRFMjUKXHU5OTk2Clx1NUU5NQpcdTZEQjIKXHU1Qjk4Clx1NUZCNwpcdTk2OEYKXHU3NUM1Clx1ODJDRgpcdTU5MzEKXHU1QzE0Clx1NkI3QgpcdThCQjIKXHU5MTREClx1NTk3MwpcdTlFQzQKXHU2M0E4Clx1NjYzRQpcdThDMDgKXHU3RjZBClx1Nzk1RQpcdTgyN0EKXHU1NDYyClx1NUUyRApcdTU0MkIKXHU0RjAxClx1NjcxQgpcdTVCQzYKXHU2Mjc5Clx1ODQyNQpcdTk4NzkKXHU5NjMyClx1NEUzRQpcdTc0MDMKXHU4MkYxClx1NkMyNwpcdTUyQkYKXHU1NDRBClx1Njc0RQpcdTUzRjAKXHU4NDNEClx1NjcyOApcdTVFMkUKXHU4RjZFClx1NzgzNApcdTRFOUEKXHU1RTA4Clx1NTZGNApcdTZDRTgKXHU4RkRDClx1NUI1NwpcdTY3NTAKXHU2MzkyClx1NEY5QgpcdTZDQjMKXHU2MDAxClx1NUMwMQpcdTUzRTYKXHU2NUJEClx1NTFDRgpcdTY4MTEKXHU2RUI2Clx1NjAwRQpcdTZCNjIKXHU2ODQ4Clx1OEEwMApcdTU4RUIKXHU1NzQ3Clx1NkI2NgpcdTU2RkEKXHU1M0Y2Clx1OUM3QwpcdTZDRTIKXHU4OUM2Clx1NEVDNQpcdThEMzkKXHU3RDI3Clx1NzIzMQpcdTVERTYKXHU3QUUwClx1NjVFOQpcdTY3MUQKXHU1QkIzClx1N0VFRApcdThGN0IKXHU2NzBEClx1OEJENQpcdTk4REYKXHU1MTQ1Clx1NTE3NQpcdTZFOTAKXHU1MjI0Clx1NjJBNApcdTUzRjgKXHU4REIzClx1NjdEMApcdTdFQzMKXHU1REVFClx1ODFGNApcdTY3N0YKXHU3NTMwClx1OTY0RApcdTlFRDEKXHU3MkFGClx1OEQxRgpcdTUxRkIKXHU4MzAzClx1N0VFNwpcdTUxNzQKXHU0RjNDClx1NEY1OQpcdTU3NUEKXHU2NkYyClx1OEY5MwpcdTRGRUUKXHU2NTQ1Clx1NTdDRQpcdTU5MkIKXHU1OTFGClx1OTAwMQpcdTdCMTQKXHU4MjM5Clx1NTM2MApcdTUzRjMKXHU4RDIyClx1NTQwMwpcdTVCQ0MKXHU2NjI1Clx1ODA0QwpcdTg5QzkKXHU2QzQ5Clx1NzUzQgpcdTUyOUYKXHU1REY0Clx1OERERgpcdTg2N0QKXHU2NzQyClx1OThERQpcdTY4QzAKXHU1NDM4Clx1NTJBOQpcdTUzNDcKXHU5NjMzClx1NEU5MgpcdTUyMUQKXHU1MjFCClx1NjI5NwpcdTgwMDMKXHU2Mjk1Clx1NTc0RgpcdTdCNTYKXHU1M0U0Clx1NUY4NApcdTYzNjIKXHU2NzJBClx1OEREMQpcdTc1NTkKXHU5NEEyClx1NjZGRQpcdTdBRUYKXHU4RDIzClx1N0FEOQpcdTdCODAKXHU4RkYwClx1OTRCMQpcdTUyNkYKXHU1QzNEClx1NUUxRApcdTVDMDQKXHU4MzQ5Clx1NTFCMgpcdTYyN0YKXHU3MkVDClx1NEVFNApcdTk2NTAKXHU5NjNGClx1NUJBMwpcdTczQUYKXHU1M0NDClx1OEJGNwpcdThEODUKXHU1RkFFClx1OEJBOQpcdTYzQTcKXHU1RERFClx1ODI2RgpcdThGNzQKXHU2MjdFClx1NTQyNgpcdTdFQUEKXHU3NkNBClx1NEY5RApcdTRGMTgKXHU5ODc2Clx1Nzg0MApcdThGN0QKXHU1MDEyClx1NjIzRgpcdTdBODEKXHU1NzUwClx1N0M4OQpcdTY1NEMKXHU3NTY1Clx1NUJBMgpcdTg4ODEKXHU1MUI3Clx1ODBEQwpcdTdFREQKXHU2NzkwClx1NTc1NwpcdTUyNDIKXHU2RDRCClx1NEUxRApcdTUzNEYKXHU4QkM5Clx1NUZGNQpcdTk2NDgKXHU0RUNEClx1N0Y1NwpcdTc2RDAKXHU1M0NCClx1NkQwQgpcdTk1MTkKXHU4MkU2Clx1NTkxQwpcdTUyMTEKXHU3OUZCClx1OTg5MQpcdTkwMTAKXHU5NzYwClx1NkRGNwpcdTZCQ0QKXHU3N0VEClx1NzZBRQpcdTdFQzgKXHU4MDVBClx1NkM3RApcdTY3NTEKXHU0RTkxClx1NTRFQQpcdTY1RTIKXHU4REREClx1NTM2QgpcdTUwNUMKXHU3MEM4Clx1NTkyRQpcdTVCREYKXHU3MEU3Clx1OEZDNQpcdTU4ODMKXHU4MkU1Clx1NTM3MApcdTZEMzIKXHU1MjNCClx1NjJFQwpcdTZGQzAKXHU1QjU0Clx1NjQxRQpcdTc1MUEKXHU1QkE0Clx1NUY4NQpcdTY4MzgKXHU2ODIxClx1NjU2MwpcdTRGQjUKXHU1NDI3Clx1NzUzMgpcdTZFMzgKXHU0RTQ1Clx1ODNEQwpcdTU0NzMKXHU2NUU3Clx1NkEyMQpcdTZFNTYKXHU4RDI3Clx1NjM1RgpcdTk4ODQKXHU5NjNCClx1NkJFQgpcdTY2NkUKXHU3QTMzClx1NEU1OQpcdTU5ODgKXHU2OTBEClx1NjA2RgpcdTYyNjkKXHU5NEY2Clx1OEJFRApcdTYzMjUKXHU5MTUyClx1NUI4OApcdTYyRkYKXHU1RThGClx1N0VCOApcdTUzM0IKXHU3RjNBClx1OTZFOApcdTU0MTcKXHU5NDg4Clx1NTIxOApcdTU1NEEKXHU2MDI1Clx1NTUzMQpcdThCRUYKXHU4QkFEClx1NjEzRgpcdTVCQTEKXHU5NjQ0Clx1ODNCNwpcdTgzMzYKXHU5QzlDClx1N0NBRQpcdTY1QTQKXHU1QjY5Clx1ODEzMQpcdTc4NkIKXHU4MEE1Clx1NTU4NApcdTlGOTkKXHU2RjE0Clx1NzIzNgpcdTZFMTAKXHU4ODQwClx1NkIyMgpcdTY4QjAKXHU2MzhDClx1NkI0QwpcdTZDOTkKXHU1MjFBClx1NjUzQgpcdThDMTMKXHU3NkZFClx1OEJBOApcdTY2NUEKXHU3QzkyClx1NEU3MQpcdTcxQzMKXHU3N0RCClx1NEU0RQpcdTY3NDAKXHU4MzZGClx1NUI4MQpcdTlDODEKXHU4RDM1Clx1OTQ5RgpcdTcxNjQKXHU4QkZCClx1NzNFRApcdTRGMkYKXHU5OTk5Clx1NEVDQgpcdThGRUIKXHU1M0U1Clx1NEUzMApcdTU3RjkKXHU2M0UxClx1NTE3MApcdTYyQzUKXHU1RjI2Clx1ODZDQgpcdTZDODkKXHU1MDQ3Clx1N0E3RgpcdTYyNjcKXHU3QjU0Clx1NEU1MApcdThDMDEKXHU5ODdBClx1NzBERgpcdTdGMjkKXHU1RjgxClx1ODEzOApcdTU1OUMKXHU2NzdFClx1ODExQQpcdTU2RjAKXHU1RjAyClx1NTE0RApcdTgwQ0MKXHU2NjFGClx1Nzk4RgpcdTRFNzAKXHU2N0QzClx1NEU5NQpcdTY5ODIKXHU2MTYyClx1NjAxNQpcdTc4QzEKXHU1MDBEClx1Nzk1NgpcdTc2ODcKXHU0RkMzClx1OTc1OQpcdTg4NjUKXHU4QkM0Clx1N0ZGQgpcdTgwODkKXHU4REY1Clx1NUMzQwpcdTg4NjMKXHU1QkJEClx1NjI2QwpcdTY4QzkKXHU1RTBDClx1NEYyNApcdTY0Q0QKXHU1NzgyClx1NzlDQgpcdTVCOUMKXHU2QzIyClx1NTk1NwpcdTc3NjMKXHU2MzJGClx1NjdCNgpcdTRFQUUKXHU2NzJCClx1NUJBQQpcdTVFODYKXHU3RjE2Clx1NzI1QgpcdTg5RTYKXHU2NjIwClx1OTZGNwpcdTk1MDAKXHU4QkQ3Clx1NUVBNwpcdTVDNDUKXHU2MjkzClx1ODhDMgpcdTgwREUKXHU1NDdDClx1NUExOApcdTY2NkYKXHU1QTAxClx1N0VGRgpcdTY2NzYKXHU1MzlBClx1NzZERgpcdTg4NjEKXHU5RTIxClx1NUI1OQpcdTVFRjYKXHU1MzcxClx1ODBGNgpcdTVDNEIKXHU0RTYxClx1NEUzNApcdTk2NDYKXHU5ODdFClx1NjM4OQpcdTU0NDAKXHU3MDZGClx1NUM4MQpcdTYzQUEKXHU2NzVGClx1ODAxMApcdTUyNjcKXHU3Mzg5Clx1OEQ3NQpcdThERjMKXHU1NEU1Clx1NUI2MwpcdThCRkUKXHU1MUVGClx1ODBFMQpcdTk4OUQKXHU2QjNFClx1N0VDRApcdTUzNzcKXHU5RjUwClx1NEYxRgpcdTg0QjgKXHU2Qjk2Clx1NkMzOApcdTVCOTcKXHU4MkQ3Clx1NURERApcdTcwODkKXHU1Q0E5Clx1NUYzMQpcdTk2RjYKXHU2NzY4Clx1NTk0RgpcdTZDQkYKXHU5NzMyClx1Njc0NgpcdTYzQTIKXHU2RUQxClx1OTU0NwpcdTk5NkQKXHU2RDUzClx1ODIyQQpcdTYwMDAKXHU4RDc2Clx1NUU5MwpcdTU5M0EKXHU0RjBBClx1NzA3NQpcdTdBMEUKXHU5MDE0Clx1NzA2RApcdThENUIKXHU1RjUyClx1NTNFQwpcdTlGMTMKXHU2NEFEClx1NzZEOApcdTg4QzEKXHU5NjY5Clx1NUVCNwpcdTU1MkYKXHU1RjU1Clx1ODNDQwpcdTdFQUYKXHU1MDFGClx1N0NENgpcdTc2RDYKXHU2QTJBClx1N0IyNgpcdTc5QzEKXHU1MkFBClx1NTgwMgpcdTU3REYKXHU2N0FBClx1NkRBNgpcdTVFNDUKXHU1NEM4Clx1N0FERgpcdTcxOUYKXHU4NjZCClx1NkNGRApcdTgxMTEKXHU1OEU0Clx1NzhCMwpcdTZCMjcKXHU5MDREClx1NEZBNwpcdTVCRTgKXHU2NTYyClx1NUY3QgpcdTg2NTEKXHU2NTlDClx1ODU4NApcdTVFQUQKXHU3RUIzClx1NUYzOQpcdTk5NzIKXHU0RjM4Clx1NjI5OApcdTlFQTYKXHU2RTdGClx1NjY5NwpcdTgzNzcKXHU3NEU2Clx1NTg1RQpcdTVFOEEKXHU3QjUxClx1NjA3NgpcdTYyMzcKXHU4QkJGClx1NTg1NApcdTU5NDcKXHU5MDBGClx1Njg4MQpcdTUyMDAKXHU2NUNCClx1OEZGOQpcdTUzNjEKXHU2QzJGClx1OTA0NwpcdTRFRkQKXHU2QkQyClx1NkNFNQpcdTkwMDAKXHU2RDE3Clx1NjQ0NgpcdTcwNzAKXHU1RjY5Clx1NTM1NgpcdTgwMTcKXHU1OTBGClx1NjJFOQpcdTVGRDkKXHU5NERDClx1NzMyRQpcdTc4NkMKXHU0RTg4Clx1N0U0MQpcdTU3MDgKXHU5NkVBClx1NTFGRApcdTRFQTYKXHU2MkJEClx1N0JDNwpcdTk2MzUKXHU5NjM0Clx1NEUwMQpcdTVDM0EKXHU4RkZEClx1NTgwNgpcdTk2QzQKXHU4RkNFClx1NkNEQgpcdTcyMzgKXHU2OTdDClx1OTA3RgpcdThDMEIKXHU1NDI4Clx1OTFDRQpcdTczMkEKXHU2NUQ3Clx1N0QyRgpcdTUwNEYKXHU1MTc4Clx1OTk4NgpcdTdEMjIKXHU3OUU2Clx1ODEwMgpcdTZGNkUKXHU3MjM3Clx1OEM0NgpcdTVGRkQKXHU2MjU4Clx1NjBDQQpcdTU4NTEKXHU5MDU3Clx1NjEwOApcdTY3MzEKXHU2NkZGClx1N0VBNApcdTdDOTcKXHU1MDNFClx1NUMxQQpcdTc1REIKXHU2OTVBClx1OEMyMgpcdTU5NEIKXHU4RDJEClx1NzhFOApcdTU0MUIKXHU2QzYwClx1NjVDMQpcdTc4OEUKXHU5QUE4Clx1NzZEMQpcdTYzNTUKXHU1RjFGClx1NjZCNApcdTUyNzIKXHU4RDJGClx1NkI4QQpcdTkxQ0EKXHU4QkNEClx1NEVBMQpcdTU4QzEKXHU5ODdGClx1NUI5RApcdTUzNDgKXHU1QzE4Clx1OTVGQgpcdTYzRUQKXHU3MEFFClx1NkI4QgpcdTUxQUMKXHU2ODY1Clx1NTk4NwpcdThCNjYKXHU3RUZDClx1NjJEQgpcdTU0MzQKXHU0RUQ4Clx1NkQ2RQpcdTkwNkQKXHU1RjkwClx1NjBBOApcdTY0NDcKXHU4QzM3Clx1OEQ1RQpcdTdCQjEKXHU5Njk0Clx1OEJBMgpcdTc1MzcKXHU1NDM5Clx1NTZFRApcdTdFQjcKXHU1NTEwClx1OEQyNQpcdTVCOEIKXHU3M0JCClx1NURFOApcdTgwMTUKXHU1NzY2Clx1ODM2MwpcdTk1RUQKXHU2RTdFClx1OTUyRQpcdTUxRTEKXHU5QTdCClx1OTUwNQpcdTY1NTEKXHU2MDY5Clx1NTI2NQpcdTUxREQKXHU3OEIxClx1OUY3RgpcdTYyMkEKXHU3MEJDClx1OUVCQgpcdTdFQkEKXHU3OTgxClx1NUU5RgpcdTc2REIKXHU3MjQ4Clx1N0YxMwpcdTUxQzAKXHU3NzVCClx1NjYwQwpcdTVBNUEKXHU2RDg5Clx1N0I1MgpcdTU2MzQKXHU2M0QyClx1NUNCOApcdTY3MTcKXHU1RTg0Clx1ODg1NwpcdTg1Q0YKXHU1OUQxClx1OEQzOApcdTgxNTAKXHU1OTc0Clx1NTU2NgpcdTYwRUYKXHU0RTU4Clx1NEYxOQpcdTYwNjIKXHU1MzAwClx1N0VCMQpcdTYyNEUKXHU4RkE5Clx1ODAzMwpcdTVGNkEKXHU4MUUzClx1NEVCRgpcdTc0ODMKXHU2MkI1Clx1ODEwOQpcdTc5QzAKXHU4NDI4Clx1NEZDNApcdTdGNTEKXHU4MjFFClx1NUU5NwpcdTU1QjcKXHU3RUI1Clx1NUJGOApcdTZDNTcKXHU2MzAyClx1NkQyQQpcdThEM0EKXHU5NUVBClx1NjdFQwpcdTcyMDYKXHU3MEVGClx1NkQyNQpcdTdBM0IKXHU1ODk5Clx1OEY2RgpcdTUyQzcKXHU1MENGClx1NkVEQQpcdTUzOTgKXHU4NDk5Clx1ODJCMwpcdTgwQUYKXHU1NzYxClx1NjdGMQpcdTgzNjEKXHU4MTdGClx1NEVFQQpcdTY1QzUKXHU1QzNFClx1OEY2NwpcdTUxQjAKXHU4RDIxClx1NzY3QgpcdTlFQ0UKXHU1MjRBClx1OTRCQgpcdTUyRDIKXHU5MDAzClx1OTY5QwpcdTZDMjgKXHU5MEVEClx1NUNGMApcdTVFMDEKXHU2RTJGClx1NEYwRgpcdThGNjgKXHU0RUE5Clx1NkJENQpcdTY0RTYKXHU4M0FCClx1NTIzQQpcdTZENkEKXHU3OUQ4Clx1NjNGNApcdTY4MkEKXHU1MDY1Clx1NTUyRQpcdTgwQTEKXHU1QzlCClx1NzUxOApcdTZDRTEKXHU3NzYxClx1N0FFNQpcdTk0RjgKXHU2QzY0Clx1OTYwMApcdTRGMTEKXHU2QzQ3Clx1ODIwRApcdTcyNjcKXHU3RUQ1Clx1NzBCOApcdTU0RjIKXHU3OEY3Clx1N0VFOQpcdTY3MEIKXHU2REUxClx1NUMxNgpcdTU0MkYKXHU5Njc3Clx1NjdGNApcdTU0NDgKXHU1RjkyClx1OTg5QwpcdTZDRUEKXHU3QTBEClx1NUZEOApcdTZDRjUKXHU4NEREClx1NjJENgpcdTZEMUUKXHU2Mzg4Clx1OTU1QwpcdThGOUIKXHU1OEVFClx1OTUwQgpcdThEMkIKXHU4NjVBClx1NUYyRgpcdTY0NjkKXHU2Q0YwClx1NUU3QwpcdTVFRjcKXHU1QzBBClx1N0E5NwpcdTdFQjIKXHU1RjA0Clx1OTZCNgpcdTc1OTEKXHU2QzBGClx1NUJBQgpcdTU5RDAKXHU5NzA3Clx1NzQ1RQpcdTYwMkEKXHU1QzI0Clx1NzQzNApcdTVGQUEKXHU2M0NGClx1ODE5QwpcdThGREQKXHU1OTM5Clx1ODE3MApcdTdGMTgKXHU3M0UwClx1N0E3NwpcdTY4RUUKXHU2NzlEClx1N0FGOQpcdTZDOUYKXHU1MEFDClx1N0VGMwpcdTVGQzYKXHU5MEE2Clx1NTI2OQpcdTVFNzgKXHU2RDQ2Clx1NjgwRgpcdTYyRTUKXHU3MjU5Clx1OEQyRQpcdTc5M0MKXHU2RUU0Clx1OTRBMApcdTdFQjkKXHU3RjYyClx1NjJDRApcdTU0QjEKXHU1NThBClx1ODg5NgpcdTU3QzMKXHU1MkU0Clx1N0Y1QQpcdTcxMjYKXHU2RjVDClx1NEYwRApcdTU4QTgKXHU2QjMyClx1N0YxRApcdTU5RDMKXHU1MjBBClx1OTk3MQpcdTRFRkYKXHU1OTU2Clx1OTRERApcdTlCM0MKXHU0RTNEClx1OERFOApcdTlFRDgKXHU2MzE2Clx1OTRGRQpcdTYyNkIKXHU1NTlEClx1ODg4QgpcdTcwQUQKXHU2QzYxClx1NUU1NQpcdThCRjgKXHU1RjI3Clx1NTJCMQpcdTY4ODUKXHU1OTc2Clx1NkQwMQpcdTcwN0UKXHU4MjFGClx1OTI3NApcdTgyRUYKXHU4QkJDClx1NjJCMQpcdTZCQzEKXHU2MUMyClx1NUJEMgpcdTY2N0EKXHU1N0Q0Clx1NUJDNApcdTVDNEEKXHU4REMzClx1NkUyMQpcdTYzMTEKXHU0RTM5Clx1ODI3MApcdThEMUQKXHU3OEIwClx1NjJENApcdTcyMzkKXHU2MjM0Clx1NzgwMQpcdTY4QTYKXHU4MkJEClx1NzE5NApcdThENjQKXHU2RTE0Clx1NTRFRApcdTY1NkMKXHU5ODk3Clx1NTk1NApcdTk0QzUKXHU0RUYyClx1ODY0RQpcdTdBMDAKXHU1OUI5Clx1NEU0RgpcdTczQ0QKXHU3NTMzClx1Njg0QwpcdTkwNzUKXHU1MTQxClx1OTY4NgpcdTg3QkEKXHU0RUQzClx1OUI0RgpcdTk1MTAKXHU2NjUzClx1NkMyRQpcdTUxN0MKXHU5NjkwClx1Nzg4RApcdThENkIKXHU2MkU4Clx1NUZFMApcdTgwODMKXHU3RjM4Clx1NzI3NQpcdTYyQTIKXHU1MzVBClx1NURFNwpcdTU4RjMKXHU1MTQ0Clx1Njc1QwpcdThCQUYKXHU4QkRBClx1NzhBNwpcdTc5NjUKXHU2N0VGClx1OTg3NQpcdTVERTEKXHU3N0U5Clx1NjBCMgpcdTcwNEMKXHU5Rjg0Clx1NEYyNgpcdTc5NjgKXHU1QkZCClx1Njg0MgpcdTk0RkEKXHU1NzIzClx1NjA1MApcdTYwNzAKXHU5MEQxClx1OERBMwpcdTYyQUMKXHU4MzUyClx1ODE3RQpcdThEMzQKXHU2N0Q0Clx1NkVGNApcdTczMUIKXHU5NjE0Clx1OEY4NgpcdTU5QkIKXHU1ODZCClx1NjRBNApcdTUwQTgKXHU3QjdFClx1OTVGOQpcdTYyNzAKXHU3RDJCClx1NzgwMgpcdTkwMTIKXHU2MjBGClx1NTQwQQpcdTk2NzYKXHU0RjEwClx1NTU4MgpcdTc1OTcKXHU3NEY2Clx1NUE0NgpcdTYyOUEKXHU4MUMyClx1NjQ3OApcdTVGQ0QKXHU4NjdFClx1ODcyMQpcdTkwQkIKXHU4MEY4Clx1NURFOQpcdTYzMjQKXHU1MDc2Clx1NUYwMwpcdTY5RkQKXHU1MkIyClx1NEU3MwpcdTkwOTMKXHU1NDA5Clx1NEVDMQpcdTcwQzIKXHU3ODE2Clx1NzlERgpcdTRFNEMKXHU4MjMwClx1NEYzNApcdTc0REMKXHU2RDQ1Clx1NEUxOQpcdTY2ODIKXHU3MUU1Clx1NkE2MQpcdTY3RjMKXHU4RkY3Clx1NjY5NgpcdTcyNEMKXHU3OUU3Clx1ODBDNgpcdThCRTYKXHU3QzI3Clx1OEUwRgpcdTc0RjcKXHU4QzMxClx1NTQ0NgpcdTVCQkUKXHU3Q0NBClx1NkQxQgpcdThGODkKXHU2MTI0Clx1N0FERQpcdTk2OTkKXHU2MDEyClx1N0M5OApcdTRFNDMKXHU3RUVBClx1ODBBOQpcdTdDNEQKXHU2NTRGClx1NkQ4MgpcdTcxOTkKXHU3Njg2Clx1NEZBNgpcdTYwQUMKXHU2Mzk4Clx1NEVBQgpcdTdFQTAKXHU5MTkyClx1NzJDMgpcdTk1MDEKXHU2REMwClx1NjA2OApcdTcyNzIKXHU5NzM4Clx1NzIyQwpcdThENEYKXHU5MDA2Clx1NzNBOQpcdTk2NzUKXHU3OTVEClx1NzlEMgpcdTZENTkKXHU4QzhDClx1NUY3OQpcdTVGN0MKXHU2MDg5Clx1OUUyRApcdThEOEIKXHU1MUU0Clx1NjY2OApcdTc1NUMKXHU4Rjg4Clx1NzlFOQpcdTUzNzUKXHU3RjcyClx1NjhBRgpcdTcwOEUKXHU2RUU5Clx1NjhDQgpcdTlBNzEKXHU3QjVCClx1NUNFMQpcdTUxOTIKXHU1NTY1Clx1NUJGRgpcdThCRDEKXHU2RDc4Clx1NkNDOQpcdTVFM0QKXHU4RkRGClx1Nzg0NQpcdTc1ODYKXHU4RDM3Clx1NkYwRgpcdTdBM0YKXHU1MUEwClx1NUFFOQpcdTgwQzEKXHU4MkFGClx1NzI2MgpcdTUzREIKXHU4NjgwClx1NTk2NQpcdTlFMjMKXHU1Q0FEClx1N0Y4QQpcdTUxRUQKXHU0RTMyClx1NTg1OApcdTdFRDgKXHU5MTc1Clx1ODc4RApcdTc2QzYKXHU5NTIxClx1NUU5OQpcdTdCNzkKXHU1MUJCClx1OEY4NQpcdTY0NDQKXHU4OEFEClx1N0I0QgpcdTYyRDIKXHU1MERBClx1NjVGMQpcdTk0QkUKXHU5RTFGClx1NkYwNgpcdTZDODgKXHU3NzA5Clx1NzU4RgpcdTZERkIKXHU2OEQyClx1N0E1NwpcdTc4NUQKXHU5N0U5Clx1OTAzQwpcdTYyNkQKXHU0RkE4Clx1NTFDOQpcdTYzM0EKXHU3ODk3Clx1NjgzRApcdTcwOTIKXHU2NzZGClx1NjBBMwpcdTk5OEYKXHU1MjlEClx1OEM2QQpcdThGQkQKXHU1MkMzClx1OUUzRgpcdTY1RTYKXHU1NDBGClx1NjJEQwpcdTcyRDcKXHU1N0NCClx1OEY4QQpcdTYzQTkKXHU5OTZFClx1NjQyQwpcdTlBODIKXHU4RjlFClx1NTJGRQpcdTYyNjMKXHU0RjMwClx1ODQ4QgpcdTdFRDIKXHU5NkZFClx1NEUwOApcdTY3MzUKXHU1OUM2Clx1NjJERgpcdTVCODcKXHU4RjkxClx1OTY1NQpcdTk2RDUKXHU1MDdGClx1ODRDNApcdTVEMDcKXHU1MjZBClx1NTAyMQpcdTUzODUKXHU1NEFDClx1OUE3NgpcdTg1QUYKXHU1MjM3Clx1NjVBNQpcdTc1NkEKXHU4RDRCClx1NTk0OQpcdTRGNUIKXHU2RDQ3Clx1NkYyQgpcdTY2RkMKXHU2MjQ3Clx1OTQ5OQpcdTY4NDMKXHU2Mjc2Clx1NEVENApcdThGRDQKXHU0RkQ3Clx1NEU4RgpcdTgxNTQKXHU5NzhCClx1NjhGMQpcdTg5ODYKXHU2ODQ2Clx1NjA4NApcdTUzRDQKXHU2NDlFClx1OUE5NwpcdTUyRDgKXHU2NUZBClx1NkNCOApcdTVCNjQKXHU1NDEwClx1NUI1RgpcdTZFMjAKXHU1QzQ4Clx1NzVCRQpcdTU5OTkKXHU2MERDClx1NEVGMApcdTcyRTAKXHU4MEMwClx1OEMxMApcdTYyOUIKXHU5NzA5Clx1Njg1MQpcdTVDOTcKXHU1NjFCClx1ODg3MApcdTc2RDcKXHU2RTE3Clx1ODEwRgpcdThENTYKXHU2RDhDClx1NzUxQwpcdTY2RjkKXHU5NjA1Clx1ODA4QwpcdTU0RTkKXHU1Mzg5Clx1NzBDMwpcdTdFQUMKXHU2QkM1Clx1NjYyOApcdTRGMkEKXHU3NUM3Clx1NzE2RQpcdTUzRjkKXHU5NDg5Clx1NjQyRApcdTgzMEUKXHU3QjNDClx1OTE3NwpcdTUwNzcKXHU1RjEzClx1OTUyNQpcdTYwNTIKXHU2NzcwClx1NTc1MQpcdTlGM0IKXHU3RkZDClx1N0VCNgpcdTUzRDkKXHU3MkYxClx1OTAyRQpcdTdGNTAKXHU3RURDClx1NjhEQQpcdTYyOTEKXHU4MUE4Clx1ODUyQwpcdTVCRkEKXHU5QUE0Clx1N0E0NgpcdTUxQjYKXHU2N0FGClx1NTE4QwpcdTVDMzgKXHU1MUY4Clx1N0VDNQpcdTU3NkYKXHU3MjdBClx1NzEzMApcdThGNzAKXHU2QjIzClx1NjY0QgpcdTc2MjYKXHU1RkExClx1OTUyRApcdTk1MjYKXHU0RTI3Clx1NjVFQwpcdTk1M0IKXHU1Nzg0Clx1NjQxQwpcdTYyNTEKXHU5MDgwClx1NEVBRApcdTkxNkYKXHU4RkM4Clx1ODIxMgpcdTgxMDYKXHU5MTc2Clx1OTVGMgpcdTVGRTcKXHU5MTVBClx1OTg3RApcdTdGQkQKXHU2REE4Clx1NTM3OApcdTRFRDcKXHU5NjZBClx1OEY5RgpcdTYwRTkKXHU2NzZEClx1NTlEQQpcdTgwOUEKXHU2MzQ5Clx1OThEOApcdTZGMDIKXHU2NjA2Clx1NkIzQQpcdTU0M0UKXHU5MENFClx1NzBGNwpcdTZDNDEKXHU1NDc1Clx1OTk3MApcdTg0MjcKXHU5NkM1Clx1OTBBRQpcdThGQzEKXHU3MUQ1Clx1NjQ5MgpcdTU5RkIKXHU4RDc0Clx1NUJCNApcdTcwRTYKXHU1MDNBClx1NUUxMApcdTY1OTEKXHU5NEMzClx1NjVFOApcdTkxODcKXHU4NDYzClx1OTk3QwpcdTk2Q0YKXHU1OUZGClx1NjJDQwpcdTUwODUKXHU4MTc5Clx1NTlBNQpcdTYzQzkKXHU4RDI0Clx1NjJDNgpcdTZCNkEKXHU4NDYxClx1ODBGQQpcdTRFMjIKXHU2RDY5Clx1NUZCRApcdTY2MDIKXHU1N0FCClx1NjMyMQpcdTg5QzgKXHU4RDJBClx1NjE3MApcdTdGMzQKXHU2QzZBClx1NjE0QwpcdTUxQUYKXHU4QkZBClx1NTlEQwpcdThDMEEKXHU1MUY2Clx1NTJBMwpcdThCRUMKXHU4MDAwClx1NjYwRgpcdThFQkEKXHU3NkM4Clx1OUE5MQpcdTRFNTQKXHU2RUFBClx1NEUxQgpcdTUzNjIKXHU2MkI5Clx1OTVGNwpcdTU0QTgKXHU1MjJFClx1OUE3RQpcdTdGMDYKXHU2MDlGClx1NjQ1OApcdTk0RDIKXHU2M0I3Clx1OTg4NwpcdTVFN0IKXHU2N0M0Clx1NjBFMApcdTYwRTgKXHU0RjczClx1NEVDNwpcdTgxNEEKXHU3QTlEClx1NkRBNApcdTUyNTEKXHU3N0E3Clx1NTgyMQpcdTZDRkMKXHU4NDcxClx1N0Y2OQpcdTk3MEQKXHU2MzVFClx1ODBDRQpcdTgyQ0QKXHU2RUU4Clx1NEZFOQpcdTYzNDUKXHU2RTU4Clx1NzgwRApcdTk3MUUKXHU5MEI1Clx1ODQwNApcdTc1QUYKXHU2REVFClx1OTA0MgpcdTcxOEEKXHU3Q0FBClx1NzBEOApcdTVCQkYKXHU2ODYzClx1NjIwOApcdTlBNzMKXHU1QUMyClx1ODhENQpcdTVGOTkKXHU3QkFEClx1NjM1MApcdTgwQTAKXHU2NDkxClx1NjY1MgpcdThGQTgKXHU2QkJGClx1ODNCMgpcdTY0NEEKXHU2NDA1Clx1OTE3MQpcdTVDNEYKXHU3NUFCClx1NTRDMApcdTg1MjEKXHU1ODM1Clx1NkNBQgpcdTc2QjEKXHU3NTQ1Clx1NTNFMApcdTk2MDEKXHU4M0IxClx1NjU3MgpcdThGOTYKXHU5NEE5Clx1NzVENQpcdTU3NUQKXHU1REY3Clx1OTk3RgpcdTc5NzgKXHU0RTE4Clx1NzM4NApcdTZFOUMKXHU2NkYwClx1OTAzQgpcdTVGNkQKXHU1QzFEClx1NTM3RgpcdTU5QTgKXHU4MjQ3Clx1NTQxRQpcdTk3RTYKXHU2MDI4Clx1NzdFRQpcdTZCNDdgLnNwbGl0KCJcbiIpOwoKICAvLyBub2RlX21vZHVsZXMvQHNjdXJlL2JpcDM5L2VzbS93b3JkbGlzdHMvc3BhbmlzaC5qcwogIHZhciB3b3JkbGlzdDggPSBgYVx1MDMwMWJhY28KYWJkb21lbgphYmVqYQphYmllcnRvCmFib2dhZG8KYWJvbm8KYWJvcnRvCmFicmF6bwphYnJpcgphYnVlbG8KYWJ1c28KYWNhYmFyCmFjYWRlbWlhCmFjY2VzbwphY2Npb1x1MDMwMW4KYWNlaXRlCmFjZWxnYQphY2VudG8KYWNlcHRhcgphXHUwMzAxY2lkbwphY2xhcmFyCmFjbmVcdTAzMDEKYWNvZ2VyCmFjb3NvCmFjdGl2bwphY3RvCmFjdHJpegphY3R1YXIKYWN1ZGlyCmFjdWVyZG8KYWN1c2FyCmFkaWN0bwphZG1pdGlyCmFkb3B0YXIKYWRvcm5vCmFkdWFuYQphZHVsdG8KYWVcdTAzMDFyZW8KYWZlY3RhcgphZmljaW9cdTAzMDFuCmFmaW5hcgphZmlybWFyCmFcdTAzMDFnaWwKYWdpdGFyCmFnb25pXHUwMzAxYQphZ29zdG8KYWdvdGFyCmFncmVnYXIKYWdyaW8KYWd1YQphZ3VkbwphXHUwMzAxZ3VpbGEKYWd1amEKYWhvZ28KYWhvcnJvCmFpcmUKYWlzbGFyCmFqZWRyZXoKYWplbm8KYWp1c3RlCmFsYWNyYVx1MDMwMW4KYWxhbWJyZQphbGFybWEKYWxiYQphXHUwMzAxbGJ1bQphbGNhbGRlCmFsZGVhCmFsZWdyZQphbGVqYXIKYWxlcnRhCmFsZXRhCmFsZmlsZXIKYWxnYQphbGdvZG9cdTAzMDFuCmFsaWFkbwphbGllbnRvCmFsaXZpbwphbG1hCmFsbWVqYQphbG1pXHUwMzAxYmFyCmFsdGFyCmFsdGV6YQphbHRpdm8KYWx0bwphbHR1cmEKYWx1bW5vCmFsemFyCmFtYWJsZQphbWFudGUKYW1hcG9sYQphbWFyZ28KYW1hc2FyCmFcdTAzMDFtYmFyCmFcdTAzMDFtYml0bwphbWVubwphbWlnbwphbWlzdGFkCmFtb3IKYW1wYXJvCmFtcGxpbwphbmNobwphbmNpYW5vCmFuY2xhCmFuZGFyCmFuZGVcdTAzMDFuCmFuZW1pYQphXHUwMzAxbmd1bG8KYW5pbGxvCmFcdTAzMDFuaW1vCmFuaVx1MDMwMXMKYW5vdGFyCmFudGVuYQphbnRpZ3VvCmFudG9qbwphbnVhbAphbnVsYXIKYW51bmNpbwphblx1MDMwM2FkaXIKYW5cdTAzMDNlam8KYW5cdTAzMDNvCmFwYWdhcgphcGFyYXRvCmFwZXRpdG8KYXBpbwphcGxpY2FyCmFwb2RvCmFwb3J0ZQphcG95bwphcHJlbmRlcgphcHJvYmFyCmFwdWVzdGEKYXB1cm8KYXJhZG8KYXJhblx1MDMwM2EKYXJhcgphXHUwMzAxcmJpdHJvCmFcdTAzMDFyYm9sCmFyYnVzdG8KYXJjaGl2bwphcmNvCmFyZGVyCmFyZGlsbGEKYXJkdW8KYVx1MDMwMXJlYQphXHUwMzAxcmlkbwphcmllcwphcm1vbmlcdTAzMDFhCmFybmVcdTAzMDFzCmFyb21hCmFycGEKYXJwb1x1MDMwMW4KYXJyZWdsbwphcnJvegphcnJ1Z2EKYXJ0ZQphcnRpc3RhCmFzYQphc2Fkbwphc2FsdG8KYXNjZW5zbwphc2VndXJhcgphc2VvCmFzZXNvcgphc2llbnRvCmFzaWxvCmFzaXN0aXIKYXNubwphc29tYnJvCmFcdTAzMDFzcGVybwphc3RpbGxhCmFzdHJvCmFzdHV0bwphc3VtaXIKYXN1bnRvCmF0YWpvCmF0YXF1ZQphdGFyCmF0ZW50bwphdGVvCmFcdTAzMDF0aWNvCmF0bGV0YQphXHUwMzAxdG9tbwphdHJhZXIKYXRyb3oKYXR1XHUwMzAxbgphdWRhegphdWRpbwphdWdlCmF1bGEKYXVtZW50bwphdXNlbnRlCmF1dG9yCmF2YWwKYXZhbmNlCmF2YXJvCmF2ZQphdmVsbGFuYQphdmVuYQphdmVzdHJ1egphdmlvXHUwMzAxbgphdmlzbwpheWVyCmF5dWRhCmF5dW5vCmF6YWZyYVx1MDMwMW4KYXphcgphem90ZQphenVcdTAzMDFjYXIKYXp1ZnJlCmF6dWwKYmFiYQpiYWJvcgpiYWNoZQpiYWhpXHUwMzAxYQpiYWlsZQpiYWphcgpiYWxhbnphCmJhbGNvXHUwMzAxbgpiYWxkZQpiYW1idVx1MDMwMQpiYW5jbwpiYW5kYQpiYW5cdTAzMDNvCmJhcmJhCmJhcmNvCmJhcm5pegpiYXJybwpiYVx1MDMwMXNjdWxhCmJhc3RvXHUwMzAxbgpiYXN1cmEKYmF0YWxsYQpiYXRlcmlcdTAzMDFhCmJhdGlyCmJhdHV0YQpiYXVcdTAzMDFsCmJhemFyCmJlYmVcdTAzMDEKYmViaWRhCmJlbGxvCmJlc2FyCmJlc28KYmVzdGlhCmJpY2hvCmJpZW4KYmluZ28KYmxhbmNvCmJsb3F1ZQpibHVzYQpib2EKYm9iaW5hCmJvYm8KYm9jYQpib2NpbmEKYm9kYQpib2RlZ2EKYm9pbmEKYm9sYQpib2xlcm8KYm9sc2EKYm9tYmEKYm9uZGFkCmJvbml0bwpib25vCmJvbnNhXHUwMzAxaQpib3JkZQpib3JyYXIKYm9zcXVlCmJvdGUKYm90aVx1MDMwMW4KYm9cdTAzMDF2ZWRhCmJvemFsCmJyYXZvCmJyYXpvCmJyZWNoYQpicmV2ZQpicmlsbG8KYnJpbmNvCmJyaXNhCmJyb2NhCmJyb21hCmJyb25jZQpicm90ZQpicnVqYQpicnVzY28KYnJ1dG8KYnVjZW8KYnVjbGUKYnVlbm8KYnVleQpidWZhbmRhCmJ1Zm9cdTAzMDFuCmJ1XHUwMzAxaG8KYnVpdHJlCmJ1bHRvCmJ1cmJ1amEKYnVybGEKYnVycm8KYnVzY2FyCmJ1dGFjYQpidXpvXHUwMzAxbgpjYWJhbGxvCmNhYmV6YQpjYWJpbmEKY2FicmEKY2FjYW8KY2FkYVx1MDMwMXZlcgpjYWRlbmEKY2FlcgpjYWZlXHUwMzAxCmNhaVx1MDMwMWRhCmNhaW1hXHUwMzAxbgpjYWphCmNham9cdTAzMDFuCmNhbApjYWxhbWFyCmNhbGNpbwpjYWxkbwpjYWxpZGFkCmNhbGxlCmNhbG1hCmNhbG9yCmNhbHZvCmNhbWEKY2FtYmlvCmNhbWVsbG8KY2FtaW5vCmNhbXBvCmNhXHUwMzAxbmNlcgpjYW5kaWwKY2FuZWxhCmNhbmd1cm8KY2FuaWNhCmNhbnRvCmNhblx1MDMwM2EKY2FuXHUwMzAzb1x1MDMwMW4KY2FvYmEKY2FvcwpjYXBhegpjYXBpdGFcdTAzMDFuCmNhcG90ZQpjYXB0YXIKY2FwdWNoYQpjYXJhCmNhcmJvXHUwMzAxbgpjYVx1MDMwMXJjZWwKY2FyZXRhCmNhcmdhCmNhcmluXHUwMzAzbwpjYXJuZQpjYXJwZXRhCmNhcnJvCmNhcnRhCmNhc2EKY2FzY28KY2FzZXJvCmNhc3BhCmNhc3RvcgpjYXRvcmNlCmNhdHJlCmNhdWRhbApjYXVzYQpjYXpvCmNlYm9sbGEKY2VkZXIKY2Vkcm8KY2VsZGEKY2VcdTAzMDFsZWJyZQpjZWxvc28KY2VcdTAzMDFsdWxhCmNlbWVudG8KY2VuaXphCmNlbnRybwpjZXJjYQpjZXJkbwpjZXJlemEKY2VybwpjZXJyYXIKY2VydGV6YQpjZVx1MDMwMXNwZWQKY2V0cm8KY2hhY2FsCmNoYWxlY28KY2hhbXB1XHUwMzAxCmNoYW5jbGEKY2hhcGEKY2hhcmxhCmNoaWNvCmNoaXN0ZQpjaGl2bwpjaG9xdWUKY2hvemEKY2h1bGV0YQpjaHVwYXIKY2ljbG9cdTAzMDFuCmNpZWdvCmNpZWxvCmNpZW4KY2llcnRvCmNpZnJhCmNpZ2Fycm8KY2ltYQpjaW5jbwpjaW5lCmNpbnRhCmNpcHJlXHUwMzAxcwpjaXJjbwpjaXJ1ZWxhCmNpc25lCmNpdGEKY2l1ZGFkCmNsYW1vcgpjbGFuCmNsYXJvCmNsYXNlCmNsYXZlCmNsaWVudGUKY2xpbWEKY2xpXHUwMzAxbmljYQpjb2JyZQpjb2NjaW9cdTAzMDFuCmNvY2hpbm8KY29jaW5hCmNvY28KY29cdTAzMDFkaWdvCmNvZG8KY29mcmUKY29nZXIKY29oZXRlCmNvamlcdTAzMDFuCmNvam8KY29sYQpjb2xjaGEKY29sZWdpbwpjb2xnYXIKY29saW5hCmNvbGxhcgpjb2xtbwpjb2x1bW5hCmNvbWJhdGUKY29tZXIKY29taWRhCmNvXHUwMzAxbW9kbwpjb21wcmEKY29uZGUKY29uZWpvCmNvbmdhCmNvbm9jZXIKY29uc2Vqbwpjb250YXIKY29wYQpjb3BpYQpjb3Jhem9cdTAzMDFuCmNvcmJhdGEKY29yY2hvCmNvcmRvXHUwMzAxbgpjb3JvbmEKY29ycmVyCmNvc2VyCmNvc21vcwpjb3N0YQpjcmFcdTAzMDFuZW8KY3JhXHUwMzAxdGVyCmNyZWFyCmNyZWNlcgpjcmVpXHUwMzAxZG8KY3JlbWEKY3JpXHUwMzAxYQpjcmltZW4KY3JpcHRhCmNyaXNpcwpjcm9tbwpjcm9cdTAzMDFuaWNhCmNyb3F1ZXRhCmNydWRvCmNydXoKY3VhZHJvCmN1YXJ0bwpjdWF0cm8KY3VibwpjdWJyaXIKY3VjaGFyYQpjdWVsbG8KY3VlbnRvCmN1ZXJkYQpjdWVzdGEKY3VldmEKY3VpZGFyCmN1bGVicmEKY3VscGEKY3VsdG8KY3VtYnJlCmN1bXBsaXIKY3VuYQpjdW5ldGEKY3VvdGEKY3Vwb1x1MDMwMW4KY3VcdTAzMDFwdWxhCmN1cmFyCmN1cmlvc28KY3Vyc28KY3VydmEKY3V0aXMKZGFtYQpkYW56YQpkYXIKZGFyZG8KZGFcdTAzMDF0aWwKZGViZXIKZGVcdTAzMDFiaWwKZGVcdTAzMDFjYWRhCmRlY2lyCmRlZG8KZGVmZW5zYQpkZWZpbmlyCmRlamFyCmRlbGZpXHUwMzAxbgpkZWxnYWRvCmRlbGl0bwpkZW1vcmEKZGVuc28KZGVudGFsCmRlcG9ydGUKZGVyZWNobwpkZXJyb3RhCmRlc2F5dW5vCmRlc2VvCmRlc2ZpbGUKZGVzbnVkbwpkZXN0aW5vCmRlc3ZpXHUwMzAxbwpkZXRhbGxlCmRldGVuZXIKZGV1ZGEKZGlcdTAzMDFhCmRpYWJsbwpkaWFkZW1hCmRpYW1hbnRlCmRpYW5hCmRpYXJpbwpkaWJ1am8KZGljdGFyCmRpZW50ZQpkaWV0YQpkaWV6CmRpZmlcdTAzMDFjaWwKZGlnbm8KZGlsZW1hCmRpbHVpcgpkaW5lcm8KZGlyZWN0bwpkaXJpZ2lyCmRpc2NvCmRpc2VuXHUwMzAzbwpkaXNmcmF6CmRpdmEKZGl2aW5vCmRvYmxlCmRvY2UKZG9sb3IKZG9taW5nbwpkb24KZG9uYXIKZG9yYWRvCmRvcm1pcgpkb3Jzbwpkb3MKZG9zaXMKZHJhZ29cdTAzMDFuCmRyb2dhCmR1Y2hhCmR1ZGEKZHVlbG8KZHVlblx1MDMwM28KZHVsY2UKZHVcdTAzMDFvCmR1cXVlCmR1cmFyCmR1cmV6YQpkdXJvCmVcdTAzMDFiYW5vCmVicmlvCmVjaGFyCmVjbwplY3VhZG9yCmVkYWQKZWRpY2lvXHUwMzAxbgplZGlmaWNpbwplZGl0b3IKZWR1Y2FyCmVmZWN0bwplZmljYXoKZWplCmVqZW1wbG8KZWxlZmFudGUKZWxlZ2lyCmVsZW1lbnRvCmVsZXZhcgplbGlwc2UKZVx1MDMwMWxpdGUKZWxpeGlyCmVsb2dpbwplbHVkaXIKZW1idWRvCmVtaXRpcgplbW9jaW9cdTAzMDFuCmVtcGF0ZQplbXBlblx1MDMwM28KZW1wbGVvCmVtcHJlc2EKZW5hbm8KZW5jYXJnbwplbmNodWZlCmVuY2lcdTAzMDFhCmVuZW1pZ28KZW5lcm8KZW5mYWRvCmVuZmVybW8KZW5nYW5cdTAzMDNvCmVuaWdtYQplbmxhY2UKZW5vcm1lCmVucmVkbwplbnNheW8KZW5zZW5cdTAzMDNhcgplbnRlcm8KZW50cmFyCmVudmFzZQplbnZpXHUwMzAxbwplXHUwMzAxcG9jYQplcXVpcG8KZXJpem8KZXNjYWxhCmVzY2VuYQplc2NvbGFyCmVzY3JpYmlyCmVzY3Vkbwplc2VuY2lhCmVzZmVyYQplc2Z1ZXJ6bwplc3BhZGEKZXNwZWpvCmVzcGlcdTAzMDFhCmVzcG9zYQplc3B1bWEKZXNxdWlcdTAzMDEKZXN0YXIKZXN0ZQplc3RpbG8KZXN0dWZhCmV0YXBhCmV0ZXJubwplXHUwMzAxdGljYQpldG5pYQpldmFkaXIKZXZhbHVhcgpldmVudG8KZXZpdGFyCmV4YWN0bwpleGFtZW4KZXhjZXNvCmV4Y3VzYQpleGVudG8KZXhpZ2lyCmV4aWxpbwpleGlzdGlyCmVcdTAzMDF4aXRvCmV4cGVydG8KZXhwbGljYXIKZXhwb25lcgpleHRyZW1vCmZhXHUwMzAxYnJpY2EKZmFcdTAzMDFidWxhCmZhY2hhZGEKZmFcdTAzMDFjaWwKZmFjdG9yCmZhZW5hCmZhamEKZmFsZGEKZmFsbG8KZmFsc28KZmFsdGFyCmZhbWEKZmFtaWxpYQpmYW1vc28KZmFyYW9cdTAzMDFuCmZhcm1hY2lhCmZhcm9sCmZhcnNhCmZhc2UKZmF0aWdhCmZhdW5hCmZhdm9yCmZheApmZWJyZXJvCmZlY2hhCmZlbGl6CmZlbwpmZXJpYQpmZXJvegpmZVx1MDMwMXJ0aWwKZmVydm9yCmZlc3RpXHUwMzAxbgpmaWFibGUKZmlhbnphCmZpYXIKZmlicmEKZmljY2lvXHUwMzAxbgpmaWNoYQpmaWRlbwpmaWVicmUKZmllbApmaWVyYQpmaWVzdGEKZmlndXJhCmZpamFyCmZpam8KZmlsYQpmaWxldGUKZmlsaWFsCmZpbHRybwpmaW4KZmluY2EKZmluZ2lyCmZpbml0bwpmaXJtYQpmbGFjbwpmbGF1dGEKZmxlY2hhCmZsb3IKZmxvdGEKZmx1aXIKZmx1am8KZmx1XHUwMzAxb3IKZm9iaWEKZm9jYQpmb2dhdGEKZm9nb1x1MDMwMW4KZm9saW8KZm9sbGV0bwpmb25kbwpmb3JtYQpmb3Jybwpmb3J0dW5hCmZvcnphcgpmb3NhCmZvdG8KZnJhY2FzbwpmcmFcdTAzMDFnaWwKZnJhbmphCmZyYXNlCmZyYXVkZQpmcmVpXHUwMzAxcgpmcmVubwpmcmVzYQpmcmlcdTAzMDFvCmZyaXRvCmZydXRhCmZ1ZWdvCmZ1ZW50ZQpmdWVyemEKZnVnYQpmdW1hcgpmdW5jaW9cdTAzMDFuCmZ1bmRhCmZ1cmdvXHUwMzAxbgpmdXJpYQpmdXNpbApmdVx1MDMwMXRib2wKZnV0dXJvCmdhY2VsYQpnYWZhcwpnYWl0YQpnYWpvCmdhbGEKZ2FsZXJpXHUwMzAxYQpnYWxsbwpnYW1iYQpnYW5hcgpnYW5jaG8KZ2FuZ2EKZ2Fuc28KZ2FyYWplCmdhcnphCmdhc29saW5hCmdhc3RhcgpnYXRvCmdhdmlsYVx1MDMwMW4KZ2VtZWxvCmdlbWlyCmdlbgpnZVx1MDMwMW5lcm8KZ2VuaW8KZ2VudGUKZ2VyYW5pbwpnZXJlbnRlCmdlcm1lbgpnZXN0bwpnaWdhbnRlCmdpbW5hc2lvCmdpcmFyCmdpcm8KZ2xhY2lhcgpnbG9ibwpnbG9yaWEKZ29sCmdvbGZvCmdvbG9zbwpnb2xwZQpnb21hCmdvcmRvCmdvcmlsYQpnb3JyYQpnb3RhCmdvdGVvCmdvemFyCmdyYWRhCmdyYVx1MDMwMWZpY28KZ3Jhbm8KZ3Jhc2EKZ3JhdGlzCmdyYXZlCmdyaWV0YQpncmlsbG8KZ3JpcGUKZ3Jpcwpncml0bwpncm9zb3IKZ3J1XHUwMzAxYQpncnVlc28KZ3J1bW8KZ3J1cG8KZ3VhbnRlCmd1YXBvCmd1YXJkaWEKZ3VlcnJhCmd1aVx1MDMwMWEKZ3Vpblx1MDMwM28KZ3Vpb24KZ3Vpc28KZ3VpdGFycmEKZ3VzYW5vCmd1c3RhcgpoYWJlcgpoYVx1MDMwMWJpbApoYWJsYXIKaGFjZXIKaGFjaGEKaGFkYQpoYWxsYXIKaGFtYWNhCmhhcmluYQpoYXoKaGF6YW5cdTAzMDNhCmhlYmlsbGEKaGVicmEKaGVjaG8KaGVsYWRvCmhlbGlvCmhlbWJyYQpoZXJpcgpoZXJtYW5vCmhlXHUwMzAxcm9lCmhlcnZpcgpoaWVsbwpoaWVycm8KaGlcdTAzMDFnYWRvCmhpZ2llbmUKaGlqbwpoaW1ubwpoaXN0b3JpYQpob2NpY28KaG9nYXIKaG9ndWVyYQpob2phCmhvbWJyZQpob25nbwpob25vcgpob25yYQpob3JhCmhvcm1pZ2EKaG9ybm8KaG9zdGlsCmhveW8KaHVlY28KaHVlbGdhCmh1ZXJ0YQpodWVzbwpodWV2bwpodWlkYQpodWlyCmh1bWFubwpodVx1MDMwMW1lZG8KaHVtaWxkZQpodW1vCmh1bmRpcgpodXJhY2FcdTAzMDFuCmh1cnRvCmljb25vCmlkZWFsCmlkaW9tYQppXHUwMzAxZG9sbwppZ2xlc2lhCmlnbHVcdTAzMDEKaWd1YWwKaWxlZ2FsCmlsdXNpb1x1MDMwMW4KaW1hZ2VuCmltYVx1MDMwMW4KaW1pdGFyCmltcGFyCmltcGVyaW8KaW1wb25lcgppbXB1bHNvCmluY2FwYXoKaVx1MDMwMW5kaWNlCmluZXJ0ZQppbmZpZWwKaW5mb3JtZQppbmdlbmlvCmluaWNpbwppbm1lbnNvCmlubXVuZQppbm5hdG8KaW5zZWN0bwppbnN0YW50ZQppbnRlcmVcdTAzMDFzCmlcdTAzMDFudGltbwppbnR1aXIKaW51XHUwMzAxdGlsCmludmllcm5vCmlyYQppcmlzCmlyb25pXHUwMzAxYQppc2xhCmlzbG90ZQpqYWJhbGlcdTAzMDEKamFib1x1MDMwMW4KamFtb1x1MDMwMW4KamFyYWJlCmphcmRpXHUwMzAxbgpqYXJyYQpqYXVsYQpqYXptaVx1MDMwMW4KamVmZQpqZXJpbmdhCmppbmV0ZQpqb3JuYWRhCmpvcm9iYQpqb3Zlbgpqb3lhCmp1ZXJnYQpqdWV2ZXMKanVlegpqdWdhZG9yCmp1Z28KanVndWV0ZQpqdWljaW8KanVuY28KanVuZ2xhCmp1bmlvCmp1bnRhcgpqdVx1MDMwMXBpdGVyCmp1cmFyCmp1c3RvCmp1dmVuaWwKanV6Z2FyCmtpbG8Ka29hbGEKbGFiaW8KbGFjaW8KbGFjcmEKbGFkbwpsYWRyb1x1MDMwMW4KbGFnYXJ0bwpsYVx1MDMwMWdyaW1hCmxhZ3VuYQpsYWljbwpsYW1lcgpsYVx1MDMwMW1pbmEKbGFcdTAzMDFtcGFyYQpsYW5hCmxhbmNoYQpsYW5nb3N0YQpsYW56YQpsYVx1MDMwMXBpegpsYXJnbwpsYXJ2YQpsYVx1MDMwMXN0aW1hCmxhdGEKbGFcdTAzMDF0ZXgKbGF0aXIKbGF1cmVsCmxhdmFyCmxhem8KbGVhbApsZWNjaW9cdTAzMDFuCmxlY2hlCmxlY3RvcgpsZWVyCmxlZ2lvXHUwMzAxbgpsZWd1bWJyZQpsZWphbm8KbGVuZ3VhCmxlbnRvCmxlblx1MDMwM2EKbGVvXHUwMzAxbgpsZW9wYXJkbwpsZXNpb1x1MDMwMW4KbGV0YWwKbGV0cmEKbGV2ZQpsZXllbmRhCmxpYmVydGFkCmxpYnJvCmxpY29yCmxpXHUwMzAxZGVyCmxpZGlhcgpsaWVuem8KbGlnYQpsaWdlcm8KbGltYQpsaVx1MDMwMW1pdGUKbGltb1x1MDMwMW4KbGltcGlvCmxpbmNlCmxpbmRvCmxpXHUwMzAxbmVhCmxpbmdvdGUKbGlubwpsaW50ZXJuYQpsaVx1MDMwMXF1aWRvCmxpc28KbGlzdGEKbGl0ZXJhCmxpdGlvCmxpdHJvCmxsYWdhCmxsYW1hCmxsYW50bwpsbGF2ZQpsbGVnYXIKbGxlbmFyCmxsZXZhcgpsbG9yYXIKbGxvdmVyCmxsdXZpYQpsb2JvCmxvY2lvXHUwMzAxbgpsb2NvCmxvY3VyYQpsb1x1MDMwMWdpY2EKbG9ncm8KbG9tYnJpegpsb21vCmxvbmphCmxvdGUKbHVjaGEKbHVjaXIKbHVnYXIKbHVqbwpsdW5hCmx1bmVzCmx1cGEKbHVzdHJvCmx1dG8KbHV6Cm1hY2V0YQptYWNobwptYWRlcmEKbWFkcmUKbWFkdXJvCm1hZXN0cm8KbWFmaWEKbWFnaWEKbWFnbwptYWlcdTAzMDF6Cm1hbGRhZAptYWxldGEKbWFsbGEKbWFsbwptYW1hXHUwMzAxCm1hbWJvCm1hbXV0Cm1hbmNvCm1hbmRvCm1hbmVqYXIKbWFuZ2EKbWFuaXF1aVx1MDMwMQptYW5qYXIKbWFubwptYW5zbwptYW50YQptYW5cdTAzMDNhbmEKbWFwYQptYVx1MDMwMXF1aW5hCm1hcgptYXJjbwptYXJlYQptYXJmaWwKbWFyZ2VuCm1hcmlkbwptYVx1MDMwMXJtb2wKbWFycm9cdTAzMDFuCm1hcnRlcwptYXJ6bwptYXNhCm1hXHUwMzAxc2NhcmEKbWFzaXZvCm1hdGFyCm1hdGVyaWEKbWF0aXoKbWF0cml6Cm1hXHUwMzAxeGltbwptYXlvcgptYXpvcmNhCm1lY2hhCm1lZGFsbGEKbWVkaW8KbWVcdTAzMDFkdWxhCm1lamlsbGEKbWVqb3IKbWVsZW5hCm1lbG9cdTAzMDFuCm1lbW9yaWEKbWVub3IKbWVuc2FqZQptZW50ZQptZW51XHUwMzAxCm1lcmNhZG8KbWVyZW5ndWUKbWVcdTAzMDFyaXRvCm1lcwptZXNvXHUwMzAxbgptZXRhCm1ldGVyCm1lXHUwMzAxdG9kbwptZXRybwptZXpjbGEKbWllZG8KbWllbAptaWVtYnJvCm1pZ2EKbWlsCm1pbGFncm8KbWlsaXRhcgptaWxsb1x1MDMwMW4KbWltbwptaW5hCm1pbmVybwptaVx1MDMwMW5pbW8KbWludXRvCm1pb3BlCm1pcmFyCm1pc2EKbWlzZXJpYQptaXNpbAptaXNtbwptaXRhZAptaXRvCm1vY2hpbGEKbW9jaW9cdTAzMDFuCm1vZGEKbW9kZWxvCm1vaG8KbW9qYXIKbW9sZGUKbW9sZXIKbW9saW5vCm1vbWVudG8KbW9taWEKbW9uYXJjYQptb25lZGEKbW9uamEKbW9udG8KbW9uXHUwMzAzbwptb3JhZGEKbW9yZGVyCm1vcmVubwptb3Jpcgptb3Jybwptb3JzYQptb3J0YWwKbW9zY2EKbW9zdHJhcgptb3Rpdm8KbW92ZXIKbW9cdTAzMDF2aWwKbW96bwptdWNobwptdWRhcgptdWVibGUKbXVlbGEKbXVlcnRlCm11ZXN0cmEKbXVncmUKbXVqZXIKbXVsYQptdWxldGEKbXVsdGEKbXVuZG8KbXVuXHUwMzAzZWNhCm11cmFsCm11cm8KbXVcdTAzMDFzY3VsbwptdXNlbwptdXNnbwptdVx1MDMwMXNpY2EKbXVzbG8KbmFcdTAzMDFjYXIKbmFjaW9cdTAzMDFuCm5hZGFyCm5haXBlCm5hcmFuamEKbmFyaXoKbmFycmFyCm5hc2FsCm5hdGFsCm5hdGl2bwpuYXR1cmFsCm5hXHUwMzAxdXNlYQpuYXZhbApuYXZlCm5hdmlkYWQKbmVjaW8KbmVcdTAzMDFjdGFyCm5lZ2FyCm5lZ29jaW8KbmVncm8KbmVvXHUwMzAxbgpuZXJ2aW8KbmV0bwpuZXV0cm8KbmV2YXIKbmV2ZXJhCm5pY2hvCm5pZG8KbmllYmxhCm5pZXRvCm5pblx1MDMwM2V6Cm5pblx1MDMwM28KbmlcdTAzMDF0aWRvCm5pdmVsCm5vYmxlemEKbm9jaGUKbm9cdTAzMDFtaW5hCm5vcmlhCm5vcm1hCm5vcnRlCm5vdGEKbm90aWNpYQpub3ZhdG8Kbm92ZWxhCm5vdmlvCm51YmUKbnVjYQpudVx1MDMwMWNsZW8KbnVkaWxsbwpudWRvCm51ZXJhCm51ZXZlCm51ZXoKbnVsbwpudVx1MDMwMW1lcm8KbnV0cmlhCm9hc2lzCm9iZXNvCm9iaXNwbwpvYmpldG8Kb2JyYQpvYnJlcm8Kb2JzZXJ2YXIKb2J0ZW5lcgpvYnZpbwpvY2EKb2Nhc28Kb2NlXHUwMzAxYW5vCm9jaGVudGEKb2NobwpvY2lvCm9jcmUKb2N0YXZvCm9jdHVicmUKb2N1bHRvCm9jdXBhcgpvY3VycmlyCm9kaWFyCm9kaW8Kb2Rpc2VhCm9lc3RlCm9mZW5zYQpvZmVydGEKb2ZpY2lvCm9mcmVjZXIKb2dybwpvaVx1MDMwMWRvCm9pXHUwMzAxcgpvam8Kb2xhCm9sZWFkYQpvbGZhdG8Kb2xpdm8Kb2xsYQpvbG1vCm9sb3IKb2x2aWRvCm9tYmxpZ28Kb25kYQpvbnphCm9wYWNvCm9wY2lvXHUwMzAxbgpvXHUwMzAxcGVyYQpvcGluYXIKb3BvbmVyCm9wdGFyCm9cdTAzMDFwdGljYQpvcHVlc3RvCm9yYWNpb1x1MDMwMW4Kb3JhZG9yCm9yYWwKb1x1MDMwMXJiaXRhCm9yY2EKb3JkZW4Kb3JlamEKb1x1MDMwMXJnYW5vCm9yZ2lcdTAzMDFhCm9yZ3VsbG8Kb3JpZW50ZQpvcmlnZW4Kb3JpbGxhCm9ybwpvcnF1ZXN0YQpvcnVnYQpvc2FkaVx1MDMwMWEKb3NjdXJvCm9zZXpubwpvc28Kb3N0cmEKb3Rvblx1MDMwM28Kb3RybwpvdmVqYQpvXHUwMzAxdnVsbwpvXHUwMzAxeGlkbwpveGlcdTAzMDFnZW5vCm95ZW50ZQpvem9ubwpwYWN0bwpwYWRyZQpwYWVsbGEKcGFcdTAzMDFnaW5hCnBhZ28KcGFpXHUwMzAxcwpwYVx1MDMwMWphcm8KcGFsYWJyYQpwYWxjbwpwYWxldGEKcGFcdTAzMDFsaWRvCnBhbG1hCnBhbG9tYQpwYWxwYXIKcGFuCnBhbmFsCnBhXHUwMzAxbmljbwpwYW50ZXJhCnBhblx1MDMwM3VlbG8KcGFwYVx1MDMwMQpwYXBlbApwYXBpbGxhCnBhcXVldGUKcGFyYXIKcGFyY2VsYQpwYXJlZApwYXJpcgpwYXJvCnBhXHUwMzAxcnBhZG8KcGFycXVlCnBhXHUwMzAxcnJhZm8KcGFydGUKcGFzYXIKcGFzZW8KcGFzaW9cdTAzMDFuCnBhc28KcGFzdGEKcGF0YQpwYXRpbwpwYXRyaWEKcGF1c2EKcGF1dGEKcGF2bwpwYXlhc28KcGVhdG9cdTAzMDFuCnBlY2FkbwpwZWNlcmEKcGVjaG8KcGVkYWwKcGVkaXIKcGVnYXIKcGVpbmUKcGVsYXIKcGVsZGFuXHUwMzAzbwpwZWxlYQpwZWxpZ3JvCnBlbGxlam8KcGVsbwpwZWx1Y2EKcGVuYQpwZW5zYXIKcGVuXHUwMzAzb1x1MDMwMW4KcGVvXHUwMzAxbgpwZW9yCnBlcGlubwpwZXF1ZW5cdTAzMDNvCnBlcmEKcGVyY2hhCnBlcmRlcgpwZXJlemEKcGVyZmlsCnBlcmljbwpwZXJsYQpwZXJtaXNvCnBlcnJvCnBlcnNvbmEKcGVzYQpwZXNjYQpwZVx1MDMwMXNpbW8KcGVzdGFuXHUwMzAzYQpwZVx1MDMwMXRhbG8KcGV0cm9cdTAzMDFsZW8KcGV6CnBlenVuXHUwMzAzYQpwaWNhcgpwaWNob1x1MDMwMW4KcGllCnBpZWRyYQpwaWVybmEKcGllemEKcGlqYW1hCnBpbGFyCnBpbG90bwpwaW1pZW50YQpwaW5vCnBpbnRvcgpwaW56YQpwaW5cdTAzMDNhCnBpb2pvCnBpcGEKcGlyYXRhCnBpc2FyCnBpc2NpbmEKcGlzbwpwaXN0YQpwaXRvXHUwMzAxbgpwaXpjYQpwbGFjYQpwbGFuCnBsYXRhCnBsYXlhCnBsYXphCnBsZWl0bwpwbGVubwpwbG9tbwpwbHVtYQpwbHVyYWwKcG9icmUKcG9jbwpwb2Rlcgpwb2Rpbwpwb2VtYQpwb2VzaVx1MDMwMWEKcG9ldGEKcG9sZW4KcG9saWNpXHUwMzAxYQpwb2xsbwpwb2x2bwpwb21hZGEKcG9tZWxvCnBvbW8KcG9tcGEKcG9uZXIKcG9yY2lvXHUwMzAxbgpwb3J0YWwKcG9zYWRhCnBvc2Vlcgpwb3NpYmxlCnBvc3RlCnBvdGVuY2lhCnBvdHJvCnBvem8KcHJhZG8KcHJlY296CnByZWd1bnRhCnByZW1pbwpwcmVuc2EKcHJlc28KcHJldmlvCnByaW1vCnByaVx1MDMwMW5jaXBlCnByaXNpb1x1MDMwMW4KcHJpdmFyCnByb2EKcHJvYmFyCnByb2Nlc28KcHJvZHVjdG8KcHJvZXphCnByb2Zlc29yCnByb2dyYW1hCnByb2xlCnByb21lc2EKcHJvbnRvCnByb3Bpbwpwcm9cdTAzMDF4aW1vCnBydWViYQpwdVx1MDMwMWJsaWNvCnB1Y2hlcm8KcHVkb3IKcHVlYmxvCnB1ZXJ0YQpwdWVzdG8KcHVsZ2EKcHVsaXIKcHVsbW9cdTAzMDFuCnB1bHBvCnB1bHNvCnB1bWEKcHVudG8KcHVuXHUwMzAzYWwKcHVuXHUwMzAzbwpwdXBhCnB1cGlsYQpwdXJlXHUwMzAxCnF1ZWRhcgpxdWVqYQpxdWVtYXIKcXVlcmVyCnF1ZXNvCnF1aWV0bwpxdWlcdTAzMDFtaWNhCnF1aW5jZQpxdWl0YXIKcmFcdTAzMDFiYW5vCnJhYmlhCnJhYm8KcmFjaW9cdTAzMDFuCnJhZGljYWwKcmFpXHUwMzAxegpyYW1hCnJhbXBhCnJhbmNobwpyYW5nbwpyYXBhegpyYVx1MDMwMXBpZG8KcmFwdG8KcmFzZ28KcmFzcGEKcmF0bwpyYXlvCnJhemEKcmF6b1x1MDMwMW4KcmVhY2Npb1x1MDMwMW4KcmVhbGlkYWQKcmViYW5cdTAzMDNvCnJlYm90ZQpyZWNhZXIKcmVjZXRhCnJlY2hhem8KcmVjb2dlcgpyZWNyZW8KcmVjdG8KcmVjdXJzbwpyZWQKcmVkb25kbwpyZWR1Y2lyCnJlZmxlam8KcmVmb3JtYQpyZWZyYVx1MDMwMW4KcmVmdWdpbwpyZWdhbG8KcmVnaXIKcmVnbGEKcmVncmVzbwpyZWhlXHUwMzAxbgpyZWlubwpyZWlcdTAzMDFyCnJlamEKcmVsYXRvCnJlbGV2bwpyZWxpZXZlCnJlbGxlbm8KcmVsb2oKcmVtYXIKcmVtZWRpbwpyZW1vCnJlbmNvcgpyZW5kaXIKcmVudGEKcmVwYXJ0bwpyZXBldGlyCnJlcG9zbwpyZXB0aWwKcmVzCnJlc2NhdGUKcmVzaW5hCnJlc3BldG8KcmVzdG8KcmVzdW1lbgpyZXRpcm8KcmV0b3JubwpyZXRyYXRvCnJldW5pcgpyZXZlXHUwMzAxcwpyZXZpc3RhCnJleQpyZXphcgpyaWNvCnJpZWdvCnJpZW5kYQpyaWVzZ28KcmlmYQpyaVx1MDMwMWdpZG8Kcmlnb3IKcmluY29cdTAzMDFuCnJpblx1MDMwM29cdTAzMDFuCnJpXHUwMzAxbwpyaXF1ZXphCnJpc2EKcml0bW8Kcml0bwpyaXpvCnJvYmxlCnJvY2UKcm9jaWFyCnJvZGFyCnJvZGVvCnJvZGlsbGEKcm9lcgpyb2ppem8Kcm9qbwpyb21lcm8Kcm9tcGVyCnJvbgpyb25jbwpyb25kYQpyb3BhCnJvcGVybwpyb3NhCnJvc2NhCnJvc3Rybwpyb3RhcgpydWJpXHUwMzAxCnJ1Ym9yCnJ1ZG8KcnVlZGEKcnVnaXIKcnVpZG8KcnVpbmEKcnVsZXRhCnJ1bG8KcnVtYm8KcnVtb3IKcnVwdHVyYQpydXRhCnJ1dGluYQpzYVx1MDMwMWJhZG8Kc2FiZXIKc2FiaW8Kc2FibGUKc2FjYXIKc2FnYXoKc2FncmFkbwpzYWxhCnNhbGRvCnNhbGVybwpzYWxpcgpzYWxtb1x1MDMwMW4Kc2Fsb1x1MDMwMW4Kc2Fsc2EKc2FsdG8Kc2FsdWQKc2FsdmFyCnNhbWJhCnNhbmNpb1x1MDMwMW4Kc2FuZGlcdTAzMDFhCnNhbmVhcgpzYW5ncmUKc2FuaWRhZApzYW5vCnNhbnRvCnNhcG8Kc2FxdWUKc2FyZGluYQpzYXJ0ZVx1MDMwMW4Kc2FzdHJlCnNhdGFcdTAzMDFuCnNhdW5hCnNheG9mb1x1MDMwMW4Kc2VjY2lvXHUwMzAxbgpzZWNvCnNlY3JldG8Kc2VjdGEKc2VkCnNlZ3VpcgpzZWlzCnNlbGxvCnNlbHZhCnNlbWFuYQpzZW1pbGxhCnNlbmRhCnNlbnNvcgpzZW5cdTAzMDNhbApzZW5cdTAzMDNvcgpzZXBhcmFyCnNlcGlhCnNlcXVpXHUwMzAxYQpzZXIKc2VyaWUKc2VybW9cdTAzMDFuCnNlcnZpcgpzZXNlbnRhCnNlc2lvXHUwMzAxbgpzZXRhCnNldGVudGEKc2V2ZXJvCnNleG8Kc2V4dG8Kc2lkcmEKc2llc3RhCnNpZXRlCnNpZ2xvCnNpZ25vCnNpXHUwMzAxbGFiYQpzaWxiYXIKc2lsZW5jaW8Kc2lsbGEKc2lcdTAzMDFtYm9sbwpzaW1pbwpzaXJlbmEKc2lzdGVtYQpzaXRpbwpzaXR1YXIKc29icmUKc29jaW8Kc29kaW8Kc29sCnNvbGFwYQpzb2xkYWRvCnNvbGVkYWQKc29cdTAzMDFsaWRvCnNvbHRhcgpzb2x1Y2lvXHUwMzAxbgpzb21icmEKc29uZGVvCnNvbmlkbwpzb25vcm8Kc29ucmlzYQpzb3BhCnNvcGxhcgpzb3BvcnRlCnNvcmRvCnNvcnByZXNhCnNvcnRlbwpzb3N0ZVx1MDMwMW4Kc29cdTAzMDF0YW5vCnN1YXZlCnN1YmlyCnN1Y2VzbwpzdWRvcgpzdWVncmEKc3VlbG8Kc3Vlblx1MDMwM28Kc3VlcnRlCnN1ZnJpcgpzdWpldG8Kc3VsdGFcdTAzMDFuCnN1bWFyCnN1cGVyYXIKc3VwbGlyCnN1cG9uZXIKc3VwcmVtbwpzdXIKc3VyY28Kc3VyZW5cdTAzMDNvCnN1cmdpcgpzdXN0bwpzdXRpbAp0YWJhY28KdGFiaXF1ZQp0YWJsYQp0YWJ1XHUwMzAxCnRhY28KdGFjdG8KdGFqbwp0YWxhcgp0YWxjbwp0YWxlbnRvCnRhbGxhCnRhbG9cdTAzMDFuCnRhbWFuXHUwMzAzbwp0YW1ib3IKdGFuZ28KdGFucXVlCnRhcGEKdGFwZXRlCnRhcGlhCnRhcG9cdTAzMDFuCnRhcXVpbGxhCnRhcmRlCnRhcmVhCnRhcmlmYQp0YXJqZXRhCnRhcm90CnRhcnJvCnRhcnRhCnRhdHVhamUKdGF1cm8KdGF6YQp0YXpvXHUwMzAxbgp0ZWF0cm8KdGVjaG8KdGVjbGEKdGVcdTAzMDFjbmljYQp0ZWphZG8KdGVqZXIKdGVqaWRvCnRlbGEKdGVsZVx1MDMwMWZvbm8KdGVtYQp0ZW1vcgp0ZW1wbG8KdGVuYXoKdGVuZGVyCnRlbmVyCnRlbmlzCnRlbnNvCnRlb3JpXHUwMzAxYQp0ZXJhcGlhCnRlcmNvCnRlXHUwMzAxcm1pbm8KdGVybnVyYQp0ZXJyb3IKdGVzaXMKdGVzb3JvCnRlc3RpZ28KdGV0ZXJhCnRleHRvCnRlegp0aWJpbwp0aWJ1cm9cdTAzMDFuCnRpZW1wbwp0aWVuZGEKdGllcnJhCnRpZXNvCnRpZ3JlCnRpamVyYQp0aWxkZQp0aW1icmUKdGlcdTAzMDFtaWRvCnRpbW8KdGludGEKdGlcdTAzMDFvCnRpXHUwMzAxcGljbwp0aXBvCnRpcmEKdGlyb1x1MDMwMW4KdGl0YVx1MDMwMW4KdGlcdTAzMDF0ZXJlCnRpXHUwMzAxdHVsbwp0aXphCnRvYWxsYQp0b2JpbGxvCnRvY2FyCnRvY2lubwp0b2RvCnRvZ2EKdG9sZG8KdG9tYXIKdG9ubwp0b250bwp0b3Bhcgp0b3BlCnRvcXVlCnRvXHUwMzAxcmF4CnRvcmVybwp0b3JtZW50YQp0b3JuZW8KdG9ybwp0b3JwZWRvCnRvcnJlCnRvcnNvCnRvcnR1Z2EKdG9zCnRvc2NvCnRvc2VyCnRvXHUwMzAxeGljbwp0cmFiYWpvCnRyYWN0b3IKdHJhZXIKdHJhXHUwMzAxZmljbwp0cmFnbwp0cmFqZQp0cmFtbwp0cmFuY2UKdHJhdG8KdHJhdW1hCnRyYXphcgp0cmVcdTAzMDFib2wKdHJlZ3VhCnRyZWludGEKdHJlbgp0cmVwYXIKdHJlcwp0cmlidQp0cmlnbwp0cmlwYQp0cmlzdGUKdHJpdW5mbwp0cm9mZW8KdHJvbXBhCnRyb25jbwp0cm9wYQp0cm90ZQp0cm96bwp0cnVjbwp0cnVlbm8KdHJ1ZmEKdHViZXJpXHUwMzAxYQp0dWJvCnR1ZXJ0bwp0dW1iYQp0dW1vcgp0dVx1MDMwMW5lbAp0dVx1MDMwMW5pY2EKdHVyYmluYQp0dXJpc21vCnR1cm5vCnR1dG9yCnViaWNhcgp1XHUwMzAxbGNlcmEKdW1icmFsCnVuaWRhZAp1bmlyCnVuaXZlcnNvCnVubwp1bnRhcgp1blx1MDMwM2EKdXJiYW5vCnVyYmUKdXJnZW50ZQp1cm5hCnVzYXIKdXN1YXJpbwp1XHUwMzAxdGlsCnV0b3BpXHUwMzAxYQp1dmEKdmFjYQp2YWNpXHUwMzAxbwp2YWN1bmEKdmFnYXIKdmFnbwp2YWluYQp2YWppbGxhCnZhbGUKdmFcdTAzMDFsaWRvCnZhbGxlCnZhbG9yCnZhXHUwMzAxbHZ1bGEKdmFtcGlybwp2YXJhCnZhcmlhcgp2YXJvXHUwMzAxbgp2YXNvCnZlY2lubwp2ZWN0b3IKdmVoaVx1MDMwMWN1bG8KdmVpbnRlCnZlamV6CnZlbGEKdmVsZXJvCnZlbG96CnZlbmEKdmVuY2VyCnZlbmRhCnZlbmVubwp2ZW5nYXIKdmVuaXIKdmVudGEKdmVudXMKdmVyCnZlcmFubwp2ZXJibwp2ZXJkZQp2ZXJlZGEKdmVyamEKdmVyc28KdmVydGVyCnZpXHUwMzAxYQp2aWFqZQp2aWJyYXIKdmljaW8KdmlcdTAzMDFjdGltYQp2aWRhCnZpXHUwMzAxZGVvCnZpZHJpbwp2aWVqbwp2aWVybmVzCnZpZ29yCnZpbAp2aWxsYQp2aW5hZ3JlCnZpbm8KdmluXHUwMzAzZWRvCnZpb2xpXHUwMzAxbgp2aXJhbAp2aXJnbwp2aXJ0dWQKdmlzb3IKdmlcdTAzMDFzcGVyYQp2aXN0YQp2aXRhbWluYQp2aXVkbwp2aXZhegp2aXZlcm8Kdml2aXIKdml2bwp2b2xjYVx1MDMwMW4Kdm9sdW1lbgp2b2x2ZXIKdm9yYXoKdm90YXIKdm90bwp2b3oKdnVlbG8KdnVsZ2FyCnlhY2VyCnlhdGUKeWVndWEKeWVtYQp5ZXJubwp5ZXNvCnlvZG8KeW9nYQp5b2d1cgp6YWZpcm8KemFuamEKemFwYXRvCnphcnphCnpvbmEKem9ycm8KenVtbwp6dXJkb2Auc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy90cmFkaXRpb25hbC1jaGluZXNlLmpzCiAgdmFyIHdvcmRsaXN0OSA9IGBcdTc2ODQKXHU0RTAwClx1NjYyRgpcdTU3MjgKXHU0RTBEClx1NEU4NgpcdTY3MDkKXHU1NDhDClx1NEVCQQpcdTkwMTkKXHU0RTJEClx1NTkyNwpcdTcwQkEKXHU0RTBBClx1NTAwQgpcdTU3MEIKXHU2MjExClx1NEVFNQpcdTg5ODEKXHU0RUQ2Clx1NjY0MgpcdTRGODYKXHU3NTI4Clx1NTAxMQpcdTc1MUYKXHU1MjMwClx1NEY1QwpcdTU3MzAKXHU2NUJDClx1NTFGQQpcdTVDMzEKXHU1MjA2Clx1NUMwRApcdTYyMTAKXHU2NzAzClx1NTNFRgpcdTRFM0IKXHU3NjdDClx1NUU3NApcdTUyRDUKXHU1NDBDClx1NURFNQpcdTRFNUYKXHU4MEZEClx1NEUwQgpcdTkwNEUKXHU1QjUwClx1OEFBQQpcdTc1MjIKXHU3QTJFClx1OTc2MgpcdTgwMEMKXHU2NUI5Clx1NUY4QwpcdTU5MUEKXHU1QjlBClx1ODg0QwpcdTVCNzgKXHU2Q0Q1Clx1NjI0MApcdTZDMTEKXHU1Rjk3Clx1N0Q5MwpcdTUzNDEKXHU0RTA5Clx1NEU0QgpcdTkwMzIKXHU4NDU3Clx1N0I0OQpcdTkwRTgKXHU1RUE2Clx1NUJCNgpcdTk2RkIKXHU1MjlCClx1ODhFMQpcdTU5ODIKXHU2QzM0Clx1NTMxNgpcdTlBRDgKXHU4MUVBClx1NEU4QwpcdTc0MDYKXHU4RDc3Clx1NUMwRgpcdTcyNjkKXHU3M0ZFClx1NUJFNgpcdTUyQTAKXHU5MUNGClx1OTBGRApcdTUxNjkKXHU5QUQ0Clx1NTIzNgpcdTZBNUYKXHU3NTc2Clx1NEY3RgpcdTlFREUKXHU1RjlFClx1Njk2RApcdTY3MkMKXHU1M0JCClx1NjI4QQpcdTYwMjcKXHU1OTdEClx1NjFDOQpcdTk1OEIKXHU1QjgzClx1NTQwOApcdTkwODQKXHU1NkUwClx1NzUzMQpcdTUxNzYKXHU0RTlCClx1NzEzNgpcdTUyNEQKXHU1OTE2Clx1NTkyOQpcdTY1M0YKXHU1NkRCClx1NjVFNQpcdTkwQTMKXHU3OTNFClx1N0ZBOQpcdTRFOEIKXHU1RTczClx1NUY2MgpcdTc2RjgKXHU1MTY4Clx1ODg2OApcdTk1OTMKXHU2QTIzClx1ODIwNwpcdTk1REMKXHU1NDA0Clx1OTFDRApcdTY1QjAKXHU3RERBClx1NTE2NwpcdTY1NzgKXHU2QjYzClx1NUZDMwpcdTUzQ0QKXHU0RjYwClx1NjYwRQpcdTc3MEIKXHU1MzlGClx1NTNDOApcdTlFQkMKXHU1MjI5Clx1NkJENApcdTYyMTYKXHU0RjQ2Clx1OENFQQpcdTZDMjMKXHU3QjJDClx1NTQxMQpcdTkwNTMKXHU1NDdEClx1NkI2NApcdThCOEEKXHU2ODlEClx1NTNFQQpcdTZDOTIKXHU3RDUwClx1ODlFMwpcdTU1NEYKXHU2MTBGClx1NUVGQQpcdTY3MDgKXHU1MTZDClx1NzEyMQpcdTdDRkIKXHU4RUNEClx1NUY4OApcdTYwQzUKXHU4MDA1Clx1NjcwMApcdTdBQ0IKXHU0RUUzClx1NjBGMwpcdTVERjIKXHU5MDFBClx1NEUyNgpcdTYzRDAKXHU3NkY0Clx1OTg0QwpcdTlFRTgKXHU3QTBCClx1NUM1NQpcdTRFOTQKXHU2NzlDClx1NjU5OQpcdThDNjEKXHU1NEUxClx1OTc2OQpcdTRGNEQKXHU1MTY1Clx1NUUzOApcdTY1ODcKXHU3RTNEClx1NkIyMQpcdTU0QzEKXHU1RjBGClx1NkQzQgpcdThBMkQKXHU1M0NBClx1N0JBMQpcdTcyNzkKXHU0RUY2Clx1OTU3NwpcdTZDNDIKXHU4MDAxClx1OTgyRApcdTU3RkEKXHU4Q0M3Clx1OTA4QQpcdTZENDEKXHU4REVGClx1N0QxQQpcdTVDMTEKXHU1NzE2Clx1NUM3MQpcdTdENzEKXHU2M0E1Clx1NzdFNQpcdThGMDMKXHU1QzA3Clx1N0Q0NApcdTg5OEIKXHU4QTA4Clx1NTIyNQpcdTU5NzkKXHU2MjRCClx1ODlEMgpcdTY3MUYKXHU2ODM5Clx1OEFENgpcdTkwNEIKXHU4RkIyClx1NjMwNwpcdTVFN0UKXHU0RTVEClx1NTM0MApcdTVGMzcKXHU2NTNFClx1NkM3QQpcdTg5N0YKXHU4OEFCClx1NUU3OQpcdTUwNUEKXHU1RkM1Clx1NjIzMApcdTUxNDgKXHU1NkRFClx1NTI0NwpcdTRFRkIKXHU1M0Q2Clx1NjREQQpcdTg2NTUKXHU5NjhBClx1NTM1NwpcdTdENjYKXHU4MjcyClx1NTE0OQpcdTk1ODAKXHU1MzczClx1NEZERApcdTZDQkIKXHU1MzE3Clx1OTAyMApcdTc2N0UKXHU4OThGClx1NzFCMQpcdTk4MTgKXHU0RTAzClx1NkQ3NwpcdTUzRTMKXHU2NzcxClx1NUMwRQpcdTU2NjgKXHU1OEQzClx1NUZENwpcdTRFMTYKXHU5MUQxClx1NTg5RQpcdTcyMkQKXHU2RkRGClx1OTY4RQpcdTZDQjkKXHU2MDFEClx1ODg1MwpcdTY5NzUKXHU0RUE0Clx1NTNENwpcdTgwNkYKXHU0RUMwClx1OEE4RApcdTUxNkQKXHU1MTcxClx1NkIwQQpcdTY1MzYKXHU4QjQ5Clx1NjUzOQpcdTZFMDUKXHU3RjhFClx1NTE4RApcdTYzQTEKXHU4RjQ5Clx1NjZGNApcdTU1QUUKXHU5OEE4Clx1NTIwNwpcdTYyNTMKXHU3NjdEClx1NjU1OQpcdTkwMUYKXHU4MkIxClx1NUUzNgpcdTVCODkKXHU1ODM0Clx1OEVBQgpcdThFQ0EKXHU0RjhCClx1NzcxRgpcdTUyRDkKXHU1MTc3Clx1ODQyQwpcdTZCQ0YKXHU3NkVFClx1ODFGMwpcdTkwNTQKXHU4RDcwClx1N0E0RApcdTc5M0EKXHU4QjcwClx1ODA3MgpcdTU4MzEKXHU5QjI1Clx1NUI4QwpcdTk4NUUKXHU1MTZCClx1OTZFMgpcdTgzRUYKXHU1NDBEClx1NzhCQQpcdTYyNEQKXHU3OUQxClx1NUYzNQpcdTRGRTEKXHU5OUFDClx1N0JDMApcdThBNzEKXHU3QzczClx1NjU3NApcdTdBN0EKXHU1MTQzClx1NkNDMQpcdTRFQ0EKXHU5NkM2Clx1NkVBQgpcdTUwQjMKXHU1NzFGClx1OEEzMQpcdTZCNjUKXHU3RkE0Clx1NUVFMwpcdTc3RjMKXHU4QTE4Clx1OTcwMApcdTZCQjUKXHU3ODE0Clx1NzU0QwpcdTYyQzkKXHU2Nzk3Clx1NUY4QgpcdTUzRUIKXHU0RTE0Clx1N0E3NgpcdTg5QzAKXHU4RDhBClx1N0U1NApcdTg4REQKXHU1RjcxClx1N0I5NwpcdTRGNEUKXHU2MzAxClx1OTdGMwpcdTc3M0UKXHU2NkY4Clx1NUUwMwpcdTU5MEQKXHU1QkI5Clx1NTE1MgpcdTk4MDgKXHU5NjlCClx1NTU0NgpcdTk3NUUKXHU5QTU3Clx1OTAyMwpcdTY1QjcKXHU2REYxClx1OTZFMwpcdThGRDEKXHU3OTI2Clx1NTM0MwpcdTkwMzEKXHU1OUQ0Clx1N0QyMApcdTYyODAKXHU1MDk5Clx1NTM0QQpcdThGQTYKXHU5NzUyClx1NzcwMQpcdTUyMTcKXHU3RkQyClx1OTdGRgpcdTdEMDQKXHU2NTJGClx1ODIyQwpcdTUzRjIKXHU2MTFGClx1NTJERQpcdTRGQkYKXHU1NzE4Clx1NUY4MApcdTkxNzgKXHU2Qjc3Clx1NUUwMgpcdTUxNEIKXHU0RjU1Clx1OTY2NApcdTZEODgKXHU2OUNCClx1NUU5QwpcdTdBMzEKXHU1OTJBClx1NkU5NgpcdTdDQkUKXHU1MDNDClx1ODY1RgpcdTczODcKXHU2NUNGClx1N0RBRApcdTUyODMKXHU5MDc4Clx1NkExOQpcdTVCRUIKXHU1QjU4Clx1NTAxOQpcdTZCREIKXHU4OUFBClx1NUZFQgpcdTY1NDgKXHU2NUFGClx1OTY2MgpcdTY3RTUKXHU2QzVGClx1NTc4QgpcdTc3M0MKXHU3MzhCClx1NjMwOQpcdTY4M0MKXHU5OTBBClx1NjYxMwpcdTdGNkUKXHU2RDNFClx1NUM2NApcdTcyNDcKXHU1OUNCClx1NTM3QgpcdTVDMDgKXHU3MkMwClx1ODBCMgpcdTVFRTAKXHU0RUFDClx1OEI1OApcdTkwNjkKXHU1QzZDClx1NTcxMwpcdTUzMDUKXHU3MDZCClx1NEY0RgpcdThBQkYKXHU2RUZGClx1N0UyMwpcdTVDNDAKXHU3MTY3Clx1NTNDMwpcdTdEMDUKXHU3RDMwClx1NUYxNQpcdTgwN0QKXHU4QTcyClx1OTQzNQpcdTUwRjkKXHU1NkI0Clx1OTk5NgpcdTVFOTUKXHU2REIyClx1NUI5OApcdTVGQjcKXHU5NkE4Clx1NzVDNQpcdTg2MDcKXHU1OTMxClx1NzIzRQpcdTZCN0IKXHU4QjFCClx1OTE0RApcdTU5NzMKXHU5RUMzClx1NjNBOApcdTk4NkYKXHU4QUM3Clx1N0Y2QQpcdTc5NUUKXHU4NUREClx1NTQ2MgpcdTVFMkQKXHU1NDJCClx1NEYwMQpcdTY3MUIKXHU1QkM2Clx1NjI3OQpcdTcxREYKXHU5ODA1Clx1OTYzMgpcdTgyMDkKXHU3NDAzClx1ODJGMQpcdTZDMjcKXHU1MkUyClx1NTQ0QQpcdTY3NEUKXHU1M0YwClx1ODQzRApcdTY3MjgKXHU1RTZCClx1OEYyQQpcdTc4MzQKXHU0RTlFClx1NUUyQgpcdTU3MEQKXHU2Q0U4Clx1OTA2MApcdTVCNTcKXHU2NzUwClx1NjM5MgpcdTRGOUIKXHU2Q0IzClx1NjE0QgpcdTVDMDEKXHU1M0U2Clx1NjVCRApcdTZFMUIKXHU2QTM5Clx1NkVCNgpcdTYwMEUKXHU2QjYyClx1Njg0OApcdThBMDAKXHU1OEVCClx1NTc0NwpcdTZCNjYKXHU1NkZBClx1ODQ0OQpcdTlCNUEKXHU2Q0UyClx1ODk5NgpcdTUwQzUKXHU4Q0JCClx1N0RDQQpcdTYxMUIKXHU1REU2Clx1N0FFMApcdTY1RTkKXHU2NzFEClx1NUJCMwpcdTdFOEMKXHU4RjE1Clx1NjcwRApcdThBNjYKXHU5OERGClx1NTE0NQpcdTUxNzUKXHU2RTkwClx1NTIyNApcdThCNzcKXHU1M0Y4Clx1OERCMwpcdTY3RDAKXHU3REY0Clx1NURFRQpcdTgxRjQKXHU2NzdGClx1NzUzMApcdTk2NEQKXHU5RUQxClx1NzJBRgpcdThDQTAKXHU2NENBClx1ODMwMwpcdTdFN0MKXHU4MjA4Clx1NEYzQwpcdTk5MTgKXHU1ODA1Clx1NjZGMgpcdThGMzgKXHU0RkVFClx1NjU0NQpcdTU3Q0UKXHU1OTJCClx1NTkyMApcdTkwMDEKXHU3QjQ2Clx1ODIzOQpcdTRGNTQKXHU1M0YzClx1OENBMQpcdTU0MDMKXHU1QkNDClx1NjYyNQpcdTgwNzcKXHU4OUJBClx1NkYyMgpcdTc1NkIKXHU1MjlGClx1NURGNApcdThEREYKXHU5NkQ2Clx1OTZEQwpcdTk4REIKXHU2QUEyClx1NTQzOApcdTUyQTkKXHU2NjA3Clx1OTY3RApcdTRFOTIKXHU1MjFEClx1NTI3NQpcdTYyOTcKXHU4MDAzClx1NjI5NQpcdTU4REUKXHU3QjU2Clx1NTNFNApcdTVGOTEKXHU2M0RCClx1NjcyQQpcdThERDEKXHU3NTU5Clx1OTJGQwpcdTY2RkUKXHU3QUVGClx1OENBQwpcdTdBRDkKXHU3QzIxClx1OEZGMApcdTkzMjIKXHU1MjZGClx1NzZFMQpcdTVFMUQKXHU1QzA0Clx1ODM0OQpcdTg4NUQKXHU2MjdGClx1NzM2OApcdTRFRTQKXHU5NjUwClx1OTYzRgpcdTVCQTMKXHU3NEIwClx1OTZEOQpcdThBQ0IKXHU4RDg1Clx1NUZBRQpcdThCOTMKXHU2M0E3Clx1NURERQpcdTgyNkYKXHU4RUY4Clx1NjI3RQpcdTU0MjYKXHU3RDAwClx1NzZDQQpcdTRGOUQKXHU1MTJBClx1OTgwMgpcdTc5MEUKXHU4RjA5Clx1NTAxMgpcdTYyM0YKXHU3QTgxClx1NTc1MApcdTdDODkKXHU2NTc1Clx1NzU2NQpcdTVCQTIKXHU4ODgxClx1NTFCNwpcdTUyREQKXHU3RDU1Clx1Njc5MApcdTU4NEEKXHU1MjkxClx1NkUyQwpcdTdENzIKXHU1MzU0Clx1OEEzNApcdTVGRjUKXHU5NjczClx1NEVDRApcdTdGODUKXHU5RTdEClx1NTNDQgpcdTZEMEIKXHU5MzJGClx1ODJFNgpcdTU5MUMKXHU1MjExClx1NzlGQgpcdTk4M0IKXHU5MDEwClx1OTc2MApcdTZERjcKXHU2QkNEClx1NzdFRApcdTc2QUUKXHU3RDQyClx1ODA1QQpcdTZDN0QKXHU2NzUxClx1OTZGMgpcdTU0RUEKXHU2NUUyClx1OERERApcdTg4NUIKXHU1MDVDClx1NzBDOApcdTU5MkUKXHU1QkRGClx1NzFEMgpcdThGQzUKXHU1ODgzClx1ODJFNQpcdTUzNzAKXHU2RDMyClx1NTIzQgpcdTYyRUMKXHU2RkMwClx1NUI1NApcdTY0MUUKXHU3NTFBClx1NUJBNApcdTVGODUKXHU2ODM4Clx1NjgyMQpcdTY1NjMKXHU0RkI1Clx1NTQyNwpcdTc1MzIKXHU5MDRBClx1NEU0NQpcdTgzREMKXHU1NDczClx1ODIwQQpcdTZBMjEKXHU2RTU2Clx1OENBOApcdTY0MEQKXHU5ODEwClx1OTYzQgpcdTZCRUIKXHU2NjZFClx1N0E2OQpcdTRFNTkKXHU1QUJEClx1NjkwRApcdTYwNkYKXHU2NEY0Clx1OTI4MApcdThBOUUKXHU2M0VFClx1OTE1MgpcdTVCODgKXHU2MkZGClx1NUU4RgpcdTdEMTkKXHU5MUFCClx1N0YzQQpcdTk2RTgKXHU1NUNFClx1OTFERApcdTUyODkKXHU1NTRBClx1NjAyNQpcdTU1MzEKXHU4QUE0Clx1OEExMwpcdTk4NTgKXHU1QkU5Clx1OTY0NApcdTczNzIKXHU4MzM2Clx1OUJBRQpcdTdDRTcKXHU2NUE0Clx1NUI2OQpcdTgxMkIKXHU3ODZCClx1ODBBNQpcdTU1ODQKXHU5RjhEClx1NkYxNApcdTcyMzYKXHU2RjM4Clx1ODg0MApcdTZCNjEKXHU2OEIwClx1NjM4QwpcdTZCNEMKXHU2Qzk5Clx1NTI1QgpcdTY1M0IKXHU4QjAyClx1NzZGRQpcdThBMEUKXHU2NjVBClx1N0M5MgpcdTRFODIKXHU3MUMzClx1NzdEQgpcdTRFNEUKXHU2QkJBClx1ODVFNQpcdTVCRTcKXHU5QjZGClx1OENCNApcdTk0MTgKXHU3MTY0Clx1OEI4MApcdTczRUQKXHU0RjJGClx1OTk5OQpcdTRFQ0IKXHU4RkVCClx1NTNFNQpcdThDNTAKXHU1N0Y5Clx1NjNFMQpcdTg2MkQKXHU2NEQ0Clx1NUYyNgpcdTg2Q0IKXHU2Qzg5Clx1NTA0NwpcdTdBN0YKXHU1N0Y3Clx1N0I1NApcdTZBMDIKXHU4QUIwClx1OTgwNgpcdTcxNTkKXHU3RTJFClx1NUZCNQpcdTgxQzkKXHU1NTlDClx1Njc3RQpcdTgxNzMKXHU1NkYwClx1NzU3MApcdTUxNEQKXHU4MENDClx1NjYxRgpcdTc5OEYKXHU4Q0I3Clx1NjdEMwpcdTRFOTUKXHU2OTgyClx1NjE2MgpcdTYwMTUKXHU3OEMxClx1NTAwRApcdTc5NTYKXHU3Njg3Clx1NEZDMwpcdTk3NUMKXHU4OERDClx1OEE1NQpcdTdGRkIKXHU4MDg5Clx1OEUxMApcdTVDM0MKXHU4ODYzClx1NUJFQwpcdTYzREEKXHU2OEM5Clx1NUUwQwpcdTUwQjcKXHU2NENEClx1NTc4MgpcdTc5Q0IKXHU1QjlDClx1NkMyQgpcdTU5NTcKXHU3NzYzClx1NjMyRgpcdTY3QjYKXHU0RUFFClx1NjcyQgpcdTYxQjIKXHU2MTc2Clx1N0RFOApcdTcyNUIKXHU4OUY4Clx1NjYyMApcdTk2RjcKXHU5MkI3Clx1OEE2OQpcdTVFQTcKXHU1QzQ1Clx1NjI5MwpcdTg4QzIKXHU4MERFClx1NTQ3QwpcdTVBMTgKXHU2NjZGClx1NUEwMQpcdTdEQTAKXHU2Njc2Clx1NTM5QQpcdTc2REYKXHU4ODYxClx1OTZERQpcdTVCNkIKXHU1RUY2Clx1NTM3MQpcdTgxQTAKXHU1QzRCClx1OTEwOQpcdTgxRTgKXHU5Njc4Clx1OTg2NwpcdTYzODkKXHU1NDQwClx1NzFDOApcdTZCNzIKXHU2M0FBClx1Njc1RgpcdTgwMTAKXHU1Mjg3Clx1NzM4OQpcdThEOTkKXHU4REYzClx1NTRFNQpcdTVCNjMKXHU4QUIyClx1NTFGMQpcdTgwRTEKXHU5ODREClx1NkIzRQpcdTdEMzkKXHU1Mzc3Clx1OUY0QQpcdTUwNDkKXHU4NEI4Clx1NkI5NgpcdTZDMzgKXHU1Qjk3Clx1ODJENwpcdTVEREQKXHU3MjEwClx1NUNBOQpcdTVGMzEKXHU5NkY2Clx1Njk0QQpcdTU5NEYKXHU2Q0JGClx1OTczMgpcdTY4N0YKXHU2M0EyClx1NkVEMQpcdTkzQUUKXHU5OEVGClx1NkZDMwpcdTgyMkEKXHU2MUY3Clx1OEQ5NQpcdTVFQUIKXHU1OTZBClx1NEYwQQpcdTk3NDgKXHU3QTA1Clx1OTAxNApcdTZFQzUKXHU4Q0ZEClx1NkI3OApcdTUzRUMKXHU5RjEzClx1NjRBRApcdTc2RTQKXHU4OEMxClx1OTZBQQpcdTVFQjcKXHU1NTJGClx1OTMwNApcdTgzQ0MKXHU3RDE0Clx1NTAxRgpcdTdDRDYKXHU4NENCClx1NkE2QgpcdTdCMjYKXHU3OUMxClx1NTJBQQpcdTU4MDIKXHU1N0RGClx1NjlDRApcdTZGNjQKXHU1RTQ1Clx1NTRDOApcdTdBREYKXHU3MTlGClx1ODdGMgpcdTZGQTQKXHU4MTY2Clx1NThFNApcdTc4QjMKXHU2QjUwClx1OTA0RApcdTUwNzQKXHU1QkU4Clx1NjU2MgpcdTVGQjkKXHU2MTZFClx1NjU5QwpcdTg1ODQKXHU1RUFEClx1N0QwRApcdTVGNDgKXHU5OEZDClx1NEYzOApcdTYyOTgKXHU5RUE1Clx1NkZENQpcdTY2OTcKXHU4Mzc3Clx1NzRFNgpcdTU4NUUKXHU1RThBClx1N0JDOQpcdTYwRTEKXHU2MjM2Clx1OEEyQQpcdTU4NTQKXHU1OTQ3Clx1OTAwRgpcdTY4ODEKXHU1MjAwClx1NjVDQgpcdThERTEKXHU1MzYxClx1NkMyRgpcdTkwNDcKXHU0RUZEClx1NkJEMgpcdTZDRTUKXHU5MDAwClx1NkQxNwpcdTY0RkEKXHU3MDcwClx1NUY2OQpcdThDRTMKXHU4MDE3Clx1NTkwRgpcdTY0QzcKXHU1RkQ5Clx1OTI4NQpcdTczN0IKXHU3ODZDClx1NEU4OApcdTdFNDEKXHU1NzA4Clx1OTZFQQpcdTUxRkQKXHU0RUE2Clx1NjJCRApcdTdCQzcKXHU5NjYzClx1OTY3MApcdTRFMDEKXHU1QzNBClx1OEZGRApcdTU4MDYKXHU5NkM0Clx1OEZDRQpcdTZDREIKXHU3MjM4Clx1NkExMwpcdTkwN0YKXHU4QjAwClx1NTY3OApcdTkxQ0UKXHU4QzZDClx1NjVENwpcdTdEMkYKXHU1MDRGClx1NTE3OApcdTk5MjgKXHU3RDIyClx1NzlFNgpcdTgxMDIKXHU2RjZFClx1NzIzQQpcdThDNDYKXHU1RkZEClx1NjI1OApcdTlBNUEKXHU1ODUxClx1OTA3QQpcdTYxMDgKXHU2NzMxClx1NjZGRgpcdTdFOTYKXHU3Qzk3Clx1NTBCRQpcdTVDMUEKXHU3NURCClx1Njk1QQpcdThCMUQKXHU1OTZFClx1OENGQwpcdTc4RTgKXHU1NDFCClx1NkM2MApcdTY1QzEKXHU3ODhFClx1OUFBOApcdTc2RTMKXHU2MzU1Clx1NUYxRgpcdTY2QjQKXHU1MjcyClx1OENBQgpcdTZCOEEKXHU5MUNCClx1OEE1RQpcdTRFQTEKXHU1OEMxClx1OTgxMwpcdTVCRjYKXHU1MzQ4Clx1NTg3NQpcdTgwNUUKXHU2M0VEClx1NzBBRQpcdTZCOTgKXHU1MUFDClx1NkE0QgpcdTVBNjYKXHU4QjY2Clx1N0Q5QwpcdTYyREIKXHU1NDMzClx1NEVEOApcdTZENkUKXHU5MDZEClx1NUY5MApcdTYwQTgKXHU2NDE2Clx1OEMzNwpcdThEMEEKXHU3QkIxClx1OTY5NApcdThBMDIKXHU3NTM3Clx1NTQzOQpcdTU3MTIKXHU3RDFCClx1NTUxMApcdTY1NTcKXHU1QjhCClx1NzNCQgpcdTVERTgKXHU4MDE1Clx1NTc2NgpcdTY5QUUKXHU5NTg5Clx1NzA2MwpcdTkzNzUKXHU1MUUxClx1OTlEMApcdTkzNEIKXHU2NTUxClx1NjA2OQpcdTUyNUQKXHU1MUREClx1OUU3QwpcdTlGNTIKXHU2MjJBClx1NzE0OQpcdTlFQkIKXHU3RDIxClx1Nzk4MQpcdTVFRTIKXHU3NkRCClx1NzI0OApcdTdERTkKXHU2REU4Clx1Nzc1QgpcdTY2MEMKXHU1QTVBClx1NkQ4OQpcdTdCNTIKXHU1NjM0Clx1NjNEMgpcdTVDQjgKXHU2NzE3Clx1ODM4QQpcdTg4NTcKXHU4NUNGClx1NTlEMQpcdThDQkYKXHU4MTUwClx1NTk3NApcdTU1NjYKXHU2MTYzClx1NEU1OApcdTU5MjUKXHU2MDYyClx1NTJGQgpcdTdEMTcKXHU2MjRFClx1OEZBRgpcdTgwMzMKXHU1RjZBClx1ODFFMwpcdTUxMDQKXHU3NDgzClx1NjJCNQpcdTgxMDgKXHU3OUMwClx1ODVBOQpcdTRGQzQKXHU3REIyClx1ODIxRQpcdTVFOTcKXHU1Njc0Clx1N0UzMQpcdTVCRjgKXHU2QzU3Clx1NjM5QgpcdTZEMkEKXHU4Q0MwClx1OTU4MwpcdTY3RUMKXHU3MjA2Clx1NzBFRgpcdTZEMjUKXHU3QTNCClx1NzI0NgpcdThFREYKXHU1MkM3Clx1NTBDRgpcdTZFRkUKXHU1Mzk4Clx1ODQ5OQpcdTgyQjMKXHU4MEFGClx1NTc2MQpcdTY3RjEKXHU3NkVBClx1ODE3RgpcdTUxMDAKXHU2NUM1Clx1NUMzRQpcdThFQ0IKXHU1MUIwClx1OENBMgpcdTc2N0IKXHU5RUNFClx1NTI0QQpcdTk0N0QKXHU1MkQyClx1OTAwMwpcdTk2OUMKXHU2QzI4Clx1OTBFRApcdTVDRjAKXHU1RTYzClx1NkUyRgpcdTRGMEYKXHU4RUNDClx1NzU1RApcdTc1NjIKXHU2NEU2Clx1ODNBQgpcdTUyM0EKXHU2RDZBClx1NzlEOApcdTYzRjQKXHU2ODJBClx1NTA2NQpcdTU1MkUKXHU4MEExClx1NUNGNgpcdTc1MTgKXHU2Q0UxClx1Nzc2MQpcdTdBRTUKXHU5NDQ0Clx1NkU2RgpcdTk1QTUKXHU0RjExClx1NTMyRgpcdTgyMEQKXHU3MjY3Clx1N0U1RQpcdTcwQjgKXHU1NEYyClx1NzhGNwpcdTdFM0UKXHU2NzBCClx1NkRFMQpcdTVDMTYKXHU1NTVGClx1OTY3NwpcdTY3RjQKXHU1NDQ4Clx1NUY5MgpcdTk4NEYKXHU2RERBClx1N0EwRApcdTVGRDgKXHU2Q0Y1Clx1ODVDRApcdTYyRDYKXHU2RDFFClx1NjM4OApcdTkzRTEKXHU4RjlCClx1NThFRgpcdTkyRDIKXHU4Q0E3Clx1ODY1QgpcdTVGNEUKXHU2NDY5Clx1NkNGMApcdTVFN0MKXHU1RUY3Clx1NUMwQQpcdTdBOTcKXHU3REIxClx1NUYwNApcdTk2QjgKXHU3NTkxClx1NkMwRgpcdTVCQUUKXHU1OUQwClx1OTcwNwpcdTc0NUUKXHU2MDJBClx1NUMyNApcdTc0MzQKXHU1RkFBClx1NjNDRgpcdTgxOUMKXHU5MDU1Clx1NTkzRQpcdTgxNzAKXHU3REUzClx1NzNFMApcdTdBQUUKXHU2OEVFClx1Njc5RApcdTdBRjkKXHU2RTlEClx1NTBBQwpcdTdFNjkKXHU2MUI2Clx1OTBBNgpcdTUyNjkKXHU1RTc4Clx1NkYzRgpcdTZCMDQKXHU2NEMxClx1NzI1OQpcdThDQUYKXHU3OUFFClx1NkZGRQpcdTkyMDkKXHU3RDBCClx1N0Y3NwpcdTYyQ0QKXHU1NEIxClx1NTU4QQpcdTg4OTYKXHU1N0MzClx1NTJFNApcdTdGNzAKXHU3MTI2Clx1NkY1QgpcdTRGMEQKXHU1OEE4Clx1NkIzMgpcdTdFMkIKXHU1OUQzClx1NTIwQQpcdTk4RkQKXHU0RUZGClx1NzM0RQpcdTkyQzEKXHU5QjNDClx1OUU5NwpcdThERTgKXHU5RUQ4Clx1NjMxNgpcdTkzQzgKXHU2MzgzClx1NTU5RApcdTg4OEIKXHU3MEFEClx1NkM2MQpcdTVFNTUKXHU4QUY4Clx1NUYyNwpcdTUyRjUKXHU2ODg1Clx1NTk3NgpcdTZGNTQKXHU3MDdEClx1ODIxRgpcdTk0NTEKXHU4MkVGClx1OEExRgpcdTYyQjEKXHU2QkMwClx1NjFDMgpcdTVCRDIKXHU2NjdBClx1NTdENApcdTVCQzQKXHU1QzQ2Clx1OEU4RApcdTZFMjEKXHU2MzExClx1NEUzOQpcdTgyNzEKXHU4QzlEClx1NzhCMApcdTYyRDQKXHU3MjM5Clx1NjIzNApcdTc4QkMKXHU1OTIyClx1ODJCRApcdTcxOTQKXHU4RDY0Clx1NkYwMQpcdTU0RUQKXHU2NTZDClx1OTg0NgpcdTU5NTQKXHU5MjVCClx1NEVGMgpcdTg2NEUKXHU3QTAwClx1NTlCOQpcdTRFNEYKXHU3M0NEClx1NzUzMwpcdTY4NEMKXHU5MDc1Clx1NTE0MQpcdTk2ODYKXHU4N0JBClx1NTAwOQpcdTlCNEYKXHU5MkIzClx1NjZDOQpcdTZDMkUKXHU1MTdDClx1OTZCMQpcdTc5MTkKXHU4RDZCClx1NjRBNQpcdTVGRTAKXHU4MDg1Clx1N0YzOApcdTcyN0QKXHU2NDM2Clx1NTM1QQpcdTVERTcKXHU2QkJDClx1NTE0NApcdTY3NUMKXHU4QTBBClx1OEFBMApcdTc4QTcKXHU3OTY1Clx1NjdFRgpcdTk4MDEKXHU1REUxClx1NzdFOQpcdTYwQjIKXHU3MDRDClx1OUY2MQpcdTUwMkIKXHU3OTY4Clx1NUMwQgpcdTY4NDIKXHU5MkVBClx1ODA1NgpcdTYwNTAKXHU2MDcwClx1OTEyRApcdThEQTMKXHU2MkFDClx1ODM1MgpcdTlBMzAKXHU4Q0JDClx1NjdENApcdTZFRjQKXHU3MzFCClx1OTVDQQpcdThGMUIKXHU1OUJCClx1NTg2QgpcdTY0QTQKXHU1MTMyClx1N0MzRApcdTlCMjcKXHU2NEZFClx1N0QyQgpcdTc4MDIKXHU5MDVFClx1NjIzMgpcdTU0MEEKXHU5Njc2Clx1NEYxMApcdTk5MzUKXHU3NjQyClx1NzRGNgpcdTVBNDYKXHU2NEFCClx1ODFDMgpcdTY0NzgKXHU1RkNEClx1ODc2NgpcdTg4MUYKXHU5MTMwClx1ODBGOApcdTk3OEYKXHU2NEUwClx1NTA3NgpcdTY4QzQKXHU2OUZEClx1NTJDMQpcdTRFNzMKXHU5MTI3Clx1NTQwOQpcdTRFQzEKXHU3MjFCClx1NzhEQQpcdTc5REYKXHU3MENGClx1ODI2NgpcdTRGMzQKXHU3NERDClx1NkRGQQpcdTRFMTkKXHU2NkFCClx1NzFFNQpcdTZBNjEKXHU2N0YzClx1OEZGNwpcdTY2OTYKXHU3MjRDClx1NzlFNwpcdTgxQkQKXHU4QTczClx1N0MyNwpcdThFMEYKXHU3NEY3Clx1OEI1QwpcdTU0NDYKXHU4Q0QzClx1N0NDQQpcdTZEMUIKXHU4RjFEClx1NjFBNApcdTdBRjYKXHU5Njk5Clx1NjAxMgpcdTdDOTgKXHU0RTQzClx1N0REMgpcdTgwQTkKXHU3QzREClx1NjU0RgpcdTU4NTcKXHU3MTk5Clx1NzY4NgpcdTUwNzUKXHU2MUY4Clx1NjM5OApcdTRFQUIKXHU3Q0ZFClx1OTE5MgpcdTcyQzIKXHU5Mzk2Clx1NkRDMApcdTYwNjgKXHU3MjcyClx1OTczOApcdTcyMkMKXHU4Q0RFClx1OTAwNgpcdTczQTkKXHU5Njc1Clx1Nzk1RApcdTc5RDIKXHU2RDU5Clx1OEM4QwpcdTVGNzkKXHU1RjdDClx1NjA4OQpcdTlEMjgKXHU4REE4Clx1OUNGMwpcdTY2NjgKXHU3NTVDClx1OEYyOQpcdTc5RTkKXHU1Mzc1Clx1N0Y3MgpcdTY4QUYKXHU3MDhFClx1NzA1OApcdTY4Q0IKXHU5QTQ1Clx1N0JFOQpcdTVDRkQKXHU1MTkyClx1NTU2NQpcdTU4RkQKXHU4QjZGClx1NkQ3OApcdTZDQzkKXHU1RTNEClx1OTA3MgpcdTc3RkQKXHU3NTg2Clx1OENCOApcdTZGMEYKXHU3QTNGClx1NTFBMApcdTVBRTkKXHU4MTA1Clx1ODJBRgpcdTcyNjIKXHU1M0RCClx1ODc1NQpcdTU5NjcKXHU5Q0Y0Clx1NURCQQpcdTdGOEEKXHU2MTkxClx1NEUzMgpcdTU4NTgKXHU3RTZBClx1OTE3NQpcdTg3OEQKXHU3NkM2Clx1OTMyQgpcdTVFREYKXHU3QzRDClx1NTFDRApcdThGMTQKXHU2NTFEClx1ODk3MgpcdTdCNEIKXHU2MkQyClx1NTBEQQpcdTY1RjEKXHU5MjQwClx1OUNFNQpcdTZGMDYKXHU2Qzg4Clx1NzcwOQpcdTc1OEYKXHU2REZCClx1NjhEMgpcdTdBNTcKXHU3ODVEClx1OTdEMwpcdTkwM0MKXHU2MjZEClx1NTBEMQpcdTZEQkMKXHU2MzNBClx1Nzg5NwpcdTY4M0QKXHU3MDkyClx1Njc2RgpcdTYwQTMKXHU5OTNFClx1NTJGOApcdThDNkEKXHU5MDdDClx1NTJDMwpcdTlEM0IKXHU2NUU2Clx1NTQwRgpcdTYyREMKXHU3MkQ3Clx1NTdDQgpcdThGMjUKXHU2M0E5Clx1OThGMgpcdTY0MkMKXHU3Rjc1Clx1OEZBRApcdTUyRkUKXHU2MjYzClx1NEYzMApcdTg1MjMKXHU3RDY4Clx1OTcyNwpcdTRFMDgKXHU2NzM1Clx1NTlDNgpcdTY0RUMKXHU1Qjg3Clx1OEYyRgpcdTk2NUQKXHU5NkQ1Clx1NTExRgpcdTg0QzQKXHU1RDA3Clx1NTI2QQpcdTUwMjEKXHU1RUYzClx1NTRBQwpcdTk5REIKXHU4NUFGClx1NTIzNwpcdTY1QTUKXHU3NTZBClx1OENFNgpcdTU5NDkKXHU0RjVCClx1NkY4NgpcdTZGMkIKXHU2NkZDClx1NjI0NwpcdTkyMjMKXHU2ODQzClx1NjI3NgpcdTRFRDQKXHU4RkQ0Clx1NEZENwpcdTg2NjcKXHU4MTU0Clx1OTc4QgpcdTY4RjEKXHU4OTg2Clx1Njg0NgpcdTYwODQKXHU1M0Q0Clx1NjQ5RQpcdTlBMTkKXHU1MkQ4Clx1NjVGQQpcdTZDQjgKXHU1QjY0Clx1NTQxMApcdTVCNUYKXHU2RTIwClx1NUM0OApcdTc1QkUKXHU1OTk5Clx1NjBEQwpcdTRFRjAKXHU3MkUwClx1ODEzOQpcdThBRTcKXHU2MkNCClx1OUVGNApcdTY4NTEKXHU1RDE3Clx1NTYxQgpcdTg4NzAKXHU3NkRDClx1NkVGMgpcdTgxREYKXHU4Q0Y0Clx1NkU2NwpcdTc1MUMKXHU2NkY5Clx1OTVCMQpcdTgwOEMKXHU1NEU5Clx1NTNCMgpcdTcwRjQKXHU3REVGClx1NkJDNQpcdTY2MjgKXHU1MDdEClx1NzVDNwpcdTcxNkUKXHU1NjA2Clx1OTFEOApcdTY0MkQKXHU4Mzk2Clx1N0M2MApcdTkxNzcKXHU1MDc3Clx1NUYxMwpcdTkzMTAKXHU2MDQ2Clx1NTA5MQpcdTU3NTEKXHU5RjNCClx1N0ZGQwpcdTdEQjgKXHU2NTU4Clx1NzM0NApcdTkwMkUKXHU3RjUwClx1N0Q2MQpcdTY4REEKXHU2MjkxClx1ODFBOApcdTg1MkMKXHU1QkZBClx1OUE1RgpcdTdBNDYKXHU1MUI2Clx1NjdBRgpcdTUxOEEKXHU1QzREClx1NTFGOApcdTdEMzMKXHU1NzZGClx1NzJBNwpcdTcxMzAKXHU4RjVGClx1NkIyMwpcdTY2NDkKXHU3NjI2Clx1NzlBNgpcdTkzMjAKXHU5MzI2Clx1NTVBQQpcdTY1RUMKXHU5MzVCClx1NThERgpcdTY0MUMKXHU2NEIyClx1OTA4MApcdTRFQUQKXHU5MTZGClx1OTA4MQpcdTgyMTIKXHU4MTA2Clx1OTE3NgpcdTk1OTIKXHU2MTgyClx1OTE1QQpcdTk4MTEKXHU3RkJEClx1NkYzMgpcdTUzNzgKXHU0RUQ3Clx1OTY2QQpcdTk1RTIKXHU2MUYyClx1Njc2RApcdTU5REEKXHU4MDlBClx1NjM0OQpcdTk4QzQKXHU2RjAyClx1NjYwNgpcdTZCM0EKXHU1NDNFClx1OTBDRQpcdTcwRjcKXHU2QzQxClx1NTQ3NQpcdTk4RkUKXHU4NTZEClx1OTZDNQpcdTkwRjUKXHU5MDc3Clx1NzFENQpcdTY0OTIKXHU1OUZCClx1OEQ3NApcdTVCQjQKXHU3MTY5Clx1NTBCNQpcdTVFMzMKXHU2NTkxClx1OTIzNApcdTY1RTgKXHU5MTg3Clx1ODQ2MwpcdTk5MDUKXHU5NkRCClx1NTlGRgpcdTYyQ0MKXHU1MDg1Clx1ODE3OQpcdTU5QTUKXHU2M0M5Clx1OENFMgpcdTYyQzYKXHU2QjZBClx1ODQ2MQpcdTgwRkEKXHU0RTFGClx1NkQ2OQpcdTVGQkQKXHU2NjAyClx1NTg4QQpcdTY0Q0IKXHU4OUJEClx1OENBQQpcdTYxNzAKXHU3RTczClx1NkM2QQpcdTYxNEMKXHU5OUFFClx1OEFGRQpcdTU5REMKXHU4QUJDClx1NTE0NwpcdTUyQTMKXHU4QUEzClx1ODAwMApcdTY2MEYKXHU4RUJBClx1NzZDOApcdTlBMEUKXHU1NUFDClx1NkVBQQpcdTUzRTIKXHU3NkU3Clx1NjJCOQpcdTYwQjYKXHU4QUVFClx1NTIyRQpcdTk5RDUKXHU3RTlDClx1NjA5RgpcdTY0NTgKXHU5MjdBClx1NjRGMgpcdTk4MTcKXHU1RTdCClx1NjdDNApcdTYwRTAKXHU2MTU4Clx1NEY3MwpcdTRFQzcKXHU4MUQ4Clx1N0FBOQpcdTZFQ0MKXHU1MjhEClx1NzdBNwpcdTU4MjEKXHU2RjUxClx1ODUyNQpcdTdGNjkKXHU5NzBEClx1NjQ4OApcdTgwQ0UKXHU4NEJDClx1NkZGMQpcdTUwMDYKXHU2MzQ1Clx1NkU1OApcdTc4MEQKXHU5NzFFClx1OTBCNQpcdTg0MDQKXHU3NjBCClx1NkRFRQpcdTkwNDIKXHU3MThBClx1N0NERQpcdTcwRDgKXHU1QkJGClx1NkE5NApcdTYyMDgKXHU5OUMxClx1NUFDMgpcdTg4RDUKXHU1Rjk5Clx1N0JBRApcdTYzNTAKXHU4MTc4Clx1NjQ5MApcdTY2RUMKXHU4RkE4Clx1NkJCRgpcdTg0RUUKXHU2NTI0Clx1NjUyQQpcdTkxQUMKXHU1QzRGClx1NzVBQgpcdTU0QzAKXHU4NTIxClx1NTgzNQpcdTZDQUIKXHU3NkJBClx1NjZBMgpcdTc1OEEKXHU5NUEzClx1ODQwQQpcdTY1NzIKXHU4RjQ0Clx1OTI2NApcdTc1RDUKXHU1OEU5Clx1NURGNwpcdTk5MTMKXHU3OThEClx1NEUxOApcdTczODQKXHU2RTlDClx1NjZGMApcdTkwOEYKXHU1RjZEClx1NTYxNwpcdTUzN0YKXHU1OUE4Clx1ODI0NwpcdTU0MUUKXHU5N0NCClx1NjAyOApcdTc3RUUKXHU2QjQ3YC5zcGxpdCgiXG4iKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy9wcml2YXRlS2V5VG9BY2NvdW50LmpzCiAgaW5pdF9zZWNwMjU2azEoKTsKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvdG9BY2NvdW50LmpzCiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBmdW5jdGlvbiB0b0FjY291bnQoc291cmNlKSB7CiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gInN0cmluZyIpIHsKICAgICAgaWYgKCFpc0FkZHJlc3Moc291cmNlLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiBzb3VyY2UgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgYWRkcmVzczogc291cmNlLAogICAgICAgIHR5cGU6ICJqc29uLXJwYyIKICAgICAgfTsKICAgIH0KICAgIGlmICghaXNBZGRyZXNzKHNvdXJjZS5hZGRyZXNzLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogc291cmNlLmFkZHJlc3MgfSk7CiAgICByZXR1cm4gewogICAgICBhZGRyZXNzOiBzb3VyY2UuYWRkcmVzcywKICAgICAgbm9uY2VNYW5hZ2VyOiBzb3VyY2Uubm9uY2VNYW5hZ2VyLAogICAgICBzaWduOiBzb3VyY2Uuc2lnbiwKICAgICAgZXhwZXJpbWVudGFsX3NpZ25BdXRob3JpemF0aW9uOiBzb3VyY2UuZXhwZXJpbWVudGFsX3NpZ25BdXRob3JpemF0aW9uLAogICAgICBzaWduTWVzc2FnZTogc291cmNlLnNpZ25NZXNzYWdlLAogICAgICBzaWduVHJhbnNhY3Rpb246IHNvdXJjZS5zaWduVHJhbnNhY3Rpb24sCiAgICAgIHNpZ25UeXBlZERhdGE6IHNvdXJjZS5zaWduVHlwZWREYXRhLAogICAgICBzb3VyY2U6ICJjdXN0b20iLAogICAgICB0eXBlOiAibG9jYWwiCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9zaWduLmpzCiAgaW5pdF9zZWNwMjU2azEoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2lnbih7IGhhc2g6IGhhc2gzLCBwcml2YXRlS2V5LCB0byA9ICJvYmplY3QiIH0pIHsKICAgIGNvbnN0IHsgciwgcywgcmVjb3ZlcnkgfSA9IHNlY3AyNTZrMS5zaWduKGhhc2gzLnNsaWNlKDIpLCBwcml2YXRlS2V5LnNsaWNlKDIpKTsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHsKICAgICAgcjogbnVtYmVyVG9IZXgociwgeyBzaXplOiAzMiB9KSwKICAgICAgczogbnVtYmVyVG9IZXgocywgeyBzaXplOiAzMiB9KSwKICAgICAgdjogcmVjb3ZlcnkgPyAyOG4gOiAyN24sCiAgICAgIHlQYXJpdHk6IHJlY292ZXJ5CiAgICB9OwogICAgcmV0dXJuICgoKSA9PiB7CiAgICAgIGlmICh0byA9PT0gImJ5dGVzIiB8fCB0byA9PT0gImhleCIpCiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVNpZ25hdHVyZSh7IC4uLnNpZ25hdHVyZSwgdG8gfSk7CiAgICAgIHJldHVybiBzaWduYXR1cmU7CiAgICB9KSgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9zaWduQXV0aG9yaXphdGlvbi5qcwogIGFzeW5jIGZ1bmN0aW9uIGV4cGVyaW1lbnRhbF9zaWduQXV0aG9yaXphdGlvbihwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGNvbnRyYWN0QWRkcmVzcywgY2hhaW5JZCwgbm9uY2UsIHByaXZhdGVLZXksIHRvID0gIm9iamVjdCIgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzaWduKHsKICAgICAgaGFzaDogaGFzaEF1dGhvcml6YXRpb24oeyBjb250cmFjdEFkZHJlc3MsIGNoYWluSWQsIG5vbmNlIH0pLAogICAgICBwcml2YXRlS2V5LAogICAgICB0bwogICAgfSk7CiAgICBpZiAodG8gPT09ICJvYmplY3QiKQogICAgICByZXR1cm4gewogICAgICAgIGNvbnRyYWN0QWRkcmVzcywKICAgICAgICBjaGFpbklkLAogICAgICAgIG5vbmNlLAogICAgICAgIC4uLnNpZ25hdHVyZQogICAgICB9OwogICAgcmV0dXJuIHNpZ25hdHVyZTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvdXRpbHMvc2lnbk1lc3NhZ2UuanMKICBhc3luYyBmdW5jdGlvbiBzaWduTWVzc2FnZTIoeyBtZXNzYWdlLCBwcml2YXRlS2V5IH0pIHsKICAgIHJldHVybiBhd2FpdCBzaWduKHsgaGFzaDogaGFzaE1lc3NhZ2UobWVzc2FnZSksIHByaXZhdGVLZXksIHRvOiAiaGV4IiB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvdXRpbHMvc2lnblRyYW5zYWN0aW9uLmpzCiAgaW5pdF9rZWNjYWsyNTYoKTsKICBhc3luYyBmdW5jdGlvbiBzaWduVHJhbnNhY3Rpb24yKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgcHJpdmF0ZUtleSwgdHJhbnNhY3Rpb24sIHNlcmlhbGl6ZXIgPSBzZXJpYWxpemVUcmFuc2FjdGlvbiB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hYmxlVHJhbnNhY3Rpb24gPSAoKCkgPT4gewogICAgICBpZiAodHJhbnNhY3Rpb24udHlwZSA9PT0gImVpcDQ4NDQiKQogICAgICAgIHJldHVybiB7CiAgICAgICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgICAgIHNpZGVjYXJzOiBmYWxzZQogICAgICAgIH07CiAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgIH0pKCk7CiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzaWduKHsKICAgICAgaGFzaDoga2VjY2FrMjU2KHNlcmlhbGl6ZXIoc2lnbmFibGVUcmFuc2FjdGlvbikpLAogICAgICBwcml2YXRlS2V5CiAgICB9KTsKICAgIHJldHVybiBzZXJpYWxpemVyKHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9zaWduVHlwZWREYXRhLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2lnblR5cGVkRGF0YTIocGFyYW1ldGVycykgewogICAgY29uc3QgeyBwcml2YXRlS2V5LCAuLi50eXBlZERhdGEgfSA9IHBhcmFtZXRlcnM7CiAgICByZXR1cm4gYXdhaXQgc2lnbih7CiAgICAgIGhhc2g6IGhhc2hUeXBlZERhdGEodHlwZWREYXRhKSwKICAgICAgcHJpdmF0ZUtleSwKICAgICAgdG86ICJoZXgiCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvcHJpdmF0ZUtleVRvQWNjb3VudC5qcwogIGZ1bmN0aW9uIHByaXZhdGVLZXlUb0FjY291bnQocHJpdmF0ZUtleSwgb3B0aW9ucyA9IHt9KSB7CiAgICBjb25zdCB7IG5vbmNlTWFuYWdlcjogbm9uY2VNYW5hZ2VyMiB9ID0gb3B0aW9uczsKICAgIGNvbnN0IHB1YmxpY0tleSA9IHRvSGV4KHNlY3AyNTZrMS5nZXRQdWJsaWNLZXkocHJpdmF0ZUtleS5zbGljZSgyKSwgZmFsc2UpKTsKICAgIGNvbnN0IGFkZHJlc3MgPSBwdWJsaWNLZXlUb0FkZHJlc3MocHVibGljS2V5KTsKICAgIGNvbnN0IGFjY291bnQgPSB0b0FjY291bnQoewogICAgICBhZGRyZXNzLAogICAgICBub25jZU1hbmFnZXI6IG5vbmNlTWFuYWdlcjIsCiAgICAgIGFzeW5jIHNpZ24oeyBoYXNoOiBoYXNoMyB9KSB7CiAgICAgICAgcmV0dXJuIHNpZ24oeyBoYXNoOiBoYXNoMywgcHJpdmF0ZUtleSwgdG86ICJoZXgiIH0pOwogICAgICB9LAogICAgICBhc3luYyBleHBlcmltZW50YWxfc2lnbkF1dGhvcml6YXRpb24oYXV0aG9yaXphdGlvbikgewogICAgICAgIHJldHVybiBleHBlcmltZW50YWxfc2lnbkF1dGhvcml6YXRpb24oeyAuLi5hdXRob3JpemF0aW9uLCBwcml2YXRlS2V5IH0pOwogICAgICB9LAogICAgICBhc3luYyBzaWduTWVzc2FnZSh7IG1lc3NhZ2UgfSkgewogICAgICAgIHJldHVybiBzaWduTWVzc2FnZTIoeyBtZXNzYWdlLCBwcml2YXRlS2V5IH0pOwogICAgICB9LAogICAgICBhc3luYyBzaWduVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIHsgc2VyaWFsaXplciB9ID0ge30pIHsKICAgICAgICByZXR1cm4gc2lnblRyYW5zYWN0aW9uMih7IHByaXZhdGVLZXksIHRyYW5zYWN0aW9uLCBzZXJpYWxpemVyIH0pOwogICAgICB9LAogICAgICBhc3luYyBzaWduVHlwZWREYXRhKHR5cGVkRGF0YSkgewogICAgICAgIHJldHVybiBzaWduVHlwZWREYXRhMih7IC4uLnR5cGVkRGF0YSwgcHJpdmF0ZUtleSB9KTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gewogICAgICAuLi5hY2NvdW50LAogICAgICBwdWJsaWNLZXksCiAgICAgIHNvdXJjZTogInByaXZhdGVLZXkiCiAgICB9OwogIH0KCiAgLy8gbGlicy9zaGlua2FpLXZpZW0vc3JjL2luZGV4LnRzCiAgd2luZG93LnZpZW0gPSBlc21fZXhwb3J0czsKICB3aW5kb3cuY2hhaW5zID0gY2hhaW5zX2V4cG9ydHM7CiAgdmFyIFZpZW1Qcm92aWRlciA9IGNsYXNzIHsKICAgIGNsaWVudDsKICAgIHNlbGVjdGVkQWRkcmVzczsKICAgIGNvbnN0cnVjdG9yKGNoYWluLCBzaykgewogICAgICBjb25zdCBwcml2YXRlS2V5ID0gc2s7CiAgICAgIGNvbnN0IGFjY291bnQgPSBwcml2YXRlS2V5VG9BY2NvdW50KHByaXZhdGVLZXkpOwogICAgICB0aGlzLmNsaWVudCA9IGNyZWF0ZVdhbGxldENsaWVudCh7CiAgICAgICAgYWNjb3VudCwKICAgICAgICBjaGFpbjogY2hhaW4gfHwgYmFzZVNlcG9saWEsCiAgICAgICAgdHJhbnNwb3J0OiBodHRwKCJodHRwczovL3NlcG9saWEuYmFzZS5vcmciKQogICAgICB9KS5leHRlbmQocHVibGljQWN0aW9ucyk7CiAgICAgIHRoaXMuY2xpZW50LmdldEFkZHJlc3NlcygpLnRoZW4oKGFkZHJlc3NlcykgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJhZGRyZXNzZXMiLCBhZGRyZXNzZXMpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzc2VzWzBdOwogICAgICB9KTsKICAgIH0KICAgIGFzeW5jIGVuYWJsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdEFjY291bnRzKCk7CiAgICB9CiAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICBjb25zb2xlLmxvZygicmVxdWVzdCIsIG1ldGhvZCwgcGFyYW1zKTsKICAgICAgc3dpdGNoIChtZXRob2QpIHsKICAgICAgICBjYXNlICJldGhfcmVxdWVzdEFjY291bnRzIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RBY2NvdW50cygpOwogICAgICAgIGNhc2UgImV0aF9hY2NvdW50cyI6CiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBY2NvdW50cygpOwogICAgICAgIGNhc2UgImV0aF9zZW5kVHJhbnNhY3Rpb24iOgogICAgICAgICAgcmV0dXJuIHRoaXMuc2VuZFRyYW5zYWN0aW9uKHBhcmFtc1swXSk7CiAgICAgICAgY2FzZSAiZXRoX3NpZ24iOgogICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbihwYXJhbXNbMF0sIHBhcmFtc1sxXSk7CiAgICAgICAgY2FzZSAicGVyc29uYWxfc2lnbiI6CiAgICAgICAgICByZXR1cm4gdGhpcy5wZXJzb25hbFNpZ24ocGFyYW1zWzBdLCBwYXJhbXNbMV0pOwogICAgICAgIGNhc2UgImV0aF9zaWduVHlwZWREYXRhIjoKICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25UeXBlZERhdGEocGFyYW1zWzBdLCBwYXJhbXNbMV0pOwogICAgICAgIGNhc2UgImV0aF9jaGFpbklkIjoKICAgICAgICAgIHJldHVybiB0aGlzLmdldENoYWluSWQoKTsKICAgICAgICBjYXNlICJuZXRfdmVyc2lvbiI6CiAgICAgICAgICByZXR1cm4gdGhpcy5nZXROZXR3b3JrSWQoKTsKICAgICAgICBjYXNlICJldGhfYmxvY2tOdW1iZXIiOgogICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QmxvY2tOdW1iZXIoKTsKICAgICAgICBjYXNlICJldGhfZ2V0VHJhbnNhY3Rpb25Db3VudCI6CiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvbkNvdW50KHBhcmFtc1swXSk7CiAgICAgICAgY2FzZSAiZXRoX2dldFRyYW5zYWN0aW9uQnlIYXNoIjoKICAgICAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uKHBhcmFtc1swXSk7CiAgICAgICAgY2FzZSAiZXRoX2dldFRyYW5zYWN0aW9uUmVjZWlwdCI6CiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvblJlY2VpcHQocGFyYW1zWzBdKTsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBtZXRob2Q6ICR7bWV0aG9kfWApOwogICAgICB9CiAgICB9CiAgICBhc3luYyBnZXRUcmFuc2FjdGlvbihoYXNoMykgewogICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IHRoaXMuY2xpZW50LmdldFRyYW5zYWN0aW9uKHsgaGFzaDogaGFzaDMgfSk7CiAgICAgIGNvbnNvbGUubG9nKCJnZXRUcmFuc2FjdGlvbiIsIHRyYW5zYWN0aW9uKTsKICAgICAgaWYgKHRyYW5zYWN0aW9uLnR5cGUgPT09ICJlaXAxNTU5IikgewogICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAiMHgyIjsKICAgICAgfQogICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICB9CiAgICBhc3luYyBnZXRUcmFuc2FjdGlvblJlY2VpcHQoaGFzaDMpIHsKICAgICAgY29uc3QgcmVjZWlwdCA9IGF3YWl0IHRoaXMuY2xpZW50LmdldFRyYW5zYWN0aW9uUmVjZWlwdCh7IGhhc2g6IGhhc2gzIH0pOwogICAgICBjb25zb2xlLmxvZygiZ2V0VHJhbnNhY3Rpb25SZWNlaXB0IiwgcmVjZWlwdCk7CiAgICAgIGlmIChyZWNlaXB0LnR5cGUgPT09ICJlaXAxNTU5IikgewogICAgICAgIHJlY2VpcHQudHlwZSA9ICIweDIiOwogICAgICB9CiAgICAgIGlmIChyZWNlaXB0LnN0YXR1cyA9PT0gInN1Y2Nlc3MiKSB7CiAgICAgICAgcmVjZWlwdC5zdGF0dXMgPSAiMHgxIjsKICAgICAgfQogICAgICByZXR1cm4gcmVjZWlwdDsKICAgIH0KICAgIGFzeW5jIGdldFRyYW5zYWN0aW9uQ291bnQoYWRkcmVzcykgewogICAgICBjb25zdCB0cmFuc2FjdGlvbkNvdW50ID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0VHJhbnNhY3Rpb25Db3VudCh7IGFkZHJlc3MgfSk7CiAgICAgIGNvbnNvbGUubG9nKCJ0cmFuc2FjdGlvbkNvdW50IiwgdHJhbnNhY3Rpb25Db3VudCk7CiAgICAgIHJldHVybiB0cmFuc2FjdGlvbkNvdW50OwogICAgfQogICAgYXN5bmMgZ2V0QmxvY2tOdW1iZXIoKSB7CiAgICAgIGNvbnN0IGJsb2NrTnVtYmVyID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0QmxvY2tOdW1iZXIoKTsKICAgICAgY29uc29sZS5sb2coImJsb2NrTnVtYmVyIiwgYmxvY2tOdW1iZXIpOwogICAgICByZXR1cm4gYmxvY2tOdW1iZXI7CiAgICB9CiAgICBhc3luYyByZXF1ZXN0QWNjb3VudHMoKSB7CiAgICAgIGNvbnN0IFthZGRyZXNzXSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldEFkZHJlc3NlcygpOwogICAgICBjb25zb2xlLmxvZygicmVxdWVzdEFjY291bnRzIiwgYWRkcmVzcyk7CiAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzczsKICAgICAgcmV0dXJuIFthZGRyZXNzXTsKICAgIH0KICAgIGFzeW5jIGdldEFjY291bnRzKCkgewogICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEFkZHJlc3MgPyBbdGhpcy5zZWxlY3RlZEFkZHJlc3NdIDogW107CiAgICB9CiAgICBhc3luYyBzZW5kVHJhbnNhY3Rpb24odHgpIHsKICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQWRkcmVzcykgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gYWNjb3VudHMgYXZhaWxhYmxlIik7CiAgICAgIH0KICAgICAgaWYgKCF0eC50byB8fCAhdHgudmFsdWUgfHwgIXR4LmdhcykgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1aXJlZCB0cmFuc2FjdGlvbiBwYXJhbWV0ZXJzIik7CiAgICAgIH0KICAgICAgY29uc29sZS5sb2coInNlbmRUcmFuc2FjdGlvbiB0eDogIiwgdHgpOwogICAgICBjb25zb2xlLmxvZygiVHJhbnNhY3Rpb24gZ2FzUHJpY2U6ICIsIHR4Lmdhc1ByaWNlKTsKICAgICAgY29uc29sZS5sb2coIlRyYW5zYWN0aW9uIGdhczogIiwgdHguZ2FzKTsKICAgICAgY29uc3QgdmFsdWUgPSBCaWdJbnQodHgudmFsdWUpOwogICAgICBjb25zdCB2YWx1ZUluRXRoID0gTnVtYmVyKHZhbHVlKSAvIDEwICoqIDE4OwogICAgICBjb25zb2xlLmxvZyhgVHJhbnNhY3Rpb24gdmFsdWUgaW4gRVRIOiAke3ZhbHVlSW5FdGh9YCk7CiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uQ29udGVudCA9IHsKICAgICAgICB0bzogdHgudG8sCiAgICAgICAgdmFsdWUsCiAgICAgICAgZGF0YTogdHguZGF0YSwKICAgICAgICBjaGFpbjogdGhpcy5jbGllbnQuY2hhaW4KICAgICAgfTsKICAgICAgY29uc29sZS5sb2coInNlbmRUcmFuc2FjdGlvbiIsIHRyYW5zYWN0aW9uQ29udGVudCk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgcmVxdWVzdCA9IGF3YWl0IHRoaXMuY2xpZW50LnByZXBhcmVUcmFuc2FjdGlvblJlcXVlc3QodHJhbnNhY3Rpb25Db250ZW50KTsKICAgICAgICBjb25zb2xlLmxvZygiUHJlcGFyZWQgdHJhbnNhY3Rpb24gcmVxdWVzdDoiLCByZXF1ZXN0KTsKICAgICAgICBjb25zdCBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLmNsaWVudC5zaWduVHJhbnNhY3Rpb24ocmVxdWVzdCk7CiAgICAgICAgY29uc29sZS5sb2coIlNlcmlhbGl6ZWQgdHJhbnNhY3Rpb246Iiwgc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgICAgICBjb25zdCBoYXNoMyA9IGF3YWl0IHRoaXMuY2xpZW50LnNlbmRSYXdUcmFuc2FjdGlvbih7CiAgICAgICAgICBzZXJpYWxpemVkVHJhbnNhY3Rpb24KICAgICAgICB9KTsKICAgICAgICBjb25zb2xlLmxvZygic2VuZFRyYW5zYWN0aW9uIGhhc2giLCBoYXNoMyk7CiAgICAgICAgcmV0dXJuIGhhc2gzOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoInNlbmRUcmFuc2FjdGlvbiBlcnJvciIsIGVycm9yKTsKICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgfQogICAgfQogICAgYXN5bmMgc2lnbihhZGRyZXNzLCBtZXNzYWdlKSB7CiAgICAgIGlmIChhZGRyZXNzICE9PSB0aGlzLnNlbGVjdGVkQWRkcmVzcykgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiQWRkcmVzcyBtaXNtYXRjaCIpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zaWduTWVzc2FnZSh7IGFjY291bnQ6IGFkZHJlc3MsIG1lc3NhZ2UgfSk7CiAgICB9CiAgICBhc3luYyBwZXJzb25hbFNpZ24obWVzc2FnZSwgYWRkcmVzcykgewogICAgICBpZiAoYWRkcmVzcyAhPT0gdGhpcy5zZWxlY3RlZEFkZHJlc3MpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFkZHJlc3MgbWlzbWF0Y2giKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2lnbk1lc3NhZ2UoeyBhY2NvdW50OiBhZGRyZXNzLCBtZXNzYWdlIH0pOwogICAgfQogICAgYXN5bmMgc2lnblR5cGVkRGF0YShhZGRyZXNzLCB0eXBlZERhdGEpIHsKICAgICAgaWYgKGFkZHJlc3MgIT09IHRoaXMuc2VsZWN0ZWRBZGRyZXNzKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBZGRyZXNzIG1pc21hdGNoIik7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNpZ25UeXBlZERhdGEoewogICAgICAgIGFjY291bnQ6IGFkZHJlc3MsCiAgICAgICAgZG9tYWluOiB0eXBlZERhdGEuZG9tYWluLAogICAgICAgIHR5cGVzOiB0eXBlZERhdGEudHlwZXMsCiAgICAgICAgbWVzc2FnZTogdHlwZWREYXRhLm1lc3NhZ2UsCiAgICAgICAgcHJpbWFyeVR5cGU6IHR5cGVkRGF0YS5wcmltYXJ5VHlwZQogICAgICB9KTsKICAgIH0KICAgIGFzeW5jIGdldENoYWluSWQoKSB7CiAgICAgIGNvbnN0IGNoYWluSWQgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRDaGFpbklkKCk7CiAgICAgIGNvbnNvbGUubG9nKCJnZXRDaGFpbklkIiwgY2hhaW5JZCk7CiAgICAgIHJldHVybiBjaGFpbklkOwogICAgfQogICAgYXN5bmMgZ2V0TmV0d29ya0lkKCkgewogICAgICBjb25zdCBjaGFpbklkID0gYXdhaXQgdGhpcy5nZXRDaGFpbklkKCk7CiAgICAgIHJldHVybiBjaGFpbklkLnRvU3RyaW5nKCk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBhZGRFaXA2OTYzTGlzdGVuZXIoaW5mbywgcHJvdmlkZXIpIHsKICAgIGNvbnN0IGFubm91bmNlRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoCiAgICAgICJlaXA2OTYzOmFubm91bmNlUHJvdmlkZXIiLAogICAgICB7CiAgICAgICAgZGV0YWlsOiBPYmplY3QuZnJlZXplKHsgaW5mbywgcHJvdmlkZXIgfSkKICAgICAgfQogICAgKTsKICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGFubm91bmNlRXZlbnQpOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImVpcDY5NjM6cmVxdWVzdFByb3ZpZGVyIiwgKCkgPT4gewogICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChhbm5vdW5jZUV2ZW50KTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiBpbml0aWFsaXplVmllbVByb3ZpZGVyKGNoYWluLCBwcm92aWRlckluZm8sIHNrKSB7CiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBWaWVtUHJvdmlkZXIoY2hhaW4sIHNrKTsKICAgIHdpbmRvdy5ldGhlcmV1bSA9IHsKICAgICAgcmVxdWVzdDogcHJvdmlkZXIucmVxdWVzdC5iaW5kKHByb3ZpZGVyKSwKICAgICAgZW5hYmxlOiBwcm92aWRlci5lbmFibGUuYmluZChwcm92aWRlciksCiAgICAgIG9uOiAoZXZlbnROYW1lLCBjYWxsYmFjaykgPT4gewogICAgICAgIGNvbnNvbGUubG9nKGBFdmVudCBsaXN0ZW5lciBmb3IgJHtldmVudE5hbWV9IGFkZGVkLmApOwogICAgICB9LAogICAgICByZW1vdmVMaXN0ZW5lcjogKGV2ZW50TmFtZSwgY2FsbGJhY2spID0+IHsKICAgICAgICBjb25zb2xlLmxvZyhgRXZlbnQgbGlzdGVuZXIgZm9yICR7ZXZlbnROYW1lfSByZW1vdmVkLmApOwogICAgICB9LAogICAgICBpc0Nvbm5lY3RlZDogKCkgPT4gewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9LAogICAgICBzZW5kOiAobWV0aG9kLCBwYXJhbXMpID0+IHsKICAgICAgICBjb25zb2xlLndhcm4oInNlbmQgaXMgZGVwcmVjYXRlZC4gVXNlIHJlcXVlc3QgaW5zdGVhZC4iKTsKICAgICAgICByZXR1cm4gcHJvdmlkZXIucmVxdWVzdCh7IG1ldGhvZCwgcGFyYW1zIH0pOwogICAgICB9LAogICAgICBzZW5kQXN5bmM6IChwYXlsb2FkLCBjYWxsYmFjaykgPT4gewogICAgICAgIGNvbnNvbGUud2Fybigic2VuZEFzeW5jIGlzIGRlcHJlY2F0ZWQuIFVzZSByZXF1ZXN0IGluc3RlYWQuIik7CiAgICAgICAgcHJvdmlkZXIucmVxdWVzdCh7IG1ldGhvZDogcGF5bG9hZC5tZXRob2QsIHBhcmFtczogcGF5bG9hZC5wYXJhbXMgfSkudGhlbigocmVzdWx0KSA9PiBjYWxsYmFjayhudWxsLCB7IHJlc3VsdCB9KSkuY2F0Y2goKGVycm9yKSA9PiBjYWxsYmFjayhlcnJvciwgbnVsbCkpOwogICAgICB9LAogICAgICBpc01ldGFNYXNrOiB0cnVlLAogICAgICAvLyBTZXQgdG8gdHJ1ZSBpZiBtaW1pY2tpbmcgTWV0YU1hc2sKICAgICAgc2VsZWN0ZWRBZGRyZXNzOiBwcm92aWRlci5zZWxlY3RlZEFkZHJlc3MsCiAgICAgIGNoYWluSWQ6IGNoYWluPy5pZCB8fCAiMHgxIgogICAgICAvLyBEZWZhdWx0IHRvIG1haW5uZXQgaWYgY2hhaW4gaXMgbm90IHByb3ZpZGVkCiAgICB9OwogICAgYWRkRWlwNjk2M0xpc3RlbmVyKHByb3ZpZGVySW5mbywgcHJvdmlkZXIpOwogICAgY29uc29sZS5sb2coIlZpZW0gcHJvdmlkZXIgaW5pdGlhbGl6ZWQiKTsKICB9CiAgdmFyIHZpZW1Qcm92aWRlckluZm8gPSB7CiAgICB1dWlkOiAiZDY5YmM0YzQtZTQzYS00ZDBhLTgzZDctYjZlN2I3NTA0YmViIiwKICAgIG5hbWU6ICJTaGlua2FpIFZpZW0gUHJvdmlkZXIiLAogICAgaWNvbjogImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU16WTNJaUJvWldsbmFIUTlJak0yTnlJZ2RtbGxkMEp2ZUQwaU1DQXdJRE0yTnlBek5qY2lJR1pwYkd3OUltNXZibVVpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUkrQ2p4amFYSmpiR1VnWTNnOUlqRTRNeTQxSWlCamVUMGlNVGd6TGpVaUlISTlJakU0TXk0MUlpQm1hV3hzUFNJalJrVTJNVFl5SWk4K0NqeHdZWFJvSUdROUlrMHlOekl1TWprMUlESTNOQzQyTmpoRE1qY3dMamMxT0NBeU5qZ3VPVGMxSURJMk5pNDJNVGtnTWpZMkxqSXhOU0F5TmpBdU9EUTBJREkyTmk0M056bERNalE1TGpZMk5DQXlOamN1T0RZeklESTBOUzQ1TlRJZ01qWTBMakkzT1NBeU5EQXVOalEySURJMU5pNDBNRFJETWpVMExqWXlPQ0F5TlRrdU16WTNJREkyTXk0Mk5EWWdNalUxTGpjeU5TQXlOall1TkRZeklESTFOQzR4TURkRE1qY3dMakE1SURJMU1pNHdNVElnTWpjekxqYzJJREkwT1M0ek1qUWdNamN5TGpNd09TQXlORFF1TlRnMVF6STNNQzQ0T0RZZ01qTTVMamswTnlBeU5qWXVOakU1SURJek9TNHdNaklnTWpZeUxqSXpPQ0F5TXprdU9EWkRNalUyTGpBeU1pQXlOREV1TURRMUlESTFNQzR3TmpJZ01qUXhMamN6T0NBeU5EVXVNakkySURJek5TNDJPRFJETWpRMkxqSTFJREl6TkM0M05Ua2dNalEzTGpJM05DQXlNek11T0RBMklESTBPQzR6TWpjZ01qTXlMamc1TlVNeU5UQXVPVEF5SURJek1DNDJPRFVnTWpVeUxqZzVNeUF5TWpndU1EZzBJREkxTVM0MU9EUWdNakkwTGpVM00wTXlOVEF1TXpNeklESXlNUzR5TWlBeU5EY3VNVFl4SURJeE9TNHlPVGtnTWpRekxqa3pNaUF5TVRrdU9Ea3hRekkwTVM0eklESXlNQzR6T0RJZ01qTTJMakF5TXlBeU1qSXVNRE1nTWpNMExqUXhOaUF5TVRrdU16UXlUREl6TkM0ME9EY2dNakU1TGpNeE0wTXlNek11T0RjMUlESXhPUzR4TmprZ01qTXlMamt6TnlBeU1UWXVOalUwSURJek1pNDNNemNnTWpFMExqZ3hPVU15TXpFdU56azVJREl3TlM0NE5EWWdNak0xTGpZNE1pQXhPVGN1TWpNMUlESTBNQzQ1TVRZZ01Ua3dMakE0TWtNeU5EY3VORFExSURFNE1TNHhPVFlnTWpVeExqa3lOaUF4TnpFdU16azVJREkxTXk0NU1UY2dNVFl3TGpVek0wTXlOVGN1TURNeUlERTBNeTQwT0RNZ01qVXpMamN6TWlBeE1qY3VOakU0SURJME5DNDFNVFVnTVRFekxqQXpPVU15TXpNdU5UYzNJRGsxTGpjeU9ETWdNakU0TGpFMU9DQTROQzR6TWpjNElERTVOeTQ0TmlBNE1DNHhNemMxUXpFNU15NHdPVFVnTnprdU1UVTFJREU0T0M0ME5EUWdOemd1TmpNME9DQXhPRE11T1RNMUlEYzRMalUwT0RGRE1UYzVMalF4TVNBM09DNDJNelE0SURFM05DNDNOelFnTnprdU1UVTFJREUzTUM0d01Ea2dPREF1TVRNM05VTXhORGt1TnpJMklEZzBMak15TnpnZ01UTTBMakk1TXlBNU5TNDNNamd6SURFeU15NHpOVFFnTVRFekxqQXpPVU14TVRRdU1UVXhJREV5Tnk0Mk1UZ2dNVEV3TGpnMU1TQXhORE11TkRneklERXhNeTQ1TlRJZ01UWXdMalV6TTBNeE1UVXVPVEk1SURFM01TNDBNVFFnTVRJd0xqUXlOQ0F4T0RFdU1UazJJREV5Tmk0NU5UTWdNVGt3TGpBNE1rTXhNekl1TWpBeUlERTVOeTR5TXpVZ01UTTJMakE0TlNBeU1EVXVPRE15SURFek5TNHhNeklnTWpFMExqZ3hPVU14TXpRdU9UTXpJREl4Tmk0Mk5UUWdNVE16TGprNU5DQXlNVGt1TVRZNUlERXpNeTR6T0RJZ01qRTVMak14TTB3eE16TXVORFV6SURJeE9TNHpOREpETVRNeExqZzBOaUF5TWpJdU1ERTFJREV5Tmk0MU9ETWdNakl3TGpNNE1pQXhNak11T1RNNElESXhPUzQ0T1RGRE1USXdMamN5TXlBeU1Ua3VNams1SURFeE55NDFNemNnTWpJeExqSXlJREV4Tmk0eU9EVWdNakkwTGpVM00wTXhNVFF1T1RjMklESXlPQzR3T0RRZ01URTJMamsxTkNBeU16QXVOamcxSURFeE9TNDFORElnTWpNeUxqZzVOVU14TWpBdU5UazFJREl6TXk0NE1EWWdNVEl4TGpZeE9TQXlNelF1TnpVNUlERXlNaTQyTkRNZ01qTTFMalk0TkVNeE1UY3VPREEzSURJME1TNDNNemdnTVRFeExqZ3pNeUF5TkRFdU1EUTFJREV3TlM0Mk16RWdNak01TGpnMlF6RXdNUzR5TlNBeU16a3VNREl5SURrMkxqazRNamtnTWpNNUxqazBOeUE1TlM0MU5qQTFJREkwTkM0MU9EVkRPVFF1TVRBNU55QXlORGt1TXpJMElEazNMamMzT1RVZ01qVXlMakF4TWlBeE1ERXVOREEzSURJMU5DNHhNRGRETVRBMExqSXdPU0F5TlRVdU56STFJREV4TXk0eU5ERWdNalU1TGpNMU1pQXhNamN1TWpJeklESTFOaTQwTURSRE1USXhMamt4T0NBeU5qUXVNamM1SURFeE9DNHlNRFVnTWpZM0xqZzJNeUF4TURjdU1ESTFJREkyTmk0M056bERNVEF4TGpJMUlESTJOaTR5TVRVZ09UY3VNRGsyTnlBeU5qZ3VPVGMxSURrMUxqVTNORGNnTWpjMExqWTJPRU01TkM0d09ERXlJREk0TUM0eU16RWdPVGN1TURJMU5pQXlPRFF1TWpFNUlERXdNUzQyT1RFZ01qZzJMamczT0VNeE1EUXVOelE1SURJNE9DNDJNVElnTVRBNExqRTJNeUF5T0RrdU1qa3hJREV4TVM0M056WWdNamc1TGpNME9VTXhNekV1TlRZeUlESTRPUzQyTWpNZ01UUTNMamc1TVNBeU9ERXVORFU1SURFMk1pNDFPVGtnTWpZNUxqRTNPRU14TnpBdU5qa3lJREkyTWk0ME1UVWdNVGMzTGpNME9TQXlOVGd1T1RreElERTRNeTQ1TkRrZ01qVTRMamt3TkVNeE9UQXVOVFE1SURJMU9DNDVPVEVnTVRrM0xqRTVNU0F5TmpJdU5ERTFJREl3TlM0eU9Ua2dNalk1TGpFM09FTXlNakF1TURBM0lESTRNUzQwTlRrZ01qTTJMak16TmlBeU9Ea3VOakl6SURJMU5pNHhNaklnTWpnNUxqTTBPVU15TlRrdU56TTFJREk0T1M0ek1EVWdNall6TGpFME9DQXlPRGd1TmpFeUlESTJOaTR5TURjZ01qZzJMamczT0VNeU56QXVPRGcySURJNE5DNHlNVGtnTWpjekxqZ3hOeUF5T0RBdU1qTXhJREkzTWk0ek1qTWdNamMwTGpZMk9FZ3lOekl1TWprMVdrMHhOVFl1TmpJMElESXdOeTR5TmpKRE1UVXdMalV3T0NBeU1EY3VNalE0SURFME5TNDBOVGtnTWpBeUxqRXpNeUF4TkRVdU5EUTBJREU1TlM0NU5qTkRNVFExTGpRME5DQXhPRGt1TmpjNElERTFNQzQxTlRFZ01UZzBMalV6TkNBeE5UWXVPRFV5SURFNE5DNDBOelpETVRZeUxqZzBJREU0TkM0ME1UZ2dNVFk0TGpFM05DQXhPVEF1TURrM0lERTJPQzR4TVRjZ01UazJMalEyT1VNeE5qZ3VNRFl4SURJd01pNDNPRE1nTVRZekxqSTFNeUF5TURjdU1qa3hJREUxTmk0Mk1qUWdNakEzTGpJMk1scE5NakV4TGpJek1TQXlNRGN1TWpZeVF6SXdOQzQxT0RnZ01qQTNMakk1TVNBeE9Ua3VOemsxSURJd01pNDNOamtnTVRrNUxqY3pPQ0F4T1RZdU5EWTVRekU1T1M0Mk9ERWdNVGt3TGpBNU55QXlNRFV1TURJNUlERTROQzQwTVRnZ01qRXhMakF3TXlBeE9EUXVORGMyUXpJeE55NHpNRFFnTVRnMExqVTBPQ0F5TWpJdU5ERXhJREU0T1M0Mk9USWdNakl5TGpReE1TQXhPVFV1T1RZelF6SXlNaTQwTVRFZ01qQXlMakV6TXlBeU1UY3VNelEzSURJd055NHlORGdnTWpFeExqSXpNU0F5TURjdU1qWXlXaUlnWm1sc2JEMGlkMmhwZEdVaUx6NEtQQzl6ZG1jK0NnPT0iLAogICAgLy8gQmFzZTY0IGVuY29kZWQgaWNvbgogICAgcmRuczogImNvbS5zaGlua2FpLmRlc2t0b3AiCiAgfTsKICB3aW5kb3cuaW5pdFZpZW1Qcm92aWRlciA9IGZ1bmN0aW9uKHNrKSB7CiAgICBpbml0aWFsaXplVmllbVByb3ZpZGVyKGJhc2VTZXBvbGlhLCB2aWVtUHJvdmlkZXJJbmZvLCBzayk7CiAgfTsKfSkoKTsKLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjoKCkBub2JsZS9oYXNoZXMvZXNtL3V0aWxzLmpzOgogICgqISBub2JsZS1oYXNoZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKikKCkBub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L3V0aWxzLmpzOgogICgqISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKikKCkBub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L21vZHVsYXIuanM6CiAgKCohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqKQoKQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvY3VydmUuanM6CiAgKCohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqKQoKQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3Qvd2VpZXJzdHJhc3MuanM6CiAgKCohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqKQoKQG5vYmxlL2N1cnZlcy9lc20vX3Nob3J0d191dGlscy5qczoKICAoKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICopCgpAbm9ibGUvY3VydmVzL2VzbS9zZWNwMjU2azEuanM6CiAgKCohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqKQoqLwo="; diff --git a/apps/shinkai-tool-aave-dashboard/src/chrome-paths.d.ts b/apps/shinkai-tool-aave-dashboard/src/chrome-paths.d.ts new file mode 100644 index 0000000..9b369ed --- /dev/null +++ b/apps/shinkai-tool-aave-dashboard/src/chrome-paths.d.ts @@ -0,0 +1,3 @@ +declare module 'chrome-paths' { + const chrome: string; +} diff --git a/apps/shinkai-tool-aave-dashboard/src/index.test.ts b/apps/shinkai-tool-aave-dashboard/src/index.test.ts new file mode 100644 index 0000000..f0cbe83 --- /dev/null +++ b/apps/shinkai-tool-aave-dashboard/src/index.test.ts @@ -0,0 +1,31 @@ +import { Tool } from '../src/index'; + +const timeout = 60 * 60 * 1000; + +test('exists definition', async () => { + const tool = new Tool({}); + const definition = tool.getDefinition(); + expect(definition).toBeInstanceOf(Object); +}); + +test( + 'run definition', + async () => { + // const secretKey = 'b869541ac1dcd6ef40a9adb731908e67544314744db071b9fb45056a813048cd'; + const secretKey = '665e8f55fdaa6a0f109d263a1a0c83b4c0702862e3cda1d2339c950fe6fb0631'; + const tool = new Tool({ + chromePath: process.env?.CHROME_PATH, + }); + const run_result = await tool.run({ + secretKey: `0x${secretKey}`, + }); + + console.log('suppliedAssets', run_result.data.suppliedAssets); + console.log('borrowedAssets', run_result.data.borrowedAssets); + console.log('toSupplyAssets', run_result.data.toSupplyAssets); + console.log('toBorrowAssets', run_result.data.toBorrowAssets); + + expect(run_result).toBeInstanceOf(Object); + }, + timeout, +); diff --git a/apps/shinkai-tool-aave-dashboard/src/index.ts b/apps/shinkai-tool-aave-dashboard/src/index.ts new file mode 100644 index 0000000..67d4356 --- /dev/null +++ b/apps/shinkai-tool-aave-dashboard/src/index.ts @@ -0,0 +1,307 @@ +import { BaseTool, RunResult } from '@shinkai_protocol/shinkai-tools-builder'; +import { ToolDefinition } from 'libs/shinkai-tools-builder/src/tool-definition'; +import * as path from 'path'; +import * as playwright from 'playwright'; +import * as chromePaths from 'chrome-paths'; + +import { viemScriptContent } from './bundled-resources/shinkai-viem'; + +const xxlTimeout = 50 * 60 * 1000; +const sTimeout = 5 * 1000; +const xsTimeout = 2 * 1000; + +type SuppliedAsset = { + name: string; + balance: number; + balanceInUSD: number; +}; + +type BorrowedAsset = { + name: string; + debt: number; +}; + +type ToSupplyAsset = { + name: string; + balance: number; +}; + +type ToBorrowAsset = { + name: string; + available: number; +}; + +type Config = { + chromePath?: string; +}; + +type Params = { + secretKey: string; +}; + +type Result = { + suppliedAssets: SuppliedAsset[]; + borrowedAssets: BorrowedAsset[]; + toSupplyAssets: ToSupplyAsset[]; + toBorrowAssets: ToBorrowAsset[]; +}; + +export class Tool extends BaseTool { + definition: ToolDefinition = { + id: 'shinkai-tool-aave-dashboard', + name: 'Shinkai: aave-dashboard', + description: 'New aave-dashboard tool from template', + author: 'Shinkai', + keywords: ['aave-dashboard', 'shinkai'], + configurations: { + type: 'object', + properties: { + chromePath: { + type: 'string', + nullable: true, + }, + }, + required: [], + }, + parameters: { + type: 'object', + properties: { + secretKey: { type: 'string' }, + }, + required: ['secretKey'], + }, + result: { + type: 'object', + properties: { + suppliedAssets: { + type: 'array', + items: { + type: 'object', + properties: { + name: { type: 'string' }, + balance: { type: 'number' }, + balanceInUSD: { type: 'number' }, + }, + required: ['name', 'balance', 'balanceInUSD'] + } + }, + borrowedAssets: { + type: 'array', + items: { + type: 'object', + properties: { + name: { type: 'string' }, + debt: { type: 'number' }, + }, + required: ['name', 'debt'] + } + }, + toSupplyAssets: { + type: 'array', + items: { + type: 'object', + properties: { + name: { type: 'string' }, + balance: { type: 'number' }, + }, + required: ['name', 'balance'] + } + }, + toBorrowAssets: { + type: 'array', + items: { + type: 'object', + properties: { + name: { type: 'string' }, + available: { type: 'number' }, + }, + required: ['name', 'available'] + } + }, + }, + required: ['suppliedAssets', 'borrowedAssets', 'toSupplyAssets', 'toBorrowAssets'], + }, + }; + + private async hasSupplies(page: playwright.Page, timeout: number = xsTimeout): Promise { + var s = 'main > div.MuiBox-root > div > div.MuiBox-root > div > div.MuiBox-root > div.MuiPaper-root.MuiPaper-elevation.MuiPaper-rounded.MuiPaper-elevation1 > div.MuiBox-root > div > p' + const nothingToBorrow = await page.locator(s, { hasText: 'Nothing supplied yet' }) + + let isThereSomethingToBorrow = true; + + await nothingToBorrow.waitFor({ state: 'visible', timeout: timeout }).then(() => { + isThereSomethingToBorrow = false; + }).catch((error) => { + isThereSomethingToBorrow = error instanceof playwright.errors.TimeoutError; + }); + + return isThereSomethingToBorrow; + } + + private async getYourSupplies(page: playwright.Page): Promise { + const hasSupplies = await this.hasSupplies(page, sTimeout); + if (!hasSupplies) { + return []; + } + + await page.waitForFunction(() => { + return (Array.from(document.querySelectorAll("div[data-cy^=dashboardSuppliedListItem]"))).length > 0; + }, { timeout: sTimeout }); + + return await page.evaluate(() => { + const rows = Array.from(document.querySelectorAll("div[data-cy^=dashboardSuppliedListItem]")) + console.log(10, rows) + + return rows.map((row) => { + const name = row.querySelector('div[class*="MuiBox-root"]')?.textContent || ''; + const balance = row.querySelector('div[class*="MuiBox-root"] > p:nth-child(1)')?.textContent || '0'; + let balanceInUSD = row.querySelector('div[class*="MuiBox-root"] > p:nth-child(2)')?.textContent || '0'; + + balanceInUSD = balanceInUSD.replace('$', '').trim(); + + return { + name, + balance: Number(balance), + balanceInUSD: Number(balanceInUSD), + }; + }) + }); + } + + private async hasBorrows(page: playwright.Page, timeout: number = xsTimeout): Promise { + var s = 'main > div.MuiBox-root > div > div.MuiBox-root > div > div.MuiBox-root > div.MuiPaper-root.MuiPaper-elevation.MuiPaper-rounded.MuiPaper-elevation1 > div.MuiBox-root > div > p' + const nothingToBorrow = await page.locator(s, { hasText: 'Nothing borrowed yet' }) + + let isThereSomethingToBorrow = true; + + await nothingToBorrow.waitFor({ state: 'visible', timeout: timeout }).then(() => { + isThereSomethingToBorrow = false; + }).catch((error) => { + isThereSomethingToBorrow = error instanceof playwright.errors.TimeoutError; + }); + + return isThereSomethingToBorrow; + } + + private async getYourBorrows(page: playwright.Page): Promise { + let isThereSomethingToBorrow = await this.hasBorrows(page, xsTimeout); + console.log('isThereSomethingToBorrow', isThereSomethingToBorrow) + + if (!isThereSomethingToBorrow) { + return []; + } + // dashboardBorrowedListItem_USDC_Variable + + await page.waitForFunction(() => { + return (Array.from(document.querySelectorAll("div[data-cy^=dashboardBorrowedListItem]"))).length > 0; + }, { timeout: sTimeout }); + + return await page.evaluate(() => { + const rows = Array.from(document.querySelectorAll("div[data-cy^=dashboardBorrowedListItem]")) + + return rows.map((row) => { + const name = row.querySelector('div[class*="MuiBox-root"]')?.textContent || ''; + const debt = row.querySelector('div[class*="MuiBox-root"] > p:nth-child(1)')?.textContent || '0'; + + return { + name, + debt: Number(debt), + }; + }) + }); + } + + private async getToSupplyAssets(page: playwright.Page): Promise { + await page.waitForFunction(() => { + return (Array.from(document.querySelectorAll("div[data-cy^=dashboardSupplyListItem]"))).length > 0; + }, { timeout: sTimeout }); + + return await page.evaluate(() => { + const rows = Array.from(document.querySelectorAll("div[data-cy^=dashboardSupplyListItem]")) + console.log(10, rows) + + return rows.map((row) => { + const name = row.querySelector('div[class*="MuiBox-root"]')?.textContent || ''; + const balance = row.querySelector('div[class*="MuiBox-root"] > p:nth-child(1)')?.textContent || '0'; + + return { + name, + balance: Number(balance), + }; + }) + }); + } + + private async getToBorrowAssets(page: playwright.Page): Promise { + await page.waitForFunction(() => { + return (Array.from(document.querySelectorAll("div[data-cy^=dashboardBorrowListItem]"))).length > 0; + }, { timeout: sTimeout }); + + return await page.evaluate(() => { + const rows = Array.from(document.querySelectorAll("div[data-cy^=dashboardBorrowListItem]")) + console.log(10, rows) + + return rows.map((row) => { + const name = row.querySelector('div[class*="MuiBox-root"]')?.textContent || ''; + const available = row.querySelector('div[class*="MuiBox-root"] > p:nth-child(1)')?.textContent || '0'; + + return { + name, + available: Number(available), + }; + }) + }); + } + + async run(params: Params): Promise> { + const browser = await playwright['chromium'].launch({ + executablePath: this.config?.chromePath || chromePaths.chrome, + headless: false, + }); + + const context = await browser.newContext({ + viewport: { width: 1280, height: 800 }, // Set viewport size + }); + + const page = await context.newPage(); + await page.goto('https://staging.aave.com/?marketName=proto_base_sepolia_v3'); + + await page.evaluate((scriptContent) => { + const script = document.createElement('script'); + script.textContent = scriptContent; + document.head.appendChild(script); + console.log('Viem script injected'); + }, Buffer.from(viemScriptContent, 'base64').toString('utf-8')); + + await page.evaluate((secretKey) => { + (window as any).initViemProvider(secretKey); + }, params.secretKey); + + // Click the "Opt-out" button + // Wait for the "Opt-out" button to appear and click it + console.log('10 Waiting for selector'); + await page.waitForSelector('#rcc-decline-button > p', { timeout: xxlTimeout }); + await page.click('#rcc-decline-button > p'); + + // Click the wallet button + console.log('20 Waiting for selector'); + await page.waitForSelector('#wallet-button', { timeout: xxlTimeout }); + await page.click('#wallet-button'); + + // Click the "Browser wallet" button + const browserWalletButton = page.locator( + 'body > div:nth-child(20) > div[class*="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation1"] > div[class*="MuiBox-root"] > button:nth-child(2)', + ); + + await browserWalletButton.waitFor({ state: 'visible' }); + console.log('Browser wallet button is visible'); + await browserWalletButton.click(); + + const suppliedAssets = await this.getYourSupplies(page); + const borrowedAssets = await this.getYourBorrows(page); + const toSupplyAssets = await this.getToSupplyAssets(page); + const toBorrowAssets = await this.getToBorrowAssets(page); + + return Promise.resolve({ data: { suppliedAssets, borrowedAssets, toSupplyAssets, toBorrowAssets } }); + } +} diff --git a/apps/shinkai-tool-aave-dashboard/tsconfig.app.json b/apps/shinkai-tool-aave-dashboard/tsconfig.app.json new file mode 100644 index 0000000..b139ef3 --- /dev/null +++ b/apps/shinkai-tool-aave-dashboard/tsconfig.app.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["./src/**/*.ts"] +} diff --git a/apps/shinkai-tool-aave-dashboard/tsconfig.json b/apps/shinkai-tool-aave-dashboard/tsconfig.json new file mode 100644 index 0000000..69cc7b0 --- /dev/null +++ b/apps/shinkai-tool-aave-dashboard/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + + }, + "include": [ + "./src/**/*.ts", + "webpack.config.ts" + ], +} diff --git a/apps/shinkai-tool-aave-dashboard/tsconfig.spec.json b/apps/shinkai-tool-aave-dashboard/tsconfig.spec.json new file mode 100644 index 0000000..6cfffe7 --- /dev/null +++ b/apps/shinkai-tool-aave-dashboard/tsconfig.spec.json @@ -0,0 +1,15 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"], + "lib": ["dom"] + }, + "include": [ + "jest.config.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/apps/shinkai-tool-aave-loan-requester/generate-shinkai-viem-export.ts b/apps/shinkai-tool-aave-loan-requester/generate-shinkai-viem-export.ts index 8926cb4..5f2e3f2 100644 --- a/apps/shinkai-tool-aave-loan-requester/generate-shinkai-viem-export.ts +++ b/apps/shinkai-tool-aave-loan-requester/generate-shinkai-viem-export.ts @@ -15,4 +15,9 @@ const outputContent = `// autogenerated export const viemScriptContent = "${Buffer.from(shinkaiViemContent).toString('base64')}"; `; +const outputDir = path.dirname(outputPath); +if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); +} + fs.writeFileSync(outputPath, outputContent); diff --git a/apps/shinkai-tool-aave-loan-requester/src/bundled-resources/shinkai-viem.ts b/apps/shinkai-tool-aave-loan-requester/src/bundled-resources/shinkai-viem.ts index 5e97214..69c66d0 100644 --- a/apps/shinkai-tool-aave-loan-requester/src/bundled-resources/shinkai-viem.ts +++ b/apps/shinkai-tool-aave-loan-requester/src/bundled-resources/shinkai-viem.ts @@ -1,2 +1,2 @@ // autogenerated -export const viemScriptContent = "InVzZSBzdHJpY3QiOwooKCkgPT4gewogIHZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7CiAgdmFyIF9fZXNtID0gKGZuLCByZXMpID0+IGZ1bmN0aW9uIF9faW5pdCgpIHsKICAgIHJldHVybiBmbiAmJiAocmVzID0gKDAsIGZuW19fZ2V0T3duUHJvcE5hbWVzKGZuKVswXV0pKGZuID0gMCkpLCByZXM7CiAgfTsKICB2YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHsKICAgIGZvciAodmFyIG5hbWUgaW4gYWxsKQogICAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pOwogIH07CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL3ZlcnNpb24uanMKICB2YXIgdmVyc2lvbjsKICB2YXIgaW5pdF92ZXJzaW9uID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL3ZlcnNpb24uanMiKCkgewogICAgICB2ZXJzaW9uID0gIjEuMC41IjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vZXJyb3JzLmpzCiAgdmFyIEJhc2VFcnJvcjsKICB2YXIgaW5pdF9lcnJvcnMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vZXJyb3JzLmpzIigpIHsKICAgICAgaW5pdF92ZXJzaW9uKCk7CiAgICAgIEJhc2VFcnJvciA9IGNsYXNzIF9CYXNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3Ioc2hvcnRNZXNzYWdlLCBhcmdzID0ge30pIHsKICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSBhcmdzLmNhdXNlIGluc3RhbmNlb2YgX0Jhc2VFcnJvciA/IGFyZ3MuY2F1c2UuZGV0YWlscyA6IGFyZ3MuY2F1c2U/Lm1lc3NhZ2UgPyBhcmdzLmNhdXNlLm1lc3NhZ2UgOiBhcmdzLmRldGFpbHM7CiAgICAgICAgICBjb25zdCBkb2NzUGF0aDkgPSBhcmdzLmNhdXNlIGluc3RhbmNlb2YgX0Jhc2VFcnJvciA/IGFyZ3MuY2F1c2UuZG9jc1BhdGggfHwgYXJncy5kb2NzUGF0aCA6IGFyZ3MuZG9jc1BhdGg7CiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gWwogICAgICAgICAgICBzaG9ydE1lc3NhZ2UgfHwgIkFuIGVycm9yIG9jY3VycmVkLiIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICAuLi5hcmdzLm1ldGFNZXNzYWdlcyA/IFsuLi5hcmdzLm1ldGFNZXNzYWdlcywgIiJdIDogW10sCiAgICAgICAgICAgIC4uLmRvY3NQYXRoOSA/IFtgRG9jczogaHR0cHM6Ly9hYml0eXBlLmRldiR7ZG9jc1BhdGg5fWBdIDogW10sCiAgICAgICAgICAgIC4uLmRldGFpbHMgPyBbYERldGFpbHM6ICR7ZGV0YWlsc31gXSA6IFtdLAogICAgICAgICAgICBgVmVyc2lvbjogYWJpdHlwZUAke3ZlcnNpb259YAogICAgICAgICAgXS5qb2luKCJcbiIpOwogICAgICAgICAgc3VwZXIobWVzc2FnZSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRldGFpbHMiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkb2NzUGF0aCIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm1ldGFNZXNzYWdlcyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNob3J0TWVzc2FnZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiQWJpVHlwZUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoYXJncy5jYXVzZSkKICAgICAgICAgICAgdGhpcy5jYXVzZSA9IGFyZ3MuY2F1c2U7CiAgICAgICAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzOwogICAgICAgICAgdGhpcy5kb2NzUGF0aCA9IGRvY3NQYXRoOTsKICAgICAgICAgIHRoaXMubWV0YU1lc3NhZ2VzID0gYXJncy5tZXRhTWVzc2FnZXM7CiAgICAgICAgICB0aGlzLnNob3J0TWVzc2FnZSA9IHNob3J0TWVzc2FnZTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL3JlZ2V4LmpzCiAgZnVuY3Rpb24gZXhlY1R5cGVkKHJlZ2V4LCBzdHJpbmcpIHsKICAgIGNvbnN0IG1hdGNoID0gcmVnZXguZXhlYyhzdHJpbmcpOwogICAgcmV0dXJuIG1hdGNoPy5ncm91cHM7CiAgfQogIHZhciBieXRlc1JlZ2V4LCBpbnRlZ2VyUmVnZXgsIGlzVHVwbGVSZWdleDsKICB2YXIgaW5pdF9yZWdleCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9yZWdleC5qcyIoKSB7CiAgICAgIGJ5dGVzUmVnZXggPSAvXmJ5dGVzKFsxLTldfDFbMC05XXwyWzAtOV18M1swLTJdKT8kLzsKICAgICAgaW50ZWdlclJlZ2V4ID0gL151P2ludCg4fDE2fDI0fDMyfDQwfDQ4fDU2fDY0fDcyfDgwfDg4fDk2fDEwNHwxMTJ8MTIwfDEyOHwxMzZ8MTQ0fDE1MnwxNjB8MTY4fDE3NnwxODR8MTkyfDIwMHwyMDh8MjE2fDIyNHwyMzJ8MjQwfDI0OHwyNTYpPyQvOwogICAgICBpc1R1cGxlUmVnZXggPSAvXlwoLis/XCkuKj8kLzsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZm9ybWF0QWJpUGFyYW1ldGVyLmpzCiAgZnVuY3Rpb24gZm9ybWF0QWJpUGFyYW1ldGVyKGFiaVBhcmFtZXRlcikgewogICAgbGV0IHR5cGUgPSBhYmlQYXJhbWV0ZXIudHlwZTsKICAgIGlmICh0dXBsZVJlZ2V4LnRlc3QoYWJpUGFyYW1ldGVyLnR5cGUpICYmICJjb21wb25lbnRzIiBpbiBhYmlQYXJhbWV0ZXIpIHsKICAgICAgdHlwZSA9ICIoIjsKICAgICAgY29uc3QgbGVuZ3RoID0gYWJpUGFyYW1ldGVyLmNvbXBvbmVudHMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gYWJpUGFyYW1ldGVyLmNvbXBvbmVudHNbaV07CiAgICAgICAgdHlwZSArPSBmb3JtYXRBYmlQYXJhbWV0ZXIoY29tcG9uZW50KTsKICAgICAgICBpZiAoaSA8IGxlbmd0aCAtIDEpCiAgICAgICAgICB0eXBlICs9ICIsICI7CiAgICAgIH0KICAgICAgY29uc3QgcmVzdWx0ID0gZXhlY1R5cGVkKHR1cGxlUmVnZXgsIGFiaVBhcmFtZXRlci50eXBlKTsKICAgICAgdHlwZSArPSBgKSR7cmVzdWx0Py5hcnJheSA/PyAiIn1gOwogICAgICByZXR1cm4gZm9ybWF0QWJpUGFyYW1ldGVyKHsKICAgICAgICAuLi5hYmlQYXJhbWV0ZXIsCiAgICAgICAgdHlwZQogICAgICB9KTsKICAgIH0KICAgIGlmICgiaW5kZXhlZCIgaW4gYWJpUGFyYW1ldGVyICYmIGFiaVBhcmFtZXRlci5pbmRleGVkKQogICAgICB0eXBlID0gYCR7dHlwZX0gaW5kZXhlZGA7CiAgICBpZiAoYWJpUGFyYW1ldGVyLm5hbWUpCiAgICAgIHJldHVybiBgJHt0eXBlfSAke2FiaVBhcmFtZXRlci5uYW1lfWA7CiAgICByZXR1cm4gdHlwZTsKICB9CiAgdmFyIHR1cGxlUmVnZXg7CiAgdmFyIGluaXRfZm9ybWF0QWJpUGFyYW1ldGVyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Zvcm1hdEFiaVBhcmFtZXRlci5qcyIoKSB7CiAgICAgIGluaXRfcmVnZXgoKTsKICAgICAgdHVwbGVSZWdleCA9IC9edHVwbGUoPzxhcnJheT4oXFsoXGQqKVxdKSopJC87CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Zvcm1hdEFiaVBhcmFtZXRlcnMuanMKICBmdW5jdGlvbiBmb3JtYXRBYmlQYXJhbWV0ZXJzKGFiaVBhcmFtZXRlcnMpIHsKICAgIGxldCBwYXJhbXMgPSAiIjsKICAgIGNvbnN0IGxlbmd0aCA9IGFiaVBhcmFtZXRlcnMubGVuZ3RoOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhYmlQYXJhbWV0ZXIgPSBhYmlQYXJhbWV0ZXJzW2ldOwogICAgICBwYXJhbXMgKz0gZm9ybWF0QWJpUGFyYW1ldGVyKGFiaVBhcmFtZXRlcik7CiAgICAgIGlmIChpICE9PSBsZW5ndGggLSAxKQogICAgICAgIHBhcmFtcyArPSAiLCAiOwogICAgfQogICAgcmV0dXJuIHBhcmFtczsKICB9CiAgdmFyIGluaXRfZm9ybWF0QWJpUGFyYW1ldGVycyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9mb3JtYXRBYmlQYXJhbWV0ZXJzLmpzIigpIHsKICAgICAgaW5pdF9mb3JtYXRBYmlQYXJhbWV0ZXIoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZm9ybWF0QWJpSXRlbS5qcwogIGZ1bmN0aW9uIGZvcm1hdEFiaUl0ZW0oYWJpSXRlbSkgewogICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImZ1bmN0aW9uIikKICAgICAgcmV0dXJuIGBmdW5jdGlvbiAke2FiaUl0ZW0ubmFtZX0oJHtmb3JtYXRBYmlQYXJhbWV0ZXJzKGFiaUl0ZW0uaW5wdXRzKX0pJHthYmlJdGVtLnN0YXRlTXV0YWJpbGl0eSAmJiBhYmlJdGVtLnN0YXRlTXV0YWJpbGl0eSAhPT0gIm5vbnBheWFibGUiID8gYCAke2FiaUl0ZW0uc3RhdGVNdXRhYmlsaXR5fWAgOiAiIn0ke2FiaUl0ZW0ub3V0cHV0cy5sZW5ndGggPyBgIHJldHVybnMgKCR7Zm9ybWF0QWJpUGFyYW1ldGVycyhhYmlJdGVtLm91dHB1dHMpfSlgIDogIiJ9YDsKICAgIGlmIChhYmlJdGVtLnR5cGUgPT09ICJldmVudCIpCiAgICAgIHJldHVybiBgZXZlbnQgJHthYmlJdGVtLm5hbWV9KCR7Zm9ybWF0QWJpUGFyYW1ldGVycyhhYmlJdGVtLmlucHV0cyl9KWA7CiAgICBpZiAoYWJpSXRlbS50eXBlID09PSAiZXJyb3IiKQogICAgICByZXR1cm4gYGVycm9yICR7YWJpSXRlbS5uYW1lfSgke2Zvcm1hdEFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMpfSlgOwogICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImNvbnN0cnVjdG9yIikKICAgICAgcmV0dXJuIGBjb25zdHJ1Y3Rvcigke2Zvcm1hdEFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMpfSkke2FiaUl0ZW0uc3RhdGVNdXRhYmlsaXR5ID09PSAicGF5YWJsZSIgPyAiIHBheWFibGUiIDogIiJ9YDsKICAgIGlmIChhYmlJdGVtLnR5cGUgPT09ICJmYWxsYmFjayIpCiAgICAgIHJldHVybiAiZmFsbGJhY2soKSI7CiAgICByZXR1cm4gInJlY2VpdmUoKSBleHRlcm5hbCBwYXlhYmxlIjsKICB9CiAgdmFyIGluaXRfZm9ybWF0QWJpSXRlbSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9mb3JtYXRBYmlJdGVtLmpzIigpIHsKICAgICAgaW5pdF9mb3JtYXRBYmlQYXJhbWV0ZXJzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvc2lnbmF0dXJlcy5qcwogIGZ1bmN0aW9uIGlzRXJyb3JTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gZXJyb3JTaWduYXR1cmVSZWdleC50ZXN0KHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGV4ZWNFcnJvclNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBleGVjVHlwZWQoZXJyb3JTaWduYXR1cmVSZWdleCwgc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gaXNFdmVudFNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBldmVudFNpZ25hdHVyZVJlZ2V4LnRlc3Qoc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gZXhlY0V2ZW50U2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIGV4ZWNUeXBlZChldmVudFNpZ25hdHVyZVJlZ2V4LCBzaWduYXR1cmUpOwogIH0KICBmdW5jdGlvbiBpc0Z1bmN0aW9uU2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uU2lnbmF0dXJlUmVnZXgudGVzdChzaWduYXR1cmUpOwogIH0KICBmdW5jdGlvbiBleGVjRnVuY3Rpb25TaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gZXhlY1R5cGVkKGZ1bmN0aW9uU2lnbmF0dXJlUmVnZXgsIHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGlzU3RydWN0U2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIHN0cnVjdFNpZ25hdHVyZVJlZ2V4LnRlc3Qoc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gZXhlY1N0cnVjdFNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBleGVjVHlwZWQoc3RydWN0U2lnbmF0dXJlUmVnZXgsIHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGlzQ29uc3RydWN0b3JTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gY29uc3RydWN0b3JTaWduYXR1cmVSZWdleC50ZXN0KHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGV4ZWNDb25zdHJ1Y3RvclNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBleGVjVHlwZWQoY29uc3RydWN0b3JTaWduYXR1cmVSZWdleCwgc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gaXNGYWxsYmFja1NpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBmYWxsYmFja1NpZ25hdHVyZVJlZ2V4LnRlc3Qoc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gaXNSZWNlaXZlU2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIHJlY2VpdmVTaWduYXR1cmVSZWdleC50ZXN0KHNpZ25hdHVyZSk7CiAgfQogIHZhciBlcnJvclNpZ25hdHVyZVJlZ2V4LCBldmVudFNpZ25hdHVyZVJlZ2V4LCBmdW5jdGlvblNpZ25hdHVyZVJlZ2V4LCBzdHJ1Y3RTaWduYXR1cmVSZWdleCwgY29uc3RydWN0b3JTaWduYXR1cmVSZWdleCwgZmFsbGJhY2tTaWduYXR1cmVSZWdleCwgcmVjZWl2ZVNpZ25hdHVyZVJlZ2V4LCBtb2RpZmllcnMsIGV2ZW50TW9kaWZpZXJzLCBmdW5jdGlvbk1vZGlmaWVyczsKICB2YXIgaW5pdF9zaWduYXR1cmVzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvc2lnbmF0dXJlcy5qcyIoKSB7CiAgICAgIGluaXRfcmVnZXgoKTsKICAgICAgZXJyb3JTaWduYXR1cmVSZWdleCA9IC9eZXJyb3IgKD88bmFtZT5bYS16QS1aJF9dW2EtekEtWjAtOSRfXSopXCgoPzxwYXJhbWV0ZXJzPi4qPylcKSQvOwogICAgICBldmVudFNpZ25hdHVyZVJlZ2V4ID0gL15ldmVudCAoPzxuYW1lPlthLXpBLVokX11bYS16QS1aMC05JF9dKilcKCg/PHBhcmFtZXRlcnM+Lio/KVwpJC87CiAgICAgIGZ1bmN0aW9uU2lnbmF0dXJlUmVnZXggPSAvXmZ1bmN0aW9uICg/PG5hbWU+W2EtekEtWiRfXVthLXpBLVowLTkkX10qKVwoKD88cGFyYW1ldGVycz4uKj8pXCkoPzogKD88c2NvcGU+ZXh0ZXJuYWx8cHVibGljezF9KSk/KD86ICg/PHN0YXRlTXV0YWJpbGl0eT5wdXJlfHZpZXd8bm9ucGF5YWJsZXxwYXlhYmxlezF9KSk/KD86IHJldHVybnNccz9cKCg/PHJldHVybnM+Lio/KVwpKT8kLzsKICAgICAgc3RydWN0U2lnbmF0dXJlUmVnZXggPSAvXnN0cnVjdCAoPzxuYW1lPlthLXpBLVokX11bYS16QS1aMC05JF9dKikgXHsoPzxwcm9wZXJ0aWVzPi4qPylcfSQvOwogICAgICBjb25zdHJ1Y3RvclNpZ25hdHVyZVJlZ2V4ID0gL15jb25zdHJ1Y3RvclwoKD88cGFyYW1ldGVycz4uKj8pXCkoPzpccyg/PHN0YXRlTXV0YWJpbGl0eT5wYXlhYmxlezF9KSk/JC87CiAgICAgIGZhbGxiYWNrU2lnbmF0dXJlUmVnZXggPSAvXmZhbGxiYWNrXChcKSBleHRlcm5hbCg/OlxzKD88c3RhdGVNdXRhYmlsaXR5PnBheWFibGV7MX0pKT8kLzsKICAgICAgcmVjZWl2ZVNpZ25hdHVyZVJlZ2V4ID0gL15yZWNlaXZlXChcKSBleHRlcm5hbCBwYXlhYmxlJC87CiAgICAgIG1vZGlmaWVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsKICAgICAgICAibWVtb3J5IiwKICAgICAgICAiaW5kZXhlZCIsCiAgICAgICAgInN0b3JhZ2UiLAogICAgICAgICJjYWxsZGF0YSIKICAgICAgXSk7CiAgICAgIGV2ZW50TW9kaWZpZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoWyJpbmRleGVkIl0pOwogICAgICBmdW5jdGlvbk1vZGlmaWVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsKICAgICAgICAiY2FsbGRhdGEiLAogICAgICAgICJtZW1vcnkiLAogICAgICAgICJzdG9yYWdlIgogICAgICBdKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL2FiaUl0ZW0uanMKICB2YXIgSW52YWxpZEFiaUl0ZW1FcnJvciwgVW5rbm93blR5cGVFcnJvciwgVW5rbm93blNvbGlkaXR5VHlwZUVycm9yOwogIHZhciBpbml0X2FiaUl0ZW0gPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL2FiaUl0ZW0uanMiKCkgewogICAgICBpbml0X2Vycm9ycygpOwogICAgICBJbnZhbGlkQWJpSXRlbUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgc2lnbmF0dXJlIH0pIHsKICAgICAgICAgIHN1cGVyKCJGYWlsZWQgdG8gcGFyc2UgQUJJIGl0ZW0uIiwgewogICAgICAgICAgICBkZXRhaWxzOiBgcGFyc2VBYmlJdGVtKCR7SlNPTi5zdHJpbmdpZnkoc2lnbmF0dXJlLCBudWxsLCAyKX0pYCwKICAgICAgICAgICAgZG9jc1BhdGg6ICIvYXBpL2h1bWFuI3BhcnNlYWJpaXRlbS0xIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZEFiaUl0ZW1FcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgVW5rbm93blR5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHR5cGUgfSkgewogICAgICAgICAgc3VwZXIoIlVua25vd24gdHlwZS4iLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBUeXBlICIke3R5cGV9IiBpcyBub3QgYSB2YWxpZCBBQkkgdHlwZS4gUGVyaGFwcyB5b3UgZm9yZ290IHRvIGluY2x1ZGUgYSBzdHJ1Y3Qgc2lnbmF0dXJlP2AKICAgICAgICAgICAgXQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiVW5rbm93blR5cGVFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgVW5rbm93blNvbGlkaXR5VHlwZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcigiVW5rbm93biB0eXBlLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIEFCSSB0eXBlLmBdCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJVbmtub3duU29saWRpdHlUeXBlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9hYmlQYXJhbWV0ZXIuanMKICB2YXIgSW52YWxpZEFiaVBhcmFtZXRlckVycm9yLCBJbnZhbGlkQWJpUGFyYW1ldGVyc0Vycm9yLCBJbnZhbGlkUGFyYW1ldGVyRXJyb3IsIFNvbGlkaXR5UHJvdGVjdGVkS2V5d29yZEVycm9yLCBJbnZhbGlkTW9kaWZpZXJFcnJvciwgSW52YWxpZEZ1bmN0aW9uTW9kaWZpZXJFcnJvciwgSW52YWxpZEFiaVR5cGVQYXJhbWV0ZXJFcnJvcjsKICB2YXIgaW5pdF9hYmlQYXJhbWV0ZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL2FiaVBhcmFtZXRlci5qcyIoKSB7CiAgICAgIGluaXRfZXJyb3JzKCk7CiAgICAgIEludmFsaWRBYmlQYXJhbWV0ZXJFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHBhcmFtIH0pIHsKICAgICAgICAgIHN1cGVyKCJGYWlsZWQgdG8gcGFyc2UgQUJJIHBhcmFtZXRlci4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IGBwYXJzZUFiaVBhcmFtZXRlcigke0pTT04uc3RyaW5naWZ5KHBhcmFtLCBudWxsLCAyKX0pYCwKICAgICAgICAgICAgZG9jc1BhdGg6ICIvYXBpL2h1bWFuI3BhcnNlYWJpcGFyYW1ldGVyLTEiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJJbnZhbGlkQWJpUGFyYW1ldGVyRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbXMgfSkgewogICAgICAgICAgc3VwZXIoIkZhaWxlZCB0byBwYXJzZSBBQkkgcGFyYW1ldGVycy4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IGBwYXJzZUFiaVBhcmFtZXRlcnMoJHtKU09OLnN0cmluZ2lmeShwYXJhbXMsIG51bGwsIDIpfSlgLAogICAgICAgICAgICBkb2NzUGF0aDogIi9hcGkvaHVtYW4jcGFyc2VhYmlwYXJhbWV0ZXJzLTEiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJJbnZhbGlkQWJpUGFyYW1ldGVyc0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkUGFyYW1ldGVyRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSB9KSB7CiAgICAgICAgICBzdXBlcigiSW52YWxpZCBBQkkgcGFyYW1ldGVyLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogcGFyYW0KICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJuYW1lIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogIkludmFsaWRQYXJhbWV0ZXJFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU29saWRpdHlQcm90ZWN0ZWRLZXl3b3JkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSwgbmFtZSB9KSB7CiAgICAgICAgICBzdXBlcigiSW52YWxpZCBBQkkgcGFyYW1ldGVyLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogcGFyYW0sCiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGAiJHtuYW1lfSIgaXMgYSBwcm90ZWN0ZWQgU29saWRpdHkga2V5d29yZC4gTW9yZSBpbmZvOiBodHRwczovL2RvY3Muc29saWRpdHlsYW5nLm9yZy9lbi9sYXRlc3QvY2hlYXRzaGVldC5odG1sYAogICAgICAgICAgICBdCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJTb2xpZGl0eVByb3RlY3RlZEtleXdvcmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgSW52YWxpZE1vZGlmaWVyRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSwgdHlwZSwgbW9kaWZpZXIgfSkgewogICAgICAgICAgc3VwZXIoIkludmFsaWQgQUJJIHBhcmFtZXRlci4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IHBhcmFtLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgTW9kaWZpZXIgIiR7bW9kaWZpZXJ9IiBub3QgYWxsb3dlZCR7dHlwZSA/IGAgaW4gIiR7dHlwZX0iIHR5cGVgIDogIiJ9LmAKICAgICAgICAgICAgXQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZE1vZGlmaWVyRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSwgdHlwZSwgbW9kaWZpZXIgfSkgewogICAgICAgICAgc3VwZXIoIkludmFsaWQgQUJJIHBhcmFtZXRlci4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IHBhcmFtLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgTW9kaWZpZXIgIiR7bW9kaWZpZXJ9IiBub3QgYWxsb3dlZCR7dHlwZSA/IGAgaW4gIiR7dHlwZX0iIHR5cGVgIDogIiJ9LmAsCiAgICAgICAgICAgICAgYERhdGEgbG9jYXRpb24gY2FuIG9ubHkgYmUgc3BlY2lmaWVkIGZvciBhcnJheSwgc3RydWN0LCBvciBtYXBwaW5nIHR5cGVzLCBidXQgIiR7bW9kaWZpZXJ9IiB3YXMgZ2l2ZW4uYAogICAgICAgICAgICBdCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJJbnZhbGlkRnVuY3Rpb25Nb2RpZmllckVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQWJpVHlwZVBhcmFtZXRlckVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYWJpUGFyYW1ldGVyIH0pIHsKICAgICAgICAgIHN1cGVyKCJJbnZhbGlkIEFCSSBwYXJhbWV0ZXIuIiwgewogICAgICAgICAgICBkZXRhaWxzOiBKU09OLnN0cmluZ2lmeShhYmlQYXJhbWV0ZXIsIG51bGwsIDIpLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsiQUJJIHBhcmFtZXRlciB0eXBlIGlzIGludmFsaWQuIl0KICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJuYW1lIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogIkludmFsaWRBYmlUeXBlUGFyYW1ldGVyRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zaWduYXR1cmUuanMKICB2YXIgSW52YWxpZFNpZ25hdHVyZUVycm9yLCBVbmtub3duU2lnbmF0dXJlRXJyb3IsIEludmFsaWRTdHJ1Y3RTaWduYXR1cmVFcnJvcjsKICB2YXIgaW5pdF9zaWduYXR1cmUgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL3NpZ25hdHVyZS5qcyIoKSB7CiAgICAgIGluaXRfZXJyb3JzKCk7CiAgICAgIEludmFsaWRTaWduYXR1cmVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHNpZ25hdHVyZSwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihgSW52YWxpZCAke3R5cGV9IHNpZ25hdHVyZS5gLCB7CiAgICAgICAgICAgIGRldGFpbHM6IHNpZ25hdHVyZQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZFNpZ25hdHVyZUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBVbmtub3duU2lnbmF0dXJlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBzaWduYXR1cmUgfSkgewogICAgICAgICAgc3VwZXIoIlVua25vd24gc2lnbmF0dXJlLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogc2lnbmF0dXJlCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJVbmtub3duU2lnbmF0dXJlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRTdHJ1Y3RTaWduYXR1cmVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHNpZ25hdHVyZSB9KSB7CiAgICAgICAgICBzdXBlcigiSW52YWxpZCBzdHJ1Y3Qgc2lnbmF0dXJlLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogc2lnbmF0dXJlLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsiTm8gcHJvcGVydGllcyBleGlzdC4iXQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZFN0cnVjdFNpZ25hdHVyZUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9lcnJvcnMvc3RydWN0LmpzCiAgdmFyIENpcmN1bGFyUmVmZXJlbmNlRXJyb3I7CiAgdmFyIGluaXRfc3RydWN0ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zdHJ1Y3QuanMiKCkgewogICAgICBpbml0X2Vycm9ycygpOwogICAgICBDaXJjdWxhclJlZmVyZW5jZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYFN0cnVjdCAiJHt0eXBlfSIgaXMgYSBjaXJjdWxhciByZWZlcmVuY2UuYF0KICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJuYW1lIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogIkNpcmN1bGFyUmVmZXJlbmNlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zcGxpdFBhcmFtZXRlcnMuanMKICB2YXIgSW52YWxpZFBhcmVudGhlc2lzRXJyb3I7CiAgdmFyIGluaXRfc3BsaXRQYXJhbWV0ZXJzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zcGxpdFBhcmFtZXRlcnMuanMiKCkgewogICAgICBpbml0X2Vycm9ycygpOwogICAgICBJbnZhbGlkUGFyZW50aGVzaXNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGN1cnJlbnQsIGRlcHRoIH0pIHsKICAgICAgICAgIHN1cGVyKCJVbmJhbGFuY2VkIHBhcmVudGhlc2VzLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgYCIke2N1cnJlbnQudHJpbSgpfSIgaGFzIHRvbyBtYW55ICR7ZGVwdGggPiAwID8gIm9wZW5pbmciIDogImNsb3NpbmcifSBwYXJlbnRoZXNlcy5gCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIGRldGFpbHM6IGBEZXB0aCAiJHtkZXB0aH0iYAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZFBhcmVudGhlc2lzRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvY2FjaGUuanMKICBmdW5jdGlvbiBnZXRQYXJhbWV0ZXJDYWNoZUtleShwYXJhbSwgdHlwZSkgewogICAgaWYgKHR5cGUpCiAgICAgIHJldHVybiBgJHt0eXBlfToke3BhcmFtfWA7CiAgICByZXR1cm4gcGFyYW07CiAgfQogIHZhciBwYXJhbWV0ZXJDYWNoZTsKICB2YXIgaW5pdF9jYWNoZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL2NhY2hlLmpzIigpIHsKICAgICAgcGFyYW1ldGVyQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbCiAgICAgICAgLy8gVW5uYW1lZAogICAgICAgIFsiYWRkcmVzcyIsIHsgdHlwZTogImFkZHJlc3MiIH1dLAogICAgICAgIFsiYm9vbCIsIHsgdHlwZTogImJvb2wiIH1dLAogICAgICAgIFsiYnl0ZXMiLCB7IHR5cGU6ICJieXRlcyIgfV0sCiAgICAgICAgWyJieXRlczMyIiwgeyB0eXBlOiAiYnl0ZXMzMiIgfV0sCiAgICAgICAgWyJpbnQiLCB7IHR5cGU6ICJpbnQyNTYiIH1dLAogICAgICAgIFsiaW50MjU2IiwgeyB0eXBlOiAiaW50MjU2IiB9XSwKICAgICAgICBbInN0cmluZyIsIHsgdHlwZTogInN0cmluZyIgfV0sCiAgICAgICAgWyJ1aW50IiwgeyB0eXBlOiAidWludDI1NiIgfV0sCiAgICAgICAgWyJ1aW50OCIsIHsgdHlwZTogInVpbnQ4IiB9XSwKICAgICAgICBbInVpbnQxNiIsIHsgdHlwZTogInVpbnQxNiIgfV0sCiAgICAgICAgWyJ1aW50MjQiLCB7IHR5cGU6ICJ1aW50MjQiIH1dLAogICAgICAgIFsidWludDMyIiwgeyB0eXBlOiAidWludDMyIiB9XSwKICAgICAgICBbInVpbnQ2NCIsIHsgdHlwZTogInVpbnQ2NCIgfV0sCiAgICAgICAgWyJ1aW50OTYiLCB7IHR5cGU6ICJ1aW50OTYiIH1dLAogICAgICAgIFsidWludDExMiIsIHsgdHlwZTogInVpbnQxMTIiIH1dLAogICAgICAgIFsidWludDE2MCIsIHsgdHlwZTogInVpbnQxNjAiIH1dLAogICAgICAgIFsidWludDE5MiIsIHsgdHlwZTogInVpbnQxOTIiIH1dLAogICAgICAgIFsidWludDI1NiIsIHsgdHlwZTogInVpbnQyNTYiIH1dLAogICAgICAgIC8vIE5hbWVkCiAgICAgICAgWyJhZGRyZXNzIG93bmVyIiwgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJvd25lciIgfV0sCiAgICAgICAgWyJhZGRyZXNzIHRvIiwgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJ0byIgfV0sCiAgICAgICAgWyJib29sIGFwcHJvdmVkIiwgeyB0eXBlOiAiYm9vbCIsIG5hbWU6ICJhcHByb3ZlZCIgfV0sCiAgICAgICAgWyJieXRlcyBfZGF0YSIsIHsgdHlwZTogImJ5dGVzIiwgbmFtZTogIl9kYXRhIiB9XSwKICAgICAgICBbImJ5dGVzIGRhdGEiLCB7IHR5cGU6ICJieXRlcyIsIG5hbWU6ICJkYXRhIiB9XSwKICAgICAgICBbImJ5dGVzIHNpZ25hdHVyZSIsIHsgdHlwZTogImJ5dGVzIiwgbmFtZTogInNpZ25hdHVyZSIgfV0sCiAgICAgICAgWyJieXRlczMyIGhhc2giLCB7IHR5cGU6ICJieXRlczMyIiwgbmFtZTogImhhc2giIH1dLAogICAgICAgIFsiYnl0ZXMzMiByIiwgeyB0eXBlOiAiYnl0ZXMzMiIsIG5hbWU6ICJyIiB9XSwKICAgICAgICBbImJ5dGVzMzIgcm9vdCIsIHsgdHlwZTogImJ5dGVzMzIiLCBuYW1lOiAicm9vdCIgfV0sCiAgICAgICAgWyJieXRlczMyIHMiLCB7IHR5cGU6ICJieXRlczMyIiwgbmFtZTogInMiIH1dLAogICAgICAgIFsic3RyaW5nIG5hbWUiLCB7IHR5cGU6ICJzdHJpbmciLCBuYW1lOiAibmFtZSIgfV0sCiAgICAgICAgWyJzdHJpbmcgc3ltYm9sIiwgeyB0eXBlOiAic3RyaW5nIiwgbmFtZTogInN5bWJvbCIgfV0sCiAgICAgICAgWyJzdHJpbmcgdG9rZW5VUkkiLCB7IHR5cGU6ICJzdHJpbmciLCBuYW1lOiAidG9rZW5VUkkiIH1dLAogICAgICAgIFsidWludCB0b2tlbklkIiwgeyB0eXBlOiAidWludDI1NiIsIG5hbWU6ICJ0b2tlbklkIiB9XSwKICAgICAgICBbInVpbnQ4IHYiLCB7IHR5cGU6ICJ1aW50OCIsIG5hbWU6ICJ2IiB9XSwKICAgICAgICBbInVpbnQyNTYgYmFsYW5jZSIsIHsgdHlwZTogInVpbnQyNTYiLCBuYW1lOiAiYmFsYW5jZSIgfV0sCiAgICAgICAgWyJ1aW50MjU2IHRva2VuSWQiLCB7IHR5cGU6ICJ1aW50MjU2IiwgbmFtZTogInRva2VuSWQiIH1dLAogICAgICAgIFsidWludDI1NiB2YWx1ZSIsIHsgdHlwZTogInVpbnQyNTYiLCBuYW1lOiAidmFsdWUiIH1dLAogICAgICAgIC8vIEluZGV4ZWQKICAgICAgICBbCiAgICAgICAgICAiZXZlbnQ6YWRkcmVzcyBpbmRleGVkIGZyb20iLAogICAgICAgICAgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJmcm9tIiwgaW5kZXhlZDogdHJ1ZSB9CiAgICAgICAgXSwKICAgICAgICBbImV2ZW50OmFkZHJlc3MgaW5kZXhlZCB0byIsIHsgdHlwZTogImFkZHJlc3MiLCBuYW1lOiAidG8iLCBpbmRleGVkOiB0cnVlIH1dLAogICAgICAgIFsKICAgICAgICAgICJldmVudDp1aW50IGluZGV4ZWQgdG9rZW5JZCIsCiAgICAgICAgICB7IHR5cGU6ICJ1aW50MjU2IiwgbmFtZTogInRva2VuSWQiLCBpbmRleGVkOiB0cnVlIH0KICAgICAgICBdLAogICAgICAgIFsKICAgICAgICAgICJldmVudDp1aW50MjU2IGluZGV4ZWQgdG9rZW5JZCIsCiAgICAgICAgICB7IHR5cGU6ICJ1aW50MjU2IiwgbmFtZTogInRva2VuSWQiLCBpbmRleGVkOiB0cnVlIH0KICAgICAgICBdCiAgICAgIF0pOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL3V0aWxzLmpzCiAgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmUoc2lnbmF0dXJlLCBzdHJ1Y3RzID0ge30pIHsKICAgIGlmIChpc0Z1bmN0aW9uU2lnbmF0dXJlKHNpZ25hdHVyZSkpIHsKICAgICAgY29uc3QgbWF0Y2ggPSBleGVjRnVuY3Rpb25TaWduYXR1cmUoc2lnbmF0dXJlKTsKICAgICAgaWYgKCFtYXRjaCkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFNpZ25hdHVyZUVycm9yKHsgc2lnbmF0dXJlLCB0eXBlOiAiZnVuY3Rpb24iIH0pOwogICAgICBjb25zdCBpbnB1dFBhcmFtcyA9IHNwbGl0UGFyYW1ldGVycyhtYXRjaC5wYXJhbWV0ZXJzKTsKICAgICAgY29uc3QgaW5wdXRzID0gW107CiAgICAgIGNvbnN0IGlucHV0TGVuZ3RoID0gaW5wdXRQYXJhbXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHsKICAgICAgICBpbnB1dHMucHVzaChwYXJzZUFiaVBhcmFtZXRlcihpbnB1dFBhcmFtc1tpXSwgewogICAgICAgICAgbW9kaWZpZXJzOiBmdW5jdGlvbk1vZGlmaWVycywKICAgICAgICAgIHN0cnVjdHMsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSkpOwogICAgICB9CiAgICAgIGNvbnN0IG91dHB1dHMgPSBbXTsKICAgICAgaWYgKG1hdGNoLnJldHVybnMpIHsKICAgICAgICBjb25zdCBvdXRwdXRQYXJhbXMgPSBzcGxpdFBhcmFtZXRlcnMobWF0Y2gucmV0dXJucyk7CiAgICAgICAgY29uc3Qgb3V0cHV0TGVuZ3RoID0gb3V0cHV0UGFyYW1zLmxlbmd0aDsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dExlbmd0aDsgaSsrKSB7CiAgICAgICAgICBvdXRwdXRzLnB1c2gocGFyc2VBYmlQYXJhbWV0ZXIob3V0cHV0UGFyYW1zW2ldLCB7CiAgICAgICAgICAgIG1vZGlmaWVyczogZnVuY3Rpb25Nb2RpZmllcnMsCiAgICAgICAgICAgIHN0cnVjdHMsCiAgICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsKICAgICAgICBuYW1lOiBtYXRjaC5uYW1lLAogICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiBtYXRjaC5zdGF0ZU11dGFiaWxpdHkgPz8gIm5vbnBheWFibGUiLAogICAgICAgIGlucHV0cywKICAgICAgICBvdXRwdXRzCiAgICAgIH07CiAgICB9CiAgICBpZiAoaXNFdmVudFNpZ25hdHVyZShzaWduYXR1cmUpKSB7CiAgICAgIGNvbnN0IG1hdGNoID0gZXhlY0V2ZW50U2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICAgIGlmICghbWF0Y2gpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSwgdHlwZTogImV2ZW50IiB9KTsKICAgICAgY29uc3QgcGFyYW1zID0gc3BsaXRQYXJhbWV0ZXJzKG1hdGNoLnBhcmFtZXRlcnMpOwogICAgICBjb25zdCBhYmlQYXJhbWV0ZXJzID0gW107CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBhYmlQYXJhbWV0ZXJzLnB1c2gocGFyc2VBYmlQYXJhbWV0ZXIocGFyYW1zW2ldLCB7CiAgICAgICAgICBtb2RpZmllcnM6IGV2ZW50TW9kaWZpZXJzLAogICAgICAgICAgc3RydWN0cywKICAgICAgICAgIHR5cGU6ICJldmVudCIKICAgICAgICB9KSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgbmFtZTogbWF0Y2gubmFtZSwgdHlwZTogImV2ZW50IiwgaW5wdXRzOiBhYmlQYXJhbWV0ZXJzIH07CiAgICB9CiAgICBpZiAoaXNFcnJvclNpZ25hdHVyZShzaWduYXR1cmUpKSB7CiAgICAgIGNvbnN0IG1hdGNoID0gZXhlY0Vycm9yU2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICAgIGlmICghbWF0Y2gpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSwgdHlwZTogImVycm9yIiB9KTsKICAgICAgY29uc3QgcGFyYW1zID0gc3BsaXRQYXJhbWV0ZXJzKG1hdGNoLnBhcmFtZXRlcnMpOwogICAgICBjb25zdCBhYmlQYXJhbWV0ZXJzID0gW107CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBhYmlQYXJhbWV0ZXJzLnB1c2gocGFyc2VBYmlQYXJhbWV0ZXIocGFyYW1zW2ldLCB7IHN0cnVjdHMsIHR5cGU6ICJlcnJvciIgfSkpOwogICAgICB9CiAgICAgIHJldHVybiB7IG5hbWU6IG1hdGNoLm5hbWUsIHR5cGU6ICJlcnJvciIsIGlucHV0czogYWJpUGFyYW1ldGVycyB9OwogICAgfQogICAgaWYgKGlzQ29uc3RydWN0b3JTaWduYXR1cmUoc2lnbmF0dXJlKSkgewogICAgICBjb25zdCBtYXRjaCA9IGV4ZWNDb25zdHJ1Y3RvclNpZ25hdHVyZShzaWduYXR1cmUpOwogICAgICBpZiAoIW1hdGNoKQogICAgICAgIHRocm93IG5ldyBJbnZhbGlkU2lnbmF0dXJlRXJyb3IoeyBzaWduYXR1cmUsIHR5cGU6ICJjb25zdHJ1Y3RvciIgfSk7CiAgICAgIGNvbnN0IHBhcmFtcyA9IHNwbGl0UGFyYW1ldGVycyhtYXRjaC5wYXJhbWV0ZXJzKTsKICAgICAgY29uc3QgYWJpUGFyYW1ldGVycyA9IFtdOwogICAgICBjb25zdCBsZW5ndGggPSBwYXJhbXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgYWJpUGFyYW1ldGVycy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtc1tpXSwgeyBzdHJ1Y3RzLCB0eXBlOiAiY29uc3RydWN0b3IiIH0pKTsKICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6ICJjb25zdHJ1Y3RvciIsCiAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiBtYXRjaC5zdGF0ZU11dGFiaWxpdHkgPz8gIm5vbnBheWFibGUiLAogICAgICAgIGlucHV0czogYWJpUGFyYW1ldGVycwogICAgICB9OwogICAgfQogICAgaWYgKGlzRmFsbGJhY2tTaWduYXR1cmUoc2lnbmF0dXJlKSkKICAgICAgcmV0dXJuIHsgdHlwZTogImZhbGxiYWNrIiB9OwogICAgaWYgKGlzUmVjZWl2ZVNpZ25hdHVyZShzaWduYXR1cmUpKQogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6ICJyZWNlaXZlIiwKICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJwYXlhYmxlIgogICAgICB9OwogICAgdGhyb3cgbmV3IFVua25vd25TaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSB9KTsKICB9CiAgZnVuY3Rpb24gcGFyc2VBYmlQYXJhbWV0ZXIocGFyYW0sIG9wdGlvbnMpIHsKICAgIGNvbnN0IHBhcmFtZXRlckNhY2hlS2V5ID0gZ2V0UGFyYW1ldGVyQ2FjaGVLZXkocGFyYW0sIG9wdGlvbnM/LnR5cGUpOwogICAgaWYgKHBhcmFtZXRlckNhY2hlLmhhcyhwYXJhbWV0ZXJDYWNoZUtleSkpCiAgICAgIHJldHVybiBwYXJhbWV0ZXJDYWNoZS5nZXQocGFyYW1ldGVyQ2FjaGVLZXkpOwogICAgY29uc3QgaXNUdXBsZSA9IGlzVHVwbGVSZWdleC50ZXN0KHBhcmFtKTsKICAgIGNvbnN0IG1hdGNoID0gZXhlY1R5cGVkKGlzVHVwbGUgPyBhYmlQYXJhbWV0ZXJXaXRoVHVwbGVSZWdleCA6IGFiaVBhcmFtZXRlcldpdGhvdXRUdXBsZVJlZ2V4LCBwYXJhbSk7CiAgICBpZiAoIW1hdGNoKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlckVycm9yKHsgcGFyYW0gfSk7CiAgICBpZiAobWF0Y2gubmFtZSAmJiBpc1NvbGlkaXR5S2V5d29yZChtYXRjaC5uYW1lKSkKICAgICAgdGhyb3cgbmV3IFNvbGlkaXR5UHJvdGVjdGVkS2V5d29yZEVycm9yKHsgcGFyYW0sIG5hbWU6IG1hdGNoLm5hbWUgfSk7CiAgICBjb25zdCBuYW1lID0gbWF0Y2gubmFtZSA/IHsgbmFtZTogbWF0Y2gubmFtZSB9IDoge307CiAgICBjb25zdCBpbmRleGVkID0gbWF0Y2gubW9kaWZpZXIgPT09ICJpbmRleGVkIiA/IHsgaW5kZXhlZDogdHJ1ZSB9IDoge307CiAgICBjb25zdCBzdHJ1Y3RzID0gb3B0aW9ucz8uc3RydWN0cyA/PyB7fTsKICAgIGxldCB0eXBlOwogICAgbGV0IGNvbXBvbmVudHMgPSB7fTsKICAgIGlmIChpc1R1cGxlKSB7CiAgICAgIHR5cGUgPSAidHVwbGUiOwogICAgICBjb25zdCBwYXJhbXMgPSBzcGxpdFBhcmFtZXRlcnMobWF0Y2gudHlwZSk7CiAgICAgIGNvbnN0IGNvbXBvbmVudHNfID0gW107CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBjb21wb25lbnRzXy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtc1tpXSwgeyBzdHJ1Y3RzIH0pKTsKICAgICAgfQogICAgICBjb21wb25lbnRzID0geyBjb21wb25lbnRzOiBjb21wb25lbnRzXyB9OwogICAgfSBlbHNlIGlmIChtYXRjaC50eXBlIGluIHN0cnVjdHMpIHsKICAgICAgdHlwZSA9ICJ0dXBsZSI7CiAgICAgIGNvbXBvbmVudHMgPSB7IGNvbXBvbmVudHM6IHN0cnVjdHNbbWF0Y2gudHlwZV0gfTsKICAgIH0gZWxzZSBpZiAoZHluYW1pY0ludGVnZXJSZWdleC50ZXN0KG1hdGNoLnR5cGUpKSB7CiAgICAgIHR5cGUgPSBgJHttYXRjaC50eXBlfTI1NmA7CiAgICB9IGVsc2UgewogICAgICB0eXBlID0gbWF0Y2gudHlwZTsKICAgICAgaWYgKCEob3B0aW9ucz8udHlwZSA9PT0gInN0cnVjdCIpICYmICFpc1NvbGlkaXR5VHlwZSh0eXBlKSkKICAgICAgICB0aHJvdyBuZXcgVW5rbm93blNvbGlkaXR5VHlwZUVycm9yKHsgdHlwZSB9KTsKICAgIH0KICAgIGlmIChtYXRjaC5tb2RpZmllcikgewogICAgICBpZiAoIW9wdGlvbnM/Lm1vZGlmaWVycz8uaGFzPy4obWF0Y2gubW9kaWZpZXIpKQogICAgICAgIHRocm93IG5ldyBJbnZhbGlkTW9kaWZpZXJFcnJvcih7CiAgICAgICAgICBwYXJhbSwKICAgICAgICAgIHR5cGU6IG9wdGlvbnM/LnR5cGUsCiAgICAgICAgICBtb2RpZmllcjogbWF0Y2gubW9kaWZpZXIKICAgICAgICB9KTsKICAgICAgaWYgKGZ1bmN0aW9uTW9kaWZpZXJzLmhhcyhtYXRjaC5tb2RpZmllcikgJiYgIWlzVmFsaWREYXRhTG9jYXRpb24odHlwZSwgISFtYXRjaC5hcnJheSkpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3IoewogICAgICAgICAgcGFyYW0sCiAgICAgICAgICB0eXBlOiBvcHRpb25zPy50eXBlLAogICAgICAgICAgbW9kaWZpZXI6IG1hdGNoLm1vZGlmaWVyCiAgICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBhYmlQYXJhbWV0ZXIgPSB7CiAgICAgIHR5cGU6IGAke3R5cGV9JHttYXRjaC5hcnJheSA/PyAiIn1gLAogICAgICAuLi5uYW1lLAogICAgICAuLi5pbmRleGVkLAogICAgICAuLi5jb21wb25lbnRzCiAgICB9OwogICAgcGFyYW1ldGVyQ2FjaGUuc2V0KHBhcmFtZXRlckNhY2hlS2V5LCBhYmlQYXJhbWV0ZXIpOwogICAgcmV0dXJuIGFiaVBhcmFtZXRlcjsKICB9CiAgZnVuY3Rpb24gc3BsaXRQYXJhbWV0ZXJzKHBhcmFtcywgcmVzdWx0ID0gW10sIGN1cnJlbnQgPSAiIiwgZGVwdGggPSAwKSB7CiAgICBjb25zdCBsZW5ndGggPSBwYXJhbXMudHJpbSgpLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgY2hhciA9IHBhcmFtc1tpXTsKICAgICAgY29uc3QgdGFpbCA9IHBhcmFtcy5zbGljZShpICsgMSk7CiAgICAgIHN3aXRjaCAoY2hhcikgewogICAgICAgIGNhc2UgIiwiOgogICAgICAgICAgcmV0dXJuIGRlcHRoID09PSAwID8gc3BsaXRQYXJhbWV0ZXJzKHRhaWwsIFsuLi5yZXN1bHQsIGN1cnJlbnQudHJpbSgpXSkgOiBzcGxpdFBhcmFtZXRlcnModGFpbCwgcmVzdWx0LCBgJHtjdXJyZW50fSR7Y2hhcn1gLCBkZXB0aCk7CiAgICAgICAgY2FzZSAiKCI6CiAgICAgICAgICByZXR1cm4gc3BsaXRQYXJhbWV0ZXJzKHRhaWwsIHJlc3VsdCwgYCR7Y3VycmVudH0ke2NoYXJ9YCwgZGVwdGggKyAxKTsKICAgICAgICBjYXNlICIpIjoKICAgICAgICAgIHJldHVybiBzcGxpdFBhcmFtZXRlcnModGFpbCwgcmVzdWx0LCBgJHtjdXJyZW50fSR7Y2hhcn1gLCBkZXB0aCAtIDEpOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gc3BsaXRQYXJhbWV0ZXJzKHRhaWwsIHJlc3VsdCwgYCR7Y3VycmVudH0ke2NoYXJ9YCwgZGVwdGgpOwogICAgICB9CiAgICB9CiAgICBpZiAoY3VycmVudCA9PT0gIiIpCiAgICAgIHJldHVybiByZXN1bHQ7CiAgICBpZiAoZGVwdGggIT09IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyZW50aGVzaXNFcnJvcih7IGN1cnJlbnQsIGRlcHRoIH0pOwogICAgcmVzdWx0LnB1c2goY3VycmVudC50cmltKCkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gaXNTb2xpZGl0eVR5cGUodHlwZSkgewogICAgcmV0dXJuIHR5cGUgPT09ICJhZGRyZXNzIiB8fCB0eXBlID09PSAiYm9vbCIgfHwgdHlwZSA9PT0gImZ1bmN0aW9uIiB8fCB0eXBlID09PSAic3RyaW5nIiB8fCBieXRlc1JlZ2V4LnRlc3QodHlwZSkgfHwgaW50ZWdlclJlZ2V4LnRlc3QodHlwZSk7CiAgfQogIGZ1bmN0aW9uIGlzU29saWRpdHlLZXl3b3JkKG5hbWUpIHsKICAgIHJldHVybiBuYW1lID09PSAiYWRkcmVzcyIgfHwgbmFtZSA9PT0gImJvb2wiIHx8IG5hbWUgPT09ICJmdW5jdGlvbiIgfHwgbmFtZSA9PT0gInN0cmluZyIgfHwgbmFtZSA9PT0gInR1cGxlIiB8fCBieXRlc1JlZ2V4LnRlc3QobmFtZSkgfHwgaW50ZWdlclJlZ2V4LnRlc3QobmFtZSkgfHwgcHJvdGVjdGVkS2V5d29yZHNSZWdleC50ZXN0KG5hbWUpOwogIH0KICBmdW5jdGlvbiBpc1ZhbGlkRGF0YUxvY2F0aW9uKHR5cGUsIGlzQXJyYXkpIHsKICAgIHJldHVybiBpc0FycmF5IHx8IHR5cGUgPT09ICJieXRlcyIgfHwgdHlwZSA9PT0gInN0cmluZyIgfHwgdHlwZSA9PT0gInR1cGxlIjsKICB9CiAgdmFyIGFiaVBhcmFtZXRlcldpdGhvdXRUdXBsZVJlZ2V4LCBhYmlQYXJhbWV0ZXJXaXRoVHVwbGVSZWdleCwgZHluYW1pY0ludGVnZXJSZWdleCwgcHJvdGVjdGVkS2V5d29yZHNSZWdleDsKICB2YXIgaW5pdF91dGlscyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL3V0aWxzLmpzIigpIHsKICAgICAgaW5pdF9yZWdleCgpOwogICAgICBpbml0X2FiaUl0ZW0oKTsKICAgICAgaW5pdF9hYmlQYXJhbWV0ZXIoKTsKICAgICAgaW5pdF9zaWduYXR1cmUoKTsKICAgICAgaW5pdF9zcGxpdFBhcmFtZXRlcnMoKTsKICAgICAgaW5pdF9jYWNoZSgpOwogICAgICBpbml0X3NpZ25hdHVyZXMoKTsKICAgICAgYWJpUGFyYW1ldGVyV2l0aG91dFR1cGxlUmVnZXggPSAvXig/PHR5cGU+W2EtekEtWiRfXVthLXpBLVowLTkkX10qKSg/PGFycmF5Pig/OlxbXGQqP1xdKSs/KT8oPzpccyg/PG1vZGlmaWVyPmNhbGxkYXRhfGluZGV4ZWR8bWVtb3J5fHN0b3JhZ2V7MX0pKT8oPzpccyg/PG5hbWU+W2EtekEtWiRfXVthLXpBLVowLTkkX10qKSk/JC87CiAgICAgIGFiaVBhcmFtZXRlcldpdGhUdXBsZVJlZ2V4ID0gL15cKCg/PHR5cGU+Lis/KVwpKD88YXJyYXk+KD86XFtcZCo/XF0pKz8pPyg/OlxzKD88bW9kaWZpZXI+Y2FsbGRhdGF8aW5kZXhlZHxtZW1vcnl8c3RvcmFnZXsxfSkpPyg/OlxzKD88bmFtZT5bYS16QS1aJF9dW2EtekEtWjAtOSRfXSopKT8kLzsKICAgICAgZHluYW1pY0ludGVnZXJSZWdleCA9IC9edT9pbnQkLzsKICAgICAgcHJvdGVjdGVkS2V5d29yZHNSZWdleCA9IC9eKD86YWZ0ZXJ8YWxpYXN8YW5vbnltb3VzfGFwcGx5fGF1dG98Ynl0ZXxjYWxsZGF0YXxjYXNlfGNhdGNofGNvbnN0YW50fGNvcHlvZnxkZWZhdWx0fGRlZmluZWR8ZXJyb3J8ZXZlbnR8ZXh0ZXJuYWx8ZmFsc2V8ZmluYWx8ZnVuY3Rpb258aW1tdXRhYmxlfGltcGxlbWVudHN8aW58aW5kZXhlZHxpbmxpbmV8aW50ZXJuYWx8bGV0fG1hcHBpbmd8bWF0Y2h8bWVtb3J5fG11dGFibGV8bnVsbHxvZnxvdmVycmlkZXxwYXJ0aWFsfHByaXZhdGV8cHJvbWlzZXxwdWJsaWN8cHVyZXxyZWZlcmVuY2V8cmVsb2NhdGFibGV8cmV0dXJufHJldHVybnN8c2l6ZW9mfHN0YXRpY3xzdG9yYWdlfHN0cnVjdHxzdXBlcnxzdXBwb3J0c3xzd2l0Y2h8dGhpc3x0cnVlfHRyeXx0eXBlZGVmfHR5cGVvZnx2YXJ8dmlld3x2aXJ0dWFsKSQvOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL3N0cnVjdHMuanMKICBmdW5jdGlvbiBwYXJzZVN0cnVjdHMoc2lnbmF0dXJlcykgewogICAgY29uc3Qgc2hhbGxvd1N0cnVjdHMgPSB7fTsKICAgIGNvbnN0IHNpZ25hdHVyZXNMZW5ndGggPSBzaWduYXR1cmVzLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2lnbmF0dXJlc0xlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25hdHVyZXNbaV07CiAgICAgIGlmICghaXNTdHJ1Y3RTaWduYXR1cmUoc2lnbmF0dXJlKSkKICAgICAgICBjb250aW51ZTsKICAgICAgY29uc3QgbWF0Y2ggPSBleGVjU3RydWN0U2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICAgIGlmICghbWF0Y2gpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSwgdHlwZTogInN0cnVjdCIgfSk7CiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBtYXRjaC5wcm9wZXJ0aWVzLnNwbGl0KCI7Iik7CiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBbXTsKICAgICAgY29uc3QgcHJvcGVydGllc0xlbmd0aCA9IHByb3BlcnRpZXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBrID0gMDsgayA8IHByb3BlcnRpZXNMZW5ndGg7IGsrKykgewogICAgICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1trXTsKICAgICAgICBjb25zdCB0cmltbWVkID0gcHJvcGVydHkudHJpbSgpOwogICAgICAgIGlmICghdHJpbW1lZCkKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGNvbnN0IGFiaVBhcmFtZXRlciA9IHBhcnNlQWJpUGFyYW1ldGVyKHRyaW1tZWQsIHsKICAgICAgICAgIHR5cGU6ICJzdHJ1Y3QiCiAgICAgICAgfSk7CiAgICAgICAgY29tcG9uZW50cy5wdXNoKGFiaVBhcmFtZXRlcik7CiAgICAgIH0KICAgICAgaWYgKCFjb21wb25lbnRzLmxlbmd0aCkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFN0cnVjdFNpZ25hdHVyZUVycm9yKHsgc2lnbmF0dXJlIH0pOwogICAgICBzaGFsbG93U3RydWN0c1ttYXRjaC5uYW1lXSA9IGNvbXBvbmVudHM7CiAgICB9CiAgICBjb25zdCByZXNvbHZlZFN0cnVjdHMgPSB7fTsKICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhzaGFsbG93U3RydWN0cyk7CiAgICBjb25zdCBlbnRyaWVzTGVuZ3RoID0gZW50cmllcy5sZW5ndGg7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXNMZW5ndGg7IGkrKykgewogICAgICBjb25zdCBbbmFtZSwgcGFyYW1ldGVyc10gPSBlbnRyaWVzW2ldOwogICAgICByZXNvbHZlZFN0cnVjdHNbbmFtZV0gPSByZXNvbHZlU3RydWN0cyhwYXJhbWV0ZXJzLCBzaGFsbG93U3RydWN0cyk7CiAgICB9CiAgICByZXR1cm4gcmVzb2x2ZWRTdHJ1Y3RzOwogIH0KICBmdW5jdGlvbiByZXNvbHZlU3RydWN0cyhhYmlQYXJhbWV0ZXJzLCBzdHJ1Y3RzLCBhbmNlc3RvcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSB7CiAgICBjb25zdCBjb21wb25lbnRzID0gW107CiAgICBjb25zdCBsZW5ndGggPSBhYmlQYXJhbWV0ZXJzLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgYWJpUGFyYW1ldGVyID0gYWJpUGFyYW1ldGVyc1tpXTsKICAgICAgY29uc3QgaXNUdXBsZSA9IGlzVHVwbGVSZWdleC50ZXN0KGFiaVBhcmFtZXRlci50eXBlKTsKICAgICAgaWYgKGlzVHVwbGUpCiAgICAgICAgY29tcG9uZW50cy5wdXNoKGFiaVBhcmFtZXRlcik7CiAgICAgIGVsc2UgewogICAgICAgIGNvbnN0IG1hdGNoID0gZXhlY1R5cGVkKHR5cGVXaXRob3V0VHVwbGVSZWdleCwgYWJpUGFyYW1ldGVyLnR5cGUpOwogICAgICAgIGlmICghbWF0Y2g/LnR5cGUpCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFiaVR5cGVQYXJhbWV0ZXJFcnJvcih7IGFiaVBhcmFtZXRlciB9KTsKICAgICAgICBjb25zdCB7IGFycmF5LCB0eXBlIH0gPSBtYXRjaDsKICAgICAgICBpZiAodHlwZSBpbiBzdHJ1Y3RzKSB7CiAgICAgICAgICBpZiAoYW5jZXN0b3JzLmhhcyh0eXBlKSkKICAgICAgICAgICAgdGhyb3cgbmV3IENpcmN1bGFyUmVmZXJlbmNlRXJyb3IoeyB0eXBlIH0pOwogICAgICAgICAgY29tcG9uZW50cy5wdXNoKHsKICAgICAgICAgICAgLi4uYWJpUGFyYW1ldGVyLAogICAgICAgICAgICB0eXBlOiBgdHVwbGUke2FycmF5ID8/ICIifWAsCiAgICAgICAgICAgIGNvbXBvbmVudHM6IHJlc29sdmVTdHJ1Y3RzKHN0cnVjdHNbdHlwZV0gPz8gW10sIHN0cnVjdHMsIC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsuLi5hbmNlc3RvcnMsIHR5cGVdKSkKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoaXNTb2xpZGl0eVR5cGUodHlwZSkpCiAgICAgICAgICAgIGNvbXBvbmVudHMucHVzaChhYmlQYXJhbWV0ZXIpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICB0aHJvdyBuZXcgVW5rbm93blR5cGVFcnJvcih7IHR5cGUgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gY29tcG9uZW50czsKICB9CiAgdmFyIHR5cGVXaXRob3V0VHVwbGVSZWdleDsKICB2YXIgaW5pdF9zdHJ1Y3RzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvc3RydWN0cy5qcyIoKSB7CiAgICAgIGluaXRfcmVnZXgoKTsKICAgICAgaW5pdF9hYmlJdGVtKCk7CiAgICAgIGluaXRfYWJpUGFyYW1ldGVyKCk7CiAgICAgIGluaXRfc2lnbmF0dXJlKCk7CiAgICAgIGluaXRfc3RydWN0KCk7CiAgICAgIGluaXRfc2lnbmF0dXJlcygpOwogICAgICBpbml0X3V0aWxzKCk7CiAgICAgIHR5cGVXaXRob3V0VHVwbGVSZWdleCA9IC9eKD88dHlwZT5bYS16QS1aJF9dW2EtekEtWjAtOSRfXSopKD88YXJyYXk+KD86XFtcZCo/XF0pKz8pPyQvOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9wYXJzZUFiaS5qcwogIGZ1bmN0aW9uIHBhcnNlQWJpKHNpZ25hdHVyZXMpIHsKICAgIGNvbnN0IHN0cnVjdHMgPSBwYXJzZVN0cnVjdHMoc2lnbmF0dXJlcyk7CiAgICBjb25zdCBhYmkyID0gW107CiAgICBjb25zdCBsZW5ndGggPSBzaWduYXR1cmVzLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmF0dXJlc1tpXTsKICAgICAgaWYgKGlzU3RydWN0U2lnbmF0dXJlKHNpZ25hdHVyZSkpCiAgICAgICAgY29udGludWU7CiAgICAgIGFiaTIucHVzaChwYXJzZVNpZ25hdHVyZShzaWduYXR1cmUsIHN0cnVjdHMpKTsKICAgIH0KICAgIHJldHVybiBhYmkyOwogIH0KICB2YXIgaW5pdF9wYXJzZUFiaSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9wYXJzZUFiaS5qcyIoKSB7CiAgICAgIGluaXRfc2lnbmF0dXJlcygpOwogICAgICBpbml0X3N0cnVjdHMoKTsKICAgICAgaW5pdF91dGlscygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9wYXJzZUFiaUl0ZW0uanMKICBmdW5jdGlvbiBwYXJzZUFiaUl0ZW0oc2lnbmF0dXJlKSB7CiAgICBsZXQgYWJpSXRlbTsKICAgIGlmICh0eXBlb2Ygc2lnbmF0dXJlID09PSAic3RyaW5nIikKICAgICAgYWJpSXRlbSA9IHBhcnNlU2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc3RydWN0cyA9IHBhcnNlU3RydWN0cyhzaWduYXR1cmUpOwogICAgICBjb25zdCBsZW5ndGggPSBzaWduYXR1cmUubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3Qgc2lnbmF0dXJlXyA9IHNpZ25hdHVyZVtpXTsKICAgICAgICBpZiAoaXNTdHJ1Y3RTaWduYXR1cmUoc2lnbmF0dXJlXykpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBhYmlJdGVtID0gcGFyc2VTaWduYXR1cmUoc2lnbmF0dXJlXywgc3RydWN0cyk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmICghYWJpSXRlbSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBYmlJdGVtRXJyb3IoeyBzaWduYXR1cmUgfSk7CiAgICByZXR1cm4gYWJpSXRlbTsKICB9CiAgdmFyIGluaXRfcGFyc2VBYmlJdGVtID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpSXRlbS5qcyIoKSB7CiAgICAgIGluaXRfYWJpSXRlbSgpOwogICAgICBpbml0X3NpZ25hdHVyZXMoKTsKICAgICAgaW5pdF9zdHJ1Y3RzKCk7CiAgICAgIGluaXRfdXRpbHMoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvcGFyc2VBYmlQYXJhbWV0ZXIuanMKICBmdW5jdGlvbiBwYXJzZUFiaVBhcmFtZXRlcjIocGFyYW0pIHsKICAgIGxldCBhYmlQYXJhbWV0ZXI7CiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAic3RyaW5nIikKICAgICAgYWJpUGFyYW1ldGVyID0gcGFyc2VBYmlQYXJhbWV0ZXIocGFyYW0sIHsKICAgICAgICBtb2RpZmllcnMKICAgICAgfSk7CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc3RydWN0cyA9IHBhcnNlU3RydWN0cyhwYXJhbSk7CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtLmxlbmd0aDsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHBhcmFtW2ldOwogICAgICAgIGlmIChpc1N0cnVjdFNpZ25hdHVyZShzaWduYXR1cmUpKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgYWJpUGFyYW1ldGVyID0gcGFyc2VBYmlQYXJhbWV0ZXIoc2lnbmF0dXJlLCB7IG1vZGlmaWVycywgc3RydWN0cyB9KTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKCFhYmlQYXJhbWV0ZXIpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWJpUGFyYW1ldGVyRXJyb3IoeyBwYXJhbSB9KTsKICAgIHJldHVybiBhYmlQYXJhbWV0ZXI7CiAgfQogIHZhciBpbml0X3BhcnNlQWJpUGFyYW1ldGVyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpUGFyYW1ldGVyLmpzIigpIHsKICAgICAgaW5pdF9hYmlQYXJhbWV0ZXIoKTsKICAgICAgaW5pdF9zaWduYXR1cmVzKCk7CiAgICAgIGluaXRfc3RydWN0cygpOwogICAgICBpbml0X3V0aWxzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpUGFyYW1ldGVycy5qcwogIGZ1bmN0aW9uIHBhcnNlQWJpUGFyYW1ldGVycyhwYXJhbXMpIHsKICAgIGNvbnN0IGFiaVBhcmFtZXRlcnMgPSBbXTsKICAgIGlmICh0eXBlb2YgcGFyYW1zID09PSAic3RyaW5nIikgewogICAgICBjb25zdCBwYXJhbWV0ZXJzID0gc3BsaXRQYXJhbWV0ZXJzKHBhcmFtcyk7CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtZXRlcnMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgYWJpUGFyYW1ldGVycy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtZXRlcnNbaV0sIHsgbW9kaWZpZXJzIH0pKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgc3RydWN0cyA9IHBhcnNlU3RydWN0cyhwYXJhbXMpOwogICAgICBjb25zdCBsZW5ndGggPSBwYXJhbXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gcGFyYW1zW2ldOwogICAgICAgIGlmIChpc1N0cnVjdFNpZ25hdHVyZShzaWduYXR1cmUpKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHNwbGl0UGFyYW1ldGVycyhzaWduYXR1cmUpOwogICAgICAgIGNvbnN0IGxlbmd0aDIgPSBwYXJhbWV0ZXJzLmxlbmd0aDsKICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxlbmd0aDI7IGsrKykgewogICAgICAgICAgYWJpUGFyYW1ldGVycy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtZXRlcnNba10sIHsgbW9kaWZpZXJzLCBzdHJ1Y3RzIH0pKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChhYmlQYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMCkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3IoeyBwYXJhbXMgfSk7CiAgICByZXR1cm4gYWJpUGFyYW1ldGVyczsKICB9CiAgdmFyIGluaXRfcGFyc2VBYmlQYXJhbWV0ZXJzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpUGFyYW1ldGVycy5qcyIoKSB7CiAgICAgIGluaXRfYWJpUGFyYW1ldGVyKCk7CiAgICAgIGluaXRfc2lnbmF0dXJlcygpOwogICAgICBpbml0X3N0cnVjdHMoKTsKICAgICAgaW5pdF91dGlscygpOwogICAgICBpbml0X3V0aWxzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2V4cG9ydHMvaW5kZXguanMKICB2YXIgaW5pdF9leHBvcnRzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2V4cG9ydHMvaW5kZXguanMiKCkgewogICAgICBpbml0X2Zvcm1hdEFiaUl0ZW0oKTsKICAgICAgaW5pdF9wYXJzZUFiaSgpOwogICAgICBpbml0X3BhcnNlQWJpSXRlbSgpOwogICAgICBpbml0X3BhcnNlQWJpUGFyYW1ldGVyKCk7CiAgICAgIGluaXRfcGFyc2VBYmlQYXJhbWV0ZXJzKCk7CiAgICAgIGluaXRfYWJpSXRlbSgpOwogICAgICBpbml0X2FiaVBhcmFtZXRlcigpOwogICAgICBpbml0X3NpZ25hdHVyZSgpOwogICAgICBpbml0X3NwbGl0UGFyYW1ldGVycygpOwogICAgICBpbml0X3N0cnVjdCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9mb3JtYXRBYmlJdGVtLmpzCiAgZnVuY3Rpb24gZm9ybWF0QWJpSXRlbTIoYWJpSXRlbSwgeyBpbmNsdWRlTmFtZSA9IGZhbHNlIH0gPSB7fSkgewogICAgaWYgKGFiaUl0ZW0udHlwZSAhPT0gImZ1bmN0aW9uIiAmJiBhYmlJdGVtLnR5cGUgIT09ICJldmVudCIgJiYgYWJpSXRlbS50eXBlICE9PSAiZXJyb3IiKQogICAgICB0aHJvdyBuZXcgSW52YWxpZERlZmluaXRpb25UeXBlRXJyb3IoYWJpSXRlbS50eXBlKTsKICAgIHJldHVybiBgJHthYmlJdGVtLm5hbWV9KCR7Zm9ybWF0QWJpUGFyYW1zKGFiaUl0ZW0uaW5wdXRzLCB7IGluY2x1ZGVOYW1lIH0pfSlgOwogIH0KICBmdW5jdGlvbiBmb3JtYXRBYmlQYXJhbXMocGFyYW1zLCB7IGluY2x1ZGVOYW1lID0gZmFsc2UgfSA9IHt9KSB7CiAgICBpZiAoIXBhcmFtcykKICAgICAgcmV0dXJuICIiOwogICAgcmV0dXJuIHBhcmFtcy5tYXAoKHBhcmFtKSA9PiBmb3JtYXRBYmlQYXJhbShwYXJhbSwgeyBpbmNsdWRlTmFtZSB9KSkuam9pbihpbmNsdWRlTmFtZSA/ICIsICIgOiAiLCIpOwogIH0KICBmdW5jdGlvbiBmb3JtYXRBYmlQYXJhbShwYXJhbSwgeyBpbmNsdWRlTmFtZSB9KSB7CiAgICBpZiAocGFyYW0udHlwZS5zdGFydHNXaXRoKCJ0dXBsZSIpKSB7CiAgICAgIHJldHVybiBgKCR7Zm9ybWF0QWJpUGFyYW1zKHBhcmFtLmNvbXBvbmVudHMsIHsgaW5jbHVkZU5hbWUgfSl9KSR7cGFyYW0udHlwZS5zbGljZSgidHVwbGUiLmxlbmd0aCl9YDsKICAgIH0KICAgIHJldHVybiBwYXJhbS50eXBlICsgKGluY2x1ZGVOYW1lICYmIHBhcmFtLm5hbWUgPyBgICR7cGFyYW0ubmFtZX1gIDogIiIpOwogIH0KICB2YXIgaW5pdF9mb3JtYXRBYmlJdGVtMiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9mb3JtYXRBYmlJdGVtLmpzIigpIHsKICAgICAgaW5pdF9hYmkoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL2lzSGV4LmpzCiAgZnVuY3Rpb24gaXNIZXgodmFsdWUsIHsgc3RyaWN0ID0gdHJ1ZSB9ID0ge30pIHsKICAgIGlmICghdmFsdWUpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJzdHJpbmciKQogICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc3RyaWN0ID8gL14weFswLTlhLWZBLUZdKiQvLnRlc3QodmFsdWUpIDogdmFsdWUuc3RhcnRzV2l0aCgiMHgiKTsKICB9CiAgdmFyIGluaXRfaXNIZXggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL2lzSGV4LmpzIigpIHsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL3NpemUuanMKICBmdW5jdGlvbiBzaXplKHZhbHVlKSB7CiAgICBpZiAoaXNIZXgodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgcmV0dXJuIE1hdGguY2VpbCgodmFsdWUubGVuZ3RoIC0gMikgLyAyKTsKICAgIHJldHVybiB2YWx1ZS5sZW5ndGg7CiAgfQogIHZhciBpbml0X3NpemUgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL3NpemUuanMiKCkgewogICAgICBpbml0X2lzSGV4KCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL3ZlcnNpb24uanMKICB2YXIgdmVyc2lvbjI7CiAgdmFyIGluaXRfdmVyc2lvbjIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvdmVyc2lvbi5qcyIoKSB7CiAgICAgIHZlcnNpb24yID0gIjIuMTkuOCI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2Jhc2UuanMKICBmdW5jdGlvbiBzZXRFcnJvckNvbmZpZyhjb25maWcpIHsKICAgIGVycm9yQ29uZmlnID0gY29uZmlnOwogIH0KICBmdW5jdGlvbiB3YWxrKGVyciwgZm4pIHsKICAgIGlmIChmbj8uKGVycikpCiAgICAgIHJldHVybiBlcnI7CiAgICBpZiAoZXJyICYmIHR5cGVvZiBlcnIgPT09ICJvYmplY3QiICYmICJjYXVzZSIgaW4gZXJyKQogICAgICByZXR1cm4gd2FsayhlcnIuY2F1c2UsIGZuKTsKICAgIHJldHVybiBmbiA/IG51bGwgOiBlcnI7CiAgfQogIHZhciBlcnJvckNvbmZpZywgQmFzZUVycm9yMjsKICB2YXIgaW5pdF9iYXNlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2Jhc2UuanMiKCkgewogICAgICBpbml0X3ZlcnNpb24yKCk7CiAgICAgIGVycm9yQ29uZmlnID0gewogICAgICAgIGdldERvY3NVcmw6ICh7IGRvY3NCYXNlVXJsLCBkb2NzUGF0aDogZG9jc1BhdGg5ID0gIiIsIGRvY3NTbHVnIH0pID0+IGRvY3NQYXRoOSA/IGAke2RvY3NCYXNlVXJsID8/ICJodHRwczovL3ZpZW0uc2gifSR7ZG9jc1BhdGg5fSR7ZG9jc1NsdWcgPyBgIyR7ZG9jc1NsdWd9YCA6ICIifWAgOiB2b2lkIDAsCiAgICAgICAgdmVyc2lvbjogdmVyc2lvbjIKICAgICAgfTsKICAgICAgQmFzZUVycm9yMiA9IGNsYXNzIF9CYXNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3Ioc2hvcnRNZXNzYWdlLCBhcmdzID0ge30pIHsKICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSAoKCkgPT4gewogICAgICAgICAgICBpZiAoYXJncy5jYXVzZSBpbnN0YW5jZW9mIF9CYXNlRXJyb3IpCiAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2F1c2UuZGV0YWlsczsKICAgICAgICAgICAgaWYgKGFyZ3MuY2F1c2U/Lm1lc3NhZ2UpCiAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2F1c2UubWVzc2FnZTsKICAgICAgICAgICAgcmV0dXJuIGFyZ3MuZGV0YWlsczsKICAgICAgICAgIH0pKCk7CiAgICAgICAgICBjb25zdCBkb2NzUGF0aDkgPSAoKCkgPT4gewogICAgICAgICAgICBpZiAoYXJncy5jYXVzZSBpbnN0YW5jZW9mIF9CYXNlRXJyb3IpCiAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2F1c2UuZG9jc1BhdGggfHwgYXJncy5kb2NzUGF0aDsKICAgICAgICAgICAgcmV0dXJuIGFyZ3MuZG9jc1BhdGg7CiAgICAgICAgICB9KSgpOwogICAgICAgICAgY29uc3QgZG9jc1VybCA9IGVycm9yQ29uZmlnLmdldERvY3NVcmw/Lih7IC4uLmFyZ3MsIGRvY3NQYXRoOiBkb2NzUGF0aDkgfSk7CiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gWwogICAgICAgICAgICBzaG9ydE1lc3NhZ2UgfHwgIkFuIGVycm9yIG9jY3VycmVkLiIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICAuLi5hcmdzLm1ldGFNZXNzYWdlcyA/IFsuLi5hcmdzLm1ldGFNZXNzYWdlcywgIiJdIDogW10sCiAgICAgICAgICAgIC4uLmRvY3NVcmwgPyBbYERvY3M6ICR7ZG9jc1VybH1gXSA6IFtdLAogICAgICAgICAgICAuLi5kZXRhaWxzID8gW2BEZXRhaWxzOiAke2RldGFpbHN9YF0gOiBbXSwKICAgICAgICAgICAgLi4uZXJyb3JDb25maWcudmVyc2lvbiA/IFtgVmVyc2lvbjogJHtlcnJvckNvbmZpZy52ZXJzaW9ufWBdIDogW10KICAgICAgICAgIF0uam9pbigiXG4iKTsKICAgICAgICAgIHN1cGVyKG1lc3NhZ2UsIGFyZ3MuY2F1c2UgPyB7IGNhdXNlOiBhcmdzLmNhdXNlIH0gOiB2b2lkIDApOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkZXRhaWxzIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiZG9jc1BhdGgiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJtZXRhTWVzc2FnZXMiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaG9ydE1lc3NhZ2UiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJ2ZXJzaW9uIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJCYXNlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7CiAgICAgICAgICB0aGlzLmRvY3NQYXRoID0gZG9jc1BhdGg5OwogICAgICAgICAgdGhpcy5tZXRhTWVzc2FnZXMgPSBhcmdzLm1ldGFNZXNzYWdlczsKICAgICAgICAgIHRoaXMubmFtZSA9IGFyZ3MubmFtZSA/PyB0aGlzLm5hbWU7CiAgICAgICAgICB0aGlzLnNob3J0TWVzc2FnZSA9IHNob3J0TWVzc2FnZTsKICAgICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb24yOwogICAgICAgIH0KICAgICAgICB3YWxrKGZuKSB7CiAgICAgICAgICByZXR1cm4gd2Fsayh0aGlzLCBmbik7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hYmkuanMKICB2YXIgQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yLCBBYmlDb25zdHJ1Y3RvclBhcmFtc05vdEZvdW5kRXJyb3IsIEFiaURlY29kaW5nRGF0YVNpemVJbnZhbGlkRXJyb3IsIEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yLCBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IsIEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yLCBBYmlFbmNvZGluZ0J5dGVzU2l6ZU1pc21hdGNoRXJyb3IsIEFiaUVuY29kaW5nTGVuZ3RoTWlzbWF0Y2hFcnJvciwgQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yLCBBYmlFcnJvck5vdEZvdW5kRXJyb3IsIEFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvciwgQWJpRXZlbnRTaWduYXR1cmVFbXB0eVRvcGljc0Vycm9yLCBBYmlFdmVudFNpZ25hdHVyZU5vdEZvdW5kRXJyb3IsIEFiaUV2ZW50Tm90Rm91bmRFcnJvciwgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yLCBBYmlGdW5jdGlvbk91dHB1dHNOb3RGb3VuZEVycm9yLCBBYmlGdW5jdGlvblNpZ25hdHVyZU5vdEZvdW5kRXJyb3IsIEFiaUl0ZW1BbWJpZ3VpdHlFcnJvciwgQnl0ZXNTaXplTWlzbWF0Y2hFcnJvciwgRGVjb2RlTG9nRGF0YU1pc21hdGNoLCBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCwgSW52YWxpZEFiaUVuY29kaW5nVHlwZUVycm9yLCBJbnZhbGlkQWJpRGVjb2RpbmdUeXBlRXJyb3IsIEludmFsaWRBcnJheUVycm9yLCBJbnZhbGlkRGVmaW5pdGlvblR5cGVFcnJvciwgVW5zdXBwb3J0ZWRQYWNrZWRBYmlUeXBlOwogIHZhciBpbml0X2FiaSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hYmkuanMiKCkgewogICAgICBpbml0X2Zvcm1hdEFiaUl0ZW0yKCk7CiAgICAgIGluaXRfc2l6ZSgpOwogICAgICBpbml0X2Jhc2UoKTsKICAgICAgQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDkgfSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICAiQSBjb25zdHJ1Y3RvciB3YXMgbm90IGZvdW5kIG9uIHRoZSBBQkkuIiwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgY29uc3RydWN0b3IgZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlDb25zdHJ1Y3RvclBhcmFtc05vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgICJDb25zdHJ1Y3RvciBhcmd1bWVudHMgd2VyZSBwcm92aWRlZCAoYGFyZ3NgKSwgYnV0IGEgY29uc3RydWN0b3IgcGFyYW1ldGVycyAoYGlucHV0c2ApIHdlcmUgbm90IGZvdW5kIG9uIHRoZSBBQkkuIiwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSwgYW5kIHRoYXQgdGhlIGBpbnB1dHNgIGF0dHJpYnV0ZSBvbiB0aGUgY29uc3RydWN0b3IgZXhpc3RzLiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlEZWNvZGluZ0RhdGFTaXplSW52YWxpZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGRhdGEsIHNpemU6IHNpemUzIH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYERhdGEgc2l6ZSBvZiAke3NpemUzfSBieXRlcyBpcyBpbnZhbGlkLmAsCiAgICAgICAgICAgICJTaXplIG11c3QgYmUgaW4gaW5jcmVtZW50cyBvZiAzMiBieXRlcyAoc2l6ZSAlIDMyID09PSAwKS4iCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYERhdGE6ICR7ZGF0YX0gKCR7c2l6ZTN9IGJ5dGVzKWBdLAogICAgICAgICAgICBuYW1lOiAiQWJpRGVjb2RpbmdEYXRhU2l6ZUludmFsaWRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRGVjb2RpbmdEYXRhU2l6ZVRvb1NtYWxsRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZGF0YSwgcGFyYW1zLCBzaXplOiBzaXplMyB9KSB7CiAgICAgICAgICBzdXBlcihbYERhdGEgc2l6ZSBvZiAke3NpemUzfSBieXRlcyBpcyB0b28gc21hbGwgZm9yIGdpdmVuIHBhcmFtZXRlcnMuYF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgUGFyYW1zOiAoJHtmb3JtYXRBYmlQYXJhbXMocGFyYW1zLCB7IGluY2x1ZGVOYW1lOiB0cnVlIH0pfSlgLAogICAgICAgICAgICAgIGBEYXRhOiAgICR7ZGF0YX0gKCR7c2l6ZTN9IGJ5dGVzKWAKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbmFtZTogIkFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRhdGEiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJwYXJhbXMiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaXplIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKICAgICAgICAgIHRoaXMuc2l6ZSA9IHNpemUzOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRGVjb2RpbmdaZXJvRGF0YUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCdDYW5ub3QgZGVjb2RlIHplcm8gZGF0YSAoIjB4Iikgd2l0aCBBQkkgcGFyYW1ldGVycy4nLCB7CiAgICAgICAgICAgIG5hbWU6ICJBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGV4cGVjdGVkTGVuZ3RoLCBnaXZlbkxlbmd0aCwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBBQkkgZW5jb2RpbmcgYXJyYXkgbGVuZ3RoIG1pc21hdGNoIGZvciB0eXBlICR7dHlwZX0uYCwKICAgICAgICAgICAgYEV4cGVjdGVkIGxlbmd0aDogJHtleHBlY3RlZExlbmd0aH1gLAogICAgICAgICAgICBgR2l2ZW4gbGVuZ3RoOiAke2dpdmVuTGVuZ3RofWAKICAgICAgICAgIF0uam9pbigiXG4iKSwgeyBuYW1lOiAiQWJpRW5jb2RpbmdBcnJheUxlbmd0aE1pc21hdGNoRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRW5jb2RpbmdCeXRlc1NpemVNaXNtYXRjaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGV4cGVjdGVkU2l6ZSwgdmFsdWUgfSkgewogICAgICAgICAgc3VwZXIoYFNpemUgb2YgYnl0ZXMgIiR7dmFsdWV9IiAoYnl0ZXMke3NpemUodmFsdWUpfSkgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgc2l6ZSAoYnl0ZXMke2V4cGVjdGVkU2l6ZX0pLmAsIHsgbmFtZTogIkFiaUVuY29kaW5nQnl0ZXNTaXplTWlzbWF0Y2hFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFbmNvZGluZ0xlbmd0aE1pc21hdGNoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZXhwZWN0ZWRMZW5ndGgsIGdpdmVuTGVuZ3RoIH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgIkFCSSBlbmNvZGluZyBwYXJhbXMvdmFsdWVzIGxlbmd0aCBtaXNtYXRjaC4iLAogICAgICAgICAgICBgRXhwZWN0ZWQgbGVuZ3RoIChwYXJhbXMpOiAke2V4cGVjdGVkTGVuZ3RofWAsCiAgICAgICAgICAgIGBHaXZlbiBsZW5ndGggKHZhbHVlcyk6ICR7Z2l2ZW5MZW5ndGh9YAogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IG5hbWU6ICJBYmlFbmNvZGluZ0xlbmd0aE1pc21hdGNoRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihlcnJvck5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBBcmd1bWVudHMgKFxgYXJnc1xgKSB3ZXJlIHByb3ZpZGVkIHRvICIke2Vycm9yTmFtZX0iLCBidXQgIiR7ZXJyb3JOYW1lfSIgb24gdGhlIEFCSSBkb2VzIG5vdCBjb250YWluIGFueSBwYXJhbWV0ZXJzIChcYGlucHV0c1xgKS5gLAogICAgICAgICAgICAiQ2Fubm90IGVuY29kZSBlcnJvciByZXN1bHQgd2l0aG91dCBrbm93aW5nIHdoYXQgdGhlIHBhcmFtZXRlciB0eXBlcyBhcmUuIiwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgaW5wdXRzIGV4aXN0IG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFcnJvck5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGVycm9yTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRXJyb3IgJHtlcnJvck5hbWUgPyBgIiR7ZXJyb3JOYW1lfSIgYCA6ICIifW5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXJyb3IgZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXJyb3JOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFcnJvclNpZ25hdHVyZU5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHNpZ25hdHVyZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYEVuY29kZWQgZXJyb3Igc2lnbmF0dXJlICIke3NpZ25hdHVyZX0iIG5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXJyb3IgZXhpc3RzIG9uIGl0LiIsCiAgICAgICAgICAgIGBZb3UgY2FuIGxvb2sgdXAgdGhlIGRlY29kZWQgc2lnbmF0dXJlIGhlcmU6IGh0dHBzOi8vb3BlbmNoYWluLnh5ei9zaWduYXR1cmVzP3F1ZXJ5PSR7c2lnbmF0dXJlfS5gCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaWduYXR1cmUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5zaWduYXR1cmUgPSBzaWduYXR1cmU7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFdmVudFNpZ25hdHVyZUVtcHR5VG9waWNzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcigiQ2Fubm90IGV4dHJhY3QgZXZlbnQgc2lnbmF0dXJlIGZyb20gZW1wdHkgdG9waWNzLiIsIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUV2ZW50U2lnbmF0dXJlRW1wdHlUb3BpY3NFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRXZlbnRTaWduYXR1cmVOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihzaWduYXR1cmUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBFbmNvZGVkIGV2ZW50IHNpZ25hdHVyZSAiJHtzaWduYXR1cmV9IiBub3QgZm91bmQgb24gQUJJLmAsCiAgICAgICAgICAgICJNYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBBQkkgYW5kIHRoYXQgdGhlIGV2ZW50IGV4aXN0cyBvbiBpdC4iLAogICAgICAgICAgICBgWW91IGNhbiBsb29rIHVwIHRoZSBzaWduYXR1cmUgaGVyZTogaHR0cHM6Ly9vcGVuY2hhaW4ueHl6L3NpZ25hdHVyZXM/cXVlcnk9JHtzaWduYXR1cmV9LmAKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXZlbnRTaWduYXR1cmVOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFdmVudE5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGV2ZW50TmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRXZlbnQgJHtldmVudE5hbWUgPyBgIiR7ZXZlbnROYW1lfSIgYCA6ICIifW5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXZlbnQgZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXZlbnROb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlGdW5jdGlvbk5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGZ1bmN0aW9uTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRnVuY3Rpb24gJHtmdW5jdGlvbk5hbWUgPyBgIiR7ZnVuY3Rpb25OYW1lfSIgYCA6ICIifW5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZnVuY3Rpb24gZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlGdW5jdGlvbk91dHB1dHNOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihmdW5jdGlvbk5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBGdW5jdGlvbiAiJHtmdW5jdGlvbk5hbWV9IiBkb2VzIG5vdCBjb250YWluIGFueSBcYG91dHB1dHNcYCBvbiBBQkkuYCwKICAgICAgICAgICAgIkNhbm5vdCBkZWNvZGUgZnVuY3Rpb24gcmVzdWx0IHdpdGhvdXQga25vd2luZyB3aGF0IHRoZSBwYXJhbWV0ZXIgdHlwZXMgYXJlLiIsCiAgICAgICAgICAgICJNYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBBQkkgYW5kIHRoYXQgdGhlIGZ1bmN0aW9uIGV4aXN0cyBvbiBpdC4iCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUZ1bmN0aW9uT3V0cHV0c05vdEZvdW5kRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3Ioc2lnbmF0dXJlLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDkgfSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRW5jb2RlZCBmdW5jdGlvbiBzaWduYXR1cmUgIiR7c2lnbmF0dXJlfSIgbm90IGZvdW5kIG9uIEFCSS5gLAogICAgICAgICAgICAiTWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgQUJJIGFuZCB0aGF0IHRoZSBmdW5jdGlvbiBleGlzdHMgb24gaXQuIiwKICAgICAgICAgICAgYFlvdSBjYW4gbG9vayB1cCB0aGUgc2lnbmF0dXJlIGhlcmU6IGh0dHBzOi8vb3BlbmNoYWluLnh5ei9zaWduYXR1cmVzP3F1ZXJ5PSR7c2lnbmF0dXJlfS5gCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpSXRlbUFtYmlndWl0eUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih4LCB5KSB7CiAgICAgICAgICBzdXBlcigiRm91bmQgYW1iaWd1b3VzIHR5cGVzIGluIG92ZXJsb2FkZWQgQUJJIGl0ZW1zLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgYFxgJHt4LnR5cGV9XGAgaW4gXGAke2Zvcm1hdEFiaUl0ZW0yKHguYWJpSXRlbSl9XGAsIGFuZGAsCiAgICAgICAgICAgICAgYFxgJHt5LnR5cGV9XGAgaW4gXGAke2Zvcm1hdEFiaUl0ZW0yKHkuYWJpSXRlbSl9XGBgLAogICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICJUaGVzZSB0eXBlcyBlbmNvZGUgZGlmZmVyZW50bHkgYW5kIGNhbm5vdCBiZSBkaXN0aW5ndWlzaGVkIGF0IHJ1bnRpbWUuIiwKICAgICAgICAgICAgICAiUmVtb3ZlIG9uZSBvZiB0aGUgYW1iaWd1b3VzIGl0ZW1zIGluIHRoZSBBQkkuIgogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQWJpSXRlbUFtYmlndWl0eUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBCeXRlc1NpemVNaXNtYXRjaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGV4cGVjdGVkU2l6ZSwgZ2l2ZW5TaXplIH0pIHsKICAgICAgICAgIHN1cGVyKGBFeHBlY3RlZCBieXRlcyR7ZXhwZWN0ZWRTaXplfSwgZ290IGJ5dGVzJHtnaXZlblNpemV9LmAsIHsKICAgICAgICAgICAgbmFtZTogIkJ5dGVzU2l6ZU1pc21hdGNoRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIERlY29kZUxvZ0RhdGFNaXNtYXRjaCA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBhYmlJdGVtLCBkYXRhLCBwYXJhbXMsIHNpemU6IHNpemUzIH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYERhdGEgc2l6ZSBvZiAke3NpemUzfSBieXRlcyBpcyB0b28gc21hbGwgZm9yIG5vbi1pbmRleGVkIGV2ZW50IHBhcmFtZXRlcnMuYAogICAgICAgICAgXS5qb2luKCJcbiIpLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBQYXJhbXM6ICgke2Zvcm1hdEFiaVBhcmFtcyhwYXJhbXMsIHsgaW5jbHVkZU5hbWU6IHRydWUgfSl9KWAsCiAgICAgICAgICAgICAgYERhdGE6ICAgJHtkYXRhfSAoJHtzaXplM30gYnl0ZXMpYAogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiRGVjb2RlTG9nRGF0YU1pc21hdGNoIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFiaUl0ZW0iLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkYXRhIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAicGFyYW1zIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2l6ZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmFiaUl0ZW0gPSBhYmlJdGVtOwogICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOwogICAgICAgICAgdGhpcy5zaXplID0gc2l6ZTM7CiAgICAgICAgfQogICAgICB9OwogICAgICBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBhYmlJdGVtLCBwYXJhbSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBFeHBlY3RlZCBhIHRvcGljIGZvciBpbmRleGVkIGV2ZW50IHBhcmFtZXRlciR7cGFyYW0ubmFtZSA/IGAgIiR7cGFyYW0ubmFtZX0iYCA6ICIifSBvbiBldmVudCAiJHtmb3JtYXRBYmlJdGVtMihhYmlJdGVtLCB7IGluY2x1ZGVOYW1lOiB0cnVlIH0pfSIuYAogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IG5hbWU6ICJEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCIgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFiaUl0ZW0iLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5hYmlJdGVtID0gYWJpSXRlbTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBYmlFbmNvZGluZ1R5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIGVuY29kaW5nIHR5cGUuYCwKICAgICAgICAgICAgIlBsZWFzZSBwcm92aWRlIGEgdmFsaWQgQUJJIHR5cGUuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIG5hbWU6ICJJbnZhbGlkQWJpRW5jb2RpbmdUeXBlIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBYmlEZWNvZGluZ1R5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIGRlY29kaW5nIHR5cGUuYCwKICAgICAgICAgICAgIlBsZWFzZSBwcm92aWRlIGEgdmFsaWQgQUJJIHR5cGUuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIG5hbWU6ICJJbnZhbGlkQWJpRGVjb2RpbmdUeXBlIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBcnJheUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkgewogICAgICAgICAgc3VwZXIoW2BWYWx1ZSAiJHt2YWx1ZX0iIGlzIG5vdCBhIHZhbGlkIGFycmF5LmBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgbmFtZTogIkludmFsaWRBcnJheUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkRGVmaW5pdGlvblR5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIGRlZmluaXRpb24gdHlwZS5gLAogICAgICAgICAgICAnVmFsaWQgdHlwZXM6ICJmdW5jdGlvbiIsICJldmVudCIsICJlcnJvciInCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsgbmFtZTogIkludmFsaWREZWZpbml0aW9uVHlwZUVycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFVuc3VwcG9ydGVkUGFja2VkQWJpVHlwZSA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSkgewogICAgICAgICAgc3VwZXIoYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHBhY2tlZCBlbmNvZGluZy5gLCB7CiAgICAgICAgICAgIG5hbWU6ICJVbnN1cHBvcnRlZFBhY2tlZEFiaVR5cGUiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2RhdGEuanMKICB2YXIgU2xpY2VPZmZzZXRPdXRPZkJvdW5kc0Vycm9yLCBTaXplRXhjZWVkc1BhZGRpbmdTaXplRXJyb3IsIEludmFsaWRCeXRlc0xlbmd0aEVycm9yOwogIHZhciBpbml0X2RhdGEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvZGF0YS5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgb2Zmc2V0LCBwb3NpdGlvbiwgc2l6ZTogc2l6ZTMgfSkgewogICAgICAgICAgc3VwZXIoYFNsaWNlICR7cG9zaXRpb24gPT09ICJzdGFydCIgPyAic3RhcnRpbmciIDogImVuZGluZyJ9IGF0IG9mZnNldCAiJHtvZmZzZXR9IiBpcyBvdXQtb2YtYm91bmRzIChzaXplOiAke3NpemUzfSkuYCwgeyBuYW1lOiAiU2xpY2VPZmZzZXRPdXRPZkJvdW5kc0Vycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFNpemVFeGNlZWRzUGFkZGluZ1NpemVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBzaXplOiBzaXplMywgdGFyZ2V0U2l6ZSwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihgJHt0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7dHlwZS5zbGljZSgxKS50b0xvd2VyQ2FzZSgpfSBzaXplICgke3NpemUzfSkgZXhjZWVkcyBwYWRkaW5nIHNpemUgKCR7dGFyZ2V0U2l6ZX0pLmAsIHsgbmFtZTogIlNpemVFeGNlZWRzUGFkZGluZ1NpemVFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQnl0ZXNMZW5ndGhFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBzaXplOiBzaXplMywgdGFyZ2V0U2l6ZSwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihgJHt0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7dHlwZS5zbGljZSgxKS50b0xvd2VyQ2FzZSgpfSBpcyBleHBlY3RlZCB0byBiZSAke3RhcmdldFNpemV9ICR7dHlwZX0gbG9uZywgYnV0IGlzICR7c2l6ZTN9ICR7dHlwZX0gbG9uZy5gLCB7IG5hbWU6ICJJbnZhbGlkQnl0ZXNMZW5ndGhFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvcGFkLmpzCiAgZnVuY3Rpb24gcGFkKGhleE9yQnl0ZXMsIHsgZGlyLCBzaXplOiBzaXplMyA9IDMyIH0gPSB7fSkgewogICAgaWYgKHR5cGVvZiBoZXhPckJ5dGVzID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIHBhZEhleChoZXhPckJ5dGVzLCB7IGRpciwgc2l6ZTogc2l6ZTMgfSk7CiAgICByZXR1cm4gcGFkQnl0ZXMoaGV4T3JCeXRlcywgeyBkaXIsIHNpemU6IHNpemUzIH0pOwogIH0KICBmdW5jdGlvbiBwYWRIZXgoaGV4XywgeyBkaXIsIHNpemU6IHNpemUzID0gMzIgfSA9IHt9KSB7CiAgICBpZiAoc2l6ZTMgPT09IG51bGwpCiAgICAgIHJldHVybiBoZXhfOwogICAgY29uc3QgaGV4ID0gaGV4Xy5yZXBsYWNlKCIweCIsICIiKTsKICAgIGlmIChoZXgubGVuZ3RoID4gc2l6ZTMgKiAyKQogICAgICB0aHJvdyBuZXcgU2l6ZUV4Y2VlZHNQYWRkaW5nU2l6ZUVycm9yKHsKICAgICAgICBzaXplOiBNYXRoLmNlaWwoaGV4Lmxlbmd0aCAvIDIpLAogICAgICAgIHRhcmdldFNpemU6IHNpemUzLAogICAgICAgIHR5cGU6ICJoZXgiCiAgICAgIH0pOwogICAgcmV0dXJuIGAweCR7aGV4W2RpciA9PT0gInJpZ2h0IiA/ICJwYWRFbmQiIDogInBhZFN0YXJ0Il0oc2l6ZTMgKiAyLCAiMCIpfWA7CiAgfQogIGZ1bmN0aW9uIHBhZEJ5dGVzKGJ5dGVzMiwgeyBkaXIsIHNpemU6IHNpemUzID0gMzIgfSA9IHt9KSB7CiAgICBpZiAoc2l6ZTMgPT09IG51bGwpCiAgICAgIHJldHVybiBieXRlczI7CiAgICBpZiAoYnl0ZXMyLmxlbmd0aCA+IHNpemUzKQogICAgICB0aHJvdyBuZXcgU2l6ZUV4Y2VlZHNQYWRkaW5nU2l6ZUVycm9yKHsKICAgICAgICBzaXplOiBieXRlczIubGVuZ3RoLAogICAgICAgIHRhcmdldFNpemU6IHNpemUzLAogICAgICAgIHR5cGU6ICJieXRlcyIKICAgICAgfSk7CiAgICBjb25zdCBwYWRkZWRCeXRlcyA9IG5ldyBVaW50OEFycmF5KHNpemUzKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTM7IGkrKykgewogICAgICBjb25zdCBwYWRFbmQgPSBkaXIgPT09ICJyaWdodCI7CiAgICAgIHBhZGRlZEJ5dGVzW3BhZEVuZCA/IGkgOiBzaXplMyAtIGkgLSAxXSA9IGJ5dGVzMltwYWRFbmQgPyBpIDogYnl0ZXMyLmxlbmd0aCAtIGkgLSAxXTsKICAgIH0KICAgIHJldHVybiBwYWRkZWRCeXRlczsKICB9CiAgdmFyIGluaXRfcGFkID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9wYWQuanMiKCkgewogICAgICBpbml0X2RhdGEoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvZW5jb2RpbmcuanMKICB2YXIgSW50ZWdlck91dE9mUmFuZ2VFcnJvciwgSW52YWxpZEJ5dGVzQm9vbGVhbkVycm9yLCBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yLCBJbnZhbGlkSGV4VmFsdWVFcnJvciwgU2l6ZU92ZXJmbG93RXJyb3I7CiAgdmFyIGluaXRfZW5jb2RpbmcgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvZW5jb2RpbmcuanMiKCkgewogICAgICBpbml0X2Jhc2UoKTsKICAgICAgSW50ZWdlck91dE9mUmFuZ2VFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBtYXgsIG1pbiwgc2lnbmVkLCBzaXplOiBzaXplMywgdmFsdWUgfSkgewogICAgICAgICAgc3VwZXIoYE51bWJlciAiJHt2YWx1ZX0iIGlzIG5vdCBpbiBzYWZlICR7c2l6ZTMgPyBgJHtzaXplMyAqIDh9LWJpdCAke3NpZ25lZCA/ICJzaWduZWQiIDogInVuc2lnbmVkIn0gYCA6ICIifWludGVnZXIgcmFuZ2UgJHttYXggPyBgKCR7bWlufSB0byAke21heH0pYCA6IGAoYWJvdmUgJHttaW59KWB9YCwgeyBuYW1lOiAiSW50ZWdlck91dE9mUmFuZ2VFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQnl0ZXNCb29sZWFuRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGJ5dGVzMikgewogICAgICAgICAgc3VwZXIoYEJ5dGVzIHZhbHVlICIke2J5dGVzMn0iIGlzIG5vdCBhIHZhbGlkIGJvb2xlYW4uIFRoZSBieXRlcyBhcnJheSBtdXN0IGNvbnRhaW4gYSBzaW5nbGUgYnl0ZSBvZiBlaXRoZXIgYSAwIG9yIDEgdmFsdWUuYCwgewogICAgICAgICAgICBuYW1lOiAiSW52YWxpZEJ5dGVzQm9vbGVhbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihoZXgpIHsKICAgICAgICAgIHN1cGVyKGBIZXggdmFsdWUgIiR7aGV4fSIgaXMgbm90IGEgdmFsaWQgYm9vbGVhbi4gVGhlIGhleCB2YWx1ZSBtdXN0IGJlICIweDAiIChmYWxzZSkgb3IgIjB4MSIgKHRydWUpLmAsIHsgbmFtZTogIkludmFsaWRIZXhCb29sZWFuRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgSW52YWxpZEhleFZhbHVlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7CiAgICAgICAgICBzdXBlcihgSGV4IHZhbHVlICIke3ZhbHVlfSIgaXMgYW4gb2RkIGxlbmd0aCAoJHt2YWx1ZS5sZW5ndGh9KS4gSXQgbXVzdCBiZSBhbiBldmVuIGxlbmd0aC5gLCB7IG5hbWU6ICJJbnZhbGlkSGV4VmFsdWVFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTaXplT3ZlcmZsb3dFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBnaXZlblNpemUsIG1heFNpemUgfSkgewogICAgICAgICAgc3VwZXIoYFNpemUgY2Fubm90IGV4Y2VlZCAke21heFNpemV9IGJ5dGVzLiBHaXZlbiBzaXplOiAke2dpdmVuU2l6ZX0gYnl0ZXMuYCwgeyBuYW1lOiAiU2l6ZU92ZXJmbG93RXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL3RyaW0uanMKICBmdW5jdGlvbiB0cmltKGhleE9yQnl0ZXMsIHsgZGlyID0gImxlZnQiIH0gPSB7fSkgewogICAgbGV0IGRhdGEgPSB0eXBlb2YgaGV4T3JCeXRlcyA9PT0gInN0cmluZyIgPyBoZXhPckJ5dGVzLnJlcGxhY2UoIjB4IiwgIiIpIDogaGV4T3JCeXRlczsKICAgIGxldCBzbGljZUxlbmd0aCA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoIC0gMTsgaSsrKSB7CiAgICAgIGlmIChkYXRhW2RpciA9PT0gImxlZnQiID8gaSA6IGRhdGEubGVuZ3RoIC0gaSAtIDFdLnRvU3RyaW5nKCkgPT09ICIwIikKICAgICAgICBzbGljZUxlbmd0aCsrOwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBkYXRhID0gZGlyID09PSAibGVmdCIgPyBkYXRhLnNsaWNlKHNsaWNlTGVuZ3RoKSA6IGRhdGEuc2xpY2UoMCwgZGF0YS5sZW5ndGggLSBzbGljZUxlbmd0aCk7CiAgICBpZiAodHlwZW9mIGhleE9yQnl0ZXMgPT09ICJzdHJpbmciKSB7CiAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMSAmJiBkaXIgPT09ICJyaWdodCIpCiAgICAgICAgZGF0YSA9IGAke2RhdGF9MGA7CiAgICAgIHJldHVybiBgMHgke2RhdGEubGVuZ3RoICUgMiA9PT0gMSA/IGAwJHtkYXRhfWAgOiBkYXRhfWA7CiAgICB9CiAgICByZXR1cm4gZGF0YTsKICB9CiAgdmFyIGluaXRfdHJpbSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvdHJpbS5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5jb2RpbmcvZnJvbUhleC5qcwogIGZ1bmN0aW9uIGFzc2VydFNpemUoaGV4T3JCeXRlcywgeyBzaXplOiBzaXplMyB9KSB7CiAgICBpZiAoc2l6ZShoZXhPckJ5dGVzKSA+IHNpemUzKQogICAgICB0aHJvdyBuZXcgU2l6ZU92ZXJmbG93RXJyb3IoewogICAgICAgIGdpdmVuU2l6ZTogc2l6ZShoZXhPckJ5dGVzKSwKICAgICAgICBtYXhTaXplOiBzaXplMwogICAgICB9KTsKICB9CiAgZnVuY3Rpb24gZnJvbUhleChoZXgsIHRvT3JPcHRzKSB7CiAgICBjb25zdCBvcHRzID0gdHlwZW9mIHRvT3JPcHRzID09PSAic3RyaW5nIiA/IHsgdG86IHRvT3JPcHRzIH0gOiB0b09yT3B0czsKICAgIGNvbnN0IHRvID0gb3B0cy50bzsKICAgIGlmICh0byA9PT0gIm51bWJlciIpCiAgICAgIHJldHVybiBoZXhUb051bWJlcihoZXgsIG9wdHMpOwogICAgaWYgKHRvID09PSAiYmlnaW50IikKICAgICAgcmV0dXJuIGhleFRvQmlnSW50KGhleCwgb3B0cyk7CiAgICBpZiAodG8gPT09ICJzdHJpbmciKQogICAgICByZXR1cm4gaGV4VG9TdHJpbmcoaGV4LCBvcHRzKTsKICAgIGlmICh0byA9PT0gImJvb2xlYW4iKQogICAgICByZXR1cm4gaGV4VG9Cb29sKGhleCwgb3B0cyk7CiAgICByZXR1cm4gaGV4VG9CeXRlcyhoZXgsIG9wdHMpOwogIH0KICBmdW5jdGlvbiBoZXhUb0JpZ0ludChoZXgsIG9wdHMgPSB7fSkgewogICAgY29uc3QgeyBzaWduZWQgfSA9IG9wdHM7CiAgICBpZiAob3B0cy5zaXplKQogICAgICBhc3NlcnRTaXplKGhleCwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICBjb25zdCB2YWx1ZSA9IEJpZ0ludChoZXgpOwogICAgaWYgKCFzaWduZWQpCiAgICAgIHJldHVybiB2YWx1ZTsKICAgIGNvbnN0IHNpemUzID0gKGhleC5sZW5ndGggLSAyKSAvIDI7CiAgICBjb25zdCBtYXggPSAoMW4gPDwgQmlnSW50KHNpemUzKSAqIDhuIC0gMW4pIC0gMW47CiAgICBpZiAodmFsdWUgPD0gbWF4KQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gdmFsdWUgLSBCaWdJbnQoYDB4JHsiZiIucGFkU3RhcnQoc2l6ZTMgKiAyLCAiZiIpfWApIC0gMW47CiAgfQogIGZ1bmN0aW9uIGhleFRvQm9vbChoZXhfLCBvcHRzID0ge30pIHsKICAgIGxldCBoZXggPSBoZXhfOwogICAgaWYgKG9wdHMuc2l6ZSkgewogICAgICBhc3NlcnRTaXplKGhleCwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICAgIGhleCA9IHRyaW0oaGV4KTsKICAgIH0KICAgIGlmICh0cmltKGhleCkgPT09ICIweDAwIikKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKHRyaW0oaGV4KSA9PT0gIjB4MDEiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIHRocm93IG5ldyBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yKGhleCk7CiAgfQogIGZ1bmN0aW9uIGhleFRvTnVtYmVyKGhleCwgb3B0cyA9IHt9KSB7CiAgICByZXR1cm4gTnVtYmVyKGhleFRvQmlnSW50KGhleCwgb3B0cykpOwogIH0KICBmdW5jdGlvbiBoZXhUb1N0cmluZyhoZXgsIG9wdHMgPSB7fSkgewogICAgbGV0IGJ5dGVzMiA9IGhleFRvQnl0ZXMoaGV4KTsKICAgIGlmIChvcHRzLnNpemUpIHsKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICBieXRlczIgPSB0cmltKGJ5dGVzMiwgeyBkaXI6ICJyaWdodCIgfSk7CiAgICB9CiAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGJ5dGVzMik7CiAgfQogIHZhciBpbml0X2Zyb21IZXggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbmNvZGluZy9mcm9tSGV4LmpzIigpIHsKICAgICAgaW5pdF9lbmNvZGluZygpOwogICAgICBpbml0X3NpemUoKTsKICAgICAgaW5pdF90cmltKCk7CiAgICAgIGluaXRfdG9CeXRlcygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL3RvSGV4LmpzCiAgZnVuY3Rpb24gdG9IZXgodmFsdWUsIG9wdHMgPSB7fSkgewogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIgfHwgdHlwZW9mIHZhbHVlID09PSAiYmlnaW50IikKICAgICAgcmV0dXJuIG51bWJlclRvSGV4KHZhbHVlLCBvcHRzKTsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB7CiAgICAgIHJldHVybiBzdHJpbmdUb0hleCh2YWx1ZSwgb3B0cyk7CiAgICB9CiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAiYm9vbGVhbiIpCiAgICAgIHJldHVybiBib29sVG9IZXgodmFsdWUsIG9wdHMpOwogICAgcmV0dXJuIGJ5dGVzVG9IZXgodmFsdWUsIG9wdHMpOwogIH0KICBmdW5jdGlvbiBib29sVG9IZXgodmFsdWUsIG9wdHMgPSB7fSkgewogICAgY29uc3QgaGV4ID0gYDB4JHtOdW1iZXIodmFsdWUpfWA7CiAgICBpZiAodHlwZW9mIG9wdHMuc2l6ZSA9PT0gIm51bWJlciIpIHsKICAgICAgYXNzZXJ0U2l6ZShoZXgsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICByZXR1cm4gcGFkKGhleCwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICB9CiAgICByZXR1cm4gaGV4OwogIH0KICBmdW5jdGlvbiBieXRlc1RvSGV4KHZhbHVlLCBvcHRzID0ge30pIHsKICAgIGxldCBzdHJpbmcgPSAiIjsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKICAgICAgc3RyaW5nICs9IGhleGVzW3ZhbHVlW2ldXTsKICAgIH0KICAgIGNvbnN0IGhleCA9IGAweCR7c3RyaW5nfWA7CiAgICBpZiAodHlwZW9mIG9wdHMuc2l6ZSA9PT0gIm51bWJlciIpIHsKICAgICAgYXNzZXJ0U2l6ZShoZXgsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICByZXR1cm4gcGFkKGhleCwgeyBkaXI6ICJyaWdodCIsIHNpemU6IG9wdHMuc2l6ZSB9KTsKICAgIH0KICAgIHJldHVybiBoZXg7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvSGV4KHZhbHVlXywgb3B0cyA9IHt9KSB7CiAgICBjb25zdCB7IHNpZ25lZCwgc2l6ZTogc2l6ZTMgfSA9IG9wdHM7CiAgICBjb25zdCB2YWx1ZSA9IEJpZ0ludCh2YWx1ZV8pOwogICAgbGV0IG1heFZhbHVlOwogICAgaWYgKHNpemUzKSB7CiAgICAgIGlmIChzaWduZWQpCiAgICAgICAgbWF4VmFsdWUgPSAoMW4gPDwgQmlnSW50KHNpemUzKSAqIDhuIC0gMW4pIC0gMW47CiAgICAgIGVsc2UKICAgICAgICBtYXhWYWx1ZSA9IDJuICoqIChCaWdJbnQoc2l6ZTMpICogOG4pIC0gMW47CiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZV8gPT09ICJudW1iZXIiKSB7CiAgICAgIG1heFZhbHVlID0gQmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTsKICAgIH0KICAgIGNvbnN0IG1pblZhbHVlID0gdHlwZW9mIG1heFZhbHVlID09PSAiYmlnaW50IiAmJiBzaWduZWQgPyAtbWF4VmFsdWUgLSAxbiA6IDA7CiAgICBpZiAobWF4VmFsdWUgJiYgdmFsdWUgPiBtYXhWYWx1ZSB8fCB2YWx1ZSA8IG1pblZhbHVlKSB7CiAgICAgIGNvbnN0IHN1ZmZpeCA9IHR5cGVvZiB2YWx1ZV8gPT09ICJiaWdpbnQiID8gIm4iIDogIiI7CiAgICAgIHRocm93IG5ldyBJbnRlZ2VyT3V0T2ZSYW5nZUVycm9yKHsKICAgICAgICBtYXg6IG1heFZhbHVlID8gYCR7bWF4VmFsdWV9JHtzdWZmaXh9YCA6IHZvaWQgMCwKICAgICAgICBtaW46IGAke21pblZhbHVlfSR7c3VmZml4fWAsCiAgICAgICAgc2lnbmVkLAogICAgICAgIHNpemU6IHNpemUzLAogICAgICAgIHZhbHVlOiBgJHt2YWx1ZV99JHtzdWZmaXh9YAogICAgICB9KTsKICAgIH0KICAgIGNvbnN0IGhleCA9IGAweCR7KHNpZ25lZCAmJiB2YWx1ZSA8IDAgPyAoMW4gPDwgQmlnSW50KHNpemUzICogOCkpICsgQmlnSW50KHZhbHVlKSA6IHZhbHVlKS50b1N0cmluZygxNil9YDsKICAgIGlmIChzaXplMykKICAgICAgcmV0dXJuIHBhZChoZXgsIHsgc2l6ZTogc2l6ZTMgfSk7CiAgICByZXR1cm4gaGV4OwogIH0KICBmdW5jdGlvbiBzdHJpbmdUb0hleCh2YWx1ZV8sIG9wdHMgPSB7fSkgewogICAgY29uc3QgdmFsdWUgPSBlbmNvZGVyLmVuY29kZSh2YWx1ZV8pOwogICAgcmV0dXJuIGJ5dGVzVG9IZXgodmFsdWUsIG9wdHMpOwogIH0KICB2YXIgaGV4ZXMsIGVuY29kZXI7CiAgdmFyIGluaXRfdG9IZXggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbmNvZGluZy90b0hleC5qcyIoKSB7CiAgICAgIGluaXRfZW5jb2RpbmcoKTsKICAgICAgaW5pdF9wYWQoKTsKICAgICAgaW5pdF9mcm9tSGV4KCk7CiAgICAgIGhleGVzID0gLyogQF9fUFVSRV9fICovIEFycmF5LmZyb20oeyBsZW5ndGg6IDI1NiB9LCAoX3YsIGkpID0+IGkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICIwIikpOwogICAgICBlbmNvZGVyID0gLyogQF9fUFVSRV9fICovIG5ldyBUZXh0RW5jb2RlcigpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL3RvQnl0ZXMuanMKICBmdW5jdGlvbiB0b0J5dGVzKHZhbHVlLCBvcHRzID0ge30pIHsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJudW1iZXIiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gImJpZ2ludCIpCiAgICAgIHJldHVybiBudW1iZXJUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJib29sZWFuIikKICAgICAgcmV0dXJuIGJvb2xUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICAgIGlmIChpc0hleCh2YWx1ZSkpCiAgICAgIHJldHVybiBoZXhUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICAgIHJldHVybiBzdHJpbmdUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICB9CiAgZnVuY3Rpb24gYm9vbFRvQnl0ZXModmFsdWUsIG9wdHMgPSB7fSkgewogICAgY29uc3QgYnl0ZXMyID0gbmV3IFVpbnQ4QXJyYXkoMSk7CiAgICBieXRlczJbMF0gPSBOdW1iZXIodmFsdWUpOwogICAgaWYgKHR5cGVvZiBvcHRzLnNpemUgPT09ICJudW1iZXIiKSB7CiAgICAgIGFzc2VydFNpemUoYnl0ZXMyLCB7IHNpemU6IG9wdHMuc2l6ZSB9KTsKICAgICAgcmV0dXJuIHBhZChieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgfQogICAgcmV0dXJuIGJ5dGVzMjsKICB9CiAgZnVuY3Rpb24gY2hhckNvZGVUb0Jhc2UxNihjaGFyKSB7CiAgICBpZiAoY2hhciA+PSBjaGFyQ29kZU1hcC56ZXJvICYmIGNoYXIgPD0gY2hhckNvZGVNYXAubmluZSkKICAgICAgcmV0dXJuIGNoYXIgLSBjaGFyQ29kZU1hcC56ZXJvOwogICAgaWYgKGNoYXIgPj0gY2hhckNvZGVNYXAuQSAmJiBjaGFyIDw9IGNoYXJDb2RlTWFwLkYpCiAgICAgIHJldHVybiBjaGFyIC0gKGNoYXJDb2RlTWFwLkEgLSAxMCk7CiAgICBpZiAoY2hhciA+PSBjaGFyQ29kZU1hcC5hICYmIGNoYXIgPD0gY2hhckNvZGVNYXAuZikKICAgICAgcmV0dXJuIGNoYXIgLSAoY2hhckNvZGVNYXAuYSAtIDEwKTsKICAgIHJldHVybiB2b2lkIDA7CiAgfQogIGZ1bmN0aW9uIGhleFRvQnl0ZXMoaGV4Xywgb3B0cyA9IHt9KSB7CiAgICBsZXQgaGV4ID0gaGV4XzsKICAgIGlmIChvcHRzLnNpemUpIHsKICAgICAgYXNzZXJ0U2l6ZShoZXgsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICBoZXggPSBwYWQoaGV4LCB7IGRpcjogInJpZ2h0Iiwgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgfQogICAgbGV0IGhleFN0cmluZyA9IGhleC5zbGljZSgyKTsKICAgIGlmIChoZXhTdHJpbmcubGVuZ3RoICUgMikKICAgICAgaGV4U3RyaW5nID0gYDAke2hleFN0cmluZ31gOwogICAgY29uc3QgbGVuZ3RoID0gaGV4U3RyaW5nLmxlbmd0aCAvIDI7CiAgICBjb25zdCBieXRlczIgPSBuZXcgVWludDhBcnJheShsZW5ndGgpOwogICAgZm9yIChsZXQgaW5kZXgyID0gMCwgaiA9IDA7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyKyspIHsKICAgICAgY29uc3QgbmliYmxlTGVmdCA9IGNoYXJDb2RlVG9CYXNlMTYoaGV4U3RyaW5nLmNoYXJDb2RlQXQoaisrKSk7CiAgICAgIGNvbnN0IG5pYmJsZVJpZ2h0ID0gY2hhckNvZGVUb0Jhc2UxNihoZXhTdHJpbmcuY2hhckNvZGVBdChqKyspKTsKICAgICAgaWYgKG5pYmJsZUxlZnQgPT09IHZvaWQgMCB8fCBuaWJibGVSaWdodCA9PT0gdm9pZCAwKSB7CiAgICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoYEludmFsaWQgYnl0ZSBzZXF1ZW5jZSAoIiR7aGV4U3RyaW5nW2ogLSAyXX0ke2hleFN0cmluZ1tqIC0gMV19IiBpbiAiJHtoZXhTdHJpbmd9IikuYCk7CiAgICAgIH0KICAgICAgYnl0ZXMyW2luZGV4Ml0gPSBuaWJibGVMZWZ0ICogMTYgKyBuaWJibGVSaWdodDsKICAgIH0KICAgIHJldHVybiBieXRlczI7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvQnl0ZXModmFsdWUsIG9wdHMpIHsKICAgIGNvbnN0IGhleCA9IG51bWJlclRvSGV4KHZhbHVlLCBvcHRzKTsKICAgIHJldHVybiBoZXhUb0J5dGVzKGhleCk7CiAgfQogIGZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXModmFsdWUsIG9wdHMgPSB7fSkgewogICAgY29uc3QgYnl0ZXMyID0gZW5jb2RlcjIuZW5jb2RlKHZhbHVlKTsKICAgIGlmICh0eXBlb2Ygb3B0cy5zaXplID09PSAibnVtYmVyIikgewogICAgICBhc3NlcnRTaXplKGJ5dGVzMiwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICAgIHJldHVybiBwYWQoYnl0ZXMyLCB7IGRpcjogInJpZ2h0Iiwgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgfQogICAgcmV0dXJuIGJ5dGVzMjsKICB9CiAgdmFyIGVuY29kZXIyLCBjaGFyQ29kZU1hcDsKICB2YXIgaW5pdF90b0J5dGVzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5jb2RpbmcvdG9CeXRlcy5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X2lzSGV4KCk7CiAgICAgIGluaXRfcGFkKCk7CiAgICAgIGluaXRfZnJvbUhleCgpOwogICAgICBpbml0X3RvSGV4KCk7CiAgICAgIGVuY29kZXIyID0gLyogQF9fUFVSRV9fICovIG5ldyBUZXh0RW5jb2RlcigpOwogICAgICBjaGFyQ29kZU1hcCA9IHsKICAgICAgICB6ZXJvOiA0OCwKICAgICAgICBuaW5lOiA1NywKICAgICAgICBBOiA2NSwKICAgICAgICBGOiA3MCwKICAgICAgICBhOiA5NywKICAgICAgICBmOiAxMDIKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL19hc3NlcnQuanMKICBmdW5jdGlvbiBudW1iZXIobikgewogICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihuKSB8fCBuIDwgMCkKICAgICAgdGhyb3cgbmV3IEVycm9yKGBwb3NpdGl2ZSBpbnRlZ2VyIGV4cGVjdGVkLCBub3QgJHtufWApOwogIH0KICBmdW5jdGlvbiBpc0J5dGVzKGEpIHsKICAgIHJldHVybiBhIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBhICE9IG51bGwgJiYgdHlwZW9mIGEgPT09ICJvYmplY3QiICYmIGEuY29uc3RydWN0b3IubmFtZSA9PT0gIlVpbnQ4QXJyYXkiOwogIH0KICBmdW5jdGlvbiBieXRlcyhiLCAuLi5sZW5ndGhzKSB7CiAgICBpZiAoIWlzQnl0ZXMoYikpCiAgICAgIHRocm93IG5ldyBFcnJvcigiVWludDhBcnJheSBleHBlY3RlZCIpOwogICAgaWYgKGxlbmd0aHMubGVuZ3RoID4gMCAmJiAhbGVuZ3Rocy5pbmNsdWRlcyhiLmxlbmd0aCkpCiAgICAgIHRocm93IG5ldyBFcnJvcihgVWludDhBcnJheSBleHBlY3RlZCBvZiBsZW5ndGggJHtsZW5ndGhzfSwgbm90IG9mIGxlbmd0aD0ke2IubGVuZ3RofWApOwogIH0KICBmdW5jdGlvbiBoYXNoKGgpIHsKICAgIGlmICh0eXBlb2YgaCAhPT0gImZ1bmN0aW9uIiB8fCB0eXBlb2YgaC5jcmVhdGUgIT09ICJmdW5jdGlvbiIpCiAgICAgIHRocm93IG5ldyBFcnJvcigiSGFzaCBzaG91bGQgYmUgd3JhcHBlZCBieSB1dGlscy53cmFwQ29uc3RydWN0b3IiKTsKICAgIG51bWJlcihoLm91dHB1dExlbik7CiAgICBudW1iZXIoaC5ibG9ja0xlbik7CiAgfQogIGZ1bmN0aW9uIGV4aXN0cyhpbnN0YW5jZSwgY2hlY2tGaW5pc2hlZCA9IHRydWUpIHsKICAgIGlmIChpbnN0YW5jZS5kZXN0cm95ZWQpCiAgICAgIHRocm93IG5ldyBFcnJvcigiSGFzaCBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWQiKTsKICAgIGlmIChjaGVja0ZpbmlzaGVkICYmIGluc3RhbmNlLmZpbmlzaGVkKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkhhc2gjZGlnZXN0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQiKTsKICB9CiAgZnVuY3Rpb24gb3V0cHV0KG91dCwgaW5zdGFuY2UpIHsKICAgIGJ5dGVzKG91dCk7CiAgICBjb25zdCBtaW4gPSBpbnN0YW5jZS5vdXRwdXRMZW47CiAgICBpZiAob3V0Lmxlbmd0aCA8IG1pbikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpZ2VzdEludG8oKSBleHBlY3RzIG91dHB1dCBidWZmZXIgb2YgbGVuZ3RoIGF0IGxlYXN0ICR7bWlufWApOwogICAgfQogIH0KICB2YXIgaW5pdF9hc3NlcnQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL19hc3NlcnQuanMiKCkgewogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vX3U2NC5qcwogIGZ1bmN0aW9uIGZyb21CaWcobiwgbGUgPSBmYWxzZSkgewogICAgaWYgKGxlKQogICAgICByZXR1cm4geyBoOiBOdW1iZXIobiAmIFUzMl9NQVNLNjQpLCBsOiBOdW1iZXIobiA+PiBfMzJuICYgVTMyX01BU0s2NCkgfTsKICAgIHJldHVybiB7IGg6IE51bWJlcihuID4+IF8zMm4gJiBVMzJfTUFTSzY0KSB8IDAsIGw6IE51bWJlcihuICYgVTMyX01BU0s2NCkgfCAwIH07CiAgfQogIGZ1bmN0aW9uIHNwbGl0KGxzdCwgbGUgPSBmYWxzZSkgewogICAgbGV0IEFoID0gbmV3IFVpbnQzMkFycmF5KGxzdC5sZW5ndGgpOwogICAgbGV0IEFsID0gbmV3IFVpbnQzMkFycmF5KGxzdC5sZW5ndGgpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsc3QubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgeyBoLCBsIH0gPSBmcm9tQmlnKGxzdFtpXSwgbGUpOwogICAgICBbQWhbaV0sIEFsW2ldXSA9IFtoLCBsXTsKICAgIH0KICAgIHJldHVybiBbQWgsIEFsXTsKICB9CiAgdmFyIFUzMl9NQVNLNjQsIF8zMm4sIHJvdGxTSCwgcm90bFNMLCByb3RsQkgsIHJvdGxCTDsKICB2YXIgaW5pdF91NjQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL191NjQuanMiKCkgewogICAgICBVMzJfTUFTSzY0ID0gLyogQF9fUFVSRV9fICovIEJpZ0ludCgyICoqIDMyIC0gMSk7CiAgICAgIF8zMm4gPSAvKiBAX19QVVJFX18gKi8gQmlnSW50KDMyKTsKICAgICAgcm90bFNIID0gKGgsIGwsIHMpID0+IGggPDwgcyB8IGwgPj4+IDMyIC0gczsKICAgICAgcm90bFNMID0gKGgsIGwsIHMpID0+IGwgPDwgcyB8IGggPj4+IDMyIC0gczsKICAgICAgcm90bEJIID0gKGgsIGwsIHMpID0+IGwgPDwgcyAtIDMyIHwgaCA+Pj4gNjQgLSBzOwogICAgICByb3RsQkwgPSAoaCwgbCwgcykgPT4gaCA8PCBzIC0gMzIgfCBsID4+PiA2NCAtIHM7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9jcnlwdG8uanMKICB2YXIgY3J5cHRvOwogIHZhciBpbml0X2NyeXB0byA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vY3J5cHRvLmpzIigpIHsKICAgICAgY3J5cHRvID0gdHlwZW9mIGdsb2JhbFRoaXMgPT09ICJvYmplY3QiICYmICJjcnlwdG8iIGluIGdsb2JhbFRoaXMgPyBnbG9iYWxUaGlzLmNyeXB0byA6IHZvaWQgMDsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL3V0aWxzLmpzCiAgZnVuY3Rpb24gYnl0ZVN3YXAzMihhcnIpIHsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7CiAgICAgIGFycltpXSA9IGJ5dGVTd2FwKGFycltpXSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHV0ZjhUb0J5dGVzKHN0cikgewogICAgaWYgKHR5cGVvZiBzdHIgIT09ICJzdHJpbmciKQogICAgICB0aHJvdyBuZXcgRXJyb3IoYHV0ZjhUb0J5dGVzIGV4cGVjdGVkIHN0cmluZywgZ290ICR7dHlwZW9mIHN0cn1gKTsKICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyKSk7CiAgfQogIGZ1bmN0aW9uIHRvQnl0ZXMyKGRhdGEpIHsKICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIpCiAgICAgIGRhdGEgPSB1dGY4VG9CeXRlcyhkYXRhKTsKICAgIGJ5dGVzKGRhdGEpOwogICAgcmV0dXJuIGRhdGE7CiAgfQogIGZ1bmN0aW9uIGNvbmNhdEJ5dGVzKC4uLmFycmF5cykgewogICAgbGV0IHN1bSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhID0gYXJyYXlzW2ldOwogICAgICBieXRlcyhhKTsKICAgICAgc3VtICs9IGEubGVuZ3RoOwogICAgfQogICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc3VtKTsKICAgIGZvciAobGV0IGkgPSAwLCBwYWQyID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhID0gYXJyYXlzW2ldOwogICAgICByZXMuc2V0KGEsIHBhZDIpOwogICAgICBwYWQyICs9IGEubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9CiAgZnVuY3Rpb24gd3JhcENvbnN0cnVjdG9yKGhhc2hDb25zKSB7CiAgICBjb25zdCBoYXNoQyA9IChtc2cpID0+IGhhc2hDb25zKCkudXBkYXRlKHRvQnl0ZXMyKG1zZykpLmRpZ2VzdCgpOwogICAgY29uc3QgdG1wID0gaGFzaENvbnMoKTsKICAgIGhhc2hDLm91dHB1dExlbiA9IHRtcC5vdXRwdXRMZW47CiAgICBoYXNoQy5ibG9ja0xlbiA9IHRtcC5ibG9ja0xlbjsKICAgIGhhc2hDLmNyZWF0ZSA9ICgpID0+IGhhc2hDb25zKCk7CiAgICByZXR1cm4gaGFzaEM7CiAgfQogIGZ1bmN0aW9uIHdyYXBYT0ZDb25zdHJ1Y3RvcldpdGhPcHRzKGhhc2hDb25zKSB7CiAgICBjb25zdCBoYXNoQyA9IChtc2csIG9wdHMpID0+IGhhc2hDb25zKG9wdHMpLnVwZGF0ZSh0b0J5dGVzMihtc2cpKS5kaWdlc3QoKTsKICAgIGNvbnN0IHRtcCA9IGhhc2hDb25zKHt9KTsKICAgIGhhc2hDLm91dHB1dExlbiA9IHRtcC5vdXRwdXRMZW47CiAgICBoYXNoQy5ibG9ja0xlbiA9IHRtcC5ibG9ja0xlbjsKICAgIGhhc2hDLmNyZWF0ZSA9IChvcHRzKSA9PiBoYXNoQ29ucyhvcHRzKTsKICAgIHJldHVybiBoYXNoQzsKICB9CiAgZnVuY3Rpb24gcmFuZG9tQnl0ZXMoYnl0ZXNMZW5ndGggPSAzMikgewogICAgaWYgKGNyeXB0byAmJiB0eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyA9PT0gImZ1bmN0aW9uIikgewogICAgICByZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShieXRlc0xlbmd0aCkpOwogICAgfQogICAgdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIG11c3QgYmUgZGVmaW5lZCIpOwogIH0KICB2YXIgdTMyLCBjcmVhdGVWaWV3LCByb3RyLCByb3RsLCBpc0xFLCBieXRlU3dhcCwgSGFzaCwgdG9TdHI7CiAgdmFyIGluaXRfdXRpbHMyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS91dGlscy5qcyIoKSB7CiAgICAgIGluaXRfY3J5cHRvKCk7CiAgICAgIGluaXRfYXNzZXJ0KCk7CiAgICAgIHUzMiA9IChhcnIpID0+IG5ldyBVaW50MzJBcnJheShhcnIuYnVmZmVyLCBhcnIuYnl0ZU9mZnNldCwgTWF0aC5mbG9vcihhcnIuYnl0ZUxlbmd0aCAvIDQpKTsKICAgICAgY3JlYXRlVmlldyA9IChhcnIpID0+IG5ldyBEYXRhVmlldyhhcnIuYnVmZmVyLCBhcnIuYnl0ZU9mZnNldCwgYXJyLmJ5dGVMZW5ndGgpOwogICAgICByb3RyID0gKHdvcmQsIHNoaWZ0KSA9PiB3b3JkIDw8IDMyIC0gc2hpZnQgfCB3b3JkID4+PiBzaGlmdDsKICAgICAgcm90bCA9ICh3b3JkLCBzaGlmdCkgPT4gd29yZCA8PCBzaGlmdCB8IHdvcmQgPj4+IDMyIC0gc2hpZnQgPj4+IDA7CiAgICAgIGlzTEUgPSBuZXcgVWludDhBcnJheShuZXcgVWludDMyQXJyYXkoWzI4NzQ1NDAyMF0pLmJ1ZmZlcilbMF0gPT09IDY4OwogICAgICBieXRlU3dhcCA9ICh3b3JkKSA9PiB3b3JkIDw8IDI0ICYgNDI3ODE5MDA4MCB8IHdvcmQgPDwgOCAmIDE2NzExNjgwIHwgd29yZCA+Pj4gOCAmIDY1MjgwIHwgd29yZCA+Pj4gMjQgJiAyNTU7CiAgICAgIEhhc2ggPSBjbGFzcyB7CiAgICAgICAgLy8gU2FmZSB2ZXJzaW9uIHRoYXQgY2xvbmVzIGludGVybmFsIHN0YXRlCiAgICAgICAgY2xvbmUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvbmVJbnRvKCk7CiAgICAgICAgfQogICAgICB9OwogICAgICB0b1N0ciA9IHt9LnRvU3RyaW5nOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vc2hhMy5qcwogIGZ1bmN0aW9uIGtlY2Nha1Aocywgcm91bmRzID0gMjQpIHsKICAgIGNvbnN0IEIgPSBuZXcgVWludDMyQXJyYXkoNSAqIDIpOwogICAgZm9yIChsZXQgcm91bmQgPSAyNCAtIHJvdW5kczsgcm91bmQgPCAyNDsgcm91bmQrKykgewogICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IDEwOyB4KyspCiAgICAgICAgQlt4XSA9IHNbeF0gXiBzW3ggKyAxMF0gXiBzW3ggKyAyMF0gXiBzW3ggKyAzMF0gXiBzW3ggKyA0MF07CiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgMTA7IHggKz0gMikgewogICAgICAgIGNvbnN0IGlkeDEgPSAoeCArIDgpICUgMTA7CiAgICAgICAgY29uc3QgaWR4MCA9ICh4ICsgMikgJSAxMDsKICAgICAgICBjb25zdCBCMCA9IEJbaWR4MF07CiAgICAgICAgY29uc3QgQjEgPSBCW2lkeDAgKyAxXTsKICAgICAgICBjb25zdCBUaCA9IHJvdGxIKEIwLCBCMSwgMSkgXiBCW2lkeDFdOwogICAgICAgIGNvbnN0IFRsID0gcm90bEwoQjAsIEIxLCAxKSBeIEJbaWR4MSArIDFdOwogICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgNTA7IHkgKz0gMTApIHsKICAgICAgICAgIHNbeCArIHldIF49IFRoOwogICAgICAgICAgc1t4ICsgeSArIDFdIF49IFRsOwogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgY3VySCA9IHNbMl07CiAgICAgIGxldCBjdXJMID0gc1szXTsKICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCAyNDsgdCsrKSB7CiAgICAgICAgY29uc3Qgc2hpZnQgPSBTSEEzX1JPVExbdF07CiAgICAgICAgY29uc3QgVGggPSByb3RsSChjdXJILCBjdXJMLCBzaGlmdCk7CiAgICAgICAgY29uc3QgVGwgPSByb3RsTChjdXJILCBjdXJMLCBzaGlmdCk7CiAgICAgICAgY29uc3QgUEkgPSBTSEEzX1BJW3RdOwogICAgICAgIGN1ckggPSBzW1BJXTsKICAgICAgICBjdXJMID0gc1tQSSArIDFdOwogICAgICAgIHNbUEldID0gVGg7CiAgICAgICAgc1tQSSArIDFdID0gVGw7CiAgICAgIH0KICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCA1MDsgeSArPSAxMCkgewogICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgMTA7IHgrKykKICAgICAgICAgIEJbeF0gPSBzW3kgKyB4XTsKICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IDEwOyB4KyspCiAgICAgICAgICBzW3kgKyB4XSBePSB+QlsoeCArIDIpICUgMTBdICYgQlsoeCArIDQpICUgMTBdOwogICAgICB9CiAgICAgIHNbMF0gXj0gU0hBM19JT1RBX0hbcm91bmRdOwogICAgICBzWzFdIF49IFNIQTNfSU9UQV9MW3JvdW5kXTsKICAgIH0KICAgIEIuZmlsbCgwKTsKICB9CiAgdmFyIFNIQTNfUEksIFNIQTNfUk9UTCwgX1NIQTNfSU9UQSwgXzBuLCBfMW4sIF8ybiwgXzduLCBfMjU2biwgXzB4NzFuLCBTSEEzX0lPVEFfSCwgU0hBM19JT1RBX0wsIHJvdGxILCByb3RsTCwgS2VjY2FrLCBnZW4sIHNoYTNfMjI0LCBzaGEzXzI1Niwgc2hhM18zODQsIHNoYTNfNTEyLCBrZWNjYWtfMjI0LCBrZWNjYWtfMjU2LCBrZWNjYWtfMzg0LCBrZWNjYWtfNTEyLCBnZW5TaGFrZSwgc2hha2UxMjgsIHNoYWtlMjU2OwogIHZhciBpbml0X3NoYTMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL3NoYTMuanMiKCkgewogICAgICBpbml0X2Fzc2VydCgpOwogICAgICBpbml0X3U2NCgpOwogICAgICBpbml0X3V0aWxzMigpOwogICAgICBTSEEzX1BJID0gW107CiAgICAgIFNIQTNfUk9UTCA9IFtdOwogICAgICBfU0hBM19JT1RBID0gW107CiAgICAgIF8wbiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMCk7CiAgICAgIF8xbiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMSk7CiAgICAgIF8ybiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMik7CiAgICAgIF83biA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoNyk7CiAgICAgIF8yNTZuID0gLyogQF9fUFVSRV9fICovIEJpZ0ludCgyNTYpOwogICAgICBfMHg3MW4gPSAvKiBAX19QVVJFX18gKi8gQmlnSW50KDExMyk7CiAgICAgIGZvciAobGV0IHJvdW5kID0gMCwgUiA9IF8xbiwgeCA9IDEsIHkgPSAwOyByb3VuZCA8IDI0OyByb3VuZCsrKSB7CiAgICAgICAgW3gsIHldID0gW3ksICgyICogeCArIDMgKiB5KSAlIDVdOwogICAgICAgIFNIQTNfUEkucHVzaCgyICogKDUgKiB5ICsgeCkpOwogICAgICAgIFNIQTNfUk9UTC5wdXNoKChyb3VuZCArIDEpICogKHJvdW5kICsgMikgLyAyICUgNjQpOwogICAgICAgIGxldCB0ID0gXzBuOwogICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgNzsgaisrKSB7CiAgICAgICAgICBSID0gKFIgPDwgXzFuIF4gKFIgPj4gXzduKSAqIF8weDcxbikgJSBfMjU2bjsKICAgICAgICAgIGlmIChSICYgXzJuKQogICAgICAgICAgICB0IF49IF8xbiA8PCAoXzFuIDw8IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoaikpIC0gXzFuOwogICAgICAgIH0KICAgICAgICBfU0hBM19JT1RBLnB1c2godCk7CiAgICAgIH0KICAgICAgW1NIQTNfSU9UQV9ILCBTSEEzX0lPVEFfTF0gPSAvKiBAX19QVVJFX18gKi8gc3BsaXQoX1NIQTNfSU9UQSwgdHJ1ZSk7CiAgICAgIHJvdGxIID0gKGgsIGwsIHMpID0+IHMgPiAzMiA/IHJvdGxCSChoLCBsLCBzKSA6IHJvdGxTSChoLCBsLCBzKTsKICAgICAgcm90bEwgPSAoaCwgbCwgcykgPT4gcyA+IDMyID8gcm90bEJMKGgsIGwsIHMpIDogcm90bFNMKGgsIGwsIHMpOwogICAgICBLZWNjYWsgPSBjbGFzcyBfS2VjY2FrIGV4dGVuZHMgSGFzaCB7CiAgICAgICAgLy8gTk9URTogd2UgYWNjZXB0IGFyZ3VtZW50cyBpbiBieXRlcyBpbnN0ZWFkIG9mIGJpdHMgaGVyZS4KICAgICAgICBjb25zdHJ1Y3RvcihibG9ja0xlbiwgc3VmZml4LCBvdXRwdXRMZW4sIGVuYWJsZVhPRiA9IGZhbHNlLCByb3VuZHMgPSAyNCkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIHRoaXMuYmxvY2tMZW4gPSBibG9ja0xlbjsKICAgICAgICAgIHRoaXMuc3VmZml4ID0gc3VmZml4OwogICAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0aGlzLmVuYWJsZVhPRiA9IGVuYWJsZVhPRjsKICAgICAgICAgIHRoaXMucm91bmRzID0gcm91bmRzOwogICAgICAgICAgdGhpcy5wb3MgPSAwOwogICAgICAgICAgdGhpcy5wb3NPdXQgPSAwOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTsKICAgICAgICAgIG51bWJlcihvdXRwdXRMZW4pOwogICAgICAgICAgaWYgKDAgPj0gdGhpcy5ibG9ja0xlbiB8fCB0aGlzLmJsb2NrTGVuID49IDIwMCkKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTaGEzIHN1cHBvcnRzIG9ubHkga2VjY2FrLWYxNjAwIGZ1bmN0aW9uIik7CiAgICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFVpbnQ4QXJyYXkoMjAwKTsKICAgICAgICAgIHRoaXMuc3RhdGUzMiA9IHUzMih0aGlzLnN0YXRlKTsKICAgICAgICB9CiAgICAgICAga2VjY2FrKCkgewogICAgICAgICAgaWYgKCFpc0xFKQogICAgICAgICAgICBieXRlU3dhcDMyKHRoaXMuc3RhdGUzMik7CiAgICAgICAgICBrZWNjYWtQKHRoaXMuc3RhdGUzMiwgdGhpcy5yb3VuZHMpOwogICAgICAgICAgaWYgKCFpc0xFKQogICAgICAgICAgICBieXRlU3dhcDMyKHRoaXMuc3RhdGUzMik7CiAgICAgICAgICB0aGlzLnBvc091dCA9IDA7CiAgICAgICAgICB0aGlzLnBvcyA9IDA7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZShkYXRhKSB7CiAgICAgICAgICBleGlzdHModGhpcyk7CiAgICAgICAgICBjb25zdCB7IGJsb2NrTGVuLCBzdGF0ZSB9ID0gdGhpczsKICAgICAgICAgIGRhdGEgPSB0b0J5dGVzMihkYXRhKTsKICAgICAgICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoOwogICAgICAgICAgZm9yIChsZXQgcG9zID0gMDsgcG9zIDwgbGVuOyApIHsKICAgICAgICAgICAgY29uc3QgdGFrZSA9IE1hdGgubWluKGJsb2NrTGVuIC0gdGhpcy5wb3MsIGxlbiAtIHBvcyk7CiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFrZTsgaSsrKQogICAgICAgICAgICAgIHN0YXRlW3RoaXMucG9zKytdIF49IGRhdGFbcG9zKytdOwogICAgICAgICAgICBpZiAodGhpcy5wb3MgPT09IGJsb2NrTGVuKQogICAgICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgZmluaXNoKCkgewogICAgICAgICAgaWYgKHRoaXMuZmluaXNoZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMuZmluaXNoZWQgPSB0cnVlOwogICAgICAgICAgY29uc3QgeyBzdGF0ZSwgc3VmZml4LCBwb3MsIGJsb2NrTGVuIH0gPSB0aGlzOwogICAgICAgICAgc3RhdGVbcG9zXSBePSBzdWZmaXg7CiAgICAgICAgICBpZiAoKHN1ZmZpeCAmIDEyOCkgIT09IDAgJiYgcG9zID09PSBibG9ja0xlbiAtIDEpCiAgICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgICBzdGF0ZVtibG9ja0xlbiAtIDFdIF49IDEyODsKICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgfQogICAgICAgIHdyaXRlSW50byhvdXQpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzLCBmYWxzZSk7CiAgICAgICAgICBieXRlcyhvdXQpOwogICAgICAgICAgdGhpcy5maW5pc2goKTsKICAgICAgICAgIGNvbnN0IGJ1ZmZlck91dCA9IHRoaXMuc3RhdGU7CiAgICAgICAgICBjb25zdCB7IGJsb2NrTGVuIH0gPSB0aGlzOwogICAgICAgICAgZm9yIChsZXQgcG9zID0gMCwgbGVuID0gb3V0Lmxlbmd0aDsgcG9zIDwgbGVuOyApIHsKICAgICAgICAgICAgaWYgKHRoaXMucG9zT3V0ID49IGJsb2NrTGVuKQogICAgICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihibG9ja0xlbiAtIHRoaXMucG9zT3V0LCBsZW4gLSBwb3MpOwogICAgICAgICAgICBvdXQuc2V0KGJ1ZmZlck91dC5zdWJhcnJheSh0aGlzLnBvc091dCwgdGhpcy5wb3NPdXQgKyB0YWtlKSwgcG9zKTsKICAgICAgICAgICAgdGhpcy5wb3NPdXQgKz0gdGFrZTsKICAgICAgICAgICAgcG9zICs9IHRha2U7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gb3V0OwogICAgICAgIH0KICAgICAgICB4b2ZJbnRvKG91dCkgewogICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZVhPRikKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJYT0YgaXMgbm90IHBvc3NpYmxlIGZvciB0aGlzIGluc3RhbmNlIik7CiAgICAgICAgICByZXR1cm4gdGhpcy53cml0ZUludG8ob3V0KTsKICAgICAgICB9CiAgICAgICAgeG9mKGJ5dGVzMikgewogICAgICAgICAgbnVtYmVyKGJ5dGVzMik7CiAgICAgICAgICByZXR1cm4gdGhpcy54b2ZJbnRvKG5ldyBVaW50OEFycmF5KGJ5dGVzMikpOwogICAgICAgIH0KICAgICAgICBkaWdlc3RJbnRvKG91dCkgewogICAgICAgICAgb3V0cHV0KG91dCwgdGhpcyk7CiAgICAgICAgICBpZiAodGhpcy5maW5pc2hlZCkKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJkaWdlc3QoKSB3YXMgYWxyZWFkeSBjYWxsZWQiKTsKICAgICAgICAgIHRoaXMud3JpdGVJbnRvKG91dCk7CiAgICAgICAgICB0aGlzLmRlc3Ryb3koKTsKICAgICAgICAgIHJldHVybiBvdXQ7CiAgICAgICAgfQogICAgICAgIGRpZ2VzdCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmRpZ2VzdEludG8obmV3IFVpbnQ4QXJyYXkodGhpcy5vdXRwdXRMZW4pKTsKICAgICAgICB9CiAgICAgICAgZGVzdHJveSgpIHsKICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuc3RhdGUuZmlsbCgwKTsKICAgICAgICB9CiAgICAgICAgX2Nsb25lSW50byh0bykgewogICAgICAgICAgY29uc3QgeyBibG9ja0xlbiwgc3VmZml4LCBvdXRwdXRMZW4sIHJvdW5kcywgZW5hYmxlWE9GIH0gPSB0aGlzOwogICAgICAgICAgdG8gfHwgKHRvID0gbmV3IF9LZWNjYWsoYmxvY2tMZW4sIHN1ZmZpeCwgb3V0cHV0TGVuLCBlbmFibGVYT0YsIHJvdW5kcykpOwogICAgICAgICAgdG8uc3RhdGUzMi5zZXQodGhpcy5zdGF0ZTMyKTsKICAgICAgICAgIHRvLnBvcyA9IHRoaXMucG9zOwogICAgICAgICAgdG8ucG9zT3V0ID0gdGhpcy5wb3NPdXQ7CiAgICAgICAgICB0by5maW5pc2hlZCA9IHRoaXMuZmluaXNoZWQ7CiAgICAgICAgICB0by5yb3VuZHMgPSByb3VuZHM7CiAgICAgICAgICB0by5zdWZmaXggPSBzdWZmaXg7CiAgICAgICAgICB0by5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0by5lbmFibGVYT0YgPSBlbmFibGVYT0Y7CiAgICAgICAgICB0by5kZXN0cm95ZWQgPSB0aGlzLmRlc3Ryb3llZDsKICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGdlbiA9IChzdWZmaXgsIGJsb2NrTGVuLCBvdXRwdXRMZW4pID0+IHdyYXBDb25zdHJ1Y3RvcigoKSA9PiBuZXcgS2VjY2FrKGJsb2NrTGVuLCBzdWZmaXgsIG91dHB1dExlbikpOwogICAgICBzaGEzXzIyNCA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oNiwgMTQ0LCAyMjQgLyA4KTsKICAgICAgc2hhM18yNTYgPSAvKiBAX19QVVJFX18gKi8gZ2VuKDYsIDEzNiwgMjU2IC8gOCk7CiAgICAgIHNoYTNfMzg0ID0gLyogQF9fUFVSRV9fICovIGdlbig2LCAxMDQsIDM4NCAvIDgpOwogICAgICBzaGEzXzUxMiA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oNiwgNzIsIDUxMiAvIDgpOwogICAgICBrZWNjYWtfMjI0ID0gLyogQF9fUFVSRV9fICovIGdlbigxLCAxNDQsIDIyNCAvIDgpOwogICAgICBrZWNjYWtfMjU2ID0gLyogQF9fUFVSRV9fICovIGdlbigxLCAxMzYsIDI1NiAvIDgpOwogICAgICBrZWNjYWtfMzg0ID0gLyogQF9fUFVSRV9fICovIGdlbigxLCAxMDQsIDM4NCAvIDgpOwogICAgICBrZWNjYWtfNTEyID0gLyogQF9fUFVSRV9fICovIGdlbigxLCA3MiwgNTEyIC8gOCk7CiAgICAgIGdlblNoYWtlID0gKHN1ZmZpeCwgYmxvY2tMZW4sIG91dHB1dExlbikgPT4gd3JhcFhPRkNvbnN0cnVjdG9yV2l0aE9wdHMoKG9wdHMgPSB7fSkgPT4gbmV3IEtlY2NhayhibG9ja0xlbiwgc3VmZml4LCBvcHRzLmRrTGVuID09PSB2b2lkIDAgPyBvdXRwdXRMZW4gOiBvcHRzLmRrTGVuLCB0cnVlKSk7CiAgICAgIHNoYWtlMTI4ID0gLyogQF9fUFVSRV9fICovIGdlblNoYWtlKDMxLCAxNjgsIDEyOCAvIDgpOwogICAgICBzaGFrZTI1NiA9IC8qIEBfX1BVUkVfXyAqLyBnZW5TaGFrZSgzMSwgMTM2LCAyNTYgLyA4KTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL2tlY2NhazI1Ni5qcwogIGZ1bmN0aW9uIGtlY2NhazI1Nih2YWx1ZSwgdG9fKSB7CiAgICBjb25zdCB0byA9IHRvXyB8fCAiaGV4IjsKICAgIGNvbnN0IGJ5dGVzMiA9IGtlY2Nha18yNTYoaXNIZXgodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KSA/IHRvQnl0ZXModmFsdWUpIDogdmFsdWUpOwogICAgaWYgKHRvID09PSAiYnl0ZXMiKQogICAgICByZXR1cm4gYnl0ZXMyOwogICAgcmV0dXJuIHRvSGV4KGJ5dGVzMik7CiAgfQogIHZhciBpbml0X2tlY2NhazI1NiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gva2VjY2FrMjU2LmpzIigpIHsKICAgICAgaW5pdF9zaGEzKCk7CiAgICAgIGluaXRfaXNIZXgoKTsKICAgICAgaW5pdF90b0J5dGVzKCk7CiAgICAgIGluaXRfdG9IZXgoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL2hhc2hTaWduYXR1cmUuanMKICBmdW5jdGlvbiBoYXNoU2lnbmF0dXJlKHNpZykgewogICAgcmV0dXJuIGhhc2gyKHNpZyk7CiAgfQogIHZhciBoYXNoMjsKICB2YXIgaW5pdF9oYXNoU2lnbmF0dXJlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9oYXNoU2lnbmF0dXJlLmpzIigpIHsKICAgICAgaW5pdF90b0J5dGVzKCk7CiAgICAgIGluaXRfa2VjY2FrMjU2KCk7CiAgICAgIGhhc2gyID0gKHZhbHVlKSA9PiBrZWNjYWsyNTYodG9CeXRlcyh2YWx1ZSkpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvbm9ybWFsaXplU2lnbmF0dXJlLmpzCiAgZnVuY3Rpb24gbm9ybWFsaXplU2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgbGV0IGFjdGl2ZSA9IHRydWU7CiAgICBsZXQgY3VycmVudCA9ICIiOwogICAgbGV0IGxldmVsID0gMDsKICAgIGxldCByZXN1bHQgPSAiIjsKICAgIGxldCB2YWxpZCA9IGZhbHNlOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaWduYXR1cmUubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgY2hhciA9IHNpZ25hdHVyZVtpXTsKICAgICAgaWYgKFsiKCIsICIpIiwgIiwiXS5pbmNsdWRlcyhjaGFyKSkKICAgICAgICBhY3RpdmUgPSB0cnVlOwogICAgICBpZiAoY2hhciA9PT0gIigiKQogICAgICAgIGxldmVsKys7CiAgICAgIGlmIChjaGFyID09PSAiKSIpCiAgICAgICAgbGV2ZWwtLTsKICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgY29udGludWU7CiAgICAgIGlmIChsZXZlbCA9PT0gMCkgewogICAgICAgIGlmIChjaGFyID09PSAiICIgJiYgWyJldmVudCIsICJmdW5jdGlvbiIsICIiXS5pbmNsdWRlcyhyZXN1bHQpKQogICAgICAgICAgcmVzdWx0ID0gIiI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICByZXN1bHQgKz0gY2hhcjsKICAgICAgICAgIGlmIChjaGFyID09PSAiKSIpIHsKICAgICAgICAgICAgdmFsaWQgPSB0cnVlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGNoYXIgPT09ICIgIikgewogICAgICAgIGlmIChzaWduYXR1cmVbaSAtIDFdICE9PSAiLCIgJiYgY3VycmVudCAhPT0gIiwiICYmIGN1cnJlbnQgIT09ICIsKCIpIHsKICAgICAgICAgIGN1cnJlbnQgPSAiIjsKICAgICAgICAgIGFjdGl2ZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICByZXN1bHQgKz0gY2hhcjsKICAgICAgY3VycmVudCArPSBjaGFyOwogICAgfQogICAgaWYgKCF2YWxpZCkKICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoIlVuYWJsZSB0byBub3JtYWxpemUgc2lnbmF0dXJlLiIpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdmFyIGluaXRfbm9ybWFsaXplU2lnbmF0dXJlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9ub3JtYWxpemVTaWduYXR1cmUuanMiKCkgewogICAgICBpbml0X2Jhc2UoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvU2lnbmF0dXJlLmpzCiAgdmFyIHRvU2lnbmF0dXJlOwogIHZhciBpbml0X3RvU2lnbmF0dXJlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b1NpZ25hdHVyZS5qcyIoKSB7CiAgICAgIGluaXRfZXhwb3J0cygpOwogICAgICBpbml0X25vcm1hbGl6ZVNpZ25hdHVyZSgpOwogICAgICB0b1NpZ25hdHVyZSA9IChkZWYpID0+IHsKICAgICAgICBjb25zdCBkZWZfID0gKCgpID0+IHsKICAgICAgICAgIGlmICh0eXBlb2YgZGVmID09PSAic3RyaW5nIikKICAgICAgICAgICAgcmV0dXJuIGRlZjsKICAgICAgICAgIHJldHVybiBmb3JtYXRBYmlJdGVtKGRlZik7CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gbm9ybWFsaXplU2lnbmF0dXJlKGRlZl8pOwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9TaWduYXR1cmVIYXNoLmpzCiAgZnVuY3Rpb24gdG9TaWduYXR1cmVIYXNoKGZuKSB7CiAgICByZXR1cm4gaGFzaFNpZ25hdHVyZSh0b1NpZ25hdHVyZShmbikpOwogIH0KICB2YXIgaW5pdF90b1NpZ25hdHVyZUhhc2ggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvU2lnbmF0dXJlSGFzaC5qcyIoKSB7CiAgICAgIGluaXRfaGFzaFNpZ25hdHVyZSgpOwogICAgICBpbml0X3RvU2lnbmF0dXJlKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b0V2ZW50U2VsZWN0b3IuanMKICB2YXIgdG9FdmVudFNlbGVjdG9yOwogIHZhciBpbml0X3RvRXZlbnRTZWxlY3RvciA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9FdmVudFNlbGVjdG9yLmpzIigpIHsKICAgICAgaW5pdF90b1NpZ25hdHVyZUhhc2goKTsKICAgICAgdG9FdmVudFNlbGVjdG9yID0gdG9TaWduYXR1cmVIYXNoOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hZGRyZXNzLmpzCiAgdmFyIEludmFsaWRBZGRyZXNzRXJyb3I7CiAgdmFyIGluaXRfYWRkcmVzcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hZGRyZXNzLmpzIigpIHsKICAgICAgaW5pdF9iYXNlKCk7CiAgICAgIEludmFsaWRBZGRyZXNzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYWRkcmVzcyB9KSB7CiAgICAgICAgICBzdXBlcihgQWRkcmVzcyAiJHthZGRyZXNzfSIgaXMgaW52YWxpZC5gLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgICItIEFkZHJlc3MgbXVzdCBiZSBhIGhleCB2YWx1ZSBvZiAyMCBieXRlcyAoNDAgaGV4IGNoYXJhY3RlcnMpLiIsCiAgICAgICAgICAgICAgIi0gQWRkcmVzcyBtdXN0IG1hdGNoIGl0cyBjaGVja3N1bSBjb3VudGVycGFydC4iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkQWRkcmVzc0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2xydS5qcwogIHZhciBMcnVNYXA7CiAgdmFyIGluaXRfbHJ1ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvbHJ1LmpzIigpIHsKICAgICAgTHJ1TWFwID0gY2xhc3MgZXh0ZW5kcyBNYXAgewogICAgICAgIGNvbnN0cnVjdG9yKHNpemUzKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJtYXhTaXplIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMubWF4U2l6ZSA9IHNpemUzOwogICAgICAgIH0KICAgICAgICBzZXQoa2V5LCB2YWx1ZSkgewogICAgICAgICAgc3VwZXIuc2V0KGtleSwgdmFsdWUpOwogICAgICAgICAgaWYgKHRoaXMubWF4U2l6ZSAmJiB0aGlzLnNpemUgPiB0aGlzLm1heFNpemUpCiAgICAgICAgICAgIHRoaXMuZGVsZXRlKHRoaXMua2V5cygpLm5leHQoKS52YWx1ZSk7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9nZXRBZGRyZXNzLmpzCiAgZnVuY3Rpb24gY2hlY2tzdW1BZGRyZXNzKGFkZHJlc3NfLCBjaGFpbklkKSB7CiAgICBpZiAoY2hlY2tzdW1BZGRyZXNzQ2FjaGUuaGFzKGAke2FkZHJlc3NffS4ke2NoYWluSWR9YCkpCiAgICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3NDYWNoZS5nZXQoYCR7YWRkcmVzc199LiR7Y2hhaW5JZH1gKTsKICAgIGNvbnN0IGhleEFkZHJlc3MgPSBjaGFpbklkID8gYCR7Y2hhaW5JZH0ke2FkZHJlc3NfLnRvTG93ZXJDYXNlKCl9YCA6IGFkZHJlc3NfLnN1YnN0cmluZygyKS50b0xvd2VyQ2FzZSgpOwogICAgY29uc3QgaGFzaDMgPSBrZWNjYWsyNTYoc3RyaW5nVG9CeXRlcyhoZXhBZGRyZXNzKSwgImJ5dGVzIik7CiAgICBjb25zdCBhZGRyZXNzID0gKGNoYWluSWQgPyBoZXhBZGRyZXNzLnN1YnN0cmluZyhgJHtjaGFpbklkfTB4YC5sZW5ndGgpIDogaGV4QWRkcmVzcykuc3BsaXQoIiIpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MDsgaSArPSAyKSB7CiAgICAgIGlmIChoYXNoM1tpID4+IDFdID4+IDQgPj0gOCAmJiBhZGRyZXNzW2ldKSB7CiAgICAgICAgYWRkcmVzc1tpXSA9IGFkZHJlc3NbaV0udG9VcHBlckNhc2UoKTsKICAgICAgfQogICAgICBpZiAoKGhhc2gzW2kgPj4gMV0gJiAxNSkgPj0gOCAmJiBhZGRyZXNzW2kgKyAxXSkgewogICAgICAgIGFkZHJlc3NbaSArIDFdID0gYWRkcmVzc1tpICsgMV0udG9VcHBlckNhc2UoKTsKICAgICAgfQogICAgfQogICAgY29uc3QgcmVzdWx0ID0gYDB4JHthZGRyZXNzLmpvaW4oIiIpfWA7CiAgICBjaGVja3N1bUFkZHJlc3NDYWNoZS5zZXQoYCR7YWRkcmVzc199LiR7Y2hhaW5JZH1gLCByZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gZ2V0QWRkcmVzcyhhZGRyZXNzLCBjaGFpbklkKSB7CiAgICBpZiAoIWlzQWRkcmVzcyhhZGRyZXNzLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzcyB9KTsKICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3MoYWRkcmVzcywgY2hhaW5JZCk7CiAgfQogIHZhciBjaGVja3N1bUFkZHJlc3NDYWNoZTsKICB2YXIgaW5pdF9nZXRBZGRyZXNzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9nZXRBZGRyZXNzLmpzIigpIHsKICAgICAgaW5pdF9hZGRyZXNzKCk7CiAgICAgIGluaXRfdG9CeXRlcygpOwogICAgICBpbml0X2tlY2NhazI1NigpOwogICAgICBpbml0X2xydSgpOwogICAgICBpbml0X2lzQWRkcmVzcygpOwogICAgICBjaGVja3N1bUFkZHJlc3NDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTHJ1TWFwKDgxOTIpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FkZHJlc3MvaXNBZGRyZXNzLmpzCiAgZnVuY3Rpb24gaXNBZGRyZXNzKGFkZHJlc3MsIG9wdGlvbnMpIHsKICAgIGNvbnN0IHsgc3RyaWN0ID0gdHJ1ZSB9ID0gb3B0aW9ucyA/PyB7fTsKICAgIGNvbnN0IGNhY2hlS2V5MiA9IGAke2FkZHJlc3N9LiR7c3RyaWN0fWA7CiAgICBpZiAoaXNBZGRyZXNzQ2FjaGUuaGFzKGNhY2hlS2V5MikpCiAgICAgIHJldHVybiBpc0FkZHJlc3NDYWNoZS5nZXQoY2FjaGVLZXkyKTsKICAgIGNvbnN0IHJlc3VsdCA9ICgoKSA9PiB7CiAgICAgIGlmICghYWRkcmVzc1JlZ2V4LnRlc3QoYWRkcmVzcykpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoYWRkcmVzcy50b0xvd2VyQ2FzZSgpID09PSBhZGRyZXNzKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoc3RyaWN0KQogICAgICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3MoYWRkcmVzcykgPT09IGFkZHJlc3M7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSkoKTsKICAgIGlzQWRkcmVzc0NhY2hlLnNldChjYWNoZUtleTIsIHJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2YXIgYWRkcmVzc1JlZ2V4LCBpc0FkZHJlc3NDYWNoZTsKICB2YXIgaW5pdF9pc0FkZHJlc3MgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hZGRyZXNzL2lzQWRkcmVzcy5qcyIoKSB7CiAgICAgIGluaXRfbHJ1KCk7CiAgICAgIGluaXRfZ2V0QWRkcmVzcygpOwogICAgICBhZGRyZXNzUmVnZXggPSAvXjB4W2EtZkEtRjAtOV17NDB9JC87CiAgICAgIGlzQWRkcmVzc0NhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBMcnVNYXAoODE5Mik7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9jb25jYXQuanMKICBmdW5jdGlvbiBjb25jYXQodmFsdWVzKSB7CiAgICBpZiAodHlwZW9mIHZhbHVlc1swXSA9PT0gInN0cmluZyIpCiAgICAgIHJldHVybiBjb25jYXRIZXgodmFsdWVzKTsKICAgIHJldHVybiBjb25jYXRCeXRlczIodmFsdWVzKTsKICB9CiAgZnVuY3Rpb24gY29uY2F0Qnl0ZXMyKHZhbHVlcykgewogICAgbGV0IGxlbmd0aCA9IDA7CiAgICBmb3IgKGNvbnN0IGFyciBvZiB2YWx1ZXMpIHsKICAgICAgbGVuZ3RoICs9IGFyci5sZW5ndGg7CiAgICB9CiAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpOwogICAgbGV0IG9mZnNldCA9IDA7CiAgICBmb3IgKGNvbnN0IGFyciBvZiB2YWx1ZXMpIHsKICAgICAgcmVzdWx0LnNldChhcnIsIG9mZnNldCk7CiAgICAgIG9mZnNldCArPSBhcnIubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gY29uY2F0SGV4KHZhbHVlcykgewogICAgcmV0dXJuIGAweCR7dmFsdWVzLnJlZHVjZSgoYWNjLCB4KSA9PiBhY2MgKyB4LnJlcGxhY2UoIjB4IiwgIiIpLCAiIil9YDsKICB9CiAgdmFyIGluaXRfY29uY2F0ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9jb25jYXQuanMiKCkgewogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvc2xpY2UuanMKICBmdW5jdGlvbiBzbGljZSh2YWx1ZSwgc3RhcnQsIGVuZCwgeyBzdHJpY3QgfSA9IHt9KSB7CiAgICBpZiAoaXNIZXgodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgcmV0dXJuIHNsaWNlSGV4KHZhbHVlLCBzdGFydCwgZW5kLCB7CiAgICAgICAgc3RyaWN0CiAgICAgIH0pOwogICAgcmV0dXJuIHNsaWNlQnl0ZXModmFsdWUsIHN0YXJ0LCBlbmQsIHsKICAgICAgc3RyaWN0CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gYXNzZXJ0U3RhcnRPZmZzZXQodmFsdWUsIHN0YXJ0KSB7CiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAibnVtYmVyIiAmJiBzdGFydCA+IDAgJiYgc3RhcnQgPiBzaXplKHZhbHVlKSAtIDEpCiAgICAgIHRocm93IG5ldyBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IoewogICAgICAgIG9mZnNldDogc3RhcnQsCiAgICAgICAgcG9zaXRpb246ICJzdGFydCIsCiAgICAgICAgc2l6ZTogc2l6ZSh2YWx1ZSkKICAgICAgfSk7CiAgfQogIGZ1bmN0aW9uIGFzc2VydEVuZE9mZnNldCh2YWx1ZSwgc3RhcnQsIGVuZCkgewogICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gIm51bWJlciIgJiYgdHlwZW9mIGVuZCA9PT0gIm51bWJlciIgJiYgc2l6ZSh2YWx1ZSkgIT09IGVuZCAtIHN0YXJ0KSB7CiAgICAgIHRocm93IG5ldyBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IoewogICAgICAgIG9mZnNldDogZW5kLAogICAgICAgIHBvc2l0aW9uOiAiZW5kIiwKICAgICAgICBzaXplOiBzaXplKHZhbHVlKQogICAgICB9KTsKICAgIH0KICB9CiAgZnVuY3Rpb24gc2xpY2VCeXRlcyh2YWx1ZV8sIHN0YXJ0LCBlbmQsIHsgc3RyaWN0IH0gPSB7fSkgewogICAgYXNzZXJ0U3RhcnRPZmZzZXQodmFsdWVfLCBzdGFydCk7CiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlXy5zbGljZShzdGFydCwgZW5kKTsKICAgIGlmIChzdHJpY3QpCiAgICAgIGFzc2VydEVuZE9mZnNldCh2YWx1ZSwgc3RhcnQsIGVuZCk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQogIGZ1bmN0aW9uIHNsaWNlSGV4KHZhbHVlXywgc3RhcnQsIGVuZCwgeyBzdHJpY3QgfSA9IHt9KSB7CiAgICBhc3NlcnRTdGFydE9mZnNldCh2YWx1ZV8sIHN0YXJ0KTsKICAgIGNvbnN0IHZhbHVlID0gYDB4JHt2YWx1ZV8ucmVwbGFjZSgiMHgiLCAiIikuc2xpY2UoKHN0YXJ0ID8/IDApICogMiwgKGVuZCA/PyB2YWx1ZV8ubGVuZ3RoKSAqIDIpfWA7CiAgICBpZiAoc3RyaWN0KQogICAgICBhc3NlcnRFbmRPZmZzZXQodmFsdWUsIHN0YXJ0LCBlbmQpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KICB2YXIgaW5pdF9zbGljZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvc2xpY2UuanMiKCkgewogICAgICBpbml0X2RhdGEoKTsKICAgICAgaW5pdF9pc0hleCgpOwogICAgICBpbml0X3NpemUoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlQWJpUGFyYW1ldGVycy5qcwogIGZ1bmN0aW9uIGVuY29kZUFiaVBhcmFtZXRlcnMocGFyYW1zLCB2YWx1ZXMpIHsKICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSB2YWx1ZXMubGVuZ3RoKQogICAgICB0aHJvdyBuZXcgQWJpRW5jb2RpbmdMZW5ndGhNaXNtYXRjaEVycm9yKHsKICAgICAgICBleHBlY3RlZExlbmd0aDogcGFyYW1zLmxlbmd0aCwKICAgICAgICBnaXZlbkxlbmd0aDogdmFsdWVzLmxlbmd0aAogICAgICB9KTsKICAgIGNvbnN0IHByZXBhcmVkUGFyYW1zID0gcHJlcGFyZVBhcmFtcyh7CiAgICAgIHBhcmFtcywKICAgICAgdmFsdWVzCiAgICB9KTsKICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVQYXJhbXMocHJlcGFyZWRQYXJhbXMpOwogICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gIjB4IjsKICAgIHJldHVybiBkYXRhOwogIH0KICBmdW5jdGlvbiBwcmVwYXJlUGFyYW1zKHsgcGFyYW1zLCB2YWx1ZXMgfSkgewogICAgY29uc3QgcHJlcGFyZWRQYXJhbXMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIHByZXBhcmVkUGFyYW1zLnB1c2gocHJlcGFyZVBhcmFtKHsgcGFyYW06IHBhcmFtc1tpXSwgdmFsdWU6IHZhbHVlc1tpXSB9KSk7CiAgICB9CiAgICByZXR1cm4gcHJlcGFyZWRQYXJhbXM7CiAgfQogIGZ1bmN0aW9uIHByZXBhcmVQYXJhbSh7IHBhcmFtLCB2YWx1ZSB9KSB7CiAgICBjb25zdCBhcnJheUNvbXBvbmVudHMgPSBnZXRBcnJheUNvbXBvbmVudHMocGFyYW0udHlwZSk7CiAgICBpZiAoYXJyYXlDb21wb25lbnRzKSB7CiAgICAgIGNvbnN0IFtsZW5ndGgsIHR5cGVdID0gYXJyYXlDb21wb25lbnRzOwogICAgICByZXR1cm4gZW5jb2RlQXJyYXkodmFsdWUsIHsgbGVuZ3RoLCBwYXJhbTogeyAuLi5wYXJhbSwgdHlwZSB9IH0pOwogICAgfQogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJ0dXBsZSIpIHsKICAgICAgcmV0dXJuIGVuY29kZVR1cGxlKHZhbHVlLCB7CiAgICAgICAgcGFyYW0KICAgICAgfSk7CiAgICB9CiAgICBpZiAocGFyYW0udHlwZSA9PT0gImFkZHJlc3MiKSB7CiAgICAgIHJldHVybiBlbmNvZGVBZGRyZXNzKHZhbHVlKTsKICAgIH0KICAgIGlmIChwYXJhbS50eXBlID09PSAiYm9vbCIpIHsKICAgICAgcmV0dXJuIGVuY29kZUJvb2wodmFsdWUpOwogICAgfQogICAgaWYgKHBhcmFtLnR5cGUuc3RhcnRzV2l0aCgidWludCIpIHx8IHBhcmFtLnR5cGUuc3RhcnRzV2l0aCgiaW50IikpIHsKICAgICAgY29uc3Qgc2lnbmVkID0gcGFyYW0udHlwZS5zdGFydHNXaXRoKCJpbnQiKTsKICAgICAgcmV0dXJuIGVuY29kZU51bWJlcih2YWx1ZSwgeyBzaWduZWQgfSk7CiAgICB9CiAgICBpZiAocGFyYW0udHlwZS5zdGFydHNXaXRoKCJieXRlcyIpKSB7CiAgICAgIHJldHVybiBlbmNvZGVCeXRlcyh2YWx1ZSwgeyBwYXJhbSB9KTsKICAgIH0KICAgIGlmIChwYXJhbS50eXBlID09PSAic3RyaW5nIikgewogICAgICByZXR1cm4gZW5jb2RlU3RyaW5nKHZhbHVlKTsKICAgIH0KICAgIHRocm93IG5ldyBJbnZhbGlkQWJpRW5jb2RpbmdUeXBlRXJyb3IocGFyYW0udHlwZSwgewogICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L2VuY29kZUFiaVBhcmFtZXRlcnMiCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlUGFyYW1zKHByZXBhcmVkUGFyYW1zKSB7CiAgICBsZXQgc3RhdGljU2l6ZSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXBhcmVkUGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IHsgZHluYW1pYywgZW5jb2RlZCB9ID0gcHJlcGFyZWRQYXJhbXNbaV07CiAgICAgIGlmIChkeW5hbWljKQogICAgICAgIHN0YXRpY1NpemUgKz0gMzI7CiAgICAgIGVsc2UKICAgICAgICBzdGF0aWNTaXplICs9IHNpemUoZW5jb2RlZCk7CiAgICB9CiAgICBjb25zdCBzdGF0aWNQYXJhbXMgPSBbXTsKICAgIGNvbnN0IGR5bmFtaWNQYXJhbXMgPSBbXTsKICAgIGxldCBkeW5hbWljU2l6ZSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXBhcmVkUGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IHsgZHluYW1pYywgZW5jb2RlZCB9ID0gcHJlcGFyZWRQYXJhbXNbaV07CiAgICAgIGlmIChkeW5hbWljKSB7CiAgICAgICAgc3RhdGljUGFyYW1zLnB1c2gobnVtYmVyVG9IZXgoc3RhdGljU2l6ZSArIGR5bmFtaWNTaXplLCB7IHNpemU6IDMyIH0pKTsKICAgICAgICBkeW5hbWljUGFyYW1zLnB1c2goZW5jb2RlZCk7CiAgICAgICAgZHluYW1pY1NpemUgKz0gc2l6ZShlbmNvZGVkKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGF0aWNQYXJhbXMucHVzaChlbmNvZGVkKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvbmNhdChbLi4uc3RhdGljUGFyYW1zLCAuLi5keW5hbWljUGFyYW1zXSk7CiAgfQogIGZ1bmN0aW9uIGVuY29kZUFkZHJlc3ModmFsdWUpIHsKICAgIGlmICghaXNBZGRyZXNzKHZhbHVlKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB2YWx1ZSB9KTsKICAgIHJldHVybiB7IGR5bmFtaWM6IGZhbHNlLCBlbmNvZGVkOiBwYWRIZXgodmFsdWUudG9Mb3dlckNhc2UoKSkgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlQXJyYXkodmFsdWUsIHsgbGVuZ3RoLCBwYXJhbSB9KSB7CiAgICBjb25zdCBkeW5hbWljID0gbGVuZ3RoID09PSBudWxsOwogICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBcnJheUVycm9yKHZhbHVlKTsKICAgIGlmICghZHluYW1pYyAmJiB2YWx1ZS5sZW5ndGggIT09IGxlbmd0aCkKICAgICAgdGhyb3cgbmV3IEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yKHsKICAgICAgICBleHBlY3RlZExlbmd0aDogbGVuZ3RoLAogICAgICAgIGdpdmVuTGVuZ3RoOiB2YWx1ZS5sZW5ndGgsCiAgICAgICAgdHlwZTogYCR7cGFyYW0udHlwZX1bJHtsZW5ndGh9XWAKICAgICAgfSk7CiAgICBsZXQgZHluYW1pY0NoaWxkID0gZmFsc2U7CiAgICBjb25zdCBwcmVwYXJlZFBhcmFtcyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBwcmVwYXJlZFBhcmFtID0gcHJlcGFyZVBhcmFtKHsgcGFyYW0sIHZhbHVlOiB2YWx1ZVtpXSB9KTsKICAgICAgaWYgKHByZXBhcmVkUGFyYW0uZHluYW1pYykKICAgICAgICBkeW5hbWljQ2hpbGQgPSB0cnVlOwogICAgICBwcmVwYXJlZFBhcmFtcy5wdXNoKHByZXBhcmVkUGFyYW0pOwogICAgfQogICAgaWYgKGR5bmFtaWMgfHwgZHluYW1pY0NoaWxkKSB7CiAgICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVQYXJhbXMocHJlcGFyZWRQYXJhbXMpOwogICAgICBpZiAoZHluYW1pYykgewogICAgICAgIGNvbnN0IGxlbmd0aDIgPSBudW1iZXJUb0hleChwcmVwYXJlZFBhcmFtcy5sZW5ndGgsIHsgc2l6ZTogMzIgfSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGR5bmFtaWM6IHRydWUsCiAgICAgICAgICBlbmNvZGVkOiBwcmVwYXJlZFBhcmFtcy5sZW5ndGggPiAwID8gY29uY2F0KFtsZW5ndGgyLCBkYXRhXSkgOiBsZW5ndGgyCiAgICAgICAgfTsKICAgICAgfQogICAgICBpZiAoZHluYW1pY0NoaWxkKQogICAgICAgIHJldHVybiB7IGR5bmFtaWM6IHRydWUsIGVuY29kZWQ6IGRhdGEgfTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIGR5bmFtaWM6IGZhbHNlLAogICAgICBlbmNvZGVkOiBjb25jYXQocHJlcGFyZWRQYXJhbXMubWFwKCh7IGVuY29kZWQgfSkgPT4gZW5jb2RlZCkpCiAgICB9OwogIH0KICBmdW5jdGlvbiBlbmNvZGVCeXRlcyh2YWx1ZSwgeyBwYXJhbSB9KSB7CiAgICBjb25zdCBbLCBwYXJhbVNpemVdID0gcGFyYW0udHlwZS5zcGxpdCgiYnl0ZXMiKTsKICAgIGNvbnN0IGJ5dGVzU2l6ZSA9IHNpemUodmFsdWUpOwogICAgaWYgKCFwYXJhbVNpemUpIHsKICAgICAgbGV0IHZhbHVlXyA9IHZhbHVlOwogICAgICBpZiAoYnl0ZXNTaXplICUgMzIgIT09IDApCiAgICAgICAgdmFsdWVfID0gcGFkSGV4KHZhbHVlXywgewogICAgICAgICAgZGlyOiAicmlnaHQiLAogICAgICAgICAgc2l6ZTogTWF0aC5jZWlsKCh2YWx1ZS5sZW5ndGggLSAyKSAvIDIgLyAzMikgKiAzMgogICAgICAgIH0pOwogICAgICByZXR1cm4gewogICAgICAgIGR5bmFtaWM6IHRydWUsCiAgICAgICAgZW5jb2RlZDogY29uY2F0KFtwYWRIZXgobnVtYmVyVG9IZXgoYnl0ZXNTaXplLCB7IHNpemU6IDMyIH0pKSwgdmFsdWVfXSkKICAgICAgfTsKICAgIH0KICAgIGlmIChieXRlc1NpemUgIT09IE51bWJlci5wYXJzZUludChwYXJhbVNpemUpKQogICAgICB0aHJvdyBuZXcgQWJpRW5jb2RpbmdCeXRlc1NpemVNaXNtYXRjaEVycm9yKHsKICAgICAgICBleHBlY3RlZFNpemU6IE51bWJlci5wYXJzZUludChwYXJhbVNpemUpLAogICAgICAgIHZhbHVlCiAgICAgIH0pOwogICAgcmV0dXJuIHsgZHluYW1pYzogZmFsc2UsIGVuY29kZWQ6IHBhZEhleCh2YWx1ZSwgeyBkaXI6ICJyaWdodCIgfSkgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlQm9vbCh2YWx1ZSkgewogICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gImJvb2xlYW4iKQogICAgICB0aHJvdyBuZXcgQmFzZUVycm9yMihgSW52YWxpZCBib29sZWFuIHZhbHVlOiAiJHt2YWx1ZX0iICh0eXBlOiAke3R5cGVvZiB2YWx1ZX0pLiBFeHBlY3RlZDogXGB0cnVlXGAgb3IgXGBmYWxzZVxgLmApOwogICAgcmV0dXJuIHsgZHluYW1pYzogZmFsc2UsIGVuY29kZWQ6IHBhZEhleChib29sVG9IZXgodmFsdWUpKSB9OwogIH0KICBmdW5jdGlvbiBlbmNvZGVOdW1iZXIodmFsdWUsIHsgc2lnbmVkIH0pIHsKICAgIHJldHVybiB7CiAgICAgIGR5bmFtaWM6IGZhbHNlLAogICAgICBlbmNvZGVkOiBudW1iZXJUb0hleCh2YWx1ZSwgewogICAgICAgIHNpemU6IDMyLAogICAgICAgIHNpZ25lZAogICAgICB9KQogICAgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlU3RyaW5nKHZhbHVlKSB7CiAgICBjb25zdCBoZXhWYWx1ZSA9IHN0cmluZ1RvSGV4KHZhbHVlKTsKICAgIGNvbnN0IHBhcnRzTGVuZ3RoID0gTWF0aC5jZWlsKHNpemUoaGV4VmFsdWUpIC8gMzIpOwogICAgY29uc3QgcGFydHMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHNMZW5ndGg7IGkrKykgewogICAgICBwYXJ0cy5wdXNoKHBhZEhleChzbGljZShoZXhWYWx1ZSwgaSAqIDMyLCAoaSArIDEpICogMzIpLCB7CiAgICAgICAgZGlyOiAicmlnaHQiCiAgICAgIH0pKTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIGR5bmFtaWM6IHRydWUsCiAgICAgIGVuY29kZWQ6IGNvbmNhdChbCiAgICAgICAgcGFkSGV4KG51bWJlclRvSGV4KHNpemUoaGV4VmFsdWUpLCB7IHNpemU6IDMyIH0pKSwKICAgICAgICAuLi5wYXJ0cwogICAgICBdKQogICAgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlVHVwbGUodmFsdWUsIHsgcGFyYW0gfSkgewogICAgbGV0IGR5bmFtaWMgPSBmYWxzZTsKICAgIGNvbnN0IHByZXBhcmVkUGFyYW1zID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtLmNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgcGFyYW1fID0gcGFyYW0uY29tcG9uZW50c1tpXTsKICAgICAgY29uc3QgaW5kZXgyID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBpIDogcGFyYW1fLm5hbWU7CiAgICAgIGNvbnN0IHByZXBhcmVkUGFyYW0gPSBwcmVwYXJlUGFyYW0oewogICAgICAgIHBhcmFtOiBwYXJhbV8sCiAgICAgICAgdmFsdWU6IHZhbHVlW2luZGV4Ml0KICAgICAgfSk7CiAgICAgIHByZXBhcmVkUGFyYW1zLnB1c2gocHJlcGFyZWRQYXJhbSk7CiAgICAgIGlmIChwcmVwYXJlZFBhcmFtLmR5bmFtaWMpCiAgICAgICAgZHluYW1pYyA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gewogICAgICBkeW5hbWljLAogICAgICBlbmNvZGVkOiBkeW5hbWljID8gZW5jb2RlUGFyYW1zKHByZXBhcmVkUGFyYW1zKSA6IGNvbmNhdChwcmVwYXJlZFBhcmFtcy5tYXAoKHsgZW5jb2RlZCB9KSA9PiBlbmNvZGVkKSkKICAgIH07CiAgfQogIGZ1bmN0aW9uIGdldEFycmF5Q29tcG9uZW50cyh0eXBlKSB7CiAgICBjb25zdCBtYXRjaGVzID0gdHlwZS5tYXRjaCgvXiguKilcWyhcZCspP1xdJC8pOwogICAgcmV0dXJuIG1hdGNoZXMgPyAoCiAgICAgIC8vIFJldHVybiBgbnVsbGAgaWYgdGhlIGFycmF5IGlzIGR5bmFtaWMuCiAgICAgIFttYXRjaGVzWzJdID8gTnVtYmVyKG1hdGNoZXNbMl0pIDogbnVsbCwgbWF0Y2hlc1sxXV0KICAgICkgOiB2b2lkIDA7CiAgfQogIHZhciBpbml0X2VuY29kZUFiaVBhcmFtZXRlcnMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlQWJpUGFyYW1ldGVycy5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfYWRkcmVzcygpOwogICAgICBpbml0X2Jhc2UoKTsKICAgICAgaW5pdF9pc0FkZHJlc3MoKTsKICAgICAgaW5pdF9jb25jYXQoKTsKICAgICAgaW5pdF9wYWQoKTsKICAgICAgaW5pdF9zaXplKCk7CiAgICAgIGluaXRfc2xpY2UoKTsKICAgICAgaW5pdF90b0hleCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9GdW5jdGlvblNlbGVjdG9yLmpzCiAgdmFyIHRvRnVuY3Rpb25TZWxlY3RvcjsKICB2YXIgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvRnVuY3Rpb25TZWxlY3Rvci5qcyIoKSB7CiAgICAgIGluaXRfc2xpY2UoKTsKICAgICAgaW5pdF90b1NpZ25hdHVyZUhhc2goKTsKICAgICAgdG9GdW5jdGlvblNlbGVjdG9yID0gKGZuKSA9PiBzbGljZSh0b1NpZ25hdHVyZUhhc2goZm4pLCAwLCA0KTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZ2V0QWJpSXRlbS5qcwogIGZ1bmN0aW9uIGdldEFiaUl0ZW0ocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFyZ3MgPSBbXSwgbmFtZSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGlzU2VsZWN0b3IgPSBpc0hleChuYW1lLCB7IHN0cmljdDogZmFsc2UgfSk7CiAgICBjb25zdCBhYmlJdGVtcyA9IGFiaTIuZmlsdGVyKChhYmlJdGVtKSA9PiB7CiAgICAgIGlmIChpc1NlbGVjdG9yKSB7CiAgICAgICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImZ1bmN0aW9uIikKICAgICAgICAgIHJldHVybiB0b0Z1bmN0aW9uU2VsZWN0b3IoYWJpSXRlbSkgPT09IG5hbWU7CiAgICAgICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImV2ZW50IikKICAgICAgICAgIHJldHVybiB0b0V2ZW50U2VsZWN0b3IoYWJpSXRlbSkgPT09IG5hbWU7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiAibmFtZSIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLm5hbWUgPT09IG5hbWU7CiAgICB9KTsKICAgIGlmIChhYmlJdGVtcy5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiB2b2lkIDA7CiAgICBpZiAoYWJpSXRlbXMubGVuZ3RoID09PSAxKQogICAgICByZXR1cm4gYWJpSXRlbXNbMF07CiAgICBsZXQgbWF0Y2hlZEFiaUl0ZW0gPSB2b2lkIDA7CiAgICBmb3IgKGNvbnN0IGFiaUl0ZW0gb2YgYWJpSXRlbXMpIHsKICAgICAgaWYgKCEoImlucHV0cyIgaW4gYWJpSXRlbSkpCiAgICAgICAgY29udGludWU7CiAgICAgIGlmICghYXJncyB8fCBhcmdzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIGlmICghYWJpSXRlbS5pbnB1dHMgfHwgYWJpSXRlbS5pbnB1dHMubGVuZ3RoID09PSAwKQogICAgICAgICAgcmV0dXJuIGFiaUl0ZW07CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKCFhYmlJdGVtLmlucHV0cykKICAgICAgICBjb250aW51ZTsKICAgICAgaWYgKGFiaUl0ZW0uaW5wdXRzLmxlbmd0aCA9PT0gMCkKICAgICAgICBjb250aW51ZTsKICAgICAgaWYgKGFiaUl0ZW0uaW5wdXRzLmxlbmd0aCAhPT0gYXJncy5sZW5ndGgpCiAgICAgICAgY29udGludWU7CiAgICAgIGNvbnN0IG1hdGNoZWQgPSBhcmdzLmV2ZXJ5KChhcmcsIGluZGV4MikgPT4gewogICAgICAgIGNvbnN0IGFiaVBhcmFtZXRlciA9ICJpbnB1dHMiIGluIGFiaUl0ZW0gJiYgYWJpSXRlbS5pbnB1dHNbaW5kZXgyXTsKICAgICAgICBpZiAoIWFiaVBhcmFtZXRlcikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gaXNBcmdPZlR5cGUoYXJnLCBhYmlQYXJhbWV0ZXIpOwogICAgICB9KTsKICAgICAgaWYgKG1hdGNoZWQpIHsKICAgICAgICBpZiAobWF0Y2hlZEFiaUl0ZW0gJiYgImlucHV0cyIgaW4gbWF0Y2hlZEFiaUl0ZW0gJiYgbWF0Y2hlZEFiaUl0ZW0uaW5wdXRzKSB7CiAgICAgICAgICBjb25zdCBhbWJpZ3VvdXNUeXBlcyA9IGdldEFtYmlndW91c1R5cGVzKGFiaUl0ZW0uaW5wdXRzLCBtYXRjaGVkQWJpSXRlbS5pbnB1dHMsIGFyZ3MpOwogICAgICAgICAgaWYgKGFtYmlndW91c1R5cGVzKQogICAgICAgICAgICB0aHJvdyBuZXcgQWJpSXRlbUFtYmlndWl0eUVycm9yKHsKICAgICAgICAgICAgICBhYmlJdGVtLAogICAgICAgICAgICAgIHR5cGU6IGFtYmlndW91c1R5cGVzWzBdCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICBhYmlJdGVtOiBtYXRjaGVkQWJpSXRlbSwKICAgICAgICAgICAgICB0eXBlOiBhbWJpZ3VvdXNUeXBlc1sxXQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgbWF0Y2hlZEFiaUl0ZW0gPSBhYmlJdGVtOwogICAgICB9CiAgICB9CiAgICBpZiAobWF0Y2hlZEFiaUl0ZW0pCiAgICAgIHJldHVybiBtYXRjaGVkQWJpSXRlbTsKICAgIHJldHVybiBhYmlJdGVtc1swXTsKICB9CiAgZnVuY3Rpb24gaXNBcmdPZlR5cGUoYXJnLCBhYmlQYXJhbWV0ZXIpIHsKICAgIGNvbnN0IGFyZ1R5cGUgPSB0eXBlb2YgYXJnOwogICAgY29uc3QgYWJpUGFyYW1ldGVyVHlwZSA9IGFiaVBhcmFtZXRlci50eXBlOwogICAgc3dpdGNoIChhYmlQYXJhbWV0ZXJUeXBlKSB7CiAgICAgIGNhc2UgImFkZHJlc3MiOgogICAgICAgIHJldHVybiBpc0FkZHJlc3MoYXJnLCB7IHN0cmljdDogZmFsc2UgfSk7CiAgICAgIGNhc2UgImJvb2wiOgogICAgICAgIHJldHVybiBhcmdUeXBlID09PSAiYm9vbGVhbiI7CiAgICAgIGNhc2UgImZ1bmN0aW9uIjoKICAgICAgICByZXR1cm4gYXJnVHlwZSA9PT0gInN0cmluZyI7CiAgICAgIGNhc2UgInN0cmluZyI6CiAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT09ICJzdHJpbmciOwogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaWYgKGFiaVBhcmFtZXRlclR5cGUgPT09ICJ0dXBsZSIgJiYgImNvbXBvbmVudHMiIGluIGFiaVBhcmFtZXRlcikKICAgICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGFiaVBhcmFtZXRlci5jb21wb25lbnRzKS5ldmVyeSgoY29tcG9uZW50LCBpbmRleDIpID0+IHsKICAgICAgICAgICAgcmV0dXJuIGlzQXJnT2ZUeXBlKE9iamVjdC52YWx1ZXMoYXJnKVtpbmRleDJdLCBjb21wb25lbnQpOwogICAgICAgICAgfSk7CiAgICAgICAgaWYgKC9edT9pbnQoOHwxNnwyNHwzMnw0MHw0OHw1Nnw2NHw3Mnw4MHw4OHw5NnwxMDR8MTEyfDEyMHwxMjh8MTM2fDE0NHwxNTJ8MTYwfDE2OHwxNzZ8MTg0fDE5MnwyMDB8MjA4fDIxNnwyMjR8MjMyfDI0MHwyNDh8MjU2KT8kLy50ZXN0KGFiaVBhcmFtZXRlclR5cGUpKQogICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT09ICJudW1iZXIiIHx8IGFyZ1R5cGUgPT09ICJiaWdpbnQiOwogICAgICAgIGlmICgvXmJ5dGVzKFsxLTldfDFbMC05XXwyWzAtOV18M1swLTJdKT8kLy50ZXN0KGFiaVBhcmFtZXRlclR5cGUpKQogICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT09ICJzdHJpbmciIHx8IGFyZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk7CiAgICAgICAgaWYgKC9bYS16XStbMS05XXswLDN9KFxbWzAtOV17MCx9XF0pKyQvLnRlc3QoYWJpUGFyYW1ldGVyVHlwZSkpIHsKICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFyZykgJiYgYXJnLmV2ZXJ5KCh4KSA9PiBpc0FyZ09mVHlwZSh4LCB7CiAgICAgICAgICAgIC4uLmFiaVBhcmFtZXRlciwKICAgICAgICAgICAgLy8gUG9wIG9mZiBgW11gIG9yIGBbTV1gIGZyb20gZW5kIG9mIHR5cGUKICAgICAgICAgICAgdHlwZTogYWJpUGFyYW1ldGVyVHlwZS5yZXBsYWNlKC8oXFtbMC05XXswLH1cXSkkLywgIiIpCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiBnZXRBbWJpZ3VvdXNUeXBlcyhzb3VyY2VQYXJhbWV0ZXJzLCB0YXJnZXRQYXJhbWV0ZXJzLCBhcmdzKSB7CiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlckluZGV4IGluIHNvdXJjZVBhcmFtZXRlcnMpIHsKICAgICAgY29uc3Qgc291cmNlUGFyYW1ldGVyID0gc291cmNlUGFyYW1ldGVyc1twYXJhbWV0ZXJJbmRleF07CiAgICAgIGNvbnN0IHRhcmdldFBhcmFtZXRlciA9IHRhcmdldFBhcmFtZXRlcnNbcGFyYW1ldGVySW5kZXhdOwogICAgICBpZiAoc291cmNlUGFyYW1ldGVyLnR5cGUgPT09ICJ0dXBsZSIgJiYgdGFyZ2V0UGFyYW1ldGVyLnR5cGUgPT09ICJ0dXBsZSIgJiYgImNvbXBvbmVudHMiIGluIHNvdXJjZVBhcmFtZXRlciAmJiAiY29tcG9uZW50cyIgaW4gdGFyZ2V0UGFyYW1ldGVyKQogICAgICAgIHJldHVybiBnZXRBbWJpZ3VvdXNUeXBlcyhzb3VyY2VQYXJhbWV0ZXIuY29tcG9uZW50cywgdGFyZ2V0UGFyYW1ldGVyLmNvbXBvbmVudHMsIGFyZ3NbcGFyYW1ldGVySW5kZXhdKTsKICAgICAgY29uc3QgdHlwZXMgPSBbc291cmNlUGFyYW1ldGVyLnR5cGUsIHRhcmdldFBhcmFtZXRlci50eXBlXTsKICAgICAgY29uc3QgYW1iaWd1b3VzID0gKCgpID0+IHsKICAgICAgICBpZiAodHlwZXMuaW5jbHVkZXMoImFkZHJlc3MiKSAmJiB0eXBlcy5pbmNsdWRlcygiYnl0ZXMyMCIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKHR5cGVzLmluY2x1ZGVzKCJhZGRyZXNzIikgJiYgdHlwZXMuaW5jbHVkZXMoInN0cmluZyIpKQogICAgICAgICAgcmV0dXJuIGlzQWRkcmVzcyhhcmdzW3BhcmFtZXRlckluZGV4XSwgeyBzdHJpY3Q6IGZhbHNlIH0pOwogICAgICAgIGlmICh0eXBlcy5pbmNsdWRlcygiYWRkcmVzcyIpICYmIHR5cGVzLmluY2x1ZGVzKCJieXRlcyIpKQogICAgICAgICAgcmV0dXJuIGlzQWRkcmVzcyhhcmdzW3BhcmFtZXRlckluZGV4XSwgeyBzdHJpY3Q6IGZhbHNlIH0pOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSkoKTsKICAgICAgaWYgKGFtYmlndW91cykKICAgICAgICByZXR1cm4gdHlwZXM7CiAgICB9CiAgICByZXR1cm47CiAgfQogIHZhciBpbml0X2dldEFiaUl0ZW0gPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZ2V0QWJpSXRlbS5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfaXNIZXgoKTsKICAgICAgaW5pdF9pc0FkZHJlc3MoKTsKICAgICAgaW5pdF90b0V2ZW50U2VsZWN0b3IoKTsKICAgICAgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9wYXJzZUFjY291bnQuanMKICBmdW5jdGlvbiBwYXJzZUFjY291bnQoYWNjb3VudCkgewogICAgaWYgKHR5cGVvZiBhY2NvdW50ID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIHsgYWRkcmVzczogYWNjb3VudCwgdHlwZTogImpzb24tcnBjIiB9OwogICAgcmV0dXJuIGFjY291bnQ7CiAgfQogIHZhciBpbml0X3BhcnNlQWNjb3VudCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjY291bnRzL3V0aWxzL3BhcnNlQWNjb3VudC5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL3ByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEuanMKICBmdW5jdGlvbiBwcmVwYXJlRW5jb2RlRnVuY3Rpb25EYXRhKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhcmdzLCBmdW5jdGlvbk5hbWUgfSA9IHBhcmFtZXRlcnM7CiAgICBsZXQgYWJpSXRlbSA9IGFiaTJbMF07CiAgICBpZiAoZnVuY3Rpb25OYW1lKSB7CiAgICAgIGNvbnN0IGl0ZW0gPSBnZXRBYmlJdGVtKHsKICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgYXJncywKICAgICAgICBuYW1lOiBmdW5jdGlvbk5hbWUKICAgICAgfSk7CiAgICAgIGlmICghaXRlbSkKICAgICAgICB0aHJvdyBuZXcgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yKGZ1bmN0aW9uTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGgyIH0pOwogICAgICBhYmlJdGVtID0gaXRlbTsKICAgIH0KICAgIGlmIChhYmlJdGVtLnR5cGUgIT09ICJmdW5jdGlvbiIpCiAgICAgIHRocm93IG5ldyBBYmlGdW5jdGlvbk5vdEZvdW5kRXJyb3Iodm9pZCAwLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDIgfSk7CiAgICByZXR1cm4gewogICAgICBhYmk6IFthYmlJdGVtXSwKICAgICAgZnVuY3Rpb25OYW1lOiB0b0Z1bmN0aW9uU2VsZWN0b3IoZm9ybWF0QWJpSXRlbTIoYWJpSXRlbSkpCiAgICB9OwogIH0KICB2YXIgZG9jc1BhdGgyOwogIHZhciBpbml0X3ByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvcHJlcGFyZUVuY29kZUZ1bmN0aW9uRGF0YS5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfdG9GdW5jdGlvblNlbGVjdG9yKCk7CiAgICAgIGluaXRfZm9ybWF0QWJpSXRlbTIoKTsKICAgICAgaW5pdF9nZXRBYmlJdGVtKCk7CiAgICAgIGRvY3NQYXRoMiA9ICIvZG9jcy9jb250cmFjdC9lbmNvZGVGdW5jdGlvbkRhdGEiOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVGdW5jdGlvbkRhdGEuanMKICBmdW5jdGlvbiBlbmNvZGVGdW5jdGlvbkRhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhcmdzIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgeyBhYmk6IGFiaTIsIGZ1bmN0aW9uTmFtZSB9ID0gKCgpID0+IHsKICAgICAgaWYgKHBhcmFtZXRlcnMuYWJpLmxlbmd0aCA9PT0gMSAmJiBwYXJhbWV0ZXJzLmZ1bmN0aW9uTmFtZT8uc3RhcnRzV2l0aCgiMHgiKSkKICAgICAgICByZXR1cm4gcGFyYW1ldGVyczsKICAgICAgcmV0dXJuIHByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEocGFyYW1ldGVycyk7CiAgICB9KSgpOwogICAgY29uc3QgYWJpSXRlbSA9IGFiaTJbMF07CiAgICBjb25zdCBzaWduYXR1cmUgPSBmdW5jdGlvbk5hbWU7CiAgICBjb25zdCBkYXRhID0gImlucHV0cyIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLmlucHV0cyA/IGVuY29kZUFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMsIGFyZ3MgPz8gW10pIDogdm9pZCAwOwogICAgcmV0dXJuIGNvbmNhdEhleChbc2lnbmF0dXJlLCBkYXRhID8/ICIweCJdKTsKICB9CiAgdmFyIGluaXRfZW5jb2RlRnVuY3Rpb25EYXRhID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2VuY29kZUZ1bmN0aW9uRGF0YS5qcyIoKSB7CiAgICAgIGluaXRfY29uY2F0KCk7CiAgICAgIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogICAgICBpbml0X3ByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMvc29saWRpdHkuanMKICB2YXIgcGFuaWNSZWFzb25zLCBzb2xpZGl0eUVycm9yLCBzb2xpZGl0eVBhbmljOwogIHZhciBpbml0X3NvbGlkaXR5ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL3NvbGlkaXR5LmpzIigpIHsKICAgICAgcGFuaWNSZWFzb25zID0gewogICAgICAgIDE6ICJBbiBgYXNzZXJ0YCBjb25kaXRpb24gZmFpbGVkLiIsCiAgICAgICAgMTc6ICJBcml0aG1ldGljIG9wZXJhdGlvbiByZXN1bHRlZCBpbiB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cuIiwKICAgICAgICAxODogIkRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvIChlLmcuIGA1IC8gMGAgb3IgYDIzICUgMGApLiIsCiAgICAgICAgMzM6ICJBdHRlbXB0ZWQgdG8gY29udmVydCB0byBhbiBpbnZhbGlkIHR5cGUuIiwKICAgICAgICAzNDogIkF0dGVtcHRlZCB0byBhY2Nlc3MgYSBzdG9yYWdlIGJ5dGUgYXJyYXkgdGhhdCBpcyBpbmNvcnJlY3RseSBlbmNvZGVkLiIsCiAgICAgICAgNDk6ICJQZXJmb3JtZWQgYC5wb3AoKWAgb24gYW4gZW1wdHkgYXJyYXkiLAogICAgICAgIDUwOiAiQXJyYXkgaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4iLAogICAgICAgIDY1OiAiQWxsb2NhdGVkIHRvbyBtdWNoIG1lbW9yeSBvciBjcmVhdGVkIGFuIGFycmF5IHdoaWNoIGlzIHRvbyBsYXJnZS4iLAogICAgICAgIDgxOiAiQXR0ZW1wdGVkIHRvIGNhbGwgYSB6ZXJvLWluaXRpYWxpemVkIHZhcmlhYmxlIG9mIGludGVybmFsIGZ1bmN0aW9uIHR5cGUuIgogICAgICB9OwogICAgICBzb2xpZGl0eUVycm9yID0gewogICAgICAgIGlucHV0czogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAibWVzc2FnZSIsCiAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICBuYW1lOiAiRXJyb3IiLAogICAgICAgIHR5cGU6ICJlcnJvciIKICAgICAgfTsKICAgICAgc29saWRpdHlQYW5pYyA9IHsKICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogInJlYXNvbiIsCiAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgbmFtZTogIlBhbmljIiwKICAgICAgICB0eXBlOiAiZXJyb3IiCiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2N1cnNvci5qcwogIHZhciBOZWdhdGl2ZU9mZnNldEVycm9yLCBQb3NpdGlvbk91dE9mQm91bmRzRXJyb3IsIFJlY3Vyc2l2ZVJlYWRMaW1pdEV4Y2VlZGVkRXJyb3I7CiAgdmFyIGluaXRfY3Vyc29yID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2N1cnNvci5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBOZWdhdGl2ZU9mZnNldEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IG9mZnNldCB9KSB7CiAgICAgICAgICBzdXBlcihgT2Zmc2V0IFxgJHtvZmZzZXR9XGAgY2Fubm90IGJlIG5lZ2F0aXZlLmAsIHsKICAgICAgICAgICAgbmFtZTogIk5lZ2F0aXZlT2Zmc2V0RXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFBvc2l0aW9uT3V0T2ZCb3VuZHNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBsZW5ndGgsIHBvc2l0aW9uIH0pIHsKICAgICAgICAgIHN1cGVyKGBQb3NpdGlvbiBcYCR7cG9zaXRpb259XGAgaXMgb3V0IG9mIGJvdW5kcyAoXGAwIDwgcG9zaXRpb24gPCAke2xlbmd0aH1cYCkuYCwgeyBuYW1lOiAiUG9zaXRpb25PdXRPZkJvdW5kc0Vycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFJlY3Vyc2l2ZVJlYWRMaW1pdEV4Y2VlZGVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY291bnQsIGxpbWl0IH0pIHsKICAgICAgICAgIHN1cGVyKGBSZWN1cnNpdmUgcmVhZCBsaW1pdCBvZiBcYCR7bGltaXR9XGAgZXhjZWVkZWQgKHJlY3Vyc2l2ZSByZWFkIGNvdW50OiBcYCR7Y291bnR9XGApLmAsIHsgbmFtZTogIlJlY3Vyc2l2ZVJlYWRMaW1pdEV4Y2VlZGVkRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9jdXJzb3IuanMKICBmdW5jdGlvbiBjcmVhdGVDdXJzb3IoYnl0ZXMyLCB7IHJlY3Vyc2l2ZVJlYWRMaW1pdCA9IDgxOTIgfSA9IHt9KSB7CiAgICBjb25zdCBjdXJzb3IgPSBPYmplY3QuY3JlYXRlKHN0YXRpY0N1cnNvcik7CiAgICBjdXJzb3IuYnl0ZXMgPSBieXRlczI7CiAgICBjdXJzb3IuZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYnl0ZXMyLmJ1ZmZlciwgYnl0ZXMyLmJ5dGVPZmZzZXQsIGJ5dGVzMi5ieXRlTGVuZ3RoKTsKICAgIGN1cnNvci5wb3NpdGlvblJlYWRDb3VudCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBjdXJzb3IucmVjdXJzaXZlUmVhZExpbWl0ID0gcmVjdXJzaXZlUmVhZExpbWl0OwogICAgcmV0dXJuIGN1cnNvcjsKICB9CiAgdmFyIHN0YXRpY0N1cnNvcjsKICB2YXIgaW5pdF9jdXJzb3IyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY3Vyc29yLmpzIigpIHsKICAgICAgaW5pdF9jdXJzb3IoKTsKICAgICAgc3RhdGljQ3Vyc29yID0gewogICAgICAgIGJ5dGVzOiBuZXcgVWludDhBcnJheSgpLAogICAgICAgIGRhdGFWaWV3OiBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDApKSwKICAgICAgICBwb3NpdGlvbjogMCwKICAgICAgICBwb3NpdGlvblJlYWRDb3VudDogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwKICAgICAgICByZWN1cnNpdmVSZWFkQ291bnQ6IDAsCiAgICAgICAgcmVjdXJzaXZlUmVhZExpbWl0OiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksCiAgICAgICAgYXNzZXJ0UmVhZExpbWl0KCkgewogICAgICAgICAgaWYgKHRoaXMucmVjdXJzaXZlUmVhZENvdW50ID49IHRoaXMucmVjdXJzaXZlUmVhZExpbWl0KQogICAgICAgICAgICB0aHJvdyBuZXcgUmVjdXJzaXZlUmVhZExpbWl0RXhjZWVkZWRFcnJvcih7CiAgICAgICAgICAgICAgY291bnQ6IHRoaXMucmVjdXJzaXZlUmVhZENvdW50ICsgMSwKICAgICAgICAgICAgICBsaW1pdDogdGhpcy5yZWN1cnNpdmVSZWFkTGltaXQKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBhc3NlcnRQb3NpdGlvbihwb3NpdGlvbikgewogICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+IHRoaXMuYnl0ZXMubGVuZ3RoIC0gMSkKICAgICAgICAgICAgdGhyb3cgbmV3IFBvc2l0aW9uT3V0T2ZCb3VuZHNFcnJvcih7CiAgICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmJ5dGVzLmxlbmd0aCwKICAgICAgICAgICAgICBwb3NpdGlvbgogICAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGRlY3JlbWVudFBvc2l0aW9uKG9mZnNldCkgewogICAgICAgICAgaWYgKG9mZnNldCA8IDApCiAgICAgICAgICAgIHRocm93IG5ldyBOZWdhdGl2ZU9mZnNldEVycm9yKHsgb2Zmc2V0IH0pOwogICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uIC0gb2Zmc2V0OwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbik7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgICAgfSwKICAgICAgICBnZXRSZWFkQ291bnQocG9zaXRpb24pIHsKICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uUmVhZENvdW50LmdldChwb3NpdGlvbiB8fCB0aGlzLnBvc2l0aW9uKSB8fCAwOwogICAgICAgIH0sCiAgICAgICAgaW5jcmVtZW50UG9zaXRpb24ob2Zmc2V0KSB7CiAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkKICAgICAgICAgICAgdGhyb3cgbmV3IE5lZ2F0aXZlT2Zmc2V0RXJyb3IoeyBvZmZzZXQgfSk7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb24gKyBvZmZzZXQ7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RCeXRlKHBvc2l0aW9uXykgewogICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbl8gPz8gdGhpcy5wb3NpdGlvbjsKICAgICAgICAgIHRoaXMuYXNzZXJ0UG9zaXRpb24ocG9zaXRpb24pOwogICAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZXNbcG9zaXRpb25dOwogICAgICAgIH0sCiAgICAgICAgaW5zcGVjdEJ5dGVzKGxlbmd0aCwgcG9zaXRpb25fKSB7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uXyA/PyB0aGlzLnBvc2l0aW9uOwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbiArIGxlbmd0aCAtIDEpOwogICAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZXMuc3ViYXJyYXkocG9zaXRpb24sIHBvc2l0aW9uICsgbGVuZ3RoKTsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RVaW50OChwb3NpdGlvbl8pIHsKICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gcG9zaXRpb25fID8/IHRoaXMucG9zaXRpb247CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICAgICAgIHJldHVybiB0aGlzLmJ5dGVzW3Bvc2l0aW9uXTsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RVaW50MTYocG9zaXRpb25fKSB7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uXyA/PyB0aGlzLnBvc2l0aW9uOwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbiArIDEpOwogICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0VWludDE2KHBvc2l0aW9uKTsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RVaW50MjQocG9zaXRpb25fKSB7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uXyA/PyB0aGlzLnBvc2l0aW9uOwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbiArIDIpOwogICAgICAgICAgcmV0dXJuICh0aGlzLmRhdGFWaWV3LmdldFVpbnQxNihwb3NpdGlvbikgPDwgOCkgKyB0aGlzLmRhdGFWaWV3LmdldFVpbnQ4KHBvc2l0aW9uICsgMik7CiAgICAgICAgfSwKICAgICAgICBpbnNwZWN0VWludDMyKHBvc2l0aW9uXykgewogICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbl8gPz8gdGhpcy5wb3NpdGlvbjsKICAgICAgICAgIHRoaXMuYXNzZXJ0UG9zaXRpb24ocG9zaXRpb24gKyAzKTsKICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldFVpbnQzMihwb3NpdGlvbik7CiAgICAgICAgfSwKICAgICAgICBwdXNoQnl0ZShieXRlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24pOwogICAgICAgICAgdGhpcy5ieXRlc1t0aGlzLnBvc2l0aW9uXSA9IGJ5dGU7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uKys7CiAgICAgICAgfSwKICAgICAgICBwdXNoQnl0ZXMoYnl0ZXMyKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24gKyBieXRlczIubGVuZ3RoIC0gMSk7CiAgICAgICAgICB0aGlzLmJ5dGVzLnNldChieXRlczIsIHRoaXMucG9zaXRpb24pOwogICAgICAgICAgdGhpcy5wb3NpdGlvbiArPSBieXRlczIubGVuZ3RoOwogICAgICAgIH0sCiAgICAgICAgcHVzaFVpbnQ4KHZhbHVlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24pOwogICAgICAgICAgdGhpcy5ieXRlc1t0aGlzLnBvc2l0aW9uXSA9IHZhbHVlOwogICAgICAgICAgdGhpcy5wb3NpdGlvbisrOwogICAgICAgIH0sCiAgICAgICAgcHVzaFVpbnQxNih2YWx1ZSkgewogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbih0aGlzLnBvc2l0aW9uICsgMSk7CiAgICAgICAgICB0aGlzLmRhdGFWaWV3LnNldFVpbnQxNih0aGlzLnBvc2l0aW9uLCB2YWx1ZSk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDI7CiAgICAgICAgfSwKICAgICAgICBwdXNoVWludDI0KHZhbHVlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24gKyAyKTsKICAgICAgICAgIHRoaXMuZGF0YVZpZXcuc2V0VWludDE2KHRoaXMucG9zaXRpb24sIHZhbHVlID4+IDgpOwogICAgICAgICAgdGhpcy5kYXRhVmlldy5zZXRVaW50OCh0aGlzLnBvc2l0aW9uICsgMiwgdmFsdWUgJiB+NDI5NDk2NzA0MCk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDM7CiAgICAgICAgfSwKICAgICAgICBwdXNoVWludDMyKHZhbHVlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24gKyAzKTsKICAgICAgICAgIHRoaXMuZGF0YVZpZXcuc2V0VWludDMyKHRoaXMucG9zaXRpb24sIHZhbHVlKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gKz0gNDsKICAgICAgICB9LAogICAgICAgIHJlYWRCeXRlKCkgewogICAgICAgICAgdGhpcy5hc3NlcnRSZWFkTGltaXQoKTsKICAgICAgICAgIHRoaXMuX3RvdWNoKCk7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zcGVjdEJ5dGUoKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24rKzsKICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9LAogICAgICAgIHJlYWRCeXRlcyhsZW5ndGgsIHNpemUzKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFJlYWRMaW1pdCgpOwogICAgICAgICAgdGhpcy5fdG91Y2goKTsKICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnNwZWN0Qnl0ZXMobGVuZ3RoKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gKz0gc2l6ZTMgPz8gbGVuZ3RoOwogICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0sCiAgICAgICAgcmVhZFVpbnQ4KCkgewogICAgICAgICAgdGhpcy5hc3NlcnRSZWFkTGltaXQoKTsKICAgICAgICAgIHRoaXMuX3RvdWNoKCk7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zcGVjdFVpbnQ4KCk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDE7CiAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfSwKICAgICAgICByZWFkVWludDE2KCkgewogICAgICAgICAgdGhpcy5hc3NlcnRSZWFkTGltaXQoKTsKICAgICAgICAgIHRoaXMuX3RvdWNoKCk7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zcGVjdFVpbnQxNigpOwogICAgICAgICAgdGhpcy5wb3NpdGlvbiArPSAyOwogICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0sCiAgICAgICAgcmVhZFVpbnQyNCgpIHsKICAgICAgICAgIHRoaXMuYXNzZXJ0UmVhZExpbWl0KCk7CiAgICAgICAgICB0aGlzLl90b3VjaCgpOwogICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmluc3BlY3RVaW50MjQoKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gKz0gMzsKICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9LAogICAgICAgIHJlYWRVaW50MzIoKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFJlYWRMaW1pdCgpOwogICAgICAgICAgdGhpcy5fdG91Y2goKTsKICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnNwZWN0VWludDMyKCk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDQ7CiAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfSwKICAgICAgICBnZXQgcmVtYWluaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZXMubGVuZ3RoIC0gdGhpcy5wb3NpdGlvbjsKICAgICAgICB9LAogICAgICAgIHNldFBvc2l0aW9uKHBvc2l0aW9uKSB7CiAgICAgICAgICBjb25zdCBvbGRQb3NpdGlvbiA9IHRoaXMucG9zaXRpb247CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICAgICAgIHJldHVybiAoKSA9PiB0aGlzLnBvc2l0aW9uID0gb2xkUG9zaXRpb247CiAgICAgICAgfSwKICAgICAgICBfdG91Y2goKSB7CiAgICAgICAgICBpZiAodGhpcy5yZWN1cnNpdmVSZWFkTGltaXQgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLmdldFJlYWRDb3VudCgpOwogICAgICAgICAgdGhpcy5wb3NpdGlvblJlYWRDb3VudC5zZXQodGhpcy5wb3NpdGlvbiwgY291bnQgKyAxKTsKICAgICAgICAgIGlmIChjb3VudCA+IDApCiAgICAgICAgICAgIHRoaXMucmVjdXJzaXZlUmVhZENvdW50Kys7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL2Zyb21CeXRlcy5qcwogIGZ1bmN0aW9uIGZyb21CeXRlcyhieXRlczIsIHRvT3JPcHRzKSB7CiAgICBjb25zdCBvcHRzID0gdHlwZW9mIHRvT3JPcHRzID09PSAic3RyaW5nIiA/IHsgdG86IHRvT3JPcHRzIH0gOiB0b09yT3B0czsKICAgIGNvbnN0IHRvID0gb3B0cy50bzsKICAgIGlmICh0byA9PT0gIm51bWJlciIpCiAgICAgIHJldHVybiBieXRlc1RvTnVtYmVyKGJ5dGVzMiwgb3B0cyk7CiAgICBpZiAodG8gPT09ICJiaWdpbnQiKQogICAgICByZXR1cm4gYnl0ZXNUb0JpZ0ludChieXRlczIsIG9wdHMpOwogICAgaWYgKHRvID09PSAiYm9vbGVhbiIpCiAgICAgIHJldHVybiBieXRlc1RvQm9vbChieXRlczIsIG9wdHMpOwogICAgaWYgKHRvID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIGJ5dGVzVG9TdHJpbmcoYnl0ZXMyLCBvcHRzKTsKICAgIHJldHVybiBieXRlc1RvSGV4KGJ5dGVzMiwgb3B0cyk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9CaWdJbnQoYnl0ZXMyLCBvcHRzID0ge30pIHsKICAgIGlmICh0eXBlb2Ygb3B0cy5zaXplICE9PSAidW5kZWZpbmVkIikKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgY29uc3QgaGV4ID0gYnl0ZXNUb0hleChieXRlczIsIG9wdHMpOwogICAgcmV0dXJuIGhleFRvQmlnSW50KGhleCwgb3B0cyk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9Cb29sKGJ5dGVzXywgb3B0cyA9IHt9KSB7CiAgICBsZXQgYnl0ZXMyID0gYnl0ZXNfOwogICAgaWYgKHR5cGVvZiBvcHRzLnNpemUgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGFzc2VydFNpemUoYnl0ZXMyLCB7IHNpemU6IG9wdHMuc2l6ZSB9KTsKICAgICAgYnl0ZXMyID0gdHJpbShieXRlczIpOwogICAgfQogICAgaWYgKGJ5dGVzMi5sZW5ndGggPiAxIHx8IGJ5dGVzMlswXSA+IDEpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQnl0ZXNCb29sZWFuRXJyb3IoYnl0ZXMyKTsKICAgIHJldHVybiBCb29sZWFuKGJ5dGVzMlswXSk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9OdW1iZXIoYnl0ZXMyLCBvcHRzID0ge30pIHsKICAgIGlmICh0eXBlb2Ygb3B0cy5zaXplICE9PSAidW5kZWZpbmVkIikKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgY29uc3QgaGV4ID0gYnl0ZXNUb0hleChieXRlczIsIG9wdHMpOwogICAgcmV0dXJuIGhleFRvTnVtYmVyKGhleCwgb3B0cyk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9TdHJpbmcoYnl0ZXNfLCBvcHRzID0ge30pIHsKICAgIGxldCBieXRlczIgPSBieXRlc187CiAgICBpZiAodHlwZW9mIG9wdHMuc2l6ZSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICBieXRlczIgPSB0cmltKGJ5dGVzMiwgeyBkaXI6ICJyaWdodCIgfSk7CiAgICB9CiAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGJ5dGVzMik7CiAgfQogIHZhciBpbml0X2Zyb21CeXRlcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL2Zyb21CeXRlcy5qcyIoKSB7CiAgICAgIGluaXRfZW5jb2RpbmcoKTsKICAgICAgaW5pdF90cmltKCk7CiAgICAgIGluaXRfZnJvbUhleCgpOwogICAgICBpbml0X3RvSGV4KCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZUFiaVBhcmFtZXRlcnMuanMKICBmdW5jdGlvbiBkZWNvZGVBYmlQYXJhbWV0ZXJzKHBhcmFtcywgZGF0YSkgewogICAgY29uc3QgYnl0ZXMyID0gdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciID8gaGV4VG9CeXRlcyhkYXRhKSA6IGRhdGE7CiAgICBjb25zdCBjdXJzb3IgPSBjcmVhdGVDdXJzb3IoYnl0ZXMyKTsKICAgIGlmIChzaXplKGJ5dGVzMikgPT09IDAgJiYgcGFyYW1zLmxlbmd0aCA+IDApCiAgICAgIHRocm93IG5ldyBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IoKTsKICAgIGlmIChzaXplKGRhdGEpICYmIHNpemUoZGF0YSkgPCAzMikKICAgICAgdGhyb3cgbmV3IEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yKHsKICAgICAgICBkYXRhOiB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgPyBkYXRhIDogYnl0ZXNUb0hleChkYXRhKSwKICAgICAgICBwYXJhbXMsCiAgICAgICAgc2l6ZTogc2l6ZShkYXRhKQogICAgICB9KTsKICAgIGxldCBjb25zdW1lZCA9IDA7CiAgICBjb25zdCB2YWx1ZXMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgKytpKSB7CiAgICAgIGNvbnN0IHBhcmFtID0gcGFyYW1zW2ldOwogICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oY29uc3VtZWQpOwogICAgICBjb25zdCBbZGF0YTIsIGNvbnN1bWVkX10gPSBkZWNvZGVQYXJhbWV0ZXIoY3Vyc29yLCBwYXJhbSwgewogICAgICAgIHN0YXRpY1Bvc2l0aW9uOiAwCiAgICAgIH0pOwogICAgICBjb25zdW1lZCArPSBjb25zdW1lZF87CiAgICAgIHZhbHVlcy5wdXNoKGRhdGEyKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZXM7CiAgfQogIGZ1bmN0aW9uIGRlY29kZVBhcmFtZXRlcihjdXJzb3IsIHBhcmFtLCB7IHN0YXRpY1Bvc2l0aW9uIH0pIHsKICAgIGNvbnN0IGFycmF5Q29tcG9uZW50cyA9IGdldEFycmF5Q29tcG9uZW50cyhwYXJhbS50eXBlKTsKICAgIGlmIChhcnJheUNvbXBvbmVudHMpIHsKICAgICAgY29uc3QgW2xlbmd0aCwgdHlwZV0gPSBhcnJheUNvbXBvbmVudHM7CiAgICAgIHJldHVybiBkZWNvZGVBcnJheShjdXJzb3IsIHsgLi4ucGFyYW0sIHR5cGUgfSwgeyBsZW5ndGgsIHN0YXRpY1Bvc2l0aW9uIH0pOwogICAgfQogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJ0dXBsZSIpCiAgICAgIHJldHVybiBkZWNvZGVUdXBsZShjdXJzb3IsIHBhcmFtLCB7IHN0YXRpY1Bvc2l0aW9uIH0pOwogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJhZGRyZXNzIikKICAgICAgcmV0dXJuIGRlY29kZUFkZHJlc3MoY3Vyc29yKTsKICAgIGlmIChwYXJhbS50eXBlID09PSAiYm9vbCIpCiAgICAgIHJldHVybiBkZWNvZGVCb29sKGN1cnNvcik7CiAgICBpZiAocGFyYW0udHlwZS5zdGFydHNXaXRoKCJieXRlcyIpKQogICAgICByZXR1cm4gZGVjb2RlQnl0ZXMoY3Vyc29yLCBwYXJhbSwgeyBzdGF0aWNQb3NpdGlvbiB9KTsKICAgIGlmIChwYXJhbS50eXBlLnN0YXJ0c1dpdGgoInVpbnQiKSB8fCBwYXJhbS50eXBlLnN0YXJ0c1dpdGgoImludCIpKQogICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKGN1cnNvciwgcGFyYW0pOwogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJzdHJpbmciKQogICAgICByZXR1cm4gZGVjb2RlU3RyaW5nKGN1cnNvciwgeyBzdGF0aWNQb3NpdGlvbiB9KTsKICAgIHRocm93IG5ldyBJbnZhbGlkQWJpRGVjb2RpbmdUeXBlRXJyb3IocGFyYW0udHlwZSwgewogICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L2RlY29kZUFiaVBhcmFtZXRlcnMiCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlQWRkcmVzcyhjdXJzb3IpIHsKICAgIGNvbnN0IHZhbHVlID0gY3Vyc29yLnJlYWRCeXRlcygzMik7CiAgICByZXR1cm4gW2NoZWNrc3VtQWRkcmVzcyhieXRlc1RvSGV4KHNsaWNlQnl0ZXModmFsdWUsIC0yMCkpKSwgMzJdOwogIH0KICBmdW5jdGlvbiBkZWNvZGVBcnJheShjdXJzb3IsIHBhcmFtLCB7IGxlbmd0aCwgc3RhdGljUG9zaXRpb24gfSkgewogICAgaWYgKCFsZW5ndGgpIHsKICAgICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKHNpemVPZk9mZnNldCkpOwogICAgICBjb25zdCBzdGFydCA9IHN0YXRpY1Bvc2l0aW9uICsgb2Zmc2V0OwogICAgICBjb25zdCBzdGFydE9mRGF0YSA9IHN0YXJ0ICsgc2l6ZU9mTGVuZ3RoOwogICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oc3RhcnQpOwogICAgICBjb25zdCBsZW5ndGgyID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKHNpemVPZkxlbmd0aCkpOwogICAgICBjb25zdCBkeW5hbWljQ2hpbGQgPSBoYXNEeW5hbWljQ2hpbGQocGFyYW0pOwogICAgICBsZXQgY29uc3VtZWQyID0gMDsKICAgICAgY29uc3QgdmFsdWUyID0gW107CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoMjsgKytpKSB7CiAgICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXJ0T2ZEYXRhICsgKGR5bmFtaWNDaGlsZCA/IGkgKiAzMiA6IGNvbnN1bWVkMikpOwogICAgICAgIGNvbnN0IFtkYXRhLCBjb25zdW1lZF9dID0gZGVjb2RlUGFyYW1ldGVyKGN1cnNvciwgcGFyYW0sIHsKICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uOiBzdGFydE9mRGF0YQogICAgICAgIH0pOwogICAgICAgIGNvbnN1bWVkMiArPSBjb25zdW1lZF87CiAgICAgICAgdmFsdWUyLnB1c2goZGF0YSk7CiAgICAgIH0KICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgICByZXR1cm4gW3ZhbHVlMiwgMzJdOwogICAgfQogICAgaWYgKGhhc0R5bmFtaWNDaGlsZChwYXJhbSkpIHsKICAgICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKHNpemVPZk9mZnNldCkpOwogICAgICBjb25zdCBzdGFydCA9IHN0YXRpY1Bvc2l0aW9uICsgb2Zmc2V0OwogICAgICBjb25zdCB2YWx1ZTIgPSBbXTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGFydCArIGkgKiAzMik7CiAgICAgICAgY29uc3QgW2RhdGFdID0gZGVjb2RlUGFyYW1ldGVyKGN1cnNvciwgcGFyYW0sIHsKICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uOiBzdGFydAogICAgICAgIH0pOwogICAgICAgIHZhbHVlMi5wdXNoKGRhdGEpOwogICAgICB9CiAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGF0aWNQb3NpdGlvbiArIDMyKTsKICAgICAgcmV0dXJuIFt2YWx1ZTIsIDMyXTsKICAgIH0KICAgIGxldCBjb25zdW1lZCA9IDA7CiAgICBjb25zdCB2YWx1ZSA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICBjb25zdCBbZGF0YSwgY29uc3VtZWRfXSA9IGRlY29kZVBhcmFtZXRlcihjdXJzb3IsIHBhcmFtLCB7CiAgICAgICAgc3RhdGljUG9zaXRpb246IHN0YXRpY1Bvc2l0aW9uICsgY29uc3VtZWQKICAgICAgfSk7CiAgICAgIGNvbnN1bWVkICs9IGNvbnN1bWVkXzsKICAgICAgdmFsdWUucHVzaChkYXRhKTsKICAgIH0KICAgIHJldHVybiBbdmFsdWUsIGNvbnN1bWVkXTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlQm9vbChjdXJzb3IpIHsKICAgIHJldHVybiBbYnl0ZXNUb0Jvb2woY3Vyc29yLnJlYWRCeXRlcygzMiksIHsgc2l6ZTogMzIgfSksIDMyXTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlQnl0ZXMoY3Vyc29yLCBwYXJhbSwgeyBzdGF0aWNQb3NpdGlvbiB9KSB7CiAgICBjb25zdCBbXywgc2l6ZTNdID0gcGFyYW0udHlwZS5zcGxpdCgiYnl0ZXMiKTsKICAgIGlmICghc2l6ZTMpIHsKICAgICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKDMyKSk7CiAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGF0aWNQb3NpdGlvbiArIG9mZnNldCk7CiAgICAgIGNvbnN0IGxlbmd0aCA9IGJ5dGVzVG9OdW1iZXIoY3Vyc29yLnJlYWRCeXRlcygzMikpOwogICAgICBpZiAobGVuZ3RoID09PSAwKSB7CiAgICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgICAgIHJldHVybiBbIjB4IiwgMzJdOwogICAgICB9CiAgICAgIGNvbnN0IGRhdGEgPSBjdXJzb3IucmVhZEJ5dGVzKGxlbmd0aCk7CiAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGF0aWNQb3NpdGlvbiArIDMyKTsKICAgICAgcmV0dXJuIFtieXRlc1RvSGV4KGRhdGEpLCAzMl07CiAgICB9CiAgICBjb25zdCB2YWx1ZSA9IGJ5dGVzVG9IZXgoY3Vyc29yLnJlYWRCeXRlcyhOdW1iZXIucGFyc2VJbnQoc2l6ZTMpLCAzMikpOwogICAgcmV0dXJuIFt2YWx1ZSwgMzJdOwogIH0KICBmdW5jdGlvbiBkZWNvZGVOdW1iZXIoY3Vyc29yLCBwYXJhbSkgewogICAgY29uc3Qgc2lnbmVkID0gcGFyYW0udHlwZS5zdGFydHNXaXRoKCJpbnQiKTsKICAgIGNvbnN0IHNpemUzID0gTnVtYmVyLnBhcnNlSW50KHBhcmFtLnR5cGUuc3BsaXQoImludCIpWzFdIHx8ICIyNTYiKTsKICAgIGNvbnN0IHZhbHVlID0gY3Vyc29yLnJlYWRCeXRlcygzMik7CiAgICByZXR1cm4gWwogICAgICBzaXplMyA+IDQ4ID8gYnl0ZXNUb0JpZ0ludCh2YWx1ZSwgeyBzaWduZWQgfSkgOiBieXRlc1RvTnVtYmVyKHZhbHVlLCB7IHNpZ25lZCB9KSwKICAgICAgMzIKICAgIF07CiAgfQogIGZ1bmN0aW9uIGRlY29kZVR1cGxlKGN1cnNvciwgcGFyYW0sIHsgc3RhdGljUG9zaXRpb24gfSkgewogICAgY29uc3QgaGFzVW5uYW1lZENoaWxkID0gcGFyYW0uY29tcG9uZW50cy5sZW5ndGggPT09IDAgfHwgcGFyYW0uY29tcG9uZW50cy5zb21lKCh7IG5hbWUgfSkgPT4gIW5hbWUpOwogICAgY29uc3QgdmFsdWUgPSBoYXNVbm5hbWVkQ2hpbGQgPyBbXSA6IHt9OwogICAgbGV0IGNvbnN1bWVkID0gMDsKICAgIGlmIChoYXNEeW5hbWljQ2hpbGQocGFyYW0pKSB7CiAgICAgIGNvbnN0IG9mZnNldCA9IGJ5dGVzVG9OdW1iZXIoY3Vyc29yLnJlYWRCeXRlcyhzaXplT2ZPZmZzZXQpKTsKICAgICAgY29uc3Qgc3RhcnQgPSBzdGF0aWNQb3NpdGlvbiArIG9mZnNldDsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbS5jb21wb25lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gcGFyYW0uY29tcG9uZW50c1tpXTsKICAgICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oc3RhcnQgKyBjb25zdW1lZCk7CiAgICAgICAgY29uc3QgW2RhdGEsIGNvbnN1bWVkX10gPSBkZWNvZGVQYXJhbWV0ZXIoY3Vyc29yLCBjb21wb25lbnQsIHsKICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uOiBzdGFydAogICAgICAgIH0pOwogICAgICAgIGNvbnN1bWVkICs9IGNvbnN1bWVkXzsKICAgICAgICB2YWx1ZVtoYXNVbm5hbWVkQ2hpbGQgPyBpIDogY29tcG9uZW50Py5uYW1lXSA9IGRhdGE7CiAgICAgIH0KICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgICByZXR1cm4gW3ZhbHVlLCAzMl07CiAgICB9CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtLmNvbXBvbmVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgY29uc3QgY29tcG9uZW50ID0gcGFyYW0uY29tcG9uZW50c1tpXTsKICAgICAgY29uc3QgW2RhdGEsIGNvbnN1bWVkX10gPSBkZWNvZGVQYXJhbWV0ZXIoY3Vyc29yLCBjb21wb25lbnQsIHsKICAgICAgICBzdGF0aWNQb3NpdGlvbgogICAgICB9KTsKICAgICAgdmFsdWVbaGFzVW5uYW1lZENoaWxkID8gaSA6IGNvbXBvbmVudD8ubmFtZV0gPSBkYXRhOwogICAgICBjb25zdW1lZCArPSBjb25zdW1lZF87CiAgICB9CiAgICByZXR1cm4gW3ZhbHVlLCBjb25zdW1lZF07CiAgfQogIGZ1bmN0aW9uIGRlY29kZVN0cmluZyhjdXJzb3IsIHsgc3RhdGljUG9zaXRpb24gfSkgewogICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKDMyKSk7CiAgICBjb25zdCBzdGFydCA9IHN0YXRpY1Bvc2l0aW9uICsgb2Zmc2V0OwogICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXJ0KTsKICAgIGNvbnN0IGxlbmd0aCA9IGJ5dGVzVG9OdW1iZXIoY3Vyc29yLnJlYWRCeXRlcygzMikpOwogICAgaWYgKGxlbmd0aCA9PT0gMCkgewogICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oc3RhdGljUG9zaXRpb24gKyAzMik7CiAgICAgIHJldHVybiBbIiIsIDMyXTsKICAgIH0KICAgIGNvbnN0IGRhdGEgPSBjdXJzb3IucmVhZEJ5dGVzKGxlbmd0aCwgMzIpOwogICAgY29uc3QgdmFsdWUgPSBieXRlc1RvU3RyaW5nKHRyaW0oZGF0YSkpOwogICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgcmV0dXJuIFt2YWx1ZSwgMzJdOwogIH0KICBmdW5jdGlvbiBoYXNEeW5hbWljQ2hpbGQocGFyYW0pIHsKICAgIGNvbnN0IHsgdHlwZSB9ID0gcGFyYW07CiAgICBpZiAodHlwZSA9PT0gInN0cmluZyIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUgPT09ICJieXRlcyIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUuZW5kc1dpdGgoIltdIikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUgPT09ICJ0dXBsZSIpCiAgICAgIHJldHVybiBwYXJhbS5jb21wb25lbnRzPy5zb21lKGhhc0R5bmFtaWNDaGlsZCk7CiAgICBjb25zdCBhcnJheUNvbXBvbmVudHMgPSBnZXRBcnJheUNvbXBvbmVudHMocGFyYW0udHlwZSk7CiAgICBpZiAoYXJyYXlDb21wb25lbnRzICYmIGhhc0R5bmFtaWNDaGlsZCh7IC4uLnBhcmFtLCB0eXBlOiBhcnJheUNvbXBvbmVudHNbMV0gfSkpCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KICB2YXIgc2l6ZU9mTGVuZ3RoLCBzaXplT2ZPZmZzZXQ7CiAgdmFyIGluaXRfZGVjb2RlQWJpUGFyYW1ldGVycyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9kZWNvZGVBYmlQYXJhbWV0ZXJzLmpzIigpIHsKICAgICAgaW5pdF9hYmkoKTsKICAgICAgaW5pdF9nZXRBZGRyZXNzKCk7CiAgICAgIGluaXRfY3Vyc29yMigpOwogICAgICBpbml0X3NpemUoKTsKICAgICAgaW5pdF9zbGljZSgpOwogICAgICBpbml0X3RyaW0oKTsKICAgICAgaW5pdF9mcm9tQnl0ZXMoKTsKICAgICAgaW5pdF90b0J5dGVzKCk7CiAgICAgIGluaXRfdG9IZXgoKTsKICAgICAgaW5pdF9lbmNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgICAgIHNpemVPZkxlbmd0aCA9IDMyOwogICAgICBzaXplT2ZPZmZzZXQgPSAzMjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZGVjb2RlRXJyb3JSZXN1bHQuanMKICBmdW5jdGlvbiBkZWNvZGVFcnJvclJlc3VsdChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgZGF0YSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNsaWNlKGRhdGEsIDAsIDQpOwogICAgaWYgKHNpZ25hdHVyZSA9PT0gIjB4IikKICAgICAgdGhyb3cgbmV3IEFiaURlY29kaW5nWmVyb0RhdGFFcnJvcigpOwogICAgY29uc3QgYWJpXyA9IFsuLi5hYmkyIHx8IFtdLCBzb2xpZGl0eUVycm9yLCBzb2xpZGl0eVBhbmljXTsKICAgIGNvbnN0IGFiaUl0ZW0gPSBhYmlfLmZpbmQoKHgpID0+IHgudHlwZSA9PT0gImVycm9yIiAmJiBzaWduYXR1cmUgPT09IHRvRnVuY3Rpb25TZWxlY3Rvcihmb3JtYXRBYmlJdGVtMih4KSkpOwogICAgaWYgKCFhYmlJdGVtKQogICAgICB0aHJvdyBuZXcgQWJpRXJyb3JTaWduYXR1cmVOb3RGb3VuZEVycm9yKHNpZ25hdHVyZSwgewogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3QvZGVjb2RlRXJyb3JSZXN1bHQiCiAgICAgIH0pOwogICAgcmV0dXJuIHsKICAgICAgYWJpSXRlbSwKICAgICAgYXJnczogImlucHV0cyIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLmlucHV0cyAmJiBhYmlJdGVtLmlucHV0cy5sZW5ndGggPiAwID8gZGVjb2RlQWJpUGFyYW1ldGVycyhhYmlJdGVtLmlucHV0cywgc2xpY2UoZGF0YSwgNCkpIDogdm9pZCAwLAogICAgICBlcnJvck5hbWU6IGFiaUl0ZW0ubmFtZQogICAgfTsKICB9CiAgdmFyIGluaXRfZGVjb2RlRXJyb3JSZXN1bHQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZGVjb2RlRXJyb3JSZXN1bHQuanMiKCkgewogICAgICBpbml0X3NvbGlkaXR5KCk7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfc2xpY2UoKTsKICAgICAgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IoKTsKICAgICAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgICAgIGluaXRfZm9ybWF0QWJpSXRlbTIoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zdHJpbmdpZnkuanMKICB2YXIgc3RyaW5naWZ5OwogIHZhciBpbml0X3N0cmluZ2lmeSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3N0cmluZ2lmeS5qcyIoKSB7CiAgICAgIHN0cmluZ2lmeSA9ICh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKSA9PiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgKGtleSwgdmFsdWVfKSA9PiB7CiAgICAgICAgY29uc3QgdmFsdWUyID0gdHlwZW9mIHZhbHVlXyA9PT0gImJpZ2ludCIgPyB2YWx1ZV8udG9TdHJpbmcoKSA6IHZhbHVlXzsKICAgICAgICByZXR1cm4gdHlwZW9mIHJlcGxhY2VyID09PSAiZnVuY3Rpb24iID8gcmVwbGFjZXIoa2V5LCB2YWx1ZTIpIDogdmFsdWUyOwogICAgICB9LCBzcGFjZSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2Zvcm1hdEFiaUl0ZW1XaXRoQXJncy5qcwogIGZ1bmN0aW9uIGZvcm1hdEFiaUl0ZW1XaXRoQXJncyh7IGFiaUl0ZW0sIGFyZ3MsIGluY2x1ZGVGdW5jdGlvbk5hbWUgPSB0cnVlLCBpbmNsdWRlTmFtZSA9IGZhbHNlIH0pIHsKICAgIGlmICghKCJuYW1lIiBpbiBhYmlJdGVtKSkKICAgICAgcmV0dXJuOwogICAgaWYgKCEoImlucHV0cyIgaW4gYWJpSXRlbSkpCiAgICAgIHJldHVybjsKICAgIGlmICghYWJpSXRlbS5pbnB1dHMpCiAgICAgIHJldHVybjsKICAgIHJldHVybiBgJHtpbmNsdWRlRnVuY3Rpb25OYW1lID8gYWJpSXRlbS5uYW1lIDogIiJ9KCR7YWJpSXRlbS5pbnB1dHMubWFwKChpbnB1dCwgaSkgPT4gYCR7aW5jbHVkZU5hbWUgJiYgaW5wdXQubmFtZSA/IGAke2lucHV0Lm5hbWV9OiBgIDogIiJ9JHt0eXBlb2YgYXJnc1tpXSA9PT0gIm9iamVjdCIgPyBzdHJpbmdpZnkoYXJnc1tpXSkgOiBhcmdzW2ldfWApLmpvaW4oIiwgIil9KWA7CiAgfQogIHZhciBpbml0X2Zvcm1hdEFiaUl0ZW1XaXRoQXJncyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9mb3JtYXRBYmlJdGVtV2l0aEFyZ3MuanMiKCkgewogICAgICBpbml0X3N0cmluZ2lmeSgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy91bml0LmpzCiAgdmFyIGV0aGVyVW5pdHMsIGd3ZWlVbml0cywgd2VpVW5pdHM7CiAgdmFyIGluaXRfdW5pdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy91bml0LmpzIigpIHsKICAgICAgZXRoZXJVbml0cyA9IHsKICAgICAgICBnd2VpOiA5LAogICAgICAgIHdlaTogMTgKICAgICAgfTsKICAgICAgZ3dlaVVuaXRzID0gewogICAgICAgIGV0aGVyOiAtOSwKICAgICAgICB3ZWk6IDkKICAgICAgfTsKICAgICAgd2VpVW5pdHMgPSB7CiAgICAgICAgZXRoZXI6IC0xOCwKICAgICAgICBnd2VpOiAtOQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3VuaXQvZm9ybWF0VW5pdHMuanMKICBmdW5jdGlvbiBmb3JtYXRVbml0cyh2YWx1ZSwgZGVjaW1hbHMpIHsKICAgIGxldCBkaXNwbGF5ID0gdmFsdWUudG9TdHJpbmcoKTsKICAgIGNvbnN0IG5lZ2F0aXZlID0gZGlzcGxheS5zdGFydHNXaXRoKCItIik7CiAgICBpZiAobmVnYXRpdmUpCiAgICAgIGRpc3BsYXkgPSBkaXNwbGF5LnNsaWNlKDEpOwogICAgZGlzcGxheSA9IGRpc3BsYXkucGFkU3RhcnQoZGVjaW1hbHMsICIwIik7CiAgICBsZXQgW2ludGVnZXIsIGZyYWN0aW9uXSA9IFsKICAgICAgZGlzcGxheS5zbGljZSgwLCBkaXNwbGF5Lmxlbmd0aCAtIGRlY2ltYWxzKSwKICAgICAgZGlzcGxheS5zbGljZShkaXNwbGF5Lmxlbmd0aCAtIGRlY2ltYWxzKQogICAgXTsKICAgIGZyYWN0aW9uID0gZnJhY3Rpb24ucmVwbGFjZSgvKDArKSQvLCAiIik7CiAgICByZXR1cm4gYCR7bmVnYXRpdmUgPyAiLSIgOiAiIn0ke2ludGVnZXIgfHwgIjAifSR7ZnJhY3Rpb24gPyBgLiR7ZnJhY3Rpb259YCA6ICIifWA7CiAgfQogIHZhciBpbml0X2Zvcm1hdFVuaXRzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9mb3JtYXRVbml0cy5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9mb3JtYXRFdGhlci5qcwogIGZ1bmN0aW9uIGZvcm1hdEV0aGVyKHdlaSwgdW5pdCA9ICJ3ZWkiKSB7CiAgICByZXR1cm4gZm9ybWF0VW5pdHMod2VpLCBldGhlclVuaXRzW3VuaXRdKTsKICB9CiAgdmFyIGluaXRfZm9ybWF0RXRoZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L2Zvcm1hdEV0aGVyLmpzIigpIHsKICAgICAgaW5pdF91bml0KCk7CiAgICAgIGluaXRfZm9ybWF0VW5pdHMoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L2Zvcm1hdEd3ZWkuanMKICBmdW5jdGlvbiBmb3JtYXRHd2VpKHdlaSwgdW5pdCA9ICJ3ZWkiKSB7CiAgICByZXR1cm4gZm9ybWF0VW5pdHMod2VpLCBnd2VpVW5pdHNbdW5pdF0pOwogIH0KICB2YXIgaW5pdF9mb3JtYXRHd2VpID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9mb3JtYXRHd2VpLmpzIigpIHsKICAgICAgaW5pdF91bml0KCk7CiAgICAgIGluaXRfZm9ybWF0VW5pdHMoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvc3RhdGVPdmVycmlkZS5qcwogIGZ1bmN0aW9uIHByZXR0eVN0YXRlTWFwcGluZyhzdGF0ZU1hcHBpbmcpIHsKICAgIHJldHVybiBzdGF0ZU1hcHBpbmcucmVkdWNlKChwcmV0dHksIHsgc2xvdCwgdmFsdWUgfSkgPT4gewogICAgICByZXR1cm4gYCR7cHJldHR5fSAgICAgICAgJHtzbG90fTogJHt2YWx1ZX0KYDsKICAgIH0sICIiKTsKICB9CiAgZnVuY3Rpb24gcHJldHR5U3RhdGVPdmVycmlkZShzdGF0ZU92ZXJyaWRlKSB7CiAgICByZXR1cm4gc3RhdGVPdmVycmlkZS5yZWR1Y2UoKHByZXR0eSwgeyBhZGRyZXNzLCAuLi5zdGF0ZSB9KSA9PiB7CiAgICAgIGxldCB2YWwgPSBgJHtwcmV0dHl9ICAgICR7YWRkcmVzc306CmA7CiAgICAgIGlmIChzdGF0ZS5ub25jZSkKICAgICAgICB2YWwgKz0gYCAgICAgIG5vbmNlOiAke3N0YXRlLm5vbmNlfQpgOwogICAgICBpZiAoc3RhdGUuYmFsYW5jZSkKICAgICAgICB2YWwgKz0gYCAgICAgIGJhbGFuY2U6ICR7c3RhdGUuYmFsYW5jZX0KYDsKICAgICAgaWYgKHN0YXRlLmNvZGUpCiAgICAgICAgdmFsICs9IGAgICAgICBjb2RlOiAke3N0YXRlLmNvZGV9CmA7CiAgICAgIGlmIChzdGF0ZS5zdGF0ZSkgewogICAgICAgIHZhbCArPSAiICAgICAgc3RhdGU6XG4iOwogICAgICAgIHZhbCArPSBwcmV0dHlTdGF0ZU1hcHBpbmcoc3RhdGUuc3RhdGUpOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS5zdGF0ZURpZmYpIHsKICAgICAgICB2YWwgKz0gIiAgICAgIHN0YXRlRGlmZjpcbiI7CiAgICAgICAgdmFsICs9IHByZXR0eVN0YXRlTWFwcGluZyhzdGF0ZS5zdGF0ZURpZmYpOwogICAgICB9CiAgICAgIHJldHVybiB2YWw7CiAgICB9LCAiICBTdGF0ZSBPdmVycmlkZTpcbiIpLnNsaWNlKDAsIC0xKTsKICB9CiAgdmFyIEFjY291bnRTdGF0ZUNvbmZsaWN0RXJyb3IsIFN0YXRlQXNzaWdubWVudENvbmZsaWN0RXJyb3I7CiAgdmFyIGluaXRfc3RhdGVPdmVycmlkZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9zdGF0ZU92ZXJyaWRlLmpzIigpIHsKICAgICAgaW5pdF9iYXNlKCk7CiAgICAgIEFjY291bnRTdGF0ZUNvbmZsaWN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYWRkcmVzcyB9KSB7CiAgICAgICAgICBzdXBlcihgU3RhdGUgZm9yIGFjY291bnQgIiR7YWRkcmVzc30iIGlzIHNldCBtdWx0aXBsZSB0aW1lcy5gLCB7CiAgICAgICAgICAgIG5hbWU6ICJBY2NvdW50U3RhdGVDb25mbGljdEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCJzdGF0ZSBhbmQgc3RhdGVEaWZmIGFyZSBzZXQgb24gdGhlIHNhbWUgYWNjb3VudC4iLCB7CiAgICAgICAgICAgIG5hbWU6ICJTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy90cmFuc2FjdGlvbi5qcwogIGZ1bmN0aW9uIHByZXR0eVByaW50KGFyZ3MpIHsKICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhhcmdzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gewogICAgICBpZiAodmFsdWUgPT09IHZvaWQgMCB8fCB2YWx1ZSA9PT0gZmFsc2UpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBba2V5LCB2YWx1ZV07CiAgICB9KS5maWx0ZXIoQm9vbGVhbik7CiAgICBjb25zdCBtYXhMZW5ndGggPSBlbnRyaWVzLnJlZHVjZSgoYWNjLCBba2V5XSkgPT4gTWF0aC5tYXgoYWNjLCBrZXkubGVuZ3RoKSwgMCk7CiAgICByZXR1cm4gZW50cmllcy5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCAgJHtgJHtrZXl9OmAucGFkRW5kKG1heExlbmd0aCArIDEpfSAgJHt2YWx1ZX1gKS5qb2luKCJcbiIpOwogIH0KICB2YXIgRmVlQ29uZmxpY3RFcnJvciwgSW52YWxpZExlZ2FjeVZFcnJvciwgSW52YWxpZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uRXJyb3IsIEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlRXJyb3IsIEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25FcnJvciwgSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IsIFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IsIFRyYW5zYWN0aW9uTm90Rm91bmRFcnJvciwgVHJhbnNhY3Rpb25SZWNlaXB0Tm90Rm91bmRFcnJvciwgV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvcjsKICB2YXIgaW5pdF90cmFuc2FjdGlvbiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy90cmFuc2FjdGlvbi5qcyIoKSB7CiAgICAgIGluaXRfZm9ybWF0RXRoZXIoKTsKICAgICAgaW5pdF9mb3JtYXRHd2VpKCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBGZWVDb25mbGljdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgIkNhbm5vdCBzcGVjaWZ5IGJvdGggYSBgZ2FzUHJpY2VgIGFuZCBhIGBtYXhGZWVQZXJHYXNgL2BtYXhQcmlvcml0eUZlZVBlckdhc2AuIiwKICAgICAgICAgICAgIlVzZSBgbWF4RmVlUGVyR2FzYC9gbWF4UHJpb3JpdHlGZWVQZXJHYXNgIGZvciBFSVAtMTU1OSBjb21wYXRpYmxlIG5ldHdvcmtzLCBhbmQgYGdhc1ByaWNlYCBmb3Igb3RoZXJzLiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgeyBuYW1lOiAiRmVlQ29uZmxpY3RFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkTGVnYWN5VkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHYgfSkgewogICAgICAgICAgc3VwZXIoYEludmFsaWQgXGB2XGAgdmFsdWUgIiR7dn0iLiBFeHBlY3RlZCAyNyBvciAyOC5gLCB7CiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkTGVnYWN5VkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkU2VyaWFsaXphYmxlVHJhbnNhY3Rpb25FcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyB0cmFuc2FjdGlvbiB9KSB7CiAgICAgICAgICBzdXBlcigiQ2Fubm90IGluZmVyIGEgdHJhbnNhY3Rpb24gdHlwZSBmcm9tIHByb3ZpZGVkIHRyYW5zYWN0aW9uLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgIlByb3ZpZGVkIFRyYW5zYWN0aW9uOiIsCiAgICAgICAgICAgICAgInsiLAogICAgICAgICAgICAgIHByZXR0eVByaW50KHRyYW5zYWN0aW9uKSwKICAgICAgICAgICAgICAifSIsCiAgICAgICAgICAgICAgIiIsCiAgICAgICAgICAgICAgIlRvIGluZmVyIHRoZSB0eXBlLCBlaXRoZXIgcHJvdmlkZToiLAogICAgICAgICAgICAgICItIGEgYHR5cGVgIHRvIHRoZSBUcmFuc2FjdGlvbiwgb3IiLAogICAgICAgICAgICAgICItIGFuIEVJUC0xNTU5IFRyYW5zYWN0aW9uIHdpdGggYG1heEZlZVBlckdhc2AsIG9yIiwKICAgICAgICAgICAgICAiLSBhbiBFSVAtMjkzMCBUcmFuc2FjdGlvbiB3aXRoIGBnYXNQcmljZWAgJiBgYWNjZXNzTGlzdGAsIG9yIiwKICAgICAgICAgICAgICAiLSBhbiBFSVAtNDg0NCBUcmFuc2FjdGlvbiB3aXRoIGBibG9ic2AsIGBibG9iVmVyc2lvbmVkSGFzaGVzYCwgYHNpZGVjYXJzYCwgb3IiLAogICAgICAgICAgICAgICItIGFuIEVJUC03NzAyIFRyYW5zYWN0aW9uIHdpdGggYGF1dGhvcml6YXRpb25MaXN0YCwgb3IiLAogICAgICAgICAgICAgICItIGEgTGVnYWN5IFRyYW5zYWN0aW9uIHdpdGggYGdhc1ByaWNlYCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbmFtZTogIkludmFsaWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uVHlwZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHNlcmlhbGl6ZWRUeXBlIH0pIHsKICAgICAgICAgIHN1cGVyKGBTZXJpYWxpemVkIHRyYW5zYWN0aW9uIHR5cGUgIiR7c2VyaWFsaXplZFR5cGV9IiBpcyBpbnZhbGlkLmAsIHsKICAgICAgICAgICAgbmFtZTogIkludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNlcmlhbGl6ZWRUeXBlIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuc2VyaWFsaXplZFR5cGUgPSBzZXJpYWxpemVkVHlwZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25FcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBhdHRyaWJ1dGVzLCBzZXJpYWxpemVkVHJhbnNhY3Rpb24sIHR5cGUgfSkgewogICAgICAgICAgY29uc3QgbWlzc2luZyA9IE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB0eXBlb2YgdmFsdWUgPT09ICJ1bmRlZmluZWQiID8ga2V5IDogdm9pZCAwKS5maWx0ZXIoQm9vbGVhbik7CiAgICAgICAgICBzdXBlcihgSW52YWxpZCBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIG9mIHR5cGUgIiR7dHlwZX0iIHdhcyBwcm92aWRlZC5gLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBTZXJpYWxpemVkIFRyYW5zYWN0aW9uOiAiJHtzZXJpYWxpemVkVHJhbnNhY3Rpb259ImAsCiAgICAgICAgICAgICAgbWlzc2luZy5sZW5ndGggPiAwID8gYE1pc3NpbmcgQXR0cmlidXRlczogJHttaXNzaW5nLmpvaW4oIiwgIil9YCA6ICIiCiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNlcmlhbGl6ZWRUcmFuc2FjdGlvbiIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInR5cGUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5zZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBzZXJpYWxpemVkVHJhbnNhY3Rpb247CiAgICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgc3RvcmFnZUtleSB9KSB7CiAgICAgICAgICBzdXBlcihgU2l6ZSBmb3Igc3RvcmFnZSBrZXkgIiR7c3RvcmFnZUtleX0iIGlzIGludmFsaWQuIEV4cGVjdGVkIDMyIGJ5dGVzLiBHb3QgJHtNYXRoLmZsb29yKChzdG9yYWdlS2V5Lmxlbmd0aCAtIDIpIC8gMil9IGJ5dGVzLmAsIHsgbmFtZTogIkludmFsaWRTdG9yYWdlS2V5U2l6ZUVycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlLCB7IGFjY291bnQsIGRvY3NQYXRoOiBkb2NzUGF0aDksIGNoYWluLCBkYXRhLCBnYXMsIGdhc1ByaWNlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBub25jZSwgdG8sIHZhbHVlIH0pIHsKICAgICAgICAgIGNvbnN0IHByZXR0eUFyZ3MgPSBwcmV0dHlQcmludCh7CiAgICAgICAgICAgIGNoYWluOiBjaGFpbiAmJiBgJHtjaGFpbj8ubmFtZX0gKGlkOiAke2NoYWluPy5pZH0pYCwKICAgICAgICAgICAgZnJvbTogYWNjb3VudD8uYWRkcmVzcywKICAgICAgICAgICAgdG8sCiAgICAgICAgICAgIHZhbHVlOiB0eXBlb2YgdmFsdWUgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEV0aGVyKHZhbHVlKX0gJHtjaGFpbj8ubmF0aXZlQ3VycmVuY3k/LnN5bWJvbCB8fCAiRVRIIn1gLAogICAgICAgICAgICBkYXRhLAogICAgICAgICAgICBnYXMsCiAgICAgICAgICAgIGdhc1ByaWNlOiB0eXBlb2YgZ2FzUHJpY2UgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkoZ2FzUHJpY2UpfSBnd2VpYCwKICAgICAgICAgICAgbWF4RmVlUGVyR2FzOiB0eXBlb2YgbWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9IGd3ZWlgLAogICAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogdHlwZW9mIG1heFByaW9yaXR5RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKG1heFByaW9yaXR5RmVlUGVyR2FzKX0gZ3dlaWAsCiAgICAgICAgICAgIG5vbmNlCiAgICAgICAgICB9KTsKICAgICAgICAgIHN1cGVyKGNhdXNlLnNob3J0TWVzc2FnZSwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgLi4uY2F1c2UubWV0YU1lc3NhZ2VzID8gWy4uLmNhdXNlLm1ldGFNZXNzYWdlcywgIiAiXSA6IFtdLAogICAgICAgICAgICAgICJSZXF1ZXN0IEFyZ3VtZW50czoiLAogICAgICAgICAgICAgIHByZXR0eUFyZ3MKICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgICAgIG5hbWU6ICJUcmFuc2FjdGlvbkV4ZWN1dGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNhdXNlIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuY2F1c2UgPSBjYXVzZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFRyYW5zYWN0aW9uTm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyLCBibG9ja1RhZywgaGFzaDogaGFzaDMsIGluZGV4OiBpbmRleDIgfSkgewogICAgICAgICAgbGV0IGlkZW50aWZpZXIgPSAiVHJhbnNhY3Rpb24iOwogICAgICAgICAgaWYgKGJsb2NrVGFnICYmIGluZGV4MiAhPT0gdm9pZCAwKQogICAgICAgICAgICBpZGVudGlmaWVyID0gYFRyYW5zYWN0aW9uIGF0IGJsb2NrIHRpbWUgIiR7YmxvY2tUYWd9IiBhdCBpbmRleCAiJHtpbmRleDJ9ImA7CiAgICAgICAgICBpZiAoYmxvY2tIYXNoICYmIGluZGV4MiAhPT0gdm9pZCAwKQogICAgICAgICAgICBpZGVudGlmaWVyID0gYFRyYW5zYWN0aW9uIGF0IGJsb2NrIGhhc2ggIiR7YmxvY2tIYXNofSIgYXQgaW5kZXggIiR7aW5kZXgyfSJgOwogICAgICAgICAgaWYgKGJsb2NrTnVtYmVyICYmIGluZGV4MiAhPT0gdm9pZCAwKQogICAgICAgICAgICBpZGVudGlmaWVyID0gYFRyYW5zYWN0aW9uIGF0IGJsb2NrIG51bWJlciAiJHtibG9ja051bWJlcn0iIGF0IGluZGV4ICIke2luZGV4Mn0iYDsKICAgICAgICAgIGlmIChoYXNoMykKICAgICAgICAgICAgaWRlbnRpZmllciA9IGBUcmFuc2FjdGlvbiB3aXRoIGhhc2ggIiR7aGFzaDN9ImA7CiAgICAgICAgICBzdXBlcihgJHtpZGVudGlmaWVyfSBjb3VsZCBub3QgYmUgZm91bmQuYCwgewogICAgICAgICAgICBuYW1lOiAiVHJhbnNhY3Rpb25Ob3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBUcmFuc2FjdGlvblJlY2VpcHROb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGhhc2g6IGhhc2gzIH0pIHsKICAgICAgICAgIHN1cGVyKGBUcmFuc2FjdGlvbiByZWNlaXB0IHdpdGggaGFzaCAiJHtoYXNoM30iIGNvdWxkIG5vdCBiZSBmb3VuZC4gVGhlIFRyYW5zYWN0aW9uIG1heSBub3QgYmUgcHJvY2Vzc2VkIG9uIGEgYmxvY2sgeWV0LmAsIHsKICAgICAgICAgICAgbmFtZTogIlRyYW5zYWN0aW9uUmVjZWlwdE5vdEZvdW5kRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFdhaXRGb3JUcmFuc2FjdGlvblJlY2VpcHRUaW1lb3V0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgaGFzaDogaGFzaDMgfSkgewogICAgICAgICAgc3VwZXIoYFRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciB0cmFuc2FjdGlvbiB3aXRoIGhhc2ggIiR7aGFzaDN9IiB0byBiZSBjb25maXJtZWQuYCwgeyBuYW1lOiAiV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy91dGlscy5qcwogIHZhciBnZXRDb250cmFjdEFkZHJlc3MsIGdldFVybDsKICB2YXIgaW5pdF91dGlsczMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvdXRpbHMuanMiKCkgewogICAgICBnZXRDb250cmFjdEFkZHJlc3MgPSAoYWRkcmVzcykgPT4gYWRkcmVzczsKICAgICAgZ2V0VXJsID0gKHVybCkgPT4gdXJsOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9jb250cmFjdC5qcwogIHZhciBDYWxsRXhlY3V0aW9uRXJyb3IsIENvbnRyYWN0RnVuY3Rpb25FeGVjdXRpb25FcnJvciwgQ29udHJhY3RGdW5jdGlvblJldmVydGVkRXJyb3IsIENvbnRyYWN0RnVuY3Rpb25aZXJvRGF0YUVycm9yLCBDb3VudGVyZmFjdHVhbERlcGxveW1lbnRGYWlsZWRFcnJvciwgUmF3Q29udHJhY3RFcnJvcjsKICB2YXIgaW5pdF9jb250cmFjdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9jb250cmFjdC5qcyIoKSB7CiAgICAgIGluaXRfcGFyc2VBY2NvdW50KCk7CiAgICAgIGluaXRfc29saWRpdHkoKTsKICAgICAgaW5pdF9kZWNvZGVFcnJvclJlc3VsdCgpOwogICAgICBpbml0X2Zvcm1hdEFiaUl0ZW0yKCk7CiAgICAgIGluaXRfZm9ybWF0QWJpSXRlbVdpdGhBcmdzKCk7CiAgICAgIGluaXRfZ2V0QWJpSXRlbSgpOwogICAgICBpbml0X2Zvcm1hdEV0aGVyKCk7CiAgICAgIGluaXRfZm9ybWF0R3dlaSgpOwogICAgICBpbml0X2FiaSgpOwogICAgICBpbml0X2Jhc2UoKTsKICAgICAgaW5pdF9zdGF0ZU92ZXJyaWRlKCk7CiAgICAgIGluaXRfdHJhbnNhY3Rpb24oKTsKICAgICAgaW5pdF91dGlsczMoKTsKICAgICAgQ2FsbEV4ZWN1dGlvbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBhY2NvdW50OiBhY2NvdW50XywgZG9jc1BhdGg6IGRvY3NQYXRoOSwgY2hhaW4sIGRhdGEsIGdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIG5vbmNlLCB0bywgdmFsdWUsIHN0YXRlT3ZlcnJpZGUgfSkgewogICAgICAgICAgY29uc3QgYWNjb3VudCA9IGFjY291bnRfID8gcGFyc2VBY2NvdW50KGFjY291bnRfKSA6IHZvaWQgMDsKICAgICAgICAgIGxldCBwcmV0dHlBcmdzID0gcHJldHR5UHJpbnQoewogICAgICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgICAgICB0bywKICAgICAgICAgICAgdmFsdWU6IHR5cGVvZiB2YWx1ZSAhPT0gInVuZGVmaW5lZCIgJiYgYCR7Zm9ybWF0RXRoZXIodmFsdWUpfSAke2NoYWluPy5uYXRpdmVDdXJyZW5jeT8uc3ltYm9sIHx8ICJFVEgifWAsCiAgICAgICAgICAgIGRhdGEsCiAgICAgICAgICAgIGdhcywKICAgICAgICAgICAgZ2FzUHJpY2U6IHR5cGVvZiBnYXNQcmljZSAhPT0gInVuZGVmaW5lZCIgJiYgYCR7Zm9ybWF0R3dlaShnYXNQcmljZSl9IGd3ZWlgLAogICAgICAgICAgICBtYXhGZWVQZXJHYXM6IHR5cGVvZiBtYXhGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkobWF4RmVlUGVyR2FzKX0gZ3dlaWAsCiAgICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiB0eXBlb2YgbWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkobWF4UHJpb3JpdHlGZWVQZXJHYXMpfSBnd2VpYCwKICAgICAgICAgICAgbm9uY2UKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHsKICAgICAgICAgICAgcHJldHR5QXJncyArPSBgCiR7cHJldHR5U3RhdGVPdmVycmlkZShzdGF0ZU92ZXJyaWRlKX1gOwogICAgICAgICAgfQogICAgICAgICAgc3VwZXIoY2F1c2Uuc2hvcnRNZXNzYWdlLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAuLi5jYXVzZS5tZXRhTWVzc2FnZXMgPyBbLi4uY2F1c2UubWV0YU1lc3NhZ2VzLCAiICJdIDogW10sCiAgICAgICAgICAgICAgIlJhdyBDYWxsIEFyZ3VtZW50czoiLAogICAgICAgICAgICAgIHByZXR0eUFyZ3MKICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgICAgIG5hbWU6ICJDYWxsRXhlY3V0aW9uRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY2F1c2UiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5jYXVzZSA9IGNhdXNlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29udHJhY3RGdW5jdGlvbkV4ZWN1dGlvbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBhYmk6IGFiaTIsIGFyZ3MsIGNvbnRyYWN0QWRkcmVzcywgZG9jc1BhdGg6IGRvY3NQYXRoOSwgZnVuY3Rpb25OYW1lLCBzZW5kZXIgfSkgewogICAgICAgICAgY29uc3QgYWJpSXRlbSA9IGdldEFiaUl0ZW0oeyBhYmk6IGFiaTIsIGFyZ3MsIG5hbWU6IGZ1bmN0aW9uTmFtZSB9KTsKICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEFyZ3MgPSBhYmlJdGVtID8gZm9ybWF0QWJpSXRlbVdpdGhBcmdzKHsKICAgICAgICAgICAgYWJpSXRlbSwKICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgaW5jbHVkZUZ1bmN0aW9uTmFtZTogZmFsc2UsCiAgICAgICAgICAgIGluY2x1ZGVOYW1lOiBmYWxzZQogICAgICAgICAgfSkgOiB2b2lkIDA7CiAgICAgICAgICBjb25zdCBmdW5jdGlvbldpdGhQYXJhbXMgPSBhYmlJdGVtID8gZm9ybWF0QWJpSXRlbTIoYWJpSXRlbSwgeyBpbmNsdWRlTmFtZTogdHJ1ZSB9KSA6IHZvaWQgMDsKICAgICAgICAgIGNvbnN0IHByZXR0eUFyZ3MgPSBwcmV0dHlQcmludCh7CiAgICAgICAgICAgIGFkZHJlc3M6IGNvbnRyYWN0QWRkcmVzcyAmJiBnZXRDb250cmFjdEFkZHJlc3MoY29udHJhY3RBZGRyZXNzKSwKICAgICAgICAgICAgZnVuY3Rpb246IGZ1bmN0aW9uV2l0aFBhcmFtcywKICAgICAgICAgICAgYXJnczogZm9ybWF0dGVkQXJncyAmJiBmb3JtYXR0ZWRBcmdzICE9PSAiKCkiICYmIGAke1suLi5BcnJheShmdW5jdGlvbk5hbWU/Lmxlbmd0aCA/PyAwKS5rZXlzKCldLm1hcCgoKSA9PiAiICIpLmpvaW4oIiIpfSR7Zm9ybWF0dGVkQXJnc31gLAogICAgICAgICAgICBzZW5kZXIKICAgICAgICAgIH0pOwogICAgICAgICAgc3VwZXIoY2F1c2Uuc2hvcnRNZXNzYWdlIHx8IGBBbiB1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyB0aGUgY29udHJhY3QgZnVuY3Rpb24gIiR7ZnVuY3Rpb25OYW1lfSIuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgLi4uY2F1c2UubWV0YU1lc3NhZ2VzID8gWy4uLmNhdXNlLm1ldGFNZXNzYWdlcywgIiAiXSA6IFtdLAogICAgICAgICAgICAgIHByZXR0eUFyZ3MgJiYgIkNvbnRyYWN0IENhbGw6IiwKICAgICAgICAgICAgICBwcmV0dHlBcmdzCiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiQ29udHJhY3RGdW5jdGlvbkV4ZWN1dGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFiaSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFyZ3MiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJjYXVzZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNvbnRyYWN0QWRkcmVzcyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImZvcm1hdHRlZEFyZ3MiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJmdW5jdGlvbk5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kZXIiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5hYmkgPSBhYmkyOwogICAgICAgICAgdGhpcy5hcmdzID0gYXJnczsKICAgICAgICAgIHRoaXMuY2F1c2UgPSBjYXVzZTsKICAgICAgICAgIHRoaXMuY29udHJhY3RBZGRyZXNzID0gY29udHJhY3RBZGRyZXNzOwogICAgICAgICAgdGhpcy5mdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7CiAgICAgICAgICB0aGlzLnNlbmRlciA9IHNlbmRlcjsKICAgICAgICB9CiAgICAgIH07CiAgICAgIENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGFiaTogYWJpMiwgZGF0YSwgZnVuY3Rpb25OYW1lLCBtZXNzYWdlIH0pIHsKICAgICAgICAgIGxldCBjYXVzZTsKICAgICAgICAgIGxldCBkZWNvZGVkRGF0YSA9IHZvaWQgMDsKICAgICAgICAgIGxldCBtZXRhTWVzc2FnZXM7CiAgICAgICAgICBsZXQgcmVhc29uOwogICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YSAhPT0gIjB4IikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGRlY29kZWREYXRhID0gZGVjb2RlRXJyb3JSZXN1bHQoeyBhYmk6IGFiaTIsIGRhdGEgfSk7CiAgICAgICAgICAgICAgY29uc3QgeyBhYmlJdGVtLCBlcnJvck5hbWUsIGFyZ3M6IGVycm9yQXJncyB9ID0gZGVjb2RlZERhdGE7CiAgICAgICAgICAgICAgaWYgKGVycm9yTmFtZSA9PT0gIkVycm9yIikgewogICAgICAgICAgICAgICAgcmVhc29uID0gZXJyb3JBcmdzWzBdOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3JOYW1lID09PSAiUGFuaWMiKSB7CiAgICAgICAgICAgICAgICBjb25zdCBbZmlyc3RBcmddID0gZXJyb3JBcmdzOwogICAgICAgICAgICAgICAgcmVhc29uID0gcGFuaWNSZWFzb25zW2ZpcnN0QXJnXTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29uc3QgZXJyb3JXaXRoUGFyYW1zID0gYWJpSXRlbSA/IGZvcm1hdEFiaUl0ZW0yKGFiaUl0ZW0sIHsgaW5jbHVkZU5hbWU6IHRydWUgfSkgOiB2b2lkIDA7CiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRBcmdzID0gYWJpSXRlbSAmJiBlcnJvckFyZ3MgPyBmb3JtYXRBYmlJdGVtV2l0aEFyZ3MoewogICAgICAgICAgICAgICAgICBhYmlJdGVtLAogICAgICAgICAgICAgICAgICBhcmdzOiBlcnJvckFyZ3MsCiAgICAgICAgICAgICAgICAgIGluY2x1ZGVGdW5jdGlvbk5hbWU6IGZhbHNlLAogICAgICAgICAgICAgICAgICBpbmNsdWRlTmFtZTogZmFsc2UKICAgICAgICAgICAgICAgIH0pIDogdm9pZCAwOwogICAgICAgICAgICAgICAgbWV0YU1lc3NhZ2VzID0gWwogICAgICAgICAgICAgICAgICBlcnJvcldpdGhQYXJhbXMgPyBgRXJyb3I6ICR7ZXJyb3JXaXRoUGFyYW1zfWAgOiAiIiwKICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkQXJncyAmJiBmb3JtYXR0ZWRBcmdzICE9PSAiKCkiID8gYCAgICAgICAke1suLi5BcnJheShlcnJvck5hbWU/Lmxlbmd0aCA/PyAwKS5rZXlzKCldLm1hcCgoKSA9PiAiICIpLmpvaW4oIiIpfSR7Zm9ybWF0dGVkQXJnc31gIDogIiIKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICBjYXVzZSA9IGVycjsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlKQogICAgICAgICAgICByZWFzb24gPSBtZXNzYWdlOwogICAgICAgICAgbGV0IHNpZ25hdHVyZTsKICAgICAgICAgIGlmIChjYXVzZSBpbnN0YW5jZW9mIEFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvcikgewogICAgICAgICAgICBzaWduYXR1cmUgPSBjYXVzZS5zaWduYXR1cmU7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlcyA9IFsKICAgICAgICAgICAgICBgVW5hYmxlIHRvIGRlY29kZSBzaWduYXR1cmUgIiR7c2lnbmF0dXJlfSIgYXMgaXQgd2FzIG5vdCBmb3VuZCBvbiB0aGUgcHJvdmlkZWQgQUJJLmAsCiAgICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXJyb3IgZXhpc3RzIG9uIGl0LiIsCiAgICAgICAgICAgICAgYFlvdSBjYW4gbG9vayB1cCB0aGUgZGVjb2RlZCBzaWduYXR1cmUgaGVyZTogaHR0cHM6Ly9vcGVuY2hhaW4ueHl6L3NpZ25hdHVyZXM/cXVlcnk9JHtzaWduYXR1cmV9LmAKICAgICAgICAgICAgXTsKICAgICAgICAgIH0KICAgICAgICAgIHN1cGVyKHJlYXNvbiAmJiByZWFzb24gIT09ICJleGVjdXRpb24gcmV2ZXJ0ZWQiIHx8IHNpZ25hdHVyZSA/IFsKICAgICAgICAgICAgYFRoZSBjb250cmFjdCBmdW5jdGlvbiAiJHtmdW5jdGlvbk5hbWV9IiByZXZlcnRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgJHtzaWduYXR1cmUgPyAic2lnbmF0dXJlIiA6ICJyZWFzb24ifTpgLAogICAgICAgICAgICByZWFzb24gfHwgc2lnbmF0dXJlCiAgICAgICAgICBdLmpvaW4oIlxuIikgOiBgVGhlIGNvbnRyYWN0IGZ1bmN0aW9uICIke2Z1bmN0aW9uTmFtZX0iIHJldmVydGVkLmAsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIG1ldGFNZXNzYWdlcywKICAgICAgICAgICAgbmFtZTogIkNvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRhdGEiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJyZWFzb24iLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaWduYXR1cmUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5kYXRhID0gZGVjb2RlZERhdGE7CiAgICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvbjsKICAgICAgICAgIHRoaXMuc2lnbmF0dXJlID0gc2lnbmF0dXJlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29udHJhY3RGdW5jdGlvblplcm9EYXRhRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZnVuY3Rpb25OYW1lIH0pIHsKICAgICAgICAgIHN1cGVyKGBUaGUgY29udHJhY3QgZnVuY3Rpb24gIiR7ZnVuY3Rpb25OYW1lfSIgcmV0dXJuZWQgbm8gZGF0YSAoIjB4IikuYCwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAiVGhpcyBjb3VsZCBiZSBkdWUgdG8gYW55IG9mIHRoZSBmb2xsb3dpbmc6IiwKICAgICAgICAgICAgICBgICAtIFRoZSBjb250cmFjdCBkb2VzIG5vdCBoYXZlIHRoZSBmdW5jdGlvbiAiJHtmdW5jdGlvbk5hbWV9IixgLAogICAgICAgICAgICAgICIgIC0gVGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBjb250cmFjdCBmdW5jdGlvbiBtYXkgYmUgaW52YWxpZCwgb3IiLAogICAgICAgICAgICAgICIgIC0gVGhlIGFkZHJlc3MgaXMgbm90IGEgY29udHJhY3QuIgogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQ29udHJhY3RGdW5jdGlvblplcm9EYXRhRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIENvdW50ZXJmYWN0dWFsRGVwbG95bWVudEZhaWxlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGZhY3RvcnkgfSkgewogICAgICAgICAgc3VwZXIoYERlcGxveW1lbnQgZm9yIGNvdW50ZXJmYWN0dWFsIGNvbnRyYWN0IGNhbGwgZmFpbGVkJHtmYWN0b3J5ID8gYCBmb3IgZmFjdG9yeSAiJHtmYWN0b3J5fSIuYCA6ICIifWAsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgIlBsZWFzZSBlbnN1cmU6IiwKICAgICAgICAgICAgICAiLSBUaGUgYGZhY3RvcnlgIGlzIGEgdmFsaWQgY29udHJhY3QgZGVwbG95bWVudCBmYWN0b3J5IChpZS4gQ3JlYXRlMiBGYWN0b3J5LCBFUkMtNDMzNyBGYWN0b3J5LCBldGMpLiIsCiAgICAgICAgICAgICAgIi0gVGhlIGBmYWN0b3J5RGF0YWAgaXMgYSB2YWxpZCBlbmNvZGVkIGZ1bmN0aW9uIGNhbGwgZm9yIGNvbnRyYWN0IGRlcGxveW1lbnQgZnVuY3Rpb24gb24gdGhlIGZhY3RvcnkuIgogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQ291bnRlcmZhY3R1YWxEZXBsb3ltZW50RmFpbGVkRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFJhd0NvbnRyYWN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZGF0YSwgbWVzc2FnZSB9KSB7CiAgICAgICAgICBzdXBlcihtZXNzYWdlIHx8ICIiLCB7IG5hbWU6ICJSYXdDb250cmFjdEVycm9yIiB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29kZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IDMKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkYXRhIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9yZXF1ZXN0LmpzCiAgdmFyIEh0dHBSZXF1ZXN0RXJyb3IsIFdlYlNvY2tldFJlcXVlc3RFcnJvciwgUnBjUmVxdWVzdEVycm9yLCBTb2NrZXRDbG9zZWRFcnJvciwgVGltZW91dEVycm9yOwogIHZhciBpbml0X3JlcXVlc3QgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvcmVxdWVzdC5qcyIoKSB7CiAgICAgIGluaXRfc3RyaW5naWZ5KCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X3V0aWxzMygpOwogICAgICBIdHRwUmVxdWVzdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGJvZHksIGNhdXNlLCBkZXRhaWxzLCBoZWFkZXJzLCBzdGF0dXMsIHVybCB9KSB7CiAgICAgICAgICBzdXBlcigiSFRUUCByZXF1ZXN0IGZhaWxlZC4iLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBkZXRhaWxzLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBzdGF0dXMgJiYgYFN0YXR1czogJHtzdGF0dXN9YCwKICAgICAgICAgICAgICBgVVJMOiAke2dldFVybCh1cmwpfWAsCiAgICAgICAgICAgICAgYm9keSAmJiBgUmVxdWVzdCBib2R5OiAke3N0cmluZ2lmeShib2R5KX1gCiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiSHR0cFJlcXVlc3RFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJib2R5IiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiaGVhZGVycyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInN0YXR1cyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInVybCIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwogICAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyczsKICAgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOwogICAgICAgICAgdGhpcy51cmwgPSB1cmw7CiAgICAgICAgfQogICAgICB9OwogICAgICBXZWJTb2NrZXRSZXF1ZXN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYm9keSwgY2F1c2UsIGRldGFpbHMsIHVybCB9KSB7CiAgICAgICAgICBzdXBlcigiV2ViU29ja2V0IHJlcXVlc3QgZmFpbGVkLiIsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIGRldGFpbHMsCiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBVUkw6ICR7Z2V0VXJsKHVybCl9YCwKICAgICAgICAgICAgICBib2R5ICYmIGBSZXF1ZXN0IGJvZHk6ICR7c3RyaW5naWZ5KGJvZHkpfWAKICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgICAgIG5hbWU6ICJXZWJTb2NrZXRSZXF1ZXN0RXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFJwY1JlcXVlc3RFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBib2R5LCBlcnJvciwgdXJsIH0pIHsKICAgICAgICAgIHN1cGVyKCJSUEMgUmVxdWVzdCBmYWlsZWQuIiwgewogICAgICAgICAgICBjYXVzZTogZXJyb3IsCiAgICAgICAgICAgIGRldGFpbHM6IGVycm9yLm1lc3NhZ2UsCiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogW2BVUkw6ICR7Z2V0VXJsKHVybCl9YCwgYFJlcXVlc3QgYm9keTogJHtzdHJpbmdpZnkoYm9keSl9YF0sCiAgICAgICAgICAgIG5hbWU6ICJScGNSZXF1ZXN0RXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29kZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmNvZGUgPSBlcnJvci5jb2RlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU29ja2V0Q2xvc2VkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgdXJsIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoIlRoZSBzb2NrZXQgaGFzIGJlZW4gY2xvc2VkLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbdXJsICYmIGBVUkw6ICR7Z2V0VXJsKHVybCl9YF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiU29ja2V0Q2xvc2VkRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFRpbWVvdXRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBib2R5LCB1cmwgfSkgewogICAgICAgICAgc3VwZXIoIlRoZSByZXF1ZXN0IHRvb2sgdG9vIGxvbmcgdG8gcmVzcG9uZC4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6ICJUaGUgcmVxdWVzdCB0aW1lZCBvdXQuIiwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYFVSTDogJHtnZXRVcmwodXJsKX1gLCBgUmVxdWVzdCBib2R5OiAke3N0cmluZ2lmeShib2R5KX1gXSwKICAgICAgICAgICAgbmFtZTogIlRpbWVvdXRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvcnBjLmpzCiAgdmFyIHVua25vd25FcnJvckNvZGUsIFJwY0Vycm9yLCBQcm92aWRlclJwY0Vycm9yLCBQYXJzZVJwY0Vycm9yLCBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yLCBNZXRob2ROb3RGb3VuZFJwY0Vycm9yLCBJbnZhbGlkUGFyYW1zUnBjRXJyb3IsIEludGVybmFsUnBjRXJyb3IsIEludmFsaWRJbnB1dFJwY0Vycm9yLCBSZXNvdXJjZU5vdEZvdW5kUnBjRXJyb3IsIFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciwgVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yLCBNZXRob2ROb3RTdXBwb3J0ZWRScGNFcnJvciwgTGltaXRFeGNlZWRlZFJwY0Vycm9yLCBKc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IsIFVzZXJSZWplY3RlZFJlcXVlc3RFcnJvciwgVW5hdXRob3JpemVkUHJvdmlkZXJFcnJvciwgVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLCBQcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yLCBDaGFpbkRpc2Nvbm5lY3RlZEVycm9yLCBTd2l0Y2hDaGFpbkVycm9yLCBVbmtub3duUnBjRXJyb3I7CiAgdmFyIGluaXRfcnBjID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL3JwYy5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X3JlcXVlc3QoKTsKICAgICAgdW5rbm93bkVycm9yQ29kZSA9IC0xOwogICAgICBScGNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UsIHsgY29kZSwgZG9jc1BhdGg6IGRvY3NQYXRoOSwgbWV0YU1lc3NhZ2VzLCBuYW1lLCBzaG9ydE1lc3NhZ2UgfSkgewogICAgICAgICAgc3VwZXIoc2hvcnRNZXNzYWdlLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IG1ldGFNZXNzYWdlcyB8fCBjYXVzZT8ubWV0YU1lc3NhZ2VzLAogICAgICAgICAgICBuYW1lOiBuYW1lIHx8ICJScGNFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJjb2RlIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWUgfHwgY2F1c2UubmFtZTsKICAgICAgICAgIHRoaXMuY29kZSA9IGNhdXNlIGluc3RhbmNlb2YgUnBjUmVxdWVzdEVycm9yID8gY2F1c2UuY29kZSA6IGNvZGUgPz8gdW5rbm93bkVycm9yQ29kZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFByb3ZpZGVyUnBjRXJyb3IgPSBjbGFzcyBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgb3B0aW9ucykgewogICAgICAgICAgc3VwZXIoY2F1c2UsIG9wdGlvbnMpOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkYXRhIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGF0YSA9IG9wdGlvbnMuZGF0YTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFBhcnNlUnBjRXJyb3IgPSBjbGFzcyBfUGFyc2VScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1BhcnNlUnBjRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlBhcnNlUnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJJbnZhbGlkIEpTT04gd2FzIHJlY2VpdmVkIGJ5IHRoZSBzZXJ2ZXIuIEFuIGVycm9yIG9jY3VycmVkIG9uIHRoZSBzZXJ2ZXIgd2hpbGUgcGFyc2luZyB0aGUgSlNPTiB0ZXh0LiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhcnNlUnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzI3MDAKICAgICAgfSk7CiAgICAgIEludmFsaWRSZXF1ZXN0UnBjRXJyb3IgPSBjbGFzcyBfSW52YWxpZFJlcXVlc3RScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX0ludmFsaWRSZXF1ZXN0UnBjRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIkludmFsaWRSZXF1ZXN0UnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJKU09OIGlzIG5vdCBhIHZhbGlkIHJlcXVlc3Qgb2JqZWN0LiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEludmFsaWRSZXF1ZXN0UnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzI2MDAKICAgICAgfSk7CiAgICAgIE1ldGhvZE5vdEZvdW5kUnBjRXJyb3IgPSBjbGFzcyBfTWV0aG9kTm90Rm91bmRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBtZXRob2QgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfTWV0aG9kTm90Rm91bmRScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiTWV0aG9kTm90Rm91bmRScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogYFRoZSBtZXRob2Qke21ldGhvZCA/IGAgIiR7bWV0aG9kfSJgIDogIiJ9IGRvZXMgbm90IGV4aXN0IC8gaXMgbm90IGF2YWlsYWJsZS5gCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXRob2ROb3RGb3VuZFJwY0Vycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogLTMyNjAxCiAgICAgIH0pOwogICAgICBJbnZhbGlkUGFyYW1zUnBjRXJyb3IgPSBjbGFzcyBfSW52YWxpZFBhcmFtc1JwY0Vycm9yIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfSW52YWxpZFBhcmFtc1JwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkUGFyYW1zUnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6IFsKICAgICAgICAgICAgICAiSW52YWxpZCBwYXJhbWV0ZXJzIHdlcmUgcHJvdmlkZWQgdG8gdGhlIFJQQyBtZXRob2QuIiwKICAgICAgICAgICAgICAiRG91YmxlIGNoZWNrIHlvdSBoYXZlIHByb3ZpZGVkIHRoZSBjb3JyZWN0IHBhcmFtZXRlcnMuIgogICAgICAgICAgICBdLmpvaW4oIlxuIikKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEludmFsaWRQYXJhbXNScGNFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC0zMjYwMgogICAgICB9KTsKICAgICAgSW50ZXJuYWxScGNFcnJvciA9IGNsYXNzIF9JbnRlcm5hbFJwY0Vycm9yIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfSW50ZXJuYWxScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiSW50ZXJuYWxScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIkFuIGludGVybmFsIGVycm9yIHdhcyByZWNlaXZlZC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRlcm5hbFJwY0Vycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogLTMyNjAzCiAgICAgIH0pOwogICAgICBJbnZhbGlkSW5wdXRScGNFcnJvciA9IGNsYXNzIF9JbnZhbGlkSW5wdXRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX0ludmFsaWRJbnB1dFJwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkSW5wdXRScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogWwogICAgICAgICAgICAgICJNaXNzaW5nIG9yIGludmFsaWQgcGFyYW1ldGVycy4iLAogICAgICAgICAgICAgICJEb3VibGUgY2hlY2sgeW91IGhhdmUgcHJvdmlkZWQgdGhlIGNvcnJlY3QgcGFyYW1ldGVycy4iCiAgICAgICAgICAgIF0uam9pbigiXG4iKQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW52YWxpZElucHV0UnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzJlMwogICAgICB9KTsKICAgICAgUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yID0gY2xhc3MgX1Jlc291cmNlTm90Rm91bmRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1Jlc291cmNlTm90Rm91bmRScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiUmVxdWVzdGVkIHJlc291cmNlIG5vdCBmb3VuZC4iCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJSZXNvdXJjZU5vdEZvdW5kUnBjRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZXNvdXJjZU5vdEZvdW5kUnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzIwMDEKICAgICAgfSk7CiAgICAgIFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciA9IGNsYXNzIF9SZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IgZXh0ZW5kcyBScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UpIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9SZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIlJlcXVlc3RlZCByZXNvdXJjZSBub3QgYXZhaWxhYmxlLiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC0zMjAwMgogICAgICB9KTsKICAgICAgVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yID0gY2xhc3MgX1RyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1RyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiVHJhbnNhY3Rpb24gY3JlYXRpb24gZmFpbGVkLiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC0zMjAwMwogICAgICB9KTsKICAgICAgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IgPSBjbGFzcyBfTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IgZXh0ZW5kcyBScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UsIHsgbWV0aG9kIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX01ldGhvZE5vdFN1cHBvcnRlZFJwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJNZXRob2ROb3RTdXBwb3J0ZWRScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogYE1ldGhvZCR7bWV0aG9kID8gYCAiJHttZXRob2R9ImAgOiAiIn0gaXMgbm90IGltcGxlbWVudGVkLmAKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1ldGhvZE5vdFN1cHBvcnRlZFJwY0Vycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogLTMyMDA0CiAgICAgIH0pOwogICAgICBMaW1pdEV4Y2VlZGVkUnBjRXJyb3IgPSBjbGFzcyBfTGltaXRFeGNlZWRlZFJwY0Vycm9yIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfTGltaXRFeGNlZWRlZFJwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJMaW1pdEV4Y2VlZGVkUnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJSZXF1ZXN0IGV4Y2VlZHMgZGVmaW5lZCBsaW1pdC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaW1pdEV4Y2VlZGVkUnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzIwMDUKICAgICAgfSk7CiAgICAgIEpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvciA9IGNsYXNzIF9Kc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UpIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9Kc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIkpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIlZlcnNpb24gb2YgSlNPTi1SUEMgcHJvdG9jb2wgaXMgbm90IHN1cHBvcnRlZC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzIwMDYKICAgICAgfSk7CiAgICAgIFVzZXJSZWplY3RlZFJlcXVlc3RFcnJvciA9IGNsYXNzIF9Vc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBQcm92aWRlclJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1VzZXJSZWplY3RlZFJlcXVlc3RFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiVXNlclJlamVjdGVkUmVxdWVzdEVycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiVXNlciByZWplY3RlZCB0aGUgcmVxdWVzdC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiA0MDAxCiAgICAgIH0pOwogICAgICBVbmF1dGhvcml6ZWRQcm92aWRlckVycm9yID0gY2xhc3MgX1VuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IgZXh0ZW5kcyBQcm92aWRlclJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1VuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlVuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJUaGUgcmVxdWVzdGVkIG1ldGhvZCBhbmQvb3IgYWNjb3VudCBoYXMgbm90IGJlZW4gYXV0aG9yaXplZCBieSB0aGUgdXNlci4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVbmF1dGhvcml6ZWRQcm92aWRlckVycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogNDEwMAogICAgICB9KTsKICAgICAgVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yID0gY2xhc3MgX1Vuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvciBleHRlbmRzIFByb3ZpZGVyUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlLCB7IG1ldGhvZCB9ID0ge30pIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9VbnN1cHBvcnRlZFByb3ZpZGVyTWV0aG9kRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlVuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogYFRoZSBQcm92aWRlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQgbWV0aG9kJHttZXRob2QgPyBgICIgJHttZXRob2R9ImAgOiAiIn0uYAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogNDIwMAogICAgICB9KTsKICAgICAgUHJvdmlkZXJEaXNjb25uZWN0ZWRFcnJvciA9IGNsYXNzIF9Qcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yIGV4dGVuZHMgUHJvdmlkZXJScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UpIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9Qcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJQcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiVGhlIFByb3ZpZGVyIGlzIGRpc2Nvbm5lY3RlZCBmcm9tIGFsbCBjaGFpbnMuIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUHJvdmlkZXJEaXNjb25uZWN0ZWRFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IDQ5MDAKICAgICAgfSk7CiAgICAgIENoYWluRGlzY29ubmVjdGVkRXJyb3IgPSBjbGFzcyBfQ2hhaW5EaXNjb25uZWN0ZWRFcnJvciBleHRlbmRzIFByb3ZpZGVyUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfQ2hhaW5EaXNjb25uZWN0ZWRFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiQ2hhaW5EaXNjb25uZWN0ZWRFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIlRoZSBQcm92aWRlciBpcyBub3QgY29ubmVjdGVkIHRvIHRoZSByZXF1ZXN0ZWQgY2hhaW4uIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2hhaW5EaXNjb25uZWN0ZWRFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IDQ5MDEKICAgICAgfSk7CiAgICAgIFN3aXRjaENoYWluRXJyb3IgPSBjbGFzcyBfU3dpdGNoQ2hhaW5FcnJvciBleHRlbmRzIFByb3ZpZGVyUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfU3dpdGNoQ2hhaW5FcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiU3dpdGNoQ2hhaW5FcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIkFuIGVycm9yIG9jY3VycmVkIHdoZW4gYXR0ZW1wdGluZyB0byBzd2l0Y2ggY2hhaW4uIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3dpdGNoQ2hhaW5FcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IDQ5MDIKICAgICAgfSk7CiAgICAgIFVua25vd25ScGNFcnJvciA9IGNsYXNzIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBuYW1lOiAiVW5rbm93blJwY0Vycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiQW4gdW5rbm93biBSUEMgZXJyb3Igb2NjdXJyZWQuIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vX21kLmpzCiAgZnVuY3Rpb24gc2V0QmlnVWludDY0KHZpZXcsIGJ5dGVPZmZzZXQsIHZhbHVlLCBpc0xFMikgewogICAgaWYgKHR5cGVvZiB2aWV3LnNldEJpZ1VpbnQ2NCA9PT0gImZ1bmN0aW9uIikKICAgICAgcmV0dXJuIHZpZXcuc2V0QmlnVWludDY0KGJ5dGVPZmZzZXQsIHZhbHVlLCBpc0xFMik7CiAgICBjb25zdCBfMzJuMiA9IEJpZ0ludCgzMik7CiAgICBjb25zdCBfdTMyX21heCA9IEJpZ0ludCg0Mjk0OTY3Mjk1KTsKICAgIGNvbnN0IHdoID0gTnVtYmVyKHZhbHVlID4+IF8zMm4yICYgX3UzMl9tYXgpOwogICAgY29uc3Qgd2wgPSBOdW1iZXIodmFsdWUgJiBfdTMyX21heCk7CiAgICBjb25zdCBoID0gaXNMRTIgPyA0IDogMDsKICAgIGNvbnN0IGwgPSBpc0xFMiA/IDAgOiA0OwogICAgdmlldy5zZXRVaW50MzIoYnl0ZU9mZnNldCArIGgsIHdoLCBpc0xFMik7CiAgICB2aWV3LnNldFVpbnQzMihieXRlT2Zmc2V0ICsgbCwgd2wsIGlzTEUyKTsKICB9CiAgdmFyIENoaSwgTWFqLCBIYXNoTUQ7CiAgdmFyIGluaXRfbWQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL19tZC5qcyIoKSB7CiAgICAgIGluaXRfYXNzZXJ0KCk7CiAgICAgIGluaXRfdXRpbHMyKCk7CiAgICAgIENoaSA9IChhLCBiLCBjKSA9PiBhICYgYiBeIH5hICYgYzsKICAgICAgTWFqID0gKGEsIGIsIGMpID0+IGEgJiBiIF4gYSAmIGMgXiBiICYgYzsKICAgICAgSGFzaE1EID0gY2xhc3MgZXh0ZW5kcyBIYXNoIHsKICAgICAgICBjb25zdHJ1Y3RvcihibG9ja0xlbiwgb3V0cHV0TGVuLCBwYWRPZmZzZXQsIGlzTEUyKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgdGhpcy5ibG9ja0xlbiA9IGJsb2NrTGVuOwogICAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0aGlzLnBhZE9mZnNldCA9IHBhZE9mZnNldDsKICAgICAgICAgIHRoaXMuaXNMRSA9IGlzTEUyOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy5sZW5ndGggPSAwOwogICAgICAgICAgdGhpcy5wb3MgPSAwOwogICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tMZW4pOwogICAgICAgICAgdGhpcy52aWV3ID0gY3JlYXRlVmlldyh0aGlzLmJ1ZmZlcik7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZShkYXRhKSB7CiAgICAgICAgICBleGlzdHModGhpcyk7CiAgICAgICAgICBjb25zdCB7IHZpZXcsIGJ1ZmZlcjogYnVmZmVyMiwgYmxvY2tMZW4gfSA9IHRoaXM7CiAgICAgICAgICBkYXRhID0gdG9CeXRlczIoZGF0YSk7CiAgICAgICAgICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aDsKICAgICAgICAgIGZvciAobGV0IHBvcyA9IDA7IHBvcyA8IGxlbjsgKSB7CiAgICAgICAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihibG9ja0xlbiAtIHRoaXMucG9zLCBsZW4gLSBwb3MpOwogICAgICAgICAgICBpZiAodGFrZSA9PT0gYmxvY2tMZW4pIHsKICAgICAgICAgICAgICBjb25zdCBkYXRhVmlldyA9IGNyZWF0ZVZpZXcoZGF0YSk7CiAgICAgICAgICAgICAgZm9yICg7IGJsb2NrTGVuIDw9IGxlbiAtIHBvczsgcG9zICs9IGJsb2NrTGVuKQogICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzKGRhdGFWaWV3LCBwb3MpOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJ1ZmZlcjIuc2V0KGRhdGEuc3ViYXJyYXkocG9zLCBwb3MgKyB0YWtlKSwgdGhpcy5wb3MpOwogICAgICAgICAgICB0aGlzLnBvcyArPSB0YWtlOwogICAgICAgICAgICBwb3MgKz0gdGFrZTsKICAgICAgICAgICAgaWYgKHRoaXMucG9zID09PSBibG9ja0xlbikgewogICAgICAgICAgICAgIHRoaXMucHJvY2Vzcyh2aWV3LCAwKTsKICAgICAgICAgICAgICB0aGlzLnBvcyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHRoaXMubGVuZ3RoICs9IGRhdGEubGVuZ3RoOwogICAgICAgICAgdGhpcy5yb3VuZENsZWFuKCk7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgZGlnZXN0SW50byhvdXQpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzKTsKICAgICAgICAgIG91dHB1dChvdXQsIHRoaXMpOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IHRydWU7CiAgICAgICAgICBjb25zdCB7IGJ1ZmZlcjogYnVmZmVyMiwgdmlldywgYmxvY2tMZW4sIGlzTEU6IGlzTEUyIH0gPSB0aGlzOwogICAgICAgICAgbGV0IHsgcG9zIH0gPSB0aGlzOwogICAgICAgICAgYnVmZmVyMltwb3MrK10gPSAxMjg7CiAgICAgICAgICB0aGlzLmJ1ZmZlci5zdWJhcnJheShwb3MpLmZpbGwoMCk7CiAgICAgICAgICBpZiAodGhpcy5wYWRPZmZzZXQgPiBibG9ja0xlbiAtIHBvcykgewogICAgICAgICAgICB0aGlzLnByb2Nlc3ModmlldywgMCk7CiAgICAgICAgICAgIHBvcyA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKGxldCBpID0gcG9zOyBpIDwgYmxvY2tMZW47IGkrKykKICAgICAgICAgICAgYnVmZmVyMltpXSA9IDA7CiAgICAgICAgICBzZXRCaWdVaW50NjQodmlldywgYmxvY2tMZW4gLSA4LCBCaWdJbnQodGhpcy5sZW5ndGggKiA4KSwgaXNMRTIpOwogICAgICAgICAgdGhpcy5wcm9jZXNzKHZpZXcsIDApOwogICAgICAgICAgY29uc3Qgb3ZpZXcgPSBjcmVhdGVWaWV3KG91dCk7CiAgICAgICAgICBjb25zdCBsZW4gPSB0aGlzLm91dHB1dExlbjsKICAgICAgICAgIGlmIChsZW4gJSA0KQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIl9zaGEyOiBvdXRwdXRMZW4gc2hvdWxkIGJlIGFsaWduZWQgdG8gMzJiaXQiKTsKICAgICAgICAgIGNvbnN0IG91dExlbiA9IGxlbiAvIDQ7CiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0KCk7CiAgICAgICAgICBpZiAob3V0TGVuID4gc3RhdGUubGVuZ3RoKQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIl9zaGEyOiBvdXRwdXRMZW4gYmlnZ2VyIHRoYW4gc3RhdGUiKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0TGVuOyBpKyspCiAgICAgICAgICAgIG92aWV3LnNldFVpbnQzMig0ICogaSwgc3RhdGVbaV0sIGlzTEUyKTsKICAgICAgICB9CiAgICAgICAgZGlnZXN0KCkgewogICAgICAgICAgY29uc3QgeyBidWZmZXI6IGJ1ZmZlcjIsIG91dHB1dExlbiB9ID0gdGhpczsKICAgICAgICAgIHRoaXMuZGlnZXN0SW50byhidWZmZXIyKTsKICAgICAgICAgIGNvbnN0IHJlcyA9IGJ1ZmZlcjIuc2xpY2UoMCwgb3V0cHV0TGVuKTsKICAgICAgICAgIHRoaXMuZGVzdHJveSgpOwogICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICB9CiAgICAgICAgX2Nsb25lSW50byh0bykgewogICAgICAgICAgdG8gfHwgKHRvID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKSk7CiAgICAgICAgICB0by5zZXQoLi4udGhpcy5nZXQoKSk7CiAgICAgICAgICBjb25zdCB7IGJsb2NrTGVuLCBidWZmZXI6IGJ1ZmZlcjIsIGxlbmd0aCwgZmluaXNoZWQsIGRlc3Ryb3llZCwgcG9zIH0gPSB0aGlzOwogICAgICAgICAgdG8ubGVuZ3RoID0gbGVuZ3RoOwogICAgICAgICAgdG8ucG9zID0gcG9zOwogICAgICAgICAgdG8uZmluaXNoZWQgPSBmaW5pc2hlZDsKICAgICAgICAgIHRvLmRlc3Ryb3llZCA9IGRlc3Ryb3llZDsKICAgICAgICAgIGlmIChsZW5ndGggJSBibG9ja0xlbikKICAgICAgICAgICAgdG8uYnVmZmVyLnNldChidWZmZXIyKTsKICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9zaGEyNTYuanMKICB2YXIgU0hBMjU2X0ssIFNIQTI1Nl9JViwgU0hBMjU2X1csIFNIQTI1Niwgc2hhMjU2OwogIHZhciBpbml0X3NoYTI1NiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vc2hhMjU2LmpzIigpIHsKICAgICAgaW5pdF9tZCgpOwogICAgICBpbml0X3V0aWxzMigpOwogICAgICBTSEEyNTZfSyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgVWludDMyQXJyYXkoWwogICAgICAgIDExMTYzNTI0MDgsCiAgICAgICAgMTg5OTQ0NzQ0MSwKICAgICAgICAzMDQ5MzIzNDcxLAogICAgICAgIDM5MjEwMDk1NzMsCiAgICAgICAgOTYxOTg3MTYzLAogICAgICAgIDE1MDg5NzA5OTMsCiAgICAgICAgMjQ1MzYzNTc0OCwKICAgICAgICAyODcwNzYzMjIxLAogICAgICAgIDM2MjQzODEwODAsCiAgICAgICAgMzEwNTk4NDAxLAogICAgICAgIDYwNzIyNTI3OCwKICAgICAgICAxNDI2ODgxOTg3LAogICAgICAgIDE5MjUwNzgzODgsCiAgICAgICAgMjE2MjA3ODIwNiwKICAgICAgICAyNjE0ODg4MTAzLAogICAgICAgIDMyNDgyMjI1ODAsCiAgICAgICAgMzgzNTM5MDQwMSwKICAgICAgICA0MDIyMjI0Nzc0LAogICAgICAgIDI2NDM0NzA3OCwKICAgICAgICA2MDQ4MDc2MjgsCiAgICAgICAgNzcwMjU1OTgzLAogICAgICAgIDEyNDkxNTAxMjIsCiAgICAgICAgMTU1NTA4MTY5MiwKICAgICAgICAxOTk2MDY0OTg2LAogICAgICAgIDI1NTQyMjA4ODIsCiAgICAgICAgMjgyMTgzNDM0OSwKICAgICAgICAyOTUyOTk2ODA4LAogICAgICAgIDMyMTAzMTM2NzEsCiAgICAgICAgMzMzNjU3MTg5MSwKICAgICAgICAzNTg0NTI4NzExLAogICAgICAgIDExMzkyNjk5MywKICAgICAgICAzMzgyNDE4OTUsCiAgICAgICAgNjY2MzA3MjA1LAogICAgICAgIDc3MzUyOTkxMiwKICAgICAgICAxMjk0NzU3MzcyLAogICAgICAgIDEzOTYxODIyOTEsCiAgICAgICAgMTY5NTE4MzcwMCwKICAgICAgICAxOTg2NjYxMDUxLAogICAgICAgIDIxNzcwMjYzNTAsCiAgICAgICAgMjQ1Njk1NjAzNywKICAgICAgICAyNzMwNDg1OTIxLAogICAgICAgIDI4MjAzMDI0MTEsCiAgICAgICAgMzI1OTczMDgwMCwKICAgICAgICAzMzQ1NzY0NzcxLAogICAgICAgIDM1MTYwNjU4MTcsCiAgICAgICAgMzYwMDM1MjgwNCwKICAgICAgICA0MDk0NTcxOTA5LAogICAgICAgIDI3NTQyMzM0NCwKICAgICAgICA0MzAyMjc3MzQsCiAgICAgICAgNTA2OTQ4NjE2LAogICAgICAgIDY1OTA2MDU1NiwKICAgICAgICA4ODM5OTc4NzcsCiAgICAgICAgOTU4MTM5NTcxLAogICAgICAgIDEzMjI4MjIyMTgsCiAgICAgICAgMTUzNzAwMjA2MywKICAgICAgICAxNzQ3ODczNzc5LAogICAgICAgIDE5NTU1NjIyMjIsCiAgICAgICAgMjAyNDEwNDgxNSwKICAgICAgICAyMjI3NzMwNDUyLAogICAgICAgIDIzNjE4NTI0MjQsCiAgICAgICAgMjQyODQzNjQ3NCwKICAgICAgICAyNzU2NzM0MTg3LAogICAgICAgIDMyMDQwMzE0NzksCiAgICAgICAgMzMyOTMyNTI5OAogICAgICBdKTsKICAgICAgU0hBMjU2X0lWID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheShbCiAgICAgICAgMTc3OTAzMzcwMywKICAgICAgICAzMTQ0MTM0Mjc3LAogICAgICAgIDEwMTM5MDQyNDIsCiAgICAgICAgMjc3MzQ4MDc2MiwKICAgICAgICAxMzU5ODkzMTE5LAogICAgICAgIDI2MDA4MjI5MjQsCiAgICAgICAgNTI4NzM0NjM1LAogICAgICAgIDE1NDE0NTkyMjUKICAgICAgXSk7CiAgICAgIFNIQTI1Nl9XID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheSg2NCk7CiAgICAgIFNIQTI1NiA9IGNsYXNzIGV4dGVuZHMgSGFzaE1EIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKDY0LCAzMiwgOCwgZmFsc2UpOwogICAgICAgICAgdGhpcy5BID0gU0hBMjU2X0lWWzBdIHwgMDsKICAgICAgICAgIHRoaXMuQiA9IFNIQTI1Nl9JVlsxXSB8IDA7CiAgICAgICAgICB0aGlzLkMgPSBTSEEyNTZfSVZbMl0gfCAwOwogICAgICAgICAgdGhpcy5EID0gU0hBMjU2X0lWWzNdIHwgMDsKICAgICAgICAgIHRoaXMuRSA9IFNIQTI1Nl9JVls0XSB8IDA7CiAgICAgICAgICB0aGlzLkYgPSBTSEEyNTZfSVZbNV0gfCAwOwogICAgICAgICAgdGhpcy5HID0gU0hBMjU2X0lWWzZdIHwgMDsKICAgICAgICAgIHRoaXMuSCA9IFNIQTI1Nl9JVls3XSB8IDA7CiAgICAgICAgfQogICAgICAgIGdldCgpIHsKICAgICAgICAgIGNvbnN0IHsgQSwgQiwgQywgRCwgRSwgRiwgRywgSCB9ID0gdGhpczsKICAgICAgICAgIHJldHVybiBbQSwgQiwgQywgRCwgRSwgRiwgRywgSF07CiAgICAgICAgfQogICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZQogICAgICAgIHNldChBLCBCLCBDLCBELCBFLCBGLCBHLCBIKSB7CiAgICAgICAgICB0aGlzLkEgPSBBIHwgMDsKICAgICAgICAgIHRoaXMuQiA9IEIgfCAwOwogICAgICAgICAgdGhpcy5DID0gQyB8IDA7CiAgICAgICAgICB0aGlzLkQgPSBEIHwgMDsKICAgICAgICAgIHRoaXMuRSA9IEUgfCAwOwogICAgICAgICAgdGhpcy5GID0gRiB8IDA7CiAgICAgICAgICB0aGlzLkcgPSBHIHwgMDsKICAgICAgICAgIHRoaXMuSCA9IEggfCAwOwogICAgICAgIH0KICAgICAgICBwcm9jZXNzKHZpZXcsIG9mZnNldCkgewogICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrLCBvZmZzZXQgKz0gNCkKICAgICAgICAgICAgU0hBMjU2X1dbaV0gPSB2aWV3LmdldFVpbnQzMihvZmZzZXQsIGZhbHNlKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAxNjsgaSA8IDY0OyBpKyspIHsKICAgICAgICAgICAgY29uc3QgVzE1ID0gU0hBMjU2X1dbaSAtIDE1XTsKICAgICAgICAgICAgY29uc3QgVzIgPSBTSEEyNTZfV1tpIC0gMl07CiAgICAgICAgICAgIGNvbnN0IHMwID0gcm90cihXMTUsIDcpIF4gcm90cihXMTUsIDE4KSBeIFcxNSA+Pj4gMzsKICAgICAgICAgICAgY29uc3QgczEgPSByb3RyKFcyLCAxNykgXiByb3RyKFcyLCAxOSkgXiBXMiA+Pj4gMTA7CiAgICAgICAgICAgIFNIQTI1Nl9XW2ldID0gczEgKyBTSEEyNTZfV1tpIC0gN10gKyBzMCArIFNIQTI1Nl9XW2kgLSAxNl0gfCAwOwogICAgICAgICAgfQogICAgICAgICAgbGV0IHsgQSwgQiwgQywgRCwgRSwgRiwgRywgSCB9ID0gdGhpczsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjQ7IGkrKykgewogICAgICAgICAgICBjb25zdCBzaWdtYTEgPSByb3RyKEUsIDYpIF4gcm90cihFLCAxMSkgXiByb3RyKEUsIDI1KTsKICAgICAgICAgICAgY29uc3QgVDEgPSBIICsgc2lnbWExICsgQ2hpKEUsIEYsIEcpICsgU0hBMjU2X0tbaV0gKyBTSEEyNTZfV1tpXSB8IDA7CiAgICAgICAgICAgIGNvbnN0IHNpZ21hMCA9IHJvdHIoQSwgMikgXiByb3RyKEEsIDEzKSBeIHJvdHIoQSwgMjIpOwogICAgICAgICAgICBjb25zdCBUMiA9IHNpZ21hMCArIE1haihBLCBCLCBDKSB8IDA7CiAgICAgICAgICAgIEggPSBHOwogICAgICAgICAgICBHID0gRjsKICAgICAgICAgICAgRiA9IEU7CiAgICAgICAgICAgIEUgPSBEICsgVDEgfCAwOwogICAgICAgICAgICBEID0gQzsKICAgICAgICAgICAgQyA9IEI7CiAgICAgICAgICAgIEIgPSBBOwogICAgICAgICAgICBBID0gVDEgKyBUMiB8IDA7CiAgICAgICAgICB9CiAgICAgICAgICBBID0gQSArIHRoaXMuQSB8IDA7CiAgICAgICAgICBCID0gQiArIHRoaXMuQiB8IDA7CiAgICAgICAgICBDID0gQyArIHRoaXMuQyB8IDA7CiAgICAgICAgICBEID0gRCArIHRoaXMuRCB8IDA7CiAgICAgICAgICBFID0gRSArIHRoaXMuRSB8IDA7CiAgICAgICAgICBGID0gRiArIHRoaXMuRiB8IDA7CiAgICAgICAgICBHID0gRyArIHRoaXMuRyB8IDA7CiAgICAgICAgICBIID0gSCArIHRoaXMuSCB8IDA7CiAgICAgICAgICB0aGlzLnNldChBLCBCLCBDLCBELCBFLCBGLCBHLCBIKTsKICAgICAgICB9CiAgICAgICAgcm91bmRDbGVhbigpIHsKICAgICAgICAgIFNIQTI1Nl9XLmZpbGwoMCk7CiAgICAgICAgfQogICAgICAgIGRlc3Ryb3koKSB7CiAgICAgICAgICB0aGlzLnNldCgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKICAgICAgICAgIHRoaXMuYnVmZmVyLmZpbGwoMCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBzaGEyNTYgPSAvKiBAX19QVVJFX18gKi8gd3JhcENvbnN0cnVjdG9yKCgpID0+IG5ldyBTSEEyNTYoKSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC91dGlscy5qcwogIHZhciB1dGlsc19leHBvcnRzID0ge307CiAgX19leHBvcnQodXRpbHNfZXhwb3J0cywgewogICAgYWJ5dGVzOiAoKSA9PiBhYnl0ZXMsCiAgICBiaXRHZXQ6ICgpID0+IGJpdEdldCwKICAgIGJpdExlbjogKCkgPT4gYml0TGVuLAogICAgYml0TWFzazogKCkgPT4gYml0TWFzaywKICAgIGJpdFNldDogKCkgPT4gYml0U2V0LAogICAgYnl0ZXNUb0hleDogKCkgPT4gYnl0ZXNUb0hleDIsCiAgICBieXRlc1RvTnVtYmVyQkU6ICgpID0+IGJ5dGVzVG9OdW1iZXJCRSwKICAgIGJ5dGVzVG9OdW1iZXJMRTogKCkgPT4gYnl0ZXNUb051bWJlckxFLAogICAgY29uY2F0Qnl0ZXM6ICgpID0+IGNvbmNhdEJ5dGVzMywKICAgIGNyZWF0ZUhtYWNEcmJnOiAoKSA9PiBjcmVhdGVIbWFjRHJiZywKICAgIGVuc3VyZUJ5dGVzOiAoKSA9PiBlbnN1cmVCeXRlcywKICAgIGVxdWFsQnl0ZXM6ICgpID0+IGVxdWFsQnl0ZXMsCiAgICBoZXhUb0J5dGVzOiAoKSA9PiBoZXhUb0J5dGVzMiwKICAgIGhleFRvTnVtYmVyOiAoKSA9PiBoZXhUb051bWJlcjIsCiAgICBpc0J5dGVzOiAoKSA9PiBpc0J5dGVzMiwKICAgIG51bWJlclRvQnl0ZXNCRTogKCkgPT4gbnVtYmVyVG9CeXRlc0JFLAogICAgbnVtYmVyVG9CeXRlc0xFOiAoKSA9PiBudW1iZXJUb0J5dGVzTEUsCiAgICBudW1iZXJUb0hleFVucGFkZGVkOiAoKSA9PiBudW1iZXJUb0hleFVucGFkZGVkLAogICAgbnVtYmVyVG9WYXJCeXRlc0JFOiAoKSA9PiBudW1iZXJUb1ZhckJ5dGVzQkUsCiAgICB1dGY4VG9CeXRlczogKCkgPT4gdXRmOFRvQnl0ZXMyLAogICAgdmFsaWRhdGVPYmplY3Q6ICgpID0+IHZhbGlkYXRlT2JqZWN0CiAgfSk7CiAgZnVuY3Rpb24gaXNCeXRlczIoYSkgewogICAgcmV0dXJuIGEgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IGEgIT0gbnVsbCAmJiB0eXBlb2YgYSA9PT0gIm9iamVjdCIgJiYgYS5jb25zdHJ1Y3Rvci5uYW1lID09PSAiVWludDhBcnJheSI7CiAgfQogIGZ1bmN0aW9uIGFieXRlcyhpdGVtKSB7CiAgICBpZiAoIWlzQnl0ZXMyKGl0ZW0pKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVpbnQ4QXJyYXkgZXhwZWN0ZWQiKTsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb0hleDIoYnl0ZXMyKSB7CiAgICBhYnl0ZXMoYnl0ZXMyKTsKICAgIGxldCBoZXggPSAiIjsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMyLmxlbmd0aDsgaSsrKSB7CiAgICAgIGhleCArPSBoZXhlczJbYnl0ZXMyW2ldXTsKICAgIH0KICAgIHJldHVybiBoZXg7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvSGV4VW5wYWRkZWQobnVtKSB7CiAgICBjb25zdCBoZXggPSBudW0udG9TdHJpbmcoMTYpOwogICAgcmV0dXJuIGhleC5sZW5ndGggJiAxID8gYDAke2hleH1gIDogaGV4OwogIH0KICBmdW5jdGlvbiBoZXhUb051bWJlcjIoaGV4KSB7CiAgICBpZiAodHlwZW9mIGhleCAhPT0gInN0cmluZyIpCiAgICAgIHRocm93IG5ldyBFcnJvcigiaGV4IHN0cmluZyBleHBlY3RlZCwgZ290ICIgKyB0eXBlb2YgaGV4KTsKICAgIHJldHVybiBCaWdJbnQoaGV4ID09PSAiIiA/ICIwIiA6IGAweCR7aGV4fWApOwogIH0KICBmdW5jdGlvbiBhc2NpaVRvQmFzZTE2KGNoYXIpIHsKICAgIGlmIChjaGFyID49IGFzY2lpcy5fMCAmJiBjaGFyIDw9IGFzY2lpcy5fOSkKICAgICAgcmV0dXJuIGNoYXIgLSBhc2NpaXMuXzA7CiAgICBpZiAoY2hhciA+PSBhc2NpaXMuX0EgJiYgY2hhciA8PSBhc2NpaXMuX0YpCiAgICAgIHJldHVybiBjaGFyIC0gKGFzY2lpcy5fQSAtIDEwKTsKICAgIGlmIChjaGFyID49IGFzY2lpcy5fYSAmJiBjaGFyIDw9IGFzY2lpcy5fZikKICAgICAgcmV0dXJuIGNoYXIgLSAoYXNjaWlzLl9hIC0gMTApOwogICAgcmV0dXJuOwogIH0KICBmdW5jdGlvbiBoZXhUb0J5dGVzMihoZXgpIHsKICAgIGlmICh0eXBlb2YgaGV4ICE9PSAic3RyaW5nIikKICAgICAgdGhyb3cgbmV3IEVycm9yKCJoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgIiArIHR5cGVvZiBoZXgpOwogICAgY29uc3QgaGwgPSBoZXgubGVuZ3RoOwogICAgY29uc3QgYWwgPSBobCAvIDI7CiAgICBpZiAoaGwgJSAyKQogICAgICB0aHJvdyBuZXcgRXJyb3IoInBhZGRlZCBoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgdW5wYWRkZWQgaGV4IG9mIGxlbmd0aCAiICsgaGwpOwogICAgY29uc3QgYXJyYXkgPSBuZXcgVWludDhBcnJheShhbCk7CiAgICBmb3IgKGxldCBhaSA9IDAsIGhpID0gMDsgYWkgPCBhbDsgYWkrKywgaGkgKz0gMikgewogICAgICBjb25zdCBuMSA9IGFzY2lpVG9CYXNlMTYoaGV4LmNoYXJDb2RlQXQoaGkpKTsKICAgICAgY29uc3QgbjIgPSBhc2NpaVRvQmFzZTE2KGhleC5jaGFyQ29kZUF0KGhpICsgMSkpOwogICAgICBpZiAobjEgPT09IHZvaWQgMCB8fCBuMiA9PT0gdm9pZCAwKSB7CiAgICAgICAgY29uc3QgY2hhciA9IGhleFtoaV0gKyBoZXhbaGkgKyAxXTsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCBub24taGV4IGNoYXJhY3RlciAiJyArIGNoYXIgKyAnIiBhdCBpbmRleCAnICsgaGkpOwogICAgICB9CiAgICAgIGFycmF5W2FpXSA9IG4xICogMTYgKyBuMjsKICAgIH0KICAgIHJldHVybiBhcnJheTsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb051bWJlckJFKGJ5dGVzMikgewogICAgcmV0dXJuIGhleFRvTnVtYmVyMihieXRlc1RvSGV4MihieXRlczIpKTsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb051bWJlckxFKGJ5dGVzMikgewogICAgYWJ5dGVzKGJ5dGVzMik7CiAgICByZXR1cm4gaGV4VG9OdW1iZXIyKGJ5dGVzVG9IZXgyKFVpbnQ4QXJyYXkuZnJvbShieXRlczIpLnJldmVyc2UoKSkpOwogIH0KICBmdW5jdGlvbiBudW1iZXJUb0J5dGVzQkUobiwgbGVuKSB7CiAgICByZXR1cm4gaGV4VG9CeXRlczIobi50b1N0cmluZygxNikucGFkU3RhcnQobGVuICogMiwgIjAiKSk7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvQnl0ZXNMRShuLCBsZW4pIHsKICAgIHJldHVybiBudW1iZXJUb0J5dGVzQkUobiwgbGVuKS5yZXZlcnNlKCk7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvVmFyQnl0ZXNCRShuKSB7CiAgICByZXR1cm4gaGV4VG9CeXRlczIobnVtYmVyVG9IZXhVbnBhZGRlZChuKSk7CiAgfQogIGZ1bmN0aW9uIGVuc3VyZUJ5dGVzKHRpdGxlLCBoZXgsIGV4cGVjdGVkTGVuZ3RoKSB7CiAgICBsZXQgcmVzOwogICAgaWYgKHR5cGVvZiBoZXggPT09ICJzdHJpbmciKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmVzID0gaGV4VG9CeXRlczIoaGV4KTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aXRsZX0gbXVzdCBiZSB2YWxpZCBoZXggc3RyaW5nLCBnb3QgIiR7aGV4fSIuIENhdXNlOiAke2V9YCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXNCeXRlczIoaGV4KSkgewogICAgICByZXMgPSBVaW50OEFycmF5LmZyb20oaGV4KTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aXRsZX0gbXVzdCBiZSBoZXggc3RyaW5nIG9yIFVpbnQ4QXJyYXlgKTsKICAgIH0KICAgIGNvbnN0IGxlbiA9IHJlcy5sZW5ndGg7CiAgICBpZiAodHlwZW9mIGV4cGVjdGVkTGVuZ3RoID09PSAibnVtYmVyIiAmJiBsZW4gIT09IGV4cGVjdGVkTGVuZ3RoKQogICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGl0bGV9IGV4cGVjdGVkICR7ZXhwZWN0ZWRMZW5ndGh9IGJ5dGVzLCBnb3QgJHtsZW59YCk7CiAgICByZXR1cm4gcmVzOwogIH0KICBmdW5jdGlvbiBjb25jYXRCeXRlczMoLi4uYXJyYXlzKSB7CiAgICBsZXQgc3VtID0gMDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IGEgPSBhcnJheXNbaV07CiAgICAgIGFieXRlcyhhKTsKICAgICAgc3VtICs9IGEubGVuZ3RoOwogICAgfQogICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc3VtKTsKICAgIGZvciAobGV0IGkgPSAwLCBwYWQyID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhID0gYXJyYXlzW2ldOwogICAgICByZXMuc2V0KGEsIHBhZDIpOwogICAgICBwYWQyICs9IGEubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9CiAgZnVuY3Rpb24gZXF1YWxCeXRlcyhhLCBiKSB7CiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgZGlmZiA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspCiAgICAgIGRpZmYgfD0gYVtpXSBeIGJbaV07CiAgICByZXR1cm4gZGlmZiA9PT0gMDsKICB9CiAgZnVuY3Rpb24gdXRmOFRvQnl0ZXMyKHN0cikgewogICAgaWYgKHR5cGVvZiBzdHIgIT09ICJzdHJpbmciKQogICAgICB0aHJvdyBuZXcgRXJyb3IoYHV0ZjhUb0J5dGVzIGV4cGVjdGVkIHN0cmluZywgZ290ICR7dHlwZW9mIHN0cn1gKTsKICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyKSk7CiAgfQogIGZ1bmN0aW9uIGJpdExlbihuKSB7CiAgICBsZXQgbGVuOwogICAgZm9yIChsZW4gPSAwOyBuID4gXzBuMjsgbiA+Pj0gXzFuMiwgbGVuICs9IDEpCiAgICAgIDsKICAgIHJldHVybiBsZW47CiAgfQogIGZ1bmN0aW9uIGJpdEdldChuLCBwb3MpIHsKICAgIHJldHVybiBuID4+IEJpZ0ludChwb3MpICYgXzFuMjsKICB9CiAgZnVuY3Rpb24gYml0U2V0KG4sIHBvcywgdmFsdWUpIHsKICAgIHJldHVybiBuIHwgKHZhbHVlID8gXzFuMiA6IF8wbjIpIDw8IEJpZ0ludChwb3MpOwogIH0KICBmdW5jdGlvbiBjcmVhdGVIbWFjRHJiZyhoYXNoTGVuLCBxQnl0ZUxlbiwgaG1hY0ZuKSB7CiAgICBpZiAodHlwZW9mIGhhc2hMZW4gIT09ICJudW1iZXIiIHx8IGhhc2hMZW4gPCAyKQogICAgICB0aHJvdyBuZXcgRXJyb3IoImhhc2hMZW4gbXVzdCBiZSBhIG51bWJlciIpOwogICAgaWYgKHR5cGVvZiBxQnl0ZUxlbiAhPT0gIm51bWJlciIgfHwgcUJ5dGVMZW4gPCAyKQogICAgICB0aHJvdyBuZXcgRXJyb3IoInFCeXRlTGVuIG11c3QgYmUgYSBudW1iZXIiKTsKICAgIGlmICh0eXBlb2YgaG1hY0ZuICE9PSAiZnVuY3Rpb24iKQogICAgICB0aHJvdyBuZXcgRXJyb3IoImhtYWNGbiBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKICAgIGxldCB2ID0gdThuKGhhc2hMZW4pOwogICAgbGV0IGsgPSB1OG4oaGFzaExlbik7CiAgICBsZXQgaSA9IDA7CiAgICBjb25zdCByZXNldDIgPSAoKSA9PiB7CiAgICAgIHYuZmlsbCgxKTsKICAgICAgay5maWxsKDApOwogICAgICBpID0gMDsKICAgIH07CiAgICBjb25zdCBoID0gKC4uLmIpID0+IGhtYWNGbihrLCB2LCAuLi5iKTsKICAgIGNvbnN0IHJlc2VlZCA9IChzZWVkID0gdThuKCkpID0+IHsKICAgICAgayA9IGgodThmcihbMF0pLCBzZWVkKTsKICAgICAgdiA9IGgoKTsKICAgICAgaWYgKHNlZWQubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgayA9IGgodThmcihbMV0pLCBzZWVkKTsKICAgICAgdiA9IGgoKTsKICAgIH07CiAgICBjb25zdCBnZW4yID0gKCkgPT4gewogICAgICBpZiAoaSsrID49IDFlMykKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImRyYmc6IHRyaWVkIDEwMDAgdmFsdWVzIik7CiAgICAgIGxldCBsZW4gPSAwOwogICAgICBjb25zdCBvdXQgPSBbXTsKICAgICAgd2hpbGUgKGxlbiA8IHFCeXRlTGVuKSB7CiAgICAgICAgdiA9IGgoKTsKICAgICAgICBjb25zdCBzbCA9IHYuc2xpY2UoKTsKICAgICAgICBvdXQucHVzaChzbCk7CiAgICAgICAgbGVuICs9IHYubGVuZ3RoOwogICAgICB9CiAgICAgIHJldHVybiBjb25jYXRCeXRlczMoLi4ub3V0KTsKICAgIH07CiAgICBjb25zdCBnZW5VbnRpbCA9IChzZWVkLCBwcmVkKSA9PiB7CiAgICAgIHJlc2V0MigpOwogICAgICByZXNlZWQoc2VlZCk7CiAgICAgIGxldCByZXMgPSB2b2lkIDA7CiAgICAgIHdoaWxlICghKHJlcyA9IHByZWQoZ2VuMigpKSkpCiAgICAgICAgcmVzZWVkKCk7CiAgICAgIHJlc2V0MigpOwogICAgICByZXR1cm4gcmVzOwogICAgfTsKICAgIHJldHVybiBnZW5VbnRpbDsKICB9CiAgZnVuY3Rpb24gdmFsaWRhdGVPYmplY3Qob2JqZWN0LCB2YWxpZGF0b3JzLCBvcHRWYWxpZGF0b3JzID0ge30pIHsKICAgIGNvbnN0IGNoZWNrRmllbGQgPSAoZmllbGROYW1lLCB0eXBlLCBpc09wdGlvbmFsKSA9PiB7CiAgICAgIGNvbnN0IGNoZWNrVmFsID0gdmFsaWRhdG9yRm5zW3R5cGVdOwogICAgICBpZiAodHlwZW9mIGNoZWNrVmFsICE9PSAiZnVuY3Rpb24iKQogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWxpZGF0b3IgIiR7dHlwZX0iLCBleHBlY3RlZCBmdW5jdGlvbmApOwogICAgICBjb25zdCB2YWwgPSBvYmplY3RbZmllbGROYW1lXTsKICAgICAgaWYgKGlzT3B0aW9uYWwgJiYgdmFsID09PSB2b2lkIDApCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoIWNoZWNrVmFsKHZhbCwgb2JqZWN0KSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbSAke1N0cmluZyhmaWVsZE5hbWUpfT0ke3ZhbH0gKCR7dHlwZW9mIHZhbH0pLCBleHBlY3RlZCAke3R5cGV9YCk7CiAgICAgIH0KICAgIH07CiAgICBmb3IgKGNvbnN0IFtmaWVsZE5hbWUsIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbGlkYXRvcnMpKQogICAgICBjaGVja0ZpZWxkKGZpZWxkTmFtZSwgdHlwZSwgZmFsc2UpOwogICAgZm9yIChjb25zdCBbZmllbGROYW1lLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhvcHRWYWxpZGF0b3JzKSkKICAgICAgY2hlY2tGaWVsZChmaWVsZE5hbWUsIHR5cGUsIHRydWUpOwogICAgcmV0dXJuIG9iamVjdDsKICB9CiAgdmFyIF8wbjIsIF8xbjIsIF8ybjIsIGhleGVzMiwgYXNjaWlzLCBiaXRNYXNrLCB1OG4sIHU4ZnIsIHZhbGlkYXRvckZuczsKICB2YXIgaW5pdF91dGlsczQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L3V0aWxzLmpzIigpIHsKICAgICAgXzBuMiA9IEJpZ0ludCgwKTsKICAgICAgXzFuMiA9IEJpZ0ludCgxKTsKICAgICAgXzJuMiA9IEJpZ0ludCgyKTsKICAgICAgaGV4ZXMyID0gLyogQF9fUFVSRV9fICovIEFycmF5LmZyb20oeyBsZW5ndGg6IDI1NiB9LCAoXywgaSkgPT4gaS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgIjAiKSk7CiAgICAgIGFzY2lpcyA9IHsgXzA6IDQ4LCBfOTogNTcsIF9BOiA2NSwgX0Y6IDcwLCBfYTogOTcsIF9mOiAxMDIgfTsKICAgICAgYml0TWFzayA9IChuKSA9PiAoXzJuMiA8PCBCaWdJbnQobiAtIDEpKSAtIF8xbjI7CiAgICAgIHU4biA9IChkYXRhKSA9PiBuZXcgVWludDhBcnJheShkYXRhKTsKICAgICAgdThmciA9IChhcnIpID0+IFVpbnQ4QXJyYXkuZnJvbShhcnIpOwogICAgICB2YWxpZGF0b3JGbnMgPSB7CiAgICAgICAgYmlnaW50OiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAiYmlnaW50IiwKICAgICAgICBmdW5jdGlvbjogKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gImZ1bmN0aW9uIiwKICAgICAgICBib29sZWFuOiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAiYm9vbGVhbiIsCiAgICAgICAgc3RyaW5nOiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAic3RyaW5nIiwKICAgICAgICBzdHJpbmdPclVpbnQ4QXJyYXk6ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICJzdHJpbmciIHx8IGlzQnl0ZXMyKHZhbCksCiAgICAgICAgaXNTYWZlSW50ZWdlcjogKHZhbCkgPT4gTnVtYmVyLmlzU2FmZUludGVnZXIodmFsKSwKICAgICAgICBhcnJheTogKHZhbCkgPT4gQXJyYXkuaXNBcnJheSh2YWwpLAogICAgICAgIGZpZWxkOiAodmFsLCBvYmplY3QpID0+IG9iamVjdC5GcC5pc1ZhbGlkKHZhbCksCiAgICAgICAgaGFzaDogKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gImZ1bmN0aW9uIiAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWwub3V0cHV0TGVuKQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvbW9kdWxhci5qcwogIGZ1bmN0aW9uIG1vZChhLCBiKSB7CiAgICBjb25zdCByZXN1bHQgPSBhICUgYjsKICAgIHJldHVybiByZXN1bHQgPj0gXzBuMyA/IHJlc3VsdCA6IGIgKyByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIHBvdyhudW0sIHBvd2VyLCBtb2R1bG8pIHsKICAgIGlmIChtb2R1bG8gPD0gXzBuMyB8fCBwb3dlciA8IF8wbjMpCiAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcG93ZXIvbW9kdWxvID4gMCIpOwogICAgaWYgKG1vZHVsbyA9PT0gXzFuMykKICAgICAgcmV0dXJuIF8wbjM7CiAgICBsZXQgcmVzID0gXzFuMzsKICAgIHdoaWxlIChwb3dlciA+IF8wbjMpIHsKICAgICAgaWYgKHBvd2VyICYgXzFuMykKICAgICAgICByZXMgPSByZXMgKiBudW0gJSBtb2R1bG87CiAgICAgIG51bSA9IG51bSAqIG51bSAlIG1vZHVsbzsKICAgICAgcG93ZXIgPj49IF8xbjM7CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KICBmdW5jdGlvbiBwb3cyKHgsIHBvd2VyLCBtb2R1bG8pIHsKICAgIGxldCByZXMgPSB4OwogICAgd2hpbGUgKHBvd2VyLS0gPiBfMG4zKSB7CiAgICAgIHJlcyAqPSByZXM7CiAgICAgIHJlcyAlPSBtb2R1bG87CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KICBmdW5jdGlvbiBpbnZlcnQobnVtYmVyMiwgbW9kdWxvKSB7CiAgICBpZiAobnVtYmVyMiA9PT0gXzBuMyB8fCBtb2R1bG8gPD0gXzBuMykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmVydDogZXhwZWN0ZWQgcG9zaXRpdmUgaW50ZWdlcnMsIGdvdCBuPSR7bnVtYmVyMn0gbW9kPSR7bW9kdWxvfWApOwogICAgfQogICAgbGV0IGEgPSBtb2QobnVtYmVyMiwgbW9kdWxvKTsKICAgIGxldCBiID0gbW9kdWxvOwogICAgbGV0IHggPSBfMG4zLCB5ID0gXzFuMywgdSA9IF8xbjMsIHYgPSBfMG4zOwogICAgd2hpbGUgKGEgIT09IF8wbjMpIHsKICAgICAgY29uc3QgcSA9IGIgLyBhOwogICAgICBjb25zdCByID0gYiAlIGE7CiAgICAgIGNvbnN0IG0gPSB4IC0gdSAqIHE7CiAgICAgIGNvbnN0IG4gPSB5IC0gdiAqIHE7CiAgICAgIGIgPSBhLCBhID0gciwgeCA9IHUsIHkgPSB2LCB1ID0gbSwgdiA9IG47CiAgICB9CiAgICBjb25zdCBnY2QgPSBiOwogICAgaWYgKGdjZCAhPT0gXzFuMykKICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZlcnQ6IGRvZXMgbm90IGV4aXN0Iik7CiAgICByZXR1cm4gbW9kKHgsIG1vZHVsbyk7CiAgfQogIGZ1bmN0aW9uIHRvbmVsbGlTaGFua3MoUCkgewogICAgY29uc3QgbGVnZW5kcmVDID0gKFAgLSBfMW4zKSAvIF8ybjM7CiAgICBsZXQgUSwgUywgWjsKICAgIGZvciAoUSA9IFAgLSBfMW4zLCBTID0gMDsgUSAlIF8ybjMgPT09IF8wbjM7IFEgLz0gXzJuMywgUysrKQogICAgICA7CiAgICBmb3IgKFogPSBfMm4zOyBaIDwgUCAmJiBwb3coWiwgbGVnZW5kcmVDLCBQKSAhPT0gUCAtIF8xbjM7IForKykKICAgICAgOwogICAgaWYgKFMgPT09IDEpIHsKICAgICAgY29uc3QgcDFkaXY0ID0gKFAgKyBfMW4zKSAvIF80bjsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRvbmVsbGlGYXN0KEZwMiwgbikgewogICAgICAgIGNvbnN0IHJvb3QyID0gRnAyLnBvdyhuLCBwMWRpdjQpOwogICAgICAgIGlmICghRnAyLmVxbChGcDIuc3FyKHJvb3QyKSwgbikpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNxdWFyZSByb290Iik7CiAgICAgICAgcmV0dXJuIHJvb3QyOwogICAgICB9OwogICAgfQogICAgY29uc3QgUTFkaXYyID0gKFEgKyBfMW4zKSAvIF8ybjM7CiAgICByZXR1cm4gZnVuY3Rpb24gdG9uZWxsaVNsb3coRnAyLCBuKSB7CiAgICAgIGlmIChGcDIucG93KG4sIGxlZ2VuZHJlQykgPT09IEZwMi5uZWcoRnAyLk9ORSkpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpOwogICAgICBsZXQgciA9IFM7CiAgICAgIGxldCBnID0gRnAyLnBvdyhGcDIubXVsKEZwMi5PTkUsIFopLCBRKTsKICAgICAgbGV0IHggPSBGcDIucG93KG4sIFExZGl2Mik7CiAgICAgIGxldCBiID0gRnAyLnBvdyhuLCBRKTsKICAgICAgd2hpbGUgKCFGcDIuZXFsKGIsIEZwMi5PTkUpKSB7CiAgICAgICAgaWYgKEZwMi5lcWwoYiwgRnAyLlpFUk8pKQogICAgICAgICAgcmV0dXJuIEZwMi5aRVJPOwogICAgICAgIGxldCBtID0gMTsKICAgICAgICBmb3IgKGxldCB0MiA9IEZwMi5zcXIoYik7IG0gPCByOyBtKyspIHsKICAgICAgICAgIGlmIChGcDIuZXFsKHQyLCBGcDIuT05FKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB0MiA9IEZwMi5zcXIodDIpOwogICAgICAgIH0KICAgICAgICBjb25zdCBnZTIgPSBGcDIucG93KGcsIF8xbjMgPDwgQmlnSW50KHIgLSBtIC0gMSkpOwogICAgICAgIGcgPSBGcDIuc3FyKGdlMik7CiAgICAgICAgeCA9IEZwMi5tdWwoeCwgZ2UyKTsKICAgICAgICBiID0gRnAyLm11bChiLCBnKTsKICAgICAgICByID0gbTsKICAgICAgfQogICAgICByZXR1cm4geDsKICAgIH07CiAgfQogIGZ1bmN0aW9uIEZwU3FydChQKSB7CiAgICBpZiAoUCAlIF80biA9PT0gXzNuKSB7CiAgICAgIGNvbnN0IHAxZGl2NCA9IChQICsgXzFuMykgLyBfNG47CiAgICAgIHJldHVybiBmdW5jdGlvbiBzcXJ0M21vZDQoRnAyLCBuKSB7CiAgICAgICAgY29uc3Qgcm9vdDIgPSBGcDIucG93KG4sIHAxZGl2NCk7CiAgICAgICAgaWYgKCFGcDIuZXFsKEZwMi5zcXIocm9vdDIpLCBuKSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QiKTsKICAgICAgICByZXR1cm4gcm9vdDI7CiAgICAgIH07CiAgICB9CiAgICBpZiAoUCAlIF84biA9PT0gXzVuKSB7CiAgICAgIGNvbnN0IGMxID0gKFAgLSBfNW4pIC8gXzhuOwogICAgICByZXR1cm4gZnVuY3Rpb24gc3FydDVtb2Q4KEZwMiwgbikgewogICAgICAgIGNvbnN0IG4yID0gRnAyLm11bChuLCBfMm4zKTsKICAgICAgICBjb25zdCB2ID0gRnAyLnBvdyhuMiwgYzEpOwogICAgICAgIGNvbnN0IG52ID0gRnAyLm11bChuLCB2KTsKICAgICAgICBjb25zdCBpID0gRnAyLm11bChGcDIubXVsKG52LCBfMm4zKSwgdik7CiAgICAgICAgY29uc3Qgcm9vdDIgPSBGcDIubXVsKG52LCBGcDIuc3ViKGksIEZwMi5PTkUpKTsKICAgICAgICBpZiAoIUZwMi5lcWwoRnAyLnNxcihyb290MiksIG4pKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpOwogICAgICAgIHJldHVybiByb290MjsKICAgICAgfTsKICAgIH0KICAgIGlmIChQICUgXzE2biA9PT0gXzluKSB7CiAgICB9CiAgICByZXR1cm4gdG9uZWxsaVNoYW5rcyhQKTsKICB9CiAgZnVuY3Rpb24gdmFsaWRhdGVGaWVsZChmaWVsZCkgewogICAgY29uc3QgaW5pdGlhbCA9IHsKICAgICAgT1JERVI6ICJiaWdpbnQiLAogICAgICBNQVNLOiAiYmlnaW50IiwKICAgICAgQllURVM6ICJpc1NhZmVJbnRlZ2VyIiwKICAgICAgQklUUzogImlzU2FmZUludGVnZXIiCiAgICB9OwogICAgY29uc3Qgb3B0cyA9IEZJRUxEX0ZJRUxEUy5yZWR1Y2UoKG1hcCwgdmFsKSA9PiB7CiAgICAgIG1hcFt2YWxdID0gImZ1bmN0aW9uIjsKICAgICAgcmV0dXJuIG1hcDsKICAgIH0sIGluaXRpYWwpOwogICAgcmV0dXJuIHZhbGlkYXRlT2JqZWN0KGZpZWxkLCBvcHRzKTsKICB9CiAgZnVuY3Rpb24gRnBQb3coZjIsIG51bSwgcG93ZXIpIHsKICAgIGlmIChwb3dlciA8IF8wbjMpCiAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcG93ZXIgPiAwIik7CiAgICBpZiAocG93ZXIgPT09IF8wbjMpCiAgICAgIHJldHVybiBmMi5PTkU7CiAgICBpZiAocG93ZXIgPT09IF8xbjMpCiAgICAgIHJldHVybiBudW07CiAgICBsZXQgcCA9IGYyLk9ORTsKICAgIGxldCBkID0gbnVtOwogICAgd2hpbGUgKHBvd2VyID4gXzBuMykgewogICAgICBpZiAocG93ZXIgJiBfMW4zKQogICAgICAgIHAgPSBmMi5tdWwocCwgZCk7CiAgICAgIGQgPSBmMi5zcXIoZCk7CiAgICAgIHBvd2VyID4+PSBfMW4zOwogICAgfQogICAgcmV0dXJuIHA7CiAgfQogIGZ1bmN0aW9uIEZwSW52ZXJ0QmF0Y2goZjIsIG51bXMpIHsKICAgIGNvbnN0IHRtcCA9IG5ldyBBcnJheShudW1zLmxlbmd0aCk7CiAgICBjb25zdCBsYXN0TXVsdGlwbGllZCA9IG51bXMucmVkdWNlKChhY2MsIG51bSwgaSkgPT4gewogICAgICBpZiAoZjIuaXMwKG51bSkpCiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgdG1wW2ldID0gYWNjOwogICAgICByZXR1cm4gZjIubXVsKGFjYywgbnVtKTsKICAgIH0sIGYyLk9ORSk7CiAgICBjb25zdCBpbnZlcnRlZCA9IGYyLmludihsYXN0TXVsdGlwbGllZCk7CiAgICBudW1zLnJlZHVjZVJpZ2h0KChhY2MsIG51bSwgaSkgPT4gewogICAgICBpZiAoZjIuaXMwKG51bSkpCiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgdG1wW2ldID0gZjIubXVsKGFjYywgdG1wW2ldKTsKICAgICAgcmV0dXJuIGYyLm11bChhY2MsIG51bSk7CiAgICB9LCBpbnZlcnRlZCk7CiAgICByZXR1cm4gdG1wOwogIH0KICBmdW5jdGlvbiBuTGVuZ3RoKG4sIG5CaXRMZW5ndGgpIHsKICAgIGNvbnN0IF9uQml0TGVuZ3RoID0gbkJpdExlbmd0aCAhPT0gdm9pZCAwID8gbkJpdExlbmd0aCA6IG4udG9TdHJpbmcoMikubGVuZ3RoOwogICAgY29uc3QgbkJ5dGVMZW5ndGggPSBNYXRoLmNlaWwoX25CaXRMZW5ndGggLyA4KTsKICAgIHJldHVybiB7IG5CaXRMZW5ndGg6IF9uQml0TGVuZ3RoLCBuQnl0ZUxlbmd0aCB9OwogIH0KICBmdW5jdGlvbiBGaWVsZChPUkRFUiwgYml0TGVuMiwgaXNMRTIgPSBmYWxzZSwgcmVkZWYgPSB7fSkgewogICAgaWYgKE9SREVSIDw9IF8wbjMpCiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgRmllbGQgT1JERVIgPiAwLCBnb3QgJHtPUkRFUn1gKTsKICAgIGNvbnN0IHsgbkJpdExlbmd0aDogQklUUywgbkJ5dGVMZW5ndGg6IEJZVEVTIH0gPSBuTGVuZ3RoKE9SREVSLCBiaXRMZW4yKTsKICAgIGlmIChCWVRFUyA+IDIwNDgpCiAgICAgIHRocm93IG5ldyBFcnJvcigiRmllbGQgbGVuZ3RocyBvdmVyIDIwNDggYnl0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQiKTsKICAgIGNvbnN0IHNxcnRQID0gRnBTcXJ0KE9SREVSKTsKICAgIGNvbnN0IGYyID0gT2JqZWN0LmZyZWV6ZSh7CiAgICAgIE9SREVSLAogICAgICBCSVRTLAogICAgICBCWVRFUywKICAgICAgTUFTSzogYml0TWFzayhCSVRTKSwKICAgICAgWkVSTzogXzBuMywKICAgICAgT05FOiBfMW4zLAogICAgICBjcmVhdGU6IChudW0pID0+IG1vZChudW0sIE9SREVSKSwKICAgICAgaXNWYWxpZDogKG51bSkgPT4gewogICAgICAgIGlmICh0eXBlb2YgbnVtICE9PSAiYmlnaW50IikKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmaWVsZCBlbGVtZW50OiBleHBlY3RlZCBiaWdpbnQsIGdvdCAke3R5cGVvZiBudW19YCk7CiAgICAgICAgcmV0dXJuIF8wbjMgPD0gbnVtICYmIG51bSA8IE9SREVSOwogICAgICB9LAogICAgICBpczA6IChudW0pID0+IG51bSA9PT0gXzBuMywKICAgICAgaXNPZGQ6IChudW0pID0+IChudW0gJiBfMW4zKSA9PT0gXzFuMywKICAgICAgbmVnOiAobnVtKSA9PiBtb2QoLW51bSwgT1JERVIpLAogICAgICBlcWw6IChsaHMsIHJocykgPT4gbGhzID09PSByaHMsCiAgICAgIHNxcjogKG51bSkgPT4gbW9kKG51bSAqIG51bSwgT1JERVIpLAogICAgICBhZGQ6IChsaHMsIHJocykgPT4gbW9kKGxocyArIHJocywgT1JERVIpLAogICAgICBzdWI6IChsaHMsIHJocykgPT4gbW9kKGxocyAtIHJocywgT1JERVIpLAogICAgICBtdWw6IChsaHMsIHJocykgPT4gbW9kKGxocyAqIHJocywgT1JERVIpLAogICAgICBwb3c6IChudW0sIHBvd2VyKSA9PiBGcFBvdyhmMiwgbnVtLCBwb3dlciksCiAgICAgIGRpdjogKGxocywgcmhzKSA9PiBtb2QobGhzICogaW52ZXJ0KHJocywgT1JERVIpLCBPUkRFUiksCiAgICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBkb2Vzbid0IG5vcm1hbGl6ZQogICAgICBzcXJOOiAobnVtKSA9PiBudW0gKiBudW0sCiAgICAgIGFkZE46IChsaHMsIHJocykgPT4gbGhzICsgcmhzLAogICAgICBzdWJOOiAobGhzLCByaHMpID0+IGxocyAtIHJocywKICAgICAgbXVsTjogKGxocywgcmhzKSA9PiBsaHMgKiByaHMsCiAgICAgIGludjogKG51bSkgPT4gaW52ZXJ0KG51bSwgT1JERVIpLAogICAgICBzcXJ0OiByZWRlZi5zcXJ0IHx8ICgobikgPT4gc3FydFAoZjIsIG4pKSwKICAgICAgaW52ZXJ0QmF0Y2g6IChsc3QpID0+IEZwSW52ZXJ0QmF0Y2goZjIsIGxzdCksCiAgICAgIC8vIFRPRE86IGRvIHdlIHJlYWxseSBuZWVkIGNvbnN0YW50IGNtb3Y/CiAgICAgIC8vIFdlIGRvbid0IGhhdmUgY29uc3QtdGltZSBiaWdpbnRzIGFueXdheSwgc28gcHJvYmFibHkgd2lsbCBiZSBub3QgdmVyeSB1c2VmdWwKICAgICAgY21vdjogKGEsIGIsIGMpID0+IGMgPyBiIDogYSwKICAgICAgdG9CeXRlczogKG51bSkgPT4gaXNMRTIgPyBudW1iZXJUb0J5dGVzTEUobnVtLCBCWVRFUykgOiBudW1iZXJUb0J5dGVzQkUobnVtLCBCWVRFUyksCiAgICAgIGZyb21CeXRlczogKGJ5dGVzMikgPT4gewogICAgICAgIGlmIChieXRlczIubGVuZ3RoICE9PSBCWVRFUykKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRnAuZnJvbUJ5dGVzOiBleHBlY3RlZCAke0JZVEVTfSwgZ290ICR7Ynl0ZXMyLmxlbmd0aH1gKTsKICAgICAgICByZXR1cm4gaXNMRTIgPyBieXRlc1RvTnVtYmVyTEUoYnl0ZXMyKSA6IGJ5dGVzVG9OdW1iZXJCRShieXRlczIpOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBPYmplY3QuZnJlZXplKGYyKTsKICB9CiAgZnVuY3Rpb24gZ2V0RmllbGRCeXRlc0xlbmd0aChmaWVsZE9yZGVyKSB7CiAgICBpZiAodHlwZW9mIGZpZWxkT3JkZXIgIT09ICJiaWdpbnQiKQogICAgICB0aHJvdyBuZXcgRXJyb3IoImZpZWxkIG9yZGVyIG11c3QgYmUgYmlnaW50Iik7CiAgICBjb25zdCBiaXRMZW5ndGggPSBmaWVsZE9yZGVyLnRvU3RyaW5nKDIpLmxlbmd0aDsKICAgIHJldHVybiBNYXRoLmNlaWwoYml0TGVuZ3RoIC8gOCk7CiAgfQogIGZ1bmN0aW9uIGdldE1pbkhhc2hMZW5ndGgoZmllbGRPcmRlcikgewogICAgY29uc3QgbGVuZ3RoID0gZ2V0RmllbGRCeXRlc0xlbmd0aChmaWVsZE9yZGVyKTsKICAgIHJldHVybiBsZW5ndGggKyBNYXRoLmNlaWwobGVuZ3RoIC8gMik7CiAgfQogIGZ1bmN0aW9uIG1hcEhhc2hUb0ZpZWxkKGtleSwgZmllbGRPcmRlciwgaXNMRTIgPSBmYWxzZSkgewogICAgY29uc3QgbGVuID0ga2V5Lmxlbmd0aDsKICAgIGNvbnN0IGZpZWxkTGVuID0gZ2V0RmllbGRCeXRlc0xlbmd0aChmaWVsZE9yZGVyKTsKICAgIGNvbnN0IG1pbkxlbiA9IGdldE1pbkhhc2hMZW5ndGgoZmllbGRPcmRlcik7CiAgICBpZiAobGVuIDwgMTYgfHwgbGVuIDwgbWluTGVuIHx8IGxlbiA+IDEwMjQpCiAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHttaW5MZW59LTEwMjQgYnl0ZXMgb2YgaW5wdXQsIGdvdCAke2xlbn1gKTsKICAgIGNvbnN0IG51bSA9IGlzTEUyID8gYnl0ZXNUb051bWJlckJFKGtleSkgOiBieXRlc1RvTnVtYmVyTEUoa2V5KTsKICAgIGNvbnN0IHJlZHVjZWQgPSBtb2QobnVtLCBmaWVsZE9yZGVyIC0gXzFuMykgKyBfMW4zOwogICAgcmV0dXJuIGlzTEUyID8gbnVtYmVyVG9CeXRlc0xFKHJlZHVjZWQsIGZpZWxkTGVuKSA6IG51bWJlclRvQnl0ZXNCRShyZWR1Y2VkLCBmaWVsZExlbik7CiAgfQogIHZhciBfMG4zLCBfMW4zLCBfMm4zLCBfM24sIF80biwgXzVuLCBfOG4sIF85biwgXzE2biwgRklFTERfRklFTERTOwogIHZhciBpbml0X21vZHVsYXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L21vZHVsYXIuanMiKCkgewogICAgICBpbml0X3V0aWxzNCgpOwogICAgICBfMG4zID0gQmlnSW50KDApOwogICAgICBfMW4zID0gQmlnSW50KDEpOwogICAgICBfMm4zID0gQmlnSW50KDIpOwogICAgICBfM24gPSBCaWdJbnQoMyk7CiAgICAgIF80biA9IEJpZ0ludCg0KTsKICAgICAgXzVuID0gQmlnSW50KDUpOwogICAgICBfOG4gPSBCaWdJbnQoOCk7CiAgICAgIF85biA9IEJpZ0ludCg5KTsKICAgICAgXzE2biA9IEJpZ0ludCgxNik7CiAgICAgIEZJRUxEX0ZJRUxEUyA9IFsKICAgICAgICAiY3JlYXRlIiwKICAgICAgICAiaXNWYWxpZCIsCiAgICAgICAgImlzMCIsCiAgICAgICAgIm5lZyIsCiAgICAgICAgImludiIsCiAgICAgICAgInNxcnQiLAogICAgICAgICJzcXIiLAogICAgICAgICJlcWwiLAogICAgICAgICJhZGQiLAogICAgICAgICJzdWIiLAogICAgICAgICJtdWwiLAogICAgICAgICJwb3ciLAogICAgICAgICJkaXYiLAogICAgICAgICJhZGROIiwKICAgICAgICAic3ViTiIsCiAgICAgICAgIm11bE4iLAogICAgICAgICJzcXJOIgogICAgICBdOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvY3VydmUuanMKICBmdW5jdGlvbiB3TkFGKGMsIGJpdHMpIHsKICAgIGNvbnN0IGNvbnN0VGltZU5lZ2F0ZSA9IChjb25kaXRpb24sIGl0ZW0pID0+IHsKICAgICAgY29uc3QgbmVnID0gaXRlbS5uZWdhdGUoKTsKICAgICAgcmV0dXJuIGNvbmRpdGlvbiA/IG5lZyA6IGl0ZW07CiAgICB9OwogICAgY29uc3Qgb3B0cyA9IChXKSA9PiB7CiAgICAgIGNvbnN0IHdpbmRvd3MgPSBNYXRoLmNlaWwoYml0cyAvIFcpICsgMTsKICAgICAgY29uc3Qgd2luZG93U2l6ZSA9IDIgKiogKFcgLSAxKTsKICAgICAgcmV0dXJuIHsgd2luZG93cywgd2luZG93U2l6ZSB9OwogICAgfTsKICAgIHJldHVybiB7CiAgICAgIGNvbnN0VGltZU5lZ2F0ZSwKICAgICAgLy8gbm9uLWNvbnN0IHRpbWUgbXVsdGlwbGljYXRpb24gbGFkZGVyCiAgICAgIHVuc2FmZUxhZGRlcihlbG0sIG4pIHsKICAgICAgICBsZXQgcCA9IGMuWkVSTzsKICAgICAgICBsZXQgZCA9IGVsbTsKICAgICAgICB3aGlsZSAobiA+IF8wbjQpIHsKICAgICAgICAgIGlmIChuICYgXzFuNCkKICAgICAgICAgICAgcCA9IHAuYWRkKGQpOwogICAgICAgICAgZCA9IGQuZG91YmxlKCk7CiAgICAgICAgICBuID4+PSBfMW40OwogICAgICAgIH0KICAgICAgICByZXR1cm4gcDsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgYSB3TkFGIHByZWNvbXB1dGF0aW9uIHdpbmRvdy4gVXNlZCBmb3IgY2FjaGluZy4KICAgICAgICogRGVmYXVsdCB3aW5kb3cgc2l6ZSBpcyBzZXQgYnkgYHV0aWxzLnByZWNvbXB1dGUoKWAgYW5kIGlzIGVxdWFsIHRvIDguCiAgICAgICAqIE51bWJlciBvZiBwcmVjb21wdXRlZCBwb2ludHMgZGVwZW5kcyBvbiB0aGUgY3VydmUgc2l6ZToKICAgICAgICogMl4o8J2RiuKIkjEpICogKE1hdGguY2VpbCjwnZGbIC8g8J2RiikgKyAxKSwgd2hlcmU6CiAgICAgICAqIC0g8J2RiiBpcyB0aGUgd2luZG93IHNpemUKICAgICAgICogLSDwnZGbIGlzIHRoZSBiaXRsZW5ndGggb2YgdGhlIGN1cnZlIG9yZGVyLgogICAgICAgKiBGb3IgYSAyNTYtYml0IGN1cnZlIGFuZCB3aW5kb3cgc2l6ZSA4LCB0aGUgbnVtYmVyIG9mIHByZWNvbXB1dGVkIHBvaW50cyBpcyAxMjggKiAzMyA9IDQyMjQuCiAgICAgICAqIEByZXR1cm5zIHByZWNvbXB1dGVkIHBvaW50IHRhYmxlcyBmbGF0dGVuZWQgdG8gYSBzaW5nbGUgYXJyYXkKICAgICAgICovCiAgICAgIHByZWNvbXB1dGVXaW5kb3coZWxtLCBXKSB7CiAgICAgICAgY29uc3QgeyB3aW5kb3dzLCB3aW5kb3dTaXplIH0gPSBvcHRzKFcpOwogICAgICAgIGNvbnN0IHBvaW50cyA9IFtdOwogICAgICAgIGxldCBwID0gZWxtOwogICAgICAgIGxldCBiYXNlMiA9IHA7CiAgICAgICAgZm9yIChsZXQgd2luZG93MiA9IDA7IHdpbmRvdzIgPCB3aW5kb3dzOyB3aW5kb3cyKyspIHsKICAgICAgICAgIGJhc2UyID0gcDsKICAgICAgICAgIHBvaW50cy5wdXNoKGJhc2UyKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgd2luZG93U2l6ZTsgaSsrKSB7CiAgICAgICAgICAgIGJhc2UyID0gYmFzZTIuYWRkKHApOwogICAgICAgICAgICBwb2ludHMucHVzaChiYXNlMik7CiAgICAgICAgICB9CiAgICAgICAgICBwID0gYmFzZTIuZG91YmxlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb2ludHM7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBJbXBsZW1lbnRzIGVjIG11bHRpcGxpY2F0aW9uIHVzaW5nIHByZWNvbXB1dGVkIHRhYmxlcyBhbmQgdy1hcnkgbm9uLWFkamFjZW50IGZvcm0uCiAgICAgICAqIEBwYXJhbSBXIHdpbmRvdyBzaXplCiAgICAgICAqIEBwYXJhbSBwcmVjb21wdXRlcyBwcmVjb21wdXRlZCB0YWJsZXMKICAgICAgICogQHBhcmFtIG4gc2NhbGFyICh3ZSBkb24ndCBjaGVjayBoZXJlLCBidXQgc2hvdWxkIGJlIGxlc3MgdGhhbiBjdXJ2ZSBvcmRlcikKICAgICAgICogQHJldHVybnMgcmVhbCBhbmQgZmFrZSAoZm9yIGNvbnN0LXRpbWUpIHBvaW50cwogICAgICAgKi8KICAgICAgd05BRihXLCBwcmVjb21wdXRlcywgbikgewogICAgICAgIGNvbnN0IHsgd2luZG93cywgd2luZG93U2l6ZSB9ID0gb3B0cyhXKTsKICAgICAgICBsZXQgcCA9IGMuWkVSTzsKICAgICAgICBsZXQgZjIgPSBjLkJBU0U7CiAgICAgICAgY29uc3QgbWFzayA9IEJpZ0ludCgyICoqIFcgLSAxKTsKICAgICAgICBjb25zdCBtYXhOdW1iZXIgPSAyICoqIFc7CiAgICAgICAgY29uc3Qgc2hpZnRCeSA9IEJpZ0ludChXKTsKICAgICAgICBmb3IgKGxldCB3aW5kb3cyID0gMDsgd2luZG93MiA8IHdpbmRvd3M7IHdpbmRvdzIrKykgewogICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gd2luZG93MiAqIHdpbmRvd1NpemU7CiAgICAgICAgICBsZXQgd2JpdHMgPSBOdW1iZXIobiAmIG1hc2spOwogICAgICAgICAgbiA+Pj0gc2hpZnRCeTsKICAgICAgICAgIGlmICh3Yml0cyA+IHdpbmRvd1NpemUpIHsKICAgICAgICAgICAgd2JpdHMgLT0gbWF4TnVtYmVyOwogICAgICAgICAgICBuICs9IF8xbjQ7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBvZmZzZXQxID0gb2Zmc2V0OwogICAgICAgICAgY29uc3Qgb2Zmc2V0MiA9IG9mZnNldCArIE1hdGguYWJzKHdiaXRzKSAtIDE7CiAgICAgICAgICBjb25zdCBjb25kMSA9IHdpbmRvdzIgJSAyICE9PSAwOwogICAgICAgICAgY29uc3QgY29uZDIgPSB3Yml0cyA8IDA7CiAgICAgICAgICBpZiAod2JpdHMgPT09IDApIHsKICAgICAgICAgICAgZjIgPSBmMi5hZGQoY29uc3RUaW1lTmVnYXRlKGNvbmQxLCBwcmVjb21wdXRlc1tvZmZzZXQxXSkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcCA9IHAuYWRkKGNvbnN0VGltZU5lZ2F0ZShjb25kMiwgcHJlY29tcHV0ZXNbb2Zmc2V0Ml0pKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgcCwgZjogZjIgfTsKICAgICAgfSwKICAgICAgd05BRkNhY2hlZChQLCBwcmVjb21wdXRlc01hcCwgbiwgdHJhbnNmb3JtKSB7CiAgICAgICAgY29uc3QgVyA9IFAuX1dJTkRPV19TSVpFIHx8IDE7CiAgICAgICAgbGV0IGNvbXAgPSBwcmVjb21wdXRlc01hcC5nZXQoUCk7CiAgICAgICAgaWYgKCFjb21wKSB7CiAgICAgICAgICBjb21wID0gdGhpcy5wcmVjb21wdXRlV2luZG93KFAsIFcpOwogICAgICAgICAgaWYgKFcgIT09IDEpIHsKICAgICAgICAgICAgcHJlY29tcHV0ZXNNYXAuc2V0KFAsIHRyYW5zZm9ybShjb21wKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLndOQUYoVywgY29tcCwgbik7CiAgICAgIH0KICAgIH07CiAgfQogIGZ1bmN0aW9uIHZhbGlkYXRlQmFzaWMoY3VydmUpIHsKICAgIHZhbGlkYXRlRmllbGQoY3VydmUuRnApOwogICAgdmFsaWRhdGVPYmplY3QoY3VydmUsIHsKICAgICAgbjogImJpZ2ludCIsCiAgICAgIGg6ICJiaWdpbnQiLAogICAgICBHeDogImZpZWxkIiwKICAgICAgR3k6ICJmaWVsZCIKICAgIH0sIHsKICAgICAgbkJpdExlbmd0aDogImlzU2FmZUludGVnZXIiLAogICAgICBuQnl0ZUxlbmd0aDogImlzU2FmZUludGVnZXIiCiAgICB9KTsKICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsKICAgICAgLi4ubkxlbmd0aChjdXJ2ZS5uLCBjdXJ2ZS5uQml0TGVuZ3RoKSwKICAgICAgLi4uY3VydmUsCiAgICAgIC4uLnsgcDogY3VydmUuRnAuT1JERVIgfQogICAgfSk7CiAgfQogIHZhciBfMG40LCBfMW40OwogIHZhciBpbml0X2N1cnZlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC9jdXJ2ZS5qcyIoKSB7CiAgICAgIGluaXRfbW9kdWxhcigpOwogICAgICBpbml0X3V0aWxzNCgpOwogICAgICBfMG40ID0gQmlnSW50KDApOwogICAgICBfMW40ID0gQmlnSW50KDEpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3Qvd2VpZXJzdHJhc3MuanMKICBmdW5jdGlvbiB2YWxpZGF0ZVBvaW50T3B0cyhjdXJ2ZSkgewogICAgY29uc3Qgb3B0cyA9IHZhbGlkYXRlQmFzaWMoY3VydmUpOwogICAgdmFsaWRhdGVPYmplY3Qob3B0cywgewogICAgICBhOiAiZmllbGQiLAogICAgICBiOiAiZmllbGQiCiAgICB9LCB7CiAgICAgIGFsbG93ZWRQcml2YXRlS2V5TGVuZ3RoczogImFycmF5IiwKICAgICAgd3JhcFByaXZhdGVLZXk6ICJib29sZWFuIiwKICAgICAgaXNUb3JzaW9uRnJlZTogImZ1bmN0aW9uIiwKICAgICAgY2xlYXJDb2ZhY3RvcjogImZ1bmN0aW9uIiwKICAgICAgYWxsb3dJbmZpbml0eVBvaW50OiAiYm9vbGVhbiIsCiAgICAgIGZyb21CeXRlczogImZ1bmN0aW9uIiwKICAgICAgdG9CeXRlczogImZ1bmN0aW9uIgogICAgfSk7CiAgICBjb25zdCB7IGVuZG8sIEZwOiBGcDIsIGEgfSA9IG9wdHM7CiAgICBpZiAoZW5kbykgewogICAgICBpZiAoIUZwMi5lcWwoYSwgRnAyLlpFUk8pKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFbmRvbW9ycGhpc20gY2FuIG9ubHkgYmUgZGVmaW5lZCBmb3IgS29ibGl0eiBjdXJ2ZXMgdGhhdCBoYXZlIGE9MCIpOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgZW5kbyAhPT0gIm9iamVjdCIgfHwgdHlwZW9mIGVuZG8uYmV0YSAhPT0gImJpZ2ludCIgfHwgdHlwZW9mIGVuZG8uc3BsaXRTY2FsYXIgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGVuZG9tb3JwaGlzbSB3aXRoIGJldGE6IGJpZ2ludCBhbmQgc3BsaXRTY2FsYXI6IGZ1bmN0aW9uIik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsgLi4ub3B0cyB9KTsKICB9CiAgZnVuY3Rpb24gd2VpZXJzdHJhc3NQb2ludHMob3B0cykgewogICAgY29uc3QgQ1VSVkUgPSB2YWxpZGF0ZVBvaW50T3B0cyhvcHRzKTsKICAgIGNvbnN0IHsgRnA6IEZwMiB9ID0gQ1VSVkU7CiAgICBjb25zdCB0b0J5dGVzMyA9IENVUlZFLnRvQnl0ZXMgfHwgKChfYywgcG9pbnQsIF9pc0NvbXByZXNzZWQpID0+IHsKICAgICAgY29uc3QgYSA9IHBvaW50LnRvQWZmaW5lKCk7CiAgICAgIHJldHVybiBjb25jYXRCeXRlczMoVWludDhBcnJheS5mcm9tKFs0XSksIEZwMi50b0J5dGVzKGEueCksIEZwMi50b0J5dGVzKGEueSkpOwogICAgfSk7CiAgICBjb25zdCBmcm9tQnl0ZXMyID0gQ1VSVkUuZnJvbUJ5dGVzIHx8ICgoYnl0ZXMyKSA9PiB7CiAgICAgIGNvbnN0IHRhaWwgPSBieXRlczIuc3ViYXJyYXkoMSk7CiAgICAgIGNvbnN0IHggPSBGcDIuZnJvbUJ5dGVzKHRhaWwuc3ViYXJyYXkoMCwgRnAyLkJZVEVTKSk7CiAgICAgIGNvbnN0IHkgPSBGcDIuZnJvbUJ5dGVzKHRhaWwuc3ViYXJyYXkoRnAyLkJZVEVTLCAyICogRnAyLkJZVEVTKSk7CiAgICAgIHJldHVybiB7IHgsIHkgfTsKICAgIH0pOwogICAgZnVuY3Rpb24gd2VpZXJzdHJhc3NFcXVhdGlvbih4KSB7CiAgICAgIGNvbnN0IHsgYSwgYiB9ID0gQ1VSVkU7CiAgICAgIGNvbnN0IHgyID0gRnAyLnNxcih4KTsKICAgICAgY29uc3QgeDMgPSBGcDIubXVsKHgyLCB4KTsKICAgICAgcmV0dXJuIEZwMi5hZGQoRnAyLmFkZCh4MywgRnAyLm11bCh4LCBhKSksIGIpOwogICAgfQogICAgaWYgKCFGcDIuZXFsKEZwMi5zcXIoQ1VSVkUuR3kpLCB3ZWllcnN0cmFzc0VxdWF0aW9uKENVUlZFLkd4KSkpCiAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIGdlbmVyYXRvciBwb2ludDogZXF1YXRpb24gbGVmdCAhPSByaWdodCIpOwogICAgZnVuY3Rpb24gaXNXaXRoaW5DdXJ2ZU9yZGVyKG51bSkgewogICAgICByZXR1cm4gdHlwZW9mIG51bSA9PT0gImJpZ2ludCIgJiYgXzBuNSA8IG51bSAmJiBudW0gPCBDVVJWRS5uOwogICAgfQogICAgZnVuY3Rpb24gYXNzZXJ0R0UobnVtKSB7CiAgICAgIGlmICghaXNXaXRoaW5DdXJ2ZU9yZGVyKG51bSkpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB2YWxpZCBiaWdpbnQ6IDAgPCBiaWdpbnQgPCBjdXJ2ZS5uIik7CiAgICB9CiAgICBmdW5jdGlvbiBub3JtUHJpdmF0ZUtleVRvU2NhbGFyKGtleSkgewogICAgICBjb25zdCB7IGFsbG93ZWRQcml2YXRlS2V5TGVuZ3RoczogbGVuZ3RocywgbkJ5dGVMZW5ndGgsIHdyYXBQcml2YXRlS2V5LCBuIH0gPSBDVVJWRTsKICAgICAgaWYgKGxlbmd0aHMgJiYgdHlwZW9mIGtleSAhPT0gImJpZ2ludCIpIHsKICAgICAgICBpZiAoaXNCeXRlczIoa2V5KSkKICAgICAgICAgIGtleSA9IGJ5dGVzVG9IZXgyKGtleSk7CiAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICJzdHJpbmciIHx8ICFsZW5ndGhzLmluY2x1ZGVzKGtleS5sZW5ndGgpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGtleSIpOwogICAgICAgIGtleSA9IGtleS5wYWRTdGFydChuQnl0ZUxlbmd0aCAqIDIsICIwIik7CiAgICAgIH0KICAgICAgbGV0IG51bTsKICAgICAgdHJ5IHsKICAgICAgICBudW0gPSB0eXBlb2Yga2V5ID09PSAiYmlnaW50IiA/IGtleSA6IGJ5dGVzVG9OdW1iZXJCRShlbnN1cmVCeXRlcygicHJpdmF0ZSBrZXkiLCBrZXksIG5CeXRlTGVuZ3RoKSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcml2YXRlIGtleSBtdXN0IGJlICR7bkJ5dGVMZW5ndGh9IGJ5dGVzLCBoZXggb3IgYmlnaW50LCBub3QgJHt0eXBlb2Yga2V5fWApOwogICAgICB9CiAgICAgIGlmICh3cmFwUHJpdmF0ZUtleSkKICAgICAgICBudW0gPSBtb2QobnVtLCBuKTsKICAgICAgYXNzZXJ0R0UobnVtKTsKICAgICAgcmV0dXJuIG51bTsKICAgIH0KICAgIGNvbnN0IHBvaW50UHJlY29tcHV0ZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgZnVuY3Rpb24gYXNzZXJ0UHJqUG9pbnQob3RoZXIpIHsKICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBQb2ludDIpKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiUHJvamVjdGl2ZVBvaW50IGV4cGVjdGVkIik7CiAgICB9CiAgICBjbGFzcyBQb2ludDIgewogICAgICBjb25zdHJ1Y3RvcihweCwgcHksIHB6KSB7CiAgICAgICAgdGhpcy5weCA9IHB4OwogICAgICAgIHRoaXMucHkgPSBweTsKICAgICAgICB0aGlzLnB6ID0gcHo7CiAgICAgICAgaWYgKHB4ID09IG51bGwgfHwgIUZwMi5pc1ZhbGlkKHB4KSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigieCByZXF1aXJlZCIpOwogICAgICAgIGlmIChweSA9PSBudWxsIHx8ICFGcDIuaXNWYWxpZChweSkpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInkgcmVxdWlyZWQiKTsKICAgICAgICBpZiAocHogPT0gbnVsbCB8fCAhRnAyLmlzVmFsaWQocHopKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ6IHJlcXVpcmVkIik7CiAgICAgIH0KICAgICAgLy8gRG9lcyBub3QgdmFsaWRhdGUgaWYgdGhlIHBvaW50IGlzIG9uLWN1cnZlLgogICAgICAvLyBVc2UgZnJvbUhleCBpbnN0ZWFkLCBvciBjYWxsIGFzc2VydFZhbGlkaXR5KCkgbGF0ZXIuCiAgICAgIHN0YXRpYyBmcm9tQWZmaW5lKHApIHsKICAgICAgICBjb25zdCB7IHgsIHkgfSA9IHAgfHwge307CiAgICAgICAgaWYgKCFwIHx8ICFGcDIuaXNWYWxpZCh4KSB8fCAhRnAyLmlzVmFsaWQoeSkpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYWZmaW5lIHBvaW50Iik7CiAgICAgICAgaWYgKHAgaW5zdGFuY2VvZiBQb2ludDIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInByb2plY3RpdmUgcG9pbnQgbm90IGFsbG93ZWQiKTsKICAgICAgICBjb25zdCBpczAgPSAoaSkgPT4gRnAyLmVxbChpLCBGcDIuWkVSTyk7CiAgICAgICAgaWYgKGlzMCh4KSAmJiBpczAoeSkpCiAgICAgICAgICByZXR1cm4gUG9pbnQyLlpFUk87CiAgICAgICAgcmV0dXJuIG5ldyBQb2ludDIoeCwgeSwgRnAyLk9ORSk7CiAgICAgIH0KICAgICAgZ2V0IHgoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudG9BZmZpbmUoKS54OwogICAgICB9CiAgICAgIGdldCB5KCkgewogICAgICAgIHJldHVybiB0aGlzLnRvQWZmaW5lKCkueTsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGFrZXMgYSBidW5jaCBvZiBQcm9qZWN0aXZlIFBvaW50cyBidXQgZXhlY3V0ZXMgb25seSBvbmUKICAgICAgICogaW52ZXJzaW9uIG9uIGFsbCBvZiB0aGVtLiBJbnZlcnNpb24gaXMgdmVyeSBzbG93IG9wZXJhdGlvbiwKICAgICAgICogc28gdGhpcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBtYXNzaXZlbHkuCiAgICAgICAqIE9wdGltaXphdGlvbjogY29udmVydHMgYSBsaXN0IG9mIHByb2plY3RpdmUgcG9pbnRzIHRvIGEgbGlzdCBvZiBpZGVudGljYWwgcG9pbnRzIHdpdGggWj0xLgogICAgICAgKi8KICAgICAgc3RhdGljIG5vcm1hbGl6ZVoocG9pbnRzKSB7CiAgICAgICAgY29uc3QgdG9JbnYgPSBGcDIuaW52ZXJ0QmF0Y2gocG9pbnRzLm1hcCgocCkgPT4gcC5weikpOwogICAgICAgIHJldHVybiBwb2ludHMubWFwKChwLCBpKSA9PiBwLnRvQWZmaW5lKHRvSW52W2ldKSkubWFwKFBvaW50Mi5mcm9tQWZmaW5lKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ29udmVydHMgaGFzaCBzdHJpbmcgb3IgVWludDhBcnJheSB0byBQb2ludC4KICAgICAgICogQHBhcmFtIGhleCBzaG9ydC9sb25nIEVDRFNBIGhleAogICAgICAgKi8KICAgICAgc3RhdGljIGZyb21IZXgoaGV4KSB7CiAgICAgICAgY29uc3QgUCA9IFBvaW50Mi5mcm9tQWZmaW5lKGZyb21CeXRlczIoZW5zdXJlQnl0ZXMoInBvaW50SGV4IiwgaGV4KSkpOwogICAgICAgIFAuYXNzZXJ0VmFsaWRpdHkoKTsKICAgICAgICByZXR1cm4gUDsKICAgICAgfQogICAgICAvLyBNdWx0aXBsaWVzIGdlbmVyYXRvciBwb2ludCBieSBwcml2YXRlS2V5LgogICAgICBzdGF0aWMgZnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleSkgewogICAgICAgIHJldHVybiBQb2ludDIuQkFTRS5tdWx0aXBseShub3JtUHJpdmF0ZUtleVRvU2NhbGFyKHByaXZhdGVLZXkpKTsKICAgICAgfQogICAgICAvLyAiUHJpdmF0ZSBtZXRob2QiLCBkb24ndCB1c2UgaXQgZGlyZWN0bHkKICAgICAgX3NldFdpbmRvd1NpemUod2luZG93U2l6ZSkgewogICAgICAgIHRoaXMuX1dJTkRPV19TSVpFID0gd2luZG93U2l6ZTsKICAgICAgICBwb2ludFByZWNvbXB1dGVzLmRlbGV0ZSh0aGlzKTsKICAgICAgfQogICAgICAvLyBBIHBvaW50IG9uIGN1cnZlIGlzIHZhbGlkIGlmIGl0IGNvbmZvcm1zIHRvIGVxdWF0aW9uLgogICAgICBhc3NlcnRWYWxpZGl0eSgpIHsKICAgICAgICBpZiAodGhpcy5pczAoKSkgewogICAgICAgICAgaWYgKENVUlZFLmFsbG93SW5maW5pdHlQb2ludCAmJiAhRnAyLmlzMCh0aGlzLnB5KSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IFpFUk8iKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLnRvQWZmaW5lKCk7CiAgICAgICAgaWYgKCFGcDIuaXNWYWxpZCh4KSB8fCAhRnAyLmlzVmFsaWQoeSkpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBwb2ludDogeCBvciB5IG5vdCBGRSIpOwogICAgICAgIGNvbnN0IGxlZnQgPSBGcDIuc3FyKHkpOwogICAgICAgIGNvbnN0IHJpZ2h0ID0gd2VpZXJzdHJhc3NFcXVhdGlvbih4KTsKICAgICAgICBpZiAoIUZwMi5lcWwobGVmdCwgcmlnaHQpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IGVxdWF0aW9uIGxlZnQgIT0gcmlnaHQiKTsKICAgICAgICBpZiAoIXRoaXMuaXNUb3JzaW9uRnJlZSgpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IG5vdCBpbiBwcmltZS1vcmRlciBzdWJncm91cCIpOwogICAgICB9CiAgICAgIGhhc0V2ZW5ZKCkgewogICAgICAgIGNvbnN0IHsgeSB9ID0gdGhpcy50b0FmZmluZSgpOwogICAgICAgIGlmIChGcDIuaXNPZGQpCiAgICAgICAgICByZXR1cm4gIUZwMi5pc09kZCh5KTsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkZpZWxkIGRvZXNuJ3Qgc3VwcG9ydCBpc09kZCIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDb21wYXJlIG9uZSBwb2ludCB0byBhbm90aGVyLgogICAgICAgKi8KICAgICAgZXF1YWxzKG90aGVyKSB7CiAgICAgICAgYXNzZXJ0UHJqUG9pbnQob3RoZXIpOwogICAgICAgIGNvbnN0IHsgcHg6IFgxLCBweTogWTEsIHB6OiBaMSB9ID0gdGhpczsKICAgICAgICBjb25zdCB7IHB4OiBYMiwgcHk6IFkyLCBwejogWjIgfSA9IG90aGVyOwogICAgICAgIGNvbnN0IFUxID0gRnAyLmVxbChGcDIubXVsKFgxLCBaMiksIEZwMi5tdWwoWDIsIFoxKSk7CiAgICAgICAgY29uc3QgVTIgPSBGcDIuZXFsKEZwMi5tdWwoWTEsIFoyKSwgRnAyLm11bChZMiwgWjEpKTsKICAgICAgICByZXR1cm4gVTEgJiYgVTI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZsaXBzIHBvaW50IHRvIG9uZSBjb3JyZXNwb25kaW5nIHRvICh4LCAteSkgaW4gQWZmaW5lIGNvb3JkaW5hdGVzLgogICAgICAgKi8KICAgICAgbmVnYXRlKCkgewogICAgICAgIHJldHVybiBuZXcgUG9pbnQyKHRoaXMucHgsIEZwMi5uZWcodGhpcy5weSksIHRoaXMucHopOwogICAgICB9CiAgICAgIC8vIFJlbmVzLUNvc3RlbGxvLUJhdGluYSBleGNlcHRpb24tZnJlZSBkb3VibGluZyBmb3JtdWxhLgogICAgICAvLyBUaGVyZSBpcyAzMCUgZmFzdGVyIEphY29iaWFuIGZvcm11bGEsIGJ1dCBpdCBpcyBub3QgY29tcGxldGUuCiAgICAgIC8vIGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMTUvMTA2MCwgYWxnb3JpdGhtIDMKICAgICAgLy8gQ29zdDogOE0gKyAzUyArIDMqYSArIDIqYjMgKyAxNWFkZC4KICAgICAgZG91YmxlKCkgewogICAgICAgIGNvbnN0IHsgYSwgYiB9ID0gQ1VSVkU7CiAgICAgICAgY29uc3QgYjMyID0gRnAyLm11bChiLCBfM24yKTsKICAgICAgICBjb25zdCB7IHB4OiBYMSwgcHk6IFkxLCBwejogWjEgfSA9IHRoaXM7CiAgICAgICAgbGV0IFgzID0gRnAyLlpFUk8sIFkzID0gRnAyLlpFUk8sIFozID0gRnAyLlpFUk87CiAgICAgICAgbGV0IHQwID0gRnAyLm11bChYMSwgWDEpOwogICAgICAgIGxldCB0MSA9IEZwMi5tdWwoWTEsIFkxKTsKICAgICAgICBsZXQgdDIgPSBGcDIubXVsKFoxLCBaMSk7CiAgICAgICAgbGV0IHQzID0gRnAyLm11bChYMSwgWTEpOwogICAgICAgIHQzID0gRnAyLmFkZCh0MywgdDMpOwogICAgICAgIFozID0gRnAyLm11bChYMSwgWjEpOwogICAgICAgIFozID0gRnAyLmFkZChaMywgWjMpOwogICAgICAgIFgzID0gRnAyLm11bChhLCBaMyk7CiAgICAgICAgWTMgPSBGcDIubXVsKGIzMiwgdDIpOwogICAgICAgIFkzID0gRnAyLmFkZChYMywgWTMpOwogICAgICAgIFgzID0gRnAyLnN1Yih0MSwgWTMpOwogICAgICAgIFkzID0gRnAyLmFkZCh0MSwgWTMpOwogICAgICAgIFkzID0gRnAyLm11bChYMywgWTMpOwogICAgICAgIFgzID0gRnAyLm11bCh0MywgWDMpOwogICAgICAgIFozID0gRnAyLm11bChiMzIsIFozKTsKICAgICAgICB0MiA9IEZwMi5tdWwoYSwgdDIpOwogICAgICAgIHQzID0gRnAyLnN1Yih0MCwgdDIpOwogICAgICAgIHQzID0gRnAyLm11bChhLCB0Myk7CiAgICAgICAgdDMgPSBGcDIuYWRkKHQzLCBaMyk7CiAgICAgICAgWjMgPSBGcDIuYWRkKHQwLCB0MCk7CiAgICAgICAgdDAgPSBGcDIuYWRkKFozLCB0MCk7CiAgICAgICAgdDAgPSBGcDIuYWRkKHQwLCB0Mik7CiAgICAgICAgdDAgPSBGcDIubXVsKHQwLCB0Myk7CiAgICAgICAgWTMgPSBGcDIuYWRkKFkzLCB0MCk7CiAgICAgICAgdDIgPSBGcDIubXVsKFkxLCBaMSk7CiAgICAgICAgdDIgPSBGcDIuYWRkKHQyLCB0Mik7CiAgICAgICAgdDAgPSBGcDIubXVsKHQyLCB0Myk7CiAgICAgICAgWDMgPSBGcDIuc3ViKFgzLCB0MCk7CiAgICAgICAgWjMgPSBGcDIubXVsKHQyLCB0MSk7CiAgICAgICAgWjMgPSBGcDIuYWRkKFozLCBaMyk7CiAgICAgICAgWjMgPSBGcDIuYWRkKFozLCBaMyk7CiAgICAgICAgcmV0dXJuIG5ldyBQb2ludDIoWDMsIFkzLCBaMyk7CiAgICAgIH0KICAgICAgLy8gUmVuZXMtQ29zdGVsbG8tQmF0aW5hIGV4Y2VwdGlvbi1mcmVlIGFkZGl0aW9uIGZvcm11bGEuCiAgICAgIC8vIFRoZXJlIGlzIDMwJSBmYXN0ZXIgSmFjb2JpYW4gZm9ybXVsYSwgYnV0IGl0IGlzIG5vdCBjb21wbGV0ZS4KICAgICAgLy8gaHR0cHM6Ly9lcHJpbnQuaWFjci5vcmcvMjAxNS8xMDYwLCBhbGdvcml0aG0gMQogICAgICAvLyBDb3N0OiAxMk0gKyAwUyArIDMqYSArIDMqYjMgKyAyM2FkZC4KICAgICAgYWRkKG90aGVyKSB7CiAgICAgICAgYXNzZXJ0UHJqUG9pbnQob3RoZXIpOwogICAgICAgIGNvbnN0IHsgcHg6IFgxLCBweTogWTEsIHB6OiBaMSB9ID0gdGhpczsKICAgICAgICBjb25zdCB7IHB4OiBYMiwgcHk6IFkyLCBwejogWjIgfSA9IG90aGVyOwogICAgICAgIGxldCBYMyA9IEZwMi5aRVJPLCBZMyA9IEZwMi5aRVJPLCBaMyA9IEZwMi5aRVJPOwogICAgICAgIGNvbnN0IGEgPSBDVVJWRS5hOwogICAgICAgIGNvbnN0IGIzMiA9IEZwMi5tdWwoQ1VSVkUuYiwgXzNuMik7CiAgICAgICAgbGV0IHQwID0gRnAyLm11bChYMSwgWDIpOwogICAgICAgIGxldCB0MSA9IEZwMi5tdWwoWTEsIFkyKTsKICAgICAgICBsZXQgdDIgPSBGcDIubXVsKFoxLCBaMik7CiAgICAgICAgbGV0IHQzID0gRnAyLmFkZChYMSwgWTEpOwogICAgICAgIGxldCB0NCA9IEZwMi5hZGQoWDIsIFkyKTsKICAgICAgICB0MyA9IEZwMi5tdWwodDMsIHQ0KTsKICAgICAgICB0NCA9IEZwMi5hZGQodDAsIHQxKTsKICAgICAgICB0MyA9IEZwMi5zdWIodDMsIHQ0KTsKICAgICAgICB0NCA9IEZwMi5hZGQoWDEsIFoxKTsKICAgICAgICBsZXQgdDUgPSBGcDIuYWRkKFgyLCBaMik7CiAgICAgICAgdDQgPSBGcDIubXVsKHQ0LCB0NSk7CiAgICAgICAgdDUgPSBGcDIuYWRkKHQwLCB0Mik7CiAgICAgICAgdDQgPSBGcDIuc3ViKHQ0LCB0NSk7CiAgICAgICAgdDUgPSBGcDIuYWRkKFkxLCBaMSk7CiAgICAgICAgWDMgPSBGcDIuYWRkKFkyLCBaMik7CiAgICAgICAgdDUgPSBGcDIubXVsKHQ1LCBYMyk7CiAgICAgICAgWDMgPSBGcDIuYWRkKHQxLCB0Mik7CiAgICAgICAgdDUgPSBGcDIuc3ViKHQ1LCBYMyk7CiAgICAgICAgWjMgPSBGcDIubXVsKGEsIHQ0KTsKICAgICAgICBYMyA9IEZwMi5tdWwoYjMyLCB0Mik7CiAgICAgICAgWjMgPSBGcDIuYWRkKFgzLCBaMyk7CiAgICAgICAgWDMgPSBGcDIuc3ViKHQxLCBaMyk7CiAgICAgICAgWjMgPSBGcDIuYWRkKHQxLCBaMyk7CiAgICAgICAgWTMgPSBGcDIubXVsKFgzLCBaMyk7CiAgICAgICAgdDEgPSBGcDIuYWRkKHQwLCB0MCk7CiAgICAgICAgdDEgPSBGcDIuYWRkKHQxLCB0MCk7CiAgICAgICAgdDIgPSBGcDIubXVsKGEsIHQyKTsKICAgICAgICB0NCA9IEZwMi5tdWwoYjMyLCB0NCk7CiAgICAgICAgdDEgPSBGcDIuYWRkKHQxLCB0Mik7CiAgICAgICAgdDIgPSBGcDIuc3ViKHQwLCB0Mik7CiAgICAgICAgdDIgPSBGcDIubXVsKGEsIHQyKTsKICAgICAgICB0NCA9IEZwMi5hZGQodDQsIHQyKTsKICAgICAgICB0MCA9IEZwMi5tdWwodDEsIHQ0KTsKICAgICAgICBZMyA9IEZwMi5hZGQoWTMsIHQwKTsKICAgICAgICB0MCA9IEZwMi5tdWwodDUsIHQ0KTsKICAgICAgICBYMyA9IEZwMi5tdWwodDMsIFgzKTsKICAgICAgICBYMyA9IEZwMi5zdWIoWDMsIHQwKTsKICAgICAgICB0MCA9IEZwMi5tdWwodDMsIHQxKTsKICAgICAgICBaMyA9IEZwMi5tdWwodDUsIFozKTsKICAgICAgICBaMyA9IEZwMi5hZGQoWjMsIHQwKTsKICAgICAgICByZXR1cm4gbmV3IFBvaW50MihYMywgWTMsIFozKTsKICAgICAgfQogICAgICBzdWJ0cmFjdChvdGhlcikgewogICAgICAgIHJldHVybiB0aGlzLmFkZChvdGhlci5uZWdhdGUoKSk7CiAgICAgIH0KICAgICAgaXMwKCkgewogICAgICAgIHJldHVybiB0aGlzLmVxdWFscyhQb2ludDIuWkVSTyk7CiAgICAgIH0KICAgICAgd05BRihuKSB7CiAgICAgICAgcmV0dXJuIHduYWYud05BRkNhY2hlZCh0aGlzLCBwb2ludFByZWNvbXB1dGVzLCBuLCAoY29tcCkgPT4gewogICAgICAgICAgY29uc3QgdG9JbnYgPSBGcDIuaW52ZXJ0QmF0Y2goY29tcC5tYXAoKHApID0+IHAucHopKTsKICAgICAgICAgIHJldHVybiBjb21wLm1hcCgocCwgaSkgPT4gcC50b0FmZmluZSh0b0ludltpXSkpLm1hcChQb2ludDIuZnJvbUFmZmluZSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIE5vbi1jb25zdGFudC10aW1lIG11bHRpcGxpY2F0aW9uLiBVc2VzIGRvdWJsZS1hbmQtYWRkIGFsZ29yaXRobS4KICAgICAgICogSXQncyBmYXN0ZXIsIGJ1dCBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4geW91IGRvbid0IGNhcmUgYWJvdXQKICAgICAgICogYW4gZXhwb3NlZCBwcml2YXRlIGtleSBlLmcuIHNpZyB2ZXJpZmljYXRpb24sIHdoaWNoIHdvcmtzIG92ZXIgKnB1YmxpYyoga2V5cy4KICAgICAgICovCiAgICAgIG11bHRpcGx5VW5zYWZlKG4pIHsKICAgICAgICBjb25zdCBJID0gUG9pbnQyLlpFUk87CiAgICAgICAgaWYgKG4gPT09IF8wbjUpCiAgICAgICAgICByZXR1cm4gSTsKICAgICAgICBhc3NlcnRHRShuKTsKICAgICAgICBpZiAobiA9PT0gXzFuNSkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIGNvbnN0IHsgZW5kbyB9ID0gQ1VSVkU7CiAgICAgICAgaWYgKCFlbmRvKQogICAgICAgICAgcmV0dXJuIHduYWYudW5zYWZlTGFkZGVyKHRoaXMsIG4pOwogICAgICAgIGxldCB7IGsxbmVnLCBrMSwgazJuZWcsIGsyIH0gPSBlbmRvLnNwbGl0U2NhbGFyKG4pOwogICAgICAgIGxldCBrMXAgPSBJOwogICAgICAgIGxldCBrMnAgPSBJOwogICAgICAgIGxldCBkID0gdGhpczsKICAgICAgICB3aGlsZSAoazEgPiBfMG41IHx8IGsyID4gXzBuNSkgewogICAgICAgICAgaWYgKGsxICYgXzFuNSkKICAgICAgICAgICAgazFwID0gazFwLmFkZChkKTsKICAgICAgICAgIGlmIChrMiAmIF8xbjUpCiAgICAgICAgICAgIGsycCA9IGsycC5hZGQoZCk7CiAgICAgICAgICBkID0gZC5kb3VibGUoKTsKICAgICAgICAgIGsxID4+PSBfMW41OwogICAgICAgICAgazIgPj49IF8xbjU7CiAgICAgICAgfQogICAgICAgIGlmIChrMW5lZykKICAgICAgICAgIGsxcCA9IGsxcC5uZWdhdGUoKTsKICAgICAgICBpZiAoazJuZWcpCiAgICAgICAgICBrMnAgPSBrMnAubmVnYXRlKCk7CiAgICAgICAgazJwID0gbmV3IFBvaW50MihGcDIubXVsKGsycC5weCwgZW5kby5iZXRhKSwgazJwLnB5LCBrMnAucHopOwogICAgICAgIHJldHVybiBrMXAuYWRkKGsycCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENvbnN0YW50IHRpbWUgbXVsdGlwbGljYXRpb24uCiAgICAgICAqIFVzZXMgd05BRiBtZXRob2QuIFdpbmRvd2VkIG1ldGhvZCBtYXkgYmUgMTAlIGZhc3RlciwKICAgICAgICogYnV0IHRha2VzIDJ4IGxvbmdlciB0byBnZW5lcmF0ZSBhbmQgY29uc3VtZXMgMnggbWVtb3J5LgogICAgICAgKiBVc2VzIHByZWNvbXB1dGVzIHdoZW4gYXZhaWxhYmxlLgogICAgICAgKiBVc2VzIGVuZG9tb3JwaGlzbSBmb3IgS29ibGl0eiBjdXJ2ZXMuCiAgICAgICAqIEBwYXJhbSBzY2FsYXIgYnkgd2hpY2ggdGhlIHBvaW50IHdvdWxkIGJlIG11bHRpcGxpZWQKICAgICAgICogQHJldHVybnMgTmV3IHBvaW50CiAgICAgICAqLwogICAgICBtdWx0aXBseShzY2FsYXIpIHsKICAgICAgICBhc3NlcnRHRShzY2FsYXIpOwogICAgICAgIGxldCBuID0gc2NhbGFyOwogICAgICAgIGxldCBwb2ludCwgZmFrZTsKICAgICAgICBjb25zdCB7IGVuZG8gfSA9IENVUlZFOwogICAgICAgIGlmIChlbmRvKSB7CiAgICAgICAgICBjb25zdCB7IGsxbmVnLCBrMSwgazJuZWcsIGsyIH0gPSBlbmRvLnNwbGl0U2NhbGFyKG4pOwogICAgICAgICAgbGV0IHsgcDogazFwLCBmOiBmMXAgfSA9IHRoaXMud05BRihrMSk7CiAgICAgICAgICBsZXQgeyBwOiBrMnAsIGY6IGYycCB9ID0gdGhpcy53TkFGKGsyKTsKICAgICAgICAgIGsxcCA9IHduYWYuY29uc3RUaW1lTmVnYXRlKGsxbmVnLCBrMXApOwogICAgICAgICAgazJwID0gd25hZi5jb25zdFRpbWVOZWdhdGUoazJuZWcsIGsycCk7CiAgICAgICAgICBrMnAgPSBuZXcgUG9pbnQyKEZwMi5tdWwoazJwLnB4LCBlbmRvLmJldGEpLCBrMnAucHksIGsycC5weik7CiAgICAgICAgICBwb2ludCA9IGsxcC5hZGQoazJwKTsKICAgICAgICAgIGZha2UgPSBmMXAuYWRkKGYycCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHsgcCwgZjogZjIgfSA9IHRoaXMud05BRihuKTsKICAgICAgICAgIHBvaW50ID0gcDsKICAgICAgICAgIGZha2UgPSBmMjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBvaW50Mi5ub3JtYWxpemVaKFtwb2ludCwgZmFrZV0pWzBdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBFZmZpY2llbnRseSBjYWxjdWxhdGUgYGFQICsgYlFgLiBVbnNhZmUsIGNhbiBleHBvc2UgcHJpdmF0ZSBrZXksIGlmIHVzZWQgaW5jb3JyZWN0bHkuCiAgICAgICAqIE5vdCB1c2luZyBTdHJhdXNzLVNoYW1pciB0cmljazogcHJlY29tcHV0YXRpb24gdGFibGVzIGFyZSBmYXN0ZXIuCiAgICAgICAqIFRoZSB0cmljayBjb3VsZCBiZSB1c2VmdWwgaWYgYm90aCBQIGFuZCBRIGFyZSBub3QgRyAobm90IGluIG91ciBjYXNlKS4KICAgICAgICogQHJldHVybnMgbm9uLXplcm8gYWZmaW5lIHBvaW50CiAgICAgICAqLwogICAgICBtdWx0aXBseUFuZEFkZFVuc2FmZShRLCBhLCBiKSB7CiAgICAgICAgY29uc3QgRyA9IFBvaW50Mi5CQVNFOwogICAgICAgIGNvbnN0IG11bCA9IChQLCBhMikgPT4gYTIgPT09IF8wbjUgfHwgYTIgPT09IF8xbjUgfHwgIVAuZXF1YWxzKEcpID8gUC5tdWx0aXBseVVuc2FmZShhMikgOiBQLm11bHRpcGx5KGEyKTsKICAgICAgICBjb25zdCBzdW0gPSBtdWwodGhpcywgYSkuYWRkKG11bChRLCBiKSk7CiAgICAgICAgcmV0dXJuIHN1bS5pczAoKSA/IHZvaWQgMCA6IHN1bTsKICAgICAgfQogICAgICAvLyBDb252ZXJ0cyBQcm9qZWN0aXZlIHBvaW50IHRvIGFmZmluZSAoeCwgeSkgY29vcmRpbmF0ZXMuCiAgICAgIC8vIENhbiBhY2NlcHQgcHJlY29tcHV0ZWQgWl4tMSAtIGZvciBleGFtcGxlLCBmcm9tIGludmVydEJhdGNoLgogICAgICAvLyAoeCwgeSwgeikg4oiLICh4PXgveiwgeT15L3opCiAgICAgIHRvQWZmaW5lKGl6KSB7CiAgICAgICAgY29uc3QgeyBweDogeCwgcHk6IHksIHB6OiB6IH0gPSB0aGlzOwogICAgICAgIGNvbnN0IGlzMCA9IHRoaXMuaXMwKCk7CiAgICAgICAgaWYgKGl6ID09IG51bGwpCiAgICAgICAgICBpeiA9IGlzMCA/IEZwMi5PTkUgOiBGcDIuaW52KHopOwogICAgICAgIGNvbnN0IGF4ID0gRnAyLm11bCh4LCBpeik7CiAgICAgICAgY29uc3QgYXkgPSBGcDIubXVsKHksIGl6KTsKICAgICAgICBjb25zdCB6eiA9IEZwMi5tdWwoeiwgaXopOwogICAgICAgIGlmIChpczApCiAgICAgICAgICByZXR1cm4geyB4OiBGcDIuWkVSTywgeTogRnAyLlpFUk8gfTsKICAgICAgICBpZiAoIUZwMi5lcWwoenosIEZwMi5PTkUpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZaIHdhcyBpbnZhbGlkIik7CiAgICAgICAgcmV0dXJuIHsgeDogYXgsIHk6IGF5IH07CiAgICAgIH0KICAgICAgaXNUb3JzaW9uRnJlZSgpIHsKICAgICAgICBjb25zdCB7IGg6IGNvZmFjdG9yLCBpc1RvcnNpb25GcmVlIH0gPSBDVVJWRTsKICAgICAgICBpZiAoY29mYWN0b3IgPT09IF8xbjUpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoaXNUb3JzaW9uRnJlZSkKICAgICAgICAgIHJldHVybiBpc1RvcnNpb25GcmVlKFBvaW50MiwgdGhpcyk7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpc1RvcnNpb25GcmVlKCkgaGFzIG5vdCBiZWVuIGRlY2xhcmVkIGZvciB0aGUgZWxsaXB0aWMgY3VydmUiKTsKICAgICAgfQogICAgICBjbGVhckNvZmFjdG9yKCkgewogICAgICAgIGNvbnN0IHsgaDogY29mYWN0b3IsIGNsZWFyQ29mYWN0b3IgfSA9IENVUlZFOwogICAgICAgIGlmIChjb2ZhY3RvciA9PT0gXzFuNSkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIGlmIChjbGVhckNvZmFjdG9yKQogICAgICAgICAgcmV0dXJuIGNsZWFyQ29mYWN0b3IoUG9pbnQyLCB0aGlzKTsKICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBseVVuc2FmZShDVVJWRS5oKTsKICAgICAgfQogICAgICB0b1Jhd0J5dGVzKGlzQ29tcHJlc3NlZCA9IHRydWUpIHsKICAgICAgICB0aGlzLmFzc2VydFZhbGlkaXR5KCk7CiAgICAgICAgcmV0dXJuIHRvQnl0ZXMzKFBvaW50MiwgdGhpcywgaXNDb21wcmVzc2VkKTsKICAgICAgfQogICAgICB0b0hleChpc0NvbXByZXNzZWQgPSB0cnVlKSB7CiAgICAgICAgcmV0dXJuIGJ5dGVzVG9IZXgyKHRoaXMudG9SYXdCeXRlcyhpc0NvbXByZXNzZWQpKTsKICAgICAgfQogICAgfQogICAgUG9pbnQyLkJBU0UgPSBuZXcgUG9pbnQyKENVUlZFLkd4LCBDVVJWRS5HeSwgRnAyLk9ORSk7CiAgICBQb2ludDIuWkVSTyA9IG5ldyBQb2ludDIoRnAyLlpFUk8sIEZwMi5PTkUsIEZwMi5aRVJPKTsKICAgIGNvbnN0IF9iaXRzID0gQ1VSVkUubkJpdExlbmd0aDsKICAgIGNvbnN0IHduYWYgPSB3TkFGKFBvaW50MiwgQ1VSVkUuZW5kbyA/IE1hdGguY2VpbChfYml0cyAvIDIpIDogX2JpdHMpOwogICAgcmV0dXJuIHsKICAgICAgQ1VSVkUsCiAgICAgIFByb2plY3RpdmVQb2ludDogUG9pbnQyLAogICAgICBub3JtUHJpdmF0ZUtleVRvU2NhbGFyLAogICAgICB3ZWllcnN0cmFzc0VxdWF0aW9uLAogICAgICBpc1dpdGhpbkN1cnZlT3JkZXIKICAgIH07CiAgfQogIGZ1bmN0aW9uIHZhbGlkYXRlT3B0cyhjdXJ2ZSkgewogICAgY29uc3Qgb3B0cyA9IHZhbGlkYXRlQmFzaWMoY3VydmUpOwogICAgdmFsaWRhdGVPYmplY3Qob3B0cywgewogICAgICBoYXNoOiAiaGFzaCIsCiAgICAgIGhtYWM6ICJmdW5jdGlvbiIsCiAgICAgIHJhbmRvbUJ5dGVzOiAiZnVuY3Rpb24iCiAgICB9LCB7CiAgICAgIGJpdHMyaW50OiAiZnVuY3Rpb24iLAogICAgICBiaXRzMmludF9tb2ROOiAiZnVuY3Rpb24iLAogICAgICBsb3dTOiAiYm9vbGVhbiIKICAgIH0pOwogICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyBsb3dTOiB0cnVlLCAuLi5vcHRzIH0pOwogIH0KICBmdW5jdGlvbiB3ZWllcnN0cmFzcyhjdXJ2ZURlZikgewogICAgY29uc3QgQ1VSVkUgPSB2YWxpZGF0ZU9wdHMoY3VydmVEZWYpOwogICAgY29uc3QgeyBGcDogRnAyLCBuOiBDVVJWRV9PUkRFUiB9ID0gQ1VSVkU7CiAgICBjb25zdCBjb21wcmVzc2VkTGVuID0gRnAyLkJZVEVTICsgMTsKICAgIGNvbnN0IHVuY29tcHJlc3NlZExlbiA9IDIgKiBGcDIuQllURVMgKyAxOwogICAgZnVuY3Rpb24gaXNWYWxpZEZpZWxkRWxlbWVudChudW0pIHsKICAgICAgcmV0dXJuIF8wbjUgPCBudW0gJiYgbnVtIDwgRnAyLk9SREVSOwogICAgfQogICAgZnVuY3Rpb24gbW9kTjIoYSkgewogICAgICByZXR1cm4gbW9kKGEsIENVUlZFX09SREVSKTsKICAgIH0KICAgIGZ1bmN0aW9uIGludk4oYSkgewogICAgICByZXR1cm4gaW52ZXJ0KGEsIENVUlZFX09SREVSKTsKICAgIH0KICAgIGNvbnN0IHsgUHJvamVjdGl2ZVBvaW50OiBQb2ludDIsIG5vcm1Qcml2YXRlS2V5VG9TY2FsYXIsIHdlaWVyc3RyYXNzRXF1YXRpb24sIGlzV2l0aGluQ3VydmVPcmRlciB9ID0gd2VpZXJzdHJhc3NQb2ludHMoewogICAgICAuLi5DVVJWRSwKICAgICAgdG9CeXRlcyhfYywgcG9pbnQsIGlzQ29tcHJlc3NlZCkgewogICAgICAgIGNvbnN0IGEgPSBwb2ludC50b0FmZmluZSgpOwogICAgICAgIGNvbnN0IHggPSBGcDIudG9CeXRlcyhhLngpOwogICAgICAgIGNvbnN0IGNhdCA9IGNvbmNhdEJ5dGVzMzsKICAgICAgICBpZiAoaXNDb21wcmVzc2VkKSB7CiAgICAgICAgICByZXR1cm4gY2F0KFVpbnQ4QXJyYXkuZnJvbShbcG9pbnQuaGFzRXZlblkoKSA/IDIgOiAzXSksIHgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gY2F0KFVpbnQ4QXJyYXkuZnJvbShbNF0pLCB4LCBGcDIudG9CeXRlcyhhLnkpKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGZyb21CeXRlcyhieXRlczIpIHsKICAgICAgICBjb25zdCBsZW4gPSBieXRlczIubGVuZ3RoOwogICAgICAgIGNvbnN0IGhlYWQgPSBieXRlczJbMF07CiAgICAgICAgY29uc3QgdGFpbCA9IGJ5dGVzMi5zdWJhcnJheSgxKTsKICAgICAgICBpZiAobGVuID09PSBjb21wcmVzc2VkTGVuICYmIChoZWFkID09PSAyIHx8IGhlYWQgPT09IDMpKSB7CiAgICAgICAgICBjb25zdCB4ID0gYnl0ZXNUb051bWJlckJFKHRhaWwpOwogICAgICAgICAgaWYgKCFpc1ZhbGlkRmllbGRFbGVtZW50KHgpKQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlBvaW50IGlzIG5vdCBvbiBjdXJ2ZSIpOwogICAgICAgICAgY29uc3QgeTIgPSB3ZWllcnN0cmFzc0VxdWF0aW9uKHgpOwogICAgICAgICAgbGV0IHk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB5ID0gRnAyLnNxcnQoeTIpOwogICAgICAgICAgfSBjYXRjaCAoc3FydEVycm9yKSB7CiAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IHNxcnRFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gIjogIiArIHNxcnRFcnJvci5tZXNzYWdlIDogIiI7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiUG9pbnQgaXMgbm90IG9uIGN1cnZlIiArIHN1ZmZpeCk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBpc1lPZGQgPSAoeSAmIF8xbjUpID09PSBfMW41OwogICAgICAgICAgY29uc3QgaXNIZWFkT2RkID0gKGhlYWQgJiAxKSA9PT0gMTsKICAgICAgICAgIGlmIChpc0hlYWRPZGQgIT09IGlzWU9kZCkKICAgICAgICAgICAgeSA9IEZwMi5uZWcoeSk7CiAgICAgICAgICByZXR1cm4geyB4LCB5IH07CiAgICAgICAgfSBlbHNlIGlmIChsZW4gPT09IHVuY29tcHJlc3NlZExlbiAmJiBoZWFkID09PSA0KSB7CiAgICAgICAgICBjb25zdCB4ID0gRnAyLmZyb21CeXRlcyh0YWlsLnN1YmFycmF5KDAsIEZwMi5CWVRFUykpOwogICAgICAgICAgY29uc3QgeSA9IEZwMi5mcm9tQnl0ZXModGFpbC5zdWJhcnJheShGcDIuQllURVMsIDIgKiBGcDIuQllURVMpKTsKICAgICAgICAgIHJldHVybiB7IHgsIHkgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb2ludCBvZiBsZW5ndGggJHtsZW59IHdhcyBpbnZhbGlkLiBFeHBlY3RlZCAke2NvbXByZXNzZWRMZW59IGNvbXByZXNzZWQgYnl0ZXMgb3IgJHt1bmNvbXByZXNzZWRMZW59IHVuY29tcHJlc3NlZCBieXRlc2ApOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBjb25zdCBudW1Ub05CeXRlU3RyID0gKG51bSkgPT4gYnl0ZXNUb0hleDIobnVtYmVyVG9CeXRlc0JFKG51bSwgQ1VSVkUubkJ5dGVMZW5ndGgpKTsKICAgIGZ1bmN0aW9uIGlzQmlnZ2VyVGhhbkhhbGZPcmRlcihudW1iZXIyKSB7CiAgICAgIGNvbnN0IEhBTEYgPSBDVVJWRV9PUkRFUiA+PiBfMW41OwogICAgICByZXR1cm4gbnVtYmVyMiA+IEhBTEY7CiAgICB9CiAgICBmdW5jdGlvbiBub3JtYWxpemVTKHMpIHsKICAgICAgcmV0dXJuIGlzQmlnZ2VyVGhhbkhhbGZPcmRlcihzKSA/IG1vZE4yKC1zKSA6IHM7CiAgICB9CiAgICBjb25zdCBzbGNOdW0gPSAoYiwgZnJvbSwgdG8pID0+IGJ5dGVzVG9OdW1iZXJCRShiLnNsaWNlKGZyb20sIHRvKSk7CiAgICBjbGFzcyBTaWduYXR1cmUgewogICAgICBjb25zdHJ1Y3RvcihyLCBzLCByZWNvdmVyeSkgewogICAgICAgIHRoaXMuciA9IHI7CiAgICAgICAgdGhpcy5zID0gczsKICAgICAgICB0aGlzLnJlY292ZXJ5ID0gcmVjb3Zlcnk7CiAgICAgICAgdGhpcy5hc3NlcnRWYWxpZGl0eSgpOwogICAgICB9CiAgICAgIC8vIHBhaXIgKGJ5dGVzIG9mIHIsIGJ5dGVzIG9mIHMpCiAgICAgIHN0YXRpYyBmcm9tQ29tcGFjdChoZXgpIHsKICAgICAgICBjb25zdCBsID0gQ1VSVkUubkJ5dGVMZW5ndGg7CiAgICAgICAgaGV4ID0gZW5zdXJlQnl0ZXMoImNvbXBhY3RTaWduYXR1cmUiLCBoZXgsIGwgKiAyKTsKICAgICAgICByZXR1cm4gbmV3IFNpZ25hdHVyZShzbGNOdW0oaGV4LCAwLCBsKSwgc2xjTnVtKGhleCwgbCwgMiAqIGwpKTsKICAgICAgfQogICAgICAvLyBERVIgZW5jb2RlZCBFQ0RTQSBzaWduYXR1cmUKICAgICAgLy8gaHR0cHM6Ly9iaXRjb2luLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy81NzY0NC93aGF0LWFyZS10aGUtcGFydHMtb2YtYS1iaXRjb2luLXRyYW5zYWN0aW9uLWlucHV0LXNjcmlwdAogICAgICBzdGF0aWMgZnJvbURFUihoZXgpIHsKICAgICAgICBjb25zdCB7IHIsIHMgfSA9IERFUi50b1NpZyhlbnN1cmVCeXRlcygiREVSIiwgaGV4KSk7CiAgICAgICAgcmV0dXJuIG5ldyBTaWduYXR1cmUociwgcyk7CiAgICAgIH0KICAgICAgYXNzZXJ0VmFsaWRpdHkoKSB7CiAgICAgICAgaWYgKCFpc1dpdGhpbkN1cnZlT3JkZXIodGhpcy5yKSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiciBtdXN0IGJlIDAgPCByIDwgQ1VSVkUubiIpOwogICAgICAgIGlmICghaXNXaXRoaW5DdXJ2ZU9yZGVyKHRoaXMucykpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInMgbXVzdCBiZSAwIDwgcyA8IENVUlZFLm4iKTsKICAgICAgfQogICAgICBhZGRSZWNvdmVyeUJpdChyZWNvdmVyeSkgewogICAgICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKHRoaXMuciwgdGhpcy5zLCByZWNvdmVyeSk7CiAgICAgIH0KICAgICAgcmVjb3ZlclB1YmxpY0tleShtc2dIYXNoKSB7CiAgICAgICAgY29uc3QgeyByLCBzLCByZWNvdmVyeTogcmVjIH0gPSB0aGlzOwogICAgICAgIGNvbnN0IGggPSBiaXRzMmludF9tb2ROKGVuc3VyZUJ5dGVzKCJtc2dIYXNoIiwgbXNnSGFzaCkpOwogICAgICAgIGlmIChyZWMgPT0gbnVsbCB8fCAhWzAsIDEsIDIsIDNdLmluY2x1ZGVzKHJlYykpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInJlY292ZXJ5IGlkIGludmFsaWQiKTsKICAgICAgICBjb25zdCByYWRqID0gcmVjID09PSAyIHx8IHJlYyA9PT0gMyA/IHIgKyBDVVJWRS5uIDogcjsKICAgICAgICBpZiAocmFkaiA+PSBGcDIuT1JERVIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInJlY292ZXJ5IGlkIDIgb3IgMyBpbnZhbGlkIik7CiAgICAgICAgY29uc3QgcHJlZml4ID0gKHJlYyAmIDEpID09PSAwID8gIjAyIiA6ICIwMyI7CiAgICAgICAgY29uc3QgUiA9IFBvaW50Mi5mcm9tSGV4KHByZWZpeCArIG51bVRvTkJ5dGVTdHIocmFkaikpOwogICAgICAgIGNvbnN0IGlyID0gaW52TihyYWRqKTsKICAgICAgICBjb25zdCB1MSA9IG1vZE4yKC1oICogaXIpOwogICAgICAgIGNvbnN0IHUyID0gbW9kTjIocyAqIGlyKTsKICAgICAgICBjb25zdCBRID0gUG9pbnQyLkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoUiwgdTEsIHUyKTsKICAgICAgICBpZiAoIVEpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInBvaW50IGF0IGluZmluaWZ5Iik7CiAgICAgICAgUS5hc3NlcnRWYWxpZGl0eSgpOwogICAgICAgIHJldHVybiBROwogICAgICB9CiAgICAgIC8vIFNpZ25hdHVyZXMgc2hvdWxkIGJlIGxvdy1zLCB0byBwcmV2ZW50IG1hbGxlYWJpbGl0eS4KICAgICAgaGFzSGlnaFMoKSB7CiAgICAgICAgcmV0dXJuIGlzQmlnZ2VyVGhhbkhhbGZPcmRlcih0aGlzLnMpOwogICAgICB9CiAgICAgIG5vcm1hbGl6ZVMoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaGFzSGlnaFMoKSA/IG5ldyBTaWduYXR1cmUodGhpcy5yLCBtb2ROMigtdGhpcy5zKSwgdGhpcy5yZWNvdmVyeSkgOiB0aGlzOwogICAgICB9CiAgICAgIC8vIERFUi1lbmNvZGVkCiAgICAgIHRvREVSUmF3Qnl0ZXMoKSB7CiAgICAgICAgcmV0dXJuIGhleFRvQnl0ZXMyKHRoaXMudG9ERVJIZXgoKSk7CiAgICAgIH0KICAgICAgdG9ERVJIZXgoKSB7CiAgICAgICAgcmV0dXJuIERFUi5oZXhGcm9tU2lnKHsgcjogdGhpcy5yLCBzOiB0aGlzLnMgfSk7CiAgICAgIH0KICAgICAgLy8gcGFkZGVkIGJ5dGVzIG9mIHIsIHRoZW4gcGFkZGVkIGJ5dGVzIG9mIHMKICAgICAgdG9Db21wYWN0UmF3Qnl0ZXMoKSB7CiAgICAgICAgcmV0dXJuIGhleFRvQnl0ZXMyKHRoaXMudG9Db21wYWN0SGV4KCkpOwogICAgICB9CiAgICAgIHRvQ29tcGFjdEhleCgpIHsKICAgICAgICByZXR1cm4gbnVtVG9OQnl0ZVN0cih0aGlzLnIpICsgbnVtVG9OQnl0ZVN0cih0aGlzLnMpOwogICAgICB9CiAgICB9CiAgICBjb25zdCB1dGlscyA9IHsKICAgICAgaXNWYWxpZFByaXZhdGVLZXkocHJpdmF0ZUtleSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBub3JtUHJpdmF0ZUtleVRvU2NhbGFyKHByaXZhdGVLZXkpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG5vcm1Qcml2YXRlS2V5VG9TY2FsYXIsCiAgICAgIC8qKgogICAgICAgKiBQcm9kdWNlcyBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgcHJpdmF0ZSBrZXkgZnJvbSByYW5kb20gb2Ygc2l6ZQogICAgICAgKiAoZ3JvdXBMZW4gKyBjZWlsKGdyb3VwTGVuIC8gMikpIHdpdGggbW9kdWxvIGJpYXMgYmVpbmcgbmVnbGlnaWJsZS4KICAgICAgICovCiAgICAgIHJhbmRvbVByaXZhdGVLZXk6ICgpID0+IHsKICAgICAgICBjb25zdCBsZW5ndGggPSBnZXRNaW5IYXNoTGVuZ3RoKENVUlZFLm4pOwogICAgICAgIHJldHVybiBtYXBIYXNoVG9GaWVsZChDVVJWRS5yYW5kb21CeXRlcyhsZW5ndGgpLCBDVVJWRS5uKTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgcHJlY29tcHV0ZSB0YWJsZSBmb3IgYW4gYXJiaXRyYXJ5IEVDIHBvaW50LiBNYWtlcyBwb2ludCAiY2FjaGVkIi4KICAgICAgICogQWxsb3dzIHRvIG1hc3NpdmVseSBzcGVlZC11cCBgcG9pbnQubXVsdGlwbHkoc2NhbGFyKWAuCiAgICAgICAqIEByZXR1cm5zIGNhY2hlZCBwb2ludAogICAgICAgKiBAZXhhbXBsZQogICAgICAgKiBjb25zdCBmYXN0ID0gdXRpbHMucHJlY29tcHV0ZSg4LCBQcm9qZWN0aXZlUG9pbnQuZnJvbUhleChzb21lb25lc1B1YktleSkpOwogICAgICAgKiBmYXN0Lm11bHRpcGx5KHByaXZLZXkpOyAvLyBtdWNoIGZhc3RlciBFQ0RIIG5vdwogICAgICAgKi8KICAgICAgcHJlY29tcHV0ZSh3aW5kb3dTaXplID0gOCwgcG9pbnQgPSBQb2ludDIuQkFTRSkgewogICAgICAgIHBvaW50Ll9zZXRXaW5kb3dTaXplKHdpbmRvd1NpemUpOwogICAgICAgIHBvaW50Lm11bHRpcGx5KEJpZ0ludCgzKSk7CiAgICAgICAgcmV0dXJuIHBvaW50OwogICAgICB9CiAgICB9OwogICAgZnVuY3Rpb24gZ2V0UHVibGljS2V5KHByaXZhdGVLZXksIGlzQ29tcHJlc3NlZCA9IHRydWUpIHsKICAgICAgcmV0dXJuIFBvaW50Mi5mcm9tUHJpdmF0ZUtleShwcml2YXRlS2V5KS50b1Jhd0J5dGVzKGlzQ29tcHJlc3NlZCk7CiAgICB9CiAgICBmdW5jdGlvbiBpc1Byb2JQdWIoaXRlbSkgewogICAgICBjb25zdCBhcnIgPSBpc0J5dGVzMihpdGVtKTsKICAgICAgY29uc3Qgc3RyID0gdHlwZW9mIGl0ZW0gPT09ICJzdHJpbmciOwogICAgICBjb25zdCBsZW4gPSAoYXJyIHx8IHN0cikgJiYgaXRlbS5sZW5ndGg7CiAgICAgIGlmIChhcnIpCiAgICAgICAgcmV0dXJuIGxlbiA9PT0gY29tcHJlc3NlZExlbiB8fCBsZW4gPT09IHVuY29tcHJlc3NlZExlbjsKICAgICAgaWYgKHN0cikKICAgICAgICByZXR1cm4gbGVuID09PSAyICogY29tcHJlc3NlZExlbiB8fCBsZW4gPT09IDIgKiB1bmNvbXByZXNzZWRMZW47CiAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUG9pbnQyKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRTaGFyZWRTZWNyZXQocHJpdmF0ZUEsIHB1YmxpY0IsIGlzQ29tcHJlc3NlZCA9IHRydWUpIHsKICAgICAgaWYgKGlzUHJvYlB1Yihwcml2YXRlQSkpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJmaXJzdCBhcmcgbXVzdCBiZSBwcml2YXRlIGtleSIpOwogICAgICBpZiAoIWlzUHJvYlB1YihwdWJsaWNCKSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInNlY29uZCBhcmcgbXVzdCBiZSBwdWJsaWMga2V5Iik7CiAgICAgIGNvbnN0IGIgPSBQb2ludDIuZnJvbUhleChwdWJsaWNCKTsKICAgICAgcmV0dXJuIGIubXVsdGlwbHkobm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2YXRlQSkpLnRvUmF3Qnl0ZXMoaXNDb21wcmVzc2VkKTsKICAgIH0KICAgIGNvbnN0IGJpdHMyaW50ID0gQ1VSVkUuYml0czJpbnQgfHwgZnVuY3Rpb24oYnl0ZXMyKSB7CiAgICAgIGNvbnN0IG51bSA9IGJ5dGVzVG9OdW1iZXJCRShieXRlczIpOwogICAgICBjb25zdCBkZWx0YSA9IGJ5dGVzMi5sZW5ndGggKiA4IC0gQ1VSVkUubkJpdExlbmd0aDsKICAgICAgcmV0dXJuIGRlbHRhID4gMCA/IG51bSA+PiBCaWdJbnQoZGVsdGEpIDogbnVtOwogICAgfTsKICAgIGNvbnN0IGJpdHMyaW50X21vZE4gPSBDVVJWRS5iaXRzMmludF9tb2ROIHx8IGZ1bmN0aW9uKGJ5dGVzMikgewogICAgICByZXR1cm4gbW9kTjIoYml0czJpbnQoYnl0ZXMyKSk7CiAgICB9OwogICAgY29uc3QgT1JERVJfTUFTSyA9IGJpdE1hc2soQ1VSVkUubkJpdExlbmd0aCk7CiAgICBmdW5jdGlvbiBpbnQyb2N0ZXRzKG51bSkgewogICAgICBpZiAodHlwZW9mIG51bSAhPT0gImJpZ2ludCIpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiaWdpbnQgZXhwZWN0ZWQiKTsKICAgICAgaWYgKCEoXzBuNSA8PSBudW0gJiYgbnVtIDwgT1JERVJfTUFTSykpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiaWdpbnQgZXhwZWN0ZWQgPCAyXiR7Q1VSVkUubkJpdExlbmd0aH1gKTsKICAgICAgcmV0dXJuIG51bWJlclRvQnl0ZXNCRShudW0sIENVUlZFLm5CeXRlTGVuZ3RoKTsKICAgIH0KICAgIGZ1bmN0aW9uIHByZXBTaWcobXNnSGFzaCwgcHJpdmF0ZUtleSwgb3B0cyA9IGRlZmF1bHRTaWdPcHRzKSB7CiAgICAgIGlmIChbInJlY292ZXJlZCIsICJjYW5vbmljYWwiXS5zb21lKChrKSA9PiBrIGluIG9wdHMpKQogICAgICAgIHRocm93IG5ldyBFcnJvcigic2lnbigpIGxlZ2FjeSBvcHRpb25zIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgY29uc3QgeyBoYXNoOiBoYXNoMywgcmFuZG9tQnl0ZXM6IHJhbmRvbUJ5dGVzMiB9ID0gQ1VSVkU7CiAgICAgIGxldCB7IGxvd1MsIHByZWhhc2gsIGV4dHJhRW50cm9weTogZW50IH0gPSBvcHRzOwogICAgICBpZiAobG93UyA9PSBudWxsKQogICAgICAgIGxvd1MgPSB0cnVlOwogICAgICBtc2dIYXNoID0gZW5zdXJlQnl0ZXMoIm1zZ0hhc2giLCBtc2dIYXNoKTsKICAgICAgaWYgKHByZWhhc2gpCiAgICAgICAgbXNnSGFzaCA9IGVuc3VyZUJ5dGVzKCJwcmVoYXNoZWQgbXNnSGFzaCIsIGhhc2gzKG1zZ0hhc2gpKTsKICAgICAgY29uc3QgaDFpbnQgPSBiaXRzMmludF9tb2ROKG1zZ0hhc2gpOwogICAgICBjb25zdCBkID0gbm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2YXRlS2V5KTsKICAgICAgY29uc3Qgc2VlZEFyZ3MgPSBbaW50Mm9jdGV0cyhkKSwgaW50Mm9jdGV0cyhoMWludCldOwogICAgICBpZiAoZW50ICE9IG51bGwgJiYgZW50ICE9PSBmYWxzZSkgewogICAgICAgIGNvbnN0IGUgPSBlbnQgPT09IHRydWUgPyByYW5kb21CeXRlczIoRnAyLkJZVEVTKSA6IGVudDsKICAgICAgICBzZWVkQXJncy5wdXNoKGVuc3VyZUJ5dGVzKCJleHRyYUVudHJvcHkiLCBlKSk7CiAgICAgIH0KICAgICAgY29uc3Qgc2VlZCA9IGNvbmNhdEJ5dGVzMyguLi5zZWVkQXJncyk7CiAgICAgIGNvbnN0IG0gPSBoMWludDsKICAgICAgZnVuY3Rpb24gazJzaWcoa0J5dGVzKSB7CiAgICAgICAgY29uc3QgayA9IGJpdHMyaW50KGtCeXRlcyk7CiAgICAgICAgaWYgKCFpc1dpdGhpbkN1cnZlT3JkZXIoaykpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgaWsgPSBpbnZOKGspOwogICAgICAgIGNvbnN0IHEgPSBQb2ludDIuQkFTRS5tdWx0aXBseShrKS50b0FmZmluZSgpOwogICAgICAgIGNvbnN0IHIgPSBtb2ROMihxLngpOwogICAgICAgIGlmIChyID09PSBfMG41KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IHMgPSBtb2ROMihpayAqIG1vZE4yKG0gKyByICogZCkpOwogICAgICAgIGlmIChzID09PSBfMG41KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGxldCByZWNvdmVyeSA9IChxLnggPT09IHIgPyAwIDogMikgfCBOdW1iZXIocS55ICYgXzFuNSk7CiAgICAgICAgbGV0IG5vcm1TID0gczsKICAgICAgICBpZiAobG93UyAmJiBpc0JpZ2dlclRoYW5IYWxmT3JkZXIocykpIHsKICAgICAgICAgIG5vcm1TID0gbm9ybWFsaXplUyhzKTsKICAgICAgICAgIHJlY292ZXJ5IF49IDE7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKHIsIG5vcm1TLCByZWNvdmVyeSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgc2VlZCwgazJzaWcgfTsKICAgIH0KICAgIGNvbnN0IGRlZmF1bHRTaWdPcHRzID0geyBsb3dTOiBDVVJWRS5sb3dTLCBwcmVoYXNoOiBmYWxzZSB9OwogICAgY29uc3QgZGVmYXVsdFZlck9wdHMgPSB7IGxvd1M6IENVUlZFLmxvd1MsIHByZWhhc2g6IGZhbHNlIH07CiAgICBmdW5jdGlvbiBzaWduMihtc2dIYXNoLCBwcml2S2V5LCBvcHRzID0gZGVmYXVsdFNpZ09wdHMpIHsKICAgICAgY29uc3QgeyBzZWVkLCBrMnNpZyB9ID0gcHJlcFNpZyhtc2dIYXNoLCBwcml2S2V5LCBvcHRzKTsKICAgICAgY29uc3QgQyA9IENVUlZFOwogICAgICBjb25zdCBkcmJnID0gY3JlYXRlSG1hY0RyYmcoQy5oYXNoLm91dHB1dExlbiwgQy5uQnl0ZUxlbmd0aCwgQy5obWFjKTsKICAgICAgcmV0dXJuIGRyYmcoc2VlZCwgazJzaWcpOwogICAgfQogICAgUG9pbnQyLkJBU0UuX3NldFdpbmRvd1NpemUoOCk7CiAgICBmdW5jdGlvbiB2ZXJpZnkoc2lnbmF0dXJlLCBtc2dIYXNoLCBwdWJsaWNLZXksIG9wdHMgPSBkZWZhdWx0VmVyT3B0cykgewogICAgICBjb25zdCBzZyA9IHNpZ25hdHVyZTsKICAgICAgbXNnSGFzaCA9IGVuc3VyZUJ5dGVzKCJtc2dIYXNoIiwgbXNnSGFzaCk7CiAgICAgIHB1YmxpY0tleSA9IGVuc3VyZUJ5dGVzKCJwdWJsaWNLZXkiLCBwdWJsaWNLZXkpOwogICAgICBpZiAoInN0cmljdCIgaW4gb3B0cykKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm9wdGlvbnMuc3RyaWN0IHdhcyByZW5hbWVkIHRvIGxvd1MiKTsKICAgICAgY29uc3QgeyBsb3dTLCBwcmVoYXNoIH0gPSBvcHRzOwogICAgICBsZXQgX3NpZyA9IHZvaWQgMDsKICAgICAgbGV0IFA7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKHR5cGVvZiBzZyA9PT0gInN0cmluZyIgfHwgaXNCeXRlczIoc2cpKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBfc2lnID0gU2lnbmF0dXJlLmZyb21ERVIoc2cpOwogICAgICAgICAgfSBjYXRjaCAoZGVyRXJyb3IpIHsKICAgICAgICAgICAgaWYgKCEoZGVyRXJyb3IgaW5zdGFuY2VvZiBERVIuRXJyKSkKICAgICAgICAgICAgICB0aHJvdyBkZXJFcnJvcjsKICAgICAgICAgICAgX3NpZyA9IFNpZ25hdHVyZS5mcm9tQ29tcGFjdChzZyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2cgPT09ICJvYmplY3QiICYmIHR5cGVvZiBzZy5yID09PSAiYmlnaW50IiAmJiB0eXBlb2Ygc2cucyA9PT0gImJpZ2ludCIpIHsKICAgICAgICAgIGNvbnN0IHsgcjogcjIsIHM6IHMyIH0gPSBzZzsKICAgICAgICAgIF9zaWcgPSBuZXcgU2lnbmF0dXJlKHIyLCBzMik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiUEFSU0UiKTsKICAgICAgICB9CiAgICAgICAgUCA9IFBvaW50Mi5mcm9tSGV4KHB1YmxpY0tleSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgPT09ICJQQVJTRSIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNpZ25hdHVyZSBtdXN0IGJlIFNpZ25hdHVyZSBpbnN0YW5jZSwgVWludDhBcnJheSBvciBoZXggc3RyaW5nYCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChsb3dTICYmIF9zaWcuaGFzSGlnaFMoKSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChwcmVoYXNoKQogICAgICAgIG1zZ0hhc2ggPSBDVVJWRS5oYXNoKG1zZ0hhc2gpOwogICAgICBjb25zdCB7IHIsIHMgfSA9IF9zaWc7CiAgICAgIGNvbnN0IGggPSBiaXRzMmludF9tb2ROKG1zZ0hhc2gpOwogICAgICBjb25zdCBpcyA9IGludk4ocyk7CiAgICAgIGNvbnN0IHUxID0gbW9kTjIoaCAqIGlzKTsKICAgICAgY29uc3QgdTIgPSBtb2ROMihyICogaXMpOwogICAgICBjb25zdCBSID0gUG9pbnQyLkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoUCwgdTEsIHUyKT8udG9BZmZpbmUoKTsKICAgICAgaWYgKCFSKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgY29uc3QgdiA9IG1vZE4yKFIueCk7CiAgICAgIHJldHVybiB2ID09PSByOwogICAgfQogICAgcmV0dXJuIHsKICAgICAgQ1VSVkUsCiAgICAgIGdldFB1YmxpY0tleSwKICAgICAgZ2V0U2hhcmVkU2VjcmV0LAogICAgICBzaWduOiBzaWduMiwKICAgICAgdmVyaWZ5LAogICAgICBQcm9qZWN0aXZlUG9pbnQ6IFBvaW50MiwKICAgICAgU2lnbmF0dXJlLAogICAgICB1dGlscwogICAgfTsKICB9CiAgZnVuY3Rpb24gU1dVRnBTcXJ0UmF0aW8oRnAyLCBaKSB7CiAgICBjb25zdCBxID0gRnAyLk9SREVSOwogICAgbGV0IGwgPSBfMG41OwogICAgZm9yIChsZXQgbyA9IHEgLSBfMW41OyBvICUgXzJuNCA9PT0gXzBuNTsgbyAvPSBfMm40KQogICAgICBsICs9IF8xbjU7CiAgICBjb25zdCBjMSA9IGw7CiAgICBjb25zdCBfMm5fcG93X2MxXzEgPSBfMm40IDw8IGMxIC0gXzFuNSAtIF8xbjU7CiAgICBjb25zdCBfMm5fcG93X2MxID0gXzJuX3Bvd19jMV8xICogXzJuNDsKICAgIGNvbnN0IGMyID0gKHEgLSBfMW41KSAvIF8ybl9wb3dfYzE7CiAgICBjb25zdCBjMyA9IChjMiAtIF8xbjUpIC8gXzJuNDsKICAgIGNvbnN0IGM0ID0gXzJuX3Bvd19jMSAtIF8xbjU7CiAgICBjb25zdCBjNSA9IF8ybl9wb3dfYzFfMTsKICAgIGNvbnN0IGM2ID0gRnAyLnBvdyhaLCBjMik7CiAgICBjb25zdCBjNyA9IEZwMi5wb3coWiwgKGMyICsgXzFuNSkgLyBfMm40KTsKICAgIGxldCBzcXJ0UmF0aW8gPSAodSwgdikgPT4gewogICAgICBsZXQgdHYxID0gYzY7CiAgICAgIGxldCB0djIgPSBGcDIucG93KHYsIGM0KTsKICAgICAgbGV0IHR2MyA9IEZwMi5zcXIodHYyKTsKICAgICAgdHYzID0gRnAyLm11bCh0djMsIHYpOwogICAgICBsZXQgdHY1ID0gRnAyLm11bCh1LCB0djMpOwogICAgICB0djUgPSBGcDIucG93KHR2NSwgYzMpOwogICAgICB0djUgPSBGcDIubXVsKHR2NSwgdHYyKTsKICAgICAgdHYyID0gRnAyLm11bCh0djUsIHYpOwogICAgICB0djMgPSBGcDIubXVsKHR2NSwgdSk7CiAgICAgIGxldCB0djQgPSBGcDIubXVsKHR2MywgdHYyKTsKICAgICAgdHY1ID0gRnAyLnBvdyh0djQsIGM1KTsKICAgICAgbGV0IGlzUVIgPSBGcDIuZXFsKHR2NSwgRnAyLk9ORSk7CiAgICAgIHR2MiA9IEZwMi5tdWwodHYzLCBjNyk7CiAgICAgIHR2NSA9IEZwMi5tdWwodHY0LCB0djEpOwogICAgICB0djMgPSBGcDIuY21vdih0djIsIHR2MywgaXNRUik7CiAgICAgIHR2NCA9IEZwMi5jbW92KHR2NSwgdHY0LCBpc1FSKTsKICAgICAgZm9yIChsZXQgaSA9IGMxOyBpID4gXzFuNTsgaS0tKSB7CiAgICAgICAgbGV0IHR2NTIgPSBpIC0gXzJuNDsKICAgICAgICB0djUyID0gXzJuNCA8PCB0djUyIC0gXzFuNTsKICAgICAgICBsZXQgdHZ2NSA9IEZwMi5wb3codHY0LCB0djUyKTsKICAgICAgICBjb25zdCBlMSA9IEZwMi5lcWwodHZ2NSwgRnAyLk9ORSk7CiAgICAgICAgdHYyID0gRnAyLm11bCh0djMsIHR2MSk7CiAgICAgICAgdHYxID0gRnAyLm11bCh0djEsIHR2MSk7CiAgICAgICAgdHZ2NSA9IEZwMi5tdWwodHY0LCB0djEpOwogICAgICAgIHR2MyA9IEZwMi5jbW92KHR2MiwgdHYzLCBlMSk7CiAgICAgICAgdHY0ID0gRnAyLmNtb3YodHZ2NSwgdHY0LCBlMSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgaXNWYWxpZDogaXNRUiwgdmFsdWU6IHR2MyB9OwogICAgfTsKICAgIGlmIChGcDIuT1JERVIgJSBfNG4yID09PSBfM24yKSB7CiAgICAgIGNvbnN0IGMxMiA9IChGcDIuT1JERVIgLSBfM24yKSAvIF80bjI7CiAgICAgIGNvbnN0IGMyMiA9IEZwMi5zcXJ0KEZwMi5uZWcoWikpOwogICAgICBzcXJ0UmF0aW8gPSAodSwgdikgPT4gewogICAgICAgIGxldCB0djEgPSBGcDIuc3FyKHYpOwogICAgICAgIGNvbnN0IHR2MiA9IEZwMi5tdWwodSwgdik7CiAgICAgICAgdHYxID0gRnAyLm11bCh0djEsIHR2Mik7CiAgICAgICAgbGV0IHkxID0gRnAyLnBvdyh0djEsIGMxMik7CiAgICAgICAgeTEgPSBGcDIubXVsKHkxLCB0djIpOwogICAgICAgIGNvbnN0IHkyID0gRnAyLm11bCh5MSwgYzIyKTsKICAgICAgICBjb25zdCB0djMgPSBGcDIubXVsKEZwMi5zcXIoeTEpLCB2KTsKICAgICAgICBjb25zdCBpc1FSID0gRnAyLmVxbCh0djMsIHUpOwogICAgICAgIGxldCB5ID0gRnAyLmNtb3YoeTIsIHkxLCBpc1FSKTsKICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBpc1FSLCB2YWx1ZTogeSB9OwogICAgICB9OwogICAgfQogICAgcmV0dXJuIHNxcnRSYXRpbzsKICB9CiAgZnVuY3Rpb24gbWFwVG9DdXJ2ZVNpbXBsZVNXVShGcDIsIG9wdHMpIHsKICAgIHZhbGlkYXRlRmllbGQoRnAyKTsKICAgIGlmICghRnAyLmlzVmFsaWQob3B0cy5BKSB8fCAhRnAyLmlzVmFsaWQob3B0cy5CKSB8fCAhRnAyLmlzVmFsaWQob3B0cy5aKSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJtYXBUb0N1cnZlU2ltcGxlU1dVOiBpbnZhbGlkIG9wdHMiKTsKICAgIGNvbnN0IHNxcnRSYXRpbyA9IFNXVUZwU3FydFJhdGlvKEZwMiwgb3B0cy5aKTsKICAgIGlmICghRnAyLmlzT2RkKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkZwLmlzT2RkIGlzIG5vdCBpbXBsZW1lbnRlZCEiKTsKICAgIHJldHVybiAodSkgPT4gewogICAgICBsZXQgdHYxLCB0djIsIHR2MywgdHY0LCB0djUsIHR2NiwgeCwgeTsKICAgICAgdHYxID0gRnAyLnNxcih1KTsKICAgICAgdHYxID0gRnAyLm11bCh0djEsIG9wdHMuWik7CiAgICAgIHR2MiA9IEZwMi5zcXIodHYxKTsKICAgICAgdHYyID0gRnAyLmFkZCh0djIsIHR2MSk7CiAgICAgIHR2MyA9IEZwMi5hZGQodHYyLCBGcDIuT05FKTsKICAgICAgdHYzID0gRnAyLm11bCh0djMsIG9wdHMuQik7CiAgICAgIHR2NCA9IEZwMi5jbW92KG9wdHMuWiwgRnAyLm5lZyh0djIpLCAhRnAyLmVxbCh0djIsIEZwMi5aRVJPKSk7CiAgICAgIHR2NCA9IEZwMi5tdWwodHY0LCBvcHRzLkEpOwogICAgICB0djIgPSBGcDIuc3FyKHR2Myk7CiAgICAgIHR2NiA9IEZwMi5zcXIodHY0KTsKICAgICAgdHY1ID0gRnAyLm11bCh0djYsIG9wdHMuQSk7CiAgICAgIHR2MiA9IEZwMi5hZGQodHYyLCB0djUpOwogICAgICB0djIgPSBGcDIubXVsKHR2MiwgdHYzKTsKICAgICAgdHY2ID0gRnAyLm11bCh0djYsIHR2NCk7CiAgICAgIHR2NSA9IEZwMi5tdWwodHY2LCBvcHRzLkIpOwogICAgICB0djIgPSBGcDIuYWRkKHR2MiwgdHY1KTsKICAgICAgeCA9IEZwMi5tdWwodHYxLCB0djMpOwogICAgICBjb25zdCB7IGlzVmFsaWQsIHZhbHVlIH0gPSBzcXJ0UmF0aW8odHYyLCB0djYpOwogICAgICB5ID0gRnAyLm11bCh0djEsIHUpOwogICAgICB5ID0gRnAyLm11bCh5LCB2YWx1ZSk7CiAgICAgIHggPSBGcDIuY21vdih4LCB0djMsIGlzVmFsaWQpOwogICAgICB5ID0gRnAyLmNtb3YoeSwgdmFsdWUsIGlzVmFsaWQpOwogICAgICBjb25zdCBlMSA9IEZwMi5pc09kZCh1KSA9PT0gRnAyLmlzT2RkKHkpOwogICAgICB5ID0gRnAyLmNtb3YoRnAyLm5lZyh5KSwgeSwgZTEpOwogICAgICB4ID0gRnAyLmRpdih4LCB0djQpOwogICAgICByZXR1cm4geyB4LCB5IH07CiAgICB9OwogIH0KICB2YXIgYjJuLCBoMmIsIERFUiwgXzBuNSwgXzFuNSwgXzJuNCwgXzNuMiwgXzRuMjsKICB2YXIgaW5pdF93ZWllcnN0cmFzcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3Qvd2VpZXJzdHJhc3MuanMiKCkgewogICAgICBpbml0X21vZHVsYXIoKTsKICAgICAgaW5pdF91dGlsczQoKTsKICAgICAgaW5pdF91dGlsczQoKTsKICAgICAgaW5pdF9jdXJ2ZSgpOwogICAgICAoeyBieXRlc1RvTnVtYmVyQkU6IGIybiwgaGV4VG9CeXRlczogaDJiIH0gPSB1dGlsc19leHBvcnRzKTsKICAgICAgREVSID0gewogICAgICAgIC8vIGFzbi4xIERFUiBlbmNvZGluZyB1dGlscwogICAgICAgIEVycjogY2xhc3MgREVSRXJyIGV4dGVuZHMgRXJyb3IgewogICAgICAgICAgY29uc3RydWN0b3IobSA9ICIiKSB7CiAgICAgICAgICAgIHN1cGVyKG0pOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgX3BhcnNlSW50KGRhdGEpIHsKICAgICAgICAgIGNvbnN0IHsgRXJyOiBFIH0gPSBERVI7CiAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPCAyIHx8IGRhdGFbMF0gIT09IDIpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyIHRhZyIpOwogICAgICAgICAgY29uc3QgbGVuID0gZGF0YVsxXTsKICAgICAgICAgIGNvbnN0IHJlcyA9IGRhdGEuc3ViYXJyYXkoMiwgbGVuICsgMik7CiAgICAgICAgICBpZiAoIWxlbiB8fCByZXMubGVuZ3RoICE9PSBsZW4pCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiB3cm9uZyBsZW5ndGgiKTsKICAgICAgICAgIGlmIChyZXNbMF0gJiAxMjgpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiBuZWdhdGl2ZSIpOwogICAgICAgICAgaWYgKHJlc1swXSA9PT0gMCAmJiAhKHJlc1sxXSAmIDEyOCkpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiB1bm5lY2Vzc2FyeSBsZWFkaW5nIHplcm8iKTsKICAgICAgICAgIHJldHVybiB7IGQ6IGIybihyZXMpLCBsOiBkYXRhLnN1YmFycmF5KGxlbiArIDIpIH07CiAgICAgICAgfSwKICAgICAgICB0b1NpZyhoZXgpIHsKICAgICAgICAgIGNvbnN0IHsgRXJyOiBFIH0gPSBERVI7CiAgICAgICAgICBjb25zdCBkYXRhID0gdHlwZW9mIGhleCA9PT0gInN0cmluZyIgPyBoMmIoaGV4KSA6IGhleDsKICAgICAgICAgIGFieXRlcyhkYXRhKTsKICAgICAgICAgIGxldCBsID0gZGF0YS5sZW5ndGg7CiAgICAgICAgICBpZiAobCA8IDIgfHwgZGF0YVswXSAhPSA0OCkKICAgICAgICAgICAgdGhyb3cgbmV3IEUoIkludmFsaWQgc2lnbmF0dXJlIHRhZyIpOwogICAgICAgICAgaWYgKGRhdGFbMV0gIT09IGwgLSAyKQogICAgICAgICAgICB0aHJvdyBuZXcgRSgiSW52YWxpZCBzaWduYXR1cmU6IGluY29ycmVjdCBsZW5ndGgiKTsKICAgICAgICAgIGNvbnN0IHsgZDogciwgbDogc0J5dGVzIH0gPSBERVIuX3BhcnNlSW50KGRhdGEuc3ViYXJyYXkoMikpOwogICAgICAgICAgY29uc3QgeyBkOiBzLCBsOiByQnl0ZXNMZWZ0IH0gPSBERVIuX3BhcnNlSW50KHNCeXRlcyk7CiAgICAgICAgICBpZiAockJ5dGVzTGVmdC5sZW5ndGgpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZTogbGVmdCBieXRlcyBhZnRlciBwYXJzaW5nIik7CiAgICAgICAgICByZXR1cm4geyByLCBzIH07CiAgICAgICAgfSwKICAgICAgICBoZXhGcm9tU2lnKHNpZykgewogICAgICAgICAgY29uc3Qgc2xpY2UyID0gKHMyKSA9PiBOdW1iZXIucGFyc2VJbnQoczJbMF0sIDE2KSAmIDggPyAiMDAiICsgczIgOiBzMjsKICAgICAgICAgIGNvbnN0IGggPSAobnVtKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGhleCA9IG51bS50b1N0cmluZygxNik7CiAgICAgICAgICAgIHJldHVybiBoZXgubGVuZ3RoICYgMSA/IGAwJHtoZXh9YCA6IGhleDsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCBzID0gc2xpY2UyKGgoc2lnLnMpKTsKICAgICAgICAgIGNvbnN0IHIgPSBzbGljZTIoaChzaWcucikpOwogICAgICAgICAgY29uc3Qgc2hsID0gcy5sZW5ndGggLyAyOwogICAgICAgICAgY29uc3QgcmhsID0gci5sZW5ndGggLyAyOwogICAgICAgICAgY29uc3Qgc2wgPSBoKHNobCk7CiAgICAgICAgICBjb25zdCBybCA9IGgocmhsKTsKICAgICAgICAgIHJldHVybiBgMzAke2gocmhsICsgc2hsICsgNCl9MDIke3JsfSR7cn0wMiR7c2x9JHtzfWA7CiAgICAgICAgfQogICAgICB9OwogICAgICBfMG41ID0gQmlnSW50KDApOwogICAgICBfMW41ID0gQmlnSW50KDEpOwogICAgICBfMm40ID0gQmlnSW50KDIpOwogICAgICBfM24yID0gQmlnSW50KDMpOwogICAgICBfNG4yID0gQmlnSW50KDQpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvaGFzaC10by1jdXJ2ZS5qcwogIGZ1bmN0aW9uIGkyb3NwKHZhbHVlLCBsZW5ndGgpIHsKICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPj0gMSA8PCA4ICogbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIEkyT1NQIGNhbGw6IHZhbHVlPSR7dmFsdWV9IGxlbmd0aD0ke2xlbmd0aH1gKTsKICAgIH0KICAgIGNvbnN0IHJlcyA9IEFycmF5LmZyb20oeyBsZW5ndGggfSkuZmlsbCgwKTsKICAgIGZvciAobGV0IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICByZXNbaV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgdmFsdWUgPj4+PSA4OwogICAgfQogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlcyk7CiAgfQogIGZ1bmN0aW9uIHN0cnhvcihhLCBiKSB7CiAgICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheShhLmxlbmd0aCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKICAgICAgYXJyW2ldID0gYVtpXSBeIGJbaV07CiAgICB9CiAgICByZXR1cm4gYXJyOwogIH0KICBmdW5jdGlvbiBhbnVtKGl0ZW0pIHsKICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoaXRlbSkpCiAgICAgIHRocm93IG5ldyBFcnJvcigibnVtYmVyIGV4cGVjdGVkIik7CiAgfQogIGZ1bmN0aW9uIGV4cGFuZF9tZXNzYWdlX3htZChtc2csIERTVCwgbGVuSW5CeXRlcywgSCkgewogICAgYWJ5dGVzKG1zZyk7CiAgICBhYnl0ZXMoRFNUKTsKICAgIGFudW0obGVuSW5CeXRlcyk7CiAgICBpZiAoRFNULmxlbmd0aCA+IDI1NSkKICAgICAgRFNUID0gSChjb25jYXRCeXRlczModXRmOFRvQnl0ZXMyKCJIMkMtT1ZFUlNJWkUtRFNULSIpLCBEU1QpKTsKICAgIGNvbnN0IHsgb3V0cHV0TGVuOiBiX2luX2J5dGVzLCBibG9ja0xlbjogcl9pbl9ieXRlcyB9ID0gSDsKICAgIGNvbnN0IGVsbCA9IE1hdGguY2VpbChsZW5JbkJ5dGVzIC8gYl9pbl9ieXRlcyk7CiAgICBpZiAoZWxsID4gMjU1KQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeG1kIGxlbmd0aCIpOwogICAgY29uc3QgRFNUX3ByaW1lID0gY29uY2F0Qnl0ZXMzKERTVCwgaTJvc3AoRFNULmxlbmd0aCwgMSkpOwogICAgY29uc3QgWl9wYWQgPSBpMm9zcCgwLCByX2luX2J5dGVzKTsKICAgIGNvbnN0IGxfaV9iX3N0ciA9IGkyb3NwKGxlbkluQnl0ZXMsIDIpOwogICAgY29uc3QgYiA9IG5ldyBBcnJheShlbGwpOwogICAgY29uc3QgYl8wID0gSChjb25jYXRCeXRlczMoWl9wYWQsIG1zZywgbF9pX2Jfc3RyLCBpMm9zcCgwLCAxKSwgRFNUX3ByaW1lKSk7CiAgICBiWzBdID0gSChjb25jYXRCeXRlczMoYl8wLCBpMm9zcCgxLCAxKSwgRFNUX3ByaW1lKSk7CiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBlbGw7IGkrKykgewogICAgICBjb25zdCBhcmdzID0gW3N0cnhvcihiXzAsIGJbaSAtIDFdKSwgaTJvc3AoaSArIDEsIDEpLCBEU1RfcHJpbWVdOwogICAgICBiW2ldID0gSChjb25jYXRCeXRlczMoLi4uYXJncykpOwogICAgfQogICAgY29uc3QgcHNldWRvX3JhbmRvbV9ieXRlcyA9IGNvbmNhdEJ5dGVzMyguLi5iKTsKICAgIHJldHVybiBwc2V1ZG9fcmFuZG9tX2J5dGVzLnNsaWNlKDAsIGxlbkluQnl0ZXMpOwogIH0KICBmdW5jdGlvbiBleHBhbmRfbWVzc2FnZV94b2YobXNnLCBEU1QsIGxlbkluQnl0ZXMsIGssIEgpIHsKICAgIGFieXRlcyhtc2cpOwogICAgYWJ5dGVzKERTVCk7CiAgICBhbnVtKGxlbkluQnl0ZXMpOwogICAgaWYgKERTVC5sZW5ndGggPiAyNTUpIHsKICAgICAgY29uc3QgZGtMZW4gPSBNYXRoLmNlaWwoMiAqIGsgLyA4KTsKICAgICAgRFNUID0gSC5jcmVhdGUoeyBka0xlbiB9KS51cGRhdGUodXRmOFRvQnl0ZXMyKCJIMkMtT1ZFUlNJWkUtRFNULSIpKS51cGRhdGUoRFNUKS5kaWdlc3QoKTsKICAgIH0KICAgIGlmIChsZW5JbkJ5dGVzID4gNjU1MzUgfHwgRFNULmxlbmd0aCA+IDI1NSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJleHBhbmRfbWVzc2FnZV94b2Y6IGludmFsaWQgbGVuSW5CeXRlcyIpOwogICAgcmV0dXJuIEguY3JlYXRlKHsgZGtMZW46IGxlbkluQnl0ZXMgfSkudXBkYXRlKG1zZykudXBkYXRlKGkyb3NwKGxlbkluQnl0ZXMsIDIpKS51cGRhdGUoRFNUKS51cGRhdGUoaTJvc3AoRFNULmxlbmd0aCwgMSkpLmRpZ2VzdCgpOwogIH0KICBmdW5jdGlvbiBoYXNoX3RvX2ZpZWxkKG1zZywgY291bnQsIG9wdGlvbnMpIHsKICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsIHsKICAgICAgRFNUOiAic3RyaW5nT3JVaW50OEFycmF5IiwKICAgICAgcDogImJpZ2ludCIsCiAgICAgIG06ICJpc1NhZmVJbnRlZ2VyIiwKICAgICAgazogImlzU2FmZUludGVnZXIiLAogICAgICBoYXNoOiAiaGFzaCIKICAgIH0pOwogICAgY29uc3QgeyBwLCBrLCBtLCBoYXNoOiBoYXNoMywgZXhwYW5kLCBEU1Q6IF9EU1QgfSA9IG9wdGlvbnM7CiAgICBhYnl0ZXMobXNnKTsKICAgIGFudW0oY291bnQpOwogICAgY29uc3QgRFNUID0gdHlwZW9mIF9EU1QgPT09ICJzdHJpbmciID8gdXRmOFRvQnl0ZXMyKF9EU1QpIDogX0RTVDsKICAgIGNvbnN0IGxvZzJwID0gcC50b1N0cmluZygyKS5sZW5ndGg7CiAgICBjb25zdCBMID0gTWF0aC5jZWlsKChsb2cycCArIGspIC8gOCk7CiAgICBjb25zdCBsZW5faW5fYnl0ZXMgPSBjb3VudCAqIG0gKiBMOwogICAgbGV0IHByYjsKICAgIGlmIChleHBhbmQgPT09ICJ4bWQiKSB7CiAgICAgIHByYiA9IGV4cGFuZF9tZXNzYWdlX3htZChtc2csIERTVCwgbGVuX2luX2J5dGVzLCBoYXNoMyk7CiAgICB9IGVsc2UgaWYgKGV4cGFuZCA9PT0gInhvZiIpIHsKICAgICAgcHJiID0gZXhwYW5kX21lc3NhZ2VfeG9mKG1zZywgRFNULCBsZW5faW5fYnl0ZXMsIGssIGhhc2gzKTsKICAgIH0gZWxzZSBpZiAoZXhwYW5kID09PSAiX2ludGVybmFsX3Bhc3MiKSB7CiAgICAgIHByYiA9IG1zZzsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwYW5kIG11c3QgYmUgInhtZCIgb3IgInhvZiInKTsKICAgIH0KICAgIGNvbnN0IHUgPSBuZXcgQXJyYXkoY291bnQpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGNvbnN0IGUgPSBuZXcgQXJyYXkobSk7CiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbTsgaisrKSB7CiAgICAgICAgY29uc3QgZWxtX29mZnNldCA9IEwgKiAoaiArIGkgKiBtKTsKICAgICAgICBjb25zdCB0diA9IHByYi5zdWJhcnJheShlbG1fb2Zmc2V0LCBlbG1fb2Zmc2V0ICsgTCk7CiAgICAgICAgZVtqXSA9IG1vZChvczJpcCh0diksIHApOwogICAgICB9CiAgICAgIHVbaV0gPSBlOwogICAgfQogICAgcmV0dXJuIHU7CiAgfQogIGZ1bmN0aW9uIGlzb2dlbnlNYXAoZmllbGQsIG1hcCkgewogICAgY29uc3QgQ09FRkYgPSBtYXAubWFwKChpKSA9PiBBcnJheS5mcm9tKGkpLnJldmVyc2UoKSk7CiAgICByZXR1cm4gKHgsIHkpID0+IHsKICAgICAgY29uc3QgW3hOdW0sIHhEZW4sIHlOdW0sIHlEZW5dID0gQ09FRkYubWFwKCh2YWwpID0+IHZhbC5yZWR1Y2UoKGFjYywgaSkgPT4gZmllbGQuYWRkKGZpZWxkLm11bChhY2MsIHgpLCBpKSkpOwogICAgICB4ID0gZmllbGQuZGl2KHhOdW0sIHhEZW4pOwogICAgICB5ID0gZmllbGQubXVsKHksIGZpZWxkLmRpdih5TnVtLCB5RGVuKSk7CiAgICAgIHJldHVybiB7IHgsIHkgfTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIGNyZWF0ZUhhc2hlcihQb2ludDIsIG1hcFRvQ3VydmUsIGRlZikgewogICAgaWYgKHR5cGVvZiBtYXBUb0N1cnZlICE9PSAiZnVuY3Rpb24iKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIm1hcFRvQ3VydmUoKSBtdXN0IGJlIGRlZmluZWQiKTsKICAgIHJldHVybiB7CiAgICAgIC8vIEVuY29kZXMgYnl0ZSBzdHJpbmcgdG8gZWxsaXB0aWMgY3VydmUuCiAgICAgIC8vIGhhc2hfdG9fY3VydmUgZnJvbSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTMKICAgICAgaGFzaFRvQ3VydmUobXNnLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgdSA9IGhhc2hfdG9fZmllbGQobXNnLCAyLCB7IC4uLmRlZiwgRFNUOiBkZWYuRFNULCAuLi5vcHRpb25zIH0pOwogICAgICAgIGNvbnN0IHUwID0gUG9pbnQyLmZyb21BZmZpbmUobWFwVG9DdXJ2ZSh1WzBdKSk7CiAgICAgICAgY29uc3QgdTEgPSBQb2ludDIuZnJvbUFmZmluZShtYXBUb0N1cnZlKHVbMV0pKTsKICAgICAgICBjb25zdCBQID0gdTAuYWRkKHUxKS5jbGVhckNvZmFjdG9yKCk7CiAgICAgICAgUC5hc3NlcnRWYWxpZGl0eSgpOwogICAgICAgIHJldHVybiBQOwogICAgICB9LAogICAgICAvLyBFbmNvZGVzIGJ5dGUgc3RyaW5nIHRvIGVsbGlwdGljIGN1cnZlLgogICAgICAvLyBlbmNvZGVfdG9fY3VydmUgZnJvbSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTMKICAgICAgZW5jb2RlVG9DdXJ2ZShtc2csIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCB1ID0gaGFzaF90b19maWVsZChtc2csIDEsIHsgLi4uZGVmLCBEU1Q6IGRlZi5lbmNvZGVEU1QsIC4uLm9wdGlvbnMgfSk7CiAgICAgICAgY29uc3QgUCA9IFBvaW50Mi5mcm9tQWZmaW5lKG1hcFRvQ3VydmUodVswXSkpLmNsZWFyQ29mYWN0b3IoKTsKICAgICAgICBQLmFzc2VydFZhbGlkaXR5KCk7CiAgICAgICAgcmV0dXJuIFA7CiAgICAgIH0KICAgIH07CiAgfQogIHZhciBvczJpcDsKICB2YXIgaW5pdF9oYXNoX3RvX2N1cnZlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC9oYXNoLXRvLWN1cnZlLmpzIigpIHsKICAgICAgaW5pdF9tb2R1bGFyKCk7CiAgICAgIGluaXRfdXRpbHM0KCk7CiAgICAgIG9zMmlwID0gYnl0ZXNUb051bWJlckJFOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vaG1hYy5qcwogIHZhciBITUFDLCBobWFjOwogIHZhciBpbml0X2htYWMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL2htYWMuanMiKCkgewogICAgICBpbml0X2Fzc2VydCgpOwogICAgICBpbml0X3V0aWxzMigpOwogICAgICBITUFDID0gY2xhc3MgZXh0ZW5kcyBIYXNoIHsKICAgICAgICBjb25zdHJ1Y3RvcihoYXNoMywgX2tleSkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIHRoaXMuZmluaXNoZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7CiAgICAgICAgICBoYXNoKGhhc2gzKTsKICAgICAgICAgIGNvbnN0IGtleSA9IHRvQnl0ZXMyKF9rZXkpOwogICAgICAgICAgdGhpcy5pSGFzaCA9IGhhc2gzLmNyZWF0ZSgpOwogICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlIYXNoLnVwZGF0ZSAhPT0gImZ1bmN0aW9uIikKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBpbnN0YW5jZSBvZiBjbGFzcyB3aGljaCBleHRlbmRzIHV0aWxzLkhhc2giKTsKICAgICAgICAgIHRoaXMuYmxvY2tMZW4gPSB0aGlzLmlIYXNoLmJsb2NrTGVuOwogICAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSB0aGlzLmlIYXNoLm91dHB1dExlbjsKICAgICAgICAgIGNvbnN0IGJsb2NrTGVuID0gdGhpcy5ibG9ja0xlbjsKICAgICAgICAgIGNvbnN0IHBhZDIgPSBuZXcgVWludDhBcnJheShibG9ja0xlbik7CiAgICAgICAgICBwYWQyLnNldChrZXkubGVuZ3RoID4gYmxvY2tMZW4gPyBoYXNoMy5jcmVhdGUoKS51cGRhdGUoa2V5KS5kaWdlc3QoKSA6IGtleSk7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZDIubGVuZ3RoOyBpKyspCiAgICAgICAgICAgIHBhZDJbaV0gXj0gNTQ7CiAgICAgICAgICB0aGlzLmlIYXNoLnVwZGF0ZShwYWQyKTsKICAgICAgICAgIHRoaXMub0hhc2ggPSBoYXNoMy5jcmVhdGUoKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFkMi5sZW5ndGg7IGkrKykKICAgICAgICAgICAgcGFkMltpXSBePSA1NCBeIDkyOwogICAgICAgICAgdGhpcy5vSGFzaC51cGRhdGUocGFkMik7CiAgICAgICAgICBwYWQyLmZpbGwoMCk7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZShidWYpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzKTsKICAgICAgICAgIHRoaXMuaUhhc2gudXBkYXRlKGJ1Zik7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgZGlnZXN0SW50byhvdXQpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzKTsKICAgICAgICAgIGJ5dGVzKG91dCwgdGhpcy5vdXRwdXRMZW4pOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IHRydWU7CiAgICAgICAgICB0aGlzLmlIYXNoLmRpZ2VzdEludG8ob3V0KTsKICAgICAgICAgIHRoaXMub0hhc2gudXBkYXRlKG91dCk7CiAgICAgICAgICB0aGlzLm9IYXNoLmRpZ2VzdEludG8ob3V0KTsKICAgICAgICAgIHRoaXMuZGVzdHJveSgpOwogICAgICAgIH0KICAgICAgICBkaWdlc3QoKSB7CiAgICAgICAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheSh0aGlzLm9IYXNoLm91dHB1dExlbik7CiAgICAgICAgICB0aGlzLmRpZ2VzdEludG8ob3V0KTsKICAgICAgICAgIHJldHVybiBvdXQ7CiAgICAgICAgfQogICAgICAgIF9jbG9uZUludG8odG8pIHsKICAgICAgICAgIHRvIHx8ICh0byA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLCB7fSkpOwogICAgICAgICAgY29uc3QgeyBvSGFzaCwgaUhhc2gsIGZpbmlzaGVkLCBkZXN0cm95ZWQsIGJsb2NrTGVuLCBvdXRwdXRMZW4gfSA9IHRoaXM7CiAgICAgICAgICB0byA9IHRvOwogICAgICAgICAgdG8uZmluaXNoZWQgPSBmaW5pc2hlZDsKICAgICAgICAgIHRvLmRlc3Ryb3llZCA9IGRlc3Ryb3llZDsKICAgICAgICAgIHRvLmJsb2NrTGVuID0gYmxvY2tMZW47CiAgICAgICAgICB0by5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0by5vSGFzaCA9IG9IYXNoLl9jbG9uZUludG8odG8ub0hhc2gpOwogICAgICAgICAgdG8uaUhhc2ggPSBpSGFzaC5fY2xvbmVJbnRvKHRvLmlIYXNoKTsKICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICB9CiAgICAgICAgZGVzdHJveSgpIHsKICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMub0hhc2guZGVzdHJveSgpOwogICAgICAgICAgdGhpcy5pSGFzaC5kZXN0cm95KCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBobWFjID0gKGhhc2gzLCBrZXksIG1lc3NhZ2UpID0+IG5ldyBITUFDKGhhc2gzLCBrZXkpLnVwZGF0ZShtZXNzYWdlKS5kaWdlc3QoKTsKICAgICAgaG1hYy5jcmVhdGUgPSAoaGFzaDMsIGtleSkgPT4gbmV3IEhNQUMoaGFzaDMsIGtleSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9fc2hvcnR3X3V0aWxzLmpzCiAgZnVuY3Rpb24gZ2V0SGFzaChoYXNoMykgewogICAgcmV0dXJuIHsKICAgICAgaGFzaDogaGFzaDMsCiAgICAgIGhtYWM6IChrZXksIC4uLm1zZ3MpID0+IGhtYWMoaGFzaDMsIGtleSwgY29uY2F0Qnl0ZXMoLi4ubXNncykpLAogICAgICByYW5kb21CeXRlcwogICAgfTsKICB9CiAgZnVuY3Rpb24gY3JlYXRlQ3VydmUoY3VydmVEZWYsIGRlZkhhc2gpIHsKICAgIGNvbnN0IGNyZWF0ZSA9IChoYXNoMykgPT4gd2VpZXJzdHJhc3MoeyAuLi5jdXJ2ZURlZiwgLi4uZ2V0SGFzaChoYXNoMykgfSk7CiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLmNyZWF0ZShkZWZIYXNoKSwgY3JlYXRlIH0pOwogIH0KICB2YXIgaW5pdF9zaG9ydHdfdXRpbHMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL19zaG9ydHdfdXRpbHMuanMiKCkgewogICAgICBpbml0X2htYWMoKTsKICAgICAgaW5pdF91dGlsczIoKTsKICAgICAgaW5pdF93ZWllcnN0cmFzcygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vc2VjcDI1NmsxLmpzCiAgdmFyIHNlY3AyNTZrMV9leHBvcnRzID0ge307CiAgX19leHBvcnQoc2VjcDI1NmsxX2V4cG9ydHMsIHsKICAgIGVuY29kZVRvQ3VydmU6ICgpID0+IGVuY29kZVRvQ3VydmUsCiAgICBoYXNoVG9DdXJ2ZTogKCkgPT4gaGFzaFRvQ3VydmUsCiAgICBzY2hub3JyOiAoKSA9PiBzY2hub3JyLAogICAgc2VjcDI1NmsxOiAoKSA9PiBzZWNwMjU2azEKICB9KTsKICBmdW5jdGlvbiBzcXJ0TW9kKHkpIHsKICAgIGNvbnN0IFAgPSBzZWNwMjU2azFQOwogICAgY29uc3QgXzNuMyA9IEJpZ0ludCgzKSwgXzZuID0gQmlnSW50KDYpLCBfMTFuID0gQmlnSW50KDExKSwgXzIybiA9IEJpZ0ludCgyMik7CiAgICBjb25zdCBfMjNuID0gQmlnSW50KDIzKSwgXzQ0biA9IEJpZ0ludCg0NCksIF84OG4gPSBCaWdJbnQoODgpOwogICAgY29uc3QgYjIgPSB5ICogeSAqIHkgJSBQOwogICAgY29uc3QgYjMyID0gYjIgKiBiMiAqIHkgJSBQOwogICAgY29uc3QgYjYgPSBwb3cyKGIzMiwgXzNuMywgUCkgKiBiMzIgJSBQOwogICAgY29uc3QgYjkgPSBwb3cyKGI2LCBfM24zLCBQKSAqIGIzMiAlIFA7CiAgICBjb25zdCBiMTEgPSBwb3cyKGI5LCBfMm41LCBQKSAqIGIyICUgUDsKICAgIGNvbnN0IGIyMiA9IHBvdzIoYjExLCBfMTFuLCBQKSAqIGIxMSAlIFA7CiAgICBjb25zdCBiNDQgPSBwb3cyKGIyMiwgXzIybiwgUCkgKiBiMjIgJSBQOwogICAgY29uc3QgYjg4ID0gcG93MihiNDQsIF80NG4sIFApICogYjQ0ICUgUDsKICAgIGNvbnN0IGIxNzYgPSBwb3cyKGI4OCwgXzg4biwgUCkgKiBiODggJSBQOwogICAgY29uc3QgYjIyMCA9IHBvdzIoYjE3NiwgXzQ0biwgUCkgKiBiNDQgJSBQOwogICAgY29uc3QgYjIyMyA9IHBvdzIoYjIyMCwgXzNuMywgUCkgKiBiMzIgJSBQOwogICAgY29uc3QgdDEgPSBwb3cyKGIyMjMsIF8yM24sIFApICogYjIyICUgUDsKICAgIGNvbnN0IHQyID0gcG93Mih0MSwgXzZuLCBQKSAqIGIyICUgUDsKICAgIGNvbnN0IHJvb3QyID0gcG93Mih0MiwgXzJuNSwgUCk7CiAgICBpZiAoIUZwLmVxbChGcC5zcXIocm9vdDIpLCB5KSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpOwogICAgcmV0dXJuIHJvb3QyOwogIH0KICBmdW5jdGlvbiB0YWdnZWRIYXNoKHRhZywgLi4ubWVzc2FnZXMpIHsKICAgIGxldCB0YWdQID0gVEFHR0VEX0hBU0hfUFJFRklYRVNbdGFnXTsKICAgIGlmICh0YWdQID09PSB2b2lkIDApIHsKICAgICAgY29uc3QgdGFnSCA9IHNoYTI1NihVaW50OEFycmF5LmZyb20odGFnLCAoYykgPT4gYy5jaGFyQ29kZUF0KDApKSk7CiAgICAgIHRhZ1AgPSBjb25jYXRCeXRlczModGFnSCwgdGFnSCk7CiAgICAgIFRBR0dFRF9IQVNIX1BSRUZJWEVTW3RhZ10gPSB0YWdQOwogICAgfQogICAgcmV0dXJuIHNoYTI1Nihjb25jYXRCeXRlczModGFnUCwgLi4ubWVzc2FnZXMpKTsKICB9CiAgZnVuY3Rpb24gc2Nobm9yckdldEV4dFB1YktleShwcml2KSB7CiAgICBsZXQgZF8gPSBzZWNwMjU2azEudXRpbHMubm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2KTsKICAgIGxldCBwID0gUG9pbnQuZnJvbVByaXZhdGVLZXkoZF8pOwogICAgY29uc3Qgc2NhbGFyID0gcC5oYXNFdmVuWSgpID8gZF8gOiBtb2ROKC1kXyk7CiAgICByZXR1cm4geyBzY2FsYXIsIGJ5dGVzOiBwb2ludFRvQnl0ZXMocCkgfTsKICB9CiAgZnVuY3Rpb24gbGlmdF94KHgpIHsKICAgIGlmICghZmUoeCkpCiAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHg6IG5lZWQgMCA8IHggPCBwIik7CiAgICBjb25zdCB4eCA9IG1vZFAoeCAqIHgpOwogICAgY29uc3QgYyA9IG1vZFAoeHggKiB4ICsgQmlnSW50KDcpKTsKICAgIGxldCB5ID0gc3FydE1vZChjKTsKICAgIGlmICh5ICUgXzJuNSAhPT0gXzBuNikKICAgICAgeSA9IG1vZFAoLXkpOwogICAgY29uc3QgcCA9IG5ldyBQb2ludCh4LCB5LCBfMW42KTsKICAgIHAuYXNzZXJ0VmFsaWRpdHkoKTsKICAgIHJldHVybiBwOwogIH0KICBmdW5jdGlvbiBjaGFsbGVuZ2UoLi4uYXJncykgewogICAgcmV0dXJuIG1vZE4oYnl0ZXNUb051bWJlckJFKHRhZ2dlZEhhc2goIkJJUDAzNDAvY2hhbGxlbmdlIiwgLi4uYXJncykpKTsKICB9CiAgZnVuY3Rpb24gc2Nobm9yckdldFB1YmxpY0tleShwcml2YXRlS2V5KSB7CiAgICByZXR1cm4gc2Nobm9yckdldEV4dFB1YktleShwcml2YXRlS2V5KS5ieXRlczsKICB9CiAgZnVuY3Rpb24gc2Nobm9yclNpZ24obWVzc2FnZSwgcHJpdmF0ZUtleSwgYXV4UmFuZCA9IHJhbmRvbUJ5dGVzKDMyKSkgewogICAgY29uc3QgbSA9IGVuc3VyZUJ5dGVzKCJtZXNzYWdlIiwgbWVzc2FnZSk7CiAgICBjb25zdCB7IGJ5dGVzOiBweCwgc2NhbGFyOiBkIH0gPSBzY2hub3JyR2V0RXh0UHViS2V5KHByaXZhdGVLZXkpOwogICAgY29uc3QgYSA9IGVuc3VyZUJ5dGVzKCJhdXhSYW5kIiwgYXV4UmFuZCwgMzIpOwogICAgY29uc3QgdCA9IG51bVRvMzJiKGQgXiBieXRlc1RvTnVtYmVyQkUodGFnZ2VkSGFzaCgiQklQMDM0MC9hdXgiLCBhKSkpOwogICAgY29uc3QgcmFuZCA9IHRhZ2dlZEhhc2goIkJJUDAzNDAvbm9uY2UiLCB0LCBweCwgbSk7CiAgICBjb25zdCBrXyA9IG1vZE4oYnl0ZXNUb051bWJlckJFKHJhbmQpKTsKICAgIGlmIChrXyA9PT0gXzBuNikKICAgICAgdGhyb3cgbmV3IEVycm9yKCJzaWduIGZhaWxlZDogayBpcyB6ZXJvIik7CiAgICBjb25zdCB7IGJ5dGVzOiByeCwgc2NhbGFyOiBrIH0gPSBzY2hub3JyR2V0RXh0UHViS2V5KGtfKTsKICAgIGNvbnN0IGUgPSBjaGFsbGVuZ2UocngsIHB4LCBtKTsKICAgIGNvbnN0IHNpZyA9IG5ldyBVaW50OEFycmF5KDY0KTsKICAgIHNpZy5zZXQocngsIDApOwogICAgc2lnLnNldChudW1UbzMyYihtb2ROKGsgKyBlICogZCkpLCAzMik7CiAgICBpZiAoIXNjaG5vcnJWZXJpZnkoc2lnLCBtLCBweCkpCiAgICAgIHRocm93IG5ldyBFcnJvcigic2lnbjogSW52YWxpZCBzaWduYXR1cmUgcHJvZHVjZWQiKTsKICAgIHJldHVybiBzaWc7CiAgfQogIGZ1bmN0aW9uIHNjaG5vcnJWZXJpZnkoc2lnbmF0dXJlLCBtZXNzYWdlLCBwdWJsaWNLZXkpIHsKICAgIGNvbnN0IHNpZyA9IGVuc3VyZUJ5dGVzKCJzaWduYXR1cmUiLCBzaWduYXR1cmUsIDY0KTsKICAgIGNvbnN0IG0gPSBlbnN1cmVCeXRlcygibWVzc2FnZSIsIG1lc3NhZ2UpOwogICAgY29uc3QgcHViID0gZW5zdXJlQnl0ZXMoInB1YmxpY0tleSIsIHB1YmxpY0tleSwgMzIpOwogICAgdHJ5IHsKICAgICAgY29uc3QgUCA9IGxpZnRfeChieXRlc1RvTnVtYmVyQkUocHViKSk7CiAgICAgIGNvbnN0IHIgPSBieXRlc1RvTnVtYmVyQkUoc2lnLnN1YmFycmF5KDAsIDMyKSk7CiAgICAgIGlmICghZmUocikpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBjb25zdCBzID0gYnl0ZXNUb051bWJlckJFKHNpZy5zdWJhcnJheSgzMiwgNjQpKTsKICAgICAgaWYgKCFnZShzKSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGNvbnN0IGUgPSBjaGFsbGVuZ2UobnVtVG8zMmIociksIHBvaW50VG9CeXRlcyhQKSwgbSk7CiAgICAgIGNvbnN0IFIgPSBHbXVsQWRkKFAsIHMsIG1vZE4oLWUpKTsKICAgICAgaWYgKCFSIHx8ICFSLmhhc0V2ZW5ZKCkgfHwgUi50b0FmZmluZSgpLnggIT09IHIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgdmFyIHNlY3AyNTZrMVAsIHNlY3AyNTZrMU4sIF8xbjYsIF8ybjUsIGRpdk5lYXJlc3QsIEZwLCBzZWNwMjU2azEsIF8wbjYsIGZlLCBnZSwgVEFHR0VEX0hBU0hfUFJFRklYRVMsIHBvaW50VG9CeXRlcywgbnVtVG8zMmIsIG1vZFAsIG1vZE4sIFBvaW50LCBHbXVsQWRkLCBzY2hub3JyLCBpc29NYXAsIG1hcFNXVSwgaHRmLCBoYXNoVG9DdXJ2ZSwgZW5jb2RlVG9DdXJ2ZTsKICB2YXIgaW5pdF9zZWNwMjU2azEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL3NlY3AyNTZrMS5qcyIoKSB7CiAgICAgIGluaXRfc2hhMjU2KCk7CiAgICAgIGluaXRfdXRpbHMyKCk7CiAgICAgIGluaXRfbW9kdWxhcigpOwogICAgICBpbml0X3dlaWVyc3RyYXNzKCk7CiAgICAgIGluaXRfdXRpbHM0KCk7CiAgICAgIGluaXRfaGFzaF90b19jdXJ2ZSgpOwogICAgICBpbml0X3Nob3J0d191dGlscygpOwogICAgICBzZWNwMjU2azFQID0gQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlZmZmZmZjMmYiKTsKICAgICAgc2VjcDI1NmsxTiA9IEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWJhYWVkY2U2YWY0OGEwM2JiZmQyNWU4Y2QwMzY0MTQxIik7CiAgICAgIF8xbjYgPSBCaWdJbnQoMSk7CiAgICAgIF8ybjUgPSBCaWdJbnQoMik7CiAgICAgIGRpdk5lYXJlc3QgPSAoYSwgYikgPT4gKGEgKyBiIC8gXzJuNSkgLyBiOwogICAgICBGcCA9IEZpZWxkKHNlY3AyNTZrMVAsIHZvaWQgMCwgdm9pZCAwLCB7IHNxcnQ6IHNxcnRNb2QgfSk7CiAgICAgIHNlY3AyNTZrMSA9IGNyZWF0ZUN1cnZlKHsKICAgICAgICBhOiBCaWdJbnQoMCksCiAgICAgICAgLy8gZXF1YXRpb24gcGFyYW1zOiBhLCBiCiAgICAgICAgYjogQmlnSW50KDcpLAogICAgICAgIC8vIFNlZW0gdG8gYmUgcmlnaWQ6IGJpdGNvaW50YWxrLm9yZy9pbmRleC5waHA/dG9waWM9Mjg5Nzk1Lm1zZzMxODM5NzUjbXNnMzE4Mzk3NQogICAgICAgIEZwLAogICAgICAgIC8vIEZpZWxkJ3MgcHJpbWU6IDJuKioyNTZuIC0gMm4qKjMybiAtIDJuKio5biAtIDJuKio4biAtIDJuKio3biAtIDJuKio2biAtIDJuKio0biAtIDFuCiAgICAgICAgbjogc2VjcDI1NmsxTiwKICAgICAgICAvLyBDdXJ2ZSBvcmRlciwgdG90YWwgY291bnQgb2YgdmFsaWQgcG9pbnRzIGluIHRoZSBmaWVsZAogICAgICAgIC8vIEJhc2UgcG9pbnQgKHgsIHkpIGFrYSBnZW5lcmF0b3IgcG9pbnQKICAgICAgICBHeDogQmlnSW50KCI1NTA2NjI2MzAyMjI3NzM0MzY2OTU3ODcxODg5NTE2ODUzNDMyNjI1MDYwMzQ1Mzc3NzU5NDE3NTUwMDE4NzM2MDM4OTExNjcyOTI0MCIpLAogICAgICAgIEd5OiBCaWdJbnQoIjMyNjcwNTEwMDIwNzU4ODE2OTc4MDgzMDg1MTMwNTA3MDQzMTg0NDcxMjczMzgwNjU5MjQzMjc1OTM4OTA0MzM1NzU3MzM3NDgyNDI0IiksCiAgICAgICAgaDogQmlnSW50KDEpLAogICAgICAgIC8vIENvZmFjdG9yCiAgICAgICAgbG93UzogdHJ1ZSwKICAgICAgICAvLyBBbGxvdyBvbmx5IGxvdy1TIHNpZ25hdHVyZXMgYnkgZGVmYXVsdCBpbiBzaWduKCkgYW5kIHZlcmlmeSgpCiAgICAgICAgLyoqCiAgICAgICAgICogc2VjcDI1NmsxIGJlbG9uZ3MgdG8gS29ibGl0eiBjdXJ2ZXM6IGl0IGhhcyBlZmZpY2llbnRseSBjb21wdXRhYmxlIGVuZG9tb3JwaGlzbS4KICAgICAgICAgKiBFbmRvbW9ycGhpc20gdXNlcyAyeCBsZXNzIFJBTSwgc3BlZWRzIHVwIHByZWNvbXB1dGF0aW9uIGJ5IDJ4IGFuZCBFQ0RIIC8ga2V5IHJlY292ZXJ5IGJ5IDIwJS4KICAgICAgICAgKiBGb3IgcHJlY29tcHV0ZWQgd05BRiBpdCB0cmFkZXMgb2ZmIDEvMiBpbml0IHRpbWUgJiAxLzMgcmFtIGZvciAyMCUgcGVyZiBoaXQuCiAgICAgICAgICogRXhwbGFuYXRpb246IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3BhdWxtaWxsci9lYjY3MDgwNjc5M2U4NGRmNjI4YTdjNDM0YTg3MzA2NgogICAgICAgICAqLwogICAgICAgIGVuZG86IHsKICAgICAgICAgIGJldGE6IEJpZ0ludCgiMHg3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIiksCiAgICAgICAgICBzcGxpdFNjYWxhcjogKGspID0+IHsKICAgICAgICAgICAgY29uc3QgbiA9IHNlY3AyNTZrMU47CiAgICAgICAgICAgIGNvbnN0IGExID0gQmlnSW50KCIweDMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1Iik7CiAgICAgICAgICAgIGNvbnN0IGIxID0gLV8xbjYgKiBCaWdJbnQoIjB4ZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMiKTsKICAgICAgICAgICAgY29uc3QgYTIgPSBCaWdJbnQoIjB4MTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4Iik7CiAgICAgICAgICAgIGNvbnN0IGIyID0gYTE7CiAgICAgICAgICAgIGNvbnN0IFBPV18yXzEyOCA9IEJpZ0ludCgiMHgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKTsKICAgICAgICAgICAgY29uc3QgYzEgPSBkaXZOZWFyZXN0KGIyICogaywgbik7CiAgICAgICAgICAgIGNvbnN0IGMyID0gZGl2TmVhcmVzdCgtYjEgKiBrLCBuKTsKICAgICAgICAgICAgbGV0IGsxID0gbW9kKGsgLSBjMSAqIGExIC0gYzIgKiBhMiwgbik7CiAgICAgICAgICAgIGxldCBrMiA9IG1vZCgtYzEgKiBiMSAtIGMyICogYjIsIG4pOwogICAgICAgICAgICBjb25zdCBrMW5lZyA9IGsxID4gUE9XXzJfMTI4OwogICAgICAgICAgICBjb25zdCBrMm5lZyA9IGsyID4gUE9XXzJfMTI4OwogICAgICAgICAgICBpZiAoazFuZWcpCiAgICAgICAgICAgICAgazEgPSBuIC0gazE7CiAgICAgICAgICAgIGlmIChrMm5lZykKICAgICAgICAgICAgICBrMiA9IG4gLSBrMjsKICAgICAgICAgICAgaWYgKGsxID4gUE9XXzJfMTI4IHx8IGsyID4gUE9XXzJfMTI4KSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJzcGxpdFNjYWxhcjogRW5kb21vcnBoaXNtIGZhaWxlZCwgaz0iICsgayk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHsgazFuZWcsIGsxLCBrMm5lZywgazIgfTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sIHNoYTI1Nik7CiAgICAgIF8wbjYgPSBCaWdJbnQoMCk7CiAgICAgIGZlID0gKHgpID0+IHR5cGVvZiB4ID09PSAiYmlnaW50IiAmJiBfMG42IDwgeCAmJiB4IDwgc2VjcDI1NmsxUDsKICAgICAgZ2UgPSAoeCkgPT4gdHlwZW9mIHggPT09ICJiaWdpbnQiICYmIF8wbjYgPCB4ICYmIHggPCBzZWNwMjU2azFOOwogICAgICBUQUdHRURfSEFTSF9QUkVGSVhFUyA9IHt9OwogICAgICBwb2ludFRvQnl0ZXMgPSAocG9pbnQpID0+IHBvaW50LnRvUmF3Qnl0ZXModHJ1ZSkuc2xpY2UoMSk7CiAgICAgIG51bVRvMzJiID0gKG4pID0+IG51bWJlclRvQnl0ZXNCRShuLCAzMik7CiAgICAgIG1vZFAgPSAoeCkgPT4gbW9kKHgsIHNlY3AyNTZrMVApOwogICAgICBtb2ROID0gKHgpID0+IG1vZCh4LCBzZWNwMjU2azFOKTsKICAgICAgUG9pbnQgPSBzZWNwMjU2azEuUHJvamVjdGl2ZVBvaW50OwogICAgICBHbXVsQWRkID0gKFEsIGEsIGIpID0+IFBvaW50LkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoUSwgYSwgYik7CiAgICAgIHNjaG5vcnIgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+ICh7CiAgICAgICAgZ2V0UHVibGljS2V5OiBzY2hub3JyR2V0UHVibGljS2V5LAogICAgICAgIHNpZ246IHNjaG5vcnJTaWduLAogICAgICAgIHZlcmlmeTogc2Nobm9yclZlcmlmeSwKICAgICAgICB1dGlsczogewogICAgICAgICAgcmFuZG9tUHJpdmF0ZUtleTogc2VjcDI1NmsxLnV0aWxzLnJhbmRvbVByaXZhdGVLZXksCiAgICAgICAgICBsaWZ0X3gsCiAgICAgICAgICBwb2ludFRvQnl0ZXMsCiAgICAgICAgICBudW1iZXJUb0J5dGVzQkUsCiAgICAgICAgICBieXRlc1RvTnVtYmVyQkUsCiAgICAgICAgICB0YWdnZWRIYXNoLAogICAgICAgICAgbW9kCiAgICAgICAgfQogICAgICB9KSkoKTsKICAgICAgaXNvTWFwID0gLyogQF9fUFVSRV9fICovICgoKSA9PiBpc29nZW55TWFwKEZwLCBbCiAgICAgICAgLy8geE51bQogICAgICAgIFsKICAgICAgICAgICIweDhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhkYWFhYWE4YzciLAogICAgICAgICAgIjB4N2QzZDRjODBiYzMyMWQ1YjlmMzE1Y2VhN2ZkNDRjNWQ1OTVkMmZjMGJmNjNiOTJkZmZmMTA0NGYxN2M2NTgxIiwKICAgICAgICAgICIweDUzNGMzMjhkMjNmMjM0ZTZlMmE0MTNkZWNhMjVjYWVjZTQ1MDYxNDQwMzdjNDAzMTRlY2JkMGI1M2Q5ZGQyNjIiLAogICAgICAgICAgIjB4OGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGRhYWFhYTg4YyIKICAgICAgICBdLAogICAgICAgIC8vIHhEZW4KICAgICAgICBbCiAgICAgICAgICAiMHhkMzU3NzExOTNkOTQ5MThhOWNhMzRjY2JiN2I2NDBkZDg2Y2Q0MDk1NDJmODQ4N2Q5ZmU2Yjc0NTc4MWViNDliIiwKICAgICAgICAgICIweGVkYWRjNmY2NDM4M2RjMWRmN2M0YjJkNTFiNTQyMjU0MDZkMzZiNjQxZjVlNDFiYmM1MmE1NjYxMmE4YzZkMTQiLAogICAgICAgICAgIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIKICAgICAgICAgIC8vIExBU1QgMQogICAgICAgIF0sCiAgICAgICAgLy8geU51bQogICAgICAgIFsKICAgICAgICAgICIweDRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiOGUzOGUyM2MiLAogICAgICAgICAgIjB4Yzc1ZTBjMzJkNWNiN2MwZmE5ZDBhNTRiMTJhMGE2ZDU2NDdhYjA0NmQ2ODZkYTZmZGZmYzkwZmMyMDFkNzFhMyIsCiAgICAgICAgICAiMHgyOWE2MTk0NjkxZjkxYTczNzE1MjA5ZWY2NTEyZTU3NjcyMjgzMGEyMDFiZTIwMThhNzY1ZTg1YTllY2VlOTMxIiwKICAgICAgICAgICIweDJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmMzhlMzhkODQiCiAgICAgICAgXSwKICAgICAgICAvLyB5RGVuCiAgICAgICAgWwogICAgICAgICAgIjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZjkzYiIsCiAgICAgICAgICAiMHg3YTA2NTM0YmI4YmRiNDlmZDVlOWU2NjMyNzIyYzI5ODk0NjdjMWJmYzhlOGQ5NzhkZmI0MjVkMjY4NWMyNTczIiwKICAgICAgICAgICIweDY0ODRhYTcxNjU0NWNhMmNmM2E3MGMzZmE4ZmUzMzdlMGEzZDIxMTYyZjBkNjI5OWE3YmY4MTkyYmZkMmE3NmYiLAogICAgICAgICAgIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIKICAgICAgICAgIC8vIExBU1QgMQogICAgICAgIF0KICAgICAgXS5tYXAoKGkpID0+IGkubWFwKChqKSA9PiBCaWdJbnQoaikpKSkpKCk7CiAgICAgIG1hcFNXVSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gbWFwVG9DdXJ2ZVNpbXBsZVNXVShGcCwgewogICAgICAgIEE6IEJpZ0ludCgiMHgzZjg3MzFhYmRkNjYxYWRjYTA4YTU1NThmMGY1ZDI3MmU5NTNkMzYzY2I2ZjBlNWQ0MDU0NDdjMDFhNDQ0NTMzIiksCiAgICAgICAgQjogQmlnSW50KCIxNzcxIiksCiAgICAgICAgWjogRnAuY3JlYXRlKEJpZ0ludCgiLTExIikpCiAgICAgIH0pKSgpOwogICAgICBodGYgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IGNyZWF0ZUhhc2hlcihzZWNwMjU2azEuUHJvamVjdGl2ZVBvaW50LCAoc2NhbGFycykgPT4gewogICAgICAgIGNvbnN0IHsgeCwgeSB9ID0gbWFwU1dVKEZwLmNyZWF0ZShzY2FsYXJzWzBdKSk7CiAgICAgICAgcmV0dXJuIGlzb01hcCh4LCB5KTsKICAgICAgfSwgewogICAgICAgIERTVDogInNlY3AyNTZrMV9YTUQ6U0hBLTI1Nl9TU1dVX1JPXyIsCiAgICAgICAgZW5jb2RlRFNUOiAic2VjcDI1NmsxX1hNRDpTSEEtMjU2X1NTV1VfTlVfIiwKICAgICAgICBwOiBGcC5PUkRFUiwKICAgICAgICBtOiAxLAogICAgICAgIGs6IDEyOCwKICAgICAgICBleHBhbmQ6ICJ4bWQiLAogICAgICAgIGhhc2g6IHNoYTI1NgogICAgICB9KSkoKTsKICAgICAgaGFzaFRvQ3VydmUgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IGh0Zi5oYXNoVG9DdXJ2ZSkoKTsKICAgICAgZW5jb2RlVG9DdXJ2ZSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gaHRmLmVuY29kZVRvQ3VydmUpKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL25vZGUuanMKICB2YXIgRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvciwgRmVlQ2FwVG9vSGlnaEVycm9yLCBGZWVDYXBUb29Mb3dFcnJvciwgTm9uY2VUb29IaWdoRXJyb3IsIE5vbmNlVG9vTG93RXJyb3IsIE5vbmNlTWF4VmFsdWVFcnJvciwgSW5zdWZmaWNpZW50RnVuZHNFcnJvciwgSW50cmluc2ljR2FzVG9vSGlnaEVycm9yLCBJbnRyaW5zaWNHYXNUb29Mb3dFcnJvciwgVHJhbnNhY3Rpb25UeXBlTm90U3VwcG9ydGVkRXJyb3IsIFRpcEFib3ZlRmVlQ2FwRXJyb3IsIFVua25vd25Ob2RlRXJyb3I7CiAgdmFyIGluaXRfbm9kZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9ub2RlLmpzIigpIHsKICAgICAgaW5pdF9mb3JtYXRHd2VpKCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBFeGVjdXRpb25SZXZlcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhdXNlLCBtZXNzYWdlIH0gPSB7fSkgewogICAgICAgICAgY29uc3QgcmVhc29uID0gbWVzc2FnZT8ucmVwbGFjZSgiZXhlY3V0aW9uIHJldmVydGVkOiAiLCAiIik/LnJlcGxhY2UoImV4ZWN1dGlvbiByZXZlcnRlZCIsICIiKTsKICAgICAgICAgIHN1cGVyKGBFeGVjdXRpb24gcmV2ZXJ0ZWQgJHtyZWFzb24gPyBgd2l0aCByZWFzb246ICR7cmVhc29ufWAgOiAiZm9yIGFuIHVua25vd24gcmVhc29uIn0uYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkV4ZWN1dGlvblJldmVydGVkRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeGVjdXRpb25SZXZlcnRlZEVycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogMwogICAgICB9KTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4ZWN1dGlvblJldmVydGVkRXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL2V4ZWN1dGlvbiByZXZlcnRlZC8KICAgICAgfSk7CiAgICAgIEZlZUNhcFRvb0hpZ2hFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgbWF4RmVlUGVyR2FzIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYFRoZSBmZWUgY2FwIChcYG1heEZlZVBlckdhc1xgJHttYXhGZWVQZXJHYXMgPyBgID0gJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9IGd3ZWlgIDogIiJ9KSBjYW5ub3QgYmUgaGlnaGVyIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZSAoMl4yNTYtMSkuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkZlZUNhcFRvb0hpZ2hFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZlZUNhcFRvb0hpZ2hFcnJvciwgIm5vZGVNZXNzYWdlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAvbWF4IGZlZSBwZXIgZ2FzIGhpZ2hlciB0aGFuIDJcXjI1Ni0xfGZlZSBjYXAgaGlnaGVyIHRoYW4gMlxeMjU2LTEvCiAgICAgIH0pOwogICAgICBGZWVDYXBUb29Mb3dFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgbWF4RmVlUGVyR2FzIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYFRoZSBmZWUgY2FwIChcYG1heEZlZVBlckdhc1xgJHttYXhGZWVQZXJHYXMgPyBgID0gJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9YCA6ICIifSBnd2VpKSBjYW5ub3QgYmUgbG93ZXIgdGhhbiB0aGUgYmxvY2sgYmFzZSBmZWUuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkZlZUNhcFRvb0xvd0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmVlQ2FwVG9vTG93RXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL21heCBmZWUgcGVyIGdhcyBsZXNzIHRoYW4gYmxvY2sgYmFzZSBmZWV8ZmVlIGNhcCBsZXNzIHRoYW4gYmxvY2sgYmFzZSBmZWV8dHJhbnNhY3Rpb24gaXMgb3V0ZGF0ZWQvCiAgICAgIH0pOwogICAgICBOb25jZVRvb0hpZ2hFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgbm9uY2UgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihgTm9uY2UgcHJvdmlkZWQgZm9yIHRoZSB0cmFuc2FjdGlvbiAke25vbmNlID8gYCgke25vbmNlfSkgYCA6ICIifWlzIGhpZ2hlciB0aGFuIHRoZSBuZXh0IG9uZSBleHBlY3RlZC5gLCB7IGNhdXNlLCBuYW1lOiAiTm9uY2VUb29IaWdoRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vbmNlVG9vSGlnaEVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC9ub25jZSB0b28gaGlnaC8KICAgICAgfSk7CiAgICAgIE5vbmNlVG9vTG93RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2F1c2UsIG5vbmNlIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgTm9uY2UgcHJvdmlkZWQgZm9yIHRoZSB0cmFuc2FjdGlvbiAke25vbmNlID8gYCgke25vbmNlfSkgYCA6ICIifWlzIGxvd2VyIHRoYW4gdGhlIGN1cnJlbnQgbm9uY2Ugb2YgdGhlIGFjY291bnQuYCwKICAgICAgICAgICAgIlRyeSBpbmNyZWFzaW5nIHRoZSBub25jZSBvciBmaW5kIHRoZSBsYXRlc3Qgbm9uY2Ugd2l0aCBgZ2V0VHJhbnNhY3Rpb25Db3VudGAuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IGNhdXNlLCBuYW1lOiAiTm9uY2VUb29Mb3dFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9uY2VUb29Mb3dFcnJvciwgIm5vZGVNZXNzYWdlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAvbm9uY2UgdG9vIGxvd3x0cmFuc2FjdGlvbiBhbHJlYWR5IGltcG9ydGVkfGFscmVhZHkga25vd24vCiAgICAgIH0pOwogICAgICBOb25jZU1heFZhbHVlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2F1c2UsIG5vbmNlIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYE5vbmNlIHByb3ZpZGVkIGZvciB0aGUgdHJhbnNhY3Rpb24gJHtub25jZSA/IGAoJHtub25jZX0pIGAgOiAiIn1leGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbm9uY2UuYCwgeyBjYXVzZSwgbmFtZTogIk5vbmNlTWF4VmFsdWVFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9uY2VNYXhWYWx1ZUVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC9ub25jZSBoYXMgbWF4IHZhbHVlLwogICAgICB9KTsKICAgICAgSW5zdWZmaWNpZW50RnVuZHNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSB9ID0ge30pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgIlRoZSB0b3RhbCBjb3N0IChnYXMgKiBnYXMgZmVlICsgdmFsdWUpIG9mIGV4ZWN1dGluZyB0aGlzIHRyYW5zYWN0aW9uIGV4Y2VlZHMgdGhlIGJhbGFuY2Ugb2YgdGhlIGFjY291bnQuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAiVGhpcyBlcnJvciBjb3VsZCBhcmlzZSB3aGVuIHRoZSBhY2NvdW50IGRvZXMgbm90IGhhdmUgZW5vdWdoIGZ1bmRzIHRvOiIsCiAgICAgICAgICAgICAgIiAtIHBheSBmb3IgdGhlIHRvdGFsIGdhcyBmZWUsIiwKICAgICAgICAgICAgICAiIC0gcGF5IGZvciB0aGUgdmFsdWUgdG8gc2VuZC4iLAogICAgICAgICAgICAgICIgIiwKICAgICAgICAgICAgICAiVGhlIGNvc3Qgb2YgdGhlIHRyYW5zYWN0aW9uIGlzIGNhbGN1bGF0ZWQgYXMgYGdhcyAqIGdhcyBmZWUgKyB2YWx1ZWAsIHdoZXJlOiIsCiAgICAgICAgICAgICAgIiAtIGBnYXNgIGlzIHRoZSBhbW91bnQgb2YgZ2FzIG5lZWRlZCBmb3IgdHJhbnNhY3Rpb24gdG8gZXhlY3V0ZSwiLAogICAgICAgICAgICAgICIgLSBgZ2FzIGZlZWAgaXMgdGhlIGdhcyBmZWUsIiwKICAgICAgICAgICAgICAiIC0gYHZhbHVlYCBpcyB0aGUgYW1vdW50IG9mIGV0aGVyIHRvIHNlbmQgdG8gdGhlIHJlY2lwaWVudC4iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG5hbWU6ICJJbnN1ZmZpY2llbnRGdW5kc0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5zdWZmaWNpZW50RnVuZHNFcnJvciwgIm5vZGVNZXNzYWdlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAvaW5zdWZmaWNpZW50IGZ1bmRzLwogICAgICB9KTsKICAgICAgSW50cmluc2ljR2FzVG9vSGlnaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhdXNlLCBnYXMgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihgVGhlIGFtb3VudCBvZiBnYXMgJHtnYXMgPyBgKCR7Z2FzfSkgYCA6ICIifXByb3ZpZGVkIGZvciB0aGUgdHJhbnNhY3Rpb24gZXhjZWVkcyB0aGUgbGltaXQgYWxsb3dlZCBmb3IgdGhlIGJsb2NrLmAsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIG5hbWU6ICJJbnRyaW5zaWNHYXNUb29IaWdoRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRyaW5zaWNHYXNUb29IaWdoRXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL2ludHJpbnNpYyBnYXMgdG9vIGhpZ2h8Z2FzIGxpbWl0IHJlYWNoZWQvCiAgICAgIH0pOwogICAgICBJbnRyaW5zaWNHYXNUb29Mb3dFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgZ2FzIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYFRoZSBhbW91bnQgb2YgZ2FzICR7Z2FzID8gYCgke2dhc30pIGAgOiAiIn1wcm92aWRlZCBmb3IgdGhlIHRyYW5zYWN0aW9uIGlzIHRvbyBsb3cuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkludHJpbnNpY0dhc1Rvb0xvd0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW50cmluc2ljR2FzVG9vTG93RXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL2ludHJpbnNpYyBnYXMgdG9vIGxvdy8KICAgICAgfSk7CiAgICAgIFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhdXNlIH0pIHsKICAgICAgICAgIHN1cGVyKCJUaGUgdHJhbnNhY3Rpb24gdHlwZSBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGNoYWluLiIsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIG5hbWU6ICJUcmFuc2FjdGlvblR5cGVOb3RTdXBwb3J0ZWRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC90cmFuc2FjdGlvbiB0eXBlIG5vdCB2YWxpZC8KICAgICAgfSk7CiAgICAgIFRpcEFib3ZlRmVlQ2FwRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2F1c2UsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBtYXhGZWVQZXJHYXMgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBUaGUgcHJvdmlkZWQgdGlwIChcYG1heFByaW9yaXR5RmVlUGVyR2FzXGAke21heFByaW9yaXR5RmVlUGVyR2FzID8gYCA9ICR7Zm9ybWF0R3dlaShtYXhQcmlvcml0eUZlZVBlckdhcyl9IGd3ZWlgIDogIiJ9KSBjYW5ub3QgYmUgaGlnaGVyIHRoYW4gdGhlIGZlZSBjYXAgKFxgbWF4RmVlUGVyR2FzXGAke21heEZlZVBlckdhcyA/IGAgPSAke2Zvcm1hdEd3ZWkobWF4RmVlUGVyR2FzKX0gZ3dlaWAgOiAiIn0pLmAKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIlRpcEFib3ZlRmVlQ2FwRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUaXBBYm92ZUZlZUNhcEVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC9tYXggcHJpb3JpdHkgZmVlIHBlciBnYXMgaGlnaGVyIHRoYW4gbWF4IGZlZSBwZXIgZ2FzfHRpcCBoaWdoZXIgdGhhbiBmZWUgY2FwLwogICAgICB9KTsKICAgICAgVW5rbm93bk5vZGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSB9KSB7CiAgICAgICAgICBzdXBlcihgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZXhlY3V0aW5nOiAke2NhdXNlPy5zaG9ydE1lc3NhZ2V9YCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIlVua25vd25Ob2RlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZXJyb3JzL2dldE5vZGVFcnJvci5qcwogIGZ1bmN0aW9uIGdldE5vZGVFcnJvcihlcnIsIGFyZ3MpIHsKICAgIGNvbnN0IG1lc3NhZ2UgPSAoZXJyLmRldGFpbHMgfHwgIiIpLnRvTG93ZXJDYXNlKCk7CiAgICBjb25zdCBleGVjdXRpb25SZXZlcnRlZEVycm9yID0gZXJyIGluc3RhbmNlb2YgQmFzZUVycm9yMiA/IGVyci53YWxrKChlKSA9PiBlLmNvZGUgPT09IEV4ZWN1dGlvblJldmVydGVkRXJyb3IuY29kZSkgOiBlcnI7CiAgICBpZiAoZXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvciBpbnN0YW5jZW9mIEJhc2VFcnJvcjIpCiAgICAgIHJldHVybiBuZXcgRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvcih7CiAgICAgICAgY2F1c2U6IGVyciwKICAgICAgICBtZXNzYWdlOiBleGVjdXRpb25SZXZlcnRlZEVycm9yLmRldGFpbHMKICAgICAgfSk7CiAgICBpZiAoRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IEV4ZWN1dGlvblJldmVydGVkRXJyb3IoewogICAgICAgIGNhdXNlOiBlcnIsCiAgICAgICAgbWVzc2FnZTogZXJyLmRldGFpbHMKICAgICAgfSk7CiAgICBpZiAoRmVlQ2FwVG9vSGlnaEVycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgRmVlQ2FwVG9vSGlnaEVycm9yKHsKICAgICAgICBjYXVzZTogZXJyLAogICAgICAgIG1heEZlZVBlckdhczogYXJncz8ubWF4RmVlUGVyR2FzCiAgICAgIH0pOwogICAgaWYgKEZlZUNhcFRvb0xvd0Vycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgRmVlQ2FwVG9vTG93RXJyb3IoewogICAgICAgIGNhdXNlOiBlcnIsCiAgICAgICAgbWF4RmVlUGVyR2FzOiBhcmdzPy5tYXhGZWVQZXJHYXMKICAgICAgfSk7CiAgICBpZiAoTm9uY2VUb29IaWdoRXJyb3Iubm9kZU1lc3NhZ2UudGVzdChtZXNzYWdlKSkKICAgICAgcmV0dXJuIG5ldyBOb25jZVRvb0hpZ2hFcnJvcih7IGNhdXNlOiBlcnIsIG5vbmNlOiBhcmdzPy5ub25jZSB9KTsKICAgIGlmIChOb25jZVRvb0xvd0Vycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgTm9uY2VUb29Mb3dFcnJvcih7IGNhdXNlOiBlcnIsIG5vbmNlOiBhcmdzPy5ub25jZSB9KTsKICAgIGlmIChOb25jZU1heFZhbHVlRXJyb3Iubm9kZU1lc3NhZ2UudGVzdChtZXNzYWdlKSkKICAgICAgcmV0dXJuIG5ldyBOb25jZU1heFZhbHVlRXJyb3IoeyBjYXVzZTogZXJyLCBub25jZTogYXJncz8ubm9uY2UgfSk7CiAgICBpZiAoSW5zdWZmaWNpZW50RnVuZHNFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IEluc3VmZmljaWVudEZ1bmRzRXJyb3IoeyBjYXVzZTogZXJyIH0pOwogICAgaWYgKEludHJpbnNpY0dhc1Rvb0hpZ2hFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IEludHJpbnNpY0dhc1Rvb0hpZ2hFcnJvcih7IGNhdXNlOiBlcnIsIGdhczogYXJncz8uZ2FzIH0pOwogICAgaWYgKEludHJpbnNpY0dhc1Rvb0xvd0Vycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgSW50cmluc2ljR2FzVG9vTG93RXJyb3IoeyBjYXVzZTogZXJyLCBnYXM6IGFyZ3M/LmdhcyB9KTsKICAgIGlmIChUcmFuc2FjdGlvblR5cGVOb3RTdXBwb3J0ZWRFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yKHsgY2F1c2U6IGVyciB9KTsKICAgIGlmIChUaXBBYm92ZUZlZUNhcEVycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgVGlwQWJvdmVGZWVDYXBFcnJvcih7CiAgICAgICAgY2F1c2U6IGVyciwKICAgICAgICBtYXhGZWVQZXJHYXM6IGFyZ3M/Lm1heEZlZVBlckdhcywKICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogYXJncz8ubWF4UHJpb3JpdHlGZWVQZXJHYXMKICAgICAgfSk7CiAgICByZXR1cm4gbmV3IFVua25vd25Ob2RlRXJyb3IoewogICAgICBjYXVzZTogZXJyCiAgICB9KTsKICB9CiAgdmFyIGluaXRfZ2V0Tm9kZUVycm9yID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZXJyb3JzL2dldE5vZGVFcnJvci5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X25vZGUoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2V4dHJhY3QuanMKICBmdW5jdGlvbiBleHRyYWN0KHZhbHVlXywgeyBmb3JtYXQgfSkgewogICAgaWYgKCFmb3JtYXQpCiAgICAgIHJldHVybiB7fTsKICAgIGNvbnN0IHZhbHVlID0ge307CiAgICBmdW5jdGlvbiBleHRyYWN0Xyhmb3JtYXR0ZWQyKSB7CiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmb3JtYXR0ZWQyKTsKICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykgewogICAgICAgIGlmIChrZXkgaW4gdmFsdWVfKQogICAgICAgICAgdmFsdWVba2V5XSA9IHZhbHVlX1trZXldOwogICAgICAgIGlmIChmb3JtYXR0ZWQyW2tleV0gJiYgdHlwZW9mIGZvcm1hdHRlZDJba2V5XSA9PT0gIm9iamVjdCIgJiYgIUFycmF5LmlzQXJyYXkoZm9ybWF0dGVkMltrZXldKSkKICAgICAgICAgIGV4dHJhY3RfKGZvcm1hdHRlZDJba2V5XSk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdCh2YWx1ZV8gfHwge30pOwogICAgZXh0cmFjdF8oZm9ybWF0dGVkKTsKICAgIHJldHVybiB2YWx1ZTsKICB9CiAgdmFyIGluaXRfZXh0cmFjdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Zvcm1hdHRlcnMvZXh0cmFjdC5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZm9ybWF0dGVycy9mb3JtYXR0ZXIuanMKICBmdW5jdGlvbiBkZWZpbmVGb3JtYXR0ZXIodHlwZSwgZm9ybWF0KSB7CiAgICByZXR1cm4gKHsgZXhjbHVkZSwgZm9ybWF0OiBvdmVycmlkZXMgfSkgPT4gewogICAgICByZXR1cm4gewogICAgICAgIGV4Y2x1ZGUsCiAgICAgICAgZm9ybWF0OiAoYXJncykgPT4gewogICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0KGFyZ3MpOwogICAgICAgICAgaWYgKGV4Y2x1ZGUpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZXhjbHVkZSkgewogICAgICAgICAgICAgIGRlbGV0ZSBmb3JtYXR0ZWRba2V5XTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgLi4uZm9ybWF0dGVkLAogICAgICAgICAgICAuLi5vdmVycmlkZXMoYXJncykKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICB0eXBlCiAgICAgIH07CiAgICB9OwogIH0KICB2YXIgaW5pdF9mb3JtYXR0ZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2Zvcm1hdHRlci5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZm9ybWF0dGVycy90cmFuc2FjdGlvblJlcXVlc3QuanMKICBmdW5jdGlvbiBmb3JtYXRUcmFuc2FjdGlvblJlcXVlc3QocmVxdWVzdCkgewogICAgY29uc3QgcnBjUmVxdWVzdCA9IHt9OwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LmF1dGhvcml6YXRpb25MaXN0ICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5hdXRob3JpemF0aW9uTGlzdCA9IGZvcm1hdEF1dGhvcml6YXRpb25MaXN0KHJlcXVlc3QuYXV0aG9yaXphdGlvbkxpc3QpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LmFjY2Vzc0xpc3QgIT09ICJ1bmRlZmluZWQiKQogICAgICBycGNSZXF1ZXN0LmFjY2Vzc0xpc3QgPSByZXF1ZXN0LmFjY2Vzc0xpc3Q7CiAgICBpZiAodHlwZW9mIHJlcXVlc3QuYmxvYlZlcnNpb25lZEhhc2hlcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QuYmxvYlZlcnNpb25lZEhhc2hlcyA9IHJlcXVlc3QuYmxvYlZlcnNpb25lZEhhc2hlczsKICAgIGlmICh0eXBlb2YgcmVxdWVzdC5ibG9icyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0LmJsb2JzWzBdICE9PSAic3RyaW5nIikKICAgICAgICBycGNSZXF1ZXN0LmJsb2JzID0gcmVxdWVzdC5ibG9icy5tYXAoKHgpID0+IGJ5dGVzVG9IZXgoeCkpOwogICAgICBlbHNlCiAgICAgICAgcnBjUmVxdWVzdC5ibG9icyA9IHJlcXVlc3QuYmxvYnM7CiAgICB9CiAgICBpZiAodHlwZW9mIHJlcXVlc3QuZGF0YSAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QuZGF0YSA9IHJlcXVlc3QuZGF0YTsKICAgIGlmICh0eXBlb2YgcmVxdWVzdC5mcm9tICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5mcm9tID0gcmVxdWVzdC5mcm9tOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LmdhcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QuZ2FzID0gbnVtYmVyVG9IZXgocmVxdWVzdC5nYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lmdhc1ByaWNlICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5nYXNQcmljZSA9IG51bWJlclRvSGV4KHJlcXVlc3QuZ2FzUHJpY2UpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm1heEZlZVBlckJsb2JHYXMgIT09ICJ1bmRlZmluZWQiKQogICAgICBycGNSZXF1ZXN0Lm1heEZlZVBlckJsb2JHYXMgPSBudW1iZXJUb0hleChyZXF1ZXN0Lm1heEZlZVBlckJsb2JHYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm1heEZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QubWF4RmVlUGVyR2FzID0gbnVtYmVyVG9IZXgocmVxdWVzdC5tYXhGZWVQZXJHYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm1heFByaW9yaXR5RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5tYXhQcmlvcml0eUZlZVBlckdhcyA9IG51bWJlclRvSGV4KHJlcXVlc3QubWF4UHJpb3JpdHlGZWVQZXJHYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm5vbmNlICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5ub25jZSA9IG51bWJlclRvSGV4KHJlcXVlc3Qubm9uY2UpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LnRvICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC50byA9IHJlcXVlc3QudG87CiAgICBpZiAodHlwZW9mIHJlcXVlc3QudHlwZSAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QudHlwZSA9IHJwY1RyYW5zYWN0aW9uVHlwZVtyZXF1ZXN0LnR5cGVdOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LnZhbHVlICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC52YWx1ZSA9IG51bWJlclRvSGV4KHJlcXVlc3QudmFsdWUpOwogICAgcmV0dXJuIHJwY1JlcXVlc3Q7CiAgfQogIGZ1bmN0aW9uIGZvcm1hdEF1dGhvcml6YXRpb25MaXN0KGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICByZXR1cm4gYXV0aG9yaXphdGlvbkxpc3QubWFwKChhdXRob3JpemF0aW9uKSA9PiAoewogICAgICBhZGRyZXNzOiBhdXRob3JpemF0aW9uLmNvbnRyYWN0QWRkcmVzcywKICAgICAgcjogYXV0aG9yaXphdGlvbi5yLAogICAgICBzOiBhdXRob3JpemF0aW9uLnMsCiAgICAgIGNoYWluSWQ6IG51bWJlclRvSGV4KGF1dGhvcml6YXRpb24uY2hhaW5JZCksCiAgICAgIG5vbmNlOiBudW1iZXJUb0hleChhdXRob3JpemF0aW9uLm5vbmNlKSwKICAgICAgLi4udHlwZW9mIGF1dGhvcml6YXRpb24ueVBhcml0eSAhPT0gInVuZGVmaW5lZCIgPyB7IHlQYXJpdHk6IG51bWJlclRvSGV4KGF1dGhvcml6YXRpb24ueVBhcml0eSkgfSA6IHt9LAogICAgICAuLi50eXBlb2YgYXV0aG9yaXphdGlvbi52ICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgYXV0aG9yaXphdGlvbi55UGFyaXR5ID09PSAidW5kZWZpbmVkIiA/IHsgdjogbnVtYmVyVG9IZXgoYXV0aG9yaXphdGlvbi52KSB9IDoge30KICAgIH0pKTsKICB9CiAgdmFyIHJwY1RyYW5zYWN0aW9uVHlwZSwgZGVmaW5lVHJhbnNhY3Rpb25SZXF1ZXN0OwogIHZhciBpbml0X3RyYW5zYWN0aW9uUmVxdWVzdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Zvcm1hdHRlcnMvdHJhbnNhY3Rpb25SZXF1ZXN0LmpzIigpIHsKICAgICAgaW5pdF90b0hleCgpOwogICAgICBpbml0X2Zvcm1hdHRlcigpOwogICAgICBycGNUcmFuc2FjdGlvblR5cGUgPSB7CiAgICAgICAgbGVnYWN5OiAiMHgwIiwKICAgICAgICBlaXAyOTMwOiAiMHgxIiwKICAgICAgICBlaXAxNTU5OiAiMHgyIiwKICAgICAgICBlaXA0ODQ0OiAiMHgzIiwKICAgICAgICBlaXA3NzAyOiAiMHg0IgogICAgICB9OwogICAgICBkZWZpbmVUcmFuc2FjdGlvblJlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lRm9ybWF0dGVyKCJ0cmFuc2FjdGlvblJlcXVlc3QiLCBmb3JtYXRUcmFuc2FjdGlvblJlcXVlc3QpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3N0YXRlT3ZlcnJpZGUuanMKICBmdW5jdGlvbiBzZXJpYWxpemVTdGF0ZU1hcHBpbmcoc3RhdGVNYXBwaW5nKSB7CiAgICBpZiAoIXN0YXRlTWFwcGluZyB8fCBzdGF0ZU1hcHBpbmcubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gdm9pZCAwOwogICAgcmV0dXJuIHN0YXRlTWFwcGluZy5yZWR1Y2UoKGFjYywgeyBzbG90LCB2YWx1ZSB9KSA9PiB7CiAgICAgIGlmIChzbG90Lmxlbmd0aCAhPT0gNjYpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRCeXRlc0xlbmd0aEVycm9yKHsKICAgICAgICAgIHNpemU6IHNsb3QubGVuZ3RoLAogICAgICAgICAgdGFyZ2V0U2l6ZTogNjYsCiAgICAgICAgICB0eXBlOiAiaGV4IgogICAgICAgIH0pOwogICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSA2NikKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEJ5dGVzTGVuZ3RoRXJyb3IoewogICAgICAgICAgc2l6ZTogdmFsdWUubGVuZ3RoLAogICAgICAgICAgdGFyZ2V0U2l6ZTogNjYsCiAgICAgICAgICB0eXBlOiAiaGV4IgogICAgICAgIH0pOwogICAgICBhY2Nbc2xvdF0gPSB2YWx1ZTsKICAgICAgcmV0dXJuIGFjYzsKICAgIH0sIHt9KTsKICB9CiAgZnVuY3Rpb24gc2VyaWFsaXplQWNjb3VudFN0YXRlT3ZlcnJpZGUocGFyYW1ldGVycykgewogICAgY29uc3QgeyBiYWxhbmNlLCBub25jZSwgc3RhdGUsIHN0YXRlRGlmZiwgY29kZSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlID0ge307CiAgICBpZiAoY29kZSAhPT0gdm9pZCAwKQogICAgICBycGNBY2NvdW50U3RhdGVPdmVycmlkZS5jb2RlID0gY29kZTsKICAgIGlmIChiYWxhbmNlICE9PSB2b2lkIDApCiAgICAgIHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlLmJhbGFuY2UgPSBudW1iZXJUb0hleChiYWxhbmNlKTsKICAgIGlmIChub25jZSAhPT0gdm9pZCAwKQogICAgICBycGNBY2NvdW50U3RhdGVPdmVycmlkZS5ub25jZSA9IG51bWJlclRvSGV4KG5vbmNlKTsKICAgIGlmIChzdGF0ZSAhPT0gdm9pZCAwKQogICAgICBycGNBY2NvdW50U3RhdGVPdmVycmlkZS5zdGF0ZSA9IHNlcmlhbGl6ZVN0YXRlTWFwcGluZyhzdGF0ZSk7CiAgICBpZiAoc3RhdGVEaWZmICE9PSB2b2lkIDApIHsKICAgICAgaWYgKHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlLnN0YXRlKQogICAgICAgIHRocm93IG5ldyBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yKCk7CiAgICAgIHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlLnN0YXRlRGlmZiA9IHNlcmlhbGl6ZVN0YXRlTWFwcGluZyhzdGF0ZURpZmYpOwogICAgfQogICAgcmV0dXJuIHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlOwogIH0KICBmdW5jdGlvbiBzZXJpYWxpemVTdGF0ZU92ZXJyaWRlKHBhcmFtZXRlcnMpIHsKICAgIGlmICghcGFyYW1ldGVycykKICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIGNvbnN0IHJwY1N0YXRlT3ZlcnJpZGUgPSB7fTsKICAgIGZvciAoY29uc3QgeyBhZGRyZXNzLCAuLi5hY2NvdW50U3RhdGUgfSBvZiBwYXJhbWV0ZXJzKSB7CiAgICAgIGlmICghaXNBZGRyZXNzKGFkZHJlc3MsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3MgfSk7CiAgICAgIGlmIChycGNTdGF0ZU92ZXJyaWRlW2FkZHJlc3NdKQogICAgICAgIHRocm93IG5ldyBBY2NvdW50U3RhdGVDb25mbGljdEVycm9yKHsgYWRkcmVzcyB9KTsKICAgICAgcnBjU3RhdGVPdmVycmlkZVthZGRyZXNzXSA9IHNlcmlhbGl6ZUFjY291bnRTdGF0ZU92ZXJyaWRlKGFjY291bnRTdGF0ZSk7CiAgICB9CiAgICByZXR1cm4gcnBjU3RhdGVPdmVycmlkZTsKICB9CiAgdmFyIGluaXRfc3RhdGVPdmVycmlkZTIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zdGF0ZU92ZXJyaWRlLmpzIigpIHsKICAgICAgaW5pdF9hZGRyZXNzKCk7CiAgICAgIGluaXRfZGF0YSgpOwogICAgICBpbml0X3N0YXRlT3ZlcnJpZGUoKTsKICAgICAgaW5pdF9pc0FkZHJlc3MoKTsKICAgICAgaW5pdF90b0hleCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL2Fzc2VydFJlcXVlc3QuanMKICBmdW5jdGlvbiBhc3NlcnRSZXF1ZXN0KGFyZ3MpIHsKICAgIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudF8sIGdhc1ByaWNlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCB0byB9ID0gYXJnczsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICBpZiAoYWNjb3VudCAmJiAhaXNBZGRyZXNzKGFjY291bnQuYWRkcmVzcykpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogYWNjb3VudC5hZGRyZXNzIH0pOwogICAgaWYgKHRvICYmICFpc0FkZHJlc3ModG8pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IHRvIH0pOwogICAgaWYgKHR5cGVvZiBnYXNQcmljZSAhPT0gInVuZGVmaW5lZCIgJiYgKHR5cGVvZiBtYXhGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiBtYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpKQogICAgICB0aHJvdyBuZXcgRmVlQ29uZmxpY3RFcnJvcigpOwogICAgaWYgKG1heEZlZVBlckdhcyAmJiBtYXhGZWVQZXJHYXMgPiAybiAqKiAyNTZuIC0gMW4pCiAgICAgIHRocm93IG5ldyBGZWVDYXBUb29IaWdoRXJyb3IoeyBtYXhGZWVQZXJHYXMgfSk7CiAgICBpZiAobWF4UHJpb3JpdHlGZWVQZXJHYXMgJiYgbWF4RmVlUGVyR2FzICYmIG1heFByaW9yaXR5RmVlUGVyR2FzID4gbWF4RmVlUGVyR2FzKQogICAgICB0aHJvdyBuZXcgVGlwQWJvdmVGZWVDYXBFcnJvcih7IG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMgfSk7CiAgfQogIHZhciBpbml0X2Fzc2VydFJlcXVlc3QgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9hc3NlcnRSZXF1ZXN0LmpzIigpIHsKICAgICAgaW5pdF9wYXJzZUFjY291bnQoKTsKICAgICAgaW5pdF9hZGRyZXNzKCk7CiAgICAgIGluaXRfbm9kZSgpOwogICAgICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgICAgIGluaXRfaXNBZGRyZXNzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9pc0FkZHJlc3NFcXVhbC5qcwogIGZ1bmN0aW9uIGlzQWRkcmVzc0VxdWFsKGEsIGIpIHsKICAgIGlmICghaXNBZGRyZXNzKGEsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiBhIH0pOwogICAgaWYgKCFpc0FkZHJlc3MoYiwgeyBzdHJpY3Q6IGZhbHNlIH0pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IGIgfSk7CiAgICByZXR1cm4gYS50b0xvd2VyQ2FzZSgpID09PSBiLnRvTG93ZXJDYXNlKCk7CiAgfQogIHZhciBpbml0X2lzQWRkcmVzc0VxdWFsID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9pc0FkZHJlc3NFcXVhbC5qcyIoKSB7CiAgICAgIGluaXRfYWRkcmVzcygpOwogICAgICBpbml0X2lzQWRkcmVzcygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9kZWNvZGVGdW5jdGlvblJlc3VsdC5qcwogIGZ1bmN0aW9uIGRlY29kZUZ1bmN0aW9uUmVzdWx0KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhcmdzLCBmdW5jdGlvbk5hbWUsIGRhdGEgfSA9IHBhcmFtZXRlcnM7CiAgICBsZXQgYWJpSXRlbSA9IGFiaTJbMF07CiAgICBpZiAoZnVuY3Rpb25OYW1lKSB7CiAgICAgIGNvbnN0IGl0ZW0gPSBnZXRBYmlJdGVtKHsgYWJpOiBhYmkyLCBhcmdzLCBuYW1lOiBmdW5jdGlvbk5hbWUgfSk7CiAgICAgIGlmICghaXRlbSkKICAgICAgICB0aHJvdyBuZXcgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yKGZ1bmN0aW9uTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg0IH0pOwogICAgICBhYmlJdGVtID0gaXRlbTsKICAgIH0KICAgIGlmIChhYmlJdGVtLnR5cGUgIT09ICJmdW5jdGlvbiIpCiAgICAgIHRocm93IG5ldyBBYmlGdW5jdGlvbk5vdEZvdW5kRXJyb3Iodm9pZCAwLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDQgfSk7CiAgICBpZiAoIWFiaUl0ZW0ub3V0cHV0cykKICAgICAgdGhyb3cgbmV3IEFiaUZ1bmN0aW9uT3V0cHV0c05vdEZvdW5kRXJyb3IoYWJpSXRlbS5uYW1lLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDQgfSk7CiAgICBjb25zdCB2YWx1ZXMgPSBkZWNvZGVBYmlQYXJhbWV0ZXJzKGFiaUl0ZW0ub3V0cHV0cywgZGF0YSk7CiAgICBpZiAodmFsdWVzICYmIHZhbHVlcy5sZW5ndGggPiAxKQogICAgICByZXR1cm4gdmFsdWVzOwogICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID09PSAxKQogICAgICByZXR1cm4gdmFsdWVzWzBdOwogICAgcmV0dXJuIHZvaWQgMDsKICB9CiAgdmFyIGRvY3NQYXRoNDsKICB2YXIgaW5pdF9kZWNvZGVGdW5jdGlvblJlc3VsdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9kZWNvZGVGdW5jdGlvblJlc3VsdC5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfZGVjb2RlQWJpUGFyYW1ldGVycygpOwogICAgICBpbml0X2dldEFiaUl0ZW0oKTsKICAgICAgZG9jc1BhdGg0ID0gIi9kb2NzL2NvbnRyYWN0L2RlY29kZUZ1bmN0aW9uUmVzdWx0IjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMvYWJpcy5qcwogIHZhciBtdWx0aWNhbGwzQWJpLCB1bml2ZXJzYWxSZXNvbHZlckVycm9ycywgdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpLCB1bml2ZXJzYWxSZXNvbHZlclJldmVyc2VBYmksIHRleHRSZXNvbHZlckFiaSwgYWRkcmVzc1Jlc29sdmVyQWJpLCB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JBYmksIGVyYzIwQWJpLCBlcmMyMEFiaV9ieXRlczMyLCBlcmM3MjFBYmksIGVyYzQ2MjZBYmk7CiAgdmFyIGluaXRfYWJpcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9hYmlzLmpzIigpIHsKICAgICAgbXVsdGljYWxsM0FiaSA9IFsKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbXBvbmVudHM6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogInRhcmdldCIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogImFsbG93RmFpbHVyZSIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogImNhbGxEYXRhIiwKICAgICAgICAgICAgICAgICAgdHlwZTogImJ5dGVzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgbmFtZTogImNhbGxzIiwKICAgICAgICAgICAgICB0eXBlOiAidHVwbGVbXSIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJhZ2dyZWdhdGUzIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbXBvbmVudHM6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogInN1Y2Nlc3MiLAogICAgICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIG5hbWU6ICJyZXR1cm5EYXRhIiwKICAgICAgICAgICAgICAgICAgdHlwZTogImJ5dGVzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgbmFtZTogInJldHVybkRhdGEiLAogICAgICAgICAgICAgIHR5cGU6ICJ0dXBsZVtdIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfQogICAgICBdOwogICAgICB1bml2ZXJzYWxSZXNvbHZlckVycm9ycyA9IFsKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogIlJlc29sdmVyTm90Rm91bmQiLAogICAgICAgICAgdHlwZTogImVycm9yIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG5hbWU6ICJSZXNvbHZlcldpbGRjYXJkTm90U3VwcG9ydGVkIiwKICAgICAgICAgIHR5cGU6ICJlcnJvciIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBuYW1lOiAiUmVzb2x2ZXJOb3RDb250cmFjdCIsCiAgICAgICAgICB0eXBlOiAiZXJyb3IiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJyZXR1cm5EYXRhIiwKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiUmVzb2x2ZXJFcnJvciIsCiAgICAgICAgICB0eXBlOiAiZXJyb3IiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbXBvbmVudHM6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogInN0YXR1cyIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJ1aW50MTYiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBuYW1lOiAibWVzc2FnZSIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICBuYW1lOiAiZXJyb3JzIiwKICAgICAgICAgICAgICB0eXBlOiAidHVwbGVbXSIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJIdHRwRXJyb3IiLAogICAgICAgICAgdHlwZTogImVycm9yIgogICAgICAgIH0KICAgICAgXTsKICAgICAgdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpID0gWwogICAgICAgIC4uLnVuaXZlcnNhbFJlc29sdmVyRXJyb3JzLAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJyZXNvbHZlIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICJuYW1lIiwgdHlwZTogImJ5dGVzIiB9LAogICAgICAgICAgICB7IG5hbWU6ICJkYXRhIiwgdHlwZTogImJ5dGVzIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICIiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImFkZHJlc3MiLCB0eXBlOiAiYWRkcmVzcyIgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogInJlc29sdmUiLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsgbmFtZTogIm5hbWUiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImRhdGEiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImdhdGV3YXlzIiwgdHlwZTogInN0cmluZ1tdIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICIiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImFkZHJlc3MiLCB0eXBlOiAiYWRkcmVzcyIgfQogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXTsKICAgICAgdW5pdmVyc2FsUmVzb2x2ZXJSZXZlcnNlQWJpID0gWwogICAgICAgIC4uLnVuaXZlcnNhbFJlc29sdmVyRXJyb3JzLAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJyZXZlcnNlIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW3sgdHlwZTogImJ5dGVzIiwgbmFtZTogInJldmVyc2VOYW1lIiB9XSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgeyB0eXBlOiAic3RyaW5nIiwgbmFtZTogInJlc29sdmVkTmFtZSIgfSwKICAgICAgICAgICAgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJyZXNvbHZlZEFkZHJlc3MiIH0sCiAgICAgICAgICAgIHsgdHlwZTogImFkZHJlc3MiLCBuYW1lOiAicmV2ZXJzZVJlc29sdmVyIiB9LAogICAgICAgICAgICB7IHR5cGU6ICJhZGRyZXNzIiwgbmFtZTogInJlc29sdmVyIiB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAicmV2ZXJzZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgeyB0eXBlOiAiYnl0ZXMiLCBuYW1lOiAicmV2ZXJzZU5hbWUiIH0sCiAgICAgICAgICAgIHsgdHlwZTogInN0cmluZ1tdIiwgbmFtZTogImdhdGV3YXlzIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7IHR5cGU6ICJzdHJpbmciLCBuYW1lOiAicmVzb2x2ZWROYW1lIiB9LAogICAgICAgICAgICB7IHR5cGU6ICJhZGRyZXNzIiwgbmFtZTogInJlc29sdmVkQWRkcmVzcyIgfSwKICAgICAgICAgICAgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJyZXZlcnNlUmVzb2x2ZXIiIH0sCiAgICAgICAgICAgIHsgdHlwZTogImFkZHJlc3MiLCBuYW1lOiAicmVzb2x2ZXIiIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF07CiAgICAgIHRleHRSZXNvbHZlckFiaSA9IFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAidGV4dCIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgeyBuYW1lOiAibmFtZSIsIHR5cGU6ICJieXRlczMyIiB9LAogICAgICAgICAgICB7IG5hbWU6ICJrZXkiLCB0eXBlOiAic3RyaW5nIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogW3sgbmFtZTogIiIsIHR5cGU6ICJzdHJpbmciIH1dCiAgICAgICAgfQogICAgICBdOwogICAgICBhZGRyZXNzUmVzb2x2ZXJBYmkgPSBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogImFkZHIiLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbeyBuYW1lOiAibmFtZSIsIHR5cGU6ICJieXRlczMyIiB9XSwKICAgICAgICAgIG91dHB1dHM6IFt7IG5hbWU6ICIiLCB0eXBlOiAiYWRkcmVzcyIgfV0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJhZGRyIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICJuYW1lIiwgdHlwZTogImJ5dGVzMzIiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImNvaW5UeXBlIiwgdHlwZTogInVpbnQyNTYiIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbeyBuYW1lOiAiIiwgdHlwZTogImJ5dGVzIiB9XQogICAgICAgIH0KICAgICAgXTsKICAgICAgdW5pdmVyc2FsU2lnbmF0dXJlVmFsaWRhdG9yQWJpID0gWwogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIl9zaWduZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIl9oYXNoIiwKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMzMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJfc2lnbmF0dXJlIiwKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIHR5cGU6ICJjb25zdHJ1Y3RvciIKICAgICAgICB9CiAgICAgIF07CiAgICAgIGVyYzIwQWJpID0gWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiQXBwcm92YWwiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYWxsb3dhbmNlIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYXBwcm92ZSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJiYWxhbmNlT2YiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhY2NvdW50IiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImRlY2ltYWxzIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50OCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJuYW1lIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAic3ltYm9sIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidG90YWxTdXBwbHkiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidHJhbnNmZXIiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJyZWNpcGllbnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJ0cmFuc2ZlckZyb20iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2lwaWVudCIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfQogICAgICBdOwogICAgICBlcmMyMEFiaV9ieXRlczMyID0gWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiQXBwcm92YWwiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYWxsb3dhbmNlIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYXBwcm92ZSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJiYWxhbmNlT2YiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhY2NvdW50IiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImRlY2ltYWxzIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50OCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJuYW1lIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJieXRlczMyIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInN5bWJvbCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMzMiIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJ0b3RhbFN1cHBseSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJ0cmFuc2ZlciIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2lwaWVudCIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInRyYW5zZmVyRnJvbSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNlbmRlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAicmVjaXBpZW50IiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhbW91bnQiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogImJvb2wiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF07CiAgICAgIGVyYzcyMUFiaSA9IFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZXZlbnQiLAogICAgICAgICAgbmFtZTogIkFwcHJvdmFsIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAic3BlbmRlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImV2ZW50IiwKICAgICAgICAgIG5hbWU6ICJBcHByb3ZhbEZvckFsbCIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogIm93bmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogIm9wZXJhdG9yIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJhcHByb3ZlZCIsCiAgICAgICAgICAgICAgdHlwZTogImJvb2wiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRva2VuSWQiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImFwcHJvdmUiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAicGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImJhbGFuY2VPZiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFjY291bnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiZ2V0QXBwcm92ZWQiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImlzQXBwcm92ZWRGb3JBbGwiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3BlcmF0b3IiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogImJvb2wiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAibmFtZSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogIm93bmVyT2YiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAic2FmZVRyYW5zZmVyRnJvbSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJwYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImZyb20iLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInNhZmVUcmFuc2ZlckZyb20iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0byIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiaWQiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImRhdGEiLAogICAgICAgICAgICAgIHR5cGU6ICJieXRlcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInNldEFwcHJvdmFsRm9yQWxsIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogIm5vbnBheWFibGUiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3BlcmF0b3IiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFwcHJvdmVkIiwKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInN5bWJvbCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInRva2VuQnlJbmRleCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImluZGV4IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInRva2VuQnlJbmRleCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIm93bmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJpbmRleCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAidG9rZW5JZCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidG9rZW5VUkkiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidG90YWxTdXBwbHkiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidHJhbnNmZXJGcm9tIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInBheWFibGUiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJyZWNpcGllbnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInRva2VJZCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbXQogICAgICAgIH0KICAgICAgXTsKICAgICAgZXJjNDYyNkFiaSA9IFsKICAgICAgICB7CiAgICAgICAgICBhbm9ueW1vdXM6IGZhbHNlLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiQXBwcm92YWwiLAogICAgICAgICAgdHlwZTogImV2ZW50IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgYW5vbnltb3VzOiBmYWxzZSwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogZmFsc2UsCiAgICAgICAgICAgICAgbmFtZTogInNoYXJlcyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiRGVwb3NpdCIsCiAgICAgICAgICB0eXBlOiAiZXZlbnQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBhbm9ueW1vdXM6IGZhbHNlLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgdHlwZTogImV2ZW50IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgYW5vbnltb3VzOiBmYWxzZSwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogIm93bmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogZmFsc2UsCiAgICAgICAgICAgICAgbmFtZTogInNoYXJlcyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiV2l0aGRyYXciLAogICAgICAgICAgdHlwZTogImV2ZW50IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogImFsbG93YW5jZSIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAic3BlbmRlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJhcHByb3ZlIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogImFzc2V0IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldFRva2VuQWRkcmVzcyIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFjY291bnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogImJhbGFuY2VPZiIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAic2hhcmVzIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJjb252ZXJ0VG9Bc3NldHMiLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiY29udmVydFRvU2hhcmVzIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJkZXBvc2l0IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJjYWxsZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogIm1heERlcG9zaXQiLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIm1heEFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImNhbGxlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAibWF4TWludCIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAibWF4U2hhcmVzIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogIm1heFJlZGVlbSIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAibWF4U2hhcmVzIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogIm1heFdpdGhkcmF3IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJtYXhBc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJtaW50IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogInByZXZpZXdEZXBvc2l0IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogInByZXZpZXdNaW50IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogInByZXZpZXdSZWRlZW0iLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAicHJldmlld1dpdGhkcmF3IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAicmVkZWVtIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogInRvdGFsQXNzZXRzIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b3RhbE1hbmFnZWRBc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogInRvdGFsU3VwcGx5IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0byIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJ0cmFuc2ZlciIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogIm5vbnBheWFibGUiLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiZnJvbSIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAidG8iLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAidHJhbnNmZXJGcm9tIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAid2l0aGRyYXciLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNoYXJlcyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9CiAgICAgIF07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2NvbnRyYWN0LmpzCiAgdmFyIGFnZ3JlZ2F0ZTNTaWduYXR1cmU7CiAgdmFyIGluaXRfY29udHJhY3QyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2NvbnRyYWN0LmpzIigpIHsKICAgICAgYWdncmVnYXRlM1NpZ25hdHVyZSA9ICIweDgyYWQ1NmNiIjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMvY29udHJhY3RzLmpzCiAgdmFyIGRlcGxveWxlc3NDYWxsVmlhQnl0ZWNvZGVCeXRlY29kZSwgZGVwbG95bGVzc0NhbGxWaWFGYWN0b3J5Qnl0ZWNvZGUsIHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckJ5dGVDb2RlOwogIHZhciBpbml0X2NvbnRyYWN0cyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9jb250cmFjdHMuanMiKCkgewogICAgICBkZXBsb3lsZXNzQ2FsbFZpYUJ5dGVjb2RlQnl0ZWNvZGUgPSAiMHg2MDgwNjA0MDUyMzQ4MDE1NjEwMDEwNTc2MDAwODBmZDViNTA2MDQwNTE2MTAxOGUzODAzODA2MTAxOGU4MzM5ODEwMTYwNDA4MTkwNTI2MTAwMmY5MTYxMDEyNDU2NWI2MDAwODA4MzUxNjAyMDg1MDE2MDAwZjU5MDUwODAzYjYxMDA0ODU3NjAwMDgwZmQ1YjYwMDA4MDgzNTE2MDIwODUwMTYwMDA4NTVhZjE2MDQwNTEzZDYwMDA4MjNlODE2MTAwNjc1NzNkODFmZDViM2Q4MWYzNWI2MzRlNDg3YjcxNjBlMDFiNjAwMDUyNjA0MTYwMDQ1MjYwMjQ2MDAwZmQ1YjYwMDA4MjYwMWY4MzAxMTI2MTAwOTI1NzYwMDA4MGZkNWI4MTUxNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDBhYjU3NjEwMGFiNjEwMDZiNTY1YjYwNDA1MTYwMWY4MjAxNjAxZjE5OTA4MTE2NjAzZjAxMTY4MTAxNjAwMTYwMDE2MDQwMWIwMzgxMTE4MjgyMTAxNzE1NjEwMGQ5NTc2MTAwZDk2MTAwNmI1NjViNjA0MDUyODE4MTUyODM4MjAxNjAyMDAxODUxMDE1NjEwMGYxNTc2MDAwODBmZDViNjAwMDViODI4MTEwMTU2MTAxMTA1NzYwMjA4MTg2MDE4MTAxNTE4MzgzMDE4MjAxNTIwMTYxMDBmNDU2NWI1MDYwMDA5MTgxMDE2MDIwMDE5MTkwOTE1MjkzOTI1MDUwNTA1NjViNjAwMDgwNjA0MDgzODUwMzEyMTU2MTAxMzc1NzYwMDA4MGZkNWI4MjUxNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDE0ZDU3NjAwMDgwZmQ1YjYxMDE1OTg1ODI4NjAxNjEwMDgxNTY1YjYwMjA4NTAxNTE5MDkzNTA5MDUwNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDE3NzU3NjAwMDgwZmQ1YjYxMDE4Mzg1ODI4NjAxNjEwMDgxNTY1YjkxNTA1MDkyNTA5MjkwNTA1NmZlIjsKICAgICAgZGVwbG95bGVzc0NhbGxWaWFGYWN0b3J5Qnl0ZWNvZGUgPSAiMHg2MDgwNjA0MDUyMzQ4MDE1NjEwMDEwNTc2MDAwODBmZDViNTA2MDQwNTE2MTAyYzAzODAzODA2MTAyYzA4MzM5ODEwMTYwNDA4MTkwNTI2MTAwMmY5MTYxMDFlNjU2NWI4MzYwMDE2MDAxNjBhMDFiMDMxNjNiNjAwMDAzNjEwMGU0NTc2MDAwODA4MzYwMDE2MDAxNjBhMDFiMDMxNjgzNjA0MDUxNjEwMDVjOTE5MDYxMDI3MDU2NWI2MDAwNjA0MDUxODA4MzAzODE2MDAwODY1YWYxOTE1MDUwM2Q4MDYwMDA4MTE0NjEwMDk5NTc2MDQwNTE5MTUwNjAxZjE5NjAzZjNkMDExNjgyMDE2MDQwNTIzZDgyNTIzZDYwMDA2MDIwODQwMTNlNjEwMDllNTY1YjYwNjA5MTUwNWI1MDkxNTA5MTUwODExNTgwNjEwMGI4NTc1MDYwMDE2MDAxNjBhMDFiMDM4NjE2M2IxNTViMTU2MTAwZTE1NzgwNjA0MDUxNjMxMDFiYjk4ZDYwZTAxYjgxNTI2MDA0MDE2MTAwZDg5MTkwNjEwMjhjNTY1YjYwNDA1MTgwOTEwMzkwZmQ1YjUwNTA1YjYwMDA4MDg0NTE2MDIwODYwMTYwMDA4ODVhZjE2MDQwNTEzZDYwMDA4MjNlODE2MTAxMDM1NzNkODFmZDViM2Q4MWYzNWI4MDUxNjAwMTYwMDE2MGEwMWIwMzgxMTY4MTE0NjEwMTFlNTc2MDAwODBmZDViOTE5MDUwNTY1YjYzNGU0ODdiNzE2MGUwMWI2MDAwNTI2MDQxNjAwNDUyNjAyNDYwMDBmZDViNjAwMDViODM4MTEwMTU2MTAxNTQ1NzgxODEwMTUxODM4MjAxNTI2MDIwMDE2MTAxM2M1NjViNTA1MDYwMDA5MTAxNTI1NjViNjAwMDgyNjAxZjgzMDExMjYxMDE2ZTU3NjAwMDgwZmQ1YjgxNTE2MDAxNjAwMTYwNDAxYjAzODExMTE1NjEwMTg3NTc2MTAxODc2MTAxMjM1NjViNjA0MDUxNjAxZjgyMDE2MDFmMTk5MDgxMTY2MDNmMDExNjgxMDE2MDAxNjAwMTYwNDAxYjAzODExMTgyODIxMDE3MTU2MTAxYjU1NzYxMDFiNTYxMDEyMzU2NWI2MDQwNTI4MTgxNTI4MzgyMDE2MDIwMDE4NTEwMTU2MTAxY2Q1NzYwMDA4MGZkNWI2MTAxZGU4MjYwMjA4MzAxNjAyMDg3MDE2MTAxMzk1NjViOTQ5MzUwNTA1MDUwNTY1YjYwMDA4MDYwMDA4MDYwODA4NTg3MDMxMjE1NjEwMWZjNTc2MDAwODBmZDViNjEwMjA1ODU2MTAxMDc1NjViNjAyMDg2MDE1MTkwOTQ1MDYwMDE2MDAxNjA0MDFiMDM4MTExMTU2MTAyMjE1NzYwMDA4MGZkNWI2MTAyMmQ4NzgyODgwMTYxMDE1ZDU2NWI5MzUwNTA2MTAyM2M2MDQwODYwMTYxMDEwNzU2NWI2MDYwODYwMTUxOTA5MjUwNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDI1ODU3NjAwMDgwZmQ1YjYxMDI2NDg3ODI4ODAxNjEwMTVkNTY1YjkxNTA1MDkyOTU5MTk0NTA5MjUwNTY1YjYwMDA4MjUxNjEwMjgyODE4NDYwMjA4NzAxNjEwMTM5NTY1YjkxOTA5MTAxOTI5MTUwNTA1NjViNjAyMDgxNTI2MDAwODI1MTgwNjAyMDg0MDE1MjYxMDJhYjgxNjA0MDg1MDE2MDIwODcwMTYxMDEzOTU2NWI2MDFmMDE2MDFmMTkxNjkxOTA5MTAxNjA0MDAxOTI5MTUwNTA1NmZlIjsKICAgICAgdW5pdmVyc2FsU2lnbmF0dXJlVmFsaWRhdG9yQnl0ZUNvZGUgPSAiMHg2MDgwNjA0MDUyMzQ4MDE1NjEwMDEwNTc2MDAwODBmZDViNTA2MDQwNTE2MTA2OTQzODAzODA2MTA2OTQ4MzM5ODEwMTYwNDA4MTkwNTI2MTAwMmY5MTYxMDUxZTU2NWI2MDAwNjEwMDNjODQ4NDg0NjEwMDQ4NTY1YjkwNTA4MDYwMDA1MjYwMDE2MDFmZjM1YjYwMDA3ZjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2MTAwNzQ4MzYxMDQwYzU2NWIwMzYxMDFlNzU3NjAwMDYwNjA4MDg0ODA2MDIwMDE5MDUxODEwMTkwNjEwMDkyOTE5MDYxMDU3NzU2NWI2MDQwNTE5Mjk1NTA5MDkzNTA5MTUwNjAwMDkwNjAwMTYwMDE2MGEwMWIwMzg1MTY5MDYxMDBiNjkwODU5MDYxMDVkZDU2NWI2MDAwNjA0MDUxODA4MzAzODE2MDAwODY1YWYxOTE1MDUwM2Q4MDYwMDA4MTE0NjEwMGYzNTc2MDQwNTE5MTUwNjAxZjE5NjAzZjNkMDExNjgyMDE2MDQwNTIzZDgyNTIzZDYwMDA2MDIwODQwMTNlNjEwMGY4NTY1YjYwNjA5MTUwNWI1MDUwOTA1MDg3NjAwMTYwMDE2MGEwMWIwMzE2M2I2MDAwMDM2MTAxNjA1NzgwNjEwMTYwNTc2MDQwNTE2MjQ2MWJjZDYwZTUxYjgxNTI2MDIwNjAwNDgyMDE1MjYwMWU2MDI0ODIwMTUyN2Y1MzY5Njc2ZTYxNzQ3NTcyNjU1NjYxNmM2OTY0NjE3NDZmNzIzYTIwNjQ2NTcwNmM2Zjc5NmQ2NTZlNzQwMDAwNjA0NDgyMDE1MjYwNjQwMTViNjA0MDUxODA5MTAzOTBmZDViNjA0MDUxNjMwYjEzNWQzZjYwZTExYjgwODI1MjkwNjAwMTYwMDE2MGEwMWIwMzhhMTY5MDYzMTYyNmJhN2U5MDYxMDE5MDkwOGI5MDg3OTA2MDA0MDE2MTA1Zjk1NjViNjAyMDYwNDA1MTgwODMwMzgxODY1YWZhMTU4MDE1NjEwMWFkNTczZDYwMDA4MDNlM2Q2MDAwZmQ1YjUwNTA1MDUwNjA0MDUxM2Q2MDFmMTk2MDFmODIwMTE2ODIwMTgwNjA0MDUyNTA4MTAxOTA2MTAxZDE5MTkwNjEwNjMzNTY1YjYwMDE2MDAxNjBlMDFiMDMxOTE2MTQ5NDUwNTA1MDUwNTA2MTA0MDU1NjViNjAwMTYwMDE2MGEwMWIwMzg0MTYzYjE1NjEwMjdhNTc2MDQwNTE2MzBiMTM1ZDNmNjBlMTFiODA4MjUyOTA2MDAxNjAwMTYwYTAxYjAzODYxNjkwNjMxNjI2YmE3ZTkwNjEwMjI3OTA4NzkwODc5MDYwMDQwMTYxMDVmOTU2NWI2MDIwNjA0MDUxODA4MzAzODE4NjVhZmExNTgwMTU2MTAyNDQ1NzNkNjAwMDgwM2UzZDYwMDBmZDViNTA1MDUwNTA2MDQwNTEzZDYwMWYxOTYwMWY4MjAxMTY4MjAxODA2MDQwNTI1MDgxMDE5MDYxMDI2ODkxOTA2MTA2MzM1NjViNjAwMTYwMDE2MGUwMWIwMzE5MTYxNDkwNTA2MTA0MDU1NjViODE1MTYwNDExNDYxMDJkZjU3NjA0MDUxNjI0NjFiY2Q2MGU1MWI4MTUyNjAyMDYwMDQ4MjAxNTI2MDNhNjAyNDgyMDE1MjYwMDA4MDUxNjAyMDYxMDY3NDgzMzk4MTUxOTE1MjYwNDQ4MjAxNTI3ZjNhMjA2OTZlNzY2MTZjNjk2NDIwNzM2OTY3NmU2MTc0NzU3MjY1MjA2YzY1NmU2Nzc0NjgwMDAwMDAwMDAwMDA2MDY0ODIwMTUyNjA4NDAxNjEwMTU3NTY1YjYxMDJlNzYxMDQyNTU2NWI1MDYwMjA4MjAxNTE2MDQwODA4NDAxNTE4NDUxODU5MzkyNjAwMDkxODU5MTkwODExMDYxMDMwYzU3NjEwMzBjNjEwNjVkNTY1YjAxNjAyMDAxNTE2MGY4MWM5MDUwNjAxYjgxMTQ4MDE1OTA2MTAzMmI1NzUwODA2MGZmMTY2MDFjMTQxNTViMTU2MTAzOGM1NzYwNDA1MTYyNDYxYmNkNjBlNTFiODE1MjYwMjA2MDA0ODIwMTUyNjAzYjYwMjQ4MjAxNTI2MDAwODA1MTYwMjA2MTA2NzQ4MzM5ODE1MTkxNTI2MDQ0ODIwMTUyN2YzYTIwNjk2ZTc2NjE2YzY5NjQyMDczNjk2NzZlNjE3NDc1NzI2NTIwNzYyMDc2NjE2Yzc1NjUwMDAwMDAwMDAwNjA2NDgyMDE1MjYwODQwMTYxMDE1NzU2NWI2MDQwODA1MTYwMDA4MTUyNjAyMDgxMDE4MDgzNTI4OTkwNTI2MGZmODMxNjkxODEwMTkxOTA5MTUyNjA2MDgxMDE4NDkwNTI2MDgwODEwMTgzOTA1MjYwMDE2MDAxNjBhMDFiMDM4OTE2OTA2MDAxOTA2MGEwMDE2MDIwNjA0MDUxNjAyMDgxMDM5MDgwODQwMzkwODU1YWZhMTU4MDE1NjEwM2VhNTczZDYwMDA4MDNlM2Q2MDAwZmQ1YjUwNTA1MDYwMjA2MDQwNTEwMzUxNjAwMTYwMDE2MGEwMWIwMzE2MTQ5NDUwNTA1MDUwNTA1YjkzOTI1MDUwNTA1NjViNjAwMDYwMjA4MjUxMTAxNTYxMDQxZDU3NjAwMDgwZmQ1YjUwODA1MTAxNTE5MDU2NWI2MDQwNTE4MDYwNjAwMTYwNDA1MjgwNjAwMzkwNjAyMDgyMDI4MDM2ODMzNzUwOTE5MjkxNTA1MDU2NWI2MDAxNjAwMTYwYTAxYjAzODExNjgxMTQ2MTA0NTg1NzYwMDA4MGZkNWI1MDU2NWI2MzRlNDg3YjcxNjBlMDFiNjAwMDUyNjA0MTYwMDQ1MjYwMjQ2MDAwZmQ1YjYwMDA1YjgzODExMDE1NjEwNDhjNTc4MTgxMDE1MTgzODIwMTUyNjAyMDAxNjEwNDc0NTY1YjUwNTA2MDAwOTEwMTUyNTY1YjYwMDA4MjYwMWY4MzAxMTI2MTA0YTY1NzYwMDA4MGZkNWI4MTUxNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDRiZjU3NjEwNGJmNjEwNDViNTY1YjYwNDA1MTYwMWY4MjAxNjAxZjE5OTA4MTE2NjAzZjAxMTY4MTAxNjAwMTYwMDE2MDQwMWIwMzgxMTE4MjgyMTAxNzE1NjEwNGVkNTc2MTA0ZWQ2MTA0NWI1NjViNjA0MDUyODE4MTUyODM4MjAxNjAyMDAxODUxMDE1NjEwNTA1NTc2MDAwODBmZDViNjEwNTE2ODI2MDIwODMwMTYwMjA4NzAxNjEwNDcxNTY1Yjk0OTM1MDUwNTA1MDU2NWI2MDAwODA2MDAwNjA2MDg0ODYwMzEyMTU2MTA1MzM1NzYwMDA4MGZkNWI4MzUxNjEwNTNlODE2MTA0NDM1NjViNjAyMDg1MDE1MTYwNDA4NjAxNTE5MTk0NTA5MjUwNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDU2MTU3NjAwMDgwZmQ1YjYxMDU2ZDg2ODI4NzAxNjEwNDk1NTY1YjkxNTA1MDkyNTA5MjUwOTI1NjViNjAwMDgwNjAwMDYwNjA4NDg2MDMxMjE1NjEwNThjNTc2MDAwODBmZDViODM1MTYxMDU5NzgxNjEwNDQzNTY1YjYwMjA4NTAxNTE5MDkzNTA2MDAxNjAwMTYwNDAxYjAzODExMTE1NjEwNWIzNTc2MDAwODBmZDViNjEwNWJmODY4Mjg3MDE2MTA0OTU1NjViNjA0MDg2MDE1MTkwOTM1MDkwNTA2MDAxNjAwMTYwNDAxYjAzODExMTE1NjEwNTYxNTc2MDAwODBmZDViNjAwMDgyNTE2MTA1ZWY4MTg0NjAyMDg3MDE2MTA0NzE1NjViOTE5MDkxMDE5MjkxNTA1MDU2NWI4MjgxNTI2MDQwNjAyMDgyMDE1MjYwMDA4MjUxODA2MDQwODQwMTUyNjEwNjFlODE2MDYwODUwMTYwMjA4NzAxNjEwNDcxNTY1YjYwMWYwMTYwMWYxOTE2OTE5MDkxMDE2MDYwMDE5MzkyNTA1MDUwNTY1YjYwMDA2MDIwODI4NDAzMTIxNTYxMDY0NTU3NjAwMDgwZmQ1YjgxNTE2MDAxNjAwMTYwZTAxYjAzMTk4MTE2ODExNDYxMDQwNTU3NjAwMDgwZmQ1YjYzNGU0ODdiNzE2MGUwMWI2MDAwNTI2MDMyNjAwNDUyNjAyNDYwMDBmZGZlNTM2OTY3NmU2MTc0NzU3MjY1NTY2MTZjNjk2NDYxNzQ2ZjcyMjM3MjY1NjM2Zjc2NjU3MjUzNjk2NzZlNjU3MiI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2NoYWluLmpzCiAgdmFyIENoYWluRG9lc05vdFN1cHBvcnRDb250cmFjdCwgQ2hhaW5NaXNtYXRjaEVycm9yLCBDaGFpbk5vdEZvdW5kRXJyb3IsIENsaWVudENoYWluTm90Q29uZmlndXJlZEVycm9yLCBJbnZhbGlkQ2hhaW5JZEVycm9yOwogIHZhciBpbml0X2NoYWluID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2NoYWluLmpzIigpIHsKICAgICAgaW5pdF9iYXNlKCk7CiAgICAgIENoYWluRG9lc05vdFN1cHBvcnRDb250cmFjdCA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBibG9ja051bWJlciwgY2hhaW4sIGNvbnRyYWN0IH0pIHsKICAgICAgICAgIHN1cGVyKGBDaGFpbiAiJHtjaGFpbi5uYW1lfSIgZG9lcyBub3Qgc3VwcG9ydCBjb250cmFjdCAiJHtjb250cmFjdC5uYW1lfSIuYCwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAiVGhpcyBjb3VsZCBiZSBkdWUgdG8gYW55IG9mIHRoZSBmb2xsb3dpbmc6IiwKICAgICAgICAgICAgICAuLi5ibG9ja051bWJlciAmJiBjb250cmFjdC5ibG9ja0NyZWF0ZWQgJiYgY29udHJhY3QuYmxvY2tDcmVhdGVkID4gYmxvY2tOdW1iZXIgPyBbCiAgICAgICAgICAgICAgICBgLSBUaGUgY29udHJhY3QgIiR7Y29udHJhY3QubmFtZX0iIHdhcyBub3QgZGVwbG95ZWQgdW50aWwgYmxvY2sgJHtjb250cmFjdC5ibG9ja0NyZWF0ZWR9IChjdXJyZW50IGJsb2NrICR7YmxvY2tOdW1iZXJ9KS5gCiAgICAgICAgICAgICAgXSA6IFsKICAgICAgICAgICAgICAgIGAtIFRoZSBjaGFpbiBkb2VzIG5vdCBoYXZlIHRoZSBjb250cmFjdCAiJHtjb250cmFjdC5uYW1lfSIgY29uZmlndXJlZC5gCiAgICAgICAgICAgICAgXQogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0IgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBDaGFpbk1pc21hdGNoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2hhaW4sIGN1cnJlbnRDaGFpbklkIH0pIHsKICAgICAgICAgIHN1cGVyKGBUaGUgY3VycmVudCBjaGFpbiBvZiB0aGUgd2FsbGV0IChpZDogJHtjdXJyZW50Q2hhaW5JZH0pIGRvZXMgbm90IG1hdGNoIHRoZSB0YXJnZXQgY2hhaW4gZm9yIHRoZSB0cmFuc2FjdGlvbiAoaWQ6ICR7Y2hhaW4uaWR9IFx1MjAxMyAke2NoYWluLm5hbWV9KS5gLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBDdXJyZW50IENoYWluIElEOiAgJHtjdXJyZW50Q2hhaW5JZH1gLAogICAgICAgICAgICAgIGBFeHBlY3RlZCBDaGFpbiBJRDogJHtjaGFpbi5pZH0gXHUyMDEzICR7Y2hhaW4ubmFtZX1gCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG5hbWU6ICJDaGFpbk1pc21hdGNoRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIENoYWluTm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgICJObyBjaGFpbiB3YXMgcHJvdmlkZWQgdG8gdGhlIHJlcXVlc3QuIiwKICAgICAgICAgICAgIlBsZWFzZSBwcm92aWRlIGEgY2hhaW4gd2l0aCB0aGUgYGNoYWluYCBhcmd1bWVudCBvbiB0aGUgQWN0aW9uLCBvciBieSBzdXBwbHlpbmcgYSBgY2hhaW5gIHRvIFdhbGxldENsaWVudC4iCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgbmFtZTogIkNoYWluTm90Rm91bmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ2xpZW50Q2hhaW5Ob3RDb25maWd1cmVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoIk5vIGNoYWluIHdhcyBwcm92aWRlZCB0byB0aGUgQ2xpZW50LiIsIHsKICAgICAgICAgICAgbmFtZTogIkNsaWVudENoYWluTm90Q29uZmlndXJlZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQ2hhaW5JZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNoYWluSWQgfSkgewogICAgICAgICAgc3VwZXIodHlwZW9mIGNoYWluSWQgPT09ICJudW1iZXIiID8gYENoYWluIElEICIke2NoYWluSWR9IiBpcyBpbnZhbGlkLmAgOiAiQ2hhaW4gSUQgaXMgaW52YWxpZC4iLCB7IG5hbWU6ICJJbnZhbGlkQ2hhaW5JZEVycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2VuY29kZURlcGxveURhdGEuanMKICBmdW5jdGlvbiBlbmNvZGVEZXBsb3lEYXRhKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhcmdzLCBieXRlY29kZSB9ID0gcGFyYW1ldGVyczsKICAgIGlmICghYXJncyB8fCBhcmdzLmxlbmd0aCA9PT0gMCkKICAgICAgcmV0dXJuIGJ5dGVjb2RlOwogICAgY29uc3QgZGVzY3JpcHRpb24gPSBhYmkyLmZpbmQoKHgpID0+ICJ0eXBlIiBpbiB4ICYmIHgudHlwZSA9PT0gImNvbnN0cnVjdG9yIik7CiAgICBpZiAoIWRlc2NyaXB0aW9uKQogICAgICB0aHJvdyBuZXcgQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoNSB9KTsKICAgIGlmICghKCJpbnB1dHMiIGluIGRlc2NyaXB0aW9uKSkKICAgICAgdGhyb3cgbmV3IEFiaUNvbnN0cnVjdG9yUGFyYW1zTm90Rm91bmRFcnJvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDUgfSk7CiAgICBpZiAoIWRlc2NyaXB0aW9uLmlucHV0cyB8fCBkZXNjcmlwdGlvbi5pbnB1dHMubGVuZ3RoID09PSAwKQogICAgICB0aHJvdyBuZXcgQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoNSB9KTsKICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVBYmlQYXJhbWV0ZXJzKGRlc2NyaXB0aW9uLmlucHV0cywgYXJncyk7CiAgICByZXR1cm4gY29uY2F0SGV4KFtieXRlY29kZSwgZGF0YV0pOwogIH0KICB2YXIgZG9jc1BhdGg1OwogIHZhciBpbml0X2VuY29kZURlcGxveURhdGEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlRGVwbG95RGF0YS5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfY29uY2F0KCk7CiAgICAgIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogICAgICBkb2NzUGF0aDUgPSAiL2RvY3MvY29udHJhY3QvZW5jb2RlRGVwbG95RGF0YSI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY2hhaW4vZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MuanMKICBmdW5jdGlvbiBnZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyh7IGJsb2NrTnVtYmVyLCBjaGFpbiwgY29udHJhY3Q6IG5hbWUgfSkgewogICAgY29uc3QgY29udHJhY3QgPSBjaGFpbj8uY29udHJhY3RzPy5bbmFtZV07CiAgICBpZiAoIWNvbnRyYWN0KQogICAgICB0aHJvdyBuZXcgQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0KHsKICAgICAgICBjaGFpbiwKICAgICAgICBjb250cmFjdDogeyBuYW1lIH0KICAgICAgfSk7CiAgICBpZiAoYmxvY2tOdW1iZXIgJiYgY29udHJhY3QuYmxvY2tDcmVhdGVkICYmIGNvbnRyYWN0LmJsb2NrQ3JlYXRlZCA+IGJsb2NrTnVtYmVyKQogICAgICB0aHJvdyBuZXcgQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0KHsKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBjaGFpbiwKICAgICAgICBjb250cmFjdDogewogICAgICAgICAgbmFtZSwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogY29udHJhY3QuYmxvY2tDcmVhdGVkCiAgICAgICAgfQogICAgICB9KTsKICAgIHJldHVybiBjb250cmFjdC5hZGRyZXNzOwogIH0KICB2YXIgaW5pdF9nZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2NoYWluL2dldENoYWluQ29udHJhY3RBZGRyZXNzLmpzIigpIHsKICAgICAgaW5pdF9jaGFpbigpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vycm9ycy9nZXRDYWxsRXJyb3IuanMKICBmdW5jdGlvbiBnZXRDYWxsRXJyb3IoZXJyLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIC4uLmFyZ3MgfSkgewogICAgY29uc3QgY2F1c2UgPSAoKCkgPT4gewogICAgICBjb25zdCBjYXVzZTIgPSBnZXROb2RlRXJyb3IoZXJyLCBhcmdzKTsKICAgICAgaWYgKGNhdXNlMiBpbnN0YW5jZW9mIFVua25vd25Ob2RlRXJyb3IpCiAgICAgICAgcmV0dXJuIGVycjsKICAgICAgcmV0dXJuIGNhdXNlMjsKICAgIH0pKCk7CiAgICByZXR1cm4gbmV3IENhbGxFeGVjdXRpb25FcnJvcihjYXVzZSwgewogICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAuLi5hcmdzCiAgICB9KTsKICB9CiAgdmFyIGluaXRfZ2V0Q2FsbEVycm9yID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZXJyb3JzL2dldENhbGxFcnJvci5qcyIoKSB7CiAgICAgIGluaXRfY29udHJhY3QoKTsKICAgICAgaW5pdF9ub2RlKCk7CiAgICAgIGluaXRfZ2V0Tm9kZUVycm9yKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcHJvbWlzZS9jcmVhdGVCYXRjaFNjaGVkdWxlci5qcwogIGZ1bmN0aW9uIGNyZWF0ZUJhdGNoU2NoZWR1bGVyKHsgZm4sIGlkLCBzaG91bGRTcGxpdEJhdGNoLCB3YWl0OiB3YWl0MiA9IDAsIHNvcnQgfSkgewogICAgY29uc3QgZXhlYyA9IGFzeW5jICgpID0+IHsKICAgICAgY29uc3Qgc2NoZWR1bGVyID0gZ2V0U2NoZWR1bGVyKCk7CiAgICAgIGZsdXNoKCk7CiAgICAgIGNvbnN0IGFyZ3MgPSBzY2hlZHVsZXIubWFwKCh7IGFyZ3M6IGFyZ3MyIH0pID0+IGFyZ3MyKTsKICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgZm4oYXJncykudGhlbigoZGF0YSkgPT4gewogICAgICAgIGlmIChzb3J0ICYmIEFycmF5LmlzQXJyYXkoZGF0YSkpCiAgICAgICAgICBkYXRhLnNvcnQoc29ydCk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY2hlZHVsZXIubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGNvbnN0IHsgcGVuZGluZ1Byb21pc2UgfSA9IHNjaGVkdWxlcltpXTsKICAgICAgICAgIHBlbmRpbmdQcm9taXNlLnJlc29sdmU/LihbZGF0YVtpXSwgZGF0YV0pOwogICAgICAgIH0KICAgICAgfSkuY2F0Y2goKGVycikgPT4gewogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2NoZWR1bGVyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBjb25zdCB7IHBlbmRpbmdQcm9taXNlIH0gPSBzY2hlZHVsZXJbaV07CiAgICAgICAgICBwZW5kaW5nUHJvbWlzZS5yZWplY3Q/LihlcnIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9OwogICAgY29uc3QgZmx1c2ggPSAoKSA9PiBzY2hlZHVsZXJDYWNoZS5kZWxldGUoaWQpOwogICAgY29uc3QgZ2V0QmF0Y2hlZEFyZ3MgPSAoKSA9PiBnZXRTY2hlZHVsZXIoKS5tYXAoKHsgYXJncyB9KSA9PiBhcmdzKTsKICAgIGNvbnN0IGdldFNjaGVkdWxlciA9ICgpID0+IHNjaGVkdWxlckNhY2hlLmdldChpZCkgfHwgW107CiAgICBjb25zdCBzZXRTY2hlZHVsZXIgPSAoaXRlbSkgPT4gc2NoZWR1bGVyQ2FjaGUuc2V0KGlkLCBbLi4uZ2V0U2NoZWR1bGVyKCksIGl0ZW1dKTsKICAgIHJldHVybiB7CiAgICAgIGZsdXNoLAogICAgICBhc3luYyBzY2hlZHVsZShhcmdzKSB7CiAgICAgICAgY29uc3QgcGVuZGluZ1Byb21pc2UgPSB7fTsKICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgICAgcGVuZGluZ1Byb21pc2UucmVzb2x2ZSA9IHJlc29sdmU7CiAgICAgICAgICBwZW5kaW5nUHJvbWlzZS5yZWplY3QgPSByZWplY3Q7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3Qgc3BsaXQyID0gc2hvdWxkU3BsaXRCYXRjaD8uKFsuLi5nZXRCYXRjaGVkQXJncygpLCBhcmdzXSk7CiAgICAgICAgaWYgKHNwbGl0MikKICAgICAgICAgIGV4ZWMoKTsKICAgICAgICBjb25zdCBoYXNBY3RpdmVTY2hlZHVsZXIgPSBnZXRTY2hlZHVsZXIoKS5sZW5ndGggPiAwOwogICAgICAgIGlmIChoYXNBY3RpdmVTY2hlZHVsZXIpIHsKICAgICAgICAgIHNldFNjaGVkdWxlcih7IGFyZ3MsIHBlbmRpbmdQcm9taXNlIH0pOwogICAgICAgICAgcmV0dXJuIHByb21pc2U7CiAgICAgICAgfQogICAgICAgIHNldFNjaGVkdWxlcih7IGFyZ3MsIHBlbmRpbmdQcm9taXNlIH0pOwogICAgICAgIHNldFRpbWVvdXQoZXhlYywgd2FpdDIpOwogICAgICAgIHJldHVybiBwcm9taXNlOwogICAgICB9CiAgICB9OwogIH0KICB2YXIgc2NoZWR1bGVyQ2FjaGU7CiAgdmFyIGluaXRfY3JlYXRlQmF0Y2hTY2hlZHVsZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9wcm9taXNlL2NyZWF0ZUJhdGNoU2NoZWR1bGVyLmpzIigpIHsKICAgICAgc2NoZWR1bGVyQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9jY2lwLmpzCiAgdmFyIE9mZmNoYWluTG9va3VwRXJyb3IsIE9mZmNoYWluTG9va3VwUmVzcG9uc2VNYWxmb3JtZWRFcnJvciwgT2ZmY2hhaW5Mb29rdXBTZW5kZXJNaXNtYXRjaEVycm9yOwogIHZhciBpbml0X2NjaXAgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvY2NpcC5qcyIoKSB7CiAgICAgIGluaXRfc3RyaW5naWZ5KCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X3V0aWxzMygpOwogICAgICBPZmZjaGFpbkxvb2t1cEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhbGxiYWNrU2VsZWN0b3IsIGNhdXNlLCBkYXRhLCBleHRyYURhdGEsIHNlbmRlciwgdXJscyB9KSB7CiAgICAgICAgICBzdXBlcihjYXVzZS5zaG9ydE1lc3NhZ2UgfHwgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGZldGNoaW5nIGZvciBhbiBvZmZjaGFpbiByZXN1bHQuIiwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgLi4uY2F1c2UubWV0YU1lc3NhZ2VzIHx8IFtdLAogICAgICAgICAgICAgIGNhdXNlLm1ldGFNZXNzYWdlcz8ubGVuZ3RoID8gIiIgOiBbXSwKICAgICAgICAgICAgICAiT2ZmY2hhaW4gR2F0ZXdheSBDYWxsOiIsCiAgICAgICAgICAgICAgdXJscyAmJiBbCiAgICAgICAgICAgICAgICAiICBHYXRld2F5IFVSTChzKToiLAogICAgICAgICAgICAgICAgLi4udXJscy5tYXAoKHVybCkgPT4gYCAgICAke2dldFVybCh1cmwpfWApCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICBgICBTZW5kZXI6ICR7c2VuZGVyfWAsCiAgICAgICAgICAgICAgYCAgRGF0YTogJHtkYXRhfWAsCiAgICAgICAgICAgICAgYCAgQ2FsbGJhY2sgc2VsZWN0b3I6ICR7Y2FsbGJhY2tTZWxlY3Rvcn1gLAogICAgICAgICAgICAgIGAgIEV4dHJhIGRhdGE6ICR7ZXh0cmFEYXRhfWAKICAgICAgICAgICAgXS5mbGF0KCksCiAgICAgICAgICAgIG5hbWU6ICJPZmZjaGFpbkxvb2t1cEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPZmZjaGFpbkxvb2t1cFJlc3BvbnNlTWFsZm9ybWVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgcmVzdWx0LCB1cmwgfSkgewogICAgICAgICAgc3VwZXIoIk9mZmNoYWluIGdhdGV3YXkgcmVzcG9uc2UgaXMgbWFsZm9ybWVkLiBSZXNwb25zZSBkYXRhIG11c3QgYmUgYSBoZXggdmFsdWUuIiwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgR2F0ZXdheSBVUkw6ICR7Z2V0VXJsKHVybCl9YCwKICAgICAgICAgICAgICBgUmVzcG9uc2U6ICR7c3RyaW5naWZ5KHJlc3VsdCl9YAogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiT2ZmY2hhaW5Mb29rdXBSZXNwb25zZU1hbGZvcm1lZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPZmZjaGFpbkxvb2t1cFNlbmRlck1pc21hdGNoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgc2VuZGVyLCB0byB9KSB7CiAgICAgICAgICBzdXBlcigiUmV2ZXJ0ZWQgc2VuZGVyIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggdGFyZ2V0IGNvbnRyYWN0IGFkZHJlc3MgKGB0b2ApLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgYENvbnRyYWN0IGFkZHJlc3M6ICR7dG99YCwKICAgICAgICAgICAgICBgT2ZmY2hhaW5Mb29rdXAgc2VuZGVyIGFkZHJlc3M6ICR7c2VuZGVyfWAKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbmFtZTogIk9mZmNoYWluTG9va3VwU2VuZGVyTWlzbWF0Y2hFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9jY2lwLmpzCiAgdmFyIGNjaXBfZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KGNjaXBfZXhwb3J0cywgewogICAgY2NpcFJlcXVlc3Q6ICgpID0+IGNjaXBSZXF1ZXN0LAogICAgb2ZmY2hhaW5Mb29rdXA6ICgpID0+IG9mZmNoYWluTG9va3VwLAogICAgb2ZmY2hhaW5Mb29rdXBBYmlJdGVtOiAoKSA9PiBvZmZjaGFpbkxvb2t1cEFiaUl0ZW0sCiAgICBvZmZjaGFpbkxvb2t1cFNpZ25hdHVyZTogKCkgPT4gb2ZmY2hhaW5Mb29rdXBTaWduYXR1cmUKICB9KTsKICBhc3luYyBmdW5jdGlvbiBvZmZjaGFpbkxvb2t1cChjbGllbnQsIHsgYmxvY2tOdW1iZXIsIGJsb2NrVGFnLCBkYXRhLCB0byB9KSB7CiAgICBjb25zdCB7IGFyZ3MgfSA9IGRlY29kZUVycm9yUmVzdWx0KHsKICAgICAgZGF0YSwKICAgICAgYWJpOiBbb2ZmY2hhaW5Mb29rdXBBYmlJdGVtXQogICAgfSk7CiAgICBjb25zdCBbc2VuZGVyLCB1cmxzLCBjYWxsRGF0YSwgY2FsbGJhY2tTZWxlY3RvciwgZXh0cmFEYXRhXSA9IGFyZ3M7CiAgICBjb25zdCB7IGNjaXBSZWFkIH0gPSBjbGllbnQ7CiAgICBjb25zdCBjY2lwUmVxdWVzdF8gPSBjY2lwUmVhZCAmJiB0eXBlb2YgY2NpcFJlYWQ/LnJlcXVlc3QgPT09ICJmdW5jdGlvbiIgPyBjY2lwUmVhZC5yZXF1ZXN0IDogY2NpcFJlcXVlc3Q7CiAgICB0cnkgewogICAgICBpZiAoIWlzQWRkcmVzc0VxdWFsKHRvLCBzZW5kZXIpKQogICAgICAgIHRocm93IG5ldyBPZmZjaGFpbkxvb2t1cFNlbmRlck1pc21hdGNoRXJyb3IoeyBzZW5kZXIsIHRvIH0pOwogICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjY2lwUmVxdWVzdF8oeyBkYXRhOiBjYWxsRGF0YSwgc2VuZGVyLCB1cmxzIH0pOwogICAgICBjb25zdCB7IGRhdGE6IGRhdGFfIH0gPSBhd2FpdCBjYWxsKGNsaWVudCwgewogICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgIGJsb2NrVGFnLAogICAgICAgIGRhdGE6IGNvbmNhdChbCiAgICAgICAgICBjYWxsYmFja1NlbGVjdG9yLAogICAgICAgICAgZW5jb2RlQWJpUGFyYW1ldGVycyhbeyB0eXBlOiAiYnl0ZXMiIH0sIHsgdHlwZTogImJ5dGVzIiB9XSwgW3Jlc3VsdCwgZXh0cmFEYXRhXSkKICAgICAgICBdKSwKICAgICAgICB0bwogICAgICB9KTsKICAgICAgcmV0dXJuIGRhdGFfOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIHRocm93IG5ldyBPZmZjaGFpbkxvb2t1cEVycm9yKHsKICAgICAgICBjYWxsYmFja1NlbGVjdG9yLAogICAgICAgIGNhdXNlOiBlcnIsCiAgICAgICAgZGF0YSwKICAgICAgICBleHRyYURhdGEsCiAgICAgICAgc2VuZGVyLAogICAgICAgIHVybHMKICAgICAgfSk7CiAgICB9CiAgfQogIGFzeW5jIGZ1bmN0aW9uIGNjaXBSZXF1ZXN0KHsgZGF0YSwgc2VuZGVyLCB1cmxzIH0pIHsKICAgIGxldCBlcnJvciA9IG5ldyBFcnJvcigiQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZC4iKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCB1cmwgPSB1cmxzW2ldOwogICAgICBjb25zdCBtZXRob2QgPSB1cmwuaW5jbHVkZXMoIntkYXRhfSIpID8gIkdFVCIgOiAiUE9TVCI7CiAgICAgIGNvbnN0IGJvZHkgPSBtZXRob2QgPT09ICJQT1NUIiA/IHsgZGF0YSwgc2VuZGVyIH0gOiB2b2lkIDA7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwucmVwbGFjZSgie3NlbmRlcn0iLCBzZW5kZXIpLnJlcGxhY2UoIntkYXRhfSIsIGRhdGEpLCB7CiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSwKICAgICAgICAgIG1ldGhvZAogICAgICAgIH0pOwogICAgICAgIGxldCByZXN1bHQ7CiAgICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCJDb250ZW50LVR5cGUiKT8uc3RhcnRzV2l0aCgiYXBwbGljYXRpb24vanNvbiIpKSB7CiAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKS5kYXRhOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7CiAgICAgICAgfQogICAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICAgIGVycm9yID0gbmV3IEh0dHBSZXF1ZXN0RXJyb3IoewogICAgICAgICAgICBib2R5LAogICAgICAgICAgICBkZXRhaWxzOiByZXN1bHQ/LmVycm9yID8gc3RyaW5naWZ5KHJlc3VsdC5lcnJvcikgOiByZXNwb25zZS5zdGF0dXNUZXh0LAogICAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLAogICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywKICAgICAgICAgICAgdXJsCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzSGV4KHJlc3VsdCkpIHsKICAgICAgICAgIGVycm9yID0gbmV3IE9mZmNoYWluTG9va3VwUmVzcG9uc2VNYWxmb3JtZWRFcnJvcih7CiAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgdXJsCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBlcnJvciA9IG5ldyBIdHRwUmVxdWVzdEVycm9yKHsKICAgICAgICAgIGJvZHksCiAgICAgICAgICBkZXRhaWxzOiBlcnIubWVzc2FnZSwKICAgICAgICAgIHVybAogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICB0aHJvdyBlcnJvcjsKICB9CiAgdmFyIG9mZmNoYWluTG9va3VwU2lnbmF0dXJlLCBvZmZjaGFpbkxvb2t1cEFiaUl0ZW07CiAgdmFyIGluaXRfY2NpcDIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9jY2lwLmpzIigpIHsKICAgICAgaW5pdF9jYWxsKCk7CiAgICAgIGluaXRfY2NpcCgpOwogICAgICBpbml0X3JlcXVlc3QoKTsKICAgICAgaW5pdF9kZWNvZGVFcnJvclJlc3VsdCgpOwogICAgICBpbml0X2VuY29kZUFiaVBhcmFtZXRlcnMoKTsKICAgICAgaW5pdF9pc0FkZHJlc3NFcXVhbCgpOwogICAgICBpbml0X2NvbmNhdCgpOwogICAgICBpbml0X2lzSGV4KCk7CiAgICAgIGluaXRfc3RyaW5naWZ5KCk7CiAgICAgIG9mZmNoYWluTG9va3VwU2lnbmF0dXJlID0gIjB4NTU2ZjE4MzAiOwogICAgICBvZmZjaGFpbkxvb2t1cEFiaUl0ZW0gPSB7CiAgICAgICAgbmFtZTogIk9mZmNoYWluTG9va3VwIiwKICAgICAgICB0eXBlOiAiZXJyb3IiLAogICAgICAgIGlucHV0czogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAidXJscyIsCiAgICAgICAgICAgIHR5cGU6ICJzdHJpbmdbXSIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJjYWxsRGF0YSIsCiAgICAgICAgICAgIHR5cGU6ICJieXRlcyIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJjYWxsYmFja0Z1bmN0aW9uIiwKICAgICAgICAgICAgdHlwZTogImJ5dGVzNCIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJleHRyYURhdGEiLAogICAgICAgICAgICB0eXBlOiAiYnl0ZXMiCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2NhbGwuanMKICBhc3luYyBmdW5jdGlvbiBjYWxsKGNsaWVudCwgYXJncykgewogICAgY29uc3QgeyBhY2NvdW50OiBhY2NvdW50XyA9IGNsaWVudC5hY2NvdW50LCBiYXRjaCA9IEJvb2xlYW4oY2xpZW50LmJhdGNoPy5tdWx0aWNhbGwpLCBibG9ja051bWJlciwgYmxvY2tUYWcgPSAibGF0ZXN0IiwgYWNjZXNzTGlzdCwgYmxvYnMsIGNvZGUsIGRhdGE6IGRhdGFfLCBmYWN0b3J5LCBmYWN0b3J5RGF0YSwgZ2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyQmxvYkdhcywgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbm9uY2UsIHRvLCB2YWx1ZSwgc3RhdGVPdmVycmlkZSwgLi4ucmVzdCB9ID0gYXJnczsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICBpZiAoY29kZSAmJiAoZmFjdG9yeSB8fCBmYWN0b3J5RGF0YSkpCiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJDYW5ub3QgcHJvdmlkZSBib3RoIGBjb2RlYCAmIGBmYWN0b3J5YC9gZmFjdG9yeURhdGFgIGFzIHBhcmFtZXRlcnMuIik7CiAgICBpZiAoY29kZSAmJiB0bykKICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoIkNhbm5vdCBwcm92aWRlIGJvdGggYGNvZGVgICYgYHRvYCBhcyBwYXJhbWV0ZXJzLiIpOwogICAgY29uc3QgZGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZSA9IGNvZGUgJiYgZGF0YV87CiAgICBjb25zdCBkZXBsb3lsZXNzQ2FsbFZpYUZhY3RvcnkgPSBmYWN0b3J5ICYmIGZhY3RvcnlEYXRhICYmIHRvICYmIGRhdGFfOwogICAgY29uc3QgZGVwbG95bGVzc0NhbGwgPSBkZXBsb3lsZXNzQ2FsbFZpYUJ5dGVjb2RlIHx8IGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeTsKICAgIGNvbnN0IGRhdGEgPSAoKCkgPT4gewogICAgICBpZiAoZGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZSkKICAgICAgICByZXR1cm4gdG9EZXBsb3lsZXNzQ2FsbFZpYUJ5dGVjb2RlRGF0YSh7CiAgICAgICAgICBjb2RlLAogICAgICAgICAgZGF0YTogZGF0YV8KICAgICAgICB9KTsKICAgICAgaWYgKGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeSkKICAgICAgICByZXR1cm4gdG9EZXBsb3lsZXNzQ2FsbFZpYUZhY3RvcnlEYXRhKHsKICAgICAgICAgIGRhdGE6IGRhdGFfLAogICAgICAgICAgZmFjdG9yeSwKICAgICAgICAgIGZhY3RvcnlEYXRhLAogICAgICAgICAgdG8KICAgICAgICB9KTsKICAgICAgcmV0dXJuIGRhdGFfOwogICAgfSkoKTsKICAgIHRyeSB7CiAgICAgIGFzc2VydFJlcXVlc3QoYXJncyk7CiAgICAgIGNvbnN0IGJsb2NrTnVtYmVySGV4ID0gYmxvY2tOdW1iZXIgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWc7CiAgICAgIGNvbnN0IHJwY1N0YXRlT3ZlcnJpZGUgPSBzZXJpYWxpemVTdGF0ZU92ZXJyaWRlKHN0YXRlT3ZlcnJpZGUpOwogICAgICBjb25zdCBjaGFpbkZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb25SZXF1ZXN0Py5mb3JtYXQ7CiAgICAgIGNvbnN0IGZvcm1hdCA9IGNoYWluRm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgICAgY29uc3QgcmVxdWVzdCA9IGZvcm1hdCh7CiAgICAgICAgLy8gUGljayBvdXQgZXh0cmEgZGF0YSB0aGF0IG1pZ2h0IGV4aXN0IG9uIHRoZSBjaGFpbidzIHRyYW5zYWN0aW9uIHJlcXVlc3QgdHlwZS4KICAgICAgICAuLi5leHRyYWN0KHJlc3QsIHsgZm9ybWF0OiBjaGFpbkZvcm1hdCB9KSwKICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgIGFjY2Vzc0xpc3QsCiAgICAgICAgYmxvYnMsCiAgICAgICAgZGF0YSwKICAgICAgICBnYXMsCiAgICAgICAgZ2FzUHJpY2UsCiAgICAgICAgbWF4RmVlUGVyQmxvYkdhcywKICAgICAgICBtYXhGZWVQZXJHYXMsCiAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXMsCiAgICAgICAgbm9uY2UsCiAgICAgICAgdG86IGRlcGxveWxlc3NDYWxsID8gdm9pZCAwIDogdG8sCiAgICAgICAgdmFsdWUKICAgICAgfSk7CiAgICAgIGlmIChiYXRjaCAmJiBzaG91bGRQZXJmb3JtTXVsdGljYWxsKHsgcmVxdWVzdCB9KSAmJiAhcnBjU3RhdGVPdmVycmlkZSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gYXdhaXQgc2NoZWR1bGVNdWx0aWNhbGwoY2xpZW50LCB7CiAgICAgICAgICAgIC4uLnJlcXVlc3QsCiAgICAgICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgICAgICBibG9ja1RhZwogICAgICAgICAgfSk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBDbGllbnRDaGFpbk5vdENvbmZpZ3VyZWRFcnJvcikgJiYgIShlcnIgaW5zdGFuY2VvZiBDaGFpbkRvZXNOb3RTdXBwb3J0Q29udHJhY3QpKQogICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICAgIG1ldGhvZDogImV0aF9jYWxsIiwKICAgICAgICBwYXJhbXM6IHJwY1N0YXRlT3ZlcnJpZGUgPyBbCiAgICAgICAgICByZXF1ZXN0LAogICAgICAgICAgYmxvY2ssCiAgICAgICAgICBycGNTdGF0ZU92ZXJyaWRlCiAgICAgICAgXSA6IFtyZXF1ZXN0LCBibG9ja10KICAgICAgfSk7CiAgICAgIGlmIChyZXNwb25zZSA9PT0gIjB4IikKICAgICAgICByZXR1cm4geyBkYXRhOiB2b2lkIDAgfTsKICAgICAgcmV0dXJuIHsgZGF0YTogcmVzcG9uc2UgfTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zdCBkYXRhMiA9IGdldFJldmVydEVycm9yRGF0YShlcnIpOwogICAgICBjb25zdCB7IG9mZmNoYWluTG9va3VwOiBvZmZjaGFpbkxvb2t1cDIsIG9mZmNoYWluTG9va3VwU2lnbmF0dXJlOiBvZmZjaGFpbkxvb2t1cFNpZ25hdHVyZTIgfSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gKGluaXRfY2NpcDIoKSwgY2NpcF9leHBvcnRzKSk7CiAgICAgIGlmIChjbGllbnQuY2NpcFJlYWQgIT09IGZhbHNlICYmIGRhdGEyPy5zbGljZSgwLCAxMCkgPT09IG9mZmNoYWluTG9va3VwU2lnbmF0dXJlMiAmJiB0bykKICAgICAgICByZXR1cm4geyBkYXRhOiBhd2FpdCBvZmZjaGFpbkxvb2t1cDIoY2xpZW50LCB7IGRhdGE6IGRhdGEyLCB0byB9KSB9OwogICAgICBpZiAoZGVwbG95bGVzc0NhbGwgJiYgZGF0YTI/LnNsaWNlKDAsIDEwKSA9PT0gIjB4MTAxYmI5OGQiKQogICAgICAgIHRocm93IG5ldyBDb3VudGVyZmFjdHVhbERlcGxveW1lbnRGYWlsZWRFcnJvcih7IGZhY3RvcnkgfSk7CiAgICAgIHRocm93IGdldENhbGxFcnJvcihlcnIsIHsKICAgICAgICAuLi5hcmdzLAogICAgICAgIGFjY291bnQsCiAgICAgICAgY2hhaW46IGNsaWVudC5jaGFpbgogICAgICB9KTsKICAgIH0KICB9CiAgZnVuY3Rpb24gc2hvdWxkUGVyZm9ybU11bHRpY2FsbCh7IHJlcXVlc3QgfSkgewogICAgY29uc3QgeyBkYXRhLCB0bywgLi4ucmVxdWVzdF8gfSA9IHJlcXVlc3Q7CiAgICBpZiAoIWRhdGEpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChkYXRhLnN0YXJ0c1dpdGgoYWdncmVnYXRlM1NpZ25hdHVyZSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICghdG8pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChPYmplY3QudmFsdWVzKHJlcXVlc3RfKS5maWx0ZXIoKHgpID0+IHR5cGVvZiB4ICE9PSAidW5kZWZpbmVkIikubGVuZ3RoID4gMCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgfQogIGFzeW5jIGZ1bmN0aW9uIHNjaGVkdWxlTXVsdGljYWxsKGNsaWVudCwgYXJncykgewogICAgY29uc3QgeyBiYXRjaFNpemUgPSAxMDI0LCB3YWl0OiB3YWl0MiA9IDAgfSA9IHR5cGVvZiBjbGllbnQuYmF0Y2g/Lm11bHRpY2FsbCA9PT0gIm9iamVjdCIgPyBjbGllbnQuYmF0Y2gubXVsdGljYWxsIDoge307CiAgICBjb25zdCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZyA9ICJsYXRlc3QiLCBkYXRhLCBtdWx0aWNhbGxBZGRyZXNzOiBtdWx0aWNhbGxBZGRyZXNzXywgdG8gfSA9IGFyZ3M7CiAgICBsZXQgbXVsdGljYWxsQWRkcmVzcyA9IG11bHRpY2FsbEFkZHJlc3NfOwogICAgaWYgKCFtdWx0aWNhbGxBZGRyZXNzKSB7CiAgICAgIGlmICghY2xpZW50LmNoYWluKQogICAgICAgIHRocm93IG5ldyBDbGllbnRDaGFpbk5vdENvbmZpZ3VyZWRFcnJvcigpOwogICAgICBtdWx0aWNhbGxBZGRyZXNzID0gZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoewogICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgIGNoYWluOiBjbGllbnQuY2hhaW4sCiAgICAgICAgY29udHJhY3Q6ICJtdWx0aWNhbGwzIgogICAgICB9KTsKICAgIH0KICAgIGNvbnN0IGJsb2NrTnVtYmVySGV4ID0gYmxvY2tOdW1iZXIgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICBjb25zdCBibG9jayA9IGJsb2NrTnVtYmVySGV4IHx8IGJsb2NrVGFnOwogICAgY29uc3QgeyBzY2hlZHVsZSB9ID0gY3JlYXRlQmF0Y2hTY2hlZHVsZXIoewogICAgICBpZDogYCR7Y2xpZW50LnVpZH0uJHtibG9ja31gLAogICAgICB3YWl0OiB3YWl0MiwKICAgICAgc2hvdWxkU3BsaXRCYXRjaChhcmdzMikgewogICAgICAgIGNvbnN0IHNpemUzID0gYXJnczIucmVkdWNlKChzaXplNCwgeyBkYXRhOiBkYXRhMiB9KSA9PiBzaXplNCArIChkYXRhMi5sZW5ndGggLSAyKSwgMCk7CiAgICAgICAgcmV0dXJuIHNpemUzID4gYmF0Y2hTaXplICogMjsKICAgICAgfSwKICAgICAgZm46IGFzeW5jIChyZXF1ZXN0cykgPT4gewogICAgICAgIGNvbnN0IGNhbGxzID0gcmVxdWVzdHMubWFwKChyZXF1ZXN0KSA9PiAoewogICAgICAgICAgYWxsb3dGYWlsdXJlOiB0cnVlLAogICAgICAgICAgY2FsbERhdGE6IHJlcXVlc3QuZGF0YSwKICAgICAgICAgIHRhcmdldDogcmVxdWVzdC50bwogICAgICAgIH0pKTsKICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7CiAgICAgICAgICBhYmk6IG11bHRpY2FsbDNBYmksCiAgICAgICAgICBhcmdzOiBbY2FsbHNdLAogICAgICAgICAgZnVuY3Rpb25OYW1lOiAiYWdncmVnYXRlMyIKICAgICAgICB9KTsKICAgICAgICBjb25zdCBkYXRhMiA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICAgIG1ldGhvZDogImV0aF9jYWxsIiwKICAgICAgICAgIHBhcmFtczogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZGF0YTogY2FsbGRhdGEsCiAgICAgICAgICAgICAgdG86IG11bHRpY2FsbEFkZHJlc3MKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYmxvY2sKICAgICAgICAgIF0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZGVjb2RlRnVuY3Rpb25SZXN1bHQoewogICAgICAgICAgYWJpOiBtdWx0aWNhbGwzQWJpLAogICAgICAgICAgYXJnczogW2NhbGxzXSwKICAgICAgICAgIGZ1bmN0aW9uTmFtZTogImFnZ3JlZ2F0ZTMiLAogICAgICAgICAgZGF0YTogZGF0YTIgfHwgIjB4IgogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IFt7IHJldHVybkRhdGEsIHN1Y2Nlc3MgfV0gPSBhd2FpdCBzY2hlZHVsZSh7IGRhdGEsIHRvIH0pOwogICAgaWYgKCFzdWNjZXNzKQogICAgICB0aHJvdyBuZXcgUmF3Q29udHJhY3RFcnJvcih7IGRhdGE6IHJldHVybkRhdGEgfSk7CiAgICBpZiAocmV0dXJuRGF0YSA9PT0gIjB4IikKICAgICAgcmV0dXJuIHsgZGF0YTogdm9pZCAwIH07CiAgICByZXR1cm4geyBkYXRhOiByZXR1cm5EYXRhIH07CiAgfQogIGZ1bmN0aW9uIHRvRGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZURhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBjb2RlLCBkYXRhIH0gPSBwYXJhbWV0ZXJzOwogICAgcmV0dXJuIGVuY29kZURlcGxveURhdGEoewogICAgICBhYmk6IHBhcnNlQWJpKFsiY29uc3RydWN0b3IoYnl0ZXMsIGJ5dGVzKSJdKSwKICAgICAgYnl0ZWNvZGU6IGRlcGxveWxlc3NDYWxsVmlhQnl0ZWNvZGVCeXRlY29kZSwKICAgICAgYXJnczogW2NvZGUsIGRhdGFdCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gdG9EZXBsb3lsZXNzQ2FsbFZpYUZhY3RvcnlEYXRhKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgZGF0YSwgZmFjdG9yeSwgZmFjdG9yeURhdGEsIHRvIH0gPSBwYXJhbWV0ZXJzOwogICAgcmV0dXJuIGVuY29kZURlcGxveURhdGEoewogICAgICBhYmk6IHBhcnNlQWJpKFsiY29uc3RydWN0b3IoYWRkcmVzcywgYnl0ZXMsIGFkZHJlc3MsIGJ5dGVzKSJdKSwKICAgICAgYnl0ZWNvZGU6IGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeUJ5dGVjb2RlLAogICAgICBhcmdzOiBbdG8sIGRhdGEsIGZhY3RvcnksIGZhY3RvcnlEYXRhXQogICAgfSk7CiAgfQogIGZ1bmN0aW9uIGdldFJldmVydEVycm9yRGF0YShlcnIpIHsKICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEJhc2VFcnJvcjIpKQogICAgICByZXR1cm4gdm9pZCAwOwogICAgY29uc3QgZXJyb3IgPSBlcnIud2FsaygpOwogICAgcmV0dXJuIHR5cGVvZiBlcnJvcj8uZGF0YSA9PT0gIm9iamVjdCIgPyBlcnJvci5kYXRhPy5kYXRhIDogZXJyb3IuZGF0YTsKICB9CiAgdmFyIGluaXRfY2FsbCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2NhbGwuanMiKCkgewogICAgICBpbml0X2V4cG9ydHMoKTsKICAgICAgaW5pdF9wYXJzZUFjY291bnQoKTsKICAgICAgaW5pdF9hYmlzKCk7CiAgICAgIGluaXRfY29udHJhY3QyKCk7CiAgICAgIGluaXRfY29udHJhY3RzKCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X2NoYWluKCk7CiAgICAgIGluaXRfY29udHJhY3QoKTsKICAgICAgaW5pdF9kZWNvZGVGdW5jdGlvblJlc3VsdCgpOwogICAgICBpbml0X2VuY29kZURlcGxveURhdGEoKTsKICAgICAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICAgICAgaW5pdF9nZXRDaGFpbkNvbnRyYWN0QWRkcmVzcygpOwogICAgICBpbml0X3RvSGV4KCk7CiAgICAgIGluaXRfZ2V0Q2FsbEVycm9yKCk7CiAgICAgIGluaXRfZXh0cmFjdCgpOwogICAgICBpbml0X3RyYW5zYWN0aW9uUmVxdWVzdCgpOwogICAgICBpbml0X2NyZWF0ZUJhdGNoU2NoZWR1bGVyKCk7CiAgICAgIGluaXRfc3RhdGVPdmVycmlkZTIoKTsKICAgICAgaW5pdF9hc3NlcnRSZXF1ZXN0KCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9pc293cy9fZXNtL3V0aWxzLmpzCiAgZnVuY3Rpb24gZ2V0TmF0aXZlV2ViU29ja2V0KCkgewogICAgaWYgKHR5cGVvZiBXZWJTb2NrZXQgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gV2ViU29ja2V0OwogICAgaWYgKHR5cGVvZiBnbG9iYWwuV2ViU29ja2V0ICE9PSAidW5kZWZpbmVkIikKICAgICAgcmV0dXJuIGdsb2JhbC5XZWJTb2NrZXQ7CiAgICBpZiAodHlwZW9mIHdpbmRvdy5XZWJTb2NrZXQgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gd2luZG93LldlYlNvY2tldDsKICAgIGlmICh0eXBlb2Ygc2VsZi5XZWJTb2NrZXQgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gc2VsZi5XZWJTb2NrZXQ7CiAgICB0aHJvdyBuZXcgRXJyb3IoImBXZWJTb2NrZXRgIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudCIpOwogIH0KICB2YXIgaW5pdF91dGlsczUgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2lzb3dzL19lc20vdXRpbHMuanMiKCkgewogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvaXNvd3MvX2VzbS9uYXRpdmUuanMKICB2YXIgbmF0aXZlX2V4cG9ydHMgPSB7fTsKICBfX2V4cG9ydChuYXRpdmVfZXhwb3J0cywgewogICAgV2ViU29ja2V0OiAoKSA9PiBXZWJTb2NrZXQyCiAgfSk7CiAgdmFyIFdlYlNvY2tldDI7CiAgdmFyIGluaXRfbmF0aXZlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9pc293cy9fZXNtL25hdGl2ZS5qcyIoKSB7CiAgICAgIGluaXRfdXRpbHM1KCk7CiAgICAgIFdlYlNvY2tldDIgPSBnZXROYXRpdmVXZWJTb2NrZXQoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9pbmRleC5qcwogIHZhciBlc21fZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KGVzbV9leHBvcnRzLCB7CiAgICBBYmlDb25zdHJ1Y3Rvck5vdEZvdW5kRXJyb3I6ICgpID0+IEFiaUNvbnN0cnVjdG9yTm90Rm91bmRFcnJvciwKICAgIEFiaUNvbnN0cnVjdG9yUGFyYW1zTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yLAogICAgQWJpRGVjb2RpbmdEYXRhU2l6ZUludmFsaWRFcnJvcjogKCkgPT4gQWJpRGVjb2RpbmdEYXRhU2l6ZUludmFsaWRFcnJvciwKICAgIEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yOiAoKSA9PiBBYmlEZWNvZGluZ0RhdGFTaXplVG9vU21hbGxFcnJvciwKICAgIEFiaURlY29kaW5nWmVyb0RhdGFFcnJvcjogKCkgPT4gQWJpRGVjb2RpbmdaZXJvRGF0YUVycm9yLAogICAgQWJpRW5jb2RpbmdBcnJheUxlbmd0aE1pc21hdGNoRXJyb3I6ICgpID0+IEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yLAogICAgQWJpRW5jb2RpbmdCeXRlc1NpemVNaXNtYXRjaEVycm9yOiAoKSA9PiBBYmlFbmNvZGluZ0J5dGVzU2l6ZU1pc21hdGNoRXJyb3IsCiAgICBBYmlFbmNvZGluZ0xlbmd0aE1pc21hdGNoRXJyb3I6ICgpID0+IEFiaUVuY29kaW5nTGVuZ3RoTWlzbWF0Y2hFcnJvciwKICAgIEFiaUVycm9ySW5wdXRzTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yLAogICAgQWJpRXJyb3JOb3RGb3VuZEVycm9yOiAoKSA9PiBBYmlFcnJvck5vdEZvdW5kRXJyb3IsCiAgICBBYmlFcnJvclNpZ25hdHVyZU5vdEZvdW5kRXJyb3I6ICgpID0+IEFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvciwKICAgIEFiaUV2ZW50Tm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRXZlbnROb3RGb3VuZEVycm9yLAogICAgQWJpRXZlbnRTaWduYXR1cmVFbXB0eVRvcGljc0Vycm9yOiAoKSA9PiBBYmlFdmVudFNpZ25hdHVyZUVtcHR5VG9waWNzRXJyb3IsCiAgICBBYmlFdmVudFNpZ25hdHVyZU5vdEZvdW5kRXJyb3I6ICgpID0+IEFiaUV2ZW50U2lnbmF0dXJlTm90Rm91bmRFcnJvciwKICAgIEFiaUZ1bmN0aW9uTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yLAogICAgQWJpRnVuY3Rpb25PdXRwdXRzTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRnVuY3Rpb25PdXRwdXRzTm90Rm91bmRFcnJvciwKICAgIEFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRnVuY3Rpb25TaWduYXR1cmVOb3RGb3VuZEVycm9yLAogICAgQWNjb3VudFN0YXRlQ29uZmxpY3RFcnJvcjogKCkgPT4gQWNjb3VudFN0YXRlQ29uZmxpY3RFcnJvciwKICAgIEJhc2VFcnJvcjogKCkgPT4gQmFzZUVycm9yMiwKICAgIEJhc2VGZWVTY2FsYXJFcnJvcjogKCkgPT4gQmFzZUZlZVNjYWxhckVycm9yLAogICAgQmxvY2tOb3RGb3VuZEVycm9yOiAoKSA9PiBCbG9ja05vdEZvdW5kRXJyb3IsCiAgICBCeXRlc1NpemVNaXNtYXRjaEVycm9yOiAoKSA9PiBCeXRlc1NpemVNaXNtYXRjaEVycm9yLAogICAgQ2FsbEV4ZWN1dGlvbkVycm9yOiAoKSA9PiBDYWxsRXhlY3V0aW9uRXJyb3IsCiAgICBDaGFpbkRpc2Nvbm5lY3RlZEVycm9yOiAoKSA9PiBDaGFpbkRpc2Nvbm5lY3RlZEVycm9yLAogICAgQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0OiAoKSA9PiBDaGFpbkRvZXNOb3RTdXBwb3J0Q29udHJhY3QsCiAgICBDaGFpbk1pc21hdGNoRXJyb3I6ICgpID0+IENoYWluTWlzbWF0Y2hFcnJvciwKICAgIENoYWluTm90Rm91bmRFcnJvcjogKCkgPT4gQ2hhaW5Ob3RGb3VuZEVycm9yLAogICAgQ2lyY3VsYXJSZWZlcmVuY2VFcnJvcjogKCkgPT4gQ2lyY3VsYXJSZWZlcmVuY2VFcnJvciwKICAgIENsaWVudENoYWluTm90Q29uZmlndXJlZEVycm9yOiAoKSA9PiBDbGllbnRDaGFpbk5vdENvbmZpZ3VyZWRFcnJvciwKICAgIENvbnRyYWN0RnVuY3Rpb25FeGVjdXRpb25FcnJvcjogKCkgPT4gQ29udHJhY3RGdW5jdGlvbkV4ZWN1dGlvbkVycm9yLAogICAgQ29udHJhY3RGdW5jdGlvblJldmVydGVkRXJyb3I6ICgpID0+IENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yLAogICAgQ29udHJhY3RGdW5jdGlvblplcm9EYXRhRXJyb3I6ICgpID0+IENvbnRyYWN0RnVuY3Rpb25aZXJvRGF0YUVycm9yLAogICAgQ291bnRlcmZhY3R1YWxEZXBsb3ltZW50RmFpbGVkRXJyb3I6ICgpID0+IENvdW50ZXJmYWN0dWFsRGVwbG95bWVudEZhaWxlZEVycm9yLAogICAgRGVjb2RlTG9nRGF0YU1pc21hdGNoOiAoKSA9PiBEZWNvZGVMb2dEYXRhTWlzbWF0Y2gsCiAgICBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaDogKCkgPT4gRGVjb2RlTG9nVG9waWNzTWlzbWF0Y2gsCiAgICBFSVAxMTkzUHJvdmlkZXJScGNFcnJvcjogKCkgPT4gUHJvdmlkZXJScGNFcnJvcjIsCiAgICBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yOiAoKSA9PiBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yLAogICAgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yOiAoKSA9PiBFbnNBdmF0YXJJbnZhbGlkTmZ0VXJpRXJyb3IsCiAgICBFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yOiAoKSA9PiBFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yLAogICAgRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yOiAoKSA9PiBFbnNBdmF0YXJVcmlSZXNvbHV0aW9uRXJyb3IsCiAgICBFc3RpbWF0ZUdhc0V4ZWN1dGlvbkVycm9yOiAoKSA9PiBFc3RpbWF0ZUdhc0V4ZWN1dGlvbkVycm9yLAogICAgRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvcjogKCkgPT4gRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvciwKICAgIEZlZUNhcFRvb0hpZ2hFcnJvcjogKCkgPT4gRmVlQ2FwVG9vSGlnaEVycm9yLAogICAgRmVlQ2FwVG9vTG93RXJyb3I6ICgpID0+IEZlZUNhcFRvb0xvd0Vycm9yLAogICAgRmVlQ29uZmxpY3RFcnJvcjogKCkgPT4gRmVlQ29uZmxpY3RFcnJvciwKICAgIEZpbHRlclR5cGVOb3RTdXBwb3J0ZWRFcnJvcjogKCkgPT4gRmlsdGVyVHlwZU5vdFN1cHBvcnRlZEVycm9yLAogICAgSHR0cFJlcXVlc3RFcnJvcjogKCkgPT4gSHR0cFJlcXVlc3RFcnJvciwKICAgIEluc3VmZmljaWVudEZ1bmRzRXJyb3I6ICgpID0+IEluc3VmZmljaWVudEZ1bmRzRXJyb3IsCiAgICBJbnRlZ2VyT3V0T2ZSYW5nZUVycm9yOiAoKSA9PiBJbnRlZ2VyT3V0T2ZSYW5nZUVycm9yLAogICAgSW50ZXJuYWxScGNFcnJvcjogKCkgPT4gSW50ZXJuYWxScGNFcnJvciwKICAgIEludHJpbnNpY0dhc1Rvb0hpZ2hFcnJvcjogKCkgPT4gSW50cmluc2ljR2FzVG9vSGlnaEVycm9yLAogICAgSW50cmluc2ljR2FzVG9vTG93RXJyb3I6ICgpID0+IEludHJpbnNpY0dhc1Rvb0xvd0Vycm9yLAogICAgSW52YWxpZEFiaURlY29kaW5nVHlwZUVycm9yOiAoKSA9PiBJbnZhbGlkQWJpRGVjb2RpbmdUeXBlRXJyb3IsCiAgICBJbnZhbGlkQWJpRW5jb2RpbmdUeXBlRXJyb3I6ICgpID0+IEludmFsaWRBYmlFbmNvZGluZ1R5cGVFcnJvciwKICAgIEludmFsaWRBYmlJdGVtRXJyb3I6ICgpID0+IEludmFsaWRBYmlJdGVtRXJyb3IsCiAgICBJbnZhbGlkQWJpUGFyYW1ldGVyRXJyb3I6ICgpID0+IEludmFsaWRBYmlQYXJhbWV0ZXJFcnJvciwKICAgIEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3I6ICgpID0+IEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3IsCiAgICBJbnZhbGlkQWJpVHlwZVBhcmFtZXRlckVycm9yOiAoKSA9PiBJbnZhbGlkQWJpVHlwZVBhcmFtZXRlckVycm9yLAogICAgSW52YWxpZEFkZHJlc3NFcnJvcjogKCkgPT4gSW52YWxpZEFkZHJlc3NFcnJvciwKICAgIEludmFsaWRBcnJheUVycm9yOiAoKSA9PiBJbnZhbGlkQXJyYXlFcnJvciwKICAgIEludmFsaWRCeXRlc0Jvb2xlYW5FcnJvcjogKCkgPT4gSW52YWxpZEJ5dGVzQm9vbGVhbkVycm9yLAogICAgSW52YWxpZENoYWluSWRFcnJvcjogKCkgPT4gSW52YWxpZENoYWluSWRFcnJvciwKICAgIEludmFsaWREZWZpbml0aW9uVHlwZUVycm9yOiAoKSA9PiBJbnZhbGlkRGVmaW5pdGlvblR5cGVFcnJvciwKICAgIEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3I6ICgpID0+IEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3IsCiAgICBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yOiAoKSA9PiBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yLAogICAgSW52YWxpZEhleFZhbHVlRXJyb3I6ICgpID0+IEludmFsaWRIZXhWYWx1ZUVycm9yLAogICAgSW52YWxpZElucHV0UnBjRXJyb3I6ICgpID0+IEludmFsaWRJbnB1dFJwY0Vycm9yLAogICAgSW52YWxpZExlZ2FjeVZFcnJvcjogKCkgPT4gSW52YWxpZExlZ2FjeVZFcnJvciwKICAgIEludmFsaWRNb2RpZmllckVycm9yOiAoKSA9PiBJbnZhbGlkTW9kaWZpZXJFcnJvciwKICAgIEludmFsaWRQYXJhbWV0ZXJFcnJvcjogKCkgPT4gSW52YWxpZFBhcmFtZXRlckVycm9yLAogICAgSW52YWxpZFBhcmFtc1JwY0Vycm9yOiAoKSA9PiBJbnZhbGlkUGFyYW1zUnBjRXJyb3IsCiAgICBJbnZhbGlkUGFyZW50aGVzaXNFcnJvcjogKCkgPT4gSW52YWxpZFBhcmVudGhlc2lzRXJyb3IsCiAgICBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yOiAoKSA9PiBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yLAogICAgSW52YWxpZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uRXJyb3I6ICgpID0+IEludmFsaWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbkVycm9yLAogICAgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yOiAoKSA9PiBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uRXJyb3IsCiAgICBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uVHlwZUVycm9yOiAoKSA9PiBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uVHlwZUVycm9yLAogICAgSW52YWxpZFNpZ25hdHVyZUVycm9yOiAoKSA9PiBJbnZhbGlkU2lnbmF0dXJlRXJyb3IsCiAgICBJbnZhbGlkU3RvcmFnZUtleVNpemVFcnJvcjogKCkgPT4gSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IsCiAgICBJbnZhbGlkU3RydWN0U2lnbmF0dXJlRXJyb3I6ICgpID0+IEludmFsaWRTdHJ1Y3RTaWduYXR1cmVFcnJvciwKICAgIEpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvcjogKCkgPT4gSnNvblJwY1ZlcnNpb25VbnN1cHBvcnRlZEVycm9yLAogICAgTGltaXRFeGNlZWRlZFJwY0Vycm9yOiAoKSA9PiBMaW1pdEV4Y2VlZGVkUnBjRXJyb3IsCiAgICBNYXhGZWVQZXJHYXNUb29Mb3dFcnJvcjogKCkgPT4gTWF4RmVlUGVyR2FzVG9vTG93RXJyb3IsCiAgICBNZXRob2ROb3RGb3VuZFJwY0Vycm9yOiAoKSA9PiBNZXRob2ROb3RGb3VuZFJwY0Vycm9yLAogICAgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3I6ICgpID0+IE1ldGhvZE5vdFN1cHBvcnRlZFJwY0Vycm9yLAogICAgTm9uY2VNYXhWYWx1ZUVycm9yOiAoKSA9PiBOb25jZU1heFZhbHVlRXJyb3IsCiAgICBOb25jZVRvb0hpZ2hFcnJvcjogKCkgPT4gTm9uY2VUb29IaWdoRXJyb3IsCiAgICBOb25jZVRvb0xvd0Vycm9yOiAoKSA9PiBOb25jZVRvb0xvd0Vycm9yLAogICAgUGFyc2VScGNFcnJvcjogKCkgPT4gUGFyc2VScGNFcnJvciwKICAgIFByb3ZpZGVyRGlzY29ubmVjdGVkRXJyb3I6ICgpID0+IFByb3ZpZGVyRGlzY29ubmVjdGVkRXJyb3IsCiAgICBQcm92aWRlclJwY0Vycm9yOiAoKSA9PiBQcm92aWRlclJwY0Vycm9yLAogICAgUmF3Q29udHJhY3RFcnJvcjogKCkgPT4gUmF3Q29udHJhY3RFcnJvciwKICAgIFJlc291cmNlTm90Rm91bmRScGNFcnJvcjogKCkgPT4gUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yLAogICAgUmVzb3VyY2VVbmF2YWlsYWJsZVJwY0Vycm9yOiAoKSA9PiBSZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IsCiAgICBScGNFcnJvcjogKCkgPT4gUnBjRXJyb3IsCiAgICBScGNSZXF1ZXN0RXJyb3I6ICgpID0+IFJwY1JlcXVlc3RFcnJvciwKICAgIFNpemVFeGNlZWRzUGFkZGluZ1NpemVFcnJvcjogKCkgPT4gU2l6ZUV4Y2VlZHNQYWRkaW5nU2l6ZUVycm9yLAogICAgU2l6ZU92ZXJmbG93RXJyb3I6ICgpID0+IFNpemVPdmVyZmxvd0Vycm9yLAogICAgU2xpY2VPZmZzZXRPdXRPZkJvdW5kc0Vycm9yOiAoKSA9PiBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IsCiAgICBTb2NrZXRDbG9zZWRFcnJvcjogKCkgPT4gU29ja2V0Q2xvc2VkRXJyb3IsCiAgICBTb2xpZGl0eVByb3RlY3RlZEtleXdvcmRFcnJvcjogKCkgPT4gU29saWRpdHlQcm90ZWN0ZWRLZXl3b3JkRXJyb3IsCiAgICBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yOiAoKSA9PiBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yLAogICAgU3dpdGNoQ2hhaW5FcnJvcjogKCkgPT4gU3dpdGNoQ2hhaW5FcnJvciwKICAgIFRpbWVvdXRFcnJvcjogKCkgPT4gVGltZW91dEVycm9yLAogICAgVGlwQWJvdmVGZWVDYXBFcnJvcjogKCkgPT4gVGlwQWJvdmVGZWVDYXBFcnJvciwKICAgIFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IsCiAgICBUcmFuc2FjdGlvbk5vdEZvdW5kRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uTm90Rm91bmRFcnJvciwKICAgIFRyYW5zYWN0aW9uUmVjZWlwdE5vdEZvdW5kRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uUmVjZWlwdE5vdEZvdW5kRXJyb3IsCiAgICBUcmFuc2FjdGlvblJlamVjdGVkUnBjRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvciwKICAgIFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yOiAoKSA9PiBUcmFuc2FjdGlvblR5cGVOb3RTdXBwb3J0ZWRFcnJvciwKICAgIFVuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3I6ICgpID0+IFVuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IsCiAgICBVbmtub3duTm9kZUVycm9yOiAoKSA9PiBVbmtub3duTm9kZUVycm9yLAogICAgVW5rbm93blJwY0Vycm9yOiAoKSA9PiBVbmtub3duUnBjRXJyb3IsCiAgICBVbmtub3duU2lnbmF0dXJlRXJyb3I6ICgpID0+IFVua25vd25TaWduYXR1cmVFcnJvciwKICAgIFVua25vd25UeXBlRXJyb3I6ICgpID0+IFVua25vd25UeXBlRXJyb3IsCiAgICBVbnN1cHBvcnRlZFBhY2tlZEFiaVR5cGU6ICgpID0+IFVuc3VwcG9ydGVkUGFja2VkQWJpVHlwZSwKICAgIFVuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvcjogKCkgPT4gVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLAogICAgVXJsUmVxdWlyZWRFcnJvcjogKCkgPT4gVXJsUmVxdWlyZWRFcnJvciwKICAgIFVzZXJSZWplY3RlZFJlcXVlc3RFcnJvcjogKCkgPT4gVXNlclJlamVjdGVkUmVxdWVzdEVycm9yLAogICAgV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvcjogKCkgPT4gV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvciwKICAgIFdlYlNvY2tldFJlcXVlc3RFcnJvcjogKCkgPT4gV2ViU29ja2V0UmVxdWVzdEVycm9yLAogICAgYXNzZXJ0Q3VycmVudENoYWluOiAoKSA9PiBhc3NlcnRDdXJyZW50Q2hhaW4sCiAgICBhc3NlcnRSZXF1ZXN0OiAoKSA9PiBhc3NlcnRSZXF1ZXN0LAogICAgYXNzZXJ0VHJhbnNhY3Rpb25FSVAxNTU5OiAoKSA9PiBhc3NlcnRUcmFuc2FjdGlvbkVJUDE1NTksCiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDI5MzA6ICgpID0+IGFzc2VydFRyYW5zYWN0aW9uRUlQMjkzMCwKICAgIGFzc2VydFRyYW5zYWN0aW9uTGVnYWN5OiAoKSA9PiBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSwKICAgIGJsb2JzVG9Db21taXRtZW50czogKCkgPT4gYmxvYnNUb0NvbW1pdG1lbnRzLAogICAgYmxvYnNUb1Byb29mczogKCkgPT4gYmxvYnNUb1Byb29mcywKICAgIGJvb2xUb0J5dGVzOiAoKSA9PiBib29sVG9CeXRlcywKICAgIGJvb2xUb0hleDogKCkgPT4gYm9vbFRvSGV4LAogICAgYnl0ZXNUb0JpZ0ludDogKCkgPT4gYnl0ZXNUb0JpZ0ludCwKICAgIGJ5dGVzVG9Cb29sOiAoKSA9PiBieXRlc1RvQm9vbCwKICAgIGJ5dGVzVG9IZXg6ICgpID0+IGJ5dGVzVG9IZXgsCiAgICBieXRlc1RvTnVtYmVyOiAoKSA9PiBieXRlc1RvTnVtYmVyLAogICAgYnl0ZXNUb1JscDogKCkgPT4gYnl0ZXNUb1JscCwKICAgIGJ5dGVzVG9TdHJpbmc6ICgpID0+IGJ5dGVzVG9TdHJpbmcsCiAgICBjY2lwRmV0Y2g6ICgpID0+IGNjaXBSZXF1ZXN0LAogICAgY2NpcFJlcXVlc3Q6ICgpID0+IGNjaXBSZXF1ZXN0LAogICAgY2hlY2tzdW1BZGRyZXNzOiAoKSA9PiBjaGVja3N1bUFkZHJlc3MsCiAgICBjb21taXRtZW50VG9WZXJzaW9uZWRIYXNoOiAoKSA9PiBjb21taXRtZW50VG9WZXJzaW9uZWRIYXNoLAogICAgY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlczogKCkgPT4gY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlcywKICAgIGNvbXBhY3RTaWduYXR1cmVUb0hleDogKCkgPT4gc2VyaWFsaXplQ29tcGFjdFNpZ25hdHVyZSwKICAgIGNvbXBhY3RTaWduYXR1cmVUb1NpZ25hdHVyZTogKCkgPT4gY29tcGFjdFNpZ25hdHVyZVRvU2lnbmF0dXJlLAogICAgY29uY2F0OiAoKSA9PiBjb25jYXQsCiAgICBjb25jYXRCeXRlczogKCkgPT4gY29uY2F0Qnl0ZXMyLAogICAgY29uY2F0SGV4OiAoKSA9PiBjb25jYXRIZXgsCiAgICBjcmVhdGVDbGllbnQ6ICgpID0+IGNyZWF0ZUNsaWVudCwKICAgIGNyZWF0ZU5vbmNlTWFuYWdlcjogKCkgPT4gY3JlYXRlTm9uY2VNYW5hZ2VyLAogICAgY3JlYXRlUHVibGljQ2xpZW50OiAoKSA9PiBjcmVhdGVQdWJsaWNDbGllbnQsCiAgICBjcmVhdGVUZXN0Q2xpZW50OiAoKSA9PiBjcmVhdGVUZXN0Q2xpZW50LAogICAgY3JlYXRlVHJhbnNwb3J0OiAoKSA9PiBjcmVhdGVUcmFuc3BvcnQsCiAgICBjcmVhdGVXYWxsZXRDbGllbnQ6ICgpID0+IGNyZWF0ZVdhbGxldENsaWVudCwKICAgIGN1c3RvbTogKCkgPT4gY3VzdG9tLAogICAgZGVjb2RlQWJpUGFyYW1ldGVyczogKCkgPT4gZGVjb2RlQWJpUGFyYW1ldGVycywKICAgIGRlY29kZURlcGxveURhdGE6ICgpID0+IGRlY29kZURlcGxveURhdGEsCiAgICBkZWNvZGVFcnJvclJlc3VsdDogKCkgPT4gZGVjb2RlRXJyb3JSZXN1bHQsCiAgICBkZWNvZGVFdmVudExvZzogKCkgPT4gZGVjb2RlRXZlbnRMb2csCiAgICBkZWNvZGVGdW5jdGlvbkRhdGE6ICgpID0+IGRlY29kZUZ1bmN0aW9uRGF0YSwKICAgIGRlY29kZUZ1bmN0aW9uUmVzdWx0OiAoKSA9PiBkZWNvZGVGdW5jdGlvblJlc3VsdCwKICAgIGRlZmluZUJsb2NrOiAoKSA9PiBkZWZpbmVCbG9jaywKICAgIGRlZmluZUNoYWluOiAoKSA9PiBkZWZpbmVDaGFpbiwKICAgIGRlZmluZUt6ZzogKCkgPT4gZGVmaW5lS3pnLAogICAgZGVmaW5lVHJhbnNhY3Rpb246ICgpID0+IGRlZmluZVRyYW5zYWN0aW9uLAogICAgZGVmaW5lVHJhbnNhY3Rpb25SZWNlaXB0OiAoKSA9PiBkZWZpbmVUcmFuc2FjdGlvblJlY2VpcHQsCiAgICBkZWZpbmVUcmFuc2FjdGlvblJlcXVlc3Q6ICgpID0+IGRlZmluZVRyYW5zYWN0aW9uUmVxdWVzdCwKICAgIGRlcGxveWxlc3NDYWxsVmlhQnl0ZWNvZGVCeXRlY29kZTogKCkgPT4gZGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZUJ5dGVjb2RlLAogICAgZGVwbG95bGVzc0NhbGxWaWFGYWN0b3J5Qnl0ZWNvZGU6ICgpID0+IGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeUJ5dGVjb2RlLAogICAgZG9tYWluU2VwYXJhdG9yOiAoKSA9PiBkb21haW5TZXBhcmF0b3IsCiAgICBlbmNvZGVBYmlQYXJhbWV0ZXJzOiAoKSA9PiBlbmNvZGVBYmlQYXJhbWV0ZXJzLAogICAgZW5jb2RlRGVwbG95RGF0YTogKCkgPT4gZW5jb2RlRGVwbG95RGF0YSwKICAgIGVuY29kZUVycm9yUmVzdWx0OiAoKSA9PiBlbmNvZGVFcnJvclJlc3VsdCwKICAgIGVuY29kZUV2ZW50VG9waWNzOiAoKSA9PiBlbmNvZGVFdmVudFRvcGljcywKICAgIGVuY29kZUZ1bmN0aW9uRGF0YTogKCkgPT4gZW5jb2RlRnVuY3Rpb25EYXRhLAogICAgZW5jb2RlRnVuY3Rpb25SZXN1bHQ6ICgpID0+IGVuY29kZUZ1bmN0aW9uUmVzdWx0LAogICAgZW5jb2RlUGFja2VkOiAoKSA9PiBlbmNvZGVQYWNrZWQsCiAgICBlcmMyMEFiaTogKCkgPT4gZXJjMjBBYmksCiAgICBlcmMyMEFiaV9ieXRlczMyOiAoKSA9PiBlcmMyMEFiaV9ieXRlczMyLAogICAgZXJjNDYyNkFiaTogKCkgPT4gZXJjNDYyNkFiaSwKICAgIGVyYzcyMUFiaTogKCkgPT4gZXJjNzIxQWJpLAogICAgZXRoZXJVbml0czogKCkgPT4gZXRoZXJVbml0cywKICAgIGV4dHJhY3RDaGFpbjogKCkgPT4gZXh0cmFjdENoYWluLAogICAgZmFsbGJhY2s6ICgpID0+IGZhbGxiYWNrLAogICAgZm9ybWF0QmxvY2s6ICgpID0+IGZvcm1hdEJsb2NrLAogICAgZm9ybWF0RXRoZXI6ICgpID0+IGZvcm1hdEV0aGVyLAogICAgZm9ybWF0R3dlaTogKCkgPT4gZm9ybWF0R3dlaSwKICAgIGZvcm1hdExvZzogKCkgPT4gZm9ybWF0TG9nLAogICAgZm9ybWF0VHJhbnNhY3Rpb246ICgpID0+IGZvcm1hdFRyYW5zYWN0aW9uLAogICAgZm9ybWF0VHJhbnNhY3Rpb25SZWNlaXB0OiAoKSA9PiBmb3JtYXRUcmFuc2FjdGlvblJlY2VpcHQsCiAgICBmb3JtYXRUcmFuc2FjdGlvblJlcXVlc3Q6ICgpID0+IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdCwKICAgIGZvcm1hdFVuaXRzOiAoKSA9PiBmb3JtYXRVbml0cywKICAgIGZyb21CbG9iczogKCkgPT4gZnJvbUJsb2JzLAogICAgZnJvbUJ5dGVzOiAoKSA9PiBmcm9tQnl0ZXMsCiAgICBmcm9tSGV4OiAoKSA9PiBmcm9tSGV4LAogICAgZnJvbVJscDogKCkgPT4gZnJvbVJscCwKICAgIGdldEFiaUl0ZW06ICgpID0+IGdldEFiaUl0ZW0sCiAgICBnZXRBZGRyZXNzOiAoKSA9PiBnZXRBZGRyZXNzLAogICAgZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3M6ICgpID0+IGdldENoYWluQ29udHJhY3RBZGRyZXNzLAogICAgZ2V0Q29udHJhY3Q6ICgpID0+IGdldENvbnRyYWN0LAogICAgZ2V0Q29udHJhY3RBZGRyZXNzOiAoKSA9PiBnZXRDb250cmFjdEFkZHJlc3MyLAogICAgZ2V0Q29udHJhY3RFcnJvcjogKCkgPT4gZ2V0Q29udHJhY3RFcnJvciwKICAgIGdldENyZWF0ZTJBZGRyZXNzOiAoKSA9PiBnZXRDcmVhdGUyQWRkcmVzcywKICAgIGdldENyZWF0ZUFkZHJlc3M6ICgpID0+IGdldENyZWF0ZUFkZHJlc3MsCiAgICBnZXRFdmVudFNlbGVjdG9yOiAoKSA9PiB0b0V2ZW50U2VsZWN0b3IsCiAgICBnZXRFdmVudFNpZ25hdHVyZTogKCkgPT4gdG9TaWduYXR1cmUsCiAgICBnZXRGdW5jdGlvblNlbGVjdG9yOiAoKSA9PiB0b0Z1bmN0aW9uU2VsZWN0b3IsCiAgICBnZXRGdW5jdGlvblNpZ25hdHVyZTogKCkgPT4gdG9TaWduYXR1cmUsCiAgICBnZXRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlOiAoKSA9PiBnZXRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlLAogICAgZ2V0VHJhbnNhY3Rpb25UeXBlOiAoKSA9PiBnZXRUcmFuc2FjdGlvblR5cGUsCiAgICBnZXRUeXBlc0ZvckVJUDcxMkRvbWFpbjogKCkgPT4gZ2V0VHlwZXNGb3JFSVA3MTJEb21haW4sCiAgICBnd2VpVW5pdHM6ICgpID0+IGd3ZWlVbml0cywKICAgIGhhc2hEb21haW46ICgpID0+IGhhc2hEb21haW4sCiAgICBoYXNoTWVzc2FnZTogKCkgPT4gaGFzaE1lc3NhZ2UsCiAgICBoYXNoVHlwZWREYXRhOiAoKSA9PiBoYXNoVHlwZWREYXRhLAogICAgaGV4VG9CaWdJbnQ6ICgpID0+IGhleFRvQmlnSW50LAogICAgaGV4VG9Cb29sOiAoKSA9PiBoZXhUb0Jvb2wsCiAgICBoZXhUb0J5dGVzOiAoKSA9PiBoZXhUb0J5dGVzLAogICAgaGV4VG9Db21wYWN0U2lnbmF0dXJlOiAoKSA9PiBwYXJzZUNvbXBhY3RTaWduYXR1cmUsCiAgICBoZXhUb051bWJlcjogKCkgPT4gaGV4VG9OdW1iZXIsCiAgICBoZXhUb1JscDogKCkgPT4gaGV4VG9SbHAsCiAgICBoZXhUb1NpZ25hdHVyZTogKCkgPT4gcGFyc2VTaWduYXR1cmUyLAogICAgaGV4VG9TdHJpbmc6ICgpID0+IGhleFRvU3RyaW5nLAogICAgaHR0cDogKCkgPT4gaHR0cCwKICAgIGlzQWRkcmVzczogKCkgPT4gaXNBZGRyZXNzLAogICAgaXNBZGRyZXNzRXF1YWw6ICgpID0+IGlzQWRkcmVzc0VxdWFsLAogICAgaXNCeXRlczogKCkgPT4gaXNCeXRlczMsCiAgICBpc0VyYzY0OTJTaWduYXR1cmU6ICgpID0+IGlzRXJjNjQ5MlNpZ25hdHVyZSwKICAgIGlzSGFzaDogKCkgPT4gaXNIYXNoLAogICAgaXNIZXg6ICgpID0+IGlzSGV4LAogICAga2VjY2FrMjU2OiAoKSA9PiBrZWNjYWsyNTYsCiAgICBsYWJlbGhhc2g6ICgpID0+IGxhYmVsaGFzaCwKICAgIG1heEludDEwNDogKCkgPT4gbWF4SW50MTA0LAogICAgbWF4SW50MTEyOiAoKSA9PiBtYXhJbnQxMTIsCiAgICBtYXhJbnQxMjA6ICgpID0+IG1heEludDEyMCwKICAgIG1heEludDEyODogKCkgPT4gbWF4SW50MTI4LAogICAgbWF4SW50MTM2OiAoKSA9PiBtYXhJbnQxMzYsCiAgICBtYXhJbnQxNDQ6ICgpID0+IG1heEludDE0NCwKICAgIG1heEludDE1MjogKCkgPT4gbWF4SW50MTUyLAogICAgbWF4SW50MTY6ICgpID0+IG1heEludDE2LAogICAgbWF4SW50MTYwOiAoKSA9PiBtYXhJbnQxNjAsCiAgICBtYXhJbnQxNjg6ICgpID0+IG1heEludDE2OCwKICAgIG1heEludDE3NjogKCkgPT4gbWF4SW50MTc2LAogICAgbWF4SW50MTg0OiAoKSA9PiBtYXhJbnQxODQsCiAgICBtYXhJbnQxOTI6ICgpID0+IG1heEludDE5MiwKICAgIG1heEludDIwMDogKCkgPT4gbWF4SW50MjAwLAogICAgbWF4SW50MjA4OiAoKSA9PiBtYXhJbnQyMDgsCiAgICBtYXhJbnQyMTY6ICgpID0+IG1heEludDIxNiwKICAgIG1heEludDIyNDogKCkgPT4gbWF4SW50MjI0LAogICAgbWF4SW50MjMyOiAoKSA9PiBtYXhJbnQyMzIsCiAgICBtYXhJbnQyNDogKCkgPT4gbWF4SW50MjQsCiAgICBtYXhJbnQyNDA6ICgpID0+IG1heEludDI0MCwKICAgIG1heEludDI0ODogKCkgPT4gbWF4SW50MjQ4LAogICAgbWF4SW50MjU2OiAoKSA9PiBtYXhJbnQyNTYsCiAgICBtYXhJbnQzMjogKCkgPT4gbWF4SW50MzIsCiAgICBtYXhJbnQ0MDogKCkgPT4gbWF4SW50NDAsCiAgICBtYXhJbnQ0ODogKCkgPT4gbWF4SW50NDgsCiAgICBtYXhJbnQ1NjogKCkgPT4gbWF4SW50NTYsCiAgICBtYXhJbnQ2NDogKCkgPT4gbWF4SW50NjQsCiAgICBtYXhJbnQ3MjogKCkgPT4gbWF4SW50NzIsCiAgICBtYXhJbnQ4OiAoKSA9PiBtYXhJbnQ4LAogICAgbWF4SW50ODA6ICgpID0+IG1heEludDgwLAogICAgbWF4SW50ODg6ICgpID0+IG1heEludDg4LAogICAgbWF4SW50OTY6ICgpID0+IG1heEludDk2LAogICAgbWF4VWludDEwNDogKCkgPT4gbWF4VWludDEwNCwKICAgIG1heFVpbnQxMTI6ICgpID0+IG1heFVpbnQxMTIsCiAgICBtYXhVaW50MTIwOiAoKSA9PiBtYXhVaW50MTIwLAogICAgbWF4VWludDEyODogKCkgPT4gbWF4VWludDEyOCwKICAgIG1heFVpbnQxMzY6ICgpID0+IG1heFVpbnQxMzYsCiAgICBtYXhVaW50MTQ0OiAoKSA9PiBtYXhVaW50MTQ0LAogICAgbWF4VWludDE1MjogKCkgPT4gbWF4VWludDE1MiwKICAgIG1heFVpbnQxNjogKCkgPT4gbWF4VWludDE2LAogICAgbWF4VWludDE2MDogKCkgPT4gbWF4VWludDE2MCwKICAgIG1heFVpbnQxNjg6ICgpID0+IG1heFVpbnQxNjgsCiAgICBtYXhVaW50MTc2OiAoKSA9PiBtYXhVaW50MTc2LAogICAgbWF4VWludDE4NDogKCkgPT4gbWF4VWludDE4NCwKICAgIG1heFVpbnQxOTI6ICgpID0+IG1heFVpbnQxOTIsCiAgICBtYXhVaW50MjAwOiAoKSA9PiBtYXhVaW50MjAwLAogICAgbWF4VWludDIwODogKCkgPT4gbWF4VWludDIwOCwKICAgIG1heFVpbnQyMTY6ICgpID0+IG1heFVpbnQyMTYsCiAgICBtYXhVaW50MjI0OiAoKSA9PiBtYXhVaW50MjI0LAogICAgbWF4VWludDIzMjogKCkgPT4gbWF4VWludDIzMiwKICAgIG1heFVpbnQyNDogKCkgPT4gbWF4VWludDI0LAogICAgbWF4VWludDI0MDogKCkgPT4gbWF4VWludDI0MCwKICAgIG1heFVpbnQyNDg6ICgpID0+IG1heFVpbnQyNDgsCiAgICBtYXhVaW50MjU2OiAoKSA9PiBtYXhVaW50MjU2LAogICAgbWF4VWludDMyOiAoKSA9PiBtYXhVaW50MzIsCiAgICBtYXhVaW50NDA6ICgpID0+IG1heFVpbnQ0MCwKICAgIG1heFVpbnQ0ODogKCkgPT4gbWF4VWludDQ4LAogICAgbWF4VWludDU2OiAoKSA9PiBtYXhVaW50NTYsCiAgICBtYXhVaW50NjQ6ICgpID0+IG1heFVpbnQ2NCwKICAgIG1heFVpbnQ3MjogKCkgPT4gbWF4VWludDcyLAogICAgbWF4VWludDg6ICgpID0+IG1heFVpbnQ4LAogICAgbWF4VWludDgwOiAoKSA9PiBtYXhVaW50ODAsCiAgICBtYXhVaW50ODg6ICgpID0+IG1heFVpbnQ4OCwKICAgIG1heFVpbnQ5NjogKCkgPT4gbWF4VWludDk2LAogICAgbWluSW50MTA0OiAoKSA9PiBtaW5JbnQxMDQsCiAgICBtaW5JbnQxMTI6ICgpID0+IG1pbkludDExMiwKICAgIG1pbkludDEyMDogKCkgPT4gbWluSW50MTIwLAogICAgbWluSW50MTI4OiAoKSA9PiBtaW5JbnQxMjgsCiAgICBtaW5JbnQxMzY6ICgpID0+IG1pbkludDEzNiwKICAgIG1pbkludDE0NDogKCkgPT4gbWluSW50MTQ0LAogICAgbWluSW50MTUyOiAoKSA9PiBtaW5JbnQxNTIsCiAgICBtaW5JbnQxNjogKCkgPT4gbWluSW50MTYsCiAgICBtaW5JbnQxNjA6ICgpID0+IG1pbkludDE2MCwKICAgIG1pbkludDE2ODogKCkgPT4gbWluSW50MTY4LAogICAgbWluSW50MTc2OiAoKSA9PiBtaW5JbnQxNzYsCiAgICBtaW5JbnQxODQ6ICgpID0+IG1pbkludDE4NCwKICAgIG1pbkludDE5MjogKCkgPT4gbWluSW50MTkyLAogICAgbWluSW50MjAwOiAoKSA9PiBtaW5JbnQyMDAsCiAgICBtaW5JbnQyMDg6ICgpID0+IG1pbkludDIwOCwKICAgIG1pbkludDIxNjogKCkgPT4gbWluSW50MjE2LAogICAgbWluSW50MjI0OiAoKSA9PiBtaW5JbnQyMjQsCiAgICBtaW5JbnQyMzI6ICgpID0+IG1pbkludDIzMiwKICAgIG1pbkludDI0OiAoKSA9PiBtaW5JbnQyNCwKICAgIG1pbkludDI0MDogKCkgPT4gbWluSW50MjQwLAogICAgbWluSW50MjQ4OiAoKSA9PiBtaW5JbnQyNDgsCiAgICBtaW5JbnQyNTY6ICgpID0+IG1pbkludDI1NiwKICAgIG1pbkludDMyOiAoKSA9PiBtaW5JbnQzMiwKICAgIG1pbkludDQwOiAoKSA9PiBtaW5JbnQ0MCwKICAgIG1pbkludDQ4OiAoKSA9PiBtaW5JbnQ0OCwKICAgIG1pbkludDU2OiAoKSA9PiBtaW5JbnQ1NiwKICAgIG1pbkludDY0OiAoKSA9PiBtaW5JbnQ2NCwKICAgIG1pbkludDcyOiAoKSA9PiBtaW5JbnQ3MiwKICAgIG1pbkludDg6ICgpID0+IG1pbkludDgsCiAgICBtaW5JbnQ4MDogKCkgPT4gbWluSW50ODAsCiAgICBtaW5JbnQ4ODogKCkgPT4gbWluSW50ODgsCiAgICBtaW5JbnQ5NjogKCkgPT4gbWluSW50OTYsCiAgICBtdWx0aWNhbGwzQWJpOiAoKSA9PiBtdWx0aWNhbGwzQWJpLAogICAgbmFtZWhhc2g6ICgpID0+IG5hbWVoYXNoLAogICAgbm9uY2VNYW5hZ2VyOiAoKSA9PiBub25jZU1hbmFnZXIsCiAgICBudW1iZXJUb0J5dGVzOiAoKSA9PiBudW1iZXJUb0J5dGVzLAogICAgbnVtYmVyVG9IZXg6ICgpID0+IG51bWJlclRvSGV4LAogICAgb2ZmY2hhaW5Mb29rdXA6ICgpID0+IG9mZmNoYWluTG9va3VwLAogICAgb2ZmY2hhaW5Mb29rdXBBYmlJdGVtOiAoKSA9PiBvZmZjaGFpbkxvb2t1cEFiaUl0ZW0sCiAgICBvZmZjaGFpbkxvb2t1cFNpZ25hdHVyZTogKCkgPT4gb2ZmY2hhaW5Mb29rdXBTaWduYXR1cmUsCiAgICBwYWQ6ICgpID0+IHBhZCwKICAgIHBhZEJ5dGVzOiAoKSA9PiBwYWRCeXRlcywKICAgIHBhZEhleDogKCkgPT4gcGFkSGV4LAogICAgcGFyc2VBYmk6ICgpID0+IHBhcnNlQWJpLAogICAgcGFyc2VBYmlJdGVtOiAoKSA9PiBwYXJzZUFiaUl0ZW0sCiAgICBwYXJzZUFiaVBhcmFtZXRlcjogKCkgPT4gcGFyc2VBYmlQYXJhbWV0ZXIyLAogICAgcGFyc2VBYmlQYXJhbWV0ZXJzOiAoKSA9PiBwYXJzZUFiaVBhcmFtZXRlcnMsCiAgICBwYXJzZUNvbXBhY3RTaWduYXR1cmU6ICgpID0+IHBhcnNlQ29tcGFjdFNpZ25hdHVyZSwKICAgIHBhcnNlRXJjNjQ5MlNpZ25hdHVyZTogKCkgPT4gcGFyc2VFcmM2NDkyU2lnbmF0dXJlLAogICAgcGFyc2VFdGhlcjogKCkgPT4gcGFyc2VFdGhlciwKICAgIHBhcnNlRXZlbnRMb2dzOiAoKSA9PiBwYXJzZUV2ZW50TG9ncywKICAgIHBhcnNlR3dlaTogKCkgPT4gcGFyc2VHd2VpLAogICAgcGFyc2VTaWduYXR1cmU6ICgpID0+IHBhcnNlU2lnbmF0dXJlMiwKICAgIHBhcnNlVHJhbnNhY3Rpb246ICgpID0+IHBhcnNlVHJhbnNhY3Rpb24sCiAgICBwYXJzZVVuaXRzOiAoKSA9PiBwYXJzZVVuaXRzLAogICAgcHJlcGFyZUVuY29kZUZ1bmN0aW9uRGF0YTogKCkgPT4gcHJlcGFyZUVuY29kZUZ1bmN0aW9uRGF0YSwKICAgIHByZXNpZ25NZXNzYWdlUHJlZml4OiAoKSA9PiBwcmVzaWduTWVzc2FnZVByZWZpeCwKICAgIHB1YmxpY0FjdGlvbnM6ICgpID0+IHB1YmxpY0FjdGlvbnMsCiAgICByZWNvdmVyQWRkcmVzczogKCkgPT4gcmVjb3ZlckFkZHJlc3MsCiAgICByZWNvdmVyTWVzc2FnZUFkZHJlc3M6ICgpID0+IHJlY292ZXJNZXNzYWdlQWRkcmVzcywKICAgIHJlY292ZXJQdWJsaWNLZXk6ICgpID0+IHJlY292ZXJQdWJsaWNLZXksCiAgICByZWNvdmVyVHJhbnNhY3Rpb25BZGRyZXNzOiAoKSA9PiByZWNvdmVyVHJhbnNhY3Rpb25BZGRyZXNzLAogICAgcmVjb3ZlclR5cGVkRGF0YUFkZHJlc3M6ICgpID0+IHJlY292ZXJUeXBlZERhdGFBZGRyZXNzLAogICAgcmlwZW1kMTYwOiAoKSA9PiByaXBlbWQxNjAyLAogICAgcnBjU2NoZW1hOiAoKSA9PiBycGNTY2hlbWEsCiAgICBycGNUcmFuc2FjdGlvblR5cGU6ICgpID0+IHJwY1RyYW5zYWN0aW9uVHlwZSwKICAgIHNlcmlhbGl6ZUFjY2Vzc0xpc3Q6ICgpID0+IHNlcmlhbGl6ZUFjY2Vzc0xpc3QsCiAgICBzZXJpYWxpemVDb21wYWN0U2lnbmF0dXJlOiAoKSA9PiBzZXJpYWxpemVDb21wYWN0U2lnbmF0dXJlLAogICAgc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZTogKCkgPT4gc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZSwKICAgIHNlcmlhbGl6ZVNpZ25hdHVyZTogKCkgPT4gc2VyaWFsaXplU2lnbmF0dXJlLAogICAgc2VyaWFsaXplVHJhbnNhY3Rpb246ICgpID0+IHNlcmlhbGl6ZVRyYW5zYWN0aW9uLAogICAgc2VyaWFsaXplVHlwZWREYXRhOiAoKSA9PiBzZXJpYWxpemVUeXBlZERhdGEsCiAgICBzZXRFcnJvckNvbmZpZzogKCkgPT4gc2V0RXJyb3JDb25maWcsCiAgICBzZXR1cEt6ZzogKCkgPT4gc2V0dXBLemcsCiAgICBzaGEyNTY6ICgpID0+IHNoYTI1NjIsCiAgICBzaWRlY2Fyc1RvVmVyc2lvbmVkSGFzaGVzOiAoKSA9PiBzaWRlY2Fyc1RvVmVyc2lvbmVkSGFzaGVzLAogICAgc2lnbmF0dXJlVG9Db21wYWN0U2lnbmF0dXJlOiAoKSA9PiBzaWduYXR1cmVUb0NvbXBhY3RTaWduYXR1cmUsCiAgICBzaWduYXR1cmVUb0hleDogKCkgPT4gc2VyaWFsaXplU2lnbmF0dXJlLAogICAgc2l6ZTogKCkgPT4gc2l6ZSwKICAgIHNsaWNlOiAoKSA9PiBzbGljZSwKICAgIHNsaWNlQnl0ZXM6ICgpID0+IHNsaWNlQnl0ZXMsCiAgICBzbGljZUhleDogKCkgPT4gc2xpY2VIZXgsCiAgICBzdHJpbmdUb0J5dGVzOiAoKSA9PiBzdHJpbmdUb0J5dGVzLAogICAgc3RyaW5nVG9IZXg6ICgpID0+IHN0cmluZ1RvSGV4LAogICAgc3RyaW5naWZ5OiAoKSA9PiBzdHJpbmdpZnksCiAgICB0ZXN0QWN0aW9uczogKCkgPT4gdGVzdEFjdGlvbnMsCiAgICB0b0Jsb2JTaWRlY2FyczogKCkgPT4gdG9CbG9iU2lkZWNhcnMsCiAgICB0b0Jsb2JzOiAoKSA9PiB0b0Jsb2JzLAogICAgdG9CeXRlczogKCkgPT4gdG9CeXRlcywKICAgIHRvRXZlbnRIYXNoOiAoKSA9PiB0b1NpZ25hdHVyZUhhc2gsCiAgICB0b0V2ZW50U2VsZWN0b3I6ICgpID0+IHRvRXZlbnRTZWxlY3RvciwKICAgIHRvRXZlbnRTaWduYXR1cmU6ICgpID0+IHRvU2lnbmF0dXJlLAogICAgdG9GdW5jdGlvbkhhc2g6ICgpID0+IHRvU2lnbmF0dXJlSGFzaCwKICAgIHRvRnVuY3Rpb25TZWxlY3RvcjogKCkgPT4gdG9GdW5jdGlvblNlbGVjdG9yLAogICAgdG9GdW5jdGlvblNpZ25hdHVyZTogKCkgPT4gdG9TaWduYXR1cmUsCiAgICB0b0hleDogKCkgPT4gdG9IZXgsCiAgICB0b1ByZWZpeGVkTWVzc2FnZTogKCkgPT4gdG9QcmVmaXhlZE1lc3NhZ2UsCiAgICB0b1JscDogKCkgPT4gdG9SbHAsCiAgICB0cmFuc2FjdGlvblR5cGU6ICgpID0+IHRyYW5zYWN0aW9uVHlwZSwKICAgIHRyaW06ICgpID0+IHRyaW0sCiAgICB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JBYmk6ICgpID0+IHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckFiaSwKICAgIHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckJ5dGVDb2RlOiAoKSA9PiB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JCeXRlQ29kZSwKICAgIHZhbGlkYXRlVHlwZWREYXRhOiAoKSA9PiB2YWxpZGF0ZVR5cGVkRGF0YSwKICAgIHZlcmlmeUhhc2g6ICgpID0+IHZlcmlmeUhhc2gsCiAgICB2ZXJpZnlNZXNzYWdlOiAoKSA9PiB2ZXJpZnlNZXNzYWdlLAogICAgdmVyaWZ5VHlwZWREYXRhOiAoKSA9PiB2ZXJpZnlUeXBlZERhdGEsCiAgICB3YWxsZXRBY3Rpb25zOiAoKSA9PiB3YWxsZXRBY3Rpb25zLAogICAgd2ViU29ja2V0OiAoKSA9PiB3ZWJTb2NrZXQsCiAgICB3ZWlVbml0czogKCkgPT4gd2VpVW5pdHMsCiAgICB3aXRoUmV0cnk6ICgpID0+IHdpdGhSZXRyeSwKICAgIHdpdGhUaW1lb3V0OiAoKSA9PiB3aXRoVGltZW91dCwKICAgIHplcm9BZGRyZXNzOiAoKSA9PiB6ZXJvQWRkcmVzcywKICAgIHplcm9IYXNoOiAoKSA9PiB6ZXJvSGFzaAogIH0pOwogIGluaXRfZXhwb3J0cygpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2dldEFjdGlvbi5qcwogIGZ1bmN0aW9uIGdldEFjdGlvbihjbGllbnQsIGFjdGlvbkZuLCBuYW1lKSB7CiAgICBjb25zdCBhY3Rpb25faW1wbGljaXQgPSBjbGllbnRbYWN0aW9uRm4ubmFtZV07CiAgICBpZiAodHlwZW9mIGFjdGlvbl9pbXBsaWNpdCA9PT0gImZ1bmN0aW9uIikKICAgICAgcmV0dXJuIGFjdGlvbl9pbXBsaWNpdDsKICAgIGNvbnN0IGFjdGlvbl9leHBsaWNpdCA9IGNsaWVudFtuYW1lXTsKICAgIGlmICh0eXBlb2YgYWN0aW9uX2V4cGxpY2l0ID09PSAiZnVuY3Rpb24iKQogICAgICByZXR1cm4gYWN0aW9uX2V4cGxpY2l0OwogICAgcmV0dXJuIChwYXJhbXMpID0+IGFjdGlvbkZuKGNsaWVudCwgcGFyYW1zKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2VuY29kZUV2ZW50VG9waWNzLmpzCiAgaW5pdF9hYmkoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvbG9nLmpzCiAgaW5pdF9iYXNlKCk7CiAgdmFyIEZpbHRlclR5cGVOb3RTdXBwb3J0ZWRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih0eXBlKSB7CiAgICAgIHN1cGVyKGBGaWx0ZXIgdHlwZSAiJHt0eXBlfSIgaXMgbm90IHN1cHBvcnRlZC5gLCB7CiAgICAgICAgbmFtZTogIkZpbHRlclR5cGVOb3RTdXBwb3J0ZWRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlRXZlbnRUb3BpY3MuanMKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X2tlY2NhazI1NigpOwogIGluaXRfdG9FdmVudFNlbGVjdG9yKCk7CiAgaW5pdF9lbmNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9mb3JtYXRBYmlJdGVtMigpOwogIGluaXRfZ2V0QWJpSXRlbSgpOwogIHZhciBkb2NzUGF0aCA9ICIvZG9jcy9jb250cmFjdC9lbmNvZGVFdmVudFRvcGljcyI7CiAgZnVuY3Rpb24gZW5jb2RlRXZlbnRUb3BpY3MocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGV2ZW50TmFtZSwgYXJncyB9ID0gcGFyYW1ldGVyczsKICAgIGxldCBhYmlJdGVtID0gYWJpMlswXTsKICAgIGlmIChldmVudE5hbWUpIHsKICAgICAgY29uc3QgaXRlbSA9IGdldEFiaUl0ZW0oeyBhYmk6IGFiaTIsIG5hbWU6IGV2ZW50TmFtZSB9KTsKICAgICAgaWYgKCFpdGVtKQogICAgICAgIHRocm93IG5ldyBBYmlFdmVudE5vdEZvdW5kRXJyb3IoZXZlbnROYW1lLCB7IGRvY3NQYXRoIH0pOwogICAgICBhYmlJdGVtID0gaXRlbTsKICAgIH0KICAgIGlmIChhYmlJdGVtLnR5cGUgIT09ICJldmVudCIpCiAgICAgIHRocm93IG5ldyBBYmlFdmVudE5vdEZvdW5kRXJyb3Iodm9pZCAwLCB7IGRvY3NQYXRoIH0pOwogICAgY29uc3QgZGVmaW5pdGlvbiA9IGZvcm1hdEFiaUl0ZW0yKGFiaUl0ZW0pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdG9FdmVudFNlbGVjdG9yKGRlZmluaXRpb24pOwogICAgbGV0IHRvcGljcyA9IFtdOwogICAgaWYgKGFyZ3MgJiYgImlucHV0cyIgaW4gYWJpSXRlbSkgewogICAgICBjb25zdCBpbmRleGVkSW5wdXRzID0gYWJpSXRlbS5pbnB1dHM/LmZpbHRlcigocGFyYW0pID0+ICJpbmRleGVkIiBpbiBwYXJhbSAmJiBwYXJhbS5pbmRleGVkKTsKICAgICAgY29uc3QgYXJnc18gPSBBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IE9iamVjdC52YWx1ZXMoYXJncykubGVuZ3RoID4gMCA/IGluZGV4ZWRJbnB1dHM/Lm1hcCgoeCkgPT4gYXJnc1t4Lm5hbWVdKSA/PyBbXSA6IFtdOwogICAgICBpZiAoYXJnc18ubGVuZ3RoID4gMCkgewogICAgICAgIHRvcGljcyA9IGluZGV4ZWRJbnB1dHM/Lm1hcCgocGFyYW0sIGkpID0+IHsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3NfW2ldKSkKICAgICAgICAgICAgcmV0dXJuIGFyZ3NfW2ldLm1hcCgoXywgaikgPT4gZW5jb2RlQXJnKHsgcGFyYW0sIHZhbHVlOiBhcmdzX1tpXVtqXSB9KSk7CiAgICAgICAgICByZXR1cm4gYXJnc19baV0gPyBlbmNvZGVBcmcoeyBwYXJhbSwgdmFsdWU6IGFyZ3NfW2ldIH0pIDogbnVsbDsKICAgICAgICB9KSA/PyBbXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIFtzaWduYXR1cmUsIC4uLnRvcGljc107CiAgfQogIGZ1bmN0aW9uIGVuY29kZUFyZyh7IHBhcmFtLCB2YWx1ZSB9KSB7CiAgICBpZiAocGFyYW0udHlwZSA9PT0gInN0cmluZyIgfHwgcGFyYW0udHlwZSA9PT0gImJ5dGVzIikKICAgICAgcmV0dXJuIGtlY2NhazI1Nih0b0J5dGVzKHZhbHVlKSk7CiAgICBpZiAocGFyYW0udHlwZSA9PT0gInR1cGxlIiB8fCBwYXJhbS50eXBlLm1hdGNoKC9eKC4qKVxbKFxkKyk/XF0kLykpCiAgICAgIHRocm93IG5ldyBGaWx0ZXJUeXBlTm90U3VwcG9ydGVkRXJyb3IocGFyYW0udHlwZSk7CiAgICByZXR1cm4gZW5jb2RlQWJpUGFyYW1ldGVycyhbcGFyYW1dLCBbdmFsdWVdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvY3JlYXRlQ29udHJhY3RFdmVudEZpbHRlci5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9maWx0ZXJzL2NyZWF0ZUZpbHRlclJlcXVlc3RTY29wZS5qcwogIGZ1bmN0aW9uIGNyZWF0ZUZpbHRlclJlcXVlc3RTY29wZShjbGllbnQsIHsgbWV0aG9kIH0pIHsKICAgIGNvbnN0IHJlcXVlc3RNYXAgPSB7fTsKICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIpCiAgICAgIGNsaWVudC50cmFuc3BvcnQub25SZXNwb25zZT8uKCh7IG1ldGhvZDogbWV0aG9kXywgcmVzcG9uc2U6IGlkLCBzdGF0dXMsIHRyYW5zcG9ydCB9KSA9PiB7CiAgICAgICAgaWYgKHN0YXR1cyA9PT0gInN1Y2Nlc3MiICYmIG1ldGhvZCA9PT0gbWV0aG9kXykKICAgICAgICAgIHJlcXVlc3RNYXBbaWRdID0gdHJhbnNwb3J0LnJlcXVlc3Q7CiAgICAgIH0pOwogICAgcmV0dXJuIChpZCkgPT4gcmVxdWVzdE1hcFtpZF0gfHwgY2xpZW50LnJlcXVlc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2NyZWF0ZUNvbnRyYWN0RXZlbnRGaWx0ZXIuanMKICBhc3luYyBmdW5jdGlvbiBjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhZGRyZXNzLCBhYmk6IGFiaTIsIGFyZ3MsIGV2ZW50TmFtZSwgZnJvbUJsb2NrLCBzdHJpY3QsIHRvQmxvY2sgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBnZXRSZXF1ZXN0ID0gY3JlYXRlRmlsdGVyUmVxdWVzdFNjb3BlKGNsaWVudCwgewogICAgICBtZXRob2Q6ICJldGhfbmV3RmlsdGVyIgogICAgfSk7CiAgICBjb25zdCB0b3BpY3MgPSBldmVudE5hbWUgPyBlbmNvZGVFdmVudFRvcGljcyh7CiAgICAgIGFiaTogYWJpMiwKICAgICAgYXJncywKICAgICAgZXZlbnROYW1lCiAgICB9KSA6IHZvaWQgMDsKICAgIGNvbnN0IGlkID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfbmV3RmlsdGVyIiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgewogICAgICAgICAgYWRkcmVzcywKICAgICAgICAgIGZyb21CbG9jazogdHlwZW9mIGZyb21CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleChmcm9tQmxvY2spIDogZnJvbUJsb2NrLAogICAgICAgICAgdG9CbG9jazogdHlwZW9mIHRvQmxvY2sgPT09ICJiaWdpbnQiID8gbnVtYmVyVG9IZXgodG9CbG9jaykgOiB0b0Jsb2NrLAogICAgICAgICAgdG9waWNzCiAgICAgICAgfQogICAgICBdCiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIGFiaTogYWJpMiwKICAgICAgYXJncywKICAgICAgZXZlbnROYW1lLAogICAgICBpZCwKICAgICAgcmVxdWVzdDogZ2V0UmVxdWVzdChpZCksCiAgICAgIHN0cmljdDogQm9vbGVhbihzdHJpY3QpLAogICAgICB0eXBlOiAiZXZlbnQiCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9lc3RpbWF0ZUNvbnRyYWN0R2FzLmpzCiAgaW5pdF9wYXJzZUFjY291bnQoKTsKICBpbml0X2VuY29kZUZ1bmN0aW9uRGF0YSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vycm9ycy9nZXRDb250cmFjdEVycm9yLmpzCiAgaW5pdF9hYmkoKTsKICBpbml0X2Jhc2UoKTsKICBpbml0X2NvbnRyYWN0KCk7CiAgaW5pdF9ycGMoKTsKICB2YXIgRVhFQ1VUSU9OX1JFVkVSVEVEX0VSUk9SX0NPREUgPSAzOwogIGZ1bmN0aW9uIGdldENvbnRyYWN0RXJyb3IoZXJyLCB7IGFiaTogYWJpMiwgYWRkcmVzcywgYXJncywgZG9jc1BhdGg6IGRvY3NQYXRoOSwgZnVuY3Rpb25OYW1lLCBzZW5kZXIgfSkgewogICAgY29uc3QgeyBjb2RlLCBkYXRhLCBtZXNzYWdlLCBzaG9ydE1lc3NhZ2UgfSA9IGVyciBpbnN0YW5jZW9mIFJhd0NvbnRyYWN0RXJyb3IgPyBlcnIgOiBlcnIgaW5zdGFuY2VvZiBCYXNlRXJyb3IyID8gZXJyLndhbGsoKGVycjIpID0+ICJkYXRhIiBpbiBlcnIyKSB8fCBlcnIud2FsaygpIDoge307CiAgICBjb25zdCBjYXVzZSA9ICgoKSA9PiB7CiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IpCiAgICAgICAgcmV0dXJuIG5ldyBDb250cmFjdEZ1bmN0aW9uWmVyb0RhdGFFcnJvcih7IGZ1bmN0aW9uTmFtZSB9KTsKICAgICAgaWYgKFtFWEVDVVRJT05fUkVWRVJURURfRVJST1JfQ09ERSwgSW50ZXJuYWxScGNFcnJvci5jb2RlXS5pbmNsdWRlcyhjb2RlKSAmJiAoZGF0YSB8fCBtZXNzYWdlIHx8IHNob3J0TWVzc2FnZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yKHsKICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgIGRhdGE6IHR5cGVvZiBkYXRhID09PSAib2JqZWN0IiA/IGRhdGEuZGF0YSA6IGRhdGEsCiAgICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgICBtZXNzYWdlOiBzaG9ydE1lc3NhZ2UgPz8gbWVzc2FnZQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBlcnI7CiAgICB9KSgpOwogICAgcmV0dXJuIG5ldyBDb250cmFjdEZ1bmN0aW9uRXhlY3V0aW9uRXJyb3IoY2F1c2UsIHsKICAgICAgYWJpOiBhYmkyLAogICAgICBhcmdzLAogICAgICBjb250cmFjdEFkZHJlc3M6IGFkZHJlc3MsCiAgICAgIGRvY3NQYXRoOiBkb2NzUGF0aDksCiAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgc2VuZGVyCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVHYXMuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGluaXRfYmFzZSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjY291bnRzL3V0aWxzL3B1YmxpY0tleVRvQWRkcmVzcy5qcwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfa2VjY2FrMjU2KCk7CiAgZnVuY3Rpb24gcHVibGljS2V5VG9BZGRyZXNzKHB1YmxpY0tleSkgewogICAgY29uc3QgYWRkcmVzcyA9IGtlY2NhazI1NihgMHgke3B1YmxpY0tleS5zdWJzdHJpbmcoNCl9YCkuc3Vic3RyaW5nKDI2KTsKICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3MoYDB4JHthZGRyZXNzfWApOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcmVjb3ZlclB1YmxpY0tleS5qcwogIGluaXRfaXNIZXgoKTsKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gcmVjb3ZlclB1YmxpY0tleSh7IGhhc2g6IGhhc2gzLCBzaWduYXR1cmUgfSkgewogICAgY29uc3QgaGFzaEhleCA9IGlzSGV4KGhhc2gzKSA/IGhhc2gzIDogdG9IZXgoaGFzaDMpOwogICAgY29uc3QgeyBzZWNwMjU2azE6IHNlY3AyNTZrMTIgfSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gKGluaXRfc2VjcDI1NmsxKCksIHNlY3AyNTZrMV9leHBvcnRzKSk7CiAgICBjb25zdCBzaWduYXR1cmVfID0gKCgpID0+IHsKICAgICAgaWYgKHR5cGVvZiBzaWduYXR1cmUgPT09ICJvYmplY3QiICYmICJyIiBpbiBzaWduYXR1cmUgJiYgInMiIGluIHNpZ25hdHVyZSkgewogICAgICAgIGNvbnN0IHsgciwgcywgdiwgeVBhcml0eSB9ID0gc2lnbmF0dXJlOwogICAgICAgIGNvbnN0IHlQYXJpdHlPclYyID0gTnVtYmVyKHlQYXJpdHkgPz8gdik7CiAgICAgICAgY29uc3QgcmVjb3ZlcnlCaXQyID0gdG9SZWNvdmVyeUJpdCh5UGFyaXR5T3JWMik7CiAgICAgICAgcmV0dXJuIG5ldyBzZWNwMjU2azEyLlNpZ25hdHVyZShoZXhUb0JpZ0ludChyKSwgaGV4VG9CaWdJbnQocykpLmFkZFJlY292ZXJ5Qml0KHJlY292ZXJ5Qml0Mik7CiAgICAgIH0KICAgICAgY29uc3Qgc2lnbmF0dXJlSGV4ID0gaXNIZXgoc2lnbmF0dXJlKSA/IHNpZ25hdHVyZSA6IHRvSGV4KHNpZ25hdHVyZSk7CiAgICAgIGNvbnN0IHlQYXJpdHlPclYgPSBoZXhUb051bWJlcihgMHgke3NpZ25hdHVyZUhleC5zbGljZSgxMzApfWApOwogICAgICBjb25zdCByZWNvdmVyeUJpdCA9IHRvUmVjb3ZlcnlCaXQoeVBhcml0eU9yVik7CiAgICAgIHJldHVybiBzZWNwMjU2azEyLlNpZ25hdHVyZS5mcm9tQ29tcGFjdChzaWduYXR1cmVIZXguc3Vic3RyaW5nKDIsIDEzMCkpLmFkZFJlY292ZXJ5Qml0KHJlY292ZXJ5Qml0KTsKICAgIH0pKCk7CiAgICBjb25zdCBwdWJsaWNLZXkgPSBzaWduYXR1cmVfLnJlY292ZXJQdWJsaWNLZXkoaGFzaEhleC5zdWJzdHJpbmcoMikpLnRvSGV4KGZhbHNlKTsKICAgIHJldHVybiBgMHgke3B1YmxpY0tleX1gOwogIH0KICBmdW5jdGlvbiB0b1JlY292ZXJ5Qml0KHlQYXJpdHlPclYpIHsKICAgIGlmICh5UGFyaXR5T3JWID09PSAwIHx8IHlQYXJpdHlPclYgPT09IDEpCiAgICAgIHJldHVybiB5UGFyaXR5T3JWOwogICAgaWYgKHlQYXJpdHlPclYgPT09IDI3KQogICAgICByZXR1cm4gMDsKICAgIGlmICh5UGFyaXR5T3JWID09PSAyOCkKICAgICAgcmV0dXJuIDE7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeVBhcml0eU9yViB2YWx1ZSIpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcmVjb3ZlckFkZHJlc3MuanMKICBhc3luYyBmdW5jdGlvbiByZWNvdmVyQWRkcmVzcyh7IGhhc2g6IGhhc2gzLCBzaWduYXR1cmUgfSkgewogICAgcmV0dXJuIHB1YmxpY0tleVRvQWRkcmVzcyhhd2FpdCByZWNvdmVyUHVibGljS2V5KHsgaGFzaDogaGFzaDMsIHNpZ25hdHVyZSB9KSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2V4cGVyaW1lbnRhbC9laXA3NzAyL3V0aWxzL2hhc2hBdXRob3JpemF0aW9uLmpzCiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5jb2RpbmcvdG9SbHAuanMKICBpbml0X2Jhc2UoKTsKICBpbml0X2N1cnNvcjIoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gdG9SbHAoYnl0ZXMyLCB0byA9ICJoZXgiKSB7CiAgICBjb25zdCBlbmNvZGFibGUgPSBnZXRFbmNvZGFibGUoYnl0ZXMyKTsKICAgIGNvbnN0IGN1cnNvciA9IGNyZWF0ZUN1cnNvcihuZXcgVWludDhBcnJheShlbmNvZGFibGUubGVuZ3RoKSk7CiAgICBlbmNvZGFibGUuZW5jb2RlKGN1cnNvcik7CiAgICBpZiAodG8gPT09ICJoZXgiKQogICAgICByZXR1cm4gYnl0ZXNUb0hleChjdXJzb3IuYnl0ZXMpOwogICAgcmV0dXJuIGN1cnNvci5ieXRlczsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb1JscChieXRlczIsIHRvID0gImJ5dGVzIikgewogICAgcmV0dXJuIHRvUmxwKGJ5dGVzMiwgdG8pOwogIH0KICBmdW5jdGlvbiBoZXhUb1JscChoZXgsIHRvID0gImhleCIpIHsKICAgIHJldHVybiB0b1JscChoZXgsIHRvKTsKICB9CiAgZnVuY3Rpb24gZ2V0RW5jb2RhYmxlKGJ5dGVzMikgewogICAgaWYgKEFycmF5LmlzQXJyYXkoYnl0ZXMyKSkKICAgICAgcmV0dXJuIGdldEVuY29kYWJsZUxpc3QoYnl0ZXMyLm1hcCgoeCkgPT4gZ2V0RW5jb2RhYmxlKHgpKSk7CiAgICByZXR1cm4gZ2V0RW5jb2RhYmxlQnl0ZXMoYnl0ZXMyKTsKICB9CiAgZnVuY3Rpb24gZ2V0RW5jb2RhYmxlTGlzdChsaXN0KSB7CiAgICBjb25zdCBib2R5TGVuZ3RoID0gbGlzdC5yZWR1Y2UoKGFjYywgeCkgPT4gYWNjICsgeC5sZW5ndGgsIDApOwogICAgY29uc3Qgc2l6ZU9mQm9keUxlbmd0aCA9IGdldFNpemVPZkxlbmd0aChib2R5TGVuZ3RoKTsKICAgIGNvbnN0IGxlbmd0aCA9ICgoKSA9PiB7CiAgICAgIGlmIChib2R5TGVuZ3RoIDw9IDU1KQogICAgICAgIHJldHVybiAxICsgYm9keUxlbmd0aDsKICAgICAgcmV0dXJuIDEgKyBzaXplT2ZCb2R5TGVuZ3RoICsgYm9keUxlbmd0aDsKICAgIH0pKCk7CiAgICByZXR1cm4gewogICAgICBsZW5ndGgsCiAgICAgIGVuY29kZShjdXJzb3IpIHsKICAgICAgICBpZiAoYm9keUxlbmd0aCA8PSA1NSkgewogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlKDE5MiArIGJvZHlMZW5ndGgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJzb3IucHVzaEJ5dGUoMTkyICsgNTUgKyBzaXplT2ZCb2R5TGVuZ3RoKTsKICAgICAgICAgIGlmIChzaXplT2ZCb2R5TGVuZ3RoID09PSAxKQogICAgICAgICAgICBjdXJzb3IucHVzaFVpbnQ4KGJvZHlMZW5ndGgpOwogICAgICAgICAgZWxzZSBpZiAoc2l6ZU9mQm9keUxlbmd0aCA9PT0gMikKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MTYoYm9keUxlbmd0aCk7CiAgICAgICAgICBlbHNlIGlmIChzaXplT2ZCb2R5TGVuZ3RoID09PSAzKQogICAgICAgICAgICBjdXJzb3IucHVzaFVpbnQyNChib2R5TGVuZ3RoKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MzIoYm9keUxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGZvciAoY29uc3QgeyBlbmNvZGU6IGVuY29kZTIgfSBvZiBsaXN0KSB7CiAgICAgICAgICBlbmNvZGUyKGN1cnNvcik7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KICBmdW5jdGlvbiBnZXRFbmNvZGFibGVCeXRlcyhieXRlc09ySGV4KSB7CiAgICBjb25zdCBieXRlczIgPSB0eXBlb2YgYnl0ZXNPckhleCA9PT0gInN0cmluZyIgPyBoZXhUb0J5dGVzKGJ5dGVzT3JIZXgpIDogYnl0ZXNPckhleDsKICAgIGNvbnN0IHNpemVPZkJ5dGVzTGVuZ3RoID0gZ2V0U2l6ZU9mTGVuZ3RoKGJ5dGVzMi5sZW5ndGgpOwogICAgY29uc3QgbGVuZ3RoID0gKCgpID0+IHsKICAgICAgaWYgKGJ5dGVzMi5sZW5ndGggPT09IDEgJiYgYnl0ZXMyWzBdIDwgMTI4KQogICAgICAgIHJldHVybiAxOwogICAgICBpZiAoYnl0ZXMyLmxlbmd0aCA8PSA1NSkKICAgICAgICByZXR1cm4gMSArIGJ5dGVzMi5sZW5ndGg7CiAgICAgIHJldHVybiAxICsgc2l6ZU9mQnl0ZXNMZW5ndGggKyBieXRlczIubGVuZ3RoOwogICAgfSkoKTsKICAgIHJldHVybiB7CiAgICAgIGxlbmd0aCwKICAgICAgZW5jb2RlKGN1cnNvcikgewogICAgICAgIGlmIChieXRlczIubGVuZ3RoID09PSAxICYmIGJ5dGVzMlswXSA8IDEyOCkgewogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIH0gZWxzZSBpZiAoYnl0ZXMyLmxlbmd0aCA8PSA1NSkgewogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlKDEyOCArIGJ5dGVzMi5sZW5ndGgpOwogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJzb3IucHVzaEJ5dGUoMTI4ICsgNTUgKyBzaXplT2ZCeXRlc0xlbmd0aCk7CiAgICAgICAgICBpZiAoc2l6ZU9mQnl0ZXNMZW5ndGggPT09IDEpCiAgICAgICAgICAgIGN1cnNvci5wdXNoVWludDgoYnl0ZXMyLmxlbmd0aCk7CiAgICAgICAgICBlbHNlIGlmIChzaXplT2ZCeXRlc0xlbmd0aCA9PT0gMikKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MTYoYnl0ZXMyLmxlbmd0aCk7CiAgICAgICAgICBlbHNlIGlmIChzaXplT2ZCeXRlc0xlbmd0aCA9PT0gMykKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MjQoYnl0ZXMyLmxlbmd0aCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGN1cnNvci5wdXNoVWludDMyKGJ5dGVzMi5sZW5ndGgpOwogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9CiAgZnVuY3Rpb24gZ2V0U2l6ZU9mTGVuZ3RoKGxlbmd0aCkgewogICAgaWYgKGxlbmd0aCA8IDIgKiogOCkKICAgICAgcmV0dXJuIDE7CiAgICBpZiAobGVuZ3RoIDwgMiAqKiAxNikKICAgICAgcmV0dXJuIDI7CiAgICBpZiAobGVuZ3RoIDwgMiAqKiAyNCkKICAgICAgcmV0dXJuIDM7CiAgICBpZiAobGVuZ3RoIDwgMiAqKiAzMikKICAgICAgcmV0dXJuIDQ7CiAgICB0aHJvdyBuZXcgQmFzZUVycm9yMigiTGVuZ3RoIGlzIHRvbyBsYXJnZS4iKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXhwZXJpbWVudGFsL2VpcDc3MDIvdXRpbHMvaGFzaEF1dGhvcml6YXRpb24uanMKICBpbml0X2tlY2NhazI1NigpOwogIGZ1bmN0aW9uIGhhc2hBdXRob3JpemF0aW9uKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgY2hhaW5JZCwgY29udHJhY3RBZGRyZXNzLCBub25jZSwgdG8gfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBoYXNoMyA9IGtlY2NhazI1Nihjb25jYXRIZXgoWwogICAgICAiMHgwNSIsCiAgICAgIHRvUmxwKFtudW1iZXJUb0hleChjaGFpbklkKSwgY29udHJhY3RBZGRyZXNzLCBudW1iZXJUb0hleChub25jZSldKQogICAgXSkpOwogICAgaWYgKHRvID09PSAiYnl0ZXMiKQogICAgICByZXR1cm4gaGV4VG9CeXRlcyhoYXNoMyk7CiAgICByZXR1cm4gaGFzaDM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2V4cGVyaW1lbnRhbC9laXA3NzAyL3V0aWxzL3JlY292ZXJBdXRob3JpemF0aW9uQWRkcmVzcy5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJBdXRob3JpemF0aW9uQWRkcmVzcyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGF1dGhvcml6YXRpb24sIHNpZ25hdHVyZSB9ID0gcGFyYW1ldGVyczsKICAgIHJldHVybiByZWNvdmVyQWRkcmVzcyh7CiAgICAgIGhhc2g6IGhhc2hBdXRob3JpemF0aW9uKGF1dGhvcml6YXRpb24pLAogICAgICBzaWduYXR1cmU6IHNpZ25hdHVyZSA/PyBhdXRob3JpemF0aW9uCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVHYXMuanMKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2VzdGltYXRlR2FzLmpzCiAgaW5pdF9mb3JtYXRFdGhlcigpOwogIGluaXRfZm9ybWF0R3dlaSgpOwogIGluaXRfYmFzZSgpOwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICB2YXIgRXN0aW1hdGVHYXNFeGVjdXRpb25FcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBhY2NvdW50LCBkb2NzUGF0aDogZG9jc1BhdGg5LCBjaGFpbiwgZGF0YSwgZ2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbm9uY2UsIHRvLCB2YWx1ZSB9KSB7CiAgICAgIGNvbnN0IHByZXR0eUFyZ3MgPSBwcmV0dHlQcmludCh7CiAgICAgICAgZnJvbTogYWNjb3VudD8uYWRkcmVzcywKICAgICAgICB0bywKICAgICAgICB2YWx1ZTogdHlwZW9mIHZhbHVlICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRFdGhlcih2YWx1ZSl9ICR7Y2hhaW4/Lm5hdGl2ZUN1cnJlbmN5Py5zeW1ib2wgfHwgIkVUSCJ9YCwKICAgICAgICBkYXRhLAogICAgICAgIGdhcywKICAgICAgICBnYXNQcmljZTogdHlwZW9mIGdhc1ByaWNlICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKGdhc1ByaWNlKX0gZ3dlaWAsCiAgICAgICAgbWF4RmVlUGVyR2FzOiB0eXBlb2YgbWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9IGd3ZWlgLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiB0eXBlb2YgbWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkobWF4UHJpb3JpdHlGZWVQZXJHYXMpfSBnd2VpYCwKICAgICAgICBub25jZQogICAgICB9KTsKICAgICAgc3VwZXIoY2F1c2Uuc2hvcnRNZXNzYWdlLCB7CiAgICAgICAgY2F1c2UsCiAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgIC4uLmNhdXNlLm1ldGFNZXNzYWdlcyA/IFsuLi5jYXVzZS5tZXRhTWVzc2FnZXMsICIgIl0gOiBbXSwKICAgICAgICAgICJFc3RpbWF0ZSBHYXMgQXJndW1lbnRzOiIsCiAgICAgICAgICBwcmV0dHlBcmdzCiAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgbmFtZTogIkVzdGltYXRlR2FzRXhlY3V0aW9uRXJyb3IiCiAgICAgIH0pOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNhdXNlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgfSk7CiAgICAgIHRoaXMuY2F1c2UgPSBjYXVzZTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vycm9ycy9nZXRFc3RpbWF0ZUdhc0Vycm9yLmpzCiAgaW5pdF9ub2RlKCk7CiAgaW5pdF9nZXROb2RlRXJyb3IoKTsKICBmdW5jdGlvbiBnZXRFc3RpbWF0ZUdhc0Vycm9yKGVyciwgeyBkb2NzUGF0aDogZG9jc1BhdGg5LCAuLi5hcmdzIH0pIHsKICAgIGNvbnN0IGNhdXNlID0gKCgpID0+IHsKICAgICAgY29uc3QgY2F1c2UyID0gZ2V0Tm9kZUVycm9yKGVyciwgYXJncyk7CiAgICAgIGlmIChjYXVzZTIgaW5zdGFuY2VvZiBVbmtub3duTm9kZUVycm9yKQogICAgICAgIHJldHVybiBlcnI7CiAgICAgIHJldHVybiBjYXVzZTI7CiAgICB9KSgpOwogICAgcmV0dXJuIG5ldyBFc3RpbWF0ZUdhc0V4ZWN1dGlvbkVycm9yKGNhdXNlLCB7CiAgICAgIGRvY3NQYXRoOiBkb2NzUGF0aDksCiAgICAgIC4uLmFyZ3MKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9lc3RpbWF0ZUdhcy5qcwogIGluaXRfZXh0cmFjdCgpOwogIGluaXRfdHJhbnNhY3Rpb25SZXF1ZXN0KCk7CiAgaW5pdF9zdGF0ZU92ZXJyaWRlMigpOwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3ByZXBhcmVUcmFuc2FjdGlvblJlcXVlc3QuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9mZWUuanMKICBpbml0X2Zvcm1hdEd3ZWkoKTsKICBpbml0X2Jhc2UoKTsKICB2YXIgQmFzZUZlZVNjYWxhckVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiYGJhc2VGZWVNdWx0aXBsaWVyYCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxLiIsIHsKICAgICAgICBuYW1lOiAiQmFzZUZlZVNjYWxhckVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwogIHZhciBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiQ2hhaW4gZG9lcyBub3Qgc3VwcG9ydCBFSVAtMTU1OSBmZWVzLiIsIHsKICAgICAgICBuYW1lOiAiRWlwMTU1OUZlZXNOb3RTdXBwb3J0ZWRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKICB2YXIgTWF4RmVlUGVyR2FzVG9vTG93RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyBtYXhQcmlvcml0eUZlZVBlckdhcyB9KSB7CiAgICAgIHN1cGVyKGBcYG1heEZlZVBlckdhc1xgIGNhbm5vdCBiZSBsZXNzIHRoYW4gdGhlIFxgbWF4UHJpb3JpdHlGZWVQZXJHYXNcYCAoJHtmb3JtYXRHd2VpKG1heFByaW9yaXR5RmVlUGVyR2FzKX0gZ3dlaSkuYCwgeyBuYW1lOiAiTWF4RmVlUGVyR2FzVG9vTG93RXJyb3IiIH0pOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcy5qcwogIGluaXRfZnJvbUhleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9ibG9jay5qcwogIGluaXRfYmFzZSgpOwogIHZhciBCbG9ja05vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyIH0pIHsKICAgICAgbGV0IGlkZW50aWZpZXIgPSAiQmxvY2siOwogICAgICBpZiAoYmxvY2tIYXNoKQogICAgICAgIGlkZW50aWZpZXIgPSBgQmxvY2sgYXQgaGFzaCAiJHtibG9ja0hhc2h9ImA7CiAgICAgIGlmIChibG9ja051bWJlcikKICAgICAgICBpZGVudGlmaWVyID0gYEJsb2NrIGF0IG51bWJlciAiJHtibG9ja051bWJlcn0iYDsKICAgICAgc3VwZXIoYCR7aWRlbnRpZmllcn0gY291bGQgbm90IGJlIGZvdW5kLmAsIHsgbmFtZTogIkJsb2NrTm90Rm91bmRFcnJvciIgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRCbG9jay5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2Jsb2NrLmpzCiAgaW5pdF9mb3JtYXR0ZXIoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL3RyYW5zYWN0aW9uLmpzCiAgaW5pdF9mcm9tSGV4KCk7CiAgaW5pdF9mb3JtYXR0ZXIoKTsKICB2YXIgdHJhbnNhY3Rpb25UeXBlID0gewogICAgIjB4MCI6ICJsZWdhY3kiLAogICAgIjB4MSI6ICJlaXAyOTMwIiwKICAgICIweDIiOiAiZWlwMTU1OSIsCiAgICAiMHgzIjogImVpcDQ4NDQiLAogICAgIjB4NCI6ICJlaXA3NzAyIgogIH07CiAgZnVuY3Rpb24gZm9ybWF0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHRyYW5zYWN0aW9uXyA9IHsKICAgICAgLi4udHJhbnNhY3Rpb24sCiAgICAgIGJsb2NrSGFzaDogdHJhbnNhY3Rpb24uYmxvY2tIYXNoID8gdHJhbnNhY3Rpb24uYmxvY2tIYXNoIDogbnVsbCwKICAgICAgYmxvY2tOdW1iZXI6IHRyYW5zYWN0aW9uLmJsb2NrTnVtYmVyID8gQmlnSW50KHRyYW5zYWN0aW9uLmJsb2NrTnVtYmVyKSA6IG51bGwsCiAgICAgIGNoYWluSWQ6IHRyYW5zYWN0aW9uLmNoYWluSWQgPyBoZXhUb051bWJlcih0cmFuc2FjdGlvbi5jaGFpbklkKSA6IHZvaWQgMCwKICAgICAgZ2FzOiB0cmFuc2FjdGlvbi5nYXMgPyBCaWdJbnQodHJhbnNhY3Rpb24uZ2FzKSA6IHZvaWQgMCwKICAgICAgZ2FzUHJpY2U6IHRyYW5zYWN0aW9uLmdhc1ByaWNlID8gQmlnSW50KHRyYW5zYWN0aW9uLmdhc1ByaWNlKSA6IHZvaWQgMCwKICAgICAgbWF4RmVlUGVyQmxvYkdhczogdHJhbnNhY3Rpb24ubWF4RmVlUGVyQmxvYkdhcyA/IEJpZ0ludCh0cmFuc2FjdGlvbi5tYXhGZWVQZXJCbG9iR2FzKSA6IHZvaWQgMCwKICAgICAgbWF4RmVlUGVyR2FzOiB0cmFuc2FjdGlvbi5tYXhGZWVQZXJHYXMgPyBCaWdJbnQodHJhbnNhY3Rpb24ubWF4RmVlUGVyR2FzKSA6IHZvaWQgMCwKICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IHRyYW5zYWN0aW9uLm1heFByaW9yaXR5RmVlUGVyR2FzID8gQmlnSW50KHRyYW5zYWN0aW9uLm1heFByaW9yaXR5RmVlUGVyR2FzKSA6IHZvaWQgMCwKICAgICAgbm9uY2U6IHRyYW5zYWN0aW9uLm5vbmNlID8gaGV4VG9OdW1iZXIodHJhbnNhY3Rpb24ubm9uY2UpIDogdm9pZCAwLAogICAgICB0bzogdHJhbnNhY3Rpb24udG8gPyB0cmFuc2FjdGlvbi50byA6IG51bGwsCiAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5kZXggPyBOdW1iZXIodHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmRleCkgOiBudWxsLAogICAgICB0eXBlOiB0cmFuc2FjdGlvbi50eXBlID8gdHJhbnNhY3Rpb25UeXBlW3RyYW5zYWN0aW9uLnR5cGVdIDogdm9pZCAwLAogICAgICB0eXBlSGV4OiB0cmFuc2FjdGlvbi50eXBlID8gdHJhbnNhY3Rpb24udHlwZSA6IHZvaWQgMCwKICAgICAgdmFsdWU6IHRyYW5zYWN0aW9uLnZhbHVlID8gQmlnSW50KHRyYW5zYWN0aW9uLnZhbHVlKSA6IHZvaWQgMCwKICAgICAgdjogdHJhbnNhY3Rpb24udiA/IEJpZ0ludCh0cmFuc2FjdGlvbi52KSA6IHZvaWQgMAogICAgfTsKICAgIGlmICh0cmFuc2FjdGlvbi5hdXRob3JpemF0aW9uTGlzdCkKICAgICAgdHJhbnNhY3Rpb25fLmF1dGhvcml6YXRpb25MaXN0ID0gZm9ybWF0QXV0aG9yaXphdGlvbkxpc3QyKHRyYW5zYWN0aW9uLmF1dGhvcml6YXRpb25MaXN0KTsKICAgIHRyYW5zYWN0aW9uXy55UGFyaXR5ID0gKCgpID0+IHsKICAgICAgaWYgKHRyYW5zYWN0aW9uLnlQYXJpdHkpCiAgICAgICAgcmV0dXJuIE51bWJlcih0cmFuc2FjdGlvbi55UGFyaXR5KTsKICAgICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbl8udiA9PT0gImJpZ2ludCIpIHsKICAgICAgICBpZiAodHJhbnNhY3Rpb25fLnYgPT09IDBuIHx8IHRyYW5zYWN0aW9uXy52ID09PSAyN24pCiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBpZiAodHJhbnNhY3Rpb25fLnYgPT09IDFuIHx8IHRyYW5zYWN0aW9uXy52ID09PSAyOG4pCiAgICAgICAgICByZXR1cm4gMTsKICAgICAgICBpZiAodHJhbnNhY3Rpb25fLnYgPj0gMzVuKQogICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uXy52ICUgMm4gPT09IDBuID8gMSA6IDA7CiAgICAgIH0KICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIH0pKCk7CiAgICBpZiAodHJhbnNhY3Rpb25fLnR5cGUgPT09ICJsZWdhY3kiKSB7CiAgICAgIGRlbGV0ZSB0cmFuc2FjdGlvbl8uYWNjZXNzTGlzdDsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhGZWVQZXJCbG9iR2FzOwogICAgICBkZWxldGUgdHJhbnNhY3Rpb25fLm1heEZlZVBlckdhczsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhQcmlvcml0eUZlZVBlckdhczsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy55UGFyaXR5OwogICAgfQogICAgaWYgKHRyYW5zYWN0aW9uXy50eXBlID09PSAiZWlwMjkzMCIpIHsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhGZWVQZXJCbG9iR2FzOwogICAgICBkZWxldGUgdHJhbnNhY3Rpb25fLm1heEZlZVBlckdhczsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhQcmlvcml0eUZlZVBlckdhczsKICAgIH0KICAgIGlmICh0cmFuc2FjdGlvbl8udHlwZSA9PT0gImVpcDE1NTkiKSB7CiAgICAgIGRlbGV0ZSB0cmFuc2FjdGlvbl8ubWF4RmVlUGVyQmxvYkdhczsKICAgIH0KICAgIHJldHVybiB0cmFuc2FjdGlvbl87CiAgfQogIHZhciBkZWZpbmVUcmFuc2FjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVGb3JtYXR0ZXIoInRyYW5zYWN0aW9uIiwgZm9ybWF0VHJhbnNhY3Rpb24pOwogIGZ1bmN0aW9uIGZvcm1hdEF1dGhvcml6YXRpb25MaXN0MihhdXRob3JpemF0aW9uTGlzdCkgewogICAgcmV0dXJuIGF1dGhvcml6YXRpb25MaXN0Lm1hcCgoYXV0aG9yaXphdGlvbikgPT4gKHsKICAgICAgY29udHJhY3RBZGRyZXNzOiBhdXRob3JpemF0aW9uLmFkZHJlc3MsCiAgICAgIHI6IGF1dGhvcml6YXRpb24uciwKICAgICAgczogYXV0aG9yaXphdGlvbi5zLAogICAgICBjaGFpbklkOiBOdW1iZXIoYXV0aG9yaXphdGlvbi5jaGFpbklkKSwKICAgICAgbm9uY2U6IE51bWJlcihhdXRob3JpemF0aW9uLm5vbmNlKSwKICAgICAgLi4udHlwZW9mIGF1dGhvcml6YXRpb24ueVBhcml0eSAhPT0gInVuZGVmaW5lZCIgPyB7IHlQYXJpdHk6IE51bWJlcihhdXRob3JpemF0aW9uLnlQYXJpdHkpIH0gOiB7fSwKICAgICAgLi4udHlwZW9mIGF1dGhvcml6YXRpb24udiAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIGF1dGhvcml6YXRpb24ueVBhcml0eSA9PT0gInVuZGVmaW5lZCIgPyB7IHY6IE51bWJlcihhdXRob3JpemF0aW9uLnYpIH0gOiB7fQogICAgfSkpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2Jsb2NrLmpzCiAgZnVuY3Rpb24gZm9ybWF0QmxvY2soYmxvY2spIHsKICAgIGNvbnN0IHRyYW5zYWN0aW9ucyA9IGJsb2NrLnRyYW5zYWN0aW9ucz8ubWFwKCh0cmFuc2FjdGlvbikgPT4gewogICAgICBpZiAodHlwZW9mIHRyYW5zYWN0aW9uID09PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICAgIHJldHVybiBmb3JtYXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7CiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIC4uLmJsb2NrLAogICAgICBiYXNlRmVlUGVyR2FzOiBibG9jay5iYXNlRmVlUGVyR2FzID8gQmlnSW50KGJsb2NrLmJhc2VGZWVQZXJHYXMpIDogbnVsbCwKICAgICAgYmxvYkdhc1VzZWQ6IGJsb2NrLmJsb2JHYXNVc2VkID8gQmlnSW50KGJsb2NrLmJsb2JHYXNVc2VkKSA6IHZvaWQgMCwKICAgICAgZGlmZmljdWx0eTogYmxvY2suZGlmZmljdWx0eSA/IEJpZ0ludChibG9jay5kaWZmaWN1bHR5KSA6IHZvaWQgMCwKICAgICAgZXhjZXNzQmxvYkdhczogYmxvY2suZXhjZXNzQmxvYkdhcyA/IEJpZ0ludChibG9jay5leGNlc3NCbG9iR2FzKSA6IHZvaWQgMCwKICAgICAgZ2FzTGltaXQ6IGJsb2NrLmdhc0xpbWl0ID8gQmlnSW50KGJsb2NrLmdhc0xpbWl0KSA6IHZvaWQgMCwKICAgICAgZ2FzVXNlZDogYmxvY2suZ2FzVXNlZCA/IEJpZ0ludChibG9jay5nYXNVc2VkKSA6IHZvaWQgMCwKICAgICAgaGFzaDogYmxvY2suaGFzaCA/IGJsb2NrLmhhc2ggOiBudWxsLAogICAgICBsb2dzQmxvb206IGJsb2NrLmxvZ3NCbG9vbSA/IGJsb2NrLmxvZ3NCbG9vbSA6IG51bGwsCiAgICAgIG5vbmNlOiBibG9jay5ub25jZSA/IGJsb2NrLm5vbmNlIDogbnVsbCwKICAgICAgbnVtYmVyOiBibG9jay5udW1iZXIgPyBCaWdJbnQoYmxvY2subnVtYmVyKSA6IG51bGwsCiAgICAgIHNpemU6IGJsb2NrLnNpemUgPyBCaWdJbnQoYmxvY2suc2l6ZSkgOiB2b2lkIDAsCiAgICAgIHRpbWVzdGFtcDogYmxvY2sudGltZXN0YW1wID8gQmlnSW50KGJsb2NrLnRpbWVzdGFtcCkgOiB2b2lkIDAsCiAgICAgIHRyYW5zYWN0aW9ucywKICAgICAgdG90YWxEaWZmaWN1bHR5OiBibG9jay50b3RhbERpZmZpY3VsdHkgPyBCaWdJbnQoYmxvY2sudG90YWxEaWZmaWN1bHR5KSA6IG51bGwKICAgIH07CiAgfQogIHZhciBkZWZpbmVCbG9jayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVGb3JtYXR0ZXIoImJsb2NrIiwgZm9ybWF0QmxvY2spOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEJsb2NrLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvY2soY2xpZW50LCB7IGJsb2NrSGFzaCwgYmxvY2tOdW1iZXIsIGJsb2NrVGFnOiBibG9ja1RhZ18sIGluY2x1ZGVUcmFuc2FjdGlvbnM6IGluY2x1ZGVUcmFuc2FjdGlvbnNfIH0gPSB7fSkgewogICAgY29uc3QgYmxvY2tUYWcgPSBibG9ja1RhZ18gPz8gImxhdGVzdCI7CiAgICBjb25zdCBpbmNsdWRlVHJhbnNhY3Rpb25zID0gaW5jbHVkZVRyYW5zYWN0aW9uc18gPz8gZmFsc2U7CiAgICBjb25zdCBibG9ja051bWJlckhleCA9IGJsb2NrTnVtYmVyICE9PSB2b2lkIDAgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICBsZXQgYmxvY2sgPSBudWxsOwogICAgaWYgKGJsb2NrSGFzaCkgewogICAgICBibG9jayA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0QmxvY2tCeUhhc2giLAogICAgICAgIHBhcmFtczogW2Jsb2NrSGFzaCwgaW5jbHVkZVRyYW5zYWN0aW9uc10KICAgICAgfSwgeyBkZWR1cGU6IHRydWUgfSk7CiAgICB9IGVsc2UgewogICAgICBibG9jayA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0QmxvY2tCeU51bWJlciIsCiAgICAgICAgcGFyYW1zOiBbYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWcsIGluY2x1ZGVUcmFuc2FjdGlvbnNdCiAgICAgIH0sIHsgZGVkdXBlOiBCb29sZWFuKGJsb2NrTnVtYmVySGV4KSB9KTsKICAgIH0KICAgIGlmICghYmxvY2spCiAgICAgIHRocm93IG5ldyBCbG9ja05vdEZvdW5kRXJyb3IoeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyIH0pOwogICAgY29uc3QgZm9ybWF0ID0gY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzPy5ibG9jaz8uZm9ybWF0IHx8IGZvcm1hdEJsb2NrOwogICAgcmV0dXJuIGZvcm1hdChibG9jayk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEdhc1ByaWNlLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0R2FzUHJpY2UoY2xpZW50KSB7CiAgICBjb25zdCBnYXNQcmljZSA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2dhc1ByaWNlIgogICAgfSk7CiAgICByZXR1cm4gQmlnSW50KGdhc1ByaWNlKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcy5qcwogIGFzeW5jIGZ1bmN0aW9uIGVzdGltYXRlTWF4UHJpb3JpdHlGZWVQZXJHYXMoY2xpZW50LCBhcmdzKSB7CiAgICByZXR1cm4gaW50ZXJuYWxfZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcyhjbGllbnQsIGFyZ3MpOwogIH0KICBhc3luYyBmdW5jdGlvbiBpbnRlcm5hbF9lc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzKGNsaWVudCwgYXJncykgewogICAgY29uc3QgeyBibG9jazogYmxvY2tfLCBjaGFpbiA9IGNsaWVudC5jaGFpbiwgcmVxdWVzdCB9ID0gYXJncyB8fCB7fTsKICAgIGlmICh0eXBlb2YgY2hhaW4/LmZlZXM/LmRlZmF1bHRQcmlvcml0eUZlZSA9PT0gImZ1bmN0aW9uIikgewogICAgICBjb25zdCBibG9jayA9IGJsb2NrXyB8fCBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRCbG9jaywgImdldEJsb2NrIikoe30pOwogICAgICByZXR1cm4gY2hhaW4uZmVlcy5kZWZhdWx0UHJpb3JpdHlGZWUoewogICAgICAgIGJsb2NrLAogICAgICAgIGNsaWVudCwKICAgICAgICByZXF1ZXN0CiAgICAgIH0pOwogICAgfQogICAgaWYgKHR5cGVvZiBjaGFpbj8uZmVlcz8uZGVmYXVsdFByaW9yaXR5RmVlICE9PSAidW5kZWZpbmVkIikKICAgICAgcmV0dXJuIGNoYWluPy5mZWVzPy5kZWZhdWx0UHJpb3JpdHlGZWU7CiAgICB0cnkgewogICAgICBjb25zdCBtYXhQcmlvcml0eUZlZVBlckdhc0hleCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfbWF4UHJpb3JpdHlGZWVQZXJHYXMiCiAgICAgIH0pOwogICAgICByZXR1cm4gaGV4VG9CaWdJbnQobWF4UHJpb3JpdHlGZWVQZXJHYXNIZXgpOwogICAgfSBjYXRjaCB7CiAgICAgIGNvbnN0IFtibG9jaywgZ2FzUHJpY2VdID0gYXdhaXQgUHJvbWlzZS5hbGwoWwogICAgICAgIGJsb2NrXyA/IFByb21pc2UucmVzb2x2ZShibG9ja18pIDogZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2ssICJnZXRCbG9jayIpKHt9KSwKICAgICAgICBnZXRBY3Rpb24oY2xpZW50LCBnZXRHYXNQcmljZSwgImdldEdhc1ByaWNlIikoe30pCiAgICAgIF0pOwogICAgICBpZiAodHlwZW9mIGJsb2NrLmJhc2VGZWVQZXJHYXMgIT09ICJiaWdpbnQiKQogICAgICAgIHRocm93IG5ldyBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yKCk7CiAgICAgIGNvbnN0IG1heFByaW9yaXR5RmVlUGVyR2FzID0gZ2FzUHJpY2UgLSBibG9jay5iYXNlRmVlUGVyR2FzOwogICAgICBpZiAobWF4UHJpb3JpdHlGZWVQZXJHYXMgPCAwbikKICAgICAgICByZXR1cm4gMG47CiAgICAgIHJldHVybiBtYXhQcmlvcml0eUZlZVBlckdhczsKICAgIH0KICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVGZWVzUGVyR2FzLmpzCiAgYXN5bmMgZnVuY3Rpb24gZXN0aW1hdGVGZWVzUGVyR2FzKGNsaWVudCwgYXJncykgewogICAgcmV0dXJuIGludGVybmFsX2VzdGltYXRlRmVlc1BlckdhcyhjbGllbnQsIGFyZ3MpOwogIH0KICBhc3luYyBmdW5jdGlvbiBpbnRlcm5hbF9lc3RpbWF0ZUZlZXNQZXJHYXMoY2xpZW50LCBhcmdzKSB7CiAgICBjb25zdCB7IGJsb2NrOiBibG9ja18sIGNoYWluID0gY2xpZW50LmNoYWluLCByZXF1ZXN0LCB0eXBlID0gImVpcDE1NTkiIH0gPSBhcmdzIHx8IHt9OwogICAgY29uc3QgYmFzZUZlZU11bHRpcGxpZXIgPSBhd2FpdCAoYXN5bmMgKCkgPT4gewogICAgICBpZiAodHlwZW9mIGNoYWluPy5mZWVzPy5iYXNlRmVlTXVsdGlwbGllciA9PT0gImZ1bmN0aW9uIikKICAgICAgICByZXR1cm4gY2hhaW4uZmVlcy5iYXNlRmVlTXVsdGlwbGllcih7CiAgICAgICAgICBibG9jazogYmxvY2tfLAogICAgICAgICAgY2xpZW50LAogICAgICAgICAgcmVxdWVzdAogICAgICAgIH0pOwogICAgICByZXR1cm4gY2hhaW4/LmZlZXM/LmJhc2VGZWVNdWx0aXBsaWVyID8/IDEuMjsKICAgIH0pKCk7CiAgICBpZiAoYmFzZUZlZU11bHRpcGxpZXIgPCAxKQogICAgICB0aHJvdyBuZXcgQmFzZUZlZVNjYWxhckVycm9yKCk7CiAgICBjb25zdCBkZWNpbWFscyA9IGJhc2VGZWVNdWx0aXBsaWVyLnRvU3RyaW5nKCkuc3BsaXQoIi4iKVsxXT8ubGVuZ3RoID8/IDA7CiAgICBjb25zdCBkZW5vbWluYXRvciA9IDEwICoqIGRlY2ltYWxzOwogICAgY29uc3QgbXVsdGlwbHkgPSAoYmFzZTIpID0+IGJhc2UyICogQmlnSW50KE1hdGguY2VpbChiYXNlRmVlTXVsdGlwbGllciAqIGRlbm9taW5hdG9yKSkgLyBCaWdJbnQoZGVub21pbmF0b3IpOwogICAgY29uc3QgYmxvY2sgPSBibG9ja18gPyBibG9ja18gOiBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRCbG9jaywgImdldEJsb2NrIikoe30pOwogICAgaWYgKHR5cGVvZiBjaGFpbj8uZmVlcz8uZXN0aW1hdGVGZWVzUGVyR2FzID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGNvbnN0IGZlZXMyID0gYXdhaXQgY2hhaW4uZmVlcy5lc3RpbWF0ZUZlZXNQZXJHYXMoewogICAgICAgIGJsb2NrOiBibG9ja18sCiAgICAgICAgY2xpZW50LAogICAgICAgIG11bHRpcGx5LAogICAgICAgIHJlcXVlc3QsCiAgICAgICAgdHlwZQogICAgICB9KTsKICAgICAgaWYgKGZlZXMyICE9PSBudWxsKQogICAgICAgIHJldHVybiBmZWVzMjsKICAgIH0KICAgIGlmICh0eXBlID09PSAiZWlwMTU1OSIpIHsKICAgICAgaWYgKHR5cGVvZiBibG9jay5iYXNlRmVlUGVyR2FzICE9PSAiYmlnaW50IikKICAgICAgICB0aHJvdyBuZXcgRWlwMTU1OUZlZXNOb3RTdXBwb3J0ZWRFcnJvcigpOwogICAgICBjb25zdCBtYXhQcmlvcml0eUZlZVBlckdhcyA9IHR5cGVvZiByZXF1ZXN0Py5tYXhQcmlvcml0eUZlZVBlckdhcyA9PT0gImJpZ2ludCIgPyByZXF1ZXN0Lm1heFByaW9yaXR5RmVlUGVyR2FzIDogYXdhaXQgaW50ZXJuYWxfZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcyhjbGllbnQsIHsKICAgICAgICBibG9jaywKICAgICAgICBjaGFpbiwKICAgICAgICByZXF1ZXN0CiAgICAgIH0pOwogICAgICBjb25zdCBiYXNlRmVlUGVyR2FzID0gbXVsdGlwbHkoYmxvY2suYmFzZUZlZVBlckdhcyk7CiAgICAgIGNvbnN0IG1heEZlZVBlckdhcyA9IHJlcXVlc3Q/Lm1heEZlZVBlckdhcyA/PyBiYXNlRmVlUGVyR2FzICsgbWF4UHJpb3JpdHlGZWVQZXJHYXM7CiAgICAgIHJldHVybiB7CiAgICAgICAgbWF4RmVlUGVyR2FzLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzCiAgICAgIH07CiAgICB9CiAgICBjb25zdCBnYXNQcmljZSA9IHJlcXVlc3Q/Lmdhc1ByaWNlID8/IG11bHRpcGx5KGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEdhc1ByaWNlLCAiZ2V0R2FzUHJpY2UiKSh7fSkpOwogICAgcmV0dXJuIHsKICAgICAgZ2FzUHJpY2UKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldFRyYW5zYWN0aW9uQ291bnQuanMKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25Db3VudChjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tUYWcgPSAibGF0ZXN0IiwgYmxvY2tOdW1iZXIgfSkgewogICAgY29uc3QgY291bnQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRUcmFuc2FjdGlvbkNvdW50IiwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYmxvY2tOdW1iZXIgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiBibG9ja1RhZ10KICAgIH0sIHsgZGVkdXBlOiBCb29sZWFuKGJsb2NrTnVtYmVyKSB9KTsKICAgIHJldHVybiBoZXhUb051bWJlcihjb3VudCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Jsb2IvYmxvYnNUb0NvbW1pdG1lbnRzLmpzCiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIGJsb2JzVG9Db21taXRtZW50cyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGt6ZyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IGJsb2JzID0gdHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gcGFyYW1ldGVycy5ibG9icy5tYXAoKHgpID0+IGhleFRvQnl0ZXMoeCkpIDogcGFyYW1ldGVycy5ibG9iczsKICAgIGNvbnN0IGNvbW1pdG1lbnRzID0gW107CiAgICBmb3IgKGNvbnN0IGJsb2Igb2YgYmxvYnMpCiAgICAgIGNvbW1pdG1lbnRzLnB1c2goVWludDhBcnJheS5mcm9tKGt6Zy5ibG9iVG9LemdDb21taXRtZW50KGJsb2IpKSk7CiAgICByZXR1cm4gdG8gPT09ICJieXRlcyIgPyBjb21taXRtZW50cyA6IGNvbW1pdG1lbnRzLm1hcCgoeCkgPT4gYnl0ZXNUb0hleCh4KSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Jsb2IvYmxvYnNUb1Byb29mcy5qcwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBibG9ic1RvUHJvb2ZzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsga3pnIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgdG8gPSBwYXJhbWV0ZXJzLnRvID8/ICh0eXBlb2YgcGFyYW1ldGVycy5ibG9ic1swXSA9PT0gInN0cmluZyIgPyAiaGV4IiA6ICJieXRlcyIpOwogICAgY29uc3QgYmxvYnMgPSB0eXBlb2YgcGFyYW1ldGVycy5ibG9ic1swXSA9PT0gInN0cmluZyIgPyBwYXJhbWV0ZXJzLmJsb2JzLm1hcCgoeCkgPT4gaGV4VG9CeXRlcyh4KSkgOiBwYXJhbWV0ZXJzLmJsb2JzOwogICAgY29uc3QgY29tbWl0bWVudHMgPSB0eXBlb2YgcGFyYW1ldGVycy5jb21taXRtZW50c1swXSA9PT0gInN0cmluZyIgPyBwYXJhbWV0ZXJzLmNvbW1pdG1lbnRzLm1hcCgoeCkgPT4gaGV4VG9CeXRlcyh4KSkgOiBwYXJhbWV0ZXJzLmNvbW1pdG1lbnRzOwogICAgY29uc3QgcHJvb2ZzID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2JzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IGJsb2IgPSBibG9ic1tpXTsKICAgICAgY29uc3QgY29tbWl0bWVudCA9IGNvbW1pdG1lbnRzW2ldOwogICAgICBwcm9vZnMucHVzaChVaW50OEFycmF5LmZyb20oa3pnLmNvbXB1dGVCbG9iS3pnUHJvb2YoYmxvYiwgY29tbWl0bWVudCkpKTsKICAgIH0KICAgIHJldHVybiB0byA9PT0gImJ5dGVzIiA/IHByb29mcyA6IHByb29mcy5tYXAoKHgpID0+IGJ5dGVzVG9IZXgoeCkpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL2NvbW1pdG1lbnRUb1ZlcnNpb25lZEhhc2guanMKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9zaGEyNTYuanMKICBpbml0X3NoYTI1NigpOwogIGluaXRfaXNIZXgoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gc2hhMjU2Mih2YWx1ZSwgdG9fKSB7CiAgICBjb25zdCB0byA9IHRvXyB8fCAiaGV4IjsKICAgIGNvbnN0IGJ5dGVzMiA9IHNoYTI1Nihpc0hleCh2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pID8gdG9CeXRlcyh2YWx1ZSkgOiB2YWx1ZSk7CiAgICBpZiAodG8gPT09ICJieXRlcyIpCiAgICAgIHJldHVybiBieXRlczI7CiAgICByZXR1cm4gdG9IZXgoYnl0ZXMyKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYmxvYi9jb21taXRtZW50VG9WZXJzaW9uZWRIYXNoLmpzCiAgZnVuY3Rpb24gY29tbWl0bWVudFRvVmVyc2lvbmVkSGFzaChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGNvbW1pdG1lbnQsIHZlcnNpb246IHZlcnNpb24zID0gMSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIGNvbW1pdG1lbnQgPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IHZlcnNpb25lZEhhc2ggPSBzaGEyNTYyKGNvbW1pdG1lbnQsICJieXRlcyIpOwogICAgdmVyc2lvbmVkSGFzaC5zZXQoW3ZlcnNpb24zXSwgMCk7CiAgICByZXR1cm4gdG8gPT09ICJieXRlcyIgPyB2ZXJzaW9uZWRIYXNoIDogYnl0ZXNUb0hleCh2ZXJzaW9uZWRIYXNoKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYmxvYi9jb21taXRtZW50c1RvVmVyc2lvbmVkSGFzaGVzLmpzCiAgZnVuY3Rpb24gY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlcyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGNvbW1pdG1lbnRzLCB2ZXJzaW9uOiB2ZXJzaW9uMyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIGNvbW1pdG1lbnRzWzBdID09PSAic3RyaW5nIiA/ICJoZXgiIDogImJ5dGVzIik7CiAgICBjb25zdCBoYXNoZXMgPSBbXTsKICAgIGZvciAoY29uc3QgY29tbWl0bWVudCBvZiBjb21taXRtZW50cykgewogICAgICBoYXNoZXMucHVzaChjb21taXRtZW50VG9WZXJzaW9uZWRIYXNoKHsKICAgICAgICBjb21taXRtZW50LAogICAgICAgIHRvLAogICAgICAgIHZlcnNpb246IHZlcnNpb24zCiAgICAgIH0pKTsKICAgIH0KICAgIHJldHVybiBoYXNoZXM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9ibG9iLmpzCiAgdmFyIGJsb2JzUGVyVHJhbnNhY3Rpb24gPSA2OwogIHZhciBieXRlc1BlckZpZWxkRWxlbWVudCA9IDMyOwogIHZhciBmaWVsZEVsZW1lbnRzUGVyQmxvYiA9IDQwOTY7CiAgdmFyIGJ5dGVzUGVyQmxvYiA9IGJ5dGVzUGVyRmllbGRFbGVtZW50ICogZmllbGRFbGVtZW50c1BlckJsb2I7CiAgdmFyIG1heEJ5dGVzUGVyVHJhbnNhY3Rpb24gPSBieXRlc1BlckJsb2IgKiBibG9ic1BlclRyYW5zYWN0aW9uIC0gLy8gdGVybWluYXRvciBieXRlICgweDgwKS4KICAxIC0gLy8gemVybyBieXRlICgweDAwKSBhcHBlbmRlZCB0byBlYWNoIGZpZWxkIGVsZW1lbnQuCiAgMSAqIGZpZWxkRWxlbWVudHNQZXJCbG9iICogYmxvYnNQZXJUcmFuc2FjdGlvbjsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMva3pnLmpzCiAgdmFyIHZlcnNpb25lZEhhc2hWZXJzaW9uS3pnID0gMTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvYmxvYi5qcwogIGluaXRfYmFzZSgpOwogIHZhciBCbG9iU2l6ZVRvb0xhcmdlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyBtYXhTaXplLCBzaXplOiBzaXplMyB9KSB7CiAgICAgIHN1cGVyKCJCbG9iIHNpemUgaXMgdG9vIGxhcmdlLiIsIHsKICAgICAgICBtZXRhTWVzc2FnZXM6IFtgTWF4OiAke21heFNpemV9IGJ5dGVzYCwgYEdpdmVuOiAke3NpemUzfSBieXRlc2BdLAogICAgICAgIG5hbWU6ICJCbG9iU2l6ZVRvb0xhcmdlRXJyb3IiCiAgICAgIH0pOwogICAgfQogIH07CiAgdmFyIEVtcHR5QmxvYkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiQmxvYiBkYXRhIG11c3Qgbm90IGJlIGVtcHR5LiIsIHsgbmFtZTogIkVtcHR5QmxvYkVycm9yIiB9KTsKICAgIH0KICB9OwogIHZhciBJbnZhbGlkVmVyc2lvbmVkSGFzaFNpemVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGhhc2g6IGhhc2gzLCBzaXplOiBzaXplMyB9KSB7CiAgICAgIHN1cGVyKGBWZXJzaW9uZWQgaGFzaCAiJHtoYXNoM30iIHNpemUgaXMgaW52YWxpZC5gLCB7CiAgICAgICAgbWV0YU1lc3NhZ2VzOiBbIkV4cGVjdGVkOiAzMiIsIGBSZWNlaXZlZDogJHtzaXplM31gXSwKICAgICAgICBuYW1lOiAiSW52YWxpZFZlcnNpb25lZEhhc2hTaXplRXJyb3IiCiAgICAgIH0pOwogICAgfQogIH07CiAgdmFyIEludmFsaWRWZXJzaW9uZWRIYXNoVmVyc2lvbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgaGFzaDogaGFzaDMsIHZlcnNpb246IHZlcnNpb24zIH0pIHsKICAgICAgc3VwZXIoYFZlcnNpb25lZCBoYXNoICIke2hhc2gzfSIgdmVyc2lvbiBpcyBpbnZhbGlkLmAsIHsKICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgIGBFeHBlY3RlZDogJHt2ZXJzaW9uZWRIYXNoVmVyc2lvbkt6Z31gLAogICAgICAgICAgYFJlY2VpdmVkOiAke3ZlcnNpb24zfWAKICAgICAgICBdLAogICAgICAgIG5hbWU6ICJJbnZhbGlkVmVyc2lvbmVkSGFzaFZlcnNpb25FcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL3RvQmxvYnMuanMKICBpbml0X2N1cnNvcjIoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gdG9CbG9icyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB0byA9IHBhcmFtZXRlcnMudG8gPz8gKHR5cGVvZiBwYXJhbWV0ZXJzLmRhdGEgPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgcGFyYW1ldGVycy5kYXRhID09PSAic3RyaW5nIiA/IGhleFRvQnl0ZXMocGFyYW1ldGVycy5kYXRhKSA6IHBhcmFtZXRlcnMuZGF0YTsKICAgIGNvbnN0IHNpemVfID0gc2l6ZShkYXRhKTsKICAgIGlmICghc2l6ZV8pCiAgICAgIHRocm93IG5ldyBFbXB0eUJsb2JFcnJvcigpOwogICAgaWYgKHNpemVfID4gbWF4Qnl0ZXNQZXJUcmFuc2FjdGlvbikKICAgICAgdGhyb3cgbmV3IEJsb2JTaXplVG9vTGFyZ2VFcnJvcih7CiAgICAgICAgbWF4U2l6ZTogbWF4Qnl0ZXNQZXJUcmFuc2FjdGlvbiwKICAgICAgICBzaXplOiBzaXplXwogICAgICB9KTsKICAgIGNvbnN0IGJsb2JzID0gW107CiAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgIGxldCBwb3NpdGlvbiA9IDA7CiAgICB3aGlsZSAoYWN0aXZlKSB7CiAgICAgIGNvbnN0IGJsb2IgPSBjcmVhdGVDdXJzb3IobmV3IFVpbnQ4QXJyYXkoYnl0ZXNQZXJCbG9iKSk7CiAgICAgIGxldCBzaXplMyA9IDA7CiAgICAgIHdoaWxlIChzaXplMyA8IGZpZWxkRWxlbWVudHNQZXJCbG9iKSB7CiAgICAgICAgY29uc3QgYnl0ZXMyID0gZGF0YS5zbGljZShwb3NpdGlvbiwgcG9zaXRpb24gKyAoYnl0ZXNQZXJGaWVsZEVsZW1lbnQgLSAxKSk7CiAgICAgICAgYmxvYi5wdXNoQnl0ZSgwKTsKICAgICAgICBibG9iLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIGlmIChieXRlczIubGVuZ3RoIDwgMzEpIHsKICAgICAgICAgIGJsb2IucHVzaEJ5dGUoMTI4KTsKICAgICAgICAgIGFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNpemUzKys7CiAgICAgICAgcG9zaXRpb24gKz0gMzE7CiAgICAgIH0KICAgICAgYmxvYnMucHVzaChibG9iKTsKICAgIH0KICAgIHJldHVybiB0byA9PT0gImJ5dGVzIiA/IGJsb2JzLm1hcCgoeCkgPT4geC5ieXRlcykgOiBibG9icy5tYXAoKHgpID0+IGJ5dGVzVG9IZXgoeC5ieXRlcykpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL3RvQmxvYlNpZGVjYXJzLmpzCiAgZnVuY3Rpb24gdG9CbG9iU2lkZWNhcnMocGFyYW1ldGVycykgewogICAgY29uc3QgeyBkYXRhLCBremcsIHRvIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgYmxvYnMgPSBwYXJhbWV0ZXJzLmJsb2JzID8/IHRvQmxvYnMoeyBkYXRhLCB0byB9KTsKICAgIGNvbnN0IGNvbW1pdG1lbnRzID0gcGFyYW1ldGVycy5jb21taXRtZW50cyA/PyBibG9ic1RvQ29tbWl0bWVudHMoeyBibG9icywga3pnLCB0byB9KTsKICAgIGNvbnN0IHByb29mcyA9IHBhcmFtZXRlcnMucHJvb2ZzID8/IGJsb2JzVG9Qcm9vZnMoeyBibG9icywgY29tbWl0bWVudHMsIGt6ZywgdG8gfSk7CiAgICBjb25zdCBzaWRlY2FycyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBibG9icy5sZW5ndGg7IGkrKykKICAgICAgc2lkZWNhcnMucHVzaCh7CiAgICAgICAgYmxvYjogYmxvYnNbaV0sCiAgICAgICAgY29tbWl0bWVudDogY29tbWl0bWVudHNbaV0sCiAgICAgICAgcHJvb2Y6IHByb29mc1tpXQogICAgICB9KTsKICAgIHJldHVybiBzaWRlY2FyczsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdC5qcwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL2dldFRyYW5zYWN0aW9uVHlwZS5qcwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb24pIHsKICAgIGlmICh0cmFuc2FjdGlvbi50eXBlKQogICAgICByZXR1cm4gdHJhbnNhY3Rpb24udHlwZTsKICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24uYXV0aG9yaXphdGlvbkxpc3QgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gImVpcDc3MDIiOwogICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbi5ibG9icyAhPT0gInVuZGVmaW5lZCIgfHwgdHlwZW9mIHRyYW5zYWN0aW9uLmJsb2JWZXJzaW9uZWRIYXNoZXMgIT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiB0cmFuc2FjdGlvbi5tYXhGZWVQZXJCbG9iR2FzICE9PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgdHJhbnNhY3Rpb24uc2lkZWNhcnMgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gImVpcDQ4NDQiOwogICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbi5tYXhGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiB0cmFuc2FjdGlvbi5tYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgcmV0dXJuICJlaXAxNTU5IjsKICAgIH0KICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24uZ2FzUHJpY2UgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24uYWNjZXNzTGlzdCAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgcmV0dXJuICJlaXAyOTMwIjsKICAgICAgcmV0dXJuICJsZWdhY3kiOwogICAgfQogICAgdGhyb3cgbmV3IEludmFsaWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbkVycm9yKHsgdHJhbnNhY3Rpb24gfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldENoYWluSWQuanMKICBpbml0X2Zyb21IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRDaGFpbklkKGNsaWVudCkgewogICAgY29uc3QgY2hhaW5JZEhleCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2NoYWluSWQiCiAgICB9LCB7IGRlZHVwZTogdHJ1ZSB9KTsKICAgIHJldHVybiBoZXhUb051bWJlcihjaGFpbklkSGV4KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdC5qcwogIHZhciBkZWZhdWx0UGFyYW1ldGVycyA9IFsKICAgICJibG9iVmVyc2lvbmVkSGFzaGVzIiwKICAgICJjaGFpbklkIiwKICAgICJmZWVzIiwKICAgICJnYXMiLAogICAgIm5vbmNlIiwKICAgICJ0eXBlIgogIF07CiAgYXN5bmMgZnVuY3Rpb24gcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdChjbGllbnQsIGFyZ3MpIHsKICAgIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudF8gPSBjbGllbnQuYWNjb3VudCwgYmxvYnMsIGNoYWluLCBnYXMsIGt6Zywgbm9uY2UsIHBhcmFtZXRlcnMgPSBkZWZhdWx0UGFyYW1ldGVycywgdHlwZSB9ID0gYXJnczsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICBjb25zdCByZXF1ZXN0ID0geyAuLi5hcmdzLCAuLi5hY2NvdW50ID8geyBmcm9tOiBhY2NvdW50Py5hZGRyZXNzIH0gOiB7fSB9OwogICAgbGV0IGJsb2NrOwogICAgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvY2syKCkgewogICAgICBpZiAoYmxvY2spCiAgICAgICAgcmV0dXJuIGJsb2NrOwogICAgICBibG9jayA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrLCAiZ2V0QmxvY2siKSh7IGJsb2NrVGFnOiAibGF0ZXN0IiB9KTsKICAgICAgcmV0dXJuIGJsb2NrOwogICAgfQogICAgbGV0IGNoYWluSWQ7CiAgICBhc3luYyBmdW5jdGlvbiBnZXRDaGFpbklkMigpIHsKICAgICAgaWYgKGNoYWluSWQpCiAgICAgICAgcmV0dXJuIGNoYWluSWQ7CiAgICAgIGlmIChjaGFpbikKICAgICAgICByZXR1cm4gY2hhaW4uaWQ7CiAgICAgIGlmICh0eXBlb2YgYXJncy5jaGFpbklkICE9PSAidW5kZWZpbmVkIikKICAgICAgICByZXR1cm4gYXJncy5jaGFpbklkOwogICAgICBjb25zdCBjaGFpbklkXyA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldENoYWluSWQsICJnZXRDaGFpbklkIikoe30pOwogICAgICBjaGFpbklkID0gY2hhaW5JZF87CiAgICAgIHJldHVybiBjaGFpbklkOwogICAgfQogICAgaWYgKChwYXJhbWV0ZXJzLmluY2x1ZGVzKCJibG9iVmVyc2lvbmVkSGFzaGVzIikgfHwgcGFyYW1ldGVycy5pbmNsdWRlcygic2lkZWNhcnMiKSkgJiYgYmxvYnMgJiYga3pnKSB7CiAgICAgIGNvbnN0IGNvbW1pdG1lbnRzID0gYmxvYnNUb0NvbW1pdG1lbnRzKHsgYmxvYnMsIGt6ZyB9KTsKICAgICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoImJsb2JWZXJzaW9uZWRIYXNoZXMiKSkgewogICAgICAgIGNvbnN0IHZlcnNpb25lZEhhc2hlcyA9IGNvbW1pdG1lbnRzVG9WZXJzaW9uZWRIYXNoZXMoewogICAgICAgICAgY29tbWl0bWVudHMsCiAgICAgICAgICB0bzogImhleCIKICAgICAgICB9KTsKICAgICAgICByZXF1ZXN0LmJsb2JWZXJzaW9uZWRIYXNoZXMgPSB2ZXJzaW9uZWRIYXNoZXM7CiAgICAgIH0KICAgICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoInNpZGVjYXJzIikpIHsKICAgICAgICBjb25zdCBwcm9vZnMgPSBibG9ic1RvUHJvb2ZzKHsgYmxvYnMsIGNvbW1pdG1lbnRzLCBremcgfSk7CiAgICAgICAgY29uc3Qgc2lkZWNhcnMgPSB0b0Jsb2JTaWRlY2Fycyh7CiAgICAgICAgICBibG9icywKICAgICAgICAgIGNvbW1pdG1lbnRzLAogICAgICAgICAgcHJvb2ZzLAogICAgICAgICAgdG86ICJoZXgiCiAgICAgICAgfSk7CiAgICAgICAgcmVxdWVzdC5zaWRlY2FycyA9IHNpZGVjYXJzOwogICAgICB9CiAgICB9CiAgICBpZiAocGFyYW1ldGVycy5pbmNsdWRlcygiY2hhaW5JZCIpKQogICAgICByZXF1ZXN0LmNoYWluSWQgPSBhd2FpdCBnZXRDaGFpbklkMigpOwogICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoIm5vbmNlIikgJiYgdHlwZW9mIG5vbmNlID09PSAidW5kZWZpbmVkIiAmJiBhY2NvdW50KSB7CiAgICAgIGlmIChhY2NvdW50Lm5vbmNlTWFuYWdlcikgewogICAgICAgIGNvbnN0IGNoYWluSWQyID0gYXdhaXQgZ2V0Q2hhaW5JZDIoKTsKICAgICAgICByZXF1ZXN0Lm5vbmNlID0gYXdhaXQgYWNjb3VudC5ub25jZU1hbmFnZXIuY29uc3VtZSh7CiAgICAgICAgICBhZGRyZXNzOiBhY2NvdW50LmFkZHJlc3MsCiAgICAgICAgICBjaGFpbklkOiBjaGFpbklkMiwKICAgICAgICAgIGNsaWVudAogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHJlcXVlc3Qubm9uY2UgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRUcmFuc2FjdGlvbkNvdW50LCAiZ2V0VHJhbnNhY3Rpb25Db3VudCIpKHsKICAgICAgICAgIGFkZHJlc3M6IGFjY291bnQuYWRkcmVzcywKICAgICAgICAgIGJsb2NrVGFnOiAicGVuZGluZyIKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgaWYgKChwYXJhbWV0ZXJzLmluY2x1ZGVzKCJmZWVzIikgfHwgcGFyYW1ldGVycy5pbmNsdWRlcygidHlwZSIpKSAmJiB0eXBlb2YgdHlwZSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXF1ZXN0LnR5cGUgPSBnZXRUcmFuc2FjdGlvblR5cGUocmVxdWVzdCk7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIGNvbnN0IGJsb2NrMiA9IGF3YWl0IGdldEJsb2NrMigpOwogICAgICAgIHJlcXVlc3QudHlwZSA9IHR5cGVvZiBibG9jazI/LmJhc2VGZWVQZXJHYXMgPT09ICJiaWdpbnQiID8gImVpcDE1NTkiIDogImxlZ2FjeSI7CiAgICAgIH0KICAgIH0KICAgIGlmIChwYXJhbWV0ZXJzLmluY2x1ZGVzKCJmZWVzIikpIHsKICAgICAgaWYgKHJlcXVlc3QudHlwZSAhPT0gImxlZ2FjeSIgJiYgcmVxdWVzdC50eXBlICE9PSAiZWlwMjkzMCIpIHsKICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3QubWF4RmVlUGVyR2FzID09PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgcmVxdWVzdC5tYXhQcmlvcml0eUZlZVBlckdhcyA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIGNvbnN0IGJsb2NrMiA9IGF3YWl0IGdldEJsb2NrMigpOwogICAgICAgICAgY29uc3QgeyBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzIH0gPSBhd2FpdCBpbnRlcm5hbF9lc3RpbWF0ZUZlZXNQZXJHYXMoY2xpZW50LCB7CiAgICAgICAgICAgIGJsb2NrOiBibG9jazIsCiAgICAgICAgICAgIGNoYWluLAogICAgICAgICAgICByZXF1ZXN0CiAgICAgICAgICB9KTsKICAgICAgICAgIGlmICh0eXBlb2YgYXJncy5tYXhQcmlvcml0eUZlZVBlckdhcyA9PT0gInVuZGVmaW5lZCIgJiYgYXJncy5tYXhGZWVQZXJHYXMgJiYgYXJncy5tYXhGZWVQZXJHYXMgPCBtYXhQcmlvcml0eUZlZVBlckdhcykKICAgICAgICAgICAgdGhyb3cgbmV3IE1heEZlZVBlckdhc1Rvb0xvd0Vycm9yKHsKICAgICAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhcwogICAgICAgICAgICB9KTsKICAgICAgICAgIHJlcXVlc3QubWF4UHJpb3JpdHlGZWVQZXJHYXMgPSBtYXhQcmlvcml0eUZlZVBlckdhczsKICAgICAgICAgIHJlcXVlc3QubWF4RmVlUGVyR2FzID0gbWF4RmVlUGVyR2FzOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAodHlwZW9mIGFyZ3MubWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgYXJncy5tYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgICB0aHJvdyBuZXcgRWlwMTU1OUZlZXNOb3RTdXBwb3J0ZWRFcnJvcigpOwogICAgICAgIGNvbnN0IGJsb2NrMiA9IGF3YWl0IGdldEJsb2NrMigpOwogICAgICAgIGNvbnN0IHsgZ2FzUHJpY2U6IGdhc1ByaWNlXyB9ID0gYXdhaXQgaW50ZXJuYWxfZXN0aW1hdGVGZWVzUGVyR2FzKGNsaWVudCwgewogICAgICAgICAgYmxvY2s6IGJsb2NrMiwKICAgICAgICAgIGNoYWluLAogICAgICAgICAgcmVxdWVzdCwKICAgICAgICAgIHR5cGU6ICJsZWdhY3kiCiAgICAgICAgfSk7CiAgICAgICAgcmVxdWVzdC5nYXNQcmljZSA9IGdhc1ByaWNlXzsKICAgICAgfQogICAgfQogICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoImdhcyIpICYmIHR5cGVvZiBnYXMgPT09ICJ1bmRlZmluZWQiKQogICAgICByZXF1ZXN0LmdhcyA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGVzdGltYXRlR2FzLCAiZXN0aW1hdGVHYXMiKSh7CiAgICAgICAgLi4ucmVxdWVzdCwKICAgICAgICBhY2NvdW50OiBhY2NvdW50ID8geyBhZGRyZXNzOiBhY2NvdW50LmFkZHJlc3MsIHR5cGU6ICJqc29uLXJwYyIgfSA6IHZvaWQgMAogICAgICB9KTsKICAgIGFzc2VydFJlcXVlc3QocmVxdWVzdCk7CiAgICBkZWxldGUgcmVxdWVzdC5wYXJhbWV0ZXJzOwogICAgcmV0dXJuIHJlcXVlc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEJhbGFuY2UuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0QmFsYW5jZShjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tOdW1iZXIsIGJsb2NrVGFnID0gImxhdGVzdCIgfSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgIGNvbnN0IGJhbGFuY2UgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRCYWxhbmNlIiwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWddCiAgICB9KTsKICAgIHJldHVybiBCaWdJbnQoYmFsYW5jZSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2VzdGltYXRlR2FzLmpzCiAgYXN5bmMgZnVuY3Rpb24gZXN0aW1hdGVHYXMoY2xpZW50LCBhcmdzKSB7CiAgICBjb25zdCBhY2NvdW50XyA9IGFyZ3MuYWNjb3VudCA/PyBjbGllbnQuYWNjb3VudDsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICB0cnkgewogICAgICBsZXQgZXN0aW1hdGVHYXNfcnBjID0gZnVuY3Rpb24ocGFyYW1ldGVycykgewogICAgICAgIGNvbnN0IHsgYmxvY2s6IGJsb2NrMiwgcmVxdWVzdDogcmVxdWVzdDIsIHJwY1N0YXRlT3ZlcnJpZGU6IHJwY1N0YXRlT3ZlcnJpZGUyIH0gPSBwYXJhbWV0ZXJzOwogICAgICAgIHJldHVybiBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgICBtZXRob2Q6ICJldGhfZXN0aW1hdGVHYXMiLAogICAgICAgICAgcGFyYW1zOiBycGNTdGF0ZU92ZXJyaWRlMiA/IFtyZXF1ZXN0MiwgYmxvY2syID8/ICJsYXRlc3QiLCBycGNTdGF0ZU92ZXJyaWRlMl0gOiBibG9jazIgPyBbcmVxdWVzdDIsIGJsb2NrMl0gOiBbcmVxdWVzdDJdCiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIGNvbnN0IHsgYWNjZXNzTGlzdCwgYXV0aG9yaXphdGlvbkxpc3QsIGJsb2JzLCBibG9iVmVyc2lvbmVkSGFzaGVzLCBibG9ja051bWJlciwgYmxvY2tUYWcsIGRhdGEsIGdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckJsb2JHYXMsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIG5vbmNlLCB2YWx1ZSwgc3RhdGVPdmVycmlkZSwgLi4ucmVzdCB9ID0gYXdhaXQgcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdChjbGllbnQsIHsKICAgICAgICAuLi5hcmdzLAogICAgICAgIHBhcmFtZXRlcnM6ICgKICAgICAgICAgIC8vIFNvbWUgUlBDIFByb3ZpZGVycyBkbyBub3QgY29tcHV0ZSB2ZXJzaW9uZWQgaGFzaGVzIGZyb20gYmxvYnMuIFdlIHdpbGwgbmVlZAogICAgICAgICAgLy8gdG8gY29tcHV0ZSB0aGVtLgogICAgICAgICAgYWNjb3VudD8udHlwZSA9PT0gImxvY2FsIiA/IHZvaWQgMCA6IFsiYmxvYlZlcnNpb25lZEhhc2hlcyJdCiAgICAgICAgKQogICAgICB9KTsKICAgICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgICAgY29uc3QgYmxvY2sgPSBibG9ja051bWJlckhleCB8fCBibG9ja1RhZzsKICAgICAgY29uc3QgcnBjU3RhdGVPdmVycmlkZSA9IHNlcmlhbGl6ZVN0YXRlT3ZlcnJpZGUoc3RhdGVPdmVycmlkZSk7CiAgICAgIGNvbnN0IHRvID0gYXdhaXQgKGFzeW5jICgpID0+IHsKICAgICAgICBpZiAocmVzdC50bykKICAgICAgICAgIHJldHVybiByZXN0LnRvOwogICAgICAgIGlmIChhdXRob3JpemF0aW9uTGlzdCAmJiBhdXRob3JpemF0aW9uTGlzdC5sZW5ndGggPiAwKQogICAgICAgICAgcmV0dXJuIGF3YWl0IHJlY292ZXJBdXRob3JpemF0aW9uQWRkcmVzcyh7CiAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGF1dGhvcml6YXRpb25MaXN0WzBdCiAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgdG9gIGlzIHJlcXVpcmVkLiBDb3VsZCBub3QgaW5mZXIgZnJvbSBgYXV0aG9yaXphdGlvbkxpc3RgIik7CiAgICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9KSgpOwogICAgICBhc3NlcnRSZXF1ZXN0KGFyZ3MpOwogICAgICBjb25zdCBjaGFpbkZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb25SZXF1ZXN0Py5mb3JtYXQ7CiAgICAgIGNvbnN0IGZvcm1hdCA9IGNoYWluRm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgICAgY29uc3QgcmVxdWVzdCA9IGZvcm1hdCh7CiAgICAgICAgLy8gUGljayBvdXQgZXh0cmEgZGF0YSB0aGF0IG1pZ2h0IGV4aXN0IG9uIHRoZSBjaGFpbidzIHRyYW5zYWN0aW9uIHJlcXVlc3QgdHlwZS4KICAgICAgICAuLi5leHRyYWN0KHJlc3QsIHsgZm9ybWF0OiBjaGFpbkZvcm1hdCB9KSwKICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgIGFjY2Vzc0xpc3QsCiAgICAgICAgYXV0aG9yaXphdGlvbkxpc3QsCiAgICAgICAgYmxvYnMsCiAgICAgICAgYmxvYlZlcnNpb25lZEhhc2hlcywKICAgICAgICBkYXRhLAogICAgICAgIGdhcywKICAgICAgICBnYXNQcmljZSwKICAgICAgICBtYXhGZWVQZXJCbG9iR2FzLAogICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhcywKICAgICAgICBub25jZSwKICAgICAgICB0bywKICAgICAgICB2YWx1ZQogICAgICB9KTsKICAgICAgbGV0IGVzdGltYXRlID0gQmlnSW50KGF3YWl0IGVzdGltYXRlR2FzX3JwYyh7IGJsb2NrLCByZXF1ZXN0LCBycGNTdGF0ZU92ZXJyaWRlIH0pKTsKICAgICAgaWYgKGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICAgICAgY29uc3QgdmFsdWUyID0gYXdhaXQgZ2V0QmFsYW5jZShjbGllbnQsIHsgYWRkcmVzczogcmVxdWVzdC5mcm9tIH0pOwogICAgICAgIGNvbnN0IGVzdGltYXRlcyA9IGF3YWl0IFByb21pc2UuYWxsKGF1dGhvcml6YXRpb25MaXN0Lm1hcChhc3luYyAoYXV0aG9yaXphdGlvbikgPT4gewogICAgICAgICAgY29uc3QgeyBjb250cmFjdEFkZHJlc3MgfSA9IGF1dGhvcml6YXRpb247CiAgICAgICAgICBjb25zdCBlc3RpbWF0ZTIgPSBhd2FpdCBlc3RpbWF0ZUdhc19ycGMoewogICAgICAgICAgICBibG9jaywKICAgICAgICAgICAgcmVxdWVzdDogewogICAgICAgICAgICAgIGF1dGhvcml6YXRpb25MaXN0OiB2b2lkIDAsCiAgICAgICAgICAgICAgZGF0YSwKICAgICAgICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgICAgICAgIHRvOiBjb250cmFjdEFkZHJlc3MsCiAgICAgICAgICAgICAgdmFsdWU6IG51bWJlclRvSGV4KHZhbHVlMikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcnBjU3RhdGVPdmVycmlkZQogICAgICAgICAgfSkuY2F0Y2goKCkgPT4gMTAwMDAwbik7CiAgICAgICAgICByZXR1cm4gMm4gKiBCaWdJbnQoZXN0aW1hdGUyKTsKICAgICAgICB9KSk7CiAgICAgICAgZXN0aW1hdGUgKz0gZXN0aW1hdGVzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLCAwbik7CiAgICAgIH0KICAgICAgcmV0dXJuIGVzdGltYXRlOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIHRocm93IGdldEVzdGltYXRlR2FzRXJyb3IoZXJyLCB7CiAgICAgICAgLi4uYXJncywKICAgICAgICBhY2NvdW50LAogICAgICAgIGNoYWluOiBjbGllbnQuY2hhaW4KICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2VzdGltYXRlQ29udHJhY3RHYXMuanMKICBhc3luYyBmdW5jdGlvbiBlc3RpbWF0ZUNvbnRyYWN0R2FzKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGZ1bmN0aW9uTmFtZSwgLi4ucmVxdWVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVGdW5jdGlvbkRhdGEoewogICAgICBhYmk6IGFiaTIsCiAgICAgIGFyZ3MsCiAgICAgIGZ1bmN0aW9uTmFtZQogICAgfSk7CiAgICB0cnkgewogICAgICBjb25zdCBnYXMgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBlc3RpbWF0ZUdhcywgImVzdGltYXRlR2FzIikoewogICAgICAgIGRhdGEsCiAgICAgICAgdG86IGFkZHJlc3MsCiAgICAgICAgLi4ucmVxdWVzdAogICAgICB9KTsKICAgICAgcmV0dXJuIGdhczsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnN0IGFjY291bnQgPSByZXF1ZXN0LmFjY291bnQgPyBwYXJzZUFjY291bnQocmVxdWVzdC5hY2NvdW50KSA6IHZvaWQgMDsKICAgICAgdGhyb3cgZ2V0Q29udHJhY3RFcnJvcihlcnJvciwgewogICAgICAgIGFiaTogYWJpMiwKICAgICAgICBhZGRyZXNzLAogICAgICAgIGFyZ3MsCiAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9jb250cmFjdC9lc3RpbWF0ZUNvbnRyYWN0R2FzIiwKICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgc2VuZGVyOiBhY2NvdW50Py5hZGRyZXNzCiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRDb250cmFjdEV2ZW50cy5qcwogIGluaXRfZ2V0QWJpSXRlbSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9wYXJzZUV2ZW50TG9ncy5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9pc0FkZHJlc3NFcXVhbCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfa2VjY2FrMjU2KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZUV2ZW50TG9nLmpzCiAgaW5pdF9hYmkoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvRXZlbnRTZWxlY3RvcigpOwogIGluaXRfY3Vyc29yKCk7CiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9mb3JtYXRBYmlJdGVtMigpOwogIHZhciBkb2NzUGF0aDMgPSAiL2RvY3MvY29udHJhY3QvZGVjb2RlRXZlbnRMb2ciOwogIGZ1bmN0aW9uIGRlY29kZUV2ZW50TG9nKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBkYXRhLCBzdHJpY3Q6IHN0cmljdF8sIHRvcGljcyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHN0cmljdCA9IHN0cmljdF8gPz8gdHJ1ZTsKICAgIGNvbnN0IFtzaWduYXR1cmUsIC4uLmFyZ1RvcGljc10gPSB0b3BpY3M7CiAgICBpZiAoIXNpZ25hdHVyZSkKICAgICAgdGhyb3cgbmV3IEFiaUV2ZW50U2lnbmF0dXJlRW1wdHlUb3BpY3NFcnJvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDMgfSk7CiAgICBjb25zdCBhYmlJdGVtID0gYWJpMi5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICJldmVudCIgJiYgc2lnbmF0dXJlID09PSB0b0V2ZW50U2VsZWN0b3IoZm9ybWF0QWJpSXRlbTIoeCkpKTsKICAgIGlmICghKGFiaUl0ZW0gJiYgIm5hbWUiIGluIGFiaUl0ZW0pIHx8IGFiaUl0ZW0udHlwZSAhPT0gImV2ZW50IikKICAgICAgdGhyb3cgbmV3IEFiaUV2ZW50U2lnbmF0dXJlTm90Rm91bmRFcnJvcihzaWduYXR1cmUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoMyB9KTsKICAgIGNvbnN0IHsgbmFtZSwgaW5wdXRzIH0gPSBhYmlJdGVtOwogICAgY29uc3QgaXNVbm5hbWVkID0gaW5wdXRzPy5zb21lKCh4KSA9PiAhKCJuYW1lIiBpbiB4ICYmIHgubmFtZSkpOwogICAgbGV0IGFyZ3MgPSBpc1VubmFtZWQgPyBbXSA6IHt9OwogICAgY29uc3QgaW5kZXhlZElucHV0cyA9IGlucHV0cy5maWx0ZXIoKHgpID0+ICJpbmRleGVkIiBpbiB4ICYmIHguaW5kZXhlZCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4ZWRJbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgcGFyYW0gPSBpbmRleGVkSW5wdXRzW2ldOwogICAgICBjb25zdCB0b3BpYyA9IGFyZ1RvcGljc1tpXTsKICAgICAgaWYgKCF0b3BpYykKICAgICAgICB0aHJvdyBuZXcgRGVjb2RlTG9nVG9waWNzTWlzbWF0Y2goewogICAgICAgICAgYWJpSXRlbSwKICAgICAgICAgIHBhcmFtCiAgICAgICAgfSk7CiAgICAgIGFyZ3NbaXNVbm5hbWVkID8gaSA6IHBhcmFtLm5hbWUgfHwgaV0gPSBkZWNvZGVUb3BpYyh7IHBhcmFtLCB2YWx1ZTogdG9waWMgfSk7CiAgICB9CiAgICBjb25zdCBub25JbmRleGVkSW5wdXRzID0gaW5wdXRzLmZpbHRlcigoeCkgPT4gISgiaW5kZXhlZCIgaW4geCAmJiB4LmluZGV4ZWQpKTsKICAgIGlmIChub25JbmRleGVkSW5wdXRzLmxlbmd0aCA+IDApIHsKICAgICAgaWYgKGRhdGEgJiYgZGF0YSAhPT0gIjB4IikgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IGRlY29kZUFiaVBhcmFtZXRlcnMobm9uSW5kZXhlZElucHV0cywgZGF0YSk7CiAgICAgICAgICBpZiAoZGVjb2RlZERhdGEpIHsKICAgICAgICAgICAgaWYgKGlzVW5uYW1lZCkKICAgICAgICAgICAgICBhcmdzID0gWy4uLmFyZ3MsIC4uLmRlY29kZWREYXRhXTsKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub25JbmRleGVkSW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBhcmdzW25vbkluZGV4ZWRJbnB1dHNbaV0ubmFtZV0gPSBkZWNvZGVkRGF0YVtpXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGlmIChzdHJpY3QpIHsKICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yIHx8IGVyciBpbnN0YW5jZW9mIFBvc2l0aW9uT3V0T2ZCb3VuZHNFcnJvcikKICAgICAgICAgICAgICB0aHJvdyBuZXcgRGVjb2RlTG9nRGF0YU1pc21hdGNoKHsKICAgICAgICAgICAgICAgIGFiaUl0ZW0sCiAgICAgICAgICAgICAgICBkYXRhLAogICAgICAgICAgICAgICAgcGFyYW1zOiBub25JbmRleGVkSW5wdXRzLAogICAgICAgICAgICAgICAgc2l6ZTogc2l6ZShkYXRhKQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHN0cmljdCkgewogICAgICAgIHRocm93IG5ldyBEZWNvZGVMb2dEYXRhTWlzbWF0Y2goewogICAgICAgICAgYWJpSXRlbSwKICAgICAgICAgIGRhdGE6ICIweCIsCiAgICAgICAgICBwYXJhbXM6IG5vbkluZGV4ZWRJbnB1dHMsCiAgICAgICAgICBzaXplOiAwCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB7CiAgICAgIGV2ZW50TmFtZTogbmFtZSwKICAgICAgYXJnczogT2JqZWN0LnZhbHVlcyhhcmdzKS5sZW5ndGggPiAwID8gYXJncyA6IHZvaWQgMAogICAgfTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlVG9waWMoeyBwYXJhbSwgdmFsdWUgfSkgewogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJzdHJpbmciIHx8IHBhcmFtLnR5cGUgPT09ICJieXRlcyIgfHwgcGFyYW0udHlwZSA9PT0gInR1cGxlIiB8fCBwYXJhbS50eXBlLm1hdGNoKC9eKC4qKVxbKFxkKyk/XF0kLykpCiAgICAgIHJldHVybiB2YWx1ZTsKICAgIGNvbnN0IGRlY29kZWRBcmcgPSBkZWNvZGVBYmlQYXJhbWV0ZXJzKFtwYXJhbV0sIHZhbHVlKSB8fCBbXTsKICAgIHJldHVybiBkZWNvZGVkQXJnWzBdOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvcGFyc2VFdmVudExvZ3MuanMKICBpbml0X2dldEFiaUl0ZW0oKTsKICBmdW5jdGlvbiBwYXJzZUV2ZW50TG9ncyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYXJncywgbG9ncywgc3RyaWN0ID0gdHJ1ZSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGV2ZW50TmFtZSA9ICgoKSA9PiB7CiAgICAgIGlmICghcGFyYW1ldGVycy5ldmVudE5hbWUpCiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1ldGVycy5ldmVudE5hbWUpKQogICAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmV2ZW50TmFtZTsKICAgICAgcmV0dXJuIFtwYXJhbWV0ZXJzLmV2ZW50TmFtZV07CiAgICB9KSgpOwogICAgcmV0dXJuIGxvZ3MubWFwKChsb2cpID0+IHsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBhYmlJdGVtID0gZ2V0QWJpSXRlbSh7CiAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICBuYW1lOiBsb2cudG9waWNzWzBdCiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFhYmlJdGVtKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgY29uc3QgZXZlbnQgPSBkZWNvZGVFdmVudExvZyh7CiAgICAgICAgICAuLi5sb2csCiAgICAgICAgICBhYmk6IFthYmlJdGVtXSwKICAgICAgICAgIHN0cmljdAogICAgICAgIH0pOwogICAgICAgIGlmIChldmVudE5hbWUgJiYgIWV2ZW50TmFtZS5pbmNsdWRlcyhldmVudC5ldmVudE5hbWUpKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKCFpbmNsdWRlc0FyZ3MoewogICAgICAgICAgYXJnczogZXZlbnQuYXJncywKICAgICAgICAgIGlucHV0czogYWJpSXRlbS5pbnB1dHMsCiAgICAgICAgICBtYXRjaEFyZ3M6IGFyZ3MKICAgICAgICB9KSkKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIHJldHVybiB7IC4uLmV2ZW50LCAuLi5sb2cgfTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgbGV0IGV2ZW50TmFtZTI7CiAgICAgICAgbGV0IGlzVW5uYW1lZDsKICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgQWJpRXZlbnRTaWduYXR1cmVOb3RGb3VuZEVycm9yKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIERlY29kZUxvZ0RhdGFNaXNtYXRjaCB8fCBlcnIgaW5zdGFuY2VvZiBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCkgewogICAgICAgICAgaWYgKHN0cmljdCkKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICBldmVudE5hbWUyID0gZXJyLmFiaUl0ZW0ubmFtZTsKICAgICAgICAgIGlzVW5uYW1lZCA9IGVyci5hYmlJdGVtLmlucHV0cz8uc29tZSgoeCkgPT4gISgibmFtZSIgaW4geCAmJiB4Lm5hbWUpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgLi4ubG9nLCBhcmdzOiBpc1VubmFtZWQgPyBbXSA6IHt9LCBldmVudE5hbWU6IGV2ZW50TmFtZTIgfTsKICAgICAgfQogICAgfSkuZmlsdGVyKEJvb2xlYW4pOwogIH0KICBmdW5jdGlvbiBpbmNsdWRlc0FyZ3MocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhcmdzLCBpbnB1dHMsIG1hdGNoQXJncyB9ID0gcGFyYW1ldGVyczsKICAgIGlmICghbWF0Y2hBcmdzKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICghYXJncykKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZnVuY3Rpb24gaXNFcXVhbChpbnB1dCwgdmFsdWUsIGFyZykgewogICAgICB0cnkgewogICAgICAgIGlmIChpbnB1dC50eXBlID09PSAiYWRkcmVzcyIpCiAgICAgICAgICByZXR1cm4gaXNBZGRyZXNzRXF1YWwodmFsdWUsIGFyZyk7CiAgICAgICAgaWYgKGlucHV0LnR5cGUgPT09ICJzdHJpbmciIHx8IGlucHV0LnR5cGUgPT09ICJieXRlcyIpCiAgICAgICAgICByZXR1cm4ga2VjY2FrMjU2KHRvQnl0ZXModmFsdWUpKSA9PT0gYXJnOwogICAgICAgIHJldHVybiB2YWx1ZSA9PT0gYXJnOwogICAgICB9IGNhdGNoIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3MpICYmIEFycmF5LmlzQXJyYXkobWF0Y2hBcmdzKSkgewogICAgICByZXR1cm4gbWF0Y2hBcmdzLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgyKSA9PiB7CiAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRzW2luZGV4Ml07CiAgICAgICAgaWYgKCFpbnB1dCkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBjb25zdCB2YWx1ZV8gPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTsKICAgICAgICByZXR1cm4gdmFsdWVfLnNvbWUoKHZhbHVlMikgPT4gaXNFcXVhbChpbnB1dCwgdmFsdWUyLCBhcmdzW2luZGV4Ml0pKTsKICAgICAgfSk7CiAgICB9CiAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICJvYmplY3QiICYmICFBcnJheS5pc0FycmF5KGFyZ3MpICYmIHR5cGVvZiBtYXRjaEFyZ3MgPT09ICJvYmplY3QiICYmICFBcnJheS5pc0FycmF5KG1hdGNoQXJncykpCiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhtYXRjaEFyZ3MpLmV2ZXJ5KChba2V5LCB2YWx1ZV0pID0+IHsKICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dHMuZmluZCgoaW5wdXQyKSA9PiBpbnB1dDIubmFtZSA9PT0ga2V5KTsKICAgICAgICBpZiAoIWlucHV0KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGNvbnN0IHZhbHVlXyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdOwogICAgICAgIHJldHVybiB2YWx1ZV8uc29tZSgodmFsdWUyKSA9PiBpc0VxdWFsKGlucHV0LCB2YWx1ZTIsIGFyZ3Nba2V5XSkpOwogICAgICB9KTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0TG9ncy5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2xvZy5qcwogIGZ1bmN0aW9uIGZvcm1hdExvZyhsb2csIHsgYXJncywgZXZlbnROYW1lIH0gPSB7fSkgewogICAgcmV0dXJuIHsKICAgICAgLi4ubG9nLAogICAgICBibG9ja0hhc2g6IGxvZy5ibG9ja0hhc2ggPyBsb2cuYmxvY2tIYXNoIDogbnVsbCwKICAgICAgYmxvY2tOdW1iZXI6IGxvZy5ibG9ja051bWJlciA/IEJpZ0ludChsb2cuYmxvY2tOdW1iZXIpIDogbnVsbCwKICAgICAgbG9nSW5kZXg6IGxvZy5sb2dJbmRleCA/IE51bWJlcihsb2cubG9nSW5kZXgpIDogbnVsbCwKICAgICAgdHJhbnNhY3Rpb25IYXNoOiBsb2cudHJhbnNhY3Rpb25IYXNoID8gbG9nLnRyYW5zYWN0aW9uSGFzaCA6IG51bGwsCiAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IGxvZy50cmFuc2FjdGlvbkluZGV4ID8gTnVtYmVyKGxvZy50cmFuc2FjdGlvbkluZGV4KSA6IG51bGwsCiAgICAgIC4uLmV2ZW50TmFtZSA/IHsgYXJncywgZXZlbnROYW1lIH0gOiB7fQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0TG9ncy5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldExvZ3MoY2xpZW50LCB7IGFkZHJlc3MsIGJsb2NrSGFzaCwgZnJvbUJsb2NrLCB0b0Jsb2NrLCBldmVudCwgZXZlbnRzOiBldmVudHNfLCBhcmdzLCBzdHJpY3Q6IHN0cmljdF8gfSA9IHt9KSB7CiAgICBjb25zdCBzdHJpY3QgPSBzdHJpY3RfID8/IGZhbHNlOwogICAgY29uc3QgZXZlbnRzID0gZXZlbnRzXyA/PyAoZXZlbnQgPyBbZXZlbnRdIDogdm9pZCAwKTsKICAgIGxldCB0b3BpY3MgPSBbXTsKICAgIGlmIChldmVudHMpIHsKICAgICAgY29uc3QgZW5jb2RlZCA9IGV2ZW50cy5mbGF0TWFwKChldmVudDIpID0+IGVuY29kZUV2ZW50VG9waWNzKHsKICAgICAgICBhYmk6IFtldmVudDJdLAogICAgICAgIGV2ZW50TmFtZTogZXZlbnQyLm5hbWUsCiAgICAgICAgYXJnczogZXZlbnRzXyA/IHZvaWQgMCA6IGFyZ3MKICAgICAgfSkpOwogICAgICB0b3BpY3MgPSBbZW5jb2RlZF07CiAgICAgIGlmIChldmVudCkKICAgICAgICB0b3BpY3MgPSB0b3BpY3NbMF07CiAgICB9CiAgICBsZXQgbG9nczsKICAgIGlmIChibG9ja0hhc2gpIHsKICAgICAgbG9ncyA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0TG9ncyIsCiAgICAgICAgcGFyYW1zOiBbeyBhZGRyZXNzLCB0b3BpY3MsIGJsb2NrSGFzaCB9XQogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGxvZ3MgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXRoX2dldExvZ3MiLAogICAgICAgIHBhcmFtczogWwogICAgICAgICAgewogICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICB0b3BpY3MsCiAgICAgICAgICAgIGZyb21CbG9jazogdHlwZW9mIGZyb21CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleChmcm9tQmxvY2spIDogZnJvbUJsb2NrLAogICAgICAgICAgICB0b0Jsb2NrOiB0eXBlb2YgdG9CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleCh0b0Jsb2NrKSA6IHRvQmxvY2sKICAgICAgICAgIH0KICAgICAgICBdCiAgICAgIH0pOwogICAgfQogICAgY29uc3QgZm9ybWF0dGVkTG9ncyA9IGxvZ3MubWFwKChsb2cpID0+IGZvcm1hdExvZyhsb2cpKTsKICAgIGlmICghZXZlbnRzKQogICAgICByZXR1cm4gZm9ybWF0dGVkTG9nczsKICAgIHJldHVybiBwYXJzZUV2ZW50TG9ncyh7CiAgICAgIGFiaTogZXZlbnRzLAogICAgICBhcmdzLAogICAgICBsb2dzOiBmb3JtYXR0ZWRMb2dzLAogICAgICBzdHJpY3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRDb250cmFjdEV2ZW50cy5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldENvbnRyYWN0RXZlbnRzKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGJsb2NrSGFzaCwgZXZlbnROYW1lLCBmcm9tQmxvY2ssIHRvQmxvY2ssIHN0cmljdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGV2ZW50ID0gZXZlbnROYW1lID8gZ2V0QWJpSXRlbSh7IGFiaTogYWJpMiwgbmFtZTogZXZlbnROYW1lIH0pIDogdm9pZCAwOwogICAgY29uc3QgZXZlbnRzID0gIWV2ZW50ID8gYWJpMi5maWx0ZXIoKHgpID0+IHgudHlwZSA9PT0gImV2ZW50IikgOiB2b2lkIDA7CiAgICByZXR1cm4gZ2V0QWN0aW9uKGNsaWVudCwgZ2V0TG9ncywgImdldExvZ3MiKSh7CiAgICAgIGFkZHJlc3MsCiAgICAgIGFyZ3MsCiAgICAgIGJsb2NrSGFzaCwKICAgICAgZXZlbnQsCiAgICAgIGV2ZW50cywKICAgICAgZnJvbUJsb2NrLAogICAgICB0b0Jsb2NrLAogICAgICBzdHJpY3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9yZWFkQ29udHJhY3QuanMKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2NhbGwoKTsKICBhc3luYyBmdW5jdGlvbiByZWFkQ29udHJhY3QoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYWRkcmVzcywgYXJncywgZnVuY3Rpb25OYW1lLCAuLi5yZXN0IH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgY2FsbGRhdGEgPSBlbmNvZGVGdW5jdGlvbkRhdGEoewogICAgICBhYmk6IGFiaTIsCiAgICAgIGFyZ3MsCiAgICAgIGZ1bmN0aW9uTmFtZQogICAgfSk7CiAgICB0cnkgewogICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGNhbGwsICJjYWxsIikoewogICAgICAgIC4uLnJlc3QsCiAgICAgICAgZGF0YTogY2FsbGRhdGEsCiAgICAgICAgdG86IGFkZHJlc3MKICAgICAgfSk7CiAgICAgIHJldHVybiBkZWNvZGVGdW5jdGlvblJlc3VsdCh7CiAgICAgICAgYWJpOiBhYmkyLAogICAgICAgIGFyZ3MsCiAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgIGRhdGE6IGRhdGEgfHwgIjB4IgogICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHRocm93IGdldENvbnRyYWN0RXJyb3IoZXJyb3IsIHsKICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3QvcmVhZENvbnRyYWN0IiwKICAgICAgICBmdW5jdGlvbk5hbWUKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3NpbXVsYXRlQ29udHJhY3QuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGluaXRfZGVjb2RlRnVuY3Rpb25SZXN1bHQoKTsKICBpbml0X2VuY29kZUZ1bmN0aW9uRGF0YSgpOwogIGluaXRfY2FsbCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNpbXVsYXRlQ29udHJhY3QoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYWRkcmVzcywgYXJncywgZGF0YVN1ZmZpeCwgZnVuY3Rpb25OYW1lLCAuLi5jYWxsUmVxdWVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGFjY291bnQgPSBjYWxsUmVxdWVzdC5hY2NvdW50ID8gcGFyc2VBY2NvdW50KGNhbGxSZXF1ZXN0LmFjY291bnQpIDogY2xpZW50LmFjY291bnQ7CiAgICBjb25zdCBjYWxsZGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7IGFiaTogYWJpMiwgYXJncywgZnVuY3Rpb25OYW1lIH0pOwogICAgdHJ5IHsKICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBjYWxsLCAiY2FsbCIpKHsKICAgICAgICBiYXRjaDogZmFsc2UsCiAgICAgICAgZGF0YTogYCR7Y2FsbGRhdGF9JHtkYXRhU3VmZml4ID8gZGF0YVN1ZmZpeC5yZXBsYWNlKCIweCIsICIiKSA6ICIifWAsCiAgICAgICAgdG86IGFkZHJlc3MsCiAgICAgICAgLi4uY2FsbFJlcXVlc3QsCiAgICAgICAgYWNjb3VudAogICAgICB9KTsKICAgICAgY29uc3QgcmVzdWx0ID0gZGVjb2RlRnVuY3Rpb25SZXN1bHQoewogICAgICAgIGFiaTogYWJpMiwKICAgICAgICBhcmdzLAogICAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgICBkYXRhOiBkYXRhIHx8ICIweCIKICAgICAgfSk7CiAgICAgIGNvbnN0IG1pbmltaXplZEFiaSA9IGFiaTIuZmlsdGVyKChhYmlJdGVtKSA9PiAibmFtZSIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLm5hbWUgPT09IHBhcmFtZXRlcnMuZnVuY3Rpb25OYW1lKTsKICAgICAgcmV0dXJuIHsKICAgICAgICByZXN1bHQsCiAgICAgICAgcmVxdWVzdDogewogICAgICAgICAgYWJpOiBtaW5pbWl6ZWRBYmksCiAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgYXJncywKICAgICAgICAgIGRhdGFTdWZmaXgsCiAgICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgICAuLi5jYWxsUmVxdWVzdCwKICAgICAgICAgIGFjY291bnQKICAgICAgICB9CiAgICAgIH07CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICB0aHJvdyBnZXRDb250cmFjdEVycm9yKGVycm9yLCB7CiAgICAgICAgYWJpOiBhYmkyLAogICAgICAgIGFkZHJlc3MsCiAgICAgICAgYXJncywKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L3NpbXVsYXRlQ29udHJhY3QiLAogICAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgICBzZW5kZXI6IGFjY291bnQ/LmFkZHJlc3MKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3dhdGNoQ29udHJhY3RFdmVudC5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9ycGMoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9vYnNlcnZlLmpzCiAgdmFyIGxpc3RlbmVyc0NhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICB2YXIgY2xlYW51cENhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICB2YXIgY2FsbGJhY2tDb3VudCA9IDA7CiAgZnVuY3Rpb24gb2JzZXJ2ZShvYnNlcnZlcklkLCBjYWxsYmFja3MsIGZuKSB7CiAgICBjb25zdCBjYWxsYmFja0lkID0gKytjYWxsYmFja0NvdW50OwogICAgY29uc3QgZ2V0TGlzdGVuZXJzID0gKCkgPT4gbGlzdGVuZXJzQ2FjaGUuZ2V0KG9ic2VydmVySWQpIHx8IFtdOwogICAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGxpc3RlbmVyczIgPSBnZXRMaXN0ZW5lcnMoKTsKICAgICAgbGlzdGVuZXJzQ2FjaGUuc2V0KG9ic2VydmVySWQsIGxpc3RlbmVyczIuZmlsdGVyKChjYikgPT4gY2IuaWQgIT09IGNhbGxiYWNrSWQpKTsKICAgIH07CiAgICBjb25zdCB1bndhdGNoID0gKCkgPT4gewogICAgICBjb25zdCBjbGVhbnVwMiA9IGNsZWFudXBDYWNoZS5nZXQob2JzZXJ2ZXJJZCk7CiAgICAgIGlmIChnZXRMaXN0ZW5lcnMoKS5sZW5ndGggPT09IDEgJiYgY2xlYW51cDIpCiAgICAgICAgY2xlYW51cDIoKTsKICAgICAgdW5zdWJzY3JpYmUoKTsKICAgIH07CiAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnMoKTsKICAgIGxpc3RlbmVyc0NhY2hlLnNldChvYnNlcnZlcklkLCBbCiAgICAgIC4uLmxpc3RlbmVycywKICAgICAgeyBpZDogY2FsbGJhY2tJZCwgZm5zOiBjYWxsYmFja3MgfQogICAgXSk7CiAgICBpZiAobGlzdGVuZXJzICYmIGxpc3RlbmVycy5sZW5ndGggPiAwKQogICAgICByZXR1cm4gdW53YXRjaDsKICAgIGNvbnN0IGVtaXQgPSB7fTsKICAgIGZvciAoY29uc3Qga2V5IGluIGNhbGxiYWNrcykgewogICAgICBlbWl0W2tleV0gPSAoLi4uYXJncykgPT4gewogICAgICAgIGNvbnN0IGxpc3RlbmVyczIgPSBnZXRMaXN0ZW5lcnMoKTsKICAgICAgICBpZiAobGlzdGVuZXJzMi5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMyKQogICAgICAgICAgbGlzdGVuZXIuZm5zW2tleV0/LiguLi5hcmdzKTsKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IGNsZWFudXAgPSBmbihlbWl0KTsKICAgIGlmICh0eXBlb2YgY2xlYW51cCA9PT0gImZ1bmN0aW9uIikKICAgICAgY2xlYW51cENhY2hlLnNldChvYnNlcnZlcklkLCBjbGVhbnVwKTsKICAgIHJldHVybiB1bndhdGNoOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy93YWl0LmpzCiAgYXN5bmMgZnVuY3Rpb24gd2FpdCh0aW1lKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcykgPT4gc2V0VGltZW91dChyZXMsIHRpbWUpKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcG9sbC5qcwogIGZ1bmN0aW9uIHBvbGwoZm4sIHsgZW1pdE9uQmVnaW4sIGluaXRpYWxXYWl0VGltZSwgaW50ZXJ2YWwgfSkgewogICAgbGV0IGFjdGl2ZSA9IHRydWU7CiAgICBjb25zdCB1bndhdGNoID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICBjb25zdCB3YXRjaCA9IGFzeW5jICgpID0+IHsKICAgICAgbGV0IGRhdGEgPSB2b2lkIDA7CiAgICAgIGlmIChlbWl0T25CZWdpbikKICAgICAgICBkYXRhID0gYXdhaXQgZm4oeyB1bnBvbGw6IHVud2F0Y2ggfSk7CiAgICAgIGNvbnN0IGluaXRpYWxXYWl0ID0gYXdhaXQgaW5pdGlhbFdhaXRUaW1lPy4oZGF0YSkgPz8gaW50ZXJ2YWw7CiAgICAgIGF3YWl0IHdhaXQoaW5pdGlhbFdhaXQpOwogICAgICBjb25zdCBwb2xsMiA9IGFzeW5jICgpID0+IHsKICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBhd2FpdCBmbih7IHVucG9sbDogdW53YXRjaCB9KTsKICAgICAgICBhd2FpdCB3YWl0KGludGVydmFsKTsKICAgICAgICBwb2xsMigpOwogICAgICB9OwogICAgICBwb2xsMigpOwogICAgfTsKICAgIHdhdGNoKCk7CiAgICByZXR1cm4gdW53YXRjaDsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvd2F0Y2hDb250cmFjdEV2ZW50LmpzCiAgaW5pdF9zdHJpbmdpZnkoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9wcm9taXNlL3dpdGhDYWNoZS5qcwogIHZhciBwcm9taXNlQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIHZhciByZXNwb25zZUNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBmdW5jdGlvbiBnZXRDYWNoZShjYWNoZUtleTIpIHsKICAgIGNvbnN0IGJ1aWxkQ2FjaGUgPSAoY2FjaGVLZXkzLCBjYWNoZSkgPT4gKHsKICAgICAgY2xlYXI6ICgpID0+IGNhY2hlLmRlbGV0ZShjYWNoZUtleTMpLAogICAgICBnZXQ6ICgpID0+IGNhY2hlLmdldChjYWNoZUtleTMpLAogICAgICBzZXQ6IChkYXRhKSA9PiBjYWNoZS5zZXQoY2FjaGVLZXkzLCBkYXRhKQogICAgfSk7CiAgICBjb25zdCBwcm9taXNlID0gYnVpbGRDYWNoZShjYWNoZUtleTIsIHByb21pc2VDYWNoZSk7CiAgICBjb25zdCByZXNwb25zZSA9IGJ1aWxkQ2FjaGUoY2FjaGVLZXkyLCByZXNwb25zZUNhY2hlKTsKICAgIHJldHVybiB7CiAgICAgIGNsZWFyOiAoKSA9PiB7CiAgICAgICAgcHJvbWlzZS5jbGVhcigpOwogICAgICAgIHJlc3BvbnNlLmNsZWFyKCk7CiAgICAgIH0sCiAgICAgIHByb21pc2UsCiAgICAgIHJlc3BvbnNlCiAgICB9OwogIH0KICBhc3luYyBmdW5jdGlvbiB3aXRoQ2FjaGUoZm4sIHsgY2FjaGVLZXk6IGNhY2hlS2V5MiwgY2FjaGVUaW1lID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIH0pIHsKICAgIGNvbnN0IGNhY2hlID0gZ2V0Q2FjaGUoY2FjaGVLZXkyKTsKICAgIGNvbnN0IHJlc3BvbnNlID0gY2FjaGUucmVzcG9uc2UuZ2V0KCk7CiAgICBpZiAocmVzcG9uc2UgJiYgY2FjaGVUaW1lID4gMCkgewogICAgICBjb25zdCBhZ2UgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIHJlc3BvbnNlLmNyZWF0ZWQuZ2V0VGltZSgpOwogICAgICBpZiAoYWdlIDwgY2FjaGVUaW1lKQogICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhOwogICAgfQogICAgbGV0IHByb21pc2UgPSBjYWNoZS5wcm9taXNlLmdldCgpOwogICAgaWYgKCFwcm9taXNlKSB7CiAgICAgIHByb21pc2UgPSBmbigpOwogICAgICBjYWNoZS5wcm9taXNlLnNldChwcm9taXNlKTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwcm9taXNlOwogICAgICBjYWNoZS5yZXNwb25zZS5zZXQoeyBjcmVhdGVkOiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgZGF0YSB9KTsKICAgICAgcmV0dXJuIGRhdGE7CiAgICB9IGZpbmFsbHkgewogICAgICBjYWNoZS5wcm9taXNlLmNsZWFyKCk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEJsb2NrTnVtYmVyLmpzCiAgdmFyIGNhY2hlS2V5ID0gKGlkKSA9PiBgYmxvY2tOdW1iZXIuJHtpZH1gOwogIGFzeW5jIGZ1bmN0aW9uIGdldEJsb2NrTnVtYmVyKGNsaWVudCwgeyBjYWNoZVRpbWUgPSBjbGllbnQuY2FjaGVUaW1lIH0gPSB7fSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBhd2FpdCB3aXRoQ2FjaGUoKCkgPT4gY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfYmxvY2tOdW1iZXIiCiAgICB9KSwgeyBjYWNoZUtleTogY2FjaGVLZXkoY2xpZW50LnVpZCksIGNhY2hlVGltZSB9KTsKICAgIHJldHVybiBCaWdJbnQoYmxvY2tOdW1iZXJIZXgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRGaWx0ZXJDaGFuZ2VzLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0RmlsdGVyQ2hhbmdlcyhfY2xpZW50LCB7IGZpbHRlciB9KSB7CiAgICBjb25zdCBzdHJpY3QgPSAic3RyaWN0IiBpbiBmaWx0ZXIgJiYgZmlsdGVyLnN0cmljdDsKICAgIGNvbnN0IGxvZ3MgPSBhd2FpdCBmaWx0ZXIucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRGaWx0ZXJDaGFuZ2VzIiwKICAgICAgcGFyYW1zOiBbZmlsdGVyLmlkXQogICAgfSk7CiAgICBpZiAodHlwZW9mIGxvZ3NbMF0gPT09ICJzdHJpbmciKQogICAgICByZXR1cm4gbG9nczsKICAgIGNvbnN0IGZvcm1hdHRlZExvZ3MgPSBsb2dzLm1hcCgobG9nKSA9PiBmb3JtYXRMb2cobG9nKSk7CiAgICBpZiAoISgiYWJpIiBpbiBmaWx0ZXIpIHx8ICFmaWx0ZXIuYWJpKQogICAgICByZXR1cm4gZm9ybWF0dGVkTG9nczsKICAgIHJldHVybiBwYXJzZUV2ZW50TG9ncyh7CiAgICAgIGFiaTogZmlsdGVyLmFiaSwKICAgICAgbG9nczogZm9ybWF0dGVkTG9ncywKICAgICAgc3RyaWN0CiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvdW5pbnN0YWxsRmlsdGVyLmpzCiAgYXN5bmMgZnVuY3Rpb24gdW5pbnN0YWxsRmlsdGVyKF9jbGllbnQsIHsgZmlsdGVyIH0pIHsKICAgIHJldHVybiBmaWx0ZXIucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF91bmluc3RhbGxGaWx0ZXIiLAogICAgICBwYXJhbXM6IFtmaWx0ZXIuaWRdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvd2F0Y2hDb250cmFjdEV2ZW50LmpzCiAgZnVuY3Rpb24gd2F0Y2hDb250cmFjdEV2ZW50KGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGJhdGNoID0gdHJ1ZSwgZXZlbnROYW1lLCBmcm9tQmxvY2ssIG9uRXJyb3IsIG9uTG9ncywgcG9sbDogcG9sbF8sIHBvbGxpbmdJbnRlcnZhbCA9IGNsaWVudC5wb2xsaW5nSW50ZXJ2YWwsIHN0cmljdDogc3RyaWN0XyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGVuYWJsZVBvbGxpbmcgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIHBvbGxfICE9PSAidW5kZWZpbmVkIikKICAgICAgICByZXR1cm4gcG9sbF87CiAgICAgIGlmICh0eXBlb2YgZnJvbUJsb2NrID09PSAiYmlnaW50IikKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAiZmFsbGJhY2siICYmIGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0c1swXS5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pKCk7CiAgICBjb25zdCBwb2xsQ29udHJhY3RFdmVudCA9ICgpID0+IHsKICAgICAgY29uc3Qgc3RyaWN0ID0gc3RyaWN0XyA/PyBmYWxzZTsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoQ29udHJhY3RFdmVudCIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGJhdGNoLAogICAgICAgIGNsaWVudC51aWQsCiAgICAgICAgZXZlbnROYW1lLAogICAgICAgIHBvbGxpbmdJbnRlcnZhbCwKICAgICAgICBzdHJpY3QsCiAgICAgICAgZnJvbUJsb2NrCiAgICAgIF0pOwogICAgICByZXR1cm4gb2JzZXJ2ZShvYnNlcnZlcklkLCB7IG9uTG9ncywgb25FcnJvciB9LCAoZW1pdCkgPT4gewogICAgICAgIGxldCBwcmV2aW91c0Jsb2NrTnVtYmVyOwogICAgICAgIGlmIChmcm9tQmxvY2sgIT09IHZvaWQgMCkKICAgICAgICAgIHByZXZpb3VzQmxvY2tOdW1iZXIgPSBmcm9tQmxvY2sgLSAxbjsKICAgICAgICBsZXQgZmlsdGVyOwogICAgICAgIGxldCBpbml0aWFsaXplZCA9IGZhbHNlOwogICAgICAgIGNvbnN0IHVud2F0Y2ggPSBwb2xsKGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBmaWx0ZXIgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyLCAiY3JlYXRlQ29udHJhY3RFdmVudEZpbHRlciIpKHsKICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgZXZlbnROYW1lLAogICAgICAgICAgICAgICAgc3RyaWN0LAogICAgICAgICAgICAgICAgZnJvbUJsb2NrCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICB9CiAgICAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbGV0IGxvZ3M7CiAgICAgICAgICAgIGlmIChmaWx0ZXIpIHsKICAgICAgICAgICAgICBsb2dzID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0RmlsdGVyQ2hhbmdlcywgImdldEZpbHRlckNoYW5nZXMiKSh7IGZpbHRlciB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjb25zdCBibG9ja051bWJlciA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrTnVtYmVyLCAiZ2V0QmxvY2tOdW1iZXIiKSh7fSk7CiAgICAgICAgICAgICAgaWYgKHByZXZpb3VzQmxvY2tOdW1iZXIgJiYgcHJldmlvdXNCbG9ja051bWJlciA8IGJsb2NrTnVtYmVyKSB7CiAgICAgICAgICAgICAgICBsb2dzID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0Q29udHJhY3RFdmVudHMsICJnZXRDb250cmFjdEV2ZW50cyIpKHsKICAgICAgICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgICBldmVudE5hbWUsCiAgICAgICAgICAgICAgICAgIGZyb21CbG9jazogcHJldmlvdXNCbG9ja051bWJlciArIDFuLAogICAgICAgICAgICAgICAgICB0b0Jsb2NrOiBibG9ja051bWJlciwKICAgICAgICAgICAgICAgICAgc3RyaWN0CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbG9ncyA9IFtdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBwcmV2aW91c0Jsb2NrTnVtYmVyID0gYmxvY2tOdW1iZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGxvZ3MubGVuZ3RoID09PSAwKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGJhdGNoKQogICAgICAgICAgICAgIGVtaXQub25Mb2dzKGxvZ3MpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgZm9yIChjb25zdCBsb2cgb2YgbG9ncykKICAgICAgICAgICAgICAgIGVtaXQub25Mb2dzKFtsb2ddKTsKICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICBpZiAoZmlsdGVyICYmIGVyciBpbnN0YW5jZW9mIEludmFsaWRJbnB1dFJwY0Vycm9yKQogICAgICAgICAgICAgIGluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgICAgICAgIGVtaXQub25FcnJvcj8uKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgZW1pdE9uQmVnaW46IHRydWUsCiAgICAgICAgICBpbnRlcnZhbDogcG9sbGluZ0ludGVydmFsCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChmaWx0ZXIpCiAgICAgICAgICAgIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHVuaW5zdGFsbEZpbHRlciwgInVuaW5zdGFsbEZpbHRlciIpKHsgZmlsdGVyIH0pOwogICAgICAgICAgdW53YXRjaCgpOwogICAgICAgIH07CiAgICAgIH0pOwogICAgfTsKICAgIGNvbnN0IHN1YnNjcmliZUNvbnRyYWN0RXZlbnQgPSAoKSA9PiB7CiAgICAgIGNvbnN0IHN0cmljdCA9IHN0cmljdF8gPz8gZmFsc2U7CiAgICAgIGNvbnN0IG9ic2VydmVySWQgPSBzdHJpbmdpZnkoWwogICAgICAgICJ3YXRjaENvbnRyYWN0RXZlbnQiLAogICAgICAgIGFkZHJlc3MsCiAgICAgICAgYXJncywKICAgICAgICBiYXRjaCwKICAgICAgICBjbGllbnQudWlkLAogICAgICAgIGV2ZW50TmFtZSwKICAgICAgICBwb2xsaW5nSW50ZXJ2YWwsCiAgICAgICAgc3RyaWN0CiAgICAgIF0pOwogICAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgICAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICAgIHJldHVybiBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25Mb2dzLCBvbkVycm9yIH0sIChlbWl0KSA9PiB7CiAgICAgICAgOwogICAgICAgIChhc3luYyAoKSA9PiB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCB0cmFuc3BvcnQgPSAoKCkgPT4gewogICAgICAgICAgICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIpIHsKICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydDIgPSBjbGllbnQudHJhbnNwb3J0LnRyYW5zcG9ydHMuZmluZCgodHJhbnNwb3J0MykgPT4gdHJhbnNwb3J0My5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpOwogICAgICAgICAgICAgICAgaWYgKCF0cmFuc3BvcnQyKQogICAgICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc3BvcnQyLnZhbHVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAgY29uc3QgdG9waWNzID0gZXZlbnROYW1lID8gZW5jb2RlRXZlbnRUb3BpY3MoewogICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICBldmVudE5hbWUsCiAgICAgICAgICAgICAgYXJncwogICAgICAgICAgICB9KSA6IFtdOwogICAgICAgICAgICBjb25zdCB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZV8gfSA9IGF3YWl0IHRyYW5zcG9ydC5zdWJzY3JpYmUoewogICAgICAgICAgICAgIHBhcmFtczogWyJsb2dzIiwgeyBhZGRyZXNzLCB0b3BpY3MgfV0sCiAgICAgICAgICAgICAgb25EYXRhKGRhdGEpIHsKICAgICAgICAgICAgICAgIGlmICghYWN0aXZlKQogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBjb25zdCBsb2cgPSBkYXRhLnJlc3VsdDsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZXZlbnROYW1lOiBldmVudE5hbWUyLCBhcmdzOiBhcmdzMiB9ID0gZGVjb2RlRXZlbnRMb2coewogICAgICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgICAgICBkYXRhOiBsb2cuZGF0YSwKICAgICAgICAgICAgICAgICAgICB0b3BpY3M6IGxvZy50b3BpY3MsCiAgICAgICAgICAgICAgICAgICAgc3RyaWN0OiBzdHJpY3RfCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2cobG9nLCB7CiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJnczIsCiAgICAgICAgICAgICAgICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUyCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBlbWl0Lm9uTG9ncyhbZm9ybWF0dGVkXSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICAgICAgbGV0IGV2ZW50TmFtZTI7CiAgICAgICAgICAgICAgICAgIGxldCBpc1VubmFtZWQ7CiAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBEZWNvZGVMb2dEYXRhTWlzbWF0Y2ggfHwgZXJyIGluc3RhbmNlb2YgRGVjb2RlTG9nVG9waWNzTWlzbWF0Y2gpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaWN0XykKICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBldmVudE5hbWUyID0gZXJyLmFiaUl0ZW0ubmFtZTsKICAgICAgICAgICAgICAgICAgICBpc1VubmFtZWQgPSBlcnIuYWJpSXRlbS5pbnB1dHM/LnNvbWUoKHgpID0+ICEoIm5hbWUiIGluIHggJiYgeC5uYW1lKSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TG9nKGxvZywgewogICAgICAgICAgICAgICAgICAgIGFyZ3M6IGlzVW5uYW1lZCA/IFtdIDoge30sCiAgICAgICAgICAgICAgICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUyCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBlbWl0Lm9uTG9ncyhbZm9ybWF0dGVkXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBvbkVycm9yKGVycm9yKSB7CiAgICAgICAgICAgICAgICBlbWl0Lm9uRXJyb3I/LihlcnJvcik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZV87CiAgICAgICAgICAgIGlmICghYWN0aXZlKQogICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgb25FcnJvcj8uKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gKCkgPT4gdW5zdWJzY3JpYmUoKTsKICAgICAgfSk7CiAgICB9OwogICAgcmV0dXJuIGVuYWJsZVBvbGxpbmcgPyBwb2xsQ29udHJhY3RFdmVudCgpIDogc3Vic2NyaWJlQ29udHJhY3RFdmVudCgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC93cml0ZUNvbnRyYWN0LmpzCiAgaW5pdF9wYXJzZUFjY291bnQoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvYWNjb3VudC5qcwogIGluaXRfYmFzZSgpOwogIHZhciBBY2NvdW50Tm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDkgfSA9IHt9KSB7CiAgICAgIHN1cGVyKFsKICAgICAgICAiQ291bGQgbm90IGZpbmQgYW4gQWNjb3VudCB0byBleGVjdXRlIHdpdGggdGhpcyBBY3Rpb24uIiwKICAgICAgICAiUGxlYXNlIHByb3ZpZGUgYW4gQWNjb3VudCB3aXRoIHRoZSBgYWNjb3VudGAgYXJndW1lbnQgb24gdGhlIEFjdGlvbiwgb3IgYnkgc3VwcGx5aW5nIGFuIGBhY2NvdW50YCB0byB0aGUgQ2xpZW50LiIKICAgICAgXS5qb2luKCJcbiIpLCB7CiAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICBkb2NzU2x1ZzogImFjY291bnQiLAogICAgICAgIG5hbWU6ICJBY2NvdW50Tm90Rm91bmRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKICB2YXIgQWNjb3VudFR5cGVOb3RTdXBwb3J0ZWRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDksIG1ldGFNZXNzYWdlcywgdHlwZSB9KSB7CiAgICAgIHN1cGVyKGBBY2NvdW50IHR5cGUgIiR7dHlwZX0iIGlzIG5vdCBzdXBwb3J0ZWQuYCwgewogICAgICAgIGRvY3NQYXRoOiBkb2NzUGF0aDksCiAgICAgICAgbWV0YU1lc3NhZ2VzLAogICAgICAgIG5hbWU6ICJBY2NvdW50VHlwZU5vdFN1cHBvcnRlZEVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3dyaXRlQ29udHJhY3QuanMKICBpbml0X2VuY29kZUZ1bmN0aW9uRGF0YSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NlbmRUcmFuc2FjdGlvbi5qcwogIGluaXRfcGFyc2VBY2NvdW50KCk7CiAgaW5pdF9iYXNlKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY2hhaW4vYXNzZXJ0Q3VycmVudENoYWluLmpzCiAgaW5pdF9jaGFpbigpOwogIGZ1bmN0aW9uIGFzc2VydEN1cnJlbnRDaGFpbih7IGNoYWluLCBjdXJyZW50Q2hhaW5JZCB9KSB7CiAgICBpZiAoIWNoYWluKQogICAgICB0aHJvdyBuZXcgQ2hhaW5Ob3RGb3VuZEVycm9yKCk7CiAgICBpZiAoY3VycmVudENoYWluSWQgIT09IGNoYWluLmlkKQogICAgICB0aHJvdyBuZXcgQ2hhaW5NaXNtYXRjaEVycm9yKHsgY2hhaW4sIGN1cnJlbnRDaGFpbklkIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lcnJvcnMvZ2V0VHJhbnNhY3Rpb25FcnJvci5qcwogIGluaXRfbm9kZSgpOwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBpbml0X2dldE5vZGVFcnJvcigpOwogIGZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uRXJyb3IoZXJyLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIC4uLmFyZ3MgfSkgewogICAgY29uc3QgY2F1c2UgPSAoKCkgPT4gewogICAgICBjb25zdCBjYXVzZTIgPSBnZXROb2RlRXJyb3IoZXJyLCBhcmdzKTsKICAgICAgaWYgKGNhdXNlMiBpbnN0YW5jZW9mIFVua25vd25Ob2RlRXJyb3IpCiAgICAgICAgcmV0dXJuIGVycjsKICAgICAgcmV0dXJuIGNhdXNlMjsKICAgIH0pKCk7CiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IoY2F1c2UsIHsKICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgLi4uYXJncwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NlbmRUcmFuc2FjdGlvbi5qcwogIGluaXRfZXh0cmFjdCgpOwogIGluaXRfdHJhbnNhY3Rpb25SZXF1ZXN0KCk7CiAgaW5pdF9hc3NlcnRSZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvc2VuZFJhd1RyYW5zYWN0aW9uLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2VuZFJhd1RyYW5zYWN0aW9uKGNsaWVudCwgeyBzZXJpYWxpemVkVHJhbnNhY3Rpb24gfSkgewogICAgcmV0dXJuIGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX3NlbmRSYXdUcmFuc2FjdGlvbiIsCiAgICAgIHBhcmFtczogW3NlcmlhbGl6ZWRUcmFuc2FjdGlvbl0KICAgIH0sIHsgcmV0cnlDb3VudDogMCB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvc2VuZFRyYW5zYWN0aW9uLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2VuZFRyYW5zYWN0aW9uKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhY2NvdW50OiBhY2NvdW50XyA9IGNsaWVudC5hY2NvdW50LCBjaGFpbiA9IGNsaWVudC5jaGFpbiwgYWNjZXNzTGlzdCwgYXV0aG9yaXphdGlvbkxpc3QsIGJsb2JzLCBkYXRhLCBnYXMsIGdhc1ByaWNlLCBtYXhGZWVQZXJCbG9iR2FzLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBub25jZSwgdmFsdWUsIC4uLnJlc3QgfSA9IHBhcmFtZXRlcnM7CiAgICBpZiAoIWFjY291bnRfKQogICAgICB0aHJvdyBuZXcgQWNjb3VudE5vdEZvdW5kRXJyb3IoewogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvYWN0aW9ucy93YWxsZXQvc2VuZFRyYW5zYWN0aW9uIgogICAgICB9KTsKICAgIGNvbnN0IGFjY291bnQgPSBwYXJzZUFjY291bnQoYWNjb3VudF8pOwogICAgdHJ5IHsKICAgICAgYXNzZXJ0UmVxdWVzdChwYXJhbWV0ZXJzKTsKICAgICAgY29uc3QgdG8gPSBhd2FpdCAoYXN5bmMgKCkgPT4gewogICAgICAgIGlmIChwYXJhbWV0ZXJzLnRvKQogICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMudG87CiAgICAgICAgaWYgKGF1dGhvcml6YXRpb25MaXN0ICYmIGF1dGhvcml6YXRpb25MaXN0Lmxlbmd0aCA+IDApCiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVjb3ZlckF1dGhvcml6YXRpb25BZGRyZXNzKHsKICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvbkxpc3RbMF0KICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoImB0b2AgaXMgcmVxdWlyZWQuIENvdWxkIG5vdCBpbmZlciBmcm9tIGBhdXRob3JpemF0aW9uTGlzdGAuIik7CiAgICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9KSgpOwogICAgICBpZiAoYWNjb3VudC50eXBlID09PSAianNvbi1ycGMiKSB7CiAgICAgICAgbGV0IGNoYWluSWQ7CiAgICAgICAgaWYgKGNoYWluICE9PSBudWxsKSB7CiAgICAgICAgICBjaGFpbklkID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0Q2hhaW5JZCwgImdldENoYWluSWQiKSh7fSk7CiAgICAgICAgICBhc3NlcnRDdXJyZW50Q2hhaW4oewogICAgICAgICAgICBjdXJyZW50Q2hhaW5JZDogY2hhaW5JZCwKICAgICAgICAgICAgY2hhaW4KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb25zdCBjaGFpbkZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb25SZXF1ZXN0Py5mb3JtYXQ7CiAgICAgICAgY29uc3QgZm9ybWF0ID0gY2hhaW5Gb3JtYXQgfHwgZm9ybWF0VHJhbnNhY3Rpb25SZXF1ZXN0OwogICAgICAgIGNvbnN0IHJlcXVlc3QgPSBmb3JtYXQoewogICAgICAgICAgLy8gUGljayBvdXQgZXh0cmEgZGF0YSB0aGF0IG1pZ2h0IGV4aXN0IG9uIHRoZSBjaGFpbidzIHRyYW5zYWN0aW9uIHJlcXVlc3QgdHlwZS4KICAgICAgICAgIC4uLmV4dHJhY3QocmVzdCwgeyBmb3JtYXQ6IGNoYWluRm9ybWF0IH0pLAogICAgICAgICAgYWNjZXNzTGlzdCwKICAgICAgICAgIGF1dGhvcml6YXRpb25MaXN0LAogICAgICAgICAgYmxvYnMsCiAgICAgICAgICBjaGFpbklkLAogICAgICAgICAgZGF0YSwKICAgICAgICAgIGZyb206IGFjY291bnQuYWRkcmVzcywKICAgICAgICAgIGdhcywKICAgICAgICAgIGdhc1ByaWNlLAogICAgICAgICAgbWF4RmVlUGVyQmxvYkdhcywKICAgICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICB0bywKICAgICAgICAgIHZhbHVlCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICAgIG1ldGhvZDogImV0aF9zZW5kVHJhbnNhY3Rpb24iLAogICAgICAgICAgcGFyYW1zOiBbcmVxdWVzdF0KICAgICAgICB9LCB7IHJldHJ5Q291bnQ6IDAgfSk7CiAgICAgIH0KICAgICAgaWYgKGFjY291bnQudHlwZSA9PT0gImxvY2FsIikgewogICAgICAgIGNvbnN0IHJlcXVlc3QgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBwcmVwYXJlVHJhbnNhY3Rpb25SZXF1ZXN0LCAicHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdCIpKHsKICAgICAgICAgIGFjY291bnQsCiAgICAgICAgICBhY2Nlc3NMaXN0LAogICAgICAgICAgYXV0aG9yaXphdGlvbkxpc3QsCiAgICAgICAgICBibG9icywKICAgICAgICAgIGNoYWluLAogICAgICAgICAgZGF0YSwKICAgICAgICAgIGdhcywKICAgICAgICAgIGdhc1ByaWNlLAogICAgICAgICAgbWF4RmVlUGVyQmxvYkdhcywKICAgICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICBwYXJhbWV0ZXJzOiBbLi4uZGVmYXVsdFBhcmFtZXRlcnMsICJzaWRlY2FycyJdLAogICAgICAgICAgdmFsdWUsCiAgICAgICAgICAuLi5yZXN0LAogICAgICAgICAgdG8KICAgICAgICB9KTsKICAgICAgICBjb25zdCBzZXJpYWxpemVyID0gY2hhaW4/LnNlcmlhbGl6ZXJzPy50cmFuc2FjdGlvbjsKICAgICAgICBjb25zdCBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBhd2FpdCBhY2NvdW50LnNpZ25UcmFuc2FjdGlvbihyZXF1ZXN0LCB7CiAgICAgICAgICBzZXJpYWxpemVyCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHNlbmRSYXdUcmFuc2FjdGlvbiwgInNlbmRSYXdUcmFuc2FjdGlvbiIpKHsKICAgICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbgogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChhY2NvdW50LnR5cGUgPT09ICJzbWFydCIpCiAgICAgICAgdGhyb3cgbmV3IEFjY291bnRUeXBlTm90U3VwcG9ydGVkRXJyb3IoewogICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICJDb25zaWRlciB1c2luZyB0aGUgYHNlbmRVc2VyT3BlcmF0aW9uYCBBY3Rpb24gaW5zdGVhZC4iCiAgICAgICAgICBdLAogICAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9hY3Rpb25zL2J1bmRsZXIvc2VuZFVzZXJPcGVyYXRpb24iLAogICAgICAgICAgdHlwZTogInNtYXJ0IgogICAgICAgIH0pOwogICAgICB0aHJvdyBuZXcgQWNjb3VudFR5cGVOb3RTdXBwb3J0ZWRFcnJvcih7CiAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9hY3Rpb25zL3dhbGxldC9zZW5kVHJhbnNhY3Rpb24iLAogICAgICAgIHR5cGU6IGFjY291bnQudHlwZQogICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBpZiAoZXJyIGluc3RhbmNlb2YgQWNjb3VudFR5cGVOb3RTdXBwb3J0ZWRFcnJvcikKICAgICAgICB0aHJvdyBlcnI7CiAgICAgIHRocm93IGdldFRyYW5zYWN0aW9uRXJyb3IoZXJyLCB7CiAgICAgICAgLi4ucGFyYW1ldGVycywKICAgICAgICBhY2NvdW50LAogICAgICAgIGNoYWluOiBwYXJhbWV0ZXJzLmNoYWluIHx8IHZvaWQgMAogICAgICB9KTsKICAgIH0KICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvd3JpdGVDb250cmFjdC5qcwogIGFzeW5jIGZ1bmN0aW9uIHdyaXRlQ29udHJhY3QoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYWNjb3VudDogYWNjb3VudF8gPSBjbGllbnQuYWNjb3VudCwgYWRkcmVzcywgYXJncywgZGF0YVN1ZmZpeCwgZnVuY3Rpb25OYW1lLCAuLi5yZXF1ZXN0IH0gPSBwYXJhbWV0ZXJzOwogICAgaWYgKCFhY2NvdW50XykKICAgICAgdGhyb3cgbmV3IEFjY291bnROb3RGb3VuZEVycm9yKHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L3dyaXRlQ29udHJhY3QiCiAgICAgIH0pOwogICAgY29uc3QgYWNjb3VudCA9IHBhcnNlQWNjb3VudChhY2NvdW50Xyk7CiAgICBjb25zdCBkYXRhID0gZW5jb2RlRnVuY3Rpb25EYXRhKHsKICAgICAgYWJpOiBhYmkyLAogICAgICBhcmdzLAogICAgICBmdW5jdGlvbk5hbWUKICAgIH0pOwogICAgdHJ5IHsKICAgICAgcmV0dXJuIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHNlbmRUcmFuc2FjdGlvbiwgInNlbmRUcmFuc2FjdGlvbiIpKHsKICAgICAgICBkYXRhOiBgJHtkYXRhfSR7ZGF0YVN1ZmZpeCA/IGRhdGFTdWZmaXgucmVwbGFjZSgiMHgiLCAiIikgOiAiIn1gLAogICAgICAgIHRvOiBhZGRyZXNzLAogICAgICAgIGFjY291bnQsCiAgICAgICAgLi4ucmVxdWVzdAogICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHRocm93IGdldENvbnRyYWN0RXJyb3IoZXJyb3IsIHsKICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3Qvd3JpdGVDb250cmFjdCIsCiAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgIHNlbmRlcjogYWNjb3VudC5hZGRyZXNzCiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2dldENvbnRyYWN0LmpzCiAgZnVuY3Rpb24gZ2V0Q29udHJhY3QoeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGNsaWVudDogY2xpZW50XyB9KSB7CiAgICBjb25zdCBjbGllbnQgPSBjbGllbnRfOwogICAgY29uc3QgW3B1YmxpY0NsaWVudCwgd2FsbGV0Q2xpZW50XSA9ICgoKSA9PiB7CiAgICAgIGlmICghY2xpZW50KQogICAgICAgIHJldHVybiBbdm9pZCAwLCB2b2lkIDBdOwogICAgICBpZiAoInB1YmxpYyIgaW4gY2xpZW50ICYmICJ3YWxsZXQiIGluIGNsaWVudCkKICAgICAgICByZXR1cm4gW2NsaWVudC5wdWJsaWMsIGNsaWVudC53YWxsZXRdOwogICAgICBpZiAoInB1YmxpYyIgaW4gY2xpZW50KQogICAgICAgIHJldHVybiBbY2xpZW50LnB1YmxpYywgdm9pZCAwXTsKICAgICAgaWYgKCJ3YWxsZXQiIGluIGNsaWVudCkKICAgICAgICByZXR1cm4gW3ZvaWQgMCwgY2xpZW50LndhbGxldF07CiAgICAgIHJldHVybiBbY2xpZW50LCBjbGllbnRdOwogICAgfSkoKTsKICAgIGNvbnN0IGhhc1B1YmxpY0NsaWVudCA9IHB1YmxpY0NsaWVudCAhPT0gdm9pZCAwICYmIHB1YmxpY0NsaWVudCAhPT0gbnVsbDsKICAgIGNvbnN0IGhhc1dhbGxldENsaWVudCA9IHdhbGxldENsaWVudCAhPT0gdm9pZCAwICYmIHdhbGxldENsaWVudCAhPT0gbnVsbDsKICAgIGNvbnN0IGNvbnRyYWN0ID0ge307CiAgICBsZXQgaGFzUmVhZEZ1bmN0aW9uID0gZmFsc2U7CiAgICBsZXQgaGFzV3JpdGVGdW5jdGlvbiA9IGZhbHNlOwogICAgbGV0IGhhc0V2ZW50ID0gZmFsc2U7CiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYWJpMikgewogICAgICBpZiAoaXRlbS50eXBlID09PSAiZnVuY3Rpb24iKQogICAgICAgIGlmIChpdGVtLnN0YXRlTXV0YWJpbGl0eSA9PT0gInZpZXciIHx8IGl0ZW0uc3RhdGVNdXRhYmlsaXR5ID09PSAicHVyZSIpCiAgICAgICAgICBoYXNSZWFkRnVuY3Rpb24gPSB0cnVlOwogICAgICAgIGVsc2UKICAgICAgICAgIGhhc1dyaXRlRnVuY3Rpb24gPSB0cnVlOwogICAgICBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICJldmVudCIpCiAgICAgICAgaGFzRXZlbnQgPSB0cnVlOwogICAgICBpZiAoaGFzUmVhZEZ1bmN0aW9uICYmIGhhc1dyaXRlRnVuY3Rpb24gJiYgaGFzRXZlbnQpCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoaGFzUHVibGljQ2xpZW50KSB7CiAgICAgIGlmIChoYXNSZWFkRnVuY3Rpb24pCiAgICAgICAgY29udHJhY3QucmVhZCA9IG5ldyBQcm94eSh7fSwgewogICAgICAgICAgZ2V0KF8sIGZ1bmN0aW9uTmFtZSkgewogICAgICAgICAgICByZXR1cm4gKC4uLnBhcmFtZXRlcnMpID0+IHsKICAgICAgICAgICAgICBjb25zdCB7IGFyZ3MsIG9wdGlvbnMgfSA9IGdldEZ1bmN0aW9uUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKICAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0aW9uKHB1YmxpY0NsaWVudCwgcmVhZENvbnRyYWN0LCAicmVhZENvbnRyYWN0IikoewogICAgICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICAgICAgYWRkcmVzcywKICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgICAgICAgICAgIGFyZ3MsCiAgICAgICAgICAgICAgICAuLi5vcHRpb25zCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIGlmIChoYXNXcml0ZUZ1bmN0aW9uKQogICAgICAgIGNvbnRyYWN0LnNpbXVsYXRlID0gbmV3IFByb3h5KHt9LCB7CiAgICAgICAgICBnZXQoXywgZnVuY3Rpb25OYW1lKSB7CiAgICAgICAgICAgIHJldHVybiAoLi4ucGFyYW1ldGVycykgPT4gewogICAgICAgICAgICAgIGNvbnN0IHsgYXJncywgb3B0aW9ucyB9ID0gZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwogICAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb24ocHVibGljQ2xpZW50LCBzaW11bGF0ZUNvbnRyYWN0LCAic2ltdWxhdGVDb250cmFjdCIpKHsKICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgLi4ub3B0aW9ucwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICBpZiAoaGFzRXZlbnQpIHsKICAgICAgICBjb250cmFjdC5jcmVhdGVFdmVudEZpbHRlciA9IG5ldyBQcm94eSh7fSwgewogICAgICAgICAgZ2V0KF8sIGV2ZW50TmFtZSkgewogICAgICAgICAgICByZXR1cm4gKC4uLnBhcmFtZXRlcnMpID0+IHsKICAgICAgICAgICAgICBjb25zdCBhYmlFdmVudCA9IGFiaTIuZmluZCgoeCkgPT4geC50eXBlID09PSAiZXZlbnQiICYmIHgubmFtZSA9PT0gZXZlbnROYW1lKTsKICAgICAgICAgICAgICBjb25zdCB7IGFyZ3MsIG9wdGlvbnMgfSA9IGdldEV2ZW50UGFyYW1ldGVycyhwYXJhbWV0ZXJzLCBhYmlFdmVudCk7CiAgICAgICAgICAgICAgcmV0dXJuIGdldEFjdGlvbihwdWJsaWNDbGllbnQsIGNyZWF0ZUNvbnRyYWN0RXZlbnRGaWx0ZXIsICJjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyIikoewogICAgICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICAgICAgYWRkcmVzcywKICAgICAgICAgICAgICAgIGV2ZW50TmFtZSwKICAgICAgICAgICAgICAgIGFyZ3MsCiAgICAgICAgICAgICAgICAuLi5vcHRpb25zCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgY29udHJhY3QuZ2V0RXZlbnRzID0gbmV3IFByb3h5KHt9LCB7CiAgICAgICAgICBnZXQoXywgZXZlbnROYW1lKSB7CiAgICAgICAgICAgIHJldHVybiAoLi4ucGFyYW1ldGVycykgPT4gewogICAgICAgICAgICAgIGNvbnN0IGFiaUV2ZW50ID0gYWJpMi5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICJldmVudCIgJiYgeC5uYW1lID09PSBldmVudE5hbWUpOwogICAgICAgICAgICAgIGNvbnN0IHsgYXJncywgb3B0aW9ucyB9ID0gZ2V0RXZlbnRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMsIGFiaUV2ZW50KTsKICAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0aW9uKHB1YmxpY0NsaWVudCwgZ2V0Q29udHJhY3RFdmVudHMsICJnZXRDb250cmFjdEV2ZW50cyIpKHsKICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBldmVudE5hbWUsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgLi4ub3B0aW9ucwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGNvbnRyYWN0LndhdGNoRXZlbnQgPSBuZXcgUHJveHkoe30sIHsKICAgICAgICAgIGdldChfLCBldmVudE5hbWUpIHsKICAgICAgICAgICAgcmV0dXJuICguLi5wYXJhbWV0ZXJzKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgYWJpRXZlbnQgPSBhYmkyLmZpbmQoKHgpID0+IHgudHlwZSA9PT0gImV2ZW50IiAmJiB4Lm5hbWUgPT09IGV2ZW50TmFtZSk7CiAgICAgICAgICAgICAgY29uc3QgeyBhcmdzLCBvcHRpb25zIH0gPSBnZXRFdmVudFBhcmFtZXRlcnMocGFyYW1ldGVycywgYWJpRXZlbnQpOwogICAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb24ocHVibGljQ2xpZW50LCB3YXRjaENvbnRyYWN0RXZlbnQsICJ3YXRjaENvbnRyYWN0RXZlbnQiKSh7CiAgICAgICAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgZXZlbnROYW1lLAogICAgICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgaWYgKGhhc1dhbGxldENsaWVudCkgewogICAgICBpZiAoaGFzV3JpdGVGdW5jdGlvbikKICAgICAgICBjb250cmFjdC53cml0ZSA9IG5ldyBQcm94eSh7fSwgewogICAgICAgICAgZ2V0KF8sIGZ1bmN0aW9uTmFtZSkgewogICAgICAgICAgICByZXR1cm4gKC4uLnBhcmFtZXRlcnMpID0+IHsKICAgICAgICAgICAgICBjb25zdCB7IGFyZ3MsIG9wdGlvbnMgfSA9IGdldEZ1bmN0aW9uUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKICAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0aW9uKHdhbGxldENsaWVudCwgd3JpdGVDb250cmFjdCwgIndyaXRlQ29udHJhY3QiKSh7CiAgICAgICAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KICAgIGlmIChoYXNQdWJsaWNDbGllbnQgfHwgaGFzV2FsbGV0Q2xpZW50KSB7CiAgICAgIGlmIChoYXNXcml0ZUZ1bmN0aW9uKQogICAgICAgIGNvbnRyYWN0LmVzdGltYXRlR2FzID0gbmV3IFByb3h5KHt9LCB7CiAgICAgICAgICBnZXQoXywgZnVuY3Rpb25OYW1lKSB7CiAgICAgICAgICAgIHJldHVybiAoLi4ucGFyYW1ldGVycykgPT4gewogICAgICAgICAgICAgIGNvbnN0IHsgYXJncywgb3B0aW9ucyB9ID0gZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwogICAgICAgICAgICAgIGNvbnN0IGNsaWVudDIgPSBwdWJsaWNDbGllbnQgPz8gd2FsbGV0Q2xpZW50OwogICAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb24oY2xpZW50MiwgZXN0aW1hdGVDb250cmFjdEdhcywgImVzdGltYXRlQ29udHJhY3RHYXMiKSh7CiAgICAgICAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsCiAgICAgICAgICAgICAgICBhY2NvdW50OiBvcHRpb25zLmFjY291bnQgPz8gd2FsbGV0Q2xpZW50LmFjY291bnQKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KICAgIGNvbnRyYWN0LmFkZHJlc3MgPSBhZGRyZXNzOwogICAgY29udHJhY3QuYWJpID0gYWJpMjsKICAgIHJldHVybiBjb250cmFjdDsKICB9CiAgZnVuY3Rpb24gZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzKHZhbHVlcykgewogICAgY29uc3QgaGFzQXJncyA9IHZhbHVlcy5sZW5ndGggJiYgQXJyYXkuaXNBcnJheSh2YWx1ZXNbMF0pOwogICAgY29uc3QgYXJncyA9IGhhc0FyZ3MgPyB2YWx1ZXNbMF0gOiBbXTsKICAgIGNvbnN0IG9wdGlvbnMgPSAoaGFzQXJncyA/IHZhbHVlc1sxXSA6IHZhbHVlc1swXSkgPz8ge307CiAgICByZXR1cm4geyBhcmdzLCBvcHRpb25zIH07CiAgfQogIGZ1bmN0aW9uIGdldEV2ZW50UGFyYW1ldGVycyh2YWx1ZXMsIGFiaUV2ZW50KSB7CiAgICBsZXQgaGFzQXJncyA9IGZhbHNlOwogICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzWzBdKSkKICAgICAgaGFzQXJncyA9IHRydWU7CiAgICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxKSB7CiAgICAgIGhhc0FyZ3MgPSBhYmlFdmVudC5pbnB1dHMuc29tZSgoeCkgPT4geC5pbmRleGVkKTsKICAgIH0gZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMikgewogICAgICBoYXNBcmdzID0gdHJ1ZTsKICAgIH0KICAgIGNvbnN0IGFyZ3MgPSBoYXNBcmdzID8gdmFsdWVzWzBdIDogdm9pZCAwOwogICAgY29uc3Qgb3B0aW9ucyA9IChoYXNBcmdzID8gdmFsdWVzWzFdIDogdmFsdWVzWzBdKSA/PyB7fTsKICAgIHJldHVybiB7IGFyZ3MsIG9wdGlvbnMgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2VpcDcxMi5qcwogIGluaXRfYmFzZSgpOwogIHZhciBFaXA3MTJEb21haW5Ob3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgYWRkcmVzcyB9KSB7CiAgICAgIHN1cGVyKGBObyBFSVAtNzEyIGRvbWFpbiBmb3VuZCBvbiBjb250cmFjdCAiJHthZGRyZXNzfSIuYCwgewogICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgIkVuc3VyZSB0aGF0OiIsCiAgICAgICAgICBgLSBUaGUgY29udHJhY3QgaXMgZGVwbG95ZWQgYXQgdGhlIGFkZHJlc3MgIiR7YWRkcmVzc30iLmAsCiAgICAgICAgICAiLSBgZWlwNzEyRG9tYWluKClgIGZ1bmN0aW9uIGV4aXN0cyBvbiB0aGUgY29udHJhY3QuIiwKICAgICAgICAgICItIGBlaXA3MTJEb21haW4oKWAgZnVuY3Rpb24gbWF0Y2hlcyBzaWduYXR1cmUgdG8gRVJDLTUyNjcgc3BlY2lmaWNhdGlvbi4iCiAgICAgICAgXSwKICAgICAgICBuYW1lOiAiRWlwNzEyRG9tYWluTm90Rm91bmRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRFaXA3MTJEb21haW4uanMKICBhc3luYyBmdW5jdGlvbiBnZXRFaXA3MTJEb21haW4oY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGZhY3RvcnksIGZhY3RvcnlEYXRhIH0gPSBwYXJhbWV0ZXJzOwogICAgdHJ5IHsKICAgICAgY29uc3QgW2ZpZWxkcywgbmFtZSwgdmVyc2lvbjMsIGNoYWluSWQsIHZlcmlmeWluZ0NvbnRyYWN0LCBzYWx0LCBleHRlbnNpb25zXSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHJlYWRDb250cmFjdCwgInJlYWRDb250cmFjdCIpKHsKICAgICAgICBhYmksCiAgICAgICAgYWRkcmVzcywKICAgICAgICBmdW5jdGlvbk5hbWU6ICJlaXA3MTJEb21haW4iLAogICAgICAgIGZhY3RvcnksCiAgICAgICAgZmFjdG9yeURhdGEKICAgICAgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgZG9tYWluOiB7CiAgICAgICAgICBuYW1lLAogICAgICAgICAgdmVyc2lvbjogdmVyc2lvbjMsCiAgICAgICAgICBjaGFpbklkOiBOdW1iZXIoY2hhaW5JZCksCiAgICAgICAgICB2ZXJpZnlpbmdDb250cmFjdCwKICAgICAgICAgIHNhbHQKICAgICAgICB9LAogICAgICAgIGV4dGVuc2lvbnMsCiAgICAgICAgZmllbGRzCiAgICAgIH07CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIGNvbnN0IGVycm9yID0gZTsKICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICJDb250cmFjdEZ1bmN0aW9uRXhlY3V0aW9uRXJyb3IiICYmIGVycm9yLmNhdXNlLm5hbWUgPT09ICJDb250cmFjdEZ1bmN0aW9uWmVyb0RhdGFFcnJvciIpIHsKICAgICAgICB0aHJvdyBuZXcgRWlwNzEyRG9tYWluTm90Rm91bmRFcnJvcih7IGFkZHJlc3MgfSk7CiAgICAgIH0KICAgICAgdGhyb3cgZXJyb3I7CiAgICB9CiAgfQogIHZhciBhYmkgPSBbCiAgICB7CiAgICAgIGlucHV0czogW10sCiAgICAgIG5hbWU6ICJlaXA3MTJEb21haW4iLAogICAgICBvdXRwdXRzOiBbCiAgICAgICAgeyBuYW1lOiAiZmllbGRzIiwgdHlwZTogImJ5dGVzMSIgfSwKICAgICAgICB7IG5hbWU6ICJuYW1lIiwgdHlwZTogInN0cmluZyIgfSwKICAgICAgICB7IG5hbWU6ICJ2ZXJzaW9uIiwgdHlwZTogInN0cmluZyIgfSwKICAgICAgICB7IG5hbWU6ICJjaGFpbklkIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgeyBuYW1lOiAidmVyaWZ5aW5nQ29udHJhY3QiLCB0eXBlOiAiYWRkcmVzcyIgfSwKICAgICAgICB7IG5hbWU6ICJzYWx0IiwgdHlwZTogImJ5dGVzMzIiIH0sCiAgICAgICAgeyBuYW1lOiAiZXh0ZW5zaW9ucyIsIHR5cGU6ICJ1aW50MjU2W10iIH0KICAgICAgXSwKICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgIH0KICBdOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L2FkZENoYWluLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGFkZENoYWluKGNsaWVudCwgeyBjaGFpbiB9KSB7CiAgICBjb25zdCB7IGlkLCBuYW1lLCBuYXRpdmVDdXJyZW5jeSwgcnBjVXJscywgYmxvY2tFeHBsb3JlcnMgfSA9IGNoYWluOwogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ3YWxsZXRfYWRkRXRoZXJldW1DaGFpbiIsCiAgICAgIHBhcmFtczogWwogICAgICAgIHsKICAgICAgICAgIGNoYWluSWQ6IG51bWJlclRvSGV4KGlkKSwKICAgICAgICAgIGNoYWluTmFtZTogbmFtZSwKICAgICAgICAgIG5hdGl2ZUN1cnJlbmN5LAogICAgICAgICAgcnBjVXJsczogcnBjVXJscy5kZWZhdWx0Lmh0dHAsCiAgICAgICAgICBibG9ja0V4cGxvcmVyVXJsczogYmxvY2tFeHBsb3JlcnMgPyBPYmplY3QudmFsdWVzKGJsb2NrRXhwbG9yZXJzKS5tYXAoKHsgdXJsIH0pID0+IHVybCkgOiB2b2lkIDAKICAgICAgICB9CiAgICAgIF0KICAgIH0sIHsgZGVkdXBlOiB0cnVlLCByZXRyeUNvdW50OiAwIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2NyZWF0ZUNsaWVudC5qcwogIGluaXRfcGFyc2VBY2NvdW50KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdWlkLmpzCiAgdmFyIHNpemUyID0gMjU2OwogIHZhciBpbmRleCA9IHNpemUyOwogIHZhciBidWZmZXI7CiAgZnVuY3Rpb24gdWlkKGxlbmd0aCA9IDExKSB7CiAgICBpZiAoIWJ1ZmZlciB8fCBpbmRleCArIGxlbmd0aCA+IHNpemUyICogMikgewogICAgICBidWZmZXIgPSAiIjsKICAgICAgaW5kZXggPSAwOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemUyOyBpKyspIHsKICAgICAgICBidWZmZXIgKz0gKDI1NiArIE1hdGgucmFuZG9tKCkgKiAyNTYgfCAwKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnN1YnN0cmluZyhpbmRleCwgaW5kZXgrKyArIGxlbmd0aCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvY3JlYXRlQ2xpZW50LmpzCiAgZnVuY3Rpb24gY3JlYXRlQ2xpZW50KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYmF0Y2gsIGNhY2hlVGltZSA9IHBhcmFtZXRlcnMucG9sbGluZ0ludGVydmFsID8/IDRlMywgY2NpcFJlYWQsIGtleSA9ICJiYXNlIiwgbmFtZSA9ICJCYXNlIENsaWVudCIsIHBvbGxpbmdJbnRlcnZhbCA9IDRlMywgdHlwZSA9ICJiYXNlIiB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGNoYWluID0gcGFyYW1ldGVycy5jaGFpbjsKICAgIGNvbnN0IGFjY291bnQgPSBwYXJhbWV0ZXJzLmFjY291bnQgPyBwYXJzZUFjY291bnQocGFyYW1ldGVycy5hY2NvdW50KSA6IHZvaWQgMDsKICAgIGNvbnN0IHsgY29uZmlnLCByZXF1ZXN0LCB2YWx1ZSB9ID0gcGFyYW1ldGVycy50cmFuc3BvcnQoewogICAgICBjaGFpbiwKICAgICAgcG9sbGluZ0ludGVydmFsCiAgICB9KTsKICAgIGNvbnN0IHRyYW5zcG9ydCA9IHsgLi4uY29uZmlnLCAuLi52YWx1ZSB9OwogICAgY29uc3QgY2xpZW50ID0gewogICAgICBhY2NvdW50LAogICAgICBiYXRjaCwKICAgICAgY2FjaGVUaW1lLAogICAgICBjY2lwUmVhZCwKICAgICAgY2hhaW4sCiAgICAgIGtleSwKICAgICAgbmFtZSwKICAgICAgcG9sbGluZ0ludGVydmFsLAogICAgICByZXF1ZXN0LAogICAgICB0cmFuc3BvcnQsCiAgICAgIHR5cGUsCiAgICAgIHVpZDogdWlkKCkKICAgIH07CiAgICBmdW5jdGlvbiBleHRlbmQoYmFzZTIpIHsKICAgICAgcmV0dXJuIChleHRlbmRGbikgPT4gewogICAgICAgIGNvbnN0IGV4dGVuZGVkID0gZXh0ZW5kRm4oYmFzZTIpOwogICAgICAgIGZvciAoY29uc3Qga2V5MiBpbiBjbGllbnQpCiAgICAgICAgICBkZWxldGUgZXh0ZW5kZWRba2V5Ml07CiAgICAgICAgY29uc3QgY29tYmluZWQgPSB7IC4uLmJhc2UyLCAuLi5leHRlbmRlZCB9OwogICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGNvbWJpbmVkLCB7IGV4dGVuZDogZXh0ZW5kKGNvbWJpbmVkKSB9KTsKICAgICAgfTsKICAgIH0KICAgIHJldHVybiBPYmplY3QuYXNzaWduKGNsaWVudCwgeyBleHRlbmQ6IGV4dGVuZChjbGllbnQpIH0pOwogIH0KICBmdW5jdGlvbiBycGNTY2hlbWEoKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYnVpbGRSZXF1ZXN0LmpzCiAgaW5pdF9iYXNlKCk7CiAgaW5pdF9yZXF1ZXN0KCk7CiAgaW5pdF9ycGMoKTsKICBpbml0X3RvSGV4KCk7CiAgaW5pdF9rZWNjYWsyNTYoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9wcm9taXNlL3dpdGhEZWR1cGUuanMKICBpbml0X2xydSgpOwogIHZhciBwcm9taXNlQ2FjaGUyID0gLyogQF9fUFVSRV9fICovIG5ldyBMcnVNYXAoODE5Mik7CiAgZnVuY3Rpb24gd2l0aERlZHVwZShmbiwgeyBlbmFibGVkID0gdHJ1ZSwgaWQgfSkgewogICAgaWYgKCFlbmFibGVkIHx8ICFpZCkKICAgICAgcmV0dXJuIGZuKCk7CiAgICBpZiAocHJvbWlzZUNhY2hlMi5nZXQoaWQpKQogICAgICByZXR1cm4gcHJvbWlzZUNhY2hlMi5nZXQoaWQpOwogICAgY29uc3QgcHJvbWlzZSA9IGZuKCkuZmluYWxseSgoKSA9PiBwcm9taXNlQ2FjaGUyLmRlbGV0ZShpZCkpOwogICAgcHJvbWlzZUNhY2hlMi5zZXQoaWQsIHByb21pc2UpOwogICAgcmV0dXJuIHByb21pc2U7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3Byb21pc2Uvd2l0aFJldHJ5LmpzCiAgZnVuY3Rpb24gd2l0aFJldHJ5KGZuLCB7IGRlbGF5OiBkZWxheV8gPSAxMDAsIHJldHJ5Q291bnQgPSAyLCBzaG91bGRSZXRyeTogc2hvdWxkUmV0cnkyID0gKCkgPT4gdHJ1ZSB9ID0ge30pIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIGNvbnN0IGF0dGVtcHRSZXRyeSA9IGFzeW5jICh7IGNvdW50ID0gMCB9ID0ge30pID0+IHsKICAgICAgICBjb25zdCByZXRyeSA9IGFzeW5jICh7IGVycm9yIH0pID0+IHsKICAgICAgICAgIGNvbnN0IGRlbGF5ID0gdHlwZW9mIGRlbGF5XyA9PT0gImZ1bmN0aW9uIiA/IGRlbGF5Xyh7IGNvdW50LCBlcnJvciB9KSA6IGRlbGF5XzsKICAgICAgICAgIGlmIChkZWxheSkKICAgICAgICAgICAgYXdhaXQgd2FpdChkZWxheSk7CiAgICAgICAgICBhdHRlbXB0UmV0cnkoeyBjb3VudDogY291bnQgKyAxIH0pOwogICAgICAgIH07CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmbigpOwogICAgICAgICAgcmVzb2x2ZShkYXRhKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGlmIChjb3VudCA8IHJldHJ5Q291bnQgJiYgYXdhaXQgc2hvdWxkUmV0cnkyKHsgY291bnQsIGVycm9yOiBlcnIgfSkpCiAgICAgICAgICAgIHJldHVybiByZXRyeSh7IGVycm9yOiBlcnIgfSk7CiAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGF0dGVtcHRSZXRyeSgpOwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2J1aWxkUmVxdWVzdC5qcwogIGluaXRfc3RyaW5naWZ5KCk7CiAgZnVuY3Rpb24gYnVpbGRSZXF1ZXN0KHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkgewogICAgcmV0dXJuIGFzeW5jIChhcmdzLCBvdmVycmlkZU9wdGlvbnMgPSB7fSkgPT4gewogICAgICBjb25zdCB7IGRlZHVwZSA9IGZhbHNlLCByZXRyeURlbGF5ID0gMTUwLCByZXRyeUNvdW50ID0gMywgdWlkOiB1aWQyIH0gPSB7CiAgICAgICAgLi4ub3B0aW9ucywKICAgICAgICAuLi5vdmVycmlkZU9wdGlvbnMKICAgICAgfTsKICAgICAgY29uc3QgcmVxdWVzdElkID0gZGVkdXBlID8ga2VjY2FrMjU2KHN0cmluZ1RvSGV4KGAke3VpZDJ9LiR7c3RyaW5naWZ5KGFyZ3MpfWApKSA6IHZvaWQgMDsKICAgICAgcmV0dXJuIHdpdGhEZWR1cGUoKCkgPT4gd2l0aFJldHJ5KGFzeW5jICgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIGF3YWl0IHJlcXVlc3QoYXJncyk7CiAgICAgICAgfSBjYXRjaCAoZXJyXykgewogICAgICAgICAgY29uc3QgZXJyID0gZXJyXzsKICAgICAgICAgIHN3aXRjaCAoZXJyLmNvZGUpIHsKICAgICAgICAgICAgY2FzZSBQYXJzZVJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlUnBjRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRSZXF1ZXN0UnBjRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBNZXRob2ROb3RGb3VuZFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IE1ldGhvZE5vdEZvdW5kUnBjRXJyb3IoZXJyLCB7IG1ldGhvZDogYXJncy5tZXRob2QgfSk7CiAgICAgICAgICAgIGNhc2UgSW52YWxpZFBhcmFtc1JwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbXNScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIEludGVybmFsUnBjRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIEludmFsaWRJbnB1dFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRJbnB1dFJwY0Vycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlTm90Rm91bmRScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvci5jb2RlOgogICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBUcmFuc2FjdGlvblJlamVjdGVkUnBjRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IoZXJyLCB7CiAgICAgICAgICAgICAgICBtZXRob2Q6IGFyZ3MubWV0aG9kCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNhc2UgTGltaXRFeGNlZWRlZFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IExpbWl0RXhjZWVkZWRScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIEpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvci5jb2RlOgogICAgICAgICAgICAgIHRocm93IG5ldyBKc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBVc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgVXNlclJlamVjdGVkUmVxdWVzdEVycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgVW5hdXRob3JpemVkUHJvdmlkZXJFcnJvci5jb2RlOgogICAgICAgICAgICAgIHRocm93IG5ldyBVbmF1dGhvcml6ZWRQcm92aWRlckVycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIFByb3ZpZGVyRGlzY29ubmVjdGVkRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgUHJvdmlkZXJEaXNjb25uZWN0ZWRFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIENoYWluRGlzY29ubmVjdGVkRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgQ2hhaW5EaXNjb25uZWN0ZWRFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIFN3aXRjaENoYWluRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgU3dpdGNoQ2hhaW5FcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIDVlMzoKICAgICAgICAgICAgICB0aHJvdyBuZXcgVXNlclJlamVjdGVkUmVxdWVzdEVycm9yKGVycik7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgaWYgKGVycl8gaW5zdGFuY2VvZiBCYXNlRXJyb3IyKQogICAgICAgICAgICAgICAgdGhyb3cgZXJyXzsKICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5rbm93blJwY0Vycm9yKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAgZGVsYXk6ICh7IGNvdW50LCBlcnJvciB9KSA9PiB7CiAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IgaW5zdGFuY2VvZiBIdHRwUmVxdWVzdEVycm9yKSB7CiAgICAgICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBlcnJvcj8uaGVhZGVycz8uZ2V0KCJSZXRyeS1BZnRlciIpOwogICAgICAgICAgICBpZiAocmV0cnlBZnRlcj8ubWF0Y2goL1xkLykpCiAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5wYXJzZUludChyZXRyeUFmdGVyKSAqIDFlMzsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB+figxIDw8IGNvdW50KSAqIHJldHJ5RGVsYXk7CiAgICAgICAgfSwKICAgICAgICByZXRyeUNvdW50LAogICAgICAgIHNob3VsZFJldHJ5OiAoeyBlcnJvciB9KSA9PiBzaG91bGRSZXRyeShlcnJvcikKICAgICAgfSksIHsgZW5hYmxlZDogZGVkdXBlLCBpZDogcmVxdWVzdElkIH0pOwogICAgfTsKICB9CiAgZnVuY3Rpb24gc2hvdWxkUmV0cnkoZXJyb3IpIHsKICAgIGlmICgiY29kZSIgaW4gZXJyb3IgJiYgdHlwZW9mIGVycm9yLmNvZGUgPT09ICJudW1iZXIiKSB7CiAgICAgIGlmIChlcnJvci5jb2RlID09PSAtMSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGVycm9yLmNvZGUgPT09IExpbWl0RXhjZWVkZWRScGNFcnJvci5jb2RlKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoZXJyb3IuY29kZSA9PT0gSW50ZXJuYWxScGNFcnJvci5jb2RlKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwUmVxdWVzdEVycm9yICYmIGVycm9yLnN0YXR1cykgewogICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDMpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwOCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDEzKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MjkpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDUwMCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAyKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA1MDMpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDUwNCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvdHJhbnNwb3J0cy9jcmVhdGVUcmFuc3BvcnQuanMKICBmdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnQoeyBrZXksIG5hbWUsIHJlcXVlc3QsIHJldHJ5Q291bnQgPSAzLCByZXRyeURlbGF5ID0gMTUwLCB0aW1lb3V0LCB0eXBlIH0sIHZhbHVlKSB7CiAgICBjb25zdCB1aWQyID0gdWlkKCk7CiAgICByZXR1cm4gewogICAgICBjb25maWc6IHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICByZXF1ZXN0LAogICAgICAgIHJldHJ5Q291bnQsCiAgICAgICAgcmV0cnlEZWxheSwKICAgICAgICB0aW1lb3V0LAogICAgICAgIHR5cGUKICAgICAgfSwKICAgICAgcmVxdWVzdDogYnVpbGRSZXF1ZXN0KHJlcXVlc3QsIHsgcmV0cnlDb3VudCwgcmV0cnlEZWxheSwgdWlkOiB1aWQyIH0pLAogICAgICB2YWx1ZQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2xpZW50cy90cmFuc3BvcnRzL2N1c3RvbS5qcwogIGZ1bmN0aW9uIGN1c3RvbShwcm92aWRlciwgY29uZmlnID0ge30pIHsKICAgIGNvbnN0IHsga2V5ID0gImN1c3RvbSIsIG5hbWUgPSAiQ3VzdG9tIFByb3ZpZGVyIiwgcmV0cnlEZWxheSB9ID0gY29uZmlnOwogICAgcmV0dXJuICh7IHJldHJ5Q291bnQ6IGRlZmF1bHRSZXRyeUNvdW50IH0pID0+IGNyZWF0ZVRyYW5zcG9ydCh7CiAgICAgIGtleSwKICAgICAgbmFtZSwKICAgICAgcmVxdWVzdDogcHJvdmlkZXIucmVxdWVzdC5iaW5kKHByb3ZpZGVyKSwKICAgICAgcmV0cnlDb3VudDogY29uZmlnLnJldHJ5Q291bnQgPz8gZGVmYXVsdFJldHJ5Q291bnQsCiAgICAgIHJldHJ5RGVsYXksCiAgICAgIHR5cGU6ICJjdXN0b20iCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2xpZW50cy90cmFuc3BvcnRzL2ZhbGxiYWNrLmpzCiAgaW5pdF9ycGMoKTsKICBmdW5jdGlvbiBmYWxsYmFjayh0cmFuc3BvcnRzXywgY29uZmlnID0ge30pIHsKICAgIGNvbnN0IHsga2V5ID0gImZhbGxiYWNrIiwgbmFtZSA9ICJGYWxsYmFjayIsIHJhbmsgPSBmYWxzZSwgcmV0cnlDb3VudCwgcmV0cnlEZWxheSB9ID0gY29uZmlnOwogICAgcmV0dXJuICh7IGNoYWluLCBwb2xsaW5nSW50ZXJ2YWwgPSA0ZTMsIHRpbWVvdXQsIC4uLnJlc3QgfSkgPT4gewogICAgICBsZXQgdHJhbnNwb3J0cyA9IHRyYW5zcG9ydHNfOwogICAgICBsZXQgb25SZXNwb25zZSA9ICgpID0+IHsKICAgICAgfTsKICAgICAgY29uc3QgdHJhbnNwb3J0ID0gY3JlYXRlVHJhbnNwb3J0KHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICAgICAgY29uc3QgZmV0Y2gyID0gYXN5bmMgKGkgPSAwKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydDIgPSB0cmFuc3BvcnRzW2ldKHsKICAgICAgICAgICAgICAuLi5yZXN0LAogICAgICAgICAgICAgIGNoYWluLAogICAgICAgICAgICAgIHJldHJ5Q291bnQ6IDAsCiAgICAgICAgICAgICAgdGltZW91dAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRyYW5zcG9ydDIucmVxdWVzdCh7CiAgICAgICAgICAgICAgICBtZXRob2QsCiAgICAgICAgICAgICAgICBwYXJhbXMKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBvblJlc3BvbnNlKHsKICAgICAgICAgICAgICAgIG1ldGhvZCwKICAgICAgICAgICAgICAgIHBhcmFtcywKICAgICAgICAgICAgICAgIHJlc3BvbnNlLAogICAgICAgICAgICAgICAgdHJhbnNwb3J0OiB0cmFuc3BvcnQyLAogICAgICAgICAgICAgICAgc3RhdHVzOiAic3VjY2VzcyIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgIG9uUmVzcG9uc2UoewogICAgICAgICAgICAgICAgZXJyb3I6IGVyciwKICAgICAgICAgICAgICAgIG1ldGhvZCwKICAgICAgICAgICAgICAgIHBhcmFtcywKICAgICAgICAgICAgICAgIHRyYW5zcG9ydDogdHJhbnNwb3J0MiwKICAgICAgICAgICAgICAgIHN0YXR1czogImVycm9yIgogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyhlcnIpKQogICAgICAgICAgICAgICAgdGhyb3cgZXJyOwogICAgICAgICAgICAgIGlmIChpID09PSB0cmFuc3BvcnRzLmxlbmd0aCAtIDEpCiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgICAgICAgcmV0dXJuIGZldGNoMihpICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gZmV0Y2gyKCk7CiAgICAgICAgfSwKICAgICAgICByZXRyeUNvdW50LAogICAgICAgIHJldHJ5RGVsYXksCiAgICAgICAgdHlwZTogImZhbGxiYWNrIgogICAgICB9LCB7CiAgICAgICAgb25SZXNwb25zZTogKGZuKSA9PiBvblJlc3BvbnNlID0gZm4sCiAgICAgICAgdHJhbnNwb3J0czogdHJhbnNwb3J0cy5tYXAoKGZuKSA9PiBmbih7IGNoYWluLCByZXRyeUNvdW50OiAwIH0pKQogICAgICB9KTsKICAgICAgaWYgKHJhbmspIHsKICAgICAgICBjb25zdCByYW5rT3B0aW9ucyA9IHR5cGVvZiByYW5rID09PSAib2JqZWN0IiA/IHJhbmsgOiB7fTsKICAgICAgICByYW5rVHJhbnNwb3J0cyh7CiAgICAgICAgICBjaGFpbiwKICAgICAgICAgIGludGVydmFsOiByYW5rT3B0aW9ucy5pbnRlcnZhbCA/PyBwb2xsaW5nSW50ZXJ2YWwsCiAgICAgICAgICBvblRyYW5zcG9ydHM6ICh0cmFuc3BvcnRzXzIpID0+IHRyYW5zcG9ydHMgPSB0cmFuc3BvcnRzXzIsCiAgICAgICAgICBzYW1wbGVDb3VudDogcmFua09wdGlvbnMuc2FtcGxlQ291bnQsCiAgICAgICAgICB0aW1lb3V0OiByYW5rT3B0aW9ucy50aW1lb3V0LAogICAgICAgICAgdHJhbnNwb3J0cywKICAgICAgICAgIHdlaWdodHM6IHJhbmtPcHRpb25zLndlaWdodHMKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gdHJhbnNwb3J0OwogICAgfTsKICB9CiAgZnVuY3Rpb24gc2hvdWxkVGhyb3coZXJyb3IpIHsKICAgIGlmICgiY29kZSIgaW4gZXJyb3IgJiYgdHlwZW9mIGVycm9yLmNvZGUgPT09ICJudW1iZXIiKSB7CiAgICAgIGlmIChlcnJvci5jb2RlID09PSBUcmFuc2FjdGlvblJlamVjdGVkUnBjRXJyb3IuY29kZSB8fCBlcnJvci5jb2RlID09PSBVc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IuY29kZSB8fCBlcnJvci5jb2RlID09PSA1ZTMpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIHJhbmtUcmFuc3BvcnRzKHsgY2hhaW4sIGludGVydmFsID0gNGUzLCBvblRyYW5zcG9ydHMsIHNhbXBsZUNvdW50ID0gMTAsIHRpbWVvdXQgPSAxZTMsIHRyYW5zcG9ydHMsIHdlaWdodHMgPSB7fSB9KSB7CiAgICBjb25zdCB7IHN0YWJpbGl0eTogc3RhYmlsaXR5V2VpZ2h0ID0gMC43LCBsYXRlbmN5OiBsYXRlbmN5V2VpZ2h0ID0gMC4zIH0gPSB3ZWlnaHRzOwogICAgY29uc3Qgc2FtcGxlcyA9IFtdOwogICAgY29uc3QgcmFua1RyYW5zcG9ydHNfID0gYXN5bmMgKCkgPT4gewogICAgICBjb25zdCBzYW1wbGUgPSBhd2FpdCBQcm9taXNlLmFsbCh0cmFuc3BvcnRzLm1hcChhc3luYyAodHJhbnNwb3J0KSA9PiB7CiAgICAgICAgY29uc3QgdHJhbnNwb3J0XyA9IHRyYW5zcG9ydCh7IGNoYWluLCByZXRyeUNvdW50OiAwLCB0aW1lb3V0IH0pOwogICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTsKICAgICAgICBsZXQgZW5kOwogICAgICAgIGxldCBzdWNjZXNzOwogICAgICAgIHRyeSB7CiAgICAgICAgICBhd2FpdCB0cmFuc3BvcnRfLnJlcXVlc3QoeyBtZXRob2Q6ICJuZXRfbGlzdGVuaW5nIiB9KTsKICAgICAgICAgIHN1Y2Nlc3MgPSAxOwogICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgc3VjY2VzcyA9IDA7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIGVuZCA9IERhdGUubm93KCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxhdGVuY3kgPSBlbmQgLSBzdGFydDsKICAgICAgICByZXR1cm4geyBsYXRlbmN5LCBzdWNjZXNzIH07CiAgICAgIH0pKTsKICAgICAgc2FtcGxlcy5wdXNoKHNhbXBsZSk7CiAgICAgIGlmIChzYW1wbGVzLmxlbmd0aCA+IHNhbXBsZUNvdW50KQogICAgICAgIHNhbXBsZXMuc2hpZnQoKTsKICAgICAgY29uc3QgbWF4TGF0ZW5jeSA9IE1hdGgubWF4KC4uLnNhbXBsZXMubWFwKChzYW1wbGUyKSA9PiBNYXRoLm1heCguLi5zYW1wbGUyLm1hcCgoeyBsYXRlbmN5IH0pID0+IGxhdGVuY3kpKSkpOwogICAgICBjb25zdCBzY29yZXMgPSB0cmFuc3BvcnRzLm1hcCgoXywgaSkgPT4gewogICAgICAgIGNvbnN0IGxhdGVuY2llcyA9IHNhbXBsZXMubWFwKChzYW1wbGUyKSA9PiBzYW1wbGUyW2ldLmxhdGVuY3kpOwogICAgICAgIGNvbnN0IG1lYW5MYXRlbmN5ID0gbGF0ZW5jaWVzLnJlZHVjZSgoYWNjLCBsYXRlbmN5KSA9PiBhY2MgKyBsYXRlbmN5LCAwKSAvIGxhdGVuY2llcy5sZW5ndGg7CiAgICAgICAgY29uc3QgbGF0ZW5jeVNjb3JlID0gMSAtIG1lYW5MYXRlbmN5IC8gbWF4TGF0ZW5jeTsKICAgICAgICBjb25zdCBzdWNjZXNzZXMgPSBzYW1wbGVzLm1hcCgoc2FtcGxlMikgPT4gc2FtcGxlMltpXS5zdWNjZXNzKTsKICAgICAgICBjb25zdCBzdGFiaWxpdHlTY29yZSA9IHN1Y2Nlc3Nlcy5yZWR1Y2UoKGFjYywgc3VjY2VzcykgPT4gYWNjICsgc3VjY2VzcywgMCkgLyBzdWNjZXNzZXMubGVuZ3RoOwogICAgICAgIGlmIChzdGFiaWxpdHlTY29yZSA9PT0gMCkKICAgICAgICAgIHJldHVybiBbMCwgaV07CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgIGxhdGVuY3lXZWlnaHQgKiBsYXRlbmN5U2NvcmUgKyBzdGFiaWxpdHlXZWlnaHQgKiBzdGFiaWxpdHlTY29yZSwKICAgICAgICAgIGkKICAgICAgICBdOwogICAgICB9KS5zb3J0KChhLCBiKSA9PiBiWzBdIC0gYVswXSk7CiAgICAgIG9uVHJhbnNwb3J0cyhzY29yZXMubWFwKChbLCBpXSkgPT4gdHJhbnNwb3J0c1tpXSkpOwogICAgICBhd2FpdCB3YWl0KGludGVydmFsKTsKICAgICAgcmFua1RyYW5zcG9ydHNfKCk7CiAgICB9OwogICAgcmFua1RyYW5zcG9ydHNfKCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvdHJhbnNwb3J0cy9odHRwLmpzCiAgaW5pdF9yZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL3RyYW5zcG9ydC5qcwogIGluaXRfYmFzZSgpOwogIHZhciBVcmxSZXF1aXJlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiTm8gVVJMIHdhcyBwcm92aWRlZCB0byB0aGUgVHJhbnNwb3J0LiBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIFJQQyBVUkwgdG8gdGhlIFRyYW5zcG9ydC4iLCB7CiAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9jbGllbnRzL2ludHJvIiwKICAgICAgICBuYW1lOiAiVXJsUmVxdWlyZWRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL3RyYW5zcG9ydHMvaHR0cC5qcwogIGluaXRfY3JlYXRlQmF0Y2hTY2hlZHVsZXIoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ycGMvaHR0cC5qcwogIGluaXRfcmVxdWVzdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3Byb21pc2Uvd2l0aFRpbWVvdXQuanMKICBmdW5jdGlvbiB3aXRoVGltZW91dChmbiwgeyBlcnJvckluc3RhbmNlID0gbmV3IEVycm9yKCJ0aW1lZCBvdXQiKSwgdGltZW91dCwgc2lnbmFsIH0pIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIDsKICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICBsZXQgdGltZW91dElkOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgICAgaWYgKHRpbWVvdXQgPiAwKSB7CiAgICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIGlmIChzaWduYWwpIHsKICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVqZWN0KGVycm9ySW5zdGFuY2UpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgdGltZW91dCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXNvbHZlKGF3YWl0IGZuKHsgc2lnbmFsOiBjb250cm9sbGVyPy5zaWduYWwgfHwgbnVsbCB9KSk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBpZiAoZXJyPy5uYW1lID09PSAiQWJvcnRFcnJvciIpCiAgICAgICAgICAgIHJlamVjdChlcnJvckluc3RhbmNlKTsKICAgICAgICAgIHJlamVjdChlcnIpOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTsKICAgICAgICB9CiAgICAgIH0pKCk7CiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcnBjL2h0dHAuanMKICBpbml0X3N0cmluZ2lmeSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3JwYy9pZC5qcwogIGZ1bmN0aW9uIGNyZWF0ZUlkU3RvcmUoKSB7CiAgICByZXR1cm4gewogICAgICBjdXJyZW50OiAwLAogICAgICB0YWtlKCkgewogICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQrKzsKICAgICAgfSwKICAgICAgcmVzZXQoKSB7CiAgICAgICAgdGhpcy5jdXJyZW50ID0gMDsKICAgICAgfQogICAgfTsKICB9CiAgdmFyIGlkQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gY3JlYXRlSWRTdG9yZSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3JwYy9odHRwLmpzCiAgZnVuY3Rpb24gZ2V0SHR0cFJwY0NsaWVudCh1cmwsIG9wdGlvbnMgPSB7fSkgewogICAgcmV0dXJuIHsKICAgICAgYXN5bmMgcmVxdWVzdChwYXJhbXMpIHsKICAgICAgICBjb25zdCB7IGJvZHksIG9uUmVxdWVzdCA9IG9wdGlvbnMub25SZXF1ZXN0LCBvblJlc3BvbnNlID0gb3B0aW9ucy5vblJlc3BvbnNlLCB0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID8/IDFlNCB9ID0gcGFyYW1zOwogICAgICAgIGNvbnN0IGZldGNoT3B0aW9ucyA9IHsKICAgICAgICAgIC4uLm9wdGlvbnMuZmV0Y2hPcHRpb25zID8/IHt9LAogICAgICAgICAgLi4ucGFyYW1zLmZldGNoT3B0aW9ucyA/PyB7fQogICAgICAgIH07CiAgICAgICAgY29uc3QgeyBoZWFkZXJzLCBtZXRob2QsIHNpZ25hbDogc2lnbmFsXyB9ID0gZmV0Y2hPcHRpb25zOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHdpdGhUaW1lb3V0KGFzeW5jICh7IHNpZ25hbCB9KSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGluaXQgPSB7CiAgICAgICAgICAgICAgLi4uZmV0Y2hPcHRpb25zLAogICAgICAgICAgICAgIGJvZHk6IEFycmF5LmlzQXJyYXkoYm9keSkgPyBzdHJpbmdpZnkoYm9keS5tYXAoKGJvZHkyKSA9PiAoewogICAgICAgICAgICAgICAganNvbnJwYzogIjIuMCIsCiAgICAgICAgICAgICAgICBpZDogYm9keTIuaWQgPz8gaWRDYWNoZS50YWtlKCksCiAgICAgICAgICAgICAgICAuLi5ib2R5MgogICAgICAgICAgICAgIH0pKSkgOiBzdHJpbmdpZnkoewogICAgICAgICAgICAgICAganNvbnJwYzogIjIuMCIsCiAgICAgICAgICAgICAgICBpZDogYm9keS5pZCA/PyBpZENhY2hlLnRha2UoKSwKICAgICAgICAgICAgICAgIC4uLmJvZHkKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICAgICAgICAgLi4uaGVhZGVycwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QgfHwgIlBPU1QiLAogICAgICAgICAgICAgIHNpZ25hbDogc2lnbmFsXyB8fCAodGltZW91dCA+IDAgPyBzaWduYWwgOiBudWxsKQogICAgICAgICAgICB9OwogICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCBpbml0KTsKICAgICAgICAgICAgaWYgKG9uUmVxdWVzdCkKICAgICAgICAgICAgICBhd2FpdCBvblJlcXVlc3QocmVxdWVzdCk7CiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlMiA9IGF3YWl0IGZldGNoKHVybCwgaW5pdCk7CiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTI7CiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIGVycm9ySW5zdGFuY2U6IG5ldyBUaW1lb3V0RXJyb3IoeyBib2R5LCB1cmwgfSksCiAgICAgICAgICAgIHRpbWVvdXQsCiAgICAgICAgICAgIHNpZ25hbDogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAob25SZXNwb25zZSkKICAgICAgICAgICAgYXdhaXQgb25SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgICBsZXQgZGF0YTsKICAgICAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIik/LnN0YXJ0c1dpdGgoImFwcGxpY2F0aW9uL2pzb24iKSkKICAgICAgICAgICAgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBkYXRhID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhIHx8ICJ7fSIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykgewogICAgICAgICAgICB0aHJvdyBuZXcgSHR0cFJlcXVlc3RFcnJvcih7CiAgICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgICBkZXRhaWxzOiBzdHJpbmdpZnkoZGF0YS5lcnJvcikgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dCwKICAgICAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLAogICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLAogICAgICAgICAgICAgIHVybAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEh0dHBSZXF1ZXN0RXJyb3IpCiAgICAgICAgICAgIHRocm93IGVycjsKICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IpCiAgICAgICAgICAgIHRocm93IGVycjsKICAgICAgICAgIHRocm93IG5ldyBIdHRwUmVxdWVzdEVycm9yKHsKICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgY2F1c2U6IGVyciwKICAgICAgICAgICAgdXJsCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvdHJhbnNwb3J0cy9odHRwLmpzCiAgZnVuY3Rpb24gaHR0cCh1cmwsIGNvbmZpZyA9IHt9KSB7CiAgICBjb25zdCB7IGJhdGNoLCBmZXRjaE9wdGlvbnMsIGtleSA9ICJodHRwIiwgbmFtZSA9ICJIVFRQIEpTT04tUlBDIiwgb25GZXRjaFJlcXVlc3QsIG9uRmV0Y2hSZXNwb25zZSwgcmV0cnlEZWxheSB9ID0gY29uZmlnOwogICAgcmV0dXJuICh7IGNoYWluLCByZXRyeUNvdW50OiByZXRyeUNvdW50XywgdGltZW91dDogdGltZW91dF8gfSkgPT4gewogICAgICBjb25zdCB7IGJhdGNoU2l6ZSA9IDFlMywgd2FpdDogd2FpdDIgPSAwIH0gPSB0eXBlb2YgYmF0Y2ggPT09ICJvYmplY3QiID8gYmF0Y2ggOiB7fTsKICAgICAgY29uc3QgcmV0cnlDb3VudCA9IGNvbmZpZy5yZXRyeUNvdW50ID8/IHJldHJ5Q291bnRfOwogICAgICBjb25zdCB0aW1lb3V0ID0gdGltZW91dF8gPz8gY29uZmlnLnRpbWVvdXQgPz8gMWU0OwogICAgICBjb25zdCB1cmxfID0gdXJsIHx8IGNoYWluPy5ycGNVcmxzLmRlZmF1bHQuaHR0cFswXTsKICAgICAgaWYgKCF1cmxfKQogICAgICAgIHRocm93IG5ldyBVcmxSZXF1aXJlZEVycm9yKCk7CiAgICAgIGNvbnN0IHJwY0NsaWVudCA9IGdldEh0dHBScGNDbGllbnQodXJsXywgewogICAgICAgIGZldGNoT3B0aW9ucywKICAgICAgICBvblJlcXVlc3Q6IG9uRmV0Y2hSZXF1ZXN0LAogICAgICAgIG9uUmVzcG9uc2U6IG9uRmV0Y2hSZXNwb25zZSwKICAgICAgICB0aW1lb3V0CiAgICAgIH0pOwogICAgICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICAgICAgY29uc3QgYm9keSA9IHsgbWV0aG9kLCBwYXJhbXMgfTsKICAgICAgICAgIGNvbnN0IHsgc2NoZWR1bGUgfSA9IGNyZWF0ZUJhdGNoU2NoZWR1bGVyKHsKICAgICAgICAgICAgaWQ6IHVybF8sCiAgICAgICAgICAgIHdhaXQ6IHdhaXQyLAogICAgICAgICAgICBzaG91bGRTcGxpdEJhdGNoKHJlcXVlc3RzKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RzLmxlbmd0aCA+IGJhdGNoU2l6ZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZm46IChib2R5MikgPT4gcnBjQ2xpZW50LnJlcXVlc3QoewogICAgICAgICAgICAgIGJvZHk6IGJvZHkyCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBzb3J0OiAoYSwgYikgPT4gYS5pZCAtIGIuaWQKICAgICAgICAgIH0pOwogICAgICAgICAgY29uc3QgZm4gPSBhc3luYyAoYm9keTIpID0+IGJhdGNoID8gc2NoZWR1bGUoYm9keTIpIDogWwogICAgICAgICAgICBhd2FpdCBycGNDbGllbnQucmVxdWVzdCh7CiAgICAgICAgICAgICAgYm9keTogYm9keTIKICAgICAgICAgICAgfSkKICAgICAgICAgIF07CiAgICAgICAgICBjb25zdCBbeyBlcnJvciwgcmVzdWx0IH1dID0gYXdhaXQgZm4oYm9keSk7CiAgICAgICAgICBpZiAoZXJyb3IpCiAgICAgICAgICAgIHRocm93IG5ldyBScGNSZXF1ZXN0RXJyb3IoewogICAgICAgICAgICAgIGJvZHksCiAgICAgICAgICAgICAgZXJyb3IsCiAgICAgICAgICAgICAgdXJsOiB1cmxfCiAgICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9LAogICAgICAgIHJldHJ5Q291bnQsCiAgICAgICAgcmV0cnlEZWxheSwKICAgICAgICB0aW1lb3V0LAogICAgICAgIHR5cGU6ICJodHRwIgogICAgICB9LCB7CiAgICAgICAgZmV0Y2hPcHRpb25zLAogICAgICAgIHVybDogdXJsXwogICAgICB9KTsKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvZW5zL2dldEVuc0FkZHJlc3MuanMKICBpbml0X2FiaXMoKTsKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2dldENoYWluQ29udHJhY3RBZGRyZXNzKCk7CiAgaW5pdF90cmltKCk7CiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9lcnJvcnMuanMKICBpbml0X3NvbGlkaXR5KCk7CiAgaW5pdF9iYXNlKCk7CiAgaW5pdF9jb250cmFjdCgpOwogIGZ1bmN0aW9uIGlzTnVsbFVuaXZlcnNhbFJlc29sdmVyRXJyb3IoZXJyLCBjYWxsVHlwZSkgewogICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgQmFzZUVycm9yMikpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IGNhdXNlID0gZXJyLndhbGsoKGUpID0+IGUgaW5zdGFuY2VvZiBDb250cmFjdEZ1bmN0aW9uUmV2ZXJ0ZWRFcnJvcik7CiAgICBpZiAoIShjYXVzZSBpbnN0YW5jZW9mIENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKGNhdXNlLmRhdGE/LmVycm9yTmFtZSA9PT0gIlJlc29sdmVyTm90Rm91bmQiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChjYXVzZS5kYXRhPy5lcnJvck5hbWUgPT09ICJSZXNvbHZlcldpbGRjYXJkTm90U3VwcG9ydGVkIikKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoY2F1c2UuZGF0YT8uZXJyb3JOYW1lID09PSAiUmVzb2x2ZXJOb3RDb250cmFjdCIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKGNhdXNlLmRhdGE/LmVycm9yTmFtZSA9PT0gIlJlc29sdmVyRXJyb3IiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChjYXVzZS5kYXRhPy5lcnJvck5hbWUgPT09ICJIdHRwRXJyb3IiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChjYXVzZS5yZWFzb24/LmluY2x1ZGVzKCJXaWxkY2FyZCBvbiBub24tZXh0ZW5kZWQgcmVzb2x2ZXJzIGlzIG5vdCBzdXBwb3J0ZWQiKSkKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoY2FsbFR5cGUgPT09ICJyZXZlcnNlIiAmJiBjYXVzZS5yZWFzb24gPT09IHBhbmljUmVhc29uc1s1MF0pCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbnMvbmFtZWhhc2guanMKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X2tlY2NhazI1NigpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9lbmNvZGVkTGFiZWxUb0xhYmVsaGFzaC5qcwogIGluaXRfaXNIZXgoKTsKICBmdW5jdGlvbiBlbmNvZGVkTGFiZWxUb0xhYmVsaGFzaChsYWJlbCkgewogICAgaWYgKGxhYmVsLmxlbmd0aCAhPT0gNjYpCiAgICAgIHJldHVybiBudWxsOwogICAgaWYgKGxhYmVsLmluZGV4T2YoIlsiKSAhPT0gMCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBpZiAobGFiZWwuaW5kZXhPZigiXSIpICE9PSA2NSkKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCBoYXNoMyA9IGAweCR7bGFiZWwuc2xpY2UoMSwgNjUpfWA7CiAgICBpZiAoIWlzSGV4KGhhc2gzKSkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gaGFzaDM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9uYW1laGFzaC5qcwogIGZ1bmN0aW9uIG5hbWVoYXNoKG5hbWUpIHsKICAgIGxldCByZXN1bHQgPSBuZXcgVWludDhBcnJheSgzMikuZmlsbCgwKTsKICAgIGlmICghbmFtZSkKICAgICAgcmV0dXJuIGJ5dGVzVG9IZXgocmVzdWx0KTsKICAgIGNvbnN0IGxhYmVscyA9IG5hbWUuc3BsaXQoIi4iKTsKICAgIGZvciAobGV0IGkgPSBsYWJlbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHsKICAgICAgY29uc3QgaGFzaEZyb21FbmNvZGVkTGFiZWwgPSBlbmNvZGVkTGFiZWxUb0xhYmVsaGFzaChsYWJlbHNbaV0pOwogICAgICBjb25zdCBoYXNoZWQgPSBoYXNoRnJvbUVuY29kZWRMYWJlbCA/IHRvQnl0ZXMoaGFzaEZyb21FbmNvZGVkTGFiZWwpIDoga2VjY2FrMjU2KHN0cmluZ1RvQnl0ZXMobGFiZWxzW2ldKSwgImJ5dGVzIik7CiAgICAgIHJlc3VsdCA9IGtlY2NhazI1Nihjb25jYXQoW3Jlc3VsdCwgaGFzaGVkXSksICJieXRlcyIpOwogICAgfQogICAgcmV0dXJuIGJ5dGVzVG9IZXgocmVzdWx0KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5zL3BhY2tldFRvQnl0ZXMuanMKICBpbml0X3RvQnl0ZXMoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbnMvZW5jb2RlTGFiZWxoYXNoLmpzCiAgZnVuY3Rpb24gZW5jb2RlTGFiZWxoYXNoKGhhc2gzKSB7CiAgICByZXR1cm4gYFske2hhc2gzLnNsaWNlKDIpfV1gOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbnMvbGFiZWxoYXNoLmpzCiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGluaXRfa2VjY2FrMjU2KCk7CiAgZnVuY3Rpb24gbGFiZWxoYXNoKGxhYmVsKSB7CiAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheSgzMikuZmlsbCgwKTsKICAgIGlmICghbGFiZWwpCiAgICAgIHJldHVybiBieXRlc1RvSGV4KHJlc3VsdCk7CiAgICByZXR1cm4gZW5jb2RlZExhYmVsVG9MYWJlbGhhc2gobGFiZWwpIHx8IGtlY2NhazI1NihzdHJpbmdUb0J5dGVzKGxhYmVsKSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9wYWNrZXRUb0J5dGVzLmpzCiAgZnVuY3Rpb24gcGFja2V0VG9CeXRlcyhwYWNrZXQpIHsKICAgIGNvbnN0IHZhbHVlID0gcGFja2V0LnJlcGxhY2UoL15cLnxcLiQvZ20sICIiKTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgxKTsKICAgIGNvbnN0IGJ5dGVzMiA9IG5ldyBVaW50OEFycmF5KHN0cmluZ1RvQnl0ZXModmFsdWUpLmJ5dGVMZW5ndGggKyAyKTsKICAgIGxldCBvZmZzZXQgPSAwOwogICAgY29uc3QgbGlzdCA9IHZhbHVlLnNwbGl0KCIuIik7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgbGV0IGVuY29kZWQgPSBzdHJpbmdUb0J5dGVzKGxpc3RbaV0pOwogICAgICBpZiAoZW5jb2RlZC5ieXRlTGVuZ3RoID4gMjU1KQogICAgICAgIGVuY29kZWQgPSBzdHJpbmdUb0J5dGVzKGVuY29kZUxhYmVsaGFzaChsYWJlbGhhc2gobGlzdFtpXSkpKTsKICAgICAgYnl0ZXMyW29mZnNldF0gPSBlbmNvZGVkLmxlbmd0aDsKICAgICAgYnl0ZXMyLnNldChlbmNvZGVkLCBvZmZzZXQgKyAxKTsKICAgICAgb2Zmc2V0ICs9IGVuY29kZWQubGVuZ3RoICsgMTsKICAgIH0KICAgIGlmIChieXRlczIuYnl0ZUxlbmd0aCAhPT0gb2Zmc2V0ICsgMSkKICAgICAgcmV0dXJuIGJ5dGVzMi5zbGljZSgwLCBvZmZzZXQgKyAxKTsKICAgIHJldHVybiBieXRlczI7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvZW5zL2dldEVuc0FkZHJlc3MuanMKICBhc3luYyBmdW5jdGlvbiBnZXRFbnNBZGRyZXNzKGNsaWVudCwgeyBibG9ja051bWJlciwgYmxvY2tUYWcsIGNvaW5UeXBlLCBuYW1lLCBnYXRld2F5VXJscywgc3RyaWN0LCB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3M6IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc18gfSkgewogICAgbGV0IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyA9IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc187CiAgICBpZiAoIXVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcykgewogICAgICBpZiAoIWNsaWVudC5jaGFpbikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNsaWVudCBjaGFpbiBub3QgY29uZmlndXJlZC4gdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzIGlzIHJlcXVpcmVkLiIpOwogICAgICB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgPSBnZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyh7CiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgY2hhaW46IGNsaWVudC5jaGFpbiwKICAgICAgICBjb250cmFjdDogImVuc1VuaXZlcnNhbFJlc29sdmVyIgogICAgICB9KTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IGZ1bmN0aW9uRGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7CiAgICAgICAgYWJpOiBhZGRyZXNzUmVzb2x2ZXJBYmksCiAgICAgICAgZnVuY3Rpb25OYW1lOiAiYWRkciIsCiAgICAgICAgLi4uY29pblR5cGUgIT0gbnVsbCA/IHsgYXJnczogW25hbWVoYXNoKG5hbWUpLCBCaWdJbnQoY29pblR5cGUpXSB9IDogeyBhcmdzOiBbbmFtZWhhc2gobmFtZSldIH0KICAgICAgfSk7CiAgICAgIGNvbnN0IHJlYWRDb250cmFjdFBhcmFtZXRlcnMgPSB7CiAgICAgICAgYWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzLAogICAgICAgIGFiaTogdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpLAogICAgICAgIGZ1bmN0aW9uTmFtZTogInJlc29sdmUiLAogICAgICAgIGFyZ3M6IFt0b0hleChwYWNrZXRUb0J5dGVzKG5hbWUpKSwgZnVuY3Rpb25EYXRhXSwKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBibG9ja1RhZwogICAgICB9OwogICAgICBjb25zdCByZWFkQ29udHJhY3RBY3Rpb24gPSBnZXRBY3Rpb24oY2xpZW50LCByZWFkQ29udHJhY3QsICJyZWFkQ29udHJhY3QiKTsKICAgICAgY29uc3QgcmVzID0gZ2F0ZXdheVVybHMgPyBhd2FpdCByZWFkQ29udHJhY3RBY3Rpb24oewogICAgICAgIC4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMsCiAgICAgICAgYXJnczogWy4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMuYXJncywgZ2F0ZXdheVVybHNdCiAgICAgIH0pIDogYXdhaXQgcmVhZENvbnRyYWN0QWN0aW9uKHJlYWRDb250cmFjdFBhcmFtZXRlcnMpOwogICAgICBpZiAocmVzWzBdID09PSAiMHgiKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCBhZGRyZXNzID0gZGVjb2RlRnVuY3Rpb25SZXN1bHQoewogICAgICAgIGFiaTogYWRkcmVzc1Jlc29sdmVyQWJpLAogICAgICAgIGFyZ3M6IGNvaW5UeXBlICE9IG51bGwgPyBbbmFtZWhhc2gobmFtZSksIEJpZ0ludChjb2luVHlwZSldIDogdm9pZCAwLAogICAgICAgIGZ1bmN0aW9uTmFtZTogImFkZHIiLAogICAgICAgIGRhdGE6IHJlc1swXQogICAgICB9KTsKICAgICAgaWYgKGFkZHJlc3MgPT09ICIweCIpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGlmICh0cmltKGFkZHJlc3MpID09PSAiMHgwMCIpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBhZGRyZXNzOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGlmIChzdHJpY3QpCiAgICAgICAgdGhyb3cgZXJyOwogICAgICBpZiAoaXNOdWxsVW5pdmVyc2FsUmVzb2x2ZXJFcnJvcihlcnIsICJyZXNvbHZlIikpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHRocm93IGVycjsKICAgIH0KICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2Vucy5qcwogIGluaXRfYmFzZSgpOwogIHZhciBFbnNBdmF0YXJJbnZhbGlkTWV0YWRhdGFFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGRhdGEgfSkgewogICAgICBzdXBlcigiVW5hYmxlIHRvIGV4dHJhY3QgaW1hZ2UgZnJvbSBtZXRhZGF0YS4gVGhlIG1ldGFkYXRhIG1heSBiZSBtYWxmb3JtZWQgb3IgaW52YWxpZC4iLCB7CiAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAiLSBNZXRhZGF0YSBtdXN0IGJlIGEgSlNPTiBvYmplY3Qgd2l0aCBhdCBsZWFzdCBhbiBgaW1hZ2VgLCBgaW1hZ2VfdXJsYCBvciBgaW1hZ2VfZGF0YWAgcHJvcGVydHkuIiwKICAgICAgICAgICIiLAogICAgICAgICAgYFByb3ZpZGVkIGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YAogICAgICAgIF0sCiAgICAgICAgbmFtZTogIkVuc0F2YXRhckludmFsaWRNZXRhZGF0YUVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwogIHZhciBFbnNBdmF0YXJJbnZhbGlkTmZ0VXJpRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyByZWFzb24gfSkgewogICAgICBzdXBlcihgRU5TIE5GVCBhdmF0YXIgVVJJIGlzIGludmFsaWQuICR7cmVhc29ufWAsIHsKICAgICAgICBuYW1lOiAiRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwogIHZhciBFbnNBdmF0YXJVcmlSZXNvbHV0aW9uRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyB1cmkgfSkgewogICAgICBzdXBlcihgVW5hYmxlIHRvIHJlc29sdmUgRU5TIGF2YXRhciBVUkkgIiR7dXJpfSIuIFRoZSBVUkkgbWF5IGJlIG1hbGZvcm1lZCwgaW52YWxpZCwgb3IgZG9lcyBub3QgcmVzcG9uZCB3aXRoIGEgdmFsaWQgaW1hZ2UuYCwgeyBuYW1lOiAiRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yIiB9KTsKICAgIH0KICB9OwogIHZhciBFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgbmFtZXNwYWNlIH0pIHsKICAgICAgc3VwZXIoYEVOUyBORlQgYXZhdGFyIG5hbWVzcGFjZSAiJHtuYW1lc3BhY2V9IiBpcyBub3Qgc3VwcG9ydGVkLiBNdXN0IGJlICJlcmM3MjEiIG9yICJlcmMxMTU1Ii5gLCB7IG5hbWU6ICJFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yIiB9KTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9hdmF0YXIvdXRpbHMuanMKICB2YXIgbmV0d29ya1JlZ2V4ID0gLyg/PHByb3RvY29sPmh0dHBzPzpcL1wvW15cL10qfGlwZnM6XC98aXBuczpcL3xhcjpcLyk/KD88cm9vdD5cLyk/KD88c3VicGF0aD5pcGZzXC98aXBuc1wvKT8oPzx0YXJnZXQ+W1x3XC0uXSspKD88c3VidGFyZ2V0PlwvLiopPy87CiAgdmFyIGlwZnNIYXNoUmVnZXggPSAvXihRbVsxLTlBLUhKLU5QLVphLWttLXpdezQ0LH18YltBLVphLXoyLTddezU4LH18QltBLVoyLTddezU4LH18elsxLTlBLUhKLU5QLVphLWttLXpdezQ4LH18RlswLTlBLUZdezUwLH0pKFwvKD88dGFyZ2V0Pltcd1wtLl0rKSk/KD88c3VidGFyZ2V0PlwvLiopPyQvOwogIHZhciBiYXNlNjRSZWdleCA9IC9eZGF0YTooW2EtekEtWlwtLytdKik7YmFzZTY0LChbXiJdLiopLzsKICB2YXIgZGF0YVVSSVJlZ2V4ID0gL15kYXRhOihbYS16QS1aXC0vK10qKT8oO1thLXpBLVowLTldLio/KT8oLCkvOwogIGFzeW5jIGZ1bmN0aW9uIGlzSW1hZ2VVcmkodXJpKSB7CiAgICB0cnkgewogICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmksIHsgbWV0aG9kOiAiSEVBRCIgfSk7CiAgICAgIGlmIChyZXMuc3RhdHVzID09PSAyMDApIHsKICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIik7CiAgICAgICAgcmV0dXJuIGNvbnRlbnRUeXBlPy5zdGFydHNXaXRoKCJpbWFnZS8iKTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBpZiAodHlwZW9mIGVycm9yID09PSAib2JqZWN0IiAmJiB0eXBlb2YgZXJyb3IucmVzcG9uc2UgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmICghZ2xvYmFsVGhpcy5oYXNPd25Qcm9wZXJ0eSgiSW1hZ2UiKSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpOwogICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7CiAgICAgICAgICByZXNvbHZlKHRydWUpOwogICAgICAgIH07CiAgICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiB7CiAgICAgICAgICByZXNvbHZlKGZhbHNlKTsKICAgICAgICB9OwogICAgICAgIGltZy5zcmMgPSB1cmk7CiAgICAgIH0pOwogICAgfQogIH0KICBmdW5jdGlvbiBnZXRHYXRld2F5KGN1c3RvbTIsIGRlZmF1bHRHYXRld2F5KSB7CiAgICBpZiAoIWN1c3RvbTIpCiAgICAgIHJldHVybiBkZWZhdWx0R2F0ZXdheTsKICAgIGlmIChjdXN0b20yLmVuZHNXaXRoKCIvIikpCiAgICAgIHJldHVybiBjdXN0b20yLnNsaWNlKDAsIC0xKTsKICAgIHJldHVybiBjdXN0b20yOwogIH0KICBmdW5jdGlvbiByZXNvbHZlQXZhdGFyVXJpKHsgdXJpLCBnYXRld2F5VXJscyB9KSB7CiAgICBjb25zdCBpc0VuY29kZWQgPSBiYXNlNjRSZWdleC50ZXN0KHVyaSk7CiAgICBpZiAoaXNFbmNvZGVkKQogICAgICByZXR1cm4geyB1cmksIGlzT25DaGFpbjogdHJ1ZSwgaXNFbmNvZGVkIH07CiAgICBjb25zdCBpcGZzR2F0ZXdheSA9IGdldEdhdGV3YXkoZ2F0ZXdheVVybHM/LmlwZnMsICJodHRwczovL2lwZnMuaW8iKTsKICAgIGNvbnN0IGFyd2VhdmVHYXRld2F5ID0gZ2V0R2F0ZXdheShnYXRld2F5VXJscz8uYXJ3ZWF2ZSwgImh0dHBzOi8vYXJ3ZWF2ZS5uZXQiKTsKICAgIGNvbnN0IG5ldHdvcmtSZWdleE1hdGNoID0gdXJpLm1hdGNoKG5ldHdvcmtSZWdleCk7CiAgICBjb25zdCB7IHByb3RvY29sLCBzdWJwYXRoLCB0YXJnZXQsIHN1YnRhcmdldCA9ICIiIH0gPSBuZXR3b3JrUmVnZXhNYXRjaD8uZ3JvdXBzIHx8IHt9OwogICAgY29uc3QgaXNJUE5TID0gcHJvdG9jb2wgPT09ICJpcG5zOi8iIHx8IHN1YnBhdGggPT09ICJpcG5zLyI7CiAgICBjb25zdCBpc0lQRlMgPSBwcm90b2NvbCA9PT0gImlwZnM6LyIgfHwgc3VicGF0aCA9PT0gImlwZnMvIiB8fCBpcGZzSGFzaFJlZ2V4LnRlc3QodXJpKTsKICAgIGlmICh1cmkuc3RhcnRzV2l0aCgiaHR0cCIpICYmICFpc0lQTlMgJiYgIWlzSVBGUykgewogICAgICBsZXQgcmVwbGFjZWRVcmkgPSB1cmk7CiAgICAgIGlmIChnYXRld2F5VXJscz8uYXJ3ZWF2ZSkKICAgICAgICByZXBsYWNlZFVyaSA9IHVyaS5yZXBsYWNlKC9odHRwczpcL1wvYXJ3ZWF2ZS5uZXQvZywgZ2F0ZXdheVVybHM/LmFyd2VhdmUpOwogICAgICByZXR1cm4geyB1cmk6IHJlcGxhY2VkVXJpLCBpc09uQ2hhaW46IGZhbHNlLCBpc0VuY29kZWQ6IGZhbHNlIH07CiAgICB9CiAgICBpZiAoKGlzSVBOUyB8fCBpc0lQRlMpICYmIHRhcmdldCkgewogICAgICByZXR1cm4gewogICAgICAgIHVyaTogYCR7aXBmc0dhdGV3YXl9LyR7aXNJUE5TID8gImlwbnMiIDogImlwZnMifS8ke3RhcmdldH0ke3N1YnRhcmdldH1gLAogICAgICAgIGlzT25DaGFpbjogZmFsc2UsCiAgICAgICAgaXNFbmNvZGVkOiBmYWxzZQogICAgICB9OwogICAgfQogICAgaWYgKHByb3RvY29sID09PSAiYXI6LyIgJiYgdGFyZ2V0KSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdXJpOiBgJHthcndlYXZlR2F0ZXdheX0vJHt0YXJnZXR9JHtzdWJ0YXJnZXQgfHwgIiJ9YCwKICAgICAgICBpc09uQ2hhaW46IGZhbHNlLAogICAgICAgIGlzRW5jb2RlZDogZmFsc2UKICAgICAgfTsKICAgIH0KICAgIGxldCBwYXJzZWRVcmkgPSB1cmkucmVwbGFjZShkYXRhVVJJUmVnZXgsICIiKTsKICAgIGlmIChwYXJzZWRVcmkuc3RhcnRzV2l0aCgiPHN2ZyIpKSB7CiAgICAgIHBhcnNlZFVyaSA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7YnRvYShwYXJzZWRVcmkpfWA7CiAgICB9CiAgICBpZiAocGFyc2VkVXJpLnN0YXJ0c1dpdGgoImRhdGE6IikgfHwgcGFyc2VkVXJpLnN0YXJ0c1dpdGgoInsiKSkgewogICAgICByZXR1cm4gewogICAgICAgIHVyaTogcGFyc2VkVXJpLAogICAgICAgIGlzT25DaGFpbjogdHJ1ZSwKICAgICAgICBpc0VuY29kZWQ6IGZhbHNlCiAgICAgIH07CiAgICB9CiAgICB0aHJvdyBuZXcgRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yKHsgdXJpIH0pOwogIH0KICBmdW5jdGlvbiBnZXRKc29uSW1hZ2UoZGF0YSkgewogICAgaWYgKHR5cGVvZiBkYXRhICE9PSAib2JqZWN0IiB8fCAhKCJpbWFnZSIgaW4gZGF0YSkgJiYgISgiaW1hZ2VfdXJsIiBpbiBkYXRhKSAmJiAhKCJpbWFnZV9kYXRhIiBpbiBkYXRhKSkgewogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE1ldGFkYXRhRXJyb3IoeyBkYXRhIH0pOwogICAgfQogICAgcmV0dXJuIGRhdGEuaW1hZ2UgfHwgZGF0YS5pbWFnZV91cmwgfHwgZGF0YS5pbWFnZV9kYXRhOwogIH0KICBhc3luYyBmdW5jdGlvbiBnZXRNZXRhZGF0YUF2YXRhclVyaSh7IGdhdGV3YXlVcmxzLCB1cmkgfSkgewogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJpKS50aGVuKChyZXMyKSA9PiByZXMyLmpzb24oKSk7CiAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgcGFyc2VBdmF0YXJVcmkoewogICAgICAgIGdhdGV3YXlVcmxzLAogICAgICAgIHVyaTogZ2V0SnNvbkltYWdlKHJlcykKICAgICAgfSk7CiAgICAgIHJldHVybiBpbWFnZTsKICAgIH0gY2F0Y2ggewogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yKHsgdXJpIH0pOwogICAgfQogIH0KICBhc3luYyBmdW5jdGlvbiBwYXJzZUF2YXRhclVyaSh7IGdhdGV3YXlVcmxzLCB1cmkgfSkgewogICAgY29uc3QgeyB1cmk6IHJlc29sdmVkVVJJLCBpc09uQ2hhaW4gfSA9IHJlc29sdmVBdmF0YXJVcmkoeyB1cmksIGdhdGV3YXlVcmxzIH0pOwogICAgaWYgKGlzT25DaGFpbikKICAgICAgcmV0dXJuIHJlc29sdmVkVVJJOwogICAgY29uc3QgaXNJbWFnZSA9IGF3YWl0IGlzSW1hZ2VVcmkocmVzb2x2ZWRVUkkpOwogICAgaWYgKGlzSW1hZ2UpCiAgICAgIHJldHVybiByZXNvbHZlZFVSSTsKICAgIHRocm93IG5ldyBFbnNBdmF0YXJVcmlSZXNvbHV0aW9uRXJyb3IoeyB1cmkgfSk7CiAgfQogIGZ1bmN0aW9uIHBhcnNlTmZ0VXJpKHVyaV8pIHsKICAgIGxldCB1cmkgPSB1cmlfOwogICAgaWYgKHVyaS5zdGFydHNXaXRoKCJkaWQ6bmZ0OiIpKSB7CiAgICAgIHVyaSA9IHVyaS5yZXBsYWNlKCJkaWQ6bmZ0OiIsICIiKS5yZXBsYWNlKC9fL2csICIvIik7CiAgICB9CiAgICBjb25zdCBbcmVmZXJlbmNlLCBhc3NldF9uYW1lc3BhY2UsIHRva2VuSURdID0gdXJpLnNwbGl0KCIvIik7CiAgICBjb25zdCBbZWlwX25hbWVzcGFjZSwgY2hhaW5JRF0gPSByZWZlcmVuY2Uuc3BsaXQoIjoiKTsKICAgIGNvbnN0IFtlcmNfbmFtZXNwYWNlLCBjb250cmFjdEFkZHJlc3NdID0gYXNzZXRfbmFtZXNwYWNlLnNwbGl0KCI6Iik7CiAgICBpZiAoIWVpcF9uYW1lc3BhY2UgfHwgZWlwX25hbWVzcGFjZS50b0xvd2VyQ2FzZSgpICE9PSAiZWlwMTU1IikKICAgICAgdGhyb3cgbmV3IEVuc0F2YXRhckludmFsaWROZnRVcmlFcnJvcih7IHJlYXNvbjogIk9ubHkgRUlQLTE1NSBzdXBwb3J0ZWQiIH0pOwogICAgaWYgKCFjaGFpbklEKQogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yKHsgcmVhc29uOiAiQ2hhaW4gSUQgbm90IGZvdW5kIiB9KTsKICAgIGlmICghY29udHJhY3RBZGRyZXNzKQogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yKHsKICAgICAgICByZWFzb246ICJDb250cmFjdCBhZGRyZXNzIG5vdCBmb3VuZCIKICAgICAgfSk7CiAgICBpZiAoIXRva2VuSUQpCiAgICAgIHRocm93IG5ldyBFbnNBdmF0YXJJbnZhbGlkTmZ0VXJpRXJyb3IoeyByZWFzb246ICJUb2tlbiBJRCBub3QgZm91bmQiIH0pOwogICAgaWYgKCFlcmNfbmFtZXNwYWNlKQogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yKHsgcmVhc29uOiAiRVJDIG5hbWVzcGFjZSBub3QgZm91bmQiIH0pOwogICAgcmV0dXJuIHsKICAgICAgY2hhaW5JRDogTnVtYmVyLnBhcnNlSW50KGNoYWluSUQpLAogICAgICBuYW1lc3BhY2U6IGVyY19uYW1lc3BhY2UudG9Mb3dlckNhc2UoKSwKICAgICAgY29udHJhY3RBZGRyZXNzLAogICAgICB0b2tlbklECiAgICB9OwogIH0KICBhc3luYyBmdW5jdGlvbiBnZXROZnRUb2tlblVyaShjbGllbnQsIHsgbmZ0IH0pIHsKICAgIGlmIChuZnQubmFtZXNwYWNlID09PSAiZXJjNzIxIikgewogICAgICByZXR1cm4gcmVhZENvbnRyYWN0KGNsaWVudCwgewogICAgICAgIGFkZHJlc3M6IG5mdC5jb250cmFjdEFkZHJlc3MsCiAgICAgICAgYWJpOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJ0b2tlblVSSSIsCiAgICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgICBpbnB1dHM6IFt7IG5hbWU6ICJ0b2tlbklkIiwgdHlwZTogInVpbnQyNTYiIH1dLAogICAgICAgICAgICBvdXRwdXRzOiBbeyBuYW1lOiAiIiwgdHlwZTogInN0cmluZyIgfV0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIGZ1bmN0aW9uTmFtZTogInRva2VuVVJJIiwKICAgICAgICBhcmdzOiBbQmlnSW50KG5mdC50b2tlbklEKV0KICAgICAgfSk7CiAgICB9CiAgICBpZiAobmZ0Lm5hbWVzcGFjZSA9PT0gImVyYzExNTUiKSB7CiAgICAgIHJldHVybiByZWFkQ29udHJhY3QoY2xpZW50LCB7CiAgICAgICAgYWRkcmVzczogbmZ0LmNvbnRyYWN0QWRkcmVzcywKICAgICAgICBhYmk6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogInVyaSIsCiAgICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgICBpbnB1dHM6IFt7IG5hbWU6ICJfaWQiLCB0eXBlOiAidWludDI1NiIgfV0sCiAgICAgICAgICAgIG91dHB1dHM6IFt7IG5hbWU6ICIiLCB0eXBlOiAic3RyaW5nIiB9XQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgZnVuY3Rpb25OYW1lOiAidXJpIiwKICAgICAgICBhcmdzOiBbQmlnSW50KG5mdC50b2tlbklEKV0KICAgICAgfSk7CiAgICB9CiAgICB0aHJvdyBuZXcgRW5zQXZhdGFyVW5zdXBwb3J0ZWROYW1lc3BhY2VFcnJvcih7IG5hbWVzcGFjZTogbmZ0Lm5hbWVzcGFjZSB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5zL2F2YXRhci9wYXJzZUF2YXRhclJlY29yZC5qcwogIGFzeW5jIGZ1bmN0aW9uIHBhcnNlQXZhdGFyUmVjb3JkKGNsaWVudCwgeyBnYXRld2F5VXJscywgcmVjb3JkIH0pIHsKICAgIGlmICgvZWlwMTU1Oi9pLnRlc3QocmVjb3JkKSkKICAgICAgcmV0dXJuIHBhcnNlTmZ0QXZhdGFyVXJpKGNsaWVudCwgeyBnYXRld2F5VXJscywgcmVjb3JkIH0pOwogICAgcmV0dXJuIHBhcnNlQXZhdGFyVXJpKHsgdXJpOiByZWNvcmQsIGdhdGV3YXlVcmxzIH0pOwogIH0KICBhc3luYyBmdW5jdGlvbiBwYXJzZU5mdEF2YXRhclVyaShjbGllbnQsIHsgZ2F0ZXdheVVybHMsIHJlY29yZCB9KSB7CiAgICBjb25zdCBuZnQgPSBwYXJzZU5mdFVyaShyZWNvcmQpOwogICAgY29uc3QgbmZ0VXJpID0gYXdhaXQgZ2V0TmZ0VG9rZW5VcmkoY2xpZW50LCB7IG5mdCB9KTsKICAgIGNvbnN0IHsgdXJpOiByZXNvbHZlZE5mdFVyaSwgaXNPbkNoYWluLCBpc0VuY29kZWQgfSA9IHJlc29sdmVBdmF0YXJVcmkoeyB1cmk6IG5mdFVyaSwgZ2F0ZXdheVVybHMgfSk7CiAgICBpZiAoaXNPbkNoYWluICYmIChyZXNvbHZlZE5mdFVyaS5pbmNsdWRlcygiZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwiKSB8fCByZXNvbHZlZE5mdFVyaS5zdGFydHNXaXRoKCJ7IikpKSB7CiAgICAgIGNvbnN0IGVuY29kZWRKc29uID0gaXNFbmNvZGVkID8gKAogICAgICAgIC8vIGlmIGl0IGlzIGVuY29kZWQsIGRlY29kZSBpdAogICAgICAgIGF0b2IocmVzb2x2ZWROZnRVcmkucmVwbGFjZSgiZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwiLCAiIikpCiAgICAgICkgOiAoCiAgICAgICAgLy8gaWYgaXQgaXNuJ3QgZW5jb2RlZCBhc3N1bWUgaXQgaXMgYSBKU09OIHN0cmluZywgYnV0IGl0IGNvdWxkIGJlIGFueXRoaW5nIChpdCB3aWxsIGVycm9yIGlmIGl0IGlzKQogICAgICAgIHJlc29sdmVkTmZ0VXJpCiAgICAgICk7CiAgICAgIGNvbnN0IGRlY29kZWQgPSBKU09OLnBhcnNlKGVuY29kZWRKc29uKTsKICAgICAgcmV0dXJuIHBhcnNlQXZhdGFyVXJpKHsgdXJpOiBnZXRKc29uSW1hZ2UoZGVjb2RlZCksIGdhdGV3YXlVcmxzIH0pOwogICAgfQogICAgbGV0IHVyaVRva2VuSWQgPSBuZnQudG9rZW5JRDsKICAgIGlmIChuZnQubmFtZXNwYWNlID09PSAiZXJjMTE1NSIpCiAgICAgIHVyaVRva2VuSWQgPSB1cmlUb2tlbklkLnJlcGxhY2UoIjB4IiwgIiIpLnBhZFN0YXJ0KDY0LCAiMCIpOwogICAgcmV0dXJuIGdldE1ldGFkYXRhQXZhdGFyVXJpKHsKICAgICAgZ2F0ZXdheVVybHMsCiAgICAgIHVyaTogcmVzb2x2ZWROZnRVcmkucmVwbGFjZSgvKD86MHgpP3tpZH0vLCB1cmlUb2tlbklkKQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvZW5zL2dldEVuc1RleHQuanMKICBpbml0X2FiaXMoKTsKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2dldENoYWluQ29udHJhY3RBZGRyZXNzKCk7CiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldEVuc1RleHQoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZywgbmFtZSwga2V5LCBnYXRld2F5VXJscywgc3RyaWN0LCB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3M6IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc18gfSkgewogICAgbGV0IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyA9IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc187CiAgICBpZiAoIXVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcykgewogICAgICBpZiAoIWNsaWVudC5jaGFpbikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNsaWVudCBjaGFpbiBub3QgY29uZmlndXJlZC4gdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzIGlzIHJlcXVpcmVkLiIpOwogICAgICB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgPSBnZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyh7CiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgY2hhaW46IGNsaWVudC5jaGFpbiwKICAgICAgICBjb250cmFjdDogImVuc1VuaXZlcnNhbFJlc29sdmVyIgogICAgICB9KTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlYWRDb250cmFjdFBhcmFtZXRlcnMgPSB7CiAgICAgICAgYWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzLAogICAgICAgIGFiaTogdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpLAogICAgICAgIGZ1bmN0aW9uTmFtZTogInJlc29sdmUiLAogICAgICAgIGFyZ3M6IFsKICAgICAgICAgIHRvSGV4KHBhY2tldFRvQnl0ZXMobmFtZSkpLAogICAgICAgICAgZW5jb2RlRnVuY3Rpb25EYXRhKHsKICAgICAgICAgICAgYWJpOiB0ZXh0UmVzb2x2ZXJBYmksCiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogInRleHQiLAogICAgICAgICAgICBhcmdzOiBbbmFtZWhhc2gobmFtZSksIGtleV0KICAgICAgICAgIH0pCiAgICAgICAgXSwKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBibG9ja1RhZwogICAgICB9OwogICAgICBjb25zdCByZWFkQ29udHJhY3RBY3Rpb24gPSBnZXRBY3Rpb24oY2xpZW50LCByZWFkQ29udHJhY3QsICJyZWFkQ29udHJhY3QiKTsKICAgICAgY29uc3QgcmVzID0gZ2F0ZXdheVVybHMgPyBhd2FpdCByZWFkQ29udHJhY3RBY3Rpb24oewogICAgICAgIC4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMsCiAgICAgICAgYXJnczogWy4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMuYXJncywgZ2F0ZXdheVVybHNdCiAgICAgIH0pIDogYXdhaXQgcmVhZENvbnRyYWN0QWN0aW9uKHJlYWRDb250cmFjdFBhcmFtZXRlcnMpOwogICAgICBpZiAocmVzWzBdID09PSAiMHgiKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCByZWNvcmQgPSBkZWNvZGVGdW5jdGlvblJlc3VsdCh7CiAgICAgICAgYWJpOiB0ZXh0UmVzb2x2ZXJBYmksCiAgICAgICAgZnVuY3Rpb25OYW1lOiAidGV4dCIsCiAgICAgICAgZGF0YTogcmVzWzBdCiAgICAgIH0pOwogICAgICByZXR1cm4gcmVjb3JkID09PSAiIiA/IG51bGwgOiByZWNvcmQ7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgaWYgKHN0cmljdCkKICAgICAgICB0aHJvdyBlcnI7CiAgICAgIGlmIChpc051bGxVbml2ZXJzYWxSZXNvbHZlckVycm9yKGVyciwgInJlc29sdmUiKSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgdGhyb3cgZXJyOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2Vucy9nZXRFbnNBdmF0YXIuanMKICBhc3luYyBmdW5jdGlvbiBnZXRFbnNBdmF0YXIoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZywgYXNzZXRHYXRld2F5VXJscywgbmFtZSwgZ2F0ZXdheVVybHMsIHN0cmljdCwgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzIH0pIHsKICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEVuc1RleHQsICJnZXRFbnNUZXh0IikoewogICAgICBibG9ja051bWJlciwKICAgICAgYmxvY2tUYWcsCiAgICAgIGtleTogImF2YXRhciIsCiAgICAgIG5hbWUsCiAgICAgIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcywKICAgICAgZ2F0ZXdheVVybHMsCiAgICAgIHN0cmljdAogICAgfSk7CiAgICBpZiAoIXJlY29yZCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB0cnkgewogICAgICByZXR1cm4gYXdhaXQgcGFyc2VBdmF0YXJSZWNvcmQoY2xpZW50LCB7CiAgICAgICAgcmVjb3JkLAogICAgICAgIGdhdGV3YXlVcmxzOiBhc3NldEdhdGV3YXlVcmxzCiAgICAgIH0pOwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2Vucy9nZXRFbnNOYW1lLmpzCiAgaW5pdF9hYmlzKCk7CiAgaW5pdF9nZXRDaGFpbkNvbnRyYWN0QWRkcmVzcygpOwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRFbnNOYW1lKGNsaWVudCwgeyBhZGRyZXNzLCBibG9ja051bWJlciwgYmxvY2tUYWcsIGdhdGV3YXlVcmxzLCBzdHJpY3QsIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzXyB9KSB7CiAgICBsZXQgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzID0gdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzXzsKICAgIGlmICghdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzKSB7CiAgICAgIGlmICghY2xpZW50LmNoYWluKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiY2xpZW50IGNoYWluIG5vdCBjb25maWd1cmVkLiB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgaXMgcmVxdWlyZWQuIik7CiAgICAgIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyA9IGdldENoYWluQ29udHJhY3RBZGRyZXNzKHsKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBjaGFpbjogY2xpZW50LmNoYWluLAogICAgICAgIGNvbnRyYWN0OiAiZW5zVW5pdmVyc2FsUmVzb2x2ZXIiCiAgICAgIH0pOwogICAgfQogICAgY29uc3QgcmV2ZXJzZU5vZGUgPSBgJHthZGRyZXNzLnRvTG93ZXJDYXNlKCkuc3Vic3RyaW5nKDIpfS5hZGRyLnJldmVyc2VgOwogICAgdHJ5IHsKICAgICAgY29uc3QgcmVhZENvbnRyYWN0UGFyYW1ldGVycyA9IHsKICAgICAgICBhZGRyZXNzOiB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MsCiAgICAgICAgYWJpOiB1bml2ZXJzYWxSZXNvbHZlclJldmVyc2VBYmksCiAgICAgICAgZnVuY3Rpb25OYW1lOiAicmV2ZXJzZSIsCiAgICAgICAgYXJnczogW3RvSGV4KHBhY2tldFRvQnl0ZXMocmV2ZXJzZU5vZGUpKV0sCiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgYmxvY2tUYWcKICAgICAgfTsKICAgICAgY29uc3QgcmVhZENvbnRyYWN0QWN0aW9uID0gZ2V0QWN0aW9uKGNsaWVudCwgcmVhZENvbnRyYWN0LCAicmVhZENvbnRyYWN0Iik7CiAgICAgIGNvbnN0IFtuYW1lLCByZXNvbHZlZEFkZHJlc3NdID0gZ2F0ZXdheVVybHMgPyBhd2FpdCByZWFkQ29udHJhY3RBY3Rpb24oewogICAgICAgIC4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMsCiAgICAgICAgYXJnczogWy4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMuYXJncywgZ2F0ZXdheVVybHNdCiAgICAgIH0pIDogYXdhaXQgcmVhZENvbnRyYWN0QWN0aW9uKHJlYWRDb250cmFjdFBhcmFtZXRlcnMpOwogICAgICBpZiAoYWRkcmVzcy50b0xvd2VyQ2FzZSgpICE9PSByZXNvbHZlZEFkZHJlc3MudG9Mb3dlckNhc2UoKSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIG5hbWU7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgaWYgKHN0cmljdCkKICAgICAgICB0aHJvdyBlcnI7CiAgICAgIGlmIChpc051bGxVbml2ZXJzYWxSZXNvbHZlckVycm9yKGVyciwgInJldmVyc2UiKSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgdGhyb3cgZXJyOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2Vucy9nZXRFbnNSZXNvbHZlci5qcwogIGluaXRfZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0RW5zUmVzb2x2ZXIoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZywgbmFtZSwgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzOiB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3NfIH0pIHsKICAgIGxldCB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgPSB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3NfOwogICAgaWYgKCF1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MpIHsKICAgICAgaWYgKCFjbGllbnQuY2hhaW4pCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJjbGllbnQgY2hhaW4gbm90IGNvbmZpZ3VyZWQuIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyBpcyByZXF1aXJlZC4iKTsKICAgICAgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzID0gZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoewogICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgIGNoYWluOiBjbGllbnQuY2hhaW4sCiAgICAgICAgY29udHJhY3Q6ICJlbnNVbml2ZXJzYWxSZXNvbHZlciIKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBbcmVzb2x2ZXJBZGRyZXNzXSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHJlYWRDb250cmFjdCwgInJlYWRDb250cmFjdCIpKHsKICAgICAgYWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzLAogICAgICBhYmk6IFsKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFt7IHR5cGU6ICJieXRlcyIgfV0sCiAgICAgICAgICBuYW1lOiAiZmluZFJlc29sdmVyIiwKICAgICAgICAgIG91dHB1dHM6IFt7IHR5cGU6ICJhZGRyZXNzIiB9LCB7IHR5cGU6ICJieXRlczMyIiB9XSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0KICAgICAgXSwKICAgICAgZnVuY3Rpb25OYW1lOiAiZmluZFJlc29sdmVyIiwKICAgICAgYXJnczogW3RvSGV4KHBhY2tldFRvQnl0ZXMobmFtZSkpXSwKICAgICAgYmxvY2tOdW1iZXIsCiAgICAgIGJsb2NrVGFnCiAgICB9KTsKICAgIHJldHVybiByZXNvbHZlckFkZHJlc3M7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvZGVjb3JhdG9ycy9wdWJsaWMuanMKICBpbml0X2NhbGwoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9jcmVhdGVCbG9ja0ZpbHRlci5qcwogIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJsb2NrRmlsdGVyKGNsaWVudCkgewogICAgY29uc3QgZ2V0UmVxdWVzdCA9IGNyZWF0ZUZpbHRlclJlcXVlc3RTY29wZShjbGllbnQsIHsKICAgICAgbWV0aG9kOiAiZXRoX25ld0Jsb2NrRmlsdGVyIgogICAgfSk7CiAgICBjb25zdCBpZCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX25ld0Jsb2NrRmlsdGVyIgogICAgfSk7CiAgICByZXR1cm4geyBpZCwgcmVxdWVzdDogZ2V0UmVxdWVzdChpZCksIHR5cGU6ICJibG9jayIgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvY3JlYXRlRXZlbnRGaWx0ZXIuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRXZlbnRGaWx0ZXIoY2xpZW50LCB7IGFkZHJlc3MsIGFyZ3MsIGV2ZW50LCBldmVudHM6IGV2ZW50c18sIGZyb21CbG9jaywgc3RyaWN0LCB0b0Jsb2NrIH0gPSB7fSkgewogICAgY29uc3QgZXZlbnRzID0gZXZlbnRzXyA/PyAoZXZlbnQgPyBbZXZlbnRdIDogdm9pZCAwKTsKICAgIGNvbnN0IGdldFJlcXVlc3QgPSBjcmVhdGVGaWx0ZXJSZXF1ZXN0U2NvcGUoY2xpZW50LCB7CiAgICAgIG1ldGhvZDogImV0aF9uZXdGaWx0ZXIiCiAgICB9KTsKICAgIGxldCB0b3BpY3MgPSBbXTsKICAgIGlmIChldmVudHMpIHsKICAgICAgY29uc3QgZW5jb2RlZCA9IGV2ZW50cy5mbGF0TWFwKChldmVudDIpID0+IGVuY29kZUV2ZW50VG9waWNzKHsKICAgICAgICBhYmk6IFtldmVudDJdLAogICAgICAgIGV2ZW50TmFtZTogZXZlbnQyLm5hbWUsCiAgICAgICAgYXJncwogICAgICB9KSk7CiAgICAgIHRvcGljcyA9IFtlbmNvZGVkXTsKICAgICAgaWYgKGV2ZW50KQogICAgICAgIHRvcGljcyA9IHRvcGljc1swXTsKICAgIH0KICAgIGNvbnN0IGlkID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfbmV3RmlsdGVyIiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgewogICAgICAgICAgYWRkcmVzcywKICAgICAgICAgIGZyb21CbG9jazogdHlwZW9mIGZyb21CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleChmcm9tQmxvY2spIDogZnJvbUJsb2NrLAogICAgICAgICAgdG9CbG9jazogdHlwZW9mIHRvQmxvY2sgPT09ICJiaWdpbnQiID8gbnVtYmVyVG9IZXgodG9CbG9jaykgOiB0b0Jsb2NrLAogICAgICAgICAgLi4udG9waWNzLmxlbmd0aCA/IHsgdG9waWNzIH0gOiB7fQogICAgICAgIH0KICAgICAgXQogICAgfSk7CiAgICByZXR1cm4gewogICAgICBhYmk6IGV2ZW50cywKICAgICAgYXJncywKICAgICAgZXZlbnROYW1lOiBldmVudCA/IGV2ZW50Lm5hbWUgOiB2b2lkIDAsCiAgICAgIGZyb21CbG9jaywKICAgICAgaWQsCiAgICAgIHJlcXVlc3Q6IGdldFJlcXVlc3QoaWQpLAogICAgICBzdHJpY3Q6IEJvb2xlYW4oc3RyaWN0KSwKICAgICAgdG9CbG9jaywKICAgICAgdHlwZTogImV2ZW50IgogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvY3JlYXRlUGVuZGluZ1RyYW5zYWN0aW9uRmlsdGVyLmpzCiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlUGVuZGluZ1RyYW5zYWN0aW9uRmlsdGVyKGNsaWVudCkgewogICAgY29uc3QgZ2V0UmVxdWVzdCA9IGNyZWF0ZUZpbHRlclJlcXVlc3RTY29wZShjbGllbnQsIHsKICAgICAgbWV0aG9kOiAiZXRoX25ld1BlbmRpbmdUcmFuc2FjdGlvbkZpbHRlciIKICAgIH0pOwogICAgY29uc3QgaWQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9uZXdQZW5kaW5nVHJhbnNhY3Rpb25GaWx0ZXIiCiAgICB9KTsKICAgIHJldHVybiB7IGlkLCByZXF1ZXN0OiBnZXRSZXF1ZXN0KGlkKSwgdHlwZTogInRyYW5zYWN0aW9uIiB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRCbG9iQmFzZUZlZS5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldEJsb2JCYXNlRmVlKGNsaWVudCkgewogICAgY29uc3QgYmFzZUZlZSA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2Jsb2JCYXNlRmVlIgogICAgfSk7CiAgICByZXR1cm4gQmlnSW50KGJhc2VGZWUpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRCbG9ja1RyYW5zYWN0aW9uQ291bnQuanMKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50KGNsaWVudCwgeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyLCBibG9ja1RhZyA9ICJsYXRlc3QiIH0gPSB7fSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciAhPT0gdm9pZCAwID8gbnVtYmVyVG9IZXgoYmxvY2tOdW1iZXIpIDogdm9pZCAwOwogICAgbGV0IGNvdW50OwogICAgaWYgKGJsb2NrSGFzaCkgewogICAgICBjb3VudCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50QnlIYXNoIiwKICAgICAgICBwYXJhbXM6IFtibG9ja0hhc2hdCiAgICAgIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgfSBlbHNlIHsKICAgICAgY291bnQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXRoX2dldEJsb2NrVHJhbnNhY3Rpb25Db3VudEJ5TnVtYmVyIiwKICAgICAgICBwYXJhbXM6IFtibG9ja051bWJlckhleCB8fCBibG9ja1RhZ10KICAgICAgfSwgeyBkZWR1cGU6IEJvb2xlYW4oYmxvY2tOdW1iZXJIZXgpIH0pOwogICAgfQogICAgcmV0dXJuIGhleFRvTnVtYmVyKGNvdW50KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0Q29kZS5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRDb2RlKGNsaWVudCwgeyBhZGRyZXNzLCBibG9ja051bWJlciwgYmxvY2tUYWcgPSAibGF0ZXN0IiB9KSB7CiAgICBjb25zdCBibG9ja051bWJlckhleCA9IGJsb2NrTnVtYmVyICE9PSB2b2lkIDAgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICBjb25zdCBoZXggPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRDb2RlIiwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWddCiAgICB9LCB7IGRlZHVwZTogQm9vbGVhbihibG9ja051bWJlckhleCkgfSk7CiAgICBpZiAoaGV4ID09PSAiMHgiKQogICAgICByZXR1cm4gdm9pZCAwOwogICAgcmV0dXJuIGhleDsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0RmVlSGlzdG9yeS5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2ZlZUhpc3RvcnkuanMKICBmdW5jdGlvbiBmb3JtYXRGZWVIaXN0b3J5KGZlZUhpc3RvcnkpIHsKICAgIHJldHVybiB7CiAgICAgIGJhc2VGZWVQZXJHYXM6IGZlZUhpc3RvcnkuYmFzZUZlZVBlckdhcy5tYXAoKHZhbHVlKSA9PiBCaWdJbnQodmFsdWUpKSwKICAgICAgZ2FzVXNlZFJhdGlvOiBmZWVIaXN0b3J5Lmdhc1VzZWRSYXRpbywKICAgICAgb2xkZXN0QmxvY2s6IEJpZ0ludChmZWVIaXN0b3J5Lm9sZGVzdEJsb2NrKSwKICAgICAgcmV3YXJkOiBmZWVIaXN0b3J5LnJld2FyZD8ubWFwKChyZXdhcmQpID0+IHJld2FyZC5tYXAoKHZhbHVlKSA9PiBCaWdJbnQodmFsdWUpKSkKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEZlZUhpc3RvcnkuanMKICBhc3luYyBmdW5jdGlvbiBnZXRGZWVIaXN0b3J5KGNsaWVudCwgeyBibG9ja0NvdW50LCBibG9ja051bWJlciwgYmxvY2tUYWcgPSAibGF0ZXN0IiwgcmV3YXJkUGVyY2VudGlsZXMgfSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgIGNvbnN0IGZlZUhpc3RvcnkgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9mZWVIaXN0b3J5IiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgbnVtYmVyVG9IZXgoYmxvY2tDb3VudCksCiAgICAgICAgYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWcsCiAgICAgICAgcmV3YXJkUGVyY2VudGlsZXMKICAgICAgXQogICAgfSwgeyBkZWR1cGU6IEJvb2xlYW4oYmxvY2tOdW1iZXJIZXgpIH0pOwogICAgcmV0dXJuIGZvcm1hdEZlZUhpc3RvcnkoZmVlSGlzdG9yeSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEZpbHRlckxvZ3MuanMKICBhc3luYyBmdW5jdGlvbiBnZXRGaWx0ZXJMb2dzKF9jbGllbnQsIHsgZmlsdGVyIH0pIHsKICAgIGNvbnN0IHN0cmljdCA9IGZpbHRlci5zdHJpY3QgPz8gZmFsc2U7CiAgICBjb25zdCBsb2dzID0gYXdhaXQgZmlsdGVyLnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfZ2V0RmlsdGVyTG9ncyIsCiAgICAgIHBhcmFtczogW2ZpbHRlci5pZF0KICAgIH0pOwogICAgY29uc3QgZm9ybWF0dGVkTG9ncyA9IGxvZ3MubWFwKChsb2cpID0+IGZvcm1hdExvZyhsb2cpKTsKICAgIGlmICghZmlsdGVyLmFiaSkKICAgICAgcmV0dXJuIGZvcm1hdHRlZExvZ3M7CiAgICByZXR1cm4gcGFyc2VFdmVudExvZ3MoewogICAgICBhYmk6IGZpbHRlci5hYmksCiAgICAgIGxvZ3M6IGZvcm1hdHRlZExvZ3MsCiAgICAgIHN0cmljdAogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldFByb29mLmpzCiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2NoYWluL2RlZmluZUNoYWluLmpzCiAgZnVuY3Rpb24gZGVmaW5lQ2hhaW4oY2hhaW4pIHsKICAgIHJldHVybiB7CiAgICAgIGZvcm1hdHRlcnM6IHZvaWQgMCwKICAgICAgZmVlczogdm9pZCAwLAogICAgICBzZXJpYWxpemVyczogdm9pZCAwLAogICAgICAuLi5jaGFpbgogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY2hhaW4vZXh0cmFjdENoYWluLmpzCiAgZnVuY3Rpb24gZXh0cmFjdENoYWluKHsgY2hhaW5zLCBpZCB9KSB7CiAgICByZXR1cm4gY2hhaW5zLmZpbmQoKGNoYWluKSA9PiBjaGFpbi5pZCA9PT0gaWQpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9yZWdleC5qcwogIHZhciBhcnJheVJlZ2V4ID0gL14oLiopXFsoWzAtOV0qKVxdJC87CiAgdmFyIGJ5dGVzUmVnZXgyID0gL15ieXRlcyhbMS05XXwxWzAtOV18MlswLTldfDNbMC0yXSk/JC87CiAgdmFyIGludGVnZXJSZWdleDIgPSAvXih1P2ludCkoOHwxNnwyNHwzMnw0MHw0OHw1Nnw2NHw3Mnw4MHw4OHw5NnwxMDR8MTEyfDEyMHwxMjh8MTM2fDE0NHwxNTJ8MTYwfDE2OHwxNzZ8MTg0fDE5MnwyMDB8MjA4fDIxNnwyMjR8MjMyfDI0MHwyNDh8MjU2KT8kLzsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ycGMvd2ViU29ja2V0LmpzCiAgaW5pdF9yZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcnBjL3NvY2tldC5qcwogIGluaXRfcmVxdWVzdCgpOwogIGluaXRfY3JlYXRlQmF0Y2hTY2hlZHVsZXIoKTsKICB2YXIgc29ja2V0Q2xpZW50Q2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldFNvY2tldFJwY0NsaWVudChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGdldFNvY2tldDogZ2V0U29ja2V0Miwga2VlcEFsaXZlID0gdHJ1ZSwga2V5ID0gInNvY2tldCIsIHJlY29ubmVjdCA9IHRydWUsIHVybCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHsgaW50ZXJ2YWw6IGtlZXBBbGl2ZUludGVydmFsID0gM2U0IH0gPSB0eXBlb2Yga2VlcEFsaXZlID09PSAib2JqZWN0IiA/IGtlZXBBbGl2ZSA6IHt9OwogICAgY29uc3QgeyBhdHRlbXB0cyA9IDUsIGRlbGF5ID0gMmUzIH0gPSB0eXBlb2YgcmVjb25uZWN0ID09PSAib2JqZWN0IiA/IHJlY29ubmVjdCA6IHt9OwogICAgbGV0IHNvY2tldENsaWVudCA9IHNvY2tldENsaWVudENhY2hlLmdldChgJHtrZXl9OiR7dXJsfWApOwogICAgaWYgKHNvY2tldENsaWVudCkKICAgICAgcmV0dXJuIHNvY2tldENsaWVudDsKICAgIGxldCByZWNvbm5lY3RDb3VudCA9IDA7CiAgICBjb25zdCB7IHNjaGVkdWxlIH0gPSBjcmVhdGVCYXRjaFNjaGVkdWxlcih7CiAgICAgIGlkOiBgJHtrZXl9OiR7dXJsfWAsCiAgICAgIGZuOiBhc3luYyAoKSA9PiB7CiAgICAgICAgY29uc3QgcmVxdWVzdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIGxldCBlcnJvcjsKICAgICAgICBsZXQgc29ja2V0OwogICAgICAgIGxldCBrZWVwQWxpdmVUaW1lcjsKICAgICAgICBhc3luYyBmdW5jdGlvbiBzZXR1cCgpIHsKICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFNvY2tldDIoewogICAgICAgICAgICBvbkNsb3NlKCkgewogICAgICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cy52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIHJlcXVlc3Qub25FcnJvcj8uKG5ldyBTb2NrZXRDbG9zZWRFcnJvcih7IHVybCB9KSk7CiAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5vbkVycm9yPy4obmV3IFNvY2tldENsb3NlZEVycm9yKHsgdXJsIH0pKTsKICAgICAgICAgICAgICByZXF1ZXN0cy5jbGVhcigpOwogICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMuY2xlYXIoKTsKICAgICAgICAgICAgICBpZiAocmVjb25uZWN0ICYmIHJlY29ubmVjdENvdW50IDwgYXR0ZW1wdHMpCiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgICAgcmVjb25uZWN0Q291bnQrKzsKICAgICAgICAgICAgICAgICAgYXdhaXQgc2V0dXAoKS5jYXRjaChjb25zb2xlLmVycm9yKTsKICAgICAgICAgICAgICAgIH0sIGRlbGF5KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25FcnJvcihlcnJvcl8pIHsKICAgICAgICAgICAgICBlcnJvciA9IGVycm9yXzsKICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMudmFsdWVzKCkpCiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9uRXJyb3I/LihlcnJvcik7CiAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5vbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICAgIHJlcXVlc3RzLmNsZWFyKCk7CiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5jbGVhcigpOwogICAgICAgICAgICAgIGlmIChyZWNvbm5lY3QgJiYgcmVjb25uZWN0Q291bnQgPCBhdHRlbXB0cykKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgICByZWNvbm5lY3RDb3VudCsrOwogICAgICAgICAgICAgICAgICBhd2FpdCBzZXR1cCgpLmNhdGNoKGNvbnNvbGUuZXJyb3IpOwogICAgICAgICAgICAgICAgfSwgZGVsYXkpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbk9wZW4oKSB7CiAgICAgICAgICAgICAgZXJyb3IgPSB2b2lkIDA7CiAgICAgICAgICAgICAgcmVjb25uZWN0Q291bnQgPSAwOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvblJlc3BvbnNlKGRhdGEpIHsKICAgICAgICAgICAgICBjb25zdCBpc1N1YnNjcmlwdGlvbiA9IGRhdGEubWV0aG9kID09PSAiZXRoX3N1YnNjcmlwdGlvbiI7CiAgICAgICAgICAgICAgY29uc3QgaWQgPSBpc1N1YnNjcmlwdGlvbiA/IGRhdGEucGFyYW1zLnN1YnNjcmlwdGlvbiA6IGRhdGEuaWQ7CiAgICAgICAgICAgICAgY29uc3QgY2FjaGUgPSBpc1N1YnNjcmlwdGlvbiA/IHN1YnNjcmlwdGlvbnMgOiByZXF1ZXN0czsKICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGNhY2hlLmdldChpZCk7CiAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKQogICAgICAgICAgICAgICAgY2FsbGJhY2sub25SZXNwb25zZShkYXRhKTsKICAgICAgICAgICAgICBpZiAoIWlzU3Vic2NyaXB0aW9uKQogICAgICAgICAgICAgICAgY2FjaGUuZGVsZXRlKGlkKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBzb2NrZXQgPSByZXN1bHQ7CiAgICAgICAgICBpZiAoa2VlcEFsaXZlKSB7CiAgICAgICAgICAgIGlmIChrZWVwQWxpdmVUaW1lcikKICAgICAgICAgICAgICBjbGVhckludGVydmFsKGtlZXBBbGl2ZVRpbWVyKTsKICAgICAgICAgICAga2VlcEFsaXZlVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiBzb2NrZXQucGluZz8uKCksIGtlZXBBbGl2ZUludGVydmFsKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHNldHVwKCk7CiAgICAgICAgZXJyb3IgPSB2b2lkIDA7CiAgICAgICAgc29ja2V0Q2xpZW50ID0gewogICAgICAgICAgY2xvc2UoKSB7CiAgICAgICAgICAgIGtlZXBBbGl2ZVRpbWVyICYmIGNsZWFySW50ZXJ2YWwoa2VlcEFsaXZlVGltZXIpOwogICAgICAgICAgICBzb2NrZXQuY2xvc2UoKTsKICAgICAgICAgICAgc29ja2V0Q2xpZW50Q2FjaGUuZGVsZXRlKGAke2tleX06JHt1cmx9YCk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0IHNvY2tldCgpIHsKICAgICAgICAgICAgcmV0dXJuIHNvY2tldDsKICAgICAgICAgIH0sCiAgICAgICAgICByZXF1ZXN0KHsgYm9keSwgb25FcnJvciwgb25SZXNwb25zZSB9KSB7CiAgICAgICAgICAgIGlmIChlcnJvciAmJiBvbkVycm9yKQogICAgICAgICAgICAgIG9uRXJyb3IoZXJyb3IpOwogICAgICAgICAgICBjb25zdCBpZCA9IGJvZHkuaWQgPz8gaWRDYWNoZS50YWtlKCk7CiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gKHJlc3BvbnNlKSA9PiB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZS5pZCA9PT0gIm51bWJlciIgJiYgaWQgIT09IHJlc3BvbnNlLmlkKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIGlmIChib2R5Lm1ldGhvZCA9PT0gImV0aF9zdWJzY3JpYmUiICYmIHR5cGVvZiByZXNwb25zZS5yZXN1bHQgPT09ICJzdHJpbmciKQogICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5zZXQocmVzcG9uc2UucmVzdWx0LCB7CiAgICAgICAgICAgICAgICAgIG9uUmVzcG9uc2U6IGNhbGxiYWNrLAogICAgICAgICAgICAgICAgICBvbkVycm9yCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBpZiAoYm9keS5tZXRob2QgPT09ICJldGhfdW5zdWJzY3JpYmUiKQogICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5kZWxldGUoYm9keS5wYXJhbXM/LlswXSk7CiAgICAgICAgICAgICAgb25SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHJlcXVlc3RzLnNldChpZCwgeyBvblJlc3BvbnNlOiBjYWxsYmFjaywgb25FcnJvciB9KTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBzb2NrZXQucmVxdWVzdCh7CiAgICAgICAgICAgICAgICBib2R5OiB7CiAgICAgICAgICAgICAgICAgIGpzb25ycGM6ICIyLjAiLAogICAgICAgICAgICAgICAgICBpZCwKICAgICAgICAgICAgICAgICAgLi4uYm9keQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGNhdGNoIChlcnJvcjIpIHsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHJlcXVlc3RBc3luYyh7IGJvZHksIHRpbWVvdXQgPSAxZTQgfSkgewogICAgICAgICAgICByZXR1cm4gd2l0aFRpbWVvdXQoKCkgPT4gbmV3IFByb21pc2UoKG9uUmVzcG9uc2UsIG9uRXJyb3IpID0+IHRoaXMucmVxdWVzdCh7CiAgICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgICBvbkVycm9yLAogICAgICAgICAgICAgIG9uUmVzcG9uc2UKICAgICAgICAgICAgfSkpLCB7CiAgICAgICAgICAgICAgZXJyb3JJbnN0YW5jZTogbmV3IFRpbWVvdXRFcnJvcih7IGJvZHksIHVybCB9KSwKICAgICAgICAgICAgICB0aW1lb3V0CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHJlcXVlc3RzLAogICAgICAgICAgc3Vic2NyaXB0aW9ucywKICAgICAgICAgIHVybAogICAgICAgIH07CiAgICAgICAgc29ja2V0Q2xpZW50Q2FjaGUuc2V0KGAke2tleX06JHt1cmx9YCwgc29ja2V0Q2xpZW50KTsKICAgICAgICByZXR1cm4gW3NvY2tldENsaWVudF07CiAgICAgIH0KICAgIH0pOwogICAgY29uc3QgW18sIFtzb2NrZXRDbGllbnRfXV0gPSBhd2FpdCBzY2hlZHVsZSgpOwogICAgcmV0dXJuIHNvY2tldENsaWVudF87CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3JwYy93ZWJTb2NrZXQuanMKICBhc3luYyBmdW5jdGlvbiBnZXRXZWJTb2NrZXRScGNDbGllbnQodXJsLCBvcHRpb25zID0ge30pIHsKICAgIGNvbnN0IHsga2VlcEFsaXZlLCByZWNvbm5lY3QgfSA9IG9wdGlvbnM7CiAgICByZXR1cm4gZ2V0U29ja2V0UnBjQ2xpZW50KHsKICAgICAgYXN5bmMgZ2V0U29ja2V0KHsgb25DbG9zZSwgb25FcnJvciwgb25PcGVuLCBvblJlc3BvbnNlIH0pIHsKICAgICAgICBjb25zdCBXZWJTb2NrZXQzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiAoaW5pdF9uYXRpdmUoKSwgbmF0aXZlX2V4cG9ydHMpKS50aGVuKChtb2R1bGUpID0+IG1vZHVsZS5XZWJTb2NrZXQpOwogICAgICAgIGNvbnN0IHNvY2tldCA9IG5ldyBXZWJTb2NrZXQzKHVybCk7CiAgICAgICAgZnVuY3Rpb24gb25DbG9zZV8oKSB7CiAgICAgICAgICBvbkNsb3NlKCk7CiAgICAgICAgICBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCBvbkNsb3NlXyk7CiAgICAgICAgICBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG9uTWVzc2FnZSk7CiAgICAgICAgICBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBvbkVycm9yKTsKICAgICAgICAgIHNvY2tldC5yZW1vdmVFdmVudExpc3RlbmVyKCJvcGVuIiwgb25PcGVuKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gb25NZXNzYWdlKHsgZGF0YSB9KSB7CiAgICAgICAgICBvblJlc3BvbnNlKEpTT04ucGFyc2UoZGF0YSkpOwogICAgICAgIH0KICAgICAgICBzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCBvbkNsb3NlXyk7CiAgICAgICAgc29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBvbk1lc3NhZ2UpOwogICAgICAgIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsIG9uRXJyb3IpOwogICAgICAgIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKCJvcGVuIiwgb25PcGVuKTsKICAgICAgICBpZiAoc29ja2V0LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldDMuQ09OTkVDVElORykgewogICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgICAgICBpZiAoIXNvY2tldCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHNvY2tldC5vbm9wZW4gPSByZXNvbHZlOwogICAgICAgICAgICBzb2NrZXQub25lcnJvciA9IHJlamVjdDsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb25zdCB7IGNsb3NlOiBjbG9zZV8gfSA9IHNvY2tldDsKICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzb2NrZXQsIHsKICAgICAgICAgIGNsb3NlKCkgewogICAgICAgICAgICBjbG9zZV8uYmluZChzb2NrZXQpKCk7CiAgICAgICAgICAgIG9uQ2xvc2UoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBwaW5nKCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGlmIChzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NFRCB8fCBzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NJTkcpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0UmVxdWVzdEVycm9yKHsKICAgICAgICAgICAgICAgICAgdXJsOiBzb2NrZXQudXJsLAogICAgICAgICAgICAgICAgICBjYXVzZTogbmV3IFNvY2tldENsb3NlZEVycm9yKHsgdXJsOiBzb2NrZXQudXJsIH0pCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBjb25zdCBib2R5ID0gewogICAgICAgICAgICAgICAganNvbnJwYzogIjIuMCIsCiAgICAgICAgICAgICAgICBtZXRob2Q6ICJuZXRfdmVyc2lvbiIsCiAgICAgICAgICAgICAgICBwYXJhbXM6IFtdCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBzb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeShib2R5KSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgb25FcnJvcihlcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICByZXF1ZXN0KHsgYm9keSB9KSB7CiAgICAgICAgICAgIGlmIChzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NFRCB8fCBzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NJTkcpCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldFJlcXVlc3RFcnJvcih7CiAgICAgICAgICAgICAgICBib2R5LAogICAgICAgICAgICAgICAgdXJsOiBzb2NrZXQudXJsLAogICAgICAgICAgICAgICAgY2F1c2U6IG5ldyBTb2NrZXRDbG9zZWRFcnJvcih7IHVybDogc29ja2V0LnVybCB9KQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoYm9keSkpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9LAogICAgICBrZWVwQWxpdmUsCiAgICAgIHJlY29ubmVjdCwKICAgICAgdXJsCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcnBjL2NvbXBhdC5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldFNvY2tldCh1cmwpIHsKICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldFdlYlNvY2tldFJwY0NsaWVudCh1cmwpOwogICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oY2xpZW50LnNvY2tldCwgewogICAgICByZXF1ZXN0czogY2xpZW50LnJlcXVlc3RzLAogICAgICBzdWJzY3JpcHRpb25zOiBjbGllbnQuc3Vic2NyaXB0aW9ucwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3R5cGVkRGF0YS5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL2hhc2hUeXBlZERhdGEuanMKICBpbml0X2VuY29kZUFiaVBhcmFtZXRlcnMoKTsKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X2tlY2NhazI1NigpOwogIGZ1bmN0aW9uIGhhc2hUeXBlZERhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBkb21haW4gPSB7fSwgbWVzc2FnZSwgcHJpbWFyeVR5cGUgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCB0eXBlcyA9IHsKICAgICAgRUlQNzEyRG9tYWluOiBnZXRUeXBlc0ZvckVJUDcxMkRvbWFpbih7IGRvbWFpbiB9KSwKICAgICAgLi4ucGFyYW1ldGVycy50eXBlcwogICAgfTsKICAgIHZhbGlkYXRlVHlwZWREYXRhKHsKICAgICAgZG9tYWluLAogICAgICBtZXNzYWdlLAogICAgICBwcmltYXJ5VHlwZSwKICAgICAgdHlwZXMKICAgIH0pOwogICAgY29uc3QgcGFydHMgPSBbIjB4MTkwMSJdOwogICAgaWYgKGRvbWFpbikKICAgICAgcGFydHMucHVzaChoYXNoRG9tYWluKHsKICAgICAgICBkb21haW4sCiAgICAgICAgdHlwZXMKICAgICAgfSkpOwogICAgaWYgKHByaW1hcnlUeXBlICE9PSAiRUlQNzEyRG9tYWluIikKICAgICAgcGFydHMucHVzaChoYXNoU3RydWN0KHsKICAgICAgICBkYXRhOiBtZXNzYWdlLAogICAgICAgIHByaW1hcnlUeXBlLAogICAgICAgIHR5cGVzCiAgICAgIH0pKTsKICAgIHJldHVybiBrZWNjYWsyNTYoY29uY2F0KHBhcnRzKSk7CiAgfQogIGZ1bmN0aW9uIGhhc2hEb21haW4oeyBkb21haW4sIHR5cGVzIH0pIHsKICAgIHJldHVybiBoYXNoU3RydWN0KHsKICAgICAgZGF0YTogZG9tYWluLAogICAgICBwcmltYXJ5VHlwZTogIkVJUDcxMkRvbWFpbiIsCiAgICAgIHR5cGVzCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gaGFzaFN0cnVjdCh7IGRhdGEsIHByaW1hcnlUeXBlLCB0eXBlcyB9KSB7CiAgICBjb25zdCBlbmNvZGVkID0gZW5jb2RlRGF0YSh7CiAgICAgIGRhdGEsCiAgICAgIHByaW1hcnlUeXBlLAogICAgICB0eXBlcwogICAgfSk7CiAgICByZXR1cm4ga2VjY2FrMjU2KGVuY29kZWQpOwogIH0KICBmdW5jdGlvbiBlbmNvZGVEYXRhKHsgZGF0YSwgcHJpbWFyeVR5cGUsIHR5cGVzIH0pIHsKICAgIGNvbnN0IGVuY29kZWRUeXBlcyA9IFt7IHR5cGU6ICJieXRlczMyIiB9XTsKICAgIGNvbnN0IGVuY29kZWRWYWx1ZXMgPSBbaGFzaFR5cGUoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSldOwogICAgZm9yIChjb25zdCBmaWVsZCBvZiB0eXBlc1twcmltYXJ5VHlwZV0pIHsKICAgICAgY29uc3QgW3R5cGUsIHZhbHVlXSA9IGVuY29kZUZpZWxkKHsKICAgICAgICB0eXBlcywKICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLAogICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsCiAgICAgICAgdmFsdWU6IGRhdGFbZmllbGQubmFtZV0KICAgICAgfSk7CiAgICAgIGVuY29kZWRUeXBlcy5wdXNoKHR5cGUpOwogICAgICBlbmNvZGVkVmFsdWVzLnB1c2godmFsdWUpOwogICAgfQogICAgcmV0dXJuIGVuY29kZUFiaVBhcmFtZXRlcnMoZW5jb2RlZFR5cGVzLCBlbmNvZGVkVmFsdWVzKTsKICB9CiAgZnVuY3Rpb24gaGFzaFR5cGUoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSkgewogICAgY29uc3QgZW5jb2RlZEhhc2hUeXBlID0gdG9IZXgoZW5jb2RlVHlwZSh7IHByaW1hcnlUeXBlLCB0eXBlcyB9KSk7CiAgICByZXR1cm4ga2VjY2FrMjU2KGVuY29kZWRIYXNoVHlwZSk7CiAgfQogIGZ1bmN0aW9uIGVuY29kZVR5cGUoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSkgewogICAgbGV0IHJlc3VsdCA9ICIiOwogICAgY29uc3QgdW5zb3J0ZWREZXBzID0gZmluZFR5cGVEZXBlbmRlbmNpZXMoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSk7CiAgICB1bnNvcnRlZERlcHMuZGVsZXRlKHByaW1hcnlUeXBlKTsKICAgIGNvbnN0IGRlcHMgPSBbcHJpbWFyeVR5cGUsIC4uLkFycmF5LmZyb20odW5zb3J0ZWREZXBzKS5zb3J0KCldOwogICAgZm9yIChjb25zdCB0eXBlIG9mIGRlcHMpIHsKICAgICAgcmVzdWx0ICs9IGAke3R5cGV9KCR7dHlwZXNbdHlwZV0ubWFwKCh7IG5hbWUsIHR5cGU6IHQgfSkgPT4gYCR7dH0gJHtuYW1lfWApLmpvaW4oIiwiKX0pYDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIGZpbmRUeXBlRGVwZW5kZW5jaWVzKHsgcHJpbWFyeVR5cGU6IHByaW1hcnlUeXBlXywgdHlwZXMgfSwgcmVzdWx0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpIHsKICAgIGNvbnN0IG1hdGNoID0gcHJpbWFyeVR5cGVfLm1hdGNoKC9eXHcqL3UpOwogICAgY29uc3QgcHJpbWFyeVR5cGUgPSBtYXRjaD8uWzBdOwogICAgaWYgKHJlc3VsdHMuaGFzKHByaW1hcnlUeXBlKSB8fCB0eXBlc1twcmltYXJ5VHlwZV0gPT09IHZvaWQgMCkgewogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KICAgIHJlc3VsdHMuYWRkKHByaW1hcnlUeXBlKTsKICAgIGZvciAoY29uc3QgZmllbGQgb2YgdHlwZXNbcHJpbWFyeVR5cGVdKSB7CiAgICAgIGZpbmRUeXBlRGVwZW5kZW5jaWVzKHsgcHJpbWFyeVR5cGU6IGZpZWxkLnR5cGUsIHR5cGVzIH0sIHJlc3VsdHMpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQogIGZ1bmN0aW9uIGVuY29kZUZpZWxkKHsgdHlwZXMsIG5hbWUsIHR5cGUsIHZhbHVlIH0pIHsKICAgIGlmICh0eXBlc1t0eXBlXSAhPT0gdm9pZCAwKSB7CiAgICAgIHJldHVybiBbCiAgICAgICAgeyB0eXBlOiAiYnl0ZXMzMiIgfSwKICAgICAgICBrZWNjYWsyNTYoZW5jb2RlRGF0YSh7IGRhdGE6IHZhbHVlLCBwcmltYXJ5VHlwZTogdHlwZSwgdHlwZXMgfSkpCiAgICAgIF07CiAgICB9CiAgICBpZiAodHlwZSA9PT0gImJ5dGVzIikgewogICAgICBjb25zdCBwcmVwZW5kID0gdmFsdWUubGVuZ3RoICUgMiA/ICIwIiA6ICIiOwogICAgICB2YWx1ZSA9IGAweCR7cHJlcGVuZCArIHZhbHVlLnNsaWNlKDIpfWA7CiAgICAgIHJldHVybiBbeyB0eXBlOiAiYnl0ZXMzMiIgfSwga2VjY2FrMjU2KHZhbHVlKV07CiAgICB9CiAgICBpZiAodHlwZSA9PT0gInN0cmluZyIpCiAgICAgIHJldHVybiBbeyB0eXBlOiAiYnl0ZXMzMiIgfSwga2VjY2FrMjU2KHRvSGV4KHZhbHVlKSldOwogICAgaWYgKHR5cGUubGFzdEluZGV4T2YoIl0iKSA9PT0gdHlwZS5sZW5ndGggLSAxKSB7CiAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0eXBlLnNsaWNlKDAsIHR5cGUubGFzdEluZGV4T2YoIlsiKSk7CiAgICAgIGNvbnN0IHR5cGVWYWx1ZVBhaXJzID0gdmFsdWUubWFwKChpdGVtKSA9PiBlbmNvZGVGaWVsZCh7CiAgICAgICAgbmFtZSwKICAgICAgICB0eXBlOiBwYXJzZWRUeXBlLAogICAgICAgIHR5cGVzLAogICAgICAgIHZhbHVlOiBpdGVtCiAgICAgIH0pKTsKICAgICAgcmV0dXJuIFsKICAgICAgICB7IHR5cGU6ICJieXRlczMyIiB9LAogICAgICAgIGtlY2NhazI1NihlbmNvZGVBYmlQYXJhbWV0ZXJzKHR5cGVWYWx1ZVBhaXJzLm1hcCgoW3RdKSA9PiB0KSwgdHlwZVZhbHVlUGFpcnMubWFwKChbLCB2XSkgPT4gdikpKQogICAgICBdOwogICAgfQogICAgcmV0dXJuIFt7IHR5cGUgfSwgdmFsdWVdOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90eXBlZERhdGEuanMKICBpbml0X3N0cmluZ2lmeSgpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZVR5cGVkRGF0YShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGRvbWFpbjogZG9tYWluXywgbWVzc2FnZTogbWVzc2FnZV8sIHByaW1hcnlUeXBlLCB0eXBlcyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IG5vcm1hbGl6ZURhdGEgPSAoc3RydWN0LCBkYXRhXykgPT4gewogICAgICBjb25zdCBkYXRhID0geyAuLi5kYXRhXyB9OwogICAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHN0cnVjdCkgewogICAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSB9ID0gcGFyYW07CiAgICAgICAgaWYgKHR5cGUgPT09ICJhZGRyZXNzIikKICAgICAgICAgIGRhdGFbbmFtZV0gPSBkYXRhW25hbWVdLnRvTG93ZXJDYXNlKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGRhdGE7CiAgICB9OwogICAgY29uc3QgZG9tYWluID0gKCgpID0+IHsKICAgICAgaWYgKCF0eXBlcy5FSVA3MTJEb21haW4pCiAgICAgICAgcmV0dXJuIHt9OwogICAgICBpZiAoIWRvbWFpbl8pCiAgICAgICAgcmV0dXJuIHt9OwogICAgICByZXR1cm4gbm9ybWFsaXplRGF0YSh0eXBlcy5FSVA3MTJEb21haW4sIGRvbWFpbl8pOwogICAgfSkoKTsKICAgIGNvbnN0IG1lc3NhZ2UgPSAoKCkgPT4gewogICAgICBpZiAocHJpbWFyeVR5cGUgPT09ICJFSVA3MTJEb21haW4iKQogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhKHR5cGVzW3ByaW1hcnlUeXBlXSwgbWVzc2FnZV8pOwogICAgfSkoKTsKICAgIHJldHVybiBzdHJpbmdpZnkoeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9KTsKICB9CiAgZnVuY3Rpb24gdmFsaWRhdGVUeXBlZERhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHZhbGlkYXRlRGF0YSA9IChzdHJ1Y3QsIGRhdGEpID0+IHsKICAgICAgZm9yIChjb25zdCBwYXJhbSBvZiBzdHJ1Y3QpIHsKICAgICAgICBjb25zdCB7IG5hbWUsIHR5cGUgfSA9IHBhcmFtOwogICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtuYW1lXTsKICAgICAgICBjb25zdCBpbnRlZ2VyTWF0Y2ggPSB0eXBlLm1hdGNoKGludGVnZXJSZWdleDIpOwogICAgICAgIGlmIChpbnRlZ2VyTWF0Y2ggJiYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIgfHwgdHlwZW9mIHZhbHVlID09PSAiYmlnaW50IikpIHsKICAgICAgICAgIGNvbnN0IFtfdHlwZSwgYmFzZTIsIHNpemVfXSA9IGludGVnZXJNYXRjaDsKICAgICAgICAgIG51bWJlclRvSGV4KHZhbHVlLCB7CiAgICAgICAgICAgIHNpZ25lZDogYmFzZTIgPT09ICJpbnQiLAogICAgICAgICAgICBzaXplOiBOdW1iZXIucGFyc2VJbnQoc2l6ZV8pIC8gOAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlID09PSAiYWRkcmVzcyIgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiAhaXNBZGRyZXNzKHZhbHVlKSkKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogdmFsdWUgfSk7CiAgICAgICAgY29uc3QgYnl0ZXNNYXRjaCA9IHR5cGUubWF0Y2goYnl0ZXNSZWdleDIpOwogICAgICAgIGlmIChieXRlc01hdGNoKSB7CiAgICAgICAgICBjb25zdCBbX3R5cGUsIHNpemVfXSA9IGJ5dGVzTWF0Y2g7CiAgICAgICAgICBpZiAoc2l6ZV8gJiYgc2l6ZSh2YWx1ZSkgIT09IE51bWJlci5wYXJzZUludChzaXplXykpCiAgICAgICAgICAgIHRocm93IG5ldyBCeXRlc1NpemVNaXNtYXRjaEVycm9yKHsKICAgICAgICAgICAgICBleHBlY3RlZFNpemU6IE51bWJlci5wYXJzZUludChzaXplXyksCiAgICAgICAgICAgICAgZ2l2ZW5TaXplOiBzaXplKHZhbHVlKQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY29uc3Qgc3RydWN0MiA9IHR5cGVzW3R5cGVdOwogICAgICAgIGlmIChzdHJ1Y3QyKQogICAgICAgICAgdmFsaWRhdGVEYXRhKHN0cnVjdDIsIHZhbHVlKTsKICAgICAgfQogICAgfTsKICAgIGlmICh0eXBlcy5FSVA3MTJEb21haW4gJiYgZG9tYWluKQogICAgICB2YWxpZGF0ZURhdGEodHlwZXMuRUlQNzEyRG9tYWluLCBkb21haW4pOwogICAgaWYgKHByaW1hcnlUeXBlICE9PSAiRUlQNzEyRG9tYWluIikKICAgICAgdmFsaWRhdGVEYXRhKHR5cGVzW3ByaW1hcnlUeXBlXSwgbWVzc2FnZSk7CiAgfQogIGZ1bmN0aW9uIGdldFR5cGVzRm9yRUlQNzEyRG9tYWluKHsgZG9tYWluIH0pIHsKICAgIHJldHVybiBbCiAgICAgIHR5cGVvZiBkb21haW4/Lm5hbWUgPT09ICJzdHJpbmciICYmIHsgbmFtZTogIm5hbWUiLCB0eXBlOiAic3RyaW5nIiB9LAogICAgICBkb21haW4/LnZlcnNpb24gJiYgeyBuYW1lOiAidmVyc2lvbiIsIHR5cGU6ICJzdHJpbmciIH0sCiAgICAgIHR5cGVvZiBkb21haW4/LmNoYWluSWQgPT09ICJudW1iZXIiICYmIHsKICAgICAgICBuYW1lOiAiY2hhaW5JZCIsCiAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgIH0sCiAgICAgIGRvbWFpbj8udmVyaWZ5aW5nQ29udHJhY3QgJiYgewogICAgICAgIG5hbWU6ICJ2ZXJpZnlpbmdDb250cmFjdCIsCiAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgIH0sCiAgICAgIGRvbWFpbj8uc2FsdCAmJiB7IG5hbWU6ICJzYWx0IiwgdHlwZTogImJ5dGVzMzIiIH0KICAgIF0uZmlsdGVyKEJvb2xlYW4pOwogIH0KICBmdW5jdGlvbiBkb21haW5TZXBhcmF0b3IoeyBkb21haW4gfSkgewogICAgcmV0dXJuIGhhc2hEb21haW4oewogICAgICBkb21haW4sCiAgICAgIHR5cGVzOiB7CiAgICAgICAgRUlQNzEyRG9tYWluOiBnZXRUeXBlc0ZvckVJUDcxMkRvbWFpbih7IGRvbWFpbiB9KQogICAgICB9CiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZUZ1bmN0aW9uRGF0YS5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9zbGljZSgpOwogIGluaXRfdG9GdW5jdGlvblNlbGVjdG9yKCk7CiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9mb3JtYXRBYmlJdGVtMigpOwogIGZ1bmN0aW9uIGRlY29kZUZ1bmN0aW9uRGF0YShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgZGF0YSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNsaWNlKGRhdGEsIDAsIDQpOwogICAgY29uc3QgZGVzY3JpcHRpb24gPSBhYmkyLmZpbmQoKHgpID0+IHgudHlwZSA9PT0gImZ1bmN0aW9uIiAmJiBzaWduYXR1cmUgPT09IHRvRnVuY3Rpb25TZWxlY3Rvcihmb3JtYXRBYmlJdGVtMih4KSkpOwogICAgaWYgKCFkZXNjcmlwdGlvbikKICAgICAgdGhyb3cgbmV3IEFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvcihzaWduYXR1cmUsIHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L2RlY29kZUZ1bmN0aW9uRGF0YSIKICAgICAgfSk7CiAgICByZXR1cm4gewogICAgICBmdW5jdGlvbk5hbWU6IGRlc2NyaXB0aW9uLm5hbWUsCiAgICAgIGFyZ3M6ICJpbnB1dHMiIGluIGRlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uLmlucHV0cyAmJiBkZXNjcmlwdGlvbi5pbnB1dHMubGVuZ3RoID4gMCA/IGRlY29kZUFiaVBhcmFtZXRlcnMoZGVzY3JpcHRpb24uaW5wdXRzLCBzbGljZShkYXRhLCA0KSkgOiB2b2lkIDAKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVFcnJvclJlc3VsdC5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3RvRnVuY3Rpb25TZWxlY3RvcigpOwogIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogIGluaXRfZm9ybWF0QWJpSXRlbTIoKTsKICBpbml0X2dldEFiaUl0ZW0oKTsKICB2YXIgZG9jc1BhdGg2ID0gIi9kb2NzL2NvbnRyYWN0L2VuY29kZUVycm9yUmVzdWx0IjsKICBmdW5jdGlvbiBlbmNvZGVFcnJvclJlc3VsdChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgZXJyb3JOYW1lLCBhcmdzIH0gPSBwYXJhbWV0ZXJzOwogICAgbGV0IGFiaUl0ZW0gPSBhYmkyWzBdOwogICAgaWYgKGVycm9yTmFtZSkgewogICAgICBjb25zdCBpdGVtID0gZ2V0QWJpSXRlbSh7IGFiaTogYWJpMiwgYXJncywgbmFtZTogZXJyb3JOYW1lIH0pOwogICAgICBpZiAoIWl0ZW0pCiAgICAgICAgdGhyb3cgbmV3IEFiaUVycm9yTm90Rm91bmRFcnJvcihlcnJvck5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoNiB9KTsKICAgICAgYWJpSXRlbSA9IGl0ZW07CiAgICB9CiAgICBpZiAoYWJpSXRlbS50eXBlICE9PSAiZXJyb3IiKQogICAgICB0aHJvdyBuZXcgQWJpRXJyb3JOb3RGb3VuZEVycm9yKHZvaWQgMCwgeyBkb2NzUGF0aDogZG9jc1BhdGg2IH0pOwogICAgY29uc3QgZGVmaW5pdGlvbiA9IGZvcm1hdEFiaUl0ZW0yKGFiaUl0ZW0pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdG9GdW5jdGlvblNlbGVjdG9yKGRlZmluaXRpb24pOwogICAgbGV0IGRhdGEgPSAiMHgiOwogICAgaWYgKGFyZ3MgJiYgYXJncy5sZW5ndGggPiAwKSB7CiAgICAgIGlmICghYWJpSXRlbS5pbnB1dHMpCiAgICAgICAgdGhyb3cgbmV3IEFiaUVycm9ySW5wdXRzTm90Rm91bmRFcnJvcihhYmlJdGVtLm5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoNiB9KTsKICAgICAgZGF0YSA9IGVuY29kZUFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMsIGFyZ3MpOwogICAgfQogICAgcmV0dXJuIGNvbmNhdEhleChbc2lnbmF0dXJlLCBkYXRhXSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVGdW5jdGlvblJlc3VsdC5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9lbmNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9nZXRBYmlJdGVtKCk7CiAgdmFyIGRvY3NQYXRoNyA9ICIvZG9jcy9jb250cmFjdC9lbmNvZGVGdW5jdGlvblJlc3VsdCI7CiAgZnVuY3Rpb24gZW5jb2RlRnVuY3Rpb25SZXN1bHQocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGZ1bmN0aW9uTmFtZSwgcmVzdWx0IH0gPSBwYXJhbWV0ZXJzOwogICAgbGV0IGFiaUl0ZW0gPSBhYmkyWzBdOwogICAgaWYgKGZ1bmN0aW9uTmFtZSkgewogICAgICBjb25zdCBpdGVtID0gZ2V0QWJpSXRlbSh7IGFiaTogYWJpMiwgbmFtZTogZnVuY3Rpb25OYW1lIH0pOwogICAgICBpZiAoIWl0ZW0pCiAgICAgICAgdGhyb3cgbmV3IEFiaUZ1bmN0aW9uTm90Rm91bmRFcnJvcihmdW5jdGlvbk5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoNyB9KTsKICAgICAgYWJpSXRlbSA9IGl0ZW07CiAgICB9CiAgICBpZiAoYWJpSXRlbS50eXBlICE9PSAiZnVuY3Rpb24iKQogICAgICB0aHJvdyBuZXcgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yKHZvaWQgMCwgeyBkb2NzUGF0aDogZG9jc1BhdGg3IH0pOwogICAgaWYgKCFhYmlJdGVtLm91dHB1dHMpCiAgICAgIHRocm93IG5ldyBBYmlGdW5jdGlvbk91dHB1dHNOb3RGb3VuZEVycm9yKGFiaUl0ZW0ubmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg3IH0pOwogICAgbGV0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IFtyZXN1bHRdOwogICAgaWYgKGFiaUl0ZW0ub3V0cHV0cy5sZW5ndGggPT09IDAgJiYgIXZhbHVlc1swXSkKICAgICAgdmFsdWVzID0gW107CiAgICByZXR1cm4gZW5jb2RlQWJpUGFyYW1ldGVycyhhYmlJdGVtLm91dHB1dHMsIHZhbHVlcyk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVQYWNrZWQuanMKICBpbml0X2FiaSgpOwogIGluaXRfYWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzKCk7CiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3BhZCgpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBlbmNvZGVQYWNrZWQodHlwZXMsIHZhbHVlcykgewogICAgaWYgKHR5cGVzLmxlbmd0aCAhPT0gdmFsdWVzLmxlbmd0aCkKICAgICAgdGhyb3cgbmV3IEFiaUVuY29kaW5nTGVuZ3RoTWlzbWF0Y2hFcnJvcih7CiAgICAgICAgZXhwZWN0ZWRMZW5ndGg6IHR5cGVzLmxlbmd0aCwKICAgICAgICBnaXZlbkxlbmd0aDogdmFsdWVzLmxlbmd0aAogICAgICB9KTsKICAgIGNvbnN0IGRhdGEgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgdHlwZSA9IHR5cGVzW2ldOwogICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTsKICAgICAgZGF0YS5wdXNoKGVuY29kZSh0eXBlLCB2YWx1ZSkpOwogICAgfQogICAgcmV0dXJuIGNvbmNhdEhleChkYXRhKTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlKHR5cGUsIHZhbHVlLCBpc0FycmF5ID0gZmFsc2UpIHsKICAgIGlmICh0eXBlID09PSAiYWRkcmVzcyIpIHsKICAgICAgY29uc3QgYWRkcmVzcyA9IHZhbHVlOwogICAgICBpZiAoIWlzQWRkcmVzcyhhZGRyZXNzKSkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3MgfSk7CiAgICAgIHJldHVybiBwYWQoYWRkcmVzcy50b0xvd2VyQ2FzZSgpLCB7CiAgICAgICAgc2l6ZTogaXNBcnJheSA/IDMyIDogbnVsbAogICAgICB9KTsKICAgIH0KICAgIGlmICh0eXBlID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIHN0cmluZ1RvSGV4KHZhbHVlKTsKICAgIGlmICh0eXBlID09PSAiYnl0ZXMiKQogICAgICByZXR1cm4gdmFsdWU7CiAgICBpZiAodHlwZSA9PT0gImJvb2wiKQogICAgICByZXR1cm4gcGFkKGJvb2xUb0hleCh2YWx1ZSksIHsgc2l6ZTogaXNBcnJheSA/IDMyIDogMSB9KTsKICAgIGNvbnN0IGludE1hdGNoID0gdHlwZS5tYXRjaChpbnRlZ2VyUmVnZXgyKTsKICAgIGlmIChpbnRNYXRjaCkgewogICAgICBjb25zdCBbX3R5cGUsIGJhc2VUeXBlLCBiaXRzID0gIjI1NiJdID0gaW50TWF0Y2g7CiAgICAgIGNvbnN0IHNpemUzID0gTnVtYmVyLnBhcnNlSW50KGJpdHMpIC8gODsKICAgICAgcmV0dXJuIG51bWJlclRvSGV4KHZhbHVlLCB7CiAgICAgICAgc2l6ZTogaXNBcnJheSA/IDMyIDogc2l6ZTMsCiAgICAgICAgc2lnbmVkOiBiYXNlVHlwZSA9PT0gImludCIKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBieXRlc01hdGNoID0gdHlwZS5tYXRjaChieXRlc1JlZ2V4Mik7CiAgICBpZiAoYnl0ZXNNYXRjaCkgewogICAgICBjb25zdCBbX3R5cGUsIHNpemUzXSA9IGJ5dGVzTWF0Y2g7CiAgICAgIGlmIChOdW1iZXIucGFyc2VJbnQoc2l6ZTMpICE9PSAodmFsdWUubGVuZ3RoIC0gMikgLyAyKQogICAgICAgIHRocm93IG5ldyBCeXRlc1NpemVNaXNtYXRjaEVycm9yKHsKICAgICAgICAgIGV4cGVjdGVkU2l6ZTogTnVtYmVyLnBhcnNlSW50KHNpemUzKSwKICAgICAgICAgIGdpdmVuU2l6ZTogKHZhbHVlLmxlbmd0aCAtIDIpIC8gMgogICAgICAgIH0pOwogICAgICByZXR1cm4gcGFkKHZhbHVlLCB7IGRpcjogInJpZ2h0Iiwgc2l6ZTogaXNBcnJheSA/IDMyIDogbnVsbCB9KTsKICAgIH0KICAgIGNvbnN0IGFycmF5TWF0Y2ggPSB0eXBlLm1hdGNoKGFycmF5UmVnZXgpOwogICAgaWYgKGFycmF5TWF0Y2ggJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgY29uc3QgW190eXBlLCBjaGlsZFR5cGVdID0gYXJyYXlNYXRjaDsKICAgICAgY29uc3QgZGF0YSA9IFtdOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgZGF0YS5wdXNoKGVuY29kZShjaGlsZFR5cGUsIHZhbHVlW2ldLCB0cnVlKSk7CiAgICAgIH0KICAgICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybiAiMHgiOwogICAgICByZXR1cm4gY29uY2F0SGV4KGRhdGEpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkUGFja2VkQWJpVHlwZSh0eXBlKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9nZXRDb250cmFjdEFkZHJlc3MuanMKICBpbml0X2NvbmNhdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvaXNCeXRlcy5qcwogIGZ1bmN0aW9uIGlzQnl0ZXMzKHZhbHVlKSB7CiAgICBpZiAoIXZhbHVlKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAib2JqZWN0IikKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKCEoIkJZVEVTX1BFUl9FTEVNRU5UIiBpbiB2YWx1ZSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB2YWx1ZS5CWVRFU19QRVJfRUxFTUVOVCA9PT0gMSAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lID09PSAiVWludDhBcnJheSI7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FkZHJlc3MvZ2V0Q29udHJhY3RBZGRyZXNzLmpzCiAgaW5pdF9wYWQoKTsKICBpbml0X3NsaWNlKCk7CiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF9rZWNjYWsyNTYoKTsKICBpbml0X2dldEFkZHJlc3MoKTsKICBmdW5jdGlvbiBnZXRDb250cmFjdEFkZHJlc3MyKG9wdHMpIHsKICAgIGlmIChvcHRzLm9wY29kZSA9PT0gIkNSRUFURTIiKQogICAgICByZXR1cm4gZ2V0Q3JlYXRlMkFkZHJlc3Mob3B0cyk7CiAgICByZXR1cm4gZ2V0Q3JlYXRlQWRkcmVzcyhvcHRzKTsKICB9CiAgZnVuY3Rpb24gZ2V0Q3JlYXRlQWRkcmVzcyhvcHRzKSB7CiAgICBjb25zdCBmcm9tID0gdG9CeXRlcyhnZXRBZGRyZXNzKG9wdHMuZnJvbSkpOwogICAgbGV0IG5vbmNlID0gdG9CeXRlcyhvcHRzLm5vbmNlKTsKICAgIGlmIChub25jZVswXSA9PT0gMCkKICAgICAgbm9uY2UgPSBuZXcgVWludDhBcnJheShbXSk7CiAgICByZXR1cm4gZ2V0QWRkcmVzcyhgMHgke2tlY2NhazI1Nih0b1JscChbZnJvbSwgbm9uY2VdLCAiYnl0ZXMiKSkuc2xpY2UoMjYpfWApOwogIH0KICBmdW5jdGlvbiBnZXRDcmVhdGUyQWRkcmVzcyhvcHRzKSB7CiAgICBjb25zdCBmcm9tID0gdG9CeXRlcyhnZXRBZGRyZXNzKG9wdHMuZnJvbSkpOwogICAgY29uc3Qgc2FsdCA9IHBhZChpc0J5dGVzMyhvcHRzLnNhbHQpID8gb3B0cy5zYWx0IDogdG9CeXRlcyhvcHRzLnNhbHQpLCB7CiAgICAgIHNpemU6IDMyCiAgICB9KTsKICAgIGNvbnN0IGJ5dGVjb2RlSGFzaCA9ICgoKSA9PiB7CiAgICAgIGlmICgiYnl0ZWNvZGVIYXNoIiBpbiBvcHRzKSB7CiAgICAgICAgaWYgKGlzQnl0ZXMzKG9wdHMuYnl0ZWNvZGVIYXNoKSkKICAgICAgICAgIHJldHVybiBvcHRzLmJ5dGVjb2RlSGFzaDsKICAgICAgICByZXR1cm4gdG9CeXRlcyhvcHRzLmJ5dGVjb2RlSGFzaCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGtlY2NhazI1NihvcHRzLmJ5dGVjb2RlLCAiYnl0ZXMiKTsKICAgIH0pKCk7CiAgICByZXR1cm4gZ2V0QWRkcmVzcyhzbGljZShrZWNjYWsyNTYoY29uY2F0KFt0b0J5dGVzKCIweGZmIiksIGZyb20sIHNhbHQsIGJ5dGVjb2RlSGFzaF0pKSwgMTIpKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZm9ybWF0dGVycy90cmFuc2FjdGlvblJlY2VpcHQuanMKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X2Zvcm1hdHRlcigpOwogIHZhciByZWNlaXB0U3RhdHVzZXMgPSB7CiAgICAiMHgwIjogInJldmVydGVkIiwKICAgICIweDEiOiAic3VjY2VzcyIKICB9OwogIGZ1bmN0aW9uIGZvcm1hdFRyYW5zYWN0aW9uUmVjZWlwdCh0cmFuc2FjdGlvblJlY2VpcHQpIHsKICAgIGNvbnN0IHJlY2VpcHQgPSB7CiAgICAgIC4uLnRyYW5zYWN0aW9uUmVjZWlwdCwKICAgICAgYmxvY2tOdW1iZXI6IHRyYW5zYWN0aW9uUmVjZWlwdC5ibG9ja051bWJlciA/IEJpZ0ludCh0cmFuc2FjdGlvblJlY2VpcHQuYmxvY2tOdW1iZXIpIDogbnVsbCwKICAgICAgY29udHJhY3RBZGRyZXNzOiB0cmFuc2FjdGlvblJlY2VpcHQuY29udHJhY3RBZGRyZXNzID8gdHJhbnNhY3Rpb25SZWNlaXB0LmNvbnRyYWN0QWRkcmVzcyA6IG51bGwsCiAgICAgIGN1bXVsYXRpdmVHYXNVc2VkOiB0cmFuc2FjdGlvblJlY2VpcHQuY3VtdWxhdGl2ZUdhc1VzZWQgPyBCaWdJbnQodHJhbnNhY3Rpb25SZWNlaXB0LmN1bXVsYXRpdmVHYXNVc2VkKSA6IG51bGwsCiAgICAgIGVmZmVjdGl2ZUdhc1ByaWNlOiB0cmFuc2FjdGlvblJlY2VpcHQuZWZmZWN0aXZlR2FzUHJpY2UgPyBCaWdJbnQodHJhbnNhY3Rpb25SZWNlaXB0LmVmZmVjdGl2ZUdhc1ByaWNlKSA6IG51bGwsCiAgICAgIGdhc1VzZWQ6IHRyYW5zYWN0aW9uUmVjZWlwdC5nYXNVc2VkID8gQmlnSW50KHRyYW5zYWN0aW9uUmVjZWlwdC5nYXNVc2VkKSA6IG51bGwsCiAgICAgIGxvZ3M6IHRyYW5zYWN0aW9uUmVjZWlwdC5sb2dzID8gdHJhbnNhY3Rpb25SZWNlaXB0LmxvZ3MubWFwKChsb2cpID0+IGZvcm1hdExvZyhsb2cpKSA6IG51bGwsCiAgICAgIHRvOiB0cmFuc2FjdGlvblJlY2VpcHQudG8gPyB0cmFuc2FjdGlvblJlY2VpcHQudG8gOiBudWxsLAogICAgICB0cmFuc2FjdGlvbkluZGV4OiB0cmFuc2FjdGlvblJlY2VpcHQudHJhbnNhY3Rpb25JbmRleCA/IGhleFRvTnVtYmVyKHRyYW5zYWN0aW9uUmVjZWlwdC50cmFuc2FjdGlvbkluZGV4KSA6IG51bGwsCiAgICAgIHN0YXR1czogdHJhbnNhY3Rpb25SZWNlaXB0LnN0YXR1cyA/IHJlY2VpcHRTdGF0dXNlc1t0cmFuc2FjdGlvblJlY2VpcHQuc3RhdHVzXSA6IG51bGwsCiAgICAgIHR5cGU6IHRyYW5zYWN0aW9uUmVjZWlwdC50eXBlID8gdHJhbnNhY3Rpb25UeXBlW3RyYW5zYWN0aW9uUmVjZWlwdC50eXBlXSB8fCB0cmFuc2FjdGlvblJlY2VpcHQudHlwZSA6IG51bGwKICAgIH07CiAgICBpZiAodHJhbnNhY3Rpb25SZWNlaXB0LmJsb2JHYXNQcmljZSkKICAgICAgcmVjZWlwdC5ibG9iR2FzUHJpY2UgPSBCaWdJbnQodHJhbnNhY3Rpb25SZWNlaXB0LmJsb2JHYXNQcmljZSk7CiAgICBpZiAodHJhbnNhY3Rpb25SZWNlaXB0LmJsb2JHYXNVc2VkKQogICAgICByZWNlaXB0LmJsb2JHYXNVc2VkID0gQmlnSW50KHRyYW5zYWN0aW9uUmVjZWlwdC5ibG9iR2FzVXNlZCk7CiAgICByZXR1cm4gcmVjZWlwdDsKICB9CiAgdmFyIGRlZmluZVRyYW5zYWN0aW9uUmVjZWlwdCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVGb3JtYXR0ZXIoInRyYW5zYWN0aW9uUmVjZWlwdCIsIGZvcm1hdFRyYW5zYWN0aW9uUmVjZWlwdCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaW5kZXguanMKICBpbml0X2Zyb21IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbmNvZGluZy9mcm9tUmxwLmpzCiAgaW5pdF9iYXNlKCk7CiAgaW5pdF9lbmNvZGluZygpOwogIGluaXRfY3Vyc29yMigpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBmcm9tUmxwKHZhbHVlLCB0byA9ICJoZXgiKSB7CiAgICBjb25zdCBieXRlczIgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgewogICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAzICYmIHZhbHVlLmxlbmd0aCAlIDIgIT09IDApCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEhleFZhbHVlRXJyb3IodmFsdWUpOwogICAgICAgIHJldHVybiBoZXhUb0J5dGVzKHZhbHVlKTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWU7CiAgICB9KSgpOwogICAgY29uc3QgY3Vyc29yID0gY3JlYXRlQ3Vyc29yKGJ5dGVzMiwgewogICAgICByZWN1cnNpdmVSZWFkTGltaXQ6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWQogICAgfSk7CiAgICBjb25zdCByZXN1bHQgPSBmcm9tUmxwQ3Vyc29yKGN1cnNvciwgdG8pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gZnJvbVJscEN1cnNvcihjdXJzb3IsIHRvID0gImhleCIpIHsKICAgIGlmIChjdXJzb3IuYnl0ZXMubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gdG8gPT09ICJoZXgiID8gYnl0ZXNUb0hleChjdXJzb3IuYnl0ZXMpIDogY3Vyc29yLmJ5dGVzOwogICAgY29uc3QgcHJlZml4ID0gY3Vyc29yLnJlYWRCeXRlKCk7CiAgICBpZiAocHJlZml4IDwgMTI4KQogICAgICBjdXJzb3IuZGVjcmVtZW50UG9zaXRpb24oMSk7CiAgICBpZiAocHJlZml4IDwgMTkyKSB7CiAgICAgIGNvbnN0IGxlbmd0aDIgPSByZWFkTGVuZ3RoKGN1cnNvciwgcHJlZml4LCAxMjgpOwogICAgICBjb25zdCBieXRlczIgPSBjdXJzb3IucmVhZEJ5dGVzKGxlbmd0aDIpOwogICAgICByZXR1cm4gdG8gPT09ICJoZXgiID8gYnl0ZXNUb0hleChieXRlczIpIDogYnl0ZXMyOwogICAgfQogICAgY29uc3QgbGVuZ3RoID0gcmVhZExlbmd0aChjdXJzb3IsIHByZWZpeCwgMTkyKTsKICAgIHJldHVybiByZWFkTGlzdChjdXJzb3IsIGxlbmd0aCwgdG8pOwogIH0KICBmdW5jdGlvbiByZWFkTGVuZ3RoKGN1cnNvciwgcHJlZml4LCBvZmZzZXQpIHsKICAgIGlmIChvZmZzZXQgPT09IDEyOCAmJiBwcmVmaXggPCAxMjgpCiAgICAgIHJldHVybiAxOwogICAgaWYgKHByZWZpeCA8PSBvZmZzZXQgKyA1NSkKICAgICAgcmV0dXJuIHByZWZpeCAtIG9mZnNldDsKICAgIGlmIChwcmVmaXggPT09IG9mZnNldCArIDU1ICsgMSkKICAgICAgcmV0dXJuIGN1cnNvci5yZWFkVWludDgoKTsKICAgIGlmIChwcmVmaXggPT09IG9mZnNldCArIDU1ICsgMikKICAgICAgcmV0dXJuIGN1cnNvci5yZWFkVWludDE2KCk7CiAgICBpZiAocHJlZml4ID09PSBvZmZzZXQgKyA1NSArIDMpCiAgICAgIHJldHVybiBjdXJzb3IucmVhZFVpbnQyNCgpOwogICAgaWYgKHByZWZpeCA9PT0gb2Zmc2V0ICsgNTUgKyA0KQogICAgICByZXR1cm4gY3Vyc29yLnJlYWRVaW50MzIoKTsKICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJJbnZhbGlkIFJMUCBwcmVmaXgiKTsKICB9CiAgZnVuY3Rpb24gcmVhZExpc3QoY3Vyc29yLCBsZW5ndGgsIHRvKSB7CiAgICBjb25zdCBwb3NpdGlvbiA9IGN1cnNvci5wb3NpdGlvbjsKICAgIGNvbnN0IHZhbHVlID0gW107CiAgICB3aGlsZSAoY3Vyc29yLnBvc2l0aW9uIC0gcG9zaXRpb24gPCBsZW5ndGgpCiAgICAgIHZhbHVlLnB1c2goZnJvbVJscEN1cnNvcihjdXJzb3IsIHRvKSk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9FdmVudFNpZ25hdHVyZS5qcwogIGluaXRfdG9TaWduYXR1cmUoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvRnVuY3Rpb25TaWduYXR1cmUuanMKICBpbml0X3RvU2lnbmF0dXJlKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b0V2ZW50SGFzaC5qcwogIGluaXRfdG9TaWduYXR1cmVIYXNoKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b0Z1bmN0aW9uSGFzaC5qcwogIGluaXRfdG9TaWduYXR1cmVIYXNoKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9pc0hhc2guanMKICBpbml0X2lzSGV4KCk7CiAgaW5pdF9zaXplKCk7CiAgZnVuY3Rpb24gaXNIYXNoKGhhc2gzKSB7CiAgICByZXR1cm4gaXNIZXgoaGFzaDMpICYmIHNpemUoaGFzaDMpID09PSAzMjsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9yaXBlbWQxNjAuanMKICBpbml0X21kKCk7CiAgaW5pdF91dGlsczIoKTsKICB2YXIgUmhvID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50OEFycmF5KFs3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4XSk7CiAgdmFyIElkID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50OEFycmF5KG5ldyBBcnJheSgxNikuZmlsbCgwKS5tYXAoKF8sIGkpID0+IGkpKTsKICB2YXIgUGkgPSAvKiBAX19QVVJFX18gKi8gSWQubWFwKChpKSA9PiAoOSAqIGkgKyA1KSAlIDE2KTsKICB2YXIgaWR4TCA9IFtJZF07CiAgdmFyIGlkeFIgPSBbUGldOwogIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKQogICAgZm9yIChsZXQgaiBvZiBbaWR4TCwgaWR4Ul0pCiAgICAgIGoucHVzaChqW2ldLm1hcCgoaykgPT4gUmhvW2tdKSk7CiAgdmFyIHNoaWZ0cyA9IC8qIEBfX1BVUkVfXyAqLyBbCiAgICBbMTEsIDE0LCAxNSwgMTIsIDUsIDgsIDcsIDksIDExLCAxMywgMTQsIDE1LCA2LCA3LCA5LCA4XSwKICAgIFsxMiwgMTMsIDExLCAxNSwgNiwgOSwgOSwgNywgMTIsIDE1LCAxMSwgMTMsIDcsIDgsIDcsIDddLAogICAgWzEzLCAxNSwgMTQsIDExLCA3LCA3LCA2LCA4LCAxMywgMTQsIDEzLCAxMiwgNSwgNSwgNiwgOV0sCiAgICBbMTQsIDExLCAxMiwgMTQsIDgsIDYsIDUsIDUsIDE1LCAxMiwgMTUsIDE0LCA5LCA5LCA4LCA2XSwKICAgIFsxNSwgMTIsIDEzLCAxMywgOSwgNSwgOCwgNiwgMTQsIDExLCAxMiwgMTEsIDgsIDYsIDUsIDVdCiAgXS5tYXAoKGkpID0+IG5ldyBVaW50OEFycmF5KGkpKTsKICB2YXIgc2hpZnRzTCA9IC8qIEBfX1BVUkVfXyAqLyBpZHhMLm1hcCgoaWR4LCBpKSA9PiBpZHgubWFwKChqKSA9PiBzaGlmdHNbaV1bal0pKTsKICB2YXIgc2hpZnRzUiA9IC8qIEBfX1BVUkVfXyAqLyBpZHhSLm1hcCgoaWR4LCBpKSA9PiBpZHgubWFwKChqKSA9PiBzaGlmdHNbaV1bal0pKTsKICB2YXIgS2wgPSAvKiBAX19QVVJFX18gKi8gbmV3IFVpbnQzMkFycmF5KFsKICAgIDAsCiAgICAxNTE4NTAwMjQ5LAogICAgMTg1OTc3NTM5MywKICAgIDI0MDA5NTk3MDgsCiAgICAyODQwODUzODM4CiAgXSk7CiAgdmFyIEtyID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheShbCiAgICAxMzUyODI5OTI2LAogICAgMTU0ODYwMzY4NCwKICAgIDE4MzYwNzI2OTEsCiAgICAyMDUzOTk0MjE3LAogICAgMAogIF0pOwogIGZ1bmN0aW9uIGYoZ3JvdXAsIHgsIHksIHopIHsKICAgIGlmIChncm91cCA9PT0gMCkKICAgICAgcmV0dXJuIHggXiB5IF4gejsKICAgIGVsc2UgaWYgKGdyb3VwID09PSAxKQogICAgICByZXR1cm4geCAmIHkgfCB+eCAmIHo7CiAgICBlbHNlIGlmIChncm91cCA9PT0gMikKICAgICAgcmV0dXJuICh4IHwgfnkpIF4gejsKICAgIGVsc2UgaWYgKGdyb3VwID09PSAzKQogICAgICByZXR1cm4geCAmIHogfCB5ICYgfno7CiAgICBlbHNlCiAgICAgIHJldHVybiB4IF4gKHkgfCB+eik7CiAgfQogIHZhciBSX0JVRiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgVWludDMyQXJyYXkoMTYpOwogIHZhciBSSVBFTUQxNjAgPSBjbGFzcyBleHRlbmRzIEhhc2hNRCB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoNjQsIDIwLCA4LCB0cnVlKTsKICAgICAgdGhpcy5oMCA9IDE3MzI1ODQxOTMgfCAwOwogICAgICB0aGlzLmgxID0gNDAyMzIzMzQxNyB8IDA7CiAgICAgIHRoaXMuaDIgPSAyNTYyMzgzMTAyIHwgMDsKICAgICAgdGhpcy5oMyA9IDI3MTczMzg3OCB8IDA7CiAgICAgIHRoaXMuaDQgPSAzMjg1Mzc3NTIwIHwgMDsKICAgIH0KICAgIGdldCgpIHsKICAgICAgY29uc3QgeyBoMCwgaDEsIGgyLCBoMywgaDQgfSA9IHRoaXM7CiAgICAgIHJldHVybiBbaDAsIGgxLCBoMiwgaDMsIGg0XTsKICAgIH0KICAgIHNldChoMCwgaDEsIGgyLCBoMywgaDQpIHsKICAgICAgdGhpcy5oMCA9IGgwIHwgMDsKICAgICAgdGhpcy5oMSA9IGgxIHwgMDsKICAgICAgdGhpcy5oMiA9IGgyIHwgMDsKICAgICAgdGhpcy5oMyA9IGgzIHwgMDsKICAgICAgdGhpcy5oNCA9IGg0IHwgMDsKICAgIH0KICAgIHByb2Nlc3Modmlldywgb2Zmc2V0KSB7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKywgb2Zmc2V0ICs9IDQpCiAgICAgICAgUl9CVUZbaV0gPSB2aWV3LmdldFVpbnQzMihvZmZzZXQsIHRydWUpOwogICAgICBsZXQgYWwgPSB0aGlzLmgwIHwgMCwgYXIgPSBhbCwgYmwgPSB0aGlzLmgxIHwgMCwgYnIgPSBibCwgY2wgPSB0aGlzLmgyIHwgMCwgY3IgPSBjbCwgZGwgPSB0aGlzLmgzIHwgMCwgZHIgPSBkbCwgZWwgPSB0aGlzLmg0IHwgMCwgZXIgPSBlbDsKICAgICAgZm9yIChsZXQgZ3JvdXAgPSAwOyBncm91cCA8IDU7IGdyb3VwKyspIHsKICAgICAgICBjb25zdCByR3JvdXAgPSA0IC0gZ3JvdXA7CiAgICAgICAgY29uc3QgaGJsID0gS2xbZ3JvdXBdLCBoYnIgPSBLcltncm91cF07CiAgICAgICAgY29uc3QgcmwgPSBpZHhMW2dyb3VwXSwgcnIgPSBpZHhSW2dyb3VwXTsKICAgICAgICBjb25zdCBzbCA9IHNoaWZ0c0xbZ3JvdXBdLCBzciA9IHNoaWZ0c1JbZ3JvdXBdOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgewogICAgICAgICAgY29uc3QgdGwgPSByb3RsKGFsICsgZihncm91cCwgYmwsIGNsLCBkbCkgKyBSX0JVRltybFtpXV0gKyBoYmwsIHNsW2ldKSArIGVsIHwgMDsKICAgICAgICAgIGFsID0gZWwsIGVsID0gZGwsIGRsID0gcm90bChjbCwgMTApIHwgMCwgY2wgPSBibCwgYmwgPSB0bDsKICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAgICAgICAgICBjb25zdCB0ciA9IHJvdGwoYXIgKyBmKHJHcm91cCwgYnIsIGNyLCBkcikgKyBSX0JVRltycltpXV0gKyBoYnIsIHNyW2ldKSArIGVyIHwgMDsKICAgICAgICAgIGFyID0gZXIsIGVyID0gZHIsIGRyID0gcm90bChjciwgMTApIHwgMCwgY3IgPSBiciwgYnIgPSB0cjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5zZXQodGhpcy5oMSArIGNsICsgZHIgfCAwLCB0aGlzLmgyICsgZGwgKyBlciB8IDAsIHRoaXMuaDMgKyBlbCArIGFyIHwgMCwgdGhpcy5oNCArIGFsICsgYnIgfCAwLCB0aGlzLmgwICsgYmwgKyBjciB8IDApOwogICAgfQogICAgcm91bmRDbGVhbigpIHsKICAgICAgUl9CVUYuZmlsbCgwKTsKICAgIH0KICAgIGRlc3Ryb3koKSB7CiAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgICAgdGhpcy5idWZmZXIuZmlsbCgwKTsKICAgICAgdGhpcy5zZXQoMCwgMCwgMCwgMCwgMCk7CiAgICB9CiAgfTsKICB2YXIgcmlwZW1kMTYwID0gLyogQF9fUFVSRV9fICovIHdyYXBDb25zdHJ1Y3RvcigoKSA9PiBuZXcgUklQRU1EMTYwKCkpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvcmlwZW1kMTYwLmpzCiAgaW5pdF9pc0hleCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiByaXBlbWQxNjAyKHZhbHVlLCB0b18pIHsKICAgIGNvbnN0IHRvID0gdG9fIHx8ICJoZXgiOwogICAgY29uc3QgYnl0ZXMyID0gcmlwZW1kMTYwKGlzSGV4KHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSkgPyB0b0J5dGVzKHZhbHVlKSA6IHZhbHVlKTsKICAgIGlmICh0byA9PT0gImJ5dGVzIikKICAgICAgcmV0dXJuIGJ5dGVzMjsKICAgIHJldHVybiB0b0hleChieXRlczIpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvaGFzaE1lc3NhZ2UuanMKICBpbml0X2tlY2NhazI1NigpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9zdHJpbmdzLmpzCiAgdmFyIHByZXNpZ25NZXNzYWdlUHJlZml4ID0gIhlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcbiI7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3RvUHJlZml4ZWRNZXNzYWdlLmpzCiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gdG9QcmVmaXhlZE1lc3NhZ2UobWVzc2FnZV8pIHsKICAgIGNvbnN0IG1lc3NhZ2UgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIG1lc3NhZ2VfID09PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gc3RyaW5nVG9IZXgobWVzc2FnZV8pOwogICAgICBpZiAodHlwZW9mIG1lc3NhZ2VfLnJhdyA9PT0gInN0cmluZyIpCiAgICAgICAgcmV0dXJuIG1lc3NhZ2VfLnJhdzsKICAgICAgcmV0dXJuIGJ5dGVzVG9IZXgobWVzc2FnZV8ucmF3KTsKICAgIH0pKCk7CiAgICBjb25zdCBwcmVmaXggPSBzdHJpbmdUb0hleChgJHtwcmVzaWduTWVzc2FnZVByZWZpeH0ke3NpemUobWVzc2FnZSl9YCk7CiAgICByZXR1cm4gY29uY2F0KFtwcmVmaXgsIG1lc3NhZ2VdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL2hhc2hNZXNzYWdlLmpzCiAgZnVuY3Rpb24gaGFzaE1lc3NhZ2UobWVzc2FnZSwgdG9fKSB7CiAgICByZXR1cm4ga2VjY2FrMjU2KHRvUHJlZml4ZWRNZXNzYWdlKG1lc3NhZ2UpLCB0b18pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcmVjb3Zlck1lc3NhZ2VBZGRyZXNzLmpzCiAgYXN5bmMgZnVuY3Rpb24gcmVjb3Zlck1lc3NhZ2VBZGRyZXNzKHsgbWVzc2FnZSwgc2lnbmF0dXJlIH0pIHsKICAgIHJldHVybiByZWNvdmVyQWRkcmVzcyh7IGhhc2g6IGhhc2hNZXNzYWdlKG1lc3NhZ2UpLCBzaWduYXR1cmUgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3NpZ25hdHVyZS9yZWNvdmVyVHlwZWREYXRhQWRkcmVzcy5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJUeXBlZERhdGFBZGRyZXNzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgZG9tYWluLCBtZXNzYWdlLCBwcmltYXJ5VHlwZSwgc2lnbmF0dXJlLCB0eXBlcyB9ID0gcGFyYW1ldGVyczsKICAgIHJldHVybiByZWNvdmVyQWRkcmVzcyh7CiAgICAgIGhhc2g6IGhhc2hUeXBlZERhdGEoewogICAgICAgIGRvbWFpbiwKICAgICAgICBtZXNzYWdlLAogICAgICAgIHByaW1hcnlUeXBlLAogICAgICAgIHR5cGVzCiAgICAgIH0pLAogICAgICBzaWduYXR1cmUKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvdmVyaWZ5SGFzaC5qcwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzRXF1YWwoKTsKICBhc3luYyBmdW5jdGlvbiB2ZXJpZnlIYXNoKHsgYWRkcmVzcywgaGFzaDogaGFzaDMsIHNpZ25hdHVyZSB9KSB7CiAgICByZXR1cm4gaXNBZGRyZXNzRXF1YWwoZ2V0QWRkcmVzcyhhZGRyZXNzKSwgYXdhaXQgcmVjb3ZlckFkZHJlc3MoeyBoYXNoOiBoYXNoMywgc2lnbmF0dXJlIH0pKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3ZlcmlmeU1lc3NhZ2UuanMKICBpbml0X2dldEFkZHJlc3MoKTsKICBpbml0X2lzQWRkcmVzc0VxdWFsKCk7CiAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5TWVzc2FnZSh7IGFkZHJlc3MsIG1lc3NhZ2UsIHNpZ25hdHVyZSB9KSB7CiAgICByZXR1cm4gaXNBZGRyZXNzRXF1YWwoZ2V0QWRkcmVzcyhhZGRyZXNzKSwgYXdhaXQgcmVjb3Zlck1lc3NhZ2VBZGRyZXNzKHsgbWVzc2FnZSwgc2lnbmF0dXJlIH0pKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3ZlcmlmeVR5cGVkRGF0YS5qcwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzRXF1YWwoKTsKICBhc3luYyBmdW5jdGlvbiB2ZXJpZnlUeXBlZERhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhZGRyZXNzLCBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCBzaWduYXR1cmUsIHR5cGVzIH0gPSBwYXJhbWV0ZXJzOwogICAgcmV0dXJuIGlzQWRkcmVzc0VxdWFsKGdldEFkZHJlc3MoYWRkcmVzcyksIGF3YWl0IHJlY292ZXJUeXBlZERhdGFBZGRyZXNzKHsKICAgICAgZG9tYWluLAogICAgICBtZXNzYWdlLAogICAgICBwcmltYXJ5VHlwZSwKICAgICAgc2lnbmF0dXJlLAogICAgICB0eXBlcwogICAgfSkpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcGFyc2VFcmM2NDkyU2lnbmF0dXJlLmpzCiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2J5dGVzLmpzCiAgdmFyIGVyYzY0OTJNYWdpY0J5dGVzID0gIjB4NjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MiI7CiAgdmFyIHplcm9IYXNoID0gIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL2lzRXJjNjQ5MlNpZ25hdHVyZS5qcwogIGluaXRfc2xpY2UoKTsKICBmdW5jdGlvbiBpc0VyYzY0OTJTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gc2xpY2VIZXgoc2lnbmF0dXJlLCAtMzIpID09PSBlcmM2NDkyTWFnaWNCeXRlczsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3BhcnNlRXJjNjQ5MlNpZ25hdHVyZS5qcwogIGZ1bmN0aW9uIHBhcnNlRXJjNjQ5MlNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIGlmICghaXNFcmM2NDkyU2lnbmF0dXJlKHNpZ25hdHVyZSkpCiAgICAgIHJldHVybiB7IHNpZ25hdHVyZSB9OwogICAgY29uc3QgW2FkZHJlc3MsIGRhdGEsIHNpZ25hdHVyZV9dID0gZGVjb2RlQWJpUGFyYW1ldGVycyhbeyB0eXBlOiAiYWRkcmVzcyIgfSwgeyB0eXBlOiAiYnl0ZXMiIH0sIHsgdHlwZTogImJ5dGVzIiB9XSwgc2lnbmF0dXJlKTsKICAgIHJldHVybiB7IGFkZHJlc3MsIGRhdGEsIHNpZ25hdHVyZTogc2lnbmF0dXJlXyB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZS5qcwogIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogIGluaXRfY29uY2F0KCk7CiAgaW5pdF90b0J5dGVzKCk7CiAgZnVuY3Rpb24gc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGRhdGEsIHNpZ25hdHVyZSwgdG8gPSAiaGV4IiB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZV8gPSBjb25jYXRIZXgoWwogICAgICBlbmNvZGVBYmlQYXJhbWV0ZXJzKFt7IHR5cGU6ICJhZGRyZXNzIiB9LCB7IHR5cGU6ICJieXRlcyIgfSwgeyB0eXBlOiAiYnl0ZXMiIH1dLCBbYWRkcmVzcywgZGF0YSwgc2lnbmF0dXJlXSksCiAgICAgIGVyYzY0OTJNYWdpY0J5dGVzCiAgICBdKTsKICAgIGlmICh0byA9PT0gImhleCIpCiAgICAgIHJldHVybiBzaWduYXR1cmVfOwogICAgcmV0dXJuIGhleFRvQnl0ZXMoc2lnbmF0dXJlXyk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL2dldFNlcmlhbGl6ZWRUcmFuc2FjdGlvblR5cGUuanMKICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgaW5pdF9zbGljZSgpOwogIGluaXRfZnJvbUhleCgpOwogIGZ1bmN0aW9uIGdldFNlcmlhbGl6ZWRUcmFuc2FjdGlvblR5cGUoc2VyaWFsaXplZFRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCBzZXJpYWxpemVkVHlwZSA9IHNsaWNlSGV4KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwgMCwgMSk7CiAgICBpZiAoc2VyaWFsaXplZFR5cGUgPT09ICIweDA0IikKICAgICAgcmV0dXJuICJlaXA3NzAyIjsKICAgIGlmIChzZXJpYWxpemVkVHlwZSA9PT0gIjB4MDMiKQogICAgICByZXR1cm4gImVpcDQ4NDQiOwogICAgaWYgKHNlcmlhbGl6ZWRUeXBlID09PSAiMHgwMiIpCiAgICAgIHJldHVybiAiZWlwMTU1OSI7CiAgICBpZiAoc2VyaWFsaXplZFR5cGUgPT09ICIweDAxIikKICAgICAgcmV0dXJuICJlaXAyOTMwIjsKICAgIGlmIChzZXJpYWxpemVkVHlwZSAhPT0gIjB4IiAmJiBoZXhUb051bWJlcihzZXJpYWxpemVkVHlwZSkgPj0gMTkyKQogICAgICByZXR1cm4gImxlZ2FjeSI7CiAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvblR5cGVFcnJvcih7IHNlcmlhbGl6ZWRUeXBlIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9hc3NlcnRUcmFuc2FjdGlvbi5qcwogIGluaXRfYWRkcmVzcygpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY2hhaW4oKTsKICBpbml0X25vZGUoKTsKICBpbml0X2lzQWRkcmVzcygpOwogIGluaXRfc2l6ZSgpOwogIGluaXRfc2xpY2UoKTsKICBpbml0X2Zyb21IZXgoKTsKICBmdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkVJUDc3MDIodHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHsgYXV0aG9yaXphdGlvbkxpc3QgfSA9IHRyYW5zYWN0aW9uOwogICAgaWYgKGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICAgIGZvciAoY29uc3QgYXV0aG9yaXphdGlvbiBvZiBhdXRob3JpemF0aW9uTGlzdCkgewogICAgICAgIGNvbnN0IHsgY29udHJhY3RBZGRyZXNzLCBjaGFpbklkIH0gPSBhdXRob3JpemF0aW9uOwogICAgICAgIGlmICghaXNBZGRyZXNzKGNvbnRyYWN0QWRkcmVzcykpCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IGNvbnRyYWN0QWRkcmVzcyB9KTsKICAgICAgICBpZiAoY2hhaW5JZCA8PSAwKQogICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRDaGFpbklkRXJyb3IoeyBjaGFpbklkIH0pOwogICAgICB9CiAgICB9CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDE1NTkodHJhbnNhY3Rpb24pOwogIH0KICBmdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkVJUDQ4NDQodHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHsgYmxvYlZlcnNpb25lZEhhc2hlcyB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoYmxvYlZlcnNpb25lZEhhc2hlcykgewogICAgICBpZiAoYmxvYlZlcnNpb25lZEhhc2hlcy5sZW5ndGggPT09IDApCiAgICAgICAgdGhyb3cgbmV3IEVtcHR5QmxvYkVycm9yKCk7CiAgICAgIGZvciAoY29uc3QgaGFzaDMgb2YgYmxvYlZlcnNpb25lZEhhc2hlcykgewogICAgICAgIGNvbnN0IHNpemVfID0gc2l6ZShoYXNoMyk7CiAgICAgICAgY29uc3QgdmVyc2lvbjMgPSBoZXhUb051bWJlcihzbGljZShoYXNoMywgMCwgMSkpOwogICAgICAgIGlmIChzaXplXyAhPT0gMzIpCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFZlcnNpb25lZEhhc2hTaXplRXJyb3IoeyBoYXNoOiBoYXNoMywgc2l6ZTogc2l6ZV8gfSk7CiAgICAgICAgaWYgKHZlcnNpb24zICE9PSB2ZXJzaW9uZWRIYXNoVmVyc2lvbkt6ZykKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkVmVyc2lvbmVkSGFzaFZlcnNpb25FcnJvcih7CiAgICAgICAgICAgIGhhc2g6IGhhc2gzLAogICAgICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uMwogICAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQMTU1OSh0cmFuc2FjdGlvbik7CiAgfQogIGZ1bmN0aW9uIGFzc2VydFRyYW5zYWN0aW9uRUlQMTU1OSh0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbWF4RmVlUGVyR2FzLCB0byB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoY2hhaW5JZCA8PSAwKQogICAgICB0aHJvdyBuZXcgSW52YWxpZENoYWluSWRFcnJvcih7IGNoYWluSWQgfSk7CiAgICBpZiAodG8gJiYgIWlzQWRkcmVzcyh0bykpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogdG8gfSk7CiAgICBpZiAobWF4RmVlUGVyR2FzICYmIG1heEZlZVBlckdhcyA+IDJuICoqIDI1Nm4gLSAxbikKICAgICAgdGhyb3cgbmV3IEZlZUNhcFRvb0hpZ2hFcnJvcih7IG1heEZlZVBlckdhcyB9KTsKICAgIGlmIChtYXhQcmlvcml0eUZlZVBlckdhcyAmJiBtYXhGZWVQZXJHYXMgJiYgbWF4UHJpb3JpdHlGZWVQZXJHYXMgPiBtYXhGZWVQZXJHYXMpCiAgICAgIHRocm93IG5ldyBUaXBBYm92ZUZlZUNhcEVycm9yKHsgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcyB9KTsKICB9CiAgZnVuY3Rpb24gYXNzZXJ0VHJhbnNhY3Rpb25FSVAyOTMwKHRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCB7IGNoYWluSWQsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyR2FzLCB0byB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoY2hhaW5JZCA8PSAwKQogICAgICB0aHJvdyBuZXcgSW52YWxpZENoYWluSWRFcnJvcih7IGNoYWluSWQgfSk7CiAgICBpZiAodG8gJiYgIWlzQWRkcmVzcyh0bykpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogdG8gfSk7CiAgICBpZiAobWF4UHJpb3JpdHlGZWVQZXJHYXMgfHwgbWF4RmVlUGVyR2FzKQogICAgICB0aHJvdyBuZXcgQmFzZUVycm9yMigiYG1heEZlZVBlckdhc2AvYG1heFByaW9yaXR5RmVlUGVyR2FzYCBpcyBub3QgYSB2YWxpZCBFSVAtMjkzMCBUcmFuc2FjdGlvbiBhdHRyaWJ1dGUuIik7CiAgICBpZiAoZ2FzUHJpY2UgJiYgZ2FzUHJpY2UgPiAybiAqKiAyNTZuIC0gMW4pCiAgICAgIHRocm93IG5ldyBGZWVDYXBUb29IaWdoRXJyb3IoeyBtYXhGZWVQZXJHYXM6IGdhc1ByaWNlIH0pOwogIH0KICBmdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSh0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBtYXhQcmlvcml0eUZlZVBlckdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckdhcywgdG8gfSA9IHRyYW5zYWN0aW9uOwogICAgaWYgKHRvICYmICFpc0FkZHJlc3ModG8pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IHRvIH0pOwogICAgaWYgKHR5cGVvZiBjaGFpbklkICE9PSAidW5kZWZpbmVkIiAmJiBjaGFpbklkIDw9IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhaW5JZEVycm9yKHsgY2hhaW5JZCB9KTsKICAgIGlmIChtYXhQcmlvcml0eUZlZVBlckdhcyB8fCBtYXhGZWVQZXJHYXMpCiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgbWF4RmVlUGVyR2FzYC9gbWF4UHJpb3JpdHlGZWVQZXJHYXNgIGlzIG5vdCBhIHZhbGlkIExlZ2FjeSBUcmFuc2FjdGlvbiBhdHRyaWJ1dGUuIik7CiAgICBpZiAoZ2FzUHJpY2UgJiYgZ2FzUHJpY2UgPiAybiAqKiAyNTZuIC0gMW4pCiAgICAgIHRocm93IG5ldyBGZWVDYXBUb29IaWdoRXJyb3IoeyBtYXhGZWVQZXJHYXM6IGdhc1ByaWNlIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9wYXJzZVRyYW5zYWN0aW9uLmpzCiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF90cmFuc2FjdGlvbigpOwogIGluaXRfaXNBZGRyZXNzKCk7CiAgaW5pdF9pc0hleCgpOwogIGluaXRfcGFkKCk7CiAgaW5pdF90cmltKCk7CiAgaW5pdF9mcm9tSGV4KCk7CiAgZnVuY3Rpb24gcGFyc2VUcmFuc2FjdGlvbihzZXJpYWxpemVkVHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHR5cGUgPSBnZXRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgICBpZiAodHlwZSA9PT0gImVpcDE1NTkiKQogICAgICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbkVJUDE1NTkoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgIGlmICh0eXBlID09PSAiZWlwMjkzMCIpCiAgICAgIHJldHVybiBwYXJzZVRyYW5zYWN0aW9uRUlQMjkzMChzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgaWYgKHR5cGUgPT09ICJlaXA0ODQ0IikKICAgICAgcmV0dXJuIHBhcnNlVHJhbnNhY3Rpb25FSVA0ODQ0KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgICBpZiAodHlwZSA9PT0gImVpcDc3MDIiKQogICAgICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbkVJUDc3MDIoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgIHJldHVybiBwYXJzZVRyYW5zYWN0aW9uTGVnYWN5KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25FSVA3NzAyKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgY29uc3QgdHJhbnNhY3Rpb25BcnJheSA9IHRvVHJhbnNhY3Rpb25BcnJheShzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3QgW2NoYWluSWQsIG5vbmNlLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbWF4RmVlUGVyR2FzLCBnYXMsIHRvLCB2YWx1ZSwgZGF0YSwgYWNjZXNzTGlzdCwgYXV0aG9yaXphdGlvbkxpc3QsIHYsIHIsIHNdID0gdHJhbnNhY3Rpb25BcnJheTsKICAgIGlmICh0cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCAhPT0gMTAgJiYgdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggIT09IDEzKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yKHsKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBjaGFpbklkLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhcywKICAgICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICAgIGdhcywKICAgICAgICAgIHRvLAogICAgICAgICAgdmFsdWUsCiAgICAgICAgICBkYXRhLAogICAgICAgICAgYWNjZXNzTGlzdCwKICAgICAgICAgIGF1dGhvcml6YXRpb25MaXN0LAogICAgICAgICAgLi4udHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPiA5ID8gewogICAgICAgICAgICB2LAogICAgICAgICAgICByLAogICAgICAgICAgICBzCiAgICAgICAgICB9IDoge30KICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0eXBlOiAiZWlwNzcwMiIKICAgICAgfSk7CiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHsKICAgICAgY2hhaW5JZDogaGV4VG9OdW1iZXIoY2hhaW5JZCksCiAgICAgIHR5cGU6ICJlaXA3NzAyIgogICAgfTsKICAgIGlmIChpc0hleCh0bykgJiYgdG8gIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnRvID0gdG87CiAgICBpZiAoaXNIZXgoZ2FzKSAmJiBnYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhcyA9IGhleFRvQmlnSW50KGdhcyk7CiAgICBpZiAoaXNIZXgoZGF0YSkgJiYgZGF0YSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZGF0YSA9IGRhdGE7CiAgICBpZiAoaXNIZXgobm9uY2UpICYmIG5vbmNlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5ub25jZSA9IGhleFRvTnVtYmVyKG5vbmNlKTsKICAgIGlmIChpc0hleCh2YWx1ZSkgJiYgdmFsdWUgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnZhbHVlID0gaGV4VG9CaWdJbnQodmFsdWUpOwogICAgaWYgKGlzSGV4KG1heEZlZVBlckdhcykgJiYgbWF4RmVlUGVyR2FzICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5tYXhGZWVQZXJHYXMgPSBoZXhUb0JpZ0ludChtYXhGZWVQZXJHYXMpOwogICAgaWYgKGlzSGV4KG1heFByaW9yaXR5RmVlUGVyR2FzKSAmJiBtYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMgPSBoZXhUb0JpZ0ludChtYXhQcmlvcml0eUZlZVBlckdhcyk7CiAgICBpZiAoYWNjZXNzTGlzdC5sZW5ndGggIT09IDAgJiYgYWNjZXNzTGlzdCAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uYWNjZXNzTGlzdCA9IHBhcnNlQWNjZXNzTGlzdChhY2Nlc3NMaXN0KTsKICAgIGlmIChhdXRob3JpemF0aW9uTGlzdC5sZW5ndGggIT09IDAgJiYgYXV0aG9yaXphdGlvbkxpc3QgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmF1dGhvcml6YXRpb25MaXN0ID0gcGFyc2VBdXRob3JpemF0aW9uTGlzdChhdXRob3JpemF0aW9uTGlzdCk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDc3MDIodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDEzID8gcGFyc2VFSVAxNTVTaWduYXR1cmUodHJhbnNhY3Rpb25BcnJheSkgOiB2b2lkIDA7CiAgICByZXR1cm4geyAuLi5zaWduYXR1cmUsIC4uLnRyYW5zYWN0aW9uIH07CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25FSVA0ODQ0KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgY29uc3QgdHJhbnNhY3Rpb25PcldyYXBwZXJBcnJheSA9IHRvVHJhbnNhY3Rpb25BcnJheShzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3QgaGFzTmV0d29ya1dyYXBwZXIgPSB0cmFuc2FjdGlvbk9yV3JhcHBlckFycmF5Lmxlbmd0aCA9PT0gNDsKICAgIGNvbnN0IHRyYW5zYWN0aW9uQXJyYXkgPSBoYXNOZXR3b3JrV3JhcHBlciA/IHRyYW5zYWN0aW9uT3JXcmFwcGVyQXJyYXlbMF0gOiB0cmFuc2FjdGlvbk9yV3JhcHBlckFycmF5OwogICAgY29uc3Qgd3JhcHBlckFycmF5ID0gaGFzTmV0d29ya1dyYXBwZXIgPyB0cmFuc2FjdGlvbk9yV3JhcHBlckFycmF5LnNsaWNlKDEpIDogW107CiAgICBjb25zdCBbY2hhaW5JZCwgbm9uY2UsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBtYXhGZWVQZXJHYXMsIGdhcywgdG8sIHZhbHVlLCBkYXRhLCBhY2Nlc3NMaXN0LCBtYXhGZWVQZXJCbG9iR2FzLCBibG9iVmVyc2lvbmVkSGFzaGVzLCB2LCByLCBzXSA9IHRyYW5zYWN0aW9uQXJyYXk7CiAgICBjb25zdCBbYmxvYnMsIGNvbW1pdG1lbnRzLCBwcm9vZnNdID0gd3JhcHBlckFycmF5OwogICAgaWYgKCEodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDExIHx8IHRyYW5zYWN0aW9uQXJyYXkubGVuZ3RoID09PSAxNCkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uRXJyb3IoewogICAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICAgIGNoYWluSWQsCiAgICAgICAgICBub25jZSwKICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzLAogICAgICAgICAgbWF4RmVlUGVyR2FzLAogICAgICAgICAgZ2FzLAogICAgICAgICAgdG8sCiAgICAgICAgICB2YWx1ZSwKICAgICAgICAgIGRhdGEsCiAgICAgICAgICBhY2Nlc3NMaXN0LAogICAgICAgICAgLi4udHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPiA5ID8gewogICAgICAgICAgICB2LAogICAgICAgICAgICByLAogICAgICAgICAgICBzCiAgICAgICAgICB9IDoge30KICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0eXBlOiAiZWlwNDg0NCIKICAgICAgfSk7CiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHsKICAgICAgYmxvYlZlcnNpb25lZEhhc2hlcywKICAgICAgY2hhaW5JZDogaGV4VG9OdW1iZXIoY2hhaW5JZCksCiAgICAgIHR5cGU6ICJlaXA0ODQ0IgogICAgfTsKICAgIGlmIChpc0hleCh0bykgJiYgdG8gIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnRvID0gdG87CiAgICBpZiAoaXNIZXgoZ2FzKSAmJiBnYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhcyA9IGhleFRvQmlnSW50KGdhcyk7CiAgICBpZiAoaXNIZXgoZGF0YSkgJiYgZGF0YSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZGF0YSA9IGRhdGE7CiAgICBpZiAoaXNIZXgobm9uY2UpICYmIG5vbmNlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5ub25jZSA9IGhleFRvTnVtYmVyKG5vbmNlKTsKICAgIGlmIChpc0hleCh2YWx1ZSkgJiYgdmFsdWUgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnZhbHVlID0gaGV4VG9CaWdJbnQodmFsdWUpOwogICAgaWYgKGlzSGV4KG1heEZlZVBlckJsb2JHYXMpICYmIG1heEZlZVBlckJsb2JHYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm1heEZlZVBlckJsb2JHYXMgPSBoZXhUb0JpZ0ludChtYXhGZWVQZXJCbG9iR2FzKTsKICAgIGlmIChpc0hleChtYXhGZWVQZXJHYXMpICYmIG1heEZlZVBlckdhcyAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24ubWF4RmVlUGVyR2FzID0gaGV4VG9CaWdJbnQobWF4RmVlUGVyR2FzKTsKICAgIGlmIChpc0hleChtYXhQcmlvcml0eUZlZVBlckdhcykgJiYgbWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm1heFByaW9yaXR5RmVlUGVyR2FzID0gaGV4VG9CaWdJbnQobWF4UHJpb3JpdHlGZWVQZXJHYXMpOwogICAgaWYgKGFjY2Vzc0xpc3QubGVuZ3RoICE9PSAwICYmIGFjY2Vzc0xpc3QgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmFjY2Vzc0xpc3QgPSBwYXJzZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBpZiAoYmxvYnMgJiYgY29tbWl0bWVudHMgJiYgcHJvb2ZzKQogICAgICB0cmFuc2FjdGlvbi5zaWRlY2FycyA9IHRvQmxvYlNpZGVjYXJzKHsKICAgICAgICBibG9icywKICAgICAgICBjb21taXRtZW50cywKICAgICAgICBwcm9vZnMKICAgICAgfSk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDQ4NDQodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDE0ID8gcGFyc2VFSVAxNTVTaWduYXR1cmUodHJhbnNhY3Rpb25BcnJheSkgOiB2b2lkIDA7CiAgICByZXR1cm4geyAuLi5zaWduYXR1cmUsIC4uLnRyYW5zYWN0aW9uIH07CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25FSVAxNTU5KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgY29uc3QgdHJhbnNhY3Rpb25BcnJheSA9IHRvVHJhbnNhY3Rpb25BcnJheShzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3QgW2NoYWluSWQsIG5vbmNlLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbWF4RmVlUGVyR2FzLCBnYXMsIHRvLCB2YWx1ZSwgZGF0YSwgYWNjZXNzTGlzdCwgdiwgciwgc10gPSB0cmFuc2FjdGlvbkFycmF5OwogICAgaWYgKCEodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDkgfHwgdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDEyKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25FcnJvcih7CiAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgY2hhaW5JZCwKICAgICAgICAgIG5vbmNlLAogICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXMsCiAgICAgICAgICBtYXhGZWVQZXJHYXMsCiAgICAgICAgICBnYXMsCiAgICAgICAgICB0bywKICAgICAgICAgIHZhbHVlLAogICAgICAgICAgZGF0YSwKICAgICAgICAgIGFjY2Vzc0xpc3QsCiAgICAgICAgICAuLi50cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA+IDkgPyB7CiAgICAgICAgICAgIHYsCiAgICAgICAgICAgIHIsCiAgICAgICAgICAgIHMKICAgICAgICAgIH0gOiB7fQogICAgICAgIH0sCiAgICAgICAgc2VyaWFsaXplZFRyYW5zYWN0aW9uLAogICAgICAgIHR5cGU6ICJlaXAxNTU5IgogICAgICB9KTsKICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gewogICAgICBjaGFpbklkOiBoZXhUb051bWJlcihjaGFpbklkKSwKICAgICAgdHlwZTogImVpcDE1NTkiCiAgICB9OwogICAgaWYgKGlzSGV4KHRvKSAmJiB0byAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24udG8gPSB0bzsKICAgIGlmIChpc0hleChnYXMpICYmIGdhcyAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZ2FzID0gaGV4VG9CaWdJbnQoZ2FzKTsKICAgIGlmIChpc0hleChkYXRhKSAmJiBkYXRhICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5kYXRhID0gZGF0YTsKICAgIGlmIChpc0hleChub25jZSkgJiYgbm9uY2UgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm5vbmNlID0gaGV4VG9OdW1iZXIobm9uY2UpOwogICAgaWYgKGlzSGV4KHZhbHVlKSAmJiB2YWx1ZSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24udmFsdWUgPSBoZXhUb0JpZ0ludCh2YWx1ZSk7CiAgICBpZiAoaXNIZXgobWF4RmVlUGVyR2FzKSAmJiBtYXhGZWVQZXJHYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm1heEZlZVBlckdhcyA9IGhleFRvQmlnSW50KG1heEZlZVBlckdhcyk7CiAgICBpZiAoaXNIZXgobWF4UHJpb3JpdHlGZWVQZXJHYXMpICYmIG1heFByaW9yaXR5RmVlUGVyR2FzICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5tYXhQcmlvcml0eUZlZVBlckdhcyA9IGhleFRvQmlnSW50KG1heFByaW9yaXR5RmVlUGVyR2FzKTsKICAgIGlmIChhY2Nlc3NMaXN0Lmxlbmd0aCAhPT0gMCAmJiBhY2Nlc3NMaXN0ICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5hY2Nlc3NMaXN0ID0gcGFyc2VBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpOwogICAgYXNzZXJ0VHJhbnNhY3Rpb25FSVAxNTU5KHRyYW5zYWN0aW9uKTsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRyYW5zYWN0aW9uQXJyYXkubGVuZ3RoID09PSAxMiA/IHBhcnNlRUlQMTU1U2lnbmF0dXJlKHRyYW5zYWN0aW9uQXJyYXkpIDogdm9pZCAwOwogICAgcmV0dXJuIHsgLi4uc2lnbmF0dXJlLCAuLi50cmFuc2FjdGlvbiB9OwogIH0KICBmdW5jdGlvbiBwYXJzZVRyYW5zYWN0aW9uRUlQMjkzMChzZXJpYWxpemVkVHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHRyYW5zYWN0aW9uQXJyYXkgPSB0b1RyYW5zYWN0aW9uQXJyYXkoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgIGNvbnN0IFtjaGFpbklkLCBub25jZSwgZ2FzUHJpY2UsIGdhcywgdG8sIHZhbHVlLCBkYXRhLCBhY2Nlc3NMaXN0LCB2LCByLCBzXSA9IHRyYW5zYWN0aW9uQXJyYXk7CiAgICBpZiAoISh0cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA9PT0gOCB8fCB0cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA9PT0gMTEpKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yKHsKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBjaGFpbklkLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICBnYXNQcmljZSwKICAgICAgICAgIGdhcywKICAgICAgICAgIHRvLAogICAgICAgICAgdmFsdWUsCiAgICAgICAgICBkYXRhLAogICAgICAgICAgYWNjZXNzTGlzdCwKICAgICAgICAgIC4uLnRyYW5zYWN0aW9uQXJyYXkubGVuZ3RoID4gOCA/IHsKICAgICAgICAgICAgdiwKICAgICAgICAgICAgciwKICAgICAgICAgICAgcwogICAgICAgICAgfSA6IHt9CiAgICAgICAgfSwKICAgICAgICBzZXJpYWxpemVkVHJhbnNhY3Rpb24sCiAgICAgICAgdHlwZTogImVpcDI5MzAiCiAgICAgIH0pOwogICAgY29uc3QgdHJhbnNhY3Rpb24gPSB7CiAgICAgIGNoYWluSWQ6IGhleFRvTnVtYmVyKGNoYWluSWQpLAogICAgICB0eXBlOiAiZWlwMjkzMCIKICAgIH07CiAgICBpZiAoaXNIZXgodG8pICYmIHRvICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi50byA9IHRvOwogICAgaWYgKGlzSGV4KGdhcykgJiYgZ2FzICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5nYXMgPSBoZXhUb0JpZ0ludChnYXMpOwogICAgaWYgKGlzSGV4KGRhdGEpICYmIGRhdGEgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmRhdGEgPSBkYXRhOwogICAgaWYgKGlzSGV4KG5vbmNlKSAmJiBub25jZSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24ubm9uY2UgPSBoZXhUb051bWJlcihub25jZSk7CiAgICBpZiAoaXNIZXgodmFsdWUpICYmIHZhbHVlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi52YWx1ZSA9IGhleFRvQmlnSW50KHZhbHVlKTsKICAgIGlmIChpc0hleChnYXNQcmljZSkgJiYgZ2FzUHJpY2UgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhc1ByaWNlID0gaGV4VG9CaWdJbnQoZ2FzUHJpY2UpOwogICAgaWYgKGFjY2Vzc0xpc3QubGVuZ3RoICE9PSAwICYmIGFjY2Vzc0xpc3QgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmFjY2Vzc0xpc3QgPSBwYXJzZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDI5MzAodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDExID8gcGFyc2VFSVAxNTVTaWduYXR1cmUodHJhbnNhY3Rpb25BcnJheSkgOiB2b2lkIDA7CiAgICByZXR1cm4geyAuLi5zaWduYXR1cmUsIC4uLnRyYW5zYWN0aW9uIH07CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25MZWdhY3koc2VyaWFsaXplZFRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCB0cmFuc2FjdGlvbkFycmF5ID0gZnJvbVJscChzZXJpYWxpemVkVHJhbnNhY3Rpb24sICJoZXgiKTsKICAgIGNvbnN0IFtub25jZSwgZ2FzUHJpY2UsIGdhcywgdG8sIHZhbHVlLCBkYXRhLCBjaGFpbklkT3JWXywgciwgc10gPSB0cmFuc2FjdGlvbkFycmF5OwogICAgaWYgKCEodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDYgfHwgdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDkpKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yKHsKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBub25jZSwKICAgICAgICAgIGdhc1ByaWNlLAogICAgICAgICAgZ2FzLAogICAgICAgICAgdG8sCiAgICAgICAgICB2YWx1ZSwKICAgICAgICAgIGRhdGEsCiAgICAgICAgICAuLi50cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA+IDYgPyB7CiAgICAgICAgICAgIHY6IGNoYWluSWRPclZfLAogICAgICAgICAgICByLAogICAgICAgICAgICBzCiAgICAgICAgICB9IDoge30KICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0eXBlOiAibGVnYWN5IgogICAgICB9KTsKICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gewogICAgICB0eXBlOiAibGVnYWN5IgogICAgfTsKICAgIGlmIChpc0hleCh0bykgJiYgdG8gIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnRvID0gdG87CiAgICBpZiAoaXNIZXgoZ2FzKSAmJiBnYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhcyA9IGhleFRvQmlnSW50KGdhcyk7CiAgICBpZiAoaXNIZXgoZGF0YSkgJiYgZGF0YSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZGF0YSA9IGRhdGE7CiAgICBpZiAoaXNIZXgobm9uY2UpICYmIG5vbmNlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5ub25jZSA9IGhleFRvTnVtYmVyKG5vbmNlKTsKICAgIGlmIChpc0hleCh2YWx1ZSkgJiYgdmFsdWUgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnZhbHVlID0gaGV4VG9CaWdJbnQodmFsdWUpOwogICAgaWYgKGlzSGV4KGdhc1ByaWNlKSAmJiBnYXNQcmljZSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZ2FzUHJpY2UgPSBoZXhUb0JpZ0ludChnYXNQcmljZSk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSh0cmFuc2FjdGlvbik7CiAgICBpZiAodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDYpCiAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgIGNvbnN0IGNoYWluSWRPclYgPSBpc0hleChjaGFpbklkT3JWXykgJiYgY2hhaW5JZE9yVl8gIT09ICIweCIgPyBoZXhUb0JpZ0ludChjaGFpbklkT3JWXykgOiAwbjsKICAgIGlmIChzID09PSAiMHgiICYmIHIgPT09ICIweCIpIHsKICAgICAgaWYgKGNoYWluSWRPclYgPiAwKQogICAgICAgIHRyYW5zYWN0aW9uLmNoYWluSWQgPSBOdW1iZXIoY2hhaW5JZE9yVik7CiAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgIH0KICAgIGNvbnN0IHYgPSBjaGFpbklkT3JWOwogICAgY29uc3QgY2hhaW5JZCA9IE51bWJlcigodiAtIDM1bikgLyAybik7CiAgICBpZiAoY2hhaW5JZCA+IDApCiAgICAgIHRyYW5zYWN0aW9uLmNoYWluSWQgPSBjaGFpbklkOwogICAgZWxzZSBpZiAodiAhPT0gMjduICYmIHYgIT09IDI4bikKICAgICAgdGhyb3cgbmV3IEludmFsaWRMZWdhY3lWRXJyb3IoeyB2IH0pOwogICAgdHJhbnNhY3Rpb24udiA9IHY7CiAgICB0cmFuc2FjdGlvbi5zID0gczsKICAgIHRyYW5zYWN0aW9uLnIgPSByOwogICAgdHJhbnNhY3Rpb24ueVBhcml0eSA9IHYgJSAybiA9PT0gMG4gPyAxIDogMDsKICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICB9CiAgZnVuY3Rpb24gdG9UcmFuc2FjdGlvbkFycmF5KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgcmV0dXJuIGZyb21SbHAoYDB4JHtzZXJpYWxpemVkVHJhbnNhY3Rpb24uc2xpY2UoNCl9YCwgImhleCIpOwogIH0KICBmdW5jdGlvbiBwYXJzZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdF8pIHsKICAgIGNvbnN0IGFjY2Vzc0xpc3QgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWNjZXNzTGlzdF8ubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgW2FkZHJlc3MsIHN0b3JhZ2VLZXlzXSA9IGFjY2Vzc0xpc3RfW2ldOwogICAgICBpZiAoIWlzQWRkcmVzcyhhZGRyZXNzLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzIH0pOwogICAgICBhY2Nlc3NMaXN0LnB1c2goewogICAgICAgIGFkZHJlc3MsCiAgICAgICAgc3RvcmFnZUtleXM6IHN0b3JhZ2VLZXlzLm1hcCgoa2V5KSA9PiBpc0hhc2goa2V5KSA/IGtleSA6IHRyaW0oa2V5KSkKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gYWNjZXNzTGlzdDsKICB9CiAgZnVuY3Rpb24gcGFyc2VBdXRob3JpemF0aW9uTGlzdChzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3QpIHsKICAgIGNvbnN0IGF1dGhvcml6YXRpb25MaXN0ID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcmlhbGl6ZWRBdXRob3JpemF0aW9uTGlzdC5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBbY2hhaW5JZCwgY29udHJhY3RBZGRyZXNzLCBub25jZSwgeVBhcml0eSwgciwgc10gPSBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3RbaV07CiAgICAgIGF1dGhvcml6YXRpb25MaXN0LnB1c2goewogICAgICAgIGNoYWluSWQ6IGhleFRvTnVtYmVyKGNoYWluSWQpLAogICAgICAgIGNvbnRyYWN0QWRkcmVzcywKICAgICAgICBub25jZTogaGV4VG9OdW1iZXIobm9uY2UpLAogICAgICAgIC4uLnBhcnNlRUlQMTU1U2lnbmF0dXJlKFt5UGFyaXR5LCByLCBzXSkKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gYXV0aG9yaXphdGlvbkxpc3Q7CiAgfQogIGZ1bmN0aW9uIHBhcnNlRUlQMTU1U2lnbmF0dXJlKHRyYW5zYWN0aW9uQXJyYXkpIHsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRyYW5zYWN0aW9uQXJyYXkuc2xpY2UoLTMpOwogICAgY29uc3QgdiA9IHNpZ25hdHVyZVswXSA9PT0gIjB4IiB8fCBoZXhUb0JpZ0ludChzaWduYXR1cmVbMF0pID09PSAwbiA/IDI3biA6IDI4bjsKICAgIHJldHVybiB7CiAgICAgIHI6IHBhZEhleChzaWduYXR1cmVbMV0sIHsgc2l6ZTogMzIgfSksCiAgICAgIHM6IHBhZEhleChzaWduYXR1cmVbMl0sIHsgc2l6ZTogMzIgfSksCiAgICAgIHYsCiAgICAgIHlQYXJpdHk6IHYgPT09IDI3biA/IDAgOiAxCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9zZXJpYWxpemVUcmFuc2FjdGlvbi5qcwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdHJpbSgpOwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9leHBlcmltZW50YWwvZWlwNzcwMi91dGlscy9zZXJpYWxpemVBdXRob3JpemF0aW9uTGlzdC5qcwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBzZXJpYWxpemVBdXRob3JpemF0aW9uTGlzdChhdXRob3JpemF0aW9uTGlzdCkgewogICAgaWYgKCFhdXRob3JpemF0aW9uTGlzdCB8fCBhdXRob3JpemF0aW9uTGlzdC5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiBbXTsKICAgIGNvbnN0IHNlcmlhbGl6ZWRBdXRob3JpemF0aW9uTGlzdCA9IFtdOwogICAgZm9yIChjb25zdCBhdXRob3JpemF0aW9uIG9mIGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICAgIGNvbnN0IHsgY29udHJhY3RBZGRyZXNzLCBjaGFpbklkLCBub25jZSwgLi4uc2lnbmF0dXJlIH0gPSBhdXRob3JpemF0aW9uOwogICAgICBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3QucHVzaChbCiAgICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgICAgY29udHJhY3RBZGRyZXNzLAogICAgICAgIHRvSGV4KG5vbmNlKSwKICAgICAgICAuLi50b1lQYXJpdHlTaWduYXR1cmVBcnJheSh7fSwgc2lnbmF0dXJlKQogICAgICBdKTsKICAgIH0KICAgIHJldHVybiBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL3NlcmlhbGl6ZUFjY2Vzc0xpc3QuanMKICBpbml0X2FkZHJlc3MoKTsKICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBmdW5jdGlvbiBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpIHsKICAgIGlmICghYWNjZXNzTGlzdCB8fCBhY2Nlc3NMaXN0Lmxlbmd0aCA9PT0gMCkKICAgICAgcmV0dXJuIFtdOwogICAgY29uc3Qgc2VyaWFsaXplZEFjY2Vzc0xpc3QgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWNjZXNzTGlzdC5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCB7IGFkZHJlc3MsIHN0b3JhZ2VLZXlzIH0gPSBhY2Nlc3NMaXN0W2ldOwogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHN0b3JhZ2VLZXlzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgaWYgKHN0b3JhZ2VLZXlzW2pdLmxlbmd0aCAtIDIgIT09IDY0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IoeyBzdG9yYWdlS2V5OiBzdG9yYWdlS2V5c1tqXSB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFpc0FkZHJlc3MoYWRkcmVzcywgeyBzdHJpY3Q6IGZhbHNlIH0pKSB7CiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzIH0pOwogICAgICB9CiAgICAgIHNlcmlhbGl6ZWRBY2Nlc3NMaXN0LnB1c2goW2FkZHJlc3MsIHN0b3JhZ2VLZXlzXSk7CiAgICB9CiAgICByZXR1cm4gc2VyaWFsaXplZEFjY2Vzc0xpc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL3NlcmlhbGl6ZVRyYW5zYWN0aW9uLmpzCiAgZnVuY3Rpb24gc2VyaWFsaXplVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgdHlwZSA9IGdldFRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvbik7CiAgICBpZiAodHlwZSA9PT0gImVpcDE1NTkiKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVAxNTU5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogICAgaWYgKHR5cGUgPT09ICJlaXAyOTMwIikKICAgICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uRUlQMjkzMCh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKTsKICAgIGlmICh0eXBlID09PSAiZWlwNDg0NCIpCiAgICAgIHJldHVybiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDQ4NDQodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSk7CiAgICBpZiAodHlwZSA9PT0gImVpcDc3MDIiKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVA3NzAyKHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uTGVnYWN5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogIH0KICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDc3MDIodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgeyBhdXRob3JpemF0aW9uTGlzdCwgY2hhaW5JZCwgZ2FzLCBub25jZSwgdG8sIHZhbHVlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBhY2Nlc3NMaXN0LCBkYXRhIH0gPSB0cmFuc2FjdGlvbjsKICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQNzcwMih0cmFuc2FjdGlvbik7CiAgICBjb25zdCBzZXJpYWxpemVkQWNjZXNzTGlzdCA9IHNlcmlhbGl6ZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBjb25zdCBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3QgPSBzZXJpYWxpemVBdXRob3JpemF0aW9uTGlzdChhdXRob3JpemF0aW9uTGlzdCk7CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4MDQiLAogICAgICB0b1JscChbCiAgICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgICAgbm9uY2UgPyB0b0hleChub25jZSkgOiAiMHgiLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzID8gdG9IZXgobWF4UHJpb3JpdHlGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgICBtYXhGZWVQZXJHYXMgPyB0b0hleChtYXhGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgICB0byA/PyAiMHgiLAogICAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgICBkYXRhID8/ICIweCIsCiAgICAgICAgc2VyaWFsaXplZEFjY2Vzc0xpc3QsCiAgICAgICAgc2VyaWFsaXplZEF1dGhvcml6YXRpb25MaXN0LAogICAgICAgIC4uLnRvWVBhcml0eVNpZ25hdHVyZUFycmF5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpCiAgICAgIF0pCiAgICBdKTsKICB9CiAgZnVuY3Rpb24gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVA0ODQ0KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpIHsKICAgIGNvbnN0IHsgY2hhaW5JZCwgZ2FzLCBub25jZSwgdG8sIHZhbHVlLCBtYXhGZWVQZXJCbG9iR2FzLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBhY2Nlc3NMaXN0LCBkYXRhIH0gPSB0cmFuc2FjdGlvbjsKICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQNDg0NCh0cmFuc2FjdGlvbik7CiAgICBsZXQgYmxvYlZlcnNpb25lZEhhc2hlcyA9IHRyYW5zYWN0aW9uLmJsb2JWZXJzaW9uZWRIYXNoZXM7CiAgICBsZXQgc2lkZWNhcnMgPSB0cmFuc2FjdGlvbi5zaWRlY2FyczsKICAgIGlmICh0cmFuc2FjdGlvbi5ibG9icyAmJiAodHlwZW9mIGJsb2JWZXJzaW9uZWRIYXNoZXMgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiBzaWRlY2FycyA9PT0gInVuZGVmaW5lZCIpKSB7CiAgICAgIGNvbnN0IGJsb2JzMiA9IHR5cGVvZiB0cmFuc2FjdGlvbi5ibG9ic1swXSA9PT0gInN0cmluZyIgPyB0cmFuc2FjdGlvbi5ibG9icyA6IHRyYW5zYWN0aW9uLmJsb2JzLm1hcCgoeCkgPT4gYnl0ZXNUb0hleCh4KSk7CiAgICAgIGNvbnN0IGt6ZyA9IHRyYW5zYWN0aW9uLmt6ZzsKICAgICAgY29uc3QgY29tbWl0bWVudHMyID0gYmxvYnNUb0NvbW1pdG1lbnRzKHsKICAgICAgICBibG9iczogYmxvYnMyLAogICAgICAgIGt6ZwogICAgICB9KTsKICAgICAgaWYgKHR5cGVvZiBibG9iVmVyc2lvbmVkSGFzaGVzID09PSAidW5kZWZpbmVkIikKICAgICAgICBibG9iVmVyc2lvbmVkSGFzaGVzID0gY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlcyh7CiAgICAgICAgICBjb21taXRtZW50czogY29tbWl0bWVudHMyCiAgICAgICAgfSk7CiAgICAgIGlmICh0eXBlb2Ygc2lkZWNhcnMgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgY29uc3QgcHJvb2ZzMiA9IGJsb2JzVG9Qcm9vZnMoeyBibG9iczogYmxvYnMyLCBjb21taXRtZW50czogY29tbWl0bWVudHMyLCBremcgfSk7CiAgICAgICAgc2lkZWNhcnMgPSB0b0Jsb2JTaWRlY2Fycyh7IGJsb2JzOiBibG9iczIsIGNvbW1pdG1lbnRzOiBjb21taXRtZW50czIsIHByb29mczogcHJvb2ZzMiB9KTsKICAgICAgfQogICAgfQogICAgY29uc3Qgc2VyaWFsaXplZEFjY2Vzc0xpc3QgPSBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpOwogICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICB0b0hleChjaGFpbklkKSwKICAgICAgbm9uY2UgPyB0b0hleChub25jZSkgOiAiMHgiLAogICAgICBtYXhQcmlvcml0eUZlZVBlckdhcyA/IHRvSGV4KG1heFByaW9yaXR5RmVlUGVyR2FzKSA6ICIweCIsCiAgICAgIG1heEZlZVBlckdhcyA/IHRvSGV4KG1heEZlZVBlckdhcykgOiAiMHgiLAogICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgdG8gPz8gIjB4IiwKICAgICAgdmFsdWUgPyB0b0hleCh2YWx1ZSkgOiAiMHgiLAogICAgICBkYXRhID8/ICIweCIsCiAgICAgIHNlcmlhbGl6ZWRBY2Nlc3NMaXN0LAogICAgICBtYXhGZWVQZXJCbG9iR2FzID8gdG9IZXgobWF4RmVlUGVyQmxvYkdhcykgOiAiMHgiLAogICAgICBibG9iVmVyc2lvbmVkSGFzaGVzID8/IFtdLAogICAgICAuLi50b1lQYXJpdHlTaWduYXR1cmVBcnJheSh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKQogICAgXTsKICAgIGNvbnN0IGJsb2JzID0gW107CiAgICBjb25zdCBjb21taXRtZW50cyA9IFtdOwogICAgY29uc3QgcHJvb2ZzID0gW107CiAgICBpZiAoc2lkZWNhcnMpCiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2lkZWNhcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBjb25zdCB7IGJsb2IsIGNvbW1pdG1lbnQsIHByb29mIH0gPSBzaWRlY2Fyc1tpXTsKICAgICAgICBibG9icy5wdXNoKGJsb2IpOwogICAgICAgIGNvbW1pdG1lbnRzLnB1c2goY29tbWl0bWVudCk7CiAgICAgICAgcHJvb2ZzLnB1c2gocHJvb2YpOwogICAgICB9CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4MDMiLAogICAgICBzaWRlY2FycyA/ICgKICAgICAgICAvLyBJZiBzaWRlY2FycyBhcmUgZW5hYmxlZCwgZW52ZWxvcGUgdHVybnMgaW50byBhICJ3cmFwcGVyIjoKICAgICAgICB0b1JscChbc2VyaWFsaXplZFRyYW5zYWN0aW9uLCBibG9icywgY29tbWl0bWVudHMsIHByb29mc10pCiAgICAgICkgOiAoCiAgICAgICAgLy8gSWYgc2lkZWNhcnMgYXJlIGRpc2FibGVkLCBzdGFuZGFyZCBlbnZlbG9wZSBpcyB1c2VkOgogICAgICAgIHRvUmxwKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikKICAgICAgKQogICAgXSk7CiAgfQogIGZ1bmN0aW9uIHNlcmlhbGl6ZVRyYW5zYWN0aW9uRUlQMTU1OSh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKSB7CiAgICBjb25zdCB7IGNoYWluSWQsIGdhcywgbm9uY2UsIHRvLCB2YWx1ZSwgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgYWNjZXNzTGlzdCwgZGF0YSB9ID0gdHJhbnNhY3Rpb247CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDE1NTkodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2VyaWFsaXplZEFjY2Vzc0xpc3QgPSBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpOwogICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICB0b0hleChjaGFpbklkKSwKICAgICAgbm9uY2UgPyB0b0hleChub25jZSkgOiAiMHgiLAogICAgICBtYXhQcmlvcml0eUZlZVBlckdhcyA/IHRvSGV4KG1heFByaW9yaXR5RmVlUGVyR2FzKSA6ICIweCIsCiAgICAgIG1heEZlZVBlckdhcyA/IHRvSGV4KG1heEZlZVBlckdhcykgOiAiMHgiLAogICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgdG8gPz8gIjB4IiwKICAgICAgdmFsdWUgPyB0b0hleCh2YWx1ZSkgOiAiMHgiLAogICAgICBkYXRhID8/ICIweCIsCiAgICAgIHNlcmlhbGl6ZWRBY2Nlc3NMaXN0LAogICAgICAuLi50b1lQYXJpdHlTaWduYXR1cmVBcnJheSh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKQogICAgXTsKICAgIHJldHVybiBjb25jYXRIZXgoWwogICAgICAiMHgwMiIsCiAgICAgIHRvUmxwKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikKICAgIF0pOwogIH0KICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDI5MzAodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgeyBjaGFpbklkLCBnYXMsIGRhdGEsIG5vbmNlLCB0bywgdmFsdWUsIGFjY2Vzc0xpc3QsIGdhc1ByaWNlIH0gPSB0cmFuc2FjdGlvbjsKICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQMjkzMCh0cmFuc2FjdGlvbik7CiAgICBjb25zdCBzZXJpYWxpemVkQWNjZXNzTGlzdCA9IHNlcmlhbGl6ZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBjb25zdCBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBbCiAgICAgIHRvSGV4KGNoYWluSWQpLAogICAgICBub25jZSA/IHRvSGV4KG5vbmNlKSA6ICIweCIsCiAgICAgIGdhc1ByaWNlID8gdG9IZXgoZ2FzUHJpY2UpIDogIjB4IiwKICAgICAgZ2FzID8gdG9IZXgoZ2FzKSA6ICIweCIsCiAgICAgIHRvID8/ICIweCIsCiAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiLAogICAgICBzZXJpYWxpemVkQWNjZXNzTGlzdCwKICAgICAgLi4udG9ZUGFyaXR5U2lnbmF0dXJlQXJyYXkodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkKICAgIF07CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4MDEiLAogICAgICB0b1JscChzZXJpYWxpemVkVHJhbnNhY3Rpb24pCiAgICBdKTsKICB9CiAgZnVuY3Rpb24gc2VyaWFsaXplVHJhbnNhY3Rpb25MZWdhY3kodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgeyBjaGFpbklkID0gMCwgZ2FzLCBkYXRhLCBub25jZSwgdG8sIHZhbHVlLCBnYXNQcmljZSB9ID0gdHJhbnNhY3Rpb247CiAgICBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSh0cmFuc2FjdGlvbik7CiAgICBsZXQgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICBub25jZSA/IHRvSGV4KG5vbmNlKSA6ICIweCIsCiAgICAgIGdhc1ByaWNlID8gdG9IZXgoZ2FzUHJpY2UpIDogIjB4IiwKICAgICAgZ2FzID8gdG9IZXgoZ2FzKSA6ICIweCIsCiAgICAgIHRvID8/ICIweCIsCiAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiCiAgICBdOwogICAgaWYgKHNpZ25hdHVyZSkgewogICAgICBjb25zdCB2ID0gKCgpID0+IHsKICAgICAgICBpZiAoc2lnbmF0dXJlLnYgPj0gMzVuKSB7CiAgICAgICAgICBjb25zdCBpbmZlcnJlZENoYWluSWQgPSAoc2lnbmF0dXJlLnYgLSAzNW4pIC8gMm47CiAgICAgICAgICBpZiAoaW5mZXJyZWRDaGFpbklkID4gMCkKICAgICAgICAgICAgcmV0dXJuIHNpZ25hdHVyZS52OwogICAgICAgICAgcmV0dXJuIDI3biArIChzaWduYXR1cmUudiA9PT0gMzVuID8gMG4gOiAxbik7CiAgICAgICAgfQogICAgICAgIGlmIChjaGFpbklkID4gMCkKICAgICAgICAgIHJldHVybiBCaWdJbnQoY2hhaW5JZCAqIDIpICsgQmlnSW50KDM1biArIHNpZ25hdHVyZS52IC0gMjduKTsKICAgICAgICBjb25zdCB2MiA9IDI3biArIChzaWduYXR1cmUudiA9PT0gMjduID8gMG4gOiAxbik7CiAgICAgICAgaWYgKHNpZ25hdHVyZS52ICE9PSB2MikKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkTGVnYWN5VkVycm9yKHsgdjogc2lnbmF0dXJlLnYgfSk7CiAgICAgICAgcmV0dXJuIHYyOwogICAgICB9KSgpOwogICAgICBjb25zdCByID0gdHJpbShzaWduYXR1cmUucik7CiAgICAgIGNvbnN0IHMgPSB0cmltKHNpZ25hdHVyZS5zKTsKICAgICAgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICAgIC4uLnNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0b0hleCh2KSwKICAgICAgICByID09PSAiMHgwMCIgPyAiMHgiIDogciwKICAgICAgICBzID09PSAiMHgwMCIgPyAiMHgiIDogcwogICAgICBdOwogICAgfSBlbHNlIGlmIChjaGFpbklkID4gMCkgewogICAgICBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBbCiAgICAgICAgLi4uc2VyaWFsaXplZFRyYW5zYWN0aW9uLAogICAgICAgIHRvSGV4KGNoYWluSWQpLAogICAgICAgICIweCIsCiAgICAgICAgIjB4IgogICAgICBdOwogICAgfQogICAgcmV0dXJuIHRvUmxwKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgfQogIGZ1bmN0aW9uIHRvWVBhcml0eVNpZ25hdHVyZUFycmF5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmVfKSB7CiAgICBjb25zdCBzaWduYXR1cmUgPSBzaWduYXR1cmVfID8/IHRyYW5zYWN0aW9uOwogICAgY29uc3QgeyB2LCB5UGFyaXR5IH0gPSBzaWduYXR1cmU7CiAgICBpZiAodHlwZW9mIHNpZ25hdHVyZS5yID09PSAidW5kZWZpbmVkIikKICAgICAgcmV0dXJuIFtdOwogICAgaWYgKHR5cGVvZiBzaWduYXR1cmUucyA9PT0gInVuZGVmaW5lZCIpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICh0eXBlb2YgdiA9PT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIHlQYXJpdHkgPT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gW107CiAgICBjb25zdCByID0gdHJpbShzaWduYXR1cmUucik7CiAgICBjb25zdCBzID0gdHJpbShzaWduYXR1cmUucyk7CiAgICBjb25zdCB5UGFyaXR5XyA9ICgoKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgeVBhcml0eSA9PT0gIm51bWJlciIpCiAgICAgICAgcmV0dXJuIHlQYXJpdHkgPyB0b0hleCgxKSA6ICIweCI7CiAgICAgIGlmICh2ID09PSAwbikKICAgICAgICByZXR1cm4gIjB4IjsKICAgICAgaWYgKHYgPT09IDFuKQogICAgICAgIHJldHVybiB0b0hleCgxKTsKICAgICAgcmV0dXJuIHYgPT09IDI3biA/ICIweCIgOiB0b0hleCgxKTsKICAgIH0pKCk7CiAgICByZXR1cm4gW3lQYXJpdHlfLCByID09PSAiMHgwMCIgPyAiMHgiIDogciwgcyA9PT0gIjB4MDAiID8gIjB4IiA6IHNdOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L3BhcnNlVW5pdHMuanMKICBmdW5jdGlvbiBwYXJzZVVuaXRzKHZhbHVlLCBkZWNpbWFscykgewogICAgbGV0IFtpbnRlZ2VyLCBmcmFjdGlvbiA9ICIwIl0gPSB2YWx1ZS5zcGxpdCgiLiIpOwogICAgY29uc3QgbmVnYXRpdmUgPSBpbnRlZ2VyLnN0YXJ0c1dpdGgoIi0iKTsKICAgIGlmIChuZWdhdGl2ZSkKICAgICAgaW50ZWdlciA9IGludGVnZXIuc2xpY2UoMSk7CiAgICBmcmFjdGlvbiA9IGZyYWN0aW9uLnJlcGxhY2UoLygwKykkLywgIiIpOwogICAgaWYgKGRlY2ltYWxzID09PSAwKSB7CiAgICAgIGlmIChNYXRoLnJvdW5kKE51bWJlcihgLiR7ZnJhY3Rpb259YCkpID09PSAxKQogICAgICAgIGludGVnZXIgPSBgJHtCaWdJbnQoaW50ZWdlcikgKyAxbn1gOwogICAgICBmcmFjdGlvbiA9ICIiOwogICAgfSBlbHNlIGlmIChmcmFjdGlvbi5sZW5ndGggPiBkZWNpbWFscykgewogICAgICBjb25zdCBbbGVmdCwgdW5pdCwgcmlnaHRdID0gWwogICAgICAgIGZyYWN0aW9uLnNsaWNlKDAsIGRlY2ltYWxzIC0gMSksCiAgICAgICAgZnJhY3Rpb24uc2xpY2UoZGVjaW1hbHMgLSAxLCBkZWNpbWFscyksCiAgICAgICAgZnJhY3Rpb24uc2xpY2UoZGVjaW1hbHMpCiAgICAgIF07CiAgICAgIGNvbnN0IHJvdW5kZWQgPSBNYXRoLnJvdW5kKE51bWJlcihgJHt1bml0fS4ke3JpZ2h0fWApKTsKICAgICAgaWYgKHJvdW5kZWQgPiA5KQogICAgICAgIGZyYWN0aW9uID0gYCR7QmlnSW50KGxlZnQpICsgQmlnSW50KDEpfTBgLnBhZFN0YXJ0KGxlZnQubGVuZ3RoICsgMSwgIjAiKTsKICAgICAgZWxzZQogICAgICAgIGZyYWN0aW9uID0gYCR7bGVmdH0ke3JvdW5kZWR9YDsKICAgICAgaWYgKGZyYWN0aW9uLmxlbmd0aCA+IGRlY2ltYWxzKSB7CiAgICAgICAgZnJhY3Rpb24gPSBmcmFjdGlvbi5zbGljZSgxKTsKICAgICAgICBpbnRlZ2VyID0gYCR7QmlnSW50KGludGVnZXIpICsgMW59YDsKICAgICAgfQogICAgICBmcmFjdGlvbiA9IGZyYWN0aW9uLnNsaWNlKDAsIGRlY2ltYWxzKTsKICAgIH0gZWxzZSB7CiAgICAgIGZyYWN0aW9uID0gZnJhY3Rpb24ucGFkRW5kKGRlY2ltYWxzLCAiMCIpOwogICAgfQogICAgcmV0dXJuIEJpZ0ludChgJHtuZWdhdGl2ZSA/ICItIiA6ICIifSR7aW50ZWdlcn0ke2ZyYWN0aW9ufWApOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L3BhcnNlRXRoZXIuanMKICBpbml0X3VuaXQoKTsKICBmdW5jdGlvbiBwYXJzZUV0aGVyKGV0aGVyLCB1bml0ID0gIndlaSIpIHsKICAgIHJldHVybiBwYXJzZVVuaXRzKGV0aGVyLCBldGhlclVuaXRzW3VuaXRdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9wYXJzZUd3ZWkuanMKICBpbml0X3VuaXQoKTsKICBmdW5jdGlvbiBwYXJzZUd3ZWkoZXRoZXIsIHVuaXQgPSAid2VpIikgewogICAgcmV0dXJuIHBhcnNlVW5pdHMoZXRoZXIsIGd3ZWlVbml0c1t1bml0XSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL25vbmNlTWFuYWdlci5qcwogIGluaXRfbHJ1KCk7CiAgZnVuY3Rpb24gY3JlYXRlTm9uY2VNYW5hZ2VyKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgc291cmNlIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgZGVsdGFNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgY29uc3Qgbm9uY2VNYXAgPSBuZXcgTHJ1TWFwKDgxOTIpOwogICAgY29uc3QgcHJvbWlzZU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBjb25zdCBnZXRLZXkgPSAoeyBhZGRyZXNzLCBjaGFpbklkIH0pID0+IGAke2FkZHJlc3N9LiR7Y2hhaW5JZH1gOwogICAgcmV0dXJuIHsKICAgICAgYXN5bmMgY29uc3VtZSh7IGFkZHJlc3MsIGNoYWluSWQsIGNsaWVudCB9KSB7CiAgICAgICAgY29uc3Qga2V5ID0gZ2V0S2V5KHsgYWRkcmVzcywgY2hhaW5JZCB9KTsKICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5nZXQoeyBhZGRyZXNzLCBjaGFpbklkLCBjbGllbnQgfSk7CiAgICAgICAgdGhpcy5pbmNyZW1lbnQoeyBhZGRyZXNzLCBjaGFpbklkIH0pOwogICAgICAgIGNvbnN0IG5vbmNlID0gYXdhaXQgcHJvbWlzZTsKICAgICAgICBhd2FpdCBzb3VyY2Uuc2V0KHsgYWRkcmVzcywgY2hhaW5JZCB9LCBub25jZSk7CiAgICAgICAgbm9uY2VNYXAuc2V0KGtleSwgbm9uY2UpOwogICAgICAgIHJldHVybiBub25jZTsKICAgICAgfSwKICAgICAgYXN5bmMgaW5jcmVtZW50KHsgYWRkcmVzcywgY2hhaW5JZCB9KSB7CiAgICAgICAgY29uc3Qga2V5ID0gZ2V0S2V5KHsgYWRkcmVzcywgY2hhaW5JZCB9KTsKICAgICAgICBjb25zdCBkZWx0YSA9IGRlbHRhTWFwLmdldChrZXkpID8/IDA7CiAgICAgICAgZGVsdGFNYXAuc2V0KGtleSwgZGVsdGEgKyAxKTsKICAgICAgfSwKICAgICAgYXN5bmMgZ2V0KHsgYWRkcmVzcywgY2hhaW5JZCwgY2xpZW50IH0pIHsKICAgICAgICBjb25zdCBrZXkgPSBnZXRLZXkoeyBhZGRyZXNzLCBjaGFpbklkIH0pOwogICAgICAgIGxldCBwcm9taXNlID0gcHJvbWlzZU1hcC5nZXQoa2V5KTsKICAgICAgICBpZiAoIXByb21pc2UpIHsKICAgICAgICAgIHByb21pc2UgPSAoYXN5bmMgKCkgPT4gewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGNvbnN0IG5vbmNlID0gYXdhaXQgc291cmNlLmdldCh7IGFkZHJlc3MsIGNoYWluSWQsIGNsaWVudCB9KTsKICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c05vbmNlID0gbm9uY2VNYXAuZ2V0KGtleSkgPz8gMDsKICAgICAgICAgICAgICBpZiAocHJldmlvdXNOb25jZSA+IDAgJiYgbm9uY2UgPD0gcHJldmlvdXNOb25jZSkKICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c05vbmNlICsgMTsKICAgICAgICAgICAgICBub25jZU1hcC5kZWxldGUoa2V5KTsKICAgICAgICAgICAgICByZXR1cm4gbm9uY2U7CiAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgdGhpcy5yZXNldCh7IGFkZHJlc3MsIGNoYWluSWQgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pKCk7CiAgICAgICAgICBwcm9taXNlTWFwLnNldChrZXksIHByb21pc2UpOwogICAgICAgIH0KICAgICAgICBjb25zdCBkZWx0YSA9IGRlbHRhTWFwLmdldChrZXkpID8/IDA7CiAgICAgICAgcmV0dXJuIGRlbHRhICsgYXdhaXQgcHJvbWlzZTsKICAgICAgfSwKICAgICAgcmVzZXQoeyBhZGRyZXNzLCBjaGFpbklkIH0pIHsKICAgICAgICBjb25zdCBrZXkgPSBnZXRLZXkoeyBhZGRyZXNzLCBjaGFpbklkIH0pOwogICAgICAgIGRlbHRhTWFwLmRlbGV0ZShrZXkpOwogICAgICAgIHByb21pc2VNYXAuZGVsZXRlKGtleSk7CiAgICAgIH0KICAgIH07CiAgfQogIGZ1bmN0aW9uIGpzb25ScGMoKSB7CiAgICByZXR1cm4gewogICAgICBhc3luYyBnZXQocGFyYW1ldGVycykgewogICAgICAgIGNvbnN0IHsgYWRkcmVzcywgY2xpZW50IH0gPSBwYXJhbWV0ZXJzOwogICAgICAgIHJldHVybiBnZXRUcmFuc2FjdGlvbkNvdW50KGNsaWVudCwgewogICAgICAgICAgYWRkcmVzcywKICAgICAgICAgIGJsb2NrVGFnOiAicGVuZGluZyIKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgc2V0KCkgewogICAgICB9CiAgICB9OwogIH0KICB2YXIgbm9uY2VNYW5hZ2VyID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZU5vbmNlTWFuYWdlcih7CiAgICBzb3VyY2U6IGpzb25ScGMoKQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Zvcm1hdHRlcnMvcHJvb2YuanMKICBmdW5jdGlvbiBmb3JtYXRTdG9yYWdlUHJvb2Yoc3RvcmFnZVByb29mKSB7CiAgICByZXR1cm4gc3RvcmFnZVByb29mLm1hcCgocHJvb2YpID0+ICh7CiAgICAgIC4uLnByb29mLAogICAgICB2YWx1ZTogQmlnSW50KHByb29mLnZhbHVlKQogICAgfSkpOwogIH0KICBmdW5jdGlvbiBmb3JtYXRQcm9vZihwcm9vZikgewogICAgcmV0dXJuIHsKICAgICAgLi4ucHJvb2YsCiAgICAgIGJhbGFuY2U6IHByb29mLmJhbGFuY2UgPyBCaWdJbnQocHJvb2YuYmFsYW5jZSkgOiB2b2lkIDAsCiAgICAgIG5vbmNlOiBwcm9vZi5ub25jZSA/IGhleFRvTnVtYmVyKHByb29mLm5vbmNlKSA6IHZvaWQgMCwKICAgICAgc3RvcmFnZVByb29mOiBwcm9vZi5zdG9yYWdlUHJvb2YgPyBmb3JtYXRTdG9yYWdlUHJvb2YocHJvb2Yuc3RvcmFnZVByb29mKSA6IHZvaWQgMAogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0UHJvb2YuanMKICBhc3luYyBmdW5jdGlvbiBnZXRQcm9vZihjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tOdW1iZXIsIGJsb2NrVGFnOiBibG9ja1RhZ18sIHN0b3JhZ2VLZXlzIH0pIHsKICAgIGNvbnN0IGJsb2NrVGFnID0gYmxvY2tUYWdfID8/ICJsYXRlc3QiOwogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciAhPT0gdm9pZCAwID8gbnVtYmVyVG9IZXgoYmxvY2tOdW1iZXIpIDogdm9pZCAwOwogICAgY29uc3QgcHJvb2YgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRQcm9vZiIsCiAgICAgIHBhcmFtczogW2FkZHJlc3MsIHN0b3JhZ2VLZXlzLCBibG9ja051bWJlckhleCB8fCBibG9ja1RhZ10KICAgIH0pOwogICAgcmV0dXJuIGZvcm1hdFByb29mKHByb29mKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0U3RvcmFnZUF0LmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldFN0b3JhZ2VBdChjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tOdW1iZXIsIGJsb2NrVGFnID0gImxhdGVzdCIsIHNsb3QgfSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciAhPT0gdm9pZCAwID8gbnVtYmVyVG9IZXgoYmxvY2tOdW1iZXIpIDogdm9pZCAwOwogICAgY29uc3QgZGF0YSA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2dldFN0b3JhZ2VBdCIsCiAgICAgIHBhcmFtczogW2FkZHJlc3MsIHNsb3QsIGJsb2NrTnVtYmVySGV4IHx8IGJsb2NrVGFnXQogICAgfSk7CiAgICByZXR1cm4gZGF0YTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0VHJhbnNhY3Rpb24uanMKICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uKGNsaWVudCwgeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyLCBibG9ja1RhZzogYmxvY2tUYWdfLCBoYXNoOiBoYXNoMywgaW5kZXg6IGluZGV4MiB9KSB7CiAgICBjb25zdCBibG9ja1RhZyA9IGJsb2NrVGFnXyB8fCAibGF0ZXN0IjsKICAgIGNvbnN0IGJsb2NrTnVtYmVySGV4ID0gYmxvY2tOdW1iZXIgIT09IHZvaWQgMCA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgIGxldCB0cmFuc2FjdGlvbiA9IG51bGw7CiAgICBpZiAoaGFzaDMpIHsKICAgICAgdHJhbnNhY3Rpb24gPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXRoX2dldFRyYW5zYWN0aW9uQnlIYXNoIiwKICAgICAgICBwYXJhbXM6IFtoYXNoM10KICAgICAgfSwgeyBkZWR1cGU6IHRydWUgfSk7CiAgICB9IGVsc2UgaWYgKGJsb2NrSGFzaCkgewogICAgICB0cmFuc2FjdGlvbiA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0VHJhbnNhY3Rpb25CeUJsb2NrSGFzaEFuZEluZGV4IiwKICAgICAgICBwYXJhbXM6IFtibG9ja0hhc2gsIG51bWJlclRvSGV4KGluZGV4MildCiAgICAgIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgfSBlbHNlIGlmIChibG9ja051bWJlckhleCB8fCBibG9ja1RhZykgewogICAgICB0cmFuc2FjdGlvbiA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0VHJhbnNhY3Rpb25CeUJsb2NrTnVtYmVyQW5kSW5kZXgiLAogICAgICAgIHBhcmFtczogW2Jsb2NrTnVtYmVySGV4IHx8IGJsb2NrVGFnLCBudW1iZXJUb0hleChpbmRleDIpXQogICAgICB9LCB7IGRlZHVwZTogQm9vbGVhbihibG9ja051bWJlckhleCkgfSk7CiAgICB9CiAgICBpZiAoIXRyYW5zYWN0aW9uKQogICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25Ob3RGb3VuZEVycm9yKHsKICAgICAgICBibG9ja0hhc2gsCiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgYmxvY2tUYWcsCiAgICAgICAgaGFzaDogaGFzaDMsCiAgICAgICAgaW5kZXg6IGluZGV4MgogICAgICB9KTsKICAgIGNvbnN0IGZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb24/LmZvcm1hdCB8fCBmb3JtYXRUcmFuc2FjdGlvbjsKICAgIHJldHVybiBmb3JtYXQodHJhbnNhY3Rpb24pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRUcmFuc2FjdGlvbkNvbmZpcm1hdGlvbnMuanMKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvbkNvbmZpcm1hdGlvbnMoY2xpZW50LCB7IGhhc2g6IGhhc2gzLCB0cmFuc2FjdGlvblJlY2VpcHQgfSkgewogICAgY29uc3QgW2Jsb2NrTnVtYmVyLCB0cmFuc2FjdGlvbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgIGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrTnVtYmVyLCAiZ2V0QmxvY2tOdW1iZXIiKSh7fSksCiAgICAgIGhhc2gzID8gZ2V0QWN0aW9uKGNsaWVudCwgZ2V0VHJhbnNhY3Rpb24sICJnZXRUcmFuc2FjdGlvbiIpKHsgaGFzaDogaGFzaDMgfSkgOiB2b2lkIDAKICAgIF0pOwogICAgY29uc3QgdHJhbnNhY3Rpb25CbG9ja051bWJlciA9IHRyYW5zYWN0aW9uUmVjZWlwdD8uYmxvY2tOdW1iZXIgfHwgdHJhbnNhY3Rpb24/LmJsb2NrTnVtYmVyOwogICAgaWYgKCF0cmFuc2FjdGlvbkJsb2NrTnVtYmVyKQogICAgICByZXR1cm4gMG47CiAgICByZXR1cm4gYmxvY2tOdW1iZXIgLSB0cmFuc2FjdGlvbkJsb2NrTnVtYmVyICsgMW47CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldFRyYW5zYWN0aW9uUmVjZWlwdC5qcwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvblJlY2VpcHQoY2xpZW50LCB7IGhhc2g6IGhhc2gzIH0pIHsKICAgIGNvbnN0IHJlY2VpcHQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRUcmFuc2FjdGlvblJlY2VpcHQiLAogICAgICBwYXJhbXM6IFtoYXNoM10KICAgIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgaWYgKCFyZWNlaXB0KQogICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25SZWNlaXB0Tm90Rm91bmRFcnJvcih7IGhhc2g6IGhhc2gzIH0pOwogICAgY29uc3QgZm9ybWF0ID0gY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzPy50cmFuc2FjdGlvblJlY2VpcHQ/LmZvcm1hdCB8fCBmb3JtYXRUcmFuc2FjdGlvblJlY2VpcHQ7CiAgICByZXR1cm4gZm9ybWF0KHJlY2VpcHQpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9tdWx0aWNhbGwuanMKICBpbml0X2FiaXMoKTsKICBpbml0X2FiaSgpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY29udHJhY3QoKTsKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2dldENoYWluQ29udHJhY3RBZGRyZXNzKCk7CiAgYXN5bmMgZnVuY3Rpb24gbXVsdGljYWxsKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhbGxvd0ZhaWx1cmUgPSB0cnVlLCBiYXRjaFNpemU6IGJhdGNoU2l6ZV8sIGJsb2NrTnVtYmVyLCBibG9ja1RhZywgbXVsdGljYWxsQWRkcmVzczogbXVsdGljYWxsQWRkcmVzc18sIHN0YXRlT3ZlcnJpZGUgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjb250cmFjdHMyID0gcGFyYW1ldGVycy5jb250cmFjdHM7CiAgICBjb25zdCBiYXRjaFNpemUgPSBiYXRjaFNpemVfID8/ICh0eXBlb2YgY2xpZW50LmJhdGNoPy5tdWx0aWNhbGwgPT09ICJvYmplY3QiICYmIGNsaWVudC5iYXRjaC5tdWx0aWNhbGwuYmF0Y2hTaXplIHx8IDEwMjQpOwogICAgbGV0IG11bHRpY2FsbEFkZHJlc3MgPSBtdWx0aWNhbGxBZGRyZXNzXzsKICAgIGlmICghbXVsdGljYWxsQWRkcmVzcykgewogICAgICBpZiAoIWNsaWVudC5jaGFpbikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNsaWVudCBjaGFpbiBub3QgY29uZmlndXJlZC4gbXVsdGljYWxsQWRkcmVzcyBpcyByZXF1aXJlZC4iKTsKICAgICAgbXVsdGljYWxsQWRkcmVzcyA9IGdldENoYWluQ29udHJhY3RBZGRyZXNzKHsKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBjaGFpbjogY2xpZW50LmNoYWluLAogICAgICAgIGNvbnRyYWN0OiAibXVsdGljYWxsMyIKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBjaHVua2VkQ2FsbHMgPSBbW11dOwogICAgbGV0IGN1cnJlbnRDaHVuayA9IDA7CiAgICBsZXQgY3VycmVudENodW5rU2l6ZSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyYWN0czIubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGZ1bmN0aW9uTmFtZSB9ID0gY29udHJhY3RzMltpXTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBjYWxsRGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7IGFiaTogYWJpMiwgYXJncywgZnVuY3Rpb25OYW1lIH0pOwogICAgICAgIGN1cnJlbnRDaHVua1NpemUgKz0gKGNhbGxEYXRhLmxlbmd0aCAtIDIpIC8gMjsKICAgICAgICBpZiAoCiAgICAgICAgICAvLyBDaGVjayBpZiBiYXRjaGluZyBpcyBlbmFibGVkLgogICAgICAgICAgYmF0Y2hTaXplID4gMCAmJiAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBzaXplIG9mIHRoZSBiYXRjaCBleGNlZWRzIHRoZSBzaXplIGxpbWl0LgogICAgICAgICAgY3VycmVudENodW5rU2l6ZSA+IGJhdGNoU2l6ZSAmJiAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBjaHVuayBpcyBub3QgYWxyZWFkeSBlbXB0eS4KICAgICAgICAgIGNodW5rZWRDYWxsc1tjdXJyZW50Q2h1bmtdLmxlbmd0aCA+IDAKICAgICAgICApIHsKICAgICAgICAgIGN1cnJlbnRDaHVuaysrOwogICAgICAgICAgY3VycmVudENodW5rU2l6ZSA9IChjYWxsRGF0YS5sZW5ndGggLSAyKSAvIDI7CiAgICAgICAgICBjaHVua2VkQ2FsbHNbY3VycmVudENodW5rXSA9IFtdOwogICAgICAgIH0KICAgICAgICBjaHVua2VkQ2FsbHNbY3VycmVudENodW5rXSA9IFsKICAgICAgICAgIC4uLmNodW5rZWRDYWxsc1tjdXJyZW50Q2h1bmtdLAogICAgICAgICAgewogICAgICAgICAgICBhbGxvd0ZhaWx1cmU6IHRydWUsCiAgICAgICAgICAgIGNhbGxEYXRhLAogICAgICAgICAgICB0YXJnZXQ6IGFkZHJlc3MKICAgICAgICAgIH0KICAgICAgICBdOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zdCBlcnJvciA9IGdldENvbnRyYWN0RXJyb3IoZXJyLCB7CiAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgYXJncywKICAgICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3QvbXVsdGljYWxsIiwKICAgICAgICAgIGZ1bmN0aW9uTmFtZQogICAgICAgIH0pOwogICAgICAgIGlmICghYWxsb3dGYWlsdXJlKQogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgY2h1bmtlZENhbGxzW2N1cnJlbnRDaHVua10gPSBbCiAgICAgICAgICAuLi5jaHVua2VkQ2FsbHNbY3VycmVudENodW5rXSwKICAgICAgICAgIHsKICAgICAgICAgICAgYWxsb3dGYWlsdXJlOiB0cnVlLAogICAgICAgICAgICBjYWxsRGF0YTogIjB4IiwKICAgICAgICAgICAgdGFyZ2V0OiBhZGRyZXNzCiAgICAgICAgICB9CiAgICAgICAgXTsKICAgICAgfQogICAgfQogICAgY29uc3QgYWdncmVnYXRlM1Jlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoY2h1bmtlZENhbGxzLm1hcCgoY2FsbHMpID0+IGdldEFjdGlvbihjbGllbnQsIHJlYWRDb250cmFjdCwgInJlYWRDb250cmFjdCIpKHsKICAgICAgYWJpOiBtdWx0aWNhbGwzQWJpLAogICAgICBhZGRyZXNzOiBtdWx0aWNhbGxBZGRyZXNzLAogICAgICBhcmdzOiBbY2FsbHNdLAogICAgICBibG9ja051bWJlciwKICAgICAgYmxvY2tUYWcsCiAgICAgIGZ1bmN0aW9uTmFtZTogImFnZ3JlZ2F0ZTMiLAogICAgICBzdGF0ZU92ZXJyaWRlCiAgICB9KSkpOwogICAgY29uc3QgcmVzdWx0cyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZ2dyZWdhdGUzUmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCByZXN1bHQgPSBhZ2dyZWdhdGUzUmVzdWx0c1tpXTsKICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICJyZWplY3RlZCIpIHsKICAgICAgICBpZiAoIWFsbG93RmFpbHVyZSkKICAgICAgICAgIHRocm93IHJlc3VsdC5yZWFzb247CiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaHVua2VkQ2FsbHNbaV0ubGVuZ3RoOyBqKyspIHsKICAgICAgICAgIHJlc3VsdHMucHVzaCh7CiAgICAgICAgICAgIHN0YXR1czogImZhaWx1cmUiLAogICAgICAgICAgICBlcnJvcjogcmVzdWx0LnJlYXNvbiwKICAgICAgICAgICAgcmVzdWx0OiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBhZ2dyZWdhdGUzUmVzdWx0ID0gcmVzdWx0LnZhbHVlOwogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFnZ3JlZ2F0ZTNSZXN1bHQubGVuZ3RoOyBqKyspIHsKICAgICAgICBjb25zdCB7IHJldHVybkRhdGEsIHN1Y2Nlc3MgfSA9IGFnZ3JlZ2F0ZTNSZXN1bHRbal07CiAgICAgICAgY29uc3QgeyBjYWxsRGF0YSB9ID0gY2h1bmtlZENhbGxzW2ldW2pdOwogICAgICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhZGRyZXNzLCBmdW5jdGlvbk5hbWUsIGFyZ3MgfSA9IGNvbnRyYWN0czJbcmVzdWx0cy5sZW5ndGhdOwogICAgICAgIHRyeSB7CiAgICAgICAgICBpZiAoY2FsbERhdGEgPT09ICIweCIpCiAgICAgICAgICAgIHRocm93IG5ldyBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IoKTsKICAgICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgdGhyb3cgbmV3IFJhd0NvbnRyYWN0RXJyb3IoeyBkYXRhOiByZXR1cm5EYXRhIH0pOwogICAgICAgICAgY29uc3QgcmVzdWx0MiA9IGRlY29kZUZ1bmN0aW9uUmVzdWx0KHsKICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICBhcmdzLAogICAgICAgICAgICBkYXRhOiByZXR1cm5EYXRhLAogICAgICAgICAgICBmdW5jdGlvbk5hbWUKICAgICAgICAgIH0pOwogICAgICAgICAgcmVzdWx0cy5wdXNoKGFsbG93RmFpbHVyZSA/IHsgcmVzdWx0OiByZXN1bHQyLCBzdGF0dXM6ICJzdWNjZXNzIiB9IDogcmVzdWx0Mik7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBjb25zdCBlcnJvciA9IGdldENvbnRyYWN0RXJyb3IoZXJyLCB7CiAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgYWRkcmVzcywKICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9jb250cmFjdC9tdWx0aWNhbGwiLAogICAgICAgICAgICBmdW5jdGlvbk5hbWUKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFhbGxvd0ZhaWx1cmUpCiAgICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgICAgcmVzdWx0cy5wdXNoKHsgZXJyb3IsIHJlc3VsdDogdm9pZCAwLCBzdGF0dXM6ICJmYWlsdXJlIiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChyZXN1bHRzLmxlbmd0aCAhPT0gY29udHJhY3RzMi5sZW5ndGgpCiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJtdWx0aWNhbGwgcmVzdWx0cyBtaXNtYXRjaCIpOwogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3ZlcmlmeUhhc2guanMKICBpbml0X2FiaXMoKTsKICBpbml0X2NvbnRyYWN0cygpOwogIGluaXRfY29udHJhY3QoKTsKICBpbml0X2VuY29kZURlcGxveURhdGEoKTsKICBpbml0X2dldEFkZHJlc3MoKTsKICBpbml0X2lzQWRkcmVzc0VxdWFsKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9pc0J5dGVzRXF1YWwuanMKICBpbml0X3V0aWxzNCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfaXNIZXgoKTsKICBmdW5jdGlvbiBpc0J5dGVzRXF1YWwoYV8sIGJfKSB7CiAgICBjb25zdCBhID0gaXNIZXgoYV8pID8gdG9CeXRlcyhhXykgOiBhXzsKICAgIGNvbnN0IGIgPSBpc0hleChiXykgPyB0b0J5dGVzKGJfKSA6IGJfOwogICAgcmV0dXJuIGVxdWFsQnl0ZXMoYSwgYik7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3ZlcmlmeUhhc2guanMKICBpbml0X2lzSGV4KCk7CiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3NpZ25hdHVyZS9zZXJpYWxpemVTaWduYXR1cmUuanMKICBpbml0X3NlY3AyNTZrMSgpOwogIGluaXRfZnJvbUhleCgpOwogIGluaXRfdG9CeXRlcygpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZVNpZ25hdHVyZSh7IHIsIHMsIHRvID0gImhleCIsIHYsIHlQYXJpdHkgfSkgewogICAgY29uc3QgeVBhcml0eV8gPSAoKCkgPT4gewogICAgICBpZiAoeVBhcml0eSA9PT0gMCB8fCB5UGFyaXR5ID09PSAxKQogICAgICAgIHJldHVybiB5UGFyaXR5OwogICAgICBpZiAodiAmJiAodiA9PT0gMjduIHx8IHYgPT09IDI4biB8fCB2ID49IDM1bikpCiAgICAgICAgcmV0dXJuIHYgJSAybiA9PT0gMG4gPyAxIDogMDsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGB2YCBvciBgeVBhcml0eWAgdmFsdWUiKTsKICAgIH0pKCk7CiAgICBjb25zdCBzaWduYXR1cmUgPSBgMHgke25ldyBzZWNwMjU2azEuU2lnbmF0dXJlKGhleFRvQmlnSW50KHIpLCBoZXhUb0JpZ0ludChzKSkudG9Db21wYWN0SGV4KCl9JHt5UGFyaXR5XyA9PT0gMCA/ICIxYiIgOiAiMWMifWA7CiAgICBpZiAodG8gPT09ICJoZXgiKQogICAgICByZXR1cm4gc2lnbmF0dXJlOwogICAgcmV0dXJuIGhleFRvQnl0ZXMoc2lnbmF0dXJlKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvdmVyaWZ5SGFzaC5qcwogIGluaXRfY2FsbCgpOwogIGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUhhc2gyKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhZGRyZXNzLCBmYWN0b3J5LCBmYWN0b3J5RGF0YSwgaGFzaDogaGFzaDMsIHNpZ25hdHVyZSwgLi4ucmVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZUhleCA9ICgoKSA9PiB7CiAgICAgIGlmIChpc0hleChzaWduYXR1cmUpKQogICAgICAgIHJldHVybiBzaWduYXR1cmU7CiAgICAgIGlmICh0eXBlb2Ygc2lnbmF0dXJlID09PSAib2JqZWN0IiAmJiAiciIgaW4gc2lnbmF0dXJlICYmICJzIiBpbiBzaWduYXR1cmUpCiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVNpZ25hdHVyZShzaWduYXR1cmUpOwogICAgICByZXR1cm4gYnl0ZXNUb0hleChzaWduYXR1cmUpOwogICAgfSkoKTsKICAgIGNvbnN0IHdyYXBwZWRTaWduYXR1cmUgPSBhd2FpdCAoYXN5bmMgKCkgPT4gewogICAgICBpZiAoIWZhY3RvcnkgJiYgIWZhY3RvcnlEYXRhKQogICAgICAgIHJldHVybiBzaWduYXR1cmVIZXg7CiAgICAgIGlmIChpc0VyYzY0OTJTaWduYXR1cmUoc2lnbmF0dXJlSGV4KSkKICAgICAgICByZXR1cm4gc2lnbmF0dXJlSGV4OwogICAgICByZXR1cm4gc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZSh7CiAgICAgICAgYWRkcmVzczogZmFjdG9yeSwKICAgICAgICBkYXRhOiBmYWN0b3J5RGF0YSwKICAgICAgICBzaWduYXR1cmU6IHNpZ25hdHVyZUhleAogICAgICB9KTsKICAgIH0pKCk7CiAgICB0cnkgewogICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGNhbGwsICJjYWxsIikoewogICAgICAgIGRhdGE6IGVuY29kZURlcGxveURhdGEoewogICAgICAgICAgYWJpOiB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JBYmksCiAgICAgICAgICBhcmdzOiBbYWRkcmVzcywgaGFzaDMsIHdyYXBwZWRTaWduYXR1cmVdLAogICAgICAgICAgYnl0ZWNvZGU6IHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckJ5dGVDb2RlCiAgICAgICAgfSksCiAgICAgICAgLi4ucmVzdAogICAgICB9KTsKICAgICAgcmV0dXJuIGlzQnl0ZXNFcXVhbChkYXRhID8/ICIweDAiLCAiMHgxIik7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICB0cnkgewogICAgICAgIGNvbnN0IHZlcmlmaWVkID0gaXNBZGRyZXNzRXF1YWwoZ2V0QWRkcmVzcyhhZGRyZXNzKSwgYXdhaXQgcmVjb3ZlckFkZHJlc3MoeyBoYXNoOiBoYXNoMywgc2lnbmF0dXJlIH0pKTsKICAgICAgICBpZiAodmVyaWZpZWQpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSBjYXRjaCB7CiAgICAgIH0KICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ2FsbEV4ZWN1dGlvbkVycm9yKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHRocm93IGVycm9yOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy92ZXJpZnlNZXNzYWdlLmpzCiAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5TWVzc2FnZTIoY2xpZW50LCB7IGFkZHJlc3MsIG1lc3NhZ2UsIGZhY3RvcnksIGZhY3RvcnlEYXRhLCBzaWduYXR1cmUsIC4uLmNhbGxSZXF1ZXN0IH0pIHsKICAgIGNvbnN0IGhhc2gzID0gaGFzaE1lc3NhZ2UobWVzc2FnZSk7CiAgICByZXR1cm4gdmVyaWZ5SGFzaDIoY2xpZW50LCB7CiAgICAgIGFkZHJlc3MsCiAgICAgIGZhY3RvcnksCiAgICAgIGZhY3RvcnlEYXRhLAogICAgICBoYXNoOiBoYXNoMywKICAgICAgc2lnbmF0dXJlLAogICAgICAuLi5jYWxsUmVxdWVzdAogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3ZlcmlmeVR5cGVkRGF0YS5qcwogIGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVR5cGVkRGF0YTIoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGZhY3RvcnksIGZhY3RvcnlEYXRhLCBzaWduYXR1cmUsIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcywgZG9tYWluLCAuLi5jYWxsUmVxdWVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGhhc2gzID0gaGFzaFR5cGVkRGF0YSh7IG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcywgZG9tYWluIH0pOwogICAgcmV0dXJuIHZlcmlmeUhhc2gyKGNsaWVudCwgewogICAgICBhZGRyZXNzLAogICAgICBmYWN0b3J5LAogICAgICBmYWN0b3J5RGF0YSwKICAgICAgaGFzaDogaGFzaDMsCiAgICAgIHNpZ25hdHVyZSwKICAgICAgLi4uY2FsbFJlcXVlc3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy93YWl0Rm9yVHJhbnNhY3Rpb25SZWNlaXB0LmpzCiAgaW5pdF90cmFuc2FjdGlvbigpOwogIGluaXRfc3RyaW5naWZ5KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvd2F0Y2hCbG9ja051bWJlci5qcwogIGluaXRfZnJvbUhleCgpOwogIGluaXRfc3RyaW5naWZ5KCk7CiAgZnVuY3Rpb24gd2F0Y2hCbG9ja051bWJlcihjbGllbnQsIHsgZW1pdE9uQmVnaW4gPSBmYWxzZSwgZW1pdE1pc3NlZCA9IGZhbHNlLCBvbkJsb2NrTnVtYmVyLCBvbkVycm9yLCBwb2xsOiBwb2xsXywgcG9sbGluZ0ludGVydmFsID0gY2xpZW50LnBvbGxpbmdJbnRlcnZhbCB9KSB7CiAgICBjb25zdCBlbmFibGVQb2xsaW5nID0gKCgpID0+IHsKICAgICAgaWYgKHR5cGVvZiBwb2xsXyAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgcmV0dXJuIHBvbGxfOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAid2ViU29ja2V0IikKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIgJiYgY2xpZW50LnRyYW5zcG9ydC50cmFuc3BvcnRzWzBdLmNvbmZpZy50eXBlID09PSAid2ViU29ja2V0IikKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSkoKTsKICAgIGxldCBwcmV2QmxvY2tOdW1iZXI7CiAgICBjb25zdCBwb2xsQmxvY2tOdW1iZXIgPSAoKSA9PiB7CiAgICAgIGNvbnN0IG9ic2VydmVySWQgPSBzdHJpbmdpZnkoWwogICAgICAgICJ3YXRjaEJsb2NrTnVtYmVyIiwKICAgICAgICBjbGllbnQudWlkLAogICAgICAgIGVtaXRPbkJlZ2luLAogICAgICAgIGVtaXRNaXNzZWQsCiAgICAgICAgcG9sbGluZ0ludGVydmFsCiAgICAgIF0pOwogICAgICByZXR1cm4gb2JzZXJ2ZShvYnNlcnZlcklkLCB7IG9uQmxvY2tOdW1iZXIsIG9uRXJyb3IgfSwgKGVtaXQpID0+IHBvbGwoYXN5bmMgKCkgPT4gewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBibG9ja051bWJlciA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrTnVtYmVyLCAiZ2V0QmxvY2tOdW1iZXIiKSh7IGNhY2hlVGltZTogMCB9KTsKICAgICAgICAgIGlmIChwcmV2QmxvY2tOdW1iZXIpIHsKICAgICAgICAgICAgaWYgKGJsb2NrTnVtYmVyID09PSBwcmV2QmxvY2tOdW1iZXIpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoYmxvY2tOdW1iZXIgLSBwcmV2QmxvY2tOdW1iZXIgPiAxICYmIGVtaXRNaXNzZWQpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBpID0gcHJldkJsb2NrTnVtYmVyICsgMW47IGkgPCBibG9ja051bWJlcjsgaSsrKSB7CiAgICAgICAgICAgICAgICBlbWl0Lm9uQmxvY2tOdW1iZXIoaSwgcHJldkJsb2NrTnVtYmVyKTsKICAgICAgICAgICAgICAgIHByZXZCbG9ja051bWJlciA9IGk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXByZXZCbG9ja051bWJlciB8fCBibG9ja051bWJlciA+IHByZXZCbG9ja051bWJlcikgewogICAgICAgICAgICBlbWl0Lm9uQmxvY2tOdW1iZXIoYmxvY2tOdW1iZXIsIHByZXZCbG9ja051bWJlcik7CiAgICAgICAgICAgIHByZXZCbG9ja051bWJlciA9IGJsb2NrTnVtYmVyOwogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgZW1pdC5vbkVycm9yPy4oZXJyKTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBlbWl0T25CZWdpbiwKICAgICAgICBpbnRlcnZhbDogcG9sbGluZ0ludGVydmFsCiAgICAgIH0pKTsKICAgIH07CiAgICBjb25zdCBzdWJzY3JpYmVCbG9ja051bWJlciA9ICgpID0+IHsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoQmxvY2tOdW1iZXIiLAogICAgICAgIGNsaWVudC51aWQsCiAgICAgICAgZW1pdE9uQmVnaW4sCiAgICAgICAgZW1pdE1pc3NlZAogICAgICBdKTsKICAgICAgcmV0dXJuIG9ic2VydmUob2JzZXJ2ZXJJZCwgeyBvbkJsb2NrTnVtYmVyLCBvbkVycm9yIH0sIChlbWl0KSA9PiB7CiAgICAgICAgbGV0IGFjdGl2ZSA9IHRydWU7CiAgICAgICAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydCA9ICgoKSA9PiB7CiAgICAgICAgICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gImZhbGxiYWNrIikgewogICAgICAgICAgICAgICAgY29uc3QgdHJhbnNwb3J0MiA9IGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0cy5maW5kKCh0cmFuc3BvcnQzKSA9PiB0cmFuc3BvcnQzLmNvbmZpZy50eXBlID09PSAid2ViU29ja2V0Iik7CiAgICAgICAgICAgICAgICBpZiAoIXRyYW5zcG9ydDIpCiAgICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zcG9ydDIudmFsdWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgICB9KSgpOwogICAgICAgICAgICBjb25zdCB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZV8gfSA9IGF3YWl0IHRyYW5zcG9ydC5zdWJzY3JpYmUoewogICAgICAgICAgICAgIHBhcmFtczogWyJuZXdIZWFkcyJdLAogICAgICAgICAgICAgIG9uRGF0YShkYXRhKSB7CiAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgY29uc3QgYmxvY2tOdW1iZXIgPSBoZXhUb0JpZ0ludChkYXRhLnJlc3VsdD8ubnVtYmVyKTsKICAgICAgICAgICAgICAgIGVtaXQub25CbG9ja051bWJlcihibG9ja051bWJlciwgcHJldkJsb2NrTnVtYmVyKTsKICAgICAgICAgICAgICAgIHByZXZCbG9ja051bWJlciA9IGJsb2NrTnVtYmVyOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgb25FcnJvcihlcnJvcikgewogICAgICAgICAgICAgICAgZW1pdC5vbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgICB1bnN1YnNjcmliZSgpOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIG9uRXJyb3I/LihlcnIpOwogICAgICAgICAgfQogICAgICAgIH0pKCk7CiAgICAgICAgcmV0dXJuICgpID0+IHVuc3Vic2NyaWJlKCk7CiAgICAgIH0pOwogICAgfTsKICAgIHJldHVybiBlbmFibGVQb2xsaW5nID8gcG9sbEJsb2NrTnVtYmVyKCkgOiBzdWJzY3JpYmVCbG9ja051bWJlcigpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy93YWl0Rm9yVHJhbnNhY3Rpb25SZWNlaXB0LmpzCiAgYXN5bmMgZnVuY3Rpb24gd2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdChjbGllbnQsIHsKICAgIGNvbmZpcm1hdGlvbnMgPSAxLAogICAgaGFzaDogaGFzaDMsCiAgICBvblJlcGxhY2VkLAogICAgcG9sbGluZ0ludGVydmFsID0gY2xpZW50LnBvbGxpbmdJbnRlcnZhbCwKICAgIHJldHJ5Q291bnQgPSA2LAogICAgcmV0cnlEZWxheSA9ICh7IGNvdW50IH0pID0+IH5+KDEgPDwgY291bnQpICogMjAwLAogICAgLy8gZXhwb25lbnRpYWwgYmFja29mZgogICAgdGltZW91dAogIH0pIHsKICAgIGNvbnN0IG9ic2VydmVySWQgPSBzdHJpbmdpZnkoWyJ3YWl0Rm9yVHJhbnNhY3Rpb25SZWNlaXB0IiwgY2xpZW50LnVpZCwgaGFzaDNdKTsKICAgIGxldCBjb3VudCA9IDA7CiAgICBsZXQgdHJhbnNhY3Rpb247CiAgICBsZXQgcmVwbGFjZWRUcmFuc2FjdGlvbjsKICAgIGxldCByZWNlaXB0OwogICAgbGV0IHJldHJ5aW5nID0gZmFsc2U7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICBpZiAodGltZW91dCkKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvcih7IGhhc2g6IGhhc2gzIH0pKSwgdGltZW91dCk7CiAgICAgIGNvbnN0IF91bm9ic2VydmUgPSBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25SZXBsYWNlZCwgcmVzb2x2ZSwgcmVqZWN0IH0sIChlbWl0KSA9PiB7CiAgICAgICAgY29uc3QgX3Vud2F0Y2ggPSBnZXRBY3Rpb24oY2xpZW50LCB3YXRjaEJsb2NrTnVtYmVyLCAid2F0Y2hCbG9ja051bWJlciIpKHsKICAgICAgICAgIGVtaXRNaXNzZWQ6IHRydWUsCiAgICAgICAgICBlbWl0T25CZWdpbjogdHJ1ZSwKICAgICAgICAgIHBvbGw6IHRydWUsCiAgICAgICAgICBwb2xsaW5nSW50ZXJ2YWwsCiAgICAgICAgICBhc3luYyBvbkJsb2NrTnVtYmVyKGJsb2NrTnVtYmVyXykgewogICAgICAgICAgICBjb25zdCBkb25lID0gKGZuKSA9PiB7CiAgICAgICAgICAgICAgX3Vud2F0Y2goKTsKICAgICAgICAgICAgICBmbigpOwogICAgICAgICAgICAgIF91bm9ic2VydmUoKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgbGV0IGJsb2NrTnVtYmVyID0gYmxvY2tOdW1iZXJfOwogICAgICAgICAgICBpZiAocmV0cnlpbmcpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoY291bnQgPiByZXRyeUNvdW50KQogICAgICAgICAgICAgIGRvbmUoKCkgPT4gZW1pdC5yZWplY3QobmV3IFdhaXRGb3JUcmFuc2FjdGlvblJlY2VpcHRUaW1lb3V0RXJyb3IoeyBoYXNoOiBoYXNoMyB9KSkpOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGlmIChyZWNlaXB0KSB7CiAgICAgICAgICAgICAgICBpZiAoY29uZmlybWF0aW9ucyA+IDEgJiYgKCFyZWNlaXB0LmJsb2NrTnVtYmVyIHx8IGJsb2NrTnVtYmVyIC0gcmVjZWlwdC5ibG9ja051bWJlciArIDFuIDwgY29uZmlybWF0aW9ucykpCiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGRvbmUoKCkgPT4gZW1pdC5yZXNvbHZlKHJlY2VpcHQpKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbikgewogICAgICAgICAgICAgICAgcmV0cnlpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgYXdhaXQgd2l0aFJldHJ5KGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24gPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRUcmFuc2FjdGlvbiwgImdldFRyYW5zYWN0aW9uIikoeyBoYXNoOiBoYXNoMyB9KTsKICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zYWN0aW9uLmJsb2NrTnVtYmVyKQogICAgICAgICAgICAgICAgICAgIGJsb2NrTnVtYmVyID0gdHJhbnNhY3Rpb24uYmxvY2tOdW1iZXI7CiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgIGRlbGF5OiByZXRyeURlbGF5LAogICAgICAgICAgICAgICAgICByZXRyeUNvdW50CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHJ5aW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJlY2VpcHQgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRUcmFuc2FjdGlvblJlY2VpcHQsICJnZXRUcmFuc2FjdGlvblJlY2VpcHQiKSh7IGhhc2g6IGhhc2gzIH0pOwogICAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25zID4gMSAmJiAoIXJlY2VpcHQuYmxvY2tOdW1iZXIgfHwgYmxvY2tOdW1iZXIgLSByZWNlaXB0LmJsb2NrTnVtYmVyICsgMW4gPCBjb25maXJtYXRpb25zKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICBkb25lKCgpID0+IGVtaXQucmVzb2x2ZShyZWNlaXB0KSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUcmFuc2FjdGlvbk5vdEZvdW5kRXJyb3IgfHwgZXJyIGluc3RhbmNlb2YgVHJhbnNhY3Rpb25SZWNlaXB0Tm90Rm91bmRFcnJvcikgewogICAgICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbikgewogICAgICAgICAgICAgICAgICByZXRyeWluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICByZXBsYWNlZFRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247CiAgICAgICAgICAgICAgICAgIHJldHJ5aW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBhd2FpdCB3aXRoUmV0cnkoKCkgPT4gZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2ssICJnZXRCbG9jayIpKHsKICAgICAgICAgICAgICAgICAgICBibG9ja051bWJlciwKICAgICAgICAgICAgICAgICAgICBpbmNsdWRlVHJhbnNhY3Rpb25zOiB0cnVlCiAgICAgICAgICAgICAgICAgIH0pLCB7CiAgICAgICAgICAgICAgICAgICAgZGVsYXk6IHJldHJ5RGVsYXksCiAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudCwKICAgICAgICAgICAgICAgICAgICBzaG91bGRSZXRyeTogKHsgZXJyb3IgfSkgPT4gZXJyb3IgaW5zdGFuY2VvZiBCbG9ja05vdEZvdW5kRXJyb3IKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIHJldHJ5aW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50VHJhbnNhY3Rpb24gPSBibG9jay50cmFuc2FjdGlvbnMuZmluZCgoeyBmcm9tLCBub25jZSB9KSA9PiBmcm9tID09PSByZXBsYWNlZFRyYW5zYWN0aW9uLmZyb20gJiYgbm9uY2UgPT09IHJlcGxhY2VkVHJhbnNhY3Rpb24ubm9uY2UpOwogICAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2VtZW50VHJhbnNhY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICByZWNlaXB0ID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0VHJhbnNhY3Rpb25SZWNlaXB0LCAiZ2V0VHJhbnNhY3Rpb25SZWNlaXB0IikoewogICAgICAgICAgICAgICAgICAgIGhhc2g6IHJlcGxhY2VtZW50VHJhbnNhY3Rpb24uaGFzaAogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbnMgPiAxICYmICghcmVjZWlwdC5ibG9ja051bWJlciB8fCBibG9ja051bWJlciAtIHJlY2VpcHQuYmxvY2tOdW1iZXIgKyAxbiA8IGNvbmZpcm1hdGlvbnMpKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgbGV0IHJlYXNvbiA9ICJyZXBsYWNlZCI7CiAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudFRyYW5zYWN0aW9uLnRvID09PSByZXBsYWNlZFRyYW5zYWN0aW9uLnRvICYmIHJlcGxhY2VtZW50VHJhbnNhY3Rpb24udmFsdWUgPT09IHJlcGxhY2VkVHJhbnNhY3Rpb24udmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICByZWFzb24gPSAicmVwcmljZWQiOwogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcGxhY2VtZW50VHJhbnNhY3Rpb24uZnJvbSA9PT0gcmVwbGFjZW1lbnRUcmFuc2FjdGlvbi50byAmJiByZXBsYWNlbWVudFRyYW5zYWN0aW9uLnZhbHVlID09PSAwbikgewogICAgICAgICAgICAgICAgICAgIHJlYXNvbiA9ICJjYW5jZWxsZWQiOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGRvbmUoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGVtaXQub25SZXBsYWNlZD8uKHsKICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbiwKICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VkVHJhbnNhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbjogcmVwbGFjZW1lbnRUcmFuc2FjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUmVjZWlwdDogcmVjZWlwdAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGVtaXQucmVzb2x2ZShyZWNlaXB0KTsKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJfKSB7CiAgICAgICAgICAgICAgICAgIGRvbmUoKCkgPT4gZW1pdC5yZWplY3QoZXJyXykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkb25lKCgpID0+IGVtaXQucmVqZWN0KGVycikpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3dhdGNoQmxvY2tzLmpzCiAgaW5pdF9zdHJpbmdpZnkoKTsKICBmdW5jdGlvbiB3YXRjaEJsb2NrcyhjbGllbnQsIHsgYmxvY2tUYWcgPSAibGF0ZXN0IiwgZW1pdE1pc3NlZCA9IGZhbHNlLCBlbWl0T25CZWdpbiA9IGZhbHNlLCBvbkJsb2NrLCBvbkVycm9yLCBpbmNsdWRlVHJhbnNhY3Rpb25zOiBpbmNsdWRlVHJhbnNhY3Rpb25zXywgcG9sbDogcG9sbF8sIHBvbGxpbmdJbnRlcnZhbCA9IGNsaWVudC5wb2xsaW5nSW50ZXJ2YWwgfSkgewogICAgY29uc3QgZW5hYmxlUG9sbGluZyA9ICgoKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgcG9sbF8gIT09ICJ1bmRlZmluZWQiKQogICAgICAgIHJldHVybiBwb2xsXzsKICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAiZmFsbGJhY2siICYmIGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0c1swXS5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pKCk7CiAgICBjb25zdCBpbmNsdWRlVHJhbnNhY3Rpb25zID0gaW5jbHVkZVRyYW5zYWN0aW9uc18gPz8gZmFsc2U7CiAgICBsZXQgcHJldkJsb2NrOwogICAgY29uc3QgcG9sbEJsb2NrcyA9ICgpID0+IHsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoQmxvY2tzIiwKICAgICAgICBjbGllbnQudWlkLAogICAgICAgIGJsb2NrVGFnLAogICAgICAgIGVtaXRNaXNzZWQsCiAgICAgICAgZW1pdE9uQmVnaW4sCiAgICAgICAgaW5jbHVkZVRyYW5zYWN0aW9ucywKICAgICAgICBwb2xsaW5nSW50ZXJ2YWwKICAgICAgXSk7CiAgICAgIHJldHVybiBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25CbG9jaywgb25FcnJvciB9LCAoZW1pdCkgPT4gcG9sbChhc3luYyAoKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGJsb2NrID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2ssICJnZXRCbG9jayIpKHsKICAgICAgICAgICAgYmxvY2tUYWcsCiAgICAgICAgICAgIGluY2x1ZGVUcmFuc2FjdGlvbnMKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGJsb2NrLm51bWJlciAmJiBwcmV2QmxvY2s/Lm51bWJlcikgewogICAgICAgICAgICBpZiAoYmxvY2subnVtYmVyID09PSBwcmV2QmxvY2subnVtYmVyKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGJsb2NrLm51bWJlciAtIHByZXZCbG9jay5udW1iZXIgPiAxICYmIGVtaXRNaXNzZWQpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBpID0gcHJldkJsb2NrPy5udW1iZXIgKyAxbjsgaSA8IGJsb2NrLm51bWJlcjsgaSsrKSB7CiAgICAgICAgICAgICAgICBjb25zdCBibG9jazIgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRCbG9jaywgImdldEJsb2NrIikoewogICAgICAgICAgICAgICAgICBibG9ja051bWJlcjogaSwKICAgICAgICAgICAgICAgICAgaW5jbHVkZVRyYW5zYWN0aW9ucwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBlbWl0Lm9uQmxvY2soYmxvY2syLCBwcmV2QmxvY2spOwogICAgICAgICAgICAgICAgcHJldkJsb2NrID0gYmxvY2syOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKAogICAgICAgICAgICAvLyBJZiBubyBwcmV2aW91cyBibG9jayBleGlzdHMsIGVtaXQuCiAgICAgICAgICAgICFwcmV2QmxvY2s/Lm51bWJlciB8fCAvLyBJZiB0aGUgYmxvY2sgdGFnIGlzICJwZW5kaW5nIiB3aXRoIG5vIGJsb2NrIG51bWJlciwgZW1pdC4KICAgICAgICAgICAgYmxvY2tUYWcgPT09ICJwZW5kaW5nIiAmJiAhYmxvY2s/Lm51bWJlciB8fCAvLyBJZiB0aGUgbmV4dCBibG9jayBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSBwcmV2aW91cyBibG9jayBudW1iZXIsIGVtaXQuCiAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZW1pdCBibG9ja3MgaW4gdGhlIHBhc3QuCiAgICAgICAgICAgIGJsb2NrLm51bWJlciAmJiBibG9jay5udW1iZXIgPiBwcmV2QmxvY2subnVtYmVyCiAgICAgICAgICApIHsKICAgICAgICAgICAgZW1pdC5vbkJsb2NrKGJsb2NrLCBwcmV2QmxvY2spOwogICAgICAgICAgICBwcmV2QmxvY2sgPSBibG9jazsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGVtaXQub25FcnJvcj8uKGVycik7CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAgZW1pdE9uQmVnaW4sCiAgICAgICAgaW50ZXJ2YWw6IHBvbGxpbmdJbnRlcnZhbAogICAgICB9KSk7CiAgICB9OwogICAgY29uc3Qgc3Vic2NyaWJlQmxvY2tzID0gKCkgPT4gewogICAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgICAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICAgIChhc3luYyAoKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydCA9ICgoKSA9PiB7CiAgICAgICAgICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIpIHsKICAgICAgICAgICAgICBjb25zdCB0cmFuc3BvcnQyID0gY2xpZW50LnRyYW5zcG9ydC50cmFuc3BvcnRzLmZpbmQoKHRyYW5zcG9ydDMpID0+IHRyYW5zcG9ydDMuY29uZmlnLnR5cGUgPT09ICJ3ZWJTb2NrZXQiKTsKICAgICAgICAgICAgICBpZiAoIXRyYW5zcG9ydDIpCiAgICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgICAgICByZXR1cm4gdHJhbnNwb3J0Mi52YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgIH0pKCk7CiAgICAgICAgICBjb25zdCB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZV8gfSA9IGF3YWl0IHRyYW5zcG9ydC5zdWJzY3JpYmUoewogICAgICAgICAgICBwYXJhbXM6IFsibmV3SGVhZHMiXSwKICAgICAgICAgICAgb25EYXRhKGRhdGEpIHsKICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBjbGllbnQuY2hhaW4/LmZvcm1hdHRlcnM/LmJsb2NrPy5mb3JtYXQgfHwgZm9ybWF0QmxvY2s7CiAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBmb3JtYXQoZGF0YS5yZXN1bHQpOwogICAgICAgICAgICAgIG9uQmxvY2soYmxvY2ssIHByZXZCbG9jayk7CiAgICAgICAgICAgICAgcHJldkJsb2NrID0gYmxvY2s7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uRXJyb3IoZXJyb3IpIHsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBvbkVycm9yPy4oZXJyKTsKICAgICAgICB9CiAgICAgIH0pKCk7CiAgICAgIHJldHVybiAoKSA9PiB1bnN1YnNjcmliZSgpOwogICAgfTsKICAgIHJldHVybiBlbmFibGVQb2xsaW5nID8gcG9sbEJsb2NrcygpIDogc3Vic2NyaWJlQmxvY2tzKCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3dhdGNoRXZlbnQuanMKICBpbml0X3N0cmluZ2lmeSgpOwogIGluaXRfYWJpKCk7CiAgaW5pdF9ycGMoKTsKICBmdW5jdGlvbiB3YXRjaEV2ZW50KGNsaWVudCwgeyBhZGRyZXNzLCBhcmdzLCBiYXRjaCA9IHRydWUsIGV2ZW50LCBldmVudHMsIGZyb21CbG9jaywgb25FcnJvciwgb25Mb2dzLCBwb2xsOiBwb2xsXywgcG9sbGluZ0ludGVydmFsID0gY2xpZW50LnBvbGxpbmdJbnRlcnZhbCwgc3RyaWN0OiBzdHJpY3RfIH0pIHsKICAgIGNvbnN0IGVuYWJsZVBvbGxpbmcgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIHBvbGxfICE9PSAidW5kZWZpbmVkIikKICAgICAgICByZXR1cm4gcG9sbF87CiAgICAgIGlmICh0eXBlb2YgZnJvbUJsb2NrID09PSAiYmlnaW50IikKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAiZmFsbGJhY2siICYmIGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0c1swXS5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pKCk7CiAgICBjb25zdCBzdHJpY3QgPSBzdHJpY3RfID8/IGZhbHNlOwogICAgY29uc3QgcG9sbEV2ZW50ID0gKCkgPT4gewogICAgICBjb25zdCBvYnNlcnZlcklkID0gc3RyaW5naWZ5KFsKICAgICAgICAid2F0Y2hFdmVudCIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGJhdGNoLAogICAgICAgIGNsaWVudC51aWQsCiAgICAgICAgZXZlbnQsCiAgICAgICAgcG9sbGluZ0ludGVydmFsLAogICAgICAgIGZyb21CbG9jawogICAgICBdKTsKICAgICAgcmV0dXJuIG9ic2VydmUob2JzZXJ2ZXJJZCwgeyBvbkxvZ3MsIG9uRXJyb3IgfSwgKGVtaXQpID0+IHsKICAgICAgICBsZXQgcHJldmlvdXNCbG9ja051bWJlcjsKICAgICAgICBpZiAoZnJvbUJsb2NrICE9PSB2b2lkIDApCiAgICAgICAgICBwcmV2aW91c0Jsb2NrTnVtYmVyID0gZnJvbUJsb2NrIC0gMW47CiAgICAgICAgbGV0IGZpbHRlcjsKICAgICAgICBsZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICAgICBjb25zdCB1bndhdGNoID0gcG9sbChhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAoIWluaXRpYWxpemVkKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgZmlsdGVyID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgY3JlYXRlRXZlbnRGaWx0ZXIsICJjcmVhdGVFdmVudEZpbHRlciIpKHsKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgZXZlbnQsCiAgICAgICAgICAgICAgICBldmVudHMsCiAgICAgICAgICAgICAgICBzdHJpY3QsCiAgICAgICAgICAgICAgICBmcm9tQmxvY2sKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBsZXQgbG9nczsKICAgICAgICAgICAgaWYgKGZpbHRlcikgewogICAgICAgICAgICAgIGxvZ3MgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRGaWx0ZXJDaGFuZ2VzLCAiZ2V0RmlsdGVyQ2hhbmdlcyIpKHsgZmlsdGVyIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnN0IGJsb2NrTnVtYmVyID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2tOdW1iZXIsICJnZXRCbG9ja051bWJlciIpKHt9KTsKICAgICAgICAgICAgICBpZiAocHJldmlvdXNCbG9ja051bWJlciAmJiBwcmV2aW91c0Jsb2NrTnVtYmVyICE9PSBibG9ja051bWJlcikgewogICAgICAgICAgICAgICAgbG9ncyA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldExvZ3MsICJnZXRMb2dzIikoewogICAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgICBldmVudCwKICAgICAgICAgICAgICAgICAgZXZlbnRzLAogICAgICAgICAgICAgICAgICBmcm9tQmxvY2s6IHByZXZpb3VzQmxvY2tOdW1iZXIgKyAxbiwKICAgICAgICAgICAgICAgICAgdG9CbG9jazogYmxvY2tOdW1iZXIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBsb2dzID0gW107CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHByZXZpb3VzQmxvY2tOdW1iZXIgPSBibG9ja051bWJlcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobG9ncy5sZW5ndGggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoYmF0Y2gpCiAgICAgICAgICAgICAgZW1pdC5vbkxvZ3MobG9ncyk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxvZyBvZiBsb2dzKQogICAgICAgICAgICAgICAgZW1pdC5vbkxvZ3MoW2xvZ10pOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGlmIChmaWx0ZXIgJiYgZXJyIGluc3RhbmNlb2YgSW52YWxpZElucHV0UnBjRXJyb3IpCiAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICAgICAgICAgZW1pdC5vbkVycm9yPy4oZXJyKTsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBlbWl0T25CZWdpbjogdHJ1ZSwKICAgICAgICAgIGludGVydmFsOiBwb2xsaW5nSW50ZXJ2YWwKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4gewogICAgICAgICAgaWYgKGZpbHRlcikKICAgICAgICAgICAgYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgdW5pbnN0YWxsRmlsdGVyLCAidW5pbnN0YWxsRmlsdGVyIikoeyBmaWx0ZXIgfSk7CiAgICAgICAgICB1bndhdGNoKCk7CiAgICAgICAgfTsKICAgICAgfSk7CiAgICB9OwogICAgY29uc3Qgc3Vic2NyaWJlRXZlbnQgPSAoKSA9PiB7CiAgICAgIGxldCBhY3RpdmUgPSB0cnVlOwogICAgICBsZXQgdW5zdWJzY3JpYmUgPSAoKSA9PiBhY3RpdmUgPSBmYWxzZTsKICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgdHJhbnNwb3J0ID0gKCgpID0+IHsKICAgICAgICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gImZhbGxiYWNrIikgewogICAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydDIgPSBjbGllbnQudHJhbnNwb3J0LnRyYW5zcG9ydHMuZmluZCgodHJhbnNwb3J0MykgPT4gdHJhbnNwb3J0My5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpOwogICAgICAgICAgICAgIGlmICghdHJhbnNwb3J0MikKICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgICAgIHJldHVybiB0cmFuc3BvcnQyLnZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgfSkoKTsKICAgICAgICAgIGNvbnN0IGV2ZW50c18gPSBldmVudHMgPz8gKGV2ZW50ID8gW2V2ZW50XSA6IHZvaWQgMCk7CiAgICAgICAgICBsZXQgdG9waWNzID0gW107CiAgICAgICAgICBpZiAoZXZlbnRzXykgewogICAgICAgICAgICBjb25zdCBlbmNvZGVkID0gZXZlbnRzXy5mbGF0TWFwKChldmVudDIpID0+IGVuY29kZUV2ZW50VG9waWNzKHsKICAgICAgICAgICAgICBhYmk6IFtldmVudDJdLAogICAgICAgICAgICAgIGV2ZW50TmFtZTogZXZlbnQyLm5hbWUsCiAgICAgICAgICAgICAgYXJncwogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIHRvcGljcyA9IFtlbmNvZGVkXTsKICAgICAgICAgICAgaWYgKGV2ZW50KQogICAgICAgICAgICAgIHRvcGljcyA9IHRvcGljc1swXTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHsgdW5zdWJzY3JpYmU6IHVuc3Vic2NyaWJlXyB9ID0gYXdhaXQgdHJhbnNwb3J0LnN1YnNjcmliZSh7CiAgICAgICAgICAgIHBhcmFtczogWyJsb2dzIiwgeyBhZGRyZXNzLCB0b3BpY3MgfV0sCiAgICAgICAgICAgIG9uRGF0YShkYXRhKSB7CiAgICAgICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgY29uc3QgbG9nID0gZGF0YS5yZXN1bHQ7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGNvbnN0IHsgZXZlbnROYW1lLCBhcmdzOiBhcmdzMiB9ID0gZGVjb2RlRXZlbnRMb2coewogICAgICAgICAgICAgICAgICBhYmk6IGV2ZW50c18gPz8gW10sCiAgICAgICAgICAgICAgICAgIGRhdGE6IGxvZy5kYXRhLAogICAgICAgICAgICAgICAgICB0b3BpY3M6IGxvZy50b3BpY3MsCiAgICAgICAgICAgICAgICAgIHN0cmljdAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2cobG9nLCB7IGFyZ3M6IGFyZ3MyLCBldmVudE5hbWUgfSk7CiAgICAgICAgICAgICAgICBvbkxvZ3MoW2Zvcm1hdHRlZF0pOwogICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgbGV0IGV2ZW50TmFtZTsKICAgICAgICAgICAgICAgIGxldCBpc1VubmFtZWQ7CiAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRGVjb2RlTG9nRGF0YU1pc21hdGNoIHx8IGVyciBpbnN0YW5jZW9mIERlY29kZUxvZ1RvcGljc01pc21hdGNoKSB7CiAgICAgICAgICAgICAgICAgIGlmIChzdHJpY3RfKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgZXZlbnROYW1lID0gZXJyLmFiaUl0ZW0ubmFtZTsKICAgICAgICAgICAgICAgICAgaXNVbm5hbWVkID0gZXJyLmFiaUl0ZW0uaW5wdXRzPy5zb21lKCh4KSA9PiAhKCJuYW1lIiBpbiB4ICYmIHgubmFtZSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TG9nKGxvZywgewogICAgICAgICAgICAgICAgICBhcmdzOiBpc1VubmFtZWQgPyBbXSA6IHt9LAogICAgICAgICAgICAgICAgICBldmVudE5hbWUKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgb25Mb2dzKFtmb3JtYXR0ZWRdKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uRXJyb3IoZXJyb3IpIHsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBvbkVycm9yPy4oZXJyKTsKICAgICAgICB9CiAgICAgIH0pKCk7CiAgICAgIHJldHVybiAoKSA9PiB1bnN1YnNjcmliZSgpOwogICAgfTsKICAgIHJldHVybiBlbmFibGVQb2xsaW5nID8gcG9sbEV2ZW50KCkgOiBzdWJzY3JpYmVFdmVudCgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy93YXRjaFBlbmRpbmdUcmFuc2FjdGlvbnMuanMKICBpbml0X3N0cmluZ2lmeSgpOwogIGZ1bmN0aW9uIHdhdGNoUGVuZGluZ1RyYW5zYWN0aW9ucyhjbGllbnQsIHsgYmF0Y2ggPSB0cnVlLCBvbkVycm9yLCBvblRyYW5zYWN0aW9ucywgcG9sbDogcG9sbF8sIHBvbGxpbmdJbnRlcnZhbCA9IGNsaWVudC5wb2xsaW5nSW50ZXJ2YWwgfSkgewogICAgY29uc3QgZW5hYmxlUG9sbGluZyA9IHR5cGVvZiBwb2xsXyAhPT0gInVuZGVmaW5lZCIgPyBwb2xsXyA6IGNsaWVudC50cmFuc3BvcnQudHlwZSAhPT0gIndlYlNvY2tldCI7CiAgICBjb25zdCBwb2xsUGVuZGluZ1RyYW5zYWN0aW9ucyA9ICgpID0+IHsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoUGVuZGluZ1RyYW5zYWN0aW9ucyIsCiAgICAgICAgY2xpZW50LnVpZCwKICAgICAgICBiYXRjaCwKICAgICAgICBwb2xsaW5nSW50ZXJ2YWwKICAgICAgXSk7CiAgICAgIHJldHVybiBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25UcmFuc2FjdGlvbnMsIG9uRXJyb3IgfSwgKGVtaXQpID0+IHsKICAgICAgICBsZXQgZmlsdGVyOwogICAgICAgIGNvbnN0IHVud2F0Y2ggPSBwb2xsKGFzeW5jICgpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICghZmlsdGVyKSB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGZpbHRlciA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGNyZWF0ZVBlbmRpbmdUcmFuc2FjdGlvbkZpbHRlciwgImNyZWF0ZVBlbmRpbmdUcmFuc2FjdGlvbkZpbHRlciIpKHt9KTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICAgIHVud2F0Y2goKTsKICAgICAgICAgICAgICAgIHRocm93IGVycjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgaGFzaGVzID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0RmlsdGVyQ2hhbmdlcywgImdldEZpbHRlckNoYW5nZXMiKSh7IGZpbHRlciB9KTsKICAgICAgICAgICAgaWYgKGhhc2hlcy5sZW5ndGggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoYmF0Y2gpCiAgICAgICAgICAgICAgZW1pdC5vblRyYW5zYWN0aW9ucyhoYXNoZXMpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgZm9yIChjb25zdCBoYXNoMyBvZiBoYXNoZXMpCiAgICAgICAgICAgICAgICBlbWl0Lm9uVHJhbnNhY3Rpb25zKFtoYXNoM10pOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGVtaXQub25FcnJvcj8uKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgZW1pdE9uQmVnaW46IHRydWUsCiAgICAgICAgICBpbnRlcnZhbDogcG9sbGluZ0ludGVydmFsCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChmaWx0ZXIpCiAgICAgICAgICAgIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHVuaW5zdGFsbEZpbHRlciwgInVuaW5zdGFsbEZpbHRlciIpKHsgZmlsdGVyIH0pOwogICAgICAgICAgdW53YXRjaCgpOwogICAgICAgIH07CiAgICAgIH0pOwogICAgfTsKICAgIGNvbnN0IHN1YnNjcmliZVBlbmRpbmdUcmFuc2FjdGlvbnMgPSAoKSA9PiB7CiAgICAgIGxldCBhY3RpdmUgPSB0cnVlOwogICAgICBsZXQgdW5zdWJzY3JpYmUgPSAoKSA9PiBhY3RpdmUgPSBmYWxzZTsKICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgeyB1bnN1YnNjcmliZTogdW5zdWJzY3JpYmVfIH0gPSBhd2FpdCBjbGllbnQudHJhbnNwb3J0LnN1YnNjcmliZSh7CiAgICAgICAgICAgIHBhcmFtczogWyJuZXdQZW5kaW5nVHJhbnNhY3Rpb25zIl0sCiAgICAgICAgICAgIG9uRGF0YShkYXRhKSB7CiAgICAgICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYXRhLnJlc3VsdDsKICAgICAgICAgICAgICBvblRyYW5zYWN0aW9ucyhbdHJhbnNhY3Rpb25dKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25FcnJvcihlcnJvcikgewogICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZV87CiAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgdW5zdWJzY3JpYmUoKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIG9uRXJyb3I/LihlcnIpOwogICAgICAgIH0KICAgICAgfSkoKTsKICAgICAgcmV0dXJuICgpID0+IHVuc3Vic2NyaWJlKCk7CiAgICB9OwogICAgcmV0dXJuIGVuYWJsZVBvbGxpbmcgPyBwb2xsUGVuZGluZ1RyYW5zYWN0aW9ucygpIDogc3Vic2NyaWJlUGVuZGluZ1RyYW5zYWN0aW9ucygpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaXdlL3BhcnNlU2l3ZU1lc3NhZ2UuanMKICBmdW5jdGlvbiBwYXJzZVNpd2VNZXNzYWdlKG1lc3NhZ2UpIHsKICAgIGNvbnN0IHsgc2NoZW1lLCBzdGF0ZW1lbnQsIC4uLnByZWZpeCB9ID0gbWVzc2FnZS5tYXRjaChwcmVmaXhSZWdleCk/Lmdyb3VwcyA/PyB7fTsKICAgIGNvbnN0IHsgY2hhaW5JZCwgZXhwaXJhdGlvblRpbWUsIGlzc3VlZEF0LCBub3RCZWZvcmUsIHJlcXVlc3RJZCwgLi4uc3VmZml4IH0gPSBtZXNzYWdlLm1hdGNoKHN1ZmZpeFJlZ2V4KT8uZ3JvdXBzID8/IHt9OwogICAgY29uc3QgcmVzb3VyY2VzID0gbWVzc2FnZS5zcGxpdCgiUmVzb3VyY2VzOiIpWzFdPy5zcGxpdCgiXG4tICIpLnNsaWNlKDEpOwogICAgcmV0dXJuIHsKICAgICAgLi4ucHJlZml4LAogICAgICAuLi5zdWZmaXgsCiAgICAgIC4uLmNoYWluSWQgPyB7IGNoYWluSWQ6IE51bWJlcihjaGFpbklkKSB9IDoge30sCiAgICAgIC4uLmV4cGlyYXRpb25UaW1lID8geyBleHBpcmF0aW9uVGltZTogbmV3IERhdGUoZXhwaXJhdGlvblRpbWUpIH0gOiB7fSwKICAgICAgLi4uaXNzdWVkQXQgPyB7IGlzc3VlZEF0OiBuZXcgRGF0ZShpc3N1ZWRBdCkgfSA6IHt9LAogICAgICAuLi5ub3RCZWZvcmUgPyB7IG5vdEJlZm9yZTogbmV3IERhdGUobm90QmVmb3JlKSB9IDoge30sCiAgICAgIC4uLnJlcXVlc3RJZCA/IHsgcmVxdWVzdElkIH0gOiB7fSwKICAgICAgLi4ucmVzb3VyY2VzID8geyByZXNvdXJjZXMgfSA6IHt9LAogICAgICAuLi5zY2hlbWUgPyB7IHNjaGVtZSB9IDoge30sCiAgICAgIC4uLnN0YXRlbWVudCA/IHsgc3RhdGVtZW50IH0gOiB7fQogICAgfTsKICB9CiAgdmFyIHByZWZpeFJlZ2V4ID0gL14oPzooPzxzY2hlbWU+W2EtekEtWl1bYS16QS1aMC05Ky0uXSopOlwvXC8pPyg/PGRvbWFpbj5bYS16QS1aMC05Ky0uXSooPzo6WzAtOV17MSw1fSk/KSAoPzp3YW50cyB5b3UgdG8gc2lnbiBpbiB3aXRoIHlvdXIgRXRoZXJldW0gYWNjb3VudDpcbikoPzxhZGRyZXNzPjB4W2EtZkEtRjAtOV17NDB9KVxuXG4oPzooPzxzdGF0ZW1lbnQ+LiopXG5cbik/LzsKICB2YXIgc3VmZml4UmVnZXggPSAvKD86VVJJOiAoPzx1cmk+LispKVxuKD86VmVyc2lvbjogKD88dmVyc2lvbj4uKykpXG4oPzpDaGFpbiBJRDogKD88Y2hhaW5JZD5cZCspKVxuKD86Tm9uY2U6ICg/PG5vbmNlPlthLXpBLVowLTldKykpXG4oPzpJc3N1ZWQgQXQ6ICg/PGlzc3VlZEF0Pi4rKSkoPzpcbkV4cGlyYXRpb24gVGltZTogKD88ZXhwaXJhdGlvblRpbWU+LispKT8oPzpcbk5vdCBCZWZvcmU6ICg/PG5vdEJlZm9yZT4uKykpPyg/OlxuUmVxdWVzdCBJRDogKD88cmVxdWVzdElkPi4rKSk/LzsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaXdlL3ZhbGlkYXRlU2l3ZU1lc3NhZ2UuanMKICBpbml0X2lzQWRkcmVzc0VxdWFsKCk7CiAgZnVuY3Rpb24gdmFsaWRhdGVTaXdlTWVzc2FnZShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGRvbWFpbiwgbWVzc2FnZSwgbm9uY2UsIHNjaGVtZSwgdGltZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpIH0gPSBwYXJhbWV0ZXJzOwogICAgaWYgKGRvbWFpbiAmJiBtZXNzYWdlLmRvbWFpbiAhPT0gZG9tYWluKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAobm9uY2UgJiYgbWVzc2FnZS5ub25jZSAhPT0gbm9uY2UpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChzY2hlbWUgJiYgbWVzc2FnZS5zY2hlbWUgIT09IHNjaGVtZSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKG1lc3NhZ2UuZXhwaXJhdGlvblRpbWUgJiYgdGltZSA+PSBtZXNzYWdlLmV4cGlyYXRpb25UaW1lKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAobWVzc2FnZS5ub3RCZWZvcmUgJiYgdGltZSA8IG1lc3NhZ2Uubm90QmVmb3JlKQogICAgICByZXR1cm4gZmFsc2U7CiAgICB0cnkgewogICAgICBpZiAoIW1lc3NhZ2UuYWRkcmVzcykKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChhZGRyZXNzICYmICFpc0FkZHJlc3NFcXVhbChtZXNzYWdlLmFkZHJlc3MsIGFkZHJlc3MpKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gY2F0Y2ggewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9zaXdlL3ZlcmlmeVNpd2VNZXNzYWdlLmpzCiAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5U2l3ZU1lc3NhZ2UoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGRvbWFpbiwgbWVzc2FnZSwgbm9uY2UsIHNjaGVtZSwgc2lnbmF0dXJlLCB0aW1lID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCksIC4uLmNhbGxSZXF1ZXN0IH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgcGFyc2VkID0gcGFyc2VTaXdlTWVzc2FnZShtZXNzYWdlKTsKICAgIGlmICghcGFyc2VkLmFkZHJlc3MpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZVNpd2VNZXNzYWdlKHsKICAgICAgYWRkcmVzcywKICAgICAgZG9tYWluLAogICAgICBtZXNzYWdlOiBwYXJzZWQsCiAgICAgIG5vbmNlLAogICAgICBzY2hlbWUsCiAgICAgIHRpbWUKICAgIH0pOwogICAgaWYgKCFpc1ZhbGlkKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBjb25zdCBoYXNoMyA9IGhhc2hNZXNzYWdlKG1lc3NhZ2UpOwogICAgcmV0dXJuIHZlcmlmeUhhc2gyKGNsaWVudCwgewogICAgICBhZGRyZXNzOiBwYXJzZWQuYWRkcmVzcywKICAgICAgaGFzaDogaGFzaDMsCiAgICAgIHNpZ25hdHVyZSwKICAgICAgLi4uY2FsbFJlcXVlc3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2RlY29yYXRvcnMvcHVibGljLmpzCiAgZnVuY3Rpb24gcHVibGljQWN0aW9ucyhjbGllbnQpIHsKICAgIHJldHVybiB7CiAgICAgIGNhbGw6IChhcmdzKSA9PiBjYWxsKGNsaWVudCwgYXJncyksCiAgICAgIGNyZWF0ZUJsb2NrRmlsdGVyOiAoKSA9PiBjcmVhdGVCbG9ja0ZpbHRlcihjbGllbnQpLAogICAgICBjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyOiAoYXJncykgPT4gY3JlYXRlQ29udHJhY3RFdmVudEZpbHRlcihjbGllbnQsIGFyZ3MpLAogICAgICBjcmVhdGVFdmVudEZpbHRlcjogKGFyZ3MpID0+IGNyZWF0ZUV2ZW50RmlsdGVyKGNsaWVudCwgYXJncyksCiAgICAgIGNyZWF0ZVBlbmRpbmdUcmFuc2FjdGlvbkZpbHRlcjogKCkgPT4gY3JlYXRlUGVuZGluZ1RyYW5zYWN0aW9uRmlsdGVyKGNsaWVudCksCiAgICAgIGVzdGltYXRlQ29udHJhY3RHYXM6IChhcmdzKSA9PiBlc3RpbWF0ZUNvbnRyYWN0R2FzKGNsaWVudCwgYXJncyksCiAgICAgIGVzdGltYXRlR2FzOiAoYXJncykgPT4gZXN0aW1hdGVHYXMoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0QmFsYW5jZTogKGFyZ3MpID0+IGdldEJhbGFuY2UoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0QmxvYkJhc2VGZWU6ICgpID0+IGdldEJsb2JCYXNlRmVlKGNsaWVudCksCiAgICAgIGdldEJsb2NrOiAoYXJncykgPT4gZ2V0QmxvY2soY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0QmxvY2tOdW1iZXI6IChhcmdzKSA9PiBnZXRCbG9ja051bWJlcihjbGllbnQsIGFyZ3MpLAogICAgICBnZXRCbG9ja1RyYW5zYWN0aW9uQ291bnQ6IChhcmdzKSA9PiBnZXRCbG9ja1RyYW5zYWN0aW9uQ291bnQoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0Qnl0ZWNvZGU6IChhcmdzKSA9PiBnZXRDb2RlKGNsaWVudCwgYXJncyksCiAgICAgIGdldENoYWluSWQ6ICgpID0+IGdldENoYWluSWQoY2xpZW50KSwKICAgICAgZ2V0Q29kZTogKGFyZ3MpID0+IGdldENvZGUoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0Q29udHJhY3RFdmVudHM6IChhcmdzKSA9PiBnZXRDb250cmFjdEV2ZW50cyhjbGllbnQsIGFyZ3MpLAogICAgICBnZXRFaXA3MTJEb21haW46IChhcmdzKSA9PiBnZXRFaXA3MTJEb21haW4oY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RW5zQWRkcmVzczogKGFyZ3MpID0+IGdldEVuc0FkZHJlc3MoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RW5zQXZhdGFyOiAoYXJncykgPT4gZ2V0RW5zQXZhdGFyKGNsaWVudCwgYXJncyksCiAgICAgIGdldEVuc05hbWU6IChhcmdzKSA9PiBnZXRFbnNOYW1lKGNsaWVudCwgYXJncyksCiAgICAgIGdldEVuc1Jlc29sdmVyOiAoYXJncykgPT4gZ2V0RW5zUmVzb2x2ZXIoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RW5zVGV4dDogKGFyZ3MpID0+IGdldEVuc1RleHQoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RmVlSGlzdG9yeTogKGFyZ3MpID0+IGdldEZlZUhpc3RvcnkoY2xpZW50LCBhcmdzKSwKICAgICAgZXN0aW1hdGVGZWVzUGVyR2FzOiAoYXJncykgPT4gZXN0aW1hdGVGZWVzUGVyR2FzKGNsaWVudCwgYXJncyksCiAgICAgIGdldEZpbHRlckNoYW5nZXM6IChhcmdzKSA9PiBnZXRGaWx0ZXJDaGFuZ2VzKGNsaWVudCwgYXJncyksCiAgICAgIGdldEZpbHRlckxvZ3M6IChhcmdzKSA9PiBnZXRGaWx0ZXJMb2dzKGNsaWVudCwgYXJncyksCiAgICAgIGdldEdhc1ByaWNlOiAoKSA9PiBnZXRHYXNQcmljZShjbGllbnQpLAogICAgICBnZXRMb2dzOiAoYXJncykgPT4gZ2V0TG9ncyhjbGllbnQsIGFyZ3MpLAogICAgICBnZXRQcm9vZjogKGFyZ3MpID0+IGdldFByb29mKGNsaWVudCwgYXJncyksCiAgICAgIGVzdGltYXRlTWF4UHJpb3JpdHlGZWVQZXJHYXM6IChhcmdzKSA9PiBlc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzKGNsaWVudCwgYXJncyksCiAgICAgIGdldFN0b3JhZ2VBdDogKGFyZ3MpID0+IGdldFN0b3JhZ2VBdChjbGllbnQsIGFyZ3MpLAogICAgICBnZXRUcmFuc2FjdGlvbjogKGFyZ3MpID0+IGdldFRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgIGdldFRyYW5zYWN0aW9uQ29uZmlybWF0aW9uczogKGFyZ3MpID0+IGdldFRyYW5zYWN0aW9uQ29uZmlybWF0aW9ucyhjbGllbnQsIGFyZ3MpLAogICAgICBnZXRUcmFuc2FjdGlvbkNvdW50OiAoYXJncykgPT4gZ2V0VHJhbnNhY3Rpb25Db3VudChjbGllbnQsIGFyZ3MpLAogICAgICBnZXRUcmFuc2FjdGlvblJlY2VpcHQ6IChhcmdzKSA9PiBnZXRUcmFuc2FjdGlvblJlY2VpcHQoY2xpZW50LCBhcmdzKSwKICAgICAgbXVsdGljYWxsOiAoYXJncykgPT4gbXVsdGljYWxsKGNsaWVudCwgYXJncyksCiAgICAgIHByZXBhcmVUcmFuc2FjdGlvblJlcXVlc3Q6IChhcmdzKSA9PiBwcmVwYXJlVHJhbnNhY3Rpb25SZXF1ZXN0KGNsaWVudCwgYXJncyksCiAgICAgIHJlYWRDb250cmFjdDogKGFyZ3MpID0+IHJlYWRDb250cmFjdChjbGllbnQsIGFyZ3MpLAogICAgICBzZW5kUmF3VHJhbnNhY3Rpb246IChhcmdzKSA9PiBzZW5kUmF3VHJhbnNhY3Rpb24oY2xpZW50LCBhcmdzKSwKICAgICAgc2ltdWxhdGVDb250cmFjdDogKGFyZ3MpID0+IHNpbXVsYXRlQ29udHJhY3QoY2xpZW50LCBhcmdzKSwKICAgICAgdmVyaWZ5TWVzc2FnZTogKGFyZ3MpID0+IHZlcmlmeU1lc3NhZ2UyKGNsaWVudCwgYXJncyksCiAgICAgIHZlcmlmeVNpd2VNZXNzYWdlOiAoYXJncykgPT4gdmVyaWZ5U2l3ZU1lc3NhZ2UoY2xpZW50LCBhcmdzKSwKICAgICAgdmVyaWZ5VHlwZWREYXRhOiAoYXJncykgPT4gdmVyaWZ5VHlwZWREYXRhMihjbGllbnQsIGFyZ3MpLAogICAgICB1bmluc3RhbGxGaWx0ZXI6IChhcmdzKSA9PiB1bmluc3RhbGxGaWx0ZXIoY2xpZW50LCBhcmdzKSwKICAgICAgd2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdDogKGFyZ3MpID0+IHdhaXRGb3JUcmFuc2FjdGlvblJlY2VpcHQoY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hCbG9ja3M6IChhcmdzKSA9PiB3YXRjaEJsb2NrcyhjbGllbnQsIGFyZ3MpLAogICAgICB3YXRjaEJsb2NrTnVtYmVyOiAoYXJncykgPT4gd2F0Y2hCbG9ja051bWJlcihjbGllbnQsIGFyZ3MpLAogICAgICB3YXRjaENvbnRyYWN0RXZlbnQ6IChhcmdzKSA9PiB3YXRjaENvbnRyYWN0RXZlbnQoY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hFdmVudDogKGFyZ3MpID0+IHdhdGNoRXZlbnQoY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hQZW5kaW5nVHJhbnNhY3Rpb25zOiAoYXJncykgPT4gd2F0Y2hQZW5kaW5nVHJhbnNhY3Rpb25zKGNsaWVudCwgYXJncykKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvY3JlYXRlUHVibGljQ2xpZW50LmpzCiAgZnVuY3Rpb24gY3JlYXRlUHVibGljQ2xpZW50KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsga2V5ID0gInB1YmxpYyIsIG5hbWUgPSAiUHVibGljIENsaWVudCIgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQoewogICAgICAuLi5wYXJhbWV0ZXJzLAogICAgICBrZXksCiAgICAgIG5hbWUsCiAgICAgIHR5cGU6ICJwdWJsaWNDbGllbnQiCiAgICB9KTsKICAgIHJldHVybiBjbGllbnQuZXh0ZW5kKHB1YmxpY0FjdGlvbnMpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvZHJvcFRyYW5zYWN0aW9uLmpzCiAgYXN5bmMgZnVuY3Rpb24gZHJvcFRyYW5zYWN0aW9uKGNsaWVudCwgeyBoYXNoOiBoYXNoMyB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X2Ryb3BUcmFuc2FjdGlvbmAsCiAgICAgIHBhcmFtczogW2hhc2gzXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9kdW1wU3RhdGUuanMKICBhc3luYyBmdW5jdGlvbiBkdW1wU3RhdGUoY2xpZW50KSB7CiAgICByZXR1cm4gY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9kdW1wU3RhdGVgCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L2dldEF1dG9taW5lLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0QXV0b21pbmUoY2xpZW50KSB7CiAgICBpZiAoY2xpZW50Lm1vZGUgPT09ICJnYW5hY2hlIikKICAgICAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfbWluaW5nIgogICAgICB9KTsKICAgIHJldHVybiBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X2dldEF1dG9taW5lYAogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9nZXRUeHBvb2xDb250ZW50LmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0VHhwb29sQ29udGVudChjbGllbnQpIHsKICAgIHJldHVybiBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogInR4cG9vbF9jb250ZW50IgogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9nZXRUeHBvb2xTdGF0dXMuanMKICBpbml0X2Zyb21IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUeHBvb2xTdGF0dXMoY2xpZW50KSB7CiAgICBjb25zdCB7IHBlbmRpbmcsIHF1ZXVlZCB9ID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ0eHBvb2xfc3RhdHVzIgogICAgfSk7CiAgICByZXR1cm4gewogICAgICBwZW5kaW5nOiBoZXhUb051bWJlcihwZW5kaW5nKSwKICAgICAgcXVldWVkOiBoZXhUb051bWJlcihxdWV1ZWQpCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvaW1wZXJzb25hdGVBY2NvdW50LmpzCiAgYXN5bmMgZnVuY3Rpb24gaW1wZXJzb25hdGVBY2NvdW50KGNsaWVudCwgeyBhZGRyZXNzIH0pIHsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiBgJHtjbGllbnQubW9kZX1faW1wZXJzb25hdGVBY2NvdW50YCwKICAgICAgcGFyYW1zOiBbYWRkcmVzc10KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvaW5jcmVhc2VUaW1lLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGluY3JlYXNlVGltZShjbGllbnQsIHsgc2Vjb25kcyB9KSB7CiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldm1faW5jcmVhc2VUaW1lIiwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoc2Vjb25kcyldCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L2luc3BlY3RUeHBvb2wuanMKICBhc3luYyBmdW5jdGlvbiBpbnNwZWN0VHhwb29sKGNsaWVudCkgewogICAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAidHhwb29sX2luc3BlY3QiCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L2xvYWRTdGF0ZS5qcwogIGFzeW5jIGZ1bmN0aW9uIGxvYWRTdGF0ZShjbGllbnQsIHsgc3RhdGUgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9sb2FkU3RhdGVgLAogICAgICBwYXJhbXM6IFtzdGF0ZV0KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvbWluZS5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBtaW5lKGNsaWVudCwgeyBibG9ja3MsIGludGVydmFsIH0pIHsKICAgIGlmIChjbGllbnQubW9kZSA9PT0gImdhbmFjaGUiKQogICAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXZtX21pbmUiLAogICAgICAgIHBhcmFtczogW3sgYmxvY2tzOiBudW1iZXJUb0hleChibG9ja3MpIH1dCiAgICAgIH0pOwogICAgZWxzZQogICAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiBgJHtjbGllbnQubW9kZX1fbWluZWAsCiAgICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoYmxvY2tzKSwgbnVtYmVyVG9IZXgoaW50ZXJ2YWwgfHwgMCldCiAgICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvcmVtb3ZlQmxvY2tUaW1lc3RhbXBJbnRlcnZhbC5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUJsb2NrVGltZXN0YW1wSW50ZXJ2YWwoY2xpZW50KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X3JlbW92ZUJsb2NrVGltZXN0YW1wSW50ZXJ2YWxgCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3Jlc2V0LmpzCiAgYXN5bmMgZnVuY3Rpb24gcmVzZXQoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBqc29uUnBjVXJsIH0gPSB7fSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9yZXNldGAsCiAgICAgIHBhcmFtczogW3sgZm9ya2luZzogeyBibG9ja051bWJlcjogTnVtYmVyKGJsb2NrTnVtYmVyKSwganNvblJwY1VybCB9IH1dCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3JldmVydC5qcwogIGFzeW5jIGZ1bmN0aW9uIHJldmVydChjbGllbnQsIHsgaWQgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldm1fcmV2ZXJ0IiwKICAgICAgcGFyYW1zOiBbaWRdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NlbmRVbnNpZ25lZFRyYW5zYWN0aW9uLmpzCiAgaW5pdF9leHRyYWN0KCk7CiAgaW5pdF90cmFuc2FjdGlvblJlcXVlc3QoKTsKICBhc3luYyBmdW5jdGlvbiBzZW5kVW5zaWduZWRUcmFuc2FjdGlvbihjbGllbnQsIGFyZ3MpIHsKICAgIGNvbnN0IHsgYWNjZXNzTGlzdCwgZGF0YSwgZnJvbSwgZ2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbm9uY2UsIHRvLCB2YWx1ZSwgLi4ucmVzdCB9ID0gYXJnczsKICAgIGNvbnN0IGNoYWluRm9ybWF0ID0gY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzPy50cmFuc2FjdGlvblJlcXVlc3Q/LmZvcm1hdDsKICAgIGNvbnN0IGZvcm1hdCA9IGNoYWluRm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgIGNvbnN0IHJlcXVlc3QgPSBmb3JtYXQoewogICAgICAvLyBQaWNrIG91dCBleHRyYSBkYXRhIHRoYXQgbWlnaHQgZXhpc3Qgb24gdGhlIGNoYWluJ3MgdHJhbnNhY3Rpb24gcmVxdWVzdCB0eXBlLgogICAgICAuLi5leHRyYWN0KHJlc3QsIHsgZm9ybWF0OiBjaGFpbkZvcm1hdCB9KSwKICAgICAgYWNjZXNzTGlzdCwKICAgICAgZGF0YSwKICAgICAgZnJvbSwKICAgICAgZ2FzLAogICAgICBnYXNQcmljZSwKICAgICAgbWF4RmVlUGVyR2FzLAogICAgICBtYXhQcmlvcml0eUZlZVBlckdhcywKICAgICAgbm9uY2UsCiAgICAgIHRvLAogICAgICB2YWx1ZQogICAgfSk7CiAgICBjb25zdCBoYXNoMyA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX3NlbmRVbnNpZ25lZFRyYW5zYWN0aW9uIiwKICAgICAgcGFyYW1zOiBbcmVxdWVzdF0KICAgIH0pOwogICAgcmV0dXJuIGhhc2gzOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc2V0QXV0b21pbmUuanMKICBhc3luYyBmdW5jdGlvbiBzZXRBdXRvbWluZShjbGllbnQsIGVuYWJsZWQpIHsKICAgIGlmIChjbGllbnQubW9kZSA9PT0gImdhbmFjaGUiKSB7CiAgICAgIGlmIChlbmFibGVkKQogICAgICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsgbWV0aG9kOiAibWluZXJfc3RhcnQiIH0pOwogICAgICBlbHNlCiAgICAgICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoeyBtZXRob2Q6ICJtaW5lcl9zdG9wIiB9KTsKICAgIH0gZWxzZQogICAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXZtX3NldEF1dG9taW5lIiwKICAgICAgICBwYXJhbXM6IFtlbmFibGVkXQogICAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldEJhbGFuY2UuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2V0QmFsYW5jZShjbGllbnQsIHsgYWRkcmVzcywgdmFsdWUgfSkgewogICAgaWYgKGNsaWVudC5tb2RlID09PSAiZ2FuYWNoZSIpCiAgICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldm1fc2V0QWNjb3VudEJhbGFuY2UiLAogICAgICAgIHBhcmFtczogW2FkZHJlc3MsIG51bWJlclRvSGV4KHZhbHVlKV0KICAgICAgfSk7CiAgICBlbHNlCiAgICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRCYWxhbmNlYCwKICAgICAgICBwYXJhbXM6IFthZGRyZXNzLCBudW1iZXJUb0hleCh2YWx1ZSldCiAgICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc2V0QmxvY2tHYXNMaW1pdC5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBzZXRCbG9ja0dhc0xpbWl0KGNsaWVudCwgeyBnYXNMaW1pdCB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV2bV9zZXRCbG9ja0dhc0xpbWl0IiwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoZ2FzTGltaXQpXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRCbG9ja1RpbWVzdGFtcEludGVydmFsLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0QmxvY2tUaW1lc3RhbXBJbnRlcnZhbChjbGllbnQsIHsgaW50ZXJ2YWwgfSkgewogICAgY29uc3QgaW50ZXJ2YWxfID0gKCgpID0+IHsKICAgICAgaWYgKGNsaWVudC5tb2RlID09PSAiaGFyZGhhdCIpCiAgICAgICAgcmV0dXJuIGludGVydmFsICogMWUzOwogICAgICByZXR1cm4gaW50ZXJ2YWw7CiAgICB9KSgpOwogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRCbG9ja1RpbWVzdGFtcEludGVydmFsYCwKICAgICAgcGFyYW1zOiBbaW50ZXJ2YWxfXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRDb2RlLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0Q29kZShjbGllbnQsIHsgYWRkcmVzcywgYnl0ZWNvZGUgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRDb2RlYCwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYnl0ZWNvZGVdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldENvaW5iYXNlLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0Q29pbmJhc2UoY2xpZW50LCB7IGFkZHJlc3MgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRDb2luYmFzZWAsCiAgICAgIHBhcmFtczogW2FkZHJlc3NdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldEludGVydmFsTWluaW5nLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0SW50ZXJ2YWxNaW5pbmcoY2xpZW50LCB7IGludGVydmFsIH0pIHsKICAgIGNvbnN0IGludGVydmFsXyA9ICgoKSA9PiB7CiAgICAgIGlmIChjbGllbnQubW9kZSA9PT0gImhhcmRoYXQiKQogICAgICAgIHJldHVybiBpbnRlcnZhbCAqIDFlMzsKICAgICAgcmV0dXJuIGludGVydmFsOwogICAgfSkoKTsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXZtX3NldEludGVydmFsTWluaW5nIiwKICAgICAgcGFyYW1zOiBbaW50ZXJ2YWxfXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRMb2dnaW5nRW5hYmxlZC5qcwogIGFzeW5jIGZ1bmN0aW9uIHNldExvZ2dpbmdFbmFibGVkKGNsaWVudCwgZW5hYmxlZCkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRMb2dnaW5nRW5hYmxlZGAsCiAgICAgIHBhcmFtczogW2VuYWJsZWRdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldE1pbkdhc1ByaWNlLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNldE1pbkdhc1ByaWNlKGNsaWVudCwgeyBnYXNQcmljZSB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X3NldE1pbkdhc1ByaWNlYCwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoZ2FzUHJpY2UpXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXROZXh0QmxvY2tCYXNlRmVlUGVyR2FzLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNldE5leHRCbG9ja0Jhc2VGZWVQZXJHYXMoY2xpZW50LCB7IGJhc2VGZWVQZXJHYXMgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXROZXh0QmxvY2tCYXNlRmVlUGVyR2FzYCwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoYmFzZUZlZVBlckdhcyldCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldE5leHRCbG9ja1RpbWVzdGFtcC5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBzZXROZXh0QmxvY2tUaW1lc3RhbXAoY2xpZW50LCB7IHRpbWVzdGFtcCB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV2bV9zZXROZXh0QmxvY2tUaW1lc3RhbXAiLAogICAgICBwYXJhbXM6IFtudW1iZXJUb0hleCh0aW1lc3RhbXApXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXROb25jZS5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBzZXROb25jZShjbGllbnQsIHsgYWRkcmVzcywgbm9uY2UgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXROb25jZWAsCiAgICAgIHBhcmFtczogW2FkZHJlc3MsIG51bWJlclRvSGV4KG5vbmNlKV0KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc2V0UnBjVXJsLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0UnBjVXJsKGNsaWVudCwganNvblJwY1VybCkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRScGNVcmxgLAogICAgICBwYXJhbXM6IFtqc29uUnBjVXJsXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRTdG9yYWdlQXQuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2V0U3RvcmFnZUF0KGNsaWVudCwgeyBhZGRyZXNzLCBpbmRleDogaW5kZXgyLCB2YWx1ZSB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X3NldFN0b3JhZ2VBdGAsCiAgICAgIHBhcmFtczogWwogICAgICAgIGFkZHJlc3MsCiAgICAgICAgdHlwZW9mIGluZGV4MiA9PT0gIm51bWJlciIgPyBudW1iZXJUb0hleChpbmRleDIpIDogaW5kZXgyLAogICAgICAgIHZhbHVlCiAgICAgIF0KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc25hcHNob3QuanMKICBhc3luYyBmdW5jdGlvbiBzbmFwc2hvdChjbGllbnQpIHsKICAgIHJldHVybiBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV2bV9zbmFwc2hvdCIKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc3RvcEltcGVyc29uYXRpbmdBY2NvdW50LmpzCiAgYXN5bmMgZnVuY3Rpb24gc3RvcEltcGVyc29uYXRpbmdBY2NvdW50KGNsaWVudCwgeyBhZGRyZXNzIH0pIHsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiBgJHtjbGllbnQubW9kZX1fc3RvcEltcGVyc29uYXRpbmdBY2NvdW50YCwKICAgICAgcGFyYW1zOiBbYWRkcmVzc10KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2RlY29yYXRvcnMvdGVzdC5qcwogIGZ1bmN0aW9uIHRlc3RBY3Rpb25zKHsgbW9kZTogbW9kZTIgfSkgewogICAgcmV0dXJuIChjbGllbnRfKSA9PiB7CiAgICAgIGNvbnN0IGNsaWVudCA9IGNsaWVudF8uZXh0ZW5kKCgpID0+ICh7CiAgICAgICAgbW9kZTogbW9kZTIKICAgICAgfSkpOwogICAgICByZXR1cm4gewogICAgICAgIGRyb3BUcmFuc2FjdGlvbjogKGFyZ3MpID0+IGRyb3BUcmFuc2FjdGlvbihjbGllbnQsIGFyZ3MpLAogICAgICAgIGR1bXBTdGF0ZTogKCkgPT4gZHVtcFN0YXRlKGNsaWVudCksCiAgICAgICAgZ2V0QXV0b21pbmU6ICgpID0+IGdldEF1dG9taW5lKGNsaWVudCksCiAgICAgICAgZ2V0VHhwb29sQ29udGVudDogKCkgPT4gZ2V0VHhwb29sQ29udGVudChjbGllbnQpLAogICAgICAgIGdldFR4cG9vbFN0YXR1czogKCkgPT4gZ2V0VHhwb29sU3RhdHVzKGNsaWVudCksCiAgICAgICAgaW1wZXJzb25hdGVBY2NvdW50OiAoYXJncykgPT4gaW1wZXJzb25hdGVBY2NvdW50KGNsaWVudCwgYXJncyksCiAgICAgICAgaW5jcmVhc2VUaW1lOiAoYXJncykgPT4gaW5jcmVhc2VUaW1lKGNsaWVudCwgYXJncyksCiAgICAgICAgaW5zcGVjdFR4cG9vbDogKCkgPT4gaW5zcGVjdFR4cG9vbChjbGllbnQpLAogICAgICAgIGxvYWRTdGF0ZTogKGFyZ3MpID0+IGxvYWRTdGF0ZShjbGllbnQsIGFyZ3MpLAogICAgICAgIG1pbmU6IChhcmdzKSA9PiBtaW5lKGNsaWVudCwgYXJncyksCiAgICAgICAgcmVtb3ZlQmxvY2tUaW1lc3RhbXBJbnRlcnZhbDogKCkgPT4gcmVtb3ZlQmxvY2tUaW1lc3RhbXBJbnRlcnZhbChjbGllbnQpLAogICAgICAgIHJlc2V0OiAoYXJncykgPT4gcmVzZXQoY2xpZW50LCBhcmdzKSwKICAgICAgICByZXZlcnQ6IChhcmdzKSA9PiByZXZlcnQoY2xpZW50LCBhcmdzKSwKICAgICAgICBzZW5kVW5zaWduZWRUcmFuc2FjdGlvbjogKGFyZ3MpID0+IHNlbmRVbnNpZ25lZFRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0QXV0b21pbmU6IChhcmdzKSA9PiBzZXRBdXRvbWluZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldEJhbGFuY2U6IChhcmdzKSA9PiBzZXRCYWxhbmNlKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0QmxvY2tHYXNMaW1pdDogKGFyZ3MpID0+IHNldEJsb2NrR2FzTGltaXQoY2xpZW50LCBhcmdzKSwKICAgICAgICBzZXRCbG9ja1RpbWVzdGFtcEludGVydmFsOiAoYXJncykgPT4gc2V0QmxvY2tUaW1lc3RhbXBJbnRlcnZhbChjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldENvZGU6IChhcmdzKSA9PiBzZXRDb2RlKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0Q29pbmJhc2U6IChhcmdzKSA9PiBzZXRDb2luYmFzZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldEludGVydmFsTWluaW5nOiAoYXJncykgPT4gc2V0SW50ZXJ2YWxNaW5pbmcoY2xpZW50LCBhcmdzKSwKICAgICAgICBzZXRMb2dnaW5nRW5hYmxlZDogKGFyZ3MpID0+IHNldExvZ2dpbmdFbmFibGVkKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0TWluR2FzUHJpY2U6IChhcmdzKSA9PiBzZXRNaW5HYXNQcmljZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldE5leHRCbG9ja0Jhc2VGZWVQZXJHYXM6IChhcmdzKSA9PiBzZXROZXh0QmxvY2tCYXNlRmVlUGVyR2FzKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0TmV4dEJsb2NrVGltZXN0YW1wOiAoYXJncykgPT4gc2V0TmV4dEJsb2NrVGltZXN0YW1wKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0Tm9uY2U6IChhcmdzKSA9PiBzZXROb25jZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldFJwY1VybDogKGFyZ3MpID0+IHNldFJwY1VybChjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldFN0b3JhZ2VBdDogKGFyZ3MpID0+IHNldFN0b3JhZ2VBdChjbGllbnQsIGFyZ3MpLAogICAgICAgIHNuYXBzaG90OiAoKSA9PiBzbmFwc2hvdChjbGllbnQpLAogICAgICAgIHN0b3BJbXBlcnNvbmF0aW5nQWNjb3VudDogKGFyZ3MpID0+IHN0b3BJbXBlcnNvbmF0aW5nQWNjb3VudChjbGllbnQsIGFyZ3MpCiAgICAgIH07CiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2NyZWF0ZVRlc3RDbGllbnQuanMKICBmdW5jdGlvbiBjcmVhdGVUZXN0Q2xpZW50KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsga2V5ID0gInRlc3QiLCBuYW1lID0gIlRlc3QgQ2xpZW50IiwgbW9kZTogbW9kZTIgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQoewogICAgICAuLi5wYXJhbWV0ZXJzLAogICAgICBrZXksCiAgICAgIG5hbWUsCiAgICAgIHR5cGU6ICJ0ZXN0Q2xpZW50IgogICAgfSk7CiAgICByZXR1cm4gY2xpZW50LmV4dGVuZCgoY29uZmlnKSA9PiAoewogICAgICBtb2RlOiBtb2RlMiwKICAgICAgLi4udGVzdEFjdGlvbnMoeyBtb2RlOiBtb2RlMiB9KShjb25maWcpCiAgICB9KSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L2RlcGxveUNvbnRyYWN0LmpzCiAgaW5pdF9lbmNvZGVEZXBsb3lEYXRhKCk7CiAgZnVuY3Rpb24gZGVwbG95Q29udHJhY3Qod2FsbGV0Q2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYXJncywgYnl0ZWNvZGUsIC4uLnJlcXVlc3QgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjYWxsZGF0YSA9IGVuY29kZURlcGxveURhdGEoeyBhYmk6IGFiaTIsIGFyZ3MsIGJ5dGVjb2RlIH0pOwogICAgcmV0dXJuIHNlbmRUcmFuc2FjdGlvbih3YWxsZXRDbGllbnQsIHsKICAgICAgLi4ucmVxdWVzdCwKICAgICAgZGF0YTogY2FsbGRhdGEKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC9nZXRBZGRyZXNzZXMuanMKICBpbml0X2dldEFkZHJlc3MoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRBZGRyZXNzZXMoY2xpZW50KSB7CiAgICBpZiAoY2xpZW50LmFjY291bnQ/LnR5cGUgPT09ICJsb2NhbCIpCiAgICAgIHJldHVybiBbY2xpZW50LmFjY291bnQuYWRkcmVzc107CiAgICBjb25zdCBhZGRyZXNzZXMgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7IG1ldGhvZDogImV0aF9hY2NvdW50cyIgfSwgeyBkZWR1cGU6IHRydWUgfSk7CiAgICByZXR1cm4gYWRkcmVzc2VzLm1hcCgoYWRkcmVzcykgPT4gY2hlY2tzdW1BZGRyZXNzKGFkZHJlc3MpKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvZ2V0UGVybWlzc2lvbnMuanMKICBhc3luYyBmdW5jdGlvbiBnZXRQZXJtaXNzaW9ucyhjbGllbnQpIHsKICAgIGNvbnN0IHBlcm1pc3Npb25zID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoeyBtZXRob2Q6ICJ3YWxsZXRfZ2V0UGVybWlzc2lvbnMiIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgcmV0dXJuIHBlcm1pc3Npb25zOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC9yZXF1ZXN0QWRkcmVzc2VzLmpzCiAgaW5pdF9nZXRBZGRyZXNzKCk7CiAgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdEFkZHJlc3NlcyhjbGllbnQpIHsKICAgIGNvbnN0IGFkZHJlc3NlcyA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsgbWV0aG9kOiAiZXRoX3JlcXVlc3RBY2NvdW50cyIgfSwgeyBkZWR1cGU6IHRydWUsIHJldHJ5Q291bnQ6IDAgfSk7CiAgICByZXR1cm4gYWRkcmVzc2VzLm1hcCgoYWRkcmVzcykgPT4gZ2V0QWRkcmVzcyhhZGRyZXNzKSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3JlcXVlc3RQZXJtaXNzaW9ucy5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RQZXJtaXNzaW9ucyhjbGllbnQsIHBlcm1pc3Npb25zKSB7CiAgICByZXR1cm4gY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ3YWxsZXRfcmVxdWVzdFBlcm1pc3Npb25zIiwKICAgICAgcGFyYW1zOiBbcGVybWlzc2lvbnNdCiAgICB9LCB7IHJldHJ5Q291bnQ6IDAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NpZ25NZXNzYWdlLmpzCiAgaW5pdF9wYXJzZUFjY291bnQoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2lnbk1lc3NhZ2UoY2xpZW50LCB7IGFjY291bnQ6IGFjY291bnRfID0gY2xpZW50LmFjY291bnQsIG1lc3NhZ2UgfSkgewogICAgaWYgKCFhY2NvdW50XykKICAgICAgdGhyb3cgbmV3IEFjY291bnROb3RGb3VuZEVycm9yKHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2FjdGlvbnMvd2FsbGV0L3NpZ25NZXNzYWdlIgogICAgICB9KTsKICAgIGNvbnN0IGFjY291bnQgPSBwYXJzZUFjY291bnQoYWNjb3VudF8pOwogICAgaWYgKGFjY291bnQuc2lnbk1lc3NhZ2UpCiAgICAgIHJldHVybiBhY2NvdW50LnNpZ25NZXNzYWdlKHsgbWVzc2FnZSB9KTsKICAgIGNvbnN0IG1lc3NhZ2VfID0gKCgpID0+IHsKICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gc3RyaW5nVG9IZXgobWVzc2FnZSk7CiAgICAgIGlmIChtZXNzYWdlLnJhdyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpCiAgICAgICAgcmV0dXJuIHRvSGV4KG1lc3NhZ2UucmF3KTsKICAgICAgcmV0dXJuIG1lc3NhZ2UucmF3OwogICAgfSkoKTsKICAgIHJldHVybiBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogInBlcnNvbmFsX3NpZ24iLAogICAgICBwYXJhbXM6IFttZXNzYWdlXywgYWNjb3VudC5hZGRyZXNzXQogICAgfSwgeyByZXRyeUNvdW50OiAwIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC9zaWduVHJhbnNhY3Rpb24uanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X3RyYW5zYWN0aW9uUmVxdWVzdCgpOwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNpZ25UcmFuc2FjdGlvbihjbGllbnQsIHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudF8gPSBjbGllbnQuYWNjb3VudCwgY2hhaW4gPSBjbGllbnQuY2hhaW4sIC4uLnRyYW5zYWN0aW9uIH0gPSBwYXJhbWV0ZXJzOwogICAgaWYgKCFhY2NvdW50XykKICAgICAgdGhyb3cgbmV3IEFjY291bnROb3RGb3VuZEVycm9yKHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2FjdGlvbnMvd2FsbGV0L3NpZ25UcmFuc2FjdGlvbiIKICAgICAgfSk7CiAgICBjb25zdCBhY2NvdW50ID0gcGFyc2VBY2NvdW50KGFjY291bnRfKTsKICAgIGFzc2VydFJlcXVlc3QoewogICAgICBhY2NvdW50LAogICAgICAuLi5wYXJhbWV0ZXJzCiAgICB9KTsKICAgIGNvbnN0IGNoYWluSWQgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRDaGFpbklkLCAiZ2V0Q2hhaW5JZCIpKHt9KTsKICAgIGlmIChjaGFpbiAhPT0gbnVsbCkKICAgICAgYXNzZXJ0Q3VycmVudENoYWluKHsKICAgICAgICBjdXJyZW50Q2hhaW5JZDogY2hhaW5JZCwKICAgICAgICBjaGFpbgogICAgICB9KTsKICAgIGNvbnN0IGZvcm1hdHRlcnM0ID0gY2hhaW4/LmZvcm1hdHRlcnMgfHwgY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzOwogICAgY29uc3QgZm9ybWF0ID0gZm9ybWF0dGVyczQ/LnRyYW5zYWN0aW9uUmVxdWVzdD8uZm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgIGlmIChhY2NvdW50LnNpZ25UcmFuc2FjdGlvbikKICAgICAgcmV0dXJuIGFjY291bnQuc2lnblRyYW5zYWN0aW9uKHsKICAgICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgICBjaGFpbklkCiAgICAgIH0sIHsgc2VyaWFsaXplcjogY2xpZW50LmNoYWluPy5zZXJpYWxpemVycz8udHJhbnNhY3Rpb24gfSk7CiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfc2lnblRyYW5zYWN0aW9uIiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgewogICAgICAgICAgLi4uZm9ybWF0KHRyYW5zYWN0aW9uKSwKICAgICAgICAgIGNoYWluSWQ6IG51bWJlclRvSGV4KGNoYWluSWQpLAogICAgICAgICAgZnJvbTogYWNjb3VudC5hZGRyZXNzCiAgICAgICAgfQogICAgICBdCiAgICB9LCB7IHJldHJ5Q291bnQ6IDAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NpZ25UeXBlZERhdGEuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNpZ25UeXBlZERhdGEoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFjY291bnQ6IGFjY291bnRfID0gY2xpZW50LmFjY291bnQsIGRvbWFpbiwgbWVzc2FnZSwgcHJpbWFyeVR5cGUgfSA9IHBhcmFtZXRlcnM7CiAgICBpZiAoIWFjY291bnRfKQogICAgICB0aHJvdyBuZXcgQWNjb3VudE5vdEZvdW5kRXJyb3IoewogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvYWN0aW9ucy93YWxsZXQvc2lnblR5cGVkRGF0YSIKICAgICAgfSk7CiAgICBjb25zdCBhY2NvdW50ID0gcGFyc2VBY2NvdW50KGFjY291bnRfKTsKICAgIGNvbnN0IHR5cGVzID0gewogICAgICBFSVA3MTJEb21haW46IGdldFR5cGVzRm9yRUlQNzEyRG9tYWluKHsgZG9tYWluIH0pLAogICAgICAuLi5wYXJhbWV0ZXJzLnR5cGVzCiAgICB9OwogICAgdmFsaWRhdGVUeXBlZERhdGEoeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9KTsKICAgIGlmIChhY2NvdW50LnNpZ25UeXBlZERhdGEpCiAgICAgIHJldHVybiBhY2NvdW50LnNpZ25UeXBlZERhdGEoeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9KTsKICAgIGNvbnN0IHR5cGVkRGF0YSA9IHNlcmlhbGl6ZVR5cGVkRGF0YSh7IGRvbWFpbiwgbWVzc2FnZSwgcHJpbWFyeVR5cGUsIHR5cGVzIH0pOwogICAgcmV0dXJuIGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX3NpZ25UeXBlZERhdGFfdjQiLAogICAgICBwYXJhbXM6IFthY2NvdW50LmFkZHJlc3MsIHR5cGVkRGF0YV0KICAgIH0sIHsgcmV0cnlDb3VudDogMCB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvc3dpdGNoQ2hhaW4uanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc3dpdGNoQ2hhaW4oY2xpZW50LCB7IGlkIH0pIHsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAid2FsbGV0X3N3aXRjaEV0aGVyZXVtQ2hhaW4iLAogICAgICBwYXJhbXM6IFsKICAgICAgICB7CiAgICAgICAgICBjaGFpbklkOiBudW1iZXJUb0hleChpZCkKICAgICAgICB9CiAgICAgIF0KICAgIH0sIHsgcmV0cnlDb3VudDogMCB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvd2F0Y2hBc3NldC5qcwogIGFzeW5jIGZ1bmN0aW9uIHdhdGNoQXNzZXQoY2xpZW50LCBwYXJhbXMpIHsKICAgIGNvbnN0IGFkZGVkID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ3YWxsZXRfd2F0Y2hBc3NldCIsCiAgICAgIHBhcmFtcwogICAgfSwgeyByZXRyeUNvdW50OiAwIH0pOwogICAgcmV0dXJuIGFkZGVkOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2RlY29yYXRvcnMvd2FsbGV0LmpzCiAgZnVuY3Rpb24gd2FsbGV0QWN0aW9ucyhjbGllbnQpIHsKICAgIHJldHVybiB7CiAgICAgIGFkZENoYWluOiAoYXJncykgPT4gYWRkQ2hhaW4oY2xpZW50LCBhcmdzKSwKICAgICAgZGVwbG95Q29udHJhY3Q6IChhcmdzKSA9PiBkZXBsb3lDb250cmFjdChjbGllbnQsIGFyZ3MpLAogICAgICBnZXRBZGRyZXNzZXM6ICgpID0+IGdldEFkZHJlc3NlcyhjbGllbnQpLAogICAgICBnZXRDaGFpbklkOiAoKSA9PiBnZXRDaGFpbklkKGNsaWVudCksCiAgICAgIGdldFBlcm1pc3Npb25zOiAoKSA9PiBnZXRQZXJtaXNzaW9ucyhjbGllbnQpLAogICAgICBwcmVwYXJlVHJhbnNhY3Rpb25SZXF1ZXN0OiAoYXJncykgPT4gcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdChjbGllbnQsIGFyZ3MpLAogICAgICByZXF1ZXN0QWRkcmVzc2VzOiAoKSA9PiByZXF1ZXN0QWRkcmVzc2VzKGNsaWVudCksCiAgICAgIHJlcXVlc3RQZXJtaXNzaW9uczogKGFyZ3MpID0+IHJlcXVlc3RQZXJtaXNzaW9ucyhjbGllbnQsIGFyZ3MpLAogICAgICBzZW5kUmF3VHJhbnNhY3Rpb246IChhcmdzKSA9PiBzZW5kUmF3VHJhbnNhY3Rpb24oY2xpZW50LCBhcmdzKSwKICAgICAgc2VuZFRyYW5zYWN0aW9uOiAoYXJncykgPT4gc2VuZFRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgIHNpZ25NZXNzYWdlOiAoYXJncykgPT4gc2lnbk1lc3NhZ2UoY2xpZW50LCBhcmdzKSwKICAgICAgc2lnblRyYW5zYWN0aW9uOiAoYXJncykgPT4gc2lnblRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgIHNpZ25UeXBlZERhdGE6IChhcmdzKSA9PiBzaWduVHlwZWREYXRhKGNsaWVudCwgYXJncyksCiAgICAgIHN3aXRjaENoYWluOiAoYXJncykgPT4gc3dpdGNoQ2hhaW4oY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hBc3NldDogKGFyZ3MpID0+IHdhdGNoQXNzZXQoY2xpZW50LCBhcmdzKSwKICAgICAgd3JpdGVDb250cmFjdDogKGFyZ3MpID0+IHdyaXRlQ29udHJhY3QoY2xpZW50LCBhcmdzKQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2xpZW50cy9jcmVhdGVXYWxsZXRDbGllbnQuanMKICBmdW5jdGlvbiBjcmVhdGVXYWxsZXRDbGllbnQocGFyYW1ldGVycykgewogICAgY29uc3QgeyBrZXkgPSAid2FsbGV0IiwgbmFtZSA9ICJXYWxsZXQgQ2xpZW50IiwgdHJhbnNwb3J0IH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQ2xpZW50KHsKICAgICAgLi4ucGFyYW1ldGVycywKICAgICAga2V5LAogICAgICBuYW1lLAogICAgICB0cmFuc3BvcnQsCiAgICAgIHR5cGU6ICJ3YWxsZXRDbGllbnQiCiAgICB9KTsKICAgIHJldHVybiBjbGllbnQuZXh0ZW5kKHdhbGxldEFjdGlvbnMpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL3RyYW5zcG9ydHMvd2ViU29ja2V0LmpzCiAgaW5pdF9yZXF1ZXN0KCk7CiAgZnVuY3Rpb24gd2ViU29ja2V0KHVybCwgY29uZmlnID0ge30pIHsKICAgIGNvbnN0IHsga2VlcEFsaXZlLCBrZXkgPSAid2ViU29ja2V0IiwgbmFtZSA9ICJXZWJTb2NrZXQgSlNPTi1SUEMiLCByZWNvbm5lY3QsIHJldHJ5RGVsYXkgfSA9IGNvbmZpZzsKICAgIHJldHVybiAoeyBjaGFpbiwgcmV0cnlDb3VudDogcmV0cnlDb3VudF8sIHRpbWVvdXQ6IHRpbWVvdXRfIH0pID0+IHsKICAgICAgY29uc3QgcmV0cnlDb3VudCA9IGNvbmZpZy5yZXRyeUNvdW50ID8/IHJldHJ5Q291bnRfOwogICAgICBjb25zdCB0aW1lb3V0ID0gdGltZW91dF8gPz8gY29uZmlnLnRpbWVvdXQgPz8gMWU0OwogICAgICBjb25zdCB1cmxfID0gdXJsIHx8IGNoYWluPy5ycGNVcmxzLmRlZmF1bHQud2ViU29ja2V0Py5bMF07CiAgICAgIGlmICghdXJsXykKICAgICAgICB0aHJvdyBuZXcgVXJsUmVxdWlyZWRFcnJvcigpOwogICAgICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICAgICAgY29uc3QgYm9keSA9IHsgbWV0aG9kLCBwYXJhbXMgfTsKICAgICAgICAgIGNvbnN0IHJwY0NsaWVudCA9IGF3YWl0IGdldFdlYlNvY2tldFJwY0NsaWVudCh1cmxfLCB7CiAgICAgICAgICAgIGtlZXBBbGl2ZSwKICAgICAgICAgICAgcmVjb25uZWN0CiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IHsgZXJyb3IsIHJlc3VsdCB9ID0gYXdhaXQgcnBjQ2xpZW50LnJlcXVlc3RBc3luYyh7CiAgICAgICAgICAgIGJvZHksCiAgICAgICAgICAgIHRpbWVvdXQKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGVycm9yKQogICAgICAgICAgICB0aHJvdyBuZXcgUnBjUmVxdWVzdEVycm9yKHsKICAgICAgICAgICAgICBib2R5LAogICAgICAgICAgICAgIGVycm9yLAogICAgICAgICAgICAgIHVybDogdXJsXwogICAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfSwKICAgICAgICByZXRyeUNvdW50LAogICAgICAgIHJldHJ5RGVsYXksCiAgICAgICAgdGltZW91dCwKICAgICAgICB0eXBlOiAid2ViU29ja2V0IgogICAgICB9LCB7CiAgICAgICAgZ2V0U29ja2V0KCkgewogICAgICAgICAgcmV0dXJuIGdldFNvY2tldCh1cmxfKTsKICAgICAgICB9LAogICAgICAgIGdldFJwY0NsaWVudCgpIHsKICAgICAgICAgIHJldHVybiBnZXRXZWJTb2NrZXRScGNDbGllbnQodXJsXyk7CiAgICAgICAgfSwKICAgICAgICBhc3luYyBzdWJzY3JpYmUoeyBwYXJhbXMsIG9uRGF0YSwgb25FcnJvciB9KSB7CiAgICAgICAgICBjb25zdCBycGNDbGllbnQgPSBhd2FpdCBnZXRXZWJTb2NrZXRScGNDbGllbnQodXJsXyk7CiAgICAgICAgICBjb25zdCB7IHJlc3VsdDogc3Vic2NyaXB0aW9uSWQgfSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHJwY0NsaWVudC5yZXF1ZXN0KHsKICAgICAgICAgICAgYm9keTogewogICAgICAgICAgICAgIG1ldGhvZDogImV0aF9zdWJzY3JpYmUiLAogICAgICAgICAgICAgIHBhcmFtcwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbkVycm9yKGVycm9yKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25SZXNwb25zZShyZXNwb25zZSkgewogICAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikgewogICAgICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlLmVycm9yKTsKICAgICAgICAgICAgICAgIG9uRXJyb3I/LihyZXNwb25zZS5lcnJvcik7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UuaWQgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLm1ldGhvZCAhPT0gImV0aF9zdWJzY3JpcHRpb24iKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIG9uRGF0YShyZXNwb25zZS5wYXJhbXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KSk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBzdWJzY3JpcHRpb25JZCwKICAgICAgICAgICAgYXN5bmMgdW5zdWJzY3JpYmUoKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBycGNDbGllbnQucmVxdWVzdCh7CiAgICAgICAgICAgICAgICBib2R5OiB7CiAgICAgICAgICAgICAgICAgIG1ldGhvZDogImV0aF91bnN1YnNjcmliZSIsCiAgICAgICAgICAgICAgICAgIHBhcmFtczogW3N1YnNjcmlwdGlvbklkXQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIG9uUmVzcG9uc2U6IHJlc29sdmUKICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9KTsKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2luZGV4LmpzCiAgaW5pdF9hYmlzKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2FkZHJlc3MuanMKICB2YXIgemVyb0FkZHJlc3MgPSAiMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9pbmRleC5qcwogIGluaXRfY29udHJhY3RzKCk7CiAgaW5pdF91bml0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL251bWJlci5qcwogIHZhciBtYXhJbnQ4ID0gMm4gKiogKDhuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDE2ID0gMm4gKiogKDE2biAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQyNCA9IDJuICoqICgyNG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MzIgPSAybiAqKiAoMzJuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDQwID0gMm4gKiogKDQwbiAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQ0OCA9IDJuICoqICg0OG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50NTYgPSAybiAqKiAoNTZuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDY0ID0gMm4gKiogKDY0biAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQ3MiA9IDJuICoqICg3Mm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50ODAgPSAybiAqKiAoODBuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDg4ID0gMm4gKiogKDg4biAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQ5NiA9IDJuICoqICg5Nm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTA0ID0gMm4gKiogKDEwNG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTEyID0gMm4gKiogKDExMm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTIwID0gMm4gKiogKDEyMG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTI4ID0gMm4gKiogKDEyOG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTM2ID0gMm4gKiogKDEzNm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTQ0ID0gMm4gKiogKDE0NG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTUyID0gMm4gKiogKDE1Mm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTYwID0gMm4gKiogKDE2MG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTY4ID0gMm4gKiogKDE2OG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTc2ID0gMm4gKiogKDE3Nm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTg0ID0gMm4gKiogKDE4NG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTkyID0gMm4gKiogKDE5Mm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjAwID0gMm4gKiogKDIwMG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjA4ID0gMm4gKiogKDIwOG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjE2ID0gMm4gKiogKDIxNm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjI0ID0gMm4gKiogKDIyNG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjMyID0gMm4gKiogKDIzMm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjQwID0gMm4gKiogKDI0MG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjQ4ID0gMm4gKiogKDI0OG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjU2ID0gMm4gKiogKDI1Nm4gLSAxbikgLSAxbjsKICB2YXIgbWluSW50OCA9IC0oMm4gKiogKDhuIC0gMW4pKTsKICB2YXIgbWluSW50MTYgPSAtKDJuICoqICgxNm4gLSAxbikpOwogIHZhciBtaW5JbnQyNCA9IC0oMm4gKiogKDI0biAtIDFuKSk7CiAgdmFyIG1pbkludDMyID0gLSgybiAqKiAoMzJuIC0gMW4pKTsKICB2YXIgbWluSW50NDAgPSAtKDJuICoqICg0MG4gLSAxbikpOwogIHZhciBtaW5JbnQ0OCA9IC0oMm4gKiogKDQ4biAtIDFuKSk7CiAgdmFyIG1pbkludDU2ID0gLSgybiAqKiAoNTZuIC0gMW4pKTsKICB2YXIgbWluSW50NjQgPSAtKDJuICoqICg2NG4gLSAxbikpOwogIHZhciBtaW5JbnQ3MiA9IC0oMm4gKiogKDcybiAtIDFuKSk7CiAgdmFyIG1pbkludDgwID0gLSgybiAqKiAoODBuIC0gMW4pKTsKICB2YXIgbWluSW50ODggPSAtKDJuICoqICg4OG4gLSAxbikpOwogIHZhciBtaW5JbnQ5NiA9IC0oMm4gKiogKDk2biAtIDFuKSk7CiAgdmFyIG1pbkludDEwNCA9IC0oMm4gKiogKDEwNG4gLSAxbikpOwogIHZhciBtaW5JbnQxMTIgPSAtKDJuICoqICgxMTJuIC0gMW4pKTsKICB2YXIgbWluSW50MTIwID0gLSgybiAqKiAoMTIwbiAtIDFuKSk7CiAgdmFyIG1pbkludDEyOCA9IC0oMm4gKiogKDEyOG4gLSAxbikpOwogIHZhciBtaW5JbnQxMzYgPSAtKDJuICoqICgxMzZuIC0gMW4pKTsKICB2YXIgbWluSW50MTQ0ID0gLSgybiAqKiAoMTQ0biAtIDFuKSk7CiAgdmFyIG1pbkludDE1MiA9IC0oMm4gKiogKDE1Mm4gLSAxbikpOwogIHZhciBtaW5JbnQxNjAgPSAtKDJuICoqICgxNjBuIC0gMW4pKTsKICB2YXIgbWluSW50MTY4ID0gLSgybiAqKiAoMTY4biAtIDFuKSk7CiAgdmFyIG1pbkludDE3NiA9IC0oMm4gKiogKDE3Nm4gLSAxbikpOwogIHZhciBtaW5JbnQxODQgPSAtKDJuICoqICgxODRuIC0gMW4pKTsKICB2YXIgbWluSW50MTkyID0gLSgybiAqKiAoMTkybiAtIDFuKSk7CiAgdmFyIG1pbkludDIwMCA9IC0oMm4gKiogKDIwMG4gLSAxbikpOwogIHZhciBtaW5JbnQyMDggPSAtKDJuICoqICgyMDhuIC0gMW4pKTsKICB2YXIgbWluSW50MjE2ID0gLSgybiAqKiAoMjE2biAtIDFuKSk7CiAgdmFyIG1pbkludDIyNCA9IC0oMm4gKiogKDIyNG4gLSAxbikpOwogIHZhciBtaW5JbnQyMzIgPSAtKDJuICoqICgyMzJuIC0gMW4pKTsKICB2YXIgbWluSW50MjQwID0gLSgybiAqKiAoMjQwbiAtIDFuKSk7CiAgdmFyIG1pbkludDI0OCA9IC0oMm4gKiogKDI0OG4gLSAxbikpOwogIHZhciBtaW5JbnQyNTYgPSAtKDJuICoqICgyNTZuIC0gMW4pKTsKICB2YXIgbWF4VWludDggPSAybiAqKiA4biAtIDFuOwogIHZhciBtYXhVaW50MTYgPSAybiAqKiAxNm4gLSAxbjsKICB2YXIgbWF4VWludDI0ID0gMm4gKiogMjRuIC0gMW47CiAgdmFyIG1heFVpbnQzMiA9IDJuICoqIDMybiAtIDFuOwogIHZhciBtYXhVaW50NDAgPSAybiAqKiA0MG4gLSAxbjsKICB2YXIgbWF4VWludDQ4ID0gMm4gKiogNDhuIC0gMW47CiAgdmFyIG1heFVpbnQ1NiA9IDJuICoqIDU2biAtIDFuOwogIHZhciBtYXhVaW50NjQgPSAybiAqKiA2NG4gLSAxbjsKICB2YXIgbWF4VWludDcyID0gMm4gKiogNzJuIC0gMW47CiAgdmFyIG1heFVpbnQ4MCA9IDJuICoqIDgwbiAtIDFuOwogIHZhciBtYXhVaW50ODggPSAybiAqKiA4OG4gLSAxbjsKICB2YXIgbWF4VWludDk2ID0gMm4gKiogOTZuIC0gMW47CiAgdmFyIG1heFVpbnQxMDQgPSAybiAqKiAxMDRuIC0gMW47CiAgdmFyIG1heFVpbnQxMTIgPSAybiAqKiAxMTJuIC0gMW47CiAgdmFyIG1heFVpbnQxMjAgPSAybiAqKiAxMjBuIC0gMW47CiAgdmFyIG1heFVpbnQxMjggPSAybiAqKiAxMjhuIC0gMW47CiAgdmFyIG1heFVpbnQxMzYgPSAybiAqKiAxMzZuIC0gMW47CiAgdmFyIG1heFVpbnQxNDQgPSAybiAqKiAxNDRuIC0gMW47CiAgdmFyIG1heFVpbnQxNTIgPSAybiAqKiAxNTJuIC0gMW47CiAgdmFyIG1heFVpbnQxNjAgPSAybiAqKiAxNjBuIC0gMW47CiAgdmFyIG1heFVpbnQxNjggPSAybiAqKiAxNjhuIC0gMW47CiAgdmFyIG1heFVpbnQxNzYgPSAybiAqKiAxNzZuIC0gMW47CiAgdmFyIG1heFVpbnQxODQgPSAybiAqKiAxODRuIC0gMW47CiAgdmFyIG1heFVpbnQxOTIgPSAybiAqKiAxOTJuIC0gMW47CiAgdmFyIG1heFVpbnQyMDAgPSAybiAqKiAyMDBuIC0gMW47CiAgdmFyIG1heFVpbnQyMDggPSAybiAqKiAyMDhuIC0gMW47CiAgdmFyIG1heFVpbnQyMTYgPSAybiAqKiAyMTZuIC0gMW47CiAgdmFyIG1heFVpbnQyMjQgPSAybiAqKiAyMjRuIC0gMW47CiAgdmFyIG1heFVpbnQyMzIgPSAybiAqKiAyMzJuIC0gMW47CiAgdmFyIG1heFVpbnQyNDAgPSAybiAqKiAyNDBuIC0gMW47CiAgdmFyIG1heFVpbnQyNDggPSAybiAqKiAyNDhuIC0gMW47CiAgdmFyIG1heFVpbnQyNTYgPSAybiAqKiAyNTZuIC0gMW47CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vaW5kZXguanMKICBpbml0X2FiaSgpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY29udHJhY3QoKTsKICBpbml0X3JwYygpOwogIGluaXRfY2hhaW4oKTsKICBpbml0X2VuY29kaW5nKCk7CiAgaW5pdF9ub2RlKCk7CiAgaW5pdF9yZXF1ZXN0KCk7CiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF90cmFuc2FjdGlvbigpOwogIGluaXRfZGF0YSgpOwogIGluaXRfc3RhdGVPdmVycmlkZSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3R5cGVzL2VpcDExOTMuanMKICB2YXIgUHJvdmlkZXJScGNFcnJvcjIgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICAgIGNvbnN0cnVjdG9yKGNvZGUsIG1lc3NhZ2UpIHsKICAgICAgc3VwZXIobWVzc2FnZSk7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgIH0pOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRldGFpbHMiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICB9KTsKICAgICAgdGhpcy5jb2RlID0gY29kZTsKICAgICAgdGhpcy5kZXRhaWxzID0gbWVzc2FnZTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2luZGV4LmpzCiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZURlcGxveURhdGEuanMKICBpbml0X2FiaSgpOwogIGluaXRfZGVjb2RlQWJpUGFyYW1ldGVycygpOwogIHZhciBkb2NzUGF0aDggPSAiL2RvY3MvY29udHJhY3QvZGVjb2RlRGVwbG95RGF0YSI7CiAgZnVuY3Rpb24gZGVjb2RlRGVwbG95RGF0YShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYnl0ZWNvZGUsIGRhdGEgfSA9IHBhcmFtZXRlcnM7CiAgICBpZiAoZGF0YSA9PT0gYnl0ZWNvZGUpCiAgICAgIHJldHVybiB7IGJ5dGVjb2RlIH07CiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGFiaTIuZmluZCgoeCkgPT4gInR5cGUiIGluIHggJiYgeC50eXBlID09PSAiY29uc3RydWN0b3IiKTsKICAgIGlmICghZGVzY3JpcHRpb24pCiAgICAgIHRocm93IG5ldyBBYmlDb25zdHJ1Y3Rvck5vdEZvdW5kRXJyb3IoeyBkb2NzUGF0aDogZG9jc1BhdGg4IH0pOwogICAgaWYgKCEoImlucHV0cyIgaW4gZGVzY3JpcHRpb24pKQogICAgICB0aHJvdyBuZXcgQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoOCB9KTsKICAgIGlmICghZGVzY3JpcHRpb24uaW5wdXRzIHx8IGRlc2NyaXB0aW9uLmlucHV0cy5sZW5ndGggPT09IDApCiAgICAgIHRocm93IG5ldyBBYmlDb25zdHJ1Y3RvclBhcmFtc05vdEZvdW5kRXJyb3IoeyBkb2NzUGF0aDogZG9jc1BhdGg4IH0pOwogICAgY29uc3QgYXJncyA9IGRlY29kZUFiaVBhcmFtZXRlcnMoZGVzY3JpcHRpb24uaW5wdXRzLCBgMHgke2RhdGEucmVwbGFjZShieXRlY29kZSwgIiIpfWApOwogICAgcmV0dXJuIHsgYXJncywgYnl0ZWNvZGUgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vaW5kZXguanMKICBpbml0X2RlY29kZUVycm9yUmVzdWx0KCk7CiAgaW5pdF9kZWNvZGVGdW5jdGlvblJlc3VsdCgpOwogIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogIGluaXRfZW5jb2RlRGVwbG95RGF0YSgpOwogIGluaXRfZW5jb2RlRnVuY3Rpb25EYXRhKCk7CiAgaW5pdF9wcmVwYXJlRW5jb2RlRnVuY3Rpb25EYXRhKCk7CiAgaW5pdF90cmFuc2FjdGlvblJlcXVlc3QoKTsKICBpbml0X2dldEFiaUl0ZW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvY29tcGFjdFNpZ25hdHVyZVRvU2lnbmF0dXJlLmpzCiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIGNvbXBhY3RTaWduYXR1cmVUb1NpZ25hdHVyZSh7IHIsIHlQYXJpdHlBbmRTIH0pIHsKICAgIGNvbnN0IHlQYXJpdHlBbmRTX2J5dGVzID0gaGV4VG9CeXRlcyh5UGFyaXR5QW5kUyk7CiAgICBjb25zdCB5UGFyaXR5ID0geVBhcml0eUFuZFNfYnl0ZXNbMF0gJiAxMjggPyAxIDogMDsKICAgIGNvbnN0IHMgPSB5UGFyaXR5QW5kU19ieXRlczsKICAgIGlmICh5UGFyaXR5ID09PSAxKQogICAgICBzWzBdICY9IDEyNzsKICAgIHJldHVybiB7IHIsIHM6IGJ5dGVzVG9IZXgocyksIHlQYXJpdHkgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3BhcnNlQ29tcGFjdFNpZ25hdHVyZS5qcwogIGluaXRfc2VjcDI1NmsxKCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIHBhcnNlQ29tcGFjdFNpZ25hdHVyZShzaWduYXR1cmVIZXgpIHsKICAgIGNvbnN0IHsgciwgcyB9ID0gc2VjcDI1NmsxLlNpZ25hdHVyZS5mcm9tQ29tcGFjdChzaWduYXR1cmVIZXguc2xpY2UoMiwgMTMwKSk7CiAgICByZXR1cm4gewogICAgICByOiBudW1iZXJUb0hleChyLCB7IHNpemU6IDMyIH0pLAogICAgICB5UGFyaXR5QW5kUzogbnVtYmVyVG9IZXgocywgeyBzaXplOiAzMiB9KQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3BhcnNlU2lnbmF0dXJlLmpzCiAgaW5pdF9zZWNwMjU2azEoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmUyKHNpZ25hdHVyZUhleCkgewogICAgY29uc3QgeyByLCBzIH0gPSBzZWNwMjU2azEuU2lnbmF0dXJlLmZyb21Db21wYWN0KHNpZ25hdHVyZUhleC5zbGljZSgyLCAxMzApKTsKICAgIGNvbnN0IHlQYXJpdHlPclYgPSBOdW1iZXIoYDB4JHtzaWduYXR1cmVIZXguc2xpY2UoMTMwKX1gKTsKICAgIGNvbnN0IFt2LCB5UGFyaXR5XSA9ICgoKSA9PiB7CiAgICAgIGlmICh5UGFyaXR5T3JWID09PSAwIHx8IHlQYXJpdHlPclYgPT09IDEpCiAgICAgICAgcmV0dXJuIFt2b2lkIDAsIHlQYXJpdHlPclZdOwogICAgICBpZiAoeVBhcml0eU9yViA9PT0gMjcpCiAgICAgICAgcmV0dXJuIFtCaWdJbnQoeVBhcml0eU9yViksIDBdOwogICAgICBpZiAoeVBhcml0eU9yViA9PT0gMjgpCiAgICAgICAgcmV0dXJuIFtCaWdJbnQoeVBhcml0eU9yViksIDFdOwogICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeVBhcml0eU9yViB2YWx1ZSIpOwogICAgfSkoKTsKICAgIGlmICh0eXBlb2YgdiAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJldHVybiB7CiAgICAgICAgcjogbnVtYmVyVG9IZXgociwgeyBzaXplOiAzMiB9KSwKICAgICAgICBzOiBudW1iZXJUb0hleChzLCB7IHNpemU6IDMyIH0pLAogICAgICAgIHYsCiAgICAgICAgeVBhcml0eQogICAgICB9OwogICAgcmV0dXJuIHsKICAgICAgcjogbnVtYmVyVG9IZXgociwgeyBzaXplOiAzMiB9KSwKICAgICAgczogbnVtYmVyVG9IZXgocywgeyBzaXplOiAzMiB9KSwKICAgICAgeVBhcml0eQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3JlY292ZXJUcmFuc2FjdGlvbkFkZHJlc3MuanMKICBpbml0X2tlY2NhazI1NigpOwogIGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJUcmFuc2FjdGlvbkFkZHJlc3MocGFyYW1ldGVycykgewogICAgY29uc3QgeyBzZXJpYWxpemVkVHJhbnNhY3Rpb24sIHNpZ25hdHVyZTogc2lnbmF0dXJlXyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gcGFyc2VUcmFuc2FjdGlvbihzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmF0dXJlXyA/PyB7CiAgICAgIHI6IHRyYW5zYWN0aW9uLnIsCiAgICAgIHM6IHRyYW5zYWN0aW9uLnMsCiAgICAgIHY6IHRyYW5zYWN0aW9uLnYsCiAgICAgIHlQYXJpdHk6IHRyYW5zYWN0aW9uLnlQYXJpdHkKICAgIH07CiAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplVHJhbnNhY3Rpb24oewogICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgcjogdm9pZCAwLAogICAgICBzOiB2b2lkIDAsCiAgICAgIHY6IHZvaWQgMCwKICAgICAgeVBhcml0eTogdm9pZCAwLAogICAgICBzaWRlY2Fyczogdm9pZCAwCiAgICB9KTsKICAgIHJldHVybiBhd2FpdCByZWNvdmVyQWRkcmVzcyh7CiAgICAgIGhhc2g6IGtlY2NhazI1NihzZXJpYWxpemVkKSwKICAgICAgc2lnbmF0dXJlCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3NpZ25hdHVyZVRvQ29tcGFjdFNpZ25hdHVyZS5qcwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBzaWduYXR1cmVUb0NvbXBhY3RTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICBjb25zdCB7IHIsIHMsIHYsIHlQYXJpdHkgfSA9IHNpZ25hdHVyZTsKICAgIGNvbnN0IHlQYXJpdHlfID0gTnVtYmVyKHlQYXJpdHkgPz8gdiAtIDI3bik7CiAgICBsZXQgeVBhcml0eUFuZFMgPSBzOwogICAgaWYgKHlQYXJpdHlfID09PSAxKSB7CiAgICAgIGNvbnN0IGJ5dGVzMiA9IGhleFRvQnl0ZXMocyk7CiAgICAgIGJ5dGVzMlswXSB8PSAxMjg7CiAgICAgIHlQYXJpdHlBbmRTID0gYnl0ZXNUb0hleChieXRlczIpOwogICAgfQogICAgcmV0dXJuIHsgciwgeVBhcml0eUFuZFMgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3NlcmlhbGl6ZUNvbXBhY3RTaWduYXR1cmUuanMKICBpbml0X3NlY3AyNTZrMSgpOwogIGluaXRfZnJvbUhleCgpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZUNvbXBhY3RTaWduYXR1cmUoeyByLCB5UGFyaXR5QW5kUyB9KSB7CiAgICByZXR1cm4gYDB4JHtuZXcgc2VjcDI1NmsxLlNpZ25hdHVyZShoZXhUb0JpZ0ludChyKSwgaGV4VG9CaWdJbnQoeVBhcml0eUFuZFMpKS50b0NvbXBhY3RIZXgoKX1gOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9pbmRleC5qcwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X2Zyb21CeXRlcygpOwogIGluaXRfY2NpcDIoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL3NpZGVjYXJzVG9WZXJzaW9uZWRIYXNoZXMuanMKICBmdW5jdGlvbiBzaWRlY2Fyc1RvVmVyc2lvbmVkSGFzaGVzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgc2lkZWNhcnMsIHZlcnNpb246IHZlcnNpb24zIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgdG8gPSBwYXJhbWV0ZXJzLnRvID8/ICh0eXBlb2Ygc2lkZWNhcnNbMF0uYmxvYiA9PT0gInN0cmluZyIgPyAiaGV4IiA6ICJieXRlcyIpOwogICAgY29uc3QgaGFzaGVzID0gW107CiAgICBmb3IgKGNvbnN0IHsgY29tbWl0bWVudCB9IG9mIHNpZGVjYXJzKSB7CiAgICAgIGhhc2hlcy5wdXNoKGNvbW1pdG1lbnRUb1ZlcnNpb25lZEhhc2goewogICAgICAgIGNvbW1pdG1lbnQsCiAgICAgICAgdG8sCiAgICAgICAgdmVyc2lvbjogdmVyc2lvbjMKICAgICAgfSkpOwogICAgfQogICAgcmV0dXJuIGhhc2hlczsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYmxvYi9mcm9tQmxvYnMuanMKICBpbml0X2N1cnNvcjIoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gZnJvbUJsb2JzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IGJsb2JzID0gdHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gcGFyYW1ldGVycy5ibG9icy5tYXAoKHgpID0+IGhleFRvQnl0ZXMoeCkpIDogcGFyYW1ldGVycy5ibG9iczsKICAgIGNvbnN0IGxlbmd0aCA9IGJsb2JzLnJlZHVjZSgobGVuZ3RoMiwgYmxvYikgPT4gbGVuZ3RoMiArIGJsb2IubGVuZ3RoLCAwKTsKICAgIGNvbnN0IGRhdGEgPSBjcmVhdGVDdXJzb3IobmV3IFVpbnQ4QXJyYXkobGVuZ3RoKSk7CiAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgIGZvciAoY29uc3QgYmxvYiBvZiBibG9icykgewogICAgICBjb25zdCBjdXJzb3IgPSBjcmVhdGVDdXJzb3IoYmxvYik7CiAgICAgIHdoaWxlIChhY3RpdmUgJiYgY3Vyc29yLnBvc2l0aW9uIDwgYmxvYi5sZW5ndGgpIHsKICAgICAgICBjdXJzb3IuaW5jcmVtZW50UG9zaXRpb24oMSk7CiAgICAgICAgbGV0IGNvbnN1bWUgPSAzMTsKICAgICAgICBpZiAoYmxvYi5sZW5ndGggLSBjdXJzb3IucG9zaXRpb24gPCAzMSkKICAgICAgICAgIGNvbnN1bWUgPSBibG9iLmxlbmd0aCAtIGN1cnNvci5wb3NpdGlvbjsKICAgICAgICBmb3IgKGNvbnN0IF8gaW4gQXJyYXkuZnJvbSh7IGxlbmd0aDogY29uc3VtZSB9KSkgewogICAgICAgICAgY29uc3QgYnl0ZSA9IGN1cnNvci5yZWFkQnl0ZSgpOwogICAgICAgICAgY29uc3QgaXNUZXJtaW5hdG9yID0gYnl0ZSA9PT0gMTI4ICYmICFjdXJzb3IuaW5zcGVjdEJ5dGVzKGN1cnNvci5yZW1haW5pbmcpLmluY2x1ZGVzKDEyOCk7CiAgICAgICAgICBpZiAoaXNUZXJtaW5hdG9yKSB7CiAgICAgICAgICAgIGFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGRhdGEucHVzaEJ5dGUoYnl0ZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBjb25zdCB0cmltbWVkRGF0YSA9IGRhdGEuYnl0ZXMuc2xpY2UoMCwgZGF0YS5wb3NpdGlvbik7CiAgICByZXR1cm4gdG8gPT09ICJoZXgiID8gYnl0ZXNUb0hleCh0cmltbWVkRGF0YSkgOiB0cmltbWVkRGF0YTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMva3pnL2RlZmluZUt6Zy5qcwogIGZ1bmN0aW9uIGRlZmluZUt6Zyh7IGJsb2JUb0t6Z0NvbW1pdG1lbnQsIGNvbXB1dGVCbG9iS3pnUHJvb2YgfSkgewogICAgcmV0dXJuIHsKICAgICAgYmxvYlRvS3pnQ29tbWl0bWVudCwKICAgICAgY29tcHV0ZUJsb2JLemdQcm9vZgogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMva3pnL3NldHVwS3pnLmpzCiAgZnVuY3Rpb24gc2V0dXBLemcocGFyYW1ldGVycywgcGF0aCkgewogICAgdHJ5IHsKICAgICAgcGFyYW1ldGVycy5sb2FkVHJ1c3RlZFNldHVwKHBhdGgpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBjb25zdCBlcnJvciA9IGU7CiAgICAgIGlmICghZXJyb3IubWVzc2FnZS5pbmNsdWRlcygidHJ1c3RlZCBzZXR1cCBpcyBhbHJlYWR5IGxvYWRlZCIpKQogICAgICAgIHRocm93IGVycm9yOwogICAgfQogICAgcmV0dXJuIGRlZmluZUt6ZyhwYXJhbWV0ZXJzKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vaW5kZXguanMKICBpbml0X2NvbmNhdCgpOwogIGluaXRfZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoKTsKICBpbml0X2Zvcm1hdEV0aGVyKCk7CiAgaW5pdF9mb3JtYXRHd2VpKCk7CiAgaW5pdF9mb3JtYXRVbml0cygpOwogIGluaXRfZnJvbUhleCgpOwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfdG9FdmVudFNlbGVjdG9yKCk7CiAgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IoKTsKICBpbml0X2lzQWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzRXF1YWwoKTsKICBpbml0X2lzSGV4KCk7CiAgaW5pdF9rZWNjYWsyNTYoKTsKICBpbml0X3BhZCgpOwogIGluaXRfc2l6ZSgpOwogIGluaXRfc2xpY2UoKTsKICBpbml0X3N0cmluZ2lmeSgpOwogIGluaXRfdHJpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9pbmRleC5qcwogIHZhciBjaGFpbnNfZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KGNoYWluc19leHBvcnRzLCB7CiAgICBhYnN0cmFjdFRlc3RuZXQ6ICgpID0+IGFic3RyYWN0VGVzdG5ldCwKICAgIGFjYWxhOiAoKSA9PiBhY2FsYSwKICAgIGFuY2llbnQ4OiAoKSA9PiBhbmNpZW50OCwKICAgIGFuY2llbnQ4U2Vwb2xpYTogKCkgPT4gYW5jaWVudDhTZXBvbGlhLAogICAgYW52aWw6ICgpID0+IGFudmlsLAogICAgYXBleFRlc3RuZXQ6ICgpID0+IGFwZXhUZXN0bmV0LAogICAgYXJiaXRydW06ICgpID0+IGFyYml0cnVtLAogICAgYXJiaXRydW1Hb2VybGk6ICgpID0+IGFyYml0cnVtR29lcmxpLAogICAgYXJiaXRydW1Ob3ZhOiAoKSA9PiBhcmJpdHJ1bU5vdmEsCiAgICBhcmJpdHJ1bVNlcG9saWE6ICgpID0+IGFyYml0cnVtU2Vwb2xpYSwKICAgIGFyZW9uTmV0d29yazogKCkgPT4gYXJlb25OZXR3b3JrLAogICAgYXJlb25OZXR3b3JrVGVzdG5ldDogKCkgPT4gYXJlb25OZXR3b3JrVGVzdG5ldCwKICAgIGFydGVsYVRlc3RuZXQ6ICgpID0+IGFydGVsYVRlc3RuZXQsCiAgICBhc3NldENoYWluVGVzdG5ldDogKCkgPT4gYXNzZXRDaGFpblRlc3RuZXQsCiAgICBhc3RhcjogKCkgPT4gYXN0YXIsCiAgICBhc3RhclprRVZNOiAoKSA9PiBhc3RhclprRVZNLAogICAgYXN0YXJaa3lvdG86ICgpID0+IGFzdGFyWmt5b3RvLAogICAgYXRsZXRhT2x5bXBpYTogKCkgPT4gYXRsZXRhT2x5bXBpYSwKICAgIGF1cm9yYTogKCkgPT4gYXVyb3JhLAogICAgYXVyb3JhVGVzdG5ldDogKCkgPT4gYXVyb3JhVGVzdG5ldCwKICAgIGF1cm9yaWE6ICgpID0+IGF1cm9yaWEsCiAgICBhdmFsYW5jaGU6ICgpID0+IGF2YWxhbmNoZSwKICAgIGF2YWxhbmNoZUZ1amk6ICgpID0+IGF2YWxhbmNoZUZ1amksCiAgICBiMzogKCkgPT4gYjMsCiAgICBiM1NlcG9saWE6ICgpID0+IGIzU2Vwb2xpYSwKICAgIGJhaGFtdXQ6ICgpID0+IGJhaGFtdXQsCiAgICBiYXNlOiAoKSA9PiBiYXNlLAogICAgYmFzZUdvZXJsaTogKCkgPT4gYmFzZUdvZXJsaSwKICAgIGJhc2VTZXBvbGlhOiAoKSA9PiBiYXNlU2Vwb2xpYSwKICAgIGJlYW06ICgpID0+IGJlYW0sCiAgICBiZWFtVGVzdG5ldDogKCkgPT4gYmVhbVRlc3RuZXQsCiAgICBiZWFyTmV0d29ya0NoYWluTWFpbm5ldDogKCkgPT4gYmVhck5ldHdvcmtDaGFpbk1haW5uZXQsCiAgICBiZWFyTmV0d29ya0NoYWluVGVzdG5ldDogKCkgPT4gYmVhck5ldHdvcmtDaGFpblRlc3RuZXQsCiAgICBiZXJhY2hhaW5UZXN0bmV0OiAoKSA9PiBiZXJhY2hhaW5UZXN0bmV0LAogICAgYmVyYWNoYWluVGVzdG5ldGJBcnRpbzogKCkgPT4gYmVyYWNoYWluVGVzdG5ldGJBcnRpbywKICAgIGJldm1NYWlubmV0OiAoKSA9PiBiZXZtTWFpbm5ldCwKICAgIGJpdFRvcnJlbnQ6ICgpID0+IGJpdFRvcnJlbnQsCiAgICBiaXRUb3JyZW50VGVzdG5ldDogKCkgPT4gYml0VG9ycmVudFRlc3RuZXQsCiAgICBiaXRrdWI6ICgpID0+IGJpdGt1YiwKICAgIGJpdGt1YlRlc3RuZXQ6ICgpID0+IGJpdGt1YlRlc3RuZXQsCiAgICBibGFzdDogKCkgPT4gYmxhc3QsCiAgICBibGFzdFNlcG9saWE6ICgpID0+IGJsYXN0U2Vwb2xpYSwKICAgIGJvYjogKCkgPT4gYm9iLAogICAgYm9iU2Vwb2xpYTogKCkgPT4gYm9iU2Vwb2xpYSwKICAgIGJvYmE6ICgpID0+IGJvYmEsCiAgICBib2JhU2Vwb2xpYTogKCkgPT4gYm9iYVNlcG9saWEsCiAgICBicm9ub3M6ICgpID0+IGJyb25vcywKICAgIGJyb25vc1Rlc3RuZXQ6ICgpID0+IGJyb25vc1Rlc3RuZXQsCiAgICBic2M6ICgpID0+IGJzYywKICAgIGJzY0dyZWVuZmllbGQ6ICgpID0+IGJzY0dyZWVuZmllbGQsCiAgICBic2NUZXN0bmV0OiAoKSA9PiBic2NUZXN0bmV0LAogICAgYnRyOiAoKSA9PiBidHIsCiAgICBidHJUZXN0bmV0OiAoKSA9PiBidHJUZXN0bmV0LAogICAgYnhuOiAoKSA9PiBieG4sCiAgICBieG5UZXN0bmV0OiAoKSA9PiBieG5UZXN0bmV0LAogICAgY2FudG86ICgpID0+IGNhbnRvLAogICAgY2VsbzogKCkgPT4gY2VsbywKICAgIGNlbG9BbGZham9yZXM6ICgpID0+IGNlbG9BbGZham9yZXMsCiAgICBjaGlsaXo6ICgpID0+IGNoaWxpeiwKICAgIGNoaXBzOiAoKSA9PiBjaGlwcywKICAgIGNsYXNzaWM6ICgpID0+IGNsYXNzaWMsCiAgICBjb25mbHV4RVNwYWNlOiAoKSA9PiBjb25mbHV4RVNwYWNlLAogICAgY29uZmx1eEVTcGFjZVRlc3RuZXQ6ICgpID0+IGNvbmZsdXhFU3BhY2VUZXN0bmV0LAogICAgY29yZURhbzogKCkgPT4gY29yZURhbywKICAgIGNyYWI6ICgpID0+IGNyYWIsCiAgICBjcm9ub3M6ICgpID0+IGNyb25vcywKICAgIGNyb25vc1Rlc3RuZXQ6ICgpID0+IGNyb25vc1Rlc3RuZXQsCiAgICBjcm9ub3N6a0VWTTogKCkgPT4gY3Jvbm9zemtFVk0sCiAgICBjcm9ub3N6a0VWTVRlc3RuZXQ6ICgpID0+IGNyb25vc3prRVZNVGVzdG5ldCwKICAgIGNyb3NzYmVsbDogKCkgPT4gY3Jvc3NiZWxsLAogICAgY3VydGlzOiAoKSA9PiBjdXJ0aXMsCiAgICBjeWJlcjogKCkgPT4gY3liZXIsCiAgICBjeWJlclRlc3RuZXQ6ICgpID0+IGN5YmVyVGVzdG5ldCwKICAgIGRhcndpbmlhOiAoKSA9PiBkYXJ3aW5pYSwKICAgIGRjaGFpbjogKCkgPT4gZGNoYWluLAogICAgZGNoYWluVGVzdG5ldDogKCkgPT4gZGNoYWluVGVzdG5ldCwKICAgIGRlZmljaGFpbkV2bTogKCkgPT4gZGVmaWNoYWluRXZtLAogICAgZGVmaWNoYWluRXZtVGVzdG5ldDogKCkgPT4gZGVmaWNoYWluRXZtVGVzdG5ldCwKICAgIGRlZ2VuOiAoKSA9PiBkZWdlbiwKICAgIGRmazogKCkgPT4gZGZrLAogICAgZG9kb2NoYWluVGVzdG5ldDogKCkgPT4gZG9kb2NoYWluVGVzdG5ldCwKICAgIGRvZ2VjaGFpbjogKCkgPT4gZG9nZWNoYWluLAogICAgZHJleWVyeE1haW5uZXQ6ICgpID0+IGRyZXllcnhNYWlubmV0LAogICAgZHJleWVyeFRlc3RuZXQ6ICgpID0+IGRyZXllcnhUZXN0bmV0LAogICAgZWRnZWxlc3M6ICgpID0+IGVkZ2VsZXNzLAogICAgZWRnZWxlc3NUZXN0bmV0OiAoKSA9PiBlZGdlbGVzc1Rlc3RuZXQsCiAgICBlZGdld2FyZTogKCkgPT4gZWRnZXdhcmUsCiAgICBlZGdld2FyZVRlc3RuZXQ6ICgpID0+IGVkZ2V3YXJlVGVzdG5ldCwKICAgIGVrdGE6ICgpID0+IGVrdGEsCiAgICBla3RhVGVzdG5ldDogKCkgPT4gZWt0YVRlc3RuZXQsCiAgICBlb246ICgpID0+IGVvbiwKICAgIGVvczogKCkgPT4gZW9zLAogICAgZW9zVGVzdG5ldDogKCkgPT4gZW9zVGVzdG5ldCwKICAgIGV0aGVybGluazogKCkgPT4gZXRoZXJsaW5rLAogICAgZXRoZXJsaW5rVGVzdG5ldDogKCkgPT4gZXRoZXJsaW5rVGVzdG5ldCwKICAgIGV2bW9zOiAoKSA9PiBldm1vcywKICAgIGV2bW9zVGVzdG5ldDogKCkgPT4gZXZtb3NUZXN0bmV0LAogICAgZmFudG9tOiAoKSA9PiBmYW50b20sCiAgICBmYW50b21Tb25pY1Rlc3RuZXQ6ICgpID0+IGZhbnRvbVNvbmljVGVzdG5ldCwKICAgIGZhbnRvbVRlc3RuZXQ6ICgpID0+IGZhbnRvbVRlc3RuZXQsCiAgICBmaWJvOiAoKSA9PiBmaWJvLAogICAgZmlsZWNvaW46ICgpID0+IGZpbGVjb2luLAogICAgZmlsZWNvaW5DYWxpYnJhdGlvbjogKCkgPT4gZmlsZWNvaW5DYWxpYnJhdGlvbiwKICAgIGZpbGVjb2luSHlwZXJzcGFjZTogKCkgPT4gZmlsZWNvaW5IeXBlcnNwYWNlLAogICAgZmxhcmU6ICgpID0+IGZsYXJlLAogICAgZmxhcmVUZXN0bmV0OiAoKSA9PiBmbGFyZVRlc3RuZXQsCiAgICBmbG93TWFpbm5ldDogKCkgPT4gZmxvd01haW5uZXQsCiAgICBmbG93UHJldmlld25ldDogKCkgPT4gZmxvd1ByZXZpZXduZXQsCiAgICBmbG93VGVzdG5ldDogKCkgPT4gZmxvd1Rlc3RuZXQsCiAgICBmb3JtYTogKCkgPT4gZm9ybWEsCiAgICBmb3VuZHJ5OiAoKSA9PiBmb3VuZHJ5LAogICAgZnJheHRhbDogKCkgPT4gZnJheHRhbCwKICAgIGZyYXh0YWxUZXN0bmV0OiAoKSA9PiBmcmF4dGFsVGVzdG5ldCwKICAgIGZ1bmtpTWFpbm5ldDogKCkgPT4gZnVua2lNYWlubmV0LAogICAgZnVua2lTZXBvbGlhOiAoKSA9PiBmdW5raVNlcG9saWEsCiAgICBmdXNlOiAoKSA9PiBmdXNlLAogICAgZnVzZVNwYXJrbmV0OiAoKSA9PiBmdXNlU3BhcmtuZXQsCiAgICBnbm9zaXM6ICgpID0+IGdub3NpcywKICAgIGdub3Npc0NoaWFkbzogKCkgPT4gZ25vc2lzQ2hpYWRvLAogICAgZ29iaTogKCkgPT4gZ29iaSwKICAgIGdvZXJsaTogKCkgPT4gZ29lcmxpLAogICAgZ3Jhdml0eTogKCkgPT4gZ3Jhdml0eSwKICAgIGhhbTogKCkgPT4gaGFtLAogICAgaGFxcU1haW5uZXQ6ICgpID0+IGhhcXFNYWlubmV0LAogICAgaGFxcVRlc3RlZGdlMjogKCkgPT4gaGFxcVRlc3RlZGdlMiwKICAgIGhhcmRoYXQ6ICgpID0+IGhhcmRoYXQsCiAgICBoYXJtb255T25lOiAoKSA9PiBoYXJtb255T25lLAogICAgaGVkZXJhOiAoKSA9PiBoZWRlcmEsCiAgICBoZWRlcmFQcmV2aWV3bmV0OiAoKSA9PiBoZWRlcmFQcmV2aWV3bmV0LAogICAgaGVkZXJhVGVzdG5ldDogKCkgPT4gaGVkZXJhVGVzdG5ldCwKICAgIGhvbGVza3k6ICgpID0+IGhvbGVza3ksCiAgICBpbW11dGFibGVaa0V2bTogKCkgPT4gaW1tdXRhYmxlWmtFdm0sCiAgICBpbW11dGFibGVaa0V2bVRlc3RuZXQ6ICgpID0+IGltbXV0YWJsZVprRXZtVGVzdG5ldCwKICAgIGluRVZNOiAoKSA9PiBpbkVWTSwKICAgIGlvdGE6ICgpID0+IGlvdGEsCiAgICBpb3RhVGVzdG5ldDogKCkgPT4gaW90YVRlc3RuZXQsCiAgICBpb3RleDogKCkgPT4gaW90ZXgsCiAgICBpb3RleFRlc3RuZXQ6ICgpID0+IGlvdGV4VGVzdG5ldCwKICAgIGpiYzogKCkgPT4gamJjLAogICAgamJjVGVzdG5ldDogKCkgPT4gamJjVGVzdG5ldCwKICAgIGtha2Fyb3RTZXBvbGlhOiAoKSA9PiBrYWthcm90U2Vwb2xpYSwKICAgIGthcnVyYTogKCkgPT4ga2FydXJhLAogICAga2F2YTogKCkgPT4ga2F2YSwKICAgIGthdmFUZXN0bmV0OiAoKSA9PiBrYXZhVGVzdG5ldCwKICAgIGtjYzogKCkgPT4ga2NjLAogICAga2xheXRuOiAoKSA9PiBrbGF5dG4sCiAgICBrbGF5dG5CYW9iYWI6ICgpID0+IGtsYXl0bkJhb2JhYiwKICAgIGtvaTogKCkgPT4ga29pLAogICAga3JvbWE6ICgpID0+IGtyb21hLAogICAga3JvbWFTZXBvbGlhOiAoKSA9PiBrcm9tYVNlcG9saWEsCiAgICBsM3g6ICgpID0+IGwzeCwKICAgIGwzeFRlc3RuZXQ6ICgpID0+IGwzeFRlc3RuZXQsCiAgICBsaWdodGxpbmtQZWdhc3VzOiAoKSA9PiBsaWdodGxpbmtQZWdhc3VzLAogICAgbGlnaHRsaW5rUGhvZW5peDogKCkgPT4gbGlnaHRsaW5rUGhvZW5peCwKICAgIGxpbmVhOiAoKSA9PiBsaW5lYSwKICAgIGxpbmVhR29lcmxpOiAoKSA9PiBsaW5lYUdvZXJsaSwKICAgIGxpbmVhU2Vwb2xpYTogKCkgPT4gbGluZWFTZXBvbGlhLAogICAgbGluZWFUZXN0bmV0OiAoKSA9PiBsaW5lYVRlc3RuZXQsCiAgICBsaXNrOiAoKSA9PiBsaXNrLAogICAgbGlza1NlcG9saWE6ICgpID0+IGxpc2tTZXBvbGlhLAogICAgbG9jYWxob3N0OiAoKSA9PiBsb2NhbGhvc3QsCiAgICBsdWtzbzogKCkgPT4gbHVrc28sCiAgICBsdWtzb1Rlc3RuZXQ6ICgpID0+IGx1a3NvVGVzdG5ldCwKICAgIGx5Y2FuOiAoKSA9PiBseWNhbiwKICAgIGx5cmE6ICgpID0+IGx5cmEsCiAgICBtYWlubmV0OiAoKSA9PiBtYWlubmV0LAogICAgbWFuZGFsYTogKCkgPT4gbWFuZGFsYSwKICAgIG1hbnRhOiAoKSA9PiBtYW50YSwKICAgIG1hbnRhU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IG1hbnRhU2Vwb2xpYVRlc3RuZXQsCiAgICBtYW50YVRlc3RuZXQ6ICgpID0+IG1hbnRhVGVzdG5ldCwKICAgIG1hbnRsZTogKCkgPT4gbWFudGxlLAogICAgbWFudGxlU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IG1hbnRsZVNlcG9saWFUZXN0bmV0LAogICAgbWFudGxlVGVzdG5ldDogKCkgPT4gbWFudGxlVGVzdG5ldCwKICAgIG1lcmxpbjogKCkgPT4gbWVybGluLAogICAgbWV0YWNoYWluOiAoKSA9PiBtZXRhY2hhaW4sCiAgICBtZXRhY2hhaW5Jc3RhbmJ1bDogKCkgPT4gbWV0YWNoYWluSXN0YW5idWwsCiAgICBtZXRhbEwyOiAoKSA9PiBtZXRhbEwyLAogICAgbWV0ZXI6ICgpID0+IG1ldGVyLAogICAgbWV0ZXJUZXN0bmV0OiAoKSA9PiBtZXRlclRlc3RuZXQsCiAgICBtZXRpczogKCkgPT4gbWV0aXMsCiAgICBtZXRpc0dvZXJsaTogKCkgPT4gbWV0aXNHb2VybGksCiAgICBtZXY6ICgpID0+IG1ldiwKICAgIG1ldlRlc3RuZXQ6ICgpID0+IG1ldlRlc3RuZXQsCiAgICBtaW50U2Vwb2xpYVRlc3RuZXQ6ICgpID0+IG1pbnRTZXBvbGlhVGVzdG5ldCwKICAgIG1vZGU6ICgpID0+IG1vZGUsCiAgICBtb2RlVGVzdG5ldDogKCkgPT4gbW9kZVRlc3RuZXQsCiAgICBtb29uYmFzZUFscGhhOiAoKSA9PiBtb29uYmFzZUFscGhhLAogICAgbW9vbmJlYW06ICgpID0+IG1vb25iZWFtLAogICAgbW9vbmJlYW1EZXY6ICgpID0+IG1vb25iZWFtRGV2LAogICAgbW9vbnJpdmVyOiAoKSA9PiBtb29ucml2ZXIsCiAgICBtb3JwaEhvbGVza3k6ICgpID0+IG1vcnBoSG9sZXNreSwKICAgIG1vcnBoU2Vwb2xpYTogKCkgPT4gbW9ycGhTZXBvbGlhLAogICAgbmF1dGlsdXM6ICgpID0+IG5hdXRpbHVzLAogICAgbmVvbkRldm5ldDogKCkgPT4gbmVvbkRldm5ldCwKICAgIG5lb25NYWlubmV0OiAoKSA9PiBuZW9uTWFpbm5ldCwKICAgIG5leGk6ICgpID0+IG5leGksCiAgICBuZXhpbGl4OiAoKSA9PiBuZXhpbGl4LAogICAgb2FzaXNUZXN0bmV0OiAoKSA9PiBvYXNpc1Rlc3RuZXQsCiAgICBvYXN5czogKCkgPT4gb2FzeXMsCiAgICBva2M6ICgpID0+IG9rYywKICAgIG9vcnRNYWlubmV0RGV2OiAoKSA9PiBvb3J0TWFpbm5ldERldiwKICAgIG9wQk5COiAoKSA9PiBvcEJOQiwKICAgIG9wQk5CVGVzdG5ldDogKCkgPT4gb3BCTkJUZXN0bmV0LAogICAgb3B0aW1pc206ICgpID0+IG9wdGltaXNtLAogICAgb3B0aW1pc21Hb2VybGk6ICgpID0+IG9wdGltaXNtR29lcmxpLAogICAgb3B0aW1pc21TZXBvbGlhOiAoKSA9PiBvcHRpbWlzbVNlcG9saWEsCiAgICBvdGltRGV2bmV0OiAoKSA9PiBvdGltRGV2bmV0LAogICAgcGFsbTogKCkgPT4gcGFsbSwKICAgIHBhbG1UZXN0bmV0OiAoKSA9PiBwYWxtVGVzdG5ldCwKICAgIHBnbjogKCkgPT4gcGduLAogICAgcGduVGVzdG5ldDogKCkgPT4gcGduVGVzdG5ldCwKICAgIHBob2VuaXg6ICgpID0+IHBob2VuaXgsCiAgICBwbGF5ZmlBbGJpcmVvOiAoKSA9PiBwbGF5ZmlBbGJpcmVvLAogICAgcGxpbmdhOiAoKSA9PiBwbGluZ2EsCiAgICBwbHVtZVRlc3RuZXQ6ICgpID0+IHBsdW1lVGVzdG5ldCwKICAgIHBvbHlnb246ICgpID0+IHBvbHlnb24sCiAgICBwb2x5Z29uQW1veTogKCkgPT4gcG9seWdvbkFtb3ksCiAgICBwb2x5Z29uTXVtYmFpOiAoKSA9PiBwb2x5Z29uTXVtYmFpLAogICAgcG9seWdvblprRXZtOiAoKSA9PiBwb2x5Z29uWmtFdm0sCiAgICBwb2x5Z29uWmtFdm1DYXJkb25hOiAoKSA9PiBwb2x5Z29uWmtFdm1DYXJkb25hLAogICAgcG9seWdvblprRXZtVGVzdG5ldDogKCkgPT4gcG9seWdvblprRXZtVGVzdG5ldCwKICAgIHB1bHNlY2hhaW46ICgpID0+IHB1bHNlY2hhaW4sCiAgICBwdWxzZWNoYWluVjQ6ICgpID0+IHB1bHNlY2hhaW5WNCwKICAgIHFNYWlubmV0OiAoKSA9PiBxTWFpbm5ldCwKICAgIHFUZXN0bmV0OiAoKSA9PiBxVGVzdG5ldCwKICAgIHJlYWw6ICgpID0+IHJlYWwsCiAgICByZWRiZWxseVRlc3RuZXQ6ICgpID0+IHJlZGJlbGx5VGVzdG5ldCwKICAgIHJlZHN0b25lOiAoKSA9PiByZWRzdG9uZSwKICAgIHJleWFOZXR3b3JrOiAoKSA9PiByZXlhTmV0d29yaywKICAgIHJvbGx1eDogKCkgPT4gcm9sbHV4LAogICAgcm9sbHV4VGVzdG5ldDogKCkgPT4gcm9sbHV4VGVzdG5ldCwKICAgIHJvbmluOiAoKSA9PiByb25pbiwKICAgIHJvb3Q6ICgpID0+IHJvb3QsCiAgICByb290UG9yY2luaTogKCkgPT4gcm9vdFBvcmNpbmksCiAgICByb290c3RvY2s6ICgpID0+IHJvb3RzdG9jaywKICAgIHJvb3RzdG9ja1Rlc3RuZXQ6ICgpID0+IHJvb3RzdG9ja1Rlc3RuZXQsCiAgICByc3MzOiAoKSA9PiByc3MzLAogICAgcnNzM1NlcG9saWE6ICgpID0+IHJzczNTZXBvbGlhLAogICAgc2FpZ29uOiAoKSA9PiBzYWlnb24sCiAgICBzYXBwaGlyZTogKCkgPT4gc2FwcGhpcmUsCiAgICBzYXBwaGlyZVRlc3RuZXQ6ICgpID0+IHNhcHBoaXJlVGVzdG5ldCwKICAgIHNhdG9zaGlWTTogKCkgPT4gc2F0b3NoaVZNLAogICAgc2F0b3NoaVZNVGVzdG5ldDogKCkgPT4gc2F0b3NoaVZNVGVzdG5ldCwKICAgIHNjcm9sbDogKCkgPT4gc2Nyb2xsLAogICAgc2Nyb2xsU2Vwb2xpYTogKCkgPT4gc2Nyb2xsU2Vwb2xpYSwKICAgIHNlaTogKCkgPT4gc2VpLAogICAgc2VpRGV2bmV0OiAoKSA9PiBzZWlEZXZuZXQsCiAgICBzZWlUZXN0bmV0OiAoKSA9PiBzZWlUZXN0bmV0LAogICAgc2Vwb2xpYTogKCkgPT4gc2Vwb2xpYSwKICAgIHNoYXBlU2Vwb2xpYTogKCkgPT4gc2hhcGVTZXBvbGlhLAogICAgc2hhcmRldW1TcGhpbng6ICgpID0+IHNoYXJkZXVtU3BoaW54LAogICAgc2hpYmFyaXVtOiAoKSA9PiBzaGliYXJpdW0sCiAgICBzaGliYXJpdW1UZXN0bmV0OiAoKSA9PiBzaGliYXJpdW1UZXN0bmV0LAogICAgc2hpbW1lcjogKCkgPT4gc2hpbW1lciwKICAgIHNoaW1tZXJUZXN0bmV0OiAoKSA9PiBzaGltbWVyVGVzdG5ldCwKICAgIHNrYWxlQmxvY2tCcmF3bGVyczogKCkgPT4gc2thbGVCbG9ja0JyYXdsZXJzLAogICAgc2thbGVDYWx5cHNvOiAoKSA9PiBza2FsZUNhbHlwc28sCiAgICBza2FsZUNhbHlwc29UZXN0bmV0OiAoKSA9PiBza2FsZUNhbHlwc29UZXN0bmV0LAogICAgc2thbGVDcnlwdG9CbGFkZXM6ICgpID0+IHNrYWxlQ3J5cHRvQmxhZGVzLAogICAgc2thbGVDcnlwdG9Db2xvc3NldW06ICgpID0+IHNrYWxlQ3J5cHRvQ29sb3NzZXVtLAogICAgc2thbGVFdXJvcGE6ICgpID0+IHNrYWxlRXVyb3BhLAogICAgc2thbGVFdXJvcGFUZXN0bmV0OiAoKSA9PiBza2FsZUV1cm9wYVRlc3RuZXQsCiAgICBza2FsZUV4b3JkZTogKCkgPT4gc2thbGVFeG9yZGUsCiAgICBza2FsZUh1bWFuUHJvdG9jb2w6ICgpID0+IHNrYWxlSHVtYW5Qcm90b2NvbCwKICAgIHNrYWxlTmVidWxhOiAoKSA9PiBza2FsZU5lYnVsYSwKICAgIHNrYWxlTmVidWxhVGVzdG5ldDogKCkgPT4gc2thbGVOZWJ1bGFUZXN0bmV0LAogICAgc2thbGVSYXpvcjogKCkgPT4gc2thbGVSYXpvciwKICAgIHNrYWxlVGl0YW46ICgpID0+IHNrYWxlVGl0YW4sCiAgICBza2FsZVRpdGFuVGVzdG5ldDogKCkgPT4gc2thbGVUaXRhblRlc3RuZXQsCiAgICBza2V0Y2hwYWQ6ICgpID0+IHNrZXRjaHBhZCwKICAgIHNvbmdiaXJkOiAoKSA9PiBzb25nYmlyZCwKICAgIHNvbmdiaXJkVGVzdG5ldDogKCkgPT4gc29uZ2JpcmRUZXN0bmV0LAogICAgc3BpY3k6ICgpID0+IHNwaWN5LAogICAgc3RyYXRpczogKCkgPT4gc3RyYXRpcywKICAgIHN5c2NvaW46ICgpID0+IHN5c2NvaW4sCiAgICBzeXNjb2luVGVzdG5ldDogKCkgPT4gc3lzY29pblRlc3RuZXQsCiAgICB0YWlrbzogKCkgPT4gdGFpa28sCiAgICB0YWlrb0hla2xhOiAoKSA9PiB0YWlrb0hla2xhLAogICAgdGFpa29Kb2xuaXI6ICgpID0+IHRhaWtvSm9sbmlyLAogICAgdGFpa29LYXRsYTogKCkgPT4gdGFpa29LYXRsYSwKICAgIHRhaWtvVGVzdG5ldFNlcG9saWE6ICgpID0+IHRhaWtvVGVzdG5ldFNlcG9saWEsCiAgICB0YXJheGE6ICgpID0+IHRhcmF4YSwKICAgIHRhcmF4YVRlc3RuZXQ6ICgpID0+IHRhcmF4YVRlc3RuZXQsCiAgICB0ZWxjb2luVGVzdG5ldDogKCkgPT4gdGVsY29pblRlc3RuZXQsCiAgICB0ZWxvczogKCkgPT4gdGVsb3MsCiAgICB0ZWxvc1Rlc3RuZXQ6ICgpID0+IHRlbG9zVGVzdG5ldCwKICAgIHRlbmV0OiAoKSA9PiB0ZW5ldCwKICAgIHRoYWlDaGFpbjogKCkgPT4gdGhhaUNoYWluLAogICAgdGh1bmRlclRlc3RuZXQ6ICgpID0+IHRodW5kZXJUZXN0bmV0LAogICAgdW5yZWFsOiAoKSA9PiB1bnJlYWwsCiAgICB2ZWNoYWluOiAoKSA9PiB2ZWNoYWluLAogICAgd2FuY2hhaW46ICgpID0+IHdhbmNoYWluLAogICAgd2FuY2hhaW5UZXN0bmV0OiAoKSA9PiB3YW5jaGFpblRlc3RuZXQsCiAgICB3ZW1peDogKCkgPT4gd2VtaXgsCiAgICB3ZW1peFRlc3RuZXQ6ICgpID0+IHdlbWl4VGVzdG5ldCwKICAgIHgxVGVzdG5ldDogKCkgPT4geExheWVyVGVzdG5ldCwKICAgIHhMYXllcjogKCkgPT4geExheWVyLAogICAgeExheWVyVGVzdG5ldDogKCkgPT4geExheWVyVGVzdG5ldCwKICAgIHhhaTogKCkgPT4geGFpLAogICAgeGFpVGVzdG5ldDogKCkgPT4geGFpVGVzdG5ldCwKICAgIHhkYzogKCkgPT4geGRjLAogICAgeGRjVGVzdG5ldDogKCkgPT4geGRjVGVzdG5ldCwKICAgIHhyU2Vwb2xpYTogKCkgPT4geHJTZXBvbGlhLAogICAgeW9vbGRvVmVyc2U6ICgpID0+IHlvb2xkb1ZlcnNlLAogICAgeW9vbGRvVmVyc2VUZXN0bmV0OiAoKSA9PiB5b29sZG9WZXJzZVRlc3RuZXQsCiAgICB6ZXRhY2hhaW46ICgpID0+IHpldGFjaGFpbiwKICAgIHpldGFjaGFpbkF0aGVuc1Rlc3RuZXQ6ICgpID0+IHpldGFjaGFpbkF0aGVuc1Rlc3RuZXQsCiAgICB6aGVqaWFuZzogKCkgPT4gemhlamlhbmcsCiAgICB6aWxsaXFhOiAoKSA9PiB6aWxsaXFhLAogICAgemlsbGlxYVRlc3RuZXQ6ICgpID0+IHppbGxpcWFUZXN0bmV0LAogICAgemlyY3VpdFRlc3RuZXQ6ICgpID0+IHppcmN1aXRUZXN0bmV0LAogICAgemtGYWlyOiAoKSA9PiB6a0ZhaXIsCiAgICB6a0ZhaXJUZXN0bmV0OiAoKSA9PiB6a0ZhaXJUZXN0bmV0LAogICAgemtMaW5rTm92YTogKCkgPT4gemtMaW5rTm92YSwKICAgIHprTGlua05vdmFTZXBvbGlhVGVzdG5ldDogKCkgPT4gemtMaW5rTm92YVNlcG9saWFUZXN0bmV0LAogICAgemtTeW5jOiAoKSA9PiB6a3N5bmMsCiAgICB6a1N5bmNJbk1lbW9yeU5vZGU6ICgpID0+IHprc3luY0luTWVtb3J5Tm9kZSwKICAgIHprU3luY0xvY2FsTm9kZTogKCkgPT4gemtzeW5jTG9jYWxOb2RlLAogICAgemtTeW5jU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IHprc3luY1NlcG9saWFUZXN0bmV0LAogICAgemtzeW5jOiAoKSA9PiB6a3N5bmMsCiAgICB6a3N5bmNJbk1lbW9yeU5vZGU6ICgpID0+IHprc3luY0luTWVtb3J5Tm9kZSwKICAgIHprc3luY0xvY2FsTm9kZTogKCkgPT4gemtzeW5jTG9jYWxOb2RlLAogICAgemtzeW5jU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IHprc3luY1NlcG9saWFUZXN0bmV0LAogICAgem9yYTogKCkgPT4gem9yYSwKICAgIHpvcmFTZXBvbGlhOiAoKSA9PiB6b3JhU2Vwb2xpYSwKICAgIHpvcmFUZXN0bmV0OiAoKSA9PiB6b3JhVGVzdG5ldAogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9mb3JtYXR0ZXJzLmpzCiAgaW5pdF9mcm9tSGV4KCk7CiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGluaXRfdHJhbnNhY3Rpb25SZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL2NvbnN0YW50cy9udW1iZXIuanMKICB2YXIgZ2FzUGVyUHViZGF0YURlZmF1bHQgPSA1MDAwMG47CiAgdmFyIG1heEJ5dGVjb2RlU2l6ZSA9IG1heFVpbnQxNiAqIDMybjsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvZm9ybWF0dGVycy5qcwogIHZhciBmb3JtYXR0ZXJzID0gewogICAgYmxvY2s6IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVCbG9jayh7CiAgICAgIGZvcm1hdChhcmdzKSB7CiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25zID0gYXJncy50cmFuc2FjdGlvbnM/Lm1hcCgodHJhbnNhY3Rpb24pID0+IHsKICAgICAgICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24gPT09ICJzdHJpbmciKQogICAgICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXR0ZXJzLnRyYW5zYWN0aW9uPy5mb3JtYXQodHJhbnNhY3Rpb24pOwogICAgICAgICAgaWYgKGZvcm1hdHRlZC50eXBlSGV4ID09PSAiMHg3MSIpCiAgICAgICAgICAgIGZvcm1hdHRlZC50eXBlID0gImVpcDcxMiI7CiAgICAgICAgICBlbHNlIGlmIChmb3JtYXR0ZWQudHlwZUhleCA9PT0gIjB4ZmYiKQogICAgICAgICAgICBmb3JtYXR0ZWQudHlwZSA9ICJwcmlvcml0eSI7CiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBsMUJhdGNoTnVtYmVyOiBhcmdzLmwxQmF0Y2hOdW1iZXIgPyBoZXhUb0JpZ0ludChhcmdzLmwxQmF0Y2hOdW1iZXIpIDogbnVsbCwKICAgICAgICAgIGwxQmF0Y2hUaW1lc3RhbXA6IGFyZ3MubDFCYXRjaFRpbWVzdGFtcCA/IGhleFRvQmlnSW50KGFyZ3MubDFCYXRjaFRpbWVzdGFtcCkgOiBudWxsLAogICAgICAgICAgdHJhbnNhY3Rpb25zCiAgICAgICAgfTsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvbjogLyogQF9fUFVSRV9fICovIGRlZmluZVRyYW5zYWN0aW9uKHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHt9OwogICAgICAgIGlmIChhcmdzLnR5cGUgPT09ICIweDcxIikKICAgICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAiZWlwNzEyIjsKICAgICAgICBlbHNlIGlmIChhcmdzLnR5cGUgPT09ICIweGZmIikKICAgICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAicHJpb3JpdHkiOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgICAgIGwxQmF0Y2hOdW1iZXI6IGFyZ3MubDFCYXRjaE51bWJlciA/IGhleFRvQmlnSW50KGFyZ3MubDFCYXRjaE51bWJlcikgOiBudWxsLAogICAgICAgICAgbDFCYXRjaFR4SW5kZXg6IGFyZ3MubDFCYXRjaFR4SW5kZXggPyBoZXhUb0JpZ0ludChhcmdzLmwxQmF0Y2hUeEluZGV4KSA6IG51bGwKICAgICAgICB9OwogICAgICB9CiAgICB9KSwKICAgIHRyYW5zYWN0aW9uUmVjZWlwdDogLyogQF9fUFVSRV9fICovIGRlZmluZVRyYW5zYWN0aW9uUmVjZWlwdCh7CiAgICAgIGZvcm1hdChhcmdzKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGwxQmF0Y2hOdW1iZXI6IGFyZ3MubDFCYXRjaE51bWJlciA/IGhleFRvQmlnSW50KGFyZ3MubDFCYXRjaE51bWJlcikgOiBudWxsLAogICAgICAgICAgbDFCYXRjaFR4SW5kZXg6IGFyZ3MubDFCYXRjaFR4SW5kZXggPyBoZXhUb0JpZ0ludChhcmdzLmwxQmF0Y2hUeEluZGV4KSA6IG51bGwsCiAgICAgICAgICBsb2dzOiBhcmdzLmxvZ3MubWFwKChsb2cpID0+IHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAuLi5mb3JtYXRMb2cobG9nKSwKICAgICAgICAgICAgICBsMUJhdGNoTnVtYmVyOiBsb2cubDFCYXRjaE51bWJlciA/IGhleFRvQmlnSW50KGxvZy5sMUJhdGNoTnVtYmVyKSA6IG51bGwsCiAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Mb2dJbmRleDogaGV4VG9OdW1iZXIobG9nLnRyYW5zYWN0aW9uTG9nSW5kZXgpLAogICAgICAgICAgICAgIGxvZ1R5cGU6IGxvZy5sb2dUeXBlCiAgICAgICAgICAgIH07CiAgICAgICAgICB9KSwKICAgICAgICAgIGwyVG9MMUxvZ3M6IGFyZ3MubDJUb0wxTG9ncy5tYXAoKGwyVG9MMUxvZykgPT4gewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIGJsb2NrTnVtYmVyOiBoZXhUb0JpZ0ludChsMlRvTDFMb2cuYmxvY2tIYXNoKSwKICAgICAgICAgICAgICBibG9ja0hhc2g6IGwyVG9MMUxvZy5ibG9ja0hhc2gsCiAgICAgICAgICAgICAgbDFCYXRjaE51bWJlcjogaGV4VG9CaWdJbnQobDJUb0wxTG9nLmwxQmF0Y2hOdW1iZXIpLAogICAgICAgICAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IGhleFRvQmlnSW50KGwyVG9MMUxvZy50cmFuc2FjdGlvbkluZGV4KSwKICAgICAgICAgICAgICBzaGFyZElkOiBoZXhUb0JpZ0ludChsMlRvTDFMb2cuc2hhcmRJZCksCiAgICAgICAgICAgICAgaXNTZXJ2aWNlOiBsMlRvTDFMb2cuaXNTZXJ2aWNlLAogICAgICAgICAgICAgIHNlbmRlcjogbDJUb0wxTG9nLnNlbmRlciwKICAgICAgICAgICAgICBrZXk6IGwyVG9MMUxvZy5rZXksCiAgICAgICAgICAgICAgdmFsdWU6IGwyVG9MMUxvZy52YWx1ZSwKICAgICAgICAgICAgICB0cmFuc2FjdGlvbkhhc2g6IGwyVG9MMUxvZy50cmFuc2FjdGlvbkhhc2gsCiAgICAgICAgICAgICAgbG9nSW5kZXg6IGhleFRvQmlnSW50KGwyVG9MMUxvZy5sb2dJbmRleCkKICAgICAgICAgICAgfTsKICAgICAgICAgIH0pCiAgICAgICAgfTsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvblJlcXVlc3Q6IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVUcmFuc2FjdGlvblJlcXVlc3QoewogICAgICBleGNsdWRlOiBbCiAgICAgICAgImN1c3RvbVNpZ25hdHVyZSIsCiAgICAgICAgImZhY3RvcnlEZXBzIiwKICAgICAgICAiZ2FzUGVyUHViZGF0YSIsCiAgICAgICAgInBheW1hc3RlciIsCiAgICAgICAgInBheW1hc3RlcklucHV0IgogICAgICBdLAogICAgICBmb3JtYXQoYXJncykgewogICAgICAgIGlmIChhcmdzLmdhc1BlclB1YmRhdGEgfHwgYXJncy5wYXltYXN0ZXIgJiYgYXJncy5wYXltYXN0ZXJJbnB1dCB8fCBhcmdzLmZhY3RvcnlEZXBzIHx8IGFyZ3MuY3VzdG9tU2lnbmF0dXJlKQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgZWlwNzEyTWV0YTogewogICAgICAgICAgICAgIC4uLmFyZ3MuZ2FzUGVyUHViZGF0YSA/IHsgZ2FzUGVyUHViZGF0YTogdG9IZXgoYXJncy5nYXNQZXJQdWJkYXRhKSB9IDogeyBnYXNQZXJQdWJkYXRhOiB0b0hleChnYXNQZXJQdWJkYXRhRGVmYXVsdCkgfSwKICAgICAgICAgICAgICAuLi5hcmdzLnBheW1hc3RlciAmJiBhcmdzLnBheW1hc3RlcklucHV0ID8gewogICAgICAgICAgICAgICAgcGF5bWFzdGVyUGFyYW1zOiB7CiAgICAgICAgICAgICAgICAgIHBheW1hc3RlcjogYXJncy5wYXltYXN0ZXIsCiAgICAgICAgICAgICAgICAgIHBheW1hc3RlcklucHV0OiBBcnJheS5mcm9tKGhleFRvQnl0ZXMoYXJncy5wYXltYXN0ZXJJbnB1dCkpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSA6IHt9LAogICAgICAgICAgICAgIC4uLmFyZ3MuZmFjdG9yeURlcHMgPyB7CiAgICAgICAgICAgICAgICBmYWN0b3J5RGVwczogYXJncy5mYWN0b3J5RGVwcy5tYXAoKGRlcCkgPT4gQXJyYXkuZnJvbShoZXhUb0J5dGVzKGRlcCkpKQogICAgICAgICAgICAgIH0gOiB7fSwKICAgICAgICAgICAgICAuLi5hcmdzLmN1c3RvbVNpZ25hdHVyZSA/IHsKICAgICAgICAgICAgICAgIGN1c3RvbVNpZ25hdHVyZTogQXJyYXkuZnJvbShoZXhUb0J5dGVzKGFyZ3MuY3VzdG9tU2lnbmF0dXJlKSkKICAgICAgICAgICAgICB9IDoge30KICAgICAgICAgICAgfSwKICAgICAgICAgICAgdHlwZTogIjB4NzEiCiAgICAgICAgICB9OwogICAgICAgIHJldHVybiB7fTsKICAgICAgfQogICAgfSkKICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9zZXJpYWxpemVycy5qcwogIGluaXRfY29uY2F0KCk7CiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy91dGlscy9hc3NlcnRFaXA3MTJUcmFuc2FjdGlvbi5qcwogIGluaXRfYWRkcmVzcygpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY2hhaW4oKTsKICBpbml0X2lzQWRkcmVzcygpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9lcnJvcnMvdHJhbnNhY3Rpb24uanMKICBpbml0X2Jhc2UoKTsKICB2YXIgSW52YWxpZEVpcDcxMlRyYW5zYWN0aW9uRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKFsKICAgICAgICAiVHJhbnNhY3Rpb24gaXMgbm90IGFuIEVJUDcxMiB0cmFuc2FjdGlvbi4iLAogICAgICAgICIiLAogICAgICAgICJUcmFuc2FjdGlvbiBtdXN0OiIsCiAgICAgICAgJyAgLSBpbmNsdWRlIGB0eXBlOiAiZWlwNzEyImAnLAogICAgICAgICIgIC0gaW5jbHVkZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogYGN1c3RvbVNpZ25hdHVyZWAsIGBwYXltYXN0ZXJgLCBgcGF5bWFzdGVySW5wdXRgLCBgZ2FzUGVyUHViZGF0YWAsIGBmYWN0b3J5RGVwc2AiCiAgICAgIF0uam9pbigiXG4iKSwgeyBuYW1lOiAiSW52YWxpZEVpcDcxMlRyYW5zYWN0aW9uRXJyb3IiIH0pOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL3V0aWxzL2lzRWlwNzEyVHJhbnNhY3Rpb24uanMKICBmdW5jdGlvbiBpc0VJUDcxMlRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKSB7CiAgICBpZiAodHJhbnNhY3Rpb24udHlwZSA9PT0gImVpcDcxMiIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCJjdXN0b21TaWduYXR1cmUiIGluIHRyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uLmN1c3RvbVNpZ25hdHVyZSB8fCAicGF5bWFzdGVyIiBpbiB0cmFuc2FjdGlvbiAmJiB0cmFuc2FjdGlvbi5wYXltYXN0ZXIgfHwgInBheW1hc3RlcklucHV0IiBpbiB0cmFuc2FjdGlvbiAmJiB0cmFuc2FjdGlvbi5wYXltYXN0ZXJJbnB1dCB8fCAiZ2FzUGVyUHViZGF0YSIgaW4gdHJhbnNhY3Rpb24gJiYgdHlwZW9mIHRyYW5zYWN0aW9uLmdhc1BlclB1YmRhdGEgPT09ICJiaWdpbnQiIHx8ICJmYWN0b3J5RGVwcyIgaW4gdHJhbnNhY3Rpb24gJiYgdHJhbnNhY3Rpb24uZmFjdG9yeURlcHMpCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvdXRpbHMvYXNzZXJ0RWlwNzEyVHJhbnNhY3Rpb24uanMKICBmdW5jdGlvbiBhc3NlcnRFaXA3MTJUcmFuc2FjdGlvbih0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCB0bywgZnJvbSwgcGF5bWFzdGVyLCBwYXltYXN0ZXJJbnB1dCB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoIWlzRUlQNzEyVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEVpcDcxMlRyYW5zYWN0aW9uRXJyb3IoKTsKICAgIGlmICghY2hhaW5JZCB8fCBjaGFpbklkIDw9IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhaW5JZEVycm9yKHsgY2hhaW5JZCB9KTsKICAgIGlmICh0byAmJiAhaXNBZGRyZXNzKHRvKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB0byB9KTsKICAgIGlmIChmcm9tICYmICFpc0FkZHJlc3MoZnJvbSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogZnJvbSB9KTsKICAgIGlmIChwYXltYXN0ZXIgJiYgIWlzQWRkcmVzcyhwYXltYXN0ZXIpKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IHBheW1hc3RlciB9KTsKICAgIGlmIChwYXltYXN0ZXIgJiYgIXBheW1hc3RlcklucHV0KSB7CiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgcGF5bWFzdGVySW5wdXRgIG11c3QgYmUgcHJvdmlkZWQgd2hlbiBgcGF5bWFzdGVyYCBpcyBkZWZpbmVkIik7CiAgICB9CiAgICBpZiAoIXBheW1hc3RlciAmJiBwYXltYXN0ZXJJbnB1dCkgewogICAgICB0aHJvdyBuZXcgQmFzZUVycm9yMigiYHBheW1hc3RlcmAgbXVzdCBiZSBwcm92aWRlZCB3aGVuIGBwYXltYXN0ZXJJbnB1dGAgaXMgZGVmaW5lZCIpOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvc2VyaWFsaXplcnMuanMKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbjIodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgaWYgKGlzRUlQNzEyVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVA3MTIodHJhbnNhY3Rpb24pOwogICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogIH0KICB2YXIgc2VyaWFsaXplcnMgPSB7CiAgICB0cmFuc2FjdGlvbjogc2VyaWFsaXplVHJhbnNhY3Rpb24yCiAgfTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDcxMih0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBnYXMsIG5vbmNlLCB0bywgZnJvbSwgdmFsdWUsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIGN1c3RvbVNpZ25hdHVyZSwgZmFjdG9yeURlcHMsIHBheW1hc3RlciwgcGF5bWFzdGVySW5wdXQsIGdhc1BlclB1YmRhdGEsIGRhdGEgfSA9IHRyYW5zYWN0aW9uOwogICAgYXNzZXJ0RWlwNzEyVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICBub25jZSA/IHRvSGV4KG5vbmNlKSA6ICIweCIsCiAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzID8gdG9IZXgobWF4UHJpb3JpdHlGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgbWF4RmVlUGVyR2FzID8gdG9IZXgobWF4RmVlUGVyR2FzKSA6ICIweCIsCiAgICAgIGdhcyA/IHRvSGV4KGdhcykgOiAiMHgiLAogICAgICB0byA/PyAiMHgiLAogICAgICB2YWx1ZSA/IHRvSGV4KHZhbHVlKSA6ICIweCIsCiAgICAgIGRhdGEgPz8gIjB4MCIsCiAgICAgIHRvSGV4KGNoYWluSWQpLAogICAgICB0b0hleCgiIiksCiAgICAgIHRvSGV4KCIiKSwKICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgIGZyb20gPz8gIjB4IiwKICAgICAgZ2FzUGVyUHViZGF0YSA/IHRvSGV4KGdhc1BlclB1YmRhdGEpIDogdG9IZXgoZ2FzUGVyUHViZGF0YURlZmF1bHQpLAogICAgICBmYWN0b3J5RGVwcyA/PyBbXSwKICAgICAgY3VzdG9tU2lnbmF0dXJlID8/ICIweCIsCiAgICAgIC8vIEVJUDcxMiBzaWduYXR1cmUKICAgICAgcGF5bWFzdGVyICYmIHBheW1hc3RlcklucHV0ID8gW3BheW1hc3RlciwgcGF5bWFzdGVySW5wdXRdIDogW10KICAgIF07CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4NzEiLAogICAgICB0b1JscChzZXJpYWxpemVkVHJhbnNhY3Rpb24pCiAgICBdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL3V0aWxzL2dldEVpcDcxMkRvbWFpbi5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvdXRpbHMvaGFzaEJ5dGVjb2RlLmpzCiAgaW5pdF9wYWQoKTsKICBpbml0X3RvQnl0ZXMoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvZXJyb3JzL2J5dGVjb2RlLmpzCiAgaW5pdF9iYXNlKCk7CiAgdmFyIEJ5dGVjb2RlTGVuZ3RoRXhjZWVkc01heFNpemVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGdpdmVuTGVuZ3RoLCBtYXhCeXRlY29kZVNpemU6IG1heEJ5dGVjb2RlU2l6ZTIgfSkgewogICAgICBzdXBlcihgQnl0ZWNvZGUgY2Fubm90IGJlIGxvbmdlciB0aGFuICR7bWF4Qnl0ZWNvZGVTaXplMn0gYnl0ZXMuIEdpdmVuIGxlbmd0aDogJHtnaXZlbkxlbmd0aH1gLCB7IG5hbWU6ICJCeXRlY29kZUxlbmd0aEV4Y2VlZHNNYXhTaXplRXJyb3IiIH0pOwogICAgfQogIH07CiAgdmFyIEJ5dGVjb2RlTGVuZ3RoSW5Xb3Jkc011c3RCZU9kZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgZ2l2ZW5MZW5ndGhJbldvcmRzIH0pIHsKICAgICAgc3VwZXIoYEJ5dGVjb2RlIGxlbmd0aCBpbiAzMi1ieXRlIHdvcmRzIG11c3QgYmUgb2RkLiBHaXZlbiBsZW5ndGggaW4gd29yZHM6ICR7Z2l2ZW5MZW5ndGhJbldvcmRzfWAsIHsgbmFtZTogIkJ5dGVjb2RlTGVuZ3RoSW5Xb3Jkc011c3RCZU9kZEVycm9yIiB9KTsKICAgIH0KICB9OwogIHZhciBCeXRlY29kZUxlbmd0aE11c3RCZURpdmlzaWJsZUJ5MzJFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGdpdmVuTGVuZ3RoIH0pIHsKICAgICAgc3VwZXIoYFRoZSBieXRlY29kZSBsZW5ndGggaW4gYnl0ZXMgbXVzdCBiZSBkaXZpc2libGUgYnkgMzIuIEdpdmVuIGxlbmd0aDogJHtnaXZlbkxlbmd0aH1gLCB7IG5hbWU6ICJCeXRlY29kZUxlbmd0aE11c3RCZURpdmlzaWJsZUJ5MzJFcnJvciIgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvdXRpbHMvaGFzaEJ5dGVjb2RlLmpzCiAgZnVuY3Rpb24gaGFzaEJ5dGVjb2RlKGJ5dGVjb2RlKSB7CiAgICBjb25zdCBieXRlY29kZUJ5dGVzID0gdG9CeXRlcyhieXRlY29kZSk7CiAgICBpZiAoYnl0ZWNvZGVCeXRlcy5sZW5ndGggJSAzMiAhPT0gMCkKICAgICAgdGhyb3cgbmV3IEJ5dGVjb2RlTGVuZ3RoTXVzdEJlRGl2aXNpYmxlQnkzMkVycm9yKHsKICAgICAgICBnaXZlbkxlbmd0aDogYnl0ZWNvZGVCeXRlcy5sZW5ndGgKICAgICAgfSk7CiAgICBpZiAoYnl0ZWNvZGVCeXRlcy5sZW5ndGggPiBtYXhCeXRlY29kZVNpemUpCiAgICAgIHRocm93IG5ldyBCeXRlY29kZUxlbmd0aEV4Y2VlZHNNYXhTaXplRXJyb3IoewogICAgICAgIGdpdmVuTGVuZ3RoOiBieXRlY29kZUJ5dGVzLmxlbmd0aCwKICAgICAgICBtYXhCeXRlY29kZVNpemUKICAgICAgfSk7CiAgICBjb25zdCBoYXNoU3RyID0gc2hhMjU2MihieXRlY29kZUJ5dGVzKTsKICAgIGNvbnN0IGhhc2gzID0gdG9CeXRlcyhoYXNoU3RyKTsKICAgIGNvbnN0IGJ5dGVjb2RlTGVuZ3RoSW5Xb3JkcyA9IGJ5dGVjb2RlQnl0ZXMubGVuZ3RoIC8gMzI7CiAgICBpZiAoYnl0ZWNvZGVMZW5ndGhJbldvcmRzICUgMiA9PT0gMCkgewogICAgICB0aHJvdyBuZXcgQnl0ZWNvZGVMZW5ndGhJbldvcmRzTXVzdEJlT2RkRXJyb3IoewogICAgICAgIGdpdmVuTGVuZ3RoSW5Xb3JkczogYnl0ZWNvZGVMZW5ndGhJbldvcmRzCiAgICAgIH0pOwogICAgfQogICAgY29uc3QgYnl0ZWNvZGVMZW5ndGggPSB0b0J5dGVzKGJ5dGVjb2RlTGVuZ3RoSW5Xb3Jkcyk7CiAgICBjb25zdCBieXRlY29kZUxlbmd0aFBhZGRlZCA9IHBhZChieXRlY29kZUxlbmd0aCwgeyBzaXplOiAyIH0pOwogICAgY29uc3QgY29kZUhhc2hWZXJzaW9uID0gbmV3IFVpbnQ4QXJyYXkoWzEsIDBdKTsKICAgIGhhc2gzLnNldChjb2RlSGFzaFZlcnNpb24sIDApOwogICAgaGFzaDMuc2V0KGJ5dGVjb2RlTGVuZ3RoUGFkZGVkLCAyKTsKICAgIHJldHVybiBoYXNoMzsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL3V0aWxzL2dldEVpcDcxMkRvbWFpbi5qcwogIHZhciBnZXRFaXA3MTJEb21haW4yID0gKHRyYW5zYWN0aW9uKSA9PiB7CiAgICBhc3NlcnRFaXA3MTJUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7CiAgICBjb25zdCBtZXNzYWdlID0gdHJhbnNhY3Rpb25Ub01lc3NhZ2UodHJhbnNhY3Rpb24pOwogICAgcmV0dXJuIHsKICAgICAgZG9tYWluOiB7CiAgICAgICAgbmFtZTogInprU3luYyIsCiAgICAgICAgdmVyc2lvbjogIjIiLAogICAgICAgIGNoYWluSWQ6IHRyYW5zYWN0aW9uLmNoYWluSWQKICAgICAgfSwKICAgICAgdHlwZXM6IHsKICAgICAgICBUcmFuc2FjdGlvbjogWwogICAgICAgICAgeyBuYW1lOiAidHhUeXBlIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgICB7IG5hbWU6ICJmcm9tIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgICB7IG5hbWU6ICJ0byIsIHR5cGU6ICJ1aW50MjU2IiB9LAogICAgICAgICAgeyBuYW1lOiAiZ2FzTGltaXQiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogImdhc1BlclB1YmRhdGFCeXRlTGltaXQiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogIm1heEZlZVBlckdhcyIsIHR5cGU6ICJ1aW50MjU2IiB9LAogICAgICAgICAgeyBuYW1lOiAibWF4UHJpb3JpdHlGZWVQZXJHYXMiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogInBheW1hc3RlciIsIHR5cGU6ICJ1aW50MjU2IiB9LAogICAgICAgICAgeyBuYW1lOiAibm9uY2UiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogInZhbHVlIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgICB7IG5hbWU6ICJkYXRhIiwgdHlwZTogImJ5dGVzIiB9LAogICAgICAgICAgeyBuYW1lOiAiZmFjdG9yeURlcHMiLCB0eXBlOiAiYnl0ZXMzMltdIiB9LAogICAgICAgICAgeyBuYW1lOiAicGF5bWFzdGVySW5wdXQiLCB0eXBlOiAiYnl0ZXMiIH0KICAgICAgICBdCiAgICAgIH0sCiAgICAgIHByaW1hcnlUeXBlOiAiVHJhbnNhY3Rpb24iLAogICAgICBtZXNzYWdlCiAgICB9OwogIH07CiAgZnVuY3Rpb24gdHJhbnNhY3Rpb25Ub01lc3NhZ2UodHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHsgZ2FzLCBub25jZSwgdG8sIGZyb20sIHZhbHVlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBmYWN0b3J5RGVwcywgcGF5bWFzdGVyLCBwYXltYXN0ZXJJbnB1dCwgZ2FzUGVyUHViZGF0YSwgZGF0YSB9ID0gdHJhbnNhY3Rpb247CiAgICByZXR1cm4gewogICAgICB0eFR5cGU6IDExM24sCiAgICAgIGZyb206IEJpZ0ludChmcm9tKSwKICAgICAgdG86IHRvID8gQmlnSW50KHRvKSA6IDBuLAogICAgICBnYXNMaW1pdDogZ2FzID8/IDBuLAogICAgICBnYXNQZXJQdWJkYXRhQnl0ZUxpbWl0OiBnYXNQZXJQdWJkYXRhID8/IGdhc1BlclB1YmRhdGFEZWZhdWx0LAogICAgICBtYXhGZWVQZXJHYXM6IG1heEZlZVBlckdhcyA/PyAwbiwKICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IG1heFByaW9yaXR5RmVlUGVyR2FzID8/IDBuLAogICAgICBwYXltYXN0ZXI6IHBheW1hc3RlciA/IEJpZ0ludChwYXltYXN0ZXIpIDogMG4sCiAgICAgIG5vbmNlOiBub25jZSA/IEJpZ0ludChub25jZSkgOiAwbiwKICAgICAgdmFsdWU6IHZhbHVlID8/IDBuLAogICAgICBkYXRhOiBkYXRhID8gZGF0YSA6ICIweDAiLAogICAgICBmYWN0b3J5RGVwczogZmFjdG9yeURlcHM/Lm1hcCgoZGVwKSA9PiB0b0hleChoYXNoQnl0ZWNvZGUoZGVwKSkpID8/IFtdLAogICAgICBwYXltYXN0ZXJJbnB1dDogcGF5bWFzdGVySW5wdXQgPyBwYXltYXN0ZXJJbnB1dCA6ICIweCIKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9jaGFpbkNvbmZpZy5qcwogIHZhciBjaGFpbkNvbmZpZyA9IHsKICAgIGZvcm1hdHRlcnMsCiAgICBzZXJpYWxpemVycywKICAgIGN1c3RvbTogewogICAgICBnZXRFaXA3MTJEb21haW46IGdldEVpcDcxMkRvbWFpbjIKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hYnN0cmFjdFRlc3RuZXQuanMKICB2YXIgYWJzdHJhY3RUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnLAogICAgaWQ6IDExMTI0LAogICAgbmFtZTogIkFic3RyYWN0IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRVRIIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLnRlc3RuZXQuYWJzLnh5eiJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFic3RyYWN0IEJsb2NrIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQuYWJzLnh5eiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYWNhbGEuanMKICB2YXIgYWNhbGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDc4NywKICAgIG5hbWU6ICJBY2FsYSIsCiAgICBuZXR3b3JrOiAiYWNhbGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkFjYWxhIiwKICAgICAgc3ltYm9sOiAiQUNBIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZXRoLXJwYy1hY2FsYS5hY2EtYXBpLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXRoLXJwYy1hY2FsYS5hY2EtYXBpLm5ldHdvcmsiXQogICAgICB9LAogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC1ycGMtYWNhbGEuYWNhLWFwaS5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2V0aC1ycGMtYWNhbGEuYWNhLWFwaS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQWNhbGEgQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmFjYWxhLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5hY2FsYS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vb3Atc3RhY2svY29udHJhY3RzLmpzCiAgdmFyIGNvbnRyYWN0cyA9IHsKICAgIGdhc1ByaWNlT3JhY2xlOiB7IGFkZHJlc3M6ICIweDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYiIH0sCiAgICBsMUJsb2NrOiB7IGFkZHJlc3M6ICIweDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUiIH0sCiAgICBsMkNyb3NzRG9tYWluTWVzc2VuZ2VyOiB7CiAgICAgIGFkZHJlc3M6ICIweDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDciCiAgICB9LAogICAgbDJFcmM3MjFCcmlkZ2U6IHsgYWRkcmVzczogIjB4NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNCIgfSwKICAgIGwyU3RhbmRhcmRCcmlkZ2U6IHsgYWRkcmVzczogIjB4NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCIgfSwKICAgIGwyVG9MMU1lc3NhZ2VQYXNzZXI6IHsKICAgICAgYWRkcmVzczogIjB4NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNiIKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL29wLXN0YWNrL2Zvcm1hdHRlcnMuanMKICBpbml0X2Zyb21IZXgoKTsKICB2YXIgZm9ybWF0dGVyczIgPSB7CiAgICBibG9jazogLyogQF9fUFVSRV9fICovIGRlZmluZUJsb2NrKHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbnMgPSBhcmdzLnRyYW5zYWN0aW9ucz8ubWFwKCh0cmFuc2FjdGlvbikgPT4gewogICAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbiA9PT0gInN0cmluZyIpCiAgICAgICAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKTsKICAgICAgICAgIGlmIChmb3JtYXR0ZWQudHlwZUhleCA9PT0gIjB4N2UiKSB7CiAgICAgICAgICAgIGZvcm1hdHRlZC5pc1N5c3RlbVR4ID0gdHJhbnNhY3Rpb24uaXNTeXN0ZW1UeDsKICAgICAgICAgICAgZm9ybWF0dGVkLm1pbnQgPSB0cmFuc2FjdGlvbi5taW50ID8gaGV4VG9CaWdJbnQodHJhbnNhY3Rpb24ubWludCkgOiB2b2lkIDA7CiAgICAgICAgICAgIGZvcm1hdHRlZC5zb3VyY2VIYXNoID0gdHJhbnNhY3Rpb24uc291cmNlSGFzaDsKICAgICAgICAgICAgZm9ybWF0dGVkLnR5cGUgPSAiZGVwb3NpdCI7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0cmFuc2FjdGlvbnMsCiAgICAgICAgICBzdGF0ZVJvb3Q6IGFyZ3Muc3RhdGVSb290CiAgICAgICAgfTsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvbjogLyogQF9fUFVSRV9fICovIGRlZmluZVRyYW5zYWN0aW9uKHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHt9OwogICAgICAgIGlmIChhcmdzLnR5cGUgPT09ICIweDdlIikgewogICAgICAgICAgdHJhbnNhY3Rpb24uaXNTeXN0ZW1UeCA9IGFyZ3MuaXNTeXN0ZW1UeDsKICAgICAgICAgIHRyYW5zYWN0aW9uLm1pbnQgPSBhcmdzLm1pbnQgPyBoZXhUb0JpZ0ludChhcmdzLm1pbnQpIDogdm9pZCAwOwogICAgICAgICAgdHJhbnNhY3Rpb24uc291cmNlSGFzaCA9IGFyZ3Muc291cmNlSGFzaDsKICAgICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAiZGVwb3NpdCI7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvblJlY2VpcHQ6IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVUcmFuc2FjdGlvblJlY2VpcHQoewogICAgICBmb3JtYXQoYXJncykgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBsMUdhc1ByaWNlOiBhcmdzLmwxR2FzUHJpY2UgPyBoZXhUb0JpZ0ludChhcmdzLmwxR2FzUHJpY2UpIDogbnVsbCwKICAgICAgICAgIGwxR2FzVXNlZDogYXJncy5sMUdhc1VzZWQgPyBoZXhUb0JpZ0ludChhcmdzLmwxR2FzVXNlZCkgOiBudWxsLAogICAgICAgICAgbDFGZWU6IGFyZ3MubDFGZWUgPyBoZXhUb0JpZ0ludChhcmdzLmwxRmVlKSA6IG51bGwsCiAgICAgICAgICBsMUZlZVNjYWxhcjogYXJncy5sMUZlZVNjYWxhciA/IE51bWJlcihhcmdzLmwxRmVlU2NhbGFyKSA6IG51bGwKICAgICAgICB9OwogICAgICB9CiAgICB9KQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vb3Atc3RhY2svc2VyaWFsaXplcnMuanMKICBpbml0X2FkZHJlc3MoKTsKICBpbml0X2lzQWRkcmVzcygpOwogIGluaXRfY29uY2F0KCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZVRyYW5zYWN0aW9uMyh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKSB7CiAgICBpZiAoaXNEZXBvc2l0KHRyYW5zYWN0aW9uKSkKICAgICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uRGVwb3NpdCh0cmFuc2FjdGlvbik7CiAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIHNpZ25hdHVyZSk7CiAgfQogIHZhciBzZXJpYWxpemVyczIgPSB7CiAgICB0cmFuc2FjdGlvbjogc2VyaWFsaXplVHJhbnNhY3Rpb24zCiAgfTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkRlcG9zaXQodHJhbnNhY3Rpb24pIHsKICAgIGFzc2VydFRyYW5zYWN0aW9uRGVwb3NpdCh0cmFuc2FjdGlvbik7CiAgICBjb25zdCB7IHNvdXJjZUhhc2gsIGRhdGEsIGZyb20sIGdhcywgaXNTeXN0ZW1UeCwgbWludCwgdG8sIHZhbHVlIH0gPSB0cmFuc2FjdGlvbjsKICAgIGNvbnN0IHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9IFsKICAgICAgc291cmNlSGFzaCwKICAgICAgZnJvbSwKICAgICAgdG8gPz8gIjB4IiwKICAgICAgbWludCA/IHRvSGV4KG1pbnQpIDogIjB4IiwKICAgICAgdmFsdWUgPyB0b0hleCh2YWx1ZSkgOiAiMHgiLAogICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgaXNTeXN0ZW1UeCA/ICIweDEiIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiCiAgICBdOwogICAgcmV0dXJuIGNvbmNhdEhleChbCiAgICAgICIweDdlIiwKICAgICAgdG9SbHAoc2VyaWFsaXplZFRyYW5zYWN0aW9uKQogICAgXSk7CiAgfQogIGZ1bmN0aW9uIGlzRGVwb3NpdCh0cmFuc2FjdGlvbikgewogICAgaWYgKHRyYW5zYWN0aW9uLnR5cGUgPT09ICJkZXBvc2l0IikKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAodHlwZW9mIHRyYW5zYWN0aW9uLnNvdXJjZUhhc2ggIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgZnVuY3Rpb24gYXNzZXJ0VHJhbnNhY3Rpb25EZXBvc2l0KHRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCB7IGZyb20sIHRvIH0gPSB0cmFuc2FjdGlvbjsKICAgIGlmIChmcm9tICYmICFpc0FkZHJlc3MoZnJvbSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogZnJvbSB9KTsKICAgIGlmICh0byAmJiAhaXNBZGRyZXNzKHRvKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB0byB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vb3Atc3RhY2svY2hhaW5Db25maWcuanMKICB2YXIgY2hhaW5Db25maWcyID0gewogICAgY29udHJhY3RzLAogICAgZm9ybWF0dGVyczogZm9ybWF0dGVyczIsCiAgICBzZXJpYWxpemVyczogc2VyaWFsaXplcnMyCiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYW5jaWVudDguanMKICB2YXIgc291cmNlSWQgPSAxOwogIHZhciBhbmNpZW50OCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogODg4ODg4ODg4LAogICAgbmFtZTogIkFuY2llbnQ4IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5hbmNpZW50OC5nZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFuY2llbnQ4IGV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4uYW5jaWVudDguZ2ciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2Nhbi5hbmNpZW50OC5nZy9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWRdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhCMDlEQzA4NDI4QzhiNEVGQjRmZjlDMDgyNzM4NkNERjM0Mjc3OTk2IgogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkXTogewogICAgICAgICAgYWRkcmVzczogIjB4NjM5RjJBRUNFMzk4QWE3NmIwN2U1OWVGNmFiZTJjRmUzMmJhY2I2OCIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MDcwNTcxCiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkXTogewogICAgICAgICAgYWRkcmVzczogIjB4ZDVlM2VEZjViNjgxMzVENTU5RDU3MkUyNmJGODYzRkJDMTk1MDAzMyIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MDcwNTcxCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYW5jaWVudDhTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMiA9IDExMTU1MTExOwogIHZhciBhbmNpZW50OFNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI4MTIyMDI0LAogICAgbmFtZTogIkFuY2llbnQ4IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjdjItdGVzdG5ldC5hbmNpZW50OC5nZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFuY2llbnQ4IENlbGVzdGlhIFRlc3RuZXQgZXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc2NhbnYyLXRlc3RuZXQuYW5jaWVudDguZ2ciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2NhbnYyLXRlc3RuZXQuYW5jaWVudDguZ2cvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDk0MmZENTAxN2MwRjYwNTc1OTMwRDg1NzRFYWNhMTNCRWNENmUxYkIiCiAgICAgICAgfQogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQyXTogewogICAgICAgICAgYWRkcmVzczogIjB4ZmExZDlFMjZBNmFDRDdiMjIxMTVEMjc1NzJjMTIyMUI5ODAzYzk2MCIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NzI5MDgKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyXTogewogICAgICAgICAgYWRkcmVzczogIjB4RjZCYzAxNDZkM2M3NEQ0ODMwNmU3OUFlMTM0QTI2MEU0MThDOTMzNSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NzI5MDgKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQyCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FudmlsLmpzCiAgdmFyIGFudmlsID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMTMzNywKICAgIG5hbWU6ICJBbnZpbCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHA6Ly8xMjcuMC4wLjE6ODU0NSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3czovLzEyNy4wLjAuMTo4NTQ1Il0KICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hcGV4VGVzdG5ldC5qcwogIHZhciBhcGV4VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzk5MywKICAgIG5hbWU6ICJBUEVYIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQuYXBleGxheWVyLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwLXRlc3RuZXQuYXBleGxheWVyLnh5eiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHAtdGVzdG5ldC5hcGV4bGF5ZXIueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Zjc2NDJiZTMzYTZiMThEMTZhOTk1NjU3YWRiNWE2OENEMDQzOGFFMiIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyODM3NzUKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJiaXRydW0uanMKICB2YXIgYXJiaXRydW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyMTYxLAogICAgbmFtZTogIkFyYml0cnVtIE9uZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcmIxLmFyYml0cnVtLmlvL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFyYmlzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2FyYmlzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5hcmJpc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNzY1NDcwNwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FyYml0cnVtR29lcmxpLmpzCiAgdmFyIGFyYml0cnVtR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MjE2MTMsCiAgICBuYW1lOiAiQXJiaXRydW0gR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJBcmJpdHJ1bSBHb2VybGkgRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZ29lcmxpLXJvbGx1cC5hcmJpdHJ1bS5pby9ycGMiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBcmJpc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9nb2VybGkuYXJiaXNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogODgxMTQKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJiaXRydW1Ob3ZhLmpzCiAgdmFyIGFyYml0cnVtTm92YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDIxNzAsCiAgICBuYW1lOiAiQXJiaXRydW0gTm92YSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ub3ZhLmFyYml0cnVtLmlvL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFyYmlzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL25vdmEuYXJiaXNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLW5vdmEuYXJiaXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE3NDY5NjMKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hc3NldENoYWluVGVzdG5ldC5qcwogIHZhciBhc3NldENoYWluVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDI0MjEsCiAgICBuYW1lOiAiQXNzZXRDaGFpbiBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlJlYWwgV29ybGQgQXNzZXQiLAogICAgICBzeW1ib2w6ICJSV0EiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9lbnVndS1ycGMuYXNzZXRjaGFpbi5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBc3NldCBDaGFpbiBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4tdGVzdG5ldC5hc3NldGNoYWluLm9yZyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLXRlc3RuZXQuYXNzZXRjaGFpbi5vcmcvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4OTg5RjgzMkQzNTk4OGNiNWUzZUIwMDFGYTJGZTc4OTQ2OUVDMzFFYSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNzE3NwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FzdGFyLmpzCiAgdmFyIGFzdGFyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTIsCiAgICBuYW1lOiAiQXN0YXIiLAogICAgbmV0d29yazogImFzdGFyLW1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkFzdGFyIiwKICAgICAgc3ltYm9sOiAiQVNUUiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXN0YXIuYXBpLm9uZmluYWxpdHkuaW8vcHVibGljIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXN0YXIgU3Vic2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hc3Rhci5zdWJzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc2MTc5NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXN0YXJaa0VWTS5qcwogIHZhciBhc3RhclprRVZNID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNzc2LAogICAgbmFtZTogIkFzdGFyIHprRVZNIiwKICAgIG5ldHdvcms6ICJBc3RhclprRVZNIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zdGFydGFsZS5jb20vYXN0YXItemtldm0iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBc3RhciB6a0VWTSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hc3Rhci16a2V2bS5leHBsb3Jlci5zdGFydGFsZS5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogOTM1MjgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FzdGFyWmt5b3RvLmpzCiAgdmFyIGFzdGFyWmt5b3RvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2MDM4MzYxLAogICAgbmFtZTogIkFzdGFyIHprRVZNIFRlc3RuZXQgekt5b3RvIiwKICAgIG5ldHdvcms6ICJ6S3lvdG8iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnN0YXJ0YWxlLmNvbS96a3lvdG8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJ6S3lvdG8gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vemt5b3RvLmV4cGxvcmVyLnN0YXJ0YWxlLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxOTYxNTMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJiaXRydW1TZXBvbGlhLmpzCiAgdmFyIGFyYml0cnVtU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDIxNjE0LAogICAgbmFtZTogIkFyYml0cnVtIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkFyYml0cnVtIFNlcG9saWEgRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS1yb2xsdXAuYXJiaXRydW0uaW8vcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXJiaXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5hcmJpc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5hcmJpc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogODE5MzAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJlb25OZXR3b3JrLmpzCiAgdmFyIGFyZW9uTmV0d29yayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDYzLAogICAgbmFtZTogIkFyZW9uIE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgZGVjaW1hbHM6IDE4LCBuYW1lOiAiQVJFQSIsIHN5bWJvbDogIkFSRUEiIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC1ycGMuYXJlb24ubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9tYWlubmV0LXdzLmFyZW9uLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBcmVvbnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYXJlb25zY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FyZW9uTmV0d29ya1Rlc3RuZXQuanMKICB2YXIgYXJlb25OZXR3b3JrVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDYyLAogICAgbmFtZTogIkFyZW9uIE5ldHdvcmsgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJUQVJFQSIsIHN5bWJvbDogIlRBUkVBIiB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQtcnBjLmFyZW9uLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC13cy5hcmVvbi5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXJlb25zY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2FyZW9uc2Nhbi5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FydGVsYVRlc3RuZXQuanMKICB2YXIgYXJ0ZWxhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTE4MjIsCiAgICBuYW1lOiAiQXJ0ZWxhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkFSVCIsIHN5bWJvbDogIkFSVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2JldGFuZXQtcnBjMS5hcnRlbGEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFydGVsYSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9iZXRhbmV0LXNjYW4uYXJ0ZWxhLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmV0YW5ldC1zY2FuLmFydGVsYS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4ZDA3Yzg2MzVmNzZlODc0NUVlNzA5MmZiYjZlOGZiYzVGZUYwOURENyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3MDAxODcxCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F0bGV0YU9seW1waWEuanMKICB2YXIgYXRsZXRhT2x5bXBpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjM0MCwKICAgIG5hbWU6ICJBdGxldGEgT2x5bXBpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJBdGxhIiwgc3ltYm9sOiAiQVRMQSIgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL3Rlc3RuZXQtcnBjLmF0bGV0YS5uZXR3b3JrOjk5NDQiLAogICAgICAgICAgImh0dHBzOi8vdGVzdG5ldC1ycGMuYXRsZXRhLm5ldHdvcmsiCiAgICAgICAgXSwKICAgICAgICB3czogWyJ3c3M6Ly90ZXN0bmV0LXJwYy5hdGxldGEubmV0d29yazo5OTQ0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXRsZXRhIE9seW1waWEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5hdGxldGEubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmF0bGV0YS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MTQ3MmVjNjM5MjE4MGZiODRGMzQ1ZDI0NTViQ0M3NUIyNjU3NzExNSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDc2NDczCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F1cm9yYS5qcwogIHZhciBhdXJvcmEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMTMxNjE1NTQsCiAgICBuYW1lOiAiQXVyb3JhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5hdXJvcmEuZGV2Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXVyb3Jhc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hdXJvcmFzY2FuLmRldiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hdXJvcmFzY2FuLmRldi9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjI5MDc4MTYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hdXJvcmFUZXN0bmV0LmpzCiAgdmFyIGF1cm9yYVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMTMxNjE1NTUsCiAgICBuYW1lOiAiQXVyb3JhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LmF1cm9yYS5kZXYiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBdXJvcmFzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuYXVyb3Jhc2Nhbi5kZXYiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC5hdXJvcmFzY2FuLmRldi9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F1cm9yaWEuanMKICB2YXIgYXVyb3JpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjA1MjA1LAogICAgbmFtZTogIkF1cm9yaWEgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiYXVyb3JpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiQXVyb3JpYSBTdHJhdGlzIiwKICAgICAgc3ltYm9sOiAidFNUUkFYIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2F1cm9yaWEucnBjLnN0cmF0aXNldm0uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXVyb3JpYSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2F1cm9yaWEuZXhwbG9yZXIuc3RyYXRpc2V2bS5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F2YWxhbmNoZS5qcwogIHZhciBhdmFsYW5jaGUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQzMTE0LAogICAgbmFtZTogIkF2YWxhbmNoZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJBdmFsYW5jaGUiLAogICAgICBzeW1ib2w6ICJBVkFYIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLmF2YXgubmV0d29yay9leHQvYmMvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTbm93VHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vc25vd3RyYWNlLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5zbm93dHJhY2UuaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTE5MDc5MzQKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hdmFsYW5jaGVGdWppLmpzCiAgdmFyIGF2YWxhbmNoZUZ1amkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQzMTEzLAogICAgbmFtZTogIkF2YWxhbmNoZSBGdWppIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkF2YWxhbmNoZSBGdWppIiwKICAgICAgc3ltYm9sOiAiQVZBWCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FwaS5hdmF4LXRlc3QubmV0d29yay9leHQvYmMvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTbm93VHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5zbm93dHJhY2UuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLXRlc3RuZXQuc25vd3RyYWNlLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDcwOTY5NTkKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYjNTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMyA9IDE2ODU4Nzc3MzsKICB2YXIgYjNTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOTkzLAogICAgbmFtZTogIkIzIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEuYjMuZnVuL2h0dHAiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEuZXhwbG9yZXIuYjMuZnVuIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDMKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYjMuanMKICB2YXIgc291cmNlSWQ0ID0gODQ1MzsKICB2YXIgYjMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgzMzMsCiAgICBuYW1lOiAiQjMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQtcnBjLmIzLmZ1bi9odHRwIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5iMy5mdW4iCiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQ0CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JhaGFtdXQuanMKICB2YXIgYmFoYW11dCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTE2NSwKICAgIG5ldHdvcms6ICJiYWhhbXV0IiwKICAgIG5hbWU6ICJCYWhhbXV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJGYXN0dG9rZW4iLCBzeW1ib2w6ICJGVE4iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL3JwYzEuYmFoYW11dC5pbyIsCiAgICAgICAgICAiaHR0cHM6Ly9iYWhhbXV0LXJwYy5wdWJsaWNub2RlLmNvbSIsCiAgICAgICAgICAiaHR0cHM6Ly9ycGMyLmJhaGFtdXQuaW8iCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsKICAgICAgICAgICJ3c3M6Ly93czEuc2FoYXJhLmJhaGFtdXRjaGFpbi5jb20iLAogICAgICAgICAgIndzczovL2JhaGFtdXQtcnBjLnB1YmxpY25vZGUuY29tIiwKICAgICAgICAgICJ3c3M6Ly93czIuc2FoYXJhLmJhaGFtdXRjaGFpbi5jb20iCiAgICAgICAgXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbCiAgICAgICAgICAiaHR0cHM6Ly9ycGMxLmJhaGFtdXQuaW8iLAogICAgICAgICAgImh0dHBzOi8vYmFoYW11dC1ycGMucHVibGljbm9kZS5jb20iLAogICAgICAgICAgImh0dHBzOi8vcnBjMi5iYWhhbXV0LmlvIgogICAgICAgIF0sCiAgICAgICAgd2ViU29ja2V0OiBbCiAgICAgICAgICAid3NzOi8vd3MxLnNhaGFyYS5iYWhhbXV0Y2hhaW4uY29tIiwKICAgICAgICAgICJ3c3M6Ly9iYWhhbXV0LXJwYy5wdWJsaWNub2RlLmNvbSIsCiAgICAgICAgICAid3NzOi8vd3MyLnNhaGFyYS5iYWhhbXV0Y2hhaW4uY29tIgogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRnRuc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cuZnRuc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vd3d3LmZ0bnNjYW4uY29tL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iYXNlLmpzCiAgdmFyIHNvdXJjZUlkNSA9IDE7CiAgdmFyIGJhc2UgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDg0NTMsCiAgICBuYW1lOiAiQmFzZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmJhc2Uub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmFzZXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYmFzZXNjYW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5iYXNlc2Nhbi5vcmcvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkNV06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDU2MzE1YjkwYzQwNzMwOTI1ZWM1NDg1Y2YwMDRkODM1MDU4NTE4QTAiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA1MDIyCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDVdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg0OTA0ODA0NEQ1N2UxQzkyQTc3Zjc5OTg4ZDIxRmE4ZkFGNzRFOTdlIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMTc0ODIxNDMKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQ1XTogewogICAgICAgICAgYWRkcmVzczogIjB4MzE1NENmMTZjY2RiNEM2ZDkyMjYyOTY2NDE3NGI5MDRkODBGMkMzNSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE3NDgyMTQzCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkNQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iYXNlR29lcmxpLmpzCiAgdmFyIHNvdXJjZUlkNiA9IDU7CiAgdmFyIGJhc2VHb2VybGkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDg0NTMxLAogICAgbmFtZTogIkJhc2UgR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJHb2VybGkgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZ29lcmxpLmJhc2Uub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmFzZXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLmJhc2VzY2FuLm9yZyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGkuYmFzZXNjYW4ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICAuLi5jaGFpbkNvbmZpZzIuY29udHJhY3RzLAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDZdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgyQTM1ODkxZmYzMDMxM0NjRmE2Q0U4OGRjZjM4NThiYjA3NUEyMjk4IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTM3Njk4OAogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQ2XTogewogICAgICAgICAgYWRkcmVzczogIjB4ZTkzYzhjRDBENDA5MzQxMjA1QTU5MmY4YzRBYzFBNWZlNTU4NWNmQSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQ2XTogewogICAgICAgICAgYWRkcmVzczogIjB4ZkE2RDhFZTVCRTc3MEY4NEZDMDAxRDA5OEM0YkQ2MDRGZTAxMjg0YSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkNgogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iYXNlU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDcgPSAxMTE1NTExMTsKICB2YXIgYmFzZVNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDg0NTMyLAogICAgbmV0d29yazogImJhc2Utc2Vwb2xpYSIsCiAgICBuYW1lOiAiQmFzZSBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZXBvbGlhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5iYXNlLm9yZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJhc2VzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEuYmFzZXNjYW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1zZXBvbGlhLmJhc2VzY2FuLm9yZy9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgZGlzcHV0ZUdhbWVGYWN0b3J5OiB7CiAgICAgICAgW3NvdXJjZUlkN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweGQ2RTZkQmY0RjdFQTBhYzQxMmZEOGI2NUVEMjk3ZTY0QkI3YTA2RTEiCiAgICAgICAgfQogICAgICB9LAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDddOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg4NDQ1N2NhOUQwMTYzRmJDNGJiZmU0RGZiYjIwYmE0NmU0OERGMjU0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDQ5ZjUzZTQxNDUyYzc0NTg5ZTg1Y2ExNjc3NDI2YmE0MjY0NTllODUiLAogICAgICAgICAgYmxvY2tDcmVhdGVkOiA0NDQ2Njc3CiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweGZkMEJmNzFGNjA2NjBFMmY2MDhlZDU2ZTE2NTlDNDUwZUIxMTMxMjAiLAogICAgICAgICAgYmxvY2tDcmVhdGVkOiA0NDQ2Njc3CiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDU5NjQ3CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkNwogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iZWFtLmpzCiAgdmFyIGJlYW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQzMzcsCiAgICBuYW1lOiAiQmVhbSIsCiAgICBuZXR3b3JrOiAiYmVhbSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCZWFtIiwKICAgICAgc3ltYm9sOiAiQkVBTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIHB1YmxpYzogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9idWlsZC5vbmJlYW0uY29tL3JwYyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9idWlsZC5vbmJlYW0uY29tL3dzIl0KICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9idWlsZC5vbmJlYW0uY29tL3JwYyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9idWlsZC5vbmJlYW0uY29tL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmVhbSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zdWJuZXRzLmF2YXgubmV0d29yay9iZWFtIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg0OTU2ZjE1ZWZkYzNkYzE2NjQ1ZTkwY2MzNTZlYWZhNjVmZmM2NWVjIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iZWFtVGVzdG5ldC5qcwogIHZhciBiZWFtVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTMzMzcsCiAgICBuYW1lOiAiQmVhbSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJiZWFtIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkJlYW0iLAogICAgICBzeW1ib2w6ICJCRUFNIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgcHVibGljOiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2J1aWxkLm9uYmVhbS5jb20vcnBjL3Rlc3RuZXQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vYnVpbGQub25iZWFtLmNvbS93cy90ZXN0bmV0Il0KICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9idWlsZC5vbmJlYW0uY29tL3JwYy90ZXN0bmV0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2J1aWxkLm9uYmVhbS5jb20vd3MvdGVzdG5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJlYW0gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc3VibmV0cy10ZXN0LmF2YXgubmV0d29yay9iZWFtIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg5YmY0OWI3MDRlZTJhMDk1Yjk1YzFmMmQ0ZWI5MDEwNTEwYzQxYzllIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYmVhck5ldHdvcmtDaGFpbk1haW5uZXQuanMKICB2YXIgYmVhck5ldHdvcmtDaGFpbk1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDY0MTIzMCwKICAgIG5hbWU6ICJCZWFyIE5ldHdvcmsgQ2hhaW4gTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCZWFyTmV0d29ya0NoYWluIiwKICAgICAgc3ltYm9sOiAiQlJOS0MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9icm5rYy1tYWlubmV0LmJlYXJuZXR3b3JrLm5ldCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJybmtTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2JybmtzY2FuLmJlYXJuZXR3b3JrLm5ldCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9icm5rc2Nhbi5iZWFybmV0d29yay5uZXQvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JlYXJOZXR3b3JrQ2hhaW5UZXN0bmV0LmpzCiAgdmFyIGJlYXJOZXR3b3JrQ2hhaW5UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NTEyMzAsCiAgICBuYW1lOiAiQmVhciBOZXR3b3JrIENoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAidEJSTktDIiwKICAgICAgc3ltYm9sOiAidEJSTktDIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYnJua2MtdGVzdC5iZWFybmV0d29yay5uZXQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCcm5rVGVzdFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYnJua3Rlc3Qtc2Nhbi5iZWFybmV0d29yay5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYnJua3Rlc3Qtc2Nhbi5iZWFybmV0d29yay5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iZXJhY2hhaW5UZXN0bmV0LmpzCiAgdmFyIGJlcmFjaGFpblRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwMDg1LAogICAgbmFtZTogIkJlcmFjaGFpbiBBcnRpbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCRVJBIFRva2VuIiwKICAgICAgc3ltYm9sOiAiQkVSQSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FydGlvLnJwYy5iZXJhY2hhaW4uY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmVyYWNoYWluIiwKICAgICAgICB1cmw6ICJodHRwczovL2FydGlvLmJlcmF0cmFpbC5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYmVyYWNoYWluVGVzdG5ldGJBcnRpby5qcwogIHZhciBiZXJhY2hhaW5UZXN0bmV0YkFydGlvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4MDA4NCwKICAgIG5hbWU6ICJCZXJhY2hhaW4gYkFydGlvIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkJFUkEgVG9rZW4iLAogICAgICBzeW1ib2w6ICJCRVJBIgogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDkyNjkKICAgICAgfQogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYmFydGlvLnJwYy5iZXJhY2hhaW4uY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmVyYWNoYWluIGJBcnRpbyBCZXJhdHJhaWwiLAogICAgICAgIHVybDogImh0dHBzOi8vYmFydGlvLmJlcmF0cmFpbC5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYmV2bU1haW5uZXQuanMKICB2YXIgYmV2bU1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExNTAxLAogICAgbmFtZTogIkJFVk0gTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQml0Y29pbiIsIHN5bWJvbDogIkJUQyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMtbWFpbm5ldC0xLmJldm0uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCZXZtc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLW1haW5uZXQuYmV2bS5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLW1haW5uZXQtYXBpLmJldm0uaW8vYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JpdGt1Yi5qcwogIHZhciBiaXRrdWIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDk2LAogICAgbmFtZTogIkJpdGt1YiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQml0a3ViIiwgc3ltYm9sOiAiS1VCIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmJpdGt1YmNoYWluLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQml0a3ViIENoYWluIE1haW5uZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3LmJrY3NjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3d3dy5ia2NzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYml0a3ViVGVzdG5ldC5qcwogIHZhciBiaXRrdWJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNTkyNSwKICAgIG5hbWU6ICJCaXRrdWIgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiQml0a3ViIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkJpdGt1YiBUZXN0Iiwgc3ltYm9sOiAidEtVQiIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy10ZXN0bmV0LmJpdGt1YmNoYWluLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQml0a3ViIENoYWluIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5ia2NzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJrY3NjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYml0VG9ycmVudC5qcwogIHZhciBiaXRUb3JyZW50ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOTksCiAgICBuYW1lOiAiQml0VG9ycmVudCIsCiAgICBuZXR3b3JrOiAiYml0dG9ycmVudC1jaGFpbi1tYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJCaXRUb3JyZW50Iiwgc3ltYm9sOiAiQlRUIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5iaXR0b3JyZW50Y2hhaW4uaW8iXSB9LAogICAgICBwdWJsaWM6IHsgaHR0cDogWyJodHRwczovL3JwYy5iaXR0b3JyZW50Y2hhaW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCdHRjc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9idHRjc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmJ0dGNzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzEwNzg1NTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iaXRUb3JyZW50VGVzdG5ldC5qcwogIHZhciBiaXRUb3JyZW50VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAyOCwKICAgIG5hbWU6ICJCaXRUb3JyZW50IENoYWluIFRlc3RuZXQiLAogICAgbmV0d29yazogImJpdHRvcnJlbnQtY2hhaW4tdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQml0VG9ycmVudCIsIHN5bWJvbDogIkJUVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly90ZXN0cnBjLmJpdHRvcnJlbnRjaGFpbi5pbyJdIH0sCiAgICAgIHB1YmxpYzogeyBodHRwOiBbImh0dHBzOi8vdGVzdHJwYy5iaXR0b3JyZW50Y2hhaW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCdHRjc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJ0dGNzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJ0dGNzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JsYXN0LmpzCiAgdmFyIHNvdXJjZUlkOCA9IDE7CiAgdmFyIGJsYXN0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4MTQ1NywKICAgIG5hbWU6ICJCbGFzdCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5ibGFzdC5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsYXN0c2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibGFzdHNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmJsYXN0c2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjEyOTI5CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQ4CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JsYXN0U2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDkgPSAxMTE1NTExMTsKICB2YXIgYmxhc3RTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjg1ODc3NzMsCiAgICBuYW1lOiAiQmxhc3QgU2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5ibGFzdC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsYXN0c2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZXBvbGlhLmJsYXN0c2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5ibGFzdHNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc1NjY5MAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDkKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYm9iLmpzCiAgdmFyIHNvdXJjZUlkMTAgPSAxOwogIHZhciBib2IgPSBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogNjA4MDgsCiAgICBuYW1lOiAiQk9CIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUSCIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmdvYm9iLnh5eiJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuZ29ib2IueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQk9CIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmdvYm9iLnh5eiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICAuLi5jaGFpbkNvbmZpZzIuY29udHJhY3RzLAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMzEzMQogICAgICB9LAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDEwXTogewogICAgICAgICAgYWRkcmVzczogIjB4ZERhNTNFMjNmOGEzMjY0MGIwNEQ3MjU2ZTY1MUMxZGI5OGRCMTFDMSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ0NjI2MTUKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDEwXTogewogICAgICAgICAgYWRkcmVzczogIjB4OEFkZUUxMjQ0NDc0MzVmRTAzZTNDRDI0ZEYzZjRjQUUzMkU2NWEzRSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ0NjI2MTUKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQxMAogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ib2JTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMTEgPSAxMTE1NTExMTsKICB2YXIgYm9iU2Vwb2xpYSA9IGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiA4MDg4MTMsCiAgICBuYW1lOiAiQk9CIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRVRIIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ib2Itc2Vwb2xpYS5ycGMuZ29ib2IueHl6Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2JvYi1zZXBvbGlhLnJwYy5nb2JvYi54eXoiXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vYm9iLXNlcG9saWEucnBjLmdvYm9iLnh5eiJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ib2Itc2Vwb2xpYS5ycGMuZ29ib2IueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQk9CIFNlcG9saWEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYm9iLXNlcG9saWEuZXhwbG9yZXIuZ29ib2IueHl6IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDM1Njc3CiAgICAgIH0sCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMTFdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgxNEQwMDY5NDUyYjRBRTJiMjUwQjM5NWI4YWRBYjc3MUU0MjY3ZDJmIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogNDQ2MjYxNQogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTFdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg4NjdCMUFhODcyYjlDOGNCNUU5Rjc3NTVmZURDNDVCQjI0QWQwYWU0IiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogNDQ2MjYxNQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBzb3VyY2VJZDogc291cmNlSWQxMQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ib2JhLmpzCiAgdmFyIGJvYmEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI4OCwKICAgIG5hbWU6ICJCb2JhIE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmJvYmEubmV0d29yayJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJPQkFTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2JvYmFzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0NDY4NTkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ib2JhU2Vwb2xpYS5qcwogIHZhciBib2JhU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjg4ODIsCiAgICBuYW1lOiAiQm9iYSBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5ib2JhLm5ldHdvcmsiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCT0JBU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJvYmFzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYnJvbm9zLmpzCiAgdmFyIGJyb25vcyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAzOSwKICAgIG5hbWU6ICJCcm9ub3MiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQlJPIiwKICAgICAgc3ltYm9sOiAiQlJPIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZXZtLmJyb25vcy5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCcm9ub1NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYnJvc2Nhbi5icm9ub3Mub3JnIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Jyb25vc1Rlc3RuZXQuanMKICB2YXIgYnJvbm9zVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAzOCwKICAgIG5hbWU6ICJCcm9ub3MgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCcm9ub3MgQ29pbiIsCiAgICAgIHN5bWJvbDogInRCUk8iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldm0tdGVzdG5ldC5icm9ub3Mub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQnJvbm9TY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Ricm9zY2FuLmJyb25vcy5vcmciCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JzYy5qcwogIHZhciBic2MgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU2LAogICAgbmFtZTogIkJOQiBTbWFydCBDaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCTkIiLAogICAgICBzeW1ib2w6ICJCTkIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMuYW5rci5jb20vYnNjIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQnNjU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ic2NzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkuYnNjc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE1OTIxNDUyCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYnNjVGVzdG5ldC5qcwogIHZhciBic2NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5NywKICAgIG5hbWU6ICJCaW5hbmNlIFNtYXJ0IENoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQk5CIiwKICAgICAgc3ltYm9sOiAidEJOQiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2RhdGEtc2VlZC1wcmVic2MtMS1zMS5ibmJjaGFpbi5vcmc6ODU0NSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJzY1NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5ic2NzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJzY3NjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNzQyMjQ4MwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ic2NHcmVlbmZpZWxkLmpzCiAgdmFyIGJzY0dyZWVuZmllbGQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMTcsCiAgICBuYW1lOiAiQk5CIEdyZWVuZmllbGQgQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQk5CIiwKICAgICAgc3ltYm9sOiAiQk5CIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZ3JlZW5maWVsZC1jaGFpbi5ibmJjaGFpbi5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCTkIgR3JlZW5maWVsZCBNYWlubmV0IFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ3JlZW5maWVsZHNjYW4uY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYnRyLmpzCiAgdmFyIGJ0ciA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAwOTAxLAogICAgbmFtZTogIkJpdGxheWVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCaXRjb2luIiwKICAgICAgc3ltYm9sOiAiQlRDIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWwogICAgICAgICAgImh0dHBzOi8vcnBjLmJpdGxheWVyLm9yZyIsCiAgICAgICAgICAiaHR0cHM6Ly9ycGMuYml0bGF5ZXItcnBjLmNvbSIsCiAgICAgICAgICAiaHR0cHM6Ly9ycGMuYW5rci5jb20vYml0bGF5ZXIiCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3MuYml0bGF5ZXIub3JnIiwgIndzczovL3dzLmJpdGxheWVyLXJwYy5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCaXRsYXllcihCVFIpIFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3LmJ0cnNjYW4uY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2J0clRlc3RuZXQuanMKICB2YXIgYnRyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAwODEwLAogICAgbmFtZTogIkJpdGxheWVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkJpdGNvaW4iLAogICAgICBzeW1ib2w6ICJCVEMiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC1ycGMuYml0bGF5ZXIub3JnIl0sCiAgICAgICAgd2ViU29ja2V0OiBbCiAgICAgICAgICAid3NzOi8vdGVzdG5ldC13cy5iaXRsYXllci5vcmciLAogICAgICAgICAgIndzczovL3Rlc3RuZXQtd3MuYml0bGF5ZXItcnBjLmNvbSIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJpdGxheWVyKEJUUikgU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJ0cnNjYW4uY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ieG4uanMKICB2YXIgYnhuID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0OTk5LAogICAgbmFtZTogIkJsYWNrRm9ydCBFeGNoYW5nZSBOZXR3b3JrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJCbGFja0ZvcnQgVG9rZW4iLCBzeW1ib2w6ICJCWE4iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmJsYWNrZm9ydC5uZXR3b3JrL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuYmxhY2tmb3J0Lm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuYmxhY2tmb3J0Lm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2J4blRlc3RuZXQuanMKICB2YXIgYnhuVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDc3NywKICAgIG5hbWU6ICJCbGFja0ZvcnQgRXhjaGFuZ2UgTmV0d29yayBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCbGFja0ZvcnQgVGVzdG5ldCBUb2tlbiIsCiAgICAgIHN5bWJvbDogIlRCWE4iLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5ibGFja2ZvcnQubmV0d29yay9ycGMiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQtZXhwbG9yZXIuYmxhY2tmb3J0Lm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC1leHBsb3Jlci5ibGFja2ZvcnQubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NhbnRvLmpzCiAgdmFyIGNhbnRvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NzAwLAogICAgbmFtZTogIkNhbnRvIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkNhbnRvIiwKICAgICAgc3ltYm9sOiAiQ0FOVE8iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9jYW50by5ncmF2aXR5Y2hhaW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUdWJlci5CdWlsZCAoQmxvY2tzY291dCkiLAogICAgICAgIHVybDogImh0dHBzOi8vdHViZXIuYnVpbGQiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjkwNTc4OQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2Vsby9mZWVzLmpzCiAgdmFyIGZlZXMgPSB7CiAgICAvKgogICAgICAgKiBFc3RpbWF0ZXMgdGhlIGZlZXMgcGVyIGdhcyBmb3IgYSB0cmFuc2FjdGlvbi4KICAgIAogICAgICAgKiBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgdG8gYmUgcGFpZCBpbiBhIHRva2VuIChmZWVDdXJyZW5jeSBpcyBwcmVzZW50KSB0aGVuIHRoZSBmZWVzCiAgICAgICAqIGFyZSBlc3RpbWF0ZWQgaW4gdGhlIHZhbHVlIG9mIHRoZSB0b2tlbi4gT3RoZXJ3aXNlIGZhbGxzIGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICAgICogZXN0aW1hdGlvbiBieSByZXR1cm5pbmcgbnVsbC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHBhcmFtcyBmZWUgZXN0aW1hdGlvbiBmdW5jdGlvbiBwYXJhbWV0ZXJzCiAgICAgICAqLwogICAgZXN0aW1hdGVGZWVzUGVyR2FzOiBhc3luYyAocGFyYW1zKSA9PiB7CiAgICAgIGlmICghcGFyYW1zLnJlcXVlc3Q/LmZlZUN1cnJlbmN5KQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCBbbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhc10gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgZXN0aW1hdGVGZWVQZXJHYXNJbkZlZUN1cnJlbmN5KHBhcmFtcy5jbGllbnQsIHBhcmFtcy5yZXF1ZXN0LmZlZUN1cnJlbmN5KSwKICAgICAgICBlc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzSW5GZWVDdXJyZW5jeShwYXJhbXMuY2xpZW50LCBwYXJhbXMucmVxdWVzdC5mZWVDdXJyZW5jeSkKICAgICAgXSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgbWF4RmVlUGVyR2FzLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzCiAgICAgIH07CiAgICB9CiAgfTsKICBhc3luYyBmdW5jdGlvbiBlc3RpbWF0ZUZlZVBlckdhc0luRmVlQ3VycmVuY3koY2xpZW50LCBmZWVDdXJyZW5jeSkgewogICAgY29uc3QgZmVlID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfZ2FzUHJpY2UiLAogICAgICBwYXJhbXM6IFtmZWVDdXJyZW5jeV0KICAgIH0pOwogICAgcmV0dXJuIEJpZ0ludChmZWUpOwogIH0KICBhc3luYyBmdW5jdGlvbiBlc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzSW5GZWVDdXJyZW5jeShjbGllbnQsIGZlZUN1cnJlbmN5KSB7CiAgICBjb25zdCBmZWVzUGVyR2FzID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfbWF4UHJpb3JpdHlGZWVQZXJHYXMiLAogICAgICBwYXJhbXM6IFtmZWVDdXJyZW5jeV0KICAgIH0pOwogICAgcmV0dXJuIEJpZ0ludChmZWVzUGVyR2FzKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2Vsby9mb3JtYXR0ZXJzLmpzCiAgaW5pdF9mcm9tSGV4KCk7CiAgaW5pdF90cmFuc2FjdGlvblJlcXVlc3QoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jZWxvL3V0aWxzLmpzCiAgaW5pdF90cmltKCk7CiAgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSAwIHx8IHZhbHVlID09PSAwbiB8fCB2YWx1ZSA9PT0gdm9pZCAwIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAiMCIgfHwgdmFsdWUgPT09ICIiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgKHRyaW0odmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICIweCIgfHwgdHJpbSh2YWx1ZSkudG9Mb3dlckNhc2UoKSA9PT0gIjB4MDAiKTsKICB9CiAgZnVuY3Rpb24gaXNQcmVzZW50KHZhbHVlKSB7CiAgICByZXR1cm4gIWlzRW1wdHkodmFsdWUpOwogIH0KICBmdW5jdGlvbiBpc0VJUDE1NTkodHJhbnNhY3Rpb24pIHsKICAgIHJldHVybiB0eXBlb2YgdHJhbnNhY3Rpb24ubWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgdHJhbnNhY3Rpb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiOwogIH0KICBmdW5jdGlvbiBpc0NJUDY0KHRyYW5zYWN0aW9uKSB7CiAgICBpZiAodHJhbnNhY3Rpb24udHlwZSA9PT0gImNpcDY0IikgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBpc0VJUDE1NTkodHJhbnNhY3Rpb24pICYmIGlzUHJlc2VudCh0cmFuc2FjdGlvbi5mZWVDdXJyZW5jeSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NlbG8vZm9ybWF0dGVycy5qcwogIHZhciBmb3JtYXR0ZXJzMyA9IHsKICAgIGJsb2NrOiAvKiBAX19QVVJFX18gKi8gZGVmaW5lQmxvY2soewogICAgICBmb3JtYXQoYXJncykgewogICAgICAgIGNvbnN0IHRyYW5zYWN0aW9ucyA9IGFyZ3MudHJhbnNhY3Rpb25zPy5tYXAoKHRyYW5zYWN0aW9uKSA9PiB7CiAgICAgICAgICBpZiAodHlwZW9mIHRyYW5zYWN0aW9uID09PSAic3RyaW5nIikKICAgICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uOwogICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgLi4uZm9ybWF0dGVkLAogICAgICAgICAgICAuLi50cmFuc2FjdGlvbi5nYXRld2F5RmVlID8gewogICAgICAgICAgICAgIGdhdGV3YXlGZWU6IGhleFRvQmlnSW50KHRyYW5zYWN0aW9uLmdhdGV3YXlGZWUpLAogICAgICAgICAgICAgIGdhdGV3YXlGZWVSZWNpcGllbnQ6IHRyYW5zYWN0aW9uLmdhdGV3YXlGZWVSZWNpcGllbnQKICAgICAgICAgICAgfSA6IHt9LAogICAgICAgICAgICBmZWVDdXJyZW5jeTogdHJhbnNhY3Rpb24uZmVlQ3VycmVuY3kKICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHRyYW5zYWN0aW9ucywKICAgICAgICAgIC4uLmFyZ3MucmFuZG9tbmVzcyA/IHsgcmFuZG9tbmVzczogYXJncy5yYW5kb21uZXNzIH0gOiB7fQogICAgICAgIH07CiAgICAgIH0KICAgIH0pLAogICAgdHJhbnNhY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVUcmFuc2FjdGlvbih7CiAgICAgIGZvcm1hdChhcmdzKSB7CiAgICAgICAgaWYgKGFyZ3MudHlwZSA9PT0gIjB4N2UiKQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgaXNTeXN0ZW1UeDogYXJncy5pc1N5c3RlbVR4LAogICAgICAgICAgICBtaW50OiBhcmdzLm1pbnQgPyBoZXhUb0JpZ0ludChhcmdzLm1pbnQpIDogdm9pZCAwLAogICAgICAgICAgICBzb3VyY2VIYXNoOiBhcmdzLnNvdXJjZUhhc2gsCiAgICAgICAgICAgIHR5cGU6ICJkZXBvc2l0IgogICAgICAgICAgfTsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHsgZmVlQ3VycmVuY3k6IGFyZ3MuZmVlQ3VycmVuY3kgfTsKICAgICAgICBpZiAoYXJncy50eXBlID09PSAiMHg3YiIpCiAgICAgICAgICB0cmFuc2FjdGlvbi50eXBlID0gImNpcDY0IjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGlmIChhcmdzLnR5cGUgPT09ICIweDdjIikKICAgICAgICAgICAgdHJhbnNhY3Rpb24udHlwZSA9ICJjaXA0MiI7CiAgICAgICAgICB0cmFuc2FjdGlvbi5nYXRld2F5RmVlID0gYXJncy5nYXRld2F5RmVlID8gaGV4VG9CaWdJbnQoYXJncy5nYXRld2F5RmVlKSA6IG51bGw7CiAgICAgICAgICB0cmFuc2FjdGlvbi5nYXRld2F5RmVlUmVjaXBpZW50ID0gYXJncy5nYXRld2F5RmVlUmVjaXBpZW50OwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICAgIH0KICAgIH0pLAogICAgdHJhbnNhY3Rpb25SZXF1ZXN0OiAvKiBAX19QVVJFX18gKi8gZGVmaW5lVHJhbnNhY3Rpb25SZXF1ZXN0KHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCByZXF1ZXN0ID0ge307CiAgICAgICAgaWYgKGFyZ3MuZmVlQ3VycmVuY3kpCiAgICAgICAgICByZXF1ZXN0LmZlZUN1cnJlbmN5ID0gYXJncy5mZWVDdXJyZW5jeTsKICAgICAgICBpZiAoaXNDSVA2NChhcmdzKSkKICAgICAgICAgIHJlcXVlc3QudHlwZSA9ICIweDdiIjsKICAgICAgICByZXR1cm4gcmVxdWVzdDsKICAgICAgfQogICAgfSkKICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NlbG8vc2VyaWFsaXplcnMuanMKICBpbml0X2FkZHJlc3MoKTsKICBpbml0X2Jhc2UoKTsKICBpbml0X2NoYWluKCk7CiAgaW5pdF9ub2RlKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbjQodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgaWYgKGlzQ0lQNjQodHJhbnNhY3Rpb24pKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25DSVA2NCh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKTsKICAgIHJldHVybiBzZXJpYWxpemVUcmFuc2FjdGlvbjModHJhbnNhY3Rpb24sIHNpZ25hdHVyZSk7CiAgfQogIHZhciBzZXJpYWxpemVyczMgPSB7CiAgICB0cmFuc2FjdGlvbjogc2VyaWFsaXplVHJhbnNhY3Rpb240CiAgfTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkNJUDY0KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpIHsKICAgIGFzc2VydFRyYW5zYWN0aW9uQ0lQNjQodHJhbnNhY3Rpb24pOwogICAgY29uc3QgeyBjaGFpbklkLCBnYXMsIG5vbmNlLCB0bywgdmFsdWUsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIGFjY2Vzc0xpc3QsIGZlZUN1cnJlbmN5LCBkYXRhIH0gPSB0cmFuc2FjdGlvbjsKICAgIGNvbnN0IHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9IFsKICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgIG5vbmNlID8gdG9IZXgobm9uY2UpIDogIjB4IiwKICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXMgPyB0b0hleChtYXhQcmlvcml0eUZlZVBlckdhcykgOiAiMHgiLAogICAgICBtYXhGZWVQZXJHYXMgPyB0b0hleChtYXhGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgZ2FzID8gdG9IZXgoZ2FzKSA6ICIweCIsCiAgICAgIHRvID8/ICIweCIsCiAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiLAogICAgICBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpLAogICAgICBmZWVDdXJyZW5jeSwKICAgICAgLi4udG9ZUGFyaXR5U2lnbmF0dXJlQXJyYXkodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkKICAgIF07CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4N2IiLAogICAgICB0b1JscChzZXJpYWxpemVkVHJhbnNhY3Rpb24pCiAgICBdKTsKICB9CiAgdmFyIE1BWF9NQVhfRkVFX1BFUl9HQVMgPSAybiAqKiAyNTZuIC0gMW47CiAgZnVuY3Rpb24gYXNzZXJ0VHJhbnNhY3Rpb25DSVA2NCh0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBtYXhQcmlvcml0eUZlZVBlckdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckdhcywgdG8sIGZlZUN1cnJlbmN5IH0gPSB0cmFuc2FjdGlvbjsKICAgIGlmIChjaGFpbklkIDw9IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhaW5JZEVycm9yKHsgY2hhaW5JZCB9KTsKICAgIGlmICh0byAmJiAhaXNBZGRyZXNzKHRvKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB0byB9KTsKICAgIGlmIChnYXNQcmljZSkKICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoImBnYXNQcmljZWAgaXMgbm90IGEgdmFsaWQgQ0lQLTY0IFRyYW5zYWN0aW9uIGF0dHJpYnV0ZS4iKTsKICAgIGlmIChpc1ByZXNlbnQobWF4RmVlUGVyR2FzKSAmJiBtYXhGZWVQZXJHYXMgPiBNQVhfTUFYX0ZFRV9QRVJfR0FTKQogICAgICB0aHJvdyBuZXcgRmVlQ2FwVG9vSGlnaEVycm9yKHsgbWF4RmVlUGVyR2FzIH0pOwogICAgaWYgKGlzUHJlc2VudChtYXhQcmlvcml0eUZlZVBlckdhcykgJiYgaXNQcmVzZW50KG1heEZlZVBlckdhcykgJiYgbWF4UHJpb3JpdHlGZWVQZXJHYXMgPiBtYXhGZWVQZXJHYXMpCiAgICAgIHRocm93IG5ldyBUaXBBYm92ZUZlZUNhcEVycm9yKHsgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcyB9KTsKICAgIGlmIChpc1ByZXNlbnQoZmVlQ3VycmVuY3kpICYmICFpc0FkZHJlc3MoZmVlQ3VycmVuY3kpKSB7CiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgZmVlQ3VycmVuY3lgIE1VU1QgYmUgYSB0b2tlbiBhZGRyZXNzIGZvciBDSVAtNjQgdHJhbnNhY3Rpb25zLiIpOwogICAgfQogICAgaWYgKGlzRW1wdHkoZmVlQ3VycmVuY3kpKSB7CiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgZmVlQ3VycmVuY3lgIG11c3QgYmUgcHJvdmlkZWQgZm9yIENJUC02NCB0cmFuc2FjdGlvbnMuIik7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NlbG8vY2hhaW5Db25maWcuanMKICB2YXIgY2hhaW5Db25maWczID0gewogICAgZm9ybWF0dGVyczogZm9ybWF0dGVyczMsCiAgICBzZXJpYWxpemVyczogc2VyaWFsaXplcnMzLAogICAgZmVlcwogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NlbG8uanMKICB2YXIgY2VsbyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzMsCiAgICBpZDogNDIyMjAsCiAgICBuYW1lOiAiQ2VsbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDRUxPIiwKICAgICAgc3ltYm9sOiAiQ0VMTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2Zvcm5vLmNlbG8ub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ2VsbyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9jZWxvc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkuY2Vsb3NjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEzMTEyNTk5CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jZWxvQWxmYWpvcmVzLmpzCiAgdmFyIGNlbG9BbGZham9yZXMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWczLAogICAgaWQ6IDQ0Nzg3LAogICAgbmFtZTogIkFsZmFqb3JlcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDRUxPIiwKICAgICAgc3ltYm9sOiAiQS1DRUxPIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hbGZham9yZXMtZm9ybm8uY2Vsby10ZXN0bmV0Lm9yZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNlbG8gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuY2Vsby5vcmcvYWxmYWpvcmVzIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmNlbG8ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDU2OTAwMQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jaGlsaXouanMKICB2YXIgY2hpbGl6ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4ODg4OCwKICAgIG5hbWU6ICJDaGlsaXogQ2hhaW4iLAogICAgbmV0d29yazogImNoaWxpei1jaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDSFoiLAogICAgICBzeW1ib2w6ICJDSFoiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWwogICAgICAgICAgImh0dHBzOi8vcnBjLmFua3IuY29tL2NoaWxpeiIsCiAgICAgICAgICAiaHR0cHM6Ly9jaGlsaXotcnBjLnB1YmxpY25vZGUuY29tIgogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ2hpbGl6IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4uY2hpbGl6LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLmNoaWxpei5jb20vYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NoaXBzLmpzCiAgdmFyIGNoaXBzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyODgyLAogICAgbmFtZTogIkNoaXBzIE5ldHdvcmsiLAogICAgbmV0d29yazogIkNISVBTIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIklPVEEiLAogICAgICBzeW1ib2w6ICJJT1RBIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL25vZGUuY2hpcHMub29vL3dhc3AvYXBpL3YxL2NoYWlucy9pb3RhMXBwM2QzbW5hcDN1Zm1ncW5qc253MzQ0c3FtZjVzdmpoMjZ5Mmtobm1jODlzdjY3ODh5M3IyMDdhOGZuL2V2bSIKICAgICAgICBdCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY2xhc3NpYy5qcwogIHZhciBjbGFzc2ljID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2MSwKICAgIG5hbWU6ICJFdGhlcmV1bSBDbGFzc2ljIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUQyIsCiAgICAgIHN5bWJvbDogIkVUQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2V0Yy5yaXZldC5saW5rIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmNvbS9ldGMvbWFpbm5ldCIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jb25mbHV4RVNwYWNlLmpzCiAgdmFyIGNvbmZsdXhFU3BhY2UgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMzAsCiAgICBuYW1lOiAiQ29uZmx1eCBlU3BhY2UiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkNvbmZsdXgiLCBzeW1ib2w6ICJDRlgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldm0uY29uZmx1eHJwYy5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXZtLmNvbmZsdXhycGMuY29tL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ29uZmx1eFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZXZtLmNvbmZsdXhzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhFRmYwMDc4OTEwZjYzOGNkODE5OTZjYzExN2JjY0QzZURmMkIwNzJGIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDY4NjAyOTM1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY29uZmx1eEVTcGFjZVRlc3RuZXQuanMKICB2YXIgY29uZmx1eEVTcGFjZVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDcxLAogICAgbmFtZTogIkNvbmZsdXggZVNwYWNlIFRlc3RuZXQiLAogICAgbmV0d29yazogImNmeC1lc3BhY2UtdGVzdG5ldCIsCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkNvbmZsdXgiLCBzeW1ib2w6ICJDRlgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldm10ZXN0bmV0LmNvbmZsdXhycGMuY29tIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2V2bXRlc3RuZXQuY29uZmx1eHJwYy5jb20vd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJDb25mbHV4U2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ldm10ZXN0bmV0LmNvbmZsdXhzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhFRmYwMDc4OTEwZjYzOGNkODE5OTZjYzExN2JjY0QzZURmMkIwNzJGIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDExNzQ5OTA1MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NvcmVEYW8uanMKICB2YXIgY29yZURhbyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExNiwKICAgIG5hbWU6ICJDb3JlIERhbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDb3JlIiwKICAgICAgc3ltYm9sOiAiQ09SRSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5jb3JlZGFvLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNvcmVEYW8iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5jb3JlZGFvLm9yZyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTkwNzkzNAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3JhYi5qcwogIHZhciBjcmFiID0gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQ0LAogICAgbmFtZTogIkNyYWIgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDcmFiIE5ldHdvcmsgTmF0aXZlIFRva2VuIiwKICAgICAgc3ltYm9sOiAiQ1JBQiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vY3JhYi1ycGMuZGFyd2luaWEubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9jcmFiLXJwYy5kYXJ3aW5pYS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsgbmFtZTogIkJsb2Nrc2NvdXQiLCB1cmw6ICJodHRwczovL2NyYWItc2Nhbi5kYXJ3aW5pYS5uZXR3b3JrIiB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwMzI1OTMKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jcm9ub3MuanMKICB2YXIgY3Jvbm9zID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNSwKICAgIG5hbWU6ICJDcm9ub3MgTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDcm9ub3MiLAogICAgICBzeW1ib2w6ICJDUk8iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldm0uY3Jvbm9zLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNyb25vcyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5jcm9ub3Mub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLWFwaS5jcm9ub3Mub3JnL21haW5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5NjMxMTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jcm9ub3N6a0VWTS5qcwogIHZhciBjcm9ub3N6a0VWTSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzg4LAogICAgbmFtZTogIkNyb25vcyB6a0VWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkNyb25vcyB6a0VWTSBDUk8iLAogICAgICBzeW1ib2w6ICJ6a0NSTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL21haW5uZXQuemtldm0uY3Jvbm9zLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNyb25vcyB6a0VWTSAoTWFpbm5ldCkgQ2hhaW4gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuemtldm0uY3Jvbm9zLm9yZyIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jcm9ub3N6a0VWTVRlc3RuZXQuanMKICB2YXIgY3Jvbm9zemtFVk1UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyODIsCiAgICBuYW1lOiAiQ3Jvbm9zIHprRVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ3Jvbm9zIHprRVZNIFRlc3QgQ29pbiIsCiAgICAgIHN5bWJvbDogInprVENSTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuemtldm0uY3Jvbm9zLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNyb25vcyB6a0VWTSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnprZXZtLmNyb25vcy5vcmcvdGVzdG5ldCIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3Jvbm9zVGVzdG5ldC5qcwogIHZhciBjcm9ub3NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMzgsCiAgICBuYW1lOiAiQ3Jvbm9zIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ1JPIiwKICAgICAgc3ltYm9sOiAidENSTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2V2bS10My5jcm9ub3Mub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ3Jvbm9zIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2Nyb25vcy5vcmcvZXhwbG9yZXIvdGVzdG5ldDMiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTAxOTEyNTEKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3Jvc3NiZWxsLmpzCiAgdmFyIGNyb3NzYmVsbCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzczNywKICAgIG5hbWU6ICJDcm9zc2JlbGwiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ1NCIiwKICAgICAgc3ltYm9sOiAiQ1NCIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuY3Jvc3NiZWxsLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ3Jvc3NTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4uY3Jvc3NiZWxsLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NjYW4uY3Jvc3NiZWxsLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAzODI0NjAzMQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2N1cnRpcy5qcwogIHZhciBjdXJ0aXMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMzMTExLAogICAgbmFtZTogIkN1cnRpcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQXBlQ29pbiIsIHN5bWJvbDogIkFQRSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5jdXJ0aXMuYXBlY2hhaW4uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ3VydGlzIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmN1cnRpcy5hcGVjaGFpbi5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2N5YmVyLmpzCiAgdmFyIGN5YmVyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NTYwLAogICAgbmFtZTogIkN5YmVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2N5YmVyLmFsdC50ZWNobm9sb2d5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9jeWJlcnNjYW4uY28iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vY3liZXJzY2FuLmNvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3liZXJUZXN0bmV0LmpzCiAgdmFyIGN5YmVyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExNTU3NTYwLAogICAgbmFtZTogIkN5YmVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vY3liZXItdGVzdG5ldC5hbHQudGVjaG5vbG9neSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5jeWJlcnNjYW4uY28iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC5jeWJlcnNjYW4uY28vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhmZmMzOTFGMDAxODI2OWQ0NzU4QUVBMWExNDQ3NzJFOEZCOTk1NDVFIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwNDU0NQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kYXJ3aW5pYS5qcwogIHZhciBkYXJ3aW5pYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDYsCiAgICBuYW1lOiAiRGFyd2luaWEgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJSSU5HIiwKICAgICAgc3ltYm9sOiAiUklORyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmRhcndpbmlhLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLmRhcndpbmlhLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogeyBuYW1lOiAiRXhwbG9yZXIiLCB1cmw6ICJodHRwczovL2V4cGxvcmVyLmRhcndpbmlhLm5ldHdvcmsiIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjk0MjAKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kY2hhaW4uanMKICB2YXIgZGNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAyNzE2NDQ2NDI5ODM3ZTMsCiAgICBuYW1lOiAiRGNoYWluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2RjaGFpbi0yNzE2NDQ2NDI5ODM3MDAwLTEuanNvbnJwYy5zYWdhcnBjLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRGNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2RjaGFpbi0yNzE2NDQ2NDI5ODM3MDAwLTEuc2FnYWV4cGxvcmVyLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1kY2hhaW4tMjcxNjQ0NjQyOTgzNzAwMC0xLnNhZ2FleHBsb3Jlci5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kY2hhaW5UZXN0bmV0LmpzCiAgdmFyIGRjaGFpblRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI3MTMwMTc5OTc1NzhlMywKICAgIG5hbWU6ICJEY2hhaW4gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL2RjaGFpbnRlc3RuZXQtMjcxMzAxNzk5NzU3ODAwMC0xLmpzb25ycGMudGVzdG5ldC5zYWdhcnBjLmlvIgogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRGNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2RjaGFpbnRlc3RuZXQtMjcxMzAxNzk5NzU3ODAwMC0xLnRlc3RuZXQuc2FnYWV4cGxvcmVyLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1kY2hhaW50ZXN0bmV0LTI3MTMwMTc5OTc1NzgwMDAtMS50ZXN0bmV0LnNhZ2FleHBsb3Jlci5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kZWZpY2hhaW5Fdm0uanMKICB2YXIgZGVmaWNoYWluRXZtID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMTMwLAogICAgbmV0d29yazogImRlZmljaGFpbi1ldm0iLAogICAgbmFtZTogIkRlRmlDaGFpbiBFVk0gTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRGVGaUNoYWluIiwKICAgICAgc3ltYm9sOiAiREZJIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC5tYWlubmV0Lm9jZWFuLmplbGx5ZmlzaHNkay5jb20iXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZXRoLm1haW5uZXQub2NlYW4uamVsbHlmaXNoc2RrLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRlRmlTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL21ldGEuZGVmaXNjYW4ubGl2ZSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMzc4NTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kZWZpY2hhaW5Fdm1UZXN0bmV0LmpzCiAgdmFyIGRlZmljaGFpbkV2bVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMzEsCiAgICBuZXR3b3JrOiAiZGVmaWNoYWluLWV2bS10ZXN0bmV0IiwKICAgIG5hbWU6ICJEZUZpQ2hhaW4gRVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkRlRmlDaGFpbiIsCiAgICAgIHN5bWJvbDogIkRGSSIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldGgudGVzdG5ldC5vY2Vhbi5qZWxseWZpc2hzZGsuY29tIl0KICAgICAgfSwKICAgICAgcHVibGljOiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC50ZXN0bmV0Lm9jZWFuLmplbGx5ZmlzaHNkay5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJEZUZpU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9tZXRhLmRlZmlzY2FuLmxpdmUvP25ldHdvcms9VGVzdE5ldCIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNTY0NjIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZGVnZW4uanMKICB2YXIgZGVnZW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDY2NjY2NjY2NiwKICAgIG5hbWU6ICJEZWdlbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJEZWdlbiIsCiAgICAgIHN5bWJvbDogIkRFR0VOIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZGVnZW4udGlwcyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuZGVnZW4udGlwcyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRlZ2VuIENoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmRlZ2VuLnRpcHMiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZGVnZW4udGlwcy9hcGkvdjIiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZGZrLmpzCiAgdmFyIGRmayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTM5MzUsCiAgICBuYW1lOiAiREZLIENoYWluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkpld2VsIiwKICAgICAgc3ltYm9sOiAiSkVXRUwiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3N1Ym5ldHMuYXZheC5uZXR3b3JrL2RlZmkta2luZ2RvbXMvZGZrLWNoYWluL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRGS1N1Ym5ldFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc3VibmV0cy5hdmF4Lm5ldHdvcmsvZGVmaS1raW5nZG9tcyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDc5MDU1MQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2RvZG9jaGFpblRlc3RuZXQuanMKICB2YXIgZG9kb2NoYWluVGVzdG5ldCA9IGRlZmluZUNoYWluKHsKICAgIGlkOiA1MzQ1NywKICAgIG5hbWU6ICJET0RPY2hhaW4gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJET0RPIiwgc3ltYm9sOiAiRE9ETyIgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9kb2RvY2hhaW4tdGVzdG5ldC5hbHQudGVjaG5vbG9neSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9kb2RvY2hhaW4tdGVzdG5ldC5hbHQudGVjaG5vbG9neS93cyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRPRE9jaGFpbiBUZXN0bmV0IChTZXBvbGlhKSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LXNjYW4uZG9kb2NoYWluLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZG9nZWNoYWluLmpzCiAgdmFyIGRvZ2VjaGFpbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMmUzLAogICAgbmFtZTogIkRvZ2VjaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJXcmFwcGVkIERvZ2Vjb2luIiwKICAgICAgc3ltYm9sOiAiV0RPR0UiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMuZG9nZWNoYWluLmRvZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRvZ2VDaGFpbkV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmRvZ2VjaGFpbi5kb2ciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZG9nZWNoYWluLmRvZy9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweDY4YTg2MDlhNjBhMDA4RUZBNjMzZGZkZWM1OTJjMDNCMDMwY0M1MDgiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjUzODQwMzEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kcmV5ZXJ4TWFpbm5ldC5qcwogIHZhciBkcmV5ZXJ4TWFpbm5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjM0NTEsCiAgICBuYW1lOiAiRHJleWVyWCBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJEcmV5ZXJYIiwKICAgICAgc3ltYm9sOiAiRFJYIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5kcmV5ZXJ4LmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRyZXllclggU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLmRyZXllcnguY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2RyZXllcnhUZXN0bmV0LmpzCiAgdmFyIGRyZXllcnhUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMzQ1MiwKICAgIG5hbWU6ICJEcmV5ZXJYIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkRyZXllclgiLAogICAgICBzeW1ib2w6ICJEUlgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHA6Ly90ZXN0bmV0LXJwYy5kcmV5ZXJ4LmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRyZXllclggVGVzdG5ldCBTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQtc2Nhbi5kcmV5ZXJ4LmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZWRnZWxlc3MuanMKICB2YXIgZWRnZWxlc3MgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIwMjYsCiAgICBuYW1lOiAiRWRnZWxlc3MgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRWRnZWxlc3MgV3JhcHBlZCBFVEgiLAogICAgICBzeW1ib2w6ICJFd0VUSCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZWRnZWxlc3MubmV0d29yay9odHRwIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5lZGdlbGVzcy5uZXR3b3JrL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWRnZWxlc3MgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuZWRnZWxlc3MubmV0d29yayIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lZGdlbGVzc1Rlc3RuZXQuanMKICB2YXIgZWRnZWxlc3NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDIsCiAgICBuYW1lOiAiRWRnZWxlc3MgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRWRnZWxlc3MgV3JhcHBlZCBFVEgiLAogICAgICBzeW1ib2w6ICJFd0VUSCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9lZGdlbGVzcy10ZXN0bmV0LnJwYy5jYWxkZXJhLnh5ei9odHRwIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2VkZ2VsZXNzLXRlc3RuZXQucnBjLmNhbGRlcmEueHl6L3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWRnZWxlc3MgVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmV4cGxvcmVyLmVkZ2VsZXNzLm5ldHdvcmsiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZWRnZXdhcmUuanMKICB2YXIgZWRnZXdhcmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIwMjEsCiAgICBuYW1lOiAiRWRnZXdhcmUgRWRnZUVWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVkZ2V3YXJlIiwKICAgICAgc3ltYm9sOiAiRURHIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZWRnZXdhcmUtZXZtLmplbGxpZWRvd2wubmV0Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWRnc2NhbiBieSBCaGFyYXRoY29vcmciLAogICAgICAgIHVybDogImh0dHBzOi8vZWRnc2Nhbi5saXZlIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2VkZ3NjYW4ubGl2ZS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTgxMTc4NzIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lZGdld2FyZVRlc3RuZXQuanMKICB2YXIgZWRnZXdhcmVUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDIyLAogICAgbmFtZTogIkJlcmVzaGVldCBCZXJlRVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiVGVzdG5ldCBFREciLAogICAgICBzeW1ib2w6ICJ0RURHIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYmVyZXNoZWV0LWV2bS5qZWxsaWVkb3dsLm5ldCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkVkZ3NjYW4gYnkgQmhhcmF0aGNvb3JnIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuZWRnc2Nhbi5saXZlIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQuZWRnc2Nhbi5saXZlL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lb24uanMKICB2YXIgZW9uID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3MzMyLAogICAgbmFtZTogIkhvcml6ZW4gRU9OIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlpFTiIsCiAgICAgIHN5bWJvbDogIlpFTiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2Vvbi1ycGMuaG9yaXplbmxhYnMuaW8vZXRodjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFT04gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZW9uLWV4cGxvcmVyLmhvcml6ZW5sYWJzLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lb3MuanMKICB2YXIgZW9zID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNzc3NywKICAgIG5hbWU6ICJFT1MgRVZNIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVPUyIsCiAgICAgIHN5bWJvbDogIkVPUyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FwaS5ldm0uZW9zbmV0d29yay5jb20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFT1MgRVZNIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmV2bS5lb3NuZXR3b3JrLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0uZW9zbmV0d29yay5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc5NDM5MzMKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lb3NUZXN0bmV0LmpzCiAgdmFyIGVvc1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE1NTU3LAogICAgbmFtZTogIkVPUyBFVk0gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFT1MiLAogICAgICBzeW1ib2w6ICJFT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkudGVzdG5ldC5ldm0uZW9zbmV0d29yay5jb20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFT1MgRVZNIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5ldm0uZW9zbmV0d29yay5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5ldm0uZW9zbmV0d29yay5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDkwNjc5NDAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZXRoZXJsaW5rLmpzCiAgdmFyIGV0aGVybGluayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDI3OTMsCiAgICBuYW1lOiAiRXRoZXJsaW5rIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlRleiIsCiAgICAgIHN5bWJvbDogIlhUWiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL25vZGUubWFpbm5ldC5ldGhlcmxpbmsuY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJsaW5rIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmV0aGVybGluay5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzM4OTkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ldGhlcmxpbmtUZXN0bmV0LmpzCiAgdmFyIGV0aGVybGlua1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODEyMywKICAgIG5hbWU6ICJFdGhlcmxpbmsgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJUZXoiLAogICAgICBzeW1ib2w6ICJYVFoiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ub2RlLmdob3N0bmV0LmV0aGVybGluay5jb20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcmxpbmsgVGVzdG5ldCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLmV0aGVybGluay5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2V2bW9zLmpzCiAgdmFyIGV2bW9zID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5MDAxLAogICAgbmFtZTogIkV2bW9zIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV2bW9zIiwKICAgICAgc3ltYm9sOiAiRVZNT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldGguYmQuZXZtb3Mub3JnOjg1NDUiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdm1vcyBCbG9jayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9lc2Nhbi5saXZlIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2V2bW9zVGVzdG5ldC5qcwogIHZhciBldm1vc1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDllMywKICAgIG5hbWU6ICJFdm1vcyBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV2bW9zIiwKICAgICAgc3ltYm9sOiAiRVZNT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldGguYmQuZXZtb3MuZGV2Ojg1NDUiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdm1vcyBUZXN0bmV0IEJsb2NrIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V2bS5ldm1vcy5kZXYvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2VrdGEuanMKICB2YXIgZWt0YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTk5NCwKICAgIG5hbWU6ICJFa3RhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVLVEEiLAogICAgICBzeW1ib2w6ICJFS1RBIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbWFpbi5la3RhLmlvIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWt0YXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZWt0YXNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZWt0YXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2VrdGFUZXN0bmV0LmpzCiAgdmFyIGVrdGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDA0LAogICAgbmFtZTogIkVrdGEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFS1RBIiwKICAgICAgc3ltYm9sOiAiRUtUQSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3Rlc3QuZWt0YS5pbzo4NTQ1Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGVzdCBFa3Rhc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0LmVrdGFzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3QuZWt0YXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mYW50b20uanMKICB2YXIgZmFudG9tID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNTAsCiAgICBuYW1lOiAiRmFudG9tIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkZhbnRvbSIsCiAgICAgIHN5bWJvbDogIkZUTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5hbmtyLmNvbS9mYW50b20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGVE1TY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2Z0bXNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5mdG1zY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzMwMDE5ODcKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mYW50b21Tb25pY1Rlc3RuZXQuanMKICB2YXIgZmFudG9tU29uaWNUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2NDI0MCwKICAgIG5hbWU6ICJGYW50b20gU29uaWMgT3BlbiBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJmYW50b20tc29uaWMtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJGYW50b20iLAogICAgICBzeW1ib2w6ICJGVE0iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGNhcGkuc29uaWMuZmFudG9tLm5ldHdvcmsiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGYW50b20gU29uaWMgT3BlbiBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3B1YmxpYy1zb25pYy5mYW50b20ubmV0d29yayIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmFudG9tVGVzdG5ldC5qcwogIHZhciBmYW50b21UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MDAyLAogICAgbmFtZTogIkZhbnRvbSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkZhbnRvbSIsCiAgICAgIHN5bWJvbDogIkZUTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy50ZXN0bmV0LmZhbnRvbS5uZXR3b3JrIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRlRNU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmZ0bXNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQuZnRtc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDgzMjg2ODgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmliby5qcwogIHZhciBmaWJvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjMwNiwKICAgIG5hbWU6ICJGaWJvIENoYWluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogImZpYm8iLAogICAgICBzeW1ib2w6ICJGSUJPIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbmV0d29yay5oenJvYy5hcnQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWJvU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLmZpYm9jaGFpbi5vcmciCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmlsZWNvaW4uanMKICB2YXIgZmlsZWNvaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxNCwKICAgIG5hbWU6ICJGaWxlY29pbiBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogImZpbGVjb2luIiwKICAgICAgc3ltYm9sOiAiRklMIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLm5vZGUuZ2xpZi5pby9ycGMvdjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWxmb3giLAogICAgICAgIHVybDogImh0dHBzOi8vZmlsZm94LmluZm8vZW4iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzMyODU5NAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZpbGVjb2luQ2FsaWJyYXRpb24uanMKICB2YXIgZmlsZWNvaW5DYWxpYnJhdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzE0MTU5LAogICAgbmFtZTogIkZpbGVjb2luIENhbGlicmF0aW9uIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogInRlc3RuZXQgZmlsZWNvaW4iLAogICAgICBzeW1ib2w6ICJ0RklMIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLmNhbGlicmF0aW9uLm5vZGUuZ2xpZi5pby9ycGMvdjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWxzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2NhbGlicmF0aW9uLmZpbHNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZpbGVjb2luSHlwZXJzcGFjZS5qcwogIHZhciBmaWxlY29pbkh5cGVyc3BhY2UgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxNDEsCiAgICBuYW1lOiAiRmlsZWNvaW4gSHlwZXJzcGFjZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJ0ZXN0bmV0IGZpbGVjb2luIiwKICAgICAgc3ltYm9sOiAidEZJTCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FwaS5oeXBlcnNwYWNlLm5vZGUuZ2xpZi5pby9ycGMvdjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWxmb3giLAogICAgICAgIHVybDogImh0dHBzOi8vaHlwZXJzcGFjZS5maWxmb3guaW5mby9lbiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmxhcmUuanMKICB2YXIgZmxhcmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0LAogICAgbmFtZTogIkZsYXJlIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiZmxhcmUiLAogICAgICBzeW1ib2w6ICJGTFIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9mbGFyZS1hcGkuZmxhcmUubmV0d29yay9leHQvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGbGFyZSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9mbGFyZS1leHBsb3Jlci5mbGFyZS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2ZsYXJlLWV4cGxvcmVyLmZsYXJlLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZsYXJlVGVzdG5ldC5qcwogIHZhciBmbGFyZVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExNCwKICAgIG5hbWU6ICJDb3N0b24yIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogImNvc3RvbjJmbGFyZSIsCiAgICAgIHN5bWJvbDogIkMyRkxSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vY29zdG9uMi1hcGkuZmxhcmUubmV0d29yay9leHQvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJDb3N0b24yIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2Nvc3RvbjItZXhwbG9yZXIuZmxhcmUubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9jb3N0b24yLWV4cGxvcmVyLmZsYXJlLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mbG93UHJldmlld25ldC5qcwogIHZhciBmbG93UHJldmlld25ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNjQ2LAogICAgbmFtZTogIkZsb3dFVk0gUHJldmlld25ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJGbG93IiwKICAgICAgc3ltYm9sOiAiRkxPVyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcHJldmlld25ldC5ldm0ubm9kZXMub25mbG93Lm9yZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlByZXZpZXduZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcHJldmlld25ldC5mbG93ZGl2ZXIuaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjIwNQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Zsb3dNYWlubmV0LmpzCiAgdmFyIGZsb3dNYWlubmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NDcsCiAgICBuYW1lOiAiRmxvd0VWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkZsb3ciLAogICAgICBzeW1ib2w6ICJGTE9XIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmV2bS5ub2Rlcy5vbmZsb3cub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFpbm5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9mbG93ZGl2ZXIuaW8iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmxvd1Rlc3RuZXQuanMKICB2YXIgZmxvd1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU0NSwKICAgIG5hbWU6ICJGbG93RVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRmxvdyIsCiAgICAgIHN5bWJvbDogIkZMT1ciCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuZXZtLm5vZGVzLm9uZmxvdy5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGbG93IERpdmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuZmxvd2RpdmVyLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEzNzUxOAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Zvcm1hLmpzCiAgdmFyIGZvcm1hID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5ODQxMjIsCiAgICBuYW1lOiAiRm9ybWEiLAogICAgbmV0d29yazogImZvcm1hIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIHN5bWJvbDogIlRJQSIsCiAgICAgIG5hbWU6ICJUSUEiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmZvcm1hLmFydCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly93cy5mb3JtYS5hcnQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGb3JtYSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5mb3JtYS5hcnQiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGQ1M0M2RkZCMTIzRjczNDlBMzI5ODBGODdmYWVEOEZmRGM5ZWYwNzkiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjUyNzA1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZm91bmRyeS5qcwogIHZhciBmb3VuZHJ5ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMTMzNywKICAgIG5hbWU6ICJGb3VuZHJ5IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cDovLzEyNy4wLjAuMTo4NTQ1Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzOi8vMTI3LjAuMC4xOjg1NDUiXQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZyYXh0YWwuanMKICB2YXIgc291cmNlSWQxMiA9IDE7CiAgdmFyIGZyYXh0YWwgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI1MiwKICAgIG5hbWU6ICJGcmF4dGFsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJGcmF4IEV0aGVyIiwgc3ltYm9sOiAiZnJ4RVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmZyYXguY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiZnJheHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZnJheHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5mcmF4c2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMTJdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg2NkNDOTE2RWQ1QzZDMkZBOTcwMTRmN0QxY0QxNDE1MjhBZTE3MWU0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDEyXTogewogICAgICAgICAgYWRkcmVzczogIjB4MzZjYjY1YzE5NjdBMEZiMEVFRTExNTY5QzUxQzJmMmFBMUNhNmY2RCIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MTM1MzIzCiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkMTJdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgzNEMwYkQ1ODc3QTVFZTcwOTlEMGY1Njg4RDY1RjRiQjkxNThCREUyIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMTkxMzUzMjMKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQxMgogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mcmF4dGFsVGVzdG5ldC5qcwogIHZhciBzb3VyY2VJZDEzID0gMTdlMzsKICB2YXIgZnJheHRhbFRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI1MjIsCiAgICBuYW1lOiAiRnJheHRhbCBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJGcmF4IEV0aGVyIiwgc3ltYm9sOiAiZnJ4RVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQuZnJheC5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJmcmF4c2NhbiB0ZXN0bmV0IiwKICAgICAgICB1cmw6ICJodHRwczovL2hvbGVza3kuZnJheHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1ob2xlc2t5LmZyYXhzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQxM106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDcxNUVBNjREQTEzRjRkMDgzMWVjZTRBZDNFOGMxYWEwMTMxNjdGMzIiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTNdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhCOWM2NEJmQTQ5OGQ1YjlhODM5OEVkNmY0NmViNzZkOTBkRTU1MDVkIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzE4NDE2CiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkMTNdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgwQmFhZkMyMTcxNjJmNjQ5MzA5MDlhRDlmMkIyNzEyNTEyMWQ2MzMyIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzE4NDE2CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTMKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZnVua2lNYWlubmV0LmpzCiAgdmFyIHNvdXJjZUlkMTQgPSAxOwogIHZhciBmdW5raU1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDMzOTc5LAogICAgbmFtZTogIkZ1bmtpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1tYWlubmV0LmZ1bmtpY2hhaW4uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRnVua2kgTWFpbm5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9mdW5raXNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cwogICAgfSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDE0CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Z1bmtpU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDE1ID0gMTExNTUxMTE7CiAgdmFyIGZ1bmtpU2Vwb2xpYSA9IGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAzMzk3OTAxLAogICAgbmV0d29yazogImZ1bmtpU2Vwb2xpYSIsCiAgICBuYW1lOiAiRnVua2kgU2Vwb2xpYSBTYW5kYm94IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2Z1bmtpLXRlc3RuZXQuYWx0LnRlY2hub2xvZ3kiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGdW5raSBTZXBvbGlhIFNhbmRib3ggRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS1zYW5kYm94LmZ1bmtpY2hhaW4uY29tLyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTYyMDIwNAogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZnVzZS5qcwogIHZhciBmdXNlID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjIsCiAgICBuYW1lOiAiRnVzZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRnVzZSIsIHN5bWJvbDogIkZVU0UiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcnBjLmZ1c2UuaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGdXNlIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmZ1c2UuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZnVzZS5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTYxNDY2MjgKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mdXNlU3BhcmtuZXQuanMKICB2YXIgZnVzZVNwYXJrbmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjMsCiAgICBuYW1lOiAiRnVzZSBTcGFya25ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU3BhcmsiLCBzeW1ib2w6ICJTUEFSSyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMuZnVzZXNwYXJrLmlvIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU3BhcmtlbnQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuZnVzZXNwYXJrLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmZ1c2VzcGFyay5pby9hcGkiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvaW90ZXguanMKICB2YXIgaW90ZXggPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQ2ODksCiAgICBuYW1lOiAiSW9UZVgiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSW9UZVgiLAogICAgICBzeW1ib2w6ICJJT1RYIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9iYWJlbC1hcGkubWFpbm5ldC5pb3RleC5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9iYWJlbC1hcGkubWFpbm5ldC5pb3RleC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIklvVGVYU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9pb3RleHNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjIxNjM2NzAKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pb3RleFRlc3RuZXQuanMKICB2YXIgaW90ZXhUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0NjkwLAogICAgbmFtZTogIklvVGVYIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSW9UZVgiLAogICAgICBzeW1ib2w6ICJJT1RYIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9iYWJlbC1hcGkudGVzdG5ldC5pb3RleC5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9iYWJlbC1hcGkudGVzdG5ldC5pb3RleC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIklvVGVYU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmlvdGV4c2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YjVjZWNENjg5NGM2ZjQ3M0VjNzI2QTE3NmYxNTEyMzk5QTJlMzU1ZCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDM0NzU5MgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9qYmMuanMKICB2YXIgamJjID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4ODk5LAogICAgbmFtZTogIkpJQkNIQUlOIEwxIiwKICAgIG5ldHdvcms6ICJqYmMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkpCQyIsIHN5bWJvbDogIkpCQyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1sMS5qaWJjaGFpbi5uZXQiXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLWwxLmppYmNoYWluLm5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwLWwxLmppYmNoYWluLm5ldCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHAtbDEuamliY2hhaW4ubmV0L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YzBDOEM0ODZEMTQ2NkM1N0VmZTEzQzJiZjAwMGQ0YzU2RjQ3Q0JkQyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMjk5MDQ4CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9qYmNUZXN0bmV0LmpzCiAgdmFyIGpiY1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDg4OTkxLAogICAgbmFtZTogIkppYmNoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInRKQkMiLCBzeW1ib2w6ICJ0SkJDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQuamliY2hhaW4ubmV0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHAudGVzdG5ldC5qaWJjaGFpbi5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwLnRlc3RuZXQuamliY2hhaW4ubmV0L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YTFhODU4YWQ5MDQxQjQ3NDFlNjIwMzU1YTNGOTZCM2M3OGU3MGVjRSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAzMjg0OAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rYXJ1cmEuanMKICB2YXIga2FydXJhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2ODYsCiAgICBuYW1lOiAiS2FydXJhIiwKICAgIG5ldHdvcms6ICJrYXJ1cmEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkthcnVyYSIsCiAgICAgIHN5bWJvbDogIktBUiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgcHVibGljOiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC1ycGMta2FydXJhLmFjYS1hcGkubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ldGgtcnBjLWthcnVyYS5hY2EtYXBpLm5ldHdvcmsiXQogICAgICB9LAogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC1ycGMta2FydXJhLmFjYS1hcGkubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ldGgtcnBjLWthcnVyYS5hY2EtYXBpLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJLYXJ1cmEgQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmthcnVyYS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2Jsb2Nrc2NvdXQua2FydXJhLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ29iaS5qcwogIHZhciBnb2JpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjYzLAogICAgbmFtZTogIkhvcml6ZW4gR29iaSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlRlc3QgWkVOIiwKICAgICAgc3ltYm9sOiAidFpFTiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2dvYmktdGVzdG5ldC5ob3JpemVubGFicy5pby9ldGh2MSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkdvYmkgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZ29iaS1leHBsb3Jlci5ob3JpemVuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ29lcmxpLmpzCiAgdmFyIGdvZXJsaSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNSwKICAgIG5hbWU6ICJHb2VybGkiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkdvZXJsaSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5hbmtyLmNvbS9ldGhfZ29lcmxpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2dvZXJsaS5ldGhlcnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLWdvZXJsaS5ldGhlcnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIGVuc1JlZ2lzdHJ5OiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIKICAgICAgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhmYzRBQzc1QzQ2QzkxNGFGNTg5MmQ2ZDNlRkZjZWJENzkxNzI5M0YxIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEwMzM5MjA2CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDY1MDc2NzAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ25vc2lzLmpzCiAgdmFyIGdub3NpcyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAwLAogICAgbmFtZTogIkdub3NpcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJHbm9zaXMiLAogICAgICBzeW1ib2w6ICJ4REFJIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ25vc2lzY2hhaW4uY29tIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5nbm9zaXNjaGFpbi5jb20vd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiR25vc2lzc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9nbm9zaXNzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5nbm9zaXNzY2FuLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMTAyMjQ5MQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2dub3Npc0NoaWFkby5qcwogIHZhciBnbm9zaXNDaGlhZG8gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMjAwLAogICAgbmFtZTogIkdub3NpcyBDaGlhZG8iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiR25vc2lzIiwKICAgICAgc3ltYm9sOiAieERBSSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmNoaWFkb2NoYWluLm5ldCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuY2hpYWRvY2hhaW4ubmV0L3dzcyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5jaGlhZG9jaGFpbi5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5jaGlhZG9jaGFpbi5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NjczMTMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ3Jhdml0eS5qcwogIHZhciBncmF2aXR5ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjI1LAogICAgbmFtZTogIkdyYXZpdHkgQWxwaGEgTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRyIsIHN5bWJvbDogIkciLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ3Jhdml0eS54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJHcmF2aXR5IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmdyYXZpdHkueHl6IiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmdyYXZpdHkueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4ZjhhYzRCRUIyRjc1ZDJjRkZiNTg4YzYzMjUxMzQ3ZmRENjI5QjkyYyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNjg1MQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hhbS5qcwogIHZhciBoYW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDUxMTIsCiAgICBuYW1lOiAiSGFtIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkhhbSIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmhhbS5mdW4iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLmhhbS5mdW4iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIYW0gQ2hhaW4gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuaGFtLmZ1biIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5oYW0uZnVuL2FwaS92MiIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9oYXJkaGF0LmpzCiAgdmFyIGhhcmRoYXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxMzM3LAogICAgbmFtZTogIkhhcmRoYXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cDovLzEyNy4wLjAuMTo4NTQ1Il0gfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9oYXJtb255T25lLmpzCiAgdmFyIGhhcm1vbnlPbmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE2NjY2ZTUsCiAgICBuYW1lOiAiSGFybW9ueSBPbmUiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkhhcm1vbnkiLAogICAgICBzeW1ib2w6ICJPTkUiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5hbmtyLmNvbS9oYXJtb255Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiSGFybW9ueSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5oYXJtb255Lm9uZSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDE4NTc1MwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hhcXFNYWlubmV0LmpzCiAgdmFyIGhhcXFNYWlubmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMTIzNSwKICAgIG5hbWU6ICJIQVFRIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSXNsYW1pYyBDb2luIiwKICAgICAgc3ltYm9sOiAiSVNMTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmV0aC5oYXFxLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIQVFRIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmhhcXEubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5oYXFxLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hhcXFUZXN0ZWRnZTIuanMKICB2YXIgaGFxcVRlc3RlZGdlMiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTQyMTEsCiAgICBuYW1lOiAiSEFRUSBUZXN0ZWRnZSAyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIklzbGFtaWMgQ29pbiIsCiAgICAgIHN5bWJvbDogIklTTE1UIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZXRoLnRlc3RlZGdlMi5oYXFxLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIQVFRIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RlZGdlMi5oYXFxLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdGVkZ2UyLmhhcXEubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvaGVkZXJhLmpzCiAgdmFyIGhlZGVyYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjk1LAogICAgbmFtZTogIkhlZGVyYSBNYWlubmV0IiwKICAgIG5ldHdvcms6ICJoZWRlcmEtbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBzeW1ib2w6ICJIQkFSIiwKICAgICAgbmFtZTogIkhCQVIiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5oYXNoaW8uaW8vYXBpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiSGFzaHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vaGFzaHNjYW4uaW8vbWFpbm5ldCIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hlZGVyYVRlc3RuZXQuanMKICB2YXIgaGVkZXJhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjk2LAogICAgbmFtZTogIkhlZGVyYSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJoZWRlcmEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBzeW1ib2w6ICJIQkFSIiwKICAgICAgbmFtZTogIkhCQVIiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5oYXNoaW8uaW8vYXBpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiSGFzaHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vaGFzaHNjYW4uaW8vdGVzdG5ldCIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvaGVkZXJhUHJldmlld25ldC5qcwogIHZhciBoZWRlcmFQcmV2aWV3bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyOTcsCiAgICBuYW1lOiAiSGVkZXJhIFByZXZpZXduZXQiLAogICAgbmV0d29yazogImhlZGVyYS1wcmV2aWV3bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIHN5bWJvbDogIkhCQVIiLAogICAgICBuYW1lOiAiSEJBUiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9wcmV2aWV3bmV0Lmhhc2hpby5pby9hcGkiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIYXNoc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9oYXNoc2Nhbi5pby9wcmV2aWV3bmV0IgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ob2xlc2t5LmpzCiAgdmFyIGhvbGVza3kgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE3ZTMsCiAgICBuYW1lOiAiSG9sZXNreSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiSG9sZXNreSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aGVyZXVtLWhvbGVza3ktcnBjLnB1YmxpY25vZGUuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2hvbGVza3kuZXRoZXJzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc3CiAgICAgIH0sCiAgICAgIGVuc1JlZ2lzdHJ5OiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA4MDE2MTMKICAgICAgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhhNkFDOTM1RDQ5NzFFM0NEMTMzYjk1MGFFMDUzYkVDRDE2ZkU3ZjNiIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDk3MzQ4NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pbW11dGFibGVaa0V2bS5qcwogIHZhciBpbW11dGFibGVaa0V2bSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTMzNzEsCiAgICBuYW1lOiAiSW1tdXRhYmxlIHprRVZNIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkltbXV0YWJsZSBDb2luIiwKICAgICAgc3ltYm9sOiAiSU1YIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuaW1tdXRhYmxlLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkltbXV0YWJsZSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5pbW11dGFibGUuY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmltbXV0YWJsZS5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHgyMzZiZEE0NTg5ZTQ0ZTY4NTBmNWFDNmE3NEJmQ2EzOThhODZjNmMwIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQzMzU5NzIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pbW11dGFibGVaa0V2bVRlc3RuZXQuanMKICB2YXIgaW1tdXRhYmxlWmtFdm1UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMzQ3MywKICAgIG5hbWU6ICJJbW11dGFibGUgemtFVk0gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJJbW11dGFibGUgQ29pbiIsCiAgICAgIHN5bWJvbDogIklNWCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQuaW1tdXRhYmxlLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkltbXV0YWJsZSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQuaW1tdXRhYmxlLmNvbS8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweDJDQzc4N0VkMzY0NjAwQjAyMjIzNjFDNDE4ODMwOEZhOEU2OGJBNjAiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTk3NzM5MQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pbkVWTS5qcwogIHZhciBpbkVWTSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjUyNSwKICAgIG5hbWU6ICJpbkVWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkluamVjdGl2ZSIsCiAgICAgIHN5bWJvbDogIklOSiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL21haW5uZXQucnBjLmluZXZtLmNvbS9odHRwIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiaW5FVk0gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vaW5ldm0uY2FsZGVyYWV4cGxvcmVyLnh5eiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9pbmV2bS5jYWxkZXJhZXhwbG9yZXIueHl6L2FwaS92MiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTg2MDYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pb3RhLmpzCiAgdmFyIGlvdGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDg4MjIsCiAgICBuYW1lOiAiSU9UQSBFVk0iLAogICAgbmV0d29yazogImlvdGFldm0iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSU9UQSIsCiAgICAgIHN5bWJvbDogIklPVEEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2pzb24tcnBjLmV2bS5pb3RhbGVkZ2VyLm5ldCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly93cy5qc29uLXJwYy5ldm0uaW90YWxlZGdlci5uZXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0uaW90YS5vcmciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLmlvdGEub3JnL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pb3RhVGVzdG5ldC5qcwogIHZhciBpb3RhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTA3NSwKICAgIG5hbWU6ICJJT1RBIEVWTSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJpb3RhZXZtLXRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSU9UQSIsCiAgICAgIHN5bWJvbDogIklPVEEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2pzb24tcnBjLmV2bS50ZXN0bmV0LmlvdGFsZWRnZXIubmV0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLmpzb24tcnBjLmV2bS50ZXN0bmV0LmlvdGFsZWRnZXIubmV0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLnRlc3RuZXQuaW90YWxlZGdlci5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLnRlc3RuZXQuaW90YWxlZGdlci5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rYWthcm90U2Vwb2xpYS5qcwogIHZhciBrYWthcm90U2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTgwMjIwMzc2NCwKICAgIG5hbWU6ICJLYWthcm90IFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEtcnBjLmtha2Fyb3Qub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiS2FrYXJvdCBTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEua2FrYXJvdHNjYW4ub3JnIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rYXZhLmpzCiAgdmFyIGthdmEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIyMjIsCiAgICBuYW1lOiAiS2F2YSBFVk0iLAogICAgbmV0d29yazogImthdmEtbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiS2F2YSIsCiAgICAgIHN5bWJvbDogIktBVkEiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2V2bS5rYXZhLmlvIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiS2F2YSBFVk0gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8va2F2YXNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2thdmFzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzY2MTE2NQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva2F2YVRlc3RuZXQuanMKICB2YXIga2F2YVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIyMjEsCiAgICBuYW1lOiAiS2F2YSBFVk0gVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAia2F2YS10ZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJLYXZhIiwKICAgICAgc3ltYm9sOiAiS0FWQSIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZXZtLnRlc3RuZXQua2F2YS5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkthdmEgRVZNIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5rYXZhc2Nhbi5jb20vIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQua2F2YXNjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4RGYxRDcyNEE3MTY2MjYxZUVCMDE1NDE4ZmU4Yzc2NzlCQkVhN2ZkNiIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3MjQyMTc5CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2tjYy5qcwogIHZhciBrY2MgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMyMSwKICAgIG5hbWU6ICJLQ0MgTWFpbm5ldCIsCiAgICBuZXR3b3JrOiAiS0NDIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiS0NTIiwKICAgICAgc3ltYm9sOiAiS0NTIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9rY2MtcnBjLmNvbSJdCiAgICAgIH0sCiAgICAgIHB1YmxpYzogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9rY2MtcnBjLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7IG5hbWU6ICJLQ0MgRXhwbG9yZXIiLCB1cmw6ICJodHRwczovL2V4cGxvcmVyLmtjYy5pbyIgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTc2MDQzMAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva2xheXRuLmpzCiAgdmFyIGtsYXl0biA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogODIxNywKICAgIG5hbWU6ICJLbGF5dG4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiS2xheXRuIiwKICAgICAgc3ltYm9sOiAiS0xBWSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3B1YmxpYy1lbi1jeXByZXNzLmtsYXl0bi5uZXQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJLbGF5dG5TY29wZSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY29wZS5rbGF5dG4uY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDk2MDAyNDE1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva2xheXRuQmFvYmFiLmpzCiAgdmFyIGtsYXl0bkJhb2JhYiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAwMSwKICAgIG5hbWU6ICJLbGF5dG4gQmFvYmFiIFRlc3RuZXQiLAogICAgbmV0d29yazogImtsYXl0bi1iYW9iYWIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQmFvYmFiIEtsYXl0biIsCiAgICAgIHN5bWJvbDogIktMQVkiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9wdWJsaWMtZW4tYmFvYmFiLmtsYXl0bi5uZXQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJLbGF5dG5TY29wZSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9iYW9iYWIua2xheXRuc2NvcGUuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEyMzM5MDU5MwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rb2kuanMKICB2YXIga29pID0gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDcwMSwKICAgIG5hbWU6ICJLb2kgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJLb2kgTmV0d29yayBOYXRpdmUgVG9rZW4iLAogICAgICBzeW1ib2w6ICJLUklORyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8va29pLXJwYy5kYXJ3aW5pYS5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2tvaS1ycGMuZGFyd2luaWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7IG5hbWU6ICJCbG9ja3Njb3V0IiwgdXJsOiAiaHR0cHM6Ly9rb2ktc2Nhbi5kYXJ3aW5pYS5uZXR3b3JrIiB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE4MDAwMQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rcm9tYS5qcwogIHZhciBrcm9tYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjU1LAogICAgbmFtZTogIktyb21hIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFVEgiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcGkua3JvbWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIktyb21hIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2Jsb2Nrc2NvdXQua3JvbWEubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0Lmtyb21hLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva3JvbWFTZXBvbGlhLmpzCiAgdmFyIGtyb21hU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjM1OCwKICAgIG5hbWU6ICJLcm9tYSBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZXBvbGlhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vYXBpLnNlcG9saWEua3JvbWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIktyb21hIFNlcG9saWEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5zZXBvbGlhLmtyb21hLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5zZXBvbGlhLmtyb21hLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9sM3guanMKICB2YXIgbDN4ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjMyNCwKICAgIG5hbWU6ICJMM1ggUHJvdG9jb2wiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLW1haW5uZXQubDN4LmNvbSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMtbWFpbm5ldC5sM3guY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTDNYIE1haW5uZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIubDN4LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5sM3guY29tL2FwaS92MiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2wzeFRlc3RuZXQuanMKICB2YXIgbDN4VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTIzMjUsCiAgICBuYW1lOiAiTDNYIFByb3RvY29sIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQubDN4LmNvbSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMtdGVzdG5ldC5sM3guY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTDNYIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXItdGVzdG5ldC5sM3guY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLXRlc3RuZXQubDN4LmNvbS9hcGkvdjIiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2xpZ2h0bGlua1BlZ2FzdXMuanMKICB2YXIgbGlnaHRsaW5rUGVnYXN1cyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTg5MSwKICAgIG5hbWU6ICJMaWdodExpbmsgUGVnYXN1cyBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJsaWdodGxpbmstcGVnYXN1cyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcmVwbGljYXRvci5wZWdhc3VzLmxpZ2h0bGluay5pby9ycGMvdjEiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJMaWdodExpbmsgUGVnYXN1cyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wZWdhc3VzLmxpZ2h0bGluay5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGlnaHRsaW5rUGhvZW5peC5qcwogIHZhciBsaWdodGxpbmtQaG9lbml4ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxODkwLAogICAgbmFtZTogIkxpZ2h0TGluayBQaG9lbml4IE1haW5uZXQiLAogICAgbmV0d29yazogImxpZ2h0bGluay1waG9lbml4IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9yZXBsaWNhdG9yLnBob2VuaXgubGlnaHRsaW5rLmlvL3JwYy92MSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkxpZ2h0TGluayBQaG9lbml4IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Bob2VuaXgubGlnaHRsaW5rLmlvIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGluZWEuanMKICB2YXIgbGluZWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU5MTQ0LAogICAgbmFtZTogIkxpbmVhIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkxpbmVhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmxpbmVhLmJ1aWxkIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5saW5lYS5idWlsZCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV0aGVyc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9saW5lYXNjYW4uYnVpbGQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmxpbmVhc2Nhbi5idWlsZC9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2xpbmVhR29lcmxpLmpzCiAgdmFyIGxpbmVhR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTE0MCwKICAgIG5hbWU6ICJMaW5lYSBHb2VybGkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTGluZWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ29lcmxpLmxpbmVhLmJ1aWxkIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5nb2VybGkubGluZWEuYnVpbGQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLmxpbmVhc2Nhbi5idWlsZCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktZ29lcmxpLmxpbmVhc2Nhbi5idWlsZC9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDk4NjIzCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2xpbmVhU2Vwb2xpYS5qcwogIHZhciBsaW5lYVNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU5MTQxLAogICAgbmFtZTogIkxpbmVhIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTGluZWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc2Vwb2xpYS5saW5lYS5idWlsZCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuc2Vwb2xpYS5saW5lYS5idWlsZCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV0aGVyc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZXBvbGlhLmxpbmVhc2Nhbi5idWlsZCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5saW5lYXNjYW4uYnVpbGQvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDIyNzQyNwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9saW5lYVRlc3RuZXQuanMKICB2YXIgbGluZWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTE0MCwKICAgIG5hbWU6ICJMaW5lYSBHb2VybGkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTGluZWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ29lcmxpLmxpbmVhLmJ1aWxkIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5nb2VybGkubGluZWEuYnVpbGQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLmxpbmVhc2Nhbi5idWlsZCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGkubGluZWFzY2FuLmJ1aWxkL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0OTg2MjMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGlzay5qcwogIHZhciBsaXNrID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAxMTM1LAogICAgbmFtZTogIkxpc2siLAogICAgbmV0d29yazogImxpc2siLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5hcGkubGlzay5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL2Jsb2Nrc2NvdXQubGlzay5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5saXNrLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweEE5ZDcxRTFkZDdjYTI2RjI2ZTY1NkU2NmQ2QUE4MWVkN2Y3NDViZjAiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGlza1NlcG9saWEuanMKICB2YXIgc291cmNlSWQxNiA9IDExMTU1MTExOwogIHZhciBsaXNrU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogNDIwMiwKICAgIG5ldHdvcms6ICJsaXNrLXNlcG9saWEiLAogICAgbmFtZTogIkxpc2sgU2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2Vwb2xpYSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zZXBvbGlhLWFwaS5saXNrLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS1ibG9ja3Njb3V0Lmxpc2suY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NlcG9saWEtYmxvY2tzY291dC5saXNrLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQxNl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEEwRTM1RjU2QzMxOERFMWJENUQ5Y2E2QTk0RmU3ZTM3QzU2NjMzNDgiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTZdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhlM2Q5MEYyMTQ5MDY4NkVjN2VGMzdCRTc4OEUwMmRmQzEyNzg3MjY0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDE2XTogewogICAgICAgICAgYWRkcmVzczogIjB4MUZiMzBlNDQ2ZUE3OTFjZDFmMDExNjc1RTVGM2Y1MzExYjcwZmFGNSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTYKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbG9jYWxob3N0LmpzCiAgdmFyIGxvY2FsaG9zdCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTMzNywKICAgIG5hbWU6ICJMb2NhbGhvc3QiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cDovLzEyNy4wLjAuMTo4NTQ1Il0gfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9sdWtzby5qcwogIHZhciBsdWtzbyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDIsCiAgICBuZXR3b3JrOiAibHVrc28iLAogICAgbmFtZTogIkxVS1NPIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJMVUtTTyIsCiAgICAgIHN5bWJvbDogIkxZWCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMubWFpbm5ldC5sdWtzby5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLXJwYy5tYWlubmV0Lmx1a3NvLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJMVUtTTyBNYWlubmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmV4ZWN1dGlvbi5tYWlubmV0Lmx1a3NvLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmV4cGxvcmVyLmV4ZWN1dGlvbi5tYWlubmV0Lmx1a3NvLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ2ODE4MwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2x1a3NvVGVzdG5ldC5qcwogIHZhciBsdWtzb1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyMDEsCiAgICBuYW1lOiAiTFVLU08gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJMVUtTTyBUZXN0bmV0IiwKICAgICAgc3ltYm9sOiAiTFlYdCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQubHVrc28ubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly93cy1ycGMudGVzdG5ldC5sdWtzby5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTFVLU08gVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5leGVjdXRpb24udGVzdG5ldC5sdWtzby5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5leHBsb3Jlci5leGVjdXRpb24udGVzdG5ldC5sdWtzby5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA2MDUzNDgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbHljYW4uanMKICB2YXIgbHljYW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDcyMSwKICAgIG5hbWU6ICJMeWNhbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJMeWNhbiIsCiAgICAgIHN5bWJvbDogIkxZQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbCiAgICAgICAgICAiaHR0cHM6Ly9ycGMubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgImh0dHBzOi8vdXMtZWFzdC5seWNhbmNoYWluLmNvbSIsCiAgICAgICAgICAiaHR0cHM6Ly91cy13ZXN0Lmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJodHRwczovL2V1LW5vcnRoLmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJodHRwczovL2V1LXdlc3QubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgImh0dHBzOi8vYXNpYS1zb3V0aGVhc3QubHljYW5jaGFpbi5jb20iCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsKICAgICAgICAgICJ3c3M6Ly9ycGMubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgIndzczovL3VzLWVhc3QubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgIndzczovL3VzLXdlc3QubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgIndzczovL2V1LW5vcnRoLmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJ3c3M6Ly9ldS13ZXN0Lmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJ3c3M6Ly9hc2lhLXNvdXRoZWFzdC5seWNhbmNoYWluLmNvbSIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkx5Y2FuIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmx5Y2FuY2hhaW4uY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2x5cmEuanMKICB2YXIgbHlyYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogOTU3LAogICAgbmFtZTogIkx5cmEgQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmx5cmEuZmluYW5jZSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkx5cmEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIubHlyYS5maW5hbmNlIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmx5cmEuZmluYW5jZS9hcGkvdjIiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTkzNTE5OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21haW5uZXQuanMKICB2YXIgbWFpbm5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMSwKICAgIG5hbWU6ICJFdGhlcmV1bSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9jbG91ZGZsYXJlLWV0aC5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZXRoZXJzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5ldGhlcnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIGVuc1JlZ2lzdHJ5OiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIKICAgICAgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjZTAxZjhlZWU3RTQ3OUM5MjhGODkxOWFiRDUzRTU1M2EzNkNlRjY3IiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MjU4MjEzCiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE0MzUzNjAxCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWFuZGFsYS5qcwogIHZhciBtYW5kYWxhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTUsCiAgICBuYW1lOiAiTWFuZGFsYSBUQzkiLAogICAgbmV0d29yazogIm1hbmRhbGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIk1hbmRhbGEiLAogICAgICBzeW1ib2w6ICJtQUNBIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZXRoLXJwYy10YzkuYWNhLXN0YWdpbmcubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ldGgtcnBjLXRjOS5hY2Etc3RhZ2luZy5uZXR3b3JrIl0KICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldGgtcnBjLXRjOS5hY2Etc3RhZ2luZy5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2V0aC1ycGMtdGM5LmFjYS1zdGFnaW5nLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNYW5kYWxhIEJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5tYW5kYWxhLmFjYS1zdGFnaW5nLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5tYW5kYWxhLmFjYS1zdGFnaW5nLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tYW50YS5qcwogIHZhciBtYW50YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY5LAogICAgbmFtZTogIk1hbnRhIFBhY2lmaWMgTWFpbm5ldCIsCiAgICBuZXR3b3JrOiAibWFudGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRVRIIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcGFjaWZpYy1ycGMubWFudGEubmV0d29yay9odHRwIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFudGEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGFjaWZpYy1leHBsb3Jlci5tYW50YS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3BhY2lmaWMtZXhwbG9yZXIubWFudGEubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzMyODkwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWFudGFTZXBvbGlhVGVzdG5ldC5qcwogIHZhciBtYW50YVNlcG9saWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNDQxMDA2LAogICAgbmFtZTogIk1hbnRhIFBhY2lmaWMgU2Vwb2xpYSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJtYW50YS1zZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUSCIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcGFjaWZpYy1ycGMuc2Vwb2xpYS10ZXN0bmV0Lm1hbnRhLm5ldHdvcmsvaHR0cCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1hbnRhIFNlcG9saWEgVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wYWNpZmljLWV4cGxvcmVyLnNlcG9saWEtdGVzdG5ldC5tYW50YS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3BhY2lmaWMtZXhwbG9yZXIuc2Vwb2xpYS10ZXN0bmV0Lm1hbnRhLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTU0OTE4ZjdCNTI1QzhkZjg5NDY2ODg0NjUwNjc2NzQxMmI1M0UzIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ3OTU4NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tYW50YVRlc3RuZXQuanMKICB2YXIgbWFudGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNDQxMDA1LAogICAgbmFtZTogIk1hbnRhIFBhY2lmaWMgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAibWFudGEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFVEgiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9tYW50YS10ZXN0bmV0LmNhbGRlcmFjaGFpbi54eXovaHR0cCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1hbnRhIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGFjaWZpYy1leHBsb3Jlci50ZXN0bmV0Lm1hbnRhLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vcGFjaWZpYy1leHBsb3Jlci50ZXN0bmV0Lm1hbnRhLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHgyMTFCMTY0M2I5NUZlNzZmMTFlRDg4ODBFRTgxMEFCRDlBNGNmNTZDIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQxOTkxNQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tYW50bGUuanMKICB2YXIgbWFudGxlID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1ZTMsCiAgICBuYW1lOiAiTWFudGxlIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1OVCIsCiAgICAgIHN5bWJvbDogIk1OVCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5tYW50bGUueHl6Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFudGxlIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL21hbnRsZXNjYW4ueHl6LyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkubWFudGxlc2Nhbi54eXovYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwNDcxNwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21hbnRsZVNlcG9saWFUZXN0bmV0LmpzCiAgdmFyIG1hbnRsZVNlcG9saWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1MDAzLAogICAgbmFtZTogIk1hbnRsZSBTZXBvbGlhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTU5UIiwKICAgICAgc3ltYm9sOiAiTU5UIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcnBjLnNlcG9saWEubWFudGxlLnh5eiJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1hbnRsZSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnNlcG9saWEubWFudGxlLnh5ei8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuc2Vwb2xpYS5tYW50bGUueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0NTg0MDEyCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21hbnRsZVRlc3RuZXQuanMKICB2YXIgbWFudGxlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTAwMSwKICAgIG5hbWU6ICJNYW50bGUgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJNTlQiLAogICAgICBzeW1ib2w6ICJNTlQiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVzdG5ldC5tYW50bGUueHl6Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFudGxlIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5tYW50bGUueHl6IiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQubWFudGxlLnh5ei9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTYxMzMzCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21lcmxpbi5qcwogIHZhciBtZXJsaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyMDAsCiAgICBuYW1lOiAiTWVybGluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCVEMiLAogICAgICBzeW1ib2w6ICJCVEMiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5tZXJsaW5jaGFpbi5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5tZXJsaW5jaGFpbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLm1lcmxpbmNoYWluLmlvL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tZXRhY2hhaW4uanMKICB2YXIgbWV0YWNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1NzEsCiAgICBuYW1lOiAiTWV0YUNoYWluIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk1ldGF0aW1lIENvaW4iLCBzeW1ib2w6ICJNVEMiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMubWV0YXRpbWUuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWV0YUV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLm1ldGF0aW1lLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWV0YWNoYWluSXN0YW5idWwuanMKICB2YXIgbWV0YWNoYWluSXN0YW5idWwgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0NTMsCiAgICBuYW1lOiAiTWV0YUNoYWluIElzdGFuYnVsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJNZXRhdGltZSBDb2luIiwgc3ltYm9sOiAiTVRDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vaXN0YW5idWwtcnBjLm1ldGFjaGFpbi5kZXYiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNZXRhRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vaXN0YW5idWwtZXhwbG9yZXIubWV0YWNoYWluLmRldiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGFsTDIuanMKICB2YXIgc291cmNlSWQxNyA9IDE7CiAgdmFyIG1ldGFsTDIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDE3NTAsCiAgICBuYW1lOiAiTWV0YWwgTDIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5tZXRhbGwyLmNvbSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMubWV0YWxsMi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5tZXRhbGwyLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5tZXRhbGwyLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQxN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDNCMUY3YURhMEZjYzI2QjEzNTE1YWY3NTJEZDA3ZkIxQ0FjMTE0MjYiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDE3XTogewogICAgICAgICAgYWRkcmVzczogIjB4M0YzN2FCZEUyQzZiNUIyZWQ2RjgwNDU3ODdEZjFFRDFFMzc1Mzk1NiIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQxN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDZkMGY2NUQ1OWI1NUIwRkVDNWQyZDE1MzY1MTU0RGNBREMxNDBCRjMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTcKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWV0ZXIuanMKICB2YXIgbWV0ZXIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgyLAogICAgbmFtZTogIk1ldGVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1UUiIsCiAgICAgIHN5bWJvbDogIk1UUiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5tZXRlci5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1ldGVyU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLm1ldGVyLmlvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGVyVGVzdG5ldC5qcwogIHZhciBtZXRlclRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgzLAogICAgbmFtZTogIk1ldGVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTVRSIiwKICAgICAgc3ltYm9sOiAiTVRSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcnBjdGVzdC5tZXRlci5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1ldGVyVGVzdG5ldFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi13YXJyaW5nc3Rha2VzLm1ldGVyLmlvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGlzLmpzCiAgdmFyIG1ldGlzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDg4LAogICAgbmFtZTogIk1ldGlzIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1ldGlzIiwKICAgICAgc3ltYm9sOiAiTUVUSVMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hbmRyb21lZGEubWV0aXMuaW8vP293bmVyPTEwODgiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNZXRpcyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5tZXRpcy5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkucm91dGVzY2FuLmlvL3YyL25ldHdvcmsvbWFpbm5ldC9ldm0vNDMxMTQvZXRoZXJzY2FuL2FwaSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJBbmRyb21lZGEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYW5kcm9tZWRhLWV4cGxvcmVyLm1ldGlzLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FuZHJvbWVkYS1leHBsb3Jlci5tZXRpcy5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjMzODU1MgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGlzR29lcmxpLmpzCiAgdmFyIG1ldGlzR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTksCiAgICBuYW1lOiAiTWV0aXMgR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1ldGlzIEdvZXJsaSIsCiAgICAgIHN5bWJvbDogIk1FVElTIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZ29lcmxpLmdhdGV3YXkubWV0aXNkZXZvcHMubGluayJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1ldGlzIEdvZXJsaSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9nb2VybGkuZXhwbG9yZXIubWV0aXNkZXZvcHMubGluayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGkuZXhwbG9yZXIubWV0aXNkZXZvcHMubGluay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTAwNjIwNwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldi5qcwogIHZhciBtZXYgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDc1MTgsCiAgICBuYW1lOiAiTUVWZXJzZSBDaGFpbiBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1FVmVyc2UiLAogICAgICBzeW1ib2w6ICJNRVYiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5tZXZlcnNlbWFpbm5ldC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3d3dy5tZXZlcnNlc2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA4Njg4MTM0MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldlRlc3RuZXQuanMKICB2YXIgbWV2VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDc1OSwKICAgIG5hbWU6ICJNRVZlcnNlIENoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTUVWZXJzZSIsCiAgICAgIHN5bWJvbDogIk1FViIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLm1ldmVyc2V0ZXN0bmV0LmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5tZXZlcnNlc2Nhbi5pby8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjQzNzExMTUKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWludFNlcG9saWFUZXN0bmV0LmpzCiAgdmFyIG1pbnRTZXBvbGlhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY4NiwKICAgIG5hbWU6ICJNaW50IFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LXJwYy5taW50Y2hhaW4uaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNaW50Y2hhaW4gVGVzdG5ldCBleHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLm1pbnRjaGFpbi5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9kZS5qcwogIHZhciBzb3VyY2VJZDE4ID0gMTsKICB2YXIgbW9kZSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzQ0NDMsCiAgICBuYW1lOiAiTW9kZSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQubW9kZS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTW9kZXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vbW9kZXNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjQ2NTg4MgogICAgICB9LAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDE4XTogewogICAgICAgICAgYWRkcmVzczogIjB4NDMxN2JhMTQ2RDQ5MzNEODg5NTE4YTNlNUUxMUZlN2E1MzE5OWIwNCIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDE4XTogewogICAgICAgICAgYWRkcmVzczogIjB4OEIzNGIxNGM3YzcxMjM0NTlDZjMwNzZiOENiOTI5QkUwOTdkMEMwNyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQxOF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDczNWFEQmJFNzIyMjZCRDUyZTgxOEU3MTgxOTUzZjQyRTNiMEZGMjEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTgKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9kZVRlc3RuZXQuanMKICB2YXIgc291cmNlSWQxOSA9IDExMTU1MTExOwogIHZhciBtb2RlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogOTE5LAogICAgbmFtZTogIk1vZGUgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLm1vZGUubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5leHBsb3Jlci5tb2RlLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2Vwb2xpYS5leHBsb3Jlci5tb2RlLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMTldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgyNjM0QkQ2NWJhMjdBQjYzODExYzc0QTYzMTE4QUNiMzEyNzAxQmZhIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzc3ODM5MwogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgzMjBlMTU4MGVmZkYzN0UwMDhGMUM5MjcwMGQxZUJhNDdjMUIyM2ZEIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzc3ODM5NQogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDE5XTogewogICAgICAgICAgYWRkcmVzczogIjB4YkM1QzY3OTg3OUIyOTY1Mjk2NzU2Q0Q5NTlDM0M3Mzk3Njk5OTVFMiIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDM3NzgzOTIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhCQWJhODM3MzExM0ZiN2E2OGYxOTVkZUYxODczMmUwMWFGOGVEZkNGIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwMTkwMDcKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBzb3VyY2VJZDogc291cmNlSWQxOQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tb29uYmFzZUFscGhhLmpzCiAgdmFyIG1vb25iYXNlQWxwaGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODcsCiAgICBuYW1lOiAiTW9vbmJhc2UgQWxwaGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiREVWIiwKICAgICAgc3ltYm9sOiAiREVWIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuYXBpLm1vb25iYXNlLm1vb25iZWFtLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3NzLmFwaS5tb29uYmFzZS5tb29uYmVhbS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTW9vbnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vbW9vbmJhc2UubW9vbnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vbW9vbmJhc2UubW9vbnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE4NTA2ODYKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9vbmJlYW0uanMKICB2YXIgbW9vbmJlYW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODQsCiAgICBuYW1lOiAiTW9vbmJlYW0iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiR0xNUiIsCiAgICAgIHN5bWJvbDogIkdMTVIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21vb25iZWFtLnB1YmxpYy5ibGFzdGFwaS5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9tb29uYmVhbS5wdWJsaWMuYmxhc3RhcGkuaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNb29uc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9tb29uc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktbW9vbmJlYW0ubW9vbnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDYwOTAwMgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9vbmJlYW1EZXYuanMKICB2YXIgbW9vbmJlYW1EZXYgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODEsCiAgICBuYW1lOiAiTW9vbmJlYW0gRGV2ZWxvcG1lbnQgTm9kZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJERVYiLAogICAgICBzeW1ib2w6ICJERVYiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwOi8vMTI3LjAuMC4xOjk5NDQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vMTI3LjAuMC4xOjk5NDQiXQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21vb25yaXZlci5qcwogIHZhciBtb29ucml2ZXIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODUsCiAgICBuYW1lOiAiTW9vbnJpdmVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1PVlIiLAogICAgICBzeW1ib2w6ICJNT1ZSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tb29ucml2ZXIucHVibGljLmJsYXN0YXBpLmlvIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21vb25yaXZlci5wdWJsaWMuYmxhc3RhcGkuaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNb29uc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9tb29ucml2ZXIubW9vbnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLW1vb25yaXZlci5tb29uc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTU5NzkwNAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9ycGhIb2xlc2t5LmpzCiAgdmFyIG1vcnBoSG9sZXNreSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjgxMCwKICAgIG5hbWU6ICJNb3JwaCBIb2xlc2t5IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1xdWlja25vZGUtaG9sZXNreS5tb3JwaGwyLmlvIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy1xdWlja25vZGUtaG9sZXNreS5tb3JwaGwyLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTW9ycGggSG9sZXNreSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci1ob2xlc2t5Lm1vcnBobDIuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXItYXBpLWhvbGVza3kubW9ycGhsMi5pby9hcGk/IgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tb3JwaFNlcG9saWEuanMKICB2YXIgbW9ycGhTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNzEwLAogICAgbmFtZTogIk1vcnBoIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQubW9ycGhsMi5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1vcnBoIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXItdGVzdG5ldC5tb3JwaGwyLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLWFwaS10ZXN0bmV0Lm1vcnBobDIuaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9uYXV0aWx1cy5qcwogIHZhciBuYXV0aWx1cyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjIyMjIsCiAgICBuYW1lOiAiTmF1dGlsdXMgTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiWkJDIiwgc3ltYm9sOiAiWkJDIiwgZGVjaW1hbHM6IDkgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcGkubmF1dGlsdXMubmF1dGNoYWluLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk5hdXRTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL25hdXRzY2FuLmNvbSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9uZW9uRGV2bmV0LmpzCiAgdmFyIG5lb25EZXZuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI0NTAyMjkyNiwKICAgIG5hbWU6ICJOZW9uIEVWTSBEZXZOZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk5FT04iLCBzeW1ib2w6ICJORU9OIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZGV2bmV0Lm5lb25ldm0ub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTmVvbnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZGV2bmV0Lm5lb25zY2FuLm9yZyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMDUyMDYxMTIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbmVvbk1haW5uZXQuanMKICB2YXIgbmVvbk1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI0NTAyMjkzNCwKICAgIG5ldHdvcms6ICJuZW9uTWFpbm5ldCIsCiAgICBuYW1lOiAiTmVvbiBFVk0gTWFpbk5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTkVPTiIsIHN5bWJvbDogIk5FT04iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9uZW9uLXByb3h5LW1haW5uZXQuc29sYW5hLnAycC5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJOZW9uc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9uZW9uc2Nhbi5vcmciCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjA2NTQ1NTI0CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9uZXhpLmpzCiAgdmFyIG5leGkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyNDIsCiAgICBuYW1lOiAiTmV4aSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTmV4aSIsIHN5bWJvbDogIk5FWEkiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuY2hhaW4ubmV4aS50ZWNobm9sb2d5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTmV4aVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3Lm5leGlzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly93d3cubmV4aXNjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDI3N0E0NkNjNjlBNTdlRTNBNkM4YzE1OGJBODc0ODMyRjcxOEI4RSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNTc3MDE2MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL25leGlsaXguanMKICB2YXIgbmV4aWxpeCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjQwLAogICAgbmFtZTogIk5leGlsaXggU21hcnQgQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTmV4aWxpeCIsCiAgICAgIHN5bWJvbDogIk5FWElMSVgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGN1cmwucG9zLm5leGlsaXguY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTmV4aWxpeFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5uZXhpbGl4LmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4NTgzODFjOGUyQkY5ZDBDMkM0MjU5Y0ExNEJkQTlBZmUwMjgzMTI0NCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3NDQ0OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL29hc3lzLmpzCiAgdmFyIG9hc3lzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNDgsCiAgICBuYW1lOiAiT2FzeXMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk9hc3lzIiwgc3ltYm9sOiAiT0FTIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLm1haW5uZXQub2FzeXMuZ2FtZXMiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJPYXN5c1NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5vYXN5cy5nYW1lcyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLm9hc3lzLmdhbWVzL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9vYXNpc1Rlc3RuZXQuanMKICB2YXIgb2FzaXNUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MDkwLAogICAgbmV0d29yazogIm9hc2lzLXRlc3RuZXQiLAogICAgbmFtZTogIk9hc2lzIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkZhc3R0b2tlbiIsIHN5bWJvbDogIkZUTiIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMxLm9hc2lzLmJhaGFtdXRjaGFpbi5jb20iXSB9LAogICAgICBwdWJsaWM6IHsgaHR0cDogWyJodHRwczovL3JwYzEub2FzaXMuYmFoYW11dGNoYWluLmNvbSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkZ0bnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vb2FzaXMuZnRuc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vb2FzaXMuZnRuc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9va2MuanMKICB2YXIgb2tjID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2NiwKICAgIG5hbWU6ICJPS0MiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiT0tUIiwKICAgICAgc3ltYm9sOiAiT0tUIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZXhjaGFpbnJwYy5va2V4Lm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIm9rbGluayIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cub2tsaW5rLmNvbS9va2MiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTAzNjQ3OTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9vcHRpbWlzbS5qcwogIHZhciBzb3VyY2VJZDIwID0gMTsKICB2YXIgb3B0aW1pc20gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDEwLAogICAgbmFtZTogIk9QIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5vcHRpbWlzbS5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk9wdGltaXNtIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL29wdGltaXN0aWMuZXRoZXJzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1vcHRpbWlzdGljLmV0aGVyc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgZGlzcHV0ZUdhbWVGYWN0b3J5OiB7CiAgICAgICAgW3NvdXJjZUlkMjBdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhlNTk2NUFiNTk2MmVEYzc0NzdDODUyMDI0M0E5NTUxN0NEMjUyZkE5IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQyMF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweGRmZTk3ODY4MjMzZDFhYTIyZTgxNWEyNjY5ODJmMmNmMTc2ODVhMjciCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0Mjg2MjYzCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDIwXTogewogICAgICAgICAgYWRkcmVzczogIjB4YkViNUZjNTc5MTE1MDcxNzY0Yzc0MjNBNGYxMmVEZGU0MWYxMDZFZCIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyMF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDk5QzlmYzQ2ZjkyRThhMWMwZGVDMWIxNzQ3ZDAxMDkwM0U4ODRiRTEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMjAKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvb3B0aW1pc21Hb2VybGkuanMKICB2YXIgc291cmNlSWQyMSA9IDU7CiAgdmFyIG9wdGltaXNtR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiA0MjAsCiAgICBuYW1lOiAiT3B0aW1pc20gR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJHb2VybGkgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9nb2VybGkub3B0aW1pc20uaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLW9wdGltaXNtLmV0aGVyc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGktb3B0aW1pc20uZXRoZXJzY2FuLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICAuLi5jaGFpbkNvbmZpZzIuY29udHJhY3RzLAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDIxXTogewogICAgICAgICAgYWRkcmVzczogIjB4RTZEZmJhMDk1MzYxNkJhY2FiMGM5QThlY2IzYTlCQmE3N0ZDMTVjMCIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NDYxCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDIxXTogewogICAgICAgICAgYWRkcmVzczogIjB4NWI0N0UxQTA4RWE2ZDk4NUQ2NjQ5MzAwNTg0ZTY3MjJFYzRCMTM4MyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyMV06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDYzNkFmMTZiZjJmNjgyZEQzMTA5ZTYwMTAyYjhFMUEwODlGZWRBYTgiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDIxCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL29wdGltaXNtU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDIyID0gMTExNTUxMTE7CiAgdmFyIG9wdGltaXNtU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogMTExNTU0MjAsCiAgICBuYW1lOiAiT1AgU2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2Vwb2xpYSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEub3B0aW1pc20uaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL29wdGltaXNtLXNlcG9saWEuYmxvY2tzY291dC5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vb3B0aW1pc20tc2Vwb2xpYS5ibG9ja3Njb3V0LmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgZGlzcHV0ZUdhbWVGYWN0b3J5OiB7CiAgICAgICAgW3NvdXJjZUlkMjJdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgwNUY5NjEzYURCMzAwMjZGRmQ2MzRmMzhlNUM0ZEZkMzBhMTk3RmExIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQyMl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDkwRTljNGY4YTk5NGEyNTBGNmFFZmQ2MUNBRmI0RjJlODk1RDQ1OEYiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNjIwMjA0CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDIyXTogewogICAgICAgICAgYWRkcmVzczogIjB4MTZGYzUwNThGMjU2NDgxOTQ0NzE5MzlkZjc1Q0YyN0EyZmRDNDhCQyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyMl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEZCYjA2MjFFMEIyM2I1NDc4QjYzMEJENTVhNWYyMWY2NzczMEIwRjEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDIyCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL29wQk5CLmpzCiAgdmFyIG9wQk5CID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDQsCiAgICBuYW1lOiAib3BCTkIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkJOQiIsCiAgICAgIHN5bWJvbDogIkJOQiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vb3BibmItbWFpbm5ldC1ycGMuYm5iY2hhaW4ub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAib3BibmJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL21haW5uZXQub3BibmJzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA1MTI4ODEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9vcEJOQlRlc3RuZXQuanMKICB2YXIgb3BCTkJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1NjExLAogICAgbmFtZTogIm9wQk5CIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAidEJOQiIsCiAgICAgIHN5bWJvbDogInRCTkIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9vcGJuYi10ZXN0bmV0LXJwYy5ibmJjaGFpbi5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJvcGJuYnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5vcGJuYnNjYW4uY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDM3MDUxMDgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvb29ydG1haW5uZXREZXYuanMKICB2YXIgb29ydE1haW5uZXREZXYgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDk3MDAsCiAgICBuYW1lOiAiT09SVCBNYWlubmV0RGV2IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk9PUlQiLAogICAgICBzeW1ib2w6ICJPT1JUIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZGV2LXJwYy5vb3J0ZWNoLmNvbSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBvb3J0OiB7CiAgICAgICAgbmFtZTogIk9PUlQgTWFpbm5ldERldiBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9kZXYtc2Nhbi5vb3J0ZWNoLmNvbSIKICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJPT1JUIE1haW5uZXREZXYgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZGV2LXNjYW4ub29ydGVjaC5jb20iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvb3RpbURldm5ldC5qcwogIHZhciBvdGltRGV2bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MTE0NDExNCwKICAgIG5hbWU6ICJPdGltIERldm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFVEgiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwOi8vZGV2bmV0Lm90aW0ueHl6Il0KICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBiYXRjaEludm9rZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHg1RmJEQjIzMTU2NzhhZmVjYjM2N2YwMzJkOTNGNjQyZjY0MTgwYWEzIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BhbG0uanMKICB2YXIgcGFsbSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTEyOTcxMDgxMDksCiAgICBuYW1lOiAiUGFsbSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJQQUxNIiwKICAgICAgc3ltYm9sOiAiUEFMTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcGFsbS1tYWlubmV0LnB1YmxpYy5ibGFzdGFwaS5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9wYWxtLW1haW5uZXQucHVibGljLmJsYXN0YXBpLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ2hhaW5sZW5zIiwKICAgICAgICB1cmw6ICJodHRwczovL3BhbG0uY2hhaW5sZW5zLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNTQyOTI0OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BhbG1UZXN0bmV0LmpzCiAgdmFyIHBhbG1UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMTI5NzEwODA5OSwKICAgIG5hbWU6ICJQYWxtIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiUEFMTSIsCiAgICAgIHN5bWJvbDogIlBBTE0iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3BhbG0tbWFpbm5ldC5wdWJsaWMuYmxhc3RhcGkuaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcGFsbS1tYWlubmV0LnB1YmxpYy5ibGFzdGFwaS5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNoYWlubGVucyIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wYWxtLmNoYWlubGVucy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTU0MjkyNDgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcGxheWZpQWxiaXJlby5qcwogIHZhciBwbGF5ZmlBbGJpcmVvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnLAogICAgaWQ6IDE2MTIxMjcsCiAgICBuYW1lOiAiUGxheUZpIEFsYmlyZW8gVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiYWxiaXJlbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hbGJpcmVvLXJwYy5wbGF5ZmkuYWkiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vYWxiaXJlby1ycGMtd3MucGxheWZpLmFpL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUGxheUZpIEFsYmlyZW8gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYWxiaXJlby1leHBsb3Jlci5wbGF5ZmkuYWkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweEY5Y2RhNjI0RkJDN2UwNTkzNTVjZTk4YTMxNjkzZDI5OUZBQ2Q5NjMiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3Bnbi5qcwogIHZhciBzb3VyY2VJZDIzID0gMTsKICB2YXIgcGduID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MjQsCiAgICBuZXR3b3JrOiAicGduIiwKICAgIG5hbWU6ICJQR04iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnB1YmxpY2dvb2RzLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQR04gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucHVibGljZ29vZHMubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJQR04gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucHVibGljZ29vZHMubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDIzXTogewogICAgICAgICAgYWRkcmVzczogIjB4OUU2MjA0Rjc1MGNEODY2YjI5OTU5NGUyYUM5ZUE4MjRFMmU1Zjk1YyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMzODAyMDkKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMjNdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhiMjZGZDk4NWM1OTU5YkJCMzgyQkFGZEQwYjg3OUUxNDllNDgxMTZjIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDIzXTogewogICAgICAgICAgYWRkcmVzczogIjB4RDAyMDRCOTUyN0MxYkE3YkQ3NjVGYTVDQ0Q5MzU1ZDM4MzM4MjcyYiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBmb3JtYXR0ZXJzOiBmb3JtYXR0ZXJzMiwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDIzCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BnblRlc3RuZXQuanMKICB2YXIgc291cmNlSWQyNCA9IDExMTU1MTExOwogIHZhciBwZ25UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1ODAwOCwKICAgIG5ldHdvcms6ICJwZ24tdGVzdG5ldCIsCiAgICBuYW1lOiAiUEdOICIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLnB1YmxpY2dvb2RzLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQR04gVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5zZXBvbGlhLnB1YmxpY2dvb2RzLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuc2Vwb2xpYS5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJQR04gVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5zZXBvbGlhLnB1YmxpY2dvb2RzLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuc2Vwb2xpYS5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDI0XTogewogICAgICAgICAgYWRkcmVzczogIjB4RDViQWMzMTUyZmZDMjUzMThGODQ4QjNERDVkQTZDODUxNzFCYUVFZSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDI0XTogewogICAgICAgICAgYWRkcmVzczogIjB4RjA0QmRENTM1M0JiMEVGRjZDQTYwQ2ZjQzc4NTk0Mjc4ZUJmRTE3OSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyNF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEZhRTZhYkNBRjMwRDIzZTIzM0FDN2ZhRjc0N0YyZkMzYTVhNkJmYTMiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAzNzU0OTI1CiAgICAgIH0KICAgIH0sCiAgICBmb3JtYXR0ZXJzOiBmb3JtYXR0ZXJzMiwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDI0LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9waG9lbml4LmpzCiAgdmFyIHBob2VuaXggPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMzgxLAogICAgbmFtZTogIlBob2VuaXggQmxvY2tjaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiUGhvZW5peCIsIHN5bWJvbDogIlBIWCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5waG9lbml4cGxvcmVyLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlBob2VuaXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGhvZW5peHBsb3Jlci5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vcGhvZW5peHBsb3Jlci5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg0OThjRjc1N2E1NzVjRkYyYzJFZDlmNTMyZjU2RWZhNzk3Zjg2NDQyIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDU2MjAxOTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wbGluZ2EuanMKICB2YXIgcGxpbmdhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNDIsCiAgICBuYW1lOiAiUGxpbmdhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJQbGluZ2EiLCBzeW1ib2w6ICJQTElOR0EiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGN1cmwubWFpbm5ldC5wbGdjaGFpbi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQbGdzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3d3dy5wbGdzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDk4OTU3NjE2MGYyZTcwOTI5MDhCQjk0Nzk2MzFiOTAxMDYwYjZlNCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMDQ0ODkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wbHVtZVRlc3RuZXQuanMKICB2YXIgc291cmNlSWQyNSA9IDExMTU1MTExOwogIHZhciBwbHVtZVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE2MTIyMTEzNSwKICAgIG5hbWU6ICJQbHVtZSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJQbHVtZSBTZXBvbGlhIEV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQtcnBjLnBsdW1lbmV0d29yay54eXovaHR0cCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly90ZXN0bmV0LXJwYy5wbHVtZW5ldHdvcmsueHl6L3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLnBsdW1lbmV0d29yay54eXoiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC1leHBsb3Jlci5wbHVtZW5ldHdvcmsueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBzb3VyY2VJZDogc291cmNlSWQyNQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wb2x5Z29uLmpzCiAgdmFyIHBvbHlnb24gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzNywKICAgIG5hbWU6ICJQb2x5Z29uIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJNQVRJQyIsIHN5bWJvbDogIk1BVElDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcG9seWdvbi1ycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vcG9seWdvbnNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI1NzcwMTYwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcG9seWdvbkFtb3kuanMKICB2YXIgcG9seWdvbkFtb3kgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwMDAyLAogICAgbmFtZTogIlBvbHlnb24gQW1veSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTUFUSUMiLCBzeW1ib2w6ICJNQVRJQyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1hbW95LnBvbHlnb24udGVjaG5vbG9neSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlBvbHlnb25TY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2Ftb3kucG9seWdvbnNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1hbW95LnBvbHlnb25zY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzEyNzM4OAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wb2x5Z29uTXVtYmFpLmpzCiAgdmFyIHBvbHlnb25NdW1iYWkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwMDAxLAogICAgbmFtZTogIlBvbHlnb24gTXVtYmFpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJNQVRJQyIsIHN5bWJvbDogIk1BVElDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmFua3IuY29tL3BvbHlnb25fbXVtYmFpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vbXVtYmFpLnBvbHlnb25zY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktdGVzdG5ldC5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI1NzcwMTYwCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BvbHlnb25aa0V2bS5qcwogIHZhciBwb2x5Z29uWmtFdm0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMDEsCiAgICBuYW1lOiAiUG9seWdvbiB6a0VWTSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly96a2V2bS1ycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vemtldm0ucG9seWdvbnNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS16a2V2bS5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDU3NzQ2CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcG9seWdvblprRXZtQ2FyZG9uYS5qcwogIHZhciBwb2x5Z29uWmtFdm1DYXJkb25hID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNDQyLAogICAgbmFtZTogIlBvbHlnb24gemtFVk0gQ2FyZG9uYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuY2FyZG9uYS56a2V2bS1ycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vY2FyZG9uYS16a2V2bS5wb2x5Z29uc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vY2FyZG9uYS16a2V2bS5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTQwOTEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wb2x5Z29uWmtFdm1UZXN0bmV0LmpzCiAgdmFyIHBvbHlnb25aa0V2bVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0NDIsCiAgICBuYW1lOiAiUG9seWdvbiB6a0VWTSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5wdWJsaWMuemtldm0tdGVzdC5uZXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQb2x5Z29uU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LXprZXZtLnBvbHlnb25zY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LXprZXZtLnBvbHlnb25zY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDUyNTY4NgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3B1bHNlY2hhaW4uanMKICB2YXIgcHVsc2VjaGFpbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzY5LAogICAgbmFtZTogIlB1bHNlQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlB1bHNlIiwgc3ltYm9sOiAiUExTIiwgZGVjaW1hbHM6IDE4IH0sCiAgICB0ZXN0bmV0OiBmYWxzZSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMucHVsc2VjaGFpbi5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3MucHVsc2VjaGFpbi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQdWxzZVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5wdWxzZWNoYWluLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkuc2Nhbi5wdWxzZWNoYWluLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgZW5zUmVnaXN0cnk6IHsKICAgICAgICBhZGRyZXNzOiAiMHgwMDAwMDAwMDAwMEMyRTA3NGVDNjlBMGRGYjI5OTdCQTZDN2QyZTFlIgogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDM1MzYwMQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3B1bHNlY2hhaW5WNC5qcwogIHZhciBwdWxzZWNoYWluVjQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDk0MywKICAgIG5hbWU6ICJQdWxzZUNoYWluIFY0IiwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiVjQgUHVsc2UiLCBzeW1ib2w6ICJ2NFBMUyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy52NC50ZXN0bmV0LnB1bHNlY2hhaW4uY29tIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLnY0LnRlc3RuZXQucHVsc2VjaGFpbi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQdWxzZVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi52NC50ZXN0bmV0LnB1bHNlY2hhaW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NjYW4udjQudGVzdG5ldC5wdWxzZWNoYWluLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgZW5zUmVnaXN0cnk6IHsKICAgICAgICBhZGRyZXNzOiAiMHgwMDAwMDAwMDAwMEMyRTA3NGVDNjlBMGRGYjI5OTdCQTZDN2QyZTFlIgogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDM1MzYwMQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3FNYWlubmV0LmpzCiAgdmFyIHFNYWlubmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNTQ0MSwKICAgIG5hbWU6ICJRIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiUSIsCiAgICAgIHN5bWJvbDogIlEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMucS5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJRIE1haW5uZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucS5vcmciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIucS5vcmcvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3FUZXN0bmV0LmpzCiAgdmFyIHFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNTQ0MywKICAgIG5hbWU6ICJRIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiUSIsCiAgICAgIHN5bWJvbDogIlEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMucXRlc3RuZXQub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnF0ZXN0bmV0Lm9yZyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5xdGVzdG5ldC5vcmcvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yZWFsLmpzCiAgdmFyIHJlYWwgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMTE4OCwKICAgIG5hbWU6ICJyZS5hbCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAicmVFVEgiLAogICAgICBkZWNpbWFsczogMTgsCiAgICAgIHN5bWJvbDogInJlRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcmVhbC5kcnBjLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogInJlLmFsIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnJlLmFsIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLnJlLmFsL2FwaS92MiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA2OTUKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yZWRiZWxseVRlc3RuZXQuanMKICB2YXIgcmVkYmVsbHlUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNTMsCiAgICBuYW1lOiAiUmVkYmVsbHkgTmV0d29yayBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJSZWRiZWxseSBOYXRpdmUgQ29pbiIsCiAgICAgIHN5bWJvbDogIlJCTlQiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZ292ZXJub3JzLnRlc3RuZXQucmVkYmVsbHkubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV0aGVybmFsIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQucmVkYmVsbHkubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ldGhlcm5hbC5mbHkuZGV2L2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcmVkc3RvbmUuanMKICB2YXIgcmVkc3RvbmUgPSBkZWZpbmVDaGFpbih7CiAgICBpZDogNjkwLAogICAgbmFtZTogIlJlZHN0b25lIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMucmVkc3RvbmVjaGFpbi5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnJlZHN0b25lY2hhaW4uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsgbmFtZTogIkV4cGxvcmVyIiwgdXJsOiAiCWh0dHBzOi8vZXhwbG9yZXIucmVkc3RvbmUueHl6IiB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3JleWFOZXR3b3JrLmpzCiAgdmFyIHJleWFOZXR3b3JrID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNzI5LAogICAgbmFtZTogIlJleWEgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMucmV5YS5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLnJleWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlJleWEgTmV0d29yayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5yZXlhLm5ldHdvcmsiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yb2xsdXguanMKICB2YXIgcm9sbHV4ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1NzAsCiAgICBuYW1lOiAiUm9sbHV4IE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiU3lzY29pbiIsCiAgICAgIHN5bWJvbDogIlNZUyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnJvbGx1eC5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnJvbGx1eC5jb20vd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9sbHV4RXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucm9sbHV4LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5yb2xsdXguY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTkyMjIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yb2xsdXhUZXN0bmV0LmpzCiAgdmFyIHJvbGx1eFRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU3ZTMsCiAgICBuYW1lOiAiUm9sbHV4IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiU3lzY29pbiIsCiAgICAgIHN5bWJvbDogIlNZUyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRhbmVuYmF1bS5yb2xsdXguY29tLyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMtdGFuZW5iYXVtLnJvbGx1eC5jb20vd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9sbHV4VGVzdG5ldEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3JvbGx1eC50YW5lbmJhdW0uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vcm9sbHV4LnRhbmVuYmF1bS5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTgxMzY3NQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3JvbmluLmpzCiAgdmFyIHJvbmluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDIwLAogICAgbmFtZTogIlJvbmluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJST04iLCBzeW1ib2w6ICJST04iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcGkucm9uaW5jaGFpbi5jb20vcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9uaW4gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYXBwLnJvbmluY2hhaW4uY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI2MDIzNTM1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcm9vdC5qcwogIHZhciByb290ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NjY4LAogICAgbmFtZTogIlRoZSBSb290IE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWFJQIiwKICAgICAgc3ltYm9sOiAiWFJQIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9yb290LnJvb3RuZXQubGl2ZS9hcmNoaXZlIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3Jvb3Qucm9vdG5ldC5saXZlL2FyY2hpdmUvd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJSb290c2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9yb290c2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YzlDMkUyNDI5QWVDMzU0OTE2YzQ3NkIzMGQ3MjlkZURkQzk0OTg4ZCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA5MjE4MzM4CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcm9vdFBvcmNpbmkuanMKICB2YXIgcm9vdFBvcmNpbmkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDc2NzIsCiAgICBuYW1lOiAiVGhlIFJvb3QgTmV0d29yayAtIFBvcmNpbmkiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWFJQIiwKICAgICAgc3ltYm9sOiAiWFJQIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9wb3JjaW5pLnJvb3RuZXQuYXBwL2FyY2hpdmUiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcG9yY2luaS5yb290bmV0LmFwcC9hcmNoaXZlL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9vdHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vcG9yY2luaS5yb290c2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YzlDMkUyNDI5QWVDMzU0OTE2YzQ3NkIzMGQ3MjlkZURkQzk0OTg4ZCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDU1NTY5MgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yb290c3RvY2suanMKICB2YXIgcm9vdHN0b2NrID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMCwKICAgIG5hbWU6ICJSb290c3RvY2sgTWFpbm5ldCIsCiAgICBuZXR3b3JrOiAicm9vdHN0b2NrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlJvb3RzdG9jayBCaXRjb2luIiwKICAgICAgc3ltYm9sOiAiUkJUQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3B1YmxpYy1ub2RlLnJzay5jbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlJTSyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5yc2suY28iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDI0OTU0MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3Jvb3RzdG9ja1Rlc3RuZXQuanMKICB2YXIgcm9vdHN0b2NrVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzEsCiAgICBuYW1lOiAiUm9vdHN0b2NrIFRlc3RuZXQiLAogICAgbmV0d29yazogInJvb3RzdG9jayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJSb290c3RvY2sgQml0Y29pbiIsCiAgICAgIHN5bWJvbDogInRSQlRDIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcHVibGljLW5vZGUudGVzdG5ldC5yc2suY28iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJSU0sgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5yb290c3RvY2suaW8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3JzczMuanMKICB2YXIgc291cmNlSWQyNiA9IDE7CiAgdmFyIHJzczMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDEyNTUzLAogICAgbmFtZTogIlJTUzMgVlNMIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlJTUzMiLCBzeW1ib2w6ICJSU1MzIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnJzczMuaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJSU1MzIFZTTCBNYWlubmV0IFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5yc3MzLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NjYW4ucnNzMy5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQyNl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEU2ZjI0ZDJDMzJCMzEwOUIxOGVkMzNjRjA4ZUZiNDkwYjFlMDlDMTAiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDE5MwogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQyNl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDZBMTI0MzI0OTFiYmJFOGQzYmFiZjc1Rjc1OTc2Njc3NEM3NzhEYjQiLAogICAgICAgICAgYmxvY2tDcmVhdGVkOiAxOTM4NzA1NwogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDI2XTogewogICAgICAgICAgYWRkcmVzczogIjB4NGNiYWI2OTEwOEFhNzIxNTFFRGE1QTNjMTY0ZUE4Njg0NWYxODQzOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQyNgogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yc3MzU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDI3ID0gMTExNTUxMTE7CiAgdmFyIHJzczNTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAyMzMxLAogICAgbmFtZTogIlJTUzMgVlNMIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiUlNTMyIsIHN5bWJvbDogIlJTUzMiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVzdG5ldC5yc3MzLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUlNTMyBWU0wgU2Vwb2xpYSBUZXN0bmV0IFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi50ZXN0bmV0LnJzczMuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2Nhbi50ZXN0bmV0LnJzczMuaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMjddOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhEYjVjNDZDM0VhYTZFZDZhRThiMjM3OTc4NURGN2RkMDI5QzBkQzgxIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTU2OTcKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMjddOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhjQkQ3N0U4RTFFN0YwNkIyNWJhRGU2NzE0MmNkRTgyNjUyRGE3YjU3IiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogNTM0NTAzNQogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDI3XTogewogICAgICAgICAgYWRkcmVzczogIjB4ZEREMjliYjYzQjA4MzlGQjFjRTBlRTQzOUZmMDI3NzM4NTk1RDA3QiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkMjcKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2FpZ29uLmpzCiAgdmFyIHNhaWdvbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAyMSwKICAgIG5hbWU6ICJTYWlnb24gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiUk9OIiwgc3ltYm9sOiAiUk9OIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2FpZ29uLXRlc3RuZXQucm9uaW5jaGFpbi5jb20vcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU2FpZ29uIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NhaWdvbi1hcHAucm9uaW5jaGFpbi5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTg3MzY4NzEKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2FwcGhpcmUuanMKICB2YXIgc2FwcGhpcmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIzMjk0LAogICAgbmFtZTogIk9hc2lzIFNhcHBoaXJlIiwKICAgIG5ldHdvcms6ICJzYXBwaGlyZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2FwcGhpcmUgUm9zZSIsIHN5bWJvbDogIlJPU0UiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zYXBwaGlyZS5vYXNpcy5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9zYXBwaGlyZS5vYXNpcy5pby93cyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk9hc2lzIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLm9hc2lzLmlvL21haW5uZXQvc2FwcGhpcmUiCiAgICAgIH0sCiAgICAgIGJsb2Nrc2NvdXQ6IHsKICAgICAgICBuYW1lOiAiT2FzaXMgU2FwcGhpcmUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vb2xkLWV4cGxvcmVyLnNhcHBoaXJlLm9hc2lzLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL29sZC1leHBsb3Jlci5zYXBwaGlyZS5vYXNpcy5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNzM0NTMxCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2FwcGhpcmVUZXN0bmV0LmpzCiAgdmFyIHNhcHBoaXJlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjMyOTUsCiAgICBuYW1lOiAiT2FzaXMgU2FwcGhpcmUgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAic2FwcGhpcmUtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2FwcGhpcmUgVGVzdCBSb3NlIiwgc3ltYm9sOiAiVEVTVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuc2FwcGhpcmUub2FzaXMuZGV2Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3Rlc3RuZXQuc2FwcGhpcmUub2FzaXMuZGV2L3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiT2FzaXMgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIub2FzaXMuaW8vdGVzdG5ldC9zYXBwaGlyZSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJPYXNpcyBTYXBwaGlyZSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQub2xkLWV4cGxvcmVyLnNhcHBoaXJlLm9hc2lzLmRldiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0Lm9sZC1leHBsb3Jlci5zYXBwaGlyZS5vYXNpcy5kZXYvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zYXRvc2hpdm0uanMKICB2YXIgc2F0b3NoaVZNID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMTA5LAogICAgbmFtZTogIlNhdG9zaGlWTSBBbHBoYSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCVEMiLAogICAgICBzeW1ib2w6ICJCVEMiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FscGhhLXJwYy1ub2RlLWh0dHAuc3Ztc2Nhbi5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc3Ztc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zdm1zY2FuLmlvL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zYXRvc2hpdm1UZXN0bmV0LmpzCiAgdmFyIHNhdG9zaGlWTVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxMTAsCiAgICBuYW1lOiAiU2F0b3NoaVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkJUQyIsCiAgICAgIHN5bWJvbDogIkJUQyIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vdGVzdC1ycGMtbm9kZS1odHRwLnN2bXNjYW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJibG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuc3Ztc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LnN2bXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zY3JvbGwuanMKICB2YXIgc2Nyb2xsID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1MzQzNTIsCiAgICBuYW1lOiAiU2Nyb2xsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zY3JvbGwuaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3NzLXJwYy5zY3JvbGwuaW8vd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTY3JvbGxzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Njcm9sbHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5zY3JvbGxzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTQKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3Njcm9sbFNlcG9saWEuanMKICB2YXIgc2Nyb2xsU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTM0MzUxLAogICAgbmFtZTogIlNjcm9sbCBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEtcnBjLnNjcm9sbC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNjcm9sbHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5zY3JvbGxzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5zY3JvbGxzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogOTQ3MwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zZWkuanMKICB2YXIgc2VpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMzI5LAogICAgbmFtZTogIlNlaSBOZXR3b3JrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZWkiLCBzeW1ib2w6ICJTRUkiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldm0tcnBjLnNlaS1hcGlzLmNvbS8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXZtLXdzLnNlaS1hcGlzLmNvbS8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTZWl0cmFjZSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZWl0cmFjZS5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2VpdHJhY2UuY29tL3BhY2lmaWMtMS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2VpRGV2bmV0LmpzCiAgdmFyIHNlaURldm5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNzEzNzE1LAogICAgbmFtZTogIlNlaSBEZXZuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlNlaSIsIHN5bWJvbDogIlNFSSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V2bS1ycGMtYXJjdGljLTEuc2VpLWFwaXMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU2VpdHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vc2VpdHJhY2UuY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zZWlUZXN0bmV0LmpzCiAgdmFyIHNlaVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMjgsCiAgICBuYW1lOiAiU2VpIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlNlaSIsIHN5bWJvbDogIlNFSSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V2bS1ycGMtdGVzdG5ldC5zZWktYXBpcy5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXZtLXdzLXRlc3RuZXQuc2VpLWFwaXMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU2VpdHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vc2VpdHJhY2UuY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zZXBvbGlhLmpzCiAgdmFyIHNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMTU1MTExLAogICAgbmFtZTogIlNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlNlcG9saWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc2Vwb2xpYS5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5ldGhlcnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLXNlcG9saWEuZXRoZXJzY2FuLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3NTE1MzIKICAgICAgfSwKICAgICAgZW5zUmVnaXN0cnk6IHsgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjOEFmOTk5ZTM4MjczRDY1OEJFMWI5MjFiODhBOURkZjAwNTc2OWNDIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDUzMTcwODAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2hhcGVTZXBvbGlhLmpzCiAgdmFyIHNoYXBlU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTEwMTEsCiAgICBuYW1lOiAiU2hhcGUgU2Vwb2xpYSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZXBvbGlhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5zaGFwZS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiYmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zaGFwZS1zZXBvbGlhLWV4cGxvcmVyLmFsY2hlbXkuY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NoYXBlLXNlcG9saWEtZXhwbG9yZXIuYWxjaGVteS5jb20vYXBpL3YyIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NoaW1tZXIuanMKICB2YXIgc2hpbW1lciA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTQ4LAogICAgbmFtZTogIlNoaW1tZXIiLAogICAgbmV0d29yazogInNoaW1tZXIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiU2hpbW1lciIsCiAgICAgIHN5bWJvbDogIlNNUiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vanNvbi1ycGMuZXZtLnNoaW1tZXIubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNoaW1tZXIgTmV0d29yayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0uc2hpbW1lci5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmV2bS5zaGltbWVyLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NoaW1tZXJUZXN0bmV0LmpzCiAgdmFyIHNoaW1tZXJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDczLAogICAgbmFtZTogIlNoaW1tZXIgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAic2hpbW1lci10ZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlNoaW1tZXIiLAogICAgICBzeW1ib2w6ICJTTVIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2pzb24tcnBjLmV2bS50ZXN0bmV0LnNoaW1tZXIubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNoaW1tZXIgTmV0d29yayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0udGVzdG5ldC5zaGltbWVyLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLnRlc3RuZXQuc2hpbW1lci5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2thbGUvYnJhd2wuanMKICB2YXIgc2thbGVCbG9ja0JyYXdsZXJzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzOTE4NDU4OTQsCiAgICBuYW1lOiAiU0tBTEUgfCBCbG9jayBCcmF3bGVycyIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQlJBV0wiLCBzeW1ib2w6ICJCUkFXTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvZnJheWVkLWRlY2VudC1hbnRhcmVzIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvZnJheWVkLWRlY2VudC1hbnRhcmVzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU0tBTEUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZnJheWVkLWRlY2VudC1hbnRhcmVzLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHt9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL2NhbHlwc28uanMKICB2YXIgc2thbGVDYWx5cHNvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNTY0ODMwODE4LAogICAgbmFtZTogIlNLQUxFIHwgQ2FseXBzbyBORlQgSHViIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS9ob25vcmFibGUtc3RlZWwtcmFzYWxoYWd1ZSJdLAogICAgICAgIHdlYlNvY2tldDogWwogICAgICAgICAgIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvaG9ub3JhYmxlLXN0ZWVsLXJhc2FsaGFndWUiCiAgICAgICAgXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ob25vcmFibGUtc3RlZWwtcmFzYWxoYWd1ZS5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMxMDc2MjYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9jYWx5cHNvVGVzdG5ldC5qcwogIHZhciBza2FsZUNhbHlwc29UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5NzQzOTkxMzEsCiAgICBuYW1lOiAiU0tBTEUgQ2FseXBzbyBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5za2FsZW5vZGVzLmNvbS92MS9naWFudC1oYWxmLWR1YWwtdGVzdG5ldCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly90ZXN0bmV0LnNrYWxlbm9kZXMuY29tL3YxL3dzL2dpYW50LWhhbGYtZHVhbC10ZXN0bmV0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU0tBTEUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZ2lhbnQtaGFsZi1kdWFsLXRlc3RuZXQuZXhwbG9yZXIudGVzdG5ldC5za2FsZW5vZGVzLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDMyMjAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2thbGUvY3J5cHRvQmxhZGVzLmpzCiAgdmFyIHNrYWxlQ3J5cHRvQmxhZGVzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDI2MDYyMTU3LAogICAgbmFtZTogIlNLQUxFIHwgQ3J5cHRvQmxhZGVzIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS9hZmZlY3Rpb25hdGUtaW1tZWRpYXRlLXBvbGx1eCJdLAogICAgICAgIHdlYlNvY2tldDogWwogICAgICAgICAgIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvYWZmZWN0aW9uYXRlLWltbWVkaWF0ZS1wb2xsdXgiCiAgICAgICAgXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hZmZlY3Rpb25hdGUtaW1tZWRpYXRlLXBvbGx1eC5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9jcnlwdG9Db2xvc3NldW0uanMKICB2YXIgc2thbGVDcnlwdG9Db2xvc3NldW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMzI5NDIxNzIsCiAgICBuYW1lOiAiU0tBTEUgfCBDcnlwdG8gQ29sb3NzZXVtIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS9oYXVudGluZy1kZXZvdGVkLWRlbmViIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvaGF1bnRpbmctZGV2b3RlZC1kZW5lYiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2hhdW50aW5nLWRldm90ZWQtZGVuZWIuZXhwbG9yZXIubWFpbm5ldC5za2FsZW5vZGVzLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czoge30KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2thbGUvZXVyb3BhLmpzCiAgdmFyIHNrYWxlRXVyb3BhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDQ2Mzk5MTI2LAogICAgbmFtZTogIlNLQUxFIHwgRXVyb3BhIExpcXVpZGl0eSBIdWIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL2VsYXRlZC10YW4tc2thdCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL3dzL2VsYXRlZC10YW4tc2thdCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2VsYXRlZC10YW4tc2thdC5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMxMTM0OTUKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9ldXJvcGFUZXN0bmV0LmpzCiAgdmFyIHNrYWxlRXVyb3BhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTQ0NDY3MzQxOSwKICAgIG5hbWU6ICJTS0FMRSBFdXJvcGEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuc2thbGVub2Rlcy5jb20vdjEvanVpY3ktbG93LXNtYWxsLXRlc3RuZXQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9qdWljeS1sb3ctc21hbGwtdGVzdG5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2p1aWN5LWxvdy1zbWFsbC10ZXN0bmV0LmV4cGxvcmVyLnRlc3RuZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTEwODU4CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL2V4b3JkZS5qcwogIHZhciBza2FsZUV4b3JkZSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjEzOTkyNzU1MiwKICAgIG5hbWU6ICJTS0FMRSB8IEV4b3JkZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvbGlnaHQtdmFzdC1kaXBoZGEiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9saWdodC12YXN0LWRpcGhkYSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2xpZ2h0LXZhc3QtZGlwaGRhLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHt9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL2h1bWFuUHJvdG9jb2wuanMKICB2YXIgc2thbGVIdW1hblByb3RvY29sID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjczMjI3NDUzLAogICAgbmFtZTogIlNLQUxFIHwgSHVtYW4gUHJvdG9jb2wiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL3dhbi1yZWQtYWluIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3Mvd2FuLXJlZC1haW4iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93YW4tcmVkLWFpbi5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9uZWJ1bGEuanMKICB2YXIgc2thbGVOZWJ1bGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0ODI2MDE2NDksCiAgICBuYW1lOiAiU0tBTEUgfCBOZWJ1bGEgR2FtaW5nIEh1YiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvZ3JlZW4tZ2lkZHktZGVuZWJvbGEiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9ncmVlbi1naWRkeS1kZW5lYm9sYSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2dyZWVuLWdpZGR5LWRlbmVib2xhLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjM3Mjk4NgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL25lYnVsYVRlc3RuZXQuanMKICB2YXIgc2thbGVOZWJ1bGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNzA4NDYyNCwKICAgIG5hbWU6ICJTS0FMRSBOZWJ1bGEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuc2thbGVub2Rlcy5jb20vdjEvbGFua3ktaWxsLWZ1bm55LXRlc3RuZXQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9sYW5reS1pbGwtZnVubnktdGVzdG5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2xhbmt5LWlsbC1mdW5ueS10ZXN0bmV0LmV4cGxvcmVyLnRlc3RuZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTA1MTQxCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL3Jhem9yLmpzCiAgdmFyIHNrYWxlUmF6b3IgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI3ODYxMTM1MSwKICAgIG5hbWU6ICJTS0FMRSB8IFJhem9yIE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL3R1cmJ1bGVudC11bmlxdWUtc2NoZWF0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvdHVyYnVsZW50LXVuaXF1ZS1zY2hlYXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90dXJidWxlbnQtdW5pcXVlLXNjaGVhdC5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS90aXRhbi5qcwogIHZhciBza2FsZVRpdGFuID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMzUwMjE2MjM0LAogICAgbmFtZTogIlNLQUxFIHwgVGl0YW4gQ29tbXVuaXR5IEh1YiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvcGFyYWxsZWwtc3Rvcm15LXNwaWNhIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvcGFyYWxsZWwtc3Rvcm15LXNwaWNhIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU0tBTEUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGFyYWxsZWwtc3Rvcm15LXNwaWNhLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjA3NjQ1OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL3RpdGFuVGVzdG5ldC5qcwogIHZhciBza2FsZVRpdGFuVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAyMDM1MjIyMCwKICAgIG5hbWU6ICJTS0FMRSBUaXRhbiBIdWIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LnNrYWxlbm9kZXMuY29tL3YxL2F3YXJlLWZha2UtdHJpbS10ZXN0bmV0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3Rlc3RuZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvYXdhcmUtZmFrZS10cmltLXRlc3RuZXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hd2FyZS1mYWtlLXRyaW0tdGVzdG5ldC5leHBsb3Jlci50ZXN0bmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEwNDA3MgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2V0Y2hwYWQuanMKICB2YXIgc2tldGNocGFkID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5ODQxMjMsCiAgICBuYW1lOiAiRm9ybWEgU2tldGNocGFkIiwKICAgIG5ldHdvcms6ICJza2V0Y2hwYWQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgc3ltYm9sOiAiVElBIiwKICAgICAgbmFtZTogIlRJQSIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc2tldGNocGFkLTEuZm9ybWEuYXJ0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLnNrZXRjaHBhZC0xLmZvcm1hLmFydCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNrZXRjaHBhZCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5za2V0Y2hwYWQtMS5mb3JtYS5hcnQiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NvbmdiaXJkLmpzCiAgdmFyIHNvbmdiaXJkID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOSwKICAgIG5hbWU6ICJTb25nYmlyZCBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogInNvbmdiaXJkIiwKICAgICAgc3ltYm9sOiAiU0dCIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vc29uZ2JpcmQtYXBpLmZsYXJlLm5ldHdvcmsvZXh0L0MvcnBjIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU29uZ2JpcmQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc29uZ2JpcmQtZXhwbG9yZXIuZmxhcmUubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zb25nYmlyZC1leHBsb3Jlci5mbGFyZS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zb25nYmlyZFRlc3RuZXQuanMKICB2YXIgc29uZ2JpcmRUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNiwKICAgIG5hbWU6ICJDb3N0b24iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiY29zdG9uZmxhcmUiLAogICAgICBzeW1ib2w6ICJDRkxSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vY29zdG9uLWFwaS5mbGFyZS5uZXR3b3JrL2V4dC9DL3JwYyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNvc3RvbiBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9jb3N0b24tZXhwbG9yZXIuZmxhcmUubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9jb3N0b24tZXhwbG9yZXIuZmxhcmUubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NwaWN5LmpzCiAgdmFyIHNwaWN5ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4ODg4MiwKICAgIG5hbWU6ICJDaGlsaXogU3BpY3kgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiY2hpbGl6LXNwaWN5LVRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ0haIiwKICAgICAgc3ltYm9sOiAiQ0haIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL3NwaWN5LXJwYy5jaGlsaXouY29tIiwKICAgICAgICAgICJodHRwczovL2NoaWxpei1zcGljeS1ycGMucHVibGljbm9kZS5jb20iCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsKICAgICAgICAgICJ3c3M6Ly9zcGljeS1ycGMtd3MuY2hpbGl6LmNvbSIsCiAgICAgICAgICAid3NzOi8vY2hpbGl6LXNwaWN5LXJwYy5wdWJsaWNub2RlLmNvbSIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNoaWxpeiBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cDovL3NwaWN5LWV4cGxvcmVyLmNoaWxpei5jb20iLAogICAgICAgIGFwaVVybDogImh0dHA6Ly9zcGljeS1leHBsb3Jlci5jaGlsaXouY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2hhcmRldW1TcGhpbnguanMKICB2YXIgc2hhcmRldW1TcGhpbnggPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwODIsCiAgICBuYW1lOiAiU2hhcmRldW0gU3BoaW54IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTSEFSREVVTSIsIHN5bWJvbDogIlNITSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NwaGlueC5zaGFyZGV1bS5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTaGFyZGV1bSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci1zcGhpbnguc2hhcmRldW0ub3JnIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zaGliYXJpdW0uanMKICB2YXIgc2hpYmFyaXVtID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDksCiAgICBuYW1lOiAiU2hpYmFyaXVtIiwKICAgIG5ldHdvcms6ICJzaGliYXJpdW0iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkJvbmUiLCBzeW1ib2w6ICJCT05FIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnNoaWJycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zaGliYXJpdW1zY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg4NjRCZjY4MUFERDYwNTIzOTUxODhBODkxMDFBMUIzN2QzQjRDOTYxIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI2NTkwMAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NoaWJhcml1bVRlc3RuZXQuanMKICB2YXIgc2hpYmFyaXVtVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTU3LAogICAgbmFtZTogIlB1cHB5bmV0IFNoaWJhcml1bSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCb25lIiwKICAgICAgc3ltYm9sOiAiQk9ORSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3B1cHB5bmV0LnNoaWJycGMuY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wdXBweXNjYW4uc2hpYi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9wdXBweXNjYW4uc2hpYi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweEE0MDI5Yjc0RkJBMzY2YzkyNmVERkE3RGQxMEIyMUM2MjExNzBhNGMiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzAzNTc2OQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zdHJhdGlzLmpzCiAgdmFyIHN0cmF0aXMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwNTEwNSwKICAgIG5hbWU6ICJTdHJhdGlzIE1haW5uZXQiLAogICAgbmV0d29yazogInN0cmF0aXMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIlN0cmF0aXMiLAogICAgICBzeW1ib2w6ICJTVFJBWCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc3RyYXRpc2V2bS5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTdHJhdGlzIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnN0cmF0aXNldm0uY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3N5c2NvaW4uanMKICB2YXIgc3lzY29pbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTcsCiAgICBuYW1lOiAiU3lzY29pbiBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlN5c2NvaW4iLAogICAgICBzeW1ib2w6ICJTWVMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zeXNjb2luLm9yZyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuc3lzY29pbi5vcmcvd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU3lzY29pbkV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnN5c2NvaW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLnN5c2NvaW4ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyODcxMzkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zeXNjb2luVGVzdG5ldC5qcwogIHZhciBzeXNjb2luVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTcwMCwKICAgIG5hbWU6ICJTeXNjb2luIFRhbmVuYmF1bSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlN5c2NvaW4iLAogICAgICBzeW1ib2w6ICJTWVMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy50YW5lbmJhdW0uaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnRhbmVuYmF1bS5pby93c3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTeXNjb2luVGVzdG5ldEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3RhbmVuYmF1bS5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNzEyODgKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90YXJheGEuanMKICB2YXIgdGFyYXhhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4NDEsCiAgICBuYW1lOiAiVGFyYXhhIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlRhcmEiLCBzeW1ib2w6ICJUQVJBIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLm1haW5uZXQudGFyYXhhLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGFyYXhhIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLm1haW5uZXQudGFyYXhhLmlvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvLmpzCiAgdmFyIHRhaWtvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjdlMywKICAgIG5hbWU6ICJUYWlrbyBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMubWFpbm5ldC50YWlrby54eXoiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3MubWFpbm5ldC50YWlrby54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUYWlrb3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vdGFpa29zY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS50YWlrb3NjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYjI0MzY3NzRDM2UxOTFjODUwNTZkMjQ4RUY0MjYwY2U1ZjI3QTlEIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvSGVrbGEuanMKICB2YXIgdGFpa29IZWtsYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY3MDA5LAogICAgbmFtZTogIlRhaWtvIEhla2xhIEwyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5oZWtsYS50YWlrby54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUYWlrb3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vaGVrbGEudGFpa29zY2FuLm5ldHdvcmsiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvSm9sbmlyLmpzCiAgdmFyIHRhaWtvSm9sbmlyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjcwMDcsCiAgICBuYW1lOiAiVGFpa28gSm9sbmlyIChBbHBoYS01IFRlc3RuZXQpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5qb2xuaXIudGFpa28ueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiYmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5qb2xuaXIudGFpa28ueHl6IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDczMjcwNgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90YWlrb0thdGxhLmpzCiAgdmFyIHRhaWtvS2F0bGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE2NzAwOCwKICAgIG5hbWU6ICJUYWlrbyBLYXRsYSAoQWxwaGEtNiBUZXN0bmV0KSIsCiAgICBuZXR3b3JrOiAidGtvLWthdGxhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5rYXRsYS50YWlrby54eXoiXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmthdGxhLnRhaWtvLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIua2F0bGEudGFpa28ueHl6IgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvVGVzdG5ldFNlcG9saWEuanMKICB2YXIgdGFpa29UZXN0bmV0U2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY3MDA1LAogICAgbmFtZTogIlRhaWtvIChBbHBoYS0zIFRlc3RuZXQpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy50ZXN0LnRhaWtvLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdC50YWlrby54eXoiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvdGFyYXhhVGVzdG5ldC5qcwogIHZhciB0YXJheGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4NDIsCiAgICBuYW1lOiAiVGFyYXhhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlRhcmEiLCBzeW1ib2w6ICJUQVJBIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQudGFyYXhhLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGFyYXhhIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQudGFyYXhhLmlvIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90ZWxjb2luVGVzdG5ldC5qcwogIHZhciB0ZWxjb2luVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAxNywKICAgIG5hbWU6ICJUZWxjb2luIEFkaXJpIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlRlbGNvaW4iLCBzeW1ib2w6ICJURUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVsY29pbi5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAidGVsc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZWxzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90ZWxvcy5qcwogIHZhciB0ZWxvcyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDAsCiAgICBuYW1lOiAiVGVsb3MiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiVGVsb3MiLAogICAgICBzeW1ib2w6ICJUTE9TIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC50ZWxvcy5uZXQvZXZtIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGVsb3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3LnRlbG9zY2FuLmlvLyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDY1MzA3MDkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90ZWxvc1Rlc3RuZXQuanMKICB2YXIgdGVsb3NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MSwKICAgIG5hbWU6ICJUZWxvcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJUZWxvcyIsCiAgICAgIHN5bWJvbDogIlRMT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LnRlbG9zLm5ldC9ldm0iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUZWxvc2NhbiAodGVzdG5ldCkiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC50ZWxvc2Nhbi5pby8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RlbmV0LmpzCiAgdmFyIHRlbmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNTU5LAogICAgbmFtZTogIlRlbmV0IiwKICAgIG5ldHdvcms6ICJ0ZW5ldC1tYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJURU5FVCIsCiAgICAgIHN5bWJvbDogIlRFTkVUIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVuZXQub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGVuZXRTY2FuIE1haW5uZXQiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVuZXRzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3RlbmV0c2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90aGFpQ2hhaW4uanMKICB2YXIgdGhhaUNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3LAogICAgbmFtZTogIlRoYWlDaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiVENIIiwgc3ltYm9sOiAiVENIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRoYWljaGFpbi5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cC50aGFpY2hhaW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cC50aGFpY2hhaW4ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MERhRDYxMzBlODMyYzIxNzE5QzVDRTNiYWU5MzQ1NEUxNkE4NDgyNiIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0ODA2Mzg2CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90aHVuZGVyVGVzdG5ldC5qcwogIHZhciB0aHVuZGVyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogOTk3LAogICAgbmFtZTogIjVpcmVDaGFpbiBUaHVuZGVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIjVpcmUgVG9rZW4iLCBzeW1ib2w6ICI1SVJFIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQuNWlyZS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiNWlyZUNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLjVpcmUubmV0d29yayIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvdW5yZWFsLmpzCiAgdmFyIHVucmVhbCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTgyMzMsCiAgICBuYW1lOiAiVW5yZWFsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJyZUVUSCIsCiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgc3ltYm9sOiAicmVFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMudW5yZWFsLW9yYml0LmdlbGF0by5kaWdpdGFsIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVW5yZWFsIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3VucmVhbC5ibG9ja3Njb3V0LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly91bnJlYWwuYmxvY2tzY291dC5jb20vYXBpL3YyIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4OGI2QjBlNjBEOENEODQ4OThFYThiOTgxMDY1QTEyRjg3NmVBNTY3NyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNzQ1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvdmVjaGFpbi5qcwogIHZhciB2ZWNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDAwMDksCiAgICBuYW1lOiAiVmVjaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiVmVDaGFpbiIsIHN5bWJvbDogIlZFVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQudmVjaGFpbi5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJWZWNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmUudmVjaGFpbi5vcmciCiAgICAgIH0sCiAgICAgIHZlY2hhaW5TdGF0czogewogICAgICAgIG5hbWU6ICJWZWNoYWluIFN0YXRzIiwKICAgICAgICB1cmw6ICJodHRwczovL3ZlY2hhaW5zdGF0cy5jb20iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvd2FuY2hhaW4uanMKICB2YXIgd2FuY2hhaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDg4OCwKICAgIG5hbWU6ICJXYW5jaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiV0FOQ0hBSU4iLCBzeW1ib2w6ICJXQU4iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL2d3YW4tc3NsLndhbmRldnMub3JnOjU2ODkxIiwKICAgICAgICAgICJodHRwczovL2d3YW4yLXNzbC53YW5kZXZzLm9yZyIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIldhblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd2Fuc2Nhbi5vcmciCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNERjZBMTU2NmU3OEVCNDU5NGM4NkZlNzNGY2RjODI0MjllOTdmYkIiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjUzMTIzOTAKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy93YW5jaGFpblRlc3RuZXQuanMKICB2YXIgd2FuY2hhaW5UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5OTksCiAgICBuYW1lOiAiV2FuY2hhaW4gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiV0FOQ0hBSU4iLCBzeW1ib2w6ICJXQU50IiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZ3dhbi1zc2wud2FuZGV2cy5vcmc6NDY4OTEiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJXYW5TY2FuVGVzdCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93YW5zY2FuLm9yZyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MTFjODliRjQ0OTZjMzlGQjgwNTM1RmZiNGM5MjcxNTgzOUNDNTMyNCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDc0MzQ0OAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy93ZW1peC5qcwogIHZhciB3ZW1peCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExMSwKICAgIG5hbWU6ICJXRU1JWCIsCiAgICBuZXR3b3JrOiAid2VtaXgtbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiV0VNSVgiLCBzeW1ib2w6ICJXRU1JWCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkud2VtaXguY29tIl0gfSwKICAgICAgcHVibGljOiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkud2VtaXguY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAid2VtaXhFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci53ZW1peC5jb20iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvd2VtaXhUZXN0bmV0LmpzCiAgdmFyIHdlbWl4VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExMiwKICAgIG5hbWU6ICJXRU1JWCBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJ3ZW1peC10ZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJXRU1JWCIsIHN5bWJvbDogInRXRU1JWCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkudGVzdC53ZW1peC5jb20iXSB9LAogICAgICBwdWJsaWM6IHsgaHR0cDogWyJodHRwczovL2FwaS50ZXN0LndlbWl4LmNvbSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIndlbWl4RXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC53ZW1peHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQud2VtaXhzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3hMYXllclRlc3RuZXQuanMKICB2YXIgeExheWVyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTk1LAogICAgbmFtZTogIlgxIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiT0tCIiwKICAgICAgc3ltYm9sOiAiT0tCIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8veGxheWVydGVzdHJwYy5va3guY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiT0tMaW5rIiwKICAgICAgICB1cmw6ICJodHRwczovL3d3dy5va2xpbmsuY29tL3hsYXllci10ZXN0IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDYyNDM0NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94TGF5ZXIuanMKICB2YXIgeExheWVyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOTYsCiAgICBuYW1lOiAiWCBMYXllciBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk9LQiIsCiAgICAgIHN5bWJvbDogIk9LQiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy54bGF5ZXIudGVjaCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk9LTGluayIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cub2tsaW5rLmNvbS94bGF5ZXIiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDc0MTYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94YWkuanMKICB2YXIgeGFpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2NjAyNzksCiAgICBuYW1lOiAiWGFpIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlhhaSIsIHN5bWJvbDogIlhBSSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3hhaS1jaGFpbi5uZXQvcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci54YWktY2hhaW4ubmV0IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDIyMjU0OQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMveGFpVGVzdG5ldC5qcwogIHZhciB4YWlUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNzcxNDU1NTQyOSwKICAgIG5hbWU6ICJYYWkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic1hhaSIsIHN5bWJvbDogInNYQUkiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LXYyLnhhaS1jaGFpbi5uZXQvcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLXYyLnhhaS1jaGFpbi5uZXQiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3hkYy5qcwogIHZhciB4ZGMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDUwLAogICAgbmFtZTogIlhpbkZpbiBOZXR3b3JrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlhEQyIsCiAgICAgIHN5bWJvbDogIlhEQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy54aW5maW4ubmV0d29yayJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICB4aW5maW46IHsKICAgICAgICBuYW1lOiAiWGluRmluIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnhpbmZpbi5uZXR3b3JrIgogICAgICB9LAogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8veGRjLmJsb2Nrc3NjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNzE1NDI3ODgKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94ZGNUZXN0bmV0LmpzCiAgdmFyIHhkY1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDUxLAogICAgbmFtZTogIkFwb3RoZW0gTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJUWERDIiwKICAgICAgc3ltYm9sOiAiVFhEQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2VycGMuYXBvdGhlbS5uZXR3b3JrIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hcG90aGVtLmJsb2Nrc3NjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTk3NjUzODkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94clNlcG9saWEuanMKICB2YXIgeHJTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNzMwLAogICAgbmFtZTogIlhSIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAidFhSIiwKICAgICAgc3ltYm9sOiAidFhSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8veHItc2Vwb2xpYS10ZXN0bmV0LnJwYy5jYWxkZXJhLnh5ei9odHRwIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly94ci1zZXBvbGlhLXRlc3RuZXQuZXhwbG9yZXIuY2FsZGVyYS54eXoiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3lvb2xkb1ZlcnNlLmpzCiAgdmFyIHlvb2xkb1ZlcnNlID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1MDAwNSwKICAgIG5hbWU6ICJZb29sZG8gVmVyc2UiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk9BUyIsIHN5bWJvbDogIk9BUyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy55b29sZG8tdmVyc2UueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiWW9vbGRvIFZlcnNlIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnlvb2xkby12ZXJzZS54eXoiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMveW9vbGRvVmVyc2VUZXN0bmV0LmpzCiAgdmFyIHlvb2xkb1ZlcnNlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTAwMDYsCiAgICBuYW1lOiAiWW9vbGRvIFZlcnNlIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk9BUyIsIHN5bWJvbDogIk9BUyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy50ZXN0bmV0Lnlvb2xkby12ZXJzZS54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJZb29sZG8gVmVyc2UgVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci50ZXN0bmV0Lnlvb2xkby12ZXJzZS54eXoiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3pldGFjaGFpbi5qcwogIHZhciB6ZXRhY2hhaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDdlMywKICAgIG5hbWU6ICJaZXRhQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWmV0YSIsCiAgICAgIHN5bWJvbDogIlpFVEEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3pldGFjaGFpbi1ldm0uYmxvY2twaS5uZXR3b3JrL3YxL3JwYy9wdWJsaWMiXQogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE2MzI3ODEKICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiWmV0YVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuemV0YWNoYWluLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3pldGFjaGFpbkF0aGVuc1Rlc3RuZXQuanMKICB2YXIgemV0YWNoYWluQXRoZW5zVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNzAwMSwKICAgIG5hbWU6ICJaZXRhQ2hhaW4gQXRoZW5zIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWmV0YSIsCiAgICAgIHN5bWJvbDogImFaRVRBIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly96ZXRhY2hhaW4tYXRoZW5zLWV2bS5ibG9ja3BpLm5ldHdvcmsvdjEvcnBjL3B1YmxpYyJdCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjcxNTIxNwogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJaZXRhU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hdGhlbnMuZXhwbG9yZXIuemV0YWNoYWluLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemhlamlhbmcuanMKICB2YXIgemhlamlhbmcgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMzc4MDMsCiAgICBuYW1lOiAiWmhlamlhbmciLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlpoZWppYW5nIEV0aGVyIiwgc3ltYm9sOiAiWmhlakVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy56aGVqaWFuZy5ldGhwYW5kYW9wcy5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJlYWNvbmNoYWluIiwKICAgICAgICB1cmw6ICJodHRwczovL3poZWppYW5nLmJlYWNvbmNoYS5pbiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemlsbGlxYS5qcwogIHZhciB6aWxsaXFhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMjc2OSwKICAgIG5hbWU6ICJaaWxsaXFhIiwKICAgIG5ldHdvcms6ICJ6aWxsaXFhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJaaWxsaXFhIiwgc3ltYm9sOiAiWklMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vYXBpLnppbGxpcWEuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJuYWwiLAogICAgICAgIHVybDogImh0dHBzOi8vZXZteC56aWxsaXFhLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3ppbGxpcWFUZXN0bmV0LmpzCiAgdmFyIHppbGxpcWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMzEwMSwKICAgIG5hbWU6ICJaaWxsaXFhIFRlc3RuZXQiLAogICAgbmV0d29yazogInppbGxpcWEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiWmlsbGlxYSIsIHN5bWJvbDogIlpJTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2Rldi1hcGkuemlsbGlxYS5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcm5hbCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ldm14LnRlc3RuZXQuemlsbGlxYS5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prRmFpci5qcwogIHZhciB6a0ZhaXIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyNzY2LAogICAgbmFtZTogIlpLRmFpciBNYWlubmV0IiwKICAgIG5ldHdvcms6ICJ6a2ZhaXItbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJVU0QgQ29pbiIsCiAgICAgIHN5bWJvbDogIlVTREMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy56a2ZhaXIuaW8iXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnprZmFpci5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogInprRmFpciBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLnprZmFpci5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLnprZmFpci5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjA5MDk1OQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemtGYWlyVGVzdG5ldC5qcwogIHZhciB6a0ZhaXJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0Mzg1MSwKICAgIG5hbWU6ICJaS0ZhaXIgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiemtmYWlyLXRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiVVNEIENvaW4iLAogICAgICBzeW1ib2w6ICJVU0RDIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LXJwYy56a2ZhaXIuaW8iXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC1ycGMuemtmYWlyLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiemtGYWlyIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQtc2Nhbi56a2ZhaXIuaW8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prTGlua05vdmEuanMKICB2YXIgemtMaW5rTm92YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogODEwMTgwLAogICAgbmFtZTogInprTGluayBOb3ZhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUSCIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy56a2xpbmsuaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJ6a0xpbmsgTm92YSBCbG9jayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci56a2xpbmsuaW8iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemtMaW5rTm92YVNlcG9saWFUZXN0bmV0LmpzCiAgdmFyIHprTGlua05vdmFTZXBvbGlhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogODEwMTgxLAogICAgbmFtZTogInprTGluayBOb3ZhIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFVEgiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLnJwYy56a2xpbmsuaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJ6a0xpbmsgTm92YSBCbG9jayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZXBvbGlhLmV4cGxvcmVyLnprbGluay5pbyIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy96a3N5bmMuanMKICB2YXIgemtzeW5jID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnLAogICAgaWQ6IDMyNCwKICAgIG5hbWU6ICJaS3N5bmMgRXJhIiwKICAgIG5ldHdvcms6ICJ6a3N5bmMtZXJhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmVyYS56a3N5bmMuaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vbWFpbm5ldC5lcmEuemtzeW5jLmlvL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2VyYS56a3N5bmMubmV0d29yay8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLWVyYS56a3N5bmMubmV0d29yay9hcGkiCiAgICAgIH0sCiAgICAgIG5hdGl2ZTogewogICAgICAgIG5hbWU6ICJaS3N5bmMgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuemtzeW5jLmlvLyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ibG9jay1leHBsb3Jlci1hcGkubWFpbm5ldC56a3N5bmMuaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhGOWNkYTYyNEZCQzdlMDU5MzU1Y2U5OGEzMTY5M2QyOTlGQUNkOTYzIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prc3luY0luTWVtb3J5Tm9kZS5qcwogIHZhciB6a3N5bmNJbk1lbW9yeU5vZGUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcsCiAgICBpZDogMjYwLAogICAgbmFtZTogIlpLc3luYyBJbk1lbW9yeSBOb2RlIiwKICAgIG5ldHdvcms6ICJ6a3N5bmMtaW4tbWVtb3J5LW5vZGUiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHA6Ly9sb2NhbGhvc3Q6ODAxMSJdCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prc3luY0xvY2FsTm9kZS5qcwogIHZhciB6a3N5bmNMb2NhbE5vZGUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcsCiAgICBpZDogMjcwLAogICAgbmFtZTogIlpLc3luYyBDTEkgTG9jYWwgTm9kZSIsCiAgICBuZXR3b3JrOiAiemtzeW5jLWNsaS1sb2NhbC1ub2RlIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwOi8vbG9jYWxob3N0OjMwNTAiXQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy96a3N5bmNTZXBvbGlhVGVzdG5ldC5qcwogIHZhciB6a3N5bmNTZXBvbGlhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZywKICAgIGlkOiAzMDAsCiAgICBuYW1lOiAiWktzeW5jIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiemtzeW5jLXNlcG9saWEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLmVyYS56a3N5bmMuZGV2Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3NlcG9saWEuZXJhLnprc3luYy5kZXYvd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS1lcmEuemtzeW5jLm5ldHdvcmsvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1zZXBvbGlhLWVyYS56a3N5bmMubmV0d29yay9hcGkiCiAgICAgIH0sCiAgICAgIG5hdGl2ZTogewogICAgICAgIG5hbWU6ICJaS3N5bmMgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5leHBsb3Jlci56a3N5bmMuaW8vIiwKICAgICAgICBibG9ja0V4cGxvcmVyQXBpOiAiaHR0cHM6Ly9ibG9jay1leHBsb3Jlci1hcGkuc2Vwb2xpYS56a3N5bmMuZGV2L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4RjljZGE2MjRGQkM3ZTA1OTM1NWNlOThhMzE2OTNkMjk5RkFDZDk2MyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvem9yYS5qcwogIHZhciBzb3VyY2VJZDI4ID0gMTsKICB2YXIgem9yYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogNzc3Nzc3NywKICAgIG5hbWU6ICJab3JhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuem9yYS5lbmVyZ3kiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnpvcmEuZW5lcmd5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuem9yYS5lbmVyZ3kiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuem9yYS5lbmVyZ3kvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMjhdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg5RTYyMDRGNzUwY0Q4NjZiMjk5NTk0ZTJhQzllQTgyNEUyZTVmOTVjIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTg4MgogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQyOF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDFhMGFkMDExOTEzQTE1MGY2OWY2QTE5REY0NDdBMENmRDk1NTEwNTQiCiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkMjhdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgzZTJFYTlCOTJCN0U0OEE1MjI5NmZEMjYxZGMyNmZkOTk1Mjg0NjMxIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDI4CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3pvcmFTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMjkgPSAxMTE1NTExMTsKICB2YXIgem9yYVNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDk5OTk5OTk5OSwKICAgIG5hbWU6ICJab3JhIFNlcG9saWEiLAogICAgbmV0d29yazogInpvcmEtc2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJab3JhIFNlcG9saWEiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEucnBjLnpvcmEuZW5lcmd5Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3NlcG9saWEucnBjLnpvcmEuZW5lcmd5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiWm9yYSBTZXBvbGlhIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEuZXhwbG9yZXIuem9yYS5lbmVyZ3kvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NlcG9saWEuZXhwbG9yZXIuem9yYS5lbmVyZ3kvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMjldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgyNjE1QjQ4MUJkM0U1QTFDMEM3Q2EzRGExYmRjNjYzRTg2MTVBZGU5IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogODMxNjAKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMjldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhlZmZFMkM2Y0E5QWI3OTdENDE4ZjBEOTFlQTYwODA3NzEzZjM1MzZmIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDI5XTogewogICAgICAgICAgYWRkcmVzczogIjB4NTM3NmYxRDU0M2RjYkI1QkQ0MTZjNTZDMTg5ZTRjQjczOTlmQ2NDQiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQyOSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvem9yYVRlc3RuZXQuanMKICB2YXIgc291cmNlSWQzMCA9IDU7CiAgdmFyIHpvcmFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiA5OTksCiAgICBuYW1lOiAiWm9yYSBHb2VybGkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJab3JhIEdvZXJsaSIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5ycGMuem9yYS5lbmVyZ3kiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC5ycGMuem9yYS5lbmVyZ3kiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmV4cGxvcmVyLnpvcmEuZW5lcmd5IiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQuZXhwbG9yZXIuem9yYS5lbmVyZ3kvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE4OTEyMwogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQzMF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweERiOUY1MTc5MDM2NWU3ZGMxOTZlN0QwNzI3MjhkZjM5QmU5NThBQ2UiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMzAsCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3ppcmN1aXRUZXN0bmV0LmpzCiAgdmFyIHppcmN1aXRUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0ODg5OSwKICAgIG5hbWU6ICJaaXJjdWl0IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkVUSCIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3ppcmN1aXQxLnAycGlmeS5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJaaXJjdWl0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnppcmN1aXQuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDYwNDAyODcKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQHNjdXJlL2JpcDM5L2VzbS93b3JkbGlzdHMvY3plY2guanMKICB2YXIgd29yZGxpc3QgPSBgYWJkaWthY2UKYWJlY2VkYQphZHJlc2EKYWdyZXNlCmFrY2UKYWt0b3ZrYQphbGVqCmFsa29ob2wKYW1wdXRhY2UKYW5hbmFzCmFuZHVsa2EKYW5la2RvdGEKYW5rZXRhCmFudGlrYQphbnVsb3ZhdAphcmNoYQphcm9nYW5jZQphc2ZhbHQKYXNpc3RlbnQKYXNwaXJhY2UKYXN0bWEKYXN0cm9ub20KYXRsYXMKYXRsZXRpa2EKYXRvbAphdXRvYnVzCmF6eWwKYmFia2EKYmFjaG9yCmJhY2lsCmJhY3Vsa2EKYmFkYXRlbApiYWdldGEKYmFncgpiYWhubwpiYWt0ZXJpZQpiYWxhZGEKYmFsZXRrYQpiYWxrb24KYmFsb25lawpiYWx2YW4KYmFsemEKYmFtYnVzCmJhbmtvbWF0CmJhcmJhcgpiYXJldApiYXJtYW4KYmFyb2tvCmJhcnZhCmJhdGVya2EKYmF0b2gKYmF2bG5hCmJhemFsa2EKYmF6aWxpa2EKYmF6dWthCmJlZG5hCmJlcmFuCmJlc2VkYQpiZXN0aWUKYmV0b24KYmV6aW5rYQpiZXptb2MKYmV6dGFrCmJpY3lrbApiaWRsbwpiaWZ0ZWsKYmlraW55CmJpbGFuY2UKYmlvZ3JhZgpiaW9sb2cKYml0dmEKYml6b24KYmxhaG9ieXQKYmxhdG91Y2gKYmxlY2hhCmJsZWR1bGUKYmxlc2sKYmxpa2F0CmJsaXpuYQpibG9rb3ZhdApibG91ZGl0CmJsdWQKYm9iZWsKYm9icgpib2RsaW5hCmJvZG5vdXQKYm9oYXRvc3QKYm9qa290CmJvam92YXQKYm9rb3J5cwpib2xlc3QKYm9yZWMKYm9yb3ZpY2UKYm90YQpib3ViZWwKYm91Y2hhdApib3VkYQpib3VsZQpib3VyYXQKYm94ZXIKYnJhZGF2a2EKYnJhbWJvcmEKYnJhbmthCmJyYXRyCmJyZXB0YQpicmlrZXRhCmJya28KYnJsb2gKYnJvbnoKYnJvc2tldgpicnVuZXRrYQpicnVzaW5rYQpicnpkYQpicnp5CmJ1YmxpbmEKYnVibm92YXQKYnVjaHRhCmJ1ZGl0ZWwKYnVka2EKYnVkb3ZhCmJ1ZmV0CmJ1amFyb3N0CmJ1a3ZpY2UKYnVsZG9rCmJ1bHZhCmJ1bmRhCmJ1bmtyCmJ1cnphCmJ1dGlrCmJ1dm9sCmJ1em9sYQpieWRsZXQKYnlsaW5hCmJ5dG92a2EKYnp1a290CmNhcGFydApjYXJldm5hCmNlZHIKY2VkdWxlCmNlamNoCmNlam4KY2VsYQpjZWxlcgpjZWxrZW0KY2VsbmljZQpjZW5pbmEKY2Vubm9zdApjZW5vdmthCmNlbnRydW0KY2Vuem9yCmNlc3RvcGlzCmNldGthCmNoYWx1cGEKY2hhcGFkbG8KY2hhcml0YQpjaGF0YQpjaGVjaHRhdApjaGVtaWUKY2hpY2hvdApjaGlydXJnCmNobGFkCmNobGViYQpjaGx1Yml0CmNobWVsCmNobXVyYQpjaG9ib3QKY2hvY2hvbApjaG9kYmEKY2hvbGVyYQpjaG9tb3V0CmNob3BpdApjaG9yb2JhCmNob3YKY2hyYXBvdApjaHJsaXQKY2hydApjaHJ1cApjaHRpdm9zdApjaHVkaW5hCmNodXRuYXQKY2h2YXQKY2h2aWxrYQpjaHZvc3QKY2h5YmEKY2h5c3RhdApjaHl0aXQKY2lidWxlCmNpZ2FyZXRhCmNpaGVsbmEKY2lobGEKY2lua290CmNpcmt1cwpjaXN0ZXJuYQpjaXRhY2UKY2l0cnVzCmNpemluZWMKY2l6b3N0CmNsb25hCmNva29saXYKY291dmF0CmN0aXRlbApjdG5vc3QKY3Vkbm9zdApjdWtldGEKY3VrcgpjdXBvdApjdmFrbm91dApjdmFsCmN2aWsKY3Zya290CmN5a2xpc3RhCmRhbGVrbwpkYXJlYmEKZGF0ZWwKZGF0dW0KZGNlcmEKZGViYXRhCmRlY2hvdmthCmRlY2liZWwKZGVmaWNpdApkZWZsYWNlCmRla2wKZGVrcmV0CmRlbW9rcmF0CmRlcHJlc2UKZGVyYnkKZGVza2EKZGV0ZWt0aXYKZGlrb2JyYXoKZGlrdG92YXQKZGlvZGEKZGlwbG9tCmRpc2sKZGlzcGxlagpkaXZhZGxvCmRpdm9jaApkbGFoYQpkbG91aG8KZGx1aG9waXMKZG5lcwpkb2Jybwpkb2J5dGVrCmRvY2VudApkb2NodXRpdApkb2RuZXMKZG9obGVkCmRvaG9kYQpkb2hyYQpkb2plbQpkb2puaWNlCmRva2xhZApkb2tvbGEKZG9rdG9yCmRva3VtZW50CmRvbGFyCmRvbGV2YQpkb2xpbmEKZG9tYQpkb21pbmFudApkb21sdXZpdApkb21vdgpkb251dGl0CmRvcGFkCmRvcGlzCmRvcGxuaXQKZG9wb3N1ZApkb3Byb3ZvZApkb3B1c3RpdApkb3Jheml0CmRvcm9zdApkb3J0CmRvc2FoCmRvc2xvdgpkb3N0YXRlawpkb3N1ZApkb3N5dGEKZG90YXoKZG90ZWsKZG90a25vdXQKZG91ZmF0CmRvdXRuYXQKZG92b3pjZQpkb3phZHUKZG96bmF0CmRvem9yY2UKZHJhaG90YQpkcmFrCmRyYW1hdGlrCmRyYXZlYwpkcmF6ZQpkcmRvbApkcm9ibm9zdApkcm9nZXJpZQpkcm96ZApkcnNub3N0CmRydGl0CmRyem9zdApkdWJlbgpkdWNob3ZubwpkdWRlawpkdWhhCmR1aG92a2EKZHVzaXQKZHVzbm8KZHV0b3N0CmR2b2ppY2UKZHZvcmVjCmR5bmFtaXQKZWtvbG9nCmVrb25vbWllCmVsZWt0cm9uCmVsaXBzYQplbWFpbAplbWlzZQplbW9jZQplbXBhdGllCmVwaXpvZGEKZXBvY2hhCmVwb3BlagplcG9zCmVzZWoKZXNlbmNlCmVza29ydGEKZXNreW1vCmV0aWtldGEKZXVmb3JpZQpldm9sdWNlCmV4ZWt1Y2UKZXhrdXJ6ZQpleHBlZGljZQpleHBsb3plCmV4cG9ydApleHRyYWt0CmZhY2thCmZhamZrYQpmYWt1bHRhCmZhbmF0aWsKZmFudGF6aWUKZmFybWFjaWUKZmF2b3JpdApmYXpvbGUKZmVkZXJhY2UKZmVqZXRvbgpmZW5rYQpmaWFsa2EKZmlndXJhbnQKZmlsb3pvZgpmaWx0cgpmaW5hbmNlCmZpbnRhCmZpeGFjZQpmam9yZApmbGFuZWwKZmxpcnQKZmxvdGlsYQpmb25kCmZvc2Zvcgpmb3RiYWwKZm90a2EKZm90b24KZnJha2NlCmZyZXNrYQpmcm9udGEKZnVrYXIKZnVua2NlCmZ5emlrYQpnYWxlamUKZ2FyYW50CmdlbmV0aWthCmdlb2xvZwpnaWxvdGluYQpnbGF6dXJhCmdsZWp0CmdvbGVtCmdvbGZpc3RhCmdvdGlrYQpncmFmCmdyYW1vZm9uCmdyYW51bGUKZ3JlcApncmlsCmdyb2cKZ3JvdGVza2EKZ3VtYQpoYWRpY2UKaGFkcgpoYWxhCmhhbGVua2EKaGFuYmEKaGFub3BpcwpoYXJmYQpoYXJwdW5hCmhhdnJhbgpoZWJrb3N0CmhlamthbApoZWpubwpoZWp0bWFuCmhla3RhcgpoZWxtYQpoZW1hdG9tCmhlcmVjCmhlcm5hCmhlc2xvCmhlemt5Cmhpc3RvcmlrCmhsYWRvdmthCmhsYXNpdmt5CmhsYXZhCmhsZWRhdApobGVuCmhsb2RhdmVjCmhsb2gKaGxvdXBvc3QKaGx0YXQKaGx1YmluYQpobHVjaG90YQpobWF0Cmhtb3RhCmhteXoKaG5pcwpobm9qaXZvCmhub3V0CmhvYmxpbmEKaG9ib2oKaG9jaApob2RpbnkKaG9kbGF0CmhvZG5vdGEKaG9kb3ZhdApob2pub3N0Cmhva2VqCmhvbGlua2EKaG9sa2EKaG9sdWIKaG9tb2xlCmhvbml0YmEKaG9ub3JhY2UKaG9yYWwKaG9yZGEKaG9yaXpvbnQKaG9ya28KaG9ybGl2ZWMKaG9ybW9uCmhvcm5pbmEKaG9yb3Nrb3AKaG9yc3R2bwpob3Nwb2RhCmhvc3RpbmEKaG90b3Zvc3QKaG91YmEKaG91Zgpob3VwYXQKaG91c2thCmhvdm9yCmhyYWRiYQpocmFuaWNlCmhyYXZvc3QKaHJhemRhCmhyYm9sZWsKaHJkaW5hCmhyZGxvCmhyZG9zdApocm5lawpocm9ia2EKaHJvbWFkYQpocm90Cmhyb3VkYQpocm96ZW4KaHJzdGthCmhydWJvc3QKaHJ5emF0Cmh1YmVub3N0Cmh1Ym5vdXQKaHVkYmEKaHVrb3QKaHVtcgpodXNpdGEKaHVzdG90YQpodm96ZApoeWJub3N0Cmh5ZHJhbnQKaHlnaWVuYQpoeW1uYQpoeXN0ZXJpawppZHlsa2EKaWhuZWQKaWtvbmEKaWx1emUKaW11bml0YQppbmZla2NlCmluZmxhY2UKaW5rYXNvCmlub3ZhY2UKaW5zcGVrY2UKaW50ZXJuZXQKaW52YWxpZGEKaW52ZXN0b3IKaW56ZXJjZQppcm9uaWUKamFibGtvCmphY2h0YQpqYWhvZGEKamFrbWlsZQpqYWtvc3QKamFsb3ZlYwpqYW50YXIKamFybWFyawpqYXJvCmphc2FuCmphc25vCmphdGthCmphdm9yCmphenlrCmplZGluZWMKamVkbGUKamVkbmF0ZWwKamVobGFuCmpla290CmplbGVuCmplbGl0bwpqZW1ub3N0Cmplbm9tCmplcGljZQpqZXNldGVyCmpldml0CmplemRlYwpqZXplcm8KamluYWsKamluZHkKamlub2NoCmppc2tyYQpqaXN0b3RhCmppdHJuaWNlCmppenZhCmptZW5vdmF0CmpvZ3VydApqdXJ0YQprYWJhcmV0CmthYmVsCmthYmluZXQKa2FjaG5hCmthZGV0CmthZGlkbG8Ka2FoYW4Ka2FqYWsKa2FqdXRhCmtha2FvCmtha3R1cwprYWxhbWl0YQprYWxob3R5CmthbGlicgprYWxub3N0CmthbWVyYQprYW1rb2xpdgprYW1uYQprYW5pYmFsCmthbm9lCmthbnRvcgprYXBhbGluYQprYXBlbGEKa2FwaXRvbGEKa2Fwa2EKa2FwbGUKa2Fwb3RhCmthcHIKa2FwdXN0YQprYXB5YmFyYQprYXJhbWVsCmthcm90a2EKa2FydG9uCmthc2EKa2F0YWxvZwprYXRlZHJhCmthdWNlCmthdXphCmthdmFsZWMKa2F6YWprYQprYXpldGEKa2F6aXZvc3QKa2Rla29saXYKa2Rlc2kKa2VkbHViZW4Ka2VtcAprZXJhbWlrYQpraW5vCmtsYWNlawprbGFkaXZvCmtsYW0Ka2xhcG90CmtsYXNpa2EKa2xhdW4Ka2xlYwprbGVuYmEKa2xlcGF0CmtsZXNub3V0CmtsaWQKa2xpbWEKa2xpc25hCmtsb2JvdWsKa2xva2FuCmtsb3BhCmtsb3ViCmtsdWJvdm5hCmtsdXNhdAprbHV6a29zdAprbWVuCmttaXRhdAprbW90cgprbmloYQprbm90CmtvYWxpY2UKa29iZXJlYwprb2JrYQprb2JsaWhhCmtvYnlsYQprb2NvdXIKa29ob3V0CmtvamVuZWMKa29rb3MKa29rdGVqbAprb2xhcHMKa29sZWRhCmtvbGl6ZQprb2xvCmtvbWFuZG8Ka29tZXRhCmtvbWlrCmtvbW5hdGEKa29tb3JhCmtvbXBhcwprb211bml0YQprb25hdAprb25jZXB0CmtvbmRpY2UKa29uZWMKa29uZmVzZQprb25ncmVzCmtvbmluYQprb25rdXJzCmtvbnRha3QKa29uemVydmEKa29wYW5lYwprb3BpZQprb3Bub3V0CmtvcHJvdmthCmtvcmJlbAprb3Jla3Rvcgprb3JtaWRsbwprb3JvcHRldgprb3JwdXMKa29ydW5hCmtvcnl0bwprb3J6ZXQKa29zYXRlYwprb3N0a2EKa290ZWwKa290bGV0YQprb3RvdWwKa291a2F0CmtvdXBlbG5hCmtvdXNlawprb3V6bG8Ka292Ym9qCmtvemEKa296b3JvaAprcmFiaWNlCmtyYWNoCmtyYWppbmEKa3JhbG92YXQKa3Jhc29waXMKa3JhdmF0YQprcmVkaXQKa3JlamNhcgprcmVzYmEKa3JldmV0YQprcmlrZXQKa3JpdGlrCmtyaXplCmtya2F2ZWMKa3JtZWxlYwprcm1pdm8Ka3JvY2FuCmtyb2sKa3JvbmlrYQprcm9waXQKa3JvdXBhCmtyb3ZrYQprcnRlawprcnVoYWRsbwprcnVwaWNlCmtydXRvc3QKa3J2aW5rYQprcnljaGxlCmtyeXB0YQprcnlzdGFsCmtyeXQKa3VkbGFua2EKa3VmcgprdWpub3N0Cmt1a2xhCmt1bGFqZGEKa3VsaWNoCmt1bGthCmt1bG9tZXQKa3VsdHVyYQprdW5hCmt1cG9kaXZ1Cmt1cnQKa3Vyem9yCmt1dGlsCmt2YWxpdGEKa3Zhc2lua2EKa3Zlc3RvcgpreW5vbG9nCmt5c2VsaW5hCmt5dGFyYQpreXRpY2UKa3l0a2EKa3l0b3ZlYwpreXZhZGxvCmxhYnJhZG9yCmxhY2h0YW4KbGFkbm9zdApsYWlrCmxha29tZWMKbGFtZWxhCmxhbXBhCmxhbm92a2EKbGFzaWNlCmxhc28KbGFzdHVyYQpsYXRpbmthCmxhdmluYQpsZWJrYQpsZWNrZHkKbGVkZW4KbGVkbmljZQpsZWRvdmthCmxlZHZpbmEKbGVnZW5kYQpsZWdpZQpsZWdyYWNlCmxlaGNlCmxlaGtvc3QKbGVobm91dApsZWt0dmFyCmxlbm9jaG9kCmxlbnRpbGthCmxlcGVua2EKbGVwaWRsbwpsZXRhZGxvCmxldGVjCmxldG1vCmxldG9rcnVoCmxldmhhcnQKbGV2aXRhY2UKbGV2b2JvawpsaWJyYQpsaWNob3RrYQpsaWRvamVkCmxpZHNrb3N0CmxpaG92aW5hCmxpamF2ZWMKbGlsZWsKbGltZXRrYQpsaW5pZQpsaW5rYQpsaW5vbGV1bQpsaXN0b3BhZApsaXRpbmEKbGl0b3ZhdApsb2Jpc3RhCmxvZGl2b2QKbG9naWthCmxvZ29wZWQKbG9rYWxpdGEKbG9rZXQKbG9tY292YXQKbG9wYXRhCmxvcHVjaApsb3JkCmxvc29zCmxvdHIKbG91ZGFsCmxvdWgKbG91a2EKbG91c2thdApsb3ZlYwpsc3Rpdm9zdApsdWNlcm5hCmx1Y2lmZXIKbHVtcApsdXNrCmx1c3RyYWNlCmx2aWNlCmx5cmEKbHlyaWthCmx5c2luYQptYWRhbQptYWRsbwptYWdpc3RyCm1haGFnb24KbWFqZXRlawptYWppdGVsCm1ham9yaXRhCm1ha2FrCm1ha292aWNlCm1ha3JlbGEKbWFsYmEKbWFsaW5hCm1hbG92YXQKbWFsdmljZQptYW1pbmthCm1hbmRsZQptYW5rbwptYXJub3N0Cm1hc2FrcgptYXNrb3QKbWFzb3B1c3QKbWF0aWNlCm1hdHJpa2EKbWF0dXJpdGEKbWF6YW5lYwptYXppdm8KbWF6bGl0Cm1henVya2EKbWRsb2JhCm1lY2hhbmlrCm1lZGl0YWNlCm1lZG92aW5hCm1lbGFzYQptZWxvdW4KbWVudG9sa2EKbWV0bGEKbWV0b2RhCm1ldHIKbWV6ZXJhCm1pZ3JhY2UKbWlobm91dAptaWh1bGUKbWlraW5hCm1pa3JvZm9uCm1pbGVuZWMKbWlsaW1ldHIKbWlsb3N0Cm1pbWlrYQptaW5jb3ZuYQptaW5pYmFyCm1pbm9tZXQKbWludWxvc3QKbWlza2EKbWlzdHIKbWl4b3ZhdAptbGFkb3N0Cm1saGEKbWxob3ZpbmEKbWxvawptbHNhdAptbHV2aXQKbW5pY2gKbW5vaGVtCm1vYmlsCm1vY25vc3QKbW9kZWxrYQptb2RsaXRiYQptb2h5bGEKbW9rcm8KbW9sZWt1bGEKbW9tZW50a2EKbW9uYXJjaGEKbW9ub2tsCm1vbnN0cnVtCm1vbnRvdmF0Cm1vbnp1bgptb3Nhegptb3NreXQKbW9zdAptb3RpdmFjZQptb3RvcmthCm1vdHlrYQptb3VjaGEKbW91ZHJvc3QKbW96YWlrYQptb3plawptb3pvbAptcmFtb3IKbXJhdmVuZWMKbXJrZXYKbXJ0dm9sYQptcnpldAptcnp1dG9zdAptc3RpdGVsCm11ZHJjCm11ZmxvbgptdWxhdAptdW1pZQptdW5pY2UKbXVzZXQKbXV0YWNlCm11emV1bQptdXppa2FudApteXNsaXZlYwptemRhCm5hYm91cmF0Cm5hY2h5dGF0Cm5hZGFjZQpuYWRieXRlawpuYWRob3oKbmFkb2JybwpuYWRwaXMKbmFobGFzCm5haG5hdApuYWhvZGlsZQpuYWhyYWRpdApuYWl2aXRhCm5hamVkbm91Cm5hamlzdG8KbmFqbW91dApuYWtsb25pdApuYWtvbmVjCm5ha3JtaXQKbmFsZXZvCm5hbWF6YXQKbmFtbHV2aXQKbmFub21ldHIKbmFva28KbmFvcGFrCm5hb3N0cm8KbmFwYWRhdApuYXBldm5vCm5hcGxuaXQKbmFwbm91dApuYXBvc2xlZApuYXByb3N0bwpuYXJvZGl0Cm5hcnVieQpuYXJ5Y2hsbwpuYXNhZGl0Cm5hc2VrYXQKbmFzbGVwbwpuYXN0YXQKbmF0b2xpawpuYXZlbmVrCm5hdnJjaApuYXZ6ZG9yeQpuYXp2YXQKbmViZQpuZWNoYXQKbmVja3kKbmVkYWxla28KbmVkYmF0Cm5lZHVoCm5lZ2FjZQpuZWhldApuZWhvZGEKbmVqZW4KbmVqcHJ2ZQpuZWtsaWQKbmVsaWJvc3QKbmVtaWxvc3QKbmVtb2MKbmVvY2hvdGEKbmVvbmthCm5lcG9rb2oKbmVyb3N0Cm5lcnYKbmVzbXlzbApuZXNvdWxhZApuZXR2b3IKbmV1cm9uCm5ldmluYQpuZXp2eWtsZQpuaWNvdGEKbmlqYWsKbmlrYW0KbmlrZHkKbmlrbApuaWt0ZXJhawpuaXRybwpub2NsZWgKbm9oYXZpY2UKbm9taW5hY2UKbm9yYQpub3Jlawpub3NpdGVsCm5vc25vc3QKbm91emUKbm92aW55Cm5vdm90YQpub3pkcmEKbnVkYQpudWRsZQpudWdldApudXRpdApudXRub3N0Cm51dHJpZQpueW1mYQpvYmFsCm9iYXJ2aXQKb2JhdmEKb2JkaXYKb2JlYwpvYmVobmF0Cm9iZWptb3V0Cm9iZXppdGEKb2JoYWpvYmEKb2JpbG5pY2UKb2JqYXNuaXQKb2JqZWt0Cm9ia2xvcGl0Cm9ibGFzdApvYmxlawpvYmxpYmEKb2Jsb2hhCm9ibHVkYQpvYm5vcwpvYm9oYXRpdApvYm9qZWsKb2JvdXQKb2JyYXplYwpvYnJuYQpvYnJ1YmEKb2JyeXMKb2JzYWgKb2JzbHVoYQpvYnN0YXJhdApvYnV2Cm9idmF6Cm9idmluaXQKb2J2b2QKb2J2eWtsZQpvYnl2YXRlbApvYnpvcgpvY2FzCm9jZWwKb2Nlbml0Cm9jaGxhZGl0Cm9jaG90YQpvY2hyYW5hCm9jaXRub3V0Cm9kYm9qCm9kYnl0Cm9kY2hvZApvZGNpeml0Cm9kZWJyYXQKb2Rlc2xhdApvZGV2emRhdApvZGV6dmEKb2RoYWRjZQpvZGhvZGl0Cm9kamV0Cm9kamludWQKb2RrYXoKb2Rrb3VwaXQKb2RsaXYKb2RsdWthCm9kbWxrYQpvZG9sbm9zdApvZHBhZApvZHBpcwpvZHBsb3V0Cm9kcG9yCm9kcHVzdGl0Cm9kcHlrYXQKb2RyYXprYQpvZHNvdWRpdApvZHN0dXAKb2RzdW4Kb2R0b2sKb2R0dWQKb2R2YWhhCm9kdmV0YQpvZHZvbGF0Cm9kdnJhY2V0Cm9kem5hawpvZmluYQpvZnNhamQKb2hsYXMKb2huaXNrbwpvaHJhZGEKb2hyb3ppdApvaHJ5emVrCm9rYXAKb2tlbmljZQpva2xpa2EKb2tubwpva291emxpdApva292eQpva3Jhc2EKb2tyZXMKb2tyc2VrCm9rcnVoCm9rdXBhbnQKb2t1cmthCm9rdXNpdApvbGVqbmluYQpvbGl6b3ZhdApvbWFrCm9tZWxldGEKb21leml0Cm9tbGFkaW5hCm9tbG91dmF0Cm9tbHV2YQpvbXlsCm9uZWhkeQpvcGFrb3ZhdApvcGFzZWsKb3BlcmFjZQpvcGljZQpvcGlsb3N0Cm9waXNvdmF0Cm9wb3JhCm9wb3ppY2UKb3ByYXZkdQpvcHJvdGkKb3JiaXRhbApvcmNoZXN0cgpvcmdpZQpvcmxpY2UKb3Jsb2oKb3J0ZWwKb3NhZGEKb3NjaG5vdXQKb3Npa2EKb3Npdm8Kb3NsYXZhCm9zbGVwaXQKb3Nsbml0Cm9zbG92aXQKb3Nub3ZhCm9zb2JhCm9zb2xpdApvc3BhbGVjCm9zdGVuCm9zdHJhaGEKb3N0dWRhCm9zdHljaApvc3Zvaml0Cm90ZXBsaXQKb3Rpc2sKb3RvcApvdHJoYXQKb3RybG9zdApvdHJvawpvdHJ1YnkKb3R2b3IKb3Zhbm91dApvdmFyCm92ZXMKb3ZsaXZuaXQKb3ZvY2UKb3hpZApvemRvYmEKcGFjaGF0ZWwKcGFjaWVudApwYWRvdWNoCnBhaG9yZWsKcGFrdApwYWxhbmRhCnBhbGVjCnBhbGl2bwpwYWx1YmEKcGFtZmxldApwYW1sc2VrCnBhbmVua2EKcGFuaWthCnBhbm5hCnBhbm92YXQKcGFuc3R2bwpwYW50b2ZsZQpwYXByaWthCnBhcmtldGEKcGFyb2RpZQpwYXJ0YQpwYXJ1a2EKcGFyeWJhCnBhc2VrYQpwYXNpdml0YQpwYXN0ZWxrYQpwYXRlbnQKcGF0cm9uYQpwYXZvdWsKcGF6bmVodApwYXpvdXJlawpwZWNrYQpwZWRhZ29nCnBlanNlawpwZWtsbwpwZWxvdG9uCnBlbmFsdGEKcGVuZHJlawpwZW56ZQpwZXJpc2tvcApwZXJvCnBlc3Ryb3N0CnBldGFyZGEKcGV0aWNlCnBldHJvbGVqCnBldm5pbmEKcGV4ZXNvCnBpYW5pc3RhCnBpaGEKcGlqYXZpY2UKcGlrbGUKcGlrbmlrCnBpbGluYQpwaWxub3N0CnBpbHVsa2EKcGluemV0YQpwaXBldGEKcGlzYXRlbApwaXN0b2xlCnBpdGV2bmEKcGl2bmljZQpwaXZvdmFyCnBsYWNlbnRhCnBsYWthdApwbGFtZW4KcGxhbmV0YQpwbGFzdGlrYQpwbGF0aXQKcGxhdmlkbG8KcGxhegpwbGVjaApwbGVtZW5vCnBsZW50YQpwbGVzCnBsZXRpdm8KcGxldmVsCnBsaXZhdApwbG5pdApwbG5vCnBsb2NoYQpwbG9kaW5hCnBsb21iYQpwbG91dApwbHVrCnBseW4KcG9iYXZpdApwb2J5dApwb2Nob2QKcG9jaXQKcG9jdGl2ZWMKcG9kYXQKcG9kY2VuaXQKcG9kZXBzYXQKcG9kaGxlZApwb2Rpdml0CnBvZGtsYWQKcG9kbWFuaXQKcG9kbmlrCnBvZG9iYQpwb2Rwb3JhCnBvZHJhegpwb2RzdGF0YQpwb2R2b2QKcG9kemltCnBvZXppZQpwb2hhbmthCnBvaG51dGthCnBvaG92b3IKcG9ocm9tYQpwb2h5Ygpwb2ludGEKcG9qaXN0a2EKcG9qbW91dApwb2theml0CnBva2xlcwpwb2tvagpwb2tyb2sKcG9rdXRhCnBva3luCnBvbGVkbmUKcG9saWJlawpwb2xrbm91dApwb2xvaGEKcG9seW5vbQpwb21hbHUKcG9taW5vdXQKcG9tbGthCnBvbW9jCnBvbXN0YQpwb215c2xldApwb25lY2hhdApwb25vcmthCnBvbnVyb3N0CnBvcGFkYXQKcG9wZWwKcG9waXNlawpwb3BsYWNoCnBvcHJvc2l0CnBvcHNhdApwb3B1ZApwb3JhZGNlCnBvcmNlCnBvcm9kCnBvcnVjaGEKcG9yeXYKcG9zYWRpdApwb3NlZApwb3NpbGEKcG9za29rCnBvc2xhbmVjCnBvc291ZGl0CnBvc3BvbHUKcG9zdGF2YQpwb3N1ZGVrCnBvc3lwCnBvdGFoCnBvdGthbgpwb3RsZXNrCnBvdG9tZWsKcG90cmF2YQpwb3R1cGEKcG90dm9yYQpwb3VrYXoKcG91dG8KcG91emRybwpwb3ZhaGEKcG92aWRsYQpwb3ZsYWsKcG92b3oKcG92cmNoCnBvdnN0YXQKcG92eWsKcG92emRlY2gKcG96ZHJhdgpwb3plbWVrCnBvem5hdGVrCnBvem9yCnBvenZhdApwcmFjb3ZhdApwcmFob3J5CnByYWt0aWthCnByYWxlcwpwcmFvdGVjCnByYXBvcmVrCnByYXNlCnByYXZkYQpwcmluY2lwCnBya25vCnByb2J1ZGl0CnByb2NlbnRvCnByb2Rlagpwcm9mZXNlCnByb2hyYQpwcm9qZWt0CnByb2xvbWl0CnByb21pbGUKcHJvbmlrYXQKcHJvcGFkCnByb3Jvawpwcm9zYmEKcHJvdG9uCnByb3V0ZWsKcHJvdmF6CnByc2thdmthCnByc3RlbgpwcnVka29zdApwcnV0CnBydmVrCnBydm9ob3J5CnBzYW5lYwpwc292b2QKcHN0cnVoCnB0YWN0dm8KcHViZXJ0YQpwdWNoCnB1ZGwKcHVrYXZlYwpwdWtsaW5hCnB1a3JsZQpwdWx0CnB1bXBhCnB1bmMKcHVwZW4KcHVzYQpwdXNpbmthCnB1c3RpbmEKcHV0b3ZhdApwdXR5a2EKcHlyYW1pZGEKcHlzawpweXRlbApyYWNlawpyYWNob3QKcmFkaWFjZQpyYWRuaWNlCnJhZG9uCnJhZnQKcmFnYnkKcmFrZXRhCnJha292aW5hCnJhbWVubwpyYW1wb3VjaApyYW5kZQpyYXJhY2gKcmFyaXRhCnJhc292bmEKcmFzdHIKcmF0b2xlc3QKcmF6YW5jZQpyYXppZGxvCnJlYWdvdmF0CnJlYWtjZQpyZWNlcHQKcmVkYWt0b3IKcmVmZXJlbnQKcmVmbGV4CnJlam5vawpyZWtsYW1hCnJla29yZApyZWtydXQKcmVrdG9yCnJlcHV0YWNlCnJldml6ZQpyZXZtYQpyZXZvbHZlcgpyZXplcnZhCnJpc2tvdmF0CnJpemlrbwpyb2JvdGlrYQpyb2Rva21lbgpyb2hvdmthCnJva2xlCnJva29rbwpyb21hbmV0bwpyb3Bvdm9kCnJvcHVjaGEKcm9yZWpzCnJvc29sCnJvc3RsaW5hCnJvdG1pc3RyCnJvdG9wZWQKcm90dW5kYQpyb3ViZW5rYQpyb3VjaG8Kcm91cApyb3VyYQpyb3ZpbmEKcm92bmljZQpyb3pib3IKcm96Y2hvZApyb3pkYXQKcm96ZXpuYXQKcm96aG9kY2UKcm96aW5rYQpyb3pqZXpkCnJvemthegpyb3psb2hhCnJvem1hcgpyb3pwYWQKcm96cnVjaApyb3pzYWgKcm96dG9rCnJvenVtCnJvenZvZApydWJyaWthCnJ1Y2hhZGxvCnJ1a2F2aWNlCnJ1a29waXMKcnliYQpyeWJvbG92CnJ5Y2hsb3N0CnJ5ZGxvCnJ5cGFkbG8Kcnl0aW5hCnJ5em9zdApzYWRpc3RhCnNhaGF0CnNha28Kc2FtZWMKc2FtaXpkYXQKc2Ftb3RhCnNhbml0a2EKc2FyZGlua2EKc2FzYW5rYQpzYXRlbGl0CnNhemJhCnNhemVuaWNlCnNib3IKc2Nob3ZhdApzZWJyYW5rYQpzZWNlc2UKc2VkYWRsbwpzZWRpbWVudApzZWRsbwpzZWhuYXQKc2VqbW91dApzZWtlcmEKc2VrdGEKc2VrdW5kYQpzZWt2b2plCnNlbWVubwpzZW5vCnNlcnZpcwpzZXNhZGl0CnNlc2hvcmEKc2Vza29rCnNlc2xhdApzZXN0cmEKc2VzdXYKc2VzeXBhdApzZXRiYQpzZXRpbmEKc2V0a2F0CnNldG5vdXQKc2V0cnZhdApzZXZlcgpzZXpuYW0Kc2hvZGEKc2hybm91dApzaWZvbgpzaWxuaWNlCnNpcmthCnNpcm90ZWsKc2lydXAKc2l0dWFjZQpza2FmYW5kcgpza2FsaXNrbwpza2FuemVuCnNrYXV0CnNrZXB0aWsKc2tpY2EKc2tsYWRiYQpza2xlbmljZQpza2xvCnNrbHV6CnNrb2JhCnNrb2thbgpza29ybwpza3JpcHRhCnNrcnoKc2t1cGluYQpza3Zvc3QKc2t2cm5hCnNsYWJpa2EKc2xhZGlkbG8Kc2xhbmluYQpzbGFzdApzbGF2bm9zdApzbGVkb3ZhdApzbGVwZWMKc2xldmEKc2xlemluYQpzbGliCnNsaW5hCnNsaXpuaWNlCnNsb24Kc2xvdXBlawpzbG92bwpzbHVjaApzbHVoYQpzbHVuY2UKc2x1cGthCnNsemEKc21hcmFnZApzbWV0YW5hCnNtaWxzdHZvCnNtbG91dmEKc21vZwpzbXJhZApzbXJrCnNtcnRrYQpzbXV0ZWsKc215c2wKc25hZApzbmFoYQpzbm9iCnNvYm90YQpzb2NoYQpzb2RvdmthCnNva29sCnNvcGthCnNvdHZhCnNvdWJvagpzb3VjaXQKc291ZGNlCnNvdWhsYXMKc291bGFkCnNvdW1yYWsKc291cHJhdmEKc291c2VkCnNvdXRvawpzb3V2aXNldApzcGFsb3ZuYQpzcGFzaXRlbApzcGlzCnNwbGF2CnNwb2RlawpzcG9qZW5lYwpzcG9sdQpzcG9uem9yCnNwb3Jub3N0CnNwb3VzdGEKc3ByY2hhCnNwdXN0aXQKc3JhbmRhCnNyYXoKc3JkY2UKc3JuYQpzcm5lYwpzcm92bmF0CnNycGVuCnNyc3QKc3J1YgpzdGFuaWNlCnN0YXJvc3RhCnN0YXRpa2EKc3RhdmJhCnN0ZWhubwpzdGV6a2EKc3RvZG9sYQpzdG9sZWsKc3RvcGEKc3Rvcm5vCnN0b3VwYXQKc3RyYWNoCnN0cmVzCnN0cmhub3V0CnN0cm9tCnN0cnVuYQpzdHVkbmEKc3R1cG5pY2UKc3R2b2wKc3R5awpzdWJqZWt0CnN1YnRyb3B5CnN1Y2hhcgpzdWRvc3QKc3Vrbm8Kc3VuZGF0CnN1bm91dApzdXJpa2F0YQpzdXJvdmluYQpzdmFoCnN2YWxzdHZvCnN2ZXRyCnN2YXRiYQpzdmF6ZWsKc3Zpc2xlCnN2aXRlawpzdm9ib2RhCnN2b2RpZGxvCnN2b3JrYQpzdnJhYgpzeWthdmthCnN5a290CnN5bmVrCnN5bm92ZWMKc3lwYXQKc3lwa29zdApzeXJvdm9zdApzeXNlbApzeXRvc3QKdGFibGV0a2EKdGFidWxlCnRhaG91bgp0YWplbW5vCnRhamZ1bgp0YWpnYQp0YWppdAp0YWpub3N0CnRha3Rpa2EKdGFtaGxlCnRhbXBvbgp0YW5jb3ZhdAp0YW5lYwp0YW5rZXIKdGFwZXRhCnRhdmVuaW5hCnRhemF0ZWwKdGVjaG5pa2EKdGVoZHkKdGVrdXRpbmEKdGVsZWZvbgp0ZW1ub3RhCnRlbmRlbmNlCnRlbmlzdGEKdGVub3IKdGVwbG90YQp0ZXBuYQp0ZXBydmUKdGVyYXBpZQp0ZXJtb3NrYQp0ZXh0aWwKdGljaG8KdGlza29waXMKdGl0dWxlawp0a2FkbGVjCnRrYW5pbmEKdGxhcGthCnRsZXNrYXQKdGx1a290CnRsdXBhCnRtZWwKdG9hbGV0YQp0b3BpbmthCnRvcG9sCnRvcnpvCnRvdWhhCnRvdWxlYwp0cmFkaWNlCnRyYWt0b3IKdHJhbXAKdHJhc2EKdHJhdmVyemEKdHJlZml0CnRyZXN0CnRyZXpvcgp0cmhhdmluYQp0cmhsaW5hCnRyb2NodQp0cm9qaWNlCnRyb3NrYQp0cm91YmEKdHJwY2UKdHJwaXRlbAp0cnBrb3N0CnRydWJlYwp0cnVjaGxpdAp0cnVobGljZQp0cnVzCnRydmF0CnR1ZHkKdHVobm91dAp0dWhvc3QKdHVuZHJhCnR1cmlzdGEKdHVybmFqCnR1emVtc2tvCnR2YXJvaAp0dm9yYmEKdHZyZG9zdAp0dnJ6CnR5Z3IKdHlrZXYKdWJvaG9zdAp1Ym96ZQp1YnJhdAp1YnJvdXNlawp1YnJ1cwp1Ynl0b3ZuYQp1Y2hvCnVjdGl2b3N0CnVkaXZpdAp1aHJhZGl0CnVqZWRuYXQKdWppc3RpdAp1am1vdXQKdWthemF0ZWwKdWtsaWRuaXQKdWtsb25pdAp1a290dml0CnVrcm9qaXQKdWxpY2UKdWxpdGEKdWxvdml0CnVteXZhZGxvCnVuYXZpdAp1bmlmb3JtYQp1bmlrbm91dAp1cGFkbm91dAp1cGxhdG5pdAp1cGx5bm91dAp1cG91dGF0CnVwcmF2aXQKdXJhbgp1cmF6aXQKdXNlZG5vdXQKdXNpbG92YXQKdXNtcnRpdAp1c25hZG5pdAp1c25vdXQKdXNvdWRpdAp1c3RsYXQKdXN0cm5vdXQKdXRhaG92YXQKdXRrYXQKdXRsdW1pdAp1dG9ub3V0CnV0b3BlbmVjCnV0cm91c2l0CnV2YWxpdAp1dm9sbml0CnV2b3pvdmthCnV6ZHJhdml0CnV6ZWwKdXplbmluYQp1emxpbmEKdXpuYXQKdmFnb24KdmFsY2hhCnZhbG91bgp2YW5hCnZhbmRhbAp2YW5pbGthCnZhcmFuCnZhcmhhbnkKdmFyb3ZhdAp2Y2Vsa3UKdmNob2QKdmRvdmEKdmVkcm8KdmVnZXRhY2UKdmVqY2UKdmVsYmxvdWQKdmVsZXRyaAp2ZWxpdGVsCnZlbG1vYwp2ZWxyeWJhCnZlbmtvdgp2ZXJhbmRhCnZlcnplCnZlc2Vsa2EKdmVza3J6ZQp2ZXNuaWNlCnZlc3BvZHUKdmVzdGEKdmV0ZXJpbmEKdmV2ZXJrYQp2aWJyYWNlCnZpY2hyCnZpZGVvaHJhCnZpZGluYQp2aWRsZQp2aWxhCnZpbmljZQp2aXNldAp2aXRhbGl0YQp2aXplCnZpeml0a2EKdmplemQKdmtsYWQKdmt1cwp2bGFqa2EKdmxhawp2bGFzZWMKdmxldm8Kdmxoa29zdAp2bGl2CnZsbm92a2EKdmxvdXBhdAp2bnVjb3ZhdAp2bnVrCnZvZGEKdm9kaXZvc3QKdm9kb3puYWsKdm9kc3R2bwp2b2plbnNreQp2b2puYQp2b2pza28Kdm9sYW50CnZvbGJhCnZvbGl0CnZvbG5vCnZvc2tvdmthCnZvemlkbG8Kdm96b3ZuYQp2cHJhdm8KdnJhYmVjCnZyYWNldAp2cmFoCnZyYXRhCnZyYmEKdnJjaG9sZWsKdnJoYXQKdnJzdHZhCnZydHVsZQp2c2FkaXQKdnN0b3VwaXQKdnN0dXAKdnRpcAp2eWJhdml0CnZ5YnJhdAp2eWNob3ZhdAp2eWRhdAp2eWRyYQp2eWZvdGl0CnZ5aGxlZGF0CnZ5aG5vdXQKdnlob2RpdAp2eWhyYWRpdAp2eWh1Yml0CnZ5amFzbml0CnZ5amV0CnZ5am1vdXQKdnlrbG9waXQKdnlrb25hdAp2eWxla2F0CnZ5bWF6YXQKdnltZXppdAp2eW1pemV0CnZ5bXlzbGV0CnZ5bmVjaGF0CnZ5bmlrYXQKdnludXRpdAp2eXBhZGF0CnZ5cGxhdGl0CnZ5cHJhdml0CnZ5cHVzdGl0CnZ5cmF6aXQKdnlyb3ZuYXQKdnlydmF0CnZ5c2xvdml0CnZ5c29rbwp2eXN0YXZpdAp2eXN1bm91dAp2eXN5cGF0CnZ5dGFzaXQKdnl0ZXNhdAp2eXRyYXRpdAp2eXZpbm91dAp2eXZvbGF0CnZ5dnJoZWwKdnl6ZG9iaXQKdnl6bmF0CnZ6YWR1CnZ6YnVkaXQKdnpjaG9waXQKdnpkb3IKdnpkdWNoCnZ6ZHljaGF0CnZ6ZXN0dXAKdnpobGVkZW0KdnprYXoKdnpseWthdAp2em5pawp2em9yZWsKdnpwb3VyYQp2enRhaAp2enRlawp4eWxvZm9uCnphYnJhdAp6YWJ5ZGxldAp6YWNob3ZhdAp6YWRhcm1vCnphZHVzaXQKemFmb3VrYXQKemFobHRpdAp6YWhvZGl0CnphaHJhZGEKemFoeW5vdXQKemFqYXRlYwp6YWpldAp6YWppc3RpdAp6YWtsZXBhdAp6YWtvdXBpdAp6YWxlcGl0CnphbWV6aXQKemFtb3RhdAp6YW15c2xldAp6YW5lY2hhdAp6YW5pa2F0CnphcGxhdGl0CnphcG9qaXQKemFwc2F0CnphcmF6aXQKemFzdGF2aXQKemFzdW5vdXQKemF0YWppdAp6YXRlbW5pdAp6YXRrbm91dAp6YXVqbW91dAp6YXZhbGl0CnphdmVsZXQKemF2aW5pdAp6YXZvbGF0CnphdnJ0YXQKemF6dm9uaXQKemJhdml0CnpicnVzdQp6YnVkb3ZhdAp6Ynl0ZWsKemRhbGVrYQp6ZGFybWEKemRhdG5vc3QKemRpdm8KemRvYml0Cnpkcm9qCnpkdmloCnpkeW1hZGxvCnplbGVuaW5hCnplbWFuCnplbWluYQp6ZXB0YXQKemV6YWR1CnplemRvbGEKemhhdGl0CnpobHRub3V0CnpobHVib2thCnpob3Rvdml0CnpocnViYQp6aW1hCnppbW5pY2UKemplbW5pdAp6a2xhbWF0Cnprb3VtYXQKemtyYXRrYQp6a3VtYXZrYQp6bGF0bwp6bGVoa2EKemxvYmEKemxvbQp6bG9zdAp6bG96dnlrCnptYXBvdmF0CnptYXIKem1hdGVrCnptaWplCnptaXpldAp6bW9jbml0Cnptb2RyYXQKem1yemxpbmEKem11dG92YXQKem5hawp6bmFsb3N0CnpuYW1lbmF0Cnpub3Z1CnpvYnJheml0CnpvdGF2aXQKem91YmVrCnpvdWZhbGUKenBsb2RpdAp6cG9tYWxpdAp6cHJhdmEKenByb3N0aXQKenBydWRrYQp6cHJ2dQp6cmFkYQp6cmFuaXQKenJjYWRsbwp6cm5pdG9zdAp6cm5vCnpyb3ZuYQp6cnljaGxpdAp6cnphdm9zdAp6dGljaGEKenRyYXRpdAp6dWJvdmluYQp6dWJyCnp2ZWRub3V0Cnp2ZW5rdQp6dmVzZWxhCnp2b24KenZyYXQKenZ1a292b2QKenZ5a2Auc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy9lbmdsaXNoLmpzCiAgdmFyIHdvcmRsaXN0MiA9IGBhYmFuZG9uCmFiaWxpdHkKYWJsZQphYm91dAphYm92ZQphYnNlbnQKYWJzb3JiCmFic3RyYWN0CmFic3VyZAphYnVzZQphY2Nlc3MKYWNjaWRlbnQKYWNjb3VudAphY2N1c2UKYWNoaWV2ZQphY2lkCmFjb3VzdGljCmFjcXVpcmUKYWNyb3NzCmFjdAphY3Rpb24KYWN0b3IKYWN0cmVzcwphY3R1YWwKYWRhcHQKYWRkCmFkZGljdAphZGRyZXNzCmFkanVzdAphZG1pdAphZHVsdAphZHZhbmNlCmFkdmljZQphZXJvYmljCmFmZmFpcgphZmZvcmQKYWZyYWlkCmFnYWluCmFnZQphZ2VudAphZ3JlZQphaGVhZAphaW0KYWlyCmFpcnBvcnQKYWlzbGUKYWxhcm0KYWxidW0KYWxjb2hvbAphbGVydAphbGllbgphbGwKYWxsZXkKYWxsb3cKYWxtb3N0CmFsb25lCmFscGhhCmFscmVhZHkKYWxzbwphbHRlcgphbHdheXMKYW1hdGV1cgphbWF6aW5nCmFtb25nCmFtb3VudAphbXVzZWQKYW5hbHlzdAphbmNob3IKYW5jaWVudAphbmdlcgphbmdsZQphbmdyeQphbmltYWwKYW5rbGUKYW5ub3VuY2UKYW5udWFsCmFub3RoZXIKYW5zd2VyCmFudGVubmEKYW50aXF1ZQphbnhpZXR5CmFueQphcGFydAphcG9sb2d5CmFwcGVhcgphcHBsZQphcHByb3ZlCmFwcmlsCmFyY2gKYXJjdGljCmFyZWEKYXJlbmEKYXJndWUKYXJtCmFybWVkCmFybW9yCmFybXkKYXJvdW5kCmFycmFuZ2UKYXJyZXN0CmFycml2ZQphcnJvdwphcnQKYXJ0ZWZhY3QKYXJ0aXN0CmFydHdvcmsKYXNrCmFzcGVjdAphc3NhdWx0CmFzc2V0CmFzc2lzdAphc3N1bWUKYXN0aG1hCmF0aGxldGUKYXRvbQphdHRhY2sKYXR0ZW5kCmF0dGl0dWRlCmF0dHJhY3QKYXVjdGlvbgphdWRpdAphdWd1c3QKYXVudAphdXRob3IKYXV0bwphdXR1bW4KYXZlcmFnZQphdm9jYWRvCmF2b2lkCmF3YWtlCmF3YXJlCmF3YXkKYXdlc29tZQphd2Z1bAphd2t3YXJkCmF4aXMKYmFieQpiYWNoZWxvcgpiYWNvbgpiYWRnZQpiYWcKYmFsYW5jZQpiYWxjb255CmJhbGwKYmFtYm9vCmJhbmFuYQpiYW5uZXIKYmFyCmJhcmVseQpiYXJnYWluCmJhcnJlbApiYXNlCmJhc2ljCmJhc2tldApiYXR0bGUKYmVhY2gKYmVhbgpiZWF1dHkKYmVjYXVzZQpiZWNvbWUKYmVlZgpiZWZvcmUKYmVnaW4KYmVoYXZlCmJlaGluZApiZWxpZXZlCmJlbG93CmJlbHQKYmVuY2gKYmVuZWZpdApiZXN0CmJldHJheQpiZXR0ZXIKYmV0d2VlbgpiZXlvbmQKYmljeWNsZQpiaWQKYmlrZQpiaW5kCmJpb2xvZ3kKYmlyZApiaXJ0aApiaXR0ZXIKYmxhY2sKYmxhZGUKYmxhbWUKYmxhbmtldApibGFzdApibGVhawpibGVzcwpibGluZApibG9vZApibG9zc29tCmJsb3VzZQpibHVlCmJsdXIKYmx1c2gKYm9hcmQKYm9hdApib2R5CmJvaWwKYm9tYgpib25lCmJvbnVzCmJvb2sKYm9vc3QKYm9yZGVyCmJvcmluZwpib3Jyb3cKYm9zcwpib3R0b20KYm91bmNlCmJveApib3kKYnJhY2tldApicmFpbgpicmFuZApicmFzcwpicmF2ZQpicmVhZApicmVlemUKYnJpY2sKYnJpZGdlCmJyaWVmCmJyaWdodApicmluZwpicmlzawpicm9jY29saQpicm9rZW4KYnJvbnplCmJyb29tCmJyb3RoZXIKYnJvd24KYnJ1c2gKYnViYmxlCmJ1ZGR5CmJ1ZGdldApidWZmYWxvCmJ1aWxkCmJ1bGIKYnVsawpidWxsZXQKYnVuZGxlCmJ1bmtlcgpidXJkZW4KYnVyZ2VyCmJ1cnN0CmJ1cwpidXNpbmVzcwpidXN5CmJ1dHRlcgpidXllcgpidXp6CmNhYmJhZ2UKY2FiaW4KY2FibGUKY2FjdHVzCmNhZ2UKY2FrZQpjYWxsCmNhbG0KY2FtZXJhCmNhbXAKY2FuCmNhbmFsCmNhbmNlbApjYW5keQpjYW5ub24KY2Fub2UKY2FudmFzCmNhbnlvbgpjYXBhYmxlCmNhcGl0YWwKY2FwdGFpbgpjYXIKY2FyYm9uCmNhcmQKY2FyZ28KY2FycGV0CmNhcnJ5CmNhcnQKY2FzZQpjYXNoCmNhc2lubwpjYXN0bGUKY2FzdWFsCmNhdApjYXRhbG9nCmNhdGNoCmNhdGVnb3J5CmNhdHRsZQpjYXVnaHQKY2F1c2UKY2F1dGlvbgpjYXZlCmNlaWxpbmcKY2VsZXJ5CmNlbWVudApjZW5zdXMKY2VudHVyeQpjZXJlYWwKY2VydGFpbgpjaGFpcgpjaGFsawpjaGFtcGlvbgpjaGFuZ2UKY2hhb3MKY2hhcHRlcgpjaGFyZ2UKY2hhc2UKY2hhdApjaGVhcApjaGVjawpjaGVlc2UKY2hlZgpjaGVycnkKY2hlc3QKY2hpY2tlbgpjaGllZgpjaGlsZApjaGltbmV5CmNob2ljZQpjaG9vc2UKY2hyb25pYwpjaHVja2xlCmNodW5rCmNodXJuCmNpZ2FyCmNpbm5hbW9uCmNpcmNsZQpjaXRpemVuCmNpdHkKY2l2aWwKY2xhaW0KY2xhcApjbGFyaWZ5CmNsYXcKY2xheQpjbGVhbgpjbGVyawpjbGV2ZXIKY2xpY2sKY2xpZW50CmNsaWZmCmNsaW1iCmNsaW5pYwpjbGlwCmNsb2NrCmNsb2cKY2xvc2UKY2xvdGgKY2xvdWQKY2xvd24KY2x1YgpjbHVtcApjbHVzdGVyCmNsdXRjaApjb2FjaApjb2FzdApjb2NvbnV0CmNvZGUKY29mZmVlCmNvaWwKY29pbgpjb2xsZWN0CmNvbG9yCmNvbHVtbgpjb21iaW5lCmNvbWUKY29tZm9ydApjb21pYwpjb21tb24KY29tcGFueQpjb25jZXJ0CmNvbmR1Y3QKY29uZmlybQpjb25ncmVzcwpjb25uZWN0CmNvbnNpZGVyCmNvbnRyb2wKY29udmluY2UKY29vawpjb29sCmNvcHBlcgpjb3B5CmNvcmFsCmNvcmUKY29ybgpjb3JyZWN0CmNvc3QKY290dG9uCmNvdWNoCmNvdW50cnkKY291cGxlCmNvdXJzZQpjb3VzaW4KY292ZXIKY295b3RlCmNyYWNrCmNyYWRsZQpjcmFmdApjcmFtCmNyYW5lCmNyYXNoCmNyYXRlcgpjcmF3bApjcmF6eQpjcmVhbQpjcmVkaXQKY3JlZWsKY3Jldwpjcmlja2V0CmNyaW1lCmNyaXNwCmNyaXRpYwpjcm9wCmNyb3NzCmNyb3VjaApjcm93ZApjcnVjaWFsCmNydWVsCmNydWlzZQpjcnVtYmxlCmNydW5jaApjcnVzaApjcnkKY3J5c3RhbApjdWJlCmN1bHR1cmUKY3VwCmN1cGJvYXJkCmN1cmlvdXMKY3VycmVudApjdXJ0YWluCmN1cnZlCmN1c2hpb24KY3VzdG9tCmN1dGUKY3ljbGUKZGFkCmRhbWFnZQpkYW1wCmRhbmNlCmRhbmdlcgpkYXJpbmcKZGFzaApkYXVnaHRlcgpkYXduCmRheQpkZWFsCmRlYmF0ZQpkZWJyaXMKZGVjYWRlCmRlY2VtYmVyCmRlY2lkZQpkZWNsaW5lCmRlY29yYXRlCmRlY3JlYXNlCmRlZXIKZGVmZW5zZQpkZWZpbmUKZGVmeQpkZWdyZWUKZGVsYXkKZGVsaXZlcgpkZW1hbmQKZGVtaXNlCmRlbmlhbApkZW50aXN0CmRlbnkKZGVwYXJ0CmRlcGVuZApkZXBvc2l0CmRlcHRoCmRlcHV0eQpkZXJpdmUKZGVzY3JpYmUKZGVzZXJ0CmRlc2lnbgpkZXNrCmRlc3BhaXIKZGVzdHJveQpkZXRhaWwKZGV0ZWN0CmRldmVsb3AKZGV2aWNlCmRldm90ZQpkaWFncmFtCmRpYWwKZGlhbW9uZApkaWFyeQpkaWNlCmRpZXNlbApkaWV0CmRpZmZlcgpkaWdpdGFsCmRpZ25pdHkKZGlsZW1tYQpkaW5uZXIKZGlub3NhdXIKZGlyZWN0CmRpcnQKZGlzYWdyZWUKZGlzY292ZXIKZGlzZWFzZQpkaXNoCmRpc21pc3MKZGlzb3JkZXIKZGlzcGxheQpkaXN0YW5jZQpkaXZlcnQKZGl2aWRlCmRpdm9yY2UKZGl6enkKZG9jdG9yCmRvY3VtZW50CmRvZwpkb2xsCmRvbHBoaW4KZG9tYWluCmRvbmF0ZQpkb25rZXkKZG9ub3IKZG9vcgpkb3NlCmRvdWJsZQpkb3ZlCmRyYWZ0CmRyYWdvbgpkcmFtYQpkcmFzdGljCmRyYXcKZHJlYW0KZHJlc3MKZHJpZnQKZHJpbGwKZHJpbmsKZHJpcApkcml2ZQpkcm9wCmRydW0KZHJ5CmR1Y2sKZHVtYgpkdW5lCmR1cmluZwpkdXN0CmR1dGNoCmR1dHkKZHdhcmYKZHluYW1pYwplYWdlcgplYWdsZQplYXJseQplYXJuCmVhcnRoCmVhc2lseQplYXN0CmVhc3kKZWNobwplY29sb2d5CmVjb25vbXkKZWRnZQplZGl0CmVkdWNhdGUKZWZmb3J0CmVnZwplaWdodAplaXRoZXIKZWxib3cKZWxkZXIKZWxlY3RyaWMKZWxlZ2FudAplbGVtZW50CmVsZXBoYW50CmVsZXZhdG9yCmVsaXRlCmVsc2UKZW1iYXJrCmVtYm9keQplbWJyYWNlCmVtZXJnZQplbW90aW9uCmVtcGxveQplbXBvd2VyCmVtcHR5CmVuYWJsZQplbmFjdAplbmQKZW5kbGVzcwplbmRvcnNlCmVuZW15CmVuZXJneQplbmZvcmNlCmVuZ2FnZQplbmdpbmUKZW5oYW5jZQplbmpveQplbmxpc3QKZW5vdWdoCmVucmljaAplbnJvbGwKZW5zdXJlCmVudGVyCmVudGlyZQplbnRyeQplbnZlbG9wZQplcGlzb2RlCmVxdWFsCmVxdWlwCmVyYQplcmFzZQplcm9kZQplcm9zaW9uCmVycm9yCmVydXB0CmVzY2FwZQplc3NheQplc3NlbmNlCmVzdGF0ZQpldGVybmFsCmV0aGljcwpldmlkZW5jZQpldmlsCmV2b2tlCmV2b2x2ZQpleGFjdApleGFtcGxlCmV4Y2VzcwpleGNoYW5nZQpleGNpdGUKZXhjbHVkZQpleGN1c2UKZXhlY3V0ZQpleGVyY2lzZQpleGhhdXN0CmV4aGliaXQKZXhpbGUKZXhpc3QKZXhpdApleG90aWMKZXhwYW5kCmV4cGVjdApleHBpcmUKZXhwbGFpbgpleHBvc2UKZXhwcmVzcwpleHRlbmQKZXh0cmEKZXllCmV5ZWJyb3cKZmFicmljCmZhY2UKZmFjdWx0eQpmYWRlCmZhaW50CmZhaXRoCmZhbGwKZmFsc2UKZmFtZQpmYW1pbHkKZmFtb3VzCmZhbgpmYW5jeQpmYW50YXN5CmZhcm0KZmFzaGlvbgpmYXQKZmF0YWwKZmF0aGVyCmZhdGlndWUKZmF1bHQKZmF2b3JpdGUKZmVhdHVyZQpmZWJydWFyeQpmZWRlcmFsCmZlZQpmZWVkCmZlZWwKZmVtYWxlCmZlbmNlCmZlc3RpdmFsCmZldGNoCmZldmVyCmZldwpmaWJlcgpmaWN0aW9uCmZpZWxkCmZpZ3VyZQpmaWxlCmZpbG0KZmlsdGVyCmZpbmFsCmZpbmQKZmluZQpmaW5nZXIKZmluaXNoCmZpcmUKZmlybQpmaXJzdApmaXNjYWwKZmlzaApmaXQKZml0bmVzcwpmaXgKZmxhZwpmbGFtZQpmbGFzaApmbGF0CmZsYXZvcgpmbGVlCmZsaWdodApmbGlwCmZsb2F0CmZsb2NrCmZsb29yCmZsb3dlcgpmbHVpZApmbHVzaApmbHkKZm9hbQpmb2N1cwpmb2cKZm9pbApmb2xkCmZvbGxvdwpmb29kCmZvb3QKZm9yY2UKZm9yZXN0CmZvcmdldApmb3JrCmZvcnR1bmUKZm9ydW0KZm9yd2FyZApmb3NzaWwKZm9zdGVyCmZvdW5kCmZveApmcmFnaWxlCmZyYW1lCmZyZXF1ZW50CmZyZXNoCmZyaWVuZApmcmluZ2UKZnJvZwpmcm9udApmcm9zdApmcm93bgpmcm96ZW4KZnJ1aXQKZnVlbApmdW4KZnVubnkKZnVybmFjZQpmdXJ5CmZ1dHVyZQpnYWRnZXQKZ2FpbgpnYWxheHkKZ2FsbGVyeQpnYW1lCmdhcApnYXJhZ2UKZ2FyYmFnZQpnYXJkZW4KZ2FybGljCmdhcm1lbnQKZ2FzCmdhc3AKZ2F0ZQpnYXRoZXIKZ2F1Z2UKZ2F6ZQpnZW5lcmFsCmdlbml1cwpnZW5yZQpnZW50bGUKZ2VudWluZQpnZXN0dXJlCmdob3N0CmdpYW50CmdpZnQKZ2lnZ2xlCmdpbmdlcgpnaXJhZmZlCmdpcmwKZ2l2ZQpnbGFkCmdsYW5jZQpnbGFyZQpnbGFzcwpnbGlkZQpnbGltcHNlCmdsb2JlCmdsb29tCmdsb3J5Cmdsb3ZlCmdsb3cKZ2x1ZQpnb2F0CmdvZGRlc3MKZ29sZApnb29kCmdvb3NlCmdvcmlsbGEKZ29zcGVsCmdvc3NpcApnb3Zlcm4KZ293bgpncmFiCmdyYWNlCmdyYWluCmdyYW50CmdyYXBlCmdyYXNzCmdyYXZpdHkKZ3JlYXQKZ3JlZW4KZ3JpZApncmllZgpncml0Cmdyb2NlcnkKZ3JvdXAKZ3JvdwpncnVudApndWFyZApndWVzcwpndWlkZQpndWlsdApndWl0YXIKZ3VuCmd5bQpoYWJpdApoYWlyCmhhbGYKaGFtbWVyCmhhbXN0ZXIKaGFuZApoYXBweQpoYXJib3IKaGFyZApoYXJzaApoYXJ2ZXN0CmhhdApoYXZlCmhhd2sKaGF6YXJkCmhlYWQKaGVhbHRoCmhlYXJ0CmhlYXZ5CmhlZGdlaG9nCmhlaWdodApoZWxsbwpoZWxtZXQKaGVscApoZW4KaGVybwpoaWRkZW4KaGlnaApoaWxsCmhpbnQKaGlwCmhpcmUKaGlzdG9yeQpob2JieQpob2NrZXkKaG9sZApob2xlCmhvbGlkYXkKaG9sbG93CmhvbWUKaG9uZXkKaG9vZApob3BlCmhvcm4KaG9ycm9yCmhvcnNlCmhvc3BpdGFsCmhvc3QKaG90ZWwKaG91cgpob3ZlcgpodWIKaHVnZQpodW1hbgpodW1ibGUKaHVtb3IKaHVuZHJlZApodW5ncnkKaHVudApodXJkbGUKaHVycnkKaHVydApodXNiYW5kCmh5YnJpZAppY2UKaWNvbgppZGVhCmlkZW50aWZ5CmlkbGUKaWdub3JlCmlsbAppbGxlZ2FsCmlsbG5lc3MKaW1hZ2UKaW1pdGF0ZQppbW1lbnNlCmltbXVuZQppbXBhY3QKaW1wb3NlCmltcHJvdmUKaW1wdWxzZQppbmNoCmluY2x1ZGUKaW5jb21lCmluY3JlYXNlCmluZGV4CmluZGljYXRlCmluZG9vcgppbmR1c3RyeQppbmZhbnQKaW5mbGljdAppbmZvcm0KaW5oYWxlCmluaGVyaXQKaW5pdGlhbAppbmplY3QKaW5qdXJ5CmlubWF0ZQppbm5lcgppbm5vY2VudAppbnB1dAppbnF1aXJ5Cmluc2FuZQppbnNlY3QKaW5zaWRlCmluc3BpcmUKaW5zdGFsbAppbnRhY3QKaW50ZXJlc3QKaW50bwppbnZlc3QKaW52aXRlCmludm9sdmUKaXJvbgppc2xhbmQKaXNvbGF0ZQppc3N1ZQppdGVtCml2b3J5CmphY2tldApqYWd1YXIKamFyCmphenoKamVhbG91cwpqZWFucwpqZWxseQpqZXdlbApqb2IKam9pbgpqb2tlCmpvdXJuZXkKam95Cmp1ZGdlCmp1aWNlCmp1bXAKanVuZ2xlCmp1bmlvcgpqdW5rCmp1c3QKa2FuZ2Fyb28Ka2VlbgprZWVwCmtldGNodXAKa2V5CmtpY2sKa2lkCmtpZG5leQpraW5kCmtpbmdkb20Ka2lzcwpraXQKa2l0Y2hlbgpraXRlCmtpdHRlbgpraXdpCmtuZWUKa25pZmUKa25vY2sKa25vdwpsYWIKbGFiZWwKbGFib3IKbGFkZGVyCmxhZHkKbGFrZQpsYW1wCmxhbmd1YWdlCmxhcHRvcApsYXJnZQpsYXRlcgpsYXRpbgpsYXVnaApsYXVuZHJ5CmxhdmEKbGF3Cmxhd24KbGF3c3VpdApsYXllcgpsYXp5CmxlYWRlcgpsZWFmCmxlYXJuCmxlYXZlCmxlY3R1cmUKbGVmdApsZWcKbGVnYWwKbGVnZW5kCmxlaXN1cmUKbGVtb24KbGVuZApsZW5ndGgKbGVucwpsZW9wYXJkCmxlc3NvbgpsZXR0ZXIKbGV2ZWwKbGlhcgpsaWJlcnR5CmxpYnJhcnkKbGljZW5zZQpsaWZlCmxpZnQKbGlnaHQKbGlrZQpsaW1iCmxpbWl0CmxpbmsKbGlvbgpsaXF1aWQKbGlzdApsaXR0bGUKbGl2ZQpsaXphcmQKbG9hZApsb2FuCmxvYnN0ZXIKbG9jYWwKbG9jawpsb2dpYwpsb25lbHkKbG9uZwpsb29wCmxvdHRlcnkKbG91ZApsb3VuZ2UKbG92ZQpsb3lhbApsdWNreQpsdWdnYWdlCmx1bWJlcgpsdW5hcgpsdW5jaApsdXh1cnkKbHlyaWNzCm1hY2hpbmUKbWFkCm1hZ2ljCm1hZ25ldAptYWlkCm1haWwKbWFpbgptYWpvcgptYWtlCm1hbW1hbAptYW4KbWFuYWdlCm1hbmRhdGUKbWFuZ28KbWFuc2lvbgptYW51YWwKbWFwbGUKbWFyYmxlCm1hcmNoCm1hcmdpbgptYXJpbmUKbWFya2V0Cm1hcnJpYWdlCm1hc2sKbWFzcwptYXN0ZXIKbWF0Y2gKbWF0ZXJpYWwKbWF0aAptYXRyaXgKbWF0dGVyCm1heGltdW0KbWF6ZQptZWFkb3cKbWVhbgptZWFzdXJlCm1lYXQKbWVjaGFuaWMKbWVkYWwKbWVkaWEKbWVsb2R5Cm1lbHQKbWVtYmVyCm1lbW9yeQptZW50aW9uCm1lbnUKbWVyY3kKbWVyZ2UKbWVyaXQKbWVycnkKbWVzaAptZXNzYWdlCm1ldGFsCm1ldGhvZAptaWRkbGUKbWlkbmlnaHQKbWlsawptaWxsaW9uCm1pbWljCm1pbmQKbWluaW11bQptaW5vcgptaW51dGUKbWlyYWNsZQptaXJyb3IKbWlzZXJ5Cm1pc3MKbWlzdGFrZQptaXgKbWl4ZWQKbWl4dHVyZQptb2JpbGUKbW9kZWwKbW9kaWZ5Cm1vbQptb21lbnQKbW9uaXRvcgptb25rZXkKbW9uc3Rlcgptb250aAptb29uCm1vcmFsCm1vcmUKbW9ybmluZwptb3NxdWl0bwptb3RoZXIKbW90aW9uCm1vdG9yCm1vdW50YWluCm1vdXNlCm1vdmUKbW92aWUKbXVjaAptdWZmaW4KbXVsZQptdWx0aXBseQptdXNjbGUKbXVzZXVtCm11c2hyb29tCm11c2ljCm11c3QKbXV0dWFsCm15c2VsZgpteXN0ZXJ5Cm15dGgKbmFpdmUKbmFtZQpuYXBraW4KbmFycm93Cm5hc3R5Cm5hdGlvbgpuYXR1cmUKbmVhcgpuZWNrCm5lZWQKbmVnYXRpdmUKbmVnbGVjdApuZWl0aGVyCm5lcGhldwpuZXJ2ZQpuZXN0Cm5ldApuZXR3b3JrCm5ldXRyYWwKbmV2ZXIKbmV3cwpuZXh0Cm5pY2UKbmlnaHQKbm9ibGUKbm9pc2UKbm9taW5lZQpub29kbGUKbm9ybWFsCm5vcnRoCm5vc2UKbm90YWJsZQpub3RlCm5vdGhpbmcKbm90aWNlCm5vdmVsCm5vdwpudWNsZWFyCm51bWJlcgpudXJzZQpudXQKb2FrCm9iZXkKb2JqZWN0Cm9ibGlnZQpvYnNjdXJlCm9ic2VydmUKb2J0YWluCm9idmlvdXMKb2NjdXIKb2NlYW4Kb2N0b2JlcgpvZG9yCm9mZgpvZmZlcgpvZmZpY2UKb2Z0ZW4Kb2lsCm9rYXkKb2xkCm9saXZlCm9seW1waWMKb21pdApvbmNlCm9uZQpvbmlvbgpvbmxpbmUKb25seQpvcGVuCm9wZXJhCm9waW5pb24Kb3Bwb3NlCm9wdGlvbgpvcmFuZ2UKb3JiaXQKb3JjaGFyZApvcmRlcgpvcmRpbmFyeQpvcmdhbgpvcmllbnQKb3JpZ2luYWwKb3JwaGFuCm9zdHJpY2gKb3RoZXIKb3V0ZG9vcgpvdXRlcgpvdXRwdXQKb3V0c2lkZQpvdmFsCm92ZW4Kb3Zlcgpvd24Kb3duZXIKb3h5Z2VuCm95c3Rlcgpvem9uZQpwYWN0CnBhZGRsZQpwYWdlCnBhaXIKcGFsYWNlCnBhbG0KcGFuZGEKcGFuZWwKcGFuaWMKcGFudGhlcgpwYXBlcgpwYXJhZGUKcGFyZW50CnBhcmsKcGFycm90CnBhcnR5CnBhc3MKcGF0Y2gKcGF0aApwYXRpZW50CnBhdHJvbApwYXR0ZXJuCnBhdXNlCnBhdmUKcGF5bWVudApwZWFjZQpwZWFudXQKcGVhcgpwZWFzYW50CnBlbGljYW4KcGVuCnBlbmFsdHkKcGVuY2lsCnBlb3BsZQpwZXBwZXIKcGVyZmVjdApwZXJtaXQKcGVyc29uCnBldApwaG9uZQpwaG90bwpwaHJhc2UKcGh5c2ljYWwKcGlhbm8KcGljbmljCnBpY3R1cmUKcGllY2UKcGlnCnBpZ2VvbgpwaWxsCnBpbG90CnBpbmsKcGlvbmVlcgpwaXBlCnBpc3RvbApwaXRjaApwaXp6YQpwbGFjZQpwbGFuZXQKcGxhc3RpYwpwbGF0ZQpwbGF5CnBsZWFzZQpwbGVkZ2UKcGx1Y2sKcGx1ZwpwbHVuZ2UKcG9lbQpwb2V0CnBvaW50CnBvbGFyCnBvbGUKcG9saWNlCnBvbmQKcG9ueQpwb29sCnBvcHVsYXIKcG9ydGlvbgpwb3NpdGlvbgpwb3NzaWJsZQpwb3N0CnBvdGF0bwpwb3R0ZXJ5CnBvdmVydHkKcG93ZGVyCnBvd2VyCnByYWN0aWNlCnByYWlzZQpwcmVkaWN0CnByZWZlcgpwcmVwYXJlCnByZXNlbnQKcHJldHR5CnByZXZlbnQKcHJpY2UKcHJpZGUKcHJpbWFyeQpwcmludApwcmlvcml0eQpwcmlzb24KcHJpdmF0ZQpwcml6ZQpwcm9ibGVtCnByb2Nlc3MKcHJvZHVjZQpwcm9maXQKcHJvZ3JhbQpwcm9qZWN0CnByb21vdGUKcHJvb2YKcHJvcGVydHkKcHJvc3Blcgpwcm90ZWN0CnByb3VkCnByb3ZpZGUKcHVibGljCnB1ZGRpbmcKcHVsbApwdWxwCnB1bHNlCnB1bXBraW4KcHVuY2gKcHVwaWwKcHVwcHkKcHVyY2hhc2UKcHVyaXR5CnB1cnBvc2UKcHVyc2UKcHVzaApwdXQKcHV6emxlCnB5cmFtaWQKcXVhbGl0eQpxdWFudHVtCnF1YXJ0ZXIKcXVlc3Rpb24KcXVpY2sKcXVpdApxdWl6CnF1b3RlCnJhYmJpdApyYWNjb29uCnJhY2UKcmFjawpyYWRhcgpyYWRpbwpyYWlsCnJhaW4KcmFpc2UKcmFsbHkKcmFtcApyYW5jaApyYW5kb20KcmFuZ2UKcmFwaWQKcmFyZQpyYXRlCnJhdGhlcgpyYXZlbgpyYXcKcmF6b3IKcmVhZHkKcmVhbApyZWFzb24KcmViZWwKcmVidWlsZApyZWNhbGwKcmVjZWl2ZQpyZWNpcGUKcmVjb3JkCnJlY3ljbGUKcmVkdWNlCnJlZmxlY3QKcmVmb3JtCnJlZnVzZQpyZWdpb24KcmVncmV0CnJlZ3VsYXIKcmVqZWN0CnJlbGF4CnJlbGVhc2UKcmVsaWVmCnJlbHkKcmVtYWluCnJlbWVtYmVyCnJlbWluZApyZW1vdmUKcmVuZGVyCnJlbmV3CnJlbnQKcmVvcGVuCnJlcGFpcgpyZXBlYXQKcmVwbGFjZQpyZXBvcnQKcmVxdWlyZQpyZXNjdWUKcmVzZW1ibGUKcmVzaXN0CnJlc291cmNlCnJlc3BvbnNlCnJlc3VsdApyZXRpcmUKcmV0cmVhdApyZXR1cm4KcmV1bmlvbgpyZXZlYWwKcmV2aWV3CnJld2FyZApyaHl0aG0KcmliCnJpYmJvbgpyaWNlCnJpY2gKcmlkZQpyaWRnZQpyaWZsZQpyaWdodApyaWdpZApyaW5nCnJpb3QKcmlwcGxlCnJpc2sKcml0dWFsCnJpdmFsCnJpdmVyCnJvYWQKcm9hc3QKcm9ib3QKcm9idXN0CnJvY2tldApyb21hbmNlCnJvb2YKcm9va2llCnJvb20Kcm9zZQpyb3RhdGUKcm91Z2gKcm91bmQKcm91dGUKcm95YWwKcnViYmVyCnJ1ZGUKcnVnCnJ1bGUKcnVuCnJ1bndheQpydXJhbApzYWQKc2FkZGxlCnNhZG5lc3MKc2FmZQpzYWlsCnNhbGFkCnNhbG1vbgpzYWxvbgpzYWx0CnNhbHV0ZQpzYW1lCnNhbXBsZQpzYW5kCnNhdGlzZnkKc2F0b3NoaQpzYXVjZQpzYXVzYWdlCnNhdmUKc2F5CnNjYWxlCnNjYW4Kc2NhcmUKc2NhdHRlcgpzY2VuZQpzY2hlbWUKc2Nob29sCnNjaWVuY2UKc2Npc3NvcnMKc2NvcnBpb24Kc2NvdXQKc2NyYXAKc2NyZWVuCnNjcmlwdApzY3J1YgpzZWEKc2VhcmNoCnNlYXNvbgpzZWF0CnNlY29uZApzZWNyZXQKc2VjdGlvbgpzZWN1cml0eQpzZWVkCnNlZWsKc2VnbWVudApzZWxlY3QKc2VsbApzZW1pbmFyCnNlbmlvcgpzZW5zZQpzZW50ZW5jZQpzZXJpZXMKc2VydmljZQpzZXNzaW9uCnNldHRsZQpzZXR1cApzZXZlbgpzaGFkb3cKc2hhZnQKc2hhbGxvdwpzaGFyZQpzaGVkCnNoZWxsCnNoZXJpZmYKc2hpZWxkCnNoaWZ0CnNoaW5lCnNoaXAKc2hpdmVyCnNob2NrCnNob2UKc2hvb3QKc2hvcApzaG9ydApzaG91bGRlcgpzaG92ZQpzaHJpbXAKc2hydWcKc2h1ZmZsZQpzaHkKc2libGluZwpzaWNrCnNpZGUKc2llZ2UKc2lnaHQKc2lnbgpzaWxlbnQKc2lsawpzaWxseQpzaWx2ZXIKc2ltaWxhcgpzaW1wbGUKc2luY2UKc2luZwpzaXJlbgpzaXN0ZXIKc2l0dWF0ZQpzaXgKc2l6ZQpza2F0ZQpza2V0Y2gKc2tpCnNraWxsCnNraW4Kc2tpcnQKc2t1bGwKc2xhYgpzbGFtCnNsZWVwCnNsZW5kZXIKc2xpY2UKc2xpZGUKc2xpZ2h0CnNsaW0Kc2xvZ2FuCnNsb3QKc2xvdwpzbHVzaApzbWFsbApzbWFydApzbWlsZQpzbW9rZQpzbW9vdGgKc25hY2sKc25ha2UKc25hcApzbmlmZgpzbm93CnNvYXAKc29jY2VyCnNvY2lhbApzb2NrCnNvZGEKc29mdApzb2xhcgpzb2xkaWVyCnNvbGlkCnNvbHV0aW9uCnNvbHZlCnNvbWVvbmUKc29uZwpzb29uCnNvcnJ5CnNvcnQKc291bApzb3VuZApzb3VwCnNvdXJjZQpzb3V0aApzcGFjZQpzcGFyZQpzcGF0aWFsCnNwYXduCnNwZWFrCnNwZWNpYWwKc3BlZWQKc3BlbGwKc3BlbmQKc3BoZXJlCnNwaWNlCnNwaWRlcgpzcGlrZQpzcGluCnNwaXJpdApzcGxpdApzcG9pbApzcG9uc29yCnNwb29uCnNwb3J0CnNwb3QKc3ByYXkKc3ByZWFkCnNwcmluZwpzcHkKc3F1YXJlCnNxdWVlemUKc3F1aXJyZWwKc3RhYmxlCnN0YWRpdW0Kc3RhZmYKc3RhZ2UKc3RhaXJzCnN0YW1wCnN0YW5kCnN0YXJ0CnN0YXRlCnN0YXkKc3RlYWsKc3RlZWwKc3RlbQpzdGVwCnN0ZXJlbwpzdGljawpzdGlsbApzdGluZwpzdG9jawpzdG9tYWNoCnN0b25lCnN0b29sCnN0b3J5CnN0b3ZlCnN0cmF0ZWd5CnN0cmVldApzdHJpa2UKc3Ryb25nCnN0cnVnZ2xlCnN0dWRlbnQKc3R1ZmYKc3R1bWJsZQpzdHlsZQpzdWJqZWN0CnN1Ym1pdApzdWJ3YXkKc3VjY2VzcwpzdWNoCnN1ZGRlbgpzdWZmZXIKc3VnYXIKc3VnZ2VzdApzdWl0CnN1bW1lcgpzdW4Kc3VubnkKc3Vuc2V0CnN1cGVyCnN1cHBseQpzdXByZW1lCnN1cmUKc3VyZmFjZQpzdXJnZQpzdXJwcmlzZQpzdXJyb3VuZApzdXJ2ZXkKc3VzcGVjdApzdXN0YWluCnN3YWxsb3cKc3dhbXAKc3dhcApzd2FybQpzd2Vhcgpzd2VldApzd2lmdApzd2ltCnN3aW5nCnN3aXRjaApzd29yZApzeW1ib2wKc3ltcHRvbQpzeXJ1cApzeXN0ZW0KdGFibGUKdGFja2xlCnRhZwp0YWlsCnRhbGVudAp0YWxrCnRhbmsKdGFwZQp0YXJnZXQKdGFzawp0YXN0ZQp0YXR0b28KdGF4aQp0ZWFjaAp0ZWFtCnRlbGwKdGVuCnRlbmFudAp0ZW5uaXMKdGVudAp0ZXJtCnRlc3QKdGV4dAp0aGFuawp0aGF0CnRoZW1lCnRoZW4KdGhlb3J5CnRoZXJlCnRoZXkKdGhpbmcKdGhpcwp0aG91Z2h0CnRocmVlCnRocml2ZQp0aHJvdwp0aHVtYgp0aHVuZGVyCnRpY2tldAp0aWRlCnRpZ2VyCnRpbHQKdGltYmVyCnRpbWUKdGlueQp0aXAKdGlyZWQKdGlzc3VlCnRpdGxlCnRvYXN0CnRvYmFjY28KdG9kYXkKdG9kZGxlcgp0b2UKdG9nZXRoZXIKdG9pbGV0CnRva2VuCnRvbWF0bwp0b21vcnJvdwp0b25lCnRvbmd1ZQp0b25pZ2h0CnRvb2wKdG9vdGgKdG9wCnRvcGljCnRvcHBsZQp0b3JjaAp0b3JuYWRvCnRvcnRvaXNlCnRvc3MKdG90YWwKdG91cmlzdAp0b3dhcmQKdG93ZXIKdG93bgp0b3kKdHJhY2sKdHJhZGUKdHJhZmZpYwp0cmFnaWMKdHJhaW4KdHJhbnNmZXIKdHJhcAp0cmFzaAp0cmF2ZWwKdHJheQp0cmVhdAp0cmVlCnRyZW5kCnRyaWFsCnRyaWJlCnRyaWNrCnRyaWdnZXIKdHJpbQp0cmlwCnRyb3BoeQp0cm91YmxlCnRydWNrCnRydWUKdHJ1bHkKdHJ1bXBldAp0cnVzdAp0cnV0aAp0cnkKdHViZQp0dWl0aW9uCnR1bWJsZQp0dW5hCnR1bm5lbAp0dXJrZXkKdHVybgp0dXJ0bGUKdHdlbHZlCnR3ZW50eQp0d2ljZQp0d2luCnR3aXN0CnR3bwp0eXBlCnR5cGljYWwKdWdseQp1bWJyZWxsYQp1bmFibGUKdW5hd2FyZQp1bmNsZQp1bmNvdmVyCnVuZGVyCnVuZG8KdW5mYWlyCnVuZm9sZAp1bmhhcHB5CnVuaWZvcm0KdW5pcXVlCnVuaXQKdW5pdmVyc2UKdW5rbm93bgp1bmxvY2sKdW50aWwKdW51c3VhbAp1bnZlaWwKdXBkYXRlCnVwZ3JhZGUKdXBob2xkCnVwb24KdXBwZXIKdXBzZXQKdXJiYW4KdXJnZQp1c2FnZQp1c2UKdXNlZAp1c2VmdWwKdXNlbGVzcwp1c3VhbAp1dGlsaXR5CnZhY2FudAp2YWN1dW0KdmFndWUKdmFsaWQKdmFsbGV5CnZhbHZlCnZhbgp2YW5pc2gKdmFwb3IKdmFyaW91cwp2YXN0CnZhdWx0CnZlaGljbGUKdmVsdmV0CnZlbmRvcgp2ZW50dXJlCnZlbnVlCnZlcmIKdmVyaWZ5CnZlcnNpb24KdmVyeQp2ZXNzZWwKdmV0ZXJhbgp2aWFibGUKdmlicmFudAp2aWNpb3VzCnZpY3RvcnkKdmlkZW8Kdmlldwp2aWxsYWdlCnZpbnRhZ2UKdmlvbGluCnZpcnR1YWwKdmlydXMKdmlzYQp2aXNpdAp2aXN1YWwKdml0YWwKdml2aWQKdm9jYWwKdm9pY2UKdm9pZAp2b2xjYW5vCnZvbHVtZQp2b3RlCnZveWFnZQp3YWdlCndhZ29uCndhaXQKd2Fsawp3YWxsCndhbG51dAp3YW50CndhcmZhcmUKd2FybQp3YXJyaW9yCndhc2gKd2FzcAp3YXN0ZQp3YXRlcgp3YXZlCndheQp3ZWFsdGgKd2VhcG9uCndlYXIKd2Vhc2VsCndlYXRoZXIKd2ViCndlZGRpbmcKd2Vla2VuZAp3ZWlyZAp3ZWxjb21lCndlc3QKd2V0CndoYWxlCndoYXQKd2hlYXQKd2hlZWwKd2hlbgp3aGVyZQp3aGlwCndoaXNwZXIKd2lkZQp3aWR0aAp3aWZlCndpbGQKd2lsbAp3aW4Kd2luZG93CndpbmUKd2luZwp3aW5rCndpbm5lcgp3aW50ZXIKd2lyZQp3aXNkb20Kd2lzZQp3aXNoCndpdG5lc3MKd29sZgp3b21hbgp3b25kZXIKd29vZAp3b29sCndvcmQKd29yawp3b3JsZAp3b3JyeQp3b3J0aAp3cmFwCndyZWNrCndyZXN0bGUKd3Jpc3QKd3JpdGUKd3JvbmcKeWFyZAp5ZWFyCnllbGxvdwp5b3UKeW91bmcKeW91dGgKemVicmEKemVybwp6b25lCnpvb2Auc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy9mcmVuY2guanMKICB2YXIgd29yZGxpc3QzID0gYGFiYWlzc2VyCmFiYW5kb24KYWJkaXF1ZXIKYWJlaWxsZQphYm9saXIKYWJvcmRlcgphYm91dGlyCmFib3llcgphYnJhc2lmCmFicmV1dmVyCmFicml0ZXIKYWJyb2dlcgphYnJ1cHQKYWJzZW5jZQphYnNvbHUKYWJzdXJkZQphYnVzaWYKYWJ5c3NhbAphY2FkZVx1MDMwMW1pZQphY2Fqb3UKYWNhcmllbgphY2NhYmxlcgphY2NlcHRlcgphY2NsYW1lcgphY2NvbGFkZQphY2Nyb2NoZQphY2N1c2VyCmFjZXJiZQphY2hhdAphY2hldGVyCmFjaWR1bGVyCmFjaWVyCmFjb21wdGUKYWNxdWVcdTAzMDFyaXIKYWNyb255bWUKYWN0ZXVyCmFjdGlmCmFjdHVlbAphZGVwdGUKYWRlXHUwMzAxcXVhdAphZGhlXHUwMzAxc2lmCmFkamVjdGlmCmFkanVnZXIKYWRtZXR0cmUKYWRtaXJlcgphZG9wdGVyCmFkb3JlcgphZG91Y2lyCmFkcmVzc2UKYWRyb2l0CmFkdWx0ZQphZHZlcmJlCmFlXHUwMzAxcmVyCmFlXHUwMzAxcm9uZWYKYWZmYWlyZQphZmZlY3RlcgphZmZpY2hlCmFmZnJldXgKYWZmdWJsZXIKYWdhY2VyCmFnZW5jZXIKYWdpbGUKYWdpdGVyCmFncmFmZXIKYWdyZVx1MDMwMWFibGUKYWdydW1lCmFpZGVyCmFpZ3VpbGxlCmFpbGllcgphaW1hYmxlCmFpc2FuY2UKYWpvdXRlcgphanVzdGVyCmFsYXJtZXIKYWxjaGltaWUKYWxlcnRlCmFsZ2VcdTAzMDBicmUKYWxndWUKYWxpZVx1MDMwMW5lcgphbGltZW50CmFsbGVcdTAzMDFnZXIKYWxsaWFnZQphbGxvdWVyCmFsbHVtZXIKYWxvdXJkaXIKYWxwYWdhCmFsdGVzc2UKYWx2ZVx1MDMwMW9sZQphbWF0ZXVyCmFtYmlndQphbWJyZQphbWVcdTAzMDFuYWdlcgphbWVydHVtZQphbWlkb24KYW1pcmFsCmFtb3JjZXIKYW1vdXIKYW1vdmlibGUKYW1waGliaWUKYW1wbGV1cgphbXVzYW50CmFuYWx5c2UKYW5hcGhvcmUKYW5hcmNoaWUKYW5hdG9taWUKYW5jaWVuCmFuZVx1MDMwMWFudGlyCmFuZ2xlCmFuZ29pc3NlCmFuZ3VsZXV4CmFuaW1hbAphbm5leGVyCmFubm9uY2UKYW5udWVsCmFub2Rpbgphbm9tYWxpZQphbm9ueW1lCmFub3JtYWwKYW50ZW5uZQphbnRpZG90ZQphbnhpZXV4CmFwYWlzZXIKYXBlXHUwMzAxcml0aWYKYXBsYW5pcgphcG9sb2dpZQphcHBhcmVpbAphcHBlbGVyCmFwcG9ydGVyCmFwcHV5ZXIKYXF1YXJpdW0KYXF1ZWR1YwphcmJpdHJlCmFyYnVzdGUKYXJkZXVyCmFyZG9pc2UKYXJnZW50CmFybGVxdWluCmFybWF0dXJlCmFybWVtZW50CmFybW9pcmUKYXJtdXJlCmFycGVudGVyCmFycmFjaGVyCmFycml2ZXIKYXJyb3NlcgphcnNlbmljCmFydGVcdTAzMDFyaWVsCmFydGljbGUKYXNwZWN0CmFzcGhhbHRlCmFzcGlyZXIKYXNzYXV0CmFzc2VydmlyCmFzc2lldHRlCmFzc29jaWVyCmFzc3VyZXIKYXN0aWNvdAphc3RyZQphc3R1Y2UKYXRlbGllcgphdG9tZQphdHJpdW0KYXRyb2NlCmF0dGFxdWUKYXR0ZW50aWYKYXR0aXJlcgphdHRyYXBlcgphdWJhaW5lCmF1YmVyZ2UKYXVkYWNlCmF1ZGlibGUKYXVndXJlcgphdXJvcmUKYXV0b21uZQphdXRydWNoZQphdmFsZXIKYXZhbmNlcgphdmFyaWNlCmF2ZW5pcgphdmVyc2UKYXZldWdsZQphdmlhdGV1cgphdmlkZQphdmlvbgphdmlzZXIKYXZvaW5lCmF2b3VlcgphdnJpbApheGlhbApheGlvbWUKYmFkZ2UKYmFmb3VlcgpiYWdhZ2UKYmFndWV0dGUKYmFpZ25hZGUKYmFsYW5jZXIKYmFsY29uCmJhbGVpbmUKYmFsaXNhZ2UKYmFtYmluCmJhbmNhaXJlCmJhbmRhZ2UKYmFubGlldWUKYmFubmllXHUwMzAwcmUKYmFucXVpZXIKYmFyYmllcgpiYXJpbApiYXJvbgpiYXJxdWUKYmFycmFnZQpiYXNzaW4KYmFzdGlvbgpiYXRhaWxsZQpiYXRlYXUKYmF0dGVyaWUKYmF1ZHJpZXIKYmF2YXJkZXIKYmVsZXR0ZQpiZVx1MDMwMWxpZXIKYmVsb3RlCmJlXHUwMzAxbmVcdTAzMDFmaWNlCmJlcmNlYXUKYmVyZ2VyCmJlcmxpbmUKYmVybXVkYQpiZXNhY2UKYmVzb2duZQpiZVx1MDMwMXRhaWwKYmV1cnJlCmJpYmVyb24KYmljeWNsZQpiaWR1bGUKYmlqb3UKYmlsYW4KYmlsaW5ndWUKYmlsbGFyZApiaW5haXJlCmJpb2xvZ2llCmJpb3BzaWUKYmlvdHlwZQpiaXNjdWl0CmJpc29uCmJpc3RvdXJpCmJpdHVtZQpiaXphcnJlCmJsYWZhcmQKYmxhZ3VlCmJsYW5jaGlyCmJsZXNzYW50CmJsaW5kZXIKYmxvbmQKYmxvcXVlcgpibG91c29uCmJvYmFyZApib2JpbmUKYm9pcmUKYm9pc2VyCmJvbGlkZQpib25ib24KYm9uZGlyCmJvbmhldXIKYm9uaWZpZXIKYm9udXMKYm9yZHVyZQpib3JuZQpib3R0ZQpib3VjbGUKYm91ZXV4CmJvdWdpZQpib3Vsb24KYm91cXVpbgpib3Vyc2UKYm91c3NvbGUKYm91dGlxdWUKYm94ZXVyCmJyYW5jaGUKYnJhc2llcgpicmF2ZQpicmViaXMKYnJlXHUwMzAwY2hlCmJyZXV2YWdlCmJyaWNvbGVyCmJyaWdhZGUKYnJpbGxhbnQKYnJpb2NoZQpicmlxdWUKYnJvY2h1cmUKYnJvZGVyCmJyb256ZXIKYnJvdXNzZQpicm95ZXVyCmJydW1lCmJydXNxdWUKYnJ1dGFsCmJydXlhbnQKYnVmZmxlCmJ1aXNzb24KYnVsbGV0aW4KYnVyZWF1CmJ1cmluCmJ1c3RpZXIKYnV0aW5lcgpidXRvaXIKYnV2YWJsZQpidXZldHRlCmNhYmFub24KY2FiaW5lCmNhY2hldHRlCmNhZGVhdQpjYWRyZQpjYWZlXHUwMzAxaW5lCmNhaWxsb3UKY2Fpc3NvbgpjYWxjdWxlcgpjYWxlcGluCmNhbGlicmUKY2FsbWVyCmNhbG9tbmllCmNhbHZhaXJlCmNhbWFyYWRlCmNhbWVcdTAzMDFyYQpjYW1pb24KY2FtcGFnbmUKY2FuYWwKY2FuZXRvbgpjYW5vbgpjYW50aW5lCmNhbnVsYXIKY2FwYWJsZQpjYXBvcmFsCmNhcHJpY2UKY2Fwc3VsZQpjYXB0ZXIKY2FwdWNoZQpjYXJhYmluZQpjYXJib25lCmNhcmVzc2VyCmNhcmlib3UKY2FybmFnZQpjYXJvdHRlCmNhcnJlYXUKY2FydG9uCmNhc2NhZGUKY2FzaWVyCmNhc3F1ZQpjYXNzdXJlCmNhdXNlcgpjYXV0aW9uCmNhdmFsaWVyCmNhdmVybmUKY2F2aWFyCmNlXHUwMzAxZGlsbGUKY2VpbnR1cmUKY2VcdTAzMDFsZXN0ZQpjZWxsdWxlCmNlbmRyaWVyCmNlbnN1cmVyCmNlbnRyYWwKY2VyY2xlCmNlXHUwMzAxcmVcdTAzMDFicmFsCmNlcmlzZQpjZXJuZXIKY2VydmVhdQpjZXNzZXIKY2hhZ3JpbgpjaGFpc2UKY2hhbGV1cgpjaGFtYnJlCmNoYW5jZQpjaGFwaXRyZQpjaGFyYm9uCmNoYXNzZXVyCmNoYXRvbgpjaGF1c3NvbgpjaGF2aXJlcgpjaGVtaXNlCmNoZW5pbGxlCmNoZVx1MDMwMXF1aWVyCmNoZXJjaGVyCmNoZXZhbApjaGllbgpjaGlmZnJlCmNoaWdub24KY2hpbWVcdTAzMDByZQpjaGlvdApjaGxvcnVyZQpjaG9jb2xhdApjaG9pc2lyCmNob3NlCmNob3VldHRlCmNocm9tZQpjaHV0ZQpjaWdhcmUKY2lnb2duZQpjaW1lbnRlcgpjaW5lXHUwMzAxbWEKY2ludHJlcgpjaXJjdWxlcgpjaXJlcgpjaXJxdWUKY2l0ZXJuZQpjaXRveWVuCmNpdHJvbgpjaXZpbApjbGFpcm9uCmNsYW1ldXIKY2xhcXVlcgpjbGFzc2UKY2xhdmllcgpjbGllbnQKY2xpZ25lcgpjbGltYXQKY2xpdmFnZQpjbG9jaGUKY2xvbmFnZQpjbG9wb3J0ZQpjb2JhbHQKY29icmEKY29jYXNzZQpjb2NvdGllcgpjb2Rlcgpjb2RpZmllcgpjb2ZmcmUKY29nbmVyCmNvaGVcdTAzMDFzaW9uCmNvaWZmZXIKY29pbmNlcgpjb2xlXHUwMzAwcmUKY29saWJyaQpjb2xsaW5lCmNvbG1hdGVyCmNvbG9uZWwKY29tYmF0CmNvbWVcdTAzMDFkaWUKY29tbWFuZGUKY29tcGFjdApjb25jZXJ0CmNvbmR1aXJlCmNvbmZpZXIKY29uZ2VsZXIKY29ubm90ZXIKY29uc29ubmUKY29udGFjdApjb252ZXhlCmNvcGFpbgpjb3BpZQpjb3JhaWwKY29yYmVhdQpjb3JkYWdlCmNvcm5pY2hlCmNvcnB1cwpjb3JyZWN0CmNvcnRlXHUwMzAwZ2UKY29zbWlxdWUKY29zdHVtZQpjb3Rvbgpjb3VkZQpjb3VwdXJlCmNvdXJhZ2UKY291dGVhdQpjb3V2cmlyCmNveW90ZQpjcmFiZQpjcmFpbnRlCmNyYXZhdGUKY3JheW9uCmNyZVx1MDMwMWF0dXJlCmNyZVx1MDMwMWRpdGVyCmNyZVx1MDMwMW1ldXgKY3JldXNlcgpjcmV2ZXR0ZQpjcmlibGVyCmNyaWVyCmNyaXN0YWwKY3JpdGVcdTAzMDByZQpjcm9pcmUKY3JvcXVlcgpjcm90YWxlCmNydWNpYWwKY3J1ZWwKY3J5cHRlcgpjdWJpcXVlCmN1ZWlsbGlyCmN1aWxsZVx1MDMwMHJlCmN1aXNpbmUKY3VpdnJlCmN1bG1pbmVyCmN1bHRpdmVyCmN1bXVsZXIKY3VwaWRlCmN1cmF0aWYKY3Vyc2V1cgpjeWFudXJlCmN5Y2xlCmN5bGluZHJlCmN5bmlxdWUKZGFpZ25lcgpkYW1pZXIKZGFuZ2VyCmRhbnNldXIKZGF1cGhpbgpkZVx1MDMwMWJhdHRyZQpkZVx1MDMwMWJpdGVyCmRlXHUwMzAxYm9yZGVyCmRlXHUwMzAxYnJpZGVyCmRlXHUwMzAxYnV0YW50CmRlXHUwMzAxY2FsZXIKZGVcdTAzMDFjZW1icmUKZGVcdTAzMDFjaGlyZXIKZGVcdTAzMDFjaWRlcgpkZVx1MDMwMWNsYXJlcgpkZVx1MDMwMWNvcmVyCmRlXHUwMzAxY3JpcmUKZGVcdTAzMDFjdXBsZXIKZGVcdTAzMDFkYWxlCmRlXHUwMzAxZHVjdGlmCmRlXHUwMzAxZXNzZQpkZVx1MDMwMWZlbnNpZgpkZVx1MDMwMWZpbGVyCmRlXHUwMzAxZnJheWVyCmRlXHUwMzAxZ2FnZXIKZGVcdTAzMDFnaXZyZXIKZGVcdTAzMDFnbHV0aXIKZGVcdTAzMDFncmFmZXIKZGVcdTAzMDFqZXVuZXIKZGVcdTAzMDFsaWNlCmRlXHUwMzAxbG9nZXIKZGVtYW5kZXIKZGVtZXVyZXIKZGVcdTAzMDFtb2xpcgpkZVx1MDMwMW5pY2hlcgpkZVx1MDMwMW5vdWVyCmRlbnRlbGxlCmRlXHUwMzAxbnVkZXIKZGVcdTAzMDFwYXJ0CmRlXHUwMzAxcGVuc2VyCmRlXHUwMzAxcGhhc2VyCmRlXHUwMzAxcGxhY2VyCmRlXHUwMzAxcG9zZXIKZGVcdTAzMDFyYW5nZXIKZGVcdTAzMDFyb2JlcgpkZVx1MDMwMXNhc3RyZQpkZXNjZW50ZQpkZVx1MDMwMXNlcnQKZGVcdTAzMDFzaWduZXIKZGVcdTAzMDFzb2JlXHUwMzAxaXIKZGVzc2luZXIKZGVzdHJpZXIKZGVcdTAzMDF0YWNoZXIKZGVcdTAzMDF0ZXN0ZXIKZGVcdTAzMDF0b3VyZXIKZGVcdTAzMDF0cmVzc2UKZGV2YW5jZXIKZGV2ZW5pcgpkZXZpbmVyCmRldm9pcgpkaWFibGUKZGlhbG9ndWUKZGlhbWFudApkaWN0ZXIKZGlmZmVcdTAzMDFyZXIKZGlnZVx1MDMwMXJlcgpkaWdpdGFsCmRpZ25lCmRpbHVlcgpkaW1hbmNoZQpkaW1pbnVlcgpkaW94eWRlCmRpcmVjdGlmCmRpcmlnZXIKZGlzY3V0ZXIKZGlzcG9zZXIKZGlzc2lwZXIKZGlzdGFuY2UKZGl2ZXJ0aXIKZGl2aXNlcgpkb2NpbGUKZG9jdGV1cgpkb2dtZQpkb2lndApkb21haW5lCmRvbWljaWxlCmRvbXB0ZXIKZG9uYXRldXIKZG9uam9uCmRvbm5lcgpkb3BhbWluZQpkb3J0b2lyCmRvcnVyZQpkb3NhZ2UKZG9zZXVyCmRvc3NpZXIKZG90YXRpb24KZG91YW5pZXIKZG91YmxlCmRvdWNldXIKZG91dGVyCmRveWVuCmRyYWdvbgpkcmFwZXIKZHJlc3NlcgpkcmliYmxlcgpkcm9pdHVyZQpkdXBlcmllCmR1cGxleGUKZHVyYWJsZQpkdXJjaXIKZHluYXN0aWUKZVx1MDMwMWJsb3VpcgplXHUwMzAxY2FydGVyCmVcdTAzMDFjaGFycGUKZVx1MDMwMWNoZWxsZQplXHUwMzAxY2xhaXJlcgplXHUwMzAxY2xpcHNlCmVcdTAzMDFjbG9yZQplXHUwMzAxY2x1c2UKZVx1MDMwMWNvbGUKZVx1MDMwMWNvbm9taWUKZVx1MDMwMWNvcmNlCmVcdTAzMDFjb3V0ZXIKZVx1MDMwMWNyYXNlcgplXHUwMzAxY3JlXHUwMzAxbWVyCmVcdTAzMDFjcml2YWluCmVcdTAzMDFjcm91CmVcdTAzMDFjdW1lCmVcdTAzMDFjdXJldWlsCmVcdTAzMDFkaWZpZXIKZVx1MDMwMWR1cXVlcgplZmZhY2VyCmVmZmVjdGlmCmVmZmlnaWUKZWZmb3J0CmVmZnJheWVyCmVmZnVzaW9uCmVcdTAzMDFnYWxpc2VyCmVcdTAzMDFnYXJlcgplXHUwMzAxamVjdGVyCmVcdTAzMDFsYWJvcmVyCmVcdTAzMDFsYXJnaXIKZVx1MDMwMWxlY3Ryb24KZVx1MDMwMWxlXHUwMzAxZ2FudAplXHUwMzAxbGVcdTAzMDFwaGFudAplXHUwMzAxbGVcdTAzMDB2ZQplXHUwMzAxbGlnaWJsZQplXHUwMzAxbGl0aXNtZQplXHUwMzAxbG9nZQplXHUwMzAxbHVjaWRlcgplXHUwMzAxbHVkZXIKZW1iYWxsZXIKZW1iZWxsaXIKZW1icnlvbgplXHUwMzAxbWVyYXVkZQplXHUwMzAxbWlzc2lvbgplbW1lbmVyCmVcdTAzMDFtb3Rpb24KZVx1MDMwMW1vdXZvaXIKZW1wZXJldXIKZW1wbG95ZXIKZW1wb3J0ZXIKZW1wcmlzZQplXHUwMzAxbXVsc2lvbgplbmNhZHJlcgplbmNoZVx1MDMwMHJlCmVuY2xhdmUKZW5jb2NoZQplbmRpZ3VlcgplbmRvc3NlcgplbmRyb2l0CmVuZHVpcmUKZVx1MDMwMW5lcmdpZQplbmZhbmNlCmVuZmVybWVyCmVuZm91aXIKZW5nYWdlcgplbmdpbgplbmdsb2JlcgplXHUwMzAxbmlnbWUKZW5qYW1iZXIKZW5qZXUKZW5sZXZlcgplbm5lbWkKZW5udXlldXgKZW5yaWNoaXIKZW5yb2JhZ2UKZW5zZWlnbmUKZW50YXNzZXIKZW50ZW5kcmUKZW50aWVyCmVudG91cmVyCmVudHJhdmVyCmVcdTAzMDFudW1lXHUwMzAxcmVyCmVudmFoaXIKZW52aWFibGUKZW52b3llcgplbnp5bWUKZVx1MDMwMW9saWVuCmVcdTAzMDFwYWlzc2lyCmVcdTAzMDFwYXJnbmUKZVx1MDMwMXBhdGFudAplXHUwMzAxcGF1bGUKZVx1MDMwMXBpY2VyaWUKZVx1MDMwMXBpZGVcdTAzMDFtaWUKZVx1MDMwMXBpZXIKZVx1MDMwMXBpbG9ndWUKZVx1MDMwMXBpbmUKZVx1MDMwMXBpc29kZQplXHUwMzAxcGl0YXBoZQplXHUwMzAxcG9xdWUKZVx1MDMwMXByZXV2ZQplXHUwMzAxcHJvdXZlcgplXHUwMzAxcHVpc2FudAplXHUwMzAxcXVlcnJlCmVcdTAzMDFxdWlwZQplXHUwMzAxcmlnZXIKZVx1MDMwMXJvc2lvbgplcnJldXIKZVx1MDMwMXJ1cHRpb24KZXNjYWxpZXIKZXNwYWRvbgplc3BlXHUwMzAwY2UKZXNwaWVcdTAzMDBnbGUKZXNwb2lyCmVzcHJpdAplc3F1aXZlcgplc3NheWVyCmVzc2VuY2UKZXNzaWV1CmVzc29yZXIKZXN0aW1lCmVzdG9tYWMKZXN0cmFkZQplXHUwMzAxdGFnZVx1MDMwMHJlCmVcdTAzMDF0YWxlcgplXHUwMzAxdGFuY2hlCmVcdTAzMDF0YXRpcXVlCmVcdTAzMDF0ZWluZHJlCmVcdTAzMDF0ZW5kb2lyCmVcdTAzMDF0ZXJuZWwKZVx1MDMwMXRoYW5vbAplXHUwMzAxdGhpcXVlCmV0aG5pZQplXHUwMzAxdGlyZXIKZVx1MDMwMXRvZmZlcgplXHUwMzAxdG9pbGUKZVx1MDMwMXRvbm5hbnQKZVx1MDMwMXRvdXJkaXIKZVx1MDMwMXRyYW5nZQplXHUwMzAxdHJvaXQKZVx1MDMwMXR1ZGUKZXVwaG9yaWUKZVx1MDMwMXZhbHVlcgplXHUwMzAxdmFzaW9uCmVcdTAzMDF2ZW50YWlsCmVcdTAzMDF2aWRlbmNlCmVcdTAzMDF2aXRlcgplXHUwMzAxdm9sdXRpZgplXHUwMzAxdm9xdWVyCmV4YWN0CmV4YWdlXHUwMzAxcmVyCmV4YXVjZXIKZXhjZWxsZXIKZXhjaXRhbnQKZXhjbHVzaWYKZXhjdXNlCmV4ZVx1MDMwMWN1dGVyCmV4ZW1wbGUKZXhlcmNlcgpleGhhbGVyCmV4aG9ydGVyCmV4aWdlbmNlCmV4aWxlcgpleGlzdGVyCmV4b3RpcXVlCmV4cGVcdTAzMDFkaWVyCmV4cGxvcmVyCmV4cG9zZXIKZXhwcmltZXIKZXhxdWlzCmV4dGVuc2lmCmV4dHJhaXJlCmV4dWx0ZXIKZmFibGUKZmFidWxldXgKZmFjZXR0ZQpmYWNpbGUKZmFjdHVyZQpmYWlibGlyCmZhbGFpc2UKZmFtZXV4CmZhbWlsbGUKZmFyY2V1cgpmYXJmZWx1CmZhcmluZQpmYXJvdWNoZQpmYXNjaW5lcgpmYXRhbApmYXRpZ3VlCmZhdWNvbgpmYXV0aWYKZmF2ZXVyCmZhdm9yaQpmZVx1MDMwMWJyaWxlCmZlXHUwMzAxY29uZGVyCmZlXHUwMzAxZGVcdTAzMDFyZXIKZmVcdTAzMDFsaW4KZmVtbWUKZmVcdTAzMDFtdXIKZmVuZG9pcgpmZVx1MDMwMW9kYWwKZmVybWVyCmZlXHUwMzAxcm9jZQpmZXJ2ZXVyCmZlc3RpdmFsCmZldWlsbGUKZmV1dHJlCmZlXHUwMzAxdnJpZXIKZmlhc2NvCmZpY2VsZXIKZmljdGlmCmZpZGVcdTAzMDBsZQpmaWd1cmUKZmlsYXR1cmUKZmlsZXRhZ2UKZmlsaWVcdTAzMDByZQpmaWxsZXVsCmZpbG1lcgpmaWxvdQpmaWx0cmVyCmZpbmFuY2VyCmZpbmlyCmZpb2xlCmZpcm1lCmZpc3N1cmUKZml4ZXIKZmxhaXJlcgpmbGFtbWUKZmxhc3F1ZQpmbGF0dGV1cgpmbGVcdTAzMDFhdQpmbGVcdTAzMDBjaGUKZmxldXIKZmxleGlvbgpmbG9jb24KZmxvcmUKZmx1Y3R1ZXIKZmx1aWRlCmZsdXZpYWwKZm9saWUKZm9uZGVyaWUKZm9uZ2libGUKZm9udGFpbmUKZm9yY2VyCmZvcmdlcm9uCmZvcm11bGVyCmZvcnR1bmUKZm9zc2lsZQpmb3VkcmUKZm91Z2VcdTAzMDByZQpmb3VpbGxlcgpmb3VsdXJlCmZvdXJtaQpmcmFnaWxlCmZyYWlzZQpmcmFuY2hpcgpmcmFwcGVyCmZyYXlldXIKZnJlXHUwMzAxZ2F0ZQpmcmVpbmVyCmZyZWxvbgpmcmVcdTAzMDFtaXIKZnJlXHUwMzAxbmVcdTAzMDFzaWUKZnJlXHUwMzAwcmUKZnJpYWJsZQpmcmljdGlvbgpmcmlzc29uCmZyaXZvbGUKZnJvaWQKZnJvbWFnZQpmcm9udGFsCmZyb3R0ZXIKZnJ1aXQKZnVnaXRpZgpmdWl0ZQpmdXJldXIKZnVyaWV1eApmdXJ0aWYKZnVzaW9uCmZ1dHVyCmdhZ25lcgpnYWxheGllCmdhbGVyaWUKZ2FtYmFkZXIKZ2FyYW50aXIKZ2FyZGllbgpnYXJuaXIKZ2FycmlndWUKZ2F6ZWxsZQpnYXpvbgpnZVx1MDMwMWFudApnZVx1MDMwMWxhdGluZQpnZVx1MDMwMWx1bGUKZ2VuZGFybWUKZ2VcdTAzMDFuZVx1MDMwMXJhbApnZVx1MDMwMW5pZQpnZW5vdQpnZW50aWwKZ2VcdTAzMDFvbG9naWUKZ2VcdTAzMDFvbWVcdTAzMDB0cmUKZ2VcdTAzMDFyYW5pdW0KZ2VybWUKZ2VzdHVlbApnZXlzZXIKZ2liaWVyCmdpY2xlcgpnaXJhZmUKZ2l2cmUKZ2xhY2UKZ2xhaXZlCmdsaXNzZXIKZ2xvYmUKZ2xvaXJlCmdsb3JpZXV4CmdvbGZldXIKZ29tbWUKZ29uZmxlcgpnb3JnZQpnb3JpbGxlCmdvdWRyb24KZ291ZmZyZQpnb3Vsb3QKZ291cGlsbGUKZ291cm1hbmQKZ291dHRlCmdyYWR1ZWwKZ3JhZmZpdGkKZ3JhaW5lCmdyYW5kCmdyYXBwaW4KZ3JhdHVpdApncmF2aXIKZ3JlbmF0CmdyaWZmdXJlCmdyaWxsZXIKZ3JpbXBlcgpncm9nbmVyCmdyb25kZXIKZ3JvdHRlCmdyb3VwZQpncnVnZXIKZ3J1dGllcgpncnV5ZVx1MDMwMHJlCmd1ZVx1MDMwMXBhcmQKZ3VlcnJpZXIKZ3VpZGUKZ3VpbWF1dmUKZ3VpdGFyZQpndXN0YXRpZgpneW1uYXN0ZQpneXJvc3RhdApoYWJpdHVkZQpoYWNob2lyCmhhbHRlCmhhbWVhdQpoYW5nYXIKaGFubmV0b24KaGFyaWNvdApoYXJtb25pZQpoYXJwb24KaGFzYXJkCmhlXHUwMzAxbGl1bQpoZVx1MDMwMW1hdG9tZQpoZXJiZQpoZVx1MDMwMXJpc3NvbgpoZXJtaW5lCmhlXHUwMzAxcm9uCmhlXHUwMzAxc2l0ZXIKaGV1cmV1eApoaWJlcm5lcgpoaWJvdQpoaWxhcmFudApoaXN0b2lyZQpoaXZlcgpob21hcmQKaG9tbWFnZQpob21vZ2VcdTAzMDBuZQpob25uZXVyCmhvbm9yZXIKaG9udGV1eApob3JkZQpob3Jpem9uCmhvcmxvZ2UKaG9ybW9uZQpob3JyaWJsZQpob3VsZXV4CmhvdXNzZQpodWJsb3QKaHVpbGV1eApodW1haW4KaHVtYmxlCmh1bWlkZQpodW1vdXIKaHVybGVyCmh5ZHJvbWVsCmh5Z2llXHUwMzAwbmUKaHltbmUKaHlwbm9zZQppZHlsbGUKaWdub3JlcgppZ3VhbmUKaWxsaWNpdGUKaWxsdXNpb24KaW1hZ2UKaW1iaWJlcgppbWl0ZXIKaW1tZW5zZQppbW1vYmlsZQppbW11YWJsZQppbXBhY3QKaW1wZVx1MDMwMXJpYWwKaW1wbG9yZXIKaW1wb3NlcgppbXByaW1lcgppbXB1dGVyCmluY2FybmVyCmluY2VuZGllCmluY2lkZW50CmluY2xpbmVyCmluY29sb3JlCmluZGV4ZXIKaW5kaWNlCmluZHVjdGlmCmluZVx1MDMwMWRpdAppbmVwdGllCmluZXhhY3QKaW5maW5pCmluZmxpZ2VyCmluZm9ybWVyCmluZnVzaW9uCmluZ2VcdTAzMDFyZXIKaW5oYWxlcgppbmhpYmVyCmluamVjdGVyCmluanVyZQppbm5vY2VudAppbm9jdWxlcgppbm9uZGVyCmluc2NyaXJlCmluc2VjdGUKaW5zaWduZQppbnNvbGl0ZQppbnNwaXJlcgppbnN0aW5jdAppbnN1bHRlcgppbnRhY3QKaW50ZW5zZQppbnRpbWUKaW50cmlndWUKaW50dWl0aWYKaW51dGlsZQppbnZhc2lvbgppbnZlbnRlcgppbnZpdGVyCmludm9xdWVyCmlyb25pcXVlCmlycmFkaWVyCmlycmVcdTAzMDFlbAppcnJpdGVyCmlzb2xlcgppdm9pcmUKaXZyZXNzZQpqYWd1YXIKamFpbGxpcgpqYW1iZQpqYW52aWVyCmphcmRpbgpqYXVnZXIKamF1bmUKamF2ZWxvdApqZXRhYmxlCmpldG9uCmpldWRpCmpldW5lc3NlCmpvaW5kcmUKam9uY2hlcgpqb25nbGVyCmpvdWV1cgpqb3Vpc3NpZgpqb3VybmFsCmpvdmlhbApqb3lhdQpqb3lldXgKanViaWxlcgpqdWdlbWVudApqdW5pb3IKanVwb24KanVyaXN0ZQpqdXN0aWNlCmp1dGV1eApqdXZlXHUwMzAxbmlsZQprYXlhawpraW1vbm8Ka2lvc3F1ZQpsYWJlbApsYWJpYWwKbGFib3VyZXIKbGFjZVx1MDMwMXJlcgpsYWN0b3NlCmxhZ3VuZQpsYWluZQpsYWlzc2VyCmxhaXRpZXIKbGFtYmVhdQpsYW1lbGxlCmxhbXBlCmxhbmNldXIKbGFuZ2FnZQpsYW50ZXJuZQpsYXBpbgpsYXJnZXVyCmxhcm1lCmxhdXJpZXIKbGF2YWJvCmxhdm9pcgpsZWN0dXJlCmxlXHUwMzAxZ2FsCmxlXHUwMzAxZ2VyCmxlXHUwMzAxZ3VtZQpsZXNzaXZlCmxldHRyZQpsZXZpZXIKbGV4aXF1ZQpsZVx1MDMwMXphcmQKbGlhc3NlCmxpYmVcdTAzMDFyZXIKbGlicmUKbGljZW5jZQpsaWNvcm5lCmxpZVx1MDMwMGdlCmxpZVx1MDMwMHZyZQpsaWdhdHVyZQpsaWdvdGVyCmxpZ3VlCmxpbWVyCmxpbWl0ZQpsaW1vbmFkZQpsaW1waWRlCmxpbmVcdTAzMDFhaXJlCmxpbmdvdApsaW9uY2VhdQpsaXF1aWRlCmxpc2llXHUwMzAwcmUKbGlzdGVyCmxpdGhpdW0KbGl0aWdlCmxpdHRvcmFsCmxpdnJldXIKbG9naXF1ZQpsb2ludGFpbgpsb2lzaXIKbG9tYnJpYwpsb3RlcmllCmxvdWVyCmxvdXJkCmxvdXRyZQpsb3V2ZQpsb3lhbApsdWJpZQpsdWNpZGUKbHVjcmF0aWYKbHVldXIKbHVndWJyZQpsdWlzYW50Cmx1bWllXHUwMzAwcmUKbHVuYWlyZQpsdW5kaQpsdXJvbgpsdXR0ZXIKbHV4dWV1eAptYWNoaW5lCm1hZ2FzaW4KbWFnZW50YQptYWdpcXVlCm1haWdyZQptYWlsbG9uCm1haW50aWVuCm1haXJpZQptYWlzb24KbWFqb3JlcgptYWxheGVyCm1hbGVcdTAzMDFmaWNlCm1hbGhldXIKbWFsaWNlCm1hbGxldHRlCm1hbW1vdXRoCm1hbmRhdGVyCm1hbmlhYmxlCm1hbnF1YW50Cm1hbnRlYXUKbWFudWVsCm1hcmF0aG9uCm1hcmJyZQptYXJjaGFuZAptYXJkaQptYXJpdGltZQptYXJxdWV1cgptYXJyb24KbWFydGVsZXIKbWFzY290dGUKbWFzc2lmCm1hdGVcdTAzMDFyaWVsCm1hdGllXHUwMzAwcmUKbWF0cmFxdWUKbWF1ZGlyZQptYXVzc2FkZQptYXV2ZQptYXhpbWFsCm1lXHUwMzAxY2hhbnQKbWVcdTAzMDFjb25udQptZVx1MDMwMWRhaWxsZQptZVx1MDMwMWRlY2luCm1lXHUwMzAxZGl0ZXIKbWVcdTAzMDFkdXNlCm1laWxsZXVyCm1lXHUwMzAxbGFuZ2UKbWVcdTAzMDFsb2RpZQptZW1icmUKbWVcdTAzMDFtb2lyZQptZW5hY2VyCm1lbmVyCm1lbmhpcgptZW5zb25nZQptZW50b3IKbWVyY3JlZGkKbWVcdTAzMDFyaXRlCm1lcmxlCm1lc3NhZ2VyCm1lc3VyZQptZVx1MDMwMXRhbAptZVx1MDMwMXRlXHUwMzAxb3JlCm1lXHUwMzAxdGhvZGUKbWVcdTAzMDF0aWVyCm1ldWJsZQptaWF1bGVyCm1pY3JvYmUKbWlldHRlCm1pZ25vbgptaWdyZXIKbWlsaWV1Cm1pbGxpb24KbWltaXF1ZQptaW5jZQptaW5lXHUwMzAxcmFsCm1pbmltYWwKbWlub3JlcgptaW51dGUKbWlyYWNsZQptaXJvaXRlcgptaXNzaWxlCm1peHRlCm1vYmlsZQptb2Rlcm5lCm1vZWxsZXV4Cm1vbmRpYWwKbW9uaXRldXIKbW9ubmFpZQptb25vdG9uZQptb25zdHJlCm1vbnRhZ25lCm1vbnVtZW50Cm1vcXVldXIKbW9yY2VhdQptb3JzdXJlCm1vcnRpZXIKbW90ZXVyCm1vdGlmCm1vdWNoZQptb3VmbGUKbW91bGluCm1vdXNzb24KbW91dG9uCm1vdXZhbnQKbXVsdGlwbGUKbXVuaXRpb24KbXVyYWlsbGUKbXVyZVx1MDMwMG5lCm11cm11cmUKbXVzY2xlCm11c2VcdTAzMDF1bQptdXNpY2llbgptdXRhdGlvbgptdXRlcgptdXR1ZWwKbXlyaWFkZQpteXJ0aWxsZQpteXN0ZVx1MDMwMHJlCm15dGhpcXVlCm5hZ2V1cgpuYXBwZQpuYXJxdW9pcwpuYXJyZXIKbmF0YXRpb24KbmF0aW9uCm5hdHVyZQpuYXVmcmFnZQpuYXV0aXF1ZQpuYXZpcmUKbmVcdTAzMDFidWxldXgKbmVjdGFyCm5lXHUwMzAxZmFzdGUKbmVcdTAzMDFnYXRpb24KbmVcdTAzMDFnbGlnZXIKbmVcdTAzMDFnb2NpZXIKbmVpZ2UKbmVydmV1eApuZXR0b3llcgpuZXVyb25lCm5ldXRyb24KbmV2ZXUKbmljaGUKbmlja2VsCm5pdHJhdGUKbml2ZWF1Cm5vYmxlCm5vY2lmCm5vY3R1cm5lCm5vaXJjZXVyCm5vaXNldHRlCm5vbWFkZQpub21icmV1eApub21tZXIKbm9ybWF0aWYKbm90YWJsZQpub3RpZmllcgpub3RvaXJlCm5vdXJyaXIKbm91dmVhdQpub3ZhdGV1cgpub3ZlbWJyZQpub3ZpY2UKbnVhZ2UKbnVhbmNlcgpudWlyZQpudWlzaWJsZQpudW1lXHUwMzAxcm8KbnVwdGlhbApudXF1ZQpudXRyaXRpZgpvYmVcdTAzMDFpcgpvYmplY3RpZgpvYmxpZ2VyCm9ic2N1cgpvYnNlcnZlcgpvYnN0YWNsZQpvYnRlbmlyCm9idHVyZXIKb2NjYXNpb24Kb2NjdXBlcgpvY2VcdTAzMDFhbgpvY3RvYnJlCm9jdHJveWVyCm9jdHVwbGVyCm9jdWxhaXJlCm9kZXVyCm9kb3JhbnQKb2ZmZW5zZXIKb2ZmaWNpZXIKb2ZmcmlyCm9naXZlCm9pc2VhdQpvaXNpbGxvbgpvbGZhY3RpZgpvbGl2aWVyCm9tYnJhZ2UKb21ldHRyZQpvbmN0dWV1eApvbmR1bGVyCm9uZVx1MDMwMXJldXgKb25pcmlxdWUKb3BhbGUKb3BhcXVlCm9wZVx1MDMwMXJlcgpvcGluaW9uCm9wcG9ydHVuCm9wcHJpbWVyCm9wdGVyCm9wdGlxdWUKb3JhZ2V1eApvcmFuZ2UKb3JiaXRlCm9yZG9ubmVyCm9yZWlsbGUKb3JnYW5lCm9yZ3VlaWwKb3JpZmljZQpvcm5lbWVudApvcnF1ZQpvcnRpZQpvc2NpbGxlcgpvc21vc2UKb3NzYXR1cmUKb3RhcmllCm91cmFnYW4Kb3Vyc29uCm91dGlsCm91dHJhZ2VyCm91dnJhZ2UKb3ZhdGlvbgpveHlkZQpveHlnZVx1MDMwMG5lCm96b25lCnBhaXNpYmxlCnBhbGFjZQpwYWxtYXJlXHUwMzAwcwpwYWxvdXJkZQpwYWxwZXIKcGFuYWNoZQpwYW5kYQpwYW5nb2xpbgpwYW5pcXVlcgpwYW5uZWF1CnBhbm9yYW1hCnBhbnRhbG9uCnBhcGF5ZQpwYXBpZXIKcGFwb3RlcgpwYXB5cnVzCnBhcmFkb3hlCnBhcmNlbGxlCnBhcmVzc2UKcGFyZnVtZXIKcGFybGVyCnBhcm9sZQpwYXJyYWluCnBhcnNlbWVyCnBhcnRhZ2VyCnBhcnVyZQpwYXJ2ZW5pcgpwYXNzaW9uCnBhc3RlXHUwMzAwcXVlCnBhdGVybmVsCnBhdGllbmNlCnBhdHJvbgpwYXZpbGxvbgpwYXZvaXNlcgpwYXllcgpwYXlzYWdlCnBlaWduZQpwZWludHJlCnBlbGFnZQpwZVx1MDMwMWxpY2FuCnBlbGxlCnBlbG91c2UKcGVsdWNoZQpwZW5kdWxlCnBlXHUwMzAxbmVcdTAzMDF0cmVyCnBlXHUwMzAxbmlibGUKcGVuc2lmCnBlXHUwMzAxbnVyaWUKcGVcdTAzMDFwaXRlCnBlXHUwMzAxcGx1bQpwZXJkcml4CnBlcmZvcmVyCnBlXHUwMzAxcmlvZGUKcGVybXV0ZXIKcGVycGxleGUKcGVyc2lsCnBlcnRlCnBlc2VyCnBlXHUwMzAxdGFsZQpwZXRpdApwZVx1MDMwMXRyaXIKcGV1cGxlCnBoYXJhb24KcGhvYmllCnBob3F1ZQpwaG90b24KcGhyYXNlCnBoeXNpcXVlCnBpYW5vCnBpY3R1cmFsCnBpZVx1MDMwMGNlCnBpZXJyZQpwaWV1dnJlCnBpbG90ZQpwaW5jZWF1CnBpcGV0dGUKcGlxdWVyCnBpcm9ndWUKcGlzY2luZQpwaXN0b24KcGl2b3RlcgpwaXhlbApwaXp6YQpwbGFjYXJkCnBsYWZvbmQKcGxhaXNpcgpwbGFuZXIKcGxhcXVlCnBsYXN0cm9uCnBsYXRlYXUKcGxldXJlcgpwbGV4dXMKcGxpYWdlCnBsb21iCnBsb25nZXIKcGx1aWUKcGx1bWFnZQpwb2NoZXR0ZQpwb2VcdTAzMDFzaWUKcG9lXHUwMzAwdGUKcG9pbnRlCnBvaXJpZXIKcG9pc3Nvbgpwb2l2cmUKcG9sYWlyZQpwb2xpY2llcgpwb2xsZW4KcG9seWdvbmUKcG9tbWFkZQpwb21waWVyCnBvbmN0dWVsCnBvbmRlXHUwMzAxcmVyCnBvbmV5CnBvcnRpcXVlCnBvc2l0aW9uCnBvc3NlXHUwMzAxZGVyCnBvc3R1cmUKcG90YWdlcgpwb3RlYXUKcG90aW9uCnBvdWNlCnBvdWxhaW4KcG91bW9uCnBvdXJwcmUKcG91c3Npbgpwb3V2b2lyCnByYWlyaWUKcHJhdGlxdWUKcHJlXHUwMzAxY2lldXgKcHJlXHUwMzAxZGlyZQpwcmVcdTAzMDFmaXhlCnByZVx1MDMwMWx1ZGUKcHJlXHUwMzAxbm9tCnByZVx1MDMwMXNlbmNlCnByZVx1MDMwMXRleHRlCnByZVx1MDMwMXZvaXIKcHJpbWl0aWYKcHJpbmNlCnByaXNvbgpwcml2ZXIKcHJvYmxlXHUwMzAwbWUKcHJvY2VcdTAzMDFkZXIKcHJvZGlnZQpwcm9mb25kCnByb2dyZVx1MDMwMHMKcHJvaWUKcHJvamV0ZXIKcHJvbG9ndWUKcHJvbWVuZXIKcHJvcHJlCnByb3NwZVx1MDMwMHJlCnByb3RlXHUwMzAxZ2VyCnByb3Vlc3NlCnByb3ZlcmJlCnBydWRlbmNlCnBydW5lYXUKcHN5Y2hvc2UKcHVibGljCnB1Y2Vyb24KcHVpc2VyCnB1bHBlCnB1bHNhcgpwdW5haXNlCnB1bml0aWYKcHVwaXRyZQpwdXJpZmllcgpwdXp6bGUKcHlyYW1pZGUKcXVhc2FyCnF1ZXJlbGxlCnF1ZXN0aW9uCnF1aWVcdTAzMDF0dWRlCnF1aXR0ZXIKcXVvdGllbnQKcmFjaW5lCnJhY29udGVyCnJhZGlldXgKcmFnb25kaW4KcmFpZGV1cgpyYWlzaW4KcmFsZW50aXIKcmFsbG9uZ2UKcmFtYXNzZXIKcmFwaWRlCnJhc2FnZQpyYXRpc3NlcgpyYXZhZ2VyCnJhdmluCnJheW9ubmVyCnJlXHUwMzAxYWN0aWYKcmVcdTAzMDFhZ2lyCnJlXHUwMzAxYWxpc2VyCnJlXHUwMzAxYW5pbWVyCnJlY2V2b2lyCnJlXHUwMzAxY2l0ZXIKcmVcdTAzMDFjbGFtZXIKcmVcdTAzMDFjb2x0ZXIKcmVjcnV0ZXIKcmVjdWxlcgpyZWN5Y2xlcgpyZVx1MDMwMWRpZ2VyCnJlZG91dGVyCnJlZmFpcmUKcmVcdTAzMDFmbGV4ZQpyZVx1MDMwMWZvcm1lcgpyZWZyYWluCnJlZnVnZQpyZVx1MDMwMWdhbGllbgpyZVx1MDMwMWdpb24KcmVcdTAzMDFnbGFnZQpyZVx1MDMwMWd1bGllcgpyZVx1MDMwMWl0ZVx1MDMwMXJlcgpyZWpldGVyCnJlam91ZXIKcmVsYXRpZgpyZWxldmVyCnJlbGllZgpyZW1hcnF1ZQpyZW1lXHUwMzAwZGUKcmVtaXNlCnJlbW9udGVyCnJlbXBsaXIKcmVtdWVyCnJlbmFyZApyZW5mb3J0CnJlbmlmbGVyCnJlbm9uY2VyCnJlbnRyZXIKcmVudm9pCnJlcGxpZXIKcmVwb3J0ZXIKcmVwcmlzZQpyZXB0aWxlCnJlcXVpbgpyZVx1MDMwMXNlcnZlCnJlXHUwMzAxc2luZXV4CnJlXHUwMzAxc291ZHJlCnJlc3BlY3QKcmVzdGVyCnJlXHUwMzAxc3VsdGF0CnJlXHUwMzAxdGFibGlyCnJldGVuaXIKcmVcdTAzMDF0aWN1bGUKcmV0b21iZXIKcmV0cmFjZXIKcmVcdTAzMDF1bmlvbgpyZVx1MDMwMXVzc2lyCnJldmFuY2hlCnJldml2cmUKcmVcdTAzMDF2b2x0ZQpyZVx1MDMwMXZ1bHNpZgpyaWNoZXNzZQpyaWRlYXUKcmlldXIKcmlnaWRlCnJpZ29sZXIKcmluY2VyCnJpcG9zdGVyCnJpc2libGUKcmlzcXVlCnJpdHVlbApyaXZhbApyaXZpZVx1MDMwMHJlCnJvY2hldXgKcm9tYW5jZQpyb21wcmUKcm9uY2UKcm9uZGluCnJvc2VhdQpyb3NpZXIKcm90YXRpZgpyb3Rvcgpyb3R1bGUKcm91Z2UKcm91aWxsZQpyb3VsZWF1CnJvdXRpbmUKcm95YXVtZQpydWJhbgpydWJpcwpydWNoZQpydWVsbGUKcnVndWV1eApydWluZXIKcnVpc3NlYXUKcnVzZXIKcnVzdGlxdWUKcnl0aG1lCnNhYmxlcgpzYWJvdGVyCnNhYnJlCnNhY29jaGUKc2FmYXJpCnNhZ2Vzc2UKc2Fpc2lyCnNhbGFkZQpzYWxpdmUKc2Fsb24Kc2FsdWVyCnNhbWVkaQpzYW5jdGlvbgpzYW5nbGllcgpzYXJjYXNtZQpzYXJkaW5lCnNhdHVyZXIKc2F1Z3JlbnUKc2F1bW9uCnNhdXRlcgpzYXV2YWdlCnNhdmFudApzYXZvbm5lcgpzY2FscGVsCnNjYW5kYWxlCnNjZVx1MDMwMWxlXHUwMzAxcmF0CnNjZVx1MDMwMW5hcmlvCnNjZXB0cmUKc2NoZVx1MDMwMW1hCnNjaWVuY2UKc2NpbmRlcgpzY29yZQpzY3J1dGluCnNjdWxwdGVyCnNlXHUwMzAxYW5jZQpzZVx1MDMwMWNhYmxlCnNlXHUwMzAxY2hlcgpzZWNvdWVyCnNlXHUwMzAxY3JlXHUwMzAxdGVyCnNlXHUwMzAxZGF0aWYKc2VcdTAzMDFkdWlyZQpzZWlnbmV1cgpzZVx1MDMwMWpvdXIKc2VcdTAzMDFsZWN0aWYKc2VtYWluZQpzZW1ibGVyCnNlbWVuY2UKc2VcdTAzMDFtaW5hbApzZVx1MDMwMW5hdGV1cgpzZW5zaWJsZQpzZW50ZW5jZQpzZVx1MDMwMXBhcmVyCnNlXHUwMzAxcXVlbmNlCnNlcmVpbgpzZXJnZW50CnNlXHUwMzAxcmlldXgKc2VycnVyZQpzZVx1MDMwMXJ1bQpzZXJ2aWNlCnNlXHUwMzAxc2FtZQpzZVx1MDMwMXZpcgpzZXZyYWdlCnNleHR1cGxlCnNpZGVcdTAzMDFyYWwKc2llXHUwMzAwY2xlCnNpZVx1MDMwMWdlcgpzaWZmbGVyCnNpZ2xlCnNpZ25hbApzaWxlbmNlCnNpbGljaXVtCnNpbXBsZQpzaW5jZVx1MDMwMHJlCnNpbmlzdHJlCnNpcGhvbgpzaXJvcApzaXNtaXF1ZQpzaXR1ZXIKc2tpZXIKc29jaWFsCnNvY2xlCnNvZGl1bQpzb2lnbmV1eApzb2xkYXQKc29sZWlsCnNvbGl0dWRlCnNvbHVibGUKc29tYnJlCnNvbW1laWwKc29tbm9sZXIKc29uZGUKc29uZ2V1cgpzb25uZXR0ZQpzb25vcmUKc29yY2llcgpzb3J0aXIKc29zaWUKc290dGlzZQpzb3VjaWV1eApzb3VkdXJlCnNvdWZmbGUKc291bGV2ZXIKc291cGFwZQpzb3VyY2UKc291dGlyZXIKc291dmVuaXIKc3BhY2lldXgKc3BhdGlhbApzcGVcdTAzMDFjaWFsCnNwaGVcdTAzMDByZQpzcGlyYWwKc3RhYmxlCnN0YXRpb24Kc3Rlcm51bQpzdGltdWx1cwpzdGlwdWxlcgpzdHJpY3QKc3R1ZGlldXgKc3R1cGV1cgpzdHlsaXN0ZQpzdWJsaW1lCnN1YnN0cmF0CnN1YnRpbApzdWJ2ZW5pcgpzdWNjZVx1MDMwMHMKc3VjcmUKc3VmZml4ZQpzdWdnZVx1MDMwMXJlcgpzdWl2ZXVyCnN1bGZhdGUKc3VwZXJiZQpzdXBwbGllcgpzdXJmYWNlCnN1cmljYXRlCnN1cm1lbmVyCnN1cnByaXNlCnN1cnNhdXQKc3VydmllCnN1c3BlY3QKc3lsbGFiZQpzeW1ib2xlCnN5bWVcdTAzMDF0cmllCnN5bmFwc2UKc3ludGF4ZQpzeXN0ZVx1MDMwMG1lCnRhYmFjCnRhYmxpZXIKdGFjdGlsZQp0YWlsbGVyCnRhbGVudAp0YWxpc21hbgp0YWxvbm5lcgp0YW1ib3VyCnRhbWlzZXIKdGFuZ2libGUKdGFwaXMKdGFxdWluZXIKdGFyZGVyCnRhcmlmCnRhcnRpbmUKdGFzc2UKdGF0YW1pCnRhdG91YWdlCnRhdXBlCnRhdXJlYXUKdGF4ZXIKdGVcdTAzMDFtb2luCnRlbXBvcmVsCnRlbmFpbGxlCnRlbmRyZQp0ZW5ldXIKdGVuaXIKdGVuc2lvbgp0ZXJtaW5lcgp0ZXJuZQp0ZXJyaWJsZQp0ZVx1MDMwMXRpbmUKdGV4dGUKdGhlXHUwMzAwbWUKdGhlXHUwMzAxb3JpZQp0aGVcdTAzMDFyYXBpZQp0aG9yYXgKdGliaWEKdGllXHUwMzAwZGUKdGltaWRlCnRpcmVsaXJlCnRpcm9pcgp0aXNzdQp0aXRhbmUKdGl0cmUKdGl0dWJlcgp0b2JvZ2dhbgp0b2xlXHUwMzAxcmFudAp0b21hdGUKdG9uaXF1ZQp0b25uZWF1CnRvcG9ueW1lCnRvcmNoZQp0b3JkcmUKdG9ybmFkZQp0b3JwaWxsZQp0b3JyZW50CnRvcnNlCnRvcnR1ZQp0b3RlbQp0b3VjaGVyCnRvdXJuYWdlCnRvdXNzZXIKdG94aW5lCnRyYWN0aW9uCnRyYWZpYwp0cmFnaXF1ZQp0cmFoaXIKdHJhaW4KdHJhbmNoZXIKdHJhdmFpbAp0cmVcdTAzMDBmbGUKdHJlbXBlcgp0cmVcdTAzMDFzb3IKdHJldWlsCnRyaWFnZQp0cmlidW5hbAp0cmljb3Rlcgp0cmlsb2dpZQp0cmlvbXBoZQp0cmlwbGVyCnRyaXR1cmVyCnRyaXZpYWwKdHJvbWJvbmUKdHJvbmMKdHJvcGljYWwKdHJvdXBlYXUKdHVpbGUKdHVsaXBlCnR1bXVsdGUKdHVubmVsCnR1cmJpbmUKdHV0ZXVyCnR1dG95ZXIKdHV5YXUKdHltcGFuCnR5cGhvbgp0eXBpcXVlCnR5cmFuCnVidWVzcXVlCnVsdGltZQp1bHRyYXNvbgp1bmFuaW1lCnVuaWZpZXIKdW5pb24KdW5pcXVlCnVuaXRhaXJlCnVuaXZlcnMKdXJhbml1bQp1cmJhaW4KdXJ0aWNhbnQKdXNhZ2UKdXNpbmUKdXN1ZWwKdXN1cmUKdXRpbGUKdXRvcGllCnZhY2FybWUKdmFjY2luCnZhZ2Fib25kCnZhZ3VlCnZhaWxsYW50CnZhaW5jcmUKdmFpc3NlYXUKdmFsYWJsZQp2YWxpc2UKdmFsbG9uCnZhbHZlCnZhbXBpcmUKdmFuaWxsZQp2YXBldXIKdmFyaWVyCnZhc2V1eAp2YXNzYWwKdmFzdGUKdmVjdGV1cgp2ZWRldHRlCnZlXHUwMzAxZ2VcdTAzMDF0YWwKdmVcdTAzMDFoaWN1bGUKdmVpbmFyZAp2ZVx1MDMwMWxvY2UKdmVuZHJlZGkKdmVcdTAzMDFuZVx1MDMwMXJlcgp2ZW5nZXIKdmVuaW1ldXgKdmVudG91c2UKdmVyZHVyZQp2ZVx1MDMwMXJpbgp2ZXJuaXIKdmVycm91CnZlcnNlcgp2ZXJ0dQp2ZXN0b24KdmVcdTAzMDF0ZVx1MDMwMXJhbgp2ZVx1MDMwMXR1c3RlCnZleGFudAp2ZXhlcgp2aWFkdWMKdmlhbmRlCnZpY3RvaXJlCnZpZGFuZ2UKdmlkZVx1MDMwMW8KdmlnbmV0dGUKdmlndWV1cgp2aWxhaW4KdmlsbGFnZQp2aW5haWdyZQp2aW9sb24KdmlwZVx1MDMwMHJlCnZpcmVtZW50CnZpcnR1b3NlCnZpcnVzCnZpc2FnZQp2aXNldXIKdmlzaW9uCnZpc3F1ZXV4CnZpc3VlbAp2aXRhbAp2aXRlc3NlCnZpdGljb2xlCnZpdHJpbmUKdml2YWNlCnZpdmlwYXJlCnZvY2F0aW9uCnZvZ3Vlcgp2b2lsZQp2b2lzaW4Kdm9pdHVyZQp2b2xhaWxsZQp2b2xjYW4Kdm9sdGlnZXIKdm9sdW1lCnZvcmFjZQp2b3J0ZXgKdm90ZXIKdm91bG9pcgp2b3lhZ2UKdm95ZWxsZQp3YWdvbgp4ZVx1MDMwMW5vbgp5YWNodAp6ZVx1MDMwMGJyZQp6ZVx1MDMwMW5pdGgKemVzdGUKem9vbG9naWVgLnNwbGl0KCJcbiIpOwoKICAvLyBub2RlX21vZHVsZXMvQHNjdXJlL2JpcDM5L2VzbS93b3JkbGlzdHMvaXRhbGlhbi5qcwogIHZhciB3b3JkbGlzdDQgPSBgYWJhY28KYWJiYWdsaW8KYWJiaW5hdG8KYWJldGUKYWJpc3NvCmFib2xpcmUKYWJyYXNpdm8KYWJyb2dhdG8KYWNjYWRlcmUKYWNjZW5ubwphY2N1c2F0bwphY2V0b25lCmFjaGlsbGUKYWNpZG8KYWNxdWEKYWNyZQphY3JpbGljbwphY3JvYmF0YQphY3V0bwphZGFnaW8KYWRkZWJpdG8KYWRkb21lCmFkZWd1YXRvCmFkZXJpcmUKYWRpcGUKYWRvdHRhcmUKYWR1bGFyZQphZmZhYmlsZQphZmZldHRvCmFmZmlzc28KYWZmcmFudG8KYWZvcmlzbWEKYWZvc28KYWZyaWNhbm8KYWdhdmUKYWdlbnRlCmFnZXZvbGUKYWdnYW5jaW8KYWdpcmUKYWdpdGFyZQphZ29uaXNtbwphZ3JpY29sbwphZ3J1bWV0bwphZ3V6em8KYWxhYmFyZGEKYWxhdG8KYWxiYXRybwphbGJlcmF0bwphbGJvCmFsYnVtZQphbGNlCmFsY29saWNvCmFsZXR0b25lCmFsZmEKYWxnZWJyYQphbGlhbnRlCmFsaWJpCmFsaW1lbnRvCmFsbGFnYXRvCmFsbGVncm8KYWxsaWV2bwphbGxvZG9sYQphbGx1c2l2bwphbG1lbm8KYWxvZ2VubwphbHBhY2EKYWxwZXN0cmUKYWx0YWxlbmEKYWx0ZXJubwphbHRpY2NpbwphbHRyb3ZlCmFsdW5ubwphbHZlb2xvCmFsemFyZQphbWFsZ2FtYQphbWFuaXRhCmFtYXJlbmEKYW1iaXRvCmFtYnJhdG8KYW1lYmEKYW1lcmljYQphbWV0aXN0YQphbWljbwphbW1hc3NvCmFtbWVuZGEKYW1taXJhcmUKYW1tb25pdG8KYW1vcmUKYW1waW8KYW1wbGlhcmUKYW11bGV0bwphbmFjYXJkbwphbmFncmFmZQphbmFsaXN0YQphbmFyY2hpYQphbmF0cmEKYW5jYQphbmNlbGxhCmFuY29yYQphbmRhcmUKYW5kcmVhCmFuZWxsbwphbmdlbG8KYW5nb2xhcmUKYW5ndXN0bwphbmltYQphbm5lZ2FyZQphbm5pZGF0bwphbm5vCmFubnVuY2lvCmFub25pbW8KYW50aWNpcG8KYW56aQphcGF0aWNvCmFwZXJ0dXJhCmFwb2RlCmFwcGFyaXJlCmFwcGV0aXRvCmFwcG9nZ2lvCmFwcHJvZG8KYXBwdW50bwphcHJpbGUKYXJhYmljYQphcmFjaGlkZQphcmFnb3N0YQphcmFsZGljYQphcmFuY2lvCmFyYXR1cmEKYXJhenpvCmFyYml0cm8KYXJjaGl2aW8KYXJkaXRvCmFyZW5pbGUKYXJnZW50bwphcmdpbmUKYXJndXRvCmFyaWEKYXJtb25pYQphcm5lc2UKYXJyZWRhdG8KYXJyaW5nYQphcnJvc3RvCmFyc2VuaWNvCmFyc28KYXJ0ZWZpY2UKYXJ6aWxsbwphc2NpdXR0bwphc2NvbHRvCmFzZXBzaQphc2V0dGljbwphc2ZhbHRvCmFzaW5vCmFzb2xhCmFzcGlyYXRvCmFzcHJvCmFzc2FnZ2lvCmFzc2UKYXNzb2x1dG8KYXNzdXJkbwphc3RhCmFzdGVudXRvCmFzdGljZQphc3RyYXR0bwphdGF2aWNvCmF0ZWlzbW8KYXRvbWljbwphdG9ubwphdHRlc2EKYXR0aXZhcmUKYXR0b3JubwphdHRyaXRvCmF0dHVhbGUKYXVzaWxpbwphdXN0cmlhCmF1dGlzdGEKYXV0b25vbW8KYXV0dW5ubwphdmFuemF0bwphdmVyZQphdnZlbmlyZQphdnZpc28KYXZ2b2xnZXJlCmF6aW9uZQphem90bwphenppbW8KYXp6dXJybwpiYWJlbGUKYmFjY2FubwpiYWNpbm8KYmFjbwpiYWRlc3NhCmJhZGlsYXRhCmJhZ25hdG8KYmFpdGEKYmFsY29uZQpiYWxkbwpiYWxlbmEKYmFsbGF0YQpiYWx6YW5vCmJhbWJpbm8KYmFuZGlyZQpiYXJhb25kYQpiYXJiYXJvCmJhcmNhCmJhcml0b25vCmJhcmx1bWUKYmFyb2NjbwpiYXNpbGljbwpiYXNzbwpiYXRvc3RhCmJhdHR1dG8KYmF1bGUKYmF2YQpiYXZvc2EKYmVjY28KYmVmZmEKYmVsZ2lvCmJlbHZhCmJlbmRhCmJlbmV2b2xlCmJlbmlnbm8KYmVuemluYQpiZXJlCmJlcmxpbmEKYmV0YQpiaWJpdGEKYmljaQpiaWRvbmUKYmlmaWRvCmJpZ2EKYmlsYW5jaWEKYmltYm8KYmlub2NvbG8KYmlvbG9nbwpiaXBlZGUKYmlwb2xhcmUKYmlyYmFudGUKYmlycmEKYmlzY290dG8KYmlzZXN0bwpiaXNub25ubwpiaXNvbnRlCmJpc3R1cmkKYml6emFycm8KYmxhbmRvCmJsYXR0YQpib2xsaXRvCmJvbmlmaWNvCmJvcmRvCmJvc2NvCmJvdGFuaWNvCmJvdHRpbm8KYm96em9sbwpicmFjY2lvCmJyYWRpcG8KYnJhbWEKYnJhbmNhCmJyYXZ1cmEKYnJldGVsbGEKYnJldmV0dG8KYnJlenphCmJyaWdsaWEKYnJpbGxhbnRlCmJyaW5kYXJlCmJyb2Njb2xvCmJyb2RvCmJyb256aW5hCmJydWxsbwpicnVubwpidWJib25lCmJ1Y2EKYnVkaW5vCmJ1ZmZvbmUKYnVpbwpidWxibwpidW9ubwpidXJsb25lCmJ1cnJhc2NhCmJ1c3NvbGEKYnVzdGEKY2FkZXR0bwpjYWR1Y28KY2FsYW1hcm8KY2FsY29sbwpjYWxlc3NlCmNhbGlicm8KY2FsbW8KY2Fsb3JpYQpjYW1idXNhCmNhbWVyYXRhCmNhbWljaWEKY2FtbWlubwpjYW1vbGEKY2FtcGFsZQpjYW5hcGEKY2FuZGVsYQpjYW5lCmNhbmlubwpjYW5vdHRvCmNhbnRpbmEKY2FwYWNlCmNhcGVsbG8KY2FwaXRvbG8KY2Fwb2dpcm8KY2FwcGVybwpjYXByYQpjYXBzdWxhCmNhcmFwYWNlCmNhcmNhc3NhCmNhcmRvCmNhcmlzbWEKY2Fyb3ZhbmEKY2FycmV0dG8KY2FydG9saW5hCmNhc2FjY2lvCmNhc2NhdGEKY2FzZXJtYQpjYXNvCmNhc3NvbmUKY2FzdGVsbG8KY2FzdWFsZQpjYXRhc3RhCmNhdGVuYQpjYXRyYW1lCmNhdXRvCmNhdmlsbG8KY2VkaWJpbGUKY2VkcmF0YQpjZWZhbG8KY2VsZWJyZQpjZWxsdWxhcmUKY2VuYQpjZW5vbmUKY2VudGVzaW1vCmNlcmFtaWNhCmNlcmNhcmUKY2VydG8KY2VydW1lCmNlcnZlbGxvCmNlc29pYQpjZXNwbwpjZXRvCmNoZWxhCmNoaWFybwpjaGljY2EKY2hpZWRlcmUKY2hpbWVyYQpjaGluYQpjaGlydXJnbwpjaGl0YXJyYQpjaWFvCmNpY2xpc21vCmNpZnJhcmUKY2lnbm8KY2lsaW5kcm8KY2lvdHRvbG8KY2lyY2EKY2lycm9zaQpjaXRyaWNvCmNpdHRhZGlubwpjaXVmZm8KY2l2ZXR0YQpjaXZpbGUKY2xhc3NpY28KY2xpbmljYQpjbG9ybwpjb2Njbwpjb2RhcmRvCmNvZGljZQpjb2VyZW50ZQpjb2dub21lCmNvbGxhcmUKY29sbWF0bwpjb2xvcmUKY29scG9zbwpjb2x0aXZhdG8KY29semEKY29tYQpjb21ldGEKY29tbWFuZG8KY29tb2RvCmNvbXB1dGVyCmNvbXVuZQpjb25jaXNvCmNvbmR1cnJlCmNvbmZlcm1hCmNvbmdlbGFyZQpjb25pdWdlCmNvbm5lc3NvCmNvbm9zY2VyZQpjb25zdW1vCmNvbnRpbnVvCmNvbnZlZ25vCmNvcGVydG8KY29waW9uZQpjb3BwaWEKY29wcmljYXBvCmNvcmF6emEKY29yZGF0YQpjb3JpY2F0bwpjb3JuaWNlCmNvcm9sbGEKY29ycG8KY29ycmVkbwpjb3JzaWEKY29ydGVzZQpjb3NtaWNvCmNvc3RhbnRlCmNvdHR1cmEKY292YXRvCmNyYXRlcmUKY3JhdmF0dGEKY3JlYXRvCmNyZWRlcmUKY3JlbW9zbwpjcmVzY2l0YQpjcmV0YQpjcmljZXRvCmNyaW5hbGUKY3Jpc2kKY3JpdGljbwpjcm9jZQpjcm9uYWNhCmNyb3N0YXRhCmNydWNpYWxlCmNydXNjYQpjdWNpcmUKY3VjdWxvCmN1Z2lubwpjdWxsYXRvCmN1cG9sYQpjdXJhdG9yZQpjdXJzb3JlCmN1cnZvCmN1c2Npbm8KY3VzdG9kZQpkYWRvCmRhaW5vCmRhbG1hdGEKZGFtZXJpbm8KZGFuaWVsYQpkYW5ub3NvCmRhbnphcmUKZGF0YXRvCmRhdmFudGkKZGF2dmVybwpkZWJ1dHRvCmRlY2VubmlvCmRlY2lzbwpkZWNsaW5vCmRlY29sbG8KZGVjcmV0bwpkZWRpY2F0bwpkZWZpbml0bwpkZWZvcm1lCmRlZ25vCmRlbGVnYXJlCmRlbGZpbm8KZGVsaXJpbwpkZWx0YQpkZW1lbnphCmRlbm90YXRvCmRlbnRybwpkZXBvc2l0bwpkZXJhcGF0YQpkZXJpdmFyZQpkZXJvZ2EKZGVzY3JpdHRvCmRlc2VydG8KZGVzaWRlcmlvCmRlc3VtZXJlCmRldGVyc2l2bwpkZXZvdG8KZGlhbWV0cm8KZGljZW1icmUKZGllZHJvCmRpZmVzbwpkaWZmdXNvCmRpZ2VyaXJlCmRpZ2l0YWxlCmRpbHV2aW8KZGluYW1pY28KZGlubmFuemkKZGlwaW50bwpkaXBsb21hCmRpcG9sbwpkaXJhZGFyZQpkaXJlCmRpcm90dG8KZGlydXBvCmRpc2FnaW8KZGlzY3JldG8KZGlzZmFyZQpkaXNnZWxvCmRpc3Bvc3RvCmRpc3RhbnphCmRpc3VtYW5vCmRpdG8KZGl2YW5vCmRpdmVsdG8KZGl2aWRlcmUKZGl2b3JhdG8KZG9ibG9uZQpkb2NlbnRlCmRvZ2FuYWxlCmRvZ21hCmRvbGNlCmRvbWF0bwpkb21lbmljYQpkb21pbmFyZQpkb25kb2xvCmRvbm8KZG9ybWlyZQpkb3RlCmRvdHRvcmUKZG92dXRvCmRvenppbmEKZHJhZ28KZHJ1aWRvCmR1YmJpbwpkdWJpdGFyZQpkdWNhbGUKZHVuYQpkdW9tbwpkdXBsaWNlCmR1cmF0dXJvCmViYW5vCmVjY2Vzc28KZWNjbwplY2xpc3NpCmVjb25vbWlhCmVkZXJhCmVkaWNvbGEKZWRpbGUKZWRpdG9yaWEKZWR1Y2FyZQplZ2Vtb25pYQplZ2xpCmVnb2lzbW8KZWdyZWdpbwplbGFib3JhdG8KZWxhcmdpcmUKZWxlZ2FudGUKZWxlbmNhdG8KZWxldHRvCmVsZXZhcmUKZWxmaWNvCmVsaWNhCmVsbW8KZWxzYQplbHVzbwplbWFuYXRvCmVtYmxlbWEKZW1lc3NvCmVtaXJvCmVtb3Rpdm8KZW1vemlvbmUKZW1waXJpY28KZW11bG8KZW5kZW1pY28KZW5kdXJvCmVuZXJnaWEKZW5mYXNpCmVub3RlY2EKZW50cmFyZQplbnppbWEKZXBhdGl0ZQplcGlsb2dvCmVwaXNvZGlvCmVwb2NhbGUKZXBwdXJlCmVxdWF0b3JlCmVyYXJpbwplcmJhCmVyYm9zbwplcmVkZQplcmVtaXRhCmVyaWdlcmUKZXJtZXRpY28KZXJvZQplcm9zaXZvCmVycmFudGUKZXNhZ29ubwplc2FtZQplc2FuaW1lCmVzYXVkaXJlCmVzY2EKZXNlbXBpbwplc2VyY2l0bwplc2liaXRvCmVzaWdlbnRlCmVzaXN0ZXJlCmVzaXRvCmVzb2ZhZ28KZXNvcnRhdG8KZXNvc28KZXNwYW5zbwplc3ByZXNzbwplc3NlbnphCmVzc28KZXN0ZXNvCmVzdGltYXJlCmVzdG9uaWEKZXN0cm9zbwplc3VsdGFyZQpldGlsaWNvCmV0bmljbwpldHJ1c2NvCmV0dG8KZXVjbGlkZW8KZXVyb3BhCmV2YXNvCmV2aWRlbnphCmV2aXRhdG8KZXZvbHV0bwpldnZpdmEKZmFiYnJpY2EKZmFjY2VuZGEKZmFjaGlybwpmYWxjbwpmYW1pZ2xpYQpmYW5hbGUKZmFuZmFyYQpmYW5nbwpmYW50YXNtYQpmYXJlCmZhcmZhbGxhCmZhcmlub3NvCmZhcm1hY28KZmFzY2lhCmZhc3Rvc28KZmFzdWxsbwpmYXRpY2FyZQpmYXRvCmZhdm9sb3NvCmZlYmJyZQpmZWNvbGEKZmVkZQpmZWdhdG8KZmVscGEKZmVsdHJvCmZlbW1pbmEKZmVuZGVyZQpmZW5vbWVubwpmZXJtZW50bwpmZXJybwpmZXJ0aWxlCmZlc3N1cmEKZmVzdGl2bwpmZXR0YQpmZXVkbwpmaWFiYQpmaWR1Y2lhCmZpZmEKZmlndXJhdG8KZmlsbwpmaW5hbnphCmZpbmVzdHJhCmZpbmlyZQpmaW9yZQpmaXNjYWxlCmZpc2ljbwpmaXVtZQpmbGFjb25lCmZsYW1lbmNvCmZsZWJvCmZsZW1tYQpmbG9yaWRvCmZsdWVudGUKZmx1b3JvCmZvYmljbwpmb2NhY2NpYQpmb2Nvc28KZm9kZXJhdG8KZm9nbGlvCmZvbGF0YQpmb2xjbG9yZQpmb2xnb3JlCmZvbmRlbnRlCmZvbmV0aWNvCmZvbmlhCmZvbnRhbmEKZm9yYml0bwpmb3JjaGV0dGEKZm9yZXN0YQpmb3JtaWNhCmZvcm5haW8KZm9ybwpmb3J0ZXp6YQpmb3J6YXJlCmZvc2ZhdG8KZm9zc28KZnJhY2Fzc28KZnJhbmEKZnJhc3Npbm8KZnJhdGVsbG8KZnJlY2NldHRhCmZyZW5hdGEKZnJlc2NvCmZyaWdvCmZyb2xsaW5vCmZyb25kZQpmcnVnYWxlCmZydXR0YQpmdWNpbGF0YQpmdWNzaWEKZnVnZ2VudGUKZnVsbWluZQpmdWx2bwpmdW1hbnRlCmZ1bWV0dG8KZnVtb3NvCmZ1bmUKZnVuemlvbmUKZnVvY28KZnVyYm8KZnVyZ29uZQpmdXJvcmUKZnVzbwpmdXRpbGUKZ2FiYmlhbm8KZ2FmZmUKZ2FsYXRlbwpnYWxsaW5hCmdhbG9wcG8KZ2FtYmVybwpnYW1tYQpnYXJhbnppYQpnYXJibwpnYXJvZmFubwpnYXJ6b25lCmdhc2RvdHRvCmdhc29saW8KZ2FzdHJpY28KZ2F0dG8KZ2F1ZGlvCmdhemVibwpnYXp6ZWxsYQpnZWNvCmdlbGF0aW5hCmdlbHNvCmdlbWVsbG8KZ2VtbWF0bwpnZW5lCmdlbml0b3JlCmdlbm5haW8KZ2Vub3RpcG8KZ2VyZ28KZ2hlcGFyZG8KZ2hpYWNjaW8KZ2hpc2EKZ2lhbGxvCmdpbGRhCmdpbmVwcm8KZ2lvY2FyZQpnaW9pZWxsbwpnaW9ybm8KZ2lvdmUKZ2lyYXRvCmdpcm9uZQpnaXR0YXRhCmdpdWRpemlvCmdpdXJhdG8KZ2l1c3RvCmdsb2J1bG8KZ2x1dGluZQpnbm9tbwpnb2JiYQpnb2xmCmdvbWl0bwpnb21tb25lCmdvbmZpbwpnb25uYQpnb3Zlcm5vCmdyYWNpbGUKZ3JhZG8KZ3JhZmljbwpncmFtbW8KZ3JhbmRlCmdyYXR0YXJlCmdyYXZvc28KZ3JhemlhCmdyZWNhCmdyZWdnZQpncmlmb25lCmdyaWdpbwpncmluemEKZ3JvdHRhCmdydXBwbwpndWFkYWdubwpndWFpbwpndWFudG8KZ3VhcmRhcmUKZ3VmbwpndWlkYXJlCmliZXJuYXRvCmljb25hCmlkZW50aWNvCmlkaWxsaW8KaWRvbG8KaWRyYQppZHJpY28KaWRyb2dlbm8KaWdpZW5lCmlnbmFybwppZ25vcmF0bwppbGFyZQppbGxlc28KaWxsb2dpY28KaWxsdWRlcmUKaW1iYWxsbwppbWJldnV0bwppbWJvY2NvCmltYnV0bwppbW1hbmUKaW1tZXJzbwppbW1vbGF0bwppbXBhY2NvCmltcGV0bwppbXBpZWdvCmltcG9ydG8KaW1wcm9udGEKaW5hbGFyZQppbmFyY2FyZQppbmF0dGl2bwppbmNhbnRvCmluY2VuZGlvCmluY2hpbm8KaW5jaXNpdm8KaW5jbHVzbwppbmNvbnRybwppbmNyb2NpbwppbmN1Ym8KaW5kYWdpbmUKaW5kaWEKaW5kb2xlCmluZWRpdG8KaW5mYXR0aQppbmZpbGFyZQppbmZsaXR0bwppbmdhZ2dpbwppbmdlZ25vCmluZ2xlc2UKaW5nb3Jkbwppbmdyb3Nzbwppbm5lc2NvCmlub2RvcmUKaW5vbHRyYXJlCmlub25kYXRvCmluc2FubwppbnNldHRvCmluc2llbWUKaW5zb25uaWEKaW5zdWxpbmEKaW50YXNhdG8KaW50ZXJvCmludG9uYWNvCmludHVpdG8KaW51bWlkaXJlCmludmFsaWRvCmludmVjZQppbnZpdG8KaXBlcmJvbGUKaXBub3RpY28KaXBvdGVzaQppcHBpY2EKaXJpZGUKaXJsYW5kYQppcm9uaWNvCmlycmlnYXRvCmlycm9yYXJlCmlzb2xhdG8KaXNvdG9wbwppc3Rlcmljbwppc3RpdHV0bwppc3RyaWNlCml0YWxpYQppdGVyYXJlCmxhYmJybwpsYWJpcmludG8KbGFjY2EKbGFjZXJhdG8KbGFjcmltYQpsYWN1bmEKbGFkZG92ZQpsYWdvCmxhbXBvCmxhbmNldHRhCmxhbnRlcm5hCmxhcmRvc28KbGFyZ2EKbGFyaW5nZQpsYXN0cmEKbGF0ZW56YQpsYXRpbm8KbGF0dHVnYQpsYXZhZ25hCmxhdm9ybwpsZWdhbGUKbGVnZ2VybwpsZW1ibwpsZW50ZXp6YQpsZW56YQpsZW9uZQpsZXByZQpsZXNpdm8KbGVzc2F0bwpsZXN0bwpsZXR0ZXJhbGUKbGV2YQpsZXZpZ2F0bwpsaWJlcm8KbGlkbwpsaWV2aXRvCmxpbGxhCmxpbWF0dXJhCmxpbWl0YXJlCmxpbXBpZG8KbGluZWFyZQpsaW5ndWEKbGlxdWlkbwpsaXJhCmxpcmljYQpsaXNjYQpsaXRlCmxpdGlnaW8KbGl2cmVhCmxvY2FuZGEKbG9kZQpsb2dpY2EKbG9tYmFyZQpsb25kcmEKbG9uZ2V2bwpsb3F1YWNlCmxvcmVuem8KbG90bwpsb3R0ZXJpYQpsdWNlCmx1Y2lkYXRvCmx1bWFjYQpsdW1pbm9zbwpsdW5nbwpsdXBvCmx1cHBvbG8KbHVzaW5nYQpsdXNzbwpsdXR0bwptYWNhYnJvCm1hY2NoaW5hCm1hY2VybwptYWNpbmF0bwptYWRhbWEKbWFnaWNvCm1hZ2xpYQptYWduZXRlCm1hZ3JvCm1haW9saWNhCm1hbGFmZWRlCm1hbGdyYWRvCm1hbGludGVzbwptYWxzYW5vCm1hbHRvCm1hbHVtb3JlCm1hbmEKbWFuY2lhCm1hbmRvcmxhCm1hbmdpYXJlCm1hbmlmZXN0bwptYW5uYXJvCm1hbm92cmEKbWFuc2FyZGEKbWFudGlkZQptYW51YnJpbwptYXBwYQptYXJhdG9uYQptYXJjaXJlCm1hcmV0dGEKbWFybW8KbWFyc3VwaW8KbWFzY2hlcmEKbWFzc2FpYQptYXN0aW5vCm1hdGVyYXNzbwptYXRyaWNvbGEKbWF0dG9uZQptYXR1cm8KbWF6dXJjYQptZWFuZHJvCm1lY2NhbmljbwptZWNlbmF0ZQptZWRlc2ltbwptZWRpdGFyZQptZWdhCm1lbGFzc2EKbWVsaXMKbWVsb2RpYQptZW5pbmdlCm1lbm8KbWVuc29sYQptZXJjdXJpbwptZXJlbmRhCm1lcmxvCm1lc2NoaW5vCm1lc2UKbWVzc2VyZQptZXN0b2xvCm1ldGFsbG8KbWV0b2RvCm1ldHRlcmUKbWlhZ29sYXJlCm1pY2EKbWljZWxpbwptaWNoZWxlCm1pY3JvYm8KbWlkb2xsbwptaWVsZQptaWdsaW9yZQptaWxhbm8KbWlsaXRlCm1pbW9zYQptaW5lcmFsZQptaW5pCm1pbm9yZQptaXJpbm8KbWlydGlsbG8KbWlzY2VsYQptaXNzaXZhCm1pc3RvCm1pc3VyYXJlCm1pdGV6emEKbWl0aWdhcmUKbWl0cmEKbWl0dGVudGUKbW5lbW9uaWNvCm1vZGVsbG8KbW9kaWZpY2EKbW9kdWxvCm1vZ2Fubwptb2dpbwptb2xlCm1vbG9zc28KbW9uYXN0ZXJvCm1vbmNvCm1vbmRpbmEKbW9uZXRhcmlvCm1vbmlsZQptb25vdG9ubwptb25zb25lCm1vbnRhdG8KbW9udmlzbwptb3JhCm1vcmRlcmUKbW9yc2ljYXRvCm1vc3Rybwptb3RpdmF0bwptb3Rvc2VnYQptb3R0bwptb3ZlbnphCm1vdmltZW50bwptb3p6bwptdWNjYQptdWNvc2EKbXVmZmEKbXVnaGV0dG8KbXVnbmFpbwptdWxhdHRvCm11bGluZWxsbwptdWx0aXBsbwptdW1taWEKbXVudG8KbXVvdmVyZQptdXJhbGUKbXVzYQptdXNjb2xvCm11c2ljYQptdXRldm9sZQptdXRvCm5hYmFiYm8KbmFmdGEKbmFub21ldHJvCm5hcmNpc28KbmFyaWNlCm5hcnJhdG8KbmFzY2VyZQpuYXN0cmFyZQpuYXR1cmFsZQpuYXV0aWNhCm5hdmlnbGlvCm5lYnVsb3NhCm5lY3Jvc2kKbmVnYXRpdm8KbmVnb3ppbwpuZW1tZW5vCm5lb2ZpdGEKbmVyZXR0bwpuZXJ2bwpuZXNzdW5vCm5ldHR1bm8KbmV1dHJhbGUKbmV2ZQpuZXZyb3RpY28KbmljY2hpYQpuaW5mYQpuaXRpZG8Kbm9iaWxlCm5vY2l2bwpub2RvCm5vbWUKbm9taW5hCm5vcmRpY28Kbm9ybWFsZQpub3J2ZWdlc2UKbm9zdHJhbm8Kbm90YXJlCm5vdGl6aWEKbm90dHVybm8Kbm92ZWxsYQpudWNsZW8KbnVsbGEKbnVtZXJvCm51b3ZvCm51dHJpcmUKbnV2b2xhCm51emlhbGUKb2FzaQpvYmJlZGlyZQpvYmJsaWdvCm9iZWxpc2NvCm9ibGlvCm9ib2xvCm9ic29sZXRvCm9jY2FzaW9uZQpvY2NoaW8Kb2NjaWRlbnRlCm9jY29ycmVyZQpvY2N1bHRhcmUKb2NyYQpvY3VsYXRvCm9kaWVybm8Kb2RvcmFyZQpvZmZlcnRhCm9mZnJpcmUKb2ZmdXNjYXRvCm9nZ2V0dG8Kb2dnaQpvZ251bm8Kb2xhbmRlc2UKb2xmYXR0bwpvbGlhdG8Kb2xpdmEKb2xvZ3JhbW1hCm9sdHJlCm9tYWdnaW8Kb21iZWxpY28Kb21icmEKb21lZ2EKb21pc3Npb25lCm9uZG9zbwpvbmVyZQpvbmljZQpvbm5pdm9ybwpvbm9yZXZvbGUKb250YQpvcGVyYXRvCm9waW5pb25lCm9wcG9zdG8Kb3JhY29sbwpvcmFmbwpvcmRpbmUKb3JlY2NoaW5vCm9yZWZpY2UKb3JmYW5vCm9yZ2FuaWNvCm9yaWdpbmUKb3JpenpvbnRlCm9ybWEKb3JtZWdnaW8Kb3JuYXRpdm8Kb3JvbG9naW8Kb3JyZW5kbwpvcnJpYmlsZQpvcnRlbnNpYQpvcnRpY2EKb3J6YXRhCm9yem8Kb3NhcmUKb3NjdXJhcmUKb3Ntb3NpCm9zcGVkYWxlCm9zcGl0ZQpvc3NhCm9zc2lkYXJlCm9zdGFjb2xvCm9zdGUKb3RpdGUKb3RyZQpvdHRhZ29ubwpvdHRpbW8Kb3R0b2JyZQpvdmFsZQpvdmVzdApvdmlubwpvdmlwYXJvCm92b2NpdG8Kb3Z1bnF1ZQpvdnZpYXJlCm96aW8KcGFjY2hldHRvCnBhY2UKcGFjaWZpY28KcGFkZWxsYQpwYWRyb25lCnBhZXNlCnBhZ2EKcGFnaW5hCnBhbGF6emluYQpwYWxlc2FyZQpwYWxsaWRvCnBhbG8KcGFsdWRlCnBhbmRvcm8KcGFubmVsbG8KcGFvbG8KcGFvbmF6em8KcGFwcmljYQpwYXJhYm9sYQpwYXJjZWxsYQpwYXJlcmUKcGFyZ29sbwpwYXJpCnBhcmxhdG8KcGFyb2xhCnBhcnRpcmUKcGFydmVuemEKcGFyemlhbGUKcGFzc2l2bwpwYXN0aWNjYQpwYXRhY2NhCnBhdG9sb2dpYQpwYXR0dW1lCnBhdm9uZQpwZWNjYXRvCnBlZGFsYXJlCnBlZG9uYWxlCnBlZ2dpbwpwZWxvc28KcGVuYXJlCnBlbmRpY2UKcGVuaXNvbGEKcGVubnV0bwpwZW5vbWJyYQpwZW5zYXJlCnBlbnRvbGEKcGVwZQpwZXBpdGEKcGVyYmVuZQpwZXJjb3JzbwpwZXJkb25hdG8KcGVyZm9yYXJlCnBlcmdhbWVuYQpwZXJpb2RvCnBlcm1lc3NvCnBlcm5vCnBlcnBsZXNzbwpwZXJzdWFzbwpwZXJ0dWdpbwpwZXJ2YXNvCnBlc2F0b3JlCnBlc2lzdGEKcGVzbwpwZXN0aWZlcm8KcGV0YWxvCnBldHRpbmUKcGV0dWxhbnRlCnBlenpvCnBpYWNlcmUKcGlhbnRhCnBpYXR0aW5vCnBpY2Npbm8KcGljb3p6YQpwaWVnYQpwaWV0cmEKcGlmZmVybwpwaWdpYW1hCnBpZ29saW8KcGlncm8KcGlsYQpwaWxpZmVybwpwaWxsb2xhCnBpbG90YQpwaW1wYW50ZQpwaW5ldGEKcGlubmEKcGlub2xvCnBpb2dnaWEKcGlvbWJvCnBpcmFtaWRlCnBpcmV0aWNvCnBpcml0ZQpwaXJvbGlzaQpwaXRvbmUKcGl6emljbwpwbGFjZWJvCnBsYW5hcmUKcGxhc21hCnBsYXRhbm8KcGxlbmFyaW8KcG9jaGV6emEKcG9kZXJvc28KcG9kaXNtbwpwb2VzaWEKcG9nZ2lhcmUKcG9sZW50YQpwb2xpZ29ubwpwb2xsaWNlCnBvbG1vbml0ZQpwb2xwZXR0YQpwb2xzbwpwb2x0cm9uYQpwb2x2ZXJlCnBvbWljZQpwb21vZG9ybwpwb250ZQpwb3BvbG9zbwpwb3JmaWRvCnBvcm9zbwpwb3Jwb3JhCnBvcnJlCnBvcnRhdGEKcG9zYQpwb3NpdGl2bwpwb3NzZXNzbwpwb3N0dWxhdG8KcG90YXNzaW8KcG90ZXJlCnByYW56bwpwcmFzc2kKcHJhdGljYQpwcmVjbHVzbwpwcmVkaWNhCnByZWZpc3NvCnByZWdpYXRvCnByZWxpZXZvCnByZW1lcmUKcHJlbm90YXJlCnByZXBhcmF0bwpwcmVzZW56YQpwcmV0ZXN0bwpwcmV2YWxzbwpwcmltYQpwcmluY2lwZQpwcml2YXRvCnByb2JsZW1hCnByb2N1cmEKcHJvZHVycmUKcHJvZnVtbwpwcm9nZXR0bwpwcm9sdW5nYQpwcm9tZXNzYQpwcm9ub21lCnByb3Bvc3RhCnByb3JvZ2EKcHJvdGVzbwpwcm92YQpwcnVkZW50ZQpwcnVnbmEKcHJ1cml0bwpwc2ljaGUKcHViYmxpY28KcHVkaWNhCnB1Z2lsYXRvCnB1Z25vCnB1bGNlCnB1bGl0bwpwdWxzYW50ZQpwdW50YXJlCnB1cGF6em8KcHVwaWxsYQpwdXJvCnF1YWRybwpxdWFsY29zYQpxdWFzaQpxdWVyZWxhCnF1b3RhCnJhY2NvbHRvCnJhZGRvcHBpbwpyYWRpY2FsZQpyYWR1bmF0bwpyYWZmaWNhCnJhZ2F6em8KcmFnaW9uZQpyYWdubwpyYW1hcnJvCnJhbWluZ28KcmFtbwpyYW5kYWdpbwpyYW50b2xhcmUKcmFwYXRvCnJhcGluYQpyYXBwcmVzbwpyYXNhdHVyYQpyYXNjaGlhdG8KcmFzZW50ZQpyYXNzZWduYQpyYXN0cmVsbG8KcmF0YQpyYXZ2ZWR1dG8KcmVhbGUKcmVjZXBpcmUKcmVjaW50bwpyZWNsdXRhCnJlY29uZGl0bwpyZWN1cGVybwpyZWRkaXRvCnJlZGltZXJlCnJlZ2FsYXRvCnJlZ2lzdHJvCnJlZ29sYQpyZWdyZXNzbwpyZWxhemlvbmUKcmVtYXJlCnJlbW90bwpyZW5uYQpyZXBsaWNhCnJlcHJpbWVyZQpyZXB1dGFyZQpyZXNhCnJlc2lkZW50ZQpyZXNwb25zbwpyZXN0YXVybwpyZXRlCnJldGluYQpyZXRvcmljYQpyZXR0aWZpY2EKcmV2b2NhdG8Kcmlhc3N1bnRvCnJpYmFkaXJlCnJpYmVsbGUKcmlicmV6em8KcmljYXJpY2EKcmljY28KcmljZXZlcmUKcmljaWNsYXRvCnJpY29yZG8KcmljcmVkdXRvCnJpZGljb2xvCnJpZHVycmUKcmlmYXNhcmUKcmlmbGVzc28Kcmlmb3JtYQpyaWZ1Z2lvCnJpZ2FyZQpyaWdldHRhdG8KcmlnaGVsbG8KcmlsYXNzYXRvCnJpbGV2YXRvCnJpbWFuZXJlCnJpbWJhbHpvCnJpbWVkaW8Kcmltb3JjaGlvCnJpbmFzY2l0YQpyaW5jYXJvCnJpbmZvcnpvCnJpbm5vdm8Kcmlub21hdG8Kcmluc2F2aXRvCnJpbnRvY2NvCnJpbnVuY2lhCnJpbnZlbmlyZQpyaXBhcmF0bwpyaXBldHV0bwpyaXBpZW5vCnJpcG9ydGFyZQpyaXByZXNhCnJpcHVsaXJlCnJpc2F0YQpyaXNjaGlvCnJpc2VydmEKcmlzaWJpbGUKcmlzbwpyaXNwZXR0bwpyaXN0b3JvCnJpc3VsdGF0bwpyaXN2b2x0bwpyaXRhcmRvCnJpdGVnbm8Kcml0bWljbwpyaXRyb3ZvCnJpdW5pb25lCnJpdmEKcml2ZXJzbwpyaXZpbmNpdGEKcml2b2x0bwpyaXpvbWEKcm9iYQpyb2JvdGljbwpyb2J1c3RvCnJvY2NpYQpyb2NvCnJvZGFnZ2lvCnJvZGVyZQpyb2RpdG9yZQpyb2dpdG8Kcm9sbGlvCnJvbWFudGljbwpyb21wZXJlCnJvbnppbwpyb3NvbGFyZQpyb3Nwbwpyb3RhbnRlCnJvdG9uZG8Kcm90dWxhCnJvdmVzY2lvCnJ1Yml6em8KcnVicmljYQpydWdhCnJ1bGxpbm8KcnVtaW5lCnJ1bW9yb3NvCnJ1b2xvCnJ1cGUKcnVzc2FyZQpydXN0aWNvCnNhYmF0bwpzYWJiaWFyZQpzYWJvdGF0bwpzYWdvbWEKc2FsYXNzbwpzYWxkYXR1cmEKc2FsZ2VtbWEKc2FsaXZhcmUKc2FsbW9uZQpzYWxvbmUKc2FsdGFyZQpzYWx1dG8Kc2Fsdm8Kc2FwZXJlCnNhcGlkbwpzYXBvcml0bwpzYXJhY2VubwpzYXJjYXNtbwpzYXJ0bwpzYXNzb3NvCnNhdGVsbGl0ZQpzYXRpcmEKc2F0b2xsbwpzYXR1cm5vCnNhdmFuYQpzYXZpbwpzYXppYXRvCnNiYWRpZ2xpbwpzYmFsem8Kc2JhbmNhdG8Kc2JhcnJhCnNiYXR0ZXJlCnNiYXZhcmUKc2JlbmRhcmUKc2JpcmNpYXJlCnNibG9jY2F0bwpzYm9jY2lhdG8Kc2JyaW5hcmUKc2JydWZmb25lCnNidWZmYXJlCnNjYWJyb3NvCnNjYWRlbnphCnNjYWxhCnNjYW1iaWFyZQpzY2FuZGFsbwpzY2Fwb2xhCnNjYXJzbwpzY2F0ZW5hcmUKc2NhdmF0bwpzY2VsdG8Kc2NlbmljbwpzY2V0dHJvCnNjaGVkYQpzY2hpZW5hCnNjaWFycGEKc2NpZW56YQpzY2luZGVyZQpzY2lwcG8Kc2Npcm9wcG8Kc2Npdm9sbwpzY2xlcmFyZQpzY29kZWxsYQpzY29scGl0bwpzY29tcGFydG8Kc2NvbmZvcnRvCnNjb3ByaXJlCnNjb3J0YQpzY29zc29uZQpzY296emVzZQpzY3JpYmEKc2Nyb2xsYXJlCnNjcnV0aW5pbwpzY3VkZXJpYQpzY3VsdG9yZQpzY3VvbGEKc2N1cm8Kc2N1c2FyZQpzZGViaXRhcmUKc2RvZ2FuYXJlCnNlY2NhdHVyYQpzZWNvbmRvCnNlZGFubwpzZWdnaW9sYQpzZWduYWxhdG8Kc2VncmVnYXRvCnNlZ3VpdG8Kc2VsY2lhdG8Kc2VsZXR0aXZvCnNlbGxhCnNlbHZhZ2dpbwpzZW1hZm9ybwpzZW1icmFyZQpzZW1lCnNlbWluYXRvCnNlbXByZQpzZW5zbwpzZW50aXJlCnNlcG9sdG8Kc2VxdWVuemEKc2VyYXRhCnNlcmJhdG8Kc2VyZW5vCnNlcmlvCnNlcnBlbnRlCnNlcnJhZ2xpbwpzZXJ2aXJlCnNlc3RpbmEKc2V0b2xhCnNldHRpbWFuYQpzZmFjZWxvCnNmYWxkYXJlCnNmYW1hdG8Kc2Zhcnpvc28Kc2ZhdGljYXRvCnNmZXJhCnNmaWRhCnNmaWxhdG8Kc2ZpbmdlCnNmb2NhdG8Kc2ZvZGVyYXJlCnNmb2dvCnNmb2x0aXJlCnNmb3J6YXRvCnNmcmF0dG8Kc2ZydXR0YXRvCnNmdWdnaXRvCnNmdW1hcmUKc2Z1c28Kc2dhYmVsbG8Kc2dhcmJhdG8Kc2dvbmZpYXJlCnNnb3JiaW8Kc2dyYXNzYXRvCnNndWFyZG8Kc2liaWxvCnNpY2NvbWUKc2llcnJhCnNpZ2xhCnNpZ25vcmUKc2lsZW56aW8Kc2lsbGFiYQpzaW1ib2xvCnNpbXBhdGljbwpzaW11bGF0bwpzaW5mb25pYQpzaW5nb2xvCnNpbmlzdHJvCnNpbm8Kc2ludGVzaQpzaW51c29pZGUKc2lwYXJpbwpzaXNtYQpzaXN0b2xlCnNpdHVhdG8Kc2xpdHRhCnNsb2dhdHVyYQpzbG92ZW5vCnNtYXJyaXRvCnNtZW1vcmF0bwpzbWVudGl0bwpzbWVyYWxkbwpzbWlsem8Kc21vbnRhcmUKc21vdHRhdG8Kc211c3NhdG8Kc25lbGxpcmUKc25lcnZhdG8Kc25vZG8Kc29iYmFsem8Kc29icmlvCnNvY2NvcnNvCnNvY2lhbGUKc29kYWxlCnNvZmZpdHRvCnNvZ25vCnNvbGRhdG8Kc29sZW5uZQpzb2xpZG8Kc29sbGF6em8Kc29sbwpzb2x1YmlsZQpzb2x2ZW50ZQpzb21hdGljbwpzb21tYQpzb25kYQpzb25ldHRvCnNvbm5pZmVybwpzb3BpcmUKc29wcGVzbwpzb3ByYQpzb3JnZXJlCnNvcnBhc3NvCnNvcnJpc28Kc29yc28Kc29ydGVnZ2lvCnNvcnZvbGF0bwpzb3NwaXJvCnNvc3RhCnNvdHRpbGUKc3BhZGEKc3BhbGxhCnNwYXJnZXJlCnNwYXRvbGEKc3BhdmVudG8Kc3BhenpvbGEKc3BlY2llCnNwZWRpcmUKc3BlZ25lcmUKc3BlbGF0dXJhCnNwZXJhbnphCnNwZXNzb3JlCnNwZXR0cmFsZQpzcGV6emF0bwpzcGlhCnNwaWdvbG9zbwpzcGlsbGF0bwpzcGlub3NvCnNwaXJhbGUKc3BsZW5kaWRvCnNwb3J0aXZvCnNwb3NvCnNwcmFuZ2EKc3ByZWNhcmUKc3Byb25hdG8Kc3BydXp6bwpzcHVudGlubwpzcXVpbGxvCnNyYWRpY2FyZQpzcm90b2xhdG8Kc3RhYmlsZQpzdGFjY28Kc3RhZmZhCnN0YWduYXJlCnN0YW1wYXRvCnN0YW50aW8Kc3Rhcm51dG8Kc3Rhc2VyYQpzdGF0dXRvCnN0ZWxvCnN0ZXBwYQpzdGVyem8Kc3RpbGV0dG8Kc3RpbWEKc3RpcnBlCnN0aXZhbGUKc3Rpenpvc28Kc3RvbmF0bwpzdG9yaWNvCnN0cmFwcG8Kc3RyZWdhdG8Kc3RyaWR1bG8Kc3Ryb3p6YXJlCnN0cnV0dG8Kc3R1Y2NhcmUKc3R1Zm8Kc3R1cGVuZG8Kc3ViZW50cm8Kc3VjY29zbwpzdWRvcmUKc3VnZ2VyaXRvCnN1Z28Kc3VsdGFubwpzdW9uYXJlCnN1cGVyYm8Kc3VwcG9ydG8Kc3VyZ2VsYXRvCnN1cnJvZ2F0bwpzdXNzdXJybwpzdXR1cmEKc3ZhZ2FyZQpzdmVkZXNlCnN2ZWdsaW8Kc3ZlbGFyZQpzdmVudXRvCnN2ZXppYQpzdmlsdXBwbwpzdmlzdGEKc3ZpenplcmEKc3ZvbHRhCnN2dW90YXJlCnRhYmFjY28KdGFidWxhdG8KdGFjY2lhcmUKdGFjaXR1cm5vCnRhbGUKdGFsaXNtYW5vCnRhbXBvbmUKdGFubmlubwp0YXJhCnRhcmRpdm8KdGFyZ2F0bwp0YXJpZmZhCnRhcnBhcmUKdGFydGFydWdhCnRhc3RvCnRhdHRpY28KdGF2ZXJuYQp0YXZvbGF0YQp0YXp6YQp0ZWNhCnRlY25pY28KdGVsZWZvbm8KdGVtZXJhcmlvCnRlbXBvCnRlbXV0bwp0ZW5kb25lCnRlbmVybwp0ZW5zaW9uZQp0ZW50YWNvbG8KdGVvcmVtYQp0ZXJtZQp0ZXJyYXp6bwp0ZXJ6ZXR0bwp0ZXNpCnRlc3NlcmF0bwp0ZXN0YXRvCnRldHJvCnRldHRvaWEKdGlmYXJlCnRpZ2VsbGEKdGltYnJvCnRpbnRvCnRpcGljbwp0aXBvZ3JhZm8KdGlyYWdnaW8KdGlybwp0aXRhbmlvCnRpdG9sbwp0aXR1YmFudGUKdGl6aW8KdGl6em9uZQp0b2NjYXJlCnRvbGxlcmFyZQp0b2x0bwp0b21ib2xhCnRvbW8KdG9uZm8KdG9uc2lsbGEKdG9wYXppbwp0b3BvbG9naWEKdG9wcGEKdG9yYmEKdG9ybmFyZQp0b3Jyb25lCnRvcnRvcmEKdG9zY2Fubwp0b3NzaXJlCnRvc3RhdHVyYQp0b3Rhbm8KdHJhYm9jY28KdHJhY2hlYQp0cmFmaWxhCnRyYWdlZGlhCnRyYWxjaW8KdHJhbW9udG8KdHJhbnNpdG8KdHJhcGFubwp0cmFycmUKdHJhc2xvY28KdHJhdHRhdG8KdHJhdmUKdHJlY2NpYQp0cmVtb2xpbwp0cmVzcG9sbwp0cmlidXRvCnRyaWNoZWNvCnRyaWZvZ2xpbwp0cmlsbG8KdHJpbmNlYQp0cmlvCnRyaXN0ZXp6YQp0cml0dXJhdG8KdHJpdmVsbGEKdHJvbWJhCnRyb25vCnRyb3Bwbwp0cm90dG9sYQp0cm92YXJlCnRydWNjYXRvCnR1YmF0dXJhCnR1ZmZhdG8KdHVsaXBhbm8KdHVtdWx0bwp0dW5pc2lhCnR1cmJhcmUKdHVyY2hpbm8KdHV0YQp0dXRlbGEKdWJpY2F0bwp1Y2NlbGxvCnVjY2lzb3JlCnVkaXJlCnVkaXRpdm8KdWZmYQp1ZmZpY2lvCnVndWFsZQp1bGlzc2UKdWx0aW1hdG8KdW1hbm8KdW1pbGUKdW1vcmlzbW8KdW5jaW5ldHRvCnVuZ2VyZQp1bmdoZXJlc2UKdW5pY29ybm8KdW5pZmljYXRvCnVuaXNvbm8KdW5pdGFyaW8KdW50ZQp1b3ZvCnVwdXBhCnVyYWdhbm8KdXJnZW56YQp1cmxvCnVzYW56YQp1c2F0bwp1c2NpdG8KdXNpZ25vbG8KdXN1cmFpbwp1dGVuc2lsZQp1dGlsaXp6bwp1dG9waWEKdmFjYW50ZQp2YWNjaW5hdG8KdmFnYWJvbmRvCnZhZ2xpYXRvCnZhbGFuZ2EKdmFsZ28KdmFsaWNvCnZhbGxldHRhCnZhbG9yb3NvCnZhbHV0YXJlCnZhbHZvbGEKdmFtcGF0YQp2YW5nYXJlCnZhbml0b3NvCnZhbm8KdmFudGFnZ2lvCnZhbnZlcmEKdmFwb3JlCnZhcmFubwp2YXJjYXRvCnZhcmlhbnRlCnZhc2NhCnZlZGV0dGEKdmVkb3ZhCnZlZHV0bwp2ZWdldGFsZQp2ZWljb2xvCnZlbGNybwp2ZWxpbmEKdmVsbHV0bwp2ZWxvY2UKdmVuYXRvCnZlbmRlbW1pYQp2ZW50bwp2ZXJhY2UKdmVyYmFsZQp2ZXJnb2duYQp2ZXJpZmljYQp2ZXJvCnZlcnJ1Y2EKdmVydGljYWxlCnZlc2NpY2EKdmVzc2lsbG8KdmVzdGFsZQp2ZXRlcmFubwp2ZXRyaW5hCnZldHVzdG8KdmlhbmRhbnRlCnZpYnJhbnRlCnZpY2VuZGEKdmljaGluZ28KdmljaW5hbnphCnZpZGltYXJlCnZpZ2lsaWEKdmlnbmV0bwp2aWdvcmUKdmlsZQp2aWxsYW5vCnZpbWluaQp2aW5jaXRvcmUKdmlvbGEKdmlwZXJhCnZpcmdvbGEKdmlyb2xvZ28KdmlydWxlbnRvCnZpc2Nvc28KdmlzaW9uZQp2aXNwbwp2aXNzdXRvCnZpc3VyYQp2aXRhCnZpdGVsbG8Kdml0dGltYQp2aXZhbmRhCnZpdmlkbwp2aXppYXJlCnZvY2UKdm9nYQp2b2xhdGlsZQp2b2xlcmUKdm9scGUKdm9yYWdpbmUKdnVsY2Fubwp6YW1wb2duYQp6YW5uYQp6YXBwYXRvCnphdHRlcmEKemF2b3JyYQp6ZWZpcm8KemVsYW50ZQp6ZWxvCnplbnplcm8KemVyYmlubwp6aWJldHRvCnppbmNvCnppcmNvbmUKeml0dG8Kem9sbGEKem90aWNvCnp1Y2NoZXJvCnp1Zm9sbwp6dWx1Cnp1cHBhYC5zcGxpdCgiXG4iKTsKCiAgLy8gbm9kZV9tb2R1bGVzL0BzY3VyZS9iaXAzOS9lc20vd29yZGxpc3RzL2phcGFuZXNlLmpzCiAgdmFyIHdvcmRsaXN0NSA9IGBcdTMwNDJcdTMwNDRcdTMwNTNcdTMwNEZcdTMwNTdcdTMwOTMKXHUzMDQyXHUzMDQ0XHUzMDU1XHUzMDY0Clx1MzA0Mlx1MzA0NFx1MzA1Rlx1MzA5OQpcdTMwNDJcdTMwNEFcdTMwNURcdTMwOTlcdTMwODkKXHUzMDQyXHUzMDRCXHUzMDYxXHUzMDgzXHUzMDkzClx1MzA0Mlx1MzA0RFx1MzA4QgpcdTMwNDJcdTMwNTFcdTMwNEJcdTMwOTlcdTMwNUYKXHUzMDQyXHUzMDUxXHUzMDhCClx1MzA0Mlx1MzA1M1x1MzA0Qlx1MzA5OVx1MzA4Q1x1MzA4QgpcdTMwNDJcdTMwNTVcdTMwNDQKXHUzMDQyXHUzMDU1XHUzMDcyClx1MzA0Mlx1MzA1N1x1MzA0Mlx1MzA2OApcdTMwNDJcdTMwNTdcdTMwOTlcdTMwOEZcdTMwNDYKXHUzMDQyXHUzMDU5XHUzMDk5XHUzMDRCXHUzMDhCClx1MzA0Mlx1MzA1OVx1MzA5OVx1MzA0RApcdTMwNDJcdTMwNURcdTMwNzVcdTMwOTkKXHUzMDQyXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA0Mlx1MzA1Rlx1MzA1Rlx1MzA4MVx1MzA4QgpcdTMwNDJcdTMwNUZcdTMwOEFcdTMwN0VcdTMwNDgKXHUzMDQyXHUzMDVGXHUzMDhCClx1MzA0Mlx1MzA2NFx1MzA0NApcdTMwNDJcdTMwNjRcdTMwNEJcdTMwNDYKXHUzMDQyXHUzMDYzXHUzMDU3XHUzMDg1XHUzMDRGClx1MzA0Mlx1MzA2NFx1MzA3RVx1MzA4QQpcdTMwNDJcdTMwNjRcdTMwODFcdTMwOEIKXHUzMDQyXHUzMDY2XHUzMDZBClx1MzA0Mlx1MzA2Nlx1MzA2Rlx1MzA3RVx1MzA4QgpcdTMwNDJcdTMwNzJcdTMwOEIKXHUzMDQyXHUzMDc1XHUzMDk5XHUzMDg5Clx1MzA0Mlx1MzA3NVx1MzA5OVx1MzA4QgpcdTMwNDJcdTMwNzVcdTMwOENcdTMwOEIKXHUzMDQyXHUzMDdFXHUzMDQ0Clx1MzA0Mlx1MzA3RVx1MzA2OFx1MzA5OQpcdTMwNDJcdTMwN0VcdTMwODRcdTMwNEJcdTMwNTkKXHUzMDQyXHUzMDdFXHUzMDhBClx1MzA0Mlx1MzA3Rlx1MzA4Mlx1MzA2RQpcdTMwNDJcdTMwODFcdTMwOEFcdTMwNEIKXHUzMDQyXHUzMDg0XHUzMDdFXHUzMDhCClx1MzA0Mlx1MzA4Nlx1MzA4MApcdTMwNDJcdTMwODlcdTMwNDRcdTMwNEZcdTMwOTlcdTMwN0UKXHUzMDQyXHUzMDg5XHUzMDU3Clx1MzA0Mlx1MzA4OVx1MzA1OVx1MzA1N1x1MzA5OQpcdTMwNDJcdTMwODlcdTMwNUZcdTMwODFcdTMwOEIKXHUzMDQyXHUzMDg5XHUzMDg2XHUzMDhCClx1MzA0Mlx1MzA4OVx1MzA4Rlx1MzA1OQpcdTMwNDJcdTMwOEFcdTMwNEJcdTMwOTlcdTMwNjhcdTMwNDYKXHUzMDQyXHUzMDhGXHUzMDVCXHUzMDhCClx1MzA0Mlx1MzA4Rlx1MzA2Nlx1MzA4QgpcdTMwNDJcdTMwOTNcdTMwNDQKXHUzMDQyXHUzMDkzXHUzMDRCXHUzMDk5XHUzMDQ0Clx1MzA0Mlx1MzA5M1x1MzA1MwpcdTMwNDJcdTMwOTNcdTMwNUJcdTMwOTlcdTMwOTMKXHUzMDQyXHUzMDkzXHUzMDY2XHUzMDQ0Clx1MzA0Mlx1MzA5M1x1MzA2QVx1MzA0NApcdTMwNDJcdTMwOTNcdTMwN0VcdTMwOEEKXHUzMDQ0XHUzMDQ0XHUzMDVGXHUzMDk5XHUzMDU5Clx1MzA0NFx1MzA0QVx1MzA5MwpcdTMwNDRcdTMwNEJcdTMwOTlcdTMwNDQKXHUzMDQ0XHUzMDRCXHUzMDk5XHUzMDRGClx1MzA0NFx1MzA0RFx1MzA0QVx1MzA0NApcdTMwNDRcdTMwNERcdTMwNkFcdTMwOEEKXHUzMDQ0XHUzMDREXHUzMDgyXHUzMDZFClx1MzA0NFx1MzA0RFx1MzA4QgpcdTMwNDRcdTMwNEZcdTMwNTdcdTMwOTkKXHUzMDQ0XHUzMDRGXHUzMDc1XHUzMDk5XHUzMDkzClx1MzA0NFx1MzA1MVx1MzA2Rlx1MzA5OVx1MzA2QQpcdTMwNDRcdTMwNTFcdTMwOTMKXHUzMDQ0XHUzMDUzXHUzMDQ2Clx1MzA0NFx1MzA1M1x1MzA0RgpcdTMwNDRcdTMwNTNcdTMwNjQKXHUzMDQ0XHUzMDU1XHUzMDdFXHUzMDU3XHUzMDQ0Clx1MzA0NFx1MzA1NVx1MzA5MwpcdTMwNDRcdTMwNTdcdTMwNEQKXHUzMDQ0XHUzMDU3XHUzMDk5XHUzMDg1XHUzMDQ2Clx1MzA0NFx1MzA1N1x1MzA5OVx1MzA4N1x1MzA0NgpcdTMwNDRcdTMwNTdcdTMwOTlcdTMwOEZcdTMwOEIKXHUzMDQ0XHUzMDU5XHUzMDk5XHUzMDdGClx1MzA0NFx1MzA1OVx1MzA5OVx1MzA4QwpcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDQ0XHUzMDVCXHUzMDQ4XHUzMDcyXHUzMDk5Clx1MzA0NFx1MzA1Qlx1MzA0Qlx1MzA0NApcdTMwNDRcdTMwNUJcdTMwNEQKXHUzMDQ0XHUzMDVCXHUzMDk5XHUzMDkzClx1MzA0NFx1MzA1RFx1MzA0Nlx1MzA4RFx1MzA0NgpcdTMwNDRcdTMwNURcdTMwNEJcdTMwOTlcdTMwNTdcdTMwNDQKXHUzMDQ0XHUzMDVGXHUzMDk5XHUzMDQ0Clx1MzA0NFx1MzA1Rlx1MzA5OVx1MzA0RgpcdTMwNDRcdTMwNUZcdTMwNTlcdTMwOTlcdTMwODkKXHUzMDQ0XHUzMDVGXHUzMDdGClx1MzA0NFx1MzA1Rlx1MzA4QVx1MzA0MgpcdTMwNDRcdTMwNjFcdTMwNEFcdTMwNDYKXHUzMDQ0XHUzMDYxXHUzMDU3XHUzMDk5Clx1MzA0NFx1MzA2MVx1MzA2OFx1MzA5OQpcdTMwNDRcdTMwNjFcdTMwNkZcdTMwOTkKXHUzMDQ0XHUzMDYxXHUzMDc1XHUzMDk5Clx1MzA0NFx1MzA2MVx1MzA4QVx1MzA4NVx1MzA0NgpcdTMwNDRcdTMwNjRcdTMwNEIKXHUzMDQ0XHUzMDYzXHUzMDU3XHUzMDg1XHUzMDkzClx1MzA0NFx1MzA2M1x1MzA1Qlx1MzA0NApcdTMwNDRcdTMwNjNcdTMwNURcdTMwNDYKXHUzMDQ0XHUzMDYzXHUzMDVGXHUzMDkzClx1MzA0NFx1MzA2M1x1MzA2MQpcdTMwNDRcdTMwNjNcdTMwNjZcdTMwNDQKXHUzMDQ0XHUzMDYzXHUzMDdCXHUzMDlBXHUzMDQ2Clx1MzA0NFx1MzA2Nlx1MzA1NVx1MzA5OQpcdTMwNDRcdTMwNjZcdTMwOTMKXHUzMDQ0XHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA0NFx1MzA2OFx1MzA1MwpcdTMwNDRcdTMwNkFcdTMwNDQKXHUzMDQ0XHUzMDZBXHUzMDRCClx1MzA0NFx1MzA2RFx1MzA4MFx1MzA4QQpcdTMwNDRcdTMwNkVcdTMwNjEKXHUzMDQ0XHUzMDZFXHUzMDhCClx1MzA0NFx1MzA2Rlx1MzA2NApcdTMwNDRcdTMwNkZcdTMwOTlcdTMwOEIKXHUzMDQ0XHUzMDZGXHUzMDkzClx1MzA0NFx1MzA3Mlx1MzA5OVx1MzA0RApcdTMwNDRcdTMwNzJcdTMwOTMKXHUzMDQ0XHUzMDc1XHUzMDRGClx1MzA0NFx1MzA3OFx1MzA5MwpcdTMwNDRcdTMwN0JcdTMwNDYKXHUzMDQ0XHUzMDdGXHUzMDkzClx1MzA0NFx1MzA4Mlx1MzA0Nlx1MzA2OApcdTMwNDRcdTMwODJcdTMwNUZcdTMwOEMKXHUzMDQ0XHUzMDgyXHUzMDhBClx1MzA0NFx1MzA4NFx1MzA0Qlx1MzA5OVx1MzA4QgpcdTMwNDRcdTMwODRcdTMwNTkKXHUzMDQ0XHUzMDg4XHUzMDRCXHUzMDkzClx1MzA0NFx1MzA4OFx1MzA0RgpcdTMwNDRcdTMwODlcdTMwNDQKXHUzMDQ0XHUzMDg5XHUzMDU5XHUzMDY4Clx1MzA0NFx1MzA4QVx1MzA0Rlx1MzA5OVx1MzA2MQpcdTMwNDRcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDQ0XHUzMDhDXHUzMDQ0Clx1MzA0NFx1MzA4Q1x1MzA4Mlx1MzA2RQpcdTMwNDRcdTMwOENcdTMwOEIKXHUzMDQ0XHUzMDhEXHUzMDQ4XHUzMDkzXHUzMDcyXHUzMDlBXHUzMDY0Clx1MzA0NFx1MzA4Rlx1MzA0NApcdTMwNDRcdTMwOEZcdTMwNDYKXHUzMDQ0XHUzMDhGXHUzMDRCXHUzMDkzClx1MzA0NFx1MzA4Rlx1MzA2Rlx1MzA5OQpcdTMwNDRcdTMwOEZcdTMwODZcdTMwOEIKXHUzMDQ0XHUzMDkzXHUzMDUxXHUzMDk5XHUzMDkzXHUzMDdFXHUzMDgxClx1MzA0NFx1MzA5M1x1MzA1NVx1MzA2NApcdTMwNDRcdTMwOTNcdTMwNTdcdTMwODdcdTMwNDYKXHUzMDQ0XHUzMDkzXHUzMDg4XHUzMDQ2Clx1MzA0Nlx1MzA0OFx1MzA0RApcdTMwNDZcdTMwNDhcdTMwOEIKXHUzMDQ2XHUzMDRBXHUzMDU1XHUzMDk5Clx1MzA0Nlx1MzA0Qlx1MzA5OVx1MzA0NApcdTMwNDZcdTMwNEJcdTMwNzVcdTMwOTkKXHUzMDQ2XHUzMDRCXHUzMDc4XHUzMDk5XHUzMDhCClx1MzA0Nlx1MzA0RFx1MzA4RgpcdTMwNDZcdTMwNEZcdTMwODlcdTMwNDRcdTMwNkEKXHUzMDQ2XHUzMDRGXHUzMDhDXHUzMDhDClx1MzA0Nlx1MzA1MVx1MzA1Rlx1MzA3RVx1MzA4Rlx1MzA4QgpcdTMwNDZcdTMwNTFcdTMwNjRcdTMwNTEKXHUzMDQ2XHUzMDUxXHUzMDY4XHUzMDhCClx1MzA0Nlx1MzA1MVx1MzA4Mlx1MzA2NApcdTMwNDZcdTMwNTFcdTMwOEIKXHUzMDQ2XHUzMDUzXHUzMDk5XHUzMDRCXHUzMDU5Clx1MzA0Nlx1MzA1M1x1MzA5OVx1MzA0RgpcdTMwNDZcdTMwNTNcdTMwOTMKXHUzMDQ2XHUzMDU1XHUzMDREXHUzMDk5Clx1MzA0Nlx1MzA1N1x1MzA2QVx1MzA0NgpcdTMwNDZcdTMwNTdcdTMwOERcdTMwNEJcdTMwOTlcdTMwN0YKXHUzMDQ2XHUzMDU5XHUzMDQ0Clx1MzA0Nlx1MzA1OVx1MzA0RFx1MzA5OQpcdTMwNDZcdTMwNTlcdTMwNEZcdTMwOTlcdTMwODlcdTMwNDQKXHUzMDQ2XHUzMDU5XHUzMDgxXHUzMDhCClx1MzA0Nlx1MzA1Qlx1MzA2NApcdTMwNDZcdTMwNjFcdTMwNDJcdTMwOEZcdTMwNUIKXHUzMDQ2XHUzMDYxXHUzMDRCXHUzMDk5XHUzMDhGClx1MzA0Nlx1MzA2MVx1MzA0RApcdTMwNDZcdTMwNjFcdTMwODVcdTMwNDYKXHUzMDQ2XHUzMDYzXHUzMDRCXHUzMDhBClx1MzA0Nlx1MzA2NFx1MzA0Rlx1MzA1N1x1MzA0NApcdTMwNDZcdTMwNjNcdTMwNUZcdTMwNDhcdTMwOEIKXHUzMDQ2XHUzMDY0XHUzMDhCClx1MzA0Nlx1MzA2OFx1MzA5OVx1MzA5MwpcdTMwNDZcdTMwNkFcdTMwNERcdTMwOTkKXHUzMDQ2XHUzMDZBXHUzMDU3XHUzMDk5Clx1MzA0Nlx1MzA2QVx1MzA1OVx1MzA5OVx1MzA0RgpcdTMwNDZcdTMwNkFcdTMwOEIKXHUzMDQ2XHUzMDZEXHUzMDhCClx1MzA0Nlx1MzA2RVx1MzA0NgpcdTMwNDZcdTMwNzVcdTMwOTlcdTMwNTFcdTMwOTkKXHUzMDQ2XHUzMDc1XHUzMDk5XHUzMDUzXHUzMDk5XHUzMDQ4Clx1MzA0Nlx1MzA3RVx1MzA4Q1x1MzA4QgpcdTMwNDZcdTMwODFcdTMwOEIKXHUzMDQ2XHUzMDgyXHUzMDQ2Clx1MzA0Nlx1MzA4NFx1MzA3RVx1MzA0NgpcdTMwNDZcdTMwODhcdTMwNEYKXHUzMDQ2XHUzMDg5XHUzMDRCXHUzMDk5XHUzMDQ4XHUzMDU5Clx1MzA0Nlx1MzA4OVx1MzA0Rlx1MzA5OVx1MzA2MQpcdTMwNDZcdTMwODlcdTMwNkFcdTMwNDQKXHUzMDQ2XHUzMDhBXHUzMDQyXHUzMDUxXHUzMDk5Clx1MzA0Nlx1MzA4QVx1MzA0RFx1MzA4QwpcdTMwNDZcdTMwOEJcdTMwNTVcdTMwNDQKXHUzMDQ2XHUzMDhDXHUzMDU3XHUzMDQ0Clx1MzA0Nlx1MzA4Q1x1MzA4Nlx1MzA0RApcdTMwNDZcdTMwOENcdTMwOEIKXHUzMDQ2XHUzMDhEXHUzMDUzClx1MzA0Nlx1MzA4Rlx1MzA0RApcdTMwNDZcdTMwOEZcdTMwNTUKXHUzMDQ2XHUzMDkzXHUzMDUzXHUzMDQ2Clx1MzA0Nlx1MzA5M1x1MzA2MVx1MzA5MwpcdTMwNDZcdTMwOTNcdTMwNjZcdTMwOTMKXHUzMDQ2XHUzMDkzXHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA0OFx1MzA0NFx1MzA0OFx1MzA5MwpcdTMwNDhcdTMwNDRcdTMwNEJcdTMwOTkKXHUzMDQ4XHUzMDQ0XHUzMDREXHUzMDg3XHUzMDQ2Clx1MzA0OFx1MzA0NFx1MzA1M1x1MzA5OQpcdTMwNDhcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDQ4XHUzMDQ0XHUzMDc1XHUzMDk5XHUzMDkzClx1MzA0OFx1MzA0NFx1MzA4OFx1MzA0NgpcdTMwNDhcdTMwNDRcdTMwOEYKXHUzMDQ4XHUzMDRBXHUzMDhBClx1MzA0OFx1MzA0Qlx1MzA5OVx1MzA0QQpcdTMwNDhcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDQ4XHUzMDREXHUzMDVGXHUzMDQ0Clx1MzA0OFx1MzA0Rlx1MzA1Qlx1MzA4QgpcdTMwNDhcdTMwNTdcdTMwODNcdTMwNEYKXHUzMDQ4XHUzMDU5XHUzMDY2Clx1MzA0OFx1MzA2NFx1MzA4OVx1MzA5MwpcdTMwNDhcdTMwNkVcdTMwNEZcdTMwOTkKXHUzMDQ4XHUzMDdCXHUzMDQ2XHUzMDdFXHUzMDREClx1MzA0OFx1MzA3Qlx1MzA5MwpcdTMwNDhcdTMwN0VcdTMwNEQKXHUzMDQ4XHUzMDgyXHUzMDU3XHUzMDk5Clx1MzA0OFx1MzA4Mlx1MzA2RQpcdTMwNDhcdTMwODlcdTMwNDQKXHUzMDQ4XHUzMDg5XHUzMDc1XHUzMDk5Clx1MzA0OFx1MzA4QVx1MzA0MgpcdTMwNDhcdTMwOTNcdTMwNDhcdTMwOTMKXHUzMDQ4XHUzMDkzXHUzMDRCXHUzMDQ0Clx1MzA0OFx1MzA5M1x1MzA0RFx1MzA5OQpcdTMwNDhcdTMwOTNcdTMwNTFcdTMwOTlcdTMwNEQKXHUzMDQ4XHUzMDkzXHUzMDU3XHUzMDg1XHUzMDQ2Clx1MzA0OFx1MzA5M1x1MzA1Qlx1MzA5OVx1MzA2NApcdTMwNDhcdTMwOTNcdTMwNURcdTMwNEYKXHUzMDQ4XHUzMDkzXHUzMDYxXHUzMDg3XHUzMDQ2Clx1MzA0OFx1MzA5M1x1MzA2OFx1MzA2NApcdTMwNEFcdTMwNDRcdTMwNEJcdTMwNTFcdTMwOEIKXHUzMDRBXHUzMDQ0XHUzMDUzXHUzMDU5Clx1MzA0QVx1MzA0NFx1MzA1N1x1MzA0NApcdTMwNEFcdTMwNDRcdTMwNjRcdTMwNEYKXHUzMDRBXHUzMDQ2XHUzMDQ4XHUzMDkzClx1MzA0QVx1MzA0Nlx1MzA1NVx1MzA3RQpcdTMwNEFcdTMwNDZcdTMwNTdcdTMwOTkKXHUzMDRBXHUzMDQ2XHUzMDVCXHUzMDY0Clx1MzA0QVx1MzA0Nlx1MzA1Rlx1MzA0NApcdTMwNEFcdTMwNDZcdTMwNzVcdTMwNEYKXHUzMDRBXHUzMDQ2XHUzMDc4XHUzMDk5XHUzMDQ0Clx1MzA0QVx1MzA0Nlx1MzA4OFx1MzA0NgpcdTMwNEFcdTMwNDhcdTMwOEIKXHUzMDRBXHUzMDRBXHUzMDQ0Clx1MzA0QVx1MzA0QVx1MzA0NgpcdTMwNEFcdTMwNEFcdTMwNjhcdTMwOTlcdTMwNEFcdTMwOEEKXHUzMDRBXHUzMDRBXHUzMDg0Clx1MzA0QVx1MzA0QVx1MzA4OFx1MzA1RApcdTMwNEFcdTMwNEJcdTMwNDhcdTMwOEEKXHUzMDRBXHUzMDRCXHUzMDU5XHUzMDk5Clx1MzA0QVx1MzA0Qlx1MzA5OVx1MzA4MApcdTMwNEFcdTMwNEJcdTMwOEZcdTMwOEEKXHUzMDRBXHUzMDREXHUzMDk5XHUzMDZBXHUzMDQ2Clx1MzA0QVx1MzA0RFx1MzA4QgpcdTMwNEFcdTMwNEZcdTMwNTVcdTMwN0UKXHUzMDRBXHUzMDRGXHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA0QVx1MzA0Rlx1MzA4QVx1MzA0Qlx1MzA5OVx1MzA2QQpcdTMwNEFcdTMwNEZcdTMwOEIKXHUzMDRBXHUzMDRGXHUzMDhDXHUzMDhCClx1MzA0QVx1MzA1M1x1MzA1OQpcdTMwNEFcdTMwNTNcdTMwNkFcdTMwNDYKXHUzMDRBXHUzMDUzXHUzMDhCClx1MzA0QVx1MzA1NVx1MzA0OFx1MzA4QgpcdTMwNEFcdTMwNTVcdTMwNkFcdTMwNDQKXHUzMDRBXHUzMDU1XHUzMDgxXHUzMDhCClx1MzA0QVx1MzA1N1x1MzA0NFx1MzA4QwpcdTMwNEFcdTMwNTdcdTMwNDhcdTMwOEIKXHUzMDRBXHUzMDU3XHUzMDk5XHUzMDREXHUzMDk5Clx1MzA0QVx1MzA1N1x1MzA5OVx1MzA1NVx1MzA5MwpcdTMwNEFcdTMwNTdcdTMwODNcdTMwOEMKXHUzMDRBXHUzMDVEXHUzMDg5XHUzMDRGClx1MzA0QVx1MzA1RFx1MzA4Rlx1MzA4QgpcdTMwNEFcdTMwNUZcdTMwNEJcdTMwOTlcdTMwNDQKXHUzMDRBXHUzMDVGXHUzMDRGClx1MzA0QVx1MzA1Rlx1MzA5OVx1MzA4NFx1MzA0QgpcdTMwNEFcdTMwNjFcdTMwNjRcdTMwNEYKXHUzMDRBXHUzMDYzXHUzMDY4Clx1MzA0QVx1MzA2NFx1MzA4QQpcdTMwNEFcdTMwNjZcdTMwOTlcdTMwNEJcdTMwNTEKXHUzMDRBXHUzMDY4XHUzMDU3XHUzMDgyXHUzMDZFClx1MzA0QVx1MzA2OFx1MzA2QVx1MzA1N1x1MzA0NApcdTMwNEFcdTMwNjhcdTMwOTlcdTMwOEEKXHUzMDRBXHUzMDY4XHUzMDk5XHUzMDhEXHUzMDRCXHUzMDU5Clx1MzA0QVx1MzA2Rlx1MzA5OVx1MzA1NVx1MzA5MwpcdTMwNEFcdTMwN0VcdTMwNDRcdTMwOEEKXHUzMDRBXHUzMDgxXHUzMDY2XHUzMDk5XHUzMDY4XHUzMDQ2Clx1MzA0QVx1MzA4Mlx1MzA0NFx1MzA2Nlx1MzA5OQpcdTMwNEFcdTMwODJcdTMwNDYKXHUzMDRBXHUzMDgyXHUzMDVGXHUzMDQ0Clx1MzA0QVx1MzA4Mlx1MzA2MVx1MzA4MwpcdTMwNEFcdTMwODRcdTMwNjQKXHUzMDRBXHUzMDg0XHUzMDg2XHUzMDcyXHUzMDk5Clx1MzA0QVx1MzA4OFx1MzA3Qlx1MzA5OVx1MzA1OQpcdTMwNEFcdTMwODlcdTMwOTNcdTMwNUZcdTMwOTkKXHUzMDRBXHUzMDhEXHUzMDU5Clx1MzA0QVx1MzA5M1x1MzA0Qlx1MzA5OVx1MzA0RgpcdTMwNEFcdTMwOTNcdTMwNTFcdTMwNDQKXHUzMDRBXHUzMDkzXHUzMDU3XHUzMDgzClx1MzA0QVx1MzA5M1x1MzA1Qlx1MzA5MwpcdTMwNEFcdTMwOTNcdTMwNUZcdTMwOTlcdTMwOTMKXHUzMDRBXHUzMDkzXHUzMDYxXHUzMDg1XHUzMDQ2Clx1MzA0QVx1MzA5M1x1MzA2OFx1MzA5OVx1MzA1MVx1MzA0NApcdTMwNEJcdTMwNDJcdTMwNjQKXHUzMDRCXHUzMDQ0XHUzMDRCXHUzMDk5Clx1MzA0Qlx1MzA5OVx1MzA0NFx1MzA0RApcdTMwNEJcdTMwOTlcdTMwNDRcdTMwNTFcdTMwOTMKXHUzMDRCXHUzMDk5XHUzMDQ0XHUzMDUzXHUzMDQ2Clx1MzA0Qlx1MzA0NFx1MzA1NVx1MzA2NApcdTMwNEJcdTMwNDRcdTMwNTdcdTMwODMKXHUzMDRCXHUzMDQ0XHUzMDU5XHUzMDQ0XHUzMDg4XHUzMDRGClx1MzA0Qlx1MzA0NFx1MzA1Qlx1MzA5OVx1MzA5MwpcdTMwNEJcdTMwNDRcdTMwNURcdTMwOTlcdTMwNDZcdTMwNjhcdTMwOTkKXHUzMDRCXHUzMDQ0XHUzMDY0XHUzMDQ2Clx1MzA0Qlx1MzA0NFx1MzA2Nlx1MzA5MwpcdTMwNEJcdTMwNDRcdTMwNjhcdTMwNDYKXHUzMDRCXHUzMDQ0XHUzMDc1XHUzMDRGClx1MzA0Qlx1MzA5OVx1MzA0NFx1MzA3OFx1MzA0RApcdTMwNEJcdTMwNDRcdTMwN0JcdTMwNDYKXHUzMDRCXHUzMDQ0XHUzMDg4XHUzMDQ2Clx1MzA0Qlx1MzA5OVx1MzA0NFx1MzA4OVx1MzA0NApcdTMwNEJcdTMwNDRcdTMwOEYKXHUzMDRCXHUzMDQ4XHUzMDhCClx1MzA0Qlx1MzA0QVx1MzA4QQpcdTMwNEJcdTMwNEJcdTMwNDhcdTMwOEIKXHUzMDRCXHUzMDRCXHUzMDk5XHUzMDRGClx1MzA0Qlx1MzA0Qlx1MzA5OVx1MzA1NwpcdTMwNEJcdTMwNEJcdTMwOTlcdTMwN0YKXHUzMDRCXHUzMDRGXHUzMDUzXHUzMDk5Clx1MzA0Qlx1MzA0Rlx1MzA2OFx1MzA0RgpcdTMwNEJcdTMwNTVcdTMwOTlcdTMwOEIKXHUzMDRCXHUzMDk5XHUzMDVEXHUzMDk5XHUzMDQ2Clx1MzA0Qlx1MzA1Rlx1MzA0NApcdTMwNEJcdTMwNUZcdTMwNjEKXHUzMDRCXHUzMDk5XHUzMDYxXHUzMDg3XHUzMDQ2Clx1MzA0Qlx1MzA5OVx1MzA2M1x1MzA0RFx1MzA4NVx1MzA0NgpcdTMwNEJcdTMwOTlcdTMwNjNcdTMwNTNcdTMwNDYKXHUzMDRCXHUzMDk5XHUzMDYzXHUzMDU1XHUzMDkzClx1MzA0Qlx1MzA5OVx1MzA2M1x1MzA1N1x1MzA4N1x1MzA0NgpcdTMwNEJcdTMwNkFcdTMwNTVcdTMwOTlcdTMwOEZcdTMwNTcKXHUzMDRCXHUzMDZFXHUzMDQ2Clx1MzA0Qlx1MzA5OVx1MzA2Rlx1MzA0RgpcdTMwNEJcdTMwNzVcdTMwOTlcdTMwNEIKXHUzMDRCXHUzMDdCXHUzMDQ2Clx1MzA0Qlx1MzA3Qlx1MzA1M1x1MzA5OQpcdTMwNEJcdTMwN0VcdTMwNDYKXHUzMDRCXHUzMDdFXHUzMDdCXHUzMDk5XHUzMDUzClx1MzA0Qlx1MzA4MVx1MzA4Q1x1MzA0QVx1MzA5MwpcdTMwNEJcdTMwODZcdTMwNDQKXHUzMDRCXHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA0Qlx1MzA4OVx1MzA0NApcdTMwNEJcdTMwOEJcdTMwNDQKXHUzMDRCXHUzMDhEXHUzMDQ2Clx1MzA0Qlx1MzA4Rlx1MzA0RgpcdTMwNEJcdTMwOEZcdTMwODkKXHUzMDRCXHUzMDk5XHUzMDkzXHUzMDRCClx1MzA0Qlx1MzA5M1x1MzA1MVx1MzA0NApcdTMwNEJcdTMwOTNcdTMwNTNcdTMwNDYKXHUzMDRCXHUzMDkzXHUzMDU3XHUzMDgzClx1MzA0Qlx1MzA5M1x1MzA1RFx1MzA0NgpcdTMwNEJcdTMwOTNcdTMwNUZcdTMwOTMKXHUzMDRCXHUzMDkzXHUzMDYxClx1MzA0Qlx1MzA5OVx1MzA5M1x1MzA2Rlx1MzA5OVx1MzA4QgpcdTMwNERcdTMwNDJcdTMwNDQKXHUzMDREXHUzMDQyXHUzMDY0Clx1MzA0RFx1MzA0NFx1MzA4RApcdTMwNERcdTMwOTlcdTMwNDRcdTMwOTMKXHUzMDREXHUzMDQ2XHUzMDQ0Clx1MzA0RFx1MzA0Nlx1MzA5MwpcdTMwNERcdTMwNDhcdTMwOEIKXHUzMDREXHUzMDRBXHUzMDQ2Clx1MzA0RFx1MzA0QVx1MzA0RgpcdTMwNERcdTMwNEFcdTMwNjEKXHUzMDREXHUzMDRBXHUzMDkzClx1MzA0RFx1MzA0Qlx1MzA0NApcdTMwNERcdTMwNEJcdTMwNEYKXHUzMDREXHUzMDRCXHUzMDkzXHUzMDU3XHUzMDgzClx1MzA0RFx1MzA0RFx1MzA2NgpcdTMwNERcdTMwNEZcdTMwNkZcdTMwOTlcdTMwOEEKXHUzMDREXHUzMDRGXHUzMDg5XHUzMDUxXHUzMDk5Clx1MzA0RFx1MzA1MVx1MzA5M1x1MzA1Qlx1MzA0NApcdTMwNERcdTMwNTNcdTMwNDYKXHUzMDREXHUzMDUzXHUzMDQ4XHUzMDhCClx1MzA0RFx1MzA1M1x1MzA0RgpcdTMwNERcdTMwNTVcdTMwNDQKXHUzMDREXHUzMDU1XHUzMDRGClx1MzA0RFx1MzA1NVx1MzA3RQpcdTMwNERcdTMwNTVcdTMwODlcdTMwNERcdTMwOTkKXHUzMDREXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDRCXHUzMDRCXHUzMDk5XHUzMDRGClx1MzA0RFx1MzA5OVx1MzA1N1x1MzA0RApcdTMwNERcdTMwOTlcdTMwNTdcdTMwOTlcdTMwNUZcdTMwNDRcdTMwNTFcdTMwOTMKXHUzMDREXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDZCXHUzMDYzXHUzMDY2XHUzMDQ0Clx1MzA0RFx1MzA5OVx1MzA1N1x1MzA5OVx1MzA4NVx1MzA2NFx1MzA1N1x1MzA4MwpcdTMwNERcdTMwNTlcdTMwNDYKXHUzMDREXHUzMDVCXHUzMDQ0Clx1MzA0RFx1MzA1Qlx1MzA0RApcdTMwNERcdTMwNUJcdTMwNjQKXHUzMDREXHUzMDVEXHUzMDQ2Clx1MzA0RFx1MzA1RFx1MzA5OVx1MzA0RgpcdTMwNERcdTMwNURcdTMwOTlcdTMwOTMKXHUzMDREXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA0RFx1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNERcdTMwNjRcdTMwNDhcdTMwOTMKXHUzMDREXHUzMDk5XHUzMDYzXHUzMDYxXHUzMDhBClx1MzA0RFx1MzA2NFx1MzA2NFx1MzA0RApcdTMwNERcdTMwNjRcdTMwNkQKXHUzMDREXHUzMDY2XHUzMDQ0Clx1MzA0RFx1MzA2OFx1MzA5OVx1MzA0NgpcdTMwNERcdTMwNjhcdTMwOTlcdTMwNEYKXHUzMDREXHUzMDZBXHUzMDQ0Clx1MzA0RFx1MzA2QVx1MzA0Qlx1MzA5OQpcdTMwNERcdTMwNkFcdTMwNTMKXHUzMDREXHUzMDZDXHUzMDUzXHUzMDk5XHUzMDU3Clx1MzA0RFx1MzA2RFx1MzA5MwpcdTMwNERcdTMwNkVcdTMwNDYKXHUzMDREXHUzMDZFXHUzMDU3XHUzMDVGClx1MzA0RFx1MzA2Rlx1MzA0RgpcdTMwNERcdTMwNzJcdTMwOTlcdTMwNTdcdTMwNDQKXHUzMDREXHUzMDcyXHUzMDkzClx1MzA0RFx1MzA3NVx1MzA0RgpcdTMwNERcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDREXHUzMDdCXHUzMDk5XHUzMDQ2Clx1MzA0RFx1MzA3Qlx1MzA5MwpcdTMwNERcdTMwN0VcdTMwOEIKXHUzMDREXHUzMDdGXHUzMDY0Clx1MzA0RFx1MzA4MFx1MzA1OVx1MzA5OVx1MzA0Qlx1MzA1N1x1MzA0NApcdTMwNERcdTMwODFcdTMwOEIKXHUzMDREXHUzMDgyXHUzMDVGXHUzMDk5XHUzMDgxXHUzMDU3Clx1MzA0RFx1MzA4Mlx1MzA2MQpcdTMwNERcdTMwODJcdTMwNkUKXHUzMDREXHUzMDgzXHUzMDRGClx1MzA0RFx1MzA4NFx1MzA0RgpcdTMwNERcdTMwOTlcdTMwODVcdTMwNDZcdTMwNkJcdTMwNEYKXHUzMDREXHUzMDg4XHUzMDQ2Clx1MzA0RFx1MzA4N1x1MzA0Nlx1MzA4QVx1MzA4NVx1MzA0NgpcdTMwNERcdTMwODlcdTMwNDQKXHUzMDREXHUzMDg5XHUzMDRGClx1MzA0RFx1MzA4QVx1MzA5MwpcdTMwNERcdTMwOENcdTMwNDQKXHUzMDREXHUzMDhDXHUzMDY0Clx1MzA0RFx1MzA4RFx1MzA0RgpcdTMwNERcdTMwOTlcdTMwOERcdTMwOTMKXHUzMDREXHUzMDhGXHUzMDgxXHUzMDhCClx1MzA0RFx1MzA5OVx1MzA5M1x1MzA0NFx1MzA4RApcdTMwNERcdTMwOTNcdTMwNEJcdTMwNEZcdTMwNTdcdTMwOTkKXHUzMDREXHUzMDkzXHUzMDU3XHUzMDk5XHUzMDg3Clx1MzA0RFx1MzA5M1x1MzA4OFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNEZcdTMwOTlcdTMwNDJcdTMwNDQKXHUzMDRGXHUzMDQ0XHUzMDU5XHUzMDk5Clx1MzA0Rlx1MzA0Nlx1MzA0Qlx1MzA5MwpcdTMwNEZcdTMwNDZcdTMwNEQKXHUzMDRGXHUzMDQ2XHUzMDRGXHUzMDk5XHUzMDkzClx1MzA0Rlx1MzA0Nlx1MzA1M1x1MzA0NgpcdTMwNEZcdTMwOTlcdTMwNDZcdTMwNUJcdTMwNDQKXHUzMDRGXHUzMDQ2XHUzMDVEXHUzMDQ2Clx1MzA0Rlx1MzA5OVx1MzA0Nlx1MzA1Rlx1MzA4OQpcdTMwNEZcdTMwNDZcdTMwNzVcdTMwNEYKXHUzMDRGXHUzMDQ2XHUzMDdCXHUzMDk5Clx1MzA0Rlx1MzA0Qlx1MzA5MwpcdTMwNEZcdTMwNERcdTMwODdcdTMwNDYKXHUzMDRGXHUzMDUxXHUzMDk5XHUzMDkzClx1MzA0Rlx1MzA5OVx1MzA1M1x1MzA0NgpcdTMwNEZcdTMwNTVcdTMwNDQKXHUzMDRGXHUzMDU1XHUzMDREClx1MzA0Rlx1MzA1NVx1MzA2Rlx1MzA5OVx1MzA2QQpcdTMwNEZcdTMwNTVcdTMwOEIKXHUzMDRGXHUzMDU3XHUzMDgzXHUzMDdGClx1MzA0Rlx1MzA1N1x1MzA4N1x1MzA0NgpcdTMwNEZcdTMwNTlcdTMwNkVcdTMwNEQKXHUzMDRGXHUzMDU5XHUzMDhBXHUzMDg2XHUzMDcyXHUzMDk5Clx1MzA0Rlx1MzA1Qlx1MzA1MVx1MzA5OQpcdTMwNEZcdTMwNUJcdTMwOTMKXHUzMDRGXHUzMDk5XHUzMDVGXHUzMDQ0XHUzMDY2XHUzMDREClx1MzA0Rlx1MzA1Rlx1MzA5OVx1MzA1NVx1MzA4QgpcdTMwNEZcdTMwNUZcdTMwNzJcdTMwOTlcdTMwOENcdTMwOEIKXHUzMDRGXHUzMDYxXHUzMDUzXHUzMDdGClx1MzA0Rlx1MzA2MVx1MzA1NVx1MzA0RApcdTMwNEZcdTMwNjRcdTMwNTdcdTMwNUYKXHUzMDRGXHUzMDk5XHUzMDYzXHUzMDU5XHUzMDhBClx1MzA0Rlx1MzA2NFx1MzA4RFx1MzA0Rlx1MzA5OQpcdTMwNEZcdTMwNjhcdTMwNDZcdTMwNjZcdTMwOTMKXHUzMDRGXHUzMDY4XHUzMDk5XHUzMDRGClx1MzA0Rlx1MzA2QVx1MzA5MwpcdTMwNEZcdTMwNkRcdTMwNEZcdTMwNkQKXHUzMDRGXHUzMDZFXHUzMDQ2Clx1MzA0Rlx1MzA3NVx1MzA0NgpcdTMwNEZcdTMwN0ZcdTMwNDJcdTMwOEZcdTMwNUIKXHUzMDRGXHUzMDdGXHUzMDVGXHUzMDY2XHUzMDhCClx1MzA0Rlx1MzA4MVx1MzA4QgpcdTMwNEZcdTMwODRcdTMwNEZcdTMwNTdcdTMwODcKXHUzMDRGXHUzMDg5XHUzMDU5Clx1MzA0Rlx1MzA4OVx1MzA3OFx1MzA5OVx1MzA4QgpcdTMwNEZcdTMwOEJcdTMwN0UKXHUzMDRGXHUzMDhDXHUzMDhCClx1MzA0Rlx1MzA4RFx1MzA0NgpcdTMwNEZcdTMwOEZcdTMwNTdcdTMwNDQKXHUzMDRGXHUzMDk5XHUzMDkzXHUzMDRCXHUzMDkzClx1MzA0Rlx1MzA5OVx1MzA5M1x1MzA1N1x1MzA4N1x1MzA0RgpcdTMwNEZcdTMwOTlcdTMwOTNcdTMwNUZcdTMwNDQKXHUzMDRGXHUzMDk5XHUzMDkzXHUzMDY2Clx1MzA1MVx1MzA0Mlx1MzA2QQpcdTMwNTFcdTMwNDRcdTMwNEJcdTMwNEYKXHUzMDUxXHUzMDQ0XHUzMDUxXHUzMDkzClx1MzA1MVx1MzA0NFx1MzA1MwpcdTMwNTFcdTMwNDRcdTMwNTVcdTMwNjQKXHUzMDUxXHUzMDk5XHUzMDQ0XHUzMDU3XHUzMDk5XHUzMDg1XHUzMDY0Clx1MzA1MVx1MzA0NFx1MzA1Rlx1MzA0NApcdTMwNTFcdTMwOTlcdTMwNDRcdTMwNkVcdTMwNDZcdTMwNTdcdTMwOTlcdTMwOTMKXHUzMDUxXHUzMDQ0XHUzMDhDXHUzMDREClx1MzA1MVx1MzA0NFx1MzA4RApcdTMwNTFcdTMwNEFcdTMwNjhcdTMwNTkKXHUzMDUxXHUzMDRBXHUzMDhBXHUzMDgyXHUzMDZFClx1MzA1MVx1MzA5OVx1MzA0RFx1MzA0QgpcdTMwNTFcdTMwOTlcdTMwNERcdTMwNTFcdTMwOTlcdTMwOTMKXHUzMDUxXHUzMDk5XHUzMDREXHUzMDVGXHUzMDk5XHUzMDkzClx1MzA1MVx1MzA5OVx1MzA0RFx1MzA2MVx1MzA5MwpcdTMwNTFcdTMwOTlcdTMwNERcdTMwNjhcdTMwNjQKXHUzMDUxXHUzMDk5XHUzMDREXHUzMDZGClx1MzA1MVx1MzA5OVx1MzA0RFx1MzA4NFx1MzA0RgpcdTMwNTFcdTMwOTlcdTMwNTNcdTMwNDYKXHUzMDUxXHUzMDk5XHUzMDUzXHUzMDRGXHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA1MVx1MzA5OVx1MzA1NVx1MzA5OVx1MzA0NApcdTMwNTFcdTMwNTVcdTMwNEQKXHUzMDUxXHUzMDk5XHUzMDU1XHUzMDk5XHUzMDkzClx1MzA1MVx1MzA1N1x1MzA0RApcdTMwNTFcdTMwNTdcdTMwNTNcdTMwOTlcdTMwODAKXHUzMDUxXHUzMDU3XHUzMDg3XHUzMDQ2Clx1MzA1MVx1MzA5OVx1MzA1OVx1MzA2OApcdTMwNTFcdTMwNUZcdTMwNkZcdTMwOTkKXHUzMDUxXHUzMDYxXHUzMDgzXHUzMDYzXHUzMDc1XHUzMDlBClx1MzA1MVx1MzA2MVx1MzA4OVx1MzA1OQpcdTMwNTFcdTMwNjRcdTMwNDJcdTMwNjQKXHUzMDUxXHUzMDY0XHUzMDQ0Clx1MzA1MVx1MzA2NFx1MzA0OFx1MzA0RApcdTMwNTFcdTMwNjNcdTMwNTNcdTMwOTMKXHUzMDUxXHUzMDY0XHUzMDU3XHUzMDk5XHUzMDg3Clx1MzA1MVx1MzA2M1x1MzA1Qlx1MzA0RApcdTMwNTFcdTMwNjNcdTMwNjZcdTMwNDQKXHUzMDUxXHUzMDY0XHUzMDdFXHUzMDY0Clx1MzA1MVx1MzA5OVx1MzA2NFx1MzA4OFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNTFcdTMwOTlcdTMwNjRcdTMwOENcdTMwNDQKXHUzMDUxXHUzMDY0XHUzMDhEXHUzMDkzClx1MzA1MVx1MzA5OVx1MzA2OFx1MzA5OVx1MzA0RgpcdTMwNTFcdTMwNjhcdTMwNkZcdTMwOTlcdTMwNTkKXHUzMDUxXHUzMDY4XHUzMDhCClx1MzA1MVx1MzA2QVx1MzA1MVx1MzA5OQpcdTMwNTFcdTMwNkFcdTMwNTkKXHUzMDUxXHUzMDZBXHUzMDdGClx1MzA1MVx1MzA2Q1x1MzA0RApcdTMwNTFcdTMwOTlcdTMwNkRcdTMwNjQKXHUzMDUxXHUzMDZEXHUzMDkzClx1MzA1MVx1MzA2Rlx1MzA0NApcdTMwNTFcdTMwOTlcdTMwNzJcdTMwOTMKXHUzMDUxXHUzMDc1XHUzMDk5XHUzMDRCXHUzMDQ0Clx1MzA1MVx1MzA5OVx1MzA3Qlx1MzA5OVx1MzA0RgpcdTMwNTFcdTMwN0VcdTMwOEEKXHUzMDUxXHUzMDdGXHUzMDRCXHUzMDhCClx1MzA1MVx1MzA4MFx1MzA1NwpcdTMwNTFcdTMwODBcdTMwOEEKXHUzMDUxXHUzMDgyXHUzMDZFClx1MzA1MVx1MzA4OVx1MzA0NApcdTMwNTFcdTMwOERcdTMwNTFcdTMwOEQKXHUzMDUxXHUzMDhGXHUzMDU3XHUzMDQ0Clx1MzA1MVx1MzA5M1x1MzA0NApcdTMwNTFcdTMwOTNcdTMwNDhcdTMwNjQKXHUzMDUxXHUzMDkzXHUzMDRBClx1MzA1MVx1MzA5M1x1MzA0QgpcdTMwNTFcdTMwOTlcdTMwOTNcdTMwNEQKXHUzMDUxXHUzMDkzXHUzMDUxXHUzMDk5XHUzMDkzClx1MzA1MVx1MzA5M1x1MzA1M1x1MzA0NgpcdTMwNTFcdTMwOTNcdTMwNTVcdTMwNEYKXHUzMDUxXHUzMDkzXHUzMDU3XHUzMDg1XHUzMDQ2Clx1MzA1MVx1MzA5M1x1MzA1OVx1MzA0NgpcdTMwNTFcdTMwOTlcdTMwOTNcdTMwNURcdTMwNDYKXHUzMDUxXHUzMDkzXHUzMDYxXHUzMDRGClx1MzA1MVx1MzA5M1x1MzA2Nlx1MzA0NApcdTMwNTFcdTMwOTNcdTMwNjhcdTMwNDYKXHUzMDUxXHUzMDkzXHUzMDZBXHUzMDQ0Clx1MzA1MVx1MzA5M1x1MzA2Qlx1MzA5MwpcdTMwNTFcdTMwOTlcdTMwOTNcdTMwNzVcdTMwOTlcdTMwNjQKXHUzMDUxXHUzMDkzXHUzMDdFClx1MzA1MVx1MzA5M1x1MzA3Rlx1MzA5MwpcdTMwNTFcdTMwOTNcdTMwODFcdTMwNDQKXHUzMDUxXHUzMDkzXHUzMDg5XHUzMDkzClx1MzA1MVx1MzA5M1x1MzA4QQpcdTMwNTNcdTMwNDJcdTMwNEZcdTMwN0UKXHUzMDUzXHUzMDQ0XHUzMDZDClx1MzA1M1x1MzA0NFx1MzA3Mlx1MzA5OVx1MzA2OApcdTMwNTNcdTMwOTlcdTMwNDZcdTMwNDQKXHUzMDUzXHUzMDQ2XHUzMDQ4XHUzMDkzClx1MzA1M1x1MzA0Nlx1MzA0QVx1MzA5MwpcdTMwNTNcdTMwNDZcdTMwNEJcdTMwOTMKXHUzMDUzXHUzMDk5XHUzMDQ2XHUzMDREXHUzMDg1XHUzMDQ2Clx1MzA1M1x1MzA5OVx1MzA0Nlx1MzA1MVx1MzA0NApcdTMwNTNcdTMwNDZcdTMwNTNcdTMwNDYKXHUzMDUzXHUzMDQ2XHUzMDU1XHUzMDQ0Clx1MzA1M1x1MzA0Nlx1MzA1N1x1MzA5OQpcdTMwNTNcdTMwNDZcdTMwNTlcdTMwNDQKXHUzMDUzXHUzMDk5XHUzMDQ2XHUzMDVCXHUzMDQ0Clx1MzA1M1x1MzA0Nlx1MzA1RFx1MzA0RgpcdTMwNTNcdTMwNDZcdTMwNUZcdTMwNDQKXHUzMDUzXHUzMDQ2XHUzMDYxXHUzMDgzClx1MzA1M1x1MzA0Nlx1MzA2NFx1MzA0NgpcdTMwNTNcdTMwNDZcdTMwNjZcdTMwNDQKXHUzMDUzXHUzMDQ2XHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA1M1x1MzA0Nlx1MzA2QVx1MzA0NApcdTMwNTNcdTMwNDZcdTMwNkZcdTMwNDQKXHUzMDUzXHUzMDk5XHUzMDQ2XHUzMDdCXHUzMDQ2Clx1MzA1M1x1MzA5OVx1MzA0Nlx1MzA3RVx1MzA5MwpcdTMwNTNcdTMwNDZcdTMwODJcdTMwNEYKXHUzMDUzXHUzMDQ2XHUzMDhBXHUzMDY0Clx1MzA1M1x1MzA0OFx1MzA4QgpcdTMwNTNcdTMwNEFcdTMwOEEKXHUzMDUzXHUzMDk5XHUzMDRCXHUzMDQ0Clx1MzA1M1x1MzA5OVx1MzA0Qlx1MzA5OVx1MzA2NApcdTMwNTNcdTMwOTlcdTMwNEJcdTMwOTMKXHUzMDUzXHUzMDRGXHUzMDUzXHUzMDk5Clx1MzA1M1x1MzA0Rlx1MzA1NVx1MzA0NApcdTMwNTNcdTMwNEZcdTMwNjhcdTMwNDYKXHUzMDUzXHUzMDRGXHUzMDZBXHUzMDQ0Clx1MzA1M1x1MzA0Rlx1MzA2Rlx1MzA0RgpcdTMwNTNcdTMwNEZcdTMwOTlcdTMwN0UKXHUzMDUzXHUzMDUxXHUzMDQ0Clx1MzA1M1x1MzA1MVx1MzA4QgpcdTMwNTNcdTMwNTNcdTMwNkVcdTMwNEIKXHUzMDUzXHUzMDUzXHUzMDhEClx1MzA1M1x1MzA1NVx1MzA4MQpcdTMwNTNcdTMwNTdcdTMwNjQKXHUzMDUzXHUzMDU5XHUzMDQ2Clx1MzA1M1x1MzA1Qlx1MzA0NApcdTMwNTNcdTMwNUJcdTMwNEQKXHUzMDUzXHUzMDVCXHUzMDk5XHUzMDkzClx1MzA1M1x1MzA1RFx1MzA1Rlx1MzA5OVx1MzA2NgpcdTMwNTNcdTMwNUZcdTMwNDQKXHUzMDUzXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA1M1x1MzA1Rlx1MzA2NApcdTMwNTNcdTMwNjFcdTMwODdcdTMwNDYKXHUzMDUzXHUzMDYzXHUzMDRCClx1MzA1M1x1MzA2NFx1MzA1M1x1MzA2NApcdTMwNTNcdTMwNjRcdTMwNkZcdTMwOTlcdTMwOTMKXHUzMDUzXHUzMDY0XHUzMDc1XHUzMDk5Clx1MzA1M1x1MzA2Nlx1MzA0NApcdTMwNTNcdTMwNjZcdTMwOTMKXHUzMDUzXHUzMDY4XHUzMDRCXHUzMDk5XHUzMDg5Clx1MzA1M1x1MzA2OFx1MzA1NwpcdTMwNTNcdTMwNjhcdTMwNkZcdTMwOTkKXHUzMDUzXHUzMDY4XHUzMDhBClx1MzA1M1x1MzA2QVx1MzA1M1x1MzA5OVx1MzA2QQpcdTMwNTNcdTMwNkRcdTMwNTNcdTMwNkQKXHUzMDUzXHUzMDZFXHUzMDdFXHUzMDdFClx1MzA1M1x1MzA2RVx1MzA3RgpcdTMwNTNcdTMwNkVcdTMwODgKXHUzMDUzXHUzMDk5XHUzMDZGXHUzMDkzClx1MzA1M1x1MzA3Mlx1MzA2NFx1MzA1N1x1MzA5OQpcdTMwNTNcdTMwNzVcdTMwNDYKXHUzMDUzXHUzMDc1XHUzMDkzClx1MzA1M1x1MzA3Qlx1MzA5OVx1MzA4Q1x1MzA4QgpcdTMwNTNcdTMwOTlcdTMwN0VcdTMwNDJcdTMwNzVcdTMwOTlcdTMwODkKXHUzMDUzXHUzMDdFXHUzMDRCXHUzMDQ0Clx1MzA1M1x1MzA5OVx1MzA3RVx1MzA1OVx1MzA4QQpcdTMwNTNcdTMwN0VcdTMwNjRcdTMwNkEKXHUzMDUzXHUzMDdFXHUzMDhCClx1MzA1M1x1MzA4MFx1MzA0RFx1MzA5OVx1MzA1MwpcdTMwNTNcdTMwODJcdTMwNTdcdTMwOTkKXHUzMDUzXHUzMDgyXHUzMDYxClx1MzA1M1x1MzA4Mlx1MzA2RQpcdTMwNTNcdTMwODJcdTMwOTMKXHUzMDUzXHUzMDg0XHUzMDRGClx1MzA1M1x1MzA4NFx1MzA3RQpcdTMwNTNcdTMwODZcdTMwNDYKXHUzMDUzXHUzMDg2XHUzMDcyXHUzMDk5Clx1MzA1M1x1MzA4OFx1MzA0NApcdTMwNTNcdTMwODhcdTMwNDYKXHUzMDUzXHUzMDhBXHUzMDhCClx1MzA1M1x1MzA4Q1x1MzA0Rlx1MzA1N1x1MzA4N1x1MzA5MwpcdTMwNTNcdTMwOERcdTMwNjNcdTMwNTEKXHUzMDUzXHUzMDhGXHUzMDgyXHUzMDY2Clx1MzA1M1x1MzA4Rlx1MzA4Q1x1MzA4QgpcdTMwNTNcdTMwOTNcdTMwNDRcdTMwOTMKXHUzMDUzXHUzMDkzXHUzMDRCXHUzMDQ0Clx1MzA1M1x1MzA5M1x1MzA0RApcdTMwNTNcdTMwOTNcdTMwNTdcdTMwODVcdTMwNDYKXHUzMDUzXHUzMDkzXHUzMDU5XHUzMDQ0Clx1MzA1M1x1MzA5M1x1MzA1Rlx1MzA5OVx1MzA2NgpcdTMwNTNcdTMwOTNcdTMwNjhcdTMwOTMKXHUzMDUzXHUzMDkzXHUzMDZBXHUzMDkzClx1MzA1M1x1MzA5M1x1MzA3Mlx1MzA5OVx1MzA2QgpcdTMwNTNcdTMwOTNcdTMwN0JcdTMwOUFcdTMwOTMKXHUzMDUzXHUzMDkzXHUzMDdFXHUzMDUxClx1MzA1M1x1MzA5M1x1MzA4NApcdTMwNTNcdTMwOTNcdTMwOENcdTMwNDQKXHUzMDUzXHUzMDkzXHUzMDhGXHUzMDRGClx1MzA1NVx1MzA5OVx1MzA0NFx1MzA0OFx1MzA0RApcdTMwNTVcdTMwNDRcdTMwNEJcdTMwNDQKXHUzMDU1XHUzMDQ0XHUzMDREXHUzMDkzClx1MzA1NVx1MzA5OVx1MzA0NFx1MzA1MVx1MzA5OVx1MzA5MwpcdTMwNTVcdTMwOTlcdTMwNDRcdTMwNTMKXHUzMDU1XHUzMDQ0XHUzMDU3XHUzMDg3Clx1MzA1NVx1MzA0NFx1MzA1Qlx1MzA0NApcdTMwNTVcdTMwOTlcdTMwNDRcdTMwNUZcdTMwNEYKXHUzMDU1XHUzMDk5XHUzMDQ0XHUzMDYxXHUzMDg1XHUzMDQ2Clx1MzA1NVx1MzA0NFx1MzA2Nlx1MzA0RApcdTMwNTVcdTMwOTlcdTMwNDRcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDU1XHUzMDQ2XHUzMDZBClx1MzA1NVx1MzA0Qlx1MzA0NFx1MzA1NwpcdTMwNTVcdTMwNEJcdTMwOTlcdTMwNTkKXHUzMDU1XHUzMDRCXHUzMDZBClx1MzA1NVx1MzA0Qlx1MzA3Rlx1MzA2MQpcdTMwNTVcdTMwNEJcdTMwOTlcdTMwOEIKXHUzMDU1XHUzMDREXHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA1NVx1MzA0Rlx1MzA1NwpcdTMwNTVcdTMwNEZcdTMwNzJcdTMwOTMKXHUzMDU1XHUzMDRGXHUzMDg5Clx1MzA1NVx1MzA1M1x1MzA0RgpcdTMwNTVcdTMwNTNcdTMwNjQKXHUzMDU1XHUzMDU5XHUzMDk5XHUzMDRCXHUzMDhCClx1MzA1NVx1MzA5OVx1MzA1Qlx1MzA0RApcdTMwNTVcdTMwNUZcdTMwOTMKXHUzMDU1XHUzMDY0XHUzMDQ4XHUzMDQ0Clx1MzA1NVx1MzA5OVx1MzA2NFx1MzA0QVx1MzA5MwpcdTMwNTVcdTMwOTlcdTMwNjNcdTMwNEIKXHUzMDU1XHUzMDk5XHUzMDY0XHUzMDRCXHUzMDk5XHUzMDRGClx1MzA1NVx1MzA2M1x1MzA0RFx1MzA4N1x1MzA0RgpcdTMwNTVcdTMwOTlcdTMwNjNcdTMwNTcKXHUzMDU1XHUzMDY0XHUzMDU3XHUzMDk5XHUzMDkzClx1MzA1NVx1MzA5OVx1MzA2M1x1MzA1RFx1MzA0NgpcdTMwNTVcdTMwNjRcdTMwNUZcdTMwNkZcdTMwOTkKXHUzMDU1XHUzMDY0XHUzMDdFXHUzMDQ0XHUzMDgyClx1MzA1NVx1MzA2Nlx1MzA0NApcdTMwNTVcdTMwNjhcdTMwNDRcdTMwODIKXHUzMDU1XHUzMDY4XHUzMDQ2Clx1MzA1NVx1MzA2OFx1MzA0QVx1MzA4NApcdTMwNTVcdTMwNjhcdTMwNTcKXHUzMDU1XHUzMDY4XHUzMDhCClx1MzA1NVx1MzA2RVx1MzA0NgpcdTMwNTVcdTMwNkZcdTMwOTlcdTMwNEYKXHUzMDU1XHUzMDcyXHUzMDk5XHUzMDU3XHUzMDQ0Clx1MzA1NVx1MzA3OFx1MzA5OVx1MzA2NApcdTMwNTVcdTMwN0JcdTMwNDYKXHUzMDU1XHUzMDdCXHUzMDY4XHUzMDk5Clx1MzA1NVx1MzA3RVx1MzA1OQpcdTMwNTVcdTMwN0ZcdTMwNTdcdTMwNDQKXHUzMDU1XHUzMDdGXHUzMDVGXHUzMDk5XHUzMDhDClx1MzA1NVx1MzA4MFx1MzA1MQpcdTMwNTVcdTMwODFcdTMwOEIKXHUzMDU1XHUzMDg0XHUzMDQ4XHUzMDkzXHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA1NVx1MzA4Nlx1MzA0NgpcdTMwNTVcdTMwODhcdTMwNDYKXHUzMDU1XHUzMDg4XHUzMDRGClx1MzA1NVx1MzA4OVx1MzA1Rlx1MzA5OQpcdTMwNTVcdTMwOTlcdTMwOEJcdTMwNURcdTMwNkZcdTMwOTkKXHUzMDU1XHUzMDhGXHUzMDg0XHUzMDRCClx1MzA1NVx1MzA4Rlx1MzA4QgpcdTMwNTVcdTMwOTNcdTMwNDRcdTMwOTMKXHUzMDU1XHUzMDkzXHUzMDRCClx1MzA1NVx1MzA5M1x1MzA0RFx1MzA4M1x1MzA0RgpcdTMwNTVcdTMwOTNcdTMwNTNcdTMwNDYKXHUzMDU1XHUzMDkzXHUzMDU1XHUzMDQ0Clx1MzA1NVx1MzA5OVx1MzA5M1x1MzA1N1x1MzA4NwpcdTMwNTVcdTMwOTNcdTMwNTlcdTMwNDYKXHUzMDU1XHUzMDkzXHUzMDVCXHUzMDQ0Clx1MzA1NVx1MzA5M1x1MzA1RApcdTMwNTVcdTMwOTNcdTMwNjEKXHUzMDU1XHUzMDkzXHUzMDdFClx1MzA1NVx1MzA5M1x1MzA3RgpcdTMwNTVcdTMwOTNcdTMwODlcdTMwOTMKXHUzMDU3XHUzMDQyXHUzMDQ0Clx1MzA1N1x1MzA0Mlx1MzA1MVx1MzA5OQpcdTMwNTdcdTMwNDJcdTMwNTVcdTMwNjNcdTMwNjYKXHUzMDU3XHUzMDQyXHUzMDhGXHUzMDVCClx1MzA1N1x1MzA0NFx1MzA0RgpcdTMwNTdcdTMwNDRcdTMwOTMKXHUzMDU3XHUzMDQ2XHUzMDYxClx1MzA1N1x1MzA0OFx1MzA0NApcdTMwNTdcdTMwNEFcdTMwNTEKXHUzMDU3XHUzMDRCXHUzMDQ0Clx1MzA1N1x1MzA0Qlx1MzA0RgpcdTMwNTdcdTMwOTlcdTMwNEJcdTMwOTMKXHUzMDU3XHUzMDUzXHUzMDk5XHUzMDY4Clx1MzA1N1x1MzA1OVx1MzA0NgpcdTMwNTdcdTMwOTlcdTMwNUZcdTMwOTlcdTMwNDQKXHUzMDU3XHUzMDVGXHUzMDQ2XHUzMDUxClx1MzA1N1x1MzA1Rlx1MzA0RFx1MzA5OQpcdTMwNTdcdTMwNUZcdTMwNjYKXHUzMDU3XHUzMDVGXHUzMDdGClx1MzA1N1x1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNTdcdTMwNjFcdTMwOEFcdTMwOTMKXHUzMDU3XHUzMDYzXHUzMDRCXHUzMDhBClx1MzA1N1x1MzA2NFx1MzA1N1x1MzA5OQpcdTMwNTdcdTMwNjRcdTMwODJcdTMwOTMKXHUzMDU3XHUzMDY2XHUzMDQ0Clx1MzA1N1x1MzA2Nlx1MzA0RApcdTMwNTdcdTMwNjZcdTMwNjQKXHUzMDU3XHUzMDk5XHUzMDY2XHUzMDkzClx1MzA1N1x1MzA5OVx1MzA2OFx1MzA5OVx1MzA0NgpcdTMwNTdcdTMwNkFcdTMwNERcdTMwOTlcdTMwOEMKXHUzMDU3XHUzMDZBXHUzMDgyXHUzMDZFClx1MzA1N1x1MzA2QVx1MzA5MwpcdTMwNTdcdTMwNkRcdTMwN0UKXHUzMDU3XHUzMDZEXHUzMDkzClx1MzA1N1x1MzA2RVx1MzA0Rlx1MzA5OQpcdTMwNTdcdTMwNkVcdTMwNzVcdTMwOTkKXHUzMDU3XHUzMDZGXHUzMDQ0Clx1MzA1N1x1MzA2Rlx1MzA5OVx1MzA0Qlx1MzA4QQpcdTMwNTdcdTMwNkZcdTMwNjQKXHUzMDU3XHUzMDZGXHUzMDg5XHUzMDQ0Clx1MzA1N1x1MzA2Rlx1MzA5MwpcdTMwNTdcdTMwNzJcdTMwODdcdTMwNDYKXHUzMDU3XHUzMDc1XHUzMDRGClx1MzA1N1x1MzA5OVx1MzA3NVx1MzA5OVx1MzA5MwpcdTMwNTdcdTMwNzhcdTMwNDQKXHUzMDU3XHUzMDdCXHUzMDQ2Clx1MzA1N1x1MzA3Qlx1MzA5MwpcdTMwNTdcdTMwN0VcdTMwNDYKXHUzMDU3XHUzMDdFXHUzMDhCClx1MzA1N1x1MzA3Rlx1MzA5MwpcdTMwNTdcdTMwODBcdTMwNTFcdTMwOEIKXHUzMDU3XHUzMDk5XHUzMDgwXHUzMDU3XHUzMDg3Clx1MzA1N1x1MzA4MVx1MzA0NApcdTMwNTdcdTMwODFcdTMwOEIKXHUzMDU3XHUzMDgyXHUzMDkzClx1MzA1N1x1MzA4M1x1MzA0NFx1MzA5MwpcdTMwNTdcdTMwODNcdTMwNDZcdTMwOTMKXHUzMDU3XHUzMDgzXHUzMDRBXHUzMDkzClx1MzA1N1x1MzA5OVx1MzA4M1x1MzA0Qlx1MzA5OVx1MzA0NFx1MzA4MgpcdTMwNTdcdTMwODRcdTMwNEZcdTMwNTdcdTMwODcKXHUzMDU3XHUzMDgzXHUzMDRGXHUzMDdCXHUzMDQ2Clx1MzA1N1x1MzA4M1x1MzA1MVx1MzA5MwpcdTMwNTdcdTMwODNcdTMwNTMKXHUzMDU3XHUzMDgzXHUzMDU1XHUzMDk5XHUzMDQ0Clx1MzA1N1x1MzA4M1x1MzA1N1x1MzA5MwpcdTMwNTdcdTMwODNcdTMwNUJcdTMwOTMKXHUzMDU3XHUzMDgzXHUzMDVEXHUzMDQ2Clx1MzA1N1x1MzA4M1x1MzA1Rlx1MzA0NApcdTMwNTdcdTMwODNcdTMwNjFcdTMwODdcdTMwNDYKXHUzMDU3XHUzMDgzXHUzMDYzXHUzMDREXHUzMDkzClx1MzA1N1x1MzA5OVx1MzA4M1x1MzA3RQpcdTMwNTdcdTMwODNcdTMwOEFcdTMwOTMKXHUzMDU3XHUzMDgzXHUzMDhDXHUzMDQ0Clx1MzA1N1x1MzA5OVx1MzA4Nlx1MzA0NgpcdTMwNTdcdTMwOTlcdTMwODVcdTMwNDZcdTMwNTdcdTMwODcKXHUzMDU3XHUzMDg1XHUzMDRGXHUzMDZGXHUzMDRGClx1MzA1N1x1MzA5OVx1MzA4NVx1MzA1N1x1MzA5MwpcdTMwNTdcdTMwODVcdTMwNjNcdTMwNUJcdTMwNEQKXHUzMDU3XHUzMDg1XHUzMDdGClx1MzA1N1x1MzA4NVx1MzA4OVx1MzA2Rlx1MzA5OQpcdTMwNTdcdTMwOTlcdTMwODVcdTMwOTNcdTMwNkZcdTMwOTlcdTMwOTMKXHUzMDU3XHUzMDg3XHUzMDQ2XHUzMDRCXHUzMDQ0Clx1MzA1N1x1MzA4N1x1MzA0Rlx1MzA1Rlx1MzA0RgpcdTMwNTdcdTMwODdcdTMwNjNcdTMwNTFcdTMwOTMKXHUzMDU3XHUzMDg3XHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA1N1x1MzA4N1x1MzA4Mlx1MzA2NApcdTMwNTdcdTMwODlcdTMwNUJcdTMwOEIKXHUzMDU3XHUzMDg5XHUzMDc4XHUzMDk5XHUzMDhCClx1MzA1N1x1MzA5M1x1MzA0QgpcdTMwNTdcdTMwOTNcdTMwNTNcdTMwNDYKXHUzMDU3XHUzMDk5XHUzMDkzXHUzMDU3XHUzMDk5XHUzMDgzClx1MzA1N1x1MzA5M1x1MzA1Qlx1MzA0NFx1MzA1N1x1MzA5OQpcdTMwNTdcdTMwOTNcdTMwNjFcdTMwNEYKXHUzMDU3XHUzMDkzXHUzMDhBXHUzMDkzClx1MzA1OVx1MzA0Mlx1MzA1MVx1MzA5OQpcdTMwNTlcdTMwNDJcdTMwNTcKXHUzMDU5XHUzMDQyXHUzMDZBClx1MzA1OVx1MzA5OVx1MzA0Mlx1MzA5MwpcdTMwNTlcdTMwNDRcdTMwNDhcdTMwNDQKXHUzMDU5XHUzMDQ0XHUzMDRCClx1MzA1OVx1MzA0NFx1MzA2OFx1MzA0NgpcdTMwNTlcdTMwOTlcdTMwNDRcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDU5XHUzMDQ0XHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA1OVx1MzA0Nlx1MzA0Qlx1MzA5OVx1MzA0RgpcdTMwNTlcdTMwNDZcdTMwNTdcdTMwOTlcdTMwNjQKXHUzMDU5XHUzMDQ2XHUzMDVCXHUzMDkzClx1MzA1OVx1MzA0QVx1MzA2OFx1MzA5OVx1MzA4QQpcdTMwNTlcdTMwNERcdTMwN0UKXHUzMDU5XHUzMDRGXHUzMDQ2Clx1MzA1OVx1MzA0Rlx1MzA2QVx1MzA0NApcdTMwNTlcdTMwNTFcdTMwOEIKXHUzMDU5XHUzMDUzXHUzMDk5XHUzMDQ0Clx1MzA1OVx1MzA1M1x1MzA1NwpcdTMwNTlcdTMwOTlcdTMwNTVcdTMwOTMKXHUzMDU5XHUzMDU5XHUzMDk5XHUzMDU3XHUzMDQ0Clx1MzA1OVx1MzA1OVx1MzA4MApcdTMwNTlcdTMwNTlcdTMwODFcdTMwOEIKXHUzMDU5XHUzMDYzXHUzMDRCXHUzMDhBClx1MzA1OVx1MzA5OVx1MzA2M1x1MzA1N1x1MzA4QQpcdTMwNTlcdTMwOTlcdTMwNjNcdTMwNjgKXHUzMDU5XHUzMDY2XHUzMDREClx1MzA1OVx1MzA2Nlx1MzA4QgpcdTMwNTlcdTMwNkRcdTMwOEIKXHUzMDU5XHUzMDZFXHUzMDUzClx1MzA1OVx1MzA2Rlx1MzA1Rlx1MzA5OQpcdTMwNTlcdTMwNkZcdTMwOTlcdTMwODlcdTMwNTdcdTMwNDQKXHUzMDU5XHUzMDk5XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA1OVx1MzA5OVx1MzA3NVx1MzA5OVx1MzA2Q1x1MzA4QwpcdTMwNTlcdTMwNzVcdTMwOTlcdTMwOEEKXHUzMDU5XHUzMDc1XHUzMDhDClx1MzA1OVx1MzA3OFx1MzA5OVx1MzA2NgpcdTMwNTlcdTMwNzhcdTMwOTlcdTMwOEIKXHUzMDU5XHUzMDk5XHUzMDdCXHUzMDQ2Clx1MzA1OVx1MzA3Qlx1MzA5OVx1MzA5MwpcdTMwNTlcdTMwN0VcdTMwNDQKXHUzMDU5XHUzMDgxXHUzMDU3Clx1MzA1OVx1MzA4Mlx1MzA0NgpcdTMwNTlcdTMwODRcdTMwNEQKXHUzMDU5XHUzMDg5XHUzMDU5XHUzMDg5Clx1MzA1OVx1MzA4Qlx1MzA4MQpcdTMwNTlcdTMwOENcdTMwNjFcdTMwNEJcdTMwOTlcdTMwNDYKXHUzMDU5XHUzMDhEXHUzMDYzXHUzMDY4Clx1MzA1OVx1MzA4Rlx1MzA4QgpcdTMwNTlcdTMwOTNcdTMwNUJcdTMwOTlcdTMwOTMKXHUzMDU5XHUzMDkzXHUzMDdCXHUzMDlBXHUzMDQ2Clx1MzA1Qlx1MzA0Mlx1MzA3NVx1MzA5OVx1MzA4OQpcdTMwNUJcdTMwNDRcdTMwNEJcdTMwNjQKXHUzMDVCXHUzMDQ0XHUzMDUxXHUzMDk5XHUzMDkzClx1MzA1Qlx1MzA0NFx1MzA1N1x1MzA5OQpcdTMwNUJcdTMwNDRcdTMwODhcdTMwNDYKXHUzMDVCXHUzMDRBXHUzMDQ2Clx1MzA1Qlx1MzA0Qlx1MzA0NFx1MzA0Qlx1MzA5MwpcdTMwNUJcdTMwNERcdTMwNkJcdTMwOTMKXHUzMDVCXHUzMDREXHUzMDgwClx1MzA1Qlx1MzA0RFx1MzA4NgpcdTMwNUJcdTMwNERcdTMwODlcdTMwOTNcdTMwNDZcdTMwOTMKXHUzMDVCXHUzMDUxXHUzMDkzClx1MzA1Qlx1MzA1M1x1MzA0NgpcdTMwNUJcdTMwNTlcdTMwNTdcdTMwOTkKXHUzMDVCXHUzMDVGXHUzMDQ0Clx1MzA1Qlx1MzA1Rlx1MzA1MQpcdTMwNUJcdTMwNjNcdTMwNEJcdTMwNEYKXHUzMDVCXHUzMDYzXHUzMDREXHUzMDgzXHUzMDRGClx1MzA1Qlx1MzA5OVx1MzA2M1x1MzA0RgpcdTMwNUJcdTMwNjNcdTMwNTFcdTMwOTMKXHUzMDVCXHUzMDYzXHUzMDUzXHUzMDY0Clx1MzA1Qlx1MzA2M1x1MzA1NVx1MzA1Rlx1MzA0Rlx1MzA3RQpcdTMwNUJcdTMwNjRcdTMwNURcdTMwOTlcdTMwNEYKXHUzMDVCXHUzMDY0XHUzMDVGXHUzMDk5XHUzMDkzClx1MzA1Qlx1MzA2NFx1MzA2Nlx1MzA5OVx1MzA5MwpcdTMwNUJcdTMwNjNcdTMwNkZcdTMwOUFcdTMwOTMKXHUzMDVCXHUzMDY0XHUzMDcyXHUzMDk5Clx1MzA1Qlx1MzA2NFx1MzA3NVx1MzA5OVx1MzA5MwpcdTMwNUJcdTMwNjRcdTMwODFcdTMwNDQKXHUzMDVCXHUzMDY0XHUzMDhBXHUzMDY0Clx1MzA1Qlx1MzA2QVx1MzA0QgpcdTMwNUJcdTMwNkVcdTMwNzJcdTMwOTkKXHUzMDVCXHUzMDZGXHUzMDZGXHUzMDk5Clx1MzA1Qlx1MzA3Mlx1MzA5OVx1MzA4RApcdTMwNUJcdTMwN0JcdTMwOTlcdTMwNkQKXHUzMDVCXHUzMDdFXHUzMDQ0Clx1MzA1Qlx1MzA3RVx1MzA4QgpcdTMwNUJcdTMwODFcdTMwOEIKXHUzMDVCXHUzMDgyXHUzMDVGXHUzMDhDClx1MzA1Qlx1MzA4QVx1MzA3NQpcdTMwNUJcdTMwOTlcdTMwOTNcdTMwNDJcdTMwNEYKXHUzMDVCXHUzMDkzXHUzMDQ0Clx1MzA1Qlx1MzA5M1x1MzA0OFx1MzA0NApcdTMwNUJcdTMwOTNcdTMwNEIKXHUzMDVCXHUzMDkzXHUzMDREXHUzMDg3Clx1MzA1Qlx1MzA5M1x1MzA0RgpcdTMwNUJcdTMwOTNcdTMwNTFcdTMwOTlcdTMwOTMKXHUzMDVCXHUzMDk5XHUzMDkzXHUzMDUzXHUzMDk5Clx1MzA1Qlx1MzA5M1x1MzA1NVx1MzA0NApcdTMwNUJcdTMwOTNcdTMwNTdcdTMwODUKXHUzMDVCXHUzMDkzXHUzMDU5XHUzMDQ0Clx1MzA1Qlx1MzA5M1x1MzA1Qlx1MzA0NApcdTMwNUJcdTMwOTNcdTMwNURcdTMwOTkKXHUzMDVCXHUzMDkzXHUzMDVGXHUzMDRGClx1MzA1Qlx1MzA5M1x1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNUJcdTMwOTNcdTMwNjZcdTMwNDQKXHUzMDVCXHUzMDkzXHUzMDY4XHUzMDQ2Clx1MzA1Qlx1MzA5M1x1MzA2Q1x1MzA0RApcdTMwNUJcdTMwOTNcdTMwNkRcdTMwOTMKXHUzMDVCXHUzMDkzXHUzMDZGXHUzMDlBXHUzMDQ0Clx1MzA1Qlx1MzA5OVx1MzA5M1x1MzA3NVx1MzA5OQpcdTMwNUJcdTMwOTlcdTMwOTNcdTMwN0JcdTMwOUFcdTMwNDYKXHUzMDVCXHUzMDkzXHUzMDgwClx1MzA1Qlx1MzA5M1x1MzA4MVx1MzA5M1x1MzA1N1x1MzA5OVx1MzA4NwpcdTMwNUJcdTMwOTNcdTMwODJcdTMwOTMKXHUzMDVCXHUzMDkzXHUzMDg0XHUzMDRGClx1MzA1Qlx1MzA5M1x1MzA4Nlx1MzA0NgpcdTMwNUJcdTMwOTNcdTMwODhcdTMwNDYKXHUzMDVCXHUzMDk5XHUzMDkzXHUzMDg5Clx1MzA1Qlx1MzA5OVx1MzA5M1x1MzA4QVx1MzA4M1x1MzA0RgpcdTMwNUJcdTMwOTNcdTMwOENcdTMwNDQKXHUzMDVCXHUzMDkzXHUzMDhEClx1MzA1RFx1MzA0Mlx1MzA0RgpcdTMwNURcdTMwNDRcdTMwNjhcdTMwNTFcdTMwOTlcdTMwOEIKXHUzMDVEXHUzMDQ0XHUzMDZEClx1MzA1RFx1MzA0Nlx1MzA0Qlx1MzA5OVx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0NgpcdTMwNURcdTMwNDZcdTMwNEQKXHUzMDVEXHUzMDQ2XHUzMDUzXHUzMDk5Clx1MzA1RFx1MzA0Nlx1MzA1N1x1MzA5MwpcdTMwNURcdTMwNDZcdTMwNUZcdTMwOTlcdTMwOTMKXHUzMDVEXHUzMDQ2XHUzMDZBXHUzMDkzClx1MzA1RFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNURcdTMwNDZcdTMwODFcdTMwOTMKXHUzMDVEXHUzMDQ2XHUzMDhBClx1MzA1RFx1MzA0OFx1MzA4Mlx1MzA2RQpcdTMwNURcdTMwNDhcdTMwOTMKXHUzMDVEXHUzMDRCXHUzMDk5XHUzMDQ0Clx1MzA1RFx1MzA1MVx1MzA5OVx1MzA0RApcdTMwNURcdTMwNTNcdTMwNDYKXHUzMDVEXHUzMDUzXHUzMDVEXHUzMDUzClx1MzA1RFx1MzA1NVx1MzA5OVx1MzA0NApcdTMwNURcdTMwNTdcdTMwNkEKXHUzMDVEXHUzMDVCXHUzMDQ0Clx1MzA1RFx1MzA1Qlx1MzA5MwpcdTMwNURcdTMwNURcdTMwNEZcdTMwOTkKXHUzMDVEXHUzMDVGXHUzMDk5XHUzMDY2XHUzMDhCClx1MzA1RFx1MzA2NFx1MzA0NgpcdTMwNURcdTMwNjRcdTMwNDhcdTMwOTMKXHUzMDVEXHUzMDYzXHUzMDRCXHUzMDkzClx1MzA1RFx1MzA2NFx1MzA0RFx1MzA5OVx1MzA4N1x1MzA0NgpcdTMwNURcdTMwNjNcdTMwNTFcdTMwNjQKXHUzMDVEXHUzMDYzXHUzMDUzXHUzMDQ2Clx1MzA1RFx1MzA2M1x1MzA1Qlx1MzA5MwpcdTMwNURcdTMwNjNcdTMwNjgKXHUzMDVEXHUzMDY4XHUzMDRCXHUzMDk5XHUzMDhGClx1MzA1RFx1MzA2OFx1MzA2NFx1MzA5OVx1MzA4OQpcdTMwNURcdTMwNkFcdTMwNDhcdTMwOEIKXHUzMDVEXHUzMDZBXHUzMDVGClx1MzA1RFx1MzA3NVx1MzA3Qlx1MzA5OQpcdTMwNURcdTMwN0JcdTMwOTlcdTMwNEYKXHUzMDVEXHUzMDdCXHUzMDk5XHUzMDhEClx1MzA1RFx1MzA3RVx1MzA2NApcdTMwNURcdTMwN0VcdTMwOEIKXHUzMDVEXHUzMDgwXHUzMDRGClx1MzA1RFx1MzA4MFx1MzA4QVx1MzA0OApcdTMwNURcdTMwODFcdTMwOEIKXHUzMDVEXHUzMDgyXHUzMDVEXHUzMDgyClx1MzA1RFx1MzA4OFx1MzA0Qlx1MzA1Qlx1MzA5OQpcdTMwNURcdTMwODlcdTMwN0VcdTMwODEKXHUzMDVEXHUzMDhEXHUzMDQ2Clx1MzA1RFx1MzA5M1x1MzA0Qlx1MzA0NApcdTMwNURcdTMwOTNcdTMwNTFcdTMwNDQKXHUzMDVEXHUzMDkzXHUzMDU1XHUzMDk5XHUzMDQ0Clx1MzA1RFx1MzA5M1x1MzA1N1x1MzA2NApcdTMwNURcdTMwOTNcdTMwNURcdTMwOTlcdTMwNEYKXHUzMDVEXHUzMDkzXHUzMDYxXHUzMDg3XHUzMDQ2Clx1MzA1RFx1MzA5OVx1MzA5M1x1MzA3Mlx1MzA5OQpcdTMwNURcdTMwOTlcdTMwOTNcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDVEXHUzMDkzXHUzMDdGXHUzMDkzClx1MzA1Rlx1MzA0Mlx1MzA0NApcdTMwNUZcdTMwNDRcdTMwNDRcdTMwOTMKXHUzMDVGXHUzMDQ0XHUzMDQ2XHUzMDkzClx1MzA1Rlx1MzA0NFx1MzA0OFx1MzA0RApcdTMwNUZcdTMwNDRcdTMwNEFcdTMwNDYKXHUzMDVGXHUzMDk5XHUzMDQ0XHUzMDRCXHUzMDk5XHUzMDRGClx1MzA1Rlx1MzA0NFx1MzA0RApcdTMwNUZcdTMwNDRcdTMwNEZcdTMwOTlcdTMwNDYKXHUzMDVGXHUzMDQ0XHUzMDUxXHUzMDkzClx1MzA1Rlx1MzA0NFx1MzA1MwpcdTMwNUZcdTMwNDRcdTMwNTVcdTMwOTlcdTMwNDQKXHUzMDVGXHUzMDk5XHUzMDQ0XHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2XHUzMDc1XHUzMDk5Clx1MzA1Rlx1MzA5OVx1MzA0NFx1MzA1OVx1MzA0RApcdTMwNUZcdTMwNDRcdTMwNUJcdTMwNjQKXHUzMDVGXHUzMDQ0XHUzMDVEXHUzMDQ2Clx1MzA1Rlx1MzA5OVx1MzA0NFx1MzA1Rlx1MzA0NApcdTMwNUZcdTMwNDRcdTMwNjFcdTMwODdcdTMwNDYKXHUzMDVGXHUzMDQ0XHUzMDY2XHUzMDQ0Clx1MzA1Rlx1MzA5OVx1MzA0NFx1MzA2OFx1MzA5OVx1MzA1M1x1MzA4RApcdTMwNUZcdTMwNDRcdTMwNkFcdTMwNDQKXHUzMDVGXHUzMDQ0XHUzMDZEXHUzMDY0Clx1MzA1Rlx1MzA0NFx1MzA2RVx1MzA0NgpcdTMwNUZcdTMwNDRcdTMwNkZcdTMwOTMKXHUzMDVGXHUzMDk5XHUzMDQ0XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA1Rlx1MzA0NFx1MzA3NVx1MzA0NgpcdTMwNUZcdTMwNDRcdTMwNzhcdTMwOTMKXHUzMDVGXHUzMDQ0XHUzMDdCClx1MzA1Rlx1MzA0NFx1MzA3RVx1MzA2NFx1MzA2Rlx1MzA5OVx1MzA2QQpcdTMwNUZcdTMwNDRcdTMwN0ZcdTMwOTNcdTMwNEZcdTMwOTkKXHUzMDVGXHUzMDQ0XHUzMDgwClx1MzA1Rlx1MzA0NFx1MzA4MVx1MzA5MwpcdTMwNUZcdTMwNDRcdTMwODRcdTMwNEQKXHUzMDVGXHUzMDQ0XHUzMDg4XHUzMDQ2Clx1MzA1Rlx1MzA0NFx1MzA4OQpcdTMwNUZcdTMwNDRcdTMwOEFcdTMwODdcdTMwNEYKXHUzMDVGXHUzMDQ0XHUzMDhCClx1MzA1Rlx1MzA0NFx1MzA4Rlx1MzA5MwpcdTMwNUZcdTMwNDZcdTMwNDgKXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA1Rlx1MzA0QVx1MzA1OQpcdTMwNUZcdTMwNEFcdTMwOEIKXHUzMDVGXHUzMDRBXHUzMDhDXHUzMDhCClx1MzA1Rlx1MzA0Qlx1MzA0NApcdTMwNUZcdTMwNEJcdTMwNkQKXHUzMDVGXHUzMDREXHUzMDcyXHUzMDk5Clx1MzA1Rlx1MzA0Rlx1MzA1NVx1MzA5MwpcdTMwNUZcdTMwNTNcdTMwNEYKXHUzMDVGXHUzMDUzXHUzMDg0XHUzMDREClx1MzA1Rlx1MzA1NVx1MzA0NApcdTMwNUZcdTMwNTdcdTMwNTVcdTMwOTlcdTMwOTMKXHUzMDVGXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDgzXHUzMDhDClx1MzA1Rlx1MzA1OVx1MzA1MVx1MzA4QgpcdTMwNUZcdTMwNTlcdTMwOTlcdTMwNTVcdTMwOEZcdTMwOEIKXHUzMDVGXHUzMDVEXHUzMDRCXHUzMDk5XHUzMDhDClx1MzA1Rlx1MzA1Rlx1MzA0Qlx1MzA0NgpcdTMwNUZcdTMwNUZcdTMwNEYKXHUzMDVGXHUzMDVGXHUzMDk5XHUzMDU3XHUzMDQ0Clx1MzA1Rlx1MzA1Rlx1MzA3RgpcdTMwNUZcdTMwNjFcdTMwNkZcdTMwOTlcdTMwNkEKXHUzMDVGXHUzMDk5XHUzMDYzXHUzMDRCXHUzMDQ0Clx1MzA1Rlx1MzA5OVx1MzA2M1x1MzA0RFx1MzA4M1x1MzA0RgpcdTMwNUZcdTMwOTlcdTMwNjNcdTMwNTMKXHUzMDVGXHUzMDk5XHUzMDYzXHUzMDU3XHUzMDg1XHUzMDY0Clx1MzA1Rlx1MzA5OVx1MzA2M1x1MzA1Rlx1MzA0NApcdTMwNUZcdTMwNjZcdTMwOEIKXHUzMDVGXHUzMDY4XHUzMDQ4XHUzMDhCClx1MzA1Rlx1MzA2QVx1MzA2Rlx1MzA5OVx1MzA1RgpcdTMwNUZcdTMwNkJcdTMwOTMKXHUzMDVGXHUzMDZDXHUzMDREClx1MzA1Rlx1MzA2RVx1MzA1N1x1MzA3RgpcdTMwNUZcdTMwNkZcdTMwNjQKXHUzMDVGXHUzMDc1XHUzMDk5XHUzMDkzClx1MzA1Rlx1MzA3OFx1MzA5OVx1MzA4QgpcdTMwNUZcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDVGXHUzMDdFXHUzMDUzXHUzMDk5Clx1MzA1Rlx1MzA3RVx1MzA4QgpcdTMwNUZcdTMwOTlcdTMwODBcdTMwOEIKXHUzMDVGXHUzMDgxXHUzMDQ0XHUzMDREClx1MzA1Rlx1MzA4MVx1MzA1OQpcdTMwNUZcdTMwODFcdTMwOEIKXHUzMDVGXHUzMDgyXHUzMDY0Clx1MzA1Rlx1MzA4NFx1MzA1OVx1MzA0NApcdTMwNUZcdTMwODhcdTMwOEIKXHUzMDVGXHUzMDg5XHUzMDU5Clx1MzA1Rlx1MzA4QVx1MzA0RFx1MzA3Qlx1MzA5M1x1MzA0Qlx1MzA5OVx1MzA5MwpcdTMwNUZcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDVGXHUzMDhBXHUzMDhCClx1MzA1Rlx1MzA4Qlx1MzA2OApcdTMwNUZcdTMwOENcdTMwOEIKXHUzMDVGXHUzMDhDXHUzMDkzXHUzMDY4Clx1MzA1Rlx1MzA4RFx1MzA2M1x1MzA2OApcdTMwNUZcdTMwOEZcdTMwODBcdTMwOENcdTMwOEIKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDQyXHUzMDY0Clx1MzA1Rlx1MzA5M1x1MzA0NApcdTMwNUZcdTMwOTNcdTMwNEFcdTMwOTMKXHUzMDVGXHUzMDkzXHUzMDRCClx1MzA1Rlx1MzA5M1x1MzA0RApcdTMwNUZcdTMwOTNcdTMwNTFcdTMwOTMKXHUzMDVGXHUzMDkzXHUzMDUzXHUzMDk5Clx1MzA1Rlx1MzA5M1x1MzA1NVx1MzA5MwpcdTMwNUZcdTMwOTNcdTMwNTdcdTMwOTlcdTMwODdcdTMwNDZcdTMwNzJcdTMwOTkKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDVCXHUzMDQ0Clx1MzA1Rlx1MzA5M1x1MzA1RFx1MzA0RgpcdTMwNUZcdTMwOTNcdTMwNUZcdTMwNDQKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDYxClx1MzA1Rlx1MzA5M1x1MzA2Nlx1MzA0NApcdTMwNUZcdTMwOTNcdTMwNjhcdTMwNDYKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDZBClx1MzA1Rlx1MzA5M1x1MzA2Qlx1MzA5MwpcdTMwNUZcdTMwOTlcdTMwOTNcdTMwNkRcdTMwNjQKXHUzMDVGXHUzMDkzXHUzMDZFXHUzMDQ2Clx1MzA1Rlx1MzA5M1x1MzA3Mlx1MzA5QVx1MzA5MwpcdTMwNUZcdTMwOTlcdTMwOTNcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDVGXHUzMDkzXHUzMDdFXHUzMDY0Clx1MzA1Rlx1MzA5M1x1MzA4MVx1MzA0NApcdTMwNUZcdTMwOTlcdTMwOTNcdTMwOENcdTMwNjQKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDhEClx1MzA1Rlx1MzA5OVx1MzA5M1x1MzA4RgpcdTMwNjFcdTMwNDJcdTMwNDQKXHUzMDYxXHUzMDQyXHUzMDkzClx1MzA2MVx1MzA0NFx1MzA0RApcdTMwNjFcdTMwNDRcdTMwNTVcdTMwNDQKXHUzMDYxXHUzMDQ4XHUzMDkzClx1MzA2MVx1MzA0Qlx1MzA0NApcdTMwNjFcdTMwNEJcdTMwODkKXHUzMDYxXHUzMDREXHUzMDg1XHUzMDQ2Clx1MzA2MVx1MzA0RFx1MzA5MwpcdTMwNjFcdTMwNTFcdTMwNDRcdTMwNTlcdTMwOTkKXHUzMDYxXHUzMDUxXHUzMDkzClx1MzA2MVx1MzA1M1x1MzA0RgpcdTMwNjFcdTMwNTVcdTMwNDQKXHUzMDYxXHUzMDU3XHUzMDREClx1MzA2MVx1MzA1N1x1MzA4QVx1MzA4N1x1MzA0NgpcdTMwNjFcdTMwNUJcdTMwNDQKXHUzMDYxXHUzMDVEXHUzMDQ2Clx1MzA2MVx1MzA1Rlx1MzA0NApcdTMwNjFcdTMwNUZcdTMwOTMKXHUzMDYxXHUzMDYxXHUzMDRBXHUzMDg0Clx1MzA2MVx1MzA2NFx1MzA1N1x1MzA5OVx1MzA4NwpcdTMwNjFcdTMwNjZcdTMwNEQKXHUzMDYxXHUzMDY2XHUzMDkzClx1MzA2MVx1MzA2Q1x1MzA0RApcdTMwNjFcdTMwNkNcdTMwOEEKXHUzMDYxXHUzMDZFXHUzMDQ2Clx1MzA2MVx1MzA3Mlx1MzA4N1x1MzA0NgpcdTMwNjFcdTMwNzhcdTMwNDRcdTMwNUJcdTMwOTMKXHUzMDYxXHUzMDdCXHUzMDQ2Clx1MzA2MVx1MzA3RVx1MzA1RgpcdTMwNjFcdTMwN0ZcdTMwNjQKXHUzMDYxXHUzMDdGXHUzMDY4XHUzMDk5XHUzMDhEClx1MzA2MVx1MzA4MVx1MzA0NFx1MzA2OFx1MzA5OQpcdTMwNjFcdTMwODNcdTMwOTNcdTMwNTNcdTMwNkFcdTMwNzhcdTMwOTkKXHUzMDYxXHUzMDg1XHUzMDQ2XHUzMDQ0Clx1MzA2MVx1MzA4Nlx1MzA4QVx1MzA4N1x1MzA0RgpcdTMwNjFcdTMwODdcdTMwNDZcdTMwNTcKXHUzMDYxXHUzMDg3XHUzMDU1XHUzMDRGXHUzMDUxXHUzMDkzClx1MzA2MVx1MzA4OVx1MzA1NwpcdTMwNjFcdTMwODlcdTMwN0YKXHUzMDYxXHUzMDhBXHUzMDRCXHUzMDk5XHUzMDdGClx1MzA2MVx1MzA4QVx1MzA4N1x1MzA0NgpcdTMwNjFcdTMwOEJcdTMwNjhcdTMwOTkKXHUzMDYxXHUzMDhGXHUzMDhGClx1MzA2MVx1MzA5M1x1MzA1Rlx1MzA0NApcdTMwNjFcdTMwOTNcdTMwODJcdTMwNEYKXHUzMDY0XHUzMDQ0XHUzMDRCClx1MzA2NFx1MzA0NFx1MzA1Rlx1MzA2MQpcdTMwNjRcdTMwNDZcdTMwNEIKXHUzMDY0XHUzMDQ2XHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA2NFx1MzA0Nlx1MzA2Rlx1MzA5MwpcdTMwNjRcdTMwNDZcdTMwOEYKXHUzMDY0XHUzMDRCXHUzMDQ2Clx1MzA2NFx1MzA0Qlx1MzA4Q1x1MzA4QgpcdTMwNjRcdTMwNEZcdTMwNkQKXHUzMDY0XHUzMDRGXHUzMDhCClx1MzA2NFx1MzA1MVx1MzA2RApcdTMwNjRcdTMwNTFcdTMwOEIKXHUzMDY0XHUzMDUzXHUzMDk5XHUzMDQ2Clx1MzA2NFx1MzA1Rlx1MzA0OFx1MzA4QgpcdTMwNjRcdTMwNjRcdTMwOTlcdTMwNEYKXHUzMDY0XHUzMDY0XHUzMDU3XHUzMDk5Clx1MzA2NFx1MzA2NFx1MzA4MApcdTMwNjRcdTMwNjhcdTMwODFcdTMwOEIKXHUzMDY0XHUzMDZBXHUzMDRCXHUzMDk5XHUzMDhCClx1MzA2NFx1MzA2QVx1MzA3RgpcdTMwNjRcdTMwNkRcdTMwNjRcdTMwOTlcdTMwNkQKXHUzMDY0XHUzMDZFXHUzMDhCClx1MzA2NFx1MzA3NVx1MzA5OVx1MzA1OQpcdTMwNjRcdTMwN0VcdTMwODlcdTMwNkFcdTMwNDQKXHUzMDY0XHUzMDdFXHUzMDhCClx1MzA2NFx1MzA3Rlx1MzA0RApcdTMwNjRcdTMwODFcdTMwNUZcdTMwNDQKXHUzMDY0XHUzMDgyXHUzMDhBClx1MzA2NFx1MzA4Mlx1MzA4QgpcdTMwNjRcdTMwODhcdTMwNDQKXHUzMDY0XHUzMDhCXHUzMDdCXHUzMDk5Clx1MzA2NFx1MzA4Qlx1MzA3Rlx1MzA0RgpcdTMwNjRcdTMwOEZcdTMwODJcdTMwNkUKXHUzMDY0XHUzMDhGXHUzMDhBClx1MzA2Nlx1MzA0Mlx1MzA1NwpcdTMwNjZcdTMwNDJcdTMwNjYKXHUzMDY2XHUzMDQyXHUzMDdGClx1MzA2Nlx1MzA0NFx1MzA0QVx1MzA5MwpcdTMwNjZcdTMwNDRcdTMwNEIKXHUzMDY2XHUzMDQ0XHUzMDREClx1MzA2Nlx1MzA0NFx1MzA1MVx1MzA0NApcdTMwNjZcdTMwNDRcdTMwNTNcdTMwNEYKXHUzMDY2XHUzMDQ0XHUzMDU1XHUzMDY0Clx1MzA2Nlx1MzA0NFx1MzA1NwpcdTMwNjZcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDY2XHUzMDQ0XHUzMDVGXHUzMDQ0Clx1MzA2Nlx1MzA0NFx1MzA2OFx1MzA5OQpcdTMwNjZcdTMwNDRcdTMwNkRcdTMwNDQKXHUzMDY2XHUzMDQ0XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA2Nlx1MzA0NFx1MzA3OFx1MzA5MwpcdTMwNjZcdTMwNDRcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDY2XHUzMDQ2XHUzMDYxClx1MzA2Nlx1MzA0QVx1MzA0Rlx1MzA4QwpcdTMwNjZcdTMwNERcdTMwNjhcdTMwNDYKXHUzMDY2XHUzMDRGXHUzMDcyXHUzMDk5Clx1MzA2Nlx1MzA5OVx1MzA1M1x1MzA3Qlx1MzA5OVx1MzA1MwpcdTMwNjZcdTMwNTVcdTMwNERcdTMwOTlcdTMwODdcdTMwNDYKXHUzMDY2XHUzMDU1XHUzMDUxXHUzMDk5Clx1MzA2Nlx1MzA1OVx1MzA4QQpcdTMwNjZcdTMwNURcdTMwNDYKXHUzMDY2XHUzMDYxXHUzMDRCXHUzMDk5XHUzMDQ0Clx1MzA2Nlx1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNjZcdTMwNjRcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDY2XHUzMDY0XHUzMDY0XHUzMDk5XHUzMDREClx1MzA2Nlx1MzA5OVx1MzA2M1x1MzA2Rlx1MzA5QQpcdTMwNjZcdTMwNjRcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDY2XHUzMDY0XHUzMDg0Clx1MzA2Nlx1MzA5OVx1MzA2Q1x1MzA0Qlx1MzA0OApcdTMwNjZcdTMwNkNcdTMwNEQKXHUzMDY2XHUzMDZDXHUzMDRGXHUzMDk5XHUzMDQ0Clx1MzA2Nlx1MzA2RVx1MzA3Mlx1MzA4OQpcdTMwNjZcdTMwNkZcdTMwNDQKXHUzMDY2XHUzMDc1XHUzMDk5XHUzMDRGXHUzMDhEClx1MzA2Nlx1MzA3NVx1MzA1Rlx1MzA5OQpcdTMwNjZcdTMwN0JcdTMwNjhcdTMwOTlcdTMwNEQKXHUzMDY2XHUzMDdCXHUzMDkzClx1MzA2Nlx1MzA3RVx1MzA0OApcdTMwNjZcdTMwN0VcdTMwNERcdTMwNTlcdTMwOTlcdTMwNTcKXHUzMDY2XHUzMDdGXHUzMDU3XHUzMDk5XHUzMDRCClx1MzA2Nlx1MzA3Rlx1MzA4NFx1MzA1MVx1MzA5OQpcdTMwNjZcdTMwODlcdTMwNTkKXHUzMDY2XHUzMDhDXHUzMDcyXHUzMDk5Clx1MzA2Nlx1MzA4Rlx1MzA1MQpcdTMwNjZcdTMwOEZcdTMwNUZcdTMwNTcKXHUzMDY2XHUzMDk5XHUzMDkzXHUzMDQyXHUzMDY0Clx1MzA2Nlx1MzA5M1x1MzA0NFx1MzA5MwpcdTMwNjZcdTMwOTNcdTMwNEJcdTMwNDQKXHUzMDY2XHUzMDkzXHUzMDREClx1MzA2Nlx1MzA5M1x1MzA0Rlx1MzA5OQpcdTMwNjZcdTMwOTNcdTMwNTFcdTMwOTMKXHUzMDY2XHUzMDkzXHUzMDUzXHUzMDk5XHUzMDRGClx1MzA2Nlx1MzA5M1x1MzA1NVx1MzA0NApcdTMwNjZcdTMwOTNcdTMwNTcKXHUzMDY2XHUzMDkzXHUzMDU5XHUzMDQ2Clx1MzA2Nlx1MzA5OVx1MzA5M1x1MzA2MQpcdTMwNjZcdTMwOTNcdTMwNjZcdTMwNEQKXHUzMDY2XHUzMDkzXHUzMDY4XHUzMDQ2Clx1MzA2Nlx1MzA5M1x1MzA2QVx1MzA0NApcdTMwNjZcdTMwOTNcdTMwNzVcdTMwOUFcdTMwODkKXHUzMDY2XHUzMDkzXHUzMDdCXHUzMDk5XHUzMDQ2XHUzMDVGXHUzMDk5XHUzMDQ0Clx1MzA2Nlx1MzA5M1x1MzA4MVx1MzA2NApcdTMwNjZcdTMwOTNcdTMwODlcdTMwOTNcdTMwNEJcdTMwNDQKXHUzMDY2XHUzMDk5XHUzMDkzXHUzMDhBXHUzMDg3XHUzMDRGClx1MzA2Nlx1MzA5OVx1MzA5M1x1MzA4RgpcdTMwNjhcdTMwOTlcdTMwNDJcdTMwNDQKXHUzMDY4XHUzMDQ0XHUzMDhDClx1MzA2OFx1MzA5OVx1MzA0Nlx1MzA0Qlx1MzA5MwpcdTMwNjhcdTMwNDZcdTMwNERcdTMwODVcdTMwNDYKXHUzMDY4XHUzMDk5XHUzMDQ2XHUzMDRGXHUzMDk5Clx1MzA2OFx1MzA0Nlx1MzA1NwpcdTMwNjhcdTMwNDZcdTMwODBcdTMwNERcdTMwOTkKXHUzMDY4XHUzMDRBXHUzMDQ0Clx1MzA2OFx1MzA0QVx1MzA0QgpcdTMwNjhcdTMwNEFcdTMwNEYKXHUzMDY4XHUzMDRBXHUzMDU5Clx1MzA2OFx1MzA0QVx1MzA4QgpcdTMwNjhcdTMwNEJcdTMwNDQKXHUzMDY4XHUzMDRCXHUzMDU5Clx1MzA2OFx1MzA0RFx1MzA0QVx1MzA4QQpcdTMwNjhcdTMwNERcdTMwNjhcdTMwOTlcdTMwNEQKXHUzMDY4XHUzMDRGXHUzMDQ0Clx1MzA2OFx1MzA0Rlx1MzA1N1x1MzA4NVx1MzA0NgpcdTMwNjhcdTMwNEZcdTMwNjZcdTMwOTMKXHUzMDY4XHUzMDRGXHUzMDZCClx1MzA2OFx1MzA0Rlx1MzA3OFx1MzA5OVx1MzA2NApcdTMwNjhcdTMwNTFcdTMwNDQKXHUzMDY4XHUzMDUxXHUzMDhCClx1MzA2OFx1MzA1M1x1MzA4NApcdTMwNjhcdTMwNTVcdTMwNEIKXHUzMDY4XHUzMDU3XHUzMDg3XHUzMDRCXHUzMDkzClx1MzA2OFx1MzA1RFx1MzA0NgpcdTMwNjhcdTMwNUZcdTMwOTMKXHUzMDY4XHUzMDYxXHUzMDg1XHUzMDQ2Clx1MzA2OFx1MzA2M1x1MzA0RFx1MzA4NVx1MzA0NgpcdTMwNjhcdTMwNjNcdTMwNEZcdTMwOTMKXHUzMDY4XHUzMDY0XHUzMDVCXHUzMDk5XHUzMDkzClx1MzA2OFx1MzA2NFx1MzA2Qlx1MzA4NVx1MzA0NgpcdTMwNjhcdTMwNjhcdTMwOTlcdTMwNTFcdTMwOEIKXHUzMDY4XHUzMDY4XHUzMDZFXHUzMDQ4XHUzMDhCClx1MzA2OFx1MzA2QVx1MzA0NApcdTMwNjhcdTMwNkFcdTMwNDhcdTMwOEIKXHUzMDY4XHUzMDZBXHUzMDhBClx1MzA2OFx1MzA2RVx1MzA1NVx1MzA3RQpcdTMwNjhcdTMwNkZcdTMwOTlcdTMwNTkKXHUzMDY4XHUzMDk5XHUzMDc1XHUzMDk5XHUzMDRCXHUzMDk5XHUzMDhGClx1MzA2OFx1MzA3Qlx1MzA0NgpcdTMwNjhcdTMwN0VcdTMwOEIKXHUzMDY4XHUzMDgxXHUzMDhCClx1MzA2OFx1MzA4Mlx1MzA1Rlx1MzA5OVx1MzA2MQpcdTMwNjhcdTMwODJcdTMwOEIKXHUzMDY4XHUzMDk5XHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA2OFx1MzA4OVx1MzA0OFx1MzA4QgpcdTMwNjhcdTMwOTNcdTMwNEJcdTMwNjQKXHUzMDY4XHUzMDk5XHUzMDkzXHUzMDc1XHUzMDk5XHUzMDhBClx1MzA2QVx1MzA0NFx1MzA0Qlx1MzA0RgpcdTMwNkFcdTMwNDRcdTMwNTNcdTMwNDYKXHUzMDZBXHUzMDQ0XHUzMDU3XHUzMDg3Clx1MzA2QVx1MzA0NFx1MzA1OQpcdTMwNkFcdTMwNDRcdTMwNUJcdTMwOTMKXHUzMDZBXHUzMDQ0XHUzMDVEXHUzMDQ2Clx1MzA2QVx1MzA0QVx1MzA1OQpcdTMwNkFcdTMwNEJcdTMwOTlcdTMwNDQKXHUzMDZBXHUzMDRGXHUzMDU5Clx1MzA2QVx1MzA1MVx1MzA5OVx1MzA4QgpcdTMwNkFcdTMwNTNcdTMwNDZcdTMwNjhcdTMwOTkKXHUzMDZBXHUzMDU1XHUzMDUxClx1MzA2QVx1MzA1Rlx1MzA2Nlx1MzA5OVx1MzA1M1x1MzA1MwpcdTMwNkFcdTMwNjNcdTMwNjhcdTMwNDYKXHUzMDZBXHUzMDY0XHUzMDg0XHUzMDU5XHUzMDdGClx1MzA2QVx1MzA2QVx1MzA0QVx1MzA1NwpcdTMwNkFcdTMwNkJcdTMwNTNcdTMwOTlcdTMwNjgKXHUzMDZBXHUzMDZCXHUzMDgyXHUzMDZFClx1MzA2QVx1MzA2Qlx1MzA4RgpcdTMwNkFcdTMwNkVcdTMwNEIKXHUzMDZBXHUzMDc1XHUzMDVGXHUzMDk5Clx1MzA2QVx1MzA3RVx1MzA0NFx1MzA0RApcdTMwNkFcdTMwN0VcdTMwNDgKXHUzMDZBXHUzMDdFXHUzMDdGClx1MzA2QVx1MzA3Rlx1MzA1Rlx1MzA5OQpcdTMwNkFcdTMwODFcdTMwODlcdTMwNEIKXHUzMDZBXHUzMDgxXHUzMDhCClx1MzA2QVx1MzA4NFx1MzA4MApcdTMwNkFcdTMwODlcdTMwNDYKXHUzMDZBXHUzMDg5XHUzMDcyXHUzMDk5Clx1MzA2QVx1MzA4OVx1MzA3NVx1MzA5OQpcdTMwNkFcdTMwOENcdTMwOEIKXHUzMDZBXHUzMDhGXHUzMDY4XHUzMDcyXHUzMDk5Clx1MzA2QVx1MzA4Rlx1MzA2Rlx1MzA5OVx1MzA4QQpcdTMwNkJcdTMwNDJcdTMwNDYKXHUzMDZCXHUzMDQ0XHUzMDRCXHUzMDk5XHUzMDVGClx1MzA2Qlx1MzA0Nlx1MzA1MQpcdTMwNkJcdTMwNEFcdTMwNDQKXHUzMDZCXHUzMDRCXHUzMDQ0Clx1MzA2Qlx1MzA0Qlx1MzA5OVx1MzA2NgpcdTMwNkJcdTMwNERcdTMwNzJcdTMwOTkKXHUzMDZCXHUzMDRGXHUzMDU3XHUzMDdGClx1MzA2Qlx1MzA0Rlx1MzA3RVx1MzA5MwpcdTMwNkJcdTMwNTFcdTMwOTlcdTMwOEIKXHUzMDZCXHUzMDU1XHUzMDkzXHUzMDRCXHUzMDVGXHUzMDkzXHUzMDVEClx1MzA2Qlx1MzA1N1x1MzA0RApcdTMwNkJcdTMwNUJcdTMwODJcdTMwNkUKXHUzMDZCXHUzMDYxXHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA2Qlx1MzA2MVx1MzA4OFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNkJcdTMwNjNcdTMwNEIKXHUzMDZCXHUzMDYzXHUzMDREClx1MzA2Qlx1MzA2M1x1MzA1MVx1MzA0NApcdTMwNkJcdTMwNjNcdTMwNTNcdTMwNDYKXHUzMDZCXHUzMDYzXHUzMDU1XHUzMDkzClx1MzA2Qlx1MzA2M1x1MzA1N1x1MzA4N1x1MzA0RgpcdTMwNkJcdTMwNjNcdTMwNTlcdTMwNDYKXHUzMDZCXHUzMDYzXHUzMDVCXHUzMDREClx1MzA2Qlx1MzA2M1x1MzA2Nlx1MzA0NApcdTMwNkJcdTMwNkFcdTMwNDYKXHUzMDZCXHUzMDdCXHUzMDkzClx1MzA2Qlx1MzA3RVx1MzA4MQpcdTMwNkJcdTMwODJcdTMwNjQKXHUzMDZCXHUzMDg0XHUzMDhBClx1MzA2Qlx1MzA4NVx1MzA0Nlx1MzA0NFx1MzA5MwpcdTMwNkJcdTMwOEFcdTMwOTNcdTMwNTdcdTMwODMKXHUzMDZCXHUzMDhGXHUzMDY4XHUzMDhBClx1MzA2Qlx1MzA5M1x1MzA0NApcdTMwNkJcdTMwOTNcdTMwNEIKXHUzMDZCXHUzMDkzXHUzMDREClx1MzA2Qlx1MzA5M1x1MzA1MVx1MzA5OVx1MzA5MwpcdTMwNkJcdTMwOTNcdTMwNTdcdTMwNEQKXHUzMDZCXHUzMDkzXHUzMDU5XHUzMDk5XHUzMDQ2Clx1MzA2Qlx1MzA5M1x1MzA1RFx1MzA0NgpcdTMwNkJcdTMwOTNcdTMwNUZcdTMwNDQKXHUzMDZCXHUzMDkzXHUzMDYxClx1MzA2Qlx1MzA5M1x1MzA2Nlx1MzA0NApcdTMwNkJcdTMwOTNcdTMwNkJcdTMwNEYKXHUzMDZCXHUzMDkzXHUzMDc1XHUzMDlBClx1MzA2Qlx1MzA5M1x1MzA3RVx1MzA4QQpcdTMwNkJcdTMwOTNcdTMwODAKXHUzMDZCXHUzMDkzXHUzMDgxXHUzMDQ0Clx1MzA2Qlx1MzA5M1x1MzA4OFx1MzA0NgpcdTMwNkNcdTMwNDRcdTMwNEZcdTMwNERcdTMwOTkKXHUzMDZDXHUzMDRCXHUzMDU5Clx1MzA2Q1x1MzA0Rlx1MzA5OVx1MzA0NFx1MzA2OFx1MzA4QgpcdTMwNkNcdTMwNEZcdTMwOTlcdTMwNDYKXHUzMDZDXHUzMDRGXHUzMDgyXHUzMDhBClx1MzA2Q1x1MzA1OVx1MzA4MApcdTMwNkNcdTMwN0VcdTMwNDhcdTMwNzJcdTMwOTkKXHUzMDZDXHUzMDgxXHUzMDhBClx1MzA2Q1x1MzA4OVx1MzA1OQpcdTMwNkNcdTMwOTNcdTMwNjFcdTMwODNcdTMwNEYKXHUzMDZEXHUzMDQyXHUzMDUxXHUzMDk5Clx1MzA2RFx1MzA0NFx1MzA0RApcdTMwNkRcdTMwNDRcdTMwOEIKXHUzMDZEXHUzMDQ0XHUzMDhEClx1MzA2RFx1MzA0Rlx1MzA5OVx1MzA1QgpcdTMwNkRcdTMwNEZcdTMwNUZcdTMwNDQKXHUzMDZEXHUzMDRGXHUzMDg5Clx1MzA2RFx1MzA1M1x1MzA1Qlx1MzA5OQpcdTMwNkRcdTMwNTNcdTMwODAKXHUzMDZEXHUzMDU1XHUzMDUxXHUzMDk5Clx1MzA2RFx1MzA1OVx1MzA1M1x1MzA5OVx1MzA1OQpcdTMwNkRcdTMwNURcdTMwNzhcdTMwOTlcdTMwOEIKXHUzMDZEXHUzMDVGXHUzMDk5XHUzMDkzClx1MzA2RFx1MzA2NFx1MzA0NApcdTMwNkRcdTMwNjNcdTMwNTdcdTMwOTMKXHUzMDZEXHUzMDY0XHUzMDVEXHUzMDk5XHUzMDQ2Clx1MzA2RFx1MzA2M1x1MzA1Rlx1MzA0NFx1MzA0RFx1MzA5OVx1MzA4NwpcdTMwNkRcdTMwNzVcdTMwOTlcdTMwNURcdTMwNEYKXHUzMDZEXHUzMDc1XHUzMDVGXHUzMDk5Clx1MzA2RFx1MzA3Qlx1MzA5OVx1MzA0NgpcdTMwNkRcdTMwN0JcdTMwOEFcdTMwNkZcdTMwN0JcdTMwOEEKXHUzMDZEXHUzMDdFXHUzMDREClx1MzA2RFx1MzA3RVx1MzA4Rlx1MzA1NwpcdTMwNkRcdTMwN0ZcdTMwN0YKXHUzMDZEXHUzMDgwXHUzMDQ0Clx1MzA2RFx1MzA4MFx1MzA1Rlx1MzA0NApcdTMwNkRcdTMwODJcdTMwNjgKXHUzMDZEXHUzMDg5XHUzMDQ2Clx1MzA2RFx1MzA4Rlx1MzA1NVx1MzA5OQpcdTMwNkRcdTMwOTNcdTMwNDRcdTMwOEEKXHUzMDZEXHUzMDkzXHUzMDRBXHUzMDU3Clx1MzA2RFx1MzA5M1x1MzA0Qlx1MzA5MwpcdTMwNkRcdTMwOTNcdTMwNERcdTMwOTMKXHUzMDZEXHUzMDkzXHUzMDRGXHUzMDk5Clx1MzA2RFx1MzA5M1x1MzA1NVx1MzA5OQpcdTMwNkRcdTMwOTNcdTMwNTcKXHUzMDZEXHUzMDkzXHUzMDYxXHUzMDgzXHUzMDRGClx1MzA2RFx1MzA5M1x1MzA2OFx1MzA5OQpcdTMwNkRcdTMwOTNcdTMwNzJcdTMwOUEKXHUzMDZEXHUzMDkzXHUzMDc1XHUzMDk5XHUzMDY0Clx1MzA2RFx1MzA5M1x1MzA3RVx1MzA2NApcdTMwNkRcdTMwOTNcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDZEXHUzMDkzXHUzMDhDXHUzMDQ0Clx1MzA2RVx1MzA0NFx1MzA1OVx1MzA5OQpcdTMwNkVcdTMwNEFcdTMwNjRcdTMwOTlcdTMwN0UKXHUzMDZFXHUzMDRCXHUzMDk5XHUzMDU5Clx1MzA2RVx1MzA0RFx1MzA2QVx1MzA3RgpcdTMwNkVcdTMwNTNcdTMwNERcdTMwOTlcdTMwOEEKXHUzMDZFXHUzMDUzXHUzMDU5Clx1MzA2RVx1MzA1M1x1MzA4QgpcdTMwNkVcdTMwNUJcdTMwOEIKXHUzMDZFXHUzMDVEXHUzMDk5XHUzMDRGClx1MzA2RVx1MzA1RFx1MzA5OVx1MzA4MApcdTMwNkVcdTMwNUZcdTMwN0VcdTMwNDYKXHUzMDZFXHUzMDYxXHUzMDdCXHUzMDY4XHUzMDk5Clx1MzA2RVx1MzA2M1x1MzA0RgpcdTMwNkVcdTMwNkZcdTMwOTlcdTMwNTkKXHUzMDZFXHUzMDZGXHUzMDg5Clx1MzA2RVx1MzA3OFx1MzA5OVx1MzA4QgpcdTMwNkVcdTMwN0JcdTMwOTlcdTMwOEIKXHUzMDZFXHUzMDdGXHUzMDgyXHUzMDZFClx1MzA2RVx1MzA4NFx1MzA3RQpcdTMwNkVcdTMwODlcdTMwNDRcdTMwNkMKXHUzMDZFXHUzMDg5XHUzMDZEXHUzMDUzClx1MzA2RVx1MzA4QVx1MzA4Mlx1MzA2RQpcdTMwNkVcdTMwOEFcdTMwODZcdTMwNEQKXHUzMDZFXHUzMDhDXHUzMDkzClx1MzA2RVx1MzA5M1x1MzA0RApcdTMwNkZcdTMwOTlcdTMwNDJcdTMwNDQKXHUzMDZGXHUzMDQyXHUzMDRGClx1MzA2Rlx1MzA5OVx1MzA0Mlx1MzA1NVx1MzA5MwpcdTMwNkZcdTMwOTlcdTMwNDRcdTMwNEIKXHUzMDZGXHUzMDk5XHUzMDQ0XHUzMDRGClx1MzA2Rlx1MzA0NFx1MzA1MVx1MzA5MwpcdTMwNkZcdTMwNDRcdTMwNTNcdTMwOTkKXHUzMDZGXHUzMDQ0XHUzMDU3XHUzMDkzClx1MzA2Rlx1MzA0NFx1MzA1OVx1MzA0NApcdTMwNkZcdTMwNDRcdTMwNUJcdTMwOTMKXHUzMDZGXHUzMDQ0XHUzMDVEXHUzMDQ2Clx1MzA2Rlx1MzA0NFx1MzA2MQpcdTMwNkZcdTMwOTlcdTMwNDRcdTMwNkZcdTMwOTlcdTMwNDQKXHUzMDZGXHUzMDQ0XHUzMDhDXHUzMDY0Clx1MzA2Rlx1MzA0OFx1MzA4QgpcdTMwNkZcdTMwNEFcdTMwOEIKXHUzMDZGXHUzMDRCXHUzMDQ0Clx1MzA2Rlx1MzA5OVx1MzA0Qlx1MzA4QQpcdTMwNkZcdTMwNEJcdTMwOEIKXHUzMDZGXHUzMDRGXHUzMDU3XHUzMDg1Clx1MzA2Rlx1MzA1MVx1MzA5MwpcdTMwNkZcdTMwNTNcdTMwNzVcdTMwOTkKXHUzMDZGXHUzMDU1XHUzMDdGClx1MzA2Rlx1MzA1NVx1MzA5MwpcdTMwNkZcdTMwNTdcdTMwNTNcdTMwOTkKXHUzMDZGXHUzMDk5XHUzMDU3XHUzMDg3Clx1MzA2Rlx1MzA1N1x1MzA4QgpcdTMwNkZcdTMwNUJcdTMwOEIKXHUzMDZGXHUzMDlBXHUzMDVEXHUzMDUzXHUzMDkzClx1MzA2Rlx1MzA1RFx1MzA5MwpcdTMwNkZcdTMwNUZcdTMwOTMKXHUzMDZGXHUzMDYxXHUzMDdGXHUzMDY0Clx1MzA2Rlx1MzA2NFx1MzA0QVx1MzA5MwpcdTMwNkZcdTMwNjNcdTMwNEJcdTMwNEYKXHUzMDZGXHUzMDY0XHUzMDk5XHUzMDREClx1MzA2Rlx1MzA2M1x1MzA0RFx1MzA4QQpcdTMwNkZcdTMwNjNcdTMwNEZcdTMwNjQKXHUzMDZGXHUzMDYzXHUzMDUxXHUzMDkzClx1MzA2Rlx1MzA2M1x1MzA1M1x1MzA0NgpcdTMwNkZcdTMwNjNcdTMwNTVcdTMwOTMKXHUzMDZGXHUzMDYzXHUzMDU3XHUzMDkzClx1MzA2Rlx1MzA2M1x1MzA1Rlx1MzA2NApcdTMwNkZcdTMwNjNcdTMwNjFcdTMwODVcdTMwNDYKXHUzMDZGXHUzMDYzXHUzMDY2XHUzMDkzClx1MzA2Rlx1MzA2M1x1MzA3Mlx1MzA5QVx1MzA4N1x1MzA0NgpcdTMwNkZcdTMwNjNcdTMwN0JcdTMwOUFcdTMwNDYKXHUzMDZGXHUzMDZBXHUzMDU5Clx1MzA2Rlx1MzA2QVx1MzA3Mlx1MzA5OQpcdTMwNkZcdTMwNkJcdTMwNEJcdTMwODAKXHUzMDZGXHUzMDc1XHUzMDk5XHUzMDg5XHUzMDU3Clx1MzA2Rlx1MzA3Rlx1MzA0Qlx1MzA5OVx1MzA0RApcdTMwNkZcdTMwODBcdTMwNEJcdTMwNDYKXHUzMDZGXHUzMDgxXHUzMDY0Clx1MzA2Rlx1MzA4NFx1MzA0NApcdTMwNkZcdTMwODRcdTMwNTcKXHUzMDZGXHUzMDg5XHUzMDQ2Clx1MzA2Rlx1MzA4RFx1MzA0Nlx1MzA0M1x1MzA5MwpcdTMwNkZcdTMwOEZcdTMwNDQKXHUzMDZGXHUzMDkzXHUzMDQ0Clx1MzA2Rlx1MzA5M1x1MzA0OFx1MzA0NApcdTMwNkZcdTMwOTNcdTMwNEFcdTMwOTMKXHUzMDZGXHUzMDkzXHUzMDRCXHUzMDRGClx1MzA2Rlx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0NgpcdTMwNkZcdTMwOTlcdTMwOTNcdTMwNEZcdTMwOTlcdTMwN0YKXHUzMDZGXHUzMDkzXHUzMDUzClx1MzA2Rlx1MzA5M1x1MzA1N1x1MzA4MwpcdTMwNkZcdTMwOTNcdTMwNTlcdTMwNDYKXHUzMDZGXHUzMDkzXHUzMDVGXHUzMDk5XHUzMDkzClx1MzA2Rlx1MzA5QVx1MzA5M1x1MzA2MQpcdTMwNkZcdTMwOUFcdTMwOTNcdTMwNjQKXHUzMDZGXHUzMDkzXHUzMDY2XHUzMDQ0Clx1MzA2Rlx1MzA5M1x1MzA2OFx1MzA1NwpcdTMwNkZcdTMwOTNcdTMwNkVcdTMwNDYKXHUzMDZGXHUzMDkzXHUzMDZGXHUzMDlBClx1MzA2Rlx1MzA5M1x1MzA3NVx1MzA5OVx1MzA5MwpcdTMwNkZcdTMwOTNcdTMwNzhcdTMwOUFcdTMwOTMKXHUzMDZGXHUzMDkzXHUzMDdCXHUzMDk5XHUzMDQ2XHUzMDREClx1MzA2Rlx1MzA5M1x1MzA4MVx1MzA0NApcdTMwNkZcdTMwOTNcdTMwODlcdTMwOTMKXHUzMDZGXHUzMDkzXHUzMDhEXHUzMDkzClx1MzA3Mlx1MzA0NFx1MzA0RApcdTMwNzJcdTMwNDZcdTMwOTMKXHUzMDcyXHUzMDQ4XHUzMDhCClx1MzA3Mlx1MzA0Qlx1MzA0RgpcdTMwNzJcdTMwNEJcdTMwOEEKXHUzMDcyXHUzMDRCXHUzMDhCClx1MzA3Mlx1MzA0Qlx1MzA5MwpcdTMwNzJcdTMwNEZcdTMwNDQKXHUzMDcyXHUzMDUxXHUzMDY0Clx1MzA3Mlx1MzA1M1x1MzA0Nlx1MzA0RApcdTMwNzJcdTMwNTNcdTMwNEYKXHUzMDcyXHUzMDU1XHUzMDQ0Clx1MzA3Mlx1MzA1NVx1MzA1N1x1MzA3NVx1MzA5OVx1MzA4QQpcdTMwNzJcdTMwNTVcdTMwOTMKXHUzMDcyXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDg1XHUzMDY0XHUzMDRCXHUzMDkzClx1MzA3Mlx1MzA1N1x1MzA4NwpcdTMwNzJcdTMwNURcdTMwNEIKXHUzMDcyXHUzMDVEXHUzMDgwClx1MzA3Mlx1MzA1Rlx1MzA4MFx1MzA0RApcdTMwNzJcdTMwNUZcdTMwOTlcdTMwOEEKXHUzMDcyXHUzMDVGXHUzMDhCClx1MzA3Mlx1MzA2NFx1MzA0RFx1MzA5OQpcdTMwNzJcdTMwNjNcdTMwNTNcdTMwNTcKXHUzMDcyXHUzMDYzXHUzMDU3Clx1MzA3Mlx1MzA2NFx1MzA1N1x1MzA5OVx1MzA4NVx1MzA3Mlx1MzA5MwpcdTMwNzJcdTMwNjNcdTMwNTkKXHUzMDcyXHUzMDY0XHUzMDVCXHUzMDk5XHUzMDkzClx1MzA3Mlx1MzA5QVx1MzA2M1x1MzA1Rlx1MzA4QQpcdTMwNzJcdTMwOUFcdTMwNjNcdTMwNjFcdTMwOEEKXHUzMDcyXHUzMDY0XHUzMDg4XHUzMDQ2Clx1MzA3Mlx1MzA2Nlx1MzA0NApcdTMwNzJcdTMwNjhcdTMwNTNcdTMwOTlcdTMwN0YKXHUzMDcyXHUzMDZBXHUzMDdFXHUzMDY0XHUzMDhBClx1MzA3Mlx1MzA2QVx1MzA5MwpcdTMwNzJcdTMwNkRcdTMwOEIKXHUzMDcyXHUzMDZGXHUzMDkzClx1MzA3Mlx1MzA3Mlx1MzA5OVx1MzA0RgpcdTMwNzJcdTMwNzJcdTMwODdcdTMwNDYKXHUzMDcyXHUzMDdCXHUzMDQ2Clx1MzA3Mlx1MzA3RVx1MzA4Rlx1MzA4QQpcdTMwNzJcdTMwN0VcdTMwOTMKXHUzMDcyXHUzMDdGXHUzMDY0Clx1MzA3Mlx1MzA4MVx1MzA0NApcdTMwNzJcdTMwODFcdTMwNTdcdTMwOTlcdTMwNTcKXHUzMDcyXHUzMDg0XHUzMDUxClx1MzA3Mlx1MzA4NFx1MzA1OQpcdTMwNzJcdTMwODhcdTMwNDYKXHUzMDcyXHUzMDk5XHUzMDg3XHUzMDQ2XHUzMDREClx1MzA3Mlx1MzA4OVx1MzA0Qlx1MzA5OVx1MzA2QQpcdTMwNzJcdTMwODlcdTMwNEYKXHUzMDcyXHUzMDhBXHUzMDY0Clx1MzA3Mlx1MzA4QVx1MzA4N1x1MzA0NgpcdTMwNzJcdTMwOEJcdTMwN0UKXHUzMDcyXHUzMDhCXHUzMDg0XHUzMDU5XHUzMDdGClx1MzA3Mlx1MzA4Q1x1MzA0NApcdTMwNzJcdTMwOERcdTMwNDQKXHUzMDcyXHUzMDhEXHUzMDQ2Clx1MzA3Mlx1MzA4RFx1MzA0RApcdTMwNzJcdTMwOERcdTMwODZcdTMwNEQKXHUzMDcyXHUzMDkzXHUzMDRCXHUzMDRGClx1MzA3Mlx1MzA5M1x1MzA1MVx1MzA2NApcdTMwNzJcdTMwOTNcdTMwNTNcdTMwOTMKXHUzMDcyXHUzMDkzXHUzMDU3XHUzMDg1Clx1MzA3Mlx1MzA5M1x1MzA1RFx1MzA0NgpcdTMwNzJcdTMwOUFcdTMwOTNcdTMwNjEKXHUzMDcyXHUzMDkzXHUzMDZGXHUzMDlBXHUzMDkzClx1MzA3Mlx1MzA5OVx1MzA5M1x1MzA3Qlx1MzA5OVx1MzA0NgpcdTMwNzVcdTMwNDJcdTMwOTMKXHUzMDc1XHUzMDQ0XHUzMDQ2XHUzMDYxClx1MzA3NVx1MzA0Nlx1MzA1MVx1MzA0NApcdTMwNzVcdTMwNDZcdTMwNUJcdTMwOTMKXHUzMDc1XHUzMDlBXHUzMDQ2XHUzMDVGXHUzMDhEXHUzMDQ2Clx1MzA3NVx1MzA0Nlx1MzA2OFx1MzA0NgpcdTMwNzVcdTMwNDZcdTMwNzUKXHUzMDc1XHUzMDQ4XHUzMDhCClx1MzA3NVx1MzA0QVx1MzA5MwpcdTMwNzVcdTMwNEJcdTMwNDQKXHUzMDc1XHUzMDREXHUzMDkzClx1MzA3NVx1MzA0Rlx1MzA1NVx1MzA5OVx1MzA2NApcdTMwNzVcdTMwNEZcdTMwNzVcdTMwOTlcdTMwNEZcdTMwOEQKXHUzMDc1XHUzMDUzXHUzMDQ2Clx1MzA3NVx1MzA1NVx1MzA0NApcdTMwNzVcdTMwNTdcdTMwNERcdTMwOTkKXHUzMDc1XHUzMDU3XHUzMDk5XHUzMDdGClx1MzA3NVx1MzA1OVx1MzA3RQpcdTMwNzVcdTMwNUJcdTMwNDQKXHUzMDc1XHUzMDVCXHUzMDRGXHUzMDk5Clx1MzA3NVx1MzA1RFx1MzA0RgpcdTMwNzVcdTMwOTlcdTMwNUZcdTMwNkJcdTMwNEYKXHUzMDc1XHUzMDVGXHUzMDkzClx1MzA3NVx1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNzVcdTMwNjRcdTMwNDYKXHUzMDc1XHUzMDY0XHUzMDRCClx1MzA3NVx1MzA2M1x1MzA0Qlx1MzA2NApcdTMwNzVcdTMwNjNcdTMwNEQKXHUzMDc1XHUzMDYzXHUzMDUzXHUzMDRGClx1MzA3NVx1MzA5OVx1MzA2OFx1MzA5OVx1MzA0NgpcdTMwNzVcdTMwNjhcdTMwOEIKXHUzMDc1XHUzMDY4XHUzMDkzClx1MzA3NVx1MzA2RVx1MzA0NgpcdTMwNzVcdTMwNkZcdTMwNDQKXHUzMDc1XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA3NVx1MzA3OFx1MzA5MwpcdTMwNzVcdTMwN0VcdTMwOTMKXHUzMDc1XHUzMDdGXHUzMDkzClx1MzA3NVx1MzA4MVx1MzA2NApcdTMwNzVcdTMwODFcdTMwOTMKXHUzMDc1XHUzMDg4XHUzMDQ2Clx1MzA3NVx1MzA4QVx1MzA1MwpcdTMwNzVcdTMwOEFcdTMwOEIKXHUzMDc1XHUzMDhCXHUzMDQ0Clx1MzA3NVx1MzA5M1x1MzA0NFx1MzA0RApcdTMwNzVcdTMwOTlcdTMwOTNcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDc1XHUzMDk5XHUzMDkzXHUzMDRGXHUzMDk5Clx1MzA3NVx1MzA5M1x1MzA1N1x1MzA2NApcdTMwNzVcdTMwOTlcdTMwOTNcdTMwNUJcdTMwNEQKXHUzMDc1XHUzMDkzXHUzMDVEXHUzMDQ2Clx1MzA3NVx1MzA5OVx1MzA5M1x1MzA3Qlx1MzA5QVx1MzA0NgpcdTMwNzhcdTMwNDRcdTMwNDJcdTMwOTMKXHUzMDc4XHUzMDQ0XHUzMDRBXHUzMDkzClx1MzA3OFx1MzA0NFx1MzA0Qlx1MzA5OVx1MzA0NApcdTMwNzhcdTMwNDRcdTMwNEQKXHUzMDc4XHUzMDQ0XHUzMDUxXHUzMDk5XHUzMDkzClx1MzA3OFx1MzA0NFx1MzA1M1x1MzA0NgpcdTMwNzhcdTMwNDRcdTMwNTUKXHUzMDc4XHUzMDQ0XHUzMDU3XHUzMDgzClx1MzA3OFx1MzA0NFx1MzA1Qlx1MzA2NApcdTMwNzhcdTMwNDRcdTMwNUQKXHUzMDc4XHUzMDQ0XHUzMDVGXHUzMDRGClx1MzA3OFx1MzA0NFx1MzA2Nlx1MzA5MwpcdTMwNzhcdTMwNDRcdTMwNkRcdTMwNjQKXHUzMDc4XHUzMDQ0XHUzMDhGClx1MzA3OFx1MzA0RFx1MzA0Qlx1MzA5OQpcdTMwNzhcdTMwNTNcdTMwODAKXHUzMDc4XHUzMDk5XHUzMDZCXHUzMDQ0XHUzMDhEClx1MzA3OFx1MzA5OVx1MzA2Qlx1MzA1N1x1MzA4N1x1MzA0Nlx1MzA0Qlx1MzA5OQpcdTMwNzhcdTMwODlcdTMwNTkKXHUzMDc4XHUzMDkzXHUzMDRCXHUzMDkzClx1MzA3OFx1MzA5OVx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0NgpcdTMwNzhcdTMwOTlcdTMwOTNcdTMwNTNcdTMwOTlcdTMwNTcKXHUzMDc4XHUzMDkzXHUzMDU1XHUzMDQ0Clx1MzA3OFx1MzA5M1x1MzA1Rlx1MzA0NApcdTMwNzhcdTMwOTlcdTMwOTNcdTMwOEEKXHUzMDdCXHUzMDQyXHUzMDkzClx1MzA3Qlx1MzA0NFx1MzA0RgpcdTMwN0JcdTMwOTlcdTMwNDZcdTMwNERcdTMwOTlcdTMwODcKXHUzMDdCXHUzMDQ2XHUzMDUzXHUzMDRGClx1MzA3Qlx1MzA0Nlx1MzA1RFx1MzA0NgpcdTMwN0JcdTMwNDZcdTMwN0JcdTMwNDYKXHUzMDdCXHUzMDQ2XHUzMDgyXHUzMDkzClx1MzA3Qlx1MzA0Nlx1MzA4QVx1MzA2NApcdTMwN0JcdTMwNDhcdTMwOEIKXHUzMDdCXHUzMDRBXHUzMDkzClx1MzA3Qlx1MzA0Qlx1MzA5MwpcdTMwN0JcdTMwNERcdTMwODdcdTMwNDYKXHUzMDdCXHUzMDk5XHUzMDREXHUzMDkzClx1MzA3Qlx1MzA0Rlx1MzA4RApcdTMwN0JcdTMwNTFcdTMwNjQKXHUzMDdCXHUzMDUxXHUzMDkzClx1MzA3Qlx1MzA1M1x1MzA0NgpcdTMwN0JcdTMwNTNcdTMwOEIKXHUzMDdCXHUzMDU3XHUzMDQ0Clx1MzA3Qlx1MzA1N1x1MzA2NApcdTMwN0JcdTMwNTdcdTMwODUKXHUzMDdCXHUzMDU3XHUzMDg3XHUzMDQ2Clx1MzA3Qlx1MzA1Qlx1MzA0NApcdTMwN0JcdTMwNURcdTMwNDQKXHUzMDdCXHUzMDVEXHUzMDRGClx1MzA3Qlx1MzA1Rlx1MzA2NgpcdTMwN0JcdTMwNUZcdTMwOEIKXHUzMDdCXHUzMDlBXHUzMDYxXHUzMDc1XHUzMDk5XHUzMDRGXHUzMDhEClx1MzA3Qlx1MzA2M1x1MzA0RFx1MzA4N1x1MzA0RgpcdTMwN0JcdTMwNjNcdTMwNTUKXHUzMDdCXHUzMDYzXHUzMDVGXHUzMDkzClx1MzA3Qlx1MzA2OFx1MzA5M1x1MzA2OFx1MzA5OQpcdTMwN0JcdTMwODFcdTMwOEIKXHUzMDdCXHUzMDkzXHUzMDQ0Clx1MzA3Qlx1MzA5M1x1MzA0RApcdTMwN0JcdTMwOTNcdTMwNTEKXHUzMDdCXHUzMDkzXHUzMDU3XHUzMDY0Clx1MzA3Qlx1MzA5M1x1MzA4NFx1MzA0RgpcdTMwN0VcdTMwNDRcdTMwNkJcdTMwNjEKXHUzMDdFXHUzMDRCXHUzMDQ0Clx1MzA3RVx1MzA0Qlx1MzA1Qlx1MzA4QgpcdTMwN0VcdTMwNEJcdTMwOTlcdTMwOEIKXHUzMDdFXHUzMDUxXHUzMDhCClx1MzA3RVx1MzA1M1x1MzA2OApcdTMwN0VcdTMwNTVcdTMwNjQKXHUzMDdFXHUzMDU3XHUzMDk5XHUzMDgxClx1MzA3RVx1MzA1OVx1MzA0RgpcdTMwN0VcdTMwNUJcdTMwOTlcdTMwOEIKXHUzMDdFXHUzMDY0XHUzMDhBClx1MzA3RVx1MzA2OFx1MzA4MQpcdTMwN0VcdTMwNkFcdTMwNzVcdTMwOTkKXHUzMDdFXHUzMDZDXHUzMDUxClx1MzA3RVx1MzA2RFx1MzA0RgpcdTMwN0VcdTMwN0JcdTMwNDYKXHUzMDdFXHUzMDgyXHUzMDhCClx1MzA3RVx1MzA4Nlx1MzA1MVx1MzA5OQpcdTMwN0VcdTMwODhcdTMwNDYKXHUzMDdFXHUzMDhEXHUzMDg0XHUzMDRCClx1MzA3RVx1MzA4Rlx1MzA1OQpcdTMwN0VcdTMwOEZcdTMwOEEKXHUzMDdFXHUzMDhGXHUzMDhCClx1MzA3RVx1MzA5M1x1MzA0Qlx1MzA5OQpcdTMwN0VcdTMwOTNcdTMwNERcdTMwNjQKXHUzMDdFXHUzMDkzXHUzMDVEXHUzMDk5XHUzMDRGClx1MzA3RVx1MzA5M1x1MzA2QVx1MzA0QgpcdTMwN0ZcdTMwNDRcdTMwODkKXHUzMDdGXHUzMDQ2XHUzMDYxClx1MzA3Rlx1MzA0OFx1MzA4QgpcdTMwN0ZcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDdGXHUzMDRCXHUzMDVGClx1MzA3Rlx1MzA0Qlx1MzA5MwpcdTMwN0ZcdTMwNTFcdTMwOTMKXHUzMDdGXHUzMDUzXHUzMDkzClx1MzA3Rlx1MzA1N1x1MzA5OVx1MzA0Qlx1MzA0NApcdTMwN0ZcdTMwNTlcdTMwNDQKXHUzMDdGXHUzMDU5XHUzMDQ4XHUzMDhCClx1MzA3Rlx1MzA1Qlx1MzA4QgpcdTMwN0ZcdTMwNjNcdTMwNEIKXHUzMDdGXHUzMDY0XHUzMDRCXHUzMDhCClx1MzA3Rlx1MzA2NFx1MzA1MVx1MzA4QgpcdTMwN0ZcdTMwNjZcdTMwNDQKXHUzMDdGXHUzMDY4XHUzMDgxXHUzMDhCClx1MzA3Rlx1MzA2QVx1MzA2OApcdTMwN0ZcdTMwNkFcdTMwN0ZcdTMwNEJcdTMwNTVcdTMwNDQKXHUzMDdGXHUzMDZEXHUzMDg5XHUzMDhCClx1MzA3Rlx1MzA2RVx1MzA0NgpcdTMwN0ZcdTMwNkVcdTMwNEJcdTMwOTlcdTMwNTkKXHUzMDdGXHUzMDdCXHUzMDkzClx1MzA3Rlx1MzA4Mlx1MzA2OApcdTMwN0ZcdTMwODRcdTMwNTFcdTMwOTkKXHUzMDdGXHUzMDg5XHUzMDQ0Clx1MzA3Rlx1MzA4QVx1MzA4N1x1MzA0RgpcdTMwN0ZcdTMwOEZcdTMwNEYKXHUzMDdGXHUzMDkzXHUzMDRCClx1MzA3Rlx1MzA5M1x1MzA1RFx1MzA5OVx1MzA0RgpcdTMwODBcdTMwNDRcdTMwNEIKXHUzMDgwXHUzMDQ4XHUzMDREClx1MzA4MFx1MzA0OFx1MzA5MwpcdTMwODBcdTMwNEJcdTMwNDQKXHUzMDgwXHUzMDRCXHUzMDQ2Clx1MzA4MFx1MzA0Qlx1MzA0OApcdTMwODBcdTMwNEJcdTMwNTcKXHUzMDgwXHUzMDREXHUzMDk5XHUzMDYxXHUzMDgzClx1MzA4MFx1MzA1MVx1MzA4QgpcdTMwODBcdTMwNTFcdTMwOTlcdTMwOTMKXHUzMDgwXHUzMDU1XHUzMDdCXHUzMDk5XHUzMDhCClx1MzA4MFx1MzA1N1x1MzA0Mlx1MzA2NFx1MzA0NApcdTMwODBcdTMwNTdcdTMwNkZcdTMwOTkKXHUzMDgwXHUzMDU3XHUzMDk5XHUzMDg1XHUzMDkzClx1MzA4MFx1MzA1N1x1MzA4RApcdTMwODBcdTMwNTlcdTMwNDYKXHUzMDgwXHUzMDU5XHUzMDUzClx1MzA4MFx1MzA1OVx1MzA3NVx1MzA5OQpcdTMwODBcdTMwNTlcdTMwODEKXHUzMDgwXHUzMDVCXHUzMDhCClx1MzA4MFx1MzA1Qlx1MzA5MwpcdTMwODBcdTMwNjFcdTMwODVcdTMwNDYKXHUzMDgwXHUzMDZBXHUzMDU3XHUzMDQ0Clx1MzA4MFx1MzA2RVx1MzA0NgpcdTMwODBcdTMwODRcdTMwN0YKXHUzMDgwXHUzMDg4XHUzMDQ2Clx1MzA4MFx1MzA4OVx1MzA1NVx1MzA0RApcdTMwODBcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDgwXHUzMDhEXHUzMDkzClx1MzA4MVx1MzA0NFx1MzA0Mlx1MzA5MwpcdTMwODFcdTMwNDRcdTMwNDZcdTMwOTMKXHUzMDgxXHUzMDQ0XHUzMDQ4XHUzMDkzClx1MzA4MVx1MzA0NFx1MzA0Qlx1MzA0RgpcdTMwODFcdTMwNDRcdTMwNERcdTMwODdcdTMwNEYKXHUzMDgxXHUzMDQ0XHUzMDU1XHUzMDQ0Clx1MzA4MVx1MzA0NFx1MzA1NwpcdTMwODFcdTMwNDRcdTMwNURcdTMwNDYKXHUzMDgxXHUzMDQ0XHUzMDc1XHUzMDk5XHUzMDY0Clx1MzA4MVx1MzA0NFx1MzA4Q1x1MzA0NApcdTMwODFcdTMwNDRcdTMwOEZcdTMwNEYKXHUzMDgxXHUzMDRGXHUzMDk5XHUzMDdFXHUzMDhDXHUzMDhCClx1MzA4MVx1MzA1NVx1MzA5OVx1MzA1OQpcdTMwODFcdTMwNTdcdTMwNUYKXHUzMDgxXHUzMDU5XHUzMDk5XHUzMDg5XHUzMDU3XHUzMDQ0Clx1MzA4MVx1MzA1Rlx1MzA5OVx1MzA2NApcdTMwODFcdTMwN0VcdTMwNDQKXHUzMDgxXHUzMDg0XHUzMDU5Clx1MzA4MVx1MzA5M1x1MzA0RFx1MzA4NwpcdTMwODFcdTMwOTNcdTMwNUJcdTMwNEQKXHUzMDgxXHUzMDkzXHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA4Mlx1MzA0Nlx1MzA1N1x1MzA0Mlx1MzA1MVx1MzA5OVx1MzA4QgpcdTMwODJcdTMwNDZcdTMwNjhcdTMwOTlcdTMwNDZcdTMwNTFcdTMwOTMKXHUzMDgyXHUzMDQ4XHUzMDhCClx1MzA4Mlx1MzA0Rlx1MzA1NwpcdTMwODJcdTMwNEZcdTMwNjZcdTMwNEQKXHUzMDgyXHUzMDRGXHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA4Mlx1MzA2MVx1MzA4RFx1MzA5MwpcdTMwODJcdTMwNjhcdTMwOTlcdTMwOEIKXHUzMDgyXHUzMDg5XHUzMDQ2Clx1MzA4Mlx1MzA5M1x1MzA0RgpcdTMwODJcdTMwOTNcdTMwNUZcdTMwOTlcdTMwNDQKXHUzMDg0XHUzMDRBXHUzMDg0Clx1MzA4NFx1MzA1MVx1MzA4QgpcdTMwODRcdTMwNTVcdTMwNDQKXHUzMDg0XHUzMDU1XHUzMDU3XHUzMDQ0Clx1MzA4NFx1MzA1OVx1MzA0NApcdTMwODRcdTMwNTlcdTMwNUZcdTMwOERcdTMwNDYKXHUzMDg0XHUzMDU5XHUzMDdGClx1MzA4NFx1MzA1Qlx1MzA4QgpcdTMwODRcdTMwNURcdTMwNDYKXHUzMDg0XHUzMDVGXHUzMDQ0Clx1MzA4NFx1MzA2MVx1MzA5MwpcdTMwODRcdTMwNjNcdTMwNjgKXHUzMDg0XHUzMDYzXHUzMDZGXHUzMDlBXHUzMDhBClx1MzA4NFx1MzA3NVx1MzA5OVx1MzA4QgpcdTMwODRcdTMwODFcdTMwOEIKXHUzMDg0XHUzMDg0XHUzMDUzXHUzMDU3XHUzMDQ0Clx1MzA4NFx1MzA4OFx1MzA0NApcdTMwODRcdTMwOEZcdTMwODlcdTMwNEJcdTMwNDQKXHUzMDg2XHUzMDQ2XHUzMDREClx1MzA4Nlx1MzA0Nlx1MzA3Mlx1MzA5OVx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0RgpcdTMwODZcdTMwNDZcdTMwNzhcdTMwOTkKXHUzMDg2XHUzMDQ2XHUzMDgxXHUzMDQ0Clx1MzA4Nlx1MzA1MVx1MzA2NApcdTMwODZcdTMwNTdcdTMwODVcdTMwNjQKXHUzMDg2XHUzMDVCXHUzMDkzClx1MzA4Nlx1MzA1RFx1MzA0NgpcdTMwODZcdTMwNUZcdTMwNEIKXHUzMDg2XHUzMDYxXHUzMDgzXHUzMDRGClx1MzA4Nlx1MzA2Nlx1MzA5OVx1MzA4QgpcdTMwODZcdTMwNkJcdTMwODVcdTMwNDYKXHUzMDg2XHUzMDcyXHUzMDk5XHUzMDhGClx1MzA4Nlx1MzA4OVx1MzA0NApcdTMwODZcdTMwOENcdTMwOEIKXHUzMDg4XHUzMDQ2XHUzMDQ0Clx1MzA4OFx1MzA0Nlx1MzA0QgpcdTMwODhcdTMwNDZcdTMwNERcdTMwODVcdTMwNDYKXHUzMDg4XHUzMDQ2XHUzMDU3XHUzMDk5Clx1MzA4OFx1MzA0Nlx1MzA1OQpcdTMwODhcdTMwNDZcdTMwNjFcdTMwNDhcdTMwOTMKXHUzMDg4XHUzMDRCXHUzMDVCXHUzMDk5Clx1MzA4OFx1MzA0Qlx1MzA5MwpcdTMwODhcdTMwNERcdTMwOTMKXHUzMDg4XHUzMDRGXHUzMDVCXHUzMDQ0Clx1MzA4OFx1MzA0Rlx1MzA3Qlx1MzA5OVx1MzA0NgpcdTMwODhcdTMwNTFcdTMwNDQKXHUzMDg4XHUzMDUzXHUzMDk5XHUzMDhDXHUzMDhCClx1MzA4OFx1MzA1NVx1MzA5MwpcdTMwODhcdTMwNTdcdTMwODVcdTMwNDYKXHUzMDg4XHUzMDVEXHUzMDQ2Clx1MzA4OFx1MzA1RFx1MzA0RgpcdTMwODhcdTMwNjNcdTMwNEIKXHUzMDg4XHUzMDY2XHUzMDQ0Clx1MzA4OFx1MzA2OFx1MzA5OVx1MzA0Qlx1MzA5OVx1MzA4Rlx1MzA0RgpcdTMwODhcdTMwNkRcdTMwNjQKXHUzMDg4XHUzMDg0XHUzMDRGClx1MzA4OFx1MzA4Nlx1MzA0NgpcdTMwODhcdTMwOERcdTMwNTNcdTMwNzVcdTMwOTkKXHUzMDg4XHUzMDhEXHUzMDU3XHUzMDQ0Clx1MzA4OVx1MzA0NFx1MzA0NgpcdTMwODlcdTMwNEZcdTMwNEJcdTMwOTlcdTMwNEQKXHUzMDg5XHUzMDRGXHUzMDUzXHUzMDk5Clx1MzA4OVx1MzA0Rlx1MzA1NVx1MzA2NApcdTMwODlcdTMwNEZcdTMwNUZcdTMwOTkKXHUzMDg5XHUzMDU3XHUzMDkzXHUzMDZGXHUzMDk5XHUzMDkzClx1MzA4OVx1MzA1Qlx1MzA5MwpcdTMwODlcdTMwNURcdTMwOTlcdTMwNEYKXHUzMDg5XHUzMDVGXHUzMDQ0Clx1MzA4OVx1MzA2M1x1MzA0QgpcdTMwODlcdTMwOENcdTMwNjQKXHUzMDhBXHUzMDQ4XHUzMDREClx1MzA4QVx1MzA0Qlx1MzA0NApcdTMwOEFcdTMwNERcdTMwNTVcdTMwNEYKXHUzMDhBXHUzMDREXHUzMDVCXHUzMDY0Clx1MzA4QVx1MzA0Rlx1MzA0Rlx1MzA5OVx1MzA5MwpcdTMwOEFcdTMwNEZcdTMwNjQKXHUzMDhBXHUzMDUxXHUzMDkzClx1MzA4QVx1MzA1M1x1MzA0NgpcdTMwOEFcdTMwNUJcdTMwNDQKXHUzMDhBXHUzMDVEXHUzMDQ2Clx1MzA4QVx1MzA1RFx1MzA0RgpcdTMwOEFcdTMwNjZcdTMwOTMKXHUzMDhBXHUzMDZEXHUzMDkzClx1MzA4QVx1MzA4Nlx1MzA0NgpcdTMwOEFcdTMwODVcdTMwNDZcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDhBXHUzMDg4XHUzMDQ2Clx1MzA4QVx1MzA4N1x1MzA0Nlx1MzA4QQpcdTMwOEFcdTMwODdcdTMwNEJcdTMwOTMKXHUzMDhBXHUzMDg3XHUzMDRGXHUzMDYxXHUzMDgzClx1MzA4QVx1MzA4N1x1MzA1M1x1MzA0NgpcdTMwOEFcdTMwOEFcdTMwNEYKXHUzMDhBXHUzMDhDXHUzMDREClx1MzA4QVx1MzA4RFx1MzA5MwpcdTMwOEFcdTMwOTNcdTMwNTNcdTMwOTkKXHUzMDhCXHUzMDQ0XHUzMDUxXHUzMDQ0Clx1MzA4Qlx1MzA0NFx1MzA1NVx1MzA0NApcdTMwOEJcdTMwNDRcdTMwNTdcdTMwOTkKXHUzMDhCXHUzMDQ0XHUzMDVCXHUzMDREClx1MzA4Qlx1MzA1OVx1MzA2Rlx1MzA5OVx1MzA5MwpcdTMwOEJcdTMwOEFcdTMwNEJcdTMwOTlcdTMwOEZcdTMwODkKXHUzMDhDXHUzMDQ0XHUzMDRCXHUzMDkzClx1MzA4Q1x1MzA0NFx1MzA0RFx1MzA5OQpcdTMwOENcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDhDXHUzMDQ0XHUzMDVEXHUzMDk5XHUzMDQ2XHUzMDUzClx1MzA4Q1x1MzA0NFx1MzA2OFx1MzA0NgpcdTMwOENcdTMwNDRcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDhDXHUzMDREXHUzMDU3Clx1MzA4Q1x1MzA0RFx1MzA1Rlx1MzA5OVx1MzA0NApcdTMwOENcdTMwOTNcdTMwNDJcdTMwNDQKXHUzMDhDXHUzMDkzXHUzMDUxXHUzMDQ0Clx1MzA4Q1x1MzA5M1x1MzA1M1x1MzA5MwpcdTMwOENcdTMwOTNcdTMwNTVcdTMwNDQKXHUzMDhDXHUzMDkzXHUzMDU3XHUzMDg1XHUzMDQ2Clx1MzA4Q1x1MzA5M1x1MzA1RFx1MzA5OVx1MzA0RgpcdTMwOENcdTMwOTNcdTMwODlcdTMwNEYKXHUzMDhEXHUzMDQ2XHUzMDRCClx1MzA4RFx1MzA0Nlx1MzA1M1x1MzA5OQpcdTMwOERcdTMwNDZcdTMwNTdcdTMwOTlcdTMwOTMKXHUzMDhEXHUzMDQ2XHUzMDVEXHUzMDRGClx1MzA4RFx1MzA0Rlx1MzA0Qlx1MzA5OQpcdTMwOERcdTMwNTNcdTMwNjQKXHUzMDhEXHUzMDU3XHUzMDk5XHUzMDQ2XHUzMDg5Clx1MzA4RFx1MzA1N1x1MzA4NVx1MzA2NApcdTMwOERcdTMwNUJcdTMwOTMKXHUzMDhEXHUzMDY2XHUzMDkzClx1MzA4RFx1MzA4MVx1MzA5MwpcdTMwOERcdTMwOENcdTMwNjQKXHUzMDhEXHUzMDkzXHUzMDREXHUzMDk5Clx1MzA4RFx1MzA5M1x1MzA2Rlx1MzA5QQpcdTMwOERcdTMwOTNcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDhEXHUzMDkzXHUzMDhBClx1MzA4Rlx1MzA0Qlx1MzA1OQpcdTMwOEZcdTMwNEJcdTMwODEKXHUzMDhGXHUzMDRCXHUzMDg0XHUzMDdFClx1MzA4Rlx1MzA0Qlx1MzA4Q1x1MzA4QgpcdTMwOEZcdTMwNTdcdTMwNjQKXHUzMDhGXHUzMDU3XHUzMDk5XHUzMDdFXHUzMDU3Clx1MzA4Rlx1MzA1OVx1MzA4Q1x1MzA4Mlx1MzA2RQpcdTMwOEZcdTMwODlcdTMwNDYKXHUzMDhGXHUzMDhDXHUzMDhCYC5zcGxpdCgiXG4iKTsKCiAgLy8gbm9kZV9tb2R1bGVzL0BzY3VyZS9iaXAzOS9lc20vd29yZGxpc3RzL2tvcmVhbi5qcwogIHZhciB3b3JkbGlzdDYgPSBgXHUxMTAwXHUxMTYxXHUxMTAwXHUxMTY3XHUxMUE4Clx1MTEwMFx1MTE2MVx1MTEwMVx1MTE3M1x1MTFCNwpcdTExMDBcdTExNjFcdTExMDJcdTExNjFcdTExQUIKXHUxMTAwXHUxMTYxXHUxMTAyXHUxMTczXHUxMUJDClx1MTEwMFx1MTE2MVx1MTEwM1x1MTE3M1x1MTFBOApcdTExMDBcdTExNjFcdTExMDVcdTExNzNcdTExMEVcdTExNzVcdTExQjcKXHUxMTAwXHUxMTYxXHUxMTA2XHUxMTZFXHUxMUI3Clx1MTEwMFx1MTE2MVx1MTEwN1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNjFcdTExMDlcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMTA5XHUxMTczXHUxMUI3Clx1MTEwMFx1MTE2MVx1MTEwQlx1MTE2RVx1MTFBQlx1MTEwM1x1MTE2NgpcdTExMDBcdTExNjFcdTExMEJcdTExNzNcdTExQUYKXHUxMTAwXHUxMTYxXHUxMTBCXHUxMTc1XHUxMTAzXHUxMTczClx1MTEwMFx1MTE2MVx1MTEwQlx1MTE3NVx1MTFCOApcdTExMDBcdTExNjFcdTExMENcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwMFx1MTE2MVx1MTEwQ1x1MTE2OVx1MTFBOApcdTExMDBcdTExNjFcdTExMENcdTExNkVcdTExQTgKXHUxMTAwXHUxMTYxXHUxMUE4XHUxMTBCXHUxMTY5Clx1MTEwMFx1MTE2MVx1MTFBOFx1MTEwQ1x1MTE2MQpcdTExMDBcdTExNjFcdTExQUJcdTExMDBcdTExNjdcdTExQTgKXHUxMTAwXHUxMTYxXHUxMUFCXHUxMTA3XHUxMTZFClx1MTEwMFx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2NVx1MTFCOApcdTExMDBcdTExNjFcdTExQUJcdTExMENcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUI4Clx1MTEwMFx1MTE2MVx1MTFBQlx1MTExMVx1MTE2MVx1MTFBQgpcdTExMDBcdTExNjFcdTExQUZcdTExMDNcdTExNzNcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUFGXHUxMTA3XHUxMTc1Clx1MTEwMFx1MTE2MVx1MTFBRlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDBcdTExNjFcdTExQUZcdTExMENcdTExNzNcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUI3XHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwMFx1MTE2MVx1MTFCN1x1MTEwMFx1MTE3NQpcdTExMDBcdTExNjFcdTExQjdcdTExMDlcdTExNjkKXHUxMTAwXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTZFXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwMFx1MTE2MVx1MTFCN1x1MTEwQ1x1MTE2MQpcdTExMDBcdTExNjFcdTExQjdcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUI4XHUxMTBDXHUxMTYxXHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwMlx1MTE2MVx1MTFCNwpcdTExMDBcdTExNjFcdTExQkNcdTExMDNcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTAzXHUxMTY5Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwNVx1MTE2N1x1MTFBOFx1MTExMlx1MTE3NQpcdTExMDBcdTExNjFcdTExQkNcdTExMDdcdTExNjdcdTExQUIKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTA3XHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMDBcdTExNjFcdTExQkNcdTExMDlcdTExNkVcdTExMDVcdTExNjNcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTBCXHUxMTYxXHUxMTBDXHUxMTc1Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2Rlx1MTFBQlx1MTEwM1x1MTE2OQpcdTExMDBcdTExNjFcdTExQkNcdTExMEJcdTExNzQKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY2Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE2OQpcdTExMDBcdTExNjFcdTExQzBcdTExMEJcdTExNzUKXHUxMTAwXHUxMTYyXHUxMTAwXHUxMTZFXHUxMTA1XHUxMTc1Clx1MTEwMFx1MTE2Mlx1MTEwMlx1MTE2MVx1MTEwNVx1MTE3NQpcdTExMDBcdTExNjJcdTExMDdcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYyXHUxMTA3XHUxMTY3XHUxMUFGClx1MTEwMFx1MTE2Mlx1MTEwOVx1MTE2NVx1MTFBQgpcdTExMDBcdTExNjJcdTExMDlcdTExNjVcdTExQkMKXHUxMTAwXHUxMTYyXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwMFx1MTE2Mlx1MTFBOFx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDBcdTExNjVcdTExMDlcdTExNzVcdTExQUYKXHUxMTAwXHUxMTY1XHUxMTBCXHUxMTYyXHUxMUE4Clx1MTEwMFx1MTE2NVx1MTEwQlx1MTE2RVx1MTFBRgpcdTExMDBcdTExNjVcdTExMENcdTExNzVcdTExQkEKXHUxMTAwXHUxMTY1XHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwMFx1MTE2NVx1MTFBOFx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMDBcdTExNjVcdTExQUJcdTExMDBcdTExNjFcdTExQkMKXHUxMTAwXHUxMTY1XHUxMUFCXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwMFx1MTE2NVx1MTFBQlx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMDBcdTExNjVcdTExQUJcdTExMENcdTExNjkKXHUxMTAwXHUxMTY1XHUxMUFCXHUxMTBFXHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE2NVx1MTFBRlx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDBcdTExNjVcdTExQjdcdTExMDlcdTExNjEKXHUxMTAwXHUxMTY1XHUxMUI3XHUxMTEwXHUxMTY5Clx1MTEwMFx1MTE2Nlx1MTEwOVx1MTE3NVx1MTExMVx1MTE2MVx1MTFBQgpcdTExMDBcdTExNjZcdTExMEJcdTExNzVcdTExQjcKXHUxMTAwXHUxMTY3XHUxMTBCXHUxMTZFXHUxMUFGClx1MTEwMFx1MTE2N1x1MTFBQlx1MTExMlx1MTE2MgpcdTExMDBcdTExNjdcdTExQUZcdTExMDBcdTExNkEKXHUxMTAwXHUxMTY3XHUxMUFGXHUxMTAwXHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE2N1x1MTFBRlx1MTEwNVx1MTE2OVx1MTFBQgpcdTExMDBcdTExNjdcdTExQUZcdTExMDlcdTExNjVcdTExQTgKXHUxMTAwXHUxMTY3XHUxMUFGXHUxMTA5XHUxMTczXHUxMUJDClx1MTEwMFx1MTE2N1x1MTFBRlx1MTEwOVx1MTE3NVx1MTFCNwpcdTExMDBcdTExNjdcdTExQUZcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTY3XHUxMUFGXHUxMTEyXHUxMTY5XHUxMUFCClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwMFx1MTE2OApcdTExMDBcdTExNjdcdTExQkNcdTExMDBcdTExNjkKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwNVx1MTE2N1x1MTFBOApcdTExMDBcdTExNjdcdTExQkNcdTExMDdcdTExNjlcdTExQThcdTExMDBcdTExNkVcdTExQkMKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTA3XHUxMTc1Clx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwM1x1MTE2OQpcdTExMDBcdTExNjdcdTExQkNcdTExMEJcdTExNjdcdTExQkMKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTBCXHUxMTZFClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwQ1x1MTE2Mlx1MTFCQwpcdTExMDBcdTExNjdcdTExQkNcdTExMENcdTExNjYKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTBDXHUxMTZFClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwRVx1MTE2MVx1MTFBRgpcdTExMDBcdTExNjdcdTExQkNcdTExMEVcdTExNzUKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTYzXHUxMUJDClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTExMlx1MTE2NVx1MTFCNwpcdTExMDBcdTExNjhcdTExMDBcdTExNjlcdTExQTgKXHUxMTAwXHUxMTY4XHUxMTAzXHUxMTYxXHUxMUFCClx1MTEwMFx1MTE2OFx1MTEwNVx1MTE2MVx1MTFBQgpcdTExMDBcdTExNjhcdTExMDlcdTExNjFcdTExQUIKXHUxMTAwXHUxMTY4XHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwMFx1MTE2OFx1MTEwQlx1MTE2M1x1MTFBOApcdTExMDBcdTExNjhcdTExMENcdTExNjVcdTExQUYKXHUxMTAwXHUxMTY4XHUxMTBFXHUxMTczXHUxMUJDClx1MTEwMFx1MTE2OFx1MTExMlx1MTE2Q1x1MTFBOApcdTExMDBcdTExNjlcdTExMDBcdTExNjJcdTExQTgKXHUxMTAwXHUxMTY5XHUxMTAwXHUxMTZFXHUxMTA1XHUxMTY3Clx1MTEwMFx1MTE2OVx1MTEwMFx1MTE2RVx1MTFCQwpcdTExMDBcdTExNjlcdTExMDBcdTExNzNcdTExQjgKXHUxMTAwXHUxMTY5XHUxMTAzXHUxMTczXHUxMUJDXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwMFx1MTE2OVx1MTEwNlx1MTE2RVx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMDBcdTExNjlcdTExMDZcdTExNzVcdTExQUIKXHUxMTAwXHUxMTY5XHUxMTBCXHUxMTYzXHUxMUJDXHUxMTBCXHUxMTc1Clx1MTEwMFx1MTE2OVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNjlcdTExMENcdTExNjVcdTExQUIKXHUxMTAwXHUxMTY5XHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwMFx1MTE2OVx1MTEwRVx1MTE2RVx1MTFCQVx1MTEwMFx1MTE2MVx1MTEwNVx1MTE2RQpcdTExMDBcdTExNjlcdTExMTBcdTExNjlcdTExQkMKXHUxMTAwXHUxMTY5XHUxMTEyXHUxMTYzXHUxMUJDClx1MTEwMFx1MTE2OVx1MTFBOFx1MTEwOVx1MTE3NVx1MTFBOApcdTExMDBcdTExNjlcdTExQUZcdTExMDZcdTExNjlcdTExQTgKXHUxMTAwXHUxMTY5XHUxMUFGXHUxMTBEXHUxMTYxXHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2OVx1MTFBRlx1MTExMVx1MTE3MwpcdTExMDBcdTExNjlcdTExQkNcdTExMDBcdTExNjFcdTExQUIKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTAwXHUxMTYyClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwMFx1MTE2N1x1MTFBOApcdTExMDBcdTExNjlcdTExQkNcdTExMDBcdTExNkVcdTExQUIKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTAwXHUxMTczXHUxMUI4Clx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwMFx1MTE3NQpcdTExMDBcdTExNjlcdTExQkNcdTExMDNcdTExNjlcdTExQkMKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTA2XHUxMTZFXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwN1x1MTE2RQpcdTExMDBcdTExNjlcdTExQkNcdTExMDlcdTExNjEKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwQlx1MTE2NVx1MTFCOApcdTExMDBcdTExNjlcdTExQkNcdTExMEJcdTExNjdcdTExQUIKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNjlcdTExQkNcdTExMERcdTExNjEKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTBFXHUxMTYyXHUxMUE4Clx1MTEwMFx1MTE2OVx1MTFCQ1x1MTExMFx1MTE2OVx1MTFCQwpcdTExMDBcdTExNjlcdTExQkNcdTExMTFcdTExNjkKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTEyXHUxMTYxXHUxMUJDClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTExMlx1MTE3Mlx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMDBcdTExNkFcdTExMDZcdTExNjlcdTExQTgKXHUxMTAwXHUxMTZBXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwMFx1MTE2QVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNkFcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTZBXHUxMTEyXHUxMTYxXHUxMUE4Clx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwMFx1MTE2Mlx1MTFBOApcdTExMDBcdTExNkFcdTExQUJcdTExMDBcdTExNjgKXHUxMTAwXHUxMTZBXHUxMUFCXHUxMTAwXHUxMTZBXHUxMUJDClx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwMlx1MTE2N1x1MTFCNwpcdTExMDBcdTExNkFcdTExQUJcdTExMDVcdTExNjFcdTExQjcKXHUxMTAwXHUxMTZBXHUxMUFCXHUxMTA1XHUxMTY3XHUxMUFCClx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwNVx1MTE3NQpcdTExMDBcdTExNkFcdTExQUJcdTExMDlcdTExNzNcdTExQjgKXHUxMTAwXHUxMTZBXHUxMUFCXHUxMTA5XHUxMTc1XHUxMUI3Clx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDBcdTExNkFcdTExQUJcdTExMEVcdTExNjFcdTExQUYKXHUxMTAwXHUxMTZBXHUxMUJDXHUxMTAwXHUxMTY3XHUxMUJDClx1MTEwMFx1MTE2QVx1MTFCQ1x1MTEwMFx1MTE2OQpcdTExMDBcdTExNkFcdTExQkNcdTExMENcdTExNjFcdTExQkMKXHUxMTAwXHUxMTZBXHUxMUJDXHUxMTBDXHUxMTZFClx1MTEwMFx1MTE2Q1x1MTEwNVx1MTE2OVx1MTEwQlx1MTE2RVx1MTFCNwpcdTExMDBcdTExNkNcdTExQkNcdTExMENcdTExNjFcdTExQkNcdTExMTJcdTExNzUKXHUxMTAwXHUxMTZEXHUxMTAwXHUxMTZBXHUxMTA5XHUxMTY1Clx1MTEwMFx1MTE2RFx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMDBcdTExNkRcdTExMDdcdTExNjlcdTExQTgKXHUxMTAwXHUxMTZEXHUxMTA5XHUxMTc1XHUxMUFGClx1MTEwMFx1MTE2RFx1MTEwQlx1MTE2M1x1MTFCQwpcdTExMDBcdTExNkRcdTExMEJcdTExNzJcdTExQTgKXHUxMTAwXHUxMTZEXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwMFx1MTE2RFx1MTEwQ1x1MTE3NVx1MTFBOApcdTExMDBcdTExNkRcdTExMTBcdTExNjlcdTExQkMKXHUxMTAwXHUxMTZEXHUxMTEyXHUxMTZBXHUxMUFCClx1MTEwMFx1MTE2RFx1MTExMlx1MTE2RVx1MTFBQgpcdTExMDBcdTExNkVcdTExMDBcdTExNjdcdTExQkMKXHUxMTAwXHUxMTZFXHUxMTA1XHUxMTczXHUxMUI3Clx1MTEwMFx1MTE2RVx1MTEwNlx1MTE2NVx1MTFCQwpcdTExMDBcdTExNkVcdTExMDdcdTExNjdcdTExQUYKXHUxMTAwXHUxMTZFXHUxMTA3XHUxMTZFXHUxMUFCClx1MTEwMFx1MTE2RVx1MTEwOVx1MTE2NVx1MTFBOApcdTExMDBcdTExNkVcdTExMDlcdTExNjVcdTExQkMKXHUxMTAwXHUxMTZFXHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwMFx1MTE2RVx1MTEwQlx1MTE2N1x1MTFBOApcdTExMDBcdTExNkVcdTExMEJcdTExNzVcdTExQjgKXHUxMTAwXHUxMTZFXHUxMTBFXHUxMTY1XHUxMUJDClx1MTEwMFx1MTE2RVx1MTEwRVx1MTE2Nlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDBcdTExNkVcdTExQThcdTExMDBcdTExNjEKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2RVx1MTFBOFx1MTEwMlx1MTE2MgpcdTExMDBcdTExNkVcdTExQThcdTExMDVcdTExNzVcdTExQjgKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwMFx1MTE2RVx1MTFBOFx1MTEwNlx1MTE3NVx1MTFBQgpcdTExMDBcdTExNkVcdTExQThcdTExMDlcdTExNkUKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTBCXHUxMTY1Clx1MTEwMFx1MTE2RVx1MTFBOFx1MTEwQlx1MTE2QVx1MTFCQwpcdTExMDBcdTExNkVcdTExQThcdTExMENcdTExNjVcdTExQTgKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTBDXHUxMTY2Clx1MTEwMFx1MTE2RVx1MTFBOFx1MTExMlx1MTE2QwpcdTExMDBcdTExNkVcdTExQUJcdTExMDNcdTExNjIKXHUxMTAwXHUxMTZFXHUxMUFCXHUxMTA5XHUxMTYxClx1MTEwMFx1MTE2RVx1MTFBQlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDBcdTExNkVcdTExQkNcdTExMDBcdTExNzNcdTExQThcdTExMENcdTExNjVcdTExQTgKXHUxMTAwXHUxMTZGXHUxMUFCXHUxMTA1XHUxMTc1Clx1MTEwMFx1MTE2Rlx1MTFBQlx1MTEwQlx1MTE3MQpcdTExMDBcdTExNkZcdTExQUJcdTExMTBcdTExNkUKXHUxMTAwXHUxMTcxXHUxMTAwXHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE3MVx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMDBcdTExNzJcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTcyXHUxMTBFXHUxMTc1XHUxMUE4Clx1MTEwMFx1MTE3Mlx1MTFBQlx1MTExMlx1MTE2N1x1MTFCQwpcdTExMDBcdTExNzNcdTExMDJcdTExNjFcdTExQUYKXHUxMTAwXHUxMTczXHUxMTAyXHUxMTYzXHUxMUJDClx1MTEwMFx1MTE3M1x1MTEwMlx1MTE3M1x1MTFBRgpcdTExMDBcdTExNzNcdTExMDVcdTExNjVcdTExMDJcdTExNjEKXHUxMTAwXHUxMTczXHUxMTA1XHUxMTZFXHUxMUI4Clx1MTEwMFx1MTE3M1x1MTEwNVx1MTE3M1x1MTFCQQpcdTExMDBcdTExNzNcdTExMDVcdTExNzVcdTExQjcKXHUxMTAwXHUxMTczXHUxMTBDXHUxMTY2XHUxMTA5XHUxMTY1XHUxMTBCXHUxMTYzClx1MTEwMFx1MTE3M1x1MTExMFx1MTE2OVx1MTEwNVx1MTE2OVx1MTFBOApcdTExMDBcdTExNzNcdTExQThcdTExMDdcdTExNjlcdTExQTgKXHUxMTAwXHUxMTczXHUxMUE4XHUxMTEyXHUxMTc1Clx1MTEwMFx1MTE3M1x1MTFBQlx1MTEwMFx1MTE2NQpcdTExMDBcdTExNzNcdTExQUJcdTExMDBcdTExNkQKXHUxMTAwXHUxMTczXHUxMUFCXHUxMTA1XHUxMTYyClx1MTEwMFx1MTE3M1x1MTFBQlx1MTEwNVx1MTE2OQpcdTExMDBcdTExNzNcdTExQUJcdTExMDZcdTExNkUKXHUxMTAwXHUxMTczXHUxMUFCXHUxMTA3XHUxMTY5XHUxMUFCClx1MTEwMFx1MTE3M1x1MTFBQlx1MTEwQlx1MTE2Rlx1MTFBQgpcdTExMDBcdTExNzNcdTExQUJcdTExMEJcdTExNzJcdTExQTgKXHUxMTAwXHUxMTczXHUxMUFCXHUxMTBFXHUxMTY1Clx1MTEwMFx1MTE3M1x1MTFBRlx1MTEwQVx1MTE3NQpcdTExMDBcdTExNzNcdTExQUZcdTExMENcdTExNjEKXHUxMTAwXHUxMTczXHUxMUI3XHUxMTAwXHUxMTYxXHUxMUJDXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwMFx1MTE2OQpcdTExMDBcdTExNzNcdTExQjdcdTExMDJcdTExNjdcdTExQUIKXHUxMTAwXHUxMTczXHUxMUI3XHUxMTA2XHUxMTY2XHUxMTAzXHUxMTYxXHUxMUFGClx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwQlx1MTE2Mlx1MTFBOApcdTExMDBcdTExNzNcdTExQjdcdTExMEJcdTExNjdcdTExQUIKXHUxMTAwXHUxMTczXHUxMUI3XHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwQ1x1MTE3NQpcdTExMDBcdTExNzNcdTExQkNcdTExMENcdTExNjVcdTExQkNcdTExMENcdTExNjVcdTExQTgKXHUxMTAwXHUxMTc1XHUxMTAwXHUxMTYxXHUxMUFCClx1MTEwMFx1MTE3NVx1MTEwMFx1MTE2QVx1MTFBQgpcdTExMDBcdTExNzVcdTExMDJcdTExNjdcdTExQjcKXHUxMTAwXHUxMTc1XHUxMTAyXHUxMTczXHUxMUJDClx1MTEwMFx1MTE3NVx1MTEwM1x1MTE2OVx1MTFBOFx1MTEwMFx1MTE2RApcdTExMDBcdTExNzVcdTExMDNcdTExNkVcdTExQkMKXHUxMTAwXHUxMTc1XHUxMTA1XHUxMTY5XHUxMUE4Clx1MTEwMFx1MTE3NVx1MTEwNVx1MTE3M1x1MTFCNwpcdTExMDBcdTExNzVcdTExMDdcdTExNjVcdTExQjgKXHUxMTAwXHUxMTc1XHUxMTA3XHUxMTY5XHUxMUFCClx1MTEwMFx1MTE3NVx1MTEwN1x1MTE2RVx1MTFBQgpcdTExMDBcdTExNzVcdTExMDhcdTExNzNcdTExQjcKXHUxMTAwXHUxMTc1XHUxMTA5XHUxMTZFXHUxMUE4XHUxMTA5XHUxMTYxClx1MTEwMFx1MTE3NVx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMDBcdTExNzVcdTExMEJcdTExNjVcdTExQTgKXHUxMTAwXHUxMTc1XHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwMFx1MTE3NVx1MTEwQlx1MTE2OVx1MTFBQgpcdTExMDBcdTExNzVcdTExMEJcdTExNkVcdTExQUIKXHUxMTAwXHUxMTc1XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwMFx1MTE3NVx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDBcdTExNzVcdTExMENcdTExNkVcdTExQUIKXHUxMTAwXHUxMTc1XHUxMTBFXHUxMTc1XHUxMUI3Clx1MTEwMFx1MTE3NVx1MTExMlx1MTE2OVx1MTFBQgpcdTExMDBcdTExNzVcdTExMTJcdTExNkNcdTExQTgKXHUxMTAwXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTczXHUxMUI4Clx1MTEwMFx1MTE3NVx1MTFBQlx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNzVcdTExQUZcdTExMEJcdTExNzUKXHUxMTAwXHUxMTc1XHUxMUI3XHUxMTA3XHUxMTYxXHUxMUI4Clx1MTEwMFx1MTE3NVx1MTFCN1x1MTEwRVx1MTE3NQpcdTExMDBcdTExNzVcdTExQjdcdTExMTFcdTExNjlcdTExMDBcdTExNjlcdTExQkNcdTExMTJcdTExNjFcdTExQkMKXHUxMTAxXHUxMTYxXHUxMUE4XHUxMTAzXHUxMTZFXHUxMTAwXHUxMTc1Clx1MTEwMVx1MTE2MVx1MTFCN1x1MTEwOFx1MTE2MVx1MTFBOApcdTExMDFcdTExNjJcdTExMDNcdTExNjFcdTExQUZcdTExMEJcdTExNzNcdTExQjcKXHUxMTAxXHUxMTYyXHUxMTA5XHUxMTY5XHUxMTAwXHUxMTczXHUxMUI3Clx1MTEwMVx1MTE2NVx1MTFCOFx1MTEwQ1x1MTE3NVx1MTFBRgpcdTExMDFcdTExNjlcdTExQThcdTExMDNcdTExNjJcdTExMDBcdTExNzUKXHUxMTAxXHUxMTY5XHUxMUJFXHUxMTBCXHUxMTc1XHUxMUMxClx1MTEwMlx1MTE2MVx1MTEwM1x1MTE3M1x1MTFBRlx1MTEwQlx1MTE3NQpcdTExMDJcdTExNjFcdTExMDVcdTExNjFcdTExQUJcdTExMTJcdTExNzUKXHUxMTAyXHUxMTYxXHUxMTA2XHUxMTY1XHUxMTBDXHUxMTc1Clx1MTEwMlx1MTE2MVx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDJcdTExNjFcdTExMEVcdTExNzVcdTExQjdcdTExMDdcdTExNjFcdTExQUIKXHUxMTAyXHUxMTYxXHUxMTEyXHUxMTczXHUxMUFGClx1MTEwMlx1MTE2MVx1MTFBOFx1MTEwQlx1MTE2N1x1MTFCOApcdTExMDJcdTExNjFcdTExQUJcdTExMDdcdTExNjFcdTExQkMKXHUxMTAyXHUxMTYxXHUxMUFGXHUxMTAwXHUxMTYyClx1MTEwMlx1MTE2MVx1MTFBRlx1MTEwQVx1MTE3NQpcdTExMDJcdTExNjFcdTExQUZcdTExMERcdTExNjEKXHUxMTAyXHUxMTYxXHUxMUI3XHUxMTAyXHUxMTY3Clx1MTEwMlx1MTE2MVx1MTFCN1x1MTEwM1x1MTE2Mlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMDJcdTExNjFcdTExQjdcdTExMDZcdTExNjIKXHUxMTAyXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwMlx1MTE2MVx1MTFCN1x1MTEwQ1x1MTE2MQpcdTExMDJcdTExNjFcdTExQjdcdTExMTFcdTExNjdcdTExQUIKXHUxMTAyXHUxMTYxXHUxMUI3XHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwMlx1MTE2MVx1MTFCQ1x1MTEwN1x1MTE3NQpcdTExMDJcdTExNjFcdTExQzBcdTExMDZcdTExNjFcdTExQUYKXHUxMTAyXHUxMTYyXHUxMTAyXHUxMTY3XHUxMUFCClx1MTEwMlx1MTE2Mlx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDJcdTExNjJcdTExMEJcdTExNzVcdTExQUYKXHUxMTAyXHUxMTYyXHUxMUI3XHUxMTA3XHUxMTc1Clx1MTEwMlx1MTE2Mlx1MTFCN1x1MTEwOVx1MTE2MgpcdTExMDJcdTExNjJcdTExQkFcdTExMDZcdTExNkVcdTExQUYKXHUxMTAyXHUxMTYyXHUxMUJDXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwMlx1MTE2Mlx1MTFCQ1x1MTEwNlx1MTE2N1x1MTFBQgpcdTExMDJcdTExNjJcdTExQkNcdTExMDdcdTExNjFcdTExQkMKXHUxMTAyXHUxMTYyXHUxMUJDXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTY5Clx1MTEwMlx1MTE2Nlx1MTFBOFx1MTExMFx1MTE2MVx1MTEwQlx1MTE3NQpcdTExMDJcdTExNjZcdTExQkFcdTExMERcdTExNjIKXHUxMTAyXHUxMTY5XHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwMlx1MTE2OVx1MTEwNVx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDJcdTExNjlcdTExMDVcdTExNjdcdTExQTgKXHUxMTAyXHUxMTY5XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwMlx1MTE2OVx1MTFBOFx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDJcdTExNjlcdTExQThcdTExMEVcdTExNjEKXHUxMTAyXHUxMTY5XHUxMUE4XHUxMTEyXHUxMTZBClx1MTEwMlx1MTE2OVx1MTFBQlx1MTEwNVx1MTE3NQpcdTExMDJcdTExNjlcdTExQUJcdTExMDZcdTExNkVcdTExQUIKXHUxMTAyXHUxMTY5XHUxMUFCXHUxMTBDXHUxMTYyXHUxMUJDClx1MTEwMlx1MTE2OVx1MTFBRlx1MTEwQlx1MTE3NQpcdTExMDJcdTExNjlcdTExQkNcdTExMDBcdTExNkUKXHUxMTAyXHUxMTY5XHUxMUJDXHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwMlx1MTE2OVx1MTFCQ1x1MTEwNlx1MTE3NVx1MTFBQgpcdTExMDJcdTExNjlcdTExQkNcdTExMDdcdTExNkUKXHUxMTAyXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwMlx1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDJcdTExNjlcdTExQkNcdTExMEVcdTExNjlcdTExQUIKXHUxMTAyXHUxMTY5XHUxMUMxXHUxMTBCXHUxMTc1Clx1MTEwMlx1MTE2RVx1MTFBQlx1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MQpcdTExMDJcdTExNkVcdTExQUJcdTExMDZcdTExNkVcdTExQUYKXHUxMTAyXHUxMTZFXHUxMUFCXHUxMTBBXHUxMTY1XHUxMUI4Clx1MTEwMlx1MTE3Mlx1MTEwQlx1MTE2RFx1MTFBOApcdTExMDJcdTExNzNcdTExMDFcdTExNzVcdTExQjcKXHUxMTAyXHUxMTczXHUxMUE4XHUxMTAzXHUxMTYyClx1MTEwMlx1MTE3M1x1MTFCQ1x1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDJcdTExNzNcdTExQkNcdTExMDVcdTExNjdcdTExQTgKXHUxMTAzXHUxMTYxXHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwM1x1MTE2MVx1MTEwQlx1MTE2M1x1MTFCQ1x1MTEwOVx1MTE2NVx1MTFCQwpcdTExMDNcdTExNjFcdTExMEJcdTExNzNcdTExQjcKXHUxMTAzXHUxMTYxXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTY1XHUxMTEwXHUxMTczClx1MTEwM1x1MTE2MVx1MTExMlx1MTE2Mlx1MTFCQwpcdTExMDNcdTExNjFcdTExQUJcdTExMDBcdTExNjgKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTAwXHUxMTY5XHUxMUFGClx1MTEwM1x1MTE2MVx1MTFBQlx1MTEwM1x1MTE2OVx1MTFBOApcdTExMDNcdTExNjFcdTExQUJcdTExMDZcdTExNjFcdTExQkEKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTA5XHUxMTZFXHUxMUFCClx1MTEwM1x1MTE2MVx1MTFBQlx1MTEwQlx1MTE2NQpcdTExMDNcdTExNjFcdTExQUJcdTExMEJcdTExNzEKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwM1x1MTE2MVx1MTFBQlx1MTEwRVx1MTE2NgpcdTExMDNcdTExNjFcdTExQUJcdTExMEVcdTExNkUKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTExXHUxMTY3XHUxMUFCClx1MTEwM1x1MTE2MVx1MTFBQlx1MTExMVx1MTE2RVx1MTFCQwpcdTExMDNcdTExNjFcdTExQUZcdTExMDBcdTExNjNcdTExQUYKXHUxMTAzXHUxMTYxXHUxMUFGXHUxMTA1XHUxMTY1Clx1MTEwM1x1MTE2MVx1MTFBRlx1MTEwNVx1MTE2N1x1MTFBOApcdTExMDNcdTExNjFcdTExQUZcdTExMDVcdTExNzUKXHUxMTAzXHUxMTYxXHUxMUIwXHUxMTAwXHUxMTY5XHUxMTAwXHUxMTc1Clx1MTEwM1x1MTE2MVx1MTFCN1x1MTEwM1x1MTE2MVx1MTFCQwpcdTExMDNcdTExNjFcdTExQjdcdTExMDdcdTExNjIKXHUxMTAzXHUxMTYxXHUxMUI3XHUxMTBCXHUxMTZEClx1MTEwM1x1MTE2MVx1MTFCN1x1MTEwQlx1MTE3NVx1MTFCNwpcdTExMDNcdTExNjFcdTExQjhcdTExMDdcdTExNjdcdTExQUIKXHUxMTAzXHUxMTYxXHUxMUI4XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwM1x1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3M1x1MTFBQgpcdTExMDNcdTExNjFcdTExQkNcdTExMDdcdTExNkVcdTExQUJcdTExMDBcdTExNjFcdTExQUIKXHUxMTAzXHUxMTYxXHUxMUJDXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwM1x1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDNcdTExNjJcdTExMDBcdTExNzJcdTExMDZcdTExNjkKXHUxMTAzXHUxMTYyXHUxMTAyXHUxMTYxXHUxMUJEClx1MTEwM1x1MTE2Mlx1MTEwM1x1MTE2MVx1MTFBQlx1MTExMlx1MTE3NQpcdTExMDNcdTExNjJcdTExMDNcdTExNjFcdTExQjgKXHUxMTAzXHUxMTYyXHUxMTAzXHUxMTY5XHUxMTA5XHUxMTc1Clx1MTEwM1x1MTE2Mlx1MTEwNVx1MTE2M1x1MTFBOApcdTExMDNcdTExNjJcdTExMDVcdTExNjNcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTA1XHUxMTcyXHUxMUE4Clx1MTEwM1x1MTE2Mlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMDNcdTExNjJcdTExMDdcdTExNkVcdTExMDdcdTExNkVcdTExQUIKXHUxMTAzXHUxMTYyXHUxMTA5XHUxMTc1XHUxMUFCClx1MTEwM1x1MTE2Mlx1MTEwQlx1MTE3M1x1MTFCQwpcdTExMDNcdTExNjJcdTExMENcdTExNjFcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTBDXHUxMTY1XHUxMUFCClx1MTEwM1x1MTE2Mlx1MTEwQ1x1MTE2NVx1MTFCOApcdTExMDNcdTExNjJcdTExMENcdTExNkVcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTBFXHUxMTYyXHUxMUE4Clx1MTEwM1x1MTE2Mlx1MTEwRVx1MTE2RVx1MTFBRgpcdTExMDNcdTExNjJcdTExMEVcdTExNkVcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTA1XHUxMTY3XHUxMUJDClx1MTEwM1x1MTE2Mlx1MTExMlx1MTE2MVx1MTFBOApcdTExMDNcdTExNjJcdTExMTJcdTExNjFcdTExQUJcdTExMDZcdTExNzVcdTExQUJcdTExMDBcdTExNkVcdTExQTgKXHUxMTAzXHUxMTYyXHUxMTEyXHUxMTYxXHUxMUI4XHUxMTA5XHUxMTc1XHUxMUFGClx1MTEwM1x1MTE2Mlx1MTExMlx1MTE2N1x1MTFCQwpcdTExMDNcdTExNjVcdTExQkNcdTExMEJcdTExNjVcdTExMDVcdTExNzUKXHUxMTAzXHUxMTY2XHUxMTBCXHUxMTc1XHUxMTEwXHUxMTczClx1MTEwM1x1MTE2OVx1MTEwM1x1MTE2Mlx1MTEwRVx1MTE2NgpcdTExMDNcdTExNjlcdTExMDNcdTExNjVcdTExQTgKXHUxMTAzXHUxMTY5XHUxMTAzXHUxMTZFXHUxMUE4Clx1MTEwM1x1MTE2OVx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMDNcdTExNjlcdTExMDlcdTExNjVcdTExMDBcdTExNkFcdTExQUIKXHUxMTAzXHUxMTY5XHUxMTA5XHUxMTc1XHUxMUI3Clx1MTEwM1x1MTE2OVx1MTEwQlx1MTE2RVx1MTFCNwpcdTExMDNcdTExNjlcdTExMEJcdTExNzVcdTExQjgKXHUxMTAzXHUxMTY5XHUxMTBDXHUxMTYxXHUxMTAwXHUxMTc1Clx1MTEwM1x1MTE2OVx1MTEwQ1x1MTE2NVx1MTExMlx1MTE3NQpcdTExMDNcdTExNjlcdTExMENcdTExNjVcdTExQUIKXHUxMTAzXHUxMTY5XHUxMTBDXHUxMTZFXHUxMUJDClx1MTEwM1x1MTE2OVx1MTEwRVx1MTE2MVx1MTFBOApcdTExMDNcdTExNjlcdTExQThcdTExMDBcdTExNjFcdTExQjcKXHUxMTAzXHUxMTY5XHUxMUE4XHUxMTA1XHUxMTc1XHUxMUI4Clx1MTEwM1x1MTE2OVx1MTFBOFx1MTEwOVx1MTE2NQpcdTExMDNcdTExNjlcdTExQThcdTExMEJcdTExNzVcdTExQUYKXHUxMTAzXHUxMTY5XHUxMUE4XHUxMTBFXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwM1x1MTE2OVx1MTFCQ1x1MTExMlx1MTE2QVx1MTEwRVx1MTE2Mlx1MTFBOApcdTExMDNcdTExNzFcdTExQkFcdTExMDZcdTExNjlcdTExMDlcdTExNzNcdTExQjgKXHUxMTAzXHUxMTcxXHUxMUJBXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwNFx1MTE2MVx1MTFBRlx1MTEwQlx1MTE2MVx1MTEwQlx1MTE3NQpcdTExMDZcdTExNjFcdTExMDJcdTExNkVcdTExMDVcdTExNjEKXHUxMTA2XHUxMTYxXHUxMTAyXHUxMTczXHUxMUFGClx1MTEwNlx1MTE2MVx1MTEwM1x1MTE2MVx1MTFCQwpcdTExMDZcdTExNjFcdTExMDVcdTExNjFcdTExMTBcdTExNjlcdTExQUIKXHUxMTA2XHUxMTYxXHUxMTA1XHUxMTY3XHUxMUFCClx1MTEwNlx1MTE2MVx1MTEwNlx1MTE2RVx1MTEwNVx1MTE3NQpcdTExMDZcdTExNjFcdTExMDlcdTExNjFcdTExMENcdTExNzUKXHUxMTA2XHUxMTYxXHUxMTBCXHUxMTYzXHUxMUE4Clx1MTEwNlx1MTE2MVx1MTEwQlx1MTE2RFx1MTEwMlx1MTE2Nlx1MTEwQ1x1MTE3MwpcdTExMDZcdTExNjFcdTExMEJcdTExNzNcdTExQUYKXHUxMTA2XHUxMTYxXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwNlx1MTE2MVx1MTEwQlx1MTE3NVx1MTEwRlx1MTE3MwpcdTExMDZcdTExNjFcdTExMENcdTExNkVcdTExQkMKXHUxMTA2XHUxMTYxXHUxMTBDXHUxMTc1XHUxMTA2XHUxMTYxXHUxMUE4Clx1MTEwNlx1MTE2MVx1MTEwRVx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2MVx1MTEwQ1x1MTE3NQpcdTExMDZcdTExNjFcdTExMEVcdTExNjFcdTExQUYKXHUxMTA2XHUxMTYxXHUxMTEyXHUxMTczXHUxMUFCClx1MTEwNlx1MTE2MVx1MTFBOFx1MTEwMFx1MTE2NVx1MTFBRlx1MTEwNVx1MTE3NQpcdTExMDZcdTExNjFcdTExQThcdTExMDJcdTExNjIKXHUxMTA2XHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwNlx1MTE2MVx1MTFBQlx1MTEwMlx1MTE2MVx1MTFCNwpcdTExMDZcdTExNjFcdTExQUJcdTExMDNcdTExNkUKXHUxMTA2XHUxMTYxXHUxMUFCXHUxMTA5XHUxMTY2Clx1MTEwNlx1MTE2MVx1MTFBQlx1MTEwQlx1MTE2M1x1MTFBOApcdTExMDZcdTExNjFcdTExQUJcdTExMEJcdTExNzVcdTExQUYKXHUxMTA2XHUxMTYxXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwNlx1MTE2MVx1MTFBQlx1MTEwQ1x1MTE2OVx1MTFBOApcdTExMDZcdTExNjFcdTExQUJcdTExMTJcdTExNkEKXHUxMTA2XHUxMTYxXHUxMUFEXHUxMTBCXHUxMTc1Clx1MTEwNlx1MTE2MVx1MTFBRlx1MTEwMFx1MTE3NQpcdTExMDZcdTExNjFcdTExQUZcdTExMEFcdTExNzNcdTExQjcKXHUxMTA2XHUxMTYxXHUxMUFGXHUxMTEwXHUxMTZFClx1MTEwNlx1MTE2MVx1MTFCN1x1MTEwM1x1MTE2Mlx1MTEwNVx1MTE2OQpcdTExMDZcdTExNjFcdTExQkNcdTExMEJcdTExNkZcdTExQUJcdTExMDBcdTExNjdcdTExQkMKXHUxMTA2XHUxMTYyXHUxMTAyXHUxMTY3XHUxMUFCClx1MTEwNlx1MTE2Mlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMDZcdTExNjJcdTExMDVcdTExNjdcdTExQTgKXHUxMTA2XHUxMTYyXHUxMTA3XHUxMTY1XHUxMUFCClx1MTEwNlx1MTE2Mlx1MTEwOVx1MTE3M1x1MTEwRlx1MTE2NVx1MTFCNwpcdTExMDZcdTExNjJcdTExMEJcdTExNzVcdTExQUYKXHUxMTA2XHUxMTYyXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwNlx1MTE2Mlx1MTFBOFx1MTEwQ1x1MTE2RQpcdTExMDZcdTExNjVcdTExQThcdTExMEJcdTExNzUKXHUxMTA2XHUxMTY1XHUxMUFCXHUxMTBDXHUxMTY1Clx1MTEwNlx1MTE2NVx1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMDZcdTExNjVcdTExQUZcdTExMDVcdTExNzUKXHUxMTA2XHUxMTY2XHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwNlx1MTE2N1x1MTEwMlx1MTE3M1x1MTEwNVx1MTE3NQpcdTExMDZcdTExNjdcdTExMEVcdTExNzVcdTExQUYKXHUxMTA2XHUxMTY3XHUxMUFCXHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwNlx1MTE2N1x1MTFBRlx1MTEwRVx1MTE3NQpcdTExMDZcdTExNjdcdTExQkNcdTExMDNcdTExNjFcdTExQUIKXHUxMTA2XHUxMTY3XHUxMUJDXHUxMTA1XHUxMTY3XHUxMUJDClx1MTEwNlx1MTE2N1x1MTFCQ1x1MTEwQlx1MTE2OApcdTExMDZcdTExNjdcdTExQkNcdTExMEJcdTExNzQKXHUxMTA2XHUxMTY3XHUxMUJDXHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwNlx1MTE2N1x1MTFCQ1x1MTEwRVx1MTE3NVx1MTFCQwpcdTExMDZcdTExNjdcdTExQkNcdTExMTJcdTExNjFcdTExQjcKXHUxMTA2XHUxMTY5XHUxMTAwXHUxMTczXHUxMUI3Clx1MTEwNlx1MTE2OVx1MTEwMlx1MTE3NVx1MTExMFx1MTE2NQpcdTExMDZcdTExNjlcdTExMDNcdTExNjZcdTExQUYKXHUxMTA2XHUxMTY5XHUxMTAzXHUxMTczXHUxMUFCClx1MTEwNlx1MTE2OVx1MTEwN1x1MTE2NVx1MTFCNwpcdTExMDZcdTExNjlcdTExMDlcdTExNzNcdTExQjgKXHUxMTA2XHUxMTY5XHUxMTBCXHUxMTYzXHUxMUJDClx1MTEwNlx1MTE2OVx1MTEwQlx1MTE3NVx1MTFCNwpcdTExMDZcdTExNjlcdTExMENcdTExNjlcdTExMDVcdTExNzUKXHUxMTA2XHUxMTY5XHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwNlx1MTE2OVx1MTExMFx1MTE2RVx1MTFCQ1x1MTEwQlx1MTE3NQpcdTExMDZcdTExNjlcdTExQThcdTExMDBcdTExNjVcdTExQUZcdTExMEJcdTExNzUKXHUxMTA2XHUxMTY5XHUxMUE4XHUxMTA1XHUxMTY5XHUxMUE4Clx1MTEwNlx1MTE2OVx1MTFBOFx1MTEwOVx1MTE2MQpcdTExMDZcdTExNjlcdTExQThcdTExMDlcdTExNjlcdTExMDVcdTExNzUKXHUxMTA2XHUxMTY5XHUxMUE4XHUxMTA5XHUxMTZFXHUxMUI3Clx1MTEwNlx1MTE2OVx1MTFBOFx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDZcdTExNjlcdTExQThcdTExMTFcdTExNkQKXHUxMTA2XHUxMTY5XHUxMUFGXHUxMTA1XHUxMTYyClx1MTEwNlx1MTE2OVx1MTFCN1x1MTEwNlx1MTE2MgpcdTExMDZcdTExNjlcdTExQjdcdTExMDZcdTExNkVcdTExMDBcdTExNjYKXHUxMTA2XHUxMTY5XHUxMUI3XHUxMTA5XHUxMTYxXHUxMUFGClx1MTEwNlx1MTE2OVx1MTFCN1x1MTEwOVx1MTE2OVx1MTFBOApcdTExMDZcdTExNjlcdTExQjdcdTExMENcdTExNzVcdTExQkEKXHUxMTA2XHUxMTY5XHUxMUI3XHUxMTEwXHUxMTY5XHUxMUJDClx1MTEwNlx1MTE2OVx1MTFCOFx1MTEwOVx1MTE3NQpcdTExMDZcdTExNkVcdTExMDBcdTExNkFcdTExQUJcdTExMDlcdTExNzVcdTExQjcKXHUxMTA2XHUxMTZFXHUxMTAwXHUxMTZFXHUxMUJDXHUxMTEyXHUxMTZBClx1MTEwNlx1MTE2RVx1MTEwM1x1MTE2NVx1MTEwQlx1MTE3MQpcdTExMDZcdTExNkVcdTExMDNcdTExNjVcdTExQjcKXHUxMTA2XHUxMTZFXHUxMTA1XHUxMTczXHUxMUMxClx1MTEwNlx1MTE2RVx1MTEwOVx1MTE3M1x1MTFBQgpcdTExMDZcdTExNkVcdTExMEJcdTExNjVcdTExQkEKXHUxMTA2XHUxMTZFXHUxMTBCXHUxMTY3XHUxMUE4Clx1MTEwNlx1MTE2RVx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDZcdTExNkVcdTExMENcdTExNjlcdTExMDBcdTExNjVcdTExQUIKXHUxMTA2XHUxMTZFXHUxMTBDXHUxMTc1XHUxMTAwXHUxMTYyClx1MTEwNlx1MTE2RVx1MTEwRVx1MTE2NVx1MTFBOApcdTExMDZcdTExNkVcdTExQUJcdTExMDBcdTExNkUKXHUxMTA2XHUxMTZFXHUxMUFCXHUxMTAzXHUxMTczXHUxMUE4Clx1MTEwNlx1MTE2RVx1MTFBQlx1MTEwN1x1MTE2NVx1MTFCOApcdTExMDZcdTExNkVcdTExQUJcdTExMDlcdTExNjUKXHUxMTA2XHUxMTZFXHUxMUFCXHUxMTBDXHUxMTY2Clx1MTEwNlx1MTE2RVx1MTFBQlx1MTExMlx1MTE2MVx1MTFBOApcdTExMDZcdTExNkVcdTExQUJcdTExMTJcdTExNkEKXHUxMTA2XHUxMTZFXHUxMUFGXHUxMTAwXHUxMTYxClx1MTEwNlx1MTE2RVx1MTFBRlx1MTEwMFx1MTE2NVx1MTFBQgpcdTExMDZcdTExNkVcdTExQUZcdTExMDBcdTExNjdcdTExQUYKXHUxMTA2XHUxMTZFXHUxMUFGXHUxMTAwXHUxMTY5XHUxMTAwXHUxMTc1Clx1MTEwNlx1MTE2RVx1MTFBRlx1MTEwNVx1MTE2OVx1MTFBQgpcdTExMDZcdTExNkVcdTExQUZcdTExMDVcdTExNzVcdTExMTJcdTExNjFcdTExQTgKXHUxMTA2XHUxMTZFXHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwNlx1MTE2RVx1MTFBRlx1MTEwQ1x1MTE3NVx1MTFBRgpcdTExMDZcdTExNkVcdTExQUZcdTExMEVcdTExNjYKXHUxMTA2XHUxMTc1XHUxMTAwXHUxMTZFXHUxMUE4Clx1MTEwNlx1MTE3NVx1MTEwM1x1MTE3NVx1MTEwQlx1MTE2NQpcdTExMDZcdTExNzVcdTExMDlcdTExNjFcdTExMEJcdTExNzVcdTExQUYKXHUxMTA2XHUxMTc1XHUxMTA5XHUxMTZFXHUxMUFGClx1MTEwNlx1MTE3NVx1MTEwQlx1MTE2N1x1MTFBOApcdTExMDZcdTExNzVcdTExMEJcdTExNkRcdTExQkNcdTExMDlcdTExNzVcdTExQUYKXHUxMTA2XHUxMTc1XHUxMTBCXHUxMTZFXHUxMUI3Clx1MTEwNlx1MTE3NVx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDZcdTExNzVcdTExMTBcdTExNzVcdTExQkMKXHUxMTA2XHUxMTc1XHUxMTEyXHUxMTY5XHUxMUFCClx1MTEwNlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE2MVx1MTFBQgpcdTExMDZcdTExNzVcdTExQUJcdTExMENcdTExNjlcdTExQTgKXHUxMTA2XHUxMTc1XHUxMUFCXHUxMTBDXHUxMTZFClx1MTEwNlx1MTE3NVx1MTFBRVx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDZcdTExNzVcdTExQUZcdTExMDBcdTExNjFcdTExMDVcdTExNkUKXHUxMTA2XHUxMTc1XHUxMUFGXHUxMTA1XHUxMTc1XHUxMTA2XHUxMTc1XHUxMTEwXHUxMTY1Clx1MTEwNlx1MTE3NVx1MTFDMFx1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExMDBcdTExNjFcdTExMENcdTExNzUKXHUxMTA3XHUxMTYxXHUxMTAwXHUxMTZFXHUxMTAyXHUxMTc1Clx1MTEwN1x1MTE2MVx1MTEwMlx1MTE2MVx1MTEwMlx1MTE2MQpcdTExMDdcdTExNjFcdTExMDJcdTExNzNcdTExQUYKXHUxMTA3XHUxMTYxXHUxMTAzXHUxMTYxXHUxMUE4Clx1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFCQVx1MTEwMFx1MTE2MQpcdTExMDdcdTExNjFcdTExMDVcdTExNjFcdTExQjcKXHUxMTA3XHUxMTYxXHUxMTBCXHUxMTc1XHUxMTA1XHUxMTY1XHUxMTA5XHUxMTczClx1MTEwN1x1MTE2MVx1MTExMFx1MTE2MVx1MTFCQwpcdTExMDdcdTExNjFcdTExQThcdTExMDZcdTExNkVcdTExQUZcdTExMDBcdTExNkFcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYxClx1MTEwN1x1MTE2MVx1MTFBOFx1MTEwOVx1MTE2RQpcdTExMDdcdTExNjFcdTExQUJcdTExMDNcdTExNjIKXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTAzXHUxMTczXHUxMTA5XHUxMTc1Clx1MTEwN1x1MTE2MVx1MTFBQlx1MTEwNlx1MTE2MVx1MTFBRgpcdTExMDdcdTExNjFcdTExQUJcdTExMDdcdTExNjFcdTExQUYKXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwN1x1MTE2MVx1MTFBQlx1MTEwQlx1MTE3M1x1MTFCQwpcdTExMDdcdTExNjFcdTExQUJcdTExMENcdTExNjFcdTExQkMKXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTBDXHUxMTZFXHUxMUE4Clx1MTEwN1x1MTE2MVx1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMDdcdTExNjFcdTExQUJcdTExMEVcdTExNjFcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUFFXHUxMTBFXHUxMTc1XHUxMUI3Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwMFx1MTE2MVx1MTEwNVx1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExQUZcdTExMDBcdTExNjVcdTExQUZcdTExMEJcdTExNzNcdTExQjcKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTAwXHUxMTY3XHUxMUFCClx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMDdcdTExNjFcdTExQUZcdTExMDVcdTExNjYKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTA2XHUxMTY5XHUxMUE4Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExQUZcdTExMDlcdTExNjJcdTExQkMKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwQ1x1MTE2MVx1MTEwMFx1MTE2RVx1MTFBOApcdTExMDdcdTExNjFcdTExQUZcdTExMENcdTExNjVcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTEwXHUxMTY5XHUxMUI4Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTExMVx1MTE2RApcdTExMDdcdTExNjFcdTExQjdcdTExMTJcdTExNjFcdTExMDJcdTExNzNcdTExQUYKXHUxMTA3XHUxMTYxXHUxMUI4XHUxMTAwXHUxMTczXHUxMTA1XHUxMTczXHUxMUJBClx1MTEwN1x1MTE2MVx1MTFCOFx1MTEwNlx1MTE2MVx1MTFCQQpcdTExMDdcdTExNjFcdTExQjhcdTExMDlcdTExNjFcdTExQkMKXHUxMTA3XHUxMTYxXHUxMUI4XHUxMTA5XHUxMTY5XHUxMUMwClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDdcdTExNjFcdTExQkNcdTExMDZcdTExNjdcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExQkNcdTExMDdcdTExNjVcdTExQjgKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTA5XHUxMTY5XHUxMUJDClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwOVx1MTE3NVx1MTFBOApcdTExMDdcdTExNjFcdTExQkNcdTExMEJcdTExNjFcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTBCXHUxMTZFXHUxMUFGClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE3NQpcdTExMDdcdTExNjFcdTExQkNcdTExMTJcdTExNjFcdTExQTgKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTEyXHUxMTYyClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTExMlx1MTE2M1x1MTFCQwpcdTExMDdcdTExNjJcdTExMDBcdTExNjdcdTExQkMKXHUxMTA3XHUxMTYyXHUxMTAxXHUxMTY5XHUxMUI4Clx1MTEwN1x1MTE2Mlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMDdcdTExNjJcdTExMDNcdTExNzNcdTExMDZcdTExNzVcdTExQUJcdTExMTBcdTExNjVcdTExQUIKXHUxMTA3XHUxMTYyXHUxMUE4XHUxMTAzXHUxMTZFXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwN1x1MTE2Mlx1MTFBOFx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDdcdTExNjJcdTExQThcdTExMDlcdTExNjVcdTExQkMKXHUxMTA3XHUxMTYyXHUxMUE4XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwN1x1MTE2Mlx1MTFBOFx1MTEwQ1x1MTE2NgpcdTExMDdcdTExNjJcdTExQThcdTExMTJcdTExNkFcdTExMENcdTExNjVcdTExQjcKXHUxMTA3XHUxMTY1XHUxMTA1XHUxMTczXHUxMUJBClx1MTEwN1x1MTE2NVx1MTEwOVx1MTE2NVx1MTFCQQpcdTExMDdcdTExNjVcdTExMTBcdTExNzNcdTExQUIKXHUxMTA3XHUxMTY1XHUxMUFCXHUxMTAwXHUxMTYyClx1MTEwN1x1MTE2NVx1MTFBQlx1MTEwQlx1MTE2N1x1MTFBOApcdTExMDdcdTExNjVcdTExQUJcdTExMENcdTExNzUKXHUxMTA3XHUxMTY1XHUxMUFCXHUxMTEyXHUxMTY5Clx1MTEwN1x1MTE2NVx1MTFBRlx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDdcdTExNjVcdTExQUZcdTExMDVcdTExNjYKXHUxMTA3XHUxMTY1XHUxMUFGXHUxMTBBXHUxMTY1Clx1MTEwN1x1MTE2NVx1MTFCN1x1MTEwQlx1MTE3MQpcdTExMDdcdTExNjVcdTExQjdcdTExMEJcdTExNzVcdTExQUIKXHUxMTA3XHUxMTY1XHUxMUI3XHUxMTBDXHUxMTZDClx1MTEwN1x1MTE2NVx1MTFCOFx1MTEwNVx1MTE3Mlx1MTFBRgpcdTExMDdcdTExNjVcdTExQjhcdTExMEJcdTExNkZcdTExQUIKXHUxMTA3XHUxMTY1XHUxMUI4XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwN1x1MTE2NVx1MTFCOFx1MTEwRVx1MTE3NVx1MTFBOApcdTExMDdcdTExNjZcdTExMEJcdTExNzVcdTExMENcdTExNzVcdTExQkMKXHUxMTA3XHUxMTY2XHUxMUFGXHUxMTEwXHUxMTczClx1MTEwN1x1MTE2N1x1MTFBQlx1MTEwMFx1MTE2N1x1MTFCQwpcdTExMDdcdTExNjdcdTExQUJcdTExMDNcdTExNjlcdTExQkMKXHUxMTA3XHUxMTY3XHUxMUFCXHUxMTA2XHUxMTY3XHUxMUJDClx1MTEwN1x1MTE2N1x1MTFBQlx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMDdcdTExNjdcdTExQUJcdTExMTJcdTExNjlcdTExMDlcdTExNjEKXHUxMTA3XHUxMTY3XHUxMUFCXHUxMTEyXHUxMTZBClx1MTEwN1x1MTE2N1x1MTFBRlx1MTEwM1x1MTE2OQpcdTExMDdcdTExNjdcdTExQUZcdTExMDZcdTExNjdcdTExQkMKXHUxMTA3XHUxMTY3XHUxMUFGXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwN1x1MTE2N1x1MTFCQ1x1MTEwOVx1MTE3NVx1MTFBRgpcdTExMDdcdTExNjdcdTExQkNcdTExMEJcdTExNjFcdTExMDVcdTExNzUKXHUxMTA3XHUxMTY3XHUxMUJDXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwN1x1MTE2OVx1MTEwMFx1MTE2QVx1MTFBQgpcdTExMDdcdTExNjlcdTExMDJcdTExNjVcdTExMDlcdTExNzMKXHUxMTA3XHUxMTY5XHUxMTA1XHUxMTYxXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTEwN1x1MTE2OVx1MTEwNVx1MTE2MVx1MTFCNwpcdTExMDdcdTExNjlcdTExMDVcdTExNzNcdTExQjcKXHUxMTA3XHUxMTY5XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwN1x1MTE2OVx1MTEwQlx1MTE2MVx1MTFBQgpcdTExMDdcdTExNjlcdTExMENcdTExNjFcdTExMDBcdTExNzUKXHUxMTA3XHUxMTY5XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwN1x1MTE2OVx1MTEwQ1x1MTE2NVx1MTFBQgpcdTExMDdcdTExNjlcdTExMENcdTExNjlcdTExQUIKXHUxMTA3XHUxMTY5XHUxMTEwXHUxMTY5XHUxMUJDClx1MTEwN1x1MTE2OVx1MTExMVx1MTE2N1x1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDdcdTExNjlcdTExMTJcdTExNjVcdTExQjcKXHUxMTA3XHUxMTY5XHUxMUE4XHUxMTAzXHUxMTY5Clx1MTEwN1x1MTE2OVx1MTFBOFx1MTEwOVx1MTE2MQpcdTExMDdcdTExNjlcdTExQThcdTExMDlcdTExNkVcdTExQkNcdTExMEJcdTExNjEKXHUxMTA3XHUxMTY5XHUxMUE4XHUxMTA5XHUxMTczXHUxMUI4Clx1MTEwN1x1MTE2OVx1MTFBOVx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDdcdTExNjlcdTExQUJcdTExMDBcdTExNjdcdTExQThcdTExMENcdTExNjVcdTExQTgKXHUxMTA3XHUxMTY5XHUxMUFCXHUxMTA1XHUxMTYyClx1MTEwN1x1MTE2OVx1MTFBQlx1MTEwN1x1MTE2RQpcdTExMDdcdTExNjlcdTExQUJcdTExMDlcdTExNjEKXHUxMTA3XHUxMTY5XHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwN1x1MTE2OVx1MTFBQlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDdcdTExNjlcdTExQUJcdTExMENcdTExNzVcdTExQUYKXHUxMTA3XHUxMTY5XHUxMUFGXHUxMTExXHUxMTY2XHUxMUFCClx1MTEwN1x1MTE2OVx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMDdcdTExNjlcdTExQkNcdTExMENcdTExNzUKXHUxMTA3XHUxMTY5XHUxMUJDXHUxMTEwXHUxMTZFClx1MTEwN1x1MTE2RVx1MTEwMFx1MTE3M1x1MTFBQgpcdTExMDdcdTExNkVcdTExMDFcdTExNzNcdTExMDVcdTExNjVcdTExMEJcdTExNkVcdTExQjcKXHUxMTA3XHUxMTZFXHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwN1x1MTE2RVx1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwOVx1MTE2MVx1MTFBQgpcdTExMDdcdTExNkVcdTExMDZcdTExNkVcdTExQUIKXHUxMTA3XHUxMTZFXHUxMTA3XHUxMTZFXHUxMUFCClx1MTEwN1x1MTE2RVx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMDdcdTExNkVcdTExMDlcdTExNjFcdTExQkMKXHUxMTA3XHUxMTZFXHUxMTBCXHUxMTY1XHUxMUJGClx1MTEwN1x1MTE2RVx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDdcdTExNkVcdTExMENcdTExNjFcdTExQThcdTExMEJcdTExNkRcdTExQkMKXHUxMTA3XHUxMTZFXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwN1x1MTE2RVx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMDdcdTExNkVcdTExMENcdTExNjlcdTExQTgKXHUxMTA3XHUxMTZFXHUxMTBDXHUxMTc1XHUxMTA1XHUxMTY1XHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwN1x1MTE2RVx1MTEwRVx1MTE3NVx1MTFBQgpcdTExMDdcdTExNkVcdTExMTBcdTExNjFcdTExQTgKXHUxMTA3XHUxMTZFXHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwN1x1MTE2RVx1MTExMlx1MTE2Q1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDdcdTExNkVcdTExQThcdTExMDdcdTExNkUKXHUxMTA3XHUxMTZFXHUxMUE4XHUxMTEyXHUxMTYxXHUxMUFCClx1MTEwN1x1MTE2RVx1MTFBQlx1MTEwMlx1MTE2OQpcdTExMDdcdTExNkVcdTExQUJcdTExMDVcdTExNjNcdTExQkMKXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTA1XHUxMTc1Clx1MTEwN1x1MTE2RVx1MTFBQlx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDdcdTExNkVcdTExQUJcdTExMDlcdTExNjVcdTExQTgKXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTBCXHUxMTYzClx1MTEwN1x1MTE2RVx1MTFBQlx1MTEwQlx1MTE3MVx1MTEwMFx1MTE3NQpcdTExMDdcdTExNkVcdTExQUJcdTExMTFcdTExNzVcdTExQUYKXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTEyXHUxMTY5XHUxMUJDXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTEwN1x1MTE2RVx1MTFBRlx1MTEwMFx1MTE2OVx1MTEwMFx1MTE3NQpcdTExMDdcdTExNkVcdTExQUZcdTExMDBcdTExNkEKXHUxMTA3XHUxMTZFXHUxMUFGXHUxMTAwXHUxMTZEClx1MTEwN1x1MTE2RVx1MTFBRlx1MTEwMVx1MTE2OVx1MTFCRQpcdTExMDdcdTExNkVcdTExQUZcdTExMDZcdTExNjFcdTExQUIKXHUxMTA3XHUxMTZFXHUxMUFGXHUxMTA3XHUxMTY1XHUxMUI4Clx1MTEwN1x1MTE2RVx1MTFBRlx1MTEwN1x1MTE3NVx1MTFCRQpcdTExMDdcdTExNkVcdTExQUZcdTExMEJcdTExNjFcdTExQUIKXHUxMTA3XHUxMTZFXHUxMUFGXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTc1XHUxMUE4Clx1MTEwN1x1MTE2RVx1MTFBRlx1MTExMlx1MTE2Mlx1MTFCQwpcdTExMDdcdTExNzNcdTExMDVcdTExNjJcdTExQUJcdTExMDNcdTExNzMKXHUxMTA3XHUxMTc1XHUxMTAwXHUxMTczXHUxMUE4Clx1MTEwN1x1MTE3NVx1MTEwMlx1MTE2MVx1MTFBQgpcdTExMDdcdTExNzVcdTExMDJcdTExNzVcdTExQUYKXHUxMTA3XHUxMTc1XHUxMTAzXHUxMTZFXHUxMUFGXHUxMTAwXHUxMTc1Clx1MTEwN1x1MTE3NVx1MTEwM1x1MTE3NVx1MTEwQlx1MTE2OQpcdTExMDdcdTExNzVcdTExMDVcdTExNjlcdTExMDlcdTExNjkKXHUxMTA3XHUxMTc1XHUxMTA2XHUxMTYxXHUxMUFCClx1MTEwN1x1MTE3NVx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDdcdTExNzVcdTExMDZcdTExNzVcdTExQUYKXHUxMTA3XHUxMTc1XHUxMTA3XHUxMTYxXHUxMTA1XHUxMTYxXHUxMUI3Clx1MTEwN1x1MTE3NVx1MTEwN1x1MTE3NVx1MTFCN1x1MTEwN1x1MTE2MVx1MTFCOApcdTExMDdcdTExNzVcdTExMDlcdTExNjFcdTExQkMKXHUxMTA3XHUxMTc1XHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwN1x1MTE3NVx1MTEwQlx1MTE3Mlx1MTFBRgpcdTExMDdcdTExNzVcdTExMENcdTExNkVcdTExQkMKXHUxMTA3XHUxMTc1XHUxMTEwXHUxMTYxXHUxMTA2XHUxMTc1XHUxMUFCClx1MTEwN1x1MTE3NVx1MTExMVx1MTE2MVx1MTFBQgpcdTExMDdcdTExNzVcdTExQUZcdTExMDNcdTExNzVcdTExQkMKXHUxMTA3XHUxMTc1XHUxMUJBXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwN1x1MTE3NVx1MTFCQVx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2RVx1MTFBRgpcdTExMDdcdTExNzVcdTExQkFcdTExMENcdTExNkVcdTExQUZcdTExMDBcdTExNzUKXHUxMTA3XHUxMTc1XHUxMUJFXHUxMTAxXHUxMTYxXHUxMUFGClx1MTEwOFx1MTE2MVx1MTFBRlx1MTEwMFx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDhcdTExNjFcdTExQUZcdTExMDVcdTExNjIKXHUxMTA4XHUxMTYxXHUxMUFGXHUxMTA1XHUxMTc1Clx1MTEwOVx1MTE2MVx1MTEwMFx1MTE2NVx1MTFBQgpcdTExMDlcdTExNjFcdTExMDBcdTExNjhcdTExMENcdTExNjVcdTExQUYKXHUxMTA5XHUxMTYxXHUxMTAyXHUxMTYxXHUxMTBCXHUxMTc1Clx1MTEwOVx1MTE2MVx1MTEwMlx1MTE2M1x1MTFCQwpcdTExMDlcdTExNjFcdTExMDVcdTExNjFcdTExQjcKXHUxMTA5XHUxMTYxXHUxMTA1XHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2MVx1MTEwNVx1MTE3NVx1MTFCOApcdTExMDlcdTExNjFcdTExMDZcdTExNjlcdTExMDJcdTExNzVcdTExQjcKXHUxMTA5XHUxMTYxXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwN1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNjFcdTExMDlcdTExNjFcdTExQkMKXHUxMTA5XHUxMTYxXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTEyXHUxMTZBXHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMDlcdTExNjFcdTExMDlcdTExNzNcdTExQjcKXHUxMTA5XHUxMTYxXHUxMTA5XHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwQlx1MTE2NVx1MTFCOApcdTExMDlcdTExNjFcdTExMEJcdTExNkRcdTExQkMKXHUxMTA5XHUxMTYxXHUxMTBCXHUxMTZGXHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNjFcdTExMENcdTExNjVcdTExQUIKXHUxMTA5XHUxMTYxXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwOVx1MTE2MVx1MTEwRVx1MTE2OVx1MTFBQgpcdTExMDlcdTExNjFcdTExMEVcdTExNkVcdTExQUJcdTExMDBcdTExNzUKXHUxMTA5XHUxMTYxXHUxMTEwXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2MVx1MTExMFx1MTE2RVx1MTEwNVx1MTE3NQpcdTExMDlcdTExNjFcdTExMTJcdTExNzNcdTExQUYKXHUxMTA5XHUxMTYxXHUxMUFCXHUxMTAwXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2MVx1MTFBQlx1MTEwN1x1MTE2RVx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE2QQpcdTExMDlcdTExNjFcdTExQUJcdTExMEJcdTExNjVcdTExQjgKXHUxMTA5XHUxMTYxXHUxMUFCXHUxMTBFXHUxMTYyXHUxMUE4Clx1MTEwOVx1MTE2MVx1MTFBRlx1MTEwNVx1MTE3NVx1MTFCNwpcdTExMDlcdTExNjFcdTExQUZcdTExMEJcdTExNzVcdTExQUIKXHUxMTA5XHUxMTYxXHUxMUFGXHUxMTBEXHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE2MVx1MTFCN1x1MTEwMFx1MTE2OFx1MTExMFx1MTE2MVx1MTFCQwpcdTExMDlcdTExNjFcdTExQjdcdTExMDBcdTExNkVcdTExQTgKXHUxMTA5XHUxMTYxXHUxMUI3XHUxMTA5XHUxMTc1XHUxMUI4Clx1MTEwOVx1MTE2MVx1MTFCN1x1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMDlcdTExNjFcdTExQjdcdTExMEVcdTExNjlcdTExQUIKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTAwXHUxMTZBXHUxMUFCClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDlcdTExNjFcdTExQkNcdTExMDNcdTExNjIKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTA1XHUxMTcyClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTFBQlx1MTEwMFx1MTE3NQpcdTExMDlcdTExNjFcdTExQkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2NVx1MTFCOApcdTExMDlcdTExNjFcdTExQkNcdTExMEJcdTExNzVcdTExQUIKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTBDXHUxMTYxClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDlcdTExNjFcdTExQkNcdTExMEVcdTExNjUKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTBFXHUxMTZFClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTExMFx1MTE2MgpcdTExMDlcdTExNjFcdTExQkNcdTExMTFcdTExNkQKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwOVx1MTE2MVx1MTFCQ1x1MTExMlx1MTE2QVx1MTFCQwpcdTExMDlcdTExNjJcdTExMDdcdTExNjdcdTExQTgKXHUxMTA5XHUxMTYyXHUxMUE4XHUxMTAxXHUxMTYxXHUxMUFGClx1MTEwOVx1MTE2Mlx1MTFBOFx1MTEwQlx1MTE2N1x1MTFBQlx1MTExMVx1MTE3NVx1MTFBRgpcdTExMDlcdTExNjJcdTExQkNcdTExMDBcdTExNjFcdTExQTgKXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTA2XHUxMTY3XHUxMUJDClx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNjJcdTExQkNcdTExMDdcdTExNjFcdTExQkNcdTExMDlcdTExNjlcdTExQkMKXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTEwOVx1MTE2NVx1MTFBQgpcdTExMDlcdTExNjJcdTExQkNcdTExMDlcdTExNzVcdTExQUIKXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTExMlx1MTE2QVx1MTFBRgpcdTExMDlcdTExNjVcdTExMDVcdTExNjFcdTExQjgKXHUxMTA5XHUxMTY1XHUxMTA1XHUxMTczXHUxMUFCClx1MTEwOVx1MTE2NVx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDlcdTExNjVcdTExMDZcdTExNzVcdTExQUIKXHUxMTA5XHUxMTY1XHUxMTA3XHUxMTc1XHUxMTA5XHUxMTczClx1MTEwOVx1MTE2NVx1MTEwQlx1MTE2M1x1MTFCQwpcdTExMDlcdTExNjVcdTExMEJcdTExNkVcdTExQUYKXHUxMTA5XHUxMTY1XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwOVx1MTE2NVx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDlcdTExNjVcdTExMERcdTExNjlcdTExQTgKXHUxMTA5XHUxMTY1XHUxMTBGXHUxMTczXHUxMUFGClx1MTEwOVx1MTE2NVx1MTFBOFx1MTEwOVx1MTE2MQpcdTExMDlcdTExNjVcdTExQThcdTExMEJcdTExNzIKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTAwXHUxMTY1Clx1MTEwOVx1MTE2NVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNjVcdTExQUJcdTExMDdcdTExNjIKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFBQlx1MTEwOVx1MTE2RQpcdTExMDlcdTExNjVcdTExQUJcdTExMEJcdTExNkZcdTExQUIKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBQgpcdTExMDlcdTExNjVcdTExQUJcdTExMTBcdTExNjJcdTExQTgKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTExXHUxMTZFXHUxMUJDXHUxMTAwXHUxMTc1Clx1MTEwOVx1MTE2NVx1MTFBRlx1MTEwMFx1MTE2NVx1MTEwQ1x1MTE3NQpcdTExMDlcdTExNjVcdTExQUZcdTExMDJcdTExNjFcdTExQUYKXHUxMTA5XHUxMTY1XHUxMUFGXHUxMTA1XHUxMTY1XHUxMUJDXHUxMTEwXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFBRlx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDlcdTExNjVcdTExQUZcdTExMDZcdTExNkVcdTExQUIKXHUxMTA5XHUxMTY1XHUxMUFGXHUxMTA5XHUxMTYxClx1MTEwOVx1MTE2NVx1MTFBRlx1MTEwQlx1MTE2MVx1MTFBOFx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMDlcdTExNjVcdTExQUZcdTExMEVcdTExNzUKXHUxMTA5XHUxMTY1XHUxMUFGXHUxMTEwXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFCOFx1MTEwQVx1MTE3NQpcdTExMDlcdTExNjVcdTExQkNcdTExMDBcdTExNjlcdTExQkMKXHUxMTA5XHUxMTY1XHUxMUJDXHUxMTAzXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFCQ1x1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDlcdTExNjVcdTExQkNcdTExMDdcdTExNjdcdTExQUYKXHUxMTA5XHUxMTY1XHUxMUJDXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwOVx1MTE2NVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNjVcdTExQkNcdTExMENcdTExNjVcdTExQTgKXHUxMTA5XHUxMTY1XHUxMUJDXHUxMTBDXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2NVx1MTFCQ1x1MTExMlx1MTE2MVx1MTFCNwpcdTExMDlcdTExNjZcdTExMDBcdTExNzNcdTExQjcKXHUxMTA5XHUxMTY2XHUxMTA2XHUxMTc1XHUxMTAyXHUxMTYxClx1MTEwOVx1MTE2Nlx1MTEwOVx1MTE2MVx1MTFCQwpcdTExMDlcdTExNjZcdTExMEJcdTExNkZcdTExQUYKXHUxMTA5XHUxMTY2XHUxMTBDXHUxMTY5XHUxMUJDXHUxMTAzXHUxMTYyXHUxMTBCXHUxMTZBXHUxMUJDClx1MTEwOVx1MTE2Nlx1MTExMFx1MTE2MVx1MTFBOApcdTExMDlcdTExNjZcdTExQUJcdTExMTBcdTExNjUKXHUxMTA5XHUxMTY2XHUxMUFCXHUxMTEwXHUxMTc1XHUxMTA2XHUxMTc1XHUxMTEwXHUxMTY1Clx1MTEwOVx1MTE2Nlx1MTFCQVx1MTEwRFx1MTE2MgpcdTExMDlcdTExNjlcdTExMDBcdTExNzJcdTExMDZcdTExNjkKXHUxMTA5XHUxMTY5XHUxMTAwXHUxMTczXHUxMUE4XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwOVx1MTE2OVx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDlcdTExNjlcdTExMDJcdTExNjFcdTExMDBcdTExNzUKXHUxMTA5XHUxMTY5XHUxMTAyXHUxMTY3XHUxMUFCClx1MTEwOVx1MTE2OVx1MTEwM1x1MTE3M1x1MTFBOApcdTExMDlcdTExNjlcdTExMDZcdTExNjFcdTExQkMKXHUxMTA5XHUxMTY5XHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwOVx1MTE2OVx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMDlcdTExNjlcdTExMDlcdTExNjlcdTExQTgKXHUxMTA5XHUxMTY5XHUxMTBCXHUxMTYxXHUxMTAwXHUxMTZBClx1MTEwOVx1MTE2OVx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDlcdTExNjlcdTExMEJcdTExNkZcdTExQUIKXHUxMTA5XHUxMTY5XHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwOVx1MTE2OVx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTExMlx1MTE3NQpcdTExMDlcdTExNjlcdTExMENcdTExNzVcdTExMTFcdTExNkVcdTExQjcKXHUxMTA5XHUxMTY5XHUxMTBDXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2OVx1MTExMVx1MTE2RVx1MTFCQwpcdTExMDlcdTExNjlcdTExMTJcdTExNjdcdTExQkMKXHUxMTA5XHUxMTY5XHUxMUE4XHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwOVx1MTE2OVx1MTFBOFx1MTEwM1x1MTE2OQpcdTExMDlcdTExNjlcdTExQThcdTExMEJcdTExNjlcdTExQkEKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTAwXHUxMTYxXHUxMTA1XHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTEwMFx1MTE3NVx1MTFBRgpcdTExMDlcdTExNjlcdTExQUJcdTExMDJcdTExNjcKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTAyXHUxMTc1XHUxMUI3Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTEwM1x1MTE3M1x1MTFCQwpcdTExMDlcdTExNjlcdTExQUJcdTExMDZcdTExNjlcdTExQTgKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTA4XHUxMTY3XHUxMUE4Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTEwOVx1MTE3NVx1MTFBRgpcdTExMDlcdTExNjlcdTExQUJcdTExMENcdTExNzVcdTExQUYKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTEwXHUxMTY5XHUxMUI4Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTExMlx1MTE2MgpcdTExMDlcdTExNjlcdTExQUZcdTExMENcdTExNzVcdTExQThcdTExMTJcdTExNzUKXHUxMTA5XHUxMTY5XHUxMUI3XHUxMTBBXHUxMTc1Clx1MTEwOVx1MTE2OVx1MTFCQ1x1MTEwQlx1MTE2MVx1MTEwQ1x1MTE3NQpcdTExMDlcdTExNjlcdTExQkNcdTExMEJcdTExNzUKXHUxMTA5XHUxMTY5XHUxMUJDXHUxMTExXHUxMTY3XHUxMUFCClx1MTEwOVx1MTE2Q1x1MTEwMFx1MTE2OVx1MTEwMFx1MTE3NQpcdTExMDlcdTExNkRcdTExMTFcdTExNzVcdTExQkMKXHUxMTA5XHUxMTZFXHUxMTAwXHUxMTY1XHUxMUFCClx1MTEwOVx1MTE2RVx1MTEwMlx1MTE2N1x1MTFBQgpcdTExMDlcdTExNkVcdTExMDNcdTExNjFcdTExQUIKXHUxMTA5XHUxMTZFXHUxMTAzXHUxMTY5XHUxMUJBXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwOVx1MTE2RVx1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDlcdTExNkVcdTExMDZcdTExNjdcdTExQUIKXHUxMTA5XHUxMTZFXHUxMTA2XHUxMTY3XHUxMUJDClx1MTEwOVx1MTE2RVx1MTEwN1x1MTE2MVx1MTFBOApcdTExMDlcdTExNkVcdTExMDlcdTExNjFcdTExQkMKXHUxMTA5XHUxMTZFXHUxMTA5XHUxMTY1XHUxMUE4Clx1MTEwOVx1MTE2RVx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMDlcdTExNkVcdTExMDlcdTExNzVcdTExMDVcdTExNjkKXHUxMTA5XHUxMTZFXHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwOVx1MTE2RVx1MTEwQlx1MTE2N1x1MTFCNwpcdTExMDlcdTExNkVcdTExMEJcdTExNjdcdTExQkMKXHUxMTA5XHUxMTZFXHUxMTBCXHUxMTc1XHUxMUI4Clx1MTEwOVx1MTE2RVx1MTEwQ1x1MTE2RVx1MTFBQgpcdTExMDlcdTExNkVcdTExMENcdTExNzVcdTExQjgKXHUxMTA5XHUxMTZFXHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwOVx1MTE2RVx1MTEwRlx1MTE2NVx1MTFCQQpcdTExMDlcdTExNkVcdTExMTFcdTExNzVcdTExQUYKXHUxMTA5XHUxMTZFXHUxMTEyXHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE2RVx1MTExMlx1MTE2NVx1MTFCN1x1MTEwOVx1MTE2Mlx1MTFCQwpcdTExMDlcdTExNkVcdTExMTJcdTExNkFcdTExMDBcdTExNzUKXHUxMTA5XHUxMTZFXHUxMUE4XHUxMTAyXHUxMTY3Clx1MTEwOVx1MTE2RVx1MTFBOFx1MTEwOVx1MTE2OQpcdTExMDlcdTExNkVcdTExQThcdTExMENcdTExNjYKXHUxMTA5XHUxMTZFXHUxMUFCXHUxMTAwXHUxMTYxXHUxMUFCClx1MTEwOVx1MTE2RVx1MTFBQlx1MTEwOVx1MTE2NQpcdTExMDlcdTExNkVcdTExQUJcdTExMDlcdTExNkUKXHUxMTA5XHUxMTZFXHUxMUFCXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTAwXHUxMTYxXHUxMUFCClx1MTEwOVx1MTE2RVx1MTFBQlx1MTEwQlx1MTE3MQpcdTExMDlcdTExNkVcdTExQUVcdTExMDBcdTExNjFcdTExMDVcdTExNjFcdTExQTgKXHUxMTA5XHUxMTZFXHUxMUFGXHUxMTA3XHUxMTY3XHUxMUJDClx1MTEwOVx1MTE2RVx1MTFBRlx1MTEwQ1x1MTE3NVx1MTFCOApcdTExMDlcdTExNkVcdTExQkFcdTExMENcdTExNjEKXHUxMTA5XHUxMTczXHUxMTAyXHUxMTc1XHUxMUI3Clx1MTEwOVx1MTE3M1x1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNzNcdTExMDlcdTExNzNcdTExMDVcdTExNjkKXHUxMTA5XHUxMTczXHUxMTA5XHUxMTczXHUxMUJDClx1MTEwOVx1MTE3M1x1MTEwQlx1MTE3MFx1MTExMFx1MTE2NQpcdTExMDlcdTExNzNcdTExMEJcdTExNzFcdTExMEVcdTExNzUKXHUxMTA5XHUxMTczXHUxMTBGXHUxMTY2XHUxMTBCXHUxMTc1XHUxMTEwXHUxMTczClx1MTEwOVx1MTE3M1x1MTExMFx1MTE3Mlx1MTEwM1x1MTE3NVx1MTEwQlx1MTE2OQpcdTExMDlcdTExNzNcdTExMTBcdTExNzNcdTExMDVcdTExNjZcdTExMDlcdTExNzMKXHUxMTA5XHUxMTczXHUxMTExXHUxMTY5XHUxMTBFXHUxMTczClx1MTEwOVx1MTE3M1x1MTFBRlx1MTEwRFx1MTE2NVx1MTFBOApcdTExMDlcdTExNzNcdTExQUZcdTExMTFcdTExNzNcdTExQjcKXHUxMTA5XHUxMTczXHUxMUI4XHUxMTAwXHUxMTZBXHUxMUFCClx1MTEwOVx1MTE3M1x1MTFCOFx1MTEwMFx1MTE3NQpcdTExMDlcdTExNzNcdTExQkNcdTExMDBcdTExNjJcdTExQTgKXHUxMTA5XHUxMTczXHUxMUJDXHUxMTA1XHUxMTc1Clx1MTEwOVx1MTE3M1x1MTFCQ1x1MTEwN1x1MTE2RQpcdTExMDlcdTExNzNcdTExQkNcdTExMEJcdTExNkRcdTExQkNcdTExMEVcdTExNjEKXHUxMTA5XHUxMTczXHUxMUJDXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwOVx1MTE3NVx1MTEwMFx1MTE2MVx1MTFBOApcdTExMDlcdTExNzVcdTExMDBcdTExNjFcdTExQUIKXHUxMTA5XHUxMTc1XHUxMTAwXHUxMTY5XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwRVx1MTE3NQpcdTExMDlcdTExNzVcdTExMDJcdTExNjFcdTExMDVcdTExNzVcdTExMEJcdTExNjkKXHUxMTA5XHUxMTc1XHUxMTAzXHUxMTYyXHUxMUE4Clx1MTEwOVx1MTE3NVx1MTEwNVx1MTE3NVx1MTEwQ1x1MTE3MwpcdTExMDlcdTExNzVcdTExMDZcdTExNjZcdTExQUJcdTExMTBcdTExNzMKXHUxMTA5XHUxMTc1XHUxMTA2XHUxMTc1XHUxMUFCClx1MTEwOVx1MTE3NVx1MTEwN1x1MTE2RVx1MTEwNlx1MTE2OQpcdTExMDlcdTExNzVcdTExMDlcdTExNjVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMTA5XHUxMTY1XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwOVx1MTE3M1x1MTExMFx1MTE2Nlx1MTFCNwpcdTExMDlcdTExNzVcdTExMEJcdTExNjFcdTExMDdcdTExNjVcdTExMENcdTExNzUKXHUxMTA5XHUxMTc1XHUxMTBCXHUxMTY1XHUxMTA2XHUxMTY1XHUxMTAyXHUxMTc1Clx1MTEwOVx1MTE3NVx1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMDlcdTExNzVcdTExMEJcdTExNzVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwQ1x1MTE2MVx1MTFBOApcdTExMDlcdTExNzVcdTExMENcdTExNjFcdTExQkMKXHUxMTA5XHUxMTc1XHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDlcdTExNzVcdTExMENcdTExNkVcdTExQkMKXHUxMTA5XHUxMTc1XHUxMTBDXHUxMTczXHUxMUFCClx1MTEwOVx1MTE3NVx1MTEwQ1x1MTE3NVx1MTFCOApcdTExMDlcdTExNzVcdTExMEVcdTExNjVcdTExQkMKXHUxMTA5XHUxMTc1XHUxMTEyXHUxMTYxXHUxMUI4Clx1MTEwOVx1MTE3NVx1MTExMlx1MTE2NVx1MTFCNwpcdTExMDlcdTExNzVcdTExQThcdTExMDBcdTExNkUKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTAwXHUxMTc1Clx1MTEwOVx1MTE3NVx1MTFBOFx1MTEwM1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNzVcdTExQThcdTExMDVcdTExNjNcdTExQkMKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTA1XHUxMTZEXHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwOVx1MTE3NVx1MTFBOFx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNzVcdTExQThcdTExMDhcdTExNjFcdTExQkMKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTA5XHUxMTYxClx1MTEwOVx1MTE3NVx1MTFBOFx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTExMlx1MTE2QVx1MTFBRgpcdTExMDlcdTExNzVcdTExQThcdTExMEVcdTExNjkKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTEwXHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE3NVx1MTFBOFx1MTExMVx1MTE2RVx1MTFCNwpcdTExMDlcdTExNzVcdTExQUJcdTExMDBcdTExNjkKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTAwXHUxMTcyClx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwMlx1MTE2N1x1MTFCNwpcdTExMDlcdTExNzVcdTExQUJcdTExMDZcdTExNkVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTA3XHUxMTYxXHUxMUFGClx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwN1x1MTE3NQpcdTExMDlcdTExNzVcdTExQUJcdTExMDlcdTExNjEKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTA5XHUxMTY2Clx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDlcdTExNzVcdTExQUJcdTExMENcdTExNjZcdTExMTFcdTExNkVcdTExQjcKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTBFXHUxMTY1XHUxMUJDClx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwRVx1MTE2NgpcdTExMDlcdTExNzVcdTExQUJcdTExMTJcdTExNkEKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTAwXHUxMTYxXHUxMUI3Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwMlx1MTE2MgpcdTExMDlcdTExNzVcdTExQUZcdTExMDVcdTExNjdcdTExQTgKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTA1XHUxMTY4Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMDlcdTExNzVcdTExQUZcdTExMDlcdTExNkUKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTA5XHUxMTczXHUxMUI4Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwOVx1MTE3NQpcdTExMDlcdTExNzVcdTExQUZcdTExMENcdTExNjFcdTExQkMKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwQ1x1MTE3NVx1MTFBRlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDlcdTExNzVcdTExQUZcdTExMEVcdTExNjVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTBFXHUxMTY2Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwRlx1MTE2NVx1MTFCQQpcdTExMDlcdTExNzVcdTExQUZcdTExMTBcdTExNjIKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTExXHUxMTYyClx1MTEwOVx1MTE3NVx1MTFBRlx1MTExMlx1MTE2NVx1MTFCNwpcdTExMDlcdTExNzVcdTExQUZcdTExMTJcdTExNjdcdTExQUIKXHUxMTA5XHUxMTc1XHUxMUI3XHUxMTA1XHUxMTc1Clx1MTEwOVx1MTE3NVx1MTFCN1x1MTEwN1x1MTE2RVx1MTEwNVx1MTE3M1x1MTFCNwpcdTExMDlcdTExNzVcdTExQjdcdTExMDlcdTExNjEKXHUxMTA5XHUxMTc1XHUxMUI3XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE3NVx1MTFCN1x1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMDlcdTExNzVcdTExQjdcdTExMTFcdTExNjFcdTExQUIKXHUxMTBBXHUxMTYxXHUxMUJDXHUxMTAzXHUxMTZFXHUxMUJDXHUxMTBCXHUxMTc1Clx1MTEwQVx1MTE3NVx1MTEwNVx1MTE3M1x1MTFCNwpcdTExMEFcdTExNzVcdTExMEJcdTExNjFcdTExQkEKXHUxMTBCXHUxMTYxXHUxMTAwXHUxMTYxXHUxMTBBXHUxMTc1Clx1MTEwQlx1MTE2MVx1MTEwMlx1MTE2MVx1MTEwQlx1MTE2RVx1MTFBQlx1MTEwOVx1MTE2NQpcdTExMEJcdTExNjFcdTExMDNcdTExNzNcdTExMDJcdTExNzVcdTExQjcKXHUxMTBCXHUxMTYxXHUxMTAzXHUxMTczXHUxMUFGClx1MTEwQlx1MTE2MVx1MTEwOVx1MTE3MVx1MTEwQlx1MTE2RVx1MTFCNwpcdTExMEJcdTExNjFcdTExMDlcdTExNzNcdTExMTFcdTExNjFcdTExQUZcdTExMTBcdTExNzMKXHUxMTBCXHUxMTYxXHUxMTA5XHUxMTc1XHUxMTBCXHUxMTYxClx1MTEwQlx1MTE2MVx1MTEwQlx1MTE2RVx1MTFBRlx1MTEwNVx1MTE2NQpcdTExMEJcdTExNjFcdTExMENcdTExNjVcdTExMEFcdTExNzUKXHUxMTBCXHUxMTYxXHUxMTBDXHUxMTZFXHUxMUI3XHUxMTA2XHUxMTYxClx1MTEwQlx1MTE2MVx1MTEwQ1x1MTE3NVx1MTFBOApcdTExMEJcdTExNjFcdTExMEVcdTExNzVcdTExQjcKXHUxMTBCXHUxMTYxXHUxMTExXHUxMTYxXHUxMTEwXHUxMTczClx1MTEwQlx1MTE2MVx1MTExMVx1MTE3M1x1MTEwNVx1MTE3NVx1MTEwRlx1MTE2MQpcdTExMEJcdTExNjFcdTExMTFcdTExNzNcdTExQjcKXHUxMTBCXHUxMTYxXHUxMTEyXHUxMTY5XHUxMUI4Clx1MTEwQlx1MTE2MVx1MTExMlx1MTE3M1x1MTFBQgpcdTExMEJcdTExNjFcdTExQThcdTExMDBcdTExNzUKXHUxMTBCXHUxMTYxXHUxMUE4XHUxMTA2XHUxMTY5XHUxMUJDClx1MTEwQlx1MTE2MVx1MTFBOFx1MTEwOVx1MTE2RQpcdTExMEJcdTExNjFcdTExQUJcdTExMDBcdTExNjIKXHUxMTBCXHUxMTYxXHUxMUFCXHUxMTAwXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2QQpcdTExMEJcdTExNjFcdTExQUJcdTExMDJcdTExNjIKXHUxMTBCXHUxMTYxXHUxMUFCXHUxMTAyXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE2MVx1MTFBQlx1MTEwM1x1MTE2OVx1MTFCQwpcdTExMEJcdTExNjFcdTExQUJcdTExMDdcdTExNjFcdTExQkMKXHUxMTBCXHUxMTYxXHUxMUFCXHUxMTA3XHUxMTZFClx1MTEwQlx1MTE2MVx1MTFBQlx1MTEwQ1x1MTE2RQpcdTExMEJcdTExNjFcdTExQUZcdTExMDVcdTExNkVcdTExMDZcdTExNzVcdTExMDJcdTExNzJcdTExQjcKXHUxMTBCXHUxMTYxXHUxMUFGXHUxMTBGXHUxMTY5XHUxMTBCXHUxMTY5XHUxMUFGClx1MTEwQlx1MTE2MVx1MTFCN1x1MTEwOVx1MTE3NQpcdTExMEJcdTExNjFcdTExQjdcdTExMEZcdTExNjVcdTExQkEKXHUxMTBCXHUxMTYxXHUxMUI4XHUxMTA1XHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE2MVx1MTFDMVx1MTEwMlx1MTE2MVx1MTFBRgpcdTExMEJcdTExNjFcdTExQzFcdTExMDZcdTExNkVcdTExQUIKXHUxMTBCXHUxMTYyXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2Mlx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMEJcdTExNjJcdTExQThcdTExMDlcdTExNkUKXHUxMTBCXHUxMTYyXHUxMUFGXHUxMTA3XHUxMTY1XHUxMUI3Clx1MTEwQlx1MTE2M1x1MTEwMFx1MTE2MVx1MTFBQgpcdTExMEJcdTExNjNcdTExMDNcdTExNjFcdTExQUIKXHUxMTBCXHUxMTYzXHUxMTBCXHUxMTY5XHUxMUJDClx1MTEwQlx1MTE2M1x1MTFBOFx1MTEwMFx1MTE2MVx1MTFBQgpcdTExMEJcdTExNjNcdTExQThcdTExMDBcdTExNkVcdTExQTgKXHUxMTBCXHUxMTYzXHUxMUE4XHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwQlx1MTE2M1x1MTFBOFx1MTEwOVx1MTE2RQpcdTExMEJcdTExNjNcdTExQThcdTExMENcdTExNjVcdTExQjcKXHUxMTBCXHUxMTYzXHUxMUE4XHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwQlx1MTE2M1x1MTFBOFx1MTExMlx1MTE2OVx1MTFBQlx1MTEwMlx1MTE2NwpcdTExMEJcdTExNjNcdTExQkNcdTExMDJcdTExNjdcdTExQjcKXHUxMTBCXHUxMTYzXHUxMUJDXHUxMTA1XHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE2M1x1MTFCQ1x1MTEwNlx1MTE2MVx1MTFBRgpcdTExMEJcdTExNjNcdTExQkNcdTExMDdcdTExNjJcdTExMEVcdTExNkUKXHUxMTBCXHUxMTYzXHUxMUJDXHUxMTBDXHUxMTZFClx1MTEwQlx1MTE2M1x1MTFCQ1x1MTExMVx1MTE2MQpcdTExMEJcdTExNjVcdTExMDNcdTExNkVcdTExQjcKXHUxMTBCXHUxMTY1XHUxMTA1XHUxMTY3XHUxMTBCXHUxMTZFXHUxMUI3Clx1MTEwQlx1MTE2NVx1MTEwNVx1MTE3M1x1MTFBQgpcdTExMEJcdTExNjVcdTExMENcdTExNjZcdTExQkFcdTExMDdcdTExNjFcdTExQjcKXHUxMTBCXHUxMTY1XHUxMTBEXHUxMTYyXHUxMUJCXHUxMTAzXHUxMTczXHUxMUFCClx1MTEwQlx1MTE2NVx1MTEwRFx1MTE2NVx1MTEwM1x1MTE2MVx1MTEwMFx1MTE2MQpcdTExMEJcdTExNjVcdTExMERcdTExNjVcdTExQUJcdTExMENcdTExNzUKXHUxMTBCXHUxMTY1XHUxMUFCXHUxMTAyXHUxMTc1Clx1MTEwQlx1MTE2NVx1MTFBQlx1MTEwM1x1MTE2NVx1MTFBOApcdTExMEJcdTExNjVcdTExQUJcdTExMDVcdTExNjlcdTExQUIKXHUxMTBCXHUxMTY1XHUxMUFCXHUxMTBCXHUxMTY1Clx1MTEwQlx1MTE2NVx1MTFBRlx1MTEwMFx1MTE2RVx1MTFBRgpcdTExMEJcdTExNjVcdTExQUZcdTExMDVcdTExNzNcdTExQUIKXHUxMTBCXHUxMTY1XHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2NVx1MTFBRlx1MTExMVx1MTE3NVx1MTFCQQpcdTExMEJcdTExNjVcdTExQjdcdTExMDZcdTExNjEKXHUxMTBCXHUxMTY1XHUxMUI4XHUxMTA2XHUxMTZFClx1MTEwQlx1MTE2NVx1MTFCOFx1MTEwQ1x1MTE2OVx1MTFCQwpcdTExMEJcdTExNjVcdTExQjhcdTExMEVcdTExNjYKXHUxMTBCXHUxMTY1XHUxMUJDXHUxMTAzXHUxMTY1XHUxMUJDXHUxMTBCXHUxMTc1Clx1MTEwQlx1MTE2NVx1MTFCQ1x1MTEwNlx1MTE2MVx1MTFCQwpcdTExMEJcdTExNjVcdTExQkNcdTExMTBcdTExNjVcdTExMDVcdTExNzUKXHUxMTBCXHUxMTY1XHUxMUJEXHUxMTAwXHUxMTczXHUxMTBDXHUxMTY2Clx1MTEwQlx1MTE2Nlx1MTEwMlx1MTE2NVx1MTEwQ1x1MTE3NQpcdTExMEJcdTExNjZcdTExMEJcdTExNjVcdTExMEZcdTExNjVcdTExQUIKXHUxMTBCXHUxMTY2XHUxMUFCXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwMFx1MTE2NVx1MTFBQgpcdTExMEJcdTExNjdcdTExMDBcdTExNjlcdTExMDlcdTExNjJcdTExQkMKXHUxMTBCXHUxMTY3XHUxMTAwXHUxMTZBXHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwMFx1MTE2RVx1MTFBQgpcdTExMEJcdTExNjdcdTExMDBcdTExNkZcdTExQUIKXHUxMTBCXHUxMTY3XHUxMTAzXHUxMTYyXHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwQlx1MTE2N1x1MTEwM1x1MTE2NVx1MTFCMgpcdTExMEJcdTExNjdcdTExMDNcdTExNjlcdTExQkNcdTExMDlcdTExNjJcdTExQkMKXHUxMTBCXHUxMTY3XHUxMTAzXHUxMTczXHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwNVx1MTE2OVx1MTFBQgpcdTExMEJcdTExNjdcdTExMDVcdTExNzNcdTExQjcKXHUxMTBCXHUxMTY3XHUxMTA5XHUxMTY1XHUxMUJBClx1MTEwQlx1MTE2N1x1MTEwOVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNjdcdTExMEJcdTExNkFcdTExQkMKXHUxMTBCXHUxMTY3XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwQ1x1MTE2NVx1MTFBQlx1MTExMlx1MTE3NQpcdTExMEJcdTExNjdcdTExMENcdTExNzVcdTExQThcdTExMEJcdTExNkZcdTExQUIKXHUxMTBCXHUxMTY3XHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwQlx1MTE2N1x1MTExMlx1MTE2Mlx1MTFCQwpcdTExMEJcdTExNjdcdTExQThcdTExMDlcdTExNjEKXHUxMTBCXHUxMTY3XHUxMUE4XHUxMTA5XHUxMTc1Clx1MTEwQlx1MTE2N1x1MTFBOFx1MTExMlx1MTE2MVx1MTFBRgpcdTExMEJcdTExNjdcdTExQUJcdTExMDBcdTExNjdcdTExQUYKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTAwXHUxMTZFClx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwMFx1MTE3M1x1MTFBOApcdTExMEJcdTExNjdcdTExQUJcdTExMDBcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTA1XHUxMTYxXHUxMUE4Clx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMEJcdTExNjdcdTExQUJcdTExMDlcdTExNjYKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwOVx1MTE3M1x1MTFCOApcdTExMEJcdTExNjdcdTExQUJcdTExMEJcdTExNjIKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTBCXHUxMTY4XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMEJcdTExNjdcdTExQUJcdTExMENcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTBDXHUxMTZFClx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwRVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNjdcdTExQUJcdTExMTFcdTExNzVcdTExQUYKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTEyXHUxMTYxXHUxMUI4Clx1MTEwQlx1MTE2N1x1MTFBQlx1MTExMlx1MTE3MgpcdTExMEJcdTExNjdcdTExQUZcdTExMDBcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUFGXHUxMTA2XHUxMTYyClx1MTEwQlx1MTE2N1x1MTFBRlx1MTEwOVx1MTE2QwpcdTExMEJcdTExNjdcdTExQUZcdTExMDlcdTExNzVcdTExQjdcdTExMTJcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUFGXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwQlx1MTE2N1x1MTFBRlx1MTEwRVx1MTE2MQpcdTExMEJcdTExNjdcdTExQUZcdTExMTJcdTExNzNcdTExQUYKXHUxMTBCXHUxMTY3XHUxMUI3XHUxMTA1XHUxMTY3Clx1MTEwQlx1MTE2N1x1MTFCOFx1MTEwOVx1MTE2NQpcdTExMEJcdTExNjdcdTExQkNcdTExMDBcdTExNkVcdTExQTgKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTAyXHUxMTYxXHUxMUI3Clx1MTEwQlx1MTE2N1x1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQwpcdTExMEJcdTExNjdcdTExQkNcdTExMEJcdTExNjNcdTExQkMKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTBCXHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE2N1x1MTFCQ1x1MTEwQlx1MTE2RVx1MTFCQwpcdTExMEJcdTExNjdcdTExQkNcdTExMEJcdTExNkZcdTExQUJcdTExMTJcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTYxClx1MTEwQlx1MTE2N1x1MTFCQ1x1MTExMlx1MTE2M1x1MTFCQwpcdTExMEJcdTExNjdcdTExQkNcdTExMTJcdTExNjlcdTExQUIKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTZBClx1MTEwQlx1MTE2N1x1MTFDMVx1MTEwMFx1MTE2RVx1MTEwNVx1MTE3NQpcdTExMEJcdTExNjdcdTExQzFcdTExMDdcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY3XHUxMUMxXHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwQlx1MTE2OFx1MTEwMFx1MTE2MVx1MTFCNwpcdTExMEJcdTExNjhcdTExMDBcdTExNzNcdTExQjcKXHUxMTBCXHUxMTY4XHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwQlx1MTE2OFx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMEJcdTExNjhcdTExMDlcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY4XHUxMTA5XHUxMTY1XHUxMUFCClx1MTEwQlx1MTE2OFx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNjhcdTExMDlcdTExNzNcdTExQjgKXHUxMTBCXHUxMTY4XHUxMTA5XHUxMTc1XHUxMUE4XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwQlx1MTE2OFx1MTEwQlx1MTE2M1x1MTFBOApcdTExMEJcdTExNjhcdTExMENcdTExNjVcdTExQUIKXHUxMTBCXHUxMTY4XHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwQlx1MTE2OFx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMEJcdTExNjhcdTExMEZcdTExNjVcdTExQUJcdTExMDNcdTExNjIKXHUxMTBCXHUxMTY4XHUxMUJBXHUxMTAyXHUxMTYxXHUxMUFGClx1MTEwQlx1MTE2OVx1MTEwMlx1MTE3M1x1MTFBRgpcdTExMEJcdTExNjlcdTExMDVcdTExNjFcdTExQTgKXHUxMTBCXHUxMTY5XHUxMTA1XHUxMTYyXHUxMUJBXHUxMTAzXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTYxXHUxMUFCClx1MTEwQlx1MTE2OVx1MTEwNVx1MTE2Nlx1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMEJcdTExNjlcdTExMDVcdTExNjlcdTExMENcdTExNzUKXHUxMTBCXHUxMTY5XHUxMTA1XHUxMTczXHUxMUFCXHUxMTA3XHUxMTYxXHUxMUFGClx1MTEwQlx1MTE2OVx1MTEwN1x1MTE3M1x1MTFBQgpcdTExMEJcdTExNjlcdTExMDlcdTExNzVcdTExQjgKXHUxMTBCXHUxMTY5XHUxMTBCXHUxMTY3XHUxMUI3Clx1MTEwQlx1MTE2OVx1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMEJcdTExNjlcdTExMENcdTExNjVcdTExQUIKXHUxMTBCXHUxMTY5XHUxMTBDXHUxMTc1XHUxMUE4Clx1MTEwQlx1MTE2OVx1MTEwQ1x1MTE3NVx1MTFCQ1x1MTEwQlx1MTE2NQpcdTExMEJcdTExNjlcdTExMTFcdTExNjZcdTExMDVcdTExNjEKXHUxMTBCXHUxMTY5XHUxMTExXHUxMTc1XHUxMTA5XHUxMTczXHUxMTEwXHUxMTY2XHUxMUFGClx1MTEwQlx1MTE2OVx1MTExMlx1MTE3NVx1MTEwNVx1MTE2NwpcdTExMEJcdTExNjlcdTExQThcdTExMDlcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY5XHUxMUE4XHUxMTA5XHUxMTZFXHUxMTA5XHUxMTZFClx1MTEwQlx1MTE2OVx1MTFBQlx1MTEwMFx1MTE2MVx1MTFCRApcdTExMEJcdTExNjlcdTExQUJcdTExMDVcdTExNjFcdTExMEJcdTExNzVcdTExQUIKXHUxMTBCXHUxMTY5XHUxMUFCXHUxMTA2XHUxMTY5XHUxMUI3Clx1MTEwQlx1MTE2OVx1MTFBQlx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTEwQlx1MTE3NVx1MTFBRgpcdTExMEJcdTExNjlcdTExQUJcdTExMTBcdTExNjlcdTExQkMKXHUxMTBCXHUxMTY5XHUxMUFGXHUxMTAwXHUxMTYxXHUxMTBCXHUxMTczXHUxMUFGClx1MTEwQlx1MTE2OVx1MTFBRlx1MTEwNVx1MTE3NVx1MTFCN1x1MTExMVx1MTE3NVx1MTFBOApcdTExMEJcdTExNjlcdTExQUZcdTExMTJcdTExNjIKXHUxMTBCXHUxMTY5XHUxMUJBXHUxMTBFXHUxMTYxXHUxMTA1XHUxMTc1XHUxMUI3Clx1MTEwQlx1MTE2QVx1MTEwQlx1MTE3NVx1MTEwOVx1MTE2N1x1MTEwRVx1MTE3MwpcdTExMEJcdTExNkFcdTExMEJcdTExNzVcdTExQUIKXHUxMTBCXHUxMTZBXHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwQlx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBQgpcdTExMEJcdTExNkFcdTExQkNcdTExMDdcdTExNzUKXHUxMTBCXHUxMTZBXHUxMUJDXHUxMTBDXHUxMTYxClx1MTEwQlx1MTE2Qlx1MTEwMlx1MTE2M1x1MTExMlx1MTE2MVx1MTEwNlx1MTE2N1x1MTFBQgpcdTExMEJcdTExNkJcdTExQUJcdTExMENcdTExNzUKXHUxMTBCXHUxMTZDXHUxMTAwXHUxMTYxXHUxMUJBXHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwQlx1MTE2Q1x1MTEwMFx1MTE2RVx1MTFBOApcdTExMEJcdTExNkNcdTExMDVcdTExNjlcdTExMEJcdTExNkVcdTExQjcKXHUxMTBCXHUxMTZDXHUxMTA5XHUxMTYxXHUxMUI3XHUxMTBFXHUxMTY5XHUxMUFCClx1MTEwQlx1MTE2Q1x1MTEwRVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNkNcdTExMEVcdTExNzVcdTExQjcKXHUxMTBCXHUxMTZDXHUxMTEyXHUxMTYxXHUxMUFGXHUxMTA2XHUxMTY1XHUxMTAyXHUxMTc1Clx1MTEwQlx1MTE2Q1x1MTFBQlx1MTEwN1x1MTE2MVx1MTFBRgpcdTExMEJcdTExNkNcdTExQUJcdTExMDlcdTExNjlcdTExQUIKXHUxMTBCXHUxMTZDXHUxMUFCXHUxMTBEXHUxMTY5XHUxMUE4Clx1MTEwQlx1MTE2RFx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMEJcdTExNkRcdTExMEJcdTExNzVcdTExQUYKXHUxMTBCXHUxMTZEXHUxMTBDXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2RFx1MTEwRVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNkRcdTExQkNcdTExMDBcdTExNzUKXHUxMTBCXHUxMTZEXHUxMUJDXHUxMTA5XHUxMTY1Clx1MTEwQlx1MTE2RFx1MTFCQ1x1MTEwQlx1MTE2NQpcdTExMEJcdTExNkVcdTExMDlcdTExNjFcdTExQUIKXHUxMTBCXHUxMTZFXHUxMTA5XHUxMTY1XHUxMUFCClx1MTEwQlx1MTE2RVx1MTEwOVx1MTE3M1x1MTFCQwpcdTExMEJcdTExNkVcdTExMEJcdTExNjdcdTExQUJcdTExMTJcdTExNzUKXHUxMTBCXHUxMTZFXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwQlx1MTE2RVx1MTEwRVx1MTE2Nlx1MTEwMFx1MTE2RVx1MTFBOApcdTExMEJcdTExNkVcdTExMTFcdTExNjdcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUFCXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwQlx1MTE2RVx1MTFBQlx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMEJcdTExNkVcdTExQUJcdTExMDdcdTExNjFcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUFCClx1MTEwQlx1MTE2RVx1MTFBQlx1MTExMlx1MTE2Mlx1MTFCQwpcdTExMEJcdTExNkVcdTExQUZcdTExMDlcdTExNjFcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2RVx1MTFCN1x1MTEwQ1x1MTE3NVx1MTFBOFx1MTEwQlx1MTE3NVx1MTFCNwpcdTExMEJcdTExNkVcdTExQkFcdTExMEJcdTExNjVcdTExMDVcdTExNzNcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUJBXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2Rlx1MTEwMlx1MTE2MVx1MTFBOApcdTExMEJcdTExNkZcdTExQUJcdTExMDBcdTExNjkKXHUxMTBCXHUxMTZGXHUxMUFCXHUxMTA1XHUxMTYyClx1MTEwQlx1MTE2Rlx1MTFBQlx1MTEwOVx1MTE2NQpcdTExMEJcdTExNkZcdTExQUJcdTExMDlcdTExNkVcdTExQkNcdTExMEJcdTExNzUKXHUxMTBCXHUxMTZGXHUxMUFCXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2Rlx1MTFBQlx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMEJcdTExNkZcdTExQUJcdTExMTFcdTExNzVcdTExMDlcdTExNzMKXHUxMTBCXHUxMTZGXHUxMUFGXHUxMTAwXHUxMTczXHUxMUI4Clx1MTEwQlx1MTE2Rlx1MTFBRlx1MTEwM1x1MTE3M1x1MTEwRlx1MTE2NVx1MTFCOApcdTExMEJcdTExNkZcdTExQUZcdTExMDlcdTExNjYKXHUxMTBCXHUxMTZGXHUxMUFGXHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQlx1MTE3MFx1MTEwQlx1MTE3NVx1MTExMFx1MTE2NQpcdTExMEJcdTExNzFcdTExMDdcdTExNjFcdTExQUIKXHUxMTBCXHUxMTcxXHUxMTA3XHUxMTY1XHUxMUI4Clx1MTEwQlx1MTE3MVx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNzFcdTExMEJcdTExNkZcdTExQUIKXHUxMTBCXHUxMTcxXHUxMTEyXHUxMTY1XHUxMUI3Clx1MTEwQlx1MTE3MVx1MTExMlx1MTE2N1x1MTFCOApcdTExMEJcdTExNzFcdTExQkFcdTExMDlcdTExNjFcdTExMDVcdTExNjFcdTExQjcKXHUxMTBCXHUxMTcyXHUxMTAyXHUxMTYxXHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwQlx1MTE3Mlx1MTEwNVx1MTE2NVx1MTFCOApcdTExMEJcdTExNzJcdTExMDZcdTExNjdcdTExQkMKXHUxMTBCXHUxMTcyXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwQlx1MTE3Mlx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMEJcdTExNzJcdTExMENcdTExNjVcdTExQTgKXHUxMTBCXHUxMTcyXHUxMTBFXHUxMTc1XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQlx1MTE3Mlx1MTExMlx1MTE2MVx1MTFBOApcdTExMEJcdTExNzJcdTExMTJcdTExNjJcdTExQkMKXHUxMTBCXHUxMTcyXHUxMTEyXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE3Mlx1MTFBOFx1MTEwMFx1MTE2RVx1MTFBQgpcdTExMEJcdTExNzJcdTExQThcdTExMDlcdTExNjFcdTExQkMKXHUxMTBCXHUxMTcyXHUxMUE4XHUxMTA5XHUxMTc1XHUxMUI4Clx1MTEwQlx1MTE3Mlx1MTFBOFx1MTEwRVx1MTE2NgpcdTExMEJcdTExNzNcdTExQUJcdTExMTJcdTExNjJcdTExQkMKXHUxMTBCXHUxMTczXHUxMUI3XHUxMTA1XHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE3M1x1MTFCN1x1MTEwNVx1MTE2RApcdTExMEJcdTExNzNcdTExQjdcdTExMDdcdTExNjFcdTExQUIKXHUxMTBCXHUxMTczXHUxMUI3XHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwQlx1MTE3M1x1MTFCN1x1MTEwOVx1MTE3NVx1MTFBOApcdTExMEJcdTExNzNcdTExQjdcdTExMEJcdTExNjFcdTExQTgKXHUxMTBCXHUxMTczXHUxMUI3XHUxMTBDXHUxMTZFClx1MTEwQlx1MTE3NFx1MTEwMFx1MTE2N1x1MTFBQgpcdTExMEJcdTExNzRcdTExMDJcdTExNjlcdTExQUIKXHUxMTBCXHUxMTc0XHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQlx1MTE3NFx1MTEwN1x1MTE2OVx1MTFBOApcdTExMEJcdTExNzRcdTExMDlcdTExNzVcdTExQTgKXHUxMTBCXHUxMTc0XHUxMTA5XHUxMTc1XHUxMUI3Clx1MTEwQlx1MTE3NFx1MTEwQlx1MTE2Q1x1MTEwNVx1MTE2OQpcdTExMEJcdTExNzRcdTExMEJcdTExNkRcdTExQTgKXHUxMTBCXHUxMTc0XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQlx1MTE3NFx1MTExMlx1MTE2MVx1MTFBOApcdTExMEJcdTExNzVcdTExMDBcdTExNjVcdTExQkEKXHUxMTBCXHUxMTc1XHUxMTAwXHUxMTY5XHUxMUJBClx1MTEwQlx1MTE3NVx1MTEwMlx1MTE2N1x1MTFCNwpcdTExMEJcdTExNzVcdTExMDJcdTExNjlcdTExQjcKXHUxMTBCXHUxMTc1XHUxMTAzXHUxMTYxXHUxMUFGClx1MTEwQlx1MTE3NVx1MTEwM1x1MTE2Mlx1MTEwNVx1MTE2OQpcdTExMEJcdTExNzVcdTExMDNcdTExNjlcdTExQkMKXHUxMTBCXHUxMTc1XHUxMTA1XHUxMTY1XHUxMUMyXHUxMTAwXHUxMTY2Clx1MTEwQlx1MTE3NVx1MTEwNVx1MTE2N1x1MTFBOFx1MTEwOVx1MTE2NQpcdTExMEJcdTExNzVcdTExMDVcdTExNjlcdTExQUJcdTExMENcdTExNjVcdTExQTgKXHUxMTBCXHUxMTc1XHUxMTA1XHUxMTczXHUxMUI3Clx1MTEwQlx1MTE3NVx1MTEwNlx1MTE3NVx1MTFBQgpcdTExMEJcdTExNzVcdTExMDdcdTExNjFcdTExQUZcdTExMDlcdTExNjkKXHUxMTBCXHUxMTc1XHUxMTA3XHUxMTY3XHUxMUFGClx1MTEwQlx1MTE3NVx1MTEwN1x1MTE2RVx1MTFBRgpcdTExMEJcdTExNzVcdTExMDhcdTExNjFcdTExQUYKXHUxMTBCXHUxMTc1XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwQlx1MTE3NVx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNzVcdTExMDlcdTExNzNcdTExQUYKXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTYzXHUxMTAwXHUxMTc1Clx1MTEwQlx1MTE3NVx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMEJcdTExNzVcdTExMEJcdTExNkVcdTExQkEKXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTZGXHUxMUFGClx1MTEwQlx1MTE3NVx1MTEwQlx1MTE3M1x1MTFBOFx1MTEwMFx1MTE2OQpcdTExMEJcdTExNzVcdTExMEJcdTExNzVcdTExQTgKXHUxMTBCXHUxMTc1XHUxMTBDXHUxMTY1XHUxMUFCClx1MTEwQlx1MTE3NVx1MTEwQ1x1MTE2RVx1MTFCQwpcdTExMEJcdTExNzVcdTExMTBcdTExNzNcdTExQUVcdTExMDJcdTExNjFcdTExQUYKXHUxMTBCXHUxMTc1XHUxMTEwXHUxMTczXHUxMUFGClx1MTEwQlx1MTE3NVx1MTExMlx1MTE2OVx1MTFBQgpcdTExMEJcdTExNzVcdTExQUJcdTExMDBcdTExNjFcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE2OVx1MTFCQwpcdTExMEJcdTExNzVcdTExQUJcdTExMDBcdTExNkUKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTczXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE3NQpcdTExMEJcdTExNzVcdTExQUJcdTExMDNcdTExNjkKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTA1XHUxMTcyClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMEJcdTExNzVcdTExQUJcdTExMDlcdTExNjJcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTA5XHUxMTZCClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwQlx1MTE2N1x1MTFBQgpcdTExMEJcdTExNzVcdTExQUJcdTExMEJcdTExNkZcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTBDXHUxMTYyClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwQ1x1MTE2OVx1MTFCQwpcdTExMEJcdTExNzVcdTExQUJcdTExMEVcdTExNjVcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTBFXHUxMTY2Clx1MTEwQlx1MTE3NVx1MTFBQlx1MTExMFx1MTE2NVx1MTEwMlx1MTE2Nlx1MTFCQQpcdTExMEJcdTExNzVcdTExQUJcdTExMTJcdTExNjEKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTEyXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwMFx1MTE2OVx1MTFCOApcdTExMEJcdTExNzVcdTExQUZcdTExMDBcdTExNzUKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTAzXHUxMTYxXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwM1x1MTE2MgpcdTExMEJcdTExNzVcdTExQUZcdTExMDNcdTExNzNcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTA3XHUxMTYxXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwN1x1MTE2OVx1MTFBQgpcdTExMEJcdTExNzVcdTExQUZcdTExMDdcdTExNkUKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwOVx1MTE2Mlx1MTFCQwpcdTExMEJcdTExNzVcdTExQUZcdTExMDlcdTExNjlcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMEJcdTExNzVcdTExQUZcdTExMENcdTExNjVcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTBDXHUxMTY5XHUxMUJDClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwQ1x1MTE2RVx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMEJcdTExNzVcdTExQUZcdTExMERcdTExNzVcdTExQTgKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTBFXHUxMTY2Clx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwRVx1MTE3NQpcdTExMEJcdTExNzVcdTExQUZcdTExMTJcdTExNjJcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTEyXHUxMTZDXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQlx1MTE3NVx1MTFCN1x1MTEwMFx1MTE3M1x1MTFCNwpcdTExMEJcdTExNzVcdTExQjdcdTExMDZcdTExNkUKXHUxMTBCXHUxMTc1XHUxMUI4XHUxMTAzXHUxMTYyClx1MTEwQlx1MTE3NVx1MTFCOFx1MTEwNVx1MTE2N1x1MTFBOApcdTExMEJcdTExNzVcdTExQjhcdTExMDZcdTExNjFcdTExQkEKXHUxMTBCXHUxMTc1XHUxMUI4XHUxMTA5XHUxMTYxClx1MTEwQlx1MTE3NVx1MTFCOFx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNzVcdTExQjhcdTExMDlcdTExNzUKXHUxMTBCXHUxMTc1XHUxMUI4XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFCOFx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMEJcdTExNzVcdTExQjhcdTExMTJcdTExNjFcdTExQTgKXHUxMTBDXHUxMTYxXHUxMTAwXHUxMTYxXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQ1x1MTE2MVx1MTEwMFx1MTE2N1x1MTFBOApcdTExMENcdTExNjFcdTExMDBcdTExNzNcdTExQTgKXHUxMTBDXHUxMTYxXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2MVx1MTEwNVx1MTE2MVx1MTFCQwpcdTExMENcdTExNjFcdTExMDdcdTExNkVcdTExMDlcdTExNzVcdTExQjcKXHUxMTBDXHUxMTYxXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwQ1x1MTE2MVx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMENcdTExNjFcdTExMEJcdTExNjdcdTExQUIKXHUxMTBDXHUxMTYxXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQ1x1MTE2MVx1MTEwQlx1MTE3Mlx1MTFBRgpcdTExMENcdTExNjFcdTExMENcdTExNjVcdTExQUJcdTExMDBcdTExNjUKXHUxMTBDXHUxMTYxXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwQ1x1MTE2MVx1MTEwQ1x1MTE2OVx1MTFBQlx1MTEwOVx1MTE3NVx1MTFCNwpcdTExMENcdTExNjFcdTExMTFcdTExNjFcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUE4XHUxMTAwXHUxMTYxClx1MTEwQ1x1MTE2MVx1MTFBOFx1MTEwMlx1MTE2N1x1MTFBQgpcdTExMENcdTExNjFcdTExQThcdTExMDlcdTExNjVcdTExQkMKXHUxMTBDXHUxMTYxXHUxMUE4XHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwQ1x1MTE2MVx1MTFBOFx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMENcdTExNjFcdTExQThcdTExMEJcdTExNzNcdTExQUJcdTExMDRcdTExNjFcdTExQUYKXHUxMTBDXHUxMTYxXHUxMUE4XHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwQ1x1MTE2MVx1MTFBQlx1MTEwM1x1MTE3NQpcdTExMENcdTExNjFcdTExQUJcdTExMDRcdTExNzNcdTExQTgKXHUxMTBDXHUxMTYxXHUxMUFCXHUxMTBFXHUxMTc1Clx1MTEwQ1x1MTE2MVx1MTFBRlx1MTEwNlx1MTE2OVx1MTFCQQpcdTExMENcdTExNjFcdTExQjdcdTExMDFcdTExNjFcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTZFXHUxMTEyXHUxMTYxXHUxMUI3Clx1MTEwQ1x1MTE2MVx1MTFCN1x1MTEwOVx1MTE3NQpcdTExMENcdTExNjFcdTExQjdcdTExMEJcdTExNjlcdTExQkEKXHUxMTBDXHUxMTYxXHUxMUI3XHUxMTBDXHUxMTYxXHUxMTA1XHUxMTc1Clx1MTEwQ1x1MTE2MVx1MTFCOFx1MTEwQ1x1MTE3NQpcdTExMENcdTExNjFcdTExQkNcdTExMDBcdTExNkFcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3NVx1MTEwMFx1MTE2MVx1MTFBQgpcdTExMENcdTExNjFcdTExQkNcdTExMDVcdTExNjIKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA1XHUxMTY4Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwNVx1MTE3MwpcdTExMENcdTExNjFcdTExQkNcdTExMDZcdTExNjEKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA2XHUxMTY3XHUxMUFCClx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwNlx1MTE2OQpcdTExMENcdTExNjFcdTExQkNcdTExMDZcdTExNzUKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA3XHUxMTc1Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMENcdTExNjFcdTExQkNcdTExMDlcdTExNjkKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2Mlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMENcdTExNjFcdTExQkNcdTExMEJcdTExNzVcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwRVx1MTE2MQpcdTExMENcdTExNjFcdTExQkNcdTExMTJcdTExNjFcdTExQThcdTExMDBcdTExNzNcdTExQjcKXHUxMTBDXHUxMTYyXHUxMTAyXHUxMTczXHUxMUJDClx1MTEwQ1x1MTE2Mlx1MTEwOFx1MTE2MVx1MTFBRlx1MTEwNVx1MTE3NQpcdTExMENcdTExNjJcdTExMDlcdTExNjFcdTExQUIKXHUxMTBDXHUxMTYyXHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwQ1x1MTE2Mlx1MTEwQ1x1MTE2MVx1MTFBOFx1MTEwMlx1MTE2N1x1MTFBQgpcdTExMENcdTExNjJcdTExMENcdTExNjVcdTExQkMKXHUxMTBDXHUxMTYyXHUxMTBFXHUxMTYyXHUxMTAwXHUxMTc1Clx1MTEwQ1x1MTE2Mlx1MTExMVx1MTE2MVx1MTFBQgpcdTExMENcdTExNjJcdTExMTJcdTExNjFcdTExQTgKXHUxMTBDXHUxMTYyXHUxMTEyXHUxMTZBXHUxMUFGXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTEwMFx1MTE2NVx1MTFCQQpcdTExMENcdTExNjVcdTExMDBcdTExNjlcdTExMDVcdTExNzUKXHUxMTBDXHUxMTY1XHUxMTAwXHUxMTY5XHUxMUJBClx1MTEwQ1x1MTE2NVx1MTEwMlx1MTE2N1x1MTFBOApcdTExMENcdTExNjVcdTExMDVcdTExNjVcdTExQUIKXHUxMTBDXHUxMTY1XHUxMTA1XHUxMTY1XHUxMUMyXHUxMTAwXHUxMTY2Clx1MTEwQ1x1MTE2NVx1MTEwN1x1MTE2NVx1MTFBQgpcdTExMENcdTExNjVcdTExMEJcdTExNkVcdTExQUYKXHUxMTBDXHUxMTY1XHUxMTBDXHUxMTY1XHUxMUFGXHUxMTA1XHUxMTY5Clx1MTEwQ1x1MTE2NVx1MTEwRVx1MTE2RVx1MTFBOApcdTExMENcdTExNjVcdTExQThcdTExMDBcdTExNzNcdTExQTgKXHUxMTBDXHUxMTY1XHUxMUE4XHUxMTAzXHUxMTYxXHUxMUJDXHUxMTEyXHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFBOFx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMENcdTExNjVcdTExQThcdTExMEJcdTExNkRcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUE4XHUxMTBCXHUxMTczXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwMFx1MTE2MgpcdTExMENcdTExNjVcdTExQUJcdTExMDBcdTExNjlcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTAwXHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMENcdTExNjVcdTExQUJcdTExMDVcdTExNjFcdTExMDNcdTExNjkKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTA2XHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMENcdTExNjVcdTExQUJcdTExMDdcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTA3XHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwOVx1MTE2NgpcdTExMENcdTExNjVcdTExQUJcdTExMDlcdTExNzUKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwQ1x1MTE2MQpcdTExMENcdTExNjVcdTExQUJcdTExMENcdTExNjJcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTBDXHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwRVx1MTE2NVx1MTFBRgpcdTExMENcdTExNjVcdTExQUJcdTExMEVcdTExNjYKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTEwXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTExMlx1MTE2NwpcdTExMENcdTExNjVcdTExQUJcdTExMTJcdTExNkUKXHUxMTBDXHUxMTY1XHUxMUFGXHUxMTAzXHUxMTYyClx1MTEwQ1x1MTE2NVx1MTFBRlx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMENcdTExNjVcdTExQUZcdTExMDdcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUFGXHUxMTBCXHUxMTYzXHUxMUE4Clx1MTEwQ1x1MTE2NVx1MTFBRlx1MTEwRVx1MTE2MQpcdTExMENcdTExNjVcdTExQjdcdTExMDBcdTExNjVcdTExQjcKXHUxMTBDXHUxMTY1XHUxMUI3XHUxMTA5XHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFCN1x1MTEwOVx1MTE3NVx1MTFCNwpcdTExMENcdTExNjVcdTExQjdcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUI3XHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwQ1x1MTE2NVx1MTFCN1x1MTEwRVx1MTE2MQpcdTExMENcdTExNjVcdTExQjhcdTExMDBcdTExNzNcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUI4XHUxMTA5XHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFCOFx1MTEwRVx1MTE2OVx1MTFBOApcdTExMENcdTExNjVcdTExQkFcdTExMDBcdTExNjFcdTExMDVcdTExNjFcdTExQTgKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTAwXHUxMTY1XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwM1x1MTE2OQpcdTExMENcdTExNjVcdTExQkNcdTExMDVcdTExNzJcdTExMENcdTExNjFcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA1XHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwNlx1MTE2MVx1MTFBRgpcdTExMENcdTExNjVcdTExQkNcdTExMDZcdTExNjdcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTFBQlx1MTEwM1x1MTE2MgpcdTExMENcdTExNjVcdTExQkNcdTExMDdcdTExNjkKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA3XHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwN1x1MTE3NQpcdTExMENcdTExNjVcdTExQkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwQlx1MTE2OQpcdTExMENcdTExNjVcdTExQkNcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwQ1x1MTE3NQpcdTExMENcdTExNjVcdTExQkNcdTExMEVcdTExNzUKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTEyXHUxMTZBXHUxMUE4XHUxMTEyXHUxMTc1Clx1MTEwQ1x1MTE2Nlx1MTEwMFx1MTE2OVx1MTFCQwpcdTExMENcdTExNjZcdTExMDBcdTExNkFcdTExMENcdTExNjVcdTExQjcKXHUxMTBDXHUxMTY2XHUxMTAzXHUxMTYyXHUxMTA1XHUxMTY5Clx1MTEwQ1x1MTE2Nlx1MTEwNlx1MTE2OVx1MTFBOApcdTExMENcdTExNjZcdTExMDdcdTExNjFcdTExQUYKXHUxMTBDXHUxMTY2XHUxMTA3XHUxMTY1XHUxMUI4Clx1MTEwQ1x1MTE2Nlx1MTEwOVx1MTE2MVx1MTFCQVx1MTEwMlx1MTE2MVx1MTFBRgpcdTExMENcdTExNjZcdTExMEJcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY2XHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQ1x1MTE2Nlx1MTEwQ1x1MTE2MVx1MTFBOApcdTExMENcdTExNjZcdTExMENcdTExNkVcdTExMDNcdTExNjkKXHUxMTBDXHUxMTY2XHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwQ1x1MTE2Nlx1MTExMVx1MTE2RVx1MTFCNwpcdTExMENcdTExNjZcdTExMTJcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY5XHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwQ1x1MTE2OVx1MTEwMFx1MTE2NVx1MTFBQgpcdTExMENcdTExNjlcdTExMDBcdTExNzNcdTExQjcKXHUxMTBDXHUxMTY5XHUxMTAwXHUxMTc1XHUxMUJDClx1MTEwQ1x1MTE2OVx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMENcdTExNjlcdTExMDZcdTExNzVcdTExMDVcdTExNkQKXHUxMTBDXHUxMTY5XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2OVx1MTEwOVx1MTE2NVx1MTFBQgpcdTExMENcdTExNjlcdTExMEJcdTExNkRcdTExQkNcdTExMTJcdTExNzUKXHUxMTBDXHUxMTY5XHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwQ1x1MTE2OVx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMENcdTExNjlcdTExMENcdTExNzVcdTExQTgKXHUxMTBDXHUxMTY5XHUxMUFCXHUxMTAzXHUxMTYyXHUxMUJBXHUxMTA2XHUxMTYxXHUxMUFGClx1MTEwQ1x1MTE2OVx1MTFBQlx1MTEwQ1x1MTE2MgpcdTExMENcdTExNjlcdTExQUZcdTExMEJcdTExNjVcdTExQjgKXHUxMTBDXHUxMTY5XHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTEwMFx1MTE2RApcdTExMENcdTExNjlcdTExQkNcdTExMDVcdTExNjkKXHUxMTBDXHUxMTY5XHUxMUJDXHUxMTA1XHUxMTcyClx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTEwOVx1MTE2OVx1MTEwNVx1MTE3NQpcdTExMENcdTExNjlcdTExQkNcdTExMEJcdTExNjVcdTExQjhcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTY5XHUxMUJDXHUxMTBDXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTExMlx1MTE2MVx1MTFCOApcdTExMENcdTExNkFcdTExMDlcdTExNjVcdTExQTgKXHUxMTBDXHUxMTZDXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQ1x1MTE2RVx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMENcdTExNkVcdTExMDVcdTExNzNcdTExQjcKXHUxMTBDXHUxMTZFXHUxMTA2XHUxMTYxXHUxMUFGClx1MTEwQ1x1MTE2RVx1MTEwNlx1MTE2NVx1MTEwMlx1MTE3NQpcdTExMENcdTExNkVcdTExMDZcdTExNjVcdTExQTgKXHUxMTBDXHUxMTZFXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2RVx1MTEwNlx1MTE3NVx1MTFBQgpcdTExMENcdTExNkVcdTExMDdcdTExNjFcdTExQkMKXHUxMTBDXHUxMTZFXHUxMTA3XHUxMTY3XHUxMUFCClx1MTEwQ1x1MTE2RVx1MTEwOVx1MTE3NVx1MTFBOApcdTExMENcdTExNkVcdTExMEJcdTExNzVcdTExQUIKXHUxMTBDXHUxMTZFXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQ1x1MTE2RVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMENcdTExNkVcdTExMENcdTExNjVcdTExQUJcdTExMENcdTExNjEKXHUxMTBDXHUxMTZFXHUxMTEwXHUxMTYyXHUxMUE4Clx1MTEwQ1x1MTE2RVx1MTFBQlx1MTEwN1x1MTE3NQpcdTExMENcdTExNkVcdTExQUZcdTExMDBcdTExNjVcdTExMDVcdTExNzUKXHUxMTBDXHUxMTZFXHUxMUFGXHUxMTAwXHUxMTc1Clx1MTEwQ1x1MTE2RVx1MTFBRlx1MTEwNlx1MTE2RVx1MTEwMlx1MTE3NApcdTExMENcdTExNkVcdTExQkNcdTExMDBcdTExNjFcdTExQUIKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTAwXHUxMTY4XHUxMTA3XHUxMTYxXHUxMUJDXHUxMTA5XHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwMFx1MTE2RVx1MTFBOApcdTExMENcdTExNkVcdTExQkNcdTExMDJcdTExNjdcdTExQUIKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTAzXHUxMTYxXHUxMUFCClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwM1x1MTE2OVx1MTFBOApcdTExMENcdTExNkVcdTExQkNcdTExMDdcdTExNjFcdTExQUIKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTA3XHUxMTZFClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwOVx1MTE2NgpcdTExMENcdTExNkVcdTExQkNcdTExMDlcdTExNjlcdTExMDBcdTExNzVcdTExMEJcdTExNjVcdTExQjgKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTA5XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwQlx1MTE2MVx1MTFCQwpcdTExMENcdTExNkVcdTExQkNcdTExMEJcdTExNkQKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTAwXHUxMTZEClx1MTEwQ1x1MTE3M1x1MTFBOFx1MTEwOVx1MTE2NVx1MTFBOApcdTExMENcdTExNzNcdTExQThcdTExMDlcdTExNzUKXHUxMTBDXHUxMTczXHUxMUFGXHUxMTAwXHUxMTY1XHUxMTBCXHUxMTZFXHUxMUI3Clx1MTEwQ1x1MTE3M1x1MTFCQ1x1MTEwMFx1MTE2MQpcdTExMENcdTExNzNcdTExQkNcdTExMDBcdTExNjUKXHUxMTBDXHUxMTczXHUxMUJDXHUxMTAwXHUxMTZGXHUxMUFCClx1MTEwQ1x1MTE3M1x1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQwpcdTExMENcdTExNzNcdTExQkNcdTExMDlcdTExNjYKXHUxMTBDXHUxMTc1XHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTEwMFx1MTE2MVx1MTFCOApcdTExMENcdTExNzVcdTExMDBcdTExNjdcdTExQkMKXHUxMTBDXHUxMTc1XHUxMTAwXHUxMTczXHUxMUE4XHUxMTEyXHUxMTc1Clx1MTEwQ1x1MTE3NVx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMENcdTExNzVcdTExMDBcdTExNzNcdTExQjgKXHUxMTBDXHUxMTc1XHUxMTAyXHUxMTczXHUxMUJDClx1MTEwQ1x1MTE3NVx1MTEwNVx1MTE3M1x1MTFCN1x1MTEwMFx1MTE3NVx1MTFBRgpcdTExMENcdTExNzVcdTExMDVcdTExNzVcdTExMDlcdTExNjFcdTExQUIKXHUxMTBDXHUxMTc1XHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE3NVx1MTEwN1x1MTE2RVx1MTFCQwpcdTExMENcdTExNzVcdTExMDlcdTExNzVcdTExQTgKXHUxMTBDXHUxMTc1XHUxMTBCXHUxMTY3XHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTEwQlx1MTE2RVx1MTEwMFx1MTE2MgpcdTExMENcdTExNzVcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTc1XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMENcdTExNzVcdTExMENcdTExNzVcdTExQUIKXHUxMTBDXHUxMTc1XHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwQ1x1MTE3NVx1MTFBOFx1MTEwOVx1MTE2NVx1MTFBQgpcdTExMENcdTExNzVcdTExQThcdTExMEJcdTExNjVcdTExQjgKXHUxMTBDXHUxMTc1XHUxMUE4XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQ1x1MTE3NVx1MTFBOFx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMENcdTExNzVcdTExQUJcdTExMDBcdTExNzNcdTExQjgKXHUxMTBDXHUxMTc1XHUxMUFCXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE3NVx1MTFBQlx1MTEwNVx1MTE2OQpcdTExMENcdTExNzVcdTExQUJcdTExMDVcdTExNkQKXHUxMTBDXHUxMTc1XHUxMUFCXHUxMTA1XHUxMTc1Clx1MTEwQ1x1MTE3NVx1MTFBQlx1MTEwRFx1MTE2MQpcdTExMENcdTExNzVcdTExQUJcdTExMEVcdTExNjFcdTExQUYKXHUxMTBDXHUxMTc1XHUxMUFCXHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwQ1x1MTE3NVx1MTFBQlx1MTExMFx1MTE2OVx1MTFCQwpcdTExMENcdTExNzVcdTExQUJcdTExMTJcdTExNjJcdTExQkMKXHUxMTBDXHUxMTc1XHUxMUFGXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE3NVx1MTFBRlx1MTEwN1x1MTE2N1x1MTFCQwpcdTExMENcdTExNzVcdTExQUZcdTExMDlcdTExNjUKXHUxMTBDXHUxMTc1XHUxMUI3XHUxMTBDXHUxMTYxXHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTFCOFx1MTEwM1x1MTE2MVx1MTFBQgpcdTExMENcdTExNzVcdTExQjhcdTExMEJcdTExNjFcdTExQUIKXHUxMTBDXHUxMTc1XHUxMUI4XHUxMTBDXHUxMTZFXHUxMUJDClx1MTEwRFx1MTE2MVx1MTEwQ1x1MTE3M1x1MTFCQwpcdTExMERcdTExNzVcdTExMDFcdTExNjVcdTExMDBcdTExNzUKXHUxMTBFXHUxMTYxXHUxMTAyXHUxMTYxXHUxMUI3Clx1MTEwRVx1MTE2MVx1MTEwNVx1MTE2MVx1MTEwNVx1MTE3NQpcdTExMEVcdTExNjFcdTExMDVcdTExNjNcdTExQkMKXHUxMTBFXHUxMTYxXHUxMTA1XHUxMTc1XHUxMUI3Clx1MTEwRVx1MTE2MVx1MTEwN1x1MTE2N1x1MTFBRgpcdTExMEVcdTExNjFcdTExMDlcdTExNjVcdTExQUIKXHUxMTBFXHUxMTYxXHUxMTBFXHUxMTczXHUxMUI3Clx1MTEwRVx1MTE2MVx1MTFBOFx1MTEwMFx1MTE2MVx1MTFBOApcdTExMEVcdTExNjFcdTExQUJcdTExMDZcdTExNkVcdTExQUYKXHUxMTBFXHUxMTYxXHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwRVx1MTE2MVx1MTFCN1x1MTEwMFx1MTE2MQpcdTExMEVcdTExNjFcdTExQjdcdTExMDBcdTExNzVcdTExMDVcdTExNzNcdTExQjcKXHUxMTBFXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTYyClx1MTEwRVx1MTE2MVx1MTFCN1x1MTEwOVx1MTE2NVx1MTFBOApcdTExMEVcdTExNjFcdTExQjdcdTExMEJcdTExNjcKXHUxMTBFXHUxMTYxXHUxMUI3XHUxMTBCXHUxMTZDClx1MTEwRVx1MTE2MVx1MTFCN1x1MTEwQ1x1MTE2OQpcdTExMEVcdTExNjFcdTExQkFcdTExMENcdTExNjFcdTExQUIKXHUxMTBFXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTYxClx1MTEwRVx1MTE2MVx1MTFCQ1x1MTEwMFx1MTE2OQpcdTExMEVcdTExNjFcdTExQkNcdTExMDBcdTExNkUKXHUxMTBFXHUxMTYxXHUxMUJDXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwRVx1MTE2MVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTFBOQpcdTExMEVcdTExNjFcdTExQkNcdTExMENcdTExNjFcdTExQTgKXHUxMTBFXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY5Clx1MTEwRVx1MTE2Mlx1MTEwMlx1MTE2NVx1MTFBRgpcdTExMEVcdTExNjJcdTExMENcdTExNjVcdTExQjcKXHUxMTBFXHUxMTYyXHUxMUE4XHUxMTAwXHUxMTYxXHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwRVx1MTE2Mlx1MTFBOFx1MTEwN1x1MTE2MVx1MTFCQwpcdTExMEVcdTExNjJcdTExQThcdTExMDlcdTExNjFcdTExQkMKXHUxMTBFXHUxMTYyXHUxMUE4XHUxMTBCXHUxMTc1XHUxMUI3Clx1MTEwRVx1MTE2Mlx1MTFCN1x1MTExMVx1MTE3NVx1MTEwQlx1MTE2NVx1MTFBQgpcdTExMEVcdTExNjVcdTExMDdcdTExNjVcdTExQUYKXHUxMTBFXHUxMTY1XHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwRVx1MTE2NVx1MTFBQlx1MTEwMFx1MTE2RVx1MTFBOApcdTExMEVcdTExNjVcdTExQUJcdTExMDNcdTExNkVcdTExQkMKXHUxMTBFXHUxMTY1XHUxMUFCXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwRVx1MTE2NVx1MTFBQlx1MTEwQ1x1MTE2MgpcdTExMEVcdTExNjVcdTExQUJcdTExMEVcdTExNjVcdTExQUJcdTExMTJcdTExNzUKXHUxMTBFXHUxMTY1XHUxMUFGXHUxMTAzXHUxMTY5Clx1MTEwRVx1MTE2NVx1MTFBRlx1MTEwQ1x1MTE2NVx1MTExMlx1MTE3NQpcdTExMEVcdTExNjVcdTExQUZcdTExMTJcdTExNjFcdTExQTgKXHUxMTBFXHUxMTY1XHUxMUJBXHUxMTAyXHUxMTYxXHUxMUFGClx1MTEwRVx1MTE2NVx1MTFCQVx1MTEwRFx1MTE2MgpcdTExMEVcdTExNjVcdTExQkNcdTExMDJcdTExNjdcdTExQUIKXHUxMTBFXHUxMTY1XHUxMUJDXHUxMTA3XHUxMTYxXHUxMTBDXHUxMTc1Clx1MTEwRVx1MTE2NVx1MTFCQ1x1MTEwOVx1MTE2OQpcdTExMEVcdTExNjVcdTExQkNcdTExMEVcdTExNkVcdTExQUIKXHUxMTBFXHUxMTY2XHUxMTAwXHUxMTY4Clx1MTEwRVx1MTE2Nlx1MTEwNVx1MTE2N1x1MTFBOApcdTExMEVcdTExNjZcdTExMEJcdTExNjlcdTExQUIKXHUxMTBFXHUxMTY2XHUxMTBCXHUxMTcyXHUxMUE4Clx1MTEwRVx1MTE2Nlx1MTEwQ1x1MTE2RVx1MTFCQwpcdTExMEVcdTExNjZcdTExMTJcdTExNjVcdTExQjcKXHUxMTBFXHUxMTY5XHUxMTAzXHUxMTczXHUxMUJDXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwRVx1MTE2OVx1MTEwN1x1MTE2MVx1MTFBQgpcdTExMEVcdTExNjlcdTExMDdcdTExNjFcdTExQjgKXHUxMTBFXHUxMTY5XHUxMTA5XHUxMTYxXHUxMUJDXHUxMTEyXHUxMTZBClx1MTEwRVx1MTE2OVx1MTEwOVx1MTE2RVx1MTFBQgpcdTExMEVcdTExNjlcdTExMEJcdTExNjdcdTExMDVcdTExNzNcdTExQjcKXHUxMTBFXHUxMTY5XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwRVx1MTE2OVx1MTEwQ1x1MTE2NVx1MTEwMlx1MTE2N1x1MTFBOApcdTExMEVcdTExNjlcdTExMENcdTExNjVcdTExQjcKXHUxMTBFXHUxMTY5XHUxMTBFXHUxMTY1XHUxMUJDClx1MTEwRVx1MTE2OVx1MTEwRlx1MTE2OVx1MTFBRlx1MTEwNVx1MTE3NVx1MTFCQQpcdTExMEVcdTExNjlcdTExQkFcdTExMDdcdTExNkVcdTExQUYKXHUxMTBFXHUxMTY5XHUxMUJDXHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwRVx1MTE2OVx1MTFCQ1x1MTEwNVx1MTE3NQpcdTExMEVcdTExNjlcdTExQkNcdTExMENcdTExNjFcdTExQkMKXHUxMTBFXHUxMTZBXHUxMUFGXHUxMTBCXHUxMTY3XHUxMUJDClx1MTEwRVx1MTE2Q1x1MTEwMFx1MTE3M1x1MTFBQgpcdTExMEVcdTExNkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTBFXHUxMTZDXHUxMTA5XHUxMTY1XHUxMUFCClx1MTEwRVx1MTE2Q1x1MTEwOVx1MTE3NVx1MTFBQgpcdTExMEVcdTExNkNcdTExMEJcdTExNjFcdTExQTgKXHUxMTBFXHUxMTZDXHUxMTBDXHUxMTY5XHUxMUJDClx1MTEwRVx1MTE2RVx1MTEwOVx1MTE2NVx1MTFBOApcdTExMEVcdTExNkVcdTExMEJcdTExNjVcdTExQTgKXHUxMTBFXHUxMTZFXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwRVx1MTE2RVx1MTEwRVx1MTE2NVx1MTFBQgpcdTExMEVcdTExNkVcdTExMEVcdTExNzNcdTExQTgKXHUxMTBFXHUxMTZFXHUxMUE4XHUxMTAwXHUxMTZFClx1MTEwRVx1MTE2RVx1MTFBOFx1MTEwOVx1MTE2OQpcdTExMEVcdTExNkVcdTExQThcdTExMENcdTExNjYKXHUxMTBFXHUxMTZFXHUxMUE4XHUxMTEyXHUxMTYxClx1MTEwRVx1MTE2RVx1MTFBRlx1MTEwMFx1MTE3M1x1MTFBQgpcdTExMEVcdTExNkVcdTExQUZcdTExMDdcdTExNjFcdTExQUYKXHUxMTBFXHUxMTZFXHUxMUFGXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwRVx1MTE2RVx1MTFBRlx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMEVcdTExNkVcdTExQUZcdTExMEJcdTExNjdcdTExQUIKXHUxMTBFXHUxMTZFXHUxMUFGXHUxMTBCXHUxMTc1XHUxMUI4Clx1MTEwRVx1MTE2RVx1MTFBRlx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMEVcdTExNkVcdTExQUZcdTExMTFcdTExNjFcdTExQUIKXHUxMTBFXHUxMTZFXHUxMUJDXHUxMTAwXHUxMTY3XHUxMUE4Clx1MTEwRVx1MTE2RVx1MTFCQ1x1MTEwMFx1MTE2OQpcdTExMEVcdTExNkVcdTExQkNcdTExMDNcdTExNjlcdTExQUYKXHUxMTBFXHUxMTZFXHUxMUJDXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwRVx1MTE2RVx1MTFCQ1x1MTEwRVx1MTE2NVx1MTFCQ1x1MTEwM1x1MTE2OQpcdTExMEVcdTExNzFcdTExMEJcdTExNjVcdTExQjgKXHUxMTBFXHUxMTcxXHUxMTBDXHUxMTc1XHUxMUE4Clx1MTEwRVx1MTE3MVx1MTExMlx1MTE2M1x1MTFCQwpcdTExMEVcdTExNzVcdTExMEJcdTExNjNcdTExQTgKXHUxMTBFXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTZFClx1MTEwRVx1MTE3NVx1MTFBQlx1MTEwRVx1MTE2NVx1MTFBOApcdTExMEVcdTExNzVcdTExQUZcdTExMDlcdTExNzVcdTExQjgKXHUxMTBFXHUxMTc1XHUxMUFGXHUxMTBCXHUxMTZGXHUxMUFGClx1MTEwRVx1MTE3NVx1MTFBRlx1MTExMVx1MTE2MVx1MTFBQgpcdTExMEVcdTExNzVcdTExQjdcdTExMDNcdTExNjIKXHUxMTBFXHUxMTc1XHUxMUI3XHUxMTA2XHUxMTZFXHUxMUE4Clx1MTEwRVx1MTE3NVx1MTFCN1x1MTEwOVx1MTE3NVx1MTFBRgpcdTExMEVcdTExNzVcdTExQkFcdTExMDlcdTExNjlcdTExQUYKXHUxMTBFXHUxMTc1XHUxMUJDXHUxMTBFXHUxMTYxXHUxMUFCClx1MTEwRlx1MTE2MVx1MTEwNlx1MTE2Nlx1MTEwNVx1MTE2MQpcdTExMEZcdTExNjFcdTExMEJcdTExNkVcdTExQUJcdTExMTBcdTExNjUKXHUxMTBGXHUxMTYxXHUxMUFGXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTA5XHUxMTZFClx1MTEwRlx1MTE2Mlx1MTEwNVx1MTE3NVx1MTFBOFx1MTExMFx1MTE2NQpcdTExMEZcdTExNjJcdTExQjdcdTExMTFcdTExNjVcdTExMDlcdTExNzMKXHUxMTBGXHUxMTYyXHUxMUI3XHUxMTExXHUxMTY2XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwRlx1MTE2NVx1MTExMFx1MTE3M1x1MTFBQgpcdTExMEZcdTExNjVcdTExQUJcdTExMDNcdTExNzVcdTExMDlcdTExNjdcdTExQUIKXHUxMTBGXHUxMTY1XHUxMUFGXHUxMTA1XHUxMTY1Clx1MTEwRlx1MTE2NVx1MTFCN1x1MTExMVx1MTE3Mlx1MTExMFx1MTE2NQpcdTExMEZcdTExNjlcdTExMDFcdTExNzVcdTExMDVcdTExNzUKXHUxMTBGXHUxMTY5XHUxMTA2XHUxMTc1XHUxMTAzXHUxMTc1Clx1MTEwRlx1MTE2OVx1MTFBQlx1MTEwOVx1MTE2NVx1MTExMFx1MTE3MwpcdTExMEZcdTExNjlcdTExQUZcdTExMDVcdTExNjEKXHUxMTBGXHUxMTY5XHUxMUI3XHUxMTExXHUxMTczXHUxMUFGXHUxMTA1XHUxMTY2XHUxMUE4XHUxMTA5XHUxMTczClx1MTEwRlx1MTE2OVx1MTFCQ1x1MTEwMlx1MTE2MVx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMEZcdTExNkJcdTExMDBcdTExNjFcdTExQjcKXHUxMTBGXHUxMTZFXHUxMTAzXHUxMTY2XHUxMTEwXHUxMTYxClx1MTEwRlx1MTE3M1x1MTEwNVx1MTE3NVx1MTFCNwpcdTExMEZcdTExNzNcdTExQUJcdTExMDBcdTExNzVcdTExQUYKXHUxMTBGXHUxMTczXHUxMUFCXHUxMTA0XHUxMTYxXHUxMUFGClx1MTEwRlx1MTE3M1x1MTFBQlx1MTEwOVx1MTE2OVx1MTEwNVx1MTE3NQpcdTExMEZcdTExNzNcdTExQUJcdTExMEJcdTExNjFcdTExMDNcdTExNzNcdTExQUYKXHUxMTBGXHUxMTczXHUxMUFCXHUxMTBCXHUxMTY1XHUxMTA2XHUxMTY1XHUxMTAyXHUxMTc1Clx1MTEwRlx1MTE3M1x1MTFBQlx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMEZcdTExNzNcdTExQUJcdTExMENcdTExNjVcdTExQUYKXHUxMTBGXHUxMTczXHUxMUFGXHUxMTA1XHUxMTYyXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwRlx1MTE3M1x1MTFBRlx1MTEwNVx1MTE2NVx1MTFCOApcdTExMEZcdTExNzVcdTExQUZcdTExMDVcdTExNjkKXHUxMTEwXHUxMTYxXHUxMTBCXHUxMTc1XHUxMUI4Clx1MTExMFx1MTE2MVx1MTEwQ1x1MTE2MVx1MTEwMFx1MTE3NQpcdTExMTBcdTExNjFcdTExQThcdTExMDBcdTExNkUKXHUxMTEwXHUxMTYxXHUxMUE4XHUxMTBDXHUxMTYxClx1MTExMFx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFCQwpcdTExMTBcdTExNjJcdTExMDBcdTExNkZcdTExQUJcdTExMDNcdTExNjkKXHUxMTEwXHUxMTYyXHUxMTBCXHUxMTYzXHUxMUJDClx1MTExMFx1MTE2Mlx1MTExMVx1MTE2RVx1MTFCQwpcdTExMTBcdTExNjJcdTExQThcdTExMDlcdTExNzUKXHUxMTEwXHUxMTYyXHUxMUFGXHUxMTA1XHUxMTY1XHUxMUFCXHUxMTEwXHUxMTczClx1MTExMFx1MTE2NVx1MTEwMlx1MTE2NVx1MTFBRgpcdTExMTBcdTExNjVcdTExMDZcdTExNzVcdTExMDJcdTExNjVcdTExQUYKXHUxMTEwXHUxMTY2XHUxMTAyXHUxMTc1XHUxMTA5XHUxMTczClx1MTExMFx1MTE2Nlx1MTEwOVx1MTE3M1x1MTExMFx1MTE3MwpcdTExMTBcdTExNjZcdTExMEJcdTExNzVcdTExMDdcdTExNzNcdTExQUYKXHUxMTEwXHUxMTY2XHUxMUFGXHUxMTA1XHUxMTY2XHUxMTA3XHUxMTc1XHUxMTBDXHUxMTY1XHUxMUFCClx1MTExMFx1MTE2OVx1MTEwNVx1MTE2OVx1MTFBQgpcdTExMTBcdTExNjlcdTExMDZcdTExNjFcdTExMTBcdTExNjkKXHUxMTEwXHUxMTY5XHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTExMFx1MTE2OVx1MTFCQ1x1MTEwMFx1MTE2OApcdTExMTBcdTExNjlcdTExQkNcdTExMDBcdTExNkEKXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTA1XHUxMTY5Clx1MTExMFx1MTE2OVx1MTFCQ1x1MTEwOVx1MTE3NVx1MTFBQgpcdTExMTBcdTExNjlcdTExQkNcdTExMEJcdTExNjdcdTExQTgKXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTc1XHUxMUFGClx1MTExMFx1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMTBcdTExNjlcdTExQkNcdTExMENcdTExNjYKXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTBDXHUxMTczXHUxMUJDClx1MTExMFx1MTE2OVx1MTFCQ1x1MTExMlx1MTE2MVx1MTFCOApcdTExMTBcdTExNjlcdTExQkNcdTExMTJcdTExNkEKXHUxMTEwXHUxMTZDXHUxMTAwXHUxMTczXHUxMUFCClx1MTExMFx1MTE2Q1x1MTEwQlx1MTE2Rlx1MTFBQgpcdTExMTBcdTExNkNcdTExMENcdTExNzVcdTExQThcdTExMDBcdTExNzNcdTExQjcKXHUxMTEwXHUxMTcxXHUxMTAwXHUxMTc1XHUxMUI3Clx1MTExMFx1MTE3M1x1MTEwNVx1MTE2NVx1MTFBOApcdTExMTBcdTExNzNcdTExQThcdTExMDBcdTExNzNcdTExQjgKXHUxMTEwXHUxMTczXHUxMUE4XHUxMTA3XHUxMTY3XHUxMUFGClx1MTExMFx1MTE3M1x1MTFBOFx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMTBcdTExNzNcdTExQThcdTExMDlcdTExNkUKXHUxMTEwXHUxMTczXHUxMUE4XHUxMTBDXHUxMTc1XHUxMUJDClx1MTExMFx1MTE3M1x1MTFBOFx1MTExMlx1MTE3NQpcdTExMTBcdTExNzNcdTExQUJcdTExMTBcdTExNzNcdTExQUJcdTExMTJcdTExNzUKXHUxMTEwXHUxMTc1XHUxMTA5XHUxMTY3XHUxMTBFXHUxMTczClx1MTExMVx1MTE2MVx1MTEwNVx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMTFcdTExNjFcdTExMEJcdTExNzVcdTExQUYKXHUxMTExXHUxMTYxXHUxMTBFXHUxMTZFXHUxMUFGXHUxMTA5XHUxMTY5Clx1MTExMVx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2N1x1MTFBRgpcdTExMTFcdTExNjFcdTExQUJcdTExMDNcdTExNjFcdTExQUIKXHUxMTExXHUxMTYxXHUxMUFCXHUxMTA2XHUxMTYyClx1MTExMVx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2MQpcdTExMTFcdTExNjFcdTExQUZcdTExMDlcdTExNzVcdTExQjgKXHUxMTExXHUxMTYxXHUxMUFGXHUxMTBCXHUxMTZGXHUxMUFGClx1MTExMVx1MTE2MVx1MTFCOFx1MTEwOVx1MTE2OVx1MTFCQwpcdTExMTFcdTExNjJcdTExMDlcdTExNjdcdTExQUIKXHUxMTExXHUxMTYyXHUxMUE4XHUxMTA5XHUxMTczClx1MTExMVx1MTE2Mlx1MTFBOFx1MTEwOVx1MTE3NVx1MTEwNlx1MTE3NVx1MTFBRlx1MTEwNVx1MTE3NQpcdTExMTFcdTExNjJcdTExQUJcdTExMTBcdTExNzUKXHUxMTExXHUxMTY1XHUxMTA5XHUxMTY2XHUxMUFCXHUxMTEwXHUxMTczClx1MTExMVx1MTE2Nlx1MTEwQlx1MTE3NVx1MTFBQlx1MTExMFx1MTE3MwpcdTExMTFcdTExNjdcdTExQUJcdTExMDBcdTExNjdcdTExQUIKXHUxMTExXHUxMTY3XHUxMUFCXHUxMTBCXHUxMTc0Clx1MTExMVx1MTE2N1x1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMTFcdTExNjdcdTExQUJcdTExMTJcdTExNzUKXHUxMTExXHUxMTY3XHUxMUJDXHUxMTAwXHUxMTYxClx1MTExMVx1MTE2N1x1MTFCQ1x1MTEwMFx1MTE3Mlx1MTFBQgpcdTExMTFcdTExNjdcdTExQkNcdTExMDlcdTExNjJcdTExQkMKXHUxMTExXHUxMTY3XHUxMUJDXHUxMTA5XHUxMTY5Clx1MTExMVx1MTE2N1x1MTFCQ1x1MTEwQlx1MTE2M1x1MTFCQwpcdTExMTFcdTExNjdcdTExQkNcdTExMEJcdTExNzVcdTExQUYKXHUxMTExXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTZBClx1MTExMVx1MTE2OVx1MTEwOVx1MTE3M1x1MTExMFx1MTE2NQpcdTExMTFcdTExNjlcdTExMEJcdTExNzVcdTExQUJcdTExMTBcdTExNzMKXHUxMTExXHUxMTY5XHUxMTBDXHUxMTYxXHUxMUJDClx1MTExMVx1MTE2OVx1MTExMlx1MTE2MVx1MTFCNwpcdTExMTFcdTExNkRcdTExMDZcdTExNjdcdTExQUIKXHUxMTExXHUxMTZEXHUxMTBDXHUxMTY1XHUxMUJDClx1MTExMVx1MTE2RFx1MTEwQ1x1MTE2RVx1MTFBQgpcdTExMTFcdTExNkRcdTExMTJcdTExNjdcdTExQUIKXHUxMTExXHUxMTZFXHUxMUI3XHUxMTA2XHUxMTY5XHUxMUE4Clx1MTExMVx1MTE2RVx1MTFCN1x1MTEwQ1x1MTE3NVx1MTFBRgpcdTExMTFcdTExNkVcdTExQkNcdTExMDBcdTExNjdcdTExQkMKXHUxMTExXHUxMTZFXHUxMUJDXHUxMTA5XHUxMTY5XHUxMUE4Clx1MTExMVx1MTE2RVx1MTFCQ1x1MTEwOVx1MTE3M1x1MTFCOApcdTExMTFcdTExNzNcdTExMDVcdTExNjFcdTExQkNcdTExMDlcdTExNzMKXHUxMTExXHUxMTczXHUxMTA1XHUxMTc1XHUxMUFCXHUxMTEwXHUxMTY1Clx1MTExMVx1MTE3M1x1MTFBRlx1MTEwNVx1MTE2MVx1MTEwOVx1MTE3M1x1MTExMFx1MTE3NVx1MTFBOApcdTExMTFcdTExNzVcdTExMDBcdTExNjlcdTExQUIKXHUxMTExXHUxMTc1XHUxMTA2XHUxMTYxXHUxMUJDClx1MTExMVx1MTE3NVx1MTEwQlx1MTE2MVx1MTEwMlx1MTE2OQpcdTExMTFcdTExNzVcdTExQUZcdTExMDVcdTExNzNcdTExQjcKXHUxMTExXHUxMTc1XHUxMUFGXHUxMTA5XHUxMTZFClx1MTExMVx1MTE3NVx1MTFBRlx1MTEwQlx1MTE2RApcdTExMTFcdTExNzVcdTExQUZcdTExMENcdTExNjEKXHUxMTExXHUxMTc1XHUxMUFGXHUxMTEwXHUxMTY5XHUxMUJDClx1MTExMVx1MTE3NVx1MTFCQ1x1MTEwMFx1MTE2OApcdTExMTJcdTExNjFcdTExMDJcdTExNzNcdTExMDJcdTExNzVcdTExQjcKXHUxMTEyXHUxMTYxXHUxMTAyXHUxMTczXHUxMUFGClx1MTExMlx1MTE2MVx1MTEwM1x1MTE3M1x1MTEwQlx1MTE3MFx1MTEwQlx1MTE2NQpcdTExMTJcdTExNjFcdTExMDVcdTExNkVcdTExQkFcdTExMDdcdTExNjFcdTExQjcKXHUxMTEyXHUxMTYxXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTAwXHUxMTc1Clx1MTExMlx1MTE2MVx1MTEwOVx1MTE2RVx1MTFBOFx1MTEwQ1x1MTE3NVx1MTFCOApcdTExMTJcdTExNjFcdTExMDlcdTExNkVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMTBCXHUxMTY3XHUxMTEwXHUxMTczXHUxMUFCClx1MTExMlx1MTE2MVx1MTEwQ1x1MTE3NVx1MTEwNlx1MTE2MVx1MTFBQgpcdTExMTJcdTExNjFcdTExMEVcdTExNjVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMTExXHUxMTZFXHUxMUI3Clx1MTExMlx1MTE2MVx1MTExMVx1MTE3NVx1MTFBRgpcdTExMTJcdTExNjFcdTExQThcdTExMDBcdTExNkEKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTAwXHUxMTZEClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwMFx1MTE3M1x1MTFCOApcdTExMTJcdTExNjFcdTExQThcdTExMDBcdTExNzUKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTAyXHUxMTY3XHUxMUFCClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwNVx1MTE2N1x1MTFBOApcdTExMTJcdTExNjFcdTExQThcdTExMDdcdTExNjVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA3XHUxMTZFXHUxMTA2XHUxMTY5Clx1MTExMlx1MTE2MVx1MTFBOFx1MTEwN1x1MTE3NQpcdTExMTJcdTExNjFcdTExQThcdTExMDlcdTExNjJcdTExQkMKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTZFXHUxMUFGClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwOVx1MTE3M1x1MTFCOApcdTExMTJcdTExNjFcdTExQThcdTExMEJcdTExNkRcdTExQkNcdTExMTFcdTExNkVcdTExQjcKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTBCXHUxMTZGXHUxMUFCClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwQlx1MTE3MQpcdTExMTJcdTExNjFcdTExQThcdTExMENcdTExNjEKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTBDXHUxMTY1XHUxMUI3Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2OApcdTExMTJcdTExNjFcdTExQUJcdTExMDBcdTExNzNcdTExQUYKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTAxXHUxMTY1XHUxMTA3XHUxMTY1XHUxMUFCXHUxMTBCXHUxMTY2Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwMlx1MTE2MVx1MTFCRApcdTExMTJcdTExNjFcdTExQUJcdTExMDJcdTExNkVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTAzXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTYxXHUxMUFCClx1MTExMlx1MTE2MVx1MTFBQlx1MTEwNFx1MTE2MgpcdTExMTJcdTExNjFcdTExQUJcdTExMDVcdTExNjFcdTExMDlcdTExNjFcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTA2XHUxMTYxXHUxMTAzXHUxMTc1Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMTJcdTExNjFcdTExQUJcdTExMDdcdTExNjVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTA3XHUxMTY5XHUxMUE4Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwOVx1MTE3NVx1MTFBOApcdTExMTJcdTExNjFcdTExQUJcdTExMEJcdTExNjdcdTExMDVcdTExNzNcdTExQjcKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTBEXHUxMTY5XHUxMUE4Clx1MTExMlx1MTE2MVx1MTFBRlx1MTEwNlx1MTE2NVx1MTEwMlx1MTE3NQpcdTExMTJcdTExNjFcdTExQUZcdTExMEJcdTExNjFcdTExMDdcdTExNjVcdTExMENcdTExNzUKXHUxMTEyXHUxMTYxXHUxMUFGXHUxMTBCXHUxMTc1XHUxMUFCClx1MTExMlx1MTE2MVx1MTFCN1x1MTEwMVx1MTE2NgpcdTExMTJcdTExNjFcdTExQjdcdTExMDdcdTExNkVcdTExMDVcdTExNjkKXHUxMTEyXHUxMTYxXHUxMUI4XHUxMTAwXHUxMTY3XHUxMUE4Clx1MTExMlx1MTE2MVx1MTFCOFx1MTEwNVx1MTE3NVx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMTJcdTExNjFcdTExQkNcdTExMDBcdTExNjlcdTExQkMKXHUxMTEyXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTZFClx1MTExMlx1MTE2MVx1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQwpcdTExMTJcdTExNjFcdTExQkNcdTExMEJcdTExNzQKXHUxMTEyXHUxMTYyXHUxMTAwXHUxMTY3XHUxMUFGClx1MTExMlx1MTE2Mlx1MTEwMFx1MTE2RVx1MTFBQgpcdTExMTJcdTExNjJcdTExMDNcdTExNjFcdTExQjgKXHUxMTEyXHUxMTYyXHUxMTAzXHUxMTYxXHUxMUJDClx1MTExMlx1MTE2Mlx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMTJcdTExNjJcdTExMDlcdTExNjVcdTExQTgKXHUxMTEyXHUxMTYyXHUxMTA5XHUxMTY1XHUxMUFGClx1MTExMlx1MTE2Mlx1MTEwOVx1MTE2RVx1MTEwQlx1MTE2RFx1MTFBOFx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMTJcdTExNjJcdTExMEJcdTExNjFcdTExQUIKXHUxMTEyXHUxMTYyXHUxMUE4XHUxMTA5XHUxMTc1XHUxMUI3Clx1MTExMlx1MTE2Mlx1MTFBQlx1MTEwM1x1MTE3M1x1MTEwN1x1MTE2Mlx1MTFBOApcdTExMTJcdTExNjJcdTExQjdcdTExMDdcdTExNjVcdTExMDBcdTExNjUKXHUxMTEyXHUxMTYyXHUxMUJBXHUxMTA3XHUxMTY3XHUxMUMwClx1MTExMlx1MTE2Mlx1MTFCQVx1MTEwOVx1MTE2MVx1MTFBRgpcdTExMTJcdTExNjJcdTExQkNcdTExMDNcdTExNjlcdTExQkMKXHUxMTEyXHUxMTYyXHUxMUJDXHUxMTA3XHUxMTY5XHUxMUE4Clx1MTExMlx1MTE2Mlx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMTJcdTExNjJcdTExQkNcdTExMEJcdTExNkVcdTExQUIKXHUxMTEyXHUxMTYyXHUxMUJDXHUxMTBCXHUxMTcxClx1MTExMlx1MTE2M1x1MTFCQ1x1MTEwMFx1MTE3NQpcdTExMTJcdTExNjNcdTExQkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTEyXHUxMTYzXHUxMUJDXHUxMTA5XHUxMTZFClx1MTExMlx1MTE2NVx1MTEwNVx1MTE2MVx1MTFBOApcdTExMTJcdTExNjVcdTExMEJcdTExNkRcdTExQkMKXHUxMTEyXHUxMTY2XHUxMUFGXHUxMTAwXHUxMTc1Clx1MTExMlx1MTE2N1x1MTFBQlx1MTEwMFx1MTE2QVx1MTFBQgpcdTExMTJcdTExNjdcdTExQUJcdTExMDBcdTExNzNcdTExQjcKXHUxMTEyXHUxMTY3XHUxMUFCXHUxMTAzXHUxMTYyClx1MTExMlx1MTE2N1x1MTFBQlx1MTEwOVx1MTE2MVx1MTFCQwpcdTExMTJcdTExNjdcdTExQUJcdTExMDlcdTExNzVcdTExQUYKXHUxMTEyXHUxMTY3XHUxMUFCXHUxMTBDXHUxMTYxXHUxMUJDClx1MTExMlx1MTE2N1x1MTFBQlx1MTEwQ1x1MTE2MgpcdTExMTJcdTExNjdcdTExQUJcdTExMENcdTExNzUKXHUxMTEyXHUxMTY3XHUxMUFGXHUxMTBCXHUxMTYyXHUxMUE4Clx1MTExMlx1MTE2N1x1MTFCOFx1MTEwNVx1MTE2N1x1MTFBOApcdTExMTJcdTExNjdcdTExQkNcdTExMDdcdTExNkUKXHUxMTEyXHUxMTY3XHUxMUJDXHUxMTA5XHUxMTYxClx1MTExMlx1MTE2N1x1MTFCQ1x1MTEwOVx1MTE2RQpcdTExMTJcdTExNjdcdTExQkNcdTExMDlcdTExNzVcdTExQTgKXHUxMTEyXHUxMTY3XHUxMUJDXHUxMTBDXHUxMTY2Clx1MTExMlx1MTE2N1x1MTFCQ1x1MTExMFx1MTE2MgpcdTExMTJcdTExNjdcdTExQkNcdTExMTFcdTExNjdcdTExQUIKXHUxMTEyXHUxMTY4XHUxMTEwXHUxMTYyXHUxMUE4Clx1MTExMlx1MTE2OVx1MTEwMFx1MTE3NVx1MTEwOVx1MTE3NVx1MTFCNwpcdTExMTJcdTExNjlcdTExMDJcdTExNjFcdTExQjcKXHUxMTEyXHUxMTY5XHUxMTA1XHUxMTYxXHUxMUJDXHUxMTBCXHUxMTc1Clx1MTExMlx1MTE2OVx1MTEwN1x1MTE2MVx1MTFBOApcdTExMTJcdTExNjlcdTExMTBcdTExNjZcdTExQUYKXHUxMTEyXHUxMTY5XHUxMTEyXHUxMTczXHUxMUI4Clx1MTExMlx1MTE2OVx1MTFBOFx1MTEwOVx1MTE3NQpcdTExMTJcdTExNjlcdTExQUZcdTExMDVcdTExNjkKXHUxMTEyXHUxMTY5XHUxMUI3XHUxMTExXHUxMTY2XHUxMTBCXHUxMTc1XHUxMTBDXHUxMTc1Clx1MTExMlx1MTE2OVx1MTFCQ1x1MTEwN1x1MTE2OQpcdTExMTJcdTExNjlcdTExQkNcdTExMDlcdTExNkUKXHUxMTEyXHUxMTY5XHUxMUJDXHUxMTBFXHUxMTYxClx1MTExMlx1MTE2QVx1MTEwNlx1MTE2N1x1MTFBQgpcdTExMTJcdTExNkFcdTExMDdcdTExNkVcdTExQUIKXHUxMTEyXHUxMTZBXHUxMTA5XHUxMTYxXHUxMUFGClx1MTExMlx1MTE2QVx1MTEwQlx1MTE2RFx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMTJcdTExNkFcdTExMENcdTExNjFcdTExQkMKXHUxMTEyXHUxMTZBXHUxMTEyXHUxMTYxXHUxMUE4Clx1MTExMlx1MTE2QVx1MTFBOFx1MTEwN1x1MTE2OQpcdTExMTJcdTExNkFcdTExQThcdTExMEJcdTExNzVcdTExQUIKXHUxMTEyXHUxMTZBXHUxMUE4XHUxMTBDXHUxMTYxXHUxMUJDClx1MTExMlx1MTE2QVx1MTFBOFx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMTJcdTExNkFcdTExQUJcdTExMDBcdTExNjFcdTExQjgKXHUxMTEyXHUxMTZBXHUxMUFCXHUxMTAwXHUxMTY3XHUxMUJDClx1MTExMlx1MTE2QVx1MTFBQlx1MTEwQlx1MTE2N1x1MTFCQwpcdTExMTJcdTExNkFcdTExQUJcdTExMEJcdTExNzJcdTExQUYKXHUxMTEyXHUxMTZBXHUxMUFCXHUxMTBDXHUxMTYxClx1MTExMlx1MTE2QVx1MTFBRlx1MTEwMFx1MTE3NQpcdTExMTJcdTExNkFcdTExQUZcdTExMDNcdTExNjlcdTExQkMKXHUxMTEyXHUxMTZBXHUxMUFGXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTEyXHUxMTc1Clx1MTExMlx1MTE2QVx1MTFBRlx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMTJcdTExNkFcdTExQUZcdTExMERcdTExNjFcdTExQTgKXHUxMTEyXHUxMTZDXHUxMTAwXHUxMTY3XHUxMUFCClx1MTExMlx1MTE2Q1x1MTEwMFx1MTE2QVx1MTFBQgpcdTExMTJcdTExNkNcdTExMDdcdTExNjlcdTExQTgKXHUxMTEyXHUxMTZDXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTExMlx1MTE2Q1x1MTEwQlx1MTE2Rlx1MTFBQgpcdTExMTJcdTExNkNcdTExMENcdTExNjFcdTExQkMKXHUxMTEyXHUxMTZDXHUxMTBDXHUxMTY1XHUxMUFCClx1MTExMlx1MTE2Q1x1MTFCQVx1MTEwOVx1MTE2RQpcdTExMTJcdTExNkNcdTExQkNcdTExMDNcdTExNjFcdTExQUJcdTExMDdcdTExNjlcdTExMDNcdTExNjkKXHUxMTEyXHUxMTZEXHUxMTBCXHUxMTcyXHUxMUFGXHUxMTBDXHUxMTY1XHUxMUE4Clx1MTExMlx1MTE2RVx1MTEwN1x1MTE2MVx1MTFBQgpcdTExMTJcdTExNkVcdTExMEVcdTExNkVcdTExQkFcdTExMDBcdTExNjFcdTExMDVcdTExNkUKXHUxMTEyXHUxMTZFXHUxMUFCXHUxMTA1XHUxMTY3XHUxMUFCClx1MTExMlx1MTE2Rlx1MTFBRlx1MTEwQVx1MTE3NVx1MTFBQgpcdTExMTJcdTExNzJcdTExMDlcdTExNzVcdTExQTgKXHUxMTEyXHUxMTcyXHUxMTBCXHUxMTc1XHUxMUFGClx1MTExMlx1MTE3Mlx1MTFCQ1x1MTEwMlx1MTE2MgpcdTExMTJcdTExNzNcdTExMDVcdTExNzNcdTExQjcKXHUxMTEyXHUxMTczXHUxMUE4XHUxMTA3XHUxMTYyXHUxMUE4Clx1MTExMlx1MTE3M1x1MTFBOFx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMTJcdTExNzNcdTExQUJcdTExMENcdTExNjVcdTExQTgKXHUxMTEyXHUxMTczXHUxMUFCXHUxMTEyXHUxMTc1Clx1MTExMlx1MTE3M1x1MTFCQ1x1MTEwNlx1MTE3NQpcdTExMTJcdTExNzNcdTExQkNcdTExMDdcdTExNkVcdTExQUIKXHUxMTEyXHUxMTc0XHUxMTAwXHUxMTY5XHUxMUE4Clx1MTExMlx1MTE3NFx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMTJcdTExNzRcdTExMDlcdTExNjJcdTExQkMKXHUxMTEyXHUxMTc0XHUxMUFCXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTExMlx1MTE3NVx1MTFCN1x1MTEwMVx1MTE2NVx1MTFCQWAuc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy9zaW1wbGlmaWVkLWNoaW5lc2UuanMKICB2YXIgd29yZGxpc3Q3ID0gYFx1NzY4NApcdTRFMDAKXHU2NjJGClx1NTcyOApcdTRFMEQKXHU0RTg2Clx1NjcwOQpcdTU0OEMKXHU0RUJBClx1OEZEOQpcdTRFMkQKXHU1OTI3Clx1NEUzQQpcdTRFMEEKXHU0RTJBClx1NTZGRApcdTYyMTEKXHU0RUU1Clx1ODk4MQpcdTRFRDYKXHU2NUY2Clx1Njc2NQpcdTc1MjgKXHU0RUVDClx1NzUxRgpcdTUyMzAKXHU0RjVDClx1NTczMApcdTRFOEUKXHU1MUZBClx1NUMzMQpcdTUyMDYKXHU1QkY5Clx1NjIxMApcdTRGMUEKXHU1M0VGClx1NEUzQgpcdTUzRDEKXHU1RTc0Clx1NTJBOApcdTU0MEMKXHU1REU1Clx1NEU1RgpcdTgwRkQKXHU0RTBCClx1OEZDNwpcdTVCNTAKXHU4QkY0Clx1NEVBNwpcdTc5Q0QKXHU5NzYyClx1ODAwQwpcdTY1QjkKXHU1NDBFClx1NTkxQQpcdTVCOUEKXHU4ODRDClx1NUI2NgpcdTZDRDUKXHU2MjQwClx1NkMxMQpcdTVGOTcKXHU3RUNGClx1NTM0MQpcdTRFMDkKXHU0RTRCClx1OEZEQgpcdTc3NDAKXHU3QjQ5Clx1OTBFOApcdTVFQTYKXHU1QkI2Clx1NzUzNQpcdTUyOUIKXHU5MUNDClx1NTk4MgpcdTZDMzQKXHU1MzE2Clx1OUFEOApcdTgxRUEKXHU0RThDClx1NzQwNgpcdThENzcKXHU1QzBGClx1NzI2OQpcdTczQjAKXHU1QjlFClx1NTJBMApcdTkxQ0YKXHU5MEZEClx1NEUyNApcdTRGNTMKXHU1MjM2Clx1NjczQQpcdTVGNTMKXHU0RjdGClx1NzBCOQpcdTRFQ0UKXHU0RTFBClx1NjcyQwpcdTUzQkIKXHU2MjhBClx1NjAyNwpcdTU5N0QKXHU1RTk0Clx1NUYwMApcdTVCODMKXHU1NDA4Clx1OEZEOApcdTU2RTAKXHU3NTMxClx1NTE3NgpcdTRFOUIKXHU3MTM2Clx1NTI0RApcdTU5MTYKXHU1OTI5Clx1NjUzRgpcdTU2REIKXHU2NUU1Clx1OTBBMwpcdTc5M0UKXHU0RTQ5Clx1NEU4QgpcdTVFNzMKXHU1RjYyClx1NzZGOApcdTUxNjgKXHU4ODY4Clx1OTVGNApcdTY4MzcKXHU0RTBFClx1NTE3MwpcdTU0MDQKXHU5MUNEClx1NjVCMApcdTdFQkYKXHU1MTg1Clx1NjU3MApcdTZCNjMKXHU1RkMzClx1NTNDRApcdTRGNjAKXHU2NjBFClx1NzcwQgpcdTUzOUYKXHU1M0M4Clx1NEU0OApcdTUyMjkKXHU2QkQ0Clx1NjIxNgpcdTRGNDYKXHU4RDI4Clx1NkMxNApcdTdCMkMKXHU1NDExClx1OTA1MwpcdTU0N0QKXHU2QjY0Clx1NTNEOApcdTY3NjEKXHU1M0VBClx1NkNBMQpcdTdFRDMKXHU4OUUzClx1OTVFRQpcdTYxMEYKXHU1RUZBClx1NjcwOApcdTUxNkMKXHU2NUUwClx1N0NGQgpcdTUxOUIKXHU1Rjg4Clx1NjBDNQpcdTgwMDUKXHU2NzAwClx1N0FDQgpcdTRFRTMKXHU2MEYzClx1NURGMgpcdTkwMUEKXHU1RTc2Clx1NjNEMApcdTc2RjQKXHU5ODk4Clx1NTE1QQpcdTdBMEIKXHU1QzU1Clx1NEU5NApcdTY3OUMKXHU2NTk5Clx1OEM2MQpcdTU0NTgKXHU5NzY5Clx1NEY0RApcdTUxNjUKXHU1RTM4Clx1NjU4NwpcdTYwM0IKXHU2QjIxClx1NTRDMQpcdTVGMEYKXHU2RDNCClx1OEJCRQpcdTUzQ0EKXHU3QkExClx1NzI3OQpcdTRFRjYKXHU5NTdGClx1NkM0MgpcdTgwMDEKXHU1OTM0Clx1NTdGQQpcdThENDQKXHU4RkI5Clx1NkQ0MQpcdThERUYKXHU3RUE3Clx1NUMxMQpcdTU2RkUKXHU1QzcxClx1N0VERgpcdTYzQTUKXHU3N0U1Clx1OEY4MwpcdTVDMDYKXHU3RUM0Clx1ODlDMQpcdThCQTEKXHU1MjJCClx1NTk3OQpcdTYyNEIKXHU4OUQyClx1NjcxRgpcdTY4MzkKXHU4QkJBClx1OEZEMApcdTUxOUMKXHU2MzA3Clx1NTFFMApcdTRFNUQKXHU1MzNBClx1NUYzQQpcdTY1M0UKXHU1MUIzClx1ODk3RgpcdTg4QUIKXHU1RTcyClx1NTA1QQpcdTVGQzUKXHU2MjE4Clx1NTE0OApcdTU2REUKXHU1MjE5Clx1NEVGQgpcdTUzRDYKXHU2MzZFClx1NTkwNApcdTk2MUYKXHU1MzU3Clx1N0VEOQpcdTgyNzIKXHU1MTQ5Clx1OTVFOApcdTUzNzMKXHU0RkREClx1NkNCQgpcdTUzMTcKXHU5MDIwClx1NzY3RQpcdTg5QzQKXHU3MEVEClx1OTg4NgpcdTRFMDMKXHU2RDc3Clx1NTNFMwpcdTRFMUMKXHU1QkZDClx1NTY2OApcdTUzOEIKXHU1RkQ3Clx1NEUxNgpcdTkxRDEKXHU1ODlFClx1NEU4OQpcdTZENEUKXHU5NjM2Clx1NkNCOQpcdTYwMUQKXHU2NzJGClx1Njc4MQpcdTRFQTQKXHU1M0Q3Clx1ODA1NApcdTRFQzAKXHU4QkE0Clx1NTE2RApcdTUxNzEKXHU2NzQzClx1NjUzNgpcdThCQzEKXHU2NTM5Clx1NkUwNQpcdTdGOEUKXHU1MThEClx1OTFDNwpcdThGNkMKXHU2NkY0Clx1NTM1NQpcdTk4Q0UKXHU1MjA3Clx1NjI1MwpcdTc2N0QKXHU2NTU5Clx1OTAxRgpcdTgyQjEKXHU1RTI2Clx1NUI4OQpcdTU3M0EKXHU4RUFCClx1OEY2NgpcdTRGOEIKXHU3NzFGClx1NTJBMQpcdTUxNzcKXHU0RTA3Clx1NkJDRgpcdTc2RUUKXHU4MUYzClx1OEZCRQpcdThENzAKXHU3OUVGClx1NzkzQQpcdThCQUUKXHU1OEYwClx1NjJBNQpcdTY1OTcKXHU1QjhDClx1N0M3QgpcdTUxNkIKXHU3OUJCClx1NTM0RQpcdTU0MEQKXHU3ODZFClx1NjI0RApcdTc5RDEKXHU1RjIwClx1NEZFMQpcdTlBNkMKXHU4MjgyClx1OEJERApcdTdDNzMKXHU2NTc0Clx1N0E3QQpcdTUxNDMKXHU1MUI1Clx1NEVDQQpcdTk2QzYKXHU2RTI5Clx1NEYyMApcdTU3MUYKXHU4QkI4Clx1NkI2NQpcdTdGQTQKXHU1RTdGClx1NzdGMwpcdThCQjAKXHU5NzAwClx1NkJCNQpcdTc4MTQKXHU3NTRDClx1NjJDOQpcdTY3OTcKXHU1RjhCClx1NTNFQgpcdTRFMTQKXHU3QTc2Clx1ODlDMgpcdThEOEEKXHU3RUM3Clx1ODhDNQpcdTVGNzEKXHU3Qjk3Clx1NEY0RQpcdTYzMDEKXHU5N0YzClx1NEYxNwpcdTRFNjYKXHU1RTAzClx1NTkwRApcdTVCQjkKXHU1MTNGClx1OTg3QgpcdTk2NDUKXHU1NTQ2Clx1OTc1RQpcdTlBOEMKXHU4RkRFClx1NjVBRApcdTZERjEKXHU5NkJFClx1OEZEMQpcdTc3RkYKXHU1MzQzClx1NTQ2OApcdTU5RDQKXHU3RDIwClx1NjI4MApcdTU5MDcKXHU1MzRBClx1NTI5RQpcdTk3NTIKXHU3NzAxClx1NTIxNwpcdTRFNjAKXHU1NENEClx1N0VBNgpcdTY1MkYKXHU4MjJDClx1NTNGMgpcdTYxMUYKXHU1MkIzClx1NEZCRgpcdTU2RTIKXHU1RjgwClx1OTE3OApcdTUzODYKXHU1RTAyClx1NTE0QgpcdTRGNTUKXHU5NjY0Clx1NkQ4OApcdTY3ODQKXHU1RTlDClx1NzlGMApcdTU5MkEKXHU1MUM2Clx1N0NCRQpcdTUwM0MKXHU1M0Y3Clx1NzM4NwpcdTY1Q0YKXHU3RUY0Clx1NTIxMgpcdTkwMDkKXHU2ODA3Clx1NTE5OQpcdTVCNTgKXHU1MDE5Clx1NkJEQgpcdTRFQjIKXHU1RkVCClx1NjU0OApcdTY1QUYKXHU5NjYyClx1NjdFNQpcdTZDNUYKXHU1NzhCClx1NzczQwpcdTczOEIKXHU2MzA5Clx1NjgzQwpcdTUxN0IKXHU2NjEzClx1N0Y2RQpcdTZEM0UKXHU1QzQyClx1NzI0NwpcdTU5Q0IKXHU1Mzc0Clx1NEUxMwpcdTcyQjYKXHU4MEIyClx1NTM4MgpcdTRFQUMKXHU4QkM2Clx1OTAwMgpcdTVDNUUKXHU1NzA2Clx1NTMwNQpcdTcwNkIKXHU0RjRGClx1OEMwMwpcdTZFRTEKXHU1M0JGClx1NUM0MApcdTcxNjcKXHU1M0MyClx1N0VBMgpcdTdFQzYKXHU1RjE1Clx1NTQyQwpcdThCRTUKXHU5NEMxClx1NEVGNwpcdTRFMjUKXHU5OTk2Clx1NUU5NQpcdTZEQjIKXHU1Qjk4Clx1NUZCNwpcdTk2OEYKXHU3NUM1Clx1ODJDRgpcdTU5MzEKXHU1QzE0Clx1NkI3QgpcdThCQjIKXHU5MTREClx1NTk3MwpcdTlFQzQKXHU2M0E4Clx1NjYzRQpcdThDMDgKXHU3RjZBClx1Nzk1RQpcdTgyN0EKXHU1NDYyClx1NUUyRApcdTU0MkIKXHU0RjAxClx1NjcxQgpcdTVCQzYKXHU2Mjc5Clx1ODQyNQpcdTk4NzkKXHU5NjMyClx1NEUzRQpcdTc0MDMKXHU4MkYxClx1NkMyNwpcdTUyQkYKXHU1NDRBClx1Njc0RQpcdTUzRjAKXHU4NDNEClx1NjcyOApcdTVFMkUKXHU4RjZFClx1NzgzNApcdTRFOUEKXHU1RTA4Clx1NTZGNApcdTZDRTgKXHU4RkRDClx1NUI1NwpcdTY3NTAKXHU2MzkyClx1NEY5QgpcdTZDQjMKXHU2MDAxClx1NUMwMQpcdTUzRTYKXHU2NUJEClx1NTFDRgpcdTY4MTEKXHU2RUI2Clx1NjAwRQpcdTZCNjIKXHU2ODQ4Clx1OEEwMApcdTU4RUIKXHU1NzQ3Clx1NkI2NgpcdTU2RkEKXHU1M0Y2Clx1OUM3QwpcdTZDRTIKXHU4OUM2Clx1NEVDNQpcdThEMzkKXHU3RDI3Clx1NzIzMQpcdTVERTYKXHU3QUUwClx1NjVFOQpcdTY3MUQKXHU1QkIzClx1N0VFRApcdThGN0IKXHU2NzBEClx1OEJENQpcdTk4REYKXHU1MTQ1Clx1NTE3NQpcdTZFOTAKXHU1MjI0Clx1NjJBNApcdTUzRjgKXHU4REIzClx1NjdEMApcdTdFQzMKXHU1REVFClx1ODFGNApcdTY3N0YKXHU3NTMwClx1OTY0RApcdTlFRDEKXHU3MkFGClx1OEQxRgpcdTUxRkIKXHU4MzAzClx1N0VFNwpcdTUxNzQKXHU0RjNDClx1NEY1OQpcdTU3NUEKXHU2NkYyClx1OEY5MwpcdTRGRUUKXHU2NTQ1Clx1NTdDRQpcdTU5MkIKXHU1OTFGClx1OTAwMQpcdTdCMTQKXHU4MjM5Clx1NTM2MApcdTUzRjMKXHU4RDIyClx1NTQwMwpcdTVCQ0MKXHU2NjI1Clx1ODA0QwpcdTg5QzkKXHU2QzQ5Clx1NzUzQgpcdTUyOUYKXHU1REY0Clx1OERERgpcdTg2N0QKXHU2NzQyClx1OThERQpcdTY4QzAKXHU1NDM4Clx1NTJBOQpcdTUzNDcKXHU5NjMzClx1NEU5MgpcdTUyMUQKXHU1MjFCClx1NjI5NwpcdTgwMDMKXHU2Mjk1Clx1NTc0RgpcdTdCNTYKXHU1M0U0Clx1NUY4NApcdTYzNjIKXHU2NzJBClx1OEREMQpcdTc1NTkKXHU5NEEyClx1NjZGRQpcdTdBRUYKXHU4RDIzClx1N0FEOQpcdTdCODAKXHU4RkYwClx1OTRCMQpcdTUyNkYKXHU1QzNEClx1NUUxRApcdTVDMDQKXHU4MzQ5Clx1NTFCMgpcdTYyN0YKXHU3MkVDClx1NEVFNApcdTk2NTAKXHU5NjNGClx1NUJBMwpcdTczQUYKXHU1M0NDClx1OEJGNwpcdThEODUKXHU1RkFFClx1OEJBOQpcdTYzQTcKXHU1RERFClx1ODI2RgpcdThGNzQKXHU2MjdFClx1NTQyNgpcdTdFQUEKXHU3NkNBClx1NEY5RApcdTRGMTgKXHU5ODc2Clx1Nzg0MApcdThGN0QKXHU1MDEyClx1NjIzRgpcdTdBODEKXHU1NzUwClx1N0M4OQpcdTY1NEMKXHU3NTY1Clx1NUJBMgpcdTg4ODEKXHU1MUI3Clx1ODBEQwpcdTdFREQKXHU2NzkwClx1NTc1NwpcdTUyNDIKXHU2RDRCClx1NEUxRApcdTUzNEYKXHU4QkM5Clx1NUZGNQpcdTk2NDgKXHU0RUNEClx1N0Y1NwpcdTc2RDAKXHU1M0NCClx1NkQwQgpcdTk1MTkKXHU4MkU2Clx1NTkxQwpcdTUyMTEKXHU3OUZCClx1OTg5MQpcdTkwMTAKXHU5NzYwClx1NkRGNwpcdTZCQ0QKXHU3N0VEClx1NzZBRQpcdTdFQzgKXHU4MDVBClx1NkM3RApcdTY3NTEKXHU0RTkxClx1NTRFQQpcdTY1RTIKXHU4REREClx1NTM2QgpcdTUwNUMKXHU3MEM4Clx1NTkyRQpcdTVCREYKXHU3MEU3Clx1OEZDNQpcdTU4ODMKXHU4MkU1Clx1NTM3MApcdTZEMzIKXHU1MjNCClx1NjJFQwpcdTZGQzAKXHU1QjU0Clx1NjQxRQpcdTc1MUEKXHU1QkE0Clx1NUY4NQpcdTY4MzgKXHU2ODIxClx1NjU2MwpcdTRGQjUKXHU1NDI3Clx1NzUzMgpcdTZFMzgKXHU0RTQ1Clx1ODNEQwpcdTU0NzMKXHU2NUU3Clx1NkEyMQpcdTZFNTYKXHU4RDI3Clx1NjM1RgpcdTk4ODQKXHU5NjNCClx1NkJFQgpcdTY2NkUKXHU3QTMzClx1NEU1OQpcdTU5ODgKXHU2OTBEClx1NjA2RgpcdTYyNjkKXHU5NEY2Clx1OEJFRApcdTYzMjUKXHU5MTUyClx1NUI4OApcdTYyRkYKXHU1RThGClx1N0VCOApcdTUzM0IKXHU3RjNBClx1OTZFOApcdTU0MTcKXHU5NDg4Clx1NTIxOApcdTU1NEEKXHU2MDI1Clx1NTUzMQpcdThCRUYKXHU4QkFEClx1NjEzRgpcdTVCQTEKXHU5NjQ0Clx1ODNCNwpcdTgzMzYKXHU5QzlDClx1N0NBRQpcdTY1QTQKXHU1QjY5Clx1ODEzMQpcdTc4NkIKXHU4MEE1Clx1NTU4NApcdTlGOTkKXHU2RjE0Clx1NzIzNgpcdTZFMTAKXHU4ODQwClx1NkIyMgpcdTY4QjAKXHU2MzhDClx1NkI0QwpcdTZDOTkKXHU1MjFBClx1NjUzQgpcdThDMTMKXHU3NkZFClx1OEJBOApcdTY2NUEKXHU3QzkyClx1NEU3MQpcdTcxQzMKXHU3N0RCClx1NEU0RQpcdTY3NDAKXHU4MzZGClx1NUI4MQpcdTlDODEKXHU4RDM1Clx1OTQ5RgpcdTcxNjQKXHU4QkZCClx1NzNFRApcdTRGMkYKXHU5OTk5Clx1NEVDQgpcdThGRUIKXHU1M0U1Clx1NEUzMApcdTU3RjkKXHU2M0UxClx1NTE3MApcdTYyQzUKXHU1RjI2Clx1ODZDQgpcdTZDODkKXHU1MDQ3Clx1N0E3RgpcdTYyNjcKXHU3QjU0Clx1NEU1MApcdThDMDEKXHU5ODdBClx1NzBERgpcdTdGMjkKXHU1RjgxClx1ODEzOApcdTU1OUMKXHU2NzdFClx1ODExQQpcdTU2RjAKXHU1RjAyClx1NTE0RApcdTgwQ0MKXHU2NjFGClx1Nzk4RgpcdTRFNzAKXHU2N0QzClx1NEU5NQpcdTY5ODIKXHU2MTYyClx1NjAxNQpcdTc4QzEKXHU1MDBEClx1Nzk1NgpcdTc2ODcKXHU0RkMzClx1OTc1OQpcdTg4NjUKXHU4QkM0Clx1N0ZGQgpcdTgwODkKXHU4REY1Clx1NUMzQwpcdTg4NjMKXHU1QkJEClx1NjI2QwpcdTY4QzkKXHU1RTBDClx1NEYyNApcdTY0Q0QKXHU1NzgyClx1NzlDQgpcdTVCOUMKXHU2QzIyClx1NTk1NwpcdTc3NjMKXHU2MzJGClx1NjdCNgpcdTRFQUUKXHU2NzJCClx1NUJBQQpcdTVFODYKXHU3RjE2Clx1NzI1QgpcdTg5RTYKXHU2NjIwClx1OTZGNwpcdTk1MDAKXHU4QkQ3Clx1NUVBNwpcdTVDNDUKXHU2MjkzClx1ODhDMgpcdTgwREUKXHU1NDdDClx1NUExOApcdTY2NkYKXHU1QTAxClx1N0VGRgpcdTY2NzYKXHU1MzlBClx1NzZERgpcdTg4NjEKXHU5RTIxClx1NUI1OQpcdTVFRjYKXHU1MzcxClx1ODBGNgpcdTVDNEIKXHU0RTYxClx1NEUzNApcdTk2NDYKXHU5ODdFClx1NjM4OQpcdTU0NDAKXHU3MDZGClx1NUM4MQpcdTYzQUEKXHU2NzVGClx1ODAxMApcdTUyNjcKXHU3Mzg5Clx1OEQ3NQpcdThERjMKXHU1NEU1Clx1NUI2MwpcdThCRkUKXHU1MUVGClx1ODBFMQpcdTk4OUQKXHU2QjNFClx1N0VDRApcdTUzNzcKXHU5RjUwClx1NEYxRgpcdTg0QjgKXHU2Qjk2Clx1NkMzOApcdTVCOTcKXHU4MkQ3Clx1NURERApcdTcwODkKXHU1Q0E5Clx1NUYzMQpcdTk2RjYKXHU2NzY4Clx1NTk0RgpcdTZDQkYKXHU5NzMyClx1Njc0NgpcdTYzQTIKXHU2RUQxClx1OTU0NwpcdTk5NkQKXHU2RDUzClx1ODIyQQpcdTYwMDAKXHU4RDc2Clx1NUU5MwpcdTU5M0EKXHU0RjBBClx1NzA3NQpcdTdBMEUKXHU5MDE0Clx1NzA2RApcdThENUIKXHU1RjUyClx1NTNFQwpcdTlGMTMKXHU2NEFEClx1NzZEOApcdTg4QzEKXHU5NjY5Clx1NUVCNwpcdTU1MkYKXHU1RjU1Clx1ODNDQwpcdTdFQUYKXHU1MDFGClx1N0NENgpcdTc2RDYKXHU2QTJBClx1N0IyNgpcdTc5QzEKXHU1MkFBClx1NTgwMgpcdTU3REYKXHU2N0FBClx1NkRBNgpcdTVFNDUKXHU1NEM4Clx1N0FERgpcdTcxOUYKXHU4NjZCClx1NkNGRApcdTgxMTEKXHU1OEU0Clx1NzhCMwpcdTZCMjcKXHU5MDREClx1NEZBNwpcdTVCRTgKXHU2NTYyClx1NUY3QgpcdTg2NTEKXHU2NTlDClx1ODU4NApcdTVFQUQKXHU3RUIzClx1NUYzOQpcdTk5NzIKXHU0RjM4Clx1NjI5OApcdTlFQTYKXHU2RTdGClx1NjY5NwpcdTgzNzcKXHU3NEU2Clx1NTg1RQpcdTVFOEEKXHU3QjUxClx1NjA3NgpcdTYyMzcKXHU4QkJGClx1NTg1NApcdTU5NDcKXHU5MDBGClx1Njg4MQpcdTUyMDAKXHU2NUNCClx1OEZGOQpcdTUzNjEKXHU2QzJGClx1OTA0NwpcdTRFRkQKXHU2QkQyClx1NkNFNQpcdTkwMDAKXHU2RDE3Clx1NjQ0NgpcdTcwNzAKXHU1RjY5Clx1NTM1NgpcdTgwMTcKXHU1OTBGClx1NjJFOQpcdTVGRDkKXHU5NERDClx1NzMyRQpcdTc4NkMKXHU0RTg4Clx1N0U0MQpcdTU3MDgKXHU5NkVBClx1NTFGRApcdTRFQTYKXHU2MkJEClx1N0JDNwpcdTk2MzUKXHU5NjM0Clx1NEUwMQpcdTVDM0EKXHU4RkZEClx1NTgwNgpcdTk2QzQKXHU4RkNFClx1NkNEQgpcdTcyMzgKXHU2OTdDClx1OTA3RgpcdThDMEIKXHU1NDI4Clx1OTFDRQpcdTczMkEKXHU2NUQ3Clx1N0QyRgpcdTUwNEYKXHU1MTc4Clx1OTk4NgpcdTdEMjIKXHU3OUU2Clx1ODEwMgpcdTZGNkUKXHU3MjM3Clx1OEM0NgpcdTVGRkQKXHU2MjU4Clx1NjBDQQpcdTU4NTEKXHU5MDU3Clx1NjEwOApcdTY3MzEKXHU2NkZGClx1N0VBNApcdTdDOTcKXHU1MDNFClx1NUMxQQpcdTc1REIKXHU2OTVBClx1OEMyMgpcdTU5NEIKXHU4RDJEClx1NzhFOApcdTU0MUIKXHU2QzYwClx1NjVDMQpcdTc4OEUKXHU5QUE4Clx1NzZEMQpcdTYzNTUKXHU1RjFGClx1NjZCNApcdTUyNzIKXHU4RDJGClx1NkI4QQpcdTkxQ0EKXHU4QkNEClx1NEVBMQpcdTU4QzEKXHU5ODdGClx1NUI5RApcdTUzNDgKXHU1QzE4Clx1OTVGQgpcdTYzRUQKXHU3MEFFClx1NkI4QgpcdTUxQUMKXHU2ODY1Clx1NTk4NwpcdThCNjYKXHU3RUZDClx1NjJEQgpcdTU0MzQKXHU0RUQ4Clx1NkQ2RQpcdTkwNkQKXHU1RjkwClx1NjBBOApcdTY0NDcKXHU4QzM3Clx1OEQ1RQpcdTdCQjEKXHU5Njk0Clx1OEJBMgpcdTc1MzcKXHU1NDM5Clx1NTZFRApcdTdFQjcKXHU1NTEwClx1OEQyNQpcdTVCOEIKXHU3M0JCClx1NURFOApcdTgwMTUKXHU1NzY2Clx1ODM2MwpcdTk1RUQKXHU2RTdFClx1OTUyRQpcdTUxRTEKXHU5QTdCClx1OTUwNQpcdTY1NTEKXHU2MDY5Clx1NTI2NQpcdTUxREQKXHU3OEIxClx1OUY3RgpcdTYyMkEKXHU3MEJDClx1OUVCQgpcdTdFQkEKXHU3OTgxClx1NUU5RgpcdTc2REIKXHU3MjQ4Clx1N0YxMwpcdTUxQzAKXHU3NzVCClx1NjYwQwpcdTVBNUEKXHU2RDg5Clx1N0I1MgpcdTU2MzQKXHU2M0QyClx1NUNCOApcdTY3MTcKXHU1RTg0Clx1ODg1NwpcdTg1Q0YKXHU1OUQxClx1OEQzOApcdTgxNTAKXHU1OTc0Clx1NTU2NgpcdTYwRUYKXHU0RTU4Clx1NEYxOQpcdTYwNjIKXHU1MzAwClx1N0VCMQpcdTYyNEUKXHU4RkE5Clx1ODAzMwpcdTVGNkEKXHU4MUUzClx1NEVCRgpcdTc0ODMKXHU2MkI1Clx1ODEwOQpcdTc5QzAKXHU4NDI4Clx1NEZDNApcdTdGNTEKXHU4MjFFClx1NUU5NwpcdTU1QjcKXHU3RUI1Clx1NUJGOApcdTZDNTcKXHU2MzAyClx1NkQyQQpcdThEM0EKXHU5NUVBClx1NjdFQwpcdTcyMDYKXHU3MEVGClx1NkQyNQpcdTdBM0IKXHU1ODk5Clx1OEY2RgpcdTUyQzcKXHU1MENGClx1NkVEQQpcdTUzOTgKXHU4NDk5Clx1ODJCMwpcdTgwQUYKXHU1NzYxClx1NjdGMQpcdTgzNjEKXHU4MTdGClx1NEVFQQpcdTY1QzUKXHU1QzNFClx1OEY2NwpcdTUxQjAKXHU4RDIxClx1NzY3QgpcdTlFQ0UKXHU1MjRBClx1OTRCQgpcdTUyRDIKXHU5MDAzClx1OTY5QwpcdTZDMjgKXHU5MEVEClx1NUNGMApcdTVFMDEKXHU2RTJGClx1NEYwRgpcdThGNjgKXHU0RUE5Clx1NkJENQpcdTY0RTYKXHU4M0FCClx1NTIzQQpcdTZENkEKXHU3OUQ4Clx1NjNGNApcdTY4MkEKXHU1MDY1Clx1NTUyRQpcdTgwQTEKXHU1QzlCClx1NzUxOApcdTZDRTEKXHU3NzYxClx1N0FFNQpcdTk0RjgKXHU2QzY0Clx1OTYwMApcdTRGMTEKXHU2QzQ3Clx1ODIwRApcdTcyNjcKXHU3RUQ1Clx1NzBCOApcdTU0RjIKXHU3OEY3Clx1N0VFOQpcdTY3MEIKXHU2REUxClx1NUMxNgpcdTU0MkYKXHU5Njc3Clx1NjdGNApcdTU0NDgKXHU1RjkyClx1OTg5QwpcdTZDRUEKXHU3QTBEClx1NUZEOApcdTZDRjUKXHU4NEREClx1NjJENgpcdTZEMUUKXHU2Mzg4Clx1OTU1QwpcdThGOUIKXHU1OEVFClx1OTUwQgpcdThEMkIKXHU4NjVBClx1NUYyRgpcdTY0NjkKXHU2Q0YwClx1NUU3QwpcdTVFRjcKXHU1QzBBClx1N0E5NwpcdTdFQjIKXHU1RjA0Clx1OTZCNgpcdTc1OTEKXHU2QzBGClx1NUJBQgpcdTU5RDAKXHU5NzA3Clx1NzQ1RQpcdTYwMkEKXHU1QzI0Clx1NzQzNApcdTVGQUEKXHU2M0NGClx1ODE5QwpcdThGREQKXHU1OTM5Clx1ODE3MApcdTdGMTgKXHU3M0UwClx1N0E3NwpcdTY4RUUKXHU2NzlEClx1N0FGOQpcdTZDOUYKXHU1MEFDClx1N0VGMwpcdTVGQzYKXHU5MEE2Clx1NTI2OQpcdTVFNzgKXHU2RDQ2Clx1NjgwRgpcdTYyRTUKXHU3MjU5Clx1OEQyRQpcdTc5M0MKXHU2RUU0Clx1OTRBMApcdTdFQjkKXHU3RjYyClx1NjJDRApcdTU0QjEKXHU1NThBClx1ODg5NgpcdTU3QzMKXHU1MkU0Clx1N0Y1QQpcdTcxMjYKXHU2RjVDClx1NEYwRApcdTU4QTgKXHU2QjMyClx1N0YxRApcdTU5RDMKXHU1MjBBClx1OTk3MQpcdTRFRkYKXHU1OTU2Clx1OTRERApcdTlCM0MKXHU0RTNEClx1OERFOApcdTlFRDgKXHU2MzE2Clx1OTRGRQpcdTYyNkIKXHU1NTlEClx1ODg4QgpcdTcwQUQKXHU2QzYxClx1NUU1NQpcdThCRjgKXHU1RjI3Clx1NTJCMQpcdTY4ODUKXHU1OTc2Clx1NkQwMQpcdTcwN0UKXHU4MjFGClx1OTI3NApcdTgyRUYKXHU4QkJDClx1NjJCMQpcdTZCQzEKXHU2MUMyClx1NUJEMgpcdTY2N0EKXHU1N0Q0Clx1NUJDNApcdTVDNEEKXHU4REMzClx1NkUyMQpcdTYzMTEKXHU0RTM5Clx1ODI3MApcdThEMUQKXHU3OEIwClx1NjJENApcdTcyMzkKXHU2MjM0Clx1NzgwMQpcdTY4QTYKXHU4MkJEClx1NzE5NApcdThENjQKXHU2RTE0Clx1NTRFRApcdTY1NkMKXHU5ODk3Clx1NTk1NApcdTk0QzUKXHU0RUYyClx1ODY0RQpcdTdBMDAKXHU1OUI5Clx1NEU0RgpcdTczQ0QKXHU3NTMzClx1Njg0QwpcdTkwNzUKXHU1MTQxClx1OTY4NgpcdTg3QkEKXHU0RUQzClx1OUI0RgpcdTk1MTAKXHU2NjUzClx1NkMyRQpcdTUxN0MKXHU5NjkwClx1Nzg4RApcdThENkIKXHU2MkU4Clx1NUZFMApcdTgwODMKXHU3RjM4Clx1NzI3NQpcdTYyQTIKXHU1MzVBClx1NURFNwpcdTU4RjMKXHU1MTQ0Clx1Njc1QwpcdThCQUYKXHU4QkRBClx1NzhBNwpcdTc5NjUKXHU2N0VGClx1OTg3NQpcdTVERTEKXHU3N0U5Clx1NjBCMgpcdTcwNEMKXHU5Rjg0Clx1NEYyNgpcdTc5NjgKXHU1QkZCClx1Njg0MgpcdTk0RkEKXHU1NzIzClx1NjA1MApcdTYwNzAKXHU5MEQxClx1OERBMwpcdTYyQUMKXHU4MzUyClx1ODE3RQpcdThEMzQKXHU2N0Q0Clx1NkVGNApcdTczMUIKXHU5NjE0Clx1OEY4NgpcdTU5QkIKXHU1ODZCClx1NjRBNApcdTUwQTgKXHU3QjdFClx1OTVGOQpcdTYyNzAKXHU3RDJCClx1NzgwMgpcdTkwMTIKXHU2MjBGClx1NTQwQQpcdTk2NzYKXHU0RjEwClx1NTU4MgpcdTc1OTcKXHU3NEY2Clx1NUE0NgpcdTYyOUEKXHU4MUMyClx1NjQ3OApcdTVGQ0QKXHU4NjdFClx1ODcyMQpcdTkwQkIKXHU4MEY4Clx1NURFOQpcdTYzMjQKXHU1MDc2Clx1NUYwMwpcdTY5RkQKXHU1MkIyClx1NEU3MwpcdTkwOTMKXHU1NDA5Clx1NEVDMQpcdTcwQzIKXHU3ODE2Clx1NzlERgpcdTRFNEMKXHU4MjMwClx1NEYzNApcdTc0REMKXHU2RDQ1Clx1NEUxOQpcdTY2ODIKXHU3MUU1Clx1NkE2MQpcdTY3RjMKXHU4RkY3Clx1NjY5NgpcdTcyNEMKXHU3OUU3Clx1ODBDNgpcdThCRTYKXHU3QzI3Clx1OEUwRgpcdTc0RjcKXHU4QzMxClx1NTQ0NgpcdTVCQkUKXHU3Q0NBClx1NkQxQgpcdThGODkKXHU2MTI0Clx1N0FERQpcdTk2OTkKXHU2MDEyClx1N0M5OApcdTRFNDMKXHU3RUVBClx1ODBBOQpcdTdDNEQKXHU2NTRGClx1NkQ4MgpcdTcxOTkKXHU3Njg2Clx1NEZBNgpcdTYwQUMKXHU2Mzk4Clx1NEVBQgpcdTdFQTAKXHU5MTkyClx1NzJDMgpcdTk1MDEKXHU2REMwClx1NjA2OApcdTcyNzIKXHU5NzM4Clx1NzIyQwpcdThENEYKXHU5MDA2Clx1NzNBOQpcdTk2NzUKXHU3OTVEClx1NzlEMgpcdTZENTkKXHU4QzhDClx1NUY3OQpcdTVGN0MKXHU2MDg5Clx1OUUyRApcdThEOEIKXHU1MUU0Clx1NjY2OApcdTc1NUMKXHU4Rjg4Clx1NzlFOQpcdTUzNzUKXHU3RjcyClx1NjhBRgpcdTcwOEUKXHU2RUU5Clx1NjhDQgpcdTlBNzEKXHU3QjVCClx1NUNFMQpcdTUxOTIKXHU1NTY1Clx1NUJGRgpcdThCRDEKXHU2RDc4Clx1NkNDOQpcdTVFM0QKXHU4RkRGClx1Nzg0NQpcdTc1ODYKXHU4RDM3Clx1NkYwRgpcdTdBM0YKXHU1MUEwClx1NUFFOQpcdTgwQzEKXHU4MkFGClx1NzI2MgpcdTUzREIKXHU4NjgwClx1NTk2NQpcdTlFMjMKXHU1Q0FEClx1N0Y4QQpcdTUxRUQKXHU0RTMyClx1NTg1OApcdTdFRDgKXHU5MTc1Clx1ODc4RApcdTc2QzYKXHU5NTIxClx1NUU5OQpcdTdCNzkKXHU1MUJCClx1OEY4NQpcdTY0NDQKXHU4OEFEClx1N0I0QgpcdTYyRDIKXHU1MERBClx1NjVGMQpcdTk0QkUKXHU5RTFGClx1NkYwNgpcdTZDODgKXHU3NzA5Clx1NzU4RgpcdTZERkIKXHU2OEQyClx1N0E1NwpcdTc4NUQKXHU5N0U5Clx1OTAzQwpcdTYyNkQKXHU0RkE4Clx1NTFDOQpcdTYzM0EKXHU3ODk3Clx1NjgzRApcdTcwOTIKXHU2NzZGClx1NjBBMwpcdTk5OEYKXHU1MjlEClx1OEM2QQpcdThGQkQKXHU1MkMzClx1OUUzRgpcdTY1RTYKXHU1NDBGClx1NjJEQwpcdTcyRDcKXHU1N0NCClx1OEY4QQpcdTYzQTkKXHU5OTZFClx1NjQyQwpcdTlBODIKXHU4RjlFClx1NTJGRQpcdTYyNjMKXHU0RjMwClx1ODQ4QgpcdTdFRDIKXHU5NkZFClx1NEUwOApcdTY3MzUKXHU1OUM2Clx1NjJERgpcdTVCODcKXHU4RjkxClx1OTY1NQpcdTk2RDUKXHU1MDdGClx1ODRDNApcdTVEMDcKXHU1MjZBClx1NTAyMQpcdTUzODUKXHU1NEFDClx1OUE3NgpcdTg1QUYKXHU1MjM3Clx1NjVBNQpcdTc1NkEKXHU4RDRCClx1NTk0OQpcdTRGNUIKXHU2RDQ3Clx1NkYyQgpcdTY2RkMKXHU2MjQ3Clx1OTQ5OQpcdTY4NDMKXHU2Mjc2Clx1NEVENApcdThGRDQKXHU0RkQ3Clx1NEU4RgpcdTgxNTQKXHU5NzhCClx1NjhGMQpcdTg5ODYKXHU2ODQ2Clx1NjA4NApcdTUzRDQKXHU2NDlFClx1OUE5NwpcdTUyRDgKXHU2NUZBClx1NkNCOApcdTVCNjQKXHU1NDEwClx1NUI1RgpcdTZFMjAKXHU1QzQ4Clx1NzVCRQpcdTU5OTkKXHU2MERDClx1NEVGMApcdTcyRTAKXHU4MEMwClx1OEMxMApcdTYyOUIKXHU5NzA5Clx1Njg1MQpcdTVDOTcKXHU1NjFCClx1ODg3MApcdTc2RDcKXHU2RTE3Clx1ODEwRgpcdThENTYKXHU2RDhDClx1NzUxQwpcdTY2RjkKXHU5NjA1Clx1ODA4QwpcdTU0RTkKXHU1Mzg5Clx1NzBDMwpcdTdFQUMKXHU2QkM1Clx1NjYyOApcdTRGMkEKXHU3NUM3Clx1NzE2RQpcdTUzRjkKXHU5NDg5Clx1NjQyRApcdTgzMEUKXHU3QjNDClx1OTE3NwpcdTUwNzcKXHU1RjEzClx1OTUyNQpcdTYwNTIKXHU2NzcwClx1NTc1MQpcdTlGM0IKXHU3RkZDClx1N0VCNgpcdTUzRDkKXHU3MkYxClx1OTAyRQpcdTdGNTAKXHU3RURDClx1NjhEQQpcdTYyOTEKXHU4MUE4Clx1ODUyQwpcdTVCRkEKXHU5QUE0Clx1N0E0NgpcdTUxQjYKXHU2N0FGClx1NTE4QwpcdTVDMzgKXHU1MUY4Clx1N0VDNQpcdTU3NkYKXHU3MjdBClx1NzEzMApcdThGNzAKXHU2QjIzClx1NjY0QgpcdTc2MjYKXHU1RkExClx1OTUyRApcdTk1MjYKXHU0RTI3Clx1NjVFQwpcdTk1M0IKXHU1Nzg0Clx1NjQxQwpcdTYyNTEKXHU5MDgwClx1NEVBRApcdTkxNkYKXHU4RkM4Clx1ODIxMgpcdTgxMDYKXHU5MTc2Clx1OTVGMgpcdTVGRTcKXHU5MTVBClx1OTg3RApcdTdGQkQKXHU2REE4Clx1NTM3OApcdTRFRDcKXHU5NjZBClx1OEY5RgpcdTYwRTkKXHU2NzZEClx1NTlEQQpcdTgwOUEKXHU2MzQ5Clx1OThEOApcdTZGMDIKXHU2NjA2Clx1NkIzQQpcdTU0M0UKXHU5MENFClx1NzBGNwpcdTZDNDEKXHU1NDc1Clx1OTk3MApcdTg0MjcKXHU5NkM1Clx1OTBBRQpcdThGQzEKXHU3MUQ1Clx1NjQ5MgpcdTU5RkIKXHU4RDc0Clx1NUJCNApcdTcwRTYKXHU1MDNBClx1NUUxMApcdTY1OTEKXHU5NEMzClx1NjVFOApcdTkxODcKXHU4NDYzClx1OTk3QwpcdTk2Q0YKXHU1OUZGClx1NjJDQwpcdTUwODUKXHU4MTc5Clx1NTlBNQpcdTYzQzkKXHU4RDI0Clx1NjJDNgpcdTZCNkEKXHU4NDYxClx1ODBGQQpcdTRFMjIKXHU2RDY5Clx1NUZCRApcdTY2MDIKXHU1N0FCClx1NjMyMQpcdTg5QzgKXHU4RDJBClx1NjE3MApcdTdGMzQKXHU2QzZBClx1NjE0QwpcdTUxQUYKXHU4QkZBClx1NTlEQwpcdThDMEEKXHU1MUY2Clx1NTJBMwpcdThCRUMKXHU4MDAwClx1NjYwRgpcdThFQkEKXHU3NkM4Clx1OUE5MQpcdTRFNTQKXHU2RUFBClx1NEUxQgpcdTUzNjIKXHU2MkI5Clx1OTVGNwpcdTU0QTgKXHU1MjJFClx1OUE3RQpcdTdGMDYKXHU2MDlGClx1NjQ1OApcdTk0RDIKXHU2M0I3Clx1OTg4NwpcdTVFN0IKXHU2N0M0Clx1NjBFMApcdTYwRTgKXHU0RjczClx1NEVDNwpcdTgxNEEKXHU3QTlEClx1NkRBNApcdTUyNTEKXHU3N0E3Clx1NTgyMQpcdTZDRkMKXHU4NDcxClx1N0Y2OQpcdTk3MEQKXHU2MzVFClx1ODBDRQpcdTgyQ0QKXHU2RUU4Clx1NEZFOQpcdTYzNDUKXHU2RTU4Clx1NzgwRApcdTk3MUUKXHU5MEI1Clx1ODQwNApcdTc1QUYKXHU2REVFClx1OTA0MgpcdTcxOEEKXHU3Q0FBClx1NzBEOApcdTVCQkYKXHU2ODYzClx1NjIwOApcdTlBNzMKXHU1QUMyClx1ODhENQpcdTVGOTkKXHU3QkFEClx1NjM1MApcdTgwQTAKXHU2NDkxClx1NjY1MgpcdThGQTgKXHU2QkJGClx1ODNCMgpcdTY0NEEKXHU2NDA1Clx1OTE3MQpcdTVDNEYKXHU3NUFCClx1NTRDMApcdTg1MjEKXHU1ODM1Clx1NkNBQgpcdTc2QjEKXHU3NTQ1Clx1NTNFMApcdTk2MDEKXHU4M0IxClx1NjU3MgpcdThGOTYKXHU5NEE5Clx1NzVENQpcdTU3NUQKXHU1REY3Clx1OTk3RgpcdTc5NzgKXHU0RTE4Clx1NzM4NApcdTZFOUMKXHU2NkYwClx1OTAzQgpcdTVGNkQKXHU1QzFEClx1NTM3RgpcdTU5QTgKXHU4MjQ3Clx1NTQxRQpcdTk3RTYKXHU2MDI4Clx1NzdFRQpcdTZCNDdgLnNwbGl0KCJcbiIpOwoKICAvLyBub2RlX21vZHVsZXMvQHNjdXJlL2JpcDM5L2VzbS93b3JkbGlzdHMvc3BhbmlzaC5qcwogIHZhciB3b3JkbGlzdDggPSBgYVx1MDMwMWJhY28KYWJkb21lbgphYmVqYQphYmllcnRvCmFib2dhZG8KYWJvbm8KYWJvcnRvCmFicmF6bwphYnJpcgphYnVlbG8KYWJ1c28KYWNhYmFyCmFjYWRlbWlhCmFjY2VzbwphY2Npb1x1MDMwMW4KYWNlaXRlCmFjZWxnYQphY2VudG8KYWNlcHRhcgphXHUwMzAxY2lkbwphY2xhcmFyCmFjbmVcdTAzMDEKYWNvZ2VyCmFjb3NvCmFjdGl2bwphY3RvCmFjdHJpegphY3R1YXIKYWN1ZGlyCmFjdWVyZG8KYWN1c2FyCmFkaWN0bwphZG1pdGlyCmFkb3B0YXIKYWRvcm5vCmFkdWFuYQphZHVsdG8KYWVcdTAzMDFyZW8KYWZlY3RhcgphZmljaW9cdTAzMDFuCmFmaW5hcgphZmlybWFyCmFcdTAzMDFnaWwKYWdpdGFyCmFnb25pXHUwMzAxYQphZ29zdG8KYWdvdGFyCmFncmVnYXIKYWdyaW8KYWd1YQphZ3VkbwphXHUwMzAxZ3VpbGEKYWd1amEKYWhvZ28KYWhvcnJvCmFpcmUKYWlzbGFyCmFqZWRyZXoKYWplbm8KYWp1c3RlCmFsYWNyYVx1MDMwMW4KYWxhbWJyZQphbGFybWEKYWxiYQphXHUwMzAxbGJ1bQphbGNhbGRlCmFsZGVhCmFsZWdyZQphbGVqYXIKYWxlcnRhCmFsZXRhCmFsZmlsZXIKYWxnYQphbGdvZG9cdTAzMDFuCmFsaWFkbwphbGllbnRvCmFsaXZpbwphbG1hCmFsbWVqYQphbG1pXHUwMzAxYmFyCmFsdGFyCmFsdGV6YQphbHRpdm8KYWx0bwphbHR1cmEKYWx1bW5vCmFsemFyCmFtYWJsZQphbWFudGUKYW1hcG9sYQphbWFyZ28KYW1hc2FyCmFcdTAzMDFtYmFyCmFcdTAzMDFtYml0bwphbWVubwphbWlnbwphbWlzdGFkCmFtb3IKYW1wYXJvCmFtcGxpbwphbmNobwphbmNpYW5vCmFuY2xhCmFuZGFyCmFuZGVcdTAzMDFuCmFuZW1pYQphXHUwMzAxbmd1bG8KYW5pbGxvCmFcdTAzMDFuaW1vCmFuaVx1MDMwMXMKYW5vdGFyCmFudGVuYQphbnRpZ3VvCmFudG9qbwphbnVhbAphbnVsYXIKYW51bmNpbwphblx1MDMwM2FkaXIKYW5cdTAzMDNlam8KYW5cdTAzMDNvCmFwYWdhcgphcGFyYXRvCmFwZXRpdG8KYXBpbwphcGxpY2FyCmFwb2RvCmFwb3J0ZQphcG95bwphcHJlbmRlcgphcHJvYmFyCmFwdWVzdGEKYXB1cm8KYXJhZG8KYXJhblx1MDMwM2EKYXJhcgphXHUwMzAxcmJpdHJvCmFcdTAzMDFyYm9sCmFyYnVzdG8KYXJjaGl2bwphcmNvCmFyZGVyCmFyZGlsbGEKYXJkdW8KYVx1MDMwMXJlYQphXHUwMzAxcmlkbwphcmllcwphcm1vbmlcdTAzMDFhCmFybmVcdTAzMDFzCmFyb21hCmFycGEKYXJwb1x1MDMwMW4KYXJyZWdsbwphcnJvegphcnJ1Z2EKYXJ0ZQphcnRpc3RhCmFzYQphc2Fkbwphc2FsdG8KYXNjZW5zbwphc2VndXJhcgphc2VvCmFzZXNvcgphc2llbnRvCmFzaWxvCmFzaXN0aXIKYXNubwphc29tYnJvCmFcdTAzMDFzcGVybwphc3RpbGxhCmFzdHJvCmFzdHV0bwphc3VtaXIKYXN1bnRvCmF0YWpvCmF0YXF1ZQphdGFyCmF0ZW50bwphdGVvCmFcdTAzMDF0aWNvCmF0bGV0YQphXHUwMzAxdG9tbwphdHJhZXIKYXRyb3oKYXR1XHUwMzAxbgphdWRhegphdWRpbwphdWdlCmF1bGEKYXVtZW50bwphdXNlbnRlCmF1dG9yCmF2YWwKYXZhbmNlCmF2YXJvCmF2ZQphdmVsbGFuYQphdmVuYQphdmVzdHJ1egphdmlvXHUwMzAxbgphdmlzbwpheWVyCmF5dWRhCmF5dW5vCmF6YWZyYVx1MDMwMW4KYXphcgphem90ZQphenVcdTAzMDFjYXIKYXp1ZnJlCmF6dWwKYmFiYQpiYWJvcgpiYWNoZQpiYWhpXHUwMzAxYQpiYWlsZQpiYWphcgpiYWxhbnphCmJhbGNvXHUwMzAxbgpiYWxkZQpiYW1idVx1MDMwMQpiYW5jbwpiYW5kYQpiYW5cdTAzMDNvCmJhcmJhCmJhcmNvCmJhcm5pegpiYXJybwpiYVx1MDMwMXNjdWxhCmJhc3RvXHUwMzAxbgpiYXN1cmEKYmF0YWxsYQpiYXRlcmlcdTAzMDFhCmJhdGlyCmJhdHV0YQpiYXVcdTAzMDFsCmJhemFyCmJlYmVcdTAzMDEKYmViaWRhCmJlbGxvCmJlc2FyCmJlc28KYmVzdGlhCmJpY2hvCmJpZW4KYmluZ28KYmxhbmNvCmJsb3F1ZQpibHVzYQpib2EKYm9iaW5hCmJvYm8KYm9jYQpib2NpbmEKYm9kYQpib2RlZ2EKYm9pbmEKYm9sYQpib2xlcm8KYm9sc2EKYm9tYmEKYm9uZGFkCmJvbml0bwpib25vCmJvbnNhXHUwMzAxaQpib3JkZQpib3JyYXIKYm9zcXVlCmJvdGUKYm90aVx1MDMwMW4KYm9cdTAzMDF2ZWRhCmJvemFsCmJyYXZvCmJyYXpvCmJyZWNoYQpicmV2ZQpicmlsbG8KYnJpbmNvCmJyaXNhCmJyb2NhCmJyb21hCmJyb25jZQpicm90ZQpicnVqYQpicnVzY28KYnJ1dG8KYnVjZW8KYnVjbGUKYnVlbm8KYnVleQpidWZhbmRhCmJ1Zm9cdTAzMDFuCmJ1XHUwMzAxaG8KYnVpdHJlCmJ1bHRvCmJ1cmJ1amEKYnVybGEKYnVycm8KYnVzY2FyCmJ1dGFjYQpidXpvXHUwMzAxbgpjYWJhbGxvCmNhYmV6YQpjYWJpbmEKY2FicmEKY2FjYW8KY2FkYVx1MDMwMXZlcgpjYWRlbmEKY2FlcgpjYWZlXHUwMzAxCmNhaVx1MDMwMWRhCmNhaW1hXHUwMzAxbgpjYWphCmNham9cdTAzMDFuCmNhbApjYWxhbWFyCmNhbGNpbwpjYWxkbwpjYWxpZGFkCmNhbGxlCmNhbG1hCmNhbG9yCmNhbHZvCmNhbWEKY2FtYmlvCmNhbWVsbG8KY2FtaW5vCmNhbXBvCmNhXHUwMzAxbmNlcgpjYW5kaWwKY2FuZWxhCmNhbmd1cm8KY2FuaWNhCmNhbnRvCmNhblx1MDMwM2EKY2FuXHUwMzAzb1x1MDMwMW4KY2FvYmEKY2FvcwpjYXBhegpjYXBpdGFcdTAzMDFuCmNhcG90ZQpjYXB0YXIKY2FwdWNoYQpjYXJhCmNhcmJvXHUwMzAxbgpjYVx1MDMwMXJjZWwKY2FyZXRhCmNhcmdhCmNhcmluXHUwMzAzbwpjYXJuZQpjYXJwZXRhCmNhcnJvCmNhcnRhCmNhc2EKY2FzY28KY2FzZXJvCmNhc3BhCmNhc3RvcgpjYXRvcmNlCmNhdHJlCmNhdWRhbApjYXVzYQpjYXpvCmNlYm9sbGEKY2VkZXIKY2Vkcm8KY2VsZGEKY2VcdTAzMDFsZWJyZQpjZWxvc28KY2VcdTAzMDFsdWxhCmNlbWVudG8KY2VuaXphCmNlbnRybwpjZXJjYQpjZXJkbwpjZXJlemEKY2VybwpjZXJyYXIKY2VydGV6YQpjZVx1MDMwMXNwZWQKY2V0cm8KY2hhY2FsCmNoYWxlY28KY2hhbXB1XHUwMzAxCmNoYW5jbGEKY2hhcGEKY2hhcmxhCmNoaWNvCmNoaXN0ZQpjaGl2bwpjaG9xdWUKY2hvemEKY2h1bGV0YQpjaHVwYXIKY2ljbG9cdTAzMDFuCmNpZWdvCmNpZWxvCmNpZW4KY2llcnRvCmNpZnJhCmNpZ2Fycm8KY2ltYQpjaW5jbwpjaW5lCmNpbnRhCmNpcHJlXHUwMzAxcwpjaXJjbwpjaXJ1ZWxhCmNpc25lCmNpdGEKY2l1ZGFkCmNsYW1vcgpjbGFuCmNsYXJvCmNsYXNlCmNsYXZlCmNsaWVudGUKY2xpbWEKY2xpXHUwMzAxbmljYQpjb2JyZQpjb2NjaW9cdTAzMDFuCmNvY2hpbm8KY29jaW5hCmNvY28KY29cdTAzMDFkaWdvCmNvZG8KY29mcmUKY29nZXIKY29oZXRlCmNvamlcdTAzMDFuCmNvam8KY29sYQpjb2xjaGEKY29sZWdpbwpjb2xnYXIKY29saW5hCmNvbGxhcgpjb2xtbwpjb2x1bW5hCmNvbWJhdGUKY29tZXIKY29taWRhCmNvXHUwMzAxbW9kbwpjb21wcmEKY29uZGUKY29uZWpvCmNvbmdhCmNvbm9jZXIKY29uc2Vqbwpjb250YXIKY29wYQpjb3BpYQpjb3Jhem9cdTAzMDFuCmNvcmJhdGEKY29yY2hvCmNvcmRvXHUwMzAxbgpjb3JvbmEKY29ycmVyCmNvc2VyCmNvc21vcwpjb3N0YQpjcmFcdTAzMDFuZW8KY3JhXHUwMzAxdGVyCmNyZWFyCmNyZWNlcgpjcmVpXHUwMzAxZG8KY3JlbWEKY3JpXHUwMzAxYQpjcmltZW4KY3JpcHRhCmNyaXNpcwpjcm9tbwpjcm9cdTAzMDFuaWNhCmNyb3F1ZXRhCmNydWRvCmNydXoKY3VhZHJvCmN1YXJ0bwpjdWF0cm8KY3VibwpjdWJyaXIKY3VjaGFyYQpjdWVsbG8KY3VlbnRvCmN1ZXJkYQpjdWVzdGEKY3VldmEKY3VpZGFyCmN1bGVicmEKY3VscGEKY3VsdG8KY3VtYnJlCmN1bXBsaXIKY3VuYQpjdW5ldGEKY3VvdGEKY3Vwb1x1MDMwMW4KY3VcdTAzMDFwdWxhCmN1cmFyCmN1cmlvc28KY3Vyc28KY3VydmEKY3V0aXMKZGFtYQpkYW56YQpkYXIKZGFyZG8KZGFcdTAzMDF0aWwKZGViZXIKZGVcdTAzMDFiaWwKZGVcdTAzMDFjYWRhCmRlY2lyCmRlZG8KZGVmZW5zYQpkZWZpbmlyCmRlamFyCmRlbGZpXHUwMzAxbgpkZWxnYWRvCmRlbGl0bwpkZW1vcmEKZGVuc28KZGVudGFsCmRlcG9ydGUKZGVyZWNobwpkZXJyb3RhCmRlc2F5dW5vCmRlc2VvCmRlc2ZpbGUKZGVzbnVkbwpkZXN0aW5vCmRlc3ZpXHUwMzAxbwpkZXRhbGxlCmRldGVuZXIKZGV1ZGEKZGlcdTAzMDFhCmRpYWJsbwpkaWFkZW1hCmRpYW1hbnRlCmRpYW5hCmRpYXJpbwpkaWJ1am8KZGljdGFyCmRpZW50ZQpkaWV0YQpkaWV6CmRpZmlcdTAzMDFjaWwKZGlnbm8KZGlsZW1hCmRpbHVpcgpkaW5lcm8KZGlyZWN0bwpkaXJpZ2lyCmRpc2NvCmRpc2VuXHUwMzAzbwpkaXNmcmF6CmRpdmEKZGl2aW5vCmRvYmxlCmRvY2UKZG9sb3IKZG9taW5nbwpkb24KZG9uYXIKZG9yYWRvCmRvcm1pcgpkb3Jzbwpkb3MKZG9zaXMKZHJhZ29cdTAzMDFuCmRyb2dhCmR1Y2hhCmR1ZGEKZHVlbG8KZHVlblx1MDMwM28KZHVsY2UKZHVcdTAzMDFvCmR1cXVlCmR1cmFyCmR1cmV6YQpkdXJvCmVcdTAzMDFiYW5vCmVicmlvCmVjaGFyCmVjbwplY3VhZG9yCmVkYWQKZWRpY2lvXHUwMzAxbgplZGlmaWNpbwplZGl0b3IKZWR1Y2FyCmVmZWN0bwplZmljYXoKZWplCmVqZW1wbG8KZWxlZmFudGUKZWxlZ2lyCmVsZW1lbnRvCmVsZXZhcgplbGlwc2UKZVx1MDMwMWxpdGUKZWxpeGlyCmVsb2dpbwplbHVkaXIKZW1idWRvCmVtaXRpcgplbW9jaW9cdTAzMDFuCmVtcGF0ZQplbXBlblx1MDMwM28KZW1wbGVvCmVtcHJlc2EKZW5hbm8KZW5jYXJnbwplbmNodWZlCmVuY2lcdTAzMDFhCmVuZW1pZ28KZW5lcm8KZW5mYWRvCmVuZmVybW8KZW5nYW5cdTAzMDNvCmVuaWdtYQplbmxhY2UKZW5vcm1lCmVucmVkbwplbnNheW8KZW5zZW5cdTAzMDNhcgplbnRlcm8KZW50cmFyCmVudmFzZQplbnZpXHUwMzAxbwplXHUwMzAxcG9jYQplcXVpcG8KZXJpem8KZXNjYWxhCmVzY2VuYQplc2NvbGFyCmVzY3JpYmlyCmVzY3Vkbwplc2VuY2lhCmVzZmVyYQplc2Z1ZXJ6bwplc3BhZGEKZXNwZWpvCmVzcGlcdTAzMDFhCmVzcG9zYQplc3B1bWEKZXNxdWlcdTAzMDEKZXN0YXIKZXN0ZQplc3RpbG8KZXN0dWZhCmV0YXBhCmV0ZXJubwplXHUwMzAxdGljYQpldG5pYQpldmFkaXIKZXZhbHVhcgpldmVudG8KZXZpdGFyCmV4YWN0bwpleGFtZW4KZXhjZXNvCmV4Y3VzYQpleGVudG8KZXhpZ2lyCmV4aWxpbwpleGlzdGlyCmVcdTAzMDF4aXRvCmV4cGVydG8KZXhwbGljYXIKZXhwb25lcgpleHRyZW1vCmZhXHUwMzAxYnJpY2EKZmFcdTAzMDFidWxhCmZhY2hhZGEKZmFcdTAzMDFjaWwKZmFjdG9yCmZhZW5hCmZhamEKZmFsZGEKZmFsbG8KZmFsc28KZmFsdGFyCmZhbWEKZmFtaWxpYQpmYW1vc28KZmFyYW9cdTAzMDFuCmZhcm1hY2lhCmZhcm9sCmZhcnNhCmZhc2UKZmF0aWdhCmZhdW5hCmZhdm9yCmZheApmZWJyZXJvCmZlY2hhCmZlbGl6CmZlbwpmZXJpYQpmZXJvegpmZVx1MDMwMXJ0aWwKZmVydm9yCmZlc3RpXHUwMzAxbgpmaWFibGUKZmlhbnphCmZpYXIKZmlicmEKZmljY2lvXHUwMzAxbgpmaWNoYQpmaWRlbwpmaWVicmUKZmllbApmaWVyYQpmaWVzdGEKZmlndXJhCmZpamFyCmZpam8KZmlsYQpmaWxldGUKZmlsaWFsCmZpbHRybwpmaW4KZmluY2EKZmluZ2lyCmZpbml0bwpmaXJtYQpmbGFjbwpmbGF1dGEKZmxlY2hhCmZsb3IKZmxvdGEKZmx1aXIKZmx1am8KZmx1XHUwMzAxb3IKZm9iaWEKZm9jYQpmb2dhdGEKZm9nb1x1MDMwMW4KZm9saW8KZm9sbGV0bwpmb25kbwpmb3JtYQpmb3Jybwpmb3J0dW5hCmZvcnphcgpmb3NhCmZvdG8KZnJhY2FzbwpmcmFcdTAzMDFnaWwKZnJhbmphCmZyYXNlCmZyYXVkZQpmcmVpXHUwMzAxcgpmcmVubwpmcmVzYQpmcmlcdTAzMDFvCmZyaXRvCmZydXRhCmZ1ZWdvCmZ1ZW50ZQpmdWVyemEKZnVnYQpmdW1hcgpmdW5jaW9cdTAzMDFuCmZ1bmRhCmZ1cmdvXHUwMzAxbgpmdXJpYQpmdXNpbApmdVx1MDMwMXRib2wKZnV0dXJvCmdhY2VsYQpnYWZhcwpnYWl0YQpnYWpvCmdhbGEKZ2FsZXJpXHUwMzAxYQpnYWxsbwpnYW1iYQpnYW5hcgpnYW5jaG8KZ2FuZ2EKZ2Fuc28KZ2FyYWplCmdhcnphCmdhc29saW5hCmdhc3RhcgpnYXRvCmdhdmlsYVx1MDMwMW4KZ2VtZWxvCmdlbWlyCmdlbgpnZVx1MDMwMW5lcm8KZ2VuaW8KZ2VudGUKZ2VyYW5pbwpnZXJlbnRlCmdlcm1lbgpnZXN0bwpnaWdhbnRlCmdpbW5hc2lvCmdpcmFyCmdpcm8KZ2xhY2lhcgpnbG9ibwpnbG9yaWEKZ29sCmdvbGZvCmdvbG9zbwpnb2xwZQpnb21hCmdvcmRvCmdvcmlsYQpnb3JyYQpnb3RhCmdvdGVvCmdvemFyCmdyYWRhCmdyYVx1MDMwMWZpY28KZ3Jhbm8KZ3Jhc2EKZ3JhdGlzCmdyYXZlCmdyaWV0YQpncmlsbG8KZ3JpcGUKZ3Jpcwpncml0bwpncm9zb3IKZ3J1XHUwMzAxYQpncnVlc28KZ3J1bW8KZ3J1cG8KZ3VhbnRlCmd1YXBvCmd1YXJkaWEKZ3VlcnJhCmd1aVx1MDMwMWEKZ3Vpblx1MDMwM28KZ3Vpb24KZ3Vpc28KZ3VpdGFycmEKZ3VzYW5vCmd1c3RhcgpoYWJlcgpoYVx1MDMwMWJpbApoYWJsYXIKaGFjZXIKaGFjaGEKaGFkYQpoYWxsYXIKaGFtYWNhCmhhcmluYQpoYXoKaGF6YW5cdTAzMDNhCmhlYmlsbGEKaGVicmEKaGVjaG8KaGVsYWRvCmhlbGlvCmhlbWJyYQpoZXJpcgpoZXJtYW5vCmhlXHUwMzAxcm9lCmhlcnZpcgpoaWVsbwpoaWVycm8KaGlcdTAzMDFnYWRvCmhpZ2llbmUKaGlqbwpoaW1ubwpoaXN0b3JpYQpob2NpY28KaG9nYXIKaG9ndWVyYQpob2phCmhvbWJyZQpob25nbwpob25vcgpob25yYQpob3JhCmhvcm1pZ2EKaG9ybm8KaG9zdGlsCmhveW8KaHVlY28KaHVlbGdhCmh1ZXJ0YQpodWVzbwpodWV2bwpodWlkYQpodWlyCmh1bWFubwpodVx1MDMwMW1lZG8KaHVtaWxkZQpodW1vCmh1bmRpcgpodXJhY2FcdTAzMDFuCmh1cnRvCmljb25vCmlkZWFsCmlkaW9tYQppXHUwMzAxZG9sbwppZ2xlc2lhCmlnbHVcdTAzMDEKaWd1YWwKaWxlZ2FsCmlsdXNpb1x1MDMwMW4KaW1hZ2VuCmltYVx1MDMwMW4KaW1pdGFyCmltcGFyCmltcGVyaW8KaW1wb25lcgppbXB1bHNvCmluY2FwYXoKaVx1MDMwMW5kaWNlCmluZXJ0ZQppbmZpZWwKaW5mb3JtZQppbmdlbmlvCmluaWNpbwppbm1lbnNvCmlubXVuZQppbm5hdG8KaW5zZWN0bwppbnN0YW50ZQppbnRlcmVcdTAzMDFzCmlcdTAzMDFudGltbwppbnR1aXIKaW51XHUwMzAxdGlsCmludmllcm5vCmlyYQppcmlzCmlyb25pXHUwMzAxYQppc2xhCmlzbG90ZQpqYWJhbGlcdTAzMDEKamFib1x1MDMwMW4KamFtb1x1MDMwMW4KamFyYWJlCmphcmRpXHUwMzAxbgpqYXJyYQpqYXVsYQpqYXptaVx1MDMwMW4KamVmZQpqZXJpbmdhCmppbmV0ZQpqb3JuYWRhCmpvcm9iYQpqb3Zlbgpqb3lhCmp1ZXJnYQpqdWV2ZXMKanVlegpqdWdhZG9yCmp1Z28KanVndWV0ZQpqdWljaW8KanVuY28KanVuZ2xhCmp1bmlvCmp1bnRhcgpqdVx1MDMwMXBpdGVyCmp1cmFyCmp1c3RvCmp1dmVuaWwKanV6Z2FyCmtpbG8Ka29hbGEKbGFiaW8KbGFjaW8KbGFjcmEKbGFkbwpsYWRyb1x1MDMwMW4KbGFnYXJ0bwpsYVx1MDMwMWdyaW1hCmxhZ3VuYQpsYWljbwpsYW1lcgpsYVx1MDMwMW1pbmEKbGFcdTAzMDFtcGFyYQpsYW5hCmxhbmNoYQpsYW5nb3N0YQpsYW56YQpsYVx1MDMwMXBpegpsYXJnbwpsYXJ2YQpsYVx1MDMwMXN0aW1hCmxhdGEKbGFcdTAzMDF0ZXgKbGF0aXIKbGF1cmVsCmxhdmFyCmxhem8KbGVhbApsZWNjaW9cdTAzMDFuCmxlY2hlCmxlY3RvcgpsZWVyCmxlZ2lvXHUwMzAxbgpsZWd1bWJyZQpsZWphbm8KbGVuZ3VhCmxlbnRvCmxlblx1MDMwM2EKbGVvXHUwMzAxbgpsZW9wYXJkbwpsZXNpb1x1MDMwMW4KbGV0YWwKbGV0cmEKbGV2ZQpsZXllbmRhCmxpYmVydGFkCmxpYnJvCmxpY29yCmxpXHUwMzAxZGVyCmxpZGlhcgpsaWVuem8KbGlnYQpsaWdlcm8KbGltYQpsaVx1MDMwMW1pdGUKbGltb1x1MDMwMW4KbGltcGlvCmxpbmNlCmxpbmRvCmxpXHUwMzAxbmVhCmxpbmdvdGUKbGlubwpsaW50ZXJuYQpsaVx1MDMwMXF1aWRvCmxpc28KbGlzdGEKbGl0ZXJhCmxpdGlvCmxpdHJvCmxsYWdhCmxsYW1hCmxsYW50bwpsbGF2ZQpsbGVnYXIKbGxlbmFyCmxsZXZhcgpsbG9yYXIKbGxvdmVyCmxsdXZpYQpsb2JvCmxvY2lvXHUwMzAxbgpsb2NvCmxvY3VyYQpsb1x1MDMwMWdpY2EKbG9ncm8KbG9tYnJpegpsb21vCmxvbmphCmxvdGUKbHVjaGEKbHVjaXIKbHVnYXIKbHVqbwpsdW5hCmx1bmVzCmx1cGEKbHVzdHJvCmx1dG8KbHV6Cm1hY2V0YQptYWNobwptYWRlcmEKbWFkcmUKbWFkdXJvCm1hZXN0cm8KbWFmaWEKbWFnaWEKbWFnbwptYWlcdTAzMDF6Cm1hbGRhZAptYWxldGEKbWFsbGEKbWFsbwptYW1hXHUwMzAxCm1hbWJvCm1hbXV0Cm1hbmNvCm1hbmRvCm1hbmVqYXIKbWFuZ2EKbWFuaXF1aVx1MDMwMQptYW5qYXIKbWFubwptYW5zbwptYW50YQptYW5cdTAzMDNhbmEKbWFwYQptYVx1MDMwMXF1aW5hCm1hcgptYXJjbwptYXJlYQptYXJmaWwKbWFyZ2VuCm1hcmlkbwptYVx1MDMwMXJtb2wKbWFycm9cdTAzMDFuCm1hcnRlcwptYXJ6bwptYXNhCm1hXHUwMzAxc2NhcmEKbWFzaXZvCm1hdGFyCm1hdGVyaWEKbWF0aXoKbWF0cml6Cm1hXHUwMzAxeGltbwptYXlvcgptYXpvcmNhCm1lY2hhCm1lZGFsbGEKbWVkaW8KbWVcdTAzMDFkdWxhCm1lamlsbGEKbWVqb3IKbWVsZW5hCm1lbG9cdTAzMDFuCm1lbW9yaWEKbWVub3IKbWVuc2FqZQptZW50ZQptZW51XHUwMzAxCm1lcmNhZG8KbWVyZW5ndWUKbWVcdTAzMDFyaXRvCm1lcwptZXNvXHUwMzAxbgptZXRhCm1ldGVyCm1lXHUwMzAxdG9kbwptZXRybwptZXpjbGEKbWllZG8KbWllbAptaWVtYnJvCm1pZ2EKbWlsCm1pbGFncm8KbWlsaXRhcgptaWxsb1x1MDMwMW4KbWltbwptaW5hCm1pbmVybwptaVx1MDMwMW5pbW8KbWludXRvCm1pb3BlCm1pcmFyCm1pc2EKbWlzZXJpYQptaXNpbAptaXNtbwptaXRhZAptaXRvCm1vY2hpbGEKbW9jaW9cdTAzMDFuCm1vZGEKbW9kZWxvCm1vaG8KbW9qYXIKbW9sZGUKbW9sZXIKbW9saW5vCm1vbWVudG8KbW9taWEKbW9uYXJjYQptb25lZGEKbW9uamEKbW9udG8KbW9uXHUwMzAzbwptb3JhZGEKbW9yZGVyCm1vcmVubwptb3Jpcgptb3Jybwptb3JzYQptb3J0YWwKbW9zY2EKbW9zdHJhcgptb3Rpdm8KbW92ZXIKbW9cdTAzMDF2aWwKbW96bwptdWNobwptdWRhcgptdWVibGUKbXVlbGEKbXVlcnRlCm11ZXN0cmEKbXVncmUKbXVqZXIKbXVsYQptdWxldGEKbXVsdGEKbXVuZG8KbXVuXHUwMzAzZWNhCm11cmFsCm11cm8KbXVcdTAzMDFzY3VsbwptdXNlbwptdXNnbwptdVx1MDMwMXNpY2EKbXVzbG8KbmFcdTAzMDFjYXIKbmFjaW9cdTAzMDFuCm5hZGFyCm5haXBlCm5hcmFuamEKbmFyaXoKbmFycmFyCm5hc2FsCm5hdGFsCm5hdGl2bwpuYXR1cmFsCm5hXHUwMzAxdXNlYQpuYXZhbApuYXZlCm5hdmlkYWQKbmVjaW8KbmVcdTAzMDFjdGFyCm5lZ2FyCm5lZ29jaW8KbmVncm8KbmVvXHUwMzAxbgpuZXJ2aW8KbmV0bwpuZXV0cm8KbmV2YXIKbmV2ZXJhCm5pY2hvCm5pZG8KbmllYmxhCm5pZXRvCm5pblx1MDMwM2V6Cm5pblx1MDMwM28KbmlcdTAzMDF0aWRvCm5pdmVsCm5vYmxlemEKbm9jaGUKbm9cdTAzMDFtaW5hCm5vcmlhCm5vcm1hCm5vcnRlCm5vdGEKbm90aWNpYQpub3ZhdG8Kbm92ZWxhCm5vdmlvCm51YmUKbnVjYQpudVx1MDMwMWNsZW8KbnVkaWxsbwpudWRvCm51ZXJhCm51ZXZlCm51ZXoKbnVsbwpudVx1MDMwMW1lcm8KbnV0cmlhCm9hc2lzCm9iZXNvCm9iaXNwbwpvYmpldG8Kb2JyYQpvYnJlcm8Kb2JzZXJ2YXIKb2J0ZW5lcgpvYnZpbwpvY2EKb2Nhc28Kb2NlXHUwMzAxYW5vCm9jaGVudGEKb2NobwpvY2lvCm9jcmUKb2N0YXZvCm9jdHVicmUKb2N1bHRvCm9jdXBhcgpvY3VycmlyCm9kaWFyCm9kaW8Kb2Rpc2VhCm9lc3RlCm9mZW5zYQpvZmVydGEKb2ZpY2lvCm9mcmVjZXIKb2dybwpvaVx1MDMwMWRvCm9pXHUwMzAxcgpvam8Kb2xhCm9sZWFkYQpvbGZhdG8Kb2xpdm8Kb2xsYQpvbG1vCm9sb3IKb2x2aWRvCm9tYmxpZ28Kb25kYQpvbnphCm9wYWNvCm9wY2lvXHUwMzAxbgpvXHUwMzAxcGVyYQpvcGluYXIKb3BvbmVyCm9wdGFyCm9cdTAzMDFwdGljYQpvcHVlc3RvCm9yYWNpb1x1MDMwMW4Kb3JhZG9yCm9yYWwKb1x1MDMwMXJiaXRhCm9yY2EKb3JkZW4Kb3JlamEKb1x1MDMwMXJnYW5vCm9yZ2lcdTAzMDFhCm9yZ3VsbG8Kb3JpZW50ZQpvcmlnZW4Kb3JpbGxhCm9ybwpvcnF1ZXN0YQpvcnVnYQpvc2FkaVx1MDMwMWEKb3NjdXJvCm9zZXpubwpvc28Kb3N0cmEKb3Rvblx1MDMwM28Kb3RybwpvdmVqYQpvXHUwMzAxdnVsbwpvXHUwMzAxeGlkbwpveGlcdTAzMDFnZW5vCm95ZW50ZQpvem9ubwpwYWN0bwpwYWRyZQpwYWVsbGEKcGFcdTAzMDFnaW5hCnBhZ28KcGFpXHUwMzAxcwpwYVx1MDMwMWphcm8KcGFsYWJyYQpwYWxjbwpwYWxldGEKcGFcdTAzMDFsaWRvCnBhbG1hCnBhbG9tYQpwYWxwYXIKcGFuCnBhbmFsCnBhXHUwMzAxbmljbwpwYW50ZXJhCnBhblx1MDMwM3VlbG8KcGFwYVx1MDMwMQpwYXBlbApwYXBpbGxhCnBhcXVldGUKcGFyYXIKcGFyY2VsYQpwYXJlZApwYXJpcgpwYXJvCnBhXHUwMzAxcnBhZG8KcGFycXVlCnBhXHUwMzAxcnJhZm8KcGFydGUKcGFzYXIKcGFzZW8KcGFzaW9cdTAzMDFuCnBhc28KcGFzdGEKcGF0YQpwYXRpbwpwYXRyaWEKcGF1c2EKcGF1dGEKcGF2bwpwYXlhc28KcGVhdG9cdTAzMDFuCnBlY2FkbwpwZWNlcmEKcGVjaG8KcGVkYWwKcGVkaXIKcGVnYXIKcGVpbmUKcGVsYXIKcGVsZGFuXHUwMzAzbwpwZWxlYQpwZWxpZ3JvCnBlbGxlam8KcGVsbwpwZWx1Y2EKcGVuYQpwZW5zYXIKcGVuXHUwMzAzb1x1MDMwMW4KcGVvXHUwMzAxbgpwZW9yCnBlcGlubwpwZXF1ZW5cdTAzMDNvCnBlcmEKcGVyY2hhCnBlcmRlcgpwZXJlemEKcGVyZmlsCnBlcmljbwpwZXJsYQpwZXJtaXNvCnBlcnJvCnBlcnNvbmEKcGVzYQpwZXNjYQpwZVx1MDMwMXNpbW8KcGVzdGFuXHUwMzAzYQpwZVx1MDMwMXRhbG8KcGV0cm9cdTAzMDFsZW8KcGV6CnBlenVuXHUwMzAzYQpwaWNhcgpwaWNob1x1MDMwMW4KcGllCnBpZWRyYQpwaWVybmEKcGllemEKcGlqYW1hCnBpbGFyCnBpbG90bwpwaW1pZW50YQpwaW5vCnBpbnRvcgpwaW56YQpwaW5cdTAzMDNhCnBpb2pvCnBpcGEKcGlyYXRhCnBpc2FyCnBpc2NpbmEKcGlzbwpwaXN0YQpwaXRvXHUwMzAxbgpwaXpjYQpwbGFjYQpwbGFuCnBsYXRhCnBsYXlhCnBsYXphCnBsZWl0bwpwbGVubwpwbG9tbwpwbHVtYQpwbHVyYWwKcG9icmUKcG9jbwpwb2Rlcgpwb2Rpbwpwb2VtYQpwb2VzaVx1MDMwMWEKcG9ldGEKcG9sZW4KcG9saWNpXHUwMzAxYQpwb2xsbwpwb2x2bwpwb21hZGEKcG9tZWxvCnBvbW8KcG9tcGEKcG9uZXIKcG9yY2lvXHUwMzAxbgpwb3J0YWwKcG9zYWRhCnBvc2Vlcgpwb3NpYmxlCnBvc3RlCnBvdGVuY2lhCnBvdHJvCnBvem8KcHJhZG8KcHJlY296CnByZWd1bnRhCnByZW1pbwpwcmVuc2EKcHJlc28KcHJldmlvCnByaW1vCnByaVx1MDMwMW5jaXBlCnByaXNpb1x1MDMwMW4KcHJpdmFyCnByb2EKcHJvYmFyCnByb2Nlc28KcHJvZHVjdG8KcHJvZXphCnByb2Zlc29yCnByb2dyYW1hCnByb2xlCnByb21lc2EKcHJvbnRvCnByb3Bpbwpwcm9cdTAzMDF4aW1vCnBydWViYQpwdVx1MDMwMWJsaWNvCnB1Y2hlcm8KcHVkb3IKcHVlYmxvCnB1ZXJ0YQpwdWVzdG8KcHVsZ2EKcHVsaXIKcHVsbW9cdTAzMDFuCnB1bHBvCnB1bHNvCnB1bWEKcHVudG8KcHVuXHUwMzAzYWwKcHVuXHUwMzAzbwpwdXBhCnB1cGlsYQpwdXJlXHUwMzAxCnF1ZWRhcgpxdWVqYQpxdWVtYXIKcXVlcmVyCnF1ZXNvCnF1aWV0bwpxdWlcdTAzMDFtaWNhCnF1aW5jZQpxdWl0YXIKcmFcdTAzMDFiYW5vCnJhYmlhCnJhYm8KcmFjaW9cdTAzMDFuCnJhZGljYWwKcmFpXHUwMzAxegpyYW1hCnJhbXBhCnJhbmNobwpyYW5nbwpyYXBhegpyYVx1MDMwMXBpZG8KcmFwdG8KcmFzZ28KcmFzcGEKcmF0bwpyYXlvCnJhemEKcmF6b1x1MDMwMW4KcmVhY2Npb1x1MDMwMW4KcmVhbGlkYWQKcmViYW5cdTAzMDNvCnJlYm90ZQpyZWNhZXIKcmVjZXRhCnJlY2hhem8KcmVjb2dlcgpyZWNyZW8KcmVjdG8KcmVjdXJzbwpyZWQKcmVkb25kbwpyZWR1Y2lyCnJlZmxlam8KcmVmb3JtYQpyZWZyYVx1MDMwMW4KcmVmdWdpbwpyZWdhbG8KcmVnaXIKcmVnbGEKcmVncmVzbwpyZWhlXHUwMzAxbgpyZWlubwpyZWlcdTAzMDFyCnJlamEKcmVsYXRvCnJlbGV2bwpyZWxpZXZlCnJlbGxlbm8KcmVsb2oKcmVtYXIKcmVtZWRpbwpyZW1vCnJlbmNvcgpyZW5kaXIKcmVudGEKcmVwYXJ0bwpyZXBldGlyCnJlcG9zbwpyZXB0aWwKcmVzCnJlc2NhdGUKcmVzaW5hCnJlc3BldG8KcmVzdG8KcmVzdW1lbgpyZXRpcm8KcmV0b3JubwpyZXRyYXRvCnJldW5pcgpyZXZlXHUwMzAxcwpyZXZpc3RhCnJleQpyZXphcgpyaWNvCnJpZWdvCnJpZW5kYQpyaWVzZ28KcmlmYQpyaVx1MDMwMWdpZG8Kcmlnb3IKcmluY29cdTAzMDFuCnJpblx1MDMwM29cdTAzMDFuCnJpXHUwMzAxbwpyaXF1ZXphCnJpc2EKcml0bW8Kcml0bwpyaXpvCnJvYmxlCnJvY2UKcm9jaWFyCnJvZGFyCnJvZGVvCnJvZGlsbGEKcm9lcgpyb2ppem8Kcm9qbwpyb21lcm8Kcm9tcGVyCnJvbgpyb25jbwpyb25kYQpyb3BhCnJvcGVybwpyb3NhCnJvc2NhCnJvc3Rybwpyb3RhcgpydWJpXHUwMzAxCnJ1Ym9yCnJ1ZG8KcnVlZGEKcnVnaXIKcnVpZG8KcnVpbmEKcnVsZXRhCnJ1bG8KcnVtYm8KcnVtb3IKcnVwdHVyYQpydXRhCnJ1dGluYQpzYVx1MDMwMWJhZG8Kc2FiZXIKc2FiaW8Kc2FibGUKc2FjYXIKc2FnYXoKc2FncmFkbwpzYWxhCnNhbGRvCnNhbGVybwpzYWxpcgpzYWxtb1x1MDMwMW4Kc2Fsb1x1MDMwMW4Kc2Fsc2EKc2FsdG8Kc2FsdWQKc2FsdmFyCnNhbWJhCnNhbmNpb1x1MDMwMW4Kc2FuZGlcdTAzMDFhCnNhbmVhcgpzYW5ncmUKc2FuaWRhZApzYW5vCnNhbnRvCnNhcG8Kc2FxdWUKc2FyZGluYQpzYXJ0ZVx1MDMwMW4Kc2FzdHJlCnNhdGFcdTAzMDFuCnNhdW5hCnNheG9mb1x1MDMwMW4Kc2VjY2lvXHUwMzAxbgpzZWNvCnNlY3JldG8Kc2VjdGEKc2VkCnNlZ3VpcgpzZWlzCnNlbGxvCnNlbHZhCnNlbWFuYQpzZW1pbGxhCnNlbmRhCnNlbnNvcgpzZW5cdTAzMDNhbApzZW5cdTAzMDNvcgpzZXBhcmFyCnNlcGlhCnNlcXVpXHUwMzAxYQpzZXIKc2VyaWUKc2VybW9cdTAzMDFuCnNlcnZpcgpzZXNlbnRhCnNlc2lvXHUwMzAxbgpzZXRhCnNldGVudGEKc2V2ZXJvCnNleG8Kc2V4dG8Kc2lkcmEKc2llc3RhCnNpZXRlCnNpZ2xvCnNpZ25vCnNpXHUwMzAxbGFiYQpzaWxiYXIKc2lsZW5jaW8Kc2lsbGEKc2lcdTAzMDFtYm9sbwpzaW1pbwpzaXJlbmEKc2lzdGVtYQpzaXRpbwpzaXR1YXIKc29icmUKc29jaW8Kc29kaW8Kc29sCnNvbGFwYQpzb2xkYWRvCnNvbGVkYWQKc29cdTAzMDFsaWRvCnNvbHRhcgpzb2x1Y2lvXHUwMzAxbgpzb21icmEKc29uZGVvCnNvbmlkbwpzb25vcm8Kc29ucmlzYQpzb3BhCnNvcGxhcgpzb3BvcnRlCnNvcmRvCnNvcnByZXNhCnNvcnRlbwpzb3N0ZVx1MDMwMW4Kc29cdTAzMDF0YW5vCnN1YXZlCnN1YmlyCnN1Y2VzbwpzdWRvcgpzdWVncmEKc3VlbG8Kc3Vlblx1MDMwM28Kc3VlcnRlCnN1ZnJpcgpzdWpldG8Kc3VsdGFcdTAzMDFuCnN1bWFyCnN1cGVyYXIKc3VwbGlyCnN1cG9uZXIKc3VwcmVtbwpzdXIKc3VyY28Kc3VyZW5cdTAzMDNvCnN1cmdpcgpzdXN0bwpzdXRpbAp0YWJhY28KdGFiaXF1ZQp0YWJsYQp0YWJ1XHUwMzAxCnRhY28KdGFjdG8KdGFqbwp0YWxhcgp0YWxjbwp0YWxlbnRvCnRhbGxhCnRhbG9cdTAzMDFuCnRhbWFuXHUwMzAzbwp0YW1ib3IKdGFuZ28KdGFucXVlCnRhcGEKdGFwZXRlCnRhcGlhCnRhcG9cdTAzMDFuCnRhcXVpbGxhCnRhcmRlCnRhcmVhCnRhcmlmYQp0YXJqZXRhCnRhcm90CnRhcnJvCnRhcnRhCnRhdHVhamUKdGF1cm8KdGF6YQp0YXpvXHUwMzAxbgp0ZWF0cm8KdGVjaG8KdGVjbGEKdGVcdTAzMDFjbmljYQp0ZWphZG8KdGVqZXIKdGVqaWRvCnRlbGEKdGVsZVx1MDMwMWZvbm8KdGVtYQp0ZW1vcgp0ZW1wbG8KdGVuYXoKdGVuZGVyCnRlbmVyCnRlbmlzCnRlbnNvCnRlb3JpXHUwMzAxYQp0ZXJhcGlhCnRlcmNvCnRlXHUwMzAxcm1pbm8KdGVybnVyYQp0ZXJyb3IKdGVzaXMKdGVzb3JvCnRlc3RpZ28KdGV0ZXJhCnRleHRvCnRlegp0aWJpbwp0aWJ1cm9cdTAzMDFuCnRpZW1wbwp0aWVuZGEKdGllcnJhCnRpZXNvCnRpZ3JlCnRpamVyYQp0aWxkZQp0aW1icmUKdGlcdTAzMDFtaWRvCnRpbW8KdGludGEKdGlcdTAzMDFvCnRpXHUwMzAxcGljbwp0aXBvCnRpcmEKdGlyb1x1MDMwMW4KdGl0YVx1MDMwMW4KdGlcdTAzMDF0ZXJlCnRpXHUwMzAxdHVsbwp0aXphCnRvYWxsYQp0b2JpbGxvCnRvY2FyCnRvY2lubwp0b2RvCnRvZ2EKdG9sZG8KdG9tYXIKdG9ubwp0b250bwp0b3Bhcgp0b3BlCnRvcXVlCnRvXHUwMzAxcmF4CnRvcmVybwp0b3JtZW50YQp0b3JuZW8KdG9ybwp0b3JwZWRvCnRvcnJlCnRvcnNvCnRvcnR1Z2EKdG9zCnRvc2NvCnRvc2VyCnRvXHUwMzAxeGljbwp0cmFiYWpvCnRyYWN0b3IKdHJhZXIKdHJhXHUwMzAxZmljbwp0cmFnbwp0cmFqZQp0cmFtbwp0cmFuY2UKdHJhdG8KdHJhdW1hCnRyYXphcgp0cmVcdTAzMDFib2wKdHJlZ3VhCnRyZWludGEKdHJlbgp0cmVwYXIKdHJlcwp0cmlidQp0cmlnbwp0cmlwYQp0cmlzdGUKdHJpdW5mbwp0cm9mZW8KdHJvbXBhCnRyb25jbwp0cm9wYQp0cm90ZQp0cm96bwp0cnVjbwp0cnVlbm8KdHJ1ZmEKdHViZXJpXHUwMzAxYQp0dWJvCnR1ZXJ0bwp0dW1iYQp0dW1vcgp0dVx1MDMwMW5lbAp0dVx1MDMwMW5pY2EKdHVyYmluYQp0dXJpc21vCnR1cm5vCnR1dG9yCnViaWNhcgp1XHUwMzAxbGNlcmEKdW1icmFsCnVuaWRhZAp1bmlyCnVuaXZlcnNvCnVubwp1bnRhcgp1blx1MDMwM2EKdXJiYW5vCnVyYmUKdXJnZW50ZQp1cm5hCnVzYXIKdXN1YXJpbwp1XHUwMzAxdGlsCnV0b3BpXHUwMzAxYQp1dmEKdmFjYQp2YWNpXHUwMzAxbwp2YWN1bmEKdmFnYXIKdmFnbwp2YWluYQp2YWppbGxhCnZhbGUKdmFcdTAzMDFsaWRvCnZhbGxlCnZhbG9yCnZhXHUwMzAxbHZ1bGEKdmFtcGlybwp2YXJhCnZhcmlhcgp2YXJvXHUwMzAxbgp2YXNvCnZlY2lubwp2ZWN0b3IKdmVoaVx1MDMwMWN1bG8KdmVpbnRlCnZlamV6CnZlbGEKdmVsZXJvCnZlbG96CnZlbmEKdmVuY2VyCnZlbmRhCnZlbmVubwp2ZW5nYXIKdmVuaXIKdmVudGEKdmVudXMKdmVyCnZlcmFubwp2ZXJibwp2ZXJkZQp2ZXJlZGEKdmVyamEKdmVyc28KdmVydGVyCnZpXHUwMzAxYQp2aWFqZQp2aWJyYXIKdmljaW8KdmlcdTAzMDFjdGltYQp2aWRhCnZpXHUwMzAxZGVvCnZpZHJpbwp2aWVqbwp2aWVybmVzCnZpZ29yCnZpbAp2aWxsYQp2aW5hZ3JlCnZpbm8KdmluXHUwMzAzZWRvCnZpb2xpXHUwMzAxbgp2aXJhbAp2aXJnbwp2aXJ0dWQKdmlzb3IKdmlcdTAzMDFzcGVyYQp2aXN0YQp2aXRhbWluYQp2aXVkbwp2aXZhegp2aXZlcm8Kdml2aXIKdml2bwp2b2xjYVx1MDMwMW4Kdm9sdW1lbgp2b2x2ZXIKdm9yYXoKdm90YXIKdm90bwp2b3oKdnVlbG8KdnVsZ2FyCnlhY2VyCnlhdGUKeWVndWEKeWVtYQp5ZXJubwp5ZXNvCnlvZG8KeW9nYQp5b2d1cgp6YWZpcm8KemFuamEKemFwYXRvCnphcnphCnpvbmEKem9ycm8KenVtbwp6dXJkb2Auc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy90cmFkaXRpb25hbC1jaGluZXNlLmpzCiAgdmFyIHdvcmRsaXN0OSA9IGBcdTc2ODQKXHU0RTAwClx1NjYyRgpcdTU3MjgKXHU0RTBEClx1NEU4NgpcdTY3MDkKXHU1NDhDClx1NEVCQQpcdTkwMTkKXHU0RTJEClx1NTkyNwpcdTcwQkEKXHU0RTBBClx1NTAwQgpcdTU3MEIKXHU2MjExClx1NEVFNQpcdTg5ODEKXHU0RUQ2Clx1NjY0MgpcdTRGODYKXHU3NTI4Clx1NTAxMQpcdTc1MUYKXHU1MjMwClx1NEY1QwpcdTU3MzAKXHU2NUJDClx1NTFGQQpcdTVDMzEKXHU1MjA2Clx1NUMwRApcdTYyMTAKXHU2NzAzClx1NTNFRgpcdTRFM0IKXHU3NjdDClx1NUU3NApcdTUyRDUKXHU1NDBDClx1NURFNQpcdTRFNUYKXHU4MEZEClx1NEUwQgpcdTkwNEUKXHU1QjUwClx1OEFBQQpcdTc1MjIKXHU3QTJFClx1OTc2MgpcdTgwMEMKXHU2NUI5Clx1NUY4QwpcdTU5MUEKXHU1QjlBClx1ODg0QwpcdTVCNzgKXHU2Q0Q1Clx1NjI0MApcdTZDMTEKXHU1Rjk3Clx1N0Q5MwpcdTUzNDEKXHU0RTA5Clx1NEU0QgpcdTkwMzIKXHU4NDU3Clx1N0I0OQpcdTkwRTgKXHU1RUE2Clx1NUJCNgpcdTk2RkIKXHU1MjlCClx1ODhFMQpcdTU5ODIKXHU2QzM0Clx1NTMxNgpcdTlBRDgKXHU4MUVBClx1NEU4QwpcdTc0MDYKXHU4RDc3Clx1NUMwRgpcdTcyNjkKXHU3M0ZFClx1NUJFNgpcdTUyQTAKXHU5MUNGClx1OTBGRApcdTUxNjkKXHU5QUQ0Clx1NTIzNgpcdTZBNUYKXHU3NTc2Clx1NEY3RgpcdTlFREUKXHU1RjlFClx1Njk2RApcdTY3MkMKXHU1M0JCClx1NjI4QQpcdTYwMjcKXHU1OTdEClx1NjFDOQpcdTk1OEIKXHU1QjgzClx1NTQwOApcdTkwODQKXHU1NkUwClx1NzUzMQpcdTUxNzYKXHU0RTlCClx1NzEzNgpcdTUyNEQKXHU1OTE2Clx1NTkyOQpcdTY1M0YKXHU1NkRCClx1NjVFNQpcdTkwQTMKXHU3OTNFClx1N0ZBOQpcdTRFOEIKXHU1RTczClx1NUY2MgpcdTc2RjgKXHU1MTY4Clx1ODg2OApcdTk1OTMKXHU2QTIzClx1ODIwNwpcdTk1REMKXHU1NDA0Clx1OTFDRApcdTY1QjAKXHU3RERBClx1NTE2NwpcdTY1NzgKXHU2QjYzClx1NUZDMwpcdTUzQ0QKXHU0RjYwClx1NjYwRQpcdTc3MEIKXHU1MzlGClx1NTNDOApcdTlFQkMKXHU1MjI5Clx1NkJENApcdTYyMTYKXHU0RjQ2Clx1OENFQQpcdTZDMjMKXHU3QjJDClx1NTQxMQpcdTkwNTMKXHU1NDdEClx1NkI2NApcdThCOEEKXHU2ODlEClx1NTNFQQpcdTZDOTIKXHU3RDUwClx1ODlFMwpcdTU1NEYKXHU2MTBGClx1NUVGQQpcdTY3MDgKXHU1MTZDClx1NzEyMQpcdTdDRkIKXHU4RUNEClx1NUY4OApcdTYwQzUKXHU4MDA1Clx1NjcwMApcdTdBQ0IKXHU0RUUzClx1NjBGMwpcdTVERjIKXHU5MDFBClx1NEUyNgpcdTYzRDAKXHU3NkY0Clx1OTg0QwpcdTlFRTgKXHU3QTBCClx1NUM1NQpcdTRFOTQKXHU2NzlDClx1NjU5OQpcdThDNjEKXHU1NEUxClx1OTc2OQpcdTRGNEQKXHU1MTY1Clx1NUUzOApcdTY1ODcKXHU3RTNEClx1NkIyMQpcdTU0QzEKXHU1RjBGClx1NkQzQgpcdThBMkQKXHU1M0NBClx1N0JBMQpcdTcyNzkKXHU0RUY2Clx1OTU3NwpcdTZDNDIKXHU4MDAxClx1OTgyRApcdTU3RkEKXHU4Q0M3Clx1OTA4QQpcdTZENDEKXHU4REVGClx1N0QxQQpcdTVDMTEKXHU1NzE2Clx1NUM3MQpcdTdENzEKXHU2M0E1Clx1NzdFNQpcdThGMDMKXHU1QzA3Clx1N0Q0NApcdTg5OEIKXHU4QTA4Clx1NTIyNQpcdTU5NzkKXHU2MjRCClx1ODlEMgpcdTY3MUYKXHU2ODM5Clx1OEFENgpcdTkwNEIKXHU4RkIyClx1NjMwNwpcdTVFN0UKXHU0RTVEClx1NTM0MApcdTVGMzcKXHU2NTNFClx1NkM3QQpcdTg5N0YKXHU4OEFCClx1NUU3OQpcdTUwNUEKXHU1RkM1Clx1NjIzMApcdTUxNDgKXHU1NkRFClx1NTI0NwpcdTRFRkIKXHU1M0Q2Clx1NjREQQpcdTg2NTUKXHU5NjhBClx1NTM1NwpcdTdENjYKXHU4MjcyClx1NTE0OQpcdTk1ODAKXHU1MzczClx1NEZERApcdTZDQkIKXHU1MzE3Clx1OTAyMApcdTc2N0UKXHU4OThGClx1NzFCMQpcdTk4MTgKXHU0RTAzClx1NkQ3NwpcdTUzRTMKXHU2NzcxClx1NUMwRQpcdTU2NjgKXHU1OEQzClx1NUZENwpcdTRFMTYKXHU5MUQxClx1NTg5RQpcdTcyMkQKXHU2RkRGClx1OTY4RQpcdTZDQjkKXHU2MDFEClx1ODg1MwpcdTY5NzUKXHU0RUE0Clx1NTNENwpcdTgwNkYKXHU0RUMwClx1OEE4RApcdTUxNkQKXHU1MTcxClx1NkIwQQpcdTY1MzYKXHU4QjQ5Clx1NjUzOQpcdTZFMDUKXHU3RjhFClx1NTE4RApcdTYzQTEKXHU4RjQ5Clx1NjZGNApcdTU1QUUKXHU5OEE4Clx1NTIwNwpcdTYyNTMKXHU3NjdEClx1NjU1OQpcdTkwMUYKXHU4MkIxClx1NUUzNgpcdTVCODkKXHU1ODM0Clx1OEVBQgpcdThFQ0EKXHU0RjhCClx1NzcxRgpcdTUyRDkKXHU1MTc3Clx1ODQyQwpcdTZCQ0YKXHU3NkVFClx1ODFGMwpcdTkwNTQKXHU4RDcwClx1N0E0RApcdTc5M0EKXHU4QjcwClx1ODA3MgpcdTU4MzEKXHU5QjI1Clx1NUI4QwpcdTk4NUUKXHU1MTZCClx1OTZFMgpcdTgzRUYKXHU1NDBEClx1NzhCQQpcdTYyNEQKXHU3OUQxClx1NUYzNQpcdTRGRTEKXHU5OUFDClx1N0JDMApcdThBNzEKXHU3QzczClx1NjU3NApcdTdBN0EKXHU1MTQzClx1NkNDMQpcdTRFQ0EKXHU5NkM2Clx1NkVBQgpcdTUwQjMKXHU1NzFGClx1OEEzMQpcdTZCNjUKXHU3RkE0Clx1NUVFMwpcdTc3RjMKXHU4QTE4Clx1OTcwMApcdTZCQjUKXHU3ODE0Clx1NzU0QwpcdTYyQzkKXHU2Nzk3Clx1NUY4QgpcdTUzRUIKXHU0RTE0Clx1N0E3NgpcdTg5QzAKXHU4RDhBClx1N0U1NApcdTg4REQKXHU1RjcxClx1N0I5NwpcdTRGNEUKXHU2MzAxClx1OTdGMwpcdTc3M0UKXHU2NkY4Clx1NUUwMwpcdTU5MEQKXHU1QkI5Clx1NTE1MgpcdTk4MDgKXHU5NjlCClx1NTU0NgpcdTk3NUUKXHU5QTU3Clx1OTAyMwpcdTY1QjcKXHU2REYxClx1OTZFMwpcdThGRDEKXHU3OTI2Clx1NTM0MwpcdTkwMzEKXHU1OUQ0Clx1N0QyMApcdTYyODAKXHU1MDk5Clx1NTM0QQpcdThGQTYKXHU5NzUyClx1NzcwMQpcdTUyMTcKXHU3RkQyClx1OTdGRgpcdTdEMDQKXHU2NTJGClx1ODIyQwpcdTUzRjIKXHU2MTFGClx1NTJERQpcdTRGQkYKXHU1NzE4Clx1NUY4MApcdTkxNzgKXHU2Qjc3Clx1NUUwMgpcdTUxNEIKXHU0RjU1Clx1OTY2NApcdTZEODgKXHU2OUNCClx1NUU5QwpcdTdBMzEKXHU1OTJBClx1NkU5NgpcdTdDQkUKXHU1MDNDClx1ODY1RgpcdTczODcKXHU2NUNGClx1N0RBRApcdTUyODMKXHU5MDc4Clx1NkExOQpcdTVCRUIKXHU1QjU4Clx1NTAxOQpcdTZCREIKXHU4OUFBClx1NUZFQgpcdTY1NDgKXHU2NUFGClx1OTY2MgpcdTY3RTUKXHU2QzVGClx1NTc4QgpcdTc3M0MKXHU3MzhCClx1NjMwOQpcdTY4M0MKXHU5OTBBClx1NjYxMwpcdTdGNkUKXHU2RDNFClx1NUM2NApcdTcyNDcKXHU1OUNCClx1NTM3QgpcdTVDMDgKXHU3MkMwClx1ODBCMgpcdTVFRTAKXHU0RUFDClx1OEI1OApcdTkwNjkKXHU1QzZDClx1NTcxMwpcdTUzMDUKXHU3MDZCClx1NEY0RgpcdThBQkYKXHU2RUZGClx1N0UyMwpcdTVDNDAKXHU3MTY3Clx1NTNDMwpcdTdEMDUKXHU3RDMwClx1NUYxNQpcdTgwN0QKXHU4QTcyClx1OTQzNQpcdTUwRjkKXHU1NkI0Clx1OTk5NgpcdTVFOTUKXHU2REIyClx1NUI5OApcdTVGQjcKXHU5NkE4Clx1NzVDNQpcdTg2MDcKXHU1OTMxClx1NzIzRQpcdTZCN0IKXHU4QjFCClx1OTE0RApcdTU5NzMKXHU5RUMzClx1NjNBOApcdTk4NkYKXHU4QUM3Clx1N0Y2QQpcdTc5NUUKXHU4NUREClx1NTQ2MgpcdTVFMkQKXHU1NDJCClx1NEYwMQpcdTY3MUIKXHU1QkM2Clx1NjI3OQpcdTcxREYKXHU5ODA1Clx1OTYzMgpcdTgyMDkKXHU3NDAzClx1ODJGMQpcdTZDMjcKXHU1MkUyClx1NTQ0QQpcdTY3NEUKXHU1M0YwClx1ODQzRApcdTY3MjgKXHU1RTZCClx1OEYyQQpcdTc4MzQKXHU0RTlFClx1NUUyQgpcdTU3MEQKXHU2Q0U4Clx1OTA2MApcdTVCNTcKXHU2NzUwClx1NjM5MgpcdTRGOUIKXHU2Q0IzClx1NjE0QgpcdTVDMDEKXHU1M0U2Clx1NjVCRApcdTZFMUIKXHU2QTM5Clx1NkVCNgpcdTYwMEUKXHU2QjYyClx1Njg0OApcdThBMDAKXHU1OEVCClx1NTc0NwpcdTZCNjYKXHU1NkZBClx1ODQ0OQpcdTlCNUEKXHU2Q0UyClx1ODk5NgpcdTUwQzUKXHU4Q0JCClx1N0RDQQpcdTYxMUIKXHU1REU2Clx1N0FFMApcdTY1RTkKXHU2NzFEClx1NUJCMwpcdTdFOEMKXHU4RjE1Clx1NjcwRApcdThBNjYKXHU5OERGClx1NTE0NQpcdTUxNzUKXHU2RTkwClx1NTIyNApcdThCNzcKXHU1M0Y4Clx1OERCMwpcdTY3RDAKXHU3REY0Clx1NURFRQpcdTgxRjQKXHU2NzdGClx1NzUzMApcdTk2NEQKXHU5RUQxClx1NzJBRgpcdThDQTAKXHU2NENBClx1ODMwMwpcdTdFN0MKXHU4MjA4Clx1NEYzQwpcdTk5MTgKXHU1ODA1Clx1NjZGMgpcdThGMzgKXHU0RkVFClx1NjU0NQpcdTU3Q0UKXHU1OTJCClx1NTkyMApcdTkwMDEKXHU3QjQ2Clx1ODIzOQpcdTRGNTQKXHU1M0YzClx1OENBMQpcdTU0MDMKXHU1QkNDClx1NjYyNQpcdTgwNzcKXHU4OUJBClx1NkYyMgpcdTc1NkIKXHU1MjlGClx1NURGNApcdThEREYKXHU5NkQ2Clx1OTZEQwpcdTk4REIKXHU2QUEyClx1NTQzOApcdTUyQTkKXHU2NjA3Clx1OTY3RApcdTRFOTIKXHU1MjFEClx1NTI3NQpcdTYyOTcKXHU4MDAzClx1NjI5NQpcdTU4REUKXHU3QjU2Clx1NTNFNApcdTVGOTEKXHU2M0RCClx1NjcyQQpcdThERDEKXHU3NTU5Clx1OTJGQwpcdTY2RkUKXHU3QUVGClx1OENBQwpcdTdBRDkKXHU3QzIxClx1OEZGMApcdTkzMjIKXHU1MjZGClx1NzZFMQpcdTVFMUQKXHU1QzA0Clx1ODM0OQpcdTg4NUQKXHU2MjdGClx1NzM2OApcdTRFRTQKXHU5NjUwClx1OTYzRgpcdTVCQTMKXHU3NEIwClx1OTZEOQpcdThBQ0IKXHU4RDg1Clx1NUZBRQpcdThCOTMKXHU2M0E3Clx1NURERQpcdTgyNkYKXHU4RUY4Clx1NjI3RQpcdTU0MjYKXHU3RDAwClx1NzZDQQpcdTRGOUQKXHU1MTJBClx1OTgwMgpcdTc5MEUKXHU4RjA5Clx1NTAxMgpcdTYyM0YKXHU3QTgxClx1NTc1MApcdTdDODkKXHU2NTc1Clx1NzU2NQpcdTVCQTIKXHU4ODgxClx1NTFCNwpcdTUyREQKXHU3RDU1Clx1Njc5MApcdTU4NEEKXHU1MjkxClx1NkUyQwpcdTdENzIKXHU1MzU0Clx1OEEzNApcdTVGRjUKXHU5NjczClx1NEVDRApcdTdGODUKXHU5RTdEClx1NTNDQgpcdTZEMEIKXHU5MzJGClx1ODJFNgpcdTU5MUMKXHU1MjExClx1NzlGQgpcdTk4M0IKXHU5MDEwClx1OTc2MApcdTZERjcKXHU2QkNEClx1NzdFRApcdTc2QUUKXHU3RDQyClx1ODA1QQpcdTZDN0QKXHU2NzUxClx1OTZGMgpcdTU0RUEKXHU2NUUyClx1OERERApcdTg4NUIKXHU1MDVDClx1NzBDOApcdTU5MkUKXHU1QkRGClx1NzFEMgpcdThGQzUKXHU1ODgzClx1ODJFNQpcdTUzNzAKXHU2RDMyClx1NTIzQgpcdTYyRUMKXHU2RkMwClx1NUI1NApcdTY0MUUKXHU3NTFBClx1NUJBNApcdTVGODUKXHU2ODM4Clx1NjgyMQpcdTY1NjMKXHU0RkI1Clx1NTQyNwpcdTc1MzIKXHU5MDRBClx1NEU0NQpcdTgzREMKXHU1NDczClx1ODIwQQpcdTZBMjEKXHU2RTU2Clx1OENBOApcdTY0MEQKXHU5ODEwClx1OTYzQgpcdTZCRUIKXHU2NjZFClx1N0E2OQpcdTRFNTkKXHU1QUJEClx1NjkwRApcdTYwNkYKXHU2NEY0Clx1OTI4MApcdThBOUUKXHU2M0VFClx1OTE1MgpcdTVCODgKXHU2MkZGClx1NUU4RgpcdTdEMTkKXHU5MUFCClx1N0YzQQpcdTk2RTgKXHU1NUNFClx1OTFERApcdTUyODkKXHU1NTRBClx1NjAyNQpcdTU1MzEKXHU4QUE0Clx1OEExMwpcdTk4NTgKXHU1QkU5Clx1OTY0NApcdTczNzIKXHU4MzM2Clx1OUJBRQpcdTdDRTcKXHU2NUE0Clx1NUI2OQpcdTgxMkIKXHU3ODZCClx1ODBBNQpcdTU1ODQKXHU5RjhEClx1NkYxNApcdTcyMzYKXHU2RjM4Clx1ODg0MApcdTZCNjEKXHU2OEIwClx1NjM4QwpcdTZCNEMKXHU2Qzk5Clx1NTI1QgpcdTY1M0IKXHU4QjAyClx1NzZGRQpcdThBMEUKXHU2NjVBClx1N0M5MgpcdTRFODIKXHU3MUMzClx1NzdEQgpcdTRFNEUKXHU2QkJBClx1ODVFNQpcdTVCRTcKXHU5QjZGClx1OENCNApcdTk0MTgKXHU3MTY0Clx1OEI4MApcdTczRUQKXHU0RjJGClx1OTk5OQpcdTRFQ0IKXHU4RkVCClx1NTNFNQpcdThDNTAKXHU1N0Y5Clx1NjNFMQpcdTg2MkQKXHU2NEQ0Clx1NUYyNgpcdTg2Q0IKXHU2Qzg5Clx1NTA0NwpcdTdBN0YKXHU1N0Y3Clx1N0I1NApcdTZBMDIKXHU4QUIwClx1OTgwNgpcdTcxNTkKXHU3RTJFClx1NUZCNQpcdTgxQzkKXHU1NTlDClx1Njc3RQpcdTgxNzMKXHU1NkYwClx1NzU3MApcdTUxNEQKXHU4MENDClx1NjYxRgpcdTc5OEYKXHU4Q0I3Clx1NjdEMwpcdTRFOTUKXHU2OTgyClx1NjE2MgpcdTYwMTUKXHU3OEMxClx1NTAwRApcdTc5NTYKXHU3Njg3Clx1NEZDMwpcdTk3NUMKXHU4OERDClx1OEE1NQpcdTdGRkIKXHU4MDg5Clx1OEUxMApcdTVDM0MKXHU4ODYzClx1NUJFQwpcdTYzREEKXHU2OEM5Clx1NUUwQwpcdTUwQjcKXHU2NENEClx1NTc4MgpcdTc5Q0IKXHU1QjlDClx1NkMyQgpcdTU5NTcKXHU3NzYzClx1NjMyRgpcdTY3QjYKXHU0RUFFClx1NjcyQgpcdTYxQjIKXHU2MTc2Clx1N0RFOApcdTcyNUIKXHU4OUY4Clx1NjYyMApcdTk2RjcKXHU5MkI3Clx1OEE2OQpcdTVFQTcKXHU1QzQ1Clx1NjI5MwpcdTg4QzIKXHU4MERFClx1NTQ3QwpcdTVBMTgKXHU2NjZGClx1NUEwMQpcdTdEQTAKXHU2Njc2Clx1NTM5QQpcdTc2REYKXHU4ODYxClx1OTZERQpcdTVCNkIKXHU1RUY2Clx1NTM3MQpcdTgxQTAKXHU1QzRCClx1OTEwOQpcdTgxRTgKXHU5Njc4Clx1OTg2NwpcdTYzODkKXHU1NDQwClx1NzFDOApcdTZCNzIKXHU2M0FBClx1Njc1RgpcdTgwMTAKXHU1Mjg3Clx1NzM4OQpcdThEOTkKXHU4REYzClx1NTRFNQpcdTVCNjMKXHU4QUIyClx1NTFGMQpcdTgwRTEKXHU5ODREClx1NkIzRQpcdTdEMzkKXHU1Mzc3Clx1OUY0QQpcdTUwNDkKXHU4NEI4Clx1NkI5NgpcdTZDMzgKXHU1Qjk3Clx1ODJENwpcdTVEREQKXHU3MjEwClx1NUNBOQpcdTVGMzEKXHU5NkY2Clx1Njk0QQpcdTU5NEYKXHU2Q0JGClx1OTczMgpcdTY4N0YKXHU2M0EyClx1NkVEMQpcdTkzQUUKXHU5OEVGClx1NkZDMwpcdTgyMkEKXHU2MUY3Clx1OEQ5NQpcdTVFQUIKXHU1OTZBClx1NEYwQQpcdTk3NDgKXHU3QTA1Clx1OTAxNApcdTZFQzUKXHU4Q0ZEClx1NkI3OApcdTUzRUMKXHU5RjEzClx1NjRBRApcdTc2RTQKXHU4OEMxClx1OTZBQQpcdTVFQjcKXHU1NTJGClx1OTMwNApcdTgzQ0MKXHU3RDE0Clx1NTAxRgpcdTdDRDYKXHU4NENCClx1NkE2QgpcdTdCMjYKXHU3OUMxClx1NTJBQQpcdTU4MDIKXHU1N0RGClx1NjlDRApcdTZGNjQKXHU1RTQ1Clx1NTRDOApcdTdBREYKXHU3MTlGClx1ODdGMgpcdTZGQTQKXHU4MTY2Clx1NThFNApcdTc4QjMKXHU2QjUwClx1OTA0RApcdTUwNzQKXHU1QkU4Clx1NjU2MgpcdTVGQjkKXHU2MTZFClx1NjU5QwpcdTg1ODQKXHU1RUFEClx1N0QwRApcdTVGNDgKXHU5OEZDClx1NEYzOApcdTYyOTgKXHU5RUE1Clx1NkZENQpcdTY2OTcKXHU4Mzc3Clx1NzRFNgpcdTU4NUUKXHU1RThBClx1N0JDOQpcdTYwRTEKXHU2MjM2Clx1OEEyQQpcdTU4NTQKXHU1OTQ3Clx1OTAwRgpcdTY4ODEKXHU1MjAwClx1NjVDQgpcdThERTEKXHU1MzYxClx1NkMyRgpcdTkwNDcKXHU0RUZEClx1NkJEMgpcdTZDRTUKXHU5MDAwClx1NkQxNwpcdTY0RkEKXHU3MDcwClx1NUY2OQpcdThDRTMKXHU4MDE3Clx1NTkwRgpcdTY0QzcKXHU1RkQ5Clx1OTI4NQpcdTczN0IKXHU3ODZDClx1NEU4OApcdTdFNDEKXHU1NzA4Clx1OTZFQQpcdTUxRkQKXHU0RUE2Clx1NjJCRApcdTdCQzcKXHU5NjYzClx1OTY3MApcdTRFMDEKXHU1QzNBClx1OEZGRApcdTU4MDYKXHU5NkM0Clx1OEZDRQpcdTZDREIKXHU3MjM4Clx1NkExMwpcdTkwN0YKXHU4QjAwClx1NTY3OApcdTkxQ0UKXHU4QzZDClx1NjVENwpcdTdEMkYKXHU1MDRGClx1NTE3OApcdTk5MjgKXHU3RDIyClx1NzlFNgpcdTgxMDIKXHU2RjZFClx1NzIzQQpcdThDNDYKXHU1RkZEClx1NjI1OApcdTlBNUEKXHU1ODUxClx1OTA3QQpcdTYxMDgKXHU2NzMxClx1NjZGRgpcdTdFOTYKXHU3Qzk3Clx1NTBCRQpcdTVDMUEKXHU3NURCClx1Njk1QQpcdThCMUQKXHU1OTZFClx1OENGQwpcdTc4RTgKXHU1NDFCClx1NkM2MApcdTY1QzEKXHU3ODhFClx1OUFBOApcdTc2RTMKXHU2MzU1Clx1NUYxRgpcdTY2QjQKXHU1MjcyClx1OENBQgpcdTZCOEEKXHU5MUNCClx1OEE1RQpcdTRFQTEKXHU1OEMxClx1OTgxMwpcdTVCRjYKXHU1MzQ4Clx1NTg3NQpcdTgwNUUKXHU2M0VEClx1NzBBRQpcdTZCOTgKXHU1MUFDClx1NkE0QgpcdTVBNjYKXHU4QjY2Clx1N0Q5QwpcdTYyREIKXHU1NDMzClx1NEVEOApcdTZENkUKXHU5MDZEClx1NUY5MApcdTYwQTgKXHU2NDE2Clx1OEMzNwpcdThEMEEKXHU3QkIxClx1OTY5NApcdThBMDIKXHU3NTM3Clx1NTQzOQpcdTU3MTIKXHU3RDFCClx1NTUxMApcdTY1NTcKXHU1QjhCClx1NzNCQgpcdTVERTgKXHU4MDE1Clx1NTc2NgpcdTY5QUUKXHU5NTg5Clx1NzA2MwpcdTkzNzUKXHU1MUUxClx1OTlEMApcdTkzNEIKXHU2NTUxClx1NjA2OQpcdTUyNUQKXHU1MUREClx1OUU3QwpcdTlGNTIKXHU2MjJBClx1NzE0OQpcdTlFQkIKXHU3RDIxClx1Nzk4MQpcdTVFRTIKXHU3NkRCClx1NzI0OApcdTdERTkKXHU2REU4Clx1Nzc1QgpcdTY2MEMKXHU1QTVBClx1NkQ4OQpcdTdCNTIKXHU1NjM0Clx1NjNEMgpcdTVDQjgKXHU2NzE3Clx1ODM4QQpcdTg4NTcKXHU4NUNGClx1NTlEMQpcdThDQkYKXHU4MTUwClx1NTk3NApcdTU1NjYKXHU2MTYzClx1NEU1OApcdTU5MjUKXHU2MDYyClx1NTJGQgpcdTdEMTcKXHU2MjRFClx1OEZBRgpcdTgwMzMKXHU1RjZBClx1ODFFMwpcdTUxMDQKXHU3NDgzClx1NjJCNQpcdTgxMDgKXHU3OUMwClx1ODVBOQpcdTRGQzQKXHU3REIyClx1ODIxRQpcdTVFOTcKXHU1Njc0Clx1N0UzMQpcdTVCRjgKXHU2QzU3Clx1NjM5QgpcdTZEMkEKXHU4Q0MwClx1OTU4MwpcdTY3RUMKXHU3MjA2Clx1NzBFRgpcdTZEMjUKXHU3QTNCClx1NzI0NgpcdThFREYKXHU1MkM3Clx1NTBDRgpcdTZFRkUKXHU1Mzk4Clx1ODQ5OQpcdTgyQjMKXHU4MEFGClx1NTc2MQpcdTY3RjEKXHU3NkVBClx1ODE3RgpcdTUxMDAKXHU2NUM1Clx1NUMzRQpcdThFQ0IKXHU1MUIwClx1OENBMgpcdTc2N0IKXHU5RUNFClx1NTI0QQpcdTk0N0QKXHU1MkQyClx1OTAwMwpcdTk2OUMKXHU2QzI4Clx1OTBFRApcdTVDRjAKXHU1RTYzClx1NkUyRgpcdTRGMEYKXHU4RUNDClx1NzU1RApcdTc1NjIKXHU2NEU2Clx1ODNBQgpcdTUyM0EKXHU2RDZBClx1NzlEOApcdTYzRjQKXHU2ODJBClx1NTA2NQpcdTU1MkUKXHU4MEExClx1NUNGNgpcdTc1MTgKXHU2Q0UxClx1Nzc2MQpcdTdBRTUKXHU5NDQ0Clx1NkU2RgpcdTk1QTUKXHU0RjExClx1NTMyRgpcdTgyMEQKXHU3MjY3Clx1N0U1RQpcdTcwQjgKXHU1NEYyClx1NzhGNwpcdTdFM0UKXHU2NzBCClx1NkRFMQpcdTVDMTYKXHU1NTVGClx1OTY3NwpcdTY3RjQKXHU1NDQ4Clx1NUY5MgpcdTk4NEYKXHU2RERBClx1N0EwRApcdTVGRDgKXHU2Q0Y1Clx1ODVDRApcdTYyRDYKXHU2RDFFClx1NjM4OApcdTkzRTEKXHU4RjlCClx1NThFRgpcdTkyRDIKXHU4Q0E3Clx1ODY1QgpcdTVGNEUKXHU2NDY5Clx1NkNGMApcdTVFN0MKXHU1RUY3Clx1NUMwQQpcdTdBOTcKXHU3REIxClx1NUYwNApcdTk2QjgKXHU3NTkxClx1NkMwRgpcdTVCQUUKXHU1OUQwClx1OTcwNwpcdTc0NUUKXHU2MDJBClx1NUMyNApcdTc0MzQKXHU1RkFBClx1NjNDRgpcdTgxOUMKXHU5MDU1Clx1NTkzRQpcdTgxNzAKXHU3REUzClx1NzNFMApcdTdBQUUKXHU2OEVFClx1Njc5RApcdTdBRjkKXHU2RTlEClx1NTBBQwpcdTdFNjkKXHU2MUI2Clx1OTBBNgpcdTUyNjkKXHU1RTc4Clx1NkYzRgpcdTZCMDQKXHU2NEMxClx1NzI1OQpcdThDQUYKXHU3OUFFClx1NkZGRQpcdTkyMDkKXHU3RDBCClx1N0Y3NwpcdTYyQ0QKXHU1NEIxClx1NTU4QQpcdTg4OTYKXHU1N0MzClx1NTJFNApcdTdGNzAKXHU3MTI2Clx1NkY1QgpcdTRGMEQKXHU1OEE4Clx1NkIzMgpcdTdFMkIKXHU1OUQzClx1NTIwQQpcdTk4RkQKXHU0RUZGClx1NzM0RQpcdTkyQzEKXHU5QjNDClx1OUU5NwpcdThERTgKXHU5RUQ4Clx1NjMxNgpcdTkzQzgKXHU2MzgzClx1NTU5RApcdTg4OEIKXHU3MEFEClx1NkM2MQpcdTVFNTUKXHU4QUY4Clx1NUYyNwpcdTUyRjUKXHU2ODg1Clx1NTk3NgpcdTZGNTQKXHU3MDdEClx1ODIxRgpcdTk0NTEKXHU4MkVGClx1OEExRgpcdTYyQjEKXHU2QkMwClx1NjFDMgpcdTVCRDIKXHU2NjdBClx1NTdENApcdTVCQzQKXHU1QzQ2Clx1OEU4RApcdTZFMjEKXHU2MzExClx1NEUzOQpcdTgyNzEKXHU4QzlEClx1NzhCMApcdTYyRDQKXHU3MjM5Clx1NjIzNApcdTc4QkMKXHU1OTIyClx1ODJCRApcdTcxOTQKXHU4RDY0Clx1NkYwMQpcdTU0RUQKXHU2NTZDClx1OTg0NgpcdTU5NTQKXHU5MjVCClx1NEVGMgpcdTg2NEUKXHU3QTAwClx1NTlCOQpcdTRFNEYKXHU3M0NEClx1NzUzMwpcdTY4NEMKXHU5MDc1Clx1NTE0MQpcdTk2ODYKXHU4N0JBClx1NTAwOQpcdTlCNEYKXHU5MkIzClx1NjZDOQpcdTZDMkUKXHU1MTdDClx1OTZCMQpcdTc5MTkKXHU4RDZCClx1NjRBNQpcdTVGRTAKXHU4MDg1Clx1N0YzOApcdTcyN0QKXHU2NDM2Clx1NTM1QQpcdTVERTcKXHU2QkJDClx1NTE0NApcdTY3NUMKXHU4QTBBClx1OEFBMApcdTc4QTcKXHU3OTY1Clx1NjdFRgpcdTk4MDEKXHU1REUxClx1NzdFOQpcdTYwQjIKXHU3MDRDClx1OUY2MQpcdTUwMkIKXHU3OTY4Clx1NUMwQgpcdTY4NDIKXHU5MkVBClx1ODA1NgpcdTYwNTAKXHU2MDcwClx1OTEyRApcdThEQTMKXHU2MkFDClx1ODM1MgpcdTlBMzAKXHU4Q0JDClx1NjdENApcdTZFRjQKXHU3MzFCClx1OTVDQQpcdThGMUIKXHU1OUJCClx1NTg2QgpcdTY0QTQKXHU1MTMyClx1N0MzRApcdTlCMjcKXHU2NEZFClx1N0QyQgpcdTc4MDIKXHU5MDVFClx1NjIzMgpcdTU0MEEKXHU5Njc2Clx1NEYxMApcdTk5MzUKXHU3NjQyClx1NzRGNgpcdTVBNDYKXHU2NEFCClx1ODFDMgpcdTY0NzgKXHU1RkNEClx1ODc2NgpcdTg4MUYKXHU5MTMwClx1ODBGOApcdTk3OEYKXHU2NEUwClx1NTA3NgpcdTY4QzQKXHU2OUZEClx1NTJDMQpcdTRFNzMKXHU5MTI3Clx1NTQwOQpcdTRFQzEKXHU3MjFCClx1NzhEQQpcdTc5REYKXHU3MENGClx1ODI2NgpcdTRGMzQKXHU3NERDClx1NkRGQQpcdTRFMTkKXHU2NkFCClx1NzFFNQpcdTZBNjEKXHU2N0YzClx1OEZGNwpcdTY2OTYKXHU3MjRDClx1NzlFNwpcdTgxQkQKXHU4QTczClx1N0MyNwpcdThFMEYKXHU3NEY3Clx1OEI1QwpcdTU0NDYKXHU4Q0QzClx1N0NDQQpcdTZEMUIKXHU4RjFEClx1NjFBNApcdTdBRjYKXHU5Njk5Clx1NjAxMgpcdTdDOTgKXHU0RTQzClx1N0REMgpcdTgwQTkKXHU3QzREClx1NjU0RgpcdTU4NTcKXHU3MTk5Clx1NzY4NgpcdTUwNzUKXHU2MUY4Clx1NjM5OApcdTRFQUIKXHU3Q0ZFClx1OTE5MgpcdTcyQzIKXHU5Mzk2Clx1NkRDMApcdTYwNjgKXHU3MjcyClx1OTczOApcdTcyMkMKXHU4Q0RFClx1OTAwNgpcdTczQTkKXHU5Njc1Clx1Nzk1RApcdTc5RDIKXHU2RDU5Clx1OEM4QwpcdTVGNzkKXHU1RjdDClx1NjA4OQpcdTlEMjgKXHU4REE4Clx1OUNGMwpcdTY2NjgKXHU3NTVDClx1OEYyOQpcdTc5RTkKXHU1Mzc1Clx1N0Y3MgpcdTY4QUYKXHU3MDhFClx1NzA1OApcdTY4Q0IKXHU5QTQ1Clx1N0JFOQpcdTVDRkQKXHU1MTkyClx1NTU2NQpcdTU4RkQKXHU4QjZGClx1NkQ3OApcdTZDQzkKXHU1RTNEClx1OTA3MgpcdTc3RkQKXHU3NTg2Clx1OENCOApcdTZGMEYKXHU3QTNGClx1NTFBMApcdTVBRTkKXHU4MTA1Clx1ODJBRgpcdTcyNjIKXHU1M0RCClx1ODc1NQpcdTU5NjcKXHU5Q0Y0Clx1NURCQQpcdTdGOEEKXHU2MTkxClx1NEUzMgpcdTU4NTgKXHU3RTZBClx1OTE3NQpcdTg3OEQKXHU3NkM2Clx1OTMyQgpcdTVFREYKXHU3QzRDClx1NTFDRApcdThGMTQKXHU2NTFEClx1ODk3MgpcdTdCNEIKXHU2MkQyClx1NTBEQQpcdTY1RjEKXHU5MjQwClx1OUNFNQpcdTZGMDYKXHU2Qzg4Clx1NzcwOQpcdTc1OEYKXHU2REZCClx1NjhEMgpcdTdBNTcKXHU3ODVEClx1OTdEMwpcdTkwM0MKXHU2MjZEClx1NTBEMQpcdTZEQkMKXHU2MzNBClx1Nzg5NwpcdTY4M0QKXHU3MDkyClx1Njc2RgpcdTYwQTMKXHU5OTNFClx1NTJGOApcdThDNkEKXHU5MDdDClx1NTJDMwpcdTlEM0IKXHU2NUU2Clx1NTQwRgpcdTYyREMKXHU3MkQ3Clx1NTdDQgpcdThGMjUKXHU2M0E5Clx1OThGMgpcdTY0MkMKXHU3Rjc1Clx1OEZBRApcdTUyRkUKXHU2MjYzClx1NEYzMApcdTg1MjMKXHU3RDY4Clx1OTcyNwpcdTRFMDgKXHU2NzM1Clx1NTlDNgpcdTY0RUMKXHU1Qjg3Clx1OEYyRgpcdTk2NUQKXHU5NkQ1Clx1NTExRgpcdTg0QzQKXHU1RDA3Clx1NTI2QQpcdTUwMjEKXHU1RUYzClx1NTRBQwpcdTk5REIKXHU4NUFGClx1NTIzNwpcdTY1QTUKXHU3NTZBClx1OENFNgpcdTU5NDkKXHU0RjVCClx1NkY4NgpcdTZGMkIKXHU2NkZDClx1NjI0NwpcdTkyMjMKXHU2ODQzClx1NjI3NgpcdTRFRDQKXHU4RkQ0Clx1NEZENwpcdTg2NjcKXHU4MTU0Clx1OTc4QgpcdTY4RjEKXHU4OTg2Clx1Njg0NgpcdTYwODQKXHU1M0Q0Clx1NjQ5RQpcdTlBMTkKXHU1MkQ4Clx1NjVGQQpcdTZDQjgKXHU1QjY0Clx1NTQxMApcdTVCNUYKXHU2RTIwClx1NUM0OApcdTc1QkUKXHU1OTk5Clx1NjBEQwpcdTRFRjAKXHU3MkUwClx1ODEzOQpcdThBRTcKXHU2MkNCClx1OUVGNApcdTY4NTEKXHU1RDE3Clx1NTYxQgpcdTg4NzAKXHU3NkRDClx1NkVGMgpcdTgxREYKXHU4Q0Y0Clx1NkU2NwpcdTc1MUMKXHU2NkY5Clx1OTVCMQpcdTgwOEMKXHU1NEU5Clx1NTNCMgpcdTcwRjQKXHU3REVGClx1NkJDNQpcdTY2MjgKXHU1MDdEClx1NzVDNwpcdTcxNkUKXHU1NjA2Clx1OTFEOApcdTY0MkQKXHU4Mzk2Clx1N0M2MApcdTkxNzcKXHU1MDc3Clx1NUYxMwpcdTkzMTAKXHU2MDQ2Clx1NTA5MQpcdTU3NTEKXHU5RjNCClx1N0ZGQwpcdTdEQjgKXHU2NTU4Clx1NzM0NApcdTkwMkUKXHU3RjUwClx1N0Q2MQpcdTY4REEKXHU2MjkxClx1ODFBOApcdTg1MkMKXHU1QkZBClx1OUE1RgpcdTdBNDYKXHU1MUI2Clx1NjdBRgpcdTUxOEEKXHU1QzREClx1NTFGOApcdTdEMzMKXHU1NzZGClx1NzJBNwpcdTcxMzAKXHU4RjVGClx1NkIyMwpcdTY2NDkKXHU3NjI2Clx1NzlBNgpcdTkzMjAKXHU5MzI2Clx1NTVBQQpcdTY1RUMKXHU5MzVCClx1NThERgpcdTY0MUMKXHU2NEIyClx1OTA4MApcdTRFQUQKXHU5MTZGClx1OTA4MQpcdTgyMTIKXHU4MTA2Clx1OTE3NgpcdTk1OTIKXHU2MTgyClx1OTE1QQpcdTk4MTEKXHU3RkJEClx1NkYzMgpcdTUzNzgKXHU0RUQ3Clx1OTY2QQpcdTk1RTIKXHU2MUYyClx1Njc2RApcdTU5REEKXHU4MDlBClx1NjM0OQpcdTk4QzQKXHU2RjAyClx1NjYwNgpcdTZCM0EKXHU1NDNFClx1OTBDRQpcdTcwRjcKXHU2QzQxClx1NTQ3NQpcdTk4RkUKXHU4NTZEClx1OTZDNQpcdTkwRjUKXHU5MDc3Clx1NzFENQpcdTY0OTIKXHU1OUZCClx1OEQ3NApcdTVCQjQKXHU3MTY5Clx1NTBCNQpcdTVFMzMKXHU2NTkxClx1OTIzNApcdTY1RTgKXHU5MTg3Clx1ODQ2MwpcdTk5MDUKXHU5NkRCClx1NTlGRgpcdTYyQ0MKXHU1MDg1Clx1ODE3OQpcdTU5QTUKXHU2M0M5Clx1OENFMgpcdTYyQzYKXHU2QjZBClx1ODQ2MQpcdTgwRkEKXHU0RTFGClx1NkQ2OQpcdTVGQkQKXHU2NjAyClx1NTg4QQpcdTY0Q0IKXHU4OUJEClx1OENBQQpcdTYxNzAKXHU3RTczClx1NkM2QQpcdTYxNEMKXHU5OUFFClx1OEFGRQpcdTU5REMKXHU4QUJDClx1NTE0NwpcdTUyQTMKXHU4QUEzClx1ODAwMApcdTY2MEYKXHU4RUJBClx1NzZDOApcdTlBMEUKXHU1NUFDClx1NkVBQQpcdTUzRTIKXHU3NkU3Clx1NjJCOQpcdTYwQjYKXHU4QUVFClx1NTIyRQpcdTk5RDUKXHU3RTlDClx1NjA5RgpcdTY0NTgKXHU5MjdBClx1NjRGMgpcdTk4MTcKXHU1RTdCClx1NjdDNApcdTYwRTAKXHU2MTU4Clx1NEY3MwpcdTRFQzcKXHU4MUQ4Clx1N0FBOQpcdTZFQ0MKXHU1MjhEClx1NzdBNwpcdTU4MjEKXHU2RjUxClx1ODUyNQpcdTdGNjkKXHU5NzBEClx1NjQ4OApcdTgwQ0UKXHU4NEJDClx1NkZGMQpcdTUwMDYKXHU2MzQ1Clx1NkU1OApcdTc4MEQKXHU5NzFFClx1OTBCNQpcdTg0MDQKXHU3NjBCClx1NkRFRQpcdTkwNDIKXHU3MThBClx1N0NERQpcdTcwRDgKXHU1QkJGClx1NkE5NApcdTYyMDgKXHU5OUMxClx1NUFDMgpcdTg4RDUKXHU1Rjk5Clx1N0JBRApcdTYzNTAKXHU4MTc4Clx1NjQ5MApcdTY2RUMKXHU4RkE4Clx1NkJCRgpcdTg0RUUKXHU2NTI0Clx1NjUyQQpcdTkxQUMKXHU1QzRGClx1NzVBQgpcdTU0QzAKXHU4NTIxClx1NTgzNQpcdTZDQUIKXHU3NkJBClx1NjZBMgpcdTc1OEEKXHU5NUEzClx1ODQwQQpcdTY1NzIKXHU4RjQ0Clx1OTI2NApcdTc1RDUKXHU1OEU5Clx1NURGNwpcdTk5MTMKXHU3OThEClx1NEUxOApcdTczODQKXHU2RTlDClx1NjZGMApcdTkwOEYKXHU1RjZEClx1NTYxNwpcdTUzN0YKXHU1OUE4Clx1ODI0NwpcdTU0MUUKXHU5N0NCClx1NjAyOApcdTc3RUUKXHU2QjQ3YC5zcGxpdCgiXG4iKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy9wcml2YXRlS2V5VG9BY2NvdW50LmpzCiAgaW5pdF9zZWNwMjU2azEoKTsKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvdG9BY2NvdW50LmpzCiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBmdW5jdGlvbiB0b0FjY291bnQoc291cmNlKSB7CiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gInN0cmluZyIpIHsKICAgICAgaWYgKCFpc0FkZHJlc3Moc291cmNlLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiBzb3VyY2UgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgYWRkcmVzczogc291cmNlLAogICAgICAgIHR5cGU6ICJqc29uLXJwYyIKICAgICAgfTsKICAgIH0KICAgIGlmICghaXNBZGRyZXNzKHNvdXJjZS5hZGRyZXNzLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogc291cmNlLmFkZHJlc3MgfSk7CiAgICByZXR1cm4gewogICAgICBhZGRyZXNzOiBzb3VyY2UuYWRkcmVzcywKICAgICAgbm9uY2VNYW5hZ2VyOiBzb3VyY2Uubm9uY2VNYW5hZ2VyLAogICAgICBzaWduOiBzb3VyY2Uuc2lnbiwKICAgICAgZXhwZXJpbWVudGFsX3NpZ25BdXRob3JpemF0aW9uOiBzb3VyY2UuZXhwZXJpbWVudGFsX3NpZ25BdXRob3JpemF0aW9uLAogICAgICBzaWduTWVzc2FnZTogc291cmNlLnNpZ25NZXNzYWdlLAogICAgICBzaWduVHJhbnNhY3Rpb246IHNvdXJjZS5zaWduVHJhbnNhY3Rpb24sCiAgICAgIHNpZ25UeXBlZERhdGE6IHNvdXJjZS5zaWduVHlwZWREYXRhLAogICAgICBzb3VyY2U6ICJjdXN0b20iLAogICAgICB0eXBlOiAibG9jYWwiCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9zaWduLmpzCiAgaW5pdF9zZWNwMjU2azEoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2lnbih7IGhhc2g6IGhhc2gzLCBwcml2YXRlS2V5LCB0byA9ICJvYmplY3QiIH0pIHsKICAgIGNvbnN0IHsgciwgcywgcmVjb3ZlcnkgfSA9IHNlY3AyNTZrMS5zaWduKGhhc2gzLnNsaWNlKDIpLCBwcml2YXRlS2V5LnNsaWNlKDIpKTsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHsKICAgICAgcjogbnVtYmVyVG9IZXgociwgeyBzaXplOiAzMiB9KSwKICAgICAgczogbnVtYmVyVG9IZXgocywgeyBzaXplOiAzMiB9KSwKICAgICAgdjogcmVjb3ZlcnkgPyAyOG4gOiAyN24sCiAgICAgIHlQYXJpdHk6IHJlY292ZXJ5CiAgICB9OwogICAgcmV0dXJuICgoKSA9PiB7CiAgICAgIGlmICh0byA9PT0gImJ5dGVzIiB8fCB0byA9PT0gImhleCIpCiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVNpZ25hdHVyZSh7IC4uLnNpZ25hdHVyZSwgdG8gfSk7CiAgICAgIHJldHVybiBzaWduYXR1cmU7CiAgICB9KSgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9zaWduQXV0aG9yaXphdGlvbi5qcwogIGFzeW5jIGZ1bmN0aW9uIGV4cGVyaW1lbnRhbF9zaWduQXV0aG9yaXphdGlvbihwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGNvbnRyYWN0QWRkcmVzcywgY2hhaW5JZCwgbm9uY2UsIHByaXZhdGVLZXksIHRvID0gIm9iamVjdCIgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzaWduKHsKICAgICAgaGFzaDogaGFzaEF1dGhvcml6YXRpb24oeyBjb250cmFjdEFkZHJlc3MsIGNoYWluSWQsIG5vbmNlIH0pLAogICAgICBwcml2YXRlS2V5LAogICAgICB0bwogICAgfSk7CiAgICBpZiAodG8gPT09ICJvYmplY3QiKQogICAgICByZXR1cm4gewogICAgICAgIGNvbnRyYWN0QWRkcmVzcywKICAgICAgICBjaGFpbklkLAogICAgICAgIG5vbmNlLAogICAgICAgIC4uLnNpZ25hdHVyZQogICAgICB9OwogICAgcmV0dXJuIHNpZ25hdHVyZTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvdXRpbHMvc2lnbk1lc3NhZ2UuanMKICBhc3luYyBmdW5jdGlvbiBzaWduTWVzc2FnZTIoeyBtZXNzYWdlLCBwcml2YXRlS2V5IH0pIHsKICAgIHJldHVybiBhd2FpdCBzaWduKHsgaGFzaDogaGFzaE1lc3NhZ2UobWVzc2FnZSksIHByaXZhdGVLZXksIHRvOiAiaGV4IiB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvdXRpbHMvc2lnblRyYW5zYWN0aW9uLmpzCiAgaW5pdF9rZWNjYWsyNTYoKTsKICBhc3luYyBmdW5jdGlvbiBzaWduVHJhbnNhY3Rpb24yKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgcHJpdmF0ZUtleSwgdHJhbnNhY3Rpb24sIHNlcmlhbGl6ZXIgPSBzZXJpYWxpemVUcmFuc2FjdGlvbiB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hYmxlVHJhbnNhY3Rpb24gPSAoKCkgPT4gewogICAgICBpZiAodHJhbnNhY3Rpb24udHlwZSA9PT0gImVpcDQ4NDQiKQogICAgICAgIHJldHVybiB7CiAgICAgICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgICAgIHNpZGVjYXJzOiBmYWxzZQogICAgICAgIH07CiAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgIH0pKCk7CiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzaWduKHsKICAgICAgaGFzaDoga2VjY2FrMjU2KHNlcmlhbGl6ZXIoc2lnbmFibGVUcmFuc2FjdGlvbikpLAogICAgICBwcml2YXRlS2V5CiAgICB9KTsKICAgIHJldHVybiBzZXJpYWxpemVyKHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9zaWduVHlwZWREYXRhLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2lnblR5cGVkRGF0YTIocGFyYW1ldGVycykgewogICAgY29uc3QgeyBwcml2YXRlS2V5LCAuLi50eXBlZERhdGEgfSA9IHBhcmFtZXRlcnM7CiAgICByZXR1cm4gYXdhaXQgc2lnbih7CiAgICAgIGhhc2g6IGhhc2hUeXBlZERhdGEodHlwZWREYXRhKSwKICAgICAgcHJpdmF0ZUtleSwKICAgICAgdG86ICJoZXgiCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvcHJpdmF0ZUtleVRvQWNjb3VudC5qcwogIGZ1bmN0aW9uIHByaXZhdGVLZXlUb0FjY291bnQocHJpdmF0ZUtleSwgb3B0aW9ucyA9IHt9KSB7CiAgICBjb25zdCB7IG5vbmNlTWFuYWdlcjogbm9uY2VNYW5hZ2VyMiB9ID0gb3B0aW9uczsKICAgIGNvbnN0IHB1YmxpY0tleSA9IHRvSGV4KHNlY3AyNTZrMS5nZXRQdWJsaWNLZXkocHJpdmF0ZUtleS5zbGljZSgyKSwgZmFsc2UpKTsKICAgIGNvbnN0IGFkZHJlc3MgPSBwdWJsaWNLZXlUb0FkZHJlc3MocHVibGljS2V5KTsKICAgIGNvbnN0IGFjY291bnQgPSB0b0FjY291bnQoewogICAgICBhZGRyZXNzLAogICAgICBub25jZU1hbmFnZXI6IG5vbmNlTWFuYWdlcjIsCiAgICAgIGFzeW5jIHNpZ24oeyBoYXNoOiBoYXNoMyB9KSB7CiAgICAgICAgcmV0dXJuIHNpZ24oeyBoYXNoOiBoYXNoMywgcHJpdmF0ZUtleSwgdG86ICJoZXgiIH0pOwogICAgICB9LAogICAgICBhc3luYyBleHBlcmltZW50YWxfc2lnbkF1dGhvcml6YXRpb24oYXV0aG9yaXphdGlvbikgewogICAgICAgIHJldHVybiBleHBlcmltZW50YWxfc2lnbkF1dGhvcml6YXRpb24oeyAuLi5hdXRob3JpemF0aW9uLCBwcml2YXRlS2V5IH0pOwogICAgICB9LAogICAgICBhc3luYyBzaWduTWVzc2FnZSh7IG1lc3NhZ2UgfSkgewogICAgICAgIHJldHVybiBzaWduTWVzc2FnZTIoeyBtZXNzYWdlLCBwcml2YXRlS2V5IH0pOwogICAgICB9LAogICAgICBhc3luYyBzaWduVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIHsgc2VyaWFsaXplciB9ID0ge30pIHsKICAgICAgICByZXR1cm4gc2lnblRyYW5zYWN0aW9uMih7IHByaXZhdGVLZXksIHRyYW5zYWN0aW9uLCBzZXJpYWxpemVyIH0pOwogICAgICB9LAogICAgICBhc3luYyBzaWduVHlwZWREYXRhKHR5cGVkRGF0YSkgewogICAgICAgIHJldHVybiBzaWduVHlwZWREYXRhMih7IC4uLnR5cGVkRGF0YSwgcHJpdmF0ZUtleSB9KTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gewogICAgICAuLi5hY2NvdW50LAogICAgICBwdWJsaWNLZXksCiAgICAgIHNvdXJjZTogInByaXZhdGVLZXkiCiAgICB9OwogIH0KCiAgLy8gbGlicy9zaGlua2FpLXZpZW0vc3JjL2luZGV4LnRzCiAgd2luZG93LnZpZW0gPSBlc21fZXhwb3J0czsKICB3aW5kb3cuY2hhaW5zID0gY2hhaW5zX2V4cG9ydHM7CiAgd2luZG93LmhvbGFEYW5pZWwgPSBmdW5jdGlvbigpIHsKICAgIGNvbnNvbGUubG9nKCJob2xhIERhbmllbDMzMzMiKTsKICB9OwogIHZhciBWaWVtUHJvdmlkZXIgPSBjbGFzcyB7CiAgICBjbGllbnQ7CiAgICBzZWxlY3RlZEFkZHJlc3M7CiAgICBjb25zdHJ1Y3RvcihjaGFpbiwgc2spIHsKICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IHNrOwogICAgICBjb25zdCBhY2NvdW50ID0gcHJpdmF0ZUtleVRvQWNjb3VudChwcml2YXRlS2V5KTsKICAgICAgdGhpcy5jbGllbnQgPSBjcmVhdGVXYWxsZXRDbGllbnQoewogICAgICAgIGFjY291bnQsCiAgICAgICAgY2hhaW46IGNoYWluIHx8IGJhc2VTZXBvbGlhLAogICAgICAgIHRyYW5zcG9ydDogaHR0cCgiaHR0cHM6Ly9zZXBvbGlhLmJhc2Uub3JnIikKICAgICAgfSkuZXh0ZW5kKHB1YmxpY0FjdGlvbnMpOwogICAgICB0aGlzLmNsaWVudC5nZXRBZGRyZXNzZXMoKS50aGVuKChhZGRyZXNzZXMpID0+IHsKICAgICAgICBjb25zb2xlLmxvZygiYWRkcmVzc2VzIiwgYWRkcmVzc2VzKTsKICAgICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IGFkZHJlc3Nlc1swXTsKICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBlbmFibGUoKSB7CiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RBY2NvdW50cygpOwogICAgfQogICAgYXN5bmMgcmVxdWVzdCh7IG1ldGhvZCwgcGFyYW1zIH0pIHsKICAgICAgY29uc29sZS5sb2coInJlcXVlc3QiLCBtZXRob2QsIHBhcmFtcyk7CiAgICAgIHN3aXRjaCAobWV0aG9kKSB7CiAgICAgICAgY2FzZSAiZXRoX3JlcXVlc3RBY2NvdW50cyI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0QWNjb3VudHMoKTsKICAgICAgICBjYXNlICJldGhfYWNjb3VudHMiOgogICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWNjb3VudHMoKTsKICAgICAgICBjYXNlICJldGhfc2VuZFRyYW5zYWN0aW9uIjoKICAgICAgICAgIHJldHVybiB0aGlzLnNlbmRUcmFuc2FjdGlvbihwYXJhbXNbMF0pOwogICAgICAgIGNhc2UgImV0aF9zaWduIjoKICAgICAgICAgIHJldHVybiB0aGlzLnNpZ24ocGFyYW1zWzBdLCBwYXJhbXNbMV0pOwogICAgICAgIGNhc2UgInBlcnNvbmFsX3NpZ24iOgogICAgICAgICAgcmV0dXJuIHRoaXMucGVyc29uYWxTaWduKHBhcmFtc1swXSwgcGFyYW1zWzFdKTsKICAgICAgICBjYXNlICJldGhfc2lnblR5cGVkRGF0YSI6CiAgICAgICAgICByZXR1cm4gdGhpcy5zaWduVHlwZWREYXRhKHBhcmFtc1swXSwgcGFyYW1zWzFdKTsKICAgICAgICBjYXNlICJldGhfY2hhaW5JZCI6CiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDaGFpbklkKCk7CiAgICAgICAgY2FzZSAibmV0X3ZlcnNpb24iOgogICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmV0d29ya0lkKCk7CiAgICAgICAgY2FzZSAiZXRoX2Jsb2NrTnVtYmVyIjoKICAgICAgICAgIHJldHVybiB0aGlzLmdldEJsb2NrTnVtYmVyKCk7CiAgICAgICAgY2FzZSAiZXRoX2dldFRyYW5zYWN0aW9uQ291bnQiOgogICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNhY3Rpb25Db3VudChwYXJhbXNbMF0pOwogICAgICAgIGNhc2UgImV0aF9nZXRUcmFuc2FjdGlvbkJ5SGFzaCI6CiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvbihwYXJhbXNbMF0pOwogICAgICAgIGNhc2UgImV0aF9nZXRUcmFuc2FjdGlvblJlY2VpcHQiOgogICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNhY3Rpb25SZWNlaXB0KHBhcmFtc1swXSk7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbWV0aG9kOiAke21ldGhvZH1gKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZ2V0VHJhbnNhY3Rpb24oaGFzaDMpIHsKICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRUcmFuc2FjdGlvbih7IGhhc2g6IGhhc2gzIH0pOwogICAgICBjb25zb2xlLmxvZygiZ2V0VHJhbnNhY3Rpb24iLCB0cmFuc2FjdGlvbik7CiAgICAgIGlmICh0cmFuc2FjdGlvbi50eXBlID09PSAiZWlwMTU1OSIpIHsKICAgICAgICB0cmFuc2FjdGlvbi50eXBlID0gIjB4MiI7CiAgICAgIH0KICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uOwogICAgfQogICAgYXN5bmMgZ2V0VHJhbnNhY3Rpb25SZWNlaXB0KGhhc2gzKSB7CiAgICAgIGNvbnN0IHJlY2VpcHQgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRUcmFuc2FjdGlvblJlY2VpcHQoeyBoYXNoOiBoYXNoMyB9KTsKICAgICAgY29uc29sZS5sb2coImdldFRyYW5zYWN0aW9uUmVjZWlwdCIsIHJlY2VpcHQpOwogICAgICBpZiAocmVjZWlwdC50eXBlID09PSAiZWlwMTU1OSIpIHsKICAgICAgICByZWNlaXB0LnR5cGUgPSAiMHgyIjsKICAgICAgfQogICAgICBpZiAocmVjZWlwdC5zdGF0dXMgPT09ICJzdWNjZXNzIikgewogICAgICAgIHJlY2VpcHQuc3RhdHVzID0gIjB4MSI7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlY2VpcHQ7CiAgICB9CiAgICBhc3luYyBnZXRUcmFuc2FjdGlvbkNvdW50KGFkZHJlc3MpIHsKICAgICAgY29uc3QgdHJhbnNhY3Rpb25Db3VudCA9IGF3YWl0IHRoaXMuY2xpZW50LmdldFRyYW5zYWN0aW9uQ291bnQoeyBhZGRyZXNzIH0pOwogICAgICBjb25zb2xlLmxvZygidHJhbnNhY3Rpb25Db3VudCIsIHRyYW5zYWN0aW9uQ291bnQpOwogICAgICByZXR1cm4gdHJhbnNhY3Rpb25Db3VudDsKICAgIH0KICAgIGFzeW5jIGdldEJsb2NrTnVtYmVyKCkgewogICAgICBjb25zdCBibG9ja051bWJlciA9IGF3YWl0IHRoaXMuY2xpZW50LmdldEJsb2NrTnVtYmVyKCk7CiAgICAgIGNvbnNvbGUubG9nKCJibG9ja051bWJlciIsIGJsb2NrTnVtYmVyKTsKICAgICAgcmV0dXJuIGJsb2NrTnVtYmVyOwogICAgfQogICAgYXN5bmMgcmVxdWVzdEFjY291bnRzKCkgewogICAgICBjb25zdCBbYWRkcmVzc10gPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRBZGRyZXNzZXMoKTsKICAgICAgY29uc29sZS5sb2coInJlcXVlc3RBY2NvdW50cyIsIGFkZHJlc3MpOwogICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IGFkZHJlc3M7CiAgICAgIHJldHVybiBbYWRkcmVzc107CiAgICB9CiAgICBhc3luYyBnZXRBY2NvdW50cygpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID8gW3RoaXMuc2VsZWN0ZWRBZGRyZXNzXSA6IFtdOwogICAgfQogICAgYXN5bmMgc2VuZFRyYW5zYWN0aW9uKHR4KSB7CiAgICAgIGlmICghdGhpcy5zZWxlY3RlZEFkZHJlc3MpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIGFjY291bnRzIGF2YWlsYWJsZSIpOwogICAgICB9CiAgICAgIGlmICghdHgudG8gfHwgIXR4LnZhbHVlIHx8ICF0eC5nYXMpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWlyZWQgdHJhbnNhY3Rpb24gcGFyYW1ldGVycyIpOwogICAgICB9CiAgICAgIGNvbnNvbGUubG9nKCJzZW5kVHJhbnNhY3Rpb24gdHg6ICIsIHR4KTsKICAgICAgY29uc29sZS5sb2coIlRyYW5zYWN0aW9uIGdhc1ByaWNlOiAiLCB0eC5nYXNQcmljZSk7CiAgICAgIGNvbnNvbGUubG9nKCJUcmFuc2FjdGlvbiBnYXM6ICIsIHR4Lmdhcyk7CiAgICAgIGNvbnN0IHZhbHVlID0gQmlnSW50KHR4LnZhbHVlKTsKICAgICAgY29uc3QgdmFsdWVJbkV0aCA9IE51bWJlcih2YWx1ZSkgLyAxMCAqKiAxODsKICAgICAgY29uc29sZS5sb2coYFRyYW5zYWN0aW9uIHZhbHVlIGluIEVUSDogJHt2YWx1ZUluRXRofWApOwogICAgICBjb25zdCB0cmFuc2FjdGlvbkNvbnRlbnQgPSB7CiAgICAgICAgdG86IHR4LnRvLAogICAgICAgIHZhbHVlLAogICAgICAgIGRhdGE6IHR4LmRhdGEsCiAgICAgICAgY2hhaW46IHRoaXMuY2xpZW50LmNoYWluCiAgICAgIH07CiAgICAgIGNvbnNvbGUubG9nKCJzZW5kVHJhbnNhY3Rpb24iLCB0cmFuc2FjdGlvbkNvbnRlbnQpOwogICAgICB0cnkgewogICAgICAgIGNvbnN0IHJlcXVlc3QgPSBhd2FpdCB0aGlzLmNsaWVudC5wcmVwYXJlVHJhbnNhY3Rpb25SZXF1ZXN0KHRyYW5zYWN0aW9uQ29udGVudCk7CiAgICAgICAgY29uc29sZS5sb2coIlByZXBhcmVkIHRyYW5zYWN0aW9uIHJlcXVlc3Q6IiwgcmVxdWVzdCk7CiAgICAgICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gYXdhaXQgdGhpcy5jbGllbnQuc2lnblRyYW5zYWN0aW9uKHJlcXVlc3QpOwogICAgICAgIGNvbnNvbGUubG9nKCJTZXJpYWxpemVkIHRyYW5zYWN0aW9uOiIsIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgICAgICAgY29uc3QgaGFzaDMgPSBhd2FpdCB0aGlzLmNsaWVudC5zZW5kUmF3VHJhbnNhY3Rpb24oewogICAgICAgICAgc2VyaWFsaXplZFRyYW5zYWN0aW9uCiAgICAgICAgfSk7CiAgICAgICAgY29uc29sZS5sb2coInNlbmRUcmFuc2FjdGlvbiBoYXNoIiwgaGFzaDMpOwogICAgICAgIHJldHVybiBoYXNoMzsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJzZW5kVHJhbnNhY3Rpb24gZXJyb3IiLCBlcnJvcik7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHNpZ24oYWRkcmVzcywgbWVzc2FnZSkgewogICAgICBpZiAoYWRkcmVzcyAhPT0gdGhpcy5zZWxlY3RlZEFkZHJlc3MpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFkZHJlc3MgbWlzbWF0Y2giKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2lnbk1lc3NhZ2UoeyBhY2NvdW50OiBhZGRyZXNzLCBtZXNzYWdlIH0pOwogICAgfQogICAgYXN5bmMgcGVyc29uYWxTaWduKG1lc3NhZ2UsIGFkZHJlc3MpIHsKICAgICAgaWYgKGFkZHJlc3MgIT09IHRoaXMuc2VsZWN0ZWRBZGRyZXNzKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBZGRyZXNzIG1pc21hdGNoIik7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNpZ25NZXNzYWdlKHsgYWNjb3VudDogYWRkcmVzcywgbWVzc2FnZSB9KTsKICAgIH0KICAgIGFzeW5jIHNpZ25UeXBlZERhdGEoYWRkcmVzcywgdHlwZWREYXRhKSB7CiAgICAgIGlmIChhZGRyZXNzICE9PSB0aGlzLnNlbGVjdGVkQWRkcmVzcykgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiQWRkcmVzcyBtaXNtYXRjaCIpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zaWduVHlwZWREYXRhKHsKICAgICAgICBhY2NvdW50OiBhZGRyZXNzLAogICAgICAgIGRvbWFpbjogdHlwZWREYXRhLmRvbWFpbiwKICAgICAgICB0eXBlczogdHlwZWREYXRhLnR5cGVzLAogICAgICAgIG1lc3NhZ2U6IHR5cGVkRGF0YS5tZXNzYWdlLAogICAgICAgIHByaW1hcnlUeXBlOiB0eXBlZERhdGEucHJpbWFyeVR5cGUKICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBnZXRDaGFpbklkKCkgewogICAgICBjb25zdCBjaGFpbklkID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0Q2hhaW5JZCgpOwogICAgICBjb25zb2xlLmxvZygiZ2V0Q2hhaW5JZCIsIGNoYWluSWQpOwogICAgICByZXR1cm4gY2hhaW5JZDsKICAgIH0KICAgIGFzeW5jIGdldE5ldHdvcmtJZCgpIHsKICAgICAgY29uc3QgY2hhaW5JZCA9IGF3YWl0IHRoaXMuZ2V0Q2hhaW5JZCgpOwogICAgICByZXR1cm4gY2hhaW5JZC50b1N0cmluZygpOwogICAgfQogIH07CiAgZnVuY3Rpb24gYWRkRWlwNjk2M0xpc3RlbmVyKGluZm8sIHByb3ZpZGVyKSB7CiAgICBjb25zdCBhbm5vdW5jZUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KAogICAgICAiZWlwNjk2Mzphbm5vdW5jZVByb3ZpZGVyIiwKICAgICAgewogICAgICAgIGRldGFpbDogT2JqZWN0LmZyZWV6ZSh7IGluZm8sIHByb3ZpZGVyIH0pCiAgICAgIH0KICAgICk7CiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChhbm5vdW5jZUV2ZW50KTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJlaXA2OTYzOnJlcXVlc3RQcm92aWRlciIsICgpID0+IHsKICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoYW5ub3VuY2VFdmVudCk7CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gaW5pdGlhbGl6ZVZpZW1Qcm92aWRlcihjaGFpbiwgcHJvdmlkZXJJbmZvLCBzaykgewogICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgVmllbVByb3ZpZGVyKGNoYWluLCBzayk7CiAgICB3aW5kb3cuZXRoZXJldW0gPSB7CiAgICAgIHJlcXVlc3Q6IHByb3ZpZGVyLnJlcXVlc3QuYmluZChwcm92aWRlciksCiAgICAgIGVuYWJsZTogcHJvdmlkZXIuZW5hYmxlLmJpbmQocHJvdmlkZXIpLAogICAgICBvbjogKGV2ZW50TmFtZSwgY2FsbGJhY2spID0+IHsKICAgICAgICBjb25zb2xlLmxvZyhgRXZlbnQgbGlzdGVuZXIgZm9yICR7ZXZlbnROYW1lfSBhZGRlZC5gKTsKICAgICAgfSwKICAgICAgcmVtb3ZlTGlzdGVuZXI6IChldmVudE5hbWUsIGNhbGxiYWNrKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coYEV2ZW50IGxpc3RlbmVyIGZvciAke2V2ZW50TmFtZX0gcmVtb3ZlZC5gKTsKICAgICAgfSwKICAgICAgaXNDb25uZWN0ZWQ6ICgpID0+IHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSwKICAgICAgc2VuZDogKG1ldGhvZCwgcGFyYW1zKSA9PiB7CiAgICAgICAgY29uc29sZS53YXJuKCJzZW5kIGlzIGRlcHJlY2F0ZWQuIFVzZSByZXF1ZXN0IGluc3RlYWQuIik7CiAgICAgICAgcmV0dXJuIHByb3ZpZGVyLnJlcXVlc3QoeyBtZXRob2QsIHBhcmFtcyB9KTsKICAgICAgfSwKICAgICAgc2VuZEFzeW5jOiAocGF5bG9hZCwgY2FsbGJhY2spID0+IHsKICAgICAgICBjb25zb2xlLndhcm4oInNlbmRBc3luYyBpcyBkZXByZWNhdGVkLiBVc2UgcmVxdWVzdCBpbnN0ZWFkLiIpOwogICAgICAgIHByb3ZpZGVyLnJlcXVlc3QoeyBtZXRob2Q6IHBheWxvYWQubWV0aG9kLCBwYXJhbXM6IHBheWxvYWQucGFyYW1zIH0pLnRoZW4oKHJlc3VsdCkgPT4gY2FsbGJhY2sobnVsbCwgeyByZXN1bHQgfSkpLmNhdGNoKChlcnJvcikgPT4gY2FsbGJhY2soZXJyb3IsIG51bGwpKTsKICAgICAgfSwKICAgICAgaXNNZXRhTWFzazogdHJ1ZSwKICAgICAgLy8gU2V0IHRvIHRydWUgaWYgbWltaWNraW5nIE1ldGFNYXNrCiAgICAgIHNlbGVjdGVkQWRkcmVzczogcHJvdmlkZXIuc2VsZWN0ZWRBZGRyZXNzLAogICAgICBjaGFpbklkOiBjaGFpbj8uaWQgfHwgIjB4MSIKICAgICAgLy8gRGVmYXVsdCB0byBtYWlubmV0IGlmIGNoYWluIGlzIG5vdCBwcm92aWRlZAogICAgfTsKICAgIGFkZEVpcDY5NjNMaXN0ZW5lcihwcm92aWRlckluZm8sIHByb3ZpZGVyKTsKICAgIGNvbnNvbGUubG9nKCJWaWVtIHByb3ZpZGVyIGluaXRpYWxpemVkIik7CiAgfQogIHZhciB2aWVtUHJvdmlkZXJJbmZvID0gewogICAgdXVpZDogImQ2OWJjNGM0LWU0M2EtNGQwYS04M2Q3LWI2ZTdiNzUwNGJlYiIsCiAgICBuYW1lOiAiU2hpbmthaSBWaWVtIFByb3ZpZGVyIiwKICAgIGljb246ICJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNelkzSWlCb1pXbG5hSFE5SWpNMk55SWdkbWxsZDBKdmVEMGlNQ0F3SURNMk55QXpOamNpSUdacGJHdzlJbTV2Ym1VaUlIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJK0NqeGphWEpqYkdVZ1kzZzlJakU0TXk0MUlpQmplVDBpTVRnekxqVWlJSEk5SWpFNE15NDFJaUJtYVd4c1BTSWpSa1UyTVRZeUlpOCtDanh3WVhSb0lHUTlJazB5TnpJdU1qazFJREkzTkM0Mk5qaERNamN3TGpjMU9DQXlOamd1T1RjMUlESTJOaTQyTVRrZ01qWTJMakl4TlNBeU5qQXVPRFEwSURJMk5pNDNOemxETWpRNUxqWTJOQ0F5TmpjdU9EWXpJREkwTlM0NU5USWdNalkwTGpJM09TQXlOREF1TmpRMklESTFOaTQwTURSRE1qVTBMall5T0NBeU5Ua3VNelkzSURJMk15NDJORFlnTWpVMUxqY3lOU0F5TmpZdU5EWXpJREkxTkM0eE1EZERNamN3TGpBNUlESTFNaTR3TVRJZ01qY3pMamMySURJME9TNHpNalFnTWpjeUxqTXdPU0F5TkRRdU5UZzFRekkzTUM0NE9EWWdNak01TGprME55QXlOall1TmpFNUlESXpPUzR3TWpJZ01qWXlMakl6T0NBeU16a3VPRFpETWpVMkxqQXlNaUF5TkRFdU1EUTFJREkxTUM0d05qSWdNalF4TGpjek9DQXlORFV1TWpJMklESXpOUzQyT0RSRE1qUTJMakkxSURJek5DNDNOVGtnTWpRM0xqSTNOQ0F5TXpNdU9EQTJJREkwT0M0ek1qY2dNak15TGpnNU5VTXlOVEF1T1RBeUlESXpNQzQyT0RVZ01qVXlMamc1TXlBeU1qZ3VNRGcwSURJMU1TNDFPRFFnTWpJMExqVTNNME15TlRBdU16TXpJREl5TVM0eU1pQXlORGN1TVRZeElESXhPUzR5T1RrZ01qUXpMamt6TWlBeU1Ua3VPRGt4UXpJME1TNHpJREl5TUM0ek9ESWdNak0yTGpBeU15QXlNakl1TURNZ01qTTBMalF4TmlBeU1Ua3VNelF5VERJek5DNDBPRGNnTWpFNUxqTXhNME15TXpNdU9EYzFJREl4T1M0eE5qa2dNak15TGprek55QXlNVFl1TmpVMElESXpNaTQzTXpjZ01qRTBMamd4T1VNeU16RXVOems1SURJd05TNDRORFlnTWpNMUxqWTRNaUF4T1RjdU1qTTFJREkwTUM0NU1UWWdNVGt3TGpBNE1rTXlORGN1TkRRMUlERTRNUzR4T1RZZ01qVXhMamt5TmlBeE56RXVNems1SURJMU15NDVNVGNnTVRZd0xqVXpNME15TlRjdU1ETXlJREUwTXk0ME9ETWdNalV6TGpjek1pQXhNamN1TmpFNElESTBOQzQxTVRVZ01URXpMakF6T1VNeU16TXVOVGMzSURrMUxqY3lPRE1nTWpFNExqRTFPQ0E0TkM0ek1qYzRJREU1Tnk0NE5pQTRNQzR4TXpjMVF6RTVNeTR3T1RVZ056a3VNVFUxSURFNE9DNDBORFFnTnpndU5qTTBPQ0F4T0RNdU9UTTFJRGM0TGpVME9ERkRNVGM1TGpReE1TQTNPQzQyTXpRNElERTNOQzQzTnpRZ056a3VNVFUxSURFM01DNHdNRGtnT0RBdU1UTTNOVU14TkRrdU56STJJRGcwTGpNeU56Z2dNVE0wTGpJNU15QTVOUzQzTWpneklERXlNeTR6TlRRZ01URXpMakF6T1VNeE1UUXVNVFV4SURFeU55NDJNVGdnTVRFd0xqZzFNU0F4TkRNdU5EZ3pJREV4TXk0NU5USWdNVFl3TGpVek0wTXhNVFV1T1RJNUlERTNNUzQwTVRRZ01USXdMalF5TkNBeE9ERXVNVGsySURFeU5pNDVOVE1nTVRrd0xqQTRNa014TXpJdU1qQXlJREU1Tnk0eU16VWdNVE0yTGpBNE5TQXlNRFV1T0RNeUlERXpOUzR4TXpJZ01qRTBMamd4T1VNeE16UXVPVE16SURJeE5pNDJOVFFnTVRNekxqazVOQ0F5TVRrdU1UWTVJREV6TXk0ek9ESWdNakU1TGpNeE0wd3hNek11TkRVeklESXhPUzR6TkRKRE1UTXhMamcwTmlBeU1qSXVNREUxSURFeU5pNDFPRE1nTWpJd0xqTTRNaUF4TWpNdU9UTTRJREl4T1M0NE9URkRNVEl3TGpjeU15QXlNVGt1TWprNUlERXhOeTQxTXpjZ01qSXhMakl5SURFeE5pNHlPRFVnTWpJMExqVTNNME14TVRRdU9UYzJJREl5T0M0d09EUWdNVEUyTGprMU5DQXlNekF1TmpnMUlERXhPUzQxTkRJZ01qTXlMamc1TlVNeE1qQXVOVGsxSURJek15NDRNRFlnTVRJeExqWXhPU0F5TXpRdU56VTVJREV5TWk0Mk5ETWdNak0xTGpZNE5FTXhNVGN1T0RBM0lESTBNUzQzTXpnZ01URXhMamd6TXlBeU5ERXVNRFExSURFd05TNDJNekVnTWpNNUxqZzJRekV3TVM0eU5TQXlNemt1TURJeUlEazJMams0TWprZ01qTTVMamswTnlBNU5TNDFOakExSURJME5DNDFPRFZET1RRdU1UQTVOeUF5TkRrdU16STBJRGszTGpjM09UVWdNalV5TGpBeE1pQXhNREV1TkRBM0lESTFOQzR4TURkRE1UQTBMakl3T1NBeU5UVXVOekkxSURFeE15NHlOREVnTWpVNUxqTTFNaUF4TWpjdU1qSXpJREkxTmk0ME1EUkRNVEl4TGpreE9DQXlOalF1TWpjNUlERXhPQzR5TURVZ01qWTNMamcyTXlBeE1EY3VNREkxSURJMk5pNDNOemxETVRBeExqSTFJREkyTmk0eU1UVWdPVGN1TURrMk55QXlOamd1T1RjMUlEazFMalUzTkRjZ01qYzBMalkyT0VNNU5DNHdPREV5SURJNE1DNHlNekVnT1RjdU1ESTFOaUF5T0RRdU1qRTVJREV3TVM0Mk9URWdNamcyTGpnM09FTXhNRFF1TnpRNUlESTRPQzQyTVRJZ01UQTRMakUyTXlBeU9Ea3VNamt4SURFeE1TNDNOellnTWpnNUxqTTBPVU14TXpFdU5UWXlJREk0T1M0Mk1qTWdNVFEzTGpnNU1TQXlPREV1TkRVNUlERTJNaTQxT1RrZ01qWTVMakUzT0VNeE56QXVOamt5SURJMk1pNDBNVFVnTVRjM0xqTTBPU0F5TlRndU9Ua3hJREU0TXk0NU5Ea2dNalU0TGprd05FTXhPVEF1TlRRNUlESTFPQzQ1T1RFZ01UazNMakU1TVNBeU5qSXVOREUxSURJd05TNHlPVGtnTWpZNUxqRTNPRU15TWpBdU1EQTNJREk0TVM0ME5Ua2dNak0yTGpNek5pQXlPRGt1TmpJeklESTFOaTR4TWpJZ01qZzVMak0wT1VNeU5Ua3VOek0xSURJNE9TNHpNRFVnTWpZekxqRTBPQ0F5T0RndU5qRXlJREkyTmk0eU1EY2dNamcyTGpnM09FTXlOekF1T0RnMklESTROQzR5TVRrZ01qY3pMamd4TnlBeU9EQXVNak14SURJM01pNHpNak1nTWpjMExqWTJPRWd5TnpJdU1qazFXazB4TlRZdU5qSTBJREl3Tnk0eU5qSkRNVFV3TGpVd09DQXlNRGN1TWpRNElERTBOUzQwTlRrZ01qQXlMakV6TXlBeE5EVXVORFEwSURFNU5TNDVOak5ETVRRMUxqUTBOQ0F4T0RrdU5qYzRJREUxTUM0MU5URWdNVGcwTGpVek5DQXhOVFl1T0RVeUlERTROQzQwTnpaRE1UWXlMamcwSURFNE5DNDBNVGdnTVRZNExqRTNOQ0F4T1RBdU1EazNJREUyT0M0eE1UY2dNVGsyTGpRMk9VTXhOamd1TURZeElESXdNaTQzT0RNZ01UWXpMakkxTXlBeU1EY3VNamt4SURFMU5pNDJNalFnTWpBM0xqSTJNbHBOTWpFeExqSXpNU0F5TURjdU1qWXlRekl3TkM0MU9EZ2dNakEzTGpJNU1TQXhPVGt1TnprMUlESXdNaTQzTmprZ01UazVMamN6T0NBeE9UWXVORFk1UXpFNU9TNDJPREVnTVRrd0xqQTVOeUF5TURVdU1ESTVJREU0TkM0ME1UZ2dNakV4TGpBd015QXhPRFF1TkRjMlF6SXhOeTR6TURRZ01UZzBMalUwT0NBeU1qSXVOREV4SURFNE9TNDJPVElnTWpJeUxqUXhNU0F4T1RVdU9UWXpRekl5TWk0ME1URWdNakF5TGpFek15QXlNVGN1TXpRM0lESXdOeTR5TkRnZ01qRXhMakl6TVNBeU1EY3VNall5V2lJZ1ptbHNiRDBpZDJocGRHVWlMejRLUEM5emRtYytDZz09IiwKICAgIC8vIEJhc2U2NCBlbmNvZGVkIGljb24KICAgIHJkbnM6ICJjb20uc2hpbmthaS5kZXNrdG9wIgogIH07CiAgd2luZG93LmluaXRWaWVtUHJvdmlkZXIgPSBmdW5jdGlvbihzaykgewogICAgY29uc29sZS5sb2coYGhvbGEgRGFuaWVsLCB2YW1vcyBhIGluaWNpYWxpemFyIGVsIHByb3ZpZGVyIGNvbiBsYSBzazogJHtza31gKTsKICAgIGluaXRpYWxpemVWaWVtUHJvdmlkZXIoYmFzZVNlcG9saWEsIHZpZW1Qcm92aWRlckluZm8sIHNrKTsKICB9Owp9KSgpOwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKQG5vYmxlL2hhc2hlcy9lc20vdXRpbHMuanM6CiAgKCohIG5vYmxlLWhhc2hlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqKQoKQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvdXRpbHMuanM6CiAgKCohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqKQoKQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvbW9kdWxhci5qczoKICAoKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICopCgpAbm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC9jdXJ2ZS5qczoKICAoKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICopCgpAbm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC93ZWllcnN0cmFzcy5qczoKICAoKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICopCgpAbm9ibGUvY3VydmVzL2VzbS9fc2hvcnR3X3V0aWxzLmpzOgogICgqISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKikKCkBub2JsZS9jdXJ2ZXMvZXNtL3NlY3AyNTZrMS5qczoKICAoKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICopCiovCg=="; +export const viemScriptContent = "InVzZSBzdHJpY3QiOwooKCkgPT4gewogIHZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7CiAgdmFyIF9fZXNtID0gKGZuLCByZXMpID0+IGZ1bmN0aW9uIF9faW5pdCgpIHsKICAgIHJldHVybiBmbiAmJiAocmVzID0gKDAsIGZuW19fZ2V0T3duUHJvcE5hbWVzKGZuKVswXV0pKGZuID0gMCkpLCByZXM7CiAgfTsKICB2YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHsKICAgIGZvciAodmFyIG5hbWUgaW4gYWxsKQogICAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pOwogIH07CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL3ZlcnNpb24uanMKICB2YXIgdmVyc2lvbjsKICB2YXIgaW5pdF92ZXJzaW9uID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL3ZlcnNpb24uanMiKCkgewogICAgICB2ZXJzaW9uID0gIjEuMC41IjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vZXJyb3JzLmpzCiAgdmFyIEJhc2VFcnJvcjsKICB2YXIgaW5pdF9lcnJvcnMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vZXJyb3JzLmpzIigpIHsKICAgICAgaW5pdF92ZXJzaW9uKCk7CiAgICAgIEJhc2VFcnJvciA9IGNsYXNzIF9CYXNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3Ioc2hvcnRNZXNzYWdlLCBhcmdzID0ge30pIHsKICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSBhcmdzLmNhdXNlIGluc3RhbmNlb2YgX0Jhc2VFcnJvciA/IGFyZ3MuY2F1c2UuZGV0YWlscyA6IGFyZ3MuY2F1c2U/Lm1lc3NhZ2UgPyBhcmdzLmNhdXNlLm1lc3NhZ2UgOiBhcmdzLmRldGFpbHM7CiAgICAgICAgICBjb25zdCBkb2NzUGF0aDkgPSBhcmdzLmNhdXNlIGluc3RhbmNlb2YgX0Jhc2VFcnJvciA/IGFyZ3MuY2F1c2UuZG9jc1BhdGggfHwgYXJncy5kb2NzUGF0aCA6IGFyZ3MuZG9jc1BhdGg7CiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gWwogICAgICAgICAgICBzaG9ydE1lc3NhZ2UgfHwgIkFuIGVycm9yIG9jY3VycmVkLiIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICAuLi5hcmdzLm1ldGFNZXNzYWdlcyA/IFsuLi5hcmdzLm1ldGFNZXNzYWdlcywgIiJdIDogW10sCiAgICAgICAgICAgIC4uLmRvY3NQYXRoOSA/IFtgRG9jczogaHR0cHM6Ly9hYml0eXBlLmRldiR7ZG9jc1BhdGg5fWBdIDogW10sCiAgICAgICAgICAgIC4uLmRldGFpbHMgPyBbYERldGFpbHM6ICR7ZGV0YWlsc31gXSA6IFtdLAogICAgICAgICAgICBgVmVyc2lvbjogYWJpdHlwZUAke3ZlcnNpb259YAogICAgICAgICAgXS5qb2luKCJcbiIpOwogICAgICAgICAgc3VwZXIobWVzc2FnZSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRldGFpbHMiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkb2NzUGF0aCIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm1ldGFNZXNzYWdlcyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNob3J0TWVzc2FnZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiQWJpVHlwZUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoYXJncy5jYXVzZSkKICAgICAgICAgICAgdGhpcy5jYXVzZSA9IGFyZ3MuY2F1c2U7CiAgICAgICAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzOwogICAgICAgICAgdGhpcy5kb2NzUGF0aCA9IGRvY3NQYXRoOTsKICAgICAgICAgIHRoaXMubWV0YU1lc3NhZ2VzID0gYXJncy5tZXRhTWVzc2FnZXM7CiAgICAgICAgICB0aGlzLnNob3J0TWVzc2FnZSA9IHNob3J0TWVzc2FnZTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL3JlZ2V4LmpzCiAgZnVuY3Rpb24gZXhlY1R5cGVkKHJlZ2V4LCBzdHJpbmcpIHsKICAgIGNvbnN0IG1hdGNoID0gcmVnZXguZXhlYyhzdHJpbmcpOwogICAgcmV0dXJuIG1hdGNoPy5ncm91cHM7CiAgfQogIHZhciBieXRlc1JlZ2V4LCBpbnRlZ2VyUmVnZXgsIGlzVHVwbGVSZWdleDsKICB2YXIgaW5pdF9yZWdleCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9yZWdleC5qcyIoKSB7CiAgICAgIGJ5dGVzUmVnZXggPSAvXmJ5dGVzKFsxLTldfDFbMC05XXwyWzAtOV18M1swLTJdKT8kLzsKICAgICAgaW50ZWdlclJlZ2V4ID0gL151P2ludCg4fDE2fDI0fDMyfDQwfDQ4fDU2fDY0fDcyfDgwfDg4fDk2fDEwNHwxMTJ8MTIwfDEyOHwxMzZ8MTQ0fDE1MnwxNjB8MTY4fDE3NnwxODR8MTkyfDIwMHwyMDh8MjE2fDIyNHwyMzJ8MjQwfDI0OHwyNTYpPyQvOwogICAgICBpc1R1cGxlUmVnZXggPSAvXlwoLis/XCkuKj8kLzsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZm9ybWF0QWJpUGFyYW1ldGVyLmpzCiAgZnVuY3Rpb24gZm9ybWF0QWJpUGFyYW1ldGVyKGFiaVBhcmFtZXRlcikgewogICAgbGV0IHR5cGUgPSBhYmlQYXJhbWV0ZXIudHlwZTsKICAgIGlmICh0dXBsZVJlZ2V4LnRlc3QoYWJpUGFyYW1ldGVyLnR5cGUpICYmICJjb21wb25lbnRzIiBpbiBhYmlQYXJhbWV0ZXIpIHsKICAgICAgdHlwZSA9ICIoIjsKICAgICAgY29uc3QgbGVuZ3RoID0gYWJpUGFyYW1ldGVyLmNvbXBvbmVudHMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gYWJpUGFyYW1ldGVyLmNvbXBvbmVudHNbaV07CiAgICAgICAgdHlwZSArPSBmb3JtYXRBYmlQYXJhbWV0ZXIoY29tcG9uZW50KTsKICAgICAgICBpZiAoaSA8IGxlbmd0aCAtIDEpCiAgICAgICAgICB0eXBlICs9ICIsICI7CiAgICAgIH0KICAgICAgY29uc3QgcmVzdWx0ID0gZXhlY1R5cGVkKHR1cGxlUmVnZXgsIGFiaVBhcmFtZXRlci50eXBlKTsKICAgICAgdHlwZSArPSBgKSR7cmVzdWx0Py5hcnJheSA/PyAiIn1gOwogICAgICByZXR1cm4gZm9ybWF0QWJpUGFyYW1ldGVyKHsKICAgICAgICAuLi5hYmlQYXJhbWV0ZXIsCiAgICAgICAgdHlwZQogICAgICB9KTsKICAgIH0KICAgIGlmICgiaW5kZXhlZCIgaW4gYWJpUGFyYW1ldGVyICYmIGFiaVBhcmFtZXRlci5pbmRleGVkKQogICAgICB0eXBlID0gYCR7dHlwZX0gaW5kZXhlZGA7CiAgICBpZiAoYWJpUGFyYW1ldGVyLm5hbWUpCiAgICAgIHJldHVybiBgJHt0eXBlfSAke2FiaVBhcmFtZXRlci5uYW1lfWA7CiAgICByZXR1cm4gdHlwZTsKICB9CiAgdmFyIHR1cGxlUmVnZXg7CiAgdmFyIGluaXRfZm9ybWF0QWJpUGFyYW1ldGVyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Zvcm1hdEFiaVBhcmFtZXRlci5qcyIoKSB7CiAgICAgIGluaXRfcmVnZXgoKTsKICAgICAgdHVwbGVSZWdleCA9IC9edHVwbGUoPzxhcnJheT4oXFsoXGQqKVxdKSopJC87CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Zvcm1hdEFiaVBhcmFtZXRlcnMuanMKICBmdW5jdGlvbiBmb3JtYXRBYmlQYXJhbWV0ZXJzKGFiaVBhcmFtZXRlcnMpIHsKICAgIGxldCBwYXJhbXMgPSAiIjsKICAgIGNvbnN0IGxlbmd0aCA9IGFiaVBhcmFtZXRlcnMubGVuZ3RoOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhYmlQYXJhbWV0ZXIgPSBhYmlQYXJhbWV0ZXJzW2ldOwogICAgICBwYXJhbXMgKz0gZm9ybWF0QWJpUGFyYW1ldGVyKGFiaVBhcmFtZXRlcik7CiAgICAgIGlmIChpICE9PSBsZW5ndGggLSAxKQogICAgICAgIHBhcmFtcyArPSAiLCAiOwogICAgfQogICAgcmV0dXJuIHBhcmFtczsKICB9CiAgdmFyIGluaXRfZm9ybWF0QWJpUGFyYW1ldGVycyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9mb3JtYXRBYmlQYXJhbWV0ZXJzLmpzIigpIHsKICAgICAgaW5pdF9mb3JtYXRBYmlQYXJhbWV0ZXIoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZm9ybWF0QWJpSXRlbS5qcwogIGZ1bmN0aW9uIGZvcm1hdEFiaUl0ZW0oYWJpSXRlbSkgewogICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImZ1bmN0aW9uIikKICAgICAgcmV0dXJuIGBmdW5jdGlvbiAke2FiaUl0ZW0ubmFtZX0oJHtmb3JtYXRBYmlQYXJhbWV0ZXJzKGFiaUl0ZW0uaW5wdXRzKX0pJHthYmlJdGVtLnN0YXRlTXV0YWJpbGl0eSAmJiBhYmlJdGVtLnN0YXRlTXV0YWJpbGl0eSAhPT0gIm5vbnBheWFibGUiID8gYCAke2FiaUl0ZW0uc3RhdGVNdXRhYmlsaXR5fWAgOiAiIn0ke2FiaUl0ZW0ub3V0cHV0cy5sZW5ndGggPyBgIHJldHVybnMgKCR7Zm9ybWF0QWJpUGFyYW1ldGVycyhhYmlJdGVtLm91dHB1dHMpfSlgIDogIiJ9YDsKICAgIGlmIChhYmlJdGVtLnR5cGUgPT09ICJldmVudCIpCiAgICAgIHJldHVybiBgZXZlbnQgJHthYmlJdGVtLm5hbWV9KCR7Zm9ybWF0QWJpUGFyYW1ldGVycyhhYmlJdGVtLmlucHV0cyl9KWA7CiAgICBpZiAoYWJpSXRlbS50eXBlID09PSAiZXJyb3IiKQogICAgICByZXR1cm4gYGVycm9yICR7YWJpSXRlbS5uYW1lfSgke2Zvcm1hdEFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMpfSlgOwogICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImNvbnN0cnVjdG9yIikKICAgICAgcmV0dXJuIGBjb25zdHJ1Y3Rvcigke2Zvcm1hdEFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMpfSkke2FiaUl0ZW0uc3RhdGVNdXRhYmlsaXR5ID09PSAicGF5YWJsZSIgPyAiIHBheWFibGUiIDogIiJ9YDsKICAgIGlmIChhYmlJdGVtLnR5cGUgPT09ICJmYWxsYmFjayIpCiAgICAgIHJldHVybiAiZmFsbGJhY2soKSI7CiAgICByZXR1cm4gInJlY2VpdmUoKSBleHRlcm5hbCBwYXlhYmxlIjsKICB9CiAgdmFyIGluaXRfZm9ybWF0QWJpSXRlbSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9mb3JtYXRBYmlJdGVtLmpzIigpIHsKICAgICAgaW5pdF9mb3JtYXRBYmlQYXJhbWV0ZXJzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvc2lnbmF0dXJlcy5qcwogIGZ1bmN0aW9uIGlzRXJyb3JTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gZXJyb3JTaWduYXR1cmVSZWdleC50ZXN0KHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGV4ZWNFcnJvclNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBleGVjVHlwZWQoZXJyb3JTaWduYXR1cmVSZWdleCwgc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gaXNFdmVudFNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBldmVudFNpZ25hdHVyZVJlZ2V4LnRlc3Qoc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gZXhlY0V2ZW50U2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIGV4ZWNUeXBlZChldmVudFNpZ25hdHVyZVJlZ2V4LCBzaWduYXR1cmUpOwogIH0KICBmdW5jdGlvbiBpc0Z1bmN0aW9uU2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uU2lnbmF0dXJlUmVnZXgudGVzdChzaWduYXR1cmUpOwogIH0KICBmdW5jdGlvbiBleGVjRnVuY3Rpb25TaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gZXhlY1R5cGVkKGZ1bmN0aW9uU2lnbmF0dXJlUmVnZXgsIHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGlzU3RydWN0U2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIHN0cnVjdFNpZ25hdHVyZVJlZ2V4LnRlc3Qoc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gZXhlY1N0cnVjdFNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBleGVjVHlwZWQoc3RydWN0U2lnbmF0dXJlUmVnZXgsIHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGlzQ29uc3RydWN0b3JTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gY29uc3RydWN0b3JTaWduYXR1cmVSZWdleC50ZXN0KHNpZ25hdHVyZSk7CiAgfQogIGZ1bmN0aW9uIGV4ZWNDb25zdHJ1Y3RvclNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBleGVjVHlwZWQoY29uc3RydWN0b3JTaWduYXR1cmVSZWdleCwgc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gaXNGYWxsYmFja1NpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIHJldHVybiBmYWxsYmFja1NpZ25hdHVyZVJlZ2V4LnRlc3Qoc2lnbmF0dXJlKTsKICB9CiAgZnVuY3Rpb24gaXNSZWNlaXZlU2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgcmV0dXJuIHJlY2VpdmVTaWduYXR1cmVSZWdleC50ZXN0KHNpZ25hdHVyZSk7CiAgfQogIHZhciBlcnJvclNpZ25hdHVyZVJlZ2V4LCBldmVudFNpZ25hdHVyZVJlZ2V4LCBmdW5jdGlvblNpZ25hdHVyZVJlZ2V4LCBzdHJ1Y3RTaWduYXR1cmVSZWdleCwgY29uc3RydWN0b3JTaWduYXR1cmVSZWdleCwgZmFsbGJhY2tTaWduYXR1cmVSZWdleCwgcmVjZWl2ZVNpZ25hdHVyZVJlZ2V4LCBtb2RpZmllcnMsIGV2ZW50TW9kaWZpZXJzLCBmdW5jdGlvbk1vZGlmaWVyczsKICB2YXIgaW5pdF9zaWduYXR1cmVzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvc2lnbmF0dXJlcy5qcyIoKSB7CiAgICAgIGluaXRfcmVnZXgoKTsKICAgICAgZXJyb3JTaWduYXR1cmVSZWdleCA9IC9eZXJyb3IgKD88bmFtZT5bYS16QS1aJF9dW2EtekEtWjAtOSRfXSopXCgoPzxwYXJhbWV0ZXJzPi4qPylcKSQvOwogICAgICBldmVudFNpZ25hdHVyZVJlZ2V4ID0gL15ldmVudCAoPzxuYW1lPlthLXpBLVokX11bYS16QS1aMC05JF9dKilcKCg/PHBhcmFtZXRlcnM+Lio/KVwpJC87CiAgICAgIGZ1bmN0aW9uU2lnbmF0dXJlUmVnZXggPSAvXmZ1bmN0aW9uICg/PG5hbWU+W2EtekEtWiRfXVthLXpBLVowLTkkX10qKVwoKD88cGFyYW1ldGVycz4uKj8pXCkoPzogKD88c2NvcGU+ZXh0ZXJuYWx8cHVibGljezF9KSk/KD86ICg/PHN0YXRlTXV0YWJpbGl0eT5wdXJlfHZpZXd8bm9ucGF5YWJsZXxwYXlhYmxlezF9KSk/KD86IHJldHVybnNccz9cKCg/PHJldHVybnM+Lio/KVwpKT8kLzsKICAgICAgc3RydWN0U2lnbmF0dXJlUmVnZXggPSAvXnN0cnVjdCAoPzxuYW1lPlthLXpBLVokX11bYS16QS1aMC05JF9dKikgXHsoPzxwcm9wZXJ0aWVzPi4qPylcfSQvOwogICAgICBjb25zdHJ1Y3RvclNpZ25hdHVyZVJlZ2V4ID0gL15jb25zdHJ1Y3RvclwoKD88cGFyYW1ldGVycz4uKj8pXCkoPzpccyg/PHN0YXRlTXV0YWJpbGl0eT5wYXlhYmxlezF9KSk/JC87CiAgICAgIGZhbGxiYWNrU2lnbmF0dXJlUmVnZXggPSAvXmZhbGxiYWNrXChcKSBleHRlcm5hbCg/OlxzKD88c3RhdGVNdXRhYmlsaXR5PnBheWFibGV7MX0pKT8kLzsKICAgICAgcmVjZWl2ZVNpZ25hdHVyZVJlZ2V4ID0gL15yZWNlaXZlXChcKSBleHRlcm5hbCBwYXlhYmxlJC87CiAgICAgIG1vZGlmaWVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsKICAgICAgICAibWVtb3J5IiwKICAgICAgICAiaW5kZXhlZCIsCiAgICAgICAgInN0b3JhZ2UiLAogICAgICAgICJjYWxsZGF0YSIKICAgICAgXSk7CiAgICAgIGV2ZW50TW9kaWZpZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoWyJpbmRleGVkIl0pOwogICAgICBmdW5jdGlvbk1vZGlmaWVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsKICAgICAgICAiY2FsbGRhdGEiLAogICAgICAgICJtZW1vcnkiLAogICAgICAgICJzdG9yYWdlIgogICAgICBdKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL2FiaUl0ZW0uanMKICB2YXIgSW52YWxpZEFiaUl0ZW1FcnJvciwgVW5rbm93blR5cGVFcnJvciwgVW5rbm93blNvbGlkaXR5VHlwZUVycm9yOwogIHZhciBpbml0X2FiaUl0ZW0gPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL2FiaUl0ZW0uanMiKCkgewogICAgICBpbml0X2Vycm9ycygpOwogICAgICBJbnZhbGlkQWJpSXRlbUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgc2lnbmF0dXJlIH0pIHsKICAgICAgICAgIHN1cGVyKCJGYWlsZWQgdG8gcGFyc2UgQUJJIGl0ZW0uIiwgewogICAgICAgICAgICBkZXRhaWxzOiBgcGFyc2VBYmlJdGVtKCR7SlNPTi5zdHJpbmdpZnkoc2lnbmF0dXJlLCBudWxsLCAyKX0pYCwKICAgICAgICAgICAgZG9jc1BhdGg6ICIvYXBpL2h1bWFuI3BhcnNlYWJpaXRlbS0xIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZEFiaUl0ZW1FcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgVW5rbm93blR5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHR5cGUgfSkgewogICAgICAgICAgc3VwZXIoIlVua25vd24gdHlwZS4iLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBUeXBlICIke3R5cGV9IiBpcyBub3QgYSB2YWxpZCBBQkkgdHlwZS4gUGVyaGFwcyB5b3UgZm9yZ290IHRvIGluY2x1ZGUgYSBzdHJ1Y3Qgc2lnbmF0dXJlP2AKICAgICAgICAgICAgXQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiVW5rbm93blR5cGVFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgVW5rbm93blNvbGlkaXR5VHlwZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcigiVW5rbm93biB0eXBlLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIEFCSSB0eXBlLmBdCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJVbmtub3duU29saWRpdHlUeXBlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9hYmlQYXJhbWV0ZXIuanMKICB2YXIgSW52YWxpZEFiaVBhcmFtZXRlckVycm9yLCBJbnZhbGlkQWJpUGFyYW1ldGVyc0Vycm9yLCBJbnZhbGlkUGFyYW1ldGVyRXJyb3IsIFNvbGlkaXR5UHJvdGVjdGVkS2V5d29yZEVycm9yLCBJbnZhbGlkTW9kaWZpZXJFcnJvciwgSW52YWxpZEZ1bmN0aW9uTW9kaWZpZXJFcnJvciwgSW52YWxpZEFiaVR5cGVQYXJhbWV0ZXJFcnJvcjsKICB2YXIgaW5pdF9hYmlQYXJhbWV0ZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL2FiaVBhcmFtZXRlci5qcyIoKSB7CiAgICAgIGluaXRfZXJyb3JzKCk7CiAgICAgIEludmFsaWRBYmlQYXJhbWV0ZXJFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHBhcmFtIH0pIHsKICAgICAgICAgIHN1cGVyKCJGYWlsZWQgdG8gcGFyc2UgQUJJIHBhcmFtZXRlci4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IGBwYXJzZUFiaVBhcmFtZXRlcigke0pTT04uc3RyaW5naWZ5KHBhcmFtLCBudWxsLCAyKX0pYCwKICAgICAgICAgICAgZG9jc1BhdGg6ICIvYXBpL2h1bWFuI3BhcnNlYWJpcGFyYW1ldGVyLTEiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJJbnZhbGlkQWJpUGFyYW1ldGVyRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbXMgfSkgewogICAgICAgICAgc3VwZXIoIkZhaWxlZCB0byBwYXJzZSBBQkkgcGFyYW1ldGVycy4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IGBwYXJzZUFiaVBhcmFtZXRlcnMoJHtKU09OLnN0cmluZ2lmeShwYXJhbXMsIG51bGwsIDIpfSlgLAogICAgICAgICAgICBkb2NzUGF0aDogIi9hcGkvaHVtYW4jcGFyc2VhYmlwYXJhbWV0ZXJzLTEiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJJbnZhbGlkQWJpUGFyYW1ldGVyc0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkUGFyYW1ldGVyRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSB9KSB7CiAgICAgICAgICBzdXBlcigiSW52YWxpZCBBQkkgcGFyYW1ldGVyLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogcGFyYW0KICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJuYW1lIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogIkludmFsaWRQYXJhbWV0ZXJFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU29saWRpdHlQcm90ZWN0ZWRLZXl3b3JkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSwgbmFtZSB9KSB7CiAgICAgICAgICBzdXBlcigiSW52YWxpZCBBQkkgcGFyYW1ldGVyLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogcGFyYW0sCiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGAiJHtuYW1lfSIgaXMgYSBwcm90ZWN0ZWQgU29saWRpdHkga2V5d29yZC4gTW9yZSBpbmZvOiBodHRwczovL2RvY3Muc29saWRpdHlsYW5nLm9yZy9lbi9sYXRlc3QvY2hlYXRzaGVldC5odG1sYAogICAgICAgICAgICBdCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJTb2xpZGl0eVByb3RlY3RlZEtleXdvcmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgSW52YWxpZE1vZGlmaWVyRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSwgdHlwZSwgbW9kaWZpZXIgfSkgewogICAgICAgICAgc3VwZXIoIkludmFsaWQgQUJJIHBhcmFtZXRlci4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IHBhcmFtLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgTW9kaWZpZXIgIiR7bW9kaWZpZXJ9IiBub3QgYWxsb3dlZCR7dHlwZSA/IGAgaW4gIiR7dHlwZX0iIHR5cGVgIDogIiJ9LmAKICAgICAgICAgICAgXQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZE1vZGlmaWVyRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBwYXJhbSwgdHlwZSwgbW9kaWZpZXIgfSkgewogICAgICAgICAgc3VwZXIoIkludmFsaWQgQUJJIHBhcmFtZXRlci4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6IHBhcmFtLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgTW9kaWZpZXIgIiR7bW9kaWZpZXJ9IiBub3QgYWxsb3dlZCR7dHlwZSA/IGAgaW4gIiR7dHlwZX0iIHR5cGVgIDogIiJ9LmAsCiAgICAgICAgICAgICAgYERhdGEgbG9jYXRpb24gY2FuIG9ubHkgYmUgc3BlY2lmaWVkIGZvciBhcnJheSwgc3RydWN0LCBvciBtYXBwaW5nIHR5cGVzLCBidXQgIiR7bW9kaWZpZXJ9IiB3YXMgZ2l2ZW4uYAogICAgICAgICAgICBdCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJJbnZhbGlkRnVuY3Rpb25Nb2RpZmllckVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQWJpVHlwZVBhcmFtZXRlckVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYWJpUGFyYW1ldGVyIH0pIHsKICAgICAgICAgIHN1cGVyKCJJbnZhbGlkIEFCSSBwYXJhbWV0ZXIuIiwgewogICAgICAgICAgICBkZXRhaWxzOiBKU09OLnN0cmluZ2lmeShhYmlQYXJhbWV0ZXIsIG51bGwsIDIpLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsiQUJJIHBhcmFtZXRlciB0eXBlIGlzIGludmFsaWQuIl0KICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJuYW1lIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogIkludmFsaWRBYmlUeXBlUGFyYW1ldGVyRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zaWduYXR1cmUuanMKICB2YXIgSW52YWxpZFNpZ25hdHVyZUVycm9yLCBVbmtub3duU2lnbmF0dXJlRXJyb3IsIEludmFsaWRTdHJ1Y3RTaWduYXR1cmVFcnJvcjsKICB2YXIgaW5pdF9zaWduYXR1cmUgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvZXJyb3JzL3NpZ25hdHVyZS5qcyIoKSB7CiAgICAgIGluaXRfZXJyb3JzKCk7CiAgICAgIEludmFsaWRTaWduYXR1cmVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHNpZ25hdHVyZSwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihgSW52YWxpZCAke3R5cGV9IHNpZ25hdHVyZS5gLCB7CiAgICAgICAgICAgIGRldGFpbHM6IHNpZ25hdHVyZQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZFNpZ25hdHVyZUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBVbmtub3duU2lnbmF0dXJlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoeyBzaWduYXR1cmUgfSkgewogICAgICAgICAgc3VwZXIoIlVua25vd24gc2lnbmF0dXJlLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogc2lnbmF0dXJlCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJVbmtub3duU2lnbmF0dXJlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRTdHJ1Y3RTaWduYXR1cmVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHNpZ25hdHVyZSB9KSB7CiAgICAgICAgICBzdXBlcigiSW52YWxpZCBzdHJ1Y3Qgc2lnbmF0dXJlLiIsIHsKICAgICAgICAgICAgZGV0YWlsczogc2lnbmF0dXJlLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsiTm8gcHJvcGVydGllcyBleGlzdC4iXQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZFN0cnVjdFNpZ25hdHVyZUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9lcnJvcnMvc3RydWN0LmpzCiAgdmFyIENpcmN1bGFyUmVmZXJlbmNlRXJyb3I7CiAgdmFyIGluaXRfc3RydWN0ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zdHJ1Y3QuanMiKCkgewogICAgICBpbml0X2Vycm9ycygpOwogICAgICBDaXJjdWxhclJlZmVyZW5jZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKHsgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYFN0cnVjdCAiJHt0eXBlfSIgaXMgYSBjaXJjdWxhciByZWZlcmVuY2UuYF0KICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJuYW1lIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogIkNpcmN1bGFyUmVmZXJlbmNlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zcGxpdFBhcmFtZXRlcnMuanMKICB2YXIgSW52YWxpZFBhcmVudGhlc2lzRXJyb3I7CiAgdmFyIGluaXRfc3BsaXRQYXJhbWV0ZXJzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL2Vycm9ycy9zcGxpdFBhcmFtZXRlcnMuanMiKCkgewogICAgICBpbml0X2Vycm9ycygpOwogICAgICBJbnZhbGlkUGFyZW50aGVzaXNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGN1cnJlbnQsIGRlcHRoIH0pIHsKICAgICAgICAgIHN1cGVyKCJVbmJhbGFuY2VkIHBhcmVudGhlc2VzLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgYCIke2N1cnJlbnQudHJpbSgpfSIgaGFzIHRvbyBtYW55ICR7ZGVwdGggPiAwID8gIm9wZW5pbmciIDogImNsb3NpbmcifSBwYXJlbnRoZXNlcy5gCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIGRldGFpbHM6IGBEZXB0aCAiJHtkZXB0aH0iYAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiAiSW52YWxpZFBhcmVudGhlc2lzRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvY2FjaGUuanMKICBmdW5jdGlvbiBnZXRQYXJhbWV0ZXJDYWNoZUtleShwYXJhbSwgdHlwZSkgewogICAgaWYgKHR5cGUpCiAgICAgIHJldHVybiBgJHt0eXBlfToke3BhcmFtfWA7CiAgICByZXR1cm4gcGFyYW07CiAgfQogIHZhciBwYXJhbWV0ZXJDYWNoZTsKICB2YXIgaW5pdF9jYWNoZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL2NhY2hlLmpzIigpIHsKICAgICAgcGFyYW1ldGVyQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbCiAgICAgICAgLy8gVW5uYW1lZAogICAgICAgIFsiYWRkcmVzcyIsIHsgdHlwZTogImFkZHJlc3MiIH1dLAogICAgICAgIFsiYm9vbCIsIHsgdHlwZTogImJvb2wiIH1dLAogICAgICAgIFsiYnl0ZXMiLCB7IHR5cGU6ICJieXRlcyIgfV0sCiAgICAgICAgWyJieXRlczMyIiwgeyB0eXBlOiAiYnl0ZXMzMiIgfV0sCiAgICAgICAgWyJpbnQiLCB7IHR5cGU6ICJpbnQyNTYiIH1dLAogICAgICAgIFsiaW50MjU2IiwgeyB0eXBlOiAiaW50MjU2IiB9XSwKICAgICAgICBbInN0cmluZyIsIHsgdHlwZTogInN0cmluZyIgfV0sCiAgICAgICAgWyJ1aW50IiwgeyB0eXBlOiAidWludDI1NiIgfV0sCiAgICAgICAgWyJ1aW50OCIsIHsgdHlwZTogInVpbnQ4IiB9XSwKICAgICAgICBbInVpbnQxNiIsIHsgdHlwZTogInVpbnQxNiIgfV0sCiAgICAgICAgWyJ1aW50MjQiLCB7IHR5cGU6ICJ1aW50MjQiIH1dLAogICAgICAgIFsidWludDMyIiwgeyB0eXBlOiAidWludDMyIiB9XSwKICAgICAgICBbInVpbnQ2NCIsIHsgdHlwZTogInVpbnQ2NCIgfV0sCiAgICAgICAgWyJ1aW50OTYiLCB7IHR5cGU6ICJ1aW50OTYiIH1dLAogICAgICAgIFsidWludDExMiIsIHsgdHlwZTogInVpbnQxMTIiIH1dLAogICAgICAgIFsidWludDE2MCIsIHsgdHlwZTogInVpbnQxNjAiIH1dLAogICAgICAgIFsidWludDE5MiIsIHsgdHlwZTogInVpbnQxOTIiIH1dLAogICAgICAgIFsidWludDI1NiIsIHsgdHlwZTogInVpbnQyNTYiIH1dLAogICAgICAgIC8vIE5hbWVkCiAgICAgICAgWyJhZGRyZXNzIG93bmVyIiwgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJvd25lciIgfV0sCiAgICAgICAgWyJhZGRyZXNzIHRvIiwgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJ0byIgfV0sCiAgICAgICAgWyJib29sIGFwcHJvdmVkIiwgeyB0eXBlOiAiYm9vbCIsIG5hbWU6ICJhcHByb3ZlZCIgfV0sCiAgICAgICAgWyJieXRlcyBfZGF0YSIsIHsgdHlwZTogImJ5dGVzIiwgbmFtZTogIl9kYXRhIiB9XSwKICAgICAgICBbImJ5dGVzIGRhdGEiLCB7IHR5cGU6ICJieXRlcyIsIG5hbWU6ICJkYXRhIiB9XSwKICAgICAgICBbImJ5dGVzIHNpZ25hdHVyZSIsIHsgdHlwZTogImJ5dGVzIiwgbmFtZTogInNpZ25hdHVyZSIgfV0sCiAgICAgICAgWyJieXRlczMyIGhhc2giLCB7IHR5cGU6ICJieXRlczMyIiwgbmFtZTogImhhc2giIH1dLAogICAgICAgIFsiYnl0ZXMzMiByIiwgeyB0eXBlOiAiYnl0ZXMzMiIsIG5hbWU6ICJyIiB9XSwKICAgICAgICBbImJ5dGVzMzIgcm9vdCIsIHsgdHlwZTogImJ5dGVzMzIiLCBuYW1lOiAicm9vdCIgfV0sCiAgICAgICAgWyJieXRlczMyIHMiLCB7IHR5cGU6ICJieXRlczMyIiwgbmFtZTogInMiIH1dLAogICAgICAgIFsic3RyaW5nIG5hbWUiLCB7IHR5cGU6ICJzdHJpbmciLCBuYW1lOiAibmFtZSIgfV0sCiAgICAgICAgWyJzdHJpbmcgc3ltYm9sIiwgeyB0eXBlOiAic3RyaW5nIiwgbmFtZTogInN5bWJvbCIgfV0sCiAgICAgICAgWyJzdHJpbmcgdG9rZW5VUkkiLCB7IHR5cGU6ICJzdHJpbmciLCBuYW1lOiAidG9rZW5VUkkiIH1dLAogICAgICAgIFsidWludCB0b2tlbklkIiwgeyB0eXBlOiAidWludDI1NiIsIG5hbWU6ICJ0b2tlbklkIiB9XSwKICAgICAgICBbInVpbnQ4IHYiLCB7IHR5cGU6ICJ1aW50OCIsIG5hbWU6ICJ2IiB9XSwKICAgICAgICBbInVpbnQyNTYgYmFsYW5jZSIsIHsgdHlwZTogInVpbnQyNTYiLCBuYW1lOiAiYmFsYW5jZSIgfV0sCiAgICAgICAgWyJ1aW50MjU2IHRva2VuSWQiLCB7IHR5cGU6ICJ1aW50MjU2IiwgbmFtZTogInRva2VuSWQiIH1dLAogICAgICAgIFsidWludDI1NiB2YWx1ZSIsIHsgdHlwZTogInVpbnQyNTYiLCBuYW1lOiAidmFsdWUiIH1dLAogICAgICAgIC8vIEluZGV4ZWQKICAgICAgICBbCiAgICAgICAgICAiZXZlbnQ6YWRkcmVzcyBpbmRleGVkIGZyb20iLAogICAgICAgICAgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJmcm9tIiwgaW5kZXhlZDogdHJ1ZSB9CiAgICAgICAgXSwKICAgICAgICBbImV2ZW50OmFkZHJlc3MgaW5kZXhlZCB0byIsIHsgdHlwZTogImFkZHJlc3MiLCBuYW1lOiAidG8iLCBpbmRleGVkOiB0cnVlIH1dLAogICAgICAgIFsKICAgICAgICAgICJldmVudDp1aW50IGluZGV4ZWQgdG9rZW5JZCIsCiAgICAgICAgICB7IHR5cGU6ICJ1aW50MjU2IiwgbmFtZTogInRva2VuSWQiLCBpbmRleGVkOiB0cnVlIH0KICAgICAgICBdLAogICAgICAgIFsKICAgICAgICAgICJldmVudDp1aW50MjU2IGluZGV4ZWQgdG9rZW5JZCIsCiAgICAgICAgICB7IHR5cGU6ICJ1aW50MjU2IiwgbmFtZTogInRva2VuSWQiLCBpbmRleGVkOiB0cnVlIH0KICAgICAgICBdCiAgICAgIF0pOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL3V0aWxzLmpzCiAgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmUoc2lnbmF0dXJlLCBzdHJ1Y3RzID0ge30pIHsKICAgIGlmIChpc0Z1bmN0aW9uU2lnbmF0dXJlKHNpZ25hdHVyZSkpIHsKICAgICAgY29uc3QgbWF0Y2ggPSBleGVjRnVuY3Rpb25TaWduYXR1cmUoc2lnbmF0dXJlKTsKICAgICAgaWYgKCFtYXRjaCkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFNpZ25hdHVyZUVycm9yKHsgc2lnbmF0dXJlLCB0eXBlOiAiZnVuY3Rpb24iIH0pOwogICAgICBjb25zdCBpbnB1dFBhcmFtcyA9IHNwbGl0UGFyYW1ldGVycyhtYXRjaC5wYXJhbWV0ZXJzKTsKICAgICAgY29uc3QgaW5wdXRzID0gW107CiAgICAgIGNvbnN0IGlucHV0TGVuZ3RoID0gaW5wdXRQYXJhbXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHsKICAgICAgICBpbnB1dHMucHVzaChwYXJzZUFiaVBhcmFtZXRlcihpbnB1dFBhcmFtc1tpXSwgewogICAgICAgICAgbW9kaWZpZXJzOiBmdW5jdGlvbk1vZGlmaWVycywKICAgICAgICAgIHN0cnVjdHMsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSkpOwogICAgICB9CiAgICAgIGNvbnN0IG91dHB1dHMgPSBbXTsKICAgICAgaWYgKG1hdGNoLnJldHVybnMpIHsKICAgICAgICBjb25zdCBvdXRwdXRQYXJhbXMgPSBzcGxpdFBhcmFtZXRlcnMobWF0Y2gucmV0dXJucyk7CiAgICAgICAgY29uc3Qgb3V0cHV0TGVuZ3RoID0gb3V0cHV0UGFyYW1zLmxlbmd0aDsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dExlbmd0aDsgaSsrKSB7CiAgICAgICAgICBvdXRwdXRzLnB1c2gocGFyc2VBYmlQYXJhbWV0ZXIob3V0cHV0UGFyYW1zW2ldLCB7CiAgICAgICAgICAgIG1vZGlmaWVyczogZnVuY3Rpb25Nb2RpZmllcnMsCiAgICAgICAgICAgIHN0cnVjdHMsCiAgICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsKICAgICAgICBuYW1lOiBtYXRjaC5uYW1lLAogICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiBtYXRjaC5zdGF0ZU11dGFiaWxpdHkgPz8gIm5vbnBheWFibGUiLAogICAgICAgIGlucHV0cywKICAgICAgICBvdXRwdXRzCiAgICAgIH07CiAgICB9CiAgICBpZiAoaXNFdmVudFNpZ25hdHVyZShzaWduYXR1cmUpKSB7CiAgICAgIGNvbnN0IG1hdGNoID0gZXhlY0V2ZW50U2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICAgIGlmICghbWF0Y2gpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSwgdHlwZTogImV2ZW50IiB9KTsKICAgICAgY29uc3QgcGFyYW1zID0gc3BsaXRQYXJhbWV0ZXJzKG1hdGNoLnBhcmFtZXRlcnMpOwogICAgICBjb25zdCBhYmlQYXJhbWV0ZXJzID0gW107CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBhYmlQYXJhbWV0ZXJzLnB1c2gocGFyc2VBYmlQYXJhbWV0ZXIocGFyYW1zW2ldLCB7CiAgICAgICAgICBtb2RpZmllcnM6IGV2ZW50TW9kaWZpZXJzLAogICAgICAgICAgc3RydWN0cywKICAgICAgICAgIHR5cGU6ICJldmVudCIKICAgICAgICB9KSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgbmFtZTogbWF0Y2gubmFtZSwgdHlwZTogImV2ZW50IiwgaW5wdXRzOiBhYmlQYXJhbWV0ZXJzIH07CiAgICB9CiAgICBpZiAoaXNFcnJvclNpZ25hdHVyZShzaWduYXR1cmUpKSB7CiAgICAgIGNvbnN0IG1hdGNoID0gZXhlY0Vycm9yU2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICAgIGlmICghbWF0Y2gpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSwgdHlwZTogImVycm9yIiB9KTsKICAgICAgY29uc3QgcGFyYW1zID0gc3BsaXRQYXJhbWV0ZXJzKG1hdGNoLnBhcmFtZXRlcnMpOwogICAgICBjb25zdCBhYmlQYXJhbWV0ZXJzID0gW107CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBhYmlQYXJhbWV0ZXJzLnB1c2gocGFyc2VBYmlQYXJhbWV0ZXIocGFyYW1zW2ldLCB7IHN0cnVjdHMsIHR5cGU6ICJlcnJvciIgfSkpOwogICAgICB9CiAgICAgIHJldHVybiB7IG5hbWU6IG1hdGNoLm5hbWUsIHR5cGU6ICJlcnJvciIsIGlucHV0czogYWJpUGFyYW1ldGVycyB9OwogICAgfQogICAgaWYgKGlzQ29uc3RydWN0b3JTaWduYXR1cmUoc2lnbmF0dXJlKSkgewogICAgICBjb25zdCBtYXRjaCA9IGV4ZWNDb25zdHJ1Y3RvclNpZ25hdHVyZShzaWduYXR1cmUpOwogICAgICBpZiAoIW1hdGNoKQogICAgICAgIHRocm93IG5ldyBJbnZhbGlkU2lnbmF0dXJlRXJyb3IoeyBzaWduYXR1cmUsIHR5cGU6ICJjb25zdHJ1Y3RvciIgfSk7CiAgICAgIGNvbnN0IHBhcmFtcyA9IHNwbGl0UGFyYW1ldGVycyhtYXRjaC5wYXJhbWV0ZXJzKTsKICAgICAgY29uc3QgYWJpUGFyYW1ldGVycyA9IFtdOwogICAgICBjb25zdCBsZW5ndGggPSBwYXJhbXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgYWJpUGFyYW1ldGVycy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtc1tpXSwgeyBzdHJ1Y3RzLCB0eXBlOiAiY29uc3RydWN0b3IiIH0pKTsKICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6ICJjb25zdHJ1Y3RvciIsCiAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiBtYXRjaC5zdGF0ZU11dGFiaWxpdHkgPz8gIm5vbnBheWFibGUiLAogICAgICAgIGlucHV0czogYWJpUGFyYW1ldGVycwogICAgICB9OwogICAgfQogICAgaWYgKGlzRmFsbGJhY2tTaWduYXR1cmUoc2lnbmF0dXJlKSkKICAgICAgcmV0dXJuIHsgdHlwZTogImZhbGxiYWNrIiB9OwogICAgaWYgKGlzUmVjZWl2ZVNpZ25hdHVyZShzaWduYXR1cmUpKQogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6ICJyZWNlaXZlIiwKICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJwYXlhYmxlIgogICAgICB9OwogICAgdGhyb3cgbmV3IFVua25vd25TaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSB9KTsKICB9CiAgZnVuY3Rpb24gcGFyc2VBYmlQYXJhbWV0ZXIocGFyYW0sIG9wdGlvbnMpIHsKICAgIGNvbnN0IHBhcmFtZXRlckNhY2hlS2V5ID0gZ2V0UGFyYW1ldGVyQ2FjaGVLZXkocGFyYW0sIG9wdGlvbnM/LnR5cGUpOwogICAgaWYgKHBhcmFtZXRlckNhY2hlLmhhcyhwYXJhbWV0ZXJDYWNoZUtleSkpCiAgICAgIHJldHVybiBwYXJhbWV0ZXJDYWNoZS5nZXQocGFyYW1ldGVyQ2FjaGVLZXkpOwogICAgY29uc3QgaXNUdXBsZSA9IGlzVHVwbGVSZWdleC50ZXN0KHBhcmFtKTsKICAgIGNvbnN0IG1hdGNoID0gZXhlY1R5cGVkKGlzVHVwbGUgPyBhYmlQYXJhbWV0ZXJXaXRoVHVwbGVSZWdleCA6IGFiaVBhcmFtZXRlcldpdGhvdXRUdXBsZVJlZ2V4LCBwYXJhbSk7CiAgICBpZiAoIW1hdGNoKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlckVycm9yKHsgcGFyYW0gfSk7CiAgICBpZiAobWF0Y2gubmFtZSAmJiBpc1NvbGlkaXR5S2V5d29yZChtYXRjaC5uYW1lKSkKICAgICAgdGhyb3cgbmV3IFNvbGlkaXR5UHJvdGVjdGVkS2V5d29yZEVycm9yKHsgcGFyYW0sIG5hbWU6IG1hdGNoLm5hbWUgfSk7CiAgICBjb25zdCBuYW1lID0gbWF0Y2gubmFtZSA/IHsgbmFtZTogbWF0Y2gubmFtZSB9IDoge307CiAgICBjb25zdCBpbmRleGVkID0gbWF0Y2gubW9kaWZpZXIgPT09ICJpbmRleGVkIiA/IHsgaW5kZXhlZDogdHJ1ZSB9IDoge307CiAgICBjb25zdCBzdHJ1Y3RzID0gb3B0aW9ucz8uc3RydWN0cyA/PyB7fTsKICAgIGxldCB0eXBlOwogICAgbGV0IGNvbXBvbmVudHMgPSB7fTsKICAgIGlmIChpc1R1cGxlKSB7CiAgICAgIHR5cGUgPSAidHVwbGUiOwogICAgICBjb25zdCBwYXJhbXMgPSBzcGxpdFBhcmFtZXRlcnMobWF0Y2gudHlwZSk7CiAgICAgIGNvbnN0IGNvbXBvbmVudHNfID0gW107CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBjb21wb25lbnRzXy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtc1tpXSwgeyBzdHJ1Y3RzIH0pKTsKICAgICAgfQogICAgICBjb21wb25lbnRzID0geyBjb21wb25lbnRzOiBjb21wb25lbnRzXyB9OwogICAgfSBlbHNlIGlmIChtYXRjaC50eXBlIGluIHN0cnVjdHMpIHsKICAgICAgdHlwZSA9ICJ0dXBsZSI7CiAgICAgIGNvbXBvbmVudHMgPSB7IGNvbXBvbmVudHM6IHN0cnVjdHNbbWF0Y2gudHlwZV0gfTsKICAgIH0gZWxzZSBpZiAoZHluYW1pY0ludGVnZXJSZWdleC50ZXN0KG1hdGNoLnR5cGUpKSB7CiAgICAgIHR5cGUgPSBgJHttYXRjaC50eXBlfTI1NmA7CiAgICB9IGVsc2UgewogICAgICB0eXBlID0gbWF0Y2gudHlwZTsKICAgICAgaWYgKCEob3B0aW9ucz8udHlwZSA9PT0gInN0cnVjdCIpICYmICFpc1NvbGlkaXR5VHlwZSh0eXBlKSkKICAgICAgICB0aHJvdyBuZXcgVW5rbm93blNvbGlkaXR5VHlwZUVycm9yKHsgdHlwZSB9KTsKICAgIH0KICAgIGlmIChtYXRjaC5tb2RpZmllcikgewogICAgICBpZiAoIW9wdGlvbnM/Lm1vZGlmaWVycz8uaGFzPy4obWF0Y2gubW9kaWZpZXIpKQogICAgICAgIHRocm93IG5ldyBJbnZhbGlkTW9kaWZpZXJFcnJvcih7CiAgICAgICAgICBwYXJhbSwKICAgICAgICAgIHR5cGU6IG9wdGlvbnM/LnR5cGUsCiAgICAgICAgICBtb2RpZmllcjogbWF0Y2gubW9kaWZpZXIKICAgICAgICB9KTsKICAgICAgaWYgKGZ1bmN0aW9uTW9kaWZpZXJzLmhhcyhtYXRjaC5tb2RpZmllcikgJiYgIWlzVmFsaWREYXRhTG9jYXRpb24odHlwZSwgISFtYXRjaC5hcnJheSkpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3IoewogICAgICAgICAgcGFyYW0sCiAgICAgICAgICB0eXBlOiBvcHRpb25zPy50eXBlLAogICAgICAgICAgbW9kaWZpZXI6IG1hdGNoLm1vZGlmaWVyCiAgICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBhYmlQYXJhbWV0ZXIgPSB7CiAgICAgIHR5cGU6IGAke3R5cGV9JHttYXRjaC5hcnJheSA/PyAiIn1gLAogICAgICAuLi5uYW1lLAogICAgICAuLi5pbmRleGVkLAogICAgICAuLi5jb21wb25lbnRzCiAgICB9OwogICAgcGFyYW1ldGVyQ2FjaGUuc2V0KHBhcmFtZXRlckNhY2hlS2V5LCBhYmlQYXJhbWV0ZXIpOwogICAgcmV0dXJuIGFiaVBhcmFtZXRlcjsKICB9CiAgZnVuY3Rpb24gc3BsaXRQYXJhbWV0ZXJzKHBhcmFtcywgcmVzdWx0ID0gW10sIGN1cnJlbnQgPSAiIiwgZGVwdGggPSAwKSB7CiAgICBjb25zdCBsZW5ndGggPSBwYXJhbXMudHJpbSgpLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgY2hhciA9IHBhcmFtc1tpXTsKICAgICAgY29uc3QgdGFpbCA9IHBhcmFtcy5zbGljZShpICsgMSk7CiAgICAgIHN3aXRjaCAoY2hhcikgewogICAgICAgIGNhc2UgIiwiOgogICAgICAgICAgcmV0dXJuIGRlcHRoID09PSAwID8gc3BsaXRQYXJhbWV0ZXJzKHRhaWwsIFsuLi5yZXN1bHQsIGN1cnJlbnQudHJpbSgpXSkgOiBzcGxpdFBhcmFtZXRlcnModGFpbCwgcmVzdWx0LCBgJHtjdXJyZW50fSR7Y2hhcn1gLCBkZXB0aCk7CiAgICAgICAgY2FzZSAiKCI6CiAgICAgICAgICByZXR1cm4gc3BsaXRQYXJhbWV0ZXJzKHRhaWwsIHJlc3VsdCwgYCR7Y3VycmVudH0ke2NoYXJ9YCwgZGVwdGggKyAxKTsKICAgICAgICBjYXNlICIpIjoKICAgICAgICAgIHJldHVybiBzcGxpdFBhcmFtZXRlcnModGFpbCwgcmVzdWx0LCBgJHtjdXJyZW50fSR7Y2hhcn1gLCBkZXB0aCAtIDEpOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gc3BsaXRQYXJhbWV0ZXJzKHRhaWwsIHJlc3VsdCwgYCR7Y3VycmVudH0ke2NoYXJ9YCwgZGVwdGgpOwogICAgICB9CiAgICB9CiAgICBpZiAoY3VycmVudCA9PT0gIiIpCiAgICAgIHJldHVybiByZXN1bHQ7CiAgICBpZiAoZGVwdGggIT09IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyZW50aGVzaXNFcnJvcih7IGN1cnJlbnQsIGRlcHRoIH0pOwogICAgcmVzdWx0LnB1c2goY3VycmVudC50cmltKCkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gaXNTb2xpZGl0eVR5cGUodHlwZSkgewogICAgcmV0dXJuIHR5cGUgPT09ICJhZGRyZXNzIiB8fCB0eXBlID09PSAiYm9vbCIgfHwgdHlwZSA9PT0gImZ1bmN0aW9uIiB8fCB0eXBlID09PSAic3RyaW5nIiB8fCBieXRlc1JlZ2V4LnRlc3QodHlwZSkgfHwgaW50ZWdlclJlZ2V4LnRlc3QodHlwZSk7CiAgfQogIGZ1bmN0aW9uIGlzU29saWRpdHlLZXl3b3JkKG5hbWUpIHsKICAgIHJldHVybiBuYW1lID09PSAiYWRkcmVzcyIgfHwgbmFtZSA9PT0gImJvb2wiIHx8IG5hbWUgPT09ICJmdW5jdGlvbiIgfHwgbmFtZSA9PT0gInN0cmluZyIgfHwgbmFtZSA9PT0gInR1cGxlIiB8fCBieXRlc1JlZ2V4LnRlc3QobmFtZSkgfHwgaW50ZWdlclJlZ2V4LnRlc3QobmFtZSkgfHwgcHJvdGVjdGVkS2V5d29yZHNSZWdleC50ZXN0KG5hbWUpOwogIH0KICBmdW5jdGlvbiBpc1ZhbGlkRGF0YUxvY2F0aW9uKHR5cGUsIGlzQXJyYXkpIHsKICAgIHJldHVybiBpc0FycmF5IHx8IHR5cGUgPT09ICJieXRlcyIgfHwgdHlwZSA9PT0gInN0cmluZyIgfHwgdHlwZSA9PT0gInR1cGxlIjsKICB9CiAgdmFyIGFiaVBhcmFtZXRlcldpdGhvdXRUdXBsZVJlZ2V4LCBhYmlQYXJhbWV0ZXJXaXRoVHVwbGVSZWdleCwgZHluYW1pY0ludGVnZXJSZWdleCwgcHJvdGVjdGVkS2V5d29yZHNSZWdleDsKICB2YXIgaW5pdF91dGlscyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL3V0aWxzLmpzIigpIHsKICAgICAgaW5pdF9yZWdleCgpOwogICAgICBpbml0X2FiaUl0ZW0oKTsKICAgICAgaW5pdF9hYmlQYXJhbWV0ZXIoKTsKICAgICAgaW5pdF9zaWduYXR1cmUoKTsKICAgICAgaW5pdF9zcGxpdFBhcmFtZXRlcnMoKTsKICAgICAgaW5pdF9jYWNoZSgpOwogICAgICBpbml0X3NpZ25hdHVyZXMoKTsKICAgICAgYWJpUGFyYW1ldGVyV2l0aG91dFR1cGxlUmVnZXggPSAvXig/PHR5cGU+W2EtekEtWiRfXVthLXpBLVowLTkkX10qKSg/PGFycmF5Pig/OlxbXGQqP1xdKSs/KT8oPzpccyg/PG1vZGlmaWVyPmNhbGxkYXRhfGluZGV4ZWR8bWVtb3J5fHN0b3JhZ2V7MX0pKT8oPzpccyg/PG5hbWU+W2EtekEtWiRfXVthLXpBLVowLTkkX10qKSk/JC87CiAgICAgIGFiaVBhcmFtZXRlcldpdGhUdXBsZVJlZ2V4ID0gL15cKCg/PHR5cGU+Lis/KVwpKD88YXJyYXk+KD86XFtcZCo/XF0pKz8pPyg/OlxzKD88bW9kaWZpZXI+Y2FsbGRhdGF8aW5kZXhlZHxtZW1vcnl8c3RvcmFnZXsxfSkpPyg/OlxzKD88bmFtZT5bYS16QS1aJF9dW2EtekEtWjAtOSRfXSopKT8kLzsKICAgICAgZHluYW1pY0ludGVnZXJSZWdleCA9IC9edT9pbnQkLzsKICAgICAgcHJvdGVjdGVkS2V5d29yZHNSZWdleCA9IC9eKD86YWZ0ZXJ8YWxpYXN8YW5vbnltb3VzfGFwcGx5fGF1dG98Ynl0ZXxjYWxsZGF0YXxjYXNlfGNhdGNofGNvbnN0YW50fGNvcHlvZnxkZWZhdWx0fGRlZmluZWR8ZXJyb3J8ZXZlbnR8ZXh0ZXJuYWx8ZmFsc2V8ZmluYWx8ZnVuY3Rpb258aW1tdXRhYmxlfGltcGxlbWVudHN8aW58aW5kZXhlZHxpbmxpbmV8aW50ZXJuYWx8bGV0fG1hcHBpbmd8bWF0Y2h8bWVtb3J5fG11dGFibGV8bnVsbHxvZnxvdmVycmlkZXxwYXJ0aWFsfHByaXZhdGV8cHJvbWlzZXxwdWJsaWN8cHVyZXxyZWZlcmVuY2V8cmVsb2NhdGFibGV8cmV0dXJufHJldHVybnN8c2l6ZW9mfHN0YXRpY3xzdG9yYWdlfHN0cnVjdHxzdXBlcnxzdXBwb3J0c3xzd2l0Y2h8dGhpc3x0cnVlfHRyeXx0eXBlZGVmfHR5cGVvZnx2YXJ8dmlld3x2aXJ0dWFsKSQvOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9ydW50aW1lL3N0cnVjdHMuanMKICBmdW5jdGlvbiBwYXJzZVN0cnVjdHMoc2lnbmF0dXJlcykgewogICAgY29uc3Qgc2hhbGxvd1N0cnVjdHMgPSB7fTsKICAgIGNvbnN0IHNpZ25hdHVyZXNMZW5ndGggPSBzaWduYXR1cmVzLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2lnbmF0dXJlc0xlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25hdHVyZXNbaV07CiAgICAgIGlmICghaXNTdHJ1Y3RTaWduYXR1cmUoc2lnbmF0dXJlKSkKICAgICAgICBjb250aW51ZTsKICAgICAgY29uc3QgbWF0Y2ggPSBleGVjU3RydWN0U2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICAgIGlmICghbWF0Y2gpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTaWduYXR1cmVFcnJvcih7IHNpZ25hdHVyZSwgdHlwZTogInN0cnVjdCIgfSk7CiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBtYXRjaC5wcm9wZXJ0aWVzLnNwbGl0KCI7Iik7CiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBbXTsKICAgICAgY29uc3QgcHJvcGVydGllc0xlbmd0aCA9IHByb3BlcnRpZXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBrID0gMDsgayA8IHByb3BlcnRpZXNMZW5ndGg7IGsrKykgewogICAgICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1trXTsKICAgICAgICBjb25zdCB0cmltbWVkID0gcHJvcGVydHkudHJpbSgpOwogICAgICAgIGlmICghdHJpbW1lZCkKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGNvbnN0IGFiaVBhcmFtZXRlciA9IHBhcnNlQWJpUGFyYW1ldGVyKHRyaW1tZWQsIHsKICAgICAgICAgIHR5cGU6ICJzdHJ1Y3QiCiAgICAgICAgfSk7CiAgICAgICAgY29tcG9uZW50cy5wdXNoKGFiaVBhcmFtZXRlcik7CiAgICAgIH0KICAgICAgaWYgKCFjb21wb25lbnRzLmxlbmd0aCkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFN0cnVjdFNpZ25hdHVyZUVycm9yKHsgc2lnbmF0dXJlIH0pOwogICAgICBzaGFsbG93U3RydWN0c1ttYXRjaC5uYW1lXSA9IGNvbXBvbmVudHM7CiAgICB9CiAgICBjb25zdCByZXNvbHZlZFN0cnVjdHMgPSB7fTsKICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhzaGFsbG93U3RydWN0cyk7CiAgICBjb25zdCBlbnRyaWVzTGVuZ3RoID0gZW50cmllcy5sZW5ndGg7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXNMZW5ndGg7IGkrKykgewogICAgICBjb25zdCBbbmFtZSwgcGFyYW1ldGVyc10gPSBlbnRyaWVzW2ldOwogICAgICByZXNvbHZlZFN0cnVjdHNbbmFtZV0gPSByZXNvbHZlU3RydWN0cyhwYXJhbWV0ZXJzLCBzaGFsbG93U3RydWN0cyk7CiAgICB9CiAgICByZXR1cm4gcmVzb2x2ZWRTdHJ1Y3RzOwogIH0KICBmdW5jdGlvbiByZXNvbHZlU3RydWN0cyhhYmlQYXJhbWV0ZXJzLCBzdHJ1Y3RzLCBhbmNlc3RvcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSB7CiAgICBjb25zdCBjb21wb25lbnRzID0gW107CiAgICBjb25zdCBsZW5ndGggPSBhYmlQYXJhbWV0ZXJzLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgYWJpUGFyYW1ldGVyID0gYWJpUGFyYW1ldGVyc1tpXTsKICAgICAgY29uc3QgaXNUdXBsZSA9IGlzVHVwbGVSZWdleC50ZXN0KGFiaVBhcmFtZXRlci50eXBlKTsKICAgICAgaWYgKGlzVHVwbGUpCiAgICAgICAgY29tcG9uZW50cy5wdXNoKGFiaVBhcmFtZXRlcik7CiAgICAgIGVsc2UgewogICAgICAgIGNvbnN0IG1hdGNoID0gZXhlY1R5cGVkKHR5cGVXaXRob3V0VHVwbGVSZWdleCwgYWJpUGFyYW1ldGVyLnR5cGUpOwogICAgICAgIGlmICghbWF0Y2g/LnR5cGUpCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFiaVR5cGVQYXJhbWV0ZXJFcnJvcih7IGFiaVBhcmFtZXRlciB9KTsKICAgICAgICBjb25zdCB7IGFycmF5LCB0eXBlIH0gPSBtYXRjaDsKICAgICAgICBpZiAodHlwZSBpbiBzdHJ1Y3RzKSB7CiAgICAgICAgICBpZiAoYW5jZXN0b3JzLmhhcyh0eXBlKSkKICAgICAgICAgICAgdGhyb3cgbmV3IENpcmN1bGFyUmVmZXJlbmNlRXJyb3IoeyB0eXBlIH0pOwogICAgICAgICAgY29tcG9uZW50cy5wdXNoKHsKICAgICAgICAgICAgLi4uYWJpUGFyYW1ldGVyLAogICAgICAgICAgICB0eXBlOiBgdHVwbGUke2FycmF5ID8/ICIifWAsCiAgICAgICAgICAgIGNvbXBvbmVudHM6IHJlc29sdmVTdHJ1Y3RzKHN0cnVjdHNbdHlwZV0gPz8gW10sIHN0cnVjdHMsIC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsuLi5hbmNlc3RvcnMsIHR5cGVdKSkKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoaXNTb2xpZGl0eVR5cGUodHlwZSkpCiAgICAgICAgICAgIGNvbXBvbmVudHMucHVzaChhYmlQYXJhbWV0ZXIpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICB0aHJvdyBuZXcgVW5rbm93blR5cGVFcnJvcih7IHR5cGUgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gY29tcG9uZW50czsKICB9CiAgdmFyIHR5cGVXaXRob3V0VHVwbGVSZWdleDsKICB2YXIgaW5pdF9zdHJ1Y3RzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3J1bnRpbWUvc3RydWN0cy5qcyIoKSB7CiAgICAgIGluaXRfcmVnZXgoKTsKICAgICAgaW5pdF9hYmlJdGVtKCk7CiAgICAgIGluaXRfYWJpUGFyYW1ldGVyKCk7CiAgICAgIGluaXRfc2lnbmF0dXJlKCk7CiAgICAgIGluaXRfc3RydWN0KCk7CiAgICAgIGluaXRfc2lnbmF0dXJlcygpOwogICAgICBpbml0X3V0aWxzKCk7CiAgICAgIHR5cGVXaXRob3V0VHVwbGVSZWdleCA9IC9eKD88dHlwZT5bYS16QS1aJF9dW2EtekEtWjAtOSRfXSopKD88YXJyYXk+KD86XFtcZCo/XF0pKz8pPyQvOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9wYXJzZUFiaS5qcwogIGZ1bmN0aW9uIHBhcnNlQWJpKHNpZ25hdHVyZXMpIHsKICAgIGNvbnN0IHN0cnVjdHMgPSBwYXJzZVN0cnVjdHMoc2lnbmF0dXJlcyk7CiAgICBjb25zdCBhYmkyID0gW107CiAgICBjb25zdCBsZW5ndGggPSBzaWduYXR1cmVzLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmF0dXJlc1tpXTsKICAgICAgaWYgKGlzU3RydWN0U2lnbmF0dXJlKHNpZ25hdHVyZSkpCiAgICAgICAgY29udGludWU7CiAgICAgIGFiaTIucHVzaChwYXJzZVNpZ25hdHVyZShzaWduYXR1cmUsIHN0cnVjdHMpKTsKICAgIH0KICAgIHJldHVybiBhYmkyOwogIH0KICB2YXIgaW5pdF9wYXJzZUFiaSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9wYXJzZUFiaS5qcyIoKSB7CiAgICAgIGluaXRfc2lnbmF0dXJlcygpOwogICAgICBpbml0X3N0cnVjdHMoKTsKICAgICAgaW5pdF91dGlscygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvYWJpdHlwZS9kaXN0L2VzbS9odW1hbi1yZWFkYWJsZS9wYXJzZUFiaUl0ZW0uanMKICBmdW5jdGlvbiBwYXJzZUFiaUl0ZW0oc2lnbmF0dXJlKSB7CiAgICBsZXQgYWJpSXRlbTsKICAgIGlmICh0eXBlb2Ygc2lnbmF0dXJlID09PSAic3RyaW5nIikKICAgICAgYWJpSXRlbSA9IHBhcnNlU2lnbmF0dXJlKHNpZ25hdHVyZSk7CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc3RydWN0cyA9IHBhcnNlU3RydWN0cyhzaWduYXR1cmUpOwogICAgICBjb25zdCBsZW5ndGggPSBzaWduYXR1cmUubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3Qgc2lnbmF0dXJlXyA9IHNpZ25hdHVyZVtpXTsKICAgICAgICBpZiAoaXNTdHJ1Y3RTaWduYXR1cmUoc2lnbmF0dXJlXykpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBhYmlJdGVtID0gcGFyc2VTaWduYXR1cmUoc2lnbmF0dXJlXywgc3RydWN0cyk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmICghYWJpSXRlbSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBYmlJdGVtRXJyb3IoeyBzaWduYXR1cmUgfSk7CiAgICByZXR1cm4gYWJpSXRlbTsKICB9CiAgdmFyIGluaXRfcGFyc2VBYmlJdGVtID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpSXRlbS5qcyIoKSB7CiAgICAgIGluaXRfYWJpSXRlbSgpOwogICAgICBpbml0X3NpZ25hdHVyZXMoKTsKICAgICAgaW5pdF9zdHJ1Y3RzKCk7CiAgICAgIGluaXRfdXRpbHMoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL2FiaXR5cGUvZGlzdC9lc20vaHVtYW4tcmVhZGFibGUvcGFyc2VBYmlQYXJhbWV0ZXIuanMKICBmdW5jdGlvbiBwYXJzZUFiaVBhcmFtZXRlcjIocGFyYW0pIHsKICAgIGxldCBhYmlQYXJhbWV0ZXI7CiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAic3RyaW5nIikKICAgICAgYWJpUGFyYW1ldGVyID0gcGFyc2VBYmlQYXJhbWV0ZXIocGFyYW0sIHsKICAgICAgICBtb2RpZmllcnMKICAgICAgfSk7CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc3RydWN0cyA9IHBhcnNlU3RydWN0cyhwYXJhbSk7CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtLmxlbmd0aDsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHBhcmFtW2ldOwogICAgICAgIGlmIChpc1N0cnVjdFNpZ25hdHVyZShzaWduYXR1cmUpKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgYWJpUGFyYW1ldGVyID0gcGFyc2VBYmlQYXJhbWV0ZXIoc2lnbmF0dXJlLCB7IG1vZGlmaWVycywgc3RydWN0cyB9KTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKCFhYmlQYXJhbWV0ZXIpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWJpUGFyYW1ldGVyRXJyb3IoeyBwYXJhbSB9KTsKICAgIHJldHVybiBhYmlQYXJhbWV0ZXI7CiAgfQogIHZhciBpbml0X3BhcnNlQWJpUGFyYW1ldGVyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpUGFyYW1ldGVyLmpzIigpIHsKICAgICAgaW5pdF9hYmlQYXJhbWV0ZXIoKTsKICAgICAgaW5pdF9zaWduYXR1cmVzKCk7CiAgICAgIGluaXRfc3RydWN0cygpOwogICAgICBpbml0X3V0aWxzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpUGFyYW1ldGVycy5qcwogIGZ1bmN0aW9uIHBhcnNlQWJpUGFyYW1ldGVycyhwYXJhbXMpIHsKICAgIGNvbnN0IGFiaVBhcmFtZXRlcnMgPSBbXTsKICAgIGlmICh0eXBlb2YgcGFyYW1zID09PSAic3RyaW5nIikgewogICAgICBjb25zdCBwYXJhbWV0ZXJzID0gc3BsaXRQYXJhbWV0ZXJzKHBhcmFtcyk7CiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcmFtZXRlcnMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgYWJpUGFyYW1ldGVycy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtZXRlcnNbaV0sIHsgbW9kaWZpZXJzIH0pKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgc3RydWN0cyA9IHBhcnNlU3RydWN0cyhwYXJhbXMpOwogICAgICBjb25zdCBsZW5ndGggPSBwYXJhbXMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gcGFyYW1zW2ldOwogICAgICAgIGlmIChpc1N0cnVjdFNpZ25hdHVyZShzaWduYXR1cmUpKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHNwbGl0UGFyYW1ldGVycyhzaWduYXR1cmUpOwogICAgICAgIGNvbnN0IGxlbmd0aDIgPSBwYXJhbWV0ZXJzLmxlbmd0aDsKICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxlbmd0aDI7IGsrKykgewogICAgICAgICAgYWJpUGFyYW1ldGVycy5wdXNoKHBhcnNlQWJpUGFyYW1ldGVyKHBhcmFtZXRlcnNba10sIHsgbW9kaWZpZXJzLCBzdHJ1Y3RzIH0pKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChhYmlQYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMCkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3IoeyBwYXJhbXMgfSk7CiAgICByZXR1cm4gYWJpUGFyYW1ldGVyczsKICB9CiAgdmFyIGluaXRfcGFyc2VBYmlQYXJhbWV0ZXJzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2h1bWFuLXJlYWRhYmxlL3BhcnNlQWJpUGFyYW1ldGVycy5qcyIoKSB7CiAgICAgIGluaXRfYWJpUGFyYW1ldGVyKCk7CiAgICAgIGluaXRfc2lnbmF0dXJlcygpOwogICAgICBpbml0X3N0cnVjdHMoKTsKICAgICAgaW5pdF91dGlscygpOwogICAgICBpbml0X3V0aWxzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2V4cG9ydHMvaW5kZXguanMKICB2YXIgaW5pdF9leHBvcnRzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9hYml0eXBlL2Rpc3QvZXNtL2V4cG9ydHMvaW5kZXguanMiKCkgewogICAgICBpbml0X2Zvcm1hdEFiaUl0ZW0oKTsKICAgICAgaW5pdF9wYXJzZUFiaSgpOwogICAgICBpbml0X3BhcnNlQWJpSXRlbSgpOwogICAgICBpbml0X3BhcnNlQWJpUGFyYW1ldGVyKCk7CiAgICAgIGluaXRfcGFyc2VBYmlQYXJhbWV0ZXJzKCk7CiAgICAgIGluaXRfYWJpSXRlbSgpOwogICAgICBpbml0X2FiaVBhcmFtZXRlcigpOwogICAgICBpbml0X3NpZ25hdHVyZSgpOwogICAgICBpbml0X3NwbGl0UGFyYW1ldGVycygpOwogICAgICBpbml0X3N0cnVjdCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9mb3JtYXRBYmlJdGVtLmpzCiAgZnVuY3Rpb24gZm9ybWF0QWJpSXRlbTIoYWJpSXRlbSwgeyBpbmNsdWRlTmFtZSA9IGZhbHNlIH0gPSB7fSkgewogICAgaWYgKGFiaUl0ZW0udHlwZSAhPT0gImZ1bmN0aW9uIiAmJiBhYmlJdGVtLnR5cGUgIT09ICJldmVudCIgJiYgYWJpSXRlbS50eXBlICE9PSAiZXJyb3IiKQogICAgICB0aHJvdyBuZXcgSW52YWxpZERlZmluaXRpb25UeXBlRXJyb3IoYWJpSXRlbS50eXBlKTsKICAgIHJldHVybiBgJHthYmlJdGVtLm5hbWV9KCR7Zm9ybWF0QWJpUGFyYW1zKGFiaUl0ZW0uaW5wdXRzLCB7IGluY2x1ZGVOYW1lIH0pfSlgOwogIH0KICBmdW5jdGlvbiBmb3JtYXRBYmlQYXJhbXMocGFyYW1zLCB7IGluY2x1ZGVOYW1lID0gZmFsc2UgfSA9IHt9KSB7CiAgICBpZiAoIXBhcmFtcykKICAgICAgcmV0dXJuICIiOwogICAgcmV0dXJuIHBhcmFtcy5tYXAoKHBhcmFtKSA9PiBmb3JtYXRBYmlQYXJhbShwYXJhbSwgeyBpbmNsdWRlTmFtZSB9KSkuam9pbihpbmNsdWRlTmFtZSA/ICIsICIgOiAiLCIpOwogIH0KICBmdW5jdGlvbiBmb3JtYXRBYmlQYXJhbShwYXJhbSwgeyBpbmNsdWRlTmFtZSB9KSB7CiAgICBpZiAocGFyYW0udHlwZS5zdGFydHNXaXRoKCJ0dXBsZSIpKSB7CiAgICAgIHJldHVybiBgKCR7Zm9ybWF0QWJpUGFyYW1zKHBhcmFtLmNvbXBvbmVudHMsIHsgaW5jbHVkZU5hbWUgfSl9KSR7cGFyYW0udHlwZS5zbGljZSgidHVwbGUiLmxlbmd0aCl9YDsKICAgIH0KICAgIHJldHVybiBwYXJhbS50eXBlICsgKGluY2x1ZGVOYW1lICYmIHBhcmFtLm5hbWUgPyBgICR7cGFyYW0ubmFtZX1gIDogIiIpOwogIH0KICB2YXIgaW5pdF9mb3JtYXRBYmlJdGVtMiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9mb3JtYXRBYmlJdGVtLmpzIigpIHsKICAgICAgaW5pdF9hYmkoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL2lzSGV4LmpzCiAgZnVuY3Rpb24gaXNIZXgodmFsdWUsIHsgc3RyaWN0ID0gdHJ1ZSB9ID0ge30pIHsKICAgIGlmICghdmFsdWUpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJzdHJpbmciKQogICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc3RyaWN0ID8gL14weFswLTlhLWZBLUZdKiQvLnRlc3QodmFsdWUpIDogdmFsdWUuc3RhcnRzV2l0aCgiMHgiKTsKICB9CiAgdmFyIGluaXRfaXNIZXggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL2lzSGV4LmpzIigpIHsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL3NpemUuanMKICBmdW5jdGlvbiBzaXplKHZhbHVlKSB7CiAgICBpZiAoaXNIZXgodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgcmV0dXJuIE1hdGguY2VpbCgodmFsdWUubGVuZ3RoIC0gMikgLyAyKTsKICAgIHJldHVybiB2YWx1ZS5sZW5ndGg7CiAgfQogIHZhciBpbml0X3NpemUgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL3NpemUuanMiKCkgewogICAgICBpbml0X2lzSGV4KCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL3ZlcnNpb24uanMKICB2YXIgdmVyc2lvbjI7CiAgdmFyIGluaXRfdmVyc2lvbjIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvdmVyc2lvbi5qcyIoKSB7CiAgICAgIHZlcnNpb24yID0gIjIuMTkuOCI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2Jhc2UuanMKICBmdW5jdGlvbiBzZXRFcnJvckNvbmZpZyhjb25maWcpIHsKICAgIGVycm9yQ29uZmlnID0gY29uZmlnOwogIH0KICBmdW5jdGlvbiB3YWxrKGVyciwgZm4pIHsKICAgIGlmIChmbj8uKGVycikpCiAgICAgIHJldHVybiBlcnI7CiAgICBpZiAoZXJyICYmIHR5cGVvZiBlcnIgPT09ICJvYmplY3QiICYmICJjYXVzZSIgaW4gZXJyKQogICAgICByZXR1cm4gd2FsayhlcnIuY2F1c2UsIGZuKTsKICAgIHJldHVybiBmbiA/IG51bGwgOiBlcnI7CiAgfQogIHZhciBlcnJvckNvbmZpZywgQmFzZUVycm9yMjsKICB2YXIgaW5pdF9iYXNlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2Jhc2UuanMiKCkgewogICAgICBpbml0X3ZlcnNpb24yKCk7CiAgICAgIGVycm9yQ29uZmlnID0gewogICAgICAgIGdldERvY3NVcmw6ICh7IGRvY3NCYXNlVXJsLCBkb2NzUGF0aDogZG9jc1BhdGg5ID0gIiIsIGRvY3NTbHVnIH0pID0+IGRvY3NQYXRoOSA/IGAke2RvY3NCYXNlVXJsID8/ICJodHRwczovL3ZpZW0uc2gifSR7ZG9jc1BhdGg5fSR7ZG9jc1NsdWcgPyBgIyR7ZG9jc1NsdWd9YCA6ICIifWAgOiB2b2lkIDAsCiAgICAgICAgdmVyc2lvbjogdmVyc2lvbjIKICAgICAgfTsKICAgICAgQmFzZUVycm9yMiA9IGNsYXNzIF9CYXNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3Ioc2hvcnRNZXNzYWdlLCBhcmdzID0ge30pIHsKICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSAoKCkgPT4gewogICAgICAgICAgICBpZiAoYXJncy5jYXVzZSBpbnN0YW5jZW9mIF9CYXNlRXJyb3IpCiAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2F1c2UuZGV0YWlsczsKICAgICAgICAgICAgaWYgKGFyZ3MuY2F1c2U/Lm1lc3NhZ2UpCiAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2F1c2UubWVzc2FnZTsKICAgICAgICAgICAgcmV0dXJuIGFyZ3MuZGV0YWlsczsKICAgICAgICAgIH0pKCk7CiAgICAgICAgICBjb25zdCBkb2NzUGF0aDkgPSAoKCkgPT4gewogICAgICAgICAgICBpZiAoYXJncy5jYXVzZSBpbnN0YW5jZW9mIF9CYXNlRXJyb3IpCiAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY2F1c2UuZG9jc1BhdGggfHwgYXJncy5kb2NzUGF0aDsKICAgICAgICAgICAgcmV0dXJuIGFyZ3MuZG9jc1BhdGg7CiAgICAgICAgICB9KSgpOwogICAgICAgICAgY29uc3QgZG9jc1VybCA9IGVycm9yQ29uZmlnLmdldERvY3NVcmw/Lih7IC4uLmFyZ3MsIGRvY3NQYXRoOiBkb2NzUGF0aDkgfSk7CiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gWwogICAgICAgICAgICBzaG9ydE1lc3NhZ2UgfHwgIkFuIGVycm9yIG9jY3VycmVkLiIsCiAgICAgICAgICAgICIiLAogICAgICAgICAgICAuLi5hcmdzLm1ldGFNZXNzYWdlcyA/IFsuLi5hcmdzLm1ldGFNZXNzYWdlcywgIiJdIDogW10sCiAgICAgICAgICAgIC4uLmRvY3NVcmwgPyBbYERvY3M6ICR7ZG9jc1VybH1gXSA6IFtdLAogICAgICAgICAgICAuLi5kZXRhaWxzID8gW2BEZXRhaWxzOiAke2RldGFpbHN9YF0gOiBbXSwKICAgICAgICAgICAgLi4uZXJyb3JDb25maWcudmVyc2lvbiA/IFtgVmVyc2lvbjogJHtlcnJvckNvbmZpZy52ZXJzaW9ufWBdIDogW10KICAgICAgICAgIF0uam9pbigiXG4iKTsKICAgICAgICAgIHN1cGVyKG1lc3NhZ2UsIGFyZ3MuY2F1c2UgPyB7IGNhdXNlOiBhcmdzLmNhdXNlIH0gOiB2b2lkIDApOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkZXRhaWxzIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiZG9jc1BhdGgiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJtZXRhTWVzc2FnZXMiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaG9ydE1lc3NhZ2UiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJ2ZXJzaW9uIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJCYXNlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7CiAgICAgICAgICB0aGlzLmRvY3NQYXRoID0gZG9jc1BhdGg5OwogICAgICAgICAgdGhpcy5tZXRhTWVzc2FnZXMgPSBhcmdzLm1ldGFNZXNzYWdlczsKICAgICAgICAgIHRoaXMubmFtZSA9IGFyZ3MubmFtZSA/PyB0aGlzLm5hbWU7CiAgICAgICAgICB0aGlzLnNob3J0TWVzc2FnZSA9IHNob3J0TWVzc2FnZTsKICAgICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb24yOwogICAgICAgIH0KICAgICAgICB3YWxrKGZuKSB7CiAgICAgICAgICByZXR1cm4gd2Fsayh0aGlzLCBmbik7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hYmkuanMKICB2YXIgQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yLCBBYmlDb25zdHJ1Y3RvclBhcmFtc05vdEZvdW5kRXJyb3IsIEFiaURlY29kaW5nRGF0YVNpemVJbnZhbGlkRXJyb3IsIEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yLCBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IsIEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yLCBBYmlFbmNvZGluZ0J5dGVzU2l6ZU1pc21hdGNoRXJyb3IsIEFiaUVuY29kaW5nTGVuZ3RoTWlzbWF0Y2hFcnJvciwgQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yLCBBYmlFcnJvck5vdEZvdW5kRXJyb3IsIEFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvciwgQWJpRXZlbnRTaWduYXR1cmVFbXB0eVRvcGljc0Vycm9yLCBBYmlFdmVudFNpZ25hdHVyZU5vdEZvdW5kRXJyb3IsIEFiaUV2ZW50Tm90Rm91bmRFcnJvciwgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yLCBBYmlGdW5jdGlvbk91dHB1dHNOb3RGb3VuZEVycm9yLCBBYmlGdW5jdGlvblNpZ25hdHVyZU5vdEZvdW5kRXJyb3IsIEFiaUl0ZW1BbWJpZ3VpdHlFcnJvciwgQnl0ZXNTaXplTWlzbWF0Y2hFcnJvciwgRGVjb2RlTG9nRGF0YU1pc21hdGNoLCBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCwgSW52YWxpZEFiaUVuY29kaW5nVHlwZUVycm9yLCBJbnZhbGlkQWJpRGVjb2RpbmdUeXBlRXJyb3IsIEludmFsaWRBcnJheUVycm9yLCBJbnZhbGlkRGVmaW5pdGlvblR5cGVFcnJvciwgVW5zdXBwb3J0ZWRQYWNrZWRBYmlUeXBlOwogIHZhciBpbml0X2FiaSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hYmkuanMiKCkgewogICAgICBpbml0X2Zvcm1hdEFiaUl0ZW0yKCk7CiAgICAgIGluaXRfc2l6ZSgpOwogICAgICBpbml0X2Jhc2UoKTsKICAgICAgQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDkgfSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICAiQSBjb25zdHJ1Y3RvciB3YXMgbm90IGZvdW5kIG9uIHRoZSBBQkkuIiwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgY29uc3RydWN0b3IgZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlDb25zdHJ1Y3RvclBhcmFtc05vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgICJDb25zdHJ1Y3RvciBhcmd1bWVudHMgd2VyZSBwcm92aWRlZCAoYGFyZ3NgKSwgYnV0IGEgY29uc3RydWN0b3IgcGFyYW1ldGVycyAoYGlucHV0c2ApIHdlcmUgbm90IGZvdW5kIG9uIHRoZSBBQkkuIiwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSwgYW5kIHRoYXQgdGhlIGBpbnB1dHNgIGF0dHJpYnV0ZSBvbiB0aGUgY29uc3RydWN0b3IgZXhpc3RzLiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlEZWNvZGluZ0RhdGFTaXplSW52YWxpZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGRhdGEsIHNpemU6IHNpemUzIH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYERhdGEgc2l6ZSBvZiAke3NpemUzfSBieXRlcyBpcyBpbnZhbGlkLmAsCiAgICAgICAgICAgICJTaXplIG11c3QgYmUgaW4gaW5jcmVtZW50cyBvZiAzMiBieXRlcyAoc2l6ZSAlIDMyID09PSAwKS4iCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYERhdGE6ICR7ZGF0YX0gKCR7c2l6ZTN9IGJ5dGVzKWBdLAogICAgICAgICAgICBuYW1lOiAiQWJpRGVjb2RpbmdEYXRhU2l6ZUludmFsaWRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRGVjb2RpbmdEYXRhU2l6ZVRvb1NtYWxsRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZGF0YSwgcGFyYW1zLCBzaXplOiBzaXplMyB9KSB7CiAgICAgICAgICBzdXBlcihbYERhdGEgc2l6ZSBvZiAke3NpemUzfSBieXRlcyBpcyB0b28gc21hbGwgZm9yIGdpdmVuIHBhcmFtZXRlcnMuYF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgUGFyYW1zOiAoJHtmb3JtYXRBYmlQYXJhbXMocGFyYW1zLCB7IGluY2x1ZGVOYW1lOiB0cnVlIH0pfSlgLAogICAgICAgICAgICAgIGBEYXRhOiAgICR7ZGF0YX0gKCR7c2l6ZTN9IGJ5dGVzKWAKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbmFtZTogIkFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRhdGEiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJwYXJhbXMiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaXplIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKICAgICAgICAgIHRoaXMuc2l6ZSA9IHNpemUzOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRGVjb2RpbmdaZXJvRGF0YUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCdDYW5ub3QgZGVjb2RlIHplcm8gZGF0YSAoIjB4Iikgd2l0aCBBQkkgcGFyYW1ldGVycy4nLCB7CiAgICAgICAgICAgIG5hbWU6ICJBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGV4cGVjdGVkTGVuZ3RoLCBnaXZlbkxlbmd0aCwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBBQkkgZW5jb2RpbmcgYXJyYXkgbGVuZ3RoIG1pc21hdGNoIGZvciB0eXBlICR7dHlwZX0uYCwKICAgICAgICAgICAgYEV4cGVjdGVkIGxlbmd0aDogJHtleHBlY3RlZExlbmd0aH1gLAogICAgICAgICAgICBgR2l2ZW4gbGVuZ3RoOiAke2dpdmVuTGVuZ3RofWAKICAgICAgICAgIF0uam9pbigiXG4iKSwgeyBuYW1lOiAiQWJpRW5jb2RpbmdBcnJheUxlbmd0aE1pc21hdGNoRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRW5jb2RpbmdCeXRlc1NpemVNaXNtYXRjaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGV4cGVjdGVkU2l6ZSwgdmFsdWUgfSkgewogICAgICAgICAgc3VwZXIoYFNpemUgb2YgYnl0ZXMgIiR7dmFsdWV9IiAoYnl0ZXMke3NpemUodmFsdWUpfSkgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgc2l6ZSAoYnl0ZXMke2V4cGVjdGVkU2l6ZX0pLmAsIHsgbmFtZTogIkFiaUVuY29kaW5nQnl0ZXNTaXplTWlzbWF0Y2hFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFbmNvZGluZ0xlbmd0aE1pc21hdGNoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZXhwZWN0ZWRMZW5ndGgsIGdpdmVuTGVuZ3RoIH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgIkFCSSBlbmNvZGluZyBwYXJhbXMvdmFsdWVzIGxlbmd0aCBtaXNtYXRjaC4iLAogICAgICAgICAgICBgRXhwZWN0ZWQgbGVuZ3RoIChwYXJhbXMpOiAke2V4cGVjdGVkTGVuZ3RofWAsCiAgICAgICAgICAgIGBHaXZlbiBsZW5ndGggKHZhbHVlcyk6ICR7Z2l2ZW5MZW5ndGh9YAogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IG5hbWU6ICJBYmlFbmNvZGluZ0xlbmd0aE1pc21hdGNoRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihlcnJvck5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBBcmd1bWVudHMgKFxgYXJnc1xgKSB3ZXJlIHByb3ZpZGVkIHRvICIke2Vycm9yTmFtZX0iLCBidXQgIiR7ZXJyb3JOYW1lfSIgb24gdGhlIEFCSSBkb2VzIG5vdCBjb250YWluIGFueSBwYXJhbWV0ZXJzIChcYGlucHV0c1xgKS5gLAogICAgICAgICAgICAiQ2Fubm90IGVuY29kZSBlcnJvciByZXN1bHQgd2l0aG91dCBrbm93aW5nIHdoYXQgdGhlIHBhcmFtZXRlciB0eXBlcyBhcmUuIiwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgaW5wdXRzIGV4aXN0IG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFcnJvck5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGVycm9yTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRXJyb3IgJHtlcnJvck5hbWUgPyBgIiR7ZXJyb3JOYW1lfSIgYCA6ICIifW5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXJyb3IgZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXJyb3JOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFcnJvclNpZ25hdHVyZU5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHNpZ25hdHVyZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYEVuY29kZWQgZXJyb3Igc2lnbmF0dXJlICIke3NpZ25hdHVyZX0iIG5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXJyb3IgZXhpc3RzIG9uIGl0LiIsCiAgICAgICAgICAgIGBZb3UgY2FuIGxvb2sgdXAgdGhlIGRlY29kZWQgc2lnbmF0dXJlIGhlcmU6IGh0dHBzOi8vb3BlbmNoYWluLnh5ei9zaWduYXR1cmVzP3F1ZXJ5PSR7c2lnbmF0dXJlfS5gCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaWduYXR1cmUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5zaWduYXR1cmUgPSBzaWduYXR1cmU7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFdmVudFNpZ25hdHVyZUVtcHR5VG9waWNzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcigiQ2Fubm90IGV4dHJhY3QgZXZlbnQgc2lnbmF0dXJlIGZyb20gZW1wdHkgdG9waWNzLiIsIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUV2ZW50U2lnbmF0dXJlRW1wdHlUb3BpY3NFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpRXZlbnRTaWduYXR1cmVOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihzaWduYXR1cmUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBFbmNvZGVkIGV2ZW50IHNpZ25hdHVyZSAiJHtzaWduYXR1cmV9IiBub3QgZm91bmQgb24gQUJJLmAsCiAgICAgICAgICAgICJNYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBBQkkgYW5kIHRoYXQgdGhlIGV2ZW50IGV4aXN0cyBvbiBpdC4iLAogICAgICAgICAgICBgWW91IGNhbiBsb29rIHVwIHRoZSBzaWduYXR1cmUgaGVyZTogaHR0cHM6Ly9vcGVuY2hhaW4ueHl6L3NpZ25hdHVyZXM/cXVlcnk9JHtzaWduYXR1cmV9LmAKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXZlbnRTaWduYXR1cmVOb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlFdmVudE5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGV2ZW50TmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRXZlbnQgJHtldmVudE5hbWUgPyBgIiR7ZXZlbnROYW1lfSIgYCA6ICIifW5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXZlbnQgZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRXZlbnROb3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlGdW5jdGlvbk5vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGZ1bmN0aW9uTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRnVuY3Rpb24gJHtmdW5jdGlvbk5hbWUgPyBgIiR7ZnVuY3Rpb25OYW1lfSIgYCA6ICIifW5vdCBmb3VuZCBvbiBBQkkuYCwKICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZnVuY3Rpb24gZXhpc3RzIG9uIGl0LiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBuYW1lOiAiQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBYmlGdW5jdGlvbk91dHB1dHNOb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihmdW5jdGlvbk5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoOSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBGdW5jdGlvbiAiJHtmdW5jdGlvbk5hbWV9IiBkb2VzIG5vdCBjb250YWluIGFueSBcYG91dHB1dHNcYCBvbiBBQkkuYCwKICAgICAgICAgICAgIkNhbm5vdCBkZWNvZGUgZnVuY3Rpb24gcmVzdWx0IHdpdGhvdXQga25vd2luZyB3aGF0IHRoZSBwYXJhbWV0ZXIgdHlwZXMgYXJlLiIsCiAgICAgICAgICAgICJNYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBBQkkgYW5kIHRoYXQgdGhlIGZ1bmN0aW9uIGV4aXN0cyBvbiBpdC4iCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUZ1bmN0aW9uT3V0cHV0c05vdEZvdW5kRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3Ioc2lnbmF0dXJlLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDkgfSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgRW5jb2RlZCBmdW5jdGlvbiBzaWduYXR1cmUgIiR7c2lnbmF0dXJlfSIgbm90IGZvdW5kIG9uIEFCSS5gLAogICAgICAgICAgICAiTWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGNvcnJlY3QgQUJJIGFuZCB0aGF0IHRoZSBmdW5jdGlvbiBleGlzdHMgb24gaXQuIiwKICAgICAgICAgICAgYFlvdSBjYW4gbG9vayB1cCB0aGUgc2lnbmF0dXJlIGhlcmU6IGh0dHBzOi8vb3BlbmNoYWluLnh5ei9zaWduYXR1cmVzP3F1ZXJ5PSR7c2lnbmF0dXJlfS5gCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbmFtZTogIkFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQWJpSXRlbUFtYmlndWl0eUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih4LCB5KSB7CiAgICAgICAgICBzdXBlcigiRm91bmQgYW1iaWd1b3VzIHR5cGVzIGluIG92ZXJsb2FkZWQgQUJJIGl0ZW1zLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgYFxgJHt4LnR5cGV9XGAgaW4gXGAke2Zvcm1hdEFiaUl0ZW0yKHguYWJpSXRlbSl9XGAsIGFuZGAsCiAgICAgICAgICAgICAgYFxgJHt5LnR5cGV9XGAgaW4gXGAke2Zvcm1hdEFiaUl0ZW0yKHkuYWJpSXRlbSl9XGBgLAogICAgICAgICAgICAgICIiLAogICAgICAgICAgICAgICJUaGVzZSB0eXBlcyBlbmNvZGUgZGlmZmVyZW50bHkgYW5kIGNhbm5vdCBiZSBkaXN0aW5ndWlzaGVkIGF0IHJ1bnRpbWUuIiwKICAgICAgICAgICAgICAiUmVtb3ZlIG9uZSBvZiB0aGUgYW1iaWd1b3VzIGl0ZW1zIGluIHRoZSBBQkkuIgogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQWJpSXRlbUFtYmlndWl0eUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBCeXRlc1NpemVNaXNtYXRjaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGV4cGVjdGVkU2l6ZSwgZ2l2ZW5TaXplIH0pIHsKICAgICAgICAgIHN1cGVyKGBFeHBlY3RlZCBieXRlcyR7ZXhwZWN0ZWRTaXplfSwgZ290IGJ5dGVzJHtnaXZlblNpemV9LmAsIHsKICAgICAgICAgICAgbmFtZTogIkJ5dGVzU2l6ZU1pc21hdGNoRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIERlY29kZUxvZ0RhdGFNaXNtYXRjaCA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBhYmlJdGVtLCBkYXRhLCBwYXJhbXMsIHNpemU6IHNpemUzIH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYERhdGEgc2l6ZSBvZiAke3NpemUzfSBieXRlcyBpcyB0b28gc21hbGwgZm9yIG5vbi1pbmRleGVkIGV2ZW50IHBhcmFtZXRlcnMuYAogICAgICAgICAgXS5qb2luKCJcbiIpLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBQYXJhbXM6ICgke2Zvcm1hdEFiaVBhcmFtcyhwYXJhbXMsIHsgaW5jbHVkZU5hbWU6IHRydWUgfSl9KWAsCiAgICAgICAgICAgICAgYERhdGE6ICAgJHtkYXRhfSAoJHtzaXplM30gYnl0ZXMpYAogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiRGVjb2RlTG9nRGF0YU1pc21hdGNoIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFiaUl0ZW0iLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkYXRhIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAicGFyYW1zIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2l6ZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmFiaUl0ZW0gPSBhYmlJdGVtOwogICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOwogICAgICAgICAgdGhpcy5zaXplID0gc2l6ZTM7CiAgICAgICAgfQogICAgICB9OwogICAgICBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBhYmlJdGVtLCBwYXJhbSB9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBFeHBlY3RlZCBhIHRvcGljIGZvciBpbmRleGVkIGV2ZW50IHBhcmFtZXRlciR7cGFyYW0ubmFtZSA/IGAgIiR7cGFyYW0ubmFtZX0iYCA6ICIifSBvbiBldmVudCAiJHtmb3JtYXRBYmlJdGVtMihhYmlJdGVtLCB7IGluY2x1ZGVOYW1lOiB0cnVlIH0pfSIuYAogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IG5hbWU6ICJEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCIgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFiaUl0ZW0iLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5hYmlJdGVtID0gYWJpSXRlbTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBYmlFbmNvZGluZ1R5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIGVuY29kaW5nIHR5cGUuYCwKICAgICAgICAgICAgIlBsZWFzZSBwcm92aWRlIGEgdmFsaWQgQUJJIHR5cGUuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIG5hbWU6ICJJbnZhbGlkQWJpRW5jb2RpbmdUeXBlIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBYmlEZWNvZGluZ1R5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg5IH0pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIGRlY29kaW5nIHR5cGUuYCwKICAgICAgICAgICAgIlBsZWFzZSBwcm92aWRlIGEgdmFsaWQgQUJJIHR5cGUuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIG5hbWU6ICJJbnZhbGlkQWJpRGVjb2RpbmdUeXBlIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRBcnJheUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkgewogICAgICAgICAgc3VwZXIoW2BWYWx1ZSAiJHt2YWx1ZX0iIGlzIG5vdCBhIHZhbGlkIGFycmF5LmBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgbmFtZTogIkludmFsaWRBcnJheUVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkRGVmaW5pdGlvblR5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgIiR7dHlwZX0iIGlzIG5vdCBhIHZhbGlkIGRlZmluaXRpb24gdHlwZS5gLAogICAgICAgICAgICAnVmFsaWQgdHlwZXM6ICJmdW5jdGlvbiIsICJldmVudCIsICJlcnJvciInCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsgbmFtZTogIkludmFsaWREZWZpbml0aW9uVHlwZUVycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFVuc3VwcG9ydGVkUGFja2VkQWJpVHlwZSA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IodHlwZSkgewogICAgICAgICAgc3VwZXIoYFR5cGUgIiR7dHlwZX0iIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHBhY2tlZCBlbmNvZGluZy5gLCB7CiAgICAgICAgICAgIG5hbWU6ICJVbnN1cHBvcnRlZFBhY2tlZEFiaVR5cGUiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2RhdGEuanMKICB2YXIgU2xpY2VPZmZzZXRPdXRPZkJvdW5kc0Vycm9yLCBTaXplRXhjZWVkc1BhZGRpbmdTaXplRXJyb3IsIEludmFsaWRCeXRlc0xlbmd0aEVycm9yOwogIHZhciBpbml0X2RhdGEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvZGF0YS5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgb2Zmc2V0LCBwb3NpdGlvbiwgc2l6ZTogc2l6ZTMgfSkgewogICAgICAgICAgc3VwZXIoYFNsaWNlICR7cG9zaXRpb24gPT09ICJzdGFydCIgPyAic3RhcnRpbmciIDogImVuZGluZyJ9IGF0IG9mZnNldCAiJHtvZmZzZXR9IiBpcyBvdXQtb2YtYm91bmRzIChzaXplOiAke3NpemUzfSkuYCwgeyBuYW1lOiAiU2xpY2VPZmZzZXRPdXRPZkJvdW5kc0Vycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFNpemVFeGNlZWRzUGFkZGluZ1NpemVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBzaXplOiBzaXplMywgdGFyZ2V0U2l6ZSwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihgJHt0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7dHlwZS5zbGljZSgxKS50b0xvd2VyQ2FzZSgpfSBzaXplICgke3NpemUzfSkgZXhjZWVkcyBwYWRkaW5nIHNpemUgKCR7dGFyZ2V0U2l6ZX0pLmAsIHsgbmFtZTogIlNpemVFeGNlZWRzUGFkZGluZ1NpemVFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQnl0ZXNMZW5ndGhFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBzaXplOiBzaXplMywgdGFyZ2V0U2l6ZSwgdHlwZSB9KSB7CiAgICAgICAgICBzdXBlcihgJHt0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7dHlwZS5zbGljZSgxKS50b0xvd2VyQ2FzZSgpfSBpcyBleHBlY3RlZCB0byBiZSAke3RhcmdldFNpemV9ICR7dHlwZX0gbG9uZywgYnV0IGlzICR7c2l6ZTN9ICR7dHlwZX0gbG9uZy5gLCB7IG5hbWU6ICJJbnZhbGlkQnl0ZXNMZW5ndGhFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvcGFkLmpzCiAgZnVuY3Rpb24gcGFkKGhleE9yQnl0ZXMsIHsgZGlyLCBzaXplOiBzaXplMyA9IDMyIH0gPSB7fSkgewogICAgaWYgKHR5cGVvZiBoZXhPckJ5dGVzID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIHBhZEhleChoZXhPckJ5dGVzLCB7IGRpciwgc2l6ZTogc2l6ZTMgfSk7CiAgICByZXR1cm4gcGFkQnl0ZXMoaGV4T3JCeXRlcywgeyBkaXIsIHNpemU6IHNpemUzIH0pOwogIH0KICBmdW5jdGlvbiBwYWRIZXgoaGV4XywgeyBkaXIsIHNpemU6IHNpemUzID0gMzIgfSA9IHt9KSB7CiAgICBpZiAoc2l6ZTMgPT09IG51bGwpCiAgICAgIHJldHVybiBoZXhfOwogICAgY29uc3QgaGV4ID0gaGV4Xy5yZXBsYWNlKCIweCIsICIiKTsKICAgIGlmIChoZXgubGVuZ3RoID4gc2l6ZTMgKiAyKQogICAgICB0aHJvdyBuZXcgU2l6ZUV4Y2VlZHNQYWRkaW5nU2l6ZUVycm9yKHsKICAgICAgICBzaXplOiBNYXRoLmNlaWwoaGV4Lmxlbmd0aCAvIDIpLAogICAgICAgIHRhcmdldFNpemU6IHNpemUzLAogICAgICAgIHR5cGU6ICJoZXgiCiAgICAgIH0pOwogICAgcmV0dXJuIGAweCR7aGV4W2RpciA9PT0gInJpZ2h0IiA/ICJwYWRFbmQiIDogInBhZFN0YXJ0Il0oc2l6ZTMgKiAyLCAiMCIpfWA7CiAgfQogIGZ1bmN0aW9uIHBhZEJ5dGVzKGJ5dGVzMiwgeyBkaXIsIHNpemU6IHNpemUzID0gMzIgfSA9IHt9KSB7CiAgICBpZiAoc2l6ZTMgPT09IG51bGwpCiAgICAgIHJldHVybiBieXRlczI7CiAgICBpZiAoYnl0ZXMyLmxlbmd0aCA+IHNpemUzKQogICAgICB0aHJvdyBuZXcgU2l6ZUV4Y2VlZHNQYWRkaW5nU2l6ZUVycm9yKHsKICAgICAgICBzaXplOiBieXRlczIubGVuZ3RoLAogICAgICAgIHRhcmdldFNpemU6IHNpemUzLAogICAgICAgIHR5cGU6ICJieXRlcyIKICAgICAgfSk7CiAgICBjb25zdCBwYWRkZWRCeXRlcyA9IG5ldyBVaW50OEFycmF5KHNpemUzKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTM7IGkrKykgewogICAgICBjb25zdCBwYWRFbmQgPSBkaXIgPT09ICJyaWdodCI7CiAgICAgIHBhZGRlZEJ5dGVzW3BhZEVuZCA/IGkgOiBzaXplMyAtIGkgLSAxXSA9IGJ5dGVzMltwYWRFbmQgPyBpIDogYnl0ZXMyLmxlbmd0aCAtIGkgLSAxXTsKICAgIH0KICAgIHJldHVybiBwYWRkZWRCeXRlczsKICB9CiAgdmFyIGluaXRfcGFkID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9wYWQuanMiKCkgewogICAgICBpbml0X2RhdGEoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvZW5jb2RpbmcuanMKICB2YXIgSW50ZWdlck91dE9mUmFuZ2VFcnJvciwgSW52YWxpZEJ5dGVzQm9vbGVhbkVycm9yLCBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yLCBJbnZhbGlkSGV4VmFsdWVFcnJvciwgU2l6ZU92ZXJmbG93RXJyb3I7CiAgdmFyIGluaXRfZW5jb2RpbmcgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvZW5jb2RpbmcuanMiKCkgewogICAgICBpbml0X2Jhc2UoKTsKICAgICAgSW50ZWdlck91dE9mUmFuZ2VFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBtYXgsIG1pbiwgc2lnbmVkLCBzaXplOiBzaXplMywgdmFsdWUgfSkgewogICAgICAgICAgc3VwZXIoYE51bWJlciAiJHt2YWx1ZX0iIGlzIG5vdCBpbiBzYWZlICR7c2l6ZTMgPyBgJHtzaXplMyAqIDh9LWJpdCAke3NpZ25lZCA/ICJzaWduZWQiIDogInVuc2lnbmVkIn0gYCA6ICIifWludGVnZXIgcmFuZ2UgJHttYXggPyBgKCR7bWlufSB0byAke21heH0pYCA6IGAoYWJvdmUgJHttaW59KWB9YCwgeyBuYW1lOiAiSW50ZWdlck91dE9mUmFuZ2VFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQnl0ZXNCb29sZWFuRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGJ5dGVzMikgewogICAgICAgICAgc3VwZXIoYEJ5dGVzIHZhbHVlICIke2J5dGVzMn0iIGlzIG5vdCBhIHZhbGlkIGJvb2xlYW4uIFRoZSBieXRlcyBhcnJheSBtdXN0IGNvbnRhaW4gYSBzaW5nbGUgYnl0ZSBvZiBlaXRoZXIgYSAwIG9yIDEgdmFsdWUuYCwgewogICAgICAgICAgICBuYW1lOiAiSW52YWxpZEJ5dGVzQm9vbGVhbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihoZXgpIHsKICAgICAgICAgIHN1cGVyKGBIZXggdmFsdWUgIiR7aGV4fSIgaXMgbm90IGEgdmFsaWQgYm9vbGVhbi4gVGhlIGhleCB2YWx1ZSBtdXN0IGJlICIweDAiIChmYWxzZSkgb3IgIjB4MSIgKHRydWUpLmAsIHsgbmFtZTogIkludmFsaWRIZXhCb29sZWFuRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgSW52YWxpZEhleFZhbHVlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7CiAgICAgICAgICBzdXBlcihgSGV4IHZhbHVlICIke3ZhbHVlfSIgaXMgYW4gb2RkIGxlbmd0aCAoJHt2YWx1ZS5sZW5ndGh9KS4gSXQgbXVzdCBiZSBhbiBldmVuIGxlbmd0aC5gLCB7IG5hbWU6ICJJbnZhbGlkSGV4VmFsdWVFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTaXplT3ZlcmZsb3dFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBnaXZlblNpemUsIG1heFNpemUgfSkgewogICAgICAgICAgc3VwZXIoYFNpemUgY2Fubm90IGV4Y2VlZCAke21heFNpemV9IGJ5dGVzLiBHaXZlbiBzaXplOiAke2dpdmVuU2l6ZX0gYnl0ZXMuYCwgeyBuYW1lOiAiU2l6ZU92ZXJmbG93RXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9kYXRhL3RyaW0uanMKICBmdW5jdGlvbiB0cmltKGhleE9yQnl0ZXMsIHsgZGlyID0gImxlZnQiIH0gPSB7fSkgewogICAgbGV0IGRhdGEgPSB0eXBlb2YgaGV4T3JCeXRlcyA9PT0gInN0cmluZyIgPyBoZXhPckJ5dGVzLnJlcGxhY2UoIjB4IiwgIiIpIDogaGV4T3JCeXRlczsKICAgIGxldCBzbGljZUxlbmd0aCA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoIC0gMTsgaSsrKSB7CiAgICAgIGlmIChkYXRhW2RpciA9PT0gImxlZnQiID8gaSA6IGRhdGEubGVuZ3RoIC0gaSAtIDFdLnRvU3RyaW5nKCkgPT09ICIwIikKICAgICAgICBzbGljZUxlbmd0aCsrOwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBkYXRhID0gZGlyID09PSAibGVmdCIgPyBkYXRhLnNsaWNlKHNsaWNlTGVuZ3RoKSA6IGRhdGEuc2xpY2UoMCwgZGF0YS5sZW5ndGggLSBzbGljZUxlbmd0aCk7CiAgICBpZiAodHlwZW9mIGhleE9yQnl0ZXMgPT09ICJzdHJpbmciKSB7CiAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMSAmJiBkaXIgPT09ICJyaWdodCIpCiAgICAgICAgZGF0YSA9IGAke2RhdGF9MGA7CiAgICAgIHJldHVybiBgMHgke2RhdGEubGVuZ3RoICUgMiA9PT0gMSA/IGAwJHtkYXRhfWAgOiBkYXRhfWA7CiAgICB9CiAgICByZXR1cm4gZGF0YTsKICB9CiAgdmFyIGluaXRfdHJpbSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvdHJpbS5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5jb2RpbmcvZnJvbUhleC5qcwogIGZ1bmN0aW9uIGFzc2VydFNpemUoaGV4T3JCeXRlcywgeyBzaXplOiBzaXplMyB9KSB7CiAgICBpZiAoc2l6ZShoZXhPckJ5dGVzKSA+IHNpemUzKQogICAgICB0aHJvdyBuZXcgU2l6ZU92ZXJmbG93RXJyb3IoewogICAgICAgIGdpdmVuU2l6ZTogc2l6ZShoZXhPckJ5dGVzKSwKICAgICAgICBtYXhTaXplOiBzaXplMwogICAgICB9KTsKICB9CiAgZnVuY3Rpb24gZnJvbUhleChoZXgsIHRvT3JPcHRzKSB7CiAgICBjb25zdCBvcHRzID0gdHlwZW9mIHRvT3JPcHRzID09PSAic3RyaW5nIiA/IHsgdG86IHRvT3JPcHRzIH0gOiB0b09yT3B0czsKICAgIGNvbnN0IHRvID0gb3B0cy50bzsKICAgIGlmICh0byA9PT0gIm51bWJlciIpCiAgICAgIHJldHVybiBoZXhUb051bWJlcihoZXgsIG9wdHMpOwogICAgaWYgKHRvID09PSAiYmlnaW50IikKICAgICAgcmV0dXJuIGhleFRvQmlnSW50KGhleCwgb3B0cyk7CiAgICBpZiAodG8gPT09ICJzdHJpbmciKQogICAgICByZXR1cm4gaGV4VG9TdHJpbmcoaGV4LCBvcHRzKTsKICAgIGlmICh0byA9PT0gImJvb2xlYW4iKQogICAgICByZXR1cm4gaGV4VG9Cb29sKGhleCwgb3B0cyk7CiAgICByZXR1cm4gaGV4VG9CeXRlcyhoZXgsIG9wdHMpOwogIH0KICBmdW5jdGlvbiBoZXhUb0JpZ0ludChoZXgsIG9wdHMgPSB7fSkgewogICAgY29uc3QgeyBzaWduZWQgfSA9IG9wdHM7CiAgICBpZiAob3B0cy5zaXplKQogICAgICBhc3NlcnRTaXplKGhleCwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICBjb25zdCB2YWx1ZSA9IEJpZ0ludChoZXgpOwogICAgaWYgKCFzaWduZWQpCiAgICAgIHJldHVybiB2YWx1ZTsKICAgIGNvbnN0IHNpemUzID0gKGhleC5sZW5ndGggLSAyKSAvIDI7CiAgICBjb25zdCBtYXggPSAoMW4gPDwgQmlnSW50KHNpemUzKSAqIDhuIC0gMW4pIC0gMW47CiAgICBpZiAodmFsdWUgPD0gbWF4KQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gdmFsdWUgLSBCaWdJbnQoYDB4JHsiZiIucGFkU3RhcnQoc2l6ZTMgKiAyLCAiZiIpfWApIC0gMW47CiAgfQogIGZ1bmN0aW9uIGhleFRvQm9vbChoZXhfLCBvcHRzID0ge30pIHsKICAgIGxldCBoZXggPSBoZXhfOwogICAgaWYgKG9wdHMuc2l6ZSkgewogICAgICBhc3NlcnRTaXplKGhleCwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICAgIGhleCA9IHRyaW0oaGV4KTsKICAgIH0KICAgIGlmICh0cmltKGhleCkgPT09ICIweDAwIikKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKHRyaW0oaGV4KSA9PT0gIjB4MDEiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIHRocm93IG5ldyBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yKGhleCk7CiAgfQogIGZ1bmN0aW9uIGhleFRvTnVtYmVyKGhleCwgb3B0cyA9IHt9KSB7CiAgICByZXR1cm4gTnVtYmVyKGhleFRvQmlnSW50KGhleCwgb3B0cykpOwogIH0KICBmdW5jdGlvbiBoZXhUb1N0cmluZyhoZXgsIG9wdHMgPSB7fSkgewogICAgbGV0IGJ5dGVzMiA9IGhleFRvQnl0ZXMoaGV4KTsKICAgIGlmIChvcHRzLnNpemUpIHsKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICBieXRlczIgPSB0cmltKGJ5dGVzMiwgeyBkaXI6ICJyaWdodCIgfSk7CiAgICB9CiAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGJ5dGVzMik7CiAgfQogIHZhciBpbml0X2Zyb21IZXggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbmNvZGluZy9mcm9tSGV4LmpzIigpIHsKICAgICAgaW5pdF9lbmNvZGluZygpOwogICAgICBpbml0X3NpemUoKTsKICAgICAgaW5pdF90cmltKCk7CiAgICAgIGluaXRfdG9CeXRlcygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL3RvSGV4LmpzCiAgZnVuY3Rpb24gdG9IZXgodmFsdWUsIG9wdHMgPSB7fSkgewogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIgfHwgdHlwZW9mIHZhbHVlID09PSAiYmlnaW50IikKICAgICAgcmV0dXJuIG51bWJlclRvSGV4KHZhbHVlLCBvcHRzKTsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB7CiAgICAgIHJldHVybiBzdHJpbmdUb0hleCh2YWx1ZSwgb3B0cyk7CiAgICB9CiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAiYm9vbGVhbiIpCiAgICAgIHJldHVybiBib29sVG9IZXgodmFsdWUsIG9wdHMpOwogICAgcmV0dXJuIGJ5dGVzVG9IZXgodmFsdWUsIG9wdHMpOwogIH0KICBmdW5jdGlvbiBib29sVG9IZXgodmFsdWUsIG9wdHMgPSB7fSkgewogICAgY29uc3QgaGV4ID0gYDB4JHtOdW1iZXIodmFsdWUpfWA7CiAgICBpZiAodHlwZW9mIG9wdHMuc2l6ZSA9PT0gIm51bWJlciIpIHsKICAgICAgYXNzZXJ0U2l6ZShoZXgsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICByZXR1cm4gcGFkKGhleCwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICB9CiAgICByZXR1cm4gaGV4OwogIH0KICBmdW5jdGlvbiBieXRlc1RvSGV4KHZhbHVlLCBvcHRzID0ge30pIHsKICAgIGxldCBzdHJpbmcgPSAiIjsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKICAgICAgc3RyaW5nICs9IGhleGVzW3ZhbHVlW2ldXTsKICAgIH0KICAgIGNvbnN0IGhleCA9IGAweCR7c3RyaW5nfWA7CiAgICBpZiAodHlwZW9mIG9wdHMuc2l6ZSA9PT0gIm51bWJlciIpIHsKICAgICAgYXNzZXJ0U2l6ZShoZXgsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICByZXR1cm4gcGFkKGhleCwgeyBkaXI6ICJyaWdodCIsIHNpemU6IG9wdHMuc2l6ZSB9KTsKICAgIH0KICAgIHJldHVybiBoZXg7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvSGV4KHZhbHVlXywgb3B0cyA9IHt9KSB7CiAgICBjb25zdCB7IHNpZ25lZCwgc2l6ZTogc2l6ZTMgfSA9IG9wdHM7CiAgICBjb25zdCB2YWx1ZSA9IEJpZ0ludCh2YWx1ZV8pOwogICAgbGV0IG1heFZhbHVlOwogICAgaWYgKHNpemUzKSB7CiAgICAgIGlmIChzaWduZWQpCiAgICAgICAgbWF4VmFsdWUgPSAoMW4gPDwgQmlnSW50KHNpemUzKSAqIDhuIC0gMW4pIC0gMW47CiAgICAgIGVsc2UKICAgICAgICBtYXhWYWx1ZSA9IDJuICoqIChCaWdJbnQoc2l6ZTMpICogOG4pIC0gMW47CiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZV8gPT09ICJudW1iZXIiKSB7CiAgICAgIG1heFZhbHVlID0gQmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTsKICAgIH0KICAgIGNvbnN0IG1pblZhbHVlID0gdHlwZW9mIG1heFZhbHVlID09PSAiYmlnaW50IiAmJiBzaWduZWQgPyAtbWF4VmFsdWUgLSAxbiA6IDA7CiAgICBpZiAobWF4VmFsdWUgJiYgdmFsdWUgPiBtYXhWYWx1ZSB8fCB2YWx1ZSA8IG1pblZhbHVlKSB7CiAgICAgIGNvbnN0IHN1ZmZpeCA9IHR5cGVvZiB2YWx1ZV8gPT09ICJiaWdpbnQiID8gIm4iIDogIiI7CiAgICAgIHRocm93IG5ldyBJbnRlZ2VyT3V0T2ZSYW5nZUVycm9yKHsKICAgICAgICBtYXg6IG1heFZhbHVlID8gYCR7bWF4VmFsdWV9JHtzdWZmaXh9YCA6IHZvaWQgMCwKICAgICAgICBtaW46IGAke21pblZhbHVlfSR7c3VmZml4fWAsCiAgICAgICAgc2lnbmVkLAogICAgICAgIHNpemU6IHNpemUzLAogICAgICAgIHZhbHVlOiBgJHt2YWx1ZV99JHtzdWZmaXh9YAogICAgICB9KTsKICAgIH0KICAgIGNvbnN0IGhleCA9IGAweCR7KHNpZ25lZCAmJiB2YWx1ZSA8IDAgPyAoMW4gPDwgQmlnSW50KHNpemUzICogOCkpICsgQmlnSW50KHZhbHVlKSA6IHZhbHVlKS50b1N0cmluZygxNil9YDsKICAgIGlmIChzaXplMykKICAgICAgcmV0dXJuIHBhZChoZXgsIHsgc2l6ZTogc2l6ZTMgfSk7CiAgICByZXR1cm4gaGV4OwogIH0KICBmdW5jdGlvbiBzdHJpbmdUb0hleCh2YWx1ZV8sIG9wdHMgPSB7fSkgewogICAgY29uc3QgdmFsdWUgPSBlbmNvZGVyLmVuY29kZSh2YWx1ZV8pOwogICAgcmV0dXJuIGJ5dGVzVG9IZXgodmFsdWUsIG9wdHMpOwogIH0KICB2YXIgaGV4ZXMsIGVuY29kZXI7CiAgdmFyIGluaXRfdG9IZXggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbmNvZGluZy90b0hleC5qcyIoKSB7CiAgICAgIGluaXRfZW5jb2RpbmcoKTsKICAgICAgaW5pdF9wYWQoKTsKICAgICAgaW5pdF9mcm9tSGV4KCk7CiAgICAgIGhleGVzID0gLyogQF9fUFVSRV9fICovIEFycmF5LmZyb20oeyBsZW5ndGg6IDI1NiB9LCAoX3YsIGkpID0+IGkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICIwIikpOwogICAgICBlbmNvZGVyID0gLyogQF9fUFVSRV9fICovIG5ldyBUZXh0RW5jb2RlcigpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL3RvQnl0ZXMuanMKICBmdW5jdGlvbiB0b0J5dGVzKHZhbHVlLCBvcHRzID0ge30pIHsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJudW1iZXIiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gImJpZ2ludCIpCiAgICAgIHJldHVybiBudW1iZXJUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJib29sZWFuIikKICAgICAgcmV0dXJuIGJvb2xUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICAgIGlmIChpc0hleCh2YWx1ZSkpCiAgICAgIHJldHVybiBoZXhUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICAgIHJldHVybiBzdHJpbmdUb0J5dGVzKHZhbHVlLCBvcHRzKTsKICB9CiAgZnVuY3Rpb24gYm9vbFRvQnl0ZXModmFsdWUsIG9wdHMgPSB7fSkgewogICAgY29uc3QgYnl0ZXMyID0gbmV3IFVpbnQ4QXJyYXkoMSk7CiAgICBieXRlczJbMF0gPSBOdW1iZXIodmFsdWUpOwogICAgaWYgKHR5cGVvZiBvcHRzLnNpemUgPT09ICJudW1iZXIiKSB7CiAgICAgIGFzc2VydFNpemUoYnl0ZXMyLCB7IHNpemU6IG9wdHMuc2l6ZSB9KTsKICAgICAgcmV0dXJuIHBhZChieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgfQogICAgcmV0dXJuIGJ5dGVzMjsKICB9CiAgZnVuY3Rpb24gY2hhckNvZGVUb0Jhc2UxNihjaGFyKSB7CiAgICBpZiAoY2hhciA+PSBjaGFyQ29kZU1hcC56ZXJvICYmIGNoYXIgPD0gY2hhckNvZGVNYXAubmluZSkKICAgICAgcmV0dXJuIGNoYXIgLSBjaGFyQ29kZU1hcC56ZXJvOwogICAgaWYgKGNoYXIgPj0gY2hhckNvZGVNYXAuQSAmJiBjaGFyIDw9IGNoYXJDb2RlTWFwLkYpCiAgICAgIHJldHVybiBjaGFyIC0gKGNoYXJDb2RlTWFwLkEgLSAxMCk7CiAgICBpZiAoY2hhciA+PSBjaGFyQ29kZU1hcC5hICYmIGNoYXIgPD0gY2hhckNvZGVNYXAuZikKICAgICAgcmV0dXJuIGNoYXIgLSAoY2hhckNvZGVNYXAuYSAtIDEwKTsKICAgIHJldHVybiB2b2lkIDA7CiAgfQogIGZ1bmN0aW9uIGhleFRvQnl0ZXMoaGV4Xywgb3B0cyA9IHt9KSB7CiAgICBsZXQgaGV4ID0gaGV4XzsKICAgIGlmIChvcHRzLnNpemUpIHsKICAgICAgYXNzZXJ0U2l6ZShoZXgsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICBoZXggPSBwYWQoaGV4LCB7IGRpcjogInJpZ2h0Iiwgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgfQogICAgbGV0IGhleFN0cmluZyA9IGhleC5zbGljZSgyKTsKICAgIGlmIChoZXhTdHJpbmcubGVuZ3RoICUgMikKICAgICAgaGV4U3RyaW5nID0gYDAke2hleFN0cmluZ31gOwogICAgY29uc3QgbGVuZ3RoID0gaGV4U3RyaW5nLmxlbmd0aCAvIDI7CiAgICBjb25zdCBieXRlczIgPSBuZXcgVWludDhBcnJheShsZW5ndGgpOwogICAgZm9yIChsZXQgaW5kZXgyID0gMCwgaiA9IDA7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyKyspIHsKICAgICAgY29uc3QgbmliYmxlTGVmdCA9IGNoYXJDb2RlVG9CYXNlMTYoaGV4U3RyaW5nLmNoYXJDb2RlQXQoaisrKSk7CiAgICAgIGNvbnN0IG5pYmJsZVJpZ2h0ID0gY2hhckNvZGVUb0Jhc2UxNihoZXhTdHJpbmcuY2hhckNvZGVBdChqKyspKTsKICAgICAgaWYgKG5pYmJsZUxlZnQgPT09IHZvaWQgMCB8fCBuaWJibGVSaWdodCA9PT0gdm9pZCAwKSB7CiAgICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoYEludmFsaWQgYnl0ZSBzZXF1ZW5jZSAoIiR7aGV4U3RyaW5nW2ogLSAyXX0ke2hleFN0cmluZ1tqIC0gMV19IiBpbiAiJHtoZXhTdHJpbmd9IikuYCk7CiAgICAgIH0KICAgICAgYnl0ZXMyW2luZGV4Ml0gPSBuaWJibGVMZWZ0ICogMTYgKyBuaWJibGVSaWdodDsKICAgIH0KICAgIHJldHVybiBieXRlczI7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvQnl0ZXModmFsdWUsIG9wdHMpIHsKICAgIGNvbnN0IGhleCA9IG51bWJlclRvSGV4KHZhbHVlLCBvcHRzKTsKICAgIHJldHVybiBoZXhUb0J5dGVzKGhleCk7CiAgfQogIGZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXModmFsdWUsIG9wdHMgPSB7fSkgewogICAgY29uc3QgYnl0ZXMyID0gZW5jb2RlcjIuZW5jb2RlKHZhbHVlKTsKICAgIGlmICh0eXBlb2Ygb3B0cy5zaXplID09PSAibnVtYmVyIikgewogICAgICBhc3NlcnRTaXplKGJ5dGVzMiwgeyBzaXplOiBvcHRzLnNpemUgfSk7CiAgICAgIHJldHVybiBwYWQoYnl0ZXMyLCB7IGRpcjogInJpZ2h0Iiwgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgfQogICAgcmV0dXJuIGJ5dGVzMjsKICB9CiAgdmFyIGVuY29kZXIyLCBjaGFyQ29kZU1hcDsKICB2YXIgaW5pdF90b0J5dGVzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5jb2RpbmcvdG9CeXRlcy5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X2lzSGV4KCk7CiAgICAgIGluaXRfcGFkKCk7CiAgICAgIGluaXRfZnJvbUhleCgpOwogICAgICBpbml0X3RvSGV4KCk7CiAgICAgIGVuY29kZXIyID0gLyogQF9fUFVSRV9fICovIG5ldyBUZXh0RW5jb2RlcigpOwogICAgICBjaGFyQ29kZU1hcCA9IHsKICAgICAgICB6ZXJvOiA0OCwKICAgICAgICBuaW5lOiA1NywKICAgICAgICBBOiA2NSwKICAgICAgICBGOiA3MCwKICAgICAgICBhOiA5NywKICAgICAgICBmOiAxMDIKICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL19hc3NlcnQuanMKICBmdW5jdGlvbiBudW1iZXIobikgewogICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihuKSB8fCBuIDwgMCkKICAgICAgdGhyb3cgbmV3IEVycm9yKGBwb3NpdGl2ZSBpbnRlZ2VyIGV4cGVjdGVkLCBub3QgJHtufWApOwogIH0KICBmdW5jdGlvbiBpc0J5dGVzKGEpIHsKICAgIHJldHVybiBhIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBhICE9IG51bGwgJiYgdHlwZW9mIGEgPT09ICJvYmplY3QiICYmIGEuY29uc3RydWN0b3IubmFtZSA9PT0gIlVpbnQ4QXJyYXkiOwogIH0KICBmdW5jdGlvbiBieXRlcyhiLCAuLi5sZW5ndGhzKSB7CiAgICBpZiAoIWlzQnl0ZXMoYikpCiAgICAgIHRocm93IG5ldyBFcnJvcigiVWludDhBcnJheSBleHBlY3RlZCIpOwogICAgaWYgKGxlbmd0aHMubGVuZ3RoID4gMCAmJiAhbGVuZ3Rocy5pbmNsdWRlcyhiLmxlbmd0aCkpCiAgICAgIHRocm93IG5ldyBFcnJvcihgVWludDhBcnJheSBleHBlY3RlZCBvZiBsZW5ndGggJHtsZW5ndGhzfSwgbm90IG9mIGxlbmd0aD0ke2IubGVuZ3RofWApOwogIH0KICBmdW5jdGlvbiBoYXNoKGgpIHsKICAgIGlmICh0eXBlb2YgaCAhPT0gImZ1bmN0aW9uIiB8fCB0eXBlb2YgaC5jcmVhdGUgIT09ICJmdW5jdGlvbiIpCiAgICAgIHRocm93IG5ldyBFcnJvcigiSGFzaCBzaG91bGQgYmUgd3JhcHBlZCBieSB1dGlscy53cmFwQ29uc3RydWN0b3IiKTsKICAgIG51bWJlcihoLm91dHB1dExlbik7CiAgICBudW1iZXIoaC5ibG9ja0xlbik7CiAgfQogIGZ1bmN0aW9uIGV4aXN0cyhpbnN0YW5jZSwgY2hlY2tGaW5pc2hlZCA9IHRydWUpIHsKICAgIGlmIChpbnN0YW5jZS5kZXN0cm95ZWQpCiAgICAgIHRocm93IG5ldyBFcnJvcigiSGFzaCBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWQiKTsKICAgIGlmIChjaGVja0ZpbmlzaGVkICYmIGluc3RhbmNlLmZpbmlzaGVkKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkhhc2gjZGlnZXN0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQiKTsKICB9CiAgZnVuY3Rpb24gb3V0cHV0KG91dCwgaW5zdGFuY2UpIHsKICAgIGJ5dGVzKG91dCk7CiAgICBjb25zdCBtaW4gPSBpbnN0YW5jZS5vdXRwdXRMZW47CiAgICBpZiAob3V0Lmxlbmd0aCA8IG1pbikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpZ2VzdEludG8oKSBleHBlY3RzIG91dHB1dCBidWZmZXIgb2YgbGVuZ3RoIGF0IGxlYXN0ICR7bWlufWApOwogICAgfQogIH0KICB2YXIgaW5pdF9hc3NlcnQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL19hc3NlcnQuanMiKCkgewogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vX3U2NC5qcwogIGZ1bmN0aW9uIGZyb21CaWcobiwgbGUgPSBmYWxzZSkgewogICAgaWYgKGxlKQogICAgICByZXR1cm4geyBoOiBOdW1iZXIobiAmIFUzMl9NQVNLNjQpLCBsOiBOdW1iZXIobiA+PiBfMzJuICYgVTMyX01BU0s2NCkgfTsKICAgIHJldHVybiB7IGg6IE51bWJlcihuID4+IF8zMm4gJiBVMzJfTUFTSzY0KSB8IDAsIGw6IE51bWJlcihuICYgVTMyX01BU0s2NCkgfCAwIH07CiAgfQogIGZ1bmN0aW9uIHNwbGl0KGxzdCwgbGUgPSBmYWxzZSkgewogICAgbGV0IEFoID0gbmV3IFVpbnQzMkFycmF5KGxzdC5sZW5ndGgpOwogICAgbGV0IEFsID0gbmV3IFVpbnQzMkFycmF5KGxzdC5sZW5ndGgpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsc3QubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgeyBoLCBsIH0gPSBmcm9tQmlnKGxzdFtpXSwgbGUpOwogICAgICBbQWhbaV0sIEFsW2ldXSA9IFtoLCBsXTsKICAgIH0KICAgIHJldHVybiBbQWgsIEFsXTsKICB9CiAgdmFyIFUzMl9NQVNLNjQsIF8zMm4sIHJvdGxTSCwgcm90bFNMLCByb3RsQkgsIHJvdGxCTDsKICB2YXIgaW5pdF91NjQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL191NjQuanMiKCkgewogICAgICBVMzJfTUFTSzY0ID0gLyogQF9fUFVSRV9fICovIEJpZ0ludCgyICoqIDMyIC0gMSk7CiAgICAgIF8zMm4gPSAvKiBAX19QVVJFX18gKi8gQmlnSW50KDMyKTsKICAgICAgcm90bFNIID0gKGgsIGwsIHMpID0+IGggPDwgcyB8IGwgPj4+IDMyIC0gczsKICAgICAgcm90bFNMID0gKGgsIGwsIHMpID0+IGwgPDwgcyB8IGggPj4+IDMyIC0gczsKICAgICAgcm90bEJIID0gKGgsIGwsIHMpID0+IGwgPDwgcyAtIDMyIHwgaCA+Pj4gNjQgLSBzOwogICAgICByb3RsQkwgPSAoaCwgbCwgcykgPT4gaCA8PCBzIC0gMzIgfCBsID4+PiA2NCAtIHM7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9jcnlwdG8uanMKICB2YXIgY3J5cHRvOwogIHZhciBpbml0X2NyeXB0byA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vY3J5cHRvLmpzIigpIHsKICAgICAgY3J5cHRvID0gdHlwZW9mIGdsb2JhbFRoaXMgPT09ICJvYmplY3QiICYmICJjcnlwdG8iIGluIGdsb2JhbFRoaXMgPyBnbG9iYWxUaGlzLmNyeXB0byA6IHZvaWQgMDsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL3V0aWxzLmpzCiAgZnVuY3Rpb24gYnl0ZVN3YXAzMihhcnIpIHsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7CiAgICAgIGFycltpXSA9IGJ5dGVTd2FwKGFycltpXSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHV0ZjhUb0J5dGVzKHN0cikgewogICAgaWYgKHR5cGVvZiBzdHIgIT09ICJzdHJpbmciKQogICAgICB0aHJvdyBuZXcgRXJyb3IoYHV0ZjhUb0J5dGVzIGV4cGVjdGVkIHN0cmluZywgZ290ICR7dHlwZW9mIHN0cn1gKTsKICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyKSk7CiAgfQogIGZ1bmN0aW9uIHRvQnl0ZXMyKGRhdGEpIHsKICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIpCiAgICAgIGRhdGEgPSB1dGY4VG9CeXRlcyhkYXRhKTsKICAgIGJ5dGVzKGRhdGEpOwogICAgcmV0dXJuIGRhdGE7CiAgfQogIGZ1bmN0aW9uIGNvbmNhdEJ5dGVzKC4uLmFycmF5cykgewogICAgbGV0IHN1bSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhID0gYXJyYXlzW2ldOwogICAgICBieXRlcyhhKTsKICAgICAgc3VtICs9IGEubGVuZ3RoOwogICAgfQogICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc3VtKTsKICAgIGZvciAobGV0IGkgPSAwLCBwYWQyID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhID0gYXJyYXlzW2ldOwogICAgICByZXMuc2V0KGEsIHBhZDIpOwogICAgICBwYWQyICs9IGEubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9CiAgZnVuY3Rpb24gd3JhcENvbnN0cnVjdG9yKGhhc2hDb25zKSB7CiAgICBjb25zdCBoYXNoQyA9IChtc2cpID0+IGhhc2hDb25zKCkudXBkYXRlKHRvQnl0ZXMyKG1zZykpLmRpZ2VzdCgpOwogICAgY29uc3QgdG1wID0gaGFzaENvbnMoKTsKICAgIGhhc2hDLm91dHB1dExlbiA9IHRtcC5vdXRwdXRMZW47CiAgICBoYXNoQy5ibG9ja0xlbiA9IHRtcC5ibG9ja0xlbjsKICAgIGhhc2hDLmNyZWF0ZSA9ICgpID0+IGhhc2hDb25zKCk7CiAgICByZXR1cm4gaGFzaEM7CiAgfQogIGZ1bmN0aW9uIHdyYXBYT0ZDb25zdHJ1Y3RvcldpdGhPcHRzKGhhc2hDb25zKSB7CiAgICBjb25zdCBoYXNoQyA9IChtc2csIG9wdHMpID0+IGhhc2hDb25zKG9wdHMpLnVwZGF0ZSh0b0J5dGVzMihtc2cpKS5kaWdlc3QoKTsKICAgIGNvbnN0IHRtcCA9IGhhc2hDb25zKHt9KTsKICAgIGhhc2hDLm91dHB1dExlbiA9IHRtcC5vdXRwdXRMZW47CiAgICBoYXNoQy5ibG9ja0xlbiA9IHRtcC5ibG9ja0xlbjsKICAgIGhhc2hDLmNyZWF0ZSA9IChvcHRzKSA9PiBoYXNoQ29ucyhvcHRzKTsKICAgIHJldHVybiBoYXNoQzsKICB9CiAgZnVuY3Rpb24gcmFuZG9tQnl0ZXMoYnl0ZXNMZW5ndGggPSAzMikgewogICAgaWYgKGNyeXB0byAmJiB0eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyA9PT0gImZ1bmN0aW9uIikgewogICAgICByZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShieXRlc0xlbmd0aCkpOwogICAgfQogICAgdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIG11c3QgYmUgZGVmaW5lZCIpOwogIH0KICB2YXIgdTMyLCBjcmVhdGVWaWV3LCByb3RyLCByb3RsLCBpc0xFLCBieXRlU3dhcCwgSGFzaCwgdG9TdHI7CiAgdmFyIGluaXRfdXRpbHMyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS91dGlscy5qcyIoKSB7CiAgICAgIGluaXRfY3J5cHRvKCk7CiAgICAgIGluaXRfYXNzZXJ0KCk7CiAgICAgIHUzMiA9IChhcnIpID0+IG5ldyBVaW50MzJBcnJheShhcnIuYnVmZmVyLCBhcnIuYnl0ZU9mZnNldCwgTWF0aC5mbG9vcihhcnIuYnl0ZUxlbmd0aCAvIDQpKTsKICAgICAgY3JlYXRlVmlldyA9IChhcnIpID0+IG5ldyBEYXRhVmlldyhhcnIuYnVmZmVyLCBhcnIuYnl0ZU9mZnNldCwgYXJyLmJ5dGVMZW5ndGgpOwogICAgICByb3RyID0gKHdvcmQsIHNoaWZ0KSA9PiB3b3JkIDw8IDMyIC0gc2hpZnQgfCB3b3JkID4+PiBzaGlmdDsKICAgICAgcm90bCA9ICh3b3JkLCBzaGlmdCkgPT4gd29yZCA8PCBzaGlmdCB8IHdvcmQgPj4+IDMyIC0gc2hpZnQgPj4+IDA7CiAgICAgIGlzTEUgPSBuZXcgVWludDhBcnJheShuZXcgVWludDMyQXJyYXkoWzI4NzQ1NDAyMF0pLmJ1ZmZlcilbMF0gPT09IDY4OwogICAgICBieXRlU3dhcCA9ICh3b3JkKSA9PiB3b3JkIDw8IDI0ICYgNDI3ODE5MDA4MCB8IHdvcmQgPDwgOCAmIDE2NzExNjgwIHwgd29yZCA+Pj4gOCAmIDY1MjgwIHwgd29yZCA+Pj4gMjQgJiAyNTU7CiAgICAgIEhhc2ggPSBjbGFzcyB7CiAgICAgICAgLy8gU2FmZSB2ZXJzaW9uIHRoYXQgY2xvbmVzIGludGVybmFsIHN0YXRlCiAgICAgICAgY2xvbmUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvbmVJbnRvKCk7CiAgICAgICAgfQogICAgICB9OwogICAgICB0b1N0ciA9IHt9LnRvU3RyaW5nOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vc2hhMy5qcwogIGZ1bmN0aW9uIGtlY2Nha1Aocywgcm91bmRzID0gMjQpIHsKICAgIGNvbnN0IEIgPSBuZXcgVWludDMyQXJyYXkoNSAqIDIpOwogICAgZm9yIChsZXQgcm91bmQgPSAyNCAtIHJvdW5kczsgcm91bmQgPCAyNDsgcm91bmQrKykgewogICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IDEwOyB4KyspCiAgICAgICAgQlt4XSA9IHNbeF0gXiBzW3ggKyAxMF0gXiBzW3ggKyAyMF0gXiBzW3ggKyAzMF0gXiBzW3ggKyA0MF07CiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgMTA7IHggKz0gMikgewogICAgICAgIGNvbnN0IGlkeDEgPSAoeCArIDgpICUgMTA7CiAgICAgICAgY29uc3QgaWR4MCA9ICh4ICsgMikgJSAxMDsKICAgICAgICBjb25zdCBCMCA9IEJbaWR4MF07CiAgICAgICAgY29uc3QgQjEgPSBCW2lkeDAgKyAxXTsKICAgICAgICBjb25zdCBUaCA9IHJvdGxIKEIwLCBCMSwgMSkgXiBCW2lkeDFdOwogICAgICAgIGNvbnN0IFRsID0gcm90bEwoQjAsIEIxLCAxKSBeIEJbaWR4MSArIDFdOwogICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgNTA7IHkgKz0gMTApIHsKICAgICAgICAgIHNbeCArIHldIF49IFRoOwogICAgICAgICAgc1t4ICsgeSArIDFdIF49IFRsOwogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgY3VySCA9IHNbMl07CiAgICAgIGxldCBjdXJMID0gc1szXTsKICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCAyNDsgdCsrKSB7CiAgICAgICAgY29uc3Qgc2hpZnQgPSBTSEEzX1JPVExbdF07CiAgICAgICAgY29uc3QgVGggPSByb3RsSChjdXJILCBjdXJMLCBzaGlmdCk7CiAgICAgICAgY29uc3QgVGwgPSByb3RsTChjdXJILCBjdXJMLCBzaGlmdCk7CiAgICAgICAgY29uc3QgUEkgPSBTSEEzX1BJW3RdOwogICAgICAgIGN1ckggPSBzW1BJXTsKICAgICAgICBjdXJMID0gc1tQSSArIDFdOwogICAgICAgIHNbUEldID0gVGg7CiAgICAgICAgc1tQSSArIDFdID0gVGw7CiAgICAgIH0KICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCA1MDsgeSArPSAxMCkgewogICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgMTA7IHgrKykKICAgICAgICAgIEJbeF0gPSBzW3kgKyB4XTsKICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IDEwOyB4KyspCiAgICAgICAgICBzW3kgKyB4XSBePSB+QlsoeCArIDIpICUgMTBdICYgQlsoeCArIDQpICUgMTBdOwogICAgICB9CiAgICAgIHNbMF0gXj0gU0hBM19JT1RBX0hbcm91bmRdOwogICAgICBzWzFdIF49IFNIQTNfSU9UQV9MW3JvdW5kXTsKICAgIH0KICAgIEIuZmlsbCgwKTsKICB9CiAgdmFyIFNIQTNfUEksIFNIQTNfUk9UTCwgX1NIQTNfSU9UQSwgXzBuLCBfMW4sIF8ybiwgXzduLCBfMjU2biwgXzB4NzFuLCBTSEEzX0lPVEFfSCwgU0hBM19JT1RBX0wsIHJvdGxILCByb3RsTCwgS2VjY2FrLCBnZW4sIHNoYTNfMjI0LCBzaGEzXzI1Niwgc2hhM18zODQsIHNoYTNfNTEyLCBrZWNjYWtfMjI0LCBrZWNjYWtfMjU2LCBrZWNjYWtfMzg0LCBrZWNjYWtfNTEyLCBnZW5TaGFrZSwgc2hha2UxMjgsIHNoYWtlMjU2OwogIHZhciBpbml0X3NoYTMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL3NoYTMuanMiKCkgewogICAgICBpbml0X2Fzc2VydCgpOwogICAgICBpbml0X3U2NCgpOwogICAgICBpbml0X3V0aWxzMigpOwogICAgICBTSEEzX1BJID0gW107CiAgICAgIFNIQTNfUk9UTCA9IFtdOwogICAgICBfU0hBM19JT1RBID0gW107CiAgICAgIF8wbiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMCk7CiAgICAgIF8xbiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMSk7CiAgICAgIF8ybiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMik7CiAgICAgIF83biA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoNyk7CiAgICAgIF8yNTZuID0gLyogQF9fUFVSRV9fICovIEJpZ0ludCgyNTYpOwogICAgICBfMHg3MW4gPSAvKiBAX19QVVJFX18gKi8gQmlnSW50KDExMyk7CiAgICAgIGZvciAobGV0IHJvdW5kID0gMCwgUiA9IF8xbiwgeCA9IDEsIHkgPSAwOyByb3VuZCA8IDI0OyByb3VuZCsrKSB7CiAgICAgICAgW3gsIHldID0gW3ksICgyICogeCArIDMgKiB5KSAlIDVdOwogICAgICAgIFNIQTNfUEkucHVzaCgyICogKDUgKiB5ICsgeCkpOwogICAgICAgIFNIQTNfUk9UTC5wdXNoKChyb3VuZCArIDEpICogKHJvdW5kICsgMikgLyAyICUgNjQpOwogICAgICAgIGxldCB0ID0gXzBuOwogICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgNzsgaisrKSB7CiAgICAgICAgICBSID0gKFIgPDwgXzFuIF4gKFIgPj4gXzduKSAqIF8weDcxbikgJSBfMjU2bjsKICAgICAgICAgIGlmIChSICYgXzJuKQogICAgICAgICAgICB0IF49IF8xbiA8PCAoXzFuIDw8IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoaikpIC0gXzFuOwogICAgICAgIH0KICAgICAgICBfU0hBM19JT1RBLnB1c2godCk7CiAgICAgIH0KICAgICAgW1NIQTNfSU9UQV9ILCBTSEEzX0lPVEFfTF0gPSAvKiBAX19QVVJFX18gKi8gc3BsaXQoX1NIQTNfSU9UQSwgdHJ1ZSk7CiAgICAgIHJvdGxIID0gKGgsIGwsIHMpID0+IHMgPiAzMiA/IHJvdGxCSChoLCBsLCBzKSA6IHJvdGxTSChoLCBsLCBzKTsKICAgICAgcm90bEwgPSAoaCwgbCwgcykgPT4gcyA+IDMyID8gcm90bEJMKGgsIGwsIHMpIDogcm90bFNMKGgsIGwsIHMpOwogICAgICBLZWNjYWsgPSBjbGFzcyBfS2VjY2FrIGV4dGVuZHMgSGFzaCB7CiAgICAgICAgLy8gTk9URTogd2UgYWNjZXB0IGFyZ3VtZW50cyBpbiBieXRlcyBpbnN0ZWFkIG9mIGJpdHMgaGVyZS4KICAgICAgICBjb25zdHJ1Y3RvcihibG9ja0xlbiwgc3VmZml4LCBvdXRwdXRMZW4sIGVuYWJsZVhPRiA9IGZhbHNlLCByb3VuZHMgPSAyNCkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIHRoaXMuYmxvY2tMZW4gPSBibG9ja0xlbjsKICAgICAgICAgIHRoaXMuc3VmZml4ID0gc3VmZml4OwogICAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0aGlzLmVuYWJsZVhPRiA9IGVuYWJsZVhPRjsKICAgICAgICAgIHRoaXMucm91bmRzID0gcm91bmRzOwogICAgICAgICAgdGhpcy5wb3MgPSAwOwogICAgICAgICAgdGhpcy5wb3NPdXQgPSAwOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTsKICAgICAgICAgIG51bWJlcihvdXRwdXRMZW4pOwogICAgICAgICAgaWYgKDAgPj0gdGhpcy5ibG9ja0xlbiB8fCB0aGlzLmJsb2NrTGVuID49IDIwMCkKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTaGEzIHN1cHBvcnRzIG9ubHkga2VjY2FrLWYxNjAwIGZ1bmN0aW9uIik7CiAgICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFVpbnQ4QXJyYXkoMjAwKTsKICAgICAgICAgIHRoaXMuc3RhdGUzMiA9IHUzMih0aGlzLnN0YXRlKTsKICAgICAgICB9CiAgICAgICAga2VjY2FrKCkgewogICAgICAgICAgaWYgKCFpc0xFKQogICAgICAgICAgICBieXRlU3dhcDMyKHRoaXMuc3RhdGUzMik7CiAgICAgICAgICBrZWNjYWtQKHRoaXMuc3RhdGUzMiwgdGhpcy5yb3VuZHMpOwogICAgICAgICAgaWYgKCFpc0xFKQogICAgICAgICAgICBieXRlU3dhcDMyKHRoaXMuc3RhdGUzMik7CiAgICAgICAgICB0aGlzLnBvc091dCA9IDA7CiAgICAgICAgICB0aGlzLnBvcyA9IDA7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZShkYXRhKSB7CiAgICAgICAgICBleGlzdHModGhpcyk7CiAgICAgICAgICBjb25zdCB7IGJsb2NrTGVuLCBzdGF0ZSB9ID0gdGhpczsKICAgICAgICAgIGRhdGEgPSB0b0J5dGVzMihkYXRhKTsKICAgICAgICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoOwogICAgICAgICAgZm9yIChsZXQgcG9zID0gMDsgcG9zIDwgbGVuOyApIHsKICAgICAgICAgICAgY29uc3QgdGFrZSA9IE1hdGgubWluKGJsb2NrTGVuIC0gdGhpcy5wb3MsIGxlbiAtIHBvcyk7CiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFrZTsgaSsrKQogICAgICAgICAgICAgIHN0YXRlW3RoaXMucG9zKytdIF49IGRhdGFbcG9zKytdOwogICAgICAgICAgICBpZiAodGhpcy5wb3MgPT09IGJsb2NrTGVuKQogICAgICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgZmluaXNoKCkgewogICAgICAgICAgaWYgKHRoaXMuZmluaXNoZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMuZmluaXNoZWQgPSB0cnVlOwogICAgICAgICAgY29uc3QgeyBzdGF0ZSwgc3VmZml4LCBwb3MsIGJsb2NrTGVuIH0gPSB0aGlzOwogICAgICAgICAgc3RhdGVbcG9zXSBePSBzdWZmaXg7CiAgICAgICAgICBpZiAoKHN1ZmZpeCAmIDEyOCkgIT09IDAgJiYgcG9zID09PSBibG9ja0xlbiAtIDEpCiAgICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgICBzdGF0ZVtibG9ja0xlbiAtIDFdIF49IDEyODsKICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgfQogICAgICAgIHdyaXRlSW50byhvdXQpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzLCBmYWxzZSk7CiAgICAgICAgICBieXRlcyhvdXQpOwogICAgICAgICAgdGhpcy5maW5pc2goKTsKICAgICAgICAgIGNvbnN0IGJ1ZmZlck91dCA9IHRoaXMuc3RhdGU7CiAgICAgICAgICBjb25zdCB7IGJsb2NrTGVuIH0gPSB0aGlzOwogICAgICAgICAgZm9yIChsZXQgcG9zID0gMCwgbGVuID0gb3V0Lmxlbmd0aDsgcG9zIDwgbGVuOyApIHsKICAgICAgICAgICAgaWYgKHRoaXMucG9zT3V0ID49IGJsb2NrTGVuKQogICAgICAgICAgICAgIHRoaXMua2VjY2FrKCk7CiAgICAgICAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihibG9ja0xlbiAtIHRoaXMucG9zT3V0LCBsZW4gLSBwb3MpOwogICAgICAgICAgICBvdXQuc2V0KGJ1ZmZlck91dC5zdWJhcnJheSh0aGlzLnBvc091dCwgdGhpcy5wb3NPdXQgKyB0YWtlKSwgcG9zKTsKICAgICAgICAgICAgdGhpcy5wb3NPdXQgKz0gdGFrZTsKICAgICAgICAgICAgcG9zICs9IHRha2U7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gb3V0OwogICAgICAgIH0KICAgICAgICB4b2ZJbnRvKG91dCkgewogICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZVhPRikKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJYT0YgaXMgbm90IHBvc3NpYmxlIGZvciB0aGlzIGluc3RhbmNlIik7CiAgICAgICAgICByZXR1cm4gdGhpcy53cml0ZUludG8ob3V0KTsKICAgICAgICB9CiAgICAgICAgeG9mKGJ5dGVzMikgewogICAgICAgICAgbnVtYmVyKGJ5dGVzMik7CiAgICAgICAgICByZXR1cm4gdGhpcy54b2ZJbnRvKG5ldyBVaW50OEFycmF5KGJ5dGVzMikpOwogICAgICAgIH0KICAgICAgICBkaWdlc3RJbnRvKG91dCkgewogICAgICAgICAgb3V0cHV0KG91dCwgdGhpcyk7CiAgICAgICAgICBpZiAodGhpcy5maW5pc2hlZCkKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJkaWdlc3QoKSB3YXMgYWxyZWFkeSBjYWxsZWQiKTsKICAgICAgICAgIHRoaXMud3JpdGVJbnRvKG91dCk7CiAgICAgICAgICB0aGlzLmRlc3Ryb3koKTsKICAgICAgICAgIHJldHVybiBvdXQ7CiAgICAgICAgfQogICAgICAgIGRpZ2VzdCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmRpZ2VzdEludG8obmV3IFVpbnQ4QXJyYXkodGhpcy5vdXRwdXRMZW4pKTsKICAgICAgICB9CiAgICAgICAgZGVzdHJveSgpIHsKICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuc3RhdGUuZmlsbCgwKTsKICAgICAgICB9CiAgICAgICAgX2Nsb25lSW50byh0bykgewogICAgICAgICAgY29uc3QgeyBibG9ja0xlbiwgc3VmZml4LCBvdXRwdXRMZW4sIHJvdW5kcywgZW5hYmxlWE9GIH0gPSB0aGlzOwogICAgICAgICAgdG8gfHwgKHRvID0gbmV3IF9LZWNjYWsoYmxvY2tMZW4sIHN1ZmZpeCwgb3V0cHV0TGVuLCBlbmFibGVYT0YsIHJvdW5kcykpOwogICAgICAgICAgdG8uc3RhdGUzMi5zZXQodGhpcy5zdGF0ZTMyKTsKICAgICAgICAgIHRvLnBvcyA9IHRoaXMucG9zOwogICAgICAgICAgdG8ucG9zT3V0ID0gdGhpcy5wb3NPdXQ7CiAgICAgICAgICB0by5maW5pc2hlZCA9IHRoaXMuZmluaXNoZWQ7CiAgICAgICAgICB0by5yb3VuZHMgPSByb3VuZHM7CiAgICAgICAgICB0by5zdWZmaXggPSBzdWZmaXg7CiAgICAgICAgICB0by5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0by5lbmFibGVYT0YgPSBlbmFibGVYT0Y7CiAgICAgICAgICB0by5kZXN0cm95ZWQgPSB0aGlzLmRlc3Ryb3llZDsKICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGdlbiA9IChzdWZmaXgsIGJsb2NrTGVuLCBvdXRwdXRMZW4pID0+IHdyYXBDb25zdHJ1Y3RvcigoKSA9PiBuZXcgS2VjY2FrKGJsb2NrTGVuLCBzdWZmaXgsIG91dHB1dExlbikpOwogICAgICBzaGEzXzIyNCA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oNiwgMTQ0LCAyMjQgLyA4KTsKICAgICAgc2hhM18yNTYgPSAvKiBAX19QVVJFX18gKi8gZ2VuKDYsIDEzNiwgMjU2IC8gOCk7CiAgICAgIHNoYTNfMzg0ID0gLyogQF9fUFVSRV9fICovIGdlbig2LCAxMDQsIDM4NCAvIDgpOwogICAgICBzaGEzXzUxMiA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oNiwgNzIsIDUxMiAvIDgpOwogICAgICBrZWNjYWtfMjI0ID0gLyogQF9fUFVSRV9fICovIGdlbigxLCAxNDQsIDIyNCAvIDgpOwogICAgICBrZWNjYWtfMjU2ID0gLyogQF9fUFVSRV9fICovIGdlbigxLCAxMzYsIDI1NiAvIDgpOwogICAgICBrZWNjYWtfMzg0ID0gLyogQF9fUFVSRV9fICovIGdlbigxLCAxMDQsIDM4NCAvIDgpOwogICAgICBrZWNjYWtfNTEyID0gLyogQF9fUFVSRV9fICovIGdlbigxLCA3MiwgNTEyIC8gOCk7CiAgICAgIGdlblNoYWtlID0gKHN1ZmZpeCwgYmxvY2tMZW4sIG91dHB1dExlbikgPT4gd3JhcFhPRkNvbnN0cnVjdG9yV2l0aE9wdHMoKG9wdHMgPSB7fSkgPT4gbmV3IEtlY2NhayhibG9ja0xlbiwgc3VmZml4LCBvcHRzLmRrTGVuID09PSB2b2lkIDAgPyBvdXRwdXRMZW4gOiBvcHRzLmRrTGVuLCB0cnVlKSk7CiAgICAgIHNoYWtlMTI4ID0gLyogQF9fUFVSRV9fICovIGdlblNoYWtlKDMxLCAxNjgsIDEyOCAvIDgpOwogICAgICBzaGFrZTI1NiA9IC8qIEBfX1BVUkVfXyAqLyBnZW5TaGFrZSgzMSwgMTM2LCAyNTYgLyA4KTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL2tlY2NhazI1Ni5qcwogIGZ1bmN0aW9uIGtlY2NhazI1Nih2YWx1ZSwgdG9fKSB7CiAgICBjb25zdCB0byA9IHRvXyB8fCAiaGV4IjsKICAgIGNvbnN0IGJ5dGVzMiA9IGtlY2Nha18yNTYoaXNIZXgodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KSA/IHRvQnl0ZXModmFsdWUpIDogdmFsdWUpOwogICAgaWYgKHRvID09PSAiYnl0ZXMiKQogICAgICByZXR1cm4gYnl0ZXMyOwogICAgcmV0dXJuIHRvSGV4KGJ5dGVzMik7CiAgfQogIHZhciBpbml0X2tlY2NhazI1NiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gva2VjY2FrMjU2LmpzIigpIHsKICAgICAgaW5pdF9zaGEzKCk7CiAgICAgIGluaXRfaXNIZXgoKTsKICAgICAgaW5pdF90b0J5dGVzKCk7CiAgICAgIGluaXRfdG9IZXgoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL2hhc2hTaWduYXR1cmUuanMKICBmdW5jdGlvbiBoYXNoU2lnbmF0dXJlKHNpZykgewogICAgcmV0dXJuIGhhc2gyKHNpZyk7CiAgfQogIHZhciBoYXNoMjsKICB2YXIgaW5pdF9oYXNoU2lnbmF0dXJlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9oYXNoU2lnbmF0dXJlLmpzIigpIHsKICAgICAgaW5pdF90b0J5dGVzKCk7CiAgICAgIGluaXRfa2VjY2FrMjU2KCk7CiAgICAgIGhhc2gyID0gKHZhbHVlKSA9PiBrZWNjYWsyNTYodG9CeXRlcyh2YWx1ZSkpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvbm9ybWFsaXplU2lnbmF0dXJlLmpzCiAgZnVuY3Rpb24gbm9ybWFsaXplU2lnbmF0dXJlKHNpZ25hdHVyZSkgewogICAgbGV0IGFjdGl2ZSA9IHRydWU7CiAgICBsZXQgY3VycmVudCA9ICIiOwogICAgbGV0IGxldmVsID0gMDsKICAgIGxldCByZXN1bHQgPSAiIjsKICAgIGxldCB2YWxpZCA9IGZhbHNlOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaWduYXR1cmUubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgY2hhciA9IHNpZ25hdHVyZVtpXTsKICAgICAgaWYgKFsiKCIsICIpIiwgIiwiXS5pbmNsdWRlcyhjaGFyKSkKICAgICAgICBhY3RpdmUgPSB0cnVlOwogICAgICBpZiAoY2hhciA9PT0gIigiKQogICAgICAgIGxldmVsKys7CiAgICAgIGlmIChjaGFyID09PSAiKSIpCiAgICAgICAgbGV2ZWwtLTsKICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgY29udGludWU7CiAgICAgIGlmIChsZXZlbCA9PT0gMCkgewogICAgICAgIGlmIChjaGFyID09PSAiICIgJiYgWyJldmVudCIsICJmdW5jdGlvbiIsICIiXS5pbmNsdWRlcyhyZXN1bHQpKQogICAgICAgICAgcmVzdWx0ID0gIiI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICByZXN1bHQgKz0gY2hhcjsKICAgICAgICAgIGlmIChjaGFyID09PSAiKSIpIHsKICAgICAgICAgICAgdmFsaWQgPSB0cnVlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGNoYXIgPT09ICIgIikgewogICAgICAgIGlmIChzaWduYXR1cmVbaSAtIDFdICE9PSAiLCIgJiYgY3VycmVudCAhPT0gIiwiICYmIGN1cnJlbnQgIT09ICIsKCIpIHsKICAgICAgICAgIGN1cnJlbnQgPSAiIjsKICAgICAgICAgIGFjdGl2ZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICByZXN1bHQgKz0gY2hhcjsKICAgICAgY3VycmVudCArPSBjaGFyOwogICAgfQogICAgaWYgKCF2YWxpZCkKICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoIlVuYWJsZSB0byBub3JtYWxpemUgc2lnbmF0dXJlLiIpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdmFyIGluaXRfbm9ybWFsaXplU2lnbmF0dXJlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9ub3JtYWxpemVTaWduYXR1cmUuanMiKCkgewogICAgICBpbml0X2Jhc2UoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvU2lnbmF0dXJlLmpzCiAgdmFyIHRvU2lnbmF0dXJlOwogIHZhciBpbml0X3RvU2lnbmF0dXJlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b1NpZ25hdHVyZS5qcyIoKSB7CiAgICAgIGluaXRfZXhwb3J0cygpOwogICAgICBpbml0X25vcm1hbGl6ZVNpZ25hdHVyZSgpOwogICAgICB0b1NpZ25hdHVyZSA9IChkZWYpID0+IHsKICAgICAgICBjb25zdCBkZWZfID0gKCgpID0+IHsKICAgICAgICAgIGlmICh0eXBlb2YgZGVmID09PSAic3RyaW5nIikKICAgICAgICAgICAgcmV0dXJuIGRlZjsKICAgICAgICAgIHJldHVybiBmb3JtYXRBYmlJdGVtKGRlZik7CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gbm9ybWFsaXplU2lnbmF0dXJlKGRlZl8pOwogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9TaWduYXR1cmVIYXNoLmpzCiAgZnVuY3Rpb24gdG9TaWduYXR1cmVIYXNoKGZuKSB7CiAgICByZXR1cm4gaGFzaFNpZ25hdHVyZSh0b1NpZ25hdHVyZShmbikpOwogIH0KICB2YXIgaW5pdF90b1NpZ25hdHVyZUhhc2ggPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvU2lnbmF0dXJlSGFzaC5qcyIoKSB7CiAgICAgIGluaXRfaGFzaFNpZ25hdHVyZSgpOwogICAgICBpbml0X3RvU2lnbmF0dXJlKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b0V2ZW50U2VsZWN0b3IuanMKICB2YXIgdG9FdmVudFNlbGVjdG9yOwogIHZhciBpbml0X3RvRXZlbnRTZWxlY3RvciA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9FdmVudFNlbGVjdG9yLmpzIigpIHsKICAgICAgaW5pdF90b1NpZ25hdHVyZUhhc2goKTsKICAgICAgdG9FdmVudFNlbGVjdG9yID0gdG9TaWduYXR1cmVIYXNoOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hZGRyZXNzLmpzCiAgdmFyIEludmFsaWRBZGRyZXNzRXJyb3I7CiAgdmFyIGluaXRfYWRkcmVzcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9hZGRyZXNzLmpzIigpIHsKICAgICAgaW5pdF9iYXNlKCk7CiAgICAgIEludmFsaWRBZGRyZXNzRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYWRkcmVzcyB9KSB7CiAgICAgICAgICBzdXBlcihgQWRkcmVzcyAiJHthZGRyZXNzfSIgaXMgaW52YWxpZC5gLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgICItIEFkZHJlc3MgbXVzdCBiZSBhIGhleCB2YWx1ZSBvZiAyMCBieXRlcyAoNDAgaGV4IGNoYXJhY3RlcnMpLiIsCiAgICAgICAgICAgICAgIi0gQWRkcmVzcyBtdXN0IG1hdGNoIGl0cyBjaGVja3N1bSBjb3VudGVycGFydC4iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkQWRkcmVzc0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2xydS5qcwogIHZhciBMcnVNYXA7CiAgdmFyIGluaXRfbHJ1ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvbHJ1LmpzIigpIHsKICAgICAgTHJ1TWFwID0gY2xhc3MgZXh0ZW5kcyBNYXAgewogICAgICAgIGNvbnN0cnVjdG9yKHNpemUzKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJtYXhTaXplIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMubWF4U2l6ZSA9IHNpemUzOwogICAgICAgIH0KICAgICAgICBzZXQoa2V5LCB2YWx1ZSkgewogICAgICAgICAgc3VwZXIuc2V0KGtleSwgdmFsdWUpOwogICAgICAgICAgaWYgKHRoaXMubWF4U2l6ZSAmJiB0aGlzLnNpemUgPiB0aGlzLm1heFNpemUpCiAgICAgICAgICAgIHRoaXMuZGVsZXRlKHRoaXMua2V5cygpLm5leHQoKS52YWx1ZSk7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9nZXRBZGRyZXNzLmpzCiAgZnVuY3Rpb24gY2hlY2tzdW1BZGRyZXNzKGFkZHJlc3NfLCBjaGFpbklkKSB7CiAgICBpZiAoY2hlY2tzdW1BZGRyZXNzQ2FjaGUuaGFzKGAke2FkZHJlc3NffS4ke2NoYWluSWR9YCkpCiAgICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3NDYWNoZS5nZXQoYCR7YWRkcmVzc199LiR7Y2hhaW5JZH1gKTsKICAgIGNvbnN0IGhleEFkZHJlc3MgPSBjaGFpbklkID8gYCR7Y2hhaW5JZH0ke2FkZHJlc3NfLnRvTG93ZXJDYXNlKCl9YCA6IGFkZHJlc3NfLnN1YnN0cmluZygyKS50b0xvd2VyQ2FzZSgpOwogICAgY29uc3QgaGFzaDMgPSBrZWNjYWsyNTYoc3RyaW5nVG9CeXRlcyhoZXhBZGRyZXNzKSwgImJ5dGVzIik7CiAgICBjb25zdCBhZGRyZXNzID0gKGNoYWluSWQgPyBoZXhBZGRyZXNzLnN1YnN0cmluZyhgJHtjaGFpbklkfTB4YC5sZW5ndGgpIDogaGV4QWRkcmVzcykuc3BsaXQoIiIpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MDsgaSArPSAyKSB7CiAgICAgIGlmIChoYXNoM1tpID4+IDFdID4+IDQgPj0gOCAmJiBhZGRyZXNzW2ldKSB7CiAgICAgICAgYWRkcmVzc1tpXSA9IGFkZHJlc3NbaV0udG9VcHBlckNhc2UoKTsKICAgICAgfQogICAgICBpZiAoKGhhc2gzW2kgPj4gMV0gJiAxNSkgPj0gOCAmJiBhZGRyZXNzW2kgKyAxXSkgewogICAgICAgIGFkZHJlc3NbaSArIDFdID0gYWRkcmVzc1tpICsgMV0udG9VcHBlckNhc2UoKTsKICAgICAgfQogICAgfQogICAgY29uc3QgcmVzdWx0ID0gYDB4JHthZGRyZXNzLmpvaW4oIiIpfWA7CiAgICBjaGVja3N1bUFkZHJlc3NDYWNoZS5zZXQoYCR7YWRkcmVzc199LiR7Y2hhaW5JZH1gLCByZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gZ2V0QWRkcmVzcyhhZGRyZXNzLCBjaGFpbklkKSB7CiAgICBpZiAoIWlzQWRkcmVzcyhhZGRyZXNzLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzcyB9KTsKICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3MoYWRkcmVzcywgY2hhaW5JZCk7CiAgfQogIHZhciBjaGVja3N1bUFkZHJlc3NDYWNoZTsKICB2YXIgaW5pdF9nZXRBZGRyZXNzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9nZXRBZGRyZXNzLmpzIigpIHsKICAgICAgaW5pdF9hZGRyZXNzKCk7CiAgICAgIGluaXRfdG9CeXRlcygpOwogICAgICBpbml0X2tlY2NhazI1NigpOwogICAgICBpbml0X2xydSgpOwogICAgICBpbml0X2lzQWRkcmVzcygpOwogICAgICBjaGVja3N1bUFkZHJlc3NDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTHJ1TWFwKDgxOTIpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FkZHJlc3MvaXNBZGRyZXNzLmpzCiAgZnVuY3Rpb24gaXNBZGRyZXNzKGFkZHJlc3MsIG9wdGlvbnMpIHsKICAgIGNvbnN0IHsgc3RyaWN0ID0gdHJ1ZSB9ID0gb3B0aW9ucyA/PyB7fTsKICAgIGNvbnN0IGNhY2hlS2V5MiA9IGAke2FkZHJlc3N9LiR7c3RyaWN0fWA7CiAgICBpZiAoaXNBZGRyZXNzQ2FjaGUuaGFzKGNhY2hlS2V5MikpCiAgICAgIHJldHVybiBpc0FkZHJlc3NDYWNoZS5nZXQoY2FjaGVLZXkyKTsKICAgIGNvbnN0IHJlc3VsdCA9ICgoKSA9PiB7CiAgICAgIGlmICghYWRkcmVzc1JlZ2V4LnRlc3QoYWRkcmVzcykpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoYWRkcmVzcy50b0xvd2VyQ2FzZSgpID09PSBhZGRyZXNzKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoc3RyaWN0KQogICAgICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3MoYWRkcmVzcykgPT09IGFkZHJlc3M7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSkoKTsKICAgIGlzQWRkcmVzc0NhY2hlLnNldChjYWNoZUtleTIsIHJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2YXIgYWRkcmVzc1JlZ2V4LCBpc0FkZHJlc3NDYWNoZTsKICB2YXIgaW5pdF9pc0FkZHJlc3MgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hZGRyZXNzL2lzQWRkcmVzcy5qcyIoKSB7CiAgICAgIGluaXRfbHJ1KCk7CiAgICAgIGluaXRfZ2V0QWRkcmVzcygpOwogICAgICBhZGRyZXNzUmVnZXggPSAvXjB4W2EtZkEtRjAtOV17NDB9JC87CiAgICAgIGlzQWRkcmVzc0NhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBMcnVNYXAoODE5Mik7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9jb25jYXQuanMKICBmdW5jdGlvbiBjb25jYXQodmFsdWVzKSB7CiAgICBpZiAodHlwZW9mIHZhbHVlc1swXSA9PT0gInN0cmluZyIpCiAgICAgIHJldHVybiBjb25jYXRIZXgodmFsdWVzKTsKICAgIHJldHVybiBjb25jYXRCeXRlczIodmFsdWVzKTsKICB9CiAgZnVuY3Rpb24gY29uY2F0Qnl0ZXMyKHZhbHVlcykgewogICAgbGV0IGxlbmd0aCA9IDA7CiAgICBmb3IgKGNvbnN0IGFyciBvZiB2YWx1ZXMpIHsKICAgICAgbGVuZ3RoICs9IGFyci5sZW5ndGg7CiAgICB9CiAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpOwogICAgbGV0IG9mZnNldCA9IDA7CiAgICBmb3IgKGNvbnN0IGFyciBvZiB2YWx1ZXMpIHsKICAgICAgcmVzdWx0LnNldChhcnIsIG9mZnNldCk7CiAgICAgIG9mZnNldCArPSBhcnIubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gY29uY2F0SGV4KHZhbHVlcykgewogICAgcmV0dXJuIGAweCR7dmFsdWVzLnJlZHVjZSgoYWNjLCB4KSA9PiBhY2MgKyB4LnJlcGxhY2UoIjB4IiwgIiIpLCAiIil9YDsKICB9CiAgdmFyIGluaXRfY29uY2F0ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9jb25jYXQuanMiKCkgewogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvc2xpY2UuanMKICBmdW5jdGlvbiBzbGljZSh2YWx1ZSwgc3RhcnQsIGVuZCwgeyBzdHJpY3QgfSA9IHt9KSB7CiAgICBpZiAoaXNIZXgodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgcmV0dXJuIHNsaWNlSGV4KHZhbHVlLCBzdGFydCwgZW5kLCB7CiAgICAgICAgc3RyaWN0CiAgICAgIH0pOwogICAgcmV0dXJuIHNsaWNlQnl0ZXModmFsdWUsIHN0YXJ0LCBlbmQsIHsKICAgICAgc3RyaWN0CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gYXNzZXJ0U3RhcnRPZmZzZXQodmFsdWUsIHN0YXJ0KSB7CiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAibnVtYmVyIiAmJiBzdGFydCA+IDAgJiYgc3RhcnQgPiBzaXplKHZhbHVlKSAtIDEpCiAgICAgIHRocm93IG5ldyBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IoewogICAgICAgIG9mZnNldDogc3RhcnQsCiAgICAgICAgcG9zaXRpb246ICJzdGFydCIsCiAgICAgICAgc2l6ZTogc2l6ZSh2YWx1ZSkKICAgICAgfSk7CiAgfQogIGZ1bmN0aW9uIGFzc2VydEVuZE9mZnNldCh2YWx1ZSwgc3RhcnQsIGVuZCkgewogICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gIm51bWJlciIgJiYgdHlwZW9mIGVuZCA9PT0gIm51bWJlciIgJiYgc2l6ZSh2YWx1ZSkgIT09IGVuZCAtIHN0YXJ0KSB7CiAgICAgIHRocm93IG5ldyBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IoewogICAgICAgIG9mZnNldDogZW5kLAogICAgICAgIHBvc2l0aW9uOiAiZW5kIiwKICAgICAgICBzaXplOiBzaXplKHZhbHVlKQogICAgICB9KTsKICAgIH0KICB9CiAgZnVuY3Rpb24gc2xpY2VCeXRlcyh2YWx1ZV8sIHN0YXJ0LCBlbmQsIHsgc3RyaWN0IH0gPSB7fSkgewogICAgYXNzZXJ0U3RhcnRPZmZzZXQodmFsdWVfLCBzdGFydCk7CiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlXy5zbGljZShzdGFydCwgZW5kKTsKICAgIGlmIChzdHJpY3QpCiAgICAgIGFzc2VydEVuZE9mZnNldCh2YWx1ZSwgc3RhcnQsIGVuZCk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQogIGZ1bmN0aW9uIHNsaWNlSGV4KHZhbHVlXywgc3RhcnQsIGVuZCwgeyBzdHJpY3QgfSA9IHt9KSB7CiAgICBhc3NlcnRTdGFydE9mZnNldCh2YWx1ZV8sIHN0YXJ0KTsKICAgIGNvbnN0IHZhbHVlID0gYDB4JHt2YWx1ZV8ucmVwbGFjZSgiMHgiLCAiIikuc2xpY2UoKHN0YXJ0ID8/IDApICogMiwgKGVuZCA/PyB2YWx1ZV8ubGVuZ3RoKSAqIDIpfWA7CiAgICBpZiAoc3RyaWN0KQogICAgICBhc3NlcnRFbmRPZmZzZXQodmFsdWUsIHN0YXJ0LCBlbmQpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KICB2YXIgaW5pdF9zbGljZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvc2xpY2UuanMiKCkgewogICAgICBpbml0X2RhdGEoKTsKICAgICAgaW5pdF9pc0hleCgpOwogICAgICBpbml0X3NpemUoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlQWJpUGFyYW1ldGVycy5qcwogIGZ1bmN0aW9uIGVuY29kZUFiaVBhcmFtZXRlcnMocGFyYW1zLCB2YWx1ZXMpIHsKICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSB2YWx1ZXMubGVuZ3RoKQogICAgICB0aHJvdyBuZXcgQWJpRW5jb2RpbmdMZW5ndGhNaXNtYXRjaEVycm9yKHsKICAgICAgICBleHBlY3RlZExlbmd0aDogcGFyYW1zLmxlbmd0aCwKICAgICAgICBnaXZlbkxlbmd0aDogdmFsdWVzLmxlbmd0aAogICAgICB9KTsKICAgIGNvbnN0IHByZXBhcmVkUGFyYW1zID0gcHJlcGFyZVBhcmFtcyh7CiAgICAgIHBhcmFtcywKICAgICAgdmFsdWVzCiAgICB9KTsKICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVQYXJhbXMocHJlcGFyZWRQYXJhbXMpOwogICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gIjB4IjsKICAgIHJldHVybiBkYXRhOwogIH0KICBmdW5jdGlvbiBwcmVwYXJlUGFyYW1zKHsgcGFyYW1zLCB2YWx1ZXMgfSkgewogICAgY29uc3QgcHJlcGFyZWRQYXJhbXMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIHByZXBhcmVkUGFyYW1zLnB1c2gocHJlcGFyZVBhcmFtKHsgcGFyYW06IHBhcmFtc1tpXSwgdmFsdWU6IHZhbHVlc1tpXSB9KSk7CiAgICB9CiAgICByZXR1cm4gcHJlcGFyZWRQYXJhbXM7CiAgfQogIGZ1bmN0aW9uIHByZXBhcmVQYXJhbSh7IHBhcmFtLCB2YWx1ZSB9KSB7CiAgICBjb25zdCBhcnJheUNvbXBvbmVudHMgPSBnZXRBcnJheUNvbXBvbmVudHMocGFyYW0udHlwZSk7CiAgICBpZiAoYXJyYXlDb21wb25lbnRzKSB7CiAgICAgIGNvbnN0IFtsZW5ndGgsIHR5cGVdID0gYXJyYXlDb21wb25lbnRzOwogICAgICByZXR1cm4gZW5jb2RlQXJyYXkodmFsdWUsIHsgbGVuZ3RoLCBwYXJhbTogeyAuLi5wYXJhbSwgdHlwZSB9IH0pOwogICAgfQogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJ0dXBsZSIpIHsKICAgICAgcmV0dXJuIGVuY29kZVR1cGxlKHZhbHVlLCB7CiAgICAgICAgcGFyYW0KICAgICAgfSk7CiAgICB9CiAgICBpZiAocGFyYW0udHlwZSA9PT0gImFkZHJlc3MiKSB7CiAgICAgIHJldHVybiBlbmNvZGVBZGRyZXNzKHZhbHVlKTsKICAgIH0KICAgIGlmIChwYXJhbS50eXBlID09PSAiYm9vbCIpIHsKICAgICAgcmV0dXJuIGVuY29kZUJvb2wodmFsdWUpOwogICAgfQogICAgaWYgKHBhcmFtLnR5cGUuc3RhcnRzV2l0aCgidWludCIpIHx8IHBhcmFtLnR5cGUuc3RhcnRzV2l0aCgiaW50IikpIHsKICAgICAgY29uc3Qgc2lnbmVkID0gcGFyYW0udHlwZS5zdGFydHNXaXRoKCJpbnQiKTsKICAgICAgcmV0dXJuIGVuY29kZU51bWJlcih2YWx1ZSwgeyBzaWduZWQgfSk7CiAgICB9CiAgICBpZiAocGFyYW0udHlwZS5zdGFydHNXaXRoKCJieXRlcyIpKSB7CiAgICAgIHJldHVybiBlbmNvZGVCeXRlcyh2YWx1ZSwgeyBwYXJhbSB9KTsKICAgIH0KICAgIGlmIChwYXJhbS50eXBlID09PSAic3RyaW5nIikgewogICAgICByZXR1cm4gZW5jb2RlU3RyaW5nKHZhbHVlKTsKICAgIH0KICAgIHRocm93IG5ldyBJbnZhbGlkQWJpRW5jb2RpbmdUeXBlRXJyb3IocGFyYW0udHlwZSwgewogICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L2VuY29kZUFiaVBhcmFtZXRlcnMiCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlUGFyYW1zKHByZXBhcmVkUGFyYW1zKSB7CiAgICBsZXQgc3RhdGljU2l6ZSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXBhcmVkUGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IHsgZHluYW1pYywgZW5jb2RlZCB9ID0gcHJlcGFyZWRQYXJhbXNbaV07CiAgICAgIGlmIChkeW5hbWljKQogICAgICAgIHN0YXRpY1NpemUgKz0gMzI7CiAgICAgIGVsc2UKICAgICAgICBzdGF0aWNTaXplICs9IHNpemUoZW5jb2RlZCk7CiAgICB9CiAgICBjb25zdCBzdGF0aWNQYXJhbXMgPSBbXTsKICAgIGNvbnN0IGR5bmFtaWNQYXJhbXMgPSBbXTsKICAgIGxldCBkeW5hbWljU2l6ZSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXBhcmVkUGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IHsgZHluYW1pYywgZW5jb2RlZCB9ID0gcHJlcGFyZWRQYXJhbXNbaV07CiAgICAgIGlmIChkeW5hbWljKSB7CiAgICAgICAgc3RhdGljUGFyYW1zLnB1c2gobnVtYmVyVG9IZXgoc3RhdGljU2l6ZSArIGR5bmFtaWNTaXplLCB7IHNpemU6IDMyIH0pKTsKICAgICAgICBkeW5hbWljUGFyYW1zLnB1c2goZW5jb2RlZCk7CiAgICAgICAgZHluYW1pY1NpemUgKz0gc2l6ZShlbmNvZGVkKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGF0aWNQYXJhbXMucHVzaChlbmNvZGVkKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvbmNhdChbLi4uc3RhdGljUGFyYW1zLCAuLi5keW5hbWljUGFyYW1zXSk7CiAgfQogIGZ1bmN0aW9uIGVuY29kZUFkZHJlc3ModmFsdWUpIHsKICAgIGlmICghaXNBZGRyZXNzKHZhbHVlKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB2YWx1ZSB9KTsKICAgIHJldHVybiB7IGR5bmFtaWM6IGZhbHNlLCBlbmNvZGVkOiBwYWRIZXgodmFsdWUudG9Mb3dlckNhc2UoKSkgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlQXJyYXkodmFsdWUsIHsgbGVuZ3RoLCBwYXJhbSB9KSB7CiAgICBjb25zdCBkeW5hbWljID0gbGVuZ3RoID09PSBudWxsOwogICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBcnJheUVycm9yKHZhbHVlKTsKICAgIGlmICghZHluYW1pYyAmJiB2YWx1ZS5sZW5ndGggIT09IGxlbmd0aCkKICAgICAgdGhyb3cgbmV3IEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yKHsKICAgICAgICBleHBlY3RlZExlbmd0aDogbGVuZ3RoLAogICAgICAgIGdpdmVuTGVuZ3RoOiB2YWx1ZS5sZW5ndGgsCiAgICAgICAgdHlwZTogYCR7cGFyYW0udHlwZX1bJHtsZW5ndGh9XWAKICAgICAgfSk7CiAgICBsZXQgZHluYW1pY0NoaWxkID0gZmFsc2U7CiAgICBjb25zdCBwcmVwYXJlZFBhcmFtcyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBwcmVwYXJlZFBhcmFtID0gcHJlcGFyZVBhcmFtKHsgcGFyYW0sIHZhbHVlOiB2YWx1ZVtpXSB9KTsKICAgICAgaWYgKHByZXBhcmVkUGFyYW0uZHluYW1pYykKICAgICAgICBkeW5hbWljQ2hpbGQgPSB0cnVlOwogICAgICBwcmVwYXJlZFBhcmFtcy5wdXNoKHByZXBhcmVkUGFyYW0pOwogICAgfQogICAgaWYgKGR5bmFtaWMgfHwgZHluYW1pY0NoaWxkKSB7CiAgICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVQYXJhbXMocHJlcGFyZWRQYXJhbXMpOwogICAgICBpZiAoZHluYW1pYykgewogICAgICAgIGNvbnN0IGxlbmd0aDIgPSBudW1iZXJUb0hleChwcmVwYXJlZFBhcmFtcy5sZW5ndGgsIHsgc2l6ZTogMzIgfSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGR5bmFtaWM6IHRydWUsCiAgICAgICAgICBlbmNvZGVkOiBwcmVwYXJlZFBhcmFtcy5sZW5ndGggPiAwID8gY29uY2F0KFtsZW5ndGgyLCBkYXRhXSkgOiBsZW5ndGgyCiAgICAgICAgfTsKICAgICAgfQogICAgICBpZiAoZHluYW1pY0NoaWxkKQogICAgICAgIHJldHVybiB7IGR5bmFtaWM6IHRydWUsIGVuY29kZWQ6IGRhdGEgfTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIGR5bmFtaWM6IGZhbHNlLAogICAgICBlbmNvZGVkOiBjb25jYXQocHJlcGFyZWRQYXJhbXMubWFwKCh7IGVuY29kZWQgfSkgPT4gZW5jb2RlZCkpCiAgICB9OwogIH0KICBmdW5jdGlvbiBlbmNvZGVCeXRlcyh2YWx1ZSwgeyBwYXJhbSB9KSB7CiAgICBjb25zdCBbLCBwYXJhbVNpemVdID0gcGFyYW0udHlwZS5zcGxpdCgiYnl0ZXMiKTsKICAgIGNvbnN0IGJ5dGVzU2l6ZSA9IHNpemUodmFsdWUpOwogICAgaWYgKCFwYXJhbVNpemUpIHsKICAgICAgbGV0IHZhbHVlXyA9IHZhbHVlOwogICAgICBpZiAoYnl0ZXNTaXplICUgMzIgIT09IDApCiAgICAgICAgdmFsdWVfID0gcGFkSGV4KHZhbHVlXywgewogICAgICAgICAgZGlyOiAicmlnaHQiLAogICAgICAgICAgc2l6ZTogTWF0aC5jZWlsKCh2YWx1ZS5sZW5ndGggLSAyKSAvIDIgLyAzMikgKiAzMgogICAgICAgIH0pOwogICAgICByZXR1cm4gewogICAgICAgIGR5bmFtaWM6IHRydWUsCiAgICAgICAgZW5jb2RlZDogY29uY2F0KFtwYWRIZXgobnVtYmVyVG9IZXgoYnl0ZXNTaXplLCB7IHNpemU6IDMyIH0pKSwgdmFsdWVfXSkKICAgICAgfTsKICAgIH0KICAgIGlmIChieXRlc1NpemUgIT09IE51bWJlci5wYXJzZUludChwYXJhbVNpemUpKQogICAgICB0aHJvdyBuZXcgQWJpRW5jb2RpbmdCeXRlc1NpemVNaXNtYXRjaEVycm9yKHsKICAgICAgICBleHBlY3RlZFNpemU6IE51bWJlci5wYXJzZUludChwYXJhbVNpemUpLAogICAgICAgIHZhbHVlCiAgICAgIH0pOwogICAgcmV0dXJuIHsgZHluYW1pYzogZmFsc2UsIGVuY29kZWQ6IHBhZEhleCh2YWx1ZSwgeyBkaXI6ICJyaWdodCIgfSkgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlQm9vbCh2YWx1ZSkgewogICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gImJvb2xlYW4iKQogICAgICB0aHJvdyBuZXcgQmFzZUVycm9yMihgSW52YWxpZCBib29sZWFuIHZhbHVlOiAiJHt2YWx1ZX0iICh0eXBlOiAke3R5cGVvZiB2YWx1ZX0pLiBFeHBlY3RlZDogXGB0cnVlXGAgb3IgXGBmYWxzZVxgLmApOwogICAgcmV0dXJuIHsgZHluYW1pYzogZmFsc2UsIGVuY29kZWQ6IHBhZEhleChib29sVG9IZXgodmFsdWUpKSB9OwogIH0KICBmdW5jdGlvbiBlbmNvZGVOdW1iZXIodmFsdWUsIHsgc2lnbmVkIH0pIHsKICAgIHJldHVybiB7CiAgICAgIGR5bmFtaWM6IGZhbHNlLAogICAgICBlbmNvZGVkOiBudW1iZXJUb0hleCh2YWx1ZSwgewogICAgICAgIHNpemU6IDMyLAogICAgICAgIHNpZ25lZAogICAgICB9KQogICAgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlU3RyaW5nKHZhbHVlKSB7CiAgICBjb25zdCBoZXhWYWx1ZSA9IHN0cmluZ1RvSGV4KHZhbHVlKTsKICAgIGNvbnN0IHBhcnRzTGVuZ3RoID0gTWF0aC5jZWlsKHNpemUoaGV4VmFsdWUpIC8gMzIpOwogICAgY29uc3QgcGFydHMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHNMZW5ndGg7IGkrKykgewogICAgICBwYXJ0cy5wdXNoKHBhZEhleChzbGljZShoZXhWYWx1ZSwgaSAqIDMyLCAoaSArIDEpICogMzIpLCB7CiAgICAgICAgZGlyOiAicmlnaHQiCiAgICAgIH0pKTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIGR5bmFtaWM6IHRydWUsCiAgICAgIGVuY29kZWQ6IGNvbmNhdChbCiAgICAgICAgcGFkSGV4KG51bWJlclRvSGV4KHNpemUoaGV4VmFsdWUpLCB7IHNpemU6IDMyIH0pKSwKICAgICAgICAuLi5wYXJ0cwogICAgICBdKQogICAgfTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlVHVwbGUodmFsdWUsIHsgcGFyYW0gfSkgewogICAgbGV0IGR5bmFtaWMgPSBmYWxzZTsKICAgIGNvbnN0IHByZXBhcmVkUGFyYW1zID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtLmNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgcGFyYW1fID0gcGFyYW0uY29tcG9uZW50c1tpXTsKICAgICAgY29uc3QgaW5kZXgyID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBpIDogcGFyYW1fLm5hbWU7CiAgICAgIGNvbnN0IHByZXBhcmVkUGFyYW0gPSBwcmVwYXJlUGFyYW0oewogICAgICAgIHBhcmFtOiBwYXJhbV8sCiAgICAgICAgdmFsdWU6IHZhbHVlW2luZGV4Ml0KICAgICAgfSk7CiAgICAgIHByZXBhcmVkUGFyYW1zLnB1c2gocHJlcGFyZWRQYXJhbSk7CiAgICAgIGlmIChwcmVwYXJlZFBhcmFtLmR5bmFtaWMpCiAgICAgICAgZHluYW1pYyA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gewogICAgICBkeW5hbWljLAogICAgICBlbmNvZGVkOiBkeW5hbWljID8gZW5jb2RlUGFyYW1zKHByZXBhcmVkUGFyYW1zKSA6IGNvbmNhdChwcmVwYXJlZFBhcmFtcy5tYXAoKHsgZW5jb2RlZCB9KSA9PiBlbmNvZGVkKSkKICAgIH07CiAgfQogIGZ1bmN0aW9uIGdldEFycmF5Q29tcG9uZW50cyh0eXBlKSB7CiAgICBjb25zdCBtYXRjaGVzID0gdHlwZS5tYXRjaCgvXiguKilcWyhcZCspP1xdJC8pOwogICAgcmV0dXJuIG1hdGNoZXMgPyAoCiAgICAgIC8vIFJldHVybiBgbnVsbGAgaWYgdGhlIGFycmF5IGlzIGR5bmFtaWMuCiAgICAgIFttYXRjaGVzWzJdID8gTnVtYmVyKG1hdGNoZXNbMl0pIDogbnVsbCwgbWF0Y2hlc1sxXV0KICAgICkgOiB2b2lkIDA7CiAgfQogIHZhciBpbml0X2VuY29kZUFiaVBhcmFtZXRlcnMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlQWJpUGFyYW1ldGVycy5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfYWRkcmVzcygpOwogICAgICBpbml0X2Jhc2UoKTsKICAgICAgaW5pdF9pc0FkZHJlc3MoKTsKICAgICAgaW5pdF9jb25jYXQoKTsKICAgICAgaW5pdF9wYWQoKTsKICAgICAgaW5pdF9zaXplKCk7CiAgICAgIGluaXRfc2xpY2UoKTsKICAgICAgaW5pdF90b0hleCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9GdW5jdGlvblNlbGVjdG9yLmpzCiAgdmFyIHRvRnVuY3Rpb25TZWxlY3RvcjsKICB2YXIgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvRnVuY3Rpb25TZWxlY3Rvci5qcyIoKSB7CiAgICAgIGluaXRfc2xpY2UoKTsKICAgICAgaW5pdF90b1NpZ25hdHVyZUhhc2goKTsKICAgICAgdG9GdW5jdGlvblNlbGVjdG9yID0gKGZuKSA9PiBzbGljZSh0b1NpZ25hdHVyZUhhc2goZm4pLCAwLCA0KTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZ2V0QWJpSXRlbS5qcwogIGZ1bmN0aW9uIGdldEFiaUl0ZW0ocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFyZ3MgPSBbXSwgbmFtZSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGlzU2VsZWN0b3IgPSBpc0hleChuYW1lLCB7IHN0cmljdDogZmFsc2UgfSk7CiAgICBjb25zdCBhYmlJdGVtcyA9IGFiaTIuZmlsdGVyKChhYmlJdGVtKSA9PiB7CiAgICAgIGlmIChpc1NlbGVjdG9yKSB7CiAgICAgICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImZ1bmN0aW9uIikKICAgICAgICAgIHJldHVybiB0b0Z1bmN0aW9uU2VsZWN0b3IoYWJpSXRlbSkgPT09IG5hbWU7CiAgICAgICAgaWYgKGFiaUl0ZW0udHlwZSA9PT0gImV2ZW50IikKICAgICAgICAgIHJldHVybiB0b0V2ZW50U2VsZWN0b3IoYWJpSXRlbSkgPT09IG5hbWU7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiAibmFtZSIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLm5hbWUgPT09IG5hbWU7CiAgICB9KTsKICAgIGlmIChhYmlJdGVtcy5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiB2b2lkIDA7CiAgICBpZiAoYWJpSXRlbXMubGVuZ3RoID09PSAxKQogICAgICByZXR1cm4gYWJpSXRlbXNbMF07CiAgICBsZXQgbWF0Y2hlZEFiaUl0ZW0gPSB2b2lkIDA7CiAgICBmb3IgKGNvbnN0IGFiaUl0ZW0gb2YgYWJpSXRlbXMpIHsKICAgICAgaWYgKCEoImlucHV0cyIgaW4gYWJpSXRlbSkpCiAgICAgICAgY29udGludWU7CiAgICAgIGlmICghYXJncyB8fCBhcmdzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIGlmICghYWJpSXRlbS5pbnB1dHMgfHwgYWJpSXRlbS5pbnB1dHMubGVuZ3RoID09PSAwKQogICAgICAgICAgcmV0dXJuIGFiaUl0ZW07CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKCFhYmlJdGVtLmlucHV0cykKICAgICAgICBjb250aW51ZTsKICAgICAgaWYgKGFiaUl0ZW0uaW5wdXRzLmxlbmd0aCA9PT0gMCkKICAgICAgICBjb250aW51ZTsKICAgICAgaWYgKGFiaUl0ZW0uaW5wdXRzLmxlbmd0aCAhPT0gYXJncy5sZW5ndGgpCiAgICAgICAgY29udGludWU7CiAgICAgIGNvbnN0IG1hdGNoZWQgPSBhcmdzLmV2ZXJ5KChhcmcsIGluZGV4MikgPT4gewogICAgICAgIGNvbnN0IGFiaVBhcmFtZXRlciA9ICJpbnB1dHMiIGluIGFiaUl0ZW0gJiYgYWJpSXRlbS5pbnB1dHNbaW5kZXgyXTsKICAgICAgICBpZiAoIWFiaVBhcmFtZXRlcikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gaXNBcmdPZlR5cGUoYXJnLCBhYmlQYXJhbWV0ZXIpOwogICAgICB9KTsKICAgICAgaWYgKG1hdGNoZWQpIHsKICAgICAgICBpZiAobWF0Y2hlZEFiaUl0ZW0gJiYgImlucHV0cyIgaW4gbWF0Y2hlZEFiaUl0ZW0gJiYgbWF0Y2hlZEFiaUl0ZW0uaW5wdXRzKSB7CiAgICAgICAgICBjb25zdCBhbWJpZ3VvdXNUeXBlcyA9IGdldEFtYmlndW91c1R5cGVzKGFiaUl0ZW0uaW5wdXRzLCBtYXRjaGVkQWJpSXRlbS5pbnB1dHMsIGFyZ3MpOwogICAgICAgICAgaWYgKGFtYmlndW91c1R5cGVzKQogICAgICAgICAgICB0aHJvdyBuZXcgQWJpSXRlbUFtYmlndWl0eUVycm9yKHsKICAgICAgICAgICAgICBhYmlJdGVtLAogICAgICAgICAgICAgIHR5cGU6IGFtYmlndW91c1R5cGVzWzBdCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICBhYmlJdGVtOiBtYXRjaGVkQWJpSXRlbSwKICAgICAgICAgICAgICB0eXBlOiBhbWJpZ3VvdXNUeXBlc1sxXQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgbWF0Y2hlZEFiaUl0ZW0gPSBhYmlJdGVtOwogICAgICB9CiAgICB9CiAgICBpZiAobWF0Y2hlZEFiaUl0ZW0pCiAgICAgIHJldHVybiBtYXRjaGVkQWJpSXRlbTsKICAgIHJldHVybiBhYmlJdGVtc1swXTsKICB9CiAgZnVuY3Rpb24gaXNBcmdPZlR5cGUoYXJnLCBhYmlQYXJhbWV0ZXIpIHsKICAgIGNvbnN0IGFyZ1R5cGUgPSB0eXBlb2YgYXJnOwogICAgY29uc3QgYWJpUGFyYW1ldGVyVHlwZSA9IGFiaVBhcmFtZXRlci50eXBlOwogICAgc3dpdGNoIChhYmlQYXJhbWV0ZXJUeXBlKSB7CiAgICAgIGNhc2UgImFkZHJlc3MiOgogICAgICAgIHJldHVybiBpc0FkZHJlc3MoYXJnLCB7IHN0cmljdDogZmFsc2UgfSk7CiAgICAgIGNhc2UgImJvb2wiOgogICAgICAgIHJldHVybiBhcmdUeXBlID09PSAiYm9vbGVhbiI7CiAgICAgIGNhc2UgImZ1bmN0aW9uIjoKICAgICAgICByZXR1cm4gYXJnVHlwZSA9PT0gInN0cmluZyI7CiAgICAgIGNhc2UgInN0cmluZyI6CiAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT09ICJzdHJpbmciOwogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaWYgKGFiaVBhcmFtZXRlclR5cGUgPT09ICJ0dXBsZSIgJiYgImNvbXBvbmVudHMiIGluIGFiaVBhcmFtZXRlcikKICAgICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGFiaVBhcmFtZXRlci5jb21wb25lbnRzKS5ldmVyeSgoY29tcG9uZW50LCBpbmRleDIpID0+IHsKICAgICAgICAgICAgcmV0dXJuIGlzQXJnT2ZUeXBlKE9iamVjdC52YWx1ZXMoYXJnKVtpbmRleDJdLCBjb21wb25lbnQpOwogICAgICAgICAgfSk7CiAgICAgICAgaWYgKC9edT9pbnQoOHwxNnwyNHwzMnw0MHw0OHw1Nnw2NHw3Mnw4MHw4OHw5NnwxMDR8MTEyfDEyMHwxMjh8MTM2fDE0NHwxNTJ8MTYwfDE2OHwxNzZ8MTg0fDE5MnwyMDB8MjA4fDIxNnwyMjR8MjMyfDI0MHwyNDh8MjU2KT8kLy50ZXN0KGFiaVBhcmFtZXRlclR5cGUpKQogICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT09ICJudW1iZXIiIHx8IGFyZ1R5cGUgPT09ICJiaWdpbnQiOwogICAgICAgIGlmICgvXmJ5dGVzKFsxLTldfDFbMC05XXwyWzAtOV18M1swLTJdKT8kLy50ZXN0KGFiaVBhcmFtZXRlclR5cGUpKQogICAgICAgICAgcmV0dXJuIGFyZ1R5cGUgPT09ICJzdHJpbmciIHx8IGFyZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk7CiAgICAgICAgaWYgKC9bYS16XStbMS05XXswLDN9KFxbWzAtOV17MCx9XF0pKyQvLnRlc3QoYWJpUGFyYW1ldGVyVHlwZSkpIHsKICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFyZykgJiYgYXJnLmV2ZXJ5KCh4KSA9PiBpc0FyZ09mVHlwZSh4LCB7CiAgICAgICAgICAgIC4uLmFiaVBhcmFtZXRlciwKICAgICAgICAgICAgLy8gUG9wIG9mZiBgW11gIG9yIGBbTV1gIGZyb20gZW5kIG9mIHR5cGUKICAgICAgICAgICAgdHlwZTogYWJpUGFyYW1ldGVyVHlwZS5yZXBsYWNlKC8oXFtbMC05XXswLH1cXSkkLywgIiIpCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiBnZXRBbWJpZ3VvdXNUeXBlcyhzb3VyY2VQYXJhbWV0ZXJzLCB0YXJnZXRQYXJhbWV0ZXJzLCBhcmdzKSB7CiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlckluZGV4IGluIHNvdXJjZVBhcmFtZXRlcnMpIHsKICAgICAgY29uc3Qgc291cmNlUGFyYW1ldGVyID0gc291cmNlUGFyYW1ldGVyc1twYXJhbWV0ZXJJbmRleF07CiAgICAgIGNvbnN0IHRhcmdldFBhcmFtZXRlciA9IHRhcmdldFBhcmFtZXRlcnNbcGFyYW1ldGVySW5kZXhdOwogICAgICBpZiAoc291cmNlUGFyYW1ldGVyLnR5cGUgPT09ICJ0dXBsZSIgJiYgdGFyZ2V0UGFyYW1ldGVyLnR5cGUgPT09ICJ0dXBsZSIgJiYgImNvbXBvbmVudHMiIGluIHNvdXJjZVBhcmFtZXRlciAmJiAiY29tcG9uZW50cyIgaW4gdGFyZ2V0UGFyYW1ldGVyKQogICAgICAgIHJldHVybiBnZXRBbWJpZ3VvdXNUeXBlcyhzb3VyY2VQYXJhbWV0ZXIuY29tcG9uZW50cywgdGFyZ2V0UGFyYW1ldGVyLmNvbXBvbmVudHMsIGFyZ3NbcGFyYW1ldGVySW5kZXhdKTsKICAgICAgY29uc3QgdHlwZXMgPSBbc291cmNlUGFyYW1ldGVyLnR5cGUsIHRhcmdldFBhcmFtZXRlci50eXBlXTsKICAgICAgY29uc3QgYW1iaWd1b3VzID0gKCgpID0+IHsKICAgICAgICBpZiAodHlwZXMuaW5jbHVkZXMoImFkZHJlc3MiKSAmJiB0eXBlcy5pbmNsdWRlcygiYnl0ZXMyMCIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKHR5cGVzLmluY2x1ZGVzKCJhZGRyZXNzIikgJiYgdHlwZXMuaW5jbHVkZXMoInN0cmluZyIpKQogICAgICAgICAgcmV0dXJuIGlzQWRkcmVzcyhhcmdzW3BhcmFtZXRlckluZGV4XSwgeyBzdHJpY3Q6IGZhbHNlIH0pOwogICAgICAgIGlmICh0eXBlcy5pbmNsdWRlcygiYWRkcmVzcyIpICYmIHR5cGVzLmluY2x1ZGVzKCJieXRlcyIpKQogICAgICAgICAgcmV0dXJuIGlzQWRkcmVzcyhhcmdzW3BhcmFtZXRlckluZGV4XSwgeyBzdHJpY3Q6IGZhbHNlIH0pOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSkoKTsKICAgICAgaWYgKGFtYmlndW91cykKICAgICAgICByZXR1cm4gdHlwZXM7CiAgICB9CiAgICByZXR1cm47CiAgfQogIHZhciBpbml0X2dldEFiaUl0ZW0gPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZ2V0QWJpSXRlbS5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfaXNIZXgoKTsKICAgICAgaW5pdF9pc0FkZHJlc3MoKTsKICAgICAgaW5pdF90b0V2ZW50U2VsZWN0b3IoKTsKICAgICAgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9wYXJzZUFjY291bnQuanMKICBmdW5jdGlvbiBwYXJzZUFjY291bnQoYWNjb3VudCkgewogICAgaWYgKHR5cGVvZiBhY2NvdW50ID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIHsgYWRkcmVzczogYWNjb3VudCwgdHlwZTogImpzb24tcnBjIiB9OwogICAgcmV0dXJuIGFjY291bnQ7CiAgfQogIHZhciBpbml0X3BhcnNlQWNjb3VudCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjY291bnRzL3V0aWxzL3BhcnNlQWNjb3VudC5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL3ByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEuanMKICBmdW5jdGlvbiBwcmVwYXJlRW5jb2RlRnVuY3Rpb25EYXRhKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhcmdzLCBmdW5jdGlvbk5hbWUgfSA9IHBhcmFtZXRlcnM7CiAgICBsZXQgYWJpSXRlbSA9IGFiaTJbMF07CiAgICBpZiAoZnVuY3Rpb25OYW1lKSB7CiAgICAgIGNvbnN0IGl0ZW0gPSBnZXRBYmlJdGVtKHsKICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgYXJncywKICAgICAgICBuYW1lOiBmdW5jdGlvbk5hbWUKICAgICAgfSk7CiAgICAgIGlmICghaXRlbSkKICAgICAgICB0aHJvdyBuZXcgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yKGZ1bmN0aW9uTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGgyIH0pOwogICAgICBhYmlJdGVtID0gaXRlbTsKICAgIH0KICAgIGlmIChhYmlJdGVtLnR5cGUgIT09ICJmdW5jdGlvbiIpCiAgICAgIHRocm93IG5ldyBBYmlGdW5jdGlvbk5vdEZvdW5kRXJyb3Iodm9pZCAwLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDIgfSk7CiAgICByZXR1cm4gewogICAgICBhYmk6IFthYmlJdGVtXSwKICAgICAgZnVuY3Rpb25OYW1lOiB0b0Z1bmN0aW9uU2VsZWN0b3IoZm9ybWF0QWJpSXRlbTIoYWJpSXRlbSkpCiAgICB9OwogIH0KICB2YXIgZG9jc1BhdGgyOwogIHZhciBpbml0X3ByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvcHJlcGFyZUVuY29kZUZ1bmN0aW9uRGF0YS5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfdG9GdW5jdGlvblNlbGVjdG9yKCk7CiAgICAgIGluaXRfZm9ybWF0QWJpSXRlbTIoKTsKICAgICAgaW5pdF9nZXRBYmlJdGVtKCk7CiAgICAgIGRvY3NQYXRoMiA9ICIvZG9jcy9jb250cmFjdC9lbmNvZGVGdW5jdGlvbkRhdGEiOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVGdW5jdGlvbkRhdGEuanMKICBmdW5jdGlvbiBlbmNvZGVGdW5jdGlvbkRhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhcmdzIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgeyBhYmk6IGFiaTIsIGZ1bmN0aW9uTmFtZSB9ID0gKCgpID0+IHsKICAgICAgaWYgKHBhcmFtZXRlcnMuYWJpLmxlbmd0aCA9PT0gMSAmJiBwYXJhbWV0ZXJzLmZ1bmN0aW9uTmFtZT8uc3RhcnRzV2l0aCgiMHgiKSkKICAgICAgICByZXR1cm4gcGFyYW1ldGVyczsKICAgICAgcmV0dXJuIHByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEocGFyYW1ldGVycyk7CiAgICB9KSgpOwogICAgY29uc3QgYWJpSXRlbSA9IGFiaTJbMF07CiAgICBjb25zdCBzaWduYXR1cmUgPSBmdW5jdGlvbk5hbWU7CiAgICBjb25zdCBkYXRhID0gImlucHV0cyIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLmlucHV0cyA/IGVuY29kZUFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMsIGFyZ3MgPz8gW10pIDogdm9pZCAwOwogICAgcmV0dXJuIGNvbmNhdEhleChbc2lnbmF0dXJlLCBkYXRhID8/ICIweCJdKTsKICB9CiAgdmFyIGluaXRfZW5jb2RlRnVuY3Rpb25EYXRhID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2VuY29kZUZ1bmN0aW9uRGF0YS5qcyIoKSB7CiAgICAgIGluaXRfY29uY2F0KCk7CiAgICAgIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogICAgICBpbml0X3ByZXBhcmVFbmNvZGVGdW5jdGlvbkRhdGEoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMvc29saWRpdHkuanMKICB2YXIgcGFuaWNSZWFzb25zLCBzb2xpZGl0eUVycm9yLCBzb2xpZGl0eVBhbmljOwogIHZhciBpbml0X3NvbGlkaXR5ID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL3NvbGlkaXR5LmpzIigpIHsKICAgICAgcGFuaWNSZWFzb25zID0gewogICAgICAgIDE6ICJBbiBgYXNzZXJ0YCBjb25kaXRpb24gZmFpbGVkLiIsCiAgICAgICAgMTc6ICJBcml0aG1ldGljIG9wZXJhdGlvbiByZXN1bHRlZCBpbiB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cuIiwKICAgICAgICAxODogIkRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvIChlLmcuIGA1IC8gMGAgb3IgYDIzICUgMGApLiIsCiAgICAgICAgMzM6ICJBdHRlbXB0ZWQgdG8gY29udmVydCB0byBhbiBpbnZhbGlkIHR5cGUuIiwKICAgICAgICAzNDogIkF0dGVtcHRlZCB0byBhY2Nlc3MgYSBzdG9yYWdlIGJ5dGUgYXJyYXkgdGhhdCBpcyBpbmNvcnJlY3RseSBlbmNvZGVkLiIsCiAgICAgICAgNDk6ICJQZXJmb3JtZWQgYC5wb3AoKWAgb24gYW4gZW1wdHkgYXJyYXkiLAogICAgICAgIDUwOiAiQXJyYXkgaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4iLAogICAgICAgIDY1OiAiQWxsb2NhdGVkIHRvbyBtdWNoIG1lbW9yeSBvciBjcmVhdGVkIGFuIGFycmF5IHdoaWNoIGlzIHRvbyBsYXJnZS4iLAogICAgICAgIDgxOiAiQXR0ZW1wdGVkIHRvIGNhbGwgYSB6ZXJvLWluaXRpYWxpemVkIHZhcmlhYmxlIG9mIGludGVybmFsIGZ1bmN0aW9uIHR5cGUuIgogICAgICB9OwogICAgICBzb2xpZGl0eUVycm9yID0gewogICAgICAgIGlucHV0czogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAibWVzc2FnZSIsCiAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICBuYW1lOiAiRXJyb3IiLAogICAgICAgIHR5cGU6ICJlcnJvciIKICAgICAgfTsKICAgICAgc29saWRpdHlQYW5pYyA9IHsKICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogInJlYXNvbiIsCiAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgbmFtZTogIlBhbmljIiwKICAgICAgICB0eXBlOiAiZXJyb3IiCiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2N1cnNvci5qcwogIHZhciBOZWdhdGl2ZU9mZnNldEVycm9yLCBQb3NpdGlvbk91dE9mQm91bmRzRXJyb3IsIFJlY3Vyc2l2ZVJlYWRMaW1pdEV4Y2VlZGVkRXJyb3I7CiAgdmFyIGluaXRfY3Vyc29yID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2N1cnNvci5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBOZWdhdGl2ZU9mZnNldEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IG9mZnNldCB9KSB7CiAgICAgICAgICBzdXBlcihgT2Zmc2V0IFxgJHtvZmZzZXR9XGAgY2Fubm90IGJlIG5lZ2F0aXZlLmAsIHsKICAgICAgICAgICAgbmFtZTogIk5lZ2F0aXZlT2Zmc2V0RXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFBvc2l0aW9uT3V0T2ZCb3VuZHNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBsZW5ndGgsIHBvc2l0aW9uIH0pIHsKICAgICAgICAgIHN1cGVyKGBQb3NpdGlvbiBcYCR7cG9zaXRpb259XGAgaXMgb3V0IG9mIGJvdW5kcyAoXGAwIDwgcG9zaXRpb24gPCAke2xlbmd0aH1cYCkuYCwgeyBuYW1lOiAiUG9zaXRpb25PdXRPZkJvdW5kc0Vycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFJlY3Vyc2l2ZVJlYWRMaW1pdEV4Y2VlZGVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY291bnQsIGxpbWl0IH0pIHsKICAgICAgICAgIHN1cGVyKGBSZWN1cnNpdmUgcmVhZCBsaW1pdCBvZiBcYCR7bGltaXR9XGAgZXhjZWVkZWQgKHJlY3Vyc2l2ZSByZWFkIGNvdW50OiBcYCR7Y291bnR9XGApLmAsIHsgbmFtZTogIlJlY3Vyc2l2ZVJlYWRMaW1pdEV4Y2VlZGVkRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9jdXJzb3IuanMKICBmdW5jdGlvbiBjcmVhdGVDdXJzb3IoYnl0ZXMyLCB7IHJlY3Vyc2l2ZVJlYWRMaW1pdCA9IDgxOTIgfSA9IHt9KSB7CiAgICBjb25zdCBjdXJzb3IgPSBPYmplY3QuY3JlYXRlKHN0YXRpY0N1cnNvcik7CiAgICBjdXJzb3IuYnl0ZXMgPSBieXRlczI7CiAgICBjdXJzb3IuZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYnl0ZXMyLmJ1ZmZlciwgYnl0ZXMyLmJ5dGVPZmZzZXQsIGJ5dGVzMi5ieXRlTGVuZ3RoKTsKICAgIGN1cnNvci5wb3NpdGlvblJlYWRDb3VudCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBjdXJzb3IucmVjdXJzaXZlUmVhZExpbWl0ID0gcmVjdXJzaXZlUmVhZExpbWl0OwogICAgcmV0dXJuIGN1cnNvcjsKICB9CiAgdmFyIHN0YXRpY0N1cnNvcjsKICB2YXIgaW5pdF9jdXJzb3IyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY3Vyc29yLmpzIigpIHsKICAgICAgaW5pdF9jdXJzb3IoKTsKICAgICAgc3RhdGljQ3Vyc29yID0gewogICAgICAgIGJ5dGVzOiBuZXcgVWludDhBcnJheSgpLAogICAgICAgIGRhdGFWaWV3OiBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDApKSwKICAgICAgICBwb3NpdGlvbjogMCwKICAgICAgICBwb3NpdGlvblJlYWRDb3VudDogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwKICAgICAgICByZWN1cnNpdmVSZWFkQ291bnQ6IDAsCiAgICAgICAgcmVjdXJzaXZlUmVhZExpbWl0OiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksCiAgICAgICAgYXNzZXJ0UmVhZExpbWl0KCkgewogICAgICAgICAgaWYgKHRoaXMucmVjdXJzaXZlUmVhZENvdW50ID49IHRoaXMucmVjdXJzaXZlUmVhZExpbWl0KQogICAgICAgICAgICB0aHJvdyBuZXcgUmVjdXJzaXZlUmVhZExpbWl0RXhjZWVkZWRFcnJvcih7CiAgICAgICAgICAgICAgY291bnQ6IHRoaXMucmVjdXJzaXZlUmVhZENvdW50ICsgMSwKICAgICAgICAgICAgICBsaW1pdDogdGhpcy5yZWN1cnNpdmVSZWFkTGltaXQKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBhc3NlcnRQb3NpdGlvbihwb3NpdGlvbikgewogICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+IHRoaXMuYnl0ZXMubGVuZ3RoIC0gMSkKICAgICAgICAgICAgdGhyb3cgbmV3IFBvc2l0aW9uT3V0T2ZCb3VuZHNFcnJvcih7CiAgICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmJ5dGVzLmxlbmd0aCwKICAgICAgICAgICAgICBwb3NpdGlvbgogICAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGRlY3JlbWVudFBvc2l0aW9uKG9mZnNldCkgewogICAgICAgICAgaWYgKG9mZnNldCA8IDApCiAgICAgICAgICAgIHRocm93IG5ldyBOZWdhdGl2ZU9mZnNldEVycm9yKHsgb2Zmc2V0IH0pOwogICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uIC0gb2Zmc2V0OwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbik7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgICAgfSwKICAgICAgICBnZXRSZWFkQ291bnQocG9zaXRpb24pIHsKICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uUmVhZENvdW50LmdldChwb3NpdGlvbiB8fCB0aGlzLnBvc2l0aW9uKSB8fCAwOwogICAgICAgIH0sCiAgICAgICAgaW5jcmVtZW50UG9zaXRpb24ob2Zmc2V0KSB7CiAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkKICAgICAgICAgICAgdGhyb3cgbmV3IE5lZ2F0aXZlT2Zmc2V0RXJyb3IoeyBvZmZzZXQgfSk7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb24gKyBvZmZzZXQ7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RCeXRlKHBvc2l0aW9uXykgewogICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbl8gPz8gdGhpcy5wb3NpdGlvbjsKICAgICAgICAgIHRoaXMuYXNzZXJ0UG9zaXRpb24ocG9zaXRpb24pOwogICAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZXNbcG9zaXRpb25dOwogICAgICAgIH0sCiAgICAgICAgaW5zcGVjdEJ5dGVzKGxlbmd0aCwgcG9zaXRpb25fKSB7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uXyA/PyB0aGlzLnBvc2l0aW9uOwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbiArIGxlbmd0aCAtIDEpOwogICAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZXMuc3ViYXJyYXkocG9zaXRpb24sIHBvc2l0aW9uICsgbGVuZ3RoKTsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RVaW50OChwb3NpdGlvbl8pIHsKICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gcG9zaXRpb25fID8/IHRoaXMucG9zaXRpb247CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICAgICAgIHJldHVybiB0aGlzLmJ5dGVzW3Bvc2l0aW9uXTsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RVaW50MTYocG9zaXRpb25fKSB7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uXyA/PyB0aGlzLnBvc2l0aW9uOwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbiArIDEpOwogICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0VWludDE2KHBvc2l0aW9uKTsKICAgICAgICB9LAogICAgICAgIGluc3BlY3RVaW50MjQocG9zaXRpb25fKSB7CiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uXyA/PyB0aGlzLnBvc2l0aW9uOwogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbihwb3NpdGlvbiArIDIpOwogICAgICAgICAgcmV0dXJuICh0aGlzLmRhdGFWaWV3LmdldFVpbnQxNihwb3NpdGlvbikgPDwgOCkgKyB0aGlzLmRhdGFWaWV3LmdldFVpbnQ4KHBvc2l0aW9uICsgMik7CiAgICAgICAgfSwKICAgICAgICBpbnNwZWN0VWludDMyKHBvc2l0aW9uXykgewogICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbl8gPz8gdGhpcy5wb3NpdGlvbjsKICAgICAgICAgIHRoaXMuYXNzZXJ0UG9zaXRpb24ocG9zaXRpb24gKyAzKTsKICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldFVpbnQzMihwb3NpdGlvbik7CiAgICAgICAgfSwKICAgICAgICBwdXNoQnl0ZShieXRlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24pOwogICAgICAgICAgdGhpcy5ieXRlc1t0aGlzLnBvc2l0aW9uXSA9IGJ5dGU7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uKys7CiAgICAgICAgfSwKICAgICAgICBwdXNoQnl0ZXMoYnl0ZXMyKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24gKyBieXRlczIubGVuZ3RoIC0gMSk7CiAgICAgICAgICB0aGlzLmJ5dGVzLnNldChieXRlczIsIHRoaXMucG9zaXRpb24pOwogICAgICAgICAgdGhpcy5wb3NpdGlvbiArPSBieXRlczIubGVuZ3RoOwogICAgICAgIH0sCiAgICAgICAgcHVzaFVpbnQ4KHZhbHVlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24pOwogICAgICAgICAgdGhpcy5ieXRlc1t0aGlzLnBvc2l0aW9uXSA9IHZhbHVlOwogICAgICAgICAgdGhpcy5wb3NpdGlvbisrOwogICAgICAgIH0sCiAgICAgICAgcHVzaFVpbnQxNih2YWx1ZSkgewogICAgICAgICAgdGhpcy5hc3NlcnRQb3NpdGlvbih0aGlzLnBvc2l0aW9uICsgMSk7CiAgICAgICAgICB0aGlzLmRhdGFWaWV3LnNldFVpbnQxNih0aGlzLnBvc2l0aW9uLCB2YWx1ZSk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDI7CiAgICAgICAgfSwKICAgICAgICBwdXNoVWludDI0KHZhbHVlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24gKyAyKTsKICAgICAgICAgIHRoaXMuZGF0YVZpZXcuc2V0VWludDE2KHRoaXMucG9zaXRpb24sIHZhbHVlID4+IDgpOwogICAgICAgICAgdGhpcy5kYXRhVmlldy5zZXRVaW50OCh0aGlzLnBvc2l0aW9uICsgMiwgdmFsdWUgJiB+NDI5NDk2NzA0MCk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDM7CiAgICAgICAgfSwKICAgICAgICBwdXNoVWludDMyKHZhbHVlKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHRoaXMucG9zaXRpb24gKyAzKTsKICAgICAgICAgIHRoaXMuZGF0YVZpZXcuc2V0VWludDMyKHRoaXMucG9zaXRpb24sIHZhbHVlKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gKz0gNDsKICAgICAgICB9LAogICAgICAgIHJlYWRCeXRlKCkgewogICAgICAgICAgdGhpcy5hc3NlcnRSZWFkTGltaXQoKTsKICAgICAgICAgIHRoaXMuX3RvdWNoKCk7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zcGVjdEJ5dGUoKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24rKzsKICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9LAogICAgICAgIHJlYWRCeXRlcyhsZW5ndGgsIHNpemUzKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFJlYWRMaW1pdCgpOwogICAgICAgICAgdGhpcy5fdG91Y2goKTsKICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnNwZWN0Qnl0ZXMobGVuZ3RoKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gKz0gc2l6ZTMgPz8gbGVuZ3RoOwogICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0sCiAgICAgICAgcmVhZFVpbnQ4KCkgewogICAgICAgICAgdGhpcy5hc3NlcnRSZWFkTGltaXQoKTsKICAgICAgICAgIHRoaXMuX3RvdWNoKCk7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zcGVjdFVpbnQ4KCk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDE7CiAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfSwKICAgICAgICByZWFkVWludDE2KCkgewogICAgICAgICAgdGhpcy5hc3NlcnRSZWFkTGltaXQoKTsKICAgICAgICAgIHRoaXMuX3RvdWNoKCk7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zcGVjdFVpbnQxNigpOwogICAgICAgICAgdGhpcy5wb3NpdGlvbiArPSAyOwogICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0sCiAgICAgICAgcmVhZFVpbnQyNCgpIHsKICAgICAgICAgIHRoaXMuYXNzZXJ0UmVhZExpbWl0KCk7CiAgICAgICAgICB0aGlzLl90b3VjaCgpOwogICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmluc3BlY3RVaW50MjQoKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gKz0gMzsKICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9LAogICAgICAgIHJlYWRVaW50MzIoKSB7CiAgICAgICAgICB0aGlzLmFzc2VydFJlYWRMaW1pdCgpOwogICAgICAgICAgdGhpcy5fdG91Y2goKTsKICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnNwZWN0VWludDMyKCk7CiAgICAgICAgICB0aGlzLnBvc2l0aW9uICs9IDQ7CiAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfSwKICAgICAgICBnZXQgcmVtYWluaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZXMubGVuZ3RoIC0gdGhpcy5wb3NpdGlvbjsKICAgICAgICB9LAogICAgICAgIHNldFBvc2l0aW9uKHBvc2l0aW9uKSB7CiAgICAgICAgICBjb25zdCBvbGRQb3NpdGlvbiA9IHRoaXMucG9zaXRpb247CiAgICAgICAgICB0aGlzLmFzc2VydFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICAgICAgIHJldHVybiAoKSA9PiB0aGlzLnBvc2l0aW9uID0gb2xkUG9zaXRpb247CiAgICAgICAgfSwKICAgICAgICBfdG91Y2goKSB7CiAgICAgICAgICBpZiAodGhpcy5yZWN1cnNpdmVSZWFkTGltaXQgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLmdldFJlYWRDb3VudCgpOwogICAgICAgICAgdGhpcy5wb3NpdGlvblJlYWRDb3VudC5zZXQodGhpcy5wb3NpdGlvbiwgY291bnQgKyAxKTsKICAgICAgICAgIGlmIChjb3VudCA+IDApCiAgICAgICAgICAgIHRoaXMucmVjdXJzaXZlUmVhZENvdW50Kys7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL2Zyb21CeXRlcy5qcwogIGZ1bmN0aW9uIGZyb21CeXRlcyhieXRlczIsIHRvT3JPcHRzKSB7CiAgICBjb25zdCBvcHRzID0gdHlwZW9mIHRvT3JPcHRzID09PSAic3RyaW5nIiA/IHsgdG86IHRvT3JPcHRzIH0gOiB0b09yT3B0czsKICAgIGNvbnN0IHRvID0gb3B0cy50bzsKICAgIGlmICh0byA9PT0gIm51bWJlciIpCiAgICAgIHJldHVybiBieXRlc1RvTnVtYmVyKGJ5dGVzMiwgb3B0cyk7CiAgICBpZiAodG8gPT09ICJiaWdpbnQiKQogICAgICByZXR1cm4gYnl0ZXNUb0JpZ0ludChieXRlczIsIG9wdHMpOwogICAgaWYgKHRvID09PSAiYm9vbGVhbiIpCiAgICAgIHJldHVybiBieXRlc1RvQm9vbChieXRlczIsIG9wdHMpOwogICAgaWYgKHRvID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIGJ5dGVzVG9TdHJpbmcoYnl0ZXMyLCBvcHRzKTsKICAgIHJldHVybiBieXRlc1RvSGV4KGJ5dGVzMiwgb3B0cyk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9CaWdJbnQoYnl0ZXMyLCBvcHRzID0ge30pIHsKICAgIGlmICh0eXBlb2Ygb3B0cy5zaXplICE9PSAidW5kZWZpbmVkIikKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgY29uc3QgaGV4ID0gYnl0ZXNUb0hleChieXRlczIsIG9wdHMpOwogICAgcmV0dXJuIGhleFRvQmlnSW50KGhleCwgb3B0cyk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9Cb29sKGJ5dGVzXywgb3B0cyA9IHt9KSB7CiAgICBsZXQgYnl0ZXMyID0gYnl0ZXNfOwogICAgaWYgKHR5cGVvZiBvcHRzLnNpemUgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGFzc2VydFNpemUoYnl0ZXMyLCB7IHNpemU6IG9wdHMuc2l6ZSB9KTsKICAgICAgYnl0ZXMyID0gdHJpbShieXRlczIpOwogICAgfQogICAgaWYgKGJ5dGVzMi5sZW5ndGggPiAxIHx8IGJ5dGVzMlswXSA+IDEpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQnl0ZXNCb29sZWFuRXJyb3IoYnl0ZXMyKTsKICAgIHJldHVybiBCb29sZWFuKGJ5dGVzMlswXSk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9OdW1iZXIoYnl0ZXMyLCBvcHRzID0ge30pIHsKICAgIGlmICh0eXBlb2Ygb3B0cy5zaXplICE9PSAidW5kZWZpbmVkIikKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgY29uc3QgaGV4ID0gYnl0ZXNUb0hleChieXRlczIsIG9wdHMpOwogICAgcmV0dXJuIGhleFRvTnVtYmVyKGhleCwgb3B0cyk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9TdHJpbmcoYnl0ZXNfLCBvcHRzID0ge30pIHsKICAgIGxldCBieXRlczIgPSBieXRlc187CiAgICBpZiAodHlwZW9mIG9wdHMuc2l6ZSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgYXNzZXJ0U2l6ZShieXRlczIsIHsgc2l6ZTogb3B0cy5zaXplIH0pOwogICAgICBieXRlczIgPSB0cmltKGJ5dGVzMiwgeyBkaXI6ICJyaWdodCIgfSk7CiAgICB9CiAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGJ5dGVzMik7CiAgfQogIHZhciBpbml0X2Zyb21CeXRlcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2VuY29kaW5nL2Zyb21CeXRlcy5qcyIoKSB7CiAgICAgIGluaXRfZW5jb2RpbmcoKTsKICAgICAgaW5pdF90cmltKCk7CiAgICAgIGluaXRfZnJvbUhleCgpOwogICAgICBpbml0X3RvSGV4KCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZUFiaVBhcmFtZXRlcnMuanMKICBmdW5jdGlvbiBkZWNvZGVBYmlQYXJhbWV0ZXJzKHBhcmFtcywgZGF0YSkgewogICAgY29uc3QgYnl0ZXMyID0gdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciID8gaGV4VG9CeXRlcyhkYXRhKSA6IGRhdGE7CiAgICBjb25zdCBjdXJzb3IgPSBjcmVhdGVDdXJzb3IoYnl0ZXMyKTsKICAgIGlmIChzaXplKGJ5dGVzMikgPT09IDAgJiYgcGFyYW1zLmxlbmd0aCA+IDApCiAgICAgIHRocm93IG5ldyBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IoKTsKICAgIGlmIChzaXplKGRhdGEpICYmIHNpemUoZGF0YSkgPCAzMikKICAgICAgdGhyb3cgbmV3IEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yKHsKICAgICAgICBkYXRhOiB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgPyBkYXRhIDogYnl0ZXNUb0hleChkYXRhKSwKICAgICAgICBwYXJhbXMsCiAgICAgICAgc2l6ZTogc2l6ZShkYXRhKQogICAgICB9KTsKICAgIGxldCBjb25zdW1lZCA9IDA7CiAgICBjb25zdCB2YWx1ZXMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgKytpKSB7CiAgICAgIGNvbnN0IHBhcmFtID0gcGFyYW1zW2ldOwogICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oY29uc3VtZWQpOwogICAgICBjb25zdCBbZGF0YTIsIGNvbnN1bWVkX10gPSBkZWNvZGVQYXJhbWV0ZXIoY3Vyc29yLCBwYXJhbSwgewogICAgICAgIHN0YXRpY1Bvc2l0aW9uOiAwCiAgICAgIH0pOwogICAgICBjb25zdW1lZCArPSBjb25zdW1lZF87CiAgICAgIHZhbHVlcy5wdXNoKGRhdGEyKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZXM7CiAgfQogIGZ1bmN0aW9uIGRlY29kZVBhcmFtZXRlcihjdXJzb3IsIHBhcmFtLCB7IHN0YXRpY1Bvc2l0aW9uIH0pIHsKICAgIGNvbnN0IGFycmF5Q29tcG9uZW50cyA9IGdldEFycmF5Q29tcG9uZW50cyhwYXJhbS50eXBlKTsKICAgIGlmIChhcnJheUNvbXBvbmVudHMpIHsKICAgICAgY29uc3QgW2xlbmd0aCwgdHlwZV0gPSBhcnJheUNvbXBvbmVudHM7CiAgICAgIHJldHVybiBkZWNvZGVBcnJheShjdXJzb3IsIHsgLi4ucGFyYW0sIHR5cGUgfSwgeyBsZW5ndGgsIHN0YXRpY1Bvc2l0aW9uIH0pOwogICAgfQogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJ0dXBsZSIpCiAgICAgIHJldHVybiBkZWNvZGVUdXBsZShjdXJzb3IsIHBhcmFtLCB7IHN0YXRpY1Bvc2l0aW9uIH0pOwogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJhZGRyZXNzIikKICAgICAgcmV0dXJuIGRlY29kZUFkZHJlc3MoY3Vyc29yKTsKICAgIGlmIChwYXJhbS50eXBlID09PSAiYm9vbCIpCiAgICAgIHJldHVybiBkZWNvZGVCb29sKGN1cnNvcik7CiAgICBpZiAocGFyYW0udHlwZS5zdGFydHNXaXRoKCJieXRlcyIpKQogICAgICByZXR1cm4gZGVjb2RlQnl0ZXMoY3Vyc29yLCBwYXJhbSwgeyBzdGF0aWNQb3NpdGlvbiB9KTsKICAgIGlmIChwYXJhbS50eXBlLnN0YXJ0c1dpdGgoInVpbnQiKSB8fCBwYXJhbS50eXBlLnN0YXJ0c1dpdGgoImludCIpKQogICAgICByZXR1cm4gZGVjb2RlTnVtYmVyKGN1cnNvciwgcGFyYW0pOwogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJzdHJpbmciKQogICAgICByZXR1cm4gZGVjb2RlU3RyaW5nKGN1cnNvciwgeyBzdGF0aWNQb3NpdGlvbiB9KTsKICAgIHRocm93IG5ldyBJbnZhbGlkQWJpRGVjb2RpbmdUeXBlRXJyb3IocGFyYW0udHlwZSwgewogICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L2RlY29kZUFiaVBhcmFtZXRlcnMiCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlQWRkcmVzcyhjdXJzb3IpIHsKICAgIGNvbnN0IHZhbHVlID0gY3Vyc29yLnJlYWRCeXRlcygzMik7CiAgICByZXR1cm4gW2NoZWNrc3VtQWRkcmVzcyhieXRlc1RvSGV4KHNsaWNlQnl0ZXModmFsdWUsIC0yMCkpKSwgMzJdOwogIH0KICBmdW5jdGlvbiBkZWNvZGVBcnJheShjdXJzb3IsIHBhcmFtLCB7IGxlbmd0aCwgc3RhdGljUG9zaXRpb24gfSkgewogICAgaWYgKCFsZW5ndGgpIHsKICAgICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKHNpemVPZk9mZnNldCkpOwogICAgICBjb25zdCBzdGFydCA9IHN0YXRpY1Bvc2l0aW9uICsgb2Zmc2V0OwogICAgICBjb25zdCBzdGFydE9mRGF0YSA9IHN0YXJ0ICsgc2l6ZU9mTGVuZ3RoOwogICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oc3RhcnQpOwogICAgICBjb25zdCBsZW5ndGgyID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKHNpemVPZkxlbmd0aCkpOwogICAgICBjb25zdCBkeW5hbWljQ2hpbGQgPSBoYXNEeW5hbWljQ2hpbGQocGFyYW0pOwogICAgICBsZXQgY29uc3VtZWQyID0gMDsKICAgICAgY29uc3QgdmFsdWUyID0gW107CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoMjsgKytpKSB7CiAgICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXJ0T2ZEYXRhICsgKGR5bmFtaWNDaGlsZCA/IGkgKiAzMiA6IGNvbnN1bWVkMikpOwogICAgICAgIGNvbnN0IFtkYXRhLCBjb25zdW1lZF9dID0gZGVjb2RlUGFyYW1ldGVyKGN1cnNvciwgcGFyYW0sIHsKICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uOiBzdGFydE9mRGF0YQogICAgICAgIH0pOwogICAgICAgIGNvbnN1bWVkMiArPSBjb25zdW1lZF87CiAgICAgICAgdmFsdWUyLnB1c2goZGF0YSk7CiAgICAgIH0KICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgICByZXR1cm4gW3ZhbHVlMiwgMzJdOwogICAgfQogICAgaWYgKGhhc0R5bmFtaWNDaGlsZChwYXJhbSkpIHsKICAgICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKHNpemVPZk9mZnNldCkpOwogICAgICBjb25zdCBzdGFydCA9IHN0YXRpY1Bvc2l0aW9uICsgb2Zmc2V0OwogICAgICBjb25zdCB2YWx1ZTIgPSBbXTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGFydCArIGkgKiAzMik7CiAgICAgICAgY29uc3QgW2RhdGFdID0gZGVjb2RlUGFyYW1ldGVyKGN1cnNvciwgcGFyYW0sIHsKICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uOiBzdGFydAogICAgICAgIH0pOwogICAgICAgIHZhbHVlMi5wdXNoKGRhdGEpOwogICAgICB9CiAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGF0aWNQb3NpdGlvbiArIDMyKTsKICAgICAgcmV0dXJuIFt2YWx1ZTIsIDMyXTsKICAgIH0KICAgIGxldCBjb25zdW1lZCA9IDA7CiAgICBjb25zdCB2YWx1ZSA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICBjb25zdCBbZGF0YSwgY29uc3VtZWRfXSA9IGRlY29kZVBhcmFtZXRlcihjdXJzb3IsIHBhcmFtLCB7CiAgICAgICAgc3RhdGljUG9zaXRpb246IHN0YXRpY1Bvc2l0aW9uICsgY29uc3VtZWQKICAgICAgfSk7CiAgICAgIGNvbnN1bWVkICs9IGNvbnN1bWVkXzsKICAgICAgdmFsdWUucHVzaChkYXRhKTsKICAgIH0KICAgIHJldHVybiBbdmFsdWUsIGNvbnN1bWVkXTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlQm9vbChjdXJzb3IpIHsKICAgIHJldHVybiBbYnl0ZXNUb0Jvb2woY3Vyc29yLnJlYWRCeXRlcygzMiksIHsgc2l6ZTogMzIgfSksIDMyXTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlQnl0ZXMoY3Vyc29yLCBwYXJhbSwgeyBzdGF0aWNQb3NpdGlvbiB9KSB7CiAgICBjb25zdCBbXywgc2l6ZTNdID0gcGFyYW0udHlwZS5zcGxpdCgiYnl0ZXMiKTsKICAgIGlmICghc2l6ZTMpIHsKICAgICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKDMyKSk7CiAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGF0aWNQb3NpdGlvbiArIG9mZnNldCk7CiAgICAgIGNvbnN0IGxlbmd0aCA9IGJ5dGVzVG9OdW1iZXIoY3Vyc29yLnJlYWRCeXRlcygzMikpOwogICAgICBpZiAobGVuZ3RoID09PSAwKSB7CiAgICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgICAgIHJldHVybiBbIjB4IiwgMzJdOwogICAgICB9CiAgICAgIGNvbnN0IGRhdGEgPSBjdXJzb3IucmVhZEJ5dGVzKGxlbmd0aCk7CiAgICAgIGN1cnNvci5zZXRQb3NpdGlvbihzdGF0aWNQb3NpdGlvbiArIDMyKTsKICAgICAgcmV0dXJuIFtieXRlc1RvSGV4KGRhdGEpLCAzMl07CiAgICB9CiAgICBjb25zdCB2YWx1ZSA9IGJ5dGVzVG9IZXgoY3Vyc29yLnJlYWRCeXRlcyhOdW1iZXIucGFyc2VJbnQoc2l6ZTMpLCAzMikpOwogICAgcmV0dXJuIFt2YWx1ZSwgMzJdOwogIH0KICBmdW5jdGlvbiBkZWNvZGVOdW1iZXIoY3Vyc29yLCBwYXJhbSkgewogICAgY29uc3Qgc2lnbmVkID0gcGFyYW0udHlwZS5zdGFydHNXaXRoKCJpbnQiKTsKICAgIGNvbnN0IHNpemUzID0gTnVtYmVyLnBhcnNlSW50KHBhcmFtLnR5cGUuc3BsaXQoImludCIpWzFdIHx8ICIyNTYiKTsKICAgIGNvbnN0IHZhbHVlID0gY3Vyc29yLnJlYWRCeXRlcygzMik7CiAgICByZXR1cm4gWwogICAgICBzaXplMyA+IDQ4ID8gYnl0ZXNUb0JpZ0ludCh2YWx1ZSwgeyBzaWduZWQgfSkgOiBieXRlc1RvTnVtYmVyKHZhbHVlLCB7IHNpZ25lZCB9KSwKICAgICAgMzIKICAgIF07CiAgfQogIGZ1bmN0aW9uIGRlY29kZVR1cGxlKGN1cnNvciwgcGFyYW0sIHsgc3RhdGljUG9zaXRpb24gfSkgewogICAgY29uc3QgaGFzVW5uYW1lZENoaWxkID0gcGFyYW0uY29tcG9uZW50cy5sZW5ndGggPT09IDAgfHwgcGFyYW0uY29tcG9uZW50cy5zb21lKCh7IG5hbWUgfSkgPT4gIW5hbWUpOwogICAgY29uc3QgdmFsdWUgPSBoYXNVbm5hbWVkQ2hpbGQgPyBbXSA6IHt9OwogICAgbGV0IGNvbnN1bWVkID0gMDsKICAgIGlmIChoYXNEeW5hbWljQ2hpbGQocGFyYW0pKSB7CiAgICAgIGNvbnN0IG9mZnNldCA9IGJ5dGVzVG9OdW1iZXIoY3Vyc29yLnJlYWRCeXRlcyhzaXplT2ZPZmZzZXQpKTsKICAgICAgY29uc3Qgc3RhcnQgPSBzdGF0aWNQb3NpdGlvbiArIG9mZnNldDsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbS5jb21wb25lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gcGFyYW0uY29tcG9uZW50c1tpXTsKICAgICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oc3RhcnQgKyBjb25zdW1lZCk7CiAgICAgICAgY29uc3QgW2RhdGEsIGNvbnN1bWVkX10gPSBkZWNvZGVQYXJhbWV0ZXIoY3Vyc29yLCBjb21wb25lbnQsIHsKICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uOiBzdGFydAogICAgICAgIH0pOwogICAgICAgIGNvbnN1bWVkICs9IGNvbnN1bWVkXzsKICAgICAgICB2YWx1ZVtoYXNVbm5hbWVkQ2hpbGQgPyBpIDogY29tcG9uZW50Py5uYW1lXSA9IGRhdGE7CiAgICAgIH0KICAgICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgICByZXR1cm4gW3ZhbHVlLCAzMl07CiAgICB9CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtLmNvbXBvbmVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgY29uc3QgY29tcG9uZW50ID0gcGFyYW0uY29tcG9uZW50c1tpXTsKICAgICAgY29uc3QgW2RhdGEsIGNvbnN1bWVkX10gPSBkZWNvZGVQYXJhbWV0ZXIoY3Vyc29yLCBjb21wb25lbnQsIHsKICAgICAgICBzdGF0aWNQb3NpdGlvbgogICAgICB9KTsKICAgICAgdmFsdWVbaGFzVW5uYW1lZENoaWxkID8gaSA6IGNvbXBvbmVudD8ubmFtZV0gPSBkYXRhOwogICAgICBjb25zdW1lZCArPSBjb25zdW1lZF87CiAgICB9CiAgICByZXR1cm4gW3ZhbHVlLCBjb25zdW1lZF07CiAgfQogIGZ1bmN0aW9uIGRlY29kZVN0cmluZyhjdXJzb3IsIHsgc3RhdGljUG9zaXRpb24gfSkgewogICAgY29uc3Qgb2Zmc2V0ID0gYnl0ZXNUb051bWJlcihjdXJzb3IucmVhZEJ5dGVzKDMyKSk7CiAgICBjb25zdCBzdGFydCA9IHN0YXRpY1Bvc2l0aW9uICsgb2Zmc2V0OwogICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXJ0KTsKICAgIGNvbnN0IGxlbmd0aCA9IGJ5dGVzVG9OdW1iZXIoY3Vyc29yLnJlYWRCeXRlcygzMikpOwogICAgaWYgKGxlbmd0aCA9PT0gMCkgewogICAgICBjdXJzb3Iuc2V0UG9zaXRpb24oc3RhdGljUG9zaXRpb24gKyAzMik7CiAgICAgIHJldHVybiBbIiIsIDMyXTsKICAgIH0KICAgIGNvbnN0IGRhdGEgPSBjdXJzb3IucmVhZEJ5dGVzKGxlbmd0aCwgMzIpOwogICAgY29uc3QgdmFsdWUgPSBieXRlc1RvU3RyaW5nKHRyaW0oZGF0YSkpOwogICAgY3Vyc29yLnNldFBvc2l0aW9uKHN0YXRpY1Bvc2l0aW9uICsgMzIpOwogICAgcmV0dXJuIFt2YWx1ZSwgMzJdOwogIH0KICBmdW5jdGlvbiBoYXNEeW5hbWljQ2hpbGQocGFyYW0pIHsKICAgIGNvbnN0IHsgdHlwZSB9ID0gcGFyYW07CiAgICBpZiAodHlwZSA9PT0gInN0cmluZyIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUgPT09ICJieXRlcyIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUuZW5kc1dpdGgoIltdIikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUgPT09ICJ0dXBsZSIpCiAgICAgIHJldHVybiBwYXJhbS5jb21wb25lbnRzPy5zb21lKGhhc0R5bmFtaWNDaGlsZCk7CiAgICBjb25zdCBhcnJheUNvbXBvbmVudHMgPSBnZXRBcnJheUNvbXBvbmVudHMocGFyYW0udHlwZSk7CiAgICBpZiAoYXJyYXlDb21wb25lbnRzICYmIGhhc0R5bmFtaWNDaGlsZCh7IC4uLnBhcmFtLCB0eXBlOiBhcnJheUNvbXBvbmVudHNbMV0gfSkpCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KICB2YXIgc2l6ZU9mTGVuZ3RoLCBzaXplT2ZPZmZzZXQ7CiAgdmFyIGluaXRfZGVjb2RlQWJpUGFyYW1ldGVycyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9kZWNvZGVBYmlQYXJhbWV0ZXJzLmpzIigpIHsKICAgICAgaW5pdF9hYmkoKTsKICAgICAgaW5pdF9nZXRBZGRyZXNzKCk7CiAgICAgIGluaXRfY3Vyc29yMigpOwogICAgICBpbml0X3NpemUoKTsKICAgICAgaW5pdF9zbGljZSgpOwogICAgICBpbml0X3RyaW0oKTsKICAgICAgaW5pdF9mcm9tQnl0ZXMoKTsKICAgICAgaW5pdF90b0J5dGVzKCk7CiAgICAgIGluaXRfdG9IZXgoKTsKICAgICAgaW5pdF9lbmNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgICAgIHNpemVPZkxlbmd0aCA9IDMyOwogICAgICBzaXplT2ZPZmZzZXQgPSAzMjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZGVjb2RlRXJyb3JSZXN1bHQuanMKICBmdW5jdGlvbiBkZWNvZGVFcnJvclJlc3VsdChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgZGF0YSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNsaWNlKGRhdGEsIDAsIDQpOwogICAgaWYgKHNpZ25hdHVyZSA9PT0gIjB4IikKICAgICAgdGhyb3cgbmV3IEFiaURlY29kaW5nWmVyb0RhdGFFcnJvcigpOwogICAgY29uc3QgYWJpXyA9IFsuLi5hYmkyIHx8IFtdLCBzb2xpZGl0eUVycm9yLCBzb2xpZGl0eVBhbmljXTsKICAgIGNvbnN0IGFiaUl0ZW0gPSBhYmlfLmZpbmQoKHgpID0+IHgudHlwZSA9PT0gImVycm9yIiAmJiBzaWduYXR1cmUgPT09IHRvRnVuY3Rpb25TZWxlY3Rvcihmb3JtYXRBYmlJdGVtMih4KSkpOwogICAgaWYgKCFhYmlJdGVtKQogICAgICB0aHJvdyBuZXcgQWJpRXJyb3JTaWduYXR1cmVOb3RGb3VuZEVycm9yKHNpZ25hdHVyZSwgewogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3QvZGVjb2RlRXJyb3JSZXN1bHQiCiAgICAgIH0pOwogICAgcmV0dXJuIHsKICAgICAgYWJpSXRlbSwKICAgICAgYXJnczogImlucHV0cyIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLmlucHV0cyAmJiBhYmlJdGVtLmlucHV0cy5sZW5ndGggPiAwID8gZGVjb2RlQWJpUGFyYW1ldGVycyhhYmlJdGVtLmlucHV0cywgc2xpY2UoZGF0YSwgNCkpIDogdm9pZCAwLAogICAgICBlcnJvck5hbWU6IGFiaUl0ZW0ubmFtZQogICAgfTsKICB9CiAgdmFyIGluaXRfZGVjb2RlRXJyb3JSZXN1bHQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZGVjb2RlRXJyb3JSZXN1bHQuanMiKCkgewogICAgICBpbml0X3NvbGlkaXR5KCk7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfc2xpY2UoKTsKICAgICAgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IoKTsKICAgICAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgICAgIGluaXRfZm9ybWF0QWJpSXRlbTIoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zdHJpbmdpZnkuanMKICB2YXIgc3RyaW5naWZ5OwogIHZhciBpbml0X3N0cmluZ2lmeSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3N0cmluZ2lmeS5qcyIoKSB7CiAgICAgIHN0cmluZ2lmeSA9ICh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKSA9PiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgKGtleSwgdmFsdWVfKSA9PiB7CiAgICAgICAgY29uc3QgdmFsdWUyID0gdHlwZW9mIHZhbHVlXyA9PT0gImJpZ2ludCIgPyB2YWx1ZV8udG9TdHJpbmcoKSA6IHZhbHVlXzsKICAgICAgICByZXR1cm4gdHlwZW9mIHJlcGxhY2VyID09PSAiZnVuY3Rpb24iID8gcmVwbGFjZXIoa2V5LCB2YWx1ZTIpIDogdmFsdWUyOwogICAgICB9LCBzcGFjZSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2Zvcm1hdEFiaUl0ZW1XaXRoQXJncy5qcwogIGZ1bmN0aW9uIGZvcm1hdEFiaUl0ZW1XaXRoQXJncyh7IGFiaUl0ZW0sIGFyZ3MsIGluY2x1ZGVGdW5jdGlvbk5hbWUgPSB0cnVlLCBpbmNsdWRlTmFtZSA9IGZhbHNlIH0pIHsKICAgIGlmICghKCJuYW1lIiBpbiBhYmlJdGVtKSkKICAgICAgcmV0dXJuOwogICAgaWYgKCEoImlucHV0cyIgaW4gYWJpSXRlbSkpCiAgICAgIHJldHVybjsKICAgIGlmICghYWJpSXRlbS5pbnB1dHMpCiAgICAgIHJldHVybjsKICAgIHJldHVybiBgJHtpbmNsdWRlRnVuY3Rpb25OYW1lID8gYWJpSXRlbS5uYW1lIDogIiJ9KCR7YWJpSXRlbS5pbnB1dHMubWFwKChpbnB1dCwgaSkgPT4gYCR7aW5jbHVkZU5hbWUgJiYgaW5wdXQubmFtZSA/IGAke2lucHV0Lm5hbWV9OiBgIDogIiJ9JHt0eXBlb2YgYXJnc1tpXSA9PT0gIm9iamVjdCIgPyBzdHJpbmdpZnkoYXJnc1tpXSkgOiBhcmdzW2ldfWApLmpvaW4oIiwgIil9KWA7CiAgfQogIHZhciBpbml0X2Zvcm1hdEFiaUl0ZW1XaXRoQXJncyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9mb3JtYXRBYmlJdGVtV2l0aEFyZ3MuanMiKCkgewogICAgICBpbml0X3N0cmluZ2lmeSgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy91bml0LmpzCiAgdmFyIGV0aGVyVW5pdHMsIGd3ZWlVbml0cywgd2VpVW5pdHM7CiAgdmFyIGluaXRfdW5pdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy91bml0LmpzIigpIHsKICAgICAgZXRoZXJVbml0cyA9IHsKICAgICAgICBnd2VpOiA5LAogICAgICAgIHdlaTogMTgKICAgICAgfTsKICAgICAgZ3dlaVVuaXRzID0gewogICAgICAgIGV0aGVyOiAtOSwKICAgICAgICB3ZWk6IDkKICAgICAgfTsKICAgICAgd2VpVW5pdHMgPSB7CiAgICAgICAgZXRoZXI6IC0xOCwKICAgICAgICBnd2VpOiAtOQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3VuaXQvZm9ybWF0VW5pdHMuanMKICBmdW5jdGlvbiBmb3JtYXRVbml0cyh2YWx1ZSwgZGVjaW1hbHMpIHsKICAgIGxldCBkaXNwbGF5ID0gdmFsdWUudG9TdHJpbmcoKTsKICAgIGNvbnN0IG5lZ2F0aXZlID0gZGlzcGxheS5zdGFydHNXaXRoKCItIik7CiAgICBpZiAobmVnYXRpdmUpCiAgICAgIGRpc3BsYXkgPSBkaXNwbGF5LnNsaWNlKDEpOwogICAgZGlzcGxheSA9IGRpc3BsYXkucGFkU3RhcnQoZGVjaW1hbHMsICIwIik7CiAgICBsZXQgW2ludGVnZXIsIGZyYWN0aW9uXSA9IFsKICAgICAgZGlzcGxheS5zbGljZSgwLCBkaXNwbGF5Lmxlbmd0aCAtIGRlY2ltYWxzKSwKICAgICAgZGlzcGxheS5zbGljZShkaXNwbGF5Lmxlbmd0aCAtIGRlY2ltYWxzKQogICAgXTsKICAgIGZyYWN0aW9uID0gZnJhY3Rpb24ucmVwbGFjZSgvKDArKSQvLCAiIik7CiAgICByZXR1cm4gYCR7bmVnYXRpdmUgPyAiLSIgOiAiIn0ke2ludGVnZXIgfHwgIjAifSR7ZnJhY3Rpb24gPyBgLiR7ZnJhY3Rpb259YCA6ICIifWA7CiAgfQogIHZhciBpbml0X2Zvcm1hdFVuaXRzID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9mb3JtYXRVbml0cy5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9mb3JtYXRFdGhlci5qcwogIGZ1bmN0aW9uIGZvcm1hdEV0aGVyKHdlaSwgdW5pdCA9ICJ3ZWkiKSB7CiAgICByZXR1cm4gZm9ybWF0VW5pdHMod2VpLCBldGhlclVuaXRzW3VuaXRdKTsKICB9CiAgdmFyIGluaXRfZm9ybWF0RXRoZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L2Zvcm1hdEV0aGVyLmpzIigpIHsKICAgICAgaW5pdF91bml0KCk7CiAgICAgIGluaXRfZm9ybWF0VW5pdHMoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L2Zvcm1hdEd3ZWkuanMKICBmdW5jdGlvbiBmb3JtYXRHd2VpKHdlaSwgdW5pdCA9ICJ3ZWkiKSB7CiAgICByZXR1cm4gZm9ybWF0VW5pdHMod2VpLCBnd2VpVW5pdHNbdW5pdF0pOwogIH0KICB2YXIgaW5pdF9mb3JtYXRHd2VpID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9mb3JtYXRHd2VpLmpzIigpIHsKICAgICAgaW5pdF91bml0KCk7CiAgICAgIGluaXRfZm9ybWF0VW5pdHMoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvc3RhdGVPdmVycmlkZS5qcwogIGZ1bmN0aW9uIHByZXR0eVN0YXRlTWFwcGluZyhzdGF0ZU1hcHBpbmcpIHsKICAgIHJldHVybiBzdGF0ZU1hcHBpbmcucmVkdWNlKChwcmV0dHksIHsgc2xvdCwgdmFsdWUgfSkgPT4gewogICAgICByZXR1cm4gYCR7cHJldHR5fSAgICAgICAgJHtzbG90fTogJHt2YWx1ZX0KYDsKICAgIH0sICIiKTsKICB9CiAgZnVuY3Rpb24gcHJldHR5U3RhdGVPdmVycmlkZShzdGF0ZU92ZXJyaWRlKSB7CiAgICByZXR1cm4gc3RhdGVPdmVycmlkZS5yZWR1Y2UoKHByZXR0eSwgeyBhZGRyZXNzLCAuLi5zdGF0ZSB9KSA9PiB7CiAgICAgIGxldCB2YWwgPSBgJHtwcmV0dHl9ICAgICR7YWRkcmVzc306CmA7CiAgICAgIGlmIChzdGF0ZS5ub25jZSkKICAgICAgICB2YWwgKz0gYCAgICAgIG5vbmNlOiAke3N0YXRlLm5vbmNlfQpgOwogICAgICBpZiAoc3RhdGUuYmFsYW5jZSkKICAgICAgICB2YWwgKz0gYCAgICAgIGJhbGFuY2U6ICR7c3RhdGUuYmFsYW5jZX0KYDsKICAgICAgaWYgKHN0YXRlLmNvZGUpCiAgICAgICAgdmFsICs9IGAgICAgICBjb2RlOiAke3N0YXRlLmNvZGV9CmA7CiAgICAgIGlmIChzdGF0ZS5zdGF0ZSkgewogICAgICAgIHZhbCArPSAiICAgICAgc3RhdGU6XG4iOwogICAgICAgIHZhbCArPSBwcmV0dHlTdGF0ZU1hcHBpbmcoc3RhdGUuc3RhdGUpOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS5zdGF0ZURpZmYpIHsKICAgICAgICB2YWwgKz0gIiAgICAgIHN0YXRlRGlmZjpcbiI7CiAgICAgICAgdmFsICs9IHByZXR0eVN0YXRlTWFwcGluZyhzdGF0ZS5zdGF0ZURpZmYpOwogICAgICB9CiAgICAgIHJldHVybiB2YWw7CiAgICB9LCAiICBTdGF0ZSBPdmVycmlkZTpcbiIpLnNsaWNlKDAsIC0xKTsKICB9CiAgdmFyIEFjY291bnRTdGF0ZUNvbmZsaWN0RXJyb3IsIFN0YXRlQXNzaWdubWVudENvbmZsaWN0RXJyb3I7CiAgdmFyIGluaXRfc3RhdGVPdmVycmlkZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9zdGF0ZU92ZXJyaWRlLmpzIigpIHsKICAgICAgaW5pdF9iYXNlKCk7CiAgICAgIEFjY291bnRTdGF0ZUNvbmZsaWN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYWRkcmVzcyB9KSB7CiAgICAgICAgICBzdXBlcihgU3RhdGUgZm9yIGFjY291bnQgIiR7YWRkcmVzc30iIGlzIHNldCBtdWx0aXBsZSB0aW1lcy5gLCB7CiAgICAgICAgICAgIG5hbWU6ICJBY2NvdW50U3RhdGVDb25mbGljdEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCJzdGF0ZSBhbmQgc3RhdGVEaWZmIGFyZSBzZXQgb24gdGhlIHNhbWUgYWNjb3VudC4iLCB7CiAgICAgICAgICAgIG5hbWU6ICJTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy90cmFuc2FjdGlvbi5qcwogIGZ1bmN0aW9uIHByZXR0eVByaW50KGFyZ3MpIHsKICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhhcmdzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gewogICAgICBpZiAodmFsdWUgPT09IHZvaWQgMCB8fCB2YWx1ZSA9PT0gZmFsc2UpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBba2V5LCB2YWx1ZV07CiAgICB9KS5maWx0ZXIoQm9vbGVhbik7CiAgICBjb25zdCBtYXhMZW5ndGggPSBlbnRyaWVzLnJlZHVjZSgoYWNjLCBba2V5XSkgPT4gTWF0aC5tYXgoYWNjLCBrZXkubGVuZ3RoKSwgMCk7CiAgICByZXR1cm4gZW50cmllcy5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCAgJHtgJHtrZXl9OmAucGFkRW5kKG1heExlbmd0aCArIDEpfSAgJHt2YWx1ZX1gKS5qb2luKCJcbiIpOwogIH0KICB2YXIgRmVlQ29uZmxpY3RFcnJvciwgSW52YWxpZExlZ2FjeVZFcnJvciwgSW52YWxpZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uRXJyb3IsIEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlRXJyb3IsIEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25FcnJvciwgSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IsIFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IsIFRyYW5zYWN0aW9uTm90Rm91bmRFcnJvciwgVHJhbnNhY3Rpb25SZWNlaXB0Tm90Rm91bmRFcnJvciwgV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvcjsKICB2YXIgaW5pdF90cmFuc2FjdGlvbiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy90cmFuc2FjdGlvbi5qcyIoKSB7CiAgICAgIGluaXRfZm9ybWF0RXRoZXIoKTsKICAgICAgaW5pdF9mb3JtYXRHd2VpKCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBGZWVDb25mbGljdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgIkNhbm5vdCBzcGVjaWZ5IGJvdGggYSBgZ2FzUHJpY2VgIGFuZCBhIGBtYXhGZWVQZXJHYXNgL2BtYXhQcmlvcml0eUZlZVBlckdhc2AuIiwKICAgICAgICAgICAgIlVzZSBgbWF4RmVlUGVyR2FzYC9gbWF4UHJpb3JpdHlGZWVQZXJHYXNgIGZvciBFSVAtMTU1OSBjb21wYXRpYmxlIG5ldHdvcmtzLCBhbmQgYGdhc1ByaWNlYCBmb3Igb3RoZXJzLiIKICAgICAgICAgIF0uam9pbigiXG4iKSwgeyBuYW1lOiAiRmVlQ29uZmxpY3RFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkTGVnYWN5VkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHYgfSkgewogICAgICAgICAgc3VwZXIoYEludmFsaWQgXGB2XGAgdmFsdWUgIiR7dn0iLiBFeHBlY3RlZCAyNyBvciAyOC5gLCB7CiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkTGVnYWN5VkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkU2VyaWFsaXphYmxlVHJhbnNhY3Rpb25FcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyB0cmFuc2FjdGlvbiB9KSB7CiAgICAgICAgICBzdXBlcigiQ2Fubm90IGluZmVyIGEgdHJhbnNhY3Rpb24gdHlwZSBmcm9tIHByb3ZpZGVkIHRyYW5zYWN0aW9uLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgIlByb3ZpZGVkIFRyYW5zYWN0aW9uOiIsCiAgICAgICAgICAgICAgInsiLAogICAgICAgICAgICAgIHByZXR0eVByaW50KHRyYW5zYWN0aW9uKSwKICAgICAgICAgICAgICAifSIsCiAgICAgICAgICAgICAgIiIsCiAgICAgICAgICAgICAgIlRvIGluZmVyIHRoZSB0eXBlLCBlaXRoZXIgcHJvdmlkZToiLAogICAgICAgICAgICAgICItIGEgYHR5cGVgIHRvIHRoZSBUcmFuc2FjdGlvbiwgb3IiLAogICAgICAgICAgICAgICItIGFuIEVJUC0xNTU5IFRyYW5zYWN0aW9uIHdpdGggYG1heEZlZVBlckdhc2AsIG9yIiwKICAgICAgICAgICAgICAiLSBhbiBFSVAtMjkzMCBUcmFuc2FjdGlvbiB3aXRoIGBnYXNQcmljZWAgJiBgYWNjZXNzTGlzdGAsIG9yIiwKICAgICAgICAgICAgICAiLSBhbiBFSVAtNDg0NCBUcmFuc2FjdGlvbiB3aXRoIGBibG9ic2AsIGBibG9iVmVyc2lvbmVkSGFzaGVzYCwgYHNpZGVjYXJzYCwgb3IiLAogICAgICAgICAgICAgICItIGFuIEVJUC03NzAyIFRyYW5zYWN0aW9uIHdpdGggYGF1dGhvcml6YXRpb25MaXN0YCwgb3IiLAogICAgICAgICAgICAgICItIGEgTGVnYWN5IFRyYW5zYWN0aW9uIHdpdGggYGdhc1ByaWNlYCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbmFtZTogIkludmFsaWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uVHlwZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IHNlcmlhbGl6ZWRUeXBlIH0pIHsKICAgICAgICAgIHN1cGVyKGBTZXJpYWxpemVkIHRyYW5zYWN0aW9uIHR5cGUgIiR7c2VyaWFsaXplZFR5cGV9IiBpcyBpbnZhbGlkLmAsIHsKICAgICAgICAgICAgbmFtZTogIkludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNlcmlhbGl6ZWRUeXBlIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuc2VyaWFsaXplZFR5cGUgPSBzZXJpYWxpemVkVHlwZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25FcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBhdHRyaWJ1dGVzLCBzZXJpYWxpemVkVHJhbnNhY3Rpb24sIHR5cGUgfSkgewogICAgICAgICAgY29uc3QgbWlzc2luZyA9IE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB0eXBlb2YgdmFsdWUgPT09ICJ1bmRlZmluZWQiID8ga2V5IDogdm9pZCAwKS5maWx0ZXIoQm9vbGVhbik7CiAgICAgICAgICBzdXBlcihgSW52YWxpZCBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIG9mIHR5cGUgIiR7dHlwZX0iIHdhcyBwcm92aWRlZC5gLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBTZXJpYWxpemVkIFRyYW5zYWN0aW9uOiAiJHtzZXJpYWxpemVkVHJhbnNhY3Rpb259ImAsCiAgICAgICAgICAgICAgbWlzc2luZy5sZW5ndGggPiAwID8gYE1pc3NpbmcgQXR0cmlidXRlczogJHttaXNzaW5nLmpvaW4oIiwgIil9YCA6ICIiCiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNlcmlhbGl6ZWRUcmFuc2FjdGlvbiIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInR5cGUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5zZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBzZXJpYWxpemVkVHJhbnNhY3Rpb247CiAgICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgc3RvcmFnZUtleSB9KSB7CiAgICAgICAgICBzdXBlcihgU2l6ZSBmb3Igc3RvcmFnZSBrZXkgIiR7c3RvcmFnZUtleX0iIGlzIGludmFsaWQuIEV4cGVjdGVkIDMyIGJ5dGVzLiBHb3QgJHtNYXRoLmZsb29yKChzdG9yYWdlS2V5Lmxlbmd0aCAtIDIpIC8gMil9IGJ5dGVzLmAsIHsgbmFtZTogIkludmFsaWRTdG9yYWdlS2V5U2l6ZUVycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlLCB7IGFjY291bnQsIGRvY3NQYXRoOiBkb2NzUGF0aDksIGNoYWluLCBkYXRhLCBnYXMsIGdhc1ByaWNlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBub25jZSwgdG8sIHZhbHVlIH0pIHsKICAgICAgICAgIGNvbnN0IHByZXR0eUFyZ3MgPSBwcmV0dHlQcmludCh7CiAgICAgICAgICAgIGNoYWluOiBjaGFpbiAmJiBgJHtjaGFpbj8ubmFtZX0gKGlkOiAke2NoYWluPy5pZH0pYCwKICAgICAgICAgICAgZnJvbTogYWNjb3VudD8uYWRkcmVzcywKICAgICAgICAgICAgdG8sCiAgICAgICAgICAgIHZhbHVlOiB0eXBlb2YgdmFsdWUgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEV0aGVyKHZhbHVlKX0gJHtjaGFpbj8ubmF0aXZlQ3VycmVuY3k/LnN5bWJvbCB8fCAiRVRIIn1gLAogICAgICAgICAgICBkYXRhLAogICAgICAgICAgICBnYXMsCiAgICAgICAgICAgIGdhc1ByaWNlOiB0eXBlb2YgZ2FzUHJpY2UgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkoZ2FzUHJpY2UpfSBnd2VpYCwKICAgICAgICAgICAgbWF4RmVlUGVyR2FzOiB0eXBlb2YgbWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9IGd3ZWlgLAogICAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogdHlwZW9mIG1heFByaW9yaXR5RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKG1heFByaW9yaXR5RmVlUGVyR2FzKX0gZ3dlaWAsCiAgICAgICAgICAgIG5vbmNlCiAgICAgICAgICB9KTsKICAgICAgICAgIHN1cGVyKGNhdXNlLnNob3J0TWVzc2FnZSwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgLi4uY2F1c2UubWV0YU1lc3NhZ2VzID8gWy4uLmNhdXNlLm1ldGFNZXNzYWdlcywgIiAiXSA6IFtdLAogICAgICAgICAgICAgICJSZXF1ZXN0IEFyZ3VtZW50czoiLAogICAgICAgICAgICAgIHByZXR0eUFyZ3MKICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgICAgIG5hbWU6ICJUcmFuc2FjdGlvbkV4ZWN1dGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNhdXNlIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuY2F1c2UgPSBjYXVzZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFRyYW5zYWN0aW9uTm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyLCBibG9ja1RhZywgaGFzaDogaGFzaDMsIGluZGV4OiBpbmRleDIgfSkgewogICAgICAgICAgbGV0IGlkZW50aWZpZXIgPSAiVHJhbnNhY3Rpb24iOwogICAgICAgICAgaWYgKGJsb2NrVGFnICYmIGluZGV4MiAhPT0gdm9pZCAwKQogICAgICAgICAgICBpZGVudGlmaWVyID0gYFRyYW5zYWN0aW9uIGF0IGJsb2NrIHRpbWUgIiR7YmxvY2tUYWd9IiBhdCBpbmRleCAiJHtpbmRleDJ9ImA7CiAgICAgICAgICBpZiAoYmxvY2tIYXNoICYmIGluZGV4MiAhPT0gdm9pZCAwKQogICAgICAgICAgICBpZGVudGlmaWVyID0gYFRyYW5zYWN0aW9uIGF0IGJsb2NrIGhhc2ggIiR7YmxvY2tIYXNofSIgYXQgaW5kZXggIiR7aW5kZXgyfSJgOwogICAgICAgICAgaWYgKGJsb2NrTnVtYmVyICYmIGluZGV4MiAhPT0gdm9pZCAwKQogICAgICAgICAgICBpZGVudGlmaWVyID0gYFRyYW5zYWN0aW9uIGF0IGJsb2NrIG51bWJlciAiJHtibG9ja051bWJlcn0iIGF0IGluZGV4ICIke2luZGV4Mn0iYDsKICAgICAgICAgIGlmIChoYXNoMykKICAgICAgICAgICAgaWRlbnRpZmllciA9IGBUcmFuc2FjdGlvbiB3aXRoIGhhc2ggIiR7aGFzaDN9ImA7CiAgICAgICAgICBzdXBlcihgJHtpZGVudGlmaWVyfSBjb3VsZCBub3QgYmUgZm91bmQuYCwgewogICAgICAgICAgICBuYW1lOiAiVHJhbnNhY3Rpb25Ob3RGb3VuZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBUcmFuc2FjdGlvblJlY2VpcHROb3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGhhc2g6IGhhc2gzIH0pIHsKICAgICAgICAgIHN1cGVyKGBUcmFuc2FjdGlvbiByZWNlaXB0IHdpdGggaGFzaCAiJHtoYXNoM30iIGNvdWxkIG5vdCBiZSBmb3VuZC4gVGhlIFRyYW5zYWN0aW9uIG1heSBub3QgYmUgcHJvY2Vzc2VkIG9uIGEgYmxvY2sgeWV0LmAsIHsKICAgICAgICAgICAgbmFtZTogIlRyYW5zYWN0aW9uUmVjZWlwdE5vdEZvdW5kRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFdhaXRGb3JUcmFuc2FjdGlvblJlY2VpcHRUaW1lb3V0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgaGFzaDogaGFzaDMgfSkgewogICAgICAgICAgc3VwZXIoYFRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciB0cmFuc2FjdGlvbiB3aXRoIGhhc2ggIiR7aGFzaDN9IiB0byBiZSBjb25maXJtZWQuYCwgeyBuYW1lOiAiV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy91dGlscy5qcwogIHZhciBnZXRDb250cmFjdEFkZHJlc3MsIGdldFVybDsKICB2YXIgaW5pdF91dGlsczMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvdXRpbHMuanMiKCkgewogICAgICBnZXRDb250cmFjdEFkZHJlc3MgPSAoYWRkcmVzcykgPT4gYWRkcmVzczsKICAgICAgZ2V0VXJsID0gKHVybCkgPT4gdXJsOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9jb250cmFjdC5qcwogIHZhciBDYWxsRXhlY3V0aW9uRXJyb3IsIENvbnRyYWN0RnVuY3Rpb25FeGVjdXRpb25FcnJvciwgQ29udHJhY3RGdW5jdGlvblJldmVydGVkRXJyb3IsIENvbnRyYWN0RnVuY3Rpb25aZXJvRGF0YUVycm9yLCBDb3VudGVyZmFjdHVhbERlcGxveW1lbnRGYWlsZWRFcnJvciwgUmF3Q29udHJhY3RFcnJvcjsKICB2YXIgaW5pdF9jb250cmFjdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9jb250cmFjdC5qcyIoKSB7CiAgICAgIGluaXRfcGFyc2VBY2NvdW50KCk7CiAgICAgIGluaXRfc29saWRpdHkoKTsKICAgICAgaW5pdF9kZWNvZGVFcnJvclJlc3VsdCgpOwogICAgICBpbml0X2Zvcm1hdEFiaUl0ZW0yKCk7CiAgICAgIGluaXRfZm9ybWF0QWJpSXRlbVdpdGhBcmdzKCk7CiAgICAgIGluaXRfZ2V0QWJpSXRlbSgpOwogICAgICBpbml0X2Zvcm1hdEV0aGVyKCk7CiAgICAgIGluaXRfZm9ybWF0R3dlaSgpOwogICAgICBpbml0X2FiaSgpOwogICAgICBpbml0X2Jhc2UoKTsKICAgICAgaW5pdF9zdGF0ZU92ZXJyaWRlKCk7CiAgICAgIGluaXRfdHJhbnNhY3Rpb24oKTsKICAgICAgaW5pdF91dGlsczMoKTsKICAgICAgQ2FsbEV4ZWN1dGlvbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBhY2NvdW50OiBhY2NvdW50XywgZG9jc1BhdGg6IGRvY3NQYXRoOSwgY2hhaW4sIGRhdGEsIGdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIG5vbmNlLCB0bywgdmFsdWUsIHN0YXRlT3ZlcnJpZGUgfSkgewogICAgICAgICAgY29uc3QgYWNjb3VudCA9IGFjY291bnRfID8gcGFyc2VBY2NvdW50KGFjY291bnRfKSA6IHZvaWQgMDsKICAgICAgICAgIGxldCBwcmV0dHlBcmdzID0gcHJldHR5UHJpbnQoewogICAgICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgICAgICB0bywKICAgICAgICAgICAgdmFsdWU6IHR5cGVvZiB2YWx1ZSAhPT0gInVuZGVmaW5lZCIgJiYgYCR7Zm9ybWF0RXRoZXIodmFsdWUpfSAke2NoYWluPy5uYXRpdmVDdXJyZW5jeT8uc3ltYm9sIHx8ICJFVEgifWAsCiAgICAgICAgICAgIGRhdGEsCiAgICAgICAgICAgIGdhcywKICAgICAgICAgICAgZ2FzUHJpY2U6IHR5cGVvZiBnYXNQcmljZSAhPT0gInVuZGVmaW5lZCIgJiYgYCR7Zm9ybWF0R3dlaShnYXNQcmljZSl9IGd3ZWlgLAogICAgICAgICAgICBtYXhGZWVQZXJHYXM6IHR5cGVvZiBtYXhGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkobWF4RmVlUGVyR2FzKX0gZ3dlaWAsCiAgICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiB0eXBlb2YgbWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkobWF4UHJpb3JpdHlGZWVQZXJHYXMpfSBnd2VpYCwKICAgICAgICAgICAgbm9uY2UKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHsKICAgICAgICAgICAgcHJldHR5QXJncyArPSBgCiR7cHJldHR5U3RhdGVPdmVycmlkZShzdGF0ZU92ZXJyaWRlKX1gOwogICAgICAgICAgfQogICAgICAgICAgc3VwZXIoY2F1c2Uuc2hvcnRNZXNzYWdlLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAuLi5jYXVzZS5tZXRhTWVzc2FnZXMgPyBbLi4uY2F1c2UubWV0YU1lc3NhZ2VzLCAiICJdIDogW10sCiAgICAgICAgICAgICAgIlJhdyBDYWxsIEFyZ3VtZW50czoiLAogICAgICAgICAgICAgIHByZXR0eUFyZ3MKICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgICAgIG5hbWU6ICJDYWxsRXhlY3V0aW9uRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY2F1c2UiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5jYXVzZSA9IGNhdXNlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29udHJhY3RGdW5jdGlvbkV4ZWN1dGlvbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBhYmk6IGFiaTIsIGFyZ3MsIGNvbnRyYWN0QWRkcmVzcywgZG9jc1BhdGg6IGRvY3NQYXRoOSwgZnVuY3Rpb25OYW1lLCBzZW5kZXIgfSkgewogICAgICAgICAgY29uc3QgYWJpSXRlbSA9IGdldEFiaUl0ZW0oeyBhYmk6IGFiaTIsIGFyZ3MsIG5hbWU6IGZ1bmN0aW9uTmFtZSB9KTsKICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEFyZ3MgPSBhYmlJdGVtID8gZm9ybWF0QWJpSXRlbVdpdGhBcmdzKHsKICAgICAgICAgICAgYWJpSXRlbSwKICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgaW5jbHVkZUZ1bmN0aW9uTmFtZTogZmFsc2UsCiAgICAgICAgICAgIGluY2x1ZGVOYW1lOiBmYWxzZQogICAgICAgICAgfSkgOiB2b2lkIDA7CiAgICAgICAgICBjb25zdCBmdW5jdGlvbldpdGhQYXJhbXMgPSBhYmlJdGVtID8gZm9ybWF0QWJpSXRlbTIoYWJpSXRlbSwgeyBpbmNsdWRlTmFtZTogdHJ1ZSB9KSA6IHZvaWQgMDsKICAgICAgICAgIGNvbnN0IHByZXR0eUFyZ3MgPSBwcmV0dHlQcmludCh7CiAgICAgICAgICAgIGFkZHJlc3M6IGNvbnRyYWN0QWRkcmVzcyAmJiBnZXRDb250cmFjdEFkZHJlc3MoY29udHJhY3RBZGRyZXNzKSwKICAgICAgICAgICAgZnVuY3Rpb246IGZ1bmN0aW9uV2l0aFBhcmFtcywKICAgICAgICAgICAgYXJnczogZm9ybWF0dGVkQXJncyAmJiBmb3JtYXR0ZWRBcmdzICE9PSAiKCkiICYmIGAke1suLi5BcnJheShmdW5jdGlvbk5hbWU/Lmxlbmd0aCA/PyAwKS5rZXlzKCldLm1hcCgoKSA9PiAiICIpLmpvaW4oIiIpfSR7Zm9ybWF0dGVkQXJnc31gLAogICAgICAgICAgICBzZW5kZXIKICAgICAgICAgIH0pOwogICAgICAgICAgc3VwZXIoY2F1c2Uuc2hvcnRNZXNzYWdlIHx8IGBBbiB1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyB0aGUgY29udHJhY3QgZnVuY3Rpb24gIiR7ZnVuY3Rpb25OYW1lfSIuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgLi4uY2F1c2UubWV0YU1lc3NhZ2VzID8gWy4uLmNhdXNlLm1ldGFNZXNzYWdlcywgIiAiXSA6IFtdLAogICAgICAgICAgICAgIHByZXR0eUFyZ3MgJiYgIkNvbnRyYWN0IENhbGw6IiwKICAgICAgICAgICAgICBwcmV0dHlBcmdzCiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiQ29udHJhY3RGdW5jdGlvbkV4ZWN1dGlvbkVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFiaSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImFyZ3MiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJjYXVzZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNvbnRyYWN0QWRkcmVzcyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImZvcm1hdHRlZEFyZ3MiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJmdW5jdGlvbk5hbWUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kZXIiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5hYmkgPSBhYmkyOwogICAgICAgICAgdGhpcy5hcmdzID0gYXJnczsKICAgICAgICAgIHRoaXMuY2F1c2UgPSBjYXVzZTsKICAgICAgICAgIHRoaXMuY29udHJhY3RBZGRyZXNzID0gY29udHJhY3RBZGRyZXNzOwogICAgICAgICAgdGhpcy5mdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7CiAgICAgICAgICB0aGlzLnNlbmRlciA9IHNlbmRlcjsKICAgICAgICB9CiAgICAgIH07CiAgICAgIENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGFiaTogYWJpMiwgZGF0YSwgZnVuY3Rpb25OYW1lLCBtZXNzYWdlIH0pIHsKICAgICAgICAgIGxldCBjYXVzZTsKICAgICAgICAgIGxldCBkZWNvZGVkRGF0YSA9IHZvaWQgMDsKICAgICAgICAgIGxldCBtZXRhTWVzc2FnZXM7CiAgICAgICAgICBsZXQgcmVhc29uOwogICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YSAhPT0gIjB4IikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGRlY29kZWREYXRhID0gZGVjb2RlRXJyb3JSZXN1bHQoeyBhYmk6IGFiaTIsIGRhdGEgfSk7CiAgICAgICAgICAgICAgY29uc3QgeyBhYmlJdGVtLCBlcnJvck5hbWUsIGFyZ3M6IGVycm9yQXJncyB9ID0gZGVjb2RlZERhdGE7CiAgICAgICAgICAgICAgaWYgKGVycm9yTmFtZSA9PT0gIkVycm9yIikgewogICAgICAgICAgICAgICAgcmVhc29uID0gZXJyb3JBcmdzWzBdOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3JOYW1lID09PSAiUGFuaWMiKSB7CiAgICAgICAgICAgICAgICBjb25zdCBbZmlyc3RBcmddID0gZXJyb3JBcmdzOwogICAgICAgICAgICAgICAgcmVhc29uID0gcGFuaWNSZWFzb25zW2ZpcnN0QXJnXTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29uc3QgZXJyb3JXaXRoUGFyYW1zID0gYWJpSXRlbSA/IGZvcm1hdEFiaUl0ZW0yKGFiaUl0ZW0sIHsgaW5jbHVkZU5hbWU6IHRydWUgfSkgOiB2b2lkIDA7CiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRBcmdzID0gYWJpSXRlbSAmJiBlcnJvckFyZ3MgPyBmb3JtYXRBYmlJdGVtV2l0aEFyZ3MoewogICAgICAgICAgICAgICAgICBhYmlJdGVtLAogICAgICAgICAgICAgICAgICBhcmdzOiBlcnJvckFyZ3MsCiAgICAgICAgICAgICAgICAgIGluY2x1ZGVGdW5jdGlvbk5hbWU6IGZhbHNlLAogICAgICAgICAgICAgICAgICBpbmNsdWRlTmFtZTogZmFsc2UKICAgICAgICAgICAgICAgIH0pIDogdm9pZCAwOwogICAgICAgICAgICAgICAgbWV0YU1lc3NhZ2VzID0gWwogICAgICAgICAgICAgICAgICBlcnJvcldpdGhQYXJhbXMgPyBgRXJyb3I6ICR7ZXJyb3JXaXRoUGFyYW1zfWAgOiAiIiwKICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkQXJncyAmJiBmb3JtYXR0ZWRBcmdzICE9PSAiKCkiID8gYCAgICAgICAke1suLi5BcnJheShlcnJvck5hbWU/Lmxlbmd0aCA/PyAwKS5rZXlzKCldLm1hcCgoKSA9PiAiICIpLmpvaW4oIiIpfSR7Zm9ybWF0dGVkQXJnc31gIDogIiIKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICBjYXVzZSA9IGVycjsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlKQogICAgICAgICAgICByZWFzb24gPSBtZXNzYWdlOwogICAgICAgICAgbGV0IHNpZ25hdHVyZTsKICAgICAgICAgIGlmIChjYXVzZSBpbnN0YW5jZW9mIEFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvcikgewogICAgICAgICAgICBzaWduYXR1cmUgPSBjYXVzZS5zaWduYXR1cmU7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlcyA9IFsKICAgICAgICAgICAgICBgVW5hYmxlIHRvIGRlY29kZSBzaWduYXR1cmUgIiR7c2lnbmF0dXJlfSIgYXMgaXQgd2FzIG5vdCBmb3VuZCBvbiB0aGUgcHJvdmlkZWQgQUJJLmAsCiAgICAgICAgICAgICAgIk1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IEFCSSBhbmQgdGhhdCB0aGUgZXJyb3IgZXhpc3RzIG9uIGl0LiIsCiAgICAgICAgICAgICAgYFlvdSBjYW4gbG9vayB1cCB0aGUgZGVjb2RlZCBzaWduYXR1cmUgaGVyZTogaHR0cHM6Ly9vcGVuY2hhaW4ueHl6L3NpZ25hdHVyZXM/cXVlcnk9JHtzaWduYXR1cmV9LmAKICAgICAgICAgICAgXTsKICAgICAgICAgIH0KICAgICAgICAgIHN1cGVyKHJlYXNvbiAmJiByZWFzb24gIT09ICJleGVjdXRpb24gcmV2ZXJ0ZWQiIHx8IHNpZ25hdHVyZSA/IFsKICAgICAgICAgICAgYFRoZSBjb250cmFjdCBmdW5jdGlvbiAiJHtmdW5jdGlvbk5hbWV9IiByZXZlcnRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgJHtzaWduYXR1cmUgPyAic2lnbmF0dXJlIiA6ICJyZWFzb24ifTpgLAogICAgICAgICAgICByZWFzb24gfHwgc2lnbmF0dXJlCiAgICAgICAgICBdLmpvaW4oIlxuIikgOiBgVGhlIGNvbnRyYWN0IGZ1bmN0aW9uICIke2Z1bmN0aW9uTmFtZX0iIHJldmVydGVkLmAsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIG1ldGFNZXNzYWdlcywKICAgICAgICAgICAgbmFtZTogIkNvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRhdGEiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJyZWFzb24iLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzaWduYXR1cmUiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5kYXRhID0gZGVjb2RlZERhdGE7CiAgICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvbjsKICAgICAgICAgIHRoaXMuc2lnbmF0dXJlID0gc2lnbmF0dXJlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29udHJhY3RGdW5jdGlvblplcm9EYXRhRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZnVuY3Rpb25OYW1lIH0pIHsKICAgICAgICAgIHN1cGVyKGBUaGUgY29udHJhY3QgZnVuY3Rpb24gIiR7ZnVuY3Rpb25OYW1lfSIgcmV0dXJuZWQgbm8gZGF0YSAoIjB4IikuYCwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAiVGhpcyBjb3VsZCBiZSBkdWUgdG8gYW55IG9mIHRoZSBmb2xsb3dpbmc6IiwKICAgICAgICAgICAgICBgICAtIFRoZSBjb250cmFjdCBkb2VzIG5vdCBoYXZlIHRoZSBmdW5jdGlvbiAiJHtmdW5jdGlvbk5hbWV9IixgLAogICAgICAgICAgICAgICIgIC0gVGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBjb250cmFjdCBmdW5jdGlvbiBtYXkgYmUgaW52YWxpZCwgb3IiLAogICAgICAgICAgICAgICIgIC0gVGhlIGFkZHJlc3MgaXMgbm90IGEgY29udHJhY3QuIgogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQ29udHJhY3RGdW5jdGlvblplcm9EYXRhRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIENvdW50ZXJmYWN0dWFsRGVwbG95bWVudEZhaWxlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGZhY3RvcnkgfSkgewogICAgICAgICAgc3VwZXIoYERlcGxveW1lbnQgZm9yIGNvdW50ZXJmYWN0dWFsIGNvbnRyYWN0IGNhbGwgZmFpbGVkJHtmYWN0b3J5ID8gYCBmb3IgZmFjdG9yeSAiJHtmYWN0b3J5fSIuYCA6ICIifWAsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgIlBsZWFzZSBlbnN1cmU6IiwKICAgICAgICAgICAgICAiLSBUaGUgYGZhY3RvcnlgIGlzIGEgdmFsaWQgY29udHJhY3QgZGVwbG95bWVudCBmYWN0b3J5IChpZS4gQ3JlYXRlMiBGYWN0b3J5LCBFUkMtNDMzNyBGYWN0b3J5LCBldGMpLiIsCiAgICAgICAgICAgICAgIi0gVGhlIGBmYWN0b3J5RGF0YWAgaXMgYSB2YWxpZCBlbmNvZGVkIGZ1bmN0aW9uIGNhbGwgZm9yIGNvbnRyYWN0IGRlcGxveW1lbnQgZnVuY3Rpb24gb24gdGhlIGZhY3RvcnkuIgogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQ291bnRlcmZhY3R1YWxEZXBsb3ltZW50RmFpbGVkRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFJhd0NvbnRyYWN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgZGF0YSwgbWVzc2FnZSB9KSB7CiAgICAgICAgICBzdXBlcihtZXNzYWdlIHx8ICIiLCB7IG5hbWU6ICJSYXdDb250cmFjdEVycm9yIiB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29kZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IDMKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkYXRhIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9yZXF1ZXN0LmpzCiAgdmFyIEh0dHBSZXF1ZXN0RXJyb3IsIFdlYlNvY2tldFJlcXVlc3RFcnJvciwgUnBjUmVxdWVzdEVycm9yLCBTb2NrZXRDbG9zZWRFcnJvciwgVGltZW91dEVycm9yOwogIHZhciBpbml0X3JlcXVlc3QgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvcmVxdWVzdC5qcyIoKSB7CiAgICAgIGluaXRfc3RyaW5naWZ5KCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X3V0aWxzMygpOwogICAgICBIdHRwUmVxdWVzdEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGJvZHksIGNhdXNlLCBkZXRhaWxzLCBoZWFkZXJzLCBzdGF0dXMsIHVybCB9KSB7CiAgICAgICAgICBzdXBlcigiSFRUUCByZXF1ZXN0IGZhaWxlZC4iLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBkZXRhaWxzLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBzdGF0dXMgJiYgYFN0YXR1czogJHtzdGF0dXN9YCwKICAgICAgICAgICAgICBgVVJMOiAke2dldFVybCh1cmwpfWAsCiAgICAgICAgICAgICAgYm9keSAmJiBgUmVxdWVzdCBib2R5OiAke3N0cmluZ2lmeShib2R5KX1gCiAgICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiSHR0cFJlcXVlc3RFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJib2R5IiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiaGVhZGVycyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInN0YXR1cyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInVybCIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwogICAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyczsKICAgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOwogICAgICAgICAgdGhpcy51cmwgPSB1cmw7CiAgICAgICAgfQogICAgICB9OwogICAgICBXZWJTb2NrZXRSZXF1ZXN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgYm9keSwgY2F1c2UsIGRldGFpbHMsIHVybCB9KSB7CiAgICAgICAgICBzdXBlcigiV2ViU29ja2V0IHJlcXVlc3QgZmFpbGVkLiIsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIGRldGFpbHMsCiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBVUkw6ICR7Z2V0VXJsKHVybCl9YCwKICAgICAgICAgICAgICBib2R5ICYmIGBSZXF1ZXN0IGJvZHk6ICR7c3RyaW5naWZ5KGJvZHkpfWAKICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgICAgIG5hbWU6ICJXZWJTb2NrZXRSZXF1ZXN0RXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFJwY1JlcXVlc3RFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBib2R5LCBlcnJvciwgdXJsIH0pIHsKICAgICAgICAgIHN1cGVyKCJSUEMgUmVxdWVzdCBmYWlsZWQuIiwgewogICAgICAgICAgICBjYXVzZTogZXJyb3IsCiAgICAgICAgICAgIGRldGFpbHM6IGVycm9yLm1lc3NhZ2UsCiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogW2BVUkw6ICR7Z2V0VXJsKHVybCl9YCwgYFJlcXVlc3QgYm9keTogJHtzdHJpbmdpZnkoYm9keSl9YF0sCiAgICAgICAgICAgIG5hbWU6ICJScGNSZXF1ZXN0RXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29kZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmNvZGUgPSBlcnJvci5jb2RlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU29ja2V0Q2xvc2VkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgdXJsIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoIlRoZSBzb2NrZXQgaGFzIGJlZW4gY2xvc2VkLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbdXJsICYmIGBVUkw6ICR7Z2V0VXJsKHVybCl9YF0uZmlsdGVyKEJvb2xlYW4pLAogICAgICAgICAgICBuYW1lOiAiU29ja2V0Q2xvc2VkRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFRpbWVvdXRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBib2R5LCB1cmwgfSkgewogICAgICAgICAgc3VwZXIoIlRoZSByZXF1ZXN0IHRvb2sgdG9vIGxvbmcgdG8gcmVzcG9uZC4iLCB7CiAgICAgICAgICAgIGRldGFpbHM6ICJUaGUgcmVxdWVzdCB0aW1lZCBvdXQuIiwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbYFVSTDogJHtnZXRVcmwodXJsKX1gLCBgUmVxdWVzdCBib2R5OiAke3N0cmluZ2lmeShib2R5KX1gXSwKICAgICAgICAgICAgbmFtZTogIlRpbWVvdXRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvcnBjLmpzCiAgdmFyIHVua25vd25FcnJvckNvZGUsIFJwY0Vycm9yLCBQcm92aWRlclJwY0Vycm9yLCBQYXJzZVJwY0Vycm9yLCBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yLCBNZXRob2ROb3RGb3VuZFJwY0Vycm9yLCBJbnZhbGlkUGFyYW1zUnBjRXJyb3IsIEludGVybmFsUnBjRXJyb3IsIEludmFsaWRJbnB1dFJwY0Vycm9yLCBSZXNvdXJjZU5vdEZvdW5kUnBjRXJyb3IsIFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciwgVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yLCBNZXRob2ROb3RTdXBwb3J0ZWRScGNFcnJvciwgTGltaXRFeGNlZWRlZFJwY0Vycm9yLCBKc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IsIFVzZXJSZWplY3RlZFJlcXVlc3RFcnJvciwgVW5hdXRob3JpemVkUHJvdmlkZXJFcnJvciwgVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLCBQcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yLCBDaGFpbkRpc2Nvbm5lY3RlZEVycm9yLCBTd2l0Y2hDaGFpbkVycm9yLCBVbmtub3duUnBjRXJyb3I7CiAgdmFyIGluaXRfcnBjID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL3JwYy5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X3JlcXVlc3QoKTsKICAgICAgdW5rbm93bkVycm9yQ29kZSA9IC0xOwogICAgICBScGNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UsIHsgY29kZSwgZG9jc1BhdGg6IGRvY3NQYXRoOSwgbWV0YU1lc3NhZ2VzLCBuYW1lLCBzaG9ydE1lc3NhZ2UgfSkgewogICAgICAgICAgc3VwZXIoc2hvcnRNZXNzYWdlLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IG1ldGFNZXNzYWdlcyB8fCBjYXVzZT8ubWV0YU1lc3NhZ2VzLAogICAgICAgICAgICBuYW1lOiBuYW1lIHx8ICJScGNFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJjb2RlIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWUgfHwgY2F1c2UubmFtZTsKICAgICAgICAgIHRoaXMuY29kZSA9IGNhdXNlIGluc3RhbmNlb2YgUnBjUmVxdWVzdEVycm9yID8gY2F1c2UuY29kZSA6IGNvZGUgPz8gdW5rbm93bkVycm9yQ29kZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFByb3ZpZGVyUnBjRXJyb3IgPSBjbGFzcyBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgb3B0aW9ucykgewogICAgICAgICAgc3VwZXIoY2F1c2UsIG9wdGlvbnMpOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJkYXRhIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGF0YSA9IG9wdGlvbnMuZGF0YTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFBhcnNlUnBjRXJyb3IgPSBjbGFzcyBfUGFyc2VScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1BhcnNlUnBjRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlBhcnNlUnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJJbnZhbGlkIEpTT04gd2FzIHJlY2VpdmVkIGJ5IHRoZSBzZXJ2ZXIuIEFuIGVycm9yIG9jY3VycmVkIG9uIHRoZSBzZXJ2ZXIgd2hpbGUgcGFyc2luZyB0aGUgSlNPTiB0ZXh0LiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhcnNlUnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzI3MDAKICAgICAgfSk7CiAgICAgIEludmFsaWRSZXF1ZXN0UnBjRXJyb3IgPSBjbGFzcyBfSW52YWxpZFJlcXVlc3RScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX0ludmFsaWRSZXF1ZXN0UnBjRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIkludmFsaWRSZXF1ZXN0UnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJKU09OIGlzIG5vdCBhIHZhbGlkIHJlcXVlc3Qgb2JqZWN0LiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEludmFsaWRSZXF1ZXN0UnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzI2MDAKICAgICAgfSk7CiAgICAgIE1ldGhvZE5vdEZvdW5kUnBjRXJyb3IgPSBjbGFzcyBfTWV0aG9kTm90Rm91bmRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBtZXRob2QgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfTWV0aG9kTm90Rm91bmRScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiTWV0aG9kTm90Rm91bmRScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogYFRoZSBtZXRob2Qke21ldGhvZCA/IGAgIiR7bWV0aG9kfSJgIDogIiJ9IGRvZXMgbm90IGV4aXN0IC8gaXMgbm90IGF2YWlsYWJsZS5gCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXRob2ROb3RGb3VuZFJwY0Vycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogLTMyNjAxCiAgICAgIH0pOwogICAgICBJbnZhbGlkUGFyYW1zUnBjRXJyb3IgPSBjbGFzcyBfSW52YWxpZFBhcmFtc1JwY0Vycm9yIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfSW52YWxpZFBhcmFtc1JwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkUGFyYW1zUnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6IFsKICAgICAgICAgICAgICAiSW52YWxpZCBwYXJhbWV0ZXJzIHdlcmUgcHJvdmlkZWQgdG8gdGhlIFJQQyBtZXRob2QuIiwKICAgICAgICAgICAgICAiRG91YmxlIGNoZWNrIHlvdSBoYXZlIHByb3ZpZGVkIHRoZSBjb3JyZWN0IHBhcmFtZXRlcnMuIgogICAgICAgICAgICBdLmpvaW4oIlxuIikKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEludmFsaWRQYXJhbXNScGNFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC0zMjYwMgogICAgICB9KTsKICAgICAgSW50ZXJuYWxScGNFcnJvciA9IGNsYXNzIF9JbnRlcm5hbFJwY0Vycm9yIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfSW50ZXJuYWxScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiSW50ZXJuYWxScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIkFuIGludGVybmFsIGVycm9yIHdhcyByZWNlaXZlZC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRlcm5hbFJwY0Vycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogLTMyNjAzCiAgICAgIH0pOwogICAgICBJbnZhbGlkSW5wdXRScGNFcnJvciA9IGNsYXNzIF9JbnZhbGlkSW5wdXRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX0ludmFsaWRJbnB1dFJwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJJbnZhbGlkSW5wdXRScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogWwogICAgICAgICAgICAgICJNaXNzaW5nIG9yIGludmFsaWQgcGFyYW1ldGVycy4iLAogICAgICAgICAgICAgICJEb3VibGUgY2hlY2sgeW91IGhhdmUgcHJvdmlkZWQgdGhlIGNvcnJlY3QgcGFyYW1ldGVycy4iCiAgICAgICAgICAgIF0uam9pbigiXG4iKQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW52YWxpZElucHV0UnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzJlMwogICAgICB9KTsKICAgICAgUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yID0gY2xhc3MgX1Jlc291cmNlTm90Rm91bmRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1Jlc291cmNlTm90Rm91bmRScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiUmVxdWVzdGVkIHJlc291cmNlIG5vdCBmb3VuZC4iCiAgICAgICAgICB9KTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAibmFtZSIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6ICJSZXNvdXJjZU5vdEZvdW5kUnBjRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZXNvdXJjZU5vdEZvdW5kUnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzIwMDEKICAgICAgfSk7CiAgICAgIFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciA9IGNsYXNzIF9SZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IgZXh0ZW5kcyBScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UpIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9SZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIlJlcXVlc3RlZCByZXNvdXJjZSBub3QgYXZhaWxhYmxlLiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC0zMjAwMgogICAgICB9KTsKICAgICAgVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yID0gY2xhc3MgX1RyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvciBleHRlbmRzIFJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1RyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiVHJhbnNhY3Rpb24gY3JlYXRpb24gZmFpbGVkLiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC0zMjAwMwogICAgICB9KTsKICAgICAgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IgPSBjbGFzcyBfTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IgZXh0ZW5kcyBScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UsIHsgbWV0aG9kIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX01ldGhvZE5vdFN1cHBvcnRlZFJwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJNZXRob2ROb3RTdXBwb3J0ZWRScGNFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogYE1ldGhvZCR7bWV0aG9kID8gYCAiJHttZXRob2R9ImAgOiAiIn0gaXMgbm90IGltcGxlbWVudGVkLmAKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1ldGhvZE5vdFN1cHBvcnRlZFJwY0Vycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogLTMyMDA0CiAgICAgIH0pOwogICAgICBMaW1pdEV4Y2VlZGVkUnBjRXJyb3IgPSBjbGFzcyBfTGltaXRFeGNlZWRlZFJwY0Vycm9yIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfTGltaXRFeGNlZWRlZFJwY0Vycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJMaW1pdEV4Y2VlZGVkUnBjRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJSZXF1ZXN0IGV4Y2VlZHMgZGVmaW5lZCBsaW1pdC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaW1pdEV4Y2VlZGVkUnBjRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzIwMDUKICAgICAgfSk7CiAgICAgIEpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvciA9IGNsYXNzIF9Kc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UpIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9Kc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIkpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIlZlcnNpb24gb2YgSlNPTi1SUEMgcHJvdG9jb2wgaXMgbm90IHN1cHBvcnRlZC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAtMzIwMDYKICAgICAgfSk7CiAgICAgIFVzZXJSZWplY3RlZFJlcXVlc3RFcnJvciA9IGNsYXNzIF9Vc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBQcm92aWRlclJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1VzZXJSZWplY3RlZFJlcXVlc3RFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiVXNlclJlamVjdGVkUmVxdWVzdEVycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiVXNlciByZWplY3RlZCB0aGUgcmVxdWVzdC4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IsICJjb2RlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiA0MDAxCiAgICAgIH0pOwogICAgICBVbmF1dGhvcml6ZWRQcm92aWRlckVycm9yID0gY2xhc3MgX1VuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IgZXh0ZW5kcyBQcm92aWRlclJwY0Vycm9yIHsKICAgICAgICBjb25zdHJ1Y3RvcihjYXVzZSkgewogICAgICAgICAgc3VwZXIoY2F1c2UsIHsKICAgICAgICAgICAgY29kZTogX1VuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlVuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IiLAogICAgICAgICAgICBzaG9ydE1lc3NhZ2U6ICJUaGUgcmVxdWVzdGVkIG1ldGhvZCBhbmQvb3IgYWNjb3VudCBoYXMgbm90IGJlZW4gYXV0aG9yaXplZCBieSB0aGUgdXNlci4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVbmF1dGhvcml6ZWRQcm92aWRlckVycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogNDEwMAogICAgICB9KTsKICAgICAgVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yID0gY2xhc3MgX1Vuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvciBleHRlbmRzIFByb3ZpZGVyUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlLCB7IG1ldGhvZCB9ID0ge30pIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9VbnN1cHBvcnRlZFByb3ZpZGVyTWV0aG9kRXJyb3IuY29kZSwKICAgICAgICAgICAgbmFtZTogIlVuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogYFRoZSBQcm92aWRlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQgbWV0aG9kJHttZXRob2QgPyBgICIgJHttZXRob2R9ImAgOiAiIn0uYAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogNDIwMAogICAgICB9KTsKICAgICAgUHJvdmlkZXJEaXNjb25uZWN0ZWRFcnJvciA9IGNsYXNzIF9Qcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yIGV4dGVuZHMgUHJvdmlkZXJScGNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoY2F1c2UpIHsKICAgICAgICAgIHN1cGVyKGNhdXNlLCB7CiAgICAgICAgICAgIGNvZGU6IF9Qcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yLmNvZGUsCiAgICAgICAgICAgIG5hbWU6ICJQcm92aWRlckRpc2Nvbm5lY3RlZEVycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiVGhlIFByb3ZpZGVyIGlzIGRpc2Nvbm5lY3RlZCBmcm9tIGFsbCBjaGFpbnMuIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUHJvdmlkZXJEaXNjb25uZWN0ZWRFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IDQ5MDAKICAgICAgfSk7CiAgICAgIENoYWluRGlzY29ubmVjdGVkRXJyb3IgPSBjbGFzcyBfQ2hhaW5EaXNjb25uZWN0ZWRFcnJvciBleHRlbmRzIFByb3ZpZGVyUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfQ2hhaW5EaXNjb25uZWN0ZWRFcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiQ2hhaW5EaXNjb25uZWN0ZWRFcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIlRoZSBQcm92aWRlciBpcyBub3QgY29ubmVjdGVkIHRvIHRoZSByZXF1ZXN0ZWQgY2hhaW4uIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2hhaW5EaXNjb25uZWN0ZWRFcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IDQ5MDEKICAgICAgfSk7CiAgICAgIFN3aXRjaENoYWluRXJyb3IgPSBjbGFzcyBfU3dpdGNoQ2hhaW5FcnJvciBleHRlbmRzIFByb3ZpZGVyUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBjb2RlOiBfU3dpdGNoQ2hhaW5FcnJvci5jb2RlLAogICAgICAgICAgICBuYW1lOiAiU3dpdGNoQ2hhaW5FcnJvciIsCiAgICAgICAgICAgIHNob3J0TWVzc2FnZTogIkFuIGVycm9yIG9jY3VycmVkIHdoZW4gYXR0ZW1wdGluZyB0byBzd2l0Y2ggY2hhaW4uIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3dpdGNoQ2hhaW5FcnJvciwgImNvZGUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IDQ5MDIKICAgICAgfSk7CiAgICAgIFVua25vd25ScGNFcnJvciA9IGNsYXNzIGV4dGVuZHMgUnBjRXJyb3IgewogICAgICAgIGNvbnN0cnVjdG9yKGNhdXNlKSB7CiAgICAgICAgICBzdXBlcihjYXVzZSwgewogICAgICAgICAgICBuYW1lOiAiVW5rbm93blJwY0Vycm9yIiwKICAgICAgICAgICAgc2hvcnRNZXNzYWdlOiAiQW4gdW5rbm93biBSUEMgZXJyb3Igb2NjdXJyZWQuIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vX21kLmpzCiAgZnVuY3Rpb24gc2V0QmlnVWludDY0KHZpZXcsIGJ5dGVPZmZzZXQsIHZhbHVlLCBpc0xFMikgewogICAgaWYgKHR5cGVvZiB2aWV3LnNldEJpZ1VpbnQ2NCA9PT0gImZ1bmN0aW9uIikKICAgICAgcmV0dXJuIHZpZXcuc2V0QmlnVWludDY0KGJ5dGVPZmZzZXQsIHZhbHVlLCBpc0xFMik7CiAgICBjb25zdCBfMzJuMiA9IEJpZ0ludCgzMik7CiAgICBjb25zdCBfdTMyX21heCA9IEJpZ0ludCg0Mjk0OTY3Mjk1KTsKICAgIGNvbnN0IHdoID0gTnVtYmVyKHZhbHVlID4+IF8zMm4yICYgX3UzMl9tYXgpOwogICAgY29uc3Qgd2wgPSBOdW1iZXIodmFsdWUgJiBfdTMyX21heCk7CiAgICBjb25zdCBoID0gaXNMRTIgPyA0IDogMDsKICAgIGNvbnN0IGwgPSBpc0xFMiA/IDAgOiA0OwogICAgdmlldy5zZXRVaW50MzIoYnl0ZU9mZnNldCArIGgsIHdoLCBpc0xFMik7CiAgICB2aWV3LnNldFVpbnQzMihieXRlT2Zmc2V0ICsgbCwgd2wsIGlzTEUyKTsKICB9CiAgdmFyIENoaSwgTWFqLCBIYXNoTUQ7CiAgdmFyIGluaXRfbWQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL19tZC5qcyIoKSB7CiAgICAgIGluaXRfYXNzZXJ0KCk7CiAgICAgIGluaXRfdXRpbHMyKCk7CiAgICAgIENoaSA9IChhLCBiLCBjKSA9PiBhICYgYiBeIH5hICYgYzsKICAgICAgTWFqID0gKGEsIGIsIGMpID0+IGEgJiBiIF4gYSAmIGMgXiBiICYgYzsKICAgICAgSGFzaE1EID0gY2xhc3MgZXh0ZW5kcyBIYXNoIHsKICAgICAgICBjb25zdHJ1Y3RvcihibG9ja0xlbiwgb3V0cHV0TGVuLCBwYWRPZmZzZXQsIGlzTEUyKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgdGhpcy5ibG9ja0xlbiA9IGJsb2NrTGVuOwogICAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0aGlzLnBhZE9mZnNldCA9IHBhZE9mZnNldDsKICAgICAgICAgIHRoaXMuaXNMRSA9IGlzTEUyOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy5sZW5ndGggPSAwOwogICAgICAgICAgdGhpcy5wb3MgPSAwOwogICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tMZW4pOwogICAgICAgICAgdGhpcy52aWV3ID0gY3JlYXRlVmlldyh0aGlzLmJ1ZmZlcik7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZShkYXRhKSB7CiAgICAgICAgICBleGlzdHModGhpcyk7CiAgICAgICAgICBjb25zdCB7IHZpZXcsIGJ1ZmZlcjogYnVmZmVyMiwgYmxvY2tMZW4gfSA9IHRoaXM7CiAgICAgICAgICBkYXRhID0gdG9CeXRlczIoZGF0YSk7CiAgICAgICAgICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aDsKICAgICAgICAgIGZvciAobGV0IHBvcyA9IDA7IHBvcyA8IGxlbjsgKSB7CiAgICAgICAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihibG9ja0xlbiAtIHRoaXMucG9zLCBsZW4gLSBwb3MpOwogICAgICAgICAgICBpZiAodGFrZSA9PT0gYmxvY2tMZW4pIHsKICAgICAgICAgICAgICBjb25zdCBkYXRhVmlldyA9IGNyZWF0ZVZpZXcoZGF0YSk7CiAgICAgICAgICAgICAgZm9yICg7IGJsb2NrTGVuIDw9IGxlbiAtIHBvczsgcG9zICs9IGJsb2NrTGVuKQogICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzKGRhdGFWaWV3LCBwb3MpOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJ1ZmZlcjIuc2V0KGRhdGEuc3ViYXJyYXkocG9zLCBwb3MgKyB0YWtlKSwgdGhpcy5wb3MpOwogICAgICAgICAgICB0aGlzLnBvcyArPSB0YWtlOwogICAgICAgICAgICBwb3MgKz0gdGFrZTsKICAgICAgICAgICAgaWYgKHRoaXMucG9zID09PSBibG9ja0xlbikgewogICAgICAgICAgICAgIHRoaXMucHJvY2Vzcyh2aWV3LCAwKTsKICAgICAgICAgICAgICB0aGlzLnBvcyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHRoaXMubGVuZ3RoICs9IGRhdGEubGVuZ3RoOwogICAgICAgICAgdGhpcy5yb3VuZENsZWFuKCk7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgZGlnZXN0SW50byhvdXQpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzKTsKICAgICAgICAgIG91dHB1dChvdXQsIHRoaXMpOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IHRydWU7CiAgICAgICAgICBjb25zdCB7IGJ1ZmZlcjogYnVmZmVyMiwgdmlldywgYmxvY2tMZW4sIGlzTEU6IGlzTEUyIH0gPSB0aGlzOwogICAgICAgICAgbGV0IHsgcG9zIH0gPSB0aGlzOwogICAgICAgICAgYnVmZmVyMltwb3MrK10gPSAxMjg7CiAgICAgICAgICB0aGlzLmJ1ZmZlci5zdWJhcnJheShwb3MpLmZpbGwoMCk7CiAgICAgICAgICBpZiAodGhpcy5wYWRPZmZzZXQgPiBibG9ja0xlbiAtIHBvcykgewogICAgICAgICAgICB0aGlzLnByb2Nlc3ModmlldywgMCk7CiAgICAgICAgICAgIHBvcyA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKGxldCBpID0gcG9zOyBpIDwgYmxvY2tMZW47IGkrKykKICAgICAgICAgICAgYnVmZmVyMltpXSA9IDA7CiAgICAgICAgICBzZXRCaWdVaW50NjQodmlldywgYmxvY2tMZW4gLSA4LCBCaWdJbnQodGhpcy5sZW5ndGggKiA4KSwgaXNMRTIpOwogICAgICAgICAgdGhpcy5wcm9jZXNzKHZpZXcsIDApOwogICAgICAgICAgY29uc3Qgb3ZpZXcgPSBjcmVhdGVWaWV3KG91dCk7CiAgICAgICAgICBjb25zdCBsZW4gPSB0aGlzLm91dHB1dExlbjsKICAgICAgICAgIGlmIChsZW4gJSA0KQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIl9zaGEyOiBvdXRwdXRMZW4gc2hvdWxkIGJlIGFsaWduZWQgdG8gMzJiaXQiKTsKICAgICAgICAgIGNvbnN0IG91dExlbiA9IGxlbiAvIDQ7CiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0KCk7CiAgICAgICAgICBpZiAob3V0TGVuID4gc3RhdGUubGVuZ3RoKQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIl9zaGEyOiBvdXRwdXRMZW4gYmlnZ2VyIHRoYW4gc3RhdGUiKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0TGVuOyBpKyspCiAgICAgICAgICAgIG92aWV3LnNldFVpbnQzMig0ICogaSwgc3RhdGVbaV0sIGlzTEUyKTsKICAgICAgICB9CiAgICAgICAgZGlnZXN0KCkgewogICAgICAgICAgY29uc3QgeyBidWZmZXI6IGJ1ZmZlcjIsIG91dHB1dExlbiB9ID0gdGhpczsKICAgICAgICAgIHRoaXMuZGlnZXN0SW50byhidWZmZXIyKTsKICAgICAgICAgIGNvbnN0IHJlcyA9IGJ1ZmZlcjIuc2xpY2UoMCwgb3V0cHV0TGVuKTsKICAgICAgICAgIHRoaXMuZGVzdHJveSgpOwogICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICB9CiAgICAgICAgX2Nsb25lSW50byh0bykgewogICAgICAgICAgdG8gfHwgKHRvID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKSk7CiAgICAgICAgICB0by5zZXQoLi4udGhpcy5nZXQoKSk7CiAgICAgICAgICBjb25zdCB7IGJsb2NrTGVuLCBidWZmZXI6IGJ1ZmZlcjIsIGxlbmd0aCwgZmluaXNoZWQsIGRlc3Ryb3llZCwgcG9zIH0gPSB0aGlzOwogICAgICAgICAgdG8ubGVuZ3RoID0gbGVuZ3RoOwogICAgICAgICAgdG8ucG9zID0gcG9zOwogICAgICAgICAgdG8uZmluaXNoZWQgPSBmaW5pc2hlZDsKICAgICAgICAgIHRvLmRlc3Ryb3llZCA9IGRlc3Ryb3llZDsKICAgICAgICAgIGlmIChsZW5ndGggJSBibG9ja0xlbikKICAgICAgICAgICAgdG8uYnVmZmVyLnNldChidWZmZXIyKTsKICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9zaGEyNTYuanMKICB2YXIgU0hBMjU2X0ssIFNIQTI1Nl9JViwgU0hBMjU2X1csIFNIQTI1Niwgc2hhMjU2OwogIHZhciBpbml0X3NoYTI1NiA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vc2hhMjU2LmpzIigpIHsKICAgICAgaW5pdF9tZCgpOwogICAgICBpbml0X3V0aWxzMigpOwogICAgICBTSEEyNTZfSyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgVWludDMyQXJyYXkoWwogICAgICAgIDExMTYzNTI0MDgsCiAgICAgICAgMTg5OTQ0NzQ0MSwKICAgICAgICAzMDQ5MzIzNDcxLAogICAgICAgIDM5MjEwMDk1NzMsCiAgICAgICAgOTYxOTg3MTYzLAogICAgICAgIDE1MDg5NzA5OTMsCiAgICAgICAgMjQ1MzYzNTc0OCwKICAgICAgICAyODcwNzYzMjIxLAogICAgICAgIDM2MjQzODEwODAsCiAgICAgICAgMzEwNTk4NDAxLAogICAgICAgIDYwNzIyNTI3OCwKICAgICAgICAxNDI2ODgxOTg3LAogICAgICAgIDE5MjUwNzgzODgsCiAgICAgICAgMjE2MjA3ODIwNiwKICAgICAgICAyNjE0ODg4MTAzLAogICAgICAgIDMyNDgyMjI1ODAsCiAgICAgICAgMzgzNTM5MDQwMSwKICAgICAgICA0MDIyMjI0Nzc0LAogICAgICAgIDI2NDM0NzA3OCwKICAgICAgICA2MDQ4MDc2MjgsCiAgICAgICAgNzcwMjU1OTgzLAogICAgICAgIDEyNDkxNTAxMjIsCiAgICAgICAgMTU1NTA4MTY5MiwKICAgICAgICAxOTk2MDY0OTg2LAogICAgICAgIDI1NTQyMjA4ODIsCiAgICAgICAgMjgyMTgzNDM0OSwKICAgICAgICAyOTUyOTk2ODA4LAogICAgICAgIDMyMTAzMTM2NzEsCiAgICAgICAgMzMzNjU3MTg5MSwKICAgICAgICAzNTg0NTI4NzExLAogICAgICAgIDExMzkyNjk5MywKICAgICAgICAzMzgyNDE4OTUsCiAgICAgICAgNjY2MzA3MjA1LAogICAgICAgIDc3MzUyOTkxMiwKICAgICAgICAxMjk0NzU3MzcyLAogICAgICAgIDEzOTYxODIyOTEsCiAgICAgICAgMTY5NTE4MzcwMCwKICAgICAgICAxOTg2NjYxMDUxLAogICAgICAgIDIxNzcwMjYzNTAsCiAgICAgICAgMjQ1Njk1NjAzNywKICAgICAgICAyNzMwNDg1OTIxLAogICAgICAgIDI4MjAzMDI0MTEsCiAgICAgICAgMzI1OTczMDgwMCwKICAgICAgICAzMzQ1NzY0NzcxLAogICAgICAgIDM1MTYwNjU4MTcsCiAgICAgICAgMzYwMDM1MjgwNCwKICAgICAgICA0MDk0NTcxOTA5LAogICAgICAgIDI3NTQyMzM0NCwKICAgICAgICA0MzAyMjc3MzQsCiAgICAgICAgNTA2OTQ4NjE2LAogICAgICAgIDY1OTA2MDU1NiwKICAgICAgICA4ODM5OTc4NzcsCiAgICAgICAgOTU4MTM5NTcxLAogICAgICAgIDEzMjI4MjIyMTgsCiAgICAgICAgMTUzNzAwMjA2MywKICAgICAgICAxNzQ3ODczNzc5LAogICAgICAgIDE5NTU1NjIyMjIsCiAgICAgICAgMjAyNDEwNDgxNSwKICAgICAgICAyMjI3NzMwNDUyLAogICAgICAgIDIzNjE4NTI0MjQsCiAgICAgICAgMjQyODQzNjQ3NCwKICAgICAgICAyNzU2NzM0MTg3LAogICAgICAgIDMyMDQwMzE0NzksCiAgICAgICAgMzMyOTMyNTI5OAogICAgICBdKTsKICAgICAgU0hBMjU2X0lWID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheShbCiAgICAgICAgMTc3OTAzMzcwMywKICAgICAgICAzMTQ0MTM0Mjc3LAogICAgICAgIDEwMTM5MDQyNDIsCiAgICAgICAgMjc3MzQ4MDc2MiwKICAgICAgICAxMzU5ODkzMTE5LAogICAgICAgIDI2MDA4MjI5MjQsCiAgICAgICAgNTI4NzM0NjM1LAogICAgICAgIDE1NDE0NTkyMjUKICAgICAgXSk7CiAgICAgIFNIQTI1Nl9XID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheSg2NCk7CiAgICAgIFNIQTI1NiA9IGNsYXNzIGV4dGVuZHMgSGFzaE1EIHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKDY0LCAzMiwgOCwgZmFsc2UpOwogICAgICAgICAgdGhpcy5BID0gU0hBMjU2X0lWWzBdIHwgMDsKICAgICAgICAgIHRoaXMuQiA9IFNIQTI1Nl9JVlsxXSB8IDA7CiAgICAgICAgICB0aGlzLkMgPSBTSEEyNTZfSVZbMl0gfCAwOwogICAgICAgICAgdGhpcy5EID0gU0hBMjU2X0lWWzNdIHwgMDsKICAgICAgICAgIHRoaXMuRSA9IFNIQTI1Nl9JVls0XSB8IDA7CiAgICAgICAgICB0aGlzLkYgPSBTSEEyNTZfSVZbNV0gfCAwOwogICAgICAgICAgdGhpcy5HID0gU0hBMjU2X0lWWzZdIHwgMDsKICAgICAgICAgIHRoaXMuSCA9IFNIQTI1Nl9JVls3XSB8IDA7CiAgICAgICAgfQogICAgICAgIGdldCgpIHsKICAgICAgICAgIGNvbnN0IHsgQSwgQiwgQywgRCwgRSwgRiwgRywgSCB9ID0gdGhpczsKICAgICAgICAgIHJldHVybiBbQSwgQiwgQywgRCwgRSwgRiwgRywgSF07CiAgICAgICAgfQogICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZQogICAgICAgIHNldChBLCBCLCBDLCBELCBFLCBGLCBHLCBIKSB7CiAgICAgICAgICB0aGlzLkEgPSBBIHwgMDsKICAgICAgICAgIHRoaXMuQiA9IEIgfCAwOwogICAgICAgICAgdGhpcy5DID0gQyB8IDA7CiAgICAgICAgICB0aGlzLkQgPSBEIHwgMDsKICAgICAgICAgIHRoaXMuRSA9IEUgfCAwOwogICAgICAgICAgdGhpcy5GID0gRiB8IDA7CiAgICAgICAgICB0aGlzLkcgPSBHIHwgMDsKICAgICAgICAgIHRoaXMuSCA9IEggfCAwOwogICAgICAgIH0KICAgICAgICBwcm9jZXNzKHZpZXcsIG9mZnNldCkgewogICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrLCBvZmZzZXQgKz0gNCkKICAgICAgICAgICAgU0hBMjU2X1dbaV0gPSB2aWV3LmdldFVpbnQzMihvZmZzZXQsIGZhbHNlKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAxNjsgaSA8IDY0OyBpKyspIHsKICAgICAgICAgICAgY29uc3QgVzE1ID0gU0hBMjU2X1dbaSAtIDE1XTsKICAgICAgICAgICAgY29uc3QgVzIgPSBTSEEyNTZfV1tpIC0gMl07CiAgICAgICAgICAgIGNvbnN0IHMwID0gcm90cihXMTUsIDcpIF4gcm90cihXMTUsIDE4KSBeIFcxNSA+Pj4gMzsKICAgICAgICAgICAgY29uc3QgczEgPSByb3RyKFcyLCAxNykgXiByb3RyKFcyLCAxOSkgXiBXMiA+Pj4gMTA7CiAgICAgICAgICAgIFNIQTI1Nl9XW2ldID0gczEgKyBTSEEyNTZfV1tpIC0gN10gKyBzMCArIFNIQTI1Nl9XW2kgLSAxNl0gfCAwOwogICAgICAgICAgfQogICAgICAgICAgbGV0IHsgQSwgQiwgQywgRCwgRSwgRiwgRywgSCB9ID0gdGhpczsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjQ7IGkrKykgewogICAgICAgICAgICBjb25zdCBzaWdtYTEgPSByb3RyKEUsIDYpIF4gcm90cihFLCAxMSkgXiByb3RyKEUsIDI1KTsKICAgICAgICAgICAgY29uc3QgVDEgPSBIICsgc2lnbWExICsgQ2hpKEUsIEYsIEcpICsgU0hBMjU2X0tbaV0gKyBTSEEyNTZfV1tpXSB8IDA7CiAgICAgICAgICAgIGNvbnN0IHNpZ21hMCA9IHJvdHIoQSwgMikgXiByb3RyKEEsIDEzKSBeIHJvdHIoQSwgMjIpOwogICAgICAgICAgICBjb25zdCBUMiA9IHNpZ21hMCArIE1haihBLCBCLCBDKSB8IDA7CiAgICAgICAgICAgIEggPSBHOwogICAgICAgICAgICBHID0gRjsKICAgICAgICAgICAgRiA9IEU7CiAgICAgICAgICAgIEUgPSBEICsgVDEgfCAwOwogICAgICAgICAgICBEID0gQzsKICAgICAgICAgICAgQyA9IEI7CiAgICAgICAgICAgIEIgPSBBOwogICAgICAgICAgICBBID0gVDEgKyBUMiB8IDA7CiAgICAgICAgICB9CiAgICAgICAgICBBID0gQSArIHRoaXMuQSB8IDA7CiAgICAgICAgICBCID0gQiArIHRoaXMuQiB8IDA7CiAgICAgICAgICBDID0gQyArIHRoaXMuQyB8IDA7CiAgICAgICAgICBEID0gRCArIHRoaXMuRCB8IDA7CiAgICAgICAgICBFID0gRSArIHRoaXMuRSB8IDA7CiAgICAgICAgICBGID0gRiArIHRoaXMuRiB8IDA7CiAgICAgICAgICBHID0gRyArIHRoaXMuRyB8IDA7CiAgICAgICAgICBIID0gSCArIHRoaXMuSCB8IDA7CiAgICAgICAgICB0aGlzLnNldChBLCBCLCBDLCBELCBFLCBGLCBHLCBIKTsKICAgICAgICB9CiAgICAgICAgcm91bmRDbGVhbigpIHsKICAgICAgICAgIFNIQTI1Nl9XLmZpbGwoMCk7CiAgICAgICAgfQogICAgICAgIGRlc3Ryb3koKSB7CiAgICAgICAgICB0aGlzLnNldCgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKICAgICAgICAgIHRoaXMuYnVmZmVyLmZpbGwoMCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBzaGEyNTYgPSAvKiBAX19QVVJFX18gKi8gd3JhcENvbnN0cnVjdG9yKCgpID0+IG5ldyBTSEEyNTYoKSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC91dGlscy5qcwogIHZhciB1dGlsc19leHBvcnRzID0ge307CiAgX19leHBvcnQodXRpbHNfZXhwb3J0cywgewogICAgYWJ5dGVzOiAoKSA9PiBhYnl0ZXMsCiAgICBiaXRHZXQ6ICgpID0+IGJpdEdldCwKICAgIGJpdExlbjogKCkgPT4gYml0TGVuLAogICAgYml0TWFzazogKCkgPT4gYml0TWFzaywKICAgIGJpdFNldDogKCkgPT4gYml0U2V0LAogICAgYnl0ZXNUb0hleDogKCkgPT4gYnl0ZXNUb0hleDIsCiAgICBieXRlc1RvTnVtYmVyQkU6ICgpID0+IGJ5dGVzVG9OdW1iZXJCRSwKICAgIGJ5dGVzVG9OdW1iZXJMRTogKCkgPT4gYnl0ZXNUb051bWJlckxFLAogICAgY29uY2F0Qnl0ZXM6ICgpID0+IGNvbmNhdEJ5dGVzMywKICAgIGNyZWF0ZUhtYWNEcmJnOiAoKSA9PiBjcmVhdGVIbWFjRHJiZywKICAgIGVuc3VyZUJ5dGVzOiAoKSA9PiBlbnN1cmVCeXRlcywKICAgIGVxdWFsQnl0ZXM6ICgpID0+IGVxdWFsQnl0ZXMsCiAgICBoZXhUb0J5dGVzOiAoKSA9PiBoZXhUb0J5dGVzMiwKICAgIGhleFRvTnVtYmVyOiAoKSA9PiBoZXhUb051bWJlcjIsCiAgICBpc0J5dGVzOiAoKSA9PiBpc0J5dGVzMiwKICAgIG51bWJlclRvQnl0ZXNCRTogKCkgPT4gbnVtYmVyVG9CeXRlc0JFLAogICAgbnVtYmVyVG9CeXRlc0xFOiAoKSA9PiBudW1iZXJUb0J5dGVzTEUsCiAgICBudW1iZXJUb0hleFVucGFkZGVkOiAoKSA9PiBudW1iZXJUb0hleFVucGFkZGVkLAogICAgbnVtYmVyVG9WYXJCeXRlc0JFOiAoKSA9PiBudW1iZXJUb1ZhckJ5dGVzQkUsCiAgICB1dGY4VG9CeXRlczogKCkgPT4gdXRmOFRvQnl0ZXMyLAogICAgdmFsaWRhdGVPYmplY3Q6ICgpID0+IHZhbGlkYXRlT2JqZWN0CiAgfSk7CiAgZnVuY3Rpb24gaXNCeXRlczIoYSkgewogICAgcmV0dXJuIGEgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IGEgIT0gbnVsbCAmJiB0eXBlb2YgYSA9PT0gIm9iamVjdCIgJiYgYS5jb25zdHJ1Y3Rvci5uYW1lID09PSAiVWludDhBcnJheSI7CiAgfQogIGZ1bmN0aW9uIGFieXRlcyhpdGVtKSB7CiAgICBpZiAoIWlzQnl0ZXMyKGl0ZW0pKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVpbnQ4QXJyYXkgZXhwZWN0ZWQiKTsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb0hleDIoYnl0ZXMyKSB7CiAgICBhYnl0ZXMoYnl0ZXMyKTsKICAgIGxldCBoZXggPSAiIjsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMyLmxlbmd0aDsgaSsrKSB7CiAgICAgIGhleCArPSBoZXhlczJbYnl0ZXMyW2ldXTsKICAgIH0KICAgIHJldHVybiBoZXg7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvSGV4VW5wYWRkZWQobnVtKSB7CiAgICBjb25zdCBoZXggPSBudW0udG9TdHJpbmcoMTYpOwogICAgcmV0dXJuIGhleC5sZW5ndGggJiAxID8gYDAke2hleH1gIDogaGV4OwogIH0KICBmdW5jdGlvbiBoZXhUb051bWJlcjIoaGV4KSB7CiAgICBpZiAodHlwZW9mIGhleCAhPT0gInN0cmluZyIpCiAgICAgIHRocm93IG5ldyBFcnJvcigiaGV4IHN0cmluZyBleHBlY3RlZCwgZ290ICIgKyB0eXBlb2YgaGV4KTsKICAgIHJldHVybiBCaWdJbnQoaGV4ID09PSAiIiA/ICIwIiA6IGAweCR7aGV4fWApOwogIH0KICBmdW5jdGlvbiBhc2NpaVRvQmFzZTE2KGNoYXIpIHsKICAgIGlmIChjaGFyID49IGFzY2lpcy5fMCAmJiBjaGFyIDw9IGFzY2lpcy5fOSkKICAgICAgcmV0dXJuIGNoYXIgLSBhc2NpaXMuXzA7CiAgICBpZiAoY2hhciA+PSBhc2NpaXMuX0EgJiYgY2hhciA8PSBhc2NpaXMuX0YpCiAgICAgIHJldHVybiBjaGFyIC0gKGFzY2lpcy5fQSAtIDEwKTsKICAgIGlmIChjaGFyID49IGFzY2lpcy5fYSAmJiBjaGFyIDw9IGFzY2lpcy5fZikKICAgICAgcmV0dXJuIGNoYXIgLSAoYXNjaWlzLl9hIC0gMTApOwogICAgcmV0dXJuOwogIH0KICBmdW5jdGlvbiBoZXhUb0J5dGVzMihoZXgpIHsKICAgIGlmICh0eXBlb2YgaGV4ICE9PSAic3RyaW5nIikKICAgICAgdGhyb3cgbmV3IEVycm9yKCJoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgIiArIHR5cGVvZiBoZXgpOwogICAgY29uc3QgaGwgPSBoZXgubGVuZ3RoOwogICAgY29uc3QgYWwgPSBobCAvIDI7CiAgICBpZiAoaGwgJSAyKQogICAgICB0aHJvdyBuZXcgRXJyb3IoInBhZGRlZCBoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgdW5wYWRkZWQgaGV4IG9mIGxlbmd0aCAiICsgaGwpOwogICAgY29uc3QgYXJyYXkgPSBuZXcgVWludDhBcnJheShhbCk7CiAgICBmb3IgKGxldCBhaSA9IDAsIGhpID0gMDsgYWkgPCBhbDsgYWkrKywgaGkgKz0gMikgewogICAgICBjb25zdCBuMSA9IGFzY2lpVG9CYXNlMTYoaGV4LmNoYXJDb2RlQXQoaGkpKTsKICAgICAgY29uc3QgbjIgPSBhc2NpaVRvQmFzZTE2KGhleC5jaGFyQ29kZUF0KGhpICsgMSkpOwogICAgICBpZiAobjEgPT09IHZvaWQgMCB8fCBuMiA9PT0gdm9pZCAwKSB7CiAgICAgICAgY29uc3QgY2hhciA9IGhleFtoaV0gKyBoZXhbaGkgKyAxXTsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCBub24taGV4IGNoYXJhY3RlciAiJyArIGNoYXIgKyAnIiBhdCBpbmRleCAnICsgaGkpOwogICAgICB9CiAgICAgIGFycmF5W2FpXSA9IG4xICogMTYgKyBuMjsKICAgIH0KICAgIHJldHVybiBhcnJheTsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb051bWJlckJFKGJ5dGVzMikgewogICAgcmV0dXJuIGhleFRvTnVtYmVyMihieXRlc1RvSGV4MihieXRlczIpKTsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb051bWJlckxFKGJ5dGVzMikgewogICAgYWJ5dGVzKGJ5dGVzMik7CiAgICByZXR1cm4gaGV4VG9OdW1iZXIyKGJ5dGVzVG9IZXgyKFVpbnQ4QXJyYXkuZnJvbShieXRlczIpLnJldmVyc2UoKSkpOwogIH0KICBmdW5jdGlvbiBudW1iZXJUb0J5dGVzQkUobiwgbGVuKSB7CiAgICByZXR1cm4gaGV4VG9CeXRlczIobi50b1N0cmluZygxNikucGFkU3RhcnQobGVuICogMiwgIjAiKSk7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvQnl0ZXNMRShuLCBsZW4pIHsKICAgIHJldHVybiBudW1iZXJUb0J5dGVzQkUobiwgbGVuKS5yZXZlcnNlKCk7CiAgfQogIGZ1bmN0aW9uIG51bWJlclRvVmFyQnl0ZXNCRShuKSB7CiAgICByZXR1cm4gaGV4VG9CeXRlczIobnVtYmVyVG9IZXhVbnBhZGRlZChuKSk7CiAgfQogIGZ1bmN0aW9uIGVuc3VyZUJ5dGVzKHRpdGxlLCBoZXgsIGV4cGVjdGVkTGVuZ3RoKSB7CiAgICBsZXQgcmVzOwogICAgaWYgKHR5cGVvZiBoZXggPT09ICJzdHJpbmciKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmVzID0gaGV4VG9CeXRlczIoaGV4KTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aXRsZX0gbXVzdCBiZSB2YWxpZCBoZXggc3RyaW5nLCBnb3QgIiR7aGV4fSIuIENhdXNlOiAke2V9YCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXNCeXRlczIoaGV4KSkgewogICAgICByZXMgPSBVaW50OEFycmF5LmZyb20oaGV4KTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aXRsZX0gbXVzdCBiZSBoZXggc3RyaW5nIG9yIFVpbnQ4QXJyYXlgKTsKICAgIH0KICAgIGNvbnN0IGxlbiA9IHJlcy5sZW5ndGg7CiAgICBpZiAodHlwZW9mIGV4cGVjdGVkTGVuZ3RoID09PSAibnVtYmVyIiAmJiBsZW4gIT09IGV4cGVjdGVkTGVuZ3RoKQogICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGl0bGV9IGV4cGVjdGVkICR7ZXhwZWN0ZWRMZW5ndGh9IGJ5dGVzLCBnb3QgJHtsZW59YCk7CiAgICByZXR1cm4gcmVzOwogIH0KICBmdW5jdGlvbiBjb25jYXRCeXRlczMoLi4uYXJyYXlzKSB7CiAgICBsZXQgc3VtID0gMDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IGEgPSBhcnJheXNbaV07CiAgICAgIGFieXRlcyhhKTsKICAgICAgc3VtICs9IGEubGVuZ3RoOwogICAgfQogICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc3VtKTsKICAgIGZvciAobGV0IGkgPSAwLCBwYWQyID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBhID0gYXJyYXlzW2ldOwogICAgICByZXMuc2V0KGEsIHBhZDIpOwogICAgICBwYWQyICs9IGEubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9CiAgZnVuY3Rpb24gZXF1YWxCeXRlcyhhLCBiKSB7CiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgZGlmZiA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspCiAgICAgIGRpZmYgfD0gYVtpXSBeIGJbaV07CiAgICByZXR1cm4gZGlmZiA9PT0gMDsKICB9CiAgZnVuY3Rpb24gdXRmOFRvQnl0ZXMyKHN0cikgewogICAgaWYgKHR5cGVvZiBzdHIgIT09ICJzdHJpbmciKQogICAgICB0aHJvdyBuZXcgRXJyb3IoYHV0ZjhUb0J5dGVzIGV4cGVjdGVkIHN0cmluZywgZ290ICR7dHlwZW9mIHN0cn1gKTsKICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyKSk7CiAgfQogIGZ1bmN0aW9uIGJpdExlbihuKSB7CiAgICBsZXQgbGVuOwogICAgZm9yIChsZW4gPSAwOyBuID4gXzBuMjsgbiA+Pj0gXzFuMiwgbGVuICs9IDEpCiAgICAgIDsKICAgIHJldHVybiBsZW47CiAgfQogIGZ1bmN0aW9uIGJpdEdldChuLCBwb3MpIHsKICAgIHJldHVybiBuID4+IEJpZ0ludChwb3MpICYgXzFuMjsKICB9CiAgZnVuY3Rpb24gYml0U2V0KG4sIHBvcywgdmFsdWUpIHsKICAgIHJldHVybiBuIHwgKHZhbHVlID8gXzFuMiA6IF8wbjIpIDw8IEJpZ0ludChwb3MpOwogIH0KICBmdW5jdGlvbiBjcmVhdGVIbWFjRHJiZyhoYXNoTGVuLCBxQnl0ZUxlbiwgaG1hY0ZuKSB7CiAgICBpZiAodHlwZW9mIGhhc2hMZW4gIT09ICJudW1iZXIiIHx8IGhhc2hMZW4gPCAyKQogICAgICB0aHJvdyBuZXcgRXJyb3IoImhhc2hMZW4gbXVzdCBiZSBhIG51bWJlciIpOwogICAgaWYgKHR5cGVvZiBxQnl0ZUxlbiAhPT0gIm51bWJlciIgfHwgcUJ5dGVMZW4gPCAyKQogICAgICB0aHJvdyBuZXcgRXJyb3IoInFCeXRlTGVuIG11c3QgYmUgYSBudW1iZXIiKTsKICAgIGlmICh0eXBlb2YgaG1hY0ZuICE9PSAiZnVuY3Rpb24iKQogICAgICB0aHJvdyBuZXcgRXJyb3IoImhtYWNGbiBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKICAgIGxldCB2ID0gdThuKGhhc2hMZW4pOwogICAgbGV0IGsgPSB1OG4oaGFzaExlbik7CiAgICBsZXQgaSA9IDA7CiAgICBjb25zdCByZXNldDIgPSAoKSA9PiB7CiAgICAgIHYuZmlsbCgxKTsKICAgICAgay5maWxsKDApOwogICAgICBpID0gMDsKICAgIH07CiAgICBjb25zdCBoID0gKC4uLmIpID0+IGhtYWNGbihrLCB2LCAuLi5iKTsKICAgIGNvbnN0IHJlc2VlZCA9IChzZWVkID0gdThuKCkpID0+IHsKICAgICAgayA9IGgodThmcihbMF0pLCBzZWVkKTsKICAgICAgdiA9IGgoKTsKICAgICAgaWYgKHNlZWQubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgayA9IGgodThmcihbMV0pLCBzZWVkKTsKICAgICAgdiA9IGgoKTsKICAgIH07CiAgICBjb25zdCBnZW4yID0gKCkgPT4gewogICAgICBpZiAoaSsrID49IDFlMykKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImRyYmc6IHRyaWVkIDEwMDAgdmFsdWVzIik7CiAgICAgIGxldCBsZW4gPSAwOwogICAgICBjb25zdCBvdXQgPSBbXTsKICAgICAgd2hpbGUgKGxlbiA8IHFCeXRlTGVuKSB7CiAgICAgICAgdiA9IGgoKTsKICAgICAgICBjb25zdCBzbCA9IHYuc2xpY2UoKTsKICAgICAgICBvdXQucHVzaChzbCk7CiAgICAgICAgbGVuICs9IHYubGVuZ3RoOwogICAgICB9CiAgICAgIHJldHVybiBjb25jYXRCeXRlczMoLi4ub3V0KTsKICAgIH07CiAgICBjb25zdCBnZW5VbnRpbCA9IChzZWVkLCBwcmVkKSA9PiB7CiAgICAgIHJlc2V0MigpOwogICAgICByZXNlZWQoc2VlZCk7CiAgICAgIGxldCByZXMgPSB2b2lkIDA7CiAgICAgIHdoaWxlICghKHJlcyA9IHByZWQoZ2VuMigpKSkpCiAgICAgICAgcmVzZWVkKCk7CiAgICAgIHJlc2V0MigpOwogICAgICByZXR1cm4gcmVzOwogICAgfTsKICAgIHJldHVybiBnZW5VbnRpbDsKICB9CiAgZnVuY3Rpb24gdmFsaWRhdGVPYmplY3Qob2JqZWN0LCB2YWxpZGF0b3JzLCBvcHRWYWxpZGF0b3JzID0ge30pIHsKICAgIGNvbnN0IGNoZWNrRmllbGQgPSAoZmllbGROYW1lLCB0eXBlLCBpc09wdGlvbmFsKSA9PiB7CiAgICAgIGNvbnN0IGNoZWNrVmFsID0gdmFsaWRhdG9yRm5zW3R5cGVdOwogICAgICBpZiAodHlwZW9mIGNoZWNrVmFsICE9PSAiZnVuY3Rpb24iKQogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWxpZGF0b3IgIiR7dHlwZX0iLCBleHBlY3RlZCBmdW5jdGlvbmApOwogICAgICBjb25zdCB2YWwgPSBvYmplY3RbZmllbGROYW1lXTsKICAgICAgaWYgKGlzT3B0aW9uYWwgJiYgdmFsID09PSB2b2lkIDApCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoIWNoZWNrVmFsKHZhbCwgb2JqZWN0KSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbSAke1N0cmluZyhmaWVsZE5hbWUpfT0ke3ZhbH0gKCR7dHlwZW9mIHZhbH0pLCBleHBlY3RlZCAke3R5cGV9YCk7CiAgICAgIH0KICAgIH07CiAgICBmb3IgKGNvbnN0IFtmaWVsZE5hbWUsIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbGlkYXRvcnMpKQogICAgICBjaGVja0ZpZWxkKGZpZWxkTmFtZSwgdHlwZSwgZmFsc2UpOwogICAgZm9yIChjb25zdCBbZmllbGROYW1lLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhvcHRWYWxpZGF0b3JzKSkKICAgICAgY2hlY2tGaWVsZChmaWVsZE5hbWUsIHR5cGUsIHRydWUpOwogICAgcmV0dXJuIG9iamVjdDsKICB9CiAgdmFyIF8wbjIsIF8xbjIsIF8ybjIsIGhleGVzMiwgYXNjaWlzLCBiaXRNYXNrLCB1OG4sIHU4ZnIsIHZhbGlkYXRvckZuczsKICB2YXIgaW5pdF91dGlsczQgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L3V0aWxzLmpzIigpIHsKICAgICAgXzBuMiA9IEJpZ0ludCgwKTsKICAgICAgXzFuMiA9IEJpZ0ludCgxKTsKICAgICAgXzJuMiA9IEJpZ0ludCgyKTsKICAgICAgaGV4ZXMyID0gLyogQF9fUFVSRV9fICovIEFycmF5LmZyb20oeyBsZW5ndGg6IDI1NiB9LCAoXywgaSkgPT4gaS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgIjAiKSk7CiAgICAgIGFzY2lpcyA9IHsgXzA6IDQ4LCBfOTogNTcsIF9BOiA2NSwgX0Y6IDcwLCBfYTogOTcsIF9mOiAxMDIgfTsKICAgICAgYml0TWFzayA9IChuKSA9PiAoXzJuMiA8PCBCaWdJbnQobiAtIDEpKSAtIF8xbjI7CiAgICAgIHU4biA9IChkYXRhKSA9PiBuZXcgVWludDhBcnJheShkYXRhKTsKICAgICAgdThmciA9IChhcnIpID0+IFVpbnQ4QXJyYXkuZnJvbShhcnIpOwogICAgICB2YWxpZGF0b3JGbnMgPSB7CiAgICAgICAgYmlnaW50OiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAiYmlnaW50IiwKICAgICAgICBmdW5jdGlvbjogKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gImZ1bmN0aW9uIiwKICAgICAgICBib29sZWFuOiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAiYm9vbGVhbiIsCiAgICAgICAgc3RyaW5nOiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAic3RyaW5nIiwKICAgICAgICBzdHJpbmdPclVpbnQ4QXJyYXk6ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICJzdHJpbmciIHx8IGlzQnl0ZXMyKHZhbCksCiAgICAgICAgaXNTYWZlSW50ZWdlcjogKHZhbCkgPT4gTnVtYmVyLmlzU2FmZUludGVnZXIodmFsKSwKICAgICAgICBhcnJheTogKHZhbCkgPT4gQXJyYXkuaXNBcnJheSh2YWwpLAogICAgICAgIGZpZWxkOiAodmFsLCBvYmplY3QpID0+IG9iamVjdC5GcC5pc1ZhbGlkKHZhbCksCiAgICAgICAgaGFzaDogKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gImZ1bmN0aW9uIiAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWwub3V0cHV0TGVuKQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvbW9kdWxhci5qcwogIGZ1bmN0aW9uIG1vZChhLCBiKSB7CiAgICBjb25zdCByZXN1bHQgPSBhICUgYjsKICAgIHJldHVybiByZXN1bHQgPj0gXzBuMyA/IHJlc3VsdCA6IGIgKyByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIHBvdyhudW0sIHBvd2VyLCBtb2R1bG8pIHsKICAgIGlmIChtb2R1bG8gPD0gXzBuMyB8fCBwb3dlciA8IF8wbjMpCiAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcG93ZXIvbW9kdWxvID4gMCIpOwogICAgaWYgKG1vZHVsbyA9PT0gXzFuMykKICAgICAgcmV0dXJuIF8wbjM7CiAgICBsZXQgcmVzID0gXzFuMzsKICAgIHdoaWxlIChwb3dlciA+IF8wbjMpIHsKICAgICAgaWYgKHBvd2VyICYgXzFuMykKICAgICAgICByZXMgPSByZXMgKiBudW0gJSBtb2R1bG87CiAgICAgIG51bSA9IG51bSAqIG51bSAlIG1vZHVsbzsKICAgICAgcG93ZXIgPj49IF8xbjM7CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KICBmdW5jdGlvbiBwb3cyKHgsIHBvd2VyLCBtb2R1bG8pIHsKICAgIGxldCByZXMgPSB4OwogICAgd2hpbGUgKHBvd2VyLS0gPiBfMG4zKSB7CiAgICAgIHJlcyAqPSByZXM7CiAgICAgIHJlcyAlPSBtb2R1bG87CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KICBmdW5jdGlvbiBpbnZlcnQobnVtYmVyMiwgbW9kdWxvKSB7CiAgICBpZiAobnVtYmVyMiA9PT0gXzBuMyB8fCBtb2R1bG8gPD0gXzBuMykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmVydDogZXhwZWN0ZWQgcG9zaXRpdmUgaW50ZWdlcnMsIGdvdCBuPSR7bnVtYmVyMn0gbW9kPSR7bW9kdWxvfWApOwogICAgfQogICAgbGV0IGEgPSBtb2QobnVtYmVyMiwgbW9kdWxvKTsKICAgIGxldCBiID0gbW9kdWxvOwogICAgbGV0IHggPSBfMG4zLCB5ID0gXzFuMywgdSA9IF8xbjMsIHYgPSBfMG4zOwogICAgd2hpbGUgKGEgIT09IF8wbjMpIHsKICAgICAgY29uc3QgcSA9IGIgLyBhOwogICAgICBjb25zdCByID0gYiAlIGE7CiAgICAgIGNvbnN0IG0gPSB4IC0gdSAqIHE7CiAgICAgIGNvbnN0IG4gPSB5IC0gdiAqIHE7CiAgICAgIGIgPSBhLCBhID0gciwgeCA9IHUsIHkgPSB2LCB1ID0gbSwgdiA9IG47CiAgICB9CiAgICBjb25zdCBnY2QgPSBiOwogICAgaWYgKGdjZCAhPT0gXzFuMykKICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZlcnQ6IGRvZXMgbm90IGV4aXN0Iik7CiAgICByZXR1cm4gbW9kKHgsIG1vZHVsbyk7CiAgfQogIGZ1bmN0aW9uIHRvbmVsbGlTaGFua3MoUCkgewogICAgY29uc3QgbGVnZW5kcmVDID0gKFAgLSBfMW4zKSAvIF8ybjM7CiAgICBsZXQgUSwgUywgWjsKICAgIGZvciAoUSA9IFAgLSBfMW4zLCBTID0gMDsgUSAlIF8ybjMgPT09IF8wbjM7IFEgLz0gXzJuMywgUysrKQogICAgICA7CiAgICBmb3IgKFogPSBfMm4zOyBaIDwgUCAmJiBwb3coWiwgbGVnZW5kcmVDLCBQKSAhPT0gUCAtIF8xbjM7IForKykKICAgICAgOwogICAgaWYgKFMgPT09IDEpIHsKICAgICAgY29uc3QgcDFkaXY0ID0gKFAgKyBfMW4zKSAvIF80bjsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRvbmVsbGlGYXN0KEZwMiwgbikgewogICAgICAgIGNvbnN0IHJvb3QyID0gRnAyLnBvdyhuLCBwMWRpdjQpOwogICAgICAgIGlmICghRnAyLmVxbChGcDIuc3FyKHJvb3QyKSwgbikpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNxdWFyZSByb290Iik7CiAgICAgICAgcmV0dXJuIHJvb3QyOwogICAgICB9OwogICAgfQogICAgY29uc3QgUTFkaXYyID0gKFEgKyBfMW4zKSAvIF8ybjM7CiAgICByZXR1cm4gZnVuY3Rpb24gdG9uZWxsaVNsb3coRnAyLCBuKSB7CiAgICAgIGlmIChGcDIucG93KG4sIGxlZ2VuZHJlQykgPT09IEZwMi5uZWcoRnAyLk9ORSkpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpOwogICAgICBsZXQgciA9IFM7CiAgICAgIGxldCBnID0gRnAyLnBvdyhGcDIubXVsKEZwMi5PTkUsIFopLCBRKTsKICAgICAgbGV0IHggPSBGcDIucG93KG4sIFExZGl2Mik7CiAgICAgIGxldCBiID0gRnAyLnBvdyhuLCBRKTsKICAgICAgd2hpbGUgKCFGcDIuZXFsKGIsIEZwMi5PTkUpKSB7CiAgICAgICAgaWYgKEZwMi5lcWwoYiwgRnAyLlpFUk8pKQogICAgICAgICAgcmV0dXJuIEZwMi5aRVJPOwogICAgICAgIGxldCBtID0gMTsKICAgICAgICBmb3IgKGxldCB0MiA9IEZwMi5zcXIoYik7IG0gPCByOyBtKyspIHsKICAgICAgICAgIGlmIChGcDIuZXFsKHQyLCBGcDIuT05FKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB0MiA9IEZwMi5zcXIodDIpOwogICAgICAgIH0KICAgICAgICBjb25zdCBnZTIgPSBGcDIucG93KGcsIF8xbjMgPDwgQmlnSW50KHIgLSBtIC0gMSkpOwogICAgICAgIGcgPSBGcDIuc3FyKGdlMik7CiAgICAgICAgeCA9IEZwMi5tdWwoeCwgZ2UyKTsKICAgICAgICBiID0gRnAyLm11bChiLCBnKTsKICAgICAgICByID0gbTsKICAgICAgfQogICAgICByZXR1cm4geDsKICAgIH07CiAgfQogIGZ1bmN0aW9uIEZwU3FydChQKSB7CiAgICBpZiAoUCAlIF80biA9PT0gXzNuKSB7CiAgICAgIGNvbnN0IHAxZGl2NCA9IChQICsgXzFuMykgLyBfNG47CiAgICAgIHJldHVybiBmdW5jdGlvbiBzcXJ0M21vZDQoRnAyLCBuKSB7CiAgICAgICAgY29uc3Qgcm9vdDIgPSBGcDIucG93KG4sIHAxZGl2NCk7CiAgICAgICAgaWYgKCFGcDIuZXFsKEZwMi5zcXIocm9vdDIpLCBuKSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QiKTsKICAgICAgICByZXR1cm4gcm9vdDI7CiAgICAgIH07CiAgICB9CiAgICBpZiAoUCAlIF84biA9PT0gXzVuKSB7CiAgICAgIGNvbnN0IGMxID0gKFAgLSBfNW4pIC8gXzhuOwogICAgICByZXR1cm4gZnVuY3Rpb24gc3FydDVtb2Q4KEZwMiwgbikgewogICAgICAgIGNvbnN0IG4yID0gRnAyLm11bChuLCBfMm4zKTsKICAgICAgICBjb25zdCB2ID0gRnAyLnBvdyhuMiwgYzEpOwogICAgICAgIGNvbnN0IG52ID0gRnAyLm11bChuLCB2KTsKICAgICAgICBjb25zdCBpID0gRnAyLm11bChGcDIubXVsKG52LCBfMm4zKSwgdik7CiAgICAgICAgY29uc3Qgcm9vdDIgPSBGcDIubXVsKG52LCBGcDIuc3ViKGksIEZwMi5PTkUpKTsKICAgICAgICBpZiAoIUZwMi5lcWwoRnAyLnNxcihyb290MiksIG4pKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpOwogICAgICAgIHJldHVybiByb290MjsKICAgICAgfTsKICAgIH0KICAgIGlmIChQICUgXzE2biA9PT0gXzluKSB7CiAgICB9CiAgICByZXR1cm4gdG9uZWxsaVNoYW5rcyhQKTsKICB9CiAgZnVuY3Rpb24gdmFsaWRhdGVGaWVsZChmaWVsZCkgewogICAgY29uc3QgaW5pdGlhbCA9IHsKICAgICAgT1JERVI6ICJiaWdpbnQiLAogICAgICBNQVNLOiAiYmlnaW50IiwKICAgICAgQllURVM6ICJpc1NhZmVJbnRlZ2VyIiwKICAgICAgQklUUzogImlzU2FmZUludGVnZXIiCiAgICB9OwogICAgY29uc3Qgb3B0cyA9IEZJRUxEX0ZJRUxEUy5yZWR1Y2UoKG1hcCwgdmFsKSA9PiB7CiAgICAgIG1hcFt2YWxdID0gImZ1bmN0aW9uIjsKICAgICAgcmV0dXJuIG1hcDsKICAgIH0sIGluaXRpYWwpOwogICAgcmV0dXJuIHZhbGlkYXRlT2JqZWN0KGZpZWxkLCBvcHRzKTsKICB9CiAgZnVuY3Rpb24gRnBQb3coZjIsIG51bSwgcG93ZXIpIHsKICAgIGlmIChwb3dlciA8IF8wbjMpCiAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcG93ZXIgPiAwIik7CiAgICBpZiAocG93ZXIgPT09IF8wbjMpCiAgICAgIHJldHVybiBmMi5PTkU7CiAgICBpZiAocG93ZXIgPT09IF8xbjMpCiAgICAgIHJldHVybiBudW07CiAgICBsZXQgcCA9IGYyLk9ORTsKICAgIGxldCBkID0gbnVtOwogICAgd2hpbGUgKHBvd2VyID4gXzBuMykgewogICAgICBpZiAocG93ZXIgJiBfMW4zKQogICAgICAgIHAgPSBmMi5tdWwocCwgZCk7CiAgICAgIGQgPSBmMi5zcXIoZCk7CiAgICAgIHBvd2VyID4+PSBfMW4zOwogICAgfQogICAgcmV0dXJuIHA7CiAgfQogIGZ1bmN0aW9uIEZwSW52ZXJ0QmF0Y2goZjIsIG51bXMpIHsKICAgIGNvbnN0IHRtcCA9IG5ldyBBcnJheShudW1zLmxlbmd0aCk7CiAgICBjb25zdCBsYXN0TXVsdGlwbGllZCA9IG51bXMucmVkdWNlKChhY2MsIG51bSwgaSkgPT4gewogICAgICBpZiAoZjIuaXMwKG51bSkpCiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgdG1wW2ldID0gYWNjOwogICAgICByZXR1cm4gZjIubXVsKGFjYywgbnVtKTsKICAgIH0sIGYyLk9ORSk7CiAgICBjb25zdCBpbnZlcnRlZCA9IGYyLmludihsYXN0TXVsdGlwbGllZCk7CiAgICBudW1zLnJlZHVjZVJpZ2h0KChhY2MsIG51bSwgaSkgPT4gewogICAgICBpZiAoZjIuaXMwKG51bSkpCiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgdG1wW2ldID0gZjIubXVsKGFjYywgdG1wW2ldKTsKICAgICAgcmV0dXJuIGYyLm11bChhY2MsIG51bSk7CiAgICB9LCBpbnZlcnRlZCk7CiAgICByZXR1cm4gdG1wOwogIH0KICBmdW5jdGlvbiBuTGVuZ3RoKG4sIG5CaXRMZW5ndGgpIHsKICAgIGNvbnN0IF9uQml0TGVuZ3RoID0gbkJpdExlbmd0aCAhPT0gdm9pZCAwID8gbkJpdExlbmd0aCA6IG4udG9TdHJpbmcoMikubGVuZ3RoOwogICAgY29uc3QgbkJ5dGVMZW5ndGggPSBNYXRoLmNlaWwoX25CaXRMZW5ndGggLyA4KTsKICAgIHJldHVybiB7IG5CaXRMZW5ndGg6IF9uQml0TGVuZ3RoLCBuQnl0ZUxlbmd0aCB9OwogIH0KICBmdW5jdGlvbiBGaWVsZChPUkRFUiwgYml0TGVuMiwgaXNMRTIgPSBmYWxzZSwgcmVkZWYgPSB7fSkgewogICAgaWYgKE9SREVSIDw9IF8wbjMpCiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgRmllbGQgT1JERVIgPiAwLCBnb3QgJHtPUkRFUn1gKTsKICAgIGNvbnN0IHsgbkJpdExlbmd0aDogQklUUywgbkJ5dGVMZW5ndGg6IEJZVEVTIH0gPSBuTGVuZ3RoKE9SREVSLCBiaXRMZW4yKTsKICAgIGlmIChCWVRFUyA+IDIwNDgpCiAgICAgIHRocm93IG5ldyBFcnJvcigiRmllbGQgbGVuZ3RocyBvdmVyIDIwNDggYnl0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQiKTsKICAgIGNvbnN0IHNxcnRQID0gRnBTcXJ0KE9SREVSKTsKICAgIGNvbnN0IGYyID0gT2JqZWN0LmZyZWV6ZSh7CiAgICAgIE9SREVSLAogICAgICBCSVRTLAogICAgICBCWVRFUywKICAgICAgTUFTSzogYml0TWFzayhCSVRTKSwKICAgICAgWkVSTzogXzBuMywKICAgICAgT05FOiBfMW4zLAogICAgICBjcmVhdGU6IChudW0pID0+IG1vZChudW0sIE9SREVSKSwKICAgICAgaXNWYWxpZDogKG51bSkgPT4gewogICAgICAgIGlmICh0eXBlb2YgbnVtICE9PSAiYmlnaW50IikKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmaWVsZCBlbGVtZW50OiBleHBlY3RlZCBiaWdpbnQsIGdvdCAke3R5cGVvZiBudW19YCk7CiAgICAgICAgcmV0dXJuIF8wbjMgPD0gbnVtICYmIG51bSA8IE9SREVSOwogICAgICB9LAogICAgICBpczA6IChudW0pID0+IG51bSA9PT0gXzBuMywKICAgICAgaXNPZGQ6IChudW0pID0+IChudW0gJiBfMW4zKSA9PT0gXzFuMywKICAgICAgbmVnOiAobnVtKSA9PiBtb2QoLW51bSwgT1JERVIpLAogICAgICBlcWw6IChsaHMsIHJocykgPT4gbGhzID09PSByaHMsCiAgICAgIHNxcjogKG51bSkgPT4gbW9kKG51bSAqIG51bSwgT1JERVIpLAogICAgICBhZGQ6IChsaHMsIHJocykgPT4gbW9kKGxocyArIHJocywgT1JERVIpLAogICAgICBzdWI6IChsaHMsIHJocykgPT4gbW9kKGxocyAtIHJocywgT1JERVIpLAogICAgICBtdWw6IChsaHMsIHJocykgPT4gbW9kKGxocyAqIHJocywgT1JERVIpLAogICAgICBwb3c6IChudW0sIHBvd2VyKSA9PiBGcFBvdyhmMiwgbnVtLCBwb3dlciksCiAgICAgIGRpdjogKGxocywgcmhzKSA9PiBtb2QobGhzICogaW52ZXJ0KHJocywgT1JERVIpLCBPUkRFUiksCiAgICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBkb2Vzbid0IG5vcm1hbGl6ZQogICAgICBzcXJOOiAobnVtKSA9PiBudW0gKiBudW0sCiAgICAgIGFkZE46IChsaHMsIHJocykgPT4gbGhzICsgcmhzLAogICAgICBzdWJOOiAobGhzLCByaHMpID0+IGxocyAtIHJocywKICAgICAgbXVsTjogKGxocywgcmhzKSA9PiBsaHMgKiByaHMsCiAgICAgIGludjogKG51bSkgPT4gaW52ZXJ0KG51bSwgT1JERVIpLAogICAgICBzcXJ0OiByZWRlZi5zcXJ0IHx8ICgobikgPT4gc3FydFAoZjIsIG4pKSwKICAgICAgaW52ZXJ0QmF0Y2g6IChsc3QpID0+IEZwSW52ZXJ0QmF0Y2goZjIsIGxzdCksCiAgICAgIC8vIFRPRE86IGRvIHdlIHJlYWxseSBuZWVkIGNvbnN0YW50IGNtb3Y/CiAgICAgIC8vIFdlIGRvbid0IGhhdmUgY29uc3QtdGltZSBiaWdpbnRzIGFueXdheSwgc28gcHJvYmFibHkgd2lsbCBiZSBub3QgdmVyeSB1c2VmdWwKICAgICAgY21vdjogKGEsIGIsIGMpID0+IGMgPyBiIDogYSwKICAgICAgdG9CeXRlczogKG51bSkgPT4gaXNMRTIgPyBudW1iZXJUb0J5dGVzTEUobnVtLCBCWVRFUykgOiBudW1iZXJUb0J5dGVzQkUobnVtLCBCWVRFUyksCiAgICAgIGZyb21CeXRlczogKGJ5dGVzMikgPT4gewogICAgICAgIGlmIChieXRlczIubGVuZ3RoICE9PSBCWVRFUykKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRnAuZnJvbUJ5dGVzOiBleHBlY3RlZCAke0JZVEVTfSwgZ290ICR7Ynl0ZXMyLmxlbmd0aH1gKTsKICAgICAgICByZXR1cm4gaXNMRTIgPyBieXRlc1RvTnVtYmVyTEUoYnl0ZXMyKSA6IGJ5dGVzVG9OdW1iZXJCRShieXRlczIpOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBPYmplY3QuZnJlZXplKGYyKTsKICB9CiAgZnVuY3Rpb24gZ2V0RmllbGRCeXRlc0xlbmd0aChmaWVsZE9yZGVyKSB7CiAgICBpZiAodHlwZW9mIGZpZWxkT3JkZXIgIT09ICJiaWdpbnQiKQogICAgICB0aHJvdyBuZXcgRXJyb3IoImZpZWxkIG9yZGVyIG11c3QgYmUgYmlnaW50Iik7CiAgICBjb25zdCBiaXRMZW5ndGggPSBmaWVsZE9yZGVyLnRvU3RyaW5nKDIpLmxlbmd0aDsKICAgIHJldHVybiBNYXRoLmNlaWwoYml0TGVuZ3RoIC8gOCk7CiAgfQogIGZ1bmN0aW9uIGdldE1pbkhhc2hMZW5ndGgoZmllbGRPcmRlcikgewogICAgY29uc3QgbGVuZ3RoID0gZ2V0RmllbGRCeXRlc0xlbmd0aChmaWVsZE9yZGVyKTsKICAgIHJldHVybiBsZW5ndGggKyBNYXRoLmNlaWwobGVuZ3RoIC8gMik7CiAgfQogIGZ1bmN0aW9uIG1hcEhhc2hUb0ZpZWxkKGtleSwgZmllbGRPcmRlciwgaXNMRTIgPSBmYWxzZSkgewogICAgY29uc3QgbGVuID0ga2V5Lmxlbmd0aDsKICAgIGNvbnN0IGZpZWxkTGVuID0gZ2V0RmllbGRCeXRlc0xlbmd0aChmaWVsZE9yZGVyKTsKICAgIGNvbnN0IG1pbkxlbiA9IGdldE1pbkhhc2hMZW5ndGgoZmllbGRPcmRlcik7CiAgICBpZiAobGVuIDwgMTYgfHwgbGVuIDwgbWluTGVuIHx8IGxlbiA+IDEwMjQpCiAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHttaW5MZW59LTEwMjQgYnl0ZXMgb2YgaW5wdXQsIGdvdCAke2xlbn1gKTsKICAgIGNvbnN0IG51bSA9IGlzTEUyID8gYnl0ZXNUb051bWJlckJFKGtleSkgOiBieXRlc1RvTnVtYmVyTEUoa2V5KTsKICAgIGNvbnN0IHJlZHVjZWQgPSBtb2QobnVtLCBmaWVsZE9yZGVyIC0gXzFuMykgKyBfMW4zOwogICAgcmV0dXJuIGlzTEUyID8gbnVtYmVyVG9CeXRlc0xFKHJlZHVjZWQsIGZpZWxkTGVuKSA6IG51bWJlclRvQnl0ZXNCRShyZWR1Y2VkLCBmaWVsZExlbik7CiAgfQogIHZhciBfMG4zLCBfMW4zLCBfMm4zLCBfM24sIF80biwgXzVuLCBfOG4sIF85biwgXzE2biwgRklFTERfRklFTERTOwogIHZhciBpbml0X21vZHVsYXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L21vZHVsYXIuanMiKCkgewogICAgICBpbml0X3V0aWxzNCgpOwogICAgICBfMG4zID0gQmlnSW50KDApOwogICAgICBfMW4zID0gQmlnSW50KDEpOwogICAgICBfMm4zID0gQmlnSW50KDIpOwogICAgICBfM24gPSBCaWdJbnQoMyk7CiAgICAgIF80biA9IEJpZ0ludCg0KTsKICAgICAgXzVuID0gQmlnSW50KDUpOwogICAgICBfOG4gPSBCaWdJbnQoOCk7CiAgICAgIF85biA9IEJpZ0ludCg5KTsKICAgICAgXzE2biA9IEJpZ0ludCgxNik7CiAgICAgIEZJRUxEX0ZJRUxEUyA9IFsKICAgICAgICAiY3JlYXRlIiwKICAgICAgICAiaXNWYWxpZCIsCiAgICAgICAgImlzMCIsCiAgICAgICAgIm5lZyIsCiAgICAgICAgImludiIsCiAgICAgICAgInNxcnQiLAogICAgICAgICJzcXIiLAogICAgICAgICJlcWwiLAogICAgICAgICJhZGQiLAogICAgICAgICJzdWIiLAogICAgICAgICJtdWwiLAogICAgICAgICJwb3ciLAogICAgICAgICJkaXYiLAogICAgICAgICJhZGROIiwKICAgICAgICAic3ViTiIsCiAgICAgICAgIm11bE4iLAogICAgICAgICJzcXJOIgogICAgICBdOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvY3VydmUuanMKICBmdW5jdGlvbiB3TkFGKGMsIGJpdHMpIHsKICAgIGNvbnN0IGNvbnN0VGltZU5lZ2F0ZSA9IChjb25kaXRpb24sIGl0ZW0pID0+IHsKICAgICAgY29uc3QgbmVnID0gaXRlbS5uZWdhdGUoKTsKICAgICAgcmV0dXJuIGNvbmRpdGlvbiA/IG5lZyA6IGl0ZW07CiAgICB9OwogICAgY29uc3Qgb3B0cyA9IChXKSA9PiB7CiAgICAgIGNvbnN0IHdpbmRvd3MgPSBNYXRoLmNlaWwoYml0cyAvIFcpICsgMTsKICAgICAgY29uc3Qgd2luZG93U2l6ZSA9IDIgKiogKFcgLSAxKTsKICAgICAgcmV0dXJuIHsgd2luZG93cywgd2luZG93U2l6ZSB9OwogICAgfTsKICAgIHJldHVybiB7CiAgICAgIGNvbnN0VGltZU5lZ2F0ZSwKICAgICAgLy8gbm9uLWNvbnN0IHRpbWUgbXVsdGlwbGljYXRpb24gbGFkZGVyCiAgICAgIHVuc2FmZUxhZGRlcihlbG0sIG4pIHsKICAgICAgICBsZXQgcCA9IGMuWkVSTzsKICAgICAgICBsZXQgZCA9IGVsbTsKICAgICAgICB3aGlsZSAobiA+IF8wbjQpIHsKICAgICAgICAgIGlmIChuICYgXzFuNCkKICAgICAgICAgICAgcCA9IHAuYWRkKGQpOwogICAgICAgICAgZCA9IGQuZG91YmxlKCk7CiAgICAgICAgICBuID4+PSBfMW40OwogICAgICAgIH0KICAgICAgICByZXR1cm4gcDsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgYSB3TkFGIHByZWNvbXB1dGF0aW9uIHdpbmRvdy4gVXNlZCBmb3IgY2FjaGluZy4KICAgICAgICogRGVmYXVsdCB3aW5kb3cgc2l6ZSBpcyBzZXQgYnkgYHV0aWxzLnByZWNvbXB1dGUoKWAgYW5kIGlzIGVxdWFsIHRvIDguCiAgICAgICAqIE51bWJlciBvZiBwcmVjb21wdXRlZCBwb2ludHMgZGVwZW5kcyBvbiB0aGUgY3VydmUgc2l6ZToKICAgICAgICogMl4o8J2RiuKIkjEpICogKE1hdGguY2VpbCjwnZGbIC8g8J2RiikgKyAxKSwgd2hlcmU6CiAgICAgICAqIC0g8J2RiiBpcyB0aGUgd2luZG93IHNpemUKICAgICAgICogLSDwnZGbIGlzIHRoZSBiaXRsZW5ndGggb2YgdGhlIGN1cnZlIG9yZGVyLgogICAgICAgKiBGb3IgYSAyNTYtYml0IGN1cnZlIGFuZCB3aW5kb3cgc2l6ZSA4LCB0aGUgbnVtYmVyIG9mIHByZWNvbXB1dGVkIHBvaW50cyBpcyAxMjggKiAzMyA9IDQyMjQuCiAgICAgICAqIEByZXR1cm5zIHByZWNvbXB1dGVkIHBvaW50IHRhYmxlcyBmbGF0dGVuZWQgdG8gYSBzaW5nbGUgYXJyYXkKICAgICAgICovCiAgICAgIHByZWNvbXB1dGVXaW5kb3coZWxtLCBXKSB7CiAgICAgICAgY29uc3QgeyB3aW5kb3dzLCB3aW5kb3dTaXplIH0gPSBvcHRzKFcpOwogICAgICAgIGNvbnN0IHBvaW50cyA9IFtdOwogICAgICAgIGxldCBwID0gZWxtOwogICAgICAgIGxldCBiYXNlMiA9IHA7CiAgICAgICAgZm9yIChsZXQgd2luZG93MiA9IDA7IHdpbmRvdzIgPCB3aW5kb3dzOyB3aW5kb3cyKyspIHsKICAgICAgICAgIGJhc2UyID0gcDsKICAgICAgICAgIHBvaW50cy5wdXNoKGJhc2UyKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgd2luZG93U2l6ZTsgaSsrKSB7CiAgICAgICAgICAgIGJhc2UyID0gYmFzZTIuYWRkKHApOwogICAgICAgICAgICBwb2ludHMucHVzaChiYXNlMik7CiAgICAgICAgICB9CiAgICAgICAgICBwID0gYmFzZTIuZG91YmxlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb2ludHM7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBJbXBsZW1lbnRzIGVjIG11bHRpcGxpY2F0aW9uIHVzaW5nIHByZWNvbXB1dGVkIHRhYmxlcyBhbmQgdy1hcnkgbm9uLWFkamFjZW50IGZvcm0uCiAgICAgICAqIEBwYXJhbSBXIHdpbmRvdyBzaXplCiAgICAgICAqIEBwYXJhbSBwcmVjb21wdXRlcyBwcmVjb21wdXRlZCB0YWJsZXMKICAgICAgICogQHBhcmFtIG4gc2NhbGFyICh3ZSBkb24ndCBjaGVjayBoZXJlLCBidXQgc2hvdWxkIGJlIGxlc3MgdGhhbiBjdXJ2ZSBvcmRlcikKICAgICAgICogQHJldHVybnMgcmVhbCBhbmQgZmFrZSAoZm9yIGNvbnN0LXRpbWUpIHBvaW50cwogICAgICAgKi8KICAgICAgd05BRihXLCBwcmVjb21wdXRlcywgbikgewogICAgICAgIGNvbnN0IHsgd2luZG93cywgd2luZG93U2l6ZSB9ID0gb3B0cyhXKTsKICAgICAgICBsZXQgcCA9IGMuWkVSTzsKICAgICAgICBsZXQgZjIgPSBjLkJBU0U7CiAgICAgICAgY29uc3QgbWFzayA9IEJpZ0ludCgyICoqIFcgLSAxKTsKICAgICAgICBjb25zdCBtYXhOdW1iZXIgPSAyICoqIFc7CiAgICAgICAgY29uc3Qgc2hpZnRCeSA9IEJpZ0ludChXKTsKICAgICAgICBmb3IgKGxldCB3aW5kb3cyID0gMDsgd2luZG93MiA8IHdpbmRvd3M7IHdpbmRvdzIrKykgewogICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gd2luZG93MiAqIHdpbmRvd1NpemU7CiAgICAgICAgICBsZXQgd2JpdHMgPSBOdW1iZXIobiAmIG1hc2spOwogICAgICAgICAgbiA+Pj0gc2hpZnRCeTsKICAgICAgICAgIGlmICh3Yml0cyA+IHdpbmRvd1NpemUpIHsKICAgICAgICAgICAgd2JpdHMgLT0gbWF4TnVtYmVyOwogICAgICAgICAgICBuICs9IF8xbjQ7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBvZmZzZXQxID0gb2Zmc2V0OwogICAgICAgICAgY29uc3Qgb2Zmc2V0MiA9IG9mZnNldCArIE1hdGguYWJzKHdiaXRzKSAtIDE7CiAgICAgICAgICBjb25zdCBjb25kMSA9IHdpbmRvdzIgJSAyICE9PSAwOwogICAgICAgICAgY29uc3QgY29uZDIgPSB3Yml0cyA8IDA7CiAgICAgICAgICBpZiAod2JpdHMgPT09IDApIHsKICAgICAgICAgICAgZjIgPSBmMi5hZGQoY29uc3RUaW1lTmVnYXRlKGNvbmQxLCBwcmVjb21wdXRlc1tvZmZzZXQxXSkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcCA9IHAuYWRkKGNvbnN0VGltZU5lZ2F0ZShjb25kMiwgcHJlY29tcHV0ZXNbb2Zmc2V0Ml0pKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgcCwgZjogZjIgfTsKICAgICAgfSwKICAgICAgd05BRkNhY2hlZChQLCBwcmVjb21wdXRlc01hcCwgbiwgdHJhbnNmb3JtKSB7CiAgICAgICAgY29uc3QgVyA9IFAuX1dJTkRPV19TSVpFIHx8IDE7CiAgICAgICAgbGV0IGNvbXAgPSBwcmVjb21wdXRlc01hcC5nZXQoUCk7CiAgICAgICAgaWYgKCFjb21wKSB7CiAgICAgICAgICBjb21wID0gdGhpcy5wcmVjb21wdXRlV2luZG93KFAsIFcpOwogICAgICAgICAgaWYgKFcgIT09IDEpIHsKICAgICAgICAgICAgcHJlY29tcHV0ZXNNYXAuc2V0KFAsIHRyYW5zZm9ybShjb21wKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLndOQUYoVywgY29tcCwgbik7CiAgICAgIH0KICAgIH07CiAgfQogIGZ1bmN0aW9uIHZhbGlkYXRlQmFzaWMoY3VydmUpIHsKICAgIHZhbGlkYXRlRmllbGQoY3VydmUuRnApOwogICAgdmFsaWRhdGVPYmplY3QoY3VydmUsIHsKICAgICAgbjogImJpZ2ludCIsCiAgICAgIGg6ICJiaWdpbnQiLAogICAgICBHeDogImZpZWxkIiwKICAgICAgR3k6ICJmaWVsZCIKICAgIH0sIHsKICAgICAgbkJpdExlbmd0aDogImlzU2FmZUludGVnZXIiLAogICAgICBuQnl0ZUxlbmd0aDogImlzU2FmZUludGVnZXIiCiAgICB9KTsKICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsKICAgICAgLi4ubkxlbmd0aChjdXJ2ZS5uLCBjdXJ2ZS5uQml0TGVuZ3RoKSwKICAgICAgLi4uY3VydmUsCiAgICAgIC4uLnsgcDogY3VydmUuRnAuT1JERVIgfQogICAgfSk7CiAgfQogIHZhciBfMG40LCBfMW40OwogIHZhciBpbml0X2N1cnZlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC9jdXJ2ZS5qcyIoKSB7CiAgICAgIGluaXRfbW9kdWxhcigpOwogICAgICBpbml0X3V0aWxzNCgpOwogICAgICBfMG40ID0gQmlnSW50KDApOwogICAgICBfMW40ID0gQmlnSW50KDEpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3Qvd2VpZXJzdHJhc3MuanMKICBmdW5jdGlvbiB2YWxpZGF0ZVBvaW50T3B0cyhjdXJ2ZSkgewogICAgY29uc3Qgb3B0cyA9IHZhbGlkYXRlQmFzaWMoY3VydmUpOwogICAgdmFsaWRhdGVPYmplY3Qob3B0cywgewogICAgICBhOiAiZmllbGQiLAogICAgICBiOiAiZmllbGQiCiAgICB9LCB7CiAgICAgIGFsbG93ZWRQcml2YXRlS2V5TGVuZ3RoczogImFycmF5IiwKICAgICAgd3JhcFByaXZhdGVLZXk6ICJib29sZWFuIiwKICAgICAgaXNUb3JzaW9uRnJlZTogImZ1bmN0aW9uIiwKICAgICAgY2xlYXJDb2ZhY3RvcjogImZ1bmN0aW9uIiwKICAgICAgYWxsb3dJbmZpbml0eVBvaW50OiAiYm9vbGVhbiIsCiAgICAgIGZyb21CeXRlczogImZ1bmN0aW9uIiwKICAgICAgdG9CeXRlczogImZ1bmN0aW9uIgogICAgfSk7CiAgICBjb25zdCB7IGVuZG8sIEZwOiBGcDIsIGEgfSA9IG9wdHM7CiAgICBpZiAoZW5kbykgewogICAgICBpZiAoIUZwMi5lcWwoYSwgRnAyLlpFUk8pKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFbmRvbW9ycGhpc20gY2FuIG9ubHkgYmUgZGVmaW5lZCBmb3IgS29ibGl0eiBjdXJ2ZXMgdGhhdCBoYXZlIGE9MCIpOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgZW5kbyAhPT0gIm9iamVjdCIgfHwgdHlwZW9mIGVuZG8uYmV0YSAhPT0gImJpZ2ludCIgfHwgdHlwZW9mIGVuZG8uc3BsaXRTY2FsYXIgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGVuZG9tb3JwaGlzbSB3aXRoIGJldGE6IGJpZ2ludCBhbmQgc3BsaXRTY2FsYXI6IGZ1bmN0aW9uIik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsgLi4ub3B0cyB9KTsKICB9CiAgZnVuY3Rpb24gd2VpZXJzdHJhc3NQb2ludHMob3B0cykgewogICAgY29uc3QgQ1VSVkUgPSB2YWxpZGF0ZVBvaW50T3B0cyhvcHRzKTsKICAgIGNvbnN0IHsgRnA6IEZwMiB9ID0gQ1VSVkU7CiAgICBjb25zdCB0b0J5dGVzMyA9IENVUlZFLnRvQnl0ZXMgfHwgKChfYywgcG9pbnQsIF9pc0NvbXByZXNzZWQpID0+IHsKICAgICAgY29uc3QgYSA9IHBvaW50LnRvQWZmaW5lKCk7CiAgICAgIHJldHVybiBjb25jYXRCeXRlczMoVWludDhBcnJheS5mcm9tKFs0XSksIEZwMi50b0J5dGVzKGEueCksIEZwMi50b0J5dGVzKGEueSkpOwogICAgfSk7CiAgICBjb25zdCBmcm9tQnl0ZXMyID0gQ1VSVkUuZnJvbUJ5dGVzIHx8ICgoYnl0ZXMyKSA9PiB7CiAgICAgIGNvbnN0IHRhaWwgPSBieXRlczIuc3ViYXJyYXkoMSk7CiAgICAgIGNvbnN0IHggPSBGcDIuZnJvbUJ5dGVzKHRhaWwuc3ViYXJyYXkoMCwgRnAyLkJZVEVTKSk7CiAgICAgIGNvbnN0IHkgPSBGcDIuZnJvbUJ5dGVzKHRhaWwuc3ViYXJyYXkoRnAyLkJZVEVTLCAyICogRnAyLkJZVEVTKSk7CiAgICAgIHJldHVybiB7IHgsIHkgfTsKICAgIH0pOwogICAgZnVuY3Rpb24gd2VpZXJzdHJhc3NFcXVhdGlvbih4KSB7CiAgICAgIGNvbnN0IHsgYSwgYiB9ID0gQ1VSVkU7CiAgICAgIGNvbnN0IHgyID0gRnAyLnNxcih4KTsKICAgICAgY29uc3QgeDMgPSBGcDIubXVsKHgyLCB4KTsKICAgICAgcmV0dXJuIEZwMi5hZGQoRnAyLmFkZCh4MywgRnAyLm11bCh4LCBhKSksIGIpOwogICAgfQogICAgaWYgKCFGcDIuZXFsKEZwMi5zcXIoQ1VSVkUuR3kpLCB3ZWllcnN0cmFzc0VxdWF0aW9uKENVUlZFLkd4KSkpCiAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIGdlbmVyYXRvciBwb2ludDogZXF1YXRpb24gbGVmdCAhPSByaWdodCIpOwogICAgZnVuY3Rpb24gaXNXaXRoaW5DdXJ2ZU9yZGVyKG51bSkgewogICAgICByZXR1cm4gdHlwZW9mIG51bSA9PT0gImJpZ2ludCIgJiYgXzBuNSA8IG51bSAmJiBudW0gPCBDVVJWRS5uOwogICAgfQogICAgZnVuY3Rpb24gYXNzZXJ0R0UobnVtKSB7CiAgICAgIGlmICghaXNXaXRoaW5DdXJ2ZU9yZGVyKG51bSkpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB2YWxpZCBiaWdpbnQ6IDAgPCBiaWdpbnQgPCBjdXJ2ZS5uIik7CiAgICB9CiAgICBmdW5jdGlvbiBub3JtUHJpdmF0ZUtleVRvU2NhbGFyKGtleSkgewogICAgICBjb25zdCB7IGFsbG93ZWRQcml2YXRlS2V5TGVuZ3RoczogbGVuZ3RocywgbkJ5dGVMZW5ndGgsIHdyYXBQcml2YXRlS2V5LCBuIH0gPSBDVVJWRTsKICAgICAgaWYgKGxlbmd0aHMgJiYgdHlwZW9mIGtleSAhPT0gImJpZ2ludCIpIHsKICAgICAgICBpZiAoaXNCeXRlczIoa2V5KSkKICAgICAgICAgIGtleSA9IGJ5dGVzVG9IZXgyKGtleSk7CiAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICJzdHJpbmciIHx8ICFsZW5ndGhzLmluY2x1ZGVzKGtleS5sZW5ndGgpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGtleSIpOwogICAgICAgIGtleSA9IGtleS5wYWRTdGFydChuQnl0ZUxlbmd0aCAqIDIsICIwIik7CiAgICAgIH0KICAgICAgbGV0IG51bTsKICAgICAgdHJ5IHsKICAgICAgICBudW0gPSB0eXBlb2Yga2V5ID09PSAiYmlnaW50IiA/IGtleSA6IGJ5dGVzVG9OdW1iZXJCRShlbnN1cmVCeXRlcygicHJpdmF0ZSBrZXkiLCBrZXksIG5CeXRlTGVuZ3RoKSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcml2YXRlIGtleSBtdXN0IGJlICR7bkJ5dGVMZW5ndGh9IGJ5dGVzLCBoZXggb3IgYmlnaW50LCBub3QgJHt0eXBlb2Yga2V5fWApOwogICAgICB9CiAgICAgIGlmICh3cmFwUHJpdmF0ZUtleSkKICAgICAgICBudW0gPSBtb2QobnVtLCBuKTsKICAgICAgYXNzZXJ0R0UobnVtKTsKICAgICAgcmV0dXJuIG51bTsKICAgIH0KICAgIGNvbnN0IHBvaW50UHJlY29tcHV0ZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgZnVuY3Rpb24gYXNzZXJ0UHJqUG9pbnQob3RoZXIpIHsKICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBQb2ludDIpKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiUHJvamVjdGl2ZVBvaW50IGV4cGVjdGVkIik7CiAgICB9CiAgICBjbGFzcyBQb2ludDIgewogICAgICBjb25zdHJ1Y3RvcihweCwgcHksIHB6KSB7CiAgICAgICAgdGhpcy5weCA9IHB4OwogICAgICAgIHRoaXMucHkgPSBweTsKICAgICAgICB0aGlzLnB6ID0gcHo7CiAgICAgICAgaWYgKHB4ID09IG51bGwgfHwgIUZwMi5pc1ZhbGlkKHB4KSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigieCByZXF1aXJlZCIpOwogICAgICAgIGlmIChweSA9PSBudWxsIHx8ICFGcDIuaXNWYWxpZChweSkpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInkgcmVxdWlyZWQiKTsKICAgICAgICBpZiAocHogPT0gbnVsbCB8fCAhRnAyLmlzVmFsaWQocHopKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ6IHJlcXVpcmVkIik7CiAgICAgIH0KICAgICAgLy8gRG9lcyBub3QgdmFsaWRhdGUgaWYgdGhlIHBvaW50IGlzIG9uLWN1cnZlLgogICAgICAvLyBVc2UgZnJvbUhleCBpbnN0ZWFkLCBvciBjYWxsIGFzc2VydFZhbGlkaXR5KCkgbGF0ZXIuCiAgICAgIHN0YXRpYyBmcm9tQWZmaW5lKHApIHsKICAgICAgICBjb25zdCB7IHgsIHkgfSA9IHAgfHwge307CiAgICAgICAgaWYgKCFwIHx8ICFGcDIuaXNWYWxpZCh4KSB8fCAhRnAyLmlzVmFsaWQoeSkpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYWZmaW5lIHBvaW50Iik7CiAgICAgICAgaWYgKHAgaW5zdGFuY2VvZiBQb2ludDIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInByb2plY3RpdmUgcG9pbnQgbm90IGFsbG93ZWQiKTsKICAgICAgICBjb25zdCBpczAgPSAoaSkgPT4gRnAyLmVxbChpLCBGcDIuWkVSTyk7CiAgICAgICAgaWYgKGlzMCh4KSAmJiBpczAoeSkpCiAgICAgICAgICByZXR1cm4gUG9pbnQyLlpFUk87CiAgICAgICAgcmV0dXJuIG5ldyBQb2ludDIoeCwgeSwgRnAyLk9ORSk7CiAgICAgIH0KICAgICAgZ2V0IHgoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudG9BZmZpbmUoKS54OwogICAgICB9CiAgICAgIGdldCB5KCkgewogICAgICAgIHJldHVybiB0aGlzLnRvQWZmaW5lKCkueTsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGFrZXMgYSBidW5jaCBvZiBQcm9qZWN0aXZlIFBvaW50cyBidXQgZXhlY3V0ZXMgb25seSBvbmUKICAgICAgICogaW52ZXJzaW9uIG9uIGFsbCBvZiB0aGVtLiBJbnZlcnNpb24gaXMgdmVyeSBzbG93IG9wZXJhdGlvbiwKICAgICAgICogc28gdGhpcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBtYXNzaXZlbHkuCiAgICAgICAqIE9wdGltaXphdGlvbjogY29udmVydHMgYSBsaXN0IG9mIHByb2plY3RpdmUgcG9pbnRzIHRvIGEgbGlzdCBvZiBpZGVudGljYWwgcG9pbnRzIHdpdGggWj0xLgogICAgICAgKi8KICAgICAgc3RhdGljIG5vcm1hbGl6ZVoocG9pbnRzKSB7CiAgICAgICAgY29uc3QgdG9JbnYgPSBGcDIuaW52ZXJ0QmF0Y2gocG9pbnRzLm1hcCgocCkgPT4gcC5weikpOwogICAgICAgIHJldHVybiBwb2ludHMubWFwKChwLCBpKSA9PiBwLnRvQWZmaW5lKHRvSW52W2ldKSkubWFwKFBvaW50Mi5mcm9tQWZmaW5lKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ29udmVydHMgaGFzaCBzdHJpbmcgb3IgVWludDhBcnJheSB0byBQb2ludC4KICAgICAgICogQHBhcmFtIGhleCBzaG9ydC9sb25nIEVDRFNBIGhleAogICAgICAgKi8KICAgICAgc3RhdGljIGZyb21IZXgoaGV4KSB7CiAgICAgICAgY29uc3QgUCA9IFBvaW50Mi5mcm9tQWZmaW5lKGZyb21CeXRlczIoZW5zdXJlQnl0ZXMoInBvaW50SGV4IiwgaGV4KSkpOwogICAgICAgIFAuYXNzZXJ0VmFsaWRpdHkoKTsKICAgICAgICByZXR1cm4gUDsKICAgICAgfQogICAgICAvLyBNdWx0aXBsaWVzIGdlbmVyYXRvciBwb2ludCBieSBwcml2YXRlS2V5LgogICAgICBzdGF0aWMgZnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleSkgewogICAgICAgIHJldHVybiBQb2ludDIuQkFTRS5tdWx0aXBseShub3JtUHJpdmF0ZUtleVRvU2NhbGFyKHByaXZhdGVLZXkpKTsKICAgICAgfQogICAgICAvLyAiUHJpdmF0ZSBtZXRob2QiLCBkb24ndCB1c2UgaXQgZGlyZWN0bHkKICAgICAgX3NldFdpbmRvd1NpemUod2luZG93U2l6ZSkgewogICAgICAgIHRoaXMuX1dJTkRPV19TSVpFID0gd2luZG93U2l6ZTsKICAgICAgICBwb2ludFByZWNvbXB1dGVzLmRlbGV0ZSh0aGlzKTsKICAgICAgfQogICAgICAvLyBBIHBvaW50IG9uIGN1cnZlIGlzIHZhbGlkIGlmIGl0IGNvbmZvcm1zIHRvIGVxdWF0aW9uLgogICAgICBhc3NlcnRWYWxpZGl0eSgpIHsKICAgICAgICBpZiAodGhpcy5pczAoKSkgewogICAgICAgICAgaWYgKENVUlZFLmFsbG93SW5maW5pdHlQb2ludCAmJiAhRnAyLmlzMCh0aGlzLnB5KSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IFpFUk8iKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLnRvQWZmaW5lKCk7CiAgICAgICAgaWYgKCFGcDIuaXNWYWxpZCh4KSB8fCAhRnAyLmlzVmFsaWQoeSkpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBwb2ludDogeCBvciB5IG5vdCBGRSIpOwogICAgICAgIGNvbnN0IGxlZnQgPSBGcDIuc3FyKHkpOwogICAgICAgIGNvbnN0IHJpZ2h0ID0gd2VpZXJzdHJhc3NFcXVhdGlvbih4KTsKICAgICAgICBpZiAoIUZwMi5lcWwobGVmdCwgcmlnaHQpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IGVxdWF0aW9uIGxlZnQgIT0gcmlnaHQiKTsKICAgICAgICBpZiAoIXRoaXMuaXNUb3JzaW9uRnJlZSgpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9pbnQ6IG5vdCBpbiBwcmltZS1vcmRlciBzdWJncm91cCIpOwogICAgICB9CiAgICAgIGhhc0V2ZW5ZKCkgewogICAgICAgIGNvbnN0IHsgeSB9ID0gdGhpcy50b0FmZmluZSgpOwogICAgICAgIGlmIChGcDIuaXNPZGQpCiAgICAgICAgICByZXR1cm4gIUZwMi5pc09kZCh5KTsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkZpZWxkIGRvZXNuJ3Qgc3VwcG9ydCBpc09kZCIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDb21wYXJlIG9uZSBwb2ludCB0byBhbm90aGVyLgogICAgICAgKi8KICAgICAgZXF1YWxzKG90aGVyKSB7CiAgICAgICAgYXNzZXJ0UHJqUG9pbnQob3RoZXIpOwogICAgICAgIGNvbnN0IHsgcHg6IFgxLCBweTogWTEsIHB6OiBaMSB9ID0gdGhpczsKICAgICAgICBjb25zdCB7IHB4OiBYMiwgcHk6IFkyLCBwejogWjIgfSA9IG90aGVyOwogICAgICAgIGNvbnN0IFUxID0gRnAyLmVxbChGcDIubXVsKFgxLCBaMiksIEZwMi5tdWwoWDIsIFoxKSk7CiAgICAgICAgY29uc3QgVTIgPSBGcDIuZXFsKEZwMi5tdWwoWTEsIFoyKSwgRnAyLm11bChZMiwgWjEpKTsKICAgICAgICByZXR1cm4gVTEgJiYgVTI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZsaXBzIHBvaW50IHRvIG9uZSBjb3JyZXNwb25kaW5nIHRvICh4LCAteSkgaW4gQWZmaW5lIGNvb3JkaW5hdGVzLgogICAgICAgKi8KICAgICAgbmVnYXRlKCkgewogICAgICAgIHJldHVybiBuZXcgUG9pbnQyKHRoaXMucHgsIEZwMi5uZWcodGhpcy5weSksIHRoaXMucHopOwogICAgICB9CiAgICAgIC8vIFJlbmVzLUNvc3RlbGxvLUJhdGluYSBleGNlcHRpb24tZnJlZSBkb3VibGluZyBmb3JtdWxhLgogICAgICAvLyBUaGVyZSBpcyAzMCUgZmFzdGVyIEphY29iaWFuIGZvcm11bGEsIGJ1dCBpdCBpcyBub3QgY29tcGxldGUuCiAgICAgIC8vIGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMTUvMTA2MCwgYWxnb3JpdGhtIDMKICAgICAgLy8gQ29zdDogOE0gKyAzUyArIDMqYSArIDIqYjMgKyAxNWFkZC4KICAgICAgZG91YmxlKCkgewogICAgICAgIGNvbnN0IHsgYSwgYiB9ID0gQ1VSVkU7CiAgICAgICAgY29uc3QgYjMyID0gRnAyLm11bChiLCBfM24yKTsKICAgICAgICBjb25zdCB7IHB4OiBYMSwgcHk6IFkxLCBwejogWjEgfSA9IHRoaXM7CiAgICAgICAgbGV0IFgzID0gRnAyLlpFUk8sIFkzID0gRnAyLlpFUk8sIFozID0gRnAyLlpFUk87CiAgICAgICAgbGV0IHQwID0gRnAyLm11bChYMSwgWDEpOwogICAgICAgIGxldCB0MSA9IEZwMi5tdWwoWTEsIFkxKTsKICAgICAgICBsZXQgdDIgPSBGcDIubXVsKFoxLCBaMSk7CiAgICAgICAgbGV0IHQzID0gRnAyLm11bChYMSwgWTEpOwogICAgICAgIHQzID0gRnAyLmFkZCh0MywgdDMpOwogICAgICAgIFozID0gRnAyLm11bChYMSwgWjEpOwogICAgICAgIFozID0gRnAyLmFkZChaMywgWjMpOwogICAgICAgIFgzID0gRnAyLm11bChhLCBaMyk7CiAgICAgICAgWTMgPSBGcDIubXVsKGIzMiwgdDIpOwogICAgICAgIFkzID0gRnAyLmFkZChYMywgWTMpOwogICAgICAgIFgzID0gRnAyLnN1Yih0MSwgWTMpOwogICAgICAgIFkzID0gRnAyLmFkZCh0MSwgWTMpOwogICAgICAgIFkzID0gRnAyLm11bChYMywgWTMpOwogICAgICAgIFgzID0gRnAyLm11bCh0MywgWDMpOwogICAgICAgIFozID0gRnAyLm11bChiMzIsIFozKTsKICAgICAgICB0MiA9IEZwMi5tdWwoYSwgdDIpOwogICAgICAgIHQzID0gRnAyLnN1Yih0MCwgdDIpOwogICAgICAgIHQzID0gRnAyLm11bChhLCB0Myk7CiAgICAgICAgdDMgPSBGcDIuYWRkKHQzLCBaMyk7CiAgICAgICAgWjMgPSBGcDIuYWRkKHQwLCB0MCk7CiAgICAgICAgdDAgPSBGcDIuYWRkKFozLCB0MCk7CiAgICAgICAgdDAgPSBGcDIuYWRkKHQwLCB0Mik7CiAgICAgICAgdDAgPSBGcDIubXVsKHQwLCB0Myk7CiAgICAgICAgWTMgPSBGcDIuYWRkKFkzLCB0MCk7CiAgICAgICAgdDIgPSBGcDIubXVsKFkxLCBaMSk7CiAgICAgICAgdDIgPSBGcDIuYWRkKHQyLCB0Mik7CiAgICAgICAgdDAgPSBGcDIubXVsKHQyLCB0Myk7CiAgICAgICAgWDMgPSBGcDIuc3ViKFgzLCB0MCk7CiAgICAgICAgWjMgPSBGcDIubXVsKHQyLCB0MSk7CiAgICAgICAgWjMgPSBGcDIuYWRkKFozLCBaMyk7CiAgICAgICAgWjMgPSBGcDIuYWRkKFozLCBaMyk7CiAgICAgICAgcmV0dXJuIG5ldyBQb2ludDIoWDMsIFkzLCBaMyk7CiAgICAgIH0KICAgICAgLy8gUmVuZXMtQ29zdGVsbG8tQmF0aW5hIGV4Y2VwdGlvbi1mcmVlIGFkZGl0aW9uIGZvcm11bGEuCiAgICAgIC8vIFRoZXJlIGlzIDMwJSBmYXN0ZXIgSmFjb2JpYW4gZm9ybXVsYSwgYnV0IGl0IGlzIG5vdCBjb21wbGV0ZS4KICAgICAgLy8gaHR0cHM6Ly9lcHJpbnQuaWFjci5vcmcvMjAxNS8xMDYwLCBhbGdvcml0aG0gMQogICAgICAvLyBDb3N0OiAxMk0gKyAwUyArIDMqYSArIDMqYjMgKyAyM2FkZC4KICAgICAgYWRkKG90aGVyKSB7CiAgICAgICAgYXNzZXJ0UHJqUG9pbnQob3RoZXIpOwogICAgICAgIGNvbnN0IHsgcHg6IFgxLCBweTogWTEsIHB6OiBaMSB9ID0gdGhpczsKICAgICAgICBjb25zdCB7IHB4OiBYMiwgcHk6IFkyLCBwejogWjIgfSA9IG90aGVyOwogICAgICAgIGxldCBYMyA9IEZwMi5aRVJPLCBZMyA9IEZwMi5aRVJPLCBaMyA9IEZwMi5aRVJPOwogICAgICAgIGNvbnN0IGEgPSBDVVJWRS5hOwogICAgICAgIGNvbnN0IGIzMiA9IEZwMi5tdWwoQ1VSVkUuYiwgXzNuMik7CiAgICAgICAgbGV0IHQwID0gRnAyLm11bChYMSwgWDIpOwogICAgICAgIGxldCB0MSA9IEZwMi5tdWwoWTEsIFkyKTsKICAgICAgICBsZXQgdDIgPSBGcDIubXVsKFoxLCBaMik7CiAgICAgICAgbGV0IHQzID0gRnAyLmFkZChYMSwgWTEpOwogICAgICAgIGxldCB0NCA9IEZwMi5hZGQoWDIsIFkyKTsKICAgICAgICB0MyA9IEZwMi5tdWwodDMsIHQ0KTsKICAgICAgICB0NCA9IEZwMi5hZGQodDAsIHQxKTsKICAgICAgICB0MyA9IEZwMi5zdWIodDMsIHQ0KTsKICAgICAgICB0NCA9IEZwMi5hZGQoWDEsIFoxKTsKICAgICAgICBsZXQgdDUgPSBGcDIuYWRkKFgyLCBaMik7CiAgICAgICAgdDQgPSBGcDIubXVsKHQ0LCB0NSk7CiAgICAgICAgdDUgPSBGcDIuYWRkKHQwLCB0Mik7CiAgICAgICAgdDQgPSBGcDIuc3ViKHQ0LCB0NSk7CiAgICAgICAgdDUgPSBGcDIuYWRkKFkxLCBaMSk7CiAgICAgICAgWDMgPSBGcDIuYWRkKFkyLCBaMik7CiAgICAgICAgdDUgPSBGcDIubXVsKHQ1LCBYMyk7CiAgICAgICAgWDMgPSBGcDIuYWRkKHQxLCB0Mik7CiAgICAgICAgdDUgPSBGcDIuc3ViKHQ1LCBYMyk7CiAgICAgICAgWjMgPSBGcDIubXVsKGEsIHQ0KTsKICAgICAgICBYMyA9IEZwMi5tdWwoYjMyLCB0Mik7CiAgICAgICAgWjMgPSBGcDIuYWRkKFgzLCBaMyk7CiAgICAgICAgWDMgPSBGcDIuc3ViKHQxLCBaMyk7CiAgICAgICAgWjMgPSBGcDIuYWRkKHQxLCBaMyk7CiAgICAgICAgWTMgPSBGcDIubXVsKFgzLCBaMyk7CiAgICAgICAgdDEgPSBGcDIuYWRkKHQwLCB0MCk7CiAgICAgICAgdDEgPSBGcDIuYWRkKHQxLCB0MCk7CiAgICAgICAgdDIgPSBGcDIubXVsKGEsIHQyKTsKICAgICAgICB0NCA9IEZwMi5tdWwoYjMyLCB0NCk7CiAgICAgICAgdDEgPSBGcDIuYWRkKHQxLCB0Mik7CiAgICAgICAgdDIgPSBGcDIuc3ViKHQwLCB0Mik7CiAgICAgICAgdDIgPSBGcDIubXVsKGEsIHQyKTsKICAgICAgICB0NCA9IEZwMi5hZGQodDQsIHQyKTsKICAgICAgICB0MCA9IEZwMi5tdWwodDEsIHQ0KTsKICAgICAgICBZMyA9IEZwMi5hZGQoWTMsIHQwKTsKICAgICAgICB0MCA9IEZwMi5tdWwodDUsIHQ0KTsKICAgICAgICBYMyA9IEZwMi5tdWwodDMsIFgzKTsKICAgICAgICBYMyA9IEZwMi5zdWIoWDMsIHQwKTsKICAgICAgICB0MCA9IEZwMi5tdWwodDMsIHQxKTsKICAgICAgICBaMyA9IEZwMi5tdWwodDUsIFozKTsKICAgICAgICBaMyA9IEZwMi5hZGQoWjMsIHQwKTsKICAgICAgICByZXR1cm4gbmV3IFBvaW50MihYMywgWTMsIFozKTsKICAgICAgfQogICAgICBzdWJ0cmFjdChvdGhlcikgewogICAgICAgIHJldHVybiB0aGlzLmFkZChvdGhlci5uZWdhdGUoKSk7CiAgICAgIH0KICAgICAgaXMwKCkgewogICAgICAgIHJldHVybiB0aGlzLmVxdWFscyhQb2ludDIuWkVSTyk7CiAgICAgIH0KICAgICAgd05BRihuKSB7CiAgICAgICAgcmV0dXJuIHduYWYud05BRkNhY2hlZCh0aGlzLCBwb2ludFByZWNvbXB1dGVzLCBuLCAoY29tcCkgPT4gewogICAgICAgICAgY29uc3QgdG9JbnYgPSBGcDIuaW52ZXJ0QmF0Y2goY29tcC5tYXAoKHApID0+IHAucHopKTsKICAgICAgICAgIHJldHVybiBjb21wLm1hcCgocCwgaSkgPT4gcC50b0FmZmluZSh0b0ludltpXSkpLm1hcChQb2ludDIuZnJvbUFmZmluZSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIE5vbi1jb25zdGFudC10aW1lIG11bHRpcGxpY2F0aW9uLiBVc2VzIGRvdWJsZS1hbmQtYWRkIGFsZ29yaXRobS4KICAgICAgICogSXQncyBmYXN0ZXIsIGJ1dCBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4geW91IGRvbid0IGNhcmUgYWJvdXQKICAgICAgICogYW4gZXhwb3NlZCBwcml2YXRlIGtleSBlLmcuIHNpZyB2ZXJpZmljYXRpb24sIHdoaWNoIHdvcmtzIG92ZXIgKnB1YmxpYyoga2V5cy4KICAgICAgICovCiAgICAgIG11bHRpcGx5VW5zYWZlKG4pIHsKICAgICAgICBjb25zdCBJID0gUG9pbnQyLlpFUk87CiAgICAgICAgaWYgKG4gPT09IF8wbjUpCiAgICAgICAgICByZXR1cm4gSTsKICAgICAgICBhc3NlcnRHRShuKTsKICAgICAgICBpZiAobiA9PT0gXzFuNSkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIGNvbnN0IHsgZW5kbyB9ID0gQ1VSVkU7CiAgICAgICAgaWYgKCFlbmRvKQogICAgICAgICAgcmV0dXJuIHduYWYudW5zYWZlTGFkZGVyKHRoaXMsIG4pOwogICAgICAgIGxldCB7IGsxbmVnLCBrMSwgazJuZWcsIGsyIH0gPSBlbmRvLnNwbGl0U2NhbGFyKG4pOwogICAgICAgIGxldCBrMXAgPSBJOwogICAgICAgIGxldCBrMnAgPSBJOwogICAgICAgIGxldCBkID0gdGhpczsKICAgICAgICB3aGlsZSAoazEgPiBfMG41IHx8IGsyID4gXzBuNSkgewogICAgICAgICAgaWYgKGsxICYgXzFuNSkKICAgICAgICAgICAgazFwID0gazFwLmFkZChkKTsKICAgICAgICAgIGlmIChrMiAmIF8xbjUpCiAgICAgICAgICAgIGsycCA9IGsycC5hZGQoZCk7CiAgICAgICAgICBkID0gZC5kb3VibGUoKTsKICAgICAgICAgIGsxID4+PSBfMW41OwogICAgICAgICAgazIgPj49IF8xbjU7CiAgICAgICAgfQogICAgICAgIGlmIChrMW5lZykKICAgICAgICAgIGsxcCA9IGsxcC5uZWdhdGUoKTsKICAgICAgICBpZiAoazJuZWcpCiAgICAgICAgICBrMnAgPSBrMnAubmVnYXRlKCk7CiAgICAgICAgazJwID0gbmV3IFBvaW50MihGcDIubXVsKGsycC5weCwgZW5kby5iZXRhKSwgazJwLnB5LCBrMnAucHopOwogICAgICAgIHJldHVybiBrMXAuYWRkKGsycCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENvbnN0YW50IHRpbWUgbXVsdGlwbGljYXRpb24uCiAgICAgICAqIFVzZXMgd05BRiBtZXRob2QuIFdpbmRvd2VkIG1ldGhvZCBtYXkgYmUgMTAlIGZhc3RlciwKICAgICAgICogYnV0IHRha2VzIDJ4IGxvbmdlciB0byBnZW5lcmF0ZSBhbmQgY29uc3VtZXMgMnggbWVtb3J5LgogICAgICAgKiBVc2VzIHByZWNvbXB1dGVzIHdoZW4gYXZhaWxhYmxlLgogICAgICAgKiBVc2VzIGVuZG9tb3JwaGlzbSBmb3IgS29ibGl0eiBjdXJ2ZXMuCiAgICAgICAqIEBwYXJhbSBzY2FsYXIgYnkgd2hpY2ggdGhlIHBvaW50IHdvdWxkIGJlIG11bHRpcGxpZWQKICAgICAgICogQHJldHVybnMgTmV3IHBvaW50CiAgICAgICAqLwogICAgICBtdWx0aXBseShzY2FsYXIpIHsKICAgICAgICBhc3NlcnRHRShzY2FsYXIpOwogICAgICAgIGxldCBuID0gc2NhbGFyOwogICAgICAgIGxldCBwb2ludCwgZmFrZTsKICAgICAgICBjb25zdCB7IGVuZG8gfSA9IENVUlZFOwogICAgICAgIGlmIChlbmRvKSB7CiAgICAgICAgICBjb25zdCB7IGsxbmVnLCBrMSwgazJuZWcsIGsyIH0gPSBlbmRvLnNwbGl0U2NhbGFyKG4pOwogICAgICAgICAgbGV0IHsgcDogazFwLCBmOiBmMXAgfSA9IHRoaXMud05BRihrMSk7CiAgICAgICAgICBsZXQgeyBwOiBrMnAsIGY6IGYycCB9ID0gdGhpcy53TkFGKGsyKTsKICAgICAgICAgIGsxcCA9IHduYWYuY29uc3RUaW1lTmVnYXRlKGsxbmVnLCBrMXApOwogICAgICAgICAgazJwID0gd25hZi5jb25zdFRpbWVOZWdhdGUoazJuZWcsIGsycCk7CiAgICAgICAgICBrMnAgPSBuZXcgUG9pbnQyKEZwMi5tdWwoazJwLnB4LCBlbmRvLmJldGEpLCBrMnAucHksIGsycC5weik7CiAgICAgICAgICBwb2ludCA9IGsxcC5hZGQoazJwKTsKICAgICAgICAgIGZha2UgPSBmMXAuYWRkKGYycCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHsgcCwgZjogZjIgfSA9IHRoaXMud05BRihuKTsKICAgICAgICAgIHBvaW50ID0gcDsKICAgICAgICAgIGZha2UgPSBmMjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBvaW50Mi5ub3JtYWxpemVaKFtwb2ludCwgZmFrZV0pWzBdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBFZmZpY2llbnRseSBjYWxjdWxhdGUgYGFQICsgYlFgLiBVbnNhZmUsIGNhbiBleHBvc2UgcHJpdmF0ZSBrZXksIGlmIHVzZWQgaW5jb3JyZWN0bHkuCiAgICAgICAqIE5vdCB1c2luZyBTdHJhdXNzLVNoYW1pciB0cmljazogcHJlY29tcHV0YXRpb24gdGFibGVzIGFyZSBmYXN0ZXIuCiAgICAgICAqIFRoZSB0cmljayBjb3VsZCBiZSB1c2VmdWwgaWYgYm90aCBQIGFuZCBRIGFyZSBub3QgRyAobm90IGluIG91ciBjYXNlKS4KICAgICAgICogQHJldHVybnMgbm9uLXplcm8gYWZmaW5lIHBvaW50CiAgICAgICAqLwogICAgICBtdWx0aXBseUFuZEFkZFVuc2FmZShRLCBhLCBiKSB7CiAgICAgICAgY29uc3QgRyA9IFBvaW50Mi5CQVNFOwogICAgICAgIGNvbnN0IG11bCA9IChQLCBhMikgPT4gYTIgPT09IF8wbjUgfHwgYTIgPT09IF8xbjUgfHwgIVAuZXF1YWxzKEcpID8gUC5tdWx0aXBseVVuc2FmZShhMikgOiBQLm11bHRpcGx5KGEyKTsKICAgICAgICBjb25zdCBzdW0gPSBtdWwodGhpcywgYSkuYWRkKG11bChRLCBiKSk7CiAgICAgICAgcmV0dXJuIHN1bS5pczAoKSA/IHZvaWQgMCA6IHN1bTsKICAgICAgfQogICAgICAvLyBDb252ZXJ0cyBQcm9qZWN0aXZlIHBvaW50IHRvIGFmZmluZSAoeCwgeSkgY29vcmRpbmF0ZXMuCiAgICAgIC8vIENhbiBhY2NlcHQgcHJlY29tcHV0ZWQgWl4tMSAtIGZvciBleGFtcGxlLCBmcm9tIGludmVydEJhdGNoLgogICAgICAvLyAoeCwgeSwgeikg4oiLICh4PXgveiwgeT15L3opCiAgICAgIHRvQWZmaW5lKGl6KSB7CiAgICAgICAgY29uc3QgeyBweDogeCwgcHk6IHksIHB6OiB6IH0gPSB0aGlzOwogICAgICAgIGNvbnN0IGlzMCA9IHRoaXMuaXMwKCk7CiAgICAgICAgaWYgKGl6ID09IG51bGwpCiAgICAgICAgICBpeiA9IGlzMCA/IEZwMi5PTkUgOiBGcDIuaW52KHopOwogICAgICAgIGNvbnN0IGF4ID0gRnAyLm11bCh4LCBpeik7CiAgICAgICAgY29uc3QgYXkgPSBGcDIubXVsKHksIGl6KTsKICAgICAgICBjb25zdCB6eiA9IEZwMi5tdWwoeiwgaXopOwogICAgICAgIGlmIChpczApCiAgICAgICAgICByZXR1cm4geyB4OiBGcDIuWkVSTywgeTogRnAyLlpFUk8gfTsKICAgICAgICBpZiAoIUZwMi5lcWwoenosIEZwMi5PTkUpKQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZaIHdhcyBpbnZhbGlkIik7CiAgICAgICAgcmV0dXJuIHsgeDogYXgsIHk6IGF5IH07CiAgICAgIH0KICAgICAgaXNUb3JzaW9uRnJlZSgpIHsKICAgICAgICBjb25zdCB7IGg6IGNvZmFjdG9yLCBpc1RvcnNpb25GcmVlIH0gPSBDVVJWRTsKICAgICAgICBpZiAoY29mYWN0b3IgPT09IF8xbjUpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoaXNUb3JzaW9uRnJlZSkKICAgICAgICAgIHJldHVybiBpc1RvcnNpb25GcmVlKFBvaW50MiwgdGhpcyk7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpc1RvcnNpb25GcmVlKCkgaGFzIG5vdCBiZWVuIGRlY2xhcmVkIGZvciB0aGUgZWxsaXB0aWMgY3VydmUiKTsKICAgICAgfQogICAgICBjbGVhckNvZmFjdG9yKCkgewogICAgICAgIGNvbnN0IHsgaDogY29mYWN0b3IsIGNsZWFyQ29mYWN0b3IgfSA9IENVUlZFOwogICAgICAgIGlmIChjb2ZhY3RvciA9PT0gXzFuNSkKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIGlmIChjbGVhckNvZmFjdG9yKQogICAgICAgICAgcmV0dXJuIGNsZWFyQ29mYWN0b3IoUG9pbnQyLCB0aGlzKTsKICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBseVVuc2FmZShDVVJWRS5oKTsKICAgICAgfQogICAgICB0b1Jhd0J5dGVzKGlzQ29tcHJlc3NlZCA9IHRydWUpIHsKICAgICAgICB0aGlzLmFzc2VydFZhbGlkaXR5KCk7CiAgICAgICAgcmV0dXJuIHRvQnl0ZXMzKFBvaW50MiwgdGhpcywgaXNDb21wcmVzc2VkKTsKICAgICAgfQogICAgICB0b0hleChpc0NvbXByZXNzZWQgPSB0cnVlKSB7CiAgICAgICAgcmV0dXJuIGJ5dGVzVG9IZXgyKHRoaXMudG9SYXdCeXRlcyhpc0NvbXByZXNzZWQpKTsKICAgICAgfQogICAgfQogICAgUG9pbnQyLkJBU0UgPSBuZXcgUG9pbnQyKENVUlZFLkd4LCBDVVJWRS5HeSwgRnAyLk9ORSk7CiAgICBQb2ludDIuWkVSTyA9IG5ldyBQb2ludDIoRnAyLlpFUk8sIEZwMi5PTkUsIEZwMi5aRVJPKTsKICAgIGNvbnN0IF9iaXRzID0gQ1VSVkUubkJpdExlbmd0aDsKICAgIGNvbnN0IHduYWYgPSB3TkFGKFBvaW50MiwgQ1VSVkUuZW5kbyA/IE1hdGguY2VpbChfYml0cyAvIDIpIDogX2JpdHMpOwogICAgcmV0dXJuIHsKICAgICAgQ1VSVkUsCiAgICAgIFByb2plY3RpdmVQb2ludDogUG9pbnQyLAogICAgICBub3JtUHJpdmF0ZUtleVRvU2NhbGFyLAogICAgICB3ZWllcnN0cmFzc0VxdWF0aW9uLAogICAgICBpc1dpdGhpbkN1cnZlT3JkZXIKICAgIH07CiAgfQogIGZ1bmN0aW9uIHZhbGlkYXRlT3B0cyhjdXJ2ZSkgewogICAgY29uc3Qgb3B0cyA9IHZhbGlkYXRlQmFzaWMoY3VydmUpOwogICAgdmFsaWRhdGVPYmplY3Qob3B0cywgewogICAgICBoYXNoOiAiaGFzaCIsCiAgICAgIGhtYWM6ICJmdW5jdGlvbiIsCiAgICAgIHJhbmRvbUJ5dGVzOiAiZnVuY3Rpb24iCiAgICB9LCB7CiAgICAgIGJpdHMyaW50OiAiZnVuY3Rpb24iLAogICAgICBiaXRzMmludF9tb2ROOiAiZnVuY3Rpb24iLAogICAgICBsb3dTOiAiYm9vbGVhbiIKICAgIH0pOwogICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyBsb3dTOiB0cnVlLCAuLi5vcHRzIH0pOwogIH0KICBmdW5jdGlvbiB3ZWllcnN0cmFzcyhjdXJ2ZURlZikgewogICAgY29uc3QgQ1VSVkUgPSB2YWxpZGF0ZU9wdHMoY3VydmVEZWYpOwogICAgY29uc3QgeyBGcDogRnAyLCBuOiBDVVJWRV9PUkRFUiB9ID0gQ1VSVkU7CiAgICBjb25zdCBjb21wcmVzc2VkTGVuID0gRnAyLkJZVEVTICsgMTsKICAgIGNvbnN0IHVuY29tcHJlc3NlZExlbiA9IDIgKiBGcDIuQllURVMgKyAxOwogICAgZnVuY3Rpb24gaXNWYWxpZEZpZWxkRWxlbWVudChudW0pIHsKICAgICAgcmV0dXJuIF8wbjUgPCBudW0gJiYgbnVtIDwgRnAyLk9SREVSOwogICAgfQogICAgZnVuY3Rpb24gbW9kTjIoYSkgewogICAgICByZXR1cm4gbW9kKGEsIENVUlZFX09SREVSKTsKICAgIH0KICAgIGZ1bmN0aW9uIGludk4oYSkgewogICAgICByZXR1cm4gaW52ZXJ0KGEsIENVUlZFX09SREVSKTsKICAgIH0KICAgIGNvbnN0IHsgUHJvamVjdGl2ZVBvaW50OiBQb2ludDIsIG5vcm1Qcml2YXRlS2V5VG9TY2FsYXIsIHdlaWVyc3RyYXNzRXF1YXRpb24sIGlzV2l0aGluQ3VydmVPcmRlciB9ID0gd2VpZXJzdHJhc3NQb2ludHMoewogICAgICAuLi5DVVJWRSwKICAgICAgdG9CeXRlcyhfYywgcG9pbnQsIGlzQ29tcHJlc3NlZCkgewogICAgICAgIGNvbnN0IGEgPSBwb2ludC50b0FmZmluZSgpOwogICAgICAgIGNvbnN0IHggPSBGcDIudG9CeXRlcyhhLngpOwogICAgICAgIGNvbnN0IGNhdCA9IGNvbmNhdEJ5dGVzMzsKICAgICAgICBpZiAoaXNDb21wcmVzc2VkKSB7CiAgICAgICAgICByZXR1cm4gY2F0KFVpbnQ4QXJyYXkuZnJvbShbcG9pbnQuaGFzRXZlblkoKSA/IDIgOiAzXSksIHgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gY2F0KFVpbnQ4QXJyYXkuZnJvbShbNF0pLCB4LCBGcDIudG9CeXRlcyhhLnkpKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGZyb21CeXRlcyhieXRlczIpIHsKICAgICAgICBjb25zdCBsZW4gPSBieXRlczIubGVuZ3RoOwogICAgICAgIGNvbnN0IGhlYWQgPSBieXRlczJbMF07CiAgICAgICAgY29uc3QgdGFpbCA9IGJ5dGVzMi5zdWJhcnJheSgxKTsKICAgICAgICBpZiAobGVuID09PSBjb21wcmVzc2VkTGVuICYmIChoZWFkID09PSAyIHx8IGhlYWQgPT09IDMpKSB7CiAgICAgICAgICBjb25zdCB4ID0gYnl0ZXNUb051bWJlckJFKHRhaWwpOwogICAgICAgICAgaWYgKCFpc1ZhbGlkRmllbGRFbGVtZW50KHgpKQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlBvaW50IGlzIG5vdCBvbiBjdXJ2ZSIpOwogICAgICAgICAgY29uc3QgeTIgPSB3ZWllcnN0cmFzc0VxdWF0aW9uKHgpOwogICAgICAgICAgbGV0IHk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB5ID0gRnAyLnNxcnQoeTIpOwogICAgICAgICAgfSBjYXRjaCAoc3FydEVycm9yKSB7CiAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IHNxcnRFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gIjogIiArIHNxcnRFcnJvci5tZXNzYWdlIDogIiI7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiUG9pbnQgaXMgbm90IG9uIGN1cnZlIiArIHN1ZmZpeCk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBpc1lPZGQgPSAoeSAmIF8xbjUpID09PSBfMW41OwogICAgICAgICAgY29uc3QgaXNIZWFkT2RkID0gKGhlYWQgJiAxKSA9PT0gMTsKICAgICAgICAgIGlmIChpc0hlYWRPZGQgIT09IGlzWU9kZCkKICAgICAgICAgICAgeSA9IEZwMi5uZWcoeSk7CiAgICAgICAgICByZXR1cm4geyB4LCB5IH07CiAgICAgICAgfSBlbHNlIGlmIChsZW4gPT09IHVuY29tcHJlc3NlZExlbiAmJiBoZWFkID09PSA0KSB7CiAgICAgICAgICBjb25zdCB4ID0gRnAyLmZyb21CeXRlcyh0YWlsLnN1YmFycmF5KDAsIEZwMi5CWVRFUykpOwogICAgICAgICAgY29uc3QgeSA9IEZwMi5mcm9tQnl0ZXModGFpbC5zdWJhcnJheShGcDIuQllURVMsIDIgKiBGcDIuQllURVMpKTsKICAgICAgICAgIHJldHVybiB7IHgsIHkgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb2ludCBvZiBsZW5ndGggJHtsZW59IHdhcyBpbnZhbGlkLiBFeHBlY3RlZCAke2NvbXByZXNzZWRMZW59IGNvbXByZXNzZWQgYnl0ZXMgb3IgJHt1bmNvbXByZXNzZWRMZW59IHVuY29tcHJlc3NlZCBieXRlc2ApOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBjb25zdCBudW1Ub05CeXRlU3RyID0gKG51bSkgPT4gYnl0ZXNUb0hleDIobnVtYmVyVG9CeXRlc0JFKG51bSwgQ1VSVkUubkJ5dGVMZW5ndGgpKTsKICAgIGZ1bmN0aW9uIGlzQmlnZ2VyVGhhbkhhbGZPcmRlcihudW1iZXIyKSB7CiAgICAgIGNvbnN0IEhBTEYgPSBDVVJWRV9PUkRFUiA+PiBfMW41OwogICAgICByZXR1cm4gbnVtYmVyMiA+IEhBTEY7CiAgICB9CiAgICBmdW5jdGlvbiBub3JtYWxpemVTKHMpIHsKICAgICAgcmV0dXJuIGlzQmlnZ2VyVGhhbkhhbGZPcmRlcihzKSA/IG1vZE4yKC1zKSA6IHM7CiAgICB9CiAgICBjb25zdCBzbGNOdW0gPSAoYiwgZnJvbSwgdG8pID0+IGJ5dGVzVG9OdW1iZXJCRShiLnNsaWNlKGZyb20sIHRvKSk7CiAgICBjbGFzcyBTaWduYXR1cmUgewogICAgICBjb25zdHJ1Y3RvcihyLCBzLCByZWNvdmVyeSkgewogICAgICAgIHRoaXMuciA9IHI7CiAgICAgICAgdGhpcy5zID0gczsKICAgICAgICB0aGlzLnJlY292ZXJ5ID0gcmVjb3Zlcnk7CiAgICAgICAgdGhpcy5hc3NlcnRWYWxpZGl0eSgpOwogICAgICB9CiAgICAgIC8vIHBhaXIgKGJ5dGVzIG9mIHIsIGJ5dGVzIG9mIHMpCiAgICAgIHN0YXRpYyBmcm9tQ29tcGFjdChoZXgpIHsKICAgICAgICBjb25zdCBsID0gQ1VSVkUubkJ5dGVMZW5ndGg7CiAgICAgICAgaGV4ID0gZW5zdXJlQnl0ZXMoImNvbXBhY3RTaWduYXR1cmUiLCBoZXgsIGwgKiAyKTsKICAgICAgICByZXR1cm4gbmV3IFNpZ25hdHVyZShzbGNOdW0oaGV4LCAwLCBsKSwgc2xjTnVtKGhleCwgbCwgMiAqIGwpKTsKICAgICAgfQogICAgICAvLyBERVIgZW5jb2RlZCBFQ0RTQSBzaWduYXR1cmUKICAgICAgLy8gaHR0cHM6Ly9iaXRjb2luLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy81NzY0NC93aGF0LWFyZS10aGUtcGFydHMtb2YtYS1iaXRjb2luLXRyYW5zYWN0aW9uLWlucHV0LXNjcmlwdAogICAgICBzdGF0aWMgZnJvbURFUihoZXgpIHsKICAgICAgICBjb25zdCB7IHIsIHMgfSA9IERFUi50b1NpZyhlbnN1cmVCeXRlcygiREVSIiwgaGV4KSk7CiAgICAgICAgcmV0dXJuIG5ldyBTaWduYXR1cmUociwgcyk7CiAgICAgIH0KICAgICAgYXNzZXJ0VmFsaWRpdHkoKSB7CiAgICAgICAgaWYgKCFpc1dpdGhpbkN1cnZlT3JkZXIodGhpcy5yKSkKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiciBtdXN0IGJlIDAgPCByIDwgQ1VSVkUubiIpOwogICAgICAgIGlmICghaXNXaXRoaW5DdXJ2ZU9yZGVyKHRoaXMucykpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInMgbXVzdCBiZSAwIDwgcyA8IENVUlZFLm4iKTsKICAgICAgfQogICAgICBhZGRSZWNvdmVyeUJpdChyZWNvdmVyeSkgewogICAgICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKHRoaXMuciwgdGhpcy5zLCByZWNvdmVyeSk7CiAgICAgIH0KICAgICAgcmVjb3ZlclB1YmxpY0tleShtc2dIYXNoKSB7CiAgICAgICAgY29uc3QgeyByLCBzLCByZWNvdmVyeTogcmVjIH0gPSB0aGlzOwogICAgICAgIGNvbnN0IGggPSBiaXRzMmludF9tb2ROKGVuc3VyZUJ5dGVzKCJtc2dIYXNoIiwgbXNnSGFzaCkpOwogICAgICAgIGlmIChyZWMgPT0gbnVsbCB8fCAhWzAsIDEsIDIsIDNdLmluY2x1ZGVzKHJlYykpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInJlY292ZXJ5IGlkIGludmFsaWQiKTsKICAgICAgICBjb25zdCByYWRqID0gcmVjID09PSAyIHx8IHJlYyA9PT0gMyA/IHIgKyBDVVJWRS5uIDogcjsKICAgICAgICBpZiAocmFkaiA+PSBGcDIuT1JERVIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInJlY292ZXJ5IGlkIDIgb3IgMyBpbnZhbGlkIik7CiAgICAgICAgY29uc3QgcHJlZml4ID0gKHJlYyAmIDEpID09PSAwID8gIjAyIiA6ICIwMyI7CiAgICAgICAgY29uc3QgUiA9IFBvaW50Mi5mcm9tSGV4KHByZWZpeCArIG51bVRvTkJ5dGVTdHIocmFkaikpOwogICAgICAgIGNvbnN0IGlyID0gaW52TihyYWRqKTsKICAgICAgICBjb25zdCB1MSA9IG1vZE4yKC1oICogaXIpOwogICAgICAgIGNvbnN0IHUyID0gbW9kTjIocyAqIGlyKTsKICAgICAgICBjb25zdCBRID0gUG9pbnQyLkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoUiwgdTEsIHUyKTsKICAgICAgICBpZiAoIVEpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInBvaW50IGF0IGluZmluaWZ5Iik7CiAgICAgICAgUS5hc3NlcnRWYWxpZGl0eSgpOwogICAgICAgIHJldHVybiBROwogICAgICB9CiAgICAgIC8vIFNpZ25hdHVyZXMgc2hvdWxkIGJlIGxvdy1zLCB0byBwcmV2ZW50IG1hbGxlYWJpbGl0eS4KICAgICAgaGFzSGlnaFMoKSB7CiAgICAgICAgcmV0dXJuIGlzQmlnZ2VyVGhhbkhhbGZPcmRlcih0aGlzLnMpOwogICAgICB9CiAgICAgIG5vcm1hbGl6ZVMoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaGFzSGlnaFMoKSA/IG5ldyBTaWduYXR1cmUodGhpcy5yLCBtb2ROMigtdGhpcy5zKSwgdGhpcy5yZWNvdmVyeSkgOiB0aGlzOwogICAgICB9CiAgICAgIC8vIERFUi1lbmNvZGVkCiAgICAgIHRvREVSUmF3Qnl0ZXMoKSB7CiAgICAgICAgcmV0dXJuIGhleFRvQnl0ZXMyKHRoaXMudG9ERVJIZXgoKSk7CiAgICAgIH0KICAgICAgdG9ERVJIZXgoKSB7CiAgICAgICAgcmV0dXJuIERFUi5oZXhGcm9tU2lnKHsgcjogdGhpcy5yLCBzOiB0aGlzLnMgfSk7CiAgICAgIH0KICAgICAgLy8gcGFkZGVkIGJ5dGVzIG9mIHIsIHRoZW4gcGFkZGVkIGJ5dGVzIG9mIHMKICAgICAgdG9Db21wYWN0UmF3Qnl0ZXMoKSB7CiAgICAgICAgcmV0dXJuIGhleFRvQnl0ZXMyKHRoaXMudG9Db21wYWN0SGV4KCkpOwogICAgICB9CiAgICAgIHRvQ29tcGFjdEhleCgpIHsKICAgICAgICByZXR1cm4gbnVtVG9OQnl0ZVN0cih0aGlzLnIpICsgbnVtVG9OQnl0ZVN0cih0aGlzLnMpOwogICAgICB9CiAgICB9CiAgICBjb25zdCB1dGlscyA9IHsKICAgICAgaXNWYWxpZFByaXZhdGVLZXkocHJpdmF0ZUtleSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBub3JtUHJpdmF0ZUtleVRvU2NhbGFyKHByaXZhdGVLZXkpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG5vcm1Qcml2YXRlS2V5VG9TY2FsYXIsCiAgICAgIC8qKgogICAgICAgKiBQcm9kdWNlcyBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgcHJpdmF0ZSBrZXkgZnJvbSByYW5kb20gb2Ygc2l6ZQogICAgICAgKiAoZ3JvdXBMZW4gKyBjZWlsKGdyb3VwTGVuIC8gMikpIHdpdGggbW9kdWxvIGJpYXMgYmVpbmcgbmVnbGlnaWJsZS4KICAgICAgICovCiAgICAgIHJhbmRvbVByaXZhdGVLZXk6ICgpID0+IHsKICAgICAgICBjb25zdCBsZW5ndGggPSBnZXRNaW5IYXNoTGVuZ3RoKENVUlZFLm4pOwogICAgICAgIHJldHVybiBtYXBIYXNoVG9GaWVsZChDVVJWRS5yYW5kb21CeXRlcyhsZW5ndGgpLCBDVVJWRS5uKTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgcHJlY29tcHV0ZSB0YWJsZSBmb3IgYW4gYXJiaXRyYXJ5IEVDIHBvaW50LiBNYWtlcyBwb2ludCAiY2FjaGVkIi4KICAgICAgICogQWxsb3dzIHRvIG1hc3NpdmVseSBzcGVlZC11cCBgcG9pbnQubXVsdGlwbHkoc2NhbGFyKWAuCiAgICAgICAqIEByZXR1cm5zIGNhY2hlZCBwb2ludAogICAgICAgKiBAZXhhbXBsZQogICAgICAgKiBjb25zdCBmYXN0ID0gdXRpbHMucHJlY29tcHV0ZSg4LCBQcm9qZWN0aXZlUG9pbnQuZnJvbUhleChzb21lb25lc1B1YktleSkpOwogICAgICAgKiBmYXN0Lm11bHRpcGx5KHByaXZLZXkpOyAvLyBtdWNoIGZhc3RlciBFQ0RIIG5vdwogICAgICAgKi8KICAgICAgcHJlY29tcHV0ZSh3aW5kb3dTaXplID0gOCwgcG9pbnQgPSBQb2ludDIuQkFTRSkgewogICAgICAgIHBvaW50Ll9zZXRXaW5kb3dTaXplKHdpbmRvd1NpemUpOwogICAgICAgIHBvaW50Lm11bHRpcGx5KEJpZ0ludCgzKSk7CiAgICAgICAgcmV0dXJuIHBvaW50OwogICAgICB9CiAgICB9OwogICAgZnVuY3Rpb24gZ2V0UHVibGljS2V5KHByaXZhdGVLZXksIGlzQ29tcHJlc3NlZCA9IHRydWUpIHsKICAgICAgcmV0dXJuIFBvaW50Mi5mcm9tUHJpdmF0ZUtleShwcml2YXRlS2V5KS50b1Jhd0J5dGVzKGlzQ29tcHJlc3NlZCk7CiAgICB9CiAgICBmdW5jdGlvbiBpc1Byb2JQdWIoaXRlbSkgewogICAgICBjb25zdCBhcnIgPSBpc0J5dGVzMihpdGVtKTsKICAgICAgY29uc3Qgc3RyID0gdHlwZW9mIGl0ZW0gPT09ICJzdHJpbmciOwogICAgICBjb25zdCBsZW4gPSAoYXJyIHx8IHN0cikgJiYgaXRlbS5sZW5ndGg7CiAgICAgIGlmIChhcnIpCiAgICAgICAgcmV0dXJuIGxlbiA9PT0gY29tcHJlc3NlZExlbiB8fCBsZW4gPT09IHVuY29tcHJlc3NlZExlbjsKICAgICAgaWYgKHN0cikKICAgICAgICByZXR1cm4gbGVuID09PSAyICogY29tcHJlc3NlZExlbiB8fCBsZW4gPT09IDIgKiB1bmNvbXByZXNzZWRMZW47CiAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUG9pbnQyKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRTaGFyZWRTZWNyZXQocHJpdmF0ZUEsIHB1YmxpY0IsIGlzQ29tcHJlc3NlZCA9IHRydWUpIHsKICAgICAgaWYgKGlzUHJvYlB1Yihwcml2YXRlQSkpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJmaXJzdCBhcmcgbXVzdCBiZSBwcml2YXRlIGtleSIpOwogICAgICBpZiAoIWlzUHJvYlB1YihwdWJsaWNCKSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInNlY29uZCBhcmcgbXVzdCBiZSBwdWJsaWMga2V5Iik7CiAgICAgIGNvbnN0IGIgPSBQb2ludDIuZnJvbUhleChwdWJsaWNCKTsKICAgICAgcmV0dXJuIGIubXVsdGlwbHkobm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2YXRlQSkpLnRvUmF3Qnl0ZXMoaXNDb21wcmVzc2VkKTsKICAgIH0KICAgIGNvbnN0IGJpdHMyaW50ID0gQ1VSVkUuYml0czJpbnQgfHwgZnVuY3Rpb24oYnl0ZXMyKSB7CiAgICAgIGNvbnN0IG51bSA9IGJ5dGVzVG9OdW1iZXJCRShieXRlczIpOwogICAgICBjb25zdCBkZWx0YSA9IGJ5dGVzMi5sZW5ndGggKiA4IC0gQ1VSVkUubkJpdExlbmd0aDsKICAgICAgcmV0dXJuIGRlbHRhID4gMCA/IG51bSA+PiBCaWdJbnQoZGVsdGEpIDogbnVtOwogICAgfTsKICAgIGNvbnN0IGJpdHMyaW50X21vZE4gPSBDVVJWRS5iaXRzMmludF9tb2ROIHx8IGZ1bmN0aW9uKGJ5dGVzMikgewogICAgICByZXR1cm4gbW9kTjIoYml0czJpbnQoYnl0ZXMyKSk7CiAgICB9OwogICAgY29uc3QgT1JERVJfTUFTSyA9IGJpdE1hc2soQ1VSVkUubkJpdExlbmd0aCk7CiAgICBmdW5jdGlvbiBpbnQyb2N0ZXRzKG51bSkgewogICAgICBpZiAodHlwZW9mIG51bSAhPT0gImJpZ2ludCIpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiaWdpbnQgZXhwZWN0ZWQiKTsKICAgICAgaWYgKCEoXzBuNSA8PSBudW0gJiYgbnVtIDwgT1JERVJfTUFTSykpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiaWdpbnQgZXhwZWN0ZWQgPCAyXiR7Q1VSVkUubkJpdExlbmd0aH1gKTsKICAgICAgcmV0dXJuIG51bWJlclRvQnl0ZXNCRShudW0sIENVUlZFLm5CeXRlTGVuZ3RoKTsKICAgIH0KICAgIGZ1bmN0aW9uIHByZXBTaWcobXNnSGFzaCwgcHJpdmF0ZUtleSwgb3B0cyA9IGRlZmF1bHRTaWdPcHRzKSB7CiAgICAgIGlmIChbInJlY292ZXJlZCIsICJjYW5vbmljYWwiXS5zb21lKChrKSA9PiBrIGluIG9wdHMpKQogICAgICAgIHRocm93IG5ldyBFcnJvcigic2lnbigpIGxlZ2FjeSBvcHRpb25zIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgY29uc3QgeyBoYXNoOiBoYXNoMywgcmFuZG9tQnl0ZXM6IHJhbmRvbUJ5dGVzMiB9ID0gQ1VSVkU7CiAgICAgIGxldCB7IGxvd1MsIHByZWhhc2gsIGV4dHJhRW50cm9weTogZW50IH0gPSBvcHRzOwogICAgICBpZiAobG93UyA9PSBudWxsKQogICAgICAgIGxvd1MgPSB0cnVlOwogICAgICBtc2dIYXNoID0gZW5zdXJlQnl0ZXMoIm1zZ0hhc2giLCBtc2dIYXNoKTsKICAgICAgaWYgKHByZWhhc2gpCiAgICAgICAgbXNnSGFzaCA9IGVuc3VyZUJ5dGVzKCJwcmVoYXNoZWQgbXNnSGFzaCIsIGhhc2gzKG1zZ0hhc2gpKTsKICAgICAgY29uc3QgaDFpbnQgPSBiaXRzMmludF9tb2ROKG1zZ0hhc2gpOwogICAgICBjb25zdCBkID0gbm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2YXRlS2V5KTsKICAgICAgY29uc3Qgc2VlZEFyZ3MgPSBbaW50Mm9jdGV0cyhkKSwgaW50Mm9jdGV0cyhoMWludCldOwogICAgICBpZiAoZW50ICE9IG51bGwgJiYgZW50ICE9PSBmYWxzZSkgewogICAgICAgIGNvbnN0IGUgPSBlbnQgPT09IHRydWUgPyByYW5kb21CeXRlczIoRnAyLkJZVEVTKSA6IGVudDsKICAgICAgICBzZWVkQXJncy5wdXNoKGVuc3VyZUJ5dGVzKCJleHRyYUVudHJvcHkiLCBlKSk7CiAgICAgIH0KICAgICAgY29uc3Qgc2VlZCA9IGNvbmNhdEJ5dGVzMyguLi5zZWVkQXJncyk7CiAgICAgIGNvbnN0IG0gPSBoMWludDsKICAgICAgZnVuY3Rpb24gazJzaWcoa0J5dGVzKSB7CiAgICAgICAgY29uc3QgayA9IGJpdHMyaW50KGtCeXRlcyk7CiAgICAgICAgaWYgKCFpc1dpdGhpbkN1cnZlT3JkZXIoaykpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgaWsgPSBpbnZOKGspOwogICAgICAgIGNvbnN0IHEgPSBQb2ludDIuQkFTRS5tdWx0aXBseShrKS50b0FmZmluZSgpOwogICAgICAgIGNvbnN0IHIgPSBtb2ROMihxLngpOwogICAgICAgIGlmIChyID09PSBfMG41KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IHMgPSBtb2ROMihpayAqIG1vZE4yKG0gKyByICogZCkpOwogICAgICAgIGlmIChzID09PSBfMG41KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGxldCByZWNvdmVyeSA9IChxLnggPT09IHIgPyAwIDogMikgfCBOdW1iZXIocS55ICYgXzFuNSk7CiAgICAgICAgbGV0IG5vcm1TID0gczsKICAgICAgICBpZiAobG93UyAmJiBpc0JpZ2dlclRoYW5IYWxmT3JkZXIocykpIHsKICAgICAgICAgIG5vcm1TID0gbm9ybWFsaXplUyhzKTsKICAgICAgICAgIHJlY292ZXJ5IF49IDE7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKHIsIG5vcm1TLCByZWNvdmVyeSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgc2VlZCwgazJzaWcgfTsKICAgIH0KICAgIGNvbnN0IGRlZmF1bHRTaWdPcHRzID0geyBsb3dTOiBDVVJWRS5sb3dTLCBwcmVoYXNoOiBmYWxzZSB9OwogICAgY29uc3QgZGVmYXVsdFZlck9wdHMgPSB7IGxvd1M6IENVUlZFLmxvd1MsIHByZWhhc2g6IGZhbHNlIH07CiAgICBmdW5jdGlvbiBzaWduMihtc2dIYXNoLCBwcml2S2V5LCBvcHRzID0gZGVmYXVsdFNpZ09wdHMpIHsKICAgICAgY29uc3QgeyBzZWVkLCBrMnNpZyB9ID0gcHJlcFNpZyhtc2dIYXNoLCBwcml2S2V5LCBvcHRzKTsKICAgICAgY29uc3QgQyA9IENVUlZFOwogICAgICBjb25zdCBkcmJnID0gY3JlYXRlSG1hY0RyYmcoQy5oYXNoLm91dHB1dExlbiwgQy5uQnl0ZUxlbmd0aCwgQy5obWFjKTsKICAgICAgcmV0dXJuIGRyYmcoc2VlZCwgazJzaWcpOwogICAgfQogICAgUG9pbnQyLkJBU0UuX3NldFdpbmRvd1NpemUoOCk7CiAgICBmdW5jdGlvbiB2ZXJpZnkoc2lnbmF0dXJlLCBtc2dIYXNoLCBwdWJsaWNLZXksIG9wdHMgPSBkZWZhdWx0VmVyT3B0cykgewogICAgICBjb25zdCBzZyA9IHNpZ25hdHVyZTsKICAgICAgbXNnSGFzaCA9IGVuc3VyZUJ5dGVzKCJtc2dIYXNoIiwgbXNnSGFzaCk7CiAgICAgIHB1YmxpY0tleSA9IGVuc3VyZUJ5dGVzKCJwdWJsaWNLZXkiLCBwdWJsaWNLZXkpOwogICAgICBpZiAoInN0cmljdCIgaW4gb3B0cykKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm9wdGlvbnMuc3RyaWN0IHdhcyByZW5hbWVkIHRvIGxvd1MiKTsKICAgICAgY29uc3QgeyBsb3dTLCBwcmVoYXNoIH0gPSBvcHRzOwogICAgICBsZXQgX3NpZyA9IHZvaWQgMDsKICAgICAgbGV0IFA7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKHR5cGVvZiBzZyA9PT0gInN0cmluZyIgfHwgaXNCeXRlczIoc2cpKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBfc2lnID0gU2lnbmF0dXJlLmZyb21ERVIoc2cpOwogICAgICAgICAgfSBjYXRjaCAoZGVyRXJyb3IpIHsKICAgICAgICAgICAgaWYgKCEoZGVyRXJyb3IgaW5zdGFuY2VvZiBERVIuRXJyKSkKICAgICAgICAgICAgICB0aHJvdyBkZXJFcnJvcjsKICAgICAgICAgICAgX3NpZyA9IFNpZ25hdHVyZS5mcm9tQ29tcGFjdChzZyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2cgPT09ICJvYmplY3QiICYmIHR5cGVvZiBzZy5yID09PSAiYmlnaW50IiAmJiB0eXBlb2Ygc2cucyA9PT0gImJpZ2ludCIpIHsKICAgICAgICAgIGNvbnN0IHsgcjogcjIsIHM6IHMyIH0gPSBzZzsKICAgICAgICAgIF9zaWcgPSBuZXcgU2lnbmF0dXJlKHIyLCBzMik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiUEFSU0UiKTsKICAgICAgICB9CiAgICAgICAgUCA9IFBvaW50Mi5mcm9tSGV4KHB1YmxpY0tleSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgPT09ICJQQVJTRSIpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNpZ25hdHVyZSBtdXN0IGJlIFNpZ25hdHVyZSBpbnN0YW5jZSwgVWludDhBcnJheSBvciBoZXggc3RyaW5nYCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChsb3dTICYmIF9zaWcuaGFzSGlnaFMoKSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChwcmVoYXNoKQogICAgICAgIG1zZ0hhc2ggPSBDVVJWRS5oYXNoKG1zZ0hhc2gpOwogICAgICBjb25zdCB7IHIsIHMgfSA9IF9zaWc7CiAgICAgIGNvbnN0IGggPSBiaXRzMmludF9tb2ROKG1zZ0hhc2gpOwogICAgICBjb25zdCBpcyA9IGludk4ocyk7CiAgICAgIGNvbnN0IHUxID0gbW9kTjIoaCAqIGlzKTsKICAgICAgY29uc3QgdTIgPSBtb2ROMihyICogaXMpOwogICAgICBjb25zdCBSID0gUG9pbnQyLkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoUCwgdTEsIHUyKT8udG9BZmZpbmUoKTsKICAgICAgaWYgKCFSKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgY29uc3QgdiA9IG1vZE4yKFIueCk7CiAgICAgIHJldHVybiB2ID09PSByOwogICAgfQogICAgcmV0dXJuIHsKICAgICAgQ1VSVkUsCiAgICAgIGdldFB1YmxpY0tleSwKICAgICAgZ2V0U2hhcmVkU2VjcmV0LAogICAgICBzaWduOiBzaWduMiwKICAgICAgdmVyaWZ5LAogICAgICBQcm9qZWN0aXZlUG9pbnQ6IFBvaW50MiwKICAgICAgU2lnbmF0dXJlLAogICAgICB1dGlscwogICAgfTsKICB9CiAgZnVuY3Rpb24gU1dVRnBTcXJ0UmF0aW8oRnAyLCBaKSB7CiAgICBjb25zdCBxID0gRnAyLk9SREVSOwogICAgbGV0IGwgPSBfMG41OwogICAgZm9yIChsZXQgbyA9IHEgLSBfMW41OyBvICUgXzJuNCA9PT0gXzBuNTsgbyAvPSBfMm40KQogICAgICBsICs9IF8xbjU7CiAgICBjb25zdCBjMSA9IGw7CiAgICBjb25zdCBfMm5fcG93X2MxXzEgPSBfMm40IDw8IGMxIC0gXzFuNSAtIF8xbjU7CiAgICBjb25zdCBfMm5fcG93X2MxID0gXzJuX3Bvd19jMV8xICogXzJuNDsKICAgIGNvbnN0IGMyID0gKHEgLSBfMW41KSAvIF8ybl9wb3dfYzE7CiAgICBjb25zdCBjMyA9IChjMiAtIF8xbjUpIC8gXzJuNDsKICAgIGNvbnN0IGM0ID0gXzJuX3Bvd19jMSAtIF8xbjU7CiAgICBjb25zdCBjNSA9IF8ybl9wb3dfYzFfMTsKICAgIGNvbnN0IGM2ID0gRnAyLnBvdyhaLCBjMik7CiAgICBjb25zdCBjNyA9IEZwMi5wb3coWiwgKGMyICsgXzFuNSkgLyBfMm40KTsKICAgIGxldCBzcXJ0UmF0aW8gPSAodSwgdikgPT4gewogICAgICBsZXQgdHYxID0gYzY7CiAgICAgIGxldCB0djIgPSBGcDIucG93KHYsIGM0KTsKICAgICAgbGV0IHR2MyA9IEZwMi5zcXIodHYyKTsKICAgICAgdHYzID0gRnAyLm11bCh0djMsIHYpOwogICAgICBsZXQgdHY1ID0gRnAyLm11bCh1LCB0djMpOwogICAgICB0djUgPSBGcDIucG93KHR2NSwgYzMpOwogICAgICB0djUgPSBGcDIubXVsKHR2NSwgdHYyKTsKICAgICAgdHYyID0gRnAyLm11bCh0djUsIHYpOwogICAgICB0djMgPSBGcDIubXVsKHR2NSwgdSk7CiAgICAgIGxldCB0djQgPSBGcDIubXVsKHR2MywgdHYyKTsKICAgICAgdHY1ID0gRnAyLnBvdyh0djQsIGM1KTsKICAgICAgbGV0IGlzUVIgPSBGcDIuZXFsKHR2NSwgRnAyLk9ORSk7CiAgICAgIHR2MiA9IEZwMi5tdWwodHYzLCBjNyk7CiAgICAgIHR2NSA9IEZwMi5tdWwodHY0LCB0djEpOwogICAgICB0djMgPSBGcDIuY21vdih0djIsIHR2MywgaXNRUik7CiAgICAgIHR2NCA9IEZwMi5jbW92KHR2NSwgdHY0LCBpc1FSKTsKICAgICAgZm9yIChsZXQgaSA9IGMxOyBpID4gXzFuNTsgaS0tKSB7CiAgICAgICAgbGV0IHR2NTIgPSBpIC0gXzJuNDsKICAgICAgICB0djUyID0gXzJuNCA8PCB0djUyIC0gXzFuNTsKICAgICAgICBsZXQgdHZ2NSA9IEZwMi5wb3codHY0LCB0djUyKTsKICAgICAgICBjb25zdCBlMSA9IEZwMi5lcWwodHZ2NSwgRnAyLk9ORSk7CiAgICAgICAgdHYyID0gRnAyLm11bCh0djMsIHR2MSk7CiAgICAgICAgdHYxID0gRnAyLm11bCh0djEsIHR2MSk7CiAgICAgICAgdHZ2NSA9IEZwMi5tdWwodHY0LCB0djEpOwogICAgICAgIHR2MyA9IEZwMi5jbW92KHR2MiwgdHYzLCBlMSk7CiAgICAgICAgdHY0ID0gRnAyLmNtb3YodHZ2NSwgdHY0LCBlMSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgaXNWYWxpZDogaXNRUiwgdmFsdWU6IHR2MyB9OwogICAgfTsKICAgIGlmIChGcDIuT1JERVIgJSBfNG4yID09PSBfM24yKSB7CiAgICAgIGNvbnN0IGMxMiA9IChGcDIuT1JERVIgLSBfM24yKSAvIF80bjI7CiAgICAgIGNvbnN0IGMyMiA9IEZwMi5zcXJ0KEZwMi5uZWcoWikpOwogICAgICBzcXJ0UmF0aW8gPSAodSwgdikgPT4gewogICAgICAgIGxldCB0djEgPSBGcDIuc3FyKHYpOwogICAgICAgIGNvbnN0IHR2MiA9IEZwMi5tdWwodSwgdik7CiAgICAgICAgdHYxID0gRnAyLm11bCh0djEsIHR2Mik7CiAgICAgICAgbGV0IHkxID0gRnAyLnBvdyh0djEsIGMxMik7CiAgICAgICAgeTEgPSBGcDIubXVsKHkxLCB0djIpOwogICAgICAgIGNvbnN0IHkyID0gRnAyLm11bCh5MSwgYzIyKTsKICAgICAgICBjb25zdCB0djMgPSBGcDIubXVsKEZwMi5zcXIoeTEpLCB2KTsKICAgICAgICBjb25zdCBpc1FSID0gRnAyLmVxbCh0djMsIHUpOwogICAgICAgIGxldCB5ID0gRnAyLmNtb3YoeTIsIHkxLCBpc1FSKTsKICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBpc1FSLCB2YWx1ZTogeSB9OwogICAgICB9OwogICAgfQogICAgcmV0dXJuIHNxcnRSYXRpbzsKICB9CiAgZnVuY3Rpb24gbWFwVG9DdXJ2ZVNpbXBsZVNXVShGcDIsIG9wdHMpIHsKICAgIHZhbGlkYXRlRmllbGQoRnAyKTsKICAgIGlmICghRnAyLmlzVmFsaWQob3B0cy5BKSB8fCAhRnAyLmlzVmFsaWQob3B0cy5CKSB8fCAhRnAyLmlzVmFsaWQob3B0cy5aKSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJtYXBUb0N1cnZlU2ltcGxlU1dVOiBpbnZhbGlkIG9wdHMiKTsKICAgIGNvbnN0IHNxcnRSYXRpbyA9IFNXVUZwU3FydFJhdGlvKEZwMiwgb3B0cy5aKTsKICAgIGlmICghRnAyLmlzT2RkKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkZwLmlzT2RkIGlzIG5vdCBpbXBsZW1lbnRlZCEiKTsKICAgIHJldHVybiAodSkgPT4gewogICAgICBsZXQgdHYxLCB0djIsIHR2MywgdHY0LCB0djUsIHR2NiwgeCwgeTsKICAgICAgdHYxID0gRnAyLnNxcih1KTsKICAgICAgdHYxID0gRnAyLm11bCh0djEsIG9wdHMuWik7CiAgICAgIHR2MiA9IEZwMi5zcXIodHYxKTsKICAgICAgdHYyID0gRnAyLmFkZCh0djIsIHR2MSk7CiAgICAgIHR2MyA9IEZwMi5hZGQodHYyLCBGcDIuT05FKTsKICAgICAgdHYzID0gRnAyLm11bCh0djMsIG9wdHMuQik7CiAgICAgIHR2NCA9IEZwMi5jbW92KG9wdHMuWiwgRnAyLm5lZyh0djIpLCAhRnAyLmVxbCh0djIsIEZwMi5aRVJPKSk7CiAgICAgIHR2NCA9IEZwMi5tdWwodHY0LCBvcHRzLkEpOwogICAgICB0djIgPSBGcDIuc3FyKHR2Myk7CiAgICAgIHR2NiA9IEZwMi5zcXIodHY0KTsKICAgICAgdHY1ID0gRnAyLm11bCh0djYsIG9wdHMuQSk7CiAgICAgIHR2MiA9IEZwMi5hZGQodHYyLCB0djUpOwogICAgICB0djIgPSBGcDIubXVsKHR2MiwgdHYzKTsKICAgICAgdHY2ID0gRnAyLm11bCh0djYsIHR2NCk7CiAgICAgIHR2NSA9IEZwMi5tdWwodHY2LCBvcHRzLkIpOwogICAgICB0djIgPSBGcDIuYWRkKHR2MiwgdHY1KTsKICAgICAgeCA9IEZwMi5tdWwodHYxLCB0djMpOwogICAgICBjb25zdCB7IGlzVmFsaWQsIHZhbHVlIH0gPSBzcXJ0UmF0aW8odHYyLCB0djYpOwogICAgICB5ID0gRnAyLm11bCh0djEsIHUpOwogICAgICB5ID0gRnAyLm11bCh5LCB2YWx1ZSk7CiAgICAgIHggPSBGcDIuY21vdih4LCB0djMsIGlzVmFsaWQpOwogICAgICB5ID0gRnAyLmNtb3YoeSwgdmFsdWUsIGlzVmFsaWQpOwogICAgICBjb25zdCBlMSA9IEZwMi5pc09kZCh1KSA9PT0gRnAyLmlzT2RkKHkpOwogICAgICB5ID0gRnAyLmNtb3YoRnAyLm5lZyh5KSwgeSwgZTEpOwogICAgICB4ID0gRnAyLmRpdih4LCB0djQpOwogICAgICByZXR1cm4geyB4LCB5IH07CiAgICB9OwogIH0KICB2YXIgYjJuLCBoMmIsIERFUiwgXzBuNSwgXzFuNSwgXzJuNCwgXzNuMiwgXzRuMjsKICB2YXIgaW5pdF93ZWllcnN0cmFzcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3Qvd2VpZXJzdHJhc3MuanMiKCkgewogICAgICBpbml0X21vZHVsYXIoKTsKICAgICAgaW5pdF91dGlsczQoKTsKICAgICAgaW5pdF91dGlsczQoKTsKICAgICAgaW5pdF9jdXJ2ZSgpOwogICAgICAoeyBieXRlc1RvTnVtYmVyQkU6IGIybiwgaGV4VG9CeXRlczogaDJiIH0gPSB1dGlsc19leHBvcnRzKTsKICAgICAgREVSID0gewogICAgICAgIC8vIGFzbi4xIERFUiBlbmNvZGluZyB1dGlscwogICAgICAgIEVycjogY2xhc3MgREVSRXJyIGV4dGVuZHMgRXJyb3IgewogICAgICAgICAgY29uc3RydWN0b3IobSA9ICIiKSB7CiAgICAgICAgICAgIHN1cGVyKG0pOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgX3BhcnNlSW50KGRhdGEpIHsKICAgICAgICAgIGNvbnN0IHsgRXJyOiBFIH0gPSBERVI7CiAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPCAyIHx8IGRhdGFbMF0gIT09IDIpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyIHRhZyIpOwogICAgICAgICAgY29uc3QgbGVuID0gZGF0YVsxXTsKICAgICAgICAgIGNvbnN0IHJlcyA9IGRhdGEuc3ViYXJyYXkoMiwgbGVuICsgMik7CiAgICAgICAgICBpZiAoIWxlbiB8fCByZXMubGVuZ3RoICE9PSBsZW4pCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiB3cm9uZyBsZW5ndGgiKTsKICAgICAgICAgIGlmIChyZXNbMF0gJiAxMjgpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiBuZWdhdGl2ZSIpOwogICAgICAgICAgaWYgKHJlc1swXSA9PT0gMCAmJiAhKHJlc1sxXSAmIDEyOCkpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiB1bm5lY2Vzc2FyeSBsZWFkaW5nIHplcm8iKTsKICAgICAgICAgIHJldHVybiB7IGQ6IGIybihyZXMpLCBsOiBkYXRhLnN1YmFycmF5KGxlbiArIDIpIH07CiAgICAgICAgfSwKICAgICAgICB0b1NpZyhoZXgpIHsKICAgICAgICAgIGNvbnN0IHsgRXJyOiBFIH0gPSBERVI7CiAgICAgICAgICBjb25zdCBkYXRhID0gdHlwZW9mIGhleCA9PT0gInN0cmluZyIgPyBoMmIoaGV4KSA6IGhleDsKICAgICAgICAgIGFieXRlcyhkYXRhKTsKICAgICAgICAgIGxldCBsID0gZGF0YS5sZW5ndGg7CiAgICAgICAgICBpZiAobCA8IDIgfHwgZGF0YVswXSAhPSA0OCkKICAgICAgICAgICAgdGhyb3cgbmV3IEUoIkludmFsaWQgc2lnbmF0dXJlIHRhZyIpOwogICAgICAgICAgaWYgKGRhdGFbMV0gIT09IGwgLSAyKQogICAgICAgICAgICB0aHJvdyBuZXcgRSgiSW52YWxpZCBzaWduYXR1cmU6IGluY29ycmVjdCBsZW5ndGgiKTsKICAgICAgICAgIGNvbnN0IHsgZDogciwgbDogc0J5dGVzIH0gPSBERVIuX3BhcnNlSW50KGRhdGEuc3ViYXJyYXkoMikpOwogICAgICAgICAgY29uc3QgeyBkOiBzLCBsOiByQnl0ZXNMZWZ0IH0gPSBERVIuX3BhcnNlSW50KHNCeXRlcyk7CiAgICAgICAgICBpZiAockJ5dGVzTGVmdC5sZW5ndGgpCiAgICAgICAgICAgIHRocm93IG5ldyBFKCJJbnZhbGlkIHNpZ25hdHVyZTogbGVmdCBieXRlcyBhZnRlciBwYXJzaW5nIik7CiAgICAgICAgICByZXR1cm4geyByLCBzIH07CiAgICAgICAgfSwKICAgICAgICBoZXhGcm9tU2lnKHNpZykgewogICAgICAgICAgY29uc3Qgc2xpY2UyID0gKHMyKSA9PiBOdW1iZXIucGFyc2VJbnQoczJbMF0sIDE2KSAmIDggPyAiMDAiICsgczIgOiBzMjsKICAgICAgICAgIGNvbnN0IGggPSAobnVtKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGhleCA9IG51bS50b1N0cmluZygxNik7CiAgICAgICAgICAgIHJldHVybiBoZXgubGVuZ3RoICYgMSA/IGAwJHtoZXh9YCA6IGhleDsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCBzID0gc2xpY2UyKGgoc2lnLnMpKTsKICAgICAgICAgIGNvbnN0IHIgPSBzbGljZTIoaChzaWcucikpOwogICAgICAgICAgY29uc3Qgc2hsID0gcy5sZW5ndGggLyAyOwogICAgICAgICAgY29uc3QgcmhsID0gci5sZW5ndGggLyAyOwogICAgICAgICAgY29uc3Qgc2wgPSBoKHNobCk7CiAgICAgICAgICBjb25zdCBybCA9IGgocmhsKTsKICAgICAgICAgIHJldHVybiBgMzAke2gocmhsICsgc2hsICsgNCl9MDIke3JsfSR7cn0wMiR7c2x9JHtzfWA7CiAgICAgICAgfQogICAgICB9OwogICAgICBfMG41ID0gQmlnSW50KDApOwogICAgICBfMW41ID0gQmlnSW50KDEpOwogICAgICBfMm40ID0gQmlnSW50KDIpOwogICAgICBfM24yID0gQmlnSW50KDMpOwogICAgICBfNG4yID0gQmlnSW50KDQpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvaGFzaC10by1jdXJ2ZS5qcwogIGZ1bmN0aW9uIGkyb3NwKHZhbHVlLCBsZW5ndGgpIHsKICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPj0gMSA8PCA4ICogbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIEkyT1NQIGNhbGw6IHZhbHVlPSR7dmFsdWV9IGxlbmd0aD0ke2xlbmd0aH1gKTsKICAgIH0KICAgIGNvbnN0IHJlcyA9IEFycmF5LmZyb20oeyBsZW5ndGggfSkuZmlsbCgwKTsKICAgIGZvciAobGV0IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICByZXNbaV0gPSB2YWx1ZSAmIDI1NTsKICAgICAgdmFsdWUgPj4+PSA4OwogICAgfQogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlcyk7CiAgfQogIGZ1bmN0aW9uIHN0cnhvcihhLCBiKSB7CiAgICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheShhLmxlbmd0aCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKICAgICAgYXJyW2ldID0gYVtpXSBeIGJbaV07CiAgICB9CiAgICByZXR1cm4gYXJyOwogIH0KICBmdW5jdGlvbiBhbnVtKGl0ZW0pIHsKICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoaXRlbSkpCiAgICAgIHRocm93IG5ldyBFcnJvcigibnVtYmVyIGV4cGVjdGVkIik7CiAgfQogIGZ1bmN0aW9uIGV4cGFuZF9tZXNzYWdlX3htZChtc2csIERTVCwgbGVuSW5CeXRlcywgSCkgewogICAgYWJ5dGVzKG1zZyk7CiAgICBhYnl0ZXMoRFNUKTsKICAgIGFudW0obGVuSW5CeXRlcyk7CiAgICBpZiAoRFNULmxlbmd0aCA+IDI1NSkKICAgICAgRFNUID0gSChjb25jYXRCeXRlczModXRmOFRvQnl0ZXMyKCJIMkMtT1ZFUlNJWkUtRFNULSIpLCBEU1QpKTsKICAgIGNvbnN0IHsgb3V0cHV0TGVuOiBiX2luX2J5dGVzLCBibG9ja0xlbjogcl9pbl9ieXRlcyB9ID0gSDsKICAgIGNvbnN0IGVsbCA9IE1hdGguY2VpbChsZW5JbkJ5dGVzIC8gYl9pbl9ieXRlcyk7CiAgICBpZiAoZWxsID4gMjU1KQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeG1kIGxlbmd0aCIpOwogICAgY29uc3QgRFNUX3ByaW1lID0gY29uY2F0Qnl0ZXMzKERTVCwgaTJvc3AoRFNULmxlbmd0aCwgMSkpOwogICAgY29uc3QgWl9wYWQgPSBpMm9zcCgwLCByX2luX2J5dGVzKTsKICAgIGNvbnN0IGxfaV9iX3N0ciA9IGkyb3NwKGxlbkluQnl0ZXMsIDIpOwogICAgY29uc3QgYiA9IG5ldyBBcnJheShlbGwpOwogICAgY29uc3QgYl8wID0gSChjb25jYXRCeXRlczMoWl9wYWQsIG1zZywgbF9pX2Jfc3RyLCBpMm9zcCgwLCAxKSwgRFNUX3ByaW1lKSk7CiAgICBiWzBdID0gSChjb25jYXRCeXRlczMoYl8wLCBpMm9zcCgxLCAxKSwgRFNUX3ByaW1lKSk7CiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBlbGw7IGkrKykgewogICAgICBjb25zdCBhcmdzID0gW3N0cnhvcihiXzAsIGJbaSAtIDFdKSwgaTJvc3AoaSArIDEsIDEpLCBEU1RfcHJpbWVdOwogICAgICBiW2ldID0gSChjb25jYXRCeXRlczMoLi4uYXJncykpOwogICAgfQogICAgY29uc3QgcHNldWRvX3JhbmRvbV9ieXRlcyA9IGNvbmNhdEJ5dGVzMyguLi5iKTsKICAgIHJldHVybiBwc2V1ZG9fcmFuZG9tX2J5dGVzLnNsaWNlKDAsIGxlbkluQnl0ZXMpOwogIH0KICBmdW5jdGlvbiBleHBhbmRfbWVzc2FnZV94b2YobXNnLCBEU1QsIGxlbkluQnl0ZXMsIGssIEgpIHsKICAgIGFieXRlcyhtc2cpOwogICAgYWJ5dGVzKERTVCk7CiAgICBhbnVtKGxlbkluQnl0ZXMpOwogICAgaWYgKERTVC5sZW5ndGggPiAyNTUpIHsKICAgICAgY29uc3QgZGtMZW4gPSBNYXRoLmNlaWwoMiAqIGsgLyA4KTsKICAgICAgRFNUID0gSC5jcmVhdGUoeyBka0xlbiB9KS51cGRhdGUodXRmOFRvQnl0ZXMyKCJIMkMtT1ZFUlNJWkUtRFNULSIpKS51cGRhdGUoRFNUKS5kaWdlc3QoKTsKICAgIH0KICAgIGlmIChsZW5JbkJ5dGVzID4gNjU1MzUgfHwgRFNULmxlbmd0aCA+IDI1NSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJleHBhbmRfbWVzc2FnZV94b2Y6IGludmFsaWQgbGVuSW5CeXRlcyIpOwogICAgcmV0dXJuIEguY3JlYXRlKHsgZGtMZW46IGxlbkluQnl0ZXMgfSkudXBkYXRlKG1zZykudXBkYXRlKGkyb3NwKGxlbkluQnl0ZXMsIDIpKS51cGRhdGUoRFNUKS51cGRhdGUoaTJvc3AoRFNULmxlbmd0aCwgMSkpLmRpZ2VzdCgpOwogIH0KICBmdW5jdGlvbiBoYXNoX3RvX2ZpZWxkKG1zZywgY291bnQsIG9wdGlvbnMpIHsKICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsIHsKICAgICAgRFNUOiAic3RyaW5nT3JVaW50OEFycmF5IiwKICAgICAgcDogImJpZ2ludCIsCiAgICAgIG06ICJpc1NhZmVJbnRlZ2VyIiwKICAgICAgazogImlzU2FmZUludGVnZXIiLAogICAgICBoYXNoOiAiaGFzaCIKICAgIH0pOwogICAgY29uc3QgeyBwLCBrLCBtLCBoYXNoOiBoYXNoMywgZXhwYW5kLCBEU1Q6IF9EU1QgfSA9IG9wdGlvbnM7CiAgICBhYnl0ZXMobXNnKTsKICAgIGFudW0oY291bnQpOwogICAgY29uc3QgRFNUID0gdHlwZW9mIF9EU1QgPT09ICJzdHJpbmciID8gdXRmOFRvQnl0ZXMyKF9EU1QpIDogX0RTVDsKICAgIGNvbnN0IGxvZzJwID0gcC50b1N0cmluZygyKS5sZW5ndGg7CiAgICBjb25zdCBMID0gTWF0aC5jZWlsKChsb2cycCArIGspIC8gOCk7CiAgICBjb25zdCBsZW5faW5fYnl0ZXMgPSBjb3VudCAqIG0gKiBMOwogICAgbGV0IHByYjsKICAgIGlmIChleHBhbmQgPT09ICJ4bWQiKSB7CiAgICAgIHByYiA9IGV4cGFuZF9tZXNzYWdlX3htZChtc2csIERTVCwgbGVuX2luX2J5dGVzLCBoYXNoMyk7CiAgICB9IGVsc2UgaWYgKGV4cGFuZCA9PT0gInhvZiIpIHsKICAgICAgcHJiID0gZXhwYW5kX21lc3NhZ2VfeG9mKG1zZywgRFNULCBsZW5faW5fYnl0ZXMsIGssIGhhc2gzKTsKICAgIH0gZWxzZSBpZiAoZXhwYW5kID09PSAiX2ludGVybmFsX3Bhc3MiKSB7CiAgICAgIHByYiA9IG1zZzsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwYW5kIG11c3QgYmUgInhtZCIgb3IgInhvZiInKTsKICAgIH0KICAgIGNvbnN0IHUgPSBuZXcgQXJyYXkoY291bnQpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGNvbnN0IGUgPSBuZXcgQXJyYXkobSk7CiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbTsgaisrKSB7CiAgICAgICAgY29uc3QgZWxtX29mZnNldCA9IEwgKiAoaiArIGkgKiBtKTsKICAgICAgICBjb25zdCB0diA9IHByYi5zdWJhcnJheShlbG1fb2Zmc2V0LCBlbG1fb2Zmc2V0ICsgTCk7CiAgICAgICAgZVtqXSA9IG1vZChvczJpcCh0diksIHApOwogICAgICB9CiAgICAgIHVbaV0gPSBlOwogICAgfQogICAgcmV0dXJuIHU7CiAgfQogIGZ1bmN0aW9uIGlzb2dlbnlNYXAoZmllbGQsIG1hcCkgewogICAgY29uc3QgQ09FRkYgPSBtYXAubWFwKChpKSA9PiBBcnJheS5mcm9tKGkpLnJldmVyc2UoKSk7CiAgICByZXR1cm4gKHgsIHkpID0+IHsKICAgICAgY29uc3QgW3hOdW0sIHhEZW4sIHlOdW0sIHlEZW5dID0gQ09FRkYubWFwKCh2YWwpID0+IHZhbC5yZWR1Y2UoKGFjYywgaSkgPT4gZmllbGQuYWRkKGZpZWxkLm11bChhY2MsIHgpLCBpKSkpOwogICAgICB4ID0gZmllbGQuZGl2KHhOdW0sIHhEZW4pOwogICAgICB5ID0gZmllbGQubXVsKHksIGZpZWxkLmRpdih5TnVtLCB5RGVuKSk7CiAgICAgIHJldHVybiB7IHgsIHkgfTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIGNyZWF0ZUhhc2hlcihQb2ludDIsIG1hcFRvQ3VydmUsIGRlZikgewogICAgaWYgKHR5cGVvZiBtYXBUb0N1cnZlICE9PSAiZnVuY3Rpb24iKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIm1hcFRvQ3VydmUoKSBtdXN0IGJlIGRlZmluZWQiKTsKICAgIHJldHVybiB7CiAgICAgIC8vIEVuY29kZXMgYnl0ZSBzdHJpbmcgdG8gZWxsaXB0aWMgY3VydmUuCiAgICAgIC8vIGhhc2hfdG9fY3VydmUgZnJvbSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTMKICAgICAgaGFzaFRvQ3VydmUobXNnLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgdSA9IGhhc2hfdG9fZmllbGQobXNnLCAyLCB7IC4uLmRlZiwgRFNUOiBkZWYuRFNULCAuLi5vcHRpb25zIH0pOwogICAgICAgIGNvbnN0IHUwID0gUG9pbnQyLmZyb21BZmZpbmUobWFwVG9DdXJ2ZSh1WzBdKSk7CiAgICAgICAgY29uc3QgdTEgPSBQb2ludDIuZnJvbUFmZmluZShtYXBUb0N1cnZlKHVbMV0pKTsKICAgICAgICBjb25zdCBQID0gdTAuYWRkKHUxKS5jbGVhckNvZmFjdG9yKCk7CiAgICAgICAgUC5hc3NlcnRWYWxpZGl0eSgpOwogICAgICAgIHJldHVybiBQOwogICAgICB9LAogICAgICAvLyBFbmNvZGVzIGJ5dGUgc3RyaW5nIHRvIGVsbGlwdGljIGN1cnZlLgogICAgICAvLyBlbmNvZGVfdG9fY3VydmUgZnJvbSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTMKICAgICAgZW5jb2RlVG9DdXJ2ZShtc2csIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCB1ID0gaGFzaF90b19maWVsZChtc2csIDEsIHsgLi4uZGVmLCBEU1Q6IGRlZi5lbmNvZGVEU1QsIC4uLm9wdGlvbnMgfSk7CiAgICAgICAgY29uc3QgUCA9IFBvaW50Mi5mcm9tQWZmaW5lKG1hcFRvQ3VydmUodVswXSkpLmNsZWFyQ29mYWN0b3IoKTsKICAgICAgICBQLmFzc2VydFZhbGlkaXR5KCk7CiAgICAgICAgcmV0dXJuIFA7CiAgICAgIH0KICAgIH07CiAgfQogIHZhciBvczJpcDsKICB2YXIgaW5pdF9oYXNoX3RvX2N1cnZlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC9oYXNoLXRvLWN1cnZlLmpzIigpIHsKICAgICAgaW5pdF9tb2R1bGFyKCk7CiAgICAgIGluaXRfdXRpbHM0KCk7CiAgICAgIG9zMmlwID0gYnl0ZXNUb051bWJlckJFOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vaG1hYy5qcwogIHZhciBITUFDLCBobWFjOwogIHZhciBpbml0X2htYWMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL2htYWMuanMiKCkgewogICAgICBpbml0X2Fzc2VydCgpOwogICAgICBpbml0X3V0aWxzMigpOwogICAgICBITUFDID0gY2xhc3MgZXh0ZW5kcyBIYXNoIHsKICAgICAgICBjb25zdHJ1Y3RvcihoYXNoMywgX2tleSkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIHRoaXMuZmluaXNoZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7CiAgICAgICAgICBoYXNoKGhhc2gzKTsKICAgICAgICAgIGNvbnN0IGtleSA9IHRvQnl0ZXMyKF9rZXkpOwogICAgICAgICAgdGhpcy5pSGFzaCA9IGhhc2gzLmNyZWF0ZSgpOwogICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlIYXNoLnVwZGF0ZSAhPT0gImZ1bmN0aW9uIikKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBpbnN0YW5jZSBvZiBjbGFzcyB3aGljaCBleHRlbmRzIHV0aWxzLkhhc2giKTsKICAgICAgICAgIHRoaXMuYmxvY2tMZW4gPSB0aGlzLmlIYXNoLmJsb2NrTGVuOwogICAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSB0aGlzLmlIYXNoLm91dHB1dExlbjsKICAgICAgICAgIGNvbnN0IGJsb2NrTGVuID0gdGhpcy5ibG9ja0xlbjsKICAgICAgICAgIGNvbnN0IHBhZDIgPSBuZXcgVWludDhBcnJheShibG9ja0xlbik7CiAgICAgICAgICBwYWQyLnNldChrZXkubGVuZ3RoID4gYmxvY2tMZW4gPyBoYXNoMy5jcmVhdGUoKS51cGRhdGUoa2V5KS5kaWdlc3QoKSA6IGtleSk7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZDIubGVuZ3RoOyBpKyspCiAgICAgICAgICAgIHBhZDJbaV0gXj0gNTQ7CiAgICAgICAgICB0aGlzLmlIYXNoLnVwZGF0ZShwYWQyKTsKICAgICAgICAgIHRoaXMub0hhc2ggPSBoYXNoMy5jcmVhdGUoKTsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFkMi5sZW5ndGg7IGkrKykKICAgICAgICAgICAgcGFkMltpXSBePSA1NCBeIDkyOwogICAgICAgICAgdGhpcy5vSGFzaC51cGRhdGUocGFkMik7CiAgICAgICAgICBwYWQyLmZpbGwoMCk7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZShidWYpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzKTsKICAgICAgICAgIHRoaXMuaUhhc2gudXBkYXRlKGJ1Zik7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgZGlnZXN0SW50byhvdXQpIHsKICAgICAgICAgIGV4aXN0cyh0aGlzKTsKICAgICAgICAgIGJ5dGVzKG91dCwgdGhpcy5vdXRwdXRMZW4pOwogICAgICAgICAgdGhpcy5maW5pc2hlZCA9IHRydWU7CiAgICAgICAgICB0aGlzLmlIYXNoLmRpZ2VzdEludG8ob3V0KTsKICAgICAgICAgIHRoaXMub0hhc2gudXBkYXRlKG91dCk7CiAgICAgICAgICB0aGlzLm9IYXNoLmRpZ2VzdEludG8ob3V0KTsKICAgICAgICAgIHRoaXMuZGVzdHJveSgpOwogICAgICAgIH0KICAgICAgICBkaWdlc3QoKSB7CiAgICAgICAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheSh0aGlzLm9IYXNoLm91dHB1dExlbik7CiAgICAgICAgICB0aGlzLmRpZ2VzdEludG8ob3V0KTsKICAgICAgICAgIHJldHVybiBvdXQ7CiAgICAgICAgfQogICAgICAgIF9jbG9uZUludG8odG8pIHsKICAgICAgICAgIHRvIHx8ICh0byA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLCB7fSkpOwogICAgICAgICAgY29uc3QgeyBvSGFzaCwgaUhhc2gsIGZpbmlzaGVkLCBkZXN0cm95ZWQsIGJsb2NrTGVuLCBvdXRwdXRMZW4gfSA9IHRoaXM7CiAgICAgICAgICB0byA9IHRvOwogICAgICAgICAgdG8uZmluaXNoZWQgPSBmaW5pc2hlZDsKICAgICAgICAgIHRvLmRlc3Ryb3llZCA9IGRlc3Ryb3llZDsKICAgICAgICAgIHRvLmJsb2NrTGVuID0gYmxvY2tMZW47CiAgICAgICAgICB0by5vdXRwdXRMZW4gPSBvdXRwdXRMZW47CiAgICAgICAgICB0by5vSGFzaCA9IG9IYXNoLl9jbG9uZUludG8odG8ub0hhc2gpOwogICAgICAgICAgdG8uaUhhc2ggPSBpSGFzaC5fY2xvbmVJbnRvKHRvLmlIYXNoKTsKICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICB9CiAgICAgICAgZGVzdHJveSgpIHsKICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMub0hhc2guZGVzdHJveSgpOwogICAgICAgICAgdGhpcy5pSGFzaC5kZXN0cm95KCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBobWFjID0gKGhhc2gzLCBrZXksIG1lc3NhZ2UpID0+IG5ldyBITUFDKGhhc2gzLCBrZXkpLnVwZGF0ZShtZXNzYWdlKS5kaWdlc3QoKTsKICAgICAgaG1hYy5jcmVhdGUgPSAoaGFzaDMsIGtleSkgPT4gbmV3IEhNQUMoaGFzaDMsIGtleSk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9fc2hvcnR3X3V0aWxzLmpzCiAgZnVuY3Rpb24gZ2V0SGFzaChoYXNoMykgewogICAgcmV0dXJuIHsKICAgICAgaGFzaDogaGFzaDMsCiAgICAgIGhtYWM6IChrZXksIC4uLm1zZ3MpID0+IGhtYWMoaGFzaDMsIGtleSwgY29uY2F0Qnl0ZXMoLi4ubXNncykpLAogICAgICByYW5kb21CeXRlcwogICAgfTsKICB9CiAgZnVuY3Rpb24gY3JlYXRlQ3VydmUoY3VydmVEZWYsIGRlZkhhc2gpIHsKICAgIGNvbnN0IGNyZWF0ZSA9IChoYXNoMykgPT4gd2VpZXJzdHJhc3MoeyAuLi5jdXJ2ZURlZiwgLi4uZ2V0SGFzaChoYXNoMykgfSk7CiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLmNyZWF0ZShkZWZIYXNoKSwgY3JlYXRlIH0pOwogIH0KICB2YXIgaW5pdF9zaG9ydHdfdXRpbHMgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL19zaG9ydHdfdXRpbHMuanMiKCkgewogICAgICBpbml0X2htYWMoKTsKICAgICAgaW5pdF91dGlsczIoKTsKICAgICAgaW5pdF93ZWllcnN0cmFzcygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vc2VjcDI1NmsxLmpzCiAgdmFyIHNlY3AyNTZrMV9leHBvcnRzID0ge307CiAgX19leHBvcnQoc2VjcDI1NmsxX2V4cG9ydHMsIHsKICAgIGVuY29kZVRvQ3VydmU6ICgpID0+IGVuY29kZVRvQ3VydmUsCiAgICBoYXNoVG9DdXJ2ZTogKCkgPT4gaGFzaFRvQ3VydmUsCiAgICBzY2hub3JyOiAoKSA9PiBzY2hub3JyLAogICAgc2VjcDI1NmsxOiAoKSA9PiBzZWNwMjU2azEKICB9KTsKICBmdW5jdGlvbiBzcXJ0TW9kKHkpIHsKICAgIGNvbnN0IFAgPSBzZWNwMjU2azFQOwogICAgY29uc3QgXzNuMyA9IEJpZ0ludCgzKSwgXzZuID0gQmlnSW50KDYpLCBfMTFuID0gQmlnSW50KDExKSwgXzIybiA9IEJpZ0ludCgyMik7CiAgICBjb25zdCBfMjNuID0gQmlnSW50KDIzKSwgXzQ0biA9IEJpZ0ludCg0NCksIF84OG4gPSBCaWdJbnQoODgpOwogICAgY29uc3QgYjIgPSB5ICogeSAqIHkgJSBQOwogICAgY29uc3QgYjMyID0gYjIgKiBiMiAqIHkgJSBQOwogICAgY29uc3QgYjYgPSBwb3cyKGIzMiwgXzNuMywgUCkgKiBiMzIgJSBQOwogICAgY29uc3QgYjkgPSBwb3cyKGI2LCBfM24zLCBQKSAqIGIzMiAlIFA7CiAgICBjb25zdCBiMTEgPSBwb3cyKGI5LCBfMm41LCBQKSAqIGIyICUgUDsKICAgIGNvbnN0IGIyMiA9IHBvdzIoYjExLCBfMTFuLCBQKSAqIGIxMSAlIFA7CiAgICBjb25zdCBiNDQgPSBwb3cyKGIyMiwgXzIybiwgUCkgKiBiMjIgJSBQOwogICAgY29uc3QgYjg4ID0gcG93MihiNDQsIF80NG4sIFApICogYjQ0ICUgUDsKICAgIGNvbnN0IGIxNzYgPSBwb3cyKGI4OCwgXzg4biwgUCkgKiBiODggJSBQOwogICAgY29uc3QgYjIyMCA9IHBvdzIoYjE3NiwgXzQ0biwgUCkgKiBiNDQgJSBQOwogICAgY29uc3QgYjIyMyA9IHBvdzIoYjIyMCwgXzNuMywgUCkgKiBiMzIgJSBQOwogICAgY29uc3QgdDEgPSBwb3cyKGIyMjMsIF8yM24sIFApICogYjIyICUgUDsKICAgIGNvbnN0IHQyID0gcG93Mih0MSwgXzZuLCBQKSAqIGIyICUgUDsKICAgIGNvbnN0IHJvb3QyID0gcG93Mih0MiwgXzJuNSwgUCk7CiAgICBpZiAoIUZwLmVxbChGcC5zcXIocm9vdDIpLCB5KSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCIpOwogICAgcmV0dXJuIHJvb3QyOwogIH0KICBmdW5jdGlvbiB0YWdnZWRIYXNoKHRhZywgLi4ubWVzc2FnZXMpIHsKICAgIGxldCB0YWdQID0gVEFHR0VEX0hBU0hfUFJFRklYRVNbdGFnXTsKICAgIGlmICh0YWdQID09PSB2b2lkIDApIHsKICAgICAgY29uc3QgdGFnSCA9IHNoYTI1NihVaW50OEFycmF5LmZyb20odGFnLCAoYykgPT4gYy5jaGFyQ29kZUF0KDApKSk7CiAgICAgIHRhZ1AgPSBjb25jYXRCeXRlczModGFnSCwgdGFnSCk7CiAgICAgIFRBR0dFRF9IQVNIX1BSRUZJWEVTW3RhZ10gPSB0YWdQOwogICAgfQogICAgcmV0dXJuIHNoYTI1Nihjb25jYXRCeXRlczModGFnUCwgLi4ubWVzc2FnZXMpKTsKICB9CiAgZnVuY3Rpb24gc2Nobm9yckdldEV4dFB1YktleShwcml2KSB7CiAgICBsZXQgZF8gPSBzZWNwMjU2azEudXRpbHMubm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2KTsKICAgIGxldCBwID0gUG9pbnQuZnJvbVByaXZhdGVLZXkoZF8pOwogICAgY29uc3Qgc2NhbGFyID0gcC5oYXNFdmVuWSgpID8gZF8gOiBtb2ROKC1kXyk7CiAgICByZXR1cm4geyBzY2FsYXIsIGJ5dGVzOiBwb2ludFRvQnl0ZXMocCkgfTsKICB9CiAgZnVuY3Rpb24gbGlmdF94KHgpIHsKICAgIGlmICghZmUoeCkpCiAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHg6IG5lZWQgMCA8IHggPCBwIik7CiAgICBjb25zdCB4eCA9IG1vZFAoeCAqIHgpOwogICAgY29uc3QgYyA9IG1vZFAoeHggKiB4ICsgQmlnSW50KDcpKTsKICAgIGxldCB5ID0gc3FydE1vZChjKTsKICAgIGlmICh5ICUgXzJuNSAhPT0gXzBuNikKICAgICAgeSA9IG1vZFAoLXkpOwogICAgY29uc3QgcCA9IG5ldyBQb2ludCh4LCB5LCBfMW42KTsKICAgIHAuYXNzZXJ0VmFsaWRpdHkoKTsKICAgIHJldHVybiBwOwogIH0KICBmdW5jdGlvbiBjaGFsbGVuZ2UoLi4uYXJncykgewogICAgcmV0dXJuIG1vZE4oYnl0ZXNUb051bWJlckJFKHRhZ2dlZEhhc2goIkJJUDAzNDAvY2hhbGxlbmdlIiwgLi4uYXJncykpKTsKICB9CiAgZnVuY3Rpb24gc2Nobm9yckdldFB1YmxpY0tleShwcml2YXRlS2V5KSB7CiAgICByZXR1cm4gc2Nobm9yckdldEV4dFB1YktleShwcml2YXRlS2V5KS5ieXRlczsKICB9CiAgZnVuY3Rpb24gc2Nobm9yclNpZ24obWVzc2FnZSwgcHJpdmF0ZUtleSwgYXV4UmFuZCA9IHJhbmRvbUJ5dGVzKDMyKSkgewogICAgY29uc3QgbSA9IGVuc3VyZUJ5dGVzKCJtZXNzYWdlIiwgbWVzc2FnZSk7CiAgICBjb25zdCB7IGJ5dGVzOiBweCwgc2NhbGFyOiBkIH0gPSBzY2hub3JyR2V0RXh0UHViS2V5KHByaXZhdGVLZXkpOwogICAgY29uc3QgYSA9IGVuc3VyZUJ5dGVzKCJhdXhSYW5kIiwgYXV4UmFuZCwgMzIpOwogICAgY29uc3QgdCA9IG51bVRvMzJiKGQgXiBieXRlc1RvTnVtYmVyQkUodGFnZ2VkSGFzaCgiQklQMDM0MC9hdXgiLCBhKSkpOwogICAgY29uc3QgcmFuZCA9IHRhZ2dlZEhhc2goIkJJUDAzNDAvbm9uY2UiLCB0LCBweCwgbSk7CiAgICBjb25zdCBrXyA9IG1vZE4oYnl0ZXNUb051bWJlckJFKHJhbmQpKTsKICAgIGlmIChrXyA9PT0gXzBuNikKICAgICAgdGhyb3cgbmV3IEVycm9yKCJzaWduIGZhaWxlZDogayBpcyB6ZXJvIik7CiAgICBjb25zdCB7IGJ5dGVzOiByeCwgc2NhbGFyOiBrIH0gPSBzY2hub3JyR2V0RXh0UHViS2V5KGtfKTsKICAgIGNvbnN0IGUgPSBjaGFsbGVuZ2UocngsIHB4LCBtKTsKICAgIGNvbnN0IHNpZyA9IG5ldyBVaW50OEFycmF5KDY0KTsKICAgIHNpZy5zZXQocngsIDApOwogICAgc2lnLnNldChudW1UbzMyYihtb2ROKGsgKyBlICogZCkpLCAzMik7CiAgICBpZiAoIXNjaG5vcnJWZXJpZnkoc2lnLCBtLCBweCkpCiAgICAgIHRocm93IG5ldyBFcnJvcigic2lnbjogSW52YWxpZCBzaWduYXR1cmUgcHJvZHVjZWQiKTsKICAgIHJldHVybiBzaWc7CiAgfQogIGZ1bmN0aW9uIHNjaG5vcnJWZXJpZnkoc2lnbmF0dXJlLCBtZXNzYWdlLCBwdWJsaWNLZXkpIHsKICAgIGNvbnN0IHNpZyA9IGVuc3VyZUJ5dGVzKCJzaWduYXR1cmUiLCBzaWduYXR1cmUsIDY0KTsKICAgIGNvbnN0IG0gPSBlbnN1cmVCeXRlcygibWVzc2FnZSIsIG1lc3NhZ2UpOwogICAgY29uc3QgcHViID0gZW5zdXJlQnl0ZXMoInB1YmxpY0tleSIsIHB1YmxpY0tleSwgMzIpOwogICAgdHJ5IHsKICAgICAgY29uc3QgUCA9IGxpZnRfeChieXRlc1RvTnVtYmVyQkUocHViKSk7CiAgICAgIGNvbnN0IHIgPSBieXRlc1RvTnVtYmVyQkUoc2lnLnN1YmFycmF5KDAsIDMyKSk7CiAgICAgIGlmICghZmUocikpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBjb25zdCBzID0gYnl0ZXNUb051bWJlckJFKHNpZy5zdWJhcnJheSgzMiwgNjQpKTsKICAgICAgaWYgKCFnZShzKSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGNvbnN0IGUgPSBjaGFsbGVuZ2UobnVtVG8zMmIociksIHBvaW50VG9CeXRlcyhQKSwgbSk7CiAgICAgIGNvbnN0IFIgPSBHbXVsQWRkKFAsIHMsIG1vZE4oLWUpKTsKICAgICAgaWYgKCFSIHx8ICFSLmhhc0V2ZW5ZKCkgfHwgUi50b0FmZmluZSgpLnggIT09IHIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgdmFyIHNlY3AyNTZrMVAsIHNlY3AyNTZrMU4sIF8xbjYsIF8ybjUsIGRpdk5lYXJlc3QsIEZwLCBzZWNwMjU2azEsIF8wbjYsIGZlLCBnZSwgVEFHR0VEX0hBU0hfUFJFRklYRVMsIHBvaW50VG9CeXRlcywgbnVtVG8zMmIsIG1vZFAsIG1vZE4sIFBvaW50LCBHbXVsQWRkLCBzY2hub3JyLCBpc29NYXAsIG1hcFNXVSwgaHRmLCBoYXNoVG9DdXJ2ZSwgZW5jb2RlVG9DdXJ2ZTsKICB2YXIgaW5pdF9zZWNwMjU2azEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL3NlY3AyNTZrMS5qcyIoKSB7CiAgICAgIGluaXRfc2hhMjU2KCk7CiAgICAgIGluaXRfdXRpbHMyKCk7CiAgICAgIGluaXRfbW9kdWxhcigpOwogICAgICBpbml0X3dlaWVyc3RyYXNzKCk7CiAgICAgIGluaXRfdXRpbHM0KCk7CiAgICAgIGluaXRfaGFzaF90b19jdXJ2ZSgpOwogICAgICBpbml0X3Nob3J0d191dGlscygpOwogICAgICBzZWNwMjU2azFQID0gQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlZmZmZmZjMmYiKTsKICAgICAgc2VjcDI1NmsxTiA9IEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWJhYWVkY2U2YWY0OGEwM2JiZmQyNWU4Y2QwMzY0MTQxIik7CiAgICAgIF8xbjYgPSBCaWdJbnQoMSk7CiAgICAgIF8ybjUgPSBCaWdJbnQoMik7CiAgICAgIGRpdk5lYXJlc3QgPSAoYSwgYikgPT4gKGEgKyBiIC8gXzJuNSkgLyBiOwogICAgICBGcCA9IEZpZWxkKHNlY3AyNTZrMVAsIHZvaWQgMCwgdm9pZCAwLCB7IHNxcnQ6IHNxcnRNb2QgfSk7CiAgICAgIHNlY3AyNTZrMSA9IGNyZWF0ZUN1cnZlKHsKICAgICAgICBhOiBCaWdJbnQoMCksCiAgICAgICAgLy8gZXF1YXRpb24gcGFyYW1zOiBhLCBiCiAgICAgICAgYjogQmlnSW50KDcpLAogICAgICAgIC8vIFNlZW0gdG8gYmUgcmlnaWQ6IGJpdGNvaW50YWxrLm9yZy9pbmRleC5waHA/dG9waWM9Mjg5Nzk1Lm1zZzMxODM5NzUjbXNnMzE4Mzk3NQogICAgICAgIEZwLAogICAgICAgIC8vIEZpZWxkJ3MgcHJpbWU6IDJuKioyNTZuIC0gMm4qKjMybiAtIDJuKio5biAtIDJuKio4biAtIDJuKio3biAtIDJuKio2biAtIDJuKio0biAtIDFuCiAgICAgICAgbjogc2VjcDI1NmsxTiwKICAgICAgICAvLyBDdXJ2ZSBvcmRlciwgdG90YWwgY291bnQgb2YgdmFsaWQgcG9pbnRzIGluIHRoZSBmaWVsZAogICAgICAgIC8vIEJhc2UgcG9pbnQgKHgsIHkpIGFrYSBnZW5lcmF0b3IgcG9pbnQKICAgICAgICBHeDogQmlnSW50KCI1NTA2NjI2MzAyMjI3NzM0MzY2OTU3ODcxODg5NTE2ODUzNDMyNjI1MDYwMzQ1Mzc3NzU5NDE3NTUwMDE4NzM2MDM4OTExNjcyOTI0MCIpLAogICAgICAgIEd5OiBCaWdJbnQoIjMyNjcwNTEwMDIwNzU4ODE2OTc4MDgzMDg1MTMwNTA3MDQzMTg0NDcxMjczMzgwNjU5MjQzMjc1OTM4OTA0MzM1NzU3MzM3NDgyNDI0IiksCiAgICAgICAgaDogQmlnSW50KDEpLAogICAgICAgIC8vIENvZmFjdG9yCiAgICAgICAgbG93UzogdHJ1ZSwKICAgICAgICAvLyBBbGxvdyBvbmx5IGxvdy1TIHNpZ25hdHVyZXMgYnkgZGVmYXVsdCBpbiBzaWduKCkgYW5kIHZlcmlmeSgpCiAgICAgICAgLyoqCiAgICAgICAgICogc2VjcDI1NmsxIGJlbG9uZ3MgdG8gS29ibGl0eiBjdXJ2ZXM6IGl0IGhhcyBlZmZpY2llbnRseSBjb21wdXRhYmxlIGVuZG9tb3JwaGlzbS4KICAgICAgICAgKiBFbmRvbW9ycGhpc20gdXNlcyAyeCBsZXNzIFJBTSwgc3BlZWRzIHVwIHByZWNvbXB1dGF0aW9uIGJ5IDJ4IGFuZCBFQ0RIIC8ga2V5IHJlY292ZXJ5IGJ5IDIwJS4KICAgICAgICAgKiBGb3IgcHJlY29tcHV0ZWQgd05BRiBpdCB0cmFkZXMgb2ZmIDEvMiBpbml0IHRpbWUgJiAxLzMgcmFtIGZvciAyMCUgcGVyZiBoaXQuCiAgICAgICAgICogRXhwbGFuYXRpb246IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3BhdWxtaWxsci9lYjY3MDgwNjc5M2U4NGRmNjI4YTdjNDM0YTg3MzA2NgogICAgICAgICAqLwogICAgICAgIGVuZG86IHsKICAgICAgICAgIGJldGE6IEJpZ0ludCgiMHg3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIiksCiAgICAgICAgICBzcGxpdFNjYWxhcjogKGspID0+IHsKICAgICAgICAgICAgY29uc3QgbiA9IHNlY3AyNTZrMU47CiAgICAgICAgICAgIGNvbnN0IGExID0gQmlnSW50KCIweDMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1Iik7CiAgICAgICAgICAgIGNvbnN0IGIxID0gLV8xbjYgKiBCaWdJbnQoIjB4ZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMiKTsKICAgICAgICAgICAgY29uc3QgYTIgPSBCaWdJbnQoIjB4MTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4Iik7CiAgICAgICAgICAgIGNvbnN0IGIyID0gYTE7CiAgICAgICAgICAgIGNvbnN0IFBPV18yXzEyOCA9IEJpZ0ludCgiMHgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKTsKICAgICAgICAgICAgY29uc3QgYzEgPSBkaXZOZWFyZXN0KGIyICogaywgbik7CiAgICAgICAgICAgIGNvbnN0IGMyID0gZGl2TmVhcmVzdCgtYjEgKiBrLCBuKTsKICAgICAgICAgICAgbGV0IGsxID0gbW9kKGsgLSBjMSAqIGExIC0gYzIgKiBhMiwgbik7CiAgICAgICAgICAgIGxldCBrMiA9IG1vZCgtYzEgKiBiMSAtIGMyICogYjIsIG4pOwogICAgICAgICAgICBjb25zdCBrMW5lZyA9IGsxID4gUE9XXzJfMTI4OwogICAgICAgICAgICBjb25zdCBrMm5lZyA9IGsyID4gUE9XXzJfMTI4OwogICAgICAgICAgICBpZiAoazFuZWcpCiAgICAgICAgICAgICAgazEgPSBuIC0gazE7CiAgICAgICAgICAgIGlmIChrMm5lZykKICAgICAgICAgICAgICBrMiA9IG4gLSBrMjsKICAgICAgICAgICAgaWYgKGsxID4gUE9XXzJfMTI4IHx8IGsyID4gUE9XXzJfMTI4KSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJzcGxpdFNjYWxhcjogRW5kb21vcnBoaXNtIGZhaWxlZCwgaz0iICsgayk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHsgazFuZWcsIGsxLCBrMm5lZywgazIgfTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sIHNoYTI1Nik7CiAgICAgIF8wbjYgPSBCaWdJbnQoMCk7CiAgICAgIGZlID0gKHgpID0+IHR5cGVvZiB4ID09PSAiYmlnaW50IiAmJiBfMG42IDwgeCAmJiB4IDwgc2VjcDI1NmsxUDsKICAgICAgZ2UgPSAoeCkgPT4gdHlwZW9mIHggPT09ICJiaWdpbnQiICYmIF8wbjYgPCB4ICYmIHggPCBzZWNwMjU2azFOOwogICAgICBUQUdHRURfSEFTSF9QUkVGSVhFUyA9IHt9OwogICAgICBwb2ludFRvQnl0ZXMgPSAocG9pbnQpID0+IHBvaW50LnRvUmF3Qnl0ZXModHJ1ZSkuc2xpY2UoMSk7CiAgICAgIG51bVRvMzJiID0gKG4pID0+IG51bWJlclRvQnl0ZXNCRShuLCAzMik7CiAgICAgIG1vZFAgPSAoeCkgPT4gbW9kKHgsIHNlY3AyNTZrMVApOwogICAgICBtb2ROID0gKHgpID0+IG1vZCh4LCBzZWNwMjU2azFOKTsKICAgICAgUG9pbnQgPSBzZWNwMjU2azEuUHJvamVjdGl2ZVBvaW50OwogICAgICBHbXVsQWRkID0gKFEsIGEsIGIpID0+IFBvaW50LkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoUSwgYSwgYik7CiAgICAgIHNjaG5vcnIgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+ICh7CiAgICAgICAgZ2V0UHVibGljS2V5OiBzY2hub3JyR2V0UHVibGljS2V5LAogICAgICAgIHNpZ246IHNjaG5vcnJTaWduLAogICAgICAgIHZlcmlmeTogc2Nobm9yclZlcmlmeSwKICAgICAgICB1dGlsczogewogICAgICAgICAgcmFuZG9tUHJpdmF0ZUtleTogc2VjcDI1NmsxLnV0aWxzLnJhbmRvbVByaXZhdGVLZXksCiAgICAgICAgICBsaWZ0X3gsCiAgICAgICAgICBwb2ludFRvQnl0ZXMsCiAgICAgICAgICBudW1iZXJUb0J5dGVzQkUsCiAgICAgICAgICBieXRlc1RvTnVtYmVyQkUsCiAgICAgICAgICB0YWdnZWRIYXNoLAogICAgICAgICAgbW9kCiAgICAgICAgfQogICAgICB9KSkoKTsKICAgICAgaXNvTWFwID0gLyogQF9fUFVSRV9fICovICgoKSA9PiBpc29nZW55TWFwKEZwLCBbCiAgICAgICAgLy8geE51bQogICAgICAgIFsKICAgICAgICAgICIweDhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhkYWFhYWE4YzciLAogICAgICAgICAgIjB4N2QzZDRjODBiYzMyMWQ1YjlmMzE1Y2VhN2ZkNDRjNWQ1OTVkMmZjMGJmNjNiOTJkZmZmMTA0NGYxN2M2NTgxIiwKICAgICAgICAgICIweDUzNGMzMjhkMjNmMjM0ZTZlMmE0MTNkZWNhMjVjYWVjZTQ1MDYxNDQwMzdjNDAzMTRlY2JkMGI1M2Q5ZGQyNjIiLAogICAgICAgICAgIjB4OGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGRhYWFhYTg4YyIKICAgICAgICBdLAogICAgICAgIC8vIHhEZW4KICAgICAgICBbCiAgICAgICAgICAiMHhkMzU3NzExOTNkOTQ5MThhOWNhMzRjY2JiN2I2NDBkZDg2Y2Q0MDk1NDJmODQ4N2Q5ZmU2Yjc0NTc4MWViNDliIiwKICAgICAgICAgICIweGVkYWRjNmY2NDM4M2RjMWRmN2M0YjJkNTFiNTQyMjU0MDZkMzZiNjQxZjVlNDFiYmM1MmE1NjYxMmE4YzZkMTQiLAogICAgICAgICAgIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIKICAgICAgICAgIC8vIExBU1QgMQogICAgICAgIF0sCiAgICAgICAgLy8geU51bQogICAgICAgIFsKICAgICAgICAgICIweDRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiOGUzOGUyM2MiLAogICAgICAgICAgIjB4Yzc1ZTBjMzJkNWNiN2MwZmE5ZDBhNTRiMTJhMGE2ZDU2NDdhYjA0NmQ2ODZkYTZmZGZmYzkwZmMyMDFkNzFhMyIsCiAgICAgICAgICAiMHgyOWE2MTk0NjkxZjkxYTczNzE1MjA5ZWY2NTEyZTU3NjcyMjgzMGEyMDFiZTIwMThhNzY1ZTg1YTllY2VlOTMxIiwKICAgICAgICAgICIweDJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmMzhlMzhkODQiCiAgICAgICAgXSwKICAgICAgICAvLyB5RGVuCiAgICAgICAgWwogICAgICAgICAgIjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZjkzYiIsCiAgICAgICAgICAiMHg3YTA2NTM0YmI4YmRiNDlmZDVlOWU2NjMyNzIyYzI5ODk0NjdjMWJmYzhlOGQ5NzhkZmI0MjVkMjY4NWMyNTczIiwKICAgICAgICAgICIweDY0ODRhYTcxNjU0NWNhMmNmM2E3MGMzZmE4ZmUzMzdlMGEzZDIxMTYyZjBkNjI5OWE3YmY4MTkyYmZkMmE3NmYiLAogICAgICAgICAgIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIKICAgICAgICAgIC8vIExBU1QgMQogICAgICAgIF0KICAgICAgXS5tYXAoKGkpID0+IGkubWFwKChqKSA9PiBCaWdJbnQoaikpKSkpKCk7CiAgICAgIG1hcFNXVSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gbWFwVG9DdXJ2ZVNpbXBsZVNXVShGcCwgewogICAgICAgIEE6IEJpZ0ludCgiMHgzZjg3MzFhYmRkNjYxYWRjYTA4YTU1NThmMGY1ZDI3MmU5NTNkMzYzY2I2ZjBlNWQ0MDU0NDdjMDFhNDQ0NTMzIiksCiAgICAgICAgQjogQmlnSW50KCIxNzcxIiksCiAgICAgICAgWjogRnAuY3JlYXRlKEJpZ0ludCgiLTExIikpCiAgICAgIH0pKSgpOwogICAgICBodGYgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IGNyZWF0ZUhhc2hlcihzZWNwMjU2azEuUHJvamVjdGl2ZVBvaW50LCAoc2NhbGFycykgPT4gewogICAgICAgIGNvbnN0IHsgeCwgeSB9ID0gbWFwU1dVKEZwLmNyZWF0ZShzY2FsYXJzWzBdKSk7CiAgICAgICAgcmV0dXJuIGlzb01hcCh4LCB5KTsKICAgICAgfSwgewogICAgICAgIERTVDogInNlY3AyNTZrMV9YTUQ6U0hBLTI1Nl9TU1dVX1JPXyIsCiAgICAgICAgZW5jb2RlRFNUOiAic2VjcDI1NmsxX1hNRDpTSEEtMjU2X1NTV1VfTlVfIiwKICAgICAgICBwOiBGcC5PUkRFUiwKICAgICAgICBtOiAxLAogICAgICAgIGs6IDEyOCwKICAgICAgICBleHBhbmQ6ICJ4bWQiLAogICAgICAgIGhhc2g6IHNoYTI1NgogICAgICB9KSkoKTsKICAgICAgaGFzaFRvQ3VydmUgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IGh0Zi5oYXNoVG9DdXJ2ZSkoKTsKICAgICAgZW5jb2RlVG9DdXJ2ZSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gaHRmLmVuY29kZVRvQ3VydmUpKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL25vZGUuanMKICB2YXIgRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvciwgRmVlQ2FwVG9vSGlnaEVycm9yLCBGZWVDYXBUb29Mb3dFcnJvciwgTm9uY2VUb29IaWdoRXJyb3IsIE5vbmNlVG9vTG93RXJyb3IsIE5vbmNlTWF4VmFsdWVFcnJvciwgSW5zdWZmaWNpZW50RnVuZHNFcnJvciwgSW50cmluc2ljR2FzVG9vSGlnaEVycm9yLCBJbnRyaW5zaWNHYXNUb29Mb3dFcnJvciwgVHJhbnNhY3Rpb25UeXBlTm90U3VwcG9ydGVkRXJyb3IsIFRpcEFib3ZlRmVlQ2FwRXJyb3IsIFVua25vd25Ob2RlRXJyb3I7CiAgdmFyIGluaXRfbm9kZSA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9ub2RlLmpzIigpIHsKICAgICAgaW5pdF9mb3JtYXRHd2VpKCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBFeGVjdXRpb25SZXZlcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhdXNlLCBtZXNzYWdlIH0gPSB7fSkgewogICAgICAgICAgY29uc3QgcmVhc29uID0gbWVzc2FnZT8ucmVwbGFjZSgiZXhlY3V0aW9uIHJldmVydGVkOiAiLCAiIik/LnJlcGxhY2UoImV4ZWN1dGlvbiByZXZlcnRlZCIsICIiKTsKICAgICAgICAgIHN1cGVyKGBFeGVjdXRpb24gcmV2ZXJ0ZWQgJHtyZWFzb24gPyBgd2l0aCByZWFzb246ICR7cmVhc29ufWAgOiAiZm9yIGFuIHVua25vd24gcmVhc29uIn0uYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkV4ZWN1dGlvblJldmVydGVkRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeGVjdXRpb25SZXZlcnRlZEVycm9yLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogMwogICAgICB9KTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4ZWN1dGlvblJldmVydGVkRXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL2V4ZWN1dGlvbiByZXZlcnRlZC8KICAgICAgfSk7CiAgICAgIEZlZUNhcFRvb0hpZ2hFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgbWF4RmVlUGVyR2FzIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYFRoZSBmZWUgY2FwIChcYG1heEZlZVBlckdhc1xgJHttYXhGZWVQZXJHYXMgPyBgID0gJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9IGd3ZWlgIDogIiJ9KSBjYW5ub3QgYmUgaGlnaGVyIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZSAoMl4yNTYtMSkuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkZlZUNhcFRvb0hpZ2hFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZlZUNhcFRvb0hpZ2hFcnJvciwgIm5vZGVNZXNzYWdlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAvbWF4IGZlZSBwZXIgZ2FzIGhpZ2hlciB0aGFuIDJcXjI1Ni0xfGZlZSBjYXAgaGlnaGVyIHRoYW4gMlxeMjU2LTEvCiAgICAgIH0pOwogICAgICBGZWVDYXBUb29Mb3dFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgbWF4RmVlUGVyR2FzIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYFRoZSBmZWUgY2FwIChcYG1heEZlZVBlckdhc1xgJHttYXhGZWVQZXJHYXMgPyBgID0gJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9YCA6ICIifSBnd2VpKSBjYW5ub3QgYmUgbG93ZXIgdGhhbiB0aGUgYmxvY2sgYmFzZSBmZWUuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkZlZUNhcFRvb0xvd0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmVlQ2FwVG9vTG93RXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL21heCBmZWUgcGVyIGdhcyBsZXNzIHRoYW4gYmxvY2sgYmFzZSBmZWV8ZmVlIGNhcCBsZXNzIHRoYW4gYmxvY2sgYmFzZSBmZWV8dHJhbnNhY3Rpb24gaXMgb3V0ZGF0ZWQvCiAgICAgIH0pOwogICAgICBOb25jZVRvb0hpZ2hFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgbm9uY2UgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihgTm9uY2UgcHJvdmlkZWQgZm9yIHRoZSB0cmFuc2FjdGlvbiAke25vbmNlID8gYCgke25vbmNlfSkgYCA6ICIifWlzIGhpZ2hlciB0aGFuIHRoZSBuZXh0IG9uZSBleHBlY3RlZC5gLCB7IGNhdXNlLCBuYW1lOiAiTm9uY2VUb29IaWdoRXJyb3IiIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vbmNlVG9vSGlnaEVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC9ub25jZSB0b28gaGlnaC8KICAgICAgfSk7CiAgICAgIE5vbmNlVG9vTG93RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2F1c2UsIG5vbmNlIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoWwogICAgICAgICAgICBgTm9uY2UgcHJvdmlkZWQgZm9yIHRoZSB0cmFuc2FjdGlvbiAke25vbmNlID8gYCgke25vbmNlfSkgYCA6ICIifWlzIGxvd2VyIHRoYW4gdGhlIGN1cnJlbnQgbm9uY2Ugb2YgdGhlIGFjY291bnQuYCwKICAgICAgICAgICAgIlRyeSBpbmNyZWFzaW5nIHRoZSBub25jZSBvciBmaW5kIHRoZSBsYXRlc3Qgbm9uY2Ugd2l0aCBgZ2V0VHJhbnNhY3Rpb25Db3VudGAuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7IGNhdXNlLCBuYW1lOiAiTm9uY2VUb29Mb3dFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9uY2VUb29Mb3dFcnJvciwgIm5vZGVNZXNzYWdlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAvbm9uY2UgdG9vIGxvd3x0cmFuc2FjdGlvbiBhbHJlYWR5IGltcG9ydGVkfGFscmVhZHkga25vd24vCiAgICAgIH0pOwogICAgICBOb25jZU1heFZhbHVlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2F1c2UsIG5vbmNlIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYE5vbmNlIHByb3ZpZGVkIGZvciB0aGUgdHJhbnNhY3Rpb24gJHtub25jZSA/IGAoJHtub25jZX0pIGAgOiAiIn1leGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbm9uY2UuYCwgeyBjYXVzZSwgbmFtZTogIk5vbmNlTWF4VmFsdWVFcnJvciIgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9uY2VNYXhWYWx1ZUVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC9ub25jZSBoYXMgbWF4IHZhbHVlLwogICAgICB9KTsKICAgICAgSW5zdWZmaWNpZW50RnVuZHNFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSB9ID0ge30pIHsKICAgICAgICAgIHN1cGVyKFsKICAgICAgICAgICAgIlRoZSB0b3RhbCBjb3N0IChnYXMgKiBnYXMgZmVlICsgdmFsdWUpIG9mIGV4ZWN1dGluZyB0aGlzIHRyYW5zYWN0aW9uIGV4Y2VlZHMgdGhlIGJhbGFuY2Ugb2YgdGhlIGFjY291bnQuIgogICAgICAgICAgXS5qb2luKCJcbiIpLCB7CiAgICAgICAgICAgIGNhdXNlLAogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAiVGhpcyBlcnJvciBjb3VsZCBhcmlzZSB3aGVuIHRoZSBhY2NvdW50IGRvZXMgbm90IGhhdmUgZW5vdWdoIGZ1bmRzIHRvOiIsCiAgICAgICAgICAgICAgIiAtIHBheSBmb3IgdGhlIHRvdGFsIGdhcyBmZWUsIiwKICAgICAgICAgICAgICAiIC0gcGF5IGZvciB0aGUgdmFsdWUgdG8gc2VuZC4iLAogICAgICAgICAgICAgICIgIiwKICAgICAgICAgICAgICAiVGhlIGNvc3Qgb2YgdGhlIHRyYW5zYWN0aW9uIGlzIGNhbGN1bGF0ZWQgYXMgYGdhcyAqIGdhcyBmZWUgKyB2YWx1ZWAsIHdoZXJlOiIsCiAgICAgICAgICAgICAgIiAtIGBnYXNgIGlzIHRoZSBhbW91bnQgb2YgZ2FzIG5lZWRlZCBmb3IgdHJhbnNhY3Rpb24gdG8gZXhlY3V0ZSwiLAogICAgICAgICAgICAgICIgLSBgZ2FzIGZlZWAgaXMgdGhlIGdhcyBmZWUsIiwKICAgICAgICAgICAgICAiIC0gYHZhbHVlYCBpcyB0aGUgYW1vdW50IG9mIGV0aGVyIHRvIHNlbmQgdG8gdGhlIHJlY2lwaWVudC4iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG5hbWU6ICJJbnN1ZmZpY2llbnRGdW5kc0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5zdWZmaWNpZW50RnVuZHNFcnJvciwgIm5vZGVNZXNzYWdlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiAvaW5zdWZmaWNpZW50IGZ1bmRzLwogICAgICB9KTsKICAgICAgSW50cmluc2ljR2FzVG9vSGlnaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhdXNlLCBnYXMgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihgVGhlIGFtb3VudCBvZiBnYXMgJHtnYXMgPyBgKCR7Z2FzfSkgYCA6ICIifXByb3ZpZGVkIGZvciB0aGUgdHJhbnNhY3Rpb24gZXhjZWVkcyB0aGUgbGltaXQgYWxsb3dlZCBmb3IgdGhlIGJsb2NrLmAsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIG5hbWU6ICJJbnRyaW5zaWNHYXNUb29IaWdoRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRyaW5zaWNHYXNUb29IaWdoRXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL2ludHJpbnNpYyBnYXMgdG9vIGhpZ2h8Z2FzIGxpbWl0IHJlYWNoZWQvCiAgICAgIH0pOwogICAgICBJbnRyaW5zaWNHYXNUb29Mb3dFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSwgZ2FzIH0gPSB7fSkgewogICAgICAgICAgc3VwZXIoYFRoZSBhbW91bnQgb2YgZ2FzICR7Z2FzID8gYCgke2dhc30pIGAgOiAiIn1wcm92aWRlZCBmb3IgdGhlIHRyYW5zYWN0aW9uIGlzIHRvbyBsb3cuYCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIkludHJpbnNpY0dhc1Rvb0xvd0Vycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW50cmluc2ljR2FzVG9vTG93RXJyb3IsICJub2RlTWVzc2FnZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogL2ludHJpbnNpYyBnYXMgdG9vIGxvdy8KICAgICAgfSk7CiAgICAgIFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhdXNlIH0pIHsKICAgICAgICAgIHN1cGVyKCJUaGUgdHJhbnNhY3Rpb24gdHlwZSBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGNoYWluLiIsIHsKICAgICAgICAgICAgY2F1c2UsCiAgICAgICAgICAgIG5hbWU6ICJUcmFuc2FjdGlvblR5cGVOb3RTdXBwb3J0ZWRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC90cmFuc2FjdGlvbiB0eXBlIG5vdCB2YWxpZC8KICAgICAgfSk7CiAgICAgIFRpcEFib3ZlRmVlQ2FwRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2F1c2UsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBtYXhGZWVQZXJHYXMgfSA9IHt9KSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgIGBUaGUgcHJvdmlkZWQgdGlwIChcYG1heFByaW9yaXR5RmVlUGVyR2FzXGAke21heFByaW9yaXR5RmVlUGVyR2FzID8gYCA9ICR7Zm9ybWF0R3dlaShtYXhQcmlvcml0eUZlZVBlckdhcyl9IGd3ZWlgIDogIiJ9KSBjYW5ub3QgYmUgaGlnaGVyIHRoYW4gdGhlIGZlZSBjYXAgKFxgbWF4RmVlUGVyR2FzXGAke21heEZlZVBlckdhcyA/IGAgPSAke2Zvcm1hdEd3ZWkobWF4RmVlUGVyR2FzKX0gZ3dlaWAgOiAiIn0pLmAKICAgICAgICAgIF0uam9pbigiXG4iKSwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIlRpcEFib3ZlRmVlQ2FwRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUaXBBYm92ZUZlZUNhcEVycm9yLCAibm9kZU1lc3NhZ2UiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IC9tYXggcHJpb3JpdHkgZmVlIHBlciBnYXMgaGlnaGVyIHRoYW4gbWF4IGZlZSBwZXIgZ2FzfHRpcCBoaWdoZXIgdGhhbiBmZWUgY2FwLwogICAgICB9KTsKICAgICAgVW5rbm93bk5vZGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBjYXVzZSB9KSB7CiAgICAgICAgICBzdXBlcihgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZXhlY3V0aW5nOiAke2NhdXNlPy5zaG9ydE1lc3NhZ2V9YCwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbmFtZTogIlVua25vd25Ob2RlRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZXJyb3JzL2dldE5vZGVFcnJvci5qcwogIGZ1bmN0aW9uIGdldE5vZGVFcnJvcihlcnIsIGFyZ3MpIHsKICAgIGNvbnN0IG1lc3NhZ2UgPSAoZXJyLmRldGFpbHMgfHwgIiIpLnRvTG93ZXJDYXNlKCk7CiAgICBjb25zdCBleGVjdXRpb25SZXZlcnRlZEVycm9yID0gZXJyIGluc3RhbmNlb2YgQmFzZUVycm9yMiA/IGVyci53YWxrKChlKSA9PiBlLmNvZGUgPT09IEV4ZWN1dGlvblJldmVydGVkRXJyb3IuY29kZSkgOiBlcnI7CiAgICBpZiAoZXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvciBpbnN0YW5jZW9mIEJhc2VFcnJvcjIpCiAgICAgIHJldHVybiBuZXcgRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvcih7CiAgICAgICAgY2F1c2U6IGVyciwKICAgICAgICBtZXNzYWdlOiBleGVjdXRpb25SZXZlcnRlZEVycm9yLmRldGFpbHMKICAgICAgfSk7CiAgICBpZiAoRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IEV4ZWN1dGlvblJldmVydGVkRXJyb3IoewogICAgICAgIGNhdXNlOiBlcnIsCiAgICAgICAgbWVzc2FnZTogZXJyLmRldGFpbHMKICAgICAgfSk7CiAgICBpZiAoRmVlQ2FwVG9vSGlnaEVycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgRmVlQ2FwVG9vSGlnaEVycm9yKHsKICAgICAgICBjYXVzZTogZXJyLAogICAgICAgIG1heEZlZVBlckdhczogYXJncz8ubWF4RmVlUGVyR2FzCiAgICAgIH0pOwogICAgaWYgKEZlZUNhcFRvb0xvd0Vycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgRmVlQ2FwVG9vTG93RXJyb3IoewogICAgICAgIGNhdXNlOiBlcnIsCiAgICAgICAgbWF4RmVlUGVyR2FzOiBhcmdzPy5tYXhGZWVQZXJHYXMKICAgICAgfSk7CiAgICBpZiAoTm9uY2VUb29IaWdoRXJyb3Iubm9kZU1lc3NhZ2UudGVzdChtZXNzYWdlKSkKICAgICAgcmV0dXJuIG5ldyBOb25jZVRvb0hpZ2hFcnJvcih7IGNhdXNlOiBlcnIsIG5vbmNlOiBhcmdzPy5ub25jZSB9KTsKICAgIGlmIChOb25jZVRvb0xvd0Vycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgTm9uY2VUb29Mb3dFcnJvcih7IGNhdXNlOiBlcnIsIG5vbmNlOiBhcmdzPy5ub25jZSB9KTsKICAgIGlmIChOb25jZU1heFZhbHVlRXJyb3Iubm9kZU1lc3NhZ2UudGVzdChtZXNzYWdlKSkKICAgICAgcmV0dXJuIG5ldyBOb25jZU1heFZhbHVlRXJyb3IoeyBjYXVzZTogZXJyLCBub25jZTogYXJncz8ubm9uY2UgfSk7CiAgICBpZiAoSW5zdWZmaWNpZW50RnVuZHNFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IEluc3VmZmljaWVudEZ1bmRzRXJyb3IoeyBjYXVzZTogZXJyIH0pOwogICAgaWYgKEludHJpbnNpY0dhc1Rvb0hpZ2hFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IEludHJpbnNpY0dhc1Rvb0hpZ2hFcnJvcih7IGNhdXNlOiBlcnIsIGdhczogYXJncz8uZ2FzIH0pOwogICAgaWYgKEludHJpbnNpY0dhc1Rvb0xvd0Vycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgSW50cmluc2ljR2FzVG9vTG93RXJyb3IoeyBjYXVzZTogZXJyLCBnYXM6IGFyZ3M/LmdhcyB9KTsKICAgIGlmIChUcmFuc2FjdGlvblR5cGVOb3RTdXBwb3J0ZWRFcnJvci5ub2RlTWVzc2FnZS50ZXN0KG1lc3NhZ2UpKQogICAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yKHsgY2F1c2U6IGVyciB9KTsKICAgIGlmIChUaXBBYm92ZUZlZUNhcEVycm9yLm5vZGVNZXNzYWdlLnRlc3QobWVzc2FnZSkpCiAgICAgIHJldHVybiBuZXcgVGlwQWJvdmVGZWVDYXBFcnJvcih7CiAgICAgICAgY2F1c2U6IGVyciwKICAgICAgICBtYXhGZWVQZXJHYXM6IGFyZ3M/Lm1heEZlZVBlckdhcywKICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogYXJncz8ubWF4UHJpb3JpdHlGZWVQZXJHYXMKICAgICAgfSk7CiAgICByZXR1cm4gbmV3IFVua25vd25Ob2RlRXJyb3IoewogICAgICBjYXVzZTogZXJyCiAgICB9KTsKICB9CiAgdmFyIGluaXRfZ2V0Tm9kZUVycm9yID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZXJyb3JzL2dldE5vZGVFcnJvci5qcyIoKSB7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X25vZGUoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2V4dHJhY3QuanMKICBmdW5jdGlvbiBleHRyYWN0KHZhbHVlXywgeyBmb3JtYXQgfSkgewogICAgaWYgKCFmb3JtYXQpCiAgICAgIHJldHVybiB7fTsKICAgIGNvbnN0IHZhbHVlID0ge307CiAgICBmdW5jdGlvbiBleHRyYWN0Xyhmb3JtYXR0ZWQyKSB7CiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmb3JtYXR0ZWQyKTsKICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykgewogICAgICAgIGlmIChrZXkgaW4gdmFsdWVfKQogICAgICAgICAgdmFsdWVba2V5XSA9IHZhbHVlX1trZXldOwogICAgICAgIGlmIChmb3JtYXR0ZWQyW2tleV0gJiYgdHlwZW9mIGZvcm1hdHRlZDJba2V5XSA9PT0gIm9iamVjdCIgJiYgIUFycmF5LmlzQXJyYXkoZm9ybWF0dGVkMltrZXldKSkKICAgICAgICAgIGV4dHJhY3RfKGZvcm1hdHRlZDJba2V5XSk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdCh2YWx1ZV8gfHwge30pOwogICAgZXh0cmFjdF8oZm9ybWF0dGVkKTsKICAgIHJldHVybiB2YWx1ZTsKICB9CiAgdmFyIGluaXRfZXh0cmFjdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Zvcm1hdHRlcnMvZXh0cmFjdC5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZm9ybWF0dGVycy9mb3JtYXR0ZXIuanMKICBmdW5jdGlvbiBkZWZpbmVGb3JtYXR0ZXIodHlwZSwgZm9ybWF0KSB7CiAgICByZXR1cm4gKHsgZXhjbHVkZSwgZm9ybWF0OiBvdmVycmlkZXMgfSkgPT4gewogICAgICByZXR1cm4gewogICAgICAgIGV4Y2x1ZGUsCiAgICAgICAgZm9ybWF0OiAoYXJncykgPT4gewogICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0KGFyZ3MpOwogICAgICAgICAgaWYgKGV4Y2x1ZGUpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZXhjbHVkZSkgewogICAgICAgICAgICAgIGRlbGV0ZSBmb3JtYXR0ZWRba2V5XTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgLi4uZm9ybWF0dGVkLAogICAgICAgICAgICAuLi5vdmVycmlkZXMoYXJncykKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICB0eXBlCiAgICAgIH07CiAgICB9OwogIH0KICB2YXIgaW5pdF9mb3JtYXR0ZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2Zvcm1hdHRlci5qcyIoKSB7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZm9ybWF0dGVycy90cmFuc2FjdGlvblJlcXVlc3QuanMKICBmdW5jdGlvbiBmb3JtYXRUcmFuc2FjdGlvblJlcXVlc3QocmVxdWVzdCkgewogICAgY29uc3QgcnBjUmVxdWVzdCA9IHt9OwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LmF1dGhvcml6YXRpb25MaXN0ICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5hdXRob3JpemF0aW9uTGlzdCA9IGZvcm1hdEF1dGhvcml6YXRpb25MaXN0KHJlcXVlc3QuYXV0aG9yaXphdGlvbkxpc3QpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LmFjY2Vzc0xpc3QgIT09ICJ1bmRlZmluZWQiKQogICAgICBycGNSZXF1ZXN0LmFjY2Vzc0xpc3QgPSByZXF1ZXN0LmFjY2Vzc0xpc3Q7CiAgICBpZiAodHlwZW9mIHJlcXVlc3QuYmxvYlZlcnNpb25lZEhhc2hlcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QuYmxvYlZlcnNpb25lZEhhc2hlcyA9IHJlcXVlc3QuYmxvYlZlcnNpb25lZEhhc2hlczsKICAgIGlmICh0eXBlb2YgcmVxdWVzdC5ibG9icyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0LmJsb2JzWzBdICE9PSAic3RyaW5nIikKICAgICAgICBycGNSZXF1ZXN0LmJsb2JzID0gcmVxdWVzdC5ibG9icy5tYXAoKHgpID0+IGJ5dGVzVG9IZXgoeCkpOwogICAgICBlbHNlCiAgICAgICAgcnBjUmVxdWVzdC5ibG9icyA9IHJlcXVlc3QuYmxvYnM7CiAgICB9CiAgICBpZiAodHlwZW9mIHJlcXVlc3QuZGF0YSAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QuZGF0YSA9IHJlcXVlc3QuZGF0YTsKICAgIGlmICh0eXBlb2YgcmVxdWVzdC5mcm9tICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5mcm9tID0gcmVxdWVzdC5mcm9tOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LmdhcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QuZ2FzID0gbnVtYmVyVG9IZXgocmVxdWVzdC5nYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lmdhc1ByaWNlICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5nYXNQcmljZSA9IG51bWJlclRvSGV4KHJlcXVlc3QuZ2FzUHJpY2UpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm1heEZlZVBlckJsb2JHYXMgIT09ICJ1bmRlZmluZWQiKQogICAgICBycGNSZXF1ZXN0Lm1heEZlZVBlckJsb2JHYXMgPSBudW1iZXJUb0hleChyZXF1ZXN0Lm1heEZlZVBlckJsb2JHYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm1heEZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QubWF4RmVlUGVyR2FzID0gbnVtYmVyVG9IZXgocmVxdWVzdC5tYXhGZWVQZXJHYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm1heFByaW9yaXR5RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5tYXhQcmlvcml0eUZlZVBlckdhcyA9IG51bWJlclRvSGV4KHJlcXVlc3QubWF4UHJpb3JpdHlGZWVQZXJHYXMpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0Lm5vbmNlICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC5ub25jZSA9IG51bWJlclRvSGV4KHJlcXVlc3Qubm9uY2UpOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LnRvICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC50byA9IHJlcXVlc3QudG87CiAgICBpZiAodHlwZW9mIHJlcXVlc3QudHlwZSAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJwY1JlcXVlc3QudHlwZSA9IHJwY1RyYW5zYWN0aW9uVHlwZVtyZXF1ZXN0LnR5cGVdOwogICAgaWYgKHR5cGVvZiByZXF1ZXN0LnZhbHVlICE9PSAidW5kZWZpbmVkIikKICAgICAgcnBjUmVxdWVzdC52YWx1ZSA9IG51bWJlclRvSGV4KHJlcXVlc3QudmFsdWUpOwogICAgcmV0dXJuIHJwY1JlcXVlc3Q7CiAgfQogIGZ1bmN0aW9uIGZvcm1hdEF1dGhvcml6YXRpb25MaXN0KGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICByZXR1cm4gYXV0aG9yaXphdGlvbkxpc3QubWFwKChhdXRob3JpemF0aW9uKSA9PiAoewogICAgICBhZGRyZXNzOiBhdXRob3JpemF0aW9uLmNvbnRyYWN0QWRkcmVzcywKICAgICAgcjogYXV0aG9yaXphdGlvbi5yLAogICAgICBzOiBhdXRob3JpemF0aW9uLnMsCiAgICAgIGNoYWluSWQ6IG51bWJlclRvSGV4KGF1dGhvcml6YXRpb24uY2hhaW5JZCksCiAgICAgIG5vbmNlOiBudW1iZXJUb0hleChhdXRob3JpemF0aW9uLm5vbmNlKSwKICAgICAgLi4udHlwZW9mIGF1dGhvcml6YXRpb24ueVBhcml0eSAhPT0gInVuZGVmaW5lZCIgPyB7IHlQYXJpdHk6IG51bWJlclRvSGV4KGF1dGhvcml6YXRpb24ueVBhcml0eSkgfSA6IHt9LAogICAgICAuLi50eXBlb2YgYXV0aG9yaXphdGlvbi52ICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgYXV0aG9yaXphdGlvbi55UGFyaXR5ID09PSAidW5kZWZpbmVkIiA/IHsgdjogbnVtYmVyVG9IZXgoYXV0aG9yaXphdGlvbi52KSB9IDoge30KICAgIH0pKTsKICB9CiAgdmFyIHJwY1RyYW5zYWN0aW9uVHlwZSwgZGVmaW5lVHJhbnNhY3Rpb25SZXF1ZXN0OwogIHZhciBpbml0X3RyYW5zYWN0aW9uUmVxdWVzdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Zvcm1hdHRlcnMvdHJhbnNhY3Rpb25SZXF1ZXN0LmpzIigpIHsKICAgICAgaW5pdF90b0hleCgpOwogICAgICBpbml0X2Zvcm1hdHRlcigpOwogICAgICBycGNUcmFuc2FjdGlvblR5cGUgPSB7CiAgICAgICAgbGVnYWN5OiAiMHgwIiwKICAgICAgICBlaXAyOTMwOiAiMHgxIiwKICAgICAgICBlaXAxNTU5OiAiMHgyIiwKICAgICAgICBlaXA0ODQ0OiAiMHgzIiwKICAgICAgICBlaXA3NzAyOiAiMHg0IgogICAgICB9OwogICAgICBkZWZpbmVUcmFuc2FjdGlvblJlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lRm9ybWF0dGVyKCJ0cmFuc2FjdGlvblJlcXVlc3QiLCBmb3JtYXRUcmFuc2FjdGlvblJlcXVlc3QpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3N0YXRlT3ZlcnJpZGUuanMKICBmdW5jdGlvbiBzZXJpYWxpemVTdGF0ZU1hcHBpbmcoc3RhdGVNYXBwaW5nKSB7CiAgICBpZiAoIXN0YXRlTWFwcGluZyB8fCBzdGF0ZU1hcHBpbmcubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gdm9pZCAwOwogICAgcmV0dXJuIHN0YXRlTWFwcGluZy5yZWR1Y2UoKGFjYywgeyBzbG90LCB2YWx1ZSB9KSA9PiB7CiAgICAgIGlmIChzbG90Lmxlbmd0aCAhPT0gNjYpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRCeXRlc0xlbmd0aEVycm9yKHsKICAgICAgICAgIHNpemU6IHNsb3QubGVuZ3RoLAogICAgICAgICAgdGFyZ2V0U2l6ZTogNjYsCiAgICAgICAgICB0eXBlOiAiaGV4IgogICAgICAgIH0pOwogICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSA2NikKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEJ5dGVzTGVuZ3RoRXJyb3IoewogICAgICAgICAgc2l6ZTogdmFsdWUubGVuZ3RoLAogICAgICAgICAgdGFyZ2V0U2l6ZTogNjYsCiAgICAgICAgICB0eXBlOiAiaGV4IgogICAgICAgIH0pOwogICAgICBhY2Nbc2xvdF0gPSB2YWx1ZTsKICAgICAgcmV0dXJuIGFjYzsKICAgIH0sIHt9KTsKICB9CiAgZnVuY3Rpb24gc2VyaWFsaXplQWNjb3VudFN0YXRlT3ZlcnJpZGUocGFyYW1ldGVycykgewogICAgY29uc3QgeyBiYWxhbmNlLCBub25jZSwgc3RhdGUsIHN0YXRlRGlmZiwgY29kZSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlID0ge307CiAgICBpZiAoY29kZSAhPT0gdm9pZCAwKQogICAgICBycGNBY2NvdW50U3RhdGVPdmVycmlkZS5jb2RlID0gY29kZTsKICAgIGlmIChiYWxhbmNlICE9PSB2b2lkIDApCiAgICAgIHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlLmJhbGFuY2UgPSBudW1iZXJUb0hleChiYWxhbmNlKTsKICAgIGlmIChub25jZSAhPT0gdm9pZCAwKQogICAgICBycGNBY2NvdW50U3RhdGVPdmVycmlkZS5ub25jZSA9IG51bWJlclRvSGV4KG5vbmNlKTsKICAgIGlmIChzdGF0ZSAhPT0gdm9pZCAwKQogICAgICBycGNBY2NvdW50U3RhdGVPdmVycmlkZS5zdGF0ZSA9IHNlcmlhbGl6ZVN0YXRlTWFwcGluZyhzdGF0ZSk7CiAgICBpZiAoc3RhdGVEaWZmICE9PSB2b2lkIDApIHsKICAgICAgaWYgKHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlLnN0YXRlKQogICAgICAgIHRocm93IG5ldyBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yKCk7CiAgICAgIHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlLnN0YXRlRGlmZiA9IHNlcmlhbGl6ZVN0YXRlTWFwcGluZyhzdGF0ZURpZmYpOwogICAgfQogICAgcmV0dXJuIHJwY0FjY291bnRTdGF0ZU92ZXJyaWRlOwogIH0KICBmdW5jdGlvbiBzZXJpYWxpemVTdGF0ZU92ZXJyaWRlKHBhcmFtZXRlcnMpIHsKICAgIGlmICghcGFyYW1ldGVycykKICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIGNvbnN0IHJwY1N0YXRlT3ZlcnJpZGUgPSB7fTsKICAgIGZvciAoY29uc3QgeyBhZGRyZXNzLCAuLi5hY2NvdW50U3RhdGUgfSBvZiBwYXJhbWV0ZXJzKSB7CiAgICAgIGlmICghaXNBZGRyZXNzKGFkZHJlc3MsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3MgfSk7CiAgICAgIGlmIChycGNTdGF0ZU92ZXJyaWRlW2FkZHJlc3NdKQogICAgICAgIHRocm93IG5ldyBBY2NvdW50U3RhdGVDb25mbGljdEVycm9yKHsgYWRkcmVzcyB9KTsKICAgICAgcnBjU3RhdGVPdmVycmlkZVthZGRyZXNzXSA9IHNlcmlhbGl6ZUFjY291bnRTdGF0ZU92ZXJyaWRlKGFjY291bnRTdGF0ZSk7CiAgICB9CiAgICByZXR1cm4gcnBjU3RhdGVPdmVycmlkZTsKICB9CiAgdmFyIGluaXRfc3RhdGVPdmVycmlkZTIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zdGF0ZU92ZXJyaWRlLmpzIigpIHsKICAgICAgaW5pdF9hZGRyZXNzKCk7CiAgICAgIGluaXRfZGF0YSgpOwogICAgICBpbml0X3N0YXRlT3ZlcnJpZGUoKTsKICAgICAgaW5pdF9pc0FkZHJlc3MoKTsKICAgICAgaW5pdF90b0hleCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL2Fzc2VydFJlcXVlc3QuanMKICBmdW5jdGlvbiBhc3NlcnRSZXF1ZXN0KGFyZ3MpIHsKICAgIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudF8sIGdhc1ByaWNlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCB0byB9ID0gYXJnczsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICBpZiAoYWNjb3VudCAmJiAhaXNBZGRyZXNzKGFjY291bnQuYWRkcmVzcykpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogYWNjb3VudC5hZGRyZXNzIH0pOwogICAgaWYgKHRvICYmICFpc0FkZHJlc3ModG8pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IHRvIH0pOwogICAgaWYgKHR5cGVvZiBnYXNQcmljZSAhPT0gInVuZGVmaW5lZCIgJiYgKHR5cGVvZiBtYXhGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiBtYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpKQogICAgICB0aHJvdyBuZXcgRmVlQ29uZmxpY3RFcnJvcigpOwogICAgaWYgKG1heEZlZVBlckdhcyAmJiBtYXhGZWVQZXJHYXMgPiAybiAqKiAyNTZuIC0gMW4pCiAgICAgIHRocm93IG5ldyBGZWVDYXBUb29IaWdoRXJyb3IoeyBtYXhGZWVQZXJHYXMgfSk7CiAgICBpZiAobWF4UHJpb3JpdHlGZWVQZXJHYXMgJiYgbWF4RmVlUGVyR2FzICYmIG1heFByaW9yaXR5RmVlUGVyR2FzID4gbWF4RmVlUGVyR2FzKQogICAgICB0aHJvdyBuZXcgVGlwQWJvdmVGZWVDYXBFcnJvcih7IG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMgfSk7CiAgfQogIHZhciBpbml0X2Fzc2VydFJlcXVlc3QgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9hc3NlcnRSZXF1ZXN0LmpzIigpIHsKICAgICAgaW5pdF9wYXJzZUFjY291bnQoKTsKICAgICAgaW5pdF9hZGRyZXNzKCk7CiAgICAgIGluaXRfbm9kZSgpOwogICAgICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgICAgIGluaXRfaXNBZGRyZXNzKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9pc0FkZHJlc3NFcXVhbC5qcwogIGZ1bmN0aW9uIGlzQWRkcmVzc0VxdWFsKGEsIGIpIHsKICAgIGlmICghaXNBZGRyZXNzKGEsIHsgc3RyaWN0OiBmYWxzZSB9KSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiBhIH0pOwogICAgaWYgKCFpc0FkZHJlc3MoYiwgeyBzdHJpY3Q6IGZhbHNlIH0pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IGIgfSk7CiAgICByZXR1cm4gYS50b0xvd2VyQ2FzZSgpID09PSBiLnRvTG93ZXJDYXNlKCk7CiAgfQogIHZhciBpbml0X2lzQWRkcmVzc0VxdWFsID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9pc0FkZHJlc3NFcXVhbC5qcyIoKSB7CiAgICAgIGluaXRfYWRkcmVzcygpOwogICAgICBpbml0X2lzQWRkcmVzcygpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9kZWNvZGVGdW5jdGlvblJlc3VsdC5qcwogIGZ1bmN0aW9uIGRlY29kZUZ1bmN0aW9uUmVzdWx0KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhcmdzLCBmdW5jdGlvbk5hbWUsIGRhdGEgfSA9IHBhcmFtZXRlcnM7CiAgICBsZXQgYWJpSXRlbSA9IGFiaTJbMF07CiAgICBpZiAoZnVuY3Rpb25OYW1lKSB7CiAgICAgIGNvbnN0IGl0ZW0gPSBnZXRBYmlJdGVtKHsgYWJpOiBhYmkyLCBhcmdzLCBuYW1lOiBmdW5jdGlvbk5hbWUgfSk7CiAgICAgIGlmICghaXRlbSkKICAgICAgICB0aHJvdyBuZXcgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yKGZ1bmN0aW9uTmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg0IH0pOwogICAgICBhYmlJdGVtID0gaXRlbTsKICAgIH0KICAgIGlmIChhYmlJdGVtLnR5cGUgIT09ICJmdW5jdGlvbiIpCiAgICAgIHRocm93IG5ldyBBYmlGdW5jdGlvbk5vdEZvdW5kRXJyb3Iodm9pZCAwLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDQgfSk7CiAgICBpZiAoIWFiaUl0ZW0ub3V0cHV0cykKICAgICAgdGhyb3cgbmV3IEFiaUZ1bmN0aW9uT3V0cHV0c05vdEZvdW5kRXJyb3IoYWJpSXRlbS5uYW1lLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDQgfSk7CiAgICBjb25zdCB2YWx1ZXMgPSBkZWNvZGVBYmlQYXJhbWV0ZXJzKGFiaUl0ZW0ub3V0cHV0cywgZGF0YSk7CiAgICBpZiAodmFsdWVzICYmIHZhbHVlcy5sZW5ndGggPiAxKQogICAgICByZXR1cm4gdmFsdWVzOwogICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID09PSAxKQogICAgICByZXR1cm4gdmFsdWVzWzBdOwogICAgcmV0dXJuIHZvaWQgMDsKICB9CiAgdmFyIGRvY3NQYXRoNDsKICB2YXIgaW5pdF9kZWNvZGVGdW5jdGlvblJlc3VsdCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9kZWNvZGVGdW5jdGlvblJlc3VsdC5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfZGVjb2RlQWJpUGFyYW1ldGVycygpOwogICAgICBpbml0X2dldEFiaUl0ZW0oKTsKICAgICAgZG9jc1BhdGg0ID0gIi9kb2NzL2NvbnRyYWN0L2RlY29kZUZ1bmN0aW9uUmVzdWx0IjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMvYWJpcy5qcwogIHZhciBtdWx0aWNhbGwzQWJpLCB1bml2ZXJzYWxSZXNvbHZlckVycm9ycywgdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpLCB1bml2ZXJzYWxSZXNvbHZlclJldmVyc2VBYmksIHRleHRSZXNvbHZlckFiaSwgYWRkcmVzc1Jlc29sdmVyQWJpLCB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JBYmksIGVyYzIwQWJpLCBlcmMyMEFiaV9ieXRlczMyLCBlcmM3MjFBYmksIGVyYzQ2MjZBYmk7CiAgdmFyIGluaXRfYWJpcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9hYmlzLmpzIigpIHsKICAgICAgbXVsdGljYWxsM0FiaSA9IFsKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbXBvbmVudHM6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogInRhcmdldCIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogImFsbG93RmFpbHVyZSIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogImNhbGxEYXRhIiwKICAgICAgICAgICAgICAgICAgdHlwZTogImJ5dGVzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgbmFtZTogImNhbGxzIiwKICAgICAgICAgICAgICB0eXBlOiAidHVwbGVbXSIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJhZ2dyZWdhdGUzIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbXBvbmVudHM6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogInN1Y2Nlc3MiLAogICAgICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIG5hbWU6ICJyZXR1cm5EYXRhIiwKICAgICAgICAgICAgICAgICAgdHlwZTogImJ5dGVzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgbmFtZTogInJldHVybkRhdGEiLAogICAgICAgICAgICAgIHR5cGU6ICJ0dXBsZVtdIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfQogICAgICBdOwogICAgICB1bml2ZXJzYWxSZXNvbHZlckVycm9ycyA9IFsKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogIlJlc29sdmVyTm90Rm91bmQiLAogICAgICAgICAgdHlwZTogImVycm9yIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG5hbWU6ICJSZXNvbHZlcldpbGRjYXJkTm90U3VwcG9ydGVkIiwKICAgICAgICAgIHR5cGU6ICJlcnJvciIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBuYW1lOiAiUmVzb2x2ZXJOb3RDb250cmFjdCIsCiAgICAgICAgICB0eXBlOiAiZXJyb3IiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJyZXR1cm5EYXRhIiwKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiUmVzb2x2ZXJFcnJvciIsCiAgICAgICAgICB0eXBlOiAiZXJyb3IiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbXBvbmVudHM6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogInN0YXR1cyIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJ1aW50MTYiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBuYW1lOiAibWVzc2FnZSIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICBuYW1lOiAiZXJyb3JzIiwKICAgICAgICAgICAgICB0eXBlOiAidHVwbGVbXSIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJIdHRwRXJyb3IiLAogICAgICAgICAgdHlwZTogImVycm9yIgogICAgICAgIH0KICAgICAgXTsKICAgICAgdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpID0gWwogICAgICAgIC4uLnVuaXZlcnNhbFJlc29sdmVyRXJyb3JzLAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJyZXNvbHZlIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICJuYW1lIiwgdHlwZTogImJ5dGVzIiB9LAogICAgICAgICAgICB7IG5hbWU6ICJkYXRhIiwgdHlwZTogImJ5dGVzIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICIiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImFkZHJlc3MiLCB0eXBlOiAiYWRkcmVzcyIgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogInJlc29sdmUiLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsgbmFtZTogIm5hbWUiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImRhdGEiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImdhdGV3YXlzIiwgdHlwZTogInN0cmluZ1tdIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICIiLCB0eXBlOiAiYnl0ZXMiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImFkZHJlc3MiLCB0eXBlOiAiYWRkcmVzcyIgfQogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXTsKICAgICAgdW5pdmVyc2FsUmVzb2x2ZXJSZXZlcnNlQWJpID0gWwogICAgICAgIC4uLnVuaXZlcnNhbFJlc29sdmVyRXJyb3JzLAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJyZXZlcnNlIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW3sgdHlwZTogImJ5dGVzIiwgbmFtZTogInJldmVyc2VOYW1lIiB9XSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgeyB0eXBlOiAic3RyaW5nIiwgbmFtZTogInJlc29sdmVkTmFtZSIgfSwKICAgICAgICAgICAgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJyZXNvbHZlZEFkZHJlc3MiIH0sCiAgICAgICAgICAgIHsgdHlwZTogImFkZHJlc3MiLCBuYW1lOiAicmV2ZXJzZVJlc29sdmVyIiB9LAogICAgICAgICAgICB7IHR5cGU6ICJhZGRyZXNzIiwgbmFtZTogInJlc29sdmVyIiB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAicmV2ZXJzZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgeyB0eXBlOiAiYnl0ZXMiLCBuYW1lOiAicmV2ZXJzZU5hbWUiIH0sCiAgICAgICAgICAgIHsgdHlwZTogInN0cmluZ1tdIiwgbmFtZTogImdhdGV3YXlzIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7IHR5cGU6ICJzdHJpbmciLCBuYW1lOiAicmVzb2x2ZWROYW1lIiB9LAogICAgICAgICAgICB7IHR5cGU6ICJhZGRyZXNzIiwgbmFtZTogInJlc29sdmVkQWRkcmVzcyIgfSwKICAgICAgICAgICAgeyB0eXBlOiAiYWRkcmVzcyIsIG5hbWU6ICJyZXZlcnNlUmVzb2x2ZXIiIH0sCiAgICAgICAgICAgIHsgdHlwZTogImFkZHJlc3MiLCBuYW1lOiAicmVzb2x2ZXIiIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF07CiAgICAgIHRleHRSZXNvbHZlckFiaSA9IFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAidGV4dCIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgeyBuYW1lOiAibmFtZSIsIHR5cGU6ICJieXRlczMyIiB9LAogICAgICAgICAgICB7IG5hbWU6ICJrZXkiLCB0eXBlOiAic3RyaW5nIiB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogW3sgbmFtZTogIiIsIHR5cGU6ICJzdHJpbmciIH1dCiAgICAgICAgfQogICAgICBdOwogICAgICBhZGRyZXNzUmVzb2x2ZXJBYmkgPSBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogImFkZHIiLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbeyBuYW1lOiAibmFtZSIsIHR5cGU6ICJieXRlczMyIiB9XSwKICAgICAgICAgIG91dHB1dHM6IFt7IG5hbWU6ICIiLCB0eXBlOiAiYWRkcmVzcyIgfV0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJhZGRyIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7IG5hbWU6ICJuYW1lIiwgdHlwZTogImJ5dGVzMzIiIH0sCiAgICAgICAgICAgIHsgbmFtZTogImNvaW5UeXBlIiwgdHlwZTogInVpbnQyNTYiIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbeyBuYW1lOiAiIiwgdHlwZTogImJ5dGVzIiB9XQogICAgICAgIH0KICAgICAgXTsKICAgICAgdW5pdmVyc2FsU2lnbmF0dXJlVmFsaWRhdG9yQWJpID0gWwogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIl9zaWduZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIl9oYXNoIiwKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMzMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJfc2lnbmF0dXJlIiwKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIHR5cGU6ICJjb25zdHJ1Y3RvciIKICAgICAgICB9CiAgICAgIF07CiAgICAgIGVyYzIwQWJpID0gWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiQXBwcm92YWwiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYWxsb3dhbmNlIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYXBwcm92ZSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJiYWxhbmNlT2YiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhY2NvdW50IiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImRlY2ltYWxzIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50OCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJuYW1lIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAic3ltYm9sIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidG90YWxTdXBwbHkiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidHJhbnNmZXIiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJyZWNpcGllbnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJ0cmFuc2ZlckZyb20iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2lwaWVudCIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfQogICAgICBdOwogICAgICBlcmMyMEFiaV9ieXRlczMyID0gWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiQXBwcm92YWwiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYWxsb3dhbmNlIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiYXBwcm92ZSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJiYWxhbmNlT2YiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhY2NvdW50IiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImRlY2ltYWxzIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50OCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJuYW1lIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgaW5wdXRzOiBbXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJieXRlczMyIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInN5bWJvbCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYnl0ZXMzMiIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJ0b3RhbFN1cHBseSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIiwKICAgICAgICAgIG5hbWU6ICJ0cmFuc2ZlciIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2lwaWVudCIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInRyYW5zZmVyRnJvbSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNlbmRlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAicmVjaXBpZW50IiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhbW91bnQiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogImJvb2wiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF07CiAgICAgIGVyYzcyMUFiaSA9IFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZXZlbnQiLAogICAgICAgICAgbmFtZTogIkFwcHJvdmFsIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAic3BlbmRlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImV2ZW50IiwKICAgICAgICAgIG5hbWU6ICJBcHByb3ZhbEZvckFsbCIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogIm93bmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogIm9wZXJhdG9yIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJhcHByb3ZlZCIsCiAgICAgICAgICAgICAgdHlwZTogImJvb2wiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRva2VuSWQiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImFwcHJvdmUiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAicGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImJhbGFuY2VPZiIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFjY291bnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAiZ2V0QXBwcm92ZWQiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogImlzQXBwcm92ZWRGb3JBbGwiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3BlcmF0b3IiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogImJvb2wiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAibmFtZSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogIm93bmVyT2YiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAic2FmZVRyYW5zZmVyRnJvbSIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJwYXlhYmxlIiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImZyb20iLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInNhZmVUcmFuc2ZlckZyb20iLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0byIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiaWQiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImRhdGEiLAogICAgICAgICAgICAgIHR5cGU6ICJieXRlcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInNldEFwcHJvdmFsRm9yQWxsIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogIm5vbnBheWFibGUiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3BlcmF0b3IiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFwcHJvdmVkIiwKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFtdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInN5bWJvbCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogW10sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInRva2VuQnlJbmRleCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImluZGV4IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICAgICAgbmFtZTogInRva2VuQnlJbmRleCIsCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIm93bmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJpbmRleCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAidG9rZW5JZCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidG9rZW5VUkkiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b2tlbklkIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidG90YWxTdXBwbHkiLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICBuYW1lOiAidHJhbnNmZXJGcm9tIiwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInBheWFibGUiLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJyZWNpcGllbnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInRva2VJZCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBvdXRwdXRzOiBbXQogICAgICAgIH0KICAgICAgXTsKICAgICAgZXJjNDYyNkFiaSA9IFsKICAgICAgICB7CiAgICAgICAgICBhbm9ueW1vdXM6IGZhbHNlLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJzcGVuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiQXBwcm92YWwiLAogICAgICAgICAgdHlwZTogImV2ZW50IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgYW5vbnltb3VzOiBmYWxzZSwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogZmFsc2UsCiAgICAgICAgICAgICAgbmFtZTogInNoYXJlcyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiRGVwb3NpdCIsCiAgICAgICAgICB0eXBlOiAiZXZlbnQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBhbm9ueW1vdXM6IGZhbHNlLAogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbmRleGVkOiB0cnVlLAogICAgICAgICAgICAgIG5hbWU6ICJmcm9tIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInRvIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJ2YWx1ZSIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiVHJhbnNmZXIiLAogICAgICAgICAgdHlwZTogImV2ZW50IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgYW5vbnltb3VzOiBmYWxzZSwKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogdHJ1ZSwKICAgICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IHRydWUsCiAgICAgICAgICAgICAgbmFtZTogIm93bmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGluZGV4ZWQ6IGZhbHNlLAogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW5kZXhlZDogZmFsc2UsCiAgICAgICAgICAgICAgbmFtZTogInNoYXJlcyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiV2l0aGRyYXciLAogICAgICAgICAgdHlwZTogImV2ZW50IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNwZW5kZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogImFsbG93YW5jZSIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAic3BlbmRlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJhcHByb3ZlIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogImFzc2V0IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldFRva2VuQWRkcmVzcyIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFjY291bnQiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogImJhbGFuY2VPZiIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAic2hhcmVzIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJjb252ZXJ0VG9Bc3NldHMiLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAiY29udmVydFRvU2hhcmVzIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJkZXBvc2l0IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJjYWxsZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogIm1heERlcG9zaXQiLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIm1heEFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImNhbGxlciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAibWF4TWludCIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAibWF4U2hhcmVzIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogIm1heFJlZGVlbSIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAibWF4U2hhcmVzIiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAib3duZXIiLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogIm1heFdpdGhkcmF3IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJtYXhBc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJtaW50IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogInByZXZpZXdEZXBvc2l0IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogInByZXZpZXdNaW50IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgbmFtZTogInByZXZpZXdSZWRlZW0iLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJ2aWV3IiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlucHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFzc2V0cyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAicHJldmlld1dpdGhkcmF3IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJzaGFyZXMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAicmVkZWVtIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogInRvdGFsQXNzZXRzIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0b3RhbE1hbmFnZWRBc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFtdLAogICAgICAgICAgbmFtZTogInRvdGFsU3VwcGx5IiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ0byIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYW1vdW50IiwKICAgICAgICAgICAgICB0eXBlOiAidWludDI1NiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIG5hbWU6ICJ0cmFuc2ZlciIsCiAgICAgICAgICBvdXRwdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiYm9vbCIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogIm5vbnBheWFibGUiLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaW5wdXRzOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiZnJvbSIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAidG8iLAogICAgICAgICAgICAgIHR5cGU6ICJhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFtb3VudCIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAidHJhbnNmZXJGcm9tIiwKICAgICAgICAgIG91dHB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJib29sIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgc3RhdGVNdXRhYmlsaXR5OiAibm9ucGF5YWJsZSIsCiAgICAgICAgICB0eXBlOiAiZnVuY3Rpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJhc3NldHMiLAogICAgICAgICAgICAgIHR5cGU6ICJ1aW50MjU2IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVyIiwKICAgICAgICAgICAgICB0eXBlOiAiYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvd25lciIsCiAgICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBuYW1lOiAid2l0aGRyYXciLAogICAgICAgICAgb3V0cHV0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInNoYXJlcyIsCiAgICAgICAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBzdGF0ZU11dGFiaWxpdHk6ICJub25wYXlhYmxlIiwKICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgICAgICB9CiAgICAgIF07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2NvbnRyYWN0LmpzCiAgdmFyIGFnZ3JlZ2F0ZTNTaWduYXR1cmU7CiAgdmFyIGluaXRfY29udHJhY3QyID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2NvbnRyYWN0LmpzIigpIHsKICAgICAgYWdncmVnYXRlM1NpZ25hdHVyZSA9ICIweDgyYWQ1NmNiIjsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMvY29udHJhY3RzLmpzCiAgdmFyIGRlcGxveWxlc3NDYWxsVmlhQnl0ZWNvZGVCeXRlY29kZSwgZGVwbG95bGVzc0NhbGxWaWFGYWN0b3J5Qnl0ZWNvZGUsIHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckJ5dGVDb2RlOwogIHZhciBpbml0X2NvbnRyYWN0cyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9jb250cmFjdHMuanMiKCkgewogICAgICBkZXBsb3lsZXNzQ2FsbFZpYUJ5dGVjb2RlQnl0ZWNvZGUgPSAiMHg2MDgwNjA0MDUyMzQ4MDE1NjEwMDEwNTc2MDAwODBmZDViNTA2MDQwNTE2MTAxOGUzODAzODA2MTAxOGU4MzM5ODEwMTYwNDA4MTkwNTI2MTAwMmY5MTYxMDEyNDU2NWI2MDAwODA4MzUxNjAyMDg1MDE2MDAwZjU5MDUwODAzYjYxMDA0ODU3NjAwMDgwZmQ1YjYwMDA4MDgzNTE2MDIwODUwMTYwMDA4NTVhZjE2MDQwNTEzZDYwMDA4MjNlODE2MTAwNjc1NzNkODFmZDViM2Q4MWYzNWI2MzRlNDg3YjcxNjBlMDFiNjAwMDUyNjA0MTYwMDQ1MjYwMjQ2MDAwZmQ1YjYwMDA4MjYwMWY4MzAxMTI2MTAwOTI1NzYwMDA4MGZkNWI4MTUxNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDBhYjU3NjEwMGFiNjEwMDZiNTY1YjYwNDA1MTYwMWY4MjAxNjAxZjE5OTA4MTE2NjAzZjAxMTY4MTAxNjAwMTYwMDE2MDQwMWIwMzgxMTE4MjgyMTAxNzE1NjEwMGQ5NTc2MTAwZDk2MTAwNmI1NjViNjA0MDUyODE4MTUyODM4MjAxNjAyMDAxODUxMDE1NjEwMGYxNTc2MDAwODBmZDViNjAwMDViODI4MTEwMTU2MTAxMTA1NzYwMjA4MTg2MDE4MTAxNTE4MzgzMDE4MjAxNTIwMTYxMDBmNDU2NWI1MDYwMDA5MTgxMDE2MDIwMDE5MTkwOTE1MjkzOTI1MDUwNTA1NjViNjAwMDgwNjA0MDgzODUwMzEyMTU2MTAxMzc1NzYwMDA4MGZkNWI4MjUxNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDE0ZDU3NjAwMDgwZmQ1YjYxMDE1OTg1ODI4NjAxNjEwMDgxNTY1YjYwMjA4NTAxNTE5MDkzNTA5MDUwNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDE3NzU3NjAwMDgwZmQ1YjYxMDE4Mzg1ODI4NjAxNjEwMDgxNTY1YjkxNTA1MDkyNTA5MjkwNTA1NmZlIjsKICAgICAgZGVwbG95bGVzc0NhbGxWaWFGYWN0b3J5Qnl0ZWNvZGUgPSAiMHg2MDgwNjA0MDUyMzQ4MDE1NjEwMDEwNTc2MDAwODBmZDViNTA2MDQwNTE2MTAyYzAzODAzODA2MTAyYzA4MzM5ODEwMTYwNDA4MTkwNTI2MTAwMmY5MTYxMDFlNjU2NWI4MzYwMDE2MDAxNjBhMDFiMDMxNjNiNjAwMDAzNjEwMGU0NTc2MDAwODA4MzYwMDE2MDAxNjBhMDFiMDMxNjgzNjA0MDUxNjEwMDVjOTE5MDYxMDI3MDU2NWI2MDAwNjA0MDUxODA4MzAzODE2MDAwODY1YWYxOTE1MDUwM2Q4MDYwMDA4MTE0NjEwMDk5NTc2MDQwNTE5MTUwNjAxZjE5NjAzZjNkMDExNjgyMDE2MDQwNTIzZDgyNTIzZDYwMDA2MDIwODQwMTNlNjEwMDllNTY1YjYwNjA5MTUwNWI1MDkxNTA5MTUwODExNTgwNjEwMGI4NTc1MDYwMDE2MDAxNjBhMDFiMDM4NjE2M2IxNTViMTU2MTAwZTE1NzgwNjA0MDUxNjMxMDFiYjk4ZDYwZTAxYjgxNTI2MDA0MDE2MTAwZDg5MTkwNjEwMjhjNTY1YjYwNDA1MTgwOTEwMzkwZmQ1YjUwNTA1YjYwMDA4MDg0NTE2MDIwODYwMTYwMDA4ODVhZjE2MDQwNTEzZDYwMDA4MjNlODE2MTAxMDM1NzNkODFmZDViM2Q4MWYzNWI4MDUxNjAwMTYwMDE2MGEwMWIwMzgxMTY4MTE0NjEwMTFlNTc2MDAwODBmZDViOTE5MDUwNTY1YjYzNGU0ODdiNzE2MGUwMWI2MDAwNTI2MDQxNjAwNDUyNjAyNDYwMDBmZDViNjAwMDViODM4MTEwMTU2MTAxNTQ1NzgxODEwMTUxODM4MjAxNTI2MDIwMDE2MTAxM2M1NjViNTA1MDYwMDA5MTAxNTI1NjViNjAwMDgyNjAxZjgzMDExMjYxMDE2ZTU3NjAwMDgwZmQ1YjgxNTE2MDAxNjAwMTYwNDAxYjAzODExMTE1NjEwMTg3NTc2MTAxODc2MTAxMjM1NjViNjA0MDUxNjAxZjgyMDE2MDFmMTk5MDgxMTY2MDNmMDExNjgxMDE2MDAxNjAwMTYwNDAxYjAzODExMTgyODIxMDE3MTU2MTAxYjU1NzYxMDFiNTYxMDEyMzU2NWI2MDQwNTI4MTgxNTI4MzgyMDE2MDIwMDE4NTEwMTU2MTAxY2Q1NzYwMDA4MGZkNWI2MTAxZGU4MjYwMjA4MzAxNjAyMDg3MDE2MTAxMzk1NjViOTQ5MzUwNTA1MDUwNTY1YjYwMDA4MDYwMDA4MDYwODA4NTg3MDMxMjE1NjEwMWZjNTc2MDAwODBmZDViNjEwMjA1ODU2MTAxMDc1NjViNjAyMDg2MDE1MTkwOTQ1MDYwMDE2MDAxNjA0MDFiMDM4MTExMTU2MTAyMjE1NzYwMDA4MGZkNWI2MTAyMmQ4NzgyODgwMTYxMDE1ZDU2NWI5MzUwNTA2MTAyM2M2MDQwODYwMTYxMDEwNzU2NWI2MDYwODYwMTUxOTA5MjUwNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDI1ODU3NjAwMDgwZmQ1YjYxMDI2NDg3ODI4ODAxNjEwMTVkNTY1YjkxNTA1MDkyOTU5MTk0NTA5MjUwNTY1YjYwMDA4MjUxNjEwMjgyODE4NDYwMjA4NzAxNjEwMTM5NTY1YjkxOTA5MTAxOTI5MTUwNTA1NjViNjAyMDgxNTI2MDAwODI1MTgwNjAyMDg0MDE1MjYxMDJhYjgxNjA0MDg1MDE2MDIwODcwMTYxMDEzOTU2NWI2MDFmMDE2MDFmMTkxNjkxOTA5MTAxNjA0MDAxOTI5MTUwNTA1NmZlIjsKICAgICAgdW5pdmVyc2FsU2lnbmF0dXJlVmFsaWRhdG9yQnl0ZUNvZGUgPSAiMHg2MDgwNjA0MDUyMzQ4MDE1NjEwMDEwNTc2MDAwODBmZDViNTA2MDQwNTE2MTA2OTQzODAzODA2MTA2OTQ4MzM5ODEwMTYwNDA4MTkwNTI2MTAwMmY5MTYxMDUxZTU2NWI2MDAwNjEwMDNjODQ4NDg0NjEwMDQ4NTY1YjkwNTA4MDYwMDA1MjYwMDE2MDFmZjM1YjYwMDA3ZjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2MTAwNzQ4MzYxMDQwYzU2NWIwMzYxMDFlNzU3NjAwMDYwNjA4MDg0ODA2MDIwMDE5MDUxODEwMTkwNjEwMDkyOTE5MDYxMDU3NzU2NWI2MDQwNTE5Mjk1NTA5MDkzNTA5MTUwNjAwMDkwNjAwMTYwMDE2MGEwMWIwMzg1MTY5MDYxMDBiNjkwODU5MDYxMDVkZDU2NWI2MDAwNjA0MDUxODA4MzAzODE2MDAwODY1YWYxOTE1MDUwM2Q4MDYwMDA4MTE0NjEwMGYzNTc2MDQwNTE5MTUwNjAxZjE5NjAzZjNkMDExNjgyMDE2MDQwNTIzZDgyNTIzZDYwMDA2MDIwODQwMTNlNjEwMGY4NTY1YjYwNjA5MTUwNWI1MDUwOTA1MDg3NjAwMTYwMDE2MGEwMWIwMzE2M2I2MDAwMDM2MTAxNjA1NzgwNjEwMTYwNTc2MDQwNTE2MjQ2MWJjZDYwZTUxYjgxNTI2MDIwNjAwNDgyMDE1MjYwMWU2MDI0ODIwMTUyN2Y1MzY5Njc2ZTYxNzQ3NTcyNjU1NjYxNmM2OTY0NjE3NDZmNzIzYTIwNjQ2NTcwNmM2Zjc5NmQ2NTZlNzQwMDAwNjA0NDgyMDE1MjYwNjQwMTViNjA0MDUxODA5MTAzOTBmZDViNjA0MDUxNjMwYjEzNWQzZjYwZTExYjgwODI1MjkwNjAwMTYwMDE2MGEwMWIwMzhhMTY5MDYzMTYyNmJhN2U5MDYxMDE5MDkwOGI5MDg3OTA2MDA0MDE2MTA1Zjk1NjViNjAyMDYwNDA1MTgwODMwMzgxODY1YWZhMTU4MDE1NjEwMWFkNTczZDYwMDA4MDNlM2Q2MDAwZmQ1YjUwNTA1MDUwNjA0MDUxM2Q2MDFmMTk2MDFmODIwMTE2ODIwMTgwNjA0MDUyNTA4MTAxOTA2MTAxZDE5MTkwNjEwNjMzNTY1YjYwMDE2MDAxNjBlMDFiMDMxOTE2MTQ5NDUwNTA1MDUwNTA2MTA0MDU1NjViNjAwMTYwMDE2MGEwMWIwMzg0MTYzYjE1NjEwMjdhNTc2MDQwNTE2MzBiMTM1ZDNmNjBlMTFiODA4MjUyOTA2MDAxNjAwMTYwYTAxYjAzODYxNjkwNjMxNjI2YmE3ZTkwNjEwMjI3OTA4NzkwODc5MDYwMDQwMTYxMDVmOTU2NWI2MDIwNjA0MDUxODA4MzAzODE4NjVhZmExNTgwMTU2MTAyNDQ1NzNkNjAwMDgwM2UzZDYwMDBmZDViNTA1MDUwNTA2MDQwNTEzZDYwMWYxOTYwMWY4MjAxMTY4MjAxODA2MDQwNTI1MDgxMDE5MDYxMDI2ODkxOTA2MTA2MzM1NjViNjAwMTYwMDE2MGUwMWIwMzE5MTYxNDkwNTA2MTA0MDU1NjViODE1MTYwNDExNDYxMDJkZjU3NjA0MDUxNjI0NjFiY2Q2MGU1MWI4MTUyNjAyMDYwMDQ4MjAxNTI2MDNhNjAyNDgyMDE1MjYwMDA4MDUxNjAyMDYxMDY3NDgzMzk4MTUxOTE1MjYwNDQ4MjAxNTI3ZjNhMjA2OTZlNzY2MTZjNjk2NDIwNzM2OTY3NmU2MTc0NzU3MjY1MjA2YzY1NmU2Nzc0NjgwMDAwMDAwMDAwMDA2MDY0ODIwMTUyNjA4NDAxNjEwMTU3NTY1YjYxMDJlNzYxMDQyNTU2NWI1MDYwMjA4MjAxNTE2MDQwODA4NDAxNTE4NDUxODU5MzkyNjAwMDkxODU5MTkwODExMDYxMDMwYzU3NjEwMzBjNjEwNjVkNTY1YjAxNjAyMDAxNTE2MGY4MWM5MDUwNjAxYjgxMTQ4MDE1OTA2MTAzMmI1NzUwODA2MGZmMTY2MDFjMTQxNTViMTU2MTAzOGM1NzYwNDA1MTYyNDYxYmNkNjBlNTFiODE1MjYwMjA2MDA0ODIwMTUyNjAzYjYwMjQ4MjAxNTI2MDAwODA1MTYwMjA2MTA2NzQ4MzM5ODE1MTkxNTI2MDQ0ODIwMTUyN2YzYTIwNjk2ZTc2NjE2YzY5NjQyMDczNjk2NzZlNjE3NDc1NzI2NTIwNzYyMDc2NjE2Yzc1NjUwMDAwMDAwMDAwNjA2NDgyMDE1MjYwODQwMTYxMDE1NzU2NWI2MDQwODA1MTYwMDA4MTUyNjAyMDgxMDE4MDgzNTI4OTkwNTI2MGZmODMxNjkxODEwMTkxOTA5MTUyNjA2MDgxMDE4NDkwNTI2MDgwODEwMTgzOTA1MjYwMDE2MDAxNjBhMDFiMDM4OTE2OTA2MDAxOTA2MGEwMDE2MDIwNjA0MDUxNjAyMDgxMDM5MDgwODQwMzkwODU1YWZhMTU4MDE1NjEwM2VhNTczZDYwMDA4MDNlM2Q2MDAwZmQ1YjUwNTA1MDYwMjA2MDQwNTEwMzUxNjAwMTYwMDE2MGEwMWIwMzE2MTQ5NDUwNTA1MDUwNTA1YjkzOTI1MDUwNTA1NjViNjAwMDYwMjA4MjUxMTAxNTYxMDQxZDU3NjAwMDgwZmQ1YjUwODA1MTAxNTE5MDU2NWI2MDQwNTE4MDYwNjAwMTYwNDA1MjgwNjAwMzkwNjAyMDgyMDI4MDM2ODMzNzUwOTE5MjkxNTA1MDU2NWI2MDAxNjAwMTYwYTAxYjAzODExNjgxMTQ2MTA0NTg1NzYwMDA4MGZkNWI1MDU2NWI2MzRlNDg3YjcxNjBlMDFiNjAwMDUyNjA0MTYwMDQ1MjYwMjQ2MDAwZmQ1YjYwMDA1YjgzODExMDE1NjEwNDhjNTc4MTgxMDE1MTgzODIwMTUyNjAyMDAxNjEwNDc0NTY1YjUwNTA2MDAwOTEwMTUyNTY1YjYwMDA4MjYwMWY4MzAxMTI2MTA0YTY1NzYwMDA4MGZkNWI4MTUxNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDRiZjU3NjEwNGJmNjEwNDViNTY1YjYwNDA1MTYwMWY4MjAxNjAxZjE5OTA4MTE2NjAzZjAxMTY4MTAxNjAwMTYwMDE2MDQwMWIwMzgxMTE4MjgyMTAxNzE1NjEwNGVkNTc2MTA0ZWQ2MTA0NWI1NjViNjA0MDUyODE4MTUyODM4MjAxNjAyMDAxODUxMDE1NjEwNTA1NTc2MDAwODBmZDViNjEwNTE2ODI2MDIwODMwMTYwMjA4NzAxNjEwNDcxNTY1Yjk0OTM1MDUwNTA1MDU2NWI2MDAwODA2MDAwNjA2MDg0ODYwMzEyMTU2MTA1MzM1NzYwMDA4MGZkNWI4MzUxNjEwNTNlODE2MTA0NDM1NjViNjAyMDg1MDE1MTYwNDA4NjAxNTE5MTk0NTA5MjUwNjAwMTYwMDE2MDQwMWIwMzgxMTExNTYxMDU2MTU3NjAwMDgwZmQ1YjYxMDU2ZDg2ODI4NzAxNjEwNDk1NTY1YjkxNTA1MDkyNTA5MjUwOTI1NjViNjAwMDgwNjAwMDYwNjA4NDg2MDMxMjE1NjEwNThjNTc2MDAwODBmZDViODM1MTYxMDU5NzgxNjEwNDQzNTY1YjYwMjA4NTAxNTE5MDkzNTA2MDAxNjAwMTYwNDAxYjAzODExMTE1NjEwNWIzNTc2MDAwODBmZDViNjEwNWJmODY4Mjg3MDE2MTA0OTU1NjViNjA0MDg2MDE1MTkwOTM1MDkwNTA2MDAxNjAwMTYwNDAxYjAzODExMTE1NjEwNTYxNTc2MDAwODBmZDViNjAwMDgyNTE2MTA1ZWY4MTg0NjAyMDg3MDE2MTA0NzE1NjViOTE5MDkxMDE5MjkxNTA1MDU2NWI4MjgxNTI2MDQwNjAyMDgyMDE1MjYwMDA4MjUxODA2MDQwODQwMTUyNjEwNjFlODE2MDYwODUwMTYwMjA4NzAxNjEwNDcxNTY1YjYwMWYwMTYwMWYxOTE2OTE5MDkxMDE2MDYwMDE5MzkyNTA1MDUwNTY1YjYwMDA2MDIwODI4NDAzMTIxNTYxMDY0NTU3NjAwMDgwZmQ1YjgxNTE2MDAxNjAwMTYwZTAxYjAzMTk4MTE2ODExNDYxMDQwNTU3NjAwMDgwZmQ1YjYzNGU0ODdiNzE2MGUwMWI2MDAwNTI2MDMyNjAwNDUyNjAyNDYwMDBmZGZlNTM2OTY3NmU2MTc0NzU3MjY1NTY2MTZjNjk2NDYxNzQ2ZjcyMjM3MjY1NjM2Zjc2NjU3MjUzNjk2NzZlNjU3MiI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2NoYWluLmpzCiAgdmFyIENoYWluRG9lc05vdFN1cHBvcnRDb250cmFjdCwgQ2hhaW5NaXNtYXRjaEVycm9yLCBDaGFpbk5vdEZvdW5kRXJyb3IsIENsaWVudENoYWluTm90Q29uZmlndXJlZEVycm9yLCBJbnZhbGlkQ2hhaW5JZEVycm9yOwogIHZhciBpbml0X2NoYWluID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2NoYWluLmpzIigpIHsKICAgICAgaW5pdF9iYXNlKCk7CiAgICAgIENoYWluRG9lc05vdFN1cHBvcnRDb250cmFjdCA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoeyBibG9ja051bWJlciwgY2hhaW4sIGNvbnRyYWN0IH0pIHsKICAgICAgICAgIHN1cGVyKGBDaGFpbiAiJHtjaGFpbi5uYW1lfSIgZG9lcyBub3Qgc3VwcG9ydCBjb250cmFjdCAiJHtjb250cmFjdC5uYW1lfSIuYCwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICAiVGhpcyBjb3VsZCBiZSBkdWUgdG8gYW55IG9mIHRoZSBmb2xsb3dpbmc6IiwKICAgICAgICAgICAgICAuLi5ibG9ja051bWJlciAmJiBjb250cmFjdC5ibG9ja0NyZWF0ZWQgJiYgY29udHJhY3QuYmxvY2tDcmVhdGVkID4gYmxvY2tOdW1iZXIgPyBbCiAgICAgICAgICAgICAgICBgLSBUaGUgY29udHJhY3QgIiR7Y29udHJhY3QubmFtZX0iIHdhcyBub3QgZGVwbG95ZWQgdW50aWwgYmxvY2sgJHtjb250cmFjdC5ibG9ja0NyZWF0ZWR9IChjdXJyZW50IGJsb2NrICR7YmxvY2tOdW1iZXJ9KS5gCiAgICAgICAgICAgICAgXSA6IFsKICAgICAgICAgICAgICAgIGAtIFRoZSBjaGFpbiBkb2VzIG5vdCBoYXZlIHRoZSBjb250cmFjdCAiJHtjb250cmFjdC5uYW1lfSIgY29uZmlndXJlZC5gCiAgICAgICAgICAgICAgXQogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0IgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBDaGFpbk1pc21hdGNoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgY2hhaW4sIGN1cnJlbnRDaGFpbklkIH0pIHsKICAgICAgICAgIHN1cGVyKGBUaGUgY3VycmVudCBjaGFpbiBvZiB0aGUgd2FsbGV0IChpZDogJHtjdXJyZW50Q2hhaW5JZH0pIGRvZXMgbm90IG1hdGNoIHRoZSB0YXJnZXQgY2hhaW4gZm9yIHRoZSB0cmFuc2FjdGlvbiAoaWQ6ICR7Y2hhaW4uaWR9IFx1MjAxMyAke2NoYWluLm5hbWV9KS5gLCB7CiAgICAgICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgICAgIGBDdXJyZW50IENoYWluIElEOiAgJHtjdXJyZW50Q2hhaW5JZH1gLAogICAgICAgICAgICAgIGBFeHBlY3RlZCBDaGFpbiBJRDogJHtjaGFpbi5pZH0gXHUyMDEzICR7Y2hhaW4ubmFtZX1gCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG5hbWU6ICJDaGFpbk1pc21hdGNoRXJyb3IiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIENoYWluTm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcihbCiAgICAgICAgICAgICJObyBjaGFpbiB3YXMgcHJvdmlkZWQgdG8gdGhlIHJlcXVlc3QuIiwKICAgICAgICAgICAgIlBsZWFzZSBwcm92aWRlIGEgY2hhaW4gd2l0aCB0aGUgYGNoYWluYCBhcmd1bWVudCBvbiB0aGUgQWN0aW9uLCBvciBieSBzdXBwbHlpbmcgYSBgY2hhaW5gIHRvIFdhbGxldENsaWVudC4iCiAgICAgICAgICBdLmpvaW4oIlxuIiksIHsKICAgICAgICAgICAgbmFtZTogIkNoYWluTm90Rm91bmRFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ2xpZW50Q2hhaW5Ob3RDb25maWd1cmVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoIk5vIGNoYWluIHdhcyBwcm92aWRlZCB0byB0aGUgQ2xpZW50LiIsIHsKICAgICAgICAgICAgbmFtZTogIkNsaWVudENoYWluTm90Q29uZmlndXJlZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBJbnZhbGlkQ2hhaW5JZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNoYWluSWQgfSkgewogICAgICAgICAgc3VwZXIodHlwZW9mIGNoYWluSWQgPT09ICJudW1iZXIiID8gYENoYWluIElEICIke2NoYWluSWR9IiBpcyBpbnZhbGlkLmAgOiAiQ2hhaW4gSUQgaXMgaW52YWxpZC4iLCB7IG5hbWU6ICJJbnZhbGlkQ2hhaW5JZEVycm9yIiB9KTsKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2VuY29kZURlcGxveURhdGEuanMKICBmdW5jdGlvbiBlbmNvZGVEZXBsb3lEYXRhKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhcmdzLCBieXRlY29kZSB9ID0gcGFyYW1ldGVyczsKICAgIGlmICghYXJncyB8fCBhcmdzLmxlbmd0aCA9PT0gMCkKICAgICAgcmV0dXJuIGJ5dGVjb2RlOwogICAgY29uc3QgZGVzY3JpcHRpb24gPSBhYmkyLmZpbmQoKHgpID0+ICJ0eXBlIiBpbiB4ICYmIHgudHlwZSA9PT0gImNvbnN0cnVjdG9yIik7CiAgICBpZiAoIWRlc2NyaXB0aW9uKQogICAgICB0aHJvdyBuZXcgQWJpQ29uc3RydWN0b3JOb3RGb3VuZEVycm9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoNSB9KTsKICAgIGlmICghKCJpbnB1dHMiIGluIGRlc2NyaXB0aW9uKSkKICAgICAgdGhyb3cgbmV3IEFiaUNvbnN0cnVjdG9yUGFyYW1zTm90Rm91bmRFcnJvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDUgfSk7CiAgICBpZiAoIWRlc2NyaXB0aW9uLmlucHV0cyB8fCBkZXNjcmlwdGlvbi5pbnB1dHMubGVuZ3RoID09PSAwKQogICAgICB0aHJvdyBuZXcgQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoNSB9KTsKICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVBYmlQYXJhbWV0ZXJzKGRlc2NyaXB0aW9uLmlucHV0cywgYXJncyk7CiAgICByZXR1cm4gY29uY2F0SGV4KFtieXRlY29kZSwgZGF0YV0pOwogIH0KICB2YXIgZG9jc1BhdGg1OwogIHZhciBpbml0X2VuY29kZURlcGxveURhdGEgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlRGVwbG95RGF0YS5qcyIoKSB7CiAgICAgIGluaXRfYWJpKCk7CiAgICAgIGluaXRfY29uY2F0KCk7CiAgICAgIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogICAgICBkb2NzUGF0aDUgPSAiL2RvY3MvY29udHJhY3QvZW5jb2RlRGVwbG95RGF0YSI7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY2hhaW4vZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MuanMKICBmdW5jdGlvbiBnZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyh7IGJsb2NrTnVtYmVyLCBjaGFpbiwgY29udHJhY3Q6IG5hbWUgfSkgewogICAgY29uc3QgY29udHJhY3QgPSBjaGFpbj8uY29udHJhY3RzPy5bbmFtZV07CiAgICBpZiAoIWNvbnRyYWN0KQogICAgICB0aHJvdyBuZXcgQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0KHsKICAgICAgICBjaGFpbiwKICAgICAgICBjb250cmFjdDogeyBuYW1lIH0KICAgICAgfSk7CiAgICBpZiAoYmxvY2tOdW1iZXIgJiYgY29udHJhY3QuYmxvY2tDcmVhdGVkICYmIGNvbnRyYWN0LmJsb2NrQ3JlYXRlZCA+IGJsb2NrTnVtYmVyKQogICAgICB0aHJvdyBuZXcgQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0KHsKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBjaGFpbiwKICAgICAgICBjb250cmFjdDogewogICAgICAgICAgbmFtZSwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogY29udHJhY3QuYmxvY2tDcmVhdGVkCiAgICAgICAgfQogICAgICB9KTsKICAgIHJldHVybiBjb250cmFjdC5hZGRyZXNzOwogIH0KICB2YXIgaW5pdF9nZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2NoYWluL2dldENoYWluQ29udHJhY3RBZGRyZXNzLmpzIigpIHsKICAgICAgaW5pdF9jaGFpbigpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vycm9ycy9nZXRDYWxsRXJyb3IuanMKICBmdW5jdGlvbiBnZXRDYWxsRXJyb3IoZXJyLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIC4uLmFyZ3MgfSkgewogICAgY29uc3QgY2F1c2UgPSAoKCkgPT4gewogICAgICBjb25zdCBjYXVzZTIgPSBnZXROb2RlRXJyb3IoZXJyLCBhcmdzKTsKICAgICAgaWYgKGNhdXNlMiBpbnN0YW5jZW9mIFVua25vd25Ob2RlRXJyb3IpCiAgICAgICAgcmV0dXJuIGVycjsKICAgICAgcmV0dXJuIGNhdXNlMjsKICAgIH0pKCk7CiAgICByZXR1cm4gbmV3IENhbGxFeGVjdXRpb25FcnJvcihjYXVzZSwgewogICAgICBkb2NzUGF0aDogZG9jc1BhdGg5LAogICAgICAuLi5hcmdzCiAgICB9KTsKICB9CiAgdmFyIGluaXRfZ2V0Q2FsbEVycm9yID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZXJyb3JzL2dldENhbGxFcnJvci5qcyIoKSB7CiAgICAgIGluaXRfY29udHJhY3QoKTsKICAgICAgaW5pdF9ub2RlKCk7CiAgICAgIGluaXRfZ2V0Tm9kZUVycm9yKCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcHJvbWlzZS9jcmVhdGVCYXRjaFNjaGVkdWxlci5qcwogIGZ1bmN0aW9uIGNyZWF0ZUJhdGNoU2NoZWR1bGVyKHsgZm4sIGlkLCBzaG91bGRTcGxpdEJhdGNoLCB3YWl0OiB3YWl0MiA9IDAsIHNvcnQgfSkgewogICAgY29uc3QgZXhlYyA9IGFzeW5jICgpID0+IHsKICAgICAgY29uc3Qgc2NoZWR1bGVyID0gZ2V0U2NoZWR1bGVyKCk7CiAgICAgIGZsdXNoKCk7CiAgICAgIGNvbnN0IGFyZ3MgPSBzY2hlZHVsZXIubWFwKCh7IGFyZ3M6IGFyZ3MyIH0pID0+IGFyZ3MyKTsKICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgZm4oYXJncykudGhlbigoZGF0YSkgPT4gewogICAgICAgIGlmIChzb3J0ICYmIEFycmF5LmlzQXJyYXkoZGF0YSkpCiAgICAgICAgICBkYXRhLnNvcnQoc29ydCk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY2hlZHVsZXIubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGNvbnN0IHsgcGVuZGluZ1Byb21pc2UgfSA9IHNjaGVkdWxlcltpXTsKICAgICAgICAgIHBlbmRpbmdQcm9taXNlLnJlc29sdmU/LihbZGF0YVtpXSwgZGF0YV0pOwogICAgICAgIH0KICAgICAgfSkuY2F0Y2goKGVycikgPT4gewogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2NoZWR1bGVyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBjb25zdCB7IHBlbmRpbmdQcm9taXNlIH0gPSBzY2hlZHVsZXJbaV07CiAgICAgICAgICBwZW5kaW5nUHJvbWlzZS5yZWplY3Q/LihlcnIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9OwogICAgY29uc3QgZmx1c2ggPSAoKSA9PiBzY2hlZHVsZXJDYWNoZS5kZWxldGUoaWQpOwogICAgY29uc3QgZ2V0QmF0Y2hlZEFyZ3MgPSAoKSA9PiBnZXRTY2hlZHVsZXIoKS5tYXAoKHsgYXJncyB9KSA9PiBhcmdzKTsKICAgIGNvbnN0IGdldFNjaGVkdWxlciA9ICgpID0+IHNjaGVkdWxlckNhY2hlLmdldChpZCkgfHwgW107CiAgICBjb25zdCBzZXRTY2hlZHVsZXIgPSAoaXRlbSkgPT4gc2NoZWR1bGVyQ2FjaGUuc2V0KGlkLCBbLi4uZ2V0U2NoZWR1bGVyKCksIGl0ZW1dKTsKICAgIHJldHVybiB7CiAgICAgIGZsdXNoLAogICAgICBhc3luYyBzY2hlZHVsZShhcmdzKSB7CiAgICAgICAgY29uc3QgcGVuZGluZ1Byb21pc2UgPSB7fTsKICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgICAgcGVuZGluZ1Byb21pc2UucmVzb2x2ZSA9IHJlc29sdmU7CiAgICAgICAgICBwZW5kaW5nUHJvbWlzZS5yZWplY3QgPSByZWplY3Q7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3Qgc3BsaXQyID0gc2hvdWxkU3BsaXRCYXRjaD8uKFsuLi5nZXRCYXRjaGVkQXJncygpLCBhcmdzXSk7CiAgICAgICAgaWYgKHNwbGl0MikKICAgICAgICAgIGV4ZWMoKTsKICAgICAgICBjb25zdCBoYXNBY3RpdmVTY2hlZHVsZXIgPSBnZXRTY2hlZHVsZXIoKS5sZW5ndGggPiAwOwogICAgICAgIGlmIChoYXNBY3RpdmVTY2hlZHVsZXIpIHsKICAgICAgICAgIHNldFNjaGVkdWxlcih7IGFyZ3MsIHBlbmRpbmdQcm9taXNlIH0pOwogICAgICAgICAgcmV0dXJuIHByb21pc2U7CiAgICAgICAgfQogICAgICAgIHNldFNjaGVkdWxlcih7IGFyZ3MsIHBlbmRpbmdQcm9taXNlIH0pOwogICAgICAgIHNldFRpbWVvdXQoZXhlYywgd2FpdDIpOwogICAgICAgIHJldHVybiBwcm9taXNlOwogICAgICB9CiAgICB9OwogIH0KICB2YXIgc2NoZWR1bGVyQ2FjaGU7CiAgdmFyIGluaXRfY3JlYXRlQmF0Y2hTY2hlZHVsZXIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9wcm9taXNlL2NyZWF0ZUJhdGNoU2NoZWR1bGVyLmpzIigpIHsKICAgICAgc2NoZWR1bGVyQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9jY2lwLmpzCiAgdmFyIE9mZmNoYWluTG9va3VwRXJyb3IsIE9mZmNoYWluTG9va3VwUmVzcG9uc2VNYWxmb3JtZWRFcnJvciwgT2ZmY2hhaW5Mb29rdXBTZW5kZXJNaXNtYXRjaEVycm9yOwogIHZhciBpbml0X2NjaXAgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvY2NpcC5qcyIoKSB7CiAgICAgIGluaXRfc3RyaW5naWZ5KCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X3V0aWxzMygpOwogICAgICBPZmZjaGFpbkxvb2t1cEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgICAgICBjb25zdHJ1Y3Rvcih7IGNhbGxiYWNrU2VsZWN0b3IsIGNhdXNlLCBkYXRhLCBleHRyYURhdGEsIHNlbmRlciwgdXJscyB9KSB7CiAgICAgICAgICBzdXBlcihjYXVzZS5zaG9ydE1lc3NhZ2UgfHwgIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGZldGNoaW5nIGZvciBhbiBvZmZjaGFpbiByZXN1bHQuIiwgewogICAgICAgICAgICBjYXVzZSwKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgLi4uY2F1c2UubWV0YU1lc3NhZ2VzIHx8IFtdLAogICAgICAgICAgICAgIGNhdXNlLm1ldGFNZXNzYWdlcz8ubGVuZ3RoID8gIiIgOiBbXSwKICAgICAgICAgICAgICAiT2ZmY2hhaW4gR2F0ZXdheSBDYWxsOiIsCiAgICAgICAgICAgICAgdXJscyAmJiBbCiAgICAgICAgICAgICAgICAiICBHYXRld2F5IFVSTChzKToiLAogICAgICAgICAgICAgICAgLi4udXJscy5tYXAoKHVybCkgPT4gYCAgICAke2dldFVybCh1cmwpfWApCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICBgICBTZW5kZXI6ICR7c2VuZGVyfWAsCiAgICAgICAgICAgICAgYCAgRGF0YTogJHtkYXRhfWAsCiAgICAgICAgICAgICAgYCAgQ2FsbGJhY2sgc2VsZWN0b3I6ICR7Y2FsbGJhY2tTZWxlY3Rvcn1gLAogICAgICAgICAgICAgIGAgIEV4dHJhIGRhdGE6ICR7ZXh0cmFEYXRhfWAKICAgICAgICAgICAgXS5mbGF0KCksCiAgICAgICAgICAgIG5hbWU6ICJPZmZjaGFpbkxvb2t1cEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPZmZjaGFpbkxvb2t1cFJlc3BvbnNlTWFsZm9ybWVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgcmVzdWx0LCB1cmwgfSkgewogICAgICAgICAgc3VwZXIoIk9mZmNoYWluIGdhdGV3YXkgcmVzcG9uc2UgaXMgbWFsZm9ybWVkLiBSZXNwb25zZSBkYXRhIG11c3QgYmUgYSBoZXggdmFsdWUuIiwgewogICAgICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgICAgICBgR2F0ZXdheSBVUkw6ICR7Z2V0VXJsKHVybCl9YCwKICAgICAgICAgICAgICBgUmVzcG9uc2U6ICR7c3RyaW5naWZ5KHJlc3VsdCl9YAogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lOiAiT2ZmY2hhaW5Mb29rdXBSZXNwb25zZU1hbGZvcm1lZEVycm9yIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBPZmZjaGFpbkxvb2t1cFNlbmRlck1pc21hdGNoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgICAgIGNvbnN0cnVjdG9yKHsgc2VuZGVyLCB0byB9KSB7CiAgICAgICAgICBzdXBlcigiUmV2ZXJ0ZWQgc2VuZGVyIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggdGFyZ2V0IGNvbnRyYWN0IGFkZHJlc3MgKGB0b2ApLiIsIHsKICAgICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICAgYENvbnRyYWN0IGFkZHJlc3M6ICR7dG99YCwKICAgICAgICAgICAgICBgT2ZmY2hhaW5Mb29rdXAgc2VuZGVyIGFkZHJlc3M6ICR7c2VuZGVyfWAKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbmFtZTogIk9mZmNoYWluTG9va3VwU2VuZGVyTWlzbWF0Y2hFcnJvciIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9jY2lwLmpzCiAgdmFyIGNjaXBfZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KGNjaXBfZXhwb3J0cywgewogICAgY2NpcFJlcXVlc3Q6ICgpID0+IGNjaXBSZXF1ZXN0LAogICAgb2ZmY2hhaW5Mb29rdXA6ICgpID0+IG9mZmNoYWluTG9va3VwLAogICAgb2ZmY2hhaW5Mb29rdXBBYmlJdGVtOiAoKSA9PiBvZmZjaGFpbkxvb2t1cEFiaUl0ZW0sCiAgICBvZmZjaGFpbkxvb2t1cFNpZ25hdHVyZTogKCkgPT4gb2ZmY2hhaW5Mb29rdXBTaWduYXR1cmUKICB9KTsKICBhc3luYyBmdW5jdGlvbiBvZmZjaGFpbkxvb2t1cChjbGllbnQsIHsgYmxvY2tOdW1iZXIsIGJsb2NrVGFnLCBkYXRhLCB0byB9KSB7CiAgICBjb25zdCB7IGFyZ3MgfSA9IGRlY29kZUVycm9yUmVzdWx0KHsKICAgICAgZGF0YSwKICAgICAgYWJpOiBbb2ZmY2hhaW5Mb29rdXBBYmlJdGVtXQogICAgfSk7CiAgICBjb25zdCBbc2VuZGVyLCB1cmxzLCBjYWxsRGF0YSwgY2FsbGJhY2tTZWxlY3RvciwgZXh0cmFEYXRhXSA9IGFyZ3M7CiAgICBjb25zdCB7IGNjaXBSZWFkIH0gPSBjbGllbnQ7CiAgICBjb25zdCBjY2lwUmVxdWVzdF8gPSBjY2lwUmVhZCAmJiB0eXBlb2YgY2NpcFJlYWQ/LnJlcXVlc3QgPT09ICJmdW5jdGlvbiIgPyBjY2lwUmVhZC5yZXF1ZXN0IDogY2NpcFJlcXVlc3Q7CiAgICB0cnkgewogICAgICBpZiAoIWlzQWRkcmVzc0VxdWFsKHRvLCBzZW5kZXIpKQogICAgICAgIHRocm93IG5ldyBPZmZjaGFpbkxvb2t1cFNlbmRlck1pc21hdGNoRXJyb3IoeyBzZW5kZXIsIHRvIH0pOwogICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjY2lwUmVxdWVzdF8oeyBkYXRhOiBjYWxsRGF0YSwgc2VuZGVyLCB1cmxzIH0pOwogICAgICBjb25zdCB7IGRhdGE6IGRhdGFfIH0gPSBhd2FpdCBjYWxsKGNsaWVudCwgewogICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgIGJsb2NrVGFnLAogICAgICAgIGRhdGE6IGNvbmNhdChbCiAgICAgICAgICBjYWxsYmFja1NlbGVjdG9yLAogICAgICAgICAgZW5jb2RlQWJpUGFyYW1ldGVycyhbeyB0eXBlOiAiYnl0ZXMiIH0sIHsgdHlwZTogImJ5dGVzIiB9XSwgW3Jlc3VsdCwgZXh0cmFEYXRhXSkKICAgICAgICBdKSwKICAgICAgICB0bwogICAgICB9KTsKICAgICAgcmV0dXJuIGRhdGFfOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIHRocm93IG5ldyBPZmZjaGFpbkxvb2t1cEVycm9yKHsKICAgICAgICBjYWxsYmFja1NlbGVjdG9yLAogICAgICAgIGNhdXNlOiBlcnIsCiAgICAgICAgZGF0YSwKICAgICAgICBleHRyYURhdGEsCiAgICAgICAgc2VuZGVyLAogICAgICAgIHVybHMKICAgICAgfSk7CiAgICB9CiAgfQogIGFzeW5jIGZ1bmN0aW9uIGNjaXBSZXF1ZXN0KHsgZGF0YSwgc2VuZGVyLCB1cmxzIH0pIHsKICAgIGxldCBlcnJvciA9IG5ldyBFcnJvcigiQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZC4iKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCB1cmwgPSB1cmxzW2ldOwogICAgICBjb25zdCBtZXRob2QgPSB1cmwuaW5jbHVkZXMoIntkYXRhfSIpID8gIkdFVCIgOiAiUE9TVCI7CiAgICAgIGNvbnN0IGJvZHkgPSBtZXRob2QgPT09ICJQT1NUIiA/IHsgZGF0YSwgc2VuZGVyIH0gOiB2b2lkIDA7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwucmVwbGFjZSgie3NlbmRlcn0iLCBzZW5kZXIpLnJlcGxhY2UoIntkYXRhfSIsIGRhdGEpLCB7CiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSwKICAgICAgICAgIG1ldGhvZAogICAgICAgIH0pOwogICAgICAgIGxldCByZXN1bHQ7CiAgICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCJDb250ZW50LVR5cGUiKT8uc3RhcnRzV2l0aCgiYXBwbGljYXRpb24vanNvbiIpKSB7CiAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKS5kYXRhOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7CiAgICAgICAgfQogICAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICAgIGVycm9yID0gbmV3IEh0dHBSZXF1ZXN0RXJyb3IoewogICAgICAgICAgICBib2R5LAogICAgICAgICAgICBkZXRhaWxzOiByZXN1bHQ/LmVycm9yID8gc3RyaW5naWZ5KHJlc3VsdC5lcnJvcikgOiByZXNwb25zZS5zdGF0dXNUZXh0LAogICAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLAogICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywKICAgICAgICAgICAgdXJsCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzSGV4KHJlc3VsdCkpIHsKICAgICAgICAgIGVycm9yID0gbmV3IE9mZmNoYWluTG9va3VwUmVzcG9uc2VNYWxmb3JtZWRFcnJvcih7CiAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgdXJsCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBlcnJvciA9IG5ldyBIdHRwUmVxdWVzdEVycm9yKHsKICAgICAgICAgIGJvZHksCiAgICAgICAgICBkZXRhaWxzOiBlcnIubWVzc2FnZSwKICAgICAgICAgIHVybAogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICB0aHJvdyBlcnJvcjsKICB9CiAgdmFyIG9mZmNoYWluTG9va3VwU2lnbmF0dXJlLCBvZmZjaGFpbkxvb2t1cEFiaUl0ZW07CiAgdmFyIGluaXRfY2NpcDIgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9jY2lwLmpzIigpIHsKICAgICAgaW5pdF9jYWxsKCk7CiAgICAgIGluaXRfY2NpcCgpOwogICAgICBpbml0X3JlcXVlc3QoKTsKICAgICAgaW5pdF9kZWNvZGVFcnJvclJlc3VsdCgpOwogICAgICBpbml0X2VuY29kZUFiaVBhcmFtZXRlcnMoKTsKICAgICAgaW5pdF9pc0FkZHJlc3NFcXVhbCgpOwogICAgICBpbml0X2NvbmNhdCgpOwogICAgICBpbml0X2lzSGV4KCk7CiAgICAgIGluaXRfc3RyaW5naWZ5KCk7CiAgICAgIG9mZmNoYWluTG9va3VwU2lnbmF0dXJlID0gIjB4NTU2ZjE4MzAiOwogICAgICBvZmZjaGFpbkxvb2t1cEFiaUl0ZW0gPSB7CiAgICAgICAgbmFtZTogIk9mZmNoYWluTG9va3VwIiwKICAgICAgICB0eXBlOiAiZXJyb3IiLAogICAgICAgIGlucHV0czogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAic2VuZGVyIiwKICAgICAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAidXJscyIsCiAgICAgICAgICAgIHR5cGU6ICJzdHJpbmdbXSIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJjYWxsRGF0YSIsCiAgICAgICAgICAgIHR5cGU6ICJieXRlcyIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJjYWxsYmFja0Z1bmN0aW9uIiwKICAgICAgICAgICAgdHlwZTogImJ5dGVzNCIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJleHRyYURhdGEiLAogICAgICAgICAgICB0eXBlOiAiYnl0ZXMiCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9OwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2NhbGwuanMKICBhc3luYyBmdW5jdGlvbiBjYWxsKGNsaWVudCwgYXJncykgewogICAgY29uc3QgeyBhY2NvdW50OiBhY2NvdW50XyA9IGNsaWVudC5hY2NvdW50LCBiYXRjaCA9IEJvb2xlYW4oY2xpZW50LmJhdGNoPy5tdWx0aWNhbGwpLCBibG9ja051bWJlciwgYmxvY2tUYWcgPSAibGF0ZXN0IiwgYWNjZXNzTGlzdCwgYmxvYnMsIGNvZGUsIGRhdGE6IGRhdGFfLCBmYWN0b3J5LCBmYWN0b3J5RGF0YSwgZ2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyQmxvYkdhcywgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbm9uY2UsIHRvLCB2YWx1ZSwgc3RhdGVPdmVycmlkZSwgLi4ucmVzdCB9ID0gYXJnczsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICBpZiAoY29kZSAmJiAoZmFjdG9yeSB8fCBmYWN0b3J5RGF0YSkpCiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJDYW5ub3QgcHJvdmlkZSBib3RoIGBjb2RlYCAmIGBmYWN0b3J5YC9gZmFjdG9yeURhdGFgIGFzIHBhcmFtZXRlcnMuIik7CiAgICBpZiAoY29kZSAmJiB0bykKICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoIkNhbm5vdCBwcm92aWRlIGJvdGggYGNvZGVgICYgYHRvYCBhcyBwYXJhbWV0ZXJzLiIpOwogICAgY29uc3QgZGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZSA9IGNvZGUgJiYgZGF0YV87CiAgICBjb25zdCBkZXBsb3lsZXNzQ2FsbFZpYUZhY3RvcnkgPSBmYWN0b3J5ICYmIGZhY3RvcnlEYXRhICYmIHRvICYmIGRhdGFfOwogICAgY29uc3QgZGVwbG95bGVzc0NhbGwgPSBkZXBsb3lsZXNzQ2FsbFZpYUJ5dGVjb2RlIHx8IGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeTsKICAgIGNvbnN0IGRhdGEgPSAoKCkgPT4gewogICAgICBpZiAoZGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZSkKICAgICAgICByZXR1cm4gdG9EZXBsb3lsZXNzQ2FsbFZpYUJ5dGVjb2RlRGF0YSh7CiAgICAgICAgICBjb2RlLAogICAgICAgICAgZGF0YTogZGF0YV8KICAgICAgICB9KTsKICAgICAgaWYgKGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeSkKICAgICAgICByZXR1cm4gdG9EZXBsb3lsZXNzQ2FsbFZpYUZhY3RvcnlEYXRhKHsKICAgICAgICAgIGRhdGE6IGRhdGFfLAogICAgICAgICAgZmFjdG9yeSwKICAgICAgICAgIGZhY3RvcnlEYXRhLAogICAgICAgICAgdG8KICAgICAgICB9KTsKICAgICAgcmV0dXJuIGRhdGFfOwogICAgfSkoKTsKICAgIHRyeSB7CiAgICAgIGFzc2VydFJlcXVlc3QoYXJncyk7CiAgICAgIGNvbnN0IGJsb2NrTnVtYmVySGV4ID0gYmxvY2tOdW1iZXIgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWc7CiAgICAgIGNvbnN0IHJwY1N0YXRlT3ZlcnJpZGUgPSBzZXJpYWxpemVTdGF0ZU92ZXJyaWRlKHN0YXRlT3ZlcnJpZGUpOwogICAgICBjb25zdCBjaGFpbkZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb25SZXF1ZXN0Py5mb3JtYXQ7CiAgICAgIGNvbnN0IGZvcm1hdCA9IGNoYWluRm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgICAgY29uc3QgcmVxdWVzdCA9IGZvcm1hdCh7CiAgICAgICAgLy8gUGljayBvdXQgZXh0cmEgZGF0YSB0aGF0IG1pZ2h0IGV4aXN0IG9uIHRoZSBjaGFpbidzIHRyYW5zYWN0aW9uIHJlcXVlc3QgdHlwZS4KICAgICAgICAuLi5leHRyYWN0KHJlc3QsIHsgZm9ybWF0OiBjaGFpbkZvcm1hdCB9KSwKICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgIGFjY2Vzc0xpc3QsCiAgICAgICAgYmxvYnMsCiAgICAgICAgZGF0YSwKICAgICAgICBnYXMsCiAgICAgICAgZ2FzUHJpY2UsCiAgICAgICAgbWF4RmVlUGVyQmxvYkdhcywKICAgICAgICBtYXhGZWVQZXJHYXMsCiAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXMsCiAgICAgICAgbm9uY2UsCiAgICAgICAgdG86IGRlcGxveWxlc3NDYWxsID8gdm9pZCAwIDogdG8sCiAgICAgICAgdmFsdWUKICAgICAgfSk7CiAgICAgIGlmIChiYXRjaCAmJiBzaG91bGRQZXJmb3JtTXVsdGljYWxsKHsgcmVxdWVzdCB9KSAmJiAhcnBjU3RhdGVPdmVycmlkZSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gYXdhaXQgc2NoZWR1bGVNdWx0aWNhbGwoY2xpZW50LCB7CiAgICAgICAgICAgIC4uLnJlcXVlc3QsCiAgICAgICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgICAgICBibG9ja1RhZwogICAgICAgICAgfSk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBDbGllbnRDaGFpbk5vdENvbmZpZ3VyZWRFcnJvcikgJiYgIShlcnIgaW5zdGFuY2VvZiBDaGFpbkRvZXNOb3RTdXBwb3J0Q29udHJhY3QpKQogICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICAgIG1ldGhvZDogImV0aF9jYWxsIiwKICAgICAgICBwYXJhbXM6IHJwY1N0YXRlT3ZlcnJpZGUgPyBbCiAgICAgICAgICByZXF1ZXN0LAogICAgICAgICAgYmxvY2ssCiAgICAgICAgICBycGNTdGF0ZU92ZXJyaWRlCiAgICAgICAgXSA6IFtyZXF1ZXN0LCBibG9ja10KICAgICAgfSk7CiAgICAgIGlmIChyZXNwb25zZSA9PT0gIjB4IikKICAgICAgICByZXR1cm4geyBkYXRhOiB2b2lkIDAgfTsKICAgICAgcmV0dXJuIHsgZGF0YTogcmVzcG9uc2UgfTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zdCBkYXRhMiA9IGdldFJldmVydEVycm9yRGF0YShlcnIpOwogICAgICBjb25zdCB7IG9mZmNoYWluTG9va3VwOiBvZmZjaGFpbkxvb2t1cDIsIG9mZmNoYWluTG9va3VwU2lnbmF0dXJlOiBvZmZjaGFpbkxvb2t1cFNpZ25hdHVyZTIgfSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gKGluaXRfY2NpcDIoKSwgY2NpcF9leHBvcnRzKSk7CiAgICAgIGlmIChjbGllbnQuY2NpcFJlYWQgIT09IGZhbHNlICYmIGRhdGEyPy5zbGljZSgwLCAxMCkgPT09IG9mZmNoYWluTG9va3VwU2lnbmF0dXJlMiAmJiB0bykKICAgICAgICByZXR1cm4geyBkYXRhOiBhd2FpdCBvZmZjaGFpbkxvb2t1cDIoY2xpZW50LCB7IGRhdGE6IGRhdGEyLCB0byB9KSB9OwogICAgICBpZiAoZGVwbG95bGVzc0NhbGwgJiYgZGF0YTI/LnNsaWNlKDAsIDEwKSA9PT0gIjB4MTAxYmI5OGQiKQogICAgICAgIHRocm93IG5ldyBDb3VudGVyZmFjdHVhbERlcGxveW1lbnRGYWlsZWRFcnJvcih7IGZhY3RvcnkgfSk7CiAgICAgIHRocm93IGdldENhbGxFcnJvcihlcnIsIHsKICAgICAgICAuLi5hcmdzLAogICAgICAgIGFjY291bnQsCiAgICAgICAgY2hhaW46IGNsaWVudC5jaGFpbgogICAgICB9KTsKICAgIH0KICB9CiAgZnVuY3Rpb24gc2hvdWxkUGVyZm9ybU11bHRpY2FsbCh7IHJlcXVlc3QgfSkgewogICAgY29uc3QgeyBkYXRhLCB0bywgLi4ucmVxdWVzdF8gfSA9IHJlcXVlc3Q7CiAgICBpZiAoIWRhdGEpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChkYXRhLnN0YXJ0c1dpdGgoYWdncmVnYXRlM1NpZ25hdHVyZSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICghdG8pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChPYmplY3QudmFsdWVzKHJlcXVlc3RfKS5maWx0ZXIoKHgpID0+IHR5cGVvZiB4ICE9PSAidW5kZWZpbmVkIikubGVuZ3RoID4gMCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgfQogIGFzeW5jIGZ1bmN0aW9uIHNjaGVkdWxlTXVsdGljYWxsKGNsaWVudCwgYXJncykgewogICAgY29uc3QgeyBiYXRjaFNpemUgPSAxMDI0LCB3YWl0OiB3YWl0MiA9IDAgfSA9IHR5cGVvZiBjbGllbnQuYmF0Y2g/Lm11bHRpY2FsbCA9PT0gIm9iamVjdCIgPyBjbGllbnQuYmF0Y2gubXVsdGljYWxsIDoge307CiAgICBjb25zdCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZyA9ICJsYXRlc3QiLCBkYXRhLCBtdWx0aWNhbGxBZGRyZXNzOiBtdWx0aWNhbGxBZGRyZXNzXywgdG8gfSA9IGFyZ3M7CiAgICBsZXQgbXVsdGljYWxsQWRkcmVzcyA9IG11bHRpY2FsbEFkZHJlc3NfOwogICAgaWYgKCFtdWx0aWNhbGxBZGRyZXNzKSB7CiAgICAgIGlmICghY2xpZW50LmNoYWluKQogICAgICAgIHRocm93IG5ldyBDbGllbnRDaGFpbk5vdENvbmZpZ3VyZWRFcnJvcigpOwogICAgICBtdWx0aWNhbGxBZGRyZXNzID0gZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoewogICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgIGNoYWluOiBjbGllbnQuY2hhaW4sCiAgICAgICAgY29udHJhY3Q6ICJtdWx0aWNhbGwzIgogICAgICB9KTsKICAgIH0KICAgIGNvbnN0IGJsb2NrTnVtYmVySGV4ID0gYmxvY2tOdW1iZXIgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICBjb25zdCBibG9jayA9IGJsb2NrTnVtYmVySGV4IHx8IGJsb2NrVGFnOwogICAgY29uc3QgeyBzY2hlZHVsZSB9ID0gY3JlYXRlQmF0Y2hTY2hlZHVsZXIoewogICAgICBpZDogYCR7Y2xpZW50LnVpZH0uJHtibG9ja31gLAogICAgICB3YWl0OiB3YWl0MiwKICAgICAgc2hvdWxkU3BsaXRCYXRjaChhcmdzMikgewogICAgICAgIGNvbnN0IHNpemUzID0gYXJnczIucmVkdWNlKChzaXplNCwgeyBkYXRhOiBkYXRhMiB9KSA9PiBzaXplNCArIChkYXRhMi5sZW5ndGggLSAyKSwgMCk7CiAgICAgICAgcmV0dXJuIHNpemUzID4gYmF0Y2hTaXplICogMjsKICAgICAgfSwKICAgICAgZm46IGFzeW5jIChyZXF1ZXN0cykgPT4gewogICAgICAgIGNvbnN0IGNhbGxzID0gcmVxdWVzdHMubWFwKChyZXF1ZXN0KSA9PiAoewogICAgICAgICAgYWxsb3dGYWlsdXJlOiB0cnVlLAogICAgICAgICAgY2FsbERhdGE6IHJlcXVlc3QuZGF0YSwKICAgICAgICAgIHRhcmdldDogcmVxdWVzdC50bwogICAgICAgIH0pKTsKICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7CiAgICAgICAgICBhYmk6IG11bHRpY2FsbDNBYmksCiAgICAgICAgICBhcmdzOiBbY2FsbHNdLAogICAgICAgICAgZnVuY3Rpb25OYW1lOiAiYWdncmVnYXRlMyIKICAgICAgICB9KTsKICAgICAgICBjb25zdCBkYXRhMiA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICAgIG1ldGhvZDogImV0aF9jYWxsIiwKICAgICAgICAgIHBhcmFtczogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZGF0YTogY2FsbGRhdGEsCiAgICAgICAgICAgICAgdG86IG11bHRpY2FsbEFkZHJlc3MKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYmxvY2sKICAgICAgICAgIF0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZGVjb2RlRnVuY3Rpb25SZXN1bHQoewogICAgICAgICAgYWJpOiBtdWx0aWNhbGwzQWJpLAogICAgICAgICAgYXJnczogW2NhbGxzXSwKICAgICAgICAgIGZ1bmN0aW9uTmFtZTogImFnZ3JlZ2F0ZTMiLAogICAgICAgICAgZGF0YTogZGF0YTIgfHwgIjB4IgogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IFt7IHJldHVybkRhdGEsIHN1Y2Nlc3MgfV0gPSBhd2FpdCBzY2hlZHVsZSh7IGRhdGEsIHRvIH0pOwogICAgaWYgKCFzdWNjZXNzKQogICAgICB0aHJvdyBuZXcgUmF3Q29udHJhY3RFcnJvcih7IGRhdGE6IHJldHVybkRhdGEgfSk7CiAgICBpZiAocmV0dXJuRGF0YSA9PT0gIjB4IikKICAgICAgcmV0dXJuIHsgZGF0YTogdm9pZCAwIH07CiAgICByZXR1cm4geyBkYXRhOiByZXR1cm5EYXRhIH07CiAgfQogIGZ1bmN0aW9uIHRvRGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZURhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBjb2RlLCBkYXRhIH0gPSBwYXJhbWV0ZXJzOwogICAgcmV0dXJuIGVuY29kZURlcGxveURhdGEoewogICAgICBhYmk6IHBhcnNlQWJpKFsiY29uc3RydWN0b3IoYnl0ZXMsIGJ5dGVzKSJdKSwKICAgICAgYnl0ZWNvZGU6IGRlcGxveWxlc3NDYWxsVmlhQnl0ZWNvZGVCeXRlY29kZSwKICAgICAgYXJnczogW2NvZGUsIGRhdGFdCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gdG9EZXBsb3lsZXNzQ2FsbFZpYUZhY3RvcnlEYXRhKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgZGF0YSwgZmFjdG9yeSwgZmFjdG9yeURhdGEsIHRvIH0gPSBwYXJhbWV0ZXJzOwogICAgcmV0dXJuIGVuY29kZURlcGxveURhdGEoewogICAgICBhYmk6IHBhcnNlQWJpKFsiY29uc3RydWN0b3IoYWRkcmVzcywgYnl0ZXMsIGFkZHJlc3MsIGJ5dGVzKSJdKSwKICAgICAgYnl0ZWNvZGU6IGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeUJ5dGVjb2RlLAogICAgICBhcmdzOiBbdG8sIGRhdGEsIGZhY3RvcnksIGZhY3RvcnlEYXRhXQogICAgfSk7CiAgfQogIGZ1bmN0aW9uIGdldFJldmVydEVycm9yRGF0YShlcnIpIHsKICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEJhc2VFcnJvcjIpKQogICAgICByZXR1cm4gdm9pZCAwOwogICAgY29uc3QgZXJyb3IgPSBlcnIud2FsaygpOwogICAgcmV0dXJuIHR5cGVvZiBlcnJvcj8uZGF0YSA9PT0gIm9iamVjdCIgPyBlcnJvci5kYXRhPy5kYXRhIDogZXJyb3IuZGF0YTsKICB9CiAgdmFyIGluaXRfY2FsbCA9IF9fZXNtKHsKICAgICJub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2NhbGwuanMiKCkgewogICAgICBpbml0X2V4cG9ydHMoKTsKICAgICAgaW5pdF9wYXJzZUFjY291bnQoKTsKICAgICAgaW5pdF9hYmlzKCk7CiAgICAgIGluaXRfY29udHJhY3QyKCk7CiAgICAgIGluaXRfY29udHJhY3RzKCk7CiAgICAgIGluaXRfYmFzZSgpOwogICAgICBpbml0X2NoYWluKCk7CiAgICAgIGluaXRfY29udHJhY3QoKTsKICAgICAgaW5pdF9kZWNvZGVGdW5jdGlvblJlc3VsdCgpOwogICAgICBpbml0X2VuY29kZURlcGxveURhdGEoKTsKICAgICAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICAgICAgaW5pdF9nZXRDaGFpbkNvbnRyYWN0QWRkcmVzcygpOwogICAgICBpbml0X3RvSGV4KCk7CiAgICAgIGluaXRfZ2V0Q2FsbEVycm9yKCk7CiAgICAgIGluaXRfZXh0cmFjdCgpOwogICAgICBpbml0X3RyYW5zYWN0aW9uUmVxdWVzdCgpOwogICAgICBpbml0X2NyZWF0ZUJhdGNoU2NoZWR1bGVyKCk7CiAgICAgIGluaXRfc3RhdGVPdmVycmlkZTIoKTsKICAgICAgaW5pdF9hc3NlcnRSZXF1ZXN0KCk7CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy9pc293cy9fZXNtL3V0aWxzLmpzCiAgZnVuY3Rpb24gZ2V0TmF0aXZlV2ViU29ja2V0KCkgewogICAgaWYgKHR5cGVvZiBXZWJTb2NrZXQgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gV2ViU29ja2V0OwogICAgaWYgKHR5cGVvZiBnbG9iYWwuV2ViU29ja2V0ICE9PSAidW5kZWZpbmVkIikKICAgICAgcmV0dXJuIGdsb2JhbC5XZWJTb2NrZXQ7CiAgICBpZiAodHlwZW9mIHdpbmRvdy5XZWJTb2NrZXQgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gd2luZG93LldlYlNvY2tldDsKICAgIGlmICh0eXBlb2Ygc2VsZi5XZWJTb2NrZXQgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gc2VsZi5XZWJTb2NrZXQ7CiAgICB0aHJvdyBuZXcgRXJyb3IoImBXZWJTb2NrZXRgIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudCIpOwogIH0KICB2YXIgaW5pdF91dGlsczUgPSBfX2VzbSh7CiAgICAibm9kZV9tb2R1bGVzL2lzb3dzL19lc20vdXRpbHMuanMiKCkgewogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvaXNvd3MvX2VzbS9uYXRpdmUuanMKICB2YXIgbmF0aXZlX2V4cG9ydHMgPSB7fTsKICBfX2V4cG9ydChuYXRpdmVfZXhwb3J0cywgewogICAgV2ViU29ja2V0OiAoKSA9PiBXZWJTb2NrZXQyCiAgfSk7CiAgdmFyIFdlYlNvY2tldDI7CiAgdmFyIGluaXRfbmF0aXZlID0gX19lc20oewogICAgIm5vZGVfbW9kdWxlcy9pc293cy9fZXNtL25hdGl2ZS5qcyIoKSB7CiAgICAgIGluaXRfdXRpbHM1KCk7CiAgICAgIFdlYlNvY2tldDIgPSBnZXROYXRpdmVXZWJTb2NrZXQoKTsKICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9pbmRleC5qcwogIHZhciBlc21fZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KGVzbV9leHBvcnRzLCB7CiAgICBBYmlDb25zdHJ1Y3Rvck5vdEZvdW5kRXJyb3I6ICgpID0+IEFiaUNvbnN0cnVjdG9yTm90Rm91bmRFcnJvciwKICAgIEFiaUNvbnN0cnVjdG9yUGFyYW1zTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yLAogICAgQWJpRGVjb2RpbmdEYXRhU2l6ZUludmFsaWRFcnJvcjogKCkgPT4gQWJpRGVjb2RpbmdEYXRhU2l6ZUludmFsaWRFcnJvciwKICAgIEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yOiAoKSA9PiBBYmlEZWNvZGluZ0RhdGFTaXplVG9vU21hbGxFcnJvciwKICAgIEFiaURlY29kaW5nWmVyb0RhdGFFcnJvcjogKCkgPT4gQWJpRGVjb2RpbmdaZXJvRGF0YUVycm9yLAogICAgQWJpRW5jb2RpbmdBcnJheUxlbmd0aE1pc21hdGNoRXJyb3I6ICgpID0+IEFiaUVuY29kaW5nQXJyYXlMZW5ndGhNaXNtYXRjaEVycm9yLAogICAgQWJpRW5jb2RpbmdCeXRlc1NpemVNaXNtYXRjaEVycm9yOiAoKSA9PiBBYmlFbmNvZGluZ0J5dGVzU2l6ZU1pc21hdGNoRXJyb3IsCiAgICBBYmlFbmNvZGluZ0xlbmd0aE1pc21hdGNoRXJyb3I6ICgpID0+IEFiaUVuY29kaW5nTGVuZ3RoTWlzbWF0Y2hFcnJvciwKICAgIEFiaUVycm9ySW5wdXRzTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRXJyb3JJbnB1dHNOb3RGb3VuZEVycm9yLAogICAgQWJpRXJyb3JOb3RGb3VuZEVycm9yOiAoKSA9PiBBYmlFcnJvck5vdEZvdW5kRXJyb3IsCiAgICBBYmlFcnJvclNpZ25hdHVyZU5vdEZvdW5kRXJyb3I6ICgpID0+IEFiaUVycm9yU2lnbmF0dXJlTm90Rm91bmRFcnJvciwKICAgIEFiaUV2ZW50Tm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRXZlbnROb3RGb3VuZEVycm9yLAogICAgQWJpRXZlbnRTaWduYXR1cmVFbXB0eVRvcGljc0Vycm9yOiAoKSA9PiBBYmlFdmVudFNpZ25hdHVyZUVtcHR5VG9waWNzRXJyb3IsCiAgICBBYmlFdmVudFNpZ25hdHVyZU5vdEZvdW5kRXJyb3I6ICgpID0+IEFiaUV2ZW50U2lnbmF0dXJlTm90Rm91bmRFcnJvciwKICAgIEFiaUZ1bmN0aW9uTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yLAogICAgQWJpRnVuY3Rpb25PdXRwdXRzTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRnVuY3Rpb25PdXRwdXRzTm90Rm91bmRFcnJvciwKICAgIEFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvcjogKCkgPT4gQWJpRnVuY3Rpb25TaWduYXR1cmVOb3RGb3VuZEVycm9yLAogICAgQWNjb3VudFN0YXRlQ29uZmxpY3RFcnJvcjogKCkgPT4gQWNjb3VudFN0YXRlQ29uZmxpY3RFcnJvciwKICAgIEJhc2VFcnJvcjogKCkgPT4gQmFzZUVycm9yMiwKICAgIEJhc2VGZWVTY2FsYXJFcnJvcjogKCkgPT4gQmFzZUZlZVNjYWxhckVycm9yLAogICAgQmxvY2tOb3RGb3VuZEVycm9yOiAoKSA9PiBCbG9ja05vdEZvdW5kRXJyb3IsCiAgICBCeXRlc1NpemVNaXNtYXRjaEVycm9yOiAoKSA9PiBCeXRlc1NpemVNaXNtYXRjaEVycm9yLAogICAgQ2FsbEV4ZWN1dGlvbkVycm9yOiAoKSA9PiBDYWxsRXhlY3V0aW9uRXJyb3IsCiAgICBDaGFpbkRpc2Nvbm5lY3RlZEVycm9yOiAoKSA9PiBDaGFpbkRpc2Nvbm5lY3RlZEVycm9yLAogICAgQ2hhaW5Eb2VzTm90U3VwcG9ydENvbnRyYWN0OiAoKSA9PiBDaGFpbkRvZXNOb3RTdXBwb3J0Q29udHJhY3QsCiAgICBDaGFpbk1pc21hdGNoRXJyb3I6ICgpID0+IENoYWluTWlzbWF0Y2hFcnJvciwKICAgIENoYWluTm90Rm91bmRFcnJvcjogKCkgPT4gQ2hhaW5Ob3RGb3VuZEVycm9yLAogICAgQ2lyY3VsYXJSZWZlcmVuY2VFcnJvcjogKCkgPT4gQ2lyY3VsYXJSZWZlcmVuY2VFcnJvciwKICAgIENsaWVudENoYWluTm90Q29uZmlndXJlZEVycm9yOiAoKSA9PiBDbGllbnRDaGFpbk5vdENvbmZpZ3VyZWRFcnJvciwKICAgIENvbnRyYWN0RnVuY3Rpb25FeGVjdXRpb25FcnJvcjogKCkgPT4gQ29udHJhY3RGdW5jdGlvbkV4ZWN1dGlvbkVycm9yLAogICAgQ29udHJhY3RGdW5jdGlvblJldmVydGVkRXJyb3I6ICgpID0+IENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yLAogICAgQ29udHJhY3RGdW5jdGlvblplcm9EYXRhRXJyb3I6ICgpID0+IENvbnRyYWN0RnVuY3Rpb25aZXJvRGF0YUVycm9yLAogICAgQ291bnRlcmZhY3R1YWxEZXBsb3ltZW50RmFpbGVkRXJyb3I6ICgpID0+IENvdW50ZXJmYWN0dWFsRGVwbG95bWVudEZhaWxlZEVycm9yLAogICAgRGVjb2RlTG9nRGF0YU1pc21hdGNoOiAoKSA9PiBEZWNvZGVMb2dEYXRhTWlzbWF0Y2gsCiAgICBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaDogKCkgPT4gRGVjb2RlTG9nVG9waWNzTWlzbWF0Y2gsCiAgICBFSVAxMTkzUHJvdmlkZXJScGNFcnJvcjogKCkgPT4gUHJvdmlkZXJScGNFcnJvcjIsCiAgICBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yOiAoKSA9PiBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yLAogICAgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yOiAoKSA9PiBFbnNBdmF0YXJJbnZhbGlkTmZ0VXJpRXJyb3IsCiAgICBFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yOiAoKSA9PiBFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yLAogICAgRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yOiAoKSA9PiBFbnNBdmF0YXJVcmlSZXNvbHV0aW9uRXJyb3IsCiAgICBFc3RpbWF0ZUdhc0V4ZWN1dGlvbkVycm9yOiAoKSA9PiBFc3RpbWF0ZUdhc0V4ZWN1dGlvbkVycm9yLAogICAgRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvcjogKCkgPT4gRXhlY3V0aW9uUmV2ZXJ0ZWRFcnJvciwKICAgIEZlZUNhcFRvb0hpZ2hFcnJvcjogKCkgPT4gRmVlQ2FwVG9vSGlnaEVycm9yLAogICAgRmVlQ2FwVG9vTG93RXJyb3I6ICgpID0+IEZlZUNhcFRvb0xvd0Vycm9yLAogICAgRmVlQ29uZmxpY3RFcnJvcjogKCkgPT4gRmVlQ29uZmxpY3RFcnJvciwKICAgIEZpbHRlclR5cGVOb3RTdXBwb3J0ZWRFcnJvcjogKCkgPT4gRmlsdGVyVHlwZU5vdFN1cHBvcnRlZEVycm9yLAogICAgSHR0cFJlcXVlc3RFcnJvcjogKCkgPT4gSHR0cFJlcXVlc3RFcnJvciwKICAgIEluc3VmZmljaWVudEZ1bmRzRXJyb3I6ICgpID0+IEluc3VmZmljaWVudEZ1bmRzRXJyb3IsCiAgICBJbnRlZ2VyT3V0T2ZSYW5nZUVycm9yOiAoKSA9PiBJbnRlZ2VyT3V0T2ZSYW5nZUVycm9yLAogICAgSW50ZXJuYWxScGNFcnJvcjogKCkgPT4gSW50ZXJuYWxScGNFcnJvciwKICAgIEludHJpbnNpY0dhc1Rvb0hpZ2hFcnJvcjogKCkgPT4gSW50cmluc2ljR2FzVG9vSGlnaEVycm9yLAogICAgSW50cmluc2ljR2FzVG9vTG93RXJyb3I6ICgpID0+IEludHJpbnNpY0dhc1Rvb0xvd0Vycm9yLAogICAgSW52YWxpZEFiaURlY29kaW5nVHlwZUVycm9yOiAoKSA9PiBJbnZhbGlkQWJpRGVjb2RpbmdUeXBlRXJyb3IsCiAgICBJbnZhbGlkQWJpRW5jb2RpbmdUeXBlRXJyb3I6ICgpID0+IEludmFsaWRBYmlFbmNvZGluZ1R5cGVFcnJvciwKICAgIEludmFsaWRBYmlJdGVtRXJyb3I6ICgpID0+IEludmFsaWRBYmlJdGVtRXJyb3IsCiAgICBJbnZhbGlkQWJpUGFyYW1ldGVyRXJyb3I6ICgpID0+IEludmFsaWRBYmlQYXJhbWV0ZXJFcnJvciwKICAgIEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3I6ICgpID0+IEludmFsaWRBYmlQYXJhbWV0ZXJzRXJyb3IsCiAgICBJbnZhbGlkQWJpVHlwZVBhcmFtZXRlckVycm9yOiAoKSA9PiBJbnZhbGlkQWJpVHlwZVBhcmFtZXRlckVycm9yLAogICAgSW52YWxpZEFkZHJlc3NFcnJvcjogKCkgPT4gSW52YWxpZEFkZHJlc3NFcnJvciwKICAgIEludmFsaWRBcnJheUVycm9yOiAoKSA9PiBJbnZhbGlkQXJyYXlFcnJvciwKICAgIEludmFsaWRCeXRlc0Jvb2xlYW5FcnJvcjogKCkgPT4gSW52YWxpZEJ5dGVzQm9vbGVhbkVycm9yLAogICAgSW52YWxpZENoYWluSWRFcnJvcjogKCkgPT4gSW52YWxpZENoYWluSWRFcnJvciwKICAgIEludmFsaWREZWZpbml0aW9uVHlwZUVycm9yOiAoKSA9PiBJbnZhbGlkRGVmaW5pdGlvblR5cGVFcnJvciwKICAgIEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3I6ICgpID0+IEludmFsaWRGdW5jdGlvbk1vZGlmaWVyRXJyb3IsCiAgICBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yOiAoKSA9PiBJbnZhbGlkSGV4Qm9vbGVhbkVycm9yLAogICAgSW52YWxpZEhleFZhbHVlRXJyb3I6ICgpID0+IEludmFsaWRIZXhWYWx1ZUVycm9yLAogICAgSW52YWxpZElucHV0UnBjRXJyb3I6ICgpID0+IEludmFsaWRJbnB1dFJwY0Vycm9yLAogICAgSW52YWxpZExlZ2FjeVZFcnJvcjogKCkgPT4gSW52YWxpZExlZ2FjeVZFcnJvciwKICAgIEludmFsaWRNb2RpZmllckVycm9yOiAoKSA9PiBJbnZhbGlkTW9kaWZpZXJFcnJvciwKICAgIEludmFsaWRQYXJhbWV0ZXJFcnJvcjogKCkgPT4gSW52YWxpZFBhcmFtZXRlckVycm9yLAogICAgSW52YWxpZFBhcmFtc1JwY0Vycm9yOiAoKSA9PiBJbnZhbGlkUGFyYW1zUnBjRXJyb3IsCiAgICBJbnZhbGlkUGFyZW50aGVzaXNFcnJvcjogKCkgPT4gSW52YWxpZFBhcmVudGhlc2lzRXJyb3IsCiAgICBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yOiAoKSA9PiBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yLAogICAgSW52YWxpZFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uRXJyb3I6ICgpID0+IEludmFsaWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbkVycm9yLAogICAgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yOiAoKSA9PiBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uRXJyb3IsCiAgICBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uVHlwZUVycm9yOiAoKSA9PiBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uVHlwZUVycm9yLAogICAgSW52YWxpZFNpZ25hdHVyZUVycm9yOiAoKSA9PiBJbnZhbGlkU2lnbmF0dXJlRXJyb3IsCiAgICBJbnZhbGlkU3RvcmFnZUtleVNpemVFcnJvcjogKCkgPT4gSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IsCiAgICBJbnZhbGlkU3RydWN0U2lnbmF0dXJlRXJyb3I6ICgpID0+IEludmFsaWRTdHJ1Y3RTaWduYXR1cmVFcnJvciwKICAgIEpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvcjogKCkgPT4gSnNvblJwY1ZlcnNpb25VbnN1cHBvcnRlZEVycm9yLAogICAgTGltaXRFeGNlZWRlZFJwY0Vycm9yOiAoKSA9PiBMaW1pdEV4Y2VlZGVkUnBjRXJyb3IsCiAgICBNYXhGZWVQZXJHYXNUb29Mb3dFcnJvcjogKCkgPT4gTWF4RmVlUGVyR2FzVG9vTG93RXJyb3IsCiAgICBNZXRob2ROb3RGb3VuZFJwY0Vycm9yOiAoKSA9PiBNZXRob2ROb3RGb3VuZFJwY0Vycm9yLAogICAgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3I6ICgpID0+IE1ldGhvZE5vdFN1cHBvcnRlZFJwY0Vycm9yLAogICAgTm9uY2VNYXhWYWx1ZUVycm9yOiAoKSA9PiBOb25jZU1heFZhbHVlRXJyb3IsCiAgICBOb25jZVRvb0hpZ2hFcnJvcjogKCkgPT4gTm9uY2VUb29IaWdoRXJyb3IsCiAgICBOb25jZVRvb0xvd0Vycm9yOiAoKSA9PiBOb25jZVRvb0xvd0Vycm9yLAogICAgUGFyc2VScGNFcnJvcjogKCkgPT4gUGFyc2VScGNFcnJvciwKICAgIFByb3ZpZGVyRGlzY29ubmVjdGVkRXJyb3I6ICgpID0+IFByb3ZpZGVyRGlzY29ubmVjdGVkRXJyb3IsCiAgICBQcm92aWRlclJwY0Vycm9yOiAoKSA9PiBQcm92aWRlclJwY0Vycm9yLAogICAgUmF3Q29udHJhY3RFcnJvcjogKCkgPT4gUmF3Q29udHJhY3RFcnJvciwKICAgIFJlc291cmNlTm90Rm91bmRScGNFcnJvcjogKCkgPT4gUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yLAogICAgUmVzb3VyY2VVbmF2YWlsYWJsZVJwY0Vycm9yOiAoKSA9PiBSZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IsCiAgICBScGNFcnJvcjogKCkgPT4gUnBjRXJyb3IsCiAgICBScGNSZXF1ZXN0RXJyb3I6ICgpID0+IFJwY1JlcXVlc3RFcnJvciwKICAgIFNpemVFeGNlZWRzUGFkZGluZ1NpemVFcnJvcjogKCkgPT4gU2l6ZUV4Y2VlZHNQYWRkaW5nU2l6ZUVycm9yLAogICAgU2l6ZU92ZXJmbG93RXJyb3I6ICgpID0+IFNpemVPdmVyZmxvd0Vycm9yLAogICAgU2xpY2VPZmZzZXRPdXRPZkJvdW5kc0Vycm9yOiAoKSA9PiBTbGljZU9mZnNldE91dE9mQm91bmRzRXJyb3IsCiAgICBTb2NrZXRDbG9zZWRFcnJvcjogKCkgPT4gU29ja2V0Q2xvc2VkRXJyb3IsCiAgICBTb2xpZGl0eVByb3RlY3RlZEtleXdvcmRFcnJvcjogKCkgPT4gU29saWRpdHlQcm90ZWN0ZWRLZXl3b3JkRXJyb3IsCiAgICBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yOiAoKSA9PiBTdGF0ZUFzc2lnbm1lbnRDb25mbGljdEVycm9yLAogICAgU3dpdGNoQ2hhaW5FcnJvcjogKCkgPT4gU3dpdGNoQ2hhaW5FcnJvciwKICAgIFRpbWVvdXRFcnJvcjogKCkgPT4gVGltZW91dEVycm9yLAogICAgVGlwQWJvdmVGZWVDYXBFcnJvcjogKCkgPT4gVGlwQWJvdmVGZWVDYXBFcnJvciwKICAgIFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IsCiAgICBUcmFuc2FjdGlvbk5vdEZvdW5kRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uTm90Rm91bmRFcnJvciwKICAgIFRyYW5zYWN0aW9uUmVjZWlwdE5vdEZvdW5kRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uUmVjZWlwdE5vdEZvdW5kRXJyb3IsCiAgICBUcmFuc2FjdGlvblJlamVjdGVkUnBjRXJyb3I6ICgpID0+IFRyYW5zYWN0aW9uUmVqZWN0ZWRScGNFcnJvciwKICAgIFRyYW5zYWN0aW9uVHlwZU5vdFN1cHBvcnRlZEVycm9yOiAoKSA9PiBUcmFuc2FjdGlvblR5cGVOb3RTdXBwb3J0ZWRFcnJvciwKICAgIFVuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3I6ICgpID0+IFVuYXV0aG9yaXplZFByb3ZpZGVyRXJyb3IsCiAgICBVbmtub3duTm9kZUVycm9yOiAoKSA9PiBVbmtub3duTm9kZUVycm9yLAogICAgVW5rbm93blJwY0Vycm9yOiAoKSA9PiBVbmtub3duUnBjRXJyb3IsCiAgICBVbmtub3duU2lnbmF0dXJlRXJyb3I6ICgpID0+IFVua25vd25TaWduYXR1cmVFcnJvciwKICAgIFVua25vd25UeXBlRXJyb3I6ICgpID0+IFVua25vd25UeXBlRXJyb3IsCiAgICBVbnN1cHBvcnRlZFBhY2tlZEFiaVR5cGU6ICgpID0+IFVuc3VwcG9ydGVkUGFja2VkQWJpVHlwZSwKICAgIFVuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvcjogKCkgPT4gVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLAogICAgVXJsUmVxdWlyZWRFcnJvcjogKCkgPT4gVXJsUmVxdWlyZWRFcnJvciwKICAgIFVzZXJSZWplY3RlZFJlcXVlc3RFcnJvcjogKCkgPT4gVXNlclJlamVjdGVkUmVxdWVzdEVycm9yLAogICAgV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvcjogKCkgPT4gV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvciwKICAgIFdlYlNvY2tldFJlcXVlc3RFcnJvcjogKCkgPT4gV2ViU29ja2V0UmVxdWVzdEVycm9yLAogICAgYXNzZXJ0Q3VycmVudENoYWluOiAoKSA9PiBhc3NlcnRDdXJyZW50Q2hhaW4sCiAgICBhc3NlcnRSZXF1ZXN0OiAoKSA9PiBhc3NlcnRSZXF1ZXN0LAogICAgYXNzZXJ0VHJhbnNhY3Rpb25FSVAxNTU5OiAoKSA9PiBhc3NlcnRUcmFuc2FjdGlvbkVJUDE1NTksCiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDI5MzA6ICgpID0+IGFzc2VydFRyYW5zYWN0aW9uRUlQMjkzMCwKICAgIGFzc2VydFRyYW5zYWN0aW9uTGVnYWN5OiAoKSA9PiBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSwKICAgIGJsb2JzVG9Db21taXRtZW50czogKCkgPT4gYmxvYnNUb0NvbW1pdG1lbnRzLAogICAgYmxvYnNUb1Byb29mczogKCkgPT4gYmxvYnNUb1Byb29mcywKICAgIGJvb2xUb0J5dGVzOiAoKSA9PiBib29sVG9CeXRlcywKICAgIGJvb2xUb0hleDogKCkgPT4gYm9vbFRvSGV4LAogICAgYnl0ZXNUb0JpZ0ludDogKCkgPT4gYnl0ZXNUb0JpZ0ludCwKICAgIGJ5dGVzVG9Cb29sOiAoKSA9PiBieXRlc1RvQm9vbCwKICAgIGJ5dGVzVG9IZXg6ICgpID0+IGJ5dGVzVG9IZXgsCiAgICBieXRlc1RvTnVtYmVyOiAoKSA9PiBieXRlc1RvTnVtYmVyLAogICAgYnl0ZXNUb1JscDogKCkgPT4gYnl0ZXNUb1JscCwKICAgIGJ5dGVzVG9TdHJpbmc6ICgpID0+IGJ5dGVzVG9TdHJpbmcsCiAgICBjY2lwRmV0Y2g6ICgpID0+IGNjaXBSZXF1ZXN0LAogICAgY2NpcFJlcXVlc3Q6ICgpID0+IGNjaXBSZXF1ZXN0LAogICAgY2hlY2tzdW1BZGRyZXNzOiAoKSA9PiBjaGVja3N1bUFkZHJlc3MsCiAgICBjb21taXRtZW50VG9WZXJzaW9uZWRIYXNoOiAoKSA9PiBjb21taXRtZW50VG9WZXJzaW9uZWRIYXNoLAogICAgY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlczogKCkgPT4gY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlcywKICAgIGNvbXBhY3RTaWduYXR1cmVUb0hleDogKCkgPT4gc2VyaWFsaXplQ29tcGFjdFNpZ25hdHVyZSwKICAgIGNvbXBhY3RTaWduYXR1cmVUb1NpZ25hdHVyZTogKCkgPT4gY29tcGFjdFNpZ25hdHVyZVRvU2lnbmF0dXJlLAogICAgY29uY2F0OiAoKSA9PiBjb25jYXQsCiAgICBjb25jYXRCeXRlczogKCkgPT4gY29uY2F0Qnl0ZXMyLAogICAgY29uY2F0SGV4OiAoKSA9PiBjb25jYXRIZXgsCiAgICBjcmVhdGVDbGllbnQ6ICgpID0+IGNyZWF0ZUNsaWVudCwKICAgIGNyZWF0ZU5vbmNlTWFuYWdlcjogKCkgPT4gY3JlYXRlTm9uY2VNYW5hZ2VyLAogICAgY3JlYXRlUHVibGljQ2xpZW50OiAoKSA9PiBjcmVhdGVQdWJsaWNDbGllbnQsCiAgICBjcmVhdGVUZXN0Q2xpZW50OiAoKSA9PiBjcmVhdGVUZXN0Q2xpZW50LAogICAgY3JlYXRlVHJhbnNwb3J0OiAoKSA9PiBjcmVhdGVUcmFuc3BvcnQsCiAgICBjcmVhdGVXYWxsZXRDbGllbnQ6ICgpID0+IGNyZWF0ZVdhbGxldENsaWVudCwKICAgIGN1c3RvbTogKCkgPT4gY3VzdG9tLAogICAgZGVjb2RlQWJpUGFyYW1ldGVyczogKCkgPT4gZGVjb2RlQWJpUGFyYW1ldGVycywKICAgIGRlY29kZURlcGxveURhdGE6ICgpID0+IGRlY29kZURlcGxveURhdGEsCiAgICBkZWNvZGVFcnJvclJlc3VsdDogKCkgPT4gZGVjb2RlRXJyb3JSZXN1bHQsCiAgICBkZWNvZGVFdmVudExvZzogKCkgPT4gZGVjb2RlRXZlbnRMb2csCiAgICBkZWNvZGVGdW5jdGlvbkRhdGE6ICgpID0+IGRlY29kZUZ1bmN0aW9uRGF0YSwKICAgIGRlY29kZUZ1bmN0aW9uUmVzdWx0OiAoKSA9PiBkZWNvZGVGdW5jdGlvblJlc3VsdCwKICAgIGRlZmluZUJsb2NrOiAoKSA9PiBkZWZpbmVCbG9jaywKICAgIGRlZmluZUNoYWluOiAoKSA9PiBkZWZpbmVDaGFpbiwKICAgIGRlZmluZUt6ZzogKCkgPT4gZGVmaW5lS3pnLAogICAgZGVmaW5lVHJhbnNhY3Rpb246ICgpID0+IGRlZmluZVRyYW5zYWN0aW9uLAogICAgZGVmaW5lVHJhbnNhY3Rpb25SZWNlaXB0OiAoKSA9PiBkZWZpbmVUcmFuc2FjdGlvblJlY2VpcHQsCiAgICBkZWZpbmVUcmFuc2FjdGlvblJlcXVlc3Q6ICgpID0+IGRlZmluZVRyYW5zYWN0aW9uUmVxdWVzdCwKICAgIGRlcGxveWxlc3NDYWxsVmlhQnl0ZWNvZGVCeXRlY29kZTogKCkgPT4gZGVwbG95bGVzc0NhbGxWaWFCeXRlY29kZUJ5dGVjb2RlLAogICAgZGVwbG95bGVzc0NhbGxWaWFGYWN0b3J5Qnl0ZWNvZGU6ICgpID0+IGRlcGxveWxlc3NDYWxsVmlhRmFjdG9yeUJ5dGVjb2RlLAogICAgZG9tYWluU2VwYXJhdG9yOiAoKSA9PiBkb21haW5TZXBhcmF0b3IsCiAgICBlbmNvZGVBYmlQYXJhbWV0ZXJzOiAoKSA9PiBlbmNvZGVBYmlQYXJhbWV0ZXJzLAogICAgZW5jb2RlRGVwbG95RGF0YTogKCkgPT4gZW5jb2RlRGVwbG95RGF0YSwKICAgIGVuY29kZUVycm9yUmVzdWx0OiAoKSA9PiBlbmNvZGVFcnJvclJlc3VsdCwKICAgIGVuY29kZUV2ZW50VG9waWNzOiAoKSA9PiBlbmNvZGVFdmVudFRvcGljcywKICAgIGVuY29kZUZ1bmN0aW9uRGF0YTogKCkgPT4gZW5jb2RlRnVuY3Rpb25EYXRhLAogICAgZW5jb2RlRnVuY3Rpb25SZXN1bHQ6ICgpID0+IGVuY29kZUZ1bmN0aW9uUmVzdWx0LAogICAgZW5jb2RlUGFja2VkOiAoKSA9PiBlbmNvZGVQYWNrZWQsCiAgICBlcmMyMEFiaTogKCkgPT4gZXJjMjBBYmksCiAgICBlcmMyMEFiaV9ieXRlczMyOiAoKSA9PiBlcmMyMEFiaV9ieXRlczMyLAogICAgZXJjNDYyNkFiaTogKCkgPT4gZXJjNDYyNkFiaSwKICAgIGVyYzcyMUFiaTogKCkgPT4gZXJjNzIxQWJpLAogICAgZXRoZXJVbml0czogKCkgPT4gZXRoZXJVbml0cywKICAgIGV4dHJhY3RDaGFpbjogKCkgPT4gZXh0cmFjdENoYWluLAogICAgZmFsbGJhY2s6ICgpID0+IGZhbGxiYWNrLAogICAgZm9ybWF0QmxvY2s6ICgpID0+IGZvcm1hdEJsb2NrLAogICAgZm9ybWF0RXRoZXI6ICgpID0+IGZvcm1hdEV0aGVyLAogICAgZm9ybWF0R3dlaTogKCkgPT4gZm9ybWF0R3dlaSwKICAgIGZvcm1hdExvZzogKCkgPT4gZm9ybWF0TG9nLAogICAgZm9ybWF0VHJhbnNhY3Rpb246ICgpID0+IGZvcm1hdFRyYW5zYWN0aW9uLAogICAgZm9ybWF0VHJhbnNhY3Rpb25SZWNlaXB0OiAoKSA9PiBmb3JtYXRUcmFuc2FjdGlvblJlY2VpcHQsCiAgICBmb3JtYXRUcmFuc2FjdGlvblJlcXVlc3Q6ICgpID0+IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdCwKICAgIGZvcm1hdFVuaXRzOiAoKSA9PiBmb3JtYXRVbml0cywKICAgIGZyb21CbG9iczogKCkgPT4gZnJvbUJsb2JzLAogICAgZnJvbUJ5dGVzOiAoKSA9PiBmcm9tQnl0ZXMsCiAgICBmcm9tSGV4OiAoKSA9PiBmcm9tSGV4LAogICAgZnJvbVJscDogKCkgPT4gZnJvbVJscCwKICAgIGdldEFiaUl0ZW06ICgpID0+IGdldEFiaUl0ZW0sCiAgICBnZXRBZGRyZXNzOiAoKSA9PiBnZXRBZGRyZXNzLAogICAgZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3M6ICgpID0+IGdldENoYWluQ29udHJhY3RBZGRyZXNzLAogICAgZ2V0Q29udHJhY3Q6ICgpID0+IGdldENvbnRyYWN0LAogICAgZ2V0Q29udHJhY3RBZGRyZXNzOiAoKSA9PiBnZXRDb250cmFjdEFkZHJlc3MyLAogICAgZ2V0Q29udHJhY3RFcnJvcjogKCkgPT4gZ2V0Q29udHJhY3RFcnJvciwKICAgIGdldENyZWF0ZTJBZGRyZXNzOiAoKSA9PiBnZXRDcmVhdGUyQWRkcmVzcywKICAgIGdldENyZWF0ZUFkZHJlc3M6ICgpID0+IGdldENyZWF0ZUFkZHJlc3MsCiAgICBnZXRFdmVudFNlbGVjdG9yOiAoKSA9PiB0b0V2ZW50U2VsZWN0b3IsCiAgICBnZXRFdmVudFNpZ25hdHVyZTogKCkgPT4gdG9TaWduYXR1cmUsCiAgICBnZXRGdW5jdGlvblNlbGVjdG9yOiAoKSA9PiB0b0Z1bmN0aW9uU2VsZWN0b3IsCiAgICBnZXRGdW5jdGlvblNpZ25hdHVyZTogKCkgPT4gdG9TaWduYXR1cmUsCiAgICBnZXRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlOiAoKSA9PiBnZXRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlLAogICAgZ2V0VHJhbnNhY3Rpb25UeXBlOiAoKSA9PiBnZXRUcmFuc2FjdGlvblR5cGUsCiAgICBnZXRUeXBlc0ZvckVJUDcxMkRvbWFpbjogKCkgPT4gZ2V0VHlwZXNGb3JFSVA3MTJEb21haW4sCiAgICBnd2VpVW5pdHM6ICgpID0+IGd3ZWlVbml0cywKICAgIGhhc2hEb21haW46ICgpID0+IGhhc2hEb21haW4sCiAgICBoYXNoTWVzc2FnZTogKCkgPT4gaGFzaE1lc3NhZ2UsCiAgICBoYXNoVHlwZWREYXRhOiAoKSA9PiBoYXNoVHlwZWREYXRhLAogICAgaGV4VG9CaWdJbnQ6ICgpID0+IGhleFRvQmlnSW50LAogICAgaGV4VG9Cb29sOiAoKSA9PiBoZXhUb0Jvb2wsCiAgICBoZXhUb0J5dGVzOiAoKSA9PiBoZXhUb0J5dGVzLAogICAgaGV4VG9Db21wYWN0U2lnbmF0dXJlOiAoKSA9PiBwYXJzZUNvbXBhY3RTaWduYXR1cmUsCiAgICBoZXhUb051bWJlcjogKCkgPT4gaGV4VG9OdW1iZXIsCiAgICBoZXhUb1JscDogKCkgPT4gaGV4VG9SbHAsCiAgICBoZXhUb1NpZ25hdHVyZTogKCkgPT4gcGFyc2VTaWduYXR1cmUyLAogICAgaGV4VG9TdHJpbmc6ICgpID0+IGhleFRvU3RyaW5nLAogICAgaHR0cDogKCkgPT4gaHR0cCwKICAgIGlzQWRkcmVzczogKCkgPT4gaXNBZGRyZXNzLAogICAgaXNBZGRyZXNzRXF1YWw6ICgpID0+IGlzQWRkcmVzc0VxdWFsLAogICAgaXNCeXRlczogKCkgPT4gaXNCeXRlczMsCiAgICBpc0VyYzY0OTJTaWduYXR1cmU6ICgpID0+IGlzRXJjNjQ5MlNpZ25hdHVyZSwKICAgIGlzSGFzaDogKCkgPT4gaXNIYXNoLAogICAgaXNIZXg6ICgpID0+IGlzSGV4LAogICAga2VjY2FrMjU2OiAoKSA9PiBrZWNjYWsyNTYsCiAgICBsYWJlbGhhc2g6ICgpID0+IGxhYmVsaGFzaCwKICAgIG1heEludDEwNDogKCkgPT4gbWF4SW50MTA0LAogICAgbWF4SW50MTEyOiAoKSA9PiBtYXhJbnQxMTIsCiAgICBtYXhJbnQxMjA6ICgpID0+IG1heEludDEyMCwKICAgIG1heEludDEyODogKCkgPT4gbWF4SW50MTI4LAogICAgbWF4SW50MTM2OiAoKSA9PiBtYXhJbnQxMzYsCiAgICBtYXhJbnQxNDQ6ICgpID0+IG1heEludDE0NCwKICAgIG1heEludDE1MjogKCkgPT4gbWF4SW50MTUyLAogICAgbWF4SW50MTY6ICgpID0+IG1heEludDE2LAogICAgbWF4SW50MTYwOiAoKSA9PiBtYXhJbnQxNjAsCiAgICBtYXhJbnQxNjg6ICgpID0+IG1heEludDE2OCwKICAgIG1heEludDE3NjogKCkgPT4gbWF4SW50MTc2LAogICAgbWF4SW50MTg0OiAoKSA9PiBtYXhJbnQxODQsCiAgICBtYXhJbnQxOTI6ICgpID0+IG1heEludDE5MiwKICAgIG1heEludDIwMDogKCkgPT4gbWF4SW50MjAwLAogICAgbWF4SW50MjA4OiAoKSA9PiBtYXhJbnQyMDgsCiAgICBtYXhJbnQyMTY6ICgpID0+IG1heEludDIxNiwKICAgIG1heEludDIyNDogKCkgPT4gbWF4SW50MjI0LAogICAgbWF4SW50MjMyOiAoKSA9PiBtYXhJbnQyMzIsCiAgICBtYXhJbnQyNDogKCkgPT4gbWF4SW50MjQsCiAgICBtYXhJbnQyNDA6ICgpID0+IG1heEludDI0MCwKICAgIG1heEludDI0ODogKCkgPT4gbWF4SW50MjQ4LAogICAgbWF4SW50MjU2OiAoKSA9PiBtYXhJbnQyNTYsCiAgICBtYXhJbnQzMjogKCkgPT4gbWF4SW50MzIsCiAgICBtYXhJbnQ0MDogKCkgPT4gbWF4SW50NDAsCiAgICBtYXhJbnQ0ODogKCkgPT4gbWF4SW50NDgsCiAgICBtYXhJbnQ1NjogKCkgPT4gbWF4SW50NTYsCiAgICBtYXhJbnQ2NDogKCkgPT4gbWF4SW50NjQsCiAgICBtYXhJbnQ3MjogKCkgPT4gbWF4SW50NzIsCiAgICBtYXhJbnQ4OiAoKSA9PiBtYXhJbnQ4LAogICAgbWF4SW50ODA6ICgpID0+IG1heEludDgwLAogICAgbWF4SW50ODg6ICgpID0+IG1heEludDg4LAogICAgbWF4SW50OTY6ICgpID0+IG1heEludDk2LAogICAgbWF4VWludDEwNDogKCkgPT4gbWF4VWludDEwNCwKICAgIG1heFVpbnQxMTI6ICgpID0+IG1heFVpbnQxMTIsCiAgICBtYXhVaW50MTIwOiAoKSA9PiBtYXhVaW50MTIwLAogICAgbWF4VWludDEyODogKCkgPT4gbWF4VWludDEyOCwKICAgIG1heFVpbnQxMzY6ICgpID0+IG1heFVpbnQxMzYsCiAgICBtYXhVaW50MTQ0OiAoKSA9PiBtYXhVaW50MTQ0LAogICAgbWF4VWludDE1MjogKCkgPT4gbWF4VWludDE1MiwKICAgIG1heFVpbnQxNjogKCkgPT4gbWF4VWludDE2LAogICAgbWF4VWludDE2MDogKCkgPT4gbWF4VWludDE2MCwKICAgIG1heFVpbnQxNjg6ICgpID0+IG1heFVpbnQxNjgsCiAgICBtYXhVaW50MTc2OiAoKSA9PiBtYXhVaW50MTc2LAogICAgbWF4VWludDE4NDogKCkgPT4gbWF4VWludDE4NCwKICAgIG1heFVpbnQxOTI6ICgpID0+IG1heFVpbnQxOTIsCiAgICBtYXhVaW50MjAwOiAoKSA9PiBtYXhVaW50MjAwLAogICAgbWF4VWludDIwODogKCkgPT4gbWF4VWludDIwOCwKICAgIG1heFVpbnQyMTY6ICgpID0+IG1heFVpbnQyMTYsCiAgICBtYXhVaW50MjI0OiAoKSA9PiBtYXhVaW50MjI0LAogICAgbWF4VWludDIzMjogKCkgPT4gbWF4VWludDIzMiwKICAgIG1heFVpbnQyNDogKCkgPT4gbWF4VWludDI0LAogICAgbWF4VWludDI0MDogKCkgPT4gbWF4VWludDI0MCwKICAgIG1heFVpbnQyNDg6ICgpID0+IG1heFVpbnQyNDgsCiAgICBtYXhVaW50MjU2OiAoKSA9PiBtYXhVaW50MjU2LAogICAgbWF4VWludDMyOiAoKSA9PiBtYXhVaW50MzIsCiAgICBtYXhVaW50NDA6ICgpID0+IG1heFVpbnQ0MCwKICAgIG1heFVpbnQ0ODogKCkgPT4gbWF4VWludDQ4LAogICAgbWF4VWludDU2OiAoKSA9PiBtYXhVaW50NTYsCiAgICBtYXhVaW50NjQ6ICgpID0+IG1heFVpbnQ2NCwKICAgIG1heFVpbnQ3MjogKCkgPT4gbWF4VWludDcyLAogICAgbWF4VWludDg6ICgpID0+IG1heFVpbnQ4LAogICAgbWF4VWludDgwOiAoKSA9PiBtYXhVaW50ODAsCiAgICBtYXhVaW50ODg6ICgpID0+IG1heFVpbnQ4OCwKICAgIG1heFVpbnQ5NjogKCkgPT4gbWF4VWludDk2LAogICAgbWluSW50MTA0OiAoKSA9PiBtaW5JbnQxMDQsCiAgICBtaW5JbnQxMTI6ICgpID0+IG1pbkludDExMiwKICAgIG1pbkludDEyMDogKCkgPT4gbWluSW50MTIwLAogICAgbWluSW50MTI4OiAoKSA9PiBtaW5JbnQxMjgsCiAgICBtaW5JbnQxMzY6ICgpID0+IG1pbkludDEzNiwKICAgIG1pbkludDE0NDogKCkgPT4gbWluSW50MTQ0LAogICAgbWluSW50MTUyOiAoKSA9PiBtaW5JbnQxNTIsCiAgICBtaW5JbnQxNjogKCkgPT4gbWluSW50MTYsCiAgICBtaW5JbnQxNjA6ICgpID0+IG1pbkludDE2MCwKICAgIG1pbkludDE2ODogKCkgPT4gbWluSW50MTY4LAogICAgbWluSW50MTc2OiAoKSA9PiBtaW5JbnQxNzYsCiAgICBtaW5JbnQxODQ6ICgpID0+IG1pbkludDE4NCwKICAgIG1pbkludDE5MjogKCkgPT4gbWluSW50MTkyLAogICAgbWluSW50MjAwOiAoKSA9PiBtaW5JbnQyMDAsCiAgICBtaW5JbnQyMDg6ICgpID0+IG1pbkludDIwOCwKICAgIG1pbkludDIxNjogKCkgPT4gbWluSW50MjE2LAogICAgbWluSW50MjI0OiAoKSA9PiBtaW5JbnQyMjQsCiAgICBtaW5JbnQyMzI6ICgpID0+IG1pbkludDIzMiwKICAgIG1pbkludDI0OiAoKSA9PiBtaW5JbnQyNCwKICAgIG1pbkludDI0MDogKCkgPT4gbWluSW50MjQwLAogICAgbWluSW50MjQ4OiAoKSA9PiBtaW5JbnQyNDgsCiAgICBtaW5JbnQyNTY6ICgpID0+IG1pbkludDI1NiwKICAgIG1pbkludDMyOiAoKSA9PiBtaW5JbnQzMiwKICAgIG1pbkludDQwOiAoKSA9PiBtaW5JbnQ0MCwKICAgIG1pbkludDQ4OiAoKSA9PiBtaW5JbnQ0OCwKICAgIG1pbkludDU2OiAoKSA9PiBtaW5JbnQ1NiwKICAgIG1pbkludDY0OiAoKSA9PiBtaW5JbnQ2NCwKICAgIG1pbkludDcyOiAoKSA9PiBtaW5JbnQ3MiwKICAgIG1pbkludDg6ICgpID0+IG1pbkludDgsCiAgICBtaW5JbnQ4MDogKCkgPT4gbWluSW50ODAsCiAgICBtaW5JbnQ4ODogKCkgPT4gbWluSW50ODgsCiAgICBtaW5JbnQ5NjogKCkgPT4gbWluSW50OTYsCiAgICBtdWx0aWNhbGwzQWJpOiAoKSA9PiBtdWx0aWNhbGwzQWJpLAogICAgbmFtZWhhc2g6ICgpID0+IG5hbWVoYXNoLAogICAgbm9uY2VNYW5hZ2VyOiAoKSA9PiBub25jZU1hbmFnZXIsCiAgICBudW1iZXJUb0J5dGVzOiAoKSA9PiBudW1iZXJUb0J5dGVzLAogICAgbnVtYmVyVG9IZXg6ICgpID0+IG51bWJlclRvSGV4LAogICAgb2ZmY2hhaW5Mb29rdXA6ICgpID0+IG9mZmNoYWluTG9va3VwLAogICAgb2ZmY2hhaW5Mb29rdXBBYmlJdGVtOiAoKSA9PiBvZmZjaGFpbkxvb2t1cEFiaUl0ZW0sCiAgICBvZmZjaGFpbkxvb2t1cFNpZ25hdHVyZTogKCkgPT4gb2ZmY2hhaW5Mb29rdXBTaWduYXR1cmUsCiAgICBwYWQ6ICgpID0+IHBhZCwKICAgIHBhZEJ5dGVzOiAoKSA9PiBwYWRCeXRlcywKICAgIHBhZEhleDogKCkgPT4gcGFkSGV4LAogICAgcGFyc2VBYmk6ICgpID0+IHBhcnNlQWJpLAogICAgcGFyc2VBYmlJdGVtOiAoKSA9PiBwYXJzZUFiaUl0ZW0sCiAgICBwYXJzZUFiaVBhcmFtZXRlcjogKCkgPT4gcGFyc2VBYmlQYXJhbWV0ZXIyLAogICAgcGFyc2VBYmlQYXJhbWV0ZXJzOiAoKSA9PiBwYXJzZUFiaVBhcmFtZXRlcnMsCiAgICBwYXJzZUNvbXBhY3RTaWduYXR1cmU6ICgpID0+IHBhcnNlQ29tcGFjdFNpZ25hdHVyZSwKICAgIHBhcnNlRXJjNjQ5MlNpZ25hdHVyZTogKCkgPT4gcGFyc2VFcmM2NDkyU2lnbmF0dXJlLAogICAgcGFyc2VFdGhlcjogKCkgPT4gcGFyc2VFdGhlciwKICAgIHBhcnNlRXZlbnRMb2dzOiAoKSA9PiBwYXJzZUV2ZW50TG9ncywKICAgIHBhcnNlR3dlaTogKCkgPT4gcGFyc2VHd2VpLAogICAgcGFyc2VTaWduYXR1cmU6ICgpID0+IHBhcnNlU2lnbmF0dXJlMiwKICAgIHBhcnNlVHJhbnNhY3Rpb246ICgpID0+IHBhcnNlVHJhbnNhY3Rpb24sCiAgICBwYXJzZVVuaXRzOiAoKSA9PiBwYXJzZVVuaXRzLAogICAgcHJlcGFyZUVuY29kZUZ1bmN0aW9uRGF0YTogKCkgPT4gcHJlcGFyZUVuY29kZUZ1bmN0aW9uRGF0YSwKICAgIHByZXNpZ25NZXNzYWdlUHJlZml4OiAoKSA9PiBwcmVzaWduTWVzc2FnZVByZWZpeCwKICAgIHB1YmxpY0FjdGlvbnM6ICgpID0+IHB1YmxpY0FjdGlvbnMsCiAgICByZWNvdmVyQWRkcmVzczogKCkgPT4gcmVjb3ZlckFkZHJlc3MsCiAgICByZWNvdmVyTWVzc2FnZUFkZHJlc3M6ICgpID0+IHJlY292ZXJNZXNzYWdlQWRkcmVzcywKICAgIHJlY292ZXJQdWJsaWNLZXk6ICgpID0+IHJlY292ZXJQdWJsaWNLZXksCiAgICByZWNvdmVyVHJhbnNhY3Rpb25BZGRyZXNzOiAoKSA9PiByZWNvdmVyVHJhbnNhY3Rpb25BZGRyZXNzLAogICAgcmVjb3ZlclR5cGVkRGF0YUFkZHJlc3M6ICgpID0+IHJlY292ZXJUeXBlZERhdGFBZGRyZXNzLAogICAgcmlwZW1kMTYwOiAoKSA9PiByaXBlbWQxNjAyLAogICAgcnBjU2NoZW1hOiAoKSA9PiBycGNTY2hlbWEsCiAgICBycGNUcmFuc2FjdGlvblR5cGU6ICgpID0+IHJwY1RyYW5zYWN0aW9uVHlwZSwKICAgIHNlcmlhbGl6ZUFjY2Vzc0xpc3Q6ICgpID0+IHNlcmlhbGl6ZUFjY2Vzc0xpc3QsCiAgICBzZXJpYWxpemVDb21wYWN0U2lnbmF0dXJlOiAoKSA9PiBzZXJpYWxpemVDb21wYWN0U2lnbmF0dXJlLAogICAgc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZTogKCkgPT4gc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZSwKICAgIHNlcmlhbGl6ZVNpZ25hdHVyZTogKCkgPT4gc2VyaWFsaXplU2lnbmF0dXJlLAogICAgc2VyaWFsaXplVHJhbnNhY3Rpb246ICgpID0+IHNlcmlhbGl6ZVRyYW5zYWN0aW9uLAogICAgc2VyaWFsaXplVHlwZWREYXRhOiAoKSA9PiBzZXJpYWxpemVUeXBlZERhdGEsCiAgICBzZXRFcnJvckNvbmZpZzogKCkgPT4gc2V0RXJyb3JDb25maWcsCiAgICBzZXR1cEt6ZzogKCkgPT4gc2V0dXBLemcsCiAgICBzaGEyNTY6ICgpID0+IHNoYTI1NjIsCiAgICBzaWRlY2Fyc1RvVmVyc2lvbmVkSGFzaGVzOiAoKSA9PiBzaWRlY2Fyc1RvVmVyc2lvbmVkSGFzaGVzLAogICAgc2lnbmF0dXJlVG9Db21wYWN0U2lnbmF0dXJlOiAoKSA9PiBzaWduYXR1cmVUb0NvbXBhY3RTaWduYXR1cmUsCiAgICBzaWduYXR1cmVUb0hleDogKCkgPT4gc2VyaWFsaXplU2lnbmF0dXJlLAogICAgc2l6ZTogKCkgPT4gc2l6ZSwKICAgIHNsaWNlOiAoKSA9PiBzbGljZSwKICAgIHNsaWNlQnl0ZXM6ICgpID0+IHNsaWNlQnl0ZXMsCiAgICBzbGljZUhleDogKCkgPT4gc2xpY2VIZXgsCiAgICBzdHJpbmdUb0J5dGVzOiAoKSA9PiBzdHJpbmdUb0J5dGVzLAogICAgc3RyaW5nVG9IZXg6ICgpID0+IHN0cmluZ1RvSGV4LAogICAgc3RyaW5naWZ5OiAoKSA9PiBzdHJpbmdpZnksCiAgICB0ZXN0QWN0aW9uczogKCkgPT4gdGVzdEFjdGlvbnMsCiAgICB0b0Jsb2JTaWRlY2FyczogKCkgPT4gdG9CbG9iU2lkZWNhcnMsCiAgICB0b0Jsb2JzOiAoKSA9PiB0b0Jsb2JzLAogICAgdG9CeXRlczogKCkgPT4gdG9CeXRlcywKICAgIHRvRXZlbnRIYXNoOiAoKSA9PiB0b1NpZ25hdHVyZUhhc2gsCiAgICB0b0V2ZW50U2VsZWN0b3I6ICgpID0+IHRvRXZlbnRTZWxlY3RvciwKICAgIHRvRXZlbnRTaWduYXR1cmU6ICgpID0+IHRvU2lnbmF0dXJlLAogICAgdG9GdW5jdGlvbkhhc2g6ICgpID0+IHRvU2lnbmF0dXJlSGFzaCwKICAgIHRvRnVuY3Rpb25TZWxlY3RvcjogKCkgPT4gdG9GdW5jdGlvblNlbGVjdG9yLAogICAgdG9GdW5jdGlvblNpZ25hdHVyZTogKCkgPT4gdG9TaWduYXR1cmUsCiAgICB0b0hleDogKCkgPT4gdG9IZXgsCiAgICB0b1ByZWZpeGVkTWVzc2FnZTogKCkgPT4gdG9QcmVmaXhlZE1lc3NhZ2UsCiAgICB0b1JscDogKCkgPT4gdG9SbHAsCiAgICB0cmFuc2FjdGlvblR5cGU6ICgpID0+IHRyYW5zYWN0aW9uVHlwZSwKICAgIHRyaW06ICgpID0+IHRyaW0sCiAgICB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JBYmk6ICgpID0+IHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckFiaSwKICAgIHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckJ5dGVDb2RlOiAoKSA9PiB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JCeXRlQ29kZSwKICAgIHZhbGlkYXRlVHlwZWREYXRhOiAoKSA9PiB2YWxpZGF0ZVR5cGVkRGF0YSwKICAgIHZlcmlmeUhhc2g6ICgpID0+IHZlcmlmeUhhc2gsCiAgICB2ZXJpZnlNZXNzYWdlOiAoKSA9PiB2ZXJpZnlNZXNzYWdlLAogICAgdmVyaWZ5VHlwZWREYXRhOiAoKSA9PiB2ZXJpZnlUeXBlZERhdGEsCiAgICB3YWxsZXRBY3Rpb25zOiAoKSA9PiB3YWxsZXRBY3Rpb25zLAogICAgd2ViU29ja2V0OiAoKSA9PiB3ZWJTb2NrZXQsCiAgICB3ZWlVbml0czogKCkgPT4gd2VpVW5pdHMsCiAgICB3aXRoUmV0cnk6ICgpID0+IHdpdGhSZXRyeSwKICAgIHdpdGhUaW1lb3V0OiAoKSA9PiB3aXRoVGltZW91dCwKICAgIHplcm9BZGRyZXNzOiAoKSA9PiB6ZXJvQWRkcmVzcywKICAgIHplcm9IYXNoOiAoKSA9PiB6ZXJvSGFzaAogIH0pOwogIGluaXRfZXhwb3J0cygpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2dldEFjdGlvbi5qcwogIGZ1bmN0aW9uIGdldEFjdGlvbihjbGllbnQsIGFjdGlvbkZuLCBuYW1lKSB7CiAgICBjb25zdCBhY3Rpb25faW1wbGljaXQgPSBjbGllbnRbYWN0aW9uRm4ubmFtZV07CiAgICBpZiAodHlwZW9mIGFjdGlvbl9pbXBsaWNpdCA9PT0gImZ1bmN0aW9uIikKICAgICAgcmV0dXJuIGFjdGlvbl9pbXBsaWNpdDsKICAgIGNvbnN0IGFjdGlvbl9leHBsaWNpdCA9IGNsaWVudFtuYW1lXTsKICAgIGlmICh0eXBlb2YgYWN0aW9uX2V4cGxpY2l0ID09PSAiZnVuY3Rpb24iKQogICAgICByZXR1cm4gYWN0aW9uX2V4cGxpY2l0OwogICAgcmV0dXJuIChwYXJhbXMpID0+IGFjdGlvbkZuKGNsaWVudCwgcGFyYW1zKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2VuY29kZUV2ZW50VG9waWNzLmpzCiAgaW5pdF9hYmkoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvbG9nLmpzCiAgaW5pdF9iYXNlKCk7CiAgdmFyIEZpbHRlclR5cGVOb3RTdXBwb3J0ZWRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih0eXBlKSB7CiAgICAgIHN1cGVyKGBGaWx0ZXIgdHlwZSAiJHt0eXBlfSIgaXMgbm90IHN1cHBvcnRlZC5gLCB7CiAgICAgICAgbmFtZTogIkZpbHRlclR5cGVOb3RTdXBwb3J0ZWRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvZW5jb2RlRXZlbnRUb3BpY3MuanMKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X2tlY2NhazI1NigpOwogIGluaXRfdG9FdmVudFNlbGVjdG9yKCk7CiAgaW5pdF9lbmNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9mb3JtYXRBYmlJdGVtMigpOwogIGluaXRfZ2V0QWJpSXRlbSgpOwogIHZhciBkb2NzUGF0aCA9ICIvZG9jcy9jb250cmFjdC9lbmNvZGVFdmVudFRvcGljcyI7CiAgZnVuY3Rpb24gZW5jb2RlRXZlbnRUb3BpY3MocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGV2ZW50TmFtZSwgYXJncyB9ID0gcGFyYW1ldGVyczsKICAgIGxldCBhYmlJdGVtID0gYWJpMlswXTsKICAgIGlmIChldmVudE5hbWUpIHsKICAgICAgY29uc3QgaXRlbSA9IGdldEFiaUl0ZW0oeyBhYmk6IGFiaTIsIG5hbWU6IGV2ZW50TmFtZSB9KTsKICAgICAgaWYgKCFpdGVtKQogICAgICAgIHRocm93IG5ldyBBYmlFdmVudE5vdEZvdW5kRXJyb3IoZXZlbnROYW1lLCB7IGRvY3NQYXRoIH0pOwogICAgICBhYmlJdGVtID0gaXRlbTsKICAgIH0KICAgIGlmIChhYmlJdGVtLnR5cGUgIT09ICJldmVudCIpCiAgICAgIHRocm93IG5ldyBBYmlFdmVudE5vdEZvdW5kRXJyb3Iodm9pZCAwLCB7IGRvY3NQYXRoIH0pOwogICAgY29uc3QgZGVmaW5pdGlvbiA9IGZvcm1hdEFiaUl0ZW0yKGFiaUl0ZW0pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdG9FdmVudFNlbGVjdG9yKGRlZmluaXRpb24pOwogICAgbGV0IHRvcGljcyA9IFtdOwogICAgaWYgKGFyZ3MgJiYgImlucHV0cyIgaW4gYWJpSXRlbSkgewogICAgICBjb25zdCBpbmRleGVkSW5wdXRzID0gYWJpSXRlbS5pbnB1dHM/LmZpbHRlcigocGFyYW0pID0+ICJpbmRleGVkIiBpbiBwYXJhbSAmJiBwYXJhbS5pbmRleGVkKTsKICAgICAgY29uc3QgYXJnc18gPSBBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IE9iamVjdC52YWx1ZXMoYXJncykubGVuZ3RoID4gMCA/IGluZGV4ZWRJbnB1dHM/Lm1hcCgoeCkgPT4gYXJnc1t4Lm5hbWVdKSA/PyBbXSA6IFtdOwogICAgICBpZiAoYXJnc18ubGVuZ3RoID4gMCkgewogICAgICAgIHRvcGljcyA9IGluZGV4ZWRJbnB1dHM/Lm1hcCgocGFyYW0sIGkpID0+IHsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3NfW2ldKSkKICAgICAgICAgICAgcmV0dXJuIGFyZ3NfW2ldLm1hcCgoXywgaikgPT4gZW5jb2RlQXJnKHsgcGFyYW0sIHZhbHVlOiBhcmdzX1tpXVtqXSB9KSk7CiAgICAgICAgICByZXR1cm4gYXJnc19baV0gPyBlbmNvZGVBcmcoeyBwYXJhbSwgdmFsdWU6IGFyZ3NfW2ldIH0pIDogbnVsbDsKICAgICAgICB9KSA/PyBbXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIFtzaWduYXR1cmUsIC4uLnRvcGljc107CiAgfQogIGZ1bmN0aW9uIGVuY29kZUFyZyh7IHBhcmFtLCB2YWx1ZSB9KSB7CiAgICBpZiAocGFyYW0udHlwZSA9PT0gInN0cmluZyIgfHwgcGFyYW0udHlwZSA9PT0gImJ5dGVzIikKICAgICAgcmV0dXJuIGtlY2NhazI1Nih0b0J5dGVzKHZhbHVlKSk7CiAgICBpZiAocGFyYW0udHlwZSA9PT0gInR1cGxlIiB8fCBwYXJhbS50eXBlLm1hdGNoKC9eKC4qKVxbKFxkKyk/XF0kLykpCiAgICAgIHRocm93IG5ldyBGaWx0ZXJUeXBlTm90U3VwcG9ydGVkRXJyb3IocGFyYW0udHlwZSk7CiAgICByZXR1cm4gZW5jb2RlQWJpUGFyYW1ldGVycyhbcGFyYW1dLCBbdmFsdWVdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvY3JlYXRlQ29udHJhY3RFdmVudEZpbHRlci5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9maWx0ZXJzL2NyZWF0ZUZpbHRlclJlcXVlc3RTY29wZS5qcwogIGZ1bmN0aW9uIGNyZWF0ZUZpbHRlclJlcXVlc3RTY29wZShjbGllbnQsIHsgbWV0aG9kIH0pIHsKICAgIGNvbnN0IHJlcXVlc3RNYXAgPSB7fTsKICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIpCiAgICAgIGNsaWVudC50cmFuc3BvcnQub25SZXNwb25zZT8uKCh7IG1ldGhvZDogbWV0aG9kXywgcmVzcG9uc2U6IGlkLCBzdGF0dXMsIHRyYW5zcG9ydCB9KSA9PiB7CiAgICAgICAgaWYgKHN0YXR1cyA9PT0gInN1Y2Nlc3MiICYmIG1ldGhvZCA9PT0gbWV0aG9kXykKICAgICAgICAgIHJlcXVlc3RNYXBbaWRdID0gdHJhbnNwb3J0LnJlcXVlc3Q7CiAgICAgIH0pOwogICAgcmV0dXJuIChpZCkgPT4gcmVxdWVzdE1hcFtpZF0gfHwgY2xpZW50LnJlcXVlc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2NyZWF0ZUNvbnRyYWN0RXZlbnRGaWx0ZXIuanMKICBhc3luYyBmdW5jdGlvbiBjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhZGRyZXNzLCBhYmk6IGFiaTIsIGFyZ3MsIGV2ZW50TmFtZSwgZnJvbUJsb2NrLCBzdHJpY3QsIHRvQmxvY2sgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBnZXRSZXF1ZXN0ID0gY3JlYXRlRmlsdGVyUmVxdWVzdFNjb3BlKGNsaWVudCwgewogICAgICBtZXRob2Q6ICJldGhfbmV3RmlsdGVyIgogICAgfSk7CiAgICBjb25zdCB0b3BpY3MgPSBldmVudE5hbWUgPyBlbmNvZGVFdmVudFRvcGljcyh7CiAgICAgIGFiaTogYWJpMiwKICAgICAgYXJncywKICAgICAgZXZlbnROYW1lCiAgICB9KSA6IHZvaWQgMDsKICAgIGNvbnN0IGlkID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfbmV3RmlsdGVyIiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgewogICAgICAgICAgYWRkcmVzcywKICAgICAgICAgIGZyb21CbG9jazogdHlwZW9mIGZyb21CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleChmcm9tQmxvY2spIDogZnJvbUJsb2NrLAogICAgICAgICAgdG9CbG9jazogdHlwZW9mIHRvQmxvY2sgPT09ICJiaWdpbnQiID8gbnVtYmVyVG9IZXgodG9CbG9jaykgOiB0b0Jsb2NrLAogICAgICAgICAgdG9waWNzCiAgICAgICAgfQogICAgICBdCiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIGFiaTogYWJpMiwKICAgICAgYXJncywKICAgICAgZXZlbnROYW1lLAogICAgICBpZCwKICAgICAgcmVxdWVzdDogZ2V0UmVxdWVzdChpZCksCiAgICAgIHN0cmljdDogQm9vbGVhbihzdHJpY3QpLAogICAgICB0eXBlOiAiZXZlbnQiCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9lc3RpbWF0ZUNvbnRyYWN0R2FzLmpzCiAgaW5pdF9wYXJzZUFjY291bnQoKTsKICBpbml0X2VuY29kZUZ1bmN0aW9uRGF0YSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vycm9ycy9nZXRDb250cmFjdEVycm9yLmpzCiAgaW5pdF9hYmkoKTsKICBpbml0X2Jhc2UoKTsKICBpbml0X2NvbnRyYWN0KCk7CiAgaW5pdF9ycGMoKTsKICB2YXIgRVhFQ1VUSU9OX1JFVkVSVEVEX0VSUk9SX0NPREUgPSAzOwogIGZ1bmN0aW9uIGdldENvbnRyYWN0RXJyb3IoZXJyLCB7IGFiaTogYWJpMiwgYWRkcmVzcywgYXJncywgZG9jc1BhdGg6IGRvY3NQYXRoOSwgZnVuY3Rpb25OYW1lLCBzZW5kZXIgfSkgewogICAgY29uc3QgeyBjb2RlLCBkYXRhLCBtZXNzYWdlLCBzaG9ydE1lc3NhZ2UgfSA9IGVyciBpbnN0YW5jZW9mIFJhd0NvbnRyYWN0RXJyb3IgPyBlcnIgOiBlcnIgaW5zdGFuY2VvZiBCYXNlRXJyb3IyID8gZXJyLndhbGsoKGVycjIpID0+ICJkYXRhIiBpbiBlcnIyKSB8fCBlcnIud2FsaygpIDoge307CiAgICBjb25zdCBjYXVzZSA9ICgoKSA9PiB7CiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IpCiAgICAgICAgcmV0dXJuIG5ldyBDb250cmFjdEZ1bmN0aW9uWmVyb0RhdGFFcnJvcih7IGZ1bmN0aW9uTmFtZSB9KTsKICAgICAgaWYgKFtFWEVDVVRJT05fUkVWRVJURURfRVJST1JfQ09ERSwgSW50ZXJuYWxScGNFcnJvci5jb2RlXS5pbmNsdWRlcyhjb2RlKSAmJiAoZGF0YSB8fCBtZXNzYWdlIHx8IHNob3J0TWVzc2FnZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yKHsKICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgIGRhdGE6IHR5cGVvZiBkYXRhID09PSAib2JqZWN0IiA/IGRhdGEuZGF0YSA6IGRhdGEsCiAgICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgICBtZXNzYWdlOiBzaG9ydE1lc3NhZ2UgPz8gbWVzc2FnZQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBlcnI7CiAgICB9KSgpOwogICAgcmV0dXJuIG5ldyBDb250cmFjdEZ1bmN0aW9uRXhlY3V0aW9uRXJyb3IoY2F1c2UsIHsKICAgICAgYWJpOiBhYmkyLAogICAgICBhcmdzLAogICAgICBjb250cmFjdEFkZHJlc3M6IGFkZHJlc3MsCiAgICAgIGRvY3NQYXRoOiBkb2NzUGF0aDksCiAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgc2VuZGVyCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVHYXMuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGluaXRfYmFzZSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjY291bnRzL3V0aWxzL3B1YmxpY0tleVRvQWRkcmVzcy5qcwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfa2VjY2FrMjU2KCk7CiAgZnVuY3Rpb24gcHVibGljS2V5VG9BZGRyZXNzKHB1YmxpY0tleSkgewogICAgY29uc3QgYWRkcmVzcyA9IGtlY2NhazI1NihgMHgke3B1YmxpY0tleS5zdWJzdHJpbmcoNCl9YCkuc3Vic3RyaW5nKDI2KTsKICAgIHJldHVybiBjaGVja3N1bUFkZHJlc3MoYDB4JHthZGRyZXNzfWApOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcmVjb3ZlclB1YmxpY0tleS5qcwogIGluaXRfaXNIZXgoKTsKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gcmVjb3ZlclB1YmxpY0tleSh7IGhhc2g6IGhhc2gzLCBzaWduYXR1cmUgfSkgewogICAgY29uc3QgaGFzaEhleCA9IGlzSGV4KGhhc2gzKSA/IGhhc2gzIDogdG9IZXgoaGFzaDMpOwogICAgY29uc3QgeyBzZWNwMjU2azE6IHNlY3AyNTZrMTIgfSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gKGluaXRfc2VjcDI1NmsxKCksIHNlY3AyNTZrMV9leHBvcnRzKSk7CiAgICBjb25zdCBzaWduYXR1cmVfID0gKCgpID0+IHsKICAgICAgaWYgKHR5cGVvZiBzaWduYXR1cmUgPT09ICJvYmplY3QiICYmICJyIiBpbiBzaWduYXR1cmUgJiYgInMiIGluIHNpZ25hdHVyZSkgewogICAgICAgIGNvbnN0IHsgciwgcywgdiwgeVBhcml0eSB9ID0gc2lnbmF0dXJlOwogICAgICAgIGNvbnN0IHlQYXJpdHlPclYyID0gTnVtYmVyKHlQYXJpdHkgPz8gdik7CiAgICAgICAgY29uc3QgcmVjb3ZlcnlCaXQyID0gdG9SZWNvdmVyeUJpdCh5UGFyaXR5T3JWMik7CiAgICAgICAgcmV0dXJuIG5ldyBzZWNwMjU2azEyLlNpZ25hdHVyZShoZXhUb0JpZ0ludChyKSwgaGV4VG9CaWdJbnQocykpLmFkZFJlY292ZXJ5Qml0KHJlY292ZXJ5Qml0Mik7CiAgICAgIH0KICAgICAgY29uc3Qgc2lnbmF0dXJlSGV4ID0gaXNIZXgoc2lnbmF0dXJlKSA/IHNpZ25hdHVyZSA6IHRvSGV4KHNpZ25hdHVyZSk7CiAgICAgIGNvbnN0IHlQYXJpdHlPclYgPSBoZXhUb051bWJlcihgMHgke3NpZ25hdHVyZUhleC5zbGljZSgxMzApfWApOwogICAgICBjb25zdCByZWNvdmVyeUJpdCA9IHRvUmVjb3ZlcnlCaXQoeVBhcml0eU9yVik7CiAgICAgIHJldHVybiBzZWNwMjU2azEyLlNpZ25hdHVyZS5mcm9tQ29tcGFjdChzaWduYXR1cmVIZXguc3Vic3RyaW5nKDIsIDEzMCkpLmFkZFJlY292ZXJ5Qml0KHJlY292ZXJ5Qml0KTsKICAgIH0pKCk7CiAgICBjb25zdCBwdWJsaWNLZXkgPSBzaWduYXR1cmVfLnJlY292ZXJQdWJsaWNLZXkoaGFzaEhleC5zdWJzdHJpbmcoMikpLnRvSGV4KGZhbHNlKTsKICAgIHJldHVybiBgMHgke3B1YmxpY0tleX1gOwogIH0KICBmdW5jdGlvbiB0b1JlY292ZXJ5Qml0KHlQYXJpdHlPclYpIHsKICAgIGlmICh5UGFyaXR5T3JWID09PSAwIHx8IHlQYXJpdHlPclYgPT09IDEpCiAgICAgIHJldHVybiB5UGFyaXR5T3JWOwogICAgaWYgKHlQYXJpdHlPclYgPT09IDI3KQogICAgICByZXR1cm4gMDsKICAgIGlmICh5UGFyaXR5T3JWID09PSAyOCkKICAgICAgcmV0dXJuIDE7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeVBhcml0eU9yViB2YWx1ZSIpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcmVjb3ZlckFkZHJlc3MuanMKICBhc3luYyBmdW5jdGlvbiByZWNvdmVyQWRkcmVzcyh7IGhhc2g6IGhhc2gzLCBzaWduYXR1cmUgfSkgewogICAgcmV0dXJuIHB1YmxpY0tleVRvQWRkcmVzcyhhd2FpdCByZWNvdmVyUHVibGljS2V5KHsgaGFzaDogaGFzaDMsIHNpZ25hdHVyZSB9KSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2V4cGVyaW1lbnRhbC9laXA3NzAyL3V0aWxzL2hhc2hBdXRob3JpemF0aW9uLmpzCiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5jb2RpbmcvdG9SbHAuanMKICBpbml0X2Jhc2UoKTsKICBpbml0X2N1cnNvcjIoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gdG9SbHAoYnl0ZXMyLCB0byA9ICJoZXgiKSB7CiAgICBjb25zdCBlbmNvZGFibGUgPSBnZXRFbmNvZGFibGUoYnl0ZXMyKTsKICAgIGNvbnN0IGN1cnNvciA9IGNyZWF0ZUN1cnNvcihuZXcgVWludDhBcnJheShlbmNvZGFibGUubGVuZ3RoKSk7CiAgICBlbmNvZGFibGUuZW5jb2RlKGN1cnNvcik7CiAgICBpZiAodG8gPT09ICJoZXgiKQogICAgICByZXR1cm4gYnl0ZXNUb0hleChjdXJzb3IuYnl0ZXMpOwogICAgcmV0dXJuIGN1cnNvci5ieXRlczsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb1JscChieXRlczIsIHRvID0gImJ5dGVzIikgewogICAgcmV0dXJuIHRvUmxwKGJ5dGVzMiwgdG8pOwogIH0KICBmdW5jdGlvbiBoZXhUb1JscChoZXgsIHRvID0gImhleCIpIHsKICAgIHJldHVybiB0b1JscChoZXgsIHRvKTsKICB9CiAgZnVuY3Rpb24gZ2V0RW5jb2RhYmxlKGJ5dGVzMikgewogICAgaWYgKEFycmF5LmlzQXJyYXkoYnl0ZXMyKSkKICAgICAgcmV0dXJuIGdldEVuY29kYWJsZUxpc3QoYnl0ZXMyLm1hcCgoeCkgPT4gZ2V0RW5jb2RhYmxlKHgpKSk7CiAgICByZXR1cm4gZ2V0RW5jb2RhYmxlQnl0ZXMoYnl0ZXMyKTsKICB9CiAgZnVuY3Rpb24gZ2V0RW5jb2RhYmxlTGlzdChsaXN0KSB7CiAgICBjb25zdCBib2R5TGVuZ3RoID0gbGlzdC5yZWR1Y2UoKGFjYywgeCkgPT4gYWNjICsgeC5sZW5ndGgsIDApOwogICAgY29uc3Qgc2l6ZU9mQm9keUxlbmd0aCA9IGdldFNpemVPZkxlbmd0aChib2R5TGVuZ3RoKTsKICAgIGNvbnN0IGxlbmd0aCA9ICgoKSA9PiB7CiAgICAgIGlmIChib2R5TGVuZ3RoIDw9IDU1KQogICAgICAgIHJldHVybiAxICsgYm9keUxlbmd0aDsKICAgICAgcmV0dXJuIDEgKyBzaXplT2ZCb2R5TGVuZ3RoICsgYm9keUxlbmd0aDsKICAgIH0pKCk7CiAgICByZXR1cm4gewogICAgICBsZW5ndGgsCiAgICAgIGVuY29kZShjdXJzb3IpIHsKICAgICAgICBpZiAoYm9keUxlbmd0aCA8PSA1NSkgewogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlKDE5MiArIGJvZHlMZW5ndGgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJzb3IucHVzaEJ5dGUoMTkyICsgNTUgKyBzaXplT2ZCb2R5TGVuZ3RoKTsKICAgICAgICAgIGlmIChzaXplT2ZCb2R5TGVuZ3RoID09PSAxKQogICAgICAgICAgICBjdXJzb3IucHVzaFVpbnQ4KGJvZHlMZW5ndGgpOwogICAgICAgICAgZWxzZSBpZiAoc2l6ZU9mQm9keUxlbmd0aCA9PT0gMikKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MTYoYm9keUxlbmd0aCk7CiAgICAgICAgICBlbHNlIGlmIChzaXplT2ZCb2R5TGVuZ3RoID09PSAzKQogICAgICAgICAgICBjdXJzb3IucHVzaFVpbnQyNChib2R5TGVuZ3RoKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MzIoYm9keUxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGZvciAoY29uc3QgeyBlbmNvZGU6IGVuY29kZTIgfSBvZiBsaXN0KSB7CiAgICAgICAgICBlbmNvZGUyKGN1cnNvcik7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KICBmdW5jdGlvbiBnZXRFbmNvZGFibGVCeXRlcyhieXRlc09ySGV4KSB7CiAgICBjb25zdCBieXRlczIgPSB0eXBlb2YgYnl0ZXNPckhleCA9PT0gInN0cmluZyIgPyBoZXhUb0J5dGVzKGJ5dGVzT3JIZXgpIDogYnl0ZXNPckhleDsKICAgIGNvbnN0IHNpemVPZkJ5dGVzTGVuZ3RoID0gZ2V0U2l6ZU9mTGVuZ3RoKGJ5dGVzMi5sZW5ndGgpOwogICAgY29uc3QgbGVuZ3RoID0gKCgpID0+IHsKICAgICAgaWYgKGJ5dGVzMi5sZW5ndGggPT09IDEgJiYgYnl0ZXMyWzBdIDwgMTI4KQogICAgICAgIHJldHVybiAxOwogICAgICBpZiAoYnl0ZXMyLmxlbmd0aCA8PSA1NSkKICAgICAgICByZXR1cm4gMSArIGJ5dGVzMi5sZW5ndGg7CiAgICAgIHJldHVybiAxICsgc2l6ZU9mQnl0ZXNMZW5ndGggKyBieXRlczIubGVuZ3RoOwogICAgfSkoKTsKICAgIHJldHVybiB7CiAgICAgIGxlbmd0aCwKICAgICAgZW5jb2RlKGN1cnNvcikgewogICAgICAgIGlmIChieXRlczIubGVuZ3RoID09PSAxICYmIGJ5dGVzMlswXSA8IDEyOCkgewogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIH0gZWxzZSBpZiAoYnl0ZXMyLmxlbmd0aCA8PSA1NSkgewogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlKDEyOCArIGJ5dGVzMi5sZW5ndGgpOwogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJzb3IucHVzaEJ5dGUoMTI4ICsgNTUgKyBzaXplT2ZCeXRlc0xlbmd0aCk7CiAgICAgICAgICBpZiAoc2l6ZU9mQnl0ZXNMZW5ndGggPT09IDEpCiAgICAgICAgICAgIGN1cnNvci5wdXNoVWludDgoYnl0ZXMyLmxlbmd0aCk7CiAgICAgICAgICBlbHNlIGlmIChzaXplT2ZCeXRlc0xlbmd0aCA9PT0gMikKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MTYoYnl0ZXMyLmxlbmd0aCk7CiAgICAgICAgICBlbHNlIGlmIChzaXplT2ZCeXRlc0xlbmd0aCA9PT0gMykKICAgICAgICAgICAgY3Vyc29yLnB1c2hVaW50MjQoYnl0ZXMyLmxlbmd0aCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGN1cnNvci5wdXNoVWludDMyKGJ5dGVzMi5sZW5ndGgpOwogICAgICAgICAgY3Vyc29yLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9CiAgZnVuY3Rpb24gZ2V0U2l6ZU9mTGVuZ3RoKGxlbmd0aCkgewogICAgaWYgKGxlbmd0aCA8IDIgKiogOCkKICAgICAgcmV0dXJuIDE7CiAgICBpZiAobGVuZ3RoIDwgMiAqKiAxNikKICAgICAgcmV0dXJuIDI7CiAgICBpZiAobGVuZ3RoIDwgMiAqKiAyNCkKICAgICAgcmV0dXJuIDM7CiAgICBpZiAobGVuZ3RoIDwgMiAqKiAzMikKICAgICAgcmV0dXJuIDQ7CiAgICB0aHJvdyBuZXcgQmFzZUVycm9yMigiTGVuZ3RoIGlzIHRvbyBsYXJnZS4iKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXhwZXJpbWVudGFsL2VpcDc3MDIvdXRpbHMvaGFzaEF1dGhvcml6YXRpb24uanMKICBpbml0X2tlY2NhazI1NigpOwogIGZ1bmN0aW9uIGhhc2hBdXRob3JpemF0aW9uKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgY2hhaW5JZCwgY29udHJhY3RBZGRyZXNzLCBub25jZSwgdG8gfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBoYXNoMyA9IGtlY2NhazI1Nihjb25jYXRIZXgoWwogICAgICAiMHgwNSIsCiAgICAgIHRvUmxwKFtudW1iZXJUb0hleChjaGFpbklkKSwgY29udHJhY3RBZGRyZXNzLCBudW1iZXJUb0hleChub25jZSldKQogICAgXSkpOwogICAgaWYgKHRvID09PSAiYnl0ZXMiKQogICAgICByZXR1cm4gaGV4VG9CeXRlcyhoYXNoMyk7CiAgICByZXR1cm4gaGFzaDM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2V4cGVyaW1lbnRhbC9laXA3NzAyL3V0aWxzL3JlY292ZXJBdXRob3JpemF0aW9uQWRkcmVzcy5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJBdXRob3JpemF0aW9uQWRkcmVzcyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGF1dGhvcml6YXRpb24sIHNpZ25hdHVyZSB9ID0gcGFyYW1ldGVyczsKICAgIHJldHVybiByZWNvdmVyQWRkcmVzcyh7CiAgICAgIGhhc2g6IGhhc2hBdXRob3JpemF0aW9uKGF1dGhvcml6YXRpb24pLAogICAgICBzaWduYXR1cmU6IHNpZ25hdHVyZSA/PyBhdXRob3JpemF0aW9uCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVHYXMuanMKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2VzdGltYXRlR2FzLmpzCiAgaW5pdF9mb3JtYXRFdGhlcigpOwogIGluaXRfZm9ybWF0R3dlaSgpOwogIGluaXRfYmFzZSgpOwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICB2YXIgRXN0aW1hdGVHYXNFeGVjdXRpb25FcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3RvcihjYXVzZSwgeyBhY2NvdW50LCBkb2NzUGF0aDogZG9jc1BhdGg5LCBjaGFpbiwgZGF0YSwgZ2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbm9uY2UsIHRvLCB2YWx1ZSB9KSB7CiAgICAgIGNvbnN0IHByZXR0eUFyZ3MgPSBwcmV0dHlQcmludCh7CiAgICAgICAgZnJvbTogYWNjb3VudD8uYWRkcmVzcywKICAgICAgICB0bywKICAgICAgICB2YWx1ZTogdHlwZW9mIHZhbHVlICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRFdGhlcih2YWx1ZSl9ICR7Y2hhaW4/Lm5hdGl2ZUN1cnJlbmN5Py5zeW1ib2wgfHwgIkVUSCJ9YCwKICAgICAgICBkYXRhLAogICAgICAgIGdhcywKICAgICAgICBnYXNQcmljZTogdHlwZW9mIGdhc1ByaWNlICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKGdhc1ByaWNlKX0gZ3dlaWAsCiAgICAgICAgbWF4RmVlUGVyR2FzOiB0eXBlb2YgbWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiBgJHtmb3JtYXRHd2VpKG1heEZlZVBlckdhcyl9IGd3ZWlgLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiB0eXBlb2YgbWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiICYmIGAke2Zvcm1hdEd3ZWkobWF4UHJpb3JpdHlGZWVQZXJHYXMpfSBnd2VpYCwKICAgICAgICBub25jZQogICAgICB9KTsKICAgICAgc3VwZXIoY2F1c2Uuc2hvcnRNZXNzYWdlLCB7CiAgICAgICAgY2F1c2UsCiAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgIC4uLmNhdXNlLm1ldGFNZXNzYWdlcyA/IFsuLi5jYXVzZS5tZXRhTWVzc2FnZXMsICIgIl0gOiBbXSwKICAgICAgICAgICJFc3RpbWF0ZSBHYXMgQXJndW1lbnRzOiIsCiAgICAgICAgICBwcmV0dHlBcmdzCiAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksCiAgICAgICAgbmFtZTogIkVzdGltYXRlR2FzRXhlY3V0aW9uRXJyb3IiCiAgICAgIH0pOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImNhdXNlIiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiB2b2lkIDAKICAgICAgfSk7CiAgICAgIHRoaXMuY2F1c2UgPSBjYXVzZTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vycm9ycy9nZXRFc3RpbWF0ZUdhc0Vycm9yLmpzCiAgaW5pdF9ub2RlKCk7CiAgaW5pdF9nZXROb2RlRXJyb3IoKTsKICBmdW5jdGlvbiBnZXRFc3RpbWF0ZUdhc0Vycm9yKGVyciwgeyBkb2NzUGF0aDogZG9jc1BhdGg5LCAuLi5hcmdzIH0pIHsKICAgIGNvbnN0IGNhdXNlID0gKCgpID0+IHsKICAgICAgY29uc3QgY2F1c2UyID0gZ2V0Tm9kZUVycm9yKGVyciwgYXJncyk7CiAgICAgIGlmIChjYXVzZTIgaW5zdGFuY2VvZiBVbmtub3duTm9kZUVycm9yKQogICAgICAgIHJldHVybiBlcnI7CiAgICAgIHJldHVybiBjYXVzZTI7CiAgICB9KSgpOwogICAgcmV0dXJuIG5ldyBFc3RpbWF0ZUdhc0V4ZWN1dGlvbkVycm9yKGNhdXNlLCB7CiAgICAgIGRvY3NQYXRoOiBkb2NzUGF0aDksCiAgICAgIC4uLmFyZ3MKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9lc3RpbWF0ZUdhcy5qcwogIGluaXRfZXh0cmFjdCgpOwogIGluaXRfdHJhbnNhY3Rpb25SZXF1ZXN0KCk7CiAgaW5pdF9zdGF0ZU92ZXJyaWRlMigpOwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3ByZXBhcmVUcmFuc2FjdGlvblJlcXVlc3QuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9mZWUuanMKICBpbml0X2Zvcm1hdEd3ZWkoKTsKICBpbml0X2Jhc2UoKTsKICB2YXIgQmFzZUZlZVNjYWxhckVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiYGJhc2VGZWVNdWx0aXBsaWVyYCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxLiIsIHsKICAgICAgICBuYW1lOiAiQmFzZUZlZVNjYWxhckVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwogIHZhciBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiQ2hhaW4gZG9lcyBub3Qgc3VwcG9ydCBFSVAtMTU1OSBmZWVzLiIsIHsKICAgICAgICBuYW1lOiAiRWlwMTU1OUZlZXNOb3RTdXBwb3J0ZWRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKICB2YXIgTWF4RmVlUGVyR2FzVG9vTG93RXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyBtYXhQcmlvcml0eUZlZVBlckdhcyB9KSB7CiAgICAgIHN1cGVyKGBcYG1heEZlZVBlckdhc1xgIGNhbm5vdCBiZSBsZXNzIHRoYW4gdGhlIFxgbWF4UHJpb3JpdHlGZWVQZXJHYXNcYCAoJHtmb3JtYXRHd2VpKG1heFByaW9yaXR5RmVlUGVyR2FzKX0gZ3dlaSkuYCwgeyBuYW1lOiAiTWF4RmVlUGVyR2FzVG9vTG93RXJyb3IiIH0pOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcy5qcwogIGluaXRfZnJvbUhleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2Vycm9ycy9ibG9jay5qcwogIGluaXRfYmFzZSgpOwogIHZhciBCbG9ja05vdEZvdW5kRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyIH0pIHsKICAgICAgbGV0IGlkZW50aWZpZXIgPSAiQmxvY2siOwogICAgICBpZiAoYmxvY2tIYXNoKQogICAgICAgIGlkZW50aWZpZXIgPSBgQmxvY2sgYXQgaGFzaCAiJHtibG9ja0hhc2h9ImA7CiAgICAgIGlmIChibG9ja051bWJlcikKICAgICAgICBpZGVudGlmaWVyID0gYEJsb2NrIGF0IG51bWJlciAiJHtibG9ja051bWJlcn0iYDsKICAgICAgc3VwZXIoYCR7aWRlbnRpZmllcn0gY291bGQgbm90IGJlIGZvdW5kLmAsIHsgbmFtZTogIkJsb2NrTm90Rm91bmRFcnJvciIgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRCbG9jay5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2Jsb2NrLmpzCiAgaW5pdF9mb3JtYXR0ZXIoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL3RyYW5zYWN0aW9uLmpzCiAgaW5pdF9mcm9tSGV4KCk7CiAgaW5pdF9mb3JtYXR0ZXIoKTsKICB2YXIgdHJhbnNhY3Rpb25UeXBlID0gewogICAgIjB4MCI6ICJsZWdhY3kiLAogICAgIjB4MSI6ICJlaXAyOTMwIiwKICAgICIweDIiOiAiZWlwMTU1OSIsCiAgICAiMHgzIjogImVpcDQ4NDQiLAogICAgIjB4NCI6ICJlaXA3NzAyIgogIH07CiAgZnVuY3Rpb24gZm9ybWF0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHRyYW5zYWN0aW9uXyA9IHsKICAgICAgLi4udHJhbnNhY3Rpb24sCiAgICAgIGJsb2NrSGFzaDogdHJhbnNhY3Rpb24uYmxvY2tIYXNoID8gdHJhbnNhY3Rpb24uYmxvY2tIYXNoIDogbnVsbCwKICAgICAgYmxvY2tOdW1iZXI6IHRyYW5zYWN0aW9uLmJsb2NrTnVtYmVyID8gQmlnSW50KHRyYW5zYWN0aW9uLmJsb2NrTnVtYmVyKSA6IG51bGwsCiAgICAgIGNoYWluSWQ6IHRyYW5zYWN0aW9uLmNoYWluSWQgPyBoZXhUb051bWJlcih0cmFuc2FjdGlvbi5jaGFpbklkKSA6IHZvaWQgMCwKICAgICAgZ2FzOiB0cmFuc2FjdGlvbi5nYXMgPyBCaWdJbnQodHJhbnNhY3Rpb24uZ2FzKSA6IHZvaWQgMCwKICAgICAgZ2FzUHJpY2U6IHRyYW5zYWN0aW9uLmdhc1ByaWNlID8gQmlnSW50KHRyYW5zYWN0aW9uLmdhc1ByaWNlKSA6IHZvaWQgMCwKICAgICAgbWF4RmVlUGVyQmxvYkdhczogdHJhbnNhY3Rpb24ubWF4RmVlUGVyQmxvYkdhcyA/IEJpZ0ludCh0cmFuc2FjdGlvbi5tYXhGZWVQZXJCbG9iR2FzKSA6IHZvaWQgMCwKICAgICAgbWF4RmVlUGVyR2FzOiB0cmFuc2FjdGlvbi5tYXhGZWVQZXJHYXMgPyBCaWdJbnQodHJhbnNhY3Rpb24ubWF4RmVlUGVyR2FzKSA6IHZvaWQgMCwKICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IHRyYW5zYWN0aW9uLm1heFByaW9yaXR5RmVlUGVyR2FzID8gQmlnSW50KHRyYW5zYWN0aW9uLm1heFByaW9yaXR5RmVlUGVyR2FzKSA6IHZvaWQgMCwKICAgICAgbm9uY2U6IHRyYW5zYWN0aW9uLm5vbmNlID8gaGV4VG9OdW1iZXIodHJhbnNhY3Rpb24ubm9uY2UpIDogdm9pZCAwLAogICAgICB0bzogdHJhbnNhY3Rpb24udG8gPyB0cmFuc2FjdGlvbi50byA6IG51bGwsCiAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5kZXggPyBOdW1iZXIodHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmRleCkgOiBudWxsLAogICAgICB0eXBlOiB0cmFuc2FjdGlvbi50eXBlID8gdHJhbnNhY3Rpb25UeXBlW3RyYW5zYWN0aW9uLnR5cGVdIDogdm9pZCAwLAogICAgICB0eXBlSGV4OiB0cmFuc2FjdGlvbi50eXBlID8gdHJhbnNhY3Rpb24udHlwZSA6IHZvaWQgMCwKICAgICAgdmFsdWU6IHRyYW5zYWN0aW9uLnZhbHVlID8gQmlnSW50KHRyYW5zYWN0aW9uLnZhbHVlKSA6IHZvaWQgMCwKICAgICAgdjogdHJhbnNhY3Rpb24udiA/IEJpZ0ludCh0cmFuc2FjdGlvbi52KSA6IHZvaWQgMAogICAgfTsKICAgIGlmICh0cmFuc2FjdGlvbi5hdXRob3JpemF0aW9uTGlzdCkKICAgICAgdHJhbnNhY3Rpb25fLmF1dGhvcml6YXRpb25MaXN0ID0gZm9ybWF0QXV0aG9yaXphdGlvbkxpc3QyKHRyYW5zYWN0aW9uLmF1dGhvcml6YXRpb25MaXN0KTsKICAgIHRyYW5zYWN0aW9uXy55UGFyaXR5ID0gKCgpID0+IHsKICAgICAgaWYgKHRyYW5zYWN0aW9uLnlQYXJpdHkpCiAgICAgICAgcmV0dXJuIE51bWJlcih0cmFuc2FjdGlvbi55UGFyaXR5KTsKICAgICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbl8udiA9PT0gImJpZ2ludCIpIHsKICAgICAgICBpZiAodHJhbnNhY3Rpb25fLnYgPT09IDBuIHx8IHRyYW5zYWN0aW9uXy52ID09PSAyN24pCiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBpZiAodHJhbnNhY3Rpb25fLnYgPT09IDFuIHx8IHRyYW5zYWN0aW9uXy52ID09PSAyOG4pCiAgICAgICAgICByZXR1cm4gMTsKICAgICAgICBpZiAodHJhbnNhY3Rpb25fLnYgPj0gMzVuKQogICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uXy52ICUgMm4gPT09IDBuID8gMSA6IDA7CiAgICAgIH0KICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIH0pKCk7CiAgICBpZiAodHJhbnNhY3Rpb25fLnR5cGUgPT09ICJsZWdhY3kiKSB7CiAgICAgIGRlbGV0ZSB0cmFuc2FjdGlvbl8uYWNjZXNzTGlzdDsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhGZWVQZXJCbG9iR2FzOwogICAgICBkZWxldGUgdHJhbnNhY3Rpb25fLm1heEZlZVBlckdhczsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhQcmlvcml0eUZlZVBlckdhczsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy55UGFyaXR5OwogICAgfQogICAgaWYgKHRyYW5zYWN0aW9uXy50eXBlID09PSAiZWlwMjkzMCIpIHsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhGZWVQZXJCbG9iR2FzOwogICAgICBkZWxldGUgdHJhbnNhY3Rpb25fLm1heEZlZVBlckdhczsKICAgICAgZGVsZXRlIHRyYW5zYWN0aW9uXy5tYXhQcmlvcml0eUZlZVBlckdhczsKICAgIH0KICAgIGlmICh0cmFuc2FjdGlvbl8udHlwZSA9PT0gImVpcDE1NTkiKSB7CiAgICAgIGRlbGV0ZSB0cmFuc2FjdGlvbl8ubWF4RmVlUGVyQmxvYkdhczsKICAgIH0KICAgIHJldHVybiB0cmFuc2FjdGlvbl87CiAgfQogIHZhciBkZWZpbmVUcmFuc2FjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVGb3JtYXR0ZXIoInRyYW5zYWN0aW9uIiwgZm9ybWF0VHJhbnNhY3Rpb24pOwogIGZ1bmN0aW9uIGZvcm1hdEF1dGhvcml6YXRpb25MaXN0MihhdXRob3JpemF0aW9uTGlzdCkgewogICAgcmV0dXJuIGF1dGhvcml6YXRpb25MaXN0Lm1hcCgoYXV0aG9yaXphdGlvbikgPT4gKHsKICAgICAgY29udHJhY3RBZGRyZXNzOiBhdXRob3JpemF0aW9uLmFkZHJlc3MsCiAgICAgIHI6IGF1dGhvcml6YXRpb24uciwKICAgICAgczogYXV0aG9yaXphdGlvbi5zLAogICAgICBjaGFpbklkOiBOdW1iZXIoYXV0aG9yaXphdGlvbi5jaGFpbklkKSwKICAgICAgbm9uY2U6IE51bWJlcihhdXRob3JpemF0aW9uLm5vbmNlKSwKICAgICAgLi4udHlwZW9mIGF1dGhvcml6YXRpb24ueVBhcml0eSAhPT0gInVuZGVmaW5lZCIgPyB7IHlQYXJpdHk6IE51bWJlcihhdXRob3JpemF0aW9uLnlQYXJpdHkpIH0gOiB7fSwKICAgICAgLi4udHlwZW9mIGF1dGhvcml6YXRpb24udiAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIGF1dGhvcml6YXRpb24ueVBhcml0eSA9PT0gInVuZGVmaW5lZCIgPyB7IHY6IE51bWJlcihhdXRob3JpemF0aW9uLnYpIH0gOiB7fQogICAgfSkpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2Jsb2NrLmpzCiAgZnVuY3Rpb24gZm9ybWF0QmxvY2soYmxvY2spIHsKICAgIGNvbnN0IHRyYW5zYWN0aW9ucyA9IGJsb2NrLnRyYW5zYWN0aW9ucz8ubWFwKCh0cmFuc2FjdGlvbikgPT4gewogICAgICBpZiAodHlwZW9mIHRyYW5zYWN0aW9uID09PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICAgIHJldHVybiBmb3JtYXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7CiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIC4uLmJsb2NrLAogICAgICBiYXNlRmVlUGVyR2FzOiBibG9jay5iYXNlRmVlUGVyR2FzID8gQmlnSW50KGJsb2NrLmJhc2VGZWVQZXJHYXMpIDogbnVsbCwKICAgICAgYmxvYkdhc1VzZWQ6IGJsb2NrLmJsb2JHYXNVc2VkID8gQmlnSW50KGJsb2NrLmJsb2JHYXNVc2VkKSA6IHZvaWQgMCwKICAgICAgZGlmZmljdWx0eTogYmxvY2suZGlmZmljdWx0eSA/IEJpZ0ludChibG9jay5kaWZmaWN1bHR5KSA6IHZvaWQgMCwKICAgICAgZXhjZXNzQmxvYkdhczogYmxvY2suZXhjZXNzQmxvYkdhcyA/IEJpZ0ludChibG9jay5leGNlc3NCbG9iR2FzKSA6IHZvaWQgMCwKICAgICAgZ2FzTGltaXQ6IGJsb2NrLmdhc0xpbWl0ID8gQmlnSW50KGJsb2NrLmdhc0xpbWl0KSA6IHZvaWQgMCwKICAgICAgZ2FzVXNlZDogYmxvY2suZ2FzVXNlZCA/IEJpZ0ludChibG9jay5nYXNVc2VkKSA6IHZvaWQgMCwKICAgICAgaGFzaDogYmxvY2suaGFzaCA/IGJsb2NrLmhhc2ggOiBudWxsLAogICAgICBsb2dzQmxvb206IGJsb2NrLmxvZ3NCbG9vbSA/IGJsb2NrLmxvZ3NCbG9vbSA6IG51bGwsCiAgICAgIG5vbmNlOiBibG9jay5ub25jZSA/IGJsb2NrLm5vbmNlIDogbnVsbCwKICAgICAgbnVtYmVyOiBibG9jay5udW1iZXIgPyBCaWdJbnQoYmxvY2subnVtYmVyKSA6IG51bGwsCiAgICAgIHNpemU6IGJsb2NrLnNpemUgPyBCaWdJbnQoYmxvY2suc2l6ZSkgOiB2b2lkIDAsCiAgICAgIHRpbWVzdGFtcDogYmxvY2sudGltZXN0YW1wID8gQmlnSW50KGJsb2NrLnRpbWVzdGFtcCkgOiB2b2lkIDAsCiAgICAgIHRyYW5zYWN0aW9ucywKICAgICAgdG90YWxEaWZmaWN1bHR5OiBibG9jay50b3RhbERpZmZpY3VsdHkgPyBCaWdJbnQoYmxvY2sudG90YWxEaWZmaWN1bHR5KSA6IG51bGwKICAgIH07CiAgfQogIHZhciBkZWZpbmVCbG9jayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVGb3JtYXR0ZXIoImJsb2NrIiwgZm9ybWF0QmxvY2spOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEJsb2NrLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvY2soY2xpZW50LCB7IGJsb2NrSGFzaCwgYmxvY2tOdW1iZXIsIGJsb2NrVGFnOiBibG9ja1RhZ18sIGluY2x1ZGVUcmFuc2FjdGlvbnM6IGluY2x1ZGVUcmFuc2FjdGlvbnNfIH0gPSB7fSkgewogICAgY29uc3QgYmxvY2tUYWcgPSBibG9ja1RhZ18gPz8gImxhdGVzdCI7CiAgICBjb25zdCBpbmNsdWRlVHJhbnNhY3Rpb25zID0gaW5jbHVkZVRyYW5zYWN0aW9uc18gPz8gZmFsc2U7CiAgICBjb25zdCBibG9ja051bWJlckhleCA9IGJsb2NrTnVtYmVyICE9PSB2b2lkIDAgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICBsZXQgYmxvY2sgPSBudWxsOwogICAgaWYgKGJsb2NrSGFzaCkgewogICAgICBibG9jayA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0QmxvY2tCeUhhc2giLAogICAgICAgIHBhcmFtczogW2Jsb2NrSGFzaCwgaW5jbHVkZVRyYW5zYWN0aW9uc10KICAgICAgfSwgeyBkZWR1cGU6IHRydWUgfSk7CiAgICB9IGVsc2UgewogICAgICBibG9jayA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0QmxvY2tCeU51bWJlciIsCiAgICAgICAgcGFyYW1zOiBbYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWcsIGluY2x1ZGVUcmFuc2FjdGlvbnNdCiAgICAgIH0sIHsgZGVkdXBlOiBCb29sZWFuKGJsb2NrTnVtYmVySGV4KSB9KTsKICAgIH0KICAgIGlmICghYmxvY2spCiAgICAgIHRocm93IG5ldyBCbG9ja05vdEZvdW5kRXJyb3IoeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyIH0pOwogICAgY29uc3QgZm9ybWF0ID0gY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzPy5ibG9jaz8uZm9ybWF0IHx8IGZvcm1hdEJsb2NrOwogICAgcmV0dXJuIGZvcm1hdChibG9jayk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEdhc1ByaWNlLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0R2FzUHJpY2UoY2xpZW50KSB7CiAgICBjb25zdCBnYXNQcmljZSA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2dhc1ByaWNlIgogICAgfSk7CiAgICByZXR1cm4gQmlnSW50KGdhc1ByaWNlKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcy5qcwogIGFzeW5jIGZ1bmN0aW9uIGVzdGltYXRlTWF4UHJpb3JpdHlGZWVQZXJHYXMoY2xpZW50LCBhcmdzKSB7CiAgICByZXR1cm4gaW50ZXJuYWxfZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcyhjbGllbnQsIGFyZ3MpOwogIH0KICBhc3luYyBmdW5jdGlvbiBpbnRlcm5hbF9lc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzKGNsaWVudCwgYXJncykgewogICAgY29uc3QgeyBibG9jazogYmxvY2tfLCBjaGFpbiA9IGNsaWVudC5jaGFpbiwgcmVxdWVzdCB9ID0gYXJncyB8fCB7fTsKICAgIGlmICh0eXBlb2YgY2hhaW4/LmZlZXM/LmRlZmF1bHRQcmlvcml0eUZlZSA9PT0gImZ1bmN0aW9uIikgewogICAgICBjb25zdCBibG9jayA9IGJsb2NrXyB8fCBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRCbG9jaywgImdldEJsb2NrIikoe30pOwogICAgICByZXR1cm4gY2hhaW4uZmVlcy5kZWZhdWx0UHJpb3JpdHlGZWUoewogICAgICAgIGJsb2NrLAogICAgICAgIGNsaWVudCwKICAgICAgICByZXF1ZXN0CiAgICAgIH0pOwogICAgfQogICAgaWYgKHR5cGVvZiBjaGFpbj8uZmVlcz8uZGVmYXVsdFByaW9yaXR5RmVlICE9PSAidW5kZWZpbmVkIikKICAgICAgcmV0dXJuIGNoYWluPy5mZWVzPy5kZWZhdWx0UHJpb3JpdHlGZWU7CiAgICB0cnkgewogICAgICBjb25zdCBtYXhQcmlvcml0eUZlZVBlckdhc0hleCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfbWF4UHJpb3JpdHlGZWVQZXJHYXMiCiAgICAgIH0pOwogICAgICByZXR1cm4gaGV4VG9CaWdJbnQobWF4UHJpb3JpdHlGZWVQZXJHYXNIZXgpOwogICAgfSBjYXRjaCB7CiAgICAgIGNvbnN0IFtibG9jaywgZ2FzUHJpY2VdID0gYXdhaXQgUHJvbWlzZS5hbGwoWwogICAgICAgIGJsb2NrXyA/IFByb21pc2UucmVzb2x2ZShibG9ja18pIDogZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2ssICJnZXRCbG9jayIpKHt9KSwKICAgICAgICBnZXRBY3Rpb24oY2xpZW50LCBnZXRHYXNQcmljZSwgImdldEdhc1ByaWNlIikoe30pCiAgICAgIF0pOwogICAgICBpZiAodHlwZW9mIGJsb2NrLmJhc2VGZWVQZXJHYXMgIT09ICJiaWdpbnQiKQogICAgICAgIHRocm93IG5ldyBFaXAxNTU5RmVlc05vdFN1cHBvcnRlZEVycm9yKCk7CiAgICAgIGNvbnN0IG1heFByaW9yaXR5RmVlUGVyR2FzID0gZ2FzUHJpY2UgLSBibG9jay5iYXNlRmVlUGVyR2FzOwogICAgICBpZiAobWF4UHJpb3JpdHlGZWVQZXJHYXMgPCAwbikKICAgICAgICByZXR1cm4gMG47CiAgICAgIHJldHVybiBtYXhQcmlvcml0eUZlZVBlckdhczsKICAgIH0KICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZXN0aW1hdGVGZWVzUGVyR2FzLmpzCiAgYXN5bmMgZnVuY3Rpb24gZXN0aW1hdGVGZWVzUGVyR2FzKGNsaWVudCwgYXJncykgewogICAgcmV0dXJuIGludGVybmFsX2VzdGltYXRlRmVlc1BlckdhcyhjbGllbnQsIGFyZ3MpOwogIH0KICBhc3luYyBmdW5jdGlvbiBpbnRlcm5hbF9lc3RpbWF0ZUZlZXNQZXJHYXMoY2xpZW50LCBhcmdzKSB7CiAgICBjb25zdCB7IGJsb2NrOiBibG9ja18sIGNoYWluID0gY2xpZW50LmNoYWluLCByZXF1ZXN0LCB0eXBlID0gImVpcDE1NTkiIH0gPSBhcmdzIHx8IHt9OwogICAgY29uc3QgYmFzZUZlZU11bHRpcGxpZXIgPSBhd2FpdCAoYXN5bmMgKCkgPT4gewogICAgICBpZiAodHlwZW9mIGNoYWluPy5mZWVzPy5iYXNlRmVlTXVsdGlwbGllciA9PT0gImZ1bmN0aW9uIikKICAgICAgICByZXR1cm4gY2hhaW4uZmVlcy5iYXNlRmVlTXVsdGlwbGllcih7CiAgICAgICAgICBibG9jazogYmxvY2tfLAogICAgICAgICAgY2xpZW50LAogICAgICAgICAgcmVxdWVzdAogICAgICAgIH0pOwogICAgICByZXR1cm4gY2hhaW4/LmZlZXM/LmJhc2VGZWVNdWx0aXBsaWVyID8/IDEuMjsKICAgIH0pKCk7CiAgICBpZiAoYmFzZUZlZU11bHRpcGxpZXIgPCAxKQogICAgICB0aHJvdyBuZXcgQmFzZUZlZVNjYWxhckVycm9yKCk7CiAgICBjb25zdCBkZWNpbWFscyA9IGJhc2VGZWVNdWx0aXBsaWVyLnRvU3RyaW5nKCkuc3BsaXQoIi4iKVsxXT8ubGVuZ3RoID8/IDA7CiAgICBjb25zdCBkZW5vbWluYXRvciA9IDEwICoqIGRlY2ltYWxzOwogICAgY29uc3QgbXVsdGlwbHkgPSAoYmFzZTIpID0+IGJhc2UyICogQmlnSW50KE1hdGguY2VpbChiYXNlRmVlTXVsdGlwbGllciAqIGRlbm9taW5hdG9yKSkgLyBCaWdJbnQoZGVub21pbmF0b3IpOwogICAgY29uc3QgYmxvY2sgPSBibG9ja18gPyBibG9ja18gOiBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRCbG9jaywgImdldEJsb2NrIikoe30pOwogICAgaWYgKHR5cGVvZiBjaGFpbj8uZmVlcz8uZXN0aW1hdGVGZWVzUGVyR2FzID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGNvbnN0IGZlZXMyID0gYXdhaXQgY2hhaW4uZmVlcy5lc3RpbWF0ZUZlZXNQZXJHYXMoewogICAgICAgIGJsb2NrOiBibG9ja18sCiAgICAgICAgY2xpZW50LAogICAgICAgIG11bHRpcGx5LAogICAgICAgIHJlcXVlc3QsCiAgICAgICAgdHlwZQogICAgICB9KTsKICAgICAgaWYgKGZlZXMyICE9PSBudWxsKQogICAgICAgIHJldHVybiBmZWVzMjsKICAgIH0KICAgIGlmICh0eXBlID09PSAiZWlwMTU1OSIpIHsKICAgICAgaWYgKHR5cGVvZiBibG9jay5iYXNlRmVlUGVyR2FzICE9PSAiYmlnaW50IikKICAgICAgICB0aHJvdyBuZXcgRWlwMTU1OUZlZXNOb3RTdXBwb3J0ZWRFcnJvcigpOwogICAgICBjb25zdCBtYXhQcmlvcml0eUZlZVBlckdhcyA9IHR5cGVvZiByZXF1ZXN0Py5tYXhQcmlvcml0eUZlZVBlckdhcyA9PT0gImJpZ2ludCIgPyByZXF1ZXN0Lm1heFByaW9yaXR5RmVlUGVyR2FzIDogYXdhaXQgaW50ZXJuYWxfZXN0aW1hdGVNYXhQcmlvcml0eUZlZVBlckdhcyhjbGllbnQsIHsKICAgICAgICBibG9jaywKICAgICAgICBjaGFpbiwKICAgICAgICByZXF1ZXN0CiAgICAgIH0pOwogICAgICBjb25zdCBiYXNlRmVlUGVyR2FzID0gbXVsdGlwbHkoYmxvY2suYmFzZUZlZVBlckdhcyk7CiAgICAgIGNvbnN0IG1heEZlZVBlckdhcyA9IHJlcXVlc3Q/Lm1heEZlZVBlckdhcyA/PyBiYXNlRmVlUGVyR2FzICsgbWF4UHJpb3JpdHlGZWVQZXJHYXM7CiAgICAgIHJldHVybiB7CiAgICAgICAgbWF4RmVlUGVyR2FzLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzCiAgICAgIH07CiAgICB9CiAgICBjb25zdCBnYXNQcmljZSA9IHJlcXVlc3Q/Lmdhc1ByaWNlID8/IG11bHRpcGx5KGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEdhc1ByaWNlLCAiZ2V0R2FzUHJpY2UiKSh7fSkpOwogICAgcmV0dXJuIHsKICAgICAgZ2FzUHJpY2UKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldFRyYW5zYWN0aW9uQ291bnQuanMKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25Db3VudChjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tUYWcgPSAibGF0ZXN0IiwgYmxvY2tOdW1iZXIgfSkgewogICAgY29uc3QgY291bnQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRUcmFuc2FjdGlvbkNvdW50IiwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYmxvY2tOdW1iZXIgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiBibG9ja1RhZ10KICAgIH0sIHsgZGVkdXBlOiBCb29sZWFuKGJsb2NrTnVtYmVyKSB9KTsKICAgIHJldHVybiBoZXhUb051bWJlcihjb3VudCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Jsb2IvYmxvYnNUb0NvbW1pdG1lbnRzLmpzCiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIGJsb2JzVG9Db21taXRtZW50cyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGt6ZyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IGJsb2JzID0gdHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gcGFyYW1ldGVycy5ibG9icy5tYXAoKHgpID0+IGhleFRvQnl0ZXMoeCkpIDogcGFyYW1ldGVycy5ibG9iczsKICAgIGNvbnN0IGNvbW1pdG1lbnRzID0gW107CiAgICBmb3IgKGNvbnN0IGJsb2Igb2YgYmxvYnMpCiAgICAgIGNvbW1pdG1lbnRzLnB1c2goVWludDhBcnJheS5mcm9tKGt6Zy5ibG9iVG9LemdDb21taXRtZW50KGJsb2IpKSk7CiAgICByZXR1cm4gdG8gPT09ICJieXRlcyIgPyBjb21taXRtZW50cyA6IGNvbW1pdG1lbnRzLm1hcCgoeCkgPT4gYnl0ZXNUb0hleCh4KSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Jsb2IvYmxvYnNUb1Byb29mcy5qcwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBibG9ic1RvUHJvb2ZzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsga3pnIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgdG8gPSBwYXJhbWV0ZXJzLnRvID8/ICh0eXBlb2YgcGFyYW1ldGVycy5ibG9ic1swXSA9PT0gInN0cmluZyIgPyAiaGV4IiA6ICJieXRlcyIpOwogICAgY29uc3QgYmxvYnMgPSB0eXBlb2YgcGFyYW1ldGVycy5ibG9ic1swXSA9PT0gInN0cmluZyIgPyBwYXJhbWV0ZXJzLmJsb2JzLm1hcCgoeCkgPT4gaGV4VG9CeXRlcyh4KSkgOiBwYXJhbWV0ZXJzLmJsb2JzOwogICAgY29uc3QgY29tbWl0bWVudHMgPSB0eXBlb2YgcGFyYW1ldGVycy5jb21taXRtZW50c1swXSA9PT0gInN0cmluZyIgPyBwYXJhbWV0ZXJzLmNvbW1pdG1lbnRzLm1hcCgoeCkgPT4gaGV4VG9CeXRlcyh4KSkgOiBwYXJhbWV0ZXJzLmNvbW1pdG1lbnRzOwogICAgY29uc3QgcHJvb2ZzID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2JzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IGJsb2IgPSBibG9ic1tpXTsKICAgICAgY29uc3QgY29tbWl0bWVudCA9IGNvbW1pdG1lbnRzW2ldOwogICAgICBwcm9vZnMucHVzaChVaW50OEFycmF5LmZyb20oa3pnLmNvbXB1dGVCbG9iS3pnUHJvb2YoYmxvYiwgY29tbWl0bWVudCkpKTsKICAgIH0KICAgIHJldHVybiB0byA9PT0gImJ5dGVzIiA/IHByb29mcyA6IHByb29mcy5tYXAoKHgpID0+IGJ5dGVzVG9IZXgoeCkpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL2NvbW1pdG1lbnRUb1ZlcnNpb25lZEhhc2guanMKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9zaGEyNTYuanMKICBpbml0X3NoYTI1NigpOwogIGluaXRfaXNIZXgoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gc2hhMjU2Mih2YWx1ZSwgdG9fKSB7CiAgICBjb25zdCB0byA9IHRvXyB8fCAiaGV4IjsKICAgIGNvbnN0IGJ5dGVzMiA9IHNoYTI1Nihpc0hleCh2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pID8gdG9CeXRlcyh2YWx1ZSkgOiB2YWx1ZSk7CiAgICBpZiAodG8gPT09ICJieXRlcyIpCiAgICAgIHJldHVybiBieXRlczI7CiAgICByZXR1cm4gdG9IZXgoYnl0ZXMyKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYmxvYi9jb21taXRtZW50VG9WZXJzaW9uZWRIYXNoLmpzCiAgZnVuY3Rpb24gY29tbWl0bWVudFRvVmVyc2lvbmVkSGFzaChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGNvbW1pdG1lbnQsIHZlcnNpb246IHZlcnNpb24zID0gMSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIGNvbW1pdG1lbnQgPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IHZlcnNpb25lZEhhc2ggPSBzaGEyNTYyKGNvbW1pdG1lbnQsICJieXRlcyIpOwogICAgdmVyc2lvbmVkSGFzaC5zZXQoW3ZlcnNpb24zXSwgMCk7CiAgICByZXR1cm4gdG8gPT09ICJieXRlcyIgPyB2ZXJzaW9uZWRIYXNoIDogYnl0ZXNUb0hleCh2ZXJzaW9uZWRIYXNoKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYmxvYi9jb21taXRtZW50c1RvVmVyc2lvbmVkSGFzaGVzLmpzCiAgZnVuY3Rpb24gY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlcyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGNvbW1pdG1lbnRzLCB2ZXJzaW9uOiB2ZXJzaW9uMyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIGNvbW1pdG1lbnRzWzBdID09PSAic3RyaW5nIiA/ICJoZXgiIDogImJ5dGVzIik7CiAgICBjb25zdCBoYXNoZXMgPSBbXTsKICAgIGZvciAoY29uc3QgY29tbWl0bWVudCBvZiBjb21taXRtZW50cykgewogICAgICBoYXNoZXMucHVzaChjb21taXRtZW50VG9WZXJzaW9uZWRIYXNoKHsKICAgICAgICBjb21taXRtZW50LAogICAgICAgIHRvLAogICAgICAgIHZlcnNpb246IHZlcnNpb24zCiAgICAgIH0pKTsKICAgIH0KICAgIHJldHVybiBoYXNoZXM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9ibG9iLmpzCiAgdmFyIGJsb2JzUGVyVHJhbnNhY3Rpb24gPSA2OwogIHZhciBieXRlc1BlckZpZWxkRWxlbWVudCA9IDMyOwogIHZhciBmaWVsZEVsZW1lbnRzUGVyQmxvYiA9IDQwOTY7CiAgdmFyIGJ5dGVzUGVyQmxvYiA9IGJ5dGVzUGVyRmllbGRFbGVtZW50ICogZmllbGRFbGVtZW50c1BlckJsb2I7CiAgdmFyIG1heEJ5dGVzUGVyVHJhbnNhY3Rpb24gPSBieXRlc1BlckJsb2IgKiBibG9ic1BlclRyYW5zYWN0aW9uIC0gLy8gdGVybWluYXRvciBieXRlICgweDgwKS4KICAxIC0gLy8gemVybyBieXRlICgweDAwKSBhcHBlbmRlZCB0byBlYWNoIGZpZWxkIGVsZW1lbnQuCiAgMSAqIGZpZWxkRWxlbWVudHNQZXJCbG9iICogYmxvYnNQZXJUcmFuc2FjdGlvbjsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jb25zdGFudHMva3pnLmpzCiAgdmFyIHZlcnNpb25lZEhhc2hWZXJzaW9uS3pnID0gMTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvYmxvYi5qcwogIGluaXRfYmFzZSgpOwogIHZhciBCbG9iU2l6ZVRvb0xhcmdlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyBtYXhTaXplLCBzaXplOiBzaXplMyB9KSB7CiAgICAgIHN1cGVyKCJCbG9iIHNpemUgaXMgdG9vIGxhcmdlLiIsIHsKICAgICAgICBtZXRhTWVzc2FnZXM6IFtgTWF4OiAke21heFNpemV9IGJ5dGVzYCwgYEdpdmVuOiAke3NpemUzfSBieXRlc2BdLAogICAgICAgIG5hbWU6ICJCbG9iU2l6ZVRvb0xhcmdlRXJyb3IiCiAgICAgIH0pOwogICAgfQogIH07CiAgdmFyIEVtcHR5QmxvYkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiQmxvYiBkYXRhIG11c3Qgbm90IGJlIGVtcHR5LiIsIHsgbmFtZTogIkVtcHR5QmxvYkVycm9yIiB9KTsKICAgIH0KICB9OwogIHZhciBJbnZhbGlkVmVyc2lvbmVkSGFzaFNpemVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGhhc2g6IGhhc2gzLCBzaXplOiBzaXplMyB9KSB7CiAgICAgIHN1cGVyKGBWZXJzaW9uZWQgaGFzaCAiJHtoYXNoM30iIHNpemUgaXMgaW52YWxpZC5gLCB7CiAgICAgICAgbWV0YU1lc3NhZ2VzOiBbIkV4cGVjdGVkOiAzMiIsIGBSZWNlaXZlZDogJHtzaXplM31gXSwKICAgICAgICBuYW1lOiAiSW52YWxpZFZlcnNpb25lZEhhc2hTaXplRXJyb3IiCiAgICAgIH0pOwogICAgfQogIH07CiAgdmFyIEludmFsaWRWZXJzaW9uZWRIYXNoVmVyc2lvbkVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgaGFzaDogaGFzaDMsIHZlcnNpb246IHZlcnNpb24zIH0pIHsKICAgICAgc3VwZXIoYFZlcnNpb25lZCBoYXNoICIke2hhc2gzfSIgdmVyc2lvbiBpcyBpbnZhbGlkLmAsIHsKICAgICAgICBtZXRhTWVzc2FnZXM6IFsKICAgICAgICAgIGBFeHBlY3RlZDogJHt2ZXJzaW9uZWRIYXNoVmVyc2lvbkt6Z31gLAogICAgICAgICAgYFJlY2VpdmVkOiAke3ZlcnNpb24zfWAKICAgICAgICBdLAogICAgICAgIG5hbWU6ICJJbnZhbGlkVmVyc2lvbmVkSGFzaFZlcnNpb25FcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL3RvQmxvYnMuanMKICBpbml0X2N1cnNvcjIoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gdG9CbG9icyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB0byA9IHBhcmFtZXRlcnMudG8gPz8gKHR5cGVvZiBwYXJhbWV0ZXJzLmRhdGEgPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgcGFyYW1ldGVycy5kYXRhID09PSAic3RyaW5nIiA/IGhleFRvQnl0ZXMocGFyYW1ldGVycy5kYXRhKSA6IHBhcmFtZXRlcnMuZGF0YTsKICAgIGNvbnN0IHNpemVfID0gc2l6ZShkYXRhKTsKICAgIGlmICghc2l6ZV8pCiAgICAgIHRocm93IG5ldyBFbXB0eUJsb2JFcnJvcigpOwogICAgaWYgKHNpemVfID4gbWF4Qnl0ZXNQZXJUcmFuc2FjdGlvbikKICAgICAgdGhyb3cgbmV3IEJsb2JTaXplVG9vTGFyZ2VFcnJvcih7CiAgICAgICAgbWF4U2l6ZTogbWF4Qnl0ZXNQZXJUcmFuc2FjdGlvbiwKICAgICAgICBzaXplOiBzaXplXwogICAgICB9KTsKICAgIGNvbnN0IGJsb2JzID0gW107CiAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgIGxldCBwb3NpdGlvbiA9IDA7CiAgICB3aGlsZSAoYWN0aXZlKSB7CiAgICAgIGNvbnN0IGJsb2IgPSBjcmVhdGVDdXJzb3IobmV3IFVpbnQ4QXJyYXkoYnl0ZXNQZXJCbG9iKSk7CiAgICAgIGxldCBzaXplMyA9IDA7CiAgICAgIHdoaWxlIChzaXplMyA8IGZpZWxkRWxlbWVudHNQZXJCbG9iKSB7CiAgICAgICAgY29uc3QgYnl0ZXMyID0gZGF0YS5zbGljZShwb3NpdGlvbiwgcG9zaXRpb24gKyAoYnl0ZXNQZXJGaWVsZEVsZW1lbnQgLSAxKSk7CiAgICAgICAgYmxvYi5wdXNoQnl0ZSgwKTsKICAgICAgICBibG9iLnB1c2hCeXRlcyhieXRlczIpOwogICAgICAgIGlmIChieXRlczIubGVuZ3RoIDwgMzEpIHsKICAgICAgICAgIGJsb2IucHVzaEJ5dGUoMTI4KTsKICAgICAgICAgIGFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNpemUzKys7CiAgICAgICAgcG9zaXRpb24gKz0gMzE7CiAgICAgIH0KICAgICAgYmxvYnMucHVzaChibG9iKTsKICAgIH0KICAgIHJldHVybiB0byA9PT0gImJ5dGVzIiA/IGJsb2JzLm1hcCgoeCkgPT4geC5ieXRlcykgOiBibG9icy5tYXAoKHgpID0+IGJ5dGVzVG9IZXgoeC5ieXRlcykpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL3RvQmxvYlNpZGVjYXJzLmpzCiAgZnVuY3Rpb24gdG9CbG9iU2lkZWNhcnMocGFyYW1ldGVycykgewogICAgY29uc3QgeyBkYXRhLCBremcsIHRvIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgYmxvYnMgPSBwYXJhbWV0ZXJzLmJsb2JzID8/IHRvQmxvYnMoeyBkYXRhLCB0byB9KTsKICAgIGNvbnN0IGNvbW1pdG1lbnRzID0gcGFyYW1ldGVycy5jb21taXRtZW50cyA/PyBibG9ic1RvQ29tbWl0bWVudHMoeyBibG9icywga3pnLCB0byB9KTsKICAgIGNvbnN0IHByb29mcyA9IHBhcmFtZXRlcnMucHJvb2ZzID8/IGJsb2JzVG9Qcm9vZnMoeyBibG9icywgY29tbWl0bWVudHMsIGt6ZywgdG8gfSk7CiAgICBjb25zdCBzaWRlY2FycyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBibG9icy5sZW5ndGg7IGkrKykKICAgICAgc2lkZWNhcnMucHVzaCh7CiAgICAgICAgYmxvYjogYmxvYnNbaV0sCiAgICAgICAgY29tbWl0bWVudDogY29tbWl0bWVudHNbaV0sCiAgICAgICAgcHJvb2Y6IHByb29mc1tpXQogICAgICB9KTsKICAgIHJldHVybiBzaWRlY2FyczsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdC5qcwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL2dldFRyYW5zYWN0aW9uVHlwZS5qcwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb24pIHsKICAgIGlmICh0cmFuc2FjdGlvbi50eXBlKQogICAgICByZXR1cm4gdHJhbnNhY3Rpb24udHlwZTsKICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24uYXV0aG9yaXphdGlvbkxpc3QgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gImVpcDc3MDIiOwogICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbi5ibG9icyAhPT0gInVuZGVmaW5lZCIgfHwgdHlwZW9mIHRyYW5zYWN0aW9uLmJsb2JWZXJzaW9uZWRIYXNoZXMgIT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiB0cmFuc2FjdGlvbi5tYXhGZWVQZXJCbG9iR2FzICE9PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgdHJhbnNhY3Rpb24uc2lkZWNhcnMgIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gImVpcDQ4NDQiOwogICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbi5tYXhGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiB0cmFuc2FjdGlvbi5tYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgcmV0dXJuICJlaXAxNTU5IjsKICAgIH0KICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24uZ2FzUHJpY2UgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24uYWNjZXNzTGlzdCAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgcmV0dXJuICJlaXAyOTMwIjsKICAgICAgcmV0dXJuICJsZWdhY3kiOwogICAgfQogICAgdGhyb3cgbmV3IEludmFsaWRTZXJpYWxpemFibGVUcmFuc2FjdGlvbkVycm9yKHsgdHJhbnNhY3Rpb24gfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldENoYWluSWQuanMKICBpbml0X2Zyb21IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRDaGFpbklkKGNsaWVudCkgewogICAgY29uc3QgY2hhaW5JZEhleCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2NoYWluSWQiCiAgICB9LCB7IGRlZHVwZTogdHJ1ZSB9KTsKICAgIHJldHVybiBoZXhUb051bWJlcihjaGFpbklkSGV4KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdC5qcwogIHZhciBkZWZhdWx0UGFyYW1ldGVycyA9IFsKICAgICJibG9iVmVyc2lvbmVkSGFzaGVzIiwKICAgICJjaGFpbklkIiwKICAgICJmZWVzIiwKICAgICJnYXMiLAogICAgIm5vbmNlIiwKICAgICJ0eXBlIgogIF07CiAgYXN5bmMgZnVuY3Rpb24gcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdChjbGllbnQsIGFyZ3MpIHsKICAgIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudF8gPSBjbGllbnQuYWNjb3VudCwgYmxvYnMsIGNoYWluLCBnYXMsIGt6Zywgbm9uY2UsIHBhcmFtZXRlcnMgPSBkZWZhdWx0UGFyYW1ldGVycywgdHlwZSB9ID0gYXJnczsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICBjb25zdCByZXF1ZXN0ID0geyAuLi5hcmdzLCAuLi5hY2NvdW50ID8geyBmcm9tOiBhY2NvdW50Py5hZGRyZXNzIH0gOiB7fSB9OwogICAgbGV0IGJsb2NrOwogICAgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvY2syKCkgewogICAgICBpZiAoYmxvY2spCiAgICAgICAgcmV0dXJuIGJsb2NrOwogICAgICBibG9jayA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrLCAiZ2V0QmxvY2siKSh7IGJsb2NrVGFnOiAibGF0ZXN0IiB9KTsKICAgICAgcmV0dXJuIGJsb2NrOwogICAgfQogICAgbGV0IGNoYWluSWQ7CiAgICBhc3luYyBmdW5jdGlvbiBnZXRDaGFpbklkMigpIHsKICAgICAgaWYgKGNoYWluSWQpCiAgICAgICAgcmV0dXJuIGNoYWluSWQ7CiAgICAgIGlmIChjaGFpbikKICAgICAgICByZXR1cm4gY2hhaW4uaWQ7CiAgICAgIGlmICh0eXBlb2YgYXJncy5jaGFpbklkICE9PSAidW5kZWZpbmVkIikKICAgICAgICByZXR1cm4gYXJncy5jaGFpbklkOwogICAgICBjb25zdCBjaGFpbklkXyA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldENoYWluSWQsICJnZXRDaGFpbklkIikoe30pOwogICAgICBjaGFpbklkID0gY2hhaW5JZF87CiAgICAgIHJldHVybiBjaGFpbklkOwogICAgfQogICAgaWYgKChwYXJhbWV0ZXJzLmluY2x1ZGVzKCJibG9iVmVyc2lvbmVkSGFzaGVzIikgfHwgcGFyYW1ldGVycy5pbmNsdWRlcygic2lkZWNhcnMiKSkgJiYgYmxvYnMgJiYga3pnKSB7CiAgICAgIGNvbnN0IGNvbW1pdG1lbnRzID0gYmxvYnNUb0NvbW1pdG1lbnRzKHsgYmxvYnMsIGt6ZyB9KTsKICAgICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoImJsb2JWZXJzaW9uZWRIYXNoZXMiKSkgewogICAgICAgIGNvbnN0IHZlcnNpb25lZEhhc2hlcyA9IGNvbW1pdG1lbnRzVG9WZXJzaW9uZWRIYXNoZXMoewogICAgICAgICAgY29tbWl0bWVudHMsCiAgICAgICAgICB0bzogImhleCIKICAgICAgICB9KTsKICAgICAgICByZXF1ZXN0LmJsb2JWZXJzaW9uZWRIYXNoZXMgPSB2ZXJzaW9uZWRIYXNoZXM7CiAgICAgIH0KICAgICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoInNpZGVjYXJzIikpIHsKICAgICAgICBjb25zdCBwcm9vZnMgPSBibG9ic1RvUHJvb2ZzKHsgYmxvYnMsIGNvbW1pdG1lbnRzLCBremcgfSk7CiAgICAgICAgY29uc3Qgc2lkZWNhcnMgPSB0b0Jsb2JTaWRlY2Fycyh7CiAgICAgICAgICBibG9icywKICAgICAgICAgIGNvbW1pdG1lbnRzLAogICAgICAgICAgcHJvb2ZzLAogICAgICAgICAgdG86ICJoZXgiCiAgICAgICAgfSk7CiAgICAgICAgcmVxdWVzdC5zaWRlY2FycyA9IHNpZGVjYXJzOwogICAgICB9CiAgICB9CiAgICBpZiAocGFyYW1ldGVycy5pbmNsdWRlcygiY2hhaW5JZCIpKQogICAgICByZXF1ZXN0LmNoYWluSWQgPSBhd2FpdCBnZXRDaGFpbklkMigpOwogICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoIm5vbmNlIikgJiYgdHlwZW9mIG5vbmNlID09PSAidW5kZWZpbmVkIiAmJiBhY2NvdW50KSB7CiAgICAgIGlmIChhY2NvdW50Lm5vbmNlTWFuYWdlcikgewogICAgICAgIGNvbnN0IGNoYWluSWQyID0gYXdhaXQgZ2V0Q2hhaW5JZDIoKTsKICAgICAgICByZXF1ZXN0Lm5vbmNlID0gYXdhaXQgYWNjb3VudC5ub25jZU1hbmFnZXIuY29uc3VtZSh7CiAgICAgICAgICBhZGRyZXNzOiBhY2NvdW50LmFkZHJlc3MsCiAgICAgICAgICBjaGFpbklkOiBjaGFpbklkMiwKICAgICAgICAgIGNsaWVudAogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHJlcXVlc3Qubm9uY2UgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRUcmFuc2FjdGlvbkNvdW50LCAiZ2V0VHJhbnNhY3Rpb25Db3VudCIpKHsKICAgICAgICAgIGFkZHJlc3M6IGFjY291bnQuYWRkcmVzcywKICAgICAgICAgIGJsb2NrVGFnOiAicGVuZGluZyIKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgaWYgKChwYXJhbWV0ZXJzLmluY2x1ZGVzKCJmZWVzIikgfHwgcGFyYW1ldGVycy5pbmNsdWRlcygidHlwZSIpKSAmJiB0eXBlb2YgdHlwZSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXF1ZXN0LnR5cGUgPSBnZXRUcmFuc2FjdGlvblR5cGUocmVxdWVzdCk7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIGNvbnN0IGJsb2NrMiA9IGF3YWl0IGdldEJsb2NrMigpOwogICAgICAgIHJlcXVlc3QudHlwZSA9IHR5cGVvZiBibG9jazI/LmJhc2VGZWVQZXJHYXMgPT09ICJiaWdpbnQiID8gImVpcDE1NTkiIDogImxlZ2FjeSI7CiAgICAgIH0KICAgIH0KICAgIGlmIChwYXJhbWV0ZXJzLmluY2x1ZGVzKCJmZWVzIikpIHsKICAgICAgaWYgKHJlcXVlc3QudHlwZSAhPT0gImxlZ2FjeSIgJiYgcmVxdWVzdC50eXBlICE9PSAiZWlwMjkzMCIpIHsKICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3QubWF4RmVlUGVyR2FzID09PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgcmVxdWVzdC5tYXhQcmlvcml0eUZlZVBlckdhcyA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIGNvbnN0IGJsb2NrMiA9IGF3YWl0IGdldEJsb2NrMigpOwogICAgICAgICAgY29uc3QgeyBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzIH0gPSBhd2FpdCBpbnRlcm5hbF9lc3RpbWF0ZUZlZXNQZXJHYXMoY2xpZW50LCB7CiAgICAgICAgICAgIGJsb2NrOiBibG9jazIsCiAgICAgICAgICAgIGNoYWluLAogICAgICAgICAgICByZXF1ZXN0CiAgICAgICAgICB9KTsKICAgICAgICAgIGlmICh0eXBlb2YgYXJncy5tYXhQcmlvcml0eUZlZVBlckdhcyA9PT0gInVuZGVmaW5lZCIgJiYgYXJncy5tYXhGZWVQZXJHYXMgJiYgYXJncy5tYXhGZWVQZXJHYXMgPCBtYXhQcmlvcml0eUZlZVBlckdhcykKICAgICAgICAgICAgdGhyb3cgbmV3IE1heEZlZVBlckdhc1Rvb0xvd0Vycm9yKHsKICAgICAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhcwogICAgICAgICAgICB9KTsKICAgICAgICAgIHJlcXVlc3QubWF4UHJpb3JpdHlGZWVQZXJHYXMgPSBtYXhQcmlvcml0eUZlZVBlckdhczsKICAgICAgICAgIHJlcXVlc3QubWF4RmVlUGVyR2FzID0gbWF4RmVlUGVyR2FzOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAodHlwZW9mIGFyZ3MubWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgYXJncy5tYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgICB0aHJvdyBuZXcgRWlwMTU1OUZlZXNOb3RTdXBwb3J0ZWRFcnJvcigpOwogICAgICAgIGNvbnN0IGJsb2NrMiA9IGF3YWl0IGdldEJsb2NrMigpOwogICAgICAgIGNvbnN0IHsgZ2FzUHJpY2U6IGdhc1ByaWNlXyB9ID0gYXdhaXQgaW50ZXJuYWxfZXN0aW1hdGVGZWVzUGVyR2FzKGNsaWVudCwgewogICAgICAgICAgYmxvY2s6IGJsb2NrMiwKICAgICAgICAgIGNoYWluLAogICAgICAgICAgcmVxdWVzdCwKICAgICAgICAgIHR5cGU6ICJsZWdhY3kiCiAgICAgICAgfSk7CiAgICAgICAgcmVxdWVzdC5nYXNQcmljZSA9IGdhc1ByaWNlXzsKICAgICAgfQogICAgfQogICAgaWYgKHBhcmFtZXRlcnMuaW5jbHVkZXMoImdhcyIpICYmIHR5cGVvZiBnYXMgPT09ICJ1bmRlZmluZWQiKQogICAgICByZXF1ZXN0LmdhcyA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGVzdGltYXRlR2FzLCAiZXN0aW1hdGVHYXMiKSh7CiAgICAgICAgLi4ucmVxdWVzdCwKICAgICAgICBhY2NvdW50OiBhY2NvdW50ID8geyBhZGRyZXNzOiBhY2NvdW50LmFkZHJlc3MsIHR5cGU6ICJqc29uLXJwYyIgfSA6IHZvaWQgMAogICAgICB9KTsKICAgIGFzc2VydFJlcXVlc3QocmVxdWVzdCk7CiAgICBkZWxldGUgcmVxdWVzdC5wYXJhbWV0ZXJzOwogICAgcmV0dXJuIHJlcXVlc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEJhbGFuY2UuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0QmFsYW5jZShjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tOdW1iZXIsIGJsb2NrVGFnID0gImxhdGVzdCIgfSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgIGNvbnN0IGJhbGFuY2UgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRCYWxhbmNlIiwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWddCiAgICB9KTsKICAgIHJldHVybiBCaWdJbnQoYmFsYW5jZSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2VzdGltYXRlR2FzLmpzCiAgYXN5bmMgZnVuY3Rpb24gZXN0aW1hdGVHYXMoY2xpZW50LCBhcmdzKSB7CiAgICBjb25zdCBhY2NvdW50XyA9IGFyZ3MuYWNjb3VudCA/PyBjbGllbnQuYWNjb3VudDsKICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50XyA/IHBhcnNlQWNjb3VudChhY2NvdW50XykgOiB2b2lkIDA7CiAgICB0cnkgewogICAgICBsZXQgZXN0aW1hdGVHYXNfcnBjID0gZnVuY3Rpb24ocGFyYW1ldGVycykgewogICAgICAgIGNvbnN0IHsgYmxvY2s6IGJsb2NrMiwgcmVxdWVzdDogcmVxdWVzdDIsIHJwY1N0YXRlT3ZlcnJpZGU6IHJwY1N0YXRlT3ZlcnJpZGUyIH0gPSBwYXJhbWV0ZXJzOwogICAgICAgIHJldHVybiBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgICBtZXRob2Q6ICJldGhfZXN0aW1hdGVHYXMiLAogICAgICAgICAgcGFyYW1zOiBycGNTdGF0ZU92ZXJyaWRlMiA/IFtyZXF1ZXN0MiwgYmxvY2syID8/ICJsYXRlc3QiLCBycGNTdGF0ZU92ZXJyaWRlMl0gOiBibG9jazIgPyBbcmVxdWVzdDIsIGJsb2NrMl0gOiBbcmVxdWVzdDJdCiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIGNvbnN0IHsgYWNjZXNzTGlzdCwgYXV0aG9yaXphdGlvbkxpc3QsIGJsb2JzLCBibG9iVmVyc2lvbmVkSGFzaGVzLCBibG9ja051bWJlciwgYmxvY2tUYWcsIGRhdGEsIGdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckJsb2JHYXMsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIG5vbmNlLCB2YWx1ZSwgc3RhdGVPdmVycmlkZSwgLi4ucmVzdCB9ID0gYXdhaXQgcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdChjbGllbnQsIHsKICAgICAgICAuLi5hcmdzLAogICAgICAgIHBhcmFtZXRlcnM6ICgKICAgICAgICAgIC8vIFNvbWUgUlBDIFByb3ZpZGVycyBkbyBub3QgY29tcHV0ZSB2ZXJzaW9uZWQgaGFzaGVzIGZyb20gYmxvYnMuIFdlIHdpbGwgbmVlZAogICAgICAgICAgLy8gdG8gY29tcHV0ZSB0aGVtLgogICAgICAgICAgYWNjb3VudD8udHlwZSA9PT0gImxvY2FsIiA/IHZvaWQgMCA6IFsiYmxvYlZlcnNpb25lZEhhc2hlcyJdCiAgICAgICAgKQogICAgICB9KTsKICAgICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgICAgY29uc3QgYmxvY2sgPSBibG9ja051bWJlckhleCB8fCBibG9ja1RhZzsKICAgICAgY29uc3QgcnBjU3RhdGVPdmVycmlkZSA9IHNlcmlhbGl6ZVN0YXRlT3ZlcnJpZGUoc3RhdGVPdmVycmlkZSk7CiAgICAgIGNvbnN0IHRvID0gYXdhaXQgKGFzeW5jICgpID0+IHsKICAgICAgICBpZiAocmVzdC50bykKICAgICAgICAgIHJldHVybiByZXN0LnRvOwogICAgICAgIGlmIChhdXRob3JpemF0aW9uTGlzdCAmJiBhdXRob3JpemF0aW9uTGlzdC5sZW5ndGggPiAwKQogICAgICAgICAgcmV0dXJuIGF3YWl0IHJlY292ZXJBdXRob3JpemF0aW9uQWRkcmVzcyh7CiAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGF1dGhvcml6YXRpb25MaXN0WzBdCiAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgdG9gIGlzIHJlcXVpcmVkLiBDb3VsZCBub3QgaW5mZXIgZnJvbSBgYXV0aG9yaXphdGlvbkxpc3RgIik7CiAgICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9KSgpOwogICAgICBhc3NlcnRSZXF1ZXN0KGFyZ3MpOwogICAgICBjb25zdCBjaGFpbkZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb25SZXF1ZXN0Py5mb3JtYXQ7CiAgICAgIGNvbnN0IGZvcm1hdCA9IGNoYWluRm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgICAgY29uc3QgcmVxdWVzdCA9IGZvcm1hdCh7CiAgICAgICAgLy8gUGljayBvdXQgZXh0cmEgZGF0YSB0aGF0IG1pZ2h0IGV4aXN0IG9uIHRoZSBjaGFpbidzIHRyYW5zYWN0aW9uIHJlcXVlc3QgdHlwZS4KICAgICAgICAuLi5leHRyYWN0KHJlc3QsIHsgZm9ybWF0OiBjaGFpbkZvcm1hdCB9KSwKICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgIGFjY2Vzc0xpc3QsCiAgICAgICAgYXV0aG9yaXphdGlvbkxpc3QsCiAgICAgICAgYmxvYnMsCiAgICAgICAgYmxvYlZlcnNpb25lZEhhc2hlcywKICAgICAgICBkYXRhLAogICAgICAgIGdhcywKICAgICAgICBnYXNQcmljZSwKICAgICAgICBtYXhGZWVQZXJCbG9iR2FzLAogICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhcywKICAgICAgICBub25jZSwKICAgICAgICB0bywKICAgICAgICB2YWx1ZQogICAgICB9KTsKICAgICAgbGV0IGVzdGltYXRlID0gQmlnSW50KGF3YWl0IGVzdGltYXRlR2FzX3JwYyh7IGJsb2NrLCByZXF1ZXN0LCBycGNTdGF0ZU92ZXJyaWRlIH0pKTsKICAgICAgaWYgKGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICAgICAgY29uc3QgdmFsdWUyID0gYXdhaXQgZ2V0QmFsYW5jZShjbGllbnQsIHsgYWRkcmVzczogcmVxdWVzdC5mcm9tIH0pOwogICAgICAgIGNvbnN0IGVzdGltYXRlcyA9IGF3YWl0IFByb21pc2UuYWxsKGF1dGhvcml6YXRpb25MaXN0Lm1hcChhc3luYyAoYXV0aG9yaXphdGlvbikgPT4gewogICAgICAgICAgY29uc3QgeyBjb250cmFjdEFkZHJlc3MgfSA9IGF1dGhvcml6YXRpb247CiAgICAgICAgICBjb25zdCBlc3RpbWF0ZTIgPSBhd2FpdCBlc3RpbWF0ZUdhc19ycGMoewogICAgICAgICAgICBibG9jaywKICAgICAgICAgICAgcmVxdWVzdDogewogICAgICAgICAgICAgIGF1dGhvcml6YXRpb25MaXN0OiB2b2lkIDAsCiAgICAgICAgICAgICAgZGF0YSwKICAgICAgICAgICAgICBmcm9tOiBhY2NvdW50Py5hZGRyZXNzLAogICAgICAgICAgICAgIHRvOiBjb250cmFjdEFkZHJlc3MsCiAgICAgICAgICAgICAgdmFsdWU6IG51bWJlclRvSGV4KHZhbHVlMikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcnBjU3RhdGVPdmVycmlkZQogICAgICAgICAgfSkuY2F0Y2goKCkgPT4gMTAwMDAwbik7CiAgICAgICAgICByZXR1cm4gMm4gKiBCaWdJbnQoZXN0aW1hdGUyKTsKICAgICAgICB9KSk7CiAgICAgICAgZXN0aW1hdGUgKz0gZXN0aW1hdGVzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLCAwbik7CiAgICAgIH0KICAgICAgcmV0dXJuIGVzdGltYXRlOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIHRocm93IGdldEVzdGltYXRlR2FzRXJyb3IoZXJyLCB7CiAgICAgICAgLi4uYXJncywKICAgICAgICBhY2NvdW50LAogICAgICAgIGNoYWluOiBjbGllbnQuY2hhaW4KICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2VzdGltYXRlQ29udHJhY3RHYXMuanMKICBhc3luYyBmdW5jdGlvbiBlc3RpbWF0ZUNvbnRyYWN0R2FzKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGZ1bmN0aW9uTmFtZSwgLi4ucmVxdWVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVGdW5jdGlvbkRhdGEoewogICAgICBhYmk6IGFiaTIsCiAgICAgIGFyZ3MsCiAgICAgIGZ1bmN0aW9uTmFtZQogICAgfSk7CiAgICB0cnkgewogICAgICBjb25zdCBnYXMgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBlc3RpbWF0ZUdhcywgImVzdGltYXRlR2FzIikoewogICAgICAgIGRhdGEsCiAgICAgICAgdG86IGFkZHJlc3MsCiAgICAgICAgLi4ucmVxdWVzdAogICAgICB9KTsKICAgICAgcmV0dXJuIGdhczsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnN0IGFjY291bnQgPSByZXF1ZXN0LmFjY291bnQgPyBwYXJzZUFjY291bnQocmVxdWVzdC5hY2NvdW50KSA6IHZvaWQgMDsKICAgICAgdGhyb3cgZ2V0Q29udHJhY3RFcnJvcihlcnJvciwgewogICAgICAgIGFiaTogYWJpMiwKICAgICAgICBhZGRyZXNzLAogICAgICAgIGFyZ3MsCiAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9jb250cmFjdC9lc3RpbWF0ZUNvbnRyYWN0R2FzIiwKICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgc2VuZGVyOiBhY2NvdW50Py5hZGRyZXNzCiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRDb250cmFjdEV2ZW50cy5qcwogIGluaXRfZ2V0QWJpSXRlbSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9wYXJzZUV2ZW50TG9ncy5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9pc0FkZHJlc3NFcXVhbCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfa2VjY2FrMjU2KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZUV2ZW50TG9nLmpzCiAgaW5pdF9hYmkoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvRXZlbnRTZWxlY3RvcigpOwogIGluaXRfY3Vyc29yKCk7CiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9mb3JtYXRBYmlJdGVtMigpOwogIHZhciBkb2NzUGF0aDMgPSAiL2RvY3MvY29udHJhY3QvZGVjb2RlRXZlbnRMb2ciOwogIGZ1bmN0aW9uIGRlY29kZUV2ZW50TG9nKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBkYXRhLCBzdHJpY3Q6IHN0cmljdF8sIHRvcGljcyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHN0cmljdCA9IHN0cmljdF8gPz8gdHJ1ZTsKICAgIGNvbnN0IFtzaWduYXR1cmUsIC4uLmFyZ1RvcGljc10gPSB0b3BpY3M7CiAgICBpZiAoIXNpZ25hdHVyZSkKICAgICAgdGhyb3cgbmV3IEFiaUV2ZW50U2lnbmF0dXJlRW1wdHlUb3BpY3NFcnJvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDMgfSk7CiAgICBjb25zdCBhYmlJdGVtID0gYWJpMi5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICJldmVudCIgJiYgc2lnbmF0dXJlID09PSB0b0V2ZW50U2VsZWN0b3IoZm9ybWF0QWJpSXRlbTIoeCkpKTsKICAgIGlmICghKGFiaUl0ZW0gJiYgIm5hbWUiIGluIGFiaUl0ZW0pIHx8IGFiaUl0ZW0udHlwZSAhPT0gImV2ZW50IikKICAgICAgdGhyb3cgbmV3IEFiaUV2ZW50U2lnbmF0dXJlTm90Rm91bmRFcnJvcihzaWduYXR1cmUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoMyB9KTsKICAgIGNvbnN0IHsgbmFtZSwgaW5wdXRzIH0gPSBhYmlJdGVtOwogICAgY29uc3QgaXNVbm5hbWVkID0gaW5wdXRzPy5zb21lKCh4KSA9PiAhKCJuYW1lIiBpbiB4ICYmIHgubmFtZSkpOwogICAgbGV0IGFyZ3MgPSBpc1VubmFtZWQgPyBbXSA6IHt9OwogICAgY29uc3QgaW5kZXhlZElucHV0cyA9IGlucHV0cy5maWx0ZXIoKHgpID0+ICJpbmRleGVkIiBpbiB4ICYmIHguaW5kZXhlZCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4ZWRJbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgcGFyYW0gPSBpbmRleGVkSW5wdXRzW2ldOwogICAgICBjb25zdCB0b3BpYyA9IGFyZ1RvcGljc1tpXTsKICAgICAgaWYgKCF0b3BpYykKICAgICAgICB0aHJvdyBuZXcgRGVjb2RlTG9nVG9waWNzTWlzbWF0Y2goewogICAgICAgICAgYWJpSXRlbSwKICAgICAgICAgIHBhcmFtCiAgICAgICAgfSk7CiAgICAgIGFyZ3NbaXNVbm5hbWVkID8gaSA6IHBhcmFtLm5hbWUgfHwgaV0gPSBkZWNvZGVUb3BpYyh7IHBhcmFtLCB2YWx1ZTogdG9waWMgfSk7CiAgICB9CiAgICBjb25zdCBub25JbmRleGVkSW5wdXRzID0gaW5wdXRzLmZpbHRlcigoeCkgPT4gISgiaW5kZXhlZCIgaW4geCAmJiB4LmluZGV4ZWQpKTsKICAgIGlmIChub25JbmRleGVkSW5wdXRzLmxlbmd0aCA+IDApIHsKICAgICAgaWYgKGRhdGEgJiYgZGF0YSAhPT0gIjB4IikgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IGRlY29kZUFiaVBhcmFtZXRlcnMobm9uSW5kZXhlZElucHV0cywgZGF0YSk7CiAgICAgICAgICBpZiAoZGVjb2RlZERhdGEpIHsKICAgICAgICAgICAgaWYgKGlzVW5uYW1lZCkKICAgICAgICAgICAgICBhcmdzID0gWy4uLmFyZ3MsIC4uLmRlY29kZWREYXRhXTsKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub25JbmRleGVkSW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBhcmdzW25vbkluZGV4ZWRJbnB1dHNbaV0ubmFtZV0gPSBkZWNvZGVkRGF0YVtpXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGlmIChzdHJpY3QpIHsKICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEFiaURlY29kaW5nRGF0YVNpemVUb29TbWFsbEVycm9yIHx8IGVyciBpbnN0YW5jZW9mIFBvc2l0aW9uT3V0T2ZCb3VuZHNFcnJvcikKICAgICAgICAgICAgICB0aHJvdyBuZXcgRGVjb2RlTG9nRGF0YU1pc21hdGNoKHsKICAgICAgICAgICAgICAgIGFiaUl0ZW0sCiAgICAgICAgICAgICAgICBkYXRhLAogICAgICAgICAgICAgICAgcGFyYW1zOiBub25JbmRleGVkSW5wdXRzLAogICAgICAgICAgICAgICAgc2l6ZTogc2l6ZShkYXRhKQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHN0cmljdCkgewogICAgICAgIHRocm93IG5ldyBEZWNvZGVMb2dEYXRhTWlzbWF0Y2goewogICAgICAgICAgYWJpSXRlbSwKICAgICAgICAgIGRhdGE6ICIweCIsCiAgICAgICAgICBwYXJhbXM6IG5vbkluZGV4ZWRJbnB1dHMsCiAgICAgICAgICBzaXplOiAwCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB7CiAgICAgIGV2ZW50TmFtZTogbmFtZSwKICAgICAgYXJnczogT2JqZWN0LnZhbHVlcyhhcmdzKS5sZW5ndGggPiAwID8gYXJncyA6IHZvaWQgMAogICAgfTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlVG9waWMoeyBwYXJhbSwgdmFsdWUgfSkgewogICAgaWYgKHBhcmFtLnR5cGUgPT09ICJzdHJpbmciIHx8IHBhcmFtLnR5cGUgPT09ICJieXRlcyIgfHwgcGFyYW0udHlwZSA9PT0gInR1cGxlIiB8fCBwYXJhbS50eXBlLm1hdGNoKC9eKC4qKVxbKFxkKyk/XF0kLykpCiAgICAgIHJldHVybiB2YWx1ZTsKICAgIGNvbnN0IGRlY29kZWRBcmcgPSBkZWNvZGVBYmlQYXJhbWV0ZXJzKFtwYXJhbV0sIHZhbHVlKSB8fCBbXTsKICAgIHJldHVybiBkZWNvZGVkQXJnWzBdOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9hYmkvcGFyc2VFdmVudExvZ3MuanMKICBpbml0X2dldEFiaUl0ZW0oKTsKICBmdW5jdGlvbiBwYXJzZUV2ZW50TG9ncyhwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYXJncywgbG9ncywgc3RyaWN0ID0gdHJ1ZSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGV2ZW50TmFtZSA9ICgoKSA9PiB7CiAgICAgIGlmICghcGFyYW1ldGVycy5ldmVudE5hbWUpCiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1ldGVycy5ldmVudE5hbWUpKQogICAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmV2ZW50TmFtZTsKICAgICAgcmV0dXJuIFtwYXJhbWV0ZXJzLmV2ZW50TmFtZV07CiAgICB9KSgpOwogICAgcmV0dXJuIGxvZ3MubWFwKChsb2cpID0+IHsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBhYmlJdGVtID0gZ2V0QWJpSXRlbSh7CiAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICBuYW1lOiBsb2cudG9waWNzWzBdCiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFhYmlJdGVtKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgY29uc3QgZXZlbnQgPSBkZWNvZGVFdmVudExvZyh7CiAgICAgICAgICAuLi5sb2csCiAgICAgICAgICBhYmk6IFthYmlJdGVtXSwKICAgICAgICAgIHN0cmljdAogICAgICAgIH0pOwogICAgICAgIGlmIChldmVudE5hbWUgJiYgIWV2ZW50TmFtZS5pbmNsdWRlcyhldmVudC5ldmVudE5hbWUpKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKCFpbmNsdWRlc0FyZ3MoewogICAgICAgICAgYXJnczogZXZlbnQuYXJncywKICAgICAgICAgIGlucHV0czogYWJpSXRlbS5pbnB1dHMsCiAgICAgICAgICBtYXRjaEFyZ3M6IGFyZ3MKICAgICAgICB9KSkKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIHJldHVybiB7IC4uLmV2ZW50LCAuLi5sb2cgfTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgbGV0IGV2ZW50TmFtZTI7CiAgICAgICAgbGV0IGlzVW5uYW1lZDsKICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgQWJpRXZlbnRTaWduYXR1cmVOb3RGb3VuZEVycm9yKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIERlY29kZUxvZ0RhdGFNaXNtYXRjaCB8fCBlcnIgaW5zdGFuY2VvZiBEZWNvZGVMb2dUb3BpY3NNaXNtYXRjaCkgewogICAgICAgICAgaWYgKHN0cmljdCkKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICBldmVudE5hbWUyID0gZXJyLmFiaUl0ZW0ubmFtZTsKICAgICAgICAgIGlzVW5uYW1lZCA9IGVyci5hYmlJdGVtLmlucHV0cz8uc29tZSgoeCkgPT4gISgibmFtZSIgaW4geCAmJiB4Lm5hbWUpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgLi4ubG9nLCBhcmdzOiBpc1VubmFtZWQgPyBbXSA6IHt9LCBldmVudE5hbWU6IGV2ZW50TmFtZTIgfTsKICAgICAgfQogICAgfSkuZmlsdGVyKEJvb2xlYW4pOwogIH0KICBmdW5jdGlvbiBpbmNsdWRlc0FyZ3MocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhcmdzLCBpbnB1dHMsIG1hdGNoQXJncyB9ID0gcGFyYW1ldGVyczsKICAgIGlmICghbWF0Y2hBcmdzKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICghYXJncykKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZnVuY3Rpb24gaXNFcXVhbChpbnB1dCwgdmFsdWUsIGFyZykgewogICAgICB0cnkgewogICAgICAgIGlmIChpbnB1dC50eXBlID09PSAiYWRkcmVzcyIpCiAgICAgICAgICByZXR1cm4gaXNBZGRyZXNzRXF1YWwodmFsdWUsIGFyZyk7CiAgICAgICAgaWYgKGlucHV0LnR5cGUgPT09ICJzdHJpbmciIHx8IGlucHV0LnR5cGUgPT09ICJieXRlcyIpCiAgICAgICAgICByZXR1cm4ga2VjY2FrMjU2KHRvQnl0ZXModmFsdWUpKSA9PT0gYXJnOwogICAgICAgIHJldHVybiB2YWx1ZSA9PT0gYXJnOwogICAgICB9IGNhdGNoIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3MpICYmIEFycmF5LmlzQXJyYXkobWF0Y2hBcmdzKSkgewogICAgICByZXR1cm4gbWF0Y2hBcmdzLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgyKSA9PiB7CiAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRzW2luZGV4Ml07CiAgICAgICAgaWYgKCFpbnB1dCkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBjb25zdCB2YWx1ZV8gPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTsKICAgICAgICByZXR1cm4gdmFsdWVfLnNvbWUoKHZhbHVlMikgPT4gaXNFcXVhbChpbnB1dCwgdmFsdWUyLCBhcmdzW2luZGV4Ml0pKTsKICAgICAgfSk7CiAgICB9CiAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICJvYmplY3QiICYmICFBcnJheS5pc0FycmF5KGFyZ3MpICYmIHR5cGVvZiBtYXRjaEFyZ3MgPT09ICJvYmplY3QiICYmICFBcnJheS5pc0FycmF5KG1hdGNoQXJncykpCiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhtYXRjaEFyZ3MpLmV2ZXJ5KChba2V5LCB2YWx1ZV0pID0+IHsKICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dHMuZmluZCgoaW5wdXQyKSA9PiBpbnB1dDIubmFtZSA9PT0ga2V5KTsKICAgICAgICBpZiAoIWlucHV0KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGNvbnN0IHZhbHVlXyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdOwogICAgICAgIHJldHVybiB2YWx1ZV8uc29tZSgodmFsdWUyKSA9PiBpc0VxdWFsKGlucHV0LCB2YWx1ZTIsIGFyZ3Nba2V5XSkpOwogICAgICB9KTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0TG9ncy5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2xvZy5qcwogIGZ1bmN0aW9uIGZvcm1hdExvZyhsb2csIHsgYXJncywgZXZlbnROYW1lIH0gPSB7fSkgewogICAgcmV0dXJuIHsKICAgICAgLi4ubG9nLAogICAgICBibG9ja0hhc2g6IGxvZy5ibG9ja0hhc2ggPyBsb2cuYmxvY2tIYXNoIDogbnVsbCwKICAgICAgYmxvY2tOdW1iZXI6IGxvZy5ibG9ja051bWJlciA/IEJpZ0ludChsb2cuYmxvY2tOdW1iZXIpIDogbnVsbCwKICAgICAgbG9nSW5kZXg6IGxvZy5sb2dJbmRleCA/IE51bWJlcihsb2cubG9nSW5kZXgpIDogbnVsbCwKICAgICAgdHJhbnNhY3Rpb25IYXNoOiBsb2cudHJhbnNhY3Rpb25IYXNoID8gbG9nLnRyYW5zYWN0aW9uSGFzaCA6IG51bGwsCiAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IGxvZy50cmFuc2FjdGlvbkluZGV4ID8gTnVtYmVyKGxvZy50cmFuc2FjdGlvbkluZGV4KSA6IG51bGwsCiAgICAgIC4uLmV2ZW50TmFtZSA/IHsgYXJncywgZXZlbnROYW1lIH0gOiB7fQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0TG9ncy5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldExvZ3MoY2xpZW50LCB7IGFkZHJlc3MsIGJsb2NrSGFzaCwgZnJvbUJsb2NrLCB0b0Jsb2NrLCBldmVudCwgZXZlbnRzOiBldmVudHNfLCBhcmdzLCBzdHJpY3Q6IHN0cmljdF8gfSA9IHt9KSB7CiAgICBjb25zdCBzdHJpY3QgPSBzdHJpY3RfID8/IGZhbHNlOwogICAgY29uc3QgZXZlbnRzID0gZXZlbnRzXyA/PyAoZXZlbnQgPyBbZXZlbnRdIDogdm9pZCAwKTsKICAgIGxldCB0b3BpY3MgPSBbXTsKICAgIGlmIChldmVudHMpIHsKICAgICAgY29uc3QgZW5jb2RlZCA9IGV2ZW50cy5mbGF0TWFwKChldmVudDIpID0+IGVuY29kZUV2ZW50VG9waWNzKHsKICAgICAgICBhYmk6IFtldmVudDJdLAogICAgICAgIGV2ZW50TmFtZTogZXZlbnQyLm5hbWUsCiAgICAgICAgYXJnczogZXZlbnRzXyA/IHZvaWQgMCA6IGFyZ3MKICAgICAgfSkpOwogICAgICB0b3BpY3MgPSBbZW5jb2RlZF07CiAgICAgIGlmIChldmVudCkKICAgICAgICB0b3BpY3MgPSB0b3BpY3NbMF07CiAgICB9CiAgICBsZXQgbG9nczsKICAgIGlmIChibG9ja0hhc2gpIHsKICAgICAgbG9ncyA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0TG9ncyIsCiAgICAgICAgcGFyYW1zOiBbeyBhZGRyZXNzLCB0b3BpY3MsIGJsb2NrSGFzaCB9XQogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGxvZ3MgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXRoX2dldExvZ3MiLAogICAgICAgIHBhcmFtczogWwogICAgICAgICAgewogICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICB0b3BpY3MsCiAgICAgICAgICAgIGZyb21CbG9jazogdHlwZW9mIGZyb21CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleChmcm9tQmxvY2spIDogZnJvbUJsb2NrLAogICAgICAgICAgICB0b0Jsb2NrOiB0eXBlb2YgdG9CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleCh0b0Jsb2NrKSA6IHRvQmxvY2sKICAgICAgICAgIH0KICAgICAgICBdCiAgICAgIH0pOwogICAgfQogICAgY29uc3QgZm9ybWF0dGVkTG9ncyA9IGxvZ3MubWFwKChsb2cpID0+IGZvcm1hdExvZyhsb2cpKTsKICAgIGlmICghZXZlbnRzKQogICAgICByZXR1cm4gZm9ybWF0dGVkTG9nczsKICAgIHJldHVybiBwYXJzZUV2ZW50TG9ncyh7CiAgICAgIGFiaTogZXZlbnRzLAogICAgICBhcmdzLAogICAgICBsb2dzOiBmb3JtYXR0ZWRMb2dzLAogICAgICBzdHJpY3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRDb250cmFjdEV2ZW50cy5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldENvbnRyYWN0RXZlbnRzKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGJsb2NrSGFzaCwgZXZlbnROYW1lLCBmcm9tQmxvY2ssIHRvQmxvY2ssIHN0cmljdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGV2ZW50ID0gZXZlbnROYW1lID8gZ2V0QWJpSXRlbSh7IGFiaTogYWJpMiwgbmFtZTogZXZlbnROYW1lIH0pIDogdm9pZCAwOwogICAgY29uc3QgZXZlbnRzID0gIWV2ZW50ID8gYWJpMi5maWx0ZXIoKHgpID0+IHgudHlwZSA9PT0gImV2ZW50IikgOiB2b2lkIDA7CiAgICByZXR1cm4gZ2V0QWN0aW9uKGNsaWVudCwgZ2V0TG9ncywgImdldExvZ3MiKSh7CiAgICAgIGFkZHJlc3MsCiAgICAgIGFyZ3MsCiAgICAgIGJsb2NrSGFzaCwKICAgICAgZXZlbnQsCiAgICAgIGV2ZW50cywKICAgICAgZnJvbUJsb2NrLAogICAgICB0b0Jsb2NrLAogICAgICBzdHJpY3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9yZWFkQ29udHJhY3QuanMKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2NhbGwoKTsKICBhc3luYyBmdW5jdGlvbiByZWFkQ29udHJhY3QoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYWRkcmVzcywgYXJncywgZnVuY3Rpb25OYW1lLCAuLi5yZXN0IH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgY2FsbGRhdGEgPSBlbmNvZGVGdW5jdGlvbkRhdGEoewogICAgICBhYmk6IGFiaTIsCiAgICAgIGFyZ3MsCiAgICAgIGZ1bmN0aW9uTmFtZQogICAgfSk7CiAgICB0cnkgewogICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGNhbGwsICJjYWxsIikoewogICAgICAgIC4uLnJlc3QsCiAgICAgICAgZGF0YTogY2FsbGRhdGEsCiAgICAgICAgdG86IGFkZHJlc3MKICAgICAgfSk7CiAgICAgIHJldHVybiBkZWNvZGVGdW5jdGlvblJlc3VsdCh7CiAgICAgICAgYWJpOiBhYmkyLAogICAgICAgIGFyZ3MsCiAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgIGRhdGE6IGRhdGEgfHwgIjB4IgogICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHRocm93IGdldENvbnRyYWN0RXJyb3IoZXJyb3IsIHsKICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3QvcmVhZENvbnRyYWN0IiwKICAgICAgICBmdW5jdGlvbk5hbWUKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3NpbXVsYXRlQ29udHJhY3QuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGluaXRfZGVjb2RlRnVuY3Rpb25SZXN1bHQoKTsKICBpbml0X2VuY29kZUZ1bmN0aW9uRGF0YSgpOwogIGluaXRfY2FsbCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNpbXVsYXRlQ29udHJhY3QoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYWRkcmVzcywgYXJncywgZGF0YVN1ZmZpeCwgZnVuY3Rpb25OYW1lLCAuLi5jYWxsUmVxdWVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGFjY291bnQgPSBjYWxsUmVxdWVzdC5hY2NvdW50ID8gcGFyc2VBY2NvdW50KGNhbGxSZXF1ZXN0LmFjY291bnQpIDogY2xpZW50LmFjY291bnQ7CiAgICBjb25zdCBjYWxsZGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7IGFiaTogYWJpMiwgYXJncywgZnVuY3Rpb25OYW1lIH0pOwogICAgdHJ5IHsKICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBjYWxsLCAiY2FsbCIpKHsKICAgICAgICBiYXRjaDogZmFsc2UsCiAgICAgICAgZGF0YTogYCR7Y2FsbGRhdGF9JHtkYXRhU3VmZml4ID8gZGF0YVN1ZmZpeC5yZXBsYWNlKCIweCIsICIiKSA6ICIifWAsCiAgICAgICAgdG86IGFkZHJlc3MsCiAgICAgICAgLi4uY2FsbFJlcXVlc3QsCiAgICAgICAgYWNjb3VudAogICAgICB9KTsKICAgICAgY29uc3QgcmVzdWx0ID0gZGVjb2RlRnVuY3Rpb25SZXN1bHQoewogICAgICAgIGFiaTogYWJpMiwKICAgICAgICBhcmdzLAogICAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgICBkYXRhOiBkYXRhIHx8ICIweCIKICAgICAgfSk7CiAgICAgIGNvbnN0IG1pbmltaXplZEFiaSA9IGFiaTIuZmlsdGVyKChhYmlJdGVtKSA9PiAibmFtZSIgaW4gYWJpSXRlbSAmJiBhYmlJdGVtLm5hbWUgPT09IHBhcmFtZXRlcnMuZnVuY3Rpb25OYW1lKTsKICAgICAgcmV0dXJuIHsKICAgICAgICByZXN1bHQsCiAgICAgICAgcmVxdWVzdDogewogICAgICAgICAgYWJpOiBtaW5pbWl6ZWRBYmksCiAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgYXJncywKICAgICAgICAgIGRhdGFTdWZmaXgsCiAgICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgICAuLi5jYWxsUmVxdWVzdCwKICAgICAgICAgIGFjY291bnQKICAgICAgICB9CiAgICAgIH07CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICB0aHJvdyBnZXRDb250cmFjdEVycm9yKGVycm9yLCB7CiAgICAgICAgYWJpOiBhYmkyLAogICAgICAgIGFkZHJlc3MsCiAgICAgICAgYXJncywKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L3NpbXVsYXRlQ29udHJhY3QiLAogICAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgICBzZW5kZXI6IGFjY291bnQ/LmFkZHJlc3MKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3dhdGNoQ29udHJhY3RFdmVudC5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9ycGMoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9vYnNlcnZlLmpzCiAgdmFyIGxpc3RlbmVyc0NhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICB2YXIgY2xlYW51cENhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICB2YXIgY2FsbGJhY2tDb3VudCA9IDA7CiAgZnVuY3Rpb24gb2JzZXJ2ZShvYnNlcnZlcklkLCBjYWxsYmFja3MsIGZuKSB7CiAgICBjb25zdCBjYWxsYmFja0lkID0gKytjYWxsYmFja0NvdW50OwogICAgY29uc3QgZ2V0TGlzdGVuZXJzID0gKCkgPT4gbGlzdGVuZXJzQ2FjaGUuZ2V0KG9ic2VydmVySWQpIHx8IFtdOwogICAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGxpc3RlbmVyczIgPSBnZXRMaXN0ZW5lcnMoKTsKICAgICAgbGlzdGVuZXJzQ2FjaGUuc2V0KG9ic2VydmVySWQsIGxpc3RlbmVyczIuZmlsdGVyKChjYikgPT4gY2IuaWQgIT09IGNhbGxiYWNrSWQpKTsKICAgIH07CiAgICBjb25zdCB1bndhdGNoID0gKCkgPT4gewogICAgICBjb25zdCBjbGVhbnVwMiA9IGNsZWFudXBDYWNoZS5nZXQob2JzZXJ2ZXJJZCk7CiAgICAgIGlmIChnZXRMaXN0ZW5lcnMoKS5sZW5ndGggPT09IDEgJiYgY2xlYW51cDIpCiAgICAgICAgY2xlYW51cDIoKTsKICAgICAgdW5zdWJzY3JpYmUoKTsKICAgIH07CiAgICBjb25zdCBsaXN0ZW5lcnMgPSBnZXRMaXN0ZW5lcnMoKTsKICAgIGxpc3RlbmVyc0NhY2hlLnNldChvYnNlcnZlcklkLCBbCiAgICAgIC4uLmxpc3RlbmVycywKICAgICAgeyBpZDogY2FsbGJhY2tJZCwgZm5zOiBjYWxsYmFja3MgfQogICAgXSk7CiAgICBpZiAobGlzdGVuZXJzICYmIGxpc3RlbmVycy5sZW5ndGggPiAwKQogICAgICByZXR1cm4gdW53YXRjaDsKICAgIGNvbnN0IGVtaXQgPSB7fTsKICAgIGZvciAoY29uc3Qga2V5IGluIGNhbGxiYWNrcykgewogICAgICBlbWl0W2tleV0gPSAoLi4uYXJncykgPT4gewogICAgICAgIGNvbnN0IGxpc3RlbmVyczIgPSBnZXRMaXN0ZW5lcnMoKTsKICAgICAgICBpZiAobGlzdGVuZXJzMi5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMyKQogICAgICAgICAgbGlzdGVuZXIuZm5zW2tleV0/LiguLi5hcmdzKTsKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IGNsZWFudXAgPSBmbihlbWl0KTsKICAgIGlmICh0eXBlb2YgY2xlYW51cCA9PT0gImZ1bmN0aW9uIikKICAgICAgY2xlYW51cENhY2hlLnNldChvYnNlcnZlcklkLCBjbGVhbnVwKTsKICAgIHJldHVybiB1bndhdGNoOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy93YWl0LmpzCiAgYXN5bmMgZnVuY3Rpb24gd2FpdCh0aW1lKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcykgPT4gc2V0VGltZW91dChyZXMsIHRpbWUpKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcG9sbC5qcwogIGZ1bmN0aW9uIHBvbGwoZm4sIHsgZW1pdE9uQmVnaW4sIGluaXRpYWxXYWl0VGltZSwgaW50ZXJ2YWwgfSkgewogICAgbGV0IGFjdGl2ZSA9IHRydWU7CiAgICBjb25zdCB1bndhdGNoID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICBjb25zdCB3YXRjaCA9IGFzeW5jICgpID0+IHsKICAgICAgbGV0IGRhdGEgPSB2b2lkIDA7CiAgICAgIGlmIChlbWl0T25CZWdpbikKICAgICAgICBkYXRhID0gYXdhaXQgZm4oeyB1bnBvbGw6IHVud2F0Y2ggfSk7CiAgICAgIGNvbnN0IGluaXRpYWxXYWl0ID0gYXdhaXQgaW5pdGlhbFdhaXRUaW1lPy4oZGF0YSkgPz8gaW50ZXJ2YWw7CiAgICAgIGF3YWl0IHdhaXQoaW5pdGlhbFdhaXQpOwogICAgICBjb25zdCBwb2xsMiA9IGFzeW5jICgpID0+IHsKICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBhd2FpdCBmbih7IHVucG9sbDogdW53YXRjaCB9KTsKICAgICAgICBhd2FpdCB3YWl0KGludGVydmFsKTsKICAgICAgICBwb2xsMigpOwogICAgICB9OwogICAgICBwb2xsMigpOwogICAgfTsKICAgIHdhdGNoKCk7CiAgICByZXR1cm4gdW53YXRjaDsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvd2F0Y2hDb250cmFjdEV2ZW50LmpzCiAgaW5pdF9zdHJpbmdpZnkoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9wcm9taXNlL3dpdGhDYWNoZS5qcwogIHZhciBwcm9taXNlQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIHZhciByZXNwb25zZUNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBmdW5jdGlvbiBnZXRDYWNoZShjYWNoZUtleTIpIHsKICAgIGNvbnN0IGJ1aWxkQ2FjaGUgPSAoY2FjaGVLZXkzLCBjYWNoZSkgPT4gKHsKICAgICAgY2xlYXI6ICgpID0+IGNhY2hlLmRlbGV0ZShjYWNoZUtleTMpLAogICAgICBnZXQ6ICgpID0+IGNhY2hlLmdldChjYWNoZUtleTMpLAogICAgICBzZXQ6IChkYXRhKSA9PiBjYWNoZS5zZXQoY2FjaGVLZXkzLCBkYXRhKQogICAgfSk7CiAgICBjb25zdCBwcm9taXNlID0gYnVpbGRDYWNoZShjYWNoZUtleTIsIHByb21pc2VDYWNoZSk7CiAgICBjb25zdCByZXNwb25zZSA9IGJ1aWxkQ2FjaGUoY2FjaGVLZXkyLCByZXNwb25zZUNhY2hlKTsKICAgIHJldHVybiB7CiAgICAgIGNsZWFyOiAoKSA9PiB7CiAgICAgICAgcHJvbWlzZS5jbGVhcigpOwogICAgICAgIHJlc3BvbnNlLmNsZWFyKCk7CiAgICAgIH0sCiAgICAgIHByb21pc2UsCiAgICAgIHJlc3BvbnNlCiAgICB9OwogIH0KICBhc3luYyBmdW5jdGlvbiB3aXRoQ2FjaGUoZm4sIHsgY2FjaGVLZXk6IGNhY2hlS2V5MiwgY2FjaGVUaW1lID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIH0pIHsKICAgIGNvbnN0IGNhY2hlID0gZ2V0Q2FjaGUoY2FjaGVLZXkyKTsKICAgIGNvbnN0IHJlc3BvbnNlID0gY2FjaGUucmVzcG9uc2UuZ2V0KCk7CiAgICBpZiAocmVzcG9uc2UgJiYgY2FjaGVUaW1lID4gMCkgewogICAgICBjb25zdCBhZ2UgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIHJlc3BvbnNlLmNyZWF0ZWQuZ2V0VGltZSgpOwogICAgICBpZiAoYWdlIDwgY2FjaGVUaW1lKQogICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhOwogICAgfQogICAgbGV0IHByb21pc2UgPSBjYWNoZS5wcm9taXNlLmdldCgpOwogICAgaWYgKCFwcm9taXNlKSB7CiAgICAgIHByb21pc2UgPSBmbigpOwogICAgICBjYWNoZS5wcm9taXNlLnNldChwcm9taXNlKTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwcm9taXNlOwogICAgICBjYWNoZS5yZXNwb25zZS5zZXQoeyBjcmVhdGVkOiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgZGF0YSB9KTsKICAgICAgcmV0dXJuIGRhdGE7CiAgICB9IGZpbmFsbHkgewogICAgICBjYWNoZS5wcm9taXNlLmNsZWFyKCk7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEJsb2NrTnVtYmVyLmpzCiAgdmFyIGNhY2hlS2V5ID0gKGlkKSA9PiBgYmxvY2tOdW1iZXIuJHtpZH1gOwogIGFzeW5jIGZ1bmN0aW9uIGdldEJsb2NrTnVtYmVyKGNsaWVudCwgeyBjYWNoZVRpbWUgPSBjbGllbnQuY2FjaGVUaW1lIH0gPSB7fSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBhd2FpdCB3aXRoQ2FjaGUoKCkgPT4gY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfYmxvY2tOdW1iZXIiCiAgICB9KSwgeyBjYWNoZUtleTogY2FjaGVLZXkoY2xpZW50LnVpZCksIGNhY2hlVGltZSB9KTsKICAgIHJldHVybiBCaWdJbnQoYmxvY2tOdW1iZXJIZXgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRGaWx0ZXJDaGFuZ2VzLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0RmlsdGVyQ2hhbmdlcyhfY2xpZW50LCB7IGZpbHRlciB9KSB7CiAgICBjb25zdCBzdHJpY3QgPSAic3RyaWN0IiBpbiBmaWx0ZXIgJiYgZmlsdGVyLnN0cmljdDsKICAgIGNvbnN0IGxvZ3MgPSBhd2FpdCBmaWx0ZXIucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRGaWx0ZXJDaGFuZ2VzIiwKICAgICAgcGFyYW1zOiBbZmlsdGVyLmlkXQogICAgfSk7CiAgICBpZiAodHlwZW9mIGxvZ3NbMF0gPT09ICJzdHJpbmciKQogICAgICByZXR1cm4gbG9nczsKICAgIGNvbnN0IGZvcm1hdHRlZExvZ3MgPSBsb2dzLm1hcCgobG9nKSA9PiBmb3JtYXRMb2cobG9nKSk7CiAgICBpZiAoISgiYWJpIiBpbiBmaWx0ZXIpIHx8ICFmaWx0ZXIuYWJpKQogICAgICByZXR1cm4gZm9ybWF0dGVkTG9nczsKICAgIHJldHVybiBwYXJzZUV2ZW50TG9ncyh7CiAgICAgIGFiaTogZmlsdGVyLmFiaSwKICAgICAgbG9nczogZm9ybWF0dGVkTG9ncywKICAgICAgc3RyaWN0CiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvdW5pbnN0YWxsRmlsdGVyLmpzCiAgYXN5bmMgZnVuY3Rpb24gdW5pbnN0YWxsRmlsdGVyKF9jbGllbnQsIHsgZmlsdGVyIH0pIHsKICAgIHJldHVybiBmaWx0ZXIucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF91bmluc3RhbGxGaWx0ZXIiLAogICAgICBwYXJhbXM6IFtmaWx0ZXIuaWRdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvd2F0Y2hDb250cmFjdEV2ZW50LmpzCiAgZnVuY3Rpb24gd2F0Y2hDb250cmFjdEV2ZW50KGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGJhdGNoID0gdHJ1ZSwgZXZlbnROYW1lLCBmcm9tQmxvY2ssIG9uRXJyb3IsIG9uTG9ncywgcG9sbDogcG9sbF8sIHBvbGxpbmdJbnRlcnZhbCA9IGNsaWVudC5wb2xsaW5nSW50ZXJ2YWwsIHN0cmljdDogc3RyaWN0XyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGVuYWJsZVBvbGxpbmcgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIHBvbGxfICE9PSAidW5kZWZpbmVkIikKICAgICAgICByZXR1cm4gcG9sbF87CiAgICAgIGlmICh0eXBlb2YgZnJvbUJsb2NrID09PSAiYmlnaW50IikKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAiZmFsbGJhY2siICYmIGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0c1swXS5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pKCk7CiAgICBjb25zdCBwb2xsQ29udHJhY3RFdmVudCA9ICgpID0+IHsKICAgICAgY29uc3Qgc3RyaWN0ID0gc3RyaWN0XyA/PyBmYWxzZTsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoQ29udHJhY3RFdmVudCIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGJhdGNoLAogICAgICAgIGNsaWVudC51aWQsCiAgICAgICAgZXZlbnROYW1lLAogICAgICAgIHBvbGxpbmdJbnRlcnZhbCwKICAgICAgICBzdHJpY3QsCiAgICAgICAgZnJvbUJsb2NrCiAgICAgIF0pOwogICAgICByZXR1cm4gb2JzZXJ2ZShvYnNlcnZlcklkLCB7IG9uTG9ncywgb25FcnJvciB9LCAoZW1pdCkgPT4gewogICAgICAgIGxldCBwcmV2aW91c0Jsb2NrTnVtYmVyOwogICAgICAgIGlmIChmcm9tQmxvY2sgIT09IHZvaWQgMCkKICAgICAgICAgIHByZXZpb3VzQmxvY2tOdW1iZXIgPSBmcm9tQmxvY2sgLSAxbjsKICAgICAgICBsZXQgZmlsdGVyOwogICAgICAgIGxldCBpbml0aWFsaXplZCA9IGZhbHNlOwogICAgICAgIGNvbnN0IHVud2F0Y2ggPSBwb2xsKGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBmaWx0ZXIgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyLCAiY3JlYXRlQ29udHJhY3RFdmVudEZpbHRlciIpKHsKICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgZXZlbnROYW1lLAogICAgICAgICAgICAgICAgc3RyaWN0LAogICAgICAgICAgICAgICAgZnJvbUJsb2NrCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICB9CiAgICAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbGV0IGxvZ3M7CiAgICAgICAgICAgIGlmIChmaWx0ZXIpIHsKICAgICAgICAgICAgICBsb2dzID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0RmlsdGVyQ2hhbmdlcywgImdldEZpbHRlckNoYW5nZXMiKSh7IGZpbHRlciB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjb25zdCBibG9ja051bWJlciA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrTnVtYmVyLCAiZ2V0QmxvY2tOdW1iZXIiKSh7fSk7CiAgICAgICAgICAgICAgaWYgKHByZXZpb3VzQmxvY2tOdW1iZXIgJiYgcHJldmlvdXNCbG9ja051bWJlciA8IGJsb2NrTnVtYmVyKSB7CiAgICAgICAgICAgICAgICBsb2dzID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0Q29udHJhY3RFdmVudHMsICJnZXRDb250cmFjdEV2ZW50cyIpKHsKICAgICAgICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgICBldmVudE5hbWUsCiAgICAgICAgICAgICAgICAgIGZyb21CbG9jazogcHJldmlvdXNCbG9ja051bWJlciArIDFuLAogICAgICAgICAgICAgICAgICB0b0Jsb2NrOiBibG9ja051bWJlciwKICAgICAgICAgICAgICAgICAgc3RyaWN0CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbG9ncyA9IFtdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBwcmV2aW91c0Jsb2NrTnVtYmVyID0gYmxvY2tOdW1iZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGxvZ3MubGVuZ3RoID09PSAwKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGJhdGNoKQogICAgICAgICAgICAgIGVtaXQub25Mb2dzKGxvZ3MpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgZm9yIChjb25zdCBsb2cgb2YgbG9ncykKICAgICAgICAgICAgICAgIGVtaXQub25Mb2dzKFtsb2ddKTsKICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICBpZiAoZmlsdGVyICYmIGVyciBpbnN0YW5jZW9mIEludmFsaWRJbnB1dFJwY0Vycm9yKQogICAgICAgICAgICAgIGluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgICAgICAgIGVtaXQub25FcnJvcj8uKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgZW1pdE9uQmVnaW46IHRydWUsCiAgICAgICAgICBpbnRlcnZhbDogcG9sbGluZ0ludGVydmFsCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChmaWx0ZXIpCiAgICAgICAgICAgIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHVuaW5zdGFsbEZpbHRlciwgInVuaW5zdGFsbEZpbHRlciIpKHsgZmlsdGVyIH0pOwogICAgICAgICAgdW53YXRjaCgpOwogICAgICAgIH07CiAgICAgIH0pOwogICAgfTsKICAgIGNvbnN0IHN1YnNjcmliZUNvbnRyYWN0RXZlbnQgPSAoKSA9PiB7CiAgICAgIGNvbnN0IHN0cmljdCA9IHN0cmljdF8gPz8gZmFsc2U7CiAgICAgIGNvbnN0IG9ic2VydmVySWQgPSBzdHJpbmdpZnkoWwogICAgICAgICJ3YXRjaENvbnRyYWN0RXZlbnQiLAogICAgICAgIGFkZHJlc3MsCiAgICAgICAgYXJncywKICAgICAgICBiYXRjaCwKICAgICAgICBjbGllbnQudWlkLAogICAgICAgIGV2ZW50TmFtZSwKICAgICAgICBwb2xsaW5nSW50ZXJ2YWwsCiAgICAgICAgc3RyaWN0CiAgICAgIF0pOwogICAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgICAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICAgIHJldHVybiBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25Mb2dzLCBvbkVycm9yIH0sIChlbWl0KSA9PiB7CiAgICAgICAgOwogICAgICAgIChhc3luYyAoKSA9PiB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCB0cmFuc3BvcnQgPSAoKCkgPT4gewogICAgICAgICAgICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIpIHsKICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydDIgPSBjbGllbnQudHJhbnNwb3J0LnRyYW5zcG9ydHMuZmluZCgodHJhbnNwb3J0MykgPT4gdHJhbnNwb3J0My5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpOwogICAgICAgICAgICAgICAgaWYgKCF0cmFuc3BvcnQyKQogICAgICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc3BvcnQyLnZhbHVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAgY29uc3QgdG9waWNzID0gZXZlbnROYW1lID8gZW5jb2RlRXZlbnRUb3BpY3MoewogICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICBldmVudE5hbWUsCiAgICAgICAgICAgICAgYXJncwogICAgICAgICAgICB9KSA6IFtdOwogICAgICAgICAgICBjb25zdCB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZV8gfSA9IGF3YWl0IHRyYW5zcG9ydC5zdWJzY3JpYmUoewogICAgICAgICAgICAgIHBhcmFtczogWyJsb2dzIiwgeyBhZGRyZXNzLCB0b3BpY3MgfV0sCiAgICAgICAgICAgICAgb25EYXRhKGRhdGEpIHsKICAgICAgICAgICAgICAgIGlmICghYWN0aXZlKQogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBjb25zdCBsb2cgPSBkYXRhLnJlc3VsdDsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZXZlbnROYW1lOiBldmVudE5hbWUyLCBhcmdzOiBhcmdzMiB9ID0gZGVjb2RlRXZlbnRMb2coewogICAgICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgICAgICBkYXRhOiBsb2cuZGF0YSwKICAgICAgICAgICAgICAgICAgICB0b3BpY3M6IGxvZy50b3BpY3MsCiAgICAgICAgICAgICAgICAgICAgc3RyaWN0OiBzdHJpY3RfCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2cobG9nLCB7CiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJnczIsCiAgICAgICAgICAgICAgICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUyCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBlbWl0Lm9uTG9ncyhbZm9ybWF0dGVkXSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICAgICAgbGV0IGV2ZW50TmFtZTI7CiAgICAgICAgICAgICAgICAgIGxldCBpc1VubmFtZWQ7CiAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBEZWNvZGVMb2dEYXRhTWlzbWF0Y2ggfHwgZXJyIGluc3RhbmNlb2YgRGVjb2RlTG9nVG9waWNzTWlzbWF0Y2gpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaWN0XykKICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBldmVudE5hbWUyID0gZXJyLmFiaUl0ZW0ubmFtZTsKICAgICAgICAgICAgICAgICAgICBpc1VubmFtZWQgPSBlcnIuYWJpSXRlbS5pbnB1dHM/LnNvbWUoKHgpID0+ICEoIm5hbWUiIGluIHggJiYgeC5uYW1lKSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TG9nKGxvZywgewogICAgICAgICAgICAgICAgICAgIGFyZ3M6IGlzVW5uYW1lZCA/IFtdIDoge30sCiAgICAgICAgICAgICAgICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUyCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBlbWl0Lm9uTG9ncyhbZm9ybWF0dGVkXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBvbkVycm9yKGVycm9yKSB7CiAgICAgICAgICAgICAgICBlbWl0Lm9uRXJyb3I/LihlcnJvcik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZV87CiAgICAgICAgICAgIGlmICghYWN0aXZlKQogICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgb25FcnJvcj8uKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gKCkgPT4gdW5zdWJzY3JpYmUoKTsKICAgICAgfSk7CiAgICB9OwogICAgcmV0dXJuIGVuYWJsZVBvbGxpbmcgPyBwb2xsQ29udHJhY3RFdmVudCgpIDogc3Vic2NyaWJlQ29udHJhY3RFdmVudCgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC93cml0ZUNvbnRyYWN0LmpzCiAgaW5pdF9wYXJzZUFjY291bnQoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9lcnJvcnMvYWNjb3VudC5qcwogIGluaXRfYmFzZSgpOwogIHZhciBBY2NvdW50Tm90Rm91bmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDkgfSA9IHt9KSB7CiAgICAgIHN1cGVyKFsKICAgICAgICAiQ291bGQgbm90IGZpbmQgYW4gQWNjb3VudCB0byBleGVjdXRlIHdpdGggdGhpcyBBY3Rpb24uIiwKICAgICAgICAiUGxlYXNlIHByb3ZpZGUgYW4gQWNjb3VudCB3aXRoIHRoZSBgYWNjb3VudGAgYXJndW1lbnQgb24gdGhlIEFjdGlvbiwgb3IgYnkgc3VwcGx5aW5nIGFuIGBhY2NvdW50YCB0byB0aGUgQ2xpZW50LiIKICAgICAgXS5qb2luKCJcbiIpLCB7CiAgICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgICBkb2NzU2x1ZzogImFjY291bnQiLAogICAgICAgIG5hbWU6ICJBY2NvdW50Tm90Rm91bmRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKICB2YXIgQWNjb3VudFR5cGVOb3RTdXBwb3J0ZWRFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGRvY3NQYXRoOiBkb2NzUGF0aDksIG1ldGFNZXNzYWdlcywgdHlwZSB9KSB7CiAgICAgIHN1cGVyKGBBY2NvdW50IHR5cGUgIiR7dHlwZX0iIGlzIG5vdCBzdXBwb3J0ZWQuYCwgewogICAgICAgIGRvY3NQYXRoOiBkb2NzUGF0aDksCiAgICAgICAgbWV0YU1lc3NhZ2VzLAogICAgICAgIG5hbWU6ICJBY2NvdW50VHlwZU5vdFN1cHBvcnRlZEVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3dyaXRlQ29udHJhY3QuanMKICBpbml0X2VuY29kZUZ1bmN0aW9uRGF0YSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NlbmRUcmFuc2FjdGlvbi5qcwogIGluaXRfcGFyc2VBY2NvdW50KCk7CiAgaW5pdF9iYXNlKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY2hhaW4vYXNzZXJ0Q3VycmVudENoYWluLmpzCiAgaW5pdF9jaGFpbigpOwogIGZ1bmN0aW9uIGFzc2VydEN1cnJlbnRDaGFpbih7IGNoYWluLCBjdXJyZW50Q2hhaW5JZCB9KSB7CiAgICBpZiAoIWNoYWluKQogICAgICB0aHJvdyBuZXcgQ2hhaW5Ob3RGb3VuZEVycm9yKCk7CiAgICBpZiAoY3VycmVudENoYWluSWQgIT09IGNoYWluLmlkKQogICAgICB0aHJvdyBuZXcgQ2hhaW5NaXNtYXRjaEVycm9yKHsgY2hhaW4sIGN1cnJlbnRDaGFpbklkIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lcnJvcnMvZ2V0VHJhbnNhY3Rpb25FcnJvci5qcwogIGluaXRfbm9kZSgpOwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBpbml0X2dldE5vZGVFcnJvcigpOwogIGZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uRXJyb3IoZXJyLCB7IGRvY3NQYXRoOiBkb2NzUGF0aDksIC4uLmFyZ3MgfSkgewogICAgY29uc3QgY2F1c2UgPSAoKCkgPT4gewogICAgICBjb25zdCBjYXVzZTIgPSBnZXROb2RlRXJyb3IoZXJyLCBhcmdzKTsKICAgICAgaWYgKGNhdXNlMiBpbnN0YW5jZW9mIFVua25vd25Ob2RlRXJyb3IpCiAgICAgICAgcmV0dXJuIGVycjsKICAgICAgcmV0dXJuIGNhdXNlMjsKICAgIH0pKCk7CiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uRXhlY3V0aW9uRXJyb3IoY2F1c2UsIHsKICAgICAgZG9jc1BhdGg6IGRvY3NQYXRoOSwKICAgICAgLi4uYXJncwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NlbmRUcmFuc2FjdGlvbi5qcwogIGluaXRfZXh0cmFjdCgpOwogIGluaXRfdHJhbnNhY3Rpb25SZXF1ZXN0KCk7CiAgaW5pdF9hc3NlcnRSZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvc2VuZFJhd1RyYW5zYWN0aW9uLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2VuZFJhd1RyYW5zYWN0aW9uKGNsaWVudCwgeyBzZXJpYWxpemVkVHJhbnNhY3Rpb24gfSkgewogICAgcmV0dXJuIGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX3NlbmRSYXdUcmFuc2FjdGlvbiIsCiAgICAgIHBhcmFtczogW3NlcmlhbGl6ZWRUcmFuc2FjdGlvbl0KICAgIH0sIHsgcmV0cnlDb3VudDogMCB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvc2VuZFRyYW5zYWN0aW9uLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2VuZFRyYW5zYWN0aW9uKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhY2NvdW50OiBhY2NvdW50XyA9IGNsaWVudC5hY2NvdW50LCBjaGFpbiA9IGNsaWVudC5jaGFpbiwgYWNjZXNzTGlzdCwgYXV0aG9yaXphdGlvbkxpc3QsIGJsb2JzLCBkYXRhLCBnYXMsIGdhc1ByaWNlLCBtYXhGZWVQZXJCbG9iR2FzLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBub25jZSwgdmFsdWUsIC4uLnJlc3QgfSA9IHBhcmFtZXRlcnM7CiAgICBpZiAoIWFjY291bnRfKQogICAgICB0aHJvdyBuZXcgQWNjb3VudE5vdEZvdW5kRXJyb3IoewogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvYWN0aW9ucy93YWxsZXQvc2VuZFRyYW5zYWN0aW9uIgogICAgICB9KTsKICAgIGNvbnN0IGFjY291bnQgPSBwYXJzZUFjY291bnQoYWNjb3VudF8pOwogICAgdHJ5IHsKICAgICAgYXNzZXJ0UmVxdWVzdChwYXJhbWV0ZXJzKTsKICAgICAgY29uc3QgdG8gPSBhd2FpdCAoYXN5bmMgKCkgPT4gewogICAgICAgIGlmIChwYXJhbWV0ZXJzLnRvKQogICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnMudG87CiAgICAgICAgaWYgKGF1dGhvcml6YXRpb25MaXN0ICYmIGF1dGhvcml6YXRpb25MaXN0Lmxlbmd0aCA+IDApCiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVjb3ZlckF1dGhvcml6YXRpb25BZGRyZXNzKHsKICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvbkxpc3RbMF0KICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoImB0b2AgaXMgcmVxdWlyZWQuIENvdWxkIG5vdCBpbmZlciBmcm9tIGBhdXRob3JpemF0aW9uTGlzdGAuIik7CiAgICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9KSgpOwogICAgICBpZiAoYWNjb3VudC50eXBlID09PSAianNvbi1ycGMiKSB7CiAgICAgICAgbGV0IGNoYWluSWQ7CiAgICAgICAgaWYgKGNoYWluICE9PSBudWxsKSB7CiAgICAgICAgICBjaGFpbklkID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0Q2hhaW5JZCwgImdldENoYWluSWQiKSh7fSk7CiAgICAgICAgICBhc3NlcnRDdXJyZW50Q2hhaW4oewogICAgICAgICAgICBjdXJyZW50Q2hhaW5JZDogY2hhaW5JZCwKICAgICAgICAgICAgY2hhaW4KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb25zdCBjaGFpbkZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb25SZXF1ZXN0Py5mb3JtYXQ7CiAgICAgICAgY29uc3QgZm9ybWF0ID0gY2hhaW5Gb3JtYXQgfHwgZm9ybWF0VHJhbnNhY3Rpb25SZXF1ZXN0OwogICAgICAgIGNvbnN0IHJlcXVlc3QgPSBmb3JtYXQoewogICAgICAgICAgLy8gUGljayBvdXQgZXh0cmEgZGF0YSB0aGF0IG1pZ2h0IGV4aXN0IG9uIHRoZSBjaGFpbidzIHRyYW5zYWN0aW9uIHJlcXVlc3QgdHlwZS4KICAgICAgICAgIC4uLmV4dHJhY3QocmVzdCwgeyBmb3JtYXQ6IGNoYWluRm9ybWF0IH0pLAogICAgICAgICAgYWNjZXNzTGlzdCwKICAgICAgICAgIGF1dGhvcml6YXRpb25MaXN0LAogICAgICAgICAgYmxvYnMsCiAgICAgICAgICBjaGFpbklkLAogICAgICAgICAgZGF0YSwKICAgICAgICAgIGZyb206IGFjY291bnQuYWRkcmVzcywKICAgICAgICAgIGdhcywKICAgICAgICAgIGdhc1ByaWNlLAogICAgICAgICAgbWF4RmVlUGVyQmxvYkdhcywKICAgICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICB0bywKICAgICAgICAgIHZhbHVlCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICAgIG1ldGhvZDogImV0aF9zZW5kVHJhbnNhY3Rpb24iLAogICAgICAgICAgcGFyYW1zOiBbcmVxdWVzdF0KICAgICAgICB9LCB7IHJldHJ5Q291bnQ6IDAgfSk7CiAgICAgIH0KICAgICAgaWYgKGFjY291bnQudHlwZSA9PT0gImxvY2FsIikgewogICAgICAgIGNvbnN0IHJlcXVlc3QgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBwcmVwYXJlVHJhbnNhY3Rpb25SZXF1ZXN0LCAicHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdCIpKHsKICAgICAgICAgIGFjY291bnQsCiAgICAgICAgICBhY2Nlc3NMaXN0LAogICAgICAgICAgYXV0aG9yaXphdGlvbkxpc3QsCiAgICAgICAgICBibG9icywKICAgICAgICAgIGNoYWluLAogICAgICAgICAgZGF0YSwKICAgICAgICAgIGdhcywKICAgICAgICAgIGdhc1ByaWNlLAogICAgICAgICAgbWF4RmVlUGVyQmxvYkdhcywKICAgICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICBwYXJhbWV0ZXJzOiBbLi4uZGVmYXVsdFBhcmFtZXRlcnMsICJzaWRlY2FycyJdLAogICAgICAgICAgdmFsdWUsCiAgICAgICAgICAuLi5yZXN0LAogICAgICAgICAgdG8KICAgICAgICB9KTsKICAgICAgICBjb25zdCBzZXJpYWxpemVyID0gY2hhaW4/LnNlcmlhbGl6ZXJzPy50cmFuc2FjdGlvbjsKICAgICAgICBjb25zdCBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBhd2FpdCBhY2NvdW50LnNpZ25UcmFuc2FjdGlvbihyZXF1ZXN0LCB7CiAgICAgICAgICBzZXJpYWxpemVyCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHNlbmRSYXdUcmFuc2FjdGlvbiwgInNlbmRSYXdUcmFuc2FjdGlvbiIpKHsKICAgICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbgogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChhY2NvdW50LnR5cGUgPT09ICJzbWFydCIpCiAgICAgICAgdGhyb3cgbmV3IEFjY291bnRUeXBlTm90U3VwcG9ydGVkRXJyb3IoewogICAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAgICJDb25zaWRlciB1c2luZyB0aGUgYHNlbmRVc2VyT3BlcmF0aW9uYCBBY3Rpb24gaW5zdGVhZC4iCiAgICAgICAgICBdLAogICAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9hY3Rpb25zL2J1bmRsZXIvc2VuZFVzZXJPcGVyYXRpb24iLAogICAgICAgICAgdHlwZTogInNtYXJ0IgogICAgICAgIH0pOwogICAgICB0aHJvdyBuZXcgQWNjb3VudFR5cGVOb3RTdXBwb3J0ZWRFcnJvcih7CiAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9hY3Rpb25zL3dhbGxldC9zZW5kVHJhbnNhY3Rpb24iLAogICAgICAgIHR5cGU6IGFjY291bnQudHlwZQogICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBpZiAoZXJyIGluc3RhbmNlb2YgQWNjb3VudFR5cGVOb3RTdXBwb3J0ZWRFcnJvcikKICAgICAgICB0aHJvdyBlcnI7CiAgICAgIHRocm93IGdldFRyYW5zYWN0aW9uRXJyb3IoZXJyLCB7CiAgICAgICAgLi4ucGFyYW1ldGVycywKICAgICAgICBhY2NvdW50LAogICAgICAgIGNoYWluOiBwYXJhbWV0ZXJzLmNoYWluIHx8IHZvaWQgMAogICAgICB9KTsKICAgIH0KICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvd3JpdGVDb250cmFjdC5qcwogIGFzeW5jIGZ1bmN0aW9uIHdyaXRlQ29udHJhY3QoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYWNjb3VudDogYWNjb3VudF8gPSBjbGllbnQuYWNjb3VudCwgYWRkcmVzcywgYXJncywgZGF0YVN1ZmZpeCwgZnVuY3Rpb25OYW1lLCAuLi5yZXF1ZXN0IH0gPSBwYXJhbWV0ZXJzOwogICAgaWYgKCFhY2NvdW50XykKICAgICAgdGhyb3cgbmV3IEFjY291bnROb3RGb3VuZEVycm9yKHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L3dyaXRlQ29udHJhY3QiCiAgICAgIH0pOwogICAgY29uc3QgYWNjb3VudCA9IHBhcnNlQWNjb3VudChhY2NvdW50Xyk7CiAgICBjb25zdCBkYXRhID0gZW5jb2RlRnVuY3Rpb25EYXRhKHsKICAgICAgYWJpOiBhYmkyLAogICAgICBhcmdzLAogICAgICBmdW5jdGlvbk5hbWUKICAgIH0pOwogICAgdHJ5IHsKICAgICAgcmV0dXJuIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHNlbmRUcmFuc2FjdGlvbiwgInNlbmRUcmFuc2FjdGlvbiIpKHsKICAgICAgICBkYXRhOiBgJHtkYXRhfSR7ZGF0YVN1ZmZpeCA/IGRhdGFTdWZmaXgucmVwbGFjZSgiMHgiLCAiIikgOiAiIn1gLAogICAgICAgIHRvOiBhZGRyZXNzLAogICAgICAgIGFjY291bnQsCiAgICAgICAgLi4ucmVxdWVzdAogICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHRocm93IGdldENvbnRyYWN0RXJyb3IoZXJyb3IsIHsKICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3Qvd3JpdGVDb250cmFjdCIsCiAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgIHNlbmRlcjogYWNjb3VudC5hZGRyZXNzCiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2dldENvbnRyYWN0LmpzCiAgZnVuY3Rpb24gZ2V0Q29udHJhY3QoeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGNsaWVudDogY2xpZW50XyB9KSB7CiAgICBjb25zdCBjbGllbnQgPSBjbGllbnRfOwogICAgY29uc3QgW3B1YmxpY0NsaWVudCwgd2FsbGV0Q2xpZW50XSA9ICgoKSA9PiB7CiAgICAgIGlmICghY2xpZW50KQogICAgICAgIHJldHVybiBbdm9pZCAwLCB2b2lkIDBdOwogICAgICBpZiAoInB1YmxpYyIgaW4gY2xpZW50ICYmICJ3YWxsZXQiIGluIGNsaWVudCkKICAgICAgICByZXR1cm4gW2NsaWVudC5wdWJsaWMsIGNsaWVudC53YWxsZXRdOwogICAgICBpZiAoInB1YmxpYyIgaW4gY2xpZW50KQogICAgICAgIHJldHVybiBbY2xpZW50LnB1YmxpYywgdm9pZCAwXTsKICAgICAgaWYgKCJ3YWxsZXQiIGluIGNsaWVudCkKICAgICAgICByZXR1cm4gW3ZvaWQgMCwgY2xpZW50LndhbGxldF07CiAgICAgIHJldHVybiBbY2xpZW50LCBjbGllbnRdOwogICAgfSkoKTsKICAgIGNvbnN0IGhhc1B1YmxpY0NsaWVudCA9IHB1YmxpY0NsaWVudCAhPT0gdm9pZCAwICYmIHB1YmxpY0NsaWVudCAhPT0gbnVsbDsKICAgIGNvbnN0IGhhc1dhbGxldENsaWVudCA9IHdhbGxldENsaWVudCAhPT0gdm9pZCAwICYmIHdhbGxldENsaWVudCAhPT0gbnVsbDsKICAgIGNvbnN0IGNvbnRyYWN0ID0ge307CiAgICBsZXQgaGFzUmVhZEZ1bmN0aW9uID0gZmFsc2U7CiAgICBsZXQgaGFzV3JpdGVGdW5jdGlvbiA9IGZhbHNlOwogICAgbGV0IGhhc0V2ZW50ID0gZmFsc2U7CiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYWJpMikgewogICAgICBpZiAoaXRlbS50eXBlID09PSAiZnVuY3Rpb24iKQogICAgICAgIGlmIChpdGVtLnN0YXRlTXV0YWJpbGl0eSA9PT0gInZpZXciIHx8IGl0ZW0uc3RhdGVNdXRhYmlsaXR5ID09PSAicHVyZSIpCiAgICAgICAgICBoYXNSZWFkRnVuY3Rpb24gPSB0cnVlOwogICAgICAgIGVsc2UKICAgICAgICAgIGhhc1dyaXRlRnVuY3Rpb24gPSB0cnVlOwogICAgICBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICJldmVudCIpCiAgICAgICAgaGFzRXZlbnQgPSB0cnVlOwogICAgICBpZiAoaGFzUmVhZEZ1bmN0aW9uICYmIGhhc1dyaXRlRnVuY3Rpb24gJiYgaGFzRXZlbnQpCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoaGFzUHVibGljQ2xpZW50KSB7CiAgICAgIGlmIChoYXNSZWFkRnVuY3Rpb24pCiAgICAgICAgY29udHJhY3QucmVhZCA9IG5ldyBQcm94eSh7fSwgewogICAgICAgICAgZ2V0KF8sIGZ1bmN0aW9uTmFtZSkgewogICAgICAgICAgICByZXR1cm4gKC4uLnBhcmFtZXRlcnMpID0+IHsKICAgICAgICAgICAgICBjb25zdCB7IGFyZ3MsIG9wdGlvbnMgfSA9IGdldEZ1bmN0aW9uUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKICAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0aW9uKHB1YmxpY0NsaWVudCwgcmVhZENvbnRyYWN0LCAicmVhZENvbnRyYWN0IikoewogICAgICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICAgICAgYWRkcmVzcywKICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSwKICAgICAgICAgICAgICAgIGFyZ3MsCiAgICAgICAgICAgICAgICAuLi5vcHRpb25zCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIGlmIChoYXNXcml0ZUZ1bmN0aW9uKQogICAgICAgIGNvbnRyYWN0LnNpbXVsYXRlID0gbmV3IFByb3h5KHt9LCB7CiAgICAgICAgICBnZXQoXywgZnVuY3Rpb25OYW1lKSB7CiAgICAgICAgICAgIHJldHVybiAoLi4ucGFyYW1ldGVycykgPT4gewogICAgICAgICAgICAgIGNvbnN0IHsgYXJncywgb3B0aW9ucyB9ID0gZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwogICAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb24ocHVibGljQ2xpZW50LCBzaW11bGF0ZUNvbnRyYWN0LCAic2ltdWxhdGVDb250cmFjdCIpKHsKICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWUsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgLi4ub3B0aW9ucwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICBpZiAoaGFzRXZlbnQpIHsKICAgICAgICBjb250cmFjdC5jcmVhdGVFdmVudEZpbHRlciA9IG5ldyBQcm94eSh7fSwgewogICAgICAgICAgZ2V0KF8sIGV2ZW50TmFtZSkgewogICAgICAgICAgICByZXR1cm4gKC4uLnBhcmFtZXRlcnMpID0+IHsKICAgICAgICAgICAgICBjb25zdCBhYmlFdmVudCA9IGFiaTIuZmluZCgoeCkgPT4geC50eXBlID09PSAiZXZlbnQiICYmIHgubmFtZSA9PT0gZXZlbnROYW1lKTsKICAgICAgICAgICAgICBjb25zdCB7IGFyZ3MsIG9wdGlvbnMgfSA9IGdldEV2ZW50UGFyYW1ldGVycyhwYXJhbWV0ZXJzLCBhYmlFdmVudCk7CiAgICAgICAgICAgICAgcmV0dXJuIGdldEFjdGlvbihwdWJsaWNDbGllbnQsIGNyZWF0ZUNvbnRyYWN0RXZlbnRGaWx0ZXIsICJjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyIikoewogICAgICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICAgICAgYWRkcmVzcywKICAgICAgICAgICAgICAgIGV2ZW50TmFtZSwKICAgICAgICAgICAgICAgIGFyZ3MsCiAgICAgICAgICAgICAgICAuLi5vcHRpb25zCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgY29udHJhY3QuZ2V0RXZlbnRzID0gbmV3IFByb3h5KHt9LCB7CiAgICAgICAgICBnZXQoXywgZXZlbnROYW1lKSB7CiAgICAgICAgICAgIHJldHVybiAoLi4ucGFyYW1ldGVycykgPT4gewogICAgICAgICAgICAgIGNvbnN0IGFiaUV2ZW50ID0gYWJpMi5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICJldmVudCIgJiYgeC5uYW1lID09PSBldmVudE5hbWUpOwogICAgICAgICAgICAgIGNvbnN0IHsgYXJncywgb3B0aW9ucyB9ID0gZ2V0RXZlbnRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMsIGFiaUV2ZW50KTsKICAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0aW9uKHB1YmxpY0NsaWVudCwgZ2V0Q29udHJhY3RFdmVudHMsICJnZXRDb250cmFjdEV2ZW50cyIpKHsKICAgICAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBldmVudE5hbWUsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgLi4ub3B0aW9ucwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGNvbnRyYWN0LndhdGNoRXZlbnQgPSBuZXcgUHJveHkoe30sIHsKICAgICAgICAgIGdldChfLCBldmVudE5hbWUpIHsKICAgICAgICAgICAgcmV0dXJuICguLi5wYXJhbWV0ZXJzKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgYWJpRXZlbnQgPSBhYmkyLmZpbmQoKHgpID0+IHgudHlwZSA9PT0gImV2ZW50IiAmJiB4Lm5hbWUgPT09IGV2ZW50TmFtZSk7CiAgICAgICAgICAgICAgY29uc3QgeyBhcmdzLCBvcHRpb25zIH0gPSBnZXRFdmVudFBhcmFtZXRlcnMocGFyYW1ldGVycywgYWJpRXZlbnQpOwogICAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb24ocHVibGljQ2xpZW50LCB3YXRjaENvbnRyYWN0RXZlbnQsICJ3YXRjaENvbnRyYWN0RXZlbnQiKSh7CiAgICAgICAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgZXZlbnROYW1lLAogICAgICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgaWYgKGhhc1dhbGxldENsaWVudCkgewogICAgICBpZiAoaGFzV3JpdGVGdW5jdGlvbikKICAgICAgICBjb250cmFjdC53cml0ZSA9IG5ldyBQcm94eSh7fSwgewogICAgICAgICAgZ2V0KF8sIGZ1bmN0aW9uTmFtZSkgewogICAgICAgICAgICByZXR1cm4gKC4uLnBhcmFtZXRlcnMpID0+IHsKICAgICAgICAgICAgICBjb25zdCB7IGFyZ3MsIG9wdGlvbnMgfSA9IGdldEZ1bmN0aW9uUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKICAgICAgICAgICAgICByZXR1cm4gZ2V0QWN0aW9uKHdhbGxldENsaWVudCwgd3JpdGVDb250cmFjdCwgIndyaXRlQ29udHJhY3QiKSh7CiAgICAgICAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KICAgIGlmIChoYXNQdWJsaWNDbGllbnQgfHwgaGFzV2FsbGV0Q2xpZW50KSB7CiAgICAgIGlmIChoYXNXcml0ZUZ1bmN0aW9uKQogICAgICAgIGNvbnRyYWN0LmVzdGltYXRlR2FzID0gbmV3IFByb3h5KHt9LCB7CiAgICAgICAgICBnZXQoXywgZnVuY3Rpb25OYW1lKSB7CiAgICAgICAgICAgIHJldHVybiAoLi4ucGFyYW1ldGVycykgPT4gewogICAgICAgICAgICAgIGNvbnN0IHsgYXJncywgb3B0aW9ucyB9ID0gZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwogICAgICAgICAgICAgIGNvbnN0IGNsaWVudDIgPSBwdWJsaWNDbGllbnQgPz8gd2FsbGV0Q2xpZW50OwogICAgICAgICAgICAgIHJldHVybiBnZXRBY3Rpb24oY2xpZW50MiwgZXN0aW1hdGVDb250cmFjdEdhcywgImVzdGltYXRlQ29udHJhY3RHYXMiKSh7CiAgICAgICAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lLAogICAgICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsCiAgICAgICAgICAgICAgICBhY2NvdW50OiBvcHRpb25zLmFjY291bnQgPz8gd2FsbGV0Q2xpZW50LmFjY291bnQKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KICAgIGNvbnRyYWN0LmFkZHJlc3MgPSBhZGRyZXNzOwogICAgY29udHJhY3QuYWJpID0gYWJpMjsKICAgIHJldHVybiBjb250cmFjdDsKICB9CiAgZnVuY3Rpb24gZ2V0RnVuY3Rpb25QYXJhbWV0ZXJzKHZhbHVlcykgewogICAgY29uc3QgaGFzQXJncyA9IHZhbHVlcy5sZW5ndGggJiYgQXJyYXkuaXNBcnJheSh2YWx1ZXNbMF0pOwogICAgY29uc3QgYXJncyA9IGhhc0FyZ3MgPyB2YWx1ZXNbMF0gOiBbXTsKICAgIGNvbnN0IG9wdGlvbnMgPSAoaGFzQXJncyA/IHZhbHVlc1sxXSA6IHZhbHVlc1swXSkgPz8ge307CiAgICByZXR1cm4geyBhcmdzLCBvcHRpb25zIH07CiAgfQogIGZ1bmN0aW9uIGdldEV2ZW50UGFyYW1ldGVycyh2YWx1ZXMsIGFiaUV2ZW50KSB7CiAgICBsZXQgaGFzQXJncyA9IGZhbHNlOwogICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzWzBdKSkKICAgICAgaGFzQXJncyA9IHRydWU7CiAgICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxKSB7CiAgICAgIGhhc0FyZ3MgPSBhYmlFdmVudC5pbnB1dHMuc29tZSgoeCkgPT4geC5pbmRleGVkKTsKICAgIH0gZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMikgewogICAgICBoYXNBcmdzID0gdHJ1ZTsKICAgIH0KICAgIGNvbnN0IGFyZ3MgPSBoYXNBcmdzID8gdmFsdWVzWzBdIDogdm9pZCAwOwogICAgY29uc3Qgb3B0aW9ucyA9IChoYXNBcmdzID8gdmFsdWVzWzFdIDogdmFsdWVzWzBdKSA/PyB7fTsKICAgIHJldHVybiB7IGFyZ3MsIG9wdGlvbnMgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2VpcDcxMi5qcwogIGluaXRfYmFzZSgpOwogIHZhciBFaXA3MTJEb21haW5Ob3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgYWRkcmVzcyB9KSB7CiAgICAgIHN1cGVyKGBObyBFSVAtNzEyIGRvbWFpbiBmb3VuZCBvbiBjb250cmFjdCAiJHthZGRyZXNzfSIuYCwgewogICAgICAgIG1ldGFNZXNzYWdlczogWwogICAgICAgICAgIkVuc3VyZSB0aGF0OiIsCiAgICAgICAgICBgLSBUaGUgY29udHJhY3QgaXMgZGVwbG95ZWQgYXQgdGhlIGFkZHJlc3MgIiR7YWRkcmVzc30iLmAsCiAgICAgICAgICAiLSBgZWlwNzEyRG9tYWluKClgIGZ1bmN0aW9uIGV4aXN0cyBvbiB0aGUgY29udHJhY3QuIiwKICAgICAgICAgICItIGBlaXA3MTJEb21haW4oKWAgZnVuY3Rpb24gbWF0Y2hlcyBzaWduYXR1cmUgdG8gRVJDLTUyNjcgc3BlY2lmaWNhdGlvbi4iCiAgICAgICAgXSwKICAgICAgICBuYW1lOiAiRWlwNzEyRG9tYWluTm90Rm91bmRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRFaXA3MTJEb21haW4uanMKICBhc3luYyBmdW5jdGlvbiBnZXRFaXA3MTJEb21haW4oY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGZhY3RvcnksIGZhY3RvcnlEYXRhIH0gPSBwYXJhbWV0ZXJzOwogICAgdHJ5IHsKICAgICAgY29uc3QgW2ZpZWxkcywgbmFtZSwgdmVyc2lvbjMsIGNoYWluSWQsIHZlcmlmeWluZ0NvbnRyYWN0LCBzYWx0LCBleHRlbnNpb25zXSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHJlYWRDb250cmFjdCwgInJlYWRDb250cmFjdCIpKHsKICAgICAgICBhYmksCiAgICAgICAgYWRkcmVzcywKICAgICAgICBmdW5jdGlvbk5hbWU6ICJlaXA3MTJEb21haW4iLAogICAgICAgIGZhY3RvcnksCiAgICAgICAgZmFjdG9yeURhdGEKICAgICAgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgZG9tYWluOiB7CiAgICAgICAgICBuYW1lLAogICAgICAgICAgdmVyc2lvbjogdmVyc2lvbjMsCiAgICAgICAgICBjaGFpbklkOiBOdW1iZXIoY2hhaW5JZCksCiAgICAgICAgICB2ZXJpZnlpbmdDb250cmFjdCwKICAgICAgICAgIHNhbHQKICAgICAgICB9LAogICAgICAgIGV4dGVuc2lvbnMsCiAgICAgICAgZmllbGRzCiAgICAgIH07CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIGNvbnN0IGVycm9yID0gZTsKICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICJDb250cmFjdEZ1bmN0aW9uRXhlY3V0aW9uRXJyb3IiICYmIGVycm9yLmNhdXNlLm5hbWUgPT09ICJDb250cmFjdEZ1bmN0aW9uWmVyb0RhdGFFcnJvciIpIHsKICAgICAgICB0aHJvdyBuZXcgRWlwNzEyRG9tYWluTm90Rm91bmRFcnJvcih7IGFkZHJlc3MgfSk7CiAgICAgIH0KICAgICAgdGhyb3cgZXJyb3I7CiAgICB9CiAgfQogIHZhciBhYmkgPSBbCiAgICB7CiAgICAgIGlucHV0czogW10sCiAgICAgIG5hbWU6ICJlaXA3MTJEb21haW4iLAogICAgICBvdXRwdXRzOiBbCiAgICAgICAgeyBuYW1lOiAiZmllbGRzIiwgdHlwZTogImJ5dGVzMSIgfSwKICAgICAgICB7IG5hbWU6ICJuYW1lIiwgdHlwZTogInN0cmluZyIgfSwKICAgICAgICB7IG5hbWU6ICJ2ZXJzaW9uIiwgdHlwZTogInN0cmluZyIgfSwKICAgICAgICB7IG5hbWU6ICJjaGFpbklkIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgeyBuYW1lOiAidmVyaWZ5aW5nQ29udHJhY3QiLCB0eXBlOiAiYWRkcmVzcyIgfSwKICAgICAgICB7IG5hbWU6ICJzYWx0IiwgdHlwZTogImJ5dGVzMzIiIH0sCiAgICAgICAgeyBuYW1lOiAiZXh0ZW5zaW9ucyIsIHR5cGU6ICJ1aW50MjU2W10iIH0KICAgICAgXSwKICAgICAgc3RhdGVNdXRhYmlsaXR5OiAidmlldyIsCiAgICAgIHR5cGU6ICJmdW5jdGlvbiIKICAgIH0KICBdOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L2FkZENoYWluLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGFkZENoYWluKGNsaWVudCwgeyBjaGFpbiB9KSB7CiAgICBjb25zdCB7IGlkLCBuYW1lLCBuYXRpdmVDdXJyZW5jeSwgcnBjVXJscywgYmxvY2tFeHBsb3JlcnMgfSA9IGNoYWluOwogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ3YWxsZXRfYWRkRXRoZXJldW1DaGFpbiIsCiAgICAgIHBhcmFtczogWwogICAgICAgIHsKICAgICAgICAgIGNoYWluSWQ6IG51bWJlclRvSGV4KGlkKSwKICAgICAgICAgIGNoYWluTmFtZTogbmFtZSwKICAgICAgICAgIG5hdGl2ZUN1cnJlbmN5LAogICAgICAgICAgcnBjVXJsczogcnBjVXJscy5kZWZhdWx0Lmh0dHAsCiAgICAgICAgICBibG9ja0V4cGxvcmVyVXJsczogYmxvY2tFeHBsb3JlcnMgPyBPYmplY3QudmFsdWVzKGJsb2NrRXhwbG9yZXJzKS5tYXAoKHsgdXJsIH0pID0+IHVybCkgOiB2b2lkIDAKICAgICAgICB9CiAgICAgIF0KICAgIH0sIHsgZGVkdXBlOiB0cnVlLCByZXRyeUNvdW50OiAwIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2NyZWF0ZUNsaWVudC5qcwogIGluaXRfcGFyc2VBY2NvdW50KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdWlkLmpzCiAgdmFyIHNpemUyID0gMjU2OwogIHZhciBpbmRleCA9IHNpemUyOwogIHZhciBidWZmZXI7CiAgZnVuY3Rpb24gdWlkKGxlbmd0aCA9IDExKSB7CiAgICBpZiAoIWJ1ZmZlciB8fCBpbmRleCArIGxlbmd0aCA+IHNpemUyICogMikgewogICAgICBidWZmZXIgPSAiIjsKICAgICAgaW5kZXggPSAwOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemUyOyBpKyspIHsKICAgICAgICBidWZmZXIgKz0gKDI1NiArIE1hdGgucmFuZG9tKCkgKiAyNTYgfCAwKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnN1YnN0cmluZyhpbmRleCwgaW5kZXgrKyArIGxlbmd0aCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvY3JlYXRlQ2xpZW50LmpzCiAgZnVuY3Rpb24gY3JlYXRlQ2xpZW50KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYmF0Y2gsIGNhY2hlVGltZSA9IHBhcmFtZXRlcnMucG9sbGluZ0ludGVydmFsID8/IDRlMywgY2NpcFJlYWQsIGtleSA9ICJiYXNlIiwgbmFtZSA9ICJCYXNlIENsaWVudCIsIHBvbGxpbmdJbnRlcnZhbCA9IDRlMywgdHlwZSA9ICJiYXNlIiB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGNoYWluID0gcGFyYW1ldGVycy5jaGFpbjsKICAgIGNvbnN0IGFjY291bnQgPSBwYXJhbWV0ZXJzLmFjY291bnQgPyBwYXJzZUFjY291bnQocGFyYW1ldGVycy5hY2NvdW50KSA6IHZvaWQgMDsKICAgIGNvbnN0IHsgY29uZmlnLCByZXF1ZXN0LCB2YWx1ZSB9ID0gcGFyYW1ldGVycy50cmFuc3BvcnQoewogICAgICBjaGFpbiwKICAgICAgcG9sbGluZ0ludGVydmFsCiAgICB9KTsKICAgIGNvbnN0IHRyYW5zcG9ydCA9IHsgLi4uY29uZmlnLCAuLi52YWx1ZSB9OwogICAgY29uc3QgY2xpZW50ID0gewogICAgICBhY2NvdW50LAogICAgICBiYXRjaCwKICAgICAgY2FjaGVUaW1lLAogICAgICBjY2lwUmVhZCwKICAgICAgY2hhaW4sCiAgICAgIGtleSwKICAgICAgbmFtZSwKICAgICAgcG9sbGluZ0ludGVydmFsLAogICAgICByZXF1ZXN0LAogICAgICB0cmFuc3BvcnQsCiAgICAgIHR5cGUsCiAgICAgIHVpZDogdWlkKCkKICAgIH07CiAgICBmdW5jdGlvbiBleHRlbmQoYmFzZTIpIHsKICAgICAgcmV0dXJuIChleHRlbmRGbikgPT4gewogICAgICAgIGNvbnN0IGV4dGVuZGVkID0gZXh0ZW5kRm4oYmFzZTIpOwogICAgICAgIGZvciAoY29uc3Qga2V5MiBpbiBjbGllbnQpCiAgICAgICAgICBkZWxldGUgZXh0ZW5kZWRba2V5Ml07CiAgICAgICAgY29uc3QgY29tYmluZWQgPSB7IC4uLmJhc2UyLCAuLi5leHRlbmRlZCB9OwogICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGNvbWJpbmVkLCB7IGV4dGVuZDogZXh0ZW5kKGNvbWJpbmVkKSB9KTsKICAgICAgfTsKICAgIH0KICAgIHJldHVybiBPYmplY3QuYXNzaWduKGNsaWVudCwgeyBleHRlbmQ6IGV4dGVuZChjbGllbnQpIH0pOwogIH0KICBmdW5jdGlvbiBycGNTY2hlbWEoKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYnVpbGRSZXF1ZXN0LmpzCiAgaW5pdF9iYXNlKCk7CiAgaW5pdF9yZXF1ZXN0KCk7CiAgaW5pdF9ycGMoKTsKICBpbml0X3RvSGV4KCk7CiAgaW5pdF9rZWNjYWsyNTYoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9wcm9taXNlL3dpdGhEZWR1cGUuanMKICBpbml0X2xydSgpOwogIHZhciBwcm9taXNlQ2FjaGUyID0gLyogQF9fUFVSRV9fICovIG5ldyBMcnVNYXAoODE5Mik7CiAgZnVuY3Rpb24gd2l0aERlZHVwZShmbiwgeyBlbmFibGVkID0gdHJ1ZSwgaWQgfSkgewogICAgaWYgKCFlbmFibGVkIHx8ICFpZCkKICAgICAgcmV0dXJuIGZuKCk7CiAgICBpZiAocHJvbWlzZUNhY2hlMi5nZXQoaWQpKQogICAgICByZXR1cm4gcHJvbWlzZUNhY2hlMi5nZXQoaWQpOwogICAgY29uc3QgcHJvbWlzZSA9IGZuKCkuZmluYWxseSgoKSA9PiBwcm9taXNlQ2FjaGUyLmRlbGV0ZShpZCkpOwogICAgcHJvbWlzZUNhY2hlMi5zZXQoaWQsIHByb21pc2UpOwogICAgcmV0dXJuIHByb21pc2U7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3Byb21pc2Uvd2l0aFJldHJ5LmpzCiAgZnVuY3Rpb24gd2l0aFJldHJ5KGZuLCB7IGRlbGF5OiBkZWxheV8gPSAxMDAsIHJldHJ5Q291bnQgPSAyLCBzaG91bGRSZXRyeTogc2hvdWxkUmV0cnkyID0gKCkgPT4gdHJ1ZSB9ID0ge30pIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIGNvbnN0IGF0dGVtcHRSZXRyeSA9IGFzeW5jICh7IGNvdW50ID0gMCB9ID0ge30pID0+IHsKICAgICAgICBjb25zdCByZXRyeSA9IGFzeW5jICh7IGVycm9yIH0pID0+IHsKICAgICAgICAgIGNvbnN0IGRlbGF5ID0gdHlwZW9mIGRlbGF5XyA9PT0gImZ1bmN0aW9uIiA/IGRlbGF5Xyh7IGNvdW50LCBlcnJvciB9KSA6IGRlbGF5XzsKICAgICAgICAgIGlmIChkZWxheSkKICAgICAgICAgICAgYXdhaXQgd2FpdChkZWxheSk7CiAgICAgICAgICBhdHRlbXB0UmV0cnkoeyBjb3VudDogY291bnQgKyAxIH0pOwogICAgICAgIH07CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmbigpOwogICAgICAgICAgcmVzb2x2ZShkYXRhKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGlmIChjb3VudCA8IHJldHJ5Q291bnQgJiYgYXdhaXQgc2hvdWxkUmV0cnkyKHsgY291bnQsIGVycm9yOiBlcnIgfSkpCiAgICAgICAgICAgIHJldHVybiByZXRyeSh7IGVycm9yOiBlcnIgfSk7CiAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGF0dGVtcHRSZXRyeSgpOwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2J1aWxkUmVxdWVzdC5qcwogIGluaXRfc3RyaW5naWZ5KCk7CiAgZnVuY3Rpb24gYnVpbGRSZXF1ZXN0KHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkgewogICAgcmV0dXJuIGFzeW5jIChhcmdzLCBvdmVycmlkZU9wdGlvbnMgPSB7fSkgPT4gewogICAgICBjb25zdCB7IGRlZHVwZSA9IGZhbHNlLCByZXRyeURlbGF5ID0gMTUwLCByZXRyeUNvdW50ID0gMywgdWlkOiB1aWQyIH0gPSB7CiAgICAgICAgLi4ub3B0aW9ucywKICAgICAgICAuLi5vdmVycmlkZU9wdGlvbnMKICAgICAgfTsKICAgICAgY29uc3QgcmVxdWVzdElkID0gZGVkdXBlID8ga2VjY2FrMjU2KHN0cmluZ1RvSGV4KGAke3VpZDJ9LiR7c3RyaW5naWZ5KGFyZ3MpfWApKSA6IHZvaWQgMDsKICAgICAgcmV0dXJuIHdpdGhEZWR1cGUoKCkgPT4gd2l0aFJldHJ5KGFzeW5jICgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIGF3YWl0IHJlcXVlc3QoYXJncyk7CiAgICAgICAgfSBjYXRjaCAoZXJyXykgewogICAgICAgICAgY29uc3QgZXJyID0gZXJyXzsKICAgICAgICAgIHN3aXRjaCAoZXJyLmNvZGUpIHsKICAgICAgICAgICAgY2FzZSBQYXJzZVJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlUnBjRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBJbnZhbGlkUmVxdWVzdFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRSZXF1ZXN0UnBjRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBNZXRob2ROb3RGb3VuZFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IE1ldGhvZE5vdEZvdW5kUnBjRXJyb3IoZXJyLCB7IG1ldGhvZDogYXJncy5tZXRob2QgfSk7CiAgICAgICAgICAgIGNhc2UgSW52YWxpZFBhcmFtc1JwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbXNScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIEludGVybmFsUnBjRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIEludmFsaWRJbnB1dFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRJbnB1dFJwY0Vycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgUmVzb3VyY2VOb3RGb3VuZFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlTm90Rm91bmRScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIFJlc291cmNlVW5hdmFpbGFibGVScGNFcnJvci5jb2RlOgogICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZVVuYXZhaWxhYmxlUnBjRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBUcmFuc2FjdGlvblJlamVjdGVkUnBjRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25SZWplY3RlZFJwY0Vycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgTWV0aG9kTm90U3VwcG9ydGVkUnBjRXJyb3IoZXJyLCB7CiAgICAgICAgICAgICAgICBtZXRob2Q6IGFyZ3MubWV0aG9kCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNhc2UgTGltaXRFeGNlZWRlZFJwY0Vycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IExpbWl0RXhjZWVkZWRScGNFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIEpzb25ScGNWZXJzaW9uVW5zdXBwb3J0ZWRFcnJvci5jb2RlOgogICAgICAgICAgICAgIHRocm93IG5ldyBKc29uUnBjVmVyc2lvblVuc3VwcG9ydGVkRXJyb3IoZXJyKTsKICAgICAgICAgICAgY2FzZSBVc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgVXNlclJlamVjdGVkUmVxdWVzdEVycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgVW5hdXRob3JpemVkUHJvdmlkZXJFcnJvci5jb2RlOgogICAgICAgICAgICAgIHRocm93IG5ldyBVbmF1dGhvcml6ZWRQcm92aWRlckVycm9yKGVycik7CiAgICAgICAgICAgIGNhc2UgVW5zdXBwb3J0ZWRQcm92aWRlck1ldGhvZEVycm9yLmNvZGU6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkUHJvdmlkZXJNZXRob2RFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIFByb3ZpZGVyRGlzY29ubmVjdGVkRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgUHJvdmlkZXJEaXNjb25uZWN0ZWRFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIENoYWluRGlzY29ubmVjdGVkRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgQ2hhaW5EaXNjb25uZWN0ZWRFcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIFN3aXRjaENoYWluRXJyb3IuY29kZToKICAgICAgICAgICAgICB0aHJvdyBuZXcgU3dpdGNoQ2hhaW5FcnJvcihlcnIpOwogICAgICAgICAgICBjYXNlIDVlMzoKICAgICAgICAgICAgICB0aHJvdyBuZXcgVXNlclJlamVjdGVkUmVxdWVzdEVycm9yKGVycik7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgaWYgKGVycl8gaW5zdGFuY2VvZiBCYXNlRXJyb3IyKQogICAgICAgICAgICAgICAgdGhyb3cgZXJyXzsKICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5rbm93blJwY0Vycm9yKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAgZGVsYXk6ICh7IGNvdW50LCBlcnJvciB9KSA9PiB7CiAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IgaW5zdGFuY2VvZiBIdHRwUmVxdWVzdEVycm9yKSB7CiAgICAgICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBlcnJvcj8uaGVhZGVycz8uZ2V0KCJSZXRyeS1BZnRlciIpOwogICAgICAgICAgICBpZiAocmV0cnlBZnRlcj8ubWF0Y2goL1xkLykpCiAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5wYXJzZUludChyZXRyeUFmdGVyKSAqIDFlMzsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB+figxIDw8IGNvdW50KSAqIHJldHJ5RGVsYXk7CiAgICAgICAgfSwKICAgICAgICByZXRyeUNvdW50LAogICAgICAgIHNob3VsZFJldHJ5OiAoeyBlcnJvciB9KSA9PiBzaG91bGRSZXRyeShlcnJvcikKICAgICAgfSksIHsgZW5hYmxlZDogZGVkdXBlLCBpZDogcmVxdWVzdElkIH0pOwogICAgfTsKICB9CiAgZnVuY3Rpb24gc2hvdWxkUmV0cnkoZXJyb3IpIHsKICAgIGlmICgiY29kZSIgaW4gZXJyb3IgJiYgdHlwZW9mIGVycm9yLmNvZGUgPT09ICJudW1iZXIiKSB7CiAgICAgIGlmIChlcnJvci5jb2RlID09PSAtMSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGVycm9yLmNvZGUgPT09IExpbWl0RXhjZWVkZWRScGNFcnJvci5jb2RlKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoZXJyb3IuY29kZSA9PT0gSW50ZXJuYWxScGNFcnJvci5jb2RlKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwUmVxdWVzdEVycm9yICYmIGVycm9yLnN0YXR1cykgewogICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDMpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwOCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDEzKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MjkpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDUwMCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAyKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA1MDMpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDUwNCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvdHJhbnNwb3J0cy9jcmVhdGVUcmFuc3BvcnQuanMKICBmdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnQoeyBrZXksIG5hbWUsIHJlcXVlc3QsIHJldHJ5Q291bnQgPSAzLCByZXRyeURlbGF5ID0gMTUwLCB0aW1lb3V0LCB0eXBlIH0sIHZhbHVlKSB7CiAgICBjb25zdCB1aWQyID0gdWlkKCk7CiAgICByZXR1cm4gewogICAgICBjb25maWc6IHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICByZXF1ZXN0LAogICAgICAgIHJldHJ5Q291bnQsCiAgICAgICAgcmV0cnlEZWxheSwKICAgICAgICB0aW1lb3V0LAogICAgICAgIHR5cGUKICAgICAgfSwKICAgICAgcmVxdWVzdDogYnVpbGRSZXF1ZXN0KHJlcXVlc3QsIHsgcmV0cnlDb3VudCwgcmV0cnlEZWxheSwgdWlkOiB1aWQyIH0pLAogICAgICB2YWx1ZQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2xpZW50cy90cmFuc3BvcnRzL2N1c3RvbS5qcwogIGZ1bmN0aW9uIGN1c3RvbShwcm92aWRlciwgY29uZmlnID0ge30pIHsKICAgIGNvbnN0IHsga2V5ID0gImN1c3RvbSIsIG5hbWUgPSAiQ3VzdG9tIFByb3ZpZGVyIiwgcmV0cnlEZWxheSB9ID0gY29uZmlnOwogICAgcmV0dXJuICh7IHJldHJ5Q291bnQ6IGRlZmF1bHRSZXRyeUNvdW50IH0pID0+IGNyZWF0ZVRyYW5zcG9ydCh7CiAgICAgIGtleSwKICAgICAgbmFtZSwKICAgICAgcmVxdWVzdDogcHJvdmlkZXIucmVxdWVzdC5iaW5kKHByb3ZpZGVyKSwKICAgICAgcmV0cnlDb3VudDogY29uZmlnLnJldHJ5Q291bnQgPz8gZGVmYXVsdFJldHJ5Q291bnQsCiAgICAgIHJldHJ5RGVsYXksCiAgICAgIHR5cGU6ICJjdXN0b20iCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2xpZW50cy90cmFuc3BvcnRzL2ZhbGxiYWNrLmpzCiAgaW5pdF9ycGMoKTsKICBmdW5jdGlvbiBmYWxsYmFjayh0cmFuc3BvcnRzXywgY29uZmlnID0ge30pIHsKICAgIGNvbnN0IHsga2V5ID0gImZhbGxiYWNrIiwgbmFtZSA9ICJGYWxsYmFjayIsIHJhbmsgPSBmYWxzZSwgcmV0cnlDb3VudCwgcmV0cnlEZWxheSB9ID0gY29uZmlnOwogICAgcmV0dXJuICh7IGNoYWluLCBwb2xsaW5nSW50ZXJ2YWwgPSA0ZTMsIHRpbWVvdXQsIC4uLnJlc3QgfSkgPT4gewogICAgICBsZXQgdHJhbnNwb3J0cyA9IHRyYW5zcG9ydHNfOwogICAgICBsZXQgb25SZXNwb25zZSA9ICgpID0+IHsKICAgICAgfTsKICAgICAgY29uc3QgdHJhbnNwb3J0ID0gY3JlYXRlVHJhbnNwb3J0KHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICAgICAgY29uc3QgZmV0Y2gyID0gYXN5bmMgKGkgPSAwKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydDIgPSB0cmFuc3BvcnRzW2ldKHsKICAgICAgICAgICAgICAuLi5yZXN0LAogICAgICAgICAgICAgIGNoYWluLAogICAgICAgICAgICAgIHJldHJ5Q291bnQ6IDAsCiAgICAgICAgICAgICAgdGltZW91dAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRyYW5zcG9ydDIucmVxdWVzdCh7CiAgICAgICAgICAgICAgICBtZXRob2QsCiAgICAgICAgICAgICAgICBwYXJhbXMKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBvblJlc3BvbnNlKHsKICAgICAgICAgICAgICAgIG1ldGhvZCwKICAgICAgICAgICAgICAgIHBhcmFtcywKICAgICAgICAgICAgICAgIHJlc3BvbnNlLAogICAgICAgICAgICAgICAgdHJhbnNwb3J0OiB0cmFuc3BvcnQyLAogICAgICAgICAgICAgICAgc3RhdHVzOiAic3VjY2VzcyIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgIG9uUmVzcG9uc2UoewogICAgICAgICAgICAgICAgZXJyb3I6IGVyciwKICAgICAgICAgICAgICAgIG1ldGhvZCwKICAgICAgICAgICAgICAgIHBhcmFtcywKICAgICAgICAgICAgICAgIHRyYW5zcG9ydDogdHJhbnNwb3J0MiwKICAgICAgICAgICAgICAgIHN0YXR1czogImVycm9yIgogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyhlcnIpKQogICAgICAgICAgICAgICAgdGhyb3cgZXJyOwogICAgICAgICAgICAgIGlmIChpID09PSB0cmFuc3BvcnRzLmxlbmd0aCAtIDEpCiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgICAgICAgcmV0dXJuIGZldGNoMihpICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gZmV0Y2gyKCk7CiAgICAgICAgfSwKICAgICAgICByZXRyeUNvdW50LAogICAgICAgIHJldHJ5RGVsYXksCiAgICAgICAgdHlwZTogImZhbGxiYWNrIgogICAgICB9LCB7CiAgICAgICAgb25SZXNwb25zZTogKGZuKSA9PiBvblJlc3BvbnNlID0gZm4sCiAgICAgICAgdHJhbnNwb3J0czogdHJhbnNwb3J0cy5tYXAoKGZuKSA9PiBmbih7IGNoYWluLCByZXRyeUNvdW50OiAwIH0pKQogICAgICB9KTsKICAgICAgaWYgKHJhbmspIHsKICAgICAgICBjb25zdCByYW5rT3B0aW9ucyA9IHR5cGVvZiByYW5rID09PSAib2JqZWN0IiA/IHJhbmsgOiB7fTsKICAgICAgICByYW5rVHJhbnNwb3J0cyh7CiAgICAgICAgICBjaGFpbiwKICAgICAgICAgIGludGVydmFsOiByYW5rT3B0aW9ucy5pbnRlcnZhbCA/PyBwb2xsaW5nSW50ZXJ2YWwsCiAgICAgICAgICBvblRyYW5zcG9ydHM6ICh0cmFuc3BvcnRzXzIpID0+IHRyYW5zcG9ydHMgPSB0cmFuc3BvcnRzXzIsCiAgICAgICAgICBzYW1wbGVDb3VudDogcmFua09wdGlvbnMuc2FtcGxlQ291bnQsCiAgICAgICAgICB0aW1lb3V0OiByYW5rT3B0aW9ucy50aW1lb3V0LAogICAgICAgICAgdHJhbnNwb3J0cywKICAgICAgICAgIHdlaWdodHM6IHJhbmtPcHRpb25zLndlaWdodHMKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gdHJhbnNwb3J0OwogICAgfTsKICB9CiAgZnVuY3Rpb24gc2hvdWxkVGhyb3coZXJyb3IpIHsKICAgIGlmICgiY29kZSIgaW4gZXJyb3IgJiYgdHlwZW9mIGVycm9yLmNvZGUgPT09ICJudW1iZXIiKSB7CiAgICAgIGlmIChlcnJvci5jb2RlID09PSBUcmFuc2FjdGlvblJlamVjdGVkUnBjRXJyb3IuY29kZSB8fCBlcnJvci5jb2RlID09PSBVc2VyUmVqZWN0ZWRSZXF1ZXN0RXJyb3IuY29kZSB8fCBlcnJvci5jb2RlID09PSA1ZTMpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIHJhbmtUcmFuc3BvcnRzKHsgY2hhaW4sIGludGVydmFsID0gNGUzLCBvblRyYW5zcG9ydHMsIHNhbXBsZUNvdW50ID0gMTAsIHRpbWVvdXQgPSAxZTMsIHRyYW5zcG9ydHMsIHdlaWdodHMgPSB7fSB9KSB7CiAgICBjb25zdCB7IHN0YWJpbGl0eTogc3RhYmlsaXR5V2VpZ2h0ID0gMC43LCBsYXRlbmN5OiBsYXRlbmN5V2VpZ2h0ID0gMC4zIH0gPSB3ZWlnaHRzOwogICAgY29uc3Qgc2FtcGxlcyA9IFtdOwogICAgY29uc3QgcmFua1RyYW5zcG9ydHNfID0gYXN5bmMgKCkgPT4gewogICAgICBjb25zdCBzYW1wbGUgPSBhd2FpdCBQcm9taXNlLmFsbCh0cmFuc3BvcnRzLm1hcChhc3luYyAodHJhbnNwb3J0KSA9PiB7CiAgICAgICAgY29uc3QgdHJhbnNwb3J0XyA9IHRyYW5zcG9ydCh7IGNoYWluLCByZXRyeUNvdW50OiAwLCB0aW1lb3V0IH0pOwogICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTsKICAgICAgICBsZXQgZW5kOwogICAgICAgIGxldCBzdWNjZXNzOwogICAgICAgIHRyeSB7CiAgICAgICAgICBhd2FpdCB0cmFuc3BvcnRfLnJlcXVlc3QoeyBtZXRob2Q6ICJuZXRfbGlzdGVuaW5nIiB9KTsKICAgICAgICAgIHN1Y2Nlc3MgPSAxOwogICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgc3VjY2VzcyA9IDA7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIGVuZCA9IERhdGUubm93KCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxhdGVuY3kgPSBlbmQgLSBzdGFydDsKICAgICAgICByZXR1cm4geyBsYXRlbmN5LCBzdWNjZXNzIH07CiAgICAgIH0pKTsKICAgICAgc2FtcGxlcy5wdXNoKHNhbXBsZSk7CiAgICAgIGlmIChzYW1wbGVzLmxlbmd0aCA+IHNhbXBsZUNvdW50KQogICAgICAgIHNhbXBsZXMuc2hpZnQoKTsKICAgICAgY29uc3QgbWF4TGF0ZW5jeSA9IE1hdGgubWF4KC4uLnNhbXBsZXMubWFwKChzYW1wbGUyKSA9PiBNYXRoLm1heCguLi5zYW1wbGUyLm1hcCgoeyBsYXRlbmN5IH0pID0+IGxhdGVuY3kpKSkpOwogICAgICBjb25zdCBzY29yZXMgPSB0cmFuc3BvcnRzLm1hcCgoXywgaSkgPT4gewogICAgICAgIGNvbnN0IGxhdGVuY2llcyA9IHNhbXBsZXMubWFwKChzYW1wbGUyKSA9PiBzYW1wbGUyW2ldLmxhdGVuY3kpOwogICAgICAgIGNvbnN0IG1lYW5MYXRlbmN5ID0gbGF0ZW5jaWVzLnJlZHVjZSgoYWNjLCBsYXRlbmN5KSA9PiBhY2MgKyBsYXRlbmN5LCAwKSAvIGxhdGVuY2llcy5sZW5ndGg7CiAgICAgICAgY29uc3QgbGF0ZW5jeVNjb3JlID0gMSAtIG1lYW5MYXRlbmN5IC8gbWF4TGF0ZW5jeTsKICAgICAgICBjb25zdCBzdWNjZXNzZXMgPSBzYW1wbGVzLm1hcCgoc2FtcGxlMikgPT4gc2FtcGxlMltpXS5zdWNjZXNzKTsKICAgICAgICBjb25zdCBzdGFiaWxpdHlTY29yZSA9IHN1Y2Nlc3Nlcy5yZWR1Y2UoKGFjYywgc3VjY2VzcykgPT4gYWNjICsgc3VjY2VzcywgMCkgLyBzdWNjZXNzZXMubGVuZ3RoOwogICAgICAgIGlmIChzdGFiaWxpdHlTY29yZSA9PT0gMCkKICAgICAgICAgIHJldHVybiBbMCwgaV07CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgIGxhdGVuY3lXZWlnaHQgKiBsYXRlbmN5U2NvcmUgKyBzdGFiaWxpdHlXZWlnaHQgKiBzdGFiaWxpdHlTY29yZSwKICAgICAgICAgIGkKICAgICAgICBdOwogICAgICB9KS5zb3J0KChhLCBiKSA9PiBiWzBdIC0gYVswXSk7CiAgICAgIG9uVHJhbnNwb3J0cyhzY29yZXMubWFwKChbLCBpXSkgPT4gdHJhbnNwb3J0c1tpXSkpOwogICAgICBhd2FpdCB3YWl0KGludGVydmFsKTsKICAgICAgcmFua1RyYW5zcG9ydHNfKCk7CiAgICB9OwogICAgcmFua1RyYW5zcG9ydHNfKCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvdHJhbnNwb3J0cy9odHRwLmpzCiAgaW5pdF9yZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL3RyYW5zcG9ydC5qcwogIGluaXRfYmFzZSgpOwogIHZhciBVcmxSZXF1aXJlZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiTm8gVVJMIHdhcyBwcm92aWRlZCB0byB0aGUgVHJhbnNwb3J0LiBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIFJQQyBVUkwgdG8gdGhlIFRyYW5zcG9ydC4iLCB7CiAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9jbGllbnRzL2ludHJvIiwKICAgICAgICBuYW1lOiAiVXJsUmVxdWlyZWRFcnJvciIKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL3RyYW5zcG9ydHMvaHR0cC5qcwogIGluaXRfY3JlYXRlQmF0Y2hTY2hlZHVsZXIoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ycGMvaHR0cC5qcwogIGluaXRfcmVxdWVzdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3Byb21pc2Uvd2l0aFRpbWVvdXQuanMKICBmdW5jdGlvbiB3aXRoVGltZW91dChmbiwgeyBlcnJvckluc3RhbmNlID0gbmV3IEVycm9yKCJ0aW1lZCBvdXQiKSwgdGltZW91dCwgc2lnbmFsIH0pIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIDsKICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICBsZXQgdGltZW91dElkOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgICAgaWYgKHRpbWVvdXQgPiAwKSB7CiAgICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIGlmIChzaWduYWwpIHsKICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVqZWN0KGVycm9ySW5zdGFuY2UpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgdGltZW91dCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXNvbHZlKGF3YWl0IGZuKHsgc2lnbmFsOiBjb250cm9sbGVyPy5zaWduYWwgfHwgbnVsbCB9KSk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBpZiAoZXJyPy5uYW1lID09PSAiQWJvcnRFcnJvciIpCiAgICAgICAgICAgIHJlamVjdChlcnJvckluc3RhbmNlKTsKICAgICAgICAgIHJlamVjdChlcnIpOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTsKICAgICAgICB9CiAgICAgIH0pKCk7CiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcnBjL2h0dHAuanMKICBpbml0X3N0cmluZ2lmeSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3JwYy9pZC5qcwogIGZ1bmN0aW9uIGNyZWF0ZUlkU3RvcmUoKSB7CiAgICByZXR1cm4gewogICAgICBjdXJyZW50OiAwLAogICAgICB0YWtlKCkgewogICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQrKzsKICAgICAgfSwKICAgICAgcmVzZXQoKSB7CiAgICAgICAgdGhpcy5jdXJyZW50ID0gMDsKICAgICAgfQogICAgfTsKICB9CiAgdmFyIGlkQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gY3JlYXRlSWRTdG9yZSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3JwYy9odHRwLmpzCiAgZnVuY3Rpb24gZ2V0SHR0cFJwY0NsaWVudCh1cmwsIG9wdGlvbnMgPSB7fSkgewogICAgcmV0dXJuIHsKICAgICAgYXN5bmMgcmVxdWVzdChwYXJhbXMpIHsKICAgICAgICBjb25zdCB7IGJvZHksIG9uUmVxdWVzdCA9IG9wdGlvbnMub25SZXF1ZXN0LCBvblJlc3BvbnNlID0gb3B0aW9ucy5vblJlc3BvbnNlLCB0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID8/IDFlNCB9ID0gcGFyYW1zOwogICAgICAgIGNvbnN0IGZldGNoT3B0aW9ucyA9IHsKICAgICAgICAgIC4uLm9wdGlvbnMuZmV0Y2hPcHRpb25zID8/IHt9LAogICAgICAgICAgLi4ucGFyYW1zLmZldGNoT3B0aW9ucyA/PyB7fQogICAgICAgIH07CiAgICAgICAgY29uc3QgeyBoZWFkZXJzLCBtZXRob2QsIHNpZ25hbDogc2lnbmFsXyB9ID0gZmV0Y2hPcHRpb25zOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHdpdGhUaW1lb3V0KGFzeW5jICh7IHNpZ25hbCB9KSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGluaXQgPSB7CiAgICAgICAgICAgICAgLi4uZmV0Y2hPcHRpb25zLAogICAgICAgICAgICAgIGJvZHk6IEFycmF5LmlzQXJyYXkoYm9keSkgPyBzdHJpbmdpZnkoYm9keS5tYXAoKGJvZHkyKSA9PiAoewogICAgICAgICAgICAgICAganNvbnJwYzogIjIuMCIsCiAgICAgICAgICAgICAgICBpZDogYm9keTIuaWQgPz8gaWRDYWNoZS50YWtlKCksCiAgICAgICAgICAgICAgICAuLi5ib2R5MgogICAgICAgICAgICAgIH0pKSkgOiBzdHJpbmdpZnkoewogICAgICAgICAgICAgICAganNvbnJwYzogIjIuMCIsCiAgICAgICAgICAgICAgICBpZDogYm9keS5pZCA/PyBpZENhY2hlLnRha2UoKSwKICAgICAgICAgICAgICAgIC4uLmJvZHkKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICAgICAgICAgLi4uaGVhZGVycwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QgfHwgIlBPU1QiLAogICAgICAgICAgICAgIHNpZ25hbDogc2lnbmFsXyB8fCAodGltZW91dCA+IDAgPyBzaWduYWwgOiBudWxsKQogICAgICAgICAgICB9OwogICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCBpbml0KTsKICAgICAgICAgICAgaWYgKG9uUmVxdWVzdCkKICAgICAgICAgICAgICBhd2FpdCBvblJlcXVlc3QocmVxdWVzdCk7CiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlMiA9IGF3YWl0IGZldGNoKHVybCwgaW5pdCk7CiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTI7CiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIGVycm9ySW5zdGFuY2U6IG5ldyBUaW1lb3V0RXJyb3IoeyBib2R5LCB1cmwgfSksCiAgICAgICAgICAgIHRpbWVvdXQsCiAgICAgICAgICAgIHNpZ25hbDogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAob25SZXNwb25zZSkKICAgICAgICAgICAgYXdhaXQgb25SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgICBsZXQgZGF0YTsKICAgICAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIik/LnN0YXJ0c1dpdGgoImFwcGxpY2F0aW9uL2pzb24iKSkKICAgICAgICAgICAgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBkYXRhID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhIHx8ICJ7fSIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykgewogICAgICAgICAgICB0aHJvdyBuZXcgSHR0cFJlcXVlc3RFcnJvcih7CiAgICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgICBkZXRhaWxzOiBzdHJpbmdpZnkoZGF0YS5lcnJvcikgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dCwKICAgICAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLAogICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLAogICAgICAgICAgICAgIHVybAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEh0dHBSZXF1ZXN0RXJyb3IpCiAgICAgICAgICAgIHRocm93IGVycjsKICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IpCiAgICAgICAgICAgIHRocm93IGVycjsKICAgICAgICAgIHRocm93IG5ldyBIdHRwUmVxdWVzdEVycm9yKHsKICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgY2F1c2U6IGVyciwKICAgICAgICAgICAgdXJsCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvdHJhbnNwb3J0cy9odHRwLmpzCiAgZnVuY3Rpb24gaHR0cCh1cmwsIGNvbmZpZyA9IHt9KSB7CiAgICBjb25zdCB7IGJhdGNoLCBmZXRjaE9wdGlvbnMsIGtleSA9ICJodHRwIiwgbmFtZSA9ICJIVFRQIEpTT04tUlBDIiwgb25GZXRjaFJlcXVlc3QsIG9uRmV0Y2hSZXNwb25zZSwgcmV0cnlEZWxheSB9ID0gY29uZmlnOwogICAgcmV0dXJuICh7IGNoYWluLCByZXRyeUNvdW50OiByZXRyeUNvdW50XywgdGltZW91dDogdGltZW91dF8gfSkgPT4gewogICAgICBjb25zdCB7IGJhdGNoU2l6ZSA9IDFlMywgd2FpdDogd2FpdDIgPSAwIH0gPSB0eXBlb2YgYmF0Y2ggPT09ICJvYmplY3QiID8gYmF0Y2ggOiB7fTsKICAgICAgY29uc3QgcmV0cnlDb3VudCA9IGNvbmZpZy5yZXRyeUNvdW50ID8/IHJldHJ5Q291bnRfOwogICAgICBjb25zdCB0aW1lb3V0ID0gdGltZW91dF8gPz8gY29uZmlnLnRpbWVvdXQgPz8gMWU0OwogICAgICBjb25zdCB1cmxfID0gdXJsIHx8IGNoYWluPy5ycGNVcmxzLmRlZmF1bHQuaHR0cFswXTsKICAgICAgaWYgKCF1cmxfKQogICAgICAgIHRocm93IG5ldyBVcmxSZXF1aXJlZEVycm9yKCk7CiAgICAgIGNvbnN0IHJwY0NsaWVudCA9IGdldEh0dHBScGNDbGllbnQodXJsXywgewogICAgICAgIGZldGNoT3B0aW9ucywKICAgICAgICBvblJlcXVlc3Q6IG9uRmV0Y2hSZXF1ZXN0LAogICAgICAgIG9uUmVzcG9uc2U6IG9uRmV0Y2hSZXNwb25zZSwKICAgICAgICB0aW1lb3V0CiAgICAgIH0pOwogICAgICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICAgICAgY29uc3QgYm9keSA9IHsgbWV0aG9kLCBwYXJhbXMgfTsKICAgICAgICAgIGNvbnN0IHsgc2NoZWR1bGUgfSA9IGNyZWF0ZUJhdGNoU2NoZWR1bGVyKHsKICAgICAgICAgICAgaWQ6IHVybF8sCiAgICAgICAgICAgIHdhaXQ6IHdhaXQyLAogICAgICAgICAgICBzaG91bGRTcGxpdEJhdGNoKHJlcXVlc3RzKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RzLmxlbmd0aCA+IGJhdGNoU2l6ZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZm46IChib2R5MikgPT4gcnBjQ2xpZW50LnJlcXVlc3QoewogICAgICAgICAgICAgIGJvZHk6IGJvZHkyCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBzb3J0OiAoYSwgYikgPT4gYS5pZCAtIGIuaWQKICAgICAgICAgIH0pOwogICAgICAgICAgY29uc3QgZm4gPSBhc3luYyAoYm9keTIpID0+IGJhdGNoID8gc2NoZWR1bGUoYm9keTIpIDogWwogICAgICAgICAgICBhd2FpdCBycGNDbGllbnQucmVxdWVzdCh7CiAgICAgICAgICAgICAgYm9keTogYm9keTIKICAgICAgICAgICAgfSkKICAgICAgICAgIF07CiAgICAgICAgICBjb25zdCBbeyBlcnJvciwgcmVzdWx0IH1dID0gYXdhaXQgZm4oYm9keSk7CiAgICAgICAgICBpZiAoZXJyb3IpCiAgICAgICAgICAgIHRocm93IG5ldyBScGNSZXF1ZXN0RXJyb3IoewogICAgICAgICAgICAgIGJvZHksCiAgICAgICAgICAgICAgZXJyb3IsCiAgICAgICAgICAgICAgdXJsOiB1cmxfCiAgICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9LAogICAgICAgIHJldHJ5Q291bnQsCiAgICAgICAgcmV0cnlEZWxheSwKICAgICAgICB0aW1lb3V0LAogICAgICAgIHR5cGU6ICJodHRwIgogICAgICB9LCB7CiAgICAgICAgZmV0Y2hPcHRpb25zLAogICAgICAgIHVybDogdXJsXwogICAgICB9KTsKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvZW5zL2dldEVuc0FkZHJlc3MuanMKICBpbml0X2FiaXMoKTsKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2dldENoYWluQ29udHJhY3RBZGRyZXNzKCk7CiAgaW5pdF90cmltKCk7CiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9lcnJvcnMuanMKICBpbml0X3NvbGlkaXR5KCk7CiAgaW5pdF9iYXNlKCk7CiAgaW5pdF9jb250cmFjdCgpOwogIGZ1bmN0aW9uIGlzTnVsbFVuaXZlcnNhbFJlc29sdmVyRXJyb3IoZXJyLCBjYWxsVHlwZSkgewogICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgQmFzZUVycm9yMikpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IGNhdXNlID0gZXJyLndhbGsoKGUpID0+IGUgaW5zdGFuY2VvZiBDb250cmFjdEZ1bmN0aW9uUmV2ZXJ0ZWRFcnJvcik7CiAgICBpZiAoIShjYXVzZSBpbnN0YW5jZW9mIENvbnRyYWN0RnVuY3Rpb25SZXZlcnRlZEVycm9yKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKGNhdXNlLmRhdGE/LmVycm9yTmFtZSA9PT0gIlJlc29sdmVyTm90Rm91bmQiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChjYXVzZS5kYXRhPy5lcnJvck5hbWUgPT09ICJSZXNvbHZlcldpbGRjYXJkTm90U3VwcG9ydGVkIikKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoY2F1c2UuZGF0YT8uZXJyb3JOYW1lID09PSAiUmVzb2x2ZXJOb3RDb250cmFjdCIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKGNhdXNlLmRhdGE/LmVycm9yTmFtZSA9PT0gIlJlc29sdmVyRXJyb3IiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChjYXVzZS5kYXRhPy5lcnJvck5hbWUgPT09ICJIdHRwRXJyb3IiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChjYXVzZS5yZWFzb24/LmluY2x1ZGVzKCJXaWxkY2FyZCBvbiBub24tZXh0ZW5kZWQgcmVzb2x2ZXJzIGlzIG5vdCBzdXBwb3J0ZWQiKSkKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoY2FsbFR5cGUgPT09ICJyZXZlcnNlIiAmJiBjYXVzZS5yZWFzb24gPT09IHBhbmljUmVhc29uc1s1MF0pCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbnMvbmFtZWhhc2guanMKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X2tlY2NhazI1NigpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9lbmNvZGVkTGFiZWxUb0xhYmVsaGFzaC5qcwogIGluaXRfaXNIZXgoKTsKICBmdW5jdGlvbiBlbmNvZGVkTGFiZWxUb0xhYmVsaGFzaChsYWJlbCkgewogICAgaWYgKGxhYmVsLmxlbmd0aCAhPT0gNjYpCiAgICAgIHJldHVybiBudWxsOwogICAgaWYgKGxhYmVsLmluZGV4T2YoIlsiKSAhPT0gMCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBpZiAobGFiZWwuaW5kZXhPZigiXSIpICE9PSA2NSkKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCBoYXNoMyA9IGAweCR7bGFiZWwuc2xpY2UoMSwgNjUpfWA7CiAgICBpZiAoIWlzSGV4KGhhc2gzKSkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gaGFzaDM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9uYW1laGFzaC5qcwogIGZ1bmN0aW9uIG5hbWVoYXNoKG5hbWUpIHsKICAgIGxldCByZXN1bHQgPSBuZXcgVWludDhBcnJheSgzMikuZmlsbCgwKTsKICAgIGlmICghbmFtZSkKICAgICAgcmV0dXJuIGJ5dGVzVG9IZXgocmVzdWx0KTsKICAgIGNvbnN0IGxhYmVscyA9IG5hbWUuc3BsaXQoIi4iKTsKICAgIGZvciAobGV0IGkgPSBsYWJlbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHsKICAgICAgY29uc3QgaGFzaEZyb21FbmNvZGVkTGFiZWwgPSBlbmNvZGVkTGFiZWxUb0xhYmVsaGFzaChsYWJlbHNbaV0pOwogICAgICBjb25zdCBoYXNoZWQgPSBoYXNoRnJvbUVuY29kZWRMYWJlbCA/IHRvQnl0ZXMoaGFzaEZyb21FbmNvZGVkTGFiZWwpIDoga2VjY2FrMjU2KHN0cmluZ1RvQnl0ZXMobGFiZWxzW2ldKSwgImJ5dGVzIik7CiAgICAgIHJlc3VsdCA9IGtlY2NhazI1Nihjb25jYXQoW3Jlc3VsdCwgaGFzaGVkXSksICJieXRlcyIpOwogICAgfQogICAgcmV0dXJuIGJ5dGVzVG9IZXgocmVzdWx0KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5zL3BhY2tldFRvQnl0ZXMuanMKICBpbml0X3RvQnl0ZXMoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbnMvZW5jb2RlTGFiZWxoYXNoLmpzCiAgZnVuY3Rpb24gZW5jb2RlTGFiZWxoYXNoKGhhc2gzKSB7CiAgICByZXR1cm4gYFske2hhc2gzLnNsaWNlKDIpfV1gOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbnMvbGFiZWxoYXNoLmpzCiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGluaXRfa2VjY2FrMjU2KCk7CiAgZnVuY3Rpb24gbGFiZWxoYXNoKGxhYmVsKSB7CiAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheSgzMikuZmlsbCgwKTsKICAgIGlmICghbGFiZWwpCiAgICAgIHJldHVybiBieXRlc1RvSGV4KHJlc3VsdCk7CiAgICByZXR1cm4gZW5jb2RlZExhYmVsVG9MYWJlbGhhc2gobGFiZWwpIHx8IGtlY2NhazI1NihzdHJpbmdUb0J5dGVzKGxhYmVsKSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9wYWNrZXRUb0J5dGVzLmpzCiAgZnVuY3Rpb24gcGFja2V0VG9CeXRlcyhwYWNrZXQpIHsKICAgIGNvbnN0IHZhbHVlID0gcGFja2V0LnJlcGxhY2UoL15cLnxcLiQvZ20sICIiKTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgxKTsKICAgIGNvbnN0IGJ5dGVzMiA9IG5ldyBVaW50OEFycmF5KHN0cmluZ1RvQnl0ZXModmFsdWUpLmJ5dGVMZW5ndGggKyAyKTsKICAgIGxldCBvZmZzZXQgPSAwOwogICAgY29uc3QgbGlzdCA9IHZhbHVlLnNwbGl0KCIuIik7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgbGV0IGVuY29kZWQgPSBzdHJpbmdUb0J5dGVzKGxpc3RbaV0pOwogICAgICBpZiAoZW5jb2RlZC5ieXRlTGVuZ3RoID4gMjU1KQogICAgICAgIGVuY29kZWQgPSBzdHJpbmdUb0J5dGVzKGVuY29kZUxhYmVsaGFzaChsYWJlbGhhc2gobGlzdFtpXSkpKTsKICAgICAgYnl0ZXMyW29mZnNldF0gPSBlbmNvZGVkLmxlbmd0aDsKICAgICAgYnl0ZXMyLnNldChlbmNvZGVkLCBvZmZzZXQgKyAxKTsKICAgICAgb2Zmc2V0ICs9IGVuY29kZWQubGVuZ3RoICsgMTsKICAgIH0KICAgIGlmIChieXRlczIuYnl0ZUxlbmd0aCAhPT0gb2Zmc2V0ICsgMSkKICAgICAgcmV0dXJuIGJ5dGVzMi5zbGljZSgwLCBvZmZzZXQgKyAxKTsKICAgIHJldHVybiBieXRlczI7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvZW5zL2dldEVuc0FkZHJlc3MuanMKICBhc3luYyBmdW5jdGlvbiBnZXRFbnNBZGRyZXNzKGNsaWVudCwgeyBibG9ja051bWJlciwgYmxvY2tUYWcsIGNvaW5UeXBlLCBuYW1lLCBnYXRld2F5VXJscywgc3RyaWN0LCB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3M6IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc18gfSkgewogICAgbGV0IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyA9IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc187CiAgICBpZiAoIXVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcykgewogICAgICBpZiAoIWNsaWVudC5jaGFpbikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNsaWVudCBjaGFpbiBub3QgY29uZmlndXJlZC4gdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzIGlzIHJlcXVpcmVkLiIpOwogICAgICB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgPSBnZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyh7CiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgY2hhaW46IGNsaWVudC5jaGFpbiwKICAgICAgICBjb250cmFjdDogImVuc1VuaXZlcnNhbFJlc29sdmVyIgogICAgICB9KTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IGZ1bmN0aW9uRGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7CiAgICAgICAgYWJpOiBhZGRyZXNzUmVzb2x2ZXJBYmksCiAgICAgICAgZnVuY3Rpb25OYW1lOiAiYWRkciIsCiAgICAgICAgLi4uY29pblR5cGUgIT0gbnVsbCA/IHsgYXJnczogW25hbWVoYXNoKG5hbWUpLCBCaWdJbnQoY29pblR5cGUpXSB9IDogeyBhcmdzOiBbbmFtZWhhc2gobmFtZSldIH0KICAgICAgfSk7CiAgICAgIGNvbnN0IHJlYWRDb250cmFjdFBhcmFtZXRlcnMgPSB7CiAgICAgICAgYWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzLAogICAgICAgIGFiaTogdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpLAogICAgICAgIGZ1bmN0aW9uTmFtZTogInJlc29sdmUiLAogICAgICAgIGFyZ3M6IFt0b0hleChwYWNrZXRUb0J5dGVzKG5hbWUpKSwgZnVuY3Rpb25EYXRhXSwKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBibG9ja1RhZwogICAgICB9OwogICAgICBjb25zdCByZWFkQ29udHJhY3RBY3Rpb24gPSBnZXRBY3Rpb24oY2xpZW50LCByZWFkQ29udHJhY3QsICJyZWFkQ29udHJhY3QiKTsKICAgICAgY29uc3QgcmVzID0gZ2F0ZXdheVVybHMgPyBhd2FpdCByZWFkQ29udHJhY3RBY3Rpb24oewogICAgICAgIC4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMsCiAgICAgICAgYXJnczogWy4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMuYXJncywgZ2F0ZXdheVVybHNdCiAgICAgIH0pIDogYXdhaXQgcmVhZENvbnRyYWN0QWN0aW9uKHJlYWRDb250cmFjdFBhcmFtZXRlcnMpOwogICAgICBpZiAocmVzWzBdID09PSAiMHgiKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCBhZGRyZXNzID0gZGVjb2RlRnVuY3Rpb25SZXN1bHQoewogICAgICAgIGFiaTogYWRkcmVzc1Jlc29sdmVyQWJpLAogICAgICAgIGFyZ3M6IGNvaW5UeXBlICE9IG51bGwgPyBbbmFtZWhhc2gobmFtZSksIEJpZ0ludChjb2luVHlwZSldIDogdm9pZCAwLAogICAgICAgIGZ1bmN0aW9uTmFtZTogImFkZHIiLAogICAgICAgIGRhdGE6IHJlc1swXQogICAgICB9KTsKICAgICAgaWYgKGFkZHJlc3MgPT09ICIweCIpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGlmICh0cmltKGFkZHJlc3MpID09PSAiMHgwMCIpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBhZGRyZXNzOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGlmIChzdHJpY3QpCiAgICAgICAgdGhyb3cgZXJyOwogICAgICBpZiAoaXNOdWxsVW5pdmVyc2FsUmVzb2x2ZXJFcnJvcihlcnIsICJyZXNvbHZlIikpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHRocm93IGVycjsKICAgIH0KICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vZXJyb3JzL2Vucy5qcwogIGluaXRfYmFzZSgpOwogIHZhciBFbnNBdmF0YXJJbnZhbGlkTWV0YWRhdGFFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGRhdGEgfSkgewogICAgICBzdXBlcigiVW5hYmxlIHRvIGV4dHJhY3QgaW1hZ2UgZnJvbSBtZXRhZGF0YS4gVGhlIG1ldGFkYXRhIG1heSBiZSBtYWxmb3JtZWQgb3IgaW52YWxpZC4iLCB7CiAgICAgICAgbWV0YU1lc3NhZ2VzOiBbCiAgICAgICAgICAiLSBNZXRhZGF0YSBtdXN0IGJlIGEgSlNPTiBvYmplY3Qgd2l0aCBhdCBsZWFzdCBhbiBgaW1hZ2VgLCBgaW1hZ2VfdXJsYCBvciBgaW1hZ2VfZGF0YWAgcHJvcGVydHkuIiwKICAgICAgICAgICIiLAogICAgICAgICAgYFByb3ZpZGVkIGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YAogICAgICAgIF0sCiAgICAgICAgbmFtZTogIkVuc0F2YXRhckludmFsaWRNZXRhZGF0YUVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwogIHZhciBFbnNBdmF0YXJJbnZhbGlkTmZ0VXJpRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyByZWFzb24gfSkgewogICAgICBzdXBlcihgRU5TIE5GVCBhdmF0YXIgVVJJIGlzIGludmFsaWQuICR7cmVhc29ufWAsIHsKICAgICAgICBuYW1lOiAiRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yIgogICAgICB9KTsKICAgIH0KICB9OwogIHZhciBFbnNBdmF0YXJVcmlSZXNvbHV0aW9uRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoeyB1cmkgfSkgewogICAgICBzdXBlcihgVW5hYmxlIHRvIHJlc29sdmUgRU5TIGF2YXRhciBVUkkgIiR7dXJpfSIuIFRoZSBVUkkgbWF5IGJlIG1hbGZvcm1lZCwgaW52YWxpZCwgb3IgZG9lcyBub3QgcmVzcG9uZCB3aXRoIGEgdmFsaWQgaW1hZ2UuYCwgeyBuYW1lOiAiRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yIiB9KTsKICAgIH0KICB9OwogIHZhciBFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgbmFtZXNwYWNlIH0pIHsKICAgICAgc3VwZXIoYEVOUyBORlQgYXZhdGFyIG5hbWVzcGFjZSAiJHtuYW1lc3BhY2V9IiBpcyBub3Qgc3VwcG9ydGVkLiBNdXN0IGJlICJlcmM3MjEiIG9yICJlcmMxMTU1Ii5gLCB7IG5hbWU6ICJFbnNBdmF0YXJVbnN1cHBvcnRlZE5hbWVzcGFjZUVycm9yIiB9KTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Vucy9hdmF0YXIvdXRpbHMuanMKICB2YXIgbmV0d29ya1JlZ2V4ID0gLyg/PHByb3RvY29sPmh0dHBzPzpcL1wvW15cL10qfGlwZnM6XC98aXBuczpcL3xhcjpcLyk/KD88cm9vdD5cLyk/KD88c3VicGF0aD5pcGZzXC98aXBuc1wvKT8oPzx0YXJnZXQ+W1x3XC0uXSspKD88c3VidGFyZ2V0PlwvLiopPy87CiAgdmFyIGlwZnNIYXNoUmVnZXggPSAvXihRbVsxLTlBLUhKLU5QLVphLWttLXpdezQ0LH18YltBLVphLXoyLTddezU4LH18QltBLVoyLTddezU4LH18elsxLTlBLUhKLU5QLVphLWttLXpdezQ4LH18RlswLTlBLUZdezUwLH0pKFwvKD88dGFyZ2V0Pltcd1wtLl0rKSk/KD88c3VidGFyZ2V0PlwvLiopPyQvOwogIHZhciBiYXNlNjRSZWdleCA9IC9eZGF0YTooW2EtekEtWlwtLytdKik7YmFzZTY0LChbXiJdLiopLzsKICB2YXIgZGF0YVVSSVJlZ2V4ID0gL15kYXRhOihbYS16QS1aXC0vK10qKT8oO1thLXpBLVowLTldLio/KT8oLCkvOwogIGFzeW5jIGZ1bmN0aW9uIGlzSW1hZ2VVcmkodXJpKSB7CiAgICB0cnkgewogICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmksIHsgbWV0aG9kOiAiSEVBRCIgfSk7CiAgICAgIGlmIChyZXMuc3RhdHVzID09PSAyMDApIHsKICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIik7CiAgICAgICAgcmV0dXJuIGNvbnRlbnRUeXBlPy5zdGFydHNXaXRoKCJpbWFnZS8iKTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBpZiAodHlwZW9mIGVycm9yID09PSAib2JqZWN0IiAmJiB0eXBlb2YgZXJyb3IucmVzcG9uc2UgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmICghZ2xvYmFsVGhpcy5oYXNPd25Qcm9wZXJ0eSgiSW1hZ2UiKSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpOwogICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7CiAgICAgICAgICByZXNvbHZlKHRydWUpOwogICAgICAgIH07CiAgICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiB7CiAgICAgICAgICByZXNvbHZlKGZhbHNlKTsKICAgICAgICB9OwogICAgICAgIGltZy5zcmMgPSB1cmk7CiAgICAgIH0pOwogICAgfQogIH0KICBmdW5jdGlvbiBnZXRHYXRld2F5KGN1c3RvbTIsIGRlZmF1bHRHYXRld2F5KSB7CiAgICBpZiAoIWN1c3RvbTIpCiAgICAgIHJldHVybiBkZWZhdWx0R2F0ZXdheTsKICAgIGlmIChjdXN0b20yLmVuZHNXaXRoKCIvIikpCiAgICAgIHJldHVybiBjdXN0b20yLnNsaWNlKDAsIC0xKTsKICAgIHJldHVybiBjdXN0b20yOwogIH0KICBmdW5jdGlvbiByZXNvbHZlQXZhdGFyVXJpKHsgdXJpLCBnYXRld2F5VXJscyB9KSB7CiAgICBjb25zdCBpc0VuY29kZWQgPSBiYXNlNjRSZWdleC50ZXN0KHVyaSk7CiAgICBpZiAoaXNFbmNvZGVkKQogICAgICByZXR1cm4geyB1cmksIGlzT25DaGFpbjogdHJ1ZSwgaXNFbmNvZGVkIH07CiAgICBjb25zdCBpcGZzR2F0ZXdheSA9IGdldEdhdGV3YXkoZ2F0ZXdheVVybHM/LmlwZnMsICJodHRwczovL2lwZnMuaW8iKTsKICAgIGNvbnN0IGFyd2VhdmVHYXRld2F5ID0gZ2V0R2F0ZXdheShnYXRld2F5VXJscz8uYXJ3ZWF2ZSwgImh0dHBzOi8vYXJ3ZWF2ZS5uZXQiKTsKICAgIGNvbnN0IG5ldHdvcmtSZWdleE1hdGNoID0gdXJpLm1hdGNoKG5ldHdvcmtSZWdleCk7CiAgICBjb25zdCB7IHByb3RvY29sLCBzdWJwYXRoLCB0YXJnZXQsIHN1YnRhcmdldCA9ICIiIH0gPSBuZXR3b3JrUmVnZXhNYXRjaD8uZ3JvdXBzIHx8IHt9OwogICAgY29uc3QgaXNJUE5TID0gcHJvdG9jb2wgPT09ICJpcG5zOi8iIHx8IHN1YnBhdGggPT09ICJpcG5zLyI7CiAgICBjb25zdCBpc0lQRlMgPSBwcm90b2NvbCA9PT0gImlwZnM6LyIgfHwgc3VicGF0aCA9PT0gImlwZnMvIiB8fCBpcGZzSGFzaFJlZ2V4LnRlc3QodXJpKTsKICAgIGlmICh1cmkuc3RhcnRzV2l0aCgiaHR0cCIpICYmICFpc0lQTlMgJiYgIWlzSVBGUykgewogICAgICBsZXQgcmVwbGFjZWRVcmkgPSB1cmk7CiAgICAgIGlmIChnYXRld2F5VXJscz8uYXJ3ZWF2ZSkKICAgICAgICByZXBsYWNlZFVyaSA9IHVyaS5yZXBsYWNlKC9odHRwczpcL1wvYXJ3ZWF2ZS5uZXQvZywgZ2F0ZXdheVVybHM/LmFyd2VhdmUpOwogICAgICByZXR1cm4geyB1cmk6IHJlcGxhY2VkVXJpLCBpc09uQ2hhaW46IGZhbHNlLCBpc0VuY29kZWQ6IGZhbHNlIH07CiAgICB9CiAgICBpZiAoKGlzSVBOUyB8fCBpc0lQRlMpICYmIHRhcmdldCkgewogICAgICByZXR1cm4gewogICAgICAgIHVyaTogYCR7aXBmc0dhdGV3YXl9LyR7aXNJUE5TID8gImlwbnMiIDogImlwZnMifS8ke3RhcmdldH0ke3N1YnRhcmdldH1gLAogICAgICAgIGlzT25DaGFpbjogZmFsc2UsCiAgICAgICAgaXNFbmNvZGVkOiBmYWxzZQogICAgICB9OwogICAgfQogICAgaWYgKHByb3RvY29sID09PSAiYXI6LyIgJiYgdGFyZ2V0KSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdXJpOiBgJHthcndlYXZlR2F0ZXdheX0vJHt0YXJnZXR9JHtzdWJ0YXJnZXQgfHwgIiJ9YCwKICAgICAgICBpc09uQ2hhaW46IGZhbHNlLAogICAgICAgIGlzRW5jb2RlZDogZmFsc2UKICAgICAgfTsKICAgIH0KICAgIGxldCBwYXJzZWRVcmkgPSB1cmkucmVwbGFjZShkYXRhVVJJUmVnZXgsICIiKTsKICAgIGlmIChwYXJzZWRVcmkuc3RhcnRzV2l0aCgiPHN2ZyIpKSB7CiAgICAgIHBhcnNlZFVyaSA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7YnRvYShwYXJzZWRVcmkpfWA7CiAgICB9CiAgICBpZiAocGFyc2VkVXJpLnN0YXJ0c1dpdGgoImRhdGE6IikgfHwgcGFyc2VkVXJpLnN0YXJ0c1dpdGgoInsiKSkgewogICAgICByZXR1cm4gewogICAgICAgIHVyaTogcGFyc2VkVXJpLAogICAgICAgIGlzT25DaGFpbjogdHJ1ZSwKICAgICAgICBpc0VuY29kZWQ6IGZhbHNlCiAgICAgIH07CiAgICB9CiAgICB0aHJvdyBuZXcgRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yKHsgdXJpIH0pOwogIH0KICBmdW5jdGlvbiBnZXRKc29uSW1hZ2UoZGF0YSkgewogICAgaWYgKHR5cGVvZiBkYXRhICE9PSAib2JqZWN0IiB8fCAhKCJpbWFnZSIgaW4gZGF0YSkgJiYgISgiaW1hZ2VfdXJsIiBpbiBkYXRhKSAmJiAhKCJpbWFnZV9kYXRhIiBpbiBkYXRhKSkgewogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE1ldGFkYXRhRXJyb3IoeyBkYXRhIH0pOwogICAgfQogICAgcmV0dXJuIGRhdGEuaW1hZ2UgfHwgZGF0YS5pbWFnZV91cmwgfHwgZGF0YS5pbWFnZV9kYXRhOwogIH0KICBhc3luYyBmdW5jdGlvbiBnZXRNZXRhZGF0YUF2YXRhclVyaSh7IGdhdGV3YXlVcmxzLCB1cmkgfSkgewogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJpKS50aGVuKChyZXMyKSA9PiByZXMyLmpzb24oKSk7CiAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgcGFyc2VBdmF0YXJVcmkoewogICAgICAgIGdhdGV3YXlVcmxzLAogICAgICAgIHVyaTogZ2V0SnNvbkltYWdlKHJlcykKICAgICAgfSk7CiAgICAgIHJldHVybiBpbWFnZTsKICAgIH0gY2F0Y2ggewogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFyVXJpUmVzb2x1dGlvbkVycm9yKHsgdXJpIH0pOwogICAgfQogIH0KICBhc3luYyBmdW5jdGlvbiBwYXJzZUF2YXRhclVyaSh7IGdhdGV3YXlVcmxzLCB1cmkgfSkgewogICAgY29uc3QgeyB1cmk6IHJlc29sdmVkVVJJLCBpc09uQ2hhaW4gfSA9IHJlc29sdmVBdmF0YXJVcmkoeyB1cmksIGdhdGV3YXlVcmxzIH0pOwogICAgaWYgKGlzT25DaGFpbikKICAgICAgcmV0dXJuIHJlc29sdmVkVVJJOwogICAgY29uc3QgaXNJbWFnZSA9IGF3YWl0IGlzSW1hZ2VVcmkocmVzb2x2ZWRVUkkpOwogICAgaWYgKGlzSW1hZ2UpCiAgICAgIHJldHVybiByZXNvbHZlZFVSSTsKICAgIHRocm93IG5ldyBFbnNBdmF0YXJVcmlSZXNvbHV0aW9uRXJyb3IoeyB1cmkgfSk7CiAgfQogIGZ1bmN0aW9uIHBhcnNlTmZ0VXJpKHVyaV8pIHsKICAgIGxldCB1cmkgPSB1cmlfOwogICAgaWYgKHVyaS5zdGFydHNXaXRoKCJkaWQ6bmZ0OiIpKSB7CiAgICAgIHVyaSA9IHVyaS5yZXBsYWNlKCJkaWQ6bmZ0OiIsICIiKS5yZXBsYWNlKC9fL2csICIvIik7CiAgICB9CiAgICBjb25zdCBbcmVmZXJlbmNlLCBhc3NldF9uYW1lc3BhY2UsIHRva2VuSURdID0gdXJpLnNwbGl0KCIvIik7CiAgICBjb25zdCBbZWlwX25hbWVzcGFjZSwgY2hhaW5JRF0gPSByZWZlcmVuY2Uuc3BsaXQoIjoiKTsKICAgIGNvbnN0IFtlcmNfbmFtZXNwYWNlLCBjb250cmFjdEFkZHJlc3NdID0gYXNzZXRfbmFtZXNwYWNlLnNwbGl0KCI6Iik7CiAgICBpZiAoIWVpcF9uYW1lc3BhY2UgfHwgZWlwX25hbWVzcGFjZS50b0xvd2VyQ2FzZSgpICE9PSAiZWlwMTU1IikKICAgICAgdGhyb3cgbmV3IEVuc0F2YXRhckludmFsaWROZnRVcmlFcnJvcih7IHJlYXNvbjogIk9ubHkgRUlQLTE1NSBzdXBwb3J0ZWQiIH0pOwogICAgaWYgKCFjaGFpbklEKQogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yKHsgcmVhc29uOiAiQ2hhaW4gSUQgbm90IGZvdW5kIiB9KTsKICAgIGlmICghY29udHJhY3RBZGRyZXNzKQogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yKHsKICAgICAgICByZWFzb246ICJDb250cmFjdCBhZGRyZXNzIG5vdCBmb3VuZCIKICAgICAgfSk7CiAgICBpZiAoIXRva2VuSUQpCiAgICAgIHRocm93IG5ldyBFbnNBdmF0YXJJbnZhbGlkTmZ0VXJpRXJyb3IoeyByZWFzb246ICJUb2tlbiBJRCBub3QgZm91bmQiIH0pOwogICAgaWYgKCFlcmNfbmFtZXNwYWNlKQogICAgICB0aHJvdyBuZXcgRW5zQXZhdGFySW52YWxpZE5mdFVyaUVycm9yKHsgcmVhc29uOiAiRVJDIG5hbWVzcGFjZSBub3QgZm91bmQiIH0pOwogICAgcmV0dXJuIHsKICAgICAgY2hhaW5JRDogTnVtYmVyLnBhcnNlSW50KGNoYWluSUQpLAogICAgICBuYW1lc3BhY2U6IGVyY19uYW1lc3BhY2UudG9Mb3dlckNhc2UoKSwKICAgICAgY29udHJhY3RBZGRyZXNzLAogICAgICB0b2tlbklECiAgICB9OwogIH0KICBhc3luYyBmdW5jdGlvbiBnZXROZnRUb2tlblVyaShjbGllbnQsIHsgbmZ0IH0pIHsKICAgIGlmIChuZnQubmFtZXNwYWNlID09PSAiZXJjNzIxIikgewogICAgICByZXR1cm4gcmVhZENvbnRyYWN0KGNsaWVudCwgewogICAgICAgIGFkZHJlc3M6IG5mdC5jb250cmFjdEFkZHJlc3MsCiAgICAgICAgYWJpOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJ0b2tlblVSSSIsCiAgICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgICBpbnB1dHM6IFt7IG5hbWU6ICJ0b2tlbklkIiwgdHlwZTogInVpbnQyNTYiIH1dLAogICAgICAgICAgICBvdXRwdXRzOiBbeyBuYW1lOiAiIiwgdHlwZTogInN0cmluZyIgfV0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIGZ1bmN0aW9uTmFtZTogInRva2VuVVJJIiwKICAgICAgICBhcmdzOiBbQmlnSW50KG5mdC50b2tlbklEKV0KICAgICAgfSk7CiAgICB9CiAgICBpZiAobmZ0Lm5hbWVzcGFjZSA9PT0gImVyYzExNTUiKSB7CiAgICAgIHJldHVybiByZWFkQ29udHJhY3QoY2xpZW50LCB7CiAgICAgICAgYWRkcmVzczogbmZ0LmNvbnRyYWN0QWRkcmVzcywKICAgICAgICBhYmk6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogInVyaSIsCiAgICAgICAgICAgIHR5cGU6ICJmdW5jdGlvbiIsCiAgICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgICBpbnB1dHM6IFt7IG5hbWU6ICJfaWQiLCB0eXBlOiAidWludDI1NiIgfV0sCiAgICAgICAgICAgIG91dHB1dHM6IFt7IG5hbWU6ICIiLCB0eXBlOiAic3RyaW5nIiB9XQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgZnVuY3Rpb25OYW1lOiAidXJpIiwKICAgICAgICBhcmdzOiBbQmlnSW50KG5mdC50b2tlbklEKV0KICAgICAgfSk7CiAgICB9CiAgICB0aHJvdyBuZXcgRW5zQXZhdGFyVW5zdXBwb3J0ZWROYW1lc3BhY2VFcnJvcih7IG5hbWVzcGFjZTogbmZ0Lm5hbWVzcGFjZSB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZW5zL2F2YXRhci9wYXJzZUF2YXRhclJlY29yZC5qcwogIGFzeW5jIGZ1bmN0aW9uIHBhcnNlQXZhdGFyUmVjb3JkKGNsaWVudCwgeyBnYXRld2F5VXJscywgcmVjb3JkIH0pIHsKICAgIGlmICgvZWlwMTU1Oi9pLnRlc3QocmVjb3JkKSkKICAgICAgcmV0dXJuIHBhcnNlTmZ0QXZhdGFyVXJpKGNsaWVudCwgeyBnYXRld2F5VXJscywgcmVjb3JkIH0pOwogICAgcmV0dXJuIHBhcnNlQXZhdGFyVXJpKHsgdXJpOiByZWNvcmQsIGdhdGV3YXlVcmxzIH0pOwogIH0KICBhc3luYyBmdW5jdGlvbiBwYXJzZU5mdEF2YXRhclVyaShjbGllbnQsIHsgZ2F0ZXdheVVybHMsIHJlY29yZCB9KSB7CiAgICBjb25zdCBuZnQgPSBwYXJzZU5mdFVyaShyZWNvcmQpOwogICAgY29uc3QgbmZ0VXJpID0gYXdhaXQgZ2V0TmZ0VG9rZW5VcmkoY2xpZW50LCB7IG5mdCB9KTsKICAgIGNvbnN0IHsgdXJpOiByZXNvbHZlZE5mdFVyaSwgaXNPbkNoYWluLCBpc0VuY29kZWQgfSA9IHJlc29sdmVBdmF0YXJVcmkoeyB1cmk6IG5mdFVyaSwgZ2F0ZXdheVVybHMgfSk7CiAgICBpZiAoaXNPbkNoYWluICYmIChyZXNvbHZlZE5mdFVyaS5pbmNsdWRlcygiZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwiKSB8fCByZXNvbHZlZE5mdFVyaS5zdGFydHNXaXRoKCJ7IikpKSB7CiAgICAgIGNvbnN0IGVuY29kZWRKc29uID0gaXNFbmNvZGVkID8gKAogICAgICAgIC8vIGlmIGl0IGlzIGVuY29kZWQsIGRlY29kZSBpdAogICAgICAgIGF0b2IocmVzb2x2ZWROZnRVcmkucmVwbGFjZSgiZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwiLCAiIikpCiAgICAgICkgOiAoCiAgICAgICAgLy8gaWYgaXQgaXNuJ3QgZW5jb2RlZCBhc3N1bWUgaXQgaXMgYSBKU09OIHN0cmluZywgYnV0IGl0IGNvdWxkIGJlIGFueXRoaW5nIChpdCB3aWxsIGVycm9yIGlmIGl0IGlzKQogICAgICAgIHJlc29sdmVkTmZ0VXJpCiAgICAgICk7CiAgICAgIGNvbnN0IGRlY29kZWQgPSBKU09OLnBhcnNlKGVuY29kZWRKc29uKTsKICAgICAgcmV0dXJuIHBhcnNlQXZhdGFyVXJpKHsgdXJpOiBnZXRKc29uSW1hZ2UoZGVjb2RlZCksIGdhdGV3YXlVcmxzIH0pOwogICAgfQogICAgbGV0IHVyaVRva2VuSWQgPSBuZnQudG9rZW5JRDsKICAgIGlmIChuZnQubmFtZXNwYWNlID09PSAiZXJjMTE1NSIpCiAgICAgIHVyaVRva2VuSWQgPSB1cmlUb2tlbklkLnJlcGxhY2UoIjB4IiwgIiIpLnBhZFN0YXJ0KDY0LCAiMCIpOwogICAgcmV0dXJuIGdldE1ldGFkYXRhQXZhdGFyVXJpKHsKICAgICAgZ2F0ZXdheVVybHMsCiAgICAgIHVyaTogcmVzb2x2ZWROZnRVcmkucmVwbGFjZSgvKD86MHgpP3tpZH0vLCB1cmlUb2tlbklkKQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvZW5zL2dldEVuc1RleHQuanMKICBpbml0X2FiaXMoKTsKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2dldENoYWluQ29udHJhY3RBZGRyZXNzKCk7CiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldEVuc1RleHQoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZywgbmFtZSwga2V5LCBnYXRld2F5VXJscywgc3RyaWN0LCB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3M6IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc18gfSkgewogICAgbGV0IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyA9IHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzc187CiAgICBpZiAoIXVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcykgewogICAgICBpZiAoIWNsaWVudC5jaGFpbikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNsaWVudCBjaGFpbiBub3QgY29uZmlndXJlZC4gdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzIGlzIHJlcXVpcmVkLiIpOwogICAgICB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgPSBnZXRDaGFpbkNvbnRyYWN0QWRkcmVzcyh7CiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgY2hhaW46IGNsaWVudC5jaGFpbiwKICAgICAgICBjb250cmFjdDogImVuc1VuaXZlcnNhbFJlc29sdmVyIgogICAgICB9KTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlYWRDb250cmFjdFBhcmFtZXRlcnMgPSB7CiAgICAgICAgYWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzLAogICAgICAgIGFiaTogdW5pdmVyc2FsUmVzb2x2ZXJSZXNvbHZlQWJpLAogICAgICAgIGZ1bmN0aW9uTmFtZTogInJlc29sdmUiLAogICAgICAgIGFyZ3M6IFsKICAgICAgICAgIHRvSGV4KHBhY2tldFRvQnl0ZXMobmFtZSkpLAogICAgICAgICAgZW5jb2RlRnVuY3Rpb25EYXRhKHsKICAgICAgICAgICAgYWJpOiB0ZXh0UmVzb2x2ZXJBYmksCiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogInRleHQiLAogICAgICAgICAgICBhcmdzOiBbbmFtZWhhc2gobmFtZSksIGtleV0KICAgICAgICAgIH0pCiAgICAgICAgXSwKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBibG9ja1RhZwogICAgICB9OwogICAgICBjb25zdCByZWFkQ29udHJhY3RBY3Rpb24gPSBnZXRBY3Rpb24oY2xpZW50LCByZWFkQ29udHJhY3QsICJyZWFkQ29udHJhY3QiKTsKICAgICAgY29uc3QgcmVzID0gZ2F0ZXdheVVybHMgPyBhd2FpdCByZWFkQ29udHJhY3RBY3Rpb24oewogICAgICAgIC4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMsCiAgICAgICAgYXJnczogWy4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMuYXJncywgZ2F0ZXdheVVybHNdCiAgICAgIH0pIDogYXdhaXQgcmVhZENvbnRyYWN0QWN0aW9uKHJlYWRDb250cmFjdFBhcmFtZXRlcnMpOwogICAgICBpZiAocmVzWzBdID09PSAiMHgiKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCByZWNvcmQgPSBkZWNvZGVGdW5jdGlvblJlc3VsdCh7CiAgICAgICAgYWJpOiB0ZXh0UmVzb2x2ZXJBYmksCiAgICAgICAgZnVuY3Rpb25OYW1lOiAidGV4dCIsCiAgICAgICAgZGF0YTogcmVzWzBdCiAgICAgIH0pOwogICAgICByZXR1cm4gcmVjb3JkID09PSAiIiA/IG51bGwgOiByZWNvcmQ7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgaWYgKHN0cmljdCkKICAgICAgICB0aHJvdyBlcnI7CiAgICAgIGlmIChpc051bGxVbml2ZXJzYWxSZXNvbHZlckVycm9yKGVyciwgInJlc29sdmUiKSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgdGhyb3cgZXJyOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2Vucy9nZXRFbnNBdmF0YXIuanMKICBhc3luYyBmdW5jdGlvbiBnZXRFbnNBdmF0YXIoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZywgYXNzZXRHYXRld2F5VXJscywgbmFtZSwgZ2F0ZXdheVVybHMsIHN0cmljdCwgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzIH0pIHsKICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEVuc1RleHQsICJnZXRFbnNUZXh0IikoewogICAgICBibG9ja051bWJlciwKICAgICAgYmxvY2tUYWcsCiAgICAgIGtleTogImF2YXRhciIsCiAgICAgIG5hbWUsCiAgICAgIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcywKICAgICAgZ2F0ZXdheVVybHMsCiAgICAgIHN0cmljdAogICAgfSk7CiAgICBpZiAoIXJlY29yZCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB0cnkgewogICAgICByZXR1cm4gYXdhaXQgcGFyc2VBdmF0YXJSZWNvcmQoY2xpZW50LCB7CiAgICAgICAgcmVjb3JkLAogICAgICAgIGdhdGV3YXlVcmxzOiBhc3NldEdhdGV3YXlVcmxzCiAgICAgIH0pOwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2Vucy9nZXRFbnNOYW1lLmpzCiAgaW5pdF9hYmlzKCk7CiAgaW5pdF9nZXRDaGFpbkNvbnRyYWN0QWRkcmVzcygpOwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRFbnNOYW1lKGNsaWVudCwgeyBhZGRyZXNzLCBibG9ja051bWJlciwgYmxvY2tUYWcsIGdhdGV3YXlVcmxzLCBzdHJpY3QsIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzXyB9KSB7CiAgICBsZXQgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzID0gdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzXzsKICAgIGlmICghdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzKSB7CiAgICAgIGlmICghY2xpZW50LmNoYWluKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiY2xpZW50IGNoYWluIG5vdCBjb25maWd1cmVkLiB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgaXMgcmVxdWlyZWQuIik7CiAgICAgIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyA9IGdldENoYWluQ29udHJhY3RBZGRyZXNzKHsKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBjaGFpbjogY2xpZW50LmNoYWluLAogICAgICAgIGNvbnRyYWN0OiAiZW5zVW5pdmVyc2FsUmVzb2x2ZXIiCiAgICAgIH0pOwogICAgfQogICAgY29uc3QgcmV2ZXJzZU5vZGUgPSBgJHthZGRyZXNzLnRvTG93ZXJDYXNlKCkuc3Vic3RyaW5nKDIpfS5hZGRyLnJldmVyc2VgOwogICAgdHJ5IHsKICAgICAgY29uc3QgcmVhZENvbnRyYWN0UGFyYW1ldGVycyA9IHsKICAgICAgICBhZGRyZXNzOiB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MsCiAgICAgICAgYWJpOiB1bml2ZXJzYWxSZXNvbHZlclJldmVyc2VBYmksCiAgICAgICAgZnVuY3Rpb25OYW1lOiAicmV2ZXJzZSIsCiAgICAgICAgYXJnczogW3RvSGV4KHBhY2tldFRvQnl0ZXMocmV2ZXJzZU5vZGUpKV0sCiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgYmxvY2tUYWcKICAgICAgfTsKICAgICAgY29uc3QgcmVhZENvbnRyYWN0QWN0aW9uID0gZ2V0QWN0aW9uKGNsaWVudCwgcmVhZENvbnRyYWN0LCAicmVhZENvbnRyYWN0Iik7CiAgICAgIGNvbnN0IFtuYW1lLCByZXNvbHZlZEFkZHJlc3NdID0gZ2F0ZXdheVVybHMgPyBhd2FpdCByZWFkQ29udHJhY3RBY3Rpb24oewogICAgICAgIC4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMsCiAgICAgICAgYXJnczogWy4uLnJlYWRDb250cmFjdFBhcmFtZXRlcnMuYXJncywgZ2F0ZXdheVVybHNdCiAgICAgIH0pIDogYXdhaXQgcmVhZENvbnRyYWN0QWN0aW9uKHJlYWRDb250cmFjdFBhcmFtZXRlcnMpOwogICAgICBpZiAoYWRkcmVzcy50b0xvd2VyQ2FzZSgpICE9PSByZXNvbHZlZEFkZHJlc3MudG9Mb3dlckNhc2UoKSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIG5hbWU7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgaWYgKHN0cmljdCkKICAgICAgICB0aHJvdyBlcnI7CiAgICAgIGlmIChpc051bGxVbml2ZXJzYWxSZXNvbHZlckVycm9yKGVyciwgInJldmVyc2UiKSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgdGhyb3cgZXJyOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL2Vucy9nZXRFbnNSZXNvbHZlci5qcwogIGluaXRfZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0RW5zUmVzb2x2ZXIoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBibG9ja1RhZywgbmFtZSwgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzOiB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3NfIH0pIHsKICAgIGxldCB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MgPSB1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3NfOwogICAgaWYgKCF1bml2ZXJzYWxSZXNvbHZlckFkZHJlc3MpIHsKICAgICAgaWYgKCFjbGllbnQuY2hhaW4pCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJjbGllbnQgY2hhaW4gbm90IGNvbmZpZ3VyZWQuIHVuaXZlcnNhbFJlc29sdmVyQWRkcmVzcyBpcyByZXF1aXJlZC4iKTsKICAgICAgdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzID0gZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoewogICAgICAgIGJsb2NrTnVtYmVyLAogICAgICAgIGNoYWluOiBjbGllbnQuY2hhaW4sCiAgICAgICAgY29udHJhY3Q6ICJlbnNVbml2ZXJzYWxSZXNvbHZlciIKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBbcmVzb2x2ZXJBZGRyZXNzXSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHJlYWRDb250cmFjdCwgInJlYWRDb250cmFjdCIpKHsKICAgICAgYWRkcmVzczogdW5pdmVyc2FsUmVzb2x2ZXJBZGRyZXNzLAogICAgICBhYmk6IFsKICAgICAgICB7CiAgICAgICAgICBpbnB1dHM6IFt7IHR5cGU6ICJieXRlcyIgfV0sCiAgICAgICAgICBuYW1lOiAiZmluZFJlc29sdmVyIiwKICAgICAgICAgIG91dHB1dHM6IFt7IHR5cGU6ICJhZGRyZXNzIiB9LCB7IHR5cGU6ICJieXRlczMyIiB9XSwKICAgICAgICAgIHN0YXRlTXV0YWJpbGl0eTogInZpZXciLAogICAgICAgICAgdHlwZTogImZ1bmN0aW9uIgogICAgICAgIH0KICAgICAgXSwKICAgICAgZnVuY3Rpb25OYW1lOiAiZmluZFJlc29sdmVyIiwKICAgICAgYXJnczogW3RvSGV4KHBhY2tldFRvQnl0ZXMobmFtZSkpXSwKICAgICAgYmxvY2tOdW1iZXIsCiAgICAgIGJsb2NrVGFnCiAgICB9KTsKICAgIHJldHVybiByZXNvbHZlckFkZHJlc3M7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvZGVjb3JhdG9ycy9wdWJsaWMuanMKICBpbml0X2NhbGwoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9jcmVhdGVCbG9ja0ZpbHRlci5qcwogIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJsb2NrRmlsdGVyKGNsaWVudCkgewogICAgY29uc3QgZ2V0UmVxdWVzdCA9IGNyZWF0ZUZpbHRlclJlcXVlc3RTY29wZShjbGllbnQsIHsKICAgICAgbWV0aG9kOiAiZXRoX25ld0Jsb2NrRmlsdGVyIgogICAgfSk7CiAgICBjb25zdCBpZCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX25ld0Jsb2NrRmlsdGVyIgogICAgfSk7CiAgICByZXR1cm4geyBpZCwgcmVxdWVzdDogZ2V0UmVxdWVzdChpZCksIHR5cGU6ICJibG9jayIgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvY3JlYXRlRXZlbnRGaWx0ZXIuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRXZlbnRGaWx0ZXIoY2xpZW50LCB7IGFkZHJlc3MsIGFyZ3MsIGV2ZW50LCBldmVudHM6IGV2ZW50c18sIGZyb21CbG9jaywgc3RyaWN0LCB0b0Jsb2NrIH0gPSB7fSkgewogICAgY29uc3QgZXZlbnRzID0gZXZlbnRzXyA/PyAoZXZlbnQgPyBbZXZlbnRdIDogdm9pZCAwKTsKICAgIGNvbnN0IGdldFJlcXVlc3QgPSBjcmVhdGVGaWx0ZXJSZXF1ZXN0U2NvcGUoY2xpZW50LCB7CiAgICAgIG1ldGhvZDogImV0aF9uZXdGaWx0ZXIiCiAgICB9KTsKICAgIGxldCB0b3BpY3MgPSBbXTsKICAgIGlmIChldmVudHMpIHsKICAgICAgY29uc3QgZW5jb2RlZCA9IGV2ZW50cy5mbGF0TWFwKChldmVudDIpID0+IGVuY29kZUV2ZW50VG9waWNzKHsKICAgICAgICBhYmk6IFtldmVudDJdLAogICAgICAgIGV2ZW50TmFtZTogZXZlbnQyLm5hbWUsCiAgICAgICAgYXJncwogICAgICB9KSk7CiAgICAgIHRvcGljcyA9IFtlbmNvZGVkXTsKICAgICAgaWYgKGV2ZW50KQogICAgICAgIHRvcGljcyA9IHRvcGljc1swXTsKICAgIH0KICAgIGNvbnN0IGlkID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfbmV3RmlsdGVyIiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgewogICAgICAgICAgYWRkcmVzcywKICAgICAgICAgIGZyb21CbG9jazogdHlwZW9mIGZyb21CbG9jayA9PT0gImJpZ2ludCIgPyBudW1iZXJUb0hleChmcm9tQmxvY2spIDogZnJvbUJsb2NrLAogICAgICAgICAgdG9CbG9jazogdHlwZW9mIHRvQmxvY2sgPT09ICJiaWdpbnQiID8gbnVtYmVyVG9IZXgodG9CbG9jaykgOiB0b0Jsb2NrLAogICAgICAgICAgLi4udG9waWNzLmxlbmd0aCA/IHsgdG9waWNzIH0gOiB7fQogICAgICAgIH0KICAgICAgXQogICAgfSk7CiAgICByZXR1cm4gewogICAgICBhYmk6IGV2ZW50cywKICAgICAgYXJncywKICAgICAgZXZlbnROYW1lOiBldmVudCA/IGV2ZW50Lm5hbWUgOiB2b2lkIDAsCiAgICAgIGZyb21CbG9jaywKICAgICAgaWQsCiAgICAgIHJlcXVlc3Q6IGdldFJlcXVlc3QoaWQpLAogICAgICBzdHJpY3Q6IEJvb2xlYW4oc3RyaWN0KSwKICAgICAgdG9CbG9jaywKICAgICAgdHlwZTogImV2ZW50IgogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvY3JlYXRlUGVuZGluZ1RyYW5zYWN0aW9uRmlsdGVyLmpzCiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlUGVuZGluZ1RyYW5zYWN0aW9uRmlsdGVyKGNsaWVudCkgewogICAgY29uc3QgZ2V0UmVxdWVzdCA9IGNyZWF0ZUZpbHRlclJlcXVlc3RTY29wZShjbGllbnQsIHsKICAgICAgbWV0aG9kOiAiZXRoX25ld1BlbmRpbmdUcmFuc2FjdGlvbkZpbHRlciIKICAgIH0pOwogICAgY29uc3QgaWQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9uZXdQZW5kaW5nVHJhbnNhY3Rpb25GaWx0ZXIiCiAgICB9KTsKICAgIHJldHVybiB7IGlkLCByZXF1ZXN0OiBnZXRSZXF1ZXN0KGlkKSwgdHlwZTogInRyYW5zYWN0aW9uIiB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRCbG9iQmFzZUZlZS5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldEJsb2JCYXNlRmVlKGNsaWVudCkgewogICAgY29uc3QgYmFzZUZlZSA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2Jsb2JCYXNlRmVlIgogICAgfSk7CiAgICByZXR1cm4gQmlnSW50KGJhc2VGZWUpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRCbG9ja1RyYW5zYWN0aW9uQ291bnQuanMKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50KGNsaWVudCwgeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyLCBibG9ja1RhZyA9ICJsYXRlc3QiIH0gPSB7fSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciAhPT0gdm9pZCAwID8gbnVtYmVyVG9IZXgoYmxvY2tOdW1iZXIpIDogdm9pZCAwOwogICAgbGV0IGNvdW50OwogICAgaWYgKGJsb2NrSGFzaCkgewogICAgICBjb3VudCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50QnlIYXNoIiwKICAgICAgICBwYXJhbXM6IFtibG9ja0hhc2hdCiAgICAgIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgfSBlbHNlIHsKICAgICAgY291bnQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXRoX2dldEJsb2NrVHJhbnNhY3Rpb25Db3VudEJ5TnVtYmVyIiwKICAgICAgICBwYXJhbXM6IFtibG9ja051bWJlckhleCB8fCBibG9ja1RhZ10KICAgICAgfSwgeyBkZWR1cGU6IEJvb2xlYW4oYmxvY2tOdW1iZXJIZXgpIH0pOwogICAgfQogICAgcmV0dXJuIGhleFRvTnVtYmVyKGNvdW50KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0Q29kZS5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRDb2RlKGNsaWVudCwgeyBhZGRyZXNzLCBibG9ja051bWJlciwgYmxvY2tUYWcgPSAibGF0ZXN0IiB9KSB7CiAgICBjb25zdCBibG9ja051bWJlckhleCA9IGJsb2NrTnVtYmVyICE9PSB2b2lkIDAgPyBudW1iZXJUb0hleChibG9ja051bWJlcikgOiB2b2lkIDA7CiAgICBjb25zdCBoZXggPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRDb2RlIiwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWddCiAgICB9LCB7IGRlZHVwZTogQm9vbGVhbihibG9ja051bWJlckhleCkgfSk7CiAgICBpZiAoaGV4ID09PSAiMHgiKQogICAgICByZXR1cm4gdm9pZCAwOwogICAgcmV0dXJuIGhleDsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0RmVlSGlzdG9yeS5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9mb3JtYXR0ZXJzL2ZlZUhpc3RvcnkuanMKICBmdW5jdGlvbiBmb3JtYXRGZWVIaXN0b3J5KGZlZUhpc3RvcnkpIHsKICAgIHJldHVybiB7CiAgICAgIGJhc2VGZWVQZXJHYXM6IGZlZUhpc3RvcnkuYmFzZUZlZVBlckdhcy5tYXAoKHZhbHVlKSA9PiBCaWdJbnQodmFsdWUpKSwKICAgICAgZ2FzVXNlZFJhdGlvOiBmZWVIaXN0b3J5Lmdhc1VzZWRSYXRpbywKICAgICAgb2xkZXN0QmxvY2s6IEJpZ0ludChmZWVIaXN0b3J5Lm9sZGVzdEJsb2NrKSwKICAgICAgcmV3YXJkOiBmZWVIaXN0b3J5LnJld2FyZD8ubWFwKChyZXdhcmQpID0+IHJld2FyZC5tYXAoKHZhbHVlKSA9PiBCaWdJbnQodmFsdWUpKSkKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEZlZUhpc3RvcnkuanMKICBhc3luYyBmdW5jdGlvbiBnZXRGZWVIaXN0b3J5KGNsaWVudCwgeyBibG9ja0NvdW50LCBibG9ja051bWJlciwgYmxvY2tUYWcgPSAibGF0ZXN0IiwgcmV3YXJkUGVyY2VudGlsZXMgfSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgIGNvbnN0IGZlZUhpc3RvcnkgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9mZWVIaXN0b3J5IiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgbnVtYmVyVG9IZXgoYmxvY2tDb3VudCksCiAgICAgICAgYmxvY2tOdW1iZXJIZXggfHwgYmxvY2tUYWcsCiAgICAgICAgcmV3YXJkUGVyY2VudGlsZXMKICAgICAgXQogICAgfSwgeyBkZWR1cGU6IEJvb2xlYW4oYmxvY2tOdW1iZXJIZXgpIH0pOwogICAgcmV0dXJuIGZvcm1hdEZlZUhpc3RvcnkoZmVlSGlzdG9yeSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldEZpbHRlckxvZ3MuanMKICBhc3luYyBmdW5jdGlvbiBnZXRGaWx0ZXJMb2dzKF9jbGllbnQsIHsgZmlsdGVyIH0pIHsKICAgIGNvbnN0IHN0cmljdCA9IGZpbHRlci5zdHJpY3QgPz8gZmFsc2U7CiAgICBjb25zdCBsb2dzID0gYXdhaXQgZmlsdGVyLnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfZ2V0RmlsdGVyTG9ncyIsCiAgICAgIHBhcmFtczogW2ZpbHRlci5pZF0KICAgIH0pOwogICAgY29uc3QgZm9ybWF0dGVkTG9ncyA9IGxvZ3MubWFwKChsb2cpID0+IGZvcm1hdExvZyhsb2cpKTsKICAgIGlmICghZmlsdGVyLmFiaSkKICAgICAgcmV0dXJuIGZvcm1hdHRlZExvZ3M7CiAgICByZXR1cm4gcGFyc2VFdmVudExvZ3MoewogICAgICBhYmk6IGZpbHRlci5hYmksCiAgICAgIGxvZ3M6IGZvcm1hdHRlZExvZ3MsCiAgICAgIHN0cmljdAogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldFByb29mLmpzCiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2NoYWluL2RlZmluZUNoYWluLmpzCiAgZnVuY3Rpb24gZGVmaW5lQ2hhaW4oY2hhaW4pIHsKICAgIHJldHVybiB7CiAgICAgIGZvcm1hdHRlcnM6IHZvaWQgMCwKICAgICAgZmVlczogdm9pZCAwLAogICAgICBzZXJpYWxpemVyczogdm9pZCAwLAogICAgICAuLi5jaGFpbgogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvY2hhaW4vZXh0cmFjdENoYWluLmpzCiAgZnVuY3Rpb24gZXh0cmFjdENoYWluKHsgY2hhaW5zLCBpZCB9KSB7CiAgICByZXR1cm4gY2hhaW5zLmZpbmQoKGNoYWluKSA9PiBjaGFpbi5pZCA9PT0gaWQpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9yZWdleC5qcwogIHZhciBhcnJheVJlZ2V4ID0gL14oLiopXFsoWzAtOV0qKVxdJC87CiAgdmFyIGJ5dGVzUmVnZXgyID0gL15ieXRlcyhbMS05XXwxWzAtOV18MlswLTldfDNbMC0yXSk/JC87CiAgdmFyIGludGVnZXJSZWdleDIgPSAvXih1P2ludCkoOHwxNnwyNHwzMnw0MHw0OHw1Nnw2NHw3Mnw4MHw4OHw5NnwxMDR8MTEyfDEyMHwxMjh8MTM2fDE0NHwxNTJ8MTYwfDE2OHwxNzZ8MTg0fDE5MnwyMDB8MjA4fDIxNnwyMjR8MjMyfDI0MHwyNDh8MjU2KT8kLzsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ycGMvd2ViU29ja2V0LmpzCiAgaW5pdF9yZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcnBjL3NvY2tldC5qcwogIGluaXRfcmVxdWVzdCgpOwogIGluaXRfY3JlYXRlQmF0Y2hTY2hlZHVsZXIoKTsKICB2YXIgc29ja2V0Q2xpZW50Q2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldFNvY2tldFJwY0NsaWVudChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGdldFNvY2tldDogZ2V0U29ja2V0Miwga2VlcEFsaXZlID0gdHJ1ZSwga2V5ID0gInNvY2tldCIsIHJlY29ubmVjdCA9IHRydWUsIHVybCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHsgaW50ZXJ2YWw6IGtlZXBBbGl2ZUludGVydmFsID0gM2U0IH0gPSB0eXBlb2Yga2VlcEFsaXZlID09PSAib2JqZWN0IiA/IGtlZXBBbGl2ZSA6IHt9OwogICAgY29uc3QgeyBhdHRlbXB0cyA9IDUsIGRlbGF5ID0gMmUzIH0gPSB0eXBlb2YgcmVjb25uZWN0ID09PSAib2JqZWN0IiA/IHJlY29ubmVjdCA6IHt9OwogICAgbGV0IHNvY2tldENsaWVudCA9IHNvY2tldENsaWVudENhY2hlLmdldChgJHtrZXl9OiR7dXJsfWApOwogICAgaWYgKHNvY2tldENsaWVudCkKICAgICAgcmV0dXJuIHNvY2tldENsaWVudDsKICAgIGxldCByZWNvbm5lY3RDb3VudCA9IDA7CiAgICBjb25zdCB7IHNjaGVkdWxlIH0gPSBjcmVhdGVCYXRjaFNjaGVkdWxlcih7CiAgICAgIGlkOiBgJHtrZXl9OiR7dXJsfWAsCiAgICAgIGZuOiBhc3luYyAoKSA9PiB7CiAgICAgICAgY29uc3QgcmVxdWVzdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIGxldCBlcnJvcjsKICAgICAgICBsZXQgc29ja2V0OwogICAgICAgIGxldCBrZWVwQWxpdmVUaW1lcjsKICAgICAgICBhc3luYyBmdW5jdGlvbiBzZXR1cCgpIHsKICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFNvY2tldDIoewogICAgICAgICAgICBvbkNsb3NlKCkgewogICAgICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cy52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIHJlcXVlc3Qub25FcnJvcj8uKG5ldyBTb2NrZXRDbG9zZWRFcnJvcih7IHVybCB9KSk7CiAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5vbkVycm9yPy4obmV3IFNvY2tldENsb3NlZEVycm9yKHsgdXJsIH0pKTsKICAgICAgICAgICAgICByZXF1ZXN0cy5jbGVhcigpOwogICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMuY2xlYXIoKTsKICAgICAgICAgICAgICBpZiAocmVjb25uZWN0ICYmIHJlY29ubmVjdENvdW50IDwgYXR0ZW1wdHMpCiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgICAgcmVjb25uZWN0Q291bnQrKzsKICAgICAgICAgICAgICAgICAgYXdhaXQgc2V0dXAoKS5jYXRjaChjb25zb2xlLmVycm9yKTsKICAgICAgICAgICAgICAgIH0sIGRlbGF5KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25FcnJvcihlcnJvcl8pIHsKICAgICAgICAgICAgICBlcnJvciA9IGVycm9yXzsKICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMudmFsdWVzKCkpCiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9uRXJyb3I/LihlcnJvcik7CiAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkKICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5vbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICAgIHJlcXVlc3RzLmNsZWFyKCk7CiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5jbGVhcigpOwogICAgICAgICAgICAgIGlmIChyZWNvbm5lY3QgJiYgcmVjb25uZWN0Q291bnQgPCBhdHRlbXB0cykKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgICByZWNvbm5lY3RDb3VudCsrOwogICAgICAgICAgICAgICAgICBhd2FpdCBzZXR1cCgpLmNhdGNoKGNvbnNvbGUuZXJyb3IpOwogICAgICAgICAgICAgICAgfSwgZGVsYXkpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbk9wZW4oKSB7CiAgICAgICAgICAgICAgZXJyb3IgPSB2b2lkIDA7CiAgICAgICAgICAgICAgcmVjb25uZWN0Q291bnQgPSAwOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvblJlc3BvbnNlKGRhdGEpIHsKICAgICAgICAgICAgICBjb25zdCBpc1N1YnNjcmlwdGlvbiA9IGRhdGEubWV0aG9kID09PSAiZXRoX3N1YnNjcmlwdGlvbiI7CiAgICAgICAgICAgICAgY29uc3QgaWQgPSBpc1N1YnNjcmlwdGlvbiA/IGRhdGEucGFyYW1zLnN1YnNjcmlwdGlvbiA6IGRhdGEuaWQ7CiAgICAgICAgICAgICAgY29uc3QgY2FjaGUgPSBpc1N1YnNjcmlwdGlvbiA/IHN1YnNjcmlwdGlvbnMgOiByZXF1ZXN0czsKICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGNhY2hlLmdldChpZCk7CiAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKQogICAgICAgICAgICAgICAgY2FsbGJhY2sub25SZXNwb25zZShkYXRhKTsKICAgICAgICAgICAgICBpZiAoIWlzU3Vic2NyaXB0aW9uKQogICAgICAgICAgICAgICAgY2FjaGUuZGVsZXRlKGlkKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBzb2NrZXQgPSByZXN1bHQ7CiAgICAgICAgICBpZiAoa2VlcEFsaXZlKSB7CiAgICAgICAgICAgIGlmIChrZWVwQWxpdmVUaW1lcikKICAgICAgICAgICAgICBjbGVhckludGVydmFsKGtlZXBBbGl2ZVRpbWVyKTsKICAgICAgICAgICAga2VlcEFsaXZlVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiBzb2NrZXQucGluZz8uKCksIGtlZXBBbGl2ZUludGVydmFsKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHNldHVwKCk7CiAgICAgICAgZXJyb3IgPSB2b2lkIDA7CiAgICAgICAgc29ja2V0Q2xpZW50ID0gewogICAgICAgICAgY2xvc2UoKSB7CiAgICAgICAgICAgIGtlZXBBbGl2ZVRpbWVyICYmIGNsZWFySW50ZXJ2YWwoa2VlcEFsaXZlVGltZXIpOwogICAgICAgICAgICBzb2NrZXQuY2xvc2UoKTsKICAgICAgICAgICAgc29ja2V0Q2xpZW50Q2FjaGUuZGVsZXRlKGAke2tleX06JHt1cmx9YCk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0IHNvY2tldCgpIHsKICAgICAgICAgICAgcmV0dXJuIHNvY2tldDsKICAgICAgICAgIH0sCiAgICAgICAgICByZXF1ZXN0KHsgYm9keSwgb25FcnJvciwgb25SZXNwb25zZSB9KSB7CiAgICAgICAgICAgIGlmIChlcnJvciAmJiBvbkVycm9yKQogICAgICAgICAgICAgIG9uRXJyb3IoZXJyb3IpOwogICAgICAgICAgICBjb25zdCBpZCA9IGJvZHkuaWQgPz8gaWRDYWNoZS50YWtlKCk7CiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gKHJlc3BvbnNlKSA9PiB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZS5pZCA9PT0gIm51bWJlciIgJiYgaWQgIT09IHJlc3BvbnNlLmlkKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIGlmIChib2R5Lm1ldGhvZCA9PT0gImV0aF9zdWJzY3JpYmUiICYmIHR5cGVvZiByZXNwb25zZS5yZXN1bHQgPT09ICJzdHJpbmciKQogICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5zZXQocmVzcG9uc2UucmVzdWx0LCB7CiAgICAgICAgICAgICAgICAgIG9uUmVzcG9uc2U6IGNhbGxiYWNrLAogICAgICAgICAgICAgICAgICBvbkVycm9yCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBpZiAoYm9keS5tZXRob2QgPT09ICJldGhfdW5zdWJzY3JpYmUiKQogICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5kZWxldGUoYm9keS5wYXJhbXM/LlswXSk7CiAgICAgICAgICAgICAgb25SZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHJlcXVlc3RzLnNldChpZCwgeyBvblJlc3BvbnNlOiBjYWxsYmFjaywgb25FcnJvciB9KTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBzb2NrZXQucmVxdWVzdCh7CiAgICAgICAgICAgICAgICBib2R5OiB7CiAgICAgICAgICAgICAgICAgIGpzb25ycGM6ICIyLjAiLAogICAgICAgICAgICAgICAgICBpZCwKICAgICAgICAgICAgICAgICAgLi4uYm9keQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGNhdGNoIChlcnJvcjIpIHsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHJlcXVlc3RBc3luYyh7IGJvZHksIHRpbWVvdXQgPSAxZTQgfSkgewogICAgICAgICAgICByZXR1cm4gd2l0aFRpbWVvdXQoKCkgPT4gbmV3IFByb21pc2UoKG9uUmVzcG9uc2UsIG9uRXJyb3IpID0+IHRoaXMucmVxdWVzdCh7CiAgICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgICBvbkVycm9yLAogICAgICAgICAgICAgIG9uUmVzcG9uc2UKICAgICAgICAgICAgfSkpLCB7CiAgICAgICAgICAgICAgZXJyb3JJbnN0YW5jZTogbmV3IFRpbWVvdXRFcnJvcih7IGJvZHksIHVybCB9KSwKICAgICAgICAgICAgICB0aW1lb3V0CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHJlcXVlc3RzLAogICAgICAgICAgc3Vic2NyaXB0aW9ucywKICAgICAgICAgIHVybAogICAgICAgIH07CiAgICAgICAgc29ja2V0Q2xpZW50Q2FjaGUuc2V0KGAke2tleX06JHt1cmx9YCwgc29ja2V0Q2xpZW50KTsKICAgICAgICByZXR1cm4gW3NvY2tldENsaWVudF07CiAgICAgIH0KICAgIH0pOwogICAgY29uc3QgW18sIFtzb2NrZXRDbGllbnRfXV0gPSBhd2FpdCBzY2hlZHVsZSgpOwogICAgcmV0dXJuIHNvY2tldENsaWVudF87CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3JwYy93ZWJTb2NrZXQuanMKICBhc3luYyBmdW5jdGlvbiBnZXRXZWJTb2NrZXRScGNDbGllbnQodXJsLCBvcHRpb25zID0ge30pIHsKICAgIGNvbnN0IHsga2VlcEFsaXZlLCByZWNvbm5lY3QgfSA9IG9wdGlvbnM7CiAgICByZXR1cm4gZ2V0U29ja2V0UnBjQ2xpZW50KHsKICAgICAgYXN5bmMgZ2V0U29ja2V0KHsgb25DbG9zZSwgb25FcnJvciwgb25PcGVuLCBvblJlc3BvbnNlIH0pIHsKICAgICAgICBjb25zdCBXZWJTb2NrZXQzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiAoaW5pdF9uYXRpdmUoKSwgbmF0aXZlX2V4cG9ydHMpKS50aGVuKChtb2R1bGUpID0+IG1vZHVsZS5XZWJTb2NrZXQpOwogICAgICAgIGNvbnN0IHNvY2tldCA9IG5ldyBXZWJTb2NrZXQzKHVybCk7CiAgICAgICAgZnVuY3Rpb24gb25DbG9zZV8oKSB7CiAgICAgICAgICBvbkNsb3NlKCk7CiAgICAgICAgICBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCBvbkNsb3NlXyk7CiAgICAgICAgICBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG9uTWVzc2FnZSk7CiAgICAgICAgICBzb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBvbkVycm9yKTsKICAgICAgICAgIHNvY2tldC5yZW1vdmVFdmVudExpc3RlbmVyKCJvcGVuIiwgb25PcGVuKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gb25NZXNzYWdlKHsgZGF0YSB9KSB7CiAgICAgICAgICBvblJlc3BvbnNlKEpTT04ucGFyc2UoZGF0YSkpOwogICAgICAgIH0KICAgICAgICBzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCBvbkNsb3NlXyk7CiAgICAgICAgc29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBvbk1lc3NhZ2UpOwogICAgICAgIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsIG9uRXJyb3IpOwogICAgICAgIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKCJvcGVuIiwgb25PcGVuKTsKICAgICAgICBpZiAoc29ja2V0LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldDMuQ09OTkVDVElORykgewogICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgICAgICBpZiAoIXNvY2tldCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHNvY2tldC5vbm9wZW4gPSByZXNvbHZlOwogICAgICAgICAgICBzb2NrZXQub25lcnJvciA9IHJlamVjdDsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb25zdCB7IGNsb3NlOiBjbG9zZV8gfSA9IHNvY2tldDsKICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzb2NrZXQsIHsKICAgICAgICAgIGNsb3NlKCkgewogICAgICAgICAgICBjbG9zZV8uYmluZChzb2NrZXQpKCk7CiAgICAgICAgICAgIG9uQ2xvc2UoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBwaW5nKCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGlmIChzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NFRCB8fCBzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NJTkcpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0UmVxdWVzdEVycm9yKHsKICAgICAgICAgICAgICAgICAgdXJsOiBzb2NrZXQudXJsLAogICAgICAgICAgICAgICAgICBjYXVzZTogbmV3IFNvY2tldENsb3NlZEVycm9yKHsgdXJsOiBzb2NrZXQudXJsIH0pCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBjb25zdCBib2R5ID0gewogICAgICAgICAgICAgICAganNvbnJwYzogIjIuMCIsCiAgICAgICAgICAgICAgICBtZXRob2Q6ICJuZXRfdmVyc2lvbiIsCiAgICAgICAgICAgICAgICBwYXJhbXM6IFtdCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBzb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeShib2R5KSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgb25FcnJvcihlcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICByZXF1ZXN0KHsgYm9keSB9KSB7CiAgICAgICAgICAgIGlmIChzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NFRCB8fCBzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0LkNMT1NJTkcpCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldFJlcXVlc3RFcnJvcih7CiAgICAgICAgICAgICAgICBib2R5LAogICAgICAgICAgICAgICAgdXJsOiBzb2NrZXQudXJsLAogICAgICAgICAgICAgICAgY2F1c2U6IG5ldyBTb2NrZXRDbG9zZWRFcnJvcih7IHVybDogc29ja2V0LnVybCB9KQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoYm9keSkpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9LAogICAgICBrZWVwQWxpdmUsCiAgICAgIHJlY29ubmVjdCwKICAgICAgdXJsCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvcnBjL2NvbXBhdC5qcwogIGFzeW5jIGZ1bmN0aW9uIGdldFNvY2tldCh1cmwpIHsKICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldFdlYlNvY2tldFJwY0NsaWVudCh1cmwpOwogICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oY2xpZW50LnNvY2tldCwgewogICAgICByZXF1ZXN0czogY2xpZW50LnJlcXVlc3RzLAogICAgICBzdWJzY3JpcHRpb25zOiBjbGllbnQuc3Vic2NyaXB0aW9ucwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3R5cGVkRGF0YS5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL2hhc2hUeXBlZERhdGEuanMKICBpbml0X2VuY29kZUFiaVBhcmFtZXRlcnMoKTsKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X2tlY2NhazI1NigpOwogIGZ1bmN0aW9uIGhhc2hUeXBlZERhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBkb21haW4gPSB7fSwgbWVzc2FnZSwgcHJpbWFyeVR5cGUgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCB0eXBlcyA9IHsKICAgICAgRUlQNzEyRG9tYWluOiBnZXRUeXBlc0ZvckVJUDcxMkRvbWFpbih7IGRvbWFpbiB9KSwKICAgICAgLi4ucGFyYW1ldGVycy50eXBlcwogICAgfTsKICAgIHZhbGlkYXRlVHlwZWREYXRhKHsKICAgICAgZG9tYWluLAogICAgICBtZXNzYWdlLAogICAgICBwcmltYXJ5VHlwZSwKICAgICAgdHlwZXMKICAgIH0pOwogICAgY29uc3QgcGFydHMgPSBbIjB4MTkwMSJdOwogICAgaWYgKGRvbWFpbikKICAgICAgcGFydHMucHVzaChoYXNoRG9tYWluKHsKICAgICAgICBkb21haW4sCiAgICAgICAgdHlwZXMKICAgICAgfSkpOwogICAgaWYgKHByaW1hcnlUeXBlICE9PSAiRUlQNzEyRG9tYWluIikKICAgICAgcGFydHMucHVzaChoYXNoU3RydWN0KHsKICAgICAgICBkYXRhOiBtZXNzYWdlLAogICAgICAgIHByaW1hcnlUeXBlLAogICAgICAgIHR5cGVzCiAgICAgIH0pKTsKICAgIHJldHVybiBrZWNjYWsyNTYoY29uY2F0KHBhcnRzKSk7CiAgfQogIGZ1bmN0aW9uIGhhc2hEb21haW4oeyBkb21haW4sIHR5cGVzIH0pIHsKICAgIHJldHVybiBoYXNoU3RydWN0KHsKICAgICAgZGF0YTogZG9tYWluLAogICAgICBwcmltYXJ5VHlwZTogIkVJUDcxMkRvbWFpbiIsCiAgICAgIHR5cGVzCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gaGFzaFN0cnVjdCh7IGRhdGEsIHByaW1hcnlUeXBlLCB0eXBlcyB9KSB7CiAgICBjb25zdCBlbmNvZGVkID0gZW5jb2RlRGF0YSh7CiAgICAgIGRhdGEsCiAgICAgIHByaW1hcnlUeXBlLAogICAgICB0eXBlcwogICAgfSk7CiAgICByZXR1cm4ga2VjY2FrMjU2KGVuY29kZWQpOwogIH0KICBmdW5jdGlvbiBlbmNvZGVEYXRhKHsgZGF0YSwgcHJpbWFyeVR5cGUsIHR5cGVzIH0pIHsKICAgIGNvbnN0IGVuY29kZWRUeXBlcyA9IFt7IHR5cGU6ICJieXRlczMyIiB9XTsKICAgIGNvbnN0IGVuY29kZWRWYWx1ZXMgPSBbaGFzaFR5cGUoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSldOwogICAgZm9yIChjb25zdCBmaWVsZCBvZiB0eXBlc1twcmltYXJ5VHlwZV0pIHsKICAgICAgY29uc3QgW3R5cGUsIHZhbHVlXSA9IGVuY29kZUZpZWxkKHsKICAgICAgICB0eXBlcywKICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLAogICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsCiAgICAgICAgdmFsdWU6IGRhdGFbZmllbGQubmFtZV0KICAgICAgfSk7CiAgICAgIGVuY29kZWRUeXBlcy5wdXNoKHR5cGUpOwogICAgICBlbmNvZGVkVmFsdWVzLnB1c2godmFsdWUpOwogICAgfQogICAgcmV0dXJuIGVuY29kZUFiaVBhcmFtZXRlcnMoZW5jb2RlZFR5cGVzLCBlbmNvZGVkVmFsdWVzKTsKICB9CiAgZnVuY3Rpb24gaGFzaFR5cGUoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSkgewogICAgY29uc3QgZW5jb2RlZEhhc2hUeXBlID0gdG9IZXgoZW5jb2RlVHlwZSh7IHByaW1hcnlUeXBlLCB0eXBlcyB9KSk7CiAgICByZXR1cm4ga2VjY2FrMjU2KGVuY29kZWRIYXNoVHlwZSk7CiAgfQogIGZ1bmN0aW9uIGVuY29kZVR5cGUoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSkgewogICAgbGV0IHJlc3VsdCA9ICIiOwogICAgY29uc3QgdW5zb3J0ZWREZXBzID0gZmluZFR5cGVEZXBlbmRlbmNpZXMoeyBwcmltYXJ5VHlwZSwgdHlwZXMgfSk7CiAgICB1bnNvcnRlZERlcHMuZGVsZXRlKHByaW1hcnlUeXBlKTsKICAgIGNvbnN0IGRlcHMgPSBbcHJpbWFyeVR5cGUsIC4uLkFycmF5LmZyb20odW5zb3J0ZWREZXBzKS5zb3J0KCldOwogICAgZm9yIChjb25zdCB0eXBlIG9mIGRlcHMpIHsKICAgICAgcmVzdWx0ICs9IGAke3R5cGV9KCR7dHlwZXNbdHlwZV0ubWFwKCh7IG5hbWUsIHR5cGU6IHQgfSkgPT4gYCR7dH0gJHtuYW1lfWApLmpvaW4oIiwiKX0pYDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIGZpbmRUeXBlRGVwZW5kZW5jaWVzKHsgcHJpbWFyeVR5cGU6IHByaW1hcnlUeXBlXywgdHlwZXMgfSwgcmVzdWx0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpIHsKICAgIGNvbnN0IG1hdGNoID0gcHJpbWFyeVR5cGVfLm1hdGNoKC9eXHcqL3UpOwogICAgY29uc3QgcHJpbWFyeVR5cGUgPSBtYXRjaD8uWzBdOwogICAgaWYgKHJlc3VsdHMuaGFzKHByaW1hcnlUeXBlKSB8fCB0eXBlc1twcmltYXJ5VHlwZV0gPT09IHZvaWQgMCkgewogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KICAgIHJlc3VsdHMuYWRkKHByaW1hcnlUeXBlKTsKICAgIGZvciAoY29uc3QgZmllbGQgb2YgdHlwZXNbcHJpbWFyeVR5cGVdKSB7CiAgICAgIGZpbmRUeXBlRGVwZW5kZW5jaWVzKHsgcHJpbWFyeVR5cGU6IGZpZWxkLnR5cGUsIHR5cGVzIH0sIHJlc3VsdHMpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQogIGZ1bmN0aW9uIGVuY29kZUZpZWxkKHsgdHlwZXMsIG5hbWUsIHR5cGUsIHZhbHVlIH0pIHsKICAgIGlmICh0eXBlc1t0eXBlXSAhPT0gdm9pZCAwKSB7CiAgICAgIHJldHVybiBbCiAgICAgICAgeyB0eXBlOiAiYnl0ZXMzMiIgfSwKICAgICAgICBrZWNjYWsyNTYoZW5jb2RlRGF0YSh7IGRhdGE6IHZhbHVlLCBwcmltYXJ5VHlwZTogdHlwZSwgdHlwZXMgfSkpCiAgICAgIF07CiAgICB9CiAgICBpZiAodHlwZSA9PT0gImJ5dGVzIikgewogICAgICBjb25zdCBwcmVwZW5kID0gdmFsdWUubGVuZ3RoICUgMiA/ICIwIiA6ICIiOwogICAgICB2YWx1ZSA9IGAweCR7cHJlcGVuZCArIHZhbHVlLnNsaWNlKDIpfWA7CiAgICAgIHJldHVybiBbeyB0eXBlOiAiYnl0ZXMzMiIgfSwga2VjY2FrMjU2KHZhbHVlKV07CiAgICB9CiAgICBpZiAodHlwZSA9PT0gInN0cmluZyIpCiAgICAgIHJldHVybiBbeyB0eXBlOiAiYnl0ZXMzMiIgfSwga2VjY2FrMjU2KHRvSGV4KHZhbHVlKSldOwogICAgaWYgKHR5cGUubGFzdEluZGV4T2YoIl0iKSA9PT0gdHlwZS5sZW5ndGggLSAxKSB7CiAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0eXBlLnNsaWNlKDAsIHR5cGUubGFzdEluZGV4T2YoIlsiKSk7CiAgICAgIGNvbnN0IHR5cGVWYWx1ZVBhaXJzID0gdmFsdWUubWFwKChpdGVtKSA9PiBlbmNvZGVGaWVsZCh7CiAgICAgICAgbmFtZSwKICAgICAgICB0eXBlOiBwYXJzZWRUeXBlLAogICAgICAgIHR5cGVzLAogICAgICAgIHZhbHVlOiBpdGVtCiAgICAgIH0pKTsKICAgICAgcmV0dXJuIFsKICAgICAgICB7IHR5cGU6ICJieXRlczMyIiB9LAogICAgICAgIGtlY2NhazI1NihlbmNvZGVBYmlQYXJhbWV0ZXJzKHR5cGVWYWx1ZVBhaXJzLm1hcCgoW3RdKSA9PiB0KSwgdHlwZVZhbHVlUGFpcnMubWFwKChbLCB2XSkgPT4gdikpKQogICAgICBdOwogICAgfQogICAgcmV0dXJuIFt7IHR5cGUgfSwgdmFsdWVdOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90eXBlZERhdGEuanMKICBpbml0X3N0cmluZ2lmeSgpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZVR5cGVkRGF0YShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGRvbWFpbjogZG9tYWluXywgbWVzc2FnZTogbWVzc2FnZV8sIHByaW1hcnlUeXBlLCB0eXBlcyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IG5vcm1hbGl6ZURhdGEgPSAoc3RydWN0LCBkYXRhXykgPT4gewogICAgICBjb25zdCBkYXRhID0geyAuLi5kYXRhXyB9OwogICAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHN0cnVjdCkgewogICAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSB9ID0gcGFyYW07CiAgICAgICAgaWYgKHR5cGUgPT09ICJhZGRyZXNzIikKICAgICAgICAgIGRhdGFbbmFtZV0gPSBkYXRhW25hbWVdLnRvTG93ZXJDYXNlKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGRhdGE7CiAgICB9OwogICAgY29uc3QgZG9tYWluID0gKCgpID0+IHsKICAgICAgaWYgKCF0eXBlcy5FSVA3MTJEb21haW4pCiAgICAgICAgcmV0dXJuIHt9OwogICAgICBpZiAoIWRvbWFpbl8pCiAgICAgICAgcmV0dXJuIHt9OwogICAgICByZXR1cm4gbm9ybWFsaXplRGF0YSh0eXBlcy5FSVA3MTJEb21haW4sIGRvbWFpbl8pOwogICAgfSkoKTsKICAgIGNvbnN0IG1lc3NhZ2UgPSAoKCkgPT4gewogICAgICBpZiAocHJpbWFyeVR5cGUgPT09ICJFSVA3MTJEb21haW4iKQogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhKHR5cGVzW3ByaW1hcnlUeXBlXSwgbWVzc2FnZV8pOwogICAgfSkoKTsKICAgIHJldHVybiBzdHJpbmdpZnkoeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9KTsKICB9CiAgZnVuY3Rpb24gdmFsaWRhdGVUeXBlZERhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHZhbGlkYXRlRGF0YSA9IChzdHJ1Y3QsIGRhdGEpID0+IHsKICAgICAgZm9yIChjb25zdCBwYXJhbSBvZiBzdHJ1Y3QpIHsKICAgICAgICBjb25zdCB7IG5hbWUsIHR5cGUgfSA9IHBhcmFtOwogICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtuYW1lXTsKICAgICAgICBjb25zdCBpbnRlZ2VyTWF0Y2ggPSB0eXBlLm1hdGNoKGludGVnZXJSZWdleDIpOwogICAgICAgIGlmIChpbnRlZ2VyTWF0Y2ggJiYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIgfHwgdHlwZW9mIHZhbHVlID09PSAiYmlnaW50IikpIHsKICAgICAgICAgIGNvbnN0IFtfdHlwZSwgYmFzZTIsIHNpemVfXSA9IGludGVnZXJNYXRjaDsKICAgICAgICAgIG51bWJlclRvSGV4KHZhbHVlLCB7CiAgICAgICAgICAgIHNpZ25lZDogYmFzZTIgPT09ICJpbnQiLAogICAgICAgICAgICBzaXplOiBOdW1iZXIucGFyc2VJbnQoc2l6ZV8pIC8gOAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlID09PSAiYWRkcmVzcyIgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiAhaXNBZGRyZXNzKHZhbHVlKSkKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogdmFsdWUgfSk7CiAgICAgICAgY29uc3QgYnl0ZXNNYXRjaCA9IHR5cGUubWF0Y2goYnl0ZXNSZWdleDIpOwogICAgICAgIGlmIChieXRlc01hdGNoKSB7CiAgICAgICAgICBjb25zdCBbX3R5cGUsIHNpemVfXSA9IGJ5dGVzTWF0Y2g7CiAgICAgICAgICBpZiAoc2l6ZV8gJiYgc2l6ZSh2YWx1ZSkgIT09IE51bWJlci5wYXJzZUludChzaXplXykpCiAgICAgICAgICAgIHRocm93IG5ldyBCeXRlc1NpemVNaXNtYXRjaEVycm9yKHsKICAgICAgICAgICAgICBleHBlY3RlZFNpemU6IE51bWJlci5wYXJzZUludChzaXplXyksCiAgICAgICAgICAgICAgZ2l2ZW5TaXplOiBzaXplKHZhbHVlKQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY29uc3Qgc3RydWN0MiA9IHR5cGVzW3R5cGVdOwogICAgICAgIGlmIChzdHJ1Y3QyKQogICAgICAgICAgdmFsaWRhdGVEYXRhKHN0cnVjdDIsIHZhbHVlKTsKICAgICAgfQogICAgfTsKICAgIGlmICh0eXBlcy5FSVA3MTJEb21haW4gJiYgZG9tYWluKQogICAgICB2YWxpZGF0ZURhdGEodHlwZXMuRUlQNzEyRG9tYWluLCBkb21haW4pOwogICAgaWYgKHByaW1hcnlUeXBlICE9PSAiRUlQNzEyRG9tYWluIikKICAgICAgdmFsaWRhdGVEYXRhKHR5cGVzW3ByaW1hcnlUeXBlXSwgbWVzc2FnZSk7CiAgfQogIGZ1bmN0aW9uIGdldFR5cGVzRm9yRUlQNzEyRG9tYWluKHsgZG9tYWluIH0pIHsKICAgIHJldHVybiBbCiAgICAgIHR5cGVvZiBkb21haW4/Lm5hbWUgPT09ICJzdHJpbmciICYmIHsgbmFtZTogIm5hbWUiLCB0eXBlOiAic3RyaW5nIiB9LAogICAgICBkb21haW4/LnZlcnNpb24gJiYgeyBuYW1lOiAidmVyc2lvbiIsIHR5cGU6ICJzdHJpbmciIH0sCiAgICAgIHR5cGVvZiBkb21haW4/LmNoYWluSWQgPT09ICJudW1iZXIiICYmIHsKICAgICAgICBuYW1lOiAiY2hhaW5JZCIsCiAgICAgICAgdHlwZTogInVpbnQyNTYiCiAgICAgIH0sCiAgICAgIGRvbWFpbj8udmVyaWZ5aW5nQ29udHJhY3QgJiYgewogICAgICAgIG5hbWU6ICJ2ZXJpZnlpbmdDb250cmFjdCIsCiAgICAgICAgdHlwZTogImFkZHJlc3MiCiAgICAgIH0sCiAgICAgIGRvbWFpbj8uc2FsdCAmJiB7IG5hbWU6ICJzYWx0IiwgdHlwZTogImJ5dGVzMzIiIH0KICAgIF0uZmlsdGVyKEJvb2xlYW4pOwogIH0KICBmdW5jdGlvbiBkb21haW5TZXBhcmF0b3IoeyBkb21haW4gfSkgewogICAgcmV0dXJuIGhhc2hEb21haW4oewogICAgICBkb21haW4sCiAgICAgIHR5cGVzOiB7CiAgICAgICAgRUlQNzEyRG9tYWluOiBnZXRUeXBlc0ZvckVJUDcxMkRvbWFpbih7IGRvbWFpbiB9KQogICAgICB9CiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZUZ1bmN0aW9uRGF0YS5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9zbGljZSgpOwogIGluaXRfdG9GdW5jdGlvblNlbGVjdG9yKCk7CiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9mb3JtYXRBYmlJdGVtMigpOwogIGZ1bmN0aW9uIGRlY29kZUZ1bmN0aW9uRGF0YShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgZGF0YSB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNsaWNlKGRhdGEsIDAsIDQpOwogICAgY29uc3QgZGVzY3JpcHRpb24gPSBhYmkyLmZpbmQoKHgpID0+IHgudHlwZSA9PT0gImZ1bmN0aW9uIiAmJiBzaWduYXR1cmUgPT09IHRvRnVuY3Rpb25TZWxlY3Rvcihmb3JtYXRBYmlJdGVtMih4KSkpOwogICAgaWYgKCFkZXNjcmlwdGlvbikKICAgICAgdGhyb3cgbmV3IEFiaUZ1bmN0aW9uU2lnbmF0dXJlTm90Rm91bmRFcnJvcihzaWduYXR1cmUsIHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2NvbnRyYWN0L2RlY29kZUZ1bmN0aW9uRGF0YSIKICAgICAgfSk7CiAgICByZXR1cm4gewogICAgICBmdW5jdGlvbk5hbWU6IGRlc2NyaXB0aW9uLm5hbWUsCiAgICAgIGFyZ3M6ICJpbnB1dHMiIGluIGRlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uLmlucHV0cyAmJiBkZXNjcmlwdGlvbi5pbnB1dHMubGVuZ3RoID4gMCA/IGRlY29kZUFiaVBhcmFtZXRlcnMoZGVzY3JpcHRpb24uaW5wdXRzLCBzbGljZShkYXRhLCA0KSkgOiB2b2lkIDAKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVFcnJvclJlc3VsdC5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3RvRnVuY3Rpb25TZWxlY3RvcigpOwogIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogIGluaXRfZm9ybWF0QWJpSXRlbTIoKTsKICBpbml0X2dldEFiaUl0ZW0oKTsKICB2YXIgZG9jc1BhdGg2ID0gIi9kb2NzL2NvbnRyYWN0L2VuY29kZUVycm9yUmVzdWx0IjsKICBmdW5jdGlvbiBlbmNvZGVFcnJvclJlc3VsdChwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgZXJyb3JOYW1lLCBhcmdzIH0gPSBwYXJhbWV0ZXJzOwogICAgbGV0IGFiaUl0ZW0gPSBhYmkyWzBdOwogICAgaWYgKGVycm9yTmFtZSkgewogICAgICBjb25zdCBpdGVtID0gZ2V0QWJpSXRlbSh7IGFiaTogYWJpMiwgYXJncywgbmFtZTogZXJyb3JOYW1lIH0pOwogICAgICBpZiAoIWl0ZW0pCiAgICAgICAgdGhyb3cgbmV3IEFiaUVycm9yTm90Rm91bmRFcnJvcihlcnJvck5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoNiB9KTsKICAgICAgYWJpSXRlbSA9IGl0ZW07CiAgICB9CiAgICBpZiAoYWJpSXRlbS50eXBlICE9PSAiZXJyb3IiKQogICAgICB0aHJvdyBuZXcgQWJpRXJyb3JOb3RGb3VuZEVycm9yKHZvaWQgMCwgeyBkb2NzUGF0aDogZG9jc1BhdGg2IH0pOwogICAgY29uc3QgZGVmaW5pdGlvbiA9IGZvcm1hdEFiaUl0ZW0yKGFiaUl0ZW0pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdG9GdW5jdGlvblNlbGVjdG9yKGRlZmluaXRpb24pOwogICAgbGV0IGRhdGEgPSAiMHgiOwogICAgaWYgKGFyZ3MgJiYgYXJncy5sZW5ndGggPiAwKSB7CiAgICAgIGlmICghYWJpSXRlbS5pbnB1dHMpCiAgICAgICAgdGhyb3cgbmV3IEFiaUVycm9ySW5wdXRzTm90Rm91bmRFcnJvcihhYmlJdGVtLm5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoNiB9KTsKICAgICAgZGF0YSA9IGVuY29kZUFiaVBhcmFtZXRlcnMoYWJpSXRlbS5pbnB1dHMsIGFyZ3MpOwogICAgfQogICAgcmV0dXJuIGNvbmNhdEhleChbc2lnbmF0dXJlLCBkYXRhXSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVGdW5jdGlvblJlc3VsdC5qcwogIGluaXRfYWJpKCk7CiAgaW5pdF9lbmNvZGVBYmlQYXJhbWV0ZXJzKCk7CiAgaW5pdF9nZXRBYmlJdGVtKCk7CiAgdmFyIGRvY3NQYXRoNyA9ICIvZG9jcy9jb250cmFjdC9lbmNvZGVGdW5jdGlvblJlc3VsdCI7CiAgZnVuY3Rpb24gZW5jb2RlRnVuY3Rpb25SZXN1bHQocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhYmk6IGFiaTIsIGZ1bmN0aW9uTmFtZSwgcmVzdWx0IH0gPSBwYXJhbWV0ZXJzOwogICAgbGV0IGFiaUl0ZW0gPSBhYmkyWzBdOwogICAgaWYgKGZ1bmN0aW9uTmFtZSkgewogICAgICBjb25zdCBpdGVtID0gZ2V0QWJpSXRlbSh7IGFiaTogYWJpMiwgbmFtZTogZnVuY3Rpb25OYW1lIH0pOwogICAgICBpZiAoIWl0ZW0pCiAgICAgICAgdGhyb3cgbmV3IEFiaUZ1bmN0aW9uTm90Rm91bmRFcnJvcihmdW5jdGlvbk5hbWUsIHsgZG9jc1BhdGg6IGRvY3NQYXRoNyB9KTsKICAgICAgYWJpSXRlbSA9IGl0ZW07CiAgICB9CiAgICBpZiAoYWJpSXRlbS50eXBlICE9PSAiZnVuY3Rpb24iKQogICAgICB0aHJvdyBuZXcgQWJpRnVuY3Rpb25Ob3RGb3VuZEVycm9yKHZvaWQgMCwgeyBkb2NzUGF0aDogZG9jc1BhdGg3IH0pOwogICAgaWYgKCFhYmlJdGVtLm91dHB1dHMpCiAgICAgIHRocm93IG5ldyBBYmlGdW5jdGlvbk91dHB1dHNOb3RGb3VuZEVycm9yKGFiaUl0ZW0ubmFtZSwgeyBkb2NzUGF0aDogZG9jc1BhdGg3IH0pOwogICAgbGV0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IFtyZXN1bHRdOwogICAgaWYgKGFiaUl0ZW0ub3V0cHV0cy5sZW5ndGggPT09IDAgJiYgIXZhbHVlc1swXSkKICAgICAgdmFsdWVzID0gW107CiAgICByZXR1cm4gZW5jb2RlQWJpUGFyYW1ldGVycyhhYmlJdGVtLm91dHB1dHMsIHZhbHVlcyk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FiaS9lbmNvZGVQYWNrZWQuanMKICBpbml0X2FiaSgpOwogIGluaXRfYWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzKCk7CiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3BhZCgpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBlbmNvZGVQYWNrZWQodHlwZXMsIHZhbHVlcykgewogICAgaWYgKHR5cGVzLmxlbmd0aCAhPT0gdmFsdWVzLmxlbmd0aCkKICAgICAgdGhyb3cgbmV3IEFiaUVuY29kaW5nTGVuZ3RoTWlzbWF0Y2hFcnJvcih7CiAgICAgICAgZXhwZWN0ZWRMZW5ndGg6IHR5cGVzLmxlbmd0aCwKICAgICAgICBnaXZlbkxlbmd0aDogdmFsdWVzLmxlbmd0aAogICAgICB9KTsKICAgIGNvbnN0IGRhdGEgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgdHlwZSA9IHR5cGVzW2ldOwogICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTsKICAgICAgZGF0YS5wdXNoKGVuY29kZSh0eXBlLCB2YWx1ZSkpOwogICAgfQogICAgcmV0dXJuIGNvbmNhdEhleChkYXRhKTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlKHR5cGUsIHZhbHVlLCBpc0FycmF5ID0gZmFsc2UpIHsKICAgIGlmICh0eXBlID09PSAiYWRkcmVzcyIpIHsKICAgICAgY29uc3QgYWRkcmVzcyA9IHZhbHVlOwogICAgICBpZiAoIWlzQWRkcmVzcyhhZGRyZXNzKSkKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3MgfSk7CiAgICAgIHJldHVybiBwYWQoYWRkcmVzcy50b0xvd2VyQ2FzZSgpLCB7CiAgICAgICAgc2l6ZTogaXNBcnJheSA/IDMyIDogbnVsbAogICAgICB9KTsKICAgIH0KICAgIGlmICh0eXBlID09PSAic3RyaW5nIikKICAgICAgcmV0dXJuIHN0cmluZ1RvSGV4KHZhbHVlKTsKICAgIGlmICh0eXBlID09PSAiYnl0ZXMiKQogICAgICByZXR1cm4gdmFsdWU7CiAgICBpZiAodHlwZSA9PT0gImJvb2wiKQogICAgICByZXR1cm4gcGFkKGJvb2xUb0hleCh2YWx1ZSksIHsgc2l6ZTogaXNBcnJheSA/IDMyIDogMSB9KTsKICAgIGNvbnN0IGludE1hdGNoID0gdHlwZS5tYXRjaChpbnRlZ2VyUmVnZXgyKTsKICAgIGlmIChpbnRNYXRjaCkgewogICAgICBjb25zdCBbX3R5cGUsIGJhc2VUeXBlLCBiaXRzID0gIjI1NiJdID0gaW50TWF0Y2g7CiAgICAgIGNvbnN0IHNpemUzID0gTnVtYmVyLnBhcnNlSW50KGJpdHMpIC8gODsKICAgICAgcmV0dXJuIG51bWJlclRvSGV4KHZhbHVlLCB7CiAgICAgICAgc2l6ZTogaXNBcnJheSA/IDMyIDogc2l6ZTMsCiAgICAgICAgc2lnbmVkOiBiYXNlVHlwZSA9PT0gImludCIKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBieXRlc01hdGNoID0gdHlwZS5tYXRjaChieXRlc1JlZ2V4Mik7CiAgICBpZiAoYnl0ZXNNYXRjaCkgewogICAgICBjb25zdCBbX3R5cGUsIHNpemUzXSA9IGJ5dGVzTWF0Y2g7CiAgICAgIGlmIChOdW1iZXIucGFyc2VJbnQoc2l6ZTMpICE9PSAodmFsdWUubGVuZ3RoIC0gMikgLyAyKQogICAgICAgIHRocm93IG5ldyBCeXRlc1NpemVNaXNtYXRjaEVycm9yKHsKICAgICAgICAgIGV4cGVjdGVkU2l6ZTogTnVtYmVyLnBhcnNlSW50KHNpemUzKSwKICAgICAgICAgIGdpdmVuU2l6ZTogKHZhbHVlLmxlbmd0aCAtIDIpIC8gMgogICAgICAgIH0pOwogICAgICByZXR1cm4gcGFkKHZhbHVlLCB7IGRpcjogInJpZ2h0Iiwgc2l6ZTogaXNBcnJheSA/IDMyIDogbnVsbCB9KTsKICAgIH0KICAgIGNvbnN0IGFycmF5TWF0Y2ggPSB0eXBlLm1hdGNoKGFycmF5UmVnZXgpOwogICAgaWYgKGFycmF5TWF0Y2ggJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgY29uc3QgW190eXBlLCBjaGlsZFR5cGVdID0gYXJyYXlNYXRjaDsKICAgICAgY29uc3QgZGF0YSA9IFtdOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgZGF0YS5wdXNoKGVuY29kZShjaGlsZFR5cGUsIHZhbHVlW2ldLCB0cnVlKSk7CiAgICAgIH0KICAgICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybiAiMHgiOwogICAgICByZXR1cm4gY29uY2F0SGV4KGRhdGEpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkUGFja2VkQWJpVHlwZSh0eXBlKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWRkcmVzcy9nZXRDb250cmFjdEFkZHJlc3MuanMKICBpbml0X2NvbmNhdCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2RhdGEvaXNCeXRlcy5qcwogIGZ1bmN0aW9uIGlzQnl0ZXMzKHZhbHVlKSB7CiAgICBpZiAoIXZhbHVlKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAib2JqZWN0IikKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKCEoIkJZVEVTX1BFUl9FTEVNRU5UIiBpbiB2YWx1ZSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB2YWx1ZS5CWVRFU19QRVJfRUxFTUVOVCA9PT0gMSAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lID09PSAiVWludDhBcnJheSI7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2FkZHJlc3MvZ2V0Q29udHJhY3RBZGRyZXNzLmpzCiAgaW5pdF9wYWQoKTsKICBpbml0X3NsaWNlKCk7CiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF9rZWNjYWsyNTYoKTsKICBpbml0X2dldEFkZHJlc3MoKTsKICBmdW5jdGlvbiBnZXRDb250cmFjdEFkZHJlc3MyKG9wdHMpIHsKICAgIGlmIChvcHRzLm9wY29kZSA9PT0gIkNSRUFURTIiKQogICAgICByZXR1cm4gZ2V0Q3JlYXRlMkFkZHJlc3Mob3B0cyk7CiAgICByZXR1cm4gZ2V0Q3JlYXRlQWRkcmVzcyhvcHRzKTsKICB9CiAgZnVuY3Rpb24gZ2V0Q3JlYXRlQWRkcmVzcyhvcHRzKSB7CiAgICBjb25zdCBmcm9tID0gdG9CeXRlcyhnZXRBZGRyZXNzKG9wdHMuZnJvbSkpOwogICAgbGV0IG5vbmNlID0gdG9CeXRlcyhvcHRzLm5vbmNlKTsKICAgIGlmIChub25jZVswXSA9PT0gMCkKICAgICAgbm9uY2UgPSBuZXcgVWludDhBcnJheShbXSk7CiAgICByZXR1cm4gZ2V0QWRkcmVzcyhgMHgke2tlY2NhazI1Nih0b1JscChbZnJvbSwgbm9uY2VdLCAiYnl0ZXMiKSkuc2xpY2UoMjYpfWApOwogIH0KICBmdW5jdGlvbiBnZXRDcmVhdGUyQWRkcmVzcyhvcHRzKSB7CiAgICBjb25zdCBmcm9tID0gdG9CeXRlcyhnZXRBZGRyZXNzKG9wdHMuZnJvbSkpOwogICAgY29uc3Qgc2FsdCA9IHBhZChpc0J5dGVzMyhvcHRzLnNhbHQpID8gb3B0cy5zYWx0IDogdG9CeXRlcyhvcHRzLnNhbHQpLCB7CiAgICAgIHNpemU6IDMyCiAgICB9KTsKICAgIGNvbnN0IGJ5dGVjb2RlSGFzaCA9ICgoKSA9PiB7CiAgICAgIGlmICgiYnl0ZWNvZGVIYXNoIiBpbiBvcHRzKSB7CiAgICAgICAgaWYgKGlzQnl0ZXMzKG9wdHMuYnl0ZWNvZGVIYXNoKSkKICAgICAgICAgIHJldHVybiBvcHRzLmJ5dGVjb2RlSGFzaDsKICAgICAgICByZXR1cm4gdG9CeXRlcyhvcHRzLmJ5dGVjb2RlSGFzaCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGtlY2NhazI1NihvcHRzLmJ5dGVjb2RlLCAiYnl0ZXMiKTsKICAgIH0pKCk7CiAgICByZXR1cm4gZ2V0QWRkcmVzcyhzbGljZShrZWNjYWsyNTYoY29uY2F0KFt0b0J5dGVzKCIweGZmIiksIGZyb20sIHNhbHQsIGJ5dGVjb2RlSGFzaF0pKSwgMTIpKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZm9ybWF0dGVycy90cmFuc2FjdGlvblJlY2VpcHQuanMKICBpbml0X2Zyb21IZXgoKTsKICBpbml0X2Zvcm1hdHRlcigpOwogIHZhciByZWNlaXB0U3RhdHVzZXMgPSB7CiAgICAiMHgwIjogInJldmVydGVkIiwKICAgICIweDEiOiAic3VjY2VzcyIKICB9OwogIGZ1bmN0aW9uIGZvcm1hdFRyYW5zYWN0aW9uUmVjZWlwdCh0cmFuc2FjdGlvblJlY2VpcHQpIHsKICAgIGNvbnN0IHJlY2VpcHQgPSB7CiAgICAgIC4uLnRyYW5zYWN0aW9uUmVjZWlwdCwKICAgICAgYmxvY2tOdW1iZXI6IHRyYW5zYWN0aW9uUmVjZWlwdC5ibG9ja051bWJlciA/IEJpZ0ludCh0cmFuc2FjdGlvblJlY2VpcHQuYmxvY2tOdW1iZXIpIDogbnVsbCwKICAgICAgY29udHJhY3RBZGRyZXNzOiB0cmFuc2FjdGlvblJlY2VpcHQuY29udHJhY3RBZGRyZXNzID8gdHJhbnNhY3Rpb25SZWNlaXB0LmNvbnRyYWN0QWRkcmVzcyA6IG51bGwsCiAgICAgIGN1bXVsYXRpdmVHYXNVc2VkOiB0cmFuc2FjdGlvblJlY2VpcHQuY3VtdWxhdGl2ZUdhc1VzZWQgPyBCaWdJbnQodHJhbnNhY3Rpb25SZWNlaXB0LmN1bXVsYXRpdmVHYXNVc2VkKSA6IG51bGwsCiAgICAgIGVmZmVjdGl2ZUdhc1ByaWNlOiB0cmFuc2FjdGlvblJlY2VpcHQuZWZmZWN0aXZlR2FzUHJpY2UgPyBCaWdJbnQodHJhbnNhY3Rpb25SZWNlaXB0LmVmZmVjdGl2ZUdhc1ByaWNlKSA6IG51bGwsCiAgICAgIGdhc1VzZWQ6IHRyYW5zYWN0aW9uUmVjZWlwdC5nYXNVc2VkID8gQmlnSW50KHRyYW5zYWN0aW9uUmVjZWlwdC5nYXNVc2VkKSA6IG51bGwsCiAgICAgIGxvZ3M6IHRyYW5zYWN0aW9uUmVjZWlwdC5sb2dzID8gdHJhbnNhY3Rpb25SZWNlaXB0LmxvZ3MubWFwKChsb2cpID0+IGZvcm1hdExvZyhsb2cpKSA6IG51bGwsCiAgICAgIHRvOiB0cmFuc2FjdGlvblJlY2VpcHQudG8gPyB0cmFuc2FjdGlvblJlY2VpcHQudG8gOiBudWxsLAogICAgICB0cmFuc2FjdGlvbkluZGV4OiB0cmFuc2FjdGlvblJlY2VpcHQudHJhbnNhY3Rpb25JbmRleCA/IGhleFRvTnVtYmVyKHRyYW5zYWN0aW9uUmVjZWlwdC50cmFuc2FjdGlvbkluZGV4KSA6IG51bGwsCiAgICAgIHN0YXR1czogdHJhbnNhY3Rpb25SZWNlaXB0LnN0YXR1cyA/IHJlY2VpcHRTdGF0dXNlc1t0cmFuc2FjdGlvblJlY2VpcHQuc3RhdHVzXSA6IG51bGwsCiAgICAgIHR5cGU6IHRyYW5zYWN0aW9uUmVjZWlwdC50eXBlID8gdHJhbnNhY3Rpb25UeXBlW3RyYW5zYWN0aW9uUmVjZWlwdC50eXBlXSB8fCB0cmFuc2FjdGlvblJlY2VpcHQudHlwZSA6IG51bGwKICAgIH07CiAgICBpZiAodHJhbnNhY3Rpb25SZWNlaXB0LmJsb2JHYXNQcmljZSkKICAgICAgcmVjZWlwdC5ibG9iR2FzUHJpY2UgPSBCaWdJbnQodHJhbnNhY3Rpb25SZWNlaXB0LmJsb2JHYXNQcmljZSk7CiAgICBpZiAodHJhbnNhY3Rpb25SZWNlaXB0LmJsb2JHYXNVc2VkKQogICAgICByZWNlaXB0LmJsb2JHYXNVc2VkID0gQmlnSW50KHRyYW5zYWN0aW9uUmVjZWlwdC5ibG9iR2FzVXNlZCk7CiAgICByZXR1cm4gcmVjZWlwdDsKICB9CiAgdmFyIGRlZmluZVRyYW5zYWN0aW9uUmVjZWlwdCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVGb3JtYXR0ZXIoInRyYW5zYWN0aW9uUmVjZWlwdCIsIGZvcm1hdFRyYW5zYWN0aW9uUmVjZWlwdCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaW5kZXguanMKICBpbml0X2Zyb21IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9lbmNvZGluZy9mcm9tUmxwLmpzCiAgaW5pdF9iYXNlKCk7CiAgaW5pdF9lbmNvZGluZygpOwogIGluaXRfY3Vyc29yMigpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBmcm9tUmxwKHZhbHVlLCB0byA9ICJoZXgiKSB7CiAgICBjb25zdCBieXRlczIgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgewogICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAzICYmIHZhbHVlLmxlbmd0aCAlIDIgIT09IDApCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEhleFZhbHVlRXJyb3IodmFsdWUpOwogICAgICAgIHJldHVybiBoZXhUb0J5dGVzKHZhbHVlKTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWU7CiAgICB9KSgpOwogICAgY29uc3QgY3Vyc29yID0gY3JlYXRlQ3Vyc29yKGJ5dGVzMiwgewogICAgICByZWN1cnNpdmVSZWFkTGltaXQ6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWQogICAgfSk7CiAgICBjb25zdCByZXN1bHQgPSBmcm9tUmxwQ3Vyc29yKGN1cnNvciwgdG8pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gZnJvbVJscEN1cnNvcihjdXJzb3IsIHRvID0gImhleCIpIHsKICAgIGlmIChjdXJzb3IuYnl0ZXMubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gdG8gPT09ICJoZXgiID8gYnl0ZXNUb0hleChjdXJzb3IuYnl0ZXMpIDogY3Vyc29yLmJ5dGVzOwogICAgY29uc3QgcHJlZml4ID0gY3Vyc29yLnJlYWRCeXRlKCk7CiAgICBpZiAocHJlZml4IDwgMTI4KQogICAgICBjdXJzb3IuZGVjcmVtZW50UG9zaXRpb24oMSk7CiAgICBpZiAocHJlZml4IDwgMTkyKSB7CiAgICAgIGNvbnN0IGxlbmd0aDIgPSByZWFkTGVuZ3RoKGN1cnNvciwgcHJlZml4LCAxMjgpOwogICAgICBjb25zdCBieXRlczIgPSBjdXJzb3IucmVhZEJ5dGVzKGxlbmd0aDIpOwogICAgICByZXR1cm4gdG8gPT09ICJoZXgiID8gYnl0ZXNUb0hleChieXRlczIpIDogYnl0ZXMyOwogICAgfQogICAgY29uc3QgbGVuZ3RoID0gcmVhZExlbmd0aChjdXJzb3IsIHByZWZpeCwgMTkyKTsKICAgIHJldHVybiByZWFkTGlzdChjdXJzb3IsIGxlbmd0aCwgdG8pOwogIH0KICBmdW5jdGlvbiByZWFkTGVuZ3RoKGN1cnNvciwgcHJlZml4LCBvZmZzZXQpIHsKICAgIGlmIChvZmZzZXQgPT09IDEyOCAmJiBwcmVmaXggPCAxMjgpCiAgICAgIHJldHVybiAxOwogICAgaWYgKHByZWZpeCA8PSBvZmZzZXQgKyA1NSkKICAgICAgcmV0dXJuIHByZWZpeCAtIG9mZnNldDsKICAgIGlmIChwcmVmaXggPT09IG9mZnNldCArIDU1ICsgMSkKICAgICAgcmV0dXJuIGN1cnNvci5yZWFkVWludDgoKTsKICAgIGlmIChwcmVmaXggPT09IG9mZnNldCArIDU1ICsgMikKICAgICAgcmV0dXJuIGN1cnNvci5yZWFkVWludDE2KCk7CiAgICBpZiAocHJlZml4ID09PSBvZmZzZXQgKyA1NSArIDMpCiAgICAgIHJldHVybiBjdXJzb3IucmVhZFVpbnQyNCgpOwogICAgaWYgKHByZWZpeCA9PT0gb2Zmc2V0ICsgNTUgKyA0KQogICAgICByZXR1cm4gY3Vyc29yLnJlYWRVaW50MzIoKTsKICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJJbnZhbGlkIFJMUCBwcmVmaXgiKTsKICB9CiAgZnVuY3Rpb24gcmVhZExpc3QoY3Vyc29yLCBsZW5ndGgsIHRvKSB7CiAgICBjb25zdCBwb3NpdGlvbiA9IGN1cnNvci5wb3NpdGlvbjsKICAgIGNvbnN0IHZhbHVlID0gW107CiAgICB3aGlsZSAoY3Vyc29yLnBvc2l0aW9uIC0gcG9zaXRpb24gPCBsZW5ndGgpCiAgICAgIHZhbHVlLnB1c2goZnJvbVJscEN1cnNvcihjdXJzb3IsIHRvKSk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvdG9FdmVudFNpZ25hdHVyZS5qcwogIGluaXRfdG9TaWduYXR1cmUoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9oYXNoL3RvRnVuY3Rpb25TaWduYXR1cmUuanMKICBpbml0X3RvU2lnbmF0dXJlKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b0V2ZW50SGFzaC5qcwogIGluaXRfdG9TaWduYXR1cmVIYXNoKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC90b0Z1bmN0aW9uSGFzaC5qcwogIGluaXRfdG9TaWduYXR1cmVIYXNoKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvaGFzaC9pc0hhc2guanMKICBpbml0X2lzSGV4KCk7CiAgaW5pdF9zaXplKCk7CiAgZnVuY3Rpb24gaXNIYXNoKGhhc2gzKSB7CiAgICByZXR1cm4gaXNIZXgoaGFzaDMpICYmIHNpemUoaGFzaDMpID09PSAzMjsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9yaXBlbWQxNjAuanMKICBpbml0X21kKCk7CiAgaW5pdF91dGlsczIoKTsKICB2YXIgUmhvID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50OEFycmF5KFs3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4XSk7CiAgdmFyIElkID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50OEFycmF5KG5ldyBBcnJheSgxNikuZmlsbCgwKS5tYXAoKF8sIGkpID0+IGkpKTsKICB2YXIgUGkgPSAvKiBAX19QVVJFX18gKi8gSWQubWFwKChpKSA9PiAoOSAqIGkgKyA1KSAlIDE2KTsKICB2YXIgaWR4TCA9IFtJZF07CiAgdmFyIGlkeFIgPSBbUGldOwogIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKQogICAgZm9yIChsZXQgaiBvZiBbaWR4TCwgaWR4Ul0pCiAgICAgIGoucHVzaChqW2ldLm1hcCgoaykgPT4gUmhvW2tdKSk7CiAgdmFyIHNoaWZ0cyA9IC8qIEBfX1BVUkVfXyAqLyBbCiAgICBbMTEsIDE0LCAxNSwgMTIsIDUsIDgsIDcsIDksIDExLCAxMywgMTQsIDE1LCA2LCA3LCA5LCA4XSwKICAgIFsxMiwgMTMsIDExLCAxNSwgNiwgOSwgOSwgNywgMTIsIDE1LCAxMSwgMTMsIDcsIDgsIDcsIDddLAogICAgWzEzLCAxNSwgMTQsIDExLCA3LCA3LCA2LCA4LCAxMywgMTQsIDEzLCAxMiwgNSwgNSwgNiwgOV0sCiAgICBbMTQsIDExLCAxMiwgMTQsIDgsIDYsIDUsIDUsIDE1LCAxMiwgMTUsIDE0LCA5LCA5LCA4LCA2XSwKICAgIFsxNSwgMTIsIDEzLCAxMywgOSwgNSwgOCwgNiwgMTQsIDExLCAxMiwgMTEsIDgsIDYsIDUsIDVdCiAgXS5tYXAoKGkpID0+IG5ldyBVaW50OEFycmF5KGkpKTsKICB2YXIgc2hpZnRzTCA9IC8qIEBfX1BVUkVfXyAqLyBpZHhMLm1hcCgoaWR4LCBpKSA9PiBpZHgubWFwKChqKSA9PiBzaGlmdHNbaV1bal0pKTsKICB2YXIgc2hpZnRzUiA9IC8qIEBfX1BVUkVfXyAqLyBpZHhSLm1hcCgoaWR4LCBpKSA9PiBpZHgubWFwKChqKSA9PiBzaGlmdHNbaV1bal0pKTsKICB2YXIgS2wgPSAvKiBAX19QVVJFX18gKi8gbmV3IFVpbnQzMkFycmF5KFsKICAgIDAsCiAgICAxNTE4NTAwMjQ5LAogICAgMTg1OTc3NTM5MywKICAgIDI0MDA5NTk3MDgsCiAgICAyODQwODUzODM4CiAgXSk7CiAgdmFyIEtyID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheShbCiAgICAxMzUyODI5OTI2LAogICAgMTU0ODYwMzY4NCwKICAgIDE4MzYwNzI2OTEsCiAgICAyMDUzOTk0MjE3LAogICAgMAogIF0pOwogIGZ1bmN0aW9uIGYoZ3JvdXAsIHgsIHksIHopIHsKICAgIGlmIChncm91cCA9PT0gMCkKICAgICAgcmV0dXJuIHggXiB5IF4gejsKICAgIGVsc2UgaWYgKGdyb3VwID09PSAxKQogICAgICByZXR1cm4geCAmIHkgfCB+eCAmIHo7CiAgICBlbHNlIGlmIChncm91cCA9PT0gMikKICAgICAgcmV0dXJuICh4IHwgfnkpIF4gejsKICAgIGVsc2UgaWYgKGdyb3VwID09PSAzKQogICAgICByZXR1cm4geCAmIHogfCB5ICYgfno7CiAgICBlbHNlCiAgICAgIHJldHVybiB4IF4gKHkgfCB+eik7CiAgfQogIHZhciBSX0JVRiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgVWludDMyQXJyYXkoMTYpOwogIHZhciBSSVBFTUQxNjAgPSBjbGFzcyBleHRlbmRzIEhhc2hNRCB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoNjQsIDIwLCA4LCB0cnVlKTsKICAgICAgdGhpcy5oMCA9IDE3MzI1ODQxOTMgfCAwOwogICAgICB0aGlzLmgxID0gNDAyMzIzMzQxNyB8IDA7CiAgICAgIHRoaXMuaDIgPSAyNTYyMzgzMTAyIHwgMDsKICAgICAgdGhpcy5oMyA9IDI3MTczMzg3OCB8IDA7CiAgICAgIHRoaXMuaDQgPSAzMjg1Mzc3NTIwIHwgMDsKICAgIH0KICAgIGdldCgpIHsKICAgICAgY29uc3QgeyBoMCwgaDEsIGgyLCBoMywgaDQgfSA9IHRoaXM7CiAgICAgIHJldHVybiBbaDAsIGgxLCBoMiwgaDMsIGg0XTsKICAgIH0KICAgIHNldChoMCwgaDEsIGgyLCBoMywgaDQpIHsKICAgICAgdGhpcy5oMCA9IGgwIHwgMDsKICAgICAgdGhpcy5oMSA9IGgxIHwgMDsKICAgICAgdGhpcy5oMiA9IGgyIHwgMDsKICAgICAgdGhpcy5oMyA9IGgzIHwgMDsKICAgICAgdGhpcy5oNCA9IGg0IHwgMDsKICAgIH0KICAgIHByb2Nlc3Modmlldywgb2Zmc2V0KSB7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKywgb2Zmc2V0ICs9IDQpCiAgICAgICAgUl9CVUZbaV0gPSB2aWV3LmdldFVpbnQzMihvZmZzZXQsIHRydWUpOwogICAgICBsZXQgYWwgPSB0aGlzLmgwIHwgMCwgYXIgPSBhbCwgYmwgPSB0aGlzLmgxIHwgMCwgYnIgPSBibCwgY2wgPSB0aGlzLmgyIHwgMCwgY3IgPSBjbCwgZGwgPSB0aGlzLmgzIHwgMCwgZHIgPSBkbCwgZWwgPSB0aGlzLmg0IHwgMCwgZXIgPSBlbDsKICAgICAgZm9yIChsZXQgZ3JvdXAgPSAwOyBncm91cCA8IDU7IGdyb3VwKyspIHsKICAgICAgICBjb25zdCByR3JvdXAgPSA0IC0gZ3JvdXA7CiAgICAgICAgY29uc3QgaGJsID0gS2xbZ3JvdXBdLCBoYnIgPSBLcltncm91cF07CiAgICAgICAgY29uc3QgcmwgPSBpZHhMW2dyb3VwXSwgcnIgPSBpZHhSW2dyb3VwXTsKICAgICAgICBjb25zdCBzbCA9IHNoaWZ0c0xbZ3JvdXBdLCBzciA9IHNoaWZ0c1JbZ3JvdXBdOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgewogICAgICAgICAgY29uc3QgdGwgPSByb3RsKGFsICsgZihncm91cCwgYmwsIGNsLCBkbCkgKyBSX0JVRltybFtpXV0gKyBoYmwsIHNsW2ldKSArIGVsIHwgMDsKICAgICAgICAgIGFsID0gZWwsIGVsID0gZGwsIGRsID0gcm90bChjbCwgMTApIHwgMCwgY2wgPSBibCwgYmwgPSB0bDsKICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAgICAgICAgICBjb25zdCB0ciA9IHJvdGwoYXIgKyBmKHJHcm91cCwgYnIsIGNyLCBkcikgKyBSX0JVRltycltpXV0gKyBoYnIsIHNyW2ldKSArIGVyIHwgMDsKICAgICAgICAgIGFyID0gZXIsIGVyID0gZHIsIGRyID0gcm90bChjciwgMTApIHwgMCwgY3IgPSBiciwgYnIgPSB0cjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5zZXQodGhpcy5oMSArIGNsICsgZHIgfCAwLCB0aGlzLmgyICsgZGwgKyBlciB8IDAsIHRoaXMuaDMgKyBlbCArIGFyIHwgMCwgdGhpcy5oNCArIGFsICsgYnIgfCAwLCB0aGlzLmgwICsgYmwgKyBjciB8IDApOwogICAgfQogICAgcm91bmRDbGVhbigpIHsKICAgICAgUl9CVUYuZmlsbCgwKTsKICAgIH0KICAgIGRlc3Ryb3koKSB7CiAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgICAgdGhpcy5idWZmZXIuZmlsbCgwKTsKICAgICAgdGhpcy5zZXQoMCwgMCwgMCwgMCwgMCk7CiAgICB9CiAgfTsKICB2YXIgcmlwZW1kMTYwID0gLyogQF9fUFVSRV9fICovIHdyYXBDb25zdHJ1Y3RvcigoKSA9PiBuZXcgUklQRU1EMTYwKCkpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2hhc2gvcmlwZW1kMTYwLmpzCiAgaW5pdF9pc0hleCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiByaXBlbWQxNjAyKHZhbHVlLCB0b18pIHsKICAgIGNvbnN0IHRvID0gdG9fIHx8ICJoZXgiOwogICAgY29uc3QgYnl0ZXMyID0gcmlwZW1kMTYwKGlzSGV4KHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSkgPyB0b0J5dGVzKHZhbHVlKSA6IHZhbHVlKTsKICAgIGlmICh0byA9PT0gImJ5dGVzIikKICAgICAgcmV0dXJuIGJ5dGVzMjsKICAgIHJldHVybiB0b0hleChieXRlczIpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvaGFzaE1lc3NhZ2UuanMKICBpbml0X2tlY2NhazI1NigpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NvbnN0YW50cy9zdHJpbmdzLmpzCiAgdmFyIHByZXNpZ25NZXNzYWdlUHJlZml4ID0gIhlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcbiI7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3RvUHJlZml4ZWRNZXNzYWdlLmpzCiAgaW5pdF9jb25jYXQoKTsKICBpbml0X3NpemUoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gdG9QcmVmaXhlZE1lc3NhZ2UobWVzc2FnZV8pIHsKICAgIGNvbnN0IG1lc3NhZ2UgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIG1lc3NhZ2VfID09PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gc3RyaW5nVG9IZXgobWVzc2FnZV8pOwogICAgICBpZiAodHlwZW9mIG1lc3NhZ2VfLnJhdyA9PT0gInN0cmluZyIpCiAgICAgICAgcmV0dXJuIG1lc3NhZ2VfLnJhdzsKICAgICAgcmV0dXJuIGJ5dGVzVG9IZXgobWVzc2FnZV8ucmF3KTsKICAgIH0pKCk7CiAgICBjb25zdCBwcmVmaXggPSBzdHJpbmdUb0hleChgJHtwcmVzaWduTWVzc2FnZVByZWZpeH0ke3NpemUobWVzc2FnZSl9YCk7CiAgICByZXR1cm4gY29uY2F0KFtwcmVmaXgsIG1lc3NhZ2VdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL2hhc2hNZXNzYWdlLmpzCiAgZnVuY3Rpb24gaGFzaE1lc3NhZ2UobWVzc2FnZSwgdG9fKSB7CiAgICByZXR1cm4ga2VjY2FrMjU2KHRvUHJlZml4ZWRNZXNzYWdlKG1lc3NhZ2UpLCB0b18pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcmVjb3Zlck1lc3NhZ2VBZGRyZXNzLmpzCiAgYXN5bmMgZnVuY3Rpb24gcmVjb3Zlck1lc3NhZ2VBZGRyZXNzKHsgbWVzc2FnZSwgc2lnbmF0dXJlIH0pIHsKICAgIHJldHVybiByZWNvdmVyQWRkcmVzcyh7IGhhc2g6IGhhc2hNZXNzYWdlKG1lc3NhZ2UpLCBzaWduYXR1cmUgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3NpZ25hdHVyZS9yZWNvdmVyVHlwZWREYXRhQWRkcmVzcy5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJUeXBlZERhdGFBZGRyZXNzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgZG9tYWluLCBtZXNzYWdlLCBwcmltYXJ5VHlwZSwgc2lnbmF0dXJlLCB0eXBlcyB9ID0gcGFyYW1ldGVyczsKICAgIHJldHVybiByZWNvdmVyQWRkcmVzcyh7CiAgICAgIGhhc2g6IGhhc2hUeXBlZERhdGEoewogICAgICAgIGRvbWFpbiwKICAgICAgICBtZXNzYWdlLAogICAgICAgIHByaW1hcnlUeXBlLAogICAgICAgIHR5cGVzCiAgICAgIH0pLAogICAgICBzaWduYXR1cmUKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvdmVyaWZ5SGFzaC5qcwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzRXF1YWwoKTsKICBhc3luYyBmdW5jdGlvbiB2ZXJpZnlIYXNoKHsgYWRkcmVzcywgaGFzaDogaGFzaDMsIHNpZ25hdHVyZSB9KSB7CiAgICByZXR1cm4gaXNBZGRyZXNzRXF1YWwoZ2V0QWRkcmVzcyhhZGRyZXNzKSwgYXdhaXQgcmVjb3ZlckFkZHJlc3MoeyBoYXNoOiBoYXNoMywgc2lnbmF0dXJlIH0pKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3ZlcmlmeU1lc3NhZ2UuanMKICBpbml0X2dldEFkZHJlc3MoKTsKICBpbml0X2lzQWRkcmVzc0VxdWFsKCk7CiAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5TWVzc2FnZSh7IGFkZHJlc3MsIG1lc3NhZ2UsIHNpZ25hdHVyZSB9KSB7CiAgICByZXR1cm4gaXNBZGRyZXNzRXF1YWwoZ2V0QWRkcmVzcyhhZGRyZXNzKSwgYXdhaXQgcmVjb3Zlck1lc3NhZ2VBZGRyZXNzKHsgbWVzc2FnZSwgc2lnbmF0dXJlIH0pKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3ZlcmlmeVR5cGVkRGF0YS5qcwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzRXF1YWwoKTsKICBhc3luYyBmdW5jdGlvbiB2ZXJpZnlUeXBlZERhdGEocGFyYW1ldGVycykgewogICAgY29uc3QgeyBhZGRyZXNzLCBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCBzaWduYXR1cmUsIHR5cGVzIH0gPSBwYXJhbWV0ZXJzOwogICAgcmV0dXJuIGlzQWRkcmVzc0VxdWFsKGdldEFkZHJlc3MoYWRkcmVzcyksIGF3YWl0IHJlY292ZXJUeXBlZERhdGFBZGRyZXNzKHsKICAgICAgZG9tYWluLAogICAgICBtZXNzYWdlLAogICAgICBwcmltYXJ5VHlwZSwKICAgICAgc2lnbmF0dXJlLAogICAgICB0eXBlcwogICAgfSkpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvcGFyc2VFcmM2NDkyU2lnbmF0dXJlLmpzCiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2J5dGVzLmpzCiAgdmFyIGVyYzY0OTJNYWdpY0J5dGVzID0gIjB4NjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MjY0OTI2NDkyNjQ5MiI7CiAgdmFyIHplcm9IYXNoID0gIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL2lzRXJjNjQ5MlNpZ25hdHVyZS5qcwogIGluaXRfc2xpY2UoKTsKICBmdW5jdGlvbiBpc0VyYzY0OTJTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICByZXR1cm4gc2xpY2VIZXgoc2lnbmF0dXJlLCAtMzIpID09PSBlcmM2NDkyTWFnaWNCeXRlczsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3BhcnNlRXJjNjQ5MlNpZ25hdHVyZS5qcwogIGZ1bmN0aW9uIHBhcnNlRXJjNjQ5MlNpZ25hdHVyZShzaWduYXR1cmUpIHsKICAgIGlmICghaXNFcmM2NDkyU2lnbmF0dXJlKHNpZ25hdHVyZSkpCiAgICAgIHJldHVybiB7IHNpZ25hdHVyZSB9OwogICAgY29uc3QgW2FkZHJlc3MsIGRhdGEsIHNpZ25hdHVyZV9dID0gZGVjb2RlQWJpUGFyYW1ldGVycyhbeyB0eXBlOiAiYWRkcmVzcyIgfSwgeyB0eXBlOiAiYnl0ZXMiIH0sIHsgdHlwZTogImJ5dGVzIiB9XSwgc2lnbmF0dXJlKTsKICAgIHJldHVybiB7IGFkZHJlc3MsIGRhdGEsIHNpZ25hdHVyZTogc2lnbmF0dXJlXyB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZS5qcwogIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogIGluaXRfY29uY2F0KCk7CiAgaW5pdF90b0J5dGVzKCk7CiAgZnVuY3Rpb24gc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGRhdGEsIHNpZ25hdHVyZSwgdG8gPSAiaGV4IiB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZV8gPSBjb25jYXRIZXgoWwogICAgICBlbmNvZGVBYmlQYXJhbWV0ZXJzKFt7IHR5cGU6ICJhZGRyZXNzIiB9LCB7IHR5cGU6ICJieXRlcyIgfSwgeyB0eXBlOiAiYnl0ZXMiIH1dLCBbYWRkcmVzcywgZGF0YSwgc2lnbmF0dXJlXSksCiAgICAgIGVyYzY0OTJNYWdpY0J5dGVzCiAgICBdKTsKICAgIGlmICh0byA9PT0gImhleCIpCiAgICAgIHJldHVybiBzaWduYXR1cmVfOwogICAgcmV0dXJuIGhleFRvQnl0ZXMoc2lnbmF0dXJlXyk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL2dldFNlcmlhbGl6ZWRUcmFuc2FjdGlvblR5cGUuanMKICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgaW5pdF9zbGljZSgpOwogIGluaXRfZnJvbUhleCgpOwogIGZ1bmN0aW9uIGdldFNlcmlhbGl6ZWRUcmFuc2FjdGlvblR5cGUoc2VyaWFsaXplZFRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCBzZXJpYWxpemVkVHlwZSA9IHNsaWNlSGV4KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwgMCwgMSk7CiAgICBpZiAoc2VyaWFsaXplZFR5cGUgPT09ICIweDA0IikKICAgICAgcmV0dXJuICJlaXA3NzAyIjsKICAgIGlmIChzZXJpYWxpemVkVHlwZSA9PT0gIjB4MDMiKQogICAgICByZXR1cm4gImVpcDQ4NDQiOwogICAgaWYgKHNlcmlhbGl6ZWRUeXBlID09PSAiMHgwMiIpCiAgICAgIHJldHVybiAiZWlwMTU1OSI7CiAgICBpZiAoc2VyaWFsaXplZFR5cGUgPT09ICIweDAxIikKICAgICAgcmV0dXJuICJlaXAyOTMwIjsKICAgIGlmIChzZXJpYWxpemVkVHlwZSAhPT0gIjB4IiAmJiBoZXhUb051bWJlcihzZXJpYWxpemVkVHlwZSkgPj0gMTkyKQogICAgICByZXR1cm4gImxlZ2FjeSI7CiAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvblR5cGVFcnJvcih7IHNlcmlhbGl6ZWRUeXBlIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9hc3NlcnRUcmFuc2FjdGlvbi5qcwogIGluaXRfYWRkcmVzcygpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY2hhaW4oKTsKICBpbml0X25vZGUoKTsKICBpbml0X2lzQWRkcmVzcygpOwogIGluaXRfc2l6ZSgpOwogIGluaXRfc2xpY2UoKTsKICBpbml0X2Zyb21IZXgoKTsKICBmdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkVJUDc3MDIodHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHsgYXV0aG9yaXphdGlvbkxpc3QgfSA9IHRyYW5zYWN0aW9uOwogICAgaWYgKGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICAgIGZvciAoY29uc3QgYXV0aG9yaXphdGlvbiBvZiBhdXRob3JpemF0aW9uTGlzdCkgewogICAgICAgIGNvbnN0IHsgY29udHJhY3RBZGRyZXNzLCBjaGFpbklkIH0gPSBhdXRob3JpemF0aW9uOwogICAgICAgIGlmICghaXNBZGRyZXNzKGNvbnRyYWN0QWRkcmVzcykpCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IGNvbnRyYWN0QWRkcmVzcyB9KTsKICAgICAgICBpZiAoY2hhaW5JZCA8PSAwKQogICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRDaGFpbklkRXJyb3IoeyBjaGFpbklkIH0pOwogICAgICB9CiAgICB9CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDE1NTkodHJhbnNhY3Rpb24pOwogIH0KICBmdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkVJUDQ4NDQodHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHsgYmxvYlZlcnNpb25lZEhhc2hlcyB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoYmxvYlZlcnNpb25lZEhhc2hlcykgewogICAgICBpZiAoYmxvYlZlcnNpb25lZEhhc2hlcy5sZW5ndGggPT09IDApCiAgICAgICAgdGhyb3cgbmV3IEVtcHR5QmxvYkVycm9yKCk7CiAgICAgIGZvciAoY29uc3QgaGFzaDMgb2YgYmxvYlZlcnNpb25lZEhhc2hlcykgewogICAgICAgIGNvbnN0IHNpemVfID0gc2l6ZShoYXNoMyk7CiAgICAgICAgY29uc3QgdmVyc2lvbjMgPSBoZXhUb051bWJlcihzbGljZShoYXNoMywgMCwgMSkpOwogICAgICAgIGlmIChzaXplXyAhPT0gMzIpCiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFZlcnNpb25lZEhhc2hTaXplRXJyb3IoeyBoYXNoOiBoYXNoMywgc2l6ZTogc2l6ZV8gfSk7CiAgICAgICAgaWYgKHZlcnNpb24zICE9PSB2ZXJzaW9uZWRIYXNoVmVyc2lvbkt6ZykKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkVmVyc2lvbmVkSGFzaFZlcnNpb25FcnJvcih7CiAgICAgICAgICAgIGhhc2g6IGhhc2gzLAogICAgICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uMwogICAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQMTU1OSh0cmFuc2FjdGlvbik7CiAgfQogIGZ1bmN0aW9uIGFzc2VydFRyYW5zYWN0aW9uRUlQMTU1OSh0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbWF4RmVlUGVyR2FzLCB0byB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoY2hhaW5JZCA8PSAwKQogICAgICB0aHJvdyBuZXcgSW52YWxpZENoYWluSWRFcnJvcih7IGNoYWluSWQgfSk7CiAgICBpZiAodG8gJiYgIWlzQWRkcmVzcyh0bykpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogdG8gfSk7CiAgICBpZiAobWF4RmVlUGVyR2FzICYmIG1heEZlZVBlckdhcyA+IDJuICoqIDI1Nm4gLSAxbikKICAgICAgdGhyb3cgbmV3IEZlZUNhcFRvb0hpZ2hFcnJvcih7IG1heEZlZVBlckdhcyB9KTsKICAgIGlmIChtYXhQcmlvcml0eUZlZVBlckdhcyAmJiBtYXhGZWVQZXJHYXMgJiYgbWF4UHJpb3JpdHlGZWVQZXJHYXMgPiBtYXhGZWVQZXJHYXMpCiAgICAgIHRocm93IG5ldyBUaXBBYm92ZUZlZUNhcEVycm9yKHsgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcyB9KTsKICB9CiAgZnVuY3Rpb24gYXNzZXJ0VHJhbnNhY3Rpb25FSVAyOTMwKHRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCB7IGNoYWluSWQsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyR2FzLCB0byB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoY2hhaW5JZCA8PSAwKQogICAgICB0aHJvdyBuZXcgSW52YWxpZENoYWluSWRFcnJvcih7IGNoYWluSWQgfSk7CiAgICBpZiAodG8gJiYgIWlzQWRkcmVzcyh0bykpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogdG8gfSk7CiAgICBpZiAobWF4UHJpb3JpdHlGZWVQZXJHYXMgfHwgbWF4RmVlUGVyR2FzKQogICAgICB0aHJvdyBuZXcgQmFzZUVycm9yMigiYG1heEZlZVBlckdhc2AvYG1heFByaW9yaXR5RmVlUGVyR2FzYCBpcyBub3QgYSB2YWxpZCBFSVAtMjkzMCBUcmFuc2FjdGlvbiBhdHRyaWJ1dGUuIik7CiAgICBpZiAoZ2FzUHJpY2UgJiYgZ2FzUHJpY2UgPiAybiAqKiAyNTZuIC0gMW4pCiAgICAgIHRocm93IG5ldyBGZWVDYXBUb29IaWdoRXJyb3IoeyBtYXhGZWVQZXJHYXM6IGdhc1ByaWNlIH0pOwogIH0KICBmdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSh0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBtYXhQcmlvcml0eUZlZVBlckdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckdhcywgdG8gfSA9IHRyYW5zYWN0aW9uOwogICAgaWYgKHRvICYmICFpc0FkZHJlc3ModG8pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IHRvIH0pOwogICAgaWYgKHR5cGVvZiBjaGFpbklkICE9PSAidW5kZWZpbmVkIiAmJiBjaGFpbklkIDw9IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhaW5JZEVycm9yKHsgY2hhaW5JZCB9KTsKICAgIGlmIChtYXhQcmlvcml0eUZlZVBlckdhcyB8fCBtYXhGZWVQZXJHYXMpCiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgbWF4RmVlUGVyR2FzYC9gbWF4UHJpb3JpdHlGZWVQZXJHYXNgIGlzIG5vdCBhIHZhbGlkIExlZ2FjeSBUcmFuc2FjdGlvbiBhdHRyaWJ1dGUuIik7CiAgICBpZiAoZ2FzUHJpY2UgJiYgZ2FzUHJpY2UgPiAybiAqKiAyNTZuIC0gMW4pCiAgICAgIHRocm93IG5ldyBGZWVDYXBUb29IaWdoRXJyb3IoeyBtYXhGZWVQZXJHYXM6IGdhc1ByaWNlIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9wYXJzZVRyYW5zYWN0aW9uLmpzCiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF90cmFuc2FjdGlvbigpOwogIGluaXRfaXNBZGRyZXNzKCk7CiAgaW5pdF9pc0hleCgpOwogIGluaXRfcGFkKCk7CiAgaW5pdF90cmltKCk7CiAgaW5pdF9mcm9tSGV4KCk7CiAgZnVuY3Rpb24gcGFyc2VUcmFuc2FjdGlvbihzZXJpYWxpemVkVHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHR5cGUgPSBnZXRTZXJpYWxpemVkVHJhbnNhY3Rpb25UeXBlKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgICBpZiAodHlwZSA9PT0gImVpcDE1NTkiKQogICAgICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbkVJUDE1NTkoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgIGlmICh0eXBlID09PSAiZWlwMjkzMCIpCiAgICAgIHJldHVybiBwYXJzZVRyYW5zYWN0aW9uRUlQMjkzMChzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgaWYgKHR5cGUgPT09ICJlaXA0ODQ0IikKICAgICAgcmV0dXJuIHBhcnNlVHJhbnNhY3Rpb25FSVA0ODQ0KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgICBpZiAodHlwZSA9PT0gImVpcDc3MDIiKQogICAgICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbkVJUDc3MDIoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgIHJldHVybiBwYXJzZVRyYW5zYWN0aW9uTGVnYWN5KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25FSVA3NzAyKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgY29uc3QgdHJhbnNhY3Rpb25BcnJheSA9IHRvVHJhbnNhY3Rpb25BcnJheShzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3QgW2NoYWluSWQsIG5vbmNlLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbWF4RmVlUGVyR2FzLCBnYXMsIHRvLCB2YWx1ZSwgZGF0YSwgYWNjZXNzTGlzdCwgYXV0aG9yaXphdGlvbkxpc3QsIHYsIHIsIHNdID0gdHJhbnNhY3Rpb25BcnJheTsKICAgIGlmICh0cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCAhPT0gMTAgJiYgdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggIT09IDEzKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yKHsKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBjaGFpbklkLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhcywKICAgICAgICAgIG1heEZlZVBlckdhcywKICAgICAgICAgIGdhcywKICAgICAgICAgIHRvLAogICAgICAgICAgdmFsdWUsCiAgICAgICAgICBkYXRhLAogICAgICAgICAgYWNjZXNzTGlzdCwKICAgICAgICAgIGF1dGhvcml6YXRpb25MaXN0LAogICAgICAgICAgLi4udHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPiA5ID8gewogICAgICAgICAgICB2LAogICAgICAgICAgICByLAogICAgICAgICAgICBzCiAgICAgICAgICB9IDoge30KICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0eXBlOiAiZWlwNzcwMiIKICAgICAgfSk7CiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHsKICAgICAgY2hhaW5JZDogaGV4VG9OdW1iZXIoY2hhaW5JZCksCiAgICAgIHR5cGU6ICJlaXA3NzAyIgogICAgfTsKICAgIGlmIChpc0hleCh0bykgJiYgdG8gIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnRvID0gdG87CiAgICBpZiAoaXNIZXgoZ2FzKSAmJiBnYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhcyA9IGhleFRvQmlnSW50KGdhcyk7CiAgICBpZiAoaXNIZXgoZGF0YSkgJiYgZGF0YSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZGF0YSA9IGRhdGE7CiAgICBpZiAoaXNIZXgobm9uY2UpICYmIG5vbmNlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5ub25jZSA9IGhleFRvTnVtYmVyKG5vbmNlKTsKICAgIGlmIChpc0hleCh2YWx1ZSkgJiYgdmFsdWUgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnZhbHVlID0gaGV4VG9CaWdJbnQodmFsdWUpOwogICAgaWYgKGlzSGV4KG1heEZlZVBlckdhcykgJiYgbWF4RmVlUGVyR2FzICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5tYXhGZWVQZXJHYXMgPSBoZXhUb0JpZ0ludChtYXhGZWVQZXJHYXMpOwogICAgaWYgKGlzSGV4KG1heFByaW9yaXR5RmVlUGVyR2FzKSAmJiBtYXhQcmlvcml0eUZlZVBlckdhcyAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMgPSBoZXhUb0JpZ0ludChtYXhQcmlvcml0eUZlZVBlckdhcyk7CiAgICBpZiAoYWNjZXNzTGlzdC5sZW5ndGggIT09IDAgJiYgYWNjZXNzTGlzdCAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uYWNjZXNzTGlzdCA9IHBhcnNlQWNjZXNzTGlzdChhY2Nlc3NMaXN0KTsKICAgIGlmIChhdXRob3JpemF0aW9uTGlzdC5sZW5ndGggIT09IDAgJiYgYXV0aG9yaXphdGlvbkxpc3QgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmF1dGhvcml6YXRpb25MaXN0ID0gcGFyc2VBdXRob3JpemF0aW9uTGlzdChhdXRob3JpemF0aW9uTGlzdCk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDc3MDIodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDEzID8gcGFyc2VFSVAxNTVTaWduYXR1cmUodHJhbnNhY3Rpb25BcnJheSkgOiB2b2lkIDA7CiAgICByZXR1cm4geyAuLi5zaWduYXR1cmUsIC4uLnRyYW5zYWN0aW9uIH07CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25FSVA0ODQ0KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgY29uc3QgdHJhbnNhY3Rpb25PcldyYXBwZXJBcnJheSA9IHRvVHJhbnNhY3Rpb25BcnJheShzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3QgaGFzTmV0d29ya1dyYXBwZXIgPSB0cmFuc2FjdGlvbk9yV3JhcHBlckFycmF5Lmxlbmd0aCA9PT0gNDsKICAgIGNvbnN0IHRyYW5zYWN0aW9uQXJyYXkgPSBoYXNOZXR3b3JrV3JhcHBlciA/IHRyYW5zYWN0aW9uT3JXcmFwcGVyQXJyYXlbMF0gOiB0cmFuc2FjdGlvbk9yV3JhcHBlckFycmF5OwogICAgY29uc3Qgd3JhcHBlckFycmF5ID0gaGFzTmV0d29ya1dyYXBwZXIgPyB0cmFuc2FjdGlvbk9yV3JhcHBlckFycmF5LnNsaWNlKDEpIDogW107CiAgICBjb25zdCBbY2hhaW5JZCwgbm9uY2UsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBtYXhGZWVQZXJHYXMsIGdhcywgdG8sIHZhbHVlLCBkYXRhLCBhY2Nlc3NMaXN0LCBtYXhGZWVQZXJCbG9iR2FzLCBibG9iVmVyc2lvbmVkSGFzaGVzLCB2LCByLCBzXSA9IHRyYW5zYWN0aW9uQXJyYXk7CiAgICBjb25zdCBbYmxvYnMsIGNvbW1pdG1lbnRzLCBwcm9vZnNdID0gd3JhcHBlckFycmF5OwogICAgaWYgKCEodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDExIHx8IHRyYW5zYWN0aW9uQXJyYXkubGVuZ3RoID09PSAxNCkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkU2VyaWFsaXplZFRyYW5zYWN0aW9uRXJyb3IoewogICAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICAgIGNoYWluSWQsCiAgICAgICAgICBub25jZSwKICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzLAogICAgICAgICAgbWF4RmVlUGVyR2FzLAogICAgICAgICAgZ2FzLAogICAgICAgICAgdG8sCiAgICAgICAgICB2YWx1ZSwKICAgICAgICAgIGRhdGEsCiAgICAgICAgICBhY2Nlc3NMaXN0LAogICAgICAgICAgLi4udHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPiA5ID8gewogICAgICAgICAgICB2LAogICAgICAgICAgICByLAogICAgICAgICAgICBzCiAgICAgICAgICB9IDoge30KICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0eXBlOiAiZWlwNDg0NCIKICAgICAgfSk7CiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHsKICAgICAgYmxvYlZlcnNpb25lZEhhc2hlcywKICAgICAgY2hhaW5JZDogaGV4VG9OdW1iZXIoY2hhaW5JZCksCiAgICAgIHR5cGU6ICJlaXA0ODQ0IgogICAgfTsKICAgIGlmIChpc0hleCh0bykgJiYgdG8gIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnRvID0gdG87CiAgICBpZiAoaXNIZXgoZ2FzKSAmJiBnYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhcyA9IGhleFRvQmlnSW50KGdhcyk7CiAgICBpZiAoaXNIZXgoZGF0YSkgJiYgZGF0YSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZGF0YSA9IGRhdGE7CiAgICBpZiAoaXNIZXgobm9uY2UpICYmIG5vbmNlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5ub25jZSA9IGhleFRvTnVtYmVyKG5vbmNlKTsKICAgIGlmIChpc0hleCh2YWx1ZSkgJiYgdmFsdWUgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnZhbHVlID0gaGV4VG9CaWdJbnQodmFsdWUpOwogICAgaWYgKGlzSGV4KG1heEZlZVBlckJsb2JHYXMpICYmIG1heEZlZVBlckJsb2JHYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm1heEZlZVBlckJsb2JHYXMgPSBoZXhUb0JpZ0ludChtYXhGZWVQZXJCbG9iR2FzKTsKICAgIGlmIChpc0hleChtYXhGZWVQZXJHYXMpICYmIG1heEZlZVBlckdhcyAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24ubWF4RmVlUGVyR2FzID0gaGV4VG9CaWdJbnQobWF4RmVlUGVyR2FzKTsKICAgIGlmIChpc0hleChtYXhQcmlvcml0eUZlZVBlckdhcykgJiYgbWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm1heFByaW9yaXR5RmVlUGVyR2FzID0gaGV4VG9CaWdJbnQobWF4UHJpb3JpdHlGZWVQZXJHYXMpOwogICAgaWYgKGFjY2Vzc0xpc3QubGVuZ3RoICE9PSAwICYmIGFjY2Vzc0xpc3QgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmFjY2Vzc0xpc3QgPSBwYXJzZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBpZiAoYmxvYnMgJiYgY29tbWl0bWVudHMgJiYgcHJvb2ZzKQogICAgICB0cmFuc2FjdGlvbi5zaWRlY2FycyA9IHRvQmxvYlNpZGVjYXJzKHsKICAgICAgICBibG9icywKICAgICAgICBjb21taXRtZW50cywKICAgICAgICBwcm9vZnMKICAgICAgfSk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDQ4NDQodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDE0ID8gcGFyc2VFSVAxNTVTaWduYXR1cmUodHJhbnNhY3Rpb25BcnJheSkgOiB2b2lkIDA7CiAgICByZXR1cm4geyAuLi5zaWduYXR1cmUsIC4uLnRyYW5zYWN0aW9uIH07CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25FSVAxNTU5KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgY29uc3QgdHJhbnNhY3Rpb25BcnJheSA9IHRvVHJhbnNhY3Rpb25BcnJheShzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3QgW2NoYWluSWQsIG5vbmNlLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbWF4RmVlUGVyR2FzLCBnYXMsIHRvLCB2YWx1ZSwgZGF0YSwgYWNjZXNzTGlzdCwgdiwgciwgc10gPSB0cmFuc2FjdGlvbkFycmF5OwogICAgaWYgKCEodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDkgfHwgdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDEyKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRTZXJpYWxpemVkVHJhbnNhY3Rpb25FcnJvcih7CiAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgY2hhaW5JZCwKICAgICAgICAgIG5vbmNlLAogICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXMsCiAgICAgICAgICBtYXhGZWVQZXJHYXMsCiAgICAgICAgICBnYXMsCiAgICAgICAgICB0bywKICAgICAgICAgIHZhbHVlLAogICAgICAgICAgZGF0YSwKICAgICAgICAgIGFjY2Vzc0xpc3QsCiAgICAgICAgICAuLi50cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA+IDkgPyB7CiAgICAgICAgICAgIHYsCiAgICAgICAgICAgIHIsCiAgICAgICAgICAgIHMKICAgICAgICAgIH0gOiB7fQogICAgICAgIH0sCiAgICAgICAgc2VyaWFsaXplZFRyYW5zYWN0aW9uLAogICAgICAgIHR5cGU6ICJlaXAxNTU5IgogICAgICB9KTsKICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gewogICAgICBjaGFpbklkOiBoZXhUb051bWJlcihjaGFpbklkKSwKICAgICAgdHlwZTogImVpcDE1NTkiCiAgICB9OwogICAgaWYgKGlzSGV4KHRvKSAmJiB0byAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24udG8gPSB0bzsKICAgIGlmIChpc0hleChnYXMpICYmIGdhcyAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZ2FzID0gaGV4VG9CaWdJbnQoZ2FzKTsKICAgIGlmIChpc0hleChkYXRhKSAmJiBkYXRhICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5kYXRhID0gZGF0YTsKICAgIGlmIChpc0hleChub25jZSkgJiYgbm9uY2UgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm5vbmNlID0gaGV4VG9OdW1iZXIobm9uY2UpOwogICAgaWYgKGlzSGV4KHZhbHVlKSAmJiB2YWx1ZSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24udmFsdWUgPSBoZXhUb0JpZ0ludCh2YWx1ZSk7CiAgICBpZiAoaXNIZXgobWF4RmVlUGVyR2FzKSAmJiBtYXhGZWVQZXJHYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLm1heEZlZVBlckdhcyA9IGhleFRvQmlnSW50KG1heEZlZVBlckdhcyk7CiAgICBpZiAoaXNIZXgobWF4UHJpb3JpdHlGZWVQZXJHYXMpICYmIG1heFByaW9yaXR5RmVlUGVyR2FzICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5tYXhQcmlvcml0eUZlZVBlckdhcyA9IGhleFRvQmlnSW50KG1heFByaW9yaXR5RmVlUGVyR2FzKTsKICAgIGlmIChhY2Nlc3NMaXN0Lmxlbmd0aCAhPT0gMCAmJiBhY2Nlc3NMaXN0ICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5hY2Nlc3NMaXN0ID0gcGFyc2VBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpOwogICAgYXNzZXJ0VHJhbnNhY3Rpb25FSVAxNTU5KHRyYW5zYWN0aW9uKTsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRyYW5zYWN0aW9uQXJyYXkubGVuZ3RoID09PSAxMiA/IHBhcnNlRUlQMTU1U2lnbmF0dXJlKHRyYW5zYWN0aW9uQXJyYXkpIDogdm9pZCAwOwogICAgcmV0dXJuIHsgLi4uc2lnbmF0dXJlLCAuLi50cmFuc2FjdGlvbiB9OwogIH0KICBmdW5jdGlvbiBwYXJzZVRyYW5zYWN0aW9uRUlQMjkzMChzZXJpYWxpemVkVHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHRyYW5zYWN0aW9uQXJyYXkgPSB0b1RyYW5zYWN0aW9uQXJyYXkoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgIGNvbnN0IFtjaGFpbklkLCBub25jZSwgZ2FzUHJpY2UsIGdhcywgdG8sIHZhbHVlLCBkYXRhLCBhY2Nlc3NMaXN0LCB2LCByLCBzXSA9IHRyYW5zYWN0aW9uQXJyYXk7CiAgICBpZiAoISh0cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA9PT0gOCB8fCB0cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA9PT0gMTEpKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yKHsKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBjaGFpbklkLAogICAgICAgICAgbm9uY2UsCiAgICAgICAgICBnYXNQcmljZSwKICAgICAgICAgIGdhcywKICAgICAgICAgIHRvLAogICAgICAgICAgdmFsdWUsCiAgICAgICAgICBkYXRhLAogICAgICAgICAgYWNjZXNzTGlzdCwKICAgICAgICAgIC4uLnRyYW5zYWN0aW9uQXJyYXkubGVuZ3RoID4gOCA/IHsKICAgICAgICAgICAgdiwKICAgICAgICAgICAgciwKICAgICAgICAgICAgcwogICAgICAgICAgfSA6IHt9CiAgICAgICAgfSwKICAgICAgICBzZXJpYWxpemVkVHJhbnNhY3Rpb24sCiAgICAgICAgdHlwZTogImVpcDI5MzAiCiAgICAgIH0pOwogICAgY29uc3QgdHJhbnNhY3Rpb24gPSB7CiAgICAgIGNoYWluSWQ6IGhleFRvTnVtYmVyKGNoYWluSWQpLAogICAgICB0eXBlOiAiZWlwMjkzMCIKICAgIH07CiAgICBpZiAoaXNIZXgodG8pICYmIHRvICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi50byA9IHRvOwogICAgaWYgKGlzSGV4KGdhcykgJiYgZ2FzICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5nYXMgPSBoZXhUb0JpZ0ludChnYXMpOwogICAgaWYgKGlzSGV4KGRhdGEpICYmIGRhdGEgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmRhdGEgPSBkYXRhOwogICAgaWYgKGlzSGV4KG5vbmNlKSAmJiBub25jZSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24ubm9uY2UgPSBoZXhUb051bWJlcihub25jZSk7CiAgICBpZiAoaXNIZXgodmFsdWUpICYmIHZhbHVlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi52YWx1ZSA9IGhleFRvQmlnSW50KHZhbHVlKTsKICAgIGlmIChpc0hleChnYXNQcmljZSkgJiYgZ2FzUHJpY2UgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhc1ByaWNlID0gaGV4VG9CaWdJbnQoZ2FzUHJpY2UpOwogICAgaWYgKGFjY2Vzc0xpc3QubGVuZ3RoICE9PSAwICYmIGFjY2Vzc0xpc3QgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmFjY2Vzc0xpc3QgPSBwYXJzZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDI5MzAodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDExID8gcGFyc2VFSVAxNTVTaWduYXR1cmUodHJhbnNhY3Rpb25BcnJheSkgOiB2b2lkIDA7CiAgICByZXR1cm4geyAuLi5zaWduYXR1cmUsIC4uLnRyYW5zYWN0aW9uIH07CiAgfQogIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb25MZWdhY3koc2VyaWFsaXplZFRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCB0cmFuc2FjdGlvbkFycmF5ID0gZnJvbVJscChzZXJpYWxpemVkVHJhbnNhY3Rpb24sICJoZXgiKTsKICAgIGNvbnN0IFtub25jZSwgZ2FzUHJpY2UsIGdhcywgdG8sIHZhbHVlLCBkYXRhLCBjaGFpbklkT3JWXywgciwgc10gPSB0cmFuc2FjdGlvbkFycmF5OwogICAgaWYgKCEodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDYgfHwgdHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDkpKQogICAgICB0aHJvdyBuZXcgSW52YWxpZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkVycm9yKHsKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBub25jZSwKICAgICAgICAgIGdhc1ByaWNlLAogICAgICAgICAgZ2FzLAogICAgICAgICAgdG8sCiAgICAgICAgICB2YWx1ZSwKICAgICAgICAgIGRhdGEsCiAgICAgICAgICAuLi50cmFuc2FjdGlvbkFycmF5Lmxlbmd0aCA+IDYgPyB7CiAgICAgICAgICAgIHY6IGNoYWluSWRPclZfLAogICAgICAgICAgICByLAogICAgICAgICAgICBzCiAgICAgICAgICB9IDoge30KICAgICAgICB9LAogICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0eXBlOiAibGVnYWN5IgogICAgICB9KTsKICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gewogICAgICB0eXBlOiAibGVnYWN5IgogICAgfTsKICAgIGlmIChpc0hleCh0bykgJiYgdG8gIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnRvID0gdG87CiAgICBpZiAoaXNIZXgoZ2FzKSAmJiBnYXMgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLmdhcyA9IGhleFRvQmlnSW50KGdhcyk7CiAgICBpZiAoaXNIZXgoZGF0YSkgJiYgZGF0YSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZGF0YSA9IGRhdGE7CiAgICBpZiAoaXNIZXgobm9uY2UpICYmIG5vbmNlICE9PSAiMHgiKQogICAgICB0cmFuc2FjdGlvbi5ub25jZSA9IGhleFRvTnVtYmVyKG5vbmNlKTsKICAgIGlmIChpc0hleCh2YWx1ZSkgJiYgdmFsdWUgIT09ICIweCIpCiAgICAgIHRyYW5zYWN0aW9uLnZhbHVlID0gaGV4VG9CaWdJbnQodmFsdWUpOwogICAgaWYgKGlzSGV4KGdhc1ByaWNlKSAmJiBnYXNQcmljZSAhPT0gIjB4IikKICAgICAgdHJhbnNhY3Rpb24uZ2FzUHJpY2UgPSBoZXhUb0JpZ0ludChnYXNQcmljZSk7CiAgICBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSh0cmFuc2FjdGlvbik7CiAgICBpZiAodHJhbnNhY3Rpb25BcnJheS5sZW5ndGggPT09IDYpCiAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgIGNvbnN0IGNoYWluSWRPclYgPSBpc0hleChjaGFpbklkT3JWXykgJiYgY2hhaW5JZE9yVl8gIT09ICIweCIgPyBoZXhUb0JpZ0ludChjaGFpbklkT3JWXykgOiAwbjsKICAgIGlmIChzID09PSAiMHgiICYmIHIgPT09ICIweCIpIHsKICAgICAgaWYgKGNoYWluSWRPclYgPiAwKQogICAgICAgIHRyYW5zYWN0aW9uLmNoYWluSWQgPSBOdW1iZXIoY2hhaW5JZE9yVik7CiAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgIH0KICAgIGNvbnN0IHYgPSBjaGFpbklkT3JWOwogICAgY29uc3QgY2hhaW5JZCA9IE51bWJlcigodiAtIDM1bikgLyAybik7CiAgICBpZiAoY2hhaW5JZCA+IDApCiAgICAgIHRyYW5zYWN0aW9uLmNoYWluSWQgPSBjaGFpbklkOwogICAgZWxzZSBpZiAodiAhPT0gMjduICYmIHYgIT09IDI4bikKICAgICAgdGhyb3cgbmV3IEludmFsaWRMZWdhY3lWRXJyb3IoeyB2IH0pOwogICAgdHJhbnNhY3Rpb24udiA9IHY7CiAgICB0cmFuc2FjdGlvbi5zID0gczsKICAgIHRyYW5zYWN0aW9uLnIgPSByOwogICAgdHJhbnNhY3Rpb24ueVBhcml0eSA9IHYgJSAybiA9PT0gMG4gPyAxIDogMDsKICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICB9CiAgZnVuY3Rpb24gdG9UcmFuc2FjdGlvbkFycmF5KHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikgewogICAgcmV0dXJuIGZyb21SbHAoYDB4JHtzZXJpYWxpemVkVHJhbnNhY3Rpb24uc2xpY2UoNCl9YCwgImhleCIpOwogIH0KICBmdW5jdGlvbiBwYXJzZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdF8pIHsKICAgIGNvbnN0IGFjY2Vzc0xpc3QgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWNjZXNzTGlzdF8ubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgW2FkZHJlc3MsIHN0b3JhZ2VLZXlzXSA9IGFjY2Vzc0xpc3RfW2ldOwogICAgICBpZiAoIWlzQWRkcmVzcyhhZGRyZXNzLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzIH0pOwogICAgICBhY2Nlc3NMaXN0LnB1c2goewogICAgICAgIGFkZHJlc3MsCiAgICAgICAgc3RvcmFnZUtleXM6IHN0b3JhZ2VLZXlzLm1hcCgoa2V5KSA9PiBpc0hhc2goa2V5KSA/IGtleSA6IHRyaW0oa2V5KSkKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gYWNjZXNzTGlzdDsKICB9CiAgZnVuY3Rpb24gcGFyc2VBdXRob3JpemF0aW9uTGlzdChzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3QpIHsKICAgIGNvbnN0IGF1dGhvcml6YXRpb25MaXN0ID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcmlhbGl6ZWRBdXRob3JpemF0aW9uTGlzdC5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBbY2hhaW5JZCwgY29udHJhY3RBZGRyZXNzLCBub25jZSwgeVBhcml0eSwgciwgc10gPSBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3RbaV07CiAgICAgIGF1dGhvcml6YXRpb25MaXN0LnB1c2goewogICAgICAgIGNoYWluSWQ6IGhleFRvTnVtYmVyKGNoYWluSWQpLAogICAgICAgIGNvbnRyYWN0QWRkcmVzcywKICAgICAgICBub25jZTogaGV4VG9OdW1iZXIobm9uY2UpLAogICAgICAgIC4uLnBhcnNlRUlQMTU1U2lnbmF0dXJlKFt5UGFyaXR5LCByLCBzXSkKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gYXV0aG9yaXphdGlvbkxpc3Q7CiAgfQogIGZ1bmN0aW9uIHBhcnNlRUlQMTU1U2lnbmF0dXJlKHRyYW5zYWN0aW9uQXJyYXkpIHsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRyYW5zYWN0aW9uQXJyYXkuc2xpY2UoLTMpOwogICAgY29uc3QgdiA9IHNpZ25hdHVyZVswXSA9PT0gIjB4IiB8fCBoZXhUb0JpZ0ludChzaWduYXR1cmVbMF0pID09PSAwbiA/IDI3biA6IDI4bjsKICAgIHJldHVybiB7CiAgICAgIHI6IHBhZEhleChzaWduYXR1cmVbMV0sIHsgc2l6ZTogMzIgfSksCiAgICAgIHM6IHBhZEhleChzaWduYXR1cmVbMl0sIHsgc2l6ZTogMzIgfSksCiAgICAgIHYsCiAgICAgIHlQYXJpdHk6IHYgPT09IDI3biA/IDAgOiAxCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy90cmFuc2FjdGlvbi9zZXJpYWxpemVUcmFuc2FjdGlvbi5qcwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdHJpbSgpOwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9leHBlcmltZW50YWwvZWlwNzcwMi91dGlscy9zZXJpYWxpemVBdXRob3JpemF0aW9uTGlzdC5qcwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBzZXJpYWxpemVBdXRob3JpemF0aW9uTGlzdChhdXRob3JpemF0aW9uTGlzdCkgewogICAgaWYgKCFhdXRob3JpemF0aW9uTGlzdCB8fCBhdXRob3JpemF0aW9uTGlzdC5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiBbXTsKICAgIGNvbnN0IHNlcmlhbGl6ZWRBdXRob3JpemF0aW9uTGlzdCA9IFtdOwogICAgZm9yIChjb25zdCBhdXRob3JpemF0aW9uIG9mIGF1dGhvcml6YXRpb25MaXN0KSB7CiAgICAgIGNvbnN0IHsgY29udHJhY3RBZGRyZXNzLCBjaGFpbklkLCBub25jZSwgLi4uc2lnbmF0dXJlIH0gPSBhdXRob3JpemF0aW9uOwogICAgICBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3QucHVzaChbCiAgICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgICAgY29udHJhY3RBZGRyZXNzLAogICAgICAgIHRvSGV4KG5vbmNlKSwKICAgICAgICAuLi50b1lQYXJpdHlTaWduYXR1cmVBcnJheSh7fSwgc2lnbmF0dXJlKQogICAgICBdKTsKICAgIH0KICAgIHJldHVybiBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL3NlcmlhbGl6ZUFjY2Vzc0xpc3QuanMKICBpbml0X2FkZHJlc3MoKTsKICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBmdW5jdGlvbiBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpIHsKICAgIGlmICghYWNjZXNzTGlzdCB8fCBhY2Nlc3NMaXN0Lmxlbmd0aCA9PT0gMCkKICAgICAgcmV0dXJuIFtdOwogICAgY29uc3Qgc2VyaWFsaXplZEFjY2Vzc0xpc3QgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWNjZXNzTGlzdC5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCB7IGFkZHJlc3MsIHN0b3JhZ2VLZXlzIH0gPSBhY2Nlc3NMaXN0W2ldOwogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHN0b3JhZ2VLZXlzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgaWYgKHN0b3JhZ2VLZXlzW2pdLmxlbmd0aCAtIDIgIT09IDY0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFN0b3JhZ2VLZXlTaXplRXJyb3IoeyBzdG9yYWdlS2V5OiBzdG9yYWdlS2V5c1tqXSB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFpc0FkZHJlc3MoYWRkcmVzcywgeyBzdHJpY3Q6IGZhbHNlIH0pKSB7CiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzIH0pOwogICAgICB9CiAgICAgIHNlcmlhbGl6ZWRBY2Nlc3NMaXN0LnB1c2goW2FkZHJlc3MsIHN0b3JhZ2VLZXlzXSk7CiAgICB9CiAgICByZXR1cm4gc2VyaWFsaXplZEFjY2Vzc0xpc3Q7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3RyYW5zYWN0aW9uL3NlcmlhbGl6ZVRyYW5zYWN0aW9uLmpzCiAgZnVuY3Rpb24gc2VyaWFsaXplVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgdHlwZSA9IGdldFRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvbik7CiAgICBpZiAodHlwZSA9PT0gImVpcDE1NTkiKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVAxNTU5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogICAgaWYgKHR5cGUgPT09ICJlaXAyOTMwIikKICAgICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uRUlQMjkzMCh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKTsKICAgIGlmICh0eXBlID09PSAiZWlwNDg0NCIpCiAgICAgIHJldHVybiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDQ4NDQodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSk7CiAgICBpZiAodHlwZSA9PT0gImVpcDc3MDIiKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVA3NzAyKHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uTGVnYWN5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogIH0KICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDc3MDIodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgeyBhdXRob3JpemF0aW9uTGlzdCwgY2hhaW5JZCwgZ2FzLCBub25jZSwgdG8sIHZhbHVlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBhY2Nlc3NMaXN0LCBkYXRhIH0gPSB0cmFuc2FjdGlvbjsKICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQNzcwMih0cmFuc2FjdGlvbik7CiAgICBjb25zdCBzZXJpYWxpemVkQWNjZXNzTGlzdCA9IHNlcmlhbGl6ZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBjb25zdCBzZXJpYWxpemVkQXV0aG9yaXphdGlvbkxpc3QgPSBzZXJpYWxpemVBdXRob3JpemF0aW9uTGlzdChhdXRob3JpemF0aW9uTGlzdCk7CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4MDQiLAogICAgICB0b1JscChbCiAgICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgICAgbm9uY2UgPyB0b0hleChub25jZSkgOiAiMHgiLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzID8gdG9IZXgobWF4UHJpb3JpdHlGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgICBtYXhGZWVQZXJHYXMgPyB0b0hleChtYXhGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgICB0byA/PyAiMHgiLAogICAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgICBkYXRhID8/ICIweCIsCiAgICAgICAgc2VyaWFsaXplZEFjY2Vzc0xpc3QsCiAgICAgICAgc2VyaWFsaXplZEF1dGhvcml6YXRpb25MaXN0LAogICAgICAgIC4uLnRvWVBhcml0eVNpZ25hdHVyZUFycmF5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpCiAgICAgIF0pCiAgICBdKTsKICB9CiAgZnVuY3Rpb24gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVA0ODQ0KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpIHsKICAgIGNvbnN0IHsgY2hhaW5JZCwgZ2FzLCBub25jZSwgdG8sIHZhbHVlLCBtYXhGZWVQZXJCbG9iR2FzLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBhY2Nlc3NMaXN0LCBkYXRhIH0gPSB0cmFuc2FjdGlvbjsKICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQNDg0NCh0cmFuc2FjdGlvbik7CiAgICBsZXQgYmxvYlZlcnNpb25lZEhhc2hlcyA9IHRyYW5zYWN0aW9uLmJsb2JWZXJzaW9uZWRIYXNoZXM7CiAgICBsZXQgc2lkZWNhcnMgPSB0cmFuc2FjdGlvbi5zaWRlY2FyczsKICAgIGlmICh0cmFuc2FjdGlvbi5ibG9icyAmJiAodHlwZW9mIGJsb2JWZXJzaW9uZWRIYXNoZXMgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiBzaWRlY2FycyA9PT0gInVuZGVmaW5lZCIpKSB7CiAgICAgIGNvbnN0IGJsb2JzMiA9IHR5cGVvZiB0cmFuc2FjdGlvbi5ibG9ic1swXSA9PT0gInN0cmluZyIgPyB0cmFuc2FjdGlvbi5ibG9icyA6IHRyYW5zYWN0aW9uLmJsb2JzLm1hcCgoeCkgPT4gYnl0ZXNUb0hleCh4KSk7CiAgICAgIGNvbnN0IGt6ZyA9IHRyYW5zYWN0aW9uLmt6ZzsKICAgICAgY29uc3QgY29tbWl0bWVudHMyID0gYmxvYnNUb0NvbW1pdG1lbnRzKHsKICAgICAgICBibG9iczogYmxvYnMyLAogICAgICAgIGt6ZwogICAgICB9KTsKICAgICAgaWYgKHR5cGVvZiBibG9iVmVyc2lvbmVkSGFzaGVzID09PSAidW5kZWZpbmVkIikKICAgICAgICBibG9iVmVyc2lvbmVkSGFzaGVzID0gY29tbWl0bWVudHNUb1ZlcnNpb25lZEhhc2hlcyh7CiAgICAgICAgICBjb21taXRtZW50czogY29tbWl0bWVudHMyCiAgICAgICAgfSk7CiAgICAgIGlmICh0eXBlb2Ygc2lkZWNhcnMgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgY29uc3QgcHJvb2ZzMiA9IGJsb2JzVG9Qcm9vZnMoeyBibG9iczogYmxvYnMyLCBjb21taXRtZW50czogY29tbWl0bWVudHMyLCBremcgfSk7CiAgICAgICAgc2lkZWNhcnMgPSB0b0Jsb2JTaWRlY2Fycyh7IGJsb2JzOiBibG9iczIsIGNvbW1pdG1lbnRzOiBjb21taXRtZW50czIsIHByb29mczogcHJvb2ZzMiB9KTsKICAgICAgfQogICAgfQogICAgY29uc3Qgc2VyaWFsaXplZEFjY2Vzc0xpc3QgPSBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpOwogICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICB0b0hleChjaGFpbklkKSwKICAgICAgbm9uY2UgPyB0b0hleChub25jZSkgOiAiMHgiLAogICAgICBtYXhQcmlvcml0eUZlZVBlckdhcyA/IHRvSGV4KG1heFByaW9yaXR5RmVlUGVyR2FzKSA6ICIweCIsCiAgICAgIG1heEZlZVBlckdhcyA/IHRvSGV4KG1heEZlZVBlckdhcykgOiAiMHgiLAogICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgdG8gPz8gIjB4IiwKICAgICAgdmFsdWUgPyB0b0hleCh2YWx1ZSkgOiAiMHgiLAogICAgICBkYXRhID8/ICIweCIsCiAgICAgIHNlcmlhbGl6ZWRBY2Nlc3NMaXN0LAogICAgICBtYXhGZWVQZXJCbG9iR2FzID8gdG9IZXgobWF4RmVlUGVyQmxvYkdhcykgOiAiMHgiLAogICAgICBibG9iVmVyc2lvbmVkSGFzaGVzID8/IFtdLAogICAgICAuLi50b1lQYXJpdHlTaWduYXR1cmVBcnJheSh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKQogICAgXTsKICAgIGNvbnN0IGJsb2JzID0gW107CiAgICBjb25zdCBjb21taXRtZW50cyA9IFtdOwogICAgY29uc3QgcHJvb2ZzID0gW107CiAgICBpZiAoc2lkZWNhcnMpCiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2lkZWNhcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBjb25zdCB7IGJsb2IsIGNvbW1pdG1lbnQsIHByb29mIH0gPSBzaWRlY2Fyc1tpXTsKICAgICAgICBibG9icy5wdXNoKGJsb2IpOwogICAgICAgIGNvbW1pdG1lbnRzLnB1c2goY29tbWl0bWVudCk7CiAgICAgICAgcHJvb2ZzLnB1c2gocHJvb2YpOwogICAgICB9CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4MDMiLAogICAgICBzaWRlY2FycyA/ICgKICAgICAgICAvLyBJZiBzaWRlY2FycyBhcmUgZW5hYmxlZCwgZW52ZWxvcGUgdHVybnMgaW50byBhICJ3cmFwcGVyIjoKICAgICAgICB0b1JscChbc2VyaWFsaXplZFRyYW5zYWN0aW9uLCBibG9icywgY29tbWl0bWVudHMsIHByb29mc10pCiAgICAgICkgOiAoCiAgICAgICAgLy8gSWYgc2lkZWNhcnMgYXJlIGRpc2FibGVkLCBzdGFuZGFyZCBlbnZlbG9wZSBpcyB1c2VkOgogICAgICAgIHRvUmxwKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikKICAgICAgKQogICAgXSk7CiAgfQogIGZ1bmN0aW9uIHNlcmlhbGl6ZVRyYW5zYWN0aW9uRUlQMTU1OSh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKSB7CiAgICBjb25zdCB7IGNoYWluSWQsIGdhcywgbm9uY2UsIHRvLCB2YWx1ZSwgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgYWNjZXNzTGlzdCwgZGF0YSB9ID0gdHJhbnNhY3Rpb247CiAgICBhc3NlcnRUcmFuc2FjdGlvbkVJUDE1NTkodHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2VyaWFsaXplZEFjY2Vzc0xpc3QgPSBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpOwogICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICB0b0hleChjaGFpbklkKSwKICAgICAgbm9uY2UgPyB0b0hleChub25jZSkgOiAiMHgiLAogICAgICBtYXhQcmlvcml0eUZlZVBlckdhcyA/IHRvSGV4KG1heFByaW9yaXR5RmVlUGVyR2FzKSA6ICIweCIsCiAgICAgIG1heEZlZVBlckdhcyA/IHRvSGV4KG1heEZlZVBlckdhcykgOiAiMHgiLAogICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgdG8gPz8gIjB4IiwKICAgICAgdmFsdWUgPyB0b0hleCh2YWx1ZSkgOiAiMHgiLAogICAgICBkYXRhID8/ICIweCIsCiAgICAgIHNlcmlhbGl6ZWRBY2Nlc3NMaXN0LAogICAgICAuLi50b1lQYXJpdHlTaWduYXR1cmVBcnJheSh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKQogICAgXTsKICAgIHJldHVybiBjb25jYXRIZXgoWwogICAgICAiMHgwMiIsCiAgICAgIHRvUmxwKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbikKICAgIF0pOwogIH0KICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDI5MzAodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgeyBjaGFpbklkLCBnYXMsIGRhdGEsIG5vbmNlLCB0bywgdmFsdWUsIGFjY2Vzc0xpc3QsIGdhc1ByaWNlIH0gPSB0cmFuc2FjdGlvbjsKICAgIGFzc2VydFRyYW5zYWN0aW9uRUlQMjkzMCh0cmFuc2FjdGlvbik7CiAgICBjb25zdCBzZXJpYWxpemVkQWNjZXNzTGlzdCA9IHNlcmlhbGl6ZUFjY2Vzc0xpc3QoYWNjZXNzTGlzdCk7CiAgICBjb25zdCBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBbCiAgICAgIHRvSGV4KGNoYWluSWQpLAogICAgICBub25jZSA/IHRvSGV4KG5vbmNlKSA6ICIweCIsCiAgICAgIGdhc1ByaWNlID8gdG9IZXgoZ2FzUHJpY2UpIDogIjB4IiwKICAgICAgZ2FzID8gdG9IZXgoZ2FzKSA6ICIweCIsCiAgICAgIHRvID8/ICIweCIsCiAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiLAogICAgICBzZXJpYWxpemVkQWNjZXNzTGlzdCwKICAgICAgLi4udG9ZUGFyaXR5U2lnbmF0dXJlQXJyYXkodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkKICAgIF07CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4MDEiLAogICAgICB0b1JscChzZXJpYWxpemVkVHJhbnNhY3Rpb24pCiAgICBdKTsKICB9CiAgZnVuY3Rpb24gc2VyaWFsaXplVHJhbnNhY3Rpb25MZWdhY3kodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgY29uc3QgeyBjaGFpbklkID0gMCwgZ2FzLCBkYXRhLCBub25jZSwgdG8sIHZhbHVlLCBnYXNQcmljZSB9ID0gdHJhbnNhY3Rpb247CiAgICBhc3NlcnRUcmFuc2FjdGlvbkxlZ2FjeSh0cmFuc2FjdGlvbik7CiAgICBsZXQgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICBub25jZSA/IHRvSGV4KG5vbmNlKSA6ICIweCIsCiAgICAgIGdhc1ByaWNlID8gdG9IZXgoZ2FzUHJpY2UpIDogIjB4IiwKICAgICAgZ2FzID8gdG9IZXgoZ2FzKSA6ICIweCIsCiAgICAgIHRvID8/ICIweCIsCiAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiCiAgICBdOwogICAgaWYgKHNpZ25hdHVyZSkgewogICAgICBjb25zdCB2ID0gKCgpID0+IHsKICAgICAgICBpZiAoc2lnbmF0dXJlLnYgPj0gMzVuKSB7CiAgICAgICAgICBjb25zdCBpbmZlcnJlZENoYWluSWQgPSAoc2lnbmF0dXJlLnYgLSAzNW4pIC8gMm47CiAgICAgICAgICBpZiAoaW5mZXJyZWRDaGFpbklkID4gMCkKICAgICAgICAgICAgcmV0dXJuIHNpZ25hdHVyZS52OwogICAgICAgICAgcmV0dXJuIDI3biArIChzaWduYXR1cmUudiA9PT0gMzVuID8gMG4gOiAxbik7CiAgICAgICAgfQogICAgICAgIGlmIChjaGFpbklkID4gMCkKICAgICAgICAgIHJldHVybiBCaWdJbnQoY2hhaW5JZCAqIDIpICsgQmlnSW50KDM1biArIHNpZ25hdHVyZS52IC0gMjduKTsKICAgICAgICBjb25zdCB2MiA9IDI3biArIChzaWduYXR1cmUudiA9PT0gMjduID8gMG4gOiAxbik7CiAgICAgICAgaWYgKHNpZ25hdHVyZS52ICE9PSB2MikKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkTGVnYWN5VkVycm9yKHsgdjogc2lnbmF0dXJlLnYgfSk7CiAgICAgICAgcmV0dXJuIHYyOwogICAgICB9KSgpOwogICAgICBjb25zdCByID0gdHJpbShzaWduYXR1cmUucik7CiAgICAgIGNvbnN0IHMgPSB0cmltKHNpZ25hdHVyZS5zKTsKICAgICAgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICAgIC4uLnNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwKICAgICAgICB0b0hleCh2KSwKICAgICAgICByID09PSAiMHgwMCIgPyAiMHgiIDogciwKICAgICAgICBzID09PSAiMHgwMCIgPyAiMHgiIDogcwogICAgICBdOwogICAgfSBlbHNlIGlmIChjaGFpbklkID4gMCkgewogICAgICBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBbCiAgICAgICAgLi4uc2VyaWFsaXplZFRyYW5zYWN0aW9uLAogICAgICAgIHRvSGV4KGNoYWluSWQpLAogICAgICAgICIweCIsCiAgICAgICAgIjB4IgogICAgICBdOwogICAgfQogICAgcmV0dXJuIHRvUmxwKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7CiAgfQogIGZ1bmN0aW9uIHRvWVBhcml0eVNpZ25hdHVyZUFycmF5KHRyYW5zYWN0aW9uLCBzaWduYXR1cmVfKSB7CiAgICBjb25zdCBzaWduYXR1cmUgPSBzaWduYXR1cmVfID8/IHRyYW5zYWN0aW9uOwogICAgY29uc3QgeyB2LCB5UGFyaXR5IH0gPSBzaWduYXR1cmU7CiAgICBpZiAodHlwZW9mIHNpZ25hdHVyZS5yID09PSAidW5kZWZpbmVkIikKICAgICAgcmV0dXJuIFtdOwogICAgaWYgKHR5cGVvZiBzaWduYXR1cmUucyA9PT0gInVuZGVmaW5lZCIpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICh0eXBlb2YgdiA9PT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIHlQYXJpdHkgPT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gW107CiAgICBjb25zdCByID0gdHJpbShzaWduYXR1cmUucik7CiAgICBjb25zdCBzID0gdHJpbShzaWduYXR1cmUucyk7CiAgICBjb25zdCB5UGFyaXR5XyA9ICgoKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgeVBhcml0eSA9PT0gIm51bWJlciIpCiAgICAgICAgcmV0dXJuIHlQYXJpdHkgPyB0b0hleCgxKSA6ICIweCI7CiAgICAgIGlmICh2ID09PSAwbikKICAgICAgICByZXR1cm4gIjB4IjsKICAgICAgaWYgKHYgPT09IDFuKQogICAgICAgIHJldHVybiB0b0hleCgxKTsKICAgICAgcmV0dXJuIHYgPT09IDI3biA/ICIweCIgOiB0b0hleCgxKTsKICAgIH0pKCk7CiAgICByZXR1cm4gW3lQYXJpdHlfLCByID09PSAiMHgwMCIgPyAiMHgiIDogciwgcyA9PT0gIjB4MDAiID8gIjB4IiA6IHNdOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L3BhcnNlVW5pdHMuanMKICBmdW5jdGlvbiBwYXJzZVVuaXRzKHZhbHVlLCBkZWNpbWFscykgewogICAgbGV0IFtpbnRlZ2VyLCBmcmFjdGlvbiA9ICIwIl0gPSB2YWx1ZS5zcGxpdCgiLiIpOwogICAgY29uc3QgbmVnYXRpdmUgPSBpbnRlZ2VyLnN0YXJ0c1dpdGgoIi0iKTsKICAgIGlmIChuZWdhdGl2ZSkKICAgICAgaW50ZWdlciA9IGludGVnZXIuc2xpY2UoMSk7CiAgICBmcmFjdGlvbiA9IGZyYWN0aW9uLnJlcGxhY2UoLygwKykkLywgIiIpOwogICAgaWYgKGRlY2ltYWxzID09PSAwKSB7CiAgICAgIGlmIChNYXRoLnJvdW5kKE51bWJlcihgLiR7ZnJhY3Rpb259YCkpID09PSAxKQogICAgICAgIGludGVnZXIgPSBgJHtCaWdJbnQoaW50ZWdlcikgKyAxbn1gOwogICAgICBmcmFjdGlvbiA9ICIiOwogICAgfSBlbHNlIGlmIChmcmFjdGlvbi5sZW5ndGggPiBkZWNpbWFscykgewogICAgICBjb25zdCBbbGVmdCwgdW5pdCwgcmlnaHRdID0gWwogICAgICAgIGZyYWN0aW9uLnNsaWNlKDAsIGRlY2ltYWxzIC0gMSksCiAgICAgICAgZnJhY3Rpb24uc2xpY2UoZGVjaW1hbHMgLSAxLCBkZWNpbWFscyksCiAgICAgICAgZnJhY3Rpb24uc2xpY2UoZGVjaW1hbHMpCiAgICAgIF07CiAgICAgIGNvbnN0IHJvdW5kZWQgPSBNYXRoLnJvdW5kKE51bWJlcihgJHt1bml0fS4ke3JpZ2h0fWApKTsKICAgICAgaWYgKHJvdW5kZWQgPiA5KQogICAgICAgIGZyYWN0aW9uID0gYCR7QmlnSW50KGxlZnQpICsgQmlnSW50KDEpfTBgLnBhZFN0YXJ0KGxlZnQubGVuZ3RoICsgMSwgIjAiKTsKICAgICAgZWxzZQogICAgICAgIGZyYWN0aW9uID0gYCR7bGVmdH0ke3JvdW5kZWR9YDsKICAgICAgaWYgKGZyYWN0aW9uLmxlbmd0aCA+IGRlY2ltYWxzKSB7CiAgICAgICAgZnJhY3Rpb24gPSBmcmFjdGlvbi5zbGljZSgxKTsKICAgICAgICBpbnRlZ2VyID0gYCR7QmlnSW50KGludGVnZXIpICsgMW59YDsKICAgICAgfQogICAgICBmcmFjdGlvbiA9IGZyYWN0aW9uLnNsaWNlKDAsIGRlY2ltYWxzKTsKICAgIH0gZWxzZSB7CiAgICAgIGZyYWN0aW9uID0gZnJhY3Rpb24ucGFkRW5kKGRlY2ltYWxzLCAiMCIpOwogICAgfQogICAgcmV0dXJuIEJpZ0ludChgJHtuZWdhdGl2ZSA/ICItIiA6ICIifSR7aW50ZWdlcn0ke2ZyYWN0aW9ufWApOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy91bml0L3BhcnNlRXRoZXIuanMKICBpbml0X3VuaXQoKTsKICBmdW5jdGlvbiBwYXJzZUV0aGVyKGV0aGVyLCB1bml0ID0gIndlaSIpIHsKICAgIHJldHVybiBwYXJzZVVuaXRzKGV0aGVyLCBldGhlclVuaXRzW3VuaXRdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvdW5pdC9wYXJzZUd3ZWkuanMKICBpbml0X3VuaXQoKTsKICBmdW5jdGlvbiBwYXJzZUd3ZWkoZXRoZXIsIHVuaXQgPSAid2VpIikgewogICAgcmV0dXJuIHBhcnNlVW5pdHMoZXRoZXIsIGd3ZWlVbml0c1t1bml0XSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL25vbmNlTWFuYWdlci5qcwogIGluaXRfbHJ1KCk7CiAgZnVuY3Rpb24gY3JlYXRlTm9uY2VNYW5hZ2VyKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgc291cmNlIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgZGVsdGFNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgY29uc3Qgbm9uY2VNYXAgPSBuZXcgTHJ1TWFwKDgxOTIpOwogICAgY29uc3QgcHJvbWlzZU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBjb25zdCBnZXRLZXkgPSAoeyBhZGRyZXNzLCBjaGFpbklkIH0pID0+IGAke2FkZHJlc3N9LiR7Y2hhaW5JZH1gOwogICAgcmV0dXJuIHsKICAgICAgYXN5bmMgY29uc3VtZSh7IGFkZHJlc3MsIGNoYWluSWQsIGNsaWVudCB9KSB7CiAgICAgICAgY29uc3Qga2V5ID0gZ2V0S2V5KHsgYWRkcmVzcywgY2hhaW5JZCB9KTsKICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5nZXQoeyBhZGRyZXNzLCBjaGFpbklkLCBjbGllbnQgfSk7CiAgICAgICAgdGhpcy5pbmNyZW1lbnQoeyBhZGRyZXNzLCBjaGFpbklkIH0pOwogICAgICAgIGNvbnN0IG5vbmNlID0gYXdhaXQgcHJvbWlzZTsKICAgICAgICBhd2FpdCBzb3VyY2Uuc2V0KHsgYWRkcmVzcywgY2hhaW5JZCB9LCBub25jZSk7CiAgICAgICAgbm9uY2VNYXAuc2V0KGtleSwgbm9uY2UpOwogICAgICAgIHJldHVybiBub25jZTsKICAgICAgfSwKICAgICAgYXN5bmMgaW5jcmVtZW50KHsgYWRkcmVzcywgY2hhaW5JZCB9KSB7CiAgICAgICAgY29uc3Qga2V5ID0gZ2V0S2V5KHsgYWRkcmVzcywgY2hhaW5JZCB9KTsKICAgICAgICBjb25zdCBkZWx0YSA9IGRlbHRhTWFwLmdldChrZXkpID8/IDA7CiAgICAgICAgZGVsdGFNYXAuc2V0KGtleSwgZGVsdGEgKyAxKTsKICAgICAgfSwKICAgICAgYXN5bmMgZ2V0KHsgYWRkcmVzcywgY2hhaW5JZCwgY2xpZW50IH0pIHsKICAgICAgICBjb25zdCBrZXkgPSBnZXRLZXkoeyBhZGRyZXNzLCBjaGFpbklkIH0pOwogICAgICAgIGxldCBwcm9taXNlID0gcHJvbWlzZU1hcC5nZXQoa2V5KTsKICAgICAgICBpZiAoIXByb21pc2UpIHsKICAgICAgICAgIHByb21pc2UgPSAoYXN5bmMgKCkgPT4gewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGNvbnN0IG5vbmNlID0gYXdhaXQgc291cmNlLmdldCh7IGFkZHJlc3MsIGNoYWluSWQsIGNsaWVudCB9KTsKICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c05vbmNlID0gbm9uY2VNYXAuZ2V0KGtleSkgPz8gMDsKICAgICAgICAgICAgICBpZiAocHJldmlvdXNOb25jZSA+IDAgJiYgbm9uY2UgPD0gcHJldmlvdXNOb25jZSkKICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c05vbmNlICsgMTsKICAgICAgICAgICAgICBub25jZU1hcC5kZWxldGUoa2V5KTsKICAgICAgICAgICAgICByZXR1cm4gbm9uY2U7CiAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgdGhpcy5yZXNldCh7IGFkZHJlc3MsIGNoYWluSWQgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pKCk7CiAgICAgICAgICBwcm9taXNlTWFwLnNldChrZXksIHByb21pc2UpOwogICAgICAgIH0KICAgICAgICBjb25zdCBkZWx0YSA9IGRlbHRhTWFwLmdldChrZXkpID8/IDA7CiAgICAgICAgcmV0dXJuIGRlbHRhICsgYXdhaXQgcHJvbWlzZTsKICAgICAgfSwKICAgICAgcmVzZXQoeyBhZGRyZXNzLCBjaGFpbklkIH0pIHsKICAgICAgICBjb25zdCBrZXkgPSBnZXRLZXkoeyBhZGRyZXNzLCBjaGFpbklkIH0pOwogICAgICAgIGRlbHRhTWFwLmRlbGV0ZShrZXkpOwogICAgICAgIHByb21pc2VNYXAuZGVsZXRlKGtleSk7CiAgICAgIH0KICAgIH07CiAgfQogIGZ1bmN0aW9uIGpzb25ScGMoKSB7CiAgICByZXR1cm4gewogICAgICBhc3luYyBnZXQocGFyYW1ldGVycykgewogICAgICAgIGNvbnN0IHsgYWRkcmVzcywgY2xpZW50IH0gPSBwYXJhbWV0ZXJzOwogICAgICAgIHJldHVybiBnZXRUcmFuc2FjdGlvbkNvdW50KGNsaWVudCwgewogICAgICAgICAgYWRkcmVzcywKICAgICAgICAgIGJsb2NrVGFnOiAicGVuZGluZyIKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgc2V0KCkgewogICAgICB9CiAgICB9OwogIH0KICB2YXIgbm9uY2VNYW5hZ2VyID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZU5vbmNlTWFuYWdlcih7CiAgICBzb3VyY2U6IGpzb25ScGMoKQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL2Zvcm1hdHRlcnMvcHJvb2YuanMKICBmdW5jdGlvbiBmb3JtYXRTdG9yYWdlUHJvb2Yoc3RvcmFnZVByb29mKSB7CiAgICByZXR1cm4gc3RvcmFnZVByb29mLm1hcCgocHJvb2YpID0+ICh7CiAgICAgIC4uLnByb29mLAogICAgICB2YWx1ZTogQmlnSW50KHByb29mLnZhbHVlKQogICAgfSkpOwogIH0KICBmdW5jdGlvbiBmb3JtYXRQcm9vZihwcm9vZikgewogICAgcmV0dXJuIHsKICAgICAgLi4ucHJvb2YsCiAgICAgIGJhbGFuY2U6IHByb29mLmJhbGFuY2UgPyBCaWdJbnQocHJvb2YuYmFsYW5jZSkgOiB2b2lkIDAsCiAgICAgIG5vbmNlOiBwcm9vZi5ub25jZSA/IGhleFRvTnVtYmVyKHByb29mLm5vbmNlKSA6IHZvaWQgMCwKICAgICAgc3RvcmFnZVByb29mOiBwcm9vZi5zdG9yYWdlUHJvb2YgPyBmb3JtYXRTdG9yYWdlUHJvb2YocHJvb2Yuc3RvcmFnZVByb29mKSA6IHZvaWQgMAogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0UHJvb2YuanMKICBhc3luYyBmdW5jdGlvbiBnZXRQcm9vZihjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tOdW1iZXIsIGJsb2NrVGFnOiBibG9ja1RhZ18sIHN0b3JhZ2VLZXlzIH0pIHsKICAgIGNvbnN0IGJsb2NrVGFnID0gYmxvY2tUYWdfID8/ICJsYXRlc3QiOwogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciAhPT0gdm9pZCAwID8gbnVtYmVyVG9IZXgoYmxvY2tOdW1iZXIpIDogdm9pZCAwOwogICAgY29uc3QgcHJvb2YgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRQcm9vZiIsCiAgICAgIHBhcmFtczogW2FkZHJlc3MsIHN0b3JhZ2VLZXlzLCBibG9ja051bWJlckhleCB8fCBibG9ja1RhZ10KICAgIH0pOwogICAgcmV0dXJuIGZvcm1hdFByb29mKHByb29mKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0U3RvcmFnZUF0LmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldFN0b3JhZ2VBdChjbGllbnQsIHsgYWRkcmVzcywgYmxvY2tOdW1iZXIsIGJsb2NrVGFnID0gImxhdGVzdCIsIHNsb3QgfSkgewogICAgY29uc3QgYmxvY2tOdW1iZXJIZXggPSBibG9ja051bWJlciAhPT0gdm9pZCAwID8gbnVtYmVyVG9IZXgoYmxvY2tOdW1iZXIpIDogdm9pZCAwOwogICAgY29uc3QgZGF0YSA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX2dldFN0b3JhZ2VBdCIsCiAgICAgIHBhcmFtczogW2FkZHJlc3MsIHNsb3QsIGJsb2NrTnVtYmVySGV4IHx8IGJsb2NrVGFnXQogICAgfSk7CiAgICByZXR1cm4gZGF0YTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvZ2V0VHJhbnNhY3Rpb24uanMKICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uKGNsaWVudCwgeyBibG9ja0hhc2gsIGJsb2NrTnVtYmVyLCBibG9ja1RhZzogYmxvY2tUYWdfLCBoYXNoOiBoYXNoMywgaW5kZXg6IGluZGV4MiB9KSB7CiAgICBjb25zdCBibG9ja1RhZyA9IGJsb2NrVGFnXyB8fCAibGF0ZXN0IjsKICAgIGNvbnN0IGJsb2NrTnVtYmVySGV4ID0gYmxvY2tOdW1iZXIgIT09IHZvaWQgMCA/IG51bWJlclRvSGV4KGJsb2NrTnVtYmVyKSA6IHZvaWQgMDsKICAgIGxldCB0cmFuc2FjdGlvbiA9IG51bGw7CiAgICBpZiAoaGFzaDMpIHsKICAgICAgdHJhbnNhY3Rpb24gPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXRoX2dldFRyYW5zYWN0aW9uQnlIYXNoIiwKICAgICAgICBwYXJhbXM6IFtoYXNoM10KICAgICAgfSwgeyBkZWR1cGU6IHRydWUgfSk7CiAgICB9IGVsc2UgaWYgKGJsb2NrSGFzaCkgewogICAgICB0cmFuc2FjdGlvbiA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0VHJhbnNhY3Rpb25CeUJsb2NrSGFzaEFuZEluZGV4IiwKICAgICAgICBwYXJhbXM6IFtibG9ja0hhc2gsIG51bWJlclRvSGV4KGluZGV4MildCiAgICAgIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgfSBlbHNlIGlmIChibG9ja051bWJlckhleCB8fCBibG9ja1RhZykgewogICAgICB0cmFuc2FjdGlvbiA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfZ2V0VHJhbnNhY3Rpb25CeUJsb2NrTnVtYmVyQW5kSW5kZXgiLAogICAgICAgIHBhcmFtczogW2Jsb2NrTnVtYmVySGV4IHx8IGJsb2NrVGFnLCBudW1iZXJUb0hleChpbmRleDIpXQogICAgICB9LCB7IGRlZHVwZTogQm9vbGVhbihibG9ja051bWJlckhleCkgfSk7CiAgICB9CiAgICBpZiAoIXRyYW5zYWN0aW9uKQogICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25Ob3RGb3VuZEVycm9yKHsKICAgICAgICBibG9ja0hhc2gsCiAgICAgICAgYmxvY2tOdW1iZXIsCiAgICAgICAgYmxvY2tUYWcsCiAgICAgICAgaGFzaDogaGFzaDMsCiAgICAgICAgaW5kZXg6IGluZGV4MgogICAgICB9KTsKICAgIGNvbnN0IGZvcm1hdCA9IGNsaWVudC5jaGFpbj8uZm9ybWF0dGVycz8udHJhbnNhY3Rpb24/LmZvcm1hdCB8fCBmb3JtYXRUcmFuc2FjdGlvbjsKICAgIHJldHVybiBmb3JtYXQodHJhbnNhY3Rpb24pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9nZXRUcmFuc2FjdGlvbkNvbmZpcm1hdGlvbnMuanMKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvbkNvbmZpcm1hdGlvbnMoY2xpZW50LCB7IGhhc2g6IGhhc2gzLCB0cmFuc2FjdGlvblJlY2VpcHQgfSkgewogICAgY29uc3QgW2Jsb2NrTnVtYmVyLCB0cmFuc2FjdGlvbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgIGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrTnVtYmVyLCAiZ2V0QmxvY2tOdW1iZXIiKSh7fSksCiAgICAgIGhhc2gzID8gZ2V0QWN0aW9uKGNsaWVudCwgZ2V0VHJhbnNhY3Rpb24sICJnZXRUcmFuc2FjdGlvbiIpKHsgaGFzaDogaGFzaDMgfSkgOiB2b2lkIDAKICAgIF0pOwogICAgY29uc3QgdHJhbnNhY3Rpb25CbG9ja051bWJlciA9IHRyYW5zYWN0aW9uUmVjZWlwdD8uYmxvY2tOdW1iZXIgfHwgdHJhbnNhY3Rpb24/LmJsb2NrTnVtYmVyOwogICAgaWYgKCF0cmFuc2FjdGlvbkJsb2NrTnVtYmVyKQogICAgICByZXR1cm4gMG47CiAgICByZXR1cm4gYmxvY2tOdW1iZXIgLSB0cmFuc2FjdGlvbkJsb2NrTnVtYmVyICsgMW47CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL2dldFRyYW5zYWN0aW9uUmVjZWlwdC5qcwogIGluaXRfdHJhbnNhY3Rpb24oKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvblJlY2VpcHQoY2xpZW50LCB7IGhhc2g6IGhhc2gzIH0pIHsKICAgIGNvbnN0IHJlY2VpcHQgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV0aF9nZXRUcmFuc2FjdGlvblJlY2VpcHQiLAogICAgICBwYXJhbXM6IFtoYXNoM10KICAgIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgaWYgKCFyZWNlaXB0KQogICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25SZWNlaXB0Tm90Rm91bmRFcnJvcih7IGhhc2g6IGhhc2gzIH0pOwogICAgY29uc3QgZm9ybWF0ID0gY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzPy50cmFuc2FjdGlvblJlY2VpcHQ/LmZvcm1hdCB8fCBmb3JtYXRUcmFuc2FjdGlvblJlY2VpcHQ7CiAgICByZXR1cm4gZm9ybWF0KHJlY2VpcHQpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy9tdWx0aWNhbGwuanMKICBpbml0X2FiaXMoKTsKICBpbml0X2FiaSgpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY29udHJhY3QoKTsKICBpbml0X2RlY29kZUZ1bmN0aW9uUmVzdWx0KCk7CiAgaW5pdF9lbmNvZGVGdW5jdGlvbkRhdGEoKTsKICBpbml0X2dldENoYWluQ29udHJhY3RBZGRyZXNzKCk7CiAgYXN5bmMgZnVuY3Rpb24gbXVsdGljYWxsKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhbGxvd0ZhaWx1cmUgPSB0cnVlLCBiYXRjaFNpemU6IGJhdGNoU2l6ZV8sIGJsb2NrTnVtYmVyLCBibG9ja1RhZywgbXVsdGljYWxsQWRkcmVzczogbXVsdGljYWxsQWRkcmVzc18sIHN0YXRlT3ZlcnJpZGUgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjb250cmFjdHMyID0gcGFyYW1ldGVycy5jb250cmFjdHM7CiAgICBjb25zdCBiYXRjaFNpemUgPSBiYXRjaFNpemVfID8/ICh0eXBlb2YgY2xpZW50LmJhdGNoPy5tdWx0aWNhbGwgPT09ICJvYmplY3QiICYmIGNsaWVudC5iYXRjaC5tdWx0aWNhbGwuYmF0Y2hTaXplIHx8IDEwMjQpOwogICAgbGV0IG11bHRpY2FsbEFkZHJlc3MgPSBtdWx0aWNhbGxBZGRyZXNzXzsKICAgIGlmICghbXVsdGljYWxsQWRkcmVzcykgewogICAgICBpZiAoIWNsaWVudC5jaGFpbikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNsaWVudCBjaGFpbiBub3QgY29uZmlndXJlZC4gbXVsdGljYWxsQWRkcmVzcyBpcyByZXF1aXJlZC4iKTsKICAgICAgbXVsdGljYWxsQWRkcmVzcyA9IGdldENoYWluQ29udHJhY3RBZGRyZXNzKHsKICAgICAgICBibG9ja051bWJlciwKICAgICAgICBjaGFpbjogY2xpZW50LmNoYWluLAogICAgICAgIGNvbnRyYWN0OiAibXVsdGljYWxsMyIKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBjaHVua2VkQ2FsbHMgPSBbW11dOwogICAgbGV0IGN1cnJlbnRDaHVuayA9IDA7CiAgICBsZXQgY3VycmVudENodW5rU2l6ZSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyYWN0czIubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgeyBhYmk6IGFiaTIsIGFkZHJlc3MsIGFyZ3MsIGZ1bmN0aW9uTmFtZSB9ID0gY29udHJhY3RzMltpXTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBjYWxsRGF0YSA9IGVuY29kZUZ1bmN0aW9uRGF0YSh7IGFiaTogYWJpMiwgYXJncywgZnVuY3Rpb25OYW1lIH0pOwogICAgICAgIGN1cnJlbnRDaHVua1NpemUgKz0gKGNhbGxEYXRhLmxlbmd0aCAtIDIpIC8gMjsKICAgICAgICBpZiAoCiAgICAgICAgICAvLyBDaGVjayBpZiBiYXRjaGluZyBpcyBlbmFibGVkLgogICAgICAgICAgYmF0Y2hTaXplID4gMCAmJiAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBzaXplIG9mIHRoZSBiYXRjaCBleGNlZWRzIHRoZSBzaXplIGxpbWl0LgogICAgICAgICAgY3VycmVudENodW5rU2l6ZSA+IGJhdGNoU2l6ZSAmJiAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBjaHVuayBpcyBub3QgYWxyZWFkeSBlbXB0eS4KICAgICAgICAgIGNodW5rZWRDYWxsc1tjdXJyZW50Q2h1bmtdLmxlbmd0aCA+IDAKICAgICAgICApIHsKICAgICAgICAgIGN1cnJlbnRDaHVuaysrOwogICAgICAgICAgY3VycmVudENodW5rU2l6ZSA9IChjYWxsRGF0YS5sZW5ndGggLSAyKSAvIDI7CiAgICAgICAgICBjaHVua2VkQ2FsbHNbY3VycmVudENodW5rXSA9IFtdOwogICAgICAgIH0KICAgICAgICBjaHVua2VkQ2FsbHNbY3VycmVudENodW5rXSA9IFsKICAgICAgICAgIC4uLmNodW5rZWRDYWxsc1tjdXJyZW50Q2h1bmtdLAogICAgICAgICAgewogICAgICAgICAgICBhbGxvd0ZhaWx1cmU6IHRydWUsCiAgICAgICAgICAgIGNhbGxEYXRhLAogICAgICAgICAgICB0YXJnZXQ6IGFkZHJlc3MKICAgICAgICAgIH0KICAgICAgICBdOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zdCBlcnJvciA9IGdldENvbnRyYWN0RXJyb3IoZXJyLCB7CiAgICAgICAgICBhYmk6IGFiaTIsCiAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgYXJncywKICAgICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvY29udHJhY3QvbXVsdGljYWxsIiwKICAgICAgICAgIGZ1bmN0aW9uTmFtZQogICAgICAgIH0pOwogICAgICAgIGlmICghYWxsb3dGYWlsdXJlKQogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgY2h1bmtlZENhbGxzW2N1cnJlbnRDaHVua10gPSBbCiAgICAgICAgICAuLi5jaHVua2VkQ2FsbHNbY3VycmVudENodW5rXSwKICAgICAgICAgIHsKICAgICAgICAgICAgYWxsb3dGYWlsdXJlOiB0cnVlLAogICAgICAgICAgICBjYWxsRGF0YTogIjB4IiwKICAgICAgICAgICAgdGFyZ2V0OiBhZGRyZXNzCiAgICAgICAgICB9CiAgICAgICAgXTsKICAgICAgfQogICAgfQogICAgY29uc3QgYWdncmVnYXRlM1Jlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoY2h1bmtlZENhbGxzLm1hcCgoY2FsbHMpID0+IGdldEFjdGlvbihjbGllbnQsIHJlYWRDb250cmFjdCwgInJlYWRDb250cmFjdCIpKHsKICAgICAgYWJpOiBtdWx0aWNhbGwzQWJpLAogICAgICBhZGRyZXNzOiBtdWx0aWNhbGxBZGRyZXNzLAogICAgICBhcmdzOiBbY2FsbHNdLAogICAgICBibG9ja051bWJlciwKICAgICAgYmxvY2tUYWcsCiAgICAgIGZ1bmN0aW9uTmFtZTogImFnZ3JlZ2F0ZTMiLAogICAgICBzdGF0ZU92ZXJyaWRlCiAgICB9KSkpOwogICAgY29uc3QgcmVzdWx0cyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZ2dyZWdhdGUzUmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCByZXN1bHQgPSBhZ2dyZWdhdGUzUmVzdWx0c1tpXTsKICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICJyZWplY3RlZCIpIHsKICAgICAgICBpZiAoIWFsbG93RmFpbHVyZSkKICAgICAgICAgIHRocm93IHJlc3VsdC5yZWFzb247CiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaHVua2VkQ2FsbHNbaV0ubGVuZ3RoOyBqKyspIHsKICAgICAgICAgIHJlc3VsdHMucHVzaCh7CiAgICAgICAgICAgIHN0YXR1czogImZhaWx1cmUiLAogICAgICAgICAgICBlcnJvcjogcmVzdWx0LnJlYXNvbiwKICAgICAgICAgICAgcmVzdWx0OiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBhZ2dyZWdhdGUzUmVzdWx0ID0gcmVzdWx0LnZhbHVlOwogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFnZ3JlZ2F0ZTNSZXN1bHQubGVuZ3RoOyBqKyspIHsKICAgICAgICBjb25zdCB7IHJldHVybkRhdGEsIHN1Y2Nlc3MgfSA9IGFnZ3JlZ2F0ZTNSZXN1bHRbal07CiAgICAgICAgY29uc3QgeyBjYWxsRGF0YSB9ID0gY2h1bmtlZENhbGxzW2ldW2pdOwogICAgICAgIGNvbnN0IHsgYWJpOiBhYmkyLCBhZGRyZXNzLCBmdW5jdGlvbk5hbWUsIGFyZ3MgfSA9IGNvbnRyYWN0czJbcmVzdWx0cy5sZW5ndGhdOwogICAgICAgIHRyeSB7CiAgICAgICAgICBpZiAoY2FsbERhdGEgPT09ICIweCIpCiAgICAgICAgICAgIHRocm93IG5ldyBBYmlEZWNvZGluZ1plcm9EYXRhRXJyb3IoKTsKICAgICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgdGhyb3cgbmV3IFJhd0NvbnRyYWN0RXJyb3IoeyBkYXRhOiByZXR1cm5EYXRhIH0pOwogICAgICAgICAgY29uc3QgcmVzdWx0MiA9IGRlY29kZUZ1bmN0aW9uUmVzdWx0KHsKICAgICAgICAgICAgYWJpOiBhYmkyLAogICAgICAgICAgICBhcmdzLAogICAgICAgICAgICBkYXRhOiByZXR1cm5EYXRhLAogICAgICAgICAgICBmdW5jdGlvbk5hbWUKICAgICAgICAgIH0pOwogICAgICAgICAgcmVzdWx0cy5wdXNoKGFsbG93RmFpbHVyZSA/IHsgcmVzdWx0OiByZXN1bHQyLCBzdGF0dXM6ICJzdWNjZXNzIiB9IDogcmVzdWx0Mik7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBjb25zdCBlcnJvciA9IGdldENvbnRyYWN0RXJyb3IoZXJyLCB7CiAgICAgICAgICAgIGFiaTogYWJpMiwKICAgICAgICAgICAgYWRkcmVzcywKICAgICAgICAgICAgYXJncywKICAgICAgICAgICAgZG9jc1BhdGg6ICIvZG9jcy9jb250cmFjdC9tdWx0aWNhbGwiLAogICAgICAgICAgICBmdW5jdGlvbk5hbWUKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFhbGxvd0ZhaWx1cmUpCiAgICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgICAgcmVzdWx0cy5wdXNoKHsgZXJyb3IsIHJlc3VsdDogdm9pZCAwLCBzdGF0dXM6ICJmYWlsdXJlIiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChyZXN1bHRzLmxlbmd0aCAhPT0gY29udHJhY3RzMi5sZW5ndGgpCiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJtdWx0aWNhbGwgcmVzdWx0cyBtaXNtYXRjaCIpOwogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3ZlcmlmeUhhc2guanMKICBpbml0X2FiaXMoKTsKICBpbml0X2NvbnRyYWN0cygpOwogIGluaXRfY29udHJhY3QoKTsKICBpbml0X2VuY29kZURlcGxveURhdGEoKTsKICBpbml0X2dldEFkZHJlc3MoKTsKICBpbml0X2lzQWRkcmVzc0VxdWFsKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvZGF0YS9pc0J5dGVzRXF1YWwuanMKICBpbml0X3V0aWxzNCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfaXNIZXgoKTsKICBmdW5jdGlvbiBpc0J5dGVzRXF1YWwoYV8sIGJfKSB7CiAgICBjb25zdCBhID0gaXNIZXgoYV8pID8gdG9CeXRlcyhhXykgOiBhXzsKICAgIGNvbnN0IGIgPSBpc0hleChiXykgPyB0b0J5dGVzKGJfKSA6IGJfOwogICAgcmV0dXJuIGVxdWFsQnl0ZXMoYSwgYik7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3ZlcmlmeUhhc2guanMKICBpbml0X2lzSGV4KCk7CiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3V0aWxzL3NpZ25hdHVyZS9zZXJpYWxpemVTaWduYXR1cmUuanMKICBpbml0X3NlY3AyNTZrMSgpOwogIGluaXRfZnJvbUhleCgpOwogIGluaXRfdG9CeXRlcygpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZVNpZ25hdHVyZSh7IHIsIHMsIHRvID0gImhleCIsIHYsIHlQYXJpdHkgfSkgewogICAgY29uc3QgeVBhcml0eV8gPSAoKCkgPT4gewogICAgICBpZiAoeVBhcml0eSA9PT0gMCB8fCB5UGFyaXR5ID09PSAxKQogICAgICAgIHJldHVybiB5UGFyaXR5OwogICAgICBpZiAodiAmJiAodiA9PT0gMjduIHx8IHYgPT09IDI4biB8fCB2ID49IDM1bikpCiAgICAgICAgcmV0dXJuIHYgJSAybiA9PT0gMG4gPyAxIDogMDsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGB2YCBvciBgeVBhcml0eWAgdmFsdWUiKTsKICAgIH0pKCk7CiAgICBjb25zdCBzaWduYXR1cmUgPSBgMHgke25ldyBzZWNwMjU2azEuU2lnbmF0dXJlKGhleFRvQmlnSW50KHIpLCBoZXhUb0JpZ0ludChzKSkudG9Db21wYWN0SGV4KCl9JHt5UGFyaXR5XyA9PT0gMCA/ICIxYiIgOiAiMWMifWA7CiAgICBpZiAodG8gPT09ICJoZXgiKQogICAgICByZXR1cm4gc2lnbmF0dXJlOwogICAgcmV0dXJuIGhleFRvQnl0ZXMoc2lnbmF0dXJlKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvdmVyaWZ5SGFzaC5qcwogIGluaXRfY2FsbCgpOwogIGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUhhc2gyKGNsaWVudCwgcGFyYW1ldGVycykgewogICAgY29uc3QgeyBhZGRyZXNzLCBmYWN0b3J5LCBmYWN0b3J5RGF0YSwgaGFzaDogaGFzaDMsIHNpZ25hdHVyZSwgLi4ucmVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hdHVyZUhleCA9ICgoKSA9PiB7CiAgICAgIGlmIChpc0hleChzaWduYXR1cmUpKQogICAgICAgIHJldHVybiBzaWduYXR1cmU7CiAgICAgIGlmICh0eXBlb2Ygc2lnbmF0dXJlID09PSAib2JqZWN0IiAmJiAiciIgaW4gc2lnbmF0dXJlICYmICJzIiBpbiBzaWduYXR1cmUpCiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVNpZ25hdHVyZShzaWduYXR1cmUpOwogICAgICByZXR1cm4gYnl0ZXNUb0hleChzaWduYXR1cmUpOwogICAgfSkoKTsKICAgIGNvbnN0IHdyYXBwZWRTaWduYXR1cmUgPSBhd2FpdCAoYXN5bmMgKCkgPT4gewogICAgICBpZiAoIWZhY3RvcnkgJiYgIWZhY3RvcnlEYXRhKQogICAgICAgIHJldHVybiBzaWduYXR1cmVIZXg7CiAgICAgIGlmIChpc0VyYzY0OTJTaWduYXR1cmUoc2lnbmF0dXJlSGV4KSkKICAgICAgICByZXR1cm4gc2lnbmF0dXJlSGV4OwogICAgICByZXR1cm4gc2VyaWFsaXplRXJjNjQ5MlNpZ25hdHVyZSh7CiAgICAgICAgYWRkcmVzczogZmFjdG9yeSwKICAgICAgICBkYXRhOiBmYWN0b3J5RGF0YSwKICAgICAgICBzaWduYXR1cmU6IHNpZ25hdHVyZUhleAogICAgICB9KTsKICAgIH0pKCk7CiAgICB0cnkgewogICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGNhbGwsICJjYWxsIikoewogICAgICAgIGRhdGE6IGVuY29kZURlcGxveURhdGEoewogICAgICAgICAgYWJpOiB1bml2ZXJzYWxTaWduYXR1cmVWYWxpZGF0b3JBYmksCiAgICAgICAgICBhcmdzOiBbYWRkcmVzcywgaGFzaDMsIHdyYXBwZWRTaWduYXR1cmVdLAogICAgICAgICAgYnl0ZWNvZGU6IHVuaXZlcnNhbFNpZ25hdHVyZVZhbGlkYXRvckJ5dGVDb2RlCiAgICAgICAgfSksCiAgICAgICAgLi4ucmVzdAogICAgICB9KTsKICAgICAgcmV0dXJuIGlzQnl0ZXNFcXVhbChkYXRhID8/ICIweDAiLCAiMHgxIik7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICB0cnkgewogICAgICAgIGNvbnN0IHZlcmlmaWVkID0gaXNBZGRyZXNzRXF1YWwoZ2V0QWRkcmVzcyhhZGRyZXNzKSwgYXdhaXQgcmVjb3ZlckFkZHJlc3MoeyBoYXNoOiBoYXNoMywgc2lnbmF0dXJlIH0pKTsKICAgICAgICBpZiAodmVyaWZpZWQpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSBjYXRjaCB7CiAgICAgIH0KICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ2FsbEV4ZWN1dGlvbkVycm9yKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHRocm93IGVycm9yOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy92ZXJpZnlNZXNzYWdlLmpzCiAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5TWVzc2FnZTIoY2xpZW50LCB7IGFkZHJlc3MsIG1lc3NhZ2UsIGZhY3RvcnksIGZhY3RvcnlEYXRhLCBzaWduYXR1cmUsIC4uLmNhbGxSZXF1ZXN0IH0pIHsKICAgIGNvbnN0IGhhc2gzID0gaGFzaE1lc3NhZ2UobWVzc2FnZSk7CiAgICByZXR1cm4gdmVyaWZ5SGFzaDIoY2xpZW50LCB7CiAgICAgIGFkZHJlc3MsCiAgICAgIGZhY3RvcnksCiAgICAgIGZhY3RvcnlEYXRhLAogICAgICBoYXNoOiBoYXNoMywKICAgICAgc2lnbmF0dXJlLAogICAgICAuLi5jYWxsUmVxdWVzdAogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3ZlcmlmeVR5cGVkRGF0YS5qcwogIGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVR5cGVkRGF0YTIoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGZhY3RvcnksIGZhY3RvcnlEYXRhLCBzaWduYXR1cmUsIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcywgZG9tYWluLCAuLi5jYWxsUmVxdWVzdCB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IGhhc2gzID0gaGFzaFR5cGVkRGF0YSh7IG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcywgZG9tYWluIH0pOwogICAgcmV0dXJuIHZlcmlmeUhhc2gyKGNsaWVudCwgewogICAgICBhZGRyZXNzLAogICAgICBmYWN0b3J5LAogICAgICBmYWN0b3J5RGF0YSwKICAgICAgaGFzaDogaGFzaDMsCiAgICAgIHNpZ25hdHVyZSwKICAgICAgLi4uY2FsbFJlcXVlc3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy93YWl0Rm9yVHJhbnNhY3Rpb25SZWNlaXB0LmpzCiAgaW5pdF90cmFuc2FjdGlvbigpOwogIGluaXRfc3RyaW5naWZ5KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9wdWJsaWMvd2F0Y2hCbG9ja051bWJlci5qcwogIGluaXRfZnJvbUhleCgpOwogIGluaXRfc3RyaW5naWZ5KCk7CiAgZnVuY3Rpb24gd2F0Y2hCbG9ja051bWJlcihjbGllbnQsIHsgZW1pdE9uQmVnaW4gPSBmYWxzZSwgZW1pdE1pc3NlZCA9IGZhbHNlLCBvbkJsb2NrTnVtYmVyLCBvbkVycm9yLCBwb2xsOiBwb2xsXywgcG9sbGluZ0ludGVydmFsID0gY2xpZW50LnBvbGxpbmdJbnRlcnZhbCB9KSB7CiAgICBjb25zdCBlbmFibGVQb2xsaW5nID0gKCgpID0+IHsKICAgICAgaWYgKHR5cGVvZiBwb2xsXyAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgcmV0dXJuIHBvbGxfOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAid2ViU29ja2V0IikKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIgJiYgY2xpZW50LnRyYW5zcG9ydC50cmFuc3BvcnRzWzBdLmNvbmZpZy50eXBlID09PSAid2ViU29ja2V0IikKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSkoKTsKICAgIGxldCBwcmV2QmxvY2tOdW1iZXI7CiAgICBjb25zdCBwb2xsQmxvY2tOdW1iZXIgPSAoKSA9PiB7CiAgICAgIGNvbnN0IG9ic2VydmVySWQgPSBzdHJpbmdpZnkoWwogICAgICAgICJ3YXRjaEJsb2NrTnVtYmVyIiwKICAgICAgICBjbGllbnQudWlkLAogICAgICAgIGVtaXRPbkJlZ2luLAogICAgICAgIGVtaXRNaXNzZWQsCiAgICAgICAgcG9sbGluZ0ludGVydmFsCiAgICAgIF0pOwogICAgICByZXR1cm4gb2JzZXJ2ZShvYnNlcnZlcklkLCB7IG9uQmxvY2tOdW1iZXIsIG9uRXJyb3IgfSwgKGVtaXQpID0+IHBvbGwoYXN5bmMgKCkgPT4gewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBibG9ja051bWJlciA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldEJsb2NrTnVtYmVyLCAiZ2V0QmxvY2tOdW1iZXIiKSh7IGNhY2hlVGltZTogMCB9KTsKICAgICAgICAgIGlmIChwcmV2QmxvY2tOdW1iZXIpIHsKICAgICAgICAgICAgaWYgKGJsb2NrTnVtYmVyID09PSBwcmV2QmxvY2tOdW1iZXIpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoYmxvY2tOdW1iZXIgLSBwcmV2QmxvY2tOdW1iZXIgPiAxICYmIGVtaXRNaXNzZWQpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBpID0gcHJldkJsb2NrTnVtYmVyICsgMW47IGkgPCBibG9ja051bWJlcjsgaSsrKSB7CiAgICAgICAgICAgICAgICBlbWl0Lm9uQmxvY2tOdW1iZXIoaSwgcHJldkJsb2NrTnVtYmVyKTsKICAgICAgICAgICAgICAgIHByZXZCbG9ja051bWJlciA9IGk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXByZXZCbG9ja051bWJlciB8fCBibG9ja051bWJlciA+IHByZXZCbG9ja051bWJlcikgewogICAgICAgICAgICBlbWl0Lm9uQmxvY2tOdW1iZXIoYmxvY2tOdW1iZXIsIHByZXZCbG9ja051bWJlcik7CiAgICAgICAgICAgIHByZXZCbG9ja051bWJlciA9IGJsb2NrTnVtYmVyOwogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgZW1pdC5vbkVycm9yPy4oZXJyKTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBlbWl0T25CZWdpbiwKICAgICAgICBpbnRlcnZhbDogcG9sbGluZ0ludGVydmFsCiAgICAgIH0pKTsKICAgIH07CiAgICBjb25zdCBzdWJzY3JpYmVCbG9ja051bWJlciA9ICgpID0+IHsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoQmxvY2tOdW1iZXIiLAogICAgICAgIGNsaWVudC51aWQsCiAgICAgICAgZW1pdE9uQmVnaW4sCiAgICAgICAgZW1pdE1pc3NlZAogICAgICBdKTsKICAgICAgcmV0dXJuIG9ic2VydmUob2JzZXJ2ZXJJZCwgeyBvbkJsb2NrTnVtYmVyLCBvbkVycm9yIH0sIChlbWl0KSA9PiB7CiAgICAgICAgbGV0IGFjdGl2ZSA9IHRydWU7CiAgICAgICAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydCA9ICgoKSA9PiB7CiAgICAgICAgICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gImZhbGxiYWNrIikgewogICAgICAgICAgICAgICAgY29uc3QgdHJhbnNwb3J0MiA9IGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0cy5maW5kKCh0cmFuc3BvcnQzKSA9PiB0cmFuc3BvcnQzLmNvbmZpZy50eXBlID09PSAid2ViU29ja2V0Iik7CiAgICAgICAgICAgICAgICBpZiAoIXRyYW5zcG9ydDIpCiAgICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zcG9ydDIudmFsdWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgICB9KSgpOwogICAgICAgICAgICBjb25zdCB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZV8gfSA9IGF3YWl0IHRyYW5zcG9ydC5zdWJzY3JpYmUoewogICAgICAgICAgICAgIHBhcmFtczogWyJuZXdIZWFkcyJdLAogICAgICAgICAgICAgIG9uRGF0YShkYXRhKSB7CiAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgY29uc3QgYmxvY2tOdW1iZXIgPSBoZXhUb0JpZ0ludChkYXRhLnJlc3VsdD8ubnVtYmVyKTsKICAgICAgICAgICAgICAgIGVtaXQub25CbG9ja051bWJlcihibG9ja051bWJlciwgcHJldkJsb2NrTnVtYmVyKTsKICAgICAgICAgICAgICAgIHByZXZCbG9ja051bWJlciA9IGJsb2NrTnVtYmVyOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgb25FcnJvcihlcnJvcikgewogICAgICAgICAgICAgICAgZW1pdC5vbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgICB1bnN1YnNjcmliZSgpOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIG9uRXJyb3I/LihlcnIpOwogICAgICAgICAgfQogICAgICAgIH0pKCk7CiAgICAgICAgcmV0dXJuICgpID0+IHVuc3Vic2NyaWJlKCk7CiAgICAgIH0pOwogICAgfTsKICAgIHJldHVybiBlbmFibGVQb2xsaW5nID8gcG9sbEJsb2NrTnVtYmVyKCkgOiBzdWJzY3JpYmVCbG9ja051bWJlcigpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy93YWl0Rm9yVHJhbnNhY3Rpb25SZWNlaXB0LmpzCiAgYXN5bmMgZnVuY3Rpb24gd2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdChjbGllbnQsIHsKICAgIGNvbmZpcm1hdGlvbnMgPSAxLAogICAgaGFzaDogaGFzaDMsCiAgICBvblJlcGxhY2VkLAogICAgcG9sbGluZ0ludGVydmFsID0gY2xpZW50LnBvbGxpbmdJbnRlcnZhbCwKICAgIHJldHJ5Q291bnQgPSA2LAogICAgcmV0cnlEZWxheSA9ICh7IGNvdW50IH0pID0+IH5+KDEgPDwgY291bnQpICogMjAwLAogICAgLy8gZXhwb25lbnRpYWwgYmFja29mZgogICAgdGltZW91dAogIH0pIHsKICAgIGNvbnN0IG9ic2VydmVySWQgPSBzdHJpbmdpZnkoWyJ3YWl0Rm9yVHJhbnNhY3Rpb25SZWNlaXB0IiwgY2xpZW50LnVpZCwgaGFzaDNdKTsKICAgIGxldCBjb3VudCA9IDA7CiAgICBsZXQgdHJhbnNhY3Rpb247CiAgICBsZXQgcmVwbGFjZWRUcmFuc2FjdGlvbjsKICAgIGxldCByZWNlaXB0OwogICAgbGV0IHJldHJ5aW5nID0gZmFsc2U7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICBpZiAodGltZW91dCkKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgV2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdFRpbWVvdXRFcnJvcih7IGhhc2g6IGhhc2gzIH0pKSwgdGltZW91dCk7CiAgICAgIGNvbnN0IF91bm9ic2VydmUgPSBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25SZXBsYWNlZCwgcmVzb2x2ZSwgcmVqZWN0IH0sIChlbWl0KSA9PiB7CiAgICAgICAgY29uc3QgX3Vud2F0Y2ggPSBnZXRBY3Rpb24oY2xpZW50LCB3YXRjaEJsb2NrTnVtYmVyLCAid2F0Y2hCbG9ja051bWJlciIpKHsKICAgICAgICAgIGVtaXRNaXNzZWQ6IHRydWUsCiAgICAgICAgICBlbWl0T25CZWdpbjogdHJ1ZSwKICAgICAgICAgIHBvbGw6IHRydWUsCiAgICAgICAgICBwb2xsaW5nSW50ZXJ2YWwsCiAgICAgICAgICBhc3luYyBvbkJsb2NrTnVtYmVyKGJsb2NrTnVtYmVyXykgewogICAgICAgICAgICBjb25zdCBkb25lID0gKGZuKSA9PiB7CiAgICAgICAgICAgICAgX3Vud2F0Y2goKTsKICAgICAgICAgICAgICBmbigpOwogICAgICAgICAgICAgIF91bm9ic2VydmUoKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgbGV0IGJsb2NrTnVtYmVyID0gYmxvY2tOdW1iZXJfOwogICAgICAgICAgICBpZiAocmV0cnlpbmcpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoY291bnQgPiByZXRyeUNvdW50KQogICAgICAgICAgICAgIGRvbmUoKCkgPT4gZW1pdC5yZWplY3QobmV3IFdhaXRGb3JUcmFuc2FjdGlvblJlY2VpcHRUaW1lb3V0RXJyb3IoeyBoYXNoOiBoYXNoMyB9KSkpOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGlmIChyZWNlaXB0KSB7CiAgICAgICAgICAgICAgICBpZiAoY29uZmlybWF0aW9ucyA+IDEgJiYgKCFyZWNlaXB0LmJsb2NrTnVtYmVyIHx8IGJsb2NrTnVtYmVyIC0gcmVjZWlwdC5ibG9ja051bWJlciArIDFuIDwgY29uZmlybWF0aW9ucykpCiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGRvbmUoKCkgPT4gZW1pdC5yZXNvbHZlKHJlY2VpcHQpKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbikgewogICAgICAgICAgICAgICAgcmV0cnlpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgYXdhaXQgd2l0aFJldHJ5KGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24gPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRUcmFuc2FjdGlvbiwgImdldFRyYW5zYWN0aW9uIikoeyBoYXNoOiBoYXNoMyB9KTsKICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zYWN0aW9uLmJsb2NrTnVtYmVyKQogICAgICAgICAgICAgICAgICAgIGJsb2NrTnVtYmVyID0gdHJhbnNhY3Rpb24uYmxvY2tOdW1iZXI7CiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgIGRlbGF5OiByZXRyeURlbGF5LAogICAgICAgICAgICAgICAgICByZXRyeUNvdW50CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHJ5aW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJlY2VpcHQgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRUcmFuc2FjdGlvblJlY2VpcHQsICJnZXRUcmFuc2FjdGlvblJlY2VpcHQiKSh7IGhhc2g6IGhhc2gzIH0pOwogICAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25zID4gMSAmJiAoIXJlY2VpcHQuYmxvY2tOdW1iZXIgfHwgYmxvY2tOdW1iZXIgLSByZWNlaXB0LmJsb2NrTnVtYmVyICsgMW4gPCBjb25maXJtYXRpb25zKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICBkb25lKCgpID0+IGVtaXQucmVzb2x2ZShyZWNlaXB0KSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUcmFuc2FjdGlvbk5vdEZvdW5kRXJyb3IgfHwgZXJyIGluc3RhbmNlb2YgVHJhbnNhY3Rpb25SZWNlaXB0Tm90Rm91bmRFcnJvcikgewogICAgICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbikgewogICAgICAgICAgICAgICAgICByZXRyeWluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICByZXBsYWNlZFRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247CiAgICAgICAgICAgICAgICAgIHJldHJ5aW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBhd2FpdCB3aXRoUmV0cnkoKCkgPT4gZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2ssICJnZXRCbG9jayIpKHsKICAgICAgICAgICAgICAgICAgICBibG9ja051bWJlciwKICAgICAgICAgICAgICAgICAgICBpbmNsdWRlVHJhbnNhY3Rpb25zOiB0cnVlCiAgICAgICAgICAgICAgICAgIH0pLCB7CiAgICAgICAgICAgICAgICAgICAgZGVsYXk6IHJldHJ5RGVsYXksCiAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudCwKICAgICAgICAgICAgICAgICAgICBzaG91bGRSZXRyeTogKHsgZXJyb3IgfSkgPT4gZXJyb3IgaW5zdGFuY2VvZiBCbG9ja05vdEZvdW5kRXJyb3IKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIHJldHJ5aW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50VHJhbnNhY3Rpb24gPSBibG9jay50cmFuc2FjdGlvbnMuZmluZCgoeyBmcm9tLCBub25jZSB9KSA9PiBmcm9tID09PSByZXBsYWNlZFRyYW5zYWN0aW9uLmZyb20gJiYgbm9uY2UgPT09IHJlcGxhY2VkVHJhbnNhY3Rpb24ubm9uY2UpOwogICAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2VtZW50VHJhbnNhY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICByZWNlaXB0ID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0VHJhbnNhY3Rpb25SZWNlaXB0LCAiZ2V0VHJhbnNhY3Rpb25SZWNlaXB0IikoewogICAgICAgICAgICAgICAgICAgIGhhc2g6IHJlcGxhY2VtZW50VHJhbnNhY3Rpb24uaGFzaAogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbnMgPiAxICYmICghcmVjZWlwdC5ibG9ja051bWJlciB8fCBibG9ja051bWJlciAtIHJlY2VpcHQuYmxvY2tOdW1iZXIgKyAxbiA8IGNvbmZpcm1hdGlvbnMpKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgbGV0IHJlYXNvbiA9ICJyZXBsYWNlZCI7CiAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudFRyYW5zYWN0aW9uLnRvID09PSByZXBsYWNlZFRyYW5zYWN0aW9uLnRvICYmIHJlcGxhY2VtZW50VHJhbnNhY3Rpb24udmFsdWUgPT09IHJlcGxhY2VkVHJhbnNhY3Rpb24udmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICByZWFzb24gPSAicmVwcmljZWQiOwogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcGxhY2VtZW50VHJhbnNhY3Rpb24uZnJvbSA9PT0gcmVwbGFjZW1lbnRUcmFuc2FjdGlvbi50byAmJiByZXBsYWNlbWVudFRyYW5zYWN0aW9uLnZhbHVlID09PSAwbikgewogICAgICAgICAgICAgICAgICAgIHJlYXNvbiA9ICJjYW5jZWxsZWQiOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGRvbmUoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGVtaXQub25SZXBsYWNlZD8uKHsKICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbiwKICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VkVHJhbnNhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbjogcmVwbGFjZW1lbnRUcmFuc2FjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUmVjZWlwdDogcmVjZWlwdAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGVtaXQucmVzb2x2ZShyZWNlaXB0KTsKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJfKSB7CiAgICAgICAgICAgICAgICAgIGRvbmUoKCkgPT4gZW1pdC5yZWplY3QoZXJyXykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkb25lKCgpID0+IGVtaXQucmVqZWN0KGVycikpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3dhdGNoQmxvY2tzLmpzCiAgaW5pdF9zdHJpbmdpZnkoKTsKICBmdW5jdGlvbiB3YXRjaEJsb2NrcyhjbGllbnQsIHsgYmxvY2tUYWcgPSAibGF0ZXN0IiwgZW1pdE1pc3NlZCA9IGZhbHNlLCBlbWl0T25CZWdpbiA9IGZhbHNlLCBvbkJsb2NrLCBvbkVycm9yLCBpbmNsdWRlVHJhbnNhY3Rpb25zOiBpbmNsdWRlVHJhbnNhY3Rpb25zXywgcG9sbDogcG9sbF8sIHBvbGxpbmdJbnRlcnZhbCA9IGNsaWVudC5wb2xsaW5nSW50ZXJ2YWwgfSkgewogICAgY29uc3QgZW5hYmxlUG9sbGluZyA9ICgoKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgcG9sbF8gIT09ICJ1bmRlZmluZWQiKQogICAgICAgIHJldHVybiBwb2xsXzsKICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAiZmFsbGJhY2siICYmIGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0c1swXS5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pKCk7CiAgICBjb25zdCBpbmNsdWRlVHJhbnNhY3Rpb25zID0gaW5jbHVkZVRyYW5zYWN0aW9uc18gPz8gZmFsc2U7CiAgICBsZXQgcHJldkJsb2NrOwogICAgY29uc3QgcG9sbEJsb2NrcyA9ICgpID0+IHsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoQmxvY2tzIiwKICAgICAgICBjbGllbnQudWlkLAogICAgICAgIGJsb2NrVGFnLAogICAgICAgIGVtaXRNaXNzZWQsCiAgICAgICAgZW1pdE9uQmVnaW4sCiAgICAgICAgaW5jbHVkZVRyYW5zYWN0aW9ucywKICAgICAgICBwb2xsaW5nSW50ZXJ2YWwKICAgICAgXSk7CiAgICAgIHJldHVybiBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25CbG9jaywgb25FcnJvciB9LCAoZW1pdCkgPT4gcG9sbChhc3luYyAoKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGJsb2NrID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2ssICJnZXRCbG9jayIpKHsKICAgICAgICAgICAgYmxvY2tUYWcsCiAgICAgICAgICAgIGluY2x1ZGVUcmFuc2FjdGlvbnMKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGJsb2NrLm51bWJlciAmJiBwcmV2QmxvY2s/Lm51bWJlcikgewogICAgICAgICAgICBpZiAoYmxvY2subnVtYmVyID09PSBwcmV2QmxvY2subnVtYmVyKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGJsb2NrLm51bWJlciAtIHByZXZCbG9jay5udW1iZXIgPiAxICYmIGVtaXRNaXNzZWQpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBpID0gcHJldkJsb2NrPy5udW1iZXIgKyAxbjsgaSA8IGJsb2NrLm51bWJlcjsgaSsrKSB7CiAgICAgICAgICAgICAgICBjb25zdCBibG9jazIgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRCbG9jaywgImdldEJsb2NrIikoewogICAgICAgICAgICAgICAgICBibG9ja051bWJlcjogaSwKICAgICAgICAgICAgICAgICAgaW5jbHVkZVRyYW5zYWN0aW9ucwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBlbWl0Lm9uQmxvY2soYmxvY2syLCBwcmV2QmxvY2spOwogICAgICAgICAgICAgICAgcHJldkJsb2NrID0gYmxvY2syOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKAogICAgICAgICAgICAvLyBJZiBubyBwcmV2aW91cyBibG9jayBleGlzdHMsIGVtaXQuCiAgICAgICAgICAgICFwcmV2QmxvY2s/Lm51bWJlciB8fCAvLyBJZiB0aGUgYmxvY2sgdGFnIGlzICJwZW5kaW5nIiB3aXRoIG5vIGJsb2NrIG51bWJlciwgZW1pdC4KICAgICAgICAgICAgYmxvY2tUYWcgPT09ICJwZW5kaW5nIiAmJiAhYmxvY2s/Lm51bWJlciB8fCAvLyBJZiB0aGUgbmV4dCBibG9jayBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSBwcmV2aW91cyBibG9jayBudW1iZXIsIGVtaXQuCiAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZW1pdCBibG9ja3MgaW4gdGhlIHBhc3QuCiAgICAgICAgICAgIGJsb2NrLm51bWJlciAmJiBibG9jay5udW1iZXIgPiBwcmV2QmxvY2subnVtYmVyCiAgICAgICAgICApIHsKICAgICAgICAgICAgZW1pdC5vbkJsb2NrKGJsb2NrLCBwcmV2QmxvY2spOwogICAgICAgICAgICBwcmV2QmxvY2sgPSBibG9jazsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGVtaXQub25FcnJvcj8uKGVycik7CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAgZW1pdE9uQmVnaW4sCiAgICAgICAgaW50ZXJ2YWw6IHBvbGxpbmdJbnRlcnZhbAogICAgICB9KSk7CiAgICB9OwogICAgY29uc3Qgc3Vic2NyaWJlQmxvY2tzID0gKCkgPT4gewogICAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgICAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gYWN0aXZlID0gZmFsc2U7CiAgICAgIChhc3luYyAoKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydCA9ICgoKSA9PiB7CiAgICAgICAgICAgIGlmIChjbGllbnQudHJhbnNwb3J0LnR5cGUgPT09ICJmYWxsYmFjayIpIHsKICAgICAgICAgICAgICBjb25zdCB0cmFuc3BvcnQyID0gY2xpZW50LnRyYW5zcG9ydC50cmFuc3BvcnRzLmZpbmQoKHRyYW5zcG9ydDMpID0+IHRyYW5zcG9ydDMuY29uZmlnLnR5cGUgPT09ICJ3ZWJTb2NrZXQiKTsKICAgICAgICAgICAgICBpZiAoIXRyYW5zcG9ydDIpCiAgICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgICAgICByZXR1cm4gdHJhbnNwb3J0Mi52YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gY2xpZW50LnRyYW5zcG9ydDsKICAgICAgICAgIH0pKCk7CiAgICAgICAgICBjb25zdCB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZV8gfSA9IGF3YWl0IHRyYW5zcG9ydC5zdWJzY3JpYmUoewogICAgICAgICAgICBwYXJhbXM6IFsibmV3SGVhZHMiXSwKICAgICAgICAgICAgb25EYXRhKGRhdGEpIHsKICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBjbGllbnQuY2hhaW4/LmZvcm1hdHRlcnM/LmJsb2NrPy5mb3JtYXQgfHwgZm9ybWF0QmxvY2s7CiAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBmb3JtYXQoZGF0YS5yZXN1bHQpOwogICAgICAgICAgICAgIG9uQmxvY2soYmxvY2ssIHByZXZCbG9jayk7CiAgICAgICAgICAgICAgcHJldkJsb2NrID0gYmxvY2s7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uRXJyb3IoZXJyb3IpIHsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBvbkVycm9yPy4oZXJyKTsKICAgICAgICB9CiAgICAgIH0pKCk7CiAgICAgIHJldHVybiAoKSA9PiB1bnN1YnNjcmliZSgpOwogICAgfTsKICAgIHJldHVybiBlbmFibGVQb2xsaW5nID8gcG9sbEJsb2NrcygpIDogc3Vic2NyaWJlQmxvY2tzKCk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvcHVibGljL3dhdGNoRXZlbnQuanMKICBpbml0X3N0cmluZ2lmeSgpOwogIGluaXRfYWJpKCk7CiAgaW5pdF9ycGMoKTsKICBmdW5jdGlvbiB3YXRjaEV2ZW50KGNsaWVudCwgeyBhZGRyZXNzLCBhcmdzLCBiYXRjaCA9IHRydWUsIGV2ZW50LCBldmVudHMsIGZyb21CbG9jaywgb25FcnJvciwgb25Mb2dzLCBwb2xsOiBwb2xsXywgcG9sbGluZ0ludGVydmFsID0gY2xpZW50LnBvbGxpbmdJbnRlcnZhbCwgc3RyaWN0OiBzdHJpY3RfIH0pIHsKICAgIGNvbnN0IGVuYWJsZVBvbGxpbmcgPSAoKCkgPT4gewogICAgICBpZiAodHlwZW9mIHBvbGxfICE9PSAidW5kZWZpbmVkIikKICAgICAgICByZXR1cm4gcG9sbF87CiAgICAgIGlmICh0eXBlb2YgZnJvbUJsb2NrID09PSAiYmlnaW50IikKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoY2xpZW50LnRyYW5zcG9ydC50eXBlID09PSAiZmFsbGJhY2siICYmIGNsaWVudC50cmFuc3BvcnQudHJhbnNwb3J0c1swXS5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pKCk7CiAgICBjb25zdCBzdHJpY3QgPSBzdHJpY3RfID8/IGZhbHNlOwogICAgY29uc3QgcG9sbEV2ZW50ID0gKCkgPT4gewogICAgICBjb25zdCBvYnNlcnZlcklkID0gc3RyaW5naWZ5KFsKICAgICAgICAid2F0Y2hFdmVudCIsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBhcmdzLAogICAgICAgIGJhdGNoLAogICAgICAgIGNsaWVudC51aWQsCiAgICAgICAgZXZlbnQsCiAgICAgICAgcG9sbGluZ0ludGVydmFsLAogICAgICAgIGZyb21CbG9jawogICAgICBdKTsKICAgICAgcmV0dXJuIG9ic2VydmUob2JzZXJ2ZXJJZCwgeyBvbkxvZ3MsIG9uRXJyb3IgfSwgKGVtaXQpID0+IHsKICAgICAgICBsZXQgcHJldmlvdXNCbG9ja051bWJlcjsKICAgICAgICBpZiAoZnJvbUJsb2NrICE9PSB2b2lkIDApCiAgICAgICAgICBwcmV2aW91c0Jsb2NrTnVtYmVyID0gZnJvbUJsb2NrIC0gMW47CiAgICAgICAgbGV0IGZpbHRlcjsKICAgICAgICBsZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICAgICBjb25zdCB1bndhdGNoID0gcG9sbChhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAoIWluaXRpYWxpemVkKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgZmlsdGVyID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgY3JlYXRlRXZlbnRGaWx0ZXIsICJjcmVhdGVFdmVudEZpbHRlciIpKHsKICAgICAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgZXZlbnQsCiAgICAgICAgICAgICAgICBldmVudHMsCiAgICAgICAgICAgICAgICBzdHJpY3QsCiAgICAgICAgICAgICAgICBmcm9tQmxvY2sKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBsZXQgbG9nczsKICAgICAgICAgICAgaWYgKGZpbHRlcikgewogICAgICAgICAgICAgIGxvZ3MgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRGaWx0ZXJDaGFuZ2VzLCAiZ2V0RmlsdGVyQ2hhbmdlcyIpKHsgZmlsdGVyIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnN0IGJsb2NrTnVtYmVyID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0QmxvY2tOdW1iZXIsICJnZXRCbG9ja051bWJlciIpKHt9KTsKICAgICAgICAgICAgICBpZiAocHJldmlvdXNCbG9ja051bWJlciAmJiBwcmV2aW91c0Jsb2NrTnVtYmVyICE9PSBibG9ja051bWJlcikgewogICAgICAgICAgICAgICAgbG9ncyA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGdldExvZ3MsICJnZXRMb2dzIikoewogICAgICAgICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgICBldmVudCwKICAgICAgICAgICAgICAgICAgZXZlbnRzLAogICAgICAgICAgICAgICAgICBmcm9tQmxvY2s6IHByZXZpb3VzQmxvY2tOdW1iZXIgKyAxbiwKICAgICAgICAgICAgICAgICAgdG9CbG9jazogYmxvY2tOdW1iZXIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBsb2dzID0gW107CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHByZXZpb3VzQmxvY2tOdW1iZXIgPSBibG9ja051bWJlcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobG9ncy5sZW5ndGggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoYmF0Y2gpCiAgICAgICAgICAgICAgZW1pdC5vbkxvZ3MobG9ncyk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxvZyBvZiBsb2dzKQogICAgICAgICAgICAgICAgZW1pdC5vbkxvZ3MoW2xvZ10pOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGlmIChmaWx0ZXIgJiYgZXJyIGluc3RhbmNlb2YgSW52YWxpZElucHV0UnBjRXJyb3IpCiAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICAgICAgICAgZW1pdC5vbkVycm9yPy4oZXJyKTsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBlbWl0T25CZWdpbjogdHJ1ZSwKICAgICAgICAgIGludGVydmFsOiBwb2xsaW5nSW50ZXJ2YWwKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4gewogICAgICAgICAgaWYgKGZpbHRlcikKICAgICAgICAgICAgYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgdW5pbnN0YWxsRmlsdGVyLCAidW5pbnN0YWxsRmlsdGVyIikoeyBmaWx0ZXIgfSk7CiAgICAgICAgICB1bndhdGNoKCk7CiAgICAgICAgfTsKICAgICAgfSk7CiAgICB9OwogICAgY29uc3Qgc3Vic2NyaWJlRXZlbnQgPSAoKSA9PiB7CiAgICAgIGxldCBhY3RpdmUgPSB0cnVlOwogICAgICBsZXQgdW5zdWJzY3JpYmUgPSAoKSA9PiBhY3RpdmUgPSBmYWxzZTsKICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgdHJhbnNwb3J0ID0gKCgpID0+IHsKICAgICAgICAgICAgaWYgKGNsaWVudC50cmFuc3BvcnQudHlwZSA9PT0gImZhbGxiYWNrIikgewogICAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydDIgPSBjbGllbnQudHJhbnNwb3J0LnRyYW5zcG9ydHMuZmluZCgodHJhbnNwb3J0MykgPT4gdHJhbnNwb3J0My5jb25maWcudHlwZSA9PT0gIndlYlNvY2tldCIpOwogICAgICAgICAgICAgIGlmICghdHJhbnNwb3J0MikKICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgICAgIHJldHVybiB0cmFuc3BvcnQyLnZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBjbGllbnQudHJhbnNwb3J0OwogICAgICAgICAgfSkoKTsKICAgICAgICAgIGNvbnN0IGV2ZW50c18gPSBldmVudHMgPz8gKGV2ZW50ID8gW2V2ZW50XSA6IHZvaWQgMCk7CiAgICAgICAgICBsZXQgdG9waWNzID0gW107CiAgICAgICAgICBpZiAoZXZlbnRzXykgewogICAgICAgICAgICBjb25zdCBlbmNvZGVkID0gZXZlbnRzXy5mbGF0TWFwKChldmVudDIpID0+IGVuY29kZUV2ZW50VG9waWNzKHsKICAgICAgICAgICAgICBhYmk6IFtldmVudDJdLAogICAgICAgICAgICAgIGV2ZW50TmFtZTogZXZlbnQyLm5hbWUsCiAgICAgICAgICAgICAgYXJncwogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIHRvcGljcyA9IFtlbmNvZGVkXTsKICAgICAgICAgICAgaWYgKGV2ZW50KQogICAgICAgICAgICAgIHRvcGljcyA9IHRvcGljc1swXTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHsgdW5zdWJzY3JpYmU6IHVuc3Vic2NyaWJlXyB9ID0gYXdhaXQgdHJhbnNwb3J0LnN1YnNjcmliZSh7CiAgICAgICAgICAgIHBhcmFtczogWyJsb2dzIiwgeyBhZGRyZXNzLCB0b3BpY3MgfV0sCiAgICAgICAgICAgIG9uRGF0YShkYXRhKSB7CiAgICAgICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgY29uc3QgbG9nID0gZGF0YS5yZXN1bHQ7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGNvbnN0IHsgZXZlbnROYW1lLCBhcmdzOiBhcmdzMiB9ID0gZGVjb2RlRXZlbnRMb2coewogICAgICAgICAgICAgICAgICBhYmk6IGV2ZW50c18gPz8gW10sCiAgICAgICAgICAgICAgICAgIGRhdGE6IGxvZy5kYXRhLAogICAgICAgICAgICAgICAgICB0b3BpY3M6IGxvZy50b3BpY3MsCiAgICAgICAgICAgICAgICAgIHN0cmljdAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2cobG9nLCB7IGFyZ3M6IGFyZ3MyLCBldmVudE5hbWUgfSk7CiAgICAgICAgICAgICAgICBvbkxvZ3MoW2Zvcm1hdHRlZF0pOwogICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgbGV0IGV2ZW50TmFtZTsKICAgICAgICAgICAgICAgIGxldCBpc1VubmFtZWQ7CiAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRGVjb2RlTG9nRGF0YU1pc21hdGNoIHx8IGVyciBpbnN0YW5jZW9mIERlY29kZUxvZ1RvcGljc01pc21hdGNoKSB7CiAgICAgICAgICAgICAgICAgIGlmIChzdHJpY3RfKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgZXZlbnROYW1lID0gZXJyLmFiaUl0ZW0ubmFtZTsKICAgICAgICAgICAgICAgICAgaXNVbm5hbWVkID0gZXJyLmFiaUl0ZW0uaW5wdXRzPy5zb21lKCh4KSA9PiAhKCJuYW1lIiBpbiB4ICYmIHgubmFtZSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TG9nKGxvZywgewogICAgICAgICAgICAgICAgICBhcmdzOiBpc1VubmFtZWQgPyBbXSA6IHt9LAogICAgICAgICAgICAgICAgICBldmVudE5hbWUKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgb25Mb2dzKFtmb3JtYXR0ZWRdKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uRXJyb3IoZXJyb3IpIHsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBvbkVycm9yPy4oZXJyKTsKICAgICAgICB9CiAgICAgIH0pKCk7CiAgICAgIHJldHVybiAoKSA9PiB1bnN1YnNjcmliZSgpOwogICAgfTsKICAgIHJldHVybiBlbmFibGVQb2xsaW5nID8gcG9sbEV2ZW50KCkgOiBzdWJzY3JpYmVFdmVudCgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3B1YmxpYy93YXRjaFBlbmRpbmdUcmFuc2FjdGlvbnMuanMKICBpbml0X3N0cmluZ2lmeSgpOwogIGZ1bmN0aW9uIHdhdGNoUGVuZGluZ1RyYW5zYWN0aW9ucyhjbGllbnQsIHsgYmF0Y2ggPSB0cnVlLCBvbkVycm9yLCBvblRyYW5zYWN0aW9ucywgcG9sbDogcG9sbF8sIHBvbGxpbmdJbnRlcnZhbCA9IGNsaWVudC5wb2xsaW5nSW50ZXJ2YWwgfSkgewogICAgY29uc3QgZW5hYmxlUG9sbGluZyA9IHR5cGVvZiBwb2xsXyAhPT0gInVuZGVmaW5lZCIgPyBwb2xsXyA6IGNsaWVudC50cmFuc3BvcnQudHlwZSAhPT0gIndlYlNvY2tldCI7CiAgICBjb25zdCBwb2xsUGVuZGluZ1RyYW5zYWN0aW9ucyA9ICgpID0+IHsKICAgICAgY29uc3Qgb2JzZXJ2ZXJJZCA9IHN0cmluZ2lmeShbCiAgICAgICAgIndhdGNoUGVuZGluZ1RyYW5zYWN0aW9ucyIsCiAgICAgICAgY2xpZW50LnVpZCwKICAgICAgICBiYXRjaCwKICAgICAgICBwb2xsaW5nSW50ZXJ2YWwKICAgICAgXSk7CiAgICAgIHJldHVybiBvYnNlcnZlKG9ic2VydmVySWQsIHsgb25UcmFuc2FjdGlvbnMsIG9uRXJyb3IgfSwgKGVtaXQpID0+IHsKICAgICAgICBsZXQgZmlsdGVyOwogICAgICAgIGNvbnN0IHVud2F0Y2ggPSBwb2xsKGFzeW5jICgpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICghZmlsdGVyKSB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGZpbHRlciA9IGF3YWl0IGdldEFjdGlvbihjbGllbnQsIGNyZWF0ZVBlbmRpbmdUcmFuc2FjdGlvbkZpbHRlciwgImNyZWF0ZVBlbmRpbmdUcmFuc2FjdGlvbkZpbHRlciIpKHt9KTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICAgIHVud2F0Y2goKTsKICAgICAgICAgICAgICAgIHRocm93IGVycjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgaGFzaGVzID0gYXdhaXQgZ2V0QWN0aW9uKGNsaWVudCwgZ2V0RmlsdGVyQ2hhbmdlcywgImdldEZpbHRlckNoYW5nZXMiKSh7IGZpbHRlciB9KTsKICAgICAgICAgICAgaWYgKGhhc2hlcy5sZW5ndGggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoYmF0Y2gpCiAgICAgICAgICAgICAgZW1pdC5vblRyYW5zYWN0aW9ucyhoYXNoZXMpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgZm9yIChjb25zdCBoYXNoMyBvZiBoYXNoZXMpCiAgICAgICAgICAgICAgICBlbWl0Lm9uVHJhbnNhY3Rpb25zKFtoYXNoM10pOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGVtaXQub25FcnJvcj8uKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgZW1pdE9uQmVnaW46IHRydWUsCiAgICAgICAgICBpbnRlcnZhbDogcG9sbGluZ0ludGVydmFsCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChmaWx0ZXIpCiAgICAgICAgICAgIGF3YWl0IGdldEFjdGlvbihjbGllbnQsIHVuaW5zdGFsbEZpbHRlciwgInVuaW5zdGFsbEZpbHRlciIpKHsgZmlsdGVyIH0pOwogICAgICAgICAgdW53YXRjaCgpOwogICAgICAgIH07CiAgICAgIH0pOwogICAgfTsKICAgIGNvbnN0IHN1YnNjcmliZVBlbmRpbmdUcmFuc2FjdGlvbnMgPSAoKSA9PiB7CiAgICAgIGxldCBhY3RpdmUgPSB0cnVlOwogICAgICBsZXQgdW5zdWJzY3JpYmUgPSAoKSA9PiBhY3RpdmUgPSBmYWxzZTsKICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgeyB1bnN1YnNjcmliZTogdW5zdWJzY3JpYmVfIH0gPSBhd2FpdCBjbGllbnQudHJhbnNwb3J0LnN1YnNjcmliZSh7CiAgICAgICAgICAgIHBhcmFtczogWyJuZXdQZW5kaW5nVHJhbnNhY3Rpb25zIl0sCiAgICAgICAgICAgIG9uRGF0YShkYXRhKSB7CiAgICAgICAgICAgICAgaWYgKCFhY3RpdmUpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYXRhLnJlc3VsdDsKICAgICAgICAgICAgICBvblRyYW5zYWN0aW9ucyhbdHJhbnNhY3Rpb25dKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25FcnJvcihlcnJvcikgewogICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZV87CiAgICAgICAgICBpZiAoIWFjdGl2ZSkKICAgICAgICAgICAgdW5zdWJzY3JpYmUoKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIG9uRXJyb3I/LihlcnIpOwogICAgICAgIH0KICAgICAgfSkoKTsKICAgICAgcmV0dXJuICgpID0+IHVuc3Vic2NyaWJlKCk7CiAgICB9OwogICAgcmV0dXJuIGVuYWJsZVBvbGxpbmcgPyBwb2xsUGVuZGluZ1RyYW5zYWN0aW9ucygpIDogc3Vic2NyaWJlUGVuZGluZ1RyYW5zYWN0aW9ucygpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaXdlL3BhcnNlU2l3ZU1lc3NhZ2UuanMKICBmdW5jdGlvbiBwYXJzZVNpd2VNZXNzYWdlKG1lc3NhZ2UpIHsKICAgIGNvbnN0IHsgc2NoZW1lLCBzdGF0ZW1lbnQsIC4uLnByZWZpeCB9ID0gbWVzc2FnZS5tYXRjaChwcmVmaXhSZWdleCk/Lmdyb3VwcyA/PyB7fTsKICAgIGNvbnN0IHsgY2hhaW5JZCwgZXhwaXJhdGlvblRpbWUsIGlzc3VlZEF0LCBub3RCZWZvcmUsIHJlcXVlc3RJZCwgLi4uc3VmZml4IH0gPSBtZXNzYWdlLm1hdGNoKHN1ZmZpeFJlZ2V4KT8uZ3JvdXBzID8/IHt9OwogICAgY29uc3QgcmVzb3VyY2VzID0gbWVzc2FnZS5zcGxpdCgiUmVzb3VyY2VzOiIpWzFdPy5zcGxpdCgiXG4tICIpLnNsaWNlKDEpOwogICAgcmV0dXJuIHsKICAgICAgLi4ucHJlZml4LAogICAgICAuLi5zdWZmaXgsCiAgICAgIC4uLmNoYWluSWQgPyB7IGNoYWluSWQ6IE51bWJlcihjaGFpbklkKSB9IDoge30sCiAgICAgIC4uLmV4cGlyYXRpb25UaW1lID8geyBleHBpcmF0aW9uVGltZTogbmV3IERhdGUoZXhwaXJhdGlvblRpbWUpIH0gOiB7fSwKICAgICAgLi4uaXNzdWVkQXQgPyB7IGlzc3VlZEF0OiBuZXcgRGF0ZShpc3N1ZWRBdCkgfSA6IHt9LAogICAgICAuLi5ub3RCZWZvcmUgPyB7IG5vdEJlZm9yZTogbmV3IERhdGUobm90QmVmb3JlKSB9IDoge30sCiAgICAgIC4uLnJlcXVlc3RJZCA/IHsgcmVxdWVzdElkIH0gOiB7fSwKICAgICAgLi4ucmVzb3VyY2VzID8geyByZXNvdXJjZXMgfSA6IHt9LAogICAgICAuLi5zY2hlbWUgPyB7IHNjaGVtZSB9IDoge30sCiAgICAgIC4uLnN0YXRlbWVudCA/IHsgc3RhdGVtZW50IH0gOiB7fQogICAgfTsKICB9CiAgdmFyIHByZWZpeFJlZ2V4ID0gL14oPzooPzxzY2hlbWU+W2EtekEtWl1bYS16QS1aMC05Ky0uXSopOlwvXC8pPyg/PGRvbWFpbj5bYS16QS1aMC05Ky0uXSooPzo6WzAtOV17MSw1fSk/KSAoPzp3YW50cyB5b3UgdG8gc2lnbiBpbiB3aXRoIHlvdXIgRXRoZXJldW0gYWNjb3VudDpcbikoPzxhZGRyZXNzPjB4W2EtZkEtRjAtOV17NDB9KVxuXG4oPzooPzxzdGF0ZW1lbnQ+LiopXG5cbik/LzsKICB2YXIgc3VmZml4UmVnZXggPSAvKD86VVJJOiAoPzx1cmk+LispKVxuKD86VmVyc2lvbjogKD88dmVyc2lvbj4uKykpXG4oPzpDaGFpbiBJRDogKD88Y2hhaW5JZD5cZCspKVxuKD86Tm9uY2U6ICg/PG5vbmNlPlthLXpBLVowLTldKykpXG4oPzpJc3N1ZWQgQXQ6ICg/PGlzc3VlZEF0Pi4rKSkoPzpcbkV4cGlyYXRpb24gVGltZTogKD88ZXhwaXJhdGlvblRpbWU+LispKT8oPzpcbk5vdCBCZWZvcmU6ICg/PG5vdEJlZm9yZT4uKykpPyg/OlxuUmVxdWVzdCBJRDogKD88cmVxdWVzdElkPi4rKSk/LzsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaXdlL3ZhbGlkYXRlU2l3ZU1lc3NhZ2UuanMKICBpbml0X2lzQWRkcmVzc0VxdWFsKCk7CiAgZnVuY3Rpb24gdmFsaWRhdGVTaXdlTWVzc2FnZShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGRvbWFpbiwgbWVzc2FnZSwgbm9uY2UsIHNjaGVtZSwgdGltZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpIH0gPSBwYXJhbWV0ZXJzOwogICAgaWYgKGRvbWFpbiAmJiBtZXNzYWdlLmRvbWFpbiAhPT0gZG9tYWluKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAobm9uY2UgJiYgbWVzc2FnZS5ub25jZSAhPT0gbm9uY2UpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChzY2hlbWUgJiYgbWVzc2FnZS5zY2hlbWUgIT09IHNjaGVtZSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKG1lc3NhZ2UuZXhwaXJhdGlvblRpbWUgJiYgdGltZSA+PSBtZXNzYWdlLmV4cGlyYXRpb25UaW1lKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAobWVzc2FnZS5ub3RCZWZvcmUgJiYgdGltZSA8IG1lc3NhZ2Uubm90QmVmb3JlKQogICAgICByZXR1cm4gZmFsc2U7CiAgICB0cnkgewogICAgICBpZiAoIW1lc3NhZ2UuYWRkcmVzcykKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChhZGRyZXNzICYmICFpc0FkZHJlc3NFcXVhbChtZXNzYWdlLmFkZHJlc3MsIGFkZHJlc3MpKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gY2F0Y2ggewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy9zaXdlL3ZlcmlmeVNpd2VNZXNzYWdlLmpzCiAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5U2l3ZU1lc3NhZ2UoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFkZHJlc3MsIGRvbWFpbiwgbWVzc2FnZSwgbm9uY2UsIHNjaGVtZSwgc2lnbmF0dXJlLCB0aW1lID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCksIC4uLmNhbGxSZXF1ZXN0IH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgcGFyc2VkID0gcGFyc2VTaXdlTWVzc2FnZShtZXNzYWdlKTsKICAgIGlmICghcGFyc2VkLmFkZHJlc3MpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZVNpd2VNZXNzYWdlKHsKICAgICAgYWRkcmVzcywKICAgICAgZG9tYWluLAogICAgICBtZXNzYWdlOiBwYXJzZWQsCiAgICAgIG5vbmNlLAogICAgICBzY2hlbWUsCiAgICAgIHRpbWUKICAgIH0pOwogICAgaWYgKCFpc1ZhbGlkKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBjb25zdCBoYXNoMyA9IGhhc2hNZXNzYWdlKG1lc3NhZ2UpOwogICAgcmV0dXJuIHZlcmlmeUhhc2gyKGNsaWVudCwgewogICAgICBhZGRyZXNzOiBwYXJzZWQuYWRkcmVzcywKICAgICAgaGFzaDogaGFzaDMsCiAgICAgIHNpZ25hdHVyZSwKICAgICAgLi4uY2FsbFJlcXVlc3QKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2RlY29yYXRvcnMvcHVibGljLmpzCiAgZnVuY3Rpb24gcHVibGljQWN0aW9ucyhjbGllbnQpIHsKICAgIHJldHVybiB7CiAgICAgIGNhbGw6IChhcmdzKSA9PiBjYWxsKGNsaWVudCwgYXJncyksCiAgICAgIGNyZWF0ZUJsb2NrRmlsdGVyOiAoKSA9PiBjcmVhdGVCbG9ja0ZpbHRlcihjbGllbnQpLAogICAgICBjcmVhdGVDb250cmFjdEV2ZW50RmlsdGVyOiAoYXJncykgPT4gY3JlYXRlQ29udHJhY3RFdmVudEZpbHRlcihjbGllbnQsIGFyZ3MpLAogICAgICBjcmVhdGVFdmVudEZpbHRlcjogKGFyZ3MpID0+IGNyZWF0ZUV2ZW50RmlsdGVyKGNsaWVudCwgYXJncyksCiAgICAgIGNyZWF0ZVBlbmRpbmdUcmFuc2FjdGlvbkZpbHRlcjogKCkgPT4gY3JlYXRlUGVuZGluZ1RyYW5zYWN0aW9uRmlsdGVyKGNsaWVudCksCiAgICAgIGVzdGltYXRlQ29udHJhY3RHYXM6IChhcmdzKSA9PiBlc3RpbWF0ZUNvbnRyYWN0R2FzKGNsaWVudCwgYXJncyksCiAgICAgIGVzdGltYXRlR2FzOiAoYXJncykgPT4gZXN0aW1hdGVHYXMoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0QmFsYW5jZTogKGFyZ3MpID0+IGdldEJhbGFuY2UoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0QmxvYkJhc2VGZWU6ICgpID0+IGdldEJsb2JCYXNlRmVlKGNsaWVudCksCiAgICAgIGdldEJsb2NrOiAoYXJncykgPT4gZ2V0QmxvY2soY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0QmxvY2tOdW1iZXI6IChhcmdzKSA9PiBnZXRCbG9ja051bWJlcihjbGllbnQsIGFyZ3MpLAogICAgICBnZXRCbG9ja1RyYW5zYWN0aW9uQ291bnQ6IChhcmdzKSA9PiBnZXRCbG9ja1RyYW5zYWN0aW9uQ291bnQoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0Qnl0ZWNvZGU6IChhcmdzKSA9PiBnZXRDb2RlKGNsaWVudCwgYXJncyksCiAgICAgIGdldENoYWluSWQ6ICgpID0+IGdldENoYWluSWQoY2xpZW50KSwKICAgICAgZ2V0Q29kZTogKGFyZ3MpID0+IGdldENvZGUoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0Q29udHJhY3RFdmVudHM6IChhcmdzKSA9PiBnZXRDb250cmFjdEV2ZW50cyhjbGllbnQsIGFyZ3MpLAogICAgICBnZXRFaXA3MTJEb21haW46IChhcmdzKSA9PiBnZXRFaXA3MTJEb21haW4oY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RW5zQWRkcmVzczogKGFyZ3MpID0+IGdldEVuc0FkZHJlc3MoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RW5zQXZhdGFyOiAoYXJncykgPT4gZ2V0RW5zQXZhdGFyKGNsaWVudCwgYXJncyksCiAgICAgIGdldEVuc05hbWU6IChhcmdzKSA9PiBnZXRFbnNOYW1lKGNsaWVudCwgYXJncyksCiAgICAgIGdldEVuc1Jlc29sdmVyOiAoYXJncykgPT4gZ2V0RW5zUmVzb2x2ZXIoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RW5zVGV4dDogKGFyZ3MpID0+IGdldEVuc1RleHQoY2xpZW50LCBhcmdzKSwKICAgICAgZ2V0RmVlSGlzdG9yeTogKGFyZ3MpID0+IGdldEZlZUhpc3RvcnkoY2xpZW50LCBhcmdzKSwKICAgICAgZXN0aW1hdGVGZWVzUGVyR2FzOiAoYXJncykgPT4gZXN0aW1hdGVGZWVzUGVyR2FzKGNsaWVudCwgYXJncyksCiAgICAgIGdldEZpbHRlckNoYW5nZXM6IChhcmdzKSA9PiBnZXRGaWx0ZXJDaGFuZ2VzKGNsaWVudCwgYXJncyksCiAgICAgIGdldEZpbHRlckxvZ3M6IChhcmdzKSA9PiBnZXRGaWx0ZXJMb2dzKGNsaWVudCwgYXJncyksCiAgICAgIGdldEdhc1ByaWNlOiAoKSA9PiBnZXRHYXNQcmljZShjbGllbnQpLAogICAgICBnZXRMb2dzOiAoYXJncykgPT4gZ2V0TG9ncyhjbGllbnQsIGFyZ3MpLAogICAgICBnZXRQcm9vZjogKGFyZ3MpID0+IGdldFByb29mKGNsaWVudCwgYXJncyksCiAgICAgIGVzdGltYXRlTWF4UHJpb3JpdHlGZWVQZXJHYXM6IChhcmdzKSA9PiBlc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzKGNsaWVudCwgYXJncyksCiAgICAgIGdldFN0b3JhZ2VBdDogKGFyZ3MpID0+IGdldFN0b3JhZ2VBdChjbGllbnQsIGFyZ3MpLAogICAgICBnZXRUcmFuc2FjdGlvbjogKGFyZ3MpID0+IGdldFRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgIGdldFRyYW5zYWN0aW9uQ29uZmlybWF0aW9uczogKGFyZ3MpID0+IGdldFRyYW5zYWN0aW9uQ29uZmlybWF0aW9ucyhjbGllbnQsIGFyZ3MpLAogICAgICBnZXRUcmFuc2FjdGlvbkNvdW50OiAoYXJncykgPT4gZ2V0VHJhbnNhY3Rpb25Db3VudChjbGllbnQsIGFyZ3MpLAogICAgICBnZXRUcmFuc2FjdGlvblJlY2VpcHQ6IChhcmdzKSA9PiBnZXRUcmFuc2FjdGlvblJlY2VpcHQoY2xpZW50LCBhcmdzKSwKICAgICAgbXVsdGljYWxsOiAoYXJncykgPT4gbXVsdGljYWxsKGNsaWVudCwgYXJncyksCiAgICAgIHByZXBhcmVUcmFuc2FjdGlvblJlcXVlc3Q6IChhcmdzKSA9PiBwcmVwYXJlVHJhbnNhY3Rpb25SZXF1ZXN0KGNsaWVudCwgYXJncyksCiAgICAgIHJlYWRDb250cmFjdDogKGFyZ3MpID0+IHJlYWRDb250cmFjdChjbGllbnQsIGFyZ3MpLAogICAgICBzZW5kUmF3VHJhbnNhY3Rpb246IChhcmdzKSA9PiBzZW5kUmF3VHJhbnNhY3Rpb24oY2xpZW50LCBhcmdzKSwKICAgICAgc2ltdWxhdGVDb250cmFjdDogKGFyZ3MpID0+IHNpbXVsYXRlQ29udHJhY3QoY2xpZW50LCBhcmdzKSwKICAgICAgdmVyaWZ5TWVzc2FnZTogKGFyZ3MpID0+IHZlcmlmeU1lc3NhZ2UyKGNsaWVudCwgYXJncyksCiAgICAgIHZlcmlmeVNpd2VNZXNzYWdlOiAoYXJncykgPT4gdmVyaWZ5U2l3ZU1lc3NhZ2UoY2xpZW50LCBhcmdzKSwKICAgICAgdmVyaWZ5VHlwZWREYXRhOiAoYXJncykgPT4gdmVyaWZ5VHlwZWREYXRhMihjbGllbnQsIGFyZ3MpLAogICAgICB1bmluc3RhbGxGaWx0ZXI6IChhcmdzKSA9PiB1bmluc3RhbGxGaWx0ZXIoY2xpZW50LCBhcmdzKSwKICAgICAgd2FpdEZvclRyYW5zYWN0aW9uUmVjZWlwdDogKGFyZ3MpID0+IHdhaXRGb3JUcmFuc2FjdGlvblJlY2VpcHQoY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hCbG9ja3M6IChhcmdzKSA9PiB3YXRjaEJsb2NrcyhjbGllbnQsIGFyZ3MpLAogICAgICB3YXRjaEJsb2NrTnVtYmVyOiAoYXJncykgPT4gd2F0Y2hCbG9ja051bWJlcihjbGllbnQsIGFyZ3MpLAogICAgICB3YXRjaENvbnRyYWN0RXZlbnQ6IChhcmdzKSA9PiB3YXRjaENvbnRyYWN0RXZlbnQoY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hFdmVudDogKGFyZ3MpID0+IHdhdGNoRXZlbnQoY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hQZW5kaW5nVHJhbnNhY3Rpb25zOiAoYXJncykgPT4gd2F0Y2hQZW5kaW5nVHJhbnNhY3Rpb25zKGNsaWVudCwgYXJncykKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NsaWVudHMvY3JlYXRlUHVibGljQ2xpZW50LmpzCiAgZnVuY3Rpb24gY3JlYXRlUHVibGljQ2xpZW50KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsga2V5ID0gInB1YmxpYyIsIG5hbWUgPSAiUHVibGljIENsaWVudCIgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQoewogICAgICAuLi5wYXJhbWV0ZXJzLAogICAgICBrZXksCiAgICAgIG5hbWUsCiAgICAgIHR5cGU6ICJwdWJsaWNDbGllbnQiCiAgICB9KTsKICAgIHJldHVybiBjbGllbnQuZXh0ZW5kKHB1YmxpY0FjdGlvbnMpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvZHJvcFRyYW5zYWN0aW9uLmpzCiAgYXN5bmMgZnVuY3Rpb24gZHJvcFRyYW5zYWN0aW9uKGNsaWVudCwgeyBoYXNoOiBoYXNoMyB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X2Ryb3BUcmFuc2FjdGlvbmAsCiAgICAgIHBhcmFtczogW2hhc2gzXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9kdW1wU3RhdGUuanMKICBhc3luYyBmdW5jdGlvbiBkdW1wU3RhdGUoY2xpZW50KSB7CiAgICByZXR1cm4gY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9kdW1wU3RhdGVgCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L2dldEF1dG9taW5lLmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0QXV0b21pbmUoY2xpZW50KSB7CiAgICBpZiAoY2xpZW50Lm1vZGUgPT09ICJnYW5hY2hlIikKICAgICAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldGhfbWluaW5nIgogICAgICB9KTsKICAgIHJldHVybiBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X2dldEF1dG9taW5lYAogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9nZXRUeHBvb2xDb250ZW50LmpzCiAgYXN5bmMgZnVuY3Rpb24gZ2V0VHhwb29sQ29udGVudChjbGllbnQpIHsKICAgIHJldHVybiBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogInR4cG9vbF9jb250ZW50IgogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9nZXRUeHBvb2xTdGF0dXMuanMKICBpbml0X2Zyb21IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRUeHBvb2xTdGF0dXMoY2xpZW50KSB7CiAgICBjb25zdCB7IHBlbmRpbmcsIHF1ZXVlZCB9ID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ0eHBvb2xfc3RhdHVzIgogICAgfSk7CiAgICByZXR1cm4gewogICAgICBwZW5kaW5nOiBoZXhUb051bWJlcihwZW5kaW5nKSwKICAgICAgcXVldWVkOiBoZXhUb051bWJlcihxdWV1ZWQpCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvaW1wZXJzb25hdGVBY2NvdW50LmpzCiAgYXN5bmMgZnVuY3Rpb24gaW1wZXJzb25hdGVBY2NvdW50KGNsaWVudCwgeyBhZGRyZXNzIH0pIHsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiBgJHtjbGllbnQubW9kZX1faW1wZXJzb25hdGVBY2NvdW50YCwKICAgICAgcGFyYW1zOiBbYWRkcmVzc10KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvaW5jcmVhc2VUaW1lLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIGluY3JlYXNlVGltZShjbGllbnQsIHsgc2Vjb25kcyB9KSB7CiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldm1faW5jcmVhc2VUaW1lIiwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoc2Vjb25kcyldCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L2luc3BlY3RUeHBvb2wuanMKICBhc3luYyBmdW5jdGlvbiBpbnNwZWN0VHhwb29sKGNsaWVudCkgewogICAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAidHhwb29sX2luc3BlY3QiCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L2xvYWRTdGF0ZS5qcwogIGFzeW5jIGZ1bmN0aW9uIGxvYWRTdGF0ZShjbGllbnQsIHsgc3RhdGUgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9sb2FkU3RhdGVgLAogICAgICBwYXJhbXM6IFtzdGF0ZV0KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvbWluZS5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBtaW5lKGNsaWVudCwgeyBibG9ja3MsIGludGVydmFsIH0pIHsKICAgIGlmIChjbGllbnQubW9kZSA9PT0gImdhbmFjaGUiKQogICAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXZtX21pbmUiLAogICAgICAgIHBhcmFtczogW3sgYmxvY2tzOiBudW1iZXJUb0hleChibG9ja3MpIH1dCiAgICAgIH0pOwogICAgZWxzZQogICAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiBgJHtjbGllbnQubW9kZX1fbWluZWAsCiAgICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoYmxvY2tzKSwgbnVtYmVyVG9IZXgoaW50ZXJ2YWwgfHwgMCldCiAgICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3QvcmVtb3ZlQmxvY2tUaW1lc3RhbXBJbnRlcnZhbC5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUJsb2NrVGltZXN0YW1wSW50ZXJ2YWwoY2xpZW50KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X3JlbW92ZUJsb2NrVGltZXN0YW1wSW50ZXJ2YWxgCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3Jlc2V0LmpzCiAgYXN5bmMgZnVuY3Rpb24gcmVzZXQoY2xpZW50LCB7IGJsb2NrTnVtYmVyLCBqc29uUnBjVXJsIH0gPSB7fSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9yZXNldGAsCiAgICAgIHBhcmFtczogW3sgZm9ya2luZzogeyBibG9ja051bWJlcjogTnVtYmVyKGJsb2NrTnVtYmVyKSwganNvblJwY1VybCB9IH1dCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3JldmVydC5qcwogIGFzeW5jIGZ1bmN0aW9uIHJldmVydChjbGllbnQsIHsgaWQgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldm1fcmV2ZXJ0IiwKICAgICAgcGFyYW1zOiBbaWRdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NlbmRVbnNpZ25lZFRyYW5zYWN0aW9uLmpzCiAgaW5pdF9leHRyYWN0KCk7CiAgaW5pdF90cmFuc2FjdGlvblJlcXVlc3QoKTsKICBhc3luYyBmdW5jdGlvbiBzZW5kVW5zaWduZWRUcmFuc2FjdGlvbihjbGllbnQsIGFyZ3MpIHsKICAgIGNvbnN0IHsgYWNjZXNzTGlzdCwgZGF0YSwgZnJvbSwgZ2FzLCBnYXNQcmljZSwgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcywgbm9uY2UsIHRvLCB2YWx1ZSwgLi4ucmVzdCB9ID0gYXJnczsKICAgIGNvbnN0IGNoYWluRm9ybWF0ID0gY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzPy50cmFuc2FjdGlvblJlcXVlc3Q/LmZvcm1hdDsKICAgIGNvbnN0IGZvcm1hdCA9IGNoYWluRm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgIGNvbnN0IHJlcXVlc3QgPSBmb3JtYXQoewogICAgICAvLyBQaWNrIG91dCBleHRyYSBkYXRhIHRoYXQgbWlnaHQgZXhpc3Qgb24gdGhlIGNoYWluJ3MgdHJhbnNhY3Rpb24gcmVxdWVzdCB0eXBlLgogICAgICAuLi5leHRyYWN0KHJlc3QsIHsgZm9ybWF0OiBjaGFpbkZvcm1hdCB9KSwKICAgICAgYWNjZXNzTGlzdCwKICAgICAgZGF0YSwKICAgICAgZnJvbSwKICAgICAgZ2FzLAogICAgICBnYXNQcmljZSwKICAgICAgbWF4RmVlUGVyR2FzLAogICAgICBtYXhQcmlvcml0eUZlZVBlckdhcywKICAgICAgbm9uY2UsCiAgICAgIHRvLAogICAgICB2YWx1ZQogICAgfSk7CiAgICBjb25zdCBoYXNoMyA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX3NlbmRVbnNpZ25lZFRyYW5zYWN0aW9uIiwKICAgICAgcGFyYW1zOiBbcmVxdWVzdF0KICAgIH0pOwogICAgcmV0dXJuIGhhc2gzOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc2V0QXV0b21pbmUuanMKICBhc3luYyBmdW5jdGlvbiBzZXRBdXRvbWluZShjbGllbnQsIGVuYWJsZWQpIHsKICAgIGlmIChjbGllbnQubW9kZSA9PT0gImdhbmFjaGUiKSB7CiAgICAgIGlmIChlbmFibGVkKQogICAgICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsgbWV0aG9kOiAibWluZXJfc3RhcnQiIH0pOwogICAgICBlbHNlCiAgICAgICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoeyBtZXRob2Q6ICJtaW5lcl9zdG9wIiB9KTsKICAgIH0gZWxzZQogICAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgICAgbWV0aG9kOiAiZXZtX3NldEF1dG9taW5lIiwKICAgICAgICBwYXJhbXM6IFtlbmFibGVkXQogICAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldEJhbGFuY2UuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2V0QmFsYW5jZShjbGllbnQsIHsgYWRkcmVzcywgdmFsdWUgfSkgewogICAgaWYgKGNsaWVudC5tb2RlID09PSAiZ2FuYWNoZSIpCiAgICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6ICJldm1fc2V0QWNjb3VudEJhbGFuY2UiLAogICAgICAgIHBhcmFtczogW2FkZHJlc3MsIG51bWJlclRvSGV4KHZhbHVlKV0KICAgICAgfSk7CiAgICBlbHNlCiAgICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRCYWxhbmNlYCwKICAgICAgICBwYXJhbXM6IFthZGRyZXNzLCBudW1iZXJUb0hleCh2YWx1ZSldCiAgICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc2V0QmxvY2tHYXNMaW1pdC5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBzZXRCbG9ja0dhc0xpbWl0KGNsaWVudCwgeyBnYXNMaW1pdCB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV2bV9zZXRCbG9ja0dhc0xpbWl0IiwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoZ2FzTGltaXQpXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRCbG9ja1RpbWVzdGFtcEludGVydmFsLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0QmxvY2tUaW1lc3RhbXBJbnRlcnZhbChjbGllbnQsIHsgaW50ZXJ2YWwgfSkgewogICAgY29uc3QgaW50ZXJ2YWxfID0gKCgpID0+IHsKICAgICAgaWYgKGNsaWVudC5tb2RlID09PSAiaGFyZGhhdCIpCiAgICAgICAgcmV0dXJuIGludGVydmFsICogMWUzOwogICAgICByZXR1cm4gaW50ZXJ2YWw7CiAgICB9KSgpOwogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRCbG9ja1RpbWVzdGFtcEludGVydmFsYCwKICAgICAgcGFyYW1zOiBbaW50ZXJ2YWxfXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRDb2RlLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0Q29kZShjbGllbnQsIHsgYWRkcmVzcywgYnl0ZWNvZGUgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRDb2RlYCwKICAgICAgcGFyYW1zOiBbYWRkcmVzcywgYnl0ZWNvZGVdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldENvaW5iYXNlLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0Q29pbmJhc2UoY2xpZW50LCB7IGFkZHJlc3MgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRDb2luYmFzZWAsCiAgICAgIHBhcmFtczogW2FkZHJlc3NdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldEludGVydmFsTWluaW5nLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0SW50ZXJ2YWxNaW5pbmcoY2xpZW50LCB7IGludGVydmFsIH0pIHsKICAgIGNvbnN0IGludGVydmFsXyA9ICgoKSA9PiB7CiAgICAgIGlmIChjbGllbnQubW9kZSA9PT0gImhhcmRoYXQiKQogICAgICAgIHJldHVybiBpbnRlcnZhbCAqIDFlMzsKICAgICAgcmV0dXJuIGludGVydmFsOwogICAgfSkoKTsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXZtX3NldEludGVydmFsTWluaW5nIiwKICAgICAgcGFyYW1zOiBbaW50ZXJ2YWxfXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRMb2dnaW5nRW5hYmxlZC5qcwogIGFzeW5jIGZ1bmN0aW9uIHNldExvZ2dpbmdFbmFibGVkKGNsaWVudCwgZW5hYmxlZCkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRMb2dnaW5nRW5hYmxlZGAsCiAgICAgIHBhcmFtczogW2VuYWJsZWRdCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldE1pbkdhc1ByaWNlLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNldE1pbkdhc1ByaWNlKGNsaWVudCwgeyBnYXNQcmljZSB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X3NldE1pbkdhc1ByaWNlYCwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoZ2FzUHJpY2UpXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXROZXh0QmxvY2tCYXNlRmVlUGVyR2FzLmpzCiAgaW5pdF90b0hleCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNldE5leHRCbG9ja0Jhc2VGZWVQZXJHYXMoY2xpZW50LCB7IGJhc2VGZWVQZXJHYXMgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXROZXh0QmxvY2tCYXNlRmVlUGVyR2FzYCwKICAgICAgcGFyYW1zOiBbbnVtYmVyVG9IZXgoYmFzZUZlZVBlckdhcyldCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy90ZXN0L3NldE5leHRCbG9ja1RpbWVzdGFtcC5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBzZXROZXh0QmxvY2tUaW1lc3RhbXAoY2xpZW50LCB7IHRpbWVzdGFtcCB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV2bV9zZXROZXh0QmxvY2tUaW1lc3RhbXAiLAogICAgICBwYXJhbXM6IFtudW1iZXJUb0hleCh0aW1lc3RhbXApXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXROb25jZS5qcwogIGluaXRfdG9IZXgoKTsKICBhc3luYyBmdW5jdGlvbiBzZXROb25jZShjbGllbnQsIHsgYWRkcmVzcywgbm9uY2UgfSkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXROb25jZWAsCiAgICAgIHBhcmFtczogW2FkZHJlc3MsIG51bWJlclRvSGV4KG5vbmNlKV0KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc2V0UnBjVXJsLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2V0UnBjVXJsKGNsaWVudCwganNvblJwY1VybCkgewogICAgYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6IGAke2NsaWVudC5tb2RlfV9zZXRScGNVcmxgLAogICAgICBwYXJhbXM6IFtqc29uUnBjVXJsXQogICAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvdGVzdC9zZXRTdG9yYWdlQXQuanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2V0U3RvcmFnZUF0KGNsaWVudCwgeyBhZGRyZXNzLCBpbmRleDogaW5kZXgyLCB2YWx1ZSB9KSB7CiAgICBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogYCR7Y2xpZW50Lm1vZGV9X3NldFN0b3JhZ2VBdGAsCiAgICAgIHBhcmFtczogWwogICAgICAgIGFkZHJlc3MsCiAgICAgICAgdHlwZW9mIGluZGV4MiA9PT0gIm51bWJlciIgPyBudW1iZXJUb0hleChpbmRleDIpIDogaW5kZXgyLAogICAgICAgIHZhbHVlCiAgICAgIF0KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc25hcHNob3QuanMKICBhc3luYyBmdW5jdGlvbiBzbmFwc2hvdChjbGllbnQpIHsKICAgIHJldHVybiBhd2FpdCBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogImV2bV9zbmFwc2hvdCIKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3Rlc3Qvc3RvcEltcGVyc29uYXRpbmdBY2NvdW50LmpzCiAgYXN5bmMgZnVuY3Rpb24gc3RvcEltcGVyc29uYXRpbmdBY2NvdW50KGNsaWVudCwgeyBhZGRyZXNzIH0pIHsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiBgJHtjbGllbnQubW9kZX1fc3RvcEltcGVyc29uYXRpbmdBY2NvdW50YCwKICAgICAgcGFyYW1zOiBbYWRkcmVzc10KICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2RlY29yYXRvcnMvdGVzdC5qcwogIGZ1bmN0aW9uIHRlc3RBY3Rpb25zKHsgbW9kZTogbW9kZTIgfSkgewogICAgcmV0dXJuIChjbGllbnRfKSA9PiB7CiAgICAgIGNvbnN0IGNsaWVudCA9IGNsaWVudF8uZXh0ZW5kKCgpID0+ICh7CiAgICAgICAgbW9kZTogbW9kZTIKICAgICAgfSkpOwogICAgICByZXR1cm4gewogICAgICAgIGRyb3BUcmFuc2FjdGlvbjogKGFyZ3MpID0+IGRyb3BUcmFuc2FjdGlvbihjbGllbnQsIGFyZ3MpLAogICAgICAgIGR1bXBTdGF0ZTogKCkgPT4gZHVtcFN0YXRlKGNsaWVudCksCiAgICAgICAgZ2V0QXV0b21pbmU6ICgpID0+IGdldEF1dG9taW5lKGNsaWVudCksCiAgICAgICAgZ2V0VHhwb29sQ29udGVudDogKCkgPT4gZ2V0VHhwb29sQ29udGVudChjbGllbnQpLAogICAgICAgIGdldFR4cG9vbFN0YXR1czogKCkgPT4gZ2V0VHhwb29sU3RhdHVzKGNsaWVudCksCiAgICAgICAgaW1wZXJzb25hdGVBY2NvdW50OiAoYXJncykgPT4gaW1wZXJzb25hdGVBY2NvdW50KGNsaWVudCwgYXJncyksCiAgICAgICAgaW5jcmVhc2VUaW1lOiAoYXJncykgPT4gaW5jcmVhc2VUaW1lKGNsaWVudCwgYXJncyksCiAgICAgICAgaW5zcGVjdFR4cG9vbDogKCkgPT4gaW5zcGVjdFR4cG9vbChjbGllbnQpLAogICAgICAgIGxvYWRTdGF0ZTogKGFyZ3MpID0+IGxvYWRTdGF0ZShjbGllbnQsIGFyZ3MpLAogICAgICAgIG1pbmU6IChhcmdzKSA9PiBtaW5lKGNsaWVudCwgYXJncyksCiAgICAgICAgcmVtb3ZlQmxvY2tUaW1lc3RhbXBJbnRlcnZhbDogKCkgPT4gcmVtb3ZlQmxvY2tUaW1lc3RhbXBJbnRlcnZhbChjbGllbnQpLAogICAgICAgIHJlc2V0OiAoYXJncykgPT4gcmVzZXQoY2xpZW50LCBhcmdzKSwKICAgICAgICByZXZlcnQ6IChhcmdzKSA9PiByZXZlcnQoY2xpZW50LCBhcmdzKSwKICAgICAgICBzZW5kVW5zaWduZWRUcmFuc2FjdGlvbjogKGFyZ3MpID0+IHNlbmRVbnNpZ25lZFRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0QXV0b21pbmU6IChhcmdzKSA9PiBzZXRBdXRvbWluZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldEJhbGFuY2U6IChhcmdzKSA9PiBzZXRCYWxhbmNlKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0QmxvY2tHYXNMaW1pdDogKGFyZ3MpID0+IHNldEJsb2NrR2FzTGltaXQoY2xpZW50LCBhcmdzKSwKICAgICAgICBzZXRCbG9ja1RpbWVzdGFtcEludGVydmFsOiAoYXJncykgPT4gc2V0QmxvY2tUaW1lc3RhbXBJbnRlcnZhbChjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldENvZGU6IChhcmdzKSA9PiBzZXRDb2RlKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0Q29pbmJhc2U6IChhcmdzKSA9PiBzZXRDb2luYmFzZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldEludGVydmFsTWluaW5nOiAoYXJncykgPT4gc2V0SW50ZXJ2YWxNaW5pbmcoY2xpZW50LCBhcmdzKSwKICAgICAgICBzZXRMb2dnaW5nRW5hYmxlZDogKGFyZ3MpID0+IHNldExvZ2dpbmdFbmFibGVkKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0TWluR2FzUHJpY2U6IChhcmdzKSA9PiBzZXRNaW5HYXNQcmljZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldE5leHRCbG9ja0Jhc2VGZWVQZXJHYXM6IChhcmdzKSA9PiBzZXROZXh0QmxvY2tCYXNlRmVlUGVyR2FzKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0TmV4dEJsb2NrVGltZXN0YW1wOiAoYXJncykgPT4gc2V0TmV4dEJsb2NrVGltZXN0YW1wKGNsaWVudCwgYXJncyksCiAgICAgICAgc2V0Tm9uY2U6IChhcmdzKSA9PiBzZXROb25jZShjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldFJwY1VybDogKGFyZ3MpID0+IHNldFJwY1VybChjbGllbnQsIGFyZ3MpLAogICAgICAgIHNldFN0b3JhZ2VBdDogKGFyZ3MpID0+IHNldFN0b3JhZ2VBdChjbGllbnQsIGFyZ3MpLAogICAgICAgIHNuYXBzaG90OiAoKSA9PiBzbmFwc2hvdChjbGllbnQpLAogICAgICAgIHN0b3BJbXBlcnNvbmF0aW5nQWNjb3VudDogKGFyZ3MpID0+IHN0b3BJbXBlcnNvbmF0aW5nQWNjb3VudChjbGllbnQsIGFyZ3MpCiAgICAgIH07CiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2NyZWF0ZVRlc3RDbGllbnQuanMKICBmdW5jdGlvbiBjcmVhdGVUZXN0Q2xpZW50KHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsga2V5ID0gInRlc3QiLCBuYW1lID0gIlRlc3QgQ2xpZW50IiwgbW9kZTogbW9kZTIgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQoewogICAgICAuLi5wYXJhbWV0ZXJzLAogICAgICBrZXksCiAgICAgIG5hbWUsCiAgICAgIHR5cGU6ICJ0ZXN0Q2xpZW50IgogICAgfSk7CiAgICByZXR1cm4gY2xpZW50LmV4dGVuZCgoY29uZmlnKSA9PiAoewogICAgICBtb2RlOiBtb2RlMiwKICAgICAgLi4udGVzdEFjdGlvbnMoeyBtb2RlOiBtb2RlMiB9KShjb25maWcpCiAgICB9KSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L2RlcGxveUNvbnRyYWN0LmpzCiAgaW5pdF9lbmNvZGVEZXBsb3lEYXRhKCk7CiAgZnVuY3Rpb24gZGVwbG95Q29udHJhY3Qod2FsbGV0Q2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYXJncywgYnl0ZWNvZGUsIC4uLnJlcXVlc3QgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBjYWxsZGF0YSA9IGVuY29kZURlcGxveURhdGEoeyBhYmk6IGFiaTIsIGFyZ3MsIGJ5dGVjb2RlIH0pOwogICAgcmV0dXJuIHNlbmRUcmFuc2FjdGlvbih3YWxsZXRDbGllbnQsIHsKICAgICAgLi4ucmVxdWVzdCwKICAgICAgZGF0YTogY2FsbGRhdGEKICAgIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC9nZXRBZGRyZXNzZXMuanMKICBpbml0X2dldEFkZHJlc3MoKTsKICBhc3luYyBmdW5jdGlvbiBnZXRBZGRyZXNzZXMoY2xpZW50KSB7CiAgICBpZiAoY2xpZW50LmFjY291bnQ/LnR5cGUgPT09ICJsb2NhbCIpCiAgICAgIHJldHVybiBbY2xpZW50LmFjY291bnQuYWRkcmVzc107CiAgICBjb25zdCBhZGRyZXNzZXMgPSBhd2FpdCBjbGllbnQucmVxdWVzdCh7IG1ldGhvZDogImV0aF9hY2NvdW50cyIgfSwgeyBkZWR1cGU6IHRydWUgfSk7CiAgICByZXR1cm4gYWRkcmVzc2VzLm1hcCgoYWRkcmVzcykgPT4gY2hlY2tzdW1BZGRyZXNzKGFkZHJlc3MpKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvZ2V0UGVybWlzc2lvbnMuanMKICBhc3luYyBmdW5jdGlvbiBnZXRQZXJtaXNzaW9ucyhjbGllbnQpIHsKICAgIGNvbnN0IHBlcm1pc3Npb25zID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoeyBtZXRob2Q6ICJ3YWxsZXRfZ2V0UGVybWlzc2lvbnMiIH0sIHsgZGVkdXBlOiB0cnVlIH0pOwogICAgcmV0dXJuIHBlcm1pc3Npb25zOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC9yZXF1ZXN0QWRkcmVzc2VzLmpzCiAgaW5pdF9nZXRBZGRyZXNzKCk7CiAgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdEFkZHJlc3NlcyhjbGllbnQpIHsKICAgIGNvbnN0IGFkZHJlc3NlcyA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsgbWV0aG9kOiAiZXRoX3JlcXVlc3RBY2NvdW50cyIgfSwgeyBkZWR1cGU6IHRydWUsIHJldHJ5Q291bnQ6IDAgfSk7CiAgICByZXR1cm4gYWRkcmVzc2VzLm1hcCgoYWRkcmVzcykgPT4gZ2V0QWRkcmVzcyhhZGRyZXNzKSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3JlcXVlc3RQZXJtaXNzaW9ucy5qcwogIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RQZXJtaXNzaW9ucyhjbGllbnQsIHBlcm1pc3Npb25zKSB7CiAgICByZXR1cm4gY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ3YWxsZXRfcmVxdWVzdFBlcm1pc3Npb25zIiwKICAgICAgcGFyYW1zOiBbcGVybWlzc2lvbnNdCiAgICB9LCB7IHJldHJ5Q291bnQ6IDAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NpZ25NZXNzYWdlLmpzCiAgaW5pdF9wYXJzZUFjY291bnQoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2lnbk1lc3NhZ2UoY2xpZW50LCB7IGFjY291bnQ6IGFjY291bnRfID0gY2xpZW50LmFjY291bnQsIG1lc3NhZ2UgfSkgewogICAgaWYgKCFhY2NvdW50XykKICAgICAgdGhyb3cgbmV3IEFjY291bnROb3RGb3VuZEVycm9yKHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2FjdGlvbnMvd2FsbGV0L3NpZ25NZXNzYWdlIgogICAgICB9KTsKICAgIGNvbnN0IGFjY291bnQgPSBwYXJzZUFjY291bnQoYWNjb3VudF8pOwogICAgaWYgKGFjY291bnQuc2lnbk1lc3NhZ2UpCiAgICAgIHJldHVybiBhY2NvdW50LnNpZ25NZXNzYWdlKHsgbWVzc2FnZSB9KTsKICAgIGNvbnN0IG1lc3NhZ2VfID0gKCgpID0+IHsKICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gc3RyaW5nVG9IZXgobWVzc2FnZSk7CiAgICAgIGlmIChtZXNzYWdlLnJhdyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpCiAgICAgICAgcmV0dXJuIHRvSGV4KG1lc3NhZ2UucmF3KTsKICAgICAgcmV0dXJuIG1lc3NhZ2UucmF3OwogICAgfSkoKTsKICAgIHJldHVybiBjbGllbnQucmVxdWVzdCh7CiAgICAgIG1ldGhvZDogInBlcnNvbmFsX3NpZ24iLAogICAgICBwYXJhbXM6IFttZXNzYWdlXywgYWNjb3VudC5hZGRyZXNzXQogICAgfSwgeyByZXRyeUNvdW50OiAwIH0pOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY3Rpb25zL3dhbGxldC9zaWduVHJhbnNhY3Rpb24uanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X3RyYW5zYWN0aW9uUmVxdWVzdCgpOwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNpZ25UcmFuc2FjdGlvbihjbGllbnQsIHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudF8gPSBjbGllbnQuYWNjb3VudCwgY2hhaW4gPSBjbGllbnQuY2hhaW4sIC4uLnRyYW5zYWN0aW9uIH0gPSBwYXJhbWV0ZXJzOwogICAgaWYgKCFhY2NvdW50XykKICAgICAgdGhyb3cgbmV3IEFjY291bnROb3RGb3VuZEVycm9yKHsKICAgICAgICBkb2NzUGF0aDogIi9kb2NzL2FjdGlvbnMvd2FsbGV0L3NpZ25UcmFuc2FjdGlvbiIKICAgICAgfSk7CiAgICBjb25zdCBhY2NvdW50ID0gcGFyc2VBY2NvdW50KGFjY291bnRfKTsKICAgIGFzc2VydFJlcXVlc3QoewogICAgICBhY2NvdW50LAogICAgICAuLi5wYXJhbWV0ZXJzCiAgICB9KTsKICAgIGNvbnN0IGNoYWluSWQgPSBhd2FpdCBnZXRBY3Rpb24oY2xpZW50LCBnZXRDaGFpbklkLCAiZ2V0Q2hhaW5JZCIpKHt9KTsKICAgIGlmIChjaGFpbiAhPT0gbnVsbCkKICAgICAgYXNzZXJ0Q3VycmVudENoYWluKHsKICAgICAgICBjdXJyZW50Q2hhaW5JZDogY2hhaW5JZCwKICAgICAgICBjaGFpbgogICAgICB9KTsKICAgIGNvbnN0IGZvcm1hdHRlcnM0ID0gY2hhaW4/LmZvcm1hdHRlcnMgfHwgY2xpZW50LmNoYWluPy5mb3JtYXR0ZXJzOwogICAgY29uc3QgZm9ybWF0ID0gZm9ybWF0dGVyczQ/LnRyYW5zYWN0aW9uUmVxdWVzdD8uZm9ybWF0IHx8IGZvcm1hdFRyYW5zYWN0aW9uUmVxdWVzdDsKICAgIGlmIChhY2NvdW50LnNpZ25UcmFuc2FjdGlvbikKICAgICAgcmV0dXJuIGFjY291bnQuc2lnblRyYW5zYWN0aW9uKHsKICAgICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgICBjaGFpbklkCiAgICAgIH0sIHsgc2VyaWFsaXplcjogY2xpZW50LmNoYWluPy5zZXJpYWxpemVycz8udHJhbnNhY3Rpb24gfSk7CiAgICByZXR1cm4gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfc2lnblRyYW5zYWN0aW9uIiwKICAgICAgcGFyYW1zOiBbCiAgICAgICAgewogICAgICAgICAgLi4uZm9ybWF0KHRyYW5zYWN0aW9uKSwKICAgICAgICAgIGNoYWluSWQ6IG51bWJlclRvSGV4KGNoYWluSWQpLAogICAgICAgICAgZnJvbTogYWNjb3VudC5hZGRyZXNzCiAgICAgICAgfQogICAgICBdCiAgICB9LCB7IHJldHJ5Q291bnQ6IDAgfSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2FjdGlvbnMvd2FsbGV0L3NpZ25UeXBlZERhdGEuanMKICBpbml0X3BhcnNlQWNjb3VudCgpOwogIGFzeW5jIGZ1bmN0aW9uIHNpZ25UeXBlZERhdGEoY2xpZW50LCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFjY291bnQ6IGFjY291bnRfID0gY2xpZW50LmFjY291bnQsIGRvbWFpbiwgbWVzc2FnZSwgcHJpbWFyeVR5cGUgfSA9IHBhcmFtZXRlcnM7CiAgICBpZiAoIWFjY291bnRfKQogICAgICB0aHJvdyBuZXcgQWNjb3VudE5vdEZvdW5kRXJyb3IoewogICAgICAgIGRvY3NQYXRoOiAiL2RvY3MvYWN0aW9ucy93YWxsZXQvc2lnblR5cGVkRGF0YSIKICAgICAgfSk7CiAgICBjb25zdCBhY2NvdW50ID0gcGFyc2VBY2NvdW50KGFjY291bnRfKTsKICAgIGNvbnN0IHR5cGVzID0gewogICAgICBFSVA3MTJEb21haW46IGdldFR5cGVzRm9yRUlQNzEyRG9tYWluKHsgZG9tYWluIH0pLAogICAgICAuLi5wYXJhbWV0ZXJzLnR5cGVzCiAgICB9OwogICAgdmFsaWRhdGVUeXBlZERhdGEoeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9KTsKICAgIGlmIChhY2NvdW50LnNpZ25UeXBlZERhdGEpCiAgICAgIHJldHVybiBhY2NvdW50LnNpZ25UeXBlZERhdGEoeyBkb21haW4sIG1lc3NhZ2UsIHByaW1hcnlUeXBlLCB0eXBlcyB9KTsKICAgIGNvbnN0IHR5cGVkRGF0YSA9IHNlcmlhbGl6ZVR5cGVkRGF0YSh7IGRvbWFpbiwgbWVzc2FnZSwgcHJpbWFyeVR5cGUsIHR5cGVzIH0pOwogICAgcmV0dXJuIGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAiZXRoX3NpZ25UeXBlZERhdGFfdjQiLAogICAgICBwYXJhbXM6IFthY2NvdW50LmFkZHJlc3MsIHR5cGVkRGF0YV0KICAgIH0sIHsgcmV0cnlDb3VudDogMCB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvc3dpdGNoQ2hhaW4uanMKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc3dpdGNoQ2hhaW4oY2xpZW50LCB7IGlkIH0pIHsKICAgIGF3YWl0IGNsaWVudC5yZXF1ZXN0KHsKICAgICAgbWV0aG9kOiAid2FsbGV0X3N3aXRjaEV0aGVyZXVtQ2hhaW4iLAogICAgICBwYXJhbXM6IFsKICAgICAgICB7CiAgICAgICAgICBjaGFpbklkOiBudW1iZXJUb0hleChpZCkKICAgICAgICB9CiAgICAgIF0KICAgIH0sIHsgcmV0cnlDb3VudDogMCB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWN0aW9ucy93YWxsZXQvd2F0Y2hBc3NldC5qcwogIGFzeW5jIGZ1bmN0aW9uIHdhdGNoQXNzZXQoY2xpZW50LCBwYXJhbXMpIHsKICAgIGNvbnN0IGFkZGVkID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJ3YWxsZXRfd2F0Y2hBc3NldCIsCiAgICAgIHBhcmFtcwogICAgfSwgeyByZXRyeUNvdW50OiAwIH0pOwogICAgcmV0dXJuIGFkZGVkOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL2RlY29yYXRvcnMvd2FsbGV0LmpzCiAgZnVuY3Rpb24gd2FsbGV0QWN0aW9ucyhjbGllbnQpIHsKICAgIHJldHVybiB7CiAgICAgIGFkZENoYWluOiAoYXJncykgPT4gYWRkQ2hhaW4oY2xpZW50LCBhcmdzKSwKICAgICAgZGVwbG95Q29udHJhY3Q6IChhcmdzKSA9PiBkZXBsb3lDb250cmFjdChjbGllbnQsIGFyZ3MpLAogICAgICBnZXRBZGRyZXNzZXM6ICgpID0+IGdldEFkZHJlc3NlcyhjbGllbnQpLAogICAgICBnZXRDaGFpbklkOiAoKSA9PiBnZXRDaGFpbklkKGNsaWVudCksCiAgICAgIGdldFBlcm1pc3Npb25zOiAoKSA9PiBnZXRQZXJtaXNzaW9ucyhjbGllbnQpLAogICAgICBwcmVwYXJlVHJhbnNhY3Rpb25SZXF1ZXN0OiAoYXJncykgPT4gcHJlcGFyZVRyYW5zYWN0aW9uUmVxdWVzdChjbGllbnQsIGFyZ3MpLAogICAgICByZXF1ZXN0QWRkcmVzc2VzOiAoKSA9PiByZXF1ZXN0QWRkcmVzc2VzKGNsaWVudCksCiAgICAgIHJlcXVlc3RQZXJtaXNzaW9uczogKGFyZ3MpID0+IHJlcXVlc3RQZXJtaXNzaW9ucyhjbGllbnQsIGFyZ3MpLAogICAgICBzZW5kUmF3VHJhbnNhY3Rpb246IChhcmdzKSA9PiBzZW5kUmF3VHJhbnNhY3Rpb24oY2xpZW50LCBhcmdzKSwKICAgICAgc2VuZFRyYW5zYWN0aW9uOiAoYXJncykgPT4gc2VuZFRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgIHNpZ25NZXNzYWdlOiAoYXJncykgPT4gc2lnbk1lc3NhZ2UoY2xpZW50LCBhcmdzKSwKICAgICAgc2lnblRyYW5zYWN0aW9uOiAoYXJncykgPT4gc2lnblRyYW5zYWN0aW9uKGNsaWVudCwgYXJncyksCiAgICAgIHNpZ25UeXBlZERhdGE6IChhcmdzKSA9PiBzaWduVHlwZWREYXRhKGNsaWVudCwgYXJncyksCiAgICAgIHN3aXRjaENoYWluOiAoYXJncykgPT4gc3dpdGNoQ2hhaW4oY2xpZW50LCBhcmdzKSwKICAgICAgd2F0Y2hBc3NldDogKGFyZ3MpID0+IHdhdGNoQXNzZXQoY2xpZW50LCBhcmdzKSwKICAgICAgd3JpdGVDb250cmFjdDogKGFyZ3MpID0+IHdyaXRlQ29udHJhY3QoY2xpZW50LCBhcmdzKQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2xpZW50cy9jcmVhdGVXYWxsZXRDbGllbnQuanMKICBmdW5jdGlvbiBjcmVhdGVXYWxsZXRDbGllbnQocGFyYW1ldGVycykgewogICAgY29uc3QgeyBrZXkgPSAid2FsbGV0IiwgbmFtZSA9ICJXYWxsZXQgQ2xpZW50IiwgdHJhbnNwb3J0IH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQ2xpZW50KHsKICAgICAgLi4ucGFyYW1ldGVycywKICAgICAga2V5LAogICAgICBuYW1lLAogICAgICB0cmFuc3BvcnQsCiAgICAgIHR5cGU6ICJ3YWxsZXRDbGllbnQiCiAgICB9KTsKICAgIHJldHVybiBjbGllbnQuZXh0ZW5kKHdhbGxldEFjdGlvbnMpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jbGllbnRzL3RyYW5zcG9ydHMvd2ViU29ja2V0LmpzCiAgaW5pdF9yZXF1ZXN0KCk7CiAgZnVuY3Rpb24gd2ViU29ja2V0KHVybCwgY29uZmlnID0ge30pIHsKICAgIGNvbnN0IHsga2VlcEFsaXZlLCBrZXkgPSAid2ViU29ja2V0IiwgbmFtZSA9ICJXZWJTb2NrZXQgSlNPTi1SUEMiLCByZWNvbm5lY3QsIHJldHJ5RGVsYXkgfSA9IGNvbmZpZzsKICAgIHJldHVybiAoeyBjaGFpbiwgcmV0cnlDb3VudDogcmV0cnlDb3VudF8sIHRpbWVvdXQ6IHRpbWVvdXRfIH0pID0+IHsKICAgICAgY29uc3QgcmV0cnlDb3VudCA9IGNvbmZpZy5yZXRyeUNvdW50ID8/IHJldHJ5Q291bnRfOwogICAgICBjb25zdCB0aW1lb3V0ID0gdGltZW91dF8gPz8gY29uZmlnLnRpbWVvdXQgPz8gMWU0OwogICAgICBjb25zdCB1cmxfID0gdXJsIHx8IGNoYWluPy5ycGNVcmxzLmRlZmF1bHQud2ViU29ja2V0Py5bMF07CiAgICAgIGlmICghdXJsXykKICAgICAgICB0aHJvdyBuZXcgVXJsUmVxdWlyZWRFcnJvcigpOwogICAgICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KHsKICAgICAgICBrZXksCiAgICAgICAgbmFtZSwKICAgICAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICAgICAgY29uc3QgYm9keSA9IHsgbWV0aG9kLCBwYXJhbXMgfTsKICAgICAgICAgIGNvbnN0IHJwY0NsaWVudCA9IGF3YWl0IGdldFdlYlNvY2tldFJwY0NsaWVudCh1cmxfLCB7CiAgICAgICAgICAgIGtlZXBBbGl2ZSwKICAgICAgICAgICAgcmVjb25uZWN0CiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IHsgZXJyb3IsIHJlc3VsdCB9ID0gYXdhaXQgcnBjQ2xpZW50LnJlcXVlc3RBc3luYyh7CiAgICAgICAgICAgIGJvZHksCiAgICAgICAgICAgIHRpbWVvdXQKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGVycm9yKQogICAgICAgICAgICB0aHJvdyBuZXcgUnBjUmVxdWVzdEVycm9yKHsKICAgICAgICAgICAgICBib2R5LAogICAgICAgICAgICAgIGVycm9yLAogICAgICAgICAgICAgIHVybDogdXJsXwogICAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfSwKICAgICAgICByZXRyeUNvdW50LAogICAgICAgIHJldHJ5RGVsYXksCiAgICAgICAgdGltZW91dCwKICAgICAgICB0eXBlOiAid2ViU29ja2V0IgogICAgICB9LCB7CiAgICAgICAgZ2V0U29ja2V0KCkgewogICAgICAgICAgcmV0dXJuIGdldFNvY2tldCh1cmxfKTsKICAgICAgICB9LAogICAgICAgIGdldFJwY0NsaWVudCgpIHsKICAgICAgICAgIHJldHVybiBnZXRXZWJTb2NrZXRScGNDbGllbnQodXJsXyk7CiAgICAgICAgfSwKICAgICAgICBhc3luYyBzdWJzY3JpYmUoeyBwYXJhbXMsIG9uRGF0YSwgb25FcnJvciB9KSB7CiAgICAgICAgICBjb25zdCBycGNDbGllbnQgPSBhd2FpdCBnZXRXZWJTb2NrZXRScGNDbGllbnQodXJsXyk7CiAgICAgICAgICBjb25zdCB7IHJlc3VsdDogc3Vic2NyaXB0aW9uSWQgfSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHJwY0NsaWVudC5yZXF1ZXN0KHsKICAgICAgICAgICAgYm9keTogewogICAgICAgICAgICAgIG1ldGhvZDogImV0aF9zdWJzY3JpYmUiLAogICAgICAgICAgICAgIHBhcmFtcwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbkVycm9yKGVycm9yKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTsKICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25SZXNwb25zZShyZXNwb25zZSkgewogICAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikgewogICAgICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlLmVycm9yKTsKICAgICAgICAgICAgICAgIG9uRXJyb3I/LihyZXNwb25zZS5lcnJvcik7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UuaWQgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLm1ldGhvZCAhPT0gImV0aF9zdWJzY3JpcHRpb24iKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIG9uRGF0YShyZXNwb25zZS5wYXJhbXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KSk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBzdWJzY3JpcHRpb25JZCwKICAgICAgICAgICAgYXN5bmMgdW5zdWJzY3JpYmUoKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBycGNDbGllbnQucmVxdWVzdCh7CiAgICAgICAgICAgICAgICBib2R5OiB7CiAgICAgICAgICAgICAgICAgIG1ldGhvZDogImV0aF91bnN1YnNjcmliZSIsCiAgICAgICAgICAgICAgICAgIHBhcmFtczogW3N1YnNjcmlwdGlvbklkXQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIG9uUmVzcG9uc2U6IHJlc29sdmUKICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9KTsKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2luZGV4LmpzCiAgaW5pdF9hYmlzKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL2FkZHJlc3MuanMKICB2YXIgemVyb0FkZHJlc3MgPSAiMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9pbmRleC5qcwogIGluaXRfY29udHJhY3RzKCk7CiAgaW5pdF91bml0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY29uc3RhbnRzL251bWJlci5qcwogIHZhciBtYXhJbnQ4ID0gMm4gKiogKDhuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDE2ID0gMm4gKiogKDE2biAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQyNCA9IDJuICoqICgyNG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MzIgPSAybiAqKiAoMzJuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDQwID0gMm4gKiogKDQwbiAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQ0OCA9IDJuICoqICg0OG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50NTYgPSAybiAqKiAoNTZuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDY0ID0gMm4gKiogKDY0biAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQ3MiA9IDJuICoqICg3Mm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50ODAgPSAybiAqKiAoODBuIC0gMW4pIC0gMW47CiAgdmFyIG1heEludDg4ID0gMm4gKiogKDg4biAtIDFuKSAtIDFuOwogIHZhciBtYXhJbnQ5NiA9IDJuICoqICg5Nm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTA0ID0gMm4gKiogKDEwNG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTEyID0gMm4gKiogKDExMm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTIwID0gMm4gKiogKDEyMG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTI4ID0gMm4gKiogKDEyOG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTM2ID0gMm4gKiogKDEzNm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTQ0ID0gMm4gKiogKDE0NG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTUyID0gMm4gKiogKDE1Mm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTYwID0gMm4gKiogKDE2MG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTY4ID0gMm4gKiogKDE2OG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTc2ID0gMm4gKiogKDE3Nm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTg0ID0gMm4gKiogKDE4NG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MTkyID0gMm4gKiogKDE5Mm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjAwID0gMm4gKiogKDIwMG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjA4ID0gMm4gKiogKDIwOG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjE2ID0gMm4gKiogKDIxNm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjI0ID0gMm4gKiogKDIyNG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjMyID0gMm4gKiogKDIzMm4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjQwID0gMm4gKiogKDI0MG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjQ4ID0gMm4gKiogKDI0OG4gLSAxbikgLSAxbjsKICB2YXIgbWF4SW50MjU2ID0gMm4gKiogKDI1Nm4gLSAxbikgLSAxbjsKICB2YXIgbWluSW50OCA9IC0oMm4gKiogKDhuIC0gMW4pKTsKICB2YXIgbWluSW50MTYgPSAtKDJuICoqICgxNm4gLSAxbikpOwogIHZhciBtaW5JbnQyNCA9IC0oMm4gKiogKDI0biAtIDFuKSk7CiAgdmFyIG1pbkludDMyID0gLSgybiAqKiAoMzJuIC0gMW4pKTsKICB2YXIgbWluSW50NDAgPSAtKDJuICoqICg0MG4gLSAxbikpOwogIHZhciBtaW5JbnQ0OCA9IC0oMm4gKiogKDQ4biAtIDFuKSk7CiAgdmFyIG1pbkludDU2ID0gLSgybiAqKiAoNTZuIC0gMW4pKTsKICB2YXIgbWluSW50NjQgPSAtKDJuICoqICg2NG4gLSAxbikpOwogIHZhciBtaW5JbnQ3MiA9IC0oMm4gKiogKDcybiAtIDFuKSk7CiAgdmFyIG1pbkludDgwID0gLSgybiAqKiAoODBuIC0gMW4pKTsKICB2YXIgbWluSW50ODggPSAtKDJuICoqICg4OG4gLSAxbikpOwogIHZhciBtaW5JbnQ5NiA9IC0oMm4gKiogKDk2biAtIDFuKSk7CiAgdmFyIG1pbkludDEwNCA9IC0oMm4gKiogKDEwNG4gLSAxbikpOwogIHZhciBtaW5JbnQxMTIgPSAtKDJuICoqICgxMTJuIC0gMW4pKTsKICB2YXIgbWluSW50MTIwID0gLSgybiAqKiAoMTIwbiAtIDFuKSk7CiAgdmFyIG1pbkludDEyOCA9IC0oMm4gKiogKDEyOG4gLSAxbikpOwogIHZhciBtaW5JbnQxMzYgPSAtKDJuICoqICgxMzZuIC0gMW4pKTsKICB2YXIgbWluSW50MTQ0ID0gLSgybiAqKiAoMTQ0biAtIDFuKSk7CiAgdmFyIG1pbkludDE1MiA9IC0oMm4gKiogKDE1Mm4gLSAxbikpOwogIHZhciBtaW5JbnQxNjAgPSAtKDJuICoqICgxNjBuIC0gMW4pKTsKICB2YXIgbWluSW50MTY4ID0gLSgybiAqKiAoMTY4biAtIDFuKSk7CiAgdmFyIG1pbkludDE3NiA9IC0oMm4gKiogKDE3Nm4gLSAxbikpOwogIHZhciBtaW5JbnQxODQgPSAtKDJuICoqICgxODRuIC0gMW4pKTsKICB2YXIgbWluSW50MTkyID0gLSgybiAqKiAoMTkybiAtIDFuKSk7CiAgdmFyIG1pbkludDIwMCA9IC0oMm4gKiogKDIwMG4gLSAxbikpOwogIHZhciBtaW5JbnQyMDggPSAtKDJuICoqICgyMDhuIC0gMW4pKTsKICB2YXIgbWluSW50MjE2ID0gLSgybiAqKiAoMjE2biAtIDFuKSk7CiAgdmFyIG1pbkludDIyNCA9IC0oMm4gKiogKDIyNG4gLSAxbikpOwogIHZhciBtaW5JbnQyMzIgPSAtKDJuICoqICgyMzJuIC0gMW4pKTsKICB2YXIgbWluSW50MjQwID0gLSgybiAqKiAoMjQwbiAtIDFuKSk7CiAgdmFyIG1pbkludDI0OCA9IC0oMm4gKiogKDI0OG4gLSAxbikpOwogIHZhciBtaW5JbnQyNTYgPSAtKDJuICoqICgyNTZuIC0gMW4pKTsKICB2YXIgbWF4VWludDggPSAybiAqKiA4biAtIDFuOwogIHZhciBtYXhVaW50MTYgPSAybiAqKiAxNm4gLSAxbjsKICB2YXIgbWF4VWludDI0ID0gMm4gKiogMjRuIC0gMW47CiAgdmFyIG1heFVpbnQzMiA9IDJuICoqIDMybiAtIDFuOwogIHZhciBtYXhVaW50NDAgPSAybiAqKiA0MG4gLSAxbjsKICB2YXIgbWF4VWludDQ4ID0gMm4gKiogNDhuIC0gMW47CiAgdmFyIG1heFVpbnQ1NiA9IDJuICoqIDU2biAtIDFuOwogIHZhciBtYXhVaW50NjQgPSAybiAqKiA2NG4gLSAxbjsKICB2YXIgbWF4VWludDcyID0gMm4gKiogNzJuIC0gMW47CiAgdmFyIG1heFVpbnQ4MCA9IDJuICoqIDgwbiAtIDFuOwogIHZhciBtYXhVaW50ODggPSAybiAqKiA4OG4gLSAxbjsKICB2YXIgbWF4VWludDk2ID0gMm4gKiogOTZuIC0gMW47CiAgdmFyIG1heFVpbnQxMDQgPSAybiAqKiAxMDRuIC0gMW47CiAgdmFyIG1heFVpbnQxMTIgPSAybiAqKiAxMTJuIC0gMW47CiAgdmFyIG1heFVpbnQxMjAgPSAybiAqKiAxMjBuIC0gMW47CiAgdmFyIG1heFVpbnQxMjggPSAybiAqKiAxMjhuIC0gMW47CiAgdmFyIG1heFVpbnQxMzYgPSAybiAqKiAxMzZuIC0gMW47CiAgdmFyIG1heFVpbnQxNDQgPSAybiAqKiAxNDRuIC0gMW47CiAgdmFyIG1heFVpbnQxNTIgPSAybiAqKiAxNTJuIC0gMW47CiAgdmFyIG1heFVpbnQxNjAgPSAybiAqKiAxNjBuIC0gMW47CiAgdmFyIG1heFVpbnQxNjggPSAybiAqKiAxNjhuIC0gMW47CiAgdmFyIG1heFVpbnQxNzYgPSAybiAqKiAxNzZuIC0gMW47CiAgdmFyIG1heFVpbnQxODQgPSAybiAqKiAxODRuIC0gMW47CiAgdmFyIG1heFVpbnQxOTIgPSAybiAqKiAxOTJuIC0gMW47CiAgdmFyIG1heFVpbnQyMDAgPSAybiAqKiAyMDBuIC0gMW47CiAgdmFyIG1heFVpbnQyMDggPSAybiAqKiAyMDhuIC0gMW47CiAgdmFyIG1heFVpbnQyMTYgPSAybiAqKiAyMTZuIC0gMW47CiAgdmFyIG1heFVpbnQyMjQgPSAybiAqKiAyMjRuIC0gMW47CiAgdmFyIG1heFVpbnQyMzIgPSAybiAqKiAyMzJuIC0gMW47CiAgdmFyIG1heFVpbnQyNDAgPSAybiAqKiAyNDBuIC0gMW47CiAgdmFyIG1heFVpbnQyNDggPSAybiAqKiAyNDhuIC0gMW47CiAgdmFyIG1heFVpbnQyNTYgPSAybiAqKiAyNTZuIC0gMW47CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vaW5kZXguanMKICBpbml0X2FiaSgpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY29udHJhY3QoKTsKICBpbml0X3JwYygpOwogIGluaXRfY2hhaW4oKTsKICBpbml0X2VuY29kaW5nKCk7CiAgaW5pdF9ub2RlKCk7CiAgaW5pdF9yZXF1ZXN0KCk7CiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF90cmFuc2FjdGlvbigpOwogIGluaXRfZGF0YSgpOwogIGluaXRfc3RhdGVPdmVycmlkZSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3R5cGVzL2VpcDExOTMuanMKICB2YXIgUHJvdmlkZXJScGNFcnJvcjIgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICAgIGNvbnN0cnVjdG9yKGNvZGUsIG1lc3NhZ2UpIHsKICAgICAgc3VwZXIobWVzc2FnZSk7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY29kZSIsIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICB2YWx1ZTogdm9pZCAwCiAgICAgIH0pOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRldGFpbHMiLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6IHZvaWQgMAogICAgICB9KTsKICAgICAgdGhpcy5jb2RlID0gY29kZTsKICAgICAgdGhpcy5kZXRhaWxzID0gbWVzc2FnZTsKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2luZGV4LmpzCiAgaW5pdF9kZWNvZGVBYmlQYXJhbWV0ZXJzKCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYWJpL2RlY29kZURlcGxveURhdGEuanMKICBpbml0X2FiaSgpOwogIGluaXRfZGVjb2RlQWJpUGFyYW1ldGVycygpOwogIHZhciBkb2NzUGF0aDggPSAiL2RvY3MvY29udHJhY3QvZGVjb2RlRGVwbG95RGF0YSI7CiAgZnVuY3Rpb24gZGVjb2RlRGVwbG95RGF0YShwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGFiaTogYWJpMiwgYnl0ZWNvZGUsIGRhdGEgfSA9IHBhcmFtZXRlcnM7CiAgICBpZiAoZGF0YSA9PT0gYnl0ZWNvZGUpCiAgICAgIHJldHVybiB7IGJ5dGVjb2RlIH07CiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGFiaTIuZmluZCgoeCkgPT4gInR5cGUiIGluIHggJiYgeC50eXBlID09PSAiY29uc3RydWN0b3IiKTsKICAgIGlmICghZGVzY3JpcHRpb24pCiAgICAgIHRocm93IG5ldyBBYmlDb25zdHJ1Y3Rvck5vdEZvdW5kRXJyb3IoeyBkb2NzUGF0aDogZG9jc1BhdGg4IH0pOwogICAgaWYgKCEoImlucHV0cyIgaW4gZGVzY3JpcHRpb24pKQogICAgICB0aHJvdyBuZXcgQWJpQ29uc3RydWN0b3JQYXJhbXNOb3RGb3VuZEVycm9yKHsgZG9jc1BhdGg6IGRvY3NQYXRoOCB9KTsKICAgIGlmICghZGVzY3JpcHRpb24uaW5wdXRzIHx8IGRlc2NyaXB0aW9uLmlucHV0cy5sZW5ndGggPT09IDApCiAgICAgIHRocm93IG5ldyBBYmlDb25zdHJ1Y3RvclBhcmFtc05vdEZvdW5kRXJyb3IoeyBkb2NzUGF0aDogZG9jc1BhdGg4IH0pOwogICAgY29uc3QgYXJncyA9IGRlY29kZUFiaVBhcmFtZXRlcnMoZGVzY3JpcHRpb24uaW5wdXRzLCBgMHgke2RhdGEucmVwbGFjZShieXRlY29kZSwgIiIpfWApOwogICAgcmV0dXJuIHsgYXJncywgYnl0ZWNvZGUgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vaW5kZXguanMKICBpbml0X2RlY29kZUVycm9yUmVzdWx0KCk7CiAgaW5pdF9kZWNvZGVGdW5jdGlvblJlc3VsdCgpOwogIGluaXRfZW5jb2RlQWJpUGFyYW1ldGVycygpOwogIGluaXRfZW5jb2RlRGVwbG95RGF0YSgpOwogIGluaXRfZW5jb2RlRnVuY3Rpb25EYXRhKCk7CiAgaW5pdF9wcmVwYXJlRW5jb2RlRnVuY3Rpb25EYXRhKCk7CiAgaW5pdF90cmFuc2FjdGlvblJlcXVlc3QoKTsKICBpbml0X2dldEFiaUl0ZW0oKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9zaWduYXR1cmUvY29tcGFjdFNpZ25hdHVyZVRvU2lnbmF0dXJlLmpzCiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIGNvbXBhY3RTaWduYXR1cmVUb1NpZ25hdHVyZSh7IHIsIHlQYXJpdHlBbmRTIH0pIHsKICAgIGNvbnN0IHlQYXJpdHlBbmRTX2J5dGVzID0gaGV4VG9CeXRlcyh5UGFyaXR5QW5kUyk7CiAgICBjb25zdCB5UGFyaXR5ID0geVBhcml0eUFuZFNfYnl0ZXNbMF0gJiAxMjggPyAxIDogMDsKICAgIGNvbnN0IHMgPSB5UGFyaXR5QW5kU19ieXRlczsKICAgIGlmICh5UGFyaXR5ID09PSAxKQogICAgICBzWzBdICY9IDEyNzsKICAgIHJldHVybiB7IHIsIHM6IGJ5dGVzVG9IZXgocyksIHlQYXJpdHkgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3BhcnNlQ29tcGFjdFNpZ25hdHVyZS5qcwogIGluaXRfc2VjcDI1NmsxKCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIHBhcnNlQ29tcGFjdFNpZ25hdHVyZShzaWduYXR1cmVIZXgpIHsKICAgIGNvbnN0IHsgciwgcyB9ID0gc2VjcDI1NmsxLlNpZ25hdHVyZS5mcm9tQ29tcGFjdChzaWduYXR1cmVIZXguc2xpY2UoMiwgMTMwKSk7CiAgICByZXR1cm4gewogICAgICByOiBudW1iZXJUb0hleChyLCB7IHNpemU6IDMyIH0pLAogICAgICB5UGFyaXR5QW5kUzogbnVtYmVyVG9IZXgocywgeyBzaXplOiAzMiB9KQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3BhcnNlU2lnbmF0dXJlLmpzCiAgaW5pdF9zZWNwMjU2azEoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmUyKHNpZ25hdHVyZUhleCkgewogICAgY29uc3QgeyByLCBzIH0gPSBzZWNwMjU2azEuU2lnbmF0dXJlLmZyb21Db21wYWN0KHNpZ25hdHVyZUhleC5zbGljZSgyLCAxMzApKTsKICAgIGNvbnN0IHlQYXJpdHlPclYgPSBOdW1iZXIoYDB4JHtzaWduYXR1cmVIZXguc2xpY2UoMTMwKX1gKTsKICAgIGNvbnN0IFt2LCB5UGFyaXR5XSA9ICgoKSA9PiB7CiAgICAgIGlmICh5UGFyaXR5T3JWID09PSAwIHx8IHlQYXJpdHlPclYgPT09IDEpCiAgICAgICAgcmV0dXJuIFt2b2lkIDAsIHlQYXJpdHlPclZdOwogICAgICBpZiAoeVBhcml0eU9yViA9PT0gMjcpCiAgICAgICAgcmV0dXJuIFtCaWdJbnQoeVBhcml0eU9yViksIDBdOwogICAgICBpZiAoeVBhcml0eU9yViA9PT0gMjgpCiAgICAgICAgcmV0dXJuIFtCaWdJbnQoeVBhcml0eU9yViksIDFdOwogICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgeVBhcml0eU9yViB2YWx1ZSIpOwogICAgfSkoKTsKICAgIGlmICh0eXBlb2YgdiAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJldHVybiB7CiAgICAgICAgcjogbnVtYmVyVG9IZXgociwgeyBzaXplOiAzMiB9KSwKICAgICAgICBzOiBudW1iZXJUb0hleChzLCB7IHNpemU6IDMyIH0pLAogICAgICAgIHYsCiAgICAgICAgeVBhcml0eQogICAgICB9OwogICAgcmV0dXJuIHsKICAgICAgcjogbnVtYmVyVG9IZXgociwgeyBzaXplOiAzMiB9KSwKICAgICAgczogbnVtYmVyVG9IZXgocywgeyBzaXplOiAzMiB9KSwKICAgICAgeVBhcml0eQogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3JlY292ZXJUcmFuc2FjdGlvbkFkZHJlc3MuanMKICBpbml0X2tlY2NhazI1NigpOwogIGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJUcmFuc2FjdGlvbkFkZHJlc3MocGFyYW1ldGVycykgewogICAgY29uc3QgeyBzZXJpYWxpemVkVHJhbnNhY3Rpb24sIHNpZ25hdHVyZTogc2lnbmF0dXJlXyB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gcGFyc2VUcmFuc2FjdGlvbihzZXJpYWxpemVkVHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmF0dXJlXyA/PyB7CiAgICAgIHI6IHRyYW5zYWN0aW9uLnIsCiAgICAgIHM6IHRyYW5zYWN0aW9uLnMsCiAgICAgIHY6IHRyYW5zYWN0aW9uLnYsCiAgICAgIHlQYXJpdHk6IHRyYW5zYWN0aW9uLnlQYXJpdHkKICAgIH07CiAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplVHJhbnNhY3Rpb24oewogICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgcjogdm9pZCAwLAogICAgICBzOiB2b2lkIDAsCiAgICAgIHY6IHZvaWQgMCwKICAgICAgeVBhcml0eTogdm9pZCAwLAogICAgICBzaWRlY2Fyczogdm9pZCAwCiAgICB9KTsKICAgIHJldHVybiBhd2FpdCByZWNvdmVyQWRkcmVzcyh7CiAgICAgIGhhc2g6IGtlY2NhazI1NihzZXJpYWxpemVkKSwKICAgICAgc2lnbmF0dXJlCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3NpZ25hdHVyZVRvQ29tcGFjdFNpZ25hdHVyZS5qcwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBzaWduYXR1cmVUb0NvbXBhY3RTaWduYXR1cmUoc2lnbmF0dXJlKSB7CiAgICBjb25zdCB7IHIsIHMsIHYsIHlQYXJpdHkgfSA9IHNpZ25hdHVyZTsKICAgIGNvbnN0IHlQYXJpdHlfID0gTnVtYmVyKHlQYXJpdHkgPz8gdiAtIDI3bik7CiAgICBsZXQgeVBhcml0eUFuZFMgPSBzOwogICAgaWYgKHlQYXJpdHlfID09PSAxKSB7CiAgICAgIGNvbnN0IGJ5dGVzMiA9IGhleFRvQnl0ZXMocyk7CiAgICAgIGJ5dGVzMlswXSB8PSAxMjg7CiAgICAgIHlQYXJpdHlBbmRTID0gYnl0ZXNUb0hleChieXRlczIpOwogICAgfQogICAgcmV0dXJuIHsgciwgeVBhcml0eUFuZFMgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvc2lnbmF0dXJlL3NlcmlhbGl6ZUNvbXBhY3RTaWduYXR1cmUuanMKICBpbml0X3NlY3AyNTZrMSgpOwogIGluaXRfZnJvbUhleCgpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZUNvbXBhY3RTaWduYXR1cmUoeyByLCB5UGFyaXR5QW5kUyB9KSB7CiAgICByZXR1cm4gYDB4JHtuZXcgc2VjcDI1NmsxLlNpZ25hdHVyZShoZXhUb0JpZ0ludChyKSwgaGV4VG9CaWdJbnQoeVBhcml0eUFuZFMpKS50b0NvbXBhY3RIZXgoKX1gOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9pbmRleC5qcwogIGluaXRfYXNzZXJ0UmVxdWVzdCgpOwogIGluaXRfdG9CeXRlcygpOwogIGluaXRfdG9IZXgoKTsKICBpbml0X2Zyb21CeXRlcygpOwogIGluaXRfY2NpcDIoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS91dGlscy9ibG9iL3NpZGVjYXJzVG9WZXJzaW9uZWRIYXNoZXMuanMKICBmdW5jdGlvbiBzaWRlY2Fyc1RvVmVyc2lvbmVkSGFzaGVzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgc2lkZWNhcnMsIHZlcnNpb246IHZlcnNpb24zIH0gPSBwYXJhbWV0ZXJzOwogICAgY29uc3QgdG8gPSBwYXJhbWV0ZXJzLnRvID8/ICh0eXBlb2Ygc2lkZWNhcnNbMF0uYmxvYiA9PT0gInN0cmluZyIgPyAiaGV4IiA6ICJieXRlcyIpOwogICAgY29uc3QgaGFzaGVzID0gW107CiAgICBmb3IgKGNvbnN0IHsgY29tbWl0bWVudCB9IG9mIHNpZGVjYXJzKSB7CiAgICAgIGhhc2hlcy5wdXNoKGNvbW1pdG1lbnRUb1ZlcnNpb25lZEhhc2goewogICAgICAgIGNvbW1pdG1lbnQsCiAgICAgICAgdG8sCiAgICAgICAgdmVyc2lvbjogdmVyc2lvbjMKICAgICAgfSkpOwogICAgfQogICAgcmV0dXJuIGhhc2hlczsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMvYmxvYi9mcm9tQmxvYnMuanMKICBpbml0X2N1cnNvcjIoKTsKICBpbml0X3RvQnl0ZXMoKTsKICBpbml0X3RvSGV4KCk7CiAgZnVuY3Rpb24gZnJvbUJsb2JzKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHRvID0gcGFyYW1ldGVycy50byA/PyAodHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gImhleCIgOiAiYnl0ZXMiKTsKICAgIGNvbnN0IGJsb2JzID0gdHlwZW9mIHBhcmFtZXRlcnMuYmxvYnNbMF0gPT09ICJzdHJpbmciID8gcGFyYW1ldGVycy5ibG9icy5tYXAoKHgpID0+IGhleFRvQnl0ZXMoeCkpIDogcGFyYW1ldGVycy5ibG9iczsKICAgIGNvbnN0IGxlbmd0aCA9IGJsb2JzLnJlZHVjZSgobGVuZ3RoMiwgYmxvYikgPT4gbGVuZ3RoMiArIGJsb2IubGVuZ3RoLCAwKTsKICAgIGNvbnN0IGRhdGEgPSBjcmVhdGVDdXJzb3IobmV3IFVpbnQ4QXJyYXkobGVuZ3RoKSk7CiAgICBsZXQgYWN0aXZlID0gdHJ1ZTsKICAgIGZvciAoY29uc3QgYmxvYiBvZiBibG9icykgewogICAgICBjb25zdCBjdXJzb3IgPSBjcmVhdGVDdXJzb3IoYmxvYik7CiAgICAgIHdoaWxlIChhY3RpdmUgJiYgY3Vyc29yLnBvc2l0aW9uIDwgYmxvYi5sZW5ndGgpIHsKICAgICAgICBjdXJzb3IuaW5jcmVtZW50UG9zaXRpb24oMSk7CiAgICAgICAgbGV0IGNvbnN1bWUgPSAzMTsKICAgICAgICBpZiAoYmxvYi5sZW5ndGggLSBjdXJzb3IucG9zaXRpb24gPCAzMSkKICAgICAgICAgIGNvbnN1bWUgPSBibG9iLmxlbmd0aCAtIGN1cnNvci5wb3NpdGlvbjsKICAgICAgICBmb3IgKGNvbnN0IF8gaW4gQXJyYXkuZnJvbSh7IGxlbmd0aDogY29uc3VtZSB9KSkgewogICAgICAgICAgY29uc3QgYnl0ZSA9IGN1cnNvci5yZWFkQnl0ZSgpOwogICAgICAgICAgY29uc3QgaXNUZXJtaW5hdG9yID0gYnl0ZSA9PT0gMTI4ICYmICFjdXJzb3IuaW5zcGVjdEJ5dGVzKGN1cnNvci5yZW1haW5pbmcpLmluY2x1ZGVzKDEyOCk7CiAgICAgICAgICBpZiAoaXNUZXJtaW5hdG9yKSB7CiAgICAgICAgICAgIGFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGRhdGEucHVzaEJ5dGUoYnl0ZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBjb25zdCB0cmltbWVkRGF0YSA9IGRhdGEuYnl0ZXMuc2xpY2UoMCwgZGF0YS5wb3NpdGlvbik7CiAgICByZXR1cm4gdG8gPT09ICJoZXgiID8gYnl0ZXNUb0hleCh0cmltbWVkRGF0YSkgOiB0cmltbWVkRGF0YTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMva3pnL2RlZmluZUt6Zy5qcwogIGZ1bmN0aW9uIGRlZmluZUt6Zyh7IGJsb2JUb0t6Z0NvbW1pdG1lbnQsIGNvbXB1dGVCbG9iS3pnUHJvb2YgfSkgewogICAgcmV0dXJuIHsKICAgICAgYmxvYlRvS3pnQ29tbWl0bWVudCwKICAgICAgY29tcHV0ZUJsb2JLemdQcm9vZgogICAgfTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vdXRpbHMva3pnL3NldHVwS3pnLmpzCiAgZnVuY3Rpb24gc2V0dXBLemcocGFyYW1ldGVycywgcGF0aCkgewogICAgdHJ5IHsKICAgICAgcGFyYW1ldGVycy5sb2FkVHJ1c3RlZFNldHVwKHBhdGgpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBjb25zdCBlcnJvciA9IGU7CiAgICAgIGlmICghZXJyb3IubWVzc2FnZS5pbmNsdWRlcygidHJ1c3RlZCBzZXR1cCBpcyBhbHJlYWR5IGxvYWRlZCIpKQogICAgICAgIHRocm93IGVycm9yOwogICAgfQogICAgcmV0dXJuIGRlZmluZUt6ZyhwYXJhbWV0ZXJzKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vaW5kZXguanMKICBpbml0X2NvbmNhdCgpOwogIGluaXRfZ2V0Q2hhaW5Db250cmFjdEFkZHJlc3MoKTsKICBpbml0X2Zvcm1hdEV0aGVyKCk7CiAgaW5pdF9mb3JtYXRHd2VpKCk7CiAgaW5pdF9mb3JtYXRVbml0cygpOwogIGluaXRfZnJvbUhleCgpOwogIGluaXRfZ2V0QWRkcmVzcygpOwogIGluaXRfdG9FdmVudFNlbGVjdG9yKCk7CiAgaW5pdF90b0Z1bmN0aW9uU2VsZWN0b3IoKTsKICBpbml0X2lzQWRkcmVzcygpOwogIGluaXRfaXNBZGRyZXNzRXF1YWwoKTsKICBpbml0X2lzSGV4KCk7CiAgaW5pdF9rZWNjYWsyNTYoKTsKICBpbml0X3BhZCgpOwogIGluaXRfc2l6ZSgpOwogIGluaXRfc2xpY2UoKTsKICBpbml0X3N0cmluZ2lmeSgpOwogIGluaXRfdHJpbSgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9pbmRleC5qcwogIHZhciBjaGFpbnNfZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KGNoYWluc19leHBvcnRzLCB7CiAgICBhYnN0cmFjdFRlc3RuZXQ6ICgpID0+IGFic3RyYWN0VGVzdG5ldCwKICAgIGFjYWxhOiAoKSA9PiBhY2FsYSwKICAgIGFuY2llbnQ4OiAoKSA9PiBhbmNpZW50OCwKICAgIGFuY2llbnQ4U2Vwb2xpYTogKCkgPT4gYW5jaWVudDhTZXBvbGlhLAogICAgYW52aWw6ICgpID0+IGFudmlsLAogICAgYXBleFRlc3RuZXQ6ICgpID0+IGFwZXhUZXN0bmV0LAogICAgYXJiaXRydW06ICgpID0+IGFyYml0cnVtLAogICAgYXJiaXRydW1Hb2VybGk6ICgpID0+IGFyYml0cnVtR29lcmxpLAogICAgYXJiaXRydW1Ob3ZhOiAoKSA9PiBhcmJpdHJ1bU5vdmEsCiAgICBhcmJpdHJ1bVNlcG9saWE6ICgpID0+IGFyYml0cnVtU2Vwb2xpYSwKICAgIGFyZW9uTmV0d29yazogKCkgPT4gYXJlb25OZXR3b3JrLAogICAgYXJlb25OZXR3b3JrVGVzdG5ldDogKCkgPT4gYXJlb25OZXR3b3JrVGVzdG5ldCwKICAgIGFydGVsYVRlc3RuZXQ6ICgpID0+IGFydGVsYVRlc3RuZXQsCiAgICBhc3NldENoYWluVGVzdG5ldDogKCkgPT4gYXNzZXRDaGFpblRlc3RuZXQsCiAgICBhc3RhcjogKCkgPT4gYXN0YXIsCiAgICBhc3RhclprRVZNOiAoKSA9PiBhc3RhclprRVZNLAogICAgYXN0YXJaa3lvdG86ICgpID0+IGFzdGFyWmt5b3RvLAogICAgYXRsZXRhT2x5bXBpYTogKCkgPT4gYXRsZXRhT2x5bXBpYSwKICAgIGF1cm9yYTogKCkgPT4gYXVyb3JhLAogICAgYXVyb3JhVGVzdG5ldDogKCkgPT4gYXVyb3JhVGVzdG5ldCwKICAgIGF1cm9yaWE6ICgpID0+IGF1cm9yaWEsCiAgICBhdmFsYW5jaGU6ICgpID0+IGF2YWxhbmNoZSwKICAgIGF2YWxhbmNoZUZ1amk6ICgpID0+IGF2YWxhbmNoZUZ1amksCiAgICBiMzogKCkgPT4gYjMsCiAgICBiM1NlcG9saWE6ICgpID0+IGIzU2Vwb2xpYSwKICAgIGJhaGFtdXQ6ICgpID0+IGJhaGFtdXQsCiAgICBiYXNlOiAoKSA9PiBiYXNlLAogICAgYmFzZUdvZXJsaTogKCkgPT4gYmFzZUdvZXJsaSwKICAgIGJhc2VTZXBvbGlhOiAoKSA9PiBiYXNlU2Vwb2xpYSwKICAgIGJlYW06ICgpID0+IGJlYW0sCiAgICBiZWFtVGVzdG5ldDogKCkgPT4gYmVhbVRlc3RuZXQsCiAgICBiZWFyTmV0d29ya0NoYWluTWFpbm5ldDogKCkgPT4gYmVhck5ldHdvcmtDaGFpbk1haW5uZXQsCiAgICBiZWFyTmV0d29ya0NoYWluVGVzdG5ldDogKCkgPT4gYmVhck5ldHdvcmtDaGFpblRlc3RuZXQsCiAgICBiZXJhY2hhaW5UZXN0bmV0OiAoKSA9PiBiZXJhY2hhaW5UZXN0bmV0LAogICAgYmVyYWNoYWluVGVzdG5ldGJBcnRpbzogKCkgPT4gYmVyYWNoYWluVGVzdG5ldGJBcnRpbywKICAgIGJldm1NYWlubmV0OiAoKSA9PiBiZXZtTWFpbm5ldCwKICAgIGJpdFRvcnJlbnQ6ICgpID0+IGJpdFRvcnJlbnQsCiAgICBiaXRUb3JyZW50VGVzdG5ldDogKCkgPT4gYml0VG9ycmVudFRlc3RuZXQsCiAgICBiaXRrdWI6ICgpID0+IGJpdGt1YiwKICAgIGJpdGt1YlRlc3RuZXQ6ICgpID0+IGJpdGt1YlRlc3RuZXQsCiAgICBibGFzdDogKCkgPT4gYmxhc3QsCiAgICBibGFzdFNlcG9saWE6ICgpID0+IGJsYXN0U2Vwb2xpYSwKICAgIGJvYjogKCkgPT4gYm9iLAogICAgYm9iU2Vwb2xpYTogKCkgPT4gYm9iU2Vwb2xpYSwKICAgIGJvYmE6ICgpID0+IGJvYmEsCiAgICBib2JhU2Vwb2xpYTogKCkgPT4gYm9iYVNlcG9saWEsCiAgICBicm9ub3M6ICgpID0+IGJyb25vcywKICAgIGJyb25vc1Rlc3RuZXQ6ICgpID0+IGJyb25vc1Rlc3RuZXQsCiAgICBic2M6ICgpID0+IGJzYywKICAgIGJzY0dyZWVuZmllbGQ6ICgpID0+IGJzY0dyZWVuZmllbGQsCiAgICBic2NUZXN0bmV0OiAoKSA9PiBic2NUZXN0bmV0LAogICAgYnRyOiAoKSA9PiBidHIsCiAgICBidHJUZXN0bmV0OiAoKSA9PiBidHJUZXN0bmV0LAogICAgYnhuOiAoKSA9PiBieG4sCiAgICBieG5UZXN0bmV0OiAoKSA9PiBieG5UZXN0bmV0LAogICAgY2FudG86ICgpID0+IGNhbnRvLAogICAgY2VsbzogKCkgPT4gY2VsbywKICAgIGNlbG9BbGZham9yZXM6ICgpID0+IGNlbG9BbGZham9yZXMsCiAgICBjaGlsaXo6ICgpID0+IGNoaWxpeiwKICAgIGNoaXBzOiAoKSA9PiBjaGlwcywKICAgIGNsYXNzaWM6ICgpID0+IGNsYXNzaWMsCiAgICBjb25mbHV4RVNwYWNlOiAoKSA9PiBjb25mbHV4RVNwYWNlLAogICAgY29uZmx1eEVTcGFjZVRlc3RuZXQ6ICgpID0+IGNvbmZsdXhFU3BhY2VUZXN0bmV0LAogICAgY29yZURhbzogKCkgPT4gY29yZURhbywKICAgIGNyYWI6ICgpID0+IGNyYWIsCiAgICBjcm9ub3M6ICgpID0+IGNyb25vcywKICAgIGNyb25vc1Rlc3RuZXQ6ICgpID0+IGNyb25vc1Rlc3RuZXQsCiAgICBjcm9ub3N6a0VWTTogKCkgPT4gY3Jvbm9zemtFVk0sCiAgICBjcm9ub3N6a0VWTVRlc3RuZXQ6ICgpID0+IGNyb25vc3prRVZNVGVzdG5ldCwKICAgIGNyb3NzYmVsbDogKCkgPT4gY3Jvc3NiZWxsLAogICAgY3VydGlzOiAoKSA9PiBjdXJ0aXMsCiAgICBjeWJlcjogKCkgPT4gY3liZXIsCiAgICBjeWJlclRlc3RuZXQ6ICgpID0+IGN5YmVyVGVzdG5ldCwKICAgIGRhcndpbmlhOiAoKSA9PiBkYXJ3aW5pYSwKICAgIGRjaGFpbjogKCkgPT4gZGNoYWluLAogICAgZGNoYWluVGVzdG5ldDogKCkgPT4gZGNoYWluVGVzdG5ldCwKICAgIGRlZmljaGFpbkV2bTogKCkgPT4gZGVmaWNoYWluRXZtLAogICAgZGVmaWNoYWluRXZtVGVzdG5ldDogKCkgPT4gZGVmaWNoYWluRXZtVGVzdG5ldCwKICAgIGRlZ2VuOiAoKSA9PiBkZWdlbiwKICAgIGRmazogKCkgPT4gZGZrLAogICAgZG9kb2NoYWluVGVzdG5ldDogKCkgPT4gZG9kb2NoYWluVGVzdG5ldCwKICAgIGRvZ2VjaGFpbjogKCkgPT4gZG9nZWNoYWluLAogICAgZHJleWVyeE1haW5uZXQ6ICgpID0+IGRyZXllcnhNYWlubmV0LAogICAgZHJleWVyeFRlc3RuZXQ6ICgpID0+IGRyZXllcnhUZXN0bmV0LAogICAgZWRnZWxlc3M6ICgpID0+IGVkZ2VsZXNzLAogICAgZWRnZWxlc3NUZXN0bmV0OiAoKSA9PiBlZGdlbGVzc1Rlc3RuZXQsCiAgICBlZGdld2FyZTogKCkgPT4gZWRnZXdhcmUsCiAgICBlZGdld2FyZVRlc3RuZXQ6ICgpID0+IGVkZ2V3YXJlVGVzdG5ldCwKICAgIGVrdGE6ICgpID0+IGVrdGEsCiAgICBla3RhVGVzdG5ldDogKCkgPT4gZWt0YVRlc3RuZXQsCiAgICBlb246ICgpID0+IGVvbiwKICAgIGVvczogKCkgPT4gZW9zLAogICAgZW9zVGVzdG5ldDogKCkgPT4gZW9zVGVzdG5ldCwKICAgIGV0aGVybGluazogKCkgPT4gZXRoZXJsaW5rLAogICAgZXRoZXJsaW5rVGVzdG5ldDogKCkgPT4gZXRoZXJsaW5rVGVzdG5ldCwKICAgIGV2bW9zOiAoKSA9PiBldm1vcywKICAgIGV2bW9zVGVzdG5ldDogKCkgPT4gZXZtb3NUZXN0bmV0LAogICAgZmFudG9tOiAoKSA9PiBmYW50b20sCiAgICBmYW50b21Tb25pY1Rlc3RuZXQ6ICgpID0+IGZhbnRvbVNvbmljVGVzdG5ldCwKICAgIGZhbnRvbVRlc3RuZXQ6ICgpID0+IGZhbnRvbVRlc3RuZXQsCiAgICBmaWJvOiAoKSA9PiBmaWJvLAogICAgZmlsZWNvaW46ICgpID0+IGZpbGVjb2luLAogICAgZmlsZWNvaW5DYWxpYnJhdGlvbjogKCkgPT4gZmlsZWNvaW5DYWxpYnJhdGlvbiwKICAgIGZpbGVjb2luSHlwZXJzcGFjZTogKCkgPT4gZmlsZWNvaW5IeXBlcnNwYWNlLAogICAgZmxhcmU6ICgpID0+IGZsYXJlLAogICAgZmxhcmVUZXN0bmV0OiAoKSA9PiBmbGFyZVRlc3RuZXQsCiAgICBmbG93TWFpbm5ldDogKCkgPT4gZmxvd01haW5uZXQsCiAgICBmbG93UHJldmlld25ldDogKCkgPT4gZmxvd1ByZXZpZXduZXQsCiAgICBmbG93VGVzdG5ldDogKCkgPT4gZmxvd1Rlc3RuZXQsCiAgICBmb3JtYTogKCkgPT4gZm9ybWEsCiAgICBmb3VuZHJ5OiAoKSA9PiBmb3VuZHJ5LAogICAgZnJheHRhbDogKCkgPT4gZnJheHRhbCwKICAgIGZyYXh0YWxUZXN0bmV0OiAoKSA9PiBmcmF4dGFsVGVzdG5ldCwKICAgIGZ1bmtpTWFpbm5ldDogKCkgPT4gZnVua2lNYWlubmV0LAogICAgZnVua2lTZXBvbGlhOiAoKSA9PiBmdW5raVNlcG9saWEsCiAgICBmdXNlOiAoKSA9PiBmdXNlLAogICAgZnVzZVNwYXJrbmV0OiAoKSA9PiBmdXNlU3BhcmtuZXQsCiAgICBnbm9zaXM6ICgpID0+IGdub3NpcywKICAgIGdub3Npc0NoaWFkbzogKCkgPT4gZ25vc2lzQ2hpYWRvLAogICAgZ29iaTogKCkgPT4gZ29iaSwKICAgIGdvZXJsaTogKCkgPT4gZ29lcmxpLAogICAgZ3Jhdml0eTogKCkgPT4gZ3Jhdml0eSwKICAgIGhhbTogKCkgPT4gaGFtLAogICAgaGFxcU1haW5uZXQ6ICgpID0+IGhhcXFNYWlubmV0LAogICAgaGFxcVRlc3RlZGdlMjogKCkgPT4gaGFxcVRlc3RlZGdlMiwKICAgIGhhcmRoYXQ6ICgpID0+IGhhcmRoYXQsCiAgICBoYXJtb255T25lOiAoKSA9PiBoYXJtb255T25lLAogICAgaGVkZXJhOiAoKSA9PiBoZWRlcmEsCiAgICBoZWRlcmFQcmV2aWV3bmV0OiAoKSA9PiBoZWRlcmFQcmV2aWV3bmV0LAogICAgaGVkZXJhVGVzdG5ldDogKCkgPT4gaGVkZXJhVGVzdG5ldCwKICAgIGhvbGVza3k6ICgpID0+IGhvbGVza3ksCiAgICBpbW11dGFibGVaa0V2bTogKCkgPT4gaW1tdXRhYmxlWmtFdm0sCiAgICBpbW11dGFibGVaa0V2bVRlc3RuZXQ6ICgpID0+IGltbXV0YWJsZVprRXZtVGVzdG5ldCwKICAgIGluRVZNOiAoKSA9PiBpbkVWTSwKICAgIGlvdGE6ICgpID0+IGlvdGEsCiAgICBpb3RhVGVzdG5ldDogKCkgPT4gaW90YVRlc3RuZXQsCiAgICBpb3RleDogKCkgPT4gaW90ZXgsCiAgICBpb3RleFRlc3RuZXQ6ICgpID0+IGlvdGV4VGVzdG5ldCwKICAgIGpiYzogKCkgPT4gamJjLAogICAgamJjVGVzdG5ldDogKCkgPT4gamJjVGVzdG5ldCwKICAgIGtha2Fyb3RTZXBvbGlhOiAoKSA9PiBrYWthcm90U2Vwb2xpYSwKICAgIGthcnVyYTogKCkgPT4ga2FydXJhLAogICAga2F2YTogKCkgPT4ga2F2YSwKICAgIGthdmFUZXN0bmV0OiAoKSA9PiBrYXZhVGVzdG5ldCwKICAgIGtjYzogKCkgPT4ga2NjLAogICAga2xheXRuOiAoKSA9PiBrbGF5dG4sCiAgICBrbGF5dG5CYW9iYWI6ICgpID0+IGtsYXl0bkJhb2JhYiwKICAgIGtvaTogKCkgPT4ga29pLAogICAga3JvbWE6ICgpID0+IGtyb21hLAogICAga3JvbWFTZXBvbGlhOiAoKSA9PiBrcm9tYVNlcG9saWEsCiAgICBsM3g6ICgpID0+IGwzeCwKICAgIGwzeFRlc3RuZXQ6ICgpID0+IGwzeFRlc3RuZXQsCiAgICBsaWdodGxpbmtQZWdhc3VzOiAoKSA9PiBsaWdodGxpbmtQZWdhc3VzLAogICAgbGlnaHRsaW5rUGhvZW5peDogKCkgPT4gbGlnaHRsaW5rUGhvZW5peCwKICAgIGxpbmVhOiAoKSA9PiBsaW5lYSwKICAgIGxpbmVhR29lcmxpOiAoKSA9PiBsaW5lYUdvZXJsaSwKICAgIGxpbmVhU2Vwb2xpYTogKCkgPT4gbGluZWFTZXBvbGlhLAogICAgbGluZWFUZXN0bmV0OiAoKSA9PiBsaW5lYVRlc3RuZXQsCiAgICBsaXNrOiAoKSA9PiBsaXNrLAogICAgbGlza1NlcG9saWE6ICgpID0+IGxpc2tTZXBvbGlhLAogICAgbG9jYWxob3N0OiAoKSA9PiBsb2NhbGhvc3QsCiAgICBsdWtzbzogKCkgPT4gbHVrc28sCiAgICBsdWtzb1Rlc3RuZXQ6ICgpID0+IGx1a3NvVGVzdG5ldCwKICAgIGx5Y2FuOiAoKSA9PiBseWNhbiwKICAgIGx5cmE6ICgpID0+IGx5cmEsCiAgICBtYWlubmV0OiAoKSA9PiBtYWlubmV0LAogICAgbWFuZGFsYTogKCkgPT4gbWFuZGFsYSwKICAgIG1hbnRhOiAoKSA9PiBtYW50YSwKICAgIG1hbnRhU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IG1hbnRhU2Vwb2xpYVRlc3RuZXQsCiAgICBtYW50YVRlc3RuZXQ6ICgpID0+IG1hbnRhVGVzdG5ldCwKICAgIG1hbnRsZTogKCkgPT4gbWFudGxlLAogICAgbWFudGxlU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IG1hbnRsZVNlcG9saWFUZXN0bmV0LAogICAgbWFudGxlVGVzdG5ldDogKCkgPT4gbWFudGxlVGVzdG5ldCwKICAgIG1lcmxpbjogKCkgPT4gbWVybGluLAogICAgbWV0YWNoYWluOiAoKSA9PiBtZXRhY2hhaW4sCiAgICBtZXRhY2hhaW5Jc3RhbmJ1bDogKCkgPT4gbWV0YWNoYWluSXN0YW5idWwsCiAgICBtZXRhbEwyOiAoKSA9PiBtZXRhbEwyLAogICAgbWV0ZXI6ICgpID0+IG1ldGVyLAogICAgbWV0ZXJUZXN0bmV0OiAoKSA9PiBtZXRlclRlc3RuZXQsCiAgICBtZXRpczogKCkgPT4gbWV0aXMsCiAgICBtZXRpc0dvZXJsaTogKCkgPT4gbWV0aXNHb2VybGksCiAgICBtZXY6ICgpID0+IG1ldiwKICAgIG1ldlRlc3RuZXQ6ICgpID0+IG1ldlRlc3RuZXQsCiAgICBtaW50U2Vwb2xpYVRlc3RuZXQ6ICgpID0+IG1pbnRTZXBvbGlhVGVzdG5ldCwKICAgIG1vZGU6ICgpID0+IG1vZGUsCiAgICBtb2RlVGVzdG5ldDogKCkgPT4gbW9kZVRlc3RuZXQsCiAgICBtb29uYmFzZUFscGhhOiAoKSA9PiBtb29uYmFzZUFscGhhLAogICAgbW9vbmJlYW06ICgpID0+IG1vb25iZWFtLAogICAgbW9vbmJlYW1EZXY6ICgpID0+IG1vb25iZWFtRGV2LAogICAgbW9vbnJpdmVyOiAoKSA9PiBtb29ucml2ZXIsCiAgICBtb3JwaEhvbGVza3k6ICgpID0+IG1vcnBoSG9sZXNreSwKICAgIG1vcnBoU2Vwb2xpYTogKCkgPT4gbW9ycGhTZXBvbGlhLAogICAgbmF1dGlsdXM6ICgpID0+IG5hdXRpbHVzLAogICAgbmVvbkRldm5ldDogKCkgPT4gbmVvbkRldm5ldCwKICAgIG5lb25NYWlubmV0OiAoKSA9PiBuZW9uTWFpbm5ldCwKICAgIG5leGk6ICgpID0+IG5leGksCiAgICBuZXhpbGl4OiAoKSA9PiBuZXhpbGl4LAogICAgb2FzaXNUZXN0bmV0OiAoKSA9PiBvYXNpc1Rlc3RuZXQsCiAgICBvYXN5czogKCkgPT4gb2FzeXMsCiAgICBva2M6ICgpID0+IG9rYywKICAgIG9vcnRNYWlubmV0RGV2OiAoKSA9PiBvb3J0TWFpbm5ldERldiwKICAgIG9wQk5COiAoKSA9PiBvcEJOQiwKICAgIG9wQk5CVGVzdG5ldDogKCkgPT4gb3BCTkJUZXN0bmV0LAogICAgb3B0aW1pc206ICgpID0+IG9wdGltaXNtLAogICAgb3B0aW1pc21Hb2VybGk6ICgpID0+IG9wdGltaXNtR29lcmxpLAogICAgb3B0aW1pc21TZXBvbGlhOiAoKSA9PiBvcHRpbWlzbVNlcG9saWEsCiAgICBvdGltRGV2bmV0OiAoKSA9PiBvdGltRGV2bmV0LAogICAgcGFsbTogKCkgPT4gcGFsbSwKICAgIHBhbG1UZXN0bmV0OiAoKSA9PiBwYWxtVGVzdG5ldCwKICAgIHBnbjogKCkgPT4gcGduLAogICAgcGduVGVzdG5ldDogKCkgPT4gcGduVGVzdG5ldCwKICAgIHBob2VuaXg6ICgpID0+IHBob2VuaXgsCiAgICBwbGF5ZmlBbGJpcmVvOiAoKSA9PiBwbGF5ZmlBbGJpcmVvLAogICAgcGxpbmdhOiAoKSA9PiBwbGluZ2EsCiAgICBwbHVtZVRlc3RuZXQ6ICgpID0+IHBsdW1lVGVzdG5ldCwKICAgIHBvbHlnb246ICgpID0+IHBvbHlnb24sCiAgICBwb2x5Z29uQW1veTogKCkgPT4gcG9seWdvbkFtb3ksCiAgICBwb2x5Z29uTXVtYmFpOiAoKSA9PiBwb2x5Z29uTXVtYmFpLAogICAgcG9seWdvblprRXZtOiAoKSA9PiBwb2x5Z29uWmtFdm0sCiAgICBwb2x5Z29uWmtFdm1DYXJkb25hOiAoKSA9PiBwb2x5Z29uWmtFdm1DYXJkb25hLAogICAgcG9seWdvblprRXZtVGVzdG5ldDogKCkgPT4gcG9seWdvblprRXZtVGVzdG5ldCwKICAgIHB1bHNlY2hhaW46ICgpID0+IHB1bHNlY2hhaW4sCiAgICBwdWxzZWNoYWluVjQ6ICgpID0+IHB1bHNlY2hhaW5WNCwKICAgIHFNYWlubmV0OiAoKSA9PiBxTWFpbm5ldCwKICAgIHFUZXN0bmV0OiAoKSA9PiBxVGVzdG5ldCwKICAgIHJlYWw6ICgpID0+IHJlYWwsCiAgICByZWRiZWxseVRlc3RuZXQ6ICgpID0+IHJlZGJlbGx5VGVzdG5ldCwKICAgIHJlZHN0b25lOiAoKSA9PiByZWRzdG9uZSwKICAgIHJleWFOZXR3b3JrOiAoKSA9PiByZXlhTmV0d29yaywKICAgIHJvbGx1eDogKCkgPT4gcm9sbHV4LAogICAgcm9sbHV4VGVzdG5ldDogKCkgPT4gcm9sbHV4VGVzdG5ldCwKICAgIHJvbmluOiAoKSA9PiByb25pbiwKICAgIHJvb3Q6ICgpID0+IHJvb3QsCiAgICByb290UG9yY2luaTogKCkgPT4gcm9vdFBvcmNpbmksCiAgICByb290c3RvY2s6ICgpID0+IHJvb3RzdG9jaywKICAgIHJvb3RzdG9ja1Rlc3RuZXQ6ICgpID0+IHJvb3RzdG9ja1Rlc3RuZXQsCiAgICByc3MzOiAoKSA9PiByc3MzLAogICAgcnNzM1NlcG9saWE6ICgpID0+IHJzczNTZXBvbGlhLAogICAgc2FpZ29uOiAoKSA9PiBzYWlnb24sCiAgICBzYXBwaGlyZTogKCkgPT4gc2FwcGhpcmUsCiAgICBzYXBwaGlyZVRlc3RuZXQ6ICgpID0+IHNhcHBoaXJlVGVzdG5ldCwKICAgIHNhdG9zaGlWTTogKCkgPT4gc2F0b3NoaVZNLAogICAgc2F0b3NoaVZNVGVzdG5ldDogKCkgPT4gc2F0b3NoaVZNVGVzdG5ldCwKICAgIHNjcm9sbDogKCkgPT4gc2Nyb2xsLAogICAgc2Nyb2xsU2Vwb2xpYTogKCkgPT4gc2Nyb2xsU2Vwb2xpYSwKICAgIHNlaTogKCkgPT4gc2VpLAogICAgc2VpRGV2bmV0OiAoKSA9PiBzZWlEZXZuZXQsCiAgICBzZWlUZXN0bmV0OiAoKSA9PiBzZWlUZXN0bmV0LAogICAgc2Vwb2xpYTogKCkgPT4gc2Vwb2xpYSwKICAgIHNoYXBlU2Vwb2xpYTogKCkgPT4gc2hhcGVTZXBvbGlhLAogICAgc2hhcmRldW1TcGhpbng6ICgpID0+IHNoYXJkZXVtU3BoaW54LAogICAgc2hpYmFyaXVtOiAoKSA9PiBzaGliYXJpdW0sCiAgICBzaGliYXJpdW1UZXN0bmV0OiAoKSA9PiBzaGliYXJpdW1UZXN0bmV0LAogICAgc2hpbW1lcjogKCkgPT4gc2hpbW1lciwKICAgIHNoaW1tZXJUZXN0bmV0OiAoKSA9PiBzaGltbWVyVGVzdG5ldCwKICAgIHNrYWxlQmxvY2tCcmF3bGVyczogKCkgPT4gc2thbGVCbG9ja0JyYXdsZXJzLAogICAgc2thbGVDYWx5cHNvOiAoKSA9PiBza2FsZUNhbHlwc28sCiAgICBza2FsZUNhbHlwc29UZXN0bmV0OiAoKSA9PiBza2FsZUNhbHlwc29UZXN0bmV0LAogICAgc2thbGVDcnlwdG9CbGFkZXM6ICgpID0+IHNrYWxlQ3J5cHRvQmxhZGVzLAogICAgc2thbGVDcnlwdG9Db2xvc3NldW06ICgpID0+IHNrYWxlQ3J5cHRvQ29sb3NzZXVtLAogICAgc2thbGVFdXJvcGE6ICgpID0+IHNrYWxlRXVyb3BhLAogICAgc2thbGVFdXJvcGFUZXN0bmV0OiAoKSA9PiBza2FsZUV1cm9wYVRlc3RuZXQsCiAgICBza2FsZUV4b3JkZTogKCkgPT4gc2thbGVFeG9yZGUsCiAgICBza2FsZUh1bWFuUHJvdG9jb2w6ICgpID0+IHNrYWxlSHVtYW5Qcm90b2NvbCwKICAgIHNrYWxlTmVidWxhOiAoKSA9PiBza2FsZU5lYnVsYSwKICAgIHNrYWxlTmVidWxhVGVzdG5ldDogKCkgPT4gc2thbGVOZWJ1bGFUZXN0bmV0LAogICAgc2thbGVSYXpvcjogKCkgPT4gc2thbGVSYXpvciwKICAgIHNrYWxlVGl0YW46ICgpID0+IHNrYWxlVGl0YW4sCiAgICBza2FsZVRpdGFuVGVzdG5ldDogKCkgPT4gc2thbGVUaXRhblRlc3RuZXQsCiAgICBza2V0Y2hwYWQ6ICgpID0+IHNrZXRjaHBhZCwKICAgIHNvbmdiaXJkOiAoKSA9PiBzb25nYmlyZCwKICAgIHNvbmdiaXJkVGVzdG5ldDogKCkgPT4gc29uZ2JpcmRUZXN0bmV0LAogICAgc3BpY3k6ICgpID0+IHNwaWN5LAogICAgc3RyYXRpczogKCkgPT4gc3RyYXRpcywKICAgIHN5c2NvaW46ICgpID0+IHN5c2NvaW4sCiAgICBzeXNjb2luVGVzdG5ldDogKCkgPT4gc3lzY29pblRlc3RuZXQsCiAgICB0YWlrbzogKCkgPT4gdGFpa28sCiAgICB0YWlrb0hla2xhOiAoKSA9PiB0YWlrb0hla2xhLAogICAgdGFpa29Kb2xuaXI6ICgpID0+IHRhaWtvSm9sbmlyLAogICAgdGFpa29LYXRsYTogKCkgPT4gdGFpa29LYXRsYSwKICAgIHRhaWtvVGVzdG5ldFNlcG9saWE6ICgpID0+IHRhaWtvVGVzdG5ldFNlcG9saWEsCiAgICB0YXJheGE6ICgpID0+IHRhcmF4YSwKICAgIHRhcmF4YVRlc3RuZXQ6ICgpID0+IHRhcmF4YVRlc3RuZXQsCiAgICB0ZWxjb2luVGVzdG5ldDogKCkgPT4gdGVsY29pblRlc3RuZXQsCiAgICB0ZWxvczogKCkgPT4gdGVsb3MsCiAgICB0ZWxvc1Rlc3RuZXQ6ICgpID0+IHRlbG9zVGVzdG5ldCwKICAgIHRlbmV0OiAoKSA9PiB0ZW5ldCwKICAgIHRoYWlDaGFpbjogKCkgPT4gdGhhaUNoYWluLAogICAgdGh1bmRlclRlc3RuZXQ6ICgpID0+IHRodW5kZXJUZXN0bmV0LAogICAgdW5yZWFsOiAoKSA9PiB1bnJlYWwsCiAgICB2ZWNoYWluOiAoKSA9PiB2ZWNoYWluLAogICAgd2FuY2hhaW46ICgpID0+IHdhbmNoYWluLAogICAgd2FuY2hhaW5UZXN0bmV0OiAoKSA9PiB3YW5jaGFpblRlc3RuZXQsCiAgICB3ZW1peDogKCkgPT4gd2VtaXgsCiAgICB3ZW1peFRlc3RuZXQ6ICgpID0+IHdlbWl4VGVzdG5ldCwKICAgIHgxVGVzdG5ldDogKCkgPT4geExheWVyVGVzdG5ldCwKICAgIHhMYXllcjogKCkgPT4geExheWVyLAogICAgeExheWVyVGVzdG5ldDogKCkgPT4geExheWVyVGVzdG5ldCwKICAgIHhhaTogKCkgPT4geGFpLAogICAgeGFpVGVzdG5ldDogKCkgPT4geGFpVGVzdG5ldCwKICAgIHhkYzogKCkgPT4geGRjLAogICAgeGRjVGVzdG5ldDogKCkgPT4geGRjVGVzdG5ldCwKICAgIHhyU2Vwb2xpYTogKCkgPT4geHJTZXBvbGlhLAogICAgeW9vbGRvVmVyc2U6ICgpID0+IHlvb2xkb1ZlcnNlLAogICAgeW9vbGRvVmVyc2VUZXN0bmV0OiAoKSA9PiB5b29sZG9WZXJzZVRlc3RuZXQsCiAgICB6ZXRhY2hhaW46ICgpID0+IHpldGFjaGFpbiwKICAgIHpldGFjaGFpbkF0aGVuc1Rlc3RuZXQ6ICgpID0+IHpldGFjaGFpbkF0aGVuc1Rlc3RuZXQsCiAgICB6aGVqaWFuZzogKCkgPT4gemhlamlhbmcsCiAgICB6aWxsaXFhOiAoKSA9PiB6aWxsaXFhLAogICAgemlsbGlxYVRlc3RuZXQ6ICgpID0+IHppbGxpcWFUZXN0bmV0LAogICAgemlyY3VpdFRlc3RuZXQ6ICgpID0+IHppcmN1aXRUZXN0bmV0LAogICAgemtGYWlyOiAoKSA9PiB6a0ZhaXIsCiAgICB6a0ZhaXJUZXN0bmV0OiAoKSA9PiB6a0ZhaXJUZXN0bmV0LAogICAgemtMaW5rTm92YTogKCkgPT4gemtMaW5rTm92YSwKICAgIHprTGlua05vdmFTZXBvbGlhVGVzdG5ldDogKCkgPT4gemtMaW5rTm92YVNlcG9saWFUZXN0bmV0LAogICAgemtTeW5jOiAoKSA9PiB6a3N5bmMsCiAgICB6a1N5bmNJbk1lbW9yeU5vZGU6ICgpID0+IHprc3luY0luTWVtb3J5Tm9kZSwKICAgIHprU3luY0xvY2FsTm9kZTogKCkgPT4gemtzeW5jTG9jYWxOb2RlLAogICAgemtTeW5jU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IHprc3luY1NlcG9saWFUZXN0bmV0LAogICAgemtzeW5jOiAoKSA9PiB6a3N5bmMsCiAgICB6a3N5bmNJbk1lbW9yeU5vZGU6ICgpID0+IHprc3luY0luTWVtb3J5Tm9kZSwKICAgIHprc3luY0xvY2FsTm9kZTogKCkgPT4gemtzeW5jTG9jYWxOb2RlLAogICAgemtzeW5jU2Vwb2xpYVRlc3RuZXQ6ICgpID0+IHprc3luY1NlcG9saWFUZXN0bmV0LAogICAgem9yYTogKCkgPT4gem9yYSwKICAgIHpvcmFTZXBvbGlhOiAoKSA9PiB6b3JhU2Vwb2xpYSwKICAgIHpvcmFUZXN0bmV0OiAoKSA9PiB6b3JhVGVzdG5ldAogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9mb3JtYXR0ZXJzLmpzCiAgaW5pdF9mcm9tSGV4KCk7CiAgaW5pdF90b0J5dGVzKCk7CiAgaW5pdF90b0hleCgpOwogIGluaXRfdHJhbnNhY3Rpb25SZXF1ZXN0KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL2NvbnN0YW50cy9udW1iZXIuanMKICB2YXIgZ2FzUGVyUHViZGF0YURlZmF1bHQgPSA1MDAwMG47CiAgdmFyIG1heEJ5dGVjb2RlU2l6ZSA9IG1heFVpbnQxNiAqIDMybjsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvZm9ybWF0dGVycy5qcwogIHZhciBmb3JtYXR0ZXJzID0gewogICAgYmxvY2s6IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVCbG9jayh7CiAgICAgIGZvcm1hdChhcmdzKSB7CiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25zID0gYXJncy50cmFuc2FjdGlvbnM/Lm1hcCgodHJhbnNhY3Rpb24pID0+IHsKICAgICAgICAgIGlmICh0eXBlb2YgdHJhbnNhY3Rpb24gPT09ICJzdHJpbmciKQogICAgICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXR0ZXJzLnRyYW5zYWN0aW9uPy5mb3JtYXQodHJhbnNhY3Rpb24pOwogICAgICAgICAgaWYgKGZvcm1hdHRlZC50eXBlSGV4ID09PSAiMHg3MSIpCiAgICAgICAgICAgIGZvcm1hdHRlZC50eXBlID0gImVpcDcxMiI7CiAgICAgICAgICBlbHNlIGlmIChmb3JtYXR0ZWQudHlwZUhleCA9PT0gIjB4ZmYiKQogICAgICAgICAgICBmb3JtYXR0ZWQudHlwZSA9ICJwcmlvcml0eSI7CiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBsMUJhdGNoTnVtYmVyOiBhcmdzLmwxQmF0Y2hOdW1iZXIgPyBoZXhUb0JpZ0ludChhcmdzLmwxQmF0Y2hOdW1iZXIpIDogbnVsbCwKICAgICAgICAgIGwxQmF0Y2hUaW1lc3RhbXA6IGFyZ3MubDFCYXRjaFRpbWVzdGFtcCA/IGhleFRvQmlnSW50KGFyZ3MubDFCYXRjaFRpbWVzdGFtcCkgOiBudWxsLAogICAgICAgICAgdHJhbnNhY3Rpb25zCiAgICAgICAgfTsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvbjogLyogQF9fUFVSRV9fICovIGRlZmluZVRyYW5zYWN0aW9uKHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHt9OwogICAgICAgIGlmIChhcmdzLnR5cGUgPT09ICIweDcxIikKICAgICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAiZWlwNzEyIjsKICAgICAgICBlbHNlIGlmIChhcmdzLnR5cGUgPT09ICIweGZmIikKICAgICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAicHJpb3JpdHkiOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgICAgIGwxQmF0Y2hOdW1iZXI6IGFyZ3MubDFCYXRjaE51bWJlciA/IGhleFRvQmlnSW50KGFyZ3MubDFCYXRjaE51bWJlcikgOiBudWxsLAogICAgICAgICAgbDFCYXRjaFR4SW5kZXg6IGFyZ3MubDFCYXRjaFR4SW5kZXggPyBoZXhUb0JpZ0ludChhcmdzLmwxQmF0Y2hUeEluZGV4KSA6IG51bGwKICAgICAgICB9OwogICAgICB9CiAgICB9KSwKICAgIHRyYW5zYWN0aW9uUmVjZWlwdDogLyogQF9fUFVSRV9fICovIGRlZmluZVRyYW5zYWN0aW9uUmVjZWlwdCh7CiAgICAgIGZvcm1hdChhcmdzKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGwxQmF0Y2hOdW1iZXI6IGFyZ3MubDFCYXRjaE51bWJlciA/IGhleFRvQmlnSW50KGFyZ3MubDFCYXRjaE51bWJlcikgOiBudWxsLAogICAgICAgICAgbDFCYXRjaFR4SW5kZXg6IGFyZ3MubDFCYXRjaFR4SW5kZXggPyBoZXhUb0JpZ0ludChhcmdzLmwxQmF0Y2hUeEluZGV4KSA6IG51bGwsCiAgICAgICAgICBsb2dzOiBhcmdzLmxvZ3MubWFwKChsb2cpID0+IHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAuLi5mb3JtYXRMb2cobG9nKSwKICAgICAgICAgICAgICBsMUJhdGNoTnVtYmVyOiBsb2cubDFCYXRjaE51bWJlciA/IGhleFRvQmlnSW50KGxvZy5sMUJhdGNoTnVtYmVyKSA6IG51bGwsCiAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Mb2dJbmRleDogaGV4VG9OdW1iZXIobG9nLnRyYW5zYWN0aW9uTG9nSW5kZXgpLAogICAgICAgICAgICAgIGxvZ1R5cGU6IGxvZy5sb2dUeXBlCiAgICAgICAgICAgIH07CiAgICAgICAgICB9KSwKICAgICAgICAgIGwyVG9MMUxvZ3M6IGFyZ3MubDJUb0wxTG9ncy5tYXAoKGwyVG9MMUxvZykgPT4gewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIGJsb2NrTnVtYmVyOiBoZXhUb0JpZ0ludChsMlRvTDFMb2cuYmxvY2tIYXNoKSwKICAgICAgICAgICAgICBibG9ja0hhc2g6IGwyVG9MMUxvZy5ibG9ja0hhc2gsCiAgICAgICAgICAgICAgbDFCYXRjaE51bWJlcjogaGV4VG9CaWdJbnQobDJUb0wxTG9nLmwxQmF0Y2hOdW1iZXIpLAogICAgICAgICAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IGhleFRvQmlnSW50KGwyVG9MMUxvZy50cmFuc2FjdGlvbkluZGV4KSwKICAgICAgICAgICAgICBzaGFyZElkOiBoZXhUb0JpZ0ludChsMlRvTDFMb2cuc2hhcmRJZCksCiAgICAgICAgICAgICAgaXNTZXJ2aWNlOiBsMlRvTDFMb2cuaXNTZXJ2aWNlLAogICAgICAgICAgICAgIHNlbmRlcjogbDJUb0wxTG9nLnNlbmRlciwKICAgICAgICAgICAgICBrZXk6IGwyVG9MMUxvZy5rZXksCiAgICAgICAgICAgICAgdmFsdWU6IGwyVG9MMUxvZy52YWx1ZSwKICAgICAgICAgICAgICB0cmFuc2FjdGlvbkhhc2g6IGwyVG9MMUxvZy50cmFuc2FjdGlvbkhhc2gsCiAgICAgICAgICAgICAgbG9nSW5kZXg6IGhleFRvQmlnSW50KGwyVG9MMUxvZy5sb2dJbmRleCkKICAgICAgICAgICAgfTsKICAgICAgICAgIH0pCiAgICAgICAgfTsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvblJlcXVlc3Q6IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVUcmFuc2FjdGlvblJlcXVlc3QoewogICAgICBleGNsdWRlOiBbCiAgICAgICAgImN1c3RvbVNpZ25hdHVyZSIsCiAgICAgICAgImZhY3RvcnlEZXBzIiwKICAgICAgICAiZ2FzUGVyUHViZGF0YSIsCiAgICAgICAgInBheW1hc3RlciIsCiAgICAgICAgInBheW1hc3RlcklucHV0IgogICAgICBdLAogICAgICBmb3JtYXQoYXJncykgewogICAgICAgIGlmIChhcmdzLmdhc1BlclB1YmRhdGEgfHwgYXJncy5wYXltYXN0ZXIgJiYgYXJncy5wYXltYXN0ZXJJbnB1dCB8fCBhcmdzLmZhY3RvcnlEZXBzIHx8IGFyZ3MuY3VzdG9tU2lnbmF0dXJlKQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgZWlwNzEyTWV0YTogewogICAgICAgICAgICAgIC4uLmFyZ3MuZ2FzUGVyUHViZGF0YSA/IHsgZ2FzUGVyUHViZGF0YTogdG9IZXgoYXJncy5nYXNQZXJQdWJkYXRhKSB9IDogeyBnYXNQZXJQdWJkYXRhOiB0b0hleChnYXNQZXJQdWJkYXRhRGVmYXVsdCkgfSwKICAgICAgICAgICAgICAuLi5hcmdzLnBheW1hc3RlciAmJiBhcmdzLnBheW1hc3RlcklucHV0ID8gewogICAgICAgICAgICAgICAgcGF5bWFzdGVyUGFyYW1zOiB7CiAgICAgICAgICAgICAgICAgIHBheW1hc3RlcjogYXJncy5wYXltYXN0ZXIsCiAgICAgICAgICAgICAgICAgIHBheW1hc3RlcklucHV0OiBBcnJheS5mcm9tKGhleFRvQnl0ZXMoYXJncy5wYXltYXN0ZXJJbnB1dCkpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSA6IHt9LAogICAgICAgICAgICAgIC4uLmFyZ3MuZmFjdG9yeURlcHMgPyB7CiAgICAgICAgICAgICAgICBmYWN0b3J5RGVwczogYXJncy5mYWN0b3J5RGVwcy5tYXAoKGRlcCkgPT4gQXJyYXkuZnJvbShoZXhUb0J5dGVzKGRlcCkpKQogICAgICAgICAgICAgIH0gOiB7fSwKICAgICAgICAgICAgICAuLi5hcmdzLmN1c3RvbVNpZ25hdHVyZSA/IHsKICAgICAgICAgICAgICAgIGN1c3RvbVNpZ25hdHVyZTogQXJyYXkuZnJvbShoZXhUb0J5dGVzKGFyZ3MuY3VzdG9tU2lnbmF0dXJlKSkKICAgICAgICAgICAgICB9IDoge30KICAgICAgICAgICAgfSwKICAgICAgICAgICAgdHlwZTogIjB4NzEiCiAgICAgICAgICB9OwogICAgICAgIHJldHVybiB7fTsKICAgICAgfQogICAgfSkKICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9zZXJpYWxpemVycy5qcwogIGluaXRfY29uY2F0KCk7CiAgaW5pdF90b0hleCgpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy91dGlscy9hc3NlcnRFaXA3MTJUcmFuc2FjdGlvbi5qcwogIGluaXRfYWRkcmVzcygpOwogIGluaXRfYmFzZSgpOwogIGluaXRfY2hhaW4oKTsKICBpbml0X2lzQWRkcmVzcygpOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9lcnJvcnMvdHJhbnNhY3Rpb24uanMKICBpbml0X2Jhc2UoKTsKICB2YXIgSW52YWxpZEVpcDcxMlRyYW5zYWN0aW9uRXJyb3IgPSBjbGFzcyBleHRlbmRzIEJhc2VFcnJvcjIgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKFsKICAgICAgICAiVHJhbnNhY3Rpb24gaXMgbm90IGFuIEVJUDcxMiB0cmFuc2FjdGlvbi4iLAogICAgICAgICIiLAogICAgICAgICJUcmFuc2FjdGlvbiBtdXN0OiIsCiAgICAgICAgJyAgLSBpbmNsdWRlIGB0eXBlOiAiZWlwNzEyImAnLAogICAgICAgICIgIC0gaW5jbHVkZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogYGN1c3RvbVNpZ25hdHVyZWAsIGBwYXltYXN0ZXJgLCBgcGF5bWFzdGVySW5wdXRgLCBgZ2FzUGVyUHViZGF0YWAsIGBmYWN0b3J5RGVwc2AiCiAgICAgIF0uam9pbigiXG4iKSwgeyBuYW1lOiAiSW52YWxpZEVpcDcxMlRyYW5zYWN0aW9uRXJyb3IiIH0pOwogICAgfQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL3V0aWxzL2lzRWlwNzEyVHJhbnNhY3Rpb24uanMKICBmdW5jdGlvbiBpc0VJUDcxMlRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKSB7CiAgICBpZiAodHJhbnNhY3Rpb24udHlwZSA9PT0gImVpcDcxMiIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCJjdXN0b21TaWduYXR1cmUiIGluIHRyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uLmN1c3RvbVNpZ25hdHVyZSB8fCAicGF5bWFzdGVyIiBpbiB0cmFuc2FjdGlvbiAmJiB0cmFuc2FjdGlvbi5wYXltYXN0ZXIgfHwgInBheW1hc3RlcklucHV0IiBpbiB0cmFuc2FjdGlvbiAmJiB0cmFuc2FjdGlvbi5wYXltYXN0ZXJJbnB1dCB8fCAiZ2FzUGVyUHViZGF0YSIgaW4gdHJhbnNhY3Rpb24gJiYgdHlwZW9mIHRyYW5zYWN0aW9uLmdhc1BlclB1YmRhdGEgPT09ICJiaWdpbnQiIHx8ICJmYWN0b3J5RGVwcyIgaW4gdHJhbnNhY3Rpb24gJiYgdHJhbnNhY3Rpb24uZmFjdG9yeURlcHMpCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvdXRpbHMvYXNzZXJ0RWlwNzEyVHJhbnNhY3Rpb24uanMKICBmdW5jdGlvbiBhc3NlcnRFaXA3MTJUcmFuc2FjdGlvbih0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCB0bywgZnJvbSwgcGF5bWFzdGVyLCBwYXltYXN0ZXJJbnB1dCB9ID0gdHJhbnNhY3Rpb247CiAgICBpZiAoIWlzRUlQNzEyVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEVpcDcxMlRyYW5zYWN0aW9uRXJyb3IoKTsKICAgIGlmICghY2hhaW5JZCB8fCBjaGFpbklkIDw9IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhaW5JZEVycm9yKHsgY2hhaW5JZCB9KTsKICAgIGlmICh0byAmJiAhaXNBZGRyZXNzKHRvKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB0byB9KTsKICAgIGlmIChmcm9tICYmICFpc0FkZHJlc3MoZnJvbSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogZnJvbSB9KTsKICAgIGlmIChwYXltYXN0ZXIgJiYgIWlzQWRkcmVzcyhwYXltYXN0ZXIpKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcih7IGFkZHJlc3M6IHBheW1hc3RlciB9KTsKICAgIGlmIChwYXltYXN0ZXIgJiYgIXBheW1hc3RlcklucHV0KSB7CiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgcGF5bWFzdGVySW5wdXRgIG11c3QgYmUgcHJvdmlkZWQgd2hlbiBgcGF5bWFzdGVyYCBpcyBkZWZpbmVkIik7CiAgICB9CiAgICBpZiAoIXBheW1hc3RlciAmJiBwYXltYXN0ZXJJbnB1dCkgewogICAgICB0aHJvdyBuZXcgQmFzZUVycm9yMigiYHBheW1hc3RlcmAgbXVzdCBiZSBwcm92aWRlZCB3aGVuIGBwYXltYXN0ZXJJbnB1dGAgaXMgZGVmaW5lZCIpOwogICAgfQogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvc2VyaWFsaXplcnMuanMKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbjIodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgaWYgKGlzRUlQNzEyVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25FSVA3MTIodHJhbnNhY3Rpb24pOwogICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogIH0KICB2YXIgc2VyaWFsaXplcnMgPSB7CiAgICB0cmFuc2FjdGlvbjogc2VyaWFsaXplVHJhbnNhY3Rpb24yCiAgfTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkVJUDcxMih0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBnYXMsIG5vbmNlLCB0bywgZnJvbSwgdmFsdWUsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIGN1c3RvbVNpZ25hdHVyZSwgZmFjdG9yeURlcHMsIHBheW1hc3RlciwgcGF5bWFzdGVySW5wdXQsIGdhc1BlclB1YmRhdGEsIGRhdGEgfSA9IHRyYW5zYWN0aW9uOwogICAgYXNzZXJ0RWlwNzEyVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pOwogICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gWwogICAgICBub25jZSA/IHRvSGV4KG5vbmNlKSA6ICIweCIsCiAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzID8gdG9IZXgobWF4UHJpb3JpdHlGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgbWF4RmVlUGVyR2FzID8gdG9IZXgobWF4RmVlUGVyR2FzKSA6ICIweCIsCiAgICAgIGdhcyA/IHRvSGV4KGdhcykgOiAiMHgiLAogICAgICB0byA/PyAiMHgiLAogICAgICB2YWx1ZSA/IHRvSGV4KHZhbHVlKSA6ICIweCIsCiAgICAgIGRhdGEgPz8gIjB4MCIsCiAgICAgIHRvSGV4KGNoYWluSWQpLAogICAgICB0b0hleCgiIiksCiAgICAgIHRvSGV4KCIiKSwKICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgIGZyb20gPz8gIjB4IiwKICAgICAgZ2FzUGVyUHViZGF0YSA/IHRvSGV4KGdhc1BlclB1YmRhdGEpIDogdG9IZXgoZ2FzUGVyUHViZGF0YURlZmF1bHQpLAogICAgICBmYWN0b3J5RGVwcyA/PyBbXSwKICAgICAgY3VzdG9tU2lnbmF0dXJlID8/ICIweCIsCiAgICAgIC8vIEVJUDcxMiBzaWduYXR1cmUKICAgICAgcGF5bWFzdGVyICYmIHBheW1hc3RlcklucHV0ID8gW3BheW1hc3RlciwgcGF5bWFzdGVySW5wdXRdIDogW10KICAgIF07CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4NzEiLAogICAgICB0b1JscChzZXJpYWxpemVkVHJhbnNhY3Rpb24pCiAgICBdKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL3V0aWxzL2dldEVpcDcxMkRvbWFpbi5qcwogIGluaXRfdG9IZXgoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvdXRpbHMvaGFzaEJ5dGVjb2RlLmpzCiAgaW5pdF9wYWQoKTsKICBpbml0X3RvQnl0ZXMoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvZXJyb3JzL2J5dGVjb2RlLmpzCiAgaW5pdF9iYXNlKCk7CiAgdmFyIEJ5dGVjb2RlTGVuZ3RoRXhjZWVkc01heFNpemVFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGdpdmVuTGVuZ3RoLCBtYXhCeXRlY29kZVNpemU6IG1heEJ5dGVjb2RlU2l6ZTIgfSkgewogICAgICBzdXBlcihgQnl0ZWNvZGUgY2Fubm90IGJlIGxvbmdlciB0aGFuICR7bWF4Qnl0ZWNvZGVTaXplMn0gYnl0ZXMuIEdpdmVuIGxlbmd0aDogJHtnaXZlbkxlbmd0aH1gLCB7IG5hbWU6ICJCeXRlY29kZUxlbmd0aEV4Y2VlZHNNYXhTaXplRXJyb3IiIH0pOwogICAgfQogIH07CiAgdmFyIEJ5dGVjb2RlTGVuZ3RoSW5Xb3Jkc011c3RCZU9kZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBCYXNlRXJyb3IyIHsKICAgIGNvbnN0cnVjdG9yKHsgZ2l2ZW5MZW5ndGhJbldvcmRzIH0pIHsKICAgICAgc3VwZXIoYEJ5dGVjb2RlIGxlbmd0aCBpbiAzMi1ieXRlIHdvcmRzIG11c3QgYmUgb2RkLiBHaXZlbiBsZW5ndGggaW4gd29yZHM6ICR7Z2l2ZW5MZW5ndGhJbldvcmRzfWAsIHsgbmFtZTogIkJ5dGVjb2RlTGVuZ3RoSW5Xb3Jkc011c3RCZU9kZEVycm9yIiB9KTsKICAgIH0KICB9OwogIHZhciBCeXRlY29kZUxlbmd0aE11c3RCZURpdmlzaWJsZUJ5MzJFcnJvciA9IGNsYXNzIGV4dGVuZHMgQmFzZUVycm9yMiB7CiAgICBjb25zdHJ1Y3Rvcih7IGdpdmVuTGVuZ3RoIH0pIHsKICAgICAgc3VwZXIoYFRoZSBieXRlY29kZSBsZW5ndGggaW4gYnl0ZXMgbXVzdCBiZSBkaXZpc2libGUgYnkgMzIuIEdpdmVuIGxlbmd0aDogJHtnaXZlbkxlbmd0aH1gLCB7IG5hbWU6ICJCeXRlY29kZUxlbmd0aE11c3RCZURpdmlzaWJsZUJ5MzJFcnJvciIgfSk7CiAgICB9CiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS96a3N5bmMvdXRpbHMvaGFzaEJ5dGVjb2RlLmpzCiAgZnVuY3Rpb24gaGFzaEJ5dGVjb2RlKGJ5dGVjb2RlKSB7CiAgICBjb25zdCBieXRlY29kZUJ5dGVzID0gdG9CeXRlcyhieXRlY29kZSk7CiAgICBpZiAoYnl0ZWNvZGVCeXRlcy5sZW5ndGggJSAzMiAhPT0gMCkKICAgICAgdGhyb3cgbmV3IEJ5dGVjb2RlTGVuZ3RoTXVzdEJlRGl2aXNpYmxlQnkzMkVycm9yKHsKICAgICAgICBnaXZlbkxlbmd0aDogYnl0ZWNvZGVCeXRlcy5sZW5ndGgKICAgICAgfSk7CiAgICBpZiAoYnl0ZWNvZGVCeXRlcy5sZW5ndGggPiBtYXhCeXRlY29kZVNpemUpCiAgICAgIHRocm93IG5ldyBCeXRlY29kZUxlbmd0aEV4Y2VlZHNNYXhTaXplRXJyb3IoewogICAgICAgIGdpdmVuTGVuZ3RoOiBieXRlY29kZUJ5dGVzLmxlbmd0aCwKICAgICAgICBtYXhCeXRlY29kZVNpemUKICAgICAgfSk7CiAgICBjb25zdCBoYXNoU3RyID0gc2hhMjU2MihieXRlY29kZUJ5dGVzKTsKICAgIGNvbnN0IGhhc2gzID0gdG9CeXRlcyhoYXNoU3RyKTsKICAgIGNvbnN0IGJ5dGVjb2RlTGVuZ3RoSW5Xb3JkcyA9IGJ5dGVjb2RlQnl0ZXMubGVuZ3RoIC8gMzI7CiAgICBpZiAoYnl0ZWNvZGVMZW5ndGhJbldvcmRzICUgMiA9PT0gMCkgewogICAgICB0aHJvdyBuZXcgQnl0ZWNvZGVMZW5ndGhJbldvcmRzTXVzdEJlT2RkRXJyb3IoewogICAgICAgIGdpdmVuTGVuZ3RoSW5Xb3JkczogYnl0ZWNvZGVMZW5ndGhJbldvcmRzCiAgICAgIH0pOwogICAgfQogICAgY29uc3QgYnl0ZWNvZGVMZW5ndGggPSB0b0J5dGVzKGJ5dGVjb2RlTGVuZ3RoSW5Xb3Jkcyk7CiAgICBjb25zdCBieXRlY29kZUxlbmd0aFBhZGRlZCA9IHBhZChieXRlY29kZUxlbmd0aCwgeyBzaXplOiAyIH0pOwogICAgY29uc3QgY29kZUhhc2hWZXJzaW9uID0gbmV3IFVpbnQ4QXJyYXkoWzEsIDBdKTsKICAgIGhhc2gzLnNldChjb2RlSGFzaFZlcnNpb24sIDApOwogICAgaGFzaDMuc2V0KGJ5dGVjb2RlTGVuZ3RoUGFkZGVkLCAyKTsKICAgIHJldHVybiBoYXNoMzsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vemtzeW5jL3V0aWxzL2dldEVpcDcxMkRvbWFpbi5qcwogIHZhciBnZXRFaXA3MTJEb21haW4yID0gKHRyYW5zYWN0aW9uKSA9PiB7CiAgICBhc3NlcnRFaXA3MTJUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7CiAgICBjb25zdCBtZXNzYWdlID0gdHJhbnNhY3Rpb25Ub01lc3NhZ2UodHJhbnNhY3Rpb24pOwogICAgcmV0dXJuIHsKICAgICAgZG9tYWluOiB7CiAgICAgICAgbmFtZTogInprU3luYyIsCiAgICAgICAgdmVyc2lvbjogIjIiLAogICAgICAgIGNoYWluSWQ6IHRyYW5zYWN0aW9uLmNoYWluSWQKICAgICAgfSwKICAgICAgdHlwZXM6IHsKICAgICAgICBUcmFuc2FjdGlvbjogWwogICAgICAgICAgeyBuYW1lOiAidHhUeXBlIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgICB7IG5hbWU6ICJmcm9tIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgICB7IG5hbWU6ICJ0byIsIHR5cGU6ICJ1aW50MjU2IiB9LAogICAgICAgICAgeyBuYW1lOiAiZ2FzTGltaXQiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogImdhc1BlclB1YmRhdGFCeXRlTGltaXQiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogIm1heEZlZVBlckdhcyIsIHR5cGU6ICJ1aW50MjU2IiB9LAogICAgICAgICAgeyBuYW1lOiAibWF4UHJpb3JpdHlGZWVQZXJHYXMiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogInBheW1hc3RlciIsIHR5cGU6ICJ1aW50MjU2IiB9LAogICAgICAgICAgeyBuYW1lOiAibm9uY2UiLCB0eXBlOiAidWludDI1NiIgfSwKICAgICAgICAgIHsgbmFtZTogInZhbHVlIiwgdHlwZTogInVpbnQyNTYiIH0sCiAgICAgICAgICB7IG5hbWU6ICJkYXRhIiwgdHlwZTogImJ5dGVzIiB9LAogICAgICAgICAgeyBuYW1lOiAiZmFjdG9yeURlcHMiLCB0eXBlOiAiYnl0ZXMzMltdIiB9LAogICAgICAgICAgeyBuYW1lOiAicGF5bWFzdGVySW5wdXQiLCB0eXBlOiAiYnl0ZXMiIH0KICAgICAgICBdCiAgICAgIH0sCiAgICAgIHByaW1hcnlUeXBlOiAiVHJhbnNhY3Rpb24iLAogICAgICBtZXNzYWdlCiAgICB9OwogIH07CiAgZnVuY3Rpb24gdHJhbnNhY3Rpb25Ub01lc3NhZ2UodHJhbnNhY3Rpb24pIHsKICAgIGNvbnN0IHsgZ2FzLCBub25jZSwgdG8sIGZyb20sIHZhbHVlLCBtYXhGZWVQZXJHYXMsIG1heFByaW9yaXR5RmVlUGVyR2FzLCBmYWN0b3J5RGVwcywgcGF5bWFzdGVyLCBwYXltYXN0ZXJJbnB1dCwgZ2FzUGVyUHViZGF0YSwgZGF0YSB9ID0gdHJhbnNhY3Rpb247CiAgICByZXR1cm4gewogICAgICB0eFR5cGU6IDExM24sCiAgICAgIGZyb206IEJpZ0ludChmcm9tKSwKICAgICAgdG86IHRvID8gQmlnSW50KHRvKSA6IDBuLAogICAgICBnYXNMaW1pdDogZ2FzID8/IDBuLAogICAgICBnYXNQZXJQdWJkYXRhQnl0ZUxpbWl0OiBnYXNQZXJQdWJkYXRhID8/IGdhc1BlclB1YmRhdGFEZWZhdWx0LAogICAgICBtYXhGZWVQZXJHYXM6IG1heEZlZVBlckdhcyA/PyAwbiwKICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IG1heFByaW9yaXR5RmVlUGVyR2FzID8/IDBuLAogICAgICBwYXltYXN0ZXI6IHBheW1hc3RlciA/IEJpZ0ludChwYXltYXN0ZXIpIDogMG4sCiAgICAgIG5vbmNlOiBub25jZSA/IEJpZ0ludChub25jZSkgOiAwbiwKICAgICAgdmFsdWU6IHZhbHVlID8/IDBuLAogICAgICBkYXRhOiBkYXRhID8gZGF0YSA6ICIweDAiLAogICAgICBmYWN0b3J5RGVwczogZmFjdG9yeURlcHM/Lm1hcCgoZGVwKSA9PiB0b0hleChoYXNoQnl0ZWNvZGUoZGVwKSkpID8/IFtdLAogICAgICBwYXltYXN0ZXJJbnB1dDogcGF5bWFzdGVySW5wdXQgPyBwYXltYXN0ZXJJbnB1dCA6ICIweCIKICAgIH07CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL3prc3luYy9jaGFpbkNvbmZpZy5qcwogIHZhciBjaGFpbkNvbmZpZyA9IHsKICAgIGZvcm1hdHRlcnMsCiAgICBzZXJpYWxpemVycywKICAgIGN1c3RvbTogewogICAgICBnZXRFaXA3MTJEb21haW46IGdldEVpcDcxMkRvbWFpbjIKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hYnN0cmFjdFRlc3RuZXQuanMKICB2YXIgYWJzdHJhY3RUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnLAogICAgaWQ6IDExMTI0LAogICAgbmFtZTogIkFic3RyYWN0IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRVRIIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLnRlc3RuZXQuYWJzLnh5eiJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFic3RyYWN0IEJsb2NrIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQuYWJzLnh5eiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYWNhbGEuanMKICB2YXIgYWNhbGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDc4NywKICAgIG5hbWU6ICJBY2FsYSIsCiAgICBuZXR3b3JrOiAiYWNhbGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkFjYWxhIiwKICAgICAgc3ltYm9sOiAiQUNBIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZXRoLXJwYy1hY2FsYS5hY2EtYXBpLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXRoLXJwYy1hY2FsYS5hY2EtYXBpLm5ldHdvcmsiXQogICAgICB9LAogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC1ycGMtYWNhbGEuYWNhLWFwaS5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2V0aC1ycGMtYWNhbGEuYWNhLWFwaS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQWNhbGEgQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmFjYWxhLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5hY2FsYS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vb3Atc3RhY2svY29udHJhY3RzLmpzCiAgdmFyIGNvbnRyYWN0cyA9IHsKICAgIGdhc1ByaWNlT3JhY2xlOiB7IGFkZHJlc3M6ICIweDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYiIH0sCiAgICBsMUJsb2NrOiB7IGFkZHJlc3M6ICIweDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUiIH0sCiAgICBsMkNyb3NzRG9tYWluTWVzc2VuZ2VyOiB7CiAgICAgIGFkZHJlc3M6ICIweDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDciCiAgICB9LAogICAgbDJFcmM3MjFCcmlkZ2U6IHsgYWRkcmVzczogIjB4NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNCIgfSwKICAgIGwyU3RhbmRhcmRCcmlkZ2U6IHsgYWRkcmVzczogIjB4NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCIgfSwKICAgIGwyVG9MMU1lc3NhZ2VQYXNzZXI6IHsKICAgICAgYWRkcmVzczogIjB4NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNiIKICAgIH0KICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL29wLXN0YWNrL2Zvcm1hdHRlcnMuanMKICBpbml0X2Zyb21IZXgoKTsKICB2YXIgZm9ybWF0dGVyczIgPSB7CiAgICBibG9jazogLyogQF9fUFVSRV9fICovIGRlZmluZUJsb2NrKHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbnMgPSBhcmdzLnRyYW5zYWN0aW9ucz8ubWFwKCh0cmFuc2FjdGlvbikgPT4gewogICAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2FjdGlvbiA9PT0gInN0cmluZyIpCiAgICAgICAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKTsKICAgICAgICAgIGlmIChmb3JtYXR0ZWQudHlwZUhleCA9PT0gIjB4N2UiKSB7CiAgICAgICAgICAgIGZvcm1hdHRlZC5pc1N5c3RlbVR4ID0gdHJhbnNhY3Rpb24uaXNTeXN0ZW1UeDsKICAgICAgICAgICAgZm9ybWF0dGVkLm1pbnQgPSB0cmFuc2FjdGlvbi5taW50ID8gaGV4VG9CaWdJbnQodHJhbnNhY3Rpb24ubWludCkgOiB2b2lkIDA7CiAgICAgICAgICAgIGZvcm1hdHRlZC5zb3VyY2VIYXNoID0gdHJhbnNhY3Rpb24uc291cmNlSGFzaDsKICAgICAgICAgICAgZm9ybWF0dGVkLnR5cGUgPSAiZGVwb3NpdCI7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0cmFuc2FjdGlvbnMsCiAgICAgICAgICBzdGF0ZVJvb3Q6IGFyZ3Muc3RhdGVSb290CiAgICAgICAgfTsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvbjogLyogQF9fUFVSRV9fICovIGRlZmluZVRyYW5zYWN0aW9uKHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHt9OwogICAgICAgIGlmIChhcmdzLnR5cGUgPT09ICIweDdlIikgewogICAgICAgICAgdHJhbnNhY3Rpb24uaXNTeXN0ZW1UeCA9IGFyZ3MuaXNTeXN0ZW1UeDsKICAgICAgICAgIHRyYW5zYWN0aW9uLm1pbnQgPSBhcmdzLm1pbnQgPyBoZXhUb0JpZ0ludChhcmdzLm1pbnQpIDogdm9pZCAwOwogICAgICAgICAgdHJhbnNhY3Rpb24uc291cmNlSGFzaCA9IGFyZ3Muc291cmNlSGFzaDsKICAgICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAiZGVwb3NpdCI7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgICAgfQogICAgfSksCiAgICB0cmFuc2FjdGlvblJlY2VpcHQ6IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVUcmFuc2FjdGlvblJlY2VpcHQoewogICAgICBmb3JtYXQoYXJncykgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBsMUdhc1ByaWNlOiBhcmdzLmwxR2FzUHJpY2UgPyBoZXhUb0JpZ0ludChhcmdzLmwxR2FzUHJpY2UpIDogbnVsbCwKICAgICAgICAgIGwxR2FzVXNlZDogYXJncy5sMUdhc1VzZWQgPyBoZXhUb0JpZ0ludChhcmdzLmwxR2FzVXNlZCkgOiBudWxsLAogICAgICAgICAgbDFGZWU6IGFyZ3MubDFGZWUgPyBoZXhUb0JpZ0ludChhcmdzLmwxRmVlKSA6IG51bGwsCiAgICAgICAgICBsMUZlZVNjYWxhcjogYXJncy5sMUZlZVNjYWxhciA/IE51bWJlcihhcmdzLmwxRmVlU2NhbGFyKSA6IG51bGwKICAgICAgICB9OwogICAgICB9CiAgICB9KQogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vb3Atc3RhY2svc2VyaWFsaXplcnMuanMKICBpbml0X2FkZHJlc3MoKTsKICBpbml0X2lzQWRkcmVzcygpOwogIGluaXRfY29uY2F0KCk7CiAgaW5pdF90b0hleCgpOwogIGZ1bmN0aW9uIHNlcmlhbGl6ZVRyYW5zYWN0aW9uMyh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKSB7CiAgICBpZiAoaXNEZXBvc2l0KHRyYW5zYWN0aW9uKSkKICAgICAgcmV0dXJuIHNlcmlhbGl6ZVRyYW5zYWN0aW9uRGVwb3NpdCh0cmFuc2FjdGlvbik7CiAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIHNpZ25hdHVyZSk7CiAgfQogIHZhciBzZXJpYWxpemVyczIgPSB7CiAgICB0cmFuc2FjdGlvbjogc2VyaWFsaXplVHJhbnNhY3Rpb24zCiAgfTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkRlcG9zaXQodHJhbnNhY3Rpb24pIHsKICAgIGFzc2VydFRyYW5zYWN0aW9uRGVwb3NpdCh0cmFuc2FjdGlvbik7CiAgICBjb25zdCB7IHNvdXJjZUhhc2gsIGRhdGEsIGZyb20sIGdhcywgaXNTeXN0ZW1UeCwgbWludCwgdG8sIHZhbHVlIH0gPSB0cmFuc2FjdGlvbjsKICAgIGNvbnN0IHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9IFsKICAgICAgc291cmNlSGFzaCwKICAgICAgZnJvbSwKICAgICAgdG8gPz8gIjB4IiwKICAgICAgbWludCA/IHRvSGV4KG1pbnQpIDogIjB4IiwKICAgICAgdmFsdWUgPyB0b0hleCh2YWx1ZSkgOiAiMHgiLAogICAgICBnYXMgPyB0b0hleChnYXMpIDogIjB4IiwKICAgICAgaXNTeXN0ZW1UeCA/ICIweDEiIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiCiAgICBdOwogICAgcmV0dXJuIGNvbmNhdEhleChbCiAgICAgICIweDdlIiwKICAgICAgdG9SbHAoc2VyaWFsaXplZFRyYW5zYWN0aW9uKQogICAgXSk7CiAgfQogIGZ1bmN0aW9uIGlzRGVwb3NpdCh0cmFuc2FjdGlvbikgewogICAgaWYgKHRyYW5zYWN0aW9uLnR5cGUgPT09ICJkZXBvc2l0IikKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAodHlwZW9mIHRyYW5zYWN0aW9uLnNvdXJjZUhhc2ggIT09ICJ1bmRlZmluZWQiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgZnVuY3Rpb24gYXNzZXJ0VHJhbnNhY3Rpb25EZXBvc2l0KHRyYW5zYWN0aW9uKSB7CiAgICBjb25zdCB7IGZyb20sIHRvIH0gPSB0cmFuc2FjdGlvbjsKICAgIGlmIChmcm9tICYmICFpc0FkZHJlc3MoZnJvbSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogZnJvbSB9KTsKICAgIGlmICh0byAmJiAhaXNBZGRyZXNzKHRvKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB0byB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vb3Atc3RhY2svY2hhaW5Db25maWcuanMKICB2YXIgY2hhaW5Db25maWcyID0gewogICAgY29udHJhY3RzLAogICAgZm9ybWF0dGVyczogZm9ybWF0dGVyczIsCiAgICBzZXJpYWxpemVyczogc2VyaWFsaXplcnMyCiAgfTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYW5jaWVudDguanMKICB2YXIgc291cmNlSWQgPSAxOwogIHZhciBhbmNpZW50OCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogODg4ODg4ODg4LAogICAgbmFtZTogIkFuY2llbnQ4IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5hbmNpZW50OC5nZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFuY2llbnQ4IGV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4uYW5jaWVudDguZ2ciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2Nhbi5hbmNpZW50OC5nZy9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWRdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhCMDlEQzA4NDI4QzhiNEVGQjRmZjlDMDgyNzM4NkNERjM0Mjc3OTk2IgogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkXTogewogICAgICAgICAgYWRkcmVzczogIjB4NjM5RjJBRUNFMzk4QWE3NmIwN2U1OWVGNmFiZTJjRmUzMmJhY2I2OCIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MDcwNTcxCiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkXTogewogICAgICAgICAgYWRkcmVzczogIjB4ZDVlM2VEZjViNjgxMzVENTU5RDU3MkUyNmJGODYzRkJDMTk1MDAzMyIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MDcwNTcxCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYW5jaWVudDhTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMiA9IDExMTU1MTExOwogIHZhciBhbmNpZW50OFNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI4MTIyMDI0LAogICAgbmFtZTogIkFuY2llbnQ4IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjdjItdGVzdG5ldC5hbmNpZW50OC5nZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFuY2llbnQ4IENlbGVzdGlhIFRlc3RuZXQgZXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc2NhbnYyLXRlc3RuZXQuYW5jaWVudDguZ2ciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2NhbnYyLXRlc3RuZXQuYW5jaWVudDguZ2cvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDk0MmZENTAxN2MwRjYwNTc1OTMwRDg1NzRFYWNhMTNCRWNENmUxYkIiCiAgICAgICAgfQogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQyXTogewogICAgICAgICAgYWRkcmVzczogIjB4ZmExZDlFMjZBNmFDRDdiMjIxMTVEMjc1NzJjMTIyMUI5ODAzYzk2MCIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NzI5MDgKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyXTogewogICAgICAgICAgYWRkcmVzczogIjB4RjZCYzAxNDZkM2M3NEQ0ODMwNmU3OUFlMTM0QTI2MEU0MThDOTMzNSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NzI5MDgKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQyCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FudmlsLmpzCiAgdmFyIGFudmlsID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMTMzNywKICAgIG5hbWU6ICJBbnZpbCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHA6Ly8xMjcuMC4wLjE6ODU0NSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3czovLzEyNy4wLjAuMTo4NTQ1Il0KICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hcGV4VGVzdG5ldC5qcwogIHZhciBhcGV4VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzk5MywKICAgIG5hbWU6ICJBUEVYIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQuYXBleGxheWVyLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwLXRlc3RuZXQuYXBleGxheWVyLnh5eiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHAtdGVzdG5ldC5hcGV4bGF5ZXIueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Zjc2NDJiZTMzYTZiMThEMTZhOTk1NjU3YWRiNWE2OENEMDQzOGFFMiIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyODM3NzUKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJiaXRydW0uanMKICB2YXIgYXJiaXRydW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyMTYxLAogICAgbmFtZTogIkFyYml0cnVtIE9uZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcmIxLmFyYml0cnVtLmlvL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFyYmlzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2FyYmlzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5hcmJpc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNzY1NDcwNwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FyYml0cnVtR29lcmxpLmpzCiAgdmFyIGFyYml0cnVtR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MjE2MTMsCiAgICBuYW1lOiAiQXJiaXRydW0gR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJBcmJpdHJ1bSBHb2VybGkgRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZ29lcmxpLXJvbGx1cC5hcmJpdHJ1bS5pby9ycGMiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBcmJpc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9nb2VybGkuYXJiaXNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogODgxMTQKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJiaXRydW1Ob3ZhLmpzCiAgdmFyIGFyYml0cnVtTm92YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDIxNzAsCiAgICBuYW1lOiAiQXJiaXRydW0gTm92YSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ub3ZhLmFyYml0cnVtLmlvL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFyYmlzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL25vdmEuYXJiaXNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLW5vdmEuYXJiaXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE3NDY5NjMKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hc3NldENoYWluVGVzdG5ldC5qcwogIHZhciBhc3NldENoYWluVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDI0MjEsCiAgICBuYW1lOiAiQXNzZXRDaGFpbiBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlJlYWwgV29ybGQgQXNzZXQiLAogICAgICBzeW1ib2w6ICJSV0EiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9lbnVndS1ycGMuYXNzZXRjaGFpbi5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBc3NldCBDaGFpbiBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4tdGVzdG5ldC5hc3NldGNoYWluLm9yZyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLXRlc3RuZXQuYXNzZXRjaGFpbi5vcmcvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4OTg5RjgzMkQzNTk4OGNiNWUzZUIwMDFGYTJGZTc4OTQ2OUVDMzFFYSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNzE3NwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FzdGFyLmpzCiAgdmFyIGFzdGFyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTIsCiAgICBuYW1lOiAiQXN0YXIiLAogICAgbmV0d29yazogImFzdGFyLW1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkFzdGFyIiwKICAgICAgc3ltYm9sOiAiQVNUUiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXN0YXIuYXBpLm9uZmluYWxpdHkuaW8vcHVibGljIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXN0YXIgU3Vic2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hc3Rhci5zdWJzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc2MTc5NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXN0YXJaa0VWTS5qcwogIHZhciBhc3RhclprRVZNID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNzc2LAogICAgbmFtZTogIkFzdGFyIHprRVZNIiwKICAgIG5ldHdvcms6ICJBc3RhclprRVZNIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zdGFydGFsZS5jb20vYXN0YXItemtldm0iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBc3RhciB6a0VWTSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hc3Rhci16a2V2bS5leHBsb3Jlci5zdGFydGFsZS5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogOTM1MjgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FzdGFyWmt5b3RvLmpzCiAgdmFyIGFzdGFyWmt5b3RvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2MDM4MzYxLAogICAgbmFtZTogIkFzdGFyIHprRVZNIFRlc3RuZXQgekt5b3RvIiwKICAgIG5ldHdvcms6ICJ6S3lvdG8iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnN0YXJ0YWxlLmNvbS96a3lvdG8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJ6S3lvdG8gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vemt5b3RvLmV4cGxvcmVyLnN0YXJ0YWxlLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxOTYxNTMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJiaXRydW1TZXBvbGlhLmpzCiAgdmFyIGFyYml0cnVtU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDIxNjE0LAogICAgbmFtZTogIkFyYml0cnVtIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkFyYml0cnVtIFNlcG9saWEgRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS1yb2xsdXAuYXJiaXRydW0uaW8vcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXJiaXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5hcmJpc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5hcmJpc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogODE5MzAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYXJlb25OZXR3b3JrLmpzCiAgdmFyIGFyZW9uTmV0d29yayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDYzLAogICAgbmFtZTogIkFyZW9uIE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgZGVjaW1hbHM6IDE4LCBuYW1lOiAiQVJFQSIsIHN5bWJvbDogIkFSRUEiIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC1ycGMuYXJlb24ubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9tYWlubmV0LXdzLmFyZW9uLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBcmVvbnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYXJlb25zY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FyZW9uTmV0d29ya1Rlc3RuZXQuanMKICB2YXIgYXJlb25OZXR3b3JrVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDYyLAogICAgbmFtZTogIkFyZW9uIE5ldHdvcmsgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJUQVJFQSIsIHN5bWJvbDogIlRBUkVBIiB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQtcnBjLmFyZW9uLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC13cy5hcmVvbi5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXJlb25zY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2FyZW9uc2Nhbi5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2FydGVsYVRlc3RuZXQuanMKICB2YXIgYXJ0ZWxhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTE4MjIsCiAgICBuYW1lOiAiQXJ0ZWxhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkFSVCIsIHN5bWJvbDogIkFSVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2JldGFuZXQtcnBjMS5hcnRlbGEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkFydGVsYSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9iZXRhbmV0LXNjYW4uYXJ0ZWxhLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmV0YW5ldC1zY2FuLmFydGVsYS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4ZDA3Yzg2MzVmNzZlODc0NUVlNzA5MmZiYjZlOGZiYzVGZUYwOURENyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3MDAxODcxCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F0bGV0YU9seW1waWEuanMKICB2YXIgYXRsZXRhT2x5bXBpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjM0MCwKICAgIG5hbWU6ICJBdGxldGEgT2x5bXBpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJBdGxhIiwgc3ltYm9sOiAiQVRMQSIgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL3Rlc3RuZXQtcnBjLmF0bGV0YS5uZXR3b3JrOjk5NDQiLAogICAgICAgICAgImh0dHBzOi8vdGVzdG5ldC1ycGMuYXRsZXRhLm5ldHdvcmsiCiAgICAgICAgXSwKICAgICAgICB3czogWyJ3c3M6Ly90ZXN0bmV0LXJwYy5hdGxldGEubmV0d29yazo5OTQ0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXRsZXRhIE9seW1waWEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5hdGxldGEubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmF0bGV0YS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MTQ3MmVjNjM5MjE4MGZiODRGMzQ1ZDI0NTViQ0M3NUIyNjU3NzExNSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDc2NDczCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F1cm9yYS5qcwogIHZhciBhdXJvcmEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMTMxNjE1NTQsCiAgICBuYW1lOiAiQXVyb3JhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5hdXJvcmEuZGV2Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXVyb3Jhc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hdXJvcmFzY2FuLmRldiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hdXJvcmFzY2FuLmRldi9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjI5MDc4MTYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hdXJvcmFUZXN0bmV0LmpzCiAgdmFyIGF1cm9yYVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMTMxNjE1NTUsCiAgICBuYW1lOiAiQXVyb3JhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LmF1cm9yYS5kZXYiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJBdXJvcmFzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuYXVyb3Jhc2Nhbi5kZXYiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC5hdXJvcmFzY2FuLmRldi9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F1cm9yaWEuanMKICB2YXIgYXVyb3JpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjA1MjA1LAogICAgbmFtZTogIkF1cm9yaWEgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiYXVyb3JpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiQXVyb3JpYSBTdHJhdGlzIiwKICAgICAgc3ltYm9sOiAidFNUUkFYIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2F1cm9yaWEucnBjLnN0cmF0aXNldm0uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQXVyb3JpYSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2F1cm9yaWEuZXhwbG9yZXIuc3RyYXRpc2V2bS5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2F2YWxhbmNoZS5qcwogIHZhciBhdmFsYW5jaGUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQzMTE0LAogICAgbmFtZTogIkF2YWxhbmNoZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJBdmFsYW5jaGUiLAogICAgICBzeW1ib2w6ICJBVkFYIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLmF2YXgubmV0d29yay9leHQvYmMvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTbm93VHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vc25vd3RyYWNlLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5zbm93dHJhY2UuaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTE5MDc5MzQKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9hdmFsYW5jaGVGdWppLmpzCiAgdmFyIGF2YWxhbmNoZUZ1amkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQzMTEzLAogICAgbmFtZTogIkF2YWxhbmNoZSBGdWppIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkF2YWxhbmNoZSBGdWppIiwKICAgICAgc3ltYm9sOiAiQVZBWCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FwaS5hdmF4LXRlc3QubmV0d29yay9leHQvYmMvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTbm93VHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5zbm93dHJhY2UuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLXRlc3RuZXQuc25vd3RyYWNlLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDcwOTY5NTkKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYjNTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMyA9IDE2ODU4Nzc3MzsKICB2YXIgYjNTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOTkzLAogICAgbmFtZTogIkIzIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEuYjMuZnVuL2h0dHAiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEuZXhwbG9yZXIuYjMuZnVuIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDMKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYjMuanMKICB2YXIgc291cmNlSWQ0ID0gODQ1MzsKICB2YXIgYjMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgzMzMsCiAgICBuYW1lOiAiQjMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQtcnBjLmIzLmZ1bi9odHRwIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5iMy5mdW4iCiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQ0CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JhaGFtdXQuanMKICB2YXIgYmFoYW11dCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTE2NSwKICAgIG5ldHdvcms6ICJiYWhhbXV0IiwKICAgIG5hbWU6ICJCYWhhbXV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJGYXN0dG9rZW4iLCBzeW1ib2w6ICJGVE4iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL3JwYzEuYmFoYW11dC5pbyIsCiAgICAgICAgICAiaHR0cHM6Ly9iYWhhbXV0LXJwYy5wdWJsaWNub2RlLmNvbSIsCiAgICAgICAgICAiaHR0cHM6Ly9ycGMyLmJhaGFtdXQuaW8iCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsKICAgICAgICAgICJ3c3M6Ly93czEuc2FoYXJhLmJhaGFtdXRjaGFpbi5jb20iLAogICAgICAgICAgIndzczovL2JhaGFtdXQtcnBjLnB1YmxpY25vZGUuY29tIiwKICAgICAgICAgICJ3c3M6Ly93czIuc2FoYXJhLmJhaGFtdXRjaGFpbi5jb20iCiAgICAgICAgXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbCiAgICAgICAgICAiaHR0cHM6Ly9ycGMxLmJhaGFtdXQuaW8iLAogICAgICAgICAgImh0dHBzOi8vYmFoYW11dC1ycGMucHVibGljbm9kZS5jb20iLAogICAgICAgICAgImh0dHBzOi8vcnBjMi5iYWhhbXV0LmlvIgogICAgICAgIF0sCiAgICAgICAgd2ViU29ja2V0OiBbCiAgICAgICAgICAid3NzOi8vd3MxLnNhaGFyYS5iYWhhbXV0Y2hhaW4uY29tIiwKICAgICAgICAgICJ3c3M6Ly9iYWhhbXV0LXJwYy5wdWJsaWNub2RlLmNvbSIsCiAgICAgICAgICAid3NzOi8vd3MyLnNhaGFyYS5iYWhhbXV0Y2hhaW4uY29tIgogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRnRuc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cuZnRuc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vd3d3LmZ0bnNjYW4uY29tL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iYXNlLmpzCiAgdmFyIHNvdXJjZUlkNSA9IDE7CiAgdmFyIGJhc2UgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDg0NTMsCiAgICBuYW1lOiAiQmFzZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmJhc2Uub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmFzZXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYmFzZXNjYW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5iYXNlc2Nhbi5vcmcvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkNV06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDU2MzE1YjkwYzQwNzMwOTI1ZWM1NDg1Y2YwMDRkODM1MDU4NTE4QTAiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA1MDIyCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDVdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg0OTA0ODA0NEQ1N2UxQzkyQTc3Zjc5OTg4ZDIxRmE4ZkFGNzRFOTdlIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMTc0ODIxNDMKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQ1XTogewogICAgICAgICAgYWRkcmVzczogIjB4MzE1NENmMTZjY2RiNEM2ZDkyMjYyOTY2NDE3NGI5MDRkODBGMkMzNSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE3NDgyMTQzCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkNQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iYXNlR29lcmxpLmpzCiAgdmFyIHNvdXJjZUlkNiA9IDU7CiAgdmFyIGJhc2VHb2VybGkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDg0NTMxLAogICAgbmFtZTogIkJhc2UgR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJHb2VybGkgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZ29lcmxpLmJhc2Uub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmFzZXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLmJhc2VzY2FuLm9yZyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGkuYmFzZXNjYW4ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICAuLi5jaGFpbkNvbmZpZzIuY29udHJhY3RzLAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDZdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgyQTM1ODkxZmYzMDMxM0NjRmE2Q0U4OGRjZjM4NThiYjA3NUEyMjk4IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTM3Njk4OAogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQ2XTogewogICAgICAgICAgYWRkcmVzczogIjB4ZTkzYzhjRDBENDA5MzQxMjA1QTU5MmY4YzRBYzFBNWZlNTU4NWNmQSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQ2XTogewogICAgICAgICAgYWRkcmVzczogIjB4ZkE2RDhFZTVCRTc3MEY4NEZDMDAxRDA5OEM0YkQ2MDRGZTAxMjg0YSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkNgogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iYXNlU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDcgPSAxMTE1NTExMTsKICB2YXIgYmFzZVNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDg0NTMyLAogICAgbmV0d29yazogImJhc2Utc2Vwb2xpYSIsCiAgICBuYW1lOiAiQmFzZSBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZXBvbGlhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5iYXNlLm9yZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJhc2VzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEuYmFzZXNjYW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1zZXBvbGlhLmJhc2VzY2FuLm9yZy9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgZGlzcHV0ZUdhbWVGYWN0b3J5OiB7CiAgICAgICAgW3NvdXJjZUlkN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweGQ2RTZkQmY0RjdFQTBhYzQxMmZEOGI2NUVEMjk3ZTY0QkI3YTA2RTEiCiAgICAgICAgfQogICAgICB9LAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDddOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg4NDQ1N2NhOUQwMTYzRmJDNGJiZmU0RGZiYjIwYmE0NmU0OERGMjU0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDQ5ZjUzZTQxNDUyYzc0NTg5ZTg1Y2ExNjc3NDI2YmE0MjY0NTllODUiLAogICAgICAgICAgYmxvY2tDcmVhdGVkOiA0NDQ2Njc3CiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweGZkMEJmNzFGNjA2NjBFMmY2MDhlZDU2ZTE2NTlDNDUwZUIxMTMxMjAiLAogICAgICAgICAgYmxvY2tDcmVhdGVkOiA0NDQ2Njc3CiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDU5NjQ3CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkNwogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iZWFtLmpzCiAgdmFyIGJlYW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQzMzcsCiAgICBuYW1lOiAiQmVhbSIsCiAgICBuZXR3b3JrOiAiYmVhbSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCZWFtIiwKICAgICAgc3ltYm9sOiAiQkVBTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIHB1YmxpYzogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9idWlsZC5vbmJlYW0uY29tL3JwYyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9idWlsZC5vbmJlYW0uY29tL3dzIl0KICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9idWlsZC5vbmJlYW0uY29tL3JwYyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9idWlsZC5vbmJlYW0uY29tL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmVhbSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zdWJuZXRzLmF2YXgubmV0d29yay9iZWFtIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg0OTU2ZjE1ZWZkYzNkYzE2NjQ1ZTkwY2MzNTZlYWZhNjVmZmM2NWVjIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iZWFtVGVzdG5ldC5qcwogIHZhciBiZWFtVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTMzMzcsCiAgICBuYW1lOiAiQmVhbSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJiZWFtIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkJlYW0iLAogICAgICBzeW1ib2w6ICJCRUFNIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgcHVibGljOiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2J1aWxkLm9uYmVhbS5jb20vcnBjL3Rlc3RuZXQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vYnVpbGQub25iZWFtLmNvbS93cy90ZXN0bmV0Il0KICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9idWlsZC5vbmJlYW0uY29tL3JwYy90ZXN0bmV0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2J1aWxkLm9uYmVhbS5jb20vd3MvdGVzdG5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJlYW0gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc3VibmV0cy10ZXN0LmF2YXgubmV0d29yay9iZWFtIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg5YmY0OWI3MDRlZTJhMDk1Yjk1YzFmMmQ0ZWI5MDEwNTEwYzQxYzllIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYmVhck5ldHdvcmtDaGFpbk1haW5uZXQuanMKICB2YXIgYmVhck5ldHdvcmtDaGFpbk1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDY0MTIzMCwKICAgIG5hbWU6ICJCZWFyIE5ldHdvcmsgQ2hhaW4gTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCZWFyTmV0d29ya0NoYWluIiwKICAgICAgc3ltYm9sOiAiQlJOS0MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9icm5rYy1tYWlubmV0LmJlYXJuZXR3b3JrLm5ldCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJybmtTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2JybmtzY2FuLmJlYXJuZXR3b3JrLm5ldCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9icm5rc2Nhbi5iZWFybmV0d29yay5uZXQvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JlYXJOZXR3b3JrQ2hhaW5UZXN0bmV0LmpzCiAgdmFyIGJlYXJOZXR3b3JrQ2hhaW5UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NTEyMzAsCiAgICBuYW1lOiAiQmVhciBOZXR3b3JrIENoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAidEJSTktDIiwKICAgICAgc3ltYm9sOiAidEJSTktDIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYnJua2MtdGVzdC5iZWFybmV0d29yay5uZXQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCcm5rVGVzdFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYnJua3Rlc3Qtc2Nhbi5iZWFybmV0d29yay5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYnJua3Rlc3Qtc2Nhbi5iZWFybmV0d29yay5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iZXJhY2hhaW5UZXN0bmV0LmpzCiAgdmFyIGJlcmFjaGFpblRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwMDg1LAogICAgbmFtZTogIkJlcmFjaGFpbiBBcnRpbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCRVJBIFRva2VuIiwKICAgICAgc3ltYm9sOiAiQkVSQSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FydGlvLnJwYy5iZXJhY2hhaW4uY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmVyYWNoYWluIiwKICAgICAgICB1cmw6ICJodHRwczovL2FydGlvLmJlcmF0cmFpbC5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYmVyYWNoYWluVGVzdG5ldGJBcnRpby5qcwogIHZhciBiZXJhY2hhaW5UZXN0bmV0YkFydGlvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4MDA4NCwKICAgIG5hbWU6ICJCZXJhY2hhaW4gYkFydGlvIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkJFUkEgVG9rZW4iLAogICAgICBzeW1ib2w6ICJCRVJBIgogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDkyNjkKICAgICAgfQogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYmFydGlvLnJwYy5iZXJhY2hhaW4uY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmVyYWNoYWluIGJBcnRpbyBCZXJhdHJhaWwiLAogICAgICAgIHVybDogImh0dHBzOi8vYmFydGlvLmJlcmF0cmFpbC5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYmV2bU1haW5uZXQuanMKICB2YXIgYmV2bU1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExNTAxLAogICAgbmFtZTogIkJFVk0gTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQml0Y29pbiIsIHN5bWJvbDogIkJUQyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMtbWFpbm5ldC0xLmJldm0uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCZXZtc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLW1haW5uZXQuYmV2bS5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLW1haW5uZXQtYXBpLmJldm0uaW8vYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JpdGt1Yi5qcwogIHZhciBiaXRrdWIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDk2LAogICAgbmFtZTogIkJpdGt1YiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQml0a3ViIiwgc3ltYm9sOiAiS1VCIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmJpdGt1YmNoYWluLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQml0a3ViIENoYWluIE1haW5uZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3LmJrY3NjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3d3dy5ia2NzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYml0a3ViVGVzdG5ldC5qcwogIHZhciBiaXRrdWJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNTkyNSwKICAgIG5hbWU6ICJCaXRrdWIgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiQml0a3ViIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkJpdGt1YiBUZXN0Iiwgc3ltYm9sOiAidEtVQiIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy10ZXN0bmV0LmJpdGt1YmNoYWluLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQml0a3ViIENoYWluIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5ia2NzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJrY3NjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYml0VG9ycmVudC5qcwogIHZhciBiaXRUb3JyZW50ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOTksCiAgICBuYW1lOiAiQml0VG9ycmVudCIsCiAgICBuZXR3b3JrOiAiYml0dG9ycmVudC1jaGFpbi1tYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJCaXRUb3JyZW50Iiwgc3ltYm9sOiAiQlRUIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5iaXR0b3JyZW50Y2hhaW4uaW8iXSB9LAogICAgICBwdWJsaWM6IHsgaHR0cDogWyJodHRwczovL3JwYy5iaXR0b3JyZW50Y2hhaW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCdHRjc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9idHRjc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmJ0dGNzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzEwNzg1NTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9iaXRUb3JyZW50VGVzdG5ldC5qcwogIHZhciBiaXRUb3JyZW50VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAyOCwKICAgIG5hbWU6ICJCaXRUb3JyZW50IENoYWluIFRlc3RuZXQiLAogICAgbmV0d29yazogImJpdHRvcnJlbnQtY2hhaW4tdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQml0VG9ycmVudCIsIHN5bWJvbDogIkJUVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly90ZXN0cnBjLmJpdHRvcnJlbnRjaGFpbi5pbyJdIH0sCiAgICAgIHB1YmxpYzogeyBodHRwOiBbImh0dHBzOi8vdGVzdHJwYy5iaXR0b3JyZW50Y2hhaW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCdHRjc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJ0dGNzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJ0dGNzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JsYXN0LmpzCiAgdmFyIHNvdXJjZUlkOCA9IDE7CiAgdmFyIGJsYXN0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4MTQ1NywKICAgIG5hbWU6ICJCbGFzdCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5ibGFzdC5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsYXN0c2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibGFzdHNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmJsYXN0c2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjEyOTI5CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQ4CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JsYXN0U2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDkgPSAxMTE1NTExMTsKICB2YXIgYmxhc3RTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjg1ODc3NzMsCiAgICBuYW1lOiAiQmxhc3QgU2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5ibGFzdC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsYXN0c2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZXBvbGlhLmJsYXN0c2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5ibGFzdHNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc1NjY5MAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDkKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYm9iLmpzCiAgdmFyIHNvdXJjZUlkMTAgPSAxOwogIHZhciBib2IgPSBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogNjA4MDgsCiAgICBuYW1lOiAiQk9CIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUSCIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmdvYm9iLnh5eiJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuZ29ib2IueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQk9CIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmdvYm9iLnh5eiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICAuLi5jaGFpbkNvbmZpZzIuY29udHJhY3RzLAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMzEzMQogICAgICB9LAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDEwXTogewogICAgICAgICAgYWRkcmVzczogIjB4ZERhNTNFMjNmOGEzMjY0MGIwNEQ3MjU2ZTY1MUMxZGI5OGRCMTFDMSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ0NjI2MTUKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDEwXTogewogICAgICAgICAgYWRkcmVzczogIjB4OEFkZUUxMjQ0NDc0MzVmRTAzZTNDRDI0ZEYzZjRjQUUzMkU2NWEzRSIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ0NjI2MTUKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQxMAogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ib2JTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMTEgPSAxMTE1NTExMTsKICB2YXIgYm9iU2Vwb2xpYSA9IGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiA4MDg4MTMsCiAgICBuYW1lOiAiQk9CIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRVRIIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ib2Itc2Vwb2xpYS5ycGMuZ29ib2IueHl6Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2JvYi1zZXBvbGlhLnJwYy5nb2JvYi54eXoiXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vYm9iLXNlcG9saWEucnBjLmdvYm9iLnh5eiJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ib2Itc2Vwb2xpYS5ycGMuZ29ib2IueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQk9CIFNlcG9saWEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYm9iLXNlcG9saWEuZXhwbG9yZXIuZ29ib2IueHl6IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDM1Njc3CiAgICAgIH0sCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMTFdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgxNEQwMDY5NDUyYjRBRTJiMjUwQjM5NWI4YWRBYjc3MUU0MjY3ZDJmIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogNDQ2MjYxNQogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTFdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg4NjdCMUFhODcyYjlDOGNCNUU5Rjc3NTVmZURDNDVCQjI0QWQwYWU0IiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogNDQ2MjYxNQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBzb3VyY2VJZDogc291cmNlSWQxMQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ib2JhLmpzCiAgdmFyIGJvYmEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI4OCwKICAgIG5hbWU6ICJCb2JhIE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmJvYmEubmV0d29yayJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJPQkFTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2JvYmFzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0NDY4NTkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ib2JhU2Vwb2xpYS5qcwogIHZhciBib2JhU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjg4ODIsCiAgICBuYW1lOiAiQm9iYSBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5ib2JhLm5ldHdvcmsiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCT0JBU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJvYmFzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYnJvbm9zLmpzCiAgdmFyIGJyb25vcyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAzOSwKICAgIG5hbWU6ICJCcm9ub3MiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQlJPIiwKICAgICAgc3ltYm9sOiAiQlJPIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZXZtLmJyb25vcy5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCcm9ub1NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vYnJvc2Nhbi5icm9ub3Mub3JnIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Jyb25vc1Rlc3RuZXQuanMKICB2YXIgYnJvbm9zVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAzOCwKICAgIG5hbWU6ICJCcm9ub3MgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCcm9ub3MgQ29pbiIsCiAgICAgIHN5bWJvbDogInRCUk8iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldm0tdGVzdG5ldC5icm9ub3Mub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQnJvbm9TY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Ricm9zY2FuLmJyb25vcy5vcmciCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2JzYy5qcwogIHZhciBic2MgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU2LAogICAgbmFtZTogIkJOQiBTbWFydCBDaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCTkIiLAogICAgICBzeW1ib2w6ICJCTkIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMuYW5rci5jb20vYnNjIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQnNjU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ic2NzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkuYnNjc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE1OTIxNDUyCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYnNjVGVzdG5ldC5qcwogIHZhciBic2NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5NywKICAgIG5hbWU6ICJCaW5hbmNlIFNtYXJ0IENoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQk5CIiwKICAgICAgc3ltYm9sOiAidEJOQiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2RhdGEtc2VlZC1wcmVic2MtMS1zMS5ibmJjaGFpbi5vcmc6ODU0NSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJzY1NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5ic2NzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJzY3NjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNzQyMjQ4MwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ic2NHcmVlbmZpZWxkLmpzCiAgdmFyIGJzY0dyZWVuZmllbGQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMTcsCiAgICBuYW1lOiAiQk5CIEdyZWVuZmllbGQgQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQk5CIiwKICAgICAgc3ltYm9sOiAiQk5CIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZ3JlZW5maWVsZC1jaGFpbi5ibmJjaGFpbi5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCTkIgR3JlZW5maWVsZCBNYWlubmV0IFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ3JlZW5maWVsZHNjYW4uY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvYnRyLmpzCiAgdmFyIGJ0ciA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAwOTAxLAogICAgbmFtZTogIkJpdGxheWVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCaXRjb2luIiwKICAgICAgc3ltYm9sOiAiQlRDIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWwogICAgICAgICAgImh0dHBzOi8vcnBjLmJpdGxheWVyLm9yZyIsCiAgICAgICAgICAiaHR0cHM6Ly9ycGMuYml0bGF5ZXItcnBjLmNvbSIsCiAgICAgICAgICAiaHR0cHM6Ly9ycGMuYW5rci5jb20vYml0bGF5ZXIiCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3MuYml0bGF5ZXIub3JnIiwgIndzczovL3dzLmJpdGxheWVyLXJwYy5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCaXRsYXllcihCVFIpIFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3LmJ0cnNjYW4uY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2J0clRlc3RuZXQuanMKICB2YXIgYnRyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAwODEwLAogICAgbmFtZTogIkJpdGxheWVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkJpdGNvaW4iLAogICAgICBzeW1ib2w6ICJCVEMiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC1ycGMuYml0bGF5ZXIub3JnIl0sCiAgICAgICAgd2ViU29ja2V0OiBbCiAgICAgICAgICAid3NzOi8vdGVzdG5ldC13cy5iaXRsYXllci5vcmciLAogICAgICAgICAgIndzczovL3Rlc3RuZXQtd3MuYml0bGF5ZXItcnBjLmNvbSIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJpdGxheWVyKEJUUikgU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmJ0cnNjYW4uY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ieG4uanMKICB2YXIgYnhuID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0OTk5LAogICAgbmFtZTogIkJsYWNrRm9ydCBFeGNoYW5nZSBOZXR3b3JrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJCbGFja0ZvcnQgVG9rZW4iLCBzeW1ib2w6ICJCWE4iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmJsYWNrZm9ydC5uZXR3b3JrL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuYmxhY2tmb3J0Lm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuYmxhY2tmb3J0Lm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2J4blRlc3RuZXQuanMKICB2YXIgYnhuVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDc3NywKICAgIG5hbWU6ICJCbGFja0ZvcnQgRXhjaGFuZ2UgTmV0d29yayBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCbGFja0ZvcnQgVGVzdG5ldCBUb2tlbiIsCiAgICAgIHN5bWJvbDogIlRCWE4iLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5ibGFja2ZvcnQubmV0d29yay9ycGMiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQtZXhwbG9yZXIuYmxhY2tmb3J0Lm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC1leHBsb3Jlci5ibGFja2ZvcnQubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NhbnRvLmpzCiAgdmFyIGNhbnRvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NzAwLAogICAgbmFtZTogIkNhbnRvIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkNhbnRvIiwKICAgICAgc3ltYm9sOiAiQ0FOVE8iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9jYW50by5ncmF2aXR5Y2hhaW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUdWJlci5CdWlsZCAoQmxvY2tzY291dCkiLAogICAgICAgIHVybDogImh0dHBzOi8vdHViZXIuYnVpbGQiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjkwNTc4OQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2Vsby9mZWVzLmpzCiAgdmFyIGZlZXMgPSB7CiAgICAvKgogICAgICAgKiBFc3RpbWF0ZXMgdGhlIGZlZXMgcGVyIGdhcyBmb3IgYSB0cmFuc2FjdGlvbi4KICAgIAogICAgICAgKiBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgdG8gYmUgcGFpZCBpbiBhIHRva2VuIChmZWVDdXJyZW5jeSBpcyBwcmVzZW50KSB0aGVuIHRoZSBmZWVzCiAgICAgICAqIGFyZSBlc3RpbWF0ZWQgaW4gdGhlIHZhbHVlIG9mIHRoZSB0b2tlbi4gT3RoZXJ3aXNlIGZhbGxzIGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICAgICogZXN0aW1hdGlvbiBieSByZXR1cm5pbmcgbnVsbC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHBhcmFtcyBmZWUgZXN0aW1hdGlvbiBmdW5jdGlvbiBwYXJhbWV0ZXJzCiAgICAgICAqLwogICAgZXN0aW1hdGVGZWVzUGVyR2FzOiBhc3luYyAocGFyYW1zKSA9PiB7CiAgICAgIGlmICghcGFyYW1zLnJlcXVlc3Q/LmZlZUN1cnJlbmN5KQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCBbbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhc10gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgZXN0aW1hdGVGZWVQZXJHYXNJbkZlZUN1cnJlbmN5KHBhcmFtcy5jbGllbnQsIHBhcmFtcy5yZXF1ZXN0LmZlZUN1cnJlbmN5KSwKICAgICAgICBlc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzSW5GZWVDdXJyZW5jeShwYXJhbXMuY2xpZW50LCBwYXJhbXMucmVxdWVzdC5mZWVDdXJyZW5jeSkKICAgICAgXSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgbWF4RmVlUGVyR2FzLAogICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzCiAgICAgIH07CiAgICB9CiAgfTsKICBhc3luYyBmdW5jdGlvbiBlc3RpbWF0ZUZlZVBlckdhc0luRmVlQ3VycmVuY3koY2xpZW50LCBmZWVDdXJyZW5jeSkgewogICAgY29uc3QgZmVlID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfZ2FzUHJpY2UiLAogICAgICBwYXJhbXM6IFtmZWVDdXJyZW5jeV0KICAgIH0pOwogICAgcmV0dXJuIEJpZ0ludChmZWUpOwogIH0KICBhc3luYyBmdW5jdGlvbiBlc3RpbWF0ZU1heFByaW9yaXR5RmVlUGVyR2FzSW5GZWVDdXJyZW5jeShjbGllbnQsIGZlZUN1cnJlbmN5KSB7CiAgICBjb25zdCBmZWVzUGVyR2FzID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoewogICAgICBtZXRob2Q6ICJldGhfbWF4UHJpb3JpdHlGZWVQZXJHYXMiLAogICAgICBwYXJhbXM6IFtmZWVDdXJyZW5jeV0KICAgIH0pOwogICAgcmV0dXJuIEJpZ0ludChmZWVzUGVyR2FzKTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2Vsby9mb3JtYXR0ZXJzLmpzCiAgaW5pdF9mcm9tSGV4KCk7CiAgaW5pdF90cmFuc2FjdGlvblJlcXVlc3QoKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jZWxvL3V0aWxzLmpzCiAgaW5pdF90cmltKCk7CiAgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSAwIHx8IHZhbHVlID09PSAwbiB8fCB2YWx1ZSA9PT0gdm9pZCAwIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAiMCIgfHwgdmFsdWUgPT09ICIiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgKHRyaW0odmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICIweCIgfHwgdHJpbSh2YWx1ZSkudG9Mb3dlckNhc2UoKSA9PT0gIjB4MDAiKTsKICB9CiAgZnVuY3Rpb24gaXNQcmVzZW50KHZhbHVlKSB7CiAgICByZXR1cm4gIWlzRW1wdHkodmFsdWUpOwogIH0KICBmdW5jdGlvbiBpc0VJUDE1NTkodHJhbnNhY3Rpb24pIHsKICAgIHJldHVybiB0eXBlb2YgdHJhbnNhY3Rpb24ubWF4RmVlUGVyR2FzICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgdHJhbnNhY3Rpb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMgIT09ICJ1bmRlZmluZWQiOwogIH0KICBmdW5jdGlvbiBpc0NJUDY0KHRyYW5zYWN0aW9uKSB7CiAgICBpZiAodHJhbnNhY3Rpb24udHlwZSA9PT0gImNpcDY0IikgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBpc0VJUDE1NTkodHJhbnNhY3Rpb24pICYmIGlzUHJlc2VudCh0cmFuc2FjdGlvbi5mZWVDdXJyZW5jeSk7CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NlbG8vZm9ybWF0dGVycy5qcwogIHZhciBmb3JtYXR0ZXJzMyA9IHsKICAgIGJsb2NrOiAvKiBAX19QVVJFX18gKi8gZGVmaW5lQmxvY2soewogICAgICBmb3JtYXQoYXJncykgewogICAgICAgIGNvbnN0IHRyYW5zYWN0aW9ucyA9IGFyZ3MudHJhbnNhY3Rpb25zPy5tYXAoKHRyYW5zYWN0aW9uKSA9PiB7CiAgICAgICAgICBpZiAodHlwZW9mIHRyYW5zYWN0aW9uID09PSAic3RyaW5nIikKICAgICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uOwogICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgLi4uZm9ybWF0dGVkLAogICAgICAgICAgICAuLi50cmFuc2FjdGlvbi5nYXRld2F5RmVlID8gewogICAgICAgICAgICAgIGdhdGV3YXlGZWU6IGhleFRvQmlnSW50KHRyYW5zYWN0aW9uLmdhdGV3YXlGZWUpLAogICAgICAgICAgICAgIGdhdGV3YXlGZWVSZWNpcGllbnQ6IHRyYW5zYWN0aW9uLmdhdGV3YXlGZWVSZWNpcGllbnQKICAgICAgICAgICAgfSA6IHt9LAogICAgICAgICAgICBmZWVDdXJyZW5jeTogdHJhbnNhY3Rpb24uZmVlQ3VycmVuY3kKICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHRyYW5zYWN0aW9ucywKICAgICAgICAgIC4uLmFyZ3MucmFuZG9tbmVzcyA/IHsgcmFuZG9tbmVzczogYXJncy5yYW5kb21uZXNzIH0gOiB7fQogICAgICAgIH07CiAgICAgIH0KICAgIH0pLAogICAgdHJhbnNhY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVUcmFuc2FjdGlvbih7CiAgICAgIGZvcm1hdChhcmdzKSB7CiAgICAgICAgaWYgKGFyZ3MudHlwZSA9PT0gIjB4N2UiKQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgaXNTeXN0ZW1UeDogYXJncy5pc1N5c3RlbVR4LAogICAgICAgICAgICBtaW50OiBhcmdzLm1pbnQgPyBoZXhUb0JpZ0ludChhcmdzLm1pbnQpIDogdm9pZCAwLAogICAgICAgICAgICBzb3VyY2VIYXNoOiBhcmdzLnNvdXJjZUhhc2gsCiAgICAgICAgICAgIHR5cGU6ICJkZXBvc2l0IgogICAgICAgICAgfTsKICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHsgZmVlQ3VycmVuY3k6IGFyZ3MuZmVlQ3VycmVuY3kgfTsKICAgICAgICBpZiAoYXJncy50eXBlID09PSAiMHg3YiIpCiAgICAgICAgICB0cmFuc2FjdGlvbi50eXBlID0gImNpcDY0IjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGlmIChhcmdzLnR5cGUgPT09ICIweDdjIikKICAgICAgICAgICAgdHJhbnNhY3Rpb24udHlwZSA9ICJjaXA0MiI7CiAgICAgICAgICB0cmFuc2FjdGlvbi5nYXRld2F5RmVlID0gYXJncy5nYXRld2F5RmVlID8gaGV4VG9CaWdJbnQoYXJncy5nYXRld2F5RmVlKSA6IG51bGw7CiAgICAgICAgICB0cmFuc2FjdGlvbi5nYXRld2F5RmVlUmVjaXBpZW50ID0gYXJncy5nYXRld2F5RmVlUmVjaXBpZW50OwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICAgIH0KICAgIH0pLAogICAgdHJhbnNhY3Rpb25SZXF1ZXN0OiAvKiBAX19QVVJFX18gKi8gZGVmaW5lVHJhbnNhY3Rpb25SZXF1ZXN0KHsKICAgICAgZm9ybWF0KGFyZ3MpIHsKICAgICAgICBjb25zdCByZXF1ZXN0ID0ge307CiAgICAgICAgaWYgKGFyZ3MuZmVlQ3VycmVuY3kpCiAgICAgICAgICByZXF1ZXN0LmZlZUN1cnJlbmN5ID0gYXJncy5mZWVDdXJyZW5jeTsKICAgICAgICBpZiAoaXNDSVA2NChhcmdzKSkKICAgICAgICAgIHJlcXVlc3QudHlwZSA9ICIweDdiIjsKICAgICAgICByZXR1cm4gcmVxdWVzdDsKICAgICAgfQogICAgfSkKICB9OwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NlbG8vc2VyaWFsaXplcnMuanMKICBpbml0X2FkZHJlc3MoKTsKICBpbml0X2Jhc2UoKTsKICBpbml0X2NoYWluKCk7CiAgaW5pdF9ub2RlKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBpbml0X2NvbmNhdCgpOwogIGluaXRfdG9IZXgoKTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbjQodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkgewogICAgaWYgKGlzQ0lQNjQodHJhbnNhY3Rpb24pKQogICAgICByZXR1cm4gc2VyaWFsaXplVHJhbnNhY3Rpb25DSVA2NCh0cmFuc2FjdGlvbiwgc2lnbmF0dXJlKTsKICAgIHJldHVybiBzZXJpYWxpemVUcmFuc2FjdGlvbjModHJhbnNhY3Rpb24sIHNpZ25hdHVyZSk7CiAgfQogIHZhciBzZXJpYWxpemVyczMgPSB7CiAgICB0cmFuc2FjdGlvbjogc2VyaWFsaXplVHJhbnNhY3Rpb240CiAgfTsKICBmdW5jdGlvbiBzZXJpYWxpemVUcmFuc2FjdGlvbkNJUDY0KHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpIHsKICAgIGFzc2VydFRyYW5zYWN0aW9uQ0lQNjQodHJhbnNhY3Rpb24pOwogICAgY29uc3QgeyBjaGFpbklkLCBnYXMsIG5vbmNlLCB0bywgdmFsdWUsIG1heEZlZVBlckdhcywgbWF4UHJpb3JpdHlGZWVQZXJHYXMsIGFjY2Vzc0xpc3QsIGZlZUN1cnJlbmN5LCBkYXRhIH0gPSB0cmFuc2FjdGlvbjsKICAgIGNvbnN0IHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9IFsKICAgICAgdG9IZXgoY2hhaW5JZCksCiAgICAgIG5vbmNlID8gdG9IZXgobm9uY2UpIDogIjB4IiwKICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXMgPyB0b0hleChtYXhQcmlvcml0eUZlZVBlckdhcykgOiAiMHgiLAogICAgICBtYXhGZWVQZXJHYXMgPyB0b0hleChtYXhGZWVQZXJHYXMpIDogIjB4IiwKICAgICAgZ2FzID8gdG9IZXgoZ2FzKSA6ICIweCIsCiAgICAgIHRvID8/ICIweCIsCiAgICAgIHZhbHVlID8gdG9IZXgodmFsdWUpIDogIjB4IiwKICAgICAgZGF0YSA/PyAiMHgiLAogICAgICBzZXJpYWxpemVBY2Nlc3NMaXN0KGFjY2Vzc0xpc3QpLAogICAgICBmZWVDdXJyZW5jeSwKICAgICAgLi4udG9ZUGFyaXR5U2lnbmF0dXJlQXJyYXkodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSkKICAgIF07CiAgICByZXR1cm4gY29uY2F0SGV4KFsKICAgICAgIjB4N2IiLAogICAgICB0b1JscChzZXJpYWxpemVkVHJhbnNhY3Rpb24pCiAgICBdKTsKICB9CiAgdmFyIE1BWF9NQVhfRkVFX1BFUl9HQVMgPSAybiAqKiAyNTZuIC0gMW47CiAgZnVuY3Rpb24gYXNzZXJ0VHJhbnNhY3Rpb25DSVA2NCh0cmFuc2FjdGlvbikgewogICAgY29uc3QgeyBjaGFpbklkLCBtYXhQcmlvcml0eUZlZVBlckdhcywgZ2FzUHJpY2UsIG1heEZlZVBlckdhcywgdG8sIGZlZUN1cnJlbmN5IH0gPSB0cmFuc2FjdGlvbjsKICAgIGlmIChjaGFpbklkIDw9IDApCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhaW5JZEVycm9yKHsgY2hhaW5JZCB9KTsKICAgIGlmICh0byAmJiAhaXNBZGRyZXNzKHRvKSkKICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiB0byB9KTsKICAgIGlmIChnYXNQcmljZSkKICAgICAgdGhyb3cgbmV3IEJhc2VFcnJvcjIoImBnYXNQcmljZWAgaXMgbm90IGEgdmFsaWQgQ0lQLTY0IFRyYW5zYWN0aW9uIGF0dHJpYnV0ZS4iKTsKICAgIGlmIChpc1ByZXNlbnQobWF4RmVlUGVyR2FzKSAmJiBtYXhGZWVQZXJHYXMgPiBNQVhfTUFYX0ZFRV9QRVJfR0FTKQogICAgICB0aHJvdyBuZXcgRmVlQ2FwVG9vSGlnaEVycm9yKHsgbWF4RmVlUGVyR2FzIH0pOwogICAgaWYgKGlzUHJlc2VudChtYXhQcmlvcml0eUZlZVBlckdhcykgJiYgaXNQcmVzZW50KG1heEZlZVBlckdhcykgJiYgbWF4UHJpb3JpdHlGZWVQZXJHYXMgPiBtYXhGZWVQZXJHYXMpCiAgICAgIHRocm93IG5ldyBUaXBBYm92ZUZlZUNhcEVycm9yKHsgbWF4RmVlUGVyR2FzLCBtYXhQcmlvcml0eUZlZVBlckdhcyB9KTsKICAgIGlmIChpc1ByZXNlbnQoZmVlQ3VycmVuY3kpICYmICFpc0FkZHJlc3MoZmVlQ3VycmVuY3kpKSB7CiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgZmVlQ3VycmVuY3lgIE1VU1QgYmUgYSB0b2tlbiBhZGRyZXNzIGZvciBDSVAtNjQgdHJhbnNhY3Rpb25zLiIpOwogICAgfQogICAgaWYgKGlzRW1wdHkoZmVlQ3VycmVuY3kpKSB7CiAgICAgIHRocm93IG5ldyBCYXNlRXJyb3IyKCJgZmVlQ3VycmVuY3lgIG11c3QgYmUgcHJvdmlkZWQgZm9yIENJUC02NCB0cmFuc2FjdGlvbnMuIik7CiAgICB9CiAgfQoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NlbG8vY2hhaW5Db25maWcuanMKICB2YXIgY2hhaW5Db25maWczID0gewogICAgZm9ybWF0dGVyczogZm9ybWF0dGVyczMsCiAgICBzZXJpYWxpemVyczogc2VyaWFsaXplcnMzLAogICAgZmVlcwogIH07CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NlbG8uanMKICB2YXIgY2VsbyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzMsCiAgICBpZDogNDIyMjAsCiAgICBuYW1lOiAiQ2VsbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDRUxPIiwKICAgICAgc3ltYm9sOiAiQ0VMTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2Zvcm5vLmNlbG8ub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ2VsbyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9jZWxvc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkuY2Vsb3NjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEzMTEyNTk5CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jZWxvQWxmYWpvcmVzLmpzCiAgdmFyIGNlbG9BbGZham9yZXMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWczLAogICAgaWQ6IDQ0Nzg3LAogICAgbmFtZTogIkFsZmFqb3JlcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDRUxPIiwKICAgICAgc3ltYm9sOiAiQS1DRUxPIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hbGZham9yZXMtZm9ybm8uY2Vsby10ZXN0bmV0Lm9yZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNlbG8gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuY2Vsby5vcmcvYWxmYWpvcmVzIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmNlbG8ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDU2OTAwMQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jaGlsaXouanMKICB2YXIgY2hpbGl6ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4ODg4OCwKICAgIG5hbWU6ICJDaGlsaXogQ2hhaW4iLAogICAgbmV0d29yazogImNoaWxpei1jaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDSFoiLAogICAgICBzeW1ib2w6ICJDSFoiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWwogICAgICAgICAgImh0dHBzOi8vcnBjLmFua3IuY29tL2NoaWxpeiIsCiAgICAgICAgICAiaHR0cHM6Ly9jaGlsaXotcnBjLnB1YmxpY25vZGUuY29tIgogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ2hpbGl6IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4uY2hpbGl6LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLmNoaWxpei5jb20vYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NoaXBzLmpzCiAgdmFyIGNoaXBzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyODgyLAogICAgbmFtZTogIkNoaXBzIE5ldHdvcmsiLAogICAgbmV0d29yazogIkNISVBTIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIklPVEEiLAogICAgICBzeW1ib2w6ICJJT1RBIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL25vZGUuY2hpcHMub29vL3dhc3AvYXBpL3YxL2NoYWlucy9pb3RhMXBwM2QzbW5hcDN1Zm1ncW5qc253MzQ0c3FtZjVzdmpoMjZ5Mmtobm1jODlzdjY3ODh5M3IyMDdhOGZuL2V2bSIKICAgICAgICBdCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY2xhc3NpYy5qcwogIHZhciBjbGFzc2ljID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2MSwKICAgIG5hbWU6ICJFdGhlcmV1bSBDbGFzc2ljIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUQyIsCiAgICAgIHN5bWJvbDogIkVUQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2V0Yy5yaXZldC5saW5rIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmNvbS9ldGMvbWFpbm5ldCIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jb25mbHV4RVNwYWNlLmpzCiAgdmFyIGNvbmZsdXhFU3BhY2UgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMzAsCiAgICBuYW1lOiAiQ29uZmx1eCBlU3BhY2UiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkNvbmZsdXgiLCBzeW1ib2w6ICJDRlgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldm0uY29uZmx1eHJwYy5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXZtLmNvbmZsdXhycGMuY29tL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ29uZmx1eFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZXZtLmNvbmZsdXhzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhFRmYwMDc4OTEwZjYzOGNkODE5OTZjYzExN2JjY0QzZURmMkIwNzJGIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDY4NjAyOTM1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY29uZmx1eEVTcGFjZVRlc3RuZXQuanMKICB2YXIgY29uZmx1eEVTcGFjZVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDcxLAogICAgbmFtZTogIkNvbmZsdXggZVNwYWNlIFRlc3RuZXQiLAogICAgbmV0d29yazogImNmeC1lc3BhY2UtdGVzdG5ldCIsCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkNvbmZsdXgiLCBzeW1ib2w6ICJDRlgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldm10ZXN0bmV0LmNvbmZsdXhycGMuY29tIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2V2bXRlc3RuZXQuY29uZmx1eHJwYy5jb20vd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJDb25mbHV4U2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ldm10ZXN0bmV0LmNvbmZsdXhzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhFRmYwMDc4OTEwZjYzOGNkODE5OTZjYzExN2JjY0QzZURmMkIwNzJGIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDExNzQ5OTA1MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2NvcmVEYW8uanMKICB2YXIgY29yZURhbyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExNiwKICAgIG5hbWU6ICJDb3JlIERhbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDb3JlIiwKICAgICAgc3ltYm9sOiAiQ09SRSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5jb3JlZGFvLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNvcmVEYW8iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5jb3JlZGFvLm9yZyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTkwNzkzNAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3JhYi5qcwogIHZhciBjcmFiID0gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQ0LAogICAgbmFtZTogIkNyYWIgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDcmFiIE5ldHdvcmsgTmF0aXZlIFRva2VuIiwKICAgICAgc3ltYm9sOiAiQ1JBQiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vY3JhYi1ycGMuZGFyd2luaWEubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9jcmFiLXJwYy5kYXJ3aW5pYS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsgbmFtZTogIkJsb2Nrc2NvdXQiLCB1cmw6ICJodHRwczovL2NyYWItc2Nhbi5kYXJ3aW5pYS5uZXR3b3JrIiB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwMzI1OTMKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jcm9ub3MuanMKICB2YXIgY3Jvbm9zID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNSwKICAgIG5hbWU6ICJDcm9ub3MgTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJDcm9ub3MiLAogICAgICBzeW1ib2w6ICJDUk8iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldm0uY3Jvbm9zLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNyb25vcyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5jcm9ub3Mub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLWFwaS5jcm9ub3Mub3JnL21haW5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5NjMxMTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jcm9ub3N6a0VWTS5qcwogIHZhciBjcm9ub3N6a0VWTSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzg4LAogICAgbmFtZTogIkNyb25vcyB6a0VWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkNyb25vcyB6a0VWTSBDUk8iLAogICAgICBzeW1ib2w6ICJ6a0NSTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL21haW5uZXQuemtldm0uY3Jvbm9zLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNyb25vcyB6a0VWTSAoTWFpbm5ldCkgQ2hhaW4gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuemtldm0uY3Jvbm9zLm9yZyIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9jcm9ub3N6a0VWTVRlc3RuZXQuanMKICB2YXIgY3Jvbm9zemtFVk1UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyODIsCiAgICBuYW1lOiAiQ3Jvbm9zIHprRVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ3Jvbm9zIHprRVZNIFRlc3QgQ29pbiIsCiAgICAgIHN5bWJvbDogInprVENSTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuemtldm0uY3Jvbm9zLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNyb25vcyB6a0VWTSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnprZXZtLmNyb25vcy5vcmcvdGVzdG5ldCIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3Jvbm9zVGVzdG5ldC5qcwogIHZhciBjcm9ub3NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMzgsCiAgICBuYW1lOiAiQ3Jvbm9zIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ1JPIiwKICAgICAgc3ltYm9sOiAidENSTyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2V2bS10My5jcm9ub3Mub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ3Jvbm9zIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2Nyb25vcy5vcmcvZXhwbG9yZXIvdGVzdG5ldDMiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTAxOTEyNTEKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3Jvc3NiZWxsLmpzCiAgdmFyIGNyb3NzYmVsbCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzczNywKICAgIG5hbWU6ICJDcm9zc2JlbGwiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ1NCIiwKICAgICAgc3ltYm9sOiAiQ1NCIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuY3Jvc3NiZWxsLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ3Jvc3NTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3NjYW4uY3Jvc3NiZWxsLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NjYW4uY3Jvc3NiZWxsLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAzODI0NjAzMQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2N1cnRpcy5qcwogIHZhciBjdXJ0aXMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMzMTExLAogICAgbmFtZTogIkN1cnRpcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQXBlQ29pbiIsIHN5bWJvbDogIkFQRSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5jdXJ0aXMuYXBlY2hhaW4uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ3VydGlzIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmN1cnRpcy5hcGVjaGFpbi5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2N5YmVyLmpzCiAgdmFyIGN5YmVyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NTYwLAogICAgbmFtZTogIkN5YmVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2N5YmVyLmFsdC50ZWNobm9sb2d5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9jeWJlcnNjYW4uY28iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vY3liZXJzY2FuLmNvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvY3liZXJUZXN0bmV0LmpzCiAgdmFyIGN5YmVyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExNTU3NTYwLAogICAgbmFtZTogIkN5YmVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vY3liZXItdGVzdG5ldC5hbHQudGVjaG5vbG9neSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5jeWJlcnNjYW4uY28iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC5jeWJlcnNjYW4uY28vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhmZmMzOTFGMDAxODI2OWQ0NzU4QUVBMWExNDQ3NzJFOEZCOTk1NDVFIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwNDU0NQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kYXJ3aW5pYS5qcwogIHZhciBkYXJ3aW5pYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDYsCiAgICBuYW1lOiAiRGFyd2luaWEgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJSSU5HIiwKICAgICAgc3ltYm9sOiAiUklORyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmRhcndpbmlhLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLmRhcndpbmlhLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogeyBuYW1lOiAiRXhwbG9yZXIiLCB1cmw6ICJodHRwczovL2V4cGxvcmVyLmRhcndpbmlhLm5ldHdvcmsiIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjk0MjAKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kY2hhaW4uanMKICB2YXIgZGNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAyNzE2NDQ2NDI5ODM3ZTMsCiAgICBuYW1lOiAiRGNoYWluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2RjaGFpbi0yNzE2NDQ2NDI5ODM3MDAwLTEuanNvbnJwYy5zYWdhcnBjLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRGNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2RjaGFpbi0yNzE2NDQ2NDI5ODM3MDAwLTEuc2FnYWV4cGxvcmVyLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1kY2hhaW4tMjcxNjQ0NjQyOTgzNzAwMC0xLnNhZ2FleHBsb3Jlci5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kY2hhaW5UZXN0bmV0LmpzCiAgdmFyIGRjaGFpblRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI3MTMwMTc5OTc1NzhlMywKICAgIG5hbWU6ICJEY2hhaW4gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL2RjaGFpbnRlc3RuZXQtMjcxMzAxNzk5NzU3ODAwMC0xLmpzb25ycGMudGVzdG5ldC5zYWdhcnBjLmlvIgogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRGNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2RjaGFpbnRlc3RuZXQtMjcxMzAxNzk5NzU3ODAwMC0xLnRlc3RuZXQuc2FnYWV4cGxvcmVyLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1kY2hhaW50ZXN0bmV0LTI3MTMwMTc5OTc1NzgwMDAtMS50ZXN0bmV0LnNhZ2FleHBsb3Jlci5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cwogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kZWZpY2hhaW5Fdm0uanMKICB2YXIgZGVmaWNoYWluRXZtID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMTMwLAogICAgbmV0d29yazogImRlZmljaGFpbi1ldm0iLAogICAgbmFtZTogIkRlRmlDaGFpbiBFVk0gTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRGVGaUNoYWluIiwKICAgICAgc3ltYm9sOiAiREZJIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC5tYWlubmV0Lm9jZWFuLmplbGx5ZmlzaHNkay5jb20iXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZXRoLm1haW5uZXQub2NlYW4uamVsbHlmaXNoc2RrLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRlRmlTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL21ldGEuZGVmaXNjYW4ubGl2ZSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMzc4NTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kZWZpY2hhaW5Fdm1UZXN0bmV0LmpzCiAgdmFyIGRlZmljaGFpbkV2bVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMzEsCiAgICBuZXR3b3JrOiAiZGVmaWNoYWluLWV2bS10ZXN0bmV0IiwKICAgIG5hbWU6ICJEZUZpQ2hhaW4gRVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkRlRmlDaGFpbiIsCiAgICAgIHN5bWJvbDogIkRGSSIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldGgudGVzdG5ldC5vY2Vhbi5qZWxseWZpc2hzZGsuY29tIl0KICAgICAgfSwKICAgICAgcHVibGljOiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC50ZXN0bmV0Lm9jZWFuLmplbGx5ZmlzaHNkay5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJEZUZpU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9tZXRhLmRlZmlzY2FuLmxpdmUvP25ldHdvcms9VGVzdE5ldCIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNTY0NjIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZGVnZW4uanMKICB2YXIgZGVnZW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDY2NjY2NjY2NiwKICAgIG5hbWU6ICJEZWdlbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJEZWdlbiIsCiAgICAgIHN5bWJvbDogIkRFR0VOIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZGVnZW4udGlwcyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuZGVnZW4udGlwcyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRlZ2VuIENoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmRlZ2VuLnRpcHMiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZGVnZW4udGlwcy9hcGkvdjIiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZGZrLmpzCiAgdmFyIGRmayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTM5MzUsCiAgICBuYW1lOiAiREZLIENoYWluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkpld2VsIiwKICAgICAgc3ltYm9sOiAiSkVXRUwiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3N1Ym5ldHMuYXZheC5uZXR3b3JrL2RlZmkta2luZ2RvbXMvZGZrLWNoYWluL3JwYyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRGS1N1Ym5ldFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc3VibmV0cy5hdmF4Lm5ldHdvcmsvZGVmaS1raW5nZG9tcyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDc5MDU1MQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2RvZG9jaGFpblRlc3RuZXQuanMKICB2YXIgZG9kb2NoYWluVGVzdG5ldCA9IGRlZmluZUNoYWluKHsKICAgIGlkOiA1MzQ1NywKICAgIG5hbWU6ICJET0RPY2hhaW4gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJET0RPIiwgc3ltYm9sOiAiRE9ETyIgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9kb2RvY2hhaW4tdGVzdG5ldC5hbHQudGVjaG5vbG9neSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9kb2RvY2hhaW4tdGVzdG5ldC5hbHQudGVjaG5vbG9neS93cyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRPRE9jaGFpbiBUZXN0bmV0IChTZXBvbGlhKSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LXNjYW4uZG9kb2NoYWluLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZG9nZWNoYWluLmpzCiAgdmFyIGRvZ2VjaGFpbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMmUzLAogICAgbmFtZTogIkRvZ2VjaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJXcmFwcGVkIERvZ2Vjb2luIiwKICAgICAgc3ltYm9sOiAiV0RPR0UiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMuZG9nZWNoYWluLmRvZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRvZ2VDaGFpbkV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmRvZ2VjaGFpbi5kb2ciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZG9nZWNoYWluLmRvZy9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweDY4YTg2MDlhNjBhMDA4RUZBNjMzZGZkZWM1OTJjMDNCMDMwY0M1MDgiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjUzODQwMzEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9kcmV5ZXJ4TWFpbm5ldC5qcwogIHZhciBkcmV5ZXJ4TWFpbm5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjM0NTEsCiAgICBuYW1lOiAiRHJleWVyWCBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJEcmV5ZXJYIiwKICAgICAgc3ltYm9sOiAiRFJYIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5kcmV5ZXJ4LmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRyZXllclggU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLmRyZXllcnguY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2RyZXllcnhUZXN0bmV0LmpzCiAgdmFyIGRyZXllcnhUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMzQ1MiwKICAgIG5hbWU6ICJEcmV5ZXJYIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkRyZXllclgiLAogICAgICBzeW1ib2w6ICJEUlgiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHA6Ly90ZXN0bmV0LXJwYy5kcmV5ZXJ4LmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkRyZXllclggVGVzdG5ldCBTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQtc2Nhbi5kcmV5ZXJ4LmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZWRnZWxlc3MuanMKICB2YXIgZWRnZWxlc3MgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIwMjYsCiAgICBuYW1lOiAiRWRnZWxlc3MgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRWRnZWxlc3MgV3JhcHBlZCBFVEgiLAogICAgICBzeW1ib2w6ICJFd0VUSCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZWRnZWxlc3MubmV0d29yay9odHRwIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5lZGdlbGVzcy5uZXR3b3JrL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWRnZWxlc3MgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuZWRnZWxlc3MubmV0d29yayIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lZGdlbGVzc1Rlc3RuZXQuanMKICB2YXIgZWRnZWxlc3NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDIsCiAgICBuYW1lOiAiRWRnZWxlc3MgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiRWRnZWxlc3MgV3JhcHBlZCBFVEgiLAogICAgICBzeW1ib2w6ICJFd0VUSCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9lZGdlbGVzcy10ZXN0bmV0LnJwYy5jYWxkZXJhLnh5ei9odHRwIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2VkZ2VsZXNzLXRlc3RuZXQucnBjLmNhbGRlcmEueHl6L3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWRnZWxlc3MgVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmV4cGxvcmVyLmVkZ2VsZXNzLm5ldHdvcmsiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZWRnZXdhcmUuanMKICB2YXIgZWRnZXdhcmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIwMjEsCiAgICBuYW1lOiAiRWRnZXdhcmUgRWRnZUVWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVkZ2V3YXJlIiwKICAgICAgc3ltYm9sOiAiRURHIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZWRnZXdhcmUtZXZtLmplbGxpZWRvd2wubmV0Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWRnc2NhbiBieSBCaGFyYXRoY29vcmciLAogICAgICAgIHVybDogImh0dHBzOi8vZWRnc2Nhbi5saXZlIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2VkZ3NjYW4ubGl2ZS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTgxMTc4NzIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lZGdld2FyZVRlc3RuZXQuanMKICB2YXIgZWRnZXdhcmVUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDIyLAogICAgbmFtZTogIkJlcmVzaGVldCBCZXJlRVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiVGVzdG5ldCBFREciLAogICAgICBzeW1ib2w6ICJ0RURHIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYmVyZXNoZWV0LWV2bS5qZWxsaWVkb3dsLm5ldCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkVkZ3NjYW4gYnkgQmhhcmF0aGNvb3JnIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuZWRnc2Nhbi5saXZlIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQuZWRnc2Nhbi5saXZlL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lb24uanMKICB2YXIgZW9uID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3MzMyLAogICAgbmFtZTogIkhvcml6ZW4gRU9OIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlpFTiIsCiAgICAgIHN5bWJvbDogIlpFTiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2Vvbi1ycGMuaG9yaXplbmxhYnMuaW8vZXRodjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFT04gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZW9uLWV4cGxvcmVyLmhvcml6ZW5sYWJzLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lb3MuanMKICB2YXIgZW9zID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNzc3NywKICAgIG5hbWU6ICJFT1MgRVZNIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVPUyIsCiAgICAgIHN5bWJvbDogIkVPUyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FwaS5ldm0uZW9zbmV0d29yay5jb20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFT1MgRVZNIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmV2bS5lb3NuZXR3b3JrLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0uZW9zbmV0d29yay5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc5NDM5MzMKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9lb3NUZXN0bmV0LmpzCiAgdmFyIGVvc1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE1NTU3LAogICAgbmFtZTogIkVPUyBFVk0gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFT1MiLAogICAgICBzeW1ib2w6ICJFT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkudGVzdG5ldC5ldm0uZW9zbmV0d29yay5jb20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFT1MgRVZNIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5ldm0uZW9zbmV0d29yay5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5ldm0uZW9zbmV0d29yay5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDkwNjc5NDAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZXRoZXJsaW5rLmpzCiAgdmFyIGV0aGVybGluayA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDI3OTMsCiAgICBuYW1lOiAiRXRoZXJsaW5rIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlRleiIsCiAgICAgIHN5bWJvbDogIlhUWiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL25vZGUubWFpbm5ldC5ldGhlcmxpbmsuY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJsaW5rIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmV0aGVybGluay5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzM4OTkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ldGhlcmxpbmtUZXN0bmV0LmpzCiAgdmFyIGV0aGVybGlua1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODEyMywKICAgIG5hbWU6ICJFdGhlcmxpbmsgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJUZXoiLAogICAgICBzeW1ib2w6ICJYVFoiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ub2RlLmdob3N0bmV0LmV0aGVybGluay5jb20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcmxpbmsgVGVzdG5ldCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLmV0aGVybGluay5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2V2bW9zLmpzCiAgdmFyIGV2bW9zID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5MDAxLAogICAgbmFtZTogIkV2bW9zIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV2bW9zIiwKICAgICAgc3ltYm9sOiAiRVZNT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldGguYmQuZXZtb3Mub3JnOjg1NDUiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdm1vcyBCbG9jayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9lc2Nhbi5saXZlIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2V2bW9zVGVzdG5ldC5qcwogIHZhciBldm1vc1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDllMywKICAgIG5hbWU6ICJFdm1vcyBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV2bW9zIiwKICAgICAgc3ltYm9sOiAiRVZNT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ldGguYmQuZXZtb3MuZGV2Ojg1NDUiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdm1vcyBUZXN0bmV0IEJsb2NrIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V2bS5ldm1vcy5kZXYvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2VrdGEuanMKICB2YXIgZWt0YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTk5NCwKICAgIG5hbWU6ICJFa3RhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVLVEEiLAogICAgICBzeW1ib2w6ICJFS1RBIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbWFpbi5la3RhLmlvIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRWt0YXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZWt0YXNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZWt0YXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2VrdGFUZXN0bmV0LmpzCiAgdmFyIGVrdGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDA0LAogICAgbmFtZTogIkVrdGEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFS1RBIiwKICAgICAgc3ltYm9sOiAiRUtUQSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3Rlc3QuZWt0YS5pbzo4NTQ1Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGVzdCBFa3Rhc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0LmVrdGFzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3QuZWt0YXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mYW50b20uanMKICB2YXIgZmFudG9tID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNTAsCiAgICBuYW1lOiAiRmFudG9tIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkZhbnRvbSIsCiAgICAgIHN5bWJvbDogIkZUTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5hbmtyLmNvbS9mYW50b20iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGVE1TY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2Z0bXNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5mdG1zY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzMwMDE5ODcKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mYW50b21Tb25pY1Rlc3RuZXQuanMKICB2YXIgZmFudG9tU29uaWNUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2NDI0MCwKICAgIG5hbWU6ICJGYW50b20gU29uaWMgT3BlbiBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJmYW50b20tc29uaWMtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJGYW50b20iLAogICAgICBzeW1ib2w6ICJGVE0iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGNhcGkuc29uaWMuZmFudG9tLm5ldHdvcmsiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGYW50b20gU29uaWMgT3BlbiBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3B1YmxpYy1zb25pYy5mYW50b20ubmV0d29yayIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmFudG9tVGVzdG5ldC5qcwogIHZhciBmYW50b21UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MDAyLAogICAgbmFtZTogIkZhbnRvbSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkZhbnRvbSIsCiAgICAgIHN5bWJvbDogIkZUTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy50ZXN0bmV0LmZhbnRvbS5uZXR3b3JrIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRlRNU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmZ0bXNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQuZnRtc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDgzMjg2ODgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmliby5qcwogIHZhciBmaWJvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjMwNiwKICAgIG5hbWU6ICJGaWJvIENoYWluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogImZpYm8iLAogICAgICBzeW1ib2w6ICJGSUJPIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbmV0d29yay5oenJvYy5hcnQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWJvU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLmZpYm9jaGFpbi5vcmciCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmlsZWNvaW4uanMKICB2YXIgZmlsZWNvaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxNCwKICAgIG5hbWU6ICJGaWxlY29pbiBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogImZpbGVjb2luIiwKICAgICAgc3ltYm9sOiAiRklMIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLm5vZGUuZ2xpZi5pby9ycGMvdjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWxmb3giLAogICAgICAgIHVybDogImh0dHBzOi8vZmlsZm94LmluZm8vZW4iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzMyODU5NAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZpbGVjb2luQ2FsaWJyYXRpb24uanMKICB2YXIgZmlsZWNvaW5DYWxpYnJhdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzE0MTU5LAogICAgbmFtZTogIkZpbGVjb2luIENhbGlicmF0aW9uIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogInRlc3RuZXQgZmlsZWNvaW4iLAogICAgICBzeW1ib2w6ICJ0RklMIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vYXBpLmNhbGlicmF0aW9uLm5vZGUuZ2xpZi5pby9ycGMvdjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWxzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2NhbGlicmF0aW9uLmZpbHNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZpbGVjb2luSHlwZXJzcGFjZS5qcwogIHZhciBmaWxlY29pbkh5cGVyc3BhY2UgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxNDEsCiAgICBuYW1lOiAiRmlsZWNvaW4gSHlwZXJzcGFjZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJ0ZXN0bmV0IGZpbGVjb2luIiwKICAgICAgc3ltYm9sOiAidEZJTCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FwaS5oeXBlcnNwYWNlLm5vZGUuZ2xpZi5pby9ycGMvdjEiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGaWxmb3giLAogICAgICAgIHVybDogImh0dHBzOi8vaHlwZXJzcGFjZS5maWxmb3guaW5mby9lbiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmxhcmUuanMKICB2YXIgZmxhcmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0LAogICAgbmFtZTogIkZsYXJlIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiZmxhcmUiLAogICAgICBzeW1ib2w6ICJGTFIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9mbGFyZS1hcGkuZmxhcmUubmV0d29yay9leHQvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGbGFyZSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9mbGFyZS1leHBsb3Jlci5mbGFyZS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2ZsYXJlLWV4cGxvcmVyLmZsYXJlLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZsYXJlVGVzdG5ldC5qcwogIHZhciBmbGFyZVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExNCwKICAgIG5hbWU6ICJDb3N0b24yIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogImNvc3RvbjJmbGFyZSIsCiAgICAgIHN5bWJvbDogIkMyRkxSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vY29zdG9uMi1hcGkuZmxhcmUubmV0d29yay9leHQvQy9ycGMiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJDb3N0b24yIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2Nvc3RvbjItZXhwbG9yZXIuZmxhcmUubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9jb3N0b24yLWV4cGxvcmVyLmZsYXJlLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mbG93UHJldmlld25ldC5qcwogIHZhciBmbG93UHJldmlld25ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNjQ2LAogICAgbmFtZTogIkZsb3dFVk0gUHJldmlld25ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJGbG93IiwKICAgICAgc3ltYm9sOiAiRkxPVyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcHJldmlld25ldC5ldm0ubm9kZXMub25mbG93Lm9yZyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlByZXZpZXduZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcHJldmlld25ldC5mbG93ZGl2ZXIuaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjIwNQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Zsb3dNYWlubmV0LmpzCiAgdmFyIGZsb3dNYWlubmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NDcsCiAgICBuYW1lOiAiRmxvd0VWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkZsb3ciLAogICAgICBzeW1ib2w6ICJGTE9XIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmV2bS5ub2Rlcy5vbmZsb3cub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFpbm5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9mbG93ZGl2ZXIuaW8iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZmxvd1Rlc3RuZXQuanMKICB2YXIgZmxvd1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU0NSwKICAgIG5hbWU6ICJGbG93RVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRmxvdyIsCiAgICAgIHN5bWJvbDogIkZMT1ciCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuZXZtLm5vZGVzLm9uZmxvdy5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGbG93IERpdmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuZmxvd2RpdmVyLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEzNzUxOAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Zvcm1hLmpzCiAgdmFyIGZvcm1hID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5ODQxMjIsCiAgICBuYW1lOiAiRm9ybWEiLAogICAgbmV0d29yazogImZvcm1hIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIHN5bWJvbDogIlRJQSIsCiAgICAgIG5hbWU6ICJUSUEiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmZvcm1hLmFydCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly93cy5mb3JtYS5hcnQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGb3JtYSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5mb3JtYS5hcnQiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGQ1M0M2RkZCMTIzRjczNDlBMzI5ODBGODdmYWVEOEZmRGM5ZWYwNzkiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjUyNzA1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZm91bmRyeS5qcwogIHZhciBmb3VuZHJ5ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMTMzNywKICAgIG5hbWU6ICJGb3VuZHJ5IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cDovLzEyNy4wLjAuMTo4NTQ1Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzOi8vMTI3LjAuMC4xOjg1NDUiXQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2ZyYXh0YWwuanMKICB2YXIgc291cmNlSWQxMiA9IDE7CiAgdmFyIGZyYXh0YWwgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI1MiwKICAgIG5hbWU6ICJGcmF4dGFsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJGcmF4IEV0aGVyIiwgc3ltYm9sOiAiZnJ4RVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmZyYXguY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiZnJheHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZnJheHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5mcmF4c2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMTJdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg2NkNDOTE2RWQ1QzZDMkZBOTcwMTRmN0QxY0QxNDE1MjhBZTE3MWU0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDEyXTogewogICAgICAgICAgYWRkcmVzczogIjB4MzZjYjY1YzE5NjdBMEZiMEVFRTExNTY5QzUxQzJmMmFBMUNhNmY2RCIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MTM1MzIzCiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkMTJdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgzNEMwYkQ1ODc3QTVFZTcwOTlEMGY1Njg4RDY1RjRiQjkxNThCREUyIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMTkxMzUzMjMKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQxMgogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mcmF4dGFsVGVzdG5ldC5qcwogIHZhciBzb3VyY2VJZDEzID0gMTdlMzsKICB2YXIgZnJheHRhbFRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDI1MjIsCiAgICBuYW1lOiAiRnJheHRhbCBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJGcmF4IEV0aGVyIiwgc3ltYm9sOiAiZnJ4RVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQuZnJheC5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJmcmF4c2NhbiB0ZXN0bmV0IiwKICAgICAgICB1cmw6ICJodHRwczovL2hvbGVza3kuZnJheHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1ob2xlc2t5LmZyYXhzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQxM106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDcxNUVBNjREQTEzRjRkMDgzMWVjZTRBZDNFOGMxYWEwMTMxNjdGMzIiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTNdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhCOWM2NEJmQTQ5OGQ1YjlhODM5OEVkNmY0NmViNzZkOTBkRTU1MDVkIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzE4NDE2CiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkMTNdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgwQmFhZkMyMTcxNjJmNjQ5MzA5MDlhRDlmMkIyNzEyNTEyMWQ2MzMyIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzE4NDE2CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTMKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZnVua2lNYWlubmV0LmpzCiAgdmFyIHNvdXJjZUlkMTQgPSAxOwogIHZhciBmdW5raU1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDMzOTc5LAogICAgbmFtZTogIkZ1bmtpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1tYWlubmV0LmZ1bmtpY2hhaW4uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRnVua2kgTWFpbm5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9mdW5raXNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cwogICAgfSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDE0CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2Z1bmtpU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDE1ID0gMTExNTUxMTE7CiAgdmFyIGZ1bmtpU2Vwb2xpYSA9IGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAzMzk3OTAxLAogICAgbmV0d29yazogImZ1bmtpU2Vwb2xpYSIsCiAgICBuYW1lOiAiRnVua2kgU2Vwb2xpYSBTYW5kYm94IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2Z1bmtpLXRlc3RuZXQuYWx0LnRlY2hub2xvZ3kiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGdW5raSBTZXBvbGlhIFNhbmRib3ggRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS1zYW5kYm94LmZ1bmtpY2hhaW4uY29tLyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTYyMDIwNAogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZnVzZS5qcwogIHZhciBmdXNlID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjIsCiAgICBuYW1lOiAiRnVzZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRnVzZSIsIHN5bWJvbDogIkZVU0UiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcnBjLmZ1c2UuaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJGdXNlIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmZ1c2UuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZnVzZS5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTYxNDY2MjgKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9mdXNlU3BhcmtuZXQuanMKICB2YXIgZnVzZVNwYXJrbmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjMsCiAgICBuYW1lOiAiRnVzZSBTcGFya25ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU3BhcmsiLCBzeW1ib2w6ICJTUEFSSyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMuZnVzZXNwYXJrLmlvIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU3BhcmtlbnQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuZnVzZXNwYXJrLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmZ1c2VzcGFyay5pby9hcGkiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvaW90ZXguanMKICB2YXIgaW90ZXggPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQ2ODksCiAgICBuYW1lOiAiSW9UZVgiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSW9UZVgiLAogICAgICBzeW1ib2w6ICJJT1RYIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9iYWJlbC1hcGkubWFpbm5ldC5pb3RleC5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9iYWJlbC1hcGkubWFpbm5ldC5pb3RleC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIklvVGVYU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9pb3RleHNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjIxNjM2NzAKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pb3RleFRlc3RuZXQuanMKICB2YXIgaW90ZXhUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0NjkwLAogICAgbmFtZTogIklvVGVYIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSW9UZVgiLAogICAgICBzeW1ib2w6ICJJT1RYIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9iYWJlbC1hcGkudGVzdG5ldC5pb3RleC5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9iYWJlbC1hcGkudGVzdG5ldC5pb3RleC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIklvVGVYU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmlvdGV4c2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YjVjZWNENjg5NGM2ZjQ3M0VjNzI2QTE3NmYxNTEyMzk5QTJlMzU1ZCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDM0NzU5MgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9qYmMuanMKICB2YXIgamJjID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4ODk5LAogICAgbmFtZTogIkpJQkNIQUlOIEwxIiwKICAgIG5ldHdvcms6ICJqYmMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkpCQyIsIHN5bWJvbDogIkpCQyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1sMS5qaWJjaGFpbi5uZXQiXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLWwxLmppYmNoYWluLm5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwLWwxLmppYmNoYWluLm5ldCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHAtbDEuamliY2hhaW4ubmV0L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YzBDOEM0ODZEMTQ2NkM1N0VmZTEzQzJiZjAwMGQ0YzU2RjQ3Q0JkQyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMjk5MDQ4CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9qYmNUZXN0bmV0LmpzCiAgdmFyIGpiY1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDg4OTkxLAogICAgbmFtZTogIkppYmNoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInRKQkMiLCBzeW1ib2w6ICJ0SkJDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQuamliY2hhaW4ubmV0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHAudGVzdG5ldC5qaWJjaGFpbi5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwLnRlc3RuZXQuamliY2hhaW4ubmV0L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YTFhODU4YWQ5MDQxQjQ3NDFlNjIwMzU1YTNGOTZCM2M3OGU3MGVjRSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAzMjg0OAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rYXJ1cmEuanMKICB2YXIga2FydXJhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2ODYsCiAgICBuYW1lOiAiS2FydXJhIiwKICAgIG5ldHdvcms6ICJrYXJ1cmEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkthcnVyYSIsCiAgICAgIHN5bWJvbDogIktBUiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgcHVibGljOiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC1ycGMta2FydXJhLmFjYS1hcGkubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ldGgtcnBjLWthcnVyYS5hY2EtYXBpLm5ldHdvcmsiXQogICAgICB9LAogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aC1ycGMta2FydXJhLmFjYS1hcGkubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ldGgtcnBjLWthcnVyYS5hY2EtYXBpLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJLYXJ1cmEgQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0LmthcnVyYS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2Jsb2Nrc2NvdXQua2FydXJhLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ29iaS5qcwogIHZhciBnb2JpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjYzLAogICAgbmFtZTogIkhvcml6ZW4gR29iaSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlRlc3QgWkVOIiwKICAgICAgc3ltYm9sOiAidFpFTiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2dvYmktdGVzdG5ldC5ob3JpemVubGFicy5pby9ldGh2MSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkdvYmkgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZ29iaS1leHBsb3Jlci5ob3JpemVuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ29lcmxpLmpzCiAgdmFyIGdvZXJsaSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNSwKICAgIG5hbWU6ICJHb2VybGkiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkdvZXJsaSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5hbmtyLmNvbS9ldGhfZ29lcmxpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2dvZXJsaS5ldGhlcnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLWdvZXJsaS5ldGhlcnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIGVuc1JlZ2lzdHJ5OiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIKICAgICAgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhmYzRBQzc1QzQ2QzkxNGFGNTg5MmQ2ZDNlRkZjZWJENzkxNzI5M0YxIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEwMzM5MjA2CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDY1MDc2NzAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ25vc2lzLmpzCiAgdmFyIGdub3NpcyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAwLAogICAgbmFtZTogIkdub3NpcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJHbm9zaXMiLAogICAgICBzeW1ib2w6ICJ4REFJIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ25vc2lzY2hhaW4uY29tIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5nbm9zaXNjaGFpbi5jb20vd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiR25vc2lzc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9nbm9zaXNzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5nbm9zaXNzY2FuLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMTAyMjQ5MQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2dub3Npc0NoaWFkby5qcwogIHZhciBnbm9zaXNDaGlhZG8gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMjAwLAogICAgbmFtZTogIkdub3NpcyBDaGlhZG8iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiR25vc2lzIiwKICAgICAgc3ltYm9sOiAieERBSSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmNoaWFkb2NoYWluLm5ldCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuY2hpYWRvY2hhaW4ubmV0L3dzcyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5jaGlhZG9jaGFpbi5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5jaGlhZG9jaGFpbi5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NjczMTMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvZ3Jhdml0eS5qcwogIHZhciBncmF2aXR5ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjI1LAogICAgbmFtZTogIkdyYXZpdHkgQWxwaGEgTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRyIsIHN5bWJvbDogIkciLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ3Jhdml0eS54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJHcmF2aXR5IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmdyYXZpdHkueHl6IiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmdyYXZpdHkueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4ZjhhYzRCRUIyRjc1ZDJjRkZiNTg4YzYzMjUxMzQ3ZmRENjI5QjkyYyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNjg1MQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hhbS5qcwogIHZhciBoYW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDUxMTIsCiAgICBuYW1lOiAiSGFtIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkhhbSIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmhhbS5mdW4iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLmhhbS5mdW4iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIYW0gQ2hhaW4gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuaGFtLmZ1biIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5oYW0uZnVuL2FwaS92MiIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9oYXJkaGF0LmpzCiAgdmFyIGhhcmRoYXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxMzM3LAogICAgbmFtZTogIkhhcmRoYXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cDovLzEyNy4wLjAuMTo4NTQ1Il0gfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9oYXJtb255T25lLmpzCiAgdmFyIGhhcm1vbnlPbmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE2NjY2ZTUsCiAgICBuYW1lOiAiSGFybW9ueSBPbmUiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkhhcm1vbnkiLAogICAgICBzeW1ib2w6ICJPTkUiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5hbmtyLmNvbS9oYXJtb255Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiSGFybW9ueSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5oYXJtb255Lm9uZSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDE4NTc1MwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hhcXFNYWlubmV0LmpzCiAgdmFyIGhhcXFNYWlubmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMTIzNSwKICAgIG5hbWU6ICJIQVFRIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSXNsYW1pYyBDb2luIiwKICAgICAgc3ltYm9sOiAiSVNMTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmV0aC5oYXFxLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIQVFRIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmhhcXEubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5oYXFxLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hhcXFUZXN0ZWRnZTIuanMKICB2YXIgaGFxcVRlc3RlZGdlMiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTQyMTEsCiAgICBuYW1lOiAiSEFRUSBUZXN0ZWRnZSAyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIklzbGFtaWMgQ29pbiIsCiAgICAgIHN5bWJvbDogIklTTE1UIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZXRoLnRlc3RlZGdlMi5oYXFxLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIQVFRIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RlZGdlMi5oYXFxLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdGVkZ2UyLmhhcXEubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvaGVkZXJhLmpzCiAgdmFyIGhlZGVyYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjk1LAogICAgbmFtZTogIkhlZGVyYSBNYWlubmV0IiwKICAgIG5ldHdvcms6ICJoZWRlcmEtbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBzeW1ib2w6ICJIQkFSIiwKICAgICAgbmFtZTogIkhCQVIiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5oYXNoaW8uaW8vYXBpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiSGFzaHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vaGFzaHNjYW4uaW8vbWFpbm5ldCIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2hlZGVyYVRlc3RuZXQuanMKICB2YXIgaGVkZXJhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjk2LAogICAgbmFtZTogIkhlZGVyYSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJoZWRlcmEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBzeW1ib2w6ICJIQkFSIiwKICAgICAgbmFtZTogIkhCQVIiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5oYXNoaW8uaW8vYXBpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiSGFzaHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vaGFzaHNjYW4uaW8vdGVzdG5ldCIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvaGVkZXJhUHJldmlld25ldC5qcwogIHZhciBoZWRlcmFQcmV2aWV3bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyOTcsCiAgICBuYW1lOiAiSGVkZXJhIFByZXZpZXduZXQiLAogICAgbmV0d29yazogImhlZGVyYS1wcmV2aWV3bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIHN5bWJvbDogIkhCQVIiLAogICAgICBuYW1lOiAiSEJBUiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9wcmV2aWV3bmV0Lmhhc2hpby5pby9hcGkiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJIYXNoc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9oYXNoc2Nhbi5pby9wcmV2aWV3bmV0IgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9ob2xlc2t5LmpzCiAgdmFyIGhvbGVza3kgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE3ZTMsCiAgICBuYW1lOiAiSG9sZXNreSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiSG9sZXNreSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V0aGVyZXVtLWhvbGVza3ktcnBjLnB1YmxpY25vZGUuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2hvbGVza3kuZXRoZXJzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDc3CiAgICAgIH0sCiAgICAgIGVuc1JlZ2lzdHJ5OiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA4MDE2MTMKICAgICAgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhhNkFDOTM1RDQ5NzFFM0NEMTMzYjk1MGFFMDUzYkVDRDE2ZkU3ZjNiIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDk3MzQ4NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pbW11dGFibGVaa0V2bS5qcwogIHZhciBpbW11dGFibGVaa0V2bSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTMzNzEsCiAgICBuYW1lOiAiSW1tdXRhYmxlIHprRVZNIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkltbXV0YWJsZSBDb2luIiwKICAgICAgc3ltYm9sOiAiSU1YIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuaW1tdXRhYmxlLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkltbXV0YWJsZSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5pbW11dGFibGUuY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmltbXV0YWJsZS5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHgyMzZiZEE0NTg5ZTQ0ZTY4NTBmNWFDNmE3NEJmQ2EzOThhODZjNmMwIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQzMzU5NzIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pbW11dGFibGVaa0V2bVRlc3RuZXQuanMKICB2YXIgaW1tdXRhYmxlWmtFdm1UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMzQ3MywKICAgIG5hbWU6ICJJbW11dGFibGUgemtFVk0gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJJbW11dGFibGUgQ29pbiIsCiAgICAgIHN5bWJvbDogIklNWCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQuaW1tdXRhYmxlLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkltbXV0YWJsZSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQuaW1tdXRhYmxlLmNvbS8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweDJDQzc4N0VkMzY0NjAwQjAyMjIzNjFDNDE4ODMwOEZhOEU2OGJBNjAiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTk3NzM5MQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pbkVWTS5qcwogIHZhciBpbkVWTSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjUyNSwKICAgIG5hbWU6ICJpbkVWTSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkluamVjdGl2ZSIsCiAgICAgIHN5bWJvbDogIklOSiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL21haW5uZXQucnBjLmluZXZtLmNvbS9odHRwIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiaW5FVk0gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vaW5ldm0uY2FsZGVyYWV4cGxvcmVyLnh5eiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9pbmV2bS5jYWxkZXJhZXhwbG9yZXIueHl6L2FwaS92MiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTg2MDYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pb3RhLmpzCiAgdmFyIGlvdGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDg4MjIsCiAgICBuYW1lOiAiSU9UQSBFVk0iLAogICAgbmV0d29yazogImlvdGFldm0iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSU9UQSIsCiAgICAgIHN5bWJvbDogIklPVEEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2pzb24tcnBjLmV2bS5pb3RhbGVkZ2VyLm5ldCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly93cy5qc29uLXJwYy5ldm0uaW90YWxlZGdlci5uZXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0uaW90YS5vcmciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLmlvdGEub3JnL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9pb3RhVGVzdG5ldC5qcwogIHZhciBpb3RhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTA3NSwKICAgIG5hbWU6ICJJT1RBIEVWTSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJpb3RhZXZtLXRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiSU9UQSIsCiAgICAgIHN5bWJvbDogIklPVEEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2pzb24tcnBjLmV2bS50ZXN0bmV0LmlvdGFsZWRnZXIubmV0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLmpzb24tcnBjLmV2bS50ZXN0bmV0LmlvdGFsZWRnZXIubmV0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLnRlc3RuZXQuaW90YWxlZGdlci5uZXQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLnRlc3RuZXQuaW90YWxlZGdlci5uZXQvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rYWthcm90U2Vwb2xpYS5qcwogIHZhciBrYWthcm90U2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTgwMjIwMzc2NCwKICAgIG5hbWU6ICJLYWthcm90IFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEtcnBjLmtha2Fyb3Qub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiS2FrYXJvdCBTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEua2FrYXJvdHNjYW4ub3JnIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rYXZhLmpzCiAgdmFyIGthdmEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIyMjIsCiAgICBuYW1lOiAiS2F2YSBFVk0iLAogICAgbmV0d29yazogImthdmEtbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAiS2F2YSIsCiAgICAgIHN5bWJvbDogIktBVkEiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2V2bS5rYXZhLmlvIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiS2F2YSBFVk0gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8va2F2YXNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2thdmFzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzY2MTE2NQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva2F2YVRlc3RuZXQuanMKICB2YXIga2F2YVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIyMjEsCiAgICBuYW1lOiAiS2F2YSBFVk0gVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAia2F2YS10ZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJLYXZhIiwKICAgICAgc3ltYm9sOiAiS0FWQSIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZXZtLnRlc3RuZXQua2F2YS5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkthdmEgRVZNIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5rYXZhc2Nhbi5jb20vIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQua2F2YXNjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4RGYxRDcyNEE3MTY2MjYxZUVCMDE1NDE4ZmU4Yzc2NzlCQkVhN2ZkNiIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3MjQyMTc5CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2tjYy5qcwogIHZhciBrY2MgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMyMSwKICAgIG5hbWU6ICJLQ0MgTWFpbm5ldCIsCiAgICBuZXR3b3JrOiAiS0NDIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiS0NTIiwKICAgICAgc3ltYm9sOiAiS0NTIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9rY2MtcnBjLmNvbSJdCiAgICAgIH0sCiAgICAgIHB1YmxpYzogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9rY2MtcnBjLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7IG5hbWU6ICJLQ0MgRXhwbG9yZXIiLCB1cmw6ICJodHRwczovL2V4cGxvcmVyLmtjYy5pbyIgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTc2MDQzMAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva2xheXRuLmpzCiAgdmFyIGtsYXl0biA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogODIxNywKICAgIG5hbWU6ICJLbGF5dG4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiS2xheXRuIiwKICAgICAgc3ltYm9sOiAiS0xBWSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3B1YmxpYy1lbi1jeXByZXNzLmtsYXl0bi5uZXQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJLbGF5dG5TY29wZSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY29wZS5rbGF5dG4uY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDk2MDAyNDE1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva2xheXRuQmFvYmFiLmpzCiAgdmFyIGtsYXl0bkJhb2JhYiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAwMSwKICAgIG5hbWU6ICJLbGF5dG4gQmFvYmFiIFRlc3RuZXQiLAogICAgbmV0d29yazogImtsYXl0bi1iYW9iYWIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQmFvYmFiIEtsYXl0biIsCiAgICAgIHN5bWJvbDogIktMQVkiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9wdWJsaWMtZW4tYmFvYmFiLmtsYXl0bi5uZXQiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJLbGF5dG5TY29wZSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9iYW9iYWIua2xheXRuc2NvcGUuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEyMzM5MDU5MwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rb2kuanMKICB2YXIga29pID0gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDcwMSwKICAgIG5hbWU6ICJLb2kgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJLb2kgTmV0d29yayBOYXRpdmUgVG9rZW4iLAogICAgICBzeW1ib2w6ICJLUklORyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8va29pLXJwYy5kYXJ3aW5pYS5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2tvaS1ycGMuZGFyd2luaWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7IG5hbWU6ICJCbG9ja3Njb3V0IiwgdXJsOiAiaHR0cHM6Ly9rb2ktc2Nhbi5kYXJ3aW5pYS5uZXR3b3JrIiB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE4MDAwMQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9rcm9tYS5qcwogIHZhciBrcm9tYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjU1LAogICAgbmFtZTogIktyb21hIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFVEgiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcGkua3JvbWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIktyb21hIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2Jsb2Nrc2NvdXQua3JvbWEubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ibG9ja3Njb3V0Lmtyb21hLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMva3JvbWFTZXBvbGlhLmpzCiAgdmFyIGtyb21hU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjM1OCwKICAgIG5hbWU6ICJLcm9tYSBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZXBvbGlhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vYXBpLnNlcG9saWEua3JvbWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIktyb21hIFNlcG9saWEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5zZXBvbGlhLmtyb21hLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5zZXBvbGlhLmtyb21hLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9sM3guanMKICB2YXIgbDN4ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjMyNCwKICAgIG5hbWU6ICJMM1ggUHJvdG9jb2wiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLW1haW5uZXQubDN4LmNvbSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMtbWFpbm5ldC5sM3guY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTDNYIE1haW5uZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIubDN4LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5sM3guY29tL2FwaS92MiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2wzeFRlc3RuZXQuanMKICB2YXIgbDN4VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTIzMjUsCiAgICBuYW1lOiAiTDNYIFByb3RvY29sIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQubDN4LmNvbSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMtdGVzdG5ldC5sM3guY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTDNYIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXItdGVzdG5ldC5sM3guY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLXRlc3RuZXQubDN4LmNvbS9hcGkvdjIiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2xpZ2h0bGlua1BlZ2FzdXMuanMKICB2YXIgbGlnaHRsaW5rUGVnYXN1cyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTg5MSwKICAgIG5hbWU6ICJMaWdodExpbmsgUGVnYXN1cyBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJsaWdodGxpbmstcGVnYXN1cyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFdGhlciIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcmVwbGljYXRvci5wZWdhc3VzLmxpZ2h0bGluay5pby9ycGMvdjEiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJMaWdodExpbmsgUGVnYXN1cyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wZWdhc3VzLmxpZ2h0bGluay5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGlnaHRsaW5rUGhvZW5peC5qcwogIHZhciBsaWdodGxpbmtQaG9lbml4ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxODkwLAogICAgbmFtZTogIkxpZ2h0TGluayBQaG9lbml4IE1haW5uZXQiLAogICAgbmV0d29yazogImxpZ2h0bGluay1waG9lbml4IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9yZXBsaWNhdG9yLnBob2VuaXgubGlnaHRsaW5rLmlvL3JwYy92MSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkxpZ2h0TGluayBQaG9lbml4IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Bob2VuaXgubGlnaHRsaW5rLmlvIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGluZWEuanMKICB2YXIgbGluZWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU5MTQ0LAogICAgbmFtZTogIkxpbmVhIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkxpbmVhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmxpbmVhLmJ1aWxkIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5saW5lYS5idWlsZCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV0aGVyc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9saW5lYXNjYW4uYnVpbGQiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmxpbmVhc2Nhbi5idWlsZC9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2xpbmVhR29lcmxpLmpzCiAgdmFyIGxpbmVhR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTE0MCwKICAgIG5hbWU6ICJMaW5lYSBHb2VybGkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTGluZWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ29lcmxpLmxpbmVhLmJ1aWxkIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5nb2VybGkubGluZWEuYnVpbGQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLmxpbmVhc2Nhbi5idWlsZCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktZ29lcmxpLmxpbmVhc2Nhbi5idWlsZC9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDk4NjIzCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2xpbmVhU2Vwb2xpYS5qcwogIHZhciBsaW5lYVNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU5MTQxLAogICAgbmFtZTogIkxpbmVhIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTGluZWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc2Vwb2xpYS5saW5lYS5idWlsZCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuc2Vwb2xpYS5saW5lYS5idWlsZCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV0aGVyc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZXBvbGlhLmxpbmVhc2Nhbi5idWlsZCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5saW5lYXNjYW4uYnVpbGQvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDIyNzQyNwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9saW5lYVRlc3RuZXQuanMKICB2YXIgbGluZWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTE0MCwKICAgIG5hbWU6ICJMaW5lYSBHb2VybGkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTGluZWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuZ29lcmxpLmxpbmVhLmJ1aWxkIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy5nb2VybGkubGluZWEuYnVpbGQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLmxpbmVhc2Nhbi5idWlsZCIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGkubGluZWFzY2FuLmJ1aWxkL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0OTg2MjMKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGlzay5qcwogIHZhciBsaXNrID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAxMTM1LAogICAgbmFtZTogIkxpc2siLAogICAgbmV0d29yazogImxpc2siLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5hcGkubGlzay5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL2Jsb2Nrc2NvdXQubGlzay5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5saXNrLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweEE5ZDcxRTFkZDdjYTI2RjI2ZTY1NkU2NmQ2QUE4MWVkN2Y3NDViZjAiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbGlza1NlcG9saWEuanMKICB2YXIgc291cmNlSWQxNiA9IDExMTU1MTExOwogIHZhciBsaXNrU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogNDIwMiwKICAgIG5ldHdvcms6ICJsaXNrLXNlcG9saWEiLAogICAgbmFtZTogIkxpc2sgU2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2Vwb2xpYSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zZXBvbGlhLWFwaS5saXNrLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS1ibG9ja3Njb3V0Lmxpc2suY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NlcG9saWEtYmxvY2tzY291dC5saXNrLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQxNl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEEwRTM1RjU2QzMxOERFMWJENUQ5Y2E2QTk0RmU3ZTM3QzU2NjMzNDgiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTZdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhlM2Q5MEYyMTQ5MDY4NkVjN2VGMzdCRTc4OEUwMmRmQzEyNzg3MjY0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDE2XTogewogICAgICAgICAgYWRkcmVzczogIjB4MUZiMzBlNDQ2ZUE3OTFjZDFmMDExNjc1RTVGM2Y1MzExYjcwZmFGNSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTYKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbG9jYWxob3N0LmpzCiAgdmFyIGxvY2FsaG9zdCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTMzNywKICAgIG5hbWU6ICJMb2NhbGhvc3QiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cDovLzEyNy4wLjAuMTo4NTQ1Il0gfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9sdWtzby5qcwogIHZhciBsdWtzbyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDIsCiAgICBuZXR3b3JrOiAibHVrc28iLAogICAgbmFtZTogIkxVS1NPIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJMVUtTTyIsCiAgICAgIHN5bWJvbDogIkxZWCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMubWFpbm5ldC5sdWtzby5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLXJwYy5tYWlubmV0Lmx1a3NvLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJMVUtTTyBNYWlubmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmV4ZWN1dGlvbi5tYWlubmV0Lmx1a3NvLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLmV4cGxvcmVyLmV4ZWN1dGlvbi5tYWlubmV0Lmx1a3NvLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ2ODE4MwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2x1a3NvVGVzdG5ldC5qcwogIHZhciBsdWtzb1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyMDEsCiAgICBuYW1lOiAiTFVLU08gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJMVUtTTyBUZXN0bmV0IiwKICAgICAgc3ltYm9sOiAiTFlYdCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQubHVrc28ubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly93cy1ycGMudGVzdG5ldC5sdWtzby5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTFVLU08gVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5leGVjdXRpb24udGVzdG5ldC5sdWtzby5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5leHBsb3Jlci5leGVjdXRpb24udGVzdG5ldC5sdWtzby5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA2MDUzNDgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbHljYW4uanMKICB2YXIgbHljYW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDcyMSwKICAgIG5hbWU6ICJMeWNhbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJMeWNhbiIsCiAgICAgIHN5bWJvbDogIkxZQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbCiAgICAgICAgICAiaHR0cHM6Ly9ycGMubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgImh0dHBzOi8vdXMtZWFzdC5seWNhbmNoYWluLmNvbSIsCiAgICAgICAgICAiaHR0cHM6Ly91cy13ZXN0Lmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJodHRwczovL2V1LW5vcnRoLmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJodHRwczovL2V1LXdlc3QubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgImh0dHBzOi8vYXNpYS1zb3V0aGVhc3QubHljYW5jaGFpbi5jb20iCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsKICAgICAgICAgICJ3c3M6Ly9ycGMubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgIndzczovL3VzLWVhc3QubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgIndzczovL3VzLXdlc3QubHljYW5jaGFpbi5jb20iLAogICAgICAgICAgIndzczovL2V1LW5vcnRoLmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJ3c3M6Ly9ldS13ZXN0Lmx5Y2FuY2hhaW4uY29tIiwKICAgICAgICAgICJ3c3M6Ly9hc2lhLXNvdXRoZWFzdC5seWNhbmNoYWluLmNvbSIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkx5Y2FuIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLmx5Y2FuY2hhaW4uY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL2x5cmEuanMKICB2YXIgbHlyYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogOTU3LAogICAgbmFtZTogIkx5cmEgQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmx5cmEuZmluYW5jZSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkx5cmEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIubHlyYS5maW5hbmNlIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmx5cmEuZmluYW5jZS9hcGkvdjIiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTkzNTE5OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21haW5uZXQuanMKICB2YXIgbWFpbm5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMSwKICAgIG5hbWU6ICJFdGhlcmV1bSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9jbG91ZGZsYXJlLWV0aC5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZXRoZXJzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5ldGhlcnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIGVuc1JlZ2lzdHJ5OiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIKICAgICAgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjZTAxZjhlZWU3RTQ3OUM5MjhGODkxOWFiRDUzRTU1M2EzNkNlRjY3IiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE5MjU4MjEzCiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE0MzUzNjAxCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWFuZGFsYS5qcwogIHZhciBtYW5kYWxhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTUsCiAgICBuYW1lOiAiTWFuZGFsYSBUQzkiLAogICAgbmV0d29yazogIm1hbmRhbGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIk1hbmRhbGEiLAogICAgICBzeW1ib2w6ICJtQUNBIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZXRoLXJwYy10YzkuYWNhLXN0YWdpbmcubmV0d29yayJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ldGgtcnBjLXRjOS5hY2Etc3RhZ2luZy5uZXR3b3JrIl0KICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldGgtcnBjLXRjOS5hY2Etc3RhZ2luZy5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL2V0aC1ycGMtdGM5LmFjYS1zdGFnaW5nLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNYW5kYWxhIEJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vYmxvY2tzY291dC5tYW5kYWxhLmFjYS1zdGFnaW5nLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYmxvY2tzY291dC5tYW5kYWxhLmFjYS1zdGFnaW5nLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tYW50YS5qcwogIHZhciBtYW50YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY5LAogICAgbmFtZTogIk1hbnRhIFBhY2lmaWMgTWFpbm5ldCIsCiAgICBuZXR3b3JrOiAibWFudGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRVRIIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcGFjaWZpYy1ycGMubWFudGEubmV0d29yay9odHRwIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFudGEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGFjaWZpYy1leHBsb3Jlci5tYW50YS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3BhY2lmaWMtZXhwbG9yZXIubWFudGEubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzMyODkwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWFudGFTZXBvbGlhVGVzdG5ldC5qcwogIHZhciBtYW50YVNlcG9saWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNDQxMDA2LAogICAgbmFtZTogIk1hbnRhIFBhY2lmaWMgU2Vwb2xpYSBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJtYW50YS1zZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUSCIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcGFjaWZpYy1ycGMuc2Vwb2xpYS10ZXN0bmV0Lm1hbnRhLm5ldHdvcmsvaHR0cCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1hbnRhIFNlcG9saWEgVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wYWNpZmljLWV4cGxvcmVyLnNlcG9saWEtdGVzdG5ldC5tYW50YS5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3BhY2lmaWMtZXhwbG9yZXIuc2Vwb2xpYS10ZXN0bmV0Lm1hbnRhLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTU0OTE4ZjdCNTI1QzhkZjg5NDY2ODg0NjUwNjc2NzQxMmI1M0UzIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ3OTU4NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tYW50YVRlc3RuZXQuanMKICB2YXIgbWFudGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNDQxMDA1LAogICAgbmFtZTogIk1hbnRhIFBhY2lmaWMgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAibWFudGEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFVEgiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9tYW50YS10ZXN0bmV0LmNhbGRlcmFjaGFpbi54eXovaHR0cCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1hbnRhIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGFjaWZpYy1leHBsb3Jlci50ZXN0bmV0Lm1hbnRhLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vcGFjaWZpYy1leHBsb3Jlci50ZXN0bmV0Lm1hbnRhLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHgyMTFCMTY0M2I5NUZlNzZmMTFlRDg4ODBFRTgxMEFCRDlBNGNmNTZDIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQxOTkxNQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tYW50bGUuanMKICB2YXIgbWFudGxlID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1ZTMsCiAgICBuYW1lOiAiTWFudGxlIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1OVCIsCiAgICAgIHN5bWJvbDogIk1OVCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5tYW50bGUueHl6Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFudGxlIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL21hbnRsZXNjYW4ueHl6LyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkubWFudGxlc2Nhbi54eXovYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwNDcxNwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21hbnRsZVNlcG9saWFUZXN0bmV0LmpzCiAgdmFyIG1hbnRsZVNlcG9saWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1MDAzLAogICAgbmFtZTogIk1hbnRsZSBTZXBvbGlhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTU5UIiwKICAgICAgc3ltYm9sOiAiTU5UIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcnBjLnNlcG9saWEubWFudGxlLnh5eiJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1hbnRsZSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnNlcG9saWEubWFudGxlLnh5ei8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuc2Vwb2xpYS5tYW50bGUueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0NTg0MDEyCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21hbnRsZVRlc3RuZXQuanMKICB2YXIgbWFudGxlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTAwMSwKICAgIG5hbWU6ICJNYW50bGUgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJNTlQiLAogICAgICBzeW1ib2w6ICJNTlQiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVzdG5ldC5tYW50bGUueHl6Il0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWFudGxlIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5tYW50bGUueHl6IiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQubWFudGxlLnh5ei9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTYxMzMzCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21lcmxpbi5qcwogIHZhciBtZXJsaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyMDAsCiAgICBuYW1lOiAiTWVybGluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCVEMiLAogICAgICBzeW1ib2w6ICJCVEMiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5tZXJsaW5jaGFpbi5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5tZXJsaW5jaGFpbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLm1lcmxpbmNoYWluLmlvL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tZXRhY2hhaW4uanMKICB2YXIgbWV0YWNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1NzEsCiAgICBuYW1lOiAiTWV0YUNoYWluIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk1ldGF0aW1lIENvaW4iLCBzeW1ib2w6ICJNVEMiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMubWV0YXRpbWUuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTWV0YUV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLm1ldGF0aW1lLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWV0YWNoYWluSXN0YW5idWwuanMKICB2YXIgbWV0YWNoYWluSXN0YW5idWwgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0NTMsCiAgICBuYW1lOiAiTWV0YUNoYWluIElzdGFuYnVsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJNZXRhdGltZSBDb2luIiwgc3ltYm9sOiAiTVRDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vaXN0YW5idWwtcnBjLm1ldGFjaGFpbi5kZXYiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNZXRhRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vaXN0YW5idWwtZXhwbG9yZXIubWV0YWNoYWluLmRldiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGFsTDIuanMKICB2YXIgc291cmNlSWQxNyA9IDE7CiAgdmFyIG1ldGFsTDIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDE3NTAsCiAgICBuYW1lOiAiTWV0YWwgTDIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiRXRoZXIiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5tZXRhbGwyLmNvbSJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMubWV0YWxsMi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5tZXRhbGwyLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5tZXRhbGwyLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQxN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDNCMUY3YURhMEZjYzI2QjEzNTE1YWY3NTJEZDA3ZkIxQ0FjMTE0MjYiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAwCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDE3XTogewogICAgICAgICAgYWRkcmVzczogIjB4M0YzN2FCZEUyQzZiNUIyZWQ2RjgwNDU3ODdEZjFFRDFFMzc1Mzk1NiIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQxN106IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDZkMGY2NUQ1OWI1NUIwRkVDNWQyZDE1MzY1MTU0RGNBREMxNDBCRjMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTcKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWV0ZXIuanMKICB2YXIgbWV0ZXIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgyLAogICAgbmFtZTogIk1ldGVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1UUiIsCiAgICAgIHN5bWJvbDogIk1UUiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy5tZXRlci5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1ldGVyU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLm1ldGVyLmlvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGVyVGVzdG5ldC5qcwogIHZhciBtZXRlclRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgzLAogICAgbmFtZTogIk1ldGVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTVRSIiwKICAgICAgc3ltYm9sOiAiTVRSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcnBjdGVzdC5tZXRlci5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1ldGVyVGVzdG5ldFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi13YXJyaW5nc3Rha2VzLm1ldGVyLmlvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGlzLmpzCiAgdmFyIG1ldGlzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDg4LAogICAgbmFtZTogIk1ldGlzIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1ldGlzIiwKICAgICAgc3ltYm9sOiAiTUVUSVMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hbmRyb21lZGEubWV0aXMuaW8vP293bmVyPTEwODgiXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNZXRpcyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5tZXRpcy5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkucm91dGVzY2FuLmlvL3YyL25ldHdvcmsvbWFpbm5ldC9ldm0vNDMxMTQvZXRoZXJzY2FuL2FwaSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJBbmRyb21lZGEgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYW5kcm9tZWRhLWV4cGxvcmVyLm1ldGlzLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FuZHJvbWVkYS1leHBsb3Jlci5tZXRpcy5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjMzODU1MgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldGlzR29lcmxpLmpzCiAgdmFyIG1ldGlzR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1OTksCiAgICBuYW1lOiAiTWV0aXMgR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1ldGlzIEdvZXJsaSIsCiAgICAgIHN5bWJvbDogIk1FVElTIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZ29lcmxpLmdhdGV3YXkubWV0aXNkZXZvcHMubGluayJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1ldGlzIEdvZXJsaSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9nb2VybGkuZXhwbG9yZXIubWV0aXNkZXZvcHMubGluayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGkuZXhwbG9yZXIubWV0aXNkZXZvcHMubGluay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTAwNjIwNwogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldi5qcwogIHZhciBtZXYgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDc1MTgsCiAgICBuYW1lOiAiTUVWZXJzZSBDaGFpbiBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1FVmVyc2UiLAogICAgICBzeW1ib2w6ICJNRVYiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5tZXZlcnNlbWFpbm5ldC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3d3dy5tZXZlcnNlc2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA4Njg4MTM0MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21ldlRlc3RuZXQuanMKICB2YXIgbWV2VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDc1OSwKICAgIG5hbWU6ICJNRVZlcnNlIENoYWluIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTUVWZXJzZSIsCiAgICAgIHN5bWJvbDogIk1FViIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLm1ldmVyc2V0ZXN0bmV0LmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5tZXZlcnNlc2Nhbi5pby8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjQzNzExMTUKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbWludFNlcG9saWFUZXN0bmV0LmpzCiAgdmFyIG1pbnRTZXBvbGlhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY4NiwKICAgIG5hbWU6ICJNaW50IFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LXJwYy5taW50Y2hhaW4uaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNaW50Y2hhaW4gVGVzdG5ldCBleHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLm1pbnRjaGFpbi5pbyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9kZS5qcwogIHZhciBzb3VyY2VJZDE4ID0gMTsKICB2YXIgbW9kZSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzQ0NDMsCiAgICBuYW1lOiAiTW9kZSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQubW9kZS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTW9kZXNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vbW9kZXNjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjQ2NTg4MgogICAgICB9LAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDE4XTogewogICAgICAgICAgYWRkcmVzczogIjB4NDMxN2JhMTQ2RDQ5MzNEODg5NTE4YTNlNUUxMUZlN2E1MzE5OWIwNCIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDE4XTogewogICAgICAgICAgYWRkcmVzczogIjB4OEIzNGIxNGM3YzcxMjM0NTlDZjMwNzZiOENiOTI5QkUwOTdkMEMwNyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQxOF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDczNWFEQmJFNzIyMjZCRDUyZTgxOEU3MTgxOTUzZjQyRTNiMEZGMjEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMTgKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9kZVRlc3RuZXQuanMKICB2YXIgc291cmNlSWQxOSA9IDExMTU1MTExOwogIHZhciBtb2RlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogOTE5LAogICAgbmFtZTogIk1vZGUgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLm1vZGUubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5leHBsb3Jlci5tb2RlLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2Vwb2xpYS5leHBsb3Jlci5tb2RlLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMTldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgyNjM0QkQ2NWJhMjdBQjYzODExYzc0QTYzMTE4QUNiMzEyNzAxQmZhIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzc3ODM5MwogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMTldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgzMjBlMTU4MGVmZkYzN0UwMDhGMUM5MjcwMGQxZUJhNDdjMUIyM2ZEIiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogMzc3ODM5NQogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDE5XTogewogICAgICAgICAgYWRkcmVzczogIjB4YkM1QzY3OTg3OUIyOTY1Mjk2NzU2Q0Q5NTlDM0M3Mzk3Njk5OTVFMiIsCiAgICAgICAgICBibG9ja0NyZWF0ZWQ6IDM3NzgzOTIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhCQWJhODM3MzExM0ZiN2E2OGYxOTVkZUYxODczMmUwMWFGOGVEZkNGIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMwMTkwMDcKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBzb3VyY2VJZDogc291cmNlSWQxOQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tb29uYmFzZUFscGhhLmpzCiAgdmFyIG1vb25iYXNlQWxwaGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODcsCiAgICBuYW1lOiAiTW9vbmJhc2UgQWxwaGEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiREVWIiwKICAgICAgc3ltYm9sOiAiREVWIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuYXBpLm1vb25iYXNlLm1vb25iZWFtLm5ldHdvcmsiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3NzLmFwaS5tb29uYmFzZS5tb29uYmVhbS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTW9vbnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vbW9vbmJhc2UubW9vbnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vbW9vbmJhc2UubW9vbnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE4NTA2ODYKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9vbmJlYW0uanMKICB2YXIgbW9vbmJlYW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODQsCiAgICBuYW1lOiAiTW9vbmJlYW0iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiR0xNUiIsCiAgICAgIHN5bWJvbDogIkdMTVIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21vb25iZWFtLnB1YmxpYy5ibGFzdGFwaS5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9tb29uYmVhbS5wdWJsaWMuYmxhc3RhcGkuaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNb29uc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9tb29uc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktbW9vbmJlYW0ubW9vbnNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDYwOTAwMgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9vbmJlYW1EZXYuanMKICB2YXIgbW9vbmJlYW1EZXYgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODEsCiAgICBuYW1lOiAiTW9vbmJlYW0gRGV2ZWxvcG1lbnQgTm9kZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJERVYiLAogICAgICBzeW1ib2w6ICJERVYiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwOi8vMTI3LjAuMC4xOjk5NDQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vMTI3LjAuMC4xOjk5NDQiXQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL21vb25yaXZlci5qcwogIHZhciBtb29ucml2ZXIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEyODUsCiAgICBuYW1lOiAiTW9vbnJpdmVyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk1PVlIiLAogICAgICBzeW1ib2w6ICJNT1ZSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tb29ucml2ZXIucHVibGljLmJsYXN0YXBpLmlvIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21vb25yaXZlci5wdWJsaWMuYmxhc3RhcGkuaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJNb29uc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9tb29ucml2ZXIubW9vbnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLW1vb25yaXZlci5tb29uc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTU5NzkwNAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbW9ycGhIb2xlc2t5LmpzCiAgdmFyIG1vcnBoSG9sZXNreSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjgxMCwKICAgIG5hbWU6ICJNb3JwaCBIb2xlc2t5IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1xdWlja25vZGUtaG9sZXNreS5tb3JwaGwyLmlvIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3JwYy1xdWlja25vZGUtaG9sZXNreS5tb3JwaGwyLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTW9ycGggSG9sZXNreSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci1ob2xlc2t5Lm1vcnBobDIuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXItYXBpLWhvbGVza3kubW9ycGhsMi5pby9hcGk/IgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9tb3JwaFNlcG9saWEuanMKICB2YXIgbW9ycGhTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNzEwLAogICAgbmFtZTogIk1vcnBoIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQubW9ycGhsMi5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk1vcnBoIFRlc3RuZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXItdGVzdG5ldC5tb3JwaGwyLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLWFwaS10ZXN0bmV0Lm1vcnBobDIuaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9uYXV0aWx1cy5qcwogIHZhciBuYXV0aWx1cyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjIyMjIsCiAgICBuYW1lOiAiTmF1dGlsdXMgTWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiWkJDIiwgc3ltYm9sOiAiWkJDIiwgZGVjaW1hbHM6IDkgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcGkubmF1dGlsdXMubmF1dGNoYWluLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk5hdXRTY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL25hdXRzY2FuLmNvbSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9uZW9uRGV2bmV0LmpzCiAgdmFyIG5lb25EZXZuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI0NTAyMjkyNiwKICAgIG5hbWU6ICJOZW9uIEVWTSBEZXZOZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk5FT04iLCBzeW1ib2w6ICJORU9OIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZGV2bmV0Lm5lb25ldm0ub3JnIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTmVvbnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZGV2bmV0Lm5lb25zY2FuLm9yZyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMDUyMDYxMTIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvbmVvbk1haW5uZXQuanMKICB2YXIgbmVvbk1haW5uZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI0NTAyMjkzNCwKICAgIG5ldHdvcms6ICJuZW9uTWFpbm5ldCIsCiAgICBuYW1lOiAiTmVvbiBFVk0gTWFpbk5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTkVPTiIsIHN5bWJvbDogIk5FT04iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9uZW9uLXByb3h5LW1haW5uZXQuc29sYW5hLnAycC5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJOZW9uc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9uZW9uc2Nhbi5vcmciCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjA2NTQ1NTI0CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9uZXhpLmpzCiAgdmFyIG5leGkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyNDIsCiAgICBuYW1lOiAiTmV4aSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTmV4aSIsIHN5bWJvbDogIk5FWEkiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuY2hhaW4ubmV4aS50ZWNobm9sb2d5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTmV4aVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3Lm5leGlzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly93d3cubmV4aXNjYW4uY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDI3N0E0NkNjNjlBNTdlRTNBNkM4YzE1OGJBODc0ODMyRjcxOEI4RSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNTc3MDE2MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL25leGlsaXguanMKICB2YXIgbmV4aWxpeCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjQwLAogICAgbmFtZTogIk5leGlsaXggU21hcnQgQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiTmV4aWxpeCIsCiAgICAgIHN5bWJvbDogIk5FWElMSVgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGN1cmwucG9zLm5leGlsaXguY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiTmV4aWxpeFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5uZXhpbGl4LmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4NTgzODFjOGUyQkY5ZDBDMkM0MjU5Y0ExNEJkQTlBZmUwMjgzMTI0NCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3NDQ0OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL29hc3lzLmpzCiAgdmFyIG9hc3lzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNDgsCiAgICBuYW1lOiAiT2FzeXMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk9hc3lzIiwgc3ltYm9sOiAiT0FTIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLm1haW5uZXQub2FzeXMuZ2FtZXMiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJPYXN5c1NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5vYXN5cy5nYW1lcyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLm9hc3lzLmdhbWVzL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9vYXNpc1Rlc3RuZXQuanMKICB2YXIgb2FzaXNUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MDkwLAogICAgbmV0d29yazogIm9hc2lzLXRlc3RuZXQiLAogICAgbmFtZTogIk9hc2lzIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkZhc3R0b2tlbiIsIHN5bWJvbDogIkZUTiIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMxLm9hc2lzLmJhaGFtdXRjaGFpbi5jb20iXSB9LAogICAgICBwdWJsaWM6IHsgaHR0cDogWyJodHRwczovL3JwYzEub2FzaXMuYmFoYW11dGNoYWluLmNvbSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkZ0bnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vb2FzaXMuZnRuc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vb2FzaXMuZnRuc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9va2MuanMKICB2YXIgb2tjID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2NiwKICAgIG5hbWU6ICJPS0MiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiT0tUIiwKICAgICAgc3ltYm9sOiAiT0tUIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZXhjaGFpbnJwYy5va2V4Lm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIm9rbGluayIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cub2tsaW5rLmNvbS9va2MiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTAzNjQ3OTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9vcHRpbWlzbS5qcwogIHZhciBzb3VyY2VJZDIwID0gMTsKICB2YXIgb3B0aW1pc20gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDEwLAogICAgbmFtZTogIk9QIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5vcHRpbWlzbS5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk9wdGltaXNtIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL29wdGltaXN0aWMuZXRoZXJzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1vcHRpbWlzdGljLmV0aGVyc2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgZGlzcHV0ZUdhbWVGYWN0b3J5OiB7CiAgICAgICAgW3NvdXJjZUlkMjBdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhlNTk2NUFiNTk2MmVEYzc0NzdDODUyMDI0M0E5NTUxN0NEMjUyZkE5IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQyMF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweGRmZTk3ODY4MjMzZDFhYTIyZTgxNWEyNjY5ODJmMmNmMTc2ODVhMjciCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0Mjg2MjYzCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDIwXTogewogICAgICAgICAgYWRkcmVzczogIjB4YkViNUZjNTc5MTE1MDcxNzY0Yzc0MjNBNGYxMmVEZGU0MWYxMDZFZCIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyMF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDk5QzlmYzQ2ZjkyRThhMWMwZGVDMWIxNzQ3ZDAxMDkwM0U4ODRiRTEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMjAKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvb3B0aW1pc21Hb2VybGkuanMKICB2YXIgc291cmNlSWQyMSA9IDU7CiAgdmFyIG9wdGltaXNtR29lcmxpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiA0MjAsCiAgICBuYW1lOiAiT3B0aW1pc20gR29lcmxpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJHb2VybGkgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9nb2VybGkub3B0aW1pc20uaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZ29lcmxpLW9wdGltaXNtLmV0aGVyc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9nb2VybGktb3B0aW1pc20uZXRoZXJzY2FuLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICAuLi5jaGFpbkNvbmZpZzIuY29udHJhY3RzLAogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDIxXTogewogICAgICAgICAgYWRkcmVzczogIjB4RTZEZmJhMDk1MzYxNkJhY2FiMGM5QThlY2IzYTlCQmE3N0ZDMTVjMCIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDQ5NDYxCiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDIxXTogewogICAgICAgICAgYWRkcmVzczogIjB4NWI0N0UxQTA4RWE2ZDk4NUQ2NjQ5MzAwNTg0ZTY3MjJFYzRCMTM4MyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyMV06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDYzNkFmMTZiZjJmNjgyZEQzMTA5ZTYwMTAyYjhFMUEwODlGZWRBYTgiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDIxCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL29wdGltaXNtU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDIyID0gMTExNTUxMTE7CiAgdmFyIG9wdGltaXNtU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogMTExNTU0MjAsCiAgICBuYW1lOiAiT1AgU2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2Vwb2xpYSBFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEub3B0aW1pc20uaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL29wdGltaXNtLXNlcG9saWEuYmxvY2tzY291dC5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vb3B0aW1pc20tc2Vwb2xpYS5ibG9ja3Njb3V0LmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgZGlzcHV0ZUdhbWVGYWN0b3J5OiB7CiAgICAgICAgW3NvdXJjZUlkMjJdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgwNUY5NjEzYURCMzAwMjZGRmQ2MzRmMzhlNUM0ZEZkMzBhMTk3RmExIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQyMl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDkwRTljNGY4YTk5NGEyNTBGNmFFZmQ2MUNBRmI0RjJlODk1RDQ1OEYiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNjIwMjA0CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDIyXTogewogICAgICAgICAgYWRkcmVzczogIjB4MTZGYzUwNThGMjU2NDgxOTQ0NzE5MzlkZjc1Q0YyN0EyZmRDNDhCQyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyMl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEZCYjA2MjFFMEIyM2I1NDc4QjYzMEJENTVhNWYyMWY2NzczMEIwRjEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDIyCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL29wQk5CLmpzCiAgdmFyIG9wQk5CID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDQsCiAgICBuYW1lOiAib3BCTkIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkJOQiIsCiAgICAgIHN5bWJvbDogIkJOQiIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vb3BibmItbWFpbm5ldC1ycGMuYm5iY2hhaW4ub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAib3BibmJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL21haW5uZXQub3BibmJzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA1MTI4ODEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9vcEJOQlRlc3RuZXQuanMKICB2YXIgb3BCTkJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1NjExLAogICAgbmFtZTogIm9wQk5CIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAidEJOQiIsCiAgICAgIHN5bWJvbDogInRCTkIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9vcGJuYi10ZXN0bmV0LXJwYy5ibmJjaGFpbi5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJvcGJuYnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC5vcGJuYnNjYW4uY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDM3MDUxMDgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvb29ydG1haW5uZXREZXYuanMKICB2YXIgb29ydE1haW5uZXREZXYgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDk3MDAsCiAgICBuYW1lOiAiT09SVCBNYWlubmV0RGV2IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk9PUlQiLAogICAgICBzeW1ib2w6ICJPT1JUIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vZGV2LXJwYy5vb3J0ZWNoLmNvbSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBvb3J0OiB7CiAgICAgICAgbmFtZTogIk9PUlQgTWFpbm5ldERldiBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9kZXYtc2Nhbi5vb3J0ZWNoLmNvbSIKICAgICAgfSwKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJPT1JUIE1haW5uZXREZXYgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZGV2LXNjYW4ub29ydGVjaC5jb20iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvb3RpbURldm5ldC5qcwogIHZhciBvdGltRGV2bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MTE0NDExNCwKICAgIG5hbWU6ICJPdGltIERldm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFVEgiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwOi8vZGV2bmV0Lm90aW0ueHl6Il0KICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBiYXRjaEludm9rZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHg1RmJEQjIzMTU2NzhhZmVjYjM2N2YwMzJkOTNGNjQyZjY0MTgwYWEzIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BhbG0uanMKICB2YXIgcGFsbSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTEyOTcxMDgxMDksCiAgICBuYW1lOiAiUGFsbSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJQQUxNIiwKICAgICAgc3ltYm9sOiAiUEFMTSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcGFsbS1tYWlubmV0LnB1YmxpYy5ibGFzdGFwaS5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9wYWxtLW1haW5uZXQucHVibGljLmJsYXN0YXBpLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQ2hhaW5sZW5zIiwKICAgICAgICB1cmw6ICJodHRwczovL3BhbG0uY2hhaW5sZW5zLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNTQyOTI0OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BhbG1UZXN0bmV0LmpzCiAgdmFyIHBhbG1UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMTI5NzEwODA5OSwKICAgIG5hbWU6ICJQYWxtIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiUEFMTSIsCiAgICAgIHN5bWJvbDogIlBBTE0iCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3BhbG0tbWFpbm5ldC5wdWJsaWMuYmxhc3RhcGkuaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcGFsbS1tYWlubmV0LnB1YmxpYy5ibGFzdGFwaS5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNoYWlubGVucyIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wYWxtLmNoYWlubGVucy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTU0MjkyNDgKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcGxheWZpQWxiaXJlby5qcwogIHZhciBwbGF5ZmlBbGJpcmVvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnLAogICAgaWQ6IDE2MTIxMjcsCiAgICBuYW1lOiAiUGxheUZpIEFsYmlyZW8gVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiYWxiaXJlbyIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hbGJpcmVvLXJwYy5wbGF5ZmkuYWkiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vYWxiaXJlby1ycGMtd3MucGxheWZpLmFpL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUGxheUZpIEFsYmlyZW8gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYWxiaXJlby1leHBsb3Jlci5wbGF5ZmkuYWkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweEY5Y2RhNjI0RkJDN2UwNTkzNTVjZTk4YTMxNjkzZDI5OUZBQ2Q5NjMiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3Bnbi5qcwogIHZhciBzb3VyY2VJZDIzID0gMTsKICB2YXIgcGduID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MjQsCiAgICBuZXR3b3JrOiAicGduIiwKICAgIG5hbWU6ICJQR04iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnB1YmxpY2dvb2RzLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQR04gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucHVibGljZ29vZHMubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJQR04gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucHVibGljZ29vZHMubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDIzXTogewogICAgICAgICAgYWRkcmVzczogIjB4OUU2MjA0Rjc1MGNEODY2YjI5OTU5NGUyYUM5ZUE4MjRFMmU1Zjk1YyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMzODAyMDkKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMjNdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhiMjZGZDk4NWM1OTU5YkJCMzgyQkFGZEQwYjg3OUUxNDllNDgxMTZjIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDIzXTogewogICAgICAgICAgYWRkcmVzczogIjB4RDAyMDRCOTUyN0MxYkE3YkQ3NjVGYTVDQ0Q5MzU1ZDM4MzM4MjcyYiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBmb3JtYXR0ZXJzOiBmb3JtYXR0ZXJzMiwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDIzCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BnblRlc3RuZXQuanMKICB2YXIgc291cmNlSWQyNCA9IDExMTU1MTExOwogIHZhciBwZ25UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1ODAwOCwKICAgIG5ldHdvcms6ICJwZ24tdGVzdG5ldCIsCiAgICBuYW1lOiAiUEdOICIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLnB1YmxpY2dvb2RzLm5ldHdvcmsiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQR04gVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5zZXBvbGlhLnB1YmxpY2dvb2RzLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuc2Vwb2xpYS5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJQR04gVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5zZXBvbGlhLnB1YmxpY2dvb2RzLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuc2Vwb2xpYS5wdWJsaWNnb29kcy5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBsMk91dHB1dE9yYWNsZTogewogICAgICAgIFtzb3VyY2VJZDI0XTogewogICAgICAgICAgYWRkcmVzczogIjB4RDViQWMzMTUyZmZDMjUzMThGODQ4QjNERDVkQTZDODUxNzFCYUVFZSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBvcnRhbDogewogICAgICAgIFtzb3VyY2VJZDI0XTogewogICAgICAgICAgYWRkcmVzczogIjB4RjA0QmRENTM1M0JiMEVGRjZDQTYwQ2ZjQzc4NTk0Mjc4ZUJmRTE3OSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGwxU3RhbmRhcmRCcmlkZ2U6IHsKICAgICAgICBbc291cmNlSWQyNF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEZhRTZhYkNBRjMwRDIzZTIzM0FDN2ZhRjc0N0YyZkMzYTVhNkJmYTMiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAzNzU0OTI1CiAgICAgIH0KICAgIH0sCiAgICBmb3JtYXR0ZXJzOiBmb3JtYXR0ZXJzMiwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDI0LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9waG9lbml4LmpzCiAgdmFyIHBob2VuaXggPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMzgxLAogICAgbmFtZTogIlBob2VuaXggQmxvY2tjaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiUGhvZW5peCIsIHN5bWJvbDogIlBIWCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5waG9lbml4cGxvcmVyLmNvbSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlBob2VuaXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGhvZW5peHBsb3Jlci5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vcGhvZW5peHBsb3Jlci5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg0OThjRjc1N2E1NzVjRkYyYzJFZDlmNTMyZjU2RWZhNzk3Zjg2NDQyIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDU2MjAxOTIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wbGluZ2EuanMKICB2YXIgcGxpbmdhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNDIsCiAgICBuYW1lOiAiUGxpbmdhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJQbGluZ2EiLCBzeW1ib2w6ICJQTElOR0EiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGN1cmwubWFpbm5ldC5wbGdjaGFpbi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQbGdzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3d3dy5wbGdzY2FuLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MDk4OTU3NjE2MGYyZTcwOTI5MDhCQjk0Nzk2MzFiOTAxMDYwYjZlNCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyMDQ0ODkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wbHVtZVRlc3RuZXQuanMKICB2YXIgc291cmNlSWQyNSA9IDExMTU1MTExOwogIHZhciBwbHVtZVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE2MTIyMTEzNSwKICAgIG5hbWU6ICJQbHVtZSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJQbHVtZSBTZXBvbGlhIEV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQtcnBjLnBsdW1lbmV0d29yay54eXovaHR0cCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly90ZXN0bmV0LXJwYy5wbHVtZW5ldHdvcmsueHl6L3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLnBsdW1lbmV0d29yay54eXoiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vdGVzdG5ldC1leHBsb3Jlci5wbHVtZW5ldHdvcmsueHl6L2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBzb3VyY2VJZDogc291cmNlSWQyNQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wb2x5Z29uLmpzCiAgdmFyIHBvbHlnb24gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzNywKICAgIG5hbWU6ICJQb2x5Z29uIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJNQVRJQyIsIHN5bWJvbDogIk1BVElDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcG9seWdvbi1ycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vcG9seWdvbnNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI1NzcwMTYwCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcG9seWdvbkFtb3kuanMKICB2YXIgcG9seWdvbkFtb3kgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwMDAyLAogICAgbmFtZTogIlBvbHlnb24gQW1veSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiTUFUSUMiLCBzeW1ib2w6ICJNQVRJQyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy1hbW95LnBvbHlnb24udGVjaG5vbG9neSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlBvbHlnb25TY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2Ftb3kucG9seWdvbnNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1hbW95LnBvbHlnb25zY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzEyNzM4OAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wb2x5Z29uTXVtYmFpLmpzCiAgdmFyIHBvbHlnb25NdW1iYWkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwMDAxLAogICAgbmFtZTogIlBvbHlnb24gTXVtYmFpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJNQVRJQyIsIHN5bWJvbDogIk1BVElDIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmFua3IuY29tL3BvbHlnb25fbXVtYmFpIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vbXVtYmFpLnBvbHlnb25zY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktdGVzdG5ldC5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI1NzcwMTYwCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3BvbHlnb25aa0V2bS5qcwogIHZhciBwb2x5Z29uWmtFdm0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMDEsCiAgICBuYW1lOiAiUG9seWdvbiB6a0VWTSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly96a2V2bS1ycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vemtldm0ucG9seWdvbnNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS16a2V2bS5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDU3NzQ2CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcG9seWdvblprRXZtQ2FyZG9uYS5qcwogIHZhciBwb2x5Z29uWmtFdm1DYXJkb25hID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNDQyLAogICAgbmFtZTogIlBvbHlnb24gemtFVk0gQ2FyZG9uYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuY2FyZG9uYS56a2V2bS1ycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUG9seWdvblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vY2FyZG9uYS16a2V2bS5wb2x5Z29uc2Nhbi5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vY2FyZG9uYS16a2V2bS5wb2x5Z29uc2Nhbi5jb20vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTQwOTEKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9wb2x5Z29uWmtFdm1UZXN0bmV0LmpzCiAgdmFyIHBvbHlnb25aa0V2bVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0NDIsCiAgICBuYW1lOiAiUG9seWdvbiB6a0VWTSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5wdWJsaWMuemtldm0tdGVzdC5uZXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQb2x5Z29uU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LXprZXZtLnBvbHlnb25zY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LXprZXZtLnBvbHlnb25zY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDUyNTY4NgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3B1bHNlY2hhaW4uanMKICB2YXIgcHVsc2VjaGFpbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzY5LAogICAgbmFtZTogIlB1bHNlQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlB1bHNlIiwgc3ltYm9sOiAiUExTIiwgZGVjaW1hbHM6IDE4IH0sCiAgICB0ZXN0bmV0OiBmYWxzZSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMucHVsc2VjaGFpbi5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3MucHVsc2VjaGFpbi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQdWxzZVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5wdWxzZWNoYWluLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGkuc2Nhbi5wdWxzZWNoYWluLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgZW5zUmVnaXN0cnk6IHsKICAgICAgICBhZGRyZXNzOiAiMHgwMDAwMDAwMDAwMEMyRTA3NGVDNjlBMGRGYjI5OTdCQTZDN2QyZTFlIgogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDM1MzYwMQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3B1bHNlY2hhaW5WNC5qcwogIHZhciBwdWxzZWNoYWluVjQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDk0MywKICAgIG5hbWU6ICJQdWxzZUNoYWluIFY0IiwKICAgIHRlc3RuZXQ6IHRydWUsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiVjQgUHVsc2UiLCBzeW1ib2w6ICJ2NFBMUyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy52NC50ZXN0bmV0LnB1bHNlY2hhaW4uY29tIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLnY0LnRlc3RuZXQucHVsc2VjaGFpbi5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJQdWxzZVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi52NC50ZXN0bmV0LnB1bHNlY2hhaW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NjYW4udjQudGVzdG5ldC5wdWxzZWNoYWluLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgZW5zUmVnaXN0cnk6IHsKICAgICAgICBhZGRyZXNzOiAiMHgwMDAwMDAwMDAwMEMyRTA3NGVDNjlBMGRGYjI5OTdCQTZDN2QyZTFlIgogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDM1MzYwMQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3FNYWlubmV0LmpzCiAgdmFyIHFNYWlubmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNTQ0MSwKICAgIG5hbWU6ICJRIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiUSIsCiAgICAgIHN5bWJvbDogIlEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMucS5vcmciXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJRIE1haW5uZXQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucS5vcmciLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIucS5vcmcvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3FUZXN0bmV0LmpzCiAgdmFyIHFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNTQ0MywKICAgIG5hbWU6ICJRIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiUSIsCiAgICAgIHN5bWJvbDogIlEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMucXRlc3RuZXQub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnF0ZXN0bmV0Lm9yZyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5xdGVzdG5ldC5vcmcvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yZWFsLmpzCiAgdmFyIHJlYWwgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMTE4OCwKICAgIG5hbWU6ICJyZS5hbCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBuYW1lOiAicmVFVEgiLAogICAgICBkZWNpbWFsczogMTgsCiAgICAgIHN5bWJvbDogInJlRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcmVhbC5kcnBjLm9yZyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogInJlLmFsIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnJlLmFsIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLnJlLmFsL2FwaS92MiIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA2OTUKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yZWRiZWxseVRlc3RuZXQuanMKICB2YXIgcmVkYmVsbHlUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNTMsCiAgICBuYW1lOiAiUmVkYmVsbHkgTmV0d29yayBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJSZWRiZWxseSBOYXRpdmUgQ29pbiIsCiAgICAgIHN5bWJvbDogIlJCTlQiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZ292ZXJub3JzLnRlc3RuZXQucmVkYmVsbHkubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkV0aGVybmFsIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQucmVkYmVsbHkubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ldGhlcm5hbC5mbHkuZGV2L2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcmVkc3RvbmUuanMKICB2YXIgcmVkc3RvbmUgPSBkZWZpbmVDaGFpbih7CiAgICBpZDogNjkwLAogICAgbmFtZTogIlJlZHN0b25lIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMucmVkc3RvbmVjaGFpbi5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnJlZHN0b25lY2hhaW4uY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsgbmFtZTogIkV4cGxvcmVyIiwgdXJsOiAiCWh0dHBzOi8vZXhwbG9yZXIucmVkc3RvbmUueHl6IiB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3JleWFOZXR3b3JrLmpzCiAgdmFyIHJleWFOZXR3b3JrID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNzI5LAogICAgbmFtZTogIlJleWEgTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBkZWNpbWFsczogMTgsIG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMucmV5YS5uZXR3b3JrIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLnJleWEubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlJleWEgTmV0d29yayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5yZXlhLm5ldHdvcmsiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yb2xsdXguanMKICB2YXIgcm9sbHV4ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1NzAsCiAgICBuYW1lOiAiUm9sbHV4IE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiU3lzY29pbiIsCiAgICAgIHN5bWJvbDogIlNZUyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnJvbGx1eC5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnJvbGx1eC5jb20vd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9sbHV4RXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIucm9sbHV4LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5yb2xsdXguY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMTkyMjIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yb2xsdXhUZXN0bmV0LmpzCiAgdmFyIHJvbGx1eFRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDU3ZTMsCiAgICBuYW1lOiAiUm9sbHV4IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiU3lzY29pbiIsCiAgICAgIHN5bWJvbDogIlNZUyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRhbmVuYmF1bS5yb2xsdXguY29tLyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMtdGFuZW5iYXVtLnJvbGx1eC5jb20vd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9sbHV4VGVzdG5ldEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3JvbGx1eC50YW5lbmJhdW0uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vcm9sbHV4LnRhbmVuYmF1bS5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTgxMzY3NQogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3JvbmluLmpzCiAgdmFyIHJvbmluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDIwLAogICAgbmFtZTogIlJvbmluIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJST04iLCBzeW1ib2w6ICJST04iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9hcGkucm9uaW5jaGFpbi5jb20vcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9uaW4gRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vYXBwLnJvbmluY2hhaW4uY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI2MDIzNTM1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcm9vdC5qcwogIHZhciByb290ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3NjY4LAogICAgbmFtZTogIlRoZSBSb290IE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWFJQIiwKICAgICAgc3ltYm9sOiAiWFJQIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9yb290LnJvb3RuZXQubGl2ZS9hcmNoaXZlIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3Jvb3Qucm9vdG5ldC5saXZlL2FyY2hpdmUvd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJSb290c2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9yb290c2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YzlDMkUyNDI5QWVDMzU0OTE2YzQ3NkIzMGQ3MjlkZURkQzk0OTg4ZCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA5MjE4MzM4CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvcm9vdFBvcmNpbmkuanMKICB2YXIgcm9vdFBvcmNpbmkgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDc2NzIsCiAgICBuYW1lOiAiVGhlIFJvb3QgTmV0d29yayAtIFBvcmNpbmkiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWFJQIiwKICAgICAgc3ltYm9sOiAiWFJQIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9wb3JjaW5pLnJvb3RuZXQuYXBwL2FyY2hpdmUiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcG9yY2luaS5yb290bmV0LmFwcC9hcmNoaXZlL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUm9vdHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vcG9yY2luaS5yb290c2Nhbi5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4YzlDMkUyNDI5QWVDMzU0OTE2YzQ3NkIzMGQ3MjlkZURkQzk0OTg4ZCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDU1NTY5MgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yb290c3RvY2suanMKICB2YXIgcm9vdHN0b2NrID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMCwKICAgIG5hbWU6ICJSb290c3RvY2sgTWFpbm5ldCIsCiAgICBuZXR3b3JrOiAicm9vdHN0b2NrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlJvb3RzdG9jayBCaXRjb2luIiwKICAgICAgc3ltYm9sOiAiUkJUQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3B1YmxpYy1ub2RlLnJzay5jbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlJTSyBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5yc2suY28iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDI0OTU0MAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3Jvb3RzdG9ja1Rlc3RuZXQuanMKICB2YXIgcm9vdHN0b2NrVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMzEsCiAgICBuYW1lOiAiUm9vdHN0b2NrIFRlc3RuZXQiLAogICAgbmV0d29yazogInJvb3RzdG9jayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJSb290c3RvY2sgQml0Y29pbiIsCiAgICAgIHN5bWJvbDogInRSQlRDIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vcHVibGljLW5vZGUudGVzdG5ldC5yc2suY28iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJSU0sgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdG5ldC5yb290c3RvY2suaW8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3JzczMuanMKICB2YXIgc291cmNlSWQyNiA9IDE7CiAgdmFyIHJzczMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDEyNTUzLAogICAgbmFtZTogIlJTUzMgVlNMIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlJTUzMiLCBzeW1ib2w6ICJSU1MzIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnJzczMuaW8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJSU1MzIFZTTCBNYWlubmV0IFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi5yc3MzLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NjYW4ucnNzMy5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgLi4uY2hhaW5Db25maWcyLmNvbnRyYWN0cywKICAgICAgbDJPdXRwdXRPcmFjbGU6IHsKICAgICAgICBbc291cmNlSWQyNl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweEU2ZjI0ZDJDMzJCMzEwOUIxOGVkMzNjRjA4ZUZiNDkwYjFlMDlDMTAiCiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNDE5MwogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQyNl06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDZBMTI0MzI0OTFiYmJFOGQzYmFiZjc1Rjc1OTc2Njc3NEM3NzhEYjQiLAogICAgICAgICAgYmxvY2tDcmVhdGVkOiAxOTM4NzA1NwogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDI2XTogewogICAgICAgICAgYWRkcmVzczogIjB4NGNiYWI2OTEwOEFhNzIxNTFFRGE1QTNjMTY0ZUE4Njg0NWYxODQzOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQyNgogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9yc3MzU2Vwb2xpYS5qcwogIHZhciBzb3VyY2VJZDI3ID0gMTExNTUxMTE7CiAgdmFyIHJzczNTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiAyMzMxLAogICAgbmFtZTogIlJTUzMgVlNMIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiUlNTMyIsIHN5bWJvbDogIlJTUzMiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVzdG5ldC5yc3MzLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiUlNTMyBWU0wgU2Vwb2xpYSBUZXN0bmV0IFNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Nhbi50ZXN0bmV0LnJzczMuaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2Nhbi50ZXN0bmV0LnJzczMuaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMjddOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhEYjVjNDZDM0VhYTZFZDZhRThiMjM3OTc4NURGN2RkMDI5QzBkQzgxIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTU2OTcKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMjddOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhjQkQ3N0U4RTFFN0YwNkIyNWJhRGU2NzE0MmNkRTgyNjUyRGE3YjU3IiwKICAgICAgICAgIGJsb2NrQ3JlYXRlZDogNTM0NTAzNQogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDI3XTogewogICAgICAgICAgYWRkcmVzczogIjB4ZEREMjliYjYzQjA4MzlGQjFjRTBlRTQzOUZmMDI3NzM4NTk1RDA3QiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlLAogICAgc291cmNlSWQ6IHNvdXJjZUlkMjcKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2FpZ29uLmpzCiAgdmFyIHNhaWdvbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAyMSwKICAgIG5hbWU6ICJTYWlnb24gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiUk9OIiwgc3ltYm9sOiAiUk9OIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2FpZ29uLXRlc3RuZXQucm9uaW5jaGFpbi5jb20vcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU2FpZ29uIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NhaWdvbi1hcHAucm9uaW5jaGFpbi5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTg3MzY4NzEKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2FwcGhpcmUuanMKICB2YXIgc2FwcGhpcmUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDIzMjk0LAogICAgbmFtZTogIk9hc2lzIFNhcHBoaXJlIiwKICAgIG5ldHdvcms6ICJzYXBwaGlyZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2FwcGhpcmUgUm9zZSIsIHN5bWJvbDogIlJPU0UiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zYXBwaGlyZS5vYXNpcy5pbyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9zYXBwaGlyZS5vYXNpcy5pby93cyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk9hc2lzIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLm9hc2lzLmlvL21haW5uZXQvc2FwcGhpcmUiCiAgICAgIH0sCiAgICAgIGJsb2Nrc2NvdXQ6IHsKICAgICAgICBuYW1lOiAiT2FzaXMgU2FwcGhpcmUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vb2xkLWV4cGxvcmVyLnNhcHBoaXJlLm9hc2lzLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL29sZC1leHBsb3Jlci5zYXBwaGlyZS5vYXNpcy5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNzM0NTMxCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2FwcGhpcmVUZXN0bmV0LmpzCiAgdmFyIHNhcHBoaXJlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjMyOTUsCiAgICBuYW1lOiAiT2FzaXMgU2FwcGhpcmUgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAic2FwcGhpcmUtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiU2FwcGhpcmUgVGVzdCBSb3NlIiwgc3ltYm9sOiAiVEVTVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuc2FwcGhpcmUub2FzaXMuZGV2Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3Rlc3RuZXQuc2FwcGhpcmUub2FzaXMuZGV2L3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiT2FzaXMgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIub2FzaXMuaW8vdGVzdG5ldC9zYXBwaGlyZSIKICAgICAgfSwKICAgICAgYmxvY2tzY291dDogewogICAgICAgIG5hbWU6ICJPYXNpcyBTYXBwaGlyZSBUZXN0bmV0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQub2xkLWV4cGxvcmVyLnNhcHBoaXJlLm9hc2lzLmRldiIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0Lm9sZC1leHBsb3Jlci5zYXBwaGlyZS5vYXNpcy5kZXYvYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zYXRvc2hpdm0uanMKICB2YXIgc2F0b3NoaVZNID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMTA5LAogICAgbmFtZTogIlNhdG9zaGlWTSBBbHBoYSBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJCVEMiLAogICAgICBzeW1ib2w6ICJCVEMiLAogICAgICBkZWNpbWFsczogMTgKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2FscGhhLXJwYy1ub2RlLWh0dHAuc3Ztc2Nhbi5pbyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vc3Ztc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zdm1zY2FuLmlvL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zYXRvc2hpdm1UZXN0bmV0LmpzCiAgdmFyIHNhdG9zaGlWTVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDMxMTAsCiAgICBuYW1lOiAiU2F0b3NoaVZNIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIkJUQyIsCiAgICAgIHN5bWJvbDogIkJUQyIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vdGVzdC1ycGMtbm9kZS1odHRwLnN2bXNjYW4uaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJibG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQuc3Ztc2Nhbi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly90ZXN0bmV0LnN2bXNjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zY3JvbGwuanMKICB2YXIgc2Nyb2xsID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1MzQzNTIsCiAgICBuYW1lOiAiU2Nyb2xsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zY3JvbGwuaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3NzLXJwYy5zY3JvbGwuaW8vd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTY3JvbGxzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL3Njcm9sbHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS5zY3JvbGxzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTQKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3Njcm9sbFNlcG9saWEuanMKICB2YXIgc2Nyb2xsU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTM0MzUxLAogICAgbmFtZTogIlNjcm9sbCBTZXBvbGlhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEtcnBjLnNjcm9sbC5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNjcm9sbHNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5zY3JvbGxzY2FuLmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9hcGktc2Vwb2xpYS5zY3JvbGxzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogOTQ3MwogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zZWkuanMKICB2YXIgc2VpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMzI5LAogICAgbmFtZTogIlNlaSBOZXR3b3JrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZWkiLCBzeW1ib2w6ICJTRUkiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ldm0tcnBjLnNlaS1hcGlzLmNvbS8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXZtLXdzLnNlaS1hcGlzLmNvbS8iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTZWl0cmFjZSIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZWl0cmFjZS5jb20iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vc2VpdHJhY2UuY29tL3BhY2lmaWMtMS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2VpRGV2bmV0LmpzCiAgdmFyIHNlaURldm5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNzEzNzE1LAogICAgbmFtZTogIlNlaSBEZXZuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlNlaSIsIHN5bWJvbDogIlNFSSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V2bS1ycGMtYXJjdGljLTEuc2VpLWFwaXMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU2VpdHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vc2VpdHJhY2UuY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zZWlUZXN0bmV0LmpzCiAgdmFyIHNlaVRlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMjgsCiAgICBuYW1lOiAiU2VpIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlNlaSIsIHN5bWJvbDogIlNFSSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2V2bS1ycGMtdGVzdG5ldC5zZWktYXBpcy5jb20iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vZXZtLXdzLXRlc3RuZXQuc2VpLWFwaXMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU2VpdHJhY2UiLAogICAgICAgIHVybDogImh0dHBzOi8vc2VpdHJhY2UuY29tIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zZXBvbGlhLmpzCiAgdmFyIHNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDExMTU1MTExLAogICAgbmFtZTogIlNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlNlcG9saWEgRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc2Vwb2xpYS5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5ldGhlcnNjYW4uaW8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLXNlcG9saWEuZXRoZXJzY2FuLmlvL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y2ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiZTJhMTczOTc2Y2ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA3NTE1MzIKICAgICAgfSwKICAgICAgZW5zUmVnaXN0cnk6IHsgYWRkcmVzczogIjB4MDAwMDAwMDAwMDBDMkUwNzRlQzY5QTBkRmIyOTk3QkE2QzdkMmUxZSIgfSwKICAgICAgZW5zVW5pdmVyc2FsUmVzb2x2ZXI6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjOEFmOTk5ZTM4MjczRDY1OEJFMWI5MjFiODhBOURkZjAwNTc2OWNDIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDUzMTcwODAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2hhcGVTZXBvbGlhLmpzCiAgdmFyIHNoYXBlU2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTEwMTEsCiAgICBuYW1lOiAiU2hhcGUgU2Vwb2xpYSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTZXBvbGlhIEV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vc2Vwb2xpYS5zaGFwZS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiYmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zaGFwZS1zZXBvbGlhLWV4cGxvcmVyLmFsY2hlbXkuY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NoYXBlLXNlcG9saWEtZXhwbG9yZXIuYWxjaGVteS5jb20vYXBpL3YyIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NoaW1tZXIuanMKICB2YXIgc2hpbW1lciA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTQ4LAogICAgbmFtZTogIlNoaW1tZXIiLAogICAgbmV0d29yazogInNoaW1tZXIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiU2hpbW1lciIsCiAgICAgIHN5bWJvbDogIlNNUiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vanNvbi1ycGMuZXZtLnNoaW1tZXIubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNoaW1tZXIgTmV0d29yayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0uc2hpbW1lci5uZXR3b3JrIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLmV2bS5zaGltbWVyLm5ldHdvcmsvYXBpIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NoaW1tZXJUZXN0bmV0LmpzCiAgdmFyIHNoaW1tZXJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDczLAogICAgbmFtZTogIlNoaW1tZXIgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAic2hpbW1lci10ZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlNoaW1tZXIiLAogICAgICBzeW1ib2w6ICJTTVIiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2pzb24tcnBjLmV2bS50ZXN0bmV0LnNoaW1tZXIubmV0d29yayJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNoaW1tZXIgTmV0d29yayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5ldm0udGVzdG5ldC5zaGltbWVyLm5ldHdvcmsiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuZXZtLnRlc3RuZXQuc2hpbW1lci5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2thbGUvYnJhd2wuanMKICB2YXIgc2thbGVCbG9ja0JyYXdsZXJzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzOTE4NDU4OTQsCiAgICBuYW1lOiAiU0tBTEUgfCBCbG9jayBCcmF3bGVycyIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiQlJBV0wiLCBzeW1ib2w6ICJCUkFXTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvZnJheWVkLWRlY2VudC1hbnRhcmVzIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvZnJheWVkLWRlY2VudC1hbnRhcmVzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU0tBTEUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZnJheWVkLWRlY2VudC1hbnRhcmVzLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHt9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL2NhbHlwc28uanMKICB2YXIgc2thbGVDYWx5cHNvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNTY0ODMwODE4LAogICAgbmFtZTogIlNLQUxFIHwgQ2FseXBzbyBORlQgSHViIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS9ob25vcmFibGUtc3RlZWwtcmFzYWxoYWd1ZSJdLAogICAgICAgIHdlYlNvY2tldDogWwogICAgICAgICAgIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvaG9ub3JhYmxlLXN0ZWVsLXJhc2FsaGFndWUiCiAgICAgICAgXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ob25vcmFibGUtc3RlZWwtcmFzYWxoYWd1ZS5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMxMDc2MjYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9jYWx5cHNvVGVzdG5ldC5qcwogIHZhciBza2FsZUNhbHlwc29UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5NzQzOTkxMzEsCiAgICBuYW1lOiAiU0tBTEUgQ2FseXBzbyBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5za2FsZW5vZGVzLmNvbS92MS9naWFudC1oYWxmLWR1YWwtdGVzdG5ldCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly90ZXN0bmV0LnNrYWxlbm9kZXMuY29tL3YxL3dzL2dpYW50LWhhbGYtZHVhbC10ZXN0bmV0Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU0tBTEUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZ2lhbnQtaGFsZi1kdWFsLXRlc3RuZXQuZXhwbG9yZXIudGVzdG5ldC5za2FsZW5vZGVzLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxMDMyMjAKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2thbGUvY3J5cHRvQmxhZGVzLmpzCiAgdmFyIHNrYWxlQ3J5cHRvQmxhZGVzID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDI2MDYyMTU3LAogICAgbmFtZTogIlNLQUxFIHwgQ3J5cHRvQmxhZGVzIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS9hZmZlY3Rpb25hdGUtaW1tZWRpYXRlLXBvbGx1eCJdLAogICAgICAgIHdlYlNvY2tldDogWwogICAgICAgICAgIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvYWZmZWN0aW9uYXRlLWltbWVkaWF0ZS1wb2xsdXgiCiAgICAgICAgXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hZmZlY3Rpb25hdGUtaW1tZWRpYXRlLXBvbGx1eC5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9jcnlwdG9Db2xvc3NldW0uanMKICB2YXIgc2thbGVDcnlwdG9Db2xvc3NldW0gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwMzI5NDIxNzIsCiAgICBuYW1lOiAiU0tBTEUgfCBDcnlwdG8gQ29sb3NzZXVtIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJzRlVFTCIsIHN5bWJvbDogInNGVUVMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS9oYXVudGluZy1kZXZvdGVkLWRlbmViIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvaGF1bnRpbmctZGV2b3RlZC1kZW5lYiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2hhdW50aW5nLWRldm90ZWQtZGVuZWIuZXhwbG9yZXIubWFpbm5ldC5za2FsZW5vZGVzLmNvbSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czoge30KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2thbGUvZXVyb3BhLmpzCiAgdmFyIHNrYWxlRXVyb3BhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyMDQ2Mzk5MTI2LAogICAgbmFtZTogIlNLQUxFIHwgRXVyb3BhIExpcXVpZGl0eSBIdWIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL2VsYXRlZC10YW4tc2thdCJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL3dzL2VsYXRlZC10YW4tc2thdCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2VsYXRlZC10YW4tc2thdC5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDMxMTM0OTUKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9ldXJvcGFUZXN0bmV0LmpzCiAgdmFyIHNrYWxlRXVyb3BhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTQ0NDY3MzQxOSwKICAgIG5hbWU6ICJTS0FMRSBFdXJvcGEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuc2thbGVub2Rlcy5jb20vdjEvanVpY3ktbG93LXNtYWxsLXRlc3RuZXQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9qdWljeS1sb3ctc21hbGwtdGVzdG5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2p1aWN5LWxvdy1zbWFsbC10ZXN0bmV0LmV4cGxvcmVyLnRlc3RuZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTEwODU4CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL2V4b3JkZS5qcwogIHZhciBza2FsZUV4b3JkZSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjEzOTkyNzU1MiwKICAgIG5hbWU6ICJTS0FMRSB8IEV4b3JkZSIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvbGlnaHQtdmFzdC1kaXBoZGEiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9saWdodC12YXN0LWRpcGhkYSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2xpZ2h0LXZhc3QtZGlwaGRhLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHt9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL2h1bWFuUHJvdG9jb2wuanMKICB2YXIgc2thbGVIdW1hblByb3RvY29sID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMjczMjI3NDUzLAogICAgbmFtZTogIlNLQUxFIHwgSHVtYW4gUHJvdG9jb2wiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL3dhbi1yZWQtYWluIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3Mvd2FuLXJlZC1haW4iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93YW4tcmVkLWFpbi5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS9uZWJ1bGEuanMKICB2YXIgc2thbGVOZWJ1bGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE0ODI2MDE2NDksCiAgICBuYW1lOiAiU0tBTEUgfCBOZWJ1bGEgR2FtaW5nIEh1YiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvZ3JlZW4tZ2lkZHktZGVuZWJvbGEiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vbWFpbm5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9ncmVlbi1naWRkeS1kZW5lYm9sYSJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2dyZWVuLWdpZGR5LWRlbmVib2xhLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjM3Mjk4NgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL25lYnVsYVRlc3RuZXQuanMKICB2YXIgc2thbGVOZWJ1bGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNzA4NDYyNCwKICAgIG5hbWU6ICJTS0FMRSBOZWJ1bGEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3Rlc3RuZXQuc2thbGVub2Rlcy5jb20vdjEvbGFua3ktaWxsLWZ1bm55LXRlc3RuZXQiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC5za2FsZW5vZGVzLmNvbS92MS93cy9sYW5reS1pbGwtZnVubnktdGVzdG5ldCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNLQUxFIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2xhbmt5LWlsbC1mdW5ueS10ZXN0bmV0LmV4cGxvcmVyLnRlc3RuZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMTA1MTQxCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL3Jhem9yLmpzCiAgdmFyIHNrYWxlUmF6b3IgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDI3ODYxMTM1MSwKICAgIG5hbWU6ICJTS0FMRSB8IFJhem9yIE5ldHdvcmsiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LnNrYWxlbm9kZXMuY29tL3YxL3R1cmJ1bGVudC11bmlxdWUtc2NoZWF0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvdHVyYnVsZW50LXVuaXF1ZS1zY2hlYXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90dXJidWxlbnQtdW5pcXVlLXNjaGVhdC5leHBsb3Jlci5tYWlubmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7fQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2FsZS90aXRhbi5qcwogIHZhciBza2FsZVRpdGFuID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMzUwMjE2MjM0LAogICAgbmFtZTogIlNLQUxFIHwgVGl0YW4gQ29tbXVuaXR5IEh1YiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic0ZVRUwiLCBzeW1ib2w6ICJzRlVFTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvcGFyYWxsZWwtc3Rvcm15LXNwaWNhIl0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL21haW5uZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvcGFyYWxsZWwtc3Rvcm15LXNwaWNhIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU0tBTEUgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vcGFyYWxsZWwtc3Rvcm15LXNwaWNhLmV4cGxvcmVyLm1haW5uZXQuc2thbGVub2Rlcy5jb20iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjA3NjQ1OAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NrYWxlL3RpdGFuVGVzdG5ldC5qcwogIHZhciBza2FsZVRpdGFuVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTAyMDM1MjIyMCwKICAgIG5hbWU6ICJTS0FMRSBUaXRhbiBIdWIiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogInNGVUVMIiwgc3ltYm9sOiAic0ZVRUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LnNrYWxlbm9kZXMuY29tL3YxL2F3YXJlLWZha2UtdHJpbS10ZXN0bmV0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3Rlc3RuZXQuc2thbGVub2Rlcy5jb20vdjEvd3MvYXdhcmUtZmFrZS10cmltLXRlc3RuZXQiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTS0FMRSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hd2FyZS1mYWtlLXRyaW0tdGVzdG5ldC5leHBsb3Jlci50ZXN0bmV0LnNrYWxlbm9kZXMuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDEwNDA3MgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9za2V0Y2hwYWQuanMKICB2YXIgc2tldGNocGFkID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5ODQxMjMsCiAgICBuYW1lOiAiRm9ybWEgU2tldGNocGFkIiwKICAgIG5ldHdvcms6ICJza2V0Y2hwYWQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgc3ltYm9sOiAiVElBIiwKICAgICAgbmFtZTogIlRJQSIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc2tldGNocGFkLTEuZm9ybWEuYXJ0Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3dzLnNrZXRjaHBhZC0xLmZvcm1hLmFydCJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIlNrZXRjaHBhZCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5za2V0Y2hwYWQtMS5mb3JtYS5hcnQiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NvbmdiaXJkLmpzCiAgdmFyIHNvbmdiaXJkID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOSwKICAgIG5hbWU6ICJTb25nYmlyZCBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogInNvbmdiaXJkIiwKICAgICAgc3ltYm9sOiAiU0dCIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vc29uZ2JpcmQtYXBpLmZsYXJlLm5ldHdvcmsvZXh0L0MvcnBjIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU29uZ2JpcmQgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc29uZ2JpcmQtZXhwbG9yZXIuZmxhcmUubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zb25nYmlyZC1leHBsb3Jlci5mbGFyZS5uZXR3b3JrL2FwaSIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zb25nYmlyZFRlc3RuZXQuanMKICB2YXIgc29uZ2JpcmRUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNiwKICAgIG5hbWU6ICJDb3N0b24iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiY29zdG9uZmxhcmUiLAogICAgICBzeW1ib2w6ICJDRkxSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vY29zdG9uLWFwaS5mbGFyZS5uZXR3b3JrL2V4dC9DL3JwYyJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNvc3RvbiBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9jb3N0b24tZXhwbG9yZXIuZmxhcmUubmV0d29yayIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9jb3N0b24tZXhwbG9yZXIuZmxhcmUubmV0d29yay9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NwaWN5LmpzCiAgdmFyIHNwaWN5ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4ODg4MiwKICAgIG5hbWU6ICJDaGlsaXogU3BpY3kgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiY2hpbGl6LXNwaWN5LVRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiQ0haIiwKICAgICAgc3ltYm9sOiAiQ0haIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL3NwaWN5LXJwYy5jaGlsaXouY29tIiwKICAgICAgICAgICJodHRwczovL2NoaWxpei1zcGljeS1ycGMucHVibGljbm9kZS5jb20iCiAgICAgICAgXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsKICAgICAgICAgICJ3c3M6Ly9zcGljeS1ycGMtd3MuY2hpbGl6LmNvbSIsCiAgICAgICAgICAid3NzOi8vY2hpbGl6LXNwaWN5LXJwYy5wdWJsaWNub2RlLmNvbSIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkNoaWxpeiBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cDovL3NwaWN5LWV4cGxvcmVyLmNoaWxpei5jb20iLAogICAgICAgIGFwaVVybDogImh0dHA6Ly9zcGljeS1leHBsb3Jlci5jaGlsaXouY29tL2FwaSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvc2hhcmRldW1TcGhpbnguanMKICB2YXIgc2hhcmRldW1TcGhpbnggPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDgwODIsCiAgICBuYW1lOiAiU2hhcmRldW0gU3BoaW54IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJTSEFSREVVTSIsIHN5bWJvbDogIlNITSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NwaGlueC5zaGFyZGV1bS5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTaGFyZGV1bSBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci1zcGhpbnguc2hhcmRldW0ub3JnIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zaGliYXJpdW0uanMKICB2YXIgc2hpYmFyaXVtID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDksCiAgICBuYW1lOiAiU2hpYmFyaXVtIiwKICAgIG5ldHdvcms6ICJzaGliYXJpdW0iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkJvbmUiLCBzeW1ib2w6ICJCT05FIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnNoaWJycGMuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zaGliYXJpdW1zY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHg4NjRCZjY4MUFERDYwNTIzOTUxODhBODkxMDFBMUIzN2QzQjRDOTYxIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDI2NTkwMAogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3NoaWJhcml1bVRlc3RuZXQuanMKICB2YXIgc2hpYmFyaXVtVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTU3LAogICAgbmFtZTogIlB1cHB5bmV0IFNoaWJhcml1bSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJCb25lIiwKICAgICAgc3ltYm9sOiAiQk9ORSIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3B1cHB5bmV0LnNoaWJycGMuY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wdXBweXNjYW4uc2hpYi5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9wdXBweXNjYW4uc2hpYi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweEE0MDI5Yjc0RkJBMzY2YzkyNmVERkE3RGQxMEIyMUM2MjExNzBhNGMiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMzAzNTc2OQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zdHJhdGlzLmpzCiAgdmFyIHN0cmF0aXMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEwNTEwNSwKICAgIG5hbWU6ICJTdHJhdGlzIE1haW5uZXQiLAogICAgbmV0d29yazogInN0cmF0aXMiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgbmFtZTogIlN0cmF0aXMiLAogICAgICBzeW1ib2w6ICJTVFJBWCIsCiAgICAgIGRlY2ltYWxzOiAxOAogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuc3RyYXRpc2V2bS5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTdHJhdGlzIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnN0cmF0aXNldm0uY29tIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3N5c2NvaW4uanMKICB2YXIgc3lzY29pbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTcsCiAgICBuYW1lOiAiU3lzY29pbiBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlN5c2NvaW4iLAogICAgICBzeW1ib2w6ICJTWVMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5zeXNjb2luLm9yZyJdLAogICAgICAgIHdlYlNvY2tldDogWyJ3c3M6Ly9ycGMuc3lzY29pbi5vcmcvd3NzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiU3lzY29pbkV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnN5c2NvaW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cGxvcmVyLnN5c2NvaW4ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyODcxMzkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy9zeXNjb2luVGVzdG5ldC5qcwogIHZhciBzeXNjb2luVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTcwMCwKICAgIG5hbWU6ICJTeXNjb2luIFRhbmVuYmF1bSBUZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlN5c2NvaW4iLAogICAgICBzeW1ib2w6ICJTWVMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy50YW5lbmJhdW0uaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnRhbmVuYmF1bS5pby93c3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJTeXNjb2luVGVzdG5ldEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3RhbmVuYmF1bS5pbyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNzEyODgKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90YXJheGEuanMKICB2YXIgdGFyYXhhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4NDEsCiAgICBuYW1lOiAiVGFyYXhhIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlRhcmEiLCBzeW1ib2w6ICJUQVJBIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLm1haW5uZXQudGFyYXhhLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGFyYXhhIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLm1haW5uZXQudGFyYXhhLmlvIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvLmpzCiAgdmFyIHRhaWtvID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjdlMywKICAgIG5hbWU6ICJUYWlrbyBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMubWFpbm5ldC50YWlrby54eXoiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vd3MubWFpbm5ldC50YWlrby54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUYWlrb3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vdGFpa29zY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS50YWlrb3NjYW4uaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYjI0MzY3NzRDM2UxOTFjODUwNTZkMjQ4RUY0MjYwY2U1ZjI3QTlEIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvSGVrbGEuanMKICB2YXIgdGFpa29IZWtsYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY3MDA5LAogICAgbmFtZTogIlRhaWtvIEhla2xhIEwyIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5oZWtsYS50YWlrby54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUYWlrb3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vaGVrbGEudGFpa29zY2FuLm5ldHdvcmsiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvSm9sbmlyLmpzCiAgdmFyIHRhaWtvSm9sbmlyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNjcwMDcsCiAgICBuYW1lOiAiVGFpa28gSm9sbmlyIChBbHBoYS01IFRlc3RuZXQpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5qb2xuaXIudGFpa28ueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiYmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci5qb2xuaXIudGFpa28ueHl6IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDczMjcwNgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90YWlrb0thdGxhLmpzCiAgdmFyIHRhaWtvS2F0bGEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDE2NzAwOCwKICAgIG5hbWU6ICJUYWlrbyBLYXRsYSAoQWxwaGEtNiBUZXN0bmV0KSIsCiAgICBuZXR3b3JrOiAidGtvLWthdGxhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy5rYXRsYS50YWlrby54eXoiXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLmthdGxhLnRhaWtvLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIua2F0bGEudGFpa28ueHl6IgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RhaWtvVGVzdG5ldFNlcG9saWEuanMKICB2YXIgdGFpa29UZXN0bmV0U2Vwb2xpYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTY3MDA1LAogICAgbmFtZTogIlRhaWtvIChBbHBoYS0zIFRlc3RuZXQpIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy50ZXN0LnRhaWtvLnh5eiJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogImJsb2Nrc2NvdXQiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIudGVzdC50YWlrby54eXoiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvdGFyYXhhVGVzdG5ldC5qcwogIHZhciB0YXJheGFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA4NDIsCiAgICBuYW1lOiAiVGFyYXhhIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlRhcmEiLCBzeW1ib2w6ICJUQVJBIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRlc3RuZXQudGFyYXhhLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGFyYXhhIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnRlc3RuZXQudGFyYXhhLmlvIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90ZWxjb2luVGVzdG5ldC5qcwogIHZhciB0ZWxjb2luVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMjAxNywKICAgIG5hbWU6ICJUZWxjb2luIEFkaXJpIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlRlbGNvaW4iLCBzeW1ib2w6ICJURUwiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVsY29pbi5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAidGVsc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZWxzY2FuLmlvIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90ZWxvcy5qcwogIHZhciB0ZWxvcyA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNDAsCiAgICBuYW1lOiAiVGVsb3MiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiVGVsb3MiLAogICAgICBzeW1ib2w6ICJUTE9TIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8vbWFpbm5ldC50ZWxvcy5uZXQvZXZtIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGVsb3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd3d3LnRlbG9zY2FuLmlvLyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4Y0ExMWJkZTA1OTc3YjM2MzExNjcwMjg4NjJiRTJhMTczOTc2Q0ExMSIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDY1MzA3MDkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90ZWxvc1Rlc3RuZXQuanMKICB2YXIgdGVsb3NUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0MSwKICAgIG5hbWU6ICJUZWxvcyIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJUZWxvcyIsCiAgICAgIHN5bWJvbDogIlRMT1MiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LnRlbG9zLm5ldC9ldm0iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJUZWxvc2NhbiAodGVzdG5ldCkiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC50ZWxvc2Nhbi5pby8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3RlbmV0LmpzCiAgdmFyIHRlbmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxNTU5LAogICAgbmFtZTogIlRlbmV0IiwKICAgIG5ldHdvcms6ICJ0ZW5ldC1tYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJURU5FVCIsCiAgICAgIHN5bWJvbDogIlRFTkVUIiwKICAgICAgZGVjaW1hbHM6IDE4CiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMudGVuZXQub3JnIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVGVuZXRTY2FuIE1haW5uZXQiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVuZXRzY2FuLmlvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3RlbmV0c2Nhbi5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90aGFpQ2hhaW4uanMKICB2YXIgdGhhaUNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA3LAogICAgbmFtZTogIlRoYWlDaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiVENIIiwgc3ltYm9sOiAiVENIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnRoYWljaGFpbi5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJCbG9ja3Njb3V0IiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cC50aGFpY2hhaW4ub3JnIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2V4cC50aGFpY2hhaW4ub3JnL2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MERhRDYxMzBlODMyYzIxNzE5QzVDRTNiYWU5MzQ1NEUxNkE4NDgyNiIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiA0ODA2Mzg2CiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiBmYWxzZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy90aHVuZGVyVGVzdG5ldC5qcwogIHZhciB0aHVuZGVyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogOTk3LAogICAgbmFtZTogIjVpcmVDaGFpbiBUaHVuZGVyIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIjVpcmUgVG9rZW4iLCBzeW1ib2w6ICI1SVJFIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLXRlc3RuZXQuNWlyZS5uZXR3b3JrIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiNWlyZUNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLjVpcmUubmV0d29yayIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvdW5yZWFsLmpzCiAgdmFyIHVucmVhbCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTgyMzMsCiAgICBuYW1lOiAiVW5yZWFsIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIG5hbWU6ICJyZUVUSCIsCiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgc3ltYm9sOiAicmVFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9ycGMudW5yZWFsLW9yYml0LmdlbGF0by5kaWdpdGFsIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiVW5yZWFsIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3VucmVhbC5ibG9ja3Njb3V0LmNvbSIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly91bnJlYWwuYmxvY2tzY291dC5jb20vYXBpL3YyIgogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4OGI2QjBlNjBEOENEODQ4OThFYThiOTgxMDY1QTEyRjg3NmVBNTY3NyIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAxNzQ1CiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvdmVjaGFpbi5qcwogIHZhciB2ZWNoYWluID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxMDAwMDksCiAgICBuYW1lOiAiVmVjaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiVmVDaGFpbiIsIHN5bWJvbDogIlZFVCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL21haW5uZXQudmVjaGFpbi5vcmciXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJWZWNoYWluIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmUudmVjaGFpbi5vcmciCiAgICAgIH0sCiAgICAgIHZlY2hhaW5TdGF0czogewogICAgICAgIG5hbWU6ICJWZWNoYWluIFN0YXRzIiwKICAgICAgICB1cmw6ICJodHRwczovL3ZlY2hhaW5zdGF0cy5jb20iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvd2FuY2hhaW4uanMKICB2YXIgd2FuY2hhaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDg4OCwKICAgIG5hbWU6ICJXYW5jaGFpbiIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiV0FOQ0hBSU4iLCBzeW1ib2w6ICJXQU4iLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsKICAgICAgICAgICJodHRwczovL2d3YW4tc3NsLndhbmRldnMub3JnOjU2ODkxIiwKICAgICAgICAgICJodHRwczovL2d3YW4yLXNzbC53YW5kZXZzLm9yZyIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIldhblNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vd2Fuc2Nhbi5vcmciCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNERjZBMTU2NmU3OEVCNDU5NGM4NkZlNzNGY2RjODI0MjllOTdmYkIiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjUzMTIzOTAKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy93YW5jaGFpblRlc3RuZXQuanMKICB2YXIgd2FuY2hhaW5UZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA5OTksCiAgICBuYW1lOiAiV2FuY2hhaW4gVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiV0FOQ0hBSU4iLCBzeW1ib2w6ICJXQU50IiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vZ3dhbi1zc2wud2FuZGV2cy5vcmc6NDY4OTEiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJXYW5TY2FuVGVzdCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93YW5zY2FuLm9yZyIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4MTFjODliRjQ0OTZjMzlGQjgwNTM1RmZiNGM5MjcxNTgzOUNDNTMyNCIsCiAgICAgICAgYmxvY2tDcmVhdGVkOiAyNDc0MzQ0OAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy93ZW1peC5qcwogIHZhciB3ZW1peCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExMSwKICAgIG5hbWU6ICJXRU1JWCIsCiAgICBuZXR3b3JrOiAid2VtaXgtbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiV0VNSVgiLCBzeW1ib2w6ICJXRU1JWCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkud2VtaXguY29tIl0gfSwKICAgICAgcHVibGljOiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkud2VtaXguY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAid2VtaXhFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci53ZW1peC5jb20iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvd2VtaXhUZXN0bmV0LmpzCiAgdmFyIHdlbWl4VGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTExMiwKICAgIG5hbWU6ICJXRU1JWCBUZXN0bmV0IiwKICAgIG5ldHdvcms6ICJ3ZW1peC10ZXN0bmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJXRU1JWCIsIHN5bWJvbDogInRXRU1JWCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9hcGkudGVzdC53ZW1peC5jb20iXSB9LAogICAgICBwdWJsaWM6IHsgaHR0cDogWyJodHRwczovL2FwaS50ZXN0LndlbWl4LmNvbSJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIndlbWl4RXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vdGVzdG5ldC53ZW1peHNjYW4uY29tIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQud2VtaXhzY2FuLmNvbS9hcGkiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3hMYXllclRlc3RuZXQuanMKICB2YXIgeExheWVyVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogMTk1LAogICAgbmFtZTogIlgxIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiT0tCIiwKICAgICAgc3ltYm9sOiAiT0tCIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8veGxheWVydGVzdHJwYy5va3guY29tIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiT0tMaW5rIiwKICAgICAgICB1cmw6ICJodHRwczovL3d3dy5va2xpbmsuY29tL3hsYXllci10ZXN0IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDYyNDM0NAogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94TGF5ZXIuanMKICB2YXIgeExheWVyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAxOTYsCiAgICBuYW1lOiAiWCBMYXllciBNYWlubmV0IiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIk9LQiIsCiAgICAgIHN5bWJvbDogIk9LQiIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy54bGF5ZXIudGVjaCJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIk9LTGluayIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cub2tsaW5rLmNvbS94bGF5ZXIiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNDc0MTYKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94YWkuanMKICB2YXIgeGFpID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA2NjAyNzksCiAgICBuYW1lOiAiWGFpIE1haW5uZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlhhaSIsIHN5bWJvbDogIlhBSSIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3hhaS1jaGFpbi5uZXQvcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci54YWktY2hhaW4ubmV0IgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjYTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJlMmExNzM5NzZjYTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDIyMjU0OQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMveGFpVGVzdG5ldC5qcwogIHZhciB4YWlUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzNzcxNDU1NTQyOSwKICAgIG5hbWU6ICJYYWkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAic1hhaSIsIHN5bWJvbDogInNYQUkiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LXYyLnhhaS1jaGFpbi5uZXQvcnBjIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LWV4cGxvcmVyLXYyLnhhaS1jaGFpbi5uZXQiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3hkYy5qcwogIHZhciB4ZGMgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDUwLAogICAgbmFtZTogIlhpbkZpbiBOZXR3b3JrIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIlhEQyIsCiAgICAgIHN5bWJvbDogIlhEQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy54aW5maW4ubmV0d29yayJdIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICB4aW5maW46IHsKICAgICAgICBuYW1lOiAiWGluRmluIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnhpbmZpbi5uZXR3b3JrIgogICAgICB9LAogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJsb2Nrc3NjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8veGRjLmJsb2Nrc3NjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNzE1NDI3ODgKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94ZGNUZXN0bmV0LmpzCiAgdmFyIHhkY1Rlc3RuZXQgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDUxLAogICAgbmFtZTogIkFwb3RoZW0gTmV0d29yayIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJUWERDIiwKICAgICAgc3ltYm9sOiAiVFhEQyIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL2VycGMuYXBvdGhlbS5uZXR3b3JrIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzc2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hcG90aGVtLmJsb2Nrc3NjYW4uaW8iCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTk3NjUzODkKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy94clNlcG9saWEuanMKICB2YXIgeHJTZXBvbGlhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAyNzMwLAogICAgbmFtZTogIlhSIFNlcG9saWEiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAidFhSIiwKICAgICAgc3ltYm9sOiAidFhSIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogeyBodHRwOiBbImh0dHBzOi8veHItc2Vwb2xpYS10ZXN0bmV0LnJwYy5jYWxkZXJhLnh5ei9odHRwIl0gfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiQmxvY2tzY291dCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly94ci1zZXBvbGlhLXRlc3RuZXQuZXhwbG9yZXIuY2FsZGVyYS54eXoiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3lvb2xkb1ZlcnNlLmpzCiAgdmFyIHlvb2xkb1ZlcnNlID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA1MDAwNSwKICAgIG5hbWU6ICJZb29sZG8gVmVyc2UiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk9BUyIsIHN5bWJvbDogIk9BUyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy55b29sZG8tdmVyc2UueHl6Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiWW9vbGRvIFZlcnNlIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnlvb2xkby12ZXJzZS54eXoiCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMveW9vbGRvVmVyc2VUZXN0bmV0LmpzCiAgdmFyIHlvb2xkb1ZlcnNlVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNTAwMDYsCiAgICBuYW1lOiAiWW9vbGRvIFZlcnNlIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIk9BUyIsIHN5bWJvbDogIk9BUyIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy50ZXN0bmV0Lnlvb2xkby12ZXJzZS54eXoiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJZb29sZG8gVmVyc2UgVGVzdG5ldCBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci50ZXN0bmV0Lnlvb2xkby12ZXJzZS54eXoiCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3pldGFjaGFpbi5qcwogIHZhciB6ZXRhY2hhaW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDdlMywKICAgIG5hbWU6ICJaZXRhQ2hhaW4iLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWmV0YSIsCiAgICAgIHN5bWJvbDogIlpFVEEiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3pldGFjaGFpbi1ldm0uYmxvY2twaS5uZXR3b3JrL3YxL3JwYy9wdWJsaWMiXQogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE2MzI3ODEKICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiWmV0YVNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuemV0YWNoYWluLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3pldGFjaGFpbkF0aGVuc1Rlc3RuZXQuanMKICB2YXIgemV0YWNoYWluQXRoZW5zVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogNzAwMSwKICAgIG5hbWU6ICJaZXRhQ2hhaW4gQXRoZW5zIFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiWmV0YSIsCiAgICAgIHN5bWJvbDogImFaRVRBIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly96ZXRhY2hhaW4tYXRoZW5zLWV2bS5ibG9ja3BpLm5ldHdvcmsvdjEvcnBjL3B1YmxpYyJdCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogMjcxNTIxNwogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJaZXRhU2NhbiIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9hdGhlbnMuZXhwbG9yZXIuemV0YWNoYWluLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemhlamlhbmcuanMKICB2YXIgemhlamlhbmcgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDEzMzc4MDMsCiAgICBuYW1lOiAiWmhlamlhbmciLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIlpoZWppYW5nIEV0aGVyIiwgc3ltYm9sOiAiWmhlakVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy56aGVqaWFuZy5ldGhwYW5kYW9wcy5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogIkJlYWNvbmNoYWluIiwKICAgICAgICB1cmw6ICJodHRwczovL3poZWppYW5nLmJlYWNvbmNoYS5pbiIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemlsbGlxYS5qcwogIHZhciB6aWxsaXFhID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMjc2OSwKICAgIG5hbWU6ICJaaWxsaXFhIiwKICAgIG5ldHdvcms6ICJ6aWxsaXFhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJaaWxsaXFhIiwgc3ltYm9sOiAiWklMIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vYXBpLnppbGxpcWEuY29tIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJuYWwiLAogICAgICAgIHVybDogImh0dHBzOi8vZXZteC56aWxsaXFhLmNvbSIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IGZhbHNlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3ppbGxpcWFUZXN0bmV0LmpzCiAgdmFyIHppbGxpcWFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiAzMzEwMSwKICAgIG5hbWU6ICJaaWxsaXFhIFRlc3RuZXQiLAogICAgbmV0d29yazogInppbGxpcWEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiWmlsbGlxYSIsIHN5bWJvbDogIlpJTCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL2Rldi1hcGkuemlsbGlxYS5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcm5hbCIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9ldm14LnRlc3RuZXQuemlsbGlxYS5jb20iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prRmFpci5qcwogIHZhciB6a0ZhaXIgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgaWQ6IDQyNzY2LAogICAgbmFtZTogIlpLRmFpciBNYWlubmV0IiwKICAgIG5ldHdvcms6ICJ6a2ZhaXItbWFpbm5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJVU0QgQ29pbiIsCiAgICAgIHN5bWJvbDogIlVTREMiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3JwYy56a2ZhaXIuaW8iXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vcnBjLnprZmFpci5pbyJdCiAgICAgIH0KICAgIH0sCiAgICBibG9ja0V4cGxvcmVyczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgbmFtZTogInprRmFpciBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zY2FuLnprZmFpci5pbyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9zY2FuLnprZmFpci5pby9hcGkiCiAgICAgIH0KICAgIH0sCiAgICBjb250cmFjdHM6IHsKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNhMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYmUyYTE3Mzk3NmNhMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNjA5MDk1OQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogZmFsc2UKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemtGYWlyVGVzdG5ldC5qcwogIHZhciB6a0ZhaXJUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0Mzg1MSwKICAgIG5hbWU6ICJaS0ZhaXIgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiemtmYWlyLXRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsKICAgICAgZGVjaW1hbHM6IDE4LAogICAgICBuYW1lOiAiVVNEIENvaW4iLAogICAgICBzeW1ib2w6ICJVU0RDIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly90ZXN0bmV0LXJwYy56a2ZhaXIuaW8iXQogICAgICB9LAogICAgICBwdWJsaWM6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC1ycGMuemtmYWlyLmlvIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiemtGYWlyIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3Rlc3RuZXQtc2Nhbi56a2ZhaXIuaW8iCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prTGlua05vdmEuanMKICB2YXIgemtMaW5rTm92YSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogODEwMTgwLAogICAgbmFtZTogInprTGluayBOb3ZhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkVUSCIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsgaHR0cDogWyJodHRwczovL3JwYy56a2xpbmsuaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJ6a0xpbmsgTm92YSBCbG9jayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9leHBsb3Jlci56a2xpbmsuaW8iCiAgICAgIH0KICAgIH0KICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvemtMaW5rTm92YVNlcG9saWFUZXN0bmV0LmpzCiAgdmFyIHprTGlua05vdmFTZXBvbGlhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICBpZDogODEwMTgxLAogICAgbmFtZTogInprTGluayBOb3ZhIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJFVEgiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7IGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLnJwYy56a2xpbmsuaW8iXSB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJ6a0xpbmsgTm92YSBCbG9jayBFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZXBvbGlhLmV4cGxvcmVyLnprbGluay5pbyIKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy96a3N5bmMuanMKICB2YXIgemtzeW5jID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnLAogICAgaWQ6IDMyNCwKICAgIG5hbWU6ICJaS3N5bmMgRXJhIiwKICAgIG5ldHdvcms6ICJ6a3N5bmMtZXJhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9tYWlubmV0LmVyYS56a3N5bmMuaW8iXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vbWFpbm5ldC5lcmEuemtzeW5jLmlvL3dzIl0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXRoZXJzY2FuIiwKICAgICAgICB1cmw6ICJodHRwczovL2VyYS56a3N5bmMubmV0d29yay8iLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vYXBpLWVyYS56a3N5bmMubmV0d29yay9hcGkiCiAgICAgIH0sCiAgICAgIG5hdGl2ZTogewogICAgICAgIG5hbWU6ICJaS3N5bmMgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuemtzeW5jLmlvLyIsCiAgICAgICAgYXBpVXJsOiAiaHR0cHM6Ly9ibG9jay1leHBsb3Jlci1hcGkubWFpbm5ldC56a3N5bmMuaW8vYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhGOWNkYTYyNEZCQzdlMDU5MzU1Y2U5OGEzMTY5M2QyOTlGQUNkOTYzIgogICAgICB9CiAgICB9CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prc3luY0luTWVtb3J5Tm9kZS5qcwogIHZhciB6a3N5bmNJbk1lbW9yeU5vZGUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcsCiAgICBpZDogMjYwLAogICAgbmFtZTogIlpLc3luYyBJbk1lbW9yeSBOb2RlIiwKICAgIG5ldHdvcms6ICJ6a3N5bmMtaW4tbWVtb3J5LW5vZGUiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkV0aGVyIiwgc3ltYm9sOiAiRVRIIiwgZGVjaW1hbHM6IDE4IH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHA6Ly9sb2NhbGhvc3Q6ODAxMSJdCiAgICAgIH0KICAgIH0sCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3prc3luY0xvY2FsTm9kZS5qcwogIHZhciB6a3N5bmNMb2NhbE5vZGUgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcsCiAgICBpZDogMjcwLAogICAgbmFtZTogIlpLc3luYyBDTEkgTG9jYWwgTm9kZSIsCiAgICBuZXR3b3JrOiAiemtzeW5jLWNsaS1sb2NhbC1ub2RlIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7IG5hbWU6ICJFdGhlciIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwOi8vbG9jYWxob3N0OjMwNTAiXQogICAgICB9CiAgICB9LAogICAgdGVzdG5ldDogdHJ1ZQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvdmllbS9fZXNtL2NoYWlucy9kZWZpbml0aW9ucy96a3N5bmNTZXBvbGlhVGVzdG5ldC5qcwogIHZhciB6a3N5bmNTZXBvbGlhVGVzdG5ldCA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZywKICAgIGlkOiAzMDAsCiAgICBuYW1lOiAiWktzeW5jIFNlcG9saWEgVGVzdG5ldCIsCiAgICBuZXR3b3JrOiAiemtzeW5jLXNlcG9saWEtdGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogeyBuYW1lOiAiRXRoZXIiLCBzeW1ib2w6ICJFVEgiLCBkZWNpbWFsczogMTggfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9zZXBvbGlhLmVyYS56a3N5bmMuZGV2Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3NlcG9saWEuZXJhLnprc3luYy5kZXYvd3MiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFdGhlcnNjYW4iLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS1lcmEuemtzeW5jLm5ldHdvcmsvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL2FwaS1zZXBvbGlhLWVyYS56a3N5bmMubmV0d29yay9hcGkiCiAgICAgIH0sCiAgICAgIG5hdGl2ZTogewogICAgICAgIG5hbWU6ICJaS3N5bmMgRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vc2Vwb2xpYS5leHBsb3Jlci56a3N5bmMuaW8vIiwKICAgICAgICBibG9ja0V4cGxvcmVyQXBpOiAiaHR0cHM6Ly9ibG9jay1leHBsb3Jlci1hcGkuc2Vwb2xpYS56a3N5bmMuZGV2L2FwaSIKICAgICAgfQogICAgfSwKICAgIGNvbnRyYWN0czogewogICAgICBtdWx0aWNhbGwzOiB7CiAgICAgICAgYWRkcmVzczogIjB4RjljZGE2MjRGQkM3ZTA1OTM1NWNlOThhMzE2OTNkMjk5RkFDZDk2MyIKICAgICAgfQogICAgfSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvem9yYS5qcwogIHZhciBzb3VyY2VJZDI4ID0gMTsKICB2YXIgem9yYSA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDaGFpbih7CiAgICAuLi5jaGFpbkNvbmZpZzIsCiAgICBpZDogNzc3Nzc3NywKICAgIG5hbWU6ICJab3JhIiwKICAgIG5hdGl2ZUN1cnJlbmN5OiB7CiAgICAgIGRlY2ltYWxzOiAxOCwKICAgICAgbmFtZTogIkV0aGVyIiwKICAgICAgc3ltYm9sOiAiRVRIIgogICAgfSwKICAgIHJwY1VybHM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIGh0dHA6IFsiaHR0cHM6Ly9ycGMuem9yYS5lbmVyZ3kiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vcnBjLnpvcmEuZW5lcmd5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiRXhwbG9yZXIiLAogICAgICAgIHVybDogImh0dHBzOi8vZXhwbG9yZXIuem9yYS5lbmVyZ3kiLAogICAgICAgIGFwaVVybDogImh0dHBzOi8vZXhwbG9yZXIuem9yYS5lbmVyZ3kvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMjhdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHg5RTYyMDRGNzUwY0Q4NjZiMjk5NTk0ZTJhQzllQTgyNEUyZTVmOTVjIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogNTg4MgogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQyOF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweDFhMGFkMDExOTEzQTE1MGY2OWY2QTE5REY0NDdBMENmRDk1NTEwNTQiCiAgICAgICAgfQogICAgICB9LAogICAgICBsMVN0YW5kYXJkQnJpZGdlOiB7CiAgICAgICAgW3NvdXJjZUlkMjhdOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgzZTJFYTlCOTJCN0U0OEE1MjI5NmZEMjYxZGMyNmZkOTk1Mjg0NjMxIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHNvdXJjZUlkOiBzb3VyY2VJZDI4CiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3pvcmFTZXBvbGlhLmpzCiAgdmFyIHNvdXJjZUlkMjkgPSAxMTE1NTExMTsKICB2YXIgem9yYVNlcG9saWEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ2hhaW4oewogICAgLi4uY2hhaW5Db25maWcyLAogICAgaWQ6IDk5OTk5OTk5OSwKICAgIG5hbWU6ICJab3JhIFNlcG9saWEiLAogICAgbmV0d29yazogInpvcmEtc2Vwb2xpYSIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJab3JhIFNlcG9saWEiLAogICAgICBzeW1ib2w6ICJFVEgiCiAgICB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3NlcG9saWEucnBjLnpvcmEuZW5lcmd5Il0sCiAgICAgICAgd2ViU29ja2V0OiBbIndzczovL3NlcG9saWEucnBjLnpvcmEuZW5lcmd5Il0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRXhwbG9yZXJzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBuYW1lOiAiWm9yYSBTZXBvbGlhIEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL3NlcG9saWEuZXhwbG9yZXIuem9yYS5lbmVyZ3kvIiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3NlcG9saWEuZXhwbG9yZXIuem9yYS5lbmVyZ3kvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIGwyT3V0cHV0T3JhY2xlOiB7CiAgICAgICAgW3NvdXJjZUlkMjldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHgyNjE1QjQ4MUJkM0U1QTFDMEM3Q2EzRGExYmRjNjYzRTg2MTVBZGU5IgogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVsdGljYWxsMzogewogICAgICAgIGFkZHJlc3M6ICIweGNBMTFiZGUwNTk3N2IzNjMxMTY3MDI4ODYyYkUyYTE3Mzk3NkNBMTEiLAogICAgICAgIGJsb2NrQ3JlYXRlZDogODMxNjAKICAgICAgfSwKICAgICAgcG9ydGFsOiB7CiAgICAgICAgW3NvdXJjZUlkMjldOiB7CiAgICAgICAgICBhZGRyZXNzOiAiMHhlZmZFMkM2Y0E5QWI3OTdENDE4ZjBEOTFlQTYwODA3NzEzZjM1MzZmIgogICAgICAgIH0KICAgICAgfSwKICAgICAgbDFTdGFuZGFyZEJyaWRnZTogewogICAgICAgIFtzb3VyY2VJZDI5XTogewogICAgICAgICAgYWRkcmVzczogIjB4NTM3NmYxRDU0M2RjYkI1QkQ0MTZjNTZDMTg5ZTRjQjczOTlmQ2NDQiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBzb3VyY2VJZDogc291cmNlSWQyOSwKICAgIHRlc3RuZXQ6IHRydWUKICB9KTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9jaGFpbnMvZGVmaW5pdGlvbnMvem9yYVRlc3RuZXQuanMKICB2YXIgc291cmNlSWQzMCA9IDU7CiAgdmFyIHpvcmFUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIC4uLmNoYWluQ29uZmlnMiwKICAgIGlkOiA5OTksCiAgICBuYW1lOiAiWm9yYSBHb2VybGkgVGVzdG5ldCIsCiAgICBuYXRpdmVDdXJyZW5jeTogewogICAgICBkZWNpbWFsczogMTgsCiAgICAgIG5hbWU6ICJab3JhIEdvZXJsaSIsCiAgICAgIHN5bWJvbDogIkVUSCIKICAgIH0sCiAgICBycGNVcmxzOiB7CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICBodHRwOiBbImh0dHBzOi8vdGVzdG5ldC5ycGMuem9yYS5lbmVyZ3kiXSwKICAgICAgICB3ZWJTb2NrZXQ6IFsid3NzOi8vdGVzdG5ldC5ycGMuem9yYS5lbmVyZ3kiXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJFeHBsb3JlciIsCiAgICAgICAgdXJsOiAiaHR0cHM6Ly90ZXN0bmV0LmV4cGxvcmVyLnpvcmEuZW5lcmd5IiwKICAgICAgICBhcGlVcmw6ICJodHRwczovL3Rlc3RuZXQuZXhwbG9yZXIuem9yYS5lbmVyZ3kvYXBpIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIC4uLmNoYWluQ29uZmlnMi5jb250cmFjdHMsCiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDE4OTEyMwogICAgICB9LAogICAgICBwb3J0YWw6IHsKICAgICAgICBbc291cmNlSWQzMF06IHsKICAgICAgICAgIGFkZHJlc3M6ICIweERiOUY1MTc5MDM2NWU3ZGMxOTZlN0QwNzI3MjhkZjM5QmU5NThBQ2UiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc291cmNlSWQ6IHNvdXJjZUlkMzAsCiAgICB0ZXN0bmV0OiB0cnVlCiAgfSk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vY2hhaW5zL2RlZmluaXRpb25zL3ppcmN1aXRUZXN0bmV0LmpzCiAgdmFyIHppcmN1aXRUZXN0bmV0ID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNoYWluKHsKICAgIGlkOiA0ODg5OSwKICAgIG5hbWU6ICJaaXJjdWl0IFRlc3RuZXQiLAogICAgbmF0aXZlQ3VycmVuY3k6IHsgbmFtZTogIkVUSCIsIHN5bWJvbDogIkVUSCIsIGRlY2ltYWxzOiAxOCB9LAogICAgcnBjVXJsczogewogICAgICBkZWZhdWx0OiB7CiAgICAgICAgaHR0cDogWyJodHRwczovL3ppcmN1aXQxLnAycGlmeS5jb20iXQogICAgICB9CiAgICB9LAogICAgYmxvY2tFeHBsb3JlcnM6IHsKICAgICAgZGVmYXVsdDogewogICAgICAgIG5hbWU6ICJaaXJjdWl0IEV4cGxvcmVyIiwKICAgICAgICB1cmw6ICJodHRwczovL2V4cGxvcmVyLnppcmN1aXQuY29tIgogICAgICB9CiAgICB9LAogICAgY29udHJhY3RzOiB7CiAgICAgIG11bHRpY2FsbDM6IHsKICAgICAgICBhZGRyZXNzOiAiMHhjQTExYmRlMDU5NzdiMzYzMTE2NzAyODg2MmJFMmExNzM5NzZDQTExIiwKICAgICAgICBibG9ja0NyZWF0ZWQ6IDYwNDAyODcKICAgICAgfQogICAgfQogIH0pOwoKICAvLyBub2RlX21vZHVsZXMvQHNjdXJlL2JpcDM5L2VzbS93b3JkbGlzdHMvY3plY2guanMKICB2YXIgd29yZGxpc3QgPSBgYWJkaWthY2UKYWJlY2VkYQphZHJlc2EKYWdyZXNlCmFrY2UKYWt0b3ZrYQphbGVqCmFsa29ob2wKYW1wdXRhY2UKYW5hbmFzCmFuZHVsa2EKYW5la2RvdGEKYW5rZXRhCmFudGlrYQphbnVsb3ZhdAphcmNoYQphcm9nYW5jZQphc2ZhbHQKYXNpc3RlbnQKYXNwaXJhY2UKYXN0bWEKYXN0cm9ub20KYXRsYXMKYXRsZXRpa2EKYXRvbAphdXRvYnVzCmF6eWwKYmFia2EKYmFjaG9yCmJhY2lsCmJhY3Vsa2EKYmFkYXRlbApiYWdldGEKYmFncgpiYWhubwpiYWt0ZXJpZQpiYWxhZGEKYmFsZXRrYQpiYWxrb24KYmFsb25lawpiYWx2YW4KYmFsemEKYmFtYnVzCmJhbmtvbWF0CmJhcmJhcgpiYXJldApiYXJtYW4KYmFyb2tvCmJhcnZhCmJhdGVya2EKYmF0b2gKYmF2bG5hCmJhemFsa2EKYmF6aWxpa2EKYmF6dWthCmJlZG5hCmJlcmFuCmJlc2VkYQpiZXN0aWUKYmV0b24KYmV6aW5rYQpiZXptb2MKYmV6dGFrCmJpY3lrbApiaWRsbwpiaWZ0ZWsKYmlraW55CmJpbGFuY2UKYmlvZ3JhZgpiaW9sb2cKYml0dmEKYml6b24KYmxhaG9ieXQKYmxhdG91Y2gKYmxlY2hhCmJsZWR1bGUKYmxlc2sKYmxpa2F0CmJsaXpuYQpibG9rb3ZhdApibG91ZGl0CmJsdWQKYm9iZWsKYm9icgpib2RsaW5hCmJvZG5vdXQKYm9oYXRvc3QKYm9qa290CmJvam92YXQKYm9rb3J5cwpib2xlc3QKYm9yZWMKYm9yb3ZpY2UKYm90YQpib3ViZWwKYm91Y2hhdApib3VkYQpib3VsZQpib3VyYXQKYm94ZXIKYnJhZGF2a2EKYnJhbWJvcmEKYnJhbmthCmJyYXRyCmJyZXB0YQpicmlrZXRhCmJya28KYnJsb2gKYnJvbnoKYnJvc2tldgpicnVuZXRrYQpicnVzaW5rYQpicnpkYQpicnp5CmJ1YmxpbmEKYnVibm92YXQKYnVjaHRhCmJ1ZGl0ZWwKYnVka2EKYnVkb3ZhCmJ1ZmV0CmJ1amFyb3N0CmJ1a3ZpY2UKYnVsZG9rCmJ1bHZhCmJ1bmRhCmJ1bmtyCmJ1cnphCmJ1dGlrCmJ1dm9sCmJ1em9sYQpieWRsZXQKYnlsaW5hCmJ5dG92a2EKYnp1a290CmNhcGFydApjYXJldm5hCmNlZHIKY2VkdWxlCmNlamNoCmNlam4KY2VsYQpjZWxlcgpjZWxrZW0KY2VsbmljZQpjZW5pbmEKY2Vubm9zdApjZW5vdmthCmNlbnRydW0KY2Vuem9yCmNlc3RvcGlzCmNldGthCmNoYWx1cGEKY2hhcGFkbG8KY2hhcml0YQpjaGF0YQpjaGVjaHRhdApjaGVtaWUKY2hpY2hvdApjaGlydXJnCmNobGFkCmNobGViYQpjaGx1Yml0CmNobWVsCmNobXVyYQpjaG9ib3QKY2hvY2hvbApjaG9kYmEKY2hvbGVyYQpjaG9tb3V0CmNob3BpdApjaG9yb2JhCmNob3YKY2hyYXBvdApjaHJsaXQKY2hydApjaHJ1cApjaHRpdm9zdApjaHVkaW5hCmNodXRuYXQKY2h2YXQKY2h2aWxrYQpjaHZvc3QKY2h5YmEKY2h5c3RhdApjaHl0aXQKY2lidWxlCmNpZ2FyZXRhCmNpaGVsbmEKY2lobGEKY2lua290CmNpcmt1cwpjaXN0ZXJuYQpjaXRhY2UKY2l0cnVzCmNpemluZWMKY2l6b3N0CmNsb25hCmNva29saXYKY291dmF0CmN0aXRlbApjdG5vc3QKY3Vkbm9zdApjdWtldGEKY3VrcgpjdXBvdApjdmFrbm91dApjdmFsCmN2aWsKY3Zya290CmN5a2xpc3RhCmRhbGVrbwpkYXJlYmEKZGF0ZWwKZGF0dW0KZGNlcmEKZGViYXRhCmRlY2hvdmthCmRlY2liZWwKZGVmaWNpdApkZWZsYWNlCmRla2wKZGVrcmV0CmRlbW9rcmF0CmRlcHJlc2UKZGVyYnkKZGVza2EKZGV0ZWt0aXYKZGlrb2JyYXoKZGlrdG92YXQKZGlvZGEKZGlwbG9tCmRpc2sKZGlzcGxlagpkaXZhZGxvCmRpdm9jaApkbGFoYQpkbG91aG8KZGx1aG9waXMKZG5lcwpkb2Jybwpkb2J5dGVrCmRvY2VudApkb2NodXRpdApkb2RuZXMKZG9obGVkCmRvaG9kYQpkb2hyYQpkb2plbQpkb2puaWNlCmRva2xhZApkb2tvbGEKZG9rdG9yCmRva3VtZW50CmRvbGFyCmRvbGV2YQpkb2xpbmEKZG9tYQpkb21pbmFudApkb21sdXZpdApkb21vdgpkb251dGl0CmRvcGFkCmRvcGlzCmRvcGxuaXQKZG9wb3N1ZApkb3Byb3ZvZApkb3B1c3RpdApkb3Jheml0CmRvcm9zdApkb3J0CmRvc2FoCmRvc2xvdgpkb3N0YXRlawpkb3N1ZApkb3N5dGEKZG90YXoKZG90ZWsKZG90a25vdXQKZG91ZmF0CmRvdXRuYXQKZG92b3pjZQpkb3phZHUKZG96bmF0CmRvem9yY2UKZHJhaG90YQpkcmFrCmRyYW1hdGlrCmRyYXZlYwpkcmF6ZQpkcmRvbApkcm9ibm9zdApkcm9nZXJpZQpkcm96ZApkcnNub3N0CmRydGl0CmRyem9zdApkdWJlbgpkdWNob3ZubwpkdWRlawpkdWhhCmR1aG92a2EKZHVzaXQKZHVzbm8KZHV0b3N0CmR2b2ppY2UKZHZvcmVjCmR5bmFtaXQKZWtvbG9nCmVrb25vbWllCmVsZWt0cm9uCmVsaXBzYQplbWFpbAplbWlzZQplbW9jZQplbXBhdGllCmVwaXpvZGEKZXBvY2hhCmVwb3BlagplcG9zCmVzZWoKZXNlbmNlCmVza29ydGEKZXNreW1vCmV0aWtldGEKZXVmb3JpZQpldm9sdWNlCmV4ZWt1Y2UKZXhrdXJ6ZQpleHBlZGljZQpleHBsb3plCmV4cG9ydApleHRyYWt0CmZhY2thCmZhamZrYQpmYWt1bHRhCmZhbmF0aWsKZmFudGF6aWUKZmFybWFjaWUKZmF2b3JpdApmYXpvbGUKZmVkZXJhY2UKZmVqZXRvbgpmZW5rYQpmaWFsa2EKZmlndXJhbnQKZmlsb3pvZgpmaWx0cgpmaW5hbmNlCmZpbnRhCmZpeGFjZQpmam9yZApmbGFuZWwKZmxpcnQKZmxvdGlsYQpmb25kCmZvc2Zvcgpmb3RiYWwKZm90a2EKZm90b24KZnJha2NlCmZyZXNrYQpmcm9udGEKZnVrYXIKZnVua2NlCmZ5emlrYQpnYWxlamUKZ2FyYW50CmdlbmV0aWthCmdlb2xvZwpnaWxvdGluYQpnbGF6dXJhCmdsZWp0CmdvbGVtCmdvbGZpc3RhCmdvdGlrYQpncmFmCmdyYW1vZm9uCmdyYW51bGUKZ3JlcApncmlsCmdyb2cKZ3JvdGVza2EKZ3VtYQpoYWRpY2UKaGFkcgpoYWxhCmhhbGVua2EKaGFuYmEKaGFub3BpcwpoYXJmYQpoYXJwdW5hCmhhdnJhbgpoZWJrb3N0CmhlamthbApoZWpubwpoZWp0bWFuCmhla3RhcgpoZWxtYQpoZW1hdG9tCmhlcmVjCmhlcm5hCmhlc2xvCmhlemt5Cmhpc3RvcmlrCmhsYWRvdmthCmhsYXNpdmt5CmhsYXZhCmhsZWRhdApobGVuCmhsb2RhdmVjCmhsb2gKaGxvdXBvc3QKaGx0YXQKaGx1YmluYQpobHVjaG90YQpobWF0Cmhtb3RhCmhteXoKaG5pcwpobm9qaXZvCmhub3V0CmhvYmxpbmEKaG9ib2oKaG9jaApob2RpbnkKaG9kbGF0CmhvZG5vdGEKaG9kb3ZhdApob2pub3N0Cmhva2VqCmhvbGlua2EKaG9sa2EKaG9sdWIKaG9tb2xlCmhvbml0YmEKaG9ub3JhY2UKaG9yYWwKaG9yZGEKaG9yaXpvbnQKaG9ya28KaG9ybGl2ZWMKaG9ybW9uCmhvcm5pbmEKaG9yb3Nrb3AKaG9yc3R2bwpob3Nwb2RhCmhvc3RpbmEKaG90b3Zvc3QKaG91YmEKaG91Zgpob3VwYXQKaG91c2thCmhvdm9yCmhyYWRiYQpocmFuaWNlCmhyYXZvc3QKaHJhemRhCmhyYm9sZWsKaHJkaW5hCmhyZGxvCmhyZG9zdApocm5lawpocm9ia2EKaHJvbWFkYQpocm90Cmhyb3VkYQpocm96ZW4KaHJzdGthCmhydWJvc3QKaHJ5emF0Cmh1YmVub3N0Cmh1Ym5vdXQKaHVkYmEKaHVrb3QKaHVtcgpodXNpdGEKaHVzdG90YQpodm96ZApoeWJub3N0Cmh5ZHJhbnQKaHlnaWVuYQpoeW1uYQpoeXN0ZXJpawppZHlsa2EKaWhuZWQKaWtvbmEKaWx1emUKaW11bml0YQppbmZla2NlCmluZmxhY2UKaW5rYXNvCmlub3ZhY2UKaW5zcGVrY2UKaW50ZXJuZXQKaW52YWxpZGEKaW52ZXN0b3IKaW56ZXJjZQppcm9uaWUKamFibGtvCmphY2h0YQpqYWhvZGEKamFrbWlsZQpqYWtvc3QKamFsb3ZlYwpqYW50YXIKamFybWFyawpqYXJvCmphc2FuCmphc25vCmphdGthCmphdm9yCmphenlrCmplZGluZWMKamVkbGUKamVkbmF0ZWwKamVobGFuCmpla290CmplbGVuCmplbGl0bwpqZW1ub3N0Cmplbm9tCmplcGljZQpqZXNldGVyCmpldml0CmplemRlYwpqZXplcm8KamluYWsKamluZHkKamlub2NoCmppc2tyYQpqaXN0b3RhCmppdHJuaWNlCmppenZhCmptZW5vdmF0CmpvZ3VydApqdXJ0YQprYWJhcmV0CmthYmVsCmthYmluZXQKa2FjaG5hCmthZGV0CmthZGlkbG8Ka2FoYW4Ka2FqYWsKa2FqdXRhCmtha2FvCmtha3R1cwprYWxhbWl0YQprYWxob3R5CmthbGlicgprYWxub3N0CmthbWVyYQprYW1rb2xpdgprYW1uYQprYW5pYmFsCmthbm9lCmthbnRvcgprYXBhbGluYQprYXBlbGEKa2FwaXRvbGEKa2Fwa2EKa2FwbGUKa2Fwb3RhCmthcHIKa2FwdXN0YQprYXB5YmFyYQprYXJhbWVsCmthcm90a2EKa2FydG9uCmthc2EKa2F0YWxvZwprYXRlZHJhCmthdWNlCmthdXphCmthdmFsZWMKa2F6YWprYQprYXpldGEKa2F6aXZvc3QKa2Rla29saXYKa2Rlc2kKa2VkbHViZW4Ka2VtcAprZXJhbWlrYQpraW5vCmtsYWNlawprbGFkaXZvCmtsYW0Ka2xhcG90CmtsYXNpa2EKa2xhdW4Ka2xlYwprbGVuYmEKa2xlcGF0CmtsZXNub3V0CmtsaWQKa2xpbWEKa2xpc25hCmtsb2JvdWsKa2xva2FuCmtsb3BhCmtsb3ViCmtsdWJvdm5hCmtsdXNhdAprbHV6a29zdAprbWVuCmttaXRhdAprbW90cgprbmloYQprbm90CmtvYWxpY2UKa29iZXJlYwprb2JrYQprb2JsaWhhCmtvYnlsYQprb2NvdXIKa29ob3V0CmtvamVuZWMKa29rb3MKa29rdGVqbAprb2xhcHMKa29sZWRhCmtvbGl6ZQprb2xvCmtvbWFuZG8Ka29tZXRhCmtvbWlrCmtvbW5hdGEKa29tb3JhCmtvbXBhcwprb211bml0YQprb25hdAprb25jZXB0CmtvbmRpY2UKa29uZWMKa29uZmVzZQprb25ncmVzCmtvbmluYQprb25rdXJzCmtvbnRha3QKa29uemVydmEKa29wYW5lYwprb3BpZQprb3Bub3V0CmtvcHJvdmthCmtvcmJlbAprb3Jla3Rvcgprb3JtaWRsbwprb3JvcHRldgprb3JwdXMKa29ydW5hCmtvcnl0bwprb3J6ZXQKa29zYXRlYwprb3N0a2EKa290ZWwKa290bGV0YQprb3RvdWwKa291a2F0CmtvdXBlbG5hCmtvdXNlawprb3V6bG8Ka292Ym9qCmtvemEKa296b3JvaAprcmFiaWNlCmtyYWNoCmtyYWppbmEKa3JhbG92YXQKa3Jhc29waXMKa3JhdmF0YQprcmVkaXQKa3JlamNhcgprcmVzYmEKa3JldmV0YQprcmlrZXQKa3JpdGlrCmtyaXplCmtya2F2ZWMKa3JtZWxlYwprcm1pdm8Ka3JvY2FuCmtyb2sKa3JvbmlrYQprcm9waXQKa3JvdXBhCmtyb3ZrYQprcnRlawprcnVoYWRsbwprcnVwaWNlCmtydXRvc3QKa3J2aW5rYQprcnljaGxlCmtyeXB0YQprcnlzdGFsCmtyeXQKa3VkbGFua2EKa3VmcgprdWpub3N0Cmt1a2xhCmt1bGFqZGEKa3VsaWNoCmt1bGthCmt1bG9tZXQKa3VsdHVyYQprdW5hCmt1cG9kaXZ1Cmt1cnQKa3Vyem9yCmt1dGlsCmt2YWxpdGEKa3Zhc2lua2EKa3Zlc3RvcgpreW5vbG9nCmt5c2VsaW5hCmt5dGFyYQpreXRpY2UKa3l0a2EKa3l0b3ZlYwpreXZhZGxvCmxhYnJhZG9yCmxhY2h0YW4KbGFkbm9zdApsYWlrCmxha29tZWMKbGFtZWxhCmxhbXBhCmxhbm92a2EKbGFzaWNlCmxhc28KbGFzdHVyYQpsYXRpbmthCmxhdmluYQpsZWJrYQpsZWNrZHkKbGVkZW4KbGVkbmljZQpsZWRvdmthCmxlZHZpbmEKbGVnZW5kYQpsZWdpZQpsZWdyYWNlCmxlaGNlCmxlaGtvc3QKbGVobm91dApsZWt0dmFyCmxlbm9jaG9kCmxlbnRpbGthCmxlcGVua2EKbGVwaWRsbwpsZXRhZGxvCmxldGVjCmxldG1vCmxldG9rcnVoCmxldmhhcnQKbGV2aXRhY2UKbGV2b2JvawpsaWJyYQpsaWNob3RrYQpsaWRvamVkCmxpZHNrb3N0CmxpaG92aW5hCmxpamF2ZWMKbGlsZWsKbGltZXRrYQpsaW5pZQpsaW5rYQpsaW5vbGV1bQpsaXN0b3BhZApsaXRpbmEKbGl0b3ZhdApsb2Jpc3RhCmxvZGl2b2QKbG9naWthCmxvZ29wZWQKbG9rYWxpdGEKbG9rZXQKbG9tY292YXQKbG9wYXRhCmxvcHVjaApsb3JkCmxvc29zCmxvdHIKbG91ZGFsCmxvdWgKbG91a2EKbG91c2thdApsb3ZlYwpsc3Rpdm9zdApsdWNlcm5hCmx1Y2lmZXIKbHVtcApsdXNrCmx1c3RyYWNlCmx2aWNlCmx5cmEKbHlyaWthCmx5c2luYQptYWRhbQptYWRsbwptYWdpc3RyCm1haGFnb24KbWFqZXRlawptYWppdGVsCm1ham9yaXRhCm1ha2FrCm1ha292aWNlCm1ha3JlbGEKbWFsYmEKbWFsaW5hCm1hbG92YXQKbWFsdmljZQptYW1pbmthCm1hbmRsZQptYW5rbwptYXJub3N0Cm1hc2FrcgptYXNrb3QKbWFzb3B1c3QKbWF0aWNlCm1hdHJpa2EKbWF0dXJpdGEKbWF6YW5lYwptYXppdm8KbWF6bGl0Cm1henVya2EKbWRsb2JhCm1lY2hhbmlrCm1lZGl0YWNlCm1lZG92aW5hCm1lbGFzYQptZWxvdW4KbWVudG9sa2EKbWV0bGEKbWV0b2RhCm1ldHIKbWV6ZXJhCm1pZ3JhY2UKbWlobm91dAptaWh1bGUKbWlraW5hCm1pa3JvZm9uCm1pbGVuZWMKbWlsaW1ldHIKbWlsb3N0Cm1pbWlrYQptaW5jb3ZuYQptaW5pYmFyCm1pbm9tZXQKbWludWxvc3QKbWlza2EKbWlzdHIKbWl4b3ZhdAptbGFkb3N0Cm1saGEKbWxob3ZpbmEKbWxvawptbHNhdAptbHV2aXQKbW5pY2gKbW5vaGVtCm1vYmlsCm1vY25vc3QKbW9kZWxrYQptb2RsaXRiYQptb2h5bGEKbW9rcm8KbW9sZWt1bGEKbW9tZW50a2EKbW9uYXJjaGEKbW9ub2tsCm1vbnN0cnVtCm1vbnRvdmF0Cm1vbnp1bgptb3Nhegptb3NreXQKbW9zdAptb3RpdmFjZQptb3RvcmthCm1vdHlrYQptb3VjaGEKbW91ZHJvc3QKbW96YWlrYQptb3plawptb3pvbAptcmFtb3IKbXJhdmVuZWMKbXJrZXYKbXJ0dm9sYQptcnpldAptcnp1dG9zdAptc3RpdGVsCm11ZHJjCm11ZmxvbgptdWxhdAptdW1pZQptdW5pY2UKbXVzZXQKbXV0YWNlCm11emV1bQptdXppa2FudApteXNsaXZlYwptemRhCm5hYm91cmF0Cm5hY2h5dGF0Cm5hZGFjZQpuYWRieXRlawpuYWRob3oKbmFkb2JybwpuYWRwaXMKbmFobGFzCm5haG5hdApuYWhvZGlsZQpuYWhyYWRpdApuYWl2aXRhCm5hamVkbm91Cm5hamlzdG8KbmFqbW91dApuYWtsb25pdApuYWtvbmVjCm5ha3JtaXQKbmFsZXZvCm5hbWF6YXQKbmFtbHV2aXQKbmFub21ldHIKbmFva28KbmFvcGFrCm5hb3N0cm8KbmFwYWRhdApuYXBldm5vCm5hcGxuaXQKbmFwbm91dApuYXBvc2xlZApuYXByb3N0bwpuYXJvZGl0Cm5hcnVieQpuYXJ5Y2hsbwpuYXNhZGl0Cm5hc2VrYXQKbmFzbGVwbwpuYXN0YXQKbmF0b2xpawpuYXZlbmVrCm5hdnJjaApuYXZ6ZG9yeQpuYXp2YXQKbmViZQpuZWNoYXQKbmVja3kKbmVkYWxla28KbmVkYmF0Cm5lZHVoCm5lZ2FjZQpuZWhldApuZWhvZGEKbmVqZW4KbmVqcHJ2ZQpuZWtsaWQKbmVsaWJvc3QKbmVtaWxvc3QKbmVtb2MKbmVvY2hvdGEKbmVvbmthCm5lcG9rb2oKbmVyb3N0Cm5lcnYKbmVzbXlzbApuZXNvdWxhZApuZXR2b3IKbmV1cm9uCm5ldmluYQpuZXp2eWtsZQpuaWNvdGEKbmlqYWsKbmlrYW0KbmlrZHkKbmlrbApuaWt0ZXJhawpuaXRybwpub2NsZWgKbm9oYXZpY2UKbm9taW5hY2UKbm9yYQpub3Jlawpub3NpdGVsCm5vc25vc3QKbm91emUKbm92aW55Cm5vdm90YQpub3pkcmEKbnVkYQpudWRsZQpudWdldApudXRpdApudXRub3N0Cm51dHJpZQpueW1mYQpvYmFsCm9iYXJ2aXQKb2JhdmEKb2JkaXYKb2JlYwpvYmVobmF0Cm9iZWptb3V0Cm9iZXppdGEKb2JoYWpvYmEKb2JpbG5pY2UKb2JqYXNuaXQKb2JqZWt0Cm9ia2xvcGl0Cm9ibGFzdApvYmxlawpvYmxpYmEKb2Jsb2hhCm9ibHVkYQpvYm5vcwpvYm9oYXRpdApvYm9qZWsKb2JvdXQKb2JyYXplYwpvYnJuYQpvYnJ1YmEKb2JyeXMKb2JzYWgKb2JzbHVoYQpvYnN0YXJhdApvYnV2Cm9idmF6Cm9idmluaXQKb2J2b2QKb2J2eWtsZQpvYnl2YXRlbApvYnpvcgpvY2FzCm9jZWwKb2Nlbml0Cm9jaGxhZGl0Cm9jaG90YQpvY2hyYW5hCm9jaXRub3V0Cm9kYm9qCm9kYnl0Cm9kY2hvZApvZGNpeml0Cm9kZWJyYXQKb2Rlc2xhdApvZGV2emRhdApvZGV6dmEKb2RoYWRjZQpvZGhvZGl0Cm9kamV0Cm9kamludWQKb2RrYXoKb2Rrb3VwaXQKb2RsaXYKb2RsdWthCm9kbWxrYQpvZG9sbm9zdApvZHBhZApvZHBpcwpvZHBsb3V0Cm9kcG9yCm9kcHVzdGl0Cm9kcHlrYXQKb2RyYXprYQpvZHNvdWRpdApvZHN0dXAKb2RzdW4Kb2R0b2sKb2R0dWQKb2R2YWhhCm9kdmV0YQpvZHZvbGF0Cm9kdnJhY2V0Cm9kem5hawpvZmluYQpvZnNhamQKb2hsYXMKb2huaXNrbwpvaHJhZGEKb2hyb3ppdApvaHJ5emVrCm9rYXAKb2tlbmljZQpva2xpa2EKb2tubwpva291emxpdApva292eQpva3Jhc2EKb2tyZXMKb2tyc2VrCm9rcnVoCm9rdXBhbnQKb2t1cmthCm9rdXNpdApvbGVqbmluYQpvbGl6b3ZhdApvbWFrCm9tZWxldGEKb21leml0Cm9tbGFkaW5hCm9tbG91dmF0Cm9tbHV2YQpvbXlsCm9uZWhkeQpvcGFrb3ZhdApvcGFzZWsKb3BlcmFjZQpvcGljZQpvcGlsb3N0Cm9waXNvdmF0Cm9wb3JhCm9wb3ppY2UKb3ByYXZkdQpvcHJvdGkKb3JiaXRhbApvcmNoZXN0cgpvcmdpZQpvcmxpY2UKb3Jsb2oKb3J0ZWwKb3NhZGEKb3NjaG5vdXQKb3Npa2EKb3Npdm8Kb3NsYXZhCm9zbGVwaXQKb3Nsbml0Cm9zbG92aXQKb3Nub3ZhCm9zb2JhCm9zb2xpdApvc3BhbGVjCm9zdGVuCm9zdHJhaGEKb3N0dWRhCm9zdHljaApvc3Zvaml0Cm90ZXBsaXQKb3Rpc2sKb3RvcApvdHJoYXQKb3RybG9zdApvdHJvawpvdHJ1YnkKb3R2b3IKb3Zhbm91dApvdmFyCm92ZXMKb3ZsaXZuaXQKb3ZvY2UKb3hpZApvemRvYmEKcGFjaGF0ZWwKcGFjaWVudApwYWRvdWNoCnBhaG9yZWsKcGFrdApwYWxhbmRhCnBhbGVjCnBhbGl2bwpwYWx1YmEKcGFtZmxldApwYW1sc2VrCnBhbmVua2EKcGFuaWthCnBhbm5hCnBhbm92YXQKcGFuc3R2bwpwYW50b2ZsZQpwYXByaWthCnBhcmtldGEKcGFyb2RpZQpwYXJ0YQpwYXJ1a2EKcGFyeWJhCnBhc2VrYQpwYXNpdml0YQpwYXN0ZWxrYQpwYXRlbnQKcGF0cm9uYQpwYXZvdWsKcGF6bmVodApwYXpvdXJlawpwZWNrYQpwZWRhZ29nCnBlanNlawpwZWtsbwpwZWxvdG9uCnBlbmFsdGEKcGVuZHJlawpwZW56ZQpwZXJpc2tvcApwZXJvCnBlc3Ryb3N0CnBldGFyZGEKcGV0aWNlCnBldHJvbGVqCnBldm5pbmEKcGV4ZXNvCnBpYW5pc3RhCnBpaGEKcGlqYXZpY2UKcGlrbGUKcGlrbmlrCnBpbGluYQpwaWxub3N0CnBpbHVsa2EKcGluemV0YQpwaXBldGEKcGlzYXRlbApwaXN0b2xlCnBpdGV2bmEKcGl2bmljZQpwaXZvdmFyCnBsYWNlbnRhCnBsYWthdApwbGFtZW4KcGxhbmV0YQpwbGFzdGlrYQpwbGF0aXQKcGxhdmlkbG8KcGxhegpwbGVjaApwbGVtZW5vCnBsZW50YQpwbGVzCnBsZXRpdm8KcGxldmVsCnBsaXZhdApwbG5pdApwbG5vCnBsb2NoYQpwbG9kaW5hCnBsb21iYQpwbG91dApwbHVrCnBseW4KcG9iYXZpdApwb2J5dApwb2Nob2QKcG9jaXQKcG9jdGl2ZWMKcG9kYXQKcG9kY2VuaXQKcG9kZXBzYXQKcG9kaGxlZApwb2Rpdml0CnBvZGtsYWQKcG9kbWFuaXQKcG9kbmlrCnBvZG9iYQpwb2Rwb3JhCnBvZHJhegpwb2RzdGF0YQpwb2R2b2QKcG9kemltCnBvZXppZQpwb2hhbmthCnBvaG51dGthCnBvaG92b3IKcG9ocm9tYQpwb2h5Ygpwb2ludGEKcG9qaXN0a2EKcG9qbW91dApwb2theml0CnBva2xlcwpwb2tvagpwb2tyb2sKcG9rdXRhCnBva3luCnBvbGVkbmUKcG9saWJlawpwb2xrbm91dApwb2xvaGEKcG9seW5vbQpwb21hbHUKcG9taW5vdXQKcG9tbGthCnBvbW9jCnBvbXN0YQpwb215c2xldApwb25lY2hhdApwb25vcmthCnBvbnVyb3N0CnBvcGFkYXQKcG9wZWwKcG9waXNlawpwb3BsYWNoCnBvcHJvc2l0CnBvcHNhdApwb3B1ZApwb3JhZGNlCnBvcmNlCnBvcm9kCnBvcnVjaGEKcG9yeXYKcG9zYWRpdApwb3NlZApwb3NpbGEKcG9za29rCnBvc2xhbmVjCnBvc291ZGl0CnBvc3BvbHUKcG9zdGF2YQpwb3N1ZGVrCnBvc3lwCnBvdGFoCnBvdGthbgpwb3RsZXNrCnBvdG9tZWsKcG90cmF2YQpwb3R1cGEKcG90dm9yYQpwb3VrYXoKcG91dG8KcG91emRybwpwb3ZhaGEKcG92aWRsYQpwb3ZsYWsKcG92b3oKcG92cmNoCnBvdnN0YXQKcG92eWsKcG92emRlY2gKcG96ZHJhdgpwb3plbWVrCnBvem5hdGVrCnBvem9yCnBvenZhdApwcmFjb3ZhdApwcmFob3J5CnByYWt0aWthCnByYWxlcwpwcmFvdGVjCnByYXBvcmVrCnByYXNlCnByYXZkYQpwcmluY2lwCnBya25vCnByb2J1ZGl0CnByb2NlbnRvCnByb2Rlagpwcm9mZXNlCnByb2hyYQpwcm9qZWt0CnByb2xvbWl0CnByb21pbGUKcHJvbmlrYXQKcHJvcGFkCnByb3Jvawpwcm9zYmEKcHJvdG9uCnByb3V0ZWsKcHJvdmF6CnByc2thdmthCnByc3RlbgpwcnVka29zdApwcnV0CnBydmVrCnBydm9ob3J5CnBzYW5lYwpwc292b2QKcHN0cnVoCnB0YWN0dm8KcHViZXJ0YQpwdWNoCnB1ZGwKcHVrYXZlYwpwdWtsaW5hCnB1a3JsZQpwdWx0CnB1bXBhCnB1bmMKcHVwZW4KcHVzYQpwdXNpbmthCnB1c3RpbmEKcHV0b3ZhdApwdXR5a2EKcHlyYW1pZGEKcHlzawpweXRlbApyYWNlawpyYWNob3QKcmFkaWFjZQpyYWRuaWNlCnJhZG9uCnJhZnQKcmFnYnkKcmFrZXRhCnJha292aW5hCnJhbWVubwpyYW1wb3VjaApyYW5kZQpyYXJhY2gKcmFyaXRhCnJhc292bmEKcmFzdHIKcmF0b2xlc3QKcmF6YW5jZQpyYXppZGxvCnJlYWdvdmF0CnJlYWtjZQpyZWNlcHQKcmVkYWt0b3IKcmVmZXJlbnQKcmVmbGV4CnJlam5vawpyZWtsYW1hCnJla29yZApyZWtydXQKcmVrdG9yCnJlcHV0YWNlCnJldml6ZQpyZXZtYQpyZXZvbHZlcgpyZXplcnZhCnJpc2tvdmF0CnJpemlrbwpyb2JvdGlrYQpyb2Rva21lbgpyb2hvdmthCnJva2xlCnJva29rbwpyb21hbmV0bwpyb3Bvdm9kCnJvcHVjaGEKcm9yZWpzCnJvc29sCnJvc3RsaW5hCnJvdG1pc3RyCnJvdG9wZWQKcm90dW5kYQpyb3ViZW5rYQpyb3VjaG8Kcm91cApyb3VyYQpyb3ZpbmEKcm92bmljZQpyb3pib3IKcm96Y2hvZApyb3pkYXQKcm96ZXpuYXQKcm96aG9kY2UKcm96aW5rYQpyb3pqZXpkCnJvemthegpyb3psb2hhCnJvem1hcgpyb3pwYWQKcm96cnVjaApyb3pzYWgKcm96dG9rCnJvenVtCnJvenZvZApydWJyaWthCnJ1Y2hhZGxvCnJ1a2F2aWNlCnJ1a29waXMKcnliYQpyeWJvbG92CnJ5Y2hsb3N0CnJ5ZGxvCnJ5cGFkbG8Kcnl0aW5hCnJ5em9zdApzYWRpc3RhCnNhaGF0CnNha28Kc2FtZWMKc2FtaXpkYXQKc2Ftb3RhCnNhbml0a2EKc2FyZGlua2EKc2FzYW5rYQpzYXRlbGl0CnNhemJhCnNhemVuaWNlCnNib3IKc2Nob3ZhdApzZWJyYW5rYQpzZWNlc2UKc2VkYWRsbwpzZWRpbWVudApzZWRsbwpzZWhuYXQKc2VqbW91dApzZWtlcmEKc2VrdGEKc2VrdW5kYQpzZWt2b2plCnNlbWVubwpzZW5vCnNlcnZpcwpzZXNhZGl0CnNlc2hvcmEKc2Vza29rCnNlc2xhdApzZXN0cmEKc2VzdXYKc2VzeXBhdApzZXRiYQpzZXRpbmEKc2V0a2F0CnNldG5vdXQKc2V0cnZhdApzZXZlcgpzZXpuYW0Kc2hvZGEKc2hybm91dApzaWZvbgpzaWxuaWNlCnNpcmthCnNpcm90ZWsKc2lydXAKc2l0dWFjZQpza2FmYW5kcgpza2FsaXNrbwpza2FuemVuCnNrYXV0CnNrZXB0aWsKc2tpY2EKc2tsYWRiYQpza2xlbmljZQpza2xvCnNrbHV6CnNrb2JhCnNrb2thbgpza29ybwpza3JpcHRhCnNrcnoKc2t1cGluYQpza3Zvc3QKc2t2cm5hCnNsYWJpa2EKc2xhZGlkbG8Kc2xhbmluYQpzbGFzdApzbGF2bm9zdApzbGVkb3ZhdApzbGVwZWMKc2xldmEKc2xlemluYQpzbGliCnNsaW5hCnNsaXpuaWNlCnNsb24Kc2xvdXBlawpzbG92bwpzbHVjaApzbHVoYQpzbHVuY2UKc2x1cGthCnNsemEKc21hcmFnZApzbWV0YW5hCnNtaWxzdHZvCnNtbG91dmEKc21vZwpzbXJhZApzbXJrCnNtcnRrYQpzbXV0ZWsKc215c2wKc25hZApzbmFoYQpzbm9iCnNvYm90YQpzb2NoYQpzb2RvdmthCnNva29sCnNvcGthCnNvdHZhCnNvdWJvagpzb3VjaXQKc291ZGNlCnNvdWhsYXMKc291bGFkCnNvdW1yYWsKc291cHJhdmEKc291c2VkCnNvdXRvawpzb3V2aXNldApzcGFsb3ZuYQpzcGFzaXRlbApzcGlzCnNwbGF2CnNwb2RlawpzcG9qZW5lYwpzcG9sdQpzcG9uem9yCnNwb3Jub3N0CnNwb3VzdGEKc3ByY2hhCnNwdXN0aXQKc3JhbmRhCnNyYXoKc3JkY2UKc3JuYQpzcm5lYwpzcm92bmF0CnNycGVuCnNyc3QKc3J1YgpzdGFuaWNlCnN0YXJvc3RhCnN0YXRpa2EKc3RhdmJhCnN0ZWhubwpzdGV6a2EKc3RvZG9sYQpzdG9sZWsKc3RvcGEKc3Rvcm5vCnN0b3VwYXQKc3RyYWNoCnN0cmVzCnN0cmhub3V0CnN0cm9tCnN0cnVuYQpzdHVkbmEKc3R1cG5pY2UKc3R2b2wKc3R5awpzdWJqZWt0CnN1YnRyb3B5CnN1Y2hhcgpzdWRvc3QKc3Vrbm8Kc3VuZGF0CnN1bm91dApzdXJpa2F0YQpzdXJvdmluYQpzdmFoCnN2YWxzdHZvCnN2ZXRyCnN2YXRiYQpzdmF6ZWsKc3Zpc2xlCnN2aXRlawpzdm9ib2RhCnN2b2RpZGxvCnN2b3JrYQpzdnJhYgpzeWthdmthCnN5a290CnN5bmVrCnN5bm92ZWMKc3lwYXQKc3lwa29zdApzeXJvdm9zdApzeXNlbApzeXRvc3QKdGFibGV0a2EKdGFidWxlCnRhaG91bgp0YWplbW5vCnRhamZ1bgp0YWpnYQp0YWppdAp0YWpub3N0CnRha3Rpa2EKdGFtaGxlCnRhbXBvbgp0YW5jb3ZhdAp0YW5lYwp0YW5rZXIKdGFwZXRhCnRhdmVuaW5hCnRhemF0ZWwKdGVjaG5pa2EKdGVoZHkKdGVrdXRpbmEKdGVsZWZvbgp0ZW1ub3RhCnRlbmRlbmNlCnRlbmlzdGEKdGVub3IKdGVwbG90YQp0ZXBuYQp0ZXBydmUKdGVyYXBpZQp0ZXJtb3NrYQp0ZXh0aWwKdGljaG8KdGlza29waXMKdGl0dWxlawp0a2FkbGVjCnRrYW5pbmEKdGxhcGthCnRsZXNrYXQKdGx1a290CnRsdXBhCnRtZWwKdG9hbGV0YQp0b3BpbmthCnRvcG9sCnRvcnpvCnRvdWhhCnRvdWxlYwp0cmFkaWNlCnRyYWt0b3IKdHJhbXAKdHJhc2EKdHJhdmVyemEKdHJlZml0CnRyZXN0CnRyZXpvcgp0cmhhdmluYQp0cmhsaW5hCnRyb2NodQp0cm9qaWNlCnRyb3NrYQp0cm91YmEKdHJwY2UKdHJwaXRlbAp0cnBrb3N0CnRydWJlYwp0cnVjaGxpdAp0cnVobGljZQp0cnVzCnRydmF0CnR1ZHkKdHVobm91dAp0dWhvc3QKdHVuZHJhCnR1cmlzdGEKdHVybmFqCnR1emVtc2tvCnR2YXJvaAp0dm9yYmEKdHZyZG9zdAp0dnJ6CnR5Z3IKdHlrZXYKdWJvaG9zdAp1Ym96ZQp1YnJhdAp1YnJvdXNlawp1YnJ1cwp1Ynl0b3ZuYQp1Y2hvCnVjdGl2b3N0CnVkaXZpdAp1aHJhZGl0CnVqZWRuYXQKdWppc3RpdAp1am1vdXQKdWthemF0ZWwKdWtsaWRuaXQKdWtsb25pdAp1a290dml0CnVrcm9qaXQKdWxpY2UKdWxpdGEKdWxvdml0CnVteXZhZGxvCnVuYXZpdAp1bmlmb3JtYQp1bmlrbm91dAp1cGFkbm91dAp1cGxhdG5pdAp1cGx5bm91dAp1cG91dGF0CnVwcmF2aXQKdXJhbgp1cmF6aXQKdXNlZG5vdXQKdXNpbG92YXQKdXNtcnRpdAp1c25hZG5pdAp1c25vdXQKdXNvdWRpdAp1c3RsYXQKdXN0cm5vdXQKdXRhaG92YXQKdXRrYXQKdXRsdW1pdAp1dG9ub3V0CnV0b3BlbmVjCnV0cm91c2l0CnV2YWxpdAp1dm9sbml0CnV2b3pvdmthCnV6ZHJhdml0CnV6ZWwKdXplbmluYQp1emxpbmEKdXpuYXQKdmFnb24KdmFsY2hhCnZhbG91bgp2YW5hCnZhbmRhbAp2YW5pbGthCnZhcmFuCnZhcmhhbnkKdmFyb3ZhdAp2Y2Vsa3UKdmNob2QKdmRvdmEKdmVkcm8KdmVnZXRhY2UKdmVqY2UKdmVsYmxvdWQKdmVsZXRyaAp2ZWxpdGVsCnZlbG1vYwp2ZWxyeWJhCnZlbmtvdgp2ZXJhbmRhCnZlcnplCnZlc2Vsa2EKdmVza3J6ZQp2ZXNuaWNlCnZlc3BvZHUKdmVzdGEKdmV0ZXJpbmEKdmV2ZXJrYQp2aWJyYWNlCnZpY2hyCnZpZGVvaHJhCnZpZGluYQp2aWRsZQp2aWxhCnZpbmljZQp2aXNldAp2aXRhbGl0YQp2aXplCnZpeml0a2EKdmplemQKdmtsYWQKdmt1cwp2bGFqa2EKdmxhawp2bGFzZWMKdmxldm8Kdmxoa29zdAp2bGl2CnZsbm92a2EKdmxvdXBhdAp2bnVjb3ZhdAp2bnVrCnZvZGEKdm9kaXZvc3QKdm9kb3puYWsKdm9kc3R2bwp2b2plbnNreQp2b2puYQp2b2pza28Kdm9sYW50CnZvbGJhCnZvbGl0CnZvbG5vCnZvc2tvdmthCnZvemlkbG8Kdm96b3ZuYQp2cHJhdm8KdnJhYmVjCnZyYWNldAp2cmFoCnZyYXRhCnZyYmEKdnJjaG9sZWsKdnJoYXQKdnJzdHZhCnZydHVsZQp2c2FkaXQKdnN0b3VwaXQKdnN0dXAKdnRpcAp2eWJhdml0CnZ5YnJhdAp2eWNob3ZhdAp2eWRhdAp2eWRyYQp2eWZvdGl0CnZ5aGxlZGF0CnZ5aG5vdXQKdnlob2RpdAp2eWhyYWRpdAp2eWh1Yml0CnZ5amFzbml0CnZ5amV0CnZ5am1vdXQKdnlrbG9waXQKdnlrb25hdAp2eWxla2F0CnZ5bWF6YXQKdnltZXppdAp2eW1pemV0CnZ5bXlzbGV0CnZ5bmVjaGF0CnZ5bmlrYXQKdnludXRpdAp2eXBhZGF0CnZ5cGxhdGl0CnZ5cHJhdml0CnZ5cHVzdGl0CnZ5cmF6aXQKdnlyb3ZuYXQKdnlydmF0CnZ5c2xvdml0CnZ5c29rbwp2eXN0YXZpdAp2eXN1bm91dAp2eXN5cGF0CnZ5dGFzaXQKdnl0ZXNhdAp2eXRyYXRpdAp2eXZpbm91dAp2eXZvbGF0CnZ5dnJoZWwKdnl6ZG9iaXQKdnl6bmF0CnZ6YWR1CnZ6YnVkaXQKdnpjaG9waXQKdnpkb3IKdnpkdWNoCnZ6ZHljaGF0CnZ6ZXN0dXAKdnpobGVkZW0KdnprYXoKdnpseWthdAp2em5pawp2em9yZWsKdnpwb3VyYQp2enRhaAp2enRlawp4eWxvZm9uCnphYnJhdAp6YWJ5ZGxldAp6YWNob3ZhdAp6YWRhcm1vCnphZHVzaXQKemFmb3VrYXQKemFobHRpdAp6YWhvZGl0CnphaHJhZGEKemFoeW5vdXQKemFqYXRlYwp6YWpldAp6YWppc3RpdAp6YWtsZXBhdAp6YWtvdXBpdAp6YWxlcGl0CnphbWV6aXQKemFtb3RhdAp6YW15c2xldAp6YW5lY2hhdAp6YW5pa2F0CnphcGxhdGl0CnphcG9qaXQKemFwc2F0CnphcmF6aXQKemFzdGF2aXQKemFzdW5vdXQKemF0YWppdAp6YXRlbW5pdAp6YXRrbm91dAp6YXVqbW91dAp6YXZhbGl0CnphdmVsZXQKemF2aW5pdAp6YXZvbGF0CnphdnJ0YXQKemF6dm9uaXQKemJhdml0CnpicnVzdQp6YnVkb3ZhdAp6Ynl0ZWsKemRhbGVrYQp6ZGFybWEKemRhdG5vc3QKemRpdm8KemRvYml0Cnpkcm9qCnpkdmloCnpkeW1hZGxvCnplbGVuaW5hCnplbWFuCnplbWluYQp6ZXB0YXQKemV6YWR1CnplemRvbGEKemhhdGl0CnpobHRub3V0CnpobHVib2thCnpob3Rvdml0CnpocnViYQp6aW1hCnppbW5pY2UKemplbW5pdAp6a2xhbWF0Cnprb3VtYXQKemtyYXRrYQp6a3VtYXZrYQp6bGF0bwp6bGVoa2EKemxvYmEKemxvbQp6bG9zdAp6bG96dnlrCnptYXBvdmF0CnptYXIKem1hdGVrCnptaWplCnptaXpldAp6bW9jbml0Cnptb2RyYXQKem1yemxpbmEKem11dG92YXQKem5hawp6bmFsb3N0CnpuYW1lbmF0Cnpub3Z1CnpvYnJheml0CnpvdGF2aXQKem91YmVrCnpvdWZhbGUKenBsb2RpdAp6cG9tYWxpdAp6cHJhdmEKenByb3N0aXQKenBydWRrYQp6cHJ2dQp6cmFkYQp6cmFuaXQKenJjYWRsbwp6cm5pdG9zdAp6cm5vCnpyb3ZuYQp6cnljaGxpdAp6cnphdm9zdAp6dGljaGEKenRyYXRpdAp6dWJvdmluYQp6dWJyCnp2ZWRub3V0Cnp2ZW5rdQp6dmVzZWxhCnp2b24KenZyYXQKenZ1a292b2QKenZ5a2Auc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy9lbmdsaXNoLmpzCiAgdmFyIHdvcmRsaXN0MiA9IGBhYmFuZG9uCmFiaWxpdHkKYWJsZQphYm91dAphYm92ZQphYnNlbnQKYWJzb3JiCmFic3RyYWN0CmFic3VyZAphYnVzZQphY2Nlc3MKYWNjaWRlbnQKYWNjb3VudAphY2N1c2UKYWNoaWV2ZQphY2lkCmFjb3VzdGljCmFjcXVpcmUKYWNyb3NzCmFjdAphY3Rpb24KYWN0b3IKYWN0cmVzcwphY3R1YWwKYWRhcHQKYWRkCmFkZGljdAphZGRyZXNzCmFkanVzdAphZG1pdAphZHVsdAphZHZhbmNlCmFkdmljZQphZXJvYmljCmFmZmFpcgphZmZvcmQKYWZyYWlkCmFnYWluCmFnZQphZ2VudAphZ3JlZQphaGVhZAphaW0KYWlyCmFpcnBvcnQKYWlzbGUKYWxhcm0KYWxidW0KYWxjb2hvbAphbGVydAphbGllbgphbGwKYWxsZXkKYWxsb3cKYWxtb3N0CmFsb25lCmFscGhhCmFscmVhZHkKYWxzbwphbHRlcgphbHdheXMKYW1hdGV1cgphbWF6aW5nCmFtb25nCmFtb3VudAphbXVzZWQKYW5hbHlzdAphbmNob3IKYW5jaWVudAphbmdlcgphbmdsZQphbmdyeQphbmltYWwKYW5rbGUKYW5ub3VuY2UKYW5udWFsCmFub3RoZXIKYW5zd2VyCmFudGVubmEKYW50aXF1ZQphbnhpZXR5CmFueQphcGFydAphcG9sb2d5CmFwcGVhcgphcHBsZQphcHByb3ZlCmFwcmlsCmFyY2gKYXJjdGljCmFyZWEKYXJlbmEKYXJndWUKYXJtCmFybWVkCmFybW9yCmFybXkKYXJvdW5kCmFycmFuZ2UKYXJyZXN0CmFycml2ZQphcnJvdwphcnQKYXJ0ZWZhY3QKYXJ0aXN0CmFydHdvcmsKYXNrCmFzcGVjdAphc3NhdWx0CmFzc2V0CmFzc2lzdAphc3N1bWUKYXN0aG1hCmF0aGxldGUKYXRvbQphdHRhY2sKYXR0ZW5kCmF0dGl0dWRlCmF0dHJhY3QKYXVjdGlvbgphdWRpdAphdWd1c3QKYXVudAphdXRob3IKYXV0bwphdXR1bW4KYXZlcmFnZQphdm9jYWRvCmF2b2lkCmF3YWtlCmF3YXJlCmF3YXkKYXdlc29tZQphd2Z1bAphd2t3YXJkCmF4aXMKYmFieQpiYWNoZWxvcgpiYWNvbgpiYWRnZQpiYWcKYmFsYW5jZQpiYWxjb255CmJhbGwKYmFtYm9vCmJhbmFuYQpiYW5uZXIKYmFyCmJhcmVseQpiYXJnYWluCmJhcnJlbApiYXNlCmJhc2ljCmJhc2tldApiYXR0bGUKYmVhY2gKYmVhbgpiZWF1dHkKYmVjYXVzZQpiZWNvbWUKYmVlZgpiZWZvcmUKYmVnaW4KYmVoYXZlCmJlaGluZApiZWxpZXZlCmJlbG93CmJlbHQKYmVuY2gKYmVuZWZpdApiZXN0CmJldHJheQpiZXR0ZXIKYmV0d2VlbgpiZXlvbmQKYmljeWNsZQpiaWQKYmlrZQpiaW5kCmJpb2xvZ3kKYmlyZApiaXJ0aApiaXR0ZXIKYmxhY2sKYmxhZGUKYmxhbWUKYmxhbmtldApibGFzdApibGVhawpibGVzcwpibGluZApibG9vZApibG9zc29tCmJsb3VzZQpibHVlCmJsdXIKYmx1c2gKYm9hcmQKYm9hdApib2R5CmJvaWwKYm9tYgpib25lCmJvbnVzCmJvb2sKYm9vc3QKYm9yZGVyCmJvcmluZwpib3Jyb3cKYm9zcwpib3R0b20KYm91bmNlCmJveApib3kKYnJhY2tldApicmFpbgpicmFuZApicmFzcwpicmF2ZQpicmVhZApicmVlemUKYnJpY2sKYnJpZGdlCmJyaWVmCmJyaWdodApicmluZwpicmlzawpicm9jY29saQpicm9rZW4KYnJvbnplCmJyb29tCmJyb3RoZXIKYnJvd24KYnJ1c2gKYnViYmxlCmJ1ZGR5CmJ1ZGdldApidWZmYWxvCmJ1aWxkCmJ1bGIKYnVsawpidWxsZXQKYnVuZGxlCmJ1bmtlcgpidXJkZW4KYnVyZ2VyCmJ1cnN0CmJ1cwpidXNpbmVzcwpidXN5CmJ1dHRlcgpidXllcgpidXp6CmNhYmJhZ2UKY2FiaW4KY2FibGUKY2FjdHVzCmNhZ2UKY2FrZQpjYWxsCmNhbG0KY2FtZXJhCmNhbXAKY2FuCmNhbmFsCmNhbmNlbApjYW5keQpjYW5ub24KY2Fub2UKY2FudmFzCmNhbnlvbgpjYXBhYmxlCmNhcGl0YWwKY2FwdGFpbgpjYXIKY2FyYm9uCmNhcmQKY2FyZ28KY2FycGV0CmNhcnJ5CmNhcnQKY2FzZQpjYXNoCmNhc2lubwpjYXN0bGUKY2FzdWFsCmNhdApjYXRhbG9nCmNhdGNoCmNhdGVnb3J5CmNhdHRsZQpjYXVnaHQKY2F1c2UKY2F1dGlvbgpjYXZlCmNlaWxpbmcKY2VsZXJ5CmNlbWVudApjZW5zdXMKY2VudHVyeQpjZXJlYWwKY2VydGFpbgpjaGFpcgpjaGFsawpjaGFtcGlvbgpjaGFuZ2UKY2hhb3MKY2hhcHRlcgpjaGFyZ2UKY2hhc2UKY2hhdApjaGVhcApjaGVjawpjaGVlc2UKY2hlZgpjaGVycnkKY2hlc3QKY2hpY2tlbgpjaGllZgpjaGlsZApjaGltbmV5CmNob2ljZQpjaG9vc2UKY2hyb25pYwpjaHVja2xlCmNodW5rCmNodXJuCmNpZ2FyCmNpbm5hbW9uCmNpcmNsZQpjaXRpemVuCmNpdHkKY2l2aWwKY2xhaW0KY2xhcApjbGFyaWZ5CmNsYXcKY2xheQpjbGVhbgpjbGVyawpjbGV2ZXIKY2xpY2sKY2xpZW50CmNsaWZmCmNsaW1iCmNsaW5pYwpjbGlwCmNsb2NrCmNsb2cKY2xvc2UKY2xvdGgKY2xvdWQKY2xvd24KY2x1YgpjbHVtcApjbHVzdGVyCmNsdXRjaApjb2FjaApjb2FzdApjb2NvbnV0CmNvZGUKY29mZmVlCmNvaWwKY29pbgpjb2xsZWN0CmNvbG9yCmNvbHVtbgpjb21iaW5lCmNvbWUKY29tZm9ydApjb21pYwpjb21tb24KY29tcGFueQpjb25jZXJ0CmNvbmR1Y3QKY29uZmlybQpjb25ncmVzcwpjb25uZWN0CmNvbnNpZGVyCmNvbnRyb2wKY29udmluY2UKY29vawpjb29sCmNvcHBlcgpjb3B5CmNvcmFsCmNvcmUKY29ybgpjb3JyZWN0CmNvc3QKY290dG9uCmNvdWNoCmNvdW50cnkKY291cGxlCmNvdXJzZQpjb3VzaW4KY292ZXIKY295b3RlCmNyYWNrCmNyYWRsZQpjcmFmdApjcmFtCmNyYW5lCmNyYXNoCmNyYXRlcgpjcmF3bApjcmF6eQpjcmVhbQpjcmVkaXQKY3JlZWsKY3Jldwpjcmlja2V0CmNyaW1lCmNyaXNwCmNyaXRpYwpjcm9wCmNyb3NzCmNyb3VjaApjcm93ZApjcnVjaWFsCmNydWVsCmNydWlzZQpjcnVtYmxlCmNydW5jaApjcnVzaApjcnkKY3J5c3RhbApjdWJlCmN1bHR1cmUKY3VwCmN1cGJvYXJkCmN1cmlvdXMKY3VycmVudApjdXJ0YWluCmN1cnZlCmN1c2hpb24KY3VzdG9tCmN1dGUKY3ljbGUKZGFkCmRhbWFnZQpkYW1wCmRhbmNlCmRhbmdlcgpkYXJpbmcKZGFzaApkYXVnaHRlcgpkYXduCmRheQpkZWFsCmRlYmF0ZQpkZWJyaXMKZGVjYWRlCmRlY2VtYmVyCmRlY2lkZQpkZWNsaW5lCmRlY29yYXRlCmRlY3JlYXNlCmRlZXIKZGVmZW5zZQpkZWZpbmUKZGVmeQpkZWdyZWUKZGVsYXkKZGVsaXZlcgpkZW1hbmQKZGVtaXNlCmRlbmlhbApkZW50aXN0CmRlbnkKZGVwYXJ0CmRlcGVuZApkZXBvc2l0CmRlcHRoCmRlcHV0eQpkZXJpdmUKZGVzY3JpYmUKZGVzZXJ0CmRlc2lnbgpkZXNrCmRlc3BhaXIKZGVzdHJveQpkZXRhaWwKZGV0ZWN0CmRldmVsb3AKZGV2aWNlCmRldm90ZQpkaWFncmFtCmRpYWwKZGlhbW9uZApkaWFyeQpkaWNlCmRpZXNlbApkaWV0CmRpZmZlcgpkaWdpdGFsCmRpZ25pdHkKZGlsZW1tYQpkaW5uZXIKZGlub3NhdXIKZGlyZWN0CmRpcnQKZGlzYWdyZWUKZGlzY292ZXIKZGlzZWFzZQpkaXNoCmRpc21pc3MKZGlzb3JkZXIKZGlzcGxheQpkaXN0YW5jZQpkaXZlcnQKZGl2aWRlCmRpdm9yY2UKZGl6enkKZG9jdG9yCmRvY3VtZW50CmRvZwpkb2xsCmRvbHBoaW4KZG9tYWluCmRvbmF0ZQpkb25rZXkKZG9ub3IKZG9vcgpkb3NlCmRvdWJsZQpkb3ZlCmRyYWZ0CmRyYWdvbgpkcmFtYQpkcmFzdGljCmRyYXcKZHJlYW0KZHJlc3MKZHJpZnQKZHJpbGwKZHJpbmsKZHJpcApkcml2ZQpkcm9wCmRydW0KZHJ5CmR1Y2sKZHVtYgpkdW5lCmR1cmluZwpkdXN0CmR1dGNoCmR1dHkKZHdhcmYKZHluYW1pYwplYWdlcgplYWdsZQplYXJseQplYXJuCmVhcnRoCmVhc2lseQplYXN0CmVhc3kKZWNobwplY29sb2d5CmVjb25vbXkKZWRnZQplZGl0CmVkdWNhdGUKZWZmb3J0CmVnZwplaWdodAplaXRoZXIKZWxib3cKZWxkZXIKZWxlY3RyaWMKZWxlZ2FudAplbGVtZW50CmVsZXBoYW50CmVsZXZhdG9yCmVsaXRlCmVsc2UKZW1iYXJrCmVtYm9keQplbWJyYWNlCmVtZXJnZQplbW90aW9uCmVtcGxveQplbXBvd2VyCmVtcHR5CmVuYWJsZQplbmFjdAplbmQKZW5kbGVzcwplbmRvcnNlCmVuZW15CmVuZXJneQplbmZvcmNlCmVuZ2FnZQplbmdpbmUKZW5oYW5jZQplbmpveQplbmxpc3QKZW5vdWdoCmVucmljaAplbnJvbGwKZW5zdXJlCmVudGVyCmVudGlyZQplbnRyeQplbnZlbG9wZQplcGlzb2RlCmVxdWFsCmVxdWlwCmVyYQplcmFzZQplcm9kZQplcm9zaW9uCmVycm9yCmVydXB0CmVzY2FwZQplc3NheQplc3NlbmNlCmVzdGF0ZQpldGVybmFsCmV0aGljcwpldmlkZW5jZQpldmlsCmV2b2tlCmV2b2x2ZQpleGFjdApleGFtcGxlCmV4Y2VzcwpleGNoYW5nZQpleGNpdGUKZXhjbHVkZQpleGN1c2UKZXhlY3V0ZQpleGVyY2lzZQpleGhhdXN0CmV4aGliaXQKZXhpbGUKZXhpc3QKZXhpdApleG90aWMKZXhwYW5kCmV4cGVjdApleHBpcmUKZXhwbGFpbgpleHBvc2UKZXhwcmVzcwpleHRlbmQKZXh0cmEKZXllCmV5ZWJyb3cKZmFicmljCmZhY2UKZmFjdWx0eQpmYWRlCmZhaW50CmZhaXRoCmZhbGwKZmFsc2UKZmFtZQpmYW1pbHkKZmFtb3VzCmZhbgpmYW5jeQpmYW50YXN5CmZhcm0KZmFzaGlvbgpmYXQKZmF0YWwKZmF0aGVyCmZhdGlndWUKZmF1bHQKZmF2b3JpdGUKZmVhdHVyZQpmZWJydWFyeQpmZWRlcmFsCmZlZQpmZWVkCmZlZWwKZmVtYWxlCmZlbmNlCmZlc3RpdmFsCmZldGNoCmZldmVyCmZldwpmaWJlcgpmaWN0aW9uCmZpZWxkCmZpZ3VyZQpmaWxlCmZpbG0KZmlsdGVyCmZpbmFsCmZpbmQKZmluZQpmaW5nZXIKZmluaXNoCmZpcmUKZmlybQpmaXJzdApmaXNjYWwKZmlzaApmaXQKZml0bmVzcwpmaXgKZmxhZwpmbGFtZQpmbGFzaApmbGF0CmZsYXZvcgpmbGVlCmZsaWdodApmbGlwCmZsb2F0CmZsb2NrCmZsb29yCmZsb3dlcgpmbHVpZApmbHVzaApmbHkKZm9hbQpmb2N1cwpmb2cKZm9pbApmb2xkCmZvbGxvdwpmb29kCmZvb3QKZm9yY2UKZm9yZXN0CmZvcmdldApmb3JrCmZvcnR1bmUKZm9ydW0KZm9yd2FyZApmb3NzaWwKZm9zdGVyCmZvdW5kCmZveApmcmFnaWxlCmZyYW1lCmZyZXF1ZW50CmZyZXNoCmZyaWVuZApmcmluZ2UKZnJvZwpmcm9udApmcm9zdApmcm93bgpmcm96ZW4KZnJ1aXQKZnVlbApmdW4KZnVubnkKZnVybmFjZQpmdXJ5CmZ1dHVyZQpnYWRnZXQKZ2FpbgpnYWxheHkKZ2FsbGVyeQpnYW1lCmdhcApnYXJhZ2UKZ2FyYmFnZQpnYXJkZW4KZ2FybGljCmdhcm1lbnQKZ2FzCmdhc3AKZ2F0ZQpnYXRoZXIKZ2F1Z2UKZ2F6ZQpnZW5lcmFsCmdlbml1cwpnZW5yZQpnZW50bGUKZ2VudWluZQpnZXN0dXJlCmdob3N0CmdpYW50CmdpZnQKZ2lnZ2xlCmdpbmdlcgpnaXJhZmZlCmdpcmwKZ2l2ZQpnbGFkCmdsYW5jZQpnbGFyZQpnbGFzcwpnbGlkZQpnbGltcHNlCmdsb2JlCmdsb29tCmdsb3J5Cmdsb3ZlCmdsb3cKZ2x1ZQpnb2F0CmdvZGRlc3MKZ29sZApnb29kCmdvb3NlCmdvcmlsbGEKZ29zcGVsCmdvc3NpcApnb3Zlcm4KZ293bgpncmFiCmdyYWNlCmdyYWluCmdyYW50CmdyYXBlCmdyYXNzCmdyYXZpdHkKZ3JlYXQKZ3JlZW4KZ3JpZApncmllZgpncml0Cmdyb2NlcnkKZ3JvdXAKZ3JvdwpncnVudApndWFyZApndWVzcwpndWlkZQpndWlsdApndWl0YXIKZ3VuCmd5bQpoYWJpdApoYWlyCmhhbGYKaGFtbWVyCmhhbXN0ZXIKaGFuZApoYXBweQpoYXJib3IKaGFyZApoYXJzaApoYXJ2ZXN0CmhhdApoYXZlCmhhd2sKaGF6YXJkCmhlYWQKaGVhbHRoCmhlYXJ0CmhlYXZ5CmhlZGdlaG9nCmhlaWdodApoZWxsbwpoZWxtZXQKaGVscApoZW4KaGVybwpoaWRkZW4KaGlnaApoaWxsCmhpbnQKaGlwCmhpcmUKaGlzdG9yeQpob2JieQpob2NrZXkKaG9sZApob2xlCmhvbGlkYXkKaG9sbG93CmhvbWUKaG9uZXkKaG9vZApob3BlCmhvcm4KaG9ycm9yCmhvcnNlCmhvc3BpdGFsCmhvc3QKaG90ZWwKaG91cgpob3ZlcgpodWIKaHVnZQpodW1hbgpodW1ibGUKaHVtb3IKaHVuZHJlZApodW5ncnkKaHVudApodXJkbGUKaHVycnkKaHVydApodXNiYW5kCmh5YnJpZAppY2UKaWNvbgppZGVhCmlkZW50aWZ5CmlkbGUKaWdub3JlCmlsbAppbGxlZ2FsCmlsbG5lc3MKaW1hZ2UKaW1pdGF0ZQppbW1lbnNlCmltbXVuZQppbXBhY3QKaW1wb3NlCmltcHJvdmUKaW1wdWxzZQppbmNoCmluY2x1ZGUKaW5jb21lCmluY3JlYXNlCmluZGV4CmluZGljYXRlCmluZG9vcgppbmR1c3RyeQppbmZhbnQKaW5mbGljdAppbmZvcm0KaW5oYWxlCmluaGVyaXQKaW5pdGlhbAppbmplY3QKaW5qdXJ5CmlubWF0ZQppbm5lcgppbm5vY2VudAppbnB1dAppbnF1aXJ5Cmluc2FuZQppbnNlY3QKaW5zaWRlCmluc3BpcmUKaW5zdGFsbAppbnRhY3QKaW50ZXJlc3QKaW50bwppbnZlc3QKaW52aXRlCmludm9sdmUKaXJvbgppc2xhbmQKaXNvbGF0ZQppc3N1ZQppdGVtCml2b3J5CmphY2tldApqYWd1YXIKamFyCmphenoKamVhbG91cwpqZWFucwpqZWxseQpqZXdlbApqb2IKam9pbgpqb2tlCmpvdXJuZXkKam95Cmp1ZGdlCmp1aWNlCmp1bXAKanVuZ2xlCmp1bmlvcgpqdW5rCmp1c3QKa2FuZ2Fyb28Ka2VlbgprZWVwCmtldGNodXAKa2V5CmtpY2sKa2lkCmtpZG5leQpraW5kCmtpbmdkb20Ka2lzcwpraXQKa2l0Y2hlbgpraXRlCmtpdHRlbgpraXdpCmtuZWUKa25pZmUKa25vY2sKa25vdwpsYWIKbGFiZWwKbGFib3IKbGFkZGVyCmxhZHkKbGFrZQpsYW1wCmxhbmd1YWdlCmxhcHRvcApsYXJnZQpsYXRlcgpsYXRpbgpsYXVnaApsYXVuZHJ5CmxhdmEKbGF3Cmxhd24KbGF3c3VpdApsYXllcgpsYXp5CmxlYWRlcgpsZWFmCmxlYXJuCmxlYXZlCmxlY3R1cmUKbGVmdApsZWcKbGVnYWwKbGVnZW5kCmxlaXN1cmUKbGVtb24KbGVuZApsZW5ndGgKbGVucwpsZW9wYXJkCmxlc3NvbgpsZXR0ZXIKbGV2ZWwKbGlhcgpsaWJlcnR5CmxpYnJhcnkKbGljZW5zZQpsaWZlCmxpZnQKbGlnaHQKbGlrZQpsaW1iCmxpbWl0CmxpbmsKbGlvbgpsaXF1aWQKbGlzdApsaXR0bGUKbGl2ZQpsaXphcmQKbG9hZApsb2FuCmxvYnN0ZXIKbG9jYWwKbG9jawpsb2dpYwpsb25lbHkKbG9uZwpsb29wCmxvdHRlcnkKbG91ZApsb3VuZ2UKbG92ZQpsb3lhbApsdWNreQpsdWdnYWdlCmx1bWJlcgpsdW5hcgpsdW5jaApsdXh1cnkKbHlyaWNzCm1hY2hpbmUKbWFkCm1hZ2ljCm1hZ25ldAptYWlkCm1haWwKbWFpbgptYWpvcgptYWtlCm1hbW1hbAptYW4KbWFuYWdlCm1hbmRhdGUKbWFuZ28KbWFuc2lvbgptYW51YWwKbWFwbGUKbWFyYmxlCm1hcmNoCm1hcmdpbgptYXJpbmUKbWFya2V0Cm1hcnJpYWdlCm1hc2sKbWFzcwptYXN0ZXIKbWF0Y2gKbWF0ZXJpYWwKbWF0aAptYXRyaXgKbWF0dGVyCm1heGltdW0KbWF6ZQptZWFkb3cKbWVhbgptZWFzdXJlCm1lYXQKbWVjaGFuaWMKbWVkYWwKbWVkaWEKbWVsb2R5Cm1lbHQKbWVtYmVyCm1lbW9yeQptZW50aW9uCm1lbnUKbWVyY3kKbWVyZ2UKbWVyaXQKbWVycnkKbWVzaAptZXNzYWdlCm1ldGFsCm1ldGhvZAptaWRkbGUKbWlkbmlnaHQKbWlsawptaWxsaW9uCm1pbWljCm1pbmQKbWluaW11bQptaW5vcgptaW51dGUKbWlyYWNsZQptaXJyb3IKbWlzZXJ5Cm1pc3MKbWlzdGFrZQptaXgKbWl4ZWQKbWl4dHVyZQptb2JpbGUKbW9kZWwKbW9kaWZ5Cm1vbQptb21lbnQKbW9uaXRvcgptb25rZXkKbW9uc3Rlcgptb250aAptb29uCm1vcmFsCm1vcmUKbW9ybmluZwptb3NxdWl0bwptb3RoZXIKbW90aW9uCm1vdG9yCm1vdW50YWluCm1vdXNlCm1vdmUKbW92aWUKbXVjaAptdWZmaW4KbXVsZQptdWx0aXBseQptdXNjbGUKbXVzZXVtCm11c2hyb29tCm11c2ljCm11c3QKbXV0dWFsCm15c2VsZgpteXN0ZXJ5Cm15dGgKbmFpdmUKbmFtZQpuYXBraW4KbmFycm93Cm5hc3R5Cm5hdGlvbgpuYXR1cmUKbmVhcgpuZWNrCm5lZWQKbmVnYXRpdmUKbmVnbGVjdApuZWl0aGVyCm5lcGhldwpuZXJ2ZQpuZXN0Cm5ldApuZXR3b3JrCm5ldXRyYWwKbmV2ZXIKbmV3cwpuZXh0Cm5pY2UKbmlnaHQKbm9ibGUKbm9pc2UKbm9taW5lZQpub29kbGUKbm9ybWFsCm5vcnRoCm5vc2UKbm90YWJsZQpub3RlCm5vdGhpbmcKbm90aWNlCm5vdmVsCm5vdwpudWNsZWFyCm51bWJlcgpudXJzZQpudXQKb2FrCm9iZXkKb2JqZWN0Cm9ibGlnZQpvYnNjdXJlCm9ic2VydmUKb2J0YWluCm9idmlvdXMKb2NjdXIKb2NlYW4Kb2N0b2JlcgpvZG9yCm9mZgpvZmZlcgpvZmZpY2UKb2Z0ZW4Kb2lsCm9rYXkKb2xkCm9saXZlCm9seW1waWMKb21pdApvbmNlCm9uZQpvbmlvbgpvbmxpbmUKb25seQpvcGVuCm9wZXJhCm9waW5pb24Kb3Bwb3NlCm9wdGlvbgpvcmFuZ2UKb3JiaXQKb3JjaGFyZApvcmRlcgpvcmRpbmFyeQpvcmdhbgpvcmllbnQKb3JpZ2luYWwKb3JwaGFuCm9zdHJpY2gKb3RoZXIKb3V0ZG9vcgpvdXRlcgpvdXRwdXQKb3V0c2lkZQpvdmFsCm92ZW4Kb3Zlcgpvd24Kb3duZXIKb3h5Z2VuCm95c3Rlcgpvem9uZQpwYWN0CnBhZGRsZQpwYWdlCnBhaXIKcGFsYWNlCnBhbG0KcGFuZGEKcGFuZWwKcGFuaWMKcGFudGhlcgpwYXBlcgpwYXJhZGUKcGFyZW50CnBhcmsKcGFycm90CnBhcnR5CnBhc3MKcGF0Y2gKcGF0aApwYXRpZW50CnBhdHJvbApwYXR0ZXJuCnBhdXNlCnBhdmUKcGF5bWVudApwZWFjZQpwZWFudXQKcGVhcgpwZWFzYW50CnBlbGljYW4KcGVuCnBlbmFsdHkKcGVuY2lsCnBlb3BsZQpwZXBwZXIKcGVyZmVjdApwZXJtaXQKcGVyc29uCnBldApwaG9uZQpwaG90bwpwaHJhc2UKcGh5c2ljYWwKcGlhbm8KcGljbmljCnBpY3R1cmUKcGllY2UKcGlnCnBpZ2VvbgpwaWxsCnBpbG90CnBpbmsKcGlvbmVlcgpwaXBlCnBpc3RvbApwaXRjaApwaXp6YQpwbGFjZQpwbGFuZXQKcGxhc3RpYwpwbGF0ZQpwbGF5CnBsZWFzZQpwbGVkZ2UKcGx1Y2sKcGx1ZwpwbHVuZ2UKcG9lbQpwb2V0CnBvaW50CnBvbGFyCnBvbGUKcG9saWNlCnBvbmQKcG9ueQpwb29sCnBvcHVsYXIKcG9ydGlvbgpwb3NpdGlvbgpwb3NzaWJsZQpwb3N0CnBvdGF0bwpwb3R0ZXJ5CnBvdmVydHkKcG93ZGVyCnBvd2VyCnByYWN0aWNlCnByYWlzZQpwcmVkaWN0CnByZWZlcgpwcmVwYXJlCnByZXNlbnQKcHJldHR5CnByZXZlbnQKcHJpY2UKcHJpZGUKcHJpbWFyeQpwcmludApwcmlvcml0eQpwcmlzb24KcHJpdmF0ZQpwcml6ZQpwcm9ibGVtCnByb2Nlc3MKcHJvZHVjZQpwcm9maXQKcHJvZ3JhbQpwcm9qZWN0CnByb21vdGUKcHJvb2YKcHJvcGVydHkKcHJvc3Blcgpwcm90ZWN0CnByb3VkCnByb3ZpZGUKcHVibGljCnB1ZGRpbmcKcHVsbApwdWxwCnB1bHNlCnB1bXBraW4KcHVuY2gKcHVwaWwKcHVwcHkKcHVyY2hhc2UKcHVyaXR5CnB1cnBvc2UKcHVyc2UKcHVzaApwdXQKcHV6emxlCnB5cmFtaWQKcXVhbGl0eQpxdWFudHVtCnF1YXJ0ZXIKcXVlc3Rpb24KcXVpY2sKcXVpdApxdWl6CnF1b3RlCnJhYmJpdApyYWNjb29uCnJhY2UKcmFjawpyYWRhcgpyYWRpbwpyYWlsCnJhaW4KcmFpc2UKcmFsbHkKcmFtcApyYW5jaApyYW5kb20KcmFuZ2UKcmFwaWQKcmFyZQpyYXRlCnJhdGhlcgpyYXZlbgpyYXcKcmF6b3IKcmVhZHkKcmVhbApyZWFzb24KcmViZWwKcmVidWlsZApyZWNhbGwKcmVjZWl2ZQpyZWNpcGUKcmVjb3JkCnJlY3ljbGUKcmVkdWNlCnJlZmxlY3QKcmVmb3JtCnJlZnVzZQpyZWdpb24KcmVncmV0CnJlZ3VsYXIKcmVqZWN0CnJlbGF4CnJlbGVhc2UKcmVsaWVmCnJlbHkKcmVtYWluCnJlbWVtYmVyCnJlbWluZApyZW1vdmUKcmVuZGVyCnJlbmV3CnJlbnQKcmVvcGVuCnJlcGFpcgpyZXBlYXQKcmVwbGFjZQpyZXBvcnQKcmVxdWlyZQpyZXNjdWUKcmVzZW1ibGUKcmVzaXN0CnJlc291cmNlCnJlc3BvbnNlCnJlc3VsdApyZXRpcmUKcmV0cmVhdApyZXR1cm4KcmV1bmlvbgpyZXZlYWwKcmV2aWV3CnJld2FyZApyaHl0aG0KcmliCnJpYmJvbgpyaWNlCnJpY2gKcmlkZQpyaWRnZQpyaWZsZQpyaWdodApyaWdpZApyaW5nCnJpb3QKcmlwcGxlCnJpc2sKcml0dWFsCnJpdmFsCnJpdmVyCnJvYWQKcm9hc3QKcm9ib3QKcm9idXN0CnJvY2tldApyb21hbmNlCnJvb2YKcm9va2llCnJvb20Kcm9zZQpyb3RhdGUKcm91Z2gKcm91bmQKcm91dGUKcm95YWwKcnViYmVyCnJ1ZGUKcnVnCnJ1bGUKcnVuCnJ1bndheQpydXJhbApzYWQKc2FkZGxlCnNhZG5lc3MKc2FmZQpzYWlsCnNhbGFkCnNhbG1vbgpzYWxvbgpzYWx0CnNhbHV0ZQpzYW1lCnNhbXBsZQpzYW5kCnNhdGlzZnkKc2F0b3NoaQpzYXVjZQpzYXVzYWdlCnNhdmUKc2F5CnNjYWxlCnNjYW4Kc2NhcmUKc2NhdHRlcgpzY2VuZQpzY2hlbWUKc2Nob29sCnNjaWVuY2UKc2Npc3NvcnMKc2NvcnBpb24Kc2NvdXQKc2NyYXAKc2NyZWVuCnNjcmlwdApzY3J1YgpzZWEKc2VhcmNoCnNlYXNvbgpzZWF0CnNlY29uZApzZWNyZXQKc2VjdGlvbgpzZWN1cml0eQpzZWVkCnNlZWsKc2VnbWVudApzZWxlY3QKc2VsbApzZW1pbmFyCnNlbmlvcgpzZW5zZQpzZW50ZW5jZQpzZXJpZXMKc2VydmljZQpzZXNzaW9uCnNldHRsZQpzZXR1cApzZXZlbgpzaGFkb3cKc2hhZnQKc2hhbGxvdwpzaGFyZQpzaGVkCnNoZWxsCnNoZXJpZmYKc2hpZWxkCnNoaWZ0CnNoaW5lCnNoaXAKc2hpdmVyCnNob2NrCnNob2UKc2hvb3QKc2hvcApzaG9ydApzaG91bGRlcgpzaG92ZQpzaHJpbXAKc2hydWcKc2h1ZmZsZQpzaHkKc2libGluZwpzaWNrCnNpZGUKc2llZ2UKc2lnaHQKc2lnbgpzaWxlbnQKc2lsawpzaWxseQpzaWx2ZXIKc2ltaWxhcgpzaW1wbGUKc2luY2UKc2luZwpzaXJlbgpzaXN0ZXIKc2l0dWF0ZQpzaXgKc2l6ZQpza2F0ZQpza2V0Y2gKc2tpCnNraWxsCnNraW4Kc2tpcnQKc2t1bGwKc2xhYgpzbGFtCnNsZWVwCnNsZW5kZXIKc2xpY2UKc2xpZGUKc2xpZ2h0CnNsaW0Kc2xvZ2FuCnNsb3QKc2xvdwpzbHVzaApzbWFsbApzbWFydApzbWlsZQpzbW9rZQpzbW9vdGgKc25hY2sKc25ha2UKc25hcApzbmlmZgpzbm93CnNvYXAKc29jY2VyCnNvY2lhbApzb2NrCnNvZGEKc29mdApzb2xhcgpzb2xkaWVyCnNvbGlkCnNvbHV0aW9uCnNvbHZlCnNvbWVvbmUKc29uZwpzb29uCnNvcnJ5CnNvcnQKc291bApzb3VuZApzb3VwCnNvdXJjZQpzb3V0aApzcGFjZQpzcGFyZQpzcGF0aWFsCnNwYXduCnNwZWFrCnNwZWNpYWwKc3BlZWQKc3BlbGwKc3BlbmQKc3BoZXJlCnNwaWNlCnNwaWRlcgpzcGlrZQpzcGluCnNwaXJpdApzcGxpdApzcG9pbApzcG9uc29yCnNwb29uCnNwb3J0CnNwb3QKc3ByYXkKc3ByZWFkCnNwcmluZwpzcHkKc3F1YXJlCnNxdWVlemUKc3F1aXJyZWwKc3RhYmxlCnN0YWRpdW0Kc3RhZmYKc3RhZ2UKc3RhaXJzCnN0YW1wCnN0YW5kCnN0YXJ0CnN0YXRlCnN0YXkKc3RlYWsKc3RlZWwKc3RlbQpzdGVwCnN0ZXJlbwpzdGljawpzdGlsbApzdGluZwpzdG9jawpzdG9tYWNoCnN0b25lCnN0b29sCnN0b3J5CnN0b3ZlCnN0cmF0ZWd5CnN0cmVldApzdHJpa2UKc3Ryb25nCnN0cnVnZ2xlCnN0dWRlbnQKc3R1ZmYKc3R1bWJsZQpzdHlsZQpzdWJqZWN0CnN1Ym1pdApzdWJ3YXkKc3VjY2VzcwpzdWNoCnN1ZGRlbgpzdWZmZXIKc3VnYXIKc3VnZ2VzdApzdWl0CnN1bW1lcgpzdW4Kc3VubnkKc3Vuc2V0CnN1cGVyCnN1cHBseQpzdXByZW1lCnN1cmUKc3VyZmFjZQpzdXJnZQpzdXJwcmlzZQpzdXJyb3VuZApzdXJ2ZXkKc3VzcGVjdApzdXN0YWluCnN3YWxsb3cKc3dhbXAKc3dhcApzd2FybQpzd2Vhcgpzd2VldApzd2lmdApzd2ltCnN3aW5nCnN3aXRjaApzd29yZApzeW1ib2wKc3ltcHRvbQpzeXJ1cApzeXN0ZW0KdGFibGUKdGFja2xlCnRhZwp0YWlsCnRhbGVudAp0YWxrCnRhbmsKdGFwZQp0YXJnZXQKdGFzawp0YXN0ZQp0YXR0b28KdGF4aQp0ZWFjaAp0ZWFtCnRlbGwKdGVuCnRlbmFudAp0ZW5uaXMKdGVudAp0ZXJtCnRlc3QKdGV4dAp0aGFuawp0aGF0CnRoZW1lCnRoZW4KdGhlb3J5CnRoZXJlCnRoZXkKdGhpbmcKdGhpcwp0aG91Z2h0CnRocmVlCnRocml2ZQp0aHJvdwp0aHVtYgp0aHVuZGVyCnRpY2tldAp0aWRlCnRpZ2VyCnRpbHQKdGltYmVyCnRpbWUKdGlueQp0aXAKdGlyZWQKdGlzc3VlCnRpdGxlCnRvYXN0CnRvYmFjY28KdG9kYXkKdG9kZGxlcgp0b2UKdG9nZXRoZXIKdG9pbGV0CnRva2VuCnRvbWF0bwp0b21vcnJvdwp0b25lCnRvbmd1ZQp0b25pZ2h0CnRvb2wKdG9vdGgKdG9wCnRvcGljCnRvcHBsZQp0b3JjaAp0b3JuYWRvCnRvcnRvaXNlCnRvc3MKdG90YWwKdG91cmlzdAp0b3dhcmQKdG93ZXIKdG93bgp0b3kKdHJhY2sKdHJhZGUKdHJhZmZpYwp0cmFnaWMKdHJhaW4KdHJhbnNmZXIKdHJhcAp0cmFzaAp0cmF2ZWwKdHJheQp0cmVhdAp0cmVlCnRyZW5kCnRyaWFsCnRyaWJlCnRyaWNrCnRyaWdnZXIKdHJpbQp0cmlwCnRyb3BoeQp0cm91YmxlCnRydWNrCnRydWUKdHJ1bHkKdHJ1bXBldAp0cnVzdAp0cnV0aAp0cnkKdHViZQp0dWl0aW9uCnR1bWJsZQp0dW5hCnR1bm5lbAp0dXJrZXkKdHVybgp0dXJ0bGUKdHdlbHZlCnR3ZW50eQp0d2ljZQp0d2luCnR3aXN0CnR3bwp0eXBlCnR5cGljYWwKdWdseQp1bWJyZWxsYQp1bmFibGUKdW5hd2FyZQp1bmNsZQp1bmNvdmVyCnVuZGVyCnVuZG8KdW5mYWlyCnVuZm9sZAp1bmhhcHB5CnVuaWZvcm0KdW5pcXVlCnVuaXQKdW5pdmVyc2UKdW5rbm93bgp1bmxvY2sKdW50aWwKdW51c3VhbAp1bnZlaWwKdXBkYXRlCnVwZ3JhZGUKdXBob2xkCnVwb24KdXBwZXIKdXBzZXQKdXJiYW4KdXJnZQp1c2FnZQp1c2UKdXNlZAp1c2VmdWwKdXNlbGVzcwp1c3VhbAp1dGlsaXR5CnZhY2FudAp2YWN1dW0KdmFndWUKdmFsaWQKdmFsbGV5CnZhbHZlCnZhbgp2YW5pc2gKdmFwb3IKdmFyaW91cwp2YXN0CnZhdWx0CnZlaGljbGUKdmVsdmV0CnZlbmRvcgp2ZW50dXJlCnZlbnVlCnZlcmIKdmVyaWZ5CnZlcnNpb24KdmVyeQp2ZXNzZWwKdmV0ZXJhbgp2aWFibGUKdmlicmFudAp2aWNpb3VzCnZpY3RvcnkKdmlkZW8Kdmlldwp2aWxsYWdlCnZpbnRhZ2UKdmlvbGluCnZpcnR1YWwKdmlydXMKdmlzYQp2aXNpdAp2aXN1YWwKdml0YWwKdml2aWQKdm9jYWwKdm9pY2UKdm9pZAp2b2xjYW5vCnZvbHVtZQp2b3RlCnZveWFnZQp3YWdlCndhZ29uCndhaXQKd2Fsawp3YWxsCndhbG51dAp3YW50CndhcmZhcmUKd2FybQp3YXJyaW9yCndhc2gKd2FzcAp3YXN0ZQp3YXRlcgp3YXZlCndheQp3ZWFsdGgKd2VhcG9uCndlYXIKd2Vhc2VsCndlYXRoZXIKd2ViCndlZGRpbmcKd2Vla2VuZAp3ZWlyZAp3ZWxjb21lCndlc3QKd2V0CndoYWxlCndoYXQKd2hlYXQKd2hlZWwKd2hlbgp3aGVyZQp3aGlwCndoaXNwZXIKd2lkZQp3aWR0aAp3aWZlCndpbGQKd2lsbAp3aW4Kd2luZG93CndpbmUKd2luZwp3aW5rCndpbm5lcgp3aW50ZXIKd2lyZQp3aXNkb20Kd2lzZQp3aXNoCndpdG5lc3MKd29sZgp3b21hbgp3b25kZXIKd29vZAp3b29sCndvcmQKd29yawp3b3JsZAp3b3JyeQp3b3J0aAp3cmFwCndyZWNrCndyZXN0bGUKd3Jpc3QKd3JpdGUKd3JvbmcKeWFyZAp5ZWFyCnllbGxvdwp5b3UKeW91bmcKeW91dGgKemVicmEKemVybwp6b25lCnpvb2Auc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy9mcmVuY2guanMKICB2YXIgd29yZGxpc3QzID0gYGFiYWlzc2VyCmFiYW5kb24KYWJkaXF1ZXIKYWJlaWxsZQphYm9saXIKYWJvcmRlcgphYm91dGlyCmFib3llcgphYnJhc2lmCmFicmV1dmVyCmFicml0ZXIKYWJyb2dlcgphYnJ1cHQKYWJzZW5jZQphYnNvbHUKYWJzdXJkZQphYnVzaWYKYWJ5c3NhbAphY2FkZVx1MDMwMW1pZQphY2Fqb3UKYWNhcmllbgphY2NhYmxlcgphY2NlcHRlcgphY2NsYW1lcgphY2NvbGFkZQphY2Nyb2NoZQphY2N1c2VyCmFjZXJiZQphY2hhdAphY2hldGVyCmFjaWR1bGVyCmFjaWVyCmFjb21wdGUKYWNxdWVcdTAzMDFyaXIKYWNyb255bWUKYWN0ZXVyCmFjdGlmCmFjdHVlbAphZGVwdGUKYWRlXHUwMzAxcXVhdAphZGhlXHUwMzAxc2lmCmFkamVjdGlmCmFkanVnZXIKYWRtZXR0cmUKYWRtaXJlcgphZG9wdGVyCmFkb3JlcgphZG91Y2lyCmFkcmVzc2UKYWRyb2l0CmFkdWx0ZQphZHZlcmJlCmFlXHUwMzAxcmVyCmFlXHUwMzAxcm9uZWYKYWZmYWlyZQphZmZlY3RlcgphZmZpY2hlCmFmZnJldXgKYWZmdWJsZXIKYWdhY2VyCmFnZW5jZXIKYWdpbGUKYWdpdGVyCmFncmFmZXIKYWdyZVx1MDMwMWFibGUKYWdydW1lCmFpZGVyCmFpZ3VpbGxlCmFpbGllcgphaW1hYmxlCmFpc2FuY2UKYWpvdXRlcgphanVzdGVyCmFsYXJtZXIKYWxjaGltaWUKYWxlcnRlCmFsZ2VcdTAzMDBicmUKYWxndWUKYWxpZVx1MDMwMW5lcgphbGltZW50CmFsbGVcdTAzMDFnZXIKYWxsaWFnZQphbGxvdWVyCmFsbHVtZXIKYWxvdXJkaXIKYWxwYWdhCmFsdGVzc2UKYWx2ZVx1MDMwMW9sZQphbWF0ZXVyCmFtYmlndQphbWJyZQphbWVcdTAzMDFuYWdlcgphbWVydHVtZQphbWlkb24KYW1pcmFsCmFtb3JjZXIKYW1vdXIKYW1vdmlibGUKYW1waGliaWUKYW1wbGV1cgphbXVzYW50CmFuYWx5c2UKYW5hcGhvcmUKYW5hcmNoaWUKYW5hdG9taWUKYW5jaWVuCmFuZVx1MDMwMWFudGlyCmFuZ2xlCmFuZ29pc3NlCmFuZ3VsZXV4CmFuaW1hbAphbm5leGVyCmFubm9uY2UKYW5udWVsCmFub2Rpbgphbm9tYWxpZQphbm9ueW1lCmFub3JtYWwKYW50ZW5uZQphbnRpZG90ZQphbnhpZXV4CmFwYWlzZXIKYXBlXHUwMzAxcml0aWYKYXBsYW5pcgphcG9sb2dpZQphcHBhcmVpbAphcHBlbGVyCmFwcG9ydGVyCmFwcHV5ZXIKYXF1YXJpdW0KYXF1ZWR1YwphcmJpdHJlCmFyYnVzdGUKYXJkZXVyCmFyZG9pc2UKYXJnZW50CmFybGVxdWluCmFybWF0dXJlCmFybWVtZW50CmFybW9pcmUKYXJtdXJlCmFycGVudGVyCmFycmFjaGVyCmFycml2ZXIKYXJyb3NlcgphcnNlbmljCmFydGVcdTAzMDFyaWVsCmFydGljbGUKYXNwZWN0CmFzcGhhbHRlCmFzcGlyZXIKYXNzYXV0CmFzc2VydmlyCmFzc2lldHRlCmFzc29jaWVyCmFzc3VyZXIKYXN0aWNvdAphc3RyZQphc3R1Y2UKYXRlbGllcgphdG9tZQphdHJpdW0KYXRyb2NlCmF0dGFxdWUKYXR0ZW50aWYKYXR0aXJlcgphdHRyYXBlcgphdWJhaW5lCmF1YmVyZ2UKYXVkYWNlCmF1ZGlibGUKYXVndXJlcgphdXJvcmUKYXV0b21uZQphdXRydWNoZQphdmFsZXIKYXZhbmNlcgphdmFyaWNlCmF2ZW5pcgphdmVyc2UKYXZldWdsZQphdmlhdGV1cgphdmlkZQphdmlvbgphdmlzZXIKYXZvaW5lCmF2b3VlcgphdnJpbApheGlhbApheGlvbWUKYmFkZ2UKYmFmb3VlcgpiYWdhZ2UKYmFndWV0dGUKYmFpZ25hZGUKYmFsYW5jZXIKYmFsY29uCmJhbGVpbmUKYmFsaXNhZ2UKYmFtYmluCmJhbmNhaXJlCmJhbmRhZ2UKYmFubGlldWUKYmFubmllXHUwMzAwcmUKYmFucXVpZXIKYmFyYmllcgpiYXJpbApiYXJvbgpiYXJxdWUKYmFycmFnZQpiYXNzaW4KYmFzdGlvbgpiYXRhaWxsZQpiYXRlYXUKYmF0dGVyaWUKYmF1ZHJpZXIKYmF2YXJkZXIKYmVsZXR0ZQpiZVx1MDMwMWxpZXIKYmVsb3RlCmJlXHUwMzAxbmVcdTAzMDFmaWNlCmJlcmNlYXUKYmVyZ2VyCmJlcmxpbmUKYmVybXVkYQpiZXNhY2UKYmVzb2duZQpiZVx1MDMwMXRhaWwKYmV1cnJlCmJpYmVyb24KYmljeWNsZQpiaWR1bGUKYmlqb3UKYmlsYW4KYmlsaW5ndWUKYmlsbGFyZApiaW5haXJlCmJpb2xvZ2llCmJpb3BzaWUKYmlvdHlwZQpiaXNjdWl0CmJpc29uCmJpc3RvdXJpCmJpdHVtZQpiaXphcnJlCmJsYWZhcmQKYmxhZ3VlCmJsYW5jaGlyCmJsZXNzYW50CmJsaW5kZXIKYmxvbmQKYmxvcXVlcgpibG91c29uCmJvYmFyZApib2JpbmUKYm9pcmUKYm9pc2VyCmJvbGlkZQpib25ib24KYm9uZGlyCmJvbmhldXIKYm9uaWZpZXIKYm9udXMKYm9yZHVyZQpib3JuZQpib3R0ZQpib3VjbGUKYm91ZXV4CmJvdWdpZQpib3Vsb24KYm91cXVpbgpib3Vyc2UKYm91c3NvbGUKYm91dGlxdWUKYm94ZXVyCmJyYW5jaGUKYnJhc2llcgpicmF2ZQpicmViaXMKYnJlXHUwMzAwY2hlCmJyZXV2YWdlCmJyaWNvbGVyCmJyaWdhZGUKYnJpbGxhbnQKYnJpb2NoZQpicmlxdWUKYnJvY2h1cmUKYnJvZGVyCmJyb256ZXIKYnJvdXNzZQpicm95ZXVyCmJydW1lCmJydXNxdWUKYnJ1dGFsCmJydXlhbnQKYnVmZmxlCmJ1aXNzb24KYnVsbGV0aW4KYnVyZWF1CmJ1cmluCmJ1c3RpZXIKYnV0aW5lcgpidXRvaXIKYnV2YWJsZQpidXZldHRlCmNhYmFub24KY2FiaW5lCmNhY2hldHRlCmNhZGVhdQpjYWRyZQpjYWZlXHUwMzAxaW5lCmNhaWxsb3UKY2Fpc3NvbgpjYWxjdWxlcgpjYWxlcGluCmNhbGlicmUKY2FsbWVyCmNhbG9tbmllCmNhbHZhaXJlCmNhbWFyYWRlCmNhbWVcdTAzMDFyYQpjYW1pb24KY2FtcGFnbmUKY2FuYWwKY2FuZXRvbgpjYW5vbgpjYW50aW5lCmNhbnVsYXIKY2FwYWJsZQpjYXBvcmFsCmNhcHJpY2UKY2Fwc3VsZQpjYXB0ZXIKY2FwdWNoZQpjYXJhYmluZQpjYXJib25lCmNhcmVzc2VyCmNhcmlib3UKY2FybmFnZQpjYXJvdHRlCmNhcnJlYXUKY2FydG9uCmNhc2NhZGUKY2FzaWVyCmNhc3F1ZQpjYXNzdXJlCmNhdXNlcgpjYXV0aW9uCmNhdmFsaWVyCmNhdmVybmUKY2F2aWFyCmNlXHUwMzAxZGlsbGUKY2VpbnR1cmUKY2VcdTAzMDFsZXN0ZQpjZWxsdWxlCmNlbmRyaWVyCmNlbnN1cmVyCmNlbnRyYWwKY2VyY2xlCmNlXHUwMzAxcmVcdTAzMDFicmFsCmNlcmlzZQpjZXJuZXIKY2VydmVhdQpjZXNzZXIKY2hhZ3JpbgpjaGFpc2UKY2hhbGV1cgpjaGFtYnJlCmNoYW5jZQpjaGFwaXRyZQpjaGFyYm9uCmNoYXNzZXVyCmNoYXRvbgpjaGF1c3NvbgpjaGF2aXJlcgpjaGVtaXNlCmNoZW5pbGxlCmNoZVx1MDMwMXF1aWVyCmNoZXJjaGVyCmNoZXZhbApjaGllbgpjaGlmZnJlCmNoaWdub24KY2hpbWVcdTAzMDByZQpjaGlvdApjaGxvcnVyZQpjaG9jb2xhdApjaG9pc2lyCmNob3NlCmNob3VldHRlCmNocm9tZQpjaHV0ZQpjaWdhcmUKY2lnb2duZQpjaW1lbnRlcgpjaW5lXHUwMzAxbWEKY2ludHJlcgpjaXJjdWxlcgpjaXJlcgpjaXJxdWUKY2l0ZXJuZQpjaXRveWVuCmNpdHJvbgpjaXZpbApjbGFpcm9uCmNsYW1ldXIKY2xhcXVlcgpjbGFzc2UKY2xhdmllcgpjbGllbnQKY2xpZ25lcgpjbGltYXQKY2xpdmFnZQpjbG9jaGUKY2xvbmFnZQpjbG9wb3J0ZQpjb2JhbHQKY29icmEKY29jYXNzZQpjb2NvdGllcgpjb2Rlcgpjb2RpZmllcgpjb2ZmcmUKY29nbmVyCmNvaGVcdTAzMDFzaW9uCmNvaWZmZXIKY29pbmNlcgpjb2xlXHUwMzAwcmUKY29saWJyaQpjb2xsaW5lCmNvbG1hdGVyCmNvbG9uZWwKY29tYmF0CmNvbWVcdTAzMDFkaWUKY29tbWFuZGUKY29tcGFjdApjb25jZXJ0CmNvbmR1aXJlCmNvbmZpZXIKY29uZ2VsZXIKY29ubm90ZXIKY29uc29ubmUKY29udGFjdApjb252ZXhlCmNvcGFpbgpjb3BpZQpjb3JhaWwKY29yYmVhdQpjb3JkYWdlCmNvcm5pY2hlCmNvcnB1cwpjb3JyZWN0CmNvcnRlXHUwMzAwZ2UKY29zbWlxdWUKY29zdHVtZQpjb3Rvbgpjb3VkZQpjb3VwdXJlCmNvdXJhZ2UKY291dGVhdQpjb3V2cmlyCmNveW90ZQpjcmFiZQpjcmFpbnRlCmNyYXZhdGUKY3JheW9uCmNyZVx1MDMwMWF0dXJlCmNyZVx1MDMwMWRpdGVyCmNyZVx1MDMwMW1ldXgKY3JldXNlcgpjcmV2ZXR0ZQpjcmlibGVyCmNyaWVyCmNyaXN0YWwKY3JpdGVcdTAzMDByZQpjcm9pcmUKY3JvcXVlcgpjcm90YWxlCmNydWNpYWwKY3J1ZWwKY3J5cHRlcgpjdWJpcXVlCmN1ZWlsbGlyCmN1aWxsZVx1MDMwMHJlCmN1aXNpbmUKY3VpdnJlCmN1bG1pbmVyCmN1bHRpdmVyCmN1bXVsZXIKY3VwaWRlCmN1cmF0aWYKY3Vyc2V1cgpjeWFudXJlCmN5Y2xlCmN5bGluZHJlCmN5bmlxdWUKZGFpZ25lcgpkYW1pZXIKZGFuZ2VyCmRhbnNldXIKZGF1cGhpbgpkZVx1MDMwMWJhdHRyZQpkZVx1MDMwMWJpdGVyCmRlXHUwMzAxYm9yZGVyCmRlXHUwMzAxYnJpZGVyCmRlXHUwMzAxYnV0YW50CmRlXHUwMzAxY2FsZXIKZGVcdTAzMDFjZW1icmUKZGVcdTAzMDFjaGlyZXIKZGVcdTAzMDFjaWRlcgpkZVx1MDMwMWNsYXJlcgpkZVx1MDMwMWNvcmVyCmRlXHUwMzAxY3JpcmUKZGVcdTAzMDFjdXBsZXIKZGVcdTAzMDFkYWxlCmRlXHUwMzAxZHVjdGlmCmRlXHUwMzAxZXNzZQpkZVx1MDMwMWZlbnNpZgpkZVx1MDMwMWZpbGVyCmRlXHUwMzAxZnJheWVyCmRlXHUwMzAxZ2FnZXIKZGVcdTAzMDFnaXZyZXIKZGVcdTAzMDFnbHV0aXIKZGVcdTAzMDFncmFmZXIKZGVcdTAzMDFqZXVuZXIKZGVcdTAzMDFsaWNlCmRlXHUwMzAxbG9nZXIKZGVtYW5kZXIKZGVtZXVyZXIKZGVcdTAzMDFtb2xpcgpkZVx1MDMwMW5pY2hlcgpkZVx1MDMwMW5vdWVyCmRlbnRlbGxlCmRlXHUwMzAxbnVkZXIKZGVcdTAzMDFwYXJ0CmRlXHUwMzAxcGVuc2VyCmRlXHUwMzAxcGhhc2VyCmRlXHUwMzAxcGxhY2VyCmRlXHUwMzAxcG9zZXIKZGVcdTAzMDFyYW5nZXIKZGVcdTAzMDFyb2JlcgpkZVx1MDMwMXNhc3RyZQpkZXNjZW50ZQpkZVx1MDMwMXNlcnQKZGVcdTAzMDFzaWduZXIKZGVcdTAzMDFzb2JlXHUwMzAxaXIKZGVzc2luZXIKZGVzdHJpZXIKZGVcdTAzMDF0YWNoZXIKZGVcdTAzMDF0ZXN0ZXIKZGVcdTAzMDF0b3VyZXIKZGVcdTAzMDF0cmVzc2UKZGV2YW5jZXIKZGV2ZW5pcgpkZXZpbmVyCmRldm9pcgpkaWFibGUKZGlhbG9ndWUKZGlhbWFudApkaWN0ZXIKZGlmZmVcdTAzMDFyZXIKZGlnZVx1MDMwMXJlcgpkaWdpdGFsCmRpZ25lCmRpbHVlcgpkaW1hbmNoZQpkaW1pbnVlcgpkaW94eWRlCmRpcmVjdGlmCmRpcmlnZXIKZGlzY3V0ZXIKZGlzcG9zZXIKZGlzc2lwZXIKZGlzdGFuY2UKZGl2ZXJ0aXIKZGl2aXNlcgpkb2NpbGUKZG9jdGV1cgpkb2dtZQpkb2lndApkb21haW5lCmRvbWljaWxlCmRvbXB0ZXIKZG9uYXRldXIKZG9uam9uCmRvbm5lcgpkb3BhbWluZQpkb3J0b2lyCmRvcnVyZQpkb3NhZ2UKZG9zZXVyCmRvc3NpZXIKZG90YXRpb24KZG91YW5pZXIKZG91YmxlCmRvdWNldXIKZG91dGVyCmRveWVuCmRyYWdvbgpkcmFwZXIKZHJlc3NlcgpkcmliYmxlcgpkcm9pdHVyZQpkdXBlcmllCmR1cGxleGUKZHVyYWJsZQpkdXJjaXIKZHluYXN0aWUKZVx1MDMwMWJsb3VpcgplXHUwMzAxY2FydGVyCmVcdTAzMDFjaGFycGUKZVx1MDMwMWNoZWxsZQplXHUwMzAxY2xhaXJlcgplXHUwMzAxY2xpcHNlCmVcdTAzMDFjbG9yZQplXHUwMzAxY2x1c2UKZVx1MDMwMWNvbGUKZVx1MDMwMWNvbm9taWUKZVx1MDMwMWNvcmNlCmVcdTAzMDFjb3V0ZXIKZVx1MDMwMWNyYXNlcgplXHUwMzAxY3JlXHUwMzAxbWVyCmVcdTAzMDFjcml2YWluCmVcdTAzMDFjcm91CmVcdTAzMDFjdW1lCmVcdTAzMDFjdXJldWlsCmVcdTAzMDFkaWZpZXIKZVx1MDMwMWR1cXVlcgplZmZhY2VyCmVmZmVjdGlmCmVmZmlnaWUKZWZmb3J0CmVmZnJheWVyCmVmZnVzaW9uCmVcdTAzMDFnYWxpc2VyCmVcdTAzMDFnYXJlcgplXHUwMzAxamVjdGVyCmVcdTAzMDFsYWJvcmVyCmVcdTAzMDFsYXJnaXIKZVx1MDMwMWxlY3Ryb24KZVx1MDMwMWxlXHUwMzAxZ2FudAplXHUwMzAxbGVcdTAzMDFwaGFudAplXHUwMzAxbGVcdTAzMDB2ZQplXHUwMzAxbGlnaWJsZQplXHUwMzAxbGl0aXNtZQplXHUwMzAxbG9nZQplXHUwMzAxbHVjaWRlcgplXHUwMzAxbHVkZXIKZW1iYWxsZXIKZW1iZWxsaXIKZW1icnlvbgplXHUwMzAxbWVyYXVkZQplXHUwMzAxbWlzc2lvbgplbW1lbmVyCmVcdTAzMDFtb3Rpb24KZVx1MDMwMW1vdXZvaXIKZW1wZXJldXIKZW1wbG95ZXIKZW1wb3J0ZXIKZW1wcmlzZQplXHUwMzAxbXVsc2lvbgplbmNhZHJlcgplbmNoZVx1MDMwMHJlCmVuY2xhdmUKZW5jb2NoZQplbmRpZ3VlcgplbmRvc3NlcgplbmRyb2l0CmVuZHVpcmUKZVx1MDMwMW5lcmdpZQplbmZhbmNlCmVuZmVybWVyCmVuZm91aXIKZW5nYWdlcgplbmdpbgplbmdsb2JlcgplXHUwMzAxbmlnbWUKZW5qYW1iZXIKZW5qZXUKZW5sZXZlcgplbm5lbWkKZW5udXlldXgKZW5yaWNoaXIKZW5yb2JhZ2UKZW5zZWlnbmUKZW50YXNzZXIKZW50ZW5kcmUKZW50aWVyCmVudG91cmVyCmVudHJhdmVyCmVcdTAzMDFudW1lXHUwMzAxcmVyCmVudmFoaXIKZW52aWFibGUKZW52b3llcgplbnp5bWUKZVx1MDMwMW9saWVuCmVcdTAzMDFwYWlzc2lyCmVcdTAzMDFwYXJnbmUKZVx1MDMwMXBhdGFudAplXHUwMzAxcGF1bGUKZVx1MDMwMXBpY2VyaWUKZVx1MDMwMXBpZGVcdTAzMDFtaWUKZVx1MDMwMXBpZXIKZVx1MDMwMXBpbG9ndWUKZVx1MDMwMXBpbmUKZVx1MDMwMXBpc29kZQplXHUwMzAxcGl0YXBoZQplXHUwMzAxcG9xdWUKZVx1MDMwMXByZXV2ZQplXHUwMzAxcHJvdXZlcgplXHUwMzAxcHVpc2FudAplXHUwMzAxcXVlcnJlCmVcdTAzMDFxdWlwZQplXHUwMzAxcmlnZXIKZVx1MDMwMXJvc2lvbgplcnJldXIKZVx1MDMwMXJ1cHRpb24KZXNjYWxpZXIKZXNwYWRvbgplc3BlXHUwMzAwY2UKZXNwaWVcdTAzMDBnbGUKZXNwb2lyCmVzcHJpdAplc3F1aXZlcgplc3NheWVyCmVzc2VuY2UKZXNzaWV1CmVzc29yZXIKZXN0aW1lCmVzdG9tYWMKZXN0cmFkZQplXHUwMzAxdGFnZVx1MDMwMHJlCmVcdTAzMDF0YWxlcgplXHUwMzAxdGFuY2hlCmVcdTAzMDF0YXRpcXVlCmVcdTAzMDF0ZWluZHJlCmVcdTAzMDF0ZW5kb2lyCmVcdTAzMDF0ZXJuZWwKZVx1MDMwMXRoYW5vbAplXHUwMzAxdGhpcXVlCmV0aG5pZQplXHUwMzAxdGlyZXIKZVx1MDMwMXRvZmZlcgplXHUwMzAxdG9pbGUKZVx1MDMwMXRvbm5hbnQKZVx1MDMwMXRvdXJkaXIKZVx1MDMwMXRyYW5nZQplXHUwMzAxdHJvaXQKZVx1MDMwMXR1ZGUKZXVwaG9yaWUKZVx1MDMwMXZhbHVlcgplXHUwMzAxdmFzaW9uCmVcdTAzMDF2ZW50YWlsCmVcdTAzMDF2aWRlbmNlCmVcdTAzMDF2aXRlcgplXHUwMzAxdm9sdXRpZgplXHUwMzAxdm9xdWVyCmV4YWN0CmV4YWdlXHUwMzAxcmVyCmV4YXVjZXIKZXhjZWxsZXIKZXhjaXRhbnQKZXhjbHVzaWYKZXhjdXNlCmV4ZVx1MDMwMWN1dGVyCmV4ZW1wbGUKZXhlcmNlcgpleGhhbGVyCmV4aG9ydGVyCmV4aWdlbmNlCmV4aWxlcgpleGlzdGVyCmV4b3RpcXVlCmV4cGVcdTAzMDFkaWVyCmV4cGxvcmVyCmV4cG9zZXIKZXhwcmltZXIKZXhxdWlzCmV4dGVuc2lmCmV4dHJhaXJlCmV4dWx0ZXIKZmFibGUKZmFidWxldXgKZmFjZXR0ZQpmYWNpbGUKZmFjdHVyZQpmYWlibGlyCmZhbGFpc2UKZmFtZXV4CmZhbWlsbGUKZmFyY2V1cgpmYXJmZWx1CmZhcmluZQpmYXJvdWNoZQpmYXNjaW5lcgpmYXRhbApmYXRpZ3VlCmZhdWNvbgpmYXV0aWYKZmF2ZXVyCmZhdm9yaQpmZVx1MDMwMWJyaWxlCmZlXHUwMzAxY29uZGVyCmZlXHUwMzAxZGVcdTAzMDFyZXIKZmVcdTAzMDFsaW4KZmVtbWUKZmVcdTAzMDFtdXIKZmVuZG9pcgpmZVx1MDMwMW9kYWwKZmVybWVyCmZlXHUwMzAxcm9jZQpmZXJ2ZXVyCmZlc3RpdmFsCmZldWlsbGUKZmV1dHJlCmZlXHUwMzAxdnJpZXIKZmlhc2NvCmZpY2VsZXIKZmljdGlmCmZpZGVcdTAzMDBsZQpmaWd1cmUKZmlsYXR1cmUKZmlsZXRhZ2UKZmlsaWVcdTAzMDByZQpmaWxsZXVsCmZpbG1lcgpmaWxvdQpmaWx0cmVyCmZpbmFuY2VyCmZpbmlyCmZpb2xlCmZpcm1lCmZpc3N1cmUKZml4ZXIKZmxhaXJlcgpmbGFtbWUKZmxhc3F1ZQpmbGF0dGV1cgpmbGVcdTAzMDFhdQpmbGVcdTAzMDBjaGUKZmxldXIKZmxleGlvbgpmbG9jb24KZmxvcmUKZmx1Y3R1ZXIKZmx1aWRlCmZsdXZpYWwKZm9saWUKZm9uZGVyaWUKZm9uZ2libGUKZm9udGFpbmUKZm9yY2VyCmZvcmdlcm9uCmZvcm11bGVyCmZvcnR1bmUKZm9zc2lsZQpmb3VkcmUKZm91Z2VcdTAzMDByZQpmb3VpbGxlcgpmb3VsdXJlCmZvdXJtaQpmcmFnaWxlCmZyYWlzZQpmcmFuY2hpcgpmcmFwcGVyCmZyYXlldXIKZnJlXHUwMzAxZ2F0ZQpmcmVpbmVyCmZyZWxvbgpmcmVcdTAzMDFtaXIKZnJlXHUwMzAxbmVcdTAzMDFzaWUKZnJlXHUwMzAwcmUKZnJpYWJsZQpmcmljdGlvbgpmcmlzc29uCmZyaXZvbGUKZnJvaWQKZnJvbWFnZQpmcm9udGFsCmZyb3R0ZXIKZnJ1aXQKZnVnaXRpZgpmdWl0ZQpmdXJldXIKZnVyaWV1eApmdXJ0aWYKZnVzaW9uCmZ1dHVyCmdhZ25lcgpnYWxheGllCmdhbGVyaWUKZ2FtYmFkZXIKZ2FyYW50aXIKZ2FyZGllbgpnYXJuaXIKZ2FycmlndWUKZ2F6ZWxsZQpnYXpvbgpnZVx1MDMwMWFudApnZVx1MDMwMWxhdGluZQpnZVx1MDMwMWx1bGUKZ2VuZGFybWUKZ2VcdTAzMDFuZVx1MDMwMXJhbApnZVx1MDMwMW5pZQpnZW5vdQpnZW50aWwKZ2VcdTAzMDFvbG9naWUKZ2VcdTAzMDFvbWVcdTAzMDB0cmUKZ2VcdTAzMDFyYW5pdW0KZ2VybWUKZ2VzdHVlbApnZXlzZXIKZ2liaWVyCmdpY2xlcgpnaXJhZmUKZ2l2cmUKZ2xhY2UKZ2xhaXZlCmdsaXNzZXIKZ2xvYmUKZ2xvaXJlCmdsb3JpZXV4CmdvbGZldXIKZ29tbWUKZ29uZmxlcgpnb3JnZQpnb3JpbGxlCmdvdWRyb24KZ291ZmZyZQpnb3Vsb3QKZ291cGlsbGUKZ291cm1hbmQKZ291dHRlCmdyYWR1ZWwKZ3JhZmZpdGkKZ3JhaW5lCmdyYW5kCmdyYXBwaW4KZ3JhdHVpdApncmF2aXIKZ3JlbmF0CmdyaWZmdXJlCmdyaWxsZXIKZ3JpbXBlcgpncm9nbmVyCmdyb25kZXIKZ3JvdHRlCmdyb3VwZQpncnVnZXIKZ3J1dGllcgpncnV5ZVx1MDMwMHJlCmd1ZVx1MDMwMXBhcmQKZ3VlcnJpZXIKZ3VpZGUKZ3VpbWF1dmUKZ3VpdGFyZQpndXN0YXRpZgpneW1uYXN0ZQpneXJvc3RhdApoYWJpdHVkZQpoYWNob2lyCmhhbHRlCmhhbWVhdQpoYW5nYXIKaGFubmV0b24KaGFyaWNvdApoYXJtb25pZQpoYXJwb24KaGFzYXJkCmhlXHUwMzAxbGl1bQpoZVx1MDMwMW1hdG9tZQpoZXJiZQpoZVx1MDMwMXJpc3NvbgpoZXJtaW5lCmhlXHUwMzAxcm9uCmhlXHUwMzAxc2l0ZXIKaGV1cmV1eApoaWJlcm5lcgpoaWJvdQpoaWxhcmFudApoaXN0b2lyZQpoaXZlcgpob21hcmQKaG9tbWFnZQpob21vZ2VcdTAzMDBuZQpob25uZXVyCmhvbm9yZXIKaG9udGV1eApob3JkZQpob3Jpem9uCmhvcmxvZ2UKaG9ybW9uZQpob3JyaWJsZQpob3VsZXV4CmhvdXNzZQpodWJsb3QKaHVpbGV1eApodW1haW4KaHVtYmxlCmh1bWlkZQpodW1vdXIKaHVybGVyCmh5ZHJvbWVsCmh5Z2llXHUwMzAwbmUKaHltbmUKaHlwbm9zZQppZHlsbGUKaWdub3JlcgppZ3VhbmUKaWxsaWNpdGUKaWxsdXNpb24KaW1hZ2UKaW1iaWJlcgppbWl0ZXIKaW1tZW5zZQppbW1vYmlsZQppbW11YWJsZQppbXBhY3QKaW1wZVx1MDMwMXJpYWwKaW1wbG9yZXIKaW1wb3NlcgppbXByaW1lcgppbXB1dGVyCmluY2FybmVyCmluY2VuZGllCmluY2lkZW50CmluY2xpbmVyCmluY29sb3JlCmluZGV4ZXIKaW5kaWNlCmluZHVjdGlmCmluZVx1MDMwMWRpdAppbmVwdGllCmluZXhhY3QKaW5maW5pCmluZmxpZ2VyCmluZm9ybWVyCmluZnVzaW9uCmluZ2VcdTAzMDFyZXIKaW5oYWxlcgppbmhpYmVyCmluamVjdGVyCmluanVyZQppbm5vY2VudAppbm9jdWxlcgppbm9uZGVyCmluc2NyaXJlCmluc2VjdGUKaW5zaWduZQppbnNvbGl0ZQppbnNwaXJlcgppbnN0aW5jdAppbnN1bHRlcgppbnRhY3QKaW50ZW5zZQppbnRpbWUKaW50cmlndWUKaW50dWl0aWYKaW51dGlsZQppbnZhc2lvbgppbnZlbnRlcgppbnZpdGVyCmludm9xdWVyCmlyb25pcXVlCmlycmFkaWVyCmlycmVcdTAzMDFlbAppcnJpdGVyCmlzb2xlcgppdm9pcmUKaXZyZXNzZQpqYWd1YXIKamFpbGxpcgpqYW1iZQpqYW52aWVyCmphcmRpbgpqYXVnZXIKamF1bmUKamF2ZWxvdApqZXRhYmxlCmpldG9uCmpldWRpCmpldW5lc3NlCmpvaW5kcmUKam9uY2hlcgpqb25nbGVyCmpvdWV1cgpqb3Vpc3NpZgpqb3VybmFsCmpvdmlhbApqb3lhdQpqb3lldXgKanViaWxlcgpqdWdlbWVudApqdW5pb3IKanVwb24KanVyaXN0ZQpqdXN0aWNlCmp1dGV1eApqdXZlXHUwMzAxbmlsZQprYXlhawpraW1vbm8Ka2lvc3F1ZQpsYWJlbApsYWJpYWwKbGFib3VyZXIKbGFjZVx1MDMwMXJlcgpsYWN0b3NlCmxhZ3VuZQpsYWluZQpsYWlzc2VyCmxhaXRpZXIKbGFtYmVhdQpsYW1lbGxlCmxhbXBlCmxhbmNldXIKbGFuZ2FnZQpsYW50ZXJuZQpsYXBpbgpsYXJnZXVyCmxhcm1lCmxhdXJpZXIKbGF2YWJvCmxhdm9pcgpsZWN0dXJlCmxlXHUwMzAxZ2FsCmxlXHUwMzAxZ2VyCmxlXHUwMzAxZ3VtZQpsZXNzaXZlCmxldHRyZQpsZXZpZXIKbGV4aXF1ZQpsZVx1MDMwMXphcmQKbGlhc3NlCmxpYmVcdTAzMDFyZXIKbGlicmUKbGljZW5jZQpsaWNvcm5lCmxpZVx1MDMwMGdlCmxpZVx1MDMwMHZyZQpsaWdhdHVyZQpsaWdvdGVyCmxpZ3VlCmxpbWVyCmxpbWl0ZQpsaW1vbmFkZQpsaW1waWRlCmxpbmVcdTAzMDFhaXJlCmxpbmdvdApsaW9uY2VhdQpsaXF1aWRlCmxpc2llXHUwMzAwcmUKbGlzdGVyCmxpdGhpdW0KbGl0aWdlCmxpdHRvcmFsCmxpdnJldXIKbG9naXF1ZQpsb2ludGFpbgpsb2lzaXIKbG9tYnJpYwpsb3RlcmllCmxvdWVyCmxvdXJkCmxvdXRyZQpsb3V2ZQpsb3lhbApsdWJpZQpsdWNpZGUKbHVjcmF0aWYKbHVldXIKbHVndWJyZQpsdWlzYW50Cmx1bWllXHUwMzAwcmUKbHVuYWlyZQpsdW5kaQpsdXJvbgpsdXR0ZXIKbHV4dWV1eAptYWNoaW5lCm1hZ2FzaW4KbWFnZW50YQptYWdpcXVlCm1haWdyZQptYWlsbG9uCm1haW50aWVuCm1haXJpZQptYWlzb24KbWFqb3JlcgptYWxheGVyCm1hbGVcdTAzMDFmaWNlCm1hbGhldXIKbWFsaWNlCm1hbGxldHRlCm1hbW1vdXRoCm1hbmRhdGVyCm1hbmlhYmxlCm1hbnF1YW50Cm1hbnRlYXUKbWFudWVsCm1hcmF0aG9uCm1hcmJyZQptYXJjaGFuZAptYXJkaQptYXJpdGltZQptYXJxdWV1cgptYXJyb24KbWFydGVsZXIKbWFzY290dGUKbWFzc2lmCm1hdGVcdTAzMDFyaWVsCm1hdGllXHUwMzAwcmUKbWF0cmFxdWUKbWF1ZGlyZQptYXVzc2FkZQptYXV2ZQptYXhpbWFsCm1lXHUwMzAxY2hhbnQKbWVcdTAzMDFjb25udQptZVx1MDMwMWRhaWxsZQptZVx1MDMwMWRlY2luCm1lXHUwMzAxZGl0ZXIKbWVcdTAzMDFkdXNlCm1laWxsZXVyCm1lXHUwMzAxbGFuZ2UKbWVcdTAzMDFsb2RpZQptZW1icmUKbWVcdTAzMDFtb2lyZQptZW5hY2VyCm1lbmVyCm1lbmhpcgptZW5zb25nZQptZW50b3IKbWVyY3JlZGkKbWVcdTAzMDFyaXRlCm1lcmxlCm1lc3NhZ2VyCm1lc3VyZQptZVx1MDMwMXRhbAptZVx1MDMwMXRlXHUwMzAxb3JlCm1lXHUwMzAxdGhvZGUKbWVcdTAzMDF0aWVyCm1ldWJsZQptaWF1bGVyCm1pY3JvYmUKbWlldHRlCm1pZ25vbgptaWdyZXIKbWlsaWV1Cm1pbGxpb24KbWltaXF1ZQptaW5jZQptaW5lXHUwMzAxcmFsCm1pbmltYWwKbWlub3JlcgptaW51dGUKbWlyYWNsZQptaXJvaXRlcgptaXNzaWxlCm1peHRlCm1vYmlsZQptb2Rlcm5lCm1vZWxsZXV4Cm1vbmRpYWwKbW9uaXRldXIKbW9ubmFpZQptb25vdG9uZQptb25zdHJlCm1vbnRhZ25lCm1vbnVtZW50Cm1vcXVldXIKbW9yY2VhdQptb3JzdXJlCm1vcnRpZXIKbW90ZXVyCm1vdGlmCm1vdWNoZQptb3VmbGUKbW91bGluCm1vdXNzb24KbW91dG9uCm1vdXZhbnQKbXVsdGlwbGUKbXVuaXRpb24KbXVyYWlsbGUKbXVyZVx1MDMwMG5lCm11cm11cmUKbXVzY2xlCm11c2VcdTAzMDF1bQptdXNpY2llbgptdXRhdGlvbgptdXRlcgptdXR1ZWwKbXlyaWFkZQpteXJ0aWxsZQpteXN0ZVx1MDMwMHJlCm15dGhpcXVlCm5hZ2V1cgpuYXBwZQpuYXJxdW9pcwpuYXJyZXIKbmF0YXRpb24KbmF0aW9uCm5hdHVyZQpuYXVmcmFnZQpuYXV0aXF1ZQpuYXZpcmUKbmVcdTAzMDFidWxldXgKbmVjdGFyCm5lXHUwMzAxZmFzdGUKbmVcdTAzMDFnYXRpb24KbmVcdTAzMDFnbGlnZXIKbmVcdTAzMDFnb2NpZXIKbmVpZ2UKbmVydmV1eApuZXR0b3llcgpuZXVyb25lCm5ldXRyb24KbmV2ZXUKbmljaGUKbmlja2VsCm5pdHJhdGUKbml2ZWF1Cm5vYmxlCm5vY2lmCm5vY3R1cm5lCm5vaXJjZXVyCm5vaXNldHRlCm5vbWFkZQpub21icmV1eApub21tZXIKbm9ybWF0aWYKbm90YWJsZQpub3RpZmllcgpub3RvaXJlCm5vdXJyaXIKbm91dmVhdQpub3ZhdGV1cgpub3ZlbWJyZQpub3ZpY2UKbnVhZ2UKbnVhbmNlcgpudWlyZQpudWlzaWJsZQpudW1lXHUwMzAxcm8KbnVwdGlhbApudXF1ZQpudXRyaXRpZgpvYmVcdTAzMDFpcgpvYmplY3RpZgpvYmxpZ2VyCm9ic2N1cgpvYnNlcnZlcgpvYnN0YWNsZQpvYnRlbmlyCm9idHVyZXIKb2NjYXNpb24Kb2NjdXBlcgpvY2VcdTAzMDFhbgpvY3RvYnJlCm9jdHJveWVyCm9jdHVwbGVyCm9jdWxhaXJlCm9kZXVyCm9kb3JhbnQKb2ZmZW5zZXIKb2ZmaWNpZXIKb2ZmcmlyCm9naXZlCm9pc2VhdQpvaXNpbGxvbgpvbGZhY3RpZgpvbGl2aWVyCm9tYnJhZ2UKb21ldHRyZQpvbmN0dWV1eApvbmR1bGVyCm9uZVx1MDMwMXJldXgKb25pcmlxdWUKb3BhbGUKb3BhcXVlCm9wZVx1MDMwMXJlcgpvcGluaW9uCm9wcG9ydHVuCm9wcHJpbWVyCm9wdGVyCm9wdGlxdWUKb3JhZ2V1eApvcmFuZ2UKb3JiaXRlCm9yZG9ubmVyCm9yZWlsbGUKb3JnYW5lCm9yZ3VlaWwKb3JpZmljZQpvcm5lbWVudApvcnF1ZQpvcnRpZQpvc2NpbGxlcgpvc21vc2UKb3NzYXR1cmUKb3RhcmllCm91cmFnYW4Kb3Vyc29uCm91dGlsCm91dHJhZ2VyCm91dnJhZ2UKb3ZhdGlvbgpveHlkZQpveHlnZVx1MDMwMG5lCm96b25lCnBhaXNpYmxlCnBhbGFjZQpwYWxtYXJlXHUwMzAwcwpwYWxvdXJkZQpwYWxwZXIKcGFuYWNoZQpwYW5kYQpwYW5nb2xpbgpwYW5pcXVlcgpwYW5uZWF1CnBhbm9yYW1hCnBhbnRhbG9uCnBhcGF5ZQpwYXBpZXIKcGFwb3RlcgpwYXB5cnVzCnBhcmFkb3hlCnBhcmNlbGxlCnBhcmVzc2UKcGFyZnVtZXIKcGFybGVyCnBhcm9sZQpwYXJyYWluCnBhcnNlbWVyCnBhcnRhZ2VyCnBhcnVyZQpwYXJ2ZW5pcgpwYXNzaW9uCnBhc3RlXHUwMzAwcXVlCnBhdGVybmVsCnBhdGllbmNlCnBhdHJvbgpwYXZpbGxvbgpwYXZvaXNlcgpwYXllcgpwYXlzYWdlCnBlaWduZQpwZWludHJlCnBlbGFnZQpwZVx1MDMwMWxpY2FuCnBlbGxlCnBlbG91c2UKcGVsdWNoZQpwZW5kdWxlCnBlXHUwMzAxbmVcdTAzMDF0cmVyCnBlXHUwMzAxbmlibGUKcGVuc2lmCnBlXHUwMzAxbnVyaWUKcGVcdTAzMDFwaXRlCnBlXHUwMzAxcGx1bQpwZXJkcml4CnBlcmZvcmVyCnBlXHUwMzAxcmlvZGUKcGVybXV0ZXIKcGVycGxleGUKcGVyc2lsCnBlcnRlCnBlc2VyCnBlXHUwMzAxdGFsZQpwZXRpdApwZVx1MDMwMXRyaXIKcGV1cGxlCnBoYXJhb24KcGhvYmllCnBob3F1ZQpwaG90b24KcGhyYXNlCnBoeXNpcXVlCnBpYW5vCnBpY3R1cmFsCnBpZVx1MDMwMGNlCnBpZXJyZQpwaWV1dnJlCnBpbG90ZQpwaW5jZWF1CnBpcGV0dGUKcGlxdWVyCnBpcm9ndWUKcGlzY2luZQpwaXN0b24KcGl2b3RlcgpwaXhlbApwaXp6YQpwbGFjYXJkCnBsYWZvbmQKcGxhaXNpcgpwbGFuZXIKcGxhcXVlCnBsYXN0cm9uCnBsYXRlYXUKcGxldXJlcgpwbGV4dXMKcGxpYWdlCnBsb21iCnBsb25nZXIKcGx1aWUKcGx1bWFnZQpwb2NoZXR0ZQpwb2VcdTAzMDFzaWUKcG9lXHUwMzAwdGUKcG9pbnRlCnBvaXJpZXIKcG9pc3Nvbgpwb2l2cmUKcG9sYWlyZQpwb2xpY2llcgpwb2xsZW4KcG9seWdvbmUKcG9tbWFkZQpwb21waWVyCnBvbmN0dWVsCnBvbmRlXHUwMzAxcmVyCnBvbmV5CnBvcnRpcXVlCnBvc2l0aW9uCnBvc3NlXHUwMzAxZGVyCnBvc3R1cmUKcG90YWdlcgpwb3RlYXUKcG90aW9uCnBvdWNlCnBvdWxhaW4KcG91bW9uCnBvdXJwcmUKcG91c3Npbgpwb3V2b2lyCnByYWlyaWUKcHJhdGlxdWUKcHJlXHUwMzAxY2lldXgKcHJlXHUwMzAxZGlyZQpwcmVcdTAzMDFmaXhlCnByZVx1MDMwMWx1ZGUKcHJlXHUwMzAxbm9tCnByZVx1MDMwMXNlbmNlCnByZVx1MDMwMXRleHRlCnByZVx1MDMwMXZvaXIKcHJpbWl0aWYKcHJpbmNlCnByaXNvbgpwcml2ZXIKcHJvYmxlXHUwMzAwbWUKcHJvY2VcdTAzMDFkZXIKcHJvZGlnZQpwcm9mb25kCnByb2dyZVx1MDMwMHMKcHJvaWUKcHJvamV0ZXIKcHJvbG9ndWUKcHJvbWVuZXIKcHJvcHJlCnByb3NwZVx1MDMwMHJlCnByb3RlXHUwMzAxZ2VyCnByb3Vlc3NlCnByb3ZlcmJlCnBydWRlbmNlCnBydW5lYXUKcHN5Y2hvc2UKcHVibGljCnB1Y2Vyb24KcHVpc2VyCnB1bHBlCnB1bHNhcgpwdW5haXNlCnB1bml0aWYKcHVwaXRyZQpwdXJpZmllcgpwdXp6bGUKcHlyYW1pZGUKcXVhc2FyCnF1ZXJlbGxlCnF1ZXN0aW9uCnF1aWVcdTAzMDF0dWRlCnF1aXR0ZXIKcXVvdGllbnQKcmFjaW5lCnJhY29udGVyCnJhZGlldXgKcmFnb25kaW4KcmFpZGV1cgpyYWlzaW4KcmFsZW50aXIKcmFsbG9uZ2UKcmFtYXNzZXIKcmFwaWRlCnJhc2FnZQpyYXRpc3NlcgpyYXZhZ2VyCnJhdmluCnJheW9ubmVyCnJlXHUwMzAxYWN0aWYKcmVcdTAzMDFhZ2lyCnJlXHUwMzAxYWxpc2VyCnJlXHUwMzAxYW5pbWVyCnJlY2V2b2lyCnJlXHUwMzAxY2l0ZXIKcmVcdTAzMDFjbGFtZXIKcmVcdTAzMDFjb2x0ZXIKcmVjcnV0ZXIKcmVjdWxlcgpyZWN5Y2xlcgpyZVx1MDMwMWRpZ2VyCnJlZG91dGVyCnJlZmFpcmUKcmVcdTAzMDFmbGV4ZQpyZVx1MDMwMWZvcm1lcgpyZWZyYWluCnJlZnVnZQpyZVx1MDMwMWdhbGllbgpyZVx1MDMwMWdpb24KcmVcdTAzMDFnbGFnZQpyZVx1MDMwMWd1bGllcgpyZVx1MDMwMWl0ZVx1MDMwMXJlcgpyZWpldGVyCnJlam91ZXIKcmVsYXRpZgpyZWxldmVyCnJlbGllZgpyZW1hcnF1ZQpyZW1lXHUwMzAwZGUKcmVtaXNlCnJlbW9udGVyCnJlbXBsaXIKcmVtdWVyCnJlbmFyZApyZW5mb3J0CnJlbmlmbGVyCnJlbm9uY2VyCnJlbnRyZXIKcmVudm9pCnJlcGxpZXIKcmVwb3J0ZXIKcmVwcmlzZQpyZXB0aWxlCnJlcXVpbgpyZVx1MDMwMXNlcnZlCnJlXHUwMzAxc2luZXV4CnJlXHUwMzAxc291ZHJlCnJlc3BlY3QKcmVzdGVyCnJlXHUwMzAxc3VsdGF0CnJlXHUwMzAxdGFibGlyCnJldGVuaXIKcmVcdTAzMDF0aWN1bGUKcmV0b21iZXIKcmV0cmFjZXIKcmVcdTAzMDF1bmlvbgpyZVx1MDMwMXVzc2lyCnJldmFuY2hlCnJldml2cmUKcmVcdTAzMDF2b2x0ZQpyZVx1MDMwMXZ1bHNpZgpyaWNoZXNzZQpyaWRlYXUKcmlldXIKcmlnaWRlCnJpZ29sZXIKcmluY2VyCnJpcG9zdGVyCnJpc2libGUKcmlzcXVlCnJpdHVlbApyaXZhbApyaXZpZVx1MDMwMHJlCnJvY2hldXgKcm9tYW5jZQpyb21wcmUKcm9uY2UKcm9uZGluCnJvc2VhdQpyb3NpZXIKcm90YXRpZgpyb3Rvcgpyb3R1bGUKcm91Z2UKcm91aWxsZQpyb3VsZWF1CnJvdXRpbmUKcm95YXVtZQpydWJhbgpydWJpcwpydWNoZQpydWVsbGUKcnVndWV1eApydWluZXIKcnVpc3NlYXUKcnVzZXIKcnVzdGlxdWUKcnl0aG1lCnNhYmxlcgpzYWJvdGVyCnNhYnJlCnNhY29jaGUKc2FmYXJpCnNhZ2Vzc2UKc2Fpc2lyCnNhbGFkZQpzYWxpdmUKc2Fsb24Kc2FsdWVyCnNhbWVkaQpzYW5jdGlvbgpzYW5nbGllcgpzYXJjYXNtZQpzYXJkaW5lCnNhdHVyZXIKc2F1Z3JlbnUKc2F1bW9uCnNhdXRlcgpzYXV2YWdlCnNhdmFudApzYXZvbm5lcgpzY2FscGVsCnNjYW5kYWxlCnNjZVx1MDMwMWxlXHUwMzAxcmF0CnNjZVx1MDMwMW5hcmlvCnNjZXB0cmUKc2NoZVx1MDMwMW1hCnNjaWVuY2UKc2NpbmRlcgpzY29yZQpzY3J1dGluCnNjdWxwdGVyCnNlXHUwMzAxYW5jZQpzZVx1MDMwMWNhYmxlCnNlXHUwMzAxY2hlcgpzZWNvdWVyCnNlXHUwMzAxY3JlXHUwMzAxdGVyCnNlXHUwMzAxZGF0aWYKc2VcdTAzMDFkdWlyZQpzZWlnbmV1cgpzZVx1MDMwMWpvdXIKc2VcdTAzMDFsZWN0aWYKc2VtYWluZQpzZW1ibGVyCnNlbWVuY2UKc2VcdTAzMDFtaW5hbApzZVx1MDMwMW5hdGV1cgpzZW5zaWJsZQpzZW50ZW5jZQpzZVx1MDMwMXBhcmVyCnNlXHUwMzAxcXVlbmNlCnNlcmVpbgpzZXJnZW50CnNlXHUwMzAxcmlldXgKc2VycnVyZQpzZVx1MDMwMXJ1bQpzZXJ2aWNlCnNlXHUwMzAxc2FtZQpzZVx1MDMwMXZpcgpzZXZyYWdlCnNleHR1cGxlCnNpZGVcdTAzMDFyYWwKc2llXHUwMzAwY2xlCnNpZVx1MDMwMWdlcgpzaWZmbGVyCnNpZ2xlCnNpZ25hbApzaWxlbmNlCnNpbGljaXVtCnNpbXBsZQpzaW5jZVx1MDMwMHJlCnNpbmlzdHJlCnNpcGhvbgpzaXJvcApzaXNtaXF1ZQpzaXR1ZXIKc2tpZXIKc29jaWFsCnNvY2xlCnNvZGl1bQpzb2lnbmV1eApzb2xkYXQKc29sZWlsCnNvbGl0dWRlCnNvbHVibGUKc29tYnJlCnNvbW1laWwKc29tbm9sZXIKc29uZGUKc29uZ2V1cgpzb25uZXR0ZQpzb25vcmUKc29yY2llcgpzb3J0aXIKc29zaWUKc290dGlzZQpzb3VjaWV1eApzb3VkdXJlCnNvdWZmbGUKc291bGV2ZXIKc291cGFwZQpzb3VyY2UKc291dGlyZXIKc291dmVuaXIKc3BhY2lldXgKc3BhdGlhbApzcGVcdTAzMDFjaWFsCnNwaGVcdTAzMDByZQpzcGlyYWwKc3RhYmxlCnN0YXRpb24Kc3Rlcm51bQpzdGltdWx1cwpzdGlwdWxlcgpzdHJpY3QKc3R1ZGlldXgKc3R1cGV1cgpzdHlsaXN0ZQpzdWJsaW1lCnN1YnN0cmF0CnN1YnRpbApzdWJ2ZW5pcgpzdWNjZVx1MDMwMHMKc3VjcmUKc3VmZml4ZQpzdWdnZVx1MDMwMXJlcgpzdWl2ZXVyCnN1bGZhdGUKc3VwZXJiZQpzdXBwbGllcgpzdXJmYWNlCnN1cmljYXRlCnN1cm1lbmVyCnN1cnByaXNlCnN1cnNhdXQKc3VydmllCnN1c3BlY3QKc3lsbGFiZQpzeW1ib2xlCnN5bWVcdTAzMDF0cmllCnN5bmFwc2UKc3ludGF4ZQpzeXN0ZVx1MDMwMG1lCnRhYmFjCnRhYmxpZXIKdGFjdGlsZQp0YWlsbGVyCnRhbGVudAp0YWxpc21hbgp0YWxvbm5lcgp0YW1ib3VyCnRhbWlzZXIKdGFuZ2libGUKdGFwaXMKdGFxdWluZXIKdGFyZGVyCnRhcmlmCnRhcnRpbmUKdGFzc2UKdGF0YW1pCnRhdG91YWdlCnRhdXBlCnRhdXJlYXUKdGF4ZXIKdGVcdTAzMDFtb2luCnRlbXBvcmVsCnRlbmFpbGxlCnRlbmRyZQp0ZW5ldXIKdGVuaXIKdGVuc2lvbgp0ZXJtaW5lcgp0ZXJuZQp0ZXJyaWJsZQp0ZVx1MDMwMXRpbmUKdGV4dGUKdGhlXHUwMzAwbWUKdGhlXHUwMzAxb3JpZQp0aGVcdTAzMDFyYXBpZQp0aG9yYXgKdGliaWEKdGllXHUwMzAwZGUKdGltaWRlCnRpcmVsaXJlCnRpcm9pcgp0aXNzdQp0aXRhbmUKdGl0cmUKdGl0dWJlcgp0b2JvZ2dhbgp0b2xlXHUwMzAxcmFudAp0b21hdGUKdG9uaXF1ZQp0b25uZWF1CnRvcG9ueW1lCnRvcmNoZQp0b3JkcmUKdG9ybmFkZQp0b3JwaWxsZQp0b3JyZW50CnRvcnNlCnRvcnR1ZQp0b3RlbQp0b3VjaGVyCnRvdXJuYWdlCnRvdXNzZXIKdG94aW5lCnRyYWN0aW9uCnRyYWZpYwp0cmFnaXF1ZQp0cmFoaXIKdHJhaW4KdHJhbmNoZXIKdHJhdmFpbAp0cmVcdTAzMDBmbGUKdHJlbXBlcgp0cmVcdTAzMDFzb3IKdHJldWlsCnRyaWFnZQp0cmlidW5hbAp0cmljb3Rlcgp0cmlsb2dpZQp0cmlvbXBoZQp0cmlwbGVyCnRyaXR1cmVyCnRyaXZpYWwKdHJvbWJvbmUKdHJvbmMKdHJvcGljYWwKdHJvdXBlYXUKdHVpbGUKdHVsaXBlCnR1bXVsdGUKdHVubmVsCnR1cmJpbmUKdHV0ZXVyCnR1dG95ZXIKdHV5YXUKdHltcGFuCnR5cGhvbgp0eXBpcXVlCnR5cmFuCnVidWVzcXVlCnVsdGltZQp1bHRyYXNvbgp1bmFuaW1lCnVuaWZpZXIKdW5pb24KdW5pcXVlCnVuaXRhaXJlCnVuaXZlcnMKdXJhbml1bQp1cmJhaW4KdXJ0aWNhbnQKdXNhZ2UKdXNpbmUKdXN1ZWwKdXN1cmUKdXRpbGUKdXRvcGllCnZhY2FybWUKdmFjY2luCnZhZ2Fib25kCnZhZ3VlCnZhaWxsYW50CnZhaW5jcmUKdmFpc3NlYXUKdmFsYWJsZQp2YWxpc2UKdmFsbG9uCnZhbHZlCnZhbXBpcmUKdmFuaWxsZQp2YXBldXIKdmFyaWVyCnZhc2V1eAp2YXNzYWwKdmFzdGUKdmVjdGV1cgp2ZWRldHRlCnZlXHUwMzAxZ2VcdTAzMDF0YWwKdmVcdTAzMDFoaWN1bGUKdmVpbmFyZAp2ZVx1MDMwMWxvY2UKdmVuZHJlZGkKdmVcdTAzMDFuZVx1MDMwMXJlcgp2ZW5nZXIKdmVuaW1ldXgKdmVudG91c2UKdmVyZHVyZQp2ZVx1MDMwMXJpbgp2ZXJuaXIKdmVycm91CnZlcnNlcgp2ZXJ0dQp2ZXN0b24KdmVcdTAzMDF0ZVx1MDMwMXJhbgp2ZVx1MDMwMXR1c3RlCnZleGFudAp2ZXhlcgp2aWFkdWMKdmlhbmRlCnZpY3RvaXJlCnZpZGFuZ2UKdmlkZVx1MDMwMW8KdmlnbmV0dGUKdmlndWV1cgp2aWxhaW4KdmlsbGFnZQp2aW5haWdyZQp2aW9sb24KdmlwZVx1MDMwMHJlCnZpcmVtZW50CnZpcnR1b3NlCnZpcnVzCnZpc2FnZQp2aXNldXIKdmlzaW9uCnZpc3F1ZXV4CnZpc3VlbAp2aXRhbAp2aXRlc3NlCnZpdGljb2xlCnZpdHJpbmUKdml2YWNlCnZpdmlwYXJlCnZvY2F0aW9uCnZvZ3Vlcgp2b2lsZQp2b2lzaW4Kdm9pdHVyZQp2b2xhaWxsZQp2b2xjYW4Kdm9sdGlnZXIKdm9sdW1lCnZvcmFjZQp2b3J0ZXgKdm90ZXIKdm91bG9pcgp2b3lhZ2UKdm95ZWxsZQp3YWdvbgp4ZVx1MDMwMW5vbgp5YWNodAp6ZVx1MDMwMGJyZQp6ZVx1MDMwMW5pdGgKemVzdGUKem9vbG9naWVgLnNwbGl0KCJcbiIpOwoKICAvLyBub2RlX21vZHVsZXMvQHNjdXJlL2JpcDM5L2VzbS93b3JkbGlzdHMvaXRhbGlhbi5qcwogIHZhciB3b3JkbGlzdDQgPSBgYWJhY28KYWJiYWdsaW8KYWJiaW5hdG8KYWJldGUKYWJpc3NvCmFib2xpcmUKYWJyYXNpdm8KYWJyb2dhdG8KYWNjYWRlcmUKYWNjZW5ubwphY2N1c2F0bwphY2V0b25lCmFjaGlsbGUKYWNpZG8KYWNxdWEKYWNyZQphY3JpbGljbwphY3JvYmF0YQphY3V0bwphZGFnaW8KYWRkZWJpdG8KYWRkb21lCmFkZWd1YXRvCmFkZXJpcmUKYWRpcGUKYWRvdHRhcmUKYWR1bGFyZQphZmZhYmlsZQphZmZldHRvCmFmZmlzc28KYWZmcmFudG8KYWZvcmlzbWEKYWZvc28KYWZyaWNhbm8KYWdhdmUKYWdlbnRlCmFnZXZvbGUKYWdnYW5jaW8KYWdpcmUKYWdpdGFyZQphZ29uaXNtbwphZ3JpY29sbwphZ3J1bWV0bwphZ3V6em8KYWxhYmFyZGEKYWxhdG8KYWxiYXRybwphbGJlcmF0bwphbGJvCmFsYnVtZQphbGNlCmFsY29saWNvCmFsZXR0b25lCmFsZmEKYWxnZWJyYQphbGlhbnRlCmFsaWJpCmFsaW1lbnRvCmFsbGFnYXRvCmFsbGVncm8KYWxsaWV2bwphbGxvZG9sYQphbGx1c2l2bwphbG1lbm8KYWxvZ2VubwphbHBhY2EKYWxwZXN0cmUKYWx0YWxlbmEKYWx0ZXJubwphbHRpY2NpbwphbHRyb3ZlCmFsdW5ubwphbHZlb2xvCmFsemFyZQphbWFsZ2FtYQphbWFuaXRhCmFtYXJlbmEKYW1iaXRvCmFtYnJhdG8KYW1lYmEKYW1lcmljYQphbWV0aXN0YQphbWljbwphbW1hc3NvCmFtbWVuZGEKYW1taXJhcmUKYW1tb25pdG8KYW1vcmUKYW1waW8KYW1wbGlhcmUKYW11bGV0bwphbmFjYXJkbwphbmFncmFmZQphbmFsaXN0YQphbmFyY2hpYQphbmF0cmEKYW5jYQphbmNlbGxhCmFuY29yYQphbmRhcmUKYW5kcmVhCmFuZWxsbwphbmdlbG8KYW5nb2xhcmUKYW5ndXN0bwphbmltYQphbm5lZ2FyZQphbm5pZGF0bwphbm5vCmFubnVuY2lvCmFub25pbW8KYW50aWNpcG8KYW56aQphcGF0aWNvCmFwZXJ0dXJhCmFwb2RlCmFwcGFyaXJlCmFwcGV0aXRvCmFwcG9nZ2lvCmFwcHJvZG8KYXBwdW50bwphcHJpbGUKYXJhYmljYQphcmFjaGlkZQphcmFnb3N0YQphcmFsZGljYQphcmFuY2lvCmFyYXR1cmEKYXJhenpvCmFyYml0cm8KYXJjaGl2aW8KYXJkaXRvCmFyZW5pbGUKYXJnZW50bwphcmdpbmUKYXJndXRvCmFyaWEKYXJtb25pYQphcm5lc2UKYXJyZWRhdG8KYXJyaW5nYQphcnJvc3RvCmFyc2VuaWNvCmFyc28KYXJ0ZWZpY2UKYXJ6aWxsbwphc2NpdXR0bwphc2NvbHRvCmFzZXBzaQphc2V0dGljbwphc2ZhbHRvCmFzaW5vCmFzb2xhCmFzcGlyYXRvCmFzcHJvCmFzc2FnZ2lvCmFzc2UKYXNzb2x1dG8KYXNzdXJkbwphc3RhCmFzdGVudXRvCmFzdGljZQphc3RyYXR0bwphdGF2aWNvCmF0ZWlzbW8KYXRvbWljbwphdG9ubwphdHRlc2EKYXR0aXZhcmUKYXR0b3JubwphdHRyaXRvCmF0dHVhbGUKYXVzaWxpbwphdXN0cmlhCmF1dGlzdGEKYXV0b25vbW8KYXV0dW5ubwphdmFuemF0bwphdmVyZQphdnZlbmlyZQphdnZpc28KYXZ2b2xnZXJlCmF6aW9uZQphem90bwphenppbW8KYXp6dXJybwpiYWJlbGUKYmFjY2FubwpiYWNpbm8KYmFjbwpiYWRlc3NhCmJhZGlsYXRhCmJhZ25hdG8KYmFpdGEKYmFsY29uZQpiYWxkbwpiYWxlbmEKYmFsbGF0YQpiYWx6YW5vCmJhbWJpbm8KYmFuZGlyZQpiYXJhb25kYQpiYXJiYXJvCmJhcmNhCmJhcml0b25vCmJhcmx1bWUKYmFyb2NjbwpiYXNpbGljbwpiYXNzbwpiYXRvc3RhCmJhdHR1dG8KYmF1bGUKYmF2YQpiYXZvc2EKYmVjY28KYmVmZmEKYmVsZ2lvCmJlbHZhCmJlbmRhCmJlbmV2b2xlCmJlbmlnbm8KYmVuemluYQpiZXJlCmJlcmxpbmEKYmV0YQpiaWJpdGEKYmljaQpiaWRvbmUKYmlmaWRvCmJpZ2EKYmlsYW5jaWEKYmltYm8KYmlub2NvbG8KYmlvbG9nbwpiaXBlZGUKYmlwb2xhcmUKYmlyYmFudGUKYmlycmEKYmlzY290dG8KYmlzZXN0bwpiaXNub25ubwpiaXNvbnRlCmJpc3R1cmkKYml6emFycm8KYmxhbmRvCmJsYXR0YQpib2xsaXRvCmJvbmlmaWNvCmJvcmRvCmJvc2NvCmJvdGFuaWNvCmJvdHRpbm8KYm96em9sbwpicmFjY2lvCmJyYWRpcG8KYnJhbWEKYnJhbmNhCmJyYXZ1cmEKYnJldGVsbGEKYnJldmV0dG8KYnJlenphCmJyaWdsaWEKYnJpbGxhbnRlCmJyaW5kYXJlCmJyb2Njb2xvCmJyb2RvCmJyb256aW5hCmJydWxsbwpicnVubwpidWJib25lCmJ1Y2EKYnVkaW5vCmJ1ZmZvbmUKYnVpbwpidWxibwpidW9ubwpidXJsb25lCmJ1cnJhc2NhCmJ1c3NvbGEKYnVzdGEKY2FkZXR0bwpjYWR1Y28KY2FsYW1hcm8KY2FsY29sbwpjYWxlc3NlCmNhbGlicm8KY2FsbW8KY2Fsb3JpYQpjYW1idXNhCmNhbWVyYXRhCmNhbWljaWEKY2FtbWlubwpjYW1vbGEKY2FtcGFsZQpjYW5hcGEKY2FuZGVsYQpjYW5lCmNhbmlubwpjYW5vdHRvCmNhbnRpbmEKY2FwYWNlCmNhcGVsbG8KY2FwaXRvbG8KY2Fwb2dpcm8KY2FwcGVybwpjYXByYQpjYXBzdWxhCmNhcmFwYWNlCmNhcmNhc3NhCmNhcmRvCmNhcmlzbWEKY2Fyb3ZhbmEKY2FycmV0dG8KY2FydG9saW5hCmNhc2FjY2lvCmNhc2NhdGEKY2FzZXJtYQpjYXNvCmNhc3NvbmUKY2FzdGVsbG8KY2FzdWFsZQpjYXRhc3RhCmNhdGVuYQpjYXRyYW1lCmNhdXRvCmNhdmlsbG8KY2VkaWJpbGUKY2VkcmF0YQpjZWZhbG8KY2VsZWJyZQpjZWxsdWxhcmUKY2VuYQpjZW5vbmUKY2VudGVzaW1vCmNlcmFtaWNhCmNlcmNhcmUKY2VydG8KY2VydW1lCmNlcnZlbGxvCmNlc29pYQpjZXNwbwpjZXRvCmNoZWxhCmNoaWFybwpjaGljY2EKY2hpZWRlcmUKY2hpbWVyYQpjaGluYQpjaGlydXJnbwpjaGl0YXJyYQpjaWFvCmNpY2xpc21vCmNpZnJhcmUKY2lnbm8KY2lsaW5kcm8KY2lvdHRvbG8KY2lyY2EKY2lycm9zaQpjaXRyaWNvCmNpdHRhZGlubwpjaXVmZm8KY2l2ZXR0YQpjaXZpbGUKY2xhc3NpY28KY2xpbmljYQpjbG9ybwpjb2Njbwpjb2RhcmRvCmNvZGljZQpjb2VyZW50ZQpjb2dub21lCmNvbGxhcmUKY29sbWF0bwpjb2xvcmUKY29scG9zbwpjb2x0aXZhdG8KY29semEKY29tYQpjb21ldGEKY29tbWFuZG8KY29tb2RvCmNvbXB1dGVyCmNvbXVuZQpjb25jaXNvCmNvbmR1cnJlCmNvbmZlcm1hCmNvbmdlbGFyZQpjb25pdWdlCmNvbm5lc3NvCmNvbm9zY2VyZQpjb25zdW1vCmNvbnRpbnVvCmNvbnZlZ25vCmNvcGVydG8KY29waW9uZQpjb3BwaWEKY29wcmljYXBvCmNvcmF6emEKY29yZGF0YQpjb3JpY2F0bwpjb3JuaWNlCmNvcm9sbGEKY29ycG8KY29ycmVkbwpjb3JzaWEKY29ydGVzZQpjb3NtaWNvCmNvc3RhbnRlCmNvdHR1cmEKY292YXRvCmNyYXRlcmUKY3JhdmF0dGEKY3JlYXRvCmNyZWRlcmUKY3JlbW9zbwpjcmVzY2l0YQpjcmV0YQpjcmljZXRvCmNyaW5hbGUKY3Jpc2kKY3JpdGljbwpjcm9jZQpjcm9uYWNhCmNyb3N0YXRhCmNydWNpYWxlCmNydXNjYQpjdWNpcmUKY3VjdWxvCmN1Z2lubwpjdWxsYXRvCmN1cG9sYQpjdXJhdG9yZQpjdXJzb3JlCmN1cnZvCmN1c2Npbm8KY3VzdG9kZQpkYWRvCmRhaW5vCmRhbG1hdGEKZGFtZXJpbm8KZGFuaWVsYQpkYW5ub3NvCmRhbnphcmUKZGF0YXRvCmRhdmFudGkKZGF2dmVybwpkZWJ1dHRvCmRlY2VubmlvCmRlY2lzbwpkZWNsaW5vCmRlY29sbG8KZGVjcmV0bwpkZWRpY2F0bwpkZWZpbml0bwpkZWZvcm1lCmRlZ25vCmRlbGVnYXJlCmRlbGZpbm8KZGVsaXJpbwpkZWx0YQpkZW1lbnphCmRlbm90YXRvCmRlbnRybwpkZXBvc2l0bwpkZXJhcGF0YQpkZXJpdmFyZQpkZXJvZ2EKZGVzY3JpdHRvCmRlc2VydG8KZGVzaWRlcmlvCmRlc3VtZXJlCmRldGVyc2l2bwpkZXZvdG8KZGlhbWV0cm8KZGljZW1icmUKZGllZHJvCmRpZmVzbwpkaWZmdXNvCmRpZ2VyaXJlCmRpZ2l0YWxlCmRpbHV2aW8KZGluYW1pY28KZGlubmFuemkKZGlwaW50bwpkaXBsb21hCmRpcG9sbwpkaXJhZGFyZQpkaXJlCmRpcm90dG8KZGlydXBvCmRpc2FnaW8KZGlzY3JldG8KZGlzZmFyZQpkaXNnZWxvCmRpc3Bvc3RvCmRpc3RhbnphCmRpc3VtYW5vCmRpdG8KZGl2YW5vCmRpdmVsdG8KZGl2aWRlcmUKZGl2b3JhdG8KZG9ibG9uZQpkb2NlbnRlCmRvZ2FuYWxlCmRvZ21hCmRvbGNlCmRvbWF0bwpkb21lbmljYQpkb21pbmFyZQpkb25kb2xvCmRvbm8KZG9ybWlyZQpkb3RlCmRvdHRvcmUKZG92dXRvCmRvenppbmEKZHJhZ28KZHJ1aWRvCmR1YmJpbwpkdWJpdGFyZQpkdWNhbGUKZHVuYQpkdW9tbwpkdXBsaWNlCmR1cmF0dXJvCmViYW5vCmVjY2Vzc28KZWNjbwplY2xpc3NpCmVjb25vbWlhCmVkZXJhCmVkaWNvbGEKZWRpbGUKZWRpdG9yaWEKZWR1Y2FyZQplZ2Vtb25pYQplZ2xpCmVnb2lzbW8KZWdyZWdpbwplbGFib3JhdG8KZWxhcmdpcmUKZWxlZ2FudGUKZWxlbmNhdG8KZWxldHRvCmVsZXZhcmUKZWxmaWNvCmVsaWNhCmVsbW8KZWxzYQplbHVzbwplbWFuYXRvCmVtYmxlbWEKZW1lc3NvCmVtaXJvCmVtb3Rpdm8KZW1vemlvbmUKZW1waXJpY28KZW11bG8KZW5kZW1pY28KZW5kdXJvCmVuZXJnaWEKZW5mYXNpCmVub3RlY2EKZW50cmFyZQplbnppbWEKZXBhdGl0ZQplcGlsb2dvCmVwaXNvZGlvCmVwb2NhbGUKZXBwdXJlCmVxdWF0b3JlCmVyYXJpbwplcmJhCmVyYm9zbwplcmVkZQplcmVtaXRhCmVyaWdlcmUKZXJtZXRpY28KZXJvZQplcm9zaXZvCmVycmFudGUKZXNhZ29ubwplc2FtZQplc2FuaW1lCmVzYXVkaXJlCmVzY2EKZXNlbXBpbwplc2VyY2l0bwplc2liaXRvCmVzaWdlbnRlCmVzaXN0ZXJlCmVzaXRvCmVzb2ZhZ28KZXNvcnRhdG8KZXNvc28KZXNwYW5zbwplc3ByZXNzbwplc3NlbnphCmVzc28KZXN0ZXNvCmVzdGltYXJlCmVzdG9uaWEKZXN0cm9zbwplc3VsdGFyZQpldGlsaWNvCmV0bmljbwpldHJ1c2NvCmV0dG8KZXVjbGlkZW8KZXVyb3BhCmV2YXNvCmV2aWRlbnphCmV2aXRhdG8KZXZvbHV0bwpldnZpdmEKZmFiYnJpY2EKZmFjY2VuZGEKZmFjaGlybwpmYWxjbwpmYW1pZ2xpYQpmYW5hbGUKZmFuZmFyYQpmYW5nbwpmYW50YXNtYQpmYXJlCmZhcmZhbGxhCmZhcmlub3NvCmZhcm1hY28KZmFzY2lhCmZhc3Rvc28KZmFzdWxsbwpmYXRpY2FyZQpmYXRvCmZhdm9sb3NvCmZlYmJyZQpmZWNvbGEKZmVkZQpmZWdhdG8KZmVscGEKZmVsdHJvCmZlbW1pbmEKZmVuZGVyZQpmZW5vbWVubwpmZXJtZW50bwpmZXJybwpmZXJ0aWxlCmZlc3N1cmEKZmVzdGl2bwpmZXR0YQpmZXVkbwpmaWFiYQpmaWR1Y2lhCmZpZmEKZmlndXJhdG8KZmlsbwpmaW5hbnphCmZpbmVzdHJhCmZpbmlyZQpmaW9yZQpmaXNjYWxlCmZpc2ljbwpmaXVtZQpmbGFjb25lCmZsYW1lbmNvCmZsZWJvCmZsZW1tYQpmbG9yaWRvCmZsdWVudGUKZmx1b3JvCmZvYmljbwpmb2NhY2NpYQpmb2Nvc28KZm9kZXJhdG8KZm9nbGlvCmZvbGF0YQpmb2xjbG9yZQpmb2xnb3JlCmZvbmRlbnRlCmZvbmV0aWNvCmZvbmlhCmZvbnRhbmEKZm9yYml0bwpmb3JjaGV0dGEKZm9yZXN0YQpmb3JtaWNhCmZvcm5haW8KZm9ybwpmb3J0ZXp6YQpmb3J6YXJlCmZvc2ZhdG8KZm9zc28KZnJhY2Fzc28KZnJhbmEKZnJhc3Npbm8KZnJhdGVsbG8KZnJlY2NldHRhCmZyZW5hdGEKZnJlc2NvCmZyaWdvCmZyb2xsaW5vCmZyb25kZQpmcnVnYWxlCmZydXR0YQpmdWNpbGF0YQpmdWNzaWEKZnVnZ2VudGUKZnVsbWluZQpmdWx2bwpmdW1hbnRlCmZ1bWV0dG8KZnVtb3NvCmZ1bmUKZnVuemlvbmUKZnVvY28KZnVyYm8KZnVyZ29uZQpmdXJvcmUKZnVzbwpmdXRpbGUKZ2FiYmlhbm8KZ2FmZmUKZ2FsYXRlbwpnYWxsaW5hCmdhbG9wcG8KZ2FtYmVybwpnYW1tYQpnYXJhbnppYQpnYXJibwpnYXJvZmFubwpnYXJ6b25lCmdhc2RvdHRvCmdhc29saW8KZ2FzdHJpY28KZ2F0dG8KZ2F1ZGlvCmdhemVibwpnYXp6ZWxsYQpnZWNvCmdlbGF0aW5hCmdlbHNvCmdlbWVsbG8KZ2VtbWF0bwpnZW5lCmdlbml0b3JlCmdlbm5haW8KZ2Vub3RpcG8KZ2VyZ28KZ2hlcGFyZG8KZ2hpYWNjaW8KZ2hpc2EKZ2lhbGxvCmdpbGRhCmdpbmVwcm8KZ2lvY2FyZQpnaW9pZWxsbwpnaW9ybm8KZ2lvdmUKZ2lyYXRvCmdpcm9uZQpnaXR0YXRhCmdpdWRpemlvCmdpdXJhdG8KZ2l1c3RvCmdsb2J1bG8KZ2x1dGluZQpnbm9tbwpnb2JiYQpnb2xmCmdvbWl0bwpnb21tb25lCmdvbmZpbwpnb25uYQpnb3Zlcm5vCmdyYWNpbGUKZ3JhZG8KZ3JhZmljbwpncmFtbW8KZ3JhbmRlCmdyYXR0YXJlCmdyYXZvc28KZ3JhemlhCmdyZWNhCmdyZWdnZQpncmlmb25lCmdyaWdpbwpncmluemEKZ3JvdHRhCmdydXBwbwpndWFkYWdubwpndWFpbwpndWFudG8KZ3VhcmRhcmUKZ3VmbwpndWlkYXJlCmliZXJuYXRvCmljb25hCmlkZW50aWNvCmlkaWxsaW8KaWRvbG8KaWRyYQppZHJpY28KaWRyb2dlbm8KaWdpZW5lCmlnbmFybwppZ25vcmF0bwppbGFyZQppbGxlc28KaWxsb2dpY28KaWxsdWRlcmUKaW1iYWxsbwppbWJldnV0bwppbWJvY2NvCmltYnV0bwppbW1hbmUKaW1tZXJzbwppbW1vbGF0bwppbXBhY2NvCmltcGV0bwppbXBpZWdvCmltcG9ydG8KaW1wcm9udGEKaW5hbGFyZQppbmFyY2FyZQppbmF0dGl2bwppbmNhbnRvCmluY2VuZGlvCmluY2hpbm8KaW5jaXNpdm8KaW5jbHVzbwppbmNvbnRybwppbmNyb2NpbwppbmN1Ym8KaW5kYWdpbmUKaW5kaWEKaW5kb2xlCmluZWRpdG8KaW5mYXR0aQppbmZpbGFyZQppbmZsaXR0bwppbmdhZ2dpbwppbmdlZ25vCmluZ2xlc2UKaW5nb3Jkbwppbmdyb3Nzbwppbm5lc2NvCmlub2RvcmUKaW5vbHRyYXJlCmlub25kYXRvCmluc2FubwppbnNldHRvCmluc2llbWUKaW5zb25uaWEKaW5zdWxpbmEKaW50YXNhdG8KaW50ZXJvCmludG9uYWNvCmludHVpdG8KaW51bWlkaXJlCmludmFsaWRvCmludmVjZQppbnZpdG8KaXBlcmJvbGUKaXBub3RpY28KaXBvdGVzaQppcHBpY2EKaXJpZGUKaXJsYW5kYQppcm9uaWNvCmlycmlnYXRvCmlycm9yYXJlCmlzb2xhdG8KaXNvdG9wbwppc3Rlcmljbwppc3RpdHV0bwppc3RyaWNlCml0YWxpYQppdGVyYXJlCmxhYmJybwpsYWJpcmludG8KbGFjY2EKbGFjZXJhdG8KbGFjcmltYQpsYWN1bmEKbGFkZG92ZQpsYWdvCmxhbXBvCmxhbmNldHRhCmxhbnRlcm5hCmxhcmRvc28KbGFyZ2EKbGFyaW5nZQpsYXN0cmEKbGF0ZW56YQpsYXRpbm8KbGF0dHVnYQpsYXZhZ25hCmxhdm9ybwpsZWdhbGUKbGVnZ2VybwpsZW1ibwpsZW50ZXp6YQpsZW56YQpsZW9uZQpsZXByZQpsZXNpdm8KbGVzc2F0bwpsZXN0bwpsZXR0ZXJhbGUKbGV2YQpsZXZpZ2F0bwpsaWJlcm8KbGlkbwpsaWV2aXRvCmxpbGxhCmxpbWF0dXJhCmxpbWl0YXJlCmxpbXBpZG8KbGluZWFyZQpsaW5ndWEKbGlxdWlkbwpsaXJhCmxpcmljYQpsaXNjYQpsaXRlCmxpdGlnaW8KbGl2cmVhCmxvY2FuZGEKbG9kZQpsb2dpY2EKbG9tYmFyZQpsb25kcmEKbG9uZ2V2bwpsb3F1YWNlCmxvcmVuem8KbG90bwpsb3R0ZXJpYQpsdWNlCmx1Y2lkYXRvCmx1bWFjYQpsdW1pbm9zbwpsdW5nbwpsdXBvCmx1cHBvbG8KbHVzaW5nYQpsdXNzbwpsdXR0bwptYWNhYnJvCm1hY2NoaW5hCm1hY2VybwptYWNpbmF0bwptYWRhbWEKbWFnaWNvCm1hZ2xpYQptYWduZXRlCm1hZ3JvCm1haW9saWNhCm1hbGFmZWRlCm1hbGdyYWRvCm1hbGludGVzbwptYWxzYW5vCm1hbHRvCm1hbHVtb3JlCm1hbmEKbWFuY2lhCm1hbmRvcmxhCm1hbmdpYXJlCm1hbmlmZXN0bwptYW5uYXJvCm1hbm92cmEKbWFuc2FyZGEKbWFudGlkZQptYW51YnJpbwptYXBwYQptYXJhdG9uYQptYXJjaXJlCm1hcmV0dGEKbWFybW8KbWFyc3VwaW8KbWFzY2hlcmEKbWFzc2FpYQptYXN0aW5vCm1hdGVyYXNzbwptYXRyaWNvbGEKbWF0dG9uZQptYXR1cm8KbWF6dXJjYQptZWFuZHJvCm1lY2NhbmljbwptZWNlbmF0ZQptZWRlc2ltbwptZWRpdGFyZQptZWdhCm1lbGFzc2EKbWVsaXMKbWVsb2RpYQptZW5pbmdlCm1lbm8KbWVuc29sYQptZXJjdXJpbwptZXJlbmRhCm1lcmxvCm1lc2NoaW5vCm1lc2UKbWVzc2VyZQptZXN0b2xvCm1ldGFsbG8KbWV0b2RvCm1ldHRlcmUKbWlhZ29sYXJlCm1pY2EKbWljZWxpbwptaWNoZWxlCm1pY3JvYm8KbWlkb2xsbwptaWVsZQptaWdsaW9yZQptaWxhbm8KbWlsaXRlCm1pbW9zYQptaW5lcmFsZQptaW5pCm1pbm9yZQptaXJpbm8KbWlydGlsbG8KbWlzY2VsYQptaXNzaXZhCm1pc3RvCm1pc3VyYXJlCm1pdGV6emEKbWl0aWdhcmUKbWl0cmEKbWl0dGVudGUKbW5lbW9uaWNvCm1vZGVsbG8KbW9kaWZpY2EKbW9kdWxvCm1vZ2Fubwptb2dpbwptb2xlCm1vbG9zc28KbW9uYXN0ZXJvCm1vbmNvCm1vbmRpbmEKbW9uZXRhcmlvCm1vbmlsZQptb25vdG9ubwptb25zb25lCm1vbnRhdG8KbW9udmlzbwptb3JhCm1vcmRlcmUKbW9yc2ljYXRvCm1vc3Rybwptb3RpdmF0bwptb3Rvc2VnYQptb3R0bwptb3ZlbnphCm1vdmltZW50bwptb3p6bwptdWNjYQptdWNvc2EKbXVmZmEKbXVnaGV0dG8KbXVnbmFpbwptdWxhdHRvCm11bGluZWxsbwptdWx0aXBsbwptdW1taWEKbXVudG8KbXVvdmVyZQptdXJhbGUKbXVzYQptdXNjb2xvCm11c2ljYQptdXRldm9sZQptdXRvCm5hYmFiYm8KbmFmdGEKbmFub21ldHJvCm5hcmNpc28KbmFyaWNlCm5hcnJhdG8KbmFzY2VyZQpuYXN0cmFyZQpuYXR1cmFsZQpuYXV0aWNhCm5hdmlnbGlvCm5lYnVsb3NhCm5lY3Jvc2kKbmVnYXRpdm8KbmVnb3ppbwpuZW1tZW5vCm5lb2ZpdGEKbmVyZXR0bwpuZXJ2bwpuZXNzdW5vCm5ldHR1bm8KbmV1dHJhbGUKbmV2ZQpuZXZyb3RpY28KbmljY2hpYQpuaW5mYQpuaXRpZG8Kbm9iaWxlCm5vY2l2bwpub2RvCm5vbWUKbm9taW5hCm5vcmRpY28Kbm9ybWFsZQpub3J2ZWdlc2UKbm9zdHJhbm8Kbm90YXJlCm5vdGl6aWEKbm90dHVybm8Kbm92ZWxsYQpudWNsZW8KbnVsbGEKbnVtZXJvCm51b3ZvCm51dHJpcmUKbnV2b2xhCm51emlhbGUKb2FzaQpvYmJlZGlyZQpvYmJsaWdvCm9iZWxpc2NvCm9ibGlvCm9ib2xvCm9ic29sZXRvCm9jY2FzaW9uZQpvY2NoaW8Kb2NjaWRlbnRlCm9jY29ycmVyZQpvY2N1bHRhcmUKb2NyYQpvY3VsYXRvCm9kaWVybm8Kb2RvcmFyZQpvZmZlcnRhCm9mZnJpcmUKb2ZmdXNjYXRvCm9nZ2V0dG8Kb2dnaQpvZ251bm8Kb2xhbmRlc2UKb2xmYXR0bwpvbGlhdG8Kb2xpdmEKb2xvZ3JhbW1hCm9sdHJlCm9tYWdnaW8Kb21iZWxpY28Kb21icmEKb21lZ2EKb21pc3Npb25lCm9uZG9zbwpvbmVyZQpvbmljZQpvbm5pdm9ybwpvbm9yZXZvbGUKb250YQpvcGVyYXRvCm9waW5pb25lCm9wcG9zdG8Kb3JhY29sbwpvcmFmbwpvcmRpbmUKb3JlY2NoaW5vCm9yZWZpY2UKb3JmYW5vCm9yZ2FuaWNvCm9yaWdpbmUKb3JpenpvbnRlCm9ybWEKb3JtZWdnaW8Kb3JuYXRpdm8Kb3JvbG9naW8Kb3JyZW5kbwpvcnJpYmlsZQpvcnRlbnNpYQpvcnRpY2EKb3J6YXRhCm9yem8Kb3NhcmUKb3NjdXJhcmUKb3Ntb3NpCm9zcGVkYWxlCm9zcGl0ZQpvc3NhCm9zc2lkYXJlCm9zdGFjb2xvCm9zdGUKb3RpdGUKb3RyZQpvdHRhZ29ubwpvdHRpbW8Kb3R0b2JyZQpvdmFsZQpvdmVzdApvdmlubwpvdmlwYXJvCm92b2NpdG8Kb3Z1bnF1ZQpvdnZpYXJlCm96aW8KcGFjY2hldHRvCnBhY2UKcGFjaWZpY28KcGFkZWxsYQpwYWRyb25lCnBhZXNlCnBhZ2EKcGFnaW5hCnBhbGF6emluYQpwYWxlc2FyZQpwYWxsaWRvCnBhbG8KcGFsdWRlCnBhbmRvcm8KcGFubmVsbG8KcGFvbG8KcGFvbmF6em8KcGFwcmljYQpwYXJhYm9sYQpwYXJjZWxsYQpwYXJlcmUKcGFyZ29sbwpwYXJpCnBhcmxhdG8KcGFyb2xhCnBhcnRpcmUKcGFydmVuemEKcGFyemlhbGUKcGFzc2l2bwpwYXN0aWNjYQpwYXRhY2NhCnBhdG9sb2dpYQpwYXR0dW1lCnBhdm9uZQpwZWNjYXRvCnBlZGFsYXJlCnBlZG9uYWxlCnBlZ2dpbwpwZWxvc28KcGVuYXJlCnBlbmRpY2UKcGVuaXNvbGEKcGVubnV0bwpwZW5vbWJyYQpwZW5zYXJlCnBlbnRvbGEKcGVwZQpwZXBpdGEKcGVyYmVuZQpwZXJjb3JzbwpwZXJkb25hdG8KcGVyZm9yYXJlCnBlcmdhbWVuYQpwZXJpb2RvCnBlcm1lc3NvCnBlcm5vCnBlcnBsZXNzbwpwZXJzdWFzbwpwZXJ0dWdpbwpwZXJ2YXNvCnBlc2F0b3JlCnBlc2lzdGEKcGVzbwpwZXN0aWZlcm8KcGV0YWxvCnBldHRpbmUKcGV0dWxhbnRlCnBlenpvCnBpYWNlcmUKcGlhbnRhCnBpYXR0aW5vCnBpY2Npbm8KcGljb3p6YQpwaWVnYQpwaWV0cmEKcGlmZmVybwpwaWdpYW1hCnBpZ29saW8KcGlncm8KcGlsYQpwaWxpZmVybwpwaWxsb2xhCnBpbG90YQpwaW1wYW50ZQpwaW5ldGEKcGlubmEKcGlub2xvCnBpb2dnaWEKcGlvbWJvCnBpcmFtaWRlCnBpcmV0aWNvCnBpcml0ZQpwaXJvbGlzaQpwaXRvbmUKcGl6emljbwpwbGFjZWJvCnBsYW5hcmUKcGxhc21hCnBsYXRhbm8KcGxlbmFyaW8KcG9jaGV6emEKcG9kZXJvc28KcG9kaXNtbwpwb2VzaWEKcG9nZ2lhcmUKcG9sZW50YQpwb2xpZ29ubwpwb2xsaWNlCnBvbG1vbml0ZQpwb2xwZXR0YQpwb2xzbwpwb2x0cm9uYQpwb2x2ZXJlCnBvbWljZQpwb21vZG9ybwpwb250ZQpwb3BvbG9zbwpwb3JmaWRvCnBvcm9zbwpwb3Jwb3JhCnBvcnJlCnBvcnRhdGEKcG9zYQpwb3NpdGl2bwpwb3NzZXNzbwpwb3N0dWxhdG8KcG90YXNzaW8KcG90ZXJlCnByYW56bwpwcmFzc2kKcHJhdGljYQpwcmVjbHVzbwpwcmVkaWNhCnByZWZpc3NvCnByZWdpYXRvCnByZWxpZXZvCnByZW1lcmUKcHJlbm90YXJlCnByZXBhcmF0bwpwcmVzZW56YQpwcmV0ZXN0bwpwcmV2YWxzbwpwcmltYQpwcmluY2lwZQpwcml2YXRvCnByb2JsZW1hCnByb2N1cmEKcHJvZHVycmUKcHJvZnVtbwpwcm9nZXR0bwpwcm9sdW5nYQpwcm9tZXNzYQpwcm9ub21lCnByb3Bvc3RhCnByb3JvZ2EKcHJvdGVzbwpwcm92YQpwcnVkZW50ZQpwcnVnbmEKcHJ1cml0bwpwc2ljaGUKcHViYmxpY28KcHVkaWNhCnB1Z2lsYXRvCnB1Z25vCnB1bGNlCnB1bGl0bwpwdWxzYW50ZQpwdW50YXJlCnB1cGF6em8KcHVwaWxsYQpwdXJvCnF1YWRybwpxdWFsY29zYQpxdWFzaQpxdWVyZWxhCnF1b3RhCnJhY2NvbHRvCnJhZGRvcHBpbwpyYWRpY2FsZQpyYWR1bmF0bwpyYWZmaWNhCnJhZ2F6em8KcmFnaW9uZQpyYWdubwpyYW1hcnJvCnJhbWluZ28KcmFtbwpyYW5kYWdpbwpyYW50b2xhcmUKcmFwYXRvCnJhcGluYQpyYXBwcmVzbwpyYXNhdHVyYQpyYXNjaGlhdG8KcmFzZW50ZQpyYXNzZWduYQpyYXN0cmVsbG8KcmF0YQpyYXZ2ZWR1dG8KcmVhbGUKcmVjZXBpcmUKcmVjaW50bwpyZWNsdXRhCnJlY29uZGl0bwpyZWN1cGVybwpyZWRkaXRvCnJlZGltZXJlCnJlZ2FsYXRvCnJlZ2lzdHJvCnJlZ29sYQpyZWdyZXNzbwpyZWxhemlvbmUKcmVtYXJlCnJlbW90bwpyZW5uYQpyZXBsaWNhCnJlcHJpbWVyZQpyZXB1dGFyZQpyZXNhCnJlc2lkZW50ZQpyZXNwb25zbwpyZXN0YXVybwpyZXRlCnJldGluYQpyZXRvcmljYQpyZXR0aWZpY2EKcmV2b2NhdG8Kcmlhc3N1bnRvCnJpYmFkaXJlCnJpYmVsbGUKcmlicmV6em8KcmljYXJpY2EKcmljY28KcmljZXZlcmUKcmljaWNsYXRvCnJpY29yZG8KcmljcmVkdXRvCnJpZGljb2xvCnJpZHVycmUKcmlmYXNhcmUKcmlmbGVzc28Kcmlmb3JtYQpyaWZ1Z2lvCnJpZ2FyZQpyaWdldHRhdG8KcmlnaGVsbG8KcmlsYXNzYXRvCnJpbGV2YXRvCnJpbWFuZXJlCnJpbWJhbHpvCnJpbWVkaW8Kcmltb3JjaGlvCnJpbmFzY2l0YQpyaW5jYXJvCnJpbmZvcnpvCnJpbm5vdm8Kcmlub21hdG8Kcmluc2F2aXRvCnJpbnRvY2NvCnJpbnVuY2lhCnJpbnZlbmlyZQpyaXBhcmF0bwpyaXBldHV0bwpyaXBpZW5vCnJpcG9ydGFyZQpyaXByZXNhCnJpcHVsaXJlCnJpc2F0YQpyaXNjaGlvCnJpc2VydmEKcmlzaWJpbGUKcmlzbwpyaXNwZXR0bwpyaXN0b3JvCnJpc3VsdGF0bwpyaXN2b2x0bwpyaXRhcmRvCnJpdGVnbm8Kcml0bWljbwpyaXRyb3ZvCnJpdW5pb25lCnJpdmEKcml2ZXJzbwpyaXZpbmNpdGEKcml2b2x0bwpyaXpvbWEKcm9iYQpyb2JvdGljbwpyb2J1c3RvCnJvY2NpYQpyb2NvCnJvZGFnZ2lvCnJvZGVyZQpyb2RpdG9yZQpyb2dpdG8Kcm9sbGlvCnJvbWFudGljbwpyb21wZXJlCnJvbnppbwpyb3NvbGFyZQpyb3Nwbwpyb3RhbnRlCnJvdG9uZG8Kcm90dWxhCnJvdmVzY2lvCnJ1Yml6em8KcnVicmljYQpydWdhCnJ1bGxpbm8KcnVtaW5lCnJ1bW9yb3NvCnJ1b2xvCnJ1cGUKcnVzc2FyZQpydXN0aWNvCnNhYmF0bwpzYWJiaWFyZQpzYWJvdGF0bwpzYWdvbWEKc2FsYXNzbwpzYWxkYXR1cmEKc2FsZ2VtbWEKc2FsaXZhcmUKc2FsbW9uZQpzYWxvbmUKc2FsdGFyZQpzYWx1dG8Kc2Fsdm8Kc2FwZXJlCnNhcGlkbwpzYXBvcml0bwpzYXJhY2VubwpzYXJjYXNtbwpzYXJ0bwpzYXNzb3NvCnNhdGVsbGl0ZQpzYXRpcmEKc2F0b2xsbwpzYXR1cm5vCnNhdmFuYQpzYXZpbwpzYXppYXRvCnNiYWRpZ2xpbwpzYmFsem8Kc2JhbmNhdG8Kc2JhcnJhCnNiYXR0ZXJlCnNiYXZhcmUKc2JlbmRhcmUKc2JpcmNpYXJlCnNibG9jY2F0bwpzYm9jY2lhdG8Kc2JyaW5hcmUKc2JydWZmb25lCnNidWZmYXJlCnNjYWJyb3NvCnNjYWRlbnphCnNjYWxhCnNjYW1iaWFyZQpzY2FuZGFsbwpzY2Fwb2xhCnNjYXJzbwpzY2F0ZW5hcmUKc2NhdmF0bwpzY2VsdG8Kc2NlbmljbwpzY2V0dHJvCnNjaGVkYQpzY2hpZW5hCnNjaWFycGEKc2NpZW56YQpzY2luZGVyZQpzY2lwcG8Kc2Npcm9wcG8Kc2Npdm9sbwpzY2xlcmFyZQpzY29kZWxsYQpzY29scGl0bwpzY29tcGFydG8Kc2NvbmZvcnRvCnNjb3ByaXJlCnNjb3J0YQpzY29zc29uZQpzY296emVzZQpzY3JpYmEKc2Nyb2xsYXJlCnNjcnV0aW5pbwpzY3VkZXJpYQpzY3VsdG9yZQpzY3VvbGEKc2N1cm8Kc2N1c2FyZQpzZGViaXRhcmUKc2RvZ2FuYXJlCnNlY2NhdHVyYQpzZWNvbmRvCnNlZGFubwpzZWdnaW9sYQpzZWduYWxhdG8Kc2VncmVnYXRvCnNlZ3VpdG8Kc2VsY2lhdG8Kc2VsZXR0aXZvCnNlbGxhCnNlbHZhZ2dpbwpzZW1hZm9ybwpzZW1icmFyZQpzZW1lCnNlbWluYXRvCnNlbXByZQpzZW5zbwpzZW50aXJlCnNlcG9sdG8Kc2VxdWVuemEKc2VyYXRhCnNlcmJhdG8Kc2VyZW5vCnNlcmlvCnNlcnBlbnRlCnNlcnJhZ2xpbwpzZXJ2aXJlCnNlc3RpbmEKc2V0b2xhCnNldHRpbWFuYQpzZmFjZWxvCnNmYWxkYXJlCnNmYW1hdG8Kc2Zhcnpvc28Kc2ZhdGljYXRvCnNmZXJhCnNmaWRhCnNmaWxhdG8Kc2ZpbmdlCnNmb2NhdG8Kc2ZvZGVyYXJlCnNmb2dvCnNmb2x0aXJlCnNmb3J6YXRvCnNmcmF0dG8Kc2ZydXR0YXRvCnNmdWdnaXRvCnNmdW1hcmUKc2Z1c28Kc2dhYmVsbG8Kc2dhcmJhdG8Kc2dvbmZpYXJlCnNnb3JiaW8Kc2dyYXNzYXRvCnNndWFyZG8Kc2liaWxvCnNpY2NvbWUKc2llcnJhCnNpZ2xhCnNpZ25vcmUKc2lsZW56aW8Kc2lsbGFiYQpzaW1ib2xvCnNpbXBhdGljbwpzaW11bGF0bwpzaW5mb25pYQpzaW5nb2xvCnNpbmlzdHJvCnNpbm8Kc2ludGVzaQpzaW51c29pZGUKc2lwYXJpbwpzaXNtYQpzaXN0b2xlCnNpdHVhdG8Kc2xpdHRhCnNsb2dhdHVyYQpzbG92ZW5vCnNtYXJyaXRvCnNtZW1vcmF0bwpzbWVudGl0bwpzbWVyYWxkbwpzbWlsem8Kc21vbnRhcmUKc21vdHRhdG8Kc211c3NhdG8Kc25lbGxpcmUKc25lcnZhdG8Kc25vZG8Kc29iYmFsem8Kc29icmlvCnNvY2NvcnNvCnNvY2lhbGUKc29kYWxlCnNvZmZpdHRvCnNvZ25vCnNvbGRhdG8Kc29sZW5uZQpzb2xpZG8Kc29sbGF6em8Kc29sbwpzb2x1YmlsZQpzb2x2ZW50ZQpzb21hdGljbwpzb21tYQpzb25kYQpzb25ldHRvCnNvbm5pZmVybwpzb3BpcmUKc29wcGVzbwpzb3ByYQpzb3JnZXJlCnNvcnBhc3NvCnNvcnJpc28Kc29yc28Kc29ydGVnZ2lvCnNvcnZvbGF0bwpzb3NwaXJvCnNvc3RhCnNvdHRpbGUKc3BhZGEKc3BhbGxhCnNwYXJnZXJlCnNwYXRvbGEKc3BhdmVudG8Kc3BhenpvbGEKc3BlY2llCnNwZWRpcmUKc3BlZ25lcmUKc3BlbGF0dXJhCnNwZXJhbnphCnNwZXNzb3JlCnNwZXR0cmFsZQpzcGV6emF0bwpzcGlhCnNwaWdvbG9zbwpzcGlsbGF0bwpzcGlub3NvCnNwaXJhbGUKc3BsZW5kaWRvCnNwb3J0aXZvCnNwb3NvCnNwcmFuZ2EKc3ByZWNhcmUKc3Byb25hdG8Kc3BydXp6bwpzcHVudGlubwpzcXVpbGxvCnNyYWRpY2FyZQpzcm90b2xhdG8Kc3RhYmlsZQpzdGFjY28Kc3RhZmZhCnN0YWduYXJlCnN0YW1wYXRvCnN0YW50aW8Kc3Rhcm51dG8Kc3Rhc2VyYQpzdGF0dXRvCnN0ZWxvCnN0ZXBwYQpzdGVyem8Kc3RpbGV0dG8Kc3RpbWEKc3RpcnBlCnN0aXZhbGUKc3Rpenpvc28Kc3RvbmF0bwpzdG9yaWNvCnN0cmFwcG8Kc3RyZWdhdG8Kc3RyaWR1bG8Kc3Ryb3p6YXJlCnN0cnV0dG8Kc3R1Y2NhcmUKc3R1Zm8Kc3R1cGVuZG8Kc3ViZW50cm8Kc3VjY29zbwpzdWRvcmUKc3VnZ2VyaXRvCnN1Z28Kc3VsdGFubwpzdW9uYXJlCnN1cGVyYm8Kc3VwcG9ydG8Kc3VyZ2VsYXRvCnN1cnJvZ2F0bwpzdXNzdXJybwpzdXR1cmEKc3ZhZ2FyZQpzdmVkZXNlCnN2ZWdsaW8Kc3ZlbGFyZQpzdmVudXRvCnN2ZXppYQpzdmlsdXBwbwpzdmlzdGEKc3ZpenplcmEKc3ZvbHRhCnN2dW90YXJlCnRhYmFjY28KdGFidWxhdG8KdGFjY2lhcmUKdGFjaXR1cm5vCnRhbGUKdGFsaXNtYW5vCnRhbXBvbmUKdGFubmlubwp0YXJhCnRhcmRpdm8KdGFyZ2F0bwp0YXJpZmZhCnRhcnBhcmUKdGFydGFydWdhCnRhc3RvCnRhdHRpY28KdGF2ZXJuYQp0YXZvbGF0YQp0YXp6YQp0ZWNhCnRlY25pY28KdGVsZWZvbm8KdGVtZXJhcmlvCnRlbXBvCnRlbXV0bwp0ZW5kb25lCnRlbmVybwp0ZW5zaW9uZQp0ZW50YWNvbG8KdGVvcmVtYQp0ZXJtZQp0ZXJyYXp6bwp0ZXJ6ZXR0bwp0ZXNpCnRlc3NlcmF0bwp0ZXN0YXRvCnRldHJvCnRldHRvaWEKdGlmYXJlCnRpZ2VsbGEKdGltYnJvCnRpbnRvCnRpcGljbwp0aXBvZ3JhZm8KdGlyYWdnaW8KdGlybwp0aXRhbmlvCnRpdG9sbwp0aXR1YmFudGUKdGl6aW8KdGl6em9uZQp0b2NjYXJlCnRvbGxlcmFyZQp0b2x0bwp0b21ib2xhCnRvbW8KdG9uZm8KdG9uc2lsbGEKdG9wYXppbwp0b3BvbG9naWEKdG9wcGEKdG9yYmEKdG9ybmFyZQp0b3Jyb25lCnRvcnRvcmEKdG9zY2Fubwp0b3NzaXJlCnRvc3RhdHVyYQp0b3Rhbm8KdHJhYm9jY28KdHJhY2hlYQp0cmFmaWxhCnRyYWdlZGlhCnRyYWxjaW8KdHJhbW9udG8KdHJhbnNpdG8KdHJhcGFubwp0cmFycmUKdHJhc2xvY28KdHJhdHRhdG8KdHJhdmUKdHJlY2NpYQp0cmVtb2xpbwp0cmVzcG9sbwp0cmlidXRvCnRyaWNoZWNvCnRyaWZvZ2xpbwp0cmlsbG8KdHJpbmNlYQp0cmlvCnRyaXN0ZXp6YQp0cml0dXJhdG8KdHJpdmVsbGEKdHJvbWJhCnRyb25vCnRyb3Bwbwp0cm90dG9sYQp0cm92YXJlCnRydWNjYXRvCnR1YmF0dXJhCnR1ZmZhdG8KdHVsaXBhbm8KdHVtdWx0bwp0dW5pc2lhCnR1cmJhcmUKdHVyY2hpbm8KdHV0YQp0dXRlbGEKdWJpY2F0bwp1Y2NlbGxvCnVjY2lzb3JlCnVkaXJlCnVkaXRpdm8KdWZmYQp1ZmZpY2lvCnVndWFsZQp1bGlzc2UKdWx0aW1hdG8KdW1hbm8KdW1pbGUKdW1vcmlzbW8KdW5jaW5ldHRvCnVuZ2VyZQp1bmdoZXJlc2UKdW5pY29ybm8KdW5pZmljYXRvCnVuaXNvbm8KdW5pdGFyaW8KdW50ZQp1b3ZvCnVwdXBhCnVyYWdhbm8KdXJnZW56YQp1cmxvCnVzYW56YQp1c2F0bwp1c2NpdG8KdXNpZ25vbG8KdXN1cmFpbwp1dGVuc2lsZQp1dGlsaXp6bwp1dG9waWEKdmFjYW50ZQp2YWNjaW5hdG8KdmFnYWJvbmRvCnZhZ2xpYXRvCnZhbGFuZ2EKdmFsZ28KdmFsaWNvCnZhbGxldHRhCnZhbG9yb3NvCnZhbHV0YXJlCnZhbHZvbGEKdmFtcGF0YQp2YW5nYXJlCnZhbml0b3NvCnZhbm8KdmFudGFnZ2lvCnZhbnZlcmEKdmFwb3JlCnZhcmFubwp2YXJjYXRvCnZhcmlhbnRlCnZhc2NhCnZlZGV0dGEKdmVkb3ZhCnZlZHV0bwp2ZWdldGFsZQp2ZWljb2xvCnZlbGNybwp2ZWxpbmEKdmVsbHV0bwp2ZWxvY2UKdmVuYXRvCnZlbmRlbW1pYQp2ZW50bwp2ZXJhY2UKdmVyYmFsZQp2ZXJnb2duYQp2ZXJpZmljYQp2ZXJvCnZlcnJ1Y2EKdmVydGljYWxlCnZlc2NpY2EKdmVzc2lsbG8KdmVzdGFsZQp2ZXRlcmFubwp2ZXRyaW5hCnZldHVzdG8KdmlhbmRhbnRlCnZpYnJhbnRlCnZpY2VuZGEKdmljaGluZ28KdmljaW5hbnphCnZpZGltYXJlCnZpZ2lsaWEKdmlnbmV0bwp2aWdvcmUKdmlsZQp2aWxsYW5vCnZpbWluaQp2aW5jaXRvcmUKdmlvbGEKdmlwZXJhCnZpcmdvbGEKdmlyb2xvZ28KdmlydWxlbnRvCnZpc2Nvc28KdmlzaW9uZQp2aXNwbwp2aXNzdXRvCnZpc3VyYQp2aXRhCnZpdGVsbG8Kdml0dGltYQp2aXZhbmRhCnZpdmlkbwp2aXppYXJlCnZvY2UKdm9nYQp2b2xhdGlsZQp2b2xlcmUKdm9scGUKdm9yYWdpbmUKdnVsY2Fubwp6YW1wb2duYQp6YW5uYQp6YXBwYXRvCnphdHRlcmEKemF2b3JyYQp6ZWZpcm8KemVsYW50ZQp6ZWxvCnplbnplcm8KemVyYmlubwp6aWJldHRvCnppbmNvCnppcmNvbmUKeml0dG8Kem9sbGEKem90aWNvCnp1Y2NoZXJvCnp1Zm9sbwp6dWx1Cnp1cHBhYC5zcGxpdCgiXG4iKTsKCiAgLy8gbm9kZV9tb2R1bGVzL0BzY3VyZS9iaXAzOS9lc20vd29yZGxpc3RzL2phcGFuZXNlLmpzCiAgdmFyIHdvcmRsaXN0NSA9IGBcdTMwNDJcdTMwNDRcdTMwNTNcdTMwNEZcdTMwNTdcdTMwOTMKXHUzMDQyXHUzMDQ0XHUzMDU1XHUzMDY0Clx1MzA0Mlx1MzA0NFx1MzA1Rlx1MzA5OQpcdTMwNDJcdTMwNEFcdTMwNURcdTMwOTlcdTMwODkKXHUzMDQyXHUzMDRCXHUzMDYxXHUzMDgzXHUzMDkzClx1MzA0Mlx1MzA0RFx1MzA4QgpcdTMwNDJcdTMwNTFcdTMwNEJcdTMwOTlcdTMwNUYKXHUzMDQyXHUzMDUxXHUzMDhCClx1MzA0Mlx1MzA1M1x1MzA0Qlx1MzA5OVx1MzA4Q1x1MzA4QgpcdTMwNDJcdTMwNTVcdTMwNDQKXHUzMDQyXHUzMDU1XHUzMDcyClx1MzA0Mlx1MzA1N1x1MzA0Mlx1MzA2OApcdTMwNDJcdTMwNTdcdTMwOTlcdTMwOEZcdTMwNDYKXHUzMDQyXHUzMDU5XHUzMDk5XHUzMDRCXHUzMDhCClx1MzA0Mlx1MzA1OVx1MzA5OVx1MzA0RApcdTMwNDJcdTMwNURcdTMwNzVcdTMwOTkKXHUzMDQyXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA0Mlx1MzA1Rlx1MzA1Rlx1MzA4MVx1MzA4QgpcdTMwNDJcdTMwNUZcdTMwOEFcdTMwN0VcdTMwNDgKXHUzMDQyXHUzMDVGXHUzMDhCClx1MzA0Mlx1MzA2NFx1MzA0NApcdTMwNDJcdTMwNjRcdTMwNEJcdTMwNDYKXHUzMDQyXHUzMDYzXHUzMDU3XHUzMDg1XHUzMDRGClx1MzA0Mlx1MzA2NFx1MzA3RVx1MzA4QQpcdTMwNDJcdTMwNjRcdTMwODFcdTMwOEIKXHUzMDQyXHUzMDY2XHUzMDZBClx1MzA0Mlx1MzA2Nlx1MzA2Rlx1MzA3RVx1MzA4QgpcdTMwNDJcdTMwNzJcdTMwOEIKXHUzMDQyXHUzMDc1XHUzMDk5XHUzMDg5Clx1MzA0Mlx1MzA3NVx1MzA5OVx1MzA4QgpcdTMwNDJcdTMwNzVcdTMwOENcdTMwOEIKXHUzMDQyXHUzMDdFXHUzMDQ0Clx1MzA0Mlx1MzA3RVx1MzA2OFx1MzA5OQpcdTMwNDJcdTMwN0VcdTMwODRcdTMwNEJcdTMwNTkKXHUzMDQyXHUzMDdFXHUzMDhBClx1MzA0Mlx1MzA3Rlx1MzA4Mlx1MzA2RQpcdTMwNDJcdTMwODFcdTMwOEFcdTMwNEIKXHUzMDQyXHUzMDg0XHUzMDdFXHUzMDhCClx1MzA0Mlx1MzA4Nlx1MzA4MApcdTMwNDJcdTMwODlcdTMwNDRcdTMwNEZcdTMwOTlcdTMwN0UKXHUzMDQyXHUzMDg5XHUzMDU3Clx1MzA0Mlx1MzA4OVx1MzA1OVx1MzA1N1x1MzA5OQpcdTMwNDJcdTMwODlcdTMwNUZcdTMwODFcdTMwOEIKXHUzMDQyXHUzMDg5XHUzMDg2XHUzMDhCClx1MzA0Mlx1MzA4OVx1MzA4Rlx1MzA1OQpcdTMwNDJcdTMwOEFcdTMwNEJcdTMwOTlcdTMwNjhcdTMwNDYKXHUzMDQyXHUzMDhGXHUzMDVCXHUzMDhCClx1MzA0Mlx1MzA4Rlx1MzA2Nlx1MzA4QgpcdTMwNDJcdTMwOTNcdTMwNDQKXHUzMDQyXHUzMDkzXHUzMDRCXHUzMDk5XHUzMDQ0Clx1MzA0Mlx1MzA5M1x1MzA1MwpcdTMwNDJcdTMwOTNcdTMwNUJcdTMwOTlcdTMwOTMKXHUzMDQyXHUzMDkzXHUzMDY2XHUzMDQ0Clx1MzA0Mlx1MzA5M1x1MzA2QVx1MzA0NApcdTMwNDJcdTMwOTNcdTMwN0VcdTMwOEEKXHUzMDQ0XHUzMDQ0XHUzMDVGXHUzMDk5XHUzMDU5Clx1MzA0NFx1MzA0QVx1MzA5MwpcdTMwNDRcdTMwNEJcdTMwOTlcdTMwNDQKXHUzMDQ0XHUzMDRCXHUzMDk5XHUzMDRGClx1MzA0NFx1MzA0RFx1MzA0QVx1MzA0NApcdTMwNDRcdTMwNERcdTMwNkFcdTMwOEEKXHUzMDQ0XHUzMDREXHUzMDgyXHUzMDZFClx1MzA0NFx1MzA0RFx1MzA4QgpcdTMwNDRcdTMwNEZcdTMwNTdcdTMwOTkKXHUzMDQ0XHUzMDRGXHUzMDc1XHUzMDk5XHUzMDkzClx1MzA0NFx1MzA1MVx1MzA2Rlx1MzA5OVx1MzA2QQpcdTMwNDRcdTMwNTFcdTMwOTMKXHUzMDQ0XHUzMDUzXHUzMDQ2Clx1MzA0NFx1MzA1M1x1MzA0RgpcdTMwNDRcdTMwNTNcdTMwNjQKXHUzMDQ0XHUzMDU1XHUzMDdFXHUzMDU3XHUzMDQ0Clx1MzA0NFx1MzA1NVx1MzA5MwpcdTMwNDRcdTMwNTdcdTMwNEQKXHUzMDQ0XHUzMDU3XHUzMDk5XHUzMDg1XHUzMDQ2Clx1MzA0NFx1MzA1N1x1MzA5OVx1MzA4N1x1MzA0NgpcdTMwNDRcdTMwNTdcdTMwOTlcdTMwOEZcdTMwOEIKXHUzMDQ0XHUzMDU5XHUzMDk5XHUzMDdGClx1MzA0NFx1MzA1OVx1MzA5OVx1MzA4QwpcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDQ0XHUzMDVCXHUzMDQ4XHUzMDcyXHUzMDk5Clx1MzA0NFx1MzA1Qlx1MzA0Qlx1MzA0NApcdTMwNDRcdTMwNUJcdTMwNEQKXHUzMDQ0XHUzMDVCXHUzMDk5XHUzMDkzClx1MzA0NFx1MzA1RFx1MzA0Nlx1MzA4RFx1MzA0NgpcdTMwNDRcdTMwNURcdTMwNEJcdTMwOTlcdTMwNTdcdTMwNDQKXHUzMDQ0XHUzMDVGXHUzMDk5XHUzMDQ0Clx1MzA0NFx1MzA1Rlx1MzA5OVx1MzA0RgpcdTMwNDRcdTMwNUZcdTMwNTlcdTMwOTlcdTMwODkKXHUzMDQ0XHUzMDVGXHUzMDdGClx1MzA0NFx1MzA1Rlx1MzA4QVx1MzA0MgpcdTMwNDRcdTMwNjFcdTMwNEFcdTMwNDYKXHUzMDQ0XHUzMDYxXHUzMDU3XHUzMDk5Clx1MzA0NFx1MzA2MVx1MzA2OFx1MzA5OQpcdTMwNDRcdTMwNjFcdTMwNkZcdTMwOTkKXHUzMDQ0XHUzMDYxXHUzMDc1XHUzMDk5Clx1MzA0NFx1MzA2MVx1MzA4QVx1MzA4NVx1MzA0NgpcdTMwNDRcdTMwNjRcdTMwNEIKXHUzMDQ0XHUzMDYzXHUzMDU3XHUzMDg1XHUzMDkzClx1MzA0NFx1MzA2M1x1MzA1Qlx1MzA0NApcdTMwNDRcdTMwNjNcdTMwNURcdTMwNDYKXHUzMDQ0XHUzMDYzXHUzMDVGXHUzMDkzClx1MzA0NFx1MzA2M1x1MzA2MQpcdTMwNDRcdTMwNjNcdTMwNjZcdTMwNDQKXHUzMDQ0XHUzMDYzXHUzMDdCXHUzMDlBXHUzMDQ2Clx1MzA0NFx1MzA2Nlx1MzA1NVx1MzA5OQpcdTMwNDRcdTMwNjZcdTMwOTMKXHUzMDQ0XHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA0NFx1MzA2OFx1MzA1MwpcdTMwNDRcdTMwNkFcdTMwNDQKXHUzMDQ0XHUzMDZBXHUzMDRCClx1MzA0NFx1MzA2RFx1MzA4MFx1MzA4QQpcdTMwNDRcdTMwNkVcdTMwNjEKXHUzMDQ0XHUzMDZFXHUzMDhCClx1MzA0NFx1MzA2Rlx1MzA2NApcdTMwNDRcdTMwNkZcdTMwOTlcdTMwOEIKXHUzMDQ0XHUzMDZGXHUzMDkzClx1MzA0NFx1MzA3Mlx1MzA5OVx1MzA0RApcdTMwNDRcdTMwNzJcdTMwOTMKXHUzMDQ0XHUzMDc1XHUzMDRGClx1MzA0NFx1MzA3OFx1MzA5MwpcdTMwNDRcdTMwN0JcdTMwNDYKXHUzMDQ0XHUzMDdGXHUzMDkzClx1MzA0NFx1MzA4Mlx1MzA0Nlx1MzA2OApcdTMwNDRcdTMwODJcdTMwNUZcdTMwOEMKXHUzMDQ0XHUzMDgyXHUzMDhBClx1MzA0NFx1MzA4NFx1MzA0Qlx1MzA5OVx1MzA4QgpcdTMwNDRcdTMwODRcdTMwNTkKXHUzMDQ0XHUzMDg4XHUzMDRCXHUzMDkzClx1MzA0NFx1MzA4OFx1MzA0RgpcdTMwNDRcdTMwODlcdTMwNDQKXHUzMDQ0XHUzMDg5XHUzMDU5XHUzMDY4Clx1MzA0NFx1MzA4QVx1MzA0Rlx1MzA5OVx1MzA2MQpcdTMwNDRcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDQ0XHUzMDhDXHUzMDQ0Clx1MzA0NFx1MzA4Q1x1MzA4Mlx1MzA2RQpcdTMwNDRcdTMwOENcdTMwOEIKXHUzMDQ0XHUzMDhEXHUzMDQ4XHUzMDkzXHUzMDcyXHUzMDlBXHUzMDY0Clx1MzA0NFx1MzA4Rlx1MzA0NApcdTMwNDRcdTMwOEZcdTMwNDYKXHUzMDQ0XHUzMDhGXHUzMDRCXHUzMDkzClx1MzA0NFx1MzA4Rlx1MzA2Rlx1MzA5OQpcdTMwNDRcdTMwOEZcdTMwODZcdTMwOEIKXHUzMDQ0XHUzMDkzXHUzMDUxXHUzMDk5XHUzMDkzXHUzMDdFXHUzMDgxClx1MzA0NFx1MzA5M1x1MzA1NVx1MzA2NApcdTMwNDRcdTMwOTNcdTMwNTdcdTMwODdcdTMwNDYKXHUzMDQ0XHUzMDkzXHUzMDg4XHUzMDQ2Clx1MzA0Nlx1MzA0OFx1MzA0RApcdTMwNDZcdTMwNDhcdTMwOEIKXHUzMDQ2XHUzMDRBXHUzMDU1XHUzMDk5Clx1MzA0Nlx1MzA0Qlx1MzA5OVx1MzA0NApcdTMwNDZcdTMwNEJcdTMwNzVcdTMwOTkKXHUzMDQ2XHUzMDRCXHUzMDc4XHUzMDk5XHUzMDhCClx1MzA0Nlx1MzA0RFx1MzA4RgpcdTMwNDZcdTMwNEZcdTMwODlcdTMwNDRcdTMwNkEKXHUzMDQ2XHUzMDRGXHUzMDhDXHUzMDhDClx1MzA0Nlx1MzA1MVx1MzA1Rlx1MzA3RVx1MzA4Rlx1MzA4QgpcdTMwNDZcdTMwNTFcdTMwNjRcdTMwNTEKXHUzMDQ2XHUzMDUxXHUzMDY4XHUzMDhCClx1MzA0Nlx1MzA1MVx1MzA4Mlx1MzA2NApcdTMwNDZcdTMwNTFcdTMwOEIKXHUzMDQ2XHUzMDUzXHUzMDk5XHUzMDRCXHUzMDU5Clx1MzA0Nlx1MzA1M1x1MzA5OVx1MzA0RgpcdTMwNDZcdTMwNTNcdTMwOTMKXHUzMDQ2XHUzMDU1XHUzMDREXHUzMDk5Clx1MzA0Nlx1MzA1N1x1MzA2QVx1MzA0NgpcdTMwNDZcdTMwNTdcdTMwOERcdTMwNEJcdTMwOTlcdTMwN0YKXHUzMDQ2XHUzMDU5XHUzMDQ0Clx1MzA0Nlx1MzA1OVx1MzA0RFx1MzA5OQpcdTMwNDZcdTMwNTlcdTMwNEZcdTMwOTlcdTMwODlcdTMwNDQKXHUzMDQ2XHUzMDU5XHUzMDgxXHUzMDhCClx1MzA0Nlx1MzA1Qlx1MzA2NApcdTMwNDZcdTMwNjFcdTMwNDJcdTMwOEZcdTMwNUIKXHUzMDQ2XHUzMDYxXHUzMDRCXHUzMDk5XHUzMDhGClx1MzA0Nlx1MzA2MVx1MzA0RApcdTMwNDZcdTMwNjFcdTMwODVcdTMwNDYKXHUzMDQ2XHUzMDYzXHUzMDRCXHUzMDhBClx1MzA0Nlx1MzA2NFx1MzA0Rlx1MzA1N1x1MzA0NApcdTMwNDZcdTMwNjNcdTMwNUZcdTMwNDhcdTMwOEIKXHUzMDQ2XHUzMDY0XHUzMDhCClx1MzA0Nlx1MzA2OFx1MzA5OVx1MzA5MwpcdTMwNDZcdTMwNkFcdTMwNERcdTMwOTkKXHUzMDQ2XHUzMDZBXHUzMDU3XHUzMDk5Clx1MzA0Nlx1MzA2QVx1MzA1OVx1MzA5OVx1MzA0RgpcdTMwNDZcdTMwNkFcdTMwOEIKXHUzMDQ2XHUzMDZEXHUzMDhCClx1MzA0Nlx1MzA2RVx1MzA0NgpcdTMwNDZcdTMwNzVcdTMwOTlcdTMwNTFcdTMwOTkKXHUzMDQ2XHUzMDc1XHUzMDk5XHUzMDUzXHUzMDk5XHUzMDQ4Clx1MzA0Nlx1MzA3RVx1MzA4Q1x1MzA4QgpcdTMwNDZcdTMwODFcdTMwOEIKXHUzMDQ2XHUzMDgyXHUzMDQ2Clx1MzA0Nlx1MzA4NFx1MzA3RVx1MzA0NgpcdTMwNDZcdTMwODhcdTMwNEYKXHUzMDQ2XHUzMDg5XHUzMDRCXHUzMDk5XHUzMDQ4XHUzMDU5Clx1MzA0Nlx1MzA4OVx1MzA0Rlx1MzA5OVx1MzA2MQpcdTMwNDZcdTMwODlcdTMwNkFcdTMwNDQKXHUzMDQ2XHUzMDhBXHUzMDQyXHUzMDUxXHUzMDk5Clx1MzA0Nlx1MzA4QVx1MzA0RFx1MzA4QwpcdTMwNDZcdTMwOEJcdTMwNTVcdTMwNDQKXHUzMDQ2XHUzMDhDXHUzMDU3XHUzMDQ0Clx1MzA0Nlx1MzA4Q1x1MzA4Nlx1MzA0RApcdTMwNDZcdTMwOENcdTMwOEIKXHUzMDQ2XHUzMDhEXHUzMDUzClx1MzA0Nlx1MzA4Rlx1MzA0RApcdTMwNDZcdTMwOEZcdTMwNTUKXHUzMDQ2XHUzMDkzXHUzMDUzXHUzMDQ2Clx1MzA0Nlx1MzA5M1x1MzA2MVx1MzA5MwpcdTMwNDZcdTMwOTNcdTMwNjZcdTMwOTMKXHUzMDQ2XHUzMDkzXHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA0OFx1MzA0NFx1MzA0OFx1MzA5MwpcdTMwNDhcdTMwNDRcdTMwNEJcdTMwOTkKXHUzMDQ4XHUzMDQ0XHUzMDREXHUzMDg3XHUzMDQ2Clx1MzA0OFx1MzA0NFx1MzA1M1x1MzA5OQpcdTMwNDhcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDQ4XHUzMDQ0XHUzMDc1XHUzMDk5XHUzMDkzClx1MzA0OFx1MzA0NFx1MzA4OFx1MzA0NgpcdTMwNDhcdTMwNDRcdTMwOEYKXHUzMDQ4XHUzMDRBXHUzMDhBClx1MzA0OFx1MzA0Qlx1MzA5OVx1MzA0QQpcdTMwNDhcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDQ4XHUzMDREXHUzMDVGXHUzMDQ0Clx1MzA0OFx1MzA0Rlx1MzA1Qlx1MzA4QgpcdTMwNDhcdTMwNTdcdTMwODNcdTMwNEYKXHUzMDQ4XHUzMDU5XHUzMDY2Clx1MzA0OFx1MzA2NFx1MzA4OVx1MzA5MwpcdTMwNDhcdTMwNkVcdTMwNEZcdTMwOTkKXHUzMDQ4XHUzMDdCXHUzMDQ2XHUzMDdFXHUzMDREClx1MzA0OFx1MzA3Qlx1MzA5MwpcdTMwNDhcdTMwN0VcdTMwNEQKXHUzMDQ4XHUzMDgyXHUzMDU3XHUzMDk5Clx1MzA0OFx1MzA4Mlx1MzA2RQpcdTMwNDhcdTMwODlcdTMwNDQKXHUzMDQ4XHUzMDg5XHUzMDc1XHUzMDk5Clx1MzA0OFx1MzA4QVx1MzA0MgpcdTMwNDhcdTMwOTNcdTMwNDhcdTMwOTMKXHUzMDQ4XHUzMDkzXHUzMDRCXHUzMDQ0Clx1MzA0OFx1MzA5M1x1MzA0RFx1MzA5OQpcdTMwNDhcdTMwOTNcdTMwNTFcdTMwOTlcdTMwNEQKXHUzMDQ4XHUzMDkzXHUzMDU3XHUzMDg1XHUzMDQ2Clx1MzA0OFx1MzA5M1x1MzA1Qlx1MzA5OVx1MzA2NApcdTMwNDhcdTMwOTNcdTMwNURcdTMwNEYKXHUzMDQ4XHUzMDkzXHUzMDYxXHUzMDg3XHUzMDQ2Clx1MzA0OFx1MzA5M1x1MzA2OFx1MzA2NApcdTMwNEFcdTMwNDRcdTMwNEJcdTMwNTFcdTMwOEIKXHUzMDRBXHUzMDQ0XHUzMDUzXHUzMDU5Clx1MzA0QVx1MzA0NFx1MzA1N1x1MzA0NApcdTMwNEFcdTMwNDRcdTMwNjRcdTMwNEYKXHUzMDRBXHUzMDQ2XHUzMDQ4XHUzMDkzClx1MzA0QVx1MzA0Nlx1MzA1NVx1MzA3RQpcdTMwNEFcdTMwNDZcdTMwNTdcdTMwOTkKXHUzMDRBXHUzMDQ2XHUzMDVCXHUzMDY0Clx1MzA0QVx1MzA0Nlx1MzA1Rlx1MzA0NApcdTMwNEFcdTMwNDZcdTMwNzVcdTMwNEYKXHUzMDRBXHUzMDQ2XHUzMDc4XHUzMDk5XHUzMDQ0Clx1MzA0QVx1MzA0Nlx1MzA4OFx1MzA0NgpcdTMwNEFcdTMwNDhcdTMwOEIKXHUzMDRBXHUzMDRBXHUzMDQ0Clx1MzA0QVx1MzA0QVx1MzA0NgpcdTMwNEFcdTMwNEFcdTMwNjhcdTMwOTlcdTMwNEFcdTMwOEEKXHUzMDRBXHUzMDRBXHUzMDg0Clx1MzA0QVx1MzA0QVx1MzA4OFx1MzA1RApcdTMwNEFcdTMwNEJcdTMwNDhcdTMwOEEKXHUzMDRBXHUzMDRCXHUzMDU5XHUzMDk5Clx1MzA0QVx1MzA0Qlx1MzA5OVx1MzA4MApcdTMwNEFcdTMwNEJcdTMwOEZcdTMwOEEKXHUzMDRBXHUzMDREXHUzMDk5XHUzMDZBXHUzMDQ2Clx1MzA0QVx1MzA0RFx1MzA4QgpcdTMwNEFcdTMwNEZcdTMwNTVcdTMwN0UKXHUzMDRBXHUzMDRGXHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA0QVx1MzA0Rlx1MzA4QVx1MzA0Qlx1MzA5OVx1MzA2QQpcdTMwNEFcdTMwNEZcdTMwOEIKXHUzMDRBXHUzMDRGXHUzMDhDXHUzMDhCClx1MzA0QVx1MzA1M1x1MzA1OQpcdTMwNEFcdTMwNTNcdTMwNkFcdTMwNDYKXHUzMDRBXHUzMDUzXHUzMDhCClx1MzA0QVx1MzA1NVx1MzA0OFx1MzA4QgpcdTMwNEFcdTMwNTVcdTMwNkFcdTMwNDQKXHUzMDRBXHUzMDU1XHUzMDgxXHUzMDhCClx1MzA0QVx1MzA1N1x1MzA0NFx1MzA4QwpcdTMwNEFcdTMwNTdcdTMwNDhcdTMwOEIKXHUzMDRBXHUzMDU3XHUzMDk5XHUzMDREXHUzMDk5Clx1MzA0QVx1MzA1N1x1MzA5OVx1MzA1NVx1MzA5MwpcdTMwNEFcdTMwNTdcdTMwODNcdTMwOEMKXHUzMDRBXHUzMDVEXHUzMDg5XHUzMDRGClx1MzA0QVx1MzA1RFx1MzA4Rlx1MzA4QgpcdTMwNEFcdTMwNUZcdTMwNEJcdTMwOTlcdTMwNDQKXHUzMDRBXHUzMDVGXHUzMDRGClx1MzA0QVx1MzA1Rlx1MzA5OVx1MzA4NFx1MzA0QgpcdTMwNEFcdTMwNjFcdTMwNjRcdTMwNEYKXHUzMDRBXHUzMDYzXHUzMDY4Clx1MzA0QVx1MzA2NFx1MzA4QQpcdTMwNEFcdTMwNjZcdTMwOTlcdTMwNEJcdTMwNTEKXHUzMDRBXHUzMDY4XHUzMDU3XHUzMDgyXHUzMDZFClx1MzA0QVx1MzA2OFx1MzA2QVx1MzA1N1x1MzA0NApcdTMwNEFcdTMwNjhcdTMwOTlcdTMwOEEKXHUzMDRBXHUzMDY4XHUzMDk5XHUzMDhEXHUzMDRCXHUzMDU5Clx1MzA0QVx1MzA2Rlx1MzA5OVx1MzA1NVx1MzA5MwpcdTMwNEFcdTMwN0VcdTMwNDRcdTMwOEEKXHUzMDRBXHUzMDgxXHUzMDY2XHUzMDk5XHUzMDY4XHUzMDQ2Clx1MzA0QVx1MzA4Mlx1MzA0NFx1MzA2Nlx1MzA5OQpcdTMwNEFcdTMwODJcdTMwNDYKXHUzMDRBXHUzMDgyXHUzMDVGXHUzMDQ0Clx1MzA0QVx1MzA4Mlx1MzA2MVx1MzA4MwpcdTMwNEFcdTMwODRcdTMwNjQKXHUzMDRBXHUzMDg0XHUzMDg2XHUzMDcyXHUzMDk5Clx1MzA0QVx1MzA4OFx1MzA3Qlx1MzA5OVx1MzA1OQpcdTMwNEFcdTMwODlcdTMwOTNcdTMwNUZcdTMwOTkKXHUzMDRBXHUzMDhEXHUzMDU5Clx1MzA0QVx1MzA5M1x1MzA0Qlx1MzA5OVx1MzA0RgpcdTMwNEFcdTMwOTNcdTMwNTFcdTMwNDQKXHUzMDRBXHUzMDkzXHUzMDU3XHUzMDgzClx1MzA0QVx1MzA5M1x1MzA1Qlx1MzA5MwpcdTMwNEFcdTMwOTNcdTMwNUZcdTMwOTlcdTMwOTMKXHUzMDRBXHUzMDkzXHUzMDYxXHUzMDg1XHUzMDQ2Clx1MzA0QVx1MzA5M1x1MzA2OFx1MzA5OVx1MzA1MVx1MzA0NApcdTMwNEJcdTMwNDJcdTMwNjQKXHUzMDRCXHUzMDQ0XHUzMDRCXHUzMDk5Clx1MzA0Qlx1MzA5OVx1MzA0NFx1MzA0RApcdTMwNEJcdTMwOTlcdTMwNDRcdTMwNTFcdTMwOTMKXHUzMDRCXHUzMDk5XHUzMDQ0XHUzMDUzXHUzMDQ2Clx1MzA0Qlx1MzA0NFx1MzA1NVx1MzA2NApcdTMwNEJcdTMwNDRcdTMwNTdcdTMwODMKXHUzMDRCXHUzMDQ0XHUzMDU5XHUzMDQ0XHUzMDg4XHUzMDRGClx1MzA0Qlx1MzA0NFx1MzA1Qlx1MzA5OVx1MzA5MwpcdTMwNEJcdTMwNDRcdTMwNURcdTMwOTlcdTMwNDZcdTMwNjhcdTMwOTkKXHUzMDRCXHUzMDQ0XHUzMDY0XHUzMDQ2Clx1MzA0Qlx1MzA0NFx1MzA2Nlx1MzA5MwpcdTMwNEJcdTMwNDRcdTMwNjhcdTMwNDYKXHUzMDRCXHUzMDQ0XHUzMDc1XHUzMDRGClx1MzA0Qlx1MzA5OVx1MzA0NFx1MzA3OFx1MzA0RApcdTMwNEJcdTMwNDRcdTMwN0JcdTMwNDYKXHUzMDRCXHUzMDQ0XHUzMDg4XHUzMDQ2Clx1MzA0Qlx1MzA5OVx1MzA0NFx1MzA4OVx1MzA0NApcdTMwNEJcdTMwNDRcdTMwOEYKXHUzMDRCXHUzMDQ4XHUzMDhCClx1MzA0Qlx1MzA0QVx1MzA4QQpcdTMwNEJcdTMwNEJcdTMwNDhcdTMwOEIKXHUzMDRCXHUzMDRCXHUzMDk5XHUzMDRGClx1MzA0Qlx1MzA0Qlx1MzA5OVx1MzA1NwpcdTMwNEJcdTMwNEJcdTMwOTlcdTMwN0YKXHUzMDRCXHUzMDRGXHUzMDUzXHUzMDk5Clx1MzA0Qlx1MzA0Rlx1MzA2OFx1MzA0RgpcdTMwNEJcdTMwNTVcdTMwOTlcdTMwOEIKXHUzMDRCXHUzMDk5XHUzMDVEXHUzMDk5XHUzMDQ2Clx1MzA0Qlx1MzA1Rlx1MzA0NApcdTMwNEJcdTMwNUZcdTMwNjEKXHUzMDRCXHUzMDk5XHUzMDYxXHUzMDg3XHUzMDQ2Clx1MzA0Qlx1MzA5OVx1MzA2M1x1MzA0RFx1MzA4NVx1MzA0NgpcdTMwNEJcdTMwOTlcdTMwNjNcdTMwNTNcdTMwNDYKXHUzMDRCXHUzMDk5XHUzMDYzXHUzMDU1XHUzMDkzClx1MzA0Qlx1MzA5OVx1MzA2M1x1MzA1N1x1MzA4N1x1MzA0NgpcdTMwNEJcdTMwNkFcdTMwNTVcdTMwOTlcdTMwOEZcdTMwNTcKXHUzMDRCXHUzMDZFXHUzMDQ2Clx1MzA0Qlx1MzA5OVx1MzA2Rlx1MzA0RgpcdTMwNEJcdTMwNzVcdTMwOTlcdTMwNEIKXHUzMDRCXHUzMDdCXHUzMDQ2Clx1MzA0Qlx1MzA3Qlx1MzA1M1x1MzA5OQpcdTMwNEJcdTMwN0VcdTMwNDYKXHUzMDRCXHUzMDdFXHUzMDdCXHUzMDk5XHUzMDUzClx1MzA0Qlx1MzA4MVx1MzA4Q1x1MzA0QVx1MzA5MwpcdTMwNEJcdTMwODZcdTMwNDQKXHUzMDRCXHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA0Qlx1MzA4OVx1MzA0NApcdTMwNEJcdTMwOEJcdTMwNDQKXHUzMDRCXHUzMDhEXHUzMDQ2Clx1MzA0Qlx1MzA4Rlx1MzA0RgpcdTMwNEJcdTMwOEZcdTMwODkKXHUzMDRCXHUzMDk5XHUzMDkzXHUzMDRCClx1MzA0Qlx1MzA5M1x1MzA1MVx1MzA0NApcdTMwNEJcdTMwOTNcdTMwNTNcdTMwNDYKXHUzMDRCXHUzMDkzXHUzMDU3XHUzMDgzClx1MzA0Qlx1MzA5M1x1MzA1RFx1MzA0NgpcdTMwNEJcdTMwOTNcdTMwNUZcdTMwOTMKXHUzMDRCXHUzMDkzXHUzMDYxClx1MzA0Qlx1MzA5OVx1MzA5M1x1MzA2Rlx1MzA5OVx1MzA4QgpcdTMwNERcdTMwNDJcdTMwNDQKXHUzMDREXHUzMDQyXHUzMDY0Clx1MzA0RFx1MzA0NFx1MzA4RApcdTMwNERcdTMwOTlcdTMwNDRcdTMwOTMKXHUzMDREXHUzMDQ2XHUzMDQ0Clx1MzA0RFx1MzA0Nlx1MzA5MwpcdTMwNERcdTMwNDhcdTMwOEIKXHUzMDREXHUzMDRBXHUzMDQ2Clx1MzA0RFx1MzA0QVx1MzA0RgpcdTMwNERcdTMwNEFcdTMwNjEKXHUzMDREXHUzMDRBXHUzMDkzClx1MzA0RFx1MzA0Qlx1MzA0NApcdTMwNERcdTMwNEJcdTMwNEYKXHUzMDREXHUzMDRCXHUzMDkzXHUzMDU3XHUzMDgzClx1MzA0RFx1MzA0RFx1MzA2NgpcdTMwNERcdTMwNEZcdTMwNkZcdTMwOTlcdTMwOEEKXHUzMDREXHUzMDRGXHUzMDg5XHUzMDUxXHUzMDk5Clx1MzA0RFx1MzA1MVx1MzA5M1x1MzA1Qlx1MzA0NApcdTMwNERcdTMwNTNcdTMwNDYKXHUzMDREXHUzMDUzXHUzMDQ4XHUzMDhCClx1MzA0RFx1MzA1M1x1MzA0RgpcdTMwNERcdTMwNTVcdTMwNDQKXHUzMDREXHUzMDU1XHUzMDRGClx1MzA0RFx1MzA1NVx1MzA3RQpcdTMwNERcdTMwNTVcdTMwODlcdTMwNERcdTMwOTkKXHUzMDREXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDRCXHUzMDRCXHUzMDk5XHUzMDRGClx1MzA0RFx1MzA5OVx1MzA1N1x1MzA0RApcdTMwNERcdTMwOTlcdTMwNTdcdTMwOTlcdTMwNUZcdTMwNDRcdTMwNTFcdTMwOTMKXHUzMDREXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDZCXHUzMDYzXHUzMDY2XHUzMDQ0Clx1MzA0RFx1MzA5OVx1MzA1N1x1MzA5OVx1MzA4NVx1MzA2NFx1MzA1N1x1MzA4MwpcdTMwNERcdTMwNTlcdTMwNDYKXHUzMDREXHUzMDVCXHUzMDQ0Clx1MzA0RFx1MzA1Qlx1MzA0RApcdTMwNERcdTMwNUJcdTMwNjQKXHUzMDREXHUzMDVEXHUzMDQ2Clx1MzA0RFx1MzA1RFx1MzA5OVx1MzA0RgpcdTMwNERcdTMwNURcdTMwOTlcdTMwOTMKXHUzMDREXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA0RFx1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNERcdTMwNjRcdTMwNDhcdTMwOTMKXHUzMDREXHUzMDk5XHUzMDYzXHUzMDYxXHUzMDhBClx1MzA0RFx1MzA2NFx1MzA2NFx1MzA0RApcdTMwNERcdTMwNjRcdTMwNkQKXHUzMDREXHUzMDY2XHUzMDQ0Clx1MzA0RFx1MzA2OFx1MzA5OVx1MzA0NgpcdTMwNERcdTMwNjhcdTMwOTlcdTMwNEYKXHUzMDREXHUzMDZBXHUzMDQ0Clx1MzA0RFx1MzA2QVx1MzA0Qlx1MzA5OQpcdTMwNERcdTMwNkFcdTMwNTMKXHUzMDREXHUzMDZDXHUzMDUzXHUzMDk5XHUzMDU3Clx1MzA0RFx1MzA2RFx1MzA5MwpcdTMwNERcdTMwNkVcdTMwNDYKXHUzMDREXHUzMDZFXHUzMDU3XHUzMDVGClx1MzA0RFx1MzA2Rlx1MzA0RgpcdTMwNERcdTMwNzJcdTMwOTlcdTMwNTdcdTMwNDQKXHUzMDREXHUzMDcyXHUzMDkzClx1MzA0RFx1MzA3NVx1MzA0RgpcdTMwNERcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDREXHUzMDdCXHUzMDk5XHUzMDQ2Clx1MzA0RFx1MzA3Qlx1MzA5MwpcdTMwNERcdTMwN0VcdTMwOEIKXHUzMDREXHUzMDdGXHUzMDY0Clx1MzA0RFx1MzA4MFx1MzA1OVx1MzA5OVx1MzA0Qlx1MzA1N1x1MzA0NApcdTMwNERcdTMwODFcdTMwOEIKXHUzMDREXHUzMDgyXHUzMDVGXHUzMDk5XHUzMDgxXHUzMDU3Clx1MzA0RFx1MzA4Mlx1MzA2MQpcdTMwNERcdTMwODJcdTMwNkUKXHUzMDREXHUzMDgzXHUzMDRGClx1MzA0RFx1MzA4NFx1MzA0RgpcdTMwNERcdTMwOTlcdTMwODVcdTMwNDZcdTMwNkJcdTMwNEYKXHUzMDREXHUzMDg4XHUzMDQ2Clx1MzA0RFx1MzA4N1x1MzA0Nlx1MzA4QVx1MzA4NVx1MzA0NgpcdTMwNERcdTMwODlcdTMwNDQKXHUzMDREXHUzMDg5XHUzMDRGClx1MzA0RFx1MzA4QVx1MzA5MwpcdTMwNERcdTMwOENcdTMwNDQKXHUzMDREXHUzMDhDXHUzMDY0Clx1MzA0RFx1MzA4RFx1MzA0RgpcdTMwNERcdTMwOTlcdTMwOERcdTMwOTMKXHUzMDREXHUzMDhGXHUzMDgxXHUzMDhCClx1MzA0RFx1MzA5OVx1MzA5M1x1MzA0NFx1MzA4RApcdTMwNERcdTMwOTNcdTMwNEJcdTMwNEZcdTMwNTdcdTMwOTkKXHUzMDREXHUzMDkzXHUzMDU3XHUzMDk5XHUzMDg3Clx1MzA0RFx1MzA5M1x1MzA4OFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNEZcdTMwOTlcdTMwNDJcdTMwNDQKXHUzMDRGXHUzMDQ0XHUzMDU5XHUzMDk5Clx1MzA0Rlx1MzA0Nlx1MzA0Qlx1MzA5MwpcdTMwNEZcdTMwNDZcdTMwNEQKXHUzMDRGXHUzMDQ2XHUzMDRGXHUzMDk5XHUzMDkzClx1MzA0Rlx1MzA0Nlx1MzA1M1x1MzA0NgpcdTMwNEZcdTMwOTlcdTMwNDZcdTMwNUJcdTMwNDQKXHUzMDRGXHUzMDQ2XHUzMDVEXHUzMDQ2Clx1MzA0Rlx1MzA5OVx1MzA0Nlx1MzA1Rlx1MzA4OQpcdTMwNEZcdTMwNDZcdTMwNzVcdTMwNEYKXHUzMDRGXHUzMDQ2XHUzMDdCXHUzMDk5Clx1MzA0Rlx1MzA0Qlx1MzA5MwpcdTMwNEZcdTMwNERcdTMwODdcdTMwNDYKXHUzMDRGXHUzMDUxXHUzMDk5XHUzMDkzClx1MzA0Rlx1MzA5OVx1MzA1M1x1MzA0NgpcdTMwNEZcdTMwNTVcdTMwNDQKXHUzMDRGXHUzMDU1XHUzMDREClx1MzA0Rlx1MzA1NVx1MzA2Rlx1MzA5OVx1MzA2QQpcdTMwNEZcdTMwNTVcdTMwOEIKXHUzMDRGXHUzMDU3XHUzMDgzXHUzMDdGClx1MzA0Rlx1MzA1N1x1MzA4N1x1MzA0NgpcdTMwNEZcdTMwNTlcdTMwNkVcdTMwNEQKXHUzMDRGXHUzMDU5XHUzMDhBXHUzMDg2XHUzMDcyXHUzMDk5Clx1MzA0Rlx1MzA1Qlx1MzA1MVx1MzA5OQpcdTMwNEZcdTMwNUJcdTMwOTMKXHUzMDRGXHUzMDk5XHUzMDVGXHUzMDQ0XHUzMDY2XHUzMDREClx1MzA0Rlx1MzA1Rlx1MzA5OVx1MzA1NVx1MzA4QgpcdTMwNEZcdTMwNUZcdTMwNzJcdTMwOTlcdTMwOENcdTMwOEIKXHUzMDRGXHUzMDYxXHUzMDUzXHUzMDdGClx1MzA0Rlx1MzA2MVx1MzA1NVx1MzA0RApcdTMwNEZcdTMwNjRcdTMwNTdcdTMwNUYKXHUzMDRGXHUzMDk5XHUzMDYzXHUzMDU5XHUzMDhBClx1MzA0Rlx1MzA2NFx1MzA4RFx1MzA0Rlx1MzA5OQpcdTMwNEZcdTMwNjhcdTMwNDZcdTMwNjZcdTMwOTMKXHUzMDRGXHUzMDY4XHUzMDk5XHUzMDRGClx1MzA0Rlx1MzA2QVx1MzA5MwpcdTMwNEZcdTMwNkRcdTMwNEZcdTMwNkQKXHUzMDRGXHUzMDZFXHUzMDQ2Clx1MzA0Rlx1MzA3NVx1MzA0NgpcdTMwNEZcdTMwN0ZcdTMwNDJcdTMwOEZcdTMwNUIKXHUzMDRGXHUzMDdGXHUzMDVGXHUzMDY2XHUzMDhCClx1MzA0Rlx1MzA4MVx1MzA4QgpcdTMwNEZcdTMwODRcdTMwNEZcdTMwNTdcdTMwODcKXHUzMDRGXHUzMDg5XHUzMDU5Clx1MzA0Rlx1MzA4OVx1MzA3OFx1MzA5OVx1MzA4QgpcdTMwNEZcdTMwOEJcdTMwN0UKXHUzMDRGXHUzMDhDXHUzMDhCClx1MzA0Rlx1MzA4RFx1MzA0NgpcdTMwNEZcdTMwOEZcdTMwNTdcdTMwNDQKXHUzMDRGXHUzMDk5XHUzMDkzXHUzMDRCXHUzMDkzClx1MzA0Rlx1MzA5OVx1MzA5M1x1MzA1N1x1MzA4N1x1MzA0RgpcdTMwNEZcdTMwOTlcdTMwOTNcdTMwNUZcdTMwNDQKXHUzMDRGXHUzMDk5XHUzMDkzXHUzMDY2Clx1MzA1MVx1MzA0Mlx1MzA2QQpcdTMwNTFcdTMwNDRcdTMwNEJcdTMwNEYKXHUzMDUxXHUzMDQ0XHUzMDUxXHUzMDkzClx1MzA1MVx1MzA0NFx1MzA1MwpcdTMwNTFcdTMwNDRcdTMwNTVcdTMwNjQKXHUzMDUxXHUzMDk5XHUzMDQ0XHUzMDU3XHUzMDk5XHUzMDg1XHUzMDY0Clx1MzA1MVx1MzA0NFx1MzA1Rlx1MzA0NApcdTMwNTFcdTMwOTlcdTMwNDRcdTMwNkVcdTMwNDZcdTMwNTdcdTMwOTlcdTMwOTMKXHUzMDUxXHUzMDQ0XHUzMDhDXHUzMDREClx1MzA1MVx1MzA0NFx1MzA4RApcdTMwNTFcdTMwNEFcdTMwNjhcdTMwNTkKXHUzMDUxXHUzMDRBXHUzMDhBXHUzMDgyXHUzMDZFClx1MzA1MVx1MzA5OVx1MzA0RFx1MzA0QgpcdTMwNTFcdTMwOTlcdTMwNERcdTMwNTFcdTMwOTlcdTMwOTMKXHUzMDUxXHUzMDk5XHUzMDREXHUzMDVGXHUzMDk5XHUzMDkzClx1MzA1MVx1MzA5OVx1MzA0RFx1MzA2MVx1MzA5MwpcdTMwNTFcdTMwOTlcdTMwNERcdTMwNjhcdTMwNjQKXHUzMDUxXHUzMDk5XHUzMDREXHUzMDZGClx1MzA1MVx1MzA5OVx1MzA0RFx1MzA4NFx1MzA0RgpcdTMwNTFcdTMwOTlcdTMwNTNcdTMwNDYKXHUzMDUxXHUzMDk5XHUzMDUzXHUzMDRGXHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA1MVx1MzA5OVx1MzA1NVx1MzA5OVx1MzA0NApcdTMwNTFcdTMwNTVcdTMwNEQKXHUzMDUxXHUzMDk5XHUzMDU1XHUzMDk5XHUzMDkzClx1MzA1MVx1MzA1N1x1MzA0RApcdTMwNTFcdTMwNTdcdTMwNTNcdTMwOTlcdTMwODAKXHUzMDUxXHUzMDU3XHUzMDg3XHUzMDQ2Clx1MzA1MVx1MzA5OVx1MzA1OVx1MzA2OApcdTMwNTFcdTMwNUZcdTMwNkZcdTMwOTkKXHUzMDUxXHUzMDYxXHUzMDgzXHUzMDYzXHUzMDc1XHUzMDlBClx1MzA1MVx1MzA2MVx1MzA4OVx1MzA1OQpcdTMwNTFcdTMwNjRcdTMwNDJcdTMwNjQKXHUzMDUxXHUzMDY0XHUzMDQ0Clx1MzA1MVx1MzA2NFx1MzA0OFx1MzA0RApcdTMwNTFcdTMwNjNcdTMwNTNcdTMwOTMKXHUzMDUxXHUzMDY0XHUzMDU3XHUzMDk5XHUzMDg3Clx1MzA1MVx1MzA2M1x1MzA1Qlx1MzA0RApcdTMwNTFcdTMwNjNcdTMwNjZcdTMwNDQKXHUzMDUxXHUzMDY0XHUzMDdFXHUzMDY0Clx1MzA1MVx1MzA5OVx1MzA2NFx1MzA4OFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNTFcdTMwOTlcdTMwNjRcdTMwOENcdTMwNDQKXHUzMDUxXHUzMDY0XHUzMDhEXHUzMDkzClx1MzA1MVx1MzA5OVx1MzA2OFx1MzA5OVx1MzA0RgpcdTMwNTFcdTMwNjhcdTMwNkZcdTMwOTlcdTMwNTkKXHUzMDUxXHUzMDY4XHUzMDhCClx1MzA1MVx1MzA2QVx1MzA1MVx1MzA5OQpcdTMwNTFcdTMwNkFcdTMwNTkKXHUzMDUxXHUzMDZBXHUzMDdGClx1MzA1MVx1MzA2Q1x1MzA0RApcdTMwNTFcdTMwOTlcdTMwNkRcdTMwNjQKXHUzMDUxXHUzMDZEXHUzMDkzClx1MzA1MVx1MzA2Rlx1MzA0NApcdTMwNTFcdTMwOTlcdTMwNzJcdTMwOTMKXHUzMDUxXHUzMDc1XHUzMDk5XHUzMDRCXHUzMDQ0Clx1MzA1MVx1MzA5OVx1MzA3Qlx1MzA5OVx1MzA0RgpcdTMwNTFcdTMwN0VcdTMwOEEKXHUzMDUxXHUzMDdGXHUzMDRCXHUzMDhCClx1MzA1MVx1MzA4MFx1MzA1NwpcdTMwNTFcdTMwODBcdTMwOEEKXHUzMDUxXHUzMDgyXHUzMDZFClx1MzA1MVx1MzA4OVx1MzA0NApcdTMwNTFcdTMwOERcdTMwNTFcdTMwOEQKXHUzMDUxXHUzMDhGXHUzMDU3XHUzMDQ0Clx1MzA1MVx1MzA5M1x1MzA0NApcdTMwNTFcdTMwOTNcdTMwNDhcdTMwNjQKXHUzMDUxXHUzMDkzXHUzMDRBClx1MzA1MVx1MzA5M1x1MzA0QgpcdTMwNTFcdTMwOTlcdTMwOTNcdTMwNEQKXHUzMDUxXHUzMDkzXHUzMDUxXHUzMDk5XHUzMDkzClx1MzA1MVx1MzA5M1x1MzA1M1x1MzA0NgpcdTMwNTFcdTMwOTNcdTMwNTVcdTMwNEYKXHUzMDUxXHUzMDkzXHUzMDU3XHUzMDg1XHUzMDQ2Clx1MzA1MVx1MzA5M1x1MzA1OVx1MzA0NgpcdTMwNTFcdTMwOTlcdTMwOTNcdTMwNURcdTMwNDYKXHUzMDUxXHUzMDkzXHUzMDYxXHUzMDRGClx1MzA1MVx1MzA5M1x1MzA2Nlx1MzA0NApcdTMwNTFcdTMwOTNcdTMwNjhcdTMwNDYKXHUzMDUxXHUzMDkzXHUzMDZBXHUzMDQ0Clx1MzA1MVx1MzA5M1x1MzA2Qlx1MzA5MwpcdTMwNTFcdTMwOTlcdTMwOTNcdTMwNzVcdTMwOTlcdTMwNjQKXHUzMDUxXHUzMDkzXHUzMDdFClx1MzA1MVx1MzA5M1x1MzA3Rlx1MzA5MwpcdTMwNTFcdTMwOTNcdTMwODFcdTMwNDQKXHUzMDUxXHUzMDkzXHUzMDg5XHUzMDkzClx1MzA1MVx1MzA5M1x1MzA4QQpcdTMwNTNcdTMwNDJcdTMwNEZcdTMwN0UKXHUzMDUzXHUzMDQ0XHUzMDZDClx1MzA1M1x1MzA0NFx1MzA3Mlx1MzA5OVx1MzA2OApcdTMwNTNcdTMwOTlcdTMwNDZcdTMwNDQKXHUzMDUzXHUzMDQ2XHUzMDQ4XHUzMDkzClx1MzA1M1x1MzA0Nlx1MzA0QVx1MzA5MwpcdTMwNTNcdTMwNDZcdTMwNEJcdTMwOTMKXHUzMDUzXHUzMDk5XHUzMDQ2XHUzMDREXHUzMDg1XHUzMDQ2Clx1MzA1M1x1MzA5OVx1MzA0Nlx1MzA1MVx1MzA0NApcdTMwNTNcdTMwNDZcdTMwNTNcdTMwNDYKXHUzMDUzXHUzMDQ2XHUzMDU1XHUzMDQ0Clx1MzA1M1x1MzA0Nlx1MzA1N1x1MzA5OQpcdTMwNTNcdTMwNDZcdTMwNTlcdTMwNDQKXHUzMDUzXHUzMDk5XHUzMDQ2XHUzMDVCXHUzMDQ0Clx1MzA1M1x1MzA0Nlx1MzA1RFx1MzA0RgpcdTMwNTNcdTMwNDZcdTMwNUZcdTMwNDQKXHUzMDUzXHUzMDQ2XHUzMDYxXHUzMDgzClx1MzA1M1x1MzA0Nlx1MzA2NFx1MzA0NgpcdTMwNTNcdTMwNDZcdTMwNjZcdTMwNDQKXHUzMDUzXHUzMDQ2XHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA1M1x1MzA0Nlx1MzA2QVx1MzA0NApcdTMwNTNcdTMwNDZcdTMwNkZcdTMwNDQKXHUzMDUzXHUzMDk5XHUzMDQ2XHUzMDdCXHUzMDQ2Clx1MzA1M1x1MzA5OVx1MzA0Nlx1MzA3RVx1MzA5MwpcdTMwNTNcdTMwNDZcdTMwODJcdTMwNEYKXHUzMDUzXHUzMDQ2XHUzMDhBXHUzMDY0Clx1MzA1M1x1MzA0OFx1MzA4QgpcdTMwNTNcdTMwNEFcdTMwOEEKXHUzMDUzXHUzMDk5XHUzMDRCXHUzMDQ0Clx1MzA1M1x1MzA5OVx1MzA0Qlx1MzA5OVx1MzA2NApcdTMwNTNcdTMwOTlcdTMwNEJcdTMwOTMKXHUzMDUzXHUzMDRGXHUzMDUzXHUzMDk5Clx1MzA1M1x1MzA0Rlx1MzA1NVx1MzA0NApcdTMwNTNcdTMwNEZcdTMwNjhcdTMwNDYKXHUzMDUzXHUzMDRGXHUzMDZBXHUzMDQ0Clx1MzA1M1x1MzA0Rlx1MzA2Rlx1MzA0RgpcdTMwNTNcdTMwNEZcdTMwOTlcdTMwN0UKXHUzMDUzXHUzMDUxXHUzMDQ0Clx1MzA1M1x1MzA1MVx1MzA4QgpcdTMwNTNcdTMwNTNcdTMwNkVcdTMwNEIKXHUzMDUzXHUzMDUzXHUzMDhEClx1MzA1M1x1MzA1NVx1MzA4MQpcdTMwNTNcdTMwNTdcdTMwNjQKXHUzMDUzXHUzMDU5XHUzMDQ2Clx1MzA1M1x1MzA1Qlx1MzA0NApcdTMwNTNcdTMwNUJcdTMwNEQKXHUzMDUzXHUzMDVCXHUzMDk5XHUzMDkzClx1MzA1M1x1MzA1RFx1MzA1Rlx1MzA5OVx1MzA2NgpcdTMwNTNcdTMwNUZcdTMwNDQKXHUzMDUzXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA1M1x1MzA1Rlx1MzA2NApcdTMwNTNcdTMwNjFcdTMwODdcdTMwNDYKXHUzMDUzXHUzMDYzXHUzMDRCClx1MzA1M1x1MzA2NFx1MzA1M1x1MzA2NApcdTMwNTNcdTMwNjRcdTMwNkZcdTMwOTlcdTMwOTMKXHUzMDUzXHUzMDY0XHUzMDc1XHUzMDk5Clx1MzA1M1x1MzA2Nlx1MzA0NApcdTMwNTNcdTMwNjZcdTMwOTMKXHUzMDUzXHUzMDY4XHUzMDRCXHUzMDk5XHUzMDg5Clx1MzA1M1x1MzA2OFx1MzA1NwpcdTMwNTNcdTMwNjhcdTMwNkZcdTMwOTkKXHUzMDUzXHUzMDY4XHUzMDhBClx1MzA1M1x1MzA2QVx1MzA1M1x1MzA5OVx1MzA2QQpcdTMwNTNcdTMwNkRcdTMwNTNcdTMwNkQKXHUzMDUzXHUzMDZFXHUzMDdFXHUzMDdFClx1MzA1M1x1MzA2RVx1MzA3RgpcdTMwNTNcdTMwNkVcdTMwODgKXHUzMDUzXHUzMDk5XHUzMDZGXHUzMDkzClx1MzA1M1x1MzA3Mlx1MzA2NFx1MzA1N1x1MzA5OQpcdTMwNTNcdTMwNzVcdTMwNDYKXHUzMDUzXHUzMDc1XHUzMDkzClx1MzA1M1x1MzA3Qlx1MzA5OVx1MzA4Q1x1MzA4QgpcdTMwNTNcdTMwOTlcdTMwN0VcdTMwNDJcdTMwNzVcdTMwOTlcdTMwODkKXHUzMDUzXHUzMDdFXHUzMDRCXHUzMDQ0Clx1MzA1M1x1MzA5OVx1MzA3RVx1MzA1OVx1MzA4QQpcdTMwNTNcdTMwN0VcdTMwNjRcdTMwNkEKXHUzMDUzXHUzMDdFXHUzMDhCClx1MzA1M1x1MzA4MFx1MzA0RFx1MzA5OVx1MzA1MwpcdTMwNTNcdTMwODJcdTMwNTdcdTMwOTkKXHUzMDUzXHUzMDgyXHUzMDYxClx1MzA1M1x1MzA4Mlx1MzA2RQpcdTMwNTNcdTMwODJcdTMwOTMKXHUzMDUzXHUzMDg0XHUzMDRGClx1MzA1M1x1MzA4NFx1MzA3RQpcdTMwNTNcdTMwODZcdTMwNDYKXHUzMDUzXHUzMDg2XHUzMDcyXHUzMDk5Clx1MzA1M1x1MzA4OFx1MzA0NApcdTMwNTNcdTMwODhcdTMwNDYKXHUzMDUzXHUzMDhBXHUzMDhCClx1MzA1M1x1MzA4Q1x1MzA0Rlx1MzA1N1x1MzA4N1x1MzA5MwpcdTMwNTNcdTMwOERcdTMwNjNcdTMwNTEKXHUzMDUzXHUzMDhGXHUzMDgyXHUzMDY2Clx1MzA1M1x1MzA4Rlx1MzA4Q1x1MzA4QgpcdTMwNTNcdTMwOTNcdTMwNDRcdTMwOTMKXHUzMDUzXHUzMDkzXHUzMDRCXHUzMDQ0Clx1MzA1M1x1MzA5M1x1MzA0RApcdTMwNTNcdTMwOTNcdTMwNTdcdTMwODVcdTMwNDYKXHUzMDUzXHUzMDkzXHUzMDU5XHUzMDQ0Clx1MzA1M1x1MzA5M1x1MzA1Rlx1MzA5OVx1MzA2NgpcdTMwNTNcdTMwOTNcdTMwNjhcdTMwOTMKXHUzMDUzXHUzMDkzXHUzMDZBXHUzMDkzClx1MzA1M1x1MzA5M1x1MzA3Mlx1MzA5OVx1MzA2QgpcdTMwNTNcdTMwOTNcdTMwN0JcdTMwOUFcdTMwOTMKXHUzMDUzXHUzMDkzXHUzMDdFXHUzMDUxClx1MzA1M1x1MzA5M1x1MzA4NApcdTMwNTNcdTMwOTNcdTMwOENcdTMwNDQKXHUzMDUzXHUzMDkzXHUzMDhGXHUzMDRGClx1MzA1NVx1MzA5OVx1MzA0NFx1MzA0OFx1MzA0RApcdTMwNTVcdTMwNDRcdTMwNEJcdTMwNDQKXHUzMDU1XHUzMDQ0XHUzMDREXHUzMDkzClx1MzA1NVx1MzA5OVx1MzA0NFx1MzA1MVx1MzA5OVx1MzA5MwpcdTMwNTVcdTMwOTlcdTMwNDRcdTMwNTMKXHUzMDU1XHUzMDQ0XHUzMDU3XHUzMDg3Clx1MzA1NVx1MzA0NFx1MzA1Qlx1MzA0NApcdTMwNTVcdTMwOTlcdTMwNDRcdTMwNUZcdTMwNEYKXHUzMDU1XHUzMDk5XHUzMDQ0XHUzMDYxXHUzMDg1XHUzMDQ2Clx1MzA1NVx1MzA0NFx1MzA2Nlx1MzA0RApcdTMwNTVcdTMwOTlcdTMwNDRcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDU1XHUzMDQ2XHUzMDZBClx1MzA1NVx1MzA0Qlx1MzA0NFx1MzA1NwpcdTMwNTVcdTMwNEJcdTMwOTlcdTMwNTkKXHUzMDU1XHUzMDRCXHUzMDZBClx1MzA1NVx1MzA0Qlx1MzA3Rlx1MzA2MQpcdTMwNTVcdTMwNEJcdTMwOTlcdTMwOEIKXHUzMDU1XHUzMDREXHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA1NVx1MzA0Rlx1MzA1NwpcdTMwNTVcdTMwNEZcdTMwNzJcdTMwOTMKXHUzMDU1XHUzMDRGXHUzMDg5Clx1MzA1NVx1MzA1M1x1MzA0RgpcdTMwNTVcdTMwNTNcdTMwNjQKXHUzMDU1XHUzMDU5XHUzMDk5XHUzMDRCXHUzMDhCClx1MzA1NVx1MzA5OVx1MzA1Qlx1MzA0RApcdTMwNTVcdTMwNUZcdTMwOTMKXHUzMDU1XHUzMDY0XHUzMDQ4XHUzMDQ0Clx1MzA1NVx1MzA5OVx1MzA2NFx1MzA0QVx1MzA5MwpcdTMwNTVcdTMwOTlcdTMwNjNcdTMwNEIKXHUzMDU1XHUzMDk5XHUzMDY0XHUzMDRCXHUzMDk5XHUzMDRGClx1MzA1NVx1MzA2M1x1MzA0RFx1MzA4N1x1MzA0RgpcdTMwNTVcdTMwOTlcdTMwNjNcdTMwNTcKXHUzMDU1XHUzMDY0XHUzMDU3XHUzMDk5XHUzMDkzClx1MzA1NVx1MzA5OVx1MzA2M1x1MzA1RFx1MzA0NgpcdTMwNTVcdTMwNjRcdTMwNUZcdTMwNkZcdTMwOTkKXHUzMDU1XHUzMDY0XHUzMDdFXHUzMDQ0XHUzMDgyClx1MzA1NVx1MzA2Nlx1MzA0NApcdTMwNTVcdTMwNjhcdTMwNDRcdTMwODIKXHUzMDU1XHUzMDY4XHUzMDQ2Clx1MzA1NVx1MzA2OFx1MzA0QVx1MzA4NApcdTMwNTVcdTMwNjhcdTMwNTcKXHUzMDU1XHUzMDY4XHUzMDhCClx1MzA1NVx1MzA2RVx1MzA0NgpcdTMwNTVcdTMwNkZcdTMwOTlcdTMwNEYKXHUzMDU1XHUzMDcyXHUzMDk5XHUzMDU3XHUzMDQ0Clx1MzA1NVx1MzA3OFx1MzA5OVx1MzA2NApcdTMwNTVcdTMwN0JcdTMwNDYKXHUzMDU1XHUzMDdCXHUzMDY4XHUzMDk5Clx1MzA1NVx1MzA3RVx1MzA1OQpcdTMwNTVcdTMwN0ZcdTMwNTdcdTMwNDQKXHUzMDU1XHUzMDdGXHUzMDVGXHUzMDk5XHUzMDhDClx1MzA1NVx1MzA4MFx1MzA1MQpcdTMwNTVcdTMwODFcdTMwOEIKXHUzMDU1XHUzMDg0XHUzMDQ4XHUzMDkzXHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA1NVx1MzA4Nlx1MzA0NgpcdTMwNTVcdTMwODhcdTMwNDYKXHUzMDU1XHUzMDg4XHUzMDRGClx1MzA1NVx1MzA4OVx1MzA1Rlx1MzA5OQpcdTMwNTVcdTMwOTlcdTMwOEJcdTMwNURcdTMwNkZcdTMwOTkKXHUzMDU1XHUzMDhGXHUzMDg0XHUzMDRCClx1MzA1NVx1MzA4Rlx1MzA4QgpcdTMwNTVcdTMwOTNcdTMwNDRcdTMwOTMKXHUzMDU1XHUzMDkzXHUzMDRCClx1MzA1NVx1MzA5M1x1MzA0RFx1MzA4M1x1MzA0RgpcdTMwNTVcdTMwOTNcdTMwNTNcdTMwNDYKXHUzMDU1XHUzMDkzXHUzMDU1XHUzMDQ0Clx1MzA1NVx1MzA5OVx1MzA5M1x1MzA1N1x1MzA4NwpcdTMwNTVcdTMwOTNcdTMwNTlcdTMwNDYKXHUzMDU1XHUzMDkzXHUzMDVCXHUzMDQ0Clx1MzA1NVx1MzA5M1x1MzA1RApcdTMwNTVcdTMwOTNcdTMwNjEKXHUzMDU1XHUzMDkzXHUzMDdFClx1MzA1NVx1MzA5M1x1MzA3RgpcdTMwNTVcdTMwOTNcdTMwODlcdTMwOTMKXHUzMDU3XHUzMDQyXHUzMDQ0Clx1MzA1N1x1MzA0Mlx1MzA1MVx1MzA5OQpcdTMwNTdcdTMwNDJcdTMwNTVcdTMwNjNcdTMwNjYKXHUzMDU3XHUzMDQyXHUzMDhGXHUzMDVCClx1MzA1N1x1MzA0NFx1MzA0RgpcdTMwNTdcdTMwNDRcdTMwOTMKXHUzMDU3XHUzMDQ2XHUzMDYxClx1MzA1N1x1MzA0OFx1MzA0NApcdTMwNTdcdTMwNEFcdTMwNTEKXHUzMDU3XHUzMDRCXHUzMDQ0Clx1MzA1N1x1MzA0Qlx1MzA0RgpcdTMwNTdcdTMwOTlcdTMwNEJcdTMwOTMKXHUzMDU3XHUzMDUzXHUzMDk5XHUzMDY4Clx1MzA1N1x1MzA1OVx1MzA0NgpcdTMwNTdcdTMwOTlcdTMwNUZcdTMwOTlcdTMwNDQKXHUzMDU3XHUzMDVGXHUzMDQ2XHUzMDUxClx1MzA1N1x1MzA1Rlx1MzA0RFx1MzA5OQpcdTMwNTdcdTMwNUZcdTMwNjYKXHUzMDU3XHUzMDVGXHUzMDdGClx1MzA1N1x1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNTdcdTMwNjFcdTMwOEFcdTMwOTMKXHUzMDU3XHUzMDYzXHUzMDRCXHUzMDhBClx1MzA1N1x1MzA2NFx1MzA1N1x1MzA5OQpcdTMwNTdcdTMwNjRcdTMwODJcdTMwOTMKXHUzMDU3XHUzMDY2XHUzMDQ0Clx1MzA1N1x1MzA2Nlx1MzA0RApcdTMwNTdcdTMwNjZcdTMwNjQKXHUzMDU3XHUzMDk5XHUzMDY2XHUzMDkzClx1MzA1N1x1MzA5OVx1MzA2OFx1MzA5OVx1MzA0NgpcdTMwNTdcdTMwNkFcdTMwNERcdTMwOTlcdTMwOEMKXHUzMDU3XHUzMDZBXHUzMDgyXHUzMDZFClx1MzA1N1x1MzA2QVx1MzA5MwpcdTMwNTdcdTMwNkRcdTMwN0UKXHUzMDU3XHUzMDZEXHUzMDkzClx1MzA1N1x1MzA2RVx1MzA0Rlx1MzA5OQpcdTMwNTdcdTMwNkVcdTMwNzVcdTMwOTkKXHUzMDU3XHUzMDZGXHUzMDQ0Clx1MzA1N1x1MzA2Rlx1MzA5OVx1MzA0Qlx1MzA4QQpcdTMwNTdcdTMwNkZcdTMwNjQKXHUzMDU3XHUzMDZGXHUzMDg5XHUzMDQ0Clx1MzA1N1x1MzA2Rlx1MzA5MwpcdTMwNTdcdTMwNzJcdTMwODdcdTMwNDYKXHUzMDU3XHUzMDc1XHUzMDRGClx1MzA1N1x1MzA5OVx1MzA3NVx1MzA5OVx1MzA5MwpcdTMwNTdcdTMwNzhcdTMwNDQKXHUzMDU3XHUzMDdCXHUzMDQ2Clx1MzA1N1x1MzA3Qlx1MzA5MwpcdTMwNTdcdTMwN0VcdTMwNDYKXHUzMDU3XHUzMDdFXHUzMDhCClx1MzA1N1x1MzA3Rlx1MzA5MwpcdTMwNTdcdTMwODBcdTMwNTFcdTMwOEIKXHUzMDU3XHUzMDk5XHUzMDgwXHUzMDU3XHUzMDg3Clx1MzA1N1x1MzA4MVx1MzA0NApcdTMwNTdcdTMwODFcdTMwOEIKXHUzMDU3XHUzMDgyXHUzMDkzClx1MzA1N1x1MzA4M1x1MzA0NFx1MzA5MwpcdTMwNTdcdTMwODNcdTMwNDZcdTMwOTMKXHUzMDU3XHUzMDgzXHUzMDRBXHUzMDkzClx1MzA1N1x1MzA5OVx1MzA4M1x1MzA0Qlx1MzA5OVx1MzA0NFx1MzA4MgpcdTMwNTdcdTMwODRcdTMwNEZcdTMwNTdcdTMwODcKXHUzMDU3XHUzMDgzXHUzMDRGXHUzMDdCXHUzMDQ2Clx1MzA1N1x1MzA4M1x1MzA1MVx1MzA5MwpcdTMwNTdcdTMwODNcdTMwNTMKXHUzMDU3XHUzMDgzXHUzMDU1XHUzMDk5XHUzMDQ0Clx1MzA1N1x1MzA4M1x1MzA1N1x1MzA5MwpcdTMwNTdcdTMwODNcdTMwNUJcdTMwOTMKXHUzMDU3XHUzMDgzXHUzMDVEXHUzMDQ2Clx1MzA1N1x1MzA4M1x1MzA1Rlx1MzA0NApcdTMwNTdcdTMwODNcdTMwNjFcdTMwODdcdTMwNDYKXHUzMDU3XHUzMDgzXHUzMDYzXHUzMDREXHUzMDkzClx1MzA1N1x1MzA5OVx1MzA4M1x1MzA3RQpcdTMwNTdcdTMwODNcdTMwOEFcdTMwOTMKXHUzMDU3XHUzMDgzXHUzMDhDXHUzMDQ0Clx1MzA1N1x1MzA5OVx1MzA4Nlx1MzA0NgpcdTMwNTdcdTMwOTlcdTMwODVcdTMwNDZcdTMwNTdcdTMwODcKXHUzMDU3XHUzMDg1XHUzMDRGXHUzMDZGXHUzMDRGClx1MzA1N1x1MzA5OVx1MzA4NVx1MzA1N1x1MzA5MwpcdTMwNTdcdTMwODVcdTMwNjNcdTMwNUJcdTMwNEQKXHUzMDU3XHUzMDg1XHUzMDdGClx1MzA1N1x1MzA4NVx1MzA4OVx1MzA2Rlx1MzA5OQpcdTMwNTdcdTMwOTlcdTMwODVcdTMwOTNcdTMwNkZcdTMwOTlcdTMwOTMKXHUzMDU3XHUzMDg3XHUzMDQ2XHUzMDRCXHUzMDQ0Clx1MzA1N1x1MzA4N1x1MzA0Rlx1MzA1Rlx1MzA0RgpcdTMwNTdcdTMwODdcdTMwNjNcdTMwNTFcdTMwOTMKXHUzMDU3XHUzMDg3XHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA1N1x1MzA4N1x1MzA4Mlx1MzA2NApcdTMwNTdcdTMwODlcdTMwNUJcdTMwOEIKXHUzMDU3XHUzMDg5XHUzMDc4XHUzMDk5XHUzMDhCClx1MzA1N1x1MzA5M1x1MzA0QgpcdTMwNTdcdTMwOTNcdTMwNTNcdTMwNDYKXHUzMDU3XHUzMDk5XHUzMDkzXHUzMDU3XHUzMDk5XHUzMDgzClx1MzA1N1x1MzA5M1x1MzA1Qlx1MzA0NFx1MzA1N1x1MzA5OQpcdTMwNTdcdTMwOTNcdTMwNjFcdTMwNEYKXHUzMDU3XHUzMDkzXHUzMDhBXHUzMDkzClx1MzA1OVx1MzA0Mlx1MzA1MVx1MzA5OQpcdTMwNTlcdTMwNDJcdTMwNTcKXHUzMDU5XHUzMDQyXHUzMDZBClx1MzA1OVx1MzA5OVx1MzA0Mlx1MzA5MwpcdTMwNTlcdTMwNDRcdTMwNDhcdTMwNDQKXHUzMDU5XHUzMDQ0XHUzMDRCClx1MzA1OVx1MzA0NFx1MzA2OFx1MzA0NgpcdTMwNTlcdTMwOTlcdTMwNDRcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDU5XHUzMDQ0XHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA1OVx1MzA0Nlx1MzA0Qlx1MzA5OVx1MzA0RgpcdTMwNTlcdTMwNDZcdTMwNTdcdTMwOTlcdTMwNjQKXHUzMDU5XHUzMDQ2XHUzMDVCXHUzMDkzClx1MzA1OVx1MzA0QVx1MzA2OFx1MzA5OVx1MzA4QQpcdTMwNTlcdTMwNERcdTMwN0UKXHUzMDU5XHUzMDRGXHUzMDQ2Clx1MzA1OVx1MzA0Rlx1MzA2QVx1MzA0NApcdTMwNTlcdTMwNTFcdTMwOEIKXHUzMDU5XHUzMDUzXHUzMDk5XHUzMDQ0Clx1MzA1OVx1MzA1M1x1MzA1NwpcdTMwNTlcdTMwOTlcdTMwNTVcdTMwOTMKXHUzMDU5XHUzMDU5XHUzMDk5XHUzMDU3XHUzMDQ0Clx1MzA1OVx1MzA1OVx1MzA4MApcdTMwNTlcdTMwNTlcdTMwODFcdTMwOEIKXHUzMDU5XHUzMDYzXHUzMDRCXHUzMDhBClx1MzA1OVx1MzA5OVx1MzA2M1x1MzA1N1x1MzA4QQpcdTMwNTlcdTMwOTlcdTMwNjNcdTMwNjgKXHUzMDU5XHUzMDY2XHUzMDREClx1MzA1OVx1MzA2Nlx1MzA4QgpcdTMwNTlcdTMwNkRcdTMwOEIKXHUzMDU5XHUzMDZFXHUzMDUzClx1MzA1OVx1MzA2Rlx1MzA1Rlx1MzA5OQpcdTMwNTlcdTMwNkZcdTMwOTlcdTMwODlcdTMwNTdcdTMwNDQKXHUzMDU5XHUzMDk5XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA1OVx1MzA5OVx1MzA3NVx1MzA5OVx1MzA2Q1x1MzA4QwpcdTMwNTlcdTMwNzVcdTMwOTlcdTMwOEEKXHUzMDU5XHUzMDc1XHUzMDhDClx1MzA1OVx1MzA3OFx1MzA5OVx1MzA2NgpcdTMwNTlcdTMwNzhcdTMwOTlcdTMwOEIKXHUzMDU5XHUzMDk5XHUzMDdCXHUzMDQ2Clx1MzA1OVx1MzA3Qlx1MzA5OVx1MzA5MwpcdTMwNTlcdTMwN0VcdTMwNDQKXHUzMDU5XHUzMDgxXHUzMDU3Clx1MzA1OVx1MzA4Mlx1MzA0NgpcdTMwNTlcdTMwODRcdTMwNEQKXHUzMDU5XHUzMDg5XHUzMDU5XHUzMDg5Clx1MzA1OVx1MzA4Qlx1MzA4MQpcdTMwNTlcdTMwOENcdTMwNjFcdTMwNEJcdTMwOTlcdTMwNDYKXHUzMDU5XHUzMDhEXHUzMDYzXHUzMDY4Clx1MzA1OVx1MzA4Rlx1MzA4QgpcdTMwNTlcdTMwOTNcdTMwNUJcdTMwOTlcdTMwOTMKXHUzMDU5XHUzMDkzXHUzMDdCXHUzMDlBXHUzMDQ2Clx1MzA1Qlx1MzA0Mlx1MzA3NVx1MzA5OVx1MzA4OQpcdTMwNUJcdTMwNDRcdTMwNEJcdTMwNjQKXHUzMDVCXHUzMDQ0XHUzMDUxXHUzMDk5XHUzMDkzClx1MzA1Qlx1MzA0NFx1MzA1N1x1MzA5OQpcdTMwNUJcdTMwNDRcdTMwODhcdTMwNDYKXHUzMDVCXHUzMDRBXHUzMDQ2Clx1MzA1Qlx1MzA0Qlx1MzA0NFx1MzA0Qlx1MzA5MwpcdTMwNUJcdTMwNERcdTMwNkJcdTMwOTMKXHUzMDVCXHUzMDREXHUzMDgwClx1MzA1Qlx1MzA0RFx1MzA4NgpcdTMwNUJcdTMwNERcdTMwODlcdTMwOTNcdTMwNDZcdTMwOTMKXHUzMDVCXHUzMDUxXHUzMDkzClx1MzA1Qlx1MzA1M1x1MzA0NgpcdTMwNUJcdTMwNTlcdTMwNTdcdTMwOTkKXHUzMDVCXHUzMDVGXHUzMDQ0Clx1MzA1Qlx1MzA1Rlx1MzA1MQpcdTMwNUJcdTMwNjNcdTMwNEJcdTMwNEYKXHUzMDVCXHUzMDYzXHUzMDREXHUzMDgzXHUzMDRGClx1MzA1Qlx1MzA5OVx1MzA2M1x1MzA0RgpcdTMwNUJcdTMwNjNcdTMwNTFcdTMwOTMKXHUzMDVCXHUzMDYzXHUzMDUzXHUzMDY0Clx1MzA1Qlx1MzA2M1x1MzA1NVx1MzA1Rlx1MzA0Rlx1MzA3RQpcdTMwNUJcdTMwNjRcdTMwNURcdTMwOTlcdTMwNEYKXHUzMDVCXHUzMDY0XHUzMDVGXHUzMDk5XHUzMDkzClx1MzA1Qlx1MzA2NFx1MzA2Nlx1MzA5OVx1MzA5MwpcdTMwNUJcdTMwNjNcdTMwNkZcdTMwOUFcdTMwOTMKXHUzMDVCXHUzMDY0XHUzMDcyXHUzMDk5Clx1MzA1Qlx1MzA2NFx1MzA3NVx1MzA5OVx1MzA5MwpcdTMwNUJcdTMwNjRcdTMwODFcdTMwNDQKXHUzMDVCXHUzMDY0XHUzMDhBXHUzMDY0Clx1MzA1Qlx1MzA2QVx1MzA0QgpcdTMwNUJcdTMwNkVcdTMwNzJcdTMwOTkKXHUzMDVCXHUzMDZGXHUzMDZGXHUzMDk5Clx1MzA1Qlx1MzA3Mlx1MzA5OVx1MzA4RApcdTMwNUJcdTMwN0JcdTMwOTlcdTMwNkQKXHUzMDVCXHUzMDdFXHUzMDQ0Clx1MzA1Qlx1MzA3RVx1MzA4QgpcdTMwNUJcdTMwODFcdTMwOEIKXHUzMDVCXHUzMDgyXHUzMDVGXHUzMDhDClx1MzA1Qlx1MzA4QVx1MzA3NQpcdTMwNUJcdTMwOTlcdTMwOTNcdTMwNDJcdTMwNEYKXHUzMDVCXHUzMDkzXHUzMDQ0Clx1MzA1Qlx1MzA5M1x1MzA0OFx1MzA0NApcdTMwNUJcdTMwOTNcdTMwNEIKXHUzMDVCXHUzMDkzXHUzMDREXHUzMDg3Clx1MzA1Qlx1MzA5M1x1MzA0RgpcdTMwNUJcdTMwOTNcdTMwNTFcdTMwOTlcdTMwOTMKXHUzMDVCXHUzMDk5XHUzMDkzXHUzMDUzXHUzMDk5Clx1MzA1Qlx1MzA5M1x1MzA1NVx1MzA0NApcdTMwNUJcdTMwOTNcdTMwNTdcdTMwODUKXHUzMDVCXHUzMDkzXHUzMDU5XHUzMDQ0Clx1MzA1Qlx1MzA5M1x1MzA1Qlx1MzA0NApcdTMwNUJcdTMwOTNcdTMwNURcdTMwOTkKXHUzMDVCXHUzMDkzXHUzMDVGXHUzMDRGClx1MzA1Qlx1MzA5M1x1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNUJcdTMwOTNcdTMwNjZcdTMwNDQKXHUzMDVCXHUzMDkzXHUzMDY4XHUzMDQ2Clx1MzA1Qlx1MzA5M1x1MzA2Q1x1MzA0RApcdTMwNUJcdTMwOTNcdTMwNkRcdTMwOTMKXHUzMDVCXHUzMDkzXHUzMDZGXHUzMDlBXHUzMDQ0Clx1MzA1Qlx1MzA5OVx1MzA5M1x1MzA3NVx1MzA5OQpcdTMwNUJcdTMwOTlcdTMwOTNcdTMwN0JcdTMwOUFcdTMwNDYKXHUzMDVCXHUzMDkzXHUzMDgwClx1MzA1Qlx1MzA5M1x1MzA4MVx1MzA5M1x1MzA1N1x1MzA5OVx1MzA4NwpcdTMwNUJcdTMwOTNcdTMwODJcdTMwOTMKXHUzMDVCXHUzMDkzXHUzMDg0XHUzMDRGClx1MzA1Qlx1MzA5M1x1MzA4Nlx1MzA0NgpcdTMwNUJcdTMwOTNcdTMwODhcdTMwNDYKXHUzMDVCXHUzMDk5XHUzMDkzXHUzMDg5Clx1MzA1Qlx1MzA5OVx1MzA5M1x1MzA4QVx1MzA4M1x1MzA0RgpcdTMwNUJcdTMwOTNcdTMwOENcdTMwNDQKXHUzMDVCXHUzMDkzXHUzMDhEClx1MzA1RFx1MzA0Mlx1MzA0RgpcdTMwNURcdTMwNDRcdTMwNjhcdTMwNTFcdTMwOTlcdTMwOEIKXHUzMDVEXHUzMDQ0XHUzMDZEClx1MzA1RFx1MzA0Nlx1MzA0Qlx1MzA5OVx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0NgpcdTMwNURcdTMwNDZcdTMwNEQKXHUzMDVEXHUzMDQ2XHUzMDUzXHUzMDk5Clx1MzA1RFx1MzA0Nlx1MzA1N1x1MzA5MwpcdTMwNURcdTMwNDZcdTMwNUZcdTMwOTlcdTMwOTMKXHUzMDVEXHUzMDQ2XHUzMDZBXHUzMDkzClx1MzA1RFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNURcdTMwNDZcdTMwODFcdTMwOTMKXHUzMDVEXHUzMDQ2XHUzMDhBClx1MzA1RFx1MzA0OFx1MzA4Mlx1MzA2RQpcdTMwNURcdTMwNDhcdTMwOTMKXHUzMDVEXHUzMDRCXHUzMDk5XHUzMDQ0Clx1MzA1RFx1MzA1MVx1MzA5OVx1MzA0RApcdTMwNURcdTMwNTNcdTMwNDYKXHUzMDVEXHUzMDUzXHUzMDVEXHUzMDUzClx1MzA1RFx1MzA1NVx1MzA5OVx1MzA0NApcdTMwNURcdTMwNTdcdTMwNkEKXHUzMDVEXHUzMDVCXHUzMDQ0Clx1MzA1RFx1MzA1Qlx1MzA5MwpcdTMwNURcdTMwNURcdTMwNEZcdTMwOTkKXHUzMDVEXHUzMDVGXHUzMDk5XHUzMDY2XHUzMDhCClx1MzA1RFx1MzA2NFx1MzA0NgpcdTMwNURcdTMwNjRcdTMwNDhcdTMwOTMKXHUzMDVEXHUzMDYzXHUzMDRCXHUzMDkzClx1MzA1RFx1MzA2NFx1MzA0RFx1MzA5OVx1MzA4N1x1MzA0NgpcdTMwNURcdTMwNjNcdTMwNTFcdTMwNjQKXHUzMDVEXHUzMDYzXHUzMDUzXHUzMDQ2Clx1MzA1RFx1MzA2M1x1MzA1Qlx1MzA5MwpcdTMwNURcdTMwNjNcdTMwNjgKXHUzMDVEXHUzMDY4XHUzMDRCXHUzMDk5XHUzMDhGClx1MzA1RFx1MzA2OFx1MzA2NFx1MzA5OVx1MzA4OQpcdTMwNURcdTMwNkFcdTMwNDhcdTMwOEIKXHUzMDVEXHUzMDZBXHUzMDVGClx1MzA1RFx1MzA3NVx1MzA3Qlx1MzA5OQpcdTMwNURcdTMwN0JcdTMwOTlcdTMwNEYKXHUzMDVEXHUzMDdCXHUzMDk5XHUzMDhEClx1MzA1RFx1MzA3RVx1MzA2NApcdTMwNURcdTMwN0VcdTMwOEIKXHUzMDVEXHUzMDgwXHUzMDRGClx1MzA1RFx1MzA4MFx1MzA4QVx1MzA0OApcdTMwNURcdTMwODFcdTMwOEIKXHUzMDVEXHUzMDgyXHUzMDVEXHUzMDgyClx1MzA1RFx1MzA4OFx1MzA0Qlx1MzA1Qlx1MzA5OQpcdTMwNURcdTMwODlcdTMwN0VcdTMwODEKXHUzMDVEXHUzMDhEXHUzMDQ2Clx1MzA1RFx1MzA5M1x1MzA0Qlx1MzA0NApcdTMwNURcdTMwOTNcdTMwNTFcdTMwNDQKXHUzMDVEXHUzMDkzXHUzMDU1XHUzMDk5XHUzMDQ0Clx1MzA1RFx1MzA5M1x1MzA1N1x1MzA2NApcdTMwNURcdTMwOTNcdTMwNURcdTMwOTlcdTMwNEYKXHUzMDVEXHUzMDkzXHUzMDYxXHUzMDg3XHUzMDQ2Clx1MzA1RFx1MzA5OVx1MzA5M1x1MzA3Mlx1MzA5OQpcdTMwNURcdTMwOTlcdTMwOTNcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDVEXHUzMDkzXHUzMDdGXHUzMDkzClx1MzA1Rlx1MzA0Mlx1MzA0NApcdTMwNUZcdTMwNDRcdTMwNDRcdTMwOTMKXHUzMDVGXHUzMDQ0XHUzMDQ2XHUzMDkzClx1MzA1Rlx1MzA0NFx1MzA0OFx1MzA0RApcdTMwNUZcdTMwNDRcdTMwNEFcdTMwNDYKXHUzMDVGXHUzMDk5XHUzMDQ0XHUzMDRCXHUzMDk5XHUzMDRGClx1MzA1Rlx1MzA0NFx1MzA0RApcdTMwNUZcdTMwNDRcdTMwNEZcdTMwOTlcdTMwNDYKXHUzMDVGXHUzMDQ0XHUzMDUxXHUzMDkzClx1MzA1Rlx1MzA0NFx1MzA1MwpcdTMwNUZcdTMwNDRcdTMwNTVcdTMwOTlcdTMwNDQKXHUzMDVGXHUzMDk5XHUzMDQ0XHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2XHUzMDc1XHUzMDk5Clx1MzA1Rlx1MzA5OVx1MzA0NFx1MzA1OVx1MzA0RApcdTMwNUZcdTMwNDRcdTMwNUJcdTMwNjQKXHUzMDVGXHUzMDQ0XHUzMDVEXHUzMDQ2Clx1MzA1Rlx1MzA5OVx1MzA0NFx1MzA1Rlx1MzA0NApcdTMwNUZcdTMwNDRcdTMwNjFcdTMwODdcdTMwNDYKXHUzMDVGXHUzMDQ0XHUzMDY2XHUzMDQ0Clx1MzA1Rlx1MzA5OVx1MzA0NFx1MzA2OFx1MzA5OVx1MzA1M1x1MzA4RApcdTMwNUZcdTMwNDRcdTMwNkFcdTMwNDQKXHUzMDVGXHUzMDQ0XHUzMDZEXHUzMDY0Clx1MzA1Rlx1MzA0NFx1MzA2RVx1MzA0NgpcdTMwNUZcdTMwNDRcdTMwNkZcdTMwOTMKXHUzMDVGXHUzMDk5XHUzMDQ0XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA1Rlx1MzA0NFx1MzA3NVx1MzA0NgpcdTMwNUZcdTMwNDRcdTMwNzhcdTMwOTMKXHUzMDVGXHUzMDQ0XHUzMDdCClx1MzA1Rlx1MzA0NFx1MzA3RVx1MzA2NFx1MzA2Rlx1MzA5OVx1MzA2QQpcdTMwNUZcdTMwNDRcdTMwN0ZcdTMwOTNcdTMwNEZcdTMwOTkKXHUzMDVGXHUzMDQ0XHUzMDgwClx1MzA1Rlx1MzA0NFx1MzA4MVx1MzA5MwpcdTMwNUZcdTMwNDRcdTMwODRcdTMwNEQKXHUzMDVGXHUzMDQ0XHUzMDg4XHUzMDQ2Clx1MzA1Rlx1MzA0NFx1MzA4OQpcdTMwNUZcdTMwNDRcdTMwOEFcdTMwODdcdTMwNEYKXHUzMDVGXHUzMDQ0XHUzMDhCClx1MzA1Rlx1MzA0NFx1MzA4Rlx1MzA5MwpcdTMwNUZcdTMwNDZcdTMwNDgKXHUzMDVGXHUzMDQ4XHUzMDhCClx1MzA1Rlx1MzA0QVx1MzA1OQpcdTMwNUZcdTMwNEFcdTMwOEIKXHUzMDVGXHUzMDRBXHUzMDhDXHUzMDhCClx1MzA1Rlx1MzA0Qlx1MzA0NApcdTMwNUZcdTMwNEJcdTMwNkQKXHUzMDVGXHUzMDREXHUzMDcyXHUzMDk5Clx1MzA1Rlx1MzA0Rlx1MzA1NVx1MzA5MwpcdTMwNUZcdTMwNTNcdTMwNEYKXHUzMDVGXHUzMDUzXHUzMDg0XHUzMDREClx1MzA1Rlx1MzA1NVx1MzA0NApcdTMwNUZcdTMwNTdcdTMwNTVcdTMwOTlcdTMwOTMKXHUzMDVGXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDgzXHUzMDhDClx1MzA1Rlx1MzA1OVx1MzA1MVx1MzA4QgpcdTMwNUZcdTMwNTlcdTMwOTlcdTMwNTVcdTMwOEZcdTMwOEIKXHUzMDVGXHUzMDVEXHUzMDRCXHUzMDk5XHUzMDhDClx1MzA1Rlx1MzA1Rlx1MzA0Qlx1MzA0NgpcdTMwNUZcdTMwNUZcdTMwNEYKXHUzMDVGXHUzMDVGXHUzMDk5XHUzMDU3XHUzMDQ0Clx1MzA1Rlx1MzA1Rlx1MzA3RgpcdTMwNUZcdTMwNjFcdTMwNkZcdTMwOTlcdTMwNkEKXHUzMDVGXHUzMDk5XHUzMDYzXHUzMDRCXHUzMDQ0Clx1MzA1Rlx1MzA5OVx1MzA2M1x1MzA0RFx1MzA4M1x1MzA0RgpcdTMwNUZcdTMwOTlcdTMwNjNcdTMwNTMKXHUzMDVGXHUzMDk5XHUzMDYzXHUzMDU3XHUzMDg1XHUzMDY0Clx1MzA1Rlx1MzA5OVx1MzA2M1x1MzA1Rlx1MzA0NApcdTMwNUZcdTMwNjZcdTMwOEIKXHUzMDVGXHUzMDY4XHUzMDQ4XHUzMDhCClx1MzA1Rlx1MzA2QVx1MzA2Rlx1MzA5OVx1MzA1RgpcdTMwNUZcdTMwNkJcdTMwOTMKXHUzMDVGXHUzMDZDXHUzMDREClx1MzA1Rlx1MzA2RVx1MzA1N1x1MzA3RgpcdTMwNUZcdTMwNkZcdTMwNjQKXHUzMDVGXHUzMDc1XHUzMDk5XHUzMDkzClx1MzA1Rlx1MzA3OFx1MzA5OVx1MzA4QgpcdTMwNUZcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDVGXHUzMDdFXHUzMDUzXHUzMDk5Clx1MzA1Rlx1MzA3RVx1MzA4QgpcdTMwNUZcdTMwOTlcdTMwODBcdTMwOEIKXHUzMDVGXHUzMDgxXHUzMDQ0XHUzMDREClx1MzA1Rlx1MzA4MVx1MzA1OQpcdTMwNUZcdTMwODFcdTMwOEIKXHUzMDVGXHUzMDgyXHUzMDY0Clx1MzA1Rlx1MzA4NFx1MzA1OVx1MzA0NApcdTMwNUZcdTMwODhcdTMwOEIKXHUzMDVGXHUzMDg5XHUzMDU5Clx1MzA1Rlx1MzA4QVx1MzA0RFx1MzA3Qlx1MzA5M1x1MzA0Qlx1MzA5OVx1MzA5MwpcdTMwNUZcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDVGXHUzMDhBXHUzMDhCClx1MzA1Rlx1MzA4Qlx1MzA2OApcdTMwNUZcdTMwOENcdTMwOEIKXHUzMDVGXHUzMDhDXHUzMDkzXHUzMDY4Clx1MzA1Rlx1MzA4RFx1MzA2M1x1MzA2OApcdTMwNUZcdTMwOEZcdTMwODBcdTMwOENcdTMwOEIKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDQyXHUzMDY0Clx1MzA1Rlx1MzA5M1x1MzA0NApcdTMwNUZcdTMwOTNcdTMwNEFcdTMwOTMKXHUzMDVGXHUzMDkzXHUzMDRCClx1MzA1Rlx1MzA5M1x1MzA0RApcdTMwNUZcdTMwOTNcdTMwNTFcdTMwOTMKXHUzMDVGXHUzMDkzXHUzMDUzXHUzMDk5Clx1MzA1Rlx1MzA5M1x1MzA1NVx1MzA5MwpcdTMwNUZcdTMwOTNcdTMwNTdcdTMwOTlcdTMwODdcdTMwNDZcdTMwNzJcdTMwOTkKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDVCXHUzMDQ0Clx1MzA1Rlx1MzA5M1x1MzA1RFx1MzA0RgpcdTMwNUZcdTMwOTNcdTMwNUZcdTMwNDQKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDYxClx1MzA1Rlx1MzA5M1x1MzA2Nlx1MzA0NApcdTMwNUZcdTMwOTNcdTMwNjhcdTMwNDYKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDZBClx1MzA1Rlx1MzA5M1x1MzA2Qlx1MzA5MwpcdTMwNUZcdTMwOTlcdTMwOTNcdTMwNkRcdTMwNjQKXHUzMDVGXHUzMDkzXHUzMDZFXHUzMDQ2Clx1MzA1Rlx1MzA5M1x1MzA3Mlx1MzA5QVx1MzA5MwpcdTMwNUZcdTMwOTlcdTMwOTNcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDVGXHUzMDkzXHUzMDdFXHUzMDY0Clx1MzA1Rlx1MzA5M1x1MzA4MVx1MzA0NApcdTMwNUZcdTMwOTlcdTMwOTNcdTMwOENcdTMwNjQKXHUzMDVGXHUzMDk5XHUzMDkzXHUzMDhEClx1MzA1Rlx1MzA5OVx1MzA5M1x1MzA4RgpcdTMwNjFcdTMwNDJcdTMwNDQKXHUzMDYxXHUzMDQyXHUzMDkzClx1MzA2MVx1MzA0NFx1MzA0RApcdTMwNjFcdTMwNDRcdTMwNTVcdTMwNDQKXHUzMDYxXHUzMDQ4XHUzMDkzClx1MzA2MVx1MzA0Qlx1MzA0NApcdTMwNjFcdTMwNEJcdTMwODkKXHUzMDYxXHUzMDREXHUzMDg1XHUzMDQ2Clx1MzA2MVx1MzA0RFx1MzA5MwpcdTMwNjFcdTMwNTFcdTMwNDRcdTMwNTlcdTMwOTkKXHUzMDYxXHUzMDUxXHUzMDkzClx1MzA2MVx1MzA1M1x1MzA0RgpcdTMwNjFcdTMwNTVcdTMwNDQKXHUzMDYxXHUzMDU3XHUzMDREClx1MzA2MVx1MzA1N1x1MzA4QVx1MzA4N1x1MzA0NgpcdTMwNjFcdTMwNUJcdTMwNDQKXHUzMDYxXHUzMDVEXHUzMDQ2Clx1MzA2MVx1MzA1Rlx1MzA0NApcdTMwNjFcdTMwNUZcdTMwOTMKXHUzMDYxXHUzMDYxXHUzMDRBXHUzMDg0Clx1MzA2MVx1MzA2NFx1MzA1N1x1MzA5OVx1MzA4NwpcdTMwNjFcdTMwNjZcdTMwNEQKXHUzMDYxXHUzMDY2XHUzMDkzClx1MzA2MVx1MzA2Q1x1MzA0RApcdTMwNjFcdTMwNkNcdTMwOEEKXHUzMDYxXHUzMDZFXHUzMDQ2Clx1MzA2MVx1MzA3Mlx1MzA4N1x1MzA0NgpcdTMwNjFcdTMwNzhcdTMwNDRcdTMwNUJcdTMwOTMKXHUzMDYxXHUzMDdCXHUzMDQ2Clx1MzA2MVx1MzA3RVx1MzA1RgpcdTMwNjFcdTMwN0ZcdTMwNjQKXHUzMDYxXHUzMDdGXHUzMDY4XHUzMDk5XHUzMDhEClx1MzA2MVx1MzA4MVx1MzA0NFx1MzA2OFx1MzA5OQpcdTMwNjFcdTMwODNcdTMwOTNcdTMwNTNcdTMwNkFcdTMwNzhcdTMwOTkKXHUzMDYxXHUzMDg1XHUzMDQ2XHUzMDQ0Clx1MzA2MVx1MzA4Nlx1MzA4QVx1MzA4N1x1MzA0RgpcdTMwNjFcdTMwODdcdTMwNDZcdTMwNTcKXHUzMDYxXHUzMDg3XHUzMDU1XHUzMDRGXHUzMDUxXHUzMDkzClx1MzA2MVx1MzA4OVx1MzA1NwpcdTMwNjFcdTMwODlcdTMwN0YKXHUzMDYxXHUzMDhBXHUzMDRCXHUzMDk5XHUzMDdGClx1MzA2MVx1MzA4QVx1MzA4N1x1MzA0NgpcdTMwNjFcdTMwOEJcdTMwNjhcdTMwOTkKXHUzMDYxXHUzMDhGXHUzMDhGClx1MzA2MVx1MzA5M1x1MzA1Rlx1MzA0NApcdTMwNjFcdTMwOTNcdTMwODJcdTMwNEYKXHUzMDY0XHUzMDQ0XHUzMDRCClx1MzA2NFx1MzA0NFx1MzA1Rlx1MzA2MQpcdTMwNjRcdTMwNDZcdTMwNEIKXHUzMDY0XHUzMDQ2XHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA2NFx1MzA0Nlx1MzA2Rlx1MzA5MwpcdTMwNjRcdTMwNDZcdTMwOEYKXHUzMDY0XHUzMDRCXHUzMDQ2Clx1MzA2NFx1MzA0Qlx1MzA4Q1x1MzA4QgpcdTMwNjRcdTMwNEZcdTMwNkQKXHUzMDY0XHUzMDRGXHUzMDhCClx1MzA2NFx1MzA1MVx1MzA2RApcdTMwNjRcdTMwNTFcdTMwOEIKXHUzMDY0XHUzMDUzXHUzMDk5XHUzMDQ2Clx1MzA2NFx1MzA1Rlx1MzA0OFx1MzA4QgpcdTMwNjRcdTMwNjRcdTMwOTlcdTMwNEYKXHUzMDY0XHUzMDY0XHUzMDU3XHUzMDk5Clx1MzA2NFx1MzA2NFx1MzA4MApcdTMwNjRcdTMwNjhcdTMwODFcdTMwOEIKXHUzMDY0XHUzMDZBXHUzMDRCXHUzMDk5XHUzMDhCClx1MzA2NFx1MzA2QVx1MzA3RgpcdTMwNjRcdTMwNkRcdTMwNjRcdTMwOTlcdTMwNkQKXHUzMDY0XHUzMDZFXHUzMDhCClx1MzA2NFx1MzA3NVx1MzA5OVx1MzA1OQpcdTMwNjRcdTMwN0VcdTMwODlcdTMwNkFcdTMwNDQKXHUzMDY0XHUzMDdFXHUzMDhCClx1MzA2NFx1MzA3Rlx1MzA0RApcdTMwNjRcdTMwODFcdTMwNUZcdTMwNDQKXHUzMDY0XHUzMDgyXHUzMDhBClx1MzA2NFx1MzA4Mlx1MzA4QgpcdTMwNjRcdTMwODhcdTMwNDQKXHUzMDY0XHUzMDhCXHUzMDdCXHUzMDk5Clx1MzA2NFx1MzA4Qlx1MzA3Rlx1MzA0RgpcdTMwNjRcdTMwOEZcdTMwODJcdTMwNkUKXHUzMDY0XHUzMDhGXHUzMDhBClx1MzA2Nlx1MzA0Mlx1MzA1NwpcdTMwNjZcdTMwNDJcdTMwNjYKXHUzMDY2XHUzMDQyXHUzMDdGClx1MzA2Nlx1MzA0NFx1MzA0QVx1MzA5MwpcdTMwNjZcdTMwNDRcdTMwNEIKXHUzMDY2XHUzMDQ0XHUzMDREClx1MzA2Nlx1MzA0NFx1MzA1MVx1MzA0NApcdTMwNjZcdTMwNDRcdTMwNTNcdTMwNEYKXHUzMDY2XHUzMDQ0XHUzMDU1XHUzMDY0Clx1MzA2Nlx1MzA0NFx1MzA1NwpcdTMwNjZcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDY2XHUzMDQ0XHUzMDVGXHUzMDQ0Clx1MzA2Nlx1MzA0NFx1MzA2OFx1MzA5OQpcdTMwNjZcdTMwNDRcdTMwNkRcdTMwNDQKXHUzMDY2XHUzMDQ0XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA2Nlx1MzA0NFx1MzA3OFx1MzA5MwpcdTMwNjZcdTMwNDRcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDY2XHUzMDQ2XHUzMDYxClx1MzA2Nlx1MzA0QVx1MzA0Rlx1MzA4QwpcdTMwNjZcdTMwNERcdTMwNjhcdTMwNDYKXHUzMDY2XHUzMDRGXHUzMDcyXHUzMDk5Clx1MzA2Nlx1MzA5OVx1MzA1M1x1MzA3Qlx1MzA5OVx1MzA1MwpcdTMwNjZcdTMwNTVcdTMwNERcdTMwOTlcdTMwODdcdTMwNDYKXHUzMDY2XHUzMDU1XHUzMDUxXHUzMDk5Clx1MzA2Nlx1MzA1OVx1MzA4QQpcdTMwNjZcdTMwNURcdTMwNDYKXHUzMDY2XHUzMDYxXHUzMDRCXHUzMDk5XHUzMDQ0Clx1MzA2Nlx1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNjZcdTMwNjRcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDY2XHUzMDY0XHUzMDY0XHUzMDk5XHUzMDREClx1MzA2Nlx1MzA5OVx1MzA2M1x1MzA2Rlx1MzA5QQpcdTMwNjZcdTMwNjRcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDY2XHUzMDY0XHUzMDg0Clx1MzA2Nlx1MzA5OVx1MzA2Q1x1MzA0Qlx1MzA0OApcdTMwNjZcdTMwNkNcdTMwNEQKXHUzMDY2XHUzMDZDXHUzMDRGXHUzMDk5XHUzMDQ0Clx1MzA2Nlx1MzA2RVx1MzA3Mlx1MzA4OQpcdTMwNjZcdTMwNkZcdTMwNDQKXHUzMDY2XHUzMDc1XHUzMDk5XHUzMDRGXHUzMDhEClx1MzA2Nlx1MzA3NVx1MzA1Rlx1MzA5OQpcdTMwNjZcdTMwN0JcdTMwNjhcdTMwOTlcdTMwNEQKXHUzMDY2XHUzMDdCXHUzMDkzClx1MzA2Nlx1MzA3RVx1MzA0OApcdTMwNjZcdTMwN0VcdTMwNERcdTMwNTlcdTMwOTlcdTMwNTcKXHUzMDY2XHUzMDdGXHUzMDU3XHUzMDk5XHUzMDRCClx1MzA2Nlx1MzA3Rlx1MzA4NFx1MzA1MVx1MzA5OQpcdTMwNjZcdTMwODlcdTMwNTkKXHUzMDY2XHUzMDhDXHUzMDcyXHUzMDk5Clx1MzA2Nlx1MzA4Rlx1MzA1MQpcdTMwNjZcdTMwOEZcdTMwNUZcdTMwNTcKXHUzMDY2XHUzMDk5XHUzMDkzXHUzMDQyXHUzMDY0Clx1MzA2Nlx1MzA5M1x1MzA0NFx1MzA5MwpcdTMwNjZcdTMwOTNcdTMwNEJcdTMwNDQKXHUzMDY2XHUzMDkzXHUzMDREClx1MzA2Nlx1MzA5M1x1MzA0Rlx1MzA5OQpcdTMwNjZcdTMwOTNcdTMwNTFcdTMwOTMKXHUzMDY2XHUzMDkzXHUzMDUzXHUzMDk5XHUzMDRGClx1MzA2Nlx1MzA5M1x1MzA1NVx1MzA0NApcdTMwNjZcdTMwOTNcdTMwNTcKXHUzMDY2XHUzMDkzXHUzMDU5XHUzMDQ2Clx1MzA2Nlx1MzA5OVx1MzA5M1x1MzA2MQpcdTMwNjZcdTMwOTNcdTMwNjZcdTMwNEQKXHUzMDY2XHUzMDkzXHUzMDY4XHUzMDQ2Clx1MzA2Nlx1MzA5M1x1MzA2QVx1MzA0NApcdTMwNjZcdTMwOTNcdTMwNzVcdTMwOUFcdTMwODkKXHUzMDY2XHUzMDkzXHUzMDdCXHUzMDk5XHUzMDQ2XHUzMDVGXHUzMDk5XHUzMDQ0Clx1MzA2Nlx1MzA5M1x1MzA4MVx1MzA2NApcdTMwNjZcdTMwOTNcdTMwODlcdTMwOTNcdTMwNEJcdTMwNDQKXHUzMDY2XHUzMDk5XHUzMDkzXHUzMDhBXHUzMDg3XHUzMDRGClx1MzA2Nlx1MzA5OVx1MzA5M1x1MzA4RgpcdTMwNjhcdTMwOTlcdTMwNDJcdTMwNDQKXHUzMDY4XHUzMDQ0XHUzMDhDClx1MzA2OFx1MzA5OVx1MzA0Nlx1MzA0Qlx1MzA5MwpcdTMwNjhcdTMwNDZcdTMwNERcdTMwODVcdTMwNDYKXHUzMDY4XHUzMDk5XHUzMDQ2XHUzMDRGXHUzMDk5Clx1MzA2OFx1MzA0Nlx1MzA1NwpcdTMwNjhcdTMwNDZcdTMwODBcdTMwNERcdTMwOTkKXHUzMDY4XHUzMDRBXHUzMDQ0Clx1MzA2OFx1MzA0QVx1MzA0QgpcdTMwNjhcdTMwNEFcdTMwNEYKXHUzMDY4XHUzMDRBXHUzMDU5Clx1MzA2OFx1MzA0QVx1MzA4QgpcdTMwNjhcdTMwNEJcdTMwNDQKXHUzMDY4XHUzMDRCXHUzMDU5Clx1MzA2OFx1MzA0RFx1MzA0QVx1MzA4QQpcdTMwNjhcdTMwNERcdTMwNjhcdTMwOTlcdTMwNEQKXHUzMDY4XHUzMDRGXHUzMDQ0Clx1MzA2OFx1MzA0Rlx1MzA1N1x1MzA4NVx1MzA0NgpcdTMwNjhcdTMwNEZcdTMwNjZcdTMwOTMKXHUzMDY4XHUzMDRGXHUzMDZCClx1MzA2OFx1MzA0Rlx1MzA3OFx1MzA5OVx1MzA2NApcdTMwNjhcdTMwNTFcdTMwNDQKXHUzMDY4XHUzMDUxXHUzMDhCClx1MzA2OFx1MzA1M1x1MzA4NApcdTMwNjhcdTMwNTVcdTMwNEIKXHUzMDY4XHUzMDU3XHUzMDg3XHUzMDRCXHUzMDkzClx1MzA2OFx1MzA1RFx1MzA0NgpcdTMwNjhcdTMwNUZcdTMwOTMKXHUzMDY4XHUzMDYxXHUzMDg1XHUzMDQ2Clx1MzA2OFx1MzA2M1x1MzA0RFx1MzA4NVx1MzA0NgpcdTMwNjhcdTMwNjNcdTMwNEZcdTMwOTMKXHUzMDY4XHUzMDY0XHUzMDVCXHUzMDk5XHUzMDkzClx1MzA2OFx1MzA2NFx1MzA2Qlx1MzA4NVx1MzA0NgpcdTMwNjhcdTMwNjhcdTMwOTlcdTMwNTFcdTMwOEIKXHUzMDY4XHUzMDY4XHUzMDZFXHUzMDQ4XHUzMDhCClx1MzA2OFx1MzA2QVx1MzA0NApcdTMwNjhcdTMwNkFcdTMwNDhcdTMwOEIKXHUzMDY4XHUzMDZBXHUzMDhBClx1MzA2OFx1MzA2RVx1MzA1NVx1MzA3RQpcdTMwNjhcdTMwNkZcdTMwOTlcdTMwNTkKXHUzMDY4XHUzMDk5XHUzMDc1XHUzMDk5XHUzMDRCXHUzMDk5XHUzMDhGClx1MzA2OFx1MzA3Qlx1MzA0NgpcdTMwNjhcdTMwN0VcdTMwOEIKXHUzMDY4XHUzMDgxXHUzMDhCClx1MzA2OFx1MzA4Mlx1MzA1Rlx1MzA5OVx1MzA2MQpcdTMwNjhcdTMwODJcdTMwOEIKXHUzMDY4XHUzMDk5XHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA2OFx1MzA4OVx1MzA0OFx1MzA4QgpcdTMwNjhcdTMwOTNcdTMwNEJcdTMwNjQKXHUzMDY4XHUzMDk5XHUzMDkzXHUzMDc1XHUzMDk5XHUzMDhBClx1MzA2QVx1MzA0NFx1MzA0Qlx1MzA0RgpcdTMwNkFcdTMwNDRcdTMwNTNcdTMwNDYKXHUzMDZBXHUzMDQ0XHUzMDU3XHUzMDg3Clx1MzA2QVx1MzA0NFx1MzA1OQpcdTMwNkFcdTMwNDRcdTMwNUJcdTMwOTMKXHUzMDZBXHUzMDQ0XHUzMDVEXHUzMDQ2Clx1MzA2QVx1MzA0QVx1MzA1OQpcdTMwNkFcdTMwNEJcdTMwOTlcdTMwNDQKXHUzMDZBXHUzMDRGXHUzMDU5Clx1MzA2QVx1MzA1MVx1MzA5OVx1MzA4QgpcdTMwNkFcdTMwNTNcdTMwNDZcdTMwNjhcdTMwOTkKXHUzMDZBXHUzMDU1XHUzMDUxClx1MzA2QVx1MzA1Rlx1MzA2Nlx1MzA5OVx1MzA1M1x1MzA1MwpcdTMwNkFcdTMwNjNcdTMwNjhcdTMwNDYKXHUzMDZBXHUzMDY0XHUzMDg0XHUzMDU5XHUzMDdGClx1MzA2QVx1MzA2QVx1MzA0QVx1MzA1NwpcdTMwNkFcdTMwNkJcdTMwNTNcdTMwOTlcdTMwNjgKXHUzMDZBXHUzMDZCXHUzMDgyXHUzMDZFClx1MzA2QVx1MzA2Qlx1MzA4RgpcdTMwNkFcdTMwNkVcdTMwNEIKXHUzMDZBXHUzMDc1XHUzMDVGXHUzMDk5Clx1MzA2QVx1MzA3RVx1MzA0NFx1MzA0RApcdTMwNkFcdTMwN0VcdTMwNDgKXHUzMDZBXHUzMDdFXHUzMDdGClx1MzA2QVx1MzA3Rlx1MzA1Rlx1MzA5OQpcdTMwNkFcdTMwODFcdTMwODlcdTMwNEIKXHUzMDZBXHUzMDgxXHUzMDhCClx1MzA2QVx1MzA4NFx1MzA4MApcdTMwNkFcdTMwODlcdTMwNDYKXHUzMDZBXHUzMDg5XHUzMDcyXHUzMDk5Clx1MzA2QVx1MzA4OVx1MzA3NVx1MzA5OQpcdTMwNkFcdTMwOENcdTMwOEIKXHUzMDZBXHUzMDhGXHUzMDY4XHUzMDcyXHUzMDk5Clx1MzA2QVx1MzA4Rlx1MzA2Rlx1MzA5OVx1MzA4QQpcdTMwNkJcdTMwNDJcdTMwNDYKXHUzMDZCXHUzMDQ0XHUzMDRCXHUzMDk5XHUzMDVGClx1MzA2Qlx1MzA0Nlx1MzA1MQpcdTMwNkJcdTMwNEFcdTMwNDQKXHUzMDZCXHUzMDRCXHUzMDQ0Clx1MzA2Qlx1MzA0Qlx1MzA5OVx1MzA2NgpcdTMwNkJcdTMwNERcdTMwNzJcdTMwOTkKXHUzMDZCXHUzMDRGXHUzMDU3XHUzMDdGClx1MzA2Qlx1MzA0Rlx1MzA3RVx1MzA5MwpcdTMwNkJcdTMwNTFcdTMwOTlcdTMwOEIKXHUzMDZCXHUzMDU1XHUzMDkzXHUzMDRCXHUzMDVGXHUzMDkzXHUzMDVEClx1MzA2Qlx1MzA1N1x1MzA0RApcdTMwNkJcdTMwNUJcdTMwODJcdTMwNkUKXHUzMDZCXHUzMDYxXHUzMDU3XHUzMDk5XHUzMDg3XHUzMDQ2Clx1MzA2Qlx1MzA2MVx1MzA4OFx1MzA0Nlx1MzA3Mlx1MzA5OQpcdTMwNkJcdTMwNjNcdTMwNEIKXHUzMDZCXHUzMDYzXHUzMDREClx1MzA2Qlx1MzA2M1x1MzA1MVx1MzA0NApcdTMwNkJcdTMwNjNcdTMwNTNcdTMwNDYKXHUzMDZCXHUzMDYzXHUzMDU1XHUzMDkzClx1MzA2Qlx1MzA2M1x1MzA1N1x1MzA4N1x1MzA0RgpcdTMwNkJcdTMwNjNcdTMwNTlcdTMwNDYKXHUzMDZCXHUzMDYzXHUzMDVCXHUzMDREClx1MzA2Qlx1MzA2M1x1MzA2Nlx1MzA0NApcdTMwNkJcdTMwNkFcdTMwNDYKXHUzMDZCXHUzMDdCXHUzMDkzClx1MzA2Qlx1MzA3RVx1MzA4MQpcdTMwNkJcdTMwODJcdTMwNjQKXHUzMDZCXHUzMDg0XHUzMDhBClx1MzA2Qlx1MzA4NVx1MzA0Nlx1MzA0NFx1MzA5MwpcdTMwNkJcdTMwOEFcdTMwOTNcdTMwNTdcdTMwODMKXHUzMDZCXHUzMDhGXHUzMDY4XHUzMDhBClx1MzA2Qlx1MzA5M1x1MzA0NApcdTMwNkJcdTMwOTNcdTMwNEIKXHUzMDZCXHUzMDkzXHUzMDREClx1MzA2Qlx1MzA5M1x1MzA1MVx1MzA5OVx1MzA5MwpcdTMwNkJcdTMwOTNcdTMwNTdcdTMwNEQKXHUzMDZCXHUzMDkzXHUzMDU5XHUzMDk5XHUzMDQ2Clx1MzA2Qlx1MzA5M1x1MzA1RFx1MzA0NgpcdTMwNkJcdTMwOTNcdTMwNUZcdTMwNDQKXHUzMDZCXHUzMDkzXHUzMDYxClx1MzA2Qlx1MzA5M1x1MzA2Nlx1MzA0NApcdTMwNkJcdTMwOTNcdTMwNkJcdTMwNEYKXHUzMDZCXHUzMDkzXHUzMDc1XHUzMDlBClx1MzA2Qlx1MzA5M1x1MzA3RVx1MzA4QQpcdTMwNkJcdTMwOTNcdTMwODAKXHUzMDZCXHUzMDkzXHUzMDgxXHUzMDQ0Clx1MzA2Qlx1MzA5M1x1MzA4OFx1MzA0NgpcdTMwNkNcdTMwNDRcdTMwNEZcdTMwNERcdTMwOTkKXHUzMDZDXHUzMDRCXHUzMDU5Clx1MzA2Q1x1MzA0Rlx1MzA5OVx1MzA0NFx1MzA2OFx1MzA4QgpcdTMwNkNcdTMwNEZcdTMwOTlcdTMwNDYKXHUzMDZDXHUzMDRGXHUzMDgyXHUzMDhBClx1MzA2Q1x1MzA1OVx1MzA4MApcdTMwNkNcdTMwN0VcdTMwNDhcdTMwNzJcdTMwOTkKXHUzMDZDXHUzMDgxXHUzMDhBClx1MzA2Q1x1MzA4OVx1MzA1OQpcdTMwNkNcdTMwOTNcdTMwNjFcdTMwODNcdTMwNEYKXHUzMDZEXHUzMDQyXHUzMDUxXHUzMDk5Clx1MzA2RFx1MzA0NFx1MzA0RApcdTMwNkRcdTMwNDRcdTMwOEIKXHUzMDZEXHUzMDQ0XHUzMDhEClx1MzA2RFx1MzA0Rlx1MzA5OVx1MzA1QgpcdTMwNkRcdTMwNEZcdTMwNUZcdTMwNDQKXHUzMDZEXHUzMDRGXHUzMDg5Clx1MzA2RFx1MzA1M1x1MzA1Qlx1MzA5OQpcdTMwNkRcdTMwNTNcdTMwODAKXHUzMDZEXHUzMDU1XHUzMDUxXHUzMDk5Clx1MzA2RFx1MzA1OVx1MzA1M1x1MzA5OVx1MzA1OQpcdTMwNkRcdTMwNURcdTMwNzhcdTMwOTlcdTMwOEIKXHUzMDZEXHUzMDVGXHUzMDk5XHUzMDkzClx1MzA2RFx1MzA2NFx1MzA0NApcdTMwNkRcdTMwNjNcdTMwNTdcdTMwOTMKXHUzMDZEXHUzMDY0XHUzMDVEXHUzMDk5XHUzMDQ2Clx1MzA2RFx1MzA2M1x1MzA1Rlx1MzA0NFx1MzA0RFx1MzA5OVx1MzA4NwpcdTMwNkRcdTMwNzVcdTMwOTlcdTMwNURcdTMwNEYKXHUzMDZEXHUzMDc1XHUzMDVGXHUzMDk5Clx1MzA2RFx1MzA3Qlx1MzA5OVx1MzA0NgpcdTMwNkRcdTMwN0JcdTMwOEFcdTMwNkZcdTMwN0JcdTMwOEEKXHUzMDZEXHUzMDdFXHUzMDREClx1MzA2RFx1MzA3RVx1MzA4Rlx1MzA1NwpcdTMwNkRcdTMwN0ZcdTMwN0YKXHUzMDZEXHUzMDgwXHUzMDQ0Clx1MzA2RFx1MzA4MFx1MzA1Rlx1MzA0NApcdTMwNkRcdTMwODJcdTMwNjgKXHUzMDZEXHUzMDg5XHUzMDQ2Clx1MzA2RFx1MzA4Rlx1MzA1NVx1MzA5OQpcdTMwNkRcdTMwOTNcdTMwNDRcdTMwOEEKXHUzMDZEXHUzMDkzXHUzMDRBXHUzMDU3Clx1MzA2RFx1MzA5M1x1MzA0Qlx1MzA5MwpcdTMwNkRcdTMwOTNcdTMwNERcdTMwOTMKXHUzMDZEXHUzMDkzXHUzMDRGXHUzMDk5Clx1MzA2RFx1MzA5M1x1MzA1NVx1MzA5OQpcdTMwNkRcdTMwOTNcdTMwNTcKXHUzMDZEXHUzMDkzXHUzMDYxXHUzMDgzXHUzMDRGClx1MzA2RFx1MzA5M1x1MzA2OFx1MzA5OQpcdTMwNkRcdTMwOTNcdTMwNzJcdTMwOUEKXHUzMDZEXHUzMDkzXHUzMDc1XHUzMDk5XHUzMDY0Clx1MzA2RFx1MzA5M1x1MzA3RVx1MzA2NApcdTMwNkRcdTMwOTNcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDZEXHUzMDkzXHUzMDhDXHUzMDQ0Clx1MzA2RVx1MzA0NFx1MzA1OVx1MzA5OQpcdTMwNkVcdTMwNEFcdTMwNjRcdTMwOTlcdTMwN0UKXHUzMDZFXHUzMDRCXHUzMDk5XHUzMDU5Clx1MzA2RVx1MzA0RFx1MzA2QVx1MzA3RgpcdTMwNkVcdTMwNTNcdTMwNERcdTMwOTlcdTMwOEEKXHUzMDZFXHUzMDUzXHUzMDU5Clx1MzA2RVx1MzA1M1x1MzA4QgpcdTMwNkVcdTMwNUJcdTMwOEIKXHUzMDZFXHUzMDVEXHUzMDk5XHUzMDRGClx1MzA2RVx1MzA1RFx1MzA5OVx1MzA4MApcdTMwNkVcdTMwNUZcdTMwN0VcdTMwNDYKXHUzMDZFXHUzMDYxXHUzMDdCXHUzMDY4XHUzMDk5Clx1MzA2RVx1MzA2M1x1MzA0RgpcdTMwNkVcdTMwNkZcdTMwOTlcdTMwNTkKXHUzMDZFXHUzMDZGXHUzMDg5Clx1MzA2RVx1MzA3OFx1MzA5OVx1MzA4QgpcdTMwNkVcdTMwN0JcdTMwOTlcdTMwOEIKXHUzMDZFXHUzMDdGXHUzMDgyXHUzMDZFClx1MzA2RVx1MzA4NFx1MzA3RQpcdTMwNkVcdTMwODlcdTMwNDRcdTMwNkMKXHUzMDZFXHUzMDg5XHUzMDZEXHUzMDUzClx1MzA2RVx1MzA4QVx1MzA4Mlx1MzA2RQpcdTMwNkVcdTMwOEFcdTMwODZcdTMwNEQKXHUzMDZFXHUzMDhDXHUzMDkzClx1MzA2RVx1MzA5M1x1MzA0RApcdTMwNkZcdTMwOTlcdTMwNDJcdTMwNDQKXHUzMDZGXHUzMDQyXHUzMDRGClx1MzA2Rlx1MzA5OVx1MzA0Mlx1MzA1NVx1MzA5MwpcdTMwNkZcdTMwOTlcdTMwNDRcdTMwNEIKXHUzMDZGXHUzMDk5XHUzMDQ0XHUzMDRGClx1MzA2Rlx1MzA0NFx1MzA1MVx1MzA5MwpcdTMwNkZcdTMwNDRcdTMwNTNcdTMwOTkKXHUzMDZGXHUzMDQ0XHUzMDU3XHUzMDkzClx1MzA2Rlx1MzA0NFx1MzA1OVx1MzA0NApcdTMwNkZcdTMwNDRcdTMwNUJcdTMwOTMKXHUzMDZGXHUzMDQ0XHUzMDVEXHUzMDQ2Clx1MzA2Rlx1MzA0NFx1MzA2MQpcdTMwNkZcdTMwOTlcdTMwNDRcdTMwNkZcdTMwOTlcdTMwNDQKXHUzMDZGXHUzMDQ0XHUzMDhDXHUzMDY0Clx1MzA2Rlx1MzA0OFx1MzA4QgpcdTMwNkZcdTMwNEFcdTMwOEIKXHUzMDZGXHUzMDRCXHUzMDQ0Clx1MzA2Rlx1MzA5OVx1MzA0Qlx1MzA4QQpcdTMwNkZcdTMwNEJcdTMwOEIKXHUzMDZGXHUzMDRGXHUzMDU3XHUzMDg1Clx1MzA2Rlx1MzA1MVx1MzA5MwpcdTMwNkZcdTMwNTNcdTMwNzVcdTMwOTkKXHUzMDZGXHUzMDU1XHUzMDdGClx1MzA2Rlx1MzA1NVx1MzA5MwpcdTMwNkZcdTMwNTdcdTMwNTNcdTMwOTkKXHUzMDZGXHUzMDk5XHUzMDU3XHUzMDg3Clx1MzA2Rlx1MzA1N1x1MzA4QgpcdTMwNkZcdTMwNUJcdTMwOEIKXHUzMDZGXHUzMDlBXHUzMDVEXHUzMDUzXHUzMDkzClx1MzA2Rlx1MzA1RFx1MzA5MwpcdTMwNkZcdTMwNUZcdTMwOTMKXHUzMDZGXHUzMDYxXHUzMDdGXHUzMDY0Clx1MzA2Rlx1MzA2NFx1MzA0QVx1MzA5MwpcdTMwNkZcdTMwNjNcdTMwNEJcdTMwNEYKXHUzMDZGXHUzMDY0XHUzMDk5XHUzMDREClx1MzA2Rlx1MzA2M1x1MzA0RFx1MzA4QQpcdTMwNkZcdTMwNjNcdTMwNEZcdTMwNjQKXHUzMDZGXHUzMDYzXHUzMDUxXHUzMDkzClx1MzA2Rlx1MzA2M1x1MzA1M1x1MzA0NgpcdTMwNkZcdTMwNjNcdTMwNTVcdTMwOTMKXHUzMDZGXHUzMDYzXHUzMDU3XHUzMDkzClx1MzA2Rlx1MzA2M1x1MzA1Rlx1MzA2NApcdTMwNkZcdTMwNjNcdTMwNjFcdTMwODVcdTMwNDYKXHUzMDZGXHUzMDYzXHUzMDY2XHUzMDkzClx1MzA2Rlx1MzA2M1x1MzA3Mlx1MzA5QVx1MzA4N1x1MzA0NgpcdTMwNkZcdTMwNjNcdTMwN0JcdTMwOUFcdTMwNDYKXHUzMDZGXHUzMDZBXHUzMDU5Clx1MzA2Rlx1MzA2QVx1MzA3Mlx1MzA5OQpcdTMwNkZcdTMwNkJcdTMwNEJcdTMwODAKXHUzMDZGXHUzMDc1XHUzMDk5XHUzMDg5XHUzMDU3Clx1MzA2Rlx1MzA3Rlx1MzA0Qlx1MzA5OVx1MzA0RApcdTMwNkZcdTMwODBcdTMwNEJcdTMwNDYKXHUzMDZGXHUzMDgxXHUzMDY0Clx1MzA2Rlx1MzA4NFx1MzA0NApcdTMwNkZcdTMwODRcdTMwNTcKXHUzMDZGXHUzMDg5XHUzMDQ2Clx1MzA2Rlx1MzA4RFx1MzA0Nlx1MzA0M1x1MzA5MwpcdTMwNkZcdTMwOEZcdTMwNDQKXHUzMDZGXHUzMDkzXHUzMDQ0Clx1MzA2Rlx1MzA5M1x1MzA0OFx1MzA0NApcdTMwNkZcdTMwOTNcdTMwNEFcdTMwOTMKXHUzMDZGXHUzMDkzXHUzMDRCXHUzMDRGClx1MzA2Rlx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0NgpcdTMwNkZcdTMwOTlcdTMwOTNcdTMwNEZcdTMwOTlcdTMwN0YKXHUzMDZGXHUzMDkzXHUzMDUzClx1MzA2Rlx1MzA5M1x1MzA1N1x1MzA4MwpcdTMwNkZcdTMwOTNcdTMwNTlcdTMwNDYKXHUzMDZGXHUzMDkzXHUzMDVGXHUzMDk5XHUzMDkzClx1MzA2Rlx1MzA5QVx1MzA5M1x1MzA2MQpcdTMwNkZcdTMwOUFcdTMwOTNcdTMwNjQKXHUzMDZGXHUzMDkzXHUzMDY2XHUzMDQ0Clx1MzA2Rlx1MzA5M1x1MzA2OFx1MzA1NwpcdTMwNkZcdTMwOTNcdTMwNkVcdTMwNDYKXHUzMDZGXHUzMDkzXHUzMDZGXHUzMDlBClx1MzA2Rlx1MzA5M1x1MzA3NVx1MzA5OVx1MzA5MwpcdTMwNkZcdTMwOTNcdTMwNzhcdTMwOUFcdTMwOTMKXHUzMDZGXHUzMDkzXHUzMDdCXHUzMDk5XHUzMDQ2XHUzMDREClx1MzA2Rlx1MzA5M1x1MzA4MVx1MzA0NApcdTMwNkZcdTMwOTNcdTMwODlcdTMwOTMKXHUzMDZGXHUzMDkzXHUzMDhEXHUzMDkzClx1MzA3Mlx1MzA0NFx1MzA0RApcdTMwNzJcdTMwNDZcdTMwOTMKXHUzMDcyXHUzMDQ4XHUzMDhCClx1MzA3Mlx1MzA0Qlx1MzA0RgpcdTMwNzJcdTMwNEJcdTMwOEEKXHUzMDcyXHUzMDRCXHUzMDhCClx1MzA3Mlx1MzA0Qlx1MzA5MwpcdTMwNzJcdTMwNEZcdTMwNDQKXHUzMDcyXHUzMDUxXHUzMDY0Clx1MzA3Mlx1MzA1M1x1MzA0Nlx1MzA0RApcdTMwNzJcdTMwNTNcdTMwNEYKXHUzMDcyXHUzMDU1XHUzMDQ0Clx1MzA3Mlx1MzA1NVx1MzA1N1x1MzA3NVx1MzA5OVx1MzA4QQpcdTMwNzJcdTMwNTVcdTMwOTMKXHUzMDcyXHUzMDk5XHUzMDU3XHUzMDk5XHUzMDg1XHUzMDY0XHUzMDRCXHUzMDkzClx1MzA3Mlx1MzA1N1x1MzA4NwpcdTMwNzJcdTMwNURcdTMwNEIKXHUzMDcyXHUzMDVEXHUzMDgwClx1MzA3Mlx1MzA1Rlx1MzA4MFx1MzA0RApcdTMwNzJcdTMwNUZcdTMwOTlcdTMwOEEKXHUzMDcyXHUzMDVGXHUzMDhCClx1MzA3Mlx1MzA2NFx1MzA0RFx1MzA5OQpcdTMwNzJcdTMwNjNcdTMwNTNcdTMwNTcKXHUzMDcyXHUzMDYzXHUzMDU3Clx1MzA3Mlx1MzA2NFx1MzA1N1x1MzA5OVx1MzA4NVx1MzA3Mlx1MzA5MwpcdTMwNzJcdTMwNjNcdTMwNTkKXHUzMDcyXHUzMDY0XHUzMDVCXHUzMDk5XHUzMDkzClx1MzA3Mlx1MzA5QVx1MzA2M1x1MzA1Rlx1MzA4QQpcdTMwNzJcdTMwOUFcdTMwNjNcdTMwNjFcdTMwOEEKXHUzMDcyXHUzMDY0XHUzMDg4XHUzMDQ2Clx1MzA3Mlx1MzA2Nlx1MzA0NApcdTMwNzJcdTMwNjhcdTMwNTNcdTMwOTlcdTMwN0YKXHUzMDcyXHUzMDZBXHUzMDdFXHUzMDY0XHUzMDhBClx1MzA3Mlx1MzA2QVx1MzA5MwpcdTMwNzJcdTMwNkRcdTMwOEIKXHUzMDcyXHUzMDZGXHUzMDkzClx1MzA3Mlx1MzA3Mlx1MzA5OVx1MzA0RgpcdTMwNzJcdTMwNzJcdTMwODdcdTMwNDYKXHUzMDcyXHUzMDdCXHUzMDQ2Clx1MzA3Mlx1MzA3RVx1MzA4Rlx1MzA4QQpcdTMwNzJcdTMwN0VcdTMwOTMKXHUzMDcyXHUzMDdGXHUzMDY0Clx1MzA3Mlx1MzA4MVx1MzA0NApcdTMwNzJcdTMwODFcdTMwNTdcdTMwOTlcdTMwNTcKXHUzMDcyXHUzMDg0XHUzMDUxClx1MzA3Mlx1MzA4NFx1MzA1OQpcdTMwNzJcdTMwODhcdTMwNDYKXHUzMDcyXHUzMDk5XHUzMDg3XHUzMDQ2XHUzMDREClx1MzA3Mlx1MzA4OVx1MzA0Qlx1MzA5OVx1MzA2QQpcdTMwNzJcdTMwODlcdTMwNEYKXHUzMDcyXHUzMDhBXHUzMDY0Clx1MzA3Mlx1MzA4QVx1MzA4N1x1MzA0NgpcdTMwNzJcdTMwOEJcdTMwN0UKXHUzMDcyXHUzMDhCXHUzMDg0XHUzMDU5XHUzMDdGClx1MzA3Mlx1MzA4Q1x1MzA0NApcdTMwNzJcdTMwOERcdTMwNDQKXHUzMDcyXHUzMDhEXHUzMDQ2Clx1MzA3Mlx1MzA4RFx1MzA0RApcdTMwNzJcdTMwOERcdTMwODZcdTMwNEQKXHUzMDcyXHUzMDkzXHUzMDRCXHUzMDRGClx1MzA3Mlx1MzA5M1x1MzA1MVx1MzA2NApcdTMwNzJcdTMwOTNcdTMwNTNcdTMwOTMKXHUzMDcyXHUzMDkzXHUzMDU3XHUzMDg1Clx1MzA3Mlx1MzA5M1x1MzA1RFx1MzA0NgpcdTMwNzJcdTMwOUFcdTMwOTNcdTMwNjEKXHUzMDcyXHUzMDkzXHUzMDZGXHUzMDlBXHUzMDkzClx1MzA3Mlx1MzA5OVx1MzA5M1x1MzA3Qlx1MzA5OVx1MzA0NgpcdTMwNzVcdTMwNDJcdTMwOTMKXHUzMDc1XHUzMDQ0XHUzMDQ2XHUzMDYxClx1MzA3NVx1MzA0Nlx1MzA1MVx1MzA0NApcdTMwNzVcdTMwNDZcdTMwNUJcdTMwOTMKXHUzMDc1XHUzMDlBXHUzMDQ2XHUzMDVGXHUzMDhEXHUzMDQ2Clx1MzA3NVx1MzA0Nlx1MzA2OFx1MzA0NgpcdTMwNzVcdTMwNDZcdTMwNzUKXHUzMDc1XHUzMDQ4XHUzMDhCClx1MzA3NVx1MzA0QVx1MzA5MwpcdTMwNzVcdTMwNEJcdTMwNDQKXHUzMDc1XHUzMDREXHUzMDkzClx1MzA3NVx1MzA0Rlx1MzA1NVx1MzA5OVx1MzA2NApcdTMwNzVcdTMwNEZcdTMwNzVcdTMwOTlcdTMwNEZcdTMwOEQKXHUzMDc1XHUzMDUzXHUzMDQ2Clx1MzA3NVx1MzA1NVx1MzA0NApcdTMwNzVcdTMwNTdcdTMwNERcdTMwOTkKXHUzMDc1XHUzMDU3XHUzMDk5XHUzMDdGClx1MzA3NVx1MzA1OVx1MzA3RQpcdTMwNzVcdTMwNUJcdTMwNDQKXHUzMDc1XHUzMDVCXHUzMDRGXHUzMDk5Clx1MzA3NVx1MzA1RFx1MzA0RgpcdTMwNzVcdTMwOTlcdTMwNUZcdTMwNkJcdTMwNEYKXHUzMDc1XHUzMDVGXHUzMDkzClx1MzA3NVx1MzA2MVx1MzA4N1x1MzA0NgpcdTMwNzVcdTMwNjRcdTMwNDYKXHUzMDc1XHUzMDY0XHUzMDRCClx1MzA3NVx1MzA2M1x1MzA0Qlx1MzA2NApcdTMwNzVcdTMwNjNcdTMwNEQKXHUzMDc1XHUzMDYzXHUzMDUzXHUzMDRGClx1MzA3NVx1MzA5OVx1MzA2OFx1MzA5OVx1MzA0NgpcdTMwNzVcdTMwNjhcdTMwOEIKXHUzMDc1XHUzMDY4XHUzMDkzClx1MzA3NVx1MzA2RVx1MzA0NgpcdTMwNzVcdTMwNkZcdTMwNDQKXHUzMDc1XHUzMDcyXHUzMDg3XHUzMDQ2Clx1MzA3NVx1MzA3OFx1MzA5MwpcdTMwNzVcdTMwN0VcdTMwOTMKXHUzMDc1XHUzMDdGXHUzMDkzClx1MzA3NVx1MzA4MVx1MzA2NApcdTMwNzVcdTMwODFcdTMwOTMKXHUzMDc1XHUzMDg4XHUzMDQ2Clx1MzA3NVx1MzA4QVx1MzA1MwpcdTMwNzVcdTMwOEFcdTMwOEIKXHUzMDc1XHUzMDhCXHUzMDQ0Clx1MzA3NVx1MzA5M1x1MzA0NFx1MzA0RApcdTMwNzVcdTMwOTlcdTMwOTNcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDc1XHUzMDk5XHUzMDkzXHUzMDRGXHUzMDk5Clx1MzA3NVx1MzA5M1x1MzA1N1x1MzA2NApcdTMwNzVcdTMwOTlcdTMwOTNcdTMwNUJcdTMwNEQKXHUzMDc1XHUzMDkzXHUzMDVEXHUzMDQ2Clx1MzA3NVx1MzA5OVx1MzA5M1x1MzA3Qlx1MzA5QVx1MzA0NgpcdTMwNzhcdTMwNDRcdTMwNDJcdTMwOTMKXHUzMDc4XHUzMDQ0XHUzMDRBXHUzMDkzClx1MzA3OFx1MzA0NFx1MzA0Qlx1MzA5OVx1MzA0NApcdTMwNzhcdTMwNDRcdTMwNEQKXHUzMDc4XHUzMDQ0XHUzMDUxXHUzMDk5XHUzMDkzClx1MzA3OFx1MzA0NFx1MzA1M1x1MzA0NgpcdTMwNzhcdTMwNDRcdTMwNTUKXHUzMDc4XHUzMDQ0XHUzMDU3XHUzMDgzClx1MzA3OFx1MzA0NFx1MzA1Qlx1MzA2NApcdTMwNzhcdTMwNDRcdTMwNUQKXHUzMDc4XHUzMDQ0XHUzMDVGXHUzMDRGClx1MzA3OFx1MzA0NFx1MzA2Nlx1MzA5MwpcdTMwNzhcdTMwNDRcdTMwNkRcdTMwNjQKXHUzMDc4XHUzMDQ0XHUzMDhGClx1MzA3OFx1MzA0RFx1MzA0Qlx1MzA5OQpcdTMwNzhcdTMwNTNcdTMwODAKXHUzMDc4XHUzMDk5XHUzMDZCXHUzMDQ0XHUzMDhEClx1MzA3OFx1MzA5OVx1MzA2Qlx1MzA1N1x1MzA4N1x1MzA0Nlx1MzA0Qlx1MzA5OQpcdTMwNzhcdTMwODlcdTMwNTkKXHUzMDc4XHUzMDkzXHUzMDRCXHUzMDkzClx1MzA3OFx1MzA5OVx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0NgpcdTMwNzhcdTMwOTlcdTMwOTNcdTMwNTNcdTMwOTlcdTMwNTcKXHUzMDc4XHUzMDkzXHUzMDU1XHUzMDQ0Clx1MzA3OFx1MzA5M1x1MzA1Rlx1MzA0NApcdTMwNzhcdTMwOTlcdTMwOTNcdTMwOEEKXHUzMDdCXHUzMDQyXHUzMDkzClx1MzA3Qlx1MzA0NFx1MzA0RgpcdTMwN0JcdTMwOTlcdTMwNDZcdTMwNERcdTMwOTlcdTMwODcKXHUzMDdCXHUzMDQ2XHUzMDUzXHUzMDRGClx1MzA3Qlx1MzA0Nlx1MzA1RFx1MzA0NgpcdTMwN0JcdTMwNDZcdTMwN0JcdTMwNDYKXHUzMDdCXHUzMDQ2XHUzMDgyXHUzMDkzClx1MzA3Qlx1MzA0Nlx1MzA4QVx1MzA2NApcdTMwN0JcdTMwNDhcdTMwOEIKXHUzMDdCXHUzMDRBXHUzMDkzClx1MzA3Qlx1MzA0Qlx1MzA5MwpcdTMwN0JcdTMwNERcdTMwODdcdTMwNDYKXHUzMDdCXHUzMDk5XHUzMDREXHUzMDkzClx1MzA3Qlx1MzA0Rlx1MzA4RApcdTMwN0JcdTMwNTFcdTMwNjQKXHUzMDdCXHUzMDUxXHUzMDkzClx1MzA3Qlx1MzA1M1x1MzA0NgpcdTMwN0JcdTMwNTNcdTMwOEIKXHUzMDdCXHUzMDU3XHUzMDQ0Clx1MzA3Qlx1MzA1N1x1MzA2NApcdTMwN0JcdTMwNTdcdTMwODUKXHUzMDdCXHUzMDU3XHUzMDg3XHUzMDQ2Clx1MzA3Qlx1MzA1Qlx1MzA0NApcdTMwN0JcdTMwNURcdTMwNDQKXHUzMDdCXHUzMDVEXHUzMDRGClx1MzA3Qlx1MzA1Rlx1MzA2NgpcdTMwN0JcdTMwNUZcdTMwOEIKXHUzMDdCXHUzMDlBXHUzMDYxXHUzMDc1XHUzMDk5XHUzMDRGXHUzMDhEClx1MzA3Qlx1MzA2M1x1MzA0RFx1MzA4N1x1MzA0RgpcdTMwN0JcdTMwNjNcdTMwNTUKXHUzMDdCXHUzMDYzXHUzMDVGXHUzMDkzClx1MzA3Qlx1MzA2OFx1MzA5M1x1MzA2OFx1MzA5OQpcdTMwN0JcdTMwODFcdTMwOEIKXHUzMDdCXHUzMDkzXHUzMDQ0Clx1MzA3Qlx1MzA5M1x1MzA0RApcdTMwN0JcdTMwOTNcdTMwNTEKXHUzMDdCXHUzMDkzXHUzMDU3XHUzMDY0Clx1MzA3Qlx1MzA5M1x1MzA4NFx1MzA0RgpcdTMwN0VcdTMwNDRcdTMwNkJcdTMwNjEKXHUzMDdFXHUzMDRCXHUzMDQ0Clx1MzA3RVx1MzA0Qlx1MzA1Qlx1MzA4QgpcdTMwN0VcdTMwNEJcdTMwOTlcdTMwOEIKXHUzMDdFXHUzMDUxXHUzMDhCClx1MzA3RVx1MzA1M1x1MzA2OApcdTMwN0VcdTMwNTVcdTMwNjQKXHUzMDdFXHUzMDU3XHUzMDk5XHUzMDgxClx1MzA3RVx1MzA1OVx1MzA0RgpcdTMwN0VcdTMwNUJcdTMwOTlcdTMwOEIKXHUzMDdFXHUzMDY0XHUzMDhBClx1MzA3RVx1MzA2OFx1MzA4MQpcdTMwN0VcdTMwNkFcdTMwNzVcdTMwOTkKXHUzMDdFXHUzMDZDXHUzMDUxClx1MzA3RVx1MzA2RFx1MzA0RgpcdTMwN0VcdTMwN0JcdTMwNDYKXHUzMDdFXHUzMDgyXHUzMDhCClx1MzA3RVx1MzA4Nlx1MzA1MVx1MzA5OQpcdTMwN0VcdTMwODhcdTMwNDYKXHUzMDdFXHUzMDhEXHUzMDg0XHUzMDRCClx1MzA3RVx1MzA4Rlx1MzA1OQpcdTMwN0VcdTMwOEZcdTMwOEEKXHUzMDdFXHUzMDhGXHUzMDhCClx1MzA3RVx1MzA5M1x1MzA0Qlx1MzA5OQpcdTMwN0VcdTMwOTNcdTMwNERcdTMwNjQKXHUzMDdFXHUzMDkzXHUzMDVEXHUzMDk5XHUzMDRGClx1MzA3RVx1MzA5M1x1MzA2QVx1MzA0QgpcdTMwN0ZcdTMwNDRcdTMwODkKXHUzMDdGXHUzMDQ2XHUzMDYxClx1MzA3Rlx1MzA0OFx1MzA4QgpcdTMwN0ZcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDdGXHUzMDRCXHUzMDVGClx1MzA3Rlx1MzA0Qlx1MzA5MwpcdTMwN0ZcdTMwNTFcdTMwOTMKXHUzMDdGXHUzMDUzXHUzMDkzClx1MzA3Rlx1MzA1N1x1MzA5OVx1MzA0Qlx1MzA0NApcdTMwN0ZcdTMwNTlcdTMwNDQKXHUzMDdGXHUzMDU5XHUzMDQ4XHUzMDhCClx1MzA3Rlx1MzA1Qlx1MzA4QgpcdTMwN0ZcdTMwNjNcdTMwNEIKXHUzMDdGXHUzMDY0XHUzMDRCXHUzMDhCClx1MzA3Rlx1MzA2NFx1MzA1MVx1MzA4QgpcdTMwN0ZcdTMwNjZcdTMwNDQKXHUzMDdGXHUzMDY4XHUzMDgxXHUzMDhCClx1MzA3Rlx1MzA2QVx1MzA2OApcdTMwN0ZcdTMwNkFcdTMwN0ZcdTMwNEJcdTMwNTVcdTMwNDQKXHUzMDdGXHUzMDZEXHUzMDg5XHUzMDhCClx1MzA3Rlx1MzA2RVx1MzA0NgpcdTMwN0ZcdTMwNkVcdTMwNEJcdTMwOTlcdTMwNTkKXHUzMDdGXHUzMDdCXHUzMDkzClx1MzA3Rlx1MzA4Mlx1MzA2OApcdTMwN0ZcdTMwODRcdTMwNTFcdTMwOTkKXHUzMDdGXHUzMDg5XHUzMDQ0Clx1MzA3Rlx1MzA4QVx1MzA4N1x1MzA0RgpcdTMwN0ZcdTMwOEZcdTMwNEYKXHUzMDdGXHUzMDkzXHUzMDRCClx1MzA3Rlx1MzA5M1x1MzA1RFx1MzA5OVx1MzA0RgpcdTMwODBcdTMwNDRcdTMwNEIKXHUzMDgwXHUzMDQ4XHUzMDREClx1MzA4MFx1MzA0OFx1MzA5MwpcdTMwODBcdTMwNEJcdTMwNDQKXHUzMDgwXHUzMDRCXHUzMDQ2Clx1MzA4MFx1MzA0Qlx1MzA0OApcdTMwODBcdTMwNEJcdTMwNTcKXHUzMDgwXHUzMDREXHUzMDk5XHUzMDYxXHUzMDgzClx1MzA4MFx1MzA1MVx1MzA4QgpcdTMwODBcdTMwNTFcdTMwOTlcdTMwOTMKXHUzMDgwXHUzMDU1XHUzMDdCXHUzMDk5XHUzMDhCClx1MzA4MFx1MzA1N1x1MzA0Mlx1MzA2NFx1MzA0NApcdTMwODBcdTMwNTdcdTMwNkZcdTMwOTkKXHUzMDgwXHUzMDU3XHUzMDk5XHUzMDg1XHUzMDkzClx1MzA4MFx1MzA1N1x1MzA4RApcdTMwODBcdTMwNTlcdTMwNDYKXHUzMDgwXHUzMDU5XHUzMDUzClx1MzA4MFx1MzA1OVx1MzA3NVx1MzA5OQpcdTMwODBcdTMwNTlcdTMwODEKXHUzMDgwXHUzMDVCXHUzMDhCClx1MzA4MFx1MzA1Qlx1MzA5MwpcdTMwODBcdTMwNjFcdTMwODVcdTMwNDYKXHUzMDgwXHUzMDZBXHUzMDU3XHUzMDQ0Clx1MzA4MFx1MzA2RVx1MzA0NgpcdTMwODBcdTMwODRcdTMwN0YKXHUzMDgwXHUzMDg4XHUzMDQ2Clx1MzA4MFx1MzA4OVx1MzA1NVx1MzA0RApcdTMwODBcdTMwOEFcdTMwODdcdTMwNDYKXHUzMDgwXHUzMDhEXHUzMDkzClx1MzA4MVx1MzA0NFx1MzA0Mlx1MzA5MwpcdTMwODFcdTMwNDRcdTMwNDZcdTMwOTMKXHUzMDgxXHUzMDQ0XHUzMDQ4XHUzMDkzClx1MzA4MVx1MzA0NFx1MzA0Qlx1MzA0RgpcdTMwODFcdTMwNDRcdTMwNERcdTMwODdcdTMwNEYKXHUzMDgxXHUzMDQ0XHUzMDU1XHUzMDQ0Clx1MzA4MVx1MzA0NFx1MzA1NwpcdTMwODFcdTMwNDRcdTMwNURcdTMwNDYKXHUzMDgxXHUzMDQ0XHUzMDc1XHUzMDk5XHUzMDY0Clx1MzA4MVx1MzA0NFx1MzA4Q1x1MzA0NApcdTMwODFcdTMwNDRcdTMwOEZcdTMwNEYKXHUzMDgxXHUzMDRGXHUzMDk5XHUzMDdFXHUzMDhDXHUzMDhCClx1MzA4MVx1MzA1NVx1MzA5OVx1MzA1OQpcdTMwODFcdTMwNTdcdTMwNUYKXHUzMDgxXHUzMDU5XHUzMDk5XHUzMDg5XHUzMDU3XHUzMDQ0Clx1MzA4MVx1MzA1Rlx1MzA5OVx1MzA2NApcdTMwODFcdTMwN0VcdTMwNDQKXHUzMDgxXHUzMDg0XHUzMDU5Clx1MzA4MVx1MzA5M1x1MzA0RFx1MzA4NwpcdTMwODFcdTMwOTNcdTMwNUJcdTMwNEQKXHUzMDgxXHUzMDkzXHUzMDY4XHUzMDk5XHUzMDQ2Clx1MzA4Mlx1MzA0Nlx1MzA1N1x1MzA0Mlx1MzA1MVx1MzA5OVx1MzA4QgpcdTMwODJcdTMwNDZcdTMwNjhcdTMwOTlcdTMwNDZcdTMwNTFcdTMwOTMKXHUzMDgyXHUzMDQ4XHUzMDhCClx1MzA4Mlx1MzA0Rlx1MzA1NwpcdTMwODJcdTMwNEZcdTMwNjZcdTMwNEQKXHUzMDgyXHUzMDRGXHUzMDg4XHUzMDQ2XHUzMDcyXHUzMDk5Clx1MzA4Mlx1MzA2MVx1MzA4RFx1MzA5MwpcdTMwODJcdTMwNjhcdTMwOTlcdTMwOEIKXHUzMDgyXHUzMDg5XHUzMDQ2Clx1MzA4Mlx1MzA5M1x1MzA0RgpcdTMwODJcdTMwOTNcdTMwNUZcdTMwOTlcdTMwNDQKXHUzMDg0XHUzMDRBXHUzMDg0Clx1MzA4NFx1MzA1MVx1MzA4QgpcdTMwODRcdTMwNTVcdTMwNDQKXHUzMDg0XHUzMDU1XHUzMDU3XHUzMDQ0Clx1MzA4NFx1MzA1OVx1MzA0NApcdTMwODRcdTMwNTlcdTMwNUZcdTMwOERcdTMwNDYKXHUzMDg0XHUzMDU5XHUzMDdGClx1MzA4NFx1MzA1Qlx1MzA4QgpcdTMwODRcdTMwNURcdTMwNDYKXHUzMDg0XHUzMDVGXHUzMDQ0Clx1MzA4NFx1MzA2MVx1MzA5MwpcdTMwODRcdTMwNjNcdTMwNjgKXHUzMDg0XHUzMDYzXHUzMDZGXHUzMDlBXHUzMDhBClx1MzA4NFx1MzA3NVx1MzA5OVx1MzA4QgpcdTMwODRcdTMwODFcdTMwOEIKXHUzMDg0XHUzMDg0XHUzMDUzXHUzMDU3XHUzMDQ0Clx1MzA4NFx1MzA4OFx1MzA0NApcdTMwODRcdTMwOEZcdTMwODlcdTMwNEJcdTMwNDQKXHUzMDg2XHUzMDQ2XHUzMDREClx1MzA4Nlx1MzA0Nlx1MzA3Mlx1MzA5OVx1MzA5M1x1MzA0RFx1MzA4N1x1MzA0RgpcdTMwODZcdTMwNDZcdTMwNzhcdTMwOTkKXHUzMDg2XHUzMDQ2XHUzMDgxXHUzMDQ0Clx1MzA4Nlx1MzA1MVx1MzA2NApcdTMwODZcdTMwNTdcdTMwODVcdTMwNjQKXHUzMDg2XHUzMDVCXHUzMDkzClx1MzA4Nlx1MzA1RFx1MzA0NgpcdTMwODZcdTMwNUZcdTMwNEIKXHUzMDg2XHUzMDYxXHUzMDgzXHUzMDRGClx1MzA4Nlx1MzA2Nlx1MzA5OVx1MzA4QgpcdTMwODZcdTMwNkJcdTMwODVcdTMwNDYKXHUzMDg2XHUzMDcyXHUzMDk5XHUzMDhGClx1MzA4Nlx1MzA4OVx1MzA0NApcdTMwODZcdTMwOENcdTMwOEIKXHUzMDg4XHUzMDQ2XHUzMDQ0Clx1MzA4OFx1MzA0Nlx1MzA0QgpcdTMwODhcdTMwNDZcdTMwNERcdTMwODVcdTMwNDYKXHUzMDg4XHUzMDQ2XHUzMDU3XHUzMDk5Clx1MzA4OFx1MzA0Nlx1MzA1OQpcdTMwODhcdTMwNDZcdTMwNjFcdTMwNDhcdTMwOTMKXHUzMDg4XHUzMDRCXHUzMDVCXHUzMDk5Clx1MzA4OFx1MzA0Qlx1MzA5MwpcdTMwODhcdTMwNERcdTMwOTMKXHUzMDg4XHUzMDRGXHUzMDVCXHUzMDQ0Clx1MzA4OFx1MzA0Rlx1MzA3Qlx1MzA5OVx1MzA0NgpcdTMwODhcdTMwNTFcdTMwNDQKXHUzMDg4XHUzMDUzXHUzMDk5XHUzMDhDXHUzMDhCClx1MzA4OFx1MzA1NVx1MzA5MwpcdTMwODhcdTMwNTdcdTMwODVcdTMwNDYKXHUzMDg4XHUzMDVEXHUzMDQ2Clx1MzA4OFx1MzA1RFx1MzA0RgpcdTMwODhcdTMwNjNcdTMwNEIKXHUzMDg4XHUzMDY2XHUzMDQ0Clx1MzA4OFx1MzA2OFx1MzA5OVx1MzA0Qlx1MzA5OVx1MzA4Rlx1MzA0RgpcdTMwODhcdTMwNkRcdTMwNjQKXHUzMDg4XHUzMDg0XHUzMDRGClx1MzA4OFx1MzA4Nlx1MzA0NgpcdTMwODhcdTMwOERcdTMwNTNcdTMwNzVcdTMwOTkKXHUzMDg4XHUzMDhEXHUzMDU3XHUzMDQ0Clx1MzA4OVx1MzA0NFx1MzA0NgpcdTMwODlcdTMwNEZcdTMwNEJcdTMwOTlcdTMwNEQKXHUzMDg5XHUzMDRGXHUzMDUzXHUzMDk5Clx1MzA4OVx1MzA0Rlx1MzA1NVx1MzA2NApcdTMwODlcdTMwNEZcdTMwNUZcdTMwOTkKXHUzMDg5XHUzMDU3XHUzMDkzXHUzMDZGXHUzMDk5XHUzMDkzClx1MzA4OVx1MzA1Qlx1MzA5MwpcdTMwODlcdTMwNURcdTMwOTlcdTMwNEYKXHUzMDg5XHUzMDVGXHUzMDQ0Clx1MzA4OVx1MzA2M1x1MzA0QgpcdTMwODlcdTMwOENcdTMwNjQKXHUzMDhBXHUzMDQ4XHUzMDREClx1MzA4QVx1MzA0Qlx1MzA0NApcdTMwOEFcdTMwNERcdTMwNTVcdTMwNEYKXHUzMDhBXHUzMDREXHUzMDVCXHUzMDY0Clx1MzA4QVx1MzA0Rlx1MzA0Rlx1MzA5OVx1MzA5MwpcdTMwOEFcdTMwNEZcdTMwNjQKXHUzMDhBXHUzMDUxXHUzMDkzClx1MzA4QVx1MzA1M1x1MzA0NgpcdTMwOEFcdTMwNUJcdTMwNDQKXHUzMDhBXHUzMDVEXHUzMDQ2Clx1MzA4QVx1MzA1RFx1MzA0RgpcdTMwOEFcdTMwNjZcdTMwOTMKXHUzMDhBXHUzMDZEXHUzMDkzClx1MzA4QVx1MzA4Nlx1MzA0NgpcdTMwOEFcdTMwODVcdTMwNDZcdTMwNEJcdTMwOTlcdTMwNEYKXHUzMDhBXHUzMDg4XHUzMDQ2Clx1MzA4QVx1MzA4N1x1MzA0Nlx1MzA4QQpcdTMwOEFcdTMwODdcdTMwNEJcdTMwOTMKXHUzMDhBXHUzMDg3XHUzMDRGXHUzMDYxXHUzMDgzClx1MzA4QVx1MzA4N1x1MzA1M1x1MzA0NgpcdTMwOEFcdTMwOEFcdTMwNEYKXHUzMDhBXHUzMDhDXHUzMDREClx1MzA4QVx1MzA4RFx1MzA5MwpcdTMwOEFcdTMwOTNcdTMwNTNcdTMwOTkKXHUzMDhCXHUzMDQ0XHUzMDUxXHUzMDQ0Clx1MzA4Qlx1MzA0NFx1MzA1NVx1MzA0NApcdTMwOEJcdTMwNDRcdTMwNTdcdTMwOTkKXHUzMDhCXHUzMDQ0XHUzMDVCXHUzMDREClx1MzA4Qlx1MzA1OVx1MzA2Rlx1MzA5OVx1MzA5MwpcdTMwOEJcdTMwOEFcdTMwNEJcdTMwOTlcdTMwOEZcdTMwODkKXHUzMDhDXHUzMDQ0XHUzMDRCXHUzMDkzClx1MzA4Q1x1MzA0NFx1MzA0RFx1MzA5OQpcdTMwOENcdTMwNDRcdTMwNUJcdTMwNDQKXHUzMDhDXHUzMDQ0XHUzMDVEXHUzMDk5XHUzMDQ2XHUzMDUzClx1MzA4Q1x1MzA0NFx1MzA2OFx1MzA0NgpcdTMwOENcdTMwNDRcdTMwN0JcdTMwOTlcdTMwNDYKXHUzMDhDXHUzMDREXHUzMDU3Clx1MzA4Q1x1MzA0RFx1MzA1Rlx1MzA5OVx1MzA0NApcdTMwOENcdTMwOTNcdTMwNDJcdTMwNDQKXHUzMDhDXHUzMDkzXHUzMDUxXHUzMDQ0Clx1MzA4Q1x1MzA5M1x1MzA1M1x1MzA5MwpcdTMwOENcdTMwOTNcdTMwNTVcdTMwNDQKXHUzMDhDXHUzMDkzXHUzMDU3XHUzMDg1XHUzMDQ2Clx1MzA4Q1x1MzA5M1x1MzA1RFx1MzA5OVx1MzA0RgpcdTMwOENcdTMwOTNcdTMwODlcdTMwNEYKXHUzMDhEXHUzMDQ2XHUzMDRCClx1MzA4RFx1MzA0Nlx1MzA1M1x1MzA5OQpcdTMwOERcdTMwNDZcdTMwNTdcdTMwOTlcdTMwOTMKXHUzMDhEXHUzMDQ2XHUzMDVEXHUzMDRGClx1MzA4RFx1MzA0Rlx1MzA0Qlx1MzA5OQpcdTMwOERcdTMwNTNcdTMwNjQKXHUzMDhEXHUzMDU3XHUzMDk5XHUzMDQ2XHUzMDg5Clx1MzA4RFx1MzA1N1x1MzA4NVx1MzA2NApcdTMwOERcdTMwNUJcdTMwOTMKXHUzMDhEXHUzMDY2XHUzMDkzClx1MzA4RFx1MzA4MVx1MzA5MwpcdTMwOERcdTMwOENcdTMwNjQKXHUzMDhEXHUzMDkzXHUzMDREXHUzMDk5Clx1MzA4RFx1MzA5M1x1MzA2Rlx1MzA5QQpcdTMwOERcdTMwOTNcdTMwNzVcdTMwOTlcdTMwOTMKXHUzMDhEXHUzMDkzXHUzMDhBClx1MzA4Rlx1MzA0Qlx1MzA1OQpcdTMwOEZcdTMwNEJcdTMwODEKXHUzMDhGXHUzMDRCXHUzMDg0XHUzMDdFClx1MzA4Rlx1MzA0Qlx1MzA4Q1x1MzA4QgpcdTMwOEZcdTMwNTdcdTMwNjQKXHUzMDhGXHUzMDU3XHUzMDk5XHUzMDdFXHUzMDU3Clx1MzA4Rlx1MzA1OVx1MzA4Q1x1MzA4Mlx1MzA2RQpcdTMwOEZcdTMwODlcdTMwNDYKXHUzMDhGXHUzMDhDXHUzMDhCYC5zcGxpdCgiXG4iKTsKCiAgLy8gbm9kZV9tb2R1bGVzL0BzY3VyZS9iaXAzOS9lc20vd29yZGxpc3RzL2tvcmVhbi5qcwogIHZhciB3b3JkbGlzdDYgPSBgXHUxMTAwXHUxMTYxXHUxMTAwXHUxMTY3XHUxMUE4Clx1MTEwMFx1MTE2MVx1MTEwMVx1MTE3M1x1MTFCNwpcdTExMDBcdTExNjFcdTExMDJcdTExNjFcdTExQUIKXHUxMTAwXHUxMTYxXHUxMTAyXHUxMTczXHUxMUJDClx1MTEwMFx1MTE2MVx1MTEwM1x1MTE3M1x1MTFBOApcdTExMDBcdTExNjFcdTExMDVcdTExNzNcdTExMEVcdTExNzVcdTExQjcKXHUxMTAwXHUxMTYxXHUxMTA2XHUxMTZFXHUxMUI3Clx1MTEwMFx1MTE2MVx1MTEwN1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNjFcdTExMDlcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMTA5XHUxMTczXHUxMUI3Clx1MTEwMFx1MTE2MVx1MTEwQlx1MTE2RVx1MTFBQlx1MTEwM1x1MTE2NgpcdTExMDBcdTExNjFcdTExMEJcdTExNzNcdTExQUYKXHUxMTAwXHUxMTYxXHUxMTBCXHUxMTc1XHUxMTAzXHUxMTczClx1MTEwMFx1MTE2MVx1MTEwQlx1MTE3NVx1MTFCOApcdTExMDBcdTExNjFcdTExMENcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwMFx1MTE2MVx1MTEwQ1x1MTE2OVx1MTFBOApcdTExMDBcdTExNjFcdTExMENcdTExNkVcdTExQTgKXHUxMTAwXHUxMTYxXHUxMUE4XHUxMTBCXHUxMTY5Clx1MTEwMFx1MTE2MVx1MTFBOFx1MTEwQ1x1MTE2MQpcdTExMDBcdTExNjFcdTExQUJcdTExMDBcdTExNjdcdTExQTgKXHUxMTAwXHUxMTYxXHUxMUFCXHUxMTA3XHUxMTZFClx1MTEwMFx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2NVx1MTFCOApcdTExMDBcdTExNjFcdTExQUJcdTExMENcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUI4Clx1MTEwMFx1MTE2MVx1MTFBQlx1MTExMVx1MTE2MVx1MTFBQgpcdTExMDBcdTExNjFcdTExQUZcdTExMDNcdTExNzNcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUFGXHUxMTA3XHUxMTc1Clx1MTEwMFx1MTE2MVx1MTFBRlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDBcdTExNjFcdTExQUZcdTExMENcdTExNzNcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUI3XHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwMFx1MTE2MVx1MTFCN1x1MTEwMFx1MTE3NQpcdTExMDBcdTExNjFcdTExQjdcdTExMDlcdTExNjkKXHUxMTAwXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTZFXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwMFx1MTE2MVx1MTFCN1x1MTEwQ1x1MTE2MQpcdTExMDBcdTExNjFcdTExQjdcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUI4XHUxMTBDXHUxMTYxXHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwMlx1MTE2MVx1MTFCNwpcdTExMDBcdTExNjFcdTExQkNcdTExMDNcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTAzXHUxMTY5Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwNVx1MTE2N1x1MTFBOFx1MTExMlx1MTE3NQpcdTExMDBcdTExNjFcdTExQkNcdTExMDdcdTExNjdcdTExQUIKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTA3XHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMDBcdTExNjFcdTExQkNcdTExMDlcdTExNkVcdTExMDVcdTExNjNcdTExQkMKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTBCXHUxMTYxXHUxMTBDXHUxMTc1Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2Rlx1MTFBQlx1MTEwM1x1MTE2OQpcdTExMDBcdTExNjFcdTExQkNcdTExMEJcdTExNzQKXHUxMTAwXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY2Clx1MTEwMFx1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE2OQpcdTExMDBcdTExNjFcdTExQzBcdTExMEJcdTExNzUKXHUxMTAwXHUxMTYyXHUxMTAwXHUxMTZFXHUxMTA1XHUxMTc1Clx1MTEwMFx1MTE2Mlx1MTEwMlx1MTE2MVx1MTEwNVx1MTE3NQpcdTExMDBcdTExNjJcdTExMDdcdTExNjFcdTExQkMKXHUxMTAwXHUxMTYyXHUxMTA3XHUxMTY3XHUxMUFGClx1MTEwMFx1MTE2Mlx1MTEwOVx1MTE2NVx1MTFBQgpcdTExMDBcdTExNjJcdTExMDlcdTExNjVcdTExQkMKXHUxMTAwXHUxMTYyXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwMFx1MTE2Mlx1MTFBOFx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDBcdTExNjVcdTExMDlcdTExNzVcdTExQUYKXHUxMTAwXHUxMTY1XHUxMTBCXHUxMTYyXHUxMUE4Clx1MTEwMFx1MTE2NVx1MTEwQlx1MTE2RVx1MTFBRgpcdTExMDBcdTExNjVcdTExMENcdTExNzVcdTExQkEKXHUxMTAwXHUxMTY1XHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwMFx1MTE2NVx1MTFBOFx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMDBcdTExNjVcdTExQUJcdTExMDBcdTExNjFcdTExQkMKXHUxMTAwXHUxMTY1XHUxMUFCXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwMFx1MTE2NVx1MTFBQlx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMDBcdTExNjVcdTExQUJcdTExMENcdTExNjkKXHUxMTAwXHUxMTY1XHUxMUFCXHUxMTBFXHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE2NVx1MTFBRlx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDBcdTExNjVcdTExQjdcdTExMDlcdTExNjEKXHUxMTAwXHUxMTY1XHUxMUI3XHUxMTEwXHUxMTY5Clx1MTEwMFx1MTE2Nlx1MTEwOVx1MTE3NVx1MTExMVx1MTE2MVx1MTFBQgpcdTExMDBcdTExNjZcdTExMEJcdTExNzVcdTExQjcKXHUxMTAwXHUxMTY3XHUxMTBCXHUxMTZFXHUxMUFGClx1MTEwMFx1MTE2N1x1MTFBQlx1MTExMlx1MTE2MgpcdTExMDBcdTExNjdcdTExQUZcdTExMDBcdTExNkEKXHUxMTAwXHUxMTY3XHUxMUFGXHUxMTAwXHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE2N1x1MTFBRlx1MTEwNVx1MTE2OVx1MTFBQgpcdTExMDBcdTExNjdcdTExQUZcdTExMDlcdTExNjVcdTExQTgKXHUxMTAwXHUxMTY3XHUxMUFGXHUxMTA5XHUxMTczXHUxMUJDClx1MTEwMFx1MTE2N1x1MTFBRlx1MTEwOVx1MTE3NVx1MTFCNwpcdTExMDBcdTExNjdcdTExQUZcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTY3XHUxMUFGXHUxMTEyXHUxMTY5XHUxMUFCClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwMFx1MTE2OApcdTExMDBcdTExNjdcdTExQkNcdTExMDBcdTExNjkKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwNVx1MTE2N1x1MTFBOApcdTExMDBcdTExNjdcdTExQkNcdTExMDdcdTExNjlcdTExQThcdTExMDBcdTExNkVcdTExQkMKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTA3XHUxMTc1Clx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwM1x1MTE2OQpcdTExMDBcdTExNjdcdTExQkNcdTExMEJcdTExNjdcdTExQkMKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTBCXHUxMTZFClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwQ1x1MTE2Mlx1MTFCQwpcdTExMDBcdTExNjdcdTExQkNcdTExMENcdTExNjYKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTBDXHUxMTZFClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTEwRVx1MTE2MVx1MTFBRgpcdTExMDBcdTExNjdcdTExQkNcdTExMEVcdTExNzUKXHUxMTAwXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTYzXHUxMUJDClx1MTEwMFx1MTE2N1x1MTFCQ1x1MTExMlx1MTE2NVx1MTFCNwpcdTExMDBcdTExNjhcdTExMDBcdTExNjlcdTExQTgKXHUxMTAwXHUxMTY4XHUxMTAzXHUxMTYxXHUxMUFCClx1MTEwMFx1MTE2OFx1MTEwNVx1MTE2MVx1MTFBQgpcdTExMDBcdTExNjhcdTExMDlcdTExNjFcdTExQUIKXHUxMTAwXHUxMTY4XHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwMFx1MTE2OFx1MTEwQlx1MTE2M1x1MTFBOApcdTExMDBcdTExNjhcdTExMENcdTExNjVcdTExQUYKXHUxMTAwXHUxMTY4XHUxMTBFXHUxMTczXHUxMUJDClx1MTEwMFx1MTE2OFx1MTExMlx1MTE2Q1x1MTFBOApcdTExMDBcdTExNjlcdTExMDBcdTExNjJcdTExQTgKXHUxMTAwXHUxMTY5XHUxMTAwXHUxMTZFXHUxMTA1XHUxMTY3Clx1MTEwMFx1MTE2OVx1MTEwMFx1MTE2RVx1MTFCQwpcdTExMDBcdTExNjlcdTExMDBcdTExNzNcdTExQjgKXHUxMTAwXHUxMTY5XHUxMTAzXHUxMTczXHUxMUJDXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwMFx1MTE2OVx1MTEwNlx1MTE2RVx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMDBcdTExNjlcdTExMDZcdTExNzVcdTExQUIKXHUxMTAwXHUxMTY5XHUxMTBCXHUxMTYzXHUxMUJDXHUxMTBCXHUxMTc1Clx1MTEwMFx1MTE2OVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNjlcdTExMENcdTExNjVcdTExQUIKXHUxMTAwXHUxMTY5XHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwMFx1MTE2OVx1MTEwRVx1MTE2RVx1MTFCQVx1MTEwMFx1MTE2MVx1MTEwNVx1MTE2RQpcdTExMDBcdTExNjlcdTExMTBcdTExNjlcdTExQkMKXHUxMTAwXHUxMTY5XHUxMTEyXHUxMTYzXHUxMUJDClx1MTEwMFx1MTE2OVx1MTFBOFx1MTEwOVx1MTE3NVx1MTFBOApcdTExMDBcdTExNjlcdTExQUZcdTExMDZcdTExNjlcdTExQTgKXHUxMTAwXHUxMTY5XHUxMUFGXHUxMTBEXHUxMTYxXHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2OVx1MTFBRlx1MTExMVx1MTE3MwpcdTExMDBcdTExNjlcdTExQkNcdTExMDBcdTExNjFcdTExQUIKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTAwXHUxMTYyClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwMFx1MTE2N1x1MTFBOApcdTExMDBcdTExNjlcdTExQkNcdTExMDBcdTExNkVcdTExQUIKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTAwXHUxMTczXHUxMUI4Clx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwMFx1MTE3NQpcdTExMDBcdTExNjlcdTExQkNcdTExMDNcdTExNjlcdTExQkMKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTA2XHUxMTZFXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwN1x1MTE2RQpcdTExMDBcdTExNjlcdTExQkNcdTExMDlcdTExNjEKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwQlx1MTE2NVx1MTFCOApcdTExMDBcdTExNjlcdTExQkNcdTExMEJcdTExNjdcdTExQUIKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNjlcdTExQkNcdTExMERcdTExNjEKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTBFXHUxMTYyXHUxMUE4Clx1MTEwMFx1MTE2OVx1MTFCQ1x1MTExMFx1MTE2OVx1MTFCQwpcdTExMDBcdTExNjlcdTExQkNcdTExMTFcdTExNjkKXHUxMTAwXHUxMTY5XHUxMUJDXHUxMTEyXHUxMTYxXHUxMUJDClx1MTEwMFx1MTE2OVx1MTFCQ1x1MTExMlx1MTE3Mlx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMDBcdTExNkFcdTExMDZcdTExNjlcdTExQTgKXHUxMTAwXHUxMTZBXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwMFx1MTE2QVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNkFcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTZBXHUxMTEyXHUxMTYxXHUxMUE4Clx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwMFx1MTE2Mlx1MTFBOApcdTExMDBcdTExNkFcdTExQUJcdTExMDBcdTExNjgKXHUxMTAwXHUxMTZBXHUxMUFCXHUxMTAwXHUxMTZBXHUxMUJDClx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwMlx1MTE2N1x1MTFCNwpcdTExMDBcdTExNkFcdTExQUJcdTExMDVcdTExNjFcdTExQjcKXHUxMTAwXHUxMTZBXHUxMUFCXHUxMTA1XHUxMTY3XHUxMUFCClx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwNVx1MTE3NQpcdTExMDBcdTExNkFcdTExQUJcdTExMDlcdTExNzNcdTExQjgKXHUxMTAwXHUxMTZBXHUxMUFCXHUxMTA5XHUxMTc1XHUxMUI3Clx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDBcdTExNkFcdTExQUJcdTExMEVcdTExNjFcdTExQUYKXHUxMTAwXHUxMTZBXHUxMUJDXHUxMTAwXHUxMTY3XHUxMUJDClx1MTEwMFx1MTE2QVx1MTFCQ1x1MTEwMFx1MTE2OQpcdTExMDBcdTExNkFcdTExQkNcdTExMENcdTExNjFcdTExQkMKXHUxMTAwXHUxMTZBXHUxMUJDXHUxMTBDXHUxMTZFClx1MTEwMFx1MTE2Q1x1MTEwNVx1MTE2OVx1MTEwQlx1MTE2RVx1MTFCNwpcdTExMDBcdTExNkNcdTExQkNcdTExMENcdTExNjFcdTExQkNcdTExMTJcdTExNzUKXHUxMTAwXHUxMTZEXHUxMTAwXHUxMTZBXHUxMTA5XHUxMTY1Clx1MTEwMFx1MTE2RFx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMDBcdTExNkRcdTExMDdcdTExNjlcdTExQTgKXHUxMTAwXHUxMTZEXHUxMTA5XHUxMTc1XHUxMUFGClx1MTEwMFx1MTE2RFx1MTEwQlx1MTE2M1x1MTFCQwpcdTExMDBcdTExNkRcdTExMEJcdTExNzJcdTExQTgKXHUxMTAwXHUxMTZEXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwMFx1MTE2RFx1MTEwQ1x1MTE3NVx1MTFBOApcdTExMDBcdTExNkRcdTExMTBcdTExNjlcdTExQkMKXHUxMTAwXHUxMTZEXHUxMTEyXHUxMTZBXHUxMUFCClx1MTEwMFx1MTE2RFx1MTExMlx1MTE2RVx1MTFBQgpcdTExMDBcdTExNkVcdTExMDBcdTExNjdcdTExQkMKXHUxMTAwXHUxMTZFXHUxMTA1XHUxMTczXHUxMUI3Clx1MTEwMFx1MTE2RVx1MTEwNlx1MTE2NVx1MTFCQwpcdTExMDBcdTExNkVcdTExMDdcdTExNjdcdTExQUYKXHUxMTAwXHUxMTZFXHUxMTA3XHUxMTZFXHUxMUFCClx1MTEwMFx1MTE2RVx1MTEwOVx1MTE2NVx1MTFBOApcdTExMDBcdTExNkVcdTExMDlcdTExNjVcdTExQkMKXHUxMTAwXHUxMTZFXHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwMFx1MTE2RVx1MTEwQlx1MTE2N1x1MTFBOApcdTExMDBcdTExNkVcdTExMEJcdTExNzVcdTExQjgKXHUxMTAwXHUxMTZFXHUxMTBFXHUxMTY1XHUxMUJDClx1MTEwMFx1MTE2RVx1MTEwRVx1MTE2Nlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDBcdTExNkVcdTExQThcdTExMDBcdTExNjEKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTAwXHUxMTc1Clx1MTEwMFx1MTE2RVx1MTFBOFx1MTEwMlx1MTE2MgpcdTExMDBcdTExNkVcdTExQThcdTExMDVcdTExNzVcdTExQjgKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwMFx1MTE2RVx1MTFBOFx1MTEwNlx1MTE3NVx1MTFBQgpcdTExMDBcdTExNkVcdTExQThcdTExMDlcdTExNkUKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTBCXHUxMTY1Clx1MTEwMFx1MTE2RVx1MTFBOFx1MTEwQlx1MTE2QVx1MTFCQwpcdTExMDBcdTExNkVcdTExQThcdTExMENcdTExNjVcdTExQTgKXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTBDXHUxMTY2Clx1MTEwMFx1MTE2RVx1MTFBOFx1MTExMlx1MTE2QwpcdTExMDBcdTExNkVcdTExQUJcdTExMDNcdTExNjIKXHUxMTAwXHUxMTZFXHUxMUFCXHUxMTA5XHUxMTYxClx1MTEwMFx1MTE2RVx1MTFBQlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDBcdTExNkVcdTExQkNcdTExMDBcdTExNzNcdTExQThcdTExMENcdTExNjVcdTExQTgKXHUxMTAwXHUxMTZGXHUxMUFCXHUxMTA1XHUxMTc1Clx1MTEwMFx1MTE2Rlx1MTFBQlx1MTEwQlx1MTE3MQpcdTExMDBcdTExNkZcdTExQUJcdTExMTBcdTExNkUKXHUxMTAwXHUxMTcxXHUxMTAwXHUxMTZFXHUxMUE4Clx1MTEwMFx1MTE3MVx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMDBcdTExNzJcdTExMENcdTExNjVcdTExQkMKXHUxMTAwXHUxMTcyXHUxMTBFXHUxMTc1XHUxMUE4Clx1MTEwMFx1MTE3Mlx1MTFBQlx1MTExMlx1MTE2N1x1MTFCQwpcdTExMDBcdTExNzNcdTExMDJcdTExNjFcdTExQUYKXHUxMTAwXHUxMTczXHUxMTAyXHUxMTYzXHUxMUJDClx1MTEwMFx1MTE3M1x1MTEwMlx1MTE3M1x1MTFBRgpcdTExMDBcdTExNzNcdTExMDVcdTExNjVcdTExMDJcdTExNjEKXHUxMTAwXHUxMTczXHUxMTA1XHUxMTZFXHUxMUI4Clx1MTEwMFx1MTE3M1x1MTEwNVx1MTE3M1x1MTFCQQpcdTExMDBcdTExNzNcdTExMDVcdTExNzVcdTExQjcKXHUxMTAwXHUxMTczXHUxMTBDXHUxMTY2XHUxMTA5XHUxMTY1XHUxMTBCXHUxMTYzClx1MTEwMFx1MTE3M1x1MTExMFx1MTE2OVx1MTEwNVx1MTE2OVx1MTFBOApcdTExMDBcdTExNzNcdTExQThcdTExMDdcdTExNjlcdTExQTgKXHUxMTAwXHUxMTczXHUxMUE4XHUxMTEyXHUxMTc1Clx1MTEwMFx1MTE3M1x1MTFBQlx1MTEwMFx1MTE2NQpcdTExMDBcdTExNzNcdTExQUJcdTExMDBcdTExNkQKXHUxMTAwXHUxMTczXHUxMUFCXHUxMTA1XHUxMTYyClx1MTEwMFx1MTE3M1x1MTFBQlx1MTEwNVx1MTE2OQpcdTExMDBcdTExNzNcdTExQUJcdTExMDZcdTExNkUKXHUxMTAwXHUxMTczXHUxMUFCXHUxMTA3XHUxMTY5XHUxMUFCClx1MTEwMFx1MTE3M1x1MTFBQlx1MTEwQlx1MTE2Rlx1MTFBQgpcdTExMDBcdTExNzNcdTExQUJcdTExMEJcdTExNzJcdTExQTgKXHUxMTAwXHUxMTczXHUxMUFCXHUxMTBFXHUxMTY1Clx1MTEwMFx1MTE3M1x1MTFBRlx1MTEwQVx1MTE3NQpcdTExMDBcdTExNzNcdTExQUZcdTExMENcdTExNjEKXHUxMTAwXHUxMTczXHUxMUI3XHUxMTAwXHUxMTYxXHUxMUJDXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwMFx1MTE2OQpcdTExMDBcdTExNzNcdTExQjdcdTExMDJcdTExNjdcdTExQUIKXHUxMTAwXHUxMTczXHUxMUI3XHUxMTA2XHUxMTY2XHUxMTAzXHUxMTYxXHUxMUFGClx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwQlx1MTE2Mlx1MTFBOApcdTExMDBcdTExNzNcdTExQjdcdTExMEJcdTExNjdcdTExQUIKXHUxMTAwXHUxMTczXHUxMUI3XHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwQ1x1MTE3NQpcdTExMDBcdTExNzNcdTExQkNcdTExMENcdTExNjVcdTExQkNcdTExMENcdTExNjVcdTExQTgKXHUxMTAwXHUxMTc1XHUxMTAwXHUxMTYxXHUxMUFCClx1MTEwMFx1MTE3NVx1MTEwMFx1MTE2QVx1MTFBQgpcdTExMDBcdTExNzVcdTExMDJcdTExNjdcdTExQjcKXHUxMTAwXHUxMTc1XHUxMTAyXHUxMTczXHUxMUJDClx1MTEwMFx1MTE3NVx1MTEwM1x1MTE2OVx1MTFBOFx1MTEwMFx1MTE2RApcdTExMDBcdTExNzVcdTExMDNcdTExNkVcdTExQkMKXHUxMTAwXHUxMTc1XHUxMTA1XHUxMTY5XHUxMUE4Clx1MTEwMFx1MTE3NVx1MTEwNVx1MTE3M1x1MTFCNwpcdTExMDBcdTExNzVcdTExMDdcdTExNjVcdTExQjgKXHUxMTAwXHUxMTc1XHUxMTA3XHUxMTY5XHUxMUFCClx1MTEwMFx1MTE3NVx1MTEwN1x1MTE2RVx1MTFBQgpcdTExMDBcdTExNzVcdTExMDhcdTExNzNcdTExQjcKXHUxMTAwXHUxMTc1XHUxMTA5XHUxMTZFXHUxMUE4XHUxMTA5XHUxMTYxClx1MTEwMFx1MTE3NVx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMDBcdTExNzVcdTExMEJcdTExNjVcdTExQTgKXHUxMTAwXHUxMTc1XHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwMFx1MTE3NVx1MTEwQlx1MTE2OVx1MTFBQgpcdTExMDBcdTExNzVcdTExMEJcdTExNkVcdTExQUIKXHUxMTAwXHUxMTc1XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwMFx1MTE3NVx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDBcdTExNzVcdTExMENcdTExNkVcdTExQUIKXHUxMTAwXHUxMTc1XHUxMTBFXHUxMTc1XHUxMUI3Clx1MTEwMFx1MTE3NVx1MTExMlx1MTE2OVx1MTFBQgpcdTExMDBcdTExNzVcdTExMTJcdTExNkNcdTExQTgKXHUxMTAwXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTczXHUxMUI4Clx1MTEwMFx1MTE3NVx1MTFBQlx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDBcdTExNzVcdTExQUZcdTExMEJcdTExNzUKXHUxMTAwXHUxMTc1XHUxMUI3XHUxMTA3XHUxMTYxXHUxMUI4Clx1MTEwMFx1MTE3NVx1MTFCN1x1MTEwRVx1MTE3NQpcdTExMDBcdTExNzVcdTExQjdcdTExMTFcdTExNjlcdTExMDBcdTExNjlcdTExQkNcdTExMTJcdTExNjFcdTExQkMKXHUxMTAxXHUxMTYxXHUxMUE4XHUxMTAzXHUxMTZFXHUxMTAwXHUxMTc1Clx1MTEwMVx1MTE2MVx1MTFCN1x1MTEwOFx1MTE2MVx1MTFBOApcdTExMDFcdTExNjJcdTExMDNcdTExNjFcdTExQUZcdTExMEJcdTExNzNcdTExQjcKXHUxMTAxXHUxMTYyXHUxMTA5XHUxMTY5XHUxMTAwXHUxMTczXHUxMUI3Clx1MTEwMVx1MTE2NVx1MTFCOFx1MTEwQ1x1MTE3NVx1MTFBRgpcdTExMDFcdTExNjlcdTExQThcdTExMDNcdTExNjJcdTExMDBcdTExNzUKXHUxMTAxXHUxMTY5XHUxMUJFXHUxMTBCXHUxMTc1XHUxMUMxClx1MTEwMlx1MTE2MVx1MTEwM1x1MTE3M1x1MTFBRlx1MTEwQlx1MTE3NQpcdTExMDJcdTExNjFcdTExMDVcdTExNjFcdTExQUJcdTExMTJcdTExNzUKXHUxMTAyXHUxMTYxXHUxMTA2XHUxMTY1XHUxMTBDXHUxMTc1Clx1MTEwMlx1MTE2MVx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDJcdTExNjFcdTExMEVcdTExNzVcdTExQjdcdTExMDdcdTExNjFcdTExQUIKXHUxMTAyXHUxMTYxXHUxMTEyXHUxMTczXHUxMUFGClx1MTEwMlx1MTE2MVx1MTFBOFx1MTEwQlx1MTE2N1x1MTFCOApcdTExMDJcdTExNjFcdTExQUJcdTExMDdcdTExNjFcdTExQkMKXHUxMTAyXHUxMTYxXHUxMUFGXHUxMTAwXHUxMTYyClx1MTEwMlx1MTE2MVx1MTFBRlx1MTEwQVx1MTE3NQpcdTExMDJcdTExNjFcdTExQUZcdTExMERcdTExNjEKXHUxMTAyXHUxMTYxXHUxMUI3XHUxMTAyXHUxMTY3Clx1MTEwMlx1MTE2MVx1MTFCN1x1MTEwM1x1MTE2Mlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMDJcdTExNjFcdTExQjdcdTExMDZcdTExNjIKXHUxMTAyXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwMlx1MTE2MVx1MTFCN1x1MTEwQ1x1MTE2MQpcdTExMDJcdTExNjFcdTExQjdcdTExMTFcdTExNjdcdTExQUIKXHUxMTAyXHUxMTYxXHUxMUI3XHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwMlx1MTE2MVx1MTFCQ1x1MTEwN1x1MTE3NQpcdTExMDJcdTExNjFcdTExQzBcdTExMDZcdTExNjFcdTExQUYKXHUxMTAyXHUxMTYyXHUxMTAyXHUxMTY3XHUxMUFCClx1MTEwMlx1MTE2Mlx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDJcdTExNjJcdTExMEJcdTExNzVcdTExQUYKXHUxMTAyXHUxMTYyXHUxMUI3XHUxMTA3XHUxMTc1Clx1MTEwMlx1MTE2Mlx1MTFCN1x1MTEwOVx1MTE2MgpcdTExMDJcdTExNjJcdTExQkFcdTExMDZcdTExNkVcdTExQUYKXHUxMTAyXHUxMTYyXHUxMUJDXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwMlx1MTE2Mlx1MTFCQ1x1MTEwNlx1MTE2N1x1MTFBQgpcdTExMDJcdTExNjJcdTExQkNcdTExMDdcdTExNjFcdTExQkMKXHUxMTAyXHUxMTYyXHUxMUJDXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTY5Clx1MTEwMlx1MTE2Nlx1MTFBOFx1MTExMFx1MTE2MVx1MTEwQlx1MTE3NQpcdTExMDJcdTExNjZcdTExQkFcdTExMERcdTExNjIKXHUxMTAyXHUxMTY5XHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwMlx1MTE2OVx1MTEwNVx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDJcdTExNjlcdTExMDVcdTExNjdcdTExQTgKXHUxMTAyXHUxMTY5XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwMlx1MTE2OVx1MTFBOFx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDJcdTExNjlcdTExQThcdTExMEVcdTExNjEKXHUxMTAyXHUxMTY5XHUxMUE4XHUxMTEyXHUxMTZBClx1MTEwMlx1MTE2OVx1MTFBQlx1MTEwNVx1MTE3NQpcdTExMDJcdTExNjlcdTExQUJcdTExMDZcdTExNkVcdTExQUIKXHUxMTAyXHUxMTY5XHUxMUFCXHUxMTBDXHUxMTYyXHUxMUJDClx1MTEwMlx1MTE2OVx1MTFBRlx1MTEwQlx1MTE3NQpcdTExMDJcdTExNjlcdTExQkNcdTExMDBcdTExNkUKXHUxMTAyXHUxMTY5XHUxMUJDXHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwMlx1MTE2OVx1MTFCQ1x1MTEwNlx1MTE3NVx1MTFBQgpcdTExMDJcdTExNjlcdTExQkNcdTExMDdcdTExNkUKXHUxMTAyXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwMlx1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDJcdTExNjlcdTExQkNcdTExMEVcdTExNjlcdTExQUIKXHUxMTAyXHUxMTY5XHUxMUMxXHUxMTBCXHUxMTc1Clx1MTEwMlx1MTE2RVx1MTFBQlx1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MQpcdTExMDJcdTExNkVcdTExQUJcdTExMDZcdTExNkVcdTExQUYKXHUxMTAyXHUxMTZFXHUxMUFCXHUxMTBBXHUxMTY1XHUxMUI4Clx1MTEwMlx1MTE3Mlx1MTEwQlx1MTE2RFx1MTFBOApcdTExMDJcdTExNzNcdTExMDFcdTExNzVcdTExQjcKXHUxMTAyXHUxMTczXHUxMUE4XHUxMTAzXHUxMTYyClx1MTEwMlx1MTE3M1x1MTFCQ1x1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDJcdTExNzNcdTExQkNcdTExMDVcdTExNjdcdTExQTgKXHUxMTAzXHUxMTYxXHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwM1x1MTE2MVx1MTEwQlx1MTE2M1x1MTFCQ1x1MTEwOVx1MTE2NVx1MTFCQwpcdTExMDNcdTExNjFcdTExMEJcdTExNzNcdTExQjcKXHUxMTAzXHUxMTYxXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTY1XHUxMTEwXHUxMTczClx1MTEwM1x1MTE2MVx1MTExMlx1MTE2Mlx1MTFCQwpcdTExMDNcdTExNjFcdTExQUJcdTExMDBcdTExNjgKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTAwXHUxMTY5XHUxMUFGClx1MTEwM1x1MTE2MVx1MTFBQlx1MTEwM1x1MTE2OVx1MTFBOApcdTExMDNcdTExNjFcdTExQUJcdTExMDZcdTExNjFcdTExQkEKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTA5XHUxMTZFXHUxMUFCClx1MTEwM1x1MTE2MVx1MTFBQlx1MTEwQlx1MTE2NQpcdTExMDNcdTExNjFcdTExQUJcdTExMEJcdTExNzEKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwM1x1MTE2MVx1MTFBQlx1MTEwRVx1MTE2NgpcdTExMDNcdTExNjFcdTExQUJcdTExMEVcdTExNkUKXHUxMTAzXHUxMTYxXHUxMUFCXHUxMTExXHUxMTY3XHUxMUFCClx1MTEwM1x1MTE2MVx1MTFBQlx1MTExMVx1MTE2RVx1MTFCQwpcdTExMDNcdTExNjFcdTExQUZcdTExMDBcdTExNjNcdTExQUYKXHUxMTAzXHUxMTYxXHUxMUFGXHUxMTA1XHUxMTY1Clx1MTEwM1x1MTE2MVx1MTFBRlx1MTEwNVx1MTE2N1x1MTFBOApcdTExMDNcdTExNjFcdTExQUZcdTExMDVcdTExNzUKXHUxMTAzXHUxMTYxXHUxMUIwXHUxMTAwXHUxMTY5XHUxMTAwXHUxMTc1Clx1MTEwM1x1MTE2MVx1MTFCN1x1MTEwM1x1MTE2MVx1MTFCQwpcdTExMDNcdTExNjFcdTExQjdcdTExMDdcdTExNjIKXHUxMTAzXHUxMTYxXHUxMUI3XHUxMTBCXHUxMTZEClx1MTEwM1x1MTE2MVx1MTFCN1x1MTEwQlx1MTE3NVx1MTFCNwpcdTExMDNcdTExNjFcdTExQjhcdTExMDdcdTExNjdcdTExQUIKXHUxMTAzXHUxMTYxXHUxMUI4XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwM1x1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3M1x1MTFBQgpcdTExMDNcdTExNjFcdTExQkNcdTExMDdcdTExNkVcdTExQUJcdTExMDBcdTExNjFcdTExQUIKXHUxMTAzXHUxMTYxXHUxMUJDXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwM1x1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDNcdTExNjJcdTExMDBcdTExNzJcdTExMDZcdTExNjkKXHUxMTAzXHUxMTYyXHUxMTAyXHUxMTYxXHUxMUJEClx1MTEwM1x1MTE2Mlx1MTEwM1x1MTE2MVx1MTFBQlx1MTExMlx1MTE3NQpcdTExMDNcdTExNjJcdTExMDNcdTExNjFcdTExQjgKXHUxMTAzXHUxMTYyXHUxMTAzXHUxMTY5XHUxMTA5XHUxMTc1Clx1MTEwM1x1MTE2Mlx1MTEwNVx1MTE2M1x1MTFBOApcdTExMDNcdTExNjJcdTExMDVcdTExNjNcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTA1XHUxMTcyXHUxMUE4Clx1MTEwM1x1MTE2Mlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMDNcdTExNjJcdTExMDdcdTExNkVcdTExMDdcdTExNkVcdTExQUIKXHUxMTAzXHUxMTYyXHUxMTA5XHUxMTc1XHUxMUFCClx1MTEwM1x1MTE2Mlx1MTEwQlx1MTE3M1x1MTFCQwpcdTExMDNcdTExNjJcdTExMENcdTExNjFcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTBDXHUxMTY1XHUxMUFCClx1MTEwM1x1MTE2Mlx1MTEwQ1x1MTE2NVx1MTFCOApcdTExMDNcdTExNjJcdTExMENcdTExNkVcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTBFXHUxMTYyXHUxMUE4Clx1MTEwM1x1MTE2Mlx1MTEwRVx1MTE2RVx1MTFBRgpcdTExMDNcdTExNjJcdTExMEVcdTExNkVcdTExQkMKXHUxMTAzXHUxMTYyXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTA1XHUxMTY3XHUxMUJDClx1MTEwM1x1MTE2Mlx1MTExMlx1MTE2MVx1MTFBOApcdTExMDNcdTExNjJcdTExMTJcdTExNjFcdTExQUJcdTExMDZcdTExNzVcdTExQUJcdTExMDBcdTExNkVcdTExQTgKXHUxMTAzXHUxMTYyXHUxMTEyXHUxMTYxXHUxMUI4XHUxMTA5XHUxMTc1XHUxMUFGClx1MTEwM1x1MTE2Mlx1MTExMlx1MTE2N1x1MTFCQwpcdTExMDNcdTExNjVcdTExQkNcdTExMEJcdTExNjVcdTExMDVcdTExNzUKXHUxMTAzXHUxMTY2XHUxMTBCXHUxMTc1XHUxMTEwXHUxMTczClx1MTEwM1x1MTE2OVx1MTEwM1x1MTE2Mlx1MTEwRVx1MTE2NgpcdTExMDNcdTExNjlcdTExMDNcdTExNjVcdTExQTgKXHUxMTAzXHUxMTY5XHUxMTAzXHUxMTZFXHUxMUE4Clx1MTEwM1x1MTE2OVx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMDNcdTExNjlcdTExMDlcdTExNjVcdTExMDBcdTExNkFcdTExQUIKXHUxMTAzXHUxMTY5XHUxMTA5XHUxMTc1XHUxMUI3Clx1MTEwM1x1MTE2OVx1MTEwQlx1MTE2RVx1MTFCNwpcdTExMDNcdTExNjlcdTExMEJcdTExNzVcdTExQjgKXHUxMTAzXHUxMTY5XHUxMTBDXHUxMTYxXHUxMTAwXHUxMTc1Clx1MTEwM1x1MTE2OVx1MTEwQ1x1MTE2NVx1MTExMlx1MTE3NQpcdTExMDNcdTExNjlcdTExMENcdTExNjVcdTExQUIKXHUxMTAzXHUxMTY5XHUxMTBDXHUxMTZFXHUxMUJDClx1MTEwM1x1MTE2OVx1MTEwRVx1MTE2MVx1MTFBOApcdTExMDNcdTExNjlcdTExQThcdTExMDBcdTExNjFcdTExQjcKXHUxMTAzXHUxMTY5XHUxMUE4XHUxMTA1XHUxMTc1XHUxMUI4Clx1MTEwM1x1MTE2OVx1MTFBOFx1MTEwOVx1MTE2NQpcdTExMDNcdTExNjlcdTExQThcdTExMEJcdTExNzVcdTExQUYKXHUxMTAzXHUxMTY5XHUxMUE4XHUxMTBFXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwM1x1MTE2OVx1MTFCQ1x1MTExMlx1MTE2QVx1MTEwRVx1MTE2Mlx1MTFBOApcdTExMDNcdTExNzFcdTExQkFcdTExMDZcdTExNjlcdTExMDlcdTExNzNcdTExQjgKXHUxMTAzXHUxMTcxXHUxMUJBXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwNFx1MTE2MVx1MTFBRlx1MTEwQlx1MTE2MVx1MTEwQlx1MTE3NQpcdTExMDZcdTExNjFcdTExMDJcdTExNkVcdTExMDVcdTExNjEKXHUxMTA2XHUxMTYxXHUxMTAyXHUxMTczXHUxMUFGClx1MTEwNlx1MTE2MVx1MTEwM1x1MTE2MVx1MTFCQwpcdTExMDZcdTExNjFcdTExMDVcdTExNjFcdTExMTBcdTExNjlcdTExQUIKXHUxMTA2XHUxMTYxXHUxMTA1XHUxMTY3XHUxMUFCClx1MTEwNlx1MTE2MVx1MTEwNlx1MTE2RVx1MTEwNVx1MTE3NQpcdTExMDZcdTExNjFcdTExMDlcdTExNjFcdTExMENcdTExNzUKXHUxMTA2XHUxMTYxXHUxMTBCXHUxMTYzXHUxMUE4Clx1MTEwNlx1MTE2MVx1MTEwQlx1MTE2RFx1MTEwMlx1MTE2Nlx1MTEwQ1x1MTE3MwpcdTExMDZcdTExNjFcdTExMEJcdTExNzNcdTExQUYKXHUxMTA2XHUxMTYxXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwNlx1MTE2MVx1MTEwQlx1MTE3NVx1MTEwRlx1MTE3MwpcdTExMDZcdTExNjFcdTExMENcdTExNkVcdTExQkMKXHUxMTA2XHUxMTYxXHUxMTBDXHUxMTc1XHUxMTA2XHUxMTYxXHUxMUE4Clx1MTEwNlx1MTE2MVx1MTEwRVx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2MVx1MTEwQ1x1MTE3NQpcdTExMDZcdTExNjFcdTExMEVcdTExNjFcdTExQUYKXHUxMTA2XHUxMTYxXHUxMTEyXHUxMTczXHUxMUFCClx1MTEwNlx1MTE2MVx1MTFBOFx1MTEwMFx1MTE2NVx1MTFBRlx1MTEwNVx1MTE3NQpcdTExMDZcdTExNjFcdTExQThcdTExMDJcdTExNjIKXHUxMTA2XHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwNlx1MTE2MVx1MTFBQlx1MTEwMlx1MTE2MVx1MTFCNwpcdTExMDZcdTExNjFcdTExQUJcdTExMDNcdTExNkUKXHUxMTA2XHUxMTYxXHUxMUFCXHUxMTA5XHUxMTY2Clx1MTEwNlx1MTE2MVx1MTFBQlx1MTEwQlx1MTE2M1x1MTFBOApcdTExMDZcdTExNjFcdTExQUJcdTExMEJcdTExNzVcdTExQUYKXHUxMTA2XHUxMTYxXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwNlx1MTE2MVx1MTFBQlx1MTEwQ1x1MTE2OVx1MTFBOApcdTExMDZcdTExNjFcdTExQUJcdTExMTJcdTExNkEKXHUxMTA2XHUxMTYxXHUxMUFEXHUxMTBCXHUxMTc1Clx1MTEwNlx1MTE2MVx1MTFBRlx1MTEwMFx1MTE3NQpcdTExMDZcdTExNjFcdTExQUZcdTExMEFcdTExNzNcdTExQjcKXHUxMTA2XHUxMTYxXHUxMUFGXHUxMTEwXHUxMTZFClx1MTEwNlx1MTE2MVx1MTFCN1x1MTEwM1x1MTE2Mlx1MTEwNVx1MTE2OQpcdTExMDZcdTExNjFcdTExQkNcdTExMEJcdTExNkZcdTExQUJcdTExMDBcdTExNjdcdTExQkMKXHUxMTA2XHUxMTYyXHUxMTAyXHUxMTY3XHUxMUFCClx1MTEwNlx1MTE2Mlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMDZcdTExNjJcdTExMDVcdTExNjdcdTExQTgKXHUxMTA2XHUxMTYyXHUxMTA3XHUxMTY1XHUxMUFCClx1MTEwNlx1MTE2Mlx1MTEwOVx1MTE3M1x1MTEwRlx1MTE2NVx1MTFCNwpcdTExMDZcdTExNjJcdTExMEJcdTExNzVcdTExQUYKXHUxMTA2XHUxMTYyXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwNlx1MTE2Mlx1MTFBOFx1MTEwQ1x1MTE2RQpcdTExMDZcdTExNjVcdTExQThcdTExMEJcdTExNzUKXHUxMTA2XHUxMTY1XHUxMUFCXHUxMTBDXHUxMTY1Clx1MTEwNlx1MTE2NVx1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMDZcdTExNjVcdTExQUZcdTExMDVcdTExNzUKXHUxMTA2XHUxMTY2XHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwNlx1MTE2N1x1MTEwMlx1MTE3M1x1MTEwNVx1MTE3NQpcdTExMDZcdTExNjdcdTExMEVcdTExNzVcdTExQUYKXHUxMTA2XHUxMTY3XHUxMUFCXHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwNlx1MTE2N1x1MTFBRlx1MTEwRVx1MTE3NQpcdTExMDZcdTExNjdcdTExQkNcdTExMDNcdTExNjFcdTExQUIKXHUxMTA2XHUxMTY3XHUxMUJDXHUxMTA1XHUxMTY3XHUxMUJDClx1MTEwNlx1MTE2N1x1MTFCQ1x1MTEwQlx1MTE2OApcdTExMDZcdTExNjdcdTExQkNcdTExMEJcdTExNzQKXHUxMTA2XHUxMTY3XHUxMUJDXHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwNlx1MTE2N1x1MTFCQ1x1MTEwRVx1MTE3NVx1MTFCQwpcdTExMDZcdTExNjdcdTExQkNcdTExMTJcdTExNjFcdTExQjcKXHUxMTA2XHUxMTY5XHUxMTAwXHUxMTczXHUxMUI3Clx1MTEwNlx1MTE2OVx1MTEwMlx1MTE3NVx1MTExMFx1MTE2NQpcdTExMDZcdTExNjlcdTExMDNcdTExNjZcdTExQUYKXHUxMTA2XHUxMTY5XHUxMTAzXHUxMTczXHUxMUFCClx1MTEwNlx1MTE2OVx1MTEwN1x1MTE2NVx1MTFCNwpcdTExMDZcdTExNjlcdTExMDlcdTExNzNcdTExQjgKXHUxMTA2XHUxMTY5XHUxMTBCXHUxMTYzXHUxMUJDClx1MTEwNlx1MTE2OVx1MTEwQlx1MTE3NVx1MTFCNwpcdTExMDZcdTExNjlcdTExMENcdTExNjlcdTExMDVcdTExNzUKXHUxMTA2XHUxMTY5XHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwNlx1MTE2OVx1MTExMFx1MTE2RVx1MTFCQ1x1MTEwQlx1MTE3NQpcdTExMDZcdTExNjlcdTExQThcdTExMDBcdTExNjVcdTExQUZcdTExMEJcdTExNzUKXHUxMTA2XHUxMTY5XHUxMUE4XHUxMTA1XHUxMTY5XHUxMUE4Clx1MTEwNlx1MTE2OVx1MTFBOFx1MTEwOVx1MTE2MQpcdTExMDZcdTExNjlcdTExQThcdTExMDlcdTExNjlcdTExMDVcdTExNzUKXHUxMTA2XHUxMTY5XHUxMUE4XHUxMTA5XHUxMTZFXHUxMUI3Clx1MTEwNlx1MTE2OVx1MTFBOFx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDZcdTExNjlcdTExQThcdTExMTFcdTExNkQKXHUxMTA2XHUxMTY5XHUxMUFGXHUxMTA1XHUxMTYyClx1MTEwNlx1MTE2OVx1MTFCN1x1MTEwNlx1MTE2MgpcdTExMDZcdTExNjlcdTExQjdcdTExMDZcdTExNkVcdTExMDBcdTExNjYKXHUxMTA2XHUxMTY5XHUxMUI3XHUxMTA5XHUxMTYxXHUxMUFGClx1MTEwNlx1MTE2OVx1MTFCN1x1MTEwOVx1MTE2OVx1MTFBOApcdTExMDZcdTExNjlcdTExQjdcdTExMENcdTExNzVcdTExQkEKXHUxMTA2XHUxMTY5XHUxMUI3XHUxMTEwXHUxMTY5XHUxMUJDClx1MTEwNlx1MTE2OVx1MTFCOFx1MTEwOVx1MTE3NQpcdTExMDZcdTExNkVcdTExMDBcdTExNkFcdTExQUJcdTExMDlcdTExNzVcdTExQjcKXHUxMTA2XHUxMTZFXHUxMTAwXHUxMTZFXHUxMUJDXHUxMTEyXHUxMTZBClx1MTEwNlx1MTE2RVx1MTEwM1x1MTE2NVx1MTEwQlx1MTE3MQpcdTExMDZcdTExNkVcdTExMDNcdTExNjVcdTExQjcKXHUxMTA2XHUxMTZFXHUxMTA1XHUxMTczXHUxMUMxClx1MTEwNlx1MTE2RVx1MTEwOVx1MTE3M1x1MTFBQgpcdTExMDZcdTExNkVcdTExMEJcdTExNjVcdTExQkEKXHUxMTA2XHUxMTZFXHUxMTBCXHUxMTY3XHUxMUE4Clx1MTEwNlx1MTE2RVx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDZcdTExNkVcdTExMENcdTExNjlcdTExMDBcdTExNjVcdTExQUIKXHUxMTA2XHUxMTZFXHUxMTBDXHUxMTc1XHUxMTAwXHUxMTYyClx1MTEwNlx1MTE2RVx1MTEwRVx1MTE2NVx1MTFBOApcdTExMDZcdTExNkVcdTExQUJcdTExMDBcdTExNkUKXHUxMTA2XHUxMTZFXHUxMUFCXHUxMTAzXHUxMTczXHUxMUE4Clx1MTEwNlx1MTE2RVx1MTFBQlx1MTEwN1x1MTE2NVx1MTFCOApcdTExMDZcdTExNkVcdTExQUJcdTExMDlcdTExNjUKXHUxMTA2XHUxMTZFXHUxMUFCXHUxMTBDXHUxMTY2Clx1MTEwNlx1MTE2RVx1MTFBQlx1MTExMlx1MTE2MVx1MTFBOApcdTExMDZcdTExNkVcdTExQUJcdTExMTJcdTExNkEKXHUxMTA2XHUxMTZFXHUxMUFGXHUxMTAwXHUxMTYxClx1MTEwNlx1MTE2RVx1MTFBRlx1MTEwMFx1MTE2NVx1MTFBQgpcdTExMDZcdTExNkVcdTExQUZcdTExMDBcdTExNjdcdTExQUYKXHUxMTA2XHUxMTZFXHUxMUFGXHUxMTAwXHUxMTY5XHUxMTAwXHUxMTc1Clx1MTEwNlx1MTE2RVx1MTFBRlx1MTEwNVx1MTE2OVx1MTFBQgpcdTExMDZcdTExNkVcdTExQUZcdTExMDVcdTExNzVcdTExMTJcdTExNjFcdTExQTgKXHUxMTA2XHUxMTZFXHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwNlx1MTE2RVx1MTFBRlx1MTEwQ1x1MTE3NVx1MTFBRgpcdTExMDZcdTExNkVcdTExQUZcdTExMEVcdTExNjYKXHUxMTA2XHUxMTc1XHUxMTAwXHUxMTZFXHUxMUE4Clx1MTEwNlx1MTE3NVx1MTEwM1x1MTE3NVx1MTEwQlx1MTE2NQpcdTExMDZcdTExNzVcdTExMDlcdTExNjFcdTExMEJcdTExNzVcdTExQUYKXHUxMTA2XHUxMTc1XHUxMTA5XHUxMTZFXHUxMUFGClx1MTEwNlx1MTE3NVx1MTEwQlx1MTE2N1x1MTFBOApcdTExMDZcdTExNzVcdTExMEJcdTExNkRcdTExQkNcdTExMDlcdTExNzVcdTExQUYKXHUxMTA2XHUxMTc1XHUxMTBCXHUxMTZFXHUxMUI3Clx1MTEwNlx1MTE3NVx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDZcdTExNzVcdTExMTBcdTExNzVcdTExQkMKXHUxMTA2XHUxMTc1XHUxMTEyXHUxMTY5XHUxMUFCClx1MTEwNlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE2MVx1MTFBQgpcdTExMDZcdTExNzVcdTExQUJcdTExMENcdTExNjlcdTExQTgKXHUxMTA2XHUxMTc1XHUxMUFCXHUxMTBDXHUxMTZFClx1MTEwNlx1MTE3NVx1MTFBRVx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDZcdTExNzVcdTExQUZcdTExMDBcdTExNjFcdTExMDVcdTExNkUKXHUxMTA2XHUxMTc1XHUxMUFGXHUxMTA1XHUxMTc1XHUxMTA2XHUxMTc1XHUxMTEwXHUxMTY1Clx1MTEwNlx1MTE3NVx1MTFDMFx1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExMDBcdTExNjFcdTExMENcdTExNzUKXHUxMTA3XHUxMTYxXHUxMTAwXHUxMTZFXHUxMTAyXHUxMTc1Clx1MTEwN1x1MTE2MVx1MTEwMlx1MTE2MVx1MTEwMlx1MTE2MQpcdTExMDdcdTExNjFcdTExMDJcdTExNzNcdTExQUYKXHUxMTA3XHUxMTYxXHUxMTAzXHUxMTYxXHUxMUE4Clx1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFCQVx1MTEwMFx1MTE2MQpcdTExMDdcdTExNjFcdTExMDVcdTExNjFcdTExQjcKXHUxMTA3XHUxMTYxXHUxMTBCXHUxMTc1XHUxMTA1XHUxMTY1XHUxMTA5XHUxMTczClx1MTEwN1x1MTE2MVx1MTExMFx1MTE2MVx1MTFCQwpcdTExMDdcdTExNjFcdTExQThcdTExMDZcdTExNkVcdTExQUZcdTExMDBcdTExNkFcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYxClx1MTEwN1x1MTE2MVx1MTFBOFx1MTEwOVx1MTE2RQpcdTExMDdcdTExNjFcdTExQUJcdTExMDNcdTExNjIKXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTAzXHUxMTczXHUxMTA5XHUxMTc1Clx1MTEwN1x1MTE2MVx1MTFBQlx1MTEwNlx1MTE2MVx1MTFBRgpcdTExMDdcdTExNjFcdTExQUJcdTExMDdcdTExNjFcdTExQUYKXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwN1x1MTE2MVx1MTFBQlx1MTEwQlx1MTE3M1x1MTFCQwpcdTExMDdcdTExNjFcdTExQUJcdTExMENcdTExNjFcdTExQkMKXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTBDXHUxMTZFXHUxMUE4Clx1MTEwN1x1MTE2MVx1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMDdcdTExNjFcdTExQUJcdTExMEVcdTExNjFcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUFFXHUxMTBFXHUxMTc1XHUxMUI3Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwMFx1MTE2MVx1MTEwNVx1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExQUZcdTExMDBcdTExNjVcdTExQUZcdTExMEJcdTExNzNcdTExQjcKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTAwXHUxMTY3XHUxMUFCClx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMDdcdTExNjFcdTExQUZcdTExMDVcdTExNjYKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTA2XHUxMTY5XHUxMUE4Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExQUZcdTExMDlcdTExNjJcdTExQkMKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTEwQ1x1MTE2MVx1MTEwMFx1MTE2RVx1MTFBOApcdTExMDdcdTExNjFcdTExQUZcdTExMENcdTExNjVcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTEwXHUxMTY5XHUxMUI4Clx1MTEwN1x1MTE2MVx1MTFBRlx1MTExMVx1MTE2RApcdTExMDdcdTExNjFcdTExQjdcdTExMTJcdTExNjFcdTExMDJcdTExNzNcdTExQUYKXHUxMTA3XHUxMTYxXHUxMUI4XHUxMTAwXHUxMTczXHUxMTA1XHUxMTczXHUxMUJBClx1MTEwN1x1MTE2MVx1MTFCOFx1MTEwNlx1MTE2MVx1MTFCQQpcdTExMDdcdTExNjFcdTExQjhcdTExMDlcdTExNjFcdTExQkMKXHUxMTA3XHUxMTYxXHUxMUI4XHUxMTA5XHUxMTY5XHUxMUMwClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDdcdTExNjFcdTExQkNcdTExMDZcdTExNjdcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTEwM1x1MTE2MVx1MTFBOApcdTExMDdcdTExNjFcdTExQkNcdTExMDdcdTExNjVcdTExQjgKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTA5XHUxMTY5XHUxMUJDClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwOVx1MTE3NVx1MTFBOApcdTExMDdcdTExNjFcdTExQkNcdTExMEJcdTExNjFcdTExQUIKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTBCXHUxMTZFXHUxMUFGClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE3NQpcdTExMDdcdTExNjFcdTExQkNcdTExMTJcdTExNjFcdTExQTgKXHUxMTA3XHUxMTYxXHUxMUJDXHUxMTEyXHUxMTYyClx1MTEwN1x1MTE2MVx1MTFCQ1x1MTExMlx1MTE2M1x1MTFCQwpcdTExMDdcdTExNjJcdTExMDBcdTExNjdcdTExQkMKXHUxMTA3XHUxMTYyXHUxMTAxXHUxMTY5XHUxMUI4Clx1MTEwN1x1MTE2Mlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMDdcdTExNjJcdTExMDNcdTExNzNcdTExMDZcdTExNzVcdTExQUJcdTExMTBcdTExNjVcdTExQUIKXHUxMTA3XHUxMTYyXHUxMUE4XHUxMTAzXHUxMTZFXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwN1x1MTE2Mlx1MTFBOFx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDdcdTExNjJcdTExQThcdTExMDlcdTExNjVcdTExQkMKXHUxMTA3XHUxMTYyXHUxMUE4XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwN1x1MTE2Mlx1MTFBOFx1MTEwQ1x1MTE2NgpcdTExMDdcdTExNjJcdTExQThcdTExMTJcdTExNkFcdTExMENcdTExNjVcdTExQjcKXHUxMTA3XHUxMTY1XHUxMTA1XHUxMTczXHUxMUJBClx1MTEwN1x1MTE2NVx1MTEwOVx1MTE2NVx1MTFCQQpcdTExMDdcdTExNjVcdTExMTBcdTExNzNcdTExQUIKXHUxMTA3XHUxMTY1XHUxMUFCXHUxMTAwXHUxMTYyClx1MTEwN1x1MTE2NVx1MTFBQlx1MTEwQlx1MTE2N1x1MTFBOApcdTExMDdcdTExNjVcdTExQUJcdTExMENcdTExNzUKXHUxMTA3XHUxMTY1XHUxMUFCXHUxMTEyXHUxMTY5Clx1MTEwN1x1MTE2NVx1MTFBRlx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDdcdTExNjVcdTExQUZcdTExMDVcdTExNjYKXHUxMTA3XHUxMTY1XHUxMUFGXHUxMTBBXHUxMTY1Clx1MTEwN1x1MTE2NVx1MTFCN1x1MTEwQlx1MTE3MQpcdTExMDdcdTExNjVcdTExQjdcdTExMEJcdTExNzVcdTExQUIKXHUxMTA3XHUxMTY1XHUxMUI3XHUxMTBDXHUxMTZDClx1MTEwN1x1MTE2NVx1MTFCOFx1MTEwNVx1MTE3Mlx1MTFBRgpcdTExMDdcdTExNjVcdTExQjhcdTExMEJcdTExNkZcdTExQUIKXHUxMTA3XHUxMTY1XHUxMUI4XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwN1x1MTE2NVx1MTFCOFx1MTEwRVx1MTE3NVx1MTFBOApcdTExMDdcdTExNjZcdTExMEJcdTExNzVcdTExMENcdTExNzVcdTExQkMKXHUxMTA3XHUxMTY2XHUxMUFGXHUxMTEwXHUxMTczClx1MTEwN1x1MTE2N1x1MTFBQlx1MTEwMFx1MTE2N1x1MTFCQwpcdTExMDdcdTExNjdcdTExQUJcdTExMDNcdTExNjlcdTExQkMKXHUxMTA3XHUxMTY3XHUxMUFCXHUxMTA2XHUxMTY3XHUxMUJDClx1MTEwN1x1MTE2N1x1MTFBQlx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMDdcdTExNjdcdTExQUJcdTExMTJcdTExNjlcdTExMDlcdTExNjEKXHUxMTA3XHUxMTY3XHUxMUFCXHUxMTEyXHUxMTZBClx1MTEwN1x1MTE2N1x1MTFBRlx1MTEwM1x1MTE2OQpcdTExMDdcdTExNjdcdTExQUZcdTExMDZcdTExNjdcdTExQkMKXHUxMTA3XHUxMTY3XHUxMUFGXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwN1x1MTE2N1x1MTFCQ1x1MTEwOVx1MTE3NVx1MTFBRgpcdTExMDdcdTExNjdcdTExQkNcdTExMEJcdTExNjFcdTExMDVcdTExNzUKXHUxMTA3XHUxMTY3XHUxMUJDXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwN1x1MTE2OVx1MTEwMFx1MTE2QVx1MTFBQgpcdTExMDdcdTExNjlcdTExMDJcdTExNjVcdTExMDlcdTExNzMKXHUxMTA3XHUxMTY5XHUxMTA1XHUxMTYxXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTEwN1x1MTE2OVx1MTEwNVx1MTE2MVx1MTFCNwpcdTExMDdcdTExNjlcdTExMDVcdTExNzNcdTExQjcKXHUxMTA3XHUxMTY5XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwN1x1MTE2OVx1MTEwQlx1MTE2MVx1MTFBQgpcdTExMDdcdTExNjlcdTExMENcdTExNjFcdTExMDBcdTExNzUKXHUxMTA3XHUxMTY5XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwN1x1MTE2OVx1MTEwQ1x1MTE2NVx1MTFBQgpcdTExMDdcdTExNjlcdTExMENcdTExNjlcdTExQUIKXHUxMTA3XHUxMTY5XHUxMTEwXHUxMTY5XHUxMUJDClx1MTEwN1x1MTE2OVx1MTExMVx1MTE2N1x1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDdcdTExNjlcdTExMTJcdTExNjVcdTExQjcKXHUxMTA3XHUxMTY5XHUxMUE4XHUxMTAzXHUxMTY5Clx1MTEwN1x1MTE2OVx1MTFBOFx1MTEwOVx1MTE2MQpcdTExMDdcdTExNjlcdTExQThcdTExMDlcdTExNkVcdTExQkNcdTExMEJcdTExNjEKXHUxMTA3XHUxMTY5XHUxMUE4XHUxMTA5XHUxMTczXHUxMUI4Clx1MTEwN1x1MTE2OVx1MTFBOVx1MTEwQlx1MTE3M1x1MTFCNwpcdTExMDdcdTExNjlcdTExQUJcdTExMDBcdTExNjdcdTExQThcdTExMENcdTExNjVcdTExQTgKXHUxMTA3XHUxMTY5XHUxMUFCXHUxMTA1XHUxMTYyClx1MTEwN1x1MTE2OVx1MTFBQlx1MTEwN1x1MTE2RQpcdTExMDdcdTExNjlcdTExQUJcdTExMDlcdTExNjEKXHUxMTA3XHUxMTY5XHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwN1x1MTE2OVx1MTFBQlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDdcdTExNjlcdTExQUJcdTExMENcdTExNzVcdTExQUYKXHUxMTA3XHUxMTY5XHUxMUFGXHUxMTExXHUxMTY2XHUxMUFCClx1MTEwN1x1MTE2OVx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMDdcdTExNjlcdTExQkNcdTExMENcdTExNzUKXHUxMTA3XHUxMTY5XHUxMUJDXHUxMTEwXHUxMTZFClx1MTEwN1x1MTE2RVx1MTEwMFx1MTE3M1x1MTFBQgpcdTExMDdcdTExNkVcdTExMDFcdTExNzNcdTExMDVcdTExNjVcdTExMEJcdTExNkVcdTExQjcKXHUxMTA3XHUxMTZFXHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwN1x1MTE2RVx1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwOVx1MTE2MVx1MTFBQgpcdTExMDdcdTExNkVcdTExMDZcdTExNkVcdTExQUIKXHUxMTA3XHUxMTZFXHUxMTA3XHUxMTZFXHUxMUFCClx1MTEwN1x1MTE2RVx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMDdcdTExNkVcdTExMDlcdTExNjFcdTExQkMKXHUxMTA3XHUxMTZFXHUxMTBCXHUxMTY1XHUxMUJGClx1MTEwN1x1MTE2RVx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMDdcdTExNkVcdTExMENcdTExNjFcdTExQThcdTExMEJcdTExNkRcdTExQkMKXHUxMTA3XHUxMTZFXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwN1x1MTE2RVx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMDdcdTExNkVcdTExMENcdTExNjlcdTExQTgKXHUxMTA3XHUxMTZFXHUxMTBDXHUxMTc1XHUxMTA1XHUxMTY1XHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwN1x1MTE2RVx1MTEwRVx1MTE3NVx1MTFBQgpcdTExMDdcdTExNkVcdTExMTBcdTExNjFcdTExQTgKXHUxMTA3XHUxMTZFXHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwN1x1MTE2RVx1MTExMlx1MTE2Q1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDdcdTExNkVcdTExQThcdTExMDdcdTExNkUKXHUxMTA3XHUxMTZFXHUxMUE4XHUxMTEyXHUxMTYxXHUxMUFCClx1MTEwN1x1MTE2RVx1MTFBQlx1MTEwMlx1MTE2OQpcdTExMDdcdTExNkVcdTExQUJcdTExMDVcdTExNjNcdTExQkMKXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTA1XHUxMTc1Clx1MTEwN1x1MTE2RVx1MTFBQlx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDdcdTExNkVcdTExQUJcdTExMDlcdTExNjVcdTExQTgKXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTBCXHUxMTYzClx1MTEwN1x1MTE2RVx1MTFBQlx1MTEwQlx1MTE3MVx1MTEwMFx1MTE3NQpcdTExMDdcdTExNkVcdTExQUJcdTExMTFcdTExNzVcdTExQUYKXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTEyXHUxMTY5XHUxMUJDXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTEwN1x1MTE2RVx1MTFBRlx1MTEwMFx1MTE2OVx1MTEwMFx1MTE3NQpcdTExMDdcdTExNkVcdTExQUZcdTExMDBcdTExNkEKXHUxMTA3XHUxMTZFXHUxMUFGXHUxMTAwXHUxMTZEClx1MTEwN1x1MTE2RVx1MTFBRlx1MTEwMVx1MTE2OVx1MTFCRQpcdTExMDdcdTExNkVcdTExQUZcdTExMDZcdTExNjFcdTExQUIKXHUxMTA3XHUxMTZFXHUxMUFGXHUxMTA3XHUxMTY1XHUxMUI4Clx1MTEwN1x1MTE2RVx1MTFBRlx1MTEwN1x1MTE3NVx1MTFCRQpcdTExMDdcdTExNkVcdTExQUZcdTExMEJcdTExNjFcdTExQUIKXHUxMTA3XHUxMTZFXHUxMUFGXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTc1XHUxMUE4Clx1MTEwN1x1MTE2RVx1MTFBRlx1MTExMlx1MTE2Mlx1MTFCQwpcdTExMDdcdTExNzNcdTExMDVcdTExNjJcdTExQUJcdTExMDNcdTExNzMKXHUxMTA3XHUxMTc1XHUxMTAwXHUxMTczXHUxMUE4Clx1MTEwN1x1MTE3NVx1MTEwMlx1MTE2MVx1MTFBQgpcdTExMDdcdTExNzVcdTExMDJcdTExNzVcdTExQUYKXHUxMTA3XHUxMTc1XHUxMTAzXHUxMTZFXHUxMUFGXHUxMTAwXHUxMTc1Clx1MTEwN1x1MTE3NVx1MTEwM1x1MTE3NVx1MTEwQlx1MTE2OQpcdTExMDdcdTExNzVcdTExMDVcdTExNjlcdTExMDlcdTExNjkKXHUxMTA3XHUxMTc1XHUxMTA2XHUxMTYxXHUxMUFCClx1MTEwN1x1MTE3NVx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDdcdTExNzVcdTExMDZcdTExNzVcdTExQUYKXHUxMTA3XHUxMTc1XHUxMTA3XHUxMTYxXHUxMTA1XHUxMTYxXHUxMUI3Clx1MTEwN1x1MTE3NVx1MTEwN1x1MTE3NVx1MTFCN1x1MTEwN1x1MTE2MVx1MTFCOApcdTExMDdcdTExNzVcdTExMDlcdTExNjFcdTExQkMKXHUxMTA3XHUxMTc1XHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwN1x1MTE3NVx1MTEwQlx1MTE3Mlx1MTFBRgpcdTExMDdcdTExNzVcdTExMENcdTExNkVcdTExQkMKXHUxMTA3XHUxMTc1XHUxMTEwXHUxMTYxXHUxMTA2XHUxMTc1XHUxMUFCClx1MTEwN1x1MTE3NVx1MTExMVx1MTE2MVx1MTFBQgpcdTExMDdcdTExNzVcdTExQUZcdTExMDNcdTExNzVcdTExQkMKXHUxMTA3XHUxMTc1XHUxMUJBXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwN1x1MTE3NVx1MTFCQVx1MTEwN1x1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2RVx1MTFBRgpcdTExMDdcdTExNzVcdTExQkFcdTExMENcdTExNkVcdTExQUZcdTExMDBcdTExNzUKXHUxMTA3XHUxMTc1XHUxMUJFXHUxMTAxXHUxMTYxXHUxMUFGClx1MTEwOFx1MTE2MVx1MTFBRlx1MTEwMFx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMDhcdTExNjFcdTExQUZcdTExMDVcdTExNjIKXHUxMTA4XHUxMTYxXHUxMUFGXHUxMTA1XHUxMTc1Clx1MTEwOVx1MTE2MVx1MTEwMFx1MTE2NVx1MTFBQgpcdTExMDlcdTExNjFcdTExMDBcdTExNjhcdTExMENcdTExNjVcdTExQUYKXHUxMTA5XHUxMTYxXHUxMTAyXHUxMTYxXHUxMTBCXHUxMTc1Clx1MTEwOVx1MTE2MVx1MTEwMlx1MTE2M1x1MTFCQwpcdTExMDlcdTExNjFcdTExMDVcdTExNjFcdTExQjcKXHUxMTA5XHUxMTYxXHUxMTA1XHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2MVx1MTEwNVx1MTE3NVx1MTFCOApcdTExMDlcdTExNjFcdTExMDZcdTExNjlcdTExMDJcdTExNzVcdTExQjcKXHUxMTA5XHUxMTYxXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwN1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNjFcdTExMDlcdTExNjFcdTExQkMKXHUxMTA5XHUxMTYxXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTEyXHUxMTZBXHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMDlcdTExNjFcdTExMDlcdTExNzNcdTExQjcKXHUxMTA5XHUxMTYxXHUxMTA5XHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwQlx1MTE2NVx1MTFCOApcdTExMDlcdTExNjFcdTExMEJcdTExNkRcdTExQkMKXHUxMTA5XHUxMTYxXHUxMTBCXHUxMTZGXHUxMUFGClx1MTEwOVx1MTE2MVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNjFcdTExMENcdTExNjVcdTExQUIKXHUxMTA5XHUxMTYxXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwOVx1MTE2MVx1MTEwRVx1MTE2OVx1MTFBQgpcdTExMDlcdTExNjFcdTExMEVcdTExNkVcdTExQUJcdTExMDBcdTExNzUKXHUxMTA5XHUxMTYxXHUxMTEwXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2MVx1MTExMFx1MTE2RVx1MTEwNVx1MTE3NQpcdTExMDlcdTExNjFcdTExMTJcdTExNzNcdTExQUYKXHUxMTA5XHUxMTYxXHUxMUFCXHUxMTAwXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2MVx1MTFBQlx1MTEwN1x1MTE2RVx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE2QQpcdTExMDlcdTExNjFcdTExQUJcdTExMEJcdTExNjVcdTExQjgKXHUxMTA5XHUxMTYxXHUxMUFCXHUxMTBFXHUxMTYyXHUxMUE4Clx1MTEwOVx1MTE2MVx1MTFBRlx1MTEwNVx1MTE3NVx1MTFCNwpcdTExMDlcdTExNjFcdTExQUZcdTExMEJcdTExNzVcdTExQUIKXHUxMTA5XHUxMTYxXHUxMUFGXHUxMTBEXHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE2MVx1MTFCN1x1MTEwMFx1MTE2OFx1MTExMFx1MTE2MVx1MTFCQwpcdTExMDlcdTExNjFcdTExQjdcdTExMDBcdTExNkVcdTExQTgKXHUxMTA5XHUxMTYxXHUxMUI3XHUxMTA5XHUxMTc1XHUxMUI4Clx1MTEwOVx1MTE2MVx1MTFCN1x1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMDlcdTExNjFcdTExQjdcdTExMEVcdTExNjlcdTExQUIKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTAwXHUxMTZBXHUxMUFCClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDlcdTExNjFcdTExQkNcdTExMDNcdTExNjIKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTA1XHUxMTcyClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTFBQlx1MTEwMFx1MTE3NQpcdTExMDlcdTExNjFcdTExQkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2NVx1MTFCOApcdTExMDlcdTExNjFcdTExQkNcdTExMEJcdTExNzVcdTExQUIKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTBDXHUxMTYxClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDlcdTExNjFcdTExQkNcdTExMEVcdTExNjUKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTBFXHUxMTZFClx1MTEwOVx1MTE2MVx1MTFCQ1x1MTExMFx1MTE2MgpcdTExMDlcdTExNjFcdTExQkNcdTExMTFcdTExNkQKXHUxMTA5XHUxMTYxXHUxMUJDXHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwOVx1MTE2MVx1MTFCQ1x1MTExMlx1MTE2QVx1MTFCQwpcdTExMDlcdTExNjJcdTExMDdcdTExNjdcdTExQTgKXHUxMTA5XHUxMTYyXHUxMUE4XHUxMTAxXHUxMTYxXHUxMUFGClx1MTEwOVx1MTE2Mlx1MTFBOFx1MTEwQlx1MTE2N1x1MTFBQlx1MTExMVx1MTE3NVx1MTFBRgpcdTExMDlcdTExNjJcdTExQkNcdTExMDBcdTExNjFcdTExQTgKXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTA2XHUxMTY3XHUxMUJDClx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNjJcdTExQkNcdTExMDdcdTExNjFcdTExQkNcdTExMDlcdTExNjlcdTExQkMKXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTEwOVx1MTE2NVx1MTFBQgpcdTExMDlcdTExNjJcdTExQkNcdTExMDlcdTExNzVcdTExQUIKXHUxMTA5XHUxMTYyXHUxMUJDXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTExMlx1MTE2QVx1MTFBRgpcdTExMDlcdTExNjVcdTExMDVcdTExNjFcdTExQjgKXHUxMTA5XHUxMTY1XHUxMTA1XHUxMTczXHUxMUFCClx1MTEwOVx1MTE2NVx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDlcdTExNjVcdTExMDZcdTExNzVcdTExQUIKXHUxMTA5XHUxMTY1XHUxMTA3XHUxMTc1XHUxMTA5XHUxMTczClx1MTEwOVx1MTE2NVx1MTEwQlx1MTE2M1x1MTFCQwpcdTExMDlcdTExNjVcdTExMEJcdTExNkVcdTExQUYKXHUxMTA5XHUxMTY1XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwOVx1MTE2NVx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDlcdTExNjVcdTExMERcdTExNjlcdTExQTgKXHUxMTA5XHUxMTY1XHUxMTBGXHUxMTczXHUxMUFGClx1MTEwOVx1MTE2NVx1MTFBOFx1MTEwOVx1MTE2MQpcdTExMDlcdTExNjVcdTExQThcdTExMEJcdTExNzIKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTAwXHUxMTY1Clx1MTEwOVx1MTE2NVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNjVcdTExQUJcdTExMDdcdTExNjIKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFBQlx1MTEwOVx1MTE2RQpcdTExMDlcdTExNjVcdTExQUJcdTExMEJcdTExNkZcdTExQUIKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBQgpcdTExMDlcdTExNjVcdTExQUJcdTExMTBcdTExNjJcdTExQTgKXHUxMTA5XHUxMTY1XHUxMUFCXHUxMTExXHUxMTZFXHUxMUJDXHUxMTAwXHUxMTc1Clx1MTEwOVx1MTE2NVx1MTFBRlx1MTEwMFx1MTE2NVx1MTEwQ1x1MTE3NQpcdTExMDlcdTExNjVcdTExQUZcdTExMDJcdTExNjFcdTExQUYKXHUxMTA5XHUxMTY1XHUxMUFGXHUxMTA1XHUxMTY1XHUxMUJDXHUxMTEwXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFBRlx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDlcdTExNjVcdTExQUZcdTExMDZcdTExNkVcdTExQUIKXHUxMTA5XHUxMTY1XHUxMUFGXHUxMTA5XHUxMTYxClx1MTEwOVx1MTE2NVx1MTFBRlx1MTEwQlx1MTE2MVx1MTFBOFx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMDlcdTExNjVcdTExQUZcdTExMEVcdTExNzUKXHUxMTA5XHUxMTY1XHUxMUFGXHUxMTEwXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFCOFx1MTEwQVx1MTE3NQpcdTExMDlcdTExNjVcdTExQkNcdTExMDBcdTExNjlcdTExQkMKXHUxMTA5XHUxMTY1XHUxMUJDXHUxMTAzXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE2NVx1MTFCQ1x1MTEwNlx1MTE2N1x1MTFCQwpcdTExMDlcdTExNjVcdTExQkNcdTExMDdcdTExNjdcdTExQUYKXHUxMTA5XHUxMTY1XHUxMUJDXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwOVx1MTE2NVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNjVcdTExQkNcdTExMENcdTExNjVcdTExQTgKXHUxMTA5XHUxMTY1XHUxMUJDXHUxMTBDXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2NVx1MTFCQ1x1MTExMlx1MTE2MVx1MTFCNwpcdTExMDlcdTExNjZcdTExMDBcdTExNzNcdTExQjcKXHUxMTA5XHUxMTY2XHUxMTA2XHUxMTc1XHUxMTAyXHUxMTYxClx1MTEwOVx1MTE2Nlx1MTEwOVx1MTE2MVx1MTFCQwpcdTExMDlcdTExNjZcdTExMEJcdTExNkZcdTExQUYKXHUxMTA5XHUxMTY2XHUxMTBDXHUxMTY5XHUxMUJDXHUxMTAzXHUxMTYyXHUxMTBCXHUxMTZBXHUxMUJDClx1MTEwOVx1MTE2Nlx1MTExMFx1MTE2MVx1MTFBOApcdTExMDlcdTExNjZcdTExQUJcdTExMTBcdTExNjUKXHUxMTA5XHUxMTY2XHUxMUFCXHUxMTEwXHUxMTc1XHUxMTA2XHUxMTc1XHUxMTEwXHUxMTY1Clx1MTEwOVx1MTE2Nlx1MTFCQVx1MTEwRFx1MTE2MgpcdTExMDlcdTExNjlcdTExMDBcdTExNzJcdTExMDZcdTExNjkKXHUxMTA5XHUxMTY5XHUxMTAwXHUxMTczXHUxMUE4XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwOVx1MTE2OVx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMDlcdTExNjlcdTExMDJcdTExNjFcdTExMDBcdTExNzUKXHUxMTA5XHUxMTY5XHUxMTAyXHUxMTY3XHUxMUFCClx1MTEwOVx1MTE2OVx1MTEwM1x1MTE3M1x1MTFBOApcdTExMDlcdTExNjlcdTExMDZcdTExNjFcdTExQkMKXHUxMTA5XHUxMTY5XHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwOVx1MTE2OVx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMDlcdTExNjlcdTExMDlcdTExNjlcdTExQTgKXHUxMTA5XHUxMTY5XHUxMTBCXHUxMTYxXHUxMTAwXHUxMTZBClx1MTEwOVx1MTE2OVx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDlcdTExNjlcdTExMEJcdTExNkZcdTExQUIKXHUxMTA5XHUxMTY5XHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwOVx1MTE2OVx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTExMlx1MTE3NQpcdTExMDlcdTExNjlcdTExMENcdTExNzVcdTExMTFcdTExNkVcdTExQjcKXHUxMTA5XHUxMTY5XHUxMTBDXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE2OVx1MTExMVx1MTE2RVx1MTFCQwpcdTExMDlcdTExNjlcdTExMTJcdTExNjdcdTExQkMKXHUxMTA5XHUxMTY5XHUxMUE4XHUxMTAzXHUxMTYxXHUxMUI3Clx1MTEwOVx1MTE2OVx1MTFBOFx1MTEwM1x1MTE2OQpcdTExMDlcdTExNjlcdTExQThcdTExMEJcdTExNjlcdTExQkEKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTAwXHUxMTYxXHUxMTA1XHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTEwMFx1MTE3NVx1MTFBRgpcdTExMDlcdTExNjlcdTExQUJcdTExMDJcdTExNjcKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTAyXHUxMTc1XHUxMUI3Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTEwM1x1MTE3M1x1MTFCQwpcdTExMDlcdTExNjlcdTExQUJcdTExMDZcdTExNjlcdTExQTgKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTA4XHUxMTY3XHUxMUE4Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTEwOVx1MTE3NVx1MTFBRgpcdTExMDlcdTExNjlcdTExQUJcdTExMENcdTExNzVcdTExQUYKXHUxMTA5XHUxMTY5XHUxMUFCXHUxMTEwXHUxMTY5XHUxMUI4Clx1MTEwOVx1MTE2OVx1MTFBQlx1MTExMlx1MTE2MgpcdTExMDlcdTExNjlcdTExQUZcdTExMENcdTExNzVcdTExQThcdTExMTJcdTExNzUKXHUxMTA5XHUxMTY5XHUxMUI3XHUxMTBBXHUxMTc1Clx1MTEwOVx1MTE2OVx1MTFCQ1x1MTEwQlx1MTE2MVx1MTEwQ1x1MTE3NQpcdTExMDlcdTExNjlcdTExQkNcdTExMEJcdTExNzUKXHUxMTA5XHUxMTY5XHUxMUJDXHUxMTExXHUxMTY3XHUxMUFCClx1MTEwOVx1MTE2Q1x1MTEwMFx1MTE2OVx1MTEwMFx1MTE3NQpcdTExMDlcdTExNkRcdTExMTFcdTExNzVcdTExQkMKXHUxMTA5XHUxMTZFXHUxMTAwXHUxMTY1XHUxMUFCClx1MTEwOVx1MTE2RVx1MTEwMlx1MTE2N1x1MTFBQgpcdTExMDlcdTExNkVcdTExMDNcdTExNjFcdTExQUIKXHUxMTA5XHUxMTZFXHUxMTAzXHUxMTY5XHUxMUJBXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwOVx1MTE2RVx1MTEwM1x1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDlcdTExNkVcdTExMDZcdTExNjdcdTExQUIKXHUxMTA5XHUxMTZFXHUxMTA2XHUxMTY3XHUxMUJDClx1MTEwOVx1MTE2RVx1MTEwN1x1MTE2MVx1MTFBOApcdTExMDlcdTExNkVcdTExMDlcdTExNjFcdTExQkMKXHUxMTA5XHUxMTZFXHUxMTA5XHUxMTY1XHUxMUE4Clx1MTEwOVx1MTE2RVx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMDlcdTExNkVcdTExMDlcdTExNzVcdTExMDVcdTExNjkKXHUxMTA5XHUxMTZFXHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwOVx1MTE2RVx1MTEwQlx1MTE2N1x1MTFCNwpcdTExMDlcdTExNkVcdTExMEJcdTExNjdcdTExQkMKXHUxMTA5XHUxMTZFXHUxMTBCXHUxMTc1XHUxMUI4Clx1MTEwOVx1MTE2RVx1MTEwQ1x1MTE2RVx1MTFBQgpcdTExMDlcdTExNkVcdTExMENcdTExNzVcdTExQjgKXHUxMTA5XHUxMTZFXHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwOVx1MTE2RVx1MTEwRlx1MTE2NVx1MTFCQQpcdTExMDlcdTExNkVcdTExMTFcdTExNzVcdTExQUYKXHUxMTA5XHUxMTZFXHUxMTEyXHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE2RVx1MTExMlx1MTE2NVx1MTFCN1x1MTEwOVx1MTE2Mlx1MTFCQwpcdTExMDlcdTExNkVcdTExMTJcdTExNkFcdTExMDBcdTExNzUKXHUxMTA5XHUxMTZFXHUxMUE4XHUxMTAyXHUxMTY3Clx1MTEwOVx1MTE2RVx1MTFBOFx1MTEwOVx1MTE2OQpcdTExMDlcdTExNkVcdTExQThcdTExMENcdTExNjYKXHUxMTA5XHUxMTZFXHUxMUFCXHUxMTAwXHUxMTYxXHUxMUFCClx1MTEwOVx1MTE2RVx1MTFBQlx1MTEwOVx1MTE2NQpcdTExMDlcdTExNkVcdTExQUJcdTExMDlcdTExNkUKXHUxMTA5XHUxMTZFXHUxMUFCXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTAwXHUxMTYxXHUxMUFCClx1MTEwOVx1MTE2RVx1MTFBQlx1MTEwQlx1MTE3MQpcdTExMDlcdTExNkVcdTExQUVcdTExMDBcdTExNjFcdTExMDVcdTExNjFcdTExQTgKXHUxMTA5XHUxMTZFXHUxMUFGXHUxMTA3XHUxMTY3XHUxMUJDClx1MTEwOVx1MTE2RVx1MTFBRlx1MTEwQ1x1MTE3NVx1MTFCOApcdTExMDlcdTExNkVcdTExQkFcdTExMENcdTExNjEKXHUxMTA5XHUxMTczXHUxMTAyXHUxMTc1XHUxMUI3Clx1MTEwOVx1MTE3M1x1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNzNcdTExMDlcdTExNzNcdTExMDVcdTExNjkKXHUxMTA5XHUxMTczXHUxMTA5XHUxMTczXHUxMUJDClx1MTEwOVx1MTE3M1x1MTEwQlx1MTE3MFx1MTExMFx1MTE2NQpcdTExMDlcdTExNzNcdTExMEJcdTExNzFcdTExMEVcdTExNzUKXHUxMTA5XHUxMTczXHUxMTBGXHUxMTY2XHUxMTBCXHUxMTc1XHUxMTEwXHUxMTczClx1MTEwOVx1MTE3M1x1MTExMFx1MTE3Mlx1MTEwM1x1MTE3NVx1MTEwQlx1MTE2OQpcdTExMDlcdTExNzNcdTExMTBcdTExNzNcdTExMDVcdTExNjZcdTExMDlcdTExNzMKXHUxMTA5XHUxMTczXHUxMTExXHUxMTY5XHUxMTBFXHUxMTczClx1MTEwOVx1MTE3M1x1MTFBRlx1MTEwRFx1MTE2NVx1MTFBOApcdTExMDlcdTExNzNcdTExQUZcdTExMTFcdTExNzNcdTExQjcKXHUxMTA5XHUxMTczXHUxMUI4XHUxMTAwXHUxMTZBXHUxMUFCClx1MTEwOVx1MTE3M1x1MTFCOFx1MTEwMFx1MTE3NQpcdTExMDlcdTExNzNcdTExQkNcdTExMDBcdTExNjJcdTExQTgKXHUxMTA5XHUxMTczXHUxMUJDXHUxMTA1XHUxMTc1Clx1MTEwOVx1MTE3M1x1MTFCQ1x1MTEwN1x1MTE2RQpcdTExMDlcdTExNzNcdTExQkNcdTExMEJcdTExNkRcdTExQkNcdTExMEVcdTExNjEKXHUxMTA5XHUxMTczXHUxMUJDXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwOVx1MTE3NVx1MTEwMFx1MTE2MVx1MTFBOApcdTExMDlcdTExNzVcdTExMDBcdTExNjFcdTExQUIKXHUxMTA5XHUxMTc1XHUxMTAwXHUxMTY5XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwMFx1MTE3M1x1MTFCN1x1MTEwRVx1MTE3NQpcdTExMDlcdTExNzVcdTExMDJcdTExNjFcdTExMDVcdTExNzVcdTExMEJcdTExNjkKXHUxMTA5XHUxMTc1XHUxMTAzXHUxMTYyXHUxMUE4Clx1MTEwOVx1MTE3NVx1MTEwNVx1MTE3NVx1MTEwQ1x1MTE3MwpcdTExMDlcdTExNzVcdTExMDZcdTExNjZcdTExQUJcdTExMTBcdTExNzMKXHUxMTA5XHUxMTc1XHUxMTA2XHUxMTc1XHUxMUFCClx1MTEwOVx1MTE3NVx1MTEwN1x1MTE2RVx1MTEwNlx1MTE2OQpcdTExMDlcdTExNzVcdTExMDlcdTExNjVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMTA5XHUxMTY1XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwOVx1MTE3M1x1MTExMFx1MTE2Nlx1MTFCNwpcdTExMDlcdTExNzVcdTExMEJcdTExNjFcdTExMDdcdTExNjVcdTExMENcdTExNzUKXHUxMTA5XHUxMTc1XHUxMTBCXHUxMTY1XHUxMTA2XHUxMTY1XHUxMTAyXHUxMTc1Clx1MTEwOVx1MTE3NVx1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMDlcdTExNzVcdTExMEJcdTExNzVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwQ1x1MTE2MVx1MTFBOApcdTExMDlcdTExNzVcdTExMENcdTExNjFcdTExQkMKXHUxMTA5XHUxMTc1XHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwOVx1MTE3NVx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMDlcdTExNzVcdTExMENcdTExNkVcdTExQkMKXHUxMTA5XHUxMTc1XHUxMTBDXHUxMTczXHUxMUFCClx1MTEwOVx1MTE3NVx1MTEwQ1x1MTE3NVx1MTFCOApcdTExMDlcdTExNzVcdTExMEVcdTExNjVcdTExQkMKXHUxMTA5XHUxMTc1XHUxMTEyXHUxMTYxXHUxMUI4Clx1MTEwOVx1MTE3NVx1MTExMlx1MTE2NVx1MTFCNwpcdTExMDlcdTExNzVcdTExQThcdTExMDBcdTExNkUKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTAwXHUxMTc1Clx1MTEwOVx1MTE3NVx1MTFBOFx1MTEwM1x1MTE2MVx1MTFCQwpcdTExMDlcdTExNzVcdTExQThcdTExMDVcdTExNjNcdTExQkMKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTA1XHUxMTZEXHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwOVx1MTE3NVx1MTFBOFx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMDlcdTExNzVcdTExQThcdTExMDhcdTExNjFcdTExQkMKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTA5XHUxMTYxClx1MTEwOVx1MTE3NVx1MTFBOFx1MTEwOVx1MTE2Mlx1MTFCQ1x1MTExMlx1MTE2QVx1MTFBRgpcdTExMDlcdTExNzVcdTExQThcdTExMEVcdTExNjkKXHUxMTA5XHUxMTc1XHUxMUE4XHUxMTEwXHUxMTYxXHUxMUE4Clx1MTEwOVx1MTE3NVx1MTFBOFx1MTExMVx1MTE2RVx1MTFCNwpcdTExMDlcdTExNzVcdTExQUJcdTExMDBcdTExNjkKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTAwXHUxMTcyClx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwMlx1MTE2N1x1MTFCNwpcdTExMDlcdTExNzVcdTExQUJcdTExMDZcdTExNkVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTA3XHUxMTYxXHUxMUFGClx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwN1x1MTE3NQpcdTExMDlcdTExNzVcdTExQUJcdTExMDlcdTExNjEKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTA5XHUxMTY2Clx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMDlcdTExNzVcdTExQUJcdTExMENcdTExNjZcdTExMTFcdTExNkVcdTExQjcKXHUxMTA5XHUxMTc1XHUxMUFCXHUxMTBFXHUxMTY1XHUxMUJDClx1MTEwOVx1MTE3NVx1MTFBQlx1MTEwRVx1MTE2NgpcdTExMDlcdTExNzVcdTExQUJcdTExMTJcdTExNkEKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTAwXHUxMTYxXHUxMUI3Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwMlx1MTE2MgpcdTExMDlcdTExNzVcdTExQUZcdTExMDVcdTExNjdcdTExQTgKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTA1XHUxMTY4Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMDlcdTExNzVcdTExQUZcdTExMDlcdTExNkUKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTA5XHUxMTczXHUxMUI4Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwOVx1MTE3NQpcdTExMDlcdTExNzVcdTExQUZcdTExMENcdTExNjFcdTExQkMKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwQ1x1MTE3NVx1MTFBRlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMDlcdTExNzVcdTExQUZcdTExMEVcdTExNjVcdTExQUIKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTBFXHUxMTY2Clx1MTEwOVx1MTE3NVx1MTFBRlx1MTEwRlx1MTE2NVx1MTFCQQpcdTExMDlcdTExNzVcdTExQUZcdTExMTBcdTExNjIKXHUxMTA5XHUxMTc1XHUxMUFGXHUxMTExXHUxMTYyClx1MTEwOVx1MTE3NVx1MTFBRlx1MTExMlx1MTE2NVx1MTFCNwpcdTExMDlcdTExNzVcdTExQUZcdTExMTJcdTExNjdcdTExQUIKXHUxMTA5XHUxMTc1XHUxMUI3XHUxMTA1XHUxMTc1Clx1MTEwOVx1MTE3NVx1MTFCN1x1MTEwN1x1MTE2RVx1MTEwNVx1MTE3M1x1MTFCNwpcdTExMDlcdTExNzVcdTExQjdcdTExMDlcdTExNjEKXHUxMTA5XHUxMTc1XHUxMUI3XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwOVx1MTE3NVx1MTFCN1x1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMDlcdTExNzVcdTExQjdcdTExMTFcdTExNjFcdTExQUIKXHUxMTBBXHUxMTYxXHUxMUJDXHUxMTAzXHUxMTZFXHUxMUJDXHUxMTBCXHUxMTc1Clx1MTEwQVx1MTE3NVx1MTEwNVx1MTE3M1x1MTFCNwpcdTExMEFcdTExNzVcdTExMEJcdTExNjFcdTExQkEKXHUxMTBCXHUxMTYxXHUxMTAwXHUxMTYxXHUxMTBBXHUxMTc1Clx1MTEwQlx1MTE2MVx1MTEwMlx1MTE2MVx1MTEwQlx1MTE2RVx1MTFBQlx1MTEwOVx1MTE2NQpcdTExMEJcdTExNjFcdTExMDNcdTExNzNcdTExMDJcdTExNzVcdTExQjcKXHUxMTBCXHUxMTYxXHUxMTAzXHUxMTczXHUxMUFGClx1MTEwQlx1MTE2MVx1MTEwOVx1MTE3MVx1MTEwQlx1MTE2RVx1MTFCNwpcdTExMEJcdTExNjFcdTExMDlcdTExNzNcdTExMTFcdTExNjFcdTExQUZcdTExMTBcdTExNzMKXHUxMTBCXHUxMTYxXHUxMTA5XHUxMTc1XHUxMTBCXHUxMTYxClx1MTEwQlx1MTE2MVx1MTEwQlx1MTE2RVx1MTFBRlx1MTEwNVx1MTE2NQpcdTExMEJcdTExNjFcdTExMENcdTExNjVcdTExMEFcdTExNzUKXHUxMTBCXHUxMTYxXHUxMTBDXHUxMTZFXHUxMUI3XHUxMTA2XHUxMTYxClx1MTEwQlx1MTE2MVx1MTEwQ1x1MTE3NVx1MTFBOApcdTExMEJcdTExNjFcdTExMEVcdTExNzVcdTExQjcKXHUxMTBCXHUxMTYxXHUxMTExXHUxMTYxXHUxMTEwXHUxMTczClx1MTEwQlx1MTE2MVx1MTExMVx1MTE3M1x1MTEwNVx1MTE3NVx1MTEwRlx1MTE2MQpcdTExMEJcdTExNjFcdTExMTFcdTExNzNcdTExQjcKXHUxMTBCXHUxMTYxXHUxMTEyXHUxMTY5XHUxMUI4Clx1MTEwQlx1MTE2MVx1MTExMlx1MTE3M1x1MTFBQgpcdTExMEJcdTExNjFcdTExQThcdTExMDBcdTExNzUKXHUxMTBCXHUxMTYxXHUxMUE4XHUxMTA2XHUxMTY5XHUxMUJDClx1MTEwQlx1MTE2MVx1MTFBOFx1MTEwOVx1MTE2RQpcdTExMEJcdTExNjFcdTExQUJcdTExMDBcdTExNjIKXHUxMTBCXHUxMTYxXHUxMUFCXHUxMTAwXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2QQpcdTExMEJcdTExNjFcdTExQUJcdTExMDJcdTExNjIKXHUxMTBCXHUxMTYxXHUxMUFCXHUxMTAyXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE2MVx1MTFBQlx1MTEwM1x1MTE2OVx1MTFCQwpcdTExMEJcdTExNjFcdTExQUJcdTExMDdcdTExNjFcdTExQkMKXHUxMTBCXHUxMTYxXHUxMUFCXHUxMTA3XHUxMTZFClx1MTEwQlx1MTE2MVx1MTFBQlx1MTEwQ1x1MTE2RQpcdTExMEJcdTExNjFcdTExQUZcdTExMDVcdTExNkVcdTExMDZcdTExNzVcdTExMDJcdTExNzJcdTExQjcKXHUxMTBCXHUxMTYxXHUxMUFGXHUxMTBGXHUxMTY5XHUxMTBCXHUxMTY5XHUxMUFGClx1MTEwQlx1MTE2MVx1MTFCN1x1MTEwOVx1MTE3NQpcdTExMEJcdTExNjFcdTExQjdcdTExMEZcdTExNjVcdTExQkEKXHUxMTBCXHUxMTYxXHUxMUI4XHUxMTA1XHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE2MVx1MTFDMVx1MTEwMlx1MTE2MVx1MTFBRgpcdTExMEJcdTExNjFcdTExQzFcdTExMDZcdTExNkVcdTExQUIKXHUxMTBCXHUxMTYyXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2Mlx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMEJcdTExNjJcdTExQThcdTExMDlcdTExNkUKXHUxMTBCXHUxMTYyXHUxMUFGXHUxMTA3XHUxMTY1XHUxMUI3Clx1MTEwQlx1MTE2M1x1MTEwMFx1MTE2MVx1MTFBQgpcdTExMEJcdTExNjNcdTExMDNcdTExNjFcdTExQUIKXHUxMTBCXHUxMTYzXHUxMTBCXHUxMTY5XHUxMUJDClx1MTEwQlx1MTE2M1x1MTFBOFx1MTEwMFx1MTE2MVx1MTFBQgpcdTExMEJcdTExNjNcdTExQThcdTExMDBcdTExNkVcdTExQTgKXHUxMTBCXHUxMTYzXHUxMUE4XHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwQlx1MTE2M1x1MTFBOFx1MTEwOVx1MTE2RQpcdTExMEJcdTExNjNcdTExQThcdTExMENcdTExNjVcdTExQjcKXHUxMTBCXHUxMTYzXHUxMUE4XHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwQlx1MTE2M1x1MTFBOFx1MTExMlx1MTE2OVx1MTFBQlx1MTEwMlx1MTE2NwpcdTExMEJcdTExNjNcdTExQkNcdTExMDJcdTExNjdcdTExQjcKXHUxMTBCXHUxMTYzXHUxMUJDXHUxMTA1XHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE2M1x1MTFCQ1x1MTEwNlx1MTE2MVx1MTFBRgpcdTExMEJcdTExNjNcdTExQkNcdTExMDdcdTExNjJcdTExMEVcdTExNkUKXHUxMTBCXHUxMTYzXHUxMUJDXHUxMTBDXHUxMTZFClx1MTEwQlx1MTE2M1x1MTFCQ1x1MTExMVx1MTE2MQpcdTExMEJcdTExNjVcdTExMDNcdTExNkVcdTExQjcKXHUxMTBCXHUxMTY1XHUxMTA1XHUxMTY3XHUxMTBCXHUxMTZFXHUxMUI3Clx1MTEwQlx1MTE2NVx1MTEwNVx1MTE3M1x1MTFBQgpcdTExMEJcdTExNjVcdTExMENcdTExNjZcdTExQkFcdTExMDdcdTExNjFcdTExQjcKXHUxMTBCXHUxMTY1XHUxMTBEXHUxMTYyXHUxMUJCXHUxMTAzXHUxMTczXHUxMUFCClx1MTEwQlx1MTE2NVx1MTEwRFx1MTE2NVx1MTEwM1x1MTE2MVx1MTEwMFx1MTE2MQpcdTExMEJcdTExNjVcdTExMERcdTExNjVcdTExQUJcdTExMENcdTExNzUKXHUxMTBCXHUxMTY1XHUxMUFCXHUxMTAyXHUxMTc1Clx1MTEwQlx1MTE2NVx1MTFBQlx1MTEwM1x1MTE2NVx1MTFBOApcdTExMEJcdTExNjVcdTExQUJcdTExMDVcdTExNjlcdTExQUIKXHUxMTBCXHUxMTY1XHUxMUFCXHUxMTBCXHUxMTY1Clx1MTEwQlx1MTE2NVx1MTFBRlx1MTEwMFx1MTE2RVx1MTFBRgpcdTExMEJcdTExNjVcdTExQUZcdTExMDVcdTExNzNcdTExQUIKXHUxMTBCXHUxMTY1XHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2NVx1MTFBRlx1MTExMVx1MTE3NVx1MTFCQQpcdTExMEJcdTExNjVcdTExQjdcdTExMDZcdTExNjEKXHUxMTBCXHUxMTY1XHUxMUI4XHUxMTA2XHUxMTZFClx1MTEwQlx1MTE2NVx1MTFCOFx1MTEwQ1x1MTE2OVx1MTFCQwpcdTExMEJcdTExNjVcdTExQjhcdTExMEVcdTExNjYKXHUxMTBCXHUxMTY1XHUxMUJDXHUxMTAzXHUxMTY1XHUxMUJDXHUxMTBCXHUxMTc1Clx1MTEwQlx1MTE2NVx1MTFCQ1x1MTEwNlx1MTE2MVx1MTFCQwpcdTExMEJcdTExNjVcdTExQkNcdTExMTBcdTExNjVcdTExMDVcdTExNzUKXHUxMTBCXHUxMTY1XHUxMUJEXHUxMTAwXHUxMTczXHUxMTBDXHUxMTY2Clx1MTEwQlx1MTE2Nlx1MTEwMlx1MTE2NVx1MTEwQ1x1MTE3NQpcdTExMEJcdTExNjZcdTExMEJcdTExNjVcdTExMEZcdTExNjVcdTExQUIKXHUxMTBCXHUxMTY2XHUxMUFCXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwMFx1MTE2NVx1MTFBQgpcdTExMEJcdTExNjdcdTExMDBcdTExNjlcdTExMDlcdTExNjJcdTExQkMKXHUxMTBCXHUxMTY3XHUxMTAwXHUxMTZBXHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwMFx1MTE2RVx1MTFBQgpcdTExMEJcdTExNjdcdTExMDBcdTExNkZcdTExQUIKXHUxMTBCXHUxMTY3XHUxMTAzXHUxMTYyXHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwQlx1MTE2N1x1MTEwM1x1MTE2NVx1MTFCMgpcdTExMEJcdTExNjdcdTExMDNcdTExNjlcdTExQkNcdTExMDlcdTExNjJcdTExQkMKXHUxMTBCXHUxMTY3XHUxMTAzXHUxMTczXHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwNVx1MTE2OVx1MTFBQgpcdTExMEJcdTExNjdcdTExMDVcdTExNzNcdTExQjcKXHUxMTBCXHUxMTY3XHUxMTA5XHUxMTY1XHUxMUJBClx1MTEwQlx1MTE2N1x1MTEwOVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNjdcdTExMEJcdTExNkFcdTExQkMKXHUxMTBCXHUxMTY3XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2N1x1MTEwQ1x1MTE2NVx1MTFBQlx1MTExMlx1MTE3NQpcdTExMEJcdTExNjdcdTExMENcdTExNzVcdTExQThcdTExMEJcdTExNkZcdTExQUIKXHUxMTBCXHUxMTY3XHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwQlx1MTE2N1x1MTExMlx1MTE2Mlx1MTFCQwpcdTExMEJcdTExNjdcdTExQThcdTExMDlcdTExNjEKXHUxMTBCXHUxMTY3XHUxMUE4XHUxMTA5XHUxMTc1Clx1MTEwQlx1MTE2N1x1MTFBOFx1MTExMlx1MTE2MVx1MTFBRgpcdTExMEJcdTExNjdcdTExQUJcdTExMDBcdTExNjdcdTExQUYKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTAwXHUxMTZFClx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwMFx1MTE3M1x1MTFBOApcdTExMEJcdTExNjdcdTExQUJcdTExMDBcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTA1XHUxMTYxXHUxMUE4Clx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwOVx1MTE2NVx1MTFBRgpcdTExMEJcdTExNjdcdTExQUJcdTExMDlcdTExNjYKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTA5XHUxMTY5XHUxMUE4Clx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwOVx1MTE3M1x1MTFCOApcdTExMEJcdTExNjdcdTExQUJcdTExMEJcdTExNjIKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTBCXHUxMTY4XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMEJcdTExNjdcdTExQUJcdTExMENcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTBDXHUxMTZFClx1MTEwQlx1MTE2N1x1MTFBQlx1MTEwRVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNjdcdTExQUJcdTExMTFcdTExNzVcdTExQUYKXHUxMTBCXHUxMTY3XHUxMUFCXHUxMTEyXHUxMTYxXHUxMUI4Clx1MTEwQlx1MTE2N1x1MTFBQlx1MTExMlx1MTE3MgpcdTExMEJcdTExNjdcdTExQUZcdTExMDBcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUFGXHUxMTA2XHUxMTYyClx1MTEwQlx1MTE2N1x1MTFBRlx1MTEwOVx1MTE2QwpcdTExMEJcdTExNjdcdTExQUZcdTExMDlcdTExNzVcdTExQjdcdTExMTJcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUFGXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwQlx1MTE2N1x1MTFBRlx1MTEwRVx1MTE2MQpcdTExMEJcdTExNjdcdTExQUZcdTExMTJcdTExNzNcdTExQUYKXHUxMTBCXHUxMTY3XHUxMUI3XHUxMTA1XHUxMTY3Clx1MTEwQlx1MTE2N1x1MTFCOFx1MTEwOVx1MTE2NQpcdTExMEJcdTExNjdcdTExQkNcdTExMDBcdTExNkVcdTExQTgKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTAyXHUxMTYxXHUxMUI3Clx1MTEwQlx1MTE2N1x1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQwpcdTExMEJcdTExNjdcdTExQkNcdTExMEJcdTExNjNcdTExQkMKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTBCXHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE2N1x1MTFCQ1x1MTEwQlx1MTE2RVx1MTFCQwpcdTExMEJcdTExNjdcdTExQkNcdTExMEJcdTExNkZcdTExQUJcdTExMTJcdTExNzUKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTYxClx1MTEwQlx1MTE2N1x1MTFCQ1x1MTExMlx1MTE2M1x1MTFCQwpcdTExMEJcdTExNjdcdTExQkNcdTExMTJcdTExNjlcdTExQUIKXHUxMTBCXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTZBClx1MTEwQlx1MTE2N1x1MTFDMVx1MTEwMFx1MTE2RVx1MTEwNVx1MTE3NQpcdTExMEJcdTExNjdcdTExQzFcdTExMDdcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY3XHUxMUMxXHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwQlx1MTE2OFx1MTEwMFx1MTE2MVx1MTFCNwpcdTExMEJcdTExNjhcdTExMDBcdTExNzNcdTExQjcKXHUxMTBCXHUxMTY4XHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwQlx1MTE2OFx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMEJcdTExNjhcdTExMDlcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY4XHUxMTA5XHUxMTY1XHUxMUFCClx1MTEwQlx1MTE2OFx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNjhcdTExMDlcdTExNzNcdTExQjgKXHUxMTBCXHUxMTY4XHUxMTA5XHUxMTc1XHUxMUE4XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwQlx1MTE2OFx1MTEwQlx1MTE2M1x1MTFBOApcdTExMEJcdTExNjhcdTExMENcdTExNjVcdTExQUIKXHUxMTBCXHUxMTY4XHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwQlx1MTE2OFx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMEJcdTExNjhcdTExMEZcdTExNjVcdTExQUJcdTExMDNcdTExNjIKXHUxMTBCXHUxMTY4XHUxMUJBXHUxMTAyXHUxMTYxXHUxMUFGClx1MTEwQlx1MTE2OVx1MTEwMlx1MTE3M1x1MTFBRgpcdTExMEJcdTExNjlcdTExMDVcdTExNjFcdTExQTgKXHUxMTBCXHUxMTY5XHUxMTA1XHUxMTYyXHUxMUJBXHUxMTAzXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTYxXHUxMUFCClx1MTEwQlx1MTE2OVx1MTEwNVx1MTE2Nlx1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMEJcdTExNjlcdTExMDVcdTExNjlcdTExMENcdTExNzUKXHUxMTBCXHUxMTY5XHUxMTA1XHUxMTczXHUxMUFCXHUxMTA3XHUxMTYxXHUxMUFGClx1MTEwQlx1MTE2OVx1MTEwN1x1MTE3M1x1MTFBQgpcdTExMEJcdTExNjlcdTExMDlcdTExNzVcdTExQjgKXHUxMTBCXHUxMTY5XHUxMTBCXHUxMTY3XHUxMUI3Clx1MTEwQlx1MTE2OVx1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMEJcdTExNjlcdTExMENcdTExNjVcdTExQUIKXHUxMTBCXHUxMTY5XHUxMTBDXHUxMTc1XHUxMUE4Clx1MTEwQlx1MTE2OVx1MTEwQ1x1MTE3NVx1MTFCQ1x1MTEwQlx1MTE2NQpcdTExMEJcdTExNjlcdTExMTFcdTExNjZcdTExMDVcdTExNjEKXHUxMTBCXHUxMTY5XHUxMTExXHUxMTc1XHUxMTA5XHUxMTczXHUxMTEwXHUxMTY2XHUxMUFGClx1MTEwQlx1MTE2OVx1MTExMlx1MTE3NVx1MTEwNVx1MTE2NwpcdTExMEJcdTExNjlcdTExQThcdTExMDlcdTExNjFcdTExQkMKXHUxMTBCXHUxMTY5XHUxMUE4XHUxMTA5XHUxMTZFXHUxMTA5XHUxMTZFClx1MTEwQlx1MTE2OVx1MTFBQlx1MTEwMFx1MTE2MVx1MTFCRApcdTExMEJcdTExNjlcdTExQUJcdTExMDVcdTExNjFcdTExMEJcdTExNzVcdTExQUIKXHUxMTBCXHUxMTY5XHUxMUFCXHUxMTA2XHUxMTY5XHUxMUI3Clx1MTEwQlx1MTE2OVx1MTFBQlx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTEwQlx1MTE3NVx1MTFBRgpcdTExMEJcdTExNjlcdTExQUJcdTExMTBcdTExNjlcdTExQkMKXHUxMTBCXHUxMTY5XHUxMUFGXHUxMTAwXHUxMTYxXHUxMTBCXHUxMTczXHUxMUFGClx1MTEwQlx1MTE2OVx1MTFBRlx1MTEwNVx1MTE3NVx1MTFCN1x1MTExMVx1MTE3NVx1MTFBOApcdTExMEJcdTExNjlcdTExQUZcdTExMTJcdTExNjIKXHUxMTBCXHUxMTY5XHUxMUJBXHUxMTBFXHUxMTYxXHUxMTA1XHUxMTc1XHUxMUI3Clx1MTEwQlx1MTE2QVx1MTEwQlx1MTE3NVx1MTEwOVx1MTE2N1x1MTEwRVx1MTE3MwpcdTExMEJcdTExNkFcdTExMEJcdTExNzVcdTExQUIKXHUxMTBCXHUxMTZBXHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwQlx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBQgpcdTExMEJcdTExNkFcdTExQkNcdTExMDdcdTExNzUKXHUxMTBCXHUxMTZBXHUxMUJDXHUxMTBDXHUxMTYxClx1MTEwQlx1MTE2Qlx1MTEwMlx1MTE2M1x1MTExMlx1MTE2MVx1MTEwNlx1MTE2N1x1MTFBQgpcdTExMEJcdTExNkJcdTExQUJcdTExMENcdTExNzUKXHUxMTBCXHUxMTZDXHUxMTAwXHUxMTYxXHUxMUJBXHUxMTBDXHUxMTc1XHUxMUI4Clx1MTEwQlx1MTE2Q1x1MTEwMFx1MTE2RVx1MTFBOApcdTExMEJcdTExNkNcdTExMDVcdTExNjlcdTExMEJcdTExNkVcdTExQjcKXHUxMTBCXHUxMTZDXHUxMTA5XHUxMTYxXHUxMUI3XHUxMTBFXHUxMTY5XHUxMUFCClx1MTEwQlx1MTE2Q1x1MTEwRVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNkNcdTExMEVcdTExNzVcdTExQjcKXHUxMTBCXHUxMTZDXHUxMTEyXHUxMTYxXHUxMUFGXHUxMTA2XHUxMTY1XHUxMTAyXHUxMTc1Clx1MTEwQlx1MTE2Q1x1MTFBQlx1MTEwN1x1MTE2MVx1MTFBRgpcdTExMEJcdTExNkNcdTExQUJcdTExMDlcdTExNjlcdTExQUIKXHUxMTBCXHUxMTZDXHUxMUFCXHUxMTBEXHUxMTY5XHUxMUE4Clx1MTEwQlx1MTE2RFx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMEJcdTExNkRcdTExMEJcdTExNzVcdTExQUYKXHUxMTBCXHUxMTZEXHUxMTBDXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2RFx1MTEwRVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNkRcdTExQkNcdTExMDBcdTExNzUKXHUxMTBCXHUxMTZEXHUxMUJDXHUxMTA5XHUxMTY1Clx1MTEwQlx1MTE2RFx1MTFCQ1x1MTEwQlx1MTE2NQpcdTExMEJcdTExNkVcdTExMDlcdTExNjFcdTExQUIKXHUxMTBCXHUxMTZFXHUxMTA5XHUxMTY1XHUxMUFCClx1MTEwQlx1MTE2RVx1MTEwOVx1MTE3M1x1MTFCQwpcdTExMEJcdTExNkVcdTExMEJcdTExNjdcdTExQUJcdTExMTJcdTExNzUKXHUxMTBCXHUxMTZFXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwQlx1MTE2RVx1MTEwRVx1MTE2Nlx1MTEwMFx1MTE2RVx1MTFBOApcdTExMEJcdTExNkVcdTExMTFcdTExNjdcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUFCXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwQlx1MTE2RVx1MTFBQlx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMEJcdTExNkVcdTExQUJcdTExMDdcdTExNjFcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUFCXHUxMTBDXHUxMTY1XHUxMUFCClx1MTEwQlx1MTE2RVx1MTFBQlx1MTExMlx1MTE2Mlx1MTFCQwpcdTExMEJcdTExNkVcdTExQUZcdTExMDlcdTExNjFcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2RVx1MTFCN1x1MTEwQ1x1MTE3NVx1MTFBOFx1MTEwQlx1MTE3NVx1MTFCNwpcdTExMEJcdTExNkVcdTExQkFcdTExMEJcdTExNjVcdTExMDVcdTExNzNcdTExQUIKXHUxMTBCXHUxMTZFXHUxMUJBXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQlx1MTE2Rlx1MTEwMlx1MTE2MVx1MTFBOApcdTExMEJcdTExNkZcdTExQUJcdTExMDBcdTExNjkKXHUxMTBCXHUxMTZGXHUxMUFCXHUxMTA1XHUxMTYyClx1MTEwQlx1MTE2Rlx1MTFBQlx1MTEwOVx1MTE2NQpcdTExMEJcdTExNkZcdTExQUJcdTExMDlcdTExNkVcdTExQkNcdTExMEJcdTExNzUKXHUxMTBCXHUxMTZGXHUxMUFCXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQlx1MTE2Rlx1MTFBQlx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMEJcdTExNkZcdTExQUJcdTExMTFcdTExNzVcdTExMDlcdTExNzMKXHUxMTBCXHUxMTZGXHUxMUFGXHUxMTAwXHUxMTczXHUxMUI4Clx1MTEwQlx1MTE2Rlx1MTFBRlx1MTEwM1x1MTE3M1x1MTEwRlx1MTE2NVx1MTFCOApcdTExMEJcdTExNkZcdTExQUZcdTExMDlcdTExNjYKXHUxMTBCXHUxMTZGXHUxMUFGXHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQlx1MTE3MFx1MTEwQlx1MTE3NVx1MTExMFx1MTE2NQpcdTExMEJcdTExNzFcdTExMDdcdTExNjFcdTExQUIKXHUxMTBCXHUxMTcxXHUxMTA3XHUxMTY1XHUxMUI4Clx1MTEwQlx1MTE3MVx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNzFcdTExMEJcdTExNkZcdTExQUIKXHUxMTBCXHUxMTcxXHUxMTEyXHUxMTY1XHUxMUI3Clx1MTEwQlx1MTE3MVx1MTExMlx1MTE2N1x1MTFCOApcdTExMEJcdTExNzFcdTExQkFcdTExMDlcdTExNjFcdTExMDVcdTExNjFcdTExQjcKXHUxMTBCXHUxMTcyXHUxMTAyXHUxMTYxXHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwQlx1MTE3Mlx1MTEwNVx1MTE2NVx1MTFCOApcdTExMEJcdTExNzJcdTExMDZcdTExNjdcdTExQkMKXHUxMTBCXHUxMTcyXHUxMTA2XHUxMTZFXHUxMUFGClx1MTEwQlx1MTE3Mlx1MTEwOVx1MTE2MVx1MTFBQgpcdTExMEJcdTExNzJcdTExMENcdTExNjVcdTExQTgKXHUxMTBCXHUxMTcyXHUxMTBFXHUxMTc1XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQlx1MTE3Mlx1MTExMlx1MTE2MVx1MTFBOApcdTExMEJcdTExNzJcdTExMTJcdTExNjJcdTExQkMKXHUxMTBCXHUxMTcyXHUxMTEyXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE3Mlx1MTFBOFx1MTEwMFx1MTE2RVx1MTFBQgpcdTExMEJcdTExNzJcdTExQThcdTExMDlcdTExNjFcdTExQkMKXHUxMTBCXHUxMTcyXHUxMUE4XHUxMTA5XHUxMTc1XHUxMUI4Clx1MTEwQlx1MTE3Mlx1MTFBOFx1MTEwRVx1MTE2NgpcdTExMEJcdTExNzNcdTExQUJcdTExMTJcdTExNjJcdTExQkMKXHUxMTBCXHUxMTczXHUxMUI3XHUxMTA1XHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE3M1x1MTFCN1x1MTEwNVx1MTE2RApcdTExMEJcdTExNzNcdTExQjdcdTExMDdcdTExNjFcdTExQUIKXHUxMTBCXHUxMTczXHUxMUI3XHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwQlx1MTE3M1x1MTFCN1x1MTEwOVx1MTE3NVx1MTFBOApcdTExMEJcdTExNzNcdTExQjdcdTExMEJcdTExNjFcdTExQTgKXHUxMTBCXHUxMTczXHUxMUI3XHUxMTBDXHUxMTZFClx1MTEwQlx1MTE3NFx1MTEwMFx1MTE2N1x1MTFBQgpcdTExMEJcdTExNzRcdTExMDJcdTExNjlcdTExQUIKXHUxMTBCXHUxMTc0XHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQlx1MTE3NFx1MTEwN1x1MTE2OVx1MTFBOApcdTExMEJcdTExNzRcdTExMDlcdTExNzVcdTExQTgKXHUxMTBCXHUxMTc0XHUxMTA5XHUxMTc1XHUxMUI3Clx1MTEwQlx1MTE3NFx1MTEwQlx1MTE2Q1x1MTEwNVx1MTE2OQpcdTExMEJcdTExNzRcdTExMEJcdTExNkRcdTExQTgKXHUxMTBCXHUxMTc0XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQlx1MTE3NFx1MTExMlx1MTE2MVx1MTFBOApcdTExMEJcdTExNzVcdTExMDBcdTExNjVcdTExQkEKXHUxMTBCXHUxMTc1XHUxMTAwXHUxMTY5XHUxMUJBClx1MTEwQlx1MTE3NVx1MTEwMlx1MTE2N1x1MTFCNwpcdTExMEJcdTExNzVcdTExMDJcdTExNjlcdTExQjcKXHUxMTBCXHUxMTc1XHUxMTAzXHUxMTYxXHUxMUFGClx1MTEwQlx1MTE3NVx1MTEwM1x1MTE2Mlx1MTEwNVx1MTE2OQpcdTExMEJcdTExNzVcdTExMDNcdTExNjlcdTExQkMKXHUxMTBCXHUxMTc1XHUxMTA1XHUxMTY1XHUxMUMyXHUxMTAwXHUxMTY2Clx1MTEwQlx1MTE3NVx1MTEwNVx1MTE2N1x1MTFBOFx1MTEwOVx1MTE2NQpcdTExMEJcdTExNzVcdTExMDVcdTExNjlcdTExQUJcdTExMENcdTExNjVcdTExQTgKXHUxMTBCXHUxMTc1XHUxMTA1XHUxMTczXHUxMUI3Clx1MTEwQlx1MTE3NVx1MTEwNlx1MTE3NVx1MTFBQgpcdTExMEJcdTExNzVcdTExMDdcdTExNjFcdTExQUZcdTExMDlcdTExNjkKXHUxMTBCXHUxMTc1XHUxMTA3XHUxMTY3XHUxMUFGClx1MTEwQlx1MTE3NVx1MTEwN1x1MTE2RVx1MTFBRgpcdTExMEJcdTExNzVcdTExMDhcdTExNjFcdTExQUYKXHUxMTBCXHUxMTc1XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwQlx1MTE3NVx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMEJcdTExNzVcdTExMDlcdTExNzNcdTExQUYKXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTYzXHUxMTAwXHUxMTc1Clx1MTEwQlx1MTE3NVx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMEJcdTExNzVcdTExMEJcdTExNkVcdTExQkEKXHUxMTBCXHUxMTc1XHUxMTBCXHUxMTZGXHUxMUFGClx1MTEwQlx1MTE3NVx1MTEwQlx1MTE3M1x1MTFBOFx1MTEwMFx1MTE2OQpcdTExMEJcdTExNzVcdTExMEJcdTExNzVcdTExQTgKXHUxMTBCXHUxMTc1XHUxMTBDXHUxMTY1XHUxMUFCClx1MTEwQlx1MTE3NVx1MTEwQ1x1MTE2RVx1MTFCQwpcdTExMEJcdTExNzVcdTExMTBcdTExNzNcdTExQUVcdTExMDJcdTExNjFcdTExQUYKXHUxMTBCXHUxMTc1XHUxMTEwXHUxMTczXHUxMUFGClx1MTEwQlx1MTE3NVx1MTExMlx1MTE2OVx1MTFBQgpcdTExMEJcdTExNzVcdTExQUJcdTExMDBcdTExNjFcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTY3XHUxMUE4Clx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE2OVx1MTFCQwpcdTExMEJcdTExNzVcdTExQUJcdTExMDBcdTExNkUKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTczXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwMFx1MTE3NQpcdTExMEJcdTExNzVcdTExQUJcdTExMDNcdTExNjkKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTA1XHUxMTcyClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMEJcdTExNzVcdTExQUJcdTExMDlcdTExNjJcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTA5XHUxMTZCClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwQlx1MTE2N1x1MTFBQgpcdTExMEJcdTExNzVcdTExQUJcdTExMEJcdTExNkZcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTBDXHUxMTYyClx1MTEwQlx1MTE3NVx1MTFBQlx1MTEwQ1x1MTE2OVx1MTFCQwpcdTExMEJcdTExNzVcdTExQUJcdTExMEVcdTExNjVcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTBFXHUxMTY2Clx1MTEwQlx1MTE3NVx1MTFBQlx1MTExMFx1MTE2NVx1MTEwMlx1MTE2Nlx1MTFCQQpcdTExMEJcdTExNzVcdTExQUJcdTExMTJcdTExNjEKXHUxMTBCXHUxMTc1XHUxMUFCXHUxMTEyXHUxMTY3XHUxMUJDClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwMFx1MTE2OVx1MTFCOApcdTExMEJcdTExNzVcdTExQUZcdTExMDBcdTExNzUKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTAzXHUxMTYxXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwM1x1MTE2MgpcdTExMEJcdTExNzVcdTExQUZcdTExMDNcdTExNzNcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTA3XHUxMTYxXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwN1x1MTE2OVx1MTFBQgpcdTExMEJcdTExNzVcdTExQUZcdTExMDdcdTExNkUKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwOVx1MTE2Mlx1MTFCQwpcdTExMEJcdTExNzVcdTExQUZcdTExMDlcdTExNjlcdTExQUIKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwQlx1MTE2Rlx1MTFBRgpcdTExMEJcdTExNzVcdTExQUZcdTExMENcdTExNjVcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTBDXHUxMTY5XHUxMUJDClx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwQ1x1MTE2RVx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMEJcdTExNzVcdTExQUZcdTExMERcdTExNzVcdTExQTgKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTBFXHUxMTY2Clx1MTEwQlx1MTE3NVx1MTFBRlx1MTEwRVx1MTE3NQpcdTExMEJcdTExNzVcdTExQUZcdTExMTJcdTExNjJcdTExQkMKXHUxMTBCXHUxMTc1XHUxMUFGXHUxMTEyXHUxMTZDXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQlx1MTE3NVx1MTFCN1x1MTEwMFx1MTE3M1x1MTFCNwpcdTExMEJcdTExNzVcdTExQjdcdTExMDZcdTExNkUKXHUxMTBCXHUxMTc1XHUxMUI4XHUxMTAzXHUxMTYyClx1MTEwQlx1MTE3NVx1MTFCOFx1MTEwNVx1MTE2N1x1MTFBOApcdTExMEJcdTExNzVcdTExQjhcdTExMDZcdTExNjFcdTExQkEKXHUxMTBCXHUxMTc1XHUxMUI4XHUxMTA5XHUxMTYxClx1MTEwQlx1MTE3NVx1MTFCOFx1MTEwOVx1MTE2RVx1MTFBRgpcdTExMEJcdTExNzVcdTExQjhcdTExMDlcdTExNzUKXHUxMTBCXHUxMTc1XHUxMUI4XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQlx1MTE3NVx1MTFCOFx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMEJcdTExNzVcdTExQjhcdTExMTJcdTExNjFcdTExQTgKXHUxMTBDXHUxMTYxXHUxMTAwXHUxMTYxXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQ1x1MTE2MVx1MTEwMFx1MTE2N1x1MTFBOApcdTExMENcdTExNjFcdTExMDBcdTExNzNcdTExQTgKXHUxMTBDXHUxMTYxXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2MVx1MTEwNVx1MTE2MVx1MTFCQwpcdTExMENcdTExNjFcdTExMDdcdTExNkVcdTExMDlcdTExNzVcdTExQjcKXHUxMTBDXHUxMTYxXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwQ1x1MTE2MVx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMENcdTExNjFcdTExMEJcdTExNjdcdTExQUIKXHUxMTBDXHUxMTYxXHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQ1x1MTE2MVx1MTEwQlx1MTE3Mlx1MTFBRgpcdTExMENcdTExNjFcdTExMENcdTExNjVcdTExQUJcdTExMDBcdTExNjUKXHUxMTBDXHUxMTYxXHUxMTBDXHUxMTY1XHUxMUJDClx1MTEwQ1x1MTE2MVx1MTEwQ1x1MTE2OVx1MTFBQlx1MTEwOVx1MTE3NVx1MTFCNwpcdTExMENcdTExNjFcdTExMTFcdTExNjFcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUE4XHUxMTAwXHUxMTYxClx1MTEwQ1x1MTE2MVx1MTFBOFx1MTEwMlx1MTE2N1x1MTFBQgpcdTExMENcdTExNjFcdTExQThcdTExMDlcdTExNjVcdTExQkMKXHUxMTBDXHUxMTYxXHUxMUE4XHUxMTBCXHUxMTY1XHUxMUI4Clx1MTEwQ1x1MTE2MVx1MTFBOFx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMENcdTExNjFcdTExQThcdTExMEJcdTExNzNcdTExQUJcdTExMDRcdTExNjFcdTExQUYKXHUxMTBDXHUxMTYxXHUxMUE4XHUxMTExXHUxMTZFXHUxMUI3Clx1MTEwQ1x1MTE2MVx1MTFBQlx1MTEwM1x1MTE3NQpcdTExMENcdTExNjFcdTExQUJcdTExMDRcdTExNzNcdTExQTgKXHUxMTBDXHUxMTYxXHUxMUFCXHUxMTBFXHUxMTc1Clx1MTEwQ1x1MTE2MVx1MTFBRlx1MTEwNlx1MTE2OVx1MTFCQQpcdTExMENcdTExNjFcdTExQjdcdTExMDFcdTExNjFcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTZFXHUxMTEyXHUxMTYxXHUxMUI3Clx1MTEwQ1x1MTE2MVx1MTFCN1x1MTEwOVx1MTE3NQpcdTExMENcdTExNjFcdTExQjdcdTExMEJcdTExNjlcdTExQkEKXHUxMTBDXHUxMTYxXHUxMUI3XHUxMTBDXHUxMTYxXHUxMTA1XHUxMTc1Clx1MTEwQ1x1MTE2MVx1MTFCOFx1MTEwQ1x1MTE3NQpcdTExMENcdTExNjFcdTExQkNcdTExMDBcdTExNkFcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwMFx1MTE3NVx1MTEwMFx1MTE2MVx1MTFBQgpcdTExMENcdTExNjFcdTExQkNcdTExMDVcdTExNjIKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA1XHUxMTY4Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwNVx1MTE3MwpcdTExMENcdTExNjFcdTExQkNcdTExMDZcdTExNjEKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA2XHUxMTY3XHUxMUFCClx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwNlx1MTE2OQpcdTExMENcdTExNjFcdTExQkNcdTExMDZcdTExNzUKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA3XHUxMTc1Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMENcdTExNjFcdTExQkNcdTExMDlcdTExNjkKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwQlx1MTE2Mlx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMENcdTExNjFcdTExQkNcdTExMEJcdTExNzVcdTExQUIKXHUxMTBDXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwQ1x1MTE2MVx1MTFCQ1x1MTEwRVx1MTE2MQpcdTExMENcdTExNjFcdTExQkNcdTExMTJcdTExNjFcdTExQThcdTExMDBcdTExNzNcdTExQjcKXHUxMTBDXHUxMTYyXHUxMTAyXHUxMTczXHUxMUJDClx1MTEwQ1x1MTE2Mlx1MTEwOFx1MTE2MVx1MTFBRlx1MTEwNVx1MTE3NQpcdTExMENcdTExNjJcdTExMDlcdTExNjFcdTExQUIKXHUxMTBDXHUxMTYyXHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwQ1x1MTE2Mlx1MTEwQ1x1MTE2MVx1MTFBOFx1MTEwMlx1MTE2N1x1MTFBQgpcdTExMENcdTExNjJcdTExMENcdTExNjVcdTExQkMKXHUxMTBDXHUxMTYyXHUxMTBFXHUxMTYyXHUxMTAwXHUxMTc1Clx1MTEwQ1x1MTE2Mlx1MTExMVx1MTE2MVx1MTFBQgpcdTExMENcdTExNjJcdTExMTJcdTExNjFcdTExQTgKXHUxMTBDXHUxMTYyXHUxMTEyXHUxMTZBXHUxMUFGXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTEwMFx1MTE2NVx1MTFCQQpcdTExMENcdTExNjVcdTExMDBcdTExNjlcdTExMDVcdTExNzUKXHUxMTBDXHUxMTY1XHUxMTAwXHUxMTY5XHUxMUJBClx1MTEwQ1x1MTE2NVx1MTEwMlx1MTE2N1x1MTFBOApcdTExMENcdTExNjVcdTExMDVcdTExNjVcdTExQUIKXHUxMTBDXHUxMTY1XHUxMTA1XHUxMTY1XHUxMUMyXHUxMTAwXHUxMTY2Clx1MTEwQ1x1MTE2NVx1MTEwN1x1MTE2NVx1MTFBQgpcdTExMENcdTExNjVcdTExMEJcdTExNkVcdTExQUYKXHUxMTBDXHUxMTY1XHUxMTBDXHUxMTY1XHUxMUFGXHUxMTA1XHUxMTY5Clx1MTEwQ1x1MTE2NVx1MTEwRVx1MTE2RVx1MTFBOApcdTExMENcdTExNjVcdTExQThcdTExMDBcdTExNzNcdTExQTgKXHUxMTBDXHUxMTY1XHUxMUE4XHUxMTAzXHUxMTYxXHUxMUJDXHUxMTEyXHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFBOFx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMENcdTExNjVcdTExQThcdTExMEJcdTExNkRcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUE4XHUxMTBCXHUxMTczXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwMFx1MTE2MgpcdTExMENcdTExNjVcdTExQUJcdTExMDBcdTExNjlcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTAwXHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwM1x1MTE2MVx1MTFBRgpcdTExMENcdTExNjVcdTExQUJcdTExMDVcdTExNjFcdTExMDNcdTExNjkKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTA2XHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMENcdTExNjVcdTExQUJcdTExMDdcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTA3XHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwOVx1MTE2NgpcdTExMENcdTExNjVcdTExQUJcdTExMDlcdTExNzUKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTBCXHUxMTZEXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwQ1x1MTE2MQpcdTExMENcdTExNjVcdTExQUJcdTExMENcdTExNjJcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTBDXHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTEwRVx1MTE2NVx1MTFBRgpcdTExMENcdTExNjVcdTExQUJcdTExMEVcdTExNjYKXHUxMTBDXHUxMTY1XHUxMUFCXHUxMTEwXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFBQlx1MTExMlx1MTE2NwpcdTExMENcdTExNjVcdTExQUJcdTExMTJcdTExNkUKXHUxMTBDXHUxMTY1XHUxMUFGXHUxMTAzXHUxMTYyClx1MTEwQ1x1MTE2NVx1MTFBRlx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMENcdTExNjVcdTExQUZcdTExMDdcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUFGXHUxMTBCXHUxMTYzXHUxMUE4Clx1MTEwQ1x1MTE2NVx1MTFBRlx1MTEwRVx1MTE2MQpcdTExMENcdTExNjVcdTExQjdcdTExMDBcdTExNjVcdTExQjcKXHUxMTBDXHUxMTY1XHUxMUI3XHUxMTA5XHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFCN1x1MTEwOVx1MTE3NVx1MTFCNwpcdTExMENcdTExNjVcdTExQjdcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUI3XHUxMTBDXHUxMTY1XHUxMUI3Clx1MTEwQ1x1MTE2NVx1MTFCN1x1MTEwRVx1MTE2MQpcdTExMENcdTExNjVcdTExQjhcdTExMDBcdTExNzNcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUI4XHUxMTA5XHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFCOFx1MTEwRVx1MTE2OVx1MTFBOApcdTExMENcdTExNjVcdTExQkFcdTExMDBcdTExNjFcdTExMDVcdTExNjFcdTExQTgKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTAwXHUxMTY1XHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwM1x1MTE2OQpcdTExMENcdTExNjVcdTExQkNcdTExMDVcdTExNzJcdTExMENcdTExNjFcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA1XHUxMTc1Clx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwNlx1MTE2MVx1MTFBRgpcdTExMENcdTExNjVcdTExQkNcdTExMDZcdTExNjdcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTFBQlx1MTEwM1x1MTE2MgpcdTExMENcdTExNjVcdTExQkNcdTExMDdcdTExNjkKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA3XHUxMTZFClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwN1x1MTE3NQpcdTExMENcdTExNjVcdTExQkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwQlx1MTE2OQpcdTExMENcdTExNjVcdTExQkNcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2NVx1MTFCQ1x1MTEwQ1x1MTE3NQpcdTExMENcdTExNjVcdTExQkNcdTExMEVcdTExNzUKXHUxMTBDXHUxMTY1XHUxMUJDXHUxMTEyXHUxMTZBXHUxMUE4XHUxMTEyXHUxMTc1Clx1MTEwQ1x1MTE2Nlx1MTEwMFx1MTE2OVx1MTFCQwpcdTExMENcdTExNjZcdTExMDBcdTExNkFcdTExMENcdTExNjVcdTExQjcKXHUxMTBDXHUxMTY2XHUxMTAzXHUxMTYyXHUxMTA1XHUxMTY5Clx1MTEwQ1x1MTE2Nlx1MTEwNlx1MTE2OVx1MTFBOApcdTExMENcdTExNjZcdTExMDdcdTExNjFcdTExQUYKXHUxMTBDXHUxMTY2XHUxMTA3XHUxMTY1XHUxMUI4Clx1MTEwQ1x1MTE2Nlx1MTEwOVx1MTE2MVx1MTFCQVx1MTEwMlx1MTE2MVx1MTFBRgpcdTExMENcdTExNjZcdTExMEJcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY2XHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQ1x1MTE2Nlx1MTEwQ1x1MTE2MVx1MTFBOApcdTExMENcdTExNjZcdTExMENcdTExNkVcdTExMDNcdTExNjkKXHUxMTBDXHUxMTY2XHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwQ1x1MTE2Nlx1MTExMVx1MTE2RVx1MTFCNwpcdTExMENcdTExNjZcdTExMTJcdTExNjFcdTExQUIKXHUxMTBDXHUxMTY5XHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwQ1x1MTE2OVx1MTEwMFx1MTE2NVx1MTFBQgpcdTExMENcdTExNjlcdTExMDBcdTExNzNcdTExQjcKXHUxMTBDXHUxMTY5XHUxMTAwXHUxMTc1XHUxMUJDClx1MTEwQ1x1MTE2OVx1MTEwNlx1MTE2N1x1MTFCQwpcdTExMENcdTExNjlcdTExMDZcdTExNzVcdTExMDVcdTExNkQKXHUxMTBDXHUxMTY5XHUxMTA5XHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE2OVx1MTEwOVx1MTE2NVx1MTFBQgpcdTExMENcdTExNjlcdTExMEJcdTExNkRcdTExQkNcdTExMTJcdTExNzUKXHUxMTBDXHUxMTY5XHUxMTBDXHUxMTY1XHUxMUFGClx1MTEwQ1x1MTE2OVx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMENcdTExNjlcdTExMENcdTExNzVcdTExQTgKXHUxMTBDXHUxMTY5XHUxMUFCXHUxMTAzXHUxMTYyXHUxMUJBXHUxMTA2XHUxMTYxXHUxMUFGClx1MTEwQ1x1MTE2OVx1MTFBQlx1MTEwQ1x1MTE2MgpcdTExMENcdTExNjlcdTExQUZcdTExMEJcdTExNjVcdTExQjgKXHUxMTBDXHUxMTY5XHUxMUFGXHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTEwMFx1MTE2RApcdTExMENcdTExNjlcdTExQkNcdTExMDVcdTExNjkKXHUxMTBDXHUxMTY5XHUxMUJDXHUxMTA1XHUxMTcyClx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTEwOVx1MTE2OVx1MTEwNVx1MTE3NQpcdTExMENcdTExNjlcdTExQkNcdTExMEJcdTExNjVcdTExQjhcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTY5XHUxMUJDXHUxMTBDXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2OVx1MTFCQ1x1MTExMlx1MTE2MVx1MTFCOApcdTExMENcdTExNkFcdTExMDlcdTExNjVcdTExQTgKXHUxMTBDXHUxMTZDXHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwQ1x1MTE2RVx1MTEwMFx1MTE2QVx1MTFBQlx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMENcdTExNkVcdTExMDVcdTExNzNcdTExQjcKXHUxMTBDXHUxMTZFXHUxMTA2XHUxMTYxXHUxMUFGClx1MTEwQ1x1MTE2RVx1MTEwNlx1MTE2NVx1MTEwMlx1MTE3NQpcdTExMENcdTExNkVcdTExMDZcdTExNjVcdTExQTgKXHUxMTBDXHUxMTZFXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2RVx1MTEwNlx1MTE3NVx1MTFBQgpcdTExMENcdTExNkVcdTExMDdcdTExNjFcdTExQkMKXHUxMTBDXHUxMTZFXHUxMTA3XHUxMTY3XHUxMUFCClx1MTEwQ1x1MTE2RVx1MTEwOVx1MTE3NVx1MTFBOApcdTExMENcdTExNkVcdTExMEJcdTExNzVcdTExQUIKXHUxMTBDXHUxMTZFXHUxMTBCXHUxMTc1XHUxMUFGClx1MTEwQ1x1MTE2RVx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMENcdTExNkVcdTExMENcdTExNjVcdTExQUJcdTExMENcdTExNjEKXHUxMTBDXHUxMTZFXHUxMTEwXHUxMTYyXHUxMUE4Clx1MTEwQ1x1MTE2RVx1MTFBQlx1MTEwN1x1MTE3NQpcdTExMENcdTExNkVcdTExQUZcdTExMDBcdTExNjVcdTExMDVcdTExNzUKXHUxMTBDXHUxMTZFXHUxMUFGXHUxMTAwXHUxMTc1Clx1MTEwQ1x1MTE2RVx1MTFBRlx1MTEwNlx1MTE2RVx1MTEwMlx1MTE3NApcdTExMENcdTExNkVcdTExQkNcdTExMDBcdTExNjFcdTExQUIKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTAwXHUxMTY4XHUxMTA3XHUxMTYxXHUxMUJDXHUxMTA5XHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwMFx1MTE2RVx1MTFBOApcdTExMENcdTExNkVcdTExQkNcdTExMDJcdTExNjdcdTExQUIKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTAzXHUxMTYxXHUxMUFCClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwM1x1MTE2OVx1MTFBOApcdTExMENcdTExNkVcdTExQkNcdTExMDdcdTExNjFcdTExQUIKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTA3XHUxMTZFClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwOVx1MTE2NgpcdTExMENcdTExNkVcdTExQkNcdTExMDlcdTExNjlcdTExMDBcdTExNzVcdTExMEJcdTExNjVcdTExQjgKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTA5XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE2RVx1MTFCQ1x1MTEwQlx1MTE2MVx1MTFCQwpcdTExMENcdTExNkVcdTExQkNcdTExMEJcdTExNkQKXHUxMTBDXHUxMTZFXHUxMUJDXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTAwXHUxMTZEClx1MTEwQ1x1MTE3M1x1MTFBOFx1MTEwOVx1MTE2NVx1MTFBOApcdTExMENcdTExNzNcdTExQThcdTExMDlcdTExNzUKXHUxMTBDXHUxMTczXHUxMUFGXHUxMTAwXHUxMTY1XHUxMTBCXHUxMTZFXHUxMUI3Clx1MTEwQ1x1MTE3M1x1MTFCQ1x1MTEwMFx1MTE2MQpcdTExMENcdTExNzNcdTExQkNcdTExMDBcdTExNjUKXHUxMTBDXHUxMTczXHUxMUJDXHUxMTAwXHUxMTZGXHUxMUFCClx1MTEwQ1x1MTE3M1x1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQwpcdTExMENcdTExNzNcdTExQkNcdTExMDlcdTExNjYKXHUxMTBDXHUxMTc1XHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTEwMFx1MTE2MVx1MTFCOApcdTExMENcdTExNzVcdTExMDBcdTExNjdcdTExQkMKXHUxMTBDXHUxMTc1XHUxMTAwXHUxMTczXHUxMUE4XHUxMTEyXHUxMTc1Clx1MTEwQ1x1MTE3NVx1MTEwMFx1MTE3M1x1MTFCNwpcdTExMENcdTExNzVcdTExMDBcdTExNzNcdTExQjgKXHUxMTBDXHUxMTc1XHUxMTAyXHUxMTczXHUxMUJDClx1MTEwQ1x1MTE3NVx1MTEwNVx1MTE3M1x1MTFCN1x1MTEwMFx1MTE3NVx1MTFBRgpcdTExMENcdTExNzVcdTExMDVcdTExNzVcdTExMDlcdTExNjFcdTExQUIKXHUxMTBDXHUxMTc1XHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwQ1x1MTE3NVx1MTEwN1x1MTE2RVx1MTFCQwpcdTExMENcdTExNzVcdTExMDlcdTExNzVcdTExQTgKXHUxMTBDXHUxMTc1XHUxMTBCXHUxMTY3XHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTEwQlx1MTE2RVx1MTEwMFx1MTE2MgpcdTExMENcdTExNzVcdTExMEJcdTExNkZcdTExQUIKXHUxMTBDXHUxMTc1XHUxMTBDXHUxMTY1XHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTEwQ1x1MTE2NVx1MTFCNwpcdTExMENcdTExNzVcdTExMENcdTExNzVcdTExQUIKXHUxMTBDXHUxMTc1XHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwQ1x1MTE3NVx1MTFBOFx1MTEwOVx1MTE2NVx1MTFBQgpcdTExMENcdTExNzVcdTExQThcdTExMEJcdTExNjVcdTExQjgKXHUxMTBDXHUxMTc1XHUxMUE4XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwQ1x1MTE3NVx1MTFBOFx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMENcdTExNzVcdTExQUJcdTExMDBcdTExNzNcdTExQjgKXHUxMTBDXHUxMTc1XHUxMUFCXHUxMTAzXHUxMTY5XHUxMUJDClx1MTEwQ1x1MTE3NVx1MTFBQlx1MTEwNVx1MTE2OQpcdTExMENcdTExNzVcdTExQUJcdTExMDVcdTExNkQKXHUxMTBDXHUxMTc1XHUxMUFCXHUxMTA1XHUxMTc1Clx1MTEwQ1x1MTE3NVx1MTFBQlx1MTEwRFx1MTE2MQpcdTExMENcdTExNzVcdTExQUJcdTExMEVcdTExNjFcdTExQUYKXHUxMTBDXHUxMTc1XHUxMUFCXHUxMTBFXHUxMTZFXHUxMUFGClx1MTEwQ1x1MTE3NVx1MTFBQlx1MTExMFx1MTE2OVx1MTFCQwpcdTExMENcdTExNzVcdTExQUJcdTExMTJcdTExNjJcdTExQkMKXHUxMTBDXHUxMTc1XHUxMUFGXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwQ1x1MTE3NVx1MTFBRlx1MTEwN1x1MTE2N1x1MTFCQwpcdTExMENcdTExNzVcdTExQUZcdTExMDlcdTExNjUKXHUxMTBDXHUxMTc1XHUxMUI3XHUxMTBDXHUxMTYxXHUxMUE4Clx1MTEwQ1x1MTE3NVx1MTFCOFx1MTEwM1x1MTE2MVx1MTFBQgpcdTExMENcdTExNzVcdTExQjhcdTExMEJcdTExNjFcdTExQUIKXHUxMTBDXHUxMTc1XHUxMUI4XHUxMTBDXHUxMTZFXHUxMUJDClx1MTEwRFx1MTE2MVx1MTEwQ1x1MTE3M1x1MTFCQwpcdTExMERcdTExNzVcdTExMDFcdTExNjVcdTExMDBcdTExNzUKXHUxMTBFXHUxMTYxXHUxMTAyXHUxMTYxXHUxMUI3Clx1MTEwRVx1MTE2MVx1MTEwNVx1MTE2MVx1MTEwNVx1MTE3NQpcdTExMEVcdTExNjFcdTExMDVcdTExNjNcdTExQkMKXHUxMTBFXHUxMTYxXHUxMTA1XHUxMTc1XHUxMUI3Clx1MTEwRVx1MTE2MVx1MTEwN1x1MTE2N1x1MTFBRgpcdTExMEVcdTExNjFcdTExMDlcdTExNjVcdTExQUIKXHUxMTBFXHUxMTYxXHUxMTBFXHUxMTczXHUxMUI3Clx1MTEwRVx1MTE2MVx1MTFBOFx1MTEwMFx1MTE2MVx1MTFBOApcdTExMEVcdTExNjFcdTExQUJcdTExMDZcdTExNkVcdTExQUYKXHUxMTBFXHUxMTYxXHUxMUFCXHUxMTA5XHUxMTY1XHUxMUJDClx1MTEwRVx1MTE2MVx1MTFCN1x1MTEwMFx1MTE2MQpcdTExMEVcdTExNjFcdTExQjdcdTExMDBcdTExNzVcdTExMDVcdTExNzNcdTExQjcKXHUxMTBFXHUxMTYxXHUxMUI3XHUxMTA5XHUxMTYyClx1MTEwRVx1MTE2MVx1MTFCN1x1MTEwOVx1MTE2NVx1MTFBOApcdTExMEVcdTExNjFcdTExQjdcdTExMEJcdTExNjcKXHUxMTBFXHUxMTYxXHUxMUI3XHUxMTBCXHUxMTZDClx1MTEwRVx1MTE2MVx1MTFCN1x1MTEwQ1x1MTE2OQpcdTExMEVcdTExNjFcdTExQkFcdTExMENcdTExNjFcdTExQUIKXHUxMTBFXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTYxClx1MTEwRVx1MTE2MVx1MTFCQ1x1MTEwMFx1MTE2OQpcdTExMEVcdTExNjFcdTExQkNcdTExMDBcdTExNkUKXHUxMTBFXHUxMTYxXHUxMUJDXHUxMTA2XHUxMTZFXHUxMUFCClx1MTEwRVx1MTE2MVx1MTFCQ1x1MTEwN1x1MTE2MVx1MTFBOQpcdTExMEVcdTExNjFcdTExQkNcdTExMENcdTExNjFcdTExQTgKXHUxMTBFXHUxMTYxXHUxMUJDXHUxMTBDXHUxMTY5Clx1MTEwRVx1MTE2Mlx1MTEwMlx1MTE2NVx1MTFBRgpcdTExMEVcdTExNjJcdTExMENcdTExNjVcdTExQjcKXHUxMTBFXHUxMTYyXHUxMUE4XHUxMTAwXHUxMTYxXHUxMTA3XHUxMTYxXHUxMUJDClx1MTEwRVx1MTE2Mlx1MTFBOFx1MTEwN1x1MTE2MVx1MTFCQwpcdTExMEVcdTExNjJcdTExQThcdTExMDlcdTExNjFcdTExQkMKXHUxMTBFXHUxMTYyXHUxMUE4XHUxMTBCXHUxMTc1XHUxMUI3Clx1MTEwRVx1MTE2Mlx1MTFCN1x1MTExMVx1MTE3NVx1MTEwQlx1MTE2NVx1MTFBQgpcdTExMEVcdTExNjVcdTExMDdcdTExNjVcdTExQUYKXHUxMTBFXHUxMTY1XHUxMTBCXHUxMTczXHUxMUI3Clx1MTEwRVx1MTE2NVx1MTFBQlx1MTEwMFx1MTE2RVx1MTFBOApcdTExMEVcdTExNjVcdTExQUJcdTExMDNcdTExNkVcdTExQkMKXHUxMTBFXHUxMTY1XHUxMUFCXHUxMTBDXHUxMTYxXHUxMUJDClx1MTEwRVx1MTE2NVx1MTFBQlx1MTEwQ1x1MTE2MgpcdTExMEVcdTExNjVcdTExQUJcdTExMEVcdTExNjVcdTExQUJcdTExMTJcdTExNzUKXHUxMTBFXHUxMTY1XHUxMUFGXHUxMTAzXHUxMTY5Clx1MTEwRVx1MTE2NVx1MTFBRlx1MTEwQ1x1MTE2NVx1MTExMlx1MTE3NQpcdTExMEVcdTExNjVcdTExQUZcdTExMTJcdTExNjFcdTExQTgKXHUxMTBFXHUxMTY1XHUxMUJBXHUxMTAyXHUxMTYxXHUxMUFGClx1MTEwRVx1MTE2NVx1MTFCQVx1MTEwRFx1MTE2MgpcdTExMEVcdTExNjVcdTExQkNcdTExMDJcdTExNjdcdTExQUIKXHUxMTBFXHUxMTY1XHUxMUJDXHUxMTA3XHUxMTYxXHUxMTBDXHUxMTc1Clx1MTEwRVx1MTE2NVx1MTFCQ1x1MTEwOVx1MTE2OQpcdTExMEVcdTExNjVcdTExQkNcdTExMEVcdTExNkVcdTExQUIKXHUxMTBFXHUxMTY2XHUxMTAwXHUxMTY4Clx1MTEwRVx1MTE2Nlx1MTEwNVx1MTE2N1x1MTFBOApcdTExMEVcdTExNjZcdTExMEJcdTExNjlcdTExQUIKXHUxMTBFXHUxMTY2XHUxMTBCXHUxMTcyXHUxMUE4Clx1MTEwRVx1MTE2Nlx1MTEwQ1x1MTE2RVx1MTFCQwpcdTExMEVcdTExNjZcdTExMTJcdTExNjVcdTExQjcKXHUxMTBFXHUxMTY5XHUxMTAzXHUxMTczXHUxMUJDXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTYyXHUxMUJDClx1MTEwRVx1MTE2OVx1MTEwN1x1MTE2MVx1MTFBQgpcdTExMEVcdTExNjlcdTExMDdcdTExNjFcdTExQjgKXHUxMTBFXHUxMTY5XHUxMTA5XHUxMTYxXHUxMUJDXHUxMTEyXHUxMTZBClx1MTEwRVx1MTE2OVx1MTEwOVx1MTE2RVx1MTFBQgpcdTExMEVcdTExNjlcdTExMEJcdTExNjdcdTExMDVcdTExNzNcdTExQjcKXHUxMTBFXHUxMTY5XHUxMTBCXHUxMTZGXHUxMUFCClx1MTEwRVx1MTE2OVx1MTEwQ1x1MTE2NVx1MTEwMlx1MTE2N1x1MTFBOApcdTExMEVcdTExNjlcdTExMENcdTExNjVcdTExQjcKXHUxMTBFXHUxMTY5XHUxMTBFXHUxMTY1XHUxMUJDClx1MTEwRVx1MTE2OVx1MTEwRlx1MTE2OVx1MTFBRlx1MTEwNVx1MTE3NVx1MTFCQQpcdTExMEVcdTExNjlcdTExQkFcdTExMDdcdTExNkVcdTExQUYKXHUxMTBFXHUxMTY5XHUxMUJDXHUxMTAwXHUxMTYxXHUxMUE4Clx1MTEwRVx1MTE2OVx1MTFCQ1x1MTEwNVx1MTE3NQpcdTExMEVcdTExNjlcdTExQkNcdTExMENcdTExNjFcdTExQkMKXHUxMTBFXHUxMTZBXHUxMUFGXHUxMTBCXHUxMTY3XHUxMUJDClx1MTEwRVx1MTE2Q1x1MTEwMFx1MTE3M1x1MTFBQgpcdTExMEVcdTExNkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTBFXHUxMTZDXHUxMTA5XHUxMTY1XHUxMUFCClx1MTEwRVx1MTE2Q1x1MTEwOVx1MTE3NVx1MTFBQgpcdTExMEVcdTExNkNcdTExMEJcdTExNjFcdTExQTgKXHUxMTBFXHUxMTZDXHUxMTBDXHUxMTY5XHUxMUJDClx1MTEwRVx1MTE2RVx1MTEwOVx1MTE2NVx1MTFBOApcdTExMEVcdTExNkVcdTExMEJcdTExNjVcdTExQTgKXHUxMTBFXHUxMTZFXHUxMTBDXHUxMTc1XHUxMUFCClx1MTEwRVx1MTE2RVx1MTEwRVx1MTE2NVx1MTFBQgpcdTExMEVcdTExNkVcdTExMEVcdTExNzNcdTExQTgKXHUxMTBFXHUxMTZFXHUxMUE4XHUxMTAwXHUxMTZFClx1MTEwRVx1MTE2RVx1MTFBOFx1MTEwOVx1MTE2OQpcdTExMEVcdTExNkVcdTExQThcdTExMENcdTExNjYKXHUxMTBFXHUxMTZFXHUxMUE4XHUxMTEyXHUxMTYxClx1MTEwRVx1MTE2RVx1MTFBRlx1MTEwMFx1MTE3M1x1MTFBQgpcdTExMEVcdTExNkVcdTExQUZcdTExMDdcdTExNjFcdTExQUYKXHUxMTBFXHUxMTZFXHUxMUFGXHUxMTA5XHUxMTYxXHUxMUFCClx1MTEwRVx1MTE2RVx1MTFBRlx1MTEwOVx1MTE3NVx1MTFBQgpcdTExMEVcdTExNkVcdTExQUZcdTExMEJcdTExNjdcdTExQUIKXHUxMTBFXHUxMTZFXHUxMUFGXHUxMTBCXHUxMTc1XHUxMUI4Clx1MTEwRVx1MTE2RVx1MTFBRlx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMEVcdTExNkVcdTExQUZcdTExMTFcdTExNjFcdTExQUIKXHUxMTBFXHUxMTZFXHUxMUJDXHUxMTAwXHUxMTY3XHUxMUE4Clx1MTEwRVx1MTE2RVx1MTFCQ1x1MTEwMFx1MTE2OQpcdTExMEVcdTExNkVcdTExQkNcdTExMDNcdTExNjlcdTExQUYKXHUxMTBFXHUxMTZFXHUxMUJDXHUxMTA3XHUxMTZFXHUxMUFCXHUxMTEyXHUxMTc1Clx1MTEwRVx1MTE2RVx1MTFCQ1x1MTEwRVx1MTE2NVx1MTFCQ1x1MTEwM1x1MTE2OQpcdTExMEVcdTExNzFcdTExMEJcdTExNjVcdTExQjgKXHUxMTBFXHUxMTcxXHUxMTBDXHUxMTc1XHUxMUE4Clx1MTEwRVx1MTE3MVx1MTExMlx1MTE2M1x1MTFCQwpcdTExMEVcdTExNzVcdTExMEJcdTExNjNcdTExQTgKXHUxMTBFXHUxMTc1XHUxMUFCXHUxMTAwXHUxMTZFClx1MTEwRVx1MTE3NVx1MTFBQlx1MTEwRVx1MTE2NVx1MTFBOApcdTExMEVcdTExNzVcdTExQUZcdTExMDlcdTExNzVcdTExQjgKXHUxMTBFXHUxMTc1XHUxMUFGXHUxMTBCXHUxMTZGXHUxMUFGClx1MTEwRVx1MTE3NVx1MTFBRlx1MTExMVx1MTE2MVx1MTFBQgpcdTExMEVcdTExNzVcdTExQjdcdTExMDNcdTExNjIKXHUxMTBFXHUxMTc1XHUxMUI3XHUxMTA2XHUxMTZFXHUxMUE4Clx1MTEwRVx1MTE3NVx1MTFCN1x1MTEwOVx1MTE3NVx1MTFBRgpcdTExMEVcdTExNzVcdTExQkFcdTExMDlcdTExNjlcdTExQUYKXHUxMTBFXHUxMTc1XHUxMUJDXHUxMTBFXHUxMTYxXHUxMUFCClx1MTEwRlx1MTE2MVx1MTEwNlx1MTE2Nlx1MTEwNVx1MTE2MQpcdTExMEZcdTExNjFcdTExMEJcdTExNkVcdTExQUJcdTExMTBcdTExNjUKXHUxMTBGXHUxMTYxXHUxMUFGXHUxMTAwXHUxMTZFXHUxMUE4XHUxMTA5XHUxMTZFClx1MTEwRlx1MTE2Mlx1MTEwNVx1MTE3NVx1MTFBOFx1MTExMFx1MTE2NQpcdTExMEZcdTExNjJcdTExQjdcdTExMTFcdTExNjVcdTExMDlcdTExNzMKXHUxMTBGXHUxMTYyXHUxMUI3XHUxMTExXHUxMTY2XHUxMTBCXHUxMTc1XHUxMUFCClx1MTEwRlx1MTE2NVx1MTExMFx1MTE3M1x1MTFBQgpcdTExMEZcdTExNjVcdTExQUJcdTExMDNcdTExNzVcdTExMDlcdTExNjdcdTExQUIKXHUxMTBGXHUxMTY1XHUxMUFGXHUxMTA1XHUxMTY1Clx1MTEwRlx1MTE2NVx1MTFCN1x1MTExMVx1MTE3Mlx1MTExMFx1MTE2NQpcdTExMEZcdTExNjlcdTExMDFcdTExNzVcdTExMDVcdTExNzUKXHUxMTBGXHUxMTY5XHUxMTA2XHUxMTc1XHUxMTAzXHUxMTc1Clx1MTEwRlx1MTE2OVx1MTFBQlx1MTEwOVx1MTE2NVx1MTExMFx1MTE3MwpcdTExMEZcdTExNjlcdTExQUZcdTExMDVcdTExNjEKXHUxMTBGXHUxMTY5XHUxMUI3XHUxMTExXHUxMTczXHUxMUFGXHUxMTA1XHUxMTY2XHUxMUE4XHUxMTA5XHUxMTczClx1MTEwRlx1MTE2OVx1MTFCQ1x1MTEwMlx1MTE2MVx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMEZcdTExNkJcdTExMDBcdTExNjFcdTExQjcKXHUxMTBGXHUxMTZFXHUxMTAzXHUxMTY2XHUxMTEwXHUxMTYxClx1MTEwRlx1MTE3M1x1MTEwNVx1MTE3NVx1MTFCNwpcdTExMEZcdTExNzNcdTExQUJcdTExMDBcdTExNzVcdTExQUYKXHUxMTBGXHUxMTczXHUxMUFCXHUxMTA0XHUxMTYxXHUxMUFGClx1MTEwRlx1MTE3M1x1MTFBQlx1MTEwOVx1MTE2OVx1MTEwNVx1MTE3NQpcdTExMEZcdTExNzNcdTExQUJcdTExMEJcdTExNjFcdTExMDNcdTExNzNcdTExQUYKXHUxMTBGXHUxMTczXHUxMUFCXHUxMTBCXHUxMTY1XHUxMTA2XHUxMTY1XHUxMTAyXHUxMTc1Clx1MTEwRlx1MTE3M1x1MTFBQlx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMEZcdTExNzNcdTExQUJcdTExMENcdTExNjVcdTExQUYKXHUxMTBGXHUxMTczXHUxMUFGXHUxMTA1XHUxMTYyXHUxMTA5XHUxMTc1XHUxMUE4Clx1MTEwRlx1MTE3M1x1MTFBRlx1MTEwNVx1MTE2NVx1MTFCOApcdTExMEZcdTExNzVcdTExQUZcdTExMDVcdTExNjkKXHUxMTEwXHUxMTYxXHUxMTBCXHUxMTc1XHUxMUI4Clx1MTExMFx1MTE2MVx1MTEwQ1x1MTE2MVx1MTEwMFx1MTE3NQpcdTExMTBcdTExNjFcdTExQThcdTExMDBcdTExNkUKXHUxMTEwXHUxMTYxXHUxMUE4XHUxMTBDXHUxMTYxClx1MTExMFx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFCQwpcdTExMTBcdTExNjJcdTExMDBcdTExNkZcdTExQUJcdTExMDNcdTExNjkKXHUxMTEwXHUxMTYyXHUxMTBCXHUxMTYzXHUxMUJDClx1MTExMFx1MTE2Mlx1MTExMVx1MTE2RVx1MTFCQwpcdTExMTBcdTExNjJcdTExQThcdTExMDlcdTExNzUKXHUxMTEwXHUxMTYyXHUxMUFGXHUxMTA1XHUxMTY1XHUxMUFCXHUxMTEwXHUxMTczClx1MTExMFx1MTE2NVx1MTEwMlx1MTE2NVx1MTFBRgpcdTExMTBcdTExNjVcdTExMDZcdTExNzVcdTExMDJcdTExNjVcdTExQUYKXHUxMTEwXHUxMTY2XHUxMTAyXHUxMTc1XHUxMTA5XHUxMTczClx1MTExMFx1MTE2Nlx1MTEwOVx1MTE3M1x1MTExMFx1MTE3MwpcdTExMTBcdTExNjZcdTExMEJcdTExNzVcdTExMDdcdTExNzNcdTExQUYKXHUxMTEwXHUxMTY2XHUxMUFGXHUxMTA1XHUxMTY2XHUxMTA3XHUxMTc1XHUxMTBDXHUxMTY1XHUxMUFCClx1MTExMFx1MTE2OVx1MTEwNVx1MTE2OVx1MTFBQgpcdTExMTBcdTExNjlcdTExMDZcdTExNjFcdTExMTBcdTExNjkKXHUxMTEwXHUxMTY5XHUxMTBCXHUxMTZEXHUxMTBCXHUxMTc1XHUxMUFGClx1MTExMFx1MTE2OVx1MTFCQ1x1MTEwMFx1MTE2OApcdTExMTBcdTExNjlcdTExQkNcdTExMDBcdTExNkEKXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTA1XHUxMTY5Clx1MTExMFx1MTE2OVx1MTFCQ1x1MTEwOVx1MTE3NVx1MTFBQgpcdTExMTBcdTExNjlcdTExQkNcdTExMEJcdTExNjdcdTExQTgKXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTc1XHUxMUFGClx1MTExMFx1MTE2OVx1MTFCQ1x1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMTBcdTExNjlcdTExQkNcdTExMENcdTExNjYKXHUxMTEwXHUxMTY5XHUxMUJDXHUxMTBDXHUxMTczXHUxMUJDClx1MTExMFx1MTE2OVx1MTFCQ1x1MTExMlx1MTE2MVx1MTFCOApcdTExMTBcdTExNjlcdTExQkNcdTExMTJcdTExNkEKXHUxMTEwXHUxMTZDXHUxMTAwXHUxMTczXHUxMUFCClx1MTExMFx1MTE2Q1x1MTEwQlx1MTE2Rlx1MTFBQgpcdTExMTBcdTExNkNcdTExMENcdTExNzVcdTExQThcdTExMDBcdTExNzNcdTExQjcKXHUxMTEwXHUxMTcxXHUxMTAwXHUxMTc1XHUxMUI3Clx1MTExMFx1MTE3M1x1MTEwNVx1MTE2NVx1MTFBOApcdTExMTBcdTExNzNcdTExQThcdTExMDBcdTExNzNcdTExQjgKXHUxMTEwXHUxMTczXHUxMUE4XHUxMTA3XHUxMTY3XHUxMUFGClx1MTExMFx1MTE3M1x1MTFBOFx1MTEwOVx1MTE2NVx1MTFCQwpcdTExMTBcdTExNzNcdTExQThcdTExMDlcdTExNkUKXHUxMTEwXHUxMTczXHUxMUE4XHUxMTBDXHUxMTc1XHUxMUJDClx1MTExMFx1MTE3M1x1MTFBOFx1MTExMlx1MTE3NQpcdTExMTBcdTExNzNcdTExQUJcdTExMTBcdTExNzNcdTExQUJcdTExMTJcdTExNzUKXHUxMTEwXHUxMTc1XHUxMTA5XHUxMTY3XHUxMTBFXHUxMTczClx1MTExMVx1MTE2MVx1MTEwNVx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2Mlx1MTFBOApcdTExMTFcdTExNjFcdTExMEJcdTExNzVcdTExQUYKXHUxMTExXHUxMTYxXHUxMTBFXHUxMTZFXHUxMUFGXHUxMTA5XHUxMTY5Clx1MTExMVx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2N1x1MTFBRgpcdTExMTFcdTExNjFcdTExQUJcdTExMDNcdTExNjFcdTExQUIKXHUxMTExXHUxMTYxXHUxMUFCXHUxMTA2XHUxMTYyClx1MTExMVx1MTE2MVx1MTFBQlx1MTEwOVx1MTE2MQpcdTExMTFcdTExNjFcdTExQUZcdTExMDlcdTExNzVcdTExQjgKXHUxMTExXHUxMTYxXHUxMUFGXHUxMTBCXHUxMTZGXHUxMUFGClx1MTExMVx1MTE2MVx1MTFCOFx1MTEwOVx1MTE2OVx1MTFCQwpcdTExMTFcdTExNjJcdTExMDlcdTExNjdcdTExQUIKXHUxMTExXHUxMTYyXHUxMUE4XHUxMTA5XHUxMTczClx1MTExMVx1MTE2Mlx1MTFBOFx1MTEwOVx1MTE3NVx1MTEwNlx1MTE3NVx1MTFBRlx1MTEwNVx1MTE3NQpcdTExMTFcdTExNjJcdTExQUJcdTExMTBcdTExNzUKXHUxMTExXHUxMTY1XHUxMTA5XHUxMTY2XHUxMUFCXHUxMTEwXHUxMTczClx1MTExMVx1MTE2Nlx1MTEwQlx1MTE3NVx1MTFBQlx1MTExMFx1MTE3MwpcdTExMTFcdTExNjdcdTExQUJcdTExMDBcdTExNjdcdTExQUIKXHUxMTExXHUxMTY3XHUxMUFCXHUxMTBCXHUxMTc0Clx1MTExMVx1MTE2N1x1MTFBQlx1MTEwQ1x1MTE3NQpcdTExMTFcdTExNjdcdTExQUJcdTExMTJcdTExNzUKXHUxMTExXHUxMTY3XHUxMUJDXHUxMTAwXHUxMTYxClx1MTExMVx1MTE2N1x1MTFCQ1x1MTEwMFx1MTE3Mlx1MTFBQgpcdTExMTFcdTExNjdcdTExQkNcdTExMDlcdTExNjJcdTExQkMKXHUxMTExXHUxMTY3XHUxMUJDXHUxMTA5XHUxMTY5Clx1MTExMVx1MTE2N1x1MTFCQ1x1MTEwQlx1MTE2M1x1MTFCQwpcdTExMTFcdTExNjdcdTExQkNcdTExMEJcdTExNzVcdTExQUYKXHUxMTExXHUxMTY3XHUxMUJDXHUxMTEyXHUxMTZBClx1MTExMVx1MTE2OVx1MTEwOVx1MTE3M1x1MTExMFx1MTE2NQpcdTExMTFcdTExNjlcdTExMEJcdTExNzVcdTExQUJcdTExMTBcdTExNzMKXHUxMTExXHUxMTY5XHUxMTBDXHUxMTYxXHUxMUJDClx1MTExMVx1MTE2OVx1MTExMlx1MTE2MVx1MTFCNwpcdTExMTFcdTExNkRcdTExMDZcdTExNjdcdTExQUIKXHUxMTExXHUxMTZEXHUxMTBDXHUxMTY1XHUxMUJDClx1MTExMVx1MTE2RFx1MTEwQ1x1MTE2RVx1MTFBQgpcdTExMTFcdTExNkRcdTExMTJcdTExNjdcdTExQUIKXHUxMTExXHUxMTZFXHUxMUI3XHUxMTA2XHUxMTY5XHUxMUE4Clx1MTExMVx1MTE2RVx1MTFCN1x1MTEwQ1x1MTE3NVx1MTFBRgpcdTExMTFcdTExNkVcdTExQkNcdTExMDBcdTExNjdcdTExQkMKXHUxMTExXHUxMTZFXHUxMUJDXHUxMTA5XHUxMTY5XHUxMUE4Clx1MTExMVx1MTE2RVx1MTFCQ1x1MTEwOVx1MTE3M1x1MTFCOApcdTExMTFcdTExNzNcdTExMDVcdTExNjFcdTExQkNcdTExMDlcdTExNzMKXHUxMTExXHUxMTczXHUxMTA1XHUxMTc1XHUxMUFCXHUxMTEwXHUxMTY1Clx1MTExMVx1MTE3M1x1MTFBRlx1MTEwNVx1MTE2MVx1MTEwOVx1MTE3M1x1MTExMFx1MTE3NVx1MTFBOApcdTExMTFcdTExNzVcdTExMDBcdTExNjlcdTExQUIKXHUxMTExXHUxMTc1XHUxMTA2XHUxMTYxXHUxMUJDClx1MTExMVx1MTE3NVx1MTEwQlx1MTE2MVx1MTEwMlx1MTE2OQpcdTExMTFcdTExNzVcdTExQUZcdTExMDVcdTExNzNcdTExQjcKXHUxMTExXHUxMTc1XHUxMUFGXHUxMTA5XHUxMTZFClx1MTExMVx1MTE3NVx1MTFBRlx1MTEwQlx1MTE2RApcdTExMTFcdTExNzVcdTExQUZcdTExMENcdTExNjEKXHUxMTExXHUxMTc1XHUxMUFGXHUxMTEwXHUxMTY5XHUxMUJDClx1MTExMVx1MTE3NVx1MTFCQ1x1MTEwMFx1MTE2OApcdTExMTJcdTExNjFcdTExMDJcdTExNzNcdTExMDJcdTExNzVcdTExQjcKXHUxMTEyXHUxMTYxXHUxMTAyXHUxMTczXHUxMUFGClx1MTExMlx1MTE2MVx1MTEwM1x1MTE3M1x1MTEwQlx1MTE3MFx1MTEwQlx1MTE2NQpcdTExMTJcdTExNjFcdTExMDVcdTExNkVcdTExQkFcdTExMDdcdTExNjFcdTExQjcKXHUxMTEyXHUxMTYxXHUxMTA3XHUxMTYxXHUxMUFCXHUxMTAwXHUxMTc1Clx1MTExMlx1MTE2MVx1MTEwOVx1MTE2RVx1MTFBOFx1MTEwQ1x1MTE3NVx1MTFCOApcdTExMTJcdTExNjFcdTExMDlcdTExNkVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMTBCXHUxMTY3XHUxMTEwXHUxMTczXHUxMUFCClx1MTExMlx1MTE2MVx1MTEwQ1x1MTE3NVx1MTEwNlx1MTE2MVx1MTFBQgpcdTExMTJcdTExNjFcdTExMEVcdTExNjVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMTExXHUxMTZFXHUxMUI3Clx1MTExMlx1MTE2MVx1MTExMVx1MTE3NVx1MTFBRgpcdTExMTJcdTExNjFcdTExQThcdTExMDBcdTExNkEKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTAwXHUxMTZEClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwMFx1MTE3M1x1MTFCOApcdTExMTJcdTExNjFcdTExQThcdTExMDBcdTExNzUKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTAyXHUxMTY3XHUxMUFCClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwNVx1MTE2N1x1MTFBOApcdTExMTJcdTExNjFcdTExQThcdTExMDdcdTExNjVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA3XHUxMTZFXHUxMTA2XHUxMTY5Clx1MTExMlx1MTE2MVx1MTFBOFx1MTEwN1x1MTE3NQpcdTExMTJcdTExNjFcdTExQThcdTExMDlcdTExNjJcdTExQkMKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTA5XHUxMTZFXHUxMUFGClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwOVx1MTE3M1x1MTFCOApcdTExMTJcdTExNjFcdTExQThcdTExMEJcdTExNkRcdTExQkNcdTExMTFcdTExNkVcdTExQjcKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTBCXHUxMTZGXHUxMUFCClx1MTExMlx1MTE2MVx1MTFBOFx1MTEwQlx1MTE3MQpcdTExMTJcdTExNjFcdTExQThcdTExMENcdTExNjEKXHUxMTEyXHUxMTYxXHUxMUE4XHUxMTBDXHUxMTY1XHUxMUI3Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwMFx1MTE2OApcdTExMTJcdTExNjFcdTExQUJcdTExMDBcdTExNzNcdTExQUYKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTAxXHUxMTY1XHUxMTA3XHUxMTY1XHUxMUFCXHUxMTBCXHUxMTY2Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwMlx1MTE2MVx1MTFCRApcdTExMTJcdTExNjFcdTExQUJcdTExMDJcdTExNkVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTAzXHUxMTY5XHUxMUJDXHUxMTBCXHUxMTYxXHUxMUFCClx1MTExMlx1MTE2MVx1MTFBQlx1MTEwNFx1MTE2MgpcdTExMTJcdTExNjFcdTExQUJcdTExMDVcdTExNjFcdTExMDlcdTExNjFcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTA2XHUxMTYxXHUxMTAzXHUxMTc1Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwNlx1MTE2RVx1MTFBQgpcdTExMTJcdTExNjFcdTExQUJcdTExMDdcdTExNjVcdTExQUIKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTA3XHUxMTY5XHUxMUE4Clx1MTExMlx1MTE2MVx1MTFBQlx1MTEwOVx1MTE3NVx1MTFBOApcdTExMTJcdTExNjFcdTExQUJcdTExMEJcdTExNjdcdTExMDVcdTExNzNcdTExQjcKXHUxMTEyXHUxMTYxXHUxMUFCXHUxMTBEXHUxMTY5XHUxMUE4Clx1MTExMlx1MTE2MVx1MTFBRlx1MTEwNlx1MTE2NVx1MTEwMlx1MTE3NQpcdTExMTJcdTExNjFcdTExQUZcdTExMEJcdTExNjFcdTExMDdcdTExNjVcdTExMENcdTExNzUKXHUxMTEyXHUxMTYxXHUxMUFGXHUxMTBCXHUxMTc1XHUxMUFCClx1MTExMlx1MTE2MVx1MTFCN1x1MTEwMVx1MTE2NgpcdTExMTJcdTExNjFcdTExQjdcdTExMDdcdTExNkVcdTExMDVcdTExNjkKXHUxMTEyXHUxMTYxXHUxMUI4XHUxMTAwXHUxMTY3XHUxMUE4Clx1MTExMlx1MTE2MVx1MTFCOFx1MTEwNVx1MTE3NVx1MTEwQ1x1MTE2NVx1MTFBOApcdTExMTJcdTExNjFcdTExQkNcdTExMDBcdTExNjlcdTExQkMKXHUxMTEyXHUxMTYxXHUxMUJDXHUxMTAwXHUxMTZFClx1MTExMlx1MTE2MVx1MTFCQ1x1MTEwOVx1MTE2MVx1MTFCQwpcdTExMTJcdTExNjFcdTExQkNcdTExMEJcdTExNzQKXHUxMTEyXHUxMTYyXHUxMTAwXHUxMTY3XHUxMUFGClx1MTExMlx1MTE2Mlx1MTEwMFx1MTE2RVx1MTFBQgpcdTExMTJcdTExNjJcdTExMDNcdTExNjFcdTExQjgKXHUxMTEyXHUxMTYyXHUxMTAzXHUxMTYxXHUxMUJDClx1MTExMlx1MTE2Mlx1MTEwNlx1MTE2RVx1MTFBRgpcdTExMTJcdTExNjJcdTExMDlcdTExNjVcdTExQTgKXHUxMTEyXHUxMTYyXHUxMTA5XHUxMTY1XHUxMUFGClx1MTExMlx1MTE2Mlx1MTEwOVx1MTE2RVx1MTEwQlx1MTE2RFx1MTFBOFx1MTEwQ1x1MTE2MVx1MTFCQwpcdTExMTJcdTExNjJcdTExMEJcdTExNjFcdTExQUIKXHUxMTEyXHUxMTYyXHUxMUE4XHUxMTA5XHUxMTc1XHUxMUI3Clx1MTExMlx1MTE2Mlx1MTFBQlx1MTEwM1x1MTE3M1x1MTEwN1x1MTE2Mlx1MTFBOApcdTExMTJcdTExNjJcdTExQjdcdTExMDdcdTExNjVcdTExMDBcdTExNjUKXHUxMTEyXHUxMTYyXHUxMUJBXHUxMTA3XHUxMTY3XHUxMUMwClx1MTExMlx1MTE2Mlx1MTFCQVx1MTEwOVx1MTE2MVx1MTFBRgpcdTExMTJcdTExNjJcdTExQkNcdTExMDNcdTExNjlcdTExQkMKXHUxMTEyXHUxMTYyXHUxMUJDXHUxMTA3XHUxMTY5XHUxMUE4Clx1MTExMlx1MTE2Mlx1MTFCQ1x1MTEwOVx1MTE2MQpcdTExMTJcdTExNjJcdTExQkNcdTExMEJcdTExNkVcdTExQUIKXHUxMTEyXHUxMTYyXHUxMUJDXHUxMTBCXHUxMTcxClx1MTExMlx1MTE2M1x1MTFCQ1x1MTEwMFx1MTE3NQpcdTExMTJcdTExNjNcdTExQkNcdTExMDlcdTExNjFcdTExQkMKXHUxMTEyXHUxMTYzXHUxMUJDXHUxMTA5XHUxMTZFClx1MTExMlx1MTE2NVx1MTEwNVx1MTE2MVx1MTFBOApcdTExMTJcdTExNjVcdTExMEJcdTExNkRcdTExQkMKXHUxMTEyXHUxMTY2XHUxMUFGXHUxMTAwXHUxMTc1Clx1MTExMlx1MTE2N1x1MTFBQlx1MTEwMFx1MTE2QVx1MTFBQgpcdTExMTJcdTExNjdcdTExQUJcdTExMDBcdTExNzNcdTExQjcKXHUxMTEyXHUxMTY3XHUxMUFCXHUxMTAzXHUxMTYyClx1MTExMlx1MTE2N1x1MTFBQlx1MTEwOVx1MTE2MVx1MTFCQwpcdTExMTJcdTExNjdcdTExQUJcdTExMDlcdTExNzVcdTExQUYKXHUxMTEyXHUxMTY3XHUxMUFCXHUxMTBDXHUxMTYxXHUxMUJDClx1MTExMlx1MTE2N1x1MTFBQlx1MTEwQ1x1MTE2MgpcdTExMTJcdTExNjdcdTExQUJcdTExMENcdTExNzUKXHUxMTEyXHUxMTY3XHUxMUFGXHUxMTBCXHUxMTYyXHUxMUE4Clx1MTExMlx1MTE2N1x1MTFCOFx1MTEwNVx1MTE2N1x1MTFBOApcdTExMTJcdTExNjdcdTExQkNcdTExMDdcdTExNkUKXHUxMTEyXHUxMTY3XHUxMUJDXHUxMTA5XHUxMTYxClx1MTExMlx1MTE2N1x1MTFCQ1x1MTEwOVx1MTE2RQpcdTExMTJcdTExNjdcdTExQkNcdTExMDlcdTExNzVcdTExQTgKXHUxMTEyXHUxMTY3XHUxMUJDXHUxMTBDXHUxMTY2Clx1MTExMlx1MTE2N1x1MTFCQ1x1MTExMFx1MTE2MgpcdTExMTJcdTExNjdcdTExQkNcdTExMTFcdTExNjdcdTExQUIKXHUxMTEyXHUxMTY4XHUxMTEwXHUxMTYyXHUxMUE4Clx1MTExMlx1MTE2OVx1MTEwMFx1MTE3NVx1MTEwOVx1MTE3NVx1MTFCNwpcdTExMTJcdTExNjlcdTExMDJcdTExNjFcdTExQjcKXHUxMTEyXHUxMTY5XHUxMTA1XHUxMTYxXHUxMUJDXHUxMTBCXHUxMTc1Clx1MTExMlx1MTE2OVx1MTEwN1x1MTE2MVx1MTFBOApcdTExMTJcdTExNjlcdTExMTBcdTExNjZcdTExQUYKXHUxMTEyXHUxMTY5XHUxMTEyXHUxMTczXHUxMUI4Clx1MTExMlx1MTE2OVx1MTFBOFx1MTEwOVx1MTE3NQpcdTExMTJcdTExNjlcdTExQUZcdTExMDVcdTExNjkKXHUxMTEyXHUxMTY5XHUxMUI3XHUxMTExXHUxMTY2XHUxMTBCXHUxMTc1XHUxMTBDXHUxMTc1Clx1MTExMlx1MTE2OVx1MTFCQ1x1MTEwN1x1MTE2OQpcdTExMTJcdTExNjlcdTExQkNcdTExMDlcdTExNkUKXHUxMTEyXHUxMTY5XHUxMUJDXHUxMTBFXHUxMTYxClx1MTExMlx1MTE2QVx1MTEwNlx1MTE2N1x1MTFBQgpcdTExMTJcdTExNkFcdTExMDdcdTExNkVcdTExQUIKXHUxMTEyXHUxMTZBXHUxMTA5XHUxMTYxXHUxMUFGClx1MTExMlx1MTE2QVx1MTEwQlx1MTE2RFx1MTEwQlx1MTE3NVx1MTFBRgpcdTExMTJcdTExNkFcdTExMENcdTExNjFcdTExQkMKXHUxMTEyXHUxMTZBXHUxMTEyXHUxMTYxXHUxMUE4Clx1MTExMlx1MTE2QVx1MTFBOFx1MTEwN1x1MTE2OQpcdTExMTJcdTExNkFcdTExQThcdTExMEJcdTExNzVcdTExQUIKXHUxMTEyXHUxMTZBXHUxMUE4XHUxMTBDXHUxMTYxXHUxMUJDClx1MTExMlx1MTE2QVx1MTFBOFx1MTEwQ1x1MTE2NVx1MTFCQwpcdTExMTJcdTExNkFcdTExQUJcdTExMDBcdTExNjFcdTExQjgKXHUxMTEyXHUxMTZBXHUxMUFCXHUxMTAwXHUxMTY3XHUxMUJDClx1MTExMlx1MTE2QVx1MTFBQlx1MTEwQlx1MTE2N1x1MTFCQwpcdTExMTJcdTExNkFcdTExQUJcdTExMEJcdTExNzJcdTExQUYKXHUxMTEyXHUxMTZBXHUxMUFCXHUxMTBDXHUxMTYxClx1MTExMlx1MTE2QVx1MTFBRlx1MTEwMFx1MTE3NQpcdTExMTJcdTExNkFcdTExQUZcdTExMDNcdTExNjlcdTExQkMKXHUxMTEyXHUxMTZBXHUxMUFGXHUxMTA3XHUxMTYxXHUxMUFGXHUxMTEyXHUxMTc1Clx1MTExMlx1MTE2QVx1MTFBRlx1MTEwQlx1MTE2RFx1MTFCQwpcdTExMTJcdTExNkFcdTExQUZcdTExMERcdTExNjFcdTExQTgKXHUxMTEyXHUxMTZDXHUxMTAwXHUxMTY3XHUxMUFCClx1MTExMlx1MTE2Q1x1MTEwMFx1MTE2QVx1MTFBQgpcdTExMTJcdTExNkNcdTExMDdcdTExNjlcdTExQTgKXHUxMTEyXHUxMTZDXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTExMlx1MTE2Q1x1MTEwQlx1MTE2Rlx1MTFBQgpcdTExMTJcdTExNkNcdTExMENcdTExNjFcdTExQkMKXHUxMTEyXHUxMTZDXHUxMTBDXHUxMTY1XHUxMUFCClx1MTExMlx1MTE2Q1x1MTFCQVx1MTEwOVx1MTE2RQpcdTExMTJcdTExNkNcdTExQkNcdTExMDNcdTExNjFcdTExQUJcdTExMDdcdTExNjlcdTExMDNcdTExNjkKXHUxMTEyXHUxMTZEXHUxMTBCXHUxMTcyXHUxMUFGXHUxMTBDXHUxMTY1XHUxMUE4Clx1MTExMlx1MTE2RVx1MTEwN1x1MTE2MVx1MTFBQgpcdTExMTJcdTExNkVcdTExMEVcdTExNkVcdTExQkFcdTExMDBcdTExNjFcdTExMDVcdTExNkUKXHUxMTEyXHUxMTZFXHUxMUFCXHUxMTA1XHUxMTY3XHUxMUFCClx1MTExMlx1MTE2Rlx1MTFBRlx1MTEwQVx1MTE3NVx1MTFBQgpcdTExMTJcdTExNzJcdTExMDlcdTExNzVcdTExQTgKXHUxMTEyXHUxMTcyXHUxMTBCXHUxMTc1XHUxMUFGClx1MTExMlx1MTE3Mlx1MTFCQ1x1MTEwMlx1MTE2MgpcdTExMTJcdTExNzNcdTExMDVcdTExNzNcdTExQjcKXHUxMTEyXHUxMTczXHUxMUE4XHUxMTA3XHUxMTYyXHUxMUE4Clx1MTExMlx1MTE3M1x1MTFBOFx1MTEwQlx1MTE3NVx1MTFBQgpcdTExMTJcdTExNzNcdTExQUJcdTExMENcdTExNjVcdTExQTgKXHUxMTEyXHUxMTczXHUxMUFCXHUxMTEyXHUxMTc1Clx1MTExMlx1MTE3M1x1MTFCQ1x1MTEwNlx1MTE3NQpcdTExMTJcdTExNzNcdTExQkNcdTExMDdcdTExNkVcdTExQUIKXHUxMTEyXHUxMTc0XHUxMTAwXHUxMTY5XHUxMUE4Clx1MTExMlx1MTE3NFx1MTEwNlx1MTE2MVx1MTFCQwpcdTExMTJcdTExNzRcdTExMDlcdTExNjJcdTExQkMKXHUxMTEyXHUxMTc0XHUxMUFCXHUxMTA5XHUxMTYyXHUxMUE4Clx1MTExMlx1MTE3NVx1MTFCN1x1MTEwMVx1MTE2NVx1MTFCQWAuc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy9zaW1wbGlmaWVkLWNoaW5lc2UuanMKICB2YXIgd29yZGxpc3Q3ID0gYFx1NzY4NApcdTRFMDAKXHU2NjJGClx1NTcyOApcdTRFMEQKXHU0RTg2Clx1NjcwOQpcdTU0OEMKXHU0RUJBClx1OEZEOQpcdTRFMkQKXHU1OTI3Clx1NEUzQQpcdTRFMEEKXHU0RTJBClx1NTZGRApcdTYyMTEKXHU0RUU1Clx1ODk4MQpcdTRFRDYKXHU2NUY2Clx1Njc2NQpcdTc1MjgKXHU0RUVDClx1NzUxRgpcdTUyMzAKXHU0RjVDClx1NTczMApcdTRFOEUKXHU1MUZBClx1NUMzMQpcdTUyMDYKXHU1QkY5Clx1NjIxMApcdTRGMUEKXHU1M0VGClx1NEUzQgpcdTUzRDEKXHU1RTc0Clx1NTJBOApcdTU0MEMKXHU1REU1Clx1NEU1RgpcdTgwRkQKXHU0RTBCClx1OEZDNwpcdTVCNTAKXHU4QkY0Clx1NEVBNwpcdTc5Q0QKXHU5NzYyClx1ODAwQwpcdTY1QjkKXHU1NDBFClx1NTkxQQpcdTVCOUEKXHU4ODRDClx1NUI2NgpcdTZDRDUKXHU2MjQwClx1NkMxMQpcdTVGOTcKXHU3RUNGClx1NTM0MQpcdTRFMDkKXHU0RTRCClx1OEZEQgpcdTc3NDAKXHU3QjQ5Clx1OTBFOApcdTVFQTYKXHU1QkI2Clx1NzUzNQpcdTUyOUIKXHU5MUNDClx1NTk4MgpcdTZDMzQKXHU1MzE2Clx1OUFEOApcdTgxRUEKXHU0RThDClx1NzQwNgpcdThENzcKXHU1QzBGClx1NzI2OQpcdTczQjAKXHU1QjlFClx1NTJBMApcdTkxQ0YKXHU5MEZEClx1NEUyNApcdTRGNTMKXHU1MjM2Clx1NjczQQpcdTVGNTMKXHU0RjdGClx1NzBCOQpcdTRFQ0UKXHU0RTFBClx1NjcyQwpcdTUzQkIKXHU2MjhBClx1NjAyNwpcdTU5N0QKXHU1RTk0Clx1NUYwMApcdTVCODMKXHU1NDA4Clx1OEZEOApcdTU2RTAKXHU3NTMxClx1NTE3NgpcdTRFOUIKXHU3MTM2Clx1NTI0RApcdTU5MTYKXHU1OTI5Clx1NjUzRgpcdTU2REIKXHU2NUU1Clx1OTBBMwpcdTc5M0UKXHU0RTQ5Clx1NEU4QgpcdTVFNzMKXHU1RjYyClx1NzZGOApcdTUxNjgKXHU4ODY4Clx1OTVGNApcdTY4MzcKXHU0RTBFClx1NTE3MwpcdTU0MDQKXHU5MUNEClx1NjVCMApcdTdFQkYKXHU1MTg1Clx1NjU3MApcdTZCNjMKXHU1RkMzClx1NTNDRApcdTRGNjAKXHU2NjBFClx1NzcwQgpcdTUzOUYKXHU1M0M4Clx1NEU0OApcdTUyMjkKXHU2QkQ0Clx1NjIxNgpcdTRGNDYKXHU4RDI4Clx1NkMxNApcdTdCMkMKXHU1NDExClx1OTA1MwpcdTU0N0QKXHU2QjY0Clx1NTNEOApcdTY3NjEKXHU1M0VBClx1NkNBMQpcdTdFRDMKXHU4OUUzClx1OTVFRQpcdTYxMEYKXHU1RUZBClx1NjcwOApcdTUxNkMKXHU2NUUwClx1N0NGQgpcdTUxOUIKXHU1Rjg4Clx1NjBDNQpcdTgwMDUKXHU2NzAwClx1N0FDQgpcdTRFRTMKXHU2MEYzClx1NURGMgpcdTkwMUEKXHU1RTc2Clx1NjNEMApcdTc2RjQKXHU5ODk4Clx1NTE1QQpcdTdBMEIKXHU1QzU1Clx1NEU5NApcdTY3OUMKXHU2NTk5Clx1OEM2MQpcdTU0NTgKXHU5NzY5Clx1NEY0RApcdTUxNjUKXHU1RTM4Clx1NjU4NwpcdTYwM0IKXHU2QjIxClx1NTRDMQpcdTVGMEYKXHU2RDNCClx1OEJCRQpcdTUzQ0EKXHU3QkExClx1NzI3OQpcdTRFRjYKXHU5NTdGClx1NkM0MgpcdTgwMDEKXHU1OTM0Clx1NTdGQQpcdThENDQKXHU4RkI5Clx1NkQ0MQpcdThERUYKXHU3RUE3Clx1NUMxMQpcdTU2RkUKXHU1QzcxClx1N0VERgpcdTYzQTUKXHU3N0U1Clx1OEY4MwpcdTVDMDYKXHU3RUM0Clx1ODlDMQpcdThCQTEKXHU1MjJCClx1NTk3OQpcdTYyNEIKXHU4OUQyClx1NjcxRgpcdTY4MzkKXHU4QkJBClx1OEZEMApcdTUxOUMKXHU2MzA3Clx1NTFFMApcdTRFNUQKXHU1MzNBClx1NUYzQQpcdTY1M0UKXHU1MUIzClx1ODk3RgpcdTg4QUIKXHU1RTcyClx1NTA1QQpcdTVGQzUKXHU2MjE4Clx1NTE0OApcdTU2REUKXHU1MjE5Clx1NEVGQgpcdTUzRDYKXHU2MzZFClx1NTkwNApcdTk2MUYKXHU1MzU3Clx1N0VEOQpcdTgyNzIKXHU1MTQ5Clx1OTVFOApcdTUzNzMKXHU0RkREClx1NkNCQgpcdTUzMTcKXHU5MDIwClx1NzY3RQpcdTg5QzQKXHU3MEVEClx1OTg4NgpcdTRFMDMKXHU2RDc3Clx1NTNFMwpcdTRFMUMKXHU1QkZDClx1NTY2OApcdTUzOEIKXHU1RkQ3Clx1NEUxNgpcdTkxRDEKXHU1ODlFClx1NEU4OQpcdTZENEUKXHU5NjM2Clx1NkNCOQpcdTYwMUQKXHU2NzJGClx1Njc4MQpcdTRFQTQKXHU1M0Q3Clx1ODA1NApcdTRFQzAKXHU4QkE0Clx1NTE2RApcdTUxNzEKXHU2NzQzClx1NjUzNgpcdThCQzEKXHU2NTM5Clx1NkUwNQpcdTdGOEUKXHU1MThEClx1OTFDNwpcdThGNkMKXHU2NkY0Clx1NTM1NQpcdTk4Q0UKXHU1MjA3Clx1NjI1MwpcdTc2N0QKXHU2NTU5Clx1OTAxRgpcdTgyQjEKXHU1RTI2Clx1NUI4OQpcdTU3M0EKXHU4RUFCClx1OEY2NgpcdTRGOEIKXHU3NzFGClx1NTJBMQpcdTUxNzcKXHU0RTA3Clx1NkJDRgpcdTc2RUUKXHU4MUYzClx1OEZCRQpcdThENzAKXHU3OUVGClx1NzkzQQpcdThCQUUKXHU1OEYwClx1NjJBNQpcdTY1OTcKXHU1QjhDClx1N0M3QgpcdTUxNkIKXHU3OUJCClx1NTM0RQpcdTU0MEQKXHU3ODZFClx1NjI0RApcdTc5RDEKXHU1RjIwClx1NEZFMQpcdTlBNkMKXHU4MjgyClx1OEJERApcdTdDNzMKXHU2NTc0Clx1N0E3QQpcdTUxNDMKXHU1MUI1Clx1NEVDQQpcdTk2QzYKXHU2RTI5Clx1NEYyMApcdTU3MUYKXHU4QkI4Clx1NkI2NQpcdTdGQTQKXHU1RTdGClx1NzdGMwpcdThCQjAKXHU5NzAwClx1NkJCNQpcdTc4MTQKXHU3NTRDClx1NjJDOQpcdTY3OTcKXHU1RjhCClx1NTNFQgpcdTRFMTQKXHU3QTc2Clx1ODlDMgpcdThEOEEKXHU3RUM3Clx1ODhDNQpcdTVGNzEKXHU3Qjk3Clx1NEY0RQpcdTYzMDEKXHU5N0YzClx1NEYxNwpcdTRFNjYKXHU1RTAzClx1NTkwRApcdTVCQjkKXHU1MTNGClx1OTg3QgpcdTk2NDUKXHU1NTQ2Clx1OTc1RQpcdTlBOEMKXHU4RkRFClx1NjVBRApcdTZERjEKXHU5NkJFClx1OEZEMQpcdTc3RkYKXHU1MzQzClx1NTQ2OApcdTU5RDQKXHU3RDIwClx1NjI4MApcdTU5MDcKXHU1MzRBClx1NTI5RQpcdTk3NTIKXHU3NzAxClx1NTIxNwpcdTRFNjAKXHU1NENEClx1N0VBNgpcdTY1MkYKXHU4MjJDClx1NTNGMgpcdTYxMUYKXHU1MkIzClx1NEZCRgpcdTU2RTIKXHU1RjgwClx1OTE3OApcdTUzODYKXHU1RTAyClx1NTE0QgpcdTRGNTUKXHU5NjY0Clx1NkQ4OApcdTY3ODQKXHU1RTlDClx1NzlGMApcdTU5MkEKXHU1MUM2Clx1N0NCRQpcdTUwM0MKXHU1M0Y3Clx1NzM4NwpcdTY1Q0YKXHU3RUY0Clx1NTIxMgpcdTkwMDkKXHU2ODA3Clx1NTE5OQpcdTVCNTgKXHU1MDE5Clx1NkJEQgpcdTRFQjIKXHU1RkVCClx1NjU0OApcdTY1QUYKXHU5NjYyClx1NjdFNQpcdTZDNUYKXHU1NzhCClx1NzczQwpcdTczOEIKXHU2MzA5Clx1NjgzQwpcdTUxN0IKXHU2NjEzClx1N0Y2RQpcdTZEM0UKXHU1QzQyClx1NzI0NwpcdTU5Q0IKXHU1Mzc0Clx1NEUxMwpcdTcyQjYKXHU4MEIyClx1NTM4MgpcdTRFQUMKXHU4QkM2Clx1OTAwMgpcdTVDNUUKXHU1NzA2Clx1NTMwNQpcdTcwNkIKXHU0RjRGClx1OEMwMwpcdTZFRTEKXHU1M0JGClx1NUM0MApcdTcxNjcKXHU1M0MyClx1N0VBMgpcdTdFQzYKXHU1RjE1Clx1NTQyQwpcdThCRTUKXHU5NEMxClx1NEVGNwpcdTRFMjUKXHU5OTk2Clx1NUU5NQpcdTZEQjIKXHU1Qjk4Clx1NUZCNwpcdTk2OEYKXHU3NUM1Clx1ODJDRgpcdTU5MzEKXHU1QzE0Clx1NkI3QgpcdThCQjIKXHU5MTREClx1NTk3MwpcdTlFQzQKXHU2M0E4Clx1NjYzRQpcdThDMDgKXHU3RjZBClx1Nzk1RQpcdTgyN0EKXHU1NDYyClx1NUUyRApcdTU0MkIKXHU0RjAxClx1NjcxQgpcdTVCQzYKXHU2Mjc5Clx1ODQyNQpcdTk4NzkKXHU5NjMyClx1NEUzRQpcdTc0MDMKXHU4MkYxClx1NkMyNwpcdTUyQkYKXHU1NDRBClx1Njc0RQpcdTUzRjAKXHU4NDNEClx1NjcyOApcdTVFMkUKXHU4RjZFClx1NzgzNApcdTRFOUEKXHU1RTA4Clx1NTZGNApcdTZDRTgKXHU4RkRDClx1NUI1NwpcdTY3NTAKXHU2MzkyClx1NEY5QgpcdTZDQjMKXHU2MDAxClx1NUMwMQpcdTUzRTYKXHU2NUJEClx1NTFDRgpcdTY4MTEKXHU2RUI2Clx1NjAwRQpcdTZCNjIKXHU2ODQ4Clx1OEEwMApcdTU4RUIKXHU1NzQ3Clx1NkI2NgpcdTU2RkEKXHU1M0Y2Clx1OUM3QwpcdTZDRTIKXHU4OUM2Clx1NEVDNQpcdThEMzkKXHU3RDI3Clx1NzIzMQpcdTVERTYKXHU3QUUwClx1NjVFOQpcdTY3MUQKXHU1QkIzClx1N0VFRApcdThGN0IKXHU2NzBEClx1OEJENQpcdTk4REYKXHU1MTQ1Clx1NTE3NQpcdTZFOTAKXHU1MjI0Clx1NjJBNApcdTUzRjgKXHU4REIzClx1NjdEMApcdTdFQzMKXHU1REVFClx1ODFGNApcdTY3N0YKXHU3NTMwClx1OTY0RApcdTlFRDEKXHU3MkFGClx1OEQxRgpcdTUxRkIKXHU4MzAzClx1N0VFNwpcdTUxNzQKXHU0RjNDClx1NEY1OQpcdTU3NUEKXHU2NkYyClx1OEY5MwpcdTRGRUUKXHU2NTQ1Clx1NTdDRQpcdTU5MkIKXHU1OTFGClx1OTAwMQpcdTdCMTQKXHU4MjM5Clx1NTM2MApcdTUzRjMKXHU4RDIyClx1NTQwMwpcdTVCQ0MKXHU2NjI1Clx1ODA0QwpcdTg5QzkKXHU2QzQ5Clx1NzUzQgpcdTUyOUYKXHU1REY0Clx1OERERgpcdTg2N0QKXHU2NzQyClx1OThERQpcdTY4QzAKXHU1NDM4Clx1NTJBOQpcdTUzNDcKXHU5NjMzClx1NEU5MgpcdTUyMUQKXHU1MjFCClx1NjI5NwpcdTgwMDMKXHU2Mjk1Clx1NTc0RgpcdTdCNTYKXHU1M0U0Clx1NUY4NApcdTYzNjIKXHU2NzJBClx1OEREMQpcdTc1NTkKXHU5NEEyClx1NjZGRQpcdTdBRUYKXHU4RDIzClx1N0FEOQpcdTdCODAKXHU4RkYwClx1OTRCMQpcdTUyNkYKXHU1QzNEClx1NUUxRApcdTVDMDQKXHU4MzQ5Clx1NTFCMgpcdTYyN0YKXHU3MkVDClx1NEVFNApcdTk2NTAKXHU5NjNGClx1NUJBMwpcdTczQUYKXHU1M0NDClx1OEJGNwpcdThEODUKXHU1RkFFClx1OEJBOQpcdTYzQTcKXHU1RERFClx1ODI2RgpcdThGNzQKXHU2MjdFClx1NTQyNgpcdTdFQUEKXHU3NkNBClx1NEY5RApcdTRGMTgKXHU5ODc2Clx1Nzg0MApcdThGN0QKXHU1MDEyClx1NjIzRgpcdTdBODEKXHU1NzUwClx1N0M4OQpcdTY1NEMKXHU3NTY1Clx1NUJBMgpcdTg4ODEKXHU1MUI3Clx1ODBEQwpcdTdFREQKXHU2NzkwClx1NTc1NwpcdTUyNDIKXHU2RDRCClx1NEUxRApcdTUzNEYKXHU4QkM5Clx1NUZGNQpcdTk2NDgKXHU0RUNEClx1N0Y1NwpcdTc2RDAKXHU1M0NCClx1NkQwQgpcdTk1MTkKXHU4MkU2Clx1NTkxQwpcdTUyMTEKXHU3OUZCClx1OTg5MQpcdTkwMTAKXHU5NzYwClx1NkRGNwpcdTZCQ0QKXHU3N0VEClx1NzZBRQpcdTdFQzgKXHU4MDVBClx1NkM3RApcdTY3NTEKXHU0RTkxClx1NTRFQQpcdTY1RTIKXHU4REREClx1NTM2QgpcdTUwNUMKXHU3MEM4Clx1NTkyRQpcdTVCREYKXHU3MEU3Clx1OEZDNQpcdTU4ODMKXHU4MkU1Clx1NTM3MApcdTZEMzIKXHU1MjNCClx1NjJFQwpcdTZGQzAKXHU1QjU0Clx1NjQxRQpcdTc1MUEKXHU1QkE0Clx1NUY4NQpcdTY4MzgKXHU2ODIxClx1NjU2MwpcdTRGQjUKXHU1NDI3Clx1NzUzMgpcdTZFMzgKXHU0RTQ1Clx1ODNEQwpcdTU0NzMKXHU2NUU3Clx1NkEyMQpcdTZFNTYKXHU4RDI3Clx1NjM1RgpcdTk4ODQKXHU5NjNCClx1NkJFQgpcdTY2NkUKXHU3QTMzClx1NEU1OQpcdTU5ODgKXHU2OTBEClx1NjA2RgpcdTYyNjkKXHU5NEY2Clx1OEJFRApcdTYzMjUKXHU5MTUyClx1NUI4OApcdTYyRkYKXHU1RThGClx1N0VCOApcdTUzM0IKXHU3RjNBClx1OTZFOApcdTU0MTcKXHU5NDg4Clx1NTIxOApcdTU1NEEKXHU2MDI1Clx1NTUzMQpcdThCRUYKXHU4QkFEClx1NjEzRgpcdTVCQTEKXHU5NjQ0Clx1ODNCNwpcdTgzMzYKXHU5QzlDClx1N0NBRQpcdTY1QTQKXHU1QjY5Clx1ODEzMQpcdTc4NkIKXHU4MEE1Clx1NTU4NApcdTlGOTkKXHU2RjE0Clx1NzIzNgpcdTZFMTAKXHU4ODQwClx1NkIyMgpcdTY4QjAKXHU2MzhDClx1NkI0QwpcdTZDOTkKXHU1MjFBClx1NjUzQgpcdThDMTMKXHU3NkZFClx1OEJBOApcdTY2NUEKXHU3QzkyClx1NEU3MQpcdTcxQzMKXHU3N0RCClx1NEU0RQpcdTY3NDAKXHU4MzZGClx1NUI4MQpcdTlDODEKXHU4RDM1Clx1OTQ5RgpcdTcxNjQKXHU4QkZCClx1NzNFRApcdTRGMkYKXHU5OTk5Clx1NEVDQgpcdThGRUIKXHU1M0U1Clx1NEUzMApcdTU3RjkKXHU2M0UxClx1NTE3MApcdTYyQzUKXHU1RjI2Clx1ODZDQgpcdTZDODkKXHU1MDQ3Clx1N0E3RgpcdTYyNjcKXHU3QjU0Clx1NEU1MApcdThDMDEKXHU5ODdBClx1NzBERgpcdTdGMjkKXHU1RjgxClx1ODEzOApcdTU1OUMKXHU2NzdFClx1ODExQQpcdTU2RjAKXHU1RjAyClx1NTE0RApcdTgwQ0MKXHU2NjFGClx1Nzk4RgpcdTRFNzAKXHU2N0QzClx1NEU5NQpcdTY5ODIKXHU2MTYyClx1NjAxNQpcdTc4QzEKXHU1MDBEClx1Nzk1NgpcdTc2ODcKXHU0RkMzClx1OTc1OQpcdTg4NjUKXHU4QkM0Clx1N0ZGQgpcdTgwODkKXHU4REY1Clx1NUMzQwpcdTg4NjMKXHU1QkJEClx1NjI2QwpcdTY4QzkKXHU1RTBDClx1NEYyNApcdTY0Q0QKXHU1NzgyClx1NzlDQgpcdTVCOUMKXHU2QzIyClx1NTk1NwpcdTc3NjMKXHU2MzJGClx1NjdCNgpcdTRFQUUKXHU2NzJCClx1NUJBQQpcdTVFODYKXHU3RjE2Clx1NzI1QgpcdTg5RTYKXHU2NjIwClx1OTZGNwpcdTk1MDAKXHU4QkQ3Clx1NUVBNwpcdTVDNDUKXHU2MjkzClx1ODhDMgpcdTgwREUKXHU1NDdDClx1NUExOApcdTY2NkYKXHU1QTAxClx1N0VGRgpcdTY2NzYKXHU1MzlBClx1NzZERgpcdTg4NjEKXHU5RTIxClx1NUI1OQpcdTVFRjYKXHU1MzcxClx1ODBGNgpcdTVDNEIKXHU0RTYxClx1NEUzNApcdTk2NDYKXHU5ODdFClx1NjM4OQpcdTU0NDAKXHU3MDZGClx1NUM4MQpcdTYzQUEKXHU2NzVGClx1ODAxMApcdTUyNjcKXHU3Mzg5Clx1OEQ3NQpcdThERjMKXHU1NEU1Clx1NUI2MwpcdThCRkUKXHU1MUVGClx1ODBFMQpcdTk4OUQKXHU2QjNFClx1N0VDRApcdTUzNzcKXHU5RjUwClx1NEYxRgpcdTg0QjgKXHU2Qjk2Clx1NkMzOApcdTVCOTcKXHU4MkQ3Clx1NURERApcdTcwODkKXHU1Q0E5Clx1NUYzMQpcdTk2RjYKXHU2NzY4Clx1NTk0RgpcdTZDQkYKXHU5NzMyClx1Njc0NgpcdTYzQTIKXHU2RUQxClx1OTU0NwpcdTk5NkQKXHU2RDUzClx1ODIyQQpcdTYwMDAKXHU4RDc2Clx1NUU5MwpcdTU5M0EKXHU0RjBBClx1NzA3NQpcdTdBMEUKXHU5MDE0Clx1NzA2RApcdThENUIKXHU1RjUyClx1NTNFQwpcdTlGMTMKXHU2NEFEClx1NzZEOApcdTg4QzEKXHU5NjY5Clx1NUVCNwpcdTU1MkYKXHU1RjU1Clx1ODNDQwpcdTdFQUYKXHU1MDFGClx1N0NENgpcdTc2RDYKXHU2QTJBClx1N0IyNgpcdTc5QzEKXHU1MkFBClx1NTgwMgpcdTU3REYKXHU2N0FBClx1NkRBNgpcdTVFNDUKXHU1NEM4Clx1N0FERgpcdTcxOUYKXHU4NjZCClx1NkNGRApcdTgxMTEKXHU1OEU0Clx1NzhCMwpcdTZCMjcKXHU5MDREClx1NEZBNwpcdTVCRTgKXHU2NTYyClx1NUY3QgpcdTg2NTEKXHU2NTlDClx1ODU4NApcdTVFQUQKXHU3RUIzClx1NUYzOQpcdTk5NzIKXHU0RjM4Clx1NjI5OApcdTlFQTYKXHU2RTdGClx1NjY5NwpcdTgzNzcKXHU3NEU2Clx1NTg1RQpcdTVFOEEKXHU3QjUxClx1NjA3NgpcdTYyMzcKXHU4QkJGClx1NTg1NApcdTU5NDcKXHU5MDBGClx1Njg4MQpcdTUyMDAKXHU2NUNCClx1OEZGOQpcdTUzNjEKXHU2QzJGClx1OTA0NwpcdTRFRkQKXHU2QkQyClx1NkNFNQpcdTkwMDAKXHU2RDE3Clx1NjQ0NgpcdTcwNzAKXHU1RjY5Clx1NTM1NgpcdTgwMTcKXHU1OTBGClx1NjJFOQpcdTVGRDkKXHU5NERDClx1NzMyRQpcdTc4NkMKXHU0RTg4Clx1N0U0MQpcdTU3MDgKXHU5NkVBClx1NTFGRApcdTRFQTYKXHU2MkJEClx1N0JDNwpcdTk2MzUKXHU5NjM0Clx1NEUwMQpcdTVDM0EKXHU4RkZEClx1NTgwNgpcdTk2QzQKXHU4RkNFClx1NkNEQgpcdTcyMzgKXHU2OTdDClx1OTA3RgpcdThDMEIKXHU1NDI4Clx1OTFDRQpcdTczMkEKXHU2NUQ3Clx1N0QyRgpcdTUwNEYKXHU1MTc4Clx1OTk4NgpcdTdEMjIKXHU3OUU2Clx1ODEwMgpcdTZGNkUKXHU3MjM3Clx1OEM0NgpcdTVGRkQKXHU2MjU4Clx1NjBDQQpcdTU4NTEKXHU5MDU3Clx1NjEwOApcdTY3MzEKXHU2NkZGClx1N0VBNApcdTdDOTcKXHU1MDNFClx1NUMxQQpcdTc1REIKXHU2OTVBClx1OEMyMgpcdTU5NEIKXHU4RDJEClx1NzhFOApcdTU0MUIKXHU2QzYwClx1NjVDMQpcdTc4OEUKXHU5QUE4Clx1NzZEMQpcdTYzNTUKXHU1RjFGClx1NjZCNApcdTUyNzIKXHU4RDJGClx1NkI4QQpcdTkxQ0EKXHU4QkNEClx1NEVBMQpcdTU4QzEKXHU5ODdGClx1NUI5RApcdTUzNDgKXHU1QzE4Clx1OTVGQgpcdTYzRUQKXHU3MEFFClx1NkI4QgpcdTUxQUMKXHU2ODY1Clx1NTk4NwpcdThCNjYKXHU3RUZDClx1NjJEQgpcdTU0MzQKXHU0RUQ4Clx1NkQ2RQpcdTkwNkQKXHU1RjkwClx1NjBBOApcdTY0NDcKXHU4QzM3Clx1OEQ1RQpcdTdCQjEKXHU5Njk0Clx1OEJBMgpcdTc1MzcKXHU1NDM5Clx1NTZFRApcdTdFQjcKXHU1NTEwClx1OEQyNQpcdTVCOEIKXHU3M0JCClx1NURFOApcdTgwMTUKXHU1NzY2Clx1ODM2MwpcdTk1RUQKXHU2RTdFClx1OTUyRQpcdTUxRTEKXHU5QTdCClx1OTUwNQpcdTY1NTEKXHU2MDY5Clx1NTI2NQpcdTUxREQKXHU3OEIxClx1OUY3RgpcdTYyMkEKXHU3MEJDClx1OUVCQgpcdTdFQkEKXHU3OTgxClx1NUU5RgpcdTc2REIKXHU3MjQ4Clx1N0YxMwpcdTUxQzAKXHU3NzVCClx1NjYwQwpcdTVBNUEKXHU2RDg5Clx1N0I1MgpcdTU2MzQKXHU2M0QyClx1NUNCOApcdTY3MTcKXHU1RTg0Clx1ODg1NwpcdTg1Q0YKXHU1OUQxClx1OEQzOApcdTgxNTAKXHU1OTc0Clx1NTU2NgpcdTYwRUYKXHU0RTU4Clx1NEYxOQpcdTYwNjIKXHU1MzAwClx1N0VCMQpcdTYyNEUKXHU4RkE5Clx1ODAzMwpcdTVGNkEKXHU4MUUzClx1NEVCRgpcdTc0ODMKXHU2MkI1Clx1ODEwOQpcdTc5QzAKXHU4NDI4Clx1NEZDNApcdTdGNTEKXHU4MjFFClx1NUU5NwpcdTU1QjcKXHU3RUI1Clx1NUJGOApcdTZDNTcKXHU2MzAyClx1NkQyQQpcdThEM0EKXHU5NUVBClx1NjdFQwpcdTcyMDYKXHU3MEVGClx1NkQyNQpcdTdBM0IKXHU1ODk5Clx1OEY2RgpcdTUyQzcKXHU1MENGClx1NkVEQQpcdTUzOTgKXHU4NDk5Clx1ODJCMwpcdTgwQUYKXHU1NzYxClx1NjdGMQpcdTgzNjEKXHU4MTdGClx1NEVFQQpcdTY1QzUKXHU1QzNFClx1OEY2NwpcdTUxQjAKXHU4RDIxClx1NzY3QgpcdTlFQ0UKXHU1MjRBClx1OTRCQgpcdTUyRDIKXHU5MDAzClx1OTY5QwpcdTZDMjgKXHU5MEVEClx1NUNGMApcdTVFMDEKXHU2RTJGClx1NEYwRgpcdThGNjgKXHU0RUE5Clx1NkJENQpcdTY0RTYKXHU4M0FCClx1NTIzQQpcdTZENkEKXHU3OUQ4Clx1NjNGNApcdTY4MkEKXHU1MDY1Clx1NTUyRQpcdTgwQTEKXHU1QzlCClx1NzUxOApcdTZDRTEKXHU3NzYxClx1N0FFNQpcdTk0RjgKXHU2QzY0Clx1OTYwMApcdTRGMTEKXHU2QzQ3Clx1ODIwRApcdTcyNjcKXHU3RUQ1Clx1NzBCOApcdTU0RjIKXHU3OEY3Clx1N0VFOQpcdTY3MEIKXHU2REUxClx1NUMxNgpcdTU0MkYKXHU5Njc3Clx1NjdGNApcdTU0NDgKXHU1RjkyClx1OTg5QwpcdTZDRUEKXHU3QTBEClx1NUZEOApcdTZDRjUKXHU4NEREClx1NjJENgpcdTZEMUUKXHU2Mzg4Clx1OTU1QwpcdThGOUIKXHU1OEVFClx1OTUwQgpcdThEMkIKXHU4NjVBClx1NUYyRgpcdTY0NjkKXHU2Q0YwClx1NUU3QwpcdTVFRjcKXHU1QzBBClx1N0E5NwpcdTdFQjIKXHU1RjA0Clx1OTZCNgpcdTc1OTEKXHU2QzBGClx1NUJBQgpcdTU5RDAKXHU5NzA3Clx1NzQ1RQpcdTYwMkEKXHU1QzI0Clx1NzQzNApcdTVGQUEKXHU2M0NGClx1ODE5QwpcdThGREQKXHU1OTM5Clx1ODE3MApcdTdGMTgKXHU3M0UwClx1N0E3NwpcdTY4RUUKXHU2NzlEClx1N0FGOQpcdTZDOUYKXHU1MEFDClx1N0VGMwpcdTVGQzYKXHU5MEE2Clx1NTI2OQpcdTVFNzgKXHU2RDQ2Clx1NjgwRgpcdTYyRTUKXHU3MjU5Clx1OEQyRQpcdTc5M0MKXHU2RUU0Clx1OTRBMApcdTdFQjkKXHU3RjYyClx1NjJDRApcdTU0QjEKXHU1NThBClx1ODg5NgpcdTU3QzMKXHU1MkU0Clx1N0Y1QQpcdTcxMjYKXHU2RjVDClx1NEYwRApcdTU4QTgKXHU2QjMyClx1N0YxRApcdTU5RDMKXHU1MjBBClx1OTk3MQpcdTRFRkYKXHU1OTU2Clx1OTRERApcdTlCM0MKXHU0RTNEClx1OERFOApcdTlFRDgKXHU2MzE2Clx1OTRGRQpcdTYyNkIKXHU1NTlEClx1ODg4QgpcdTcwQUQKXHU2QzYxClx1NUU1NQpcdThCRjgKXHU1RjI3Clx1NTJCMQpcdTY4ODUKXHU1OTc2Clx1NkQwMQpcdTcwN0UKXHU4MjFGClx1OTI3NApcdTgyRUYKXHU4QkJDClx1NjJCMQpcdTZCQzEKXHU2MUMyClx1NUJEMgpcdTY2N0EKXHU1N0Q0Clx1NUJDNApcdTVDNEEKXHU4REMzClx1NkUyMQpcdTYzMTEKXHU0RTM5Clx1ODI3MApcdThEMUQKXHU3OEIwClx1NjJENApcdTcyMzkKXHU2MjM0Clx1NzgwMQpcdTY4QTYKXHU4MkJEClx1NzE5NApcdThENjQKXHU2RTE0Clx1NTRFRApcdTY1NkMKXHU5ODk3Clx1NTk1NApcdTk0QzUKXHU0RUYyClx1ODY0RQpcdTdBMDAKXHU1OUI5Clx1NEU0RgpcdTczQ0QKXHU3NTMzClx1Njg0QwpcdTkwNzUKXHU1MTQxClx1OTY4NgpcdTg3QkEKXHU0RUQzClx1OUI0RgpcdTk1MTAKXHU2NjUzClx1NkMyRQpcdTUxN0MKXHU5NjkwClx1Nzg4RApcdThENkIKXHU2MkU4Clx1NUZFMApcdTgwODMKXHU3RjM4Clx1NzI3NQpcdTYyQTIKXHU1MzVBClx1NURFNwpcdTU4RjMKXHU1MTQ0Clx1Njc1QwpcdThCQUYKXHU4QkRBClx1NzhBNwpcdTc5NjUKXHU2N0VGClx1OTg3NQpcdTVERTEKXHU3N0U5Clx1NjBCMgpcdTcwNEMKXHU5Rjg0Clx1NEYyNgpcdTc5NjgKXHU1QkZCClx1Njg0MgpcdTk0RkEKXHU1NzIzClx1NjA1MApcdTYwNzAKXHU5MEQxClx1OERBMwpcdTYyQUMKXHU4MzUyClx1ODE3RQpcdThEMzQKXHU2N0Q0Clx1NkVGNApcdTczMUIKXHU5NjE0Clx1OEY4NgpcdTU5QkIKXHU1ODZCClx1NjRBNApcdTUwQTgKXHU3QjdFClx1OTVGOQpcdTYyNzAKXHU3RDJCClx1NzgwMgpcdTkwMTIKXHU2MjBGClx1NTQwQQpcdTk2NzYKXHU0RjEwClx1NTU4MgpcdTc1OTcKXHU3NEY2Clx1NUE0NgpcdTYyOUEKXHU4MUMyClx1NjQ3OApcdTVGQ0QKXHU4NjdFClx1ODcyMQpcdTkwQkIKXHU4MEY4Clx1NURFOQpcdTYzMjQKXHU1MDc2Clx1NUYwMwpcdTY5RkQKXHU1MkIyClx1NEU3MwpcdTkwOTMKXHU1NDA5Clx1NEVDMQpcdTcwQzIKXHU3ODE2Clx1NzlERgpcdTRFNEMKXHU4MjMwClx1NEYzNApcdTc0REMKXHU2RDQ1Clx1NEUxOQpcdTY2ODIKXHU3MUU1Clx1NkE2MQpcdTY3RjMKXHU4RkY3Clx1NjY5NgpcdTcyNEMKXHU3OUU3Clx1ODBDNgpcdThCRTYKXHU3QzI3Clx1OEUwRgpcdTc0RjcKXHU4QzMxClx1NTQ0NgpcdTVCQkUKXHU3Q0NBClx1NkQxQgpcdThGODkKXHU2MTI0Clx1N0FERQpcdTk2OTkKXHU2MDEyClx1N0M5OApcdTRFNDMKXHU3RUVBClx1ODBBOQpcdTdDNEQKXHU2NTRGClx1NkQ4MgpcdTcxOTkKXHU3Njg2Clx1NEZBNgpcdTYwQUMKXHU2Mzk4Clx1NEVBQgpcdTdFQTAKXHU5MTkyClx1NzJDMgpcdTk1MDEKXHU2REMwClx1NjA2OApcdTcyNzIKXHU5NzM4Clx1NzIyQwpcdThENEYKXHU5MDA2Clx1NzNBOQpcdTk2NzUKXHU3OTVEClx1NzlEMgpcdTZENTkKXHU4QzhDClx1NUY3OQpcdTVGN0MKXHU2MDg5Clx1OUUyRApcdThEOEIKXHU1MUU0Clx1NjY2OApcdTc1NUMKXHU4Rjg4Clx1NzlFOQpcdTUzNzUKXHU3RjcyClx1NjhBRgpcdTcwOEUKXHU2RUU5Clx1NjhDQgpcdTlBNzEKXHU3QjVCClx1NUNFMQpcdTUxOTIKXHU1NTY1Clx1NUJGRgpcdThCRDEKXHU2RDc4Clx1NkNDOQpcdTVFM0QKXHU4RkRGClx1Nzg0NQpcdTc1ODYKXHU4RDM3Clx1NkYwRgpcdTdBM0YKXHU1MUEwClx1NUFFOQpcdTgwQzEKXHU4MkFGClx1NzI2MgpcdTUzREIKXHU4NjgwClx1NTk2NQpcdTlFMjMKXHU1Q0FEClx1N0Y4QQpcdTUxRUQKXHU0RTMyClx1NTg1OApcdTdFRDgKXHU5MTc1Clx1ODc4RApcdTc2QzYKXHU5NTIxClx1NUU5OQpcdTdCNzkKXHU1MUJCClx1OEY4NQpcdTY0NDQKXHU4OEFEClx1N0I0QgpcdTYyRDIKXHU1MERBClx1NjVGMQpcdTk0QkUKXHU5RTFGClx1NkYwNgpcdTZDODgKXHU3NzA5Clx1NzU4RgpcdTZERkIKXHU2OEQyClx1N0E1NwpcdTc4NUQKXHU5N0U5Clx1OTAzQwpcdTYyNkQKXHU0RkE4Clx1NTFDOQpcdTYzM0EKXHU3ODk3Clx1NjgzRApcdTcwOTIKXHU2NzZGClx1NjBBMwpcdTk5OEYKXHU1MjlEClx1OEM2QQpcdThGQkQKXHU1MkMzClx1OUUzRgpcdTY1RTYKXHU1NDBGClx1NjJEQwpcdTcyRDcKXHU1N0NCClx1OEY4QQpcdTYzQTkKXHU5OTZFClx1NjQyQwpcdTlBODIKXHU4RjlFClx1NTJGRQpcdTYyNjMKXHU0RjMwClx1ODQ4QgpcdTdFRDIKXHU5NkZFClx1NEUwOApcdTY3MzUKXHU1OUM2Clx1NjJERgpcdTVCODcKXHU4RjkxClx1OTY1NQpcdTk2RDUKXHU1MDdGClx1ODRDNApcdTVEMDcKXHU1MjZBClx1NTAyMQpcdTUzODUKXHU1NEFDClx1OUE3NgpcdTg1QUYKXHU1MjM3Clx1NjVBNQpcdTc1NkEKXHU4RDRCClx1NTk0OQpcdTRGNUIKXHU2RDQ3Clx1NkYyQgpcdTY2RkMKXHU2MjQ3Clx1OTQ5OQpcdTY4NDMKXHU2Mjc2Clx1NEVENApcdThGRDQKXHU0RkQ3Clx1NEU4RgpcdTgxNTQKXHU5NzhCClx1NjhGMQpcdTg5ODYKXHU2ODQ2Clx1NjA4NApcdTUzRDQKXHU2NDlFClx1OUE5NwpcdTUyRDgKXHU2NUZBClx1NkNCOApcdTVCNjQKXHU1NDEwClx1NUI1RgpcdTZFMjAKXHU1QzQ4Clx1NzVCRQpcdTU5OTkKXHU2MERDClx1NEVGMApcdTcyRTAKXHU4MEMwClx1OEMxMApcdTYyOUIKXHU5NzA5Clx1Njg1MQpcdTVDOTcKXHU1NjFCClx1ODg3MApcdTc2RDcKXHU2RTE3Clx1ODEwRgpcdThENTYKXHU2RDhDClx1NzUxQwpcdTY2RjkKXHU5NjA1Clx1ODA4QwpcdTU0RTkKXHU1Mzg5Clx1NzBDMwpcdTdFQUMKXHU2QkM1Clx1NjYyOApcdTRGMkEKXHU3NUM3Clx1NzE2RQpcdTUzRjkKXHU5NDg5Clx1NjQyRApcdTgzMEUKXHU3QjNDClx1OTE3NwpcdTUwNzcKXHU1RjEzClx1OTUyNQpcdTYwNTIKXHU2NzcwClx1NTc1MQpcdTlGM0IKXHU3RkZDClx1N0VCNgpcdTUzRDkKXHU3MkYxClx1OTAyRQpcdTdGNTAKXHU3RURDClx1NjhEQQpcdTYyOTEKXHU4MUE4Clx1ODUyQwpcdTVCRkEKXHU5QUE0Clx1N0E0NgpcdTUxQjYKXHU2N0FGClx1NTE4QwpcdTVDMzgKXHU1MUY4Clx1N0VDNQpcdTU3NkYKXHU3MjdBClx1NzEzMApcdThGNzAKXHU2QjIzClx1NjY0QgpcdTc2MjYKXHU1RkExClx1OTUyRApcdTk1MjYKXHU0RTI3Clx1NjVFQwpcdTk1M0IKXHU1Nzg0Clx1NjQxQwpcdTYyNTEKXHU5MDgwClx1NEVBRApcdTkxNkYKXHU4RkM4Clx1ODIxMgpcdTgxMDYKXHU5MTc2Clx1OTVGMgpcdTVGRTcKXHU5MTVBClx1OTg3RApcdTdGQkQKXHU2REE4Clx1NTM3OApcdTRFRDcKXHU5NjZBClx1OEY5RgpcdTYwRTkKXHU2NzZEClx1NTlEQQpcdTgwOUEKXHU2MzQ5Clx1OThEOApcdTZGMDIKXHU2NjA2Clx1NkIzQQpcdTU0M0UKXHU5MENFClx1NzBGNwpcdTZDNDEKXHU1NDc1Clx1OTk3MApcdTg0MjcKXHU5NkM1Clx1OTBBRQpcdThGQzEKXHU3MUQ1Clx1NjQ5MgpcdTU5RkIKXHU4RDc0Clx1NUJCNApcdTcwRTYKXHU1MDNBClx1NUUxMApcdTY1OTEKXHU5NEMzClx1NjVFOApcdTkxODcKXHU4NDYzClx1OTk3QwpcdTk2Q0YKXHU1OUZGClx1NjJDQwpcdTUwODUKXHU4MTc5Clx1NTlBNQpcdTYzQzkKXHU4RDI0Clx1NjJDNgpcdTZCNkEKXHU4NDYxClx1ODBGQQpcdTRFMjIKXHU2RDY5Clx1NUZCRApcdTY2MDIKXHU1N0FCClx1NjMyMQpcdTg5QzgKXHU4RDJBClx1NjE3MApcdTdGMzQKXHU2QzZBClx1NjE0QwpcdTUxQUYKXHU4QkZBClx1NTlEQwpcdThDMEEKXHU1MUY2Clx1NTJBMwpcdThCRUMKXHU4MDAwClx1NjYwRgpcdThFQkEKXHU3NkM4Clx1OUE5MQpcdTRFNTQKXHU2RUFBClx1NEUxQgpcdTUzNjIKXHU2MkI5Clx1OTVGNwpcdTU0QTgKXHU1MjJFClx1OUE3RQpcdTdGMDYKXHU2MDlGClx1NjQ1OApcdTk0RDIKXHU2M0I3Clx1OTg4NwpcdTVFN0IKXHU2N0M0Clx1NjBFMApcdTYwRTgKXHU0RjczClx1NEVDNwpcdTgxNEEKXHU3QTlEClx1NkRBNApcdTUyNTEKXHU3N0E3Clx1NTgyMQpcdTZDRkMKXHU4NDcxClx1N0Y2OQpcdTk3MEQKXHU2MzVFClx1ODBDRQpcdTgyQ0QKXHU2RUU4Clx1NEZFOQpcdTYzNDUKXHU2RTU4Clx1NzgwRApcdTk3MUUKXHU5MEI1Clx1ODQwNApcdTc1QUYKXHU2REVFClx1OTA0MgpcdTcxOEEKXHU3Q0FBClx1NzBEOApcdTVCQkYKXHU2ODYzClx1NjIwOApcdTlBNzMKXHU1QUMyClx1ODhENQpcdTVGOTkKXHU3QkFEClx1NjM1MApcdTgwQTAKXHU2NDkxClx1NjY1MgpcdThGQTgKXHU2QkJGClx1ODNCMgpcdTY0NEEKXHU2NDA1Clx1OTE3MQpcdTVDNEYKXHU3NUFCClx1NTRDMApcdTg1MjEKXHU1ODM1Clx1NkNBQgpcdTc2QjEKXHU3NTQ1Clx1NTNFMApcdTk2MDEKXHU4M0IxClx1NjU3MgpcdThGOTYKXHU5NEE5Clx1NzVENQpcdTU3NUQKXHU1REY3Clx1OTk3RgpcdTc5NzgKXHU0RTE4Clx1NzM4NApcdTZFOUMKXHU2NkYwClx1OTAzQgpcdTVGNkQKXHU1QzFEClx1NTM3RgpcdTU5QTgKXHU4MjQ3Clx1NTQxRQpcdTk3RTYKXHU2MDI4Clx1NzdFRQpcdTZCNDdgLnNwbGl0KCJcbiIpOwoKICAvLyBub2RlX21vZHVsZXMvQHNjdXJlL2JpcDM5L2VzbS93b3JkbGlzdHMvc3BhbmlzaC5qcwogIHZhciB3b3JkbGlzdDggPSBgYVx1MDMwMWJhY28KYWJkb21lbgphYmVqYQphYmllcnRvCmFib2dhZG8KYWJvbm8KYWJvcnRvCmFicmF6bwphYnJpcgphYnVlbG8KYWJ1c28KYWNhYmFyCmFjYWRlbWlhCmFjY2VzbwphY2Npb1x1MDMwMW4KYWNlaXRlCmFjZWxnYQphY2VudG8KYWNlcHRhcgphXHUwMzAxY2lkbwphY2xhcmFyCmFjbmVcdTAzMDEKYWNvZ2VyCmFjb3NvCmFjdGl2bwphY3RvCmFjdHJpegphY3R1YXIKYWN1ZGlyCmFjdWVyZG8KYWN1c2FyCmFkaWN0bwphZG1pdGlyCmFkb3B0YXIKYWRvcm5vCmFkdWFuYQphZHVsdG8KYWVcdTAzMDFyZW8KYWZlY3RhcgphZmljaW9cdTAzMDFuCmFmaW5hcgphZmlybWFyCmFcdTAzMDFnaWwKYWdpdGFyCmFnb25pXHUwMzAxYQphZ29zdG8KYWdvdGFyCmFncmVnYXIKYWdyaW8KYWd1YQphZ3VkbwphXHUwMzAxZ3VpbGEKYWd1amEKYWhvZ28KYWhvcnJvCmFpcmUKYWlzbGFyCmFqZWRyZXoKYWplbm8KYWp1c3RlCmFsYWNyYVx1MDMwMW4KYWxhbWJyZQphbGFybWEKYWxiYQphXHUwMzAxbGJ1bQphbGNhbGRlCmFsZGVhCmFsZWdyZQphbGVqYXIKYWxlcnRhCmFsZXRhCmFsZmlsZXIKYWxnYQphbGdvZG9cdTAzMDFuCmFsaWFkbwphbGllbnRvCmFsaXZpbwphbG1hCmFsbWVqYQphbG1pXHUwMzAxYmFyCmFsdGFyCmFsdGV6YQphbHRpdm8KYWx0bwphbHR1cmEKYWx1bW5vCmFsemFyCmFtYWJsZQphbWFudGUKYW1hcG9sYQphbWFyZ28KYW1hc2FyCmFcdTAzMDFtYmFyCmFcdTAzMDFtYml0bwphbWVubwphbWlnbwphbWlzdGFkCmFtb3IKYW1wYXJvCmFtcGxpbwphbmNobwphbmNpYW5vCmFuY2xhCmFuZGFyCmFuZGVcdTAzMDFuCmFuZW1pYQphXHUwMzAxbmd1bG8KYW5pbGxvCmFcdTAzMDFuaW1vCmFuaVx1MDMwMXMKYW5vdGFyCmFudGVuYQphbnRpZ3VvCmFudG9qbwphbnVhbAphbnVsYXIKYW51bmNpbwphblx1MDMwM2FkaXIKYW5cdTAzMDNlam8KYW5cdTAzMDNvCmFwYWdhcgphcGFyYXRvCmFwZXRpdG8KYXBpbwphcGxpY2FyCmFwb2RvCmFwb3J0ZQphcG95bwphcHJlbmRlcgphcHJvYmFyCmFwdWVzdGEKYXB1cm8KYXJhZG8KYXJhblx1MDMwM2EKYXJhcgphXHUwMzAxcmJpdHJvCmFcdTAzMDFyYm9sCmFyYnVzdG8KYXJjaGl2bwphcmNvCmFyZGVyCmFyZGlsbGEKYXJkdW8KYVx1MDMwMXJlYQphXHUwMzAxcmlkbwphcmllcwphcm1vbmlcdTAzMDFhCmFybmVcdTAzMDFzCmFyb21hCmFycGEKYXJwb1x1MDMwMW4KYXJyZWdsbwphcnJvegphcnJ1Z2EKYXJ0ZQphcnRpc3RhCmFzYQphc2Fkbwphc2FsdG8KYXNjZW5zbwphc2VndXJhcgphc2VvCmFzZXNvcgphc2llbnRvCmFzaWxvCmFzaXN0aXIKYXNubwphc29tYnJvCmFcdTAzMDFzcGVybwphc3RpbGxhCmFzdHJvCmFzdHV0bwphc3VtaXIKYXN1bnRvCmF0YWpvCmF0YXF1ZQphdGFyCmF0ZW50bwphdGVvCmFcdTAzMDF0aWNvCmF0bGV0YQphXHUwMzAxdG9tbwphdHJhZXIKYXRyb3oKYXR1XHUwMzAxbgphdWRhegphdWRpbwphdWdlCmF1bGEKYXVtZW50bwphdXNlbnRlCmF1dG9yCmF2YWwKYXZhbmNlCmF2YXJvCmF2ZQphdmVsbGFuYQphdmVuYQphdmVzdHJ1egphdmlvXHUwMzAxbgphdmlzbwpheWVyCmF5dWRhCmF5dW5vCmF6YWZyYVx1MDMwMW4KYXphcgphem90ZQphenVcdTAzMDFjYXIKYXp1ZnJlCmF6dWwKYmFiYQpiYWJvcgpiYWNoZQpiYWhpXHUwMzAxYQpiYWlsZQpiYWphcgpiYWxhbnphCmJhbGNvXHUwMzAxbgpiYWxkZQpiYW1idVx1MDMwMQpiYW5jbwpiYW5kYQpiYW5cdTAzMDNvCmJhcmJhCmJhcmNvCmJhcm5pegpiYXJybwpiYVx1MDMwMXNjdWxhCmJhc3RvXHUwMzAxbgpiYXN1cmEKYmF0YWxsYQpiYXRlcmlcdTAzMDFhCmJhdGlyCmJhdHV0YQpiYXVcdTAzMDFsCmJhemFyCmJlYmVcdTAzMDEKYmViaWRhCmJlbGxvCmJlc2FyCmJlc28KYmVzdGlhCmJpY2hvCmJpZW4KYmluZ28KYmxhbmNvCmJsb3F1ZQpibHVzYQpib2EKYm9iaW5hCmJvYm8KYm9jYQpib2NpbmEKYm9kYQpib2RlZ2EKYm9pbmEKYm9sYQpib2xlcm8KYm9sc2EKYm9tYmEKYm9uZGFkCmJvbml0bwpib25vCmJvbnNhXHUwMzAxaQpib3JkZQpib3JyYXIKYm9zcXVlCmJvdGUKYm90aVx1MDMwMW4KYm9cdTAzMDF2ZWRhCmJvemFsCmJyYXZvCmJyYXpvCmJyZWNoYQpicmV2ZQpicmlsbG8KYnJpbmNvCmJyaXNhCmJyb2NhCmJyb21hCmJyb25jZQpicm90ZQpicnVqYQpicnVzY28KYnJ1dG8KYnVjZW8KYnVjbGUKYnVlbm8KYnVleQpidWZhbmRhCmJ1Zm9cdTAzMDFuCmJ1XHUwMzAxaG8KYnVpdHJlCmJ1bHRvCmJ1cmJ1amEKYnVybGEKYnVycm8KYnVzY2FyCmJ1dGFjYQpidXpvXHUwMzAxbgpjYWJhbGxvCmNhYmV6YQpjYWJpbmEKY2FicmEKY2FjYW8KY2FkYVx1MDMwMXZlcgpjYWRlbmEKY2FlcgpjYWZlXHUwMzAxCmNhaVx1MDMwMWRhCmNhaW1hXHUwMzAxbgpjYWphCmNham9cdTAzMDFuCmNhbApjYWxhbWFyCmNhbGNpbwpjYWxkbwpjYWxpZGFkCmNhbGxlCmNhbG1hCmNhbG9yCmNhbHZvCmNhbWEKY2FtYmlvCmNhbWVsbG8KY2FtaW5vCmNhbXBvCmNhXHUwMzAxbmNlcgpjYW5kaWwKY2FuZWxhCmNhbmd1cm8KY2FuaWNhCmNhbnRvCmNhblx1MDMwM2EKY2FuXHUwMzAzb1x1MDMwMW4KY2FvYmEKY2FvcwpjYXBhegpjYXBpdGFcdTAzMDFuCmNhcG90ZQpjYXB0YXIKY2FwdWNoYQpjYXJhCmNhcmJvXHUwMzAxbgpjYVx1MDMwMXJjZWwKY2FyZXRhCmNhcmdhCmNhcmluXHUwMzAzbwpjYXJuZQpjYXJwZXRhCmNhcnJvCmNhcnRhCmNhc2EKY2FzY28KY2FzZXJvCmNhc3BhCmNhc3RvcgpjYXRvcmNlCmNhdHJlCmNhdWRhbApjYXVzYQpjYXpvCmNlYm9sbGEKY2VkZXIKY2Vkcm8KY2VsZGEKY2VcdTAzMDFsZWJyZQpjZWxvc28KY2VcdTAzMDFsdWxhCmNlbWVudG8KY2VuaXphCmNlbnRybwpjZXJjYQpjZXJkbwpjZXJlemEKY2VybwpjZXJyYXIKY2VydGV6YQpjZVx1MDMwMXNwZWQKY2V0cm8KY2hhY2FsCmNoYWxlY28KY2hhbXB1XHUwMzAxCmNoYW5jbGEKY2hhcGEKY2hhcmxhCmNoaWNvCmNoaXN0ZQpjaGl2bwpjaG9xdWUKY2hvemEKY2h1bGV0YQpjaHVwYXIKY2ljbG9cdTAzMDFuCmNpZWdvCmNpZWxvCmNpZW4KY2llcnRvCmNpZnJhCmNpZ2Fycm8KY2ltYQpjaW5jbwpjaW5lCmNpbnRhCmNpcHJlXHUwMzAxcwpjaXJjbwpjaXJ1ZWxhCmNpc25lCmNpdGEKY2l1ZGFkCmNsYW1vcgpjbGFuCmNsYXJvCmNsYXNlCmNsYXZlCmNsaWVudGUKY2xpbWEKY2xpXHUwMzAxbmljYQpjb2JyZQpjb2NjaW9cdTAzMDFuCmNvY2hpbm8KY29jaW5hCmNvY28KY29cdTAzMDFkaWdvCmNvZG8KY29mcmUKY29nZXIKY29oZXRlCmNvamlcdTAzMDFuCmNvam8KY29sYQpjb2xjaGEKY29sZWdpbwpjb2xnYXIKY29saW5hCmNvbGxhcgpjb2xtbwpjb2x1bW5hCmNvbWJhdGUKY29tZXIKY29taWRhCmNvXHUwMzAxbW9kbwpjb21wcmEKY29uZGUKY29uZWpvCmNvbmdhCmNvbm9jZXIKY29uc2Vqbwpjb250YXIKY29wYQpjb3BpYQpjb3Jhem9cdTAzMDFuCmNvcmJhdGEKY29yY2hvCmNvcmRvXHUwMzAxbgpjb3JvbmEKY29ycmVyCmNvc2VyCmNvc21vcwpjb3N0YQpjcmFcdTAzMDFuZW8KY3JhXHUwMzAxdGVyCmNyZWFyCmNyZWNlcgpjcmVpXHUwMzAxZG8KY3JlbWEKY3JpXHUwMzAxYQpjcmltZW4KY3JpcHRhCmNyaXNpcwpjcm9tbwpjcm9cdTAzMDFuaWNhCmNyb3F1ZXRhCmNydWRvCmNydXoKY3VhZHJvCmN1YXJ0bwpjdWF0cm8KY3VibwpjdWJyaXIKY3VjaGFyYQpjdWVsbG8KY3VlbnRvCmN1ZXJkYQpjdWVzdGEKY3VldmEKY3VpZGFyCmN1bGVicmEKY3VscGEKY3VsdG8KY3VtYnJlCmN1bXBsaXIKY3VuYQpjdW5ldGEKY3VvdGEKY3Vwb1x1MDMwMW4KY3VcdTAzMDFwdWxhCmN1cmFyCmN1cmlvc28KY3Vyc28KY3VydmEKY3V0aXMKZGFtYQpkYW56YQpkYXIKZGFyZG8KZGFcdTAzMDF0aWwKZGViZXIKZGVcdTAzMDFiaWwKZGVcdTAzMDFjYWRhCmRlY2lyCmRlZG8KZGVmZW5zYQpkZWZpbmlyCmRlamFyCmRlbGZpXHUwMzAxbgpkZWxnYWRvCmRlbGl0bwpkZW1vcmEKZGVuc28KZGVudGFsCmRlcG9ydGUKZGVyZWNobwpkZXJyb3RhCmRlc2F5dW5vCmRlc2VvCmRlc2ZpbGUKZGVzbnVkbwpkZXN0aW5vCmRlc3ZpXHUwMzAxbwpkZXRhbGxlCmRldGVuZXIKZGV1ZGEKZGlcdTAzMDFhCmRpYWJsbwpkaWFkZW1hCmRpYW1hbnRlCmRpYW5hCmRpYXJpbwpkaWJ1am8KZGljdGFyCmRpZW50ZQpkaWV0YQpkaWV6CmRpZmlcdTAzMDFjaWwKZGlnbm8KZGlsZW1hCmRpbHVpcgpkaW5lcm8KZGlyZWN0bwpkaXJpZ2lyCmRpc2NvCmRpc2VuXHUwMzAzbwpkaXNmcmF6CmRpdmEKZGl2aW5vCmRvYmxlCmRvY2UKZG9sb3IKZG9taW5nbwpkb24KZG9uYXIKZG9yYWRvCmRvcm1pcgpkb3Jzbwpkb3MKZG9zaXMKZHJhZ29cdTAzMDFuCmRyb2dhCmR1Y2hhCmR1ZGEKZHVlbG8KZHVlblx1MDMwM28KZHVsY2UKZHVcdTAzMDFvCmR1cXVlCmR1cmFyCmR1cmV6YQpkdXJvCmVcdTAzMDFiYW5vCmVicmlvCmVjaGFyCmVjbwplY3VhZG9yCmVkYWQKZWRpY2lvXHUwMzAxbgplZGlmaWNpbwplZGl0b3IKZWR1Y2FyCmVmZWN0bwplZmljYXoKZWplCmVqZW1wbG8KZWxlZmFudGUKZWxlZ2lyCmVsZW1lbnRvCmVsZXZhcgplbGlwc2UKZVx1MDMwMWxpdGUKZWxpeGlyCmVsb2dpbwplbHVkaXIKZW1idWRvCmVtaXRpcgplbW9jaW9cdTAzMDFuCmVtcGF0ZQplbXBlblx1MDMwM28KZW1wbGVvCmVtcHJlc2EKZW5hbm8KZW5jYXJnbwplbmNodWZlCmVuY2lcdTAzMDFhCmVuZW1pZ28KZW5lcm8KZW5mYWRvCmVuZmVybW8KZW5nYW5cdTAzMDNvCmVuaWdtYQplbmxhY2UKZW5vcm1lCmVucmVkbwplbnNheW8KZW5zZW5cdTAzMDNhcgplbnRlcm8KZW50cmFyCmVudmFzZQplbnZpXHUwMzAxbwplXHUwMzAxcG9jYQplcXVpcG8KZXJpem8KZXNjYWxhCmVzY2VuYQplc2NvbGFyCmVzY3JpYmlyCmVzY3Vkbwplc2VuY2lhCmVzZmVyYQplc2Z1ZXJ6bwplc3BhZGEKZXNwZWpvCmVzcGlcdTAzMDFhCmVzcG9zYQplc3B1bWEKZXNxdWlcdTAzMDEKZXN0YXIKZXN0ZQplc3RpbG8KZXN0dWZhCmV0YXBhCmV0ZXJubwplXHUwMzAxdGljYQpldG5pYQpldmFkaXIKZXZhbHVhcgpldmVudG8KZXZpdGFyCmV4YWN0bwpleGFtZW4KZXhjZXNvCmV4Y3VzYQpleGVudG8KZXhpZ2lyCmV4aWxpbwpleGlzdGlyCmVcdTAzMDF4aXRvCmV4cGVydG8KZXhwbGljYXIKZXhwb25lcgpleHRyZW1vCmZhXHUwMzAxYnJpY2EKZmFcdTAzMDFidWxhCmZhY2hhZGEKZmFcdTAzMDFjaWwKZmFjdG9yCmZhZW5hCmZhamEKZmFsZGEKZmFsbG8KZmFsc28KZmFsdGFyCmZhbWEKZmFtaWxpYQpmYW1vc28KZmFyYW9cdTAzMDFuCmZhcm1hY2lhCmZhcm9sCmZhcnNhCmZhc2UKZmF0aWdhCmZhdW5hCmZhdm9yCmZheApmZWJyZXJvCmZlY2hhCmZlbGl6CmZlbwpmZXJpYQpmZXJvegpmZVx1MDMwMXJ0aWwKZmVydm9yCmZlc3RpXHUwMzAxbgpmaWFibGUKZmlhbnphCmZpYXIKZmlicmEKZmljY2lvXHUwMzAxbgpmaWNoYQpmaWRlbwpmaWVicmUKZmllbApmaWVyYQpmaWVzdGEKZmlndXJhCmZpamFyCmZpam8KZmlsYQpmaWxldGUKZmlsaWFsCmZpbHRybwpmaW4KZmluY2EKZmluZ2lyCmZpbml0bwpmaXJtYQpmbGFjbwpmbGF1dGEKZmxlY2hhCmZsb3IKZmxvdGEKZmx1aXIKZmx1am8KZmx1XHUwMzAxb3IKZm9iaWEKZm9jYQpmb2dhdGEKZm9nb1x1MDMwMW4KZm9saW8KZm9sbGV0bwpmb25kbwpmb3JtYQpmb3Jybwpmb3J0dW5hCmZvcnphcgpmb3NhCmZvdG8KZnJhY2FzbwpmcmFcdTAzMDFnaWwKZnJhbmphCmZyYXNlCmZyYXVkZQpmcmVpXHUwMzAxcgpmcmVubwpmcmVzYQpmcmlcdTAzMDFvCmZyaXRvCmZydXRhCmZ1ZWdvCmZ1ZW50ZQpmdWVyemEKZnVnYQpmdW1hcgpmdW5jaW9cdTAzMDFuCmZ1bmRhCmZ1cmdvXHUwMzAxbgpmdXJpYQpmdXNpbApmdVx1MDMwMXRib2wKZnV0dXJvCmdhY2VsYQpnYWZhcwpnYWl0YQpnYWpvCmdhbGEKZ2FsZXJpXHUwMzAxYQpnYWxsbwpnYW1iYQpnYW5hcgpnYW5jaG8KZ2FuZ2EKZ2Fuc28KZ2FyYWplCmdhcnphCmdhc29saW5hCmdhc3RhcgpnYXRvCmdhdmlsYVx1MDMwMW4KZ2VtZWxvCmdlbWlyCmdlbgpnZVx1MDMwMW5lcm8KZ2VuaW8KZ2VudGUKZ2VyYW5pbwpnZXJlbnRlCmdlcm1lbgpnZXN0bwpnaWdhbnRlCmdpbW5hc2lvCmdpcmFyCmdpcm8KZ2xhY2lhcgpnbG9ibwpnbG9yaWEKZ29sCmdvbGZvCmdvbG9zbwpnb2xwZQpnb21hCmdvcmRvCmdvcmlsYQpnb3JyYQpnb3RhCmdvdGVvCmdvemFyCmdyYWRhCmdyYVx1MDMwMWZpY28KZ3Jhbm8KZ3Jhc2EKZ3JhdGlzCmdyYXZlCmdyaWV0YQpncmlsbG8KZ3JpcGUKZ3Jpcwpncml0bwpncm9zb3IKZ3J1XHUwMzAxYQpncnVlc28KZ3J1bW8KZ3J1cG8KZ3VhbnRlCmd1YXBvCmd1YXJkaWEKZ3VlcnJhCmd1aVx1MDMwMWEKZ3Vpblx1MDMwM28KZ3Vpb24KZ3Vpc28KZ3VpdGFycmEKZ3VzYW5vCmd1c3RhcgpoYWJlcgpoYVx1MDMwMWJpbApoYWJsYXIKaGFjZXIKaGFjaGEKaGFkYQpoYWxsYXIKaGFtYWNhCmhhcmluYQpoYXoKaGF6YW5cdTAzMDNhCmhlYmlsbGEKaGVicmEKaGVjaG8KaGVsYWRvCmhlbGlvCmhlbWJyYQpoZXJpcgpoZXJtYW5vCmhlXHUwMzAxcm9lCmhlcnZpcgpoaWVsbwpoaWVycm8KaGlcdTAzMDFnYWRvCmhpZ2llbmUKaGlqbwpoaW1ubwpoaXN0b3JpYQpob2NpY28KaG9nYXIKaG9ndWVyYQpob2phCmhvbWJyZQpob25nbwpob25vcgpob25yYQpob3JhCmhvcm1pZ2EKaG9ybm8KaG9zdGlsCmhveW8KaHVlY28KaHVlbGdhCmh1ZXJ0YQpodWVzbwpodWV2bwpodWlkYQpodWlyCmh1bWFubwpodVx1MDMwMW1lZG8KaHVtaWxkZQpodW1vCmh1bmRpcgpodXJhY2FcdTAzMDFuCmh1cnRvCmljb25vCmlkZWFsCmlkaW9tYQppXHUwMzAxZG9sbwppZ2xlc2lhCmlnbHVcdTAzMDEKaWd1YWwKaWxlZ2FsCmlsdXNpb1x1MDMwMW4KaW1hZ2VuCmltYVx1MDMwMW4KaW1pdGFyCmltcGFyCmltcGVyaW8KaW1wb25lcgppbXB1bHNvCmluY2FwYXoKaVx1MDMwMW5kaWNlCmluZXJ0ZQppbmZpZWwKaW5mb3JtZQppbmdlbmlvCmluaWNpbwppbm1lbnNvCmlubXVuZQppbm5hdG8KaW5zZWN0bwppbnN0YW50ZQppbnRlcmVcdTAzMDFzCmlcdTAzMDFudGltbwppbnR1aXIKaW51XHUwMzAxdGlsCmludmllcm5vCmlyYQppcmlzCmlyb25pXHUwMzAxYQppc2xhCmlzbG90ZQpqYWJhbGlcdTAzMDEKamFib1x1MDMwMW4KamFtb1x1MDMwMW4KamFyYWJlCmphcmRpXHUwMzAxbgpqYXJyYQpqYXVsYQpqYXptaVx1MDMwMW4KamVmZQpqZXJpbmdhCmppbmV0ZQpqb3JuYWRhCmpvcm9iYQpqb3Zlbgpqb3lhCmp1ZXJnYQpqdWV2ZXMKanVlegpqdWdhZG9yCmp1Z28KanVndWV0ZQpqdWljaW8KanVuY28KanVuZ2xhCmp1bmlvCmp1bnRhcgpqdVx1MDMwMXBpdGVyCmp1cmFyCmp1c3RvCmp1dmVuaWwKanV6Z2FyCmtpbG8Ka29hbGEKbGFiaW8KbGFjaW8KbGFjcmEKbGFkbwpsYWRyb1x1MDMwMW4KbGFnYXJ0bwpsYVx1MDMwMWdyaW1hCmxhZ3VuYQpsYWljbwpsYW1lcgpsYVx1MDMwMW1pbmEKbGFcdTAzMDFtcGFyYQpsYW5hCmxhbmNoYQpsYW5nb3N0YQpsYW56YQpsYVx1MDMwMXBpegpsYXJnbwpsYXJ2YQpsYVx1MDMwMXN0aW1hCmxhdGEKbGFcdTAzMDF0ZXgKbGF0aXIKbGF1cmVsCmxhdmFyCmxhem8KbGVhbApsZWNjaW9cdTAzMDFuCmxlY2hlCmxlY3RvcgpsZWVyCmxlZ2lvXHUwMzAxbgpsZWd1bWJyZQpsZWphbm8KbGVuZ3VhCmxlbnRvCmxlblx1MDMwM2EKbGVvXHUwMzAxbgpsZW9wYXJkbwpsZXNpb1x1MDMwMW4KbGV0YWwKbGV0cmEKbGV2ZQpsZXllbmRhCmxpYmVydGFkCmxpYnJvCmxpY29yCmxpXHUwMzAxZGVyCmxpZGlhcgpsaWVuem8KbGlnYQpsaWdlcm8KbGltYQpsaVx1MDMwMW1pdGUKbGltb1x1MDMwMW4KbGltcGlvCmxpbmNlCmxpbmRvCmxpXHUwMzAxbmVhCmxpbmdvdGUKbGlubwpsaW50ZXJuYQpsaVx1MDMwMXF1aWRvCmxpc28KbGlzdGEKbGl0ZXJhCmxpdGlvCmxpdHJvCmxsYWdhCmxsYW1hCmxsYW50bwpsbGF2ZQpsbGVnYXIKbGxlbmFyCmxsZXZhcgpsbG9yYXIKbGxvdmVyCmxsdXZpYQpsb2JvCmxvY2lvXHUwMzAxbgpsb2NvCmxvY3VyYQpsb1x1MDMwMWdpY2EKbG9ncm8KbG9tYnJpegpsb21vCmxvbmphCmxvdGUKbHVjaGEKbHVjaXIKbHVnYXIKbHVqbwpsdW5hCmx1bmVzCmx1cGEKbHVzdHJvCmx1dG8KbHV6Cm1hY2V0YQptYWNobwptYWRlcmEKbWFkcmUKbWFkdXJvCm1hZXN0cm8KbWFmaWEKbWFnaWEKbWFnbwptYWlcdTAzMDF6Cm1hbGRhZAptYWxldGEKbWFsbGEKbWFsbwptYW1hXHUwMzAxCm1hbWJvCm1hbXV0Cm1hbmNvCm1hbmRvCm1hbmVqYXIKbWFuZ2EKbWFuaXF1aVx1MDMwMQptYW5qYXIKbWFubwptYW5zbwptYW50YQptYW5cdTAzMDNhbmEKbWFwYQptYVx1MDMwMXF1aW5hCm1hcgptYXJjbwptYXJlYQptYXJmaWwKbWFyZ2VuCm1hcmlkbwptYVx1MDMwMXJtb2wKbWFycm9cdTAzMDFuCm1hcnRlcwptYXJ6bwptYXNhCm1hXHUwMzAxc2NhcmEKbWFzaXZvCm1hdGFyCm1hdGVyaWEKbWF0aXoKbWF0cml6Cm1hXHUwMzAxeGltbwptYXlvcgptYXpvcmNhCm1lY2hhCm1lZGFsbGEKbWVkaW8KbWVcdTAzMDFkdWxhCm1lamlsbGEKbWVqb3IKbWVsZW5hCm1lbG9cdTAzMDFuCm1lbW9yaWEKbWVub3IKbWVuc2FqZQptZW50ZQptZW51XHUwMzAxCm1lcmNhZG8KbWVyZW5ndWUKbWVcdTAzMDFyaXRvCm1lcwptZXNvXHUwMzAxbgptZXRhCm1ldGVyCm1lXHUwMzAxdG9kbwptZXRybwptZXpjbGEKbWllZG8KbWllbAptaWVtYnJvCm1pZ2EKbWlsCm1pbGFncm8KbWlsaXRhcgptaWxsb1x1MDMwMW4KbWltbwptaW5hCm1pbmVybwptaVx1MDMwMW5pbW8KbWludXRvCm1pb3BlCm1pcmFyCm1pc2EKbWlzZXJpYQptaXNpbAptaXNtbwptaXRhZAptaXRvCm1vY2hpbGEKbW9jaW9cdTAzMDFuCm1vZGEKbW9kZWxvCm1vaG8KbW9qYXIKbW9sZGUKbW9sZXIKbW9saW5vCm1vbWVudG8KbW9taWEKbW9uYXJjYQptb25lZGEKbW9uamEKbW9udG8KbW9uXHUwMzAzbwptb3JhZGEKbW9yZGVyCm1vcmVubwptb3Jpcgptb3Jybwptb3JzYQptb3J0YWwKbW9zY2EKbW9zdHJhcgptb3Rpdm8KbW92ZXIKbW9cdTAzMDF2aWwKbW96bwptdWNobwptdWRhcgptdWVibGUKbXVlbGEKbXVlcnRlCm11ZXN0cmEKbXVncmUKbXVqZXIKbXVsYQptdWxldGEKbXVsdGEKbXVuZG8KbXVuXHUwMzAzZWNhCm11cmFsCm11cm8KbXVcdTAzMDFzY3VsbwptdXNlbwptdXNnbwptdVx1MDMwMXNpY2EKbXVzbG8KbmFcdTAzMDFjYXIKbmFjaW9cdTAzMDFuCm5hZGFyCm5haXBlCm5hcmFuamEKbmFyaXoKbmFycmFyCm5hc2FsCm5hdGFsCm5hdGl2bwpuYXR1cmFsCm5hXHUwMzAxdXNlYQpuYXZhbApuYXZlCm5hdmlkYWQKbmVjaW8KbmVcdTAzMDFjdGFyCm5lZ2FyCm5lZ29jaW8KbmVncm8KbmVvXHUwMzAxbgpuZXJ2aW8KbmV0bwpuZXV0cm8KbmV2YXIKbmV2ZXJhCm5pY2hvCm5pZG8KbmllYmxhCm5pZXRvCm5pblx1MDMwM2V6Cm5pblx1MDMwM28KbmlcdTAzMDF0aWRvCm5pdmVsCm5vYmxlemEKbm9jaGUKbm9cdTAzMDFtaW5hCm5vcmlhCm5vcm1hCm5vcnRlCm5vdGEKbm90aWNpYQpub3ZhdG8Kbm92ZWxhCm5vdmlvCm51YmUKbnVjYQpudVx1MDMwMWNsZW8KbnVkaWxsbwpudWRvCm51ZXJhCm51ZXZlCm51ZXoKbnVsbwpudVx1MDMwMW1lcm8KbnV0cmlhCm9hc2lzCm9iZXNvCm9iaXNwbwpvYmpldG8Kb2JyYQpvYnJlcm8Kb2JzZXJ2YXIKb2J0ZW5lcgpvYnZpbwpvY2EKb2Nhc28Kb2NlXHUwMzAxYW5vCm9jaGVudGEKb2NobwpvY2lvCm9jcmUKb2N0YXZvCm9jdHVicmUKb2N1bHRvCm9jdXBhcgpvY3VycmlyCm9kaWFyCm9kaW8Kb2Rpc2VhCm9lc3RlCm9mZW5zYQpvZmVydGEKb2ZpY2lvCm9mcmVjZXIKb2dybwpvaVx1MDMwMWRvCm9pXHUwMzAxcgpvam8Kb2xhCm9sZWFkYQpvbGZhdG8Kb2xpdm8Kb2xsYQpvbG1vCm9sb3IKb2x2aWRvCm9tYmxpZ28Kb25kYQpvbnphCm9wYWNvCm9wY2lvXHUwMzAxbgpvXHUwMzAxcGVyYQpvcGluYXIKb3BvbmVyCm9wdGFyCm9cdTAzMDFwdGljYQpvcHVlc3RvCm9yYWNpb1x1MDMwMW4Kb3JhZG9yCm9yYWwKb1x1MDMwMXJiaXRhCm9yY2EKb3JkZW4Kb3JlamEKb1x1MDMwMXJnYW5vCm9yZ2lcdTAzMDFhCm9yZ3VsbG8Kb3JpZW50ZQpvcmlnZW4Kb3JpbGxhCm9ybwpvcnF1ZXN0YQpvcnVnYQpvc2FkaVx1MDMwMWEKb3NjdXJvCm9zZXpubwpvc28Kb3N0cmEKb3Rvblx1MDMwM28Kb3RybwpvdmVqYQpvXHUwMzAxdnVsbwpvXHUwMzAxeGlkbwpveGlcdTAzMDFnZW5vCm95ZW50ZQpvem9ubwpwYWN0bwpwYWRyZQpwYWVsbGEKcGFcdTAzMDFnaW5hCnBhZ28KcGFpXHUwMzAxcwpwYVx1MDMwMWphcm8KcGFsYWJyYQpwYWxjbwpwYWxldGEKcGFcdTAzMDFsaWRvCnBhbG1hCnBhbG9tYQpwYWxwYXIKcGFuCnBhbmFsCnBhXHUwMzAxbmljbwpwYW50ZXJhCnBhblx1MDMwM3VlbG8KcGFwYVx1MDMwMQpwYXBlbApwYXBpbGxhCnBhcXVldGUKcGFyYXIKcGFyY2VsYQpwYXJlZApwYXJpcgpwYXJvCnBhXHUwMzAxcnBhZG8KcGFycXVlCnBhXHUwMzAxcnJhZm8KcGFydGUKcGFzYXIKcGFzZW8KcGFzaW9cdTAzMDFuCnBhc28KcGFzdGEKcGF0YQpwYXRpbwpwYXRyaWEKcGF1c2EKcGF1dGEKcGF2bwpwYXlhc28KcGVhdG9cdTAzMDFuCnBlY2FkbwpwZWNlcmEKcGVjaG8KcGVkYWwKcGVkaXIKcGVnYXIKcGVpbmUKcGVsYXIKcGVsZGFuXHUwMzAzbwpwZWxlYQpwZWxpZ3JvCnBlbGxlam8KcGVsbwpwZWx1Y2EKcGVuYQpwZW5zYXIKcGVuXHUwMzAzb1x1MDMwMW4KcGVvXHUwMzAxbgpwZW9yCnBlcGlubwpwZXF1ZW5cdTAzMDNvCnBlcmEKcGVyY2hhCnBlcmRlcgpwZXJlemEKcGVyZmlsCnBlcmljbwpwZXJsYQpwZXJtaXNvCnBlcnJvCnBlcnNvbmEKcGVzYQpwZXNjYQpwZVx1MDMwMXNpbW8KcGVzdGFuXHUwMzAzYQpwZVx1MDMwMXRhbG8KcGV0cm9cdTAzMDFsZW8KcGV6CnBlenVuXHUwMzAzYQpwaWNhcgpwaWNob1x1MDMwMW4KcGllCnBpZWRyYQpwaWVybmEKcGllemEKcGlqYW1hCnBpbGFyCnBpbG90bwpwaW1pZW50YQpwaW5vCnBpbnRvcgpwaW56YQpwaW5cdTAzMDNhCnBpb2pvCnBpcGEKcGlyYXRhCnBpc2FyCnBpc2NpbmEKcGlzbwpwaXN0YQpwaXRvXHUwMzAxbgpwaXpjYQpwbGFjYQpwbGFuCnBsYXRhCnBsYXlhCnBsYXphCnBsZWl0bwpwbGVubwpwbG9tbwpwbHVtYQpwbHVyYWwKcG9icmUKcG9jbwpwb2Rlcgpwb2Rpbwpwb2VtYQpwb2VzaVx1MDMwMWEKcG9ldGEKcG9sZW4KcG9saWNpXHUwMzAxYQpwb2xsbwpwb2x2bwpwb21hZGEKcG9tZWxvCnBvbW8KcG9tcGEKcG9uZXIKcG9yY2lvXHUwMzAxbgpwb3J0YWwKcG9zYWRhCnBvc2Vlcgpwb3NpYmxlCnBvc3RlCnBvdGVuY2lhCnBvdHJvCnBvem8KcHJhZG8KcHJlY296CnByZWd1bnRhCnByZW1pbwpwcmVuc2EKcHJlc28KcHJldmlvCnByaW1vCnByaVx1MDMwMW5jaXBlCnByaXNpb1x1MDMwMW4KcHJpdmFyCnByb2EKcHJvYmFyCnByb2Nlc28KcHJvZHVjdG8KcHJvZXphCnByb2Zlc29yCnByb2dyYW1hCnByb2xlCnByb21lc2EKcHJvbnRvCnByb3Bpbwpwcm9cdTAzMDF4aW1vCnBydWViYQpwdVx1MDMwMWJsaWNvCnB1Y2hlcm8KcHVkb3IKcHVlYmxvCnB1ZXJ0YQpwdWVzdG8KcHVsZ2EKcHVsaXIKcHVsbW9cdTAzMDFuCnB1bHBvCnB1bHNvCnB1bWEKcHVudG8KcHVuXHUwMzAzYWwKcHVuXHUwMzAzbwpwdXBhCnB1cGlsYQpwdXJlXHUwMzAxCnF1ZWRhcgpxdWVqYQpxdWVtYXIKcXVlcmVyCnF1ZXNvCnF1aWV0bwpxdWlcdTAzMDFtaWNhCnF1aW5jZQpxdWl0YXIKcmFcdTAzMDFiYW5vCnJhYmlhCnJhYm8KcmFjaW9cdTAzMDFuCnJhZGljYWwKcmFpXHUwMzAxegpyYW1hCnJhbXBhCnJhbmNobwpyYW5nbwpyYXBhegpyYVx1MDMwMXBpZG8KcmFwdG8KcmFzZ28KcmFzcGEKcmF0bwpyYXlvCnJhemEKcmF6b1x1MDMwMW4KcmVhY2Npb1x1MDMwMW4KcmVhbGlkYWQKcmViYW5cdTAzMDNvCnJlYm90ZQpyZWNhZXIKcmVjZXRhCnJlY2hhem8KcmVjb2dlcgpyZWNyZW8KcmVjdG8KcmVjdXJzbwpyZWQKcmVkb25kbwpyZWR1Y2lyCnJlZmxlam8KcmVmb3JtYQpyZWZyYVx1MDMwMW4KcmVmdWdpbwpyZWdhbG8KcmVnaXIKcmVnbGEKcmVncmVzbwpyZWhlXHUwMzAxbgpyZWlubwpyZWlcdTAzMDFyCnJlamEKcmVsYXRvCnJlbGV2bwpyZWxpZXZlCnJlbGxlbm8KcmVsb2oKcmVtYXIKcmVtZWRpbwpyZW1vCnJlbmNvcgpyZW5kaXIKcmVudGEKcmVwYXJ0bwpyZXBldGlyCnJlcG9zbwpyZXB0aWwKcmVzCnJlc2NhdGUKcmVzaW5hCnJlc3BldG8KcmVzdG8KcmVzdW1lbgpyZXRpcm8KcmV0b3JubwpyZXRyYXRvCnJldW5pcgpyZXZlXHUwMzAxcwpyZXZpc3RhCnJleQpyZXphcgpyaWNvCnJpZWdvCnJpZW5kYQpyaWVzZ28KcmlmYQpyaVx1MDMwMWdpZG8Kcmlnb3IKcmluY29cdTAzMDFuCnJpblx1MDMwM29cdTAzMDFuCnJpXHUwMzAxbwpyaXF1ZXphCnJpc2EKcml0bW8Kcml0bwpyaXpvCnJvYmxlCnJvY2UKcm9jaWFyCnJvZGFyCnJvZGVvCnJvZGlsbGEKcm9lcgpyb2ppem8Kcm9qbwpyb21lcm8Kcm9tcGVyCnJvbgpyb25jbwpyb25kYQpyb3BhCnJvcGVybwpyb3NhCnJvc2NhCnJvc3Rybwpyb3RhcgpydWJpXHUwMzAxCnJ1Ym9yCnJ1ZG8KcnVlZGEKcnVnaXIKcnVpZG8KcnVpbmEKcnVsZXRhCnJ1bG8KcnVtYm8KcnVtb3IKcnVwdHVyYQpydXRhCnJ1dGluYQpzYVx1MDMwMWJhZG8Kc2FiZXIKc2FiaW8Kc2FibGUKc2FjYXIKc2FnYXoKc2FncmFkbwpzYWxhCnNhbGRvCnNhbGVybwpzYWxpcgpzYWxtb1x1MDMwMW4Kc2Fsb1x1MDMwMW4Kc2Fsc2EKc2FsdG8Kc2FsdWQKc2FsdmFyCnNhbWJhCnNhbmNpb1x1MDMwMW4Kc2FuZGlcdTAzMDFhCnNhbmVhcgpzYW5ncmUKc2FuaWRhZApzYW5vCnNhbnRvCnNhcG8Kc2FxdWUKc2FyZGluYQpzYXJ0ZVx1MDMwMW4Kc2FzdHJlCnNhdGFcdTAzMDFuCnNhdW5hCnNheG9mb1x1MDMwMW4Kc2VjY2lvXHUwMzAxbgpzZWNvCnNlY3JldG8Kc2VjdGEKc2VkCnNlZ3VpcgpzZWlzCnNlbGxvCnNlbHZhCnNlbWFuYQpzZW1pbGxhCnNlbmRhCnNlbnNvcgpzZW5cdTAzMDNhbApzZW5cdTAzMDNvcgpzZXBhcmFyCnNlcGlhCnNlcXVpXHUwMzAxYQpzZXIKc2VyaWUKc2VybW9cdTAzMDFuCnNlcnZpcgpzZXNlbnRhCnNlc2lvXHUwMzAxbgpzZXRhCnNldGVudGEKc2V2ZXJvCnNleG8Kc2V4dG8Kc2lkcmEKc2llc3RhCnNpZXRlCnNpZ2xvCnNpZ25vCnNpXHUwMzAxbGFiYQpzaWxiYXIKc2lsZW5jaW8Kc2lsbGEKc2lcdTAzMDFtYm9sbwpzaW1pbwpzaXJlbmEKc2lzdGVtYQpzaXRpbwpzaXR1YXIKc29icmUKc29jaW8Kc29kaW8Kc29sCnNvbGFwYQpzb2xkYWRvCnNvbGVkYWQKc29cdTAzMDFsaWRvCnNvbHRhcgpzb2x1Y2lvXHUwMzAxbgpzb21icmEKc29uZGVvCnNvbmlkbwpzb25vcm8Kc29ucmlzYQpzb3BhCnNvcGxhcgpzb3BvcnRlCnNvcmRvCnNvcnByZXNhCnNvcnRlbwpzb3N0ZVx1MDMwMW4Kc29cdTAzMDF0YW5vCnN1YXZlCnN1YmlyCnN1Y2VzbwpzdWRvcgpzdWVncmEKc3VlbG8Kc3Vlblx1MDMwM28Kc3VlcnRlCnN1ZnJpcgpzdWpldG8Kc3VsdGFcdTAzMDFuCnN1bWFyCnN1cGVyYXIKc3VwbGlyCnN1cG9uZXIKc3VwcmVtbwpzdXIKc3VyY28Kc3VyZW5cdTAzMDNvCnN1cmdpcgpzdXN0bwpzdXRpbAp0YWJhY28KdGFiaXF1ZQp0YWJsYQp0YWJ1XHUwMzAxCnRhY28KdGFjdG8KdGFqbwp0YWxhcgp0YWxjbwp0YWxlbnRvCnRhbGxhCnRhbG9cdTAzMDFuCnRhbWFuXHUwMzAzbwp0YW1ib3IKdGFuZ28KdGFucXVlCnRhcGEKdGFwZXRlCnRhcGlhCnRhcG9cdTAzMDFuCnRhcXVpbGxhCnRhcmRlCnRhcmVhCnRhcmlmYQp0YXJqZXRhCnRhcm90CnRhcnJvCnRhcnRhCnRhdHVhamUKdGF1cm8KdGF6YQp0YXpvXHUwMzAxbgp0ZWF0cm8KdGVjaG8KdGVjbGEKdGVcdTAzMDFjbmljYQp0ZWphZG8KdGVqZXIKdGVqaWRvCnRlbGEKdGVsZVx1MDMwMWZvbm8KdGVtYQp0ZW1vcgp0ZW1wbG8KdGVuYXoKdGVuZGVyCnRlbmVyCnRlbmlzCnRlbnNvCnRlb3JpXHUwMzAxYQp0ZXJhcGlhCnRlcmNvCnRlXHUwMzAxcm1pbm8KdGVybnVyYQp0ZXJyb3IKdGVzaXMKdGVzb3JvCnRlc3RpZ28KdGV0ZXJhCnRleHRvCnRlegp0aWJpbwp0aWJ1cm9cdTAzMDFuCnRpZW1wbwp0aWVuZGEKdGllcnJhCnRpZXNvCnRpZ3JlCnRpamVyYQp0aWxkZQp0aW1icmUKdGlcdTAzMDFtaWRvCnRpbW8KdGludGEKdGlcdTAzMDFvCnRpXHUwMzAxcGljbwp0aXBvCnRpcmEKdGlyb1x1MDMwMW4KdGl0YVx1MDMwMW4KdGlcdTAzMDF0ZXJlCnRpXHUwMzAxdHVsbwp0aXphCnRvYWxsYQp0b2JpbGxvCnRvY2FyCnRvY2lubwp0b2RvCnRvZ2EKdG9sZG8KdG9tYXIKdG9ubwp0b250bwp0b3Bhcgp0b3BlCnRvcXVlCnRvXHUwMzAxcmF4CnRvcmVybwp0b3JtZW50YQp0b3JuZW8KdG9ybwp0b3JwZWRvCnRvcnJlCnRvcnNvCnRvcnR1Z2EKdG9zCnRvc2NvCnRvc2VyCnRvXHUwMzAxeGljbwp0cmFiYWpvCnRyYWN0b3IKdHJhZXIKdHJhXHUwMzAxZmljbwp0cmFnbwp0cmFqZQp0cmFtbwp0cmFuY2UKdHJhdG8KdHJhdW1hCnRyYXphcgp0cmVcdTAzMDFib2wKdHJlZ3VhCnRyZWludGEKdHJlbgp0cmVwYXIKdHJlcwp0cmlidQp0cmlnbwp0cmlwYQp0cmlzdGUKdHJpdW5mbwp0cm9mZW8KdHJvbXBhCnRyb25jbwp0cm9wYQp0cm90ZQp0cm96bwp0cnVjbwp0cnVlbm8KdHJ1ZmEKdHViZXJpXHUwMzAxYQp0dWJvCnR1ZXJ0bwp0dW1iYQp0dW1vcgp0dVx1MDMwMW5lbAp0dVx1MDMwMW5pY2EKdHVyYmluYQp0dXJpc21vCnR1cm5vCnR1dG9yCnViaWNhcgp1XHUwMzAxbGNlcmEKdW1icmFsCnVuaWRhZAp1bmlyCnVuaXZlcnNvCnVubwp1bnRhcgp1blx1MDMwM2EKdXJiYW5vCnVyYmUKdXJnZW50ZQp1cm5hCnVzYXIKdXN1YXJpbwp1XHUwMzAxdGlsCnV0b3BpXHUwMzAxYQp1dmEKdmFjYQp2YWNpXHUwMzAxbwp2YWN1bmEKdmFnYXIKdmFnbwp2YWluYQp2YWppbGxhCnZhbGUKdmFcdTAzMDFsaWRvCnZhbGxlCnZhbG9yCnZhXHUwMzAxbHZ1bGEKdmFtcGlybwp2YXJhCnZhcmlhcgp2YXJvXHUwMzAxbgp2YXNvCnZlY2lubwp2ZWN0b3IKdmVoaVx1MDMwMWN1bG8KdmVpbnRlCnZlamV6CnZlbGEKdmVsZXJvCnZlbG96CnZlbmEKdmVuY2VyCnZlbmRhCnZlbmVubwp2ZW5nYXIKdmVuaXIKdmVudGEKdmVudXMKdmVyCnZlcmFubwp2ZXJibwp2ZXJkZQp2ZXJlZGEKdmVyamEKdmVyc28KdmVydGVyCnZpXHUwMzAxYQp2aWFqZQp2aWJyYXIKdmljaW8KdmlcdTAzMDFjdGltYQp2aWRhCnZpXHUwMzAxZGVvCnZpZHJpbwp2aWVqbwp2aWVybmVzCnZpZ29yCnZpbAp2aWxsYQp2aW5hZ3JlCnZpbm8KdmluXHUwMzAzZWRvCnZpb2xpXHUwMzAxbgp2aXJhbAp2aXJnbwp2aXJ0dWQKdmlzb3IKdmlcdTAzMDFzcGVyYQp2aXN0YQp2aXRhbWluYQp2aXVkbwp2aXZhegp2aXZlcm8Kdml2aXIKdml2bwp2b2xjYVx1MDMwMW4Kdm9sdW1lbgp2b2x2ZXIKdm9yYXoKdm90YXIKdm90bwp2b3oKdnVlbG8KdnVsZ2FyCnlhY2VyCnlhdGUKeWVndWEKeWVtYQp5ZXJubwp5ZXNvCnlvZG8KeW9nYQp5b2d1cgp6YWZpcm8KemFuamEKemFwYXRvCnphcnphCnpvbmEKem9ycm8KenVtbwp6dXJkb2Auc3BsaXQoIlxuIik7CgogIC8vIG5vZGVfbW9kdWxlcy9Ac2N1cmUvYmlwMzkvZXNtL3dvcmRsaXN0cy90cmFkaXRpb25hbC1jaGluZXNlLmpzCiAgdmFyIHdvcmRsaXN0OSA9IGBcdTc2ODQKXHU0RTAwClx1NjYyRgpcdTU3MjgKXHU0RTBEClx1NEU4NgpcdTY3MDkKXHU1NDhDClx1NEVCQQpcdTkwMTkKXHU0RTJEClx1NTkyNwpcdTcwQkEKXHU0RTBBClx1NTAwQgpcdTU3MEIKXHU2MjExClx1NEVFNQpcdTg5ODEKXHU0RUQ2Clx1NjY0MgpcdTRGODYKXHU3NTI4Clx1NTAxMQpcdTc1MUYKXHU1MjMwClx1NEY1QwpcdTU3MzAKXHU2NUJDClx1NTFGQQpcdTVDMzEKXHU1MjA2Clx1NUMwRApcdTYyMTAKXHU2NzAzClx1NTNFRgpcdTRFM0IKXHU3NjdDClx1NUU3NApcdTUyRDUKXHU1NDBDClx1NURFNQpcdTRFNUYKXHU4MEZEClx1NEUwQgpcdTkwNEUKXHU1QjUwClx1OEFBQQpcdTc1MjIKXHU3QTJFClx1OTc2MgpcdTgwMEMKXHU2NUI5Clx1NUY4QwpcdTU5MUEKXHU1QjlBClx1ODg0QwpcdTVCNzgKXHU2Q0Q1Clx1NjI0MApcdTZDMTEKXHU1Rjk3Clx1N0Q5MwpcdTUzNDEKXHU0RTA5Clx1NEU0QgpcdTkwMzIKXHU4NDU3Clx1N0I0OQpcdTkwRTgKXHU1RUE2Clx1NUJCNgpcdTk2RkIKXHU1MjlCClx1ODhFMQpcdTU5ODIKXHU2QzM0Clx1NTMxNgpcdTlBRDgKXHU4MUVBClx1NEU4QwpcdTc0MDYKXHU4RDc3Clx1NUMwRgpcdTcyNjkKXHU3M0ZFClx1NUJFNgpcdTUyQTAKXHU5MUNGClx1OTBGRApcdTUxNjkKXHU5QUQ0Clx1NTIzNgpcdTZBNUYKXHU3NTc2Clx1NEY3RgpcdTlFREUKXHU1RjlFClx1Njk2RApcdTY3MkMKXHU1M0JCClx1NjI4QQpcdTYwMjcKXHU1OTdEClx1NjFDOQpcdTk1OEIKXHU1QjgzClx1NTQwOApcdTkwODQKXHU1NkUwClx1NzUzMQpcdTUxNzYKXHU0RTlCClx1NzEzNgpcdTUyNEQKXHU1OTE2Clx1NTkyOQpcdTY1M0YKXHU1NkRCClx1NjVFNQpcdTkwQTMKXHU3OTNFClx1N0ZBOQpcdTRFOEIKXHU1RTczClx1NUY2MgpcdTc2RjgKXHU1MTY4Clx1ODg2OApcdTk1OTMKXHU2QTIzClx1ODIwNwpcdTk1REMKXHU1NDA0Clx1OTFDRApcdTY1QjAKXHU3RERBClx1NTE2NwpcdTY1NzgKXHU2QjYzClx1NUZDMwpcdTUzQ0QKXHU0RjYwClx1NjYwRQpcdTc3MEIKXHU1MzlGClx1NTNDOApcdTlFQkMKXHU1MjI5Clx1NkJENApcdTYyMTYKXHU0RjQ2Clx1OENFQQpcdTZDMjMKXHU3QjJDClx1NTQxMQpcdTkwNTMKXHU1NDdEClx1NkI2NApcdThCOEEKXHU2ODlEClx1NTNFQQpcdTZDOTIKXHU3RDUwClx1ODlFMwpcdTU1NEYKXHU2MTBGClx1NUVGQQpcdTY3MDgKXHU1MTZDClx1NzEyMQpcdTdDRkIKXHU4RUNEClx1NUY4OApcdTYwQzUKXHU4MDA1Clx1NjcwMApcdTdBQ0IKXHU0RUUzClx1NjBGMwpcdTVERjIKXHU5MDFBClx1NEUyNgpcdTYzRDAKXHU3NkY0Clx1OTg0QwpcdTlFRTgKXHU3QTBCClx1NUM1NQpcdTRFOTQKXHU2NzlDClx1NjU5OQpcdThDNjEKXHU1NEUxClx1OTc2OQpcdTRGNEQKXHU1MTY1Clx1NUUzOApcdTY1ODcKXHU3RTNEClx1NkIyMQpcdTU0QzEKXHU1RjBGClx1NkQzQgpcdThBMkQKXHU1M0NBClx1N0JBMQpcdTcyNzkKXHU0RUY2Clx1OTU3NwpcdTZDNDIKXHU4MDAxClx1OTgyRApcdTU3RkEKXHU4Q0M3Clx1OTA4QQpcdTZENDEKXHU4REVGClx1N0QxQQpcdTVDMTEKXHU1NzE2Clx1NUM3MQpcdTdENzEKXHU2M0E1Clx1NzdFNQpcdThGMDMKXHU1QzA3Clx1N0Q0NApcdTg5OEIKXHU4QTA4Clx1NTIyNQpcdTU5NzkKXHU2MjRCClx1ODlEMgpcdTY3MUYKXHU2ODM5Clx1OEFENgpcdTkwNEIKXHU4RkIyClx1NjMwNwpcdTVFN0UKXHU0RTVEClx1NTM0MApcdTVGMzcKXHU2NTNFClx1NkM3QQpcdTg5N0YKXHU4OEFCClx1NUU3OQpcdTUwNUEKXHU1RkM1Clx1NjIzMApcdTUxNDgKXHU1NkRFClx1NTI0NwpcdTRFRkIKXHU1M0Q2Clx1NjREQQpcdTg2NTUKXHU5NjhBClx1NTM1NwpcdTdENjYKXHU4MjcyClx1NTE0OQpcdTk1ODAKXHU1MzczClx1NEZERApcdTZDQkIKXHU1MzE3Clx1OTAyMApcdTc2N0UKXHU4OThGClx1NzFCMQpcdTk4MTgKXHU0RTAzClx1NkQ3NwpcdTUzRTMKXHU2NzcxClx1NUMwRQpcdTU2NjgKXHU1OEQzClx1NUZENwpcdTRFMTYKXHU5MUQxClx1NTg5RQpcdTcyMkQKXHU2RkRGClx1OTY4RQpcdTZDQjkKXHU2MDFEClx1ODg1MwpcdTY5NzUKXHU0RUE0Clx1NTNENwpcdTgwNkYKXHU0RUMwClx1OEE4RApcdTUxNkQKXHU1MTcxClx1NkIwQQpcdTY1MzYKXHU4QjQ5Clx1NjUzOQpcdTZFMDUKXHU3RjhFClx1NTE4RApcdTYzQTEKXHU4RjQ5Clx1NjZGNApcdTU1QUUKXHU5OEE4Clx1NTIwNwpcdTYyNTMKXHU3NjdEClx1NjU1OQpcdTkwMUYKXHU4MkIxClx1NUUzNgpcdTVCODkKXHU1ODM0Clx1OEVBQgpcdThFQ0EKXHU0RjhCClx1NzcxRgpcdTUyRDkKXHU1MTc3Clx1ODQyQwpcdTZCQ0YKXHU3NkVFClx1ODFGMwpcdTkwNTQKXHU4RDcwClx1N0E0RApcdTc5M0EKXHU4QjcwClx1ODA3MgpcdTU4MzEKXHU5QjI1Clx1NUI4QwpcdTk4NUUKXHU1MTZCClx1OTZFMgpcdTgzRUYKXHU1NDBEClx1NzhCQQpcdTYyNEQKXHU3OUQxClx1NUYzNQpcdTRGRTEKXHU5OUFDClx1N0JDMApcdThBNzEKXHU3QzczClx1NjU3NApcdTdBN0EKXHU1MTQzClx1NkNDMQpcdTRFQ0EKXHU5NkM2Clx1NkVBQgpcdTUwQjMKXHU1NzFGClx1OEEzMQpcdTZCNjUKXHU3RkE0Clx1NUVFMwpcdTc3RjMKXHU4QTE4Clx1OTcwMApcdTZCQjUKXHU3ODE0Clx1NzU0QwpcdTYyQzkKXHU2Nzk3Clx1NUY4QgpcdTUzRUIKXHU0RTE0Clx1N0E3NgpcdTg5QzAKXHU4RDhBClx1N0U1NApcdTg4REQKXHU1RjcxClx1N0I5NwpcdTRGNEUKXHU2MzAxClx1OTdGMwpcdTc3M0UKXHU2NkY4Clx1NUUwMwpcdTU5MEQKXHU1QkI5Clx1NTE1MgpcdTk4MDgKXHU5NjlCClx1NTU0NgpcdTk3NUUKXHU5QTU3Clx1OTAyMwpcdTY1QjcKXHU2REYxClx1OTZFMwpcdThGRDEKXHU3OTI2Clx1NTM0MwpcdTkwMzEKXHU1OUQ0Clx1N0QyMApcdTYyODAKXHU1MDk5Clx1NTM0QQpcdThGQTYKXHU5NzUyClx1NzcwMQpcdTUyMTcKXHU3RkQyClx1OTdGRgpcdTdEMDQKXHU2NTJGClx1ODIyQwpcdTUzRjIKXHU2MTFGClx1NTJERQpcdTRGQkYKXHU1NzE4Clx1NUY4MApcdTkxNzgKXHU2Qjc3Clx1NUUwMgpcdTUxNEIKXHU0RjU1Clx1OTY2NApcdTZEODgKXHU2OUNCClx1NUU5QwpcdTdBMzEKXHU1OTJBClx1NkU5NgpcdTdDQkUKXHU1MDNDClx1ODY1RgpcdTczODcKXHU2NUNGClx1N0RBRApcdTUyODMKXHU5MDc4Clx1NkExOQpcdTVCRUIKXHU1QjU4Clx1NTAxOQpcdTZCREIKXHU4OUFBClx1NUZFQgpcdTY1NDgKXHU2NUFGClx1OTY2MgpcdTY3RTUKXHU2QzVGClx1NTc4QgpcdTc3M0MKXHU3MzhCClx1NjMwOQpcdTY4M0MKXHU5OTBBClx1NjYxMwpcdTdGNkUKXHU2RDNFClx1NUM2NApcdTcyNDcKXHU1OUNCClx1NTM3QgpcdTVDMDgKXHU3MkMwClx1ODBCMgpcdTVFRTAKXHU0RUFDClx1OEI1OApcdTkwNjkKXHU1QzZDClx1NTcxMwpcdTUzMDUKXHU3MDZCClx1NEY0RgpcdThBQkYKXHU2RUZGClx1N0UyMwpcdTVDNDAKXHU3MTY3Clx1NTNDMwpcdTdEMDUKXHU3RDMwClx1NUYxNQpcdTgwN0QKXHU4QTcyClx1OTQzNQpcdTUwRjkKXHU1NkI0Clx1OTk5NgpcdTVFOTUKXHU2REIyClx1NUI5OApcdTVGQjcKXHU5NkE4Clx1NzVDNQpcdTg2MDcKXHU1OTMxClx1NzIzRQpcdTZCN0IKXHU4QjFCClx1OTE0RApcdTU5NzMKXHU5RUMzClx1NjNBOApcdTk4NkYKXHU4QUM3Clx1N0Y2QQpcdTc5NUUKXHU4NUREClx1NTQ2MgpcdTVFMkQKXHU1NDJCClx1NEYwMQpcdTY3MUIKXHU1QkM2Clx1NjI3OQpcdTcxREYKXHU5ODA1Clx1OTYzMgpcdTgyMDkKXHU3NDAzClx1ODJGMQpcdTZDMjcKXHU1MkUyClx1NTQ0QQpcdTY3NEUKXHU1M0YwClx1ODQzRApcdTY3MjgKXHU1RTZCClx1OEYyQQpcdTc4MzQKXHU0RTlFClx1NUUyQgpcdTU3MEQKXHU2Q0U4Clx1OTA2MApcdTVCNTcKXHU2NzUwClx1NjM5MgpcdTRGOUIKXHU2Q0IzClx1NjE0QgpcdTVDMDEKXHU1M0U2Clx1NjVCRApcdTZFMUIKXHU2QTM5Clx1NkVCNgpcdTYwMEUKXHU2QjYyClx1Njg0OApcdThBMDAKXHU1OEVCClx1NTc0NwpcdTZCNjYKXHU1NkZBClx1ODQ0OQpcdTlCNUEKXHU2Q0UyClx1ODk5NgpcdTUwQzUKXHU4Q0JCClx1N0RDQQpcdTYxMUIKXHU1REU2Clx1N0FFMApcdTY1RTkKXHU2NzFEClx1NUJCMwpcdTdFOEMKXHU4RjE1Clx1NjcwRApcdThBNjYKXHU5OERGClx1NTE0NQpcdTUxNzUKXHU2RTkwClx1NTIyNApcdThCNzcKXHU1M0Y4Clx1OERCMwpcdTY3RDAKXHU3REY0Clx1NURFRQpcdTgxRjQKXHU2NzdGClx1NzUzMApcdTk2NEQKXHU5RUQxClx1NzJBRgpcdThDQTAKXHU2NENBClx1ODMwMwpcdTdFN0MKXHU4MjA4Clx1NEYzQwpcdTk5MTgKXHU1ODA1Clx1NjZGMgpcdThGMzgKXHU0RkVFClx1NjU0NQpcdTU3Q0UKXHU1OTJCClx1NTkyMApcdTkwMDEKXHU3QjQ2Clx1ODIzOQpcdTRGNTQKXHU1M0YzClx1OENBMQpcdTU0MDMKXHU1QkNDClx1NjYyNQpcdTgwNzcKXHU4OUJBClx1NkYyMgpcdTc1NkIKXHU1MjlGClx1NURGNApcdThEREYKXHU5NkQ2Clx1OTZEQwpcdTk4REIKXHU2QUEyClx1NTQzOApcdTUyQTkKXHU2NjA3Clx1OTY3RApcdTRFOTIKXHU1MjFEClx1NTI3NQpcdTYyOTcKXHU4MDAzClx1NjI5NQpcdTU4REUKXHU3QjU2Clx1NTNFNApcdTVGOTEKXHU2M0RCClx1NjcyQQpcdThERDEKXHU3NTU5Clx1OTJGQwpcdTY2RkUKXHU3QUVGClx1OENBQwpcdTdBRDkKXHU3QzIxClx1OEZGMApcdTkzMjIKXHU1MjZGClx1NzZFMQpcdTVFMUQKXHU1QzA0Clx1ODM0OQpcdTg4NUQKXHU2MjdGClx1NzM2OApcdTRFRTQKXHU5NjUwClx1OTYzRgpcdTVCQTMKXHU3NEIwClx1OTZEOQpcdThBQ0IKXHU4RDg1Clx1NUZBRQpcdThCOTMKXHU2M0E3Clx1NURERQpcdTgyNkYKXHU4RUY4Clx1NjI3RQpcdTU0MjYKXHU3RDAwClx1NzZDQQpcdTRGOUQKXHU1MTJBClx1OTgwMgpcdTc5MEUKXHU4RjA5Clx1NTAxMgpcdTYyM0YKXHU3QTgxClx1NTc1MApcdTdDODkKXHU2NTc1Clx1NzU2NQpcdTVCQTIKXHU4ODgxClx1NTFCNwpcdTUyREQKXHU3RDU1Clx1Njc5MApcdTU4NEEKXHU1MjkxClx1NkUyQwpcdTdENzIKXHU1MzU0Clx1OEEzNApcdTVGRjUKXHU5NjczClx1NEVDRApcdTdGODUKXHU5RTdEClx1NTNDQgpcdTZEMEIKXHU5MzJGClx1ODJFNgpcdTU5MUMKXHU1MjExClx1NzlGQgpcdTk4M0IKXHU5MDEwClx1OTc2MApcdTZERjcKXHU2QkNEClx1NzdFRApcdTc2QUUKXHU3RDQyClx1ODA1QQpcdTZDN0QKXHU2NzUxClx1OTZGMgpcdTU0RUEKXHU2NUUyClx1OERERApcdTg4NUIKXHU1MDVDClx1NzBDOApcdTU5MkUKXHU1QkRGClx1NzFEMgpcdThGQzUKXHU1ODgzClx1ODJFNQpcdTUzNzAKXHU2RDMyClx1NTIzQgpcdTYyRUMKXHU2RkMwClx1NUI1NApcdTY0MUUKXHU3NTFBClx1NUJBNApcdTVGODUKXHU2ODM4Clx1NjgyMQpcdTY1NjMKXHU0RkI1Clx1NTQyNwpcdTc1MzIKXHU5MDRBClx1NEU0NQpcdTgzREMKXHU1NDczClx1ODIwQQpcdTZBMjEKXHU2RTU2Clx1OENBOApcdTY0MEQKXHU5ODEwClx1OTYzQgpcdTZCRUIKXHU2NjZFClx1N0E2OQpcdTRFNTkKXHU1QUJEClx1NjkwRApcdTYwNkYKXHU2NEY0Clx1OTI4MApcdThBOUUKXHU2M0VFClx1OTE1MgpcdTVCODgKXHU2MkZGClx1NUU4RgpcdTdEMTkKXHU5MUFCClx1N0YzQQpcdTk2RTgKXHU1NUNFClx1OTFERApcdTUyODkKXHU1NTRBClx1NjAyNQpcdTU1MzEKXHU4QUE0Clx1OEExMwpcdTk4NTgKXHU1QkU5Clx1OTY0NApcdTczNzIKXHU4MzM2Clx1OUJBRQpcdTdDRTcKXHU2NUE0Clx1NUI2OQpcdTgxMkIKXHU3ODZCClx1ODBBNQpcdTU1ODQKXHU5RjhEClx1NkYxNApcdTcyMzYKXHU2RjM4Clx1ODg0MApcdTZCNjEKXHU2OEIwClx1NjM4QwpcdTZCNEMKXHU2Qzk5Clx1NTI1QgpcdTY1M0IKXHU4QjAyClx1NzZGRQpcdThBMEUKXHU2NjVBClx1N0M5MgpcdTRFODIKXHU3MUMzClx1NzdEQgpcdTRFNEUKXHU2QkJBClx1ODVFNQpcdTVCRTcKXHU5QjZGClx1OENCNApcdTk0MTgKXHU3MTY0Clx1OEI4MApcdTczRUQKXHU0RjJGClx1OTk5OQpcdTRFQ0IKXHU4RkVCClx1NTNFNQpcdThDNTAKXHU1N0Y5Clx1NjNFMQpcdTg2MkQKXHU2NEQ0Clx1NUYyNgpcdTg2Q0IKXHU2Qzg5Clx1NTA0NwpcdTdBN0YKXHU1N0Y3Clx1N0I1NApcdTZBMDIKXHU4QUIwClx1OTgwNgpcdTcxNTkKXHU3RTJFClx1NUZCNQpcdTgxQzkKXHU1NTlDClx1Njc3RQpcdTgxNzMKXHU1NkYwClx1NzU3MApcdTUxNEQKXHU4MENDClx1NjYxRgpcdTc5OEYKXHU4Q0I3Clx1NjdEMwpcdTRFOTUKXHU2OTgyClx1NjE2MgpcdTYwMTUKXHU3OEMxClx1NTAwRApcdTc5NTYKXHU3Njg3Clx1NEZDMwpcdTk3NUMKXHU4OERDClx1OEE1NQpcdTdGRkIKXHU4MDg5Clx1OEUxMApcdTVDM0MKXHU4ODYzClx1NUJFQwpcdTYzREEKXHU2OEM5Clx1NUUwQwpcdTUwQjcKXHU2NENEClx1NTc4MgpcdTc5Q0IKXHU1QjlDClx1NkMyQgpcdTU5NTcKXHU3NzYzClx1NjMyRgpcdTY3QjYKXHU0RUFFClx1NjcyQgpcdTYxQjIKXHU2MTc2Clx1N0RFOApcdTcyNUIKXHU4OUY4Clx1NjYyMApcdTk2RjcKXHU5MkI3Clx1OEE2OQpcdTVFQTcKXHU1QzQ1Clx1NjI5MwpcdTg4QzIKXHU4MERFClx1NTQ3QwpcdTVBMTgKXHU2NjZGClx1NUEwMQpcdTdEQTAKXHU2Njc2Clx1NTM5QQpcdTc2REYKXHU4ODYxClx1OTZERQpcdTVCNkIKXHU1RUY2Clx1NTM3MQpcdTgxQTAKXHU1QzRCClx1OTEwOQpcdTgxRTgKXHU5Njc4Clx1OTg2NwpcdTYzODkKXHU1NDQwClx1NzFDOApcdTZCNzIKXHU2M0FBClx1Njc1RgpcdTgwMTAKXHU1Mjg3Clx1NzM4OQpcdThEOTkKXHU4REYzClx1NTRFNQpcdTVCNjMKXHU4QUIyClx1NTFGMQpcdTgwRTEKXHU5ODREClx1NkIzRQpcdTdEMzkKXHU1Mzc3Clx1OUY0QQpcdTUwNDkKXHU4NEI4Clx1NkI5NgpcdTZDMzgKXHU1Qjk3Clx1ODJENwpcdTVEREQKXHU3MjEwClx1NUNBOQpcdTVGMzEKXHU5NkY2Clx1Njk0QQpcdTU5NEYKXHU2Q0JGClx1OTczMgpcdTY4N0YKXHU2M0EyClx1NkVEMQpcdTkzQUUKXHU5OEVGClx1NkZDMwpcdTgyMkEKXHU2MUY3Clx1OEQ5NQpcdTVFQUIKXHU1OTZBClx1NEYwQQpcdTk3NDgKXHU3QTA1Clx1OTAxNApcdTZFQzUKXHU4Q0ZEClx1NkI3OApcdTUzRUMKXHU5RjEzClx1NjRBRApcdTc2RTQKXHU4OEMxClx1OTZBQQpcdTVFQjcKXHU1NTJGClx1OTMwNApcdTgzQ0MKXHU3RDE0Clx1NTAxRgpcdTdDRDYKXHU4NENCClx1NkE2QgpcdTdCMjYKXHU3OUMxClx1NTJBQQpcdTU4MDIKXHU1N0RGClx1NjlDRApcdTZGNjQKXHU1RTQ1Clx1NTRDOApcdTdBREYKXHU3MTlGClx1ODdGMgpcdTZGQTQKXHU4MTY2Clx1NThFNApcdTc4QjMKXHU2QjUwClx1OTA0RApcdTUwNzQKXHU1QkU4Clx1NjU2MgpcdTVGQjkKXHU2MTZFClx1NjU5QwpcdTg1ODQKXHU1RUFEClx1N0QwRApcdTVGNDgKXHU5OEZDClx1NEYzOApcdTYyOTgKXHU5RUE1Clx1NkZENQpcdTY2OTcKXHU4Mzc3Clx1NzRFNgpcdTU4NUUKXHU1RThBClx1N0JDOQpcdTYwRTEKXHU2MjM2Clx1OEEyQQpcdTU4NTQKXHU1OTQ3Clx1OTAwRgpcdTY4ODEKXHU1MjAwClx1NjVDQgpcdThERTEKXHU1MzYxClx1NkMyRgpcdTkwNDcKXHU0RUZEClx1NkJEMgpcdTZDRTUKXHU5MDAwClx1NkQxNwpcdTY0RkEKXHU3MDcwClx1NUY2OQpcdThDRTMKXHU4MDE3Clx1NTkwRgpcdTY0QzcKXHU1RkQ5Clx1OTI4NQpcdTczN0IKXHU3ODZDClx1NEU4OApcdTdFNDEKXHU1NzA4Clx1OTZFQQpcdTUxRkQKXHU0RUE2Clx1NjJCRApcdTdCQzcKXHU5NjYzClx1OTY3MApcdTRFMDEKXHU1QzNBClx1OEZGRApcdTU4MDYKXHU5NkM0Clx1OEZDRQpcdTZDREIKXHU3MjM4Clx1NkExMwpcdTkwN0YKXHU4QjAwClx1NTY3OApcdTkxQ0UKXHU4QzZDClx1NjVENwpcdTdEMkYKXHU1MDRGClx1NTE3OApcdTk5MjgKXHU3RDIyClx1NzlFNgpcdTgxMDIKXHU2RjZFClx1NzIzQQpcdThDNDYKXHU1RkZEClx1NjI1OApcdTlBNUEKXHU1ODUxClx1OTA3QQpcdTYxMDgKXHU2NzMxClx1NjZGRgpcdTdFOTYKXHU3Qzk3Clx1NTBCRQpcdTVDMUEKXHU3NURCClx1Njk1QQpcdThCMUQKXHU1OTZFClx1OENGQwpcdTc4RTgKXHU1NDFCClx1NkM2MApcdTY1QzEKXHU3ODhFClx1OUFBOApcdTc2RTMKXHU2MzU1Clx1NUYxRgpcdTY2QjQKXHU1MjcyClx1OENBQgpcdTZCOEEKXHU5MUNCClx1OEE1RQpcdTRFQTEKXHU1OEMxClx1OTgxMwpcdTVCRjYKXHU1MzQ4Clx1NTg3NQpcdTgwNUUKXHU2M0VEClx1NzBBRQpcdTZCOTgKXHU1MUFDClx1NkE0QgpcdTVBNjYKXHU4QjY2Clx1N0Q5QwpcdTYyREIKXHU1NDMzClx1NEVEOApcdTZENkUKXHU5MDZEClx1NUY5MApcdTYwQTgKXHU2NDE2Clx1OEMzNwpcdThEMEEKXHU3QkIxClx1OTY5NApcdThBMDIKXHU3NTM3Clx1NTQzOQpcdTU3MTIKXHU3RDFCClx1NTUxMApcdTY1NTcKXHU1QjhCClx1NzNCQgpcdTVERTgKXHU4MDE1Clx1NTc2NgpcdTY5QUUKXHU5NTg5Clx1NzA2MwpcdTkzNzUKXHU1MUUxClx1OTlEMApcdTkzNEIKXHU2NTUxClx1NjA2OQpcdTUyNUQKXHU1MUREClx1OUU3QwpcdTlGNTIKXHU2MjJBClx1NzE0OQpcdTlFQkIKXHU3RDIxClx1Nzk4MQpcdTVFRTIKXHU3NkRCClx1NzI0OApcdTdERTkKXHU2REU4Clx1Nzc1QgpcdTY2MEMKXHU1QTVBClx1NkQ4OQpcdTdCNTIKXHU1NjM0Clx1NjNEMgpcdTVDQjgKXHU2NzE3Clx1ODM4QQpcdTg4NTcKXHU4NUNGClx1NTlEMQpcdThDQkYKXHU4MTUwClx1NTk3NApcdTU1NjYKXHU2MTYzClx1NEU1OApcdTU5MjUKXHU2MDYyClx1NTJGQgpcdTdEMTcKXHU2MjRFClx1OEZBRgpcdTgwMzMKXHU1RjZBClx1ODFFMwpcdTUxMDQKXHU3NDgzClx1NjJCNQpcdTgxMDgKXHU3OUMwClx1ODVBOQpcdTRGQzQKXHU3REIyClx1ODIxRQpcdTVFOTcKXHU1Njc0Clx1N0UzMQpcdTVCRjgKXHU2QzU3Clx1NjM5QgpcdTZEMkEKXHU4Q0MwClx1OTU4MwpcdTY3RUMKXHU3MjA2Clx1NzBFRgpcdTZEMjUKXHU3QTNCClx1NzI0NgpcdThFREYKXHU1MkM3Clx1NTBDRgpcdTZFRkUKXHU1Mzk4Clx1ODQ5OQpcdTgyQjMKXHU4MEFGClx1NTc2MQpcdTY3RjEKXHU3NkVBClx1ODE3RgpcdTUxMDAKXHU2NUM1Clx1NUMzRQpcdThFQ0IKXHU1MUIwClx1OENBMgpcdTc2N0IKXHU5RUNFClx1NTI0QQpcdTk0N0QKXHU1MkQyClx1OTAwMwpcdTk2OUMKXHU2QzI4Clx1OTBFRApcdTVDRjAKXHU1RTYzClx1NkUyRgpcdTRGMEYKXHU4RUNDClx1NzU1RApcdTc1NjIKXHU2NEU2Clx1ODNBQgpcdTUyM0EKXHU2RDZBClx1NzlEOApcdTYzRjQKXHU2ODJBClx1NTA2NQpcdTU1MkUKXHU4MEExClx1NUNGNgpcdTc1MTgKXHU2Q0UxClx1Nzc2MQpcdTdBRTUKXHU5NDQ0Clx1NkU2RgpcdTk1QTUKXHU0RjExClx1NTMyRgpcdTgyMEQKXHU3MjY3Clx1N0U1RQpcdTcwQjgKXHU1NEYyClx1NzhGNwpcdTdFM0UKXHU2NzBCClx1NkRFMQpcdTVDMTYKXHU1NTVGClx1OTY3NwpcdTY3RjQKXHU1NDQ4Clx1NUY5MgpcdTk4NEYKXHU2RERBClx1N0EwRApcdTVGRDgKXHU2Q0Y1Clx1ODVDRApcdTYyRDYKXHU2RDFFClx1NjM4OApcdTkzRTEKXHU4RjlCClx1NThFRgpcdTkyRDIKXHU4Q0E3Clx1ODY1QgpcdTVGNEUKXHU2NDY5Clx1NkNGMApcdTVFN0MKXHU1RUY3Clx1NUMwQQpcdTdBOTcKXHU3REIxClx1NUYwNApcdTk2QjgKXHU3NTkxClx1NkMwRgpcdTVCQUUKXHU1OUQwClx1OTcwNwpcdTc0NUUKXHU2MDJBClx1NUMyNApcdTc0MzQKXHU1RkFBClx1NjNDRgpcdTgxOUMKXHU5MDU1Clx1NTkzRQpcdTgxNzAKXHU3REUzClx1NzNFMApcdTdBQUUKXHU2OEVFClx1Njc5RApcdTdBRjkKXHU2RTlEClx1NTBBQwpcdTdFNjkKXHU2MUI2Clx1OTBBNgpcdTUyNjkKXHU1RTc4Clx1NkYzRgpcdTZCMDQKXHU2NEMxClx1NzI1OQpcdThDQUYKXHU3OUFFClx1NkZGRQpcdTkyMDkKXHU3RDBCClx1N0Y3NwpcdTYyQ0QKXHU1NEIxClx1NTU4QQpcdTg4OTYKXHU1N0MzClx1NTJFNApcdTdGNzAKXHU3MTI2Clx1NkY1QgpcdTRGMEQKXHU1OEE4Clx1NkIzMgpcdTdFMkIKXHU1OUQzClx1NTIwQQpcdTk4RkQKXHU0RUZGClx1NzM0RQpcdTkyQzEKXHU5QjNDClx1OUU5NwpcdThERTgKXHU5RUQ4Clx1NjMxNgpcdTkzQzgKXHU2MzgzClx1NTU5RApcdTg4OEIKXHU3MEFEClx1NkM2MQpcdTVFNTUKXHU4QUY4Clx1NUYyNwpcdTUyRjUKXHU2ODg1Clx1NTk3NgpcdTZGNTQKXHU3MDdEClx1ODIxRgpcdTk0NTEKXHU4MkVGClx1OEExRgpcdTYyQjEKXHU2QkMwClx1NjFDMgpcdTVCRDIKXHU2NjdBClx1NTdENApcdTVCQzQKXHU1QzQ2Clx1OEU4RApcdTZFMjEKXHU2MzExClx1NEUzOQpcdTgyNzEKXHU4QzlEClx1NzhCMApcdTYyRDQKXHU3MjM5Clx1NjIzNApcdTc4QkMKXHU1OTIyClx1ODJCRApcdTcxOTQKXHU4RDY0Clx1NkYwMQpcdTU0RUQKXHU2NTZDClx1OTg0NgpcdTU5NTQKXHU5MjVCClx1NEVGMgpcdTg2NEUKXHU3QTAwClx1NTlCOQpcdTRFNEYKXHU3M0NEClx1NzUzMwpcdTY4NEMKXHU5MDc1Clx1NTE0MQpcdTk2ODYKXHU4N0JBClx1NTAwOQpcdTlCNEYKXHU5MkIzClx1NjZDOQpcdTZDMkUKXHU1MTdDClx1OTZCMQpcdTc5MTkKXHU4RDZCClx1NjRBNQpcdTVGRTAKXHU4MDg1Clx1N0YzOApcdTcyN0QKXHU2NDM2Clx1NTM1QQpcdTVERTcKXHU2QkJDClx1NTE0NApcdTY3NUMKXHU4QTBBClx1OEFBMApcdTc4QTcKXHU3OTY1Clx1NjdFRgpcdTk4MDEKXHU1REUxClx1NzdFOQpcdTYwQjIKXHU3MDRDClx1OUY2MQpcdTUwMkIKXHU3OTY4Clx1NUMwQgpcdTY4NDIKXHU5MkVBClx1ODA1NgpcdTYwNTAKXHU2MDcwClx1OTEyRApcdThEQTMKXHU2MkFDClx1ODM1MgpcdTlBMzAKXHU4Q0JDClx1NjdENApcdTZFRjQKXHU3MzFCClx1OTVDQQpcdThGMUIKXHU1OUJCClx1NTg2QgpcdTY0QTQKXHU1MTMyClx1N0MzRApcdTlCMjcKXHU2NEZFClx1N0QyQgpcdTc4MDIKXHU5MDVFClx1NjIzMgpcdTU0MEEKXHU5Njc2Clx1NEYxMApcdTk5MzUKXHU3NjQyClx1NzRGNgpcdTVBNDYKXHU2NEFCClx1ODFDMgpcdTY0NzgKXHU1RkNEClx1ODc2NgpcdTg4MUYKXHU5MTMwClx1ODBGOApcdTk3OEYKXHU2NEUwClx1NTA3NgpcdTY4QzQKXHU2OUZEClx1NTJDMQpcdTRFNzMKXHU5MTI3Clx1NTQwOQpcdTRFQzEKXHU3MjFCClx1NzhEQQpcdTc5REYKXHU3MENGClx1ODI2NgpcdTRGMzQKXHU3NERDClx1NkRGQQpcdTRFMTkKXHU2NkFCClx1NzFFNQpcdTZBNjEKXHU2N0YzClx1OEZGNwpcdTY2OTYKXHU3MjRDClx1NzlFNwpcdTgxQkQKXHU4QTczClx1N0MyNwpcdThFMEYKXHU3NEY3Clx1OEI1QwpcdTU0NDYKXHU4Q0QzClx1N0NDQQpcdTZEMUIKXHU4RjFEClx1NjFBNApcdTdBRjYKXHU5Njk5Clx1NjAxMgpcdTdDOTgKXHU0RTQzClx1N0REMgpcdTgwQTkKXHU3QzREClx1NjU0RgpcdTU4NTcKXHU3MTk5Clx1NzY4NgpcdTUwNzUKXHU2MUY4Clx1NjM5OApcdTRFQUIKXHU3Q0ZFClx1OTE5MgpcdTcyQzIKXHU5Mzk2Clx1NkRDMApcdTYwNjgKXHU3MjcyClx1OTczOApcdTcyMkMKXHU4Q0RFClx1OTAwNgpcdTczQTkKXHU5Njc1Clx1Nzk1RApcdTc5RDIKXHU2RDU5Clx1OEM4QwpcdTVGNzkKXHU1RjdDClx1NjA4OQpcdTlEMjgKXHU4REE4Clx1OUNGMwpcdTY2NjgKXHU3NTVDClx1OEYyOQpcdTc5RTkKXHU1Mzc1Clx1N0Y3MgpcdTY4QUYKXHU3MDhFClx1NzA1OApcdTY4Q0IKXHU5QTQ1Clx1N0JFOQpcdTVDRkQKXHU1MTkyClx1NTU2NQpcdTU4RkQKXHU4QjZGClx1NkQ3OApcdTZDQzkKXHU1RTNEClx1OTA3MgpcdTc3RkQKXHU3NTg2Clx1OENCOApcdTZGMEYKXHU3QTNGClx1NTFBMApcdTVBRTkKXHU4MTA1Clx1ODJBRgpcdTcyNjIKXHU1M0RCClx1ODc1NQpcdTU5NjcKXHU5Q0Y0Clx1NURCQQpcdTdGOEEKXHU2MTkxClx1NEUzMgpcdTU4NTgKXHU3RTZBClx1OTE3NQpcdTg3OEQKXHU3NkM2Clx1OTMyQgpcdTVFREYKXHU3QzRDClx1NTFDRApcdThGMTQKXHU2NTFEClx1ODk3MgpcdTdCNEIKXHU2MkQyClx1NTBEQQpcdTY1RjEKXHU5MjQwClx1OUNFNQpcdTZGMDYKXHU2Qzg4Clx1NzcwOQpcdTc1OEYKXHU2REZCClx1NjhEMgpcdTdBNTcKXHU3ODVEClx1OTdEMwpcdTkwM0MKXHU2MjZEClx1NTBEMQpcdTZEQkMKXHU2MzNBClx1Nzg5NwpcdTY4M0QKXHU3MDkyClx1Njc2RgpcdTYwQTMKXHU5OTNFClx1NTJGOApcdThDNkEKXHU5MDdDClx1NTJDMwpcdTlEM0IKXHU2NUU2Clx1NTQwRgpcdTYyREMKXHU3MkQ3Clx1NTdDQgpcdThGMjUKXHU2M0E5Clx1OThGMgpcdTY0MkMKXHU3Rjc1Clx1OEZBRApcdTUyRkUKXHU2MjYzClx1NEYzMApcdTg1MjMKXHU3RDY4Clx1OTcyNwpcdTRFMDgKXHU2NzM1Clx1NTlDNgpcdTY0RUMKXHU1Qjg3Clx1OEYyRgpcdTk2NUQKXHU5NkQ1Clx1NTExRgpcdTg0QzQKXHU1RDA3Clx1NTI2QQpcdTUwMjEKXHU1RUYzClx1NTRBQwpcdTk5REIKXHU4NUFGClx1NTIzNwpcdTY1QTUKXHU3NTZBClx1OENFNgpcdTU5NDkKXHU0RjVCClx1NkY4NgpcdTZGMkIKXHU2NkZDClx1NjI0NwpcdTkyMjMKXHU2ODQzClx1NjI3NgpcdTRFRDQKXHU4RkQ0Clx1NEZENwpcdTg2NjcKXHU4MTU0Clx1OTc4QgpcdTY4RjEKXHU4OTg2Clx1Njg0NgpcdTYwODQKXHU1M0Q0Clx1NjQ5RQpcdTlBMTkKXHU1MkQ4Clx1NjVGQQpcdTZDQjgKXHU1QjY0Clx1NTQxMApcdTVCNUYKXHU2RTIwClx1NUM0OApcdTc1QkUKXHU1OTk5Clx1NjBEQwpcdTRFRjAKXHU3MkUwClx1ODEzOQpcdThBRTcKXHU2MkNCClx1OUVGNApcdTY4NTEKXHU1RDE3Clx1NTYxQgpcdTg4NzAKXHU3NkRDClx1NkVGMgpcdTgxREYKXHU4Q0Y0Clx1NkU2NwpcdTc1MUMKXHU2NkY5Clx1OTVCMQpcdTgwOEMKXHU1NEU5Clx1NTNCMgpcdTcwRjQKXHU3REVGClx1NkJDNQpcdTY2MjgKXHU1MDdEClx1NzVDNwpcdTcxNkUKXHU1NjA2Clx1OTFEOApcdTY0MkQKXHU4Mzk2Clx1N0M2MApcdTkxNzcKXHU1MDc3Clx1NUYxMwpcdTkzMTAKXHU2MDQ2Clx1NTA5MQpcdTU3NTEKXHU5RjNCClx1N0ZGQwpcdTdEQjgKXHU2NTU4Clx1NzM0NApcdTkwMkUKXHU3RjUwClx1N0Q2MQpcdTY4REEKXHU2MjkxClx1ODFBOApcdTg1MkMKXHU1QkZBClx1OUE1RgpcdTdBNDYKXHU1MUI2Clx1NjdBRgpcdTUxOEEKXHU1QzREClx1NTFGOApcdTdEMzMKXHU1NzZGClx1NzJBNwpcdTcxMzAKXHU4RjVGClx1NkIyMwpcdTY2NDkKXHU3NjI2Clx1NzlBNgpcdTkzMjAKXHU5MzI2Clx1NTVBQQpcdTY1RUMKXHU5MzVCClx1NThERgpcdTY0MUMKXHU2NEIyClx1OTA4MApcdTRFQUQKXHU5MTZGClx1OTA4MQpcdTgyMTIKXHU4MTA2Clx1OTE3NgpcdTk1OTIKXHU2MTgyClx1OTE1QQpcdTk4MTEKXHU3RkJEClx1NkYzMgpcdTUzNzgKXHU0RUQ3Clx1OTY2QQpcdTk1RTIKXHU2MUYyClx1Njc2RApcdTU5REEKXHU4MDlBClx1NjM0OQpcdTk4QzQKXHU2RjAyClx1NjYwNgpcdTZCM0EKXHU1NDNFClx1OTBDRQpcdTcwRjcKXHU2QzQxClx1NTQ3NQpcdTk4RkUKXHU4NTZEClx1OTZDNQpcdTkwRjUKXHU5MDc3Clx1NzFENQpcdTY0OTIKXHU1OUZCClx1OEQ3NApcdTVCQjQKXHU3MTY5Clx1NTBCNQpcdTVFMzMKXHU2NTkxClx1OTIzNApcdTY1RTgKXHU5MTg3Clx1ODQ2MwpcdTk5MDUKXHU5NkRCClx1NTlGRgpcdTYyQ0MKXHU1MDg1Clx1ODE3OQpcdTU5QTUKXHU2M0M5Clx1OENFMgpcdTYyQzYKXHU2QjZBClx1ODQ2MQpcdTgwRkEKXHU0RTFGClx1NkQ2OQpcdTVGQkQKXHU2NjAyClx1NTg4QQpcdTY0Q0IKXHU4OUJEClx1OENBQQpcdTYxNzAKXHU3RTczClx1NkM2QQpcdTYxNEMKXHU5OUFFClx1OEFGRQpcdTU5REMKXHU4QUJDClx1NTE0NwpcdTUyQTMKXHU4QUEzClx1ODAwMApcdTY2MEYKXHU4RUJBClx1NzZDOApcdTlBMEUKXHU1NUFDClx1NkVBQQpcdTUzRTIKXHU3NkU3Clx1NjJCOQpcdTYwQjYKXHU4QUVFClx1NTIyRQpcdTk5RDUKXHU3RTlDClx1NjA5RgpcdTY0NTgKXHU5MjdBClx1NjRGMgpcdTk4MTcKXHU1RTdCClx1NjdDNApcdTYwRTAKXHU2MTU4Clx1NEY3MwpcdTRFQzcKXHU4MUQ4Clx1N0FBOQpcdTZFQ0MKXHU1MjhEClx1NzdBNwpcdTU4MjEKXHU2RjUxClx1ODUyNQpcdTdGNjkKXHU5NzBEClx1NjQ4OApcdTgwQ0UKXHU4NEJDClx1NkZGMQpcdTUwMDYKXHU2MzQ1Clx1NkU1OApcdTc4MEQKXHU5NzFFClx1OTBCNQpcdTg0MDQKXHU3NjBCClx1NkRFRQpcdTkwNDIKXHU3MThBClx1N0NERQpcdTcwRDgKXHU1QkJGClx1NkE5NApcdTYyMDgKXHU5OUMxClx1NUFDMgpcdTg4RDUKXHU1Rjk5Clx1N0JBRApcdTYzNTAKXHU4MTc4Clx1NjQ5MApcdTY2RUMKXHU4RkE4Clx1NkJCRgpcdTg0RUUKXHU2NTI0Clx1NjUyQQpcdTkxQUMKXHU1QzRGClx1NzVBQgpcdTU0QzAKXHU4NTIxClx1NTgzNQpcdTZDQUIKXHU3NkJBClx1NjZBMgpcdTc1OEEKXHU5NUEzClx1ODQwQQpcdTY1NzIKXHU4RjQ0Clx1OTI2NApcdTc1RDUKXHU1OEU5Clx1NURGNwpcdTk5MTMKXHU3OThEClx1NEUxOApcdTczODQKXHU2RTlDClx1NjZGMApcdTkwOEYKXHU1RjZEClx1NTYxNwpcdTUzN0YKXHU1OUE4Clx1ODI0NwpcdTU0MUUKXHU5N0NCClx1NjAyOApcdTc3RUUKXHU2QjQ3YC5zcGxpdCgiXG4iKTsKCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy9wcml2YXRlS2V5VG9BY2NvdW50LmpzCiAgaW5pdF9zZWNwMjU2azEoKTsKICBpbml0X3RvSGV4KCk7CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvdG9BY2NvdW50LmpzCiAgaW5pdF9hZGRyZXNzKCk7CiAgaW5pdF9pc0FkZHJlc3MoKTsKICBmdW5jdGlvbiB0b0FjY291bnQoc291cmNlKSB7CiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gInN0cmluZyIpIHsKICAgICAgaWYgKCFpc0FkZHJlc3Moc291cmNlLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoeyBhZGRyZXNzOiBzb3VyY2UgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgYWRkcmVzczogc291cmNlLAogICAgICAgIHR5cGU6ICJqc29uLXJwYyIKICAgICAgfTsKICAgIH0KICAgIGlmICghaXNBZGRyZXNzKHNvdXJjZS5hZGRyZXNzLCB7IHN0cmljdDogZmFsc2UgfSkpCiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKHsgYWRkcmVzczogc291cmNlLmFkZHJlc3MgfSk7CiAgICByZXR1cm4gewogICAgICBhZGRyZXNzOiBzb3VyY2UuYWRkcmVzcywKICAgICAgbm9uY2VNYW5hZ2VyOiBzb3VyY2Uubm9uY2VNYW5hZ2VyLAogICAgICBzaWduOiBzb3VyY2Uuc2lnbiwKICAgICAgZXhwZXJpbWVudGFsX3NpZ25BdXRob3JpemF0aW9uOiBzb3VyY2UuZXhwZXJpbWVudGFsX3NpZ25BdXRob3JpemF0aW9uLAogICAgICBzaWduTWVzc2FnZTogc291cmNlLnNpZ25NZXNzYWdlLAogICAgICBzaWduVHJhbnNhY3Rpb246IHNvdXJjZS5zaWduVHJhbnNhY3Rpb24sCiAgICAgIHNpZ25UeXBlZERhdGE6IHNvdXJjZS5zaWduVHlwZWREYXRhLAogICAgICBzb3VyY2U6ICJjdXN0b20iLAogICAgICB0eXBlOiAibG9jYWwiCiAgICB9OwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9zaWduLmpzCiAgaW5pdF9zZWNwMjU2azEoKTsKICBpbml0X3RvSGV4KCk7CiAgYXN5bmMgZnVuY3Rpb24gc2lnbih7IGhhc2g6IGhhc2gzLCBwcml2YXRlS2V5LCB0byA9ICJvYmplY3QiIH0pIHsKICAgIGNvbnN0IHsgciwgcywgcmVjb3ZlcnkgfSA9IHNlY3AyNTZrMS5zaWduKGhhc2gzLnNsaWNlKDIpLCBwcml2YXRlS2V5LnNsaWNlKDIpKTsKICAgIGNvbnN0IHNpZ25hdHVyZSA9IHsKICAgICAgcjogbnVtYmVyVG9IZXgociwgeyBzaXplOiAzMiB9KSwKICAgICAgczogbnVtYmVyVG9IZXgocywgeyBzaXplOiAzMiB9KSwKICAgICAgdjogcmVjb3ZlcnkgPyAyOG4gOiAyN24sCiAgICAgIHlQYXJpdHk6IHJlY292ZXJ5CiAgICB9OwogICAgcmV0dXJuICgoKSA9PiB7CiAgICAgIGlmICh0byA9PT0gImJ5dGVzIiB8fCB0byA9PT0gImhleCIpCiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVNpZ25hdHVyZSh7IC4uLnNpZ25hdHVyZSwgdG8gfSk7CiAgICAgIHJldHVybiBzaWduYXR1cmU7CiAgICB9KSgpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9zaWduQXV0aG9yaXphdGlvbi5qcwogIGFzeW5jIGZ1bmN0aW9uIGV4cGVyaW1lbnRhbF9zaWduQXV0aG9yaXphdGlvbihwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCB7IGNvbnRyYWN0QWRkcmVzcywgY2hhaW5JZCwgbm9uY2UsIHByaXZhdGVLZXksIHRvID0gIm9iamVjdCIgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzaWduKHsKICAgICAgaGFzaDogaGFzaEF1dGhvcml6YXRpb24oeyBjb250cmFjdEFkZHJlc3MsIGNoYWluSWQsIG5vbmNlIH0pLAogICAgICBwcml2YXRlS2V5LAogICAgICB0bwogICAgfSk7CiAgICBpZiAodG8gPT09ICJvYmplY3QiKQogICAgICByZXR1cm4gewogICAgICAgIGNvbnRyYWN0QWRkcmVzcywKICAgICAgICBjaGFpbklkLAogICAgICAgIG5vbmNlLAogICAgICAgIC4uLnNpZ25hdHVyZQogICAgICB9OwogICAgcmV0dXJuIHNpZ25hdHVyZTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvdXRpbHMvc2lnbk1lc3NhZ2UuanMKICBhc3luYyBmdW5jdGlvbiBzaWduTWVzc2FnZTIoeyBtZXNzYWdlLCBwcml2YXRlS2V5IH0pIHsKICAgIHJldHVybiBhd2FpdCBzaWduKHsgaGFzaDogaGFzaE1lc3NhZ2UobWVzc2FnZSksIHByaXZhdGVLZXksIHRvOiAiaGV4IiB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvdXRpbHMvc2lnblRyYW5zYWN0aW9uLmpzCiAgaW5pdF9rZWNjYWsyNTYoKTsKICBhc3luYyBmdW5jdGlvbiBzaWduVHJhbnNhY3Rpb24yKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsgcHJpdmF0ZUtleSwgdHJhbnNhY3Rpb24sIHNlcmlhbGl6ZXIgPSBzZXJpYWxpemVUcmFuc2FjdGlvbiB9ID0gcGFyYW1ldGVyczsKICAgIGNvbnN0IHNpZ25hYmxlVHJhbnNhY3Rpb24gPSAoKCkgPT4gewogICAgICBpZiAodHJhbnNhY3Rpb24udHlwZSA9PT0gImVpcDQ4NDQiKQogICAgICAgIHJldHVybiB7CiAgICAgICAgICAuLi50cmFuc2FjdGlvbiwKICAgICAgICAgIHNpZGVjYXJzOiBmYWxzZQogICAgICAgIH07CiAgICAgIHJldHVybiB0cmFuc2FjdGlvbjsKICAgIH0pKCk7CiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzaWduKHsKICAgICAgaGFzaDoga2VjY2FrMjU2KHNlcmlhbGl6ZXIoc2lnbmFibGVUcmFuc2FjdGlvbikpLAogICAgICBwcml2YXRlS2V5CiAgICB9KTsKICAgIHJldHVybiBzZXJpYWxpemVyKHRyYW5zYWN0aW9uLCBzaWduYXR1cmUpOwogIH0KCiAgLy8gbm9kZV9tb2R1bGVzL3ZpZW0vX2VzbS9hY2NvdW50cy91dGlscy9zaWduVHlwZWREYXRhLmpzCiAgYXN5bmMgZnVuY3Rpb24gc2lnblR5cGVkRGF0YTIocGFyYW1ldGVycykgewogICAgY29uc3QgeyBwcml2YXRlS2V5LCAuLi50eXBlZERhdGEgfSA9IHBhcmFtZXRlcnM7CiAgICByZXR1cm4gYXdhaXQgc2lnbih7CiAgICAgIGhhc2g6IGhhc2hUeXBlZERhdGEodHlwZWREYXRhKSwKICAgICAgcHJpdmF0ZUtleSwKICAgICAgdG86ICJoZXgiCiAgICB9KTsKICB9CgogIC8vIG5vZGVfbW9kdWxlcy92aWVtL19lc20vYWNjb3VudHMvcHJpdmF0ZUtleVRvQWNjb3VudC5qcwogIGZ1bmN0aW9uIHByaXZhdGVLZXlUb0FjY291bnQocHJpdmF0ZUtleSwgb3B0aW9ucyA9IHt9KSB7CiAgICBjb25zdCB7IG5vbmNlTWFuYWdlcjogbm9uY2VNYW5hZ2VyMiB9ID0gb3B0aW9uczsKICAgIGNvbnN0IHB1YmxpY0tleSA9IHRvSGV4KHNlY3AyNTZrMS5nZXRQdWJsaWNLZXkocHJpdmF0ZUtleS5zbGljZSgyKSwgZmFsc2UpKTsKICAgIGNvbnN0IGFkZHJlc3MgPSBwdWJsaWNLZXlUb0FkZHJlc3MocHVibGljS2V5KTsKICAgIGNvbnN0IGFjY291bnQgPSB0b0FjY291bnQoewogICAgICBhZGRyZXNzLAogICAgICBub25jZU1hbmFnZXI6IG5vbmNlTWFuYWdlcjIsCiAgICAgIGFzeW5jIHNpZ24oeyBoYXNoOiBoYXNoMyB9KSB7CiAgICAgICAgcmV0dXJuIHNpZ24oeyBoYXNoOiBoYXNoMywgcHJpdmF0ZUtleSwgdG86ICJoZXgiIH0pOwogICAgICB9LAogICAgICBhc3luYyBleHBlcmltZW50YWxfc2lnbkF1dGhvcml6YXRpb24oYXV0aG9yaXphdGlvbikgewogICAgICAgIHJldHVybiBleHBlcmltZW50YWxfc2lnbkF1dGhvcml6YXRpb24oeyAuLi5hdXRob3JpemF0aW9uLCBwcml2YXRlS2V5IH0pOwogICAgICB9LAogICAgICBhc3luYyBzaWduTWVzc2FnZSh7IG1lc3NhZ2UgfSkgewogICAgICAgIHJldHVybiBzaWduTWVzc2FnZTIoeyBtZXNzYWdlLCBwcml2YXRlS2V5IH0pOwogICAgICB9LAogICAgICBhc3luYyBzaWduVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIHsgc2VyaWFsaXplciB9ID0ge30pIHsKICAgICAgICByZXR1cm4gc2lnblRyYW5zYWN0aW9uMih7IHByaXZhdGVLZXksIHRyYW5zYWN0aW9uLCBzZXJpYWxpemVyIH0pOwogICAgICB9LAogICAgICBhc3luYyBzaWduVHlwZWREYXRhKHR5cGVkRGF0YSkgewogICAgICAgIHJldHVybiBzaWduVHlwZWREYXRhMih7IC4uLnR5cGVkRGF0YSwgcHJpdmF0ZUtleSB9KTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gewogICAgICAuLi5hY2NvdW50LAogICAgICBwdWJsaWNLZXksCiAgICAgIHNvdXJjZTogInByaXZhdGVLZXkiCiAgICB9OwogIH0KCiAgLy8gbGlicy9zaGlua2FpLXZpZW0vc3JjL2luZGV4LnRzCiAgd2luZG93LnZpZW0gPSBlc21fZXhwb3J0czsKICB3aW5kb3cuY2hhaW5zID0gY2hhaW5zX2V4cG9ydHM7CiAgdmFyIFZpZW1Qcm92aWRlciA9IGNsYXNzIHsKICAgIGNsaWVudDsKICAgIHNlbGVjdGVkQWRkcmVzczsKICAgIGNvbnN0cnVjdG9yKGNoYWluLCBzaykgewogICAgICBjb25zdCBwcml2YXRlS2V5ID0gc2s7CiAgICAgIGNvbnN0IGFjY291bnQgPSBwcml2YXRlS2V5VG9BY2NvdW50KHByaXZhdGVLZXkpOwogICAgICB0aGlzLmNsaWVudCA9IGNyZWF0ZVdhbGxldENsaWVudCh7CiAgICAgICAgYWNjb3VudCwKICAgICAgICBjaGFpbjogY2hhaW4gfHwgYmFzZVNlcG9saWEsCiAgICAgICAgdHJhbnNwb3J0OiBodHRwKCJodHRwczovL3NlcG9saWEuYmFzZS5vcmciKQogICAgICB9KS5leHRlbmQocHVibGljQWN0aW9ucyk7CiAgICAgIHRoaXMuY2xpZW50LmdldEFkZHJlc3NlcygpLnRoZW4oKGFkZHJlc3NlcykgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJhZGRyZXNzZXMiLCBhZGRyZXNzZXMpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzc2VzWzBdOwogICAgICB9KTsKICAgIH0KICAgIGFzeW5jIGVuYWJsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdEFjY291bnRzKCk7CiAgICB9CiAgICBhc3luYyByZXF1ZXN0KHsgbWV0aG9kLCBwYXJhbXMgfSkgewogICAgICBjb25zb2xlLmxvZygicmVxdWVzdCIsIG1ldGhvZCwgcGFyYW1zKTsKICAgICAgc3dpdGNoIChtZXRob2QpIHsKICAgICAgICBjYXNlICJldGhfcmVxdWVzdEFjY291bnRzIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RBY2NvdW50cygpOwogICAgICAgIGNhc2UgImV0aF9hY2NvdW50cyI6CiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBY2NvdW50cygpOwogICAgICAgIGNhc2UgImV0aF9zZW5kVHJhbnNhY3Rpb24iOgogICAgICAgICAgcmV0dXJuIHRoaXMuc2VuZFRyYW5zYWN0aW9uKHBhcmFtc1swXSk7CiAgICAgICAgY2FzZSAiZXRoX3NpZ24iOgogICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbihwYXJhbXNbMF0sIHBhcmFtc1sxXSk7CiAgICAgICAgY2FzZSAicGVyc29uYWxfc2lnbiI6CiAgICAgICAgICByZXR1cm4gdGhpcy5wZXJzb25hbFNpZ24ocGFyYW1zWzBdLCBwYXJhbXNbMV0pOwogICAgICAgIGNhc2UgImV0aF9zaWduVHlwZWREYXRhIjoKICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25UeXBlZERhdGEocGFyYW1zWzBdLCBwYXJhbXNbMV0pOwogICAgICAgIGNhc2UgImV0aF9jaGFpbklkIjoKICAgICAgICAgIHJldHVybiB0aGlzLmdldENoYWluSWQoKTsKICAgICAgICBjYXNlICJuZXRfdmVyc2lvbiI6CiAgICAgICAgICByZXR1cm4gdGhpcy5nZXROZXR3b3JrSWQoKTsKICAgICAgICBjYXNlICJldGhfYmxvY2tOdW1iZXIiOgogICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QmxvY2tOdW1iZXIoKTsKICAgICAgICBjYXNlICJldGhfZ2V0VHJhbnNhY3Rpb25Db3VudCI6CiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvbkNvdW50KHBhcmFtc1swXSk7CiAgICAgICAgY2FzZSAiZXRoX2dldFRyYW5zYWN0aW9uQnlIYXNoIjoKICAgICAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uKHBhcmFtc1swXSk7CiAgICAgICAgY2FzZSAiZXRoX2dldFRyYW5zYWN0aW9uUmVjZWlwdCI6CiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvblJlY2VpcHQocGFyYW1zWzBdKTsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBtZXRob2Q6ICR7bWV0aG9kfWApOwogICAgICB9CiAgICB9CiAgICBhc3luYyBnZXRUcmFuc2FjdGlvbihoYXNoMykgewogICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IHRoaXMuY2xpZW50LmdldFRyYW5zYWN0aW9uKHsgaGFzaDogaGFzaDMgfSk7CiAgICAgIGNvbnNvbGUubG9nKCJnZXRUcmFuc2FjdGlvbiIsIHRyYW5zYWN0aW9uKTsKICAgICAgaWYgKHRyYW5zYWN0aW9uLnR5cGUgPT09ICJlaXAxNTU5IikgewogICAgICAgIHRyYW5zYWN0aW9uLnR5cGUgPSAiMHgyIjsKICAgICAgfQogICAgICByZXR1cm4gdHJhbnNhY3Rpb247CiAgICB9CiAgICBhc3luYyBnZXRUcmFuc2FjdGlvblJlY2VpcHQoaGFzaDMpIHsKICAgICAgY29uc3QgcmVjZWlwdCA9IGF3YWl0IHRoaXMuY2xpZW50LmdldFRyYW5zYWN0aW9uUmVjZWlwdCh7IGhhc2g6IGhhc2gzIH0pOwogICAgICBjb25zb2xlLmxvZygiZ2V0VHJhbnNhY3Rpb25SZWNlaXB0IiwgcmVjZWlwdCk7CiAgICAgIGlmIChyZWNlaXB0LnR5cGUgPT09ICJlaXAxNTU5IikgewogICAgICAgIHJlY2VpcHQudHlwZSA9ICIweDIiOwogICAgICB9CiAgICAgIGlmIChyZWNlaXB0LnN0YXR1cyA9PT0gInN1Y2Nlc3MiKSB7CiAgICAgICAgcmVjZWlwdC5zdGF0dXMgPSAiMHgxIjsKICAgICAgfQogICAgICByZXR1cm4gcmVjZWlwdDsKICAgIH0KICAgIGFzeW5jIGdldFRyYW5zYWN0aW9uQ291bnQoYWRkcmVzcykgewogICAgICBjb25zdCB0cmFuc2FjdGlvbkNvdW50ID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0VHJhbnNhY3Rpb25Db3VudCh7IGFkZHJlc3MgfSk7CiAgICAgIGNvbnNvbGUubG9nKCJ0cmFuc2FjdGlvbkNvdW50IiwgdHJhbnNhY3Rpb25Db3VudCk7CiAgICAgIHJldHVybiB0cmFuc2FjdGlvbkNvdW50OwogICAgfQogICAgYXN5bmMgZ2V0QmxvY2tOdW1iZXIoKSB7CiAgICAgIGNvbnN0IGJsb2NrTnVtYmVyID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0QmxvY2tOdW1iZXIoKTsKICAgICAgY29uc29sZS5sb2coImJsb2NrTnVtYmVyIiwgYmxvY2tOdW1iZXIpOwogICAgICByZXR1cm4gYmxvY2tOdW1iZXI7CiAgICB9CiAgICBhc3luYyByZXF1ZXN0QWNjb3VudHMoKSB7CiAgICAgIGNvbnN0IFthZGRyZXNzXSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldEFkZHJlc3NlcygpOwogICAgICBjb25zb2xlLmxvZygicmVxdWVzdEFjY291bnRzIiwgYWRkcmVzcyk7CiAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzczsKICAgICAgcmV0dXJuIFthZGRyZXNzXTsKICAgIH0KICAgIGFzeW5jIGdldEFjY291bnRzKCkgewogICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEFkZHJlc3MgPyBbdGhpcy5zZWxlY3RlZEFkZHJlc3NdIDogW107CiAgICB9CiAgICBhc3luYyBzZW5kVHJhbnNhY3Rpb24odHgpIHsKICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQWRkcmVzcykgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gYWNjb3VudHMgYXZhaWxhYmxlIik7CiAgICAgIH0KICAgICAgaWYgKCF0eC50byB8fCAhdHgudmFsdWUgfHwgIXR4LmdhcykgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1aXJlZCB0cmFuc2FjdGlvbiBwYXJhbWV0ZXJzIik7CiAgICAgIH0KICAgICAgY29uc29sZS5sb2coInNlbmRUcmFuc2FjdGlvbiB0eDogIiwgdHgpOwogICAgICBjb25zb2xlLmxvZygiVHJhbnNhY3Rpb24gZ2FzUHJpY2U6ICIsIHR4Lmdhc1ByaWNlKTsKICAgICAgY29uc29sZS5sb2coIlRyYW5zYWN0aW9uIGdhczogIiwgdHguZ2FzKTsKICAgICAgY29uc3QgdmFsdWUgPSBCaWdJbnQodHgudmFsdWUpOwogICAgICBjb25zdCB2YWx1ZUluRXRoID0gTnVtYmVyKHZhbHVlKSAvIDEwICoqIDE4OwogICAgICBjb25zb2xlLmxvZyhgVHJhbnNhY3Rpb24gdmFsdWUgaW4gRVRIOiAke3ZhbHVlSW5FdGh9YCk7CiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uQ29udGVudCA9IHsKICAgICAgICB0bzogdHgudG8sCiAgICAgICAgdmFsdWUsCiAgICAgICAgZGF0YTogdHguZGF0YSwKICAgICAgICBjaGFpbjogdGhpcy5jbGllbnQuY2hhaW4KICAgICAgfTsKICAgICAgY29uc29sZS5sb2coInNlbmRUcmFuc2FjdGlvbiIsIHRyYW5zYWN0aW9uQ29udGVudCk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgcmVxdWVzdCA9IGF3YWl0IHRoaXMuY2xpZW50LnByZXBhcmVUcmFuc2FjdGlvblJlcXVlc3QodHJhbnNhY3Rpb25Db250ZW50KTsKICAgICAgICBjb25zb2xlLmxvZygiUHJlcGFyZWQgdHJhbnNhY3Rpb24gcmVxdWVzdDoiLCByZXF1ZXN0KTsKICAgICAgICBjb25zdCBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLmNsaWVudC5zaWduVHJhbnNhY3Rpb24ocmVxdWVzdCk7CiAgICAgICAgY29uc29sZS5sb2coIlNlcmlhbGl6ZWQgdHJhbnNhY3Rpb246Iiwgc2VyaWFsaXplZFRyYW5zYWN0aW9uKTsKICAgICAgICBjb25zdCBoYXNoMyA9IGF3YWl0IHRoaXMuY2xpZW50LnNlbmRSYXdUcmFuc2FjdGlvbih7CiAgICAgICAgICBzZXJpYWxpemVkVHJhbnNhY3Rpb24KICAgICAgICB9KTsKICAgICAgICBjb25zb2xlLmxvZygic2VuZFRyYW5zYWN0aW9uIGhhc2giLCBoYXNoMyk7CiAgICAgICAgcmV0dXJuIGhhc2gzOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoInNlbmRUcmFuc2FjdGlvbiBlcnJvciIsIGVycm9yKTsKICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgfQogICAgfQogICAgYXN5bmMgc2lnbihhZGRyZXNzLCBtZXNzYWdlKSB7CiAgICAgIGlmIChhZGRyZXNzICE9PSB0aGlzLnNlbGVjdGVkQWRkcmVzcykgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiQWRkcmVzcyBtaXNtYXRjaCIpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmNsaWVudC5zaWduTWVzc2FnZSh7IGFjY291bnQ6IGFkZHJlc3MsIG1lc3NhZ2UgfSk7CiAgICB9CiAgICBhc3luYyBwZXJzb25hbFNpZ24obWVzc2FnZSwgYWRkcmVzcykgewogICAgICBpZiAoYWRkcmVzcyAhPT0gdGhpcy5zZWxlY3RlZEFkZHJlc3MpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFkZHJlc3MgbWlzbWF0Y2giKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2lnbk1lc3NhZ2UoeyBhY2NvdW50OiBhZGRyZXNzLCBtZXNzYWdlIH0pOwogICAgfQogICAgYXN5bmMgc2lnblR5cGVkRGF0YShhZGRyZXNzLCB0eXBlZERhdGEpIHsKICAgICAgaWYgKGFkZHJlc3MgIT09IHRoaXMuc2VsZWN0ZWRBZGRyZXNzKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBZGRyZXNzIG1pc21hdGNoIik7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNpZ25UeXBlZERhdGEoewogICAgICAgIGFjY291bnQ6IGFkZHJlc3MsCiAgICAgICAgZG9tYWluOiB0eXBlZERhdGEuZG9tYWluLAogICAgICAgIHR5cGVzOiB0eXBlZERhdGEudHlwZXMsCiAgICAgICAgbWVzc2FnZTogdHlwZWREYXRhLm1lc3NhZ2UsCiAgICAgICAgcHJpbWFyeVR5cGU6IHR5cGVkRGF0YS5wcmltYXJ5VHlwZQogICAgICB9KTsKICAgIH0KICAgIGFzeW5jIGdldENoYWluSWQoKSB7CiAgICAgIGNvbnN0IGNoYWluSWQgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRDaGFpbklkKCk7CiAgICAgIGNvbnNvbGUubG9nKCJnZXRDaGFpbklkIiwgY2hhaW5JZCk7CiAgICAgIHJldHVybiBjaGFpbklkOwogICAgfQogICAgYXN5bmMgZ2V0TmV0d29ya0lkKCkgewogICAgICBjb25zdCBjaGFpbklkID0gYXdhaXQgdGhpcy5nZXRDaGFpbklkKCk7CiAgICAgIHJldHVybiBjaGFpbklkLnRvU3RyaW5nKCk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBhZGRFaXA2OTYzTGlzdGVuZXIoaW5mbywgcHJvdmlkZXIpIHsKICAgIGNvbnN0IGFubm91bmNlRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoCiAgICAgICJlaXA2OTYzOmFubm91bmNlUHJvdmlkZXIiLAogICAgICB7CiAgICAgICAgZGV0YWlsOiBPYmplY3QuZnJlZXplKHsgaW5mbywgcHJvdmlkZXIgfSkKICAgICAgfQogICAgKTsKICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGFubm91bmNlRXZlbnQpOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImVpcDY5NjM6cmVxdWVzdFByb3ZpZGVyIiwgKCkgPT4gewogICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChhbm5vdW5jZUV2ZW50KTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiBpbml0aWFsaXplVmllbVByb3ZpZGVyKGNoYWluLCBwcm92aWRlckluZm8sIHNrKSB7CiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBWaWVtUHJvdmlkZXIoY2hhaW4sIHNrKTsKICAgIHdpbmRvdy5ldGhlcmV1bSA9IHsKICAgICAgcmVxdWVzdDogcHJvdmlkZXIucmVxdWVzdC5iaW5kKHByb3ZpZGVyKSwKICAgICAgZW5hYmxlOiBwcm92aWRlci5lbmFibGUuYmluZChwcm92aWRlciksCiAgICAgIG9uOiAoZXZlbnROYW1lLCBjYWxsYmFjaykgPT4gewogICAgICAgIGNvbnNvbGUubG9nKGBFdmVudCBsaXN0ZW5lciBmb3IgJHtldmVudE5hbWV9IGFkZGVkLmApOwogICAgICB9LAogICAgICByZW1vdmVMaXN0ZW5lcjogKGV2ZW50TmFtZSwgY2FsbGJhY2spID0+IHsKICAgICAgICBjb25zb2xlLmxvZyhgRXZlbnQgbGlzdGVuZXIgZm9yICR7ZXZlbnROYW1lfSByZW1vdmVkLmApOwogICAgICB9LAogICAgICBpc0Nvbm5lY3RlZDogKCkgPT4gewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9LAogICAgICBzZW5kOiAobWV0aG9kLCBwYXJhbXMpID0+IHsKICAgICAgICBjb25zb2xlLndhcm4oInNlbmQgaXMgZGVwcmVjYXRlZC4gVXNlIHJlcXVlc3QgaW5zdGVhZC4iKTsKICAgICAgICByZXR1cm4gcHJvdmlkZXIucmVxdWVzdCh7IG1ldGhvZCwgcGFyYW1zIH0pOwogICAgICB9LAogICAgICBzZW5kQXN5bmM6IChwYXlsb2FkLCBjYWxsYmFjaykgPT4gewogICAgICAgIGNvbnNvbGUud2Fybigic2VuZEFzeW5jIGlzIGRlcHJlY2F0ZWQuIFVzZSByZXF1ZXN0IGluc3RlYWQuIik7CiAgICAgICAgcHJvdmlkZXIucmVxdWVzdCh7IG1ldGhvZDogcGF5bG9hZC5tZXRob2QsIHBhcmFtczogcGF5bG9hZC5wYXJhbXMgfSkudGhlbigocmVzdWx0KSA9PiBjYWxsYmFjayhudWxsLCB7IHJlc3VsdCB9KSkuY2F0Y2goKGVycm9yKSA9PiBjYWxsYmFjayhlcnJvciwgbnVsbCkpOwogICAgICB9LAogICAgICBpc01ldGFNYXNrOiB0cnVlLAogICAgICAvLyBTZXQgdG8gdHJ1ZSBpZiBtaW1pY2tpbmcgTWV0YU1hc2sKICAgICAgc2VsZWN0ZWRBZGRyZXNzOiBwcm92aWRlci5zZWxlY3RlZEFkZHJlc3MsCiAgICAgIGNoYWluSWQ6IGNoYWluPy5pZCB8fCAiMHgxIgogICAgICAvLyBEZWZhdWx0IHRvIG1haW5uZXQgaWYgY2hhaW4gaXMgbm90IHByb3ZpZGVkCiAgICB9OwogICAgYWRkRWlwNjk2M0xpc3RlbmVyKHByb3ZpZGVySW5mbywgcHJvdmlkZXIpOwogICAgY29uc29sZS5sb2coIlZpZW0gcHJvdmlkZXIgaW5pdGlhbGl6ZWQiKTsKICB9CiAgdmFyIHZpZW1Qcm92aWRlckluZm8gPSB7CiAgICB1dWlkOiAiZDY5YmM0YzQtZTQzYS00ZDBhLTgzZDctYjZlN2I3NTA0YmViIiwKICAgIG5hbWU6ICJTaGlua2FpIFZpZW0gUHJvdmlkZXIiLAogICAgaWNvbjogImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU16WTNJaUJvWldsbmFIUTlJak0yTnlJZ2RtbGxkMEp2ZUQwaU1DQXdJRE0yTnlBek5qY2lJR1pwYkd3OUltNXZibVVpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUkrQ2p4amFYSmpiR1VnWTNnOUlqRTRNeTQxSWlCamVUMGlNVGd6TGpVaUlISTlJakU0TXk0MUlpQm1hV3hzUFNJalJrVTJNVFl5SWk4K0NqeHdZWFJvSUdROUlrMHlOekl1TWprMUlESTNOQzQyTmpoRE1qY3dMamMxT0NBeU5qZ3VPVGMxSURJMk5pNDJNVGtnTWpZMkxqSXhOU0F5TmpBdU9EUTBJREkyTmk0M056bERNalE1TGpZMk5DQXlOamN1T0RZeklESTBOUzQ1TlRJZ01qWTBMakkzT1NBeU5EQXVOalEySURJMU5pNDBNRFJETWpVMExqWXlPQ0F5TlRrdU16WTNJREkyTXk0Mk5EWWdNalUxTGpjeU5TQXlOall1TkRZeklESTFOQzR4TURkRE1qY3dMakE1SURJMU1pNHdNVElnTWpjekxqYzJJREkwT1M0ek1qUWdNamN5TGpNd09TQXlORFF1TlRnMVF6STNNQzQ0T0RZZ01qTTVMamswTnlBeU5qWXVOakU1SURJek9TNHdNaklnTWpZeUxqSXpPQ0F5TXprdU9EWkRNalUyTGpBeU1pQXlOREV1TURRMUlESTFNQzR3TmpJZ01qUXhMamN6T0NBeU5EVXVNakkySURJek5TNDJPRFJETWpRMkxqSTFJREl6TkM0M05Ua2dNalEzTGpJM05DQXlNek11T0RBMklESTBPQzR6TWpjZ01qTXlMamc1TlVNeU5UQXVPVEF5SURJek1DNDJPRFVnTWpVeUxqZzVNeUF5TWpndU1EZzBJREkxTVM0MU9EUWdNakkwTGpVM00wTXlOVEF1TXpNeklESXlNUzR5TWlBeU5EY3VNVFl4SURJeE9TNHlPVGtnTWpRekxqa3pNaUF5TVRrdU9Ea3hRekkwTVM0eklESXlNQzR6T0RJZ01qTTJMakF5TXlBeU1qSXVNRE1nTWpNMExqUXhOaUF5TVRrdU16UXlUREl6TkM0ME9EY2dNakU1TGpNeE0wTXlNek11T0RjMUlESXhPUzR4TmprZ01qTXlMamt6TnlBeU1UWXVOalUwSURJek1pNDNNemNnTWpFMExqZ3hPVU15TXpFdU56azVJREl3TlM0NE5EWWdNak0xTGpZNE1pQXhPVGN1TWpNMUlESTBNQzQ1TVRZZ01Ua3dMakE0TWtNeU5EY3VORFExSURFNE1TNHhPVFlnTWpVeExqa3lOaUF4TnpFdU16azVJREkxTXk0NU1UY2dNVFl3TGpVek0wTXlOVGN1TURNeUlERTBNeTQwT0RNZ01qVXpMamN6TWlBeE1qY3VOakU0SURJME5DNDFNVFVnTVRFekxqQXpPVU15TXpNdU5UYzNJRGsxTGpjeU9ETWdNakU0TGpFMU9DQTROQzR6TWpjNElERTVOeTQ0TmlBNE1DNHhNemMxUXpFNU15NHdPVFVnTnprdU1UVTFJREU0T0M0ME5EUWdOemd1TmpNME9DQXhPRE11T1RNMUlEYzRMalUwT0RGRE1UYzVMalF4TVNBM09DNDJNelE0SURFM05DNDNOelFnTnprdU1UVTFJREUzTUM0d01Ea2dPREF1TVRNM05VTXhORGt1TnpJMklEZzBMak15TnpnZ01UTTBMakk1TXlBNU5TNDNNamd6SURFeU15NHpOVFFnTVRFekxqQXpPVU14TVRRdU1UVXhJREV5Tnk0Mk1UZ2dNVEV3TGpnMU1TQXhORE11TkRneklERXhNeTQ1TlRJZ01UWXdMalV6TTBNeE1UVXVPVEk1SURFM01TNDBNVFFnTVRJd0xqUXlOQ0F4T0RFdU1UazJJREV5Tmk0NU5UTWdNVGt3TGpBNE1rTXhNekl1TWpBeUlERTVOeTR5TXpVZ01UTTJMakE0TlNBeU1EVXVPRE15SURFek5TNHhNeklnTWpFMExqZ3hPVU14TXpRdU9UTXpJREl4Tmk0Mk5UUWdNVE16TGprNU5DQXlNVGt1TVRZNUlERXpNeTR6T0RJZ01qRTVMak14TTB3eE16TXVORFV6SURJeE9TNHpOREpETVRNeExqZzBOaUF5TWpJdU1ERTFJREV5Tmk0MU9ETWdNakl3TGpNNE1pQXhNak11T1RNNElESXhPUzQ0T1RGRE1USXdMamN5TXlBeU1Ua3VNams1SURFeE55NDFNemNnTWpJeExqSXlJREV4Tmk0eU9EVWdNakkwTGpVM00wTXhNVFF1T1RjMklESXlPQzR3T0RRZ01URTJMamsxTkNBeU16QXVOamcxSURFeE9TNDFORElnTWpNeUxqZzVOVU14TWpBdU5UazFJREl6TXk0NE1EWWdNVEl4TGpZeE9TQXlNelF1TnpVNUlERXlNaTQyTkRNZ01qTTFMalk0TkVNeE1UY3VPREEzSURJME1TNDNNemdnTVRFeExqZ3pNeUF5TkRFdU1EUTFJREV3TlM0Mk16RWdNak01TGpnMlF6RXdNUzR5TlNBeU16a3VNREl5SURrMkxqazRNamtnTWpNNUxqazBOeUE1TlM0MU5qQTFJREkwTkM0MU9EVkRPVFF1TVRBNU55QXlORGt1TXpJMElEazNMamMzT1RVZ01qVXlMakF4TWlBeE1ERXVOREEzSURJMU5DNHhNRGRETVRBMExqSXdPU0F5TlRVdU56STFJREV4TXk0eU5ERWdNalU1TGpNMU1pQXhNamN1TWpJeklESTFOaTQwTURSRE1USXhMamt4T0NBeU5qUXVNamM1SURFeE9DNHlNRFVnTWpZM0xqZzJNeUF4TURjdU1ESTFJREkyTmk0M056bERNVEF4TGpJMUlESTJOaTR5TVRVZ09UY3VNRGsyTnlBeU5qZ3VPVGMxSURrMUxqVTNORGNnTWpjMExqWTJPRU01TkM0d09ERXlJREk0TUM0eU16RWdPVGN1TURJMU5pQXlPRFF1TWpFNUlERXdNUzQyT1RFZ01qZzJMamczT0VNeE1EUXVOelE1SURJNE9DNDJNVElnTVRBNExqRTJNeUF5T0RrdU1qa3hJREV4TVM0M056WWdNamc1TGpNME9VTXhNekV1TlRZeUlESTRPUzQyTWpNZ01UUTNMamc1TVNBeU9ERXVORFU1SURFMk1pNDFPVGtnTWpZNUxqRTNPRU14TnpBdU5qa3lJREkyTWk0ME1UVWdNVGMzTGpNME9TQXlOVGd1T1RreElERTRNeTQ1TkRrZ01qVTRMamt3TkVNeE9UQXVOVFE1SURJMU9DNDVPVEVnTVRrM0xqRTVNU0F5TmpJdU5ERTFJREl3TlM0eU9Ua2dNalk1TGpFM09FTXlNakF1TURBM0lESTRNUzQwTlRrZ01qTTJMak16TmlBeU9Ea3VOakl6SURJMU5pNHhNaklnTWpnNUxqTTBPVU15TlRrdU56TTFJREk0T1M0ek1EVWdNall6TGpFME9DQXlPRGd1TmpFeUlESTJOaTR5TURjZ01qZzJMamczT0VNeU56QXVPRGcySURJNE5DNHlNVGtnTWpjekxqZ3hOeUF5T0RBdU1qTXhJREkzTWk0ek1qTWdNamMwTGpZMk9FZ3lOekl1TWprMVdrMHhOVFl1TmpJMElESXdOeTR5TmpKRE1UVXdMalV3T0NBeU1EY3VNalE0SURFME5TNDBOVGtnTWpBeUxqRXpNeUF4TkRVdU5EUTBJREU1TlM0NU5qTkRNVFExTGpRME5DQXhPRGt1TmpjNElERTFNQzQxTlRFZ01UZzBMalV6TkNBeE5UWXVPRFV5SURFNE5DNDBOelpETVRZeUxqZzBJREU0TkM0ME1UZ2dNVFk0TGpFM05DQXhPVEF1TURrM0lERTJPQzR4TVRjZ01UazJMalEyT1VNeE5qZ3VNRFl4SURJd01pNDNPRE1nTVRZekxqSTFNeUF5TURjdU1qa3hJREUxTmk0Mk1qUWdNakEzTGpJMk1scE5NakV4TGpJek1TQXlNRGN1TWpZeVF6SXdOQzQxT0RnZ01qQTNMakk1TVNBeE9Ua3VOemsxSURJd01pNDNOamtnTVRrNUxqY3pPQ0F4T1RZdU5EWTVRekU1T1M0Mk9ERWdNVGt3TGpBNU55QXlNRFV1TURJNUlERTROQzQwTVRnZ01qRXhMakF3TXlBeE9EUXVORGMyUXpJeE55NHpNRFFnTVRnMExqVTBPQ0F5TWpJdU5ERXhJREU0T1M0Mk9USWdNakl5TGpReE1TQXhPVFV1T1RZelF6SXlNaTQwTVRFZ01qQXlMakV6TXlBeU1UY3VNelEzSURJd055NHlORGdnTWpFeExqSXpNU0F5TURjdU1qWXlXaUlnWm1sc2JEMGlkMmhwZEdVaUx6NEtQQzl6ZG1jK0NnPT0iLAogICAgLy8gQmFzZTY0IGVuY29kZWQgaWNvbgogICAgcmRuczogImNvbS5zaGlua2FpLmRlc2t0b3AiCiAgfTsKICB3aW5kb3cuaW5pdFZpZW1Qcm92aWRlciA9IGZ1bmN0aW9uKHNrKSB7CiAgICBpbml0aWFsaXplVmllbVByb3ZpZGVyKGJhc2VTZXBvbGlhLCB2aWVtUHJvdmlkZXJJbmZvLCBzayk7CiAgfTsKfSkoKTsKLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjoKCkBub2JsZS9oYXNoZXMvZXNtL3V0aWxzLmpzOgogICgqISBub2JsZS1oYXNoZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKikKCkBub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L3V0aWxzLmpzOgogICgqISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKikKCkBub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L21vZHVsYXIuanM6CiAgKCohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqKQoKQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvY3VydmUuanM6CiAgKCohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqKQoKQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3Qvd2VpZXJzdHJhc3MuanM6CiAgKCohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqKQoKQG5vYmxlL2N1cnZlcy9lc20vX3Nob3J0d191dGlscy5qczoKICAoKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICopCgpAbm9ibGUvY3VydmVzL2VzbS9zZWNwMjU2azEuanM6CiAgKCohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqKQoqLwo="; diff --git a/apps/shinkai-tool-aave-loan-requester/src/index.test.ts b/apps/shinkai-tool-aave-loan-requester/src/index.test.ts index beb04bd..57dcf11 100644 --- a/apps/shinkai-tool-aave-loan-requester/src/index.test.ts +++ b/apps/shinkai-tool-aave-loan-requester/src/index.test.ts @@ -1,5 +1,7 @@ import { Tool } from '../src/index'; +const timeout = 60 * 60 * 1000; + test('exists definition', async () => { const tool = new Tool({}); const definition = tool.getDefinition(); @@ -7,13 +9,14 @@ test('exists definition', async () => { }); test('run definition', async () => { + const secretKey = 'b869541ac1dcd6ef40a9adb731908e67544314744db071b9fb45056a813048cd'; const tool = new Tool({ chromePath: process.env?.CHROME_PATH, }); const run_result = await tool.run({ inputValue: '0.005', assetSymbol: 'ETH', - secretKey: '0x{{your-secret-key}}', + secretKey: `0x${secretKey}`, }); console.log(run_result); -}, 25000); +}, timeout); diff --git a/apps/shinkai-tool-aave-loan-requester/src/index.ts b/apps/shinkai-tool-aave-loan-requester/src/index.ts index 5527320..379c885 100644 --- a/apps/shinkai-tool-aave-loan-requester/src/index.ts +++ b/apps/shinkai-tool-aave-loan-requester/src/index.ts @@ -9,9 +9,12 @@ import * as fs from 'fs'; import * as path from 'path'; import { viemScriptContent } from './bundled-resources/shinkai-viem'; +const timeout = 50 * 60 * 1000; + type Config = { chromePath?: string; }; + type Params = { inputValue: string; assetSymbol: string; @@ -83,20 +86,20 @@ export class Tool extends BaseTool { console.log('Viem script injected'); }, Buffer.from(viemScriptContent, 'base64').toString('utf-8')); - // Call alert('hello') on the page + // Initialize the viem provider await page.evaluate((secretKey) => { - console.log('hello', secretKey); - alert('hello'); (window as any).initViemProvider(secretKey); }, params.secretKey); // Click the "Opt-out" button // Wait for the "Opt-out" button to appear and click it - await page.waitForSelector('#rcc-decline-button > p'); + console.log('10 Waiting for selector'); + await page.waitForSelector('#rcc-decline-button > p', { timeout: timeout }); await page.click('#rcc-decline-button > p'); // Click the wallet button - await page.waitForSelector('#wallet-button'); + console.log('20 Waiting for selector'); + await page.waitForSelector('#wallet-button', { timeout: timeout }); await page.click('#wallet-button'); // Click the "Browser wallet" button @@ -138,8 +141,10 @@ export class Tool extends BaseTool { console.log('Action button clicked'); // Wait for the specified selector with a more flexible approach + console.log('30 Waiting for selector'); await page.waitForSelector( 'body > div.MuiModal-root > div.MuiPaper-root.MuiPaper-elevation.MuiPaper-rounded.MuiPaper-elevation1 > div.MuiBox-root > h2', + { timeout: timeout }, ); // Take a screenshot and save it to ./tmp/ diff --git a/apps/shinkai-tool-aave-state/src/bundled-resources/shinkai-viem.js b/apps/shinkai-tool-aave-state/src/bundled-resources/shinkai-viem.js index 04b35e3..b9db79a 100644 --- a/apps/shinkai-tool-aave-state/src/bundled-resources/shinkai-viem.js +++ b/apps/shinkai-tool-aave-state/src/bundled-resources/shinkai-viem.js @@ -44818,14 +44818,12 @@ zurdo`.split("\n"); client; selectedAddress; constructor(chain, sk) { - const privateKey = sk || "0xf4c1c6d9231a5f08aa8d9824a142c4fc5a663ca1a6ecd61126e54a0d7501df82"; + const privateKey = sk; const account = privateKeyToAccount(privateKey); this.client = createWalletClient({ account, - chain: chain || arbitrumSepolia, - transport: http( - "https://arbitrum-sepolia.blockpi.network/v1/rpc/public" - ) + chain: chain || baseSepolia, + transport: http("https://sepolia.base.org") }).extend(publicActions); this.client.getAddresses().then((addresses) => { console.log("addresses", addresses); @@ -44985,8 +44983,8 @@ zurdo`.split("\n"); window.dispatchEvent(announceEvent); }); } - function initializeViemProvider(chain, providerInfo) { - const provider = new ViemProvider(chain, null); + function initializeViemProvider(chain, providerInfo, sk) { + const provider = new ViemProvider(chain, sk); window.ethereum = { request: provider.request.bind(provider), enable: provider.enable.bind(provider), @@ -45023,7 +45021,9 @@ zurdo`.split("\n"); // Base64 encoded icon rdns: "com.shinkai.desktop" }; - initializeViemProvider(arbitrumSepolia, viemProviderInfo); + window.initViemProvider = function(sk) { + initializeViemProvider(baseSepolia, viemProviderInfo, sk); + }; })(); /*! Bundled license information: diff --git a/libs/shinkai-tools-runner/src/built_in_tools.rs b/libs/shinkai-tools-runner/src/built_in_tools.rs index 1bc95e6..e476389 100644 --- a/libs/shinkai-tools-runner/src/built_in_tools.rs +++ b/libs/shinkai-tools-runner/src/built_in_tools.rs @@ -237,6 +237,16 @@ lazy_static! { .unwrap(), )), ); + m.insert( + "shinkai-tool-aave-dashboard", + &*Box::leak(Box::new( + serde_json::from_str::(include_str!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/tools/shinkai-tool-aave-dashboard/definition.json" + ))) + .unwrap(), + )), + ); // ntim: New tools will be inserted here, don't remove this comment m }; diff --git a/libs/shinkai-viem/src/index.ts b/libs/shinkai-viem/src/index.ts index 80290e2..e57bec0 100644 --- a/libs/shinkai-viem/src/index.ts +++ b/libs/shinkai-viem/src/index.ts @@ -6,9 +6,6 @@ import { privateKeyToAccount } from 'viem/accounts'; // Assign to window object (window as any).viem = viem; (window as any).chains = chains; -(window as any).holaDaniel = function () { - console.log('hola Daniel3333'); -}; // EIP-1193 Provider Implementation class ViemProvider { @@ -248,7 +245,7 @@ function addEip6963Listener(info: EIP6963ProviderInfo, provider: ViemProvider) { // Function to initialize and assign the provider to window.ethereum function initializeViemProvider(chain: any, providerInfo: EIP6963ProviderInfo, sk: string) { - const provider = new ViemProvider(chain, sk); // TODO: remove null + const provider = new ViemProvider(chain, sk); (window as any).ethereum = { request: provider.request.bind(provider), @@ -300,7 +297,6 @@ const viemProviderInfo: EIP6963ProviderInfo = { // Initialize the provider for Base Sepolia by default (window as any).initViemProvider = function (sk: string) { - console.log(`hola Daniel, vamos a inicializar el provider con la sk: ${sk}`); initializeViemProvider(chains.baseSepolia, viemProviderInfo, sk); }; From 2aec2c2e549ae2b609a359dd34d6d9351f30a0f2 Mon Sep 17 00:00:00 2001 From: Daniel Baez Date: Mon, 16 Sep 2024 15:58:39 -0500 Subject: [PATCH 3/3] feature/aave-loan-requester: removes extra changes --- .../src/index.test.ts | 2 +- apps/shinkai-tool-aave-loan-requester/src/index.ts | 11 ++--------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/apps/shinkai-tool-aave-loan-requester/src/index.test.ts b/apps/shinkai-tool-aave-loan-requester/src/index.test.ts index 57dcf11..6a29d26 100644 --- a/apps/shinkai-tool-aave-loan-requester/src/index.test.ts +++ b/apps/shinkai-tool-aave-loan-requester/src/index.test.ts @@ -1,6 +1,6 @@ import { Tool } from '../src/index'; -const timeout = 60 * 60 * 1000; +const timeout = 25000; test('exists definition', async () => { const tool = new Tool({}); diff --git a/apps/shinkai-tool-aave-loan-requester/src/index.ts b/apps/shinkai-tool-aave-loan-requester/src/index.ts index 379c885..a13d129 100644 --- a/apps/shinkai-tool-aave-loan-requester/src/index.ts +++ b/apps/shinkai-tool-aave-loan-requester/src/index.ts @@ -9,8 +9,6 @@ import * as fs from 'fs'; import * as path from 'path'; import { viemScriptContent } from './bundled-resources/shinkai-viem'; -const timeout = 50 * 60 * 1000; - type Config = { chromePath?: string; }; @@ -67,7 +65,6 @@ export class Tool extends BaseTool { async run(params: Params): Promise> { const browser = await playwright['chromium'].launch({ executablePath: this.config?.chromePath || chromePaths.chrome, - headless: false, }); const context = await browser.newContext({ viewport: { width: 1280, height: 800 }, // Set viewport size @@ -93,13 +90,11 @@ export class Tool extends BaseTool { // Click the "Opt-out" button // Wait for the "Opt-out" button to appear and click it - console.log('10 Waiting for selector'); - await page.waitForSelector('#rcc-decline-button > p', { timeout: timeout }); + await page.waitForSelector('#rcc-decline-button > p'); await page.click('#rcc-decline-button > p'); // Click the wallet button - console.log('20 Waiting for selector'); - await page.waitForSelector('#wallet-button', { timeout: timeout }); + await page.waitForSelector('#wallet-button'); await page.click('#wallet-button'); // Click the "Browser wallet" button @@ -141,10 +136,8 @@ export class Tool extends BaseTool { console.log('Action button clicked'); // Wait for the specified selector with a more flexible approach - console.log('30 Waiting for selector'); await page.waitForSelector( 'body > div.MuiModal-root > div.MuiPaper-root.MuiPaper-elevation.MuiPaper-rounded.MuiPaper-elevation1 > div.MuiBox-root > h2', - { timeout: timeout }, ); // Take a screenshot and save it to ./tmp/